######################################################### # # Simulate the UTC steady-state response under dark # and illuminated conditions. # # (c) Lumerical Solutions ######################################################### load("utc_steady_state.ldev"); # reverse bias, dark switchtolayout; setnamed('CHARGE::ogr','enabled',0); select('CHARGE::boundary conditions::cathode'); set('bc mode','steady state'); set('sweep type','range'); set('range start',0); set('range stop',5); set('range num points',26); run; anode = getresult("CHARGE","anode"); Vdr = -flip(pinch(anode.V_cathode),1); Idr = 2*flip(pinch(anode.I),1); # forward bias, dark switchtolayout; setnamed('CHARGE::ogr','enabled',0); select('CHARGE::boundary conditions::cathode'); set('bc mode','steady state'); set('sweep type','range'); set('range start',0); set('range stop',-1.5); set('range num points',16); run; anode = getresult("CHARGE","anode"); Vdf = -pinch(anode.V_cathode); Vdf = Vdf(2:length(Vdf)); Idf = pinch(anode.I); Idf = 2*Idf(2:length(Idf)); # reverse bias, light switchtolayout; setnamed('CHARGE::ogr','enabled',1); select('CHARGE::boundary conditions::cathode'); set('bc mode','steady state'); set('sweep type','range'); set('range start',0); set('range stop',5); set('range num points',26); run; anode = getresult("CHARGE","anode"); Vrr = -flip(pinch(anode.V_cathode),1); Irr = 2*flip(pinch(anode.I),1); # forward bias, light switchtolayout; setnamed('CHARGE::ogr','enabled',1); select('CHARGE::boundary conditions::cathode'); set('bc mode','steady state'); set('sweep type','range'); set('range start',0); set('range stop',-1.5); set('range num points',16); run; anode = getresult("CHARGE","anode"); Vrf = -pinch(anode.V_cathode); Vrf = Vrf(2:length(Vrf)); Irf = pinch(anode.I); Irf = 2*Irf(2:length(Irf)); plotxy([Vdr; Vdf], abs([Idr; Idf]), [Vrr; Vrf], abs([Irr; Irf]), "V (V)", "I (A)");