Skip to content

Commit

Permalink
update to v4.35 ersion 4.35, 3 June 2022, LJAK
Browse files Browse the repository at this point in the history
  • Loading branch information
Jan Anton Koster committed Jun 3, 2022
1 parent 834ec9e commit 91f2d15
Show file tree
Hide file tree
Showing 35 changed files with 613 additions and 676 deletions.
Binary file modified Docs/Manual.pdf
Binary file not shown.
24 changes: 21 additions & 3 deletions Docs/change_log.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,29 @@
Version 4.35, 3 June 2022, LJAK

1) BUG fix (SimSS only!): In the process of merging ZimT and SimSS (formerly known as SIMsalabim), the functionality of SimSS parameter ion_red_rate was lost. Within SimSS's main code, the parameter (TJVList.UpdateIons) was set and stored in the log_file, but it was never used in the main code. So, if fixing the ions, for example, by setting ion_red_rate = 0, the ion distributions would still be computed at every voltage.
To fix this, I have added a field (UpdateIons) to TState. So, per state (curr, new) that is being solved, we need to specify whether we should update the ion distributions are whether to (artificially!) keep them fixed. In SimSS, we simply copy this value from the list of voltages and tasks that SimSS should do (variable JVSim.UpdateIons). In ZimT, this field is always TRUE as we don't allow for artificially fixing the ions.

2) Refined the help message (proc Display_Help_Exit) in that it now shows the name of the program.

3) In the Poisson solver (proc Solve_Poisson), we have a bit of code that changes the carrier densities (n and p) to reflect any changes to the potential. So, the Poisson and continuity equations are coupled. This helps (quite a lot) in finding a solution, but so far we have limited this to steady-state (dti=0) only. From now on, we also use it in transient cases. In order to improve the stability of the code, I have set a limit to this coupling (parameter couplePC). This defines by how much the densities can change per loop. Setting couplePC = 0 means that the densities are not changed by the Poisson solver. Positive values allow for some change per loop.

4) In order to keep the number of numerical parameters to a manageable number, I have moved TolRomb, MaxRombIt, LowerLimBraun, and UpperLimBraun to DDTypesAndConstants (see block with magic numbers).

5) Change in unit InputOutputUtils: Routines getStringfromCL and getRealfromCL would print an error message when an exception was raised, but they would not stop the program. So, for example if running ./zimt -L -Cp 1E-10, then ZimT would show an error message "-Cp" is an invalid float. In other words, it would not stop but run ZimT with whatever thickness L (and capture coefficient Cp) were in the device_parameter file.

Version 4.34, 17 May 2022, LJAK

In order to make it easier to quantify how many charge carriers are lost at internal interfaces (like transport layer/perovskite), I have changed some of the columns in the tj_file/JV_file: JIntSRHn JIntSRHp are now split into left and right. In steady-state (SimSS), the interfacial recombination currents are now called JIntLeft and JIntRight. In ZimT, these currents can be different for electrons and holes, so we have four such columns: JIntLeftn, JIntLeftp, JIntRightn, and JintRightp.


Version 4.33, 25 Feb 2022, LJAK

Improved the data in ZimT's tVG_file (less relevant to SimSS as that's steady-state):

1) In transient simulations, the SRH (bulk or interface) recombination rate of holes and electrons need not be equal. So, just like in the Var_file, I have split these rates (i.e. their equivalent current densities) into two seperate values for electrons and holes.
1) In transient simulations, the SRH (bulk or interface) recombination rate of holes and electrons need not be equal. So, just like in the Var_file, I have split these rates (i.e. their equivalent current densities) into two separate values for electrons and holes.

2) I have added two additional columns (Jdndt and Jdpdt) to ZimT's tVG_file output: the currents due to changes in the electron and hole densities in time, so dn/dt and dp/dt. Thus, neglecting changes in the ion densities, the total current (Jext) should be equil to the sum of the individual generation/recombination terms, the minority currents at the contacts, the ionic currents, and the displacement current, provided that Jdndt and Jdpdt are included.
To implement this, I have addded another variable (PrevState : TState) that is passed on to Write_To_tJV_File and renamed the astate to CurrState. So, Write_To_tJV_File has access to both the current state (CurrState) and the one in the previous time step (PrevState).
2) I have added two additional columns (Jdndt and Jdpdt) to ZimT's tVG_file output: the currents due to changes in the electron and hole densities in time, so dn/dt and dp/dt. Thus, neglecting changes in the ion densities, the total current (Jext) should be equal to the sum of the individual generation/recombination terms, the minority currents at the contacts, the ionic currents, and the displacement current, provided that Jdndt and Jdpdt are included.
To implement this, I have added another variable (PrevState : TState) that is passed on to Write_To_tJV_File and renamed the astate to CurrState. So, Write_To_tJV_File has access to both the current state (CurrState) and the one in the previous time step (PrevState).


Version 4.32, 24 Feb 2022, LJAK, MK
Expand Down
17 changes: 5 additions & 12 deletions SimSS/device_parameters.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
** SimSS Device data:
** Don't change the order of the parameters, comments can be added anywhere,
** but only after an '*'. Use '**' if you want your comment to be left-justified.
** version: 4.33
** version: 4.35

