Ejemplo n.º 1
0
 def make_fields(self):
     if self.gridSizeZ == None:
         self.meep_space = voltwo(self.gridSizeX,self.gridSizeY,self.res)
     else:
         self.meep_space = vol3d(self.gridSizeX,self.gridSizeY,self.gridSizeZ,self.res)
     material = epsilon(self.my_structure)
     set_EPS_Callback(material.__disown__())
     
     
     if self.symmetry_direction == None:
         sym = identity()
     else:
         sym = mirror(self.symmetry_direction,self.meep_space)*self.symmetry_val
         
     self.meep_structure = structure(self.meep_space, EPS, self.boundary_conditions,sym)
     
     
     the_fields = fields(self.meep_structure)
     
     for direc in self.periodic_directions:
         the_fields.set_boundary(Low,direc,Periodic)
         the_fields.set_boundary(High,direc,Periodic)
     
     
     the_fields.use_bloch(self.bloch)
     
     if self.my_source is not None:
         self.my_source.add_to_fields(the_fields)
  
     for f in self.fluxes:
         f.add_to_fields(the_fields)
     
     self.meep_fields = the_fields
     return the_fields
Ejemplo n.º 2
0
    def _init_structure(self, k=False):
        print('-' * 11)
        print('Initializing structure...')

        dims = self._infer_dimensions(k)

        if dims == 0 or dims == 1:
            gv = mp.vol1d(self.cell_size.z, self.resolution)
        elif dims == 2:
            self.dimensions = 2
            gv = mp.vol2d(self.cell_size.x, self.cell_size.y, self.resolution)
        elif dims == 3:
            gv = mp.vol3d(self.cell_size.x, self.cell_size.y, self.cell_size.z, self.resolution)
        elif dims == mp.CYLINDRICAL:
            gv = mp.volcyl(self.cell_size.x, self.cell_size.z, self.resolution)
            self.dimensions = 2
            self.is_cylindrical = True
        else:
            raise ValueError("Unsupported dimentionality: {}".format(dims))

        gv.center_origin()
        sym = mp.symmetry()

        # Initialize swig objects for each symmetry and combine them into one
        for s in self.symmetries:
            if isinstance(s, Identity):
                s.swigobj = mp.identity()
            elif isinstance(s, Rotate2):
                s.swigobj = mp.rotate2(s.direction, gv)
                sym += s.swigobj * complex(s.phase.real, s.phase.imag)
            elif isinstance(s, Rotate4):
                s.swigobj = mp.rotate4(s.direction, gv)
                sym += s.swigobj * complex(s.phase.real, s.phase.imag)
            elif isinstance(s, Mirror):
                s.swigobj = mp.mirror(s.direction, gv)
                sym += s.swigobj * complex(s.phase.real, s.phase.imag)
            else:
                s.swigobj = mp.symmetry()

        br = _create_boundary_region_from_boundary_layers(self.boundary_layers, gv)

        if self.boundary_layers and type(self.boundary_layers[0]) is Absorber:
            absorbers = self.boundary_layers
        else:
            absorbers = None

        self.structure = mp.structure(gv, None, br, sym, self.num_chunks, self.courant,
                                      self.eps_averaging, self.subpixel_tol, self.subpixel_maxeval)
        if self.material_function:
            self.material_function.eps = False
            self.default_material = self.material_function
        elif self.epsilon_func:
            self.epsilon_func.eps = True
            self.default_material = self.epsilon_func
        elif self.epsilon_input_file:
            self.default_material = self.epsilon_input_file

        mp.set_materials_from_geometry(self.structure, self.geometry, self.eps_averaging, self.subpixel_tol,
                                       self.subpixel_maxeval, self.ensure_periodicity, False, self.default_material,
                                       absorbers, self.extra_materials)
Ejemplo n.º 3
0
 def __createMeepComputationalVolume(self, volume):
     '''Convert the simulation volume (runtime.basic.__SimulationVolume__) into a Meep computational volume'''
     if not isinstance(volume, __SimulationVolume__):
         raise InvalidArgumentException("Invalid argument:: not of type runtime.basic.__SimulationVolume__")	   
     if isinstance(volume, SimulationVolume3D):
         return [ Meep.vol3d(volume.window_width, volume.window_height, volume.size_z, self.resolution), 3 ]
     if isinstance(volume, SimulationVolume2D):
         return [ Meep.vol2d(volume.window_width, volume.window_height, self.resolution), 2 ]
     if isinstance(volume, SimulationVolume1D):
         return [ Meep.vol1d(volume.window_width, self.resolution), 1 ]
Ejemplo n.º 4
0
    def test_radiating_3d(self):

        xmax = 7.0

        # grid_volume
        self.gv = mp.vol3d(xmax, self.ymax, self.ymax, self.a)

        self.pnt_src_vec = mp.vec(xmax / 2.0 - self.dx, self.ymax / 2.0,
                                  self.ymax / 2.0)
        self.p1 = mp.vec(xmax / 2.0 + 0 * self.dx, self.ymax / 2.0,
                         self.ymax / 2.0)
        self.p2 = mp.vec(xmax / 2.0 + 1 * self.dx, self.ymax / 2.0,
                         self.ymax / 2.0)

        self.radiating_base(False)