18 #define NEWN(TYPE,COUNT) ((TYPE *) MALLOC(sizeof(TYPE) * (COUNT))) 20 #define M_LOG2E 1.4426950408889634074 75 "Sensitivity analysis not possible with Josephson junctions",
89 "Sensitivity Analysis source %s not in circuit",
105 "DCtrCurv: source %s not in circuit",
131 st->dY =
spCreate(st->size, 1, &error);
136 st->dIr =
NEWN(
double, st->size + 1);
137 st->dIi =
NEWN(
double, st->size + 1);
138 st->dIdYr =
NEWN(
double, st->size + 1);
139 st->dIdYi =
NEWN(
double, st->size + 1);
148 outd.dataNames =
NEWN(
IFuid,outd.numNames);
150 if (!sg->is_instparam) {
151 sprintf(namebuf,
"%s:%s",
152 sg->instance->GENname,
153 sg->ptable[sg->param].keyword);
155 else if ((sg->ptable[sg->param].dataType
157 sprintf(namebuf,
"%s", sg->instance->GENname);
160 sprintf(namebuf,
"%s.%s",
161 sg->instance->GENname,
162 sg->ptable[sg->param].keyword);
166 outd.dataNames + i,
NULL,
183 outd.circuitPtr = (
GENERIC *)ckt;
195 FREE(outd.dataNames);
198 st->o_values =
NEWN(
double, outd.numNames);
199 st->o_cvalues =
NULL;
262 bypass = ckt->CKTbypass;
271 ckt->CKTrhs = st->dIr;
272 ckt->CKTmatrix = st->dY;
280 for (j = 0; j <= st->size; j++) {
290 if (sg->value != 0.0)
295 nvalue.rValue = sg->value + delta_var;
303 for (j = 0; j <= st->size; j++) {
304 st->dIr[j] = -st->dIr[j];
314 value.rValue = sg->value;
321 for (j = 0; j <= st->size; j++) {
322 st->dIr[j] -= st->dIdYr[j];
340 st->o_values[i] /= delta_var;
342 nvalue.v.vec.rVec = st->o_values;
353 ckt->CKTbypass = bypass;
377 bypass = ckt->CKTbypass;
385 ckt->CKTirhsOld = iE;
388 for (i = 0; i <= st->size; i++) {
417 ckt->CKTrhs = st->dIr;
418 ckt->CKTirhs = st->dIi;
419 ckt->CKTmatrix = st->dY;
427 for (j = 0; j <= st->size; j++) {
438 if (sg->value != 0.0)
443 nvalue.rValue = sg->value + delta_var;
451 for (j = 0; j <= st->size; j++) {
452 st->dIr[j] = -st->dIr[j];
453 st->dIi[j] = -st->dIi[j];
463 value.rValue = sg->value;
467 spMultiply(st->dY, st->dIdYr, E, st->dIdYi, iE);
470 for (j = 0; j <= st->size; j++) {
471 st->dIr[j] -= st->dIdYr[j];
472 st->dIi[j] -= st->dIdYi[j];
476 spSolve(
Y, st->dIr, st->dIr, st->dIi, st->dIi);
483 st->o_cvalues[i].real =
486 st->o_cvalues[i].imag =
491 st->o_cvalues[i].real =
494 st->o_cvalues[i].imag =
498 st->o_cvalues[i].real /= delta_var;
499 st->o_cvalues[i].imag /= delta_var;
501 nvalue.v.vec.cVec = st->o_cvalues;
503 value.rValue = ckt->CKTomega/(2*
M_PI);
510 ckt->CKTbypass = bypass;
528 if (sg->is_instparam) {
529 fn = DEVices[sg->dev]->
DEVask;
532 error = (*fn)(ckt, sg->instance, pid, val,
NULL);
540 error = (*fn)(ckt, sg->model, pid, val);
546 if (sg->is_instparam)
547 printf(
"GET ERROR: %s:%s:%s -> param %s (%d)\n",
549 sg->model->GENmodName,
550 sg->instance->GENname,
551 sg->ptable[sg->param].keyword, pid);
553 printf(
"GET ERROR: %s:%s:%s -> mparam %s (%d)\n",
555 sg->model->GENmodName,
556 sg->instance->GENname,
557 sg->ptable[sg->param].keyword, pid);
576 if (sg->is_instparam) {
580 error = (*fn)(ckt, pid, val, sg->instance,
NULL);
588 error = (*fn)(pid, val, sg->model);
594 if (sg->is_instparam)
595 printf(
"SET ERROR: %s:%s:%s -> param %s (%d)\n",
597 sg->model->GENmodName,
598 sg->instance->GENname,
599 sg->ptable[sg->param].keyword, pid);
601 printf(
"SET ERROR: %s:%s:%s -> mparam %s (%d)\n",
603 sg->model->GENmodName,
604 sg->instance->GENname,
605 sg->ptable[sg->param].keyword, pid);
635 (*fn)(sg->model, ckt);
642 fn = DEVices[sg->dev]->
DEVload;
645 error = (*fn)(sg->model, ckt);
int ACloop(int(*func)(), CKTcircuit *ckt, int restart, struct sACprms *ac, struct sOUTdata *outd)
int DCTloop(int(*func)(), CKTcircuit *ckt, int restart, struct sDCTprms *dc, struct sOUTdata *outd)
IFuid eltName[DCTNESTLEVEL]
static int sens_loadnew()
int sens_getp(sgen *sg, CKTcircuit *ckt, IFvalue *val)
static int sens_dcoperation()
static double Sens_Abs_Delta
double vsave[DCTNESTLEVEL]
static int sens_acoperation()
#define NEWN(TYPE, COUNT)
GENinstance * elt[DCTNESTLEVEL]
int SENSan(GENERIC *cktp, int restart)