You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Basic maintenance in the context of the major update of the core algorithm to include carrier transport through the barriers into the QWs: 3fd99e4
In particular, a number of variables were created/renamed to improve consistency and readability:
- N -> Nb, Nw: carrier density in the barriers and in the QWs, respectively. Nb is described with just one additional equation coupled with the equations describing Nw
- ni, nm -> nNb, nNw, nS: number of equations (array dimensions) describing respectively the carrier density in the barrier Nb, the carrier density in the QWs Nw, and the photon densities in each optical mode S
- tauN -> tauNb, tauNw: recombination lifetime in the barriers and QW, respectively
- taub: aggregated non-stimulated recombination lifetime in the barriers: taub = (1/tauNb + 1/tauCap)**-1
- tauw: aggregated non-stimulated recombination lifetime in the barriers: taub = (1/tauNw + 1/tauEsc)**-1
- nqw -> nw: number of quantum wells
- dqw -> dw: quantum well thickness
- Vcav -> Vw: active volume
- Vbar -> Vb: barriers volume
- Vr -> ratio of Vw to Vb
- etaI -> etai: current injection efficiency
- rOx -> rox: oxide aperture
- SCHTransp -> SCHtransp: bool variable describing whether carrier transport should be simulated or not
# GUI/params mgmt: main function, incl. layout and events loop
161
160
defGUI():
162
-
161
+
163
162
# 0. load last parameters into sp and vp dictionaries -------------------------------------------------------
164
163
params=load_params('last_params.json') # loads params file and populates dictionaries sp and vp
165
164
sp, vp=params['simParams'], params['vcselParams'] # simulation results not loaded (for that, chose "load params" and select any file but last_params.json or default_params.json)
[sg.Checkbox('carrier transport into the quantum wells', key='SCHTransp', default=sp['SCHTransp'], size=(45,1), disabled=True, tooltip=ttips['SCHTransp'], enable_events=True)],
173
+
[sg.Checkbox('carrier transport into the quantum wells', key='SCHtransp', default=sp['SCHtransp'], size=(45,1), disabled=False, tooltip=ttips['SCHtransp'], enable_events=True)],
params=load_params(file_name) # loads params file and populates dictionaries sp and vp
288
-
sp, vp, sr=params['simParams'], params['vcselParams'], params['simResults'] # for post-processing, simulations results should be converted from list to numpy array and saved in the respective variables (S, N, ur, etc.)
287
+
sp, vp, sr=params['simParams'], params['vcselParams'], params['simResults'] # for post-processing, simulations results should be converted from list to numpy array and saved in the respective variables (S, Nw, ur, etc.)
289
288
delparams
290
289
update_gui(window, values, sp, vp)
291
290
@@ -297,7 +296,8 @@ def GUI():
297
296
"nphi": nphi,
298
297
"rho": rho.tolist(),
299
298
"nrho": nrho,
300
-
"nm": nm,
299
+
"nNw": nNw,
300
+
"nS": nS,
301
301
"LPlm": LPlm,
302
302
"lvec": lvec.tolist(),
303
303
"Ur": Ur.tolist(),
@@ -307,7 +307,8 @@ def GUI():
307
307
"f": f.tolist(),
308
308
"H": H.tolist(),
309
309
"S2P": S2P.tolist(),
310
-
"N": N.tolist(),
310
+
"Nb": Nb.tolist(),
311
+
"Nw": Nw.tolist(),
311
312
"S": S.tolist(),
312
313
}
313
314
else:
@@ -319,15 +320,15 @@ def GUI():
319
320
elifevent=='run simulation':
320
321
save_params(sp, vp, {}, 'last_params.json') # simulation results not saved to "last_params.json"
"SCHtransp": "SCHtransp: boolean\n -----\n Essential mechanism affecting the dynamic behaviour of electrically pumped VCSELs.",
3
3
"ThermMod": "ThermMod: boolean\n -----",
4
4
"Noise": "Noise: boolean\n -----",
5
5
"Parasitics": "Parasitics: boolean\n -----",
6
6
"2D": "2D: boolean\n -----",
7
-
"ni": "ni: int\n -----\n Number of Bessel terms in the carrier radial series expansion.",
7
+
"nNw": "nNw: int\n -----\n Number of Bessel terms in the carrier radial series expansion of the carrier density Nw in the QWs.",
8
8
"storeN": "storeN: boolean\n -----",
9
9
"odeSolver": "odeSolver: string\n -----\n Check scipy.integrate.solve_ivp documentation for more details.",
10
10
"tmax": "tmax: float\n -----\n Fixed to 2^13*dt for small signal modulation (power of two\n to allow use of FFT algorithm).",
11
11
"dt": "dt: float\n -----\n This time-step is used to define the parameter teval of solve_ivp, that is,\n it defines the spatial resolution for storing/plotting the results.",
12
-
"dtFD":"dtFD: float\n -----\n Fixed time-step for the Finite Differences solver.\n Generally approximately one order of magnitude smaller than dt.\n Once the computation is complete, the results are subsampled to dt",
12
+
"dtFD":"dtFD: float\n -----\n Fixed time-step for the Finite Differences solver.\n Generally approximately one order of magnitude smaller than dt.\n Once the computation is complete, the results are subsampled to dt.",
13
13
"modFormat": "modFormat: string\n -----\n 'step': turn vcsel on from 0 to Ion.\n 'pulse': step up from Ioff (steady-state as starting point) to Ion at t=0,\n and back down to Ioff at t=tmax/2\n 'random bits': generate sequence of random bits of duration tb\n between Ioff (steady-state as starting point) and Ion\n 'small signal': apply small signal step to steady-state bias current Ion\n to compute the frequency response. Simulation time and\n number of time steps are hard-coded for best results.",
14
14
"Ion": "Ion: float\n -----\n 'high' current in selected modulation pattern.",
15
15
"Ioff": "Ioff: float\n -----\n 'low' current in selected pattern.",
@@ -23,11 +23,11 @@
23
23
"Hfplot": "MTF: boolean\n -----",
24
24
"Eyeplot": "eye: boolean\n -----",
25
25
"vcselDescr": "vcselDescr: string\n -----\n",
26
-
"rOx": "rOx: float\n -----\n Oxide aperture, considered to delimit the 'active area' of the cavity.",
26
+
"rox": "rox: float\n -----\n Oxide aperture, proxy to delimit the 'active area' of the cavity.",
27
27
"Leff": "Leff: float\n -----\n Effective cavity length, consisting approximately of the wavelength\n plus the penetration depth into the Distributed Bragg Reflectors (DBR).",
28
-
"nqw": "nqw: float\n -----\n Number of quantum wells, required to calculate the equivalent active volume.",
29
-
"dqw": "dqw: float\n -----\n Single quantum well thickness, required to calculate the equivalent active volume.",
30
-
"db": "db: float\n -----\nThickness of the Single Confinement Heterostructure, required to compute transport into the QWs.",
28
+
"nw": "nw: float\n -----\n Number of quantum wells, required to calculate the equivalent active volume.",
29
+
"dw": "dw: float\n -----\n Single quantum well thickness, required to calculate the equivalent active volume.",
30
+
"db": "db: float\n -----\nBarrier thickness (Single Confinement Heterostructure), required to compute transport into the QWs.",
31
31
"wl0": "wl0: float\n -----\n",
32
32
"nc": "nc: float\n -----\n",
33
33
"ng": "ng: float\n -----\n",
@@ -39,12 +39,12 @@
39
39
"gln": "gln: float\n -----\n",
40
40
"Ntr": "Ntr: float\n -----\n",
41
41
"epsilon": "epsilon: float\n -----\n",
42
-
"GamR": "Gam_r: float\n -----\n Also referred to as gain enhancement factor.\n Not to be mistaken with the longitudinal confinement factor Gam_z!",
43
-
"tauNb": "tauNb: float\n -----\n",
44
-
"tauN": "tauN: float\n -----\n",
42
+
"GamR": "GamR: float\n -----\n Also referred to as gain enhancement factor.\n Not to be mistaken with the longitudinal confinement factor Gam_z!",
43
+
"tauNb": "tauNb: float\n -----\nCarrier lifetime in the barriers (SCH)",
0 commit comments