devices/*, USE_OMP, cleanup 'InstanceArray' usage

store 'InstanceArray' in the very first module only,
  NULL it in any other.

FREE() it in every module to treat them all the same in XXXdestroy()
This commit is contained in:
rlar 2018-01-14 11:08:32 +01:00
parent 93b62297d8
commit f53384da70
16 changed files with 79 additions and 64 deletions

View File

@ -18,11 +18,6 @@ BSIM3destroy(GENmodel **inModel)
{
BSIM3model *mod = *(BSIM3model**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->BSIM3InstanceArray);
#endif
while (mod) {
BSIM3model *next_mod = mod->BSIM3nextModel;
BSIM3instance *inst = mod->BSIM3instances;
@ -42,6 +37,10 @@ BSIM3destroy(GENmodel **inModel)
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->BSIM3InstanceArray);
#endif
/* mod->BSIM3modName to be freed in INPtabEnd() */
FREE(mod->BSIM3version);
FREE(mod);

View File

@ -1137,9 +1137,14 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
{
InstCount++;
}
model->BSIM3InstCount = 0;
model->BSIM3InstanceArray = NULL;
}
InstArray = TMALLOC(BSIM3instance*, InstCount);
model = (BSIM3model*)inModel;
/* store this in the first model only */
model->BSIM3InstCount = InstCount;
model->BSIM3InstanceArray = InstArray;
idx = 0;
for( ; model != NULL; model = model->BSIM3nextModel )
{
@ -1150,9 +1155,6 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->BSIM3InstCount = InstCount;
model->BSIM3InstanceArray = InstArray;
}
#endif

View File

@ -19,11 +19,6 @@ BSIM3v32destroy (GENmodel **inModel)
{
BSIM3v32model *mod = *(BSIM3v32model**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->BSIM3v32InstanceArray);
#endif
while (mod) {
BSIM3v32model *next_mod = mod->BSIM3v32nextModel;
BSIM3v32instance *inst = mod->BSIM3v32instances;
@ -40,6 +35,11 @@ BSIM3v32destroy (GENmodel **inModel)
FREE(inst);
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->BSIM3v32InstanceArray);
#endif
FREE(mod->BSIM3v32version);
FREE(mod);
mod = next_mod;

View File

@ -1149,9 +1149,14 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
{
InstCount++;
}
model->BSIM3v32InstCount = 0;
model->BSIM3v32InstanceArray = NULL;
}
InstArray = TMALLOC(BSIM3v32instance*, InstCount);
model = (BSIM3v32model*)inModel;
/* store this in the first model only */
model->BSIM3v32InstCount = InstCount;
model->BSIM3v32InstanceArray = InstArray;
idx = 0;
for (; model != NULL; model = model->BSIM3v32nextModel)
{
@ -1162,9 +1167,6 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->BSIM3v32InstCount = InstCount;
model->BSIM3v32InstanceArray = InstArray;
}
#endif

View File

@ -68,11 +68,6 @@ BSIM4destroy(GENmodel **inModel)
{
BSIM4model *mod = *(BSIM4model**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->BSIM4InstanceArray);
#endif
while (mod) {
BSIM4model *next_mod = mod->BSIM4nextModel;
BSIM4instance *inst = mod->BSIM4instances;
@ -89,6 +84,11 @@ BSIM4destroy(GENmodel **inModel)
FREE(inst);
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->BSIM4InstanceArray);
#endif
FREE(mod->BSIM4version);
FREE(mod);
mod = next_mod;

View File

@ -2728,9 +2728,14 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
{
InstCount++;
}
model->BSIM4InstCount = 0;
model->BSIM4InstanceArray = NULL;
}
InstArray = TMALLOC(BSIM4instance*, InstCount);
model = (BSIM4model*)inModel;
/* store this in the first model only */
model->BSIM4InstCount = InstCount;
model->BSIM4InstanceArray = InstArray;
idx = 0;
for( ; model != NULL; model = model->BSIM4nextModel )
{
@ -2741,9 +2746,6 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->BSIM4InstCount = InstCount;
model->BSIM4InstanceArray = InstArray;
}
#endif

View File

@ -18,11 +18,6 @@ BSIM4v5destroy(GENmodel **inModel)
{
BSIM4v5model *mod = *(BSIM4v5model**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->BSIM4v5InstanceArray);
#endif
while (mod) {
BSIM4v5model *next_mod = mod->BSIM4v5nextModel;
BSIM4v5instance *inst = mod->BSIM4v5instances;
@ -39,6 +34,11 @@ BSIM4v5destroy(GENmodel **inModel)
FREE(inst);
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->BSIM4v5InstanceArray);
#endif
FREE(mod->BSIM4v5version);
FREE(mod);
mod = next_mod;

View File

@ -2106,9 +2106,14 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
{
InstCount++;
}
model->BSIM4v5InstCount = 0;
model->BSIM4v5InstanceArray = NULL;
}
InstArray = TMALLOC(BSIM4v5instance*, InstCount);
model = (BSIM4v5model*)inModel;
/* store this in the first model only */
model->BSIM4v5InstCount = InstCount;
model->BSIM4v5InstanceArray = InstArray;
idx = 0;
for (; model != NULL; model = model->BSIM4v5nextModel)
{
@ -2119,9 +2124,6 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->BSIM4v5InstCount = InstCount;
model->BSIM4v5InstanceArray = InstArray;
}
#endif

