Added Mean DeltaVth calculation and refined the model to take temperature into account

This commit is contained in:
Francesco Lannutti 2016-11-02 16:15:46 +01:00
parent 76ff8c31f2
commit 06c2bd2334
7 changed files with 317 additions and 48 deletions

View File

@ -7,6 +7,53 @@ Author: 2015 Francesco Lannutti - July 2015
#include "bsim4def.h"
#include "ngspice/sperror.h"
static int
listInsert (BSIM4vgsList **list, double vgs)
{
BSIM4vgsList *current, *previous ;
/* Loop until the end of the list */
previous = NULL ;
current = *list ;
while (current != NULL)
{
previous = current ;
current = current->next ;
}
/* Insert the new element into the list */
if (previous == NULL)
{
*list = TMALLOC (BSIM4vgsList, 1) ;
current = *list ;
} else {
current = TMALLOC (BSIM4vgsList, 1) ;
previous->next = current ;
}
/* Populate the element */
current->vgs = vgs ;
current->next = NULL ;
return 0 ;
}
static int
listPurge (BSIM4vgsList **list)
{
BSIM4vgsList *current, *previous ;
current = *list ;
while (current != NULL) {
previous = current ;
current = current->next ;
free (previous) ;
}
*list = NULL ;
return 0 ;
}
static int
BSIM4reliability_internal (BSIM4instance *here, CKTcircuit *ckt, unsigned int mode)
{
@ -22,7 +69,11 @@ BSIM4reliability_internal (BSIM4instance *here, CKTcircuit *ckt, unsigned int mo
von = here->BSIM4von ;
if (vds >= 0)
{
// printf ("VDS >= 0\tBSIM4type: %d\tBSIM4instance: %s\tVgs: %-.9g\tVon: %-.9g\t", model->BSIM4type, here->BSIM4name, vgs, von) ;
/* Insert 'vgs' into the list for the later average calculation */
listInsert (&(here->vgsList), vgs) ;
// listInsert (&(here->vgsList), ckt->CKTrhsOld [here->BSIM4gNodePrime]) ;
// printf ("VDS >= 0\tBSIM4type: %d\tBSIM4instance: %s\tVgs: %-.9g\tVon: %-.9g\n", model->BSIM4type, here->BSIM4name, vgs, von) ;
if (vgs > von)
{
if (here->BSIM4rgateMod == 3)
@ -60,7 +111,12 @@ BSIM4reliability_internal (BSIM4instance *here, CKTcircuit *ckt, unsigned int mo
} else {
double vgd ;
vgd = vgs - vds ;
// printf ("VDS < 0\tBSIM4type: %d\tBSIM4instance: %s\tVgd: %-.9g\tVon: %-.9g\t", model->BSIM4type, here->BSIM4name, vgd, von) ;
/* Insert 'vgd' into the list for the later average calculation */
listInsert (&(here->vgsList), vgd) ;
// listInsert (&(here->vgsList), ckt->CKTrhsOld [here->BSIM4gNodePrime]) ;
// printf ("VDS < 0\tBSIM4type: %d\tBSIM4instance: %s\tVgd: %-.9g\tVon: %-.9g\n", model->BSIM4type, here->BSIM4name, vgd, von) ;
if (vgd > von)
{
if (here->BSIM4rgateMod == 3)
@ -131,6 +187,9 @@ BSIM4reliability_internal (BSIM4instance *here, CKTcircuit *ckt, unsigned int mo
// Update the semiperiod counter
here->relStruct->semiPeriods++ ;
// Free the vgs average list
listPurge (&(here->vgsList)) ;
} else {
fprintf (stderr, "Reliability Analysis Error\n") ;
}
@ -153,6 +212,9 @@ BSIM4reliability_internal (BSIM4instance *here, CKTcircuit *ckt, unsigned int mo
// Update the semiperiod counter
here->relStruct->semiPeriods++ ;
// Free the vgs average list
listPurge (&(here->vgsList)) ;
} else if (here->relStruct->IsON == 0) {
// Until now, the device was OFF - Do NOTHING
delta = -1 ;
@ -243,14 +305,11 @@ BSIM4reliability_internal (BSIM4instance *here, CKTcircuit *ckt, unsigned int mo
}
if (here->relStruct->deltaVth > 0) {
model->number_of_aged_instances++ ;
model->total_deltaVth += here->relStruct->deltaVth * 1000 ;
printf ("DEVICE OK!!!\tTime: %-.9gs\t\t", ckt->CKTtime) ;
printf ("DeltaVth: %-.9gmV\t\t", here->relStruct->deltaVth * 1000) ;
printf ("Device Name: %s\t\t", here->BSIM4name) ;
printf ("Device Type: %s\n\n", model->BSIM4modName) ;
} else if (here->relStruct->deltaVth > 0) {
} else if (here->relStruct->deltaVth < 0) {
printf ("\n\n\n\nWarning: PROBLEMATIC DEVICE!!!\tTime: %-.9gs\t\t", ckt->CKTtime) ;
printf ("DeltaVth: %-.9gmV\t\t", here->relStruct->deltaVth * 1000) ;
printf ("Device Name: %s\t\t", here->BSIM4name) ;
@ -313,7 +372,15 @@ BSIM4reliability_internal (BSIM4instance *here, CKTcircuit *ckt, unsigned int mo
}
}
printf ("\n\nExtrapolation at 10 years:\n\t\t\t\tDeltaVth: %-.9gmV\n\n\n\n", here->relStruct->deltaVth * 1000) ;
printf ("\n\nExtrapolation at %-.9g years:\n\t\t\t\tDeltaVth: %-.9gmV\n\n\n\n", ckt->CKTtargetFitting, here->relStruct->deltaVth * 1000) ;
}
// Free the vgs average list
listPurge (&(here->vgsList)) ;
if (here->relStruct->deltaVth > 0) {
model->number_of_aged_instances++ ;
model->total_deltaVth += here->relStruct->deltaVth ;
}
} else {
fprintf (stderr, "Reliability Analysis Error\n") ;
@ -356,7 +423,7 @@ BSIM4reliability (GENmodel *inModel, CKTcircuit *ckt, unsigned int mode)
if (mode == 1) {
printf ("Number of aged BSIM4 PMOS instances: %u\n\twith a mean DeltaVth of: %-.9gmV\n\n\n",
model->number_of_aged_instances, model->total_deltaVth / model->number_of_aged_instances) ;
model->number_of_aged_instances, model->total_deltaVth * 1000 / model->number_of_aged_instances) ;
}
}
}

View File

@ -2667,6 +2667,7 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
here->relStruct->IsON = -1 ;
here->relStruct->deltaVthList = NULL ;
here->relStruct->semiPeriods = 0 ;
here->relStruct->Vstress = 0 ;
}
#endif

View File

@ -31,6 +31,11 @@ Modified by Pankaj Kumar Thakur, 07/23/2012
#ifdef RELAN
#include "../relmodel/relmodeldefs.h"
typedef struct sBSIM4vgsList {
double vgs ;
struct sBSIM4vgsList *next ;
} BSIM4vgsList ;
#endif
typedef struct sBSIM4instance
@ -580,6 +585,7 @@ typedef struct sBSIM4instance
#ifdef RELAN
RELMODELrelStruct *relStruct ;
BSIM4vgsList *vgsList ;
#endif
} BSIM4instance ;

View File

@ -22,6 +22,21 @@ IOP ("tau_0", RELMODEL_MOD_TAU0, IF_REAL, "tau_0"),
IOP ("beta", RELMODEL_MOD_BETA, IF_REAL, "beta"),
IOP ("tau_e", RELMODEL_MOD_TAUE, IF_REAL, "tau_e"),
IOP ("beta1", RELMODEL_MOD_BETA1, IF_REAL, "beta1"),
IOP ("type", RELMODEL_MOD_TYPE, IF_INTEGER, "beta1"),
IOP ("alpha_new", RELMODEL_MOD_ALPHA_NEW, IF_REAL, "beta1"),
IOP ("b_new", RELMODEL_MOD_B_NEW, IF_REAL, "beta1"),
IOP ("beta_new", RELMODEL_MOD_BETA_NEW, IF_REAL, "beta1"),
IOP ("e0_new", RELMODEL_MOD_E0_NEW, IF_REAL, "beta1"),
IOP ("k_new", RELMODEL_MOD_K_NEW, IF_REAL, "beta1"),
IOP ("kb_new", RELMODEL_MOD_K_NEW, IF_REAL, "beta1"),
IOP ("tau_c_fast_new", RELMODEL_MOD_TAU_C_FAST_NEW, IF_REAL, "beta1"),
IOP ("tau_c_slow_new", RELMODEL_MOD_TAU_C_SLOW_NEW, IF_REAL, "beta1"),
IOP ("tau_e_fast_new", RELMODEL_MOD_TAU_E_FAST_NEW, IF_REAL, "beta1"),
IOP ("tau_e_slow_new", RELMODEL_MOD_TAU_E_SLOW_NEW, IF_REAL, "beta1"),
IOP ("t_r_new", RELMODEL_MOD_T_R_NEW, IF_REAL, "beta1"),
IOP ("t_s_new", RELMODEL_MOD_T_S_NEW, IF_REAL, "beta1"),
IP ("relmodel", RELMODEL_MOD_RELMODEL, IF_FLAG, "Flag to indicate RELMODEL")
} ;

