#Function for calculating spontaneous recombination rate function spontaneousrecombrate(gsp,Eph,nr){ prefactor = nr^2*Eph^2/pi^2/(h/2/pi/e)^3/c^2; rate = prefactor*gsp; result = integrate(rate,2,Eph); return result; } #S. L. Chuang, Physics of Optoelectronic Devices table K.3 function generalQuaternaryInterpolationType1(b1,b2,b3,b4,x,y){ return b1*x*y+b2*x*(1-y)+b3*(1-x)*y+b4*(1-x)*(1-y); } function buildHoleMass(name,T,x,y){ ABCD = struct; if(name == "Ga(x)In(1-x)As(y)P(1-y)"){ GaAs_mh = 0.574-0.000166667*T; GaP_mh = 0.6-0.000166667*T; InAs_mh = 0.41-3.33333e-05*T; InP_mh = 0.64-0.000166667*T; #General interpolation formula mp = generalQuaternaryInterpolationType1(GaAs_mh,GaP_mh,InAs_mh,InP_mh,x,y); }else{ assert("buildHoleMass: name unknown.",0); } return mp; } ########################L#################################################### ############################ Input parameters ############################## ############################################################################ temperatureInd = find(mqwOut.temperatureVec==twlm.temperature); freq_base = mqwOut.emission.frequency; cden=mqwOut.cdenVec; numcden = length(mqwOut.cdenVec); gsp_TE_base=gsp_TM_base=gst_TE_base=gst_TM_base= matrix(numcden,length(freq_base)); for(i=1:numcden){ gsp_TE_base(i,:) = mqwOut.emission.te.spont(i,temperatureInd,:); gsp_TM_base(i,:) = mqwOut.emission.tm.spont(i,temperatureInd,:); gst_TE_base(i,:) = mqwOut.emission.te.stim(i,temperatureInd,:); gst_TM_base(i,:) = mqwOut.emission.te.stim(i,temperatureInd,:); } #Upsample Frequency freq = zeros((length(freq_base)-1)*common.frequpsample+1); for(i=1:length(freq_base)-1){ df = (freq_base(i+1)-freq_base(i))/common.frequpsample; for(j=1:common.frequpsample){ freq((i-1)*common.frequpsample+j) = freq_base(i)+df*(j-1); } } freq(end) = freq_base(end); gsp_TE=gsp_TM=gst_TE=gst_TM=matrix(numcden,length(freq)); if(common.frequpsampletype==0){ for(i=1:numcden){ gsp_TE(i,:) = interp(gsp_TE_base(i,:),freq_base,freq); gsp_TM(i,:) = interp(gsp_TM_base(i,:),freq_base,freq); gst_TE(i,:) = interp(gst_TE_base(i,:),freq_base,freq); gst_TM(i,:) = interp(gst_TM_base(i,:),freq_base,freq); } } else if(common.frequpsampletype==1){ for(i=1:numcden){ gsp_TE(i,:) = spline(gsp_TE_base(i,:),freq_base,freq); gsp_TM(i,:) = spline(gsp_TM_base(i,:),freq_base,freq); gst_TE(i,:) = spline(gst_TE_base(i,:),freq_base,freq); gst_TM(i,:) = spline(gst_TM_base(i,:),freq_base,freq); } } else{ for(i=1:numcden){ gsp_TE(i,:) = chebin(transpose(gsp_TE_base(i,:)),freq_base,freq,freq_base(1),freq_base(end)); gsp_TM(i,:) = chebin(transpose(gsp_TM_base(i,:)),freq_base,freq,freq_base(1),freq_base(end)); gst_TE(i,:) = chebin(transpose(gst_TE_base(i,:)),freq_base,freq,freq_base(1),freq_base(end)); gst_TM(i,:) = chebin(transpose(gst_TM_base(i,:)),freq_base,freq,freq_base(1),freq_base(end)); } } #Calculate spontaneous recombination rates Rsp = zeros(numcden); for(i=1:numcden){ Rsp(i) = spontaneousrecombrate((2*gsp_TE(i,:)+gsp_TM(i,:))/3,h*transpose(freq)/e,real(wgSweep.neff(2))); } #Fit Rsp to the form B0*n^2 - B1*n^3, where B0 corresponds to Copt radiative recombination oefficient and B1 is split #equally between Caun and Caup auger recombination coefficients (with negative sign) cden_scale = max(cden); Rsp_scale = max(Rsp); cden_conditioned = transpose(cden / cden_scale); Rsp_conditioned = Rsp / Rsp_scale; matlabput(cden_conditioned,Rsp_conditioned); matlab(" V=[cden_conditioned.^3,cden_conditioned.^2]; coeffs_conditioned = V\Rsp_conditioned; %least squares fit, corresponds to polyfit where 0th and 1st order coefficients are set to zero. coeffs_conditioned = flip(coeffs_conditioned,1); "); matlabget(coeffs_conditioned); rsp_coeffs = zeros(length(coeffs_conditioned)); for(i=1;i<=length(coeffs_conditioned);i=i+1){ rsp_coeffs(i) = coeffs_conditioned(i)*Rsp_scale/cden_scale^(i+1); } Rsp_fit = rsp_coeffs(1)*cden^2+rsp_coeffs(2)*cden^3; Rsp_fit_rmserror = norm((Rsp_fit-Rsp)/Rsp)/sqrt(length(cden)); xWell = mqw.x_well; yWell = mqw.y_well; xBarrier = mqw.x_barrier; yBarrier = mqw.y_barrier; n_wells = common.n_wells; temperature = twlm.temperature; SRHtaun = charge.srhtaun; SRHtaup = charge.srhtaup; ############################################################################# ######################### Material definition ############################### ############################################################################# addmodelmaterial; set("name","Air"); set("color",[1,0,0]); addmaterialproperties("CT","Air"); addmodelmaterial; set("name","InP (Indium Phosphide)"); set("color",[0,1,0]); addmaterialproperties("CT","InP (Indium Phosphide)"); addmodelmaterial; set("name","GaInAsP_1.15um"); set("color",[0,0,1]); addctmaterialproperty("Semiconductor"); set("name","GaInAsP_1.15um"); addmodelmaterial; set("name","GaInAsP_well"); set("color",[0,1,1]); addctmaterialproperty("Semiconductor"); set("name","GaInAsP_well"); addmodelmaterial; set("name","GaInAsP_barrier"); set("color",[1,0,1]); addctmaterialproperty("Semiconductor"); set("name","GaInAsP_barrier"); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.enabled",true); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.enabled",true); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.enabled",true); #http://www.ioffe.ru/SVA/NSM/Semicond/GaInAsP/basic.html #Approximation: #1. Ga0.47In0.53AsyP1-y #2. 300K setnamed("materials::GaInAsP_well::GaInAsP_well","dc permittivity",12.5+1.44*yWell); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","dc permittivity",12.5+1.44*yBarrier); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","dc permittivity",12.5+1.44*yBarrier); #http://www.ioffe.ru/SVA/NSM/Semicond/GaInAsP/electric.html#Basic #1. Ga0.47In0.53AsyP1-y #2. 300K #3. The returned values are upper limits setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mun.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mun.lattice.constant",5400-7750*yWell+14400*yWell^2); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mup.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mup.lattice.constant",200-400*yWell+500*yWell^2); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mun.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mun.lattice.constant",5400-7750*yBarrier+14400*yBarrier^2); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mup.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mup.lattice.constant",200-400*yBarrier+500*yBarrier^2); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mun.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mun.lattice.constant",5400-7750*yBarrier+14400*yBarrier^2); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mup.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mup.lattice.constant",200-400*yBarrier+500*yBarrier^2); wellMaterial = buildmqwmaterial(struct, 300, "InGaAsP",1-xWell,yWell,"Gamma"); wellMaterial_mh = buildHoleMass("Ga(x)In(1-x)As(y)P(1-y)",300,xWell,yWell); barrierMaterial = buildmqwmaterial(struct, 300, "InGaAsP",1-xBarrier,yBarrier,"Gamma"); barrierMaterial_mh = buildHoleMass("Ga(x)In(1-x)As(y)P(1-y)",300,xBarrier,yBarrier); mqw_material_build_functions; InP = buildBinaryMaterialChuang("InP",temperature,0); scl_eg = h*c/1.15e-6/e; #Band gap wellMaterialEg = mean(mqwOut.strainedBandgaps(:,temperatureInd,2)); #average out free carrier band gap dependence since not supported in CHARGE barrierMaterialEg = mean(mqwOut.strainedBandgaps(:,temperatureInd,1)); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.Eg.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.Eg.constant",wellMaterialEg); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.Eg.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.Eg.constant",barrierMaterialEg); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.Eg.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.Eg.constant",scl_eg); #Effective mass setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mn.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mn.constant",wellMaterial.me); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mp.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","electronic.gamma.mp.constant",wellMaterial_mh); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mn.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mn.constant",barrierMaterial.me); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mp.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","electronic.gamma.mp.constant",barrierMaterial_mh); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mn.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mn.constant",barrierMaterial.me); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mp.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","electronic.gamma.mp.constant",barrierMaterial_mh); #Override vb so that offset is calculated from dEc/dEv = 0.4/0.6 from Piprek 2000. dEv_cladding_to_scl = 0.6*(InP.eg-scl_eg); dEv_scl_to_barrier = 0.6*(scl_eg-barrierMaterial.eg); dEv_barrier_to_well = 0.6*(barrierMaterial.eg-wellMaterial.eg); scl_vb = InP.vb + dEv_cladding_to_scl; barrierMaterial.vb = scl_vb + dEv_scl_to_barrier; wellMaterial.vb = barrierMaterial.vb + dEv_barrier_to_well; #Work function setnamed("materials::GaInAsP_well::GaInAsP_well","work function",wf3D(wellMaterial.me,wellMaterial_mh,temperature,wellMaterial.eg,abs(wellMaterial.vb))); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","work function",wf3D(barrierMaterial.me,barrierMaterial_mh,temperature,barrierMaterial.eg,abs(barrierMaterial.vb))); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","work function",wf3D(barrierMaterial.me,barrierMaterial_mh,temperature,scl_eg,abs(scl_vb))); setnamed("materials::InP (Indium Phosphide)::InP (Indium Phosphide)","work function",wf3D(InP.me,InP.mhh,temperature,InP.eg,abs(InP.vb))); #Recombination rates setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.trap assisted.enabled",true); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.trap assisted.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.trap assisted.taun.constant",charge.srhtaun); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.trap assisted.taup.constant",charge.srhtaup); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.auger.enabled",true); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.auger.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.auger.caun.constant",(charge.caun+rsp_coeffs(2)/2)*1e12); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.auger.caup.constant",(charge.caup+rsp_coeffs(2)/2)*1e12); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.radiative.enabled",true); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.radiative.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.radiative.copt.constant",rsp_coeffs(1)*1e6); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.stimulated.enabled",true); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.stimulated.active model","Constant"); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.stimulated.cstim.constant",twlmResultOut.lincoeff); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.stimulated.jthreshold.constant",twlmResultOut.Jth); setnamed("materials::GaInAsP_well::GaInAsP_well","recombination.stimulated.tgain",common.well_thickness); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.trap assisted.enabled",true); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.trap assisted.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.trap assisted.taun.constant",charge.srhtaun); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.trap assisted.taup.constant",charge.srhtaup); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.auger.enabled",true); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.auger.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.auger.caun.constant",(charge.caun+rsp_coeffs(2)/2)*1e12); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.auger.caup.constant",(charge.caup+rsp_coeffs(2)/2)*1e12); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.radiative.enabled",true); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.radiative.active model","Constant"); setnamed("materials::GaInAsP_barrier::GaInAsP_barrier","recombination.radiative.copt.constant",rsp_coeffs(1)*1e6); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.trap assisted.enabled",true); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.trap assisted.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.trap assisted.taun.constant",charge.srhtaun); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.trap assisted.taup.constant",charge.srhtaup); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.auger.enabled",true); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.auger.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.auger.caun.constant",charge.caun*1e12); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.auger.caup.constant",charge.caup*1e12); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.radiative.enabled",true); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.radiative.active model","Constant"); setnamed("materials::GaInAsP_1.15um::GaInAsP_1.15um","recombination.radiative.copt.constant",2e-10); #same as InP default setnamed("materials::InP (Indium Phosphide)::InP (Indium Phosphide)","recombination.trap assisted.enabled",true); setnamed("materials::InP (Indium Phosphide)::InP (Indium Phosphide)","recombination.trap assisted.active model","Constant"); setnamed("materials::InP (Indium Phosphide)::InP (Indium Phosphide)","recombination.auger.enabled",true); setnamed("materials::InP (Indium Phosphide)::InP (Indium Phosphide)","recombination.auger.active model","Constant"); setnamed("materials::InP (Indium Phosphide)::InP (Indium Phosphide)","recombination.radiative.enabled",true); setnamed("materials::InP (Indium Phosphide)::InP (Indium Phosphide)","recombination.radiative.active model","Constant"); ############################################################### ################### Geometry definition ####################### ############################################################### #Memorize min and max geometry coordinates to help with simulation region definition in the solver section xmin = 0; xmax = 0; zmin = 0; zmax = 0; addrect; set("name","bottomCladding"); xmin = 0; set("x min",xmin); xmax = charge.halfwidth; set("x max",xmax); set("y min",-charge.length/2); set("y max",charge.length/2); zmin = -charge.bottomsclthickness-charge.bottomcladdingthickness; set("z min",zmin); zmax = -charge.bottomsclthickness; set("z max",zmax); set("material","InP (Indium Phosphide)"); addrect; set("name","bottomSCL"); xminthis = 0; xmin = min([xmin,xminthis]); set("x min",xminthis); xmaxthis = charge.halfwidth; xmax = max([xmax,xmaxthis]); set("x max",xmaxthis); set("y min",-charge.length/2); set("y max",charge.length/2); zminthis = -charge.bottomsclthickness; zmin = min([zmin,zminthis]); set("z min",zminthis); zmaxthis = 0; zmax = max([zmax,zmaxthis]); set("z max",zmaxthis); set("material","GaInAsP_1.15um"); #Find total MQW thickness n_layers = 2*n_wells+ 1; t_layers = matrix(n_layers,1); t_layers(1) = common.edge1_barrier_thickness; t_layers(end) = common.edge2_barrier_thickness; totalMqwLength = t_layers(1)+t_layers(end); for (j = 2:n_layers-1) { if (mod(j,2) == 0) { # even: well totalMqwLength = totalMqwLength + common.well_thickness; } else { # odd: barrier totalMqwLength = totalMqwLength + common.barrier_thickness; } } addrect; set("name","topCladding"); xminthis = 0; xmin = min([xmin,xminthis]); set("x min",xminthis); xmaxthis = charge.ridgehalfwidth; xmax = max([xmax,xmaxthis]); set("x max",xmaxthis); set("y min",-charge.length/2); set("y max",charge.length/2); zminthis = totalMqwLength+charge.topsclthickness; zmin = min([zmin,zminthis]); set("z min",zminthis); zmaxthis = totalMqwLength+charge.topsclthickness+charge.topcladdingthickness; zmax = max([zmax,zmaxthis]); set("z max",zmaxthis); set("material","InP (Indium Phosphide)"); addrect; set("name","topSCL"); xminthis = 0; xmin = min([xmin,xminthis]); set("x min",xminthis); xmaxthis = charge.halfwidth; xmax = max([xmax,xmaxthis]); set("x max",xmaxthis); set("y min",-charge.length/2); set("y max",charge.length/2); zminthis = totalMqwLength; zmin = min([zmin,zminthis]); set("z min",zminthis); zmaxthis = totalMqwLength+charge.topsclthickness; zmax = max([zmax,zmaxthis]); set("z max",zmaxthis); set("material","GaInAsP_1.15um"); addstructuregroup; set("name","mqw"); xcenter = charge.halfwidth/2; set("x",xcenter); set("y",0); set("z",0); adduserprop("n_wells",0,common.n_wells); adduserprop("t_well",2,common.well_thickness); adduserprop("t_barrier",2,common.barrier_thickness); adduserprop("t_barrier_bottom",2,common.edge1_barrier_thickness); adduserprop("t_barrier_top",2,common.edge2_barrier_thickness); xspanthis = charge.halfwidth; xmin = min([xmin,xcenter-xspanthis/2]); xmax = max([xmax,xcenter+xspanthis/2]); adduserprop("x_span",2,xspanthis); adduserprop("y_span",2,charge.length); set("construction group",1); set('script',' deleteall; z_bottom = 0; z_top = z_bottom + t_barrier_bottom; #Bottom barrier addrect; set("x span",x_span); set("y span",y_span); set("z min",z_bottom); set("z max",z_top); set("material","GaInAsP_barrier"); z_bottom = z_top; for (j = 1:n_wells) { z_top = z_top + t_well; addrect; set("x span",x_span); set("y span",y_span); set("z min",z_bottom); set("z max",z_top); set("material","GaInAsP_well"); z_bottom = z_top; if(j < n_wells){ z_top = z_top + t_barrier; } else{ z_top = z_top + t_barrier_top; #top barrier } addrect; set("x span",x_span); set("y span",y_span); set("z min",z_bottom); set("z max",z_top); set("material","GaInAsP_barrier"); z_bottom = z_top; } '); ##################################################################### ###################### Solver definition ############################ ##################################################################### addchargesolver; set("simulation temperature",twlm.temperature); set("solver type","newton"); set("fermi statistics",true); set("norm length",charge.length); set("max edge length",0.1e-6); set("max refine steps",200000); set("sensitivity",10); addmesh; set("name","mqw_mesh_constraint"); set("x min",0); set("x max",charge.halfwidth); set("y",0); set("y span",charge.length); set("z min",0); set("z max",totalMqwLength); set("max edge length",6e-9); select("simulation region"); set("dimension","2D Y-Normal"); set("x min",xmin); set("x max",xmax); set("y",0); set("z min",zmin*0.99); set("z max",zmax*0.99); set("background material","Air"); addelectricalcontact; set("name","anode"); set("surface type","solid:simulation region"); set('sweep type','value'); set('value table',charge.forwardbiastable); set("z max",true); set("solid","topCladding"); addelectricalcontact; set("name","cathode"); set("surface type","solid:simulation region"); set("z min",true); set("solid","bottomCladding"); adddope; set("name","n"); set("dopant type","n"); set("concentration",4e23); # SI unit (/m3) set("x min",0); set("x max",charge.halfwidth); set("y",0); set("y span",charge.length); set("z min",zmin); set("z max",-charge.bottomsclthickness); adddope; set("name","p"); set("dopant type","p"); set("concentration",4e23); # SI unit (/m3) set("x min",0); set("x max",charge.ridgehalfwidth); set("y",0); set("y span",charge.length); set("z min",totalMqwLength+0.14e-6); set("z max",zmax); addbandstructuremonitor; set("name","banddiagram mqw only"); set("monitor type",'linear z'); set("record Ec",true); set("record Ev",true); set("record Ei",true); set("record Efn",true); set("record Efp",true); set("x",0); set("y",0); set("z min",0); set("z max",totalMqwLength); addbandstructuremonitor; set("name","banddiagram total thickness"); set("monitor type",'linear z'); set("record Ec",true); set("record Ev",true); set("record Ei",true); set("record Efn",true); set("record Efp",true); set("x",0); set("y",0); set("z min",zmin); set("z max",zmax); addefieldmonitor; set("name","field mqw only"); set("monitor type",'linear z'); set("record electric field",true); set("record electrostatic potential",true); set("x",0); set("y",0); set("z min",0); set("z max",totalMqwLength); addchargemonitor; set("name","charge mqw only"); set("monitor type",'linear z'); set("record electrons",true); set("record holes",true); set("x",0); set("y",0); set("z min",0); set("z max",totalMqwLength); addjfluxmonitor; uniform_ridge_length_ratio = 0.2; set("name","injection flux uniform ridge"); set("monitor type",'linear x'); set("record In",true); set("record Ip",true); set("x min",0); set("x max",charge.ridgehalfwidth*uniform_ridge_length_ratio); set("y",0); set("z",getnamed("simulation region","z max")*0.999); addjfluxmonitor; set("name","injection flux uniform substrate"); set("monitor type",'linear x'); set("record In",true); set("record Ip",true); set("x min",0); set("x max",charge.ridgehalfwidth*uniform_ridge_length_ratio); set("y",0); set("z",getnamed("simulation region","z min")*0.999); save("charge.ldev");