/*************************************************************************** JSPICE3 adaptation of Spice3f2 - Copyright (c) Stephen R. Whiteley 1992 Copyright 1990 Regents of the University of California. All rights reserved. Authors: UCB CAD Group 1993 Stephen R. Whiteley ****************************************************************************/ #include "spice.h" #include #include "cktdefs.h" #include "sensdefs.h" #include "jobdefs.h" #include "iferrmsg.h" /* ARGSUSED */ int SENSsetParm(cktp,anal,which,value) GENERIC *cktp; GENERIC *anal; int which; IFvalue *value; { SENSAN *job = (SENSAN *) anal; switch (which) { case SENS_DEFTOL: job->SENSdefTol = value->rValue; break; case SENS_DEFPERTURB: job->SENSdefPert = value->rValue; break; case SENS_POS: job->SENSoutPos = (CKTnode *) value->nValue; break; case SENS_NEG: job->SENSoutNeg = (CKTnode *) value->nValue; break; case SENS_SRC: job->SENSoutSrc = value->uValue; break; case SENS_NAME: job->SENSoutName = value->sValue; break; default: if (ACsetp(&job->AC,which,value) == OK) return (OK); if (DCTsetp(&job->DC,which,value) == OK) return (OK); return (E_BADPARM); } return (OK); } static IFparm SENSparms[] = { { "deftol", SENS_DEFTOL, IFP|IF_REAL, "default tolerance" }, { "defperturb",SENS_DEFPERTURB, IFP|IF_REAL, "default perterbation" }, { "outpos", SENS_POS, IFP|IF_NODE, "output positive node" }, { "outneg", SENS_NEG, IFP|IF_NODE, "output negative node" }, { "outsrc", SENS_SRC, IFP|IF_INSTANCE, "output current" }, { "outname", SENS_NAME, IFP|IF_STRING, "output variable name" }, { "start", AC_START, IFP|IF_REAL, "starting frequency" }, { "stop", AC_STOP, IFP|IF_REAL, "ending frequency" }, { "numsteps", AC_STEPS, IFP|IF_INTEGER, "number of frequencies"}, { "dec", AC_DEC, IFP|IF_FLAG, "step by decades" }, { "oct", AC_OCT, IFP|IF_FLAG, "step by octaves" }, { "lin", AC_LIN, IFP|IF_FLAG, "step linearly" }, { "name1", DC_NAME1, IFP|IF_INSTANCE, "name of source to step" }, { "start1", DC_START1, IFP|IF_REAL, "starting voltage/current"}, { "stop1", DC_STOP1, IFP|IF_REAL, "ending voltage/current" }, { "step1", DC_STEP1, IFP|IF_REAL, "voltage/current step" }, { "name2", DC_NAME2, IFP|IF_INSTANCE, "name of source to step" }, { "start2", DC_START2, IFP|IF_REAL, "starting voltage/current"}, { "stop2", DC_STOP2, IFP|IF_REAL, "ending voltage/current" }, { "step2", DC_STEP2, IFP|IF_REAL, "voltage/current step" } #ifdef notdef /* Future coding */ /* perturbation limits */ /* defaults for the analysis */ { "type", SENS_TYPE, IF_SET|IF_INTEGER, "describe device, model or element parameters" }, { "device", SENS_DEVICE, IF_STRING, "type of model or device" }, { "devdeftol", SENS_DEVDEFTOL, IF_SET|IF_REAL, "default tolerance (device type)" }, { "devdefperturb",SENS_DEVDEFPERT, IF_SET|IF_REAL, "default perturbation (device type)" }, { "moddeftol", SENS_DEVDEFTOL, IF_SET|IF_REAL, "default tolerance (model)" }, { "moddefperturb",SENS_DEVDEFPERT, IF_SET|IF_REAL, "default perturbation (model)" }, /*{ "name", SENS_NAME, IF_SET|IF_STRING, "name of model or element" }, */ { "param", SENS_PARAM,IF_SET|IF_STRING, "name of parameter" }, { "tol", SENS_TOL, IF_SET|IF_REAL, "tolerance" }, { "perturb", SENS_PERT, IF_SET|IF_REAL, "perturbation" } #endif }; SPICEanalysis SENSinfo = { { "SENS", "Sensitivity analysis", sizeof(SENSparms)/sizeof(IFparm), SENSparms }, sizeof(SENSAN), FREQUENCYDOMAIN, SENSparse, SENSsetParm, SENSaskQuest, SENSan };