def complex_vec(self, vec): ## Note: the 'vec' coordinates are _relative_ to the source center # (oblique) plane wave source: return np.exp(-1j*(self.Kx*vec.x() + self.Ky*vec.y())) # (oblique) Gaussian beam source: #return np.exp(-1j*(self.Kx*vec.x() + self.Ky*vec.y()) - (vec.x()/100e-6)**2 - (vec.y()/100e-6)**2) af = SrcAmplitudeFactor(Kx=getattr(model, 'Kx', 0), Ky=getattr(model, 'Ky', 0)) meep.set_AMPL_Callback(af.__disown__()) #f.add_volume_source(meep.Ex, src_time_type, srcvolume, meep.AMPL) f.add_volume_source(meep.Ez, src_time_type, srcvolume, meep.AMPL) ## Define monitor planes, and the field output for visualisation (controlled by keywords in the 'comment' parameter) monitor_options = {'size_x':model.size_x, 'size_y':model.size_y, 'resolution':model.resolution, 'Kx':getattr(model, 'Kx', 0), 'Ky':getattr(model, 'Ky', 0)} monitor1_Ex = meep_utils.AmplitudeMonitorPlane(f, comp=meep.Ex, z_position=model.monitor_z1, **monitor_options) monitor1_Hy = meep_utils.AmplitudeMonitorPlane(f, comp=meep.Hy, z_position=model.monitor_z1, **monitor_options) monitor2_Ex = meep_utils.AmplitudeMonitorPlane(f, comp=meep.Ex, z_position=model.monitor_z2, **monitor_options) monitor2_Hy = meep_utils.AmplitudeMonitorPlane(f, comp=meep.Hy, z_position=model.monitor_z2, **monitor_options) slices = [] if not "noepssnapshot" in model.comment: slices += [meep_utils.Slice(model=model, field=f, components=(meep.Dielectric), at_t=0, name='EPS')] if "narrowfreq-snapshots" in model.comment: slices += [meep_utils.Slice(model=model, field=f, components=meep.Ex, at_y=0, at_t=np.inf, name=('At%.3eHz'%getattr(model, 'frequency', None)) if getattr(model, 'frequency', None) else '', outputpng=True, outputvtk=False)] if "fieldevolution" in model.comment: slices += [meep_utils.Slice(model=model, field=f, components=(meep.Ex), at_x=0, name='FieldEvolution', min_timestep=.1/model.src_freq, outputgif=True, outputhdf=True, outputvtk=True)] if "snapshote" in model.comment:
return np.exp(-1.0j * (self.Kx * vec.x() + self.Ky * vec.y())) # (oblique) Gaussian beam source: #return np.exp(-1j*(self.Kx*vec.x() + self.Ky*vec.y()) - (vec.x()/100e-6)**2 - (vec.y()/100e-6)**2) af = SrcAmplitudeFactor(Kx=model.Kx, Ky=model.Ky) meep.set_AMPL_Callback(af.__disown__()) f.add_volume_source(meep.Ex, src_time_type, srcvolume, meep.AMPL) ## Define visualisation output ## Define monitors planes and visualisation output #monitor_options = {'size_x':model.size_x, 'size_y':model.size_y, 'Kx':model.Kx, 'Ky':0} monitor1_Ex = meep_utils.AmplitudeMonitorPlane(f, comp=meep.Ex, size_x=model.size_x, size_y=model.size_y, resolution=20e-8, z_position=model.monitor_z1, Kx=model.Kx, Ky=model.Ky) monitor1_Hy = meep_utils.AmplitudeMonitorPlane(f, comp=meep.Hy, size_x=model.size_x, size_y=model.size_y, resolution=20e-8, z_position=model.monitor_z1, Kx=model.Kx, Ky=model.Ky) monitor2_Ex = meep_utils.AmplitudeMonitorPlane(f, comp=meep.Ex, size_x=model.size_x, size_y=model.size_y,