View File

@ -20,11 +20,6 @@ BSIM4v6destroy(GENmodel **inModel)
{
BSIM4v6model *mod = *(BSIM4v6model**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->BSIM4v6InstanceArray);
#endif
while (mod) {
BSIM4v6model *next_mod = mod->BSIM4v6nextModel;
BSIM4v6instance *inst = mod->BSIM4v6instances;
@ -41,6 +36,11 @@ BSIM4v6destroy(GENmodel **inModel)
FREE(inst);
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->BSIM4v6InstanceArray);
#endif
FREE(mod->BSIM4v6version);
FREE(mod);
mod = next_mod;

View File

@ -2441,9 +2441,14 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
{
InstCount++;
}
model->BSIM4v6InstCount = 0;
model->BSIM4v6InstanceArray = NULL;
}
InstArray = TMALLOC(BSIM4v6instance*, InstCount);
model = (BSIM4v6model*)inModel;
/* store this in the first model only */
model->BSIM4v6InstCount = InstCount;
model->BSIM4v6InstanceArray = InstArray;
idx = 0;
for( ; model != NULL; model = model->BSIM4v6nextModel )
{
@ -2454,9 +2459,6 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->BSIM4v6InstCount = InstCount;
model->BSIM4v6InstanceArray = InstArray;
}
#endif

View File

@ -20,11 +20,6 @@ BSIM4v7destroy(GENmodel **inModel)
{
BSIM4v7model *mod = *(BSIM4v7model**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->BSIM4v7InstanceArray);
#endif
while (mod) {
BSIM4v7model *next_mod = mod->BSIM4v7nextModel;
BSIM4v7instance *inst = mod->BSIM4v7instances;
@ -41,6 +36,11 @@ BSIM4v7destroy(GENmodel **inModel)
FREE(inst);
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->BSIM4v7InstanceArray);
#endif
/* mod->BSIM4v7modName to be freed in INPtabEnd() */
FREE(mod->BSIM4v7version);
FREE(mod);

View File

@ -2596,9 +2596,14 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
{
InstCount++;
}
model->BSIM4v7InstCount = 0;
model->BSIM4v7InstanceArray = NULL;
}
InstArray = TMALLOC(BSIM4v7instance*, InstCount);
model = (BSIM4v7model*)inModel;
/* store this in the first model only */
model->BSIM4v7InstCount = InstCount;
model->BSIM4v7InstanceArray = InstArray;
idx = 0;
for( ; model != NULL; model = model->BSIM4v7nextModel )
{
@ -2609,9 +2614,6 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->BSIM4v7InstCount = InstCount;
model->BSIM4v7InstanceArray = InstArray;
}
#endif

View File

@ -24,11 +24,6 @@ B4SOIdestroy(GENmodel **inModel)
{
B4SOImodel *mod = *(B4SOImodel**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->B4SOIInstanceArray);
#endif
while (mod) {
B4SOImodel *next_mod = mod->B4SOInextModel;
B4SOIinstance *inst = mod->B4SOIinstances;
@ -37,6 +32,11 @@ B4SOIdestroy(GENmodel **inModel)
FREE(inst);
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->B4SOIInstanceArray);
#endif
FREE(mod);
mod = next_mod;
}

View File

@ -2733,9 +2733,14 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
{
InstCount++;
}
model->B4SOIInstCount = 0;
model->B4SOIInstanceArray = NULL;
}
InstArray = TMALLOC(B4SOIinstance*, InstCount);
model = (B4SOImodel*)inModel;
/* store this in the first model only */
model->B4SOIInstCount = InstCount;
model->B4SOIInstanceArray = InstArray;
idx = 0;
for( ; model != NULL; model = model->B4SOInextModel )
{
@ -2746,9 +2751,6 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->B4SOIInstCount = InstCount;
model->B4SOIInstanceArray = InstArray;
}
#endif

View File

@ -64,11 +64,6 @@ HSM2destroy(GENmodel **inModel)
{
HSM2model *mod = *(HSM2model**) inModel;
#ifdef USE_OMP
/* free just once for all models */
FREE(mod->HSM2InstanceArray);
#endif
while (mod) {
HSM2model *next_mod = mod->HSM2nextModel;
HSM2instance *inst = mod->HSM2instances;
@ -77,6 +72,11 @@ HSM2destroy(GENmodel **inModel)
FREE(inst);
inst = next_inst;
}
#ifdef USE_OMP
FREE(mod->HSM2InstanceArray);
#endif
FREE(mod);
mod = next_mod;
}

View File

@ -1275,9 +1275,14 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
{
InstCount++;
}
model->HSM2InstCount = 0;
model->HSM2InstanceArray = NULL;
}
InstArray = TMALLOC(HSM2instance*, InstCount);
model = (HSM2model*)inModel;
/* store this in the first model only */
model->HSM2InstCount = InstCount;
model->HSM2InstanceArray = InstArray;
idx = 0;
for ( ; model != NULL; model = model->HSM2nextModel )
{
@ -1288,9 +1293,6 @@ do { if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NUL
InstArray[idx] = here;
idx++;
}
/* set the array pointer and instance count into each model */
model->HSM2InstCount = InstCount;
model->HSM2InstanceArray = InstArray;
}
#endif