Initial fix for Bug 710 -

"The log file appears blank when a VDMOS element is added".
The problen was caused by a crash during sensitivity analysis
caused by selecting parameters for wariation based on their
values.  That is not repeatable between passes.  The fix is to
remove that code, but it causes many more parameters to be used.
This commit is contained in:
Giles Atkinson 2024-10-25 18:25:47 +01:00 committed by Holger Vogt
parent 7d59ad2db7
commit c30bc423ba
6 changed files with 30 additions and 25 deletions

View File

@ -11,9 +11,7 @@ struct s_sgen {
int param, max_param;
int is_dc;
int is_instparam;
int is_q;
int is_principle;
int is_zerook;
};
extern sgen *sgen_init(CKTcircuit *ckt, int is_dc);

View File

@ -35,8 +35,6 @@ sgen_init(CKTcircuit *ckt, int is_dc)
sg->ptable = NULL;
sg->is_dc = is_dc;
sg->is_principle = 0;
sg->is_q = 0;
sg->is_zerook = 0;
sg->value = 0.0;
sgen_next(&sg); /* get the ball rolling XXX check return val? */
@ -212,23 +210,10 @@ int set_param(sgen *sg)
if (sg->is_dc &&
(sg->ptable[sg->param].dataType & (IF_AC | IF_AC_ONLY)))
return 0;
if ((sg->ptable[sg->param].dataType & IF_CHKQUERY) && !sg->is_q)
return 0;
if (sens_getp(sg, sg->ckt, &ifval))
return 0;
if (fabs(ifval.rValue) < 1e-30) {
if (sg->ptable[sg->param].dataType & IF_SETQUERY)
sg->is_q = 0;
if (!sg->is_zerook
&& !(sg->ptable[sg->param].dataType & IF_PRINCIPAL))
return 0;
} else if (sg->ptable[sg->param].dataType & (IF_SETQUERY|IF_ORQUERY))
sg->is_q = 1;
if (sg->ptable[sg->param].dataType & IF_PRINCIPAL)
sg->is_principle += 1;

View File

@ -26,8 +26,14 @@ ASRCtemp(GENmodel *inModel, CKTcircuit *ckt)
here->ASRCdtemp = 0.0;
} else {
here->ASRCdtemp = 0.0;
if (here->ASRCdtempGiven)
printf("%s: Instance temperature specified, dtemp ignored\n", here->ASRCname);
if (here->ASRCdtempGiven &&
ckt->CKTcurJob && ckt->CKTcurJob->JOBtype != 9) {
/* Keep quiet in sensistivity analysis. */
printf("%s: Instance temperature specified, "
"dtemp ignored\n",
here->ASRCname);
}
}
}

View File

@ -41,9 +41,14 @@ CAPtemp(GENmodel *inModel, CKTcircuit *ckt)
if(!here->CAPdtempGiven) here->CAPdtemp = 0.0;
} else { /* CAPtempGiven */
here->CAPdtemp = 0.0;
if (here->CAPdtempGiven)
printf("%s: Instance temperature specified, dtemp ignored\n",
if (here->CAPdtempGiven &&
ckt->CKTcurJob && ckt->CKTcurJob->JOBtype != 9) {
/* Keep quiet in sensistivity analysis. */
printf("%s: Instance temperature specified, "
"dtemp ignored\n",
here->CAPname);
}
}
if (!here->CAPwidthGiven) {

View File

@ -37,9 +37,14 @@ INDtemp(GENmodel *inModel, CKTcircuit *ckt)
if(!here->INDdtempGiven) here->INDdtemp = 0.0;
} else { /* INDtempGiven */
here->INDdtemp = 0.0;
if (here->INDdtempGiven)
printf("%s: Instance temperature specified, dtemp ignored\n",
if (here->INDdtempGiven &&
ckt->CKTcurJob && ckt->CKTcurJob->JOBtype != 9) {
/* Keep quiet in sensistivity analysis. */
printf("%s: Instance temperature specified, "
"dtemp ignored\n",
here->INDname);
}
}
if (!here->INDscaleGiven) here->INDscale = 1.0;

View File

@ -38,8 +38,14 @@ REStemp(GENmodel *inModel, CKTcircuit *ckt)
here->RESdtemp = 0.0;
} else {
here->RESdtemp = 0.0;
if (here->RESdtempGiven)
printf("%s: Instance temperature specified, dtemp ignored\n", here->RESname);
if (here->RESdtempGiven &&
ckt->CKTcurJob && ckt->CKTcurJob->JOBtype != 9) {
/* Keep quiet in sensistivity analysis. */
printf("%s: Instance temperature specified, "
"dtemp ignored\n",
here->RESname);
}
}
RESupdate_conduct(here, TRUE);