**General**************************************************************************
T = 295 * K, absolute temperature
Expand Down Expand Up @@ -102,22 +102,15 @@ tolPois = 1e-5 * V, abs. tolerance of iterative Poisson solver
maxDelV = 10 * maximum change (in Vt) of the potential per loop
MaxItPois = 1e3 * max. number it. Poisson loop
MaxItSS = 1e3 * max. number it. main loop
CurrDiffInt = 2 * Calc. current from differential (1) or integral (2) expression
tolJ = 1e-2 * max. allowed relative range of current, 1% OK.
CurrDiffInt = 1 * Calc. current from differential (1) or integral (2) expression
tolJ = 1e-3 * max. allowed relative range of current, 1% OK.
MinRelChange = 1e-7 * if change per loop smaller than this, then the loop converges
MinAbsJDark = 0 * A/m2, if |Jint|<MinAbsJDark and Gehp=0 we simply stop and take Jint=0
accDens = 1 * accelation parameter for density solver, 0 < accDens < 2
couplePC = 4 * >= 0, coupling between Poisson equation and continuity equations
accDens = 0.9 * accelation parameter for density solver, 0 < accDens < 2
IgnoreNegDens = 1 * whether(1) or not(<>1) to ignore negative densities
FailureMode = 2 * how treat failed (t,V,G) points: 0: stop, 1: ignore, 2: skip
grad = 0 * determines shape of exp. grid, increase grad for smaller h[1]
TolRomb = 1e-2 * relative tolerance of Romberg integration, 1e-2 is a good
* starting point
MaxRombIt = 15 * max. # of iterations in Romberg integration, 10 is sufficient
LowerLimBraun = 0.01 * Lower limit of integration of distribution of a in terms of a
* should be non-zero (otherwise division by zero)!
UpperLimBraun = 10 * Upper limit of integration of distribution of a in terms of a
* only relevant if ThermLengDist<>1 (delta function)
* 10 seems sufficient for Gaussian, but for r^2 exp., use 20

**Voltage range of simulation*******************************************************
Vdistribution = 2 * 1 for uniform (specified by Vstep), 2 for logarithmic (specified by Vacc and NJV)
Expand Down
5 changes: 3 additions & 2 deletions SimSS/simss.pas
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ function given as argument with @. If you don't like this behavior,

CONST
ProgName = TProgram.SimSS;
version = '4.33'; {version, 1.00 = 10-03-2004}
version = '4.35'; {version, 1.00 = 10-03-2004}

{first: check if the compiler is new enough, otherwise we can't check the version of the code}
{$IF FPC_FULLVERSION < 30200} {30200 is 3.2.0}
Expand Down Expand Up @@ -605,7 +605,7 @@ function given as argument with @. If you don't like this behavior,
Print_Welcome_Message(ProgName, version);

{if '-h' or '-H' option is given then display some help and exit:}
IF hasCLoption('-h') THEN Display_Help_Exit;
IF hasCLoption('-h') THEN Display_Help_Exit(ProgName);
IF hasCLoption('-tidy') THEN Tidy_Up_Parameter_File(TRUE); {tidy up file and exit}
IF NOT Correct_Version_Parameter_File(ProgName, version) THEN Stop_Prog('Version of SIMsalabim and '+parameter_file+' do not match.');

Expand All @@ -632,6 +632,7 @@ function given as argument with @. If you don't like this behavior,
WHILE (Vcount<=stv.NJV) AND (NOT quit_Voc) DO {loop over voltages}
BEGIN
new.Vint:=JVSim[VCount].Vint;
new.UpdateIons:=JVSim[VCount].UpdateIons;

{now use Main_Solver to iterative solve the Poisson eq and continuity equations:}
Main_Solver(curr, new, MainIt, Conv_Main, StatusStr, stv, par);
Expand Down
Empty file modified Tests/run_tests.py
100755 → 100644
Empty file.
11 changes: 2 additions & 9 deletions Tests/test_1/device_parameters.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
** SimSS Device data:
** Don't change the order of the parameters, comments can be added anywhere,
** but only after an '*'. Use '**' if you want your comment to be left-justified.
** version: 4.33
** version: 4.35

**General**************************************************************************
T = 295 * K, absolute temperature
Expand Down Expand Up @@ -106,18 +106,11 @@ CurrDiffInt = 1 * Calc. current from differential (1) or integral (2) e
tolJ = 1e-3 * max. allowed relative range of current, 1% OK.
MinRelChange = 1e-8 * if change per loop smaller than this, then the loop converges
MinAbsJDark = 0 * A/m2, if |Jint|<MinAbsJDark and Gehp=0 we simply stop and take Jint=0
couplePC = 4 * >= 0, coupling between Poisson equation and continuity equations
accDens = 0.9 * accelation parameter for density solver, 0 < accDens < 2
IgnoreNegDens = 1 * whether(1) or not(<>1) to ignore negative densities
FailureMode = 2 * how treat failed (t,V,G) points: 0: stop, 1: ignore, 2: skip
grad = 2 * determines shape of exp. grid, increase grad for smaller h[1]
TolRomb = 1e-2 * relative tolerance of Romberg integration, 1e-2 is a good
* starting point
MaxRombIt = 15 * max. # of iterations in Romberg integration, 10 is sufficient
LowerLimBraun = 0.01 * Lower limit of integration of distribution of a in terms of a
* should be non-zero (otherwise division by zero)!
UpperLimBraun = 10 * Upper limit of integration of distribution of a in terms of a
* only relevant if ThermLengDist<>1 (delta function)
* 10 seems sufficient for Gaussian, but for r^2 exp., use 20

**Voltage range of simulation*******************************************************
Vdistribution = 2 * 1 for uniform (specified by Vstep), 2 for logarithmic (specified by Vacc and NJV)
Expand Down
Binary file modified Tests/test_1/test_1_result.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 91f2d15

Please sign in to comment.