Please find patch file attached. I'm trying to add vc1,2 to res model. Notation
R1 2 1 w=10u l=100u vc1=7e-5 vc2=1e-3

But
.model rmod (
+ VC1=7e-5
+ VC2=1e-3
+ )
R1 2 1 rmod w=10u l=100u vc1=7e-5 vc2=1e-3
Doesn't work. What I'm doing wrong?

Thanks,
Alex.

Common subdirectories: 
ngspice-original/ng-spice-rework/src/spicelib/devices/res/CVS and 
ngspice/ng-spice-rework/src/spicelib/devices/res/CVS
Only in ngspice/ng-spice-rework/src/spicelib/devices/res/: .deps
Only in ngspice/ng-spice-rework/src/spicelib/devices/res/: Makefile
Only in ngspice/ng-spice-rework/src/spicelib/devices/res/: Makefile.in
diff -u ngspice-original/ng-spice-rework/src/spicelib/devices/res/resask.c 
ngspice/ng-spice-rework/src/spicelib/devices/res/resask.c
--- ngspice-original/ng-spice-rework/src/spicelib/devices/res/resask.c  
2009-06-14 12:37:52.578562944 -0700
+++ ngspice/ng-spice-rework/src/spicelib/devices/res/resask.c   2009-06-14 
12:49:48.653551529 -0700
@@ -64,12 +64,18 @@
        case RES_M:
            value->rValue = fast->RESm;
            return(OK);
-       case RES_TC1:
-           value->rValue = fast->REStc1;
-           return(OK);
-       case RES_TC2:
-           value->rValue = fast->REStc2;
-           return(OK);
+       case RES_TC1:
+           value->rValue = fast->REStc1;
+           return(OK);
+       case RES_TC2:
+           value->rValue = fast->REStc2;
+           return(OK);
+       case RES_VC1:
+           value->rValue = fast->RESvc1;
+           return(OK);
+       case RES_VC2:
+           value->rValue = fast->RESvc2;
+           return(OK);
        case RES_NOISY:
            value->iValue = fast->RESnoisy;
            return(OK);    
