#return self.return_value # (do not change this line) #if r.x() > curve2-self.wgwidth/2 and r.x() < curve2+self.wgwidth/2 and r.y()>0: #return self.return_value # (do not change this line) return 0 #}}} # Model selection model = spdc_model(**model_param) if sim_param['frequency_domain']: model.simulation_name += ("_frequency=%.4e" % sim_param['frequency']) ## Initialize volume and structure according to the model #XXX vol = meep.vol2d(model.size_x, model.size_y, 1./model.resolution) vol = meep.vol2d(model.size_x, model.size_y, 1. / model.resolution) vol.center_origin() #s = meep_utils.init_structure(model=model, volume=vol, sim_param=sim_param, pml_axes=meep.Z) s = meep_utils.init_structure(model=model, volume=vol, sim_param=sim_param, pml_axes="All") ## Create fields with Bloch-periodic boundaries (any transversal component of k-vector is allowed, but may not radiate) f = meep.fields(s) ## Add a source of the plane wave (see meep_utils for definition of arbitrary source shape) if not sim_param['frequency_domain']: ## Select the source dependence on time src_time_type = meep.band_src_time(model.srcFreq / c / 2, model.srcWidth / c, model.simtime * c / 1.1)
#curve1 = self.size_x/np.pi * np.tanh(r.y()/self.size_y*3) #curve2 = - self.size_x/np.pi * np.tanh(r.y()/self.size_y*3) #if r.x() > curve1-self.wgwidth/2 and r.x() < curve1+self.wgwidth/2: #return self.return_value # (do not change this line) #if r.x() > curve2-self.wgwidth/2 and r.x() < curve2+self.wgwidth/2 and r.y()>0: #return self.return_value # (do not change this line) return 0 #}}} # Model selection model = spdc_model(**model_param) if sim_param['frequency_domain']: model.simulation_name += ("_frequency=%.4e" % sim_param['frequency']) ## Initialize volume and structure according to the model #XXX vol = meep.vol2d(model.size_x, model.size_y, 1./model.resolution) vol = meep.vol2d(model.size_x, model.size_y, 1./model.resolution) vol.center_origin() #s = meep_utils.init_structure(model=model, volume=vol, sim_param=sim_param, pml_axes=meep.Z) s = meep_utils.init_structure(model=model, volume=vol, sim_param=sim_param, pml_axes="All") ## Create fields with Bloch-periodic boundaries (any transversal component of k-vector is allowed, but may not radiate) f = meep.fields(s) ## Add a source of the plane wave (see meep_utils for definition of arbitrary source shape) if not sim_param['frequency_domain']: ## Select the source dependence on time src_time_type = meep.band_src_time(model.srcFreq/c / 2 , model.srcWidth/c, model.simtime*c/1.1) #src_time_type = meep.gaussian_src_time(model.srcFreq/c, model.srcWidth/c) else: src_time_type = meep.continuous_src_time(sim_param['frequency']/c) # XXX srcvolume = meep.volume(
srcComp = meep.Hz # gaussian source component mirrorDirection = meep.Y mirrorFactor = complex(-1, 0) lambda_rec = 0.633 # um k = 2 * pi / lambda_rec lambda_read = 0.633 freq_read = c / lambda_read rz = 1 # m rx = [0.1, -0.1, -0.1, 0.1] ry = [0.1, 0.1, -0.1, -0.1] amp = [1, 1, 1, 1] phase = [0, 0, 0, 0] modulation = 0.01 vol = meep.vol2d(gridSizeX, gridSizeY, 1 / res) if len(rx) != len(ry): raise DimSizeError('Size of rx and ry is different. Halt') # break r = numpy.zeros([len(rx)]) cos_fi = numpy.zeros([len(rx)]) sin_fi = numpy.zeros([len(rx)]) cos_theta = numpy.zeros([len(rx)]) sin_theta = numpy.zeros([len(rx)]) kz = numpy.zeros([len(rx)]) kx = numpy.zeros([len(rx)]) ky = numpy.zeros([len(rx)]) for ii in range(0, len(rx)):
#model = dielbar_model(**model_param); # meep.use_averaging(True) #model = PKCutSheet_model_test(**model_param) #model = Fishnet_model(**model_param) #model = Wedge_model(**model_param) model = Wedge2D_model(**model_param) #from model_SapphireBars import * #model = SapphireBars(**model_param) if sim_param['frequency_domain']: model.simulation_name += ("_frequency=%.4e" % sim_param['frequency']) meep.master_printf("Simulation name:\n\t%s\n" % model.simulation_name) ## TODO print parameters in a table ## Initialize volume vol = meep.vol2d(model.size_T, model.size_L, 1./model.resolution) volume_except_pml = meep.volume( meep.vec(-model.size_T/2, -model.size_L/2+model.pml_thickness*0), meep.vec( model.size_T/2, model.size_L/2-model.pml_thickness*0)) vol.center_origin() ## Define the Perfectly Matched Layers perfectly_matched_layers = meep.pml(model.pml_thickness) ## PML on both faces at Z axis if not sim_param['frequency_domain']: meep.master_printf("== Time domain structure setup ==\n") ## Define each polarizability by redirecting the callback to the corresponding "where_material" function ## Define the frequency-independent epsilon for all materials (needed here, before defining s, or unstable) model.double_vec = model.get_static_permittivity; meep.set_EPS_Callback(model.__disown__()) s = meep.structure(vol, meep.EPS, perfectly_matched_layers, meep.identity())
#model = dielbar_model(**model_param); # meep.use_averaging(True) #model = PKCutSheet_model_test(**model_param) #model = Fishnet_model(**model_param) #model = Wedge_model(**model_param) model = Wedge2D_model(**model_param) #from model_SapphireBars import * #model = SapphireBars(**model_param) if sim_param['frequency_domain']: model.simulation_name += ("_frequency=%.4e" % sim_param['frequency']) meep.master_printf("Simulation name:\n\t%s\n" % model.simulation_name) ## TODO print parameters in a table ## Initialize volume vol = meep.vol2d(model.size_T, model.size_L, 1. / model.resolution) volume_except_pml = meep.volume( meep.vec(-model.size_T / 2, -model.size_L / 2 + model.pml_thickness * 0), meep.vec(model.size_T / 2, model.size_L / 2 - model.pml_thickness * 0)) vol.center_origin() ## Define the Perfectly Matched Layers perfectly_matched_layers = meep.pml( model.pml_thickness) ## PML on both faces at Z axis if not sim_param['frequency_domain']: meep.master_printf("== Time domain structure setup ==\n") ## Define each polarizability by redirecting the callback to the corresponding "where_material" function ## Define the frequency-independent epsilon for all materials (needed here, before defining s, or unstable) model.double_vec = model.get_static_permittivity meep.set_EPS_Callback(model.__disown__())