[Fsem-commits] SF.net SVN: fsem: [138] fsem/examples-tutorial/ 003f_CarrNonLinear_SteadyPeriodic.ed
Status: Beta
Brought to you by:
fabiandortu
|
From: <fab...@us...> - 2007-11-15 12:45:18
|
Revision: 138
http://fsem.svn.sourceforge.net/fsem/?rev=138&view=rev
Author: fabiandortu
Date: 2007-11-15 04:45:21 -0800 (Thu, 15 Nov 2007)
Log Message:
-----------
Added comment on steady periodic example file.
Modified Paths:
--------------
fsem/examples-tutorial/003f_CarrNonLinear_SteadyPeriodic.edp
Modified: fsem/examples-tutorial/003f_CarrNonLinear_SteadyPeriodic.edp
===================================================================
--- fsem/examples-tutorial/003f_CarrNonLinear_SteadyPeriodic.edp 2007-08-24 11:40:52 UTC (rev 137)
+++ fsem/examples-tutorial/003f_CarrNonLinear_SteadyPeriodic.edp 2007-11-15 12:45:21 UTC (rev 138)
@@ -8,10 +8,12 @@
real thick = 600 * ConvU2M;
real radius = 600 * ConvU2M;
bool waitflag = false;
+
/****************************************************************
* Define the mesh. The mesh must be adimentional (I will try to
* make that automatice in the future)
****************************************************************/
+
real r1 = radius/GloScaX;
real y1 =-thick/GloScaY;
border topRight(t=r1, 0.3*r1) { x=t; y=0;}
@@ -22,9 +24,6 @@
GloMesh = buildmesh(topRight(50) + topLeft(100) + outer(50) + bottom(50) + inner(200));
//GloTempContactLabel[0] = 100; GloTempContactTc[0] =0; //this line is needed if frequency = 0, otherwise non physical temp.
-
-
-
ParUsrNDOP = 0.0;
ParUsrPDOP = 1e16 * ConvC2M^(-3);
@@ -46,30 +45,44 @@
GloVarSemiELE=1e18*ConvC2M^(-3);
- ModUsrOptCarrGen=1; // Switch on optical carrier generation
- ModUsrBTBIP=1; // Band-to-band absorption model (Smith)
-ModUsrBGNSchenk=1;
- ModUsrRecAuger=1;
- ModUsrRecSRH=1;
- ModUsrRecSRHConcDepLifeTime=1;
- ModUsrMob = ModCSTMobPHUNI2;
- ModUsrDiff = ModCSTDiffFermifromMob;
-ModUsrDiffAmbi = ModCSTDiffAmbifromDiff;
+ModUsrOptCarrGen=1; // Switch on optical carrier generation
+ModUsrBTBIP=1; // Band-to-band absorption model (Smith)
+//ModUsrBGNSchenk=1; // Unset this model in order to have "Diff" (solution difference between steady state and steady periodic. see below) very small at 0 frequency.
+ModUsrRecAuger=1;
+ModUsrRecSRH=1;
+ModUsrRecSRHConcDepLifeTime=1;
+ModUsrMob = ModCSTMobPHUNI2;
+ModUsrDiff = ModCSTDiffFermifromMob;
+//ModUsrDiffAmbi = ModCSTDiffAmbifromDiff; // Unset this model in order to have "Diff" (solution difference between steady state and steady periodic. see below) very small at 0 frequency
+ModUsrDiffAmbi = ModCSTDiffAmbiCst;
/**************************************************************
- * Solve the non linear steady periodic state diff equation (probe+pump)
+ * Solve the non linear STEADY STATE diff equation (probe+pump)
**************************************************************/
-SolveCarrNonlinearSteady();
+SolveCarrNonlinearSteady(); // **** SOLVE ****
-GloVhP1 StatEXC;
-StatEXC = GloVarSemiEXC;
-ParUsrH1H0 = 0 ; // H1 is not taken into account in the calculation of Eg and D
-ParUsrLaserModFreq=1e6;
-SolveCarrNonlinearSteadyPeriodic(true); //(true) to work out the value of H2 and H3 as well. Usually not necessary
+/**************************************************************
+ * Solve the non linear STEADY PERIODIC state diff equation (probe+pump)
+ **************************************************************/
+
+GloVhP1 StatEXC; // Stationnary excess carrier.
+StatEXC = GloVarSemiEXC; //We store this to be able to compare with the
+ // steady periodic solution at zero frequency.
+
+ParUsrH1H0 = 0.0 ; // H1 is not taken into account in the calculation of Eg and D.
+ // The value can bet set as a real between [-2.0 to +2.0]
+ // Set to 0 to be at DC value.
+ // Set to +2 to be at high peak value
+ // Set to -2 to be at low peak value.
+ParUsrLaserModFreq=0; //1e6; // Hz
+
+SolveCarrNonlinearSteadyPeriodic(true); // **** SOLVE ****
+ // option (true) is to work out the value of H2 and H3 as well.
+ // Usually not necessary
-GloVhP1 TotalEXC;
+GloVhP1 TotalEXC; // Store peak amplitude to be compared with StatEXC
TotalEXC = GloVarSemiEXC + 2 * real(GloVarSemiEXCH1) + 2 * real(GloVarSemiEXCH2) + 2 * real(GloVarSemiEXCH3) ;
GloVhP1 Diff;
@@ -124,32 +137,35 @@
ParUsrLaserR[0] = 1 * ConvU2M;
ParUsrLaserR[1] = 1 * ConvU2M;
-//Full steady periodic calculations with complex heat generation (due to recombination term of H1)
-
+/*****************************************
+ **** Full steady periodic calculations
+ **** with COMPLEX heat generation (due to recombination term of H1)
+ *********************/
ModUsrHeatConductivityCst = 1;
ModUsrHeatRhoCpCst = 1;
ModUsrHeatHotCarrier = 1;
-ModUsrHeatRecH1 = 1; //heat generation due to recombination is complex
+ModUsrHeatRec = 0; // must be set to zero when COMPLEX generation is assumed
+ModUsrHeatRecH1 = 1; // heat generation due to recombination is complex
-SolveTempLinearSteadyPeriodic();
+SolveTempLinearSteadyPeriodic(); // **** SOLVE (temperature steady periodic complex generation H1) ****
GloVhP1<complex> TempfullSP;
TempfullSP = GloVarTempTc;
-// Specify heat source by a user defined function
-ModUsrHeatRecH1 = 0; //must absolutely be 0 before any further temperature resolution!
+/*********************************************
+ **** Full steady periodic calculations
+ **** with REAL heat generation (due to recombination term of H1).
+ ***********************/
+ModUsrHeatRec = 1; // heat generation due to recombination is real (abs value of the previous heat generation)
+ModUsrHeatRecH1 = 0; // must be set to zero when REAL generation is assumed
-//Full steady periodic calculations with real heat generation (due to recombination term of H1).
+GloVarSemiGenRecTOT = abs(GloVarSemiGenRecTOTH1); // Set recombination term for H1.
+ // The recombination is assumed in phase with the pump
+cout <<"RECTOTH1: "<< GloVarSemiGenRecTOTH1[].max << endl; // DEBUG output
+SolveTempLinearSteadyPeriodic(); // **** SOLVE (temperature steady periodic real generation abs(H1) ) ****
-ModUsrHeatRec = 1;//heat generation due to recombination is real (abs value of the previous heat generation)
-GloVarSemiGenRecTOT = GloVarSemiGenRecTOTH1; //recombination term for H1
-cout <<"RECTOTH1: "<< GloVarSemiGenRecTOTH1[].max <<endl;
-
-
-SolveTempLinearSteadyPeriodic();
-
GloVhP1 RealAbsG;
RealAbsG = real(GloVarTempTc);
GloVhP1 ImagAbsG;
@@ -159,26 +175,28 @@
/**************************************************************
* Solve the linear steady periodic heat equation (pump H2)
**************************************************************/
-//The option of SolveCarrNonlinearSteadyPeriodic() must obviously be true for this calculation!
-
-ParUsrLaserModFreq=2 * ParUsrLaserModFreq; //Absolutely needed!
+// The option of SolveCarrNonlinearSteadyPeriodic() must obviously be true for
+// this calculation since the complex the H2 carrier component is used in the calculation.
+
+ParUsrLaserModFreq=2 * ParUsrLaserModFreq; // Need to double the frequency. Absolutely needed!
ModUsrHeatRec = 0;
+ModUsrHeatRecH1 = 0;
ModUsrHeatRecH2 = 1; //heat generation due to recombination is complex for second harmonic
-ModUsrHeatHotCarrier = 0; //no hot carrier component to the 2nd temperature harmonic
-SolveTempLinearSteadyPeriodic();
+ModUsrHeatHotCarrier = 0; // no hot carrier component to the 2nd temperature harmonic (hot carrier only provides a first harmonic)
+SolveTempLinearSteadyPeriodic(); // **** SOLVE (temperature steady periodic complex generation H2) ****
-
-
/*********************************
* Test (for debugging purpose)
*********************************/
+// Note that the test do not succeed. (15 Novembre 2007). The reason is most probably that saved values correspond to another setting
+
x=0;
y=0;
-real Diff00 = Diff;
+real Diff00 = Diff; // this number should be small (1e21 m^-3 when pump frequency is 0 Hz and when all model are linear (constant diffusivity and no BGN)
real StatEXC00 = StatEXC;
real GloVarSemiEXC00 = TotalEXC;
real GloVarSemiEXC001real = RealEXCc;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|