View File

@ -49,8 +49,6 @@ listInsert (RELMODELrelList **list, double time, double deltaVth)
int
RELMODELcalculateAging (GENinstance *inInstance, int modType, CKTcircuit *ckt, double t_aging, double t_step, unsigned int stress_or_recovery)
{
double A, i, Nt, R ;
double b, qFI ;
BSIM4instance *here ;
RELMODELmodel *relmodel ;
@ -69,52 +67,119 @@ RELMODELcalculateAging (GENinstance *inInstance, int modType, CKTcircuit *ckt, d
return 1 ;
}
Nt = pow ((sqrt (relmodel->RELMODELnts)), 3) * 1e-21 ;
A = (CHARGE / (4 * CONSTepsZero * 1e-9 * relmodel->RELMODELeps_hk)) * pow ((relmodel->RELMODELh_cut / (2 * sqrt (2 * relmodel->RELMODELm_star * relmodel->RELMODELw)) * 1e9), 2) ;
if (relmodel->RELMODELtype == 1) {
// Giorgio Liatis' Model
if (t_step == 0)
{
/* Extrapolation for 10 years when there is only stress */
here->relStruct->t_star = 0 ;
if (relmodel->RELMODELh_cut / (2 * sqrt (2 * relmodel->RELMODELm_star * relmodel->RELMODELw)) * log (1 + pow (((t_aging + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)) * 1e9 <= 2)
double A, i, Nt, R ;
double b, qFI ;
Nt = pow ((sqrt (relmodel->RELMODELnts)), 3) * 1e-21 ;
A = (CHARGE / (4 * CONSTepsZero * 1e-9 * relmodel->RELMODELeps_hk)) * pow ((relmodel->RELMODELh_cut / (2 * sqrt (2 * relmodel->RELMODELm_star * relmodel->RELMODELw)) * 1e9), 2) ;
if (t_step == 0)
{
here->relStruct->deltaVth = Nt * A * pow (log (1 + pow (((t_aging + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)), 2) ;
} else {
here->relStruct->deltaVth = (CHARGE / (4 * CONSTepsZero * 1e-9 * relmodel->RELMODELeps_hk)) * Nt * pow (here->BSIM4modPtr->BSIM4toxe * 1e9, 2) ;
}
} else {
for (i = 0 ; i < t_aging ; i += t_step)
{
if (stress_or_recovery)
// Extrapolation for 10 years when there is only stress
here->relStruct->t_star = 0 ;
if (relmodel->RELMODELh_cut / (2 * sqrt (2 * relmodel->RELMODELm_star * relmodel->RELMODELw)) * log (1 + pow (((t_aging + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)) * 1e9 <= 2)
{
if (relmodel->RELMODELh_cut / (2 * sqrt (2 * relmodel->RELMODELm_star * relmodel->RELMODELw)) * log (1 + pow (((i + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)) * 1e9 <= 2)
{
here->relStruct->deltaVth = Nt * A * pow (log (1 + pow (((i + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)), 2) ;
} else {
here->relStruct->deltaVth = (CHARGE / (4 * CONSTepsZero * 1e-9 * relmodel->RELMODELeps_hk)) * Nt * pow (here->BSIM4modPtr->BSIM4toxe * 1e9, 2) ;
}
here->relStruct->deltaVthMax = here->relStruct->deltaVth ;
here->relStruct->deltaVth = Nt * A * pow (log (1 + pow (((t_aging + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)), 2) ;
} else {
/* Without Temperature Dependency */
// here->relStruct->deltaVth = here->relStruct->deltaVthMax * log (1 + (1.718 / (1 + pow ((i / relmodel->RELMODELtau_e), relmodel->RELMODELbeta1)))) ;
/* With Temperature Dependency */
// b = 5.621 * 1.2e6 ;
b = 0.706 ;
qFI = 1.03 ;
R = b * pow (ckt->CKTtemp, 2) * exp (-qFI / (relmodel->RELMODELk_b * ckt->CKTtemp)) ; // R = b * pow (T, 2) * exp (-qFI/kT) ;
here->relStruct->deltaVth = (1 - R) * here->relStruct->deltaVthMax * (1 - log (1 + (1.718 / (1 + pow ((i / relmodel->RELMODELtau_e), relmodel->RELMODELbeta1))))) ;
here->relStruct->deltaVth = (CHARGE / (4 * CONSTepsZero * 1e-9 * relmodel->RELMODELeps_hk)) * Nt * pow (here->BSIM4modPtr->BSIM4toxe * 1e9, 2) ;
}
} else {
for (i = 0 ; i < t_aging ; i += t_step)
{
if (stress_or_recovery)
{
if (relmodel->RELMODELh_cut / (2 * sqrt (2 * relmodel->RELMODELm_star * relmodel->RELMODELw)) * log (1 + pow (((i + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)) * 1e9 <= 2)
{
here->relStruct->deltaVth = Nt * A * pow (log (1 + pow (((i + here->relStruct->t_star) / relmodel->RELMODELtau_0), relmodel->RELMODELbeta)), 2) ;
} else {
here->relStruct->deltaVth = (CHARGE / (4 * CONSTepsZero * 1e-9 * relmodel->RELMODELeps_hk)) * Nt * pow (here->BSIM4modPtr->BSIM4toxe * 1e9, 2) ;
}
here->relStruct->deltaVthMax = here->relStruct->deltaVth ;
} else {
// Without Temperature Dependency
// here->relStruct->deltaVth = here->relStruct->deltaVthMax * log (1 + (1.718 / (1 + pow ((i / relmodel->RELMODELtau_e), relmodel->RELMODELbeta1)))) ;
/* Insert 'here->relStruct->deltaVth' into the list for the later fitting */
listInsert (&(here->relStruct->deltaVthList), here->relStruct->offsetTime + i, here->relStruct->deltaVth) ;
// With Temperature Dependency
// b = 5.621 * 1.2e6 ;
b = 0.706 ;
qFI = 1.03 ;
R = b * pow (ckt->CKTtemp, 2) * exp (-qFI / (relmodel->RELMODELk_b * ckt->CKTtemp)) ; // R = b * pow (T, 2) * exp (-qFI/kT) ;
here->relStruct->deltaVth = (1 - R) * here->relStruct->deltaVthMax * (1 - log (1 + (1.718 / (1 + pow ((i / relmodel->RELMODELtau_e), relmodel->RELMODELbeta1))))) ;
}
// Insert 'here->relStruct->deltaVth' into the list for the later fitting
listInsert (&(here->relStruct->deltaVthList), here->relStruct->offsetTime + i, here->relStruct->deltaVth) ;
}
here->relStruct->offsetTime += i ;
}
here->relStruct->offsetTime += i ;
}
if (!stress_or_recovery)
{
here->relStruct->t_star = pow ((exp (sqrt (here->relStruct->deltaVth / (Nt * A))) - 1), (1 / relmodel->RELMODELbeta)) * relmodel->RELMODELtau_0 ;
if (!stress_or_recovery)
{
here->relStruct->t_star = pow ((exp (sqrt (here->relStruct->deltaVth / (Nt * A))) - 1), (1 / relmodel->RELMODELbeta)) * relmodel->RELMODELtau_0 ;
}
} else if (relmodel->RELMODELtype == 2) {
// Model taken from the following article for 65nm devices with 1.4nm plasma-nitrided oxide
// A compact model for NBTI degradation and recovery under use-profile variations and its application to aging analysis of digital integrated circuits
BSIM4vgsList *current ;
double A, delta_Vth_fast, delta_Vth_slow, i, vgs_average ;
// V = 2 ;
if (stress_or_recovery) {
// Calculate the Average Vgs
current = here->vgsList ;
vgs_average = 0 ;
i = 0 ;
while (current != NULL)
{
vgs_average += fabs (current->vgs) ;
i++ ;
current = current->next ;
}
here->relStruct->Vstress = vgs_average / i ;
// printf ("Device Type: %s\t\t", here->BSIM4modPtr->BSIM4modName) ;
// printf ("V: %-.9g\t\t", V) ;
// printf ("Vgs: %-.9g\t\t", ckt->CKTstate0 [here->BSIM4vgs]) ;
// printf ("Vges: %-.9g\t\t", ckt->CKTstate0 [here->BSIM4vges]) ;
// printf ("Vds: %-.9g\n\n", ckt->CKTstate0 [here->BSIM4vds]) ;
}
if (t_step == 0)
{
// Extrapolation for 10 years when there is only stress
A = relmodel->RELMODELk_new * exp (-relmodel->RELMODELe0_new / (relmodel->RELMODELkb_new * ckt->CKTtemp)) * exp (relmodel->RELMODELb_new * here->relStruct->Vstress / (here->BSIM4modPtr->BSIM4toxe * 1e9 * relmodel->RELMODELkb_new * ckt->CKTtemp)) ;
delta_Vth_fast = A * log (1 + ((t_aging / relmodel->RELMODELtau_c_fast_new))) ;
delta_Vth_slow = A * log (1 + ((t_aging / relmodel->RELMODELtau_c_slow_new))) ;
here->relStruct->deltaVth = relmodel->RELMODELalpha_new * delta_Vth_fast + (1 - relmodel->RELMODELalpha_new) * delta_Vth_slow ;
// Saturation at 10% of the Average Vgs - This is not in the original aging model
if (here->relStruct->deltaVth > here->relStruct->Vstress * 0.5)
{
here->relStruct->deltaVth = here->relStruct->Vstress * 0.5 ;
}
} else {
for (i = 0 ; i < t_aging ; i += t_step)
{
if (stress_or_recovery)
{
relmodel->RELMODELt_s_new += i ;
} else {
relmodel->RELMODELt_r_new += i ;
}
A = relmodel->RELMODELk_new * exp (-relmodel->RELMODELe0_new / (relmodel->RELMODELkb_new * ckt->CKTtemp)) * exp (relmodel->RELMODELb_new * here->relStruct->Vstress / (here->BSIM4modPtr->BSIM4toxe * 1e9 * relmodel->RELMODELkb_new * ckt->CKTtemp)) ;
delta_Vth_fast = A * log (1 + ((relmodel->RELMODELt_s_new / relmodel->RELMODELtau_c_fast_new) / (1 + pow (relmodel->RELMODELt_r_new / relmodel->RELMODELtau_e_fast_new, relmodel->RELMODELbeta_new)))) ;
delta_Vth_slow = A * log (1 + ((relmodel->RELMODELt_s_new / relmodel->RELMODELtau_c_slow_new) / (1 + pow (relmodel->RELMODELt_r_new / relmodel->RELMODELtau_e_slow_new, relmodel->RELMODELbeta_new)))) ;
here->relStruct->deltaVth = relmodel->RELMODELalpha_new * delta_Vth_fast + (1 - relmodel->RELMODELalpha_new) * delta_Vth_slow ;
// Insert 'here->relStruct->deltaVth' into the list for the later fitting
listInsert (&(here->relStruct->deltaVthList), here->relStruct->offsetTime + i, here->relStruct->deltaVth) ;
}
here->relStruct->offsetTime += i ;
}
}
return 0 ;

View File

@ -26,6 +26,7 @@ typedef struct sRELMODELrelStruct {
int IsON ;
RELMODELrelList *deltaVthList ;
unsigned int semiPeriods ;
double Vstress ;
} RELMODELrelStruct ;
typedef struct sRELMODELmodel
@ -47,6 +48,21 @@ typedef struct sRELMODELmodel
double RELMODELbeta1 ;
int RELMODELrelmodel ;
int RELMODELtype ;
double RELMODELalpha_new ;
double RELMODELb_new ;
double RELMODELbeta_new ;
double RELMODELe0_new ;
double RELMODELk_new ;
double RELMODELkb_new ;
double RELMODELtau_c_fast_new ;
double RELMODELtau_c_slow_new ;
double RELMODELtau_e_fast_new ;
double RELMODELtau_e_slow_new ;
double RELMODELt_r_new ;
double RELMODELt_s_new ;
unsigned RELMODELk_bGiven : 1 ;
unsigned RELMODELh_cutGiven : 1 ;
unsigned RELMODELntsGiven : 1 ;
@ -59,6 +75,21 @@ typedef struct sRELMODELmodel
unsigned RELMODELtau_eGiven : 1 ;
unsigned RELMODELbeta1Given : 1 ;
unsigned RELMODELrelmodelGiven : 1 ;
unsigned RELMODELtypeGiven : 1 ;
unsigned RELMODELalpha_newGiven : 1 ;
unsigned RELMODELb_newGiven : 1 ;
unsigned RELMODELbeta_newGiven : 1 ;
unsigned RELMODELe0_newGiven : 1 ;
unsigned RELMODELk_newGiven : 1 ;
unsigned RELMODELkb_newGiven : 1 ;
unsigned RELMODELtau_c_fast_newGiven : 1 ;
unsigned RELMODELtau_c_slow_newGiven : 1 ;
unsigned RELMODELtau_e_fast_newGiven : 1 ;
unsigned RELMODELtau_e_slow_newGiven : 1 ;
unsigned RELMODELt_r_newGiven : 1 ;
unsigned RELMODELt_s_newGiven : 1 ;
} RELMODELmodel ;
@ -76,6 +107,21 @@ typedef struct sRELMODELmodel
#define RELMODEL_MOD_BETA1 11
#define RELMODEL_MOD_RELMODEL 12
#define RELMODEL_MOD_TYPE 13
#define RELMODEL_MOD_ALPHA_NEW 14
#define RELMODEL_MOD_B_NEW 15
#define RELMODEL_MOD_BETA_NEW 16
#define RELMODEL_MOD_E0_NEW 17
#define RELMODEL_MOD_K_NEW 18
#define RELMODEL_MOD_KB_NEW 19
#define RELMODEL_MOD_TAU_C_FAST_NEW 20
#define RELMODEL_MOD_TAU_C_SLOW_NEW 21
#define RELMODEL_MOD_TAU_E_FAST_NEW 22
#define RELMODEL_MOD_TAU_E_SLOW_NEW 23
#define RELMODEL_MOD_T_R_NEW 24
#define RELMODEL_MOD_T_S_NEW 25
#include "relmodelext.h"
#endif /* RELMODEL */

View File

@ -74,6 +74,75 @@ RELMODELsetup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *state
{
model->RELMODELbeta1 = 0.112 ;
}
/////
if (!model->RELMODELtypeGiven)
{
model->RELMODELtype = 2 ;
}
if (!model->RELMODELalpha_newGiven)
{
model->RELMODELalpha_new = 0.3 ;
}
if (!model->RELMODELb_newGiven)
{
model->RELMODELb_new = 0.075 ;
}
if (!model->RELMODELbeta_newGiven)
{
model->RELMODELbeta_new = 0.5 ;
}
if (!model->RELMODELe0_newGiven)
{
model->RELMODELe0_new = 0.1897 ;
}
if (!model->RELMODELk_newGiven)
{
model->RELMODELk_new = 420 ;
}
if (!model->RELMODELkb_newGiven)
{
model->RELMODELkb_new = 8.6e-5 ;
}
if (!model->RELMODELtau_c_fast_newGiven)
{
model->RELMODELtau_c_fast_new = 1e-3 ;
}
if (!model->RELMODELtau_c_slow_newGiven)
{
model->RELMODELtau_c_slow_new = 1e3 ;
}
if (!model->RELMODELtau_e_fast_newGiven)
{
model->RELMODELtau_e_fast_new = 20e-6 ;
}
if (!model->RELMODELtau_e_slow_newGiven)
{
model->RELMODELtau_e_slow_new = 1e6 ;
}
if (!model->RELMODELt_r_newGiven)
{
model->RELMODELt_r_new = 0.0 ;
}
if (!model->RELMODELt_s_newGiven)
{
model->RELMODELt_s_new = 0.0 ;
}
}
return (OK) ;