diff -u ngspice-original/ng-spice-rework/src/spicelib/devices/res/res.c 
ngspice/ng-spice-rework/src/spicelib/devices/res/res.c
--- ngspice-original/ng-spice-rework/src/spicelib/devices/res/res.c     
2009-06-14 12:37:52.559563322 -0700
+++ ngspice/ng-spice-rework/src/spicelib/devices/res/res.c      2009-06-14 
14:54:01.025553126 -0700
@@ -22,6 +22,9 @@
  IOPU(  "tc",          RES_TC1,             IF_REAL,    "First order temp. 
coefficient"),
  IOPU(  "tc1",         RES_TC1,             IF_REAL,    "First order temp. 
coefficient"),
  IOPU(  "tc2",         RES_TC2,             IF_REAL,    "Second order temp. 
coefficient"),
+ IOPU(  "vc",          RES_VC1,             IF_REAL,    "First order volt. 
coefficient"),
+ IOPU(  "vc1",         RES_VC1,             IF_REAL,    "First order volt. 
coefficient"),
+ IOPU(  "vc2",         RES_VC2,             IF_REAL,    "Second order volt. 
coefficient"),
  IOPU(  "scale",       RES_SCALE,           IF_REAL,    "Scale factor"),
  IOP(   "noisy",        RES_NOISY,           IF_INTEGER, "Resistor generate 
noise"), 
  IP(    "sens_resist",  RES_RESIST_SENS,     IF_FLAG,   
@@ -46,6 +49,8 @@
  IOPR(  "dlr",    RES_MOD_SHORT,    IF_REAL,"Shortening of resistor"),
  IOPQ(  "tc1",    RES_MOD_TC1,      IF_REAL,"First order temp. coefficient"),
  IOPQO( "tc2",    RES_MOD_TC2,      IF_REAL,"Second order temp. coefficient"),
+ IOPQ(  "vc1",    RES_MOD_VC1,      IF_REAL,"First order volt. coefficient"),
+ IOPQO( "vc2",    RES_MOD_VC2,      IF_REAL,"Second order volt. coefficient"),
  IOPX(  "defw",   RES_MOD_DEFWIDTH, IF_REAL,"Default device width"),
  IOPR(  "w",      RES_MOD_DEFWIDTH, IF_REAL,"Default device width"),
  IOPQ(  "kf",     RES_MOD_KF,       IF_REAL,"Flicker noise coefficient"),
diff -u ngspice-original/ng-spice-rework/src/spicelib/devices/res/resdefs.h 
ngspice/ng-spice-rework/src/spicelib/devices/res/resdefs.h
--- ngspice-original/ng-spice-rework/src/spicelib/devices/res/resdefs.h 
2009-06-14 12:37:52.579552456 -0700
+++ ngspice/ng-spice-rework/src/spicelib/devices/res/resdefs.h  2009-06-14 
15:12:25.114801141 -0700
@@ -43,6 +43,10 @@
     double RESm;                    /* Multiplicity factor for this instance */
     double REStc1;                  /* first temperature coefficient of 
resistors */
     double REStc2;                  /* second temperature coefficient of 
resistors */
+/* alx begin */
+    double RESvc1;                  /* first voltage coefficient of resistors 
*/
+    double RESvc2;                  /* second voltage coefficient of resistors 
*/
+/* alx end */
     int    RESnoisy;                /* Set if the resistor generates noise */
     double *RESposPosptr;           /* pointer to sparse matrix diagonal at 
                                      * (positive,positive) */
@@ -63,6 +67,10 @@
     unsigned RESmGiven      : 1;    /* indicates M parameter specified */
     unsigned REStc1Given    : 1;    /* indicates tc1 parameter specified */
     unsigned REStc2Given    : 1;    /* indicates tc2 parameter specified */
+/* alx begin */
+    unsigned RESvc1Given    : 1;    /* indicates vc1 parameter specified */
+    unsigned RESvc2Given    : 1;    /* indicates vc2 parameter specified */
+/* alx end */
     unsigned RESnoisyGiven  : 1;    /* indicates if noisy is specified */
     int    RESsenParmNo;            /* parameter # for sensitivity use;
                                      * set equal to  0 if not a design 
parameter*/
@@ -98,6 +106,8 @@
     double REStnom;         /* temperature at which resistance measured */
     double REStempCoeff1;   /* first temperature coefficient of resistors */
     double REStempCoeff2;   /* second temperature coefficient of resistors */
+    double RESvoltCoeff1;   /* first voltage coefficient of resistors */
+    double RESvoltCoeff2;   /* second voltage coefficient of resistors */
     double RESsheetRes;     /* sheet resistance of devices in ohms/square */
     double RESdefWidth;     /* default width of a resistor */
     double RESnarrow;       /* amount by which device is narrower than drawn */
@@ -107,6 +117,8 @@
     unsigned REStnomGiven       :1; /* flag to indicate nominal temp. was 
given */
     unsigned REStc1Given        :1; /* flag to indicate tc1 was specified */
     unsigned REStc2Given        :1; /* flag to indicate tc2 was specified */
+    unsigned RESvc1Given        :1; /* flag to indicate vc1 was specified */
+    unsigned RESvc2Given        :1; /* flag to indicate vc2 was specified */
     unsigned RESsheetResGiven   :1; /* flag to indicate sheet resistance 
given*/
     unsigned RESdefWidthGiven   :1; /* flag to indicate default width given */
     unsigned RESnarrowGiven     :1; /* flag to indicate narrow effect given */
@@ -134,6 +146,8 @@
 /* tanaka */
 #define RES_TC1 16
 #define RES_TC2 17
+#define RES_VC1 18
+#define RES_VC2 19
 
 /* model parameters */
 #define RES_MOD_TC1 101
@@ -146,6 +160,8 @@
 #define RES_MOD_SHORT 108
 #define RES_MOD_KF 109
 #define RES_MOD_AF 110
+#define RES_MOD_VC1 111
+#define RES_MOD_VC2 112
 
 /* device questions */
 #define RES_QUEST_SENS_REAL      201
diff -u ngspice-original/ng-spice-rework/src/spicelib/devices/res/resload.c 
ngspice/ng-spice-rework/src/spicelib/devices/res/resload.c
--- ngspice-original/ng-spice-rework/src/spicelib/devices/res/resload.c 
2009-06-14 12:37:52.556562241 -0700
+++ ngspice/ng-spice-rework/src/spicelib/devices/res/resload.c  2009-06-19 
12:27:18.715124567 -0700
@@ -18,7 +18,9 @@
     RESmodel *model = (RESmodel *)inModel;
     double m;
     double difference;
+    double vdifference;
     double factor;
+    double vactor;
 
                
     /*  loop through all the resistor models */
@@ -31,18 +33,25 @@
            
            if(!here->REStc1Given) here->REStc1    = 0.0;
            if(!here->REStc2Given) here->REStc2    = 0.0;
+           if(!here->RESvc1Given) here->RESvc1    = 0.0;
+           if(!here->RESvc2Given) here->RESvc2    = 0.0;
            if(!here->RESmGiven)   here->RESm      = 1.0;
 
            if (here->RESowner != ARCHme) continue;
 
-           here->REScurrent = (*(ckt->CKTrhsOld+here->RESposNode) - 
-               *(ckt->CKTrhsOld+here->RESnegNode)) * here->RESconduct;
+           vdifference = fabs(*(ckt->CKTrhsOld+here->RESposNode) - 
+               *(ckt->CKTrhsOld+here->RESnegNode));
+           
+           here->REScurrent = vdifference * here->RESconduct;
                
            difference = (here->REStemp + here->RESdtemp) - 300.15;
            factor = 1.0 + (here->REStc1)*difference + 
                (here->REStc2)*difference*difference;
            
-           m = (here->RESm)/factor; 
+           vactor = 1.0 + (here->RESvc1)*vdifference + 
+               (here->RESvc2)*vdifference*vdifference;
+           
+           m = (here->RESm)/factor/vactor; 
 
            *(here->RESposPosptr) += m * here->RESconduct;
            *(here->RESnegNegptr) += m * here->RESconduct;
@@ -62,6 +71,7 @@
     RESmodel *model = (RESmodel *)inModel;
     double m;
     double difference;
+    double vdifference;
     double factor;
 
     /*  loop through all the resistor models */
@@ -74,6 +84,8 @@
            
            if(!here->REStc1Given) here->REStc1    = 0.0;
            if(!here->REStc2Given) here->REStc2    = 0.0;
+           if(!here->RESvc1Given) here->RESvc1    = 0.0;
+           if(!here->RESvc2Given) here->RESvc2    = 0.0;
            if(!here->RESmGiven)   here->RESm      = 1.0;
             
            if (here->RESowner != ARCHme) continue;
Only in ngspice/ng-spice-rework/src/spicelib/devices/res/: .resload.c.swp
diff -u ngspice-original/ng-spice-rework/src/spicelib/devices/res/resmask.c 
ngspice/ng-spice-rework/src/spicelib/devices/res/resmask.c
--- ngspice-original/ng-spice-rework/src/spicelib/devices/res/resmask.c 
2009-06-14 12:37:52.584582076 -0700
+++ ngspice/ng-spice-rework/src/spicelib/devices/res/resmask.c  2009-06-14 
12:52:36.565551856 -0700
@@ -31,6 +31,12 @@
         case RES_MOD_TC2:
             value->rValue = model->REStempCoeff2;
             return(OK);
+        case RES_MOD_VC1:
+            value->rValue = model->RESvoltCoeff1;
+            return(OK);
+        case RES_MOD_VC2:
+            value->rValue = model->RESvoltCoeff2;
+            return(OK);
         case RES_MOD_RSH:
             value->rValue = model->RESsheetRes;
             return(OK);
diff -u ngspice-original/ng-spice-rework/src/spicelib/devices/res/resmpar.c 
ngspice/ng-spice-rework/src/spicelib/devices/res/resmpar.c
--- ngspice-original/ng-spice-rework/src/spicelib/devices/res/resmpar.c 
2009-06-14 12:37:52.557563277 -0700
+++ ngspice/ng-spice-rework/src/spicelib/devices/res/resmpar.c  2009-06-14 
15:13:23.665551809 -0700
@@ -30,6 +30,14 @@
             model->REStempCoeff2 = value->rValue;
             model->REStc2Given = TRUE;
             break;
+        case RES_MOD_VC1:
+            model->RESvoltCoeff1 = value->rValue;
+            model->RESvc1Given = TRUE;
+            break;
+        case RES_MOD_VC2:
+            model->RESvoltCoeff2 = value->rValue;
+            model->RESvc2Given = TRUE;
+            break;
         case RES_MOD_RSH:
             model->RESsheetRes = value->rValue;
             model->RESsheetResGiven = TRUE;
diff -u ngspice-original/ng-spice-rework/src/spicelib/devices/res/resparam.c 
ngspice/ng-spice-rework/src/spicelib/devices/res/resparam.c
--- ngspice-original/ng-spice-rework/src/spicelib/devices/res/resparam.c        
2009-06-14 12:37:52.582562895 -0700
+++ ngspice/ng-spice-rework/src/spicelib/devices/res/resparam.c 2009-06-14 
14:46:31.848551557 -0700
@@ -63,6 +63,14 @@
            here->REStc2 = value->rValue;
            here->REStc2Given = TRUE;
             break;
+       case RES_VC1:
+           here->RESvc1 = value->rValue;
+           here->RESvc1Given = TRUE;
+            break;
+       case RES_VC2:
+           here->RESvc2 = value->rValue;
+           here->RESvc2Given = TRUE;
+            break;
        case RES_NOISY: 
            here->RESnoisy = value->iValue;
            here->RESnoisyGiven = TRUE;

_______________________________________________
geda-user mailing list
[email protected]
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user

Reply via email to