[Fsem-commits] SF.net SVN: fsem: [123] fsem
Status: Beta
Brought to you by:
fabiandortu
|
From: <fab...@us...> - 2007-03-22 15:22:01
|
Revision: 123
http://fsem.svn.sourceforge.net/fsem/?rev=123&view=rev
Author: fabiandortu
Date: 2007-03-22 08:20:02 -0700 (Thu, 22 Mar 2007)
Log Message:
-----------
Towards the implementation of SRH surface recombination for DDSG
Modified Paths:
--------------
fsem/equations/fsem_Eq_DiffGlo.edp
fsem/models/fsem_Mod_GloVarSemi.edp
fsem/models/fsem_Mod_MatParSemi.edp
fsem/models/fsem_Mod_MatParSemiDefault.edp
fsem/models/modules/Semi/fsem_ModMisc_DDSG.cpp
fsem/models/modules/Semi/fsem_ModMisc_DDSG.edp
fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.cpp
fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.edp
Modified: fsem/equations/fsem_Eq_DiffGlo.edp
===================================================================
--- fsem/equations/fsem_Eq_DiffGlo.edp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/equations/fsem_Eq_DiffGlo.edp 2007-03-22 15:20:02 UTC (rev 123)
@@ -23,6 +23,7 @@
GloVhP1 GloVarDiffCOEFa = 0.0;
GloVhP1<complex> GloVarDiffCOEFac = 0.0; /* the complex "a" coefficient to deal with harmonic excitations */
+GloVhP1 GloVarDiffCOEFas = 0.0; // used for surface integration
GloVhP1 GloVarDiffCOEFv = 0.0; /* Surface recombination velocity coefficient */
GloVhP1<complex> GloVarDiffCOEFvc = 0.0;
@@ -30,6 +31,7 @@
/* f coef. and its derivatives */
GloVhP1 GloVarDiffCOEFf = 0.0; /* Gen - rec coefficient */
GloVhP1<complex> GloVarDiffCOEFfc = 0.0;
+GloVhP1 GloVarDiffCOEFfs = 0.0; // used for surface integration
GloVhP1 GloVarDiffdCOEFfdU = 0.0;
GloVhP1<complex> GloVarDiffdCOEFfcdU = 0.0;
Modified: fsem/models/fsem_Mod_GloVarSemi.edp
===================================================================
--- fsem/models/fsem_Mod_GloVarSemi.edp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/models/fsem_Mod_GloVarSemi.edp 2007-03-22 15:20:02 UTC (rev 123)
@@ -146,18 +146,37 @@
By convention, it is positive when the recombination rate is larger than the (thermal-)generation rate.
& [m$^{-3}$ s$^{-1}$]
*/
+GloVhP1 GloVarSemiGenRecSurfSRH;
+/*TeXDoc
+Net SRH surface generation/recombination rate.
+By convention, it is positive when the recombination rate is larger than the (thermal-)generation rate.
+& [m$^{-2}$ s$^{-1}$]
+*/
+
GloVhP1 GloVarSemidGenRecSRHdELE;
/*TeXDoc
d\texttt{GloVarSemiGenRecSRH}/d\texttt{GloVarSemiELE}
& [s$^{-1}$]
*/
+GloVhP1 GloVarSemidGenRecSurfSRHdELE;
+/*TeXDoc
+d\texttt{GloVarSemiGenRecSurfSRH}/d\texttt{GloVarSemiELE}
+& [m s$^{-1}$]
+*/
+
GloVhP1 GloVarSemidGenRecSRHdHOL;
/*TeXDoc
d\texttt{GloVarSemiGenRecSRH}/d\texttt{GloVarSemiHOL}
& [s$^{-1}$]
*/
+GloVhP1 GloVarSemidGenRecSurfSRHdHOL;
+/*TeXDoc
+d\texttt{GloVarSemiGenRecSurfSRH}/d\texttt{GloVarSemiHOL}
+& [m s$^{-1}$]
+*/
+
GloVhP1 GloVarSemiGenRecAuger;
/*TeXDoc
Net Auger generation/recombination rate.
Modified: fsem/models/fsem_Mod_MatParSemi.edp
===================================================================
--- fsem/models/fsem_Mod_MatParSemi.edp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/models/fsem_Mod_MatParSemi.edp 2007-03-22 15:20:02 UTC (rev 123)
@@ -103,7 +103,19 @@
Hole SRH concentration (\texttt{ModUsrRecSRHConcDepLifeTime})
& [m$^{-3}$]
*/
+GloVhP1 ParMatxyzVN0 = ParMatSiVN0;
+/*TeXDoc
+ Electron recombination velocity (\texttt{ModUsrRecSRHConcDepLifeTime})
+ & [m/s]
+*/
+GloVhP1 ParMatxyzVP0 = ParMatSiVP0;
+/*TeXDoc
+ Hole recombination velocity (\texttt{ModUsrRecSRHConcDepLifeTime})
+ & [m/s]
+*/
+
+
/* Inverse of the recombination lifetime */
GloVhP1 ParMatxyzITAU = ParMatSiITAU;
/*TeXDoc
Modified: fsem/models/fsem_Mod_MatParSemiDefault.edp
===================================================================
--- fsem/models/fsem_Mod_MatParSemiDefault.edp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/models/fsem_Mod_MatParSemiDefault.edp 2007-03-22 15:20:02 UTC (rev 123)
@@ -126,10 +126,21 @@
*/
real ParMatSiTAUP0 = 3.94e-5;
/*TexDoc
- Conc. dep. SRH rec. lifetime for electrons
+ Conc. dep. SRH rec. lifetime for holes
P. C. Dhanasekaran Solid-State Elec. 25(8) 719 (1982)
& [s]
*/
+real ParMatSiVN0 = 10;
+/*TeXDoc
+ Conc. dep. SRH rec. velocity for electrons
+ & [m/s]
+*/
+real ParMatSiVP0 = 10;
+/*TexDoc
+ Conc. dep. SRH rec. velocity for holes
+ & [m/s]
+*/
+
real ParMatSiNSRH = 7.1e15 * ConvC2M^(-3);
/*TeXDoc
Conc. dep. SRH rec.
Modified: fsem/models/modules/Semi/fsem_ModMisc_DDSG.cpp
===================================================================
--- fsem/models/modules/Semi/fsem_ModMisc_DDSG.cpp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/models/modules/Semi/fsem_ModMisc_DDSG.cpp 2007-03-22 15:20:02 UTC (rev 123)
@@ -1,6 +1,9 @@
/*
* From Slotboom variables rhon, rhop, cn, cp to "physical" variables n, p , mun and mup
*
+ * Two formalisms are implemented here.
+ * Only the second formalism is used today but we kept the first one just in case of.
+ *
*/
#include <iostream>
@@ -714,7 +717,8 @@
}
-//gives the Slotboom "Recombination term" from the slotboom variable rhon
+// gives the Slotboom "Recombination term" from the slotboom variable rhon
+// This calculates the term "gamma" which appears in the linear recombination term (mass matrix)
double CppModDDSGITAURecEle2(KN<double> *const & gamman, // OUPUTS: // [m^-3 s^-1]
KN<double> *const & f, // [m^-3 s^-1]
KN<double> *const & nie, // INPUTS
@@ -768,6 +772,62 @@
}
}
+// gives the Slotboom "SURFACE Recombination term" from the slotboom variable rhon
+// This calculates the term "gamma" and "f" which appear in the linear surface recombination term (mass matrix)
+// and in the right hand side.
+double CppModDDSGITAURecSurfEle2(KN<double> *const & gamman, // OUPUTS: // [m^-2 s^-1]
+ KN<double> *const & f, // [m^-2 s^-1]
+ KN<double> *const & nie, // INPUTS
+ KN<double> *const & Nc,
+ KN<double> *const & Nv,
+ KN<double> *const & Temp,
+ KN<double> *const & rhop,
+ KN<double> *const & DEg,
+ KN<double> *const & Rec, // Rec = F_SRH + F_Aug [m^4 s^-1] (NOT a recombination rate)
+ KN<double> *const & BandGapArray,
+ KN<double> *const & Eg
+ )
+{
+
+ // Check if all input vector have the same dimensions:
+ if((gamman->N() !=f->N()) || (f->N() != nie->N()) || (nie ->N() != Nc ->N())
+ || (Nc->N() != Nv->N()) || (Nv->N() != Temp->N()) || (Temp->N() != rhop->N())
+ || (rhop->N() != DEg->N()) || (DEg->N() != Rec->N())|| (Rec->N() != Eg->N()) ) {
+ cout << "*** ERROR *** function CppModDDSGITAURecSurfEle2." << endl;
+ cout << "f->N(): " << f->N() << endl;
+ cout << "gamman->N(): " << gamman->N() << endl;
+ cout << "nie->N(): " << nie->N() << endl;
+ cout << "Nc->N(): " << Nc->N() << endl;
+ cout << "Nv->N(): " << Nv->N() << endl;
+ cout << "Temp->N(): " << Temp->N() << endl;
+ cout << "rhop->N(): " << rhop->N() << endl;
+ cout << "DEg->N(): " << DEg->N() << endl;
+ cout << "Rec->N(): " << Rec->N() << endl;
+ cout << "Eg->N(): " << Eg->N() << endl;
+ cout << "*** Error ***: cppModDDSGITAURecSurfEle2: input vectors do no have the same dimension. Aborting." << endl;
+ exit(0);
+ }
+
+ double Vth;
+ double ParCstk = 1.3807e-23/(1.60218e-19); // Boltzman cst [eV/K]
+ double Eg0 =(*( BandGapArray[0]+0));
+ double chi0 =(*( BandGapArray[0]+1));
+
+ int nn = rhop->N(); // get the number of nodes
+ for(int i=0; i<nn; i++) { // loop on the nodes
+
+ Vth = (ParCstk) * (*(Temp[0]+i));
+
+ (*( gamman[0]+i)) = (*( Rec[0]+i)) * (*( Nc[0]+i)) * (*( Nv[0]+i))
+ * exp(-(Eg0
+ + (*(Eg[0]+i)) + (*(DEg[0]+i)) - Eg0 // Delate Eg0 = Eg_total - Eg0
+ )/Vth)
+ * (*( rhop[0]+i));
+
+ (*( f[0]+i)) = (*( nie[0]+i)) * (*( nie[0]+i)) * (*( Rec[0]+i));
+ }
+}
+
//gives the Slotboom "Recombination term" from the slotboom variable rhon
double CppModDDSGITAURecHol2(KN<double> *const & gammap, // OUTPUTS // m^-3 s^-1
KN<double> *const & f, // m^-3 s^-1
@@ -823,6 +883,64 @@
}
}
+//gives the Slotboom "SURFACE Recombination term" from the slotboom variable rhon
+// This calculates the term "gamma" and "f" which appear in the linear surface recombination term (mass matrix)
+// and in the right hand side.
+double CppModDDSGITAURecSurfHol2(KN<double> *const & gammap, // OUTPUTS // m^-2 s^-1
+ KN<double> *const & f, // m^-2 s^-1
+ KN<double> *const & nie, // INPUTS
+ KN<double> *const & Nc,
+ KN<double> *const & Nv,
+ KN<double> *const & Temp,
+ KN<double> *const & rhon,
+ KN<double> *const & DEg,
+ KN<double> *const & Rec, // Rec = F_SRH + F_Aug [m^4 s^-1] (NOT a recombination rate)
+ KN<double> *const & BandGapArray,
+ KN<double> *const & Eg
+ )
+{
+
+ // Check if all input vector have the same dimensions:
+ if((gammap->N() != f->N()) || (f->N() != nie->N()) || (nie ->N() != Nc ->N())
+ || (Nc->N() != Nv->N()) || (Nv->N() != Temp->N()) || (Temp->N() != rhon->N())
+ || (rhon->N() != DEg->N()) || (DEg->N() != Rec->N())|| (Rec->N() != Eg->N()) ) {
+ cout << "*** ERROR *** function CppModDDSGITAURecSurfHol2." << endl;
+ cout << "gammap->N(): " << gammap->N() << endl;
+ cout << "f->N(): " << f->N() << endl;
+ cout << "nie->N(): " << nie->N() << endl;
+ cout << "Nc->N(): " << Nc->N() << endl;
+ cout << "Nv->N(): " << Nv->N() << endl;
+ cout << "Temp->N(): " << Temp->N() << endl;
+ cout << "rhon->N(): " << rhon->N() << endl;
+ cout << "DEg->N(): " << DEg->N() << endl;
+ cout << "Rec->N(): " << Rec->N() << endl;
+ cout << "DEg->N(): " << Eg->N() << endl;
+ cout << "*** Error ***: cppModDDSGITAURecSurfHol2: input vectors do no have the same dimension. Aborting." << endl;
+ exit(0);
+ }
+
+ double Vth;
+ double ParCstk = 1.3807e-23/(1.60218e-19); // Boltzman cst [eV/K]
+ double Eg0 =(*( BandGapArray[0]+0));
+ double chi0 =(*( BandGapArray[0]+1));
+ double phi0 =(*( BandGapArray[0]+2));
+
+ int nn = rhon->N(); // get the number of nodes
+ for(int i=0; i<nn; i++) { // loop on the nodes
+
+ Vth = (ParCstk) * (*(Temp[0]+i));
+
+ (*( gammap[0]+i)) = (*( Rec[0]+i)) * (*( Nc[0]+i)) * (*( Nv[0]+i))
+ * exp (-(Eg0
+ + (*(Eg[0]+i)) + (*(DEg[0]+i)) - Eg0 // Delta Eg0 = Eg_total - Eg0
+ )/Vth)
+ * (*( rhon[0]+i)) ;
+
+ (*( f[0]+i)) = (*( nie[0]+i)) * (*( nie[0]+i)) * (*( Rec[0]+i));
+ }
+}
+
+
// Derivative of the recombination rate with respect to RhoN
// d(Rec_rate)/d(Rho) = d(Rec_rate)/d(N) * d(N)/d(RhoN)
double CppModDDSGEleJac2(KN<double> *const & Jac, // OUTPUTS [m^-3 s^-1]
@@ -1137,6 +1255,11 @@
Global.Add("CppModDDSGITAURecHol2","(",new OneOperator11_<double, KN<double>*, KN<double>*,KN<double>*, KN<double>*,
KN<double>*, KN<double>*, KN<double>*, KN<double>*,KN<double>*,KN<double>*,KN<double>*>(CppModDDSGITAURecHol2));
+ Global.Add("CppModDDSGITAURecSurfEle2","(",new OneOperator11_<double, KN<double>*,KN<double>*, KN<double>*,
+ KN<double>*, KN<double>*, KN<double>*, KN<double>*,KN<double>*,KN<double>*,KN<double>*,KN<double>*>(CppModDDSGITAURecSurfEle2));
+ Global.Add("CppModDDSGITAURecSurfHol2","(",new OneOperator11_<double, KN<double>*, KN<double>*,KN<double>*, KN<double>*,
+ KN<double>*, KN<double>*, KN<double>*, KN<double>*,KN<double>*,KN<double>*,KN<double>*>(CppModDDSGITAURecSurfHol2));
+
Global.Add("CppModDDSGEleJac2","(",new OneOperator8_<double, KN<double>*, KN<double>*, KN<double>*, KN<double>*,
KN<double>*, KN<double>*, KN<double>*, KN<double>*>(CppModDDSGEleJac2));
Global.Add("CppModDDSGHolJac2","(",new OneOperator10_<double, KN<double>*, KN<double>*, KN<double>*,
Modified: fsem/models/modules/Semi/fsem_ModMisc_DDSG.edp
===================================================================
--- fsem/models/modules/Semi/fsem_ModMisc_DDSG.edp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/models/modules/Semi/fsem_ModMisc_DDSG.edp 2007-03-22 15:20:02 UTC (rev 123)
@@ -315,6 +315,32 @@
return 0;
}
+func real ModDDSGITAURecSurfEle2() {
+
+ GloMeshFieldReset(GloVarDiffCOEFas);
+ GloMeshFieldReset(GloVarDiffCOEFfs);
+
+
+ GloMeshFieldInterpol(GloVarSemiNIE);
+ GloMeshFieldInterpol(GloVarSemiNCT);
+ GloMeshFieldInterpol(GloVarSemiNVT);
+ GloMeshFieldInterpol(GloVarTempT);
+ GloMeshFieldInterpol(GloVarSemiDDSGRhoP);
+ GloMeshFieldInterpol(GloVarSemiDEGAP);
+ GloMeshFieldInterpol(GloVarSemiGenRecSurfTOT);
+ GloMeshFieldInterpol(ParMatxyzEG300);
+
+
+ real[int] BandGapArray(3);
+ ModBandGapArray(BandGapArray);
+
+ CppModDDSGITAURecSurfEle2(GloVarDiffCOEFas[], GloVarDiffCOEFfs[], /* OUTPUTS */
+ GloVarSemiNIE[], GloVarSemiNCT[], GloVarSemiNVT[], GloVarTempT[],
+ GloVarSemiDDSGRhoP[],GloVarSemiDEGAP [] , GloVarSemiGenRecSurfTOT[] , BandGapArray,ParMatxyzEG300[] ); /* INPUTS */
+ return 0;
+}
+
+
func real ModDDSGITAURecHol() {
@@ -369,6 +395,33 @@
return 0;
}
+func real ModDDSGITAURecSurfHol2() {
+
+
+ GloMeshFieldReset(GloVarDiffCOEFas);
+ GloMeshFieldReset(GloVarDiffCOEFfs);
+
+
+ GloMeshFieldInterpol(GloVarSemiNIE);
+ GloMeshFieldInterpol(GloVarSemiNCT);
+ GloMeshFieldInterpol(GloVarSemiNVT);
+ GloMeshFieldInterpol(GloVarTempT);
+ GloMeshFieldInterpol(GloVarSemiDDSGRhoN);
+ GloMeshFieldInterpol(GloVarSemiDEGAP);
+ GloMeshFieldInterpol(GloVarSemiGenRecSurfTOT);
+ GloMeshFieldInterpol(ParMatxyzEG300);
+
+
+ real[int] BandGapArray(3);
+ ModBandGapArray(BandGapArray);
+
+ CppModDDSGITAURecHol2( GloVarDiffCOEFas[], GloVarDiffCOEFfs[], /* OUTPUTS */
+ GloVarSemiNIE[], GloVarSemiNCT[], GloVarSemiNVT[], GloVarTempT[],
+ GloVarSemiDDSGRhoN[],GloVarSemiDEGAP [] , GloVarSemiGenRecSurfTOT[] , BandGapArray,ParMatxyzEG300[]); /* INPUTS */
+ return 0;
+}
+
+
func real ModDDSGPotJac() {
Modified: fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.cpp
===================================================================
--- fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.cpp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.cpp 2007-03-22 15:20:02 UTC (rev 123)
@@ -1,5 +1,10 @@
/*
* SRH recombination, with and without doping concentration dependent lifetime.
+ *
+ * See also fsem_ModMisc_DDSG.cpp
+ *
+ *
+ * TO BE CHECKED!!! Comments do not always indicate the right units (Fabian says)
*/
#include <iostream>
@@ -20,7 +25,7 @@
* WARNING! This function compute FSRH and NOT the recombination rate.
* This is used to solve DD with the Gummel map
*
- * RecRate_SRH = (n * p - nie) * FSRH // m^-3 s^-1
+ * RecRate_SRH = (n * p - nie^2) * FSRH // m^-3 s^-1
*
* where FSRH = 1 / (Taun * (p+nie) + Taup * (n+nie) // m^+3 s^-1
*/
@@ -59,7 +64,6 @@
double Nmod;
double Pmod;
- // Compute the net gen/recombination rate U [m^-3 s^-1]:
int nn = N->N(); // get the number of nodes
for(int i=0; i<nn; i++) { // loop on the nodes
@@ -73,9 +77,9 @@
+ taup * ( Nmod + (*(Nie[0]+i))); // denominator of SRH expression
// SRH recombination rate U
- (*(U[0]+i)) = 1.0 / RecVolSRHDen ;
+ (*(U[0]+i)) = 1.0 / RecVolSRHDen ; // m^+3 s^-1
- *(D_U_DN[0]+i) = - taup / (RecVolSRHDen*RecVolSRHDen); /* [s-1] */
+ *(D_U_DN[0]+i) = - taup / (RecVolSRHDen*RecVolSRHDen); /* [m^+6 s-1] */
*(D_U_DP[0]+i) = - taun / (RecVolSRHDen*RecVolSRHDen);
@@ -84,6 +88,74 @@
}
+
+// SRH SURFACE recombination with Doping concentration dependent recombination velocities
+/*
+ * WARNING! This function compute FSRH and NOT the recombination rate.
+ * This is used to solve DD with the Gummel map
+ *
+ * RecRate_SRH_surf = (n * p - nie^2) * FSRH_surf // m^-2 s^-1
+ *
+ * where FSRH_surf = 1 / ( (p+nie)/v_n + (n+nie)/v_p // m^+4 s^-1
+ */
+Complex CppModDDSGRecSurfSRHConcDep(KN<double> *const & U, // OUTPUTS:
+ KN<double> *const & D_U_DN, KN<double> *const & D_U_DP,
+ KN<double> *const & N, KN<double> *const & P, // INPUTS: total electrons and holes
+ KN<double> *const & Nie, // intrinsic carrier concentration
+ KN<double> *const & Ntot, // total doping concentration
+ KN<double> *const & VN0, KN<double> *const & VP0, // SRH surface rec velocity coefs
+ KN<double> *const & NSRH, KN<double> *const & PSRH)
+{
+
+ // Check if all input vector have the same dimensions:
+ if((U->N() != D_U_DN->N()) || (D_U_DN->N() != D_U_DP->N()) || (D_U_DP->N() != N->N()) || (N->N() != P->N()) || (P->N() != Nie->N())
+ || (Nie->N() != Ntot->N()) || (Ntot->N() != VN0->N()) || (VN0->N() != VP0->N())
+ || (VP0->N() != NSRH->N()) || (NSRH->N() != PSRH->N()) ) {
+ cout << "*** ERROR *** function CppModDDSGRecSurfSRHConcDep." << endl;
+ cout << "U->N(): " << U->N() << endl;
+ cout << "D_U_DN->N(): " << D_U_DN->N() << endl;
+ cout << "D_U_DP->N(): " << D_U_DP->N() << endl;
+ cout << "N->N(): " << N->N() << endl;
+ cout << "P->N(): " << P->N() << endl;
+ cout << "Nie->N(): " << Nie->N() << endl;
+ cout << "Ntot->N(): " << Ntot->N() << endl;
+ cout << "VN0->N(): " << VN0->N() << endl;
+ cout << "VP0->N(): " << VP0->N() << endl;
+ cout << "NSRH->N(): " << NSRH->N() << endl;
+ cout << "PSRH->N(): " << PSRH->N() << endl;
+ cout << "*** Error ***: cppModDDSGRecSurfSRHConcDep: input vectors do no have the same dimension. Aborting." << endl;
+ exit(0);
+ }
+
+ double vn;
+ double vp;
+ double RecVolSRHDen;
+ double Nmod;
+ double Pmod;
+
+ int nn = N->N(); // get the number of nodes
+ for(int i=0; i<nn; i++) { // loop on the nodes
+
+ Nmod = abs((*(N[0]+i)));
+ Pmod = abs((*(P[0]+i)));
+
+ vn = (*(VN0[0]+i)); // So far, recombination velocities are ...
+ vp = (*(VP0[0]+i)); // ... independent of doping concentration. (NSRH and PSRH are not used yet). TODO.
+
+ RecVolSRHDen = ( Pmod + (*(Nie[0]+i)))/vn + ( Nmod + (*(Nie[0]+i)))/vp; // denominator of SRH expression
+
+ // SRH recombination rate U
+ (*(U[0]+i)) = 1.0 / RecVolSRHDen ; // m^+4 s^-1
+
+ *(D_U_DN[0]+i) = - 1.0 / (vp * RecVolSRHDen*RecVolSRHDen); /* [m^7 s-1] */
+
+ *(D_U_DP[0]+i) = - 1.0 / (vn * RecVolSRHDen*RecVolSRHDen);
+
+ }
+
+}
+
+
Complex CppModDDSGRecVolSRHEleH0ConcDep(KN<double> *const & U, // OUTPUTS:
KN<double> *const & D_U_DN, KN<double> *const & D_U_DP,
KN<double> *const & N, KN<double> *const & P, // INPUTS: total H1 carriers and total holes
@@ -543,11 +615,13 @@
Init();
};
Init init;
-Init::Init(){ Global.Add("CppModDDSGRecVolSRHConcDep","(",new OneOperator11_<Complex, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* >(CppModDDSGRecVolSRHConcDep));
- Global.Add("CppModDDSGRecVolSRHEleH0ConcDep","(",new OneOperator12_<Complex, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<Complex>*>(CppModDDSGRecVolSRHEleH0ConcDep));
- Global.Add("CppModDDSGRecVolSRHHolH0ConcDep","(",new OneOperator12_<Complex, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<Complex>*>(CppModDDSGRecVolSRHHolH0ConcDep));
- Global.Add("CppModDDSGSRHAddGamman2H0","(",new OneOperator12_<double, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGamman2H0));
- Global.Add("CppModDDSGSRHAddGammap2H0","(",new OneOperator13_<double, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGammap2H0));
-Global.Add("CppModDDSGSRHAddGamman2H0v2","(",new OneOperator12_<double, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*,KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGamman2H0v2));
- Global.Add("CppModDDSGSRHAddGammap2H0v2","(",new OneOperator12_<double, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGammap2H0v2));
+Init::Init(){
+ Global.Add("CppModDDSGRecVolSRHConcDep","(",new OneOperator11_<Complex, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* >(CppModDDSGRecVolSRHConcDep));
+ Global.Add("CppModDDSGRecSurfSRHConcDep","(",new OneOperator11_<Complex, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* >(CppModDDSGRecSurfSRHConcDep));
+ Global.Add("CppModDDSGRecVolSRHEleH0ConcDep","(",new OneOperator12_<Complex, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<Complex>*>(CppModDDSGRecVolSRHEleH0ConcDep));
+ Global.Add("CppModDDSGRecVolSRHHolH0ConcDep","(",new OneOperator12_<Complex, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<Complex>*>(CppModDDSGRecVolSRHHolH0ConcDep));
+ Global.Add("CppModDDSGSRHAddGamman2H0","(",new OneOperator12_<double, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGamman2H0));
+ Global.Add("CppModDDSGSRHAddGammap2H0","(",new OneOperator13_<double, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGammap2H0));
+ Global.Add("CppModDDSGSRHAddGamman2H0v2","(",new OneOperator12_<double, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*,KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGamman2H0v2));
+ Global.Add("CppModDDSGSRHAddGammap2H0v2","(",new OneOperator12_<double, KN<double>*, KN<double>*, KN<double>*, KN<Complex>*, KN<double>*, KN<double>*, KN<double>*, KN<double>*, KN<double>* , KN<double>*, KN<double>*, KN<double>*>(CppModDDSGSRHAddGammap2H0v2));
}
Modified: fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.edp
===================================================================
--- fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.edp 2007-03-13 17:04:56 UTC (rev 122)
+++ fsem/models/modules/Semi/fsem_ModRecSRH_DDSG.edp 2007-03-22 15:20:02 UTC (rev 123)
@@ -21,10 +21,10 @@
*************************************************/
// OUTPUT:
-// R: the recombination rate [m^3 s^-1]
+// R: FSRH (this is NOT the recombination rate) [m^3 s^-1]
// INPUTS:
// N, P, Nie
-func real ModDDSGRecVolSRHConcDep() {
+func real ModDDSGRecVolSRHConcDep() {
GloMeshFieldReset(GloVarSemiGenRecSRH);
GloMeshFieldReset(GloVarSemidGenRecSRHdELE);
GloMeshFieldReset(GloVarSemidGenRecSRHdHOL);
@@ -38,16 +38,43 @@
GloMeshFieldInterpol(ParMatxyzNSRH);
GloMeshFieldInterpol(ParMatxyzPSRH);
-
CppModDDSGRecVolSRHConcDep(GloVarSemiGenRecSRH[], /* OUTPUTS */
- GloVarSemidGenRecSRHdELE[], GloVarSemidGenRecSRHdHOL[],
- GloVarSemiELE[], GloVarSemiHOL[], GloVarSemiNIE[], GloVarSemiDOPTOT[],
- ParMatxyzTAUN0[], ParMatxyzTAUP0[], ParMatxyzNSRH[], ParMatxyzPSRH[] ); /* INPUTS */
+ GloVarSemidGenRecSRHdELE[], GloVarSemidGenRecSRHdHOL[],
+ GloVarSemiELE[], GloVarSemiHOL[], GloVarSemiNIE[], GloVarSemiDOPTOT[],
+ ParMatxyzTAUN0[], ParMatxyzTAUP0[], ParMatxyzNSRH[], ParMatxyzPSRH[]); /* INPUTS */
return 0;
}
+// OUTPUT:
+// R: FSRH_surf (this is NOT the surface recombination rate) [m^4 s^-1]
+// INPUTS:
+// N, P, Nie
+func real ModDDSGRecSurfSRHConcDep() {
+ GloMeshFieldReset(GloVarSemiGenRecSurfSRH);
+ GloMeshFieldReset(GloVarSemidGenRecSurfSRHdELE);
+ GloMeshFieldReset(GloVarSemidGenRecSurfSRHdHOL);
+
+ GloMeshFieldInterpol(GloVarSemiELE);
+ GloMeshFieldInterpol(GloVarSemiHOL);
+ GloMeshFieldInterpol(GloVarSemiNIE);
+ GloMeshFieldInterpol(GloVarSemiDOPTOT);
+ GloMeshFieldInterpol(ParMatxyzVN0);
+ GloMeshFieldInterpol(ParMatxyzVP0);
+ GloMeshFieldInterpol(ParMatxyzNSRH);
+ GloMeshFieldInterpol(ParMatxyzPSRH);
+
+ CppModDDSGRecVolSRHConcDep(GloVarSemiGenRecSurfSRH[], /* OUTPUTS */
+ GloVarSemidGenRecSurfSRHdELE[], GloVarSemidGenRecSurfSRHdHOL[],
+ GloVarSemiELE[], GloVarSemiHOL[], GloVarSemiNIE[], GloVarSemiDOPTOT[],
+ ParMatxyzVN0[], ParMatxyzVP0[], ParMatxyzNSRH[], ParMatxyzPSRH[]); /* INPUTS */
+ return 0;
+}
+
+
+
+
func real ModDDSGRecVolSRHEleH0() {
GloMeshFieldReset(GloVarDiffCOEFf);
GloMeshFieldReset(GloVarSemidGenRecSRHdELE);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|