white spaces

This commit is contained in:
rlar
2018-02-17 18:15:40 +01:00
parent 51781b6703
commit a4fa4b872c
2 changed files with 185 additions and 186 deletions
+166 -167
View File
@@ -30,10 +30,10 @@ extern int fixme_inoise_type;
int int
NOISEan (CKTcircuit *ckt, int restart) NOISEan (CKTcircuit *ckt, int restart)
{ {
static Ndata *data; /* va, must be static, for continuation of static Ndata *data; /* va, must be static, for continuation of
* interrupted(Ctrl-C), longer lasting noise * interrupted(Ctrl-C), longer lasting noise
* analysis * analysis
*/ */
double realVal; double realVal;
double imagVal; double imagVal;
int error; int error;
@@ -83,77 +83,76 @@ NOISEan (CKTcircuit *ckt, int restart)
} }
if ( (job->NsavFstp == 0.0) || restart) { /* va, NsavFstp is double */ if ( (job->NsavFstp == 0.0) || restart) { /* va, NsavFstp is double */
switch (job->NstpType) { switch (job->NstpType) {
case DECADE:
job->NfreqDelta = exp(log(10.0)/
job->NnumSteps);
break;
case DECADE: case OCTAVE:
job->NfreqDelta = exp(log(10.0)/ job->NfreqDelta = exp(log(2.0)/
job->NnumSteps); job->NnumSteps);
break; break;
case OCTAVE: case LINEAR:
job->NfreqDelta = exp(log(2.0)/ job->NfreqDelta = (job->NstopFreq -
job->NnumSteps); job->NstartFreq)/
break; (job->NnumSteps - 1);
break;
case LINEAR: default:
job->NfreqDelta = (job->NstopFreq - return(E_BADPARM);
job->NstartFreq)/
(job->NnumSteps - 1);
break;
default:
return(E_BADPARM);
} }
/* error = DCop(ckt); */ /* error = DCop(ckt); */
error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT, error = CKTop(ckt, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITJCT,
(ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT, (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITFLOAT,
ckt->CKTdcMaxIter); ckt->CKTdcMaxIter);
if (error) return(error); if (error) return(error);
/* Patch to noisean.c by Richard D. McRoberts. */ /* Patch to noisean.c by Richard D. McRoberts. */
ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEDCOP | MODEINITSMSIG;
error = CKTload(ckt); error = CKTload(ckt);
if(error) return(error); if(error) return(error);
data = TMALLOC(Ndata, 1);
step = 0;
data->freq = job->NstartFreq;
data->outNoiz = 0.0;
data->inNoise = 0.0;
data->squared = cp_getvar("sqrnoise", CP_BOOL, NULL) ? 1 : 0;
/* the current front-end needs the namelist to be fully data = TMALLOC(Ndata, 1);
declared before an OUTpBeginplot */ step = 0;
data->freq = job->NstartFreq;
data->outNoiz = 0.0;
data->inNoise = 0.0;
data->squared = cp_getvar("sqrnoise", CP_BOOL, NULL) ? 1 : 0;
SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL); /* the current front-end needs the namelist to be fully
declared before an OUTpBeginplot */
data->numPlots = 0; /* we don't have any plots yet */ SPfrontEnd->IFnewUid (ckt, &freqUid, NULL, "frequency", UID_OTHER, NULL);
data->numPlots = 0; /* we don't have any plots yet */
error = CKTnoise(ckt,N_DENS,N_OPEN,data); error = CKTnoise(ckt,N_DENS,N_OPEN,data);
if (error) return(error); if (error) return(error);
/* /*
* all names in the namelist have been declared. now start the * all names in the namelist have been declared. now start the
* plot * plot
*/ */
if (src_type == SV_VOLTAGE) if (src_type == SV_VOLTAGE)
fixme_inoise_type = fixme_inoise_type =
data->squared ? SV_SQR_VOLTAGE_DENSITY : SV_VOLTAGE_DENSITY;
else
fixme_inoise_type =
data->squared ? SV_SQR_CURRENT_DENSITY : SV_CURRENT_DENSITY;
fixme_onoise_type =
data->squared ? SV_SQR_VOLTAGE_DENSITY : SV_VOLTAGE_DENSITY; data->squared ? SV_SQR_VOLTAGE_DENSITY : SV_VOLTAGE_DENSITY;
else
fixme_inoise_type =
data->squared ? SV_SQR_CURRENT_DENSITY : SV_CURRENT_DENSITY;
fixme_onoise_type = if (!data->squared)
data->squared ? SV_SQR_VOLTAGE_DENSITY : SV_VOLTAGE_DENSITY; for (i = 0; i < data->numPlots; i++)
data->squared_value[i] =
if (!data->squared) ciprefix("inoise", data->namelist[i]) ||
for (i = 0; i < data->numPlots; i++) ciprefix("onoise", data->namelist[i]);
data->squared_value[i] =
ciprefix("inoise", data->namelist[i]) ||
ciprefix("onoise", data->namelist[i]);
error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, error = SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob,
data->squared data->squared
@@ -163,53 +162,53 @@ NOISEan (CKTcircuit *ckt, int restart)
freqUid, IF_REAL, freqUid, IF_REAL,
data->numPlots, data->namelist, IF_REAL, data->numPlots, data->namelist, IF_REAL,
&(data->NplotPtr)); &(data->NplotPtr));
if (error) return(error); if (error) return(error);
if (job->NstpType != LINEAR) { if (job->NstpType != LINEAR) {
SPfrontEnd->OUTattributes (data->NplotPtr, NULL, OUT_SCALE_LOG, NULL); SPfrontEnd->OUTattributes (data->NplotPtr, NULL, OUT_SCALE_LOG, NULL);
} }
} else { /* we must have paused before. pick up where we left off */ } else { /* we must have paused before. pick up where we left off */
step = (int)(job->NsavFstp); step = (int)(job->NsavFstp);
switch (job->NstpType) { switch (job->NstpType) {
case DECADE: case DECADE:
case OCTAVE: case OCTAVE:
data->freq = job->NstartFreq * exp (step * data->freq = job->NstartFreq * exp (step *
log (job->NfreqDelta)); log (job->NfreqDelta));
break; break;
case LINEAR:
data->freq = job->NstartFreq + step *
job->NfreqDelta;
break;
default: case LINEAR:
return(E_BADPARM); data->freq = job->NstartFreq + step *
job->NfreqDelta;
break;
default:
return(E_BADPARM);
} }
job->NsavFstp = 0; job->NsavFstp = 0;
data->outNoiz = job->NsavOnoise; data->outNoiz = job->NsavOnoise;
data->inNoise = job->NsavInoise; data->inNoise = job->NsavInoise;
/* saj resume rawfile fix*/ /* saj resume rawfile fix*/
error = SPfrontEnd->OUTpBeginPlot (NULL, NULL, error = SPfrontEnd->OUTpBeginPlot (NULL, NULL,
NULL, NULL,
NULL, 0, NULL, 0,
666, NULL, 666, 666, NULL, 666,
&(data->NplotPtr)); &(data->NplotPtr));
/*saj*/ /*saj*/
} }
switch (job->NstpType) { switch (job->NstpType) {
case DECADE: case DECADE:
case OCTAVE: case OCTAVE:
freqTol = job->NfreqDelta * job->NstopFreq * ckt->CKTreltol; freqTol = job->NfreqDelta * job->NstopFreq * ckt->CKTreltol;
break; break;
case LINEAR: case LINEAR:
freqTol = job->NfreqDelta * ckt->CKTreltol; freqTol = job->NfreqDelta * ckt->CKTreltol;
break; break;
default: default:
return(E_BADPARM); return(E_BADPARM);
} }
data->lstFreq = data->freq; data->lstFreq = data->freq;
@@ -218,108 +217,108 @@ NOISEan (CKTcircuit *ckt, int restart)
while (data->freq <= job->NstopFreq + freqTol) { while (data->freq <= job->NstopFreq + freqTol) {
if(SPfrontEnd->IFpauseTest()) { if(SPfrontEnd->IFpauseTest()) {
job->NsavFstp = step; /* save our results */ job->NsavFstp = step; /* save our results */
job->NsavOnoise = data->outNoiz; /* up until now */ job->NsavOnoise = data->outNoiz; /* up until now */
job->NsavInoise = data->inNoise; job->NsavInoise = data->inNoise;
return (E_PAUSE); return (E_PAUSE);
} }
ckt->CKTomega = 2.0 * M_PI * data->freq; ckt->CKTomega = 2.0 * M_PI * data->freq;
ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEAC | MODEACNOISE; ckt->CKTmode = (ckt->CKTmode & MODEUIC) | MODEAC | MODEACNOISE;
ckt->noise_input = inst; ckt->noise_input = inst;
/* /*
* solve the original AC system to get the transfer * solve the original AC system to get the transfer
* function between the input and output * function between the input and output
*/ */
NIacIter(ckt); NIacIter(ckt);
realVal = ckt->CKTrhsOld [posOutNode] realVal = ckt->CKTrhsOld [posOutNode]
- ckt->CKTrhsOld [negOutNode]; - ckt->CKTrhsOld [negOutNode];
imagVal = ckt->CKTirhsOld [posOutNode] imagVal = ckt->CKTirhsOld [posOutNode]
- ckt->CKTirhsOld [negOutNode]; - ckt->CKTirhsOld [negOutNode];
data->GainSqInv = 1.0 / MAX(((realVal*realVal) data->GainSqInv = 1.0 / MAX(((realVal*realVal)
+ (imagVal*imagVal)),N_MINGAIN); + (imagVal*imagVal)),N_MINGAIN);
data->lnGainInv = log(data->GainSqInv); data->lnGainInv = log(data->GainSqInv);
/* set up a block of "common" data so we don't have to /* set up a block of "common" data so we don't have to
* recalculate it for every device * recalculate it for every device
*/ */
data->delFreq = data->freq - data->lstFreq; data->delFreq = data->freq - data->lstFreq;
data->lnFreq = log(MAX(data->freq,N_MINLOG)); data->lnFreq = log(MAX(data->freq,N_MINLOG));
data->lnLastFreq = log(MAX(data->lstFreq,N_MINLOG)); data->lnLastFreq = log(MAX(data->lstFreq,N_MINLOG));
data->delLnFreq = data->lnFreq - data->lnLastFreq; data->delLnFreq = data->lnFreq - data->lnLastFreq;
if ((job->NStpsSm != 0) && ((step % (job->NStpsSm)) == 0)) { if ((job->NStpsSm != 0) && ((step % (job->NStpsSm)) == 0)) {
data->prtSummary = TRUE; data->prtSummary = TRUE;
} else { } else {
data->prtSummary = FALSE; data->prtSummary = FALSE;
} }
/* /*
data->outNumber = 1; data->outNumber = 1;
*/ */
data->outNumber = 0; data->outNumber = 0;
/* the frequency will NOT be stored in array[0] as before; instead, /* the frequency will NOT be stored in array[0] as before; instead,
* it will be given in refVal.rValue (see later) * it will be given in refVal.rValue (see later)
*/ */
NInzIter(ckt,posOutNode,negOutNode); /* solve the adjoint system */ NInzIter(ckt,posOutNode,negOutNode); /* solve the adjoint system */
/* now we use the adjoint system to calculate the noise /* now we use the adjoint system to calculate the noise
* contributions of each generator in the circuit * contributions of each generator in the circuit
*/ */
error = CKTnoise(ckt,N_DENS,N_CALC,data); error = CKTnoise(ckt,N_DENS,N_CALC,data);
if (error) return(error); if (error) return(error);
data->lstFreq = data->freq; data->lstFreq = data->freq;
/* update the frequency */ /* update the frequency */
switch (job->NstpType) { switch (job->NstpType) {
case DECADE: case DECADE:
case OCTAVE: case OCTAVE:
data->freq *= job->NfreqDelta; data->freq *= job->NfreqDelta;
break; break;
case LINEAR: case LINEAR:
data->freq += job->NfreqDelta; data->freq += job->NfreqDelta;
break; break;
default: default:
return(E_INTERN); return(E_INTERN);
} }
step++; step++;
} }
error = CKTnoise(ckt,N_DENS,N_CLOSE,data); error = CKTnoise(ckt,N_DENS,N_CLOSE,data);
if (error) return(error); if (error) return(error);
data->numPlots = 0; data->numPlots = 0;
data->outNumber = 0; data->outNumber = 0;
if (job->NstartFreq != job->NstopFreq) { if (job->NstartFreq != job->NstopFreq) {
error = CKTnoise(ckt,INT_NOIZ,N_OPEN,data); error = CKTnoise(ckt,INT_NOIZ,N_OPEN,data);
if (error) return(error); if (error) return(error);
if (src_type == SV_VOLTAGE) if (src_type == SV_VOLTAGE)
fixme_inoise_type = fixme_inoise_type =
data->squared ? SV_SQR_VOLTAGE : SV_VOLTAGE; data->squared ? SV_SQR_VOLTAGE : SV_VOLTAGE;
else else
fixme_inoise_type = fixme_inoise_type =
data->squared ? SV_SQR_CURRENT : SV_CURRENT; data->squared ? SV_SQR_CURRENT : SV_CURRENT;
fixme_onoise_type = fixme_onoise_type =
data->squared ? SV_SQR_VOLTAGE : SV_VOLTAGE; data->squared ? SV_SQR_VOLTAGE : SV_VOLTAGE;
if (!data->squared) if (!data->squared)
for (i = 0; i < data->numPlots; i++) for (i = 0; i < data->numPlots; i++)
data->squared_value[i] = data->squared_value[i] =
ciprefix("inoise", data->namelist[i]) || ciprefix("inoise", data->namelist[i]) ||
ciprefix("onoise", data->namelist[i]); ciprefix("onoise", data->namelist[i]);
SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob, SPfrontEnd->OUTpBeginPlot (ckt, ckt->CKTcurJob,
data->squared data->squared
@@ -329,11 +328,11 @@ NOISEan (CKTcircuit *ckt, int restart)
data->numPlots, data->namelist, IF_REAL, data->numPlots, data->namelist, IF_REAL,
&(data->NplotPtr)); &(data->NplotPtr));
error = CKTnoise(ckt,INT_NOIZ,N_CALC,data); error = CKTnoise(ckt,INT_NOIZ,N_CALC,data);
if (error) return(error); if (error) return(error);
error = CKTnoise(ckt,INT_NOIZ,N_CLOSE,data); error = CKTnoise(ckt,INT_NOIZ,N_CLOSE,data);
if (error) return(error); if (error) return(error);
} }
FREE(data); FREE(data);
+19 -19
View File
@@ -11,7 +11,7 @@ Author: 1987 Gary W. Ng
#include "analysis.h" #include "analysis.h"
int int
NsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value) NsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
{ {
NOISEAN *job = (NOISEAN *) anal; NOISEAN *job = (NOISEAN *) anal;
@@ -21,16 +21,16 @@ NsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
switch(which) { switch(which) {
case N_OUTPUT: case N_OUTPUT:
job->output = value->nValue; job->output = value->nValue;
break; break;
case N_OUTREF: case N_OUTREF:
job->outputRef = value->nValue; job->outputRef = value->nValue;
break; break;
case N_INPUT: case N_INPUT:
job->input = value->uValue; job->input = value->uValue;
break; break;
case N_DEC: case N_DEC:
job->NstpType = DECADE; job->NstpType = DECADE;
@@ -49,21 +49,21 @@ NsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
break; break;
case N_START: case N_START:
if (value->rValue <= 0.0) { if (value->rValue <= 0.0) {
errMsg = copy("Frequency of 0 is invalid"); errMsg = copy("Frequency of 0 is invalid");
job->NstartFreq = 1.0; job->NstartFreq = 1.0;
return(E_PARMVAL); return(E_PARMVAL);
} }
job->NstartFreq = value->rValue; job->NstartFreq = value->rValue;
break; break;
case N_STOP: case N_STOP:
if (value->rValue <= 0.0) { if (value->rValue <= 0.0) {
errMsg = copy("Frequency of 0 is invalid"); errMsg = copy("Frequency of 0 is invalid");
job->NstartFreq = 1.0; job->NstartFreq = 1.0;
return(E_PARMVAL); return(E_PARMVAL);
} }
job->NstopFreq = value->rValue; job->NstopFreq = value->rValue;
break; break;
@@ -81,7 +81,7 @@ NsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
static IFparm Nparms[] = { static IFparm Nparms[] = {
{ "output", N_OUTPUT, IF_SET|IF_STRING, "output noise summation node" }, { "output", N_OUTPUT, IF_SET|IF_STRING, "output noise summation node" },
{ "outputref", N_OUTREF, IF_SET|IF_STRING, "output noise reference node" }, { "outputref", N_OUTREF, IF_SET|IF_STRING, "output noise reference node" },
{ "input", N_INPUT, IF_SET|IF_STRING, "input noise source" }, { "input", N_INPUT, IF_SET|IF_STRING, "input noise source" },
{ "dec", N_DEC, IF_SET|IF_FLAG, "step by decades" }, { "dec", N_DEC, IF_SET|IF_FLAG, "step by decades" },
{ "oct", N_OCT, IF_SET|IF_FLAG, "step by octaves" }, { "oct", N_OCT, IF_SET|IF_FLAG, "step by octaves" },
@@ -93,7 +93,7 @@ static IFparm Nparms[] = {
}; };
SPICEanalysis NOISEinfo = { SPICEanalysis NOISEinfo = {
{ {
"NOISE", "NOISE",
"Noise analysis", "Noise analysis",