From 4b8f031971efc0a6e381e022bc2b66fa7540872e Mon Sep 17 00:00:00 2001 From: h_vogt Date: Tue, 7 May 2013 23:09:57 +0200 Subject: [PATCH] resload.c, restemp.c: tc1, tc2 instance parameters override model parameters --- src/spicelib/devices/res/resload.c | 21 ++------------------- src/spicelib/devices/res/restemp.c | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/src/spicelib/devices/res/resload.c b/src/spicelib/devices/res/resload.c index f9ee09a31..87e4efd94 100644 --- a/src/spicelib/devices/res/resload.c +++ b/src/spicelib/devices/res/resload.c @@ -17,9 +17,6 @@ RESload(GENmodel *inModel, CKTcircuit *ckt) { RESmodel *model = (RESmodel *)inModel; double m; - double difference; - double factor; - /* loop through all the resistor models */ for( ; model != NULL; model = model->RESnextModel ) { @@ -29,18 +26,12 @@ RESload(GENmodel *inModel, CKTcircuit *ckt) for (here = model->RESinstances; here != NULL ; here = here->RESnextInstance) { - if(!here->REStc1Given) here->REStc1 = 0.0; - if(!here->REStc2Given) here->REStc2 = 0.0; if(!here->RESmGiven) here->RESm = 1.0; here->REScurrent = (*(ckt->CKTrhsOld+here->RESposNode) - *(ckt->CKTrhsOld+here->RESnegNode)) * here->RESconduct; - - difference = (here->REStemp + here->RESdtemp) - 300.15; - factor = 1.0 + (here->REStc1)*difference + - (here->REStc2)*difference*difference; - m = (here->RESm)/factor; + m = (here->RESm); *(here->RESposPosptr) += m * here->RESconduct; *(here->RESnegNegptr) += m * here->RESconduct; @@ -59,8 +50,6 @@ RESacload(GENmodel *inModel, CKTcircuit *ckt) { RESmodel *model = (RESmodel *)inModel; double m; - double difference; - double factor; NG_IGNORE(ckt); @@ -72,15 +61,9 @@ RESacload(GENmodel *inModel, CKTcircuit *ckt) for (here = model->RESinstances; here != NULL ; here = here->RESnextInstance) { - if(!here->REStc1Given) here->REStc1 = 0.0; - if(!here->REStc2Given) here->REStc2 = 0.0; if(!here->RESmGiven) here->RESm = 1.0; - difference = (here->REStemp + here->RESdtemp) - 300.15; - factor = 1.0 + (here->REStc1)*difference + - (here->REStc2)*difference*difference; - - m = (here->RESm)/factor; + m = (here->RESm); if(here->RESacresGiven) { *(here->RESposPosptr) += m * here->RESacConduct; diff --git a/src/spicelib/devices/res/restemp.c b/src/spicelib/devices/res/restemp.c index a72ba9cf3..08ddf14cb 100644 --- a/src/spicelib/devices/res/restemp.c +++ b/src/spicelib/devices/res/restemp.c @@ -23,6 +23,7 @@ REStemp(GENmodel *inModel, CKTcircuit *ckt) RESinstance *here; double factor; double difference; + double tc1, tc2; /* loop through all the resistor models */ @@ -74,8 +75,20 @@ REStemp(GENmodel *inModel, CKTcircuit *ckt) difference = (here->REStemp + here->RESdtemp) - model->REStnom; - factor = 1.0 + (model->REStempCoeff1)*difference + - (model->REStempCoeff2)*difference*difference; + /* instance parameters tc1 and tc2 will override + model parameters tc1 and tc2 */ + if (here->REStc1Given) + tc1 = here->REStc1; /* instance */ + else + tc1 = model->REStempCoeff1; /* model */ + + if (here->REStc2Given) + tc2 = here->REStc2; + else + tc2 = model->REStempCoeff2; + + factor = 1.0 + tc1*difference + + tc2*difference*difference; here -> RESconduct = (1.0/(here->RESresist * factor * here->RESscale));