as best i can tell, you've set the dimension of your structure to 3, but the size in the x and y directions to be a single pixel. This is, depending on what you're trying to do, a somewhat odd situation, because you have no absorbing boundary condition in the x-y plane, only for waves which are propagating in the + or - z direction. As such, there will always be "infinite-Q" modes in your system, which correspond to waves propagating below the light line in the x-y plane. Even if the slab is the same dielectric as the surrounding vacuum, the pml in the z-direction won't absorb waves travelling entirely in the x or y directions. So, these states will see the gain, and grow exponentially, as there is nothing to absorb them. So yes, if I understand what you've set up correctly, any gain > 0 will yield divergent behavior.
how to fix this? depends on what you want to do. If you're not trying to simulate a 3D system, you should change the dimensionality of your system. If you are trying to simulate a 3D system, which has bound modes below the light line, then you're always going to see lasing for any gain > 0, because that is what is physically expected. On Sat, Jul 25, 2020 at 11:40 PM 裴延波 <[email protected]> wrote: > > Dear Cerjan, thank you for your kind help. > Now let me summarize my tests. Firstly, I decreased sigma to 1e-100. > However the electric field still grows fast to infinity. My test results > show that sigma=1e-120 made the calculation converge. But why sigma is > required so small. It does not make sense. > Secondly, the interface reflections were removed. In my structure under > calculation, uniform gain medium was sandwiched between air and the light > was propagating along z direction. The reflections from the gain medium-air > interfaces provided optical feedback for this Fabry-Perot like lasing. For > test, the instantaneous dielectric constant of the gain medium was set the > same as the air. But the field did not converge in this case also. > Thirdly, gamma was set to positive and sigma was set to negative. In this > case, the electric field converged finally. And I check the results, and > found the spectrum was likely correct. I wonder if those are the correct > parameters in using complex epsilon to calculate the lasing. > That's all for my tests. After those tests, I am confused with modelling > gain medium by complex dielectric function. Can you give me any clue to > solve this problem? > > Bests, > Pei > > > > At 2020-07-26 04:47:29, "Alexander Cerjan" <[email protected]> wrote: > - 隐藏引用文字 - > > This is likely the physically expected behavior. If your gain is coupling > to a mode of your system whose loss rate is less than that of the rate of > stimulated emission, your system will begin to lase, i.e. the field will > begin to grow exponentially. In real, physical systems, this is then > compensated by gain saturation, which prohibits the fields from growing > exponentially forever. However, as the Lorentzian susceptibility model does > not contain this physics, nothing prohibits the fields from continuing > their exponential growth. > > On Sat, Jul 25, 2020 at 2:02 PM 裴延波 <[email protected]> wrote: > >> I am trying to use dispersive complex epsilon to describe gain in my >> calculation. The parameters for the epsilon is defined as follows. >> freq_32 = 2 # emission frequency (units of 2\pi c/a) >> gamma_32 = 0.306 # FWHM emission linewidth in sec^-1 (units of 2\pi >> c/a) >> sigma_32 = 1e-4 >> susceptibilities = [mp.LorentzianSusceptibility(frequency=freq_32, >> gamma=-gamma_32, sigma=sigma_32)] >> geometry = [mp.Block(center=mp.Vector3(z=0), >> size=mp.Vector3(mp.inf,mp.inf,dcell), >> >> material=mp.Medium(epsilon=2.25,E_susceptibilities=susceptibilities))] >> >> Here gamma is negative indicating the material has gain, just as that in >> the tutorial. However, when running the field increase to infinity even >> though sigma is very very small. I try to set gamma positive and sigma >> negative. In this case there is a result which looks normal. I don't know >> why and what is the problem in my code. Can anyone explain this. Thanks in >> advance. >> >> The following is my full python code. >> >> import meep as mp >> import math >> resolution = 100 >> dimensions = 3 >> ns = 1.0 >> nlead = ns >> dlead = 2.0 >> npad = ns >> dpad = 2.0 >> dpml = 2.0 >> Ncell = 20 >> dcell = 96 >> sz = dcell + dlead + dpad + 2*dpml >> cell_size = mp.Vector3(0,0,sz) >> pml_layers = [mp.PML(dpml)] >> freq_32 = 2 # emission frequency (units of 2\pi c/a) >> gamma_32 = 0.306 # FWHM emission linewidth in sec^-1 (units of 2\pi >> c/a) >> df1 = gamma_32/2/math.pi >> sigma_32 = 1e-4 # dipole coupling strength (hbar = 1) >> default_material = mp.Medium(index=ns) >> sources = [mp.Source(mp.GaussianSource(freq_32, fwidth=df1), >> component=mp.Ex, center=mp.Vector3(-dcell/2-dpad/2))] >> >> sim = mp.Simulation(cell_size=cell_size, >> sources=sources, >> resolution=resolution, >> boundary_layers=pml_layers, >> dimensions = dimensions, >> default_material=default_material) >> >> nfreq = 50 #number of frequencies at which to compute flux >> pt = mp.Vector3(0,0,dcell/2+dpad/2) >> flux_detection_point = mp.FluxRegion(center=pt) >> incidence = sim.add_flux(freq_32,df1,nfreq,flux_detection_point) >> sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ex,pt,1e-3)) >> incident_flux = mp.get_fluxes(incidence) >> sim.reset_meep() >> susceptibilities = [mp.LorentzianSusceptibility(frequency=freq_32, >> gamma=-gamma_32, sigma=sigma_32)] >> geometry = [mp.Block(center=mp.Vector3(z=0), >> size=mp.Vector3(mp.inf,mp.inf,dcell), >> >> material=mp.Medium(epsilon=2.25,E_susceptibilities=susceptibilities))] >> geometry.append(mp.Block(center=mp.Vector3(z=-sz/2+(dpml+dlead)/2), >> size=mp.Vector3(mp.inf,mp.inf,dpml+dlead), >> material=mp.Medium(index=nlead))) >> geometry.append(mp.Block(center=mp.Vector3(z=sz/2-(dpml+dpad)/2), >> size=mp.Vector3(mp.inf,mp.inf,dpml+dpad), >> material=mp.Medium(index=npad))) >> sim = mp.Simulation(cell_size=cell_size, >> sources=sources, >> resolution=resolution, >> boundary_layers=pml_layers, >> geometry=geometry, >> dimensions = dimensions, >> default_material=default_material) >> >> transmission = sim.add_flux(freq_32,df1,nfreq,flux_detection_point) >> sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ex,pt,1e-3)) >> transmitted_flux = mp.get_fluxes(transmission) >> flux_freqs = mp.get_flux_freqs(transmission) >> data1 = open("lasing.dat",'w') >> for ii in range(0,nfreq): >> data1.write("%f %f %f %f\n" >> %(flux_freqs[ii],incident_flux[ii],transmitted_flux[ii],transmitted_flux[ii]/incident_flux[ii])) >> data1.close() >> >> >> >> >> _______________________________________________ >> meep-discuss mailing list >> [email protected] >> http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss > > > > > > > > _______________________________________________ > meep-discuss mailing list > [email protected] > http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss
_______________________________________________ meep-discuss mailing list [email protected] http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/meep-discuss

