~nizamov-shawkat/python-meep/devel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/* File : example.i */
%module(directors="1") meep
%include "typemaps.i"
%include "py_complex.i"
%include "argcargv.i"
%include "cpointer.i"
%include "carrays.i"

%apply (int ARGC, char **ARGV) { (int argc, char **argv) }

%pointer_functions(double,pdouble);
%pointer_functions(int,pint);

%rename (master_printf_orig) master_printf;
%rename (master_fprintf_orig) master_fprintf;
%rename (debug_printf_orig) debug_printf;
%rename (abort_orig) abort;
%rename (structure_orig) structure;

%rename (cprint) print;
%rename None MeepNone;
%rename (meep_type) type;
%rename (vec_abs) abs;
%rename (vecmax) max;
%rename (vecmin) min;

%array_class(double, d_array);
%array_class(std::complex <double>, cd_array);

%{

#include <meep/mympi.hpp>
#include <meep/vec.hpp>
#include <meep.hpp>
#include "custom.hpp"

%}


%ignore connections;
%ignore num_connections;
%ignore operator&&;
//%ignore operator=;
%ignore operator==;
%ignore derived_component;
//%ignore pml_profile_func;

%rename (component_name_component) component_name(component);
%rename (component_name_derived_component) component_name(derived_component);
%rename (component_direction_component) component_direction(component);
%rename (component_direction_derived_component) component_direction(derived_component);
%rename (direction_component_component) direction_component(component, direction);
%rename (direction_component_derived_component) direction_component(derived_component, direction);
%rename (coordinate_mismatch_component) coordinate_mismatch(ndim,component);
%rename (coordinate_mismatch_derived_component) coordinate_mismatch(ndim,derived_component);

/* do w neet it at all ??? current cwig seems to correctly wrap int against ndim (==int) args,  seem that we still need, see use_bloch() */
%rename (ivec_ndim) ivec(ndim);
%rename (ivec_ndim) ivec(ndim,int);
%rename (vec_ndim) vec(ndim);
%rename (vec_ndim) vec(ndim,double);


%feature("director") Callback;
%feature("autodoc","1"); 

%include <meep/mympi.hpp>
%include <meep/vec.hpp>
%include <meep.hpp>
%include "custom.hpp"

%constant double (*ONE)(const meep::vec &) = meep::return_one;

%constant double (*EPS)(const meep::vec &) = meep::eps;
%constant complex<double> (*SRC)(double t, void *) = meep::src;

%constant double (*MU)(const meep::vec &) = meep::mu;
%constant double (*COND)(const meep::vec &) = meep::cond;
%constant double (*CHI2)(const meep::vec &) = meep::chi2;
%constant double (*CHI3)(const meep::vec &) = meep::chi3;
%constant double (*SIGMA)(const meep::vec &) = meep::sigma;
%constant double (*DBL1)(const meep::vec &) = meep::dbl1;
%constant double (*DBL2)(const meep::vec &) = meep::dbl2;
%constant double (*DBL3)(const meep::vec &) = meep::dbl3;
%constant double (*DBL4)(const meep::vec &) = meep::dbl4;
%constant double (*DBL5)(const meep::vec &) = meep::dbl5;

%constant complex<double> (*INIF)(const meep::vec &) = meep::inif;
%constant complex<double> (*CMPL1)(const meep::vec &) = meep::cmpl1;
%constant complex<double> (*CMPL2)(const meep::vec &) = meep::cmpl2;
%constant complex<double> (*CMPL3)(const meep::vec &) = meep::cmpl3;
%constant complex<double> (*CMPL4)(const meep::vec &) = meep::cmpl4;
%constant complex<double> (*CMPL5)(const meep::vec &) = meep::cmpl5;

%extend meep::vec {
char *__str__(){
static char temp[512];
sprintf(temp,"Vector: x=%g, y=%g, z=%g, r=%g",$self->x(), $self->y(), $self->z(), $self->r());
return temp;
}
};

%extend meep::fields{
fields_chunk *get_chunk(const int which=0 ){
    
return (which < self->num_chunks) ? self->chunks[which] : self->chunks[0];
}
};


%extend meep::dft_flux{
void subtract(const dft_flux &fl) 
{
if ($self->E && fl.E)
    *$self->E -= *fl.E  ; 
if ($self->H && fl.H)
    *$self->H -= *fl.H  ; 
}
};

%extend meep::dft_chunk{
void subtract(const dft_chunk &fl) 
{
$self->operator-=(fl)  ;

}
};