VBIC: simplify nqs derivatives

This commit is contained in:
dwarning 2025-02-07 22:43:30 +01:00
parent 5db715296d
commit 73f5dc65fb
6 changed files with 91 additions and 171 deletions

View File

@ -49,11 +49,8 @@ VBICacLoad(GENmodel *inModel, CKTcircuit *ckt)
double Ixf1_Vxf1; double Ixf1_Vxf1;
double Ixf1_Vrth; double Ixf1_Vrth;
double Ixf2_Vbei;
double Ixf2_Vbci;
double Ixf2_Vxf2; double Ixf2_Vxf2;
double Ixf2_Vxf1; double Ixf2_Vxf1;
double Ixf2_Vrth;
/* loop through all the models */ /* loop through all the models */
for( ; model != NULL; model = VBICnextModel(model)) { for( ; model != NULL; model = VBICnextModel(model)) {
@ -91,15 +88,12 @@ VBICacLoad(GENmodel *inModel, CKTcircuit *ckt)
Ixf1_Vbei = *(ckt->CKTstate0 + here->VBICixf1_Vbei); Ixf1_Vbei = *(ckt->CKTstate0 + here->VBICixf1_Vbei);
Ixf1_Vbci = *(ckt->CKTstate0 + here->VBICixf1_Vbci); Ixf1_Vbci = *(ckt->CKTstate0 + here->VBICixf1_Vbci);
Ixf1_Vxf2 = *(ckt->CKTstate0 + here->VBICixf1_Vxf2);
Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1); Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1);
Ixf1_Vxf2 = *(ckt->CKTstate0 + here->VBICixf1_Vxf2);
Ixf1_Vrth = *(ckt->CKTstate0 + here->VBICixf1_Vrth); Ixf1_Vrth = *(ckt->CKTstate0 + here->VBICixf1_Vrth);
Ixf2_Vbei = *(ckt->CKTstate0 + here->VBICixf2_Vbei);
Ixf2_Vbci = *(ckt->CKTstate0 + here->VBICixf2_Vbci);
Ixf2_Vxf2 = *(ckt->CKTstate0 + here->VBICixf2_Vxf2);
Ixf2_Vxf1 = *(ckt->CKTstate0 + here->VBICixf2_Vxf1); Ixf2_Vxf1 = *(ckt->CKTstate0 + here->VBICixf2_Vxf1);
Ixf2_Vrth = *(ckt->CKTstate0 + here->VBICixf2_Vrth); Ixf2_Vxf2 = *(ckt->CKTstate0 + here->VBICixf2_Vxf2);
/* /*
c The real part c The real part
@ -247,6 +241,19 @@ c Stamp element: Rs
*(here->VBICsubsSISubsPtr) += -Irs_Vrs; *(here->VBICsubsSISubsPtr) += -Irs_Vrs;
*(here->VBICsubsSubsSIPtr) += -Irs_Vrs; *(here->VBICsubsSubsSIPtr) += -Irs_Vrs;
if (here->VBIC_excessPhase) {
//Ixf1
*(here->VBICxf1BaseBIPtr) += +Ixf1_Vbei;
*(here->VBICxf1EmitEIPtr) += -Ixf1_Vbei;
*(here->VBICxf1BaseBIPtr) += +Ixf1_Vbci;
*(here->VBICxf1CollCIPtr) += -Ixf1_Vbci;
*(here->VBICxf1Xf2Ptr) += +Ixf1_Vxf2;
*(here->VBICxf1Xf1Ptr) += +Ixf1_Vxf1;
//Ixf2
*(here->VBICxf2Xf2Ptr) += +Ixf2_Vxf2;
*(here->VBICxf2Xf1Ptr) += +Ixf2_Vxf1;
}
if (here->VBIC_selfheat) { if (here->VBIC_selfheat) {
Ibe_Vrth = here->VBICibe_Vrth; Ibe_Vrth = here->VBICibe_Vrth;
@ -350,6 +357,11 @@ c Stamp element: Rs
*/ */
*(here->VBICsubsTempPtr) += Irs_Vrth; *(here->VBICsubsTempPtr) += Irs_Vrth;
*(here->VBICsubsSItempPtr) += -Irs_Vrth; *(here->VBICsubsSItempPtr) += -Irs_Vrth;
if (here->VBIC_excessPhase) {
// Stamp element: Ixf1 f_xf1 = +
*(here->VBICxf1TempPtr) += Ixf1_Vrth;
}
/* /*
c Stamp element: Rth c Stamp element: Rth
*/ */
@ -390,22 +402,6 @@ c Stamp element: Ith
*(here->VBICtempSubsPtr) += -Ith_Vrs; *(here->VBICtempSubsPtr) += -Ith_Vrs;
*(here->VBICtempSubsSIPtr) += +Ith_Vrs; *(here->VBICtempSubsSIPtr) += +Ith_Vrs;
} }
if (here->VBIC_excessPhase) {
//Ixf1
*(here->VBICxf1BaseBIPtr) += +Ixf1_Vbei;
*(here->VBICxf1EmitEIPtr) += -Ixf1_Vbei;
*(here->VBICxf1BaseBIPtr) += +Ixf1_Vbci;
*(here->VBICxf1CollCIPtr) += -Ixf1_Vbci;
*(here->VBICxf1Xf2Ptr) += +Ixf1_Vxf2;
*(here->VBICxf1Xf1Ptr) += +Ixf1_Vxf1;
//Ixf2
*(here->VBICxf2BaseBIPtr) += +Ixf2_Vbei;
*(here->VBICxf2EmitEIPtr) += -Ixf2_Vbei;
*(here->VBICxf2BaseBIPtr) += +Ixf2_Vbci;
*(here->VBICxf2CollCIPtr) += -Ixf2_Vbci;
*(here->VBICxf2Xf2Ptr) += +Ixf2_Vxf2;
*(here->VBICxf2Xf1Ptr) += +Ixf2_Vxf1;
}
/* /*
c The complex part c The complex part
@ -517,12 +513,6 @@ c Stamp element: Qbco
*(here->VBICbaseBPtempPtr + 1) += -XQbep_Vrth; *(here->VBICbaseBPtempPtr + 1) += -XQbep_Vrth;
*(here->VBICsubsSItempPtr + 1) += XQbcp_Vrth; *(here->VBICsubsSItempPtr + 1) += XQbcp_Vrth;
*(here->VBICbaseBPtempPtr + 1) += -XQbcp_Vrth; *(here->VBICbaseBPtempPtr + 1) += -XQbcp_Vrth;
if (here->VBIC_excessPhase) {
// Stamp element: Ixf1 f_xf1 = +
*(here->VBICxf1TempPtr) += Ixf1_Vrth;
// Stamp element: Ixf2 f_xf2 = +
*(here->VBICxf2TempPtr) += Ixf2_Vrth;
}
} }
} }

View File

@ -104,7 +104,6 @@ VBICbindCSC (GENmodel *inModel, CKTcircuit *ckt)
CREATE_KLU_BINDING_TABLE(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CREATE_KLU_BINDING_TABLE(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode);
CREATE_KLU_BINDING_TABLE(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); CREATE_KLU_BINDING_TABLE(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode);
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
CREATE_KLU_BINDING_TABLE(VBICxf2TempPtr, VBICxf2TempBinding, VBICxf2Node, VBICtempNode);
CREATE_KLU_BINDING_TABLE(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode); CREATE_KLU_BINDING_TABLE(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode);
} }
} }
@ -117,9 +116,6 @@ VBICbindCSC (GENmodel *inModel, CKTcircuit *ckt)
CREATE_KLU_BINDING_TABLE(VBICxf1Xf2Ptr, VBICxf1Xf2Binding, VBICxf1Node, VBICxf2Node); CREATE_KLU_BINDING_TABLE(VBICxf1Xf2Ptr, VBICxf1Xf2Binding, VBICxf1Node, VBICxf2Node);
CREATE_KLU_BINDING_TABLE(VBICxf2Xf1Ptr, VBICxf2Xf1Binding, VBICxf2Node, VBICxf1Node); CREATE_KLU_BINDING_TABLE(VBICxf2Xf1Ptr, VBICxf2Xf1Binding, VBICxf2Node, VBICxf1Node);
CREATE_KLU_BINDING_TABLE(VBICxf2BaseBIPtr, VBICxf2BaseBIBinding, VBICxf2Node, VBICbaseBINode);
CREATE_KLU_BINDING_TABLE(VBICxf2EmitEIPtr, VBICxf2EmitEIBinding, VBICxf2Node, VBICemitEINode);
CREATE_KLU_BINDING_TABLE(VBICxf2CollCIPtr, VBICxf2CollCIBinding, VBICxf2Node, VBICcollCINode);
CREATE_KLU_BINDING_TABLE(VBICxf2Xf2Ptr, VBICxf2Xf2Binding, VBICxf2Node, VBICxf2Node); CREATE_KLU_BINDING_TABLE(VBICxf2Xf2Ptr, VBICxf2Xf2Binding, VBICxf2Node, VBICxf2Node);
CREATE_KLU_BINDING_TABLE(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); CREATE_KLU_BINDING_TABLE(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node);
CREATE_KLU_BINDING_TABLE(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); CREATE_KLU_BINDING_TABLE(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node);
@ -222,7 +218,6 @@ VBICbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt)
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode);
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode);
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2TempPtr, VBICxf2TempBinding, VBICxf2Node, VBICtempNode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode);
} }
} }
@ -234,9 +229,6 @@ VBICbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt)
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf2Ptr, VBICxf1Xf2Binding, VBICxf1Node, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf2Ptr, VBICxf1Xf2Binding, VBICxf1Node, VBICxf2Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf1Ptr, VBICxf2Xf1Binding, VBICxf2Node, VBICxf1Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf1Ptr, VBICxf2Xf1Binding, VBICxf2Node, VBICxf1Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2BaseBIPtr, VBICxf2BaseBIBinding, VBICxf2Node, VBICbaseBINode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2EmitEIPtr, VBICxf2EmitEIBinding, VBICxf2Node, VBICemitEINode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2CollCIPtr, VBICxf2CollCIBinding, VBICxf2Node, VBICcollCINode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf2Ptr, VBICxf2Xf2Binding, VBICxf2Node, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf2Ptr, VBICxf2Xf2Binding, VBICxf2Node, VBICxf2Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node);
@ -338,7 +330,6 @@ VBICbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt)
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode);
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2TempPtr, VBICxf2TempBinding, VBICxf2Node, VBICtempNode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode);
} }
} }
@ -351,9 +342,6 @@ VBICbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt)
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf2Ptr, VBICxf1Xf2Binding, VBICxf1Node, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf2Ptr, VBICxf1Xf2Binding, VBICxf1Node, VBICxf2Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf1Ptr, VBICxf2Xf1Binding, VBICxf2Node, VBICxf1Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf1Ptr, VBICxf2Xf1Binding, VBICxf2Node, VBICxf1Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2BaseBIPtr, VBICxf2BaseBIBinding, VBICxf2Node, VBICbaseBINode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2EmitEIPtr, VBICxf2EmitEIBinding, VBICxf2Node, VBICemitEINode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2CollCIPtr, VBICxf2CollCIBinding, VBICxf2Node, VBICcollCINode);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf2Ptr, VBICxf2Xf2Binding, VBICxf2Node, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf2Ptr, VBICxf2Xf2Binding, VBICxf2Node, VBICxf2Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node);
CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node);

View File

@ -412,10 +412,6 @@ typedef struct sVBICinstance {
BindElement *VBICxf1TempBinding ; BindElement *VBICxf1TempBinding ;
BindElement *VBICxf1Xf1Binding ; BindElement *VBICxf1Xf1Binding ;
BindElement *VBICxf1Xf2Binding ; BindElement *VBICxf1Xf2Binding ;
BindElement *VBICxf2BaseBIBinding ;
BindElement *VBICxf2CollCIBinding ;
BindElement *VBICxf2EmitEIBinding ;
BindElement *VBICxf2TempBinding ;
BindElement *VBICxf2Xf1Binding ; BindElement *VBICxf2Xf1Binding ;
BindElement *VBICxf2Xf2Binding ; BindElement *VBICxf2Xf2Binding ;
#endif #endif
@ -517,31 +513,26 @@ typedef struct sVBICinstance {
#define VBICvrth VBICstate+69 #define VBICvrth VBICstate+69
#define VBICicth_Vrth VBICstate+70 #define VBICicth_Vrth VBICstate+70
#define VBICqcxf VBICstate+71 #define VBICqxf1 VBICstate+71
#define VBICcqcxf VBICstate+72 #define VBICcqxf1 VBICstate+72
#define VBICgqcxf VBICstate+73 #define VBICgqxf1 VBICstate+73
#define VBICqxf1 VBICstate+74 #define VBICixf1 VBICstate+74
#define VBICcqxf1 VBICstate+75 #define VBICixf1_Vbei VBICstate+75
#define VBICgqxf1 VBICstate+76 #define VBICixf1_Vbci VBICstate+76
#define VBICixf1 VBICstate+77 #define VBICixf1_Vxf1 VBICstate+77
#define VBICixf1_Vbei VBICstate+78 #define VBICixf1_Vxf2 VBICstate+78
#define VBICixf1_Vbci VBICstate+79 #define VBICixf1_Vrth VBICstate+79
#define VBICixf1_Vxf2 VBICstate+80
#define VBICixf1_Vxf1 VBICstate+81
#define VBICixf1_Vrth VBICstate+82
#define VBICqxf2 VBICstate+83 #define VBICqxf2 VBICstate+80
#define VBICcqxf2 VBICstate+84 #define VBICcqxf2 VBICstate+81
#define VBICgqxf2 VBICstate+85 #define VBICgqxf2 VBICstate+82
#define VBICixf2 VBICstate+86
#define VBICixf2_Vbei VBICstate+87
#define VBICixf2_Vbci VBICstate+88
#define VBICixf2_Vxf1 VBICstate+89
#define VBICixf2_Vxf2 VBICstate+90
#define VBICixf2_Vrth VBICstate+91
#define VBICnumStates 92 #define VBICixf2 VBICstate+83
#define VBICixf2_Vxf1 VBICstate+84
#define VBICixf2_Vxf2 VBICstate+85
#define VBICnumStates 86
/* per model data */ /* per model data */
typedef struct sVBICmodel { /* model structure for a vbic */ typedef struct sVBICmodel { /* model structure for a vbic */

View File

@ -36,9 +36,7 @@ int vbic_4T_et_cf_fj(
double *,double *,double *,double *,double *,double *,double *, double *,double *,double *,double *,double *,double *,double *,
double *,double *,double *,double *,double *,double *,double *, double *,double *,double *,double *,double *,double *,double *,
double *,double *,double *,double *,double *,double *,double *, double *,double *,double *,double *,double *,double *,double *,
double *, double *,double *);
double *, double *, double *, double *,
double *);
int int
VBICload(GENmodel *inModel, CKTcircuit *ckt) VBICload(GENmodel *inModel, CKTcircuit *ckt)
@ -66,9 +64,7 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
,Qbcp_Vbcp=0.0,Irth,Irth_Vrth=0.0,Ith=0.0,Ith_Vrth=0.0,Ith_Vbei=0.0,Ith_Vbci=0.0 ,Qbcp_Vbcp=0.0,Irth,Irth_Vrth=0.0,Ith=0.0,Ith_Vrth=0.0,Ith_Vbei=0.0,Ith_Vbci=0.0
,Ith_Vcei=0.0,Ith_Vbex=0.0,Ith_Vbep=0.0,Ith_Vrs=0.0,Ith_Vbcp=0.0,Ith_Vcep=0.0,Ith_Vrcx=0.0 ,Ith_Vcei=0.0,Ith_Vbex=0.0,Ith_Vbep=0.0,Ith_Vrs=0.0,Ith_Vbcp=0.0,Ith_Vcep=0.0,Ith_Vrcx=0.0
,Ith_Vrci=0.0,Ith_Vbcx=0.0,Ith_Vrbx=0.0,Ith_Vrbi=0.0,Ith_Vre=0.0,Ith_Vrbp=0.0,Qcth=0.0 ,Ith_Vrci=0.0,Ith_Vbcx=0.0,Ith_Vrbx=0.0,Ith_Vrbi=0.0,Ith_Vre=0.0,Ith_Vrbp=0.0,Qcth=0.0
,Qcth_Vrth=0.0 ,Qcth_Vrth=0.0,SCALE;
,Tf=0.0, Tf_Vbei=0.0, Tf_Vbci=0.0, Tf_Vrth=0.0
,SCALE;
int iret; int iret;
double Vce; double Vce;
@ -104,9 +100,9 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
double Iciei, Iciei_Vbei, Iciei_Vbci, Iciei_Vrth, Iciei_Vxf2; double Iciei, Iciei_Vbei, Iciei_Vbci, Iciei_Vrth, Iciei_Vxf2;
//NQS //NQS
double Ixf1=0.0, Ixf2=0.0, Qxf1=0.0, Qxf2=0.0, Qxf1_Vxf1=0.0, Qxf2_Vxf2=0.0; double Ixf1=0.0, Ixf2=0.0, Qxf1=0.0, Qxf2=0.0, Qxf1_Vxf1=0.0, Qxf2_Vxf2=0.0;
double Ixf1_Vxf1=0.0, Ixf1_Vxf2=0.0, Ixf1_ditf=0.0, Ixf1_dTf=0.0, Ixf1_Vbei=0.0, Ixf1_Vbci=0.0, Ixf1_Vrth=0.0; double Ixf1_Vxf1=0.0, Ixf1_Vxf2=0.0, Ixf1_ditf=0.0, Ixf1_Vbei=0.0, Ixf1_Vbci=0.0, Ixf1_Vrth=0.0;
double Ixf2_Vxf1=0.0, Ixf2_Vbei=0.0, Ixf2_Vbci=0.0, Ixf2_Vrth=0.0; double Ixf2_Vxf1=0.0;
double Ixf2_Vxf2=0.0, Ixf2_dTf=0.0; double Ixf2_Vxf2=0.0;
double Itxf=0.0; double Itxf=0.0;
double Itxf_Vxf2=0.0, Itxf_Vbci=0.0, Itxf_Vbei=0.0, Itxf_Vrth=0.0; double Itxf_Vxf2=0.0, Itxf_Vbci=0.0, Itxf_Vbei=0.0, Itxf_Vrth=0.0;
double Vxf1=0.0, Vxf2=0.0; double Vxf1=0.0, Vxf2=0.0;
@ -409,13 +405,10 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
*(ckt->CKTstate0+here->VBICqxf2)=*(ckt->CKTstate1+here->VBICqxf2); *(ckt->CKTstate0+here->VBICqxf2)=*(ckt->CKTstate1+here->VBICqxf2);
*(ckt->CKTstate0+here->VBICcqxf2)=*(ckt->CKTstate1+here->VBICcqxf2); *(ckt->CKTstate0+here->VBICcqxf2)=*(ckt->CKTstate1+here->VBICcqxf2);
*(ckt->CKTstate0+here->VBICgqxf2)=*(ckt->CKTstate1+here->VBICgqxf2); *(ckt->CKTstate0+here->VBICgqxf2)=*(ckt->CKTstate1+here->VBICgqxf2);
*(ckt->CKTstate0+here->VBICixf2_Vbei)=*(ckt->CKTstate1+here->VBICixf2_Vbei);
*(ckt->CKTstate0+here->VBICixf2_Vbci)=*(ckt->CKTstate1+here->VBICixf2_Vbci);
*(ckt->CKTstate0+here->VBICixf2_Vxf1)=*(ckt->CKTstate1+here->VBICixf2_Vxf1); *(ckt->CKTstate0+here->VBICixf2_Vxf1)=*(ckt->CKTstate1+here->VBICixf2_Vxf1);
*(ckt->CKTstate0+here->VBICixf2_Vxf2)=*(ckt->CKTstate1+here->VBICixf2_Vxf2); *(ckt->CKTstate0+here->VBICixf2_Vxf2)=*(ckt->CKTstate1+here->VBICixf2_Vxf2);
if (here->VBIC_selfheat) { if (here->VBIC_selfheat) {
*(ckt->CKTstate0+here->VBICixf1_Vrth)=*(ckt->CKTstate1+here->VBICixf1_Vrth); *(ckt->CKTstate0+here->VBICixf1_Vrth)=*(ckt->CKTstate1+here->VBICixf1_Vrth);
*(ckt->CKTstate0+here->VBICixf2_Vrth)=*(ckt->CKTstate1+here->VBICixf2_Vrth);
} }
} }
} else { } else {
@ -453,8 +446,6 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
if (here->VBIC_selfheat) if (here->VBIC_selfheat)
Vrth = *(ckt->CKTrhsOld + here->VBICtempNode); Vrth = *(ckt->CKTrhsOld + here->VBICtempNode);
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
// not needed because convergence in NQS network is not checked here
//Vxf1 = *(ckt->CKTrhsOld + here->VBICxf1Node);
Vxf2 = *(ckt->CKTrhsOld + here->VBICxf2Node); Vxf2 = *(ckt->CKTrhsOld + here->VBICxf2Node);
} }
#ifndef PREDICTOR #ifndef PREDICTOR
@ -653,11 +644,8 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1); Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1);
Ixf1_Vrth = *(ckt->CKTstate0 + here->VBICixf1_Vrth); Ixf1_Vrth = *(ckt->CKTstate0 + here->VBICixf1_Vrth);
Ixf2 = *(ckt->CKTstate0 + here->VBICixf2); Ixf2 = *(ckt->CKTstate0 + here->VBICixf2);
Ixf2_Vbei = *(ckt->CKTstate0 + here->VBICixf2_Vbei);
Ixf2_Vbci = *(ckt->CKTstate0 + here->VBICixf2_Vbci);
Ixf2_Vxf1 = *(ckt->CKTstate0 + here->VBICixf2_Vxf1); Ixf2_Vxf1 = *(ckt->CKTstate0 + here->VBICixf2_Vxf1);
Ixf2_Vxf2 = *(ckt->CKTstate0 + here->VBICixf2_Vxf2); Ixf2_Vxf2 = *(ckt->CKTstate0 + here->VBICixf2_Vxf2);
Ixf2_Vrth = *(ckt->CKTstate0 + here->VBICixf2_Vrth);
} }
goto load; goto load;
} }
@ -706,30 +694,24 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
,&Iccp_Vbci, &Iccp_Vbcp, &Irs, &Irs_Vrs, &Irs_Vrth, &Qbcp, &Qbcp_Vrth ,&Iccp_Vbci, &Iccp_Vbcp, &Irs, &Irs_Vrs, &Irs_Vrth, &Qbcp, &Qbcp_Vrth
,&Qbcp_Vbcp, &Irth, &Irth_Vrth, &Ith, &Ith_Vrth, &Ith_Vbei, &Ith_Vbci ,&Qbcp_Vbcp, &Irth, &Irth_Vrth, &Ith, &Ith_Vrth, &Ith_Vbei, &Ith_Vbci
,&Ith_Vcei, &Ith_Vbex, &Ith_Vbep, &Ith_Vrs, &Ith_Vbcp, &Ith_Vcep, &Ith_Vrcx ,&Ith_Vcei, &Ith_Vbex, &Ith_Vbep, &Ith_Vrs, &Ith_Vbcp, &Ith_Vcep, &Ith_Vrcx
,&Ith_Vrci, &Ith_Vbcx, &Ith_Vrbx, &Ith_Vrbi, &Ith_Vre, &Ith_Vrbp, &Qcth, &Qcth_Vrth ,&Ith_Vrci, &Ith_Vbcx, &Ith_Vrbx, &Ith_Vrbi, &Ith_Vre, &Ith_Vrbp, &Qcth
,&Tf, &Tf_Vbei, &Tf_Vbci, &Tf_Vrth ,&Qcth_Vrth, &SCALE);
,&SCALE);
here->VBICpower = Ith; here->VBICpower = Ith;
// Excess Phase calculation // Excess Phase calculation
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
Ixf1 = (Vxf2-Itzf)/Tf*model->VBICdelayTimeF; Ixf1 = Vxf2-Itzf;
Ixf1_Vxf1 = 0.0; Ixf1_Vxf1 = 0.0;
Ixf1_Vxf2 = 1.0/Tf*model->VBICdelayTimeF; Ixf1_Vxf2 = 1.0;
Ixf1_ditf = -Ixf1_Vxf2; Ixf1_ditf = -1.0;
Ixf1_dTf = -Ixf1/Tf; Ixf1_Vbei = Ixf1_ditf*Itzf_Vbei;
Ixf1_Vbei = Ixf1_ditf*Itzf_Vbei + Ixf1_dTf*Tf_Vbei; Ixf1_Vbci = Ixf1_ditf*Itzf_Vbci;
Ixf1_Vbci = Ixf1_ditf*Itzf_Vbci + Ixf1_dTf*Tf_Vbci; Ixf1_Vrth = Ixf1_ditf*Itzf_Vrth;
Ixf1_Vrth = Ixf1_ditf*Itzf_Vrth + Ixf1_dTf*Tf_Vrth;
Ixf2 = (Vxf2-Vxf1)/Tf*model->VBICdelayTimeF; Ixf2 = Vxf2-Vxf1;
Ixf2_Vxf2 = 1.0/Tf*model->VBICdelayTimeF; Ixf2_Vxf2 = 1.0;
Ixf2_Vxf1 = -Ixf2_Vxf2; Ixf2_Vxf1 = -1.0;
Ixf2_dTf = -Ixf2/Tf;
Ixf2_Vbei = Ixf2_dTf*Tf_Vbei;
Ixf2_Vbci = Ixf2_dTf*Tf_Vbci;
Ixf2_Vrth = Ixf2_dTf*Tf_Vrth;
Qxf1 = model->VBICdelayTimeF*Vxf1; Qxf1 = model->VBICdelayTimeF*Vxf1;
Qxf1_Vxf1 = model->VBICdelayTimeF; Qxf1_Vxf1 = model->VBICdelayTimeF;
@ -737,35 +719,32 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
Qxf2_Vxf2 = model->VBICdelayTimeF/3; Qxf2_Vxf2 = model->VBICdelayTimeF/3;
Itxf = Vxf2; Itxf = Vxf2;
Itxf_Vbei = 0; Itxf_Vbei = 0.0;
Itxf_Vbci = 0; Itxf_Vbci = 0.0;
Itxf_Vrth = 0; Itxf_Vrth = 0.0;
Itxf_Vxf2 = 1.0; Itxf_Vxf2 = 1.0;
} else { } else {
Ixf1 = Vxf1; Ixf1 = Vxf1;
Ixf1_Vxf1 = 1.0; Ixf1_Vxf1 = 1.0;
Ixf1_Vxf2 = 0; Ixf1_Vxf2 = 0.0;
Ixf1_Vbei = 0; Ixf1_Vbei = 0.0;
Ixf1_Vbci = 0; Ixf1_Vbci = 0.0;
Ixf1_Vrth = 0; Ixf1_Vrth = 0.0;
Ixf2 = Vxf2; Ixf2 = Vxf2;
Ixf2_Vxf2 = 1.0; Ixf2_Vxf2 = 1.0;
Ixf2_Vxf1 = 0; Ixf2_Vxf1 = 0.0;
Ixf2_Vbei = 0;
Ixf2_Vbci = 0;
Ixf2_Vrth = 0;
Qxf1 = 0; Qxf1 = 0.0;
Qxf1_Vxf1 = 0; Qxf1_Vxf1 = 0.0;
Qxf2 = 0; Qxf2 = 0.0;
Qxf2_Vxf2 = 0; Qxf2_Vxf2 = 0.0;
Itxf = Itzf; Itxf = Itzf;
Itxf_Vbei = Itzf_Vbei; Itxf_Vbei = Itzf_Vbei;
Itxf_Vbci = Itzf_Vbci; Itxf_Vbci = Itzf_Vbci;
Itxf_Vrth = Itzf_Vrth; Itxf_Vrth = Itzf_Vrth;
Itxf_Vxf2 = 0; Itxf_Vxf2 = 0.0;
} }
Iciei = Itxf - Itzr; Iciei = Itxf - Itzr;
@ -1049,11 +1028,8 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt)
*(ckt->CKTstate0 + here->VBICixf1_Vrth) = Ixf1_Vrth; *(ckt->CKTstate0 + here->VBICixf1_Vrth) = Ixf1_Vrth;
*(ckt->CKTstate0 + here->VBICixf2) = Ixf2; *(ckt->CKTstate0 + here->VBICixf2) = Ixf2;
*(ckt->CKTstate0 + here->VBICixf2_Vbei) = Ixf2_Vbei;
*(ckt->CKTstate0 + here->VBICixf2_Vbci) = Ixf2_Vbci;
*(ckt->CKTstate0 + here->VBICixf2_Vxf1) = Ixf2_Vxf1; *(ckt->CKTstate0 + here->VBICixf2_Vxf1) = Ixf2_Vxf1;
*(ckt->CKTstate0 + here->VBICixf2_Vxf2) = Ixf2_Vxf2; *(ckt->CKTstate0 + here->VBICixf2_Vxf2) = Ixf2_Vxf2;
*(ckt->CKTstate0 + here->VBICixf2_Vrth) = Ixf2_Vrth;
if (here->VBIC_selfheat) if (here->VBIC_selfheat)
{ {
@ -1145,7 +1121,7 @@ c Stamp element: Ibex
/* /*
c Stamp element: Iciei c Stamp element: Iciei
*/ */
rhs_current = model->VBICtype * (Iciei - Iciei_Vbei*Vbei - Iciei_Vbci*Vbci - Iciei_Vxf2*Vxf2); rhs_current = model->VBICtype * (Iciei - Iciei_Vbei*Vbei - Iciei_Vbci*Vbci);
*(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current;
*(here->VBICcollCIBaseBIPtr) += Iciei_Vbei; *(here->VBICcollCIBaseBIPtr) += Iciei_Vbei;
*(here->VBICcollCIEmitEIPtr) += -Iciei_Vbei; *(here->VBICcollCIEmitEIPtr) += -Iciei_Vbei;
@ -1157,6 +1133,9 @@ c Stamp element: Iciei
*(here->VBICemitEIBaseBIPtr) += -Iciei_Vbci; *(here->VBICemitEIBaseBIPtr) += -Iciei_Vbci;
*(here->VBICemitEICollCIPtr) += Iciei_Vbci; *(here->VBICemitEICollCIPtr) += Iciei_Vbci;
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
rhs_current = model->VBICtype * (-Iciei_Vxf2*Vxf2);
*(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current;
*(ckt->CKTrhs + here->VBICemitEINode) += rhs_current;
// with respect to Vxf2 // with respect to Vxf2
*(here->VBICcollCIXf2Ptr) += Iciei_Vxf2; *(here->VBICcollCIXf2Ptr) += Iciei_Vxf2;
*(here->VBICemitEIXf2Ptr) += -Iciei_Vxf2; *(here->VBICemitEIXf2Ptr) += -Iciei_Vxf2;
@ -1300,7 +1279,7 @@ c Stamp element: Rs
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
// Branch: xf1-ground, Stamp element: Ixf1 f_xf1=+ // Branch: xf1-ground, Stamp element: Ixf1 f_xf1=+
rhs_current = Ixf1 - Ixf1_Vbci*Vbci - Ixf1_Vbei*Vbei -Ixf1_Vxf1*Vxf1 - Ixf1_Vxf2*Vxf2; rhs_current = Ixf1 - Ixf1_Vbci*Vbci - Ixf1_Vbei*Vbei -Ixf1_Vxf1*Vxf1 - Ixf1_Vxf2*Vxf2;
*(ckt->CKTrhs + here->VBICxf1Node) += -rhs_current; // rhs_current; // into xf1 node *(ckt->CKTrhs + here->VBICxf1Node) += -rhs_current; // into xf1 node
*(here->VBICxf1BaseBIPtr) += +Ixf1_Vbei; *(here->VBICxf1BaseBIPtr) += +Ixf1_Vbei;
*(here->VBICxf1EmitEIPtr) += -Ixf1_Vbei; *(here->VBICxf1EmitEIPtr) += -Ixf1_Vbei;
*(here->VBICxf1BaseBIPtr) += +Ixf1_Vbci; *(here->VBICxf1BaseBIPtr) += +Ixf1_Vbci;
@ -1309,12 +1288,8 @@ c Stamp element: Rs
*(here->VBICxf1Xf1Ptr) += +Ixf1_Vxf1; *(here->VBICxf1Xf1Ptr) += +Ixf1_Vxf1;
// Branch: xf2-ground, Stamp element: Ixf2 f_xf2=+ // Branch: xf2-ground, Stamp element: Ixf2 f_xf2=+
rhs_current = Ixf2 - Ixf2_Vbci*Vbci - Ixf2_Vbei*Vbei - Ixf2_Vxf1*Vxf1 - Ixf2_Vxf2*Vxf2; rhs_current = Ixf2 - Ixf2_Vxf1*Vxf1 - Ixf2_Vxf2*Vxf2;
*(ckt->CKTrhs + here->VBICxf2Node) += -rhs_current; // rhs_current; // into xf2 node *(ckt->CKTrhs + here->VBICxf2Node) += -rhs_current; // into xf2 node
*(here->VBICxf2BaseBIPtr) += +Ixf2_Vbei;
*(here->VBICxf2EmitEIPtr) += -Ixf2_Vbei;
*(here->VBICxf2BaseBIPtr) += +Ixf2_Vbci;
*(here->VBICxf2CollCIPtr) += -Ixf2_Vbci;
*(here->VBICxf2Xf2Ptr) += +Ixf2_Vxf2; *(here->VBICxf2Xf2Ptr) += +Ixf2_Vxf2;
*(here->VBICxf2Xf1Ptr) += +Ixf2_Vxf1; *(here->VBICxf2Xf1Ptr) += +Ixf2_Vxf1;
} }
@ -1493,12 +1468,6 @@ c Stamp element: Ith
*(ckt->CKTrhs + here->VBICxf1Node) += -rhs_current; *(ckt->CKTrhs + here->VBICxf1Node) += -rhs_current;
// with respect to Potential Vxf1 // with respect to Potential Vxf1
*(here->VBICxf1TempPtr) += Ixf1_Vrth; *(here->VBICxf1TempPtr) += Ixf1_Vrth;
// Stamp element: Ixf2 f_xf2 = +
rhs_current = -Ixf2_Vrth*Vrth;
*(ckt->CKTrhs + here->VBICxf2Node) += -rhs_current;
// with respect to Potential Vxf2
*(here->VBICxf2TempPtr) += Ixf2_Vrth;
} }
} }
} }
@ -1524,9 +1493,8 @@ int vbic_4T_et_cf_fj(double *p
,double *Iccp_Vbci, double *Iccp_Vbcp, double *Irs, double *Irs_Vrs, double *Irs_Vrth, double *Qbcp, double *Qbcp_Vrth ,double *Iccp_Vbci, double *Iccp_Vbcp, double *Irs, double *Irs_Vrs, double *Irs_Vrth, double *Qbcp, double *Qbcp_Vrth
,double *Qbcp_Vbcp, double *Irth, double *Irth_Vrth, double *Ith, double *Ith_Vrth, double *Ith_Vbei, double *Ith_Vbci ,double *Qbcp_Vbcp, double *Irth, double *Irth_Vrth, double *Ith, double *Ith_Vrth, double *Ith_Vbei, double *Ith_Vbci
,double *Ith_Vcei, double *Ith_Vbex, double *Ith_Vbep, double *Ith_Vrs, double *Ith_Vbcp, double *Ith_Vcep, double *Ith_Vrcx ,double *Ith_Vcei, double *Ith_Vbex, double *Ith_Vbep, double *Ith_Vrs, double *Ith_Vbcp, double *Ith_Vcep, double *Ith_Vrcx
,double *Ith_Vrci, double *Ith_Vbcx, double *Ith_Vrbx, double *Ith_Vrbi, double *Ith_Vre, double *Ith_Vrbp, double *Qcth, double *Qcth_Vrth ,double *Ith_Vrci, double *Ith_Vbcx, double *Ith_Vrbx, double *Ith_Vrbi, double *Ith_Vre, double *Ith_Vrbp, double *Qcth
,double *tff, double *tff_Vbei, double *tff_Vbci, double *tff_Vrth ,double *Qcth_Vrth, double *SCALE)
,double *SCALE)
{ {
double Tini,Tdev,Tdev_Vrth,Vtv,Vtv_Tdev,Vtv_Vrth,rT; double Tini,Tdev,Tdev_Vrth,Vtv,Vtv_Tdev,Vtv_Vrth,rT;
double rT_Tdev,rT_Vrth,dT,dT_Tdev,dT_Vrth,xvar1,xvar1_rT; double rT_Tdev,rT_Vrth,dT,dT_Tdev,dT_Vrth,xvar1,xvar1_rT;
@ -1611,13 +1579,12 @@ double derf_IVO,derf_Vrth,derf_RCIatT,derf_Iohm,derf_Vrci,derf_Vbci,derf_Vbcx;
double Irci_Iohm,Irci_derf,Irbx_RBXatT,Irbi_qb,Irbi_RBIatT,Ire_REatT,Irbp_qbp; double Irci_Iohm,Irci_derf,Irbx_RBXatT,Irbi_qb,Irbi_RBIatT,Ire_REatT,Irbp_qbp;
double Irbp_RBPatT,argn_Vbcp,expn_Vbcp,Ibcp_IBCIPatT,Ibcp_expi,Ibcp_IBCNPatT,Ibcp_expn; double Irbp_RBPatT,argn_Vbcp,expn_Vbcp,Ibcp_IBCIPatT,Ibcp_expi,Ibcp_IBCNPatT,Ibcp_expn;
double Irs_RSatT,sgIf,rIf,rIf_Ifi,rIf_Vrth,rIf_Vbei,mIf; double Irs_RSatT,sgIf,rIf,rIf_Ifi,rIf_Vrth,rIf_Vbei,mIf;
double mIf_rIf,mIf_Vrth,mIf_Vbei,tff_q1; double mIf_rIf,mIf_Vrth,mIf_Vbei,tff,tff_q1,tff_Vrth,tff_Vbei;
double tff_xvar2,tff_mIf,Qbe_CJEatT,Qbe_qdbe,Qbe_tff,Qbe_Ifi; double tff_Vbci,tff_xvar2,tff_mIf,Qbe_CJEatT,Qbe_qdbe,Qbe_tff,Qbe_Ifi;
double Qbe_qb,Qbex_CJEatT,Qbex_qdbex,Qbc_CJCatT,Qbc_qdbc,Qbc_Iri,Qbc_Kbci; double Qbe_qb,Qbex_CJEatT,Qbex_qdbex,Qbc_CJCatT,Qbc_qdbc,Qbc_Iri,Qbc_Kbci;
double Qbcx_Kbcx,Qbep_CJEPatT,Qbep_qdbep,Qbep_Ifp,Qbcp_CJCPatT,Qbcp_qdbcp,Ith_Ibe; double Qbcx_Kbcx,Qbep_CJEPatT,Qbep_qdbep,Qbep_Ifp,Qbcp_CJCPatT,Qbcp_qdbcp,Ith_Ibe;
double Ith_Ibc,Ith_Itzf,Ith_Itzr,Ith_Ibex,Ith_Ibep,Ith_Irs,Ith_Ibcp; double Ith_Ibc,Ith_Itzf,Ith_Itzr,Ith_Ibex,Ith_Ibep,Ith_Irs,Ith_Ibcp;
double Ith_Iccp,Ith_Ircx,Ith_Irci,Ith_Irbx,Ith_Irbi,Ith_Ire,Ith_Irbp; double Ith_Iccp,Ith_Ircx,Ith_Irci,Ith_Irbx,Ith_Irbi,Ith_Ire,Ith_Irbp;
//double tff, tff_Vbei, tff_Vbci, tff_Vrth;
/* Function and derivative code */ /* Function and derivative code */
@ -3891,28 +3858,28 @@ double Ith_Iccp,Ith_Ircx,Ith_Irci,Ith_Irbx,Ith_Irbi,Ith_Ire,Ith_Irbp;
xvar2=exp(xvar1); xvar2=exp(xvar1);
xvar2_xvar1=xvar2; xvar2_xvar1=xvar2;
xvar2_Vbci=xvar2_xvar1*xvar1_Vbci; xvar2_Vbci=xvar2_xvar1*xvar1_Vbci;
*tff=p[56]*(1.0+p[57]*q1)*(1.0+p[58]*xvar2*(slTF+mIf*mIf)*sgIf); tff=p[56]*(1.0+p[57]*q1)*(1.0+p[58]*xvar2*(slTF+mIf*mIf)*sgIf);
tff_q1=p[57]*p[56]*(sgIf*(slTF+(mIf*mIf))*p[58]*xvar2+1.0); tff_q1=p[57]*p[56]*(sgIf*(slTF+(mIf*mIf))*p[58]*xvar2+1.0);
tff_xvar2=(q1*p[57]+1.0)*sgIf*(slTF+(mIf*mIf))*p[56]*p[58]; tff_xvar2=(q1*p[57]+1.0)*sgIf*(slTF+(mIf*mIf))*p[56]*p[58];
tff_mIf=2.0*mIf*(q1*p[57]+1.0)*sgIf*p[56]*p[58]*xvar2; tff_mIf=2.0*mIf*(q1*p[57]+1.0)*sgIf*p[56]*p[58]*xvar2;
*tff_Vrth=tff_q1*q1_Vrth; tff_Vrth=tff_q1*q1_Vrth;
*tff_Vbei=tff_q1*q1_Vbei; tff_Vbei=tff_q1*q1_Vbei;
*tff_Vbci=tff_q1*q1_Vbci; tff_Vbci=tff_q1*q1_Vbci;
*tff_Vbci=*tff_Vbci+tff_xvar2*xvar2_Vbci; tff_Vbci=tff_Vbci+tff_xvar2*xvar2_Vbci;
*tff_Vrth=*tff_Vrth+tff_mIf*mIf_Vrth; tff_Vrth=tff_Vrth+tff_mIf*mIf_Vrth;
*tff_Vbei=*tff_Vbei+tff_mIf*mIf_Vbei; tff_Vbei=tff_Vbei+tff_mIf*mIf_Vbei;
(*Qbe)=CJEatT*qdbe*p[32]+*tff*Ifi/qb; (*Qbe)=CJEatT*qdbe*p[32]+tff*Ifi/qb;
Qbe_CJEatT=qdbe*p[32]; Qbe_CJEatT=qdbe*p[32];
Qbe_qdbe=CJEatT*p[32]; Qbe_qdbe=CJEatT*p[32];
Qbe_tff=Ifi/qb; Qbe_tff=Ifi/qb;
Qbe_Ifi=*tff/qb; Qbe_Ifi=tff/qb;
Qbe_qb=-Ifi* *tff/(qb*qb); Qbe_qb=-Ifi*tff/(qb*qb);
*Qbe_Vrth=Qbe_CJEatT*CJEatT_Vrth; *Qbe_Vrth=Qbe_CJEatT*CJEatT_Vrth;
*Qbe_Vrth=(*Qbe_Vrth)+Qbe_qdbe*qdbe_Vrth; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qdbe*qdbe_Vrth;
*Qbe_Vbei=Qbe_qdbe*qdbe_Vbei; *Qbe_Vbei=Qbe_qdbe*qdbe_Vbei;
*Qbe_Vrth=(*Qbe_Vrth)+Qbe_tff* *tff_Vrth; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_tff*tff_Vrth;
*Qbe_Vbei=(*Qbe_Vbei)+Qbe_tff* *tff_Vbei; *Qbe_Vbei=(*Qbe_Vbei)+Qbe_tff*tff_Vbei;
*Qbe_Vbci=Qbe_tff* *tff_Vbci; *Qbe_Vbci=Qbe_tff*tff_Vbci;
*Qbe_Vrth=(*Qbe_Vrth)+Qbe_Ifi*Ifi_Vrth; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_Ifi*Ifi_Vrth;
*Qbe_Vbei=(*Qbe_Vbei)+Qbe_Ifi*Ifi_Vbei; *Qbe_Vbei=(*Qbe_Vbei)+Qbe_Ifi*Ifi_Vbei;
*Qbe_Vrth=(*Qbe_Vrth)+Qbe_qb*qb_Vrth; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qb*qb_Vrth;

View File

@ -49,11 +49,8 @@ VBICpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
double Ixf1_Vxf1; double Ixf1_Vxf1;
double Ixf1_Vrth; double Ixf1_Vrth;
double Ixf2_Vbei;
double Ixf2_Vbci;
double Ixf2_Vxf2; double Ixf2_Vxf2;
double Ixf2_Vxf1; double Ixf2_Vxf1;
double Ixf2_Vrth;
/* loop through all the models */ /* loop through all the models */
for( ; model != NULL; model = VBICnextModel(model)) { for( ; model != NULL; model = VBICnextModel(model)) {
@ -95,11 +92,8 @@ VBICpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1); Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1);
Ixf1_Vrth = *(ckt->CKTstate0 + here->VBICixf1_Vrth); Ixf1_Vrth = *(ckt->CKTstate0 + here->VBICixf1_Vrth);
Ixf2_Vbei = *(ckt->CKTstate0 + here->VBICixf2_Vbei);
Ixf2_Vbci = *(ckt->CKTstate0 + here->VBICixf2_Vbci);
Ixf2_Vxf2 = *(ckt->CKTstate0 + here->VBICixf2_Vxf2); Ixf2_Vxf2 = *(ckt->CKTstate0 + here->VBICixf2_Vxf2);
Ixf2_Vxf1 = *(ckt->CKTstate0 + here->VBICixf2_Vxf1); Ixf2_Vxf1 = *(ckt->CKTstate0 + here->VBICixf2_Vxf1);
Ixf2_Vrth = *(ckt->CKTstate0 + here->VBICixf2_Vrth);
/* /*
c The real part c The real part
@ -400,10 +394,6 @@ c Stamp element: Ith
*(here->VBICxf1Xf2Ptr) += +Ixf1_Vxf2; *(here->VBICxf1Xf2Ptr) += +Ixf1_Vxf2;
*(here->VBICxf1Xf1Ptr) += +Ixf1_Vxf1; *(here->VBICxf1Xf1Ptr) += +Ixf1_Vxf1;
//Ixf2 //Ixf2
*(here->VBICxf2BaseBIPtr) += +Ixf2_Vbei;
*(here->VBICxf2EmitEIPtr) += -Ixf2_Vbei;
*(here->VBICxf2BaseBIPtr) += +Ixf2_Vbci;
*(here->VBICxf2CollCIPtr) += -Ixf2_Vbci;
*(here->VBICxf2Xf2Ptr) += +Ixf2_Vxf2; *(here->VBICxf2Xf2Ptr) += +Ixf2_Vxf2;
*(here->VBICxf2Xf1Ptr) += +Ixf2_Vxf1; *(here->VBICxf2Xf1Ptr) += +Ixf2_Vxf1;
} }
@ -576,8 +566,6 @@ c Stamp element: Qbco
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
// Stamp element: Ixf1 f_xf1 = + // Stamp element: Ixf1 f_xf1 = +
*(here->VBICxf1TempPtr) += Ixf1_Vrth; *(here->VBICxf1TempPtr) += Ixf1_Vrth;
// Stamp element: Ixf2 f_xf2 = +
*(here->VBICxf2TempPtr) += Ixf2_Vrth;
} }
} }

View File

@ -606,7 +606,6 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
TSTALLOC(VBICtempSubsSIPtr,VBICtempNode,VBICsubsSINode); TSTALLOC(VBICtempSubsSIPtr,VBICtempNode,VBICsubsSINode);
TSTALLOC(VBICtempTempPtr,VBICtempNode,VBICtempNode); TSTALLOC(VBICtempTempPtr,VBICtempNode,VBICtempNode);
if (here->VBIC_excessPhase) { if (here->VBIC_excessPhase) {
TSTALLOC(VBICxf2TempPtr ,VBICxf2Node ,VBICtempNode);
TSTALLOC(VBICxf1TempPtr ,VBICxf1Node ,VBICtempNode); TSTALLOC(VBICxf1TempPtr ,VBICxf1Node ,VBICtempNode);
} }
} }
@ -619,9 +618,6 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
TSTALLOC(VBICxf1Xf2Ptr ,VBICxf1Node ,VBICxf2Node); TSTALLOC(VBICxf1Xf2Ptr ,VBICxf1Node ,VBICxf2Node);
TSTALLOC(VBICxf2Xf1Ptr ,VBICxf2Node ,VBICxf1Node); TSTALLOC(VBICxf2Xf1Ptr ,VBICxf2Node ,VBICxf1Node);
TSTALLOC(VBICxf2BaseBIPtr,VBICxf2Node ,VBICbaseBINode);
TSTALLOC(VBICxf2EmitEIPtr,VBICxf2Node ,VBICemitEINode);
TSTALLOC(VBICxf2CollCIPtr,VBICxf2Node ,VBICcollCINode);
TSTALLOC(VBICxf2Xf2Ptr ,VBICxf2Node ,VBICxf2Node); TSTALLOC(VBICxf2Xf2Ptr ,VBICxf2Node ,VBICxf2Node);
TSTALLOC(VBICemitEIXf2Ptr,VBICemitEINode,VBICxf2Node); TSTALLOC(VBICemitEIXf2Ptr,VBICemitEINode,VBICxf2Node);
TSTALLOC(VBICcollCIXf2Ptr,VBICcollCINode,VBICxf2Node); TSTALLOC(VBICcollCIXf2Ptr,VBICcollCINode,VBICxf2Node);
@ -686,8 +682,8 @@ VBICunsetup(
if(here->VBICxf2Node > 0) if(here->VBICxf2Node > 0)
CKTdltNNum(ckt, here->VBICxf2Node); CKTdltNNum(ckt, here->VBICxf2Node);
here->VBICxf2Node = 0; here->VBICxf2Node = 0;
} }
} }
} }
return OK; return OK;