diff --git a/src/spicelib/devices/vbic/vbic.c b/src/spicelib/devices/vbic/vbic.c index 28e5ace6e..36e806af5 100644 --- a/src/spicelib/devices/vbic/vbic.c +++ b/src/spicelib/devices/vbic/vbic.c @@ -42,6 +42,10 @@ IFparm VBICpTable[] = { /* parameters */ OP("ib", VBIC_QUEST_CB, IF_REAL, "Base current"), OP("ie", VBIC_QUEST_CE, IF_REAL, "Emitter current"), OP("is", VBIC_QUEST_CS, IF_REAL, "Substrate current"), + OP("p", VBIC_QUEST_POWER,IF_REAL, "Power dissipation"), + OPR("power",VBIC_QUEST_POWER,IF_REAL, "Power dissipation"), + OP("beta", VBIC_QUEST_BETA, IF_REAL, "CE current gain DC"), + OPR("betad",VBIC_QUEST_BETA, IF_REAL, "CE current gain DC"), OP("gm", VBIC_QUEST_GM, IF_REAL, "Small signal transconductance dIc/dVbe"), OP("go", VBIC_QUEST_GO, IF_REAL, "Small signal output conductance dIc/dVbc"), OP("gpi", VBIC_QUEST_GPI, IF_REAL, "Small signal input conductance dIb/dVbe"), @@ -53,15 +57,8 @@ IFparm VBICpTable[] = { /* parameters */ OP("cbcx", VBIC_QUEST_CBCX, IF_REAL, "External Base to collector capacitance"), OP("cbep", VBIC_QUEST_CBEP, IF_REAL, "Parasitic Base to emitter capacitance"), OP("cbcp", VBIC_QUEST_CBCP, IF_REAL, "Parasitic Base to collector capacitance"), - OP("p", VBIC_QUEST_POWER,IF_REAL, "Power dissipation"), - OPU("geqcb",VBIC_QUEST_GEQCB,IF_REAL, "Internal C-B-base cap. equiv. cond."), - OPU("geqbx",VBIC_QUEST_GEQBX,IF_REAL, "External C-B-base cap. equiv. cond."), OPU("qbe", VBIC_QUEST_QBE, IF_REAL, "Charge storage B-E junction"), - OPU("cqbe", VBIC_QUEST_CQBE, IF_REAL, "Cap. due to charge storage in B-E jct."), OPU("qbc", VBIC_QUEST_QBC, IF_REAL, "Charge storage B-C junction"), - OPU("cqbc", VBIC_QUEST_CQBC, IF_REAL, "Cap. due to charge storage in B-C jct."), - OPU("qbx", VBIC_QUEST_QBX, IF_REAL, "Charge storage B-X junction"), - OPU("cqbx", VBIC_QUEST_CQBX, IF_REAL, "Cap. due to charge storage in B-X jct.") }; IFparm VBICmPTable[] = { /* model parameters */ diff --git a/src/spicelib/devices/vbic/vbicacld.c b/src/spicelib/devices/vbic/vbicacld.c index c745cfb21..244ea1561 100644 --- a/src/spicelib/devices/vbic/vbicacld.c +++ b/src/spicelib/devices/vbic/vbicacld.c @@ -23,7 +23,7 @@ VBICacLoad(GENmodel *inModel, CKTcircuit *ckt) VBICinstance *here; VBICmodel *model = (VBICmodel*)inModel; double Ibe_Vbei,Ibex_Vbex - ,Itzf_Vbei,Itzf_Vbci,Itzr_Vbci,Itzr_Vbei,Ibc_Vbci + ,Iciei_Vbei,Iciei_Vbci,Ibc_Vbci ,Ibc_Vbei,Ibep_Vbep,Ircx_Vrcx,Irci_Vrci ,Irci_Vbci,Irci_Vbcx,Irbx_Vrbx,Irbi_Vrbi,Irbi_Vbei ,Irbi_Vbci,Ire_Vre,Irbp_Vrbp,Irbp_Vbep,Irbp_Vbci @@ -32,7 +32,7 @@ VBICacLoad(GENmodel *inModel, CKTcircuit *ckt) XQbcx_Vbcx, XQbep_Vbep, XQbep_Vbci, XQbcp_Vbcp, XQbeo_Vbe, XQbco_Vbc; - double Ibe_Vrth, Ibex_Vrth, Itzf_Vrth=0.0, Itzr_Vrth, Ibc_Vrth, Ibep_Vrth, + double Ibe_Vrth, Ibex_Vrth, Iciei_Vrth, Iciei_Vxf2, Ibc_Vrth, Ibep_Vrth, Ircx_Vrth, Irci_Vrth, Irbx_Vrth, Irbi_Vrth, Ire_Vrth, Irbp_Vrth, Ibcp_Vrth, Iccp_Vrth, Irs_Vrth, Irth_Vrth, Ith_Vrth, Ith_Vbei, Ith_Vbci, Ith_Vcei, Ith_Vbex, Ith_Vbep, Ith_Vbcp, Ith_Vcep, @@ -40,42 +40,66 @@ VBICacLoad(GENmodel *inModel, CKTcircuit *ckt) double XQcth_Vrth, XQbe_Vrth, XQbex_Vrth, XQbc_Vrth, XQbcx_Vrth, XQbep_Vrth, XQbcp_Vrth; //NQS - double Itxf_Vrxf, Ibc_Vrxf, Ith_Vrxf, Ixzf_Vrth, Ixxf_Vrxf, XQcxf_Vcxf; - double Ixzf_Vbei, Ixzf_Vbci, Xl; + double XQxf1_Vxf1; + double XQxf2_Vxf2; + + double Ixf1_Vbei; + double Ixf1_Vbci; + double Ixf1_Vxf2; + double Ixf1_Vxf1; + double Ixf1_Vrth; + + double Ixf2_Vbei; + double Ixf2_Vbci; + double Ixf2_Vxf2; + double Ixf2_Vxf1; + double Ixf2_Vrth; /* loop through all the models */ for( ; model != NULL; model = VBICnextModel(model)) { /* loop through all the instances of the model */ - for( here = VBICinstances(model); here!= NULL; + for( here = VBICinstances(model); here!= NULL; here = VBICnextInstance(here)) { - Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei); - Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex); - Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei); - Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci); - Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci); - Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei); - Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci); - Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei); - Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep); - Irci_Vrci = *(ckt->CKTstate0 + here->VBICirci_Vrci); - Irci_Vbci = *(ckt->CKTstate0 + here->VBICirci_Vbci); - Irci_Vbcx = *(ckt->CKTstate0 + here->VBICirci_Vbcx); - Irbi_Vrbi = *(ckt->CKTstate0 + here->VBICirbi_Vrbi); - Irbi_Vbei = *(ckt->CKTstate0 + here->VBICirbi_Vbei); - Irbi_Vbci = *(ckt->CKTstate0 + here->VBICirbi_Vbci); - Irbp_Vrbp = *(ckt->CKTstate0 + here->VBICirbp_Vrbp); - Irbp_Vbep = *(ckt->CKTstate0 + here->VBICirbp_Vbep); - Irbp_Vbci = *(ckt->CKTstate0 + here->VBICirbp_Vbci); - Ibcp_Vbcp = *(ckt->CKTstate0 + here->VBICibcp_Vbcp); - Iccp_Vbep = *(ckt->CKTstate0 + here->VBICiccp_Vbep); - Iccp_Vbci = *(ckt->CKTstate0 + here->VBICiccp_Vbci); - Iccp_Vbcp = *(ckt->CKTstate0 + here->VBICiccp_Vbcp); - Ircx_Vrcx = *(ckt->CKTstate0 + here->VBICircx_Vrcx); - Irbx_Vrbx = *(ckt->CKTstate0 + here->VBICirbx_Vrbx); - Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs); - Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre); + Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei); + Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex); + Iciei_Vbei = *(ckt->CKTstate0 + here->VBICiciei_Vbei); + Iciei_Vbci = *(ckt->CKTstate0 + here->VBICiciei_Vbci); + Iciei_Vrth = *(ckt->CKTstate0 + here->VBICiciei_Vrth); + Iciei_Vxf2 = *(ckt->CKTstate0 + here->VBICiciei_Vxf2); + Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci); + Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei); + Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep); + Irci_Vrci = *(ckt->CKTstate0 + here->VBICirci_Vrci); + Irci_Vbci = *(ckt->CKTstate0 + here->VBICirci_Vbci); + Irci_Vbcx = *(ckt->CKTstate0 + here->VBICirci_Vbcx); + Irbi_Vrbi = *(ckt->CKTstate0 + here->VBICirbi_Vrbi); + Irbi_Vbei = *(ckt->CKTstate0 + here->VBICirbi_Vbei); + Irbi_Vbci = *(ckt->CKTstate0 + here->VBICirbi_Vbci); + Irbp_Vrbp = *(ckt->CKTstate0 + here->VBICirbp_Vrbp); + Irbp_Vbep = *(ckt->CKTstate0 + here->VBICirbp_Vbep); + Irbp_Vbci = *(ckt->CKTstate0 + here->VBICirbp_Vbci); + Ibcp_Vbcp = *(ckt->CKTstate0 + here->VBICibcp_Vbcp); + Iccp_Vbep = *(ckt->CKTstate0 + here->VBICiccp_Vbep); + Iccp_Vbci = *(ckt->CKTstate0 + here->VBICiccp_Vbci); + Iccp_Vbcp = *(ckt->CKTstate0 + here->VBICiccp_Vbcp); + Ircx_Vrcx = *(ckt->CKTstate0 + here->VBICircx_Vrcx); + Irbx_Vrbx = *(ckt->CKTstate0 + here->VBICirbx_Vrbx); + Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs); + Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre); + + Ixf1_Vbei = *(ckt->CKTstate0 + here->VBICixf1_Vbei); + Ixf1_Vbci = *(ckt->CKTstate0 + here->VBICixf1_Vbci); + Ixf1_Vxf2 = *(ckt->CKTstate0 + here->VBICixf1_Vxf2); + Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1); + 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_Vrth = *(ckt->CKTstate0 + here->VBICixf2_Vrth); /* c The real part @@ -94,32 +118,22 @@ c Stamp element: Ibex *(here->VBICbaseBXEmitEIPtr) += -Ibex_Vbex; *(here->VBICemitEIBaseBXPtr) += -Ibex_Vbex; *(here->VBICemitEIEmitEIPtr) += Ibex_Vbex; - - if (!here->VBIC_excessPhase) { /* -c Stamp element: Itzf +c Stamp element: Iciei */ - *(here->VBICcollCIBaseBIPtr) += Itzf_Vbei; - *(here->VBICcollCIEmitEIPtr) += -Itzf_Vbei; - *(here->VBICcollCIBaseBIPtr) += Itzf_Vbci; - *(here->VBICcollCICollCIPtr) += -Itzf_Vbci; - *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbei; - *(here->VBICemitEIEmitEIPtr) += Itzf_Vbei; - *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbci; - *(here->VBICemitEICollCIPtr) += Itzf_Vbci; + *(here->VBICcollCIBaseBIPtr) += Iciei_Vbei; + *(here->VBICcollCIEmitEIPtr) += -Iciei_Vbei; + *(here->VBICcollCIBaseBIPtr) += Iciei_Vbci; + *(here->VBICcollCICollCIPtr) += -Iciei_Vbci; + *(here->VBICemitEIBaseBIPtr) += -Iciei_Vbei; + *(here->VBICemitEIEmitEIPtr) += Iciei_Vbei; + *(here->VBICemitEIBaseBIPtr) += -Iciei_Vbci; + *(here->VBICemitEICollCIPtr) += Iciei_Vbci; + if (here->VBIC_excessPhase) { + *(here->VBICcollCIXf2Ptr) += Iciei_Vxf2; + *(here->VBICemitEIXf2Ptr) += -Iciei_Vxf2; } /* -c Stamp element: Itzr -*/ - *(here->VBICemitEIBaseBIPtr) += Itzr_Vbei; - *(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei; - *(here->VBICemitEIBaseBIPtr) += Itzr_Vbci; - *(here->VBICemitEICollCIPtr) += -Itzr_Vbci; - *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei; - *(here->VBICcollCIEmitEIPtr) += Itzr_Vbei; - *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci; - *(here->VBICcollCICollCIPtr) += Itzr_Vbci; -/* c Stamp element: Ibc */ *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbci; @@ -145,7 +159,7 @@ c Stamp element: Rcx *(here->VBICcollCXCollPtr) += -Ircx_Vrcx; *(here->VBICcollCollCXPtr) += -Ircx_Vrcx; /* -c Stamp element: Irci +c Stamp element: Rci */ *(here->VBICcollCXCollCXPtr) += Irci_Vrci; *(here->VBICcollCXCollCIPtr) += -Irci_Vrci; @@ -167,7 +181,7 @@ c Stamp element: Rbx *(here->VBICbaseBXBasePtr) += -Irbx_Vrbx; *(here->VBICbaseBaseBXPtr) += -Irbx_Vrbx; /* -c Stamp element: Irbi +c Stamp element: Rbi */ *(here->VBICbaseBXBaseBXPtr) += Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += -Irbi_Vrbi; @@ -189,7 +203,7 @@ c Stamp element: Re *(here->VBICemitEIEmitPtr) += -Ire_Vre; *(here->VBICemitEmitEIPtr) += -Ire_Vre; /* -c Stamp element: Irbp +c Stamp element: Rbp */ *(here->VBICbaseBPBaseBPPtr) += Irbp_Vrbp; *(here->VBICbaseBPCollCXPtr) += -Irbp_Vrbp; @@ -237,9 +251,6 @@ c Stamp element: Rs Ibe_Vrth = here->VBICibe_Vrth; Ibex_Vrth = here->VBICibex_Vrth; - if (!here->VBIC_excessPhase) - Itzf_Vrth = here->VBICitzf_vrth; - Itzr_Vrth = here->VBICitzr_Vrth; Ibc_Vrth = here->VBICibc_Vrth; Ibep_Vrth = here->VBICibep_Vrth; Ircx_Vrth = here->VBICircx_Vrth; @@ -279,19 +290,11 @@ c Stamp element: Ibex */ *(here->VBICbaseBXtempPtr) += Ibex_Vrth; *(here->VBICemitEItempPtr) += -Ibex_Vrth; - - if (!here->VBIC_excessPhase) { /* -c Stamp element: Itzf +c Stamp element: Iciei */ - *(here->VBICcollCItempPtr) += Itzf_Vrth; - *(here->VBICemitEItempPtr) += -Itzf_Vrth; - } -/* -c Stamp element: Itzr -*/ - *(here->VBICemitEItempPtr) += Itzr_Vrth; - *(here->VBICcollCItempPtr) += -Itzr_Vrth; + *(here->VBICcollCItempPtr) += Iciei_Vrth; + *(here->VBICemitEItempPtr) += -Iciei_Vrth; /* c Stamp element: Ibc */ @@ -386,44 +389,22 @@ c Stamp element: Ith *(here->VBICtempEmitEIPtr) += +Ith_Vre; *(here->VBICtempSubsPtr) += -Ith_Vrs; *(here->VBICtempSubsSIPtr) += +Ith_Vrs; - if (here->VBIC_excessPhase) { - Ith_Vrxf = *(ckt->CKTstate0 + here->VBICith_Vrxf); - *(here->VBICtempXf2Ptr) += +Ith_Vrxf; - } } - if (here->VBIC_excessPhase) { - Itxf_Vrxf = *(ckt->CKTstate0 + here->VBICitxf_Vrxf); - Ibc_Vrxf = *(ckt->CKTstate0 + here->VBICibc_Vrxf); - Ixzf_Vbei = *(ckt->CKTstate0 + here->VBICixzf_Vbei); - Ixzf_Vbci = *(ckt->CKTstate0 + here->VBICixzf_Vbci); - Ixxf_Vrxf = *(ckt->CKTstate0 + here->VBICixxf_Vrxf); -/* -c Stamp element: Itxf -*/ - *(here->VBICcollCIXf2Ptr) += Itxf_Vrxf; - *(here->VBICemitEIXf2Ptr) += -Itxf_Vrxf; -/* -c Stamp element: Ibc -*/ - *(here->VBICbaseBIXf2Ptr) += Ibc_Vrxf; - *(here->VBICcollCIXf2Ptr) += -Ibc_Vrxf; -/* -c Stamp element: Ixzf, Branch: xf1-ground -*/ - *(here->VBICxf1BaseBIPtr) += +Ixzf_Vbei; - *(here->VBICxf1EmitEIPtr) += -Ixzf_Vbei; - *(here->VBICxf1BaseBIPtr) += +Ixzf_Vbci; - *(here->VBICxf1CollCIPtr) += -Ixzf_Vbci; - if (here->VBIC_selfheat) { - Ixzf_Vrth = *(ckt->CKTstate0 + here->VBICixzf_Vrth); - *(here->VBICxf1TempPtr) += Ixzf_Vrth; - } -/* -c Stamp element: Ixxf, Branch: xf2-ground -*/ - *(here->VBICxf2Xf2Ptr) += +Ixxf_Vrxf; - + //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; } /* @@ -439,6 +420,8 @@ c The complex part XQbcp_Vbcp = *(ckt->CKTstate0 + here->VBICcqbcp) * ckt->CKTomega; XQbeo_Vbe = *(ckt->CKTstate0 + here->VBICcqbeo) * ckt->CKTomega; XQbco_Vbc = *(ckt->CKTstate0 + here->VBICcqbco) * ckt->CKTomega; + XQxf1_Vxf1 = *(ckt->CKTstate0 + here->VBICcqxf1) * ckt->CKTomega; + XQxf2_Vxf2 = *(ckt->CKTstate0 + here->VBICcqxf2) * ckt->CKTomega; /* c Stamp element: Qbe */ @@ -504,6 +487,13 @@ c Stamp element: Qbco *(here->VBICbaseCollPtr + 1) += -XQbco_Vbc; *(here->VBICcollBasePtr + 1) += -XQbco_Vbc; + if (here->VBIC_excessPhase) { + //Qxf1 + *(here->VBICxf1Xf1Ptr + 1) += +XQxf1_Vxf1; + //Qxf2 + *(here->VBICxf2Xf2Ptr + 1) += +XQxf2_Vxf2; + } + if (here->VBIC_selfheat) { XQcth_Vrth = here->VBICcapcth * ckt->CKTomega; XQbe_Vrth = here->VBICcapqbeth * ckt->CKTomega; @@ -527,24 +517,12 @@ c Stamp element: Qbco *(here->VBICbaseBPtempPtr + 1) += -XQbep_Vrth; *(here->VBICsubsSItempPtr + 1) += XQbcp_Vrth; *(here->VBICbaseBPtempPtr + 1) += -XQbcp_Vrth; - } - if (here->VBIC_excessPhase) { -/* -c Stamp element: Qcxf -*/ - XQcxf_Vcxf = here->VBICcapQcxf * ckt->CKTomega; - *(here->VBICxf1Xf1Ptr + 1) += XQcxf_Vcxf; -/* -c Stamp element: L = TD/3 -*/ - Xl = here->VBICindInduct * ckt->CKTomega; - - *(here->VBICxf1IbrPtr) += 1; - *(here->VBICxf2IbrPtr) -= 1; - *(here->VBICibrXf1Ptr) += 1; - *(here->VBICibrXf2Ptr) -= 1; - *(here->VBICibrIbrPtr + 1) -= Xl; - + if (here->VBIC_excessPhase) { +// Stamp element: Ixf1 f_xf1 = + + *(here->VBICxf1TempPtr) += Ixf1_Vrth; +// Stamp element: Ixf2 f_xf2 = + + *(here->VBICxf2TempPtr) += Ixf2_Vrth; + } } } diff --git a/src/spicelib/devices/vbic/vbicask.c b/src/spicelib/devices/vbic/vbicask.c index bcd298f22..58450a0a9 100644 --- a/src/spicelib/devices/vbic/vbicask.c +++ b/src/spicelib/devices/vbic/vbicask.c @@ -22,9 +22,11 @@ Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH int VBICask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select) { - IFvalue IC, IB, IE, IS; + NG_IGNORE(select); VBICinstance *here = (VBICinstance*)instPtr; + IFvalue IC, IB; + switch(which) { case VBIC_AREA: value->rValue = here->VBICarea; @@ -75,14 +77,9 @@ VBICask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalu value->rValue = *(ckt->CKTstate0 + here->VBICvbci); return(OK); case VBIC_QUEST_CC: - if (!here->VBIC_excessPhase) - value->rValue = *(ckt->CKTstate0 + here->VBICitzf) - - *(ckt->CKTstate0 + here->VBICitzr) - - *(ckt->CKTstate0 + here->VBICibc); - else - value->rValue = *(ckt->CKTstate0 + here->VBICitxf) - - *(ckt->CKTstate0 + here->VBICitzr) - - *(ckt->CKTstate0 + here->VBICibc); + value->rValue = *(ckt->CKTstate0 + here->VBICiciei) - + *(ckt->CKTstate0 + here->VBICiccp) - + *(ckt->CKTstate0 + here->VBICibc); value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_CB: @@ -94,16 +91,9 @@ VBICask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalu value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_CE: - if (!here->VBIC_excessPhase) - value->rValue = - *(ckt->CKTstate0 + here->VBICibe) - - *(ckt->CKTstate0 + here->VBICibex) - - *(ckt->CKTstate0 + here->VBICitzf) + - *(ckt->CKTstate0 + here->VBICitzr); - else - value->rValue = - *(ckt->CKTstate0 + here->VBICibe) - - *(ckt->CKTstate0 + here->VBICibex) - - *(ckt->CKTstate0 + here->VBICitxf) + - *(ckt->CKTstate0 + here->VBICitzr); + value->rValue = - *(ckt->CKTstate0 + here->VBICibe) - + *(ckt->CKTstate0 + here->VBICibex) - + *(ckt->CKTstate0 + here->VBICiciei); value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_CS: @@ -112,48 +102,22 @@ VBICask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalu value->rValue *= VBICmodPtr(here)->VBICtype; return(OK); case VBIC_QUEST_POWER: + value->rValue = fabs(here->VBICpower); + return(OK); + case VBIC_QUEST_BETA: VBICask(ckt, instPtr, VBIC_QUEST_CC, &IC, select); VBICask(ckt, instPtr, VBIC_QUEST_CB, &IB, select); - VBICask(ckt, instPtr, VBIC_QUEST_CE, &IE, select); - VBICask(ckt, instPtr, VBIC_QUEST_CS, &IS, select); - if (!here->VBIC_excessPhase) - value->rValue = fabs(*(ckt->CKTstate0 + here->VBICibe) * *(ckt->CKTstate0 + here->VBICvbei)) + - fabs(*(ckt->CKTstate0 + here->VBICibc) * *(ckt->CKTstate0 + here->VBICvbci)) + - fabs(*(ckt->CKTstate0 + here->VBICitzf) - *(ckt->CKTstate0 + here->VBICitzr)) - * fabs(*(ckt->CKTstate0 + here->VBICvbei) - *(ckt->CKTstate0 + here->VBICvbci)) + - fabs(*(ckt->CKTstate0 + here->VBICibex) * *(ckt->CKTstate0 + here->VBICvbex)) + - fabs(*(ckt->CKTstate0 + here->VBICibep) * *(ckt->CKTstate0 + here->VBICvbep)) + - fabs(*(ckt->CKTstate0 + here->VBICibcp) * *(ckt->CKTstate0 + here->VBICvbcp)) + - fabs(*(ckt->CKTstate0 + here->VBICiccp)) - * fabs(*(ckt->CKTstate0 + here->VBICvbep) - *(ckt->CKTstate0 + here->VBICvbcp)) + - fabs(IC.rValue * IC.rValue * here->VBICtextCollResist) + - fabs(IC.rValue * *(ckt->CKTstate0 + here->VBICvrci)) + - fabs(IB.rValue * IB.rValue * here->VBICtextBaseResist) + - fabs(IB.rValue * *(ckt->CKTstate0 + here->VBICvrbi)) + - fabs(IE.rValue * IE.rValue * here->VBICtemitterResist) + - fabs(IS.rValue * *(ckt->CKTstate0 + here->VBICvrbp)); - else - value->rValue = fabs(*(ckt->CKTstate0 + here->VBICibe) * *(ckt->CKTstate0 + here->VBICvbei)) + - fabs(*(ckt->CKTstate0 + here->VBICibc) * *(ckt->CKTstate0 + here->VBICvbci)) + - fabs(*(ckt->CKTstate0 + here->VBICitxf) - *(ckt->CKTstate0 + here->VBICitzr)) - * fabs(*(ckt->CKTstate0 + here->VBICvbei) - *(ckt->CKTstate0 + here->VBICvbci)) + - fabs(*(ckt->CKTstate0 + here->VBICibex) * *(ckt->CKTstate0 + here->VBICvbex)) + - fabs(*(ckt->CKTstate0 + here->VBICibep) * *(ckt->CKTstate0 + here->VBICvbep)) + - fabs(*(ckt->CKTstate0 + here->VBICibcp) * *(ckt->CKTstate0 + here->VBICvbcp)) + - fabs(*(ckt->CKTstate0 + here->VBICiccp)) - * fabs(*(ckt->CKTstate0 + here->VBICvbep) - *(ckt->CKTstate0 + here->VBICvbcp)) + - fabs(IC.rValue * IC.rValue * here->VBICtextCollResist) + - fabs(IC.rValue * *(ckt->CKTstate0 + here->VBICvrci)) + - fabs(IB.rValue * IB.rValue * here->VBICtextBaseResist) + - fabs(IB.rValue * *(ckt->CKTstate0 + here->VBICvrbi)) + - fabs(IE.rValue * IE.rValue * here->VBICtemitterResist) + - fabs(IS.rValue * *(ckt->CKTstate0 + here->VBICvrbp)); + if (IB.rValue != 0.0) { + value->rValue = IC.rValue/IB.rValue; + } else { + value->rValue = 0.0; + } return(OK); case VBIC_QUEST_GM: - value->rValue = *(ckt->CKTstate0 + here->VBICitzf_Vbei); + value->rValue = *(ckt->CKTstate0 + here->VBICiciei_Vbei); return(OK); case VBIC_QUEST_GO: - value->rValue = *(ckt->CKTstate0 + here->VBICitzf_Vbci); + value->rValue = *(ckt->CKTstate0 + here->VBICiciei_Vbci); return(OK); case VBIC_QUEST_GPI: value->rValue = *(ckt->CKTstate0 + here->VBICibe_Vbei); diff --git a/src/spicelib/devices/vbic/vbicbindCSC.c b/src/spicelib/devices/vbic/vbicbindCSC.c index 189cc519a..a5a4721a5 100644 --- a/src/spicelib/devices/vbic/vbicbindCSC.c +++ b/src/spicelib/devices/vbic/vbicbindCSC.c @@ -104,27 +104,25 @@ VBICbindCSC (GENmodel *inModel, CKTcircuit *ckt) CREATE_KLU_BINDING_TABLE(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CREATE_KLU_BINDING_TABLE(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); if (here->VBIC_excessPhase) { - CREATE_KLU_BINDING_TABLE(VBICtempXf2Ptr, VBICtempXf2Binding, VBICtempNode, VBICxf2Node); - CREATE_KLU_BINDING_TABLE(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node ,VBICtempNode); + CREATE_KLU_BINDING_TABLE(VBICxf2TempPtr, VBICxf2TempBinding, VBICxf2Node, VBICtempNode); + CREATE_KLU_BINDING_TABLE(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode); } } if (here->VBIC_excessPhase) { - CREATE_KLU_BINDING_TABLE(VBICxf1Xf1Ptr , VBICxf1Xf1Binding , VBICxf1Node , VBICxf1Node); - CREATE_KLU_BINDING_TABLE(VBICxf1Xf2Ptr , VBICxf1Xf2Binding , VBICxf1Node , VBICxf2Node); - CREATE_KLU_BINDING_TABLE(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node , VBICcollCINode); - CREATE_KLU_BINDING_TABLE(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node , VBICbaseBINode); - CREATE_KLU_BINDING_TABLE(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node , VBICemitEINode); - CREATE_KLU_BINDING_TABLE(VBICxf2Xf2Ptr , VBICxf2Xf2Binding , VBICxf2Node , VBICxf2Node); - CREATE_KLU_BINDING_TABLE(VBICxf2Xf1Ptr , VBICxf2Xf1Binding , VBICxf2Node , VBICxf1Node); - CREATE_KLU_BINDING_TABLE(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); - CREATE_KLU_BINDING_TABLE(VBICbaseBIXf2Ptr, VBICbaseBIXf2Binding, VBICbaseBINode, VBICxf2Node); + CREATE_KLU_BINDING_TABLE(VBICxf1Xf1Ptr, VBICxf1Xf1Binding, VBICxf1Node, VBICxf1Node); + CREATE_KLU_BINDING_TABLE(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node, VBICbaseBINode); + CREATE_KLU_BINDING_TABLE(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node, VBICemitEINode); + CREATE_KLU_BINDING_TABLE(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node, VBICcollCINode); + CREATE_KLU_BINDING_TABLE(VBICxf1Xf2Ptr, VBICxf1Xf2Binding, VBICxf1Node, VBICxf2Node); + + 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(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); - CREATE_KLU_BINDING_TABLE(VBICxf1IbrPtr , VBICxf1IbrBinding , VBICxf1Node , VBICbrEq); - CREATE_KLU_BINDING_TABLE(VBICxf2IbrPtr , VBICxf2IbrBinding , VBICxf2Node , VBICbrEq); - CREATE_KLU_BINDING_TABLE(VBICibrXf2Ptr , VBICibrXf2Binding , VBICbrEq , VBICxf2Node); - CREATE_KLU_BINDING_TABLE(VBICibrXf1Ptr , VBICibrXf1Binding , VBICbrEq , VBICxf1Node); - CREATE_KLU_BINDING_TABLE(VBICibrIbrPtr , VBICibrIbrBinding , VBICbrEq , VBICbrEq); + CREATE_KLU_BINDING_TABLE(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); } } @@ -223,25 +221,25 @@ VBICbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt) CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempSubsPtr, VBICtempSubsBinding, VBICtempNode, VBICsubsNode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); - - if (here->VBIC_excessPhase) { - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1Xf1Ptr , VBICxf1Xf1Binding , VBICxf1Node , VBICxf1Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1Xf2Ptr , VBICxf1Xf2Binding , VBICxf1Node , VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node , VBICcollCINode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node , VBICbaseBINode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node , VBICemitEINode); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf2Xf2Ptr , VBICxf2Xf2Binding , VBICxf2Node , VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf2Xf1Ptr , VBICxf2Xf1Binding , VBICxf2Node , VBICxf1Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICbaseBIXf2Ptr, VBICbaseBIXf2Binding, VBICbaseBINode, VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf1IbrPtr , VBICxf1IbrBinding , VBICxf1Node , VBICbrEq); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICxf2IbrPtr , VBICxf2IbrBinding , VBICxf2Node , VBICbrEq); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICibrXf2Ptr , VBICibrXf2Binding , VBICbrEq , VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICibrXf1Ptr , VBICibrXf1Binding , VBICbrEq , VBICxf1Node); - CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(VBICibrIbrPtr , VBICibrIbrBinding , VBICbrEq , VBICbrEq); + if (here->VBIC_excessPhase) { + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2TempPtr, VBICxf2TempBinding, VBICxf2Node, VBICtempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode); + } } + if (here->VBIC_excessPhase) { + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf1Ptr, VBICxf1Xf1Binding, VBICxf1Node, VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node, VBICbaseBINode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node, VBICemitEINode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node, VBICcollCINode); + 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(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(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); } } } @@ -339,24 +337,26 @@ VBICbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt) CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempSubsPtr, VBICtempSubsBinding, VBICtempNode, VBICsubsNode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempSubsSIPtr, VBICtempSubsSIBinding, VBICtempNode, VBICsubsSINode); CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICtempTempPtr, VBICtempTempBinding, VBICtempNode, VBICtempNode); + if (here->VBIC_excessPhase) { + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2TempPtr, VBICxf2TempBinding, VBICxf2Node, VBICtempNode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1TempPtr, VBICxf1TempBinding, VBICxf1Node, VBICtempNode); + } } if (here->VBIC_excessPhase) { - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf1Ptr , VBICxf1Xf1Binding , VBICxf1Node , VBICxf1Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf2Ptr , VBICxf1Xf2Binding , VBICxf1Node , VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node , VBICcollCINode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node , VBICbaseBINode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node , VBICemitEINode); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf2Ptr , VBICxf2Xf2Binding , VBICxf2Node , VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2Xf1Ptr , VBICxf2Xf1Binding , VBICxf2Node , VBICxf1Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICbaseBIXf2Ptr, VBICbaseBIXf2Binding, VBICbaseBINode, VBICxf2Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1Xf1Ptr, VBICxf1Xf1Binding, VBICxf1Node, VBICxf1Node); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1BaseBIPtr, VBICxf1BaseBIBinding, VBICxf1Node, VBICbaseBINode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1EmitEIPtr, VBICxf1EmitEIBinding, VBICxf1Node, VBICemitEINode); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1CollCIPtr, VBICxf1CollCIBinding, VBICxf1Node, VBICcollCINode); + 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(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(VBICemitEIXf2Ptr, VBICemitEIXf2Binding, VBICemitEINode, VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf1IbrPtr , VBICxf1IbrBinding , VBICxf1Node , VBICbrEq); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICxf2IbrPtr , VBICxf2IbrBinding , VBICxf2Node , VBICbrEq); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICibrXf2Ptr , VBICibrXf2Binding , VBICbrEq , VBICxf2Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICibrXf1Ptr , VBICibrXf1Binding , VBICbrEq , VBICxf1Node); - CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICibrIbrPtr , VBICibrIbrBinding , VBICbrEq , VBICbrEq); + CONVERT_KLU_BINDING_TABLE_TO_REAL(VBICcollCIXf2Ptr, VBICcollCIXf2Binding, VBICcollCINode, VBICxf2Node); } } diff --git a/src/spicelib/devices/vbic/vbicconv.c b/src/spicelib/devices/vbic/vbicconv.c index f1def73fa..1b32eb743 100644 --- a/src/spicelib/devices/vbic/vbicconv.c +++ b/src/spicelib/devices/vbic/vbicconv.c @@ -33,8 +33,7 @@ VBICconvTest(GENmodel *inModel, CKTcircuit *ckt) double delvbcp; double ibehat; double ibexhat; - double itzfhat; - double itzrhat; + double icieihat; double ibchat; double ibephat; double ircihat; @@ -43,7 +42,7 @@ VBICconvTest(GENmodel *inModel, CKTcircuit *ckt) double ibcphat; double iccphat; double Vbei, Vbex, Vbci, Vbcx, Vbep, Vrci, Vrbi, Vrbp, Vbcp; - double Ibe, Ibex, Itzf, Itzr, Ibc, Ibep, Irci, Irbi, Irbp, Ibcp, Iccp; + double Ibe, Ibex, Iciei, Ibc, Ibep, Irci, Irbi, Irbp, Ibcp, Iccp; for( ; model != NULL; model = VBICnextModel(model)) { for(here=VBICinstances(model);here!=NULL;here = VBICnextInstance(here)) { @@ -88,10 +87,8 @@ VBICconvTest(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICibe_Vbei)*delvbei; ibexhat = *(ckt->CKTstate0 + here->VBICibex) + *(ckt->CKTstate0 + here->VBICibex_Vbex)*delvbex; - itzfhat = *(ckt->CKTstate0 + here->VBICitzf) + - *(ckt->CKTstate0 + here->VBICitzf_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzf_Vbci)*delvbci; - itzrhat = *(ckt->CKTstate0 + here->VBICitzr) + - *(ckt->CKTstate0 + here->VBICitzr_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzr_Vbci)*delvbci; + icieihat = *(ckt->CKTstate0 + here->VBICiciei) + + *(ckt->CKTstate0 + here->VBICiciei_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICiciei_Vbci)*delvbci; ibchat = *(ckt->CKTstate0 + here->VBICibc) + *(ckt->CKTstate0 + here->VBICibc_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICibc_Vbci)*delvbci; ibephat = *(ckt->CKTstate0 + here->VBICibep) + @@ -108,8 +105,7 @@ VBICconvTest(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICiccp_Vbci)*delvbci + *(ckt->CKTstate0 + here->VBICiccp_Vbcp)*delvbcp; Ibe = *(ckt->CKTstate0 + here->VBICibe); Ibex = *(ckt->CKTstate0 + here->VBICibex); - Itzf = *(ckt->CKTstate0 + here->VBICitzf); - Itzr = *(ckt->CKTstate0 + here->VBICitzr); + Iciei = *(ckt->CKTstate0 + here->VBICiciei); Ibc = *(ckt->CKTstate0 + here->VBICibc); Ibep = *(ckt->CKTstate0 + here->VBICibep); Irci = *(ckt->CKTstate0 + here->VBICirci); @@ -132,60 +128,53 @@ VBICconvTest(GENmodel *inModel, CKTcircuit *ckt) ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(itzfhat),fabs(Itzf))+ckt->CKTabstol; - if (fabs(itzfhat-Itzf) > tol) { + tol=ckt->CKTreltol*MAX(fabs(icieihat),fabs(Iciei))+ckt->CKTabstol; + if (fabs(icieihat-Iciei) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(itzrhat),fabs(Itzr))+ckt->CKTabstol; - if (fabs(itzrhat-Itzr) > tol) { + tol=ckt->CKTreltol*MAX(fabs(ibchat),fabs(Ibc))+ckt->CKTabstol; + if (fabs(ibchat-Ibc) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(ibchat),fabs(Ibc))+ckt->CKTabstol; - if (fabs(ibchat-Ibc) > tol) { + tol=ckt->CKTreltol*MAX(fabs(ibephat),fabs(Ibep))+ckt->CKTabstol; + if (fabs(ibephat-Ibep) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(ibephat),fabs(Ibep))+ckt->CKTabstol; - if (fabs(ibephat-Ibep) > tol) { + tol=ckt->CKTreltol*MAX(fabs(ircihat),fabs(Irci))+ckt->CKTabstol; + if (fabs(ircihat-Irci) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(ircihat),fabs(Irci))+ckt->CKTabstol; - if (fabs(ircihat-Irci) > tol) { + tol=ckt->CKTreltol*MAX(fabs(irbihat),fabs(Irbi))+ckt->CKTabstol; + if (fabs(irbihat-Irbi) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(irbihat),fabs(Irbi))+ckt->CKTabstol; - if (fabs(irbihat-Irbi) > tol) { + tol=ckt->CKTreltol*MAX(fabs(irbphat),fabs(Irbp))+ckt->CKTabstol; + if (fabs(irbphat-Irbp) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(irbphat),fabs(Irbp))+ckt->CKTabstol; - if (fabs(irbphat-Irbp) > tol) { + tol=ckt->CKTreltol*MAX(fabs(ibcphat),fabs(Ibcp))+ckt->CKTabstol; + if (fabs(ibcphat-Ibcp) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ } else { - tol=ckt->CKTreltol*MAX(fabs(ibcphat),fabs(Ibcp))+ckt->CKTabstol; - if (fabs(ibcphat-Ibcp) > tol) { + tol=ckt->CKTreltol*MAX(fabs(iccphat),fabs(Iccp))+ckt->CKTabstol; + if (fabs(iccphat-Iccp) > tol) { ckt->CKTnoncon++; ckt->CKTtroubleElt = (GENinstance *) here; return(OK); /* no reason to continue - we've failed... */ - } else { - tol=ckt->CKTreltol*MAX(fabs(iccphat),fabs(Iccp))+ckt->CKTabstol; - if (fabs(iccphat-Iccp) > tol) { - ckt->CKTnoncon++; - ckt->CKTtroubleElt = (GENinstance *) here; - return(OK); /* no reason to continue - we've failed... */ - } } } } diff --git a/src/spicelib/devices/vbic/vbicdefs.h b/src/spicelib/devices/vbic/vbicdefs.h index 4e6bcb4af..e0edf1248 100644 --- a/src/spicelib/devices/vbic/vbicdefs.h +++ b/src/spicelib/devices/vbic/vbicdefs.h @@ -62,7 +62,6 @@ typedef struct sVBICinstance { int VBICsubsSINode; /* number of internal substrate node */ int VBICxf1Node; /* number of internal excess phase 1 node itf */ int VBICxf2Node; /* number of internal excess phase 2 node itf */ - int VBICbrEq; /* number of the branch equation added for current */ double VBICarea; /* area factor for the vbic */ double VBICicVBE; /* initial condition voltage B-E*/ @@ -241,26 +240,22 @@ typedef struct sVBICinstance { double *VBICtempTempPtr; /* excess phase */ - double *VBICtempXf2Ptr; - double *VBICxf1TempPtr; - double *VBICxf1Xf1Ptr; - double *VBICxf1Xf2Ptr; - double *VBICxf1CollCIPtr; + double *VBICxf1TempPtr; double *VBICxf1BaseBIPtr; double *VBICxf1EmitEIPtr; + double *VBICxf1CollCIPtr; + double *VBICxf1Xf2Ptr; - double *VBICxf2Xf2Ptr; double *VBICxf2Xf1Ptr; - double *VBICcollCIXf2Ptr; - double *VBICbaseBIXf2Ptr; + double *VBICxf2TempPtr; + double *VBICxf2BaseBIPtr; + double *VBICxf2EmitEIPtr; + double *VBICxf2CollCIPtr; + double *VBICxf2Xf2Ptr; + double *VBICemitXf2Ptr; double *VBICemitEIXf2Ptr; - - double *VBICxf1IbrPtr; - double *VBICxf2IbrPtr; - double *VBICibrXf1Ptr; - double *VBICibrXf2Ptr; - double *VBICibrIbrPtr; + double *VBICcollCIXf2Ptr; unsigned VBICareaGiven :1; /* flag to indicate area was specified */ unsigned VBICoff :1; /* 'off' flag for vbic */ @@ -287,8 +282,6 @@ typedef struct sVBICinstance { double VBICibe_Vrth; double VBICibex_Vrth; - double VBICitzf_vrth; - double VBICitzr_Vrth; double VBICibc_Vrth; double VBICibep_Vrth; double VBICircx_Vrth; @@ -319,8 +312,7 @@ typedef struct sVBICinstance { double VBICith_Vre; double VBICith_Vrs; - double VBICindInduct; - double VBICcapQcxf; + double VBICpower; int VBIC_selfheat; /* self-heating enabled */ int VBIC_excessPhase; /* excess phase enabled */ @@ -411,24 +403,21 @@ typedef struct sVBICinstance { BindElement *VBICtempSubsSIBinding ; BindElement *VBICtempTempBinding ; - BindElement *VBICtempXf2Binding ; - BindElement *VBICxf1TempBinding ; + BindElement *VBICcollCIXf2Binding ; + BindElement *VBICemitEIXf2Binding ; + BindElement *VBICxf1BaseBIBinding ; + BindElement *VBICxf1CollCIBinding ; + BindElement *VBICxf1EmitEIBinding ; + BindElement *VBICxf1TempBinding ; BindElement *VBICxf1Xf1Binding ; BindElement *VBICxf1Xf2Binding ; - BindElement *VBICxf1CollCIBinding ; - BindElement *VBICxf1BaseBIBinding ; - BindElement *VBICxf1EmitEIBinding ; - BindElement *VBICxf2Xf2Binding ; + BindElement *VBICxf2BaseBIBinding ; + BindElement *VBICxf2CollCIBinding ; + BindElement *VBICxf2EmitEIBinding ; + BindElement *VBICxf2TempBinding ; BindElement *VBICxf2Xf1Binding ; - BindElement *VBICcollCIXf2Binding ; - BindElement *VBICbaseBIXf2Binding ; - BindElement *VBICemitEIXf2Binding ; - BindElement *VBICxf1IbrBinding ; - BindElement *VBICxf2IbrBinding ; - BindElement *VBICibrXf2Binding ; - BindElement *VBICibrXf1Binding ; - BindElement *VBICibrIbrBinding ; + BindElement *VBICxf2Xf2Binding ; #endif } VBICinstance ; @@ -444,21 +433,20 @@ typedef struct sVBICinstance { #define VBICvrbi VBICstate+6 #define VBICvrbp VBICstate+7 #define VBICvbcp VBICstate+8 +#define VBICvxf1 VBICstate+9 +#define VBICvxf2 VBICstate+10 -#define VBICibe VBICstate+9 -#define VBICibe_Vbei VBICstate+10 +#define VBICibe VBICstate+11 +#define VBICibe_Vbei VBICstate+12 -#define VBICibex VBICstate+11 -#define VBICibex_Vbex VBICstate+12 +#define VBICibex VBICstate+13 +#define VBICibex_Vbex VBICstate+14 -#define VBICitzf VBICstate+13 -#define VBICitzf_Vbei VBICstate+14 -#define VBICitzf_Vbci VBICstate+15 -#define VBICitzf_Vrth VBICstate+16 - -#define VBICitzr VBICstate+17 -#define VBICitzr_Vbci VBICstate+18 -#define VBICitzr_Vbei VBICstate+19 +#define VBICiciei VBICstate+15 +#define VBICiciei_Vbei VBICstate+16 +#define VBICiciei_Vbci VBICstate+17 +#define VBICiciei_Vrth VBICstate+18 +#define VBICiciei_Vxf2 VBICstate+19 #define VBICibc VBICstate+20 #define VBICibc_Vbci VBICstate+21 @@ -482,7 +470,6 @@ typedef struct sVBICinstance { #define VBICirbp_Vbep VBICstate+35 #define VBICirbp_Vbci VBICstate+36 - #define VBICqbe VBICstate+37 #define VBICcqbe VBICstate+38 #define VBICcqbeci VBICstate+39 @@ -534,24 +521,27 @@ typedef struct sVBICinstance { #define VBICcqcxf VBICstate+72 #define VBICgqcxf VBICstate+73 -#define VBICibc_Vrxf VBICstate+74 +#define VBICqxf1 VBICstate+74 +#define VBICcqxf1 VBICstate+75 +#define VBICgqxf1 VBICstate+76 +#define VBICixf1 VBICstate+77 +#define VBICixf1_Vbei VBICstate+78 +#define VBICixf1_Vbci VBICstate+79 +#define VBICixf1_Vxf2 VBICstate+80 +#define VBICixf1_Vxf1 VBICstate+81 +#define VBICixf1_Vrth VBICstate+82 -#define VBICixzf VBICstate+75 -#define VBICixzf_Vbei VBICstate+76 -#define VBICixzf_Vbci VBICstate+77 -#define VBICixzf_Vrth VBICstate+78 +#define VBICqxf2 VBICstate+83 +#define VBICcqxf2 VBICstate+84 +#define VBICgqxf2 VBICstate+85 +#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 VBICixxf VBICstate+79 -#define VBICixxf_Vrxf VBICstate+80 - -#define VBICitxf VBICstate+81 -#define VBICitxf_Vrxf VBICstate+82 -#define VBICith_Vrxf VBICstate+83 - -#define VBICindFlux VBICstate+84 -#define VBICindVolt VBICstate+85 - -#define VBICnumStates 86 +#define VBICnumStates 92 /* per model data */ typedef struct sVBICmodel { /* model structure for a vbic */ @@ -945,8 +935,7 @@ enum { /* device questions */ enum { - VBIC_QUEST_FT = 221, - VBIC_QUEST_COLLNODE, + VBIC_QUEST_COLLNODE = 221, VBIC_QUEST_BASENODE, VBIC_QUEST_EMITNODE, VBIC_QUEST_SUBSNODE, @@ -963,31 +952,21 @@ enum { VBIC_QUEST_CB, VBIC_QUEST_CE, VBIC_QUEST_CS, + VBIC_QUEST_POWER, + VBIC_QUEST_BETA, VBIC_QUEST_GM, VBIC_QUEST_GO, VBIC_QUEST_GPI, VBIC_QUEST_GMU, VBIC_QUEST_GX, - VBIC_QUEST_QBE, - VBIC_QUEST_CQBE, - VBIC_QUEST_QBC, - VBIC_QUEST_CQBC, - VBIC_QUEST_QBX, - VBIC_QUEST_CQBX, - VBIC_QUEST_QBCP, - VBIC_QUEST_CQBCP, - VBIC_QUEST_CEXBC, - VBIC_QUEST_GEQCB, - VBIC_QUEST_GCSUB, - VBIC_QUEST_GDSUB, - VBIC_QUEST_GEQBX, VBIC_QUEST_CBE, VBIC_QUEST_CBEX, VBIC_QUEST_CBC, VBIC_QUEST_CBCX, VBIC_QUEST_CBEP, VBIC_QUEST_CBCP, - VBIC_QUEST_POWER, + VBIC_QUEST_QBE, + VBIC_QUEST_QBC, }; /* model questions */ diff --git a/src/spicelib/devices/vbic/vbicload.c b/src/spicelib/devices/vbic/vbicload.c index 10052bdca..708d86c82 100644 --- a/src/spicelib/devices/vbic/vbicload.c +++ b/src/spicelib/devices/vbic/vbicload.c @@ -18,18 +18,6 @@ Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH #include "ngspice/sperror.h" #include "ngspice/devdefs.h" -int vbic_4T_it_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 *,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 vbic_4T_et_cf_fj( double *,double *,double *,double *,double *,double *,double *, double *,double *,double *,double *,double *,double *,double *, @@ -48,27 +36,9 @@ 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 *); -int vbic_4T_et_xf_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 *,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 *,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 VBICload(GENmodel *inModel, CKTcircuit *ckt) @@ -81,29 +51,27 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) double p[108] ,Vrth=0.0,Vbei,Vbex,Vbci,Vbep,Vbcp ,Vrcx,Vbcx,Vrci,Vrbx,Vrbi,Vre,Vrbp - ,Vrs,Vbe,Vbc,Vcei=0.0,Vcep=0.0,Ibe,Ibe_Vrth=0.0 - ,Ibe_Vbei,Ibex,Ibex_Vrth=0.0,Ibex_Vbex,Itzf=0.0,Itzf_Vrth=0.0,Itzf_Vbei=0.0 - ,Itzf_Vbci=0.0,Itzr,Itzr_Vrth=0.0,Itzr_Vbci,Itzr_Vbei,Ibc,Ibc_Vrth=0.0 - ,Ibc_Vbci,Ibc_Vbei,Ibep,Ibep_Vrth=0.0,Ibep_Vbep,Ircx,Ircx_Vrcx - ,Ircx_Vrth=0.0,Irci,Irci_Vrci,Irci_Vrth=0.0,Irci_Vbci,Irci_Vbcx,Irbx - ,Irbx_Vrbx,Irbx_Vrth=0.0,Irbi,Irbi_Vrbi,Irbi_Vrth=0.0,Irbi_Vbei,Irbi_Vbci - ,Ire,Ire_Vre,Ire_Vrth=0.0,Irbp,Irbp_Vrbp,Irbp_Vrth=0.0,Irbp_Vbep - ,Irbp_Vbci,Qbe,Qbe_Vrth=0.0,Qbe_Vbei,Qbe_Vbci,Qbex,Qbex_Vrth=0.0 - ,Qbex_Vbex,Qbc,Qbc_Vrth=0.0,Qbc_Vbci,Qbcx,Qbcx_Vrth=0.0,Qbcx_Vbcx - ,Qbep,Qbep_Vrth=0.0,Qbep_Vbep,Qbep_Vbci,Qbeo,Qbeo_Vbe,Qbco - ,Qbco_Vbc,Ibcp,Ibcp_Vrth=0.0,Ibcp_Vbcp,Iccp,Iccp_Vrth=0.0,Iccp_Vbep - ,Iccp_Vbci,Iccp_Vbcp,Irs,Irs_Vrs,Irs_Vrth=0.0,Qbcp,Qbcp_Vrth=0.0 - ,Qbcp_Vbcp,Irth,Irth_Vrth=0.0,Ith=0.0,Ith_Vrth=0.0,Ith_Vbei=0.0,Ith_Vbci=0.0 + ,Vrs,Vbe,Vbc,Vcei=0.0,Vcep=0.0,Ibe=0.0,Ibe_Vrth=0.0 + ,Ibe_Vbei=0.0,Ibex=0.0,Ibex_Vrth=0.0,Ibex_Vbex=0.0,Itzf=0.0,Itzf_Vrth=0.0,Itzf_Vbei=0.0 + ,Itzf_Vbci=0.0,Itzr=0.0,Itzr_Vrth=0.0,Itzr_Vbci=0.0,Itzr_Vbei=0.0,Ibc=0.0,Ibc_Vrth=0.0 + ,Ibc_Vbci=0.0,Ibc_Vbei=0.0,Ibep=0.0,Ibep_Vrth=0.0,Ibep_Vbep=0.0,Ircx,Ircx_Vrcx=0.0 + ,Ircx_Vrth=0.0,Irci=0.0,Irci_Vrci=0.0,Irci_Vrth=0.0,Irci_Vbci=0.0,Irci_Vbcx=0.0,Irbx + ,Irbx_Vrbx=0.0,Irbx_Vrth=0.0,Irbi=0.0,Irbi_Vrbi=0.0,Irbi_Vrth=0.0,Irbi_Vbei=0.0,Irbi_Vbci=0.0 + ,Ire,Ire_Vre=0.0,Ire_Vrth=0.0,Irbp=0.0,Irbp_Vrbp=0.0,Irbp_Vrth=0.0,Irbp_Vbep=0.0 + ,Irbp_Vbci=0.0,Qbe=0.0,Qbe_Vrth=0.0,Qbe_Vbei=0.0,Qbe_Vbci=0.0,Qbex=0.0,Qbex_Vrth=0.0 + ,Qbex_Vbex=0.0,Qbc=0.0,Qbc_Vrth=0.0,Qbc_Vbci=0.0,Qbcx=0.0,Qbcx_Vrth=0.0,Qbcx_Vbcx=0.0 + ,Qbep=0.0,Qbep_Vrth=0.0,Qbep_Vbep=0.0,Qbep_Vbci=0.0,Qbeo=0.0,Qbeo_Vbe=0.0,Qbco=0.0 + ,Qbco_Vbc=0.0,Ibcp=0.0,Ibcp_Vrth=0.0,Ibcp_Vbcp=0.0,Iccp=0.0,Iccp_Vrth=0.0,Iccp_Vbep=0.0 + ,Iccp_Vbci=0.0,Iccp_Vbcp=0.0,Irs=0.0,Irs_Vrs=0.0,Irs_Vrth=0.0,Qbcp=0.0,Qbcp_Vrth=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_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,SCALE; - //NQS - double Vrxf=0.0, Vcxf=0.0, Itxf=0.0, Itxf_Vrxf=0.0, Ibc_Vrxf=0.0, Ith_Vrxf=0.0, - Ixzf_Vrth=0.0, Ixxf_Vrxf=0.0, Qcxf=0.0, Qcxf_Vcxf=0.0, Flxf=0.0, Flxf_Vrxf; - double Vxf1xf2=0.0, Rxf1xf2=0.0, newmind, req, veq; + ,Qcth_Vrth=0.0 + ,Tf=0.0, Tf_Vbei=0.0, Tf_Vbci=0.0, Tf_Vrth=0.0 + ,SCALE; int iret; - double vce; + double Vce; #ifndef PREDICTOR double xfact; #endif @@ -119,9 +87,7 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) double delvbcp; double ibehat; double ibexhat; - double itzfhat=0.0; - double ixzfhat=0.0; - double itzrhat; + double icieihat; double ibchat; double ibephat; double ircihat; @@ -135,10 +101,16 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) int error; double gqbeo, cqbeo, gqbco, cqbco, gbcx, cbcx; double Icth, Icth_Vrth; - //NQS - double Ixzf=0.0,Ixxf=0.0; - double Ixzf_Vbei=0.0, Ixzf_Vbci=0.0; - double Icxf, Icxf_Vcxf; + double Iciei, Iciei_Vbei, Iciei_Vbci, Iciei_Vrth, Iciei_Vxf2; +//NQS + 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 Ixf2_Vxf1=0.0, Ixf2_Vbei=0.0, Ixf2_Vbci=0.0, Ixf2_Vrth=0.0; + double Ixf2_Vxf2=0.0, Ixf2_dTf=0.0; + double Itxf=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 delvxf2; /* loop through all the models */ for( ; model != NULL; model = VBICnextModel(model)) { @@ -156,7 +128,6 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) gqbco = 0.0; cqbco = 0.0; Icth = 0.0, Icth_Vrth = 0.0; - Icxf=0.0, Icxf_Vcxf=0.0; /* * model parameters */ @@ -203,15 +174,6 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) /* * initialization */ - if (here->VBIC_excessPhase) { - if(!(ckt->CKTmode & (MODEDC|MODEINITPRED))) { - if(ckt->CKTmode & MODEUIC && ckt->CKTmode & MODEINITTRAN) { - *(ckt->CKTstate0 + here->VBICindFlux) = here->VBICindInduct; // no init current available - } else { - *(ckt->CKTstate0 + here->VBICindFlux) = here->VBICindInduct * *(ckt->CKTrhsOld + here->VBICbrEq); - } - } - } icheck=1; if(ckt->CKTmode & MODEINITSMSIG) { Vbe = model->VBICtype*( @@ -243,8 +205,8 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTrhsOld+here->VBICsubsSINode)); if (here->VBIC_selfheat) Vrth = *(ckt->CKTstate0 + here->VBICvrth); - Rxf1xf2 = 0.0; - Vxf1xf2 = 0.0; + Vxf1 = *(ckt->CKTrhsOld + here->VBICxf1Node); + Vxf2 = *(ckt->CKTrhsOld + here->VBICxf2Node); } else if(ckt->CKTmode & MODEINITTRAN) { Vbe = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- @@ -275,22 +237,20 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTrhsOld+here->VBICsubsSINode)); if (here->VBIC_selfheat) Vrth = *(ckt->CKTstate1 + here->VBICvrth); - Rxf1xf2 = 0.0; - Vxf1xf2 = 0.0; + Vxf1 = *(ckt->CKTrhsOld + here->VBICxf1Node); + Vxf2 = *(ckt->CKTrhsOld + here->VBICxf2Node); } else if((ckt->CKTmode & MODEINITJCT) && (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)){ Vbe=model->VBICtype*here->VBICicVBE; Vbei=Vbex=Vbe; - vce=model->VBICtype*here->VBICicVCE; - Vbc=Vbe-vce; + Vce=model->VBICtype*here->VBICicVCE; + Vbc=Vbe-Vce; Vbci=Vbcx=Vbc; Vbep=Vbcp=0.0; Vrci=Vrbi=Vrbp=0.0; Vrcx=Vrbx=Vre=Vrs=0.0; Vrth = 0.0, Icth = 0.0, Icth_Vrth = 0.0; - Icxf=0.0, Icxf_Vcxf=0.0; - Rxf1xf2 = 0.0; - Vxf1xf2 = 0.0; + Vxf1=Vxf2=0.0; } else if((ckt->CKTmode & MODEINITJCT) && (here->VBICoff==0)) { Vbe=Vbei=Vbex=model->VBICtype*here->VBICtVcrit; Vbc=Vbcx=Vbep=0.0; @@ -299,9 +259,7 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) Vrci=Vrbi=Vrbp=0.0; Vrcx=Vrbx=Vre=Vrs=0.0; Vrth = 0.0, Icth = 0.0, Icth_Vrth = 0.0; - Icxf=0.0, Icxf_Vcxf=0.0; - Rxf1xf2 = 0.0; - Vxf1xf2 = 0.0; + Vxf1=Vxf2=0.0; } else if((ckt->CKTmode & MODEINITJCT) || ( (ckt->CKTmode & MODEINITFIX) && (here->VBICoff!=0))) { Vbe=0.0; @@ -312,9 +270,7 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) Vrci=Vrbi=Vrbp=0.0; Vrcx=Vrbx=Vre=Vrs=0.0; Vrth = 0.0, Icth = 0.0, Icth_Vrth = 0.0; - Icxf=0.0, Icxf_Vcxf=0.0; - Rxf1xf2 = 0.0; - Vxf1xf2 = 0.0; + Vxf1=Vxf2=0.0; } else { #ifndef PREDICTOR if(ckt->CKTmode & MODEINITPRED) { @@ -343,6 +299,9 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICvrth) = *(ckt->CKTstate1 + here->VBICvrth); } + Vxf2 = (1+xfact) * *(ckt->CKTstate1 + here->VBICvxf2)- + xfact * *(ckt->CKTstate2 + here->VBICvxf2); + *(ckt->CKTstate0 + here->VBICvbei) = *(ckt->CKTstate1 + here->VBICvbei); *(ckt->CKTstate0 + here->VBICvbex) = @@ -369,20 +328,6 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate1 + here->VBICibex); *(ckt->CKTstate0 + here->VBICibex_Vbex) = *(ckt->CKTstate1 + here->VBICibex_Vbex); - if (!here->VBIC_excessPhase) { - *(ckt->CKTstate0 + here->VBICitzf) = - *(ckt->CKTstate1 + here->VBICitzf); - *(ckt->CKTstate0 + here->VBICitzf_Vbei) = - *(ckt->CKTstate1 + here->VBICitzf_Vbei); - *(ckt->CKTstate0 + here->VBICitzf_Vbci) = - *(ckt->CKTstate1 + here->VBICitzf_Vbci); - } - *(ckt->CKTstate0 + here->VBICitzr) = - *(ckt->CKTstate1 + here->VBICitzr); - *(ckt->CKTstate0 + here->VBICitzr_Vbei) = - *(ckt->CKTstate1 + here->VBICitzr_Vbei); - *(ckt->CKTstate0 + here->VBICitzr_Vbci) = - *(ckt->CKTstate1 + here->VBICitzr_Vbci); *(ckt->CKTstate0 + here->VBICibc) = *(ckt->CKTstate1 + here->VBICibc); *(ckt->CKTstate0 + here->VBICibc_Vbci) = @@ -444,23 +389,34 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) if (here->VBIC_selfheat) *(ckt->CKTstate0 + here->VBICqcth) = *(ckt->CKTstate1 + here->VBICqcth); + *(ckt->CKTstate0 + here->VBICiciei) = + *(ckt->CKTstate1 + here->VBICiciei); + *(ckt->CKTstate0 + here->VBICiciei_Vbei) = + *(ckt->CKTstate1 + here->VBICiciei_Vbei); + *(ckt->CKTstate0 + here->VBICiciei_Vbci) = + *(ckt->CKTstate1 + here->VBICiciei_Vbci); + *(ckt->CKTstate0+here->VBICiciei_Vxf2)=*(ckt->CKTstate1+here->VBICiciei_Vxf2); if (here->VBIC_excessPhase) { - *(ckt->CKTstate0+here->VBICqcxf)=*(ckt->CKTstate1+here->VBICqcxf); - *(ckt->CKTstate0+here->VBICcqcxf)=*(ckt->CKTstate1+here->VBICcqcxf); - *(ckt->CKTstate0+here->VBICgqcxf)=*(ckt->CKTstate1+here->VBICgqcxf); - *(ckt->CKTstate0+here->VBICibc_Vrxf)=*(ckt->CKTstate1+here->VBICibc_Vrxf); - *(ckt->CKTstate0+here->VBICixzf)=*(ckt->CKTstate1+here->VBICixzf); - *(ckt->CKTstate0+here->VBICixzf_Vbei)=*(ckt->CKTstate1+here->VBICixzf_Vbei); - *(ckt->CKTstate0+here->VBICixzf_Vbci)=*(ckt->CKTstate1+here->VBICixzf_Vbci); - *(ckt->CKTstate0+here->VBICixxf)=*(ckt->CKTstate1+here->VBICixxf); - *(ckt->CKTstate0+here->VBICixxf_Vrxf)=*(ckt->CKTstate1+here->VBICixxf_Vrxf); - *(ckt->CKTstate0+here->VBICitxf)=*(ckt->CKTstate1+here->VBICitxf); - *(ckt->CKTstate0+here->VBICitxf_Vrxf)=*(ckt->CKTstate1+here->VBICitxf_Vrxf); + *(ckt->CKTstate0+here->VBICvxf1)=*(ckt->CKTstate1+here->VBICvxf1); + *(ckt->CKTstate0+here->VBICqxf1)=*(ckt->CKTstate1+here->VBICqxf1); + *(ckt->CKTstate0+here->VBICcqxf1)=*(ckt->CKTstate1+here->VBICcqxf1); + *(ckt->CKTstate0+here->VBICgqxf1)=*(ckt->CKTstate1+here->VBICgqxf1); + *(ckt->CKTstate0+here->VBICixf1_Vbei)=*(ckt->CKTstate1+here->VBICixf1_Vbei); + *(ckt->CKTstate0+here->VBICixf1_Vbci)=*(ckt->CKTstate1+here->VBICixf1_Vbci); + *(ckt->CKTstate0+here->VBICixf1_Vxf2)=*(ckt->CKTstate1+here->VBICixf1_Vxf2); + *(ckt->CKTstate0+here->VBICixf1_Vxf1)=*(ckt->CKTstate1+here->VBICixf1_Vxf1); + *(ckt->CKTstate0+here->VBICvxf2)=*(ckt->CKTstate1+here->VBICvxf2); + *(ckt->CKTstate0+here->VBICqxf2)=*(ckt->CKTstate1+here->VBICqxf2); + *(ckt->CKTstate0+here->VBICcqxf2)=*(ckt->CKTstate1+here->VBICcqxf2); + *(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_Vxf2)=*(ckt->CKTstate1+here->VBICixf2_Vxf2); if (here->VBIC_selfheat) { - *(ckt->CKTstate0+here->VBICixzf_Vrth)=*(ckt->CKTstate1+here->VBICixzf_Vrth); - *(ckt->CKTstate0+here->VBICith_Vrxf)=*(ckt->CKTstate1+here->VBICith_Vrxf); + *(ckt->CKTstate0+here->VBICixf1_Vrth)=*(ckt->CKTstate1+here->VBICixf1_Vrth); + *(ckt->CKTstate0+here->VBICixf2_Vrth)=*(ckt->CKTstate1+here->VBICixf2_Vrth); } - *(ckt->CKTstate0+here->VBICindFlux)=*(ckt->CKTstate1+here->VBICindFlux); } } else { #endif /* PREDICTOR */ @@ -497,11 +453,9 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) if (here->VBIC_selfheat) Vrth = *(ckt->CKTrhsOld + here->VBICtempNode); if (here->VBIC_excessPhase) { - Vrxf = *(ckt->CKTrhsOld + here->VBICxf2Node); - if (ckt->CKTmode & MODEINITTRAN) { - *(ckt->CKTstate1 + here->VBICindFlux) = - *(ckt->CKTstate0 + here->VBICindFlux); - } + // not needed because convergence in NQS network is not checked here + //Vxf1 = *(ckt->CKTrhsOld + here->VBICxf1Node); + Vxf2 = *(ckt->CKTrhsOld + here->VBICxf2Node); } #ifndef PREDICTOR } @@ -515,6 +469,7 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) delvrbi = Vrbi - *(ckt->CKTstate0 + here->VBICvrbi); delvrbp = Vrbp - *(ckt->CKTstate0 + here->VBICvrbp); delvbcp = Vbcp - *(ckt->CKTstate0 + here->VBICvbcp); + delvxf2 = Vxf2 - *(ckt->CKTstate0 + here->VBICvxf2); Vbe = model->VBICtype*( *(ckt->CKTrhsOld+here->VBICbaseNode)- @@ -536,24 +491,17 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTrhsOld+here->VBICsubsSINode)); if (here->VBIC_selfheat) Vrth = *(ckt->CKTrhsOld + here->VBICtempNode); - if (here->VBIC_excessPhase) - Vrxf = *(ckt->CKTrhsOld + here->VBICxf2Node); + Vxf1 = *(ckt->CKTrhsOld + here->VBICxf1Node); + Vxf2 = *(ckt->CKTrhsOld + here->VBICxf2Node); ibehat = *(ckt->CKTstate0 + here->VBICibe) + *(ckt->CKTstate0 + here->VBICibe_Vbei)*delvbei; ibexhat = *(ckt->CKTstate0 + here->VBICibex) + *(ckt->CKTstate0 + here->VBICibex_Vbex)*delvbex; - if (!here->VBIC_excessPhase) { - itzfhat = *(ckt->CKTstate0 + here->VBICitzf) + - *(ckt->CKTstate0 + here->VBICitzf_Vbei)*delvbei + - *(ckt->CKTstate0 + here->VBICitzf_Vbci)*delvbci; - } else { - ixzfhat = *(ckt->CKTstate0 + here->VBICixzf) + - *(ckt->CKTstate0 + here->VBICixzf_Vbei)*delvbei + - *(ckt->CKTstate0 + here->VBICixzf_Vbci)*delvbci; - } - itzrhat = *(ckt->CKTstate0 + here->VBICitzr) + - *(ckt->CKTstate0 + here->VBICitzr_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICitzr_Vbci)*delvbci; + icieihat = *(ckt->CKTstate0 + here->VBICiciei) + + *(ckt->CKTstate0 + here->VBICiciei_Vbei)*delvbei + + *(ckt->CKTstate0 + here->VBICiciei_Vxf2)*delvxf2 + + *(ckt->CKTstate0 + here->VBICiciei_Vbci)*delvbci; ibchat = *(ckt->CKTstate0 + here->VBICibc) + *(ckt->CKTstate0 + here->VBICibc_Vbei)*delvbei + *(ckt->CKTstate0 + here->VBICibc_Vbci)*delvbci; ibephat = *(ckt->CKTstate0 + here->VBICibep) + @@ -612,19 +560,9 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) ckt->CKTreltol* MAX(fabs(ibexhat), fabs(*(ckt->CKTstate0 + here->VBICibex)))+ ckt->CKTabstol) ) - if (!here->VBIC_excessPhase) - if( (fabs(itzfhat-*(ckt->CKTstate0 + here->VBICitzf)) < - ckt->CKTreltol* MAX(fabs(itzfhat), - fabs(*(ckt->CKTstate0 + here->VBICitzf)))+ - ckt->CKTabstol) ) - if (here->VBIC_excessPhase) - if( (fabs(ixzfhat-*(ckt->CKTstate0 + here->VBICixzf)) < - ckt->CKTreltol* MAX(fabs(ixzfhat), - fabs(*(ckt->CKTstate0 + here->VBICixzf)))+ - ckt->CKTabstol) ) - if( (fabs(itzrhat-*(ckt->CKTstate0 + here->VBICitzr)) < - ckt->CKTreltol* MAX(fabs(itzrhat), - fabs(*(ckt->CKTstate0 + here->VBICitzr)))+ + if( (fabs(icieihat-*(ckt->CKTstate0 + here->VBICiciei)) < + ckt->CKTreltol* MAX(fabs(icieihat), + fabs(*(ckt->CKTstate0 + here->VBICiciei)))+ ckt->CKTabstol) ) if( (fabs(ibchat-*(ckt->CKTstate0 + here->VBICibc)) < ckt->CKTreltol* MAX(fabs(ibchat), @@ -666,23 +604,21 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) Vrbi = *(ckt->CKTstate0 + here->VBICvrbi); Vrbp = *(ckt->CKTstate0 + here->VBICvrbp); Vbcp = *(ckt->CKTstate0 + here->VBICvbcp); + Vxf1 = *(ckt->CKTstate0 + here->VBICvxf1); + Vxf2 = *(ckt->CKTstate0 + here->VBICvxf2); + Ibe = *(ckt->CKTstate0 + here->VBICibe); Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei); Ibex = *(ckt->CKTstate0 + here->VBICibex); Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex); - if (!here->VBIC_excessPhase) { - Itzf = *(ckt->CKTstate0 + here->VBICitzf); - Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei); - Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci); - Itzf_Vrth = *(ckt->CKTstate0 + here->VBICitzf_Vrth); - } - Itzr = *(ckt->CKTstate0 + here->VBICitzr); - Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci); - Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei); + Iciei = *(ckt->CKTstate0 + here->VBICiciei); + Iciei_Vbei = *(ckt->CKTstate0 + here->VBICiciei_Vbei); + Iciei_Vbci = *(ckt->CKTstate0 + here->VBICiciei_Vbci); + Iciei_Vrth = *(ckt->CKTstate0 + here->VBICiciei_Vrth); + Iciei_Vxf2 = *(ckt->CKTstate0 + here->VBICiciei_Vxf2); Ibc = *(ckt->CKTstate0 + here->VBICibc); Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci); Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei); - Ibc_Vrxf = *(ckt->CKTstate0 + here->VBICibc_Vrxf); Ibep = *(ckt->CKTstate0 + here->VBICibep); Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep); Irci = *(ckt->CKTstate0 + here->VBICirci); @@ -710,23 +646,18 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs); Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre); if (here->VBIC_excessPhase) { - Itxf = *(ckt->CKTstate0 + here->VBICitxf); - Itxf_Vrxf = *(ckt->CKTstate0 + here->VBICitxf_Vrxf); - Ixxf = *(ckt->CKTstate0 + here->VBICixxf); - Ixxf_Vrxf = *(ckt->CKTstate0 + here->VBICixxf_Vrxf); - Qcxf = *(ckt->CKTstate0 + here->VBICqcxf); - Icxf = *(ckt->CKTstate0 + here->VBICcqcxf); - Icxf_Vcxf = *(ckt->CKTstate0 + here->VBICgqcxf); - Ibc_Vrxf = *(ckt->CKTstate0 + here->VBICibc_Vrxf); - Ixzf = *(ckt->CKTstate0 + here->VBICixzf); - Ixzf_Vbei = *(ckt->CKTstate0 + here->VBICixzf_Vbei); - Ixzf_Vbci = *(ckt->CKTstate0 + here->VBICixzf_Vbci); - Ixzf_Vrth = *(ckt->CKTstate0 + here->VBICixzf_Vrth); - if (here->VBIC_selfheat) { - Ixzf_Vrth = *(ckt->CKTstate0 + here->VBICixzf_Vrth); - Ith_Vrxf = *(ckt->CKTstate0 + here->VBICith_Vrxf); - } - Flxf = *(ckt->CKTstate0 + here->VBICindFlux); + Ixf1 = *(ckt->CKTstate0 + here->VBICixf1); + Ixf1_Vbei = *(ckt->CKTstate0 + here->VBICixf1_Vbei); + Ixf1_Vbci = *(ckt->CKTstate0 + here->VBICixf1_Vbci); + Ixf1_Vxf2 = *(ckt->CKTstate0 + here->VBICixf1_Vxf2); + Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1); + Ixf1_Vrth = *(ckt->CKTstate0 + here->VBICixf1_Vrth); + 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_Vxf2 = *(ckt->CKTstate0 + here->VBICixf2_Vxf2); + Ixf2_Vrth = *(ckt->CKTstate0 + here->VBICixf2_Vrth); } goto load; } @@ -758,61 +689,91 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) */ Vcei = Vbei - Vbci; Vcep = Vbep - Vbcp; - if ((!here->VBIC_selfheat) && (!here->VBIC_excessPhase)) { - iret = vbic_4T_it_cf_fj(p - ,&Vbei, &Vbex, &Vbci, &Vbep, &Vbcp, &Vrcx - ,&Vbcx, &Vrci, &Vrbx, &Vrbi, &Vre, &Vrbp, &Vrs - ,&Vbe, &Vbc, &Ibe, &Ibe_Vbei, &Ibex, &Ibex_Vbex, &Itzf - ,&Itzf_Vbei, &Itzf_Vbci, &Itzr, &Itzr_Vbci, &Itzr_Vbei, &Ibc, &Ibc_Vbci - ,&Ibc_Vbei, &Ibep, &Ibep_Vbep, &Ircx, &Ircx_Vrcx, &Irci, &Irci_Vrci - ,&Irci_Vbci, &Irci_Vbcx, &Irbx, &Irbx_Vrbx, &Irbi, &Irbi_Vrbi, &Irbi_Vbei - ,&Irbi_Vbci, &Ire, &Ire_Vre, &Irbp, &Irbp_Vrbp, &Irbp_Vbep, &Irbp_Vbci - ,&Qbe, &Qbe_Vbei, &Qbe_Vbci, &Qbex, &Qbex_Vbex, &Qbc, &Qbc_Vbci - ,&Qbcx, &Qbcx_Vbcx, &Qbep, &Qbep_Vbep, &Qbep_Vbci, &Qbeo, &Qbeo_Vbe - ,&Qbco, &Qbco_Vbc, &Ibcp, &Ibcp_Vbcp, &Iccp, &Iccp_Vbep, &Iccp_Vbci - ,&Iccp_Vbcp, &Irs, &Irs_Vrs, &Qbcp, &Qbcp_Vbcp, &SCALE); - } else if ((here->VBIC_selfheat) && (!here->VBIC_excessPhase)) { - iret = vbic_4T_et_cf_fj(p - ,&Vrth, &Vbei, &Vbex, &Vbci, &Vbep, &Vbcp - ,&Vrcx, &Vbcx, &Vrci, &Vrbx, &Vrbi, &Vre, &Vrbp - ,&Vrs, &Vbe, &Vbc, &Vcei, &Vcep, &Ibe, &Ibe_Vrth - ,&Ibe_Vbei, &Ibex, &Ibex_Vrth, &Ibex_Vbex, &Itzf, &Itzf_Vrth, &Itzf_Vbei - ,&Itzf_Vbci, &Itzr, &Itzr_Vrth, &Itzr_Vbci, &Itzr_Vbei, &Ibc, &Ibc_Vrth - ,&Ibc_Vbci, &Ibc_Vbei, &Ibep, &Ibep_Vrth, &Ibep_Vbep, &Ircx, &Ircx_Vrcx - ,&Ircx_Vrth, &Irci, &Irci_Vrci, &Irci_Vrth, &Irci_Vbci, &Irci_Vbcx, &Irbx - ,&Irbx_Vrbx, &Irbx_Vrth, &Irbi, &Irbi_Vrbi, &Irbi_Vrth, &Irbi_Vbei, &Irbi_Vbci - ,&Ire, &Ire_Vre, &Ire_Vrth, &Irbp, &Irbp_Vrbp, &Irbp_Vrth, &Irbp_Vbep - ,&Irbp_Vbci, &Qbe, &Qbe_Vrth, &Qbe_Vbei, &Qbe_Vbci, &Qbex, &Qbex_Vrth - ,&Qbex_Vbex, &Qbc, &Qbc_Vrth, &Qbc_Vbci, &Qbcx, &Qbcx_Vrth, &Qbcx_Vbcx - ,&Qbep, &Qbep_Vrth, &Qbep_Vbep, &Qbep_Vbci, &Qbeo, &Qbeo_Vbe, &Qbco - ,&Qbco_Vbc, &Ibcp, &Ibcp_Vrth, &Ibcp_Vbcp, &Iccp, &Iccp_Vrth, &Iccp_Vbep - ,&Iccp_Vbci, &Iccp_Vbcp, &Irs, &Irs_Vrs, &Irs_Vrth, &Qbcp, &Qbcp_Vrth - ,&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_Vrci, &Ith_Vbcx, &Ith_Vrbx, &Ith_Vrbi, &Ith_Vre, &Ith_Vrbp, &Qcth - ,&Qcth_Vrth, &SCALE); + iret = vbic_4T_et_cf_fj(p + ,&Vrth, &Vbei, &Vbex, &Vbci, &Vbep, &Vbcp + ,&Vrcx, &Vbcx, &Vrci, &Vrbx, &Vrbi, &Vre, &Vrbp + ,&Vrs, &Vbe, &Vbc, &Vcei, &Vcep, &Ibe, &Ibe_Vrth + ,&Ibe_Vbei, &Ibex, &Ibex_Vrth, &Ibex_Vbex, &Itzf, &Itzf_Vrth, &Itzf_Vbei + ,&Itzf_Vbci, &Itzr, &Itzr_Vrth, &Itzr_Vbci, &Itzr_Vbei, &Ibc, &Ibc_Vrth + ,&Ibc_Vbci, &Ibc_Vbei, &Ibep, &Ibep_Vrth, &Ibep_Vbep, &Ircx, &Ircx_Vrcx + ,&Ircx_Vrth, &Irci, &Irci_Vrci, &Irci_Vrth, &Irci_Vbci, &Irci_Vbcx, &Irbx + ,&Irbx_Vrbx, &Irbx_Vrth, &Irbi, &Irbi_Vrbi, &Irbi_Vrth, &Irbi_Vbei, &Irbi_Vbci + ,&Ire, &Ire_Vre, &Ire_Vrth, &Irbp, &Irbp_Vrbp, &Irbp_Vrth, &Irbp_Vbep + ,&Irbp_Vbci, &Qbe, &Qbe_Vrth, &Qbe_Vbei, &Qbe_Vbci, &Qbex, &Qbex_Vrth + ,&Qbex_Vbex, &Qbc, &Qbc_Vrth, &Qbc_Vbci, &Qbcx, &Qbcx_Vrth, &Qbcx_Vbcx + ,&Qbep, &Qbep_Vrth, &Qbep_Vbep, &Qbep_Vbci, &Qbeo, &Qbeo_Vbe, &Qbco + ,&Qbco_Vbc, &Ibcp, &Ibcp_Vrth, &Ibcp_Vbcp, &Iccp, &Iccp_Vrth, &Iccp_Vbep + ,&Iccp_Vbci, &Iccp_Vbcp, &Irs, &Irs_Vrs, &Irs_Vrth, &Qbcp, &Qbcp_Vrth + ,&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_Vrci, &Ith_Vbcx, &Ith_Vrbx, &Ith_Vrbi, &Ith_Vre, &Ith_Vrbp, &Qcth, &Qcth_Vrth + ,&Tf, &Tf_Vbei, &Tf_Vbci, &Tf_Vrth + ,&SCALE); + + here->VBICpower = Ith; + + // Excess Phase calculation + if (here->VBIC_excessPhase) { + Ixf1 = (Vxf2-Itzf)/Tf*model->VBICdelayTimeF; + Ixf1_Vxf1 = 0.0; + Ixf1_Vxf2 = 1.0/Tf*model->VBICdelayTimeF; + Ixf1_ditf = -Ixf1_Vxf2; + Ixf1_dTf = -Ixf1/Tf; + Ixf1_Vbei = Ixf1_ditf*Itzf_Vbei + Ixf1_dTf*Tf_Vbei; + Ixf1_Vbci = Ixf1_ditf*Itzf_Vbci + Ixf1_dTf*Tf_Vbci; + Ixf1_Vrth = Ixf1_ditf*Itzf_Vrth + Ixf1_dTf*Tf_Vrth; + + Ixf2 = (Vxf2-Vxf1)/Tf*model->VBICdelayTimeF; + Ixf2_Vxf2 = 1.0/Tf*model->VBICdelayTimeF; + Ixf2_Vxf1 = -Ixf2_Vxf2; + 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_Vxf1 = model->VBICdelayTimeF; + Qxf2 = model->VBICdelayTimeF*Vxf2/3; + Qxf2_Vxf2 = model->VBICdelayTimeF/3; + + Itxf = Vxf2; + Itxf_Vbei = 0; + Itxf_Vbci = 0; + Itxf_Vrth = 0; + Itxf_Vxf2 = 1.0; } else { - iret = vbic_4T_et_xf_fj(p - ,&Vrth,&Vbei,&Vbex,&Vbci,&Vbep,&Vbcp - ,&Vrxf,&Vrcx,&Vbcx,&Vrci,&Vrbx,&Vrbi,&Vre - ,&Vrbp,&Vrs,&Vbe,&Vbc,&Vcei,&Vcep,&Vcxf - ,&Ibe,&Ibe_Vrth,&Ibe_Vbei,&Ibex,&Ibex_Vrth,&Ibex_Vbex,&Itxf - ,&Itxf_Vrxf,&Itzr,&Itzr_Vrth,&Itzr_Vbci,&Itzr_Vbei,&Ibc,&Ibc_Vrth - ,&Ibc_Vbci,&Ibc_Vrxf,&Ibc_Vbei,&Ibep,&Ibep_Vrth,&Ibep_Vbep,&Ircx - ,&Ircx_Vrcx,&Ircx_Vrth,&Irci,&Irci_Vrci,&Irci_Vrth,&Irci_Vbci,&Irci_Vbcx - ,&Irbx,&Irbx_Vrbx,&Irbx_Vrth,&Irbi,&Irbi_Vrbi,&Irbi_Vrth,&Irbi_Vbei - ,&Irbi_Vbci,&Ire,&Ire_Vre,&Ire_Vrth,&Irbp,&Irbp_Vrbp,&Irbp_Vrth - ,&Irbp_Vbep,&Irbp_Vbci,&Qbe,&Qbe_Vrth,&Qbe_Vbei,&Qbe_Vbci,&Qbex - ,&Qbex_Vrth,&Qbex_Vbex,&Qbc,&Qbc_Vrth,&Qbc_Vbci,&Qbcx,&Qbcx_Vrth - ,&Qbcx_Vbcx,&Qbep,&Qbep_Vrth,&Qbep_Vbep,&Qbep_Vbci,&Qbeo,&Qbeo_Vbe - ,&Qbco,&Qbco_Vbc,&Ibcp,&Ibcp_Vrth,&Ibcp_Vbcp,&Iccp,&Iccp_Vrth - ,&Iccp_Vbep,&Iccp_Vbci,&Iccp_Vbcp,&Irs,&Irs_Vrs,&Irs_Vrth,&Qbcp - ,&Qbcp_Vrth,&Qbcp_Vbcp,&Irth,&Irth_Vrth,&Ith,&Ith_Vrth,&Ith_Vbei - ,&Ith_Vbci,&Ith_Vrxf,&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,&Ixzf,&Ixzf_Vrth,&Ixzf_Vbei,&Ixzf_Vbci - ,&Ixxf,&Ixxf_Vrxf,&Qcxf,&Qcxf_Vcxf,&Flxf,&Flxf_Vrxf,&SCALE); + Ixf1 = Vxf1; + Ixf1_Vxf1 = 1.0; + Ixf1_Vxf2 = 0; + Ixf1_Vbei = 0; + Ixf1_Vbci = 0; + Ixf1_Vrth = 0; + + Ixf2 = Vxf2; + Ixf2_Vxf2 = 1.0; + Ixf2_Vxf1 = 0; + Ixf2_Vbei = 0; + Ixf2_Vbci = 0; + Ixf2_Vrth = 0; + + Qxf1 = 0; + Qxf1_Vxf1 = 0; + Qxf2 = 0; + Qxf2_Vxf2 = 0; + + Itxf = Itzf; + Itxf_Vbei = Itzf_Vbei; + Itxf_Vbci = Itzf_Vbci; + Itxf_Vrth = Itzf_Vrth; + Itxf_Vxf2 = 0; } + + Iciei = Itxf - Itzr; + Iciei_Vbei = Itxf_Vbei - Itzr_Vbei; + Iciei_Vbci = Itxf_Vbci - Itzr_Vbci; + Iciei_Vrth = Itxf_Vrth - Itzr_Vrth; + Iciei_Vxf2 = Itxf_Vxf2; + Ibe += ckt->CKTgmin*Vbei; Ibe_Vbei += ckt->CKTgmin; Ibex += ckt->CKTgmin*Vbex; @@ -849,8 +810,10 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICqcth) = Qcth; } if (here->VBIC_excessPhase) { - *(ckt->CKTstate0 + here->VBICqcxf) = Qcxf; - *(ckt->CKTstate0 + here->VBICindFlux) = Flxf; + *(ckt->CKTstate0 + here->VBICqxf1) = Qxf1; + *(ckt->CKTstate0 + here->VBICcqxf1) = Qxf1_Vxf1; + *(ckt->CKTstate0 + here->VBICqxf2) = Qxf2; + *(ckt->CKTstate0 + here->VBICcqxf2) = Qxf2_Vxf2; } here->VBICcapbe = Qbe_Vbei; @@ -878,6 +841,8 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICcqbeo) = Qbeo_Vbe; *(ckt->CKTstate0 + here->VBICcqbco) = Qbco_Vbc; *(ckt->CKTstate0 + here->VBICcqbcp) = Qbcp_Vbcp; + *(ckt->CKTstate0 + here->VBICcqxf1) = Qxf1_Vxf1; + *(ckt->CKTstate0 + here->VBICcqxf2) = Qxf2_Vxf2; if (here->VBIC_selfheat) { here->VBICcapcth = Qcth_Vrth; here->VBICcapqbeth = Qbe_Vrth; @@ -887,9 +852,6 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) here->VBICcapqbepth = Qbep_Vrth; here->VBICcapqbcpth = Qbcp_Vrth; } - if (here->VBIC_excessPhase) { - here->VBICcapQcxf = Qcxf_Vcxf; - } continue; /* go to 1000 */ } /* @@ -917,10 +879,10 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate1 + here->VBICqcth) = *(ckt->CKTstate0 + here->VBICqcth) ; if (here->VBIC_excessPhase) { - *(ckt->CKTstate1 + here->VBICqcxf) = - *(ckt->CKTstate0 + here->VBICqcxf) ; - *(ckt->CKTstate1 + here->VBICindFlux) = - *(ckt->CKTstate0 + here->VBICindFlux); + *(ckt->CKTstate1 + here->VBICqxf1) = + *(ckt->CKTstate0 + here->VBICqxf1) ; + *(ckt->CKTstate1 + here->VBICqxf2) = + *(ckt->CKTstate0 + here->VBICqxf2) ; } } error = NIintegrate(ckt,&geq,&ceq,Qbe_Vbei,here->VBICqbe); @@ -961,16 +923,16 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) Icth = *(ckt->CKTstate0 + here->VBICcqcth); } if (here->VBIC_excessPhase) { - error = NIintegrate(ckt,&geq,&ceq,Qcxf_Vcxf,here->VBICqcxf); + //Qxf1 + error = NIintegrate(ckt,&geq,&ceq,Qxf1_Vxf1,here->VBICqxf1); if(error) return(error); - Icxf_Vcxf = geq; - Icxf = *(ckt->CKTstate0 + here->VBICcqcxf); - - newmind = here->VBICindInduct/here->VBICm; - error = NIintegrate(ckt,&req,&veq,newmind,here->VBICindFlux); + Ixf1_Vxf1 += geq; + Ixf1 += *(ckt->CKTstate0 + here->VBICcqxf1); + //Qxf2 + error = NIintegrate(ckt,&geq,&ceq,Qxf2_Vxf2,here->VBICqxf2); if(error) return(error); - Rxf1xf2 = req; - Vxf1xf2 = *(ckt->CKTstate0 + here->VBICindVolt); + Ixf2_Vxf2 += geq; + Ixf2 += *(ckt->CKTstate0 + here->VBICcqxf2); } if(ckt->CKTmode & MODEINITTRAN) { @@ -990,10 +952,10 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate1 + here->VBICcqcth) = *(ckt->CKTstate0 + here->VBICcqcth); if (here->VBIC_excessPhase) { - *(ckt->CKTstate1 + here->VBICcqcxf) = - *(ckt->CKTstate0 + here->VBICcqcxf); - *(ckt->CKTstate1 + here->VBICindVolt) = - *(ckt->CKTstate0 + here->VBICindVolt); + *(ckt->CKTstate1 + here->VBICcqxf1) = + *(ckt->CKTstate0 + here->VBICcqxf1); + *(ckt->CKTstate1 + here->VBICcqxf2) = + *(ckt->CKTstate0 + here->VBICcqxf2); } } } @@ -1035,20 +997,20 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICvrbi) = Vrbi; *(ckt->CKTstate0 + here->VBICvrbp) = Vrbp; *(ckt->CKTstate0 + here->VBICvbcp) = Vbcp; + if (here->VBIC_excessPhase) { + *(ckt->CKTstate0 + here->VBICvxf1) = Vxf1; + *(ckt->CKTstate0 + here->VBICvxf2) = Vxf2; + } *(ckt->CKTstate0 + here->VBICibe) = Ibe; *(ckt->CKTstate0 + here->VBICibe_Vbei) = Ibe_Vbei; *(ckt->CKTstate0 + here->VBICibex) = Ibex; *(ckt->CKTstate0 + here->VBICibex_Vbex) = Ibex_Vbex; - if (!here->VBIC_excessPhase) { - *(ckt->CKTstate0 + here->VBICitzf) = Itzf; - *(ckt->CKTstate0 + here->VBICitzf_Vbei) = Itzf_Vbei; - *(ckt->CKTstate0 + here->VBICitzf_Vbci) = Itzf_Vbci; - *(ckt->CKTstate0 + here->VBICitzf_Vrth) = Itzf_Vrth; - } - *(ckt->CKTstate0 + here->VBICitzr) = Itzr; - *(ckt->CKTstate0 + here->VBICitzr_Vbci) = Itzr_Vbci; - *(ckt->CKTstate0 + here->VBICitzr_Vbei) = Itzr_Vbei; + *(ckt->CKTstate0 + here->VBICiciei) = Iciei; + *(ckt->CKTstate0 + here->VBICiciei_Vbei) = Iciei_Vbei; + *(ckt->CKTstate0 + here->VBICiciei_Vbci) = Iciei_Vbci; + *(ckt->CKTstate0 + here->VBICiciei_Vrth) = Iciei_Vrth; + *(ckt->CKTstate0 + here->VBICiciei_Vxf2) = Iciei_Vxf2; *(ckt->CKTstate0 + here->VBICibc) = Ibc; *(ckt->CKTstate0 + here->VBICibc_Vbci) = Ibc_Vbci; *(ckt->CKTstate0 + here->VBICibc_Vbei) = Ibc_Vbei; @@ -1078,6 +1040,21 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICirbx_Vrbx) = Irbx_Vrbx; *(ckt->CKTstate0 + here->VBICirs_Vrs) = Irs_Vrs; *(ckt->CKTstate0 + here->VBICire_Vre) = Ire_Vre; + + *(ckt->CKTstate0 + here->VBICixf1) = Ixf1; + *(ckt->CKTstate0 + here->VBICixf1_Vbei) = Ixf1_Vbei; + *(ckt->CKTstate0 + here->VBICixf1_Vbci) = Ixf1_Vbci; + *(ckt->CKTstate0 + here->VBICixf1_Vxf2) = Ixf1_Vxf2; + *(ckt->CKTstate0 + here->VBICixf1_Vxf1) = Ixf1_Vxf1; + *(ckt->CKTstate0 + here->VBICixf1_Vrth) = Ixf1_Vrth; + + *(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_Vxf2) = Ixf2_Vxf2; + *(ckt->CKTstate0 + here->VBICixf2_Vrth) = Ixf2_Vrth; + if (here->VBIC_selfheat) { *(ckt->CKTstate0 + here->VBICcqcth) = Icth; @@ -1085,8 +1062,6 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) here->VBICibe_Vrth = Ibe_Vrth; here->VBICibex_Vrth = Ibex_Vrth; - here->VBICitzf_vrth = Itzf_Vrth; - here->VBICitzr_Vrth = Itzr_Vrth; here->VBICibc_Vrth = Ibc_Vrth; here->VBICibep_Vrth = Ibep_Vrth; here->VBICircx_Vrth = Ircx_Vrth; @@ -1117,24 +1092,6 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) here->VBICith_Vrs = Ith_Vrs; } - if (here->VBIC_excessPhase) { - *(ckt->CKTstate0 + here->VBICitxf) = Itxf; - *(ckt->CKTstate0 + here->VBICitxf_Vrxf) = Itxf_Vrxf; - *(ckt->CKTstate0 + here->VBICixxf) = Ixxf; - *(ckt->CKTstate0 + here->VBICixxf_Vrxf) = Ixxf_Vrxf; - *(ckt->CKTstate0 + here->VBICqcxf) = Qcxf; - *(ckt->CKTstate0 + here->VBICcqcxf) = Icxf; - *(ckt->CKTstate0 + here->VBICgqcxf) = Icxf_Vcxf; - *(ckt->CKTstate0 + here->VBICibc_Vrxf) = Ibc_Vrxf; - *(ckt->CKTstate0 + here->VBICixzf) = Ixzf; - *(ckt->CKTstate0 + here->VBICixzf_Vbei) = Ixzf_Vbei; - *(ckt->CKTstate0 + here->VBICixzf_Vbci) = Ixzf_Vbci; - if (here->VBIC_selfheat) { - *(ckt->CKTstate0 + here->VBICixzf_Vrth) = Ixzf_Vrth; - *(ckt->CKTstate0 + here->VBICith_Vrxf) = Ith_Vrxf; - } - *(ckt->CKTstate0 + here->VBICindFlux) = Flxf; - } load: /* @@ -1175,7 +1132,6 @@ c Stamp element: Ibe *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEIBaseBIPtr) += -Ibe_Vbei; *(here->VBICemitEIEmitEIPtr) += Ibe_Vbei; - /* c Stamp element: Ibex */ @@ -1186,48 +1142,26 @@ c Stamp element: Ibex *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEIBaseBXPtr) += -Ibex_Vbex; *(here->VBICemitEIEmitEIPtr) += Ibex_Vbex; - - if (!here->VBIC_excessPhase) { /* -c Stamp element: Itzf +c Stamp element: Iciei */ - rhs_current = model->VBICtype * (Itzf - Itzf_Vbei*Vbei - Itzf_Vbci*Vbci); - *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; - *(here->VBICcollCIBaseBIPtr) += Itzf_Vbei; - *(here->VBICcollCIEmitEIPtr) += -Itzf_Vbei; - *(here->VBICcollCIBaseBIPtr) += Itzf_Vbci; - *(here->VBICcollCICollCIPtr) += -Itzf_Vbci; - *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; - *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbei; - *(here->VBICemitEIEmitEIPtr) += Itzf_Vbei; - *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbci; - *(here->VBICemitEICollCIPtr) += Itzf_Vbci; - } + rhs_current = model->VBICtype * (Iciei - Iciei_Vbei*Vbei - Iciei_Vbci*Vbci - Iciei_Vxf2*Vxf2); + *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; + *(here->VBICcollCIBaseBIPtr) += Iciei_Vbei; + *(here->VBICcollCIEmitEIPtr) += -Iciei_Vbei; + *(here->VBICcollCIBaseBIPtr) += Iciei_Vbci; + *(here->VBICcollCICollCIPtr) += -Iciei_Vbci; + *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; + *(here->VBICemitEIBaseBIPtr) += -Iciei_Vbei; + *(here->VBICemitEIEmitEIPtr) += Iciei_Vbei; + *(here->VBICemitEIBaseBIPtr) += -Iciei_Vbci; + *(here->VBICemitEICollCIPtr) += Iciei_Vbci; if (here->VBIC_excessPhase) { -/* -c Stamp element: Itxf -*/ - rhs_current = model->VBICtype * (Itxf - Itxf_Vrxf*Vrxf); - *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; - *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; - *(here->VBICcollCIXf2Ptr) += Itxf_Vrxf; - *(here->VBICemitEIXf2Ptr) += -Itxf_Vrxf; + // with respect to Vxf2 + *(here->VBICcollCIXf2Ptr) += Iciei_Vxf2; + *(here->VBICemitEIXf2Ptr) += -Iciei_Vxf2; } /* -c Stamp element: Itzr -*/ - rhs_current = model->VBICtype * (Itzr - Itzr_Vbei*Vbei - Itzr_Vbci*Vbci); - *(ckt->CKTrhs + here->VBICemitEINode) += -rhs_current; - *(here->VBICemitEIBaseBIPtr) += Itzr_Vbci; - *(here->VBICemitEICollCIPtr) += -Itzr_Vbci; - *(here->VBICemitEIBaseBIPtr) += Itzr_Vbei; - *(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei; - *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; - *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci; - *(here->VBICcollCICollCIPtr) += Itzr_Vbci; - *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei; - *(here->VBICcollCIEmitEIPtr) += Itzr_Vbei; -/* c Stamp element: Ibc */ rhs_current = model->VBICtype * (Ibc - Ibc_Vbci*Vbci - Ibc_Vbei*Vbei); @@ -1241,13 +1175,6 @@ c Stamp element: Ibc *(here->VBICcollCICollCIPtr) += Ibc_Vbci; *(here->VBICcollCIBaseBIPtr) += -Ibc_Vbei; *(here->VBICcollCIEmitEIPtr) += Ibc_Vbei; - if (here->VBIC_excessPhase) { - rhs_current = model->VBICtype * -Ibc_Vrxf*Vrxf; - *(ckt->CKTrhs + here->VBICbaseBINode) += -rhs_current; - *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; - *(here->VBICbaseBIXf2Ptr) += Ibc_Vrxf; - *(here->VBICcollCIXf2Ptr) += -Ibc_Vrxf; - } /* c Stamp element: Ibep */ @@ -1267,7 +1194,7 @@ c Stamp element: Rcx *(here->VBICcollCollCXPtr) += -Ircx_Vrcx; /* -c Stamp element: Irci +c Stamp element: Rci */ rhs_current = model->VBICtype * (Irci - Irci_Vrci*Vrci - Irci_Vbci*Vbci - Irci_Vbcx*Vbcx); *(ckt->CKTrhs + here->VBICcollCXNode) += -rhs_current; @@ -1292,7 +1219,7 @@ c Stamp element: Rbx *(here->VBICbaseBXBasePtr) += -Irbx_Vrbx; *(here->VBICbaseBaseBXPtr) += -Irbx_Vrbx; /* -c Stamp element: Irbi +c Stamp element: Rbi */ rhs_current = model->VBICtype * (Irbi - Irbi_Vrbi*Vrbi - Irbi_Vbei*Vbei - Irbi_Vbci*Vbci); *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; @@ -1317,7 +1244,7 @@ c Stamp element: Re *(here->VBICemitEIEmitPtr) += -Ire_Vre; *(here->VBICemitEmitEIPtr) += -Ire_Vre; /* -c Stamp element: Irbp +c Stamp element: Rbp */ rhs_current = model->VBICtype * (Irbp - Irbp_Vrbp*Vrbp - Irbp_Vbep*Vbep - Irbp_Vbci*Vbci); *(ckt->CKTrhs + here->VBICbaseBPNode) += -rhs_current; @@ -1370,6 +1297,28 @@ c Stamp element: Rs *(here->VBICsubsSISubsPtr) += -Irs_Vrs; *(here->VBICsubsSubsSIPtr) += -Irs_Vrs; + if (here->VBIC_excessPhase) { +// Branch: xf1-ground, Stamp element: Ixf1 f_xf1=+ + 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 + *(here->VBICxf1BaseBIPtr) += +Ixf1_Vbei; + *(here->VBICxf1EmitEIPtr) += -Ixf1_Vbei; + *(here->VBICxf1BaseBIPtr) += +Ixf1_Vbci; + *(here->VBICxf1CollCIPtr) += -Ixf1_Vbci; + *(here->VBICxf1Xf2Ptr) += +Ixf1_Vxf2; + *(here->VBICxf1Xf1Ptr) += +Ixf1_Vxf1; + +// Branch: xf2-ground, Stamp element: Ixf2 f_xf2=+ + rhs_current = Ixf2 - Ixf2_Vbci*Vbci - Ixf2_Vbei*Vbei - Ixf2_Vxf1*Vxf1 - Ixf2_Vxf2*Vxf2; + *(ckt->CKTrhs + here->VBICxf2Node) += -rhs_current; // 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->VBICxf2Xf1Ptr) += +Ixf2_Vxf1; + } + if (here->VBIC_selfheat) { /* c Stamp element: Ibe @@ -1388,24 +1337,14 @@ c Stamp element: Ibex *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; *(here->VBICemitEItempPtr) += -Ibex_Vrth; - if (!here->VBIC_excessPhase) { /* -c Stamp element: Itzf +c Stamp element: Iciei */ - rhs_current = -Itzf_Vrth*Vrth; - *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; - *(here->VBICcollCItempPtr) += Itzf_Vrth; - *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; - *(here->VBICemitEItempPtr) += -Itzf_Vrth; - } -/* -c Stamp element: Itzr -*/ - rhs_current = -Itzr_Vrth*Vrth; - *(ckt->CKTrhs + here->VBICemitEINode) += -rhs_current; - *(here->VBICemitEItempPtr) += Itzr_Vrth; - *(ckt->CKTrhs + here->VBICcollCINode) += rhs_current; - *(here->VBICcollCItempPtr) += -Itzr_Vrth; + rhs_current = -Iciei_Vrth*Vrth; + *(ckt->CKTrhs + here->VBICcollCINode) += -rhs_current; + *(here->VBICcollCItempPtr) += Iciei_Vrth; + *(ckt->CKTrhs + here->VBICemitEINode) += rhs_current; + *(here->VBICemitEItempPtr) += -Iciei_Vrth; /* c Stamp element: Ibc */ @@ -1431,7 +1370,7 @@ c Stamp element: Rcx *(ckt->CKTrhs + here->VBICcollCXNode) += rhs_current; *(here->VBICcollCXtempPtr) += -Ircx_Vrth; /* -c Stamp element: Irci +c Stamp element: Rci */ rhs_current = -Irci_Vrth*Vrth; *(ckt->CKTrhs + here->VBICcollCXNode) += -rhs_current; @@ -1447,7 +1386,7 @@ c Stamp element: Rbx *(ckt->CKTrhs + here->VBICbaseBXNode) += rhs_current; *(here->VBICbaseBXtempPtr) += -Irbx_Vrth; /* -c Stamp element: Irbi +c Stamp element: Rbi */ rhs_current = -Irbi_Vrth*Vrth; *(ckt->CKTrhs + here->VBICbaseBXNode) += -rhs_current; @@ -1549,47 +1488,18 @@ c Stamp element: Ith *(here->VBICtempSubsPtr) += -Ith_Vrs; *(here->VBICtempSubsSIPtr) += +Ith_Vrs; if (here->VBIC_excessPhase) { - rhs_current = -Ith_Vrxf*Vrxf; - *(ckt->CKTrhs + here->VBICtempNode) += -rhs_current; - *(here->VBICtempXf2Ptr) += +Ith_Vrxf; - } - } - if (here->VBIC_excessPhase) { -/* -c Stamp element: Ixzf, Branch: xf1-ground -*/ - rhs_current = Ixzf - Ixzf_Vbci*Vbci - Ixzf_Vbei*Vbei; - *(ckt->CKTrhs + here->VBICxf1Node) += -rhs_current; // into xf1 node - *(here->VBICxf1BaseBIPtr) += +Ixzf_Vbei; - *(here->VBICxf1EmitEIPtr) += -Ixzf_Vbei; - *(here->VBICxf1BaseBIPtr) += +Ixzf_Vbci; - *(here->VBICxf1CollCIPtr) += -Ixzf_Vbci; - if (here->VBIC_selfheat) { - rhs_current = -Ixzf_Vrth*Vrth; +// Stamp element: Ixf1 f_xf1 = + + rhs_current = -Ixf1_Vrth*Vrth; *(ckt->CKTrhs + here->VBICxf1Node) += -rhs_current; - *(here->VBICxf1TempPtr) += Ixzf_Vrth; + // with respect to Potential Vxf1 + *(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; } -/* -c Stamp element: Ixxf, Branch: xf2-ground -*/ - rhs_current = Ixxf - Ixxf_Vrxf*Vrxf; - *(ckt->CKTrhs + here->VBICxf2Node) += -rhs_current; // into xf2 node - *(here->VBICxf2Xf2Ptr) += +Ixxf_Vrxf; -/* -c Stamp element: Qcxf -*/ - rhs_current = Icxf - Icxf_Vcxf*Vcxf; - *(ckt->CKTrhs + here->VBICxf1Node) += -rhs_current; - *(here->VBICxf1Xf1Ptr) += Icxf_Vcxf; -/* -c Stamp element: L = TD/3 -*/ - *(ckt->CKTrhs+here->VBICbrEq) += Vxf1xf2; - *(here->VBICxf1IbrPtr) += 1; - *(here->VBICxf2IbrPtr) -= 1; - *(here->VBICibrXf1Ptr) += 1; - *(here->VBICibrXf2Ptr) -= 1; - *(here->VBICibrIbrPtr) -= Rxf1xf2; } } @@ -1597,1183 +1507,6 @@ c Stamp element: L = TD/3 return(OK); } -int vbic_4T_it_cf_fj(double *p - ,double *Vbei, double *Vbex, double *Vbci, double *Vbep, double *Vbcp, double *Vrcx - ,double *Vbcx, double *Vrci, double *Vrbx, double *Vrbi, double *Vre, double *Vrbp, double *Vrs - ,double *Vbe, double *Vbc, double *Ibe, double *Ibe_Vbei, double *Ibex, double *Ibex_Vbex, double *Itzf - ,double *Itzf_Vbei, double *Itzf_Vbci, double *Itzr, double *Itzr_Vbci, double *Itzr_Vbei, double *Ibc, double *Ibc_Vbci - ,double *Ibc_Vbei, double *Ibep, double *Ibep_Vbep, double *Ircx, double *Ircx_Vrcx, double *Irci, double *Irci_Vrci - ,double *Irci_Vbci, double *Irci_Vbcx, double *Irbx, double *Irbx_Vrbx, double *Irbi, double *Irbi_Vrbi, double *Irbi_Vbei - ,double *Irbi_Vbci, double *Ire, double *Ire_Vre, double *Irbp, double *Irbp_Vrbp, double *Irbp_Vbep, double *Irbp_Vbci - ,double *Qbe, double *Qbe_Vbei, double *Qbe_Vbci, double *Qbex, double *Qbex_Vbex, double *Qbc, double *Qbc_Vbci - ,double *Qbcx, double *Qbcx_Vbcx, double *Qbep, double *Qbep_Vbep, double *Qbep_Vbci, double *Qbeo, double *Qbeo_Vbe - ,double *Qbco, double *Qbco_Vbc, double *Ibcp, double *Ibcp_Vbcp, double *Iccp, double *Iccp_Vbep, double *Iccp_Vbci - ,double *Iccp_Vbcp, double *Irs, double *Irs_Vrs, double *Qbcp, double *Qbcp_Vbcp, double *SCALE) -{ -double Vtv,IVEF,IVER,IIKF,IIKR,IIKP,IVO; -double IHRCF,IVTF,IITF,slTF,dv0,dvh,dvh_Vbei; -double xvar1,xvar2,pwq,qlo,qlo_Vbei,qhi,qhi_dvh; -double qhi_Vbei,xvar1_Vbei,xvar3,xvar3_xvar1,xvar3_Vbei,qlo_xvar3,qdbe; -double qdbe_qlo,qdbe_Vbei,qdbe_qhi,mv0,vl0,q0,dv; -double dv_Vbei,mv,mv_dv,mv_Vbei,vl,vl_dv,vl_Vbei; -double vl_mv,xvar1_vl,qdbe_vl,dvh_Vbex,qlo_Vbex,qhi_Vbex,xvar1_Vbex; -double xvar3_Vbex,qdbex,qdbex_qlo,qdbex_Vbex,qdbex_qhi,dv_Vbex,mv_Vbex; -double vl_Vbex,qdbex_vl,dvh_Vbci,qlo_Vbci,qhi_Vbci,xvar1_Vbci,xvar3_Vbci; -double qdbc,qdbc_qlo,qdbc_Vbci,qdbc_qhi,vn0,vnl0,qlo0; -double vn,vn_Vbci,vnl,vnl_vn,vnl_Vbci,vl_vnl,vl_Vbci; -double sel,sel_vnl,sel_Vbci,crt,cmx,cl,cl_sel; -double cl_Vbci,ql,ql_Vbci,ql_vl,ql_cl,qdbc_ql,dv_Vbci; -double mv_Vbci,qdbc_vl,dvh_Vbep,qlo_Vbep,qhi_Vbep,xvar1_Vbep,xvar3_Vbep; -double qdbep,qdbep_qlo,qdbep_Vbep,qdbep_qhi,vn_Vbep,vnl_Vbep,vl_Vbep; -double sel_Vbep,cl_Vbep,ql_Vbep,qdbep_ql,dv_Vbep,mv_Vbep,qdbep_vl; -double dvh_Vbcp,qlo_Vbcp,qhi_Vbcp,xvar1_Vbcp,xvar3_Vbcp,qdbcp,qdbcp_qlo; -double qdbcp_Vbcp,qdbcp_Vbep,qdbcp_qhi,dv_Vbcp,mv_Vbcp,vl_Vbcp,qdbcp_vl; -double argi,argi_Vbei,expi,expi_argi,expi_Vbei,Ifi,Ifi_expi; -double Ifi_Vbei,argi_Vbci,expi_Vbci,Iri,Iri_expi,Iri_Vbci,q1z; -double q1z_qdbe,q1z_Vbei,q1z_qdbc,q1z_Vbci,q1,q1_q1z,q1_Vbei; -double q1_Vbci,q2,q2_Ifi,q2_Vbei,q2_Iri,q2_Vbci,xvar3_q1; -double xvar1_xvar3,xvar1_q2,xvar4,xvar4_xvar1,xvar4_Vbei,xvar4_Vbci,qb; -double qb_q1,qb_Vbei,qb_Vbci,qb_xvar4,xvar2_xvar1,xvar2_Vbei,xvar2_Vbci; -double qb_xvar2,Itzr_Iri,Itzr_qb,Itzf_Ifi,Itzf_qb,argi_Vbep,expi_Vbep; -double argx,argx_Vbci,expx,expx_argx,expx_Vbci,Ifp,Ifp_expi; -double Ifp_Vbep,Ifp_expx,Ifp_Vbci,q2p,q2p_Ifp,q2p_Vbep,q2p_Vbci; -double qbp,qbp_q2p,qbp_Vbep,qbp_Vbci,argi_Vbcp,expi_Vbcp,Irp; -double Irp_expi,Irp_Vbcp,Iccp_Ifp,Iccp_Irp,Iccp_qbp,argn,argn_Vbei; -double expn,expn_argn,expn_Vbei,argx_Vbei,expx_Vbei,Ibe_expi,Ibe_expn; -double Ibe_expx,argi_Vbex,expi_Vbex,argn_Vbex,expn_Vbex,argx_Vbex,expx_Vbex; -double Ibex_expi,Ibex_expn,Ibex_expx,argn_Vbci,expn_Vbci,Ibcj,Ibcj_expi; -double Ibcj_Vbci,Ibcj_expn,argn_Vbep,expn_Vbep,Ibep_expi,Ibep_expn,xvar3_vl; -double avalf,avalf_vl,avalf_Vbci,avalf_xvar4,Igc,Igc_Itzf,Igc_Vbei; -double Igc_Vbci,Igc_Itzr,Igc_Ibcj,Igc_avalf,Ibc_Ibcj,Ibc_Igc,argx_Vbcx; -double expx_Vbcx,Kbci,Kbci_expi,Kbci_Vbci,Kbcx,Kbcx_expx,Kbcx_Vbcx; -double rKp1,rKp1_Kbci,rKp1_Vbci,rKp1_Kbcx,rKp1_Vbcx,xvar1_rKp1,xvar1_Vbcx; -double Iohm,Iohm_Vrci,Iohm_Kbci,Iohm_Vbci,Iohm_Kbcx,Iohm_Vbcx,Iohm_xvar1; -double derf,derf_Iohm,derf_Vrci,derf_Vbci,derf_Vbcx,Irci_Iohm,Irci_derf; -double Irbi_qb,Irbp_qbp,argn_Vbcp,expn_Vbcp,Ibcp_expi,Ibcp_expn,sgIf; -double rIf,rIf_Ifi,rIf_Vbei,mIf,mIf_rIf,mIf_Vbei,tff; -double tff_q1,tff_Vbei,tff_Vbci,tff_xvar2,tff_mIf,Qbe_qdbe,Qbe_tff; -double Qbe_Ifi,Qbe_qb,Qbex_qdbex,Qbc_qdbc,Qbc_Iri,Qbc_Kbci,Qbcx_Kbcx; -double Qbep_qdbep,Qbep_Ifp,Qbcp_qdbcp; - -/* Function and derivative code */ - - Vtv=1.380662e-23*(2.731500e+02+p[0])/1.602189e-19; - if(p[51]>0.0){ - IVEF=1.0/p[51]; - }else{ - IVEF=0.0; - } - if(p[52]>0.0){ - IVER=1.0/p[52]; - }else{ - IVER=0.0; - } - if(p[53]>0.0){ - IIKF=1.0/p[53]; - }else{ - IIKF=0.0; - } - if(p[54]>0.0){ - IIKR=1.0/p[54]; - }else{ - IIKR=0.0; - } - if(p[55]>0.0){ - IIKP=1.0/p[55]; - }else{ - IIKP=0.0; - } - if(p[3]>0.0){ - IVO=1.0/p[3]; - }else{ - IVO=0.0; - } - if(p[5]>0.0){ - IHRCF=1.0/p[5]; - }else{ - IHRCF=0.0; - } - if(p[59]>0.0){ - IVTF=1.0/p[59]; - }else{ - IVTF=0.0; - } - if(p[60]>0.0){ - IITF=1.0/p[60]; - }else{ - IITF=0.0; - } - if(p[60]>0.0){ - slTF=0.0; - }else{ - slTF=1.0; - } - dv0=-p[17]*p[14]; - if(p[19]<=0.0){ - dvh=(*Vbei)+dv0; - dvh_Vbei=1.0; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[18]); - pwq=pow(xvar1,xvar2); - qlo=p[17]*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[18]); - qlo_Vbei=0.0; - qhi=dvh*(1.0-p[14]+0.5*p[18]*dvh/p[17])*pwq; - qhi_dvh=(0.5*dvh*p[18]/p[17]-p[14]+1.0)*pwq+0.5*dvh*p[18]*pwq/p[17]; - qhi_Vbei=qhi_dvh*dvh_Vbei; - }else{ - xvar1=(1.0-(*Vbei)/p[17]); - xvar1_Vbei=-1.0/p[17]; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbei=xvar3_xvar1*xvar1_Vbei; - qlo=p[17]*(1.0-xvar3)/(1.0-p[18]); - qlo_xvar3=-p[17]/(1.0-p[18]); - qlo_Vbei=qlo_xvar3*xvar3_Vbei; - qhi=0.0; - qhi_Vbei=0.0; - } - qdbe=qlo+qhi; - qdbe_qlo=1.0; - qdbe_qhi=1.0; - qdbe_Vbei=qdbe_qlo*qlo_Vbei; - qdbe_Vbei=qdbe_Vbei+qdbe_qhi*qhi_Vbei; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[19]*p[19]); - vl0=-0.5*(dv0+mv0); - xvar1=(1.0-vl0/p[17]); - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - q0=-p[17]*xvar3/(1.0-p[18]); - dv=(*Vbei)+dv0; - dv_Vbei=1.0; - mv=sqrt(dv*dv+4.0*p[19]*p[19]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[19]*p[19])); - mv_Vbei=mv_dv*dv_Vbei; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_Vbei=vl_dv*dv_Vbei; - vl_Vbei=vl_Vbei+vl_mv*mv_Vbei; - xvar1=(1.0-vl/p[17]); - xvar1_vl=-1.0/p[17]; - xvar1_Vbei=xvar1_vl*vl_Vbei; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbei=xvar3_xvar1*xvar1_Vbei; - qlo=-p[17]*xvar3/(1.0-p[18]); - qlo_xvar3=-p[17]/(1.0-p[18]); - qlo_Vbei=qlo_xvar3*xvar3_Vbei; - xvar1=(1.0-p[14]); - xvar2=(-p[18]); - xvar3=pow(xvar1,xvar2); - qdbe=qlo+xvar3*((*Vbei)-vl+vl0)-q0; - qdbe_qlo=1.0; - qdbe_Vbei=xvar3; - qdbe_vl=-xvar3; - qdbe_Vbei=qdbe_Vbei+qdbe_qlo*qlo_Vbei; - qdbe_Vbei=qdbe_Vbei+qdbe_vl*vl_Vbei; - } - dv0=-p[17]*p[14]; - if(p[19]<=0.0){ - dvh=(*Vbex)+dv0; - dvh_Vbex=1.0; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[18]); - pwq=pow(xvar1,xvar2); - qlo=p[17]*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[18]); - qlo_Vbex=0.0; - qhi=dvh*(1.0-p[14]+0.5*p[18]*dvh/p[17])*pwq; - qhi_dvh=(0.5*dvh*p[18]/p[17]-p[14]+1.0)*pwq+0.5*dvh*p[18]*pwq/p[17]; - qhi_Vbex=qhi_dvh*dvh_Vbex; - }else{ - xvar1=(1.0-(*Vbex)/p[17]); - xvar1_Vbex=-1.0/p[17]; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbex=xvar3_xvar1*xvar1_Vbex; - qlo=p[17]*(1.0-xvar3)/(1.0-p[18]); - qlo_xvar3=-p[17]/(1.0-p[18]); - qlo_Vbex=qlo_xvar3*xvar3_Vbex; - qhi=0.0; - qhi_Vbex=0.0; - } - qdbex=qlo+qhi; - qdbex_qlo=1.0; - qdbex_qhi=1.0; - qdbex_Vbex=qdbex_qlo*qlo_Vbex; - qdbex_Vbex=qdbex_Vbex+qdbex_qhi*qhi_Vbex; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[19]*p[19]); - vl0=-0.5*(dv0+mv0); - xvar1=(1.0-vl0/p[17]); - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - q0=-p[17]*xvar3/(1.0-p[18]); - dv=(*Vbex)+dv0; - dv_Vbex=1.0; - mv=sqrt(dv*dv+4.0*p[19]*p[19]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[19]*p[19])); - mv_Vbex=mv_dv*dv_Vbex; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_Vbex=vl_dv*dv_Vbex; - vl_Vbex=vl_Vbex+vl_mv*mv_Vbex; - xvar1=(1.0-vl/p[17]); - xvar1_vl=-1.0/p[17]; - xvar1_Vbex=xvar1_vl*vl_Vbex; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbex=xvar3_xvar1*xvar1_Vbex; - qlo=-p[17]*xvar3/(1.0-p[18]); - qlo_xvar3=-p[17]/(1.0-p[18]); - qlo_Vbex=qlo_xvar3*xvar3_Vbex; - xvar1=(1.0-p[14]); - xvar2=(-p[18]); - xvar3=pow(xvar1,xvar2); - qdbex=qlo+xvar3*((*Vbex)-vl+vl0)-q0; - qdbex_qlo=1.0; - qdbex_Vbex=xvar3; - qdbex_vl=-xvar3; - qdbex_Vbex=qdbex_Vbex+qdbex_qlo*qlo_Vbex; - qdbex_Vbex=qdbex_Vbex+qdbex_vl*vl_Vbex; - } - dv0=-p[24]*p[14]; - if(p[26]<=0.0){ - dvh=(*Vbci)+dv0; - dvh_Vbci=1.0; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[25]); - pwq=pow(xvar1,xvar2); - qlo=p[24]*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[25]); - qlo_Vbci=0.0; - qhi=dvh*(1.0-p[14]+0.5*p[25]*dvh/p[24])*pwq; - qhi_dvh=(0.5*dvh*p[25]/p[24]-p[14]+1.0)*pwq+0.5*dvh*p[25]*pwq/p[24]; - qhi_Vbci=qhi_dvh*dvh_Vbci; - }else{ - if((p[85]>0.0)&&((*Vbci)<-p[85])){ - xvar1=(1.0+p[85]/p[24]); - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - qlo=p[24]*(1.0-xvar3*(1.0-((1.0-p[25])*((*Vbci)+p[85]))/(p[24]+p[85])))/(1.0-p[25]); - qlo_Vbci=p[24]*xvar3/(p[85]+p[24]); - }else{ - xvar1=(1.0-(*Vbci)/p[24]); - xvar1_Vbci=-1.0/p[24]; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; - qlo=p[24]*(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-p[24]/(1.0-p[25]); - qlo_Vbci=qlo_xvar3*xvar3_Vbci; - } - qhi=0.0; - qhi_Vbci=0.0; - } - qdbc=qlo+qhi; - qdbc_qlo=1.0; - qdbc_qhi=1.0; - qdbc_Vbci=qdbc_qlo*qlo_Vbci; - qdbc_Vbci=qdbc_Vbci+qdbc_qhi*qhi_Vbci; - }else{ - if((p[85]>0.0)&&(p[86]>0.0)){ - vn0=(p[85]+dv0)/(p[85]-dv0); - vnl0=2.0*vn0/(sqrt((vn0-1.0)*(vn0-1.0)+4.0*p[26]*p[26])+sqrt((vn0+1.0)*(vn0+1.0)+4.0*p[86]*p[86])); - vl0=0.5*(vnl0*(p[85]-dv0)-p[85]-dv0); - xvar1=(1.0-vl0/p[24]); - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - qlo0=p[24]*(1.0-xvar3)/(1.0-p[25]); - vn=(2.0*(*Vbci)+p[85]+dv0)/(p[85]-dv0); - vn_Vbci=2.0/(p[85]-dv0); - vnl=2.0*vn/(sqrt((vn-1.0)*(vn-1.0)+4.0*p[26]*p[26])+sqrt((vn+1.0)*(vn+1.0)+4.0*p[86]*p[86])); - vnl_vn=2.0/(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))-2.0*vn*((vn+1.0)/sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+(vn-1.0)/sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))); - vnl_Vbci=vnl_vn*vn_Vbci; - vl=0.5*(vnl*(p[85]-dv0)-p[85]-dv0); - vl_vnl=0.5*(p[85]-dv0); - vl_Vbci=vl_vnl*vnl_Vbci; - xvar1=(1.0-vl/p[24]); - xvar1_vl=-1.0/p[24]; - xvar1_Vbci=xvar1_vl*vl_Vbci; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; - qlo=p[24]*(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-p[24]/(1.0-p[25]); - qlo_Vbci=qlo_xvar3*xvar3_Vbci; - sel=0.5*(vnl+1.0); - sel_vnl=0.5; - sel_Vbci=sel_vnl*vnl_Vbci; - xvar1=(1.0+p[85]/p[24]); - xvar2=(-p[25]); - crt=pow(xvar1,xvar2); - xvar1=(1.0+dv0/p[24]); - xvar2=(-p[25]); - cmx=pow(xvar1,xvar2); - cl=(1.0-sel)*crt+sel*cmx; - cl_sel=cmx-crt; - cl_Vbci=cl_sel*sel_Vbci; - ql=((*Vbci)-vl+vl0)*cl; - ql_Vbci=cl; - ql_vl=-cl; - ql_cl=vl0-vl+(*Vbci); - ql_Vbci=ql_Vbci+ql_vl*vl_Vbci; - ql_Vbci=ql_Vbci+ql_cl*cl_Vbci; - qdbc=ql+qlo-qlo0; - qdbc_ql=1.0; - qdbc_qlo=1.0; - qdbc_Vbci=qdbc_ql*ql_Vbci; - qdbc_Vbci=qdbc_Vbci+qdbc_qlo*qlo_Vbci; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[26]*p[26]); - vl0=-0.5*(dv0+mv0); - xvar1=(1.0-vl0/p[24]); - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - q0=-p[24]*xvar3/(1.0-p[25]); - dv=(*Vbci)+dv0; - dv_Vbci=1.0; - mv=sqrt(dv*dv+4.0*p[26]*p[26]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[26]*p[26])); - mv_Vbci=mv_dv*dv_Vbci; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_Vbci=vl_dv*dv_Vbci; - vl_Vbci=vl_Vbci+vl_mv*mv_Vbci; - xvar1=(1.0-vl/p[24]); - xvar1_vl=-1.0/p[24]; - xvar1_Vbci=xvar1_vl*vl_Vbci; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; - qlo=-p[24]*xvar3/(1.0-p[25]); - qlo_xvar3=-p[24]/(1.0-p[25]); - qlo_Vbci=qlo_xvar3*xvar3_Vbci; - xvar1=(1.0-p[14]); - xvar2=(-p[25]); - xvar3=pow(xvar1,xvar2); - qdbc=qlo+xvar3*((*Vbci)-vl+vl0)-q0; - qdbc_qlo=1.0; - qdbc_Vbci=xvar3; - qdbc_vl=-xvar3; - qdbc_Vbci=qdbc_Vbci+qdbc_qlo*qlo_Vbci; - qdbc_Vbci=qdbc_Vbci+qdbc_vl*vl_Vbci; - } - } - dv0=-p[24]*p[14]; - if(p[26]<=0.0){ - dvh=(*Vbep)+dv0; - dvh_Vbep=1.0; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[25]); - pwq=pow(xvar1,xvar2); - qlo=p[24]*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[25]); - qlo_Vbep=0.0; - qhi=dvh*(1.0-p[14]+0.5*p[25]*dvh/p[24])*pwq; - qhi_dvh=(0.5*dvh*p[25]/p[24]-p[14]+1.0)*pwq+0.5*dvh*p[25]*pwq/p[24]; - qhi_Vbep=qhi_dvh*dvh_Vbep; - }else{ - if((p[85]>0.0)&&((*Vbep)<-p[85])){ - xvar1=(1.0+p[85]/p[24]); - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - qlo=p[24]*(1.0-xvar3*(1.0-((1.0-p[25])*((*Vbep)+p[85]))/(p[24]+p[85])))/(1.0-p[25]); - qlo_Vbep=p[24]*xvar3/(p[85]+p[24]); - }else{ - xvar1=(1.0-(*Vbep)/p[24]); - xvar1_Vbep=-1.0/p[24]; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; - qlo=p[24]*(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-p[24]/(1.0-p[25]); - qlo_Vbep=qlo_xvar3*xvar3_Vbep; - } - qhi=0.0; - qhi_Vbep=0.0; - } - qdbep=qlo+qhi; - qdbep_qlo=1.0; - qdbep_qhi=1.0; - qdbep_Vbep=qdbep_qlo*qlo_Vbep; - qdbep_Vbep=qdbep_Vbep+qdbep_qhi*qhi_Vbep; - }else{ - if((p[85]>0.0)&&(p[86]>0.0)){ - vn0=(p[85]+dv0)/(p[85]-dv0); - vnl0=2.0*vn0/(sqrt((vn0-1.0)*(vn0-1.0)+4.0*p[26]*p[26])+sqrt((vn0+1.0)*(vn0+1.0)+4.0*p[86]*p[86])); - vl0=0.5*(vnl0*(p[85]-dv0)-p[85]-dv0); - xvar1=(1.0-vl0/p[24]); - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - qlo0=p[24]*(1.0-xvar3)/(1.0-p[25]); - vn=(2.0*(*Vbep)+p[85]+dv0)/(p[85]-dv0); - vn_Vbep=2.0/(p[85]-dv0); - vnl=2.0*vn/(sqrt((vn-1.0)*(vn-1.0)+4.0*p[26]*p[26])+sqrt((vn+1.0)*(vn+1.0)+4.0*p[86]*p[86])); - vnl_vn=2.0/(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))-2.0*vn*((vn+1.0)/sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+(vn-1.0)/sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))); - vnl_Vbep=vnl_vn*vn_Vbep; - vl=0.5*(vnl*(p[85]-dv0)-p[85]-dv0); - vl_vnl=0.5*(p[85]-dv0); - vl_Vbep=vl_vnl*vnl_Vbep; - xvar1=(1.0-vl/p[24]); - xvar1_vl=-1.0/p[24]; - xvar1_Vbep=xvar1_vl*vl_Vbep; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; - qlo=p[24]*(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-p[24]/(1.0-p[25]); - qlo_Vbep=qlo_xvar3*xvar3_Vbep; - sel=0.5*(vnl+1.0); - sel_vnl=0.5; - sel_Vbep=sel_vnl*vnl_Vbep; - xvar1=(1.0+p[85]/p[24]); - xvar2=(-p[25]); - crt=pow(xvar1,xvar2); - xvar1=(1.0+dv0/p[24]); - xvar2=(-p[25]); - cmx=pow(xvar1,xvar2); - cl=(1.0-sel)*crt+sel*cmx; - cl_sel=cmx-crt; - cl_Vbep=cl_sel*sel_Vbep; - ql=((*Vbep)-vl+vl0)*cl; - ql_Vbep=cl; - ql_vl=-cl; - ql_cl=vl0-vl+(*Vbep); - ql_Vbep=ql_Vbep+ql_vl*vl_Vbep; - ql_Vbep=ql_Vbep+ql_cl*cl_Vbep; - qdbep=ql+qlo-qlo0; - qdbep_ql=1.0; - qdbep_qlo=1.0; - qdbep_Vbep=qdbep_ql*ql_Vbep; - qdbep_Vbep=qdbep_Vbep+qdbep_qlo*qlo_Vbep; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[26]*p[26]); - vl0=-0.5*(dv0+mv0); - xvar1=(1.0-vl0/p[24]); - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - q0=-p[24]*xvar3/(1.0-p[25]); - dv=(*Vbep)+dv0; - dv_Vbep=1.0; - mv=sqrt(dv*dv+4.0*p[26]*p[26]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[26]*p[26])); - mv_Vbep=mv_dv*dv_Vbep; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_Vbep=vl_dv*dv_Vbep; - vl_Vbep=vl_Vbep+vl_mv*mv_Vbep; - xvar1=(1.0-vl/p[24]); - xvar1_vl=-1.0/p[24]; - xvar1_Vbep=xvar1_vl*vl_Vbep; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; - qlo=-p[24]*xvar3/(1.0-p[25]); - qlo_xvar3=-p[24]/(1.0-p[25]); - qlo_Vbep=qlo_xvar3*xvar3_Vbep; - xvar1=(1.0-p[14]); - xvar2=(-p[25]); - xvar3=pow(xvar1,xvar2); - qdbep=qlo+xvar3*((*Vbep)-vl+vl0)-q0; - qdbep_qlo=1.0; - qdbep_Vbep=xvar3; - qdbep_vl=-xvar3; - qdbep_Vbep=qdbep_Vbep+qdbep_qlo*qlo_Vbep; - qdbep_Vbep=qdbep_Vbep+qdbep_vl*vl_Vbep; - } - } - if(p[27]>0.0){ - dv0=-p[28]*p[14]; - if(p[30]<=0.0){ - dvh=(*Vbcp)+dv0; - dvh_Vbcp=1.0; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[29]); - pwq=pow(xvar1,xvar2); - qlo=p[28]*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[29]); - qlo_Vbep=0.0; - qlo_Vbcp=0.0; - qhi=dvh*(1.0-p[14]+0.5*p[29]*dvh/p[28])*pwq; - qhi_dvh=(0.5*dvh*p[29]/p[28]-p[14]+1.0)*pwq+0.5*dvh*p[29]*pwq/p[28]; - qhi_Vbep=0.0; - qhi_Vbcp=qhi_dvh*dvh_Vbcp; - }else{ - xvar1=(1.0-(*Vbcp)/p[28]); - xvar1_Vbcp=-1.0/p[28]; - xvar2=(1.0-p[29]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbcp=xvar3_xvar1*xvar1_Vbcp; - qlo=p[28]*(1.0-xvar3)/(1.0-p[29]); - qlo_xvar3=-p[28]/(1.0-p[29]); - qlo_Vbep=0.0; - qlo_Vbcp=qlo_xvar3*xvar3_Vbcp; - qhi=0.0; - qhi_Vbep=0.0; - qhi_Vbcp=0.0; - } - qdbcp=qlo+qhi; - qdbcp_qlo=1.0; - qdbcp_qhi=1.0; - qdbcp_Vbcp=qdbcp_qlo*qlo_Vbcp; - qdbcp_Vbep=qdbcp_qlo*qlo_Vbep; - qdbcp_Vbep=qdbcp_Vbep+qdbcp_qhi*qhi_Vbep; - qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_qhi*qhi_Vbcp; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[30]*p[30]); - vl0=-0.5*(dv0+mv0); - xvar1=(1.0-vl0/p[28]); - xvar2=(1.0-p[29]); - xvar3=pow(xvar1,xvar2); - q0=-p[28]*xvar3/(1.0-p[29]); - dv=(*Vbcp)+dv0; - dv_Vbcp=1.0; - mv=sqrt(dv*dv+4.0*p[30]*p[30]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[30]*p[30])); - mv_Vbcp=mv_dv*dv_Vbcp; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_Vbcp=vl_dv*dv_Vbcp; - vl_Vbcp=vl_Vbcp+vl_mv*mv_Vbcp; - xvar1=(1.0-vl/p[28]); - xvar1_vl=-1.0/p[28]; - xvar1_Vbcp=xvar1_vl*vl_Vbcp; - xvar2=(1.0-p[29]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbcp=xvar3_xvar1*xvar1_Vbcp; - qlo=-p[28]*xvar3/(1.0-p[29]); - qlo_xvar3=-p[28]/(1.0-p[29]); - qlo_Vbep=0.0; - qlo_Vbcp=qlo_xvar3*xvar3_Vbcp; - xvar1=(1.0-p[14]); - xvar2=(-p[29]); - xvar3=pow(xvar1,xvar2); - qdbcp=qlo+xvar3*((*Vbcp)-vl+vl0)-q0; - qdbcp_qlo=1.0; - qdbcp_Vbcp=xvar3; - qdbcp_vl=-xvar3; - qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_qlo*qlo_Vbcp; - qdbcp_Vbep=qdbcp_qlo*qlo_Vbep; - qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_vl*vl_Vbcp; - } - }else{ - qdbcp=0.0; - qdbcp_Vbcp=0.0; - } - argi=(*Vbei)/(p[12]*Vtv); - argi_Vbei=1.0/(p[12]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbei=expi_argi*argi_Vbei; - Ifi=p[11]*(expi-1.0); - Ifi_expi=p[11]; - Ifi_Vbei=Ifi_expi*expi_Vbei; - argi=(*Vbci)/(p[13]*Vtv); - argi_Vbci=1.0/(p[13]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbci=expi_argi*argi_Vbci; - Iri=p[11]*p[94]*(expi-1.0); - Iri_expi=p[11]*p[94]; - Iri_Vbci=Iri_expi*expi_Vbci; - q1z=1.0+qdbe*IVER+qdbc*IVEF; - q1z_qdbe=IVER; - q1z_qdbc=IVEF; - q1z_Vbei=q1z_qdbe*qdbe_Vbei; - q1z_Vbci=q1z_qdbc*qdbc_Vbci; - q1=0.5*(sqrt((q1z-1.0e-4)*(q1z-1.0e-4)+1.0e-8)+q1z-1.0e-4)+1.0e-4; - q1_q1z=0.5*((q1z-1.0e-4)/sqrt(((q1z-1.0e-4)*(q1z-1.0e-4))+1.0e-8)+1.0); - q1_Vbei=q1_q1z*q1z_Vbei; - q1_Vbci=q1_q1z*q1z_Vbci; - q2=Ifi*IIKF+Iri*IIKR; - q2_Ifi=IIKF; - q2_Iri=IIKR; - q2_Vbei=q2_Ifi*Ifi_Vbei; - q2_Vbci=q2_Iri*Iri_Vbci; - if(p[88]<0.5){ - xvar2=1.0/p[89]; - xvar3=pow(q1,xvar2); - xvar3_q1=xvar3*xvar2/q1; - xvar3_Vbei=xvar3_q1*q1_Vbei; - xvar3_Vbci=xvar3_q1*q1_Vbci; - xvar1=(xvar3+4.0*q2); - xvar1_xvar3=1.0; - xvar1_q2=4.0; - xvar1_Vbei=xvar1_xvar3*xvar3_Vbei; - xvar1_Vbci=xvar1_xvar3*xvar3_Vbci; - xvar1_Vbei=xvar1_Vbei+xvar1_q2*q2_Vbei; - xvar1_Vbci=xvar1_Vbci+xvar1_q2*q2_Vbci; - xvar4=pow(xvar1,p[89]); - xvar4_xvar1=xvar4*p[89]/xvar1; - xvar4_Vbei=xvar4_xvar1*xvar1_Vbei; - xvar4_Vbci=xvar4_xvar1*xvar1_Vbci; - qb=0.5*(q1+xvar4); - qb_q1=0.5; - qb_xvar4=0.5; - qb_Vbei=qb_q1*q1_Vbei; - qb_Vbci=qb_q1*q1_Vbci; - qb_Vbei=qb_Vbei+qb_xvar4*xvar4_Vbei; - qb_Vbci=qb_Vbci+qb_xvar4*xvar4_Vbci; - }else{ - xvar1=(1.0+4.0*q2); - xvar1_q2=4.0; - xvar1_Vbei=xvar1_q2*q2_Vbei; - xvar1_Vbci=xvar1_q2*q2_Vbci; - xvar2=pow(xvar1,p[89]); - xvar2_xvar1=xvar2*p[89]/xvar1; - xvar2_Vbei=xvar2_xvar1*xvar1_Vbei; - xvar2_Vbci=xvar2_xvar1*xvar1_Vbci; - qb=0.5*q1*(1.0+xvar2); - qb_q1=0.5*(xvar2+1.0); - qb_xvar2=0.5*q1; - qb_Vbei=qb_q1*q1_Vbei; - qb_Vbci=qb_q1*q1_Vbci; - qb_Vbei=qb_Vbei+qb_xvar2*xvar2_Vbei; - qb_Vbci=qb_Vbci+qb_xvar2*xvar2_Vbci; - } - (*Itzr)=Iri/qb; - Itzr_Iri=1.0/qb; - Itzr_qb=-Iri/(qb*qb); - *Itzr_Vbci=Itzr_Iri*Iri_Vbci; - *Itzr_Vbei=Itzr_qb*qb_Vbei; - *Itzr_Vbci=(*Itzr_Vbci)+Itzr_qb*qb_Vbci; - (*Itzf)=Ifi/qb; - Itzf_Ifi=1.0/qb; - Itzf_qb=-Ifi/(qb*qb); - *Itzf_Vbei=Itzf_Ifi*Ifi_Vbei; - *Itzf_Vbei=(*Itzf_Vbei)+Itzf_qb*qb_Vbei; - *Itzf_Vbci=Itzf_qb*qb_Vbci; - if(p[42]>0.0){ - argi=(*Vbep)/(p[44]*Vtv); - argi_Vbep=1.0/(p[44]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbep=expi_argi*argi_Vbep; - argx=(*Vbci)/(p[44]*Vtv); - argx_Vbci=1.0/(p[44]*Vtv); - expx=exp(argx); - expx_argx=expx; - expx_Vbci=expx_argx*argx_Vbci; - Ifp=p[42]*(p[43]*expi+(1.0-p[43])*expx-1.0); - Ifp_expi=p[42]*p[43]; - Ifp_expx=p[42]*(1.0-p[43]); - Ifp_Vbep=Ifp_expi*expi_Vbep; - Ifp_Vbci=Ifp_expx*expx_Vbci; - q2p=Ifp*IIKP; - q2p_Ifp=IIKP; - q2p_Vbep=q2p_Ifp*Ifp_Vbep; - q2p_Vbci=q2p_Ifp*Ifp_Vbci; - qbp=0.5*(1.0+sqrt(1.0+4.0*q2p)); - qbp_q2p=1.0/sqrt(4.0*q2p+1.0); - qbp_Vbep=qbp_q2p*q2p_Vbep; - qbp_Vbci=qbp_q2p*q2p_Vbci; - argi=(*Vbcp)/(p[44]*Vtv); - argi_Vbcp=1.0/(p[44]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbcp=expi_argi*argi_Vbcp; - Irp=p[42]*(expi-1.0); - Irp_expi=p[42]; - Irp_Vbcp=Irp_expi*expi_Vbcp; - (*Iccp)=(Ifp-Irp)/qbp; - Iccp_Ifp=1.0/qbp; - Iccp_Irp=-1.0/qbp; - Iccp_qbp=-(Ifp-Irp)/(qbp*qbp); - *Iccp_Vbep=Iccp_Ifp*Ifp_Vbep; - *Iccp_Vbci=Iccp_Ifp*Ifp_Vbci; - *Iccp_Vbcp=Iccp_Irp*Irp_Vbcp; - *Iccp_Vbep=(*Iccp_Vbep)+Iccp_qbp*qbp_Vbep; - *Iccp_Vbci=(*Iccp_Vbci)+Iccp_qbp*qbp_Vbci; - }else{ - Ifp=0.0; - Ifp_Vbep=0.0; - Ifp_Vbci=0.0; - qbp=1.0; - qbp_Vbep=0.0; - qbp_Vbci=0.0; - (*Iccp)=0.0; - *Iccp_Vbep=0.0; - *Iccp_Vbci=0.0; - *Iccp_Vbcp=0.0; - } - if(p[32]==1.0){ - argi=(*Vbei)/(p[33]*Vtv); - argi_Vbei=1.0/(p[33]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbei=expi_argi*argi_Vbei; - argn=(*Vbei)/(p[35]*Vtv); - argn_Vbei=1.0/(p[35]*Vtv); - expn=exp(argn); - expn_argn=expn; - expn_Vbei=expn_argn*argn_Vbei; - if(p[98]>0.0){ - argx=(-p[98]-(*Vbei))/(p[99]*Vtv); - argx_Vbei=-1.0/(p[99]*Vtv); - expx=exp(argx); - expx_argx=expx; - expx_Vbei=expx_argx*argx_Vbei; - (*Ibe)=p[31]*(expi-1.0)+p[34]*(expn-1.0)-p[100]*(expx-p[104]); - Ibe_expi=p[31]; - Ibe_expn=p[34]; - Ibe_expx=-p[100]; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expx*expx_Vbei; - }else{ - (*Ibe)=p[31]*(expi-1.0)+p[34]*(expn-1.0); - Ibe_expi=p[31]; - Ibe_expn=p[34]; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - } - (*Ibex)=0.0; - *Ibex_Vbex=0.0; - }else if(p[32]==0.0){ - (*Ibe)=0.0; - *Ibe_Vbei=0.0; - argi=(*Vbex)/(p[33]*Vtv); - argi_Vbex=1.0/(p[33]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbex=expi_argi*argi_Vbex; - argn=(*Vbex)/(p[35]*Vtv); - argn_Vbex=1.0/(p[35]*Vtv); - expn=exp(argn); - expn_argn=expn; - expn_Vbex=expn_argn*argn_Vbex; - if(p[98]>0.0){ - argx=(-p[98]-(*Vbex))/(p[99]*Vtv); - argx_Vbex=-1.0/(p[99]*Vtv); - expx=exp(argx); - expx_argx=expx; - expx_Vbex=expx_argx*argx_Vbex; - (*Ibex)=p[31]*(expi-1.0)+p[34]*(expn-1.0)-p[100]*(expx-p[104]); - Ibex_expi=p[31]; - Ibex_expn=p[34]; - Ibex_expx=-p[100]; - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expx*expx_Vbex; - }else{ - (*Ibex)=p[31]*(expi-1.0)+p[34]*(expn-1.0); - Ibex_expi=p[31]; - Ibex_expn=p[34]; - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - } - }else{ - argi=(*Vbei)/(p[33]*Vtv); - argi_Vbei=1.0/(p[33]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbei=expi_argi*argi_Vbei; - argn=(*Vbei)/(p[35]*Vtv); - argn_Vbei=1.0/(p[35]*Vtv); - expn=exp(argn); - expn_argn=expn; - expn_Vbei=expn_argn*argn_Vbei; - if(p[98]>0.0){ - argx=(-p[98]-(*Vbei))/(p[99]*Vtv); - argx_Vbei=-1.0/(p[99]*Vtv); - expx=exp(argx); - expx_argx=expx; - expx_Vbei=expx_argx*argx_Vbei; - (*Ibe)=p[32]*(p[31]*(expi-1.0)+p[34]*(expn-1.0)-p[100]*(expx-p[104])); - Ibe_expi=p[31]*p[32]; - Ibe_expn=p[34]*p[32]; - Ibe_expx=-p[100]*p[32]; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expx*expx_Vbei; - }else{ - (*Ibe)=p[32]*(p[31]*(expi-1.0)+p[34]*(expn-1.0)); - Ibe_expi=p[31]*p[32]; - Ibe_expn=p[34]*p[32]; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - } - argi=(*Vbex)/(p[33]*Vtv); - argi_Vbex=1.0/(p[33]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbex=expi_argi*argi_Vbex; - argn=(*Vbex)/(p[35]*Vtv); - argn_Vbex=1.0/(p[35]*Vtv); - expn=exp(argn); - expn_argn=expn; - expn_Vbex=expn_argn*argn_Vbex; - if(p[98]>0.0){ - argx=(-p[98]-(*Vbex))/(p[99]*Vtv); - argx_Vbex=-1.0/(p[99]*Vtv); - expx=exp(argx); - expx_argx=expx; - expx_Vbex=expx_argx*argx_Vbex; - (*Ibex)=(1.0-p[32])*(p[31]*(expi-1.0)+p[34]*(expn-1.0)-p[100]*(expx-p[104])); - Ibex_expi=p[31]*(1.0-p[32]); - Ibex_expn=p[34]*(1.0-p[32]); - Ibex_expx=-p[100]*(1.0-p[32]); - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expx*expx_Vbex; - }else{ - (*Ibex)=(1.0-p[32])*(p[31]*(expi-1.0)+p[34]*(expn-1.0)); - Ibex_expi=p[31]*(1.0-p[32]); - Ibex_expn=p[34]*(1.0-p[32]); - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - } - } - argi=(*Vbci)/(p[37]*Vtv); - argi_Vbci=1.0/(p[37]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbci=expi_argi*argi_Vbci; - argn=(*Vbci)/(p[39]*Vtv); - argn_Vbci=1.0/(p[39]*Vtv); - expn=exp(argn); - expn_argn=expn; - expn_Vbci=expn_argn*argn_Vbci; - Ibcj=p[36]*(expi-1.0)+p[38]*(expn-1.0); - Ibcj_expi=p[36]; - Ibcj_expn=p[38]; - Ibcj_Vbci=Ibcj_expi*expi_Vbci; - Ibcj_Vbci=Ibcj_Vbci+Ibcj_expn*expn_Vbci; - if((p[45]>0.0)||(p[46]>0.0)){ - argi=(*Vbep)/(p[37]*Vtv); - argi_Vbep=1.0/(p[37]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbep=expi_argi*argi_Vbep; - argn=(*Vbep)/(p[39]*Vtv); - argn_Vbep=1.0/(p[39]*Vtv); - expn=exp(argn); - expn_argn=expn; - expn_Vbep=expn_argn*argn_Vbep; - (*Ibep)=p[45]*(expi-1.0)+p[46]*(expn-1.0); - Ibep_expi=p[45]; - Ibep_expn=p[46]; - *Ibep_Vbep=Ibep_expi*expi_Vbep; - *Ibep_Vbep=(*Ibep_Vbep)+Ibep_expn*expn_Vbep; - }else{ - (*Ibep)=0.0; - *Ibep_Vbep=0.0; - } - if(p[40]>0.0){ - vl=0.5*(sqrt((p[24]-(*Vbci))*(p[24]-(*Vbci))+0.01)+(p[24]-(*Vbci))); - vl_Vbci=0.5*(-(p[24]-(*Vbci))/sqrt(((p[24]-(*Vbci))*(p[24]-(*Vbci)))+0.01)-1.0); - xvar2=(p[25]-1.0); - xvar3=pow(vl,xvar2); - xvar3_vl=xvar3*xvar2/vl; - xvar3_Vbci=xvar3_vl*vl_Vbci; - xvar1=-p[41]*xvar3; - xvar1_xvar3=-p[41]; - xvar1_Vbci=xvar1_xvar3*xvar3_Vbci; - xvar4=exp(xvar1); - xvar4_xvar1=xvar4; - xvar4_Vbci=xvar4_xvar1*xvar1_Vbci; - avalf=p[40]*vl*xvar4; - avalf_vl=p[40]*xvar4; - avalf_xvar4=p[40]*vl; - avalf_Vbci=avalf_vl*vl_Vbci; - avalf_Vbci=avalf_Vbci+avalf_xvar4*xvar4_Vbci; - Igc=((*Itzf)-(*Itzr)-Ibcj)*avalf; - Igc_Itzf=avalf; - Igc_Itzr=-avalf; - Igc_Ibcj=-avalf; - Igc_avalf=-(*Itzr)+(*Itzf)-Ibcj; - Igc_Vbei=Igc_Itzf*(*Itzf_Vbei); - Igc_Vbci=Igc_Itzf*(*Itzf_Vbci); - Igc_Vbci=Igc_Vbci+Igc_Itzr*(*Itzr_Vbci); - Igc_Vbei=Igc_Vbei+Igc_Itzr*(*Itzr_Vbei); - Igc_Vbci=Igc_Vbci+Igc_Ibcj*Ibcj_Vbci; - Igc_Vbci=Igc_Vbci+Igc_avalf*avalf_Vbci; - }else{ - Igc=0.0; - Igc_Vbei=0.0; - Igc_Vbci=0.0; - } - (*Ibc)=Ibcj-Igc; - Ibc_Ibcj=1.0; - Ibc_Igc=-1.0; - *Ibc_Vbci=Ibc_Ibcj*Ibcj_Vbci; - *Ibc_Vbei=Ibc_Igc*Igc_Vbei; - *Ibc_Vbci=(*Ibc_Vbci)+Ibc_Igc*Igc_Vbci; - if(p[1]>0.0){ - (*Ircx)=(*Vrcx)/p[1]; - *Ircx_Vrcx=1.0/p[1]; - }else{ - (*Ircx)=0.0; - *Ircx_Vrcx=0.0; - } - argi=(*Vbci)/Vtv; - argi_Vbci=1.0/Vtv; - expi=exp(argi); - expi_argi=expi; - expi_Vbci=expi_argi*argi_Vbci; - argx=(*Vbcx)/Vtv; - argx_Vbcx=1.0/Vtv; - expx=exp(argx); - expx_argx=expx; - expx_Vbcx=expx_argx*argx_Vbcx; - Kbci=sqrt(1.0+p[4]*expi); - Kbci_expi=p[4]/(2.0*sqrt(expi*p[4]+1.0)); - Kbci_Vbci=Kbci_expi*expi_Vbci; - Kbcx=sqrt(1.0+p[4]*expx); - Kbcx_expx=p[4]/(2.0*sqrt(expx*p[4]+1.0)); - Kbcx_Vbcx=Kbcx_expx*expx_Vbcx; - if(p[2]>0.0){ - rKp1=(Kbci+1.0)/(Kbcx+1.0); - rKp1_Kbci=1.0/(Kbcx+1.0); - rKp1_Kbcx=-(Kbci+1.0)/((Kbcx+1.0)*(Kbcx+1.0)); - rKp1_Vbci=rKp1_Kbci*Kbci_Vbci; - rKp1_Vbcx=rKp1_Kbcx*Kbcx_Vbcx; - xvar1=log(rKp1); - xvar1_rKp1=1.0/rKp1; - xvar1_Vbci=xvar1_rKp1*rKp1_Vbci; - xvar1_Vbcx=xvar1_rKp1*rKp1_Vbcx; - Iohm=((*Vrci)+Vtv*(Kbci-Kbcx-xvar1))/p[2]; - Iohm_Vrci=1.0/p[2]; - Iohm_Kbci=Vtv/p[2]; - Iohm_Kbcx=-Vtv/p[2]; - Iohm_xvar1=-Vtv/p[2]; - Iohm_Vbci=Iohm_Kbci*Kbci_Vbci; - Iohm_Vbcx=Iohm_Kbcx*Kbcx_Vbcx; - Iohm_Vbci=Iohm_Vbci+Iohm_xvar1*xvar1_Vbci; - Iohm_Vbcx=Iohm_Vbcx+Iohm_xvar1*xvar1_Vbcx; - derf=IVO*p[2]*Iohm/(1.0+0.5*IVO*IHRCF*sqrt((*Vrci)*(*Vrci)+0.01)); - derf_Iohm=IVO*p[2]/(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0); - derf_Vrci=-0.5*IHRCF*Iohm*(IVO*IVO)*p[2]*(*Vrci)/(sqrt(((*Vrci)*(*Vrci))+0.01)*((0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)*(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0))); - derf_Vrci=derf_Vrci+derf_Iohm*Iohm_Vrci; - derf_Vbci=derf_Iohm*Iohm_Vbci; - derf_Vbcx=derf_Iohm*Iohm_Vbcx; - (*Irci)=Iohm/sqrt(1.0+derf*derf); - Irci_Iohm=1.0/sqrt((derf*derf)+1.0); - Irci_derf=-derf*Iohm/pow(((derf*derf)+1.0),(3.0/2.0)); - *Irci_Vrci=Irci_Iohm*Iohm_Vrci; - *Irci_Vbci=Irci_Iohm*Iohm_Vbci; - *Irci_Vbcx=Irci_Iohm*Iohm_Vbcx; - *Irci_Vrci=(*Irci_Vrci)+Irci_derf*derf_Vrci; - *Irci_Vbci=(*Irci_Vbci)+Irci_derf*derf_Vbci; - *Irci_Vbcx=(*Irci_Vbcx)+Irci_derf*derf_Vbcx; - }else{ - (*Irci)=0.0; - *Irci_Vrci=0.0; - *Irci_Vbci=0.0; - *Irci_Vbcx=0.0; - } - if(p[6]>0.0){ - (*Irbx)=(*Vrbx)/p[6]; - *Irbx_Vrbx=1.0/p[6]; - }else{ - (*Irbx)=0.0; - *Irbx_Vrbx=0.0; - } - if(p[7]>0.0){ - (*Irbi)=(*Vrbi)*qb/p[7]; - *Irbi_Vrbi=qb/p[7]; - Irbi_qb=(*Vrbi)/p[7]; - *Irbi_Vbei=Irbi_qb*qb_Vbei; - *Irbi_Vbci=Irbi_qb*qb_Vbci; - }else{ - (*Irbi)=0.0; - *Irbi_Vrbi=0.0; - *Irbi_Vbei=0.0; - *Irbi_Vbci=0.0; - } - if(p[8]>0.0){ - (*Ire)=(*Vre)/p[8]; - *Ire_Vre=1.0/p[8]; - }else{ - (*Ire)=0.0; - *Ire_Vre=0.0; - } - if(p[10]>0.0){ - (*Irbp)=(*Vrbp)*qbp/p[10]; - *Irbp_Vrbp=qbp/p[10]; - Irbp_qbp=(*Vrbp)/p[10]; - *Irbp_Vbep=Irbp_qbp*qbp_Vbep; - *Irbp_Vbci=Irbp_qbp*qbp_Vbci; - }else{ - (*Irbp)=0.0; - *Irbp_Vrbp=0.0; - *Irbp_Vbep=0.0; - *Irbp_Vbci=0.0; - } - if((p[47]>0.0)||(p[49]>0.0)){ - argi=(*Vbcp)/(p[48]*Vtv); - argi_Vbcp=1.0/(p[48]*Vtv); - expi=exp(argi); - expi_argi=expi; - expi_Vbcp=expi_argi*argi_Vbcp; - argn=(*Vbcp)/(p[50]*Vtv); - argn_Vbcp=1.0/(p[50]*Vtv); - expn=exp(argn); - expn_argn=expn; - expn_Vbcp=expn_argn*argn_Vbcp; - (*Ibcp)=p[47]*(expi-1.0)+p[49]*(expn-1.0); - Ibcp_expi=p[47]; - Ibcp_expn=p[49]; - *Ibcp_Vbcp=Ibcp_expi*expi_Vbcp; - *Ibcp_Vbcp=(*Ibcp_Vbcp)+Ibcp_expn*expn_Vbcp; - }else{ - (*Ibcp)=0.0; - *Ibcp_Vbcp=0.0; - } - if(p[9]>0.0){ - (*Irs)=(*Vrs)/p[9]; - *Irs_Vrs=1.0/p[9]; - }else{ - (*Irs)=0.0; - *Irs_Vrs=0.0; - } - if(Ifi>0.0){ - sgIf=1.0; - }else{ - sgIf=0.0; - } - rIf=Ifi*sgIf*IITF; - rIf_Ifi=IITF*sgIf; - rIf_Vbei=rIf_Ifi*Ifi_Vbei; - mIf=rIf/(rIf+1.0); - mIf_rIf=1.0/(rIf+1.0)-rIf/((rIf+1.0)*(rIf+1.0)); - mIf_Vbei=mIf_rIf*rIf_Vbei; - xvar1=(*Vbci)*IVTF/1.44; - xvar1_Vbci=0.6944444*IVTF; - xvar2=exp(xvar1); - xvar2_xvar1=xvar2; - xvar2_Vbci=xvar2_xvar1*xvar1_Vbci; - 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_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_Vbei=tff_q1*q1_Vbei; - tff_Vbci=tff_q1*q1_Vbci; - tff_Vbci=tff_Vbci+tff_xvar2*xvar2_Vbci; - tff_Vbei=tff_Vbei+tff_mIf*mIf_Vbei; - (*Qbe)=p[16]*qdbe*p[32]+tff*Ifi/qb; - Qbe_qdbe=p[16]*p[32]; - Qbe_tff=Ifi/qb; - Qbe_Ifi=tff/qb; - Qbe_qb=-Ifi*tff/(qb*qb); - *Qbe_Vbei=Qbe_qdbe*qdbe_Vbei; - *Qbe_Vbei=(*Qbe_Vbei)+Qbe_tff*tff_Vbei; - *Qbe_Vbci=Qbe_tff*tff_Vbci; - *Qbe_Vbei=(*Qbe_Vbei)+Qbe_Ifi*Ifi_Vbei; - *Qbe_Vbei=(*Qbe_Vbei)+Qbe_qb*qb_Vbei; - *Qbe_Vbci=(*Qbe_Vbci)+Qbe_qb*qb_Vbci; - (*Qbex)=p[16]*qdbex*(1.0-p[32]); - Qbex_qdbex=p[16]*(1.0-p[32]); - *Qbex_Vbex=Qbex_qdbex*qdbex_Vbex; - (*Qbc)=p[21]*qdbc+p[61]*Iri+p[22]*Kbci; - Qbc_qdbc=p[21]; - Qbc_Iri=p[61]; - Qbc_Kbci=p[22]; - *Qbc_Vbci=Qbc_qdbc*qdbc_Vbci; - *Qbc_Vbci=(*Qbc_Vbci)+Qbc_Iri*Iri_Vbci; - *Qbc_Vbci=(*Qbc_Vbci)+Qbc_Kbci*Kbci_Vbci; - (*Qbcx)=p[22]*Kbcx; - Qbcx_Kbcx=p[22]; - *Qbcx_Vbcx=Qbcx_Kbcx*Kbcx_Vbcx; - (*Qbep)=p[23]*qdbep+p[61]*Ifp; - Qbep_qdbep=p[23]; - Qbep_Ifp=p[61]; - *Qbep_Vbep=Qbep_qdbep*qdbep_Vbep; - *Qbep_Vbep=(*Qbep_Vbep)+Qbep_Ifp*Ifp_Vbep; - *Qbep_Vbci=Qbep_Ifp*Ifp_Vbci; - (*Qbcp)=p[27]*qdbcp+p[87]*(*Vbcp); - Qbcp_qdbcp=p[27]; - *Qbcp_Vbcp=p[87]; - *Qbcp_Vbcp=(*Qbcp_Vbcp)+Qbcp_qdbcp*qdbcp_Vbcp; - (*Qbeo)=(*Vbe)*p[15]; - *Qbeo_Vbe=p[15]; - (*Qbco)=(*Vbc)*p[20]; - *Qbco_Vbc=p[20]; - -/* Scale outputs */ - - if((*SCALE)!=1.0){ - *Ibe=(*SCALE)*(*Ibe); - *Ibe_Vbei=(*SCALE)*(*Ibe_Vbei); - *Ibex=(*SCALE)*(*Ibex); - *Ibex_Vbex=(*SCALE)*(*Ibex_Vbex); - *Itzf=(*SCALE)*(*Itzf); - *Itzf_Vbei=(*SCALE)*(*Itzf_Vbei); - *Itzf_Vbci=(*SCALE)*(*Itzf_Vbci); - *Itzr=(*SCALE)*(*Itzr); - *Itzr_Vbci=(*SCALE)*(*Itzr_Vbci); - *Itzr_Vbei=(*SCALE)*(*Itzr_Vbei); - *Ibc=(*SCALE)*(*Ibc); - *Ibc_Vbci=(*SCALE)*(*Ibc_Vbci); - *Ibc_Vbei=(*SCALE)*(*Ibc_Vbei); - *Ibep=(*SCALE)*(*Ibep); - *Ibep_Vbep=(*SCALE)*(*Ibep_Vbep); - *Ircx=(*SCALE)*(*Ircx); - *Ircx_Vrcx=(*SCALE)*(*Ircx_Vrcx); - *Irci=(*SCALE)*(*Irci); - *Irci_Vrci=(*SCALE)*(*Irci_Vrci); - *Irci_Vbci=(*SCALE)*(*Irci_Vbci); - *Irci_Vbcx=(*SCALE)*(*Irci_Vbcx); - *Irbx=(*SCALE)*(*Irbx); - *Irbx_Vrbx=(*SCALE)*(*Irbx_Vrbx); - *Irbi=(*SCALE)*(*Irbi); - *Irbi_Vrbi=(*SCALE)*(*Irbi_Vrbi); - *Irbi_Vbei=(*SCALE)*(*Irbi_Vbei); - *Irbi_Vbci=(*SCALE)*(*Irbi_Vbci); - *Ire=(*SCALE)*(*Ire); - *Ire_Vre=(*SCALE)*(*Ire_Vre); - *Irbp=(*SCALE)*(*Irbp); - *Irbp_Vrbp=(*SCALE)*(*Irbp_Vrbp); - *Irbp_Vbep=(*SCALE)*(*Irbp_Vbep); - *Irbp_Vbci=(*SCALE)*(*Irbp_Vbci); - *Qbe=(*SCALE)*(*Qbe); - *Qbe_Vbei=(*SCALE)*(*Qbe_Vbei); - *Qbe_Vbci=(*SCALE)*(*Qbe_Vbci); - *Qbex=(*SCALE)*(*Qbex); - *Qbex_Vbex=(*SCALE)*(*Qbex_Vbex); - *Qbc=(*SCALE)*(*Qbc); - *Qbc_Vbci=(*SCALE)*(*Qbc_Vbci); - *Qbcx=(*SCALE)*(*Qbcx); - *Qbcx_Vbcx=(*SCALE)*(*Qbcx_Vbcx); - *Qbep=(*SCALE)*(*Qbep); - *Qbep_Vbep=(*SCALE)*(*Qbep_Vbep); - *Qbep_Vbci=(*SCALE)*(*Qbep_Vbci); - *Qbeo=(*SCALE)*(*Qbeo); - *Qbeo_Vbe=(*SCALE)*(*Qbeo_Vbe); - *Qbco=(*SCALE)*(*Qbco); - *Qbco_Vbc=(*SCALE)*(*Qbco_Vbc); - *Ibcp=(*SCALE)*(*Ibcp); - *Ibcp_Vbcp=(*SCALE)*(*Ibcp_Vbcp); - *Iccp=(*SCALE)*(*Iccp); - *Iccp_Vbep=(*SCALE)*(*Iccp_Vbep); - *Iccp_Vbci=(*SCALE)*(*Iccp_Vbci); - *Iccp_Vbcp=(*SCALE)*(*Iccp_Vbcp); - *Irs=(*SCALE)*(*Irs); - *Irs_Vrs=(*SCALE)*(*Irs_Vrs); - *Qbcp=(*SCALE)*(*Qbcp); - *Qbcp_Vbcp=(*SCALE)*(*Qbcp_Vbcp); - } - return(0); -} int vbic_4T_et_cf_fj(double *p ,double *Vrth, double *Vbei, double *Vbex, double *Vbci, double *Vbep, double *Vbcp ,double *Vrcx, double *Vbcx, double *Vrci, double *Vrbx, double *Vrbi, double *Vre, double *Vrbp @@ -2791,8 +1524,9 @@ 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 *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_Vrci, double *Ith_Vbcx, double *Ith_Vrbx, double *Ith_Vrbi, double *Ith_Vre, double *Ith_Vrbp, double *Qcth - ,double *Qcth_Vrth, double *SCALE) + ,double *Ith_Vrci, double *Ith_Vbcx, double *Ith_Vrbx, double *Ith_Vrbi, double *Ith_Vre, double *Ith_Vrbp, double *Qcth, double *Qcth_Vrth + ,double *tff, double *tff_Vbei, double *tff_Vbci, double *tff_Vrth + ,double *SCALE) { double Tini,Tdev,Tdev_Vrth,Vtv,Vtv_Tdev,Vtv_Vrth,rT; double rT_Tdev,rT_Vrth,dT,dT_Tdev,dT_Vrth,xvar1,xvar1_rT; @@ -2877,12 +1611,13 @@ 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 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 mIf_rIf,mIf_Vrth,mIf_Vbei,tff,tff_q1,tff_Vrth,tff_Vbei; -double tff_Vbci,tff_xvar2,tff_mIf,Qbe_CJEatT,Qbe_qdbe,Qbe_tff,Qbe_Ifi; +double mIf_rIf,mIf_Vrth,mIf_Vbei,tff_q1; +double 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 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_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 */ @@ -5156,28 +3891,28 @@ double Ith_Iccp,Ith_Ircx,Ith_Irci,Ith_Irbx,Ith_Irbi,Ith_Ire,Ith_Irbp; xvar2=exp(xvar1); xvar2_xvar1=xvar2; 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_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_Vrth=tff_q1*q1_Vrth; - tff_Vbei=tff_q1*q1_Vbei; - tff_Vbci=tff_q1*q1_Vbci; - tff_Vbci=tff_Vbci+tff_xvar2*xvar2_Vbci; - tff_Vrth=tff_Vrth+tff_mIf*mIf_Vrth; - tff_Vbei=tff_Vbei+tff_mIf*mIf_Vbei; - (*Qbe)=CJEatT*qdbe*p[32]+tff*Ifi/qb; + *tff_Vrth=tff_q1*q1_Vrth; + *tff_Vbei=tff_q1*q1_Vbei; + *tff_Vbci=tff_q1*q1_Vbci; + *tff_Vbci=*tff_Vbci+tff_xvar2*xvar2_Vbci; + *tff_Vrth=*tff_Vrth+tff_mIf*mIf_Vrth; + *tff_Vbei=*tff_Vbei+tff_mIf*mIf_Vbei; + (*Qbe)=CJEatT*qdbe*p[32]+*tff*Ifi/qb; Qbe_CJEatT=qdbe*p[32]; Qbe_qdbe=CJEatT*p[32]; Qbe_tff=Ifi/qb; - Qbe_Ifi=tff/qb; - Qbe_qb=-Ifi*tff/(qb*qb); + Qbe_Ifi=*tff/qb; + Qbe_qb=-Ifi* *tff/(qb*qb); *Qbe_Vrth=Qbe_CJEatT*CJEatT_Vrth; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qdbe*qdbe_Vrth; *Qbe_Vbei=Qbe_qdbe*qdbe_Vbei; - *Qbe_Vrth=(*Qbe_Vrth)+Qbe_tff*tff_Vrth; - *Qbe_Vbei=(*Qbe_Vbei)+Qbe_tff*tff_Vbei; - *Qbe_Vbci=Qbe_tff*tff_Vbci; + *Qbe_Vrth=(*Qbe_Vrth)+Qbe_tff* *tff_Vrth; + *Qbe_Vbei=(*Qbe_Vbei)+Qbe_tff* *tff_Vbei; + *Qbe_Vbci=Qbe_tff* *tff_Vbci; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_Ifi*Ifi_Vrth; *Qbe_Vbei=(*Qbe_Vbei)+Qbe_Ifi*Ifi_Vbei; *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qb*qb_Vrth; @@ -5414,2687 +4149,3 @@ double Ith_Iccp,Ith_Ircx,Ith_Irci,Ith_Irbx,Ith_Irbi,Ith_Ire,Ith_Irbp; } return(0); } -int vbic_4T_et_xf_fj(double *p - ,double *Vrth,double *Vbei,double *Vbex,double *Vbci,double *Vbep,double *Vbcp - ,double *Vrxf,double *Vrcx,double *Vbcx,double *Vrci,double *Vrbx,double *Vrbi,double *Vre - ,double *Vrbp,double *Vrs,double *Vbe,double *Vbc,double *Vcei,double *Vcep,double *Vcxf - ,double *Ibe,double *Ibe_Vrth,double *Ibe_Vbei,double *Ibex,double *Ibex_Vrth,double *Ibex_Vbex,double *Itxf - ,double *Itxf_Vrxf,double *Itzr,double *Itzr_Vrth,double *Itzr_Vbci,double *Itzr_Vbei,double *Ibc,double *Ibc_Vrth - ,double *Ibc_Vbci,double *Ibc_Vrxf,double *Ibc_Vbei,double *Ibep,double *Ibep_Vrth,double *Ibep_Vbep,double *Ircx - ,double *Ircx_Vrcx,double *Ircx_Vrth,double *Irci,double *Irci_Vrci,double *Irci_Vrth,double *Irci_Vbci,double *Irci_Vbcx - ,double *Irbx,double *Irbx_Vrbx,double *Irbx_Vrth,double *Irbi,double *Irbi_Vrbi,double *Irbi_Vrth,double *Irbi_Vbei - ,double *Irbi_Vbci,double *Ire,double *Ire_Vre,double *Ire_Vrth,double *Irbp,double *Irbp_Vrbp,double *Irbp_Vrth - ,double *Irbp_Vbep,double *Irbp_Vbci,double *Qbe,double *Qbe_Vrth,double *Qbe_Vbei,double *Qbe_Vbci,double *Qbex - ,double *Qbex_Vrth,double *Qbex_Vbex,double *Qbc,double *Qbc_Vrth,double *Qbc_Vbci,double *Qbcx,double *Qbcx_Vrth - ,double *Qbcx_Vbcx,double *Qbep,double *Qbep_Vrth,double *Qbep_Vbep,double *Qbep_Vbci,double *Qbeo,double *Qbeo_Vbe - ,double *Qbco,double *Qbco_Vbc,double *Ibcp,double *Ibcp_Vrth,double *Ibcp_Vbcp,double *Iccp,double *Iccp_Vrth - ,double *Iccp_Vbep,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 *Ith_Vrxf,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 *Ixzf,double *Ixzf_Vrth,double *Ixzf_Vbei,double *Ixzf_Vbci - ,double *Ixxf,double *Ixxf_Vrxf,double *Qcxf,double *Qcxf_Vcxf,double *Flxf,double *Flxf_Vrxf,double *SCALE) -{ -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 xvar1_Vrth,IKFatT,IKFatT_xvar1,IKFatT_Vrth,RCXatT,RCXatT_xvar1,RCXatT_Vrth; -double RCIatT,RCIatT_xvar1,RCIatT_Vrth,RBXatT,RBXatT_xvar1,RBXatT_Vrth,RBIatT; -double RBIatT_xvar1,RBIatT_Vrth,REatT,REatT_xvar1,REatT_Vrth,RSatT,RSatT_xvar1; -double RSatT_Vrth,RBPatT,RBPatT_xvar1,RBPatT_Vrth,xvar2,xvar2_rT,xvar2_Vrth; -double xvar3,xvar3_rT,xvar3_Vrth,xvar3_Vtv,xvar4,xvar4_xvar3,xvar4_Vrth; -double xvar1_xvar2,xvar1_xvar4,xvar5,xvar6,xvar6_xvar1,xvar6_Vrth,ISatT; -double ISatT_xvar6,ISatT_Vrth,ISRRatT,ISRRatT_xvar6,ISRRatT_Vrth,ISPatT,ISPatT_xvar6; -double ISPatT_Vrth,IBEIatT,IBEIatT_xvar6,IBEIatT_Vrth,IBENatT,IBENatT_xvar6,IBENatT_Vrth; -double IBCIatT,IBCIatT_xvar6,IBCIatT_Vrth,IBCNatT,IBCNatT_xvar6,IBCNatT_Vrth,IBEIPatT; -double IBEIPatT_xvar6,IBEIPatT_Vrth,IBENPatT,IBENPatT_xvar6,IBENPatT_Vrth,IBCIPatT,IBCIPatT_xvar6; -double IBCIPatT_Vrth,IBCNPatT,IBCNPatT_xvar6,IBCNPatT_Vrth,NFatT,NFatT_dT,NFatT_Vrth; -double NRatT,NRatT_dT,NRatT_Vrth,AVC2atT,AVC2atT_dT,AVC2atT_Vrth,VBBEatT; -double VBBEatT_dT,VBBEatT_Vrth,NBBEatT,NBBEatT_dT,NBBEatT_Vrth,xvar2_Vtv,xvar3_xvar2; -double xvar4_rT,xvar4_Vtv,xvar5_xvar4,xvar5_Vrth,xvar1_xvar3,xvar1_xvar5,psiio; -double psiio_Vtv,psiio_Vrth,psiio_rT,psiio_xvar6,psiin,psiin_psiio,psiin_Vrth; -double psiin_rT,psiin_Vtv,psiin_xvar1,xvar2_psiin,xvar4_xvar1,PEatT,PEatT_psiin; -double PEatT_Vrth,PEatT_Vtv,PEatT_xvar4,PCatT,PCatT_psiin,PCatT_Vrth,PCatT_Vtv; -double PCatT_xvar4,PSatT,PSatT_psiin,PSatT_Vrth,PSatT_Vtv,PSatT_xvar4,xvar1_PEatT; -double xvar2_xvar1,CJEatT,CJEatT_xvar2,CJEatT_Vrth,xvar1_PCatT,CJCatT,CJCatT_xvar2; -double CJCatT_Vrth,CJEPatT,CJEPatT_xvar2,CJEPatT_Vrth,xvar1_PSatT,CJCPatT,CJCPatT_xvar2; -double CJCPatT_Vrth,GAMMatT,GAMMatT_xvar1,GAMMatT_Vrth,GAMMatT_xvar3,VOatT,VOatT_xvar1; -double VOatT_Vrth,xvar1_VBBEatT,xvar1_NBBEatT,xvar1_Vtv,EBBEatT,EBBEatT_xvar1,EBBEatT_Vrth; -double IVEF,IVER,IIKF,IIKF_IKFatT,IIKF_Vrth,IIKR,IIKP; -double IVO,IVO_VOatT,IVO_Vrth,IHRCF,IVTF,IITF,slTF; -double LEP,CEP,dv0,dv0_PEatT,dv0_Vrth,dvh,dvh_Vbei; -double dvh_dv0,dvh_Vrth,pwq,qlo,qlo_PEatT,qlo_Vrth,qlo_Vbei; -double qhi,qhi_dvh,qhi_Vbei,qhi_Vrth,qhi_PEatT,xvar1_Vbei,xvar3_xvar1; -double xvar3_Vbei,qlo_xvar3,qdbe,qdbe_qlo,qdbe_Vrth,qdbe_Vbei,qdbe_qhi; -double mv0,mv0_dv0,mv0_Vrth,vl0,vl0_dv0,vl0_Vrth,vl0_mv0; -double xvar1_vl0,q0,q0_PEatT,q0_Vrth,q0_xvar3,dv,dv_Vbei; -double dv_dv0,dv_Vrth,mv,mv_dv,mv_Vbei,mv_Vrth,vl; -double vl_dv,vl_Vbei,vl_Vrth,vl_mv,vl_dv0,xvar1_vl,qdbe_vl; -double qdbe_vl0,qdbe_q0,dvh_Vbex,qlo_Vbex,qhi_Vbex,xvar1_Vbex,xvar3_Vbex; -double qdbex,qdbex_qlo,qdbex_Vrth,qdbex_Vbex,qdbex_qhi,dv_Vbex,mv_Vbex; -double vl_Vbex,qdbex_vl,qdbex_vl0,qdbex_q0,dv0_PCatT,dvh_Vbci,qlo_PCatT; -double qlo_Vbci,qhi_Vbci,qhi_PCatT,xvar1_Vbci,xvar3_Vbci,qdbc,qdbc_qlo; -double qdbc_Vrth,qdbc_Vbci,qdbc_qhi,vn0,vn0_dv0,vn0_Vrth,vnl0; -double vnl0_vn0,vnl0_Vrth,vl0_vnl0,qlo0,qlo0_PCatT,qlo0_Vrth,qlo0_xvar3; -double vn,vn_Vbci,vn_dv0,vn_Vrth,vnl,vnl_vn,vnl_Vbci; -double vnl_Vrth,vl_vnl,vl_Vbci,sel,sel_vnl,sel_Vbci,sel_Vrth; -double crt,crt_xvar1,crt_Vrth,xvar1_dv0,cmx,cmx_xvar1,cmx_Vrth; -double cl,cl_sel,cl_Vbci,cl_Vrth,cl_crt,cl_cmx,ql; -double ql_Vbci,ql_vl,ql_Vrth,ql_vl0,ql_cl,qdbc_ql,qdbc_qlo0; -double q0_PCatT,dv_Vbci,mv_Vbci,qdbc_vl,qdbc_vl0,qdbc_q0,dvh_Vbep; -double qlo_Vbep,qhi_Vbep,xvar1_Vbep,xvar3_Vbep,qdbep,qdbep_qlo,qdbep_Vrth; -double qdbep_Vbep,qdbep_qhi,vn_Vbep,vnl_Vbep,vl_Vbep,sel_Vbep,cl_Vbep; -double ql_Vbep,qdbep_ql,qdbep_qlo0,dv_Vbep,mv_Vbep,qdbep_vl,qdbep_vl0; -double qdbep_q0,dv0_PSatT,dvh_Vbcp,qlo_PSatT,qlo_Vbcp,qhi_Vbcp,qhi_PSatT; -double xvar1_Vbcp,xvar3_Vbcp,qdbcp,qdbcp_qlo,qdbcp_Vrth,qdbcp_Vbcp,qdbcp_Vbep; -double qdbcp_qhi,q0_PSatT,dv_Vbcp,mv_Vbcp,vl_Vbcp,qdbcp_vl,qdbcp_vl0; -double qdbcp_q0,argi,argi_Vbei,argi_NFatT,argi_Vrth,argi_Vtv,expi; -double expi_argi,expi_Vbei,expi_Vrth,Ifi,Ifi_ISatT,Ifi_Vrth,Ifi_expi; -double Ifi_Vbei,argi_Vbci,argi_NRatT,expi_Vbci,Iri,Iri_ISatT,Iri_Vrth; -double Iri_ISRRatT,Iri_expi,Iri_Vbci,q1z,q1z_qdbe,q1z_Vrth,q1z_Vbei; -double q1z_qdbc,q1z_Vbci,q1,q1_q1z,q1_Vrth,q1_Vbei,q1_Vbci; -double q2,q2_Ifi,q2_Vrth,q2_Vbei,q2_IIKF,q2_Iri,q2_Vbci; -double xvar3_q1,xvar1_q2,xvar4_Vbei,xvar4_Vbci,qb,qb_q1,qb_Vrth; -double qb_Vbei,qb_Vbci,qb_xvar4,xvar2_Vbei,xvar2_Vbci,qb_xvar2,Itzr_Iri; -double Itzr_qb,Itzf,Itzf_Ifi,Itzf_Vrth,Itzf_Vbei,Itzf_qb,Itzf_Vbci; -double Ixzf_Itzf,argi_Vbep,expi_Vbep,argx,argx_Vbci,argx_Vtv,argx_Vrth; -double expx,expx_argx,expx_Vbci,expx_Vrth,Ifp,Ifp_ISPatT,Ifp_Vrth; -double Ifp_expi,Ifp_Vbep,Ifp_expx,Ifp_Vbci,q2p,q2p_Ifp,q2p_Vrth; -double q2p_Vbep,q2p_Vbci,qbp,qbp_q2p,qbp_Vrth,qbp_Vbep,qbp_Vbci; -double argi_Vbcp,expi_Vbcp,Irp,Irp_ISPatT,Irp_Vrth,Irp_expi,Irp_Vbcp; -double Iccp_Ifp,Iccp_Irp,Iccp_qbp,argn,argn_Vbei,argn_Vtv,argn_Vrth; -double expn,expn_argn,expn_Vbei,expn_Vrth,argx_VBBEatT,argx_Vbei,argx_NBBEatT; -double expx_Vbei,Ibe_IBEIatT,Ibe_expi,Ibe_IBENatT,Ibe_expn,Ibe_expx,Ibe_EBBEatT; -double argi_Vbex,expi_Vbex,argn_Vbex,expn_Vbex,argx_Vbex,expx_Vbex,Ibex_IBEIatT; -double Ibex_expi,Ibex_IBENatT,Ibex_expn,Ibex_expx,Ibex_EBBEatT,argn_Vbci,expn_Vbci; -double Ibcj,Ibcj_IBCIatT,Ibcj_Vrth,Ibcj_expi,Ibcj_Vbci,Ibcj_IBCNatT,Ibcj_expn; -double argn_Vbep,expn_Vbep,Ibep_IBEIPatT,Ibep_expi,Ibep_IBENPatT,Ibep_expn,vl_PCatT; -double xvar3_vl,xvar1_AVC2atT,avalf,avalf_vl,avalf_Vrth,avalf_Vbci,avalf_xvar4; -double Igc,Igc_Itxf,Igc_Vrxf,Igc_Itzr,Igc_Vrth,Igc_Vbci,Igc_Vbei; -double Igc_Ibcj,Igc_avalf,Ibc_Ibcj,Ibc_Igc,Ircx_RCXatT,argx_Vbcx,expx_Vbcx; -double Kbci,Kbci_GAMMatT,Kbci_Vrth,Kbci_expi,Kbci_Vbci,Kbcx,Kbcx_GAMMatT; -double Kbcx_Vrth,Kbcx_expx,Kbcx_Vbcx,rKp1,rKp1_Kbci,rKp1_Vrth,rKp1_Vbci; -double rKp1_Kbcx,rKp1_Vbcx,xvar1_rKp1,xvar1_Vbcx,Iohm,Iohm_Vrci,Iohm_Vtv; -double Iohm_Vrth,Iohm_Kbci,Iohm_Vbci,Iohm_Kbcx,Iohm_Vbcx,Iohm_xvar1,Iohm_RCIatT; -double derf,derf_IVO,derf_Vrth,derf_RCIatT,derf_Iohm,derf_Vrci,derf_Vbci; -double derf_Vbcx,Irci_Iohm,Irci_derf,Irbx_RBXatT,Irbi_qb,Irbi_RBIatT,Ire_REatT; -double Irbp_qbp,Irbp_RBPatT,argn_Vbcp,expn_Vbcp,Ibcp_IBCIPatT,Ibcp_expi,Ibcp_IBCNPatT; -double Ibcp_expn,Irs_RSatT,sgIf,rIf,rIf_Ifi,rIf_Vrth,rIf_Vbei; -double mIf,mIf_rIf,mIf_Vrth,mIf_Vbei,tff,tff_q1,tff_Vrth; -double tff_Vbei,tff_Vbci,tff_xvar2,tff_mIf,Qbe_CJEatT,Qbe_qdbe,Qbe_tff; -double Qbe_Ifi,Qbe_qb,Qbex_CJEatT,Qbex_qdbex,Qbc_CJCatT,Qbc_qdbc,Qbc_Iri; -double Qbc_Kbci,Qbcx_Kbcx,Qbep_CJEPatT,Qbep_qdbep,Qbep_Ifp,Qbcp_CJCPatT,Qbcp_qdbcp; -double Ith_Ibe,Ith_Ibc,Ith_Itxf,Ith_Itzr,Ith_Ibex,Ith_Ibep,Ith_Irs; -double Ith_Ibcp,Ith_Iccp,Ith_Ircx,Ith_Irci,Ith_Irbx,Ith_Irbi,Ith_Ire; -double Ith_Irbp,Flxf_Ixxf; - -/* Function and derivative code */ - - Tini=2.731500e+02+p[0]; - Tdev=(2.731500e+02+p[0])+(*Vrth); - Tdev_Vrth=1.0; - Vtv=1.380662e-23*Tdev/1.602189e-19; - Vtv_Tdev=8.617347e-5; - Vtv_Vrth=Vtv_Tdev*Tdev_Vrth; - rT=Tdev/Tini; - rT_Tdev=1.0/Tini; - rT_Vrth=rT_Tdev*Tdev_Vrth; - dT=Tdev-Tini; - dT_Tdev=1.0; - dT_Vrth=dT_Tdev*Tdev_Vrth; - xvar1=pow(rT,p[90]); - xvar1_rT=xvar1*p[90]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - IKFatT=p[53]*xvar1; - IKFatT_xvar1=p[53]; - IKFatT_Vrth=IKFatT_xvar1*xvar1_Vrth; - xvar1=pow(rT,p[91]); - xvar1_rT=xvar1*p[91]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - RCXatT=p[1]*xvar1; - RCXatT_xvar1=p[1]; - RCXatT_Vrth=RCXatT_xvar1*xvar1_Vrth; - xvar1=pow(rT,p[68]); - xvar1_rT=xvar1*p[68]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - RCIatT=p[2]*xvar1; - RCIatT_xvar1=p[2]; - RCIatT_Vrth=RCIatT_xvar1*xvar1_Vrth; - xvar1=pow(rT,p[92]); - xvar1_rT=xvar1*p[92]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - RBXatT=p[6]*xvar1; - RBXatT_xvar1=p[6]; - RBXatT_Vrth=RBXatT_xvar1*xvar1_Vrth; - xvar1=pow(rT,p[67]); - xvar1_rT=xvar1*p[67]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - RBIatT=p[7]*xvar1; - RBIatT_xvar1=p[7]; - RBIatT_Vrth=RBIatT_xvar1*xvar1_Vrth; - xvar1=pow(rT,p[66]); - xvar1_rT=xvar1*p[66]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - REatT=p[8]*xvar1; - REatT_xvar1=p[8]; - REatT_Vrth=REatT_xvar1*xvar1_Vrth; - xvar1=pow(rT,p[69]); - xvar1_rT=xvar1*p[69]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - RSatT=p[9]*xvar1; - RSatT_xvar1=p[9]; - RSatT_Vrth=RSatT_xvar1*xvar1_Vrth; - xvar1=pow(rT,p[93]); - xvar1_rT=xvar1*p[93]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - RBPatT=p[10]*xvar1; - RBPatT_xvar1=p[10]; - RBPatT_Vrth=RBPatT_xvar1*xvar1_Vrth; - xvar2=pow(rT,p[78]); - xvar2_rT=xvar2*p[78]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[71]*(1.0-rT)/Vtv; - xvar3_rT=p[71]/Vtv; - xvar3_Vtv=p[71]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[12]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - ISatT=p[11]*xvar6; - ISatT_xvar6=p[11]; - ISatT_Vrth=ISatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[95]); - xvar2_rT=xvar2*p[95]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[96]*(1.0-rT)/Vtv; - xvar3_rT=p[96]/Vtv; - xvar3_Vtv=p[96]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[13]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - ISRRatT=p[94]*xvar6; - ISRRatT_xvar6=p[94]; - ISRRatT_Vrth=ISRRatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[78]); - xvar2_rT=xvar2*p[78]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[97]*(1.0-rT)/Vtv; - xvar3_rT=p[97]/Vtv; - xvar3_Vtv=p[97]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[44]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - ISPatT=p[42]*xvar6; - ISPatT_xvar6=p[42]; - ISPatT_Vrth=ISPatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[79]); - xvar2_rT=xvar2*p[79]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[72]*(1.0-rT)/Vtv; - xvar3_rT=p[72]/Vtv; - xvar3_Vtv=p[72]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[33]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBEIatT=p[31]*xvar6; - IBEIatT_xvar6=p[31]; - IBEIatT_Vrth=IBEIatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[80]); - xvar2_rT=xvar2*p[80]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[75]*(1.0-rT)/Vtv; - xvar3_rT=p[75]/Vtv; - xvar3_Vtv=p[75]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[35]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBENatT=p[34]*xvar6; - IBENatT_xvar6=p[34]; - IBENatT_Vrth=IBENatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[79]); - xvar2_rT=xvar2*p[79]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[73]*(1.0-rT)/Vtv; - xvar3_rT=p[73]/Vtv; - xvar3_Vtv=p[73]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[37]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBCIatT=p[36]*xvar6; - IBCIatT_xvar6=p[36]; - IBCIatT_Vrth=IBCIatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[80]); - xvar2_rT=xvar2*p[80]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[76]*(1.0-rT)/Vtv; - xvar3_rT=p[76]/Vtv; - xvar3_Vtv=p[76]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[39]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBCNatT=p[38]*xvar6; - IBCNatT_xvar6=p[38]; - IBCNatT_Vrth=IBCNatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[79]); - xvar2_rT=xvar2*p[79]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[73]*(1.0-rT)/Vtv; - xvar3_rT=p[73]/Vtv; - xvar3_Vtv=p[73]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[37]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBEIPatT=p[45]*xvar6; - IBEIPatT_xvar6=p[45]; - IBEIPatT_Vrth=IBEIPatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[80]); - xvar2_rT=xvar2*p[80]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[76]*(1.0-rT)/Vtv; - xvar3_rT=p[76]/Vtv; - xvar3_Vtv=p[76]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[39]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBENPatT=p[46]*xvar6; - IBENPatT_xvar6=p[46]; - IBENPatT_Vrth=IBENPatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[79]); - xvar2_rT=xvar2*p[79]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[74]*(1.0-rT)/Vtv; - xvar3_rT=p[74]/Vtv; - xvar3_Vtv=p[74]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[48]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBCIPatT=p[47]*xvar6; - IBCIPatT_xvar6=p[47]; - IBCIPatT_Vrth=IBCIPatT_xvar6*xvar6_Vrth; - xvar2=pow(rT,p[80]); - xvar2_rT=xvar2*p[80]/rT; - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar3=-p[77]*(1.0-rT)/Vtv; - xvar3_rT=p[77]/Vtv; - xvar3_Vtv=p[77]*(1.0-rT)/(Vtv*Vtv); - xvar3_Vrth=xvar3_rT*rT_Vrth; - xvar3_Vrth=xvar3_Vrth+xvar3_Vtv*Vtv_Vrth; - xvar4=exp(xvar3); - xvar4_xvar3=xvar4; - xvar4_Vrth=xvar4_xvar3*xvar3_Vrth; - xvar1=(xvar2*xvar4); - xvar1_xvar2=xvar4; - xvar1_xvar4=xvar2; - xvar1_Vrth=xvar1_xvar2*xvar2_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar4*xvar4_Vrth; - xvar5=(1.0/p[50]); - xvar6=pow(xvar1,xvar5); - xvar6_xvar1=xvar6*xvar5/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - IBCNPatT=p[49]*xvar6; - IBCNPatT_xvar6=p[49]; - IBCNPatT_Vrth=IBCNPatT_xvar6*xvar6_Vrth; - NFatT=p[12]*(1.0+dT*p[81]); - NFatT_dT=p[12]*p[81]; - NFatT_Vrth=NFatT_dT*dT_Vrth; - NRatT=p[13]*(1.0+dT*p[81]); - NRatT_dT=p[13]*p[81]; - NRatT_Vrth=NRatT_dT*dT_Vrth; - AVC2atT=p[41]*(1.0+dT*p[82]); - AVC2atT_dT=p[41]*p[82]; - AVC2atT_Vrth=AVC2atT_dT*dT_Vrth; - VBBEatT=p[98]*(1.0+dT*(p[101]+dT*p[102])); - VBBEatT_dT=(2.0*dT*p[102]+p[101])*p[98]; - VBBEatT_Vrth=VBBEatT_dT*dT_Vrth; - NBBEatT=p[99]*(1.0+dT*p[103]); - NBBEatT_dT=p[99]*p[103]; - NBBEatT_Vrth=NBBEatT_dT*dT_Vrth; - xvar2=0.5*p[17]*rT/Vtv; - xvar2_rT=0.5*p[17]/Vtv; - xvar2_Vtv=-0.5*p[17]*rT/(Vtv*Vtv); - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; - xvar3=exp(xvar2); - xvar3_xvar2=xvar3; - xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; - xvar4=-0.5*p[17]*rT/Vtv; - xvar4_rT=-0.5*p[17]/Vtv; - xvar4_Vtv=0.5*p[17]*rT/(Vtv*Vtv); - xvar4_Vrth=xvar4_rT*rT_Vrth; - xvar4_Vrth=xvar4_Vrth+xvar4_Vtv*Vtv_Vrth; - xvar5=exp(xvar4); - xvar5_xvar4=xvar5; - xvar5_Vrth=xvar5_xvar4*xvar4_Vrth; - xvar1=xvar3-xvar5; - xvar1_xvar3=1.0; - xvar1_xvar5=-1.0; - xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar5*xvar5_Vrth; - xvar6=log(xvar1); - xvar6_xvar1=1.0/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - psiio=2.0*(Vtv/rT)*xvar6; - psiio_Vtv=2.0*xvar6/rT; - psiio_rT=-2.0*Vtv*xvar6/(rT*rT); - psiio_xvar6=2.0*Vtv/rT; - psiio_Vrth=psiio_Vtv*Vtv_Vrth; - psiio_Vrth=psiio_Vrth+psiio_rT*rT_Vrth; - psiio_Vrth=psiio_Vrth+psiio_xvar6*xvar6_Vrth; - xvar1=log(rT); - xvar1_rT=1.0/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - psiin=psiio*rT-3.0*Vtv*xvar1-p[72]*(rT-1.0); - psiin_psiio=rT; - psiin_rT=psiio-p[72]; - psiin_Vtv=-3.0*xvar1; - psiin_xvar1=-3.0*Vtv; - psiin_Vrth=psiin_psiio*psiio_Vrth; - psiin_Vrth=psiin_Vrth+psiin_rT*rT_Vrth; - psiin_Vrth=psiin_Vrth+psiin_Vtv*Vtv_Vrth; - psiin_Vrth=psiin_Vrth+psiin_xvar1*xvar1_Vrth; - xvar2=-psiin/Vtv; - xvar2_psiin=-1.0/Vtv; - xvar2_Vtv=psiin/(Vtv*Vtv); - xvar2_Vrth=xvar2_psiin*psiin_Vrth; - xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; - xvar3=exp(xvar2); - xvar3_xvar2=xvar3; - xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; - xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); - xvar1_xvar3=1.0/sqrt(4.0*xvar3+1.0); - xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; - xvar4=log(xvar1); - xvar4_xvar1=1.0/xvar1; - xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; - PEatT=psiin+2.0*Vtv*xvar4; - PEatT_psiin=1.0; - PEatT_Vtv=2.0*xvar4; - PEatT_xvar4=2.0*Vtv; - PEatT_Vrth=PEatT_psiin*psiin_Vrth; - PEatT_Vrth=PEatT_Vrth+PEatT_Vtv*Vtv_Vrth; - PEatT_Vrth=PEatT_Vrth+PEatT_xvar4*xvar4_Vrth; - xvar2=0.5*p[24]*rT/Vtv; - xvar2_rT=0.5*p[24]/Vtv; - xvar2_Vtv=-0.5*p[24]*rT/(Vtv*Vtv); - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; - xvar3=exp(xvar2); - xvar3_xvar2=xvar3; - xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; - xvar4=-0.5*p[24]*rT/Vtv; - xvar4_rT=-0.5*p[24]/Vtv; - xvar4_Vtv=0.5*p[24]*rT/(Vtv*Vtv); - xvar4_Vrth=xvar4_rT*rT_Vrth; - xvar4_Vrth=xvar4_Vrth+xvar4_Vtv*Vtv_Vrth; - xvar5=exp(xvar4); - xvar5_xvar4=xvar5; - xvar5_Vrth=xvar5_xvar4*xvar4_Vrth; - xvar1=xvar3-xvar5; - xvar1_xvar3=1.0; - xvar1_xvar5=-1.0; - xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar5*xvar5_Vrth; - xvar6=log(xvar1); - xvar6_xvar1=1.0/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - psiio=2.0*(Vtv/rT)*xvar6; - psiio_Vtv=2.0*xvar6/rT; - psiio_rT=-2.0*Vtv*xvar6/(rT*rT); - psiio_xvar6=2.0*Vtv/rT; - psiio_Vrth=psiio_Vtv*Vtv_Vrth; - psiio_Vrth=psiio_Vrth+psiio_rT*rT_Vrth; - psiio_Vrth=psiio_Vrth+psiio_xvar6*xvar6_Vrth; - xvar1=log(rT); - xvar1_rT=1.0/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - psiin=psiio*rT-3.0*Vtv*xvar1-p[73]*(rT-1.0); - psiin_psiio=rT; - psiin_rT=psiio-p[73]; - psiin_Vtv=-3.0*xvar1; - psiin_xvar1=-3.0*Vtv; - psiin_Vrth=psiin_psiio*psiio_Vrth; - psiin_Vrth=psiin_Vrth+psiin_rT*rT_Vrth; - psiin_Vrth=psiin_Vrth+psiin_Vtv*Vtv_Vrth; - psiin_Vrth=psiin_Vrth+psiin_xvar1*xvar1_Vrth; - xvar2=-psiin/Vtv; - xvar2_psiin=-1.0/Vtv; - xvar2_Vtv=psiin/(Vtv*Vtv); - xvar2_Vrth=xvar2_psiin*psiin_Vrth; - xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; - xvar3=exp(xvar2); - xvar3_xvar2=xvar3; - xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; - xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); - xvar1_xvar3=1.0/sqrt(4.0*xvar3+1.0); - xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; - xvar4=log(xvar1); - xvar4_xvar1=1.0/xvar1; - xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; - PCatT=psiin+2.0*Vtv*xvar4; - PCatT_psiin=1.0; - PCatT_Vtv=2.0*xvar4; - PCatT_xvar4=2.0*Vtv; - PCatT_Vrth=PCatT_psiin*psiin_Vrth; - PCatT_Vrth=PCatT_Vrth+PCatT_Vtv*Vtv_Vrth; - PCatT_Vrth=PCatT_Vrth+PCatT_xvar4*xvar4_Vrth; - xvar2=0.5*p[28]*rT/Vtv; - xvar2_rT=0.5*p[28]/Vtv; - xvar2_Vtv=-0.5*p[28]*rT/(Vtv*Vtv); - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; - xvar3=exp(xvar2); - xvar3_xvar2=xvar3; - xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; - xvar4=-0.5*p[28]*rT/Vtv; - xvar4_rT=-0.5*p[28]/Vtv; - xvar4_Vtv=0.5*p[28]*rT/(Vtv*Vtv); - xvar4_Vrth=xvar4_rT*rT_Vrth; - xvar4_Vrth=xvar4_Vrth+xvar4_Vtv*Vtv_Vrth; - xvar5=exp(xvar4); - xvar5_xvar4=xvar5; - xvar5_Vrth=xvar5_xvar4*xvar4_Vrth; - xvar1=xvar3-xvar5; - xvar1_xvar3=1.0; - xvar1_xvar5=-1.0; - xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar5*xvar5_Vrth; - xvar6=log(xvar1); - xvar6_xvar1=1.0/xvar1; - xvar6_Vrth=xvar6_xvar1*xvar1_Vrth; - psiio=2.0*(Vtv/rT)*xvar6; - psiio_Vtv=2.0*xvar6/rT; - psiio_rT=-2.0*Vtv*xvar6/(rT*rT); - psiio_xvar6=2.0*Vtv/rT; - psiio_Vrth=psiio_Vtv*Vtv_Vrth; - psiio_Vrth=psiio_Vrth+psiio_rT*rT_Vrth; - psiio_Vrth=psiio_Vrth+psiio_xvar6*xvar6_Vrth; - xvar1=log(rT); - xvar1_rT=1.0/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - psiin=psiio*rT-3.0*Vtv*xvar1-p[74]*(rT-1.0); - psiin_psiio=rT; - psiin_rT=psiio-p[74]; - psiin_Vtv=-3.0*xvar1; - psiin_xvar1=-3.0*Vtv; - psiin_Vrth=psiin_psiio*psiio_Vrth; - psiin_Vrth=psiin_Vrth+psiin_rT*rT_Vrth; - psiin_Vrth=psiin_Vrth+psiin_Vtv*Vtv_Vrth; - psiin_Vrth=psiin_Vrth+psiin_xvar1*xvar1_Vrth; - xvar2=-psiin/Vtv; - xvar2_psiin=-1.0/Vtv; - xvar2_Vtv=psiin/(Vtv*Vtv); - xvar2_Vrth=xvar2_psiin*psiin_Vrth; - xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; - xvar3=exp(xvar2); - xvar3_xvar2=xvar3; - xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; - xvar1=0.5*(1.0+sqrt(1.0+4.0*xvar3)); - xvar1_xvar3=1.0/sqrt(4.0*xvar3+1.0); - xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; - xvar4=log(xvar1); - xvar4_xvar1=1.0/xvar1; - xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; - PSatT=psiin+2.0*Vtv*xvar4; - PSatT_psiin=1.0; - PSatT_Vtv=2.0*xvar4; - PSatT_xvar4=2.0*Vtv; - PSatT_Vrth=PSatT_psiin*psiin_Vrth; - PSatT_Vrth=PSatT_Vrth+PSatT_Vtv*Vtv_Vrth; - PSatT_Vrth=PSatT_Vrth+PSatT_xvar4*xvar4_Vrth; - xvar1=p[17]/PEatT; - xvar1_PEatT=-p[17]/(PEatT*PEatT); - xvar1_Vrth=xvar1_PEatT*PEatT_Vrth; - xvar2=pow(xvar1,p[18]); - xvar2_xvar1=xvar2*p[18]/xvar1; - xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; - CJEatT=p[16]*xvar2; - CJEatT_xvar2=p[16]; - CJEatT_Vrth=CJEatT_xvar2*xvar2_Vrth; - xvar1=p[24]/PCatT; - xvar1_PCatT=-p[24]/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=pow(xvar1,p[25]); - xvar2_xvar1=xvar2*p[25]/xvar1; - xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; - CJCatT=p[21]*xvar2; - CJCatT_xvar2=p[21]; - CJCatT_Vrth=CJCatT_xvar2*xvar2_Vrth; - xvar1=p[24]/PCatT; - xvar1_PCatT=-p[24]/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=pow(xvar1,p[25]); - xvar2_xvar1=xvar2*p[25]/xvar1; - xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; - CJEPatT=p[23]*xvar2; - CJEPatT_xvar2=p[23]; - CJEPatT_Vrth=CJEPatT_xvar2*xvar2_Vrth; - xvar1=p[28]/PSatT; - xvar1_PSatT=-p[28]/(PSatT*PSatT); - xvar1_Vrth=xvar1_PSatT*PSatT_Vrth; - xvar2=pow(xvar1,p[29]); - xvar2_xvar1=xvar2*p[29]/xvar1; - xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; - CJCPatT=p[27]*xvar2; - CJCPatT_xvar2=p[27]; - CJCPatT_Vrth=CJCPatT_xvar2*xvar2_Vrth; - xvar1=pow(rT,p[78]); - xvar1_rT=xvar1*p[78]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - xvar2=-p[71]*(1.0-rT)/Vtv; - xvar2_rT=p[71]/Vtv; - xvar2_Vtv=p[71]*(1.0-rT)/(Vtv*Vtv); - xvar2_Vrth=xvar2_rT*rT_Vrth; - xvar2_Vrth=xvar2_Vrth+xvar2_Vtv*Vtv_Vrth; - xvar3=exp(xvar2); - xvar3_xvar2=xvar3; - xvar3_Vrth=xvar3_xvar2*xvar2_Vrth; - GAMMatT=p[4]*xvar1*xvar3; - GAMMatT_xvar1=p[4]*xvar3; - GAMMatT_xvar3=p[4]*xvar1; - GAMMatT_Vrth=GAMMatT_xvar1*xvar1_Vrth; - GAMMatT_Vrth=GAMMatT_Vrth+GAMMatT_xvar3*xvar3_Vrth; - xvar1=pow(rT,p[70]); - xvar1_rT=xvar1*p[70]/rT; - xvar1_Vrth=xvar1_rT*rT_Vrth; - VOatT=p[3]*xvar1; - VOatT_xvar1=p[3]; - VOatT_Vrth=VOatT_xvar1*xvar1_Vrth; - xvar1=-VBBEatT/(NBBEatT*Vtv); - xvar1_VBBEatT=-1.0/(NBBEatT*Vtv); - xvar1_NBBEatT=VBBEatT/((NBBEatT*NBBEatT)*Vtv); - xvar1_Vtv=VBBEatT/(NBBEatT*(Vtv*Vtv)); - xvar1_Vrth=xvar1_VBBEatT*VBBEatT_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_NBBEatT*NBBEatT_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_Vtv*Vtv_Vrth; - EBBEatT=exp(xvar1); - EBBEatT_xvar1=EBBEatT; - EBBEatT_Vrth=EBBEatT_xvar1*xvar1_Vrth; - if(p[51]>0.0){ - IVEF=1.0/p[51]; - }else{ - IVEF=0.0; - } - if(p[52]>0.0){ - IVER=1.0/p[52]; - }else{ - IVER=0.0; - } - if(p[53]>0.0){ - IIKF=1.0/IKFatT; - IIKF_IKFatT=-1.0/(IKFatT*IKFatT); - IIKF_Vrth=IIKF_IKFatT*IKFatT_Vrth; - }else{ - IIKF=0.0; - IIKF_Vrth=0.0; - } - if(p[54]>0.0){ - IIKR=1.0/p[54]; - }else{ - IIKR=0.0; - } - if(p[55]>0.0){ - IIKP=1.0/p[55]; - }else{ - IIKP=0.0; - } - if(p[3]>0.0){ - IVO=1.0/VOatT; - IVO_VOatT=-1.0/(VOatT*VOatT); - IVO_Vrth=IVO_VOatT*VOatT_Vrth; - }else{ - IVO=0.0; - IVO_Vrth=0.0; - } - if(p[5]>0.0){ - IHRCF=1.0/p[5]; - }else{ - IHRCF=0.0; - } - if(p[59]>0.0){ - IVTF=1.0/p[59]; - }else{ - IVTF=0.0; - } - if(p[60]>0.0){ - IITF=1.0/p[60]; - }else{ - IITF=0.0; - } - if(p[60]>0.0){ - slTF=0.0; - }else{ - slTF=1.0; - } - if(p[62]>0.0){ - LEP=p[62]/3.0; - }else{ - LEP=0.0; - } - if(p[62]>0.0){ - CEP=p[62]; - }else{ - CEP=0.0; - } - dv0=-PEatT*p[14]; - dv0_PEatT=-p[14]; - dv0_Vrth=dv0_PEatT*PEatT_Vrth; - if(p[19]<=0.0){ - dvh=(*Vbei)+dv0; - dvh_Vbei=1.0; - dvh_dv0=1.0; - dvh_Vrth=dvh_dv0*dv0_Vrth; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[18]); - pwq=pow(xvar1,xvar2); - qlo=PEatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[18]); - qlo_PEatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[18]); - qlo_Vbei=0.0; - qlo_Vrth=qlo_PEatT*PEatT_Vrth; - qhi=dvh*(1.0-p[14]+0.5*p[18]*dvh/PEatT)*pwq; - qhi_dvh=(0.5*dvh*p[18]/PEatT-p[14]+1.0)*pwq+0.5*dvh*p[18]*pwq/PEatT; - qhi_PEatT=-0.5*(dvh*dvh)*p[18]*pwq/(PEatT*PEatT); - qhi_Vbei=qhi_dvh*dvh_Vbei; - qhi_Vrth=qhi_dvh*dvh_Vrth; - qhi_Vrth=qhi_Vrth+qhi_PEatT*PEatT_Vrth; - }else{ - xvar1=(1.0-(*Vbei)/PEatT); - xvar1_Vbei=-1.0/PEatT; - xvar1_PEatT=(*Vbei)/(PEatT*PEatT); - xvar1_Vrth=xvar1_PEatT*PEatT_Vrth; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbei=xvar3_xvar1*xvar1_Vbei; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PEatT*(1.0-xvar3)/(1.0-p[18]); - qlo_PEatT=(1.0-xvar3)/(1.0-p[18]); - qlo_xvar3=-PEatT/(1.0-p[18]); - qlo_Vrth=qlo_PEatT*PEatT_Vrth; - qlo_Vbei=qlo_xvar3*xvar3_Vbei; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - qhi=0.0; - qhi_Vbei=0.0; - qhi_Vrth=0.0; - } - qdbe=qlo+qhi; - qdbe_qlo=1.0; - qdbe_qhi=1.0; - qdbe_Vrth=qdbe_qlo*qlo_Vrth; - qdbe_Vbei=qdbe_qlo*qlo_Vbei; - qdbe_Vbei=qdbe_Vbei+qdbe_qhi*qhi_Vbei; - qdbe_Vrth=qdbe_Vrth+qdbe_qhi*qhi_Vrth; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[19]*p[19]); - mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[19]*p[19])); - mv0_Vrth=mv0_dv0*dv0_Vrth; - vl0=-0.5*(dv0+mv0); - vl0_dv0=-0.5; - vl0_mv0=-0.5; - vl0_Vrth=vl0_dv0*dv0_Vrth; - vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; - xvar1=(1.0-vl0/PEatT); - xvar1_vl0=-1.0/PEatT; - xvar1_PEatT=vl0/(PEatT*PEatT); - xvar1_Vrth=xvar1_vl0*vl0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - q0=-PEatT*xvar3/(1.0-p[18]); - q0_PEatT=-xvar3/(1.0-p[18]); - q0_xvar3=-PEatT/(1.0-p[18]); - q0_Vrth=q0_PEatT*PEatT_Vrth; - q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; - dv=(*Vbei)+dv0; - dv_Vbei=1.0; - dv_dv0=1.0; - dv_Vrth=dv_dv0*dv0_Vrth; - mv=sqrt(dv*dv+4.0*p[19]*p[19]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[19]*p[19])); - mv_Vbei=mv_dv*dv_Vbei; - mv_Vrth=mv_dv*dv_Vrth; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_dv0=-1.0; - vl_Vbei=vl_dv*dv_Vbei; - vl_Vrth=vl_dv*dv_Vrth; - vl_Vbei=vl_Vbei+vl_mv*mv_Vbei; - vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; - vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; - xvar1=(1.0-vl/PEatT); - xvar1_vl=-1.0/PEatT; - xvar1_PEatT=vl/(PEatT*PEatT); - xvar1_Vbei=xvar1_vl*vl_Vbei; - xvar1_Vrth=xvar1_vl*vl_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbei=xvar3_xvar1*xvar1_Vbei; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=-PEatT*xvar3/(1.0-p[18]); - qlo_PEatT=-xvar3/(1.0-p[18]); - qlo_xvar3=-PEatT/(1.0-p[18]); - qlo_Vrth=qlo_PEatT*PEatT_Vrth; - qlo_Vbei=qlo_xvar3*xvar3_Vbei; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - xvar1=(1.0-p[14]); - xvar2=(-p[18]); - xvar3=pow(xvar1,xvar2); - qdbe=qlo+xvar3*((*Vbei)-vl+vl0)-q0; - qdbe_qlo=1.0; - qdbe_Vbei=xvar3; - qdbe_vl=-xvar3; - qdbe_vl0=xvar3; - qdbe_q0=-1.0; - qdbe_Vrth=qdbe_qlo*qlo_Vrth; - qdbe_Vbei=qdbe_Vbei+qdbe_qlo*qlo_Vbei; - qdbe_Vbei=qdbe_Vbei+qdbe_vl*vl_Vbei; - qdbe_Vrth=qdbe_Vrth+qdbe_vl*vl_Vrth; - qdbe_Vrth=qdbe_Vrth+qdbe_vl0*vl0_Vrth; - qdbe_Vrth=qdbe_Vrth+qdbe_q0*q0_Vrth; - } - dv0=-PEatT*p[14]; - dv0_PEatT=-p[14]; - dv0_Vrth=dv0_PEatT*PEatT_Vrth; - if(p[19]<=0.0){ - dvh=(*Vbex)+dv0; - dvh_Vbex=1.0; - dvh_dv0=1.0; - dvh_Vrth=dvh_dv0*dv0_Vrth; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[18]); - pwq=pow(xvar1,xvar2); - qlo=PEatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[18]); - qlo_PEatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[18]); - qlo_Vbex=0.0; - qlo_Vrth=qlo_PEatT*PEatT_Vrth; - qhi=dvh*(1.0-p[14]+0.5*p[18]*dvh/PEatT)*pwq; - qhi_dvh=(0.5*dvh*p[18]/PEatT-p[14]+1.0)*pwq+0.5*dvh*p[18]*pwq/PEatT; - qhi_PEatT=-0.5*(dvh*dvh)*p[18]*pwq/(PEatT*PEatT); - qhi_Vbex=qhi_dvh*dvh_Vbex; - qhi_Vrth=qhi_dvh*dvh_Vrth; - qhi_Vrth=qhi_Vrth+qhi_PEatT*PEatT_Vrth; - }else{ - xvar1=(1.0-(*Vbex)/PEatT); - xvar1_Vbex=-1.0/PEatT; - xvar1_PEatT=(*Vbex)/(PEatT*PEatT); - xvar1_Vrth=xvar1_PEatT*PEatT_Vrth; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbex=xvar3_xvar1*xvar1_Vbex; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PEatT*(1.0-xvar3)/(1.0-p[18]); - qlo_PEatT=(1.0-xvar3)/(1.0-p[18]); - qlo_xvar3=-PEatT/(1.0-p[18]); - qlo_Vrth=qlo_PEatT*PEatT_Vrth; - qlo_Vbex=qlo_xvar3*xvar3_Vbex; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - qhi=0.0; - qhi_Vbex=0.0; - qhi_Vrth=0.0; - } - qdbex=qlo+qhi; - qdbex_qlo=1.0; - qdbex_qhi=1.0; - qdbex_Vrth=qdbex_qlo*qlo_Vrth; - qdbex_Vbex=qdbex_qlo*qlo_Vbex; - qdbex_Vbex=qdbex_Vbex+qdbex_qhi*qhi_Vbex; - qdbex_Vrth=qdbex_Vrth+qdbex_qhi*qhi_Vrth; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[19]*p[19]); - mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[19]*p[19])); - mv0_Vrth=mv0_dv0*dv0_Vrth; - vl0=-0.5*(dv0+mv0); - vl0_dv0=-0.5; - vl0_mv0=-0.5; - vl0_Vrth=vl0_dv0*dv0_Vrth; - vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; - xvar1=(1.0-vl0/PEatT); - xvar1_vl0=-1.0/PEatT; - xvar1_PEatT=vl0/(PEatT*PEatT); - xvar1_Vrth=xvar1_vl0*vl0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - q0=-PEatT*xvar3/(1.0-p[18]); - q0_PEatT=-xvar3/(1.0-p[18]); - q0_xvar3=-PEatT/(1.0-p[18]); - q0_Vrth=q0_PEatT*PEatT_Vrth; - q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; - dv=(*Vbex)+dv0; - dv_Vbex=1.0; - dv_dv0=1.0; - dv_Vrth=dv_dv0*dv0_Vrth; - mv=sqrt(dv*dv+4.0*p[19]*p[19]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[19]*p[19])); - mv_Vbex=mv_dv*dv_Vbex; - mv_Vrth=mv_dv*dv_Vrth; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_dv0=-1.0; - vl_Vbex=vl_dv*dv_Vbex; - vl_Vrth=vl_dv*dv_Vrth; - vl_Vbex=vl_Vbex+vl_mv*mv_Vbex; - vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; - vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; - xvar1=(1.0-vl/PEatT); - xvar1_vl=-1.0/PEatT; - xvar1_PEatT=vl/(PEatT*PEatT); - xvar1_Vbex=xvar1_vl*vl_Vbex; - xvar1_Vrth=xvar1_vl*vl_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PEatT*PEatT_Vrth; - xvar2=(1.0-p[18]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbex=xvar3_xvar1*xvar1_Vbex; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=-PEatT*xvar3/(1.0-p[18]); - qlo_PEatT=-xvar3/(1.0-p[18]); - qlo_xvar3=-PEatT/(1.0-p[18]); - qlo_Vrth=qlo_PEatT*PEatT_Vrth; - qlo_Vbex=qlo_xvar3*xvar3_Vbex; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - xvar1=(1.0-p[14]); - xvar2=(-p[18]); - xvar3=pow(xvar1,xvar2); - qdbex=qlo+xvar3*((*Vbex)-vl+vl0)-q0; - qdbex_qlo=1.0; - qdbex_Vbex=xvar3; - qdbex_vl=-xvar3; - qdbex_vl0=xvar3; - qdbex_q0=-1.0; - qdbex_Vrth=qdbex_qlo*qlo_Vrth; - qdbex_Vbex=qdbex_Vbex+qdbex_qlo*qlo_Vbex; - qdbex_Vbex=qdbex_Vbex+qdbex_vl*vl_Vbex; - qdbex_Vrth=qdbex_Vrth+qdbex_vl*vl_Vrth; - qdbex_Vrth=qdbex_Vrth+qdbex_vl0*vl0_Vrth; - qdbex_Vrth=qdbex_Vrth+qdbex_q0*q0_Vrth; - } - dv0=-PCatT*p[14]; - dv0_PCatT=-p[14]; - dv0_Vrth=dv0_PCatT*PCatT_Vrth; - if(p[26]<=0.0){ - dvh=(*Vbci)+dv0; - dvh_Vbci=1.0; - dvh_dv0=1.0; - dvh_Vrth=dvh_dv0*dv0_Vrth; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[25]); - pwq=pow(xvar1,xvar2); - qlo=PCatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[25]); - qlo_PCatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[25]); - qlo_Vbci=0.0; - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qhi=dvh*(1.0-p[14]+0.5*p[25]*dvh/PCatT)*pwq; - qhi_dvh=(0.5*dvh*p[25]/PCatT-p[14]+1.0)*pwq+0.5*dvh*p[25]*pwq/PCatT; - qhi_PCatT=-0.5*(dvh*dvh)*p[25]*pwq/(PCatT*PCatT); - qhi_Vbci=qhi_dvh*dvh_Vbci; - qhi_Vrth=qhi_dvh*dvh_Vrth; - qhi_Vrth=qhi_Vrth+qhi_PCatT*PCatT_Vrth; - }else{ - if((p[85]>0.0)&&((*Vbci)<-p[85])){ - xvar1=(1.0+p[85]/PCatT); - xvar1_PCatT=-p[85]/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PCatT*(1.0-xvar3*(1.0-((1.0-p[25])*((*Vbci)+p[85]))/(PCatT+p[85])))/(1.0-p[25]); - qlo_PCatT=(1.0-(1.0-(1.0-p[25])*(p[85]+(*Vbci))/(p[85]+PCatT))*xvar3)/(1.0-p[25])-PCatT*(p[85]+(*Vbci))*xvar3/((p[85]+PCatT)*(p[85]+PCatT)); - qlo_xvar3=PCatT*((1.0-p[25])*(p[85]+(*Vbci))/(p[85]+PCatT)-1.0)/(1.0-p[25]); - qlo_Vbci=PCatT*xvar3/(p[85]+PCatT); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - }else{ - xvar1=(1.0-(*Vbci)/PCatT); - xvar1_Vbci=-1.0/PCatT; - xvar1_PCatT=(*Vbci)/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); - qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-PCatT/(1.0-p[25]); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vbci=qlo_xvar3*xvar3_Vbci; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - } - qhi=0.0; - qhi_Vbci=0.0; - qhi_Vrth=0.0; - } - qdbc=qlo+qhi; - qdbc_qlo=1.0; - qdbc_qhi=1.0; - qdbc_Vrth=qdbc_qlo*qlo_Vrth; - qdbc_Vbci=qdbc_qlo*qlo_Vbci; - qdbc_Vbci=qdbc_Vbci+qdbc_qhi*qhi_Vbci; - qdbc_Vrth=qdbc_Vrth+qdbc_qhi*qhi_Vrth; - }else{ - if((p[85]>0.0)&&(p[86]>0.0)){ - vn0=(p[85]+dv0)/(p[85]-dv0); - vn0_dv0=(p[85]+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); - vn0_Vrth=vn0_dv0*dv0_Vrth; - vnl0=2.0*vn0/(sqrt((vn0-1.0)*(vn0-1.0)+4.0*p[26]*p[26])+sqrt((vn0+1.0)*(vn0+1.0)+4.0*p[86]*p[86])); - vnl0_vn0=2.0/(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))-2.0*vn0*((vn0+1.0)/sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+(vn0-1.0)/sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))); - vnl0_Vrth=vnl0_vn0*vn0_Vrth; - vl0=0.5*(vnl0*(p[85]-dv0)-p[85]-dv0); - vl0_vnl0=0.5*(p[85]-dv0); - vl0_dv0=0.5*(-vnl0-1.0); - vl0_Vrth=vl0_vnl0*vnl0_Vrth; - vl0_Vrth=vl0_Vrth+vl0_dv0*dv0_Vrth; - xvar1=(1.0-vl0/PCatT); - xvar1_vl0=-1.0/PCatT; - xvar1_PCatT=vl0/(PCatT*PCatT); - xvar1_Vrth=xvar1_vl0*vl0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo0=PCatT*(1.0-xvar3)/(1.0-p[25]); - qlo0_PCatT=(1.0-xvar3)/(1.0-p[25]); - qlo0_xvar3=-PCatT/(1.0-p[25]); - qlo0_Vrth=qlo0_PCatT*PCatT_Vrth; - qlo0_Vrth=qlo0_Vrth+qlo0_xvar3*xvar3_Vrth; - vn=(2.0*(*Vbci)+p[85]+dv0)/(p[85]-dv0); - vn_Vbci=2.0/(p[85]-dv0); - vn_dv0=(p[85]+2.0*(*Vbci)+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); - vn_Vrth=vn_dv0*dv0_Vrth; - vnl=2.0*vn/(sqrt((vn-1.0)*(vn-1.0)+4.0*p[26]*p[26])+sqrt((vn+1.0)*(vn+1.0)+4.0*p[86]*p[86])); - vnl_vn=2.0/(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))-2.0*vn*((vn+1.0)/sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+(vn-1.0)/sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))); - vnl_Vbci=vnl_vn*vn_Vbci; - vnl_Vrth=vnl_vn*vn_Vrth; - vl=0.5*(vnl*(p[85]-dv0)-p[85]-dv0); - vl_vnl=0.5*(p[85]-dv0); - vl_dv0=0.5*(-vnl-1.0); - vl_Vbci=vl_vnl*vnl_Vbci; - vl_Vrth=vl_vnl*vnl_Vrth; - vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; - xvar1=(1.0-vl/PCatT); - xvar1_vl=-1.0/PCatT; - xvar1_PCatT=vl/(PCatT*PCatT); - xvar1_Vbci=xvar1_vl*vl_Vbci; - xvar1_Vrth=xvar1_vl*vl_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); - qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-PCatT/(1.0-p[25]); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vbci=qlo_xvar3*xvar3_Vbci; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - sel=0.5*(vnl+1.0); - sel_vnl=0.5; - sel_Vbci=sel_vnl*vnl_Vbci; - sel_Vrth=sel_vnl*vnl_Vrth; - xvar1=(1.0+p[85]/PCatT); - xvar1_PCatT=-p[85]/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=(-p[25]); - crt=pow(xvar1,xvar2); - crt_xvar1=crt*xvar2/xvar1; - crt_Vrth=crt_xvar1*xvar1_Vrth; - xvar1=(1.0+dv0/PCatT); - xvar1_dv0=1.0/PCatT; - xvar1_PCatT=-dv0/(PCatT*PCatT); - xvar1_Vrth=xvar1_dv0*dv0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(-p[25]); - cmx=pow(xvar1,xvar2); - cmx_xvar1=cmx*xvar2/xvar1; - cmx_Vrth=cmx_xvar1*xvar1_Vrth; - cl=(1.0-sel)*crt+sel*cmx; - cl_sel=cmx-crt; - cl_crt=1.0-sel; - cl_cmx=sel; - cl_Vbci=cl_sel*sel_Vbci; - cl_Vrth=cl_sel*sel_Vrth; - cl_Vrth=cl_Vrth+cl_crt*crt_Vrth; - cl_Vrth=cl_Vrth+cl_cmx*cmx_Vrth; - ql=((*Vbci)-vl+vl0)*cl; - ql_Vbci=cl; - ql_vl=-cl; - ql_vl0=cl; - ql_cl=vl0-vl+(*Vbci); - ql_Vbci=ql_Vbci+ql_vl*vl_Vbci; - ql_Vrth=ql_vl*vl_Vrth; - ql_Vrth=ql_Vrth+ql_vl0*vl0_Vrth; - ql_Vbci=ql_Vbci+ql_cl*cl_Vbci; - ql_Vrth=ql_Vrth+ql_cl*cl_Vrth; - qdbc=ql+qlo-qlo0; - qdbc_ql=1.0; - qdbc_qlo=1.0; - qdbc_qlo0=-1.0; - qdbc_Vbci=qdbc_ql*ql_Vbci; - qdbc_Vrth=qdbc_ql*ql_Vrth; - qdbc_Vrth=qdbc_Vrth+qdbc_qlo*qlo_Vrth; - qdbc_Vbci=qdbc_Vbci+qdbc_qlo*qlo_Vbci; - qdbc_Vrth=qdbc_Vrth+qdbc_qlo0*qlo0_Vrth; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[26]*p[26]); - mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[26]*p[26])); - mv0_Vrth=mv0_dv0*dv0_Vrth; - vl0=-0.5*(dv0+mv0); - vl0_dv0=-0.5; - vl0_mv0=-0.5; - vl0_Vrth=vl0_dv0*dv0_Vrth; - vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; - xvar1=(1.0-vl0/PCatT); - xvar1_vl0=-1.0/PCatT; - xvar1_PCatT=vl0/(PCatT*PCatT); - xvar1_Vrth=xvar1_vl0*vl0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - q0=-PCatT*xvar3/(1.0-p[25]); - q0_PCatT=-xvar3/(1.0-p[25]); - q0_xvar3=-PCatT/(1.0-p[25]); - q0_Vrth=q0_PCatT*PCatT_Vrth; - q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; - dv=(*Vbci)+dv0; - dv_Vbci=1.0; - dv_dv0=1.0; - dv_Vrth=dv_dv0*dv0_Vrth; - mv=sqrt(dv*dv+4.0*p[26]*p[26]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[26]*p[26])); - mv_Vbci=mv_dv*dv_Vbci; - mv_Vrth=mv_dv*dv_Vrth; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_dv0=-1.0; - vl_Vbci=vl_dv*dv_Vbci; - vl_Vrth=vl_dv*dv_Vrth; - vl_Vbci=vl_Vbci+vl_mv*mv_Vbci; - vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; - vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; - xvar1=(1.0-vl/PCatT); - xvar1_vl=-1.0/PCatT; - xvar1_PCatT=vl/(PCatT*PCatT); - xvar1_Vbci=xvar1_vl*vl_Vbci; - xvar1_Vrth=xvar1_vl*vl_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbci=xvar3_xvar1*xvar1_Vbci; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=-PCatT*xvar3/(1.0-p[25]); - qlo_PCatT=-xvar3/(1.0-p[25]); - qlo_xvar3=-PCatT/(1.0-p[25]); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vbci=qlo_xvar3*xvar3_Vbci; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - xvar1=(1.0-p[14]); - xvar2=(-p[25]); - xvar3=pow(xvar1,xvar2); - qdbc=qlo+xvar3*((*Vbci)-vl+vl0)-q0; - qdbc_qlo=1.0; - qdbc_Vbci=xvar3; - qdbc_vl=-xvar3; - qdbc_vl0=xvar3; - qdbc_q0=-1.0; - qdbc_Vrth=qdbc_qlo*qlo_Vrth; - qdbc_Vbci=qdbc_Vbci+qdbc_qlo*qlo_Vbci; - qdbc_Vbci=qdbc_Vbci+qdbc_vl*vl_Vbci; - qdbc_Vrth=qdbc_Vrth+qdbc_vl*vl_Vrth; - qdbc_Vrth=qdbc_Vrth+qdbc_vl0*vl0_Vrth; - qdbc_Vrth=qdbc_Vrth+qdbc_q0*q0_Vrth; - } - } - dv0=-PCatT*p[14]; - dv0_PCatT=-p[14]; - dv0_Vrth=dv0_PCatT*PCatT_Vrth; - if(p[26]<=0.0){ - dvh=(*Vbep)+dv0; - dvh_Vbep=1.0; - dvh_dv0=1.0; - dvh_Vrth=dvh_dv0*dv0_Vrth; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[25]); - pwq=pow(xvar1,xvar2); - qlo=PCatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[25]); - qlo_PCatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[25]); - qlo_Vbep=0.0; - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qhi=dvh*(1.0-p[14]+0.5*p[25]*dvh/PCatT)*pwq; - qhi_dvh=(0.5*dvh*p[25]/PCatT-p[14]+1.0)*pwq+0.5*dvh*p[25]*pwq/PCatT; - qhi_PCatT=-0.5*(dvh*dvh)*p[25]*pwq/(PCatT*PCatT); - qhi_Vbep=qhi_dvh*dvh_Vbep; - qhi_Vrth=qhi_dvh*dvh_Vrth; - qhi_Vrth=qhi_Vrth+qhi_PCatT*PCatT_Vrth; - }else{ - if((p[85]>0.0)&&((*Vbep)<-p[85])){ - xvar1=(1.0+p[85]/PCatT); - xvar1_PCatT=-p[85]/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PCatT*(1.0-xvar3*(1.0-((1.0-p[25])*((*Vbep)+p[85]))/(PCatT+p[85])))/(1.0-p[25]); - qlo_PCatT=(1.0-(1.0-(1.0-p[25])*(p[85]+(*Vbep))/(p[85]+PCatT))*xvar3)/(1.0-p[25])-PCatT*(p[85]+(*Vbep))*xvar3/((p[85]+PCatT)*(p[85]+PCatT)); - qlo_xvar3=PCatT*((1.0-p[25])*(p[85]+(*Vbep))/(p[85]+PCatT)-1.0)/(1.0-p[25]); - qlo_Vbep=PCatT*xvar3/(p[85]+PCatT); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - }else{ - xvar1=(1.0-(*Vbep)/PCatT); - xvar1_Vbep=-1.0/PCatT; - xvar1_PCatT=(*Vbep)/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); - qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-PCatT/(1.0-p[25]); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vbep=qlo_xvar3*xvar3_Vbep; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - } - qhi=0.0; - qhi_Vbep=0.0; - qhi_Vrth=0.0; - } - qdbep=qlo+qhi; - qdbep_qlo=1.0; - qdbep_qhi=1.0; - qdbep_Vrth=qdbep_qlo*qlo_Vrth; - qdbep_Vbep=qdbep_qlo*qlo_Vbep; - qdbep_Vbep=qdbep_Vbep+qdbep_qhi*qhi_Vbep; - qdbep_Vrth=qdbep_Vrth+qdbep_qhi*qhi_Vrth; - }else{ - if((p[85]>0.0)&&(p[86]>0.0)){ - vn0=(p[85]+dv0)/(p[85]-dv0); - vn0_dv0=(p[85]+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); - vn0_Vrth=vn0_dv0*dv0_Vrth; - vnl0=2.0*vn0/(sqrt((vn0-1.0)*(vn0-1.0)+4.0*p[26]*p[26])+sqrt((vn0+1.0)*(vn0+1.0)+4.0*p[86]*p[86])); - vnl0_vn0=2.0/(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))-2.0*vn0*((vn0+1.0)/sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+(vn0-1.0)/sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn0+1.0)*(vn0+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn0-1.0)*(vn0-1.0))+4.0*(p[26]*p[26])))); - vnl0_Vrth=vnl0_vn0*vn0_Vrth; - vl0=0.5*(vnl0*(p[85]-dv0)-p[85]-dv0); - vl0_vnl0=0.5*(p[85]-dv0); - vl0_dv0=0.5*(-vnl0-1.0); - vl0_Vrth=vl0_vnl0*vnl0_Vrth; - vl0_Vrth=vl0_Vrth+vl0_dv0*dv0_Vrth; - xvar1=(1.0-vl0/PCatT); - xvar1_vl0=-1.0/PCatT; - xvar1_PCatT=vl0/(PCatT*PCatT); - xvar1_Vrth=xvar1_vl0*vl0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo0=PCatT*(1.0-xvar3)/(1.0-p[25]); - qlo0_PCatT=(1.0-xvar3)/(1.0-p[25]); - qlo0_xvar3=-PCatT/(1.0-p[25]); - qlo0_Vrth=qlo0_PCatT*PCatT_Vrth; - qlo0_Vrth=qlo0_Vrth+qlo0_xvar3*xvar3_Vrth; - vn=(2.0*(*Vbep)+p[85]+dv0)/(p[85]-dv0); - vn_Vbep=2.0/(p[85]-dv0); - vn_dv0=(p[85]+2.0*(*Vbep)+dv0)/((p[85]-dv0)*(p[85]-dv0))+1.0/(p[85]-dv0); - vn_Vrth=vn_dv0*dv0_Vrth; - vnl=2.0*vn/(sqrt((vn-1.0)*(vn-1.0)+4.0*p[26]*p[26])+sqrt((vn+1.0)*(vn+1.0)+4.0*p[86]*p[86])); - vnl_vn=2.0/(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))-2.0*vn*((vn+1.0)/sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+(vn-1.0)/sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))/((sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))*(sqrt(((vn+1.0)*(vn+1.0))+4.0*(p[86]*p[86]))+sqrt(((vn-1.0)*(vn-1.0))+4.0*(p[26]*p[26])))); - vnl_Vbep=vnl_vn*vn_Vbep; - vnl_Vrth=vnl_vn*vn_Vrth; - vl=0.5*(vnl*(p[85]-dv0)-p[85]-dv0); - vl_vnl=0.5*(p[85]-dv0); - vl_dv0=0.5*(-vnl-1.0); - vl_Vbep=vl_vnl*vnl_Vbep; - vl_Vrth=vl_vnl*vnl_Vrth; - vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; - xvar1=(1.0-vl/PCatT); - xvar1_vl=-1.0/PCatT; - xvar1_PCatT=vl/(PCatT*PCatT); - xvar1_Vbep=xvar1_vl*vl_Vbep; - xvar1_Vrth=xvar1_vl*vl_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PCatT*(1.0-xvar3)/(1.0-p[25]); - qlo_PCatT=(1.0-xvar3)/(1.0-p[25]); - qlo_xvar3=-PCatT/(1.0-p[25]); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vbep=qlo_xvar3*xvar3_Vbep; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - sel=0.5*(vnl+1.0); - sel_vnl=0.5; - sel_Vbep=sel_vnl*vnl_Vbep; - sel_Vrth=sel_vnl*vnl_Vrth; - xvar1=(1.0+p[85]/PCatT); - xvar1_PCatT=-p[85]/(PCatT*PCatT); - xvar1_Vrth=xvar1_PCatT*PCatT_Vrth; - xvar2=(-p[25]); - crt=pow(xvar1,xvar2); - crt_xvar1=crt*xvar2/xvar1; - crt_Vrth=crt_xvar1*xvar1_Vrth; - xvar1=(1.0+dv0/PCatT); - xvar1_dv0=1.0/PCatT; - xvar1_PCatT=-dv0/(PCatT*PCatT); - xvar1_Vrth=xvar1_dv0*dv0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(-p[25]); - cmx=pow(xvar1,xvar2); - cmx_xvar1=cmx*xvar2/xvar1; - cmx_Vrth=cmx_xvar1*xvar1_Vrth; - cl=(1.0-sel)*crt+sel*cmx; - cl_sel=cmx-crt; - cl_crt=1.0-sel; - cl_cmx=sel; - cl_Vbep=cl_sel*sel_Vbep; - cl_Vrth=cl_sel*sel_Vrth; - cl_Vrth=cl_Vrth+cl_crt*crt_Vrth; - cl_Vrth=cl_Vrth+cl_cmx*cmx_Vrth; - ql=((*Vbep)-vl+vl0)*cl; - ql_Vbep=cl; - ql_vl=-cl; - ql_vl0=cl; - ql_cl=vl0-vl+(*Vbep); - ql_Vbep=ql_Vbep+ql_vl*vl_Vbep; - ql_Vrth=ql_vl*vl_Vrth; - ql_Vrth=ql_Vrth+ql_vl0*vl0_Vrth; - ql_Vbep=ql_Vbep+ql_cl*cl_Vbep; - ql_Vrth=ql_Vrth+ql_cl*cl_Vrth; - qdbep=ql+qlo-qlo0; - qdbep_ql=1.0; - qdbep_qlo=1.0; - qdbep_qlo0=-1.0; - qdbep_Vbep=qdbep_ql*ql_Vbep; - qdbep_Vrth=qdbep_ql*ql_Vrth; - qdbep_Vrth=qdbep_Vrth+qdbep_qlo*qlo_Vrth; - qdbep_Vbep=qdbep_Vbep+qdbep_qlo*qlo_Vbep; - qdbep_Vrth=qdbep_Vrth+qdbep_qlo0*qlo0_Vrth; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[26]*p[26]); - mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[26]*p[26])); - mv0_Vrth=mv0_dv0*dv0_Vrth; - vl0=-0.5*(dv0+mv0); - vl0_dv0=-0.5; - vl0_mv0=-0.5; - vl0_Vrth=vl0_dv0*dv0_Vrth; - vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; - xvar1=(1.0-vl0/PCatT); - xvar1_vl0=-1.0/PCatT; - xvar1_PCatT=vl0/(PCatT*PCatT); - xvar1_Vrth=xvar1_vl0*vl0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - q0=-PCatT*xvar3/(1.0-p[25]); - q0_PCatT=-xvar3/(1.0-p[25]); - q0_xvar3=-PCatT/(1.0-p[25]); - q0_Vrth=q0_PCatT*PCatT_Vrth; - q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; - dv=(*Vbep)+dv0; - dv_Vbep=1.0; - dv_dv0=1.0; - dv_Vrth=dv_dv0*dv0_Vrth; - mv=sqrt(dv*dv+4.0*p[26]*p[26]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[26]*p[26])); - mv_Vbep=mv_dv*dv_Vbep; - mv_Vrth=mv_dv*dv_Vrth; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_dv0=-1.0; - vl_Vbep=vl_dv*dv_Vbep; - vl_Vrth=vl_dv*dv_Vrth; - vl_Vbep=vl_Vbep+vl_mv*mv_Vbep; - vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; - vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; - xvar1=(1.0-vl/PCatT); - xvar1_vl=-1.0/PCatT; - xvar1_PCatT=vl/(PCatT*PCatT); - xvar1_Vbep=xvar1_vl*vl_Vbep; - xvar1_Vrth=xvar1_vl*vl_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PCatT*PCatT_Vrth; - xvar2=(1.0-p[25]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbep=xvar3_xvar1*xvar1_Vbep; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=-PCatT*xvar3/(1.0-p[25]); - qlo_PCatT=-xvar3/(1.0-p[25]); - qlo_xvar3=-PCatT/(1.0-p[25]); - qlo_Vrth=qlo_PCatT*PCatT_Vrth; - qlo_Vbep=qlo_xvar3*xvar3_Vbep; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - xvar1=(1.0-p[14]); - xvar2=(-p[25]); - xvar3=pow(xvar1,xvar2); - qdbep=qlo+xvar3*((*Vbep)-vl+vl0)-q0; - qdbep_qlo=1.0; - qdbep_Vbep=xvar3; - qdbep_vl=-xvar3; - qdbep_vl0=xvar3; - qdbep_q0=-1.0; - qdbep_Vrth=qdbep_qlo*qlo_Vrth; - qdbep_Vbep=qdbep_Vbep+qdbep_qlo*qlo_Vbep; - qdbep_Vbep=qdbep_Vbep+qdbep_vl*vl_Vbep; - qdbep_Vrth=qdbep_Vrth+qdbep_vl*vl_Vrth; - qdbep_Vrth=qdbep_Vrth+qdbep_vl0*vl0_Vrth; - qdbep_Vrth=qdbep_Vrth+qdbep_q0*q0_Vrth; - } - } - if(p[27]>0.0){ - dv0=-PSatT*p[14]; - dv0_PSatT=-p[14]; - dv0_Vrth=dv0_PSatT*PSatT_Vrth; - if(p[30]<=0.0){ - dvh=(*Vbcp)+dv0; - dvh_Vbcp=1.0; - dvh_dv0=1.0; - dvh_Vrth=dvh_dv0*dv0_Vrth; - if(dvh>0.0){ - xvar1=(1.0-p[14]); - xvar2=(-1.0-p[29]); - pwq=pow(xvar1,xvar2); - qlo=PSatT*(1.0-pwq*(1.0-p[14])*(1.0-p[14]))/(1.0-p[29]); - qlo_PSatT=(1.0-((1.0-p[14])*(1.0-p[14]))*pwq)/(1.0-p[29]); - qlo_Vbep=0.0; - qlo_Vbcp=0.0; - qlo_Vrth=qlo_PSatT*PSatT_Vrth; - qhi=dvh*(1.0-p[14]+0.5*p[29]*dvh/PSatT)*pwq; - qhi_dvh=(0.5*dvh*p[29]/PSatT-p[14]+1.0)*pwq+0.5*dvh*p[29]*pwq/PSatT; - qhi_PSatT=-0.5*(dvh*dvh)*p[29]*pwq/(PSatT*PSatT); - qhi_Vbep=0.0; - qhi_Vbcp=qhi_dvh*dvh_Vbcp; - qhi_Vrth=qhi_dvh*dvh_Vrth; - qhi_Vrth=qhi_Vrth+qhi_PSatT*PSatT_Vrth; - }else{ - xvar1=(1.0-(*Vbcp)/PSatT); - xvar1_Vbcp=-1.0/PSatT; - xvar1_PSatT=(*Vbcp)/(PSatT*PSatT); - xvar1_Vrth=xvar1_PSatT*PSatT_Vrth; - xvar2=(1.0-p[29]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbcp=xvar3_xvar1*xvar1_Vbcp; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=PSatT*(1.0-xvar3)/(1.0-p[29]); - qlo_PSatT=(1.0-xvar3)/(1.0-p[29]); - qlo_xvar3=-PSatT/(1.0-p[29]); - qlo_Vbep=0.0; - qlo_Vrth=qlo_PSatT*PSatT_Vrth; - qlo_Vbcp=qlo_xvar3*xvar3_Vbcp; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - qhi=0.0; - qhi_Vbep=0.0; - qhi_Vrth=0.0; - qhi_Vbcp=0.0; - } - qdbcp=qlo+qhi; - qdbcp_qlo=1.0; - qdbcp_qhi=1.0; - qdbcp_Vrth=qdbcp_qlo*qlo_Vrth; - qdbcp_Vbcp=qdbcp_qlo*qlo_Vbcp; - qdbcp_Vbep=qdbcp_qlo*qlo_Vbep; - qdbcp_Vbep=qdbcp_Vbep+qdbcp_qhi*qhi_Vbep; - qdbcp_Vrth=qdbcp_Vrth+qdbcp_qhi*qhi_Vrth; - qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_qhi*qhi_Vbcp; - }else{ - mv0=sqrt(dv0*dv0+4.0*p[30]*p[30]); - mv0_dv0=dv0/sqrt((dv0*dv0)+4.0*(p[30]*p[30])); - mv0_Vrth=mv0_dv0*dv0_Vrth; - vl0=-0.5*(dv0+mv0); - vl0_dv0=-0.5; - vl0_mv0=-0.5; - vl0_Vrth=vl0_dv0*dv0_Vrth; - vl0_Vrth=vl0_Vrth+vl0_mv0*mv0_Vrth; - xvar1=(1.0-vl0/PSatT); - xvar1_vl0=-1.0/PSatT; - xvar1_PSatT=vl0/(PSatT*PSatT); - xvar1_Vrth=xvar1_vl0*vl0_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PSatT*PSatT_Vrth; - xvar2=(1.0-p[29]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - q0=-PSatT*xvar3/(1.0-p[29]); - q0_PSatT=-xvar3/(1.0-p[29]); - q0_xvar3=-PSatT/(1.0-p[29]); - q0_Vrth=q0_PSatT*PSatT_Vrth; - q0_Vrth=q0_Vrth+q0_xvar3*xvar3_Vrth; - dv=(*Vbcp)+dv0; - dv_Vbcp=1.0; - dv_dv0=1.0; - dv_Vrth=dv_dv0*dv0_Vrth; - mv=sqrt(dv*dv+4.0*p[30]*p[30]); - mv_dv=dv/sqrt((dv*dv)+4.0*(p[30]*p[30])); - mv_Vbcp=mv_dv*dv_Vbcp; - mv_Vrth=mv_dv*dv_Vrth; - vl=0.5*(dv-mv)-dv0; - vl_dv=0.5; - vl_mv=-0.5; - vl_dv0=-1.0; - vl_Vbcp=vl_dv*dv_Vbcp; - vl_Vrth=vl_dv*dv_Vrth; - vl_Vbcp=vl_Vbcp+vl_mv*mv_Vbcp; - vl_Vrth=vl_Vrth+vl_mv*mv_Vrth; - vl_Vrth=vl_Vrth+vl_dv0*dv0_Vrth; - xvar1=(1.0-vl/PSatT); - xvar1_vl=-1.0/PSatT; - xvar1_PSatT=vl/(PSatT*PSatT); - xvar1_Vbcp=xvar1_vl*vl_Vbcp; - xvar1_Vrth=xvar1_vl*vl_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_PSatT*PSatT_Vrth; - xvar2=(1.0-p[29]); - xvar3=pow(xvar1,xvar2); - xvar3_xvar1=xvar3*xvar2/xvar1; - xvar3_Vbcp=xvar3_xvar1*xvar1_Vbcp; - xvar3_Vrth=xvar3_xvar1*xvar1_Vrth; - qlo=-PSatT*xvar3/(1.0-p[29]); - qlo_PSatT=-xvar3/(1.0-p[29]); - qlo_xvar3=-PSatT/(1.0-p[29]); - qlo_Vbep=0.0; - qlo_Vrth=qlo_PSatT*PSatT_Vrth; - qlo_Vbcp=qlo_xvar3*xvar3_Vbcp; - qlo_Vrth=qlo_Vrth+qlo_xvar3*xvar3_Vrth; - xvar1=(1.0-p[14]); - xvar2=(-p[29]); - xvar3=pow(xvar1,xvar2); - qdbcp=qlo+xvar3*((*Vbcp)-vl+vl0)-q0; - qdbcp_qlo=1.0; - qdbcp_Vbcp=xvar3; - qdbcp_vl=-xvar3; - qdbcp_vl0=xvar3; - qdbcp_q0=-1.0; - qdbcp_Vrth=qdbcp_qlo*qlo_Vrth; - qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_qlo*qlo_Vbcp; - qdbcp_Vbep=qdbcp_qlo*qlo_Vbep; - qdbcp_Vbcp=qdbcp_Vbcp+qdbcp_vl*vl_Vbcp; - qdbcp_Vrth=qdbcp_Vrth+qdbcp_vl*vl_Vrth; - qdbcp_Vrth=qdbcp_Vrth+qdbcp_vl0*vl0_Vrth; - qdbcp_Vrth=qdbcp_Vrth+qdbcp_q0*q0_Vrth; - } - }else{ - qdbcp=0.0; - qdbcp_Vrth=0.0; - qdbcp_Vbcp=0.0; - } - argi=(*Vbei)/(NFatT*Vtv); - argi_Vbei=1.0/(NFatT*Vtv); - argi_NFatT=-(*Vbei)/((NFatT*NFatT)*Vtv); - argi_Vtv=-(*Vbei)/(NFatT*(Vtv*Vtv)); - argi_Vrth=argi_NFatT*NFatT_Vrth; - argi_Vrth=argi_Vrth+argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbei=expi_argi*argi_Vbei; - expi_Vrth=expi_argi*argi_Vrth; - Ifi=ISatT*(expi-1.0); - Ifi_ISatT=expi-1.0; - Ifi_expi=ISatT; - Ifi_Vrth=Ifi_ISatT*ISatT_Vrth; - Ifi_Vbei=Ifi_expi*expi_Vbei; - Ifi_Vrth=Ifi_Vrth+Ifi_expi*expi_Vrth; - argi=(*Vbci)/(NRatT*Vtv); - argi_Vbci=1.0/(NRatT*Vtv); - argi_NRatT=-(*Vbci)/((NRatT*NRatT)*Vtv); - argi_Vtv=-(*Vbci)/(NRatT*(Vtv*Vtv)); - argi_Vrth=argi_NRatT*NRatT_Vrth; - argi_Vrth=argi_Vrth+argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbci=expi_argi*argi_Vbci; - expi_Vrth=expi_argi*argi_Vrth; - Iri=ISatT*ISRRatT*(expi-1.0); - Iri_ISatT=(expi-1.0)*ISRRatT; - Iri_ISRRatT=(expi-1.0)*ISatT; - Iri_expi=ISatT*ISRRatT; - Iri_Vrth=Iri_ISatT*ISatT_Vrth; - Iri_Vrth=Iri_Vrth+Iri_ISRRatT*ISRRatT_Vrth; - Iri_Vbci=Iri_expi*expi_Vbci; - Iri_Vrth=Iri_Vrth+Iri_expi*expi_Vrth; - q1z=1.0+qdbe*IVER+qdbc*IVEF; - q1z_qdbe=IVER; - q1z_qdbc=IVEF; - q1z_Vrth=q1z_qdbe*qdbe_Vrth; - q1z_Vbei=q1z_qdbe*qdbe_Vbei; - q1z_Vrth=q1z_Vrth+q1z_qdbc*qdbc_Vrth; - q1z_Vbci=q1z_qdbc*qdbc_Vbci; - q1=0.5*(sqrt((q1z-1.0e-4)*(q1z-1.0e-4)+1.0e-8)+q1z-1.0e-4)+1.0e-4; - q1_q1z=0.5*((q1z-1.0e-4)/sqrt(((q1z-1.0e-4)*(q1z-1.0e-4))+1.0e-8)+1.0); - q1_Vrth=q1_q1z*q1z_Vrth; - q1_Vbei=q1_q1z*q1z_Vbei; - q1_Vbci=q1_q1z*q1z_Vbci; - q2=Ifi*IIKF+Iri*IIKR; - q2_Ifi=IIKF; - q2_IIKF=Ifi; - q2_Iri=IIKR; - q2_Vrth=q2_Ifi*Ifi_Vrth; - q2_Vbei=q2_Ifi*Ifi_Vbei; - q2_Vrth=q2_Vrth+q2_IIKF*IIKF_Vrth; - q2_Vrth=q2_Vrth+q2_Iri*Iri_Vrth; - q2_Vbci=q2_Iri*Iri_Vbci; - if(p[88]<0.5){ - xvar2=1.0/p[89]; - xvar3=pow(q1,xvar2); - xvar3_q1=xvar3*xvar2/q1; - xvar3_Vrth=xvar3_q1*q1_Vrth; - xvar3_Vbei=xvar3_q1*q1_Vbei; - xvar3_Vbci=xvar3_q1*q1_Vbci; - xvar1=(xvar3+4.0*q2); - xvar1_xvar3=1.0; - xvar1_q2=4.0; - xvar1_Vrth=xvar1_xvar3*xvar3_Vrth; - xvar1_Vbei=xvar1_xvar3*xvar3_Vbei; - xvar1_Vbci=xvar1_xvar3*xvar3_Vbci; - xvar1_Vrth=xvar1_Vrth+xvar1_q2*q2_Vrth; - xvar1_Vbei=xvar1_Vbei+xvar1_q2*q2_Vbei; - xvar1_Vbci=xvar1_Vbci+xvar1_q2*q2_Vbci; - xvar4=pow(xvar1,p[89]); - xvar4_xvar1=xvar4*p[89]/xvar1; - xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; - xvar4_Vbei=xvar4_xvar1*xvar1_Vbei; - xvar4_Vbci=xvar4_xvar1*xvar1_Vbci; - qb=0.5*(q1+xvar4); - qb_q1=0.5; - qb_xvar4=0.5; - qb_Vrth=qb_q1*q1_Vrth; - qb_Vbei=qb_q1*q1_Vbei; - qb_Vbci=qb_q1*q1_Vbci; - qb_Vrth=qb_Vrth+qb_xvar4*xvar4_Vrth; - qb_Vbei=qb_Vbei+qb_xvar4*xvar4_Vbei; - qb_Vbci=qb_Vbci+qb_xvar4*xvar4_Vbci; - }else{ - xvar1=(1.0+4.0*q2); - xvar1_q2=4.0; - xvar1_Vrth=xvar1_q2*q2_Vrth; - xvar1_Vbei=xvar1_q2*q2_Vbei; - xvar1_Vbci=xvar1_q2*q2_Vbci; - xvar2=pow(xvar1,p[89]); - xvar2_xvar1=xvar2*p[89]/xvar1; - xvar2_Vrth=xvar2_xvar1*xvar1_Vrth; - xvar2_Vbei=xvar2_xvar1*xvar1_Vbei; - xvar2_Vbci=xvar2_xvar1*xvar1_Vbci; - qb=0.5*q1*(1.0+xvar2); - qb_q1=0.5*(xvar2+1.0); - qb_xvar2=0.5*q1; - qb_Vrth=qb_q1*q1_Vrth; - qb_Vbei=qb_q1*q1_Vbei; - qb_Vbci=qb_q1*q1_Vbci; - qb_Vrth=qb_Vrth+qb_xvar2*xvar2_Vrth; - qb_Vbei=qb_Vbei+qb_xvar2*xvar2_Vbei; - qb_Vbci=qb_Vbci+qb_xvar2*xvar2_Vbci; - } - (*Itzr)=Iri/qb; - Itzr_Iri=1.0/qb; - Itzr_qb=-Iri/(qb*qb); - *Itzr_Vrth=Itzr_Iri*Iri_Vrth; - *Itzr_Vbci=Itzr_Iri*Iri_Vbci; - *Itzr_Vrth=(*Itzr_Vrth)+Itzr_qb*qb_Vrth; - *Itzr_Vbei=Itzr_qb*qb_Vbei; - *Itzr_Vbci=(*Itzr_Vbci)+Itzr_qb*qb_Vbci; - Itzf=Ifi/qb; - Itzf_Ifi=1.0/qb; - Itzf_qb=-Ifi/(qb*qb); - Itzf_Vrth=Itzf_Ifi*Ifi_Vrth; - Itzf_Vbei=Itzf_Ifi*Ifi_Vbei; - Itzf_Vrth=Itzf_Vrth+Itzf_qb*qb_Vrth; - Itzf_Vbei=Itzf_Vbei+Itzf_qb*qb_Vbei; - Itzf_Vbci=Itzf_qb*qb_Vbci; - (*Ixzf)=-Itzf; - Ixzf_Itzf=-1.0; - *Ixzf_Vrth=Ixzf_Itzf*Itzf_Vrth; - *Ixzf_Vbei=Ixzf_Itzf*Itzf_Vbei; - *Ixzf_Vbci=Ixzf_Itzf*Itzf_Vbci; - (*Itxf)=(*Vrxf); - *Itxf_Vrxf=1.0; - (*Ixxf)=(*Vrxf); - *Ixxf_Vrxf=1.0; - if(p[42]>0.0){ - argi=(*Vbep)/(p[44]*Vtv); - argi_Vbep=1.0/(p[44]*Vtv); - argi_Vtv=-(*Vbep)/(p[44]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbep=expi_argi*argi_Vbep; - expi_Vrth=expi_argi*argi_Vrth; - argx=(*Vbci)/(p[44]*Vtv); - argx_Vbci=1.0/(p[44]*Vtv); - argx_Vtv=-(*Vbci)/(p[44]*(Vtv*Vtv)); - argx_Vrth=argx_Vtv*Vtv_Vrth; - expx=exp(argx); - expx_argx=expx; - expx_Vbci=expx_argx*argx_Vbci; - expx_Vrth=expx_argx*argx_Vrth; - Ifp=ISPatT*(p[43]*expi+(1.0-p[43])*expx-1.0); - Ifp_ISPatT=expi*p[43]+expx*(1.0-p[43])-1.0; - Ifp_expi=ISPatT*p[43]; - Ifp_expx=ISPatT*(1.0-p[43]); - Ifp_Vrth=Ifp_ISPatT*ISPatT_Vrth; - Ifp_Vbep=Ifp_expi*expi_Vbep; - Ifp_Vrth=Ifp_Vrth+Ifp_expi*expi_Vrth; - Ifp_Vbci=Ifp_expx*expx_Vbci; - Ifp_Vrth=Ifp_Vrth+Ifp_expx*expx_Vrth; - q2p=Ifp*IIKP; - q2p_Ifp=IIKP; - q2p_Vrth=q2p_Ifp*Ifp_Vrth; - q2p_Vbep=q2p_Ifp*Ifp_Vbep; - q2p_Vbci=q2p_Ifp*Ifp_Vbci; - qbp=0.5*(1.0+sqrt(1.0+4.0*q2p)); - qbp_q2p=1.0/sqrt(4.0*q2p+1.0); - qbp_Vrth=qbp_q2p*q2p_Vrth; - qbp_Vbep=qbp_q2p*q2p_Vbep; - qbp_Vbci=qbp_q2p*q2p_Vbci; - argi=(*Vbcp)/(p[44]*Vtv); - argi_Vbcp=1.0/(p[44]*Vtv); - argi_Vtv=-(*Vbcp)/(p[44]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbcp=expi_argi*argi_Vbcp; - expi_Vrth=expi_argi*argi_Vrth; - Irp=ISPatT*(expi-1.0); - Irp_ISPatT=expi-1.0; - Irp_expi=ISPatT; - Irp_Vrth=Irp_ISPatT*ISPatT_Vrth; - Irp_Vbcp=Irp_expi*expi_Vbcp; - Irp_Vrth=Irp_Vrth+Irp_expi*expi_Vrth; - (*Iccp)=(Ifp-Irp)/qbp; - Iccp_Ifp=1.0/qbp; - Iccp_Irp=-1.0/qbp; - Iccp_qbp=-(Ifp-Irp)/(qbp*qbp); - *Iccp_Vrth=Iccp_Ifp*Ifp_Vrth; - *Iccp_Vbep=Iccp_Ifp*Ifp_Vbep; - *Iccp_Vbci=Iccp_Ifp*Ifp_Vbci; - *Iccp_Vrth=(*Iccp_Vrth)+Iccp_Irp*Irp_Vrth; - *Iccp_Vbcp=Iccp_Irp*Irp_Vbcp; - *Iccp_Vrth=(*Iccp_Vrth)+Iccp_qbp*qbp_Vrth; - *Iccp_Vbep=(*Iccp_Vbep)+Iccp_qbp*qbp_Vbep; - *Iccp_Vbci=(*Iccp_Vbci)+Iccp_qbp*qbp_Vbci; - }else{ - Ifp=0.0; - Ifp_Vrth=0.0; - Ifp_Vbep=0.0; - Ifp_Vbci=0.0; - qbp=1.0; - qbp_Vrth=0.0; - qbp_Vbep=0.0; - qbp_Vbci=0.0; - (*Iccp)=0.0; - *Iccp_Vrth=0.0; - *Iccp_Vbep=0.0; - *Iccp_Vbci=0.0; - *Iccp_Vbcp=0.0; - } - if(p[32]==1.0){ - argi=(*Vbei)/(p[33]*Vtv); - argi_Vbei=1.0/(p[33]*Vtv); - argi_Vtv=-(*Vbei)/(p[33]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbei=expi_argi*argi_Vbei; - expi_Vrth=expi_argi*argi_Vrth; - argn=(*Vbei)/(p[35]*Vtv); - argn_Vbei=1.0/(p[35]*Vtv); - argn_Vtv=-(*Vbei)/(p[35]*(Vtv*Vtv)); - argn_Vrth=argn_Vtv*Vtv_Vrth; - expn=exp(argn); - expn_argn=expn; - expn_Vbei=expn_argn*argn_Vbei; - expn_Vrth=expn_argn*argn_Vrth; - if(p[98]>0.0){ - argx=(-VBBEatT-(*Vbei))/(NBBEatT*Vtv); - argx_VBBEatT=-1.0/(NBBEatT*Vtv); - argx_Vbei=-1.0/(NBBEatT*Vtv); - argx_NBBEatT=-(-(*Vbei)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); - argx_Vtv=-(-(*Vbei)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); - argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; - expx=exp(argx); - expx_argx=expx; - expx_Vrth=expx_argx*argx_Vrth; - expx_Vbei=expx_argx*argx_Vbei; - (*Ibe)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT); - Ibe_IBEIatT=expi-1.0; - Ibe_expi=IBEIatT; - Ibe_IBENatT=expn-1.0; - Ibe_expn=IBENatT; - Ibe_expx=-p[100]; - Ibe_EBBEatT=p[100]; - *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expx*expx_Vrth; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expx*expx_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_EBBEatT*EBBEatT_Vrth; - }else{ - (*Ibe)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0); - Ibe_IBEIatT=expi-1.0; - Ibe_expi=IBEIatT; - Ibe_IBENatT=expn-1.0; - Ibe_expn=IBENatT; - *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; - } - (*Ibex)=0.0; - *Ibex_Vrth=0.0; - *Ibex_Vbex=0.0; - }else if(p[32]==0.0){ - (*Ibe)=0.0; - *Ibe_Vrth=0.0; - *Ibe_Vbei=0.0; - argi=(*Vbex)/(p[33]*Vtv); - argi_Vbex=1.0/(p[33]*Vtv); - argi_Vtv=-(*Vbex)/(p[33]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbex=expi_argi*argi_Vbex; - expi_Vrth=expi_argi*argi_Vrth; - argn=(*Vbex)/(p[35]*Vtv); - argn_Vbex=1.0/(p[35]*Vtv); - argn_Vtv=-(*Vbex)/(p[35]*(Vtv*Vtv)); - argn_Vrth=argn_Vtv*Vtv_Vrth; - expn=exp(argn); - expn_argn=expn; - expn_Vbex=expn_argn*argn_Vbex; - expn_Vrth=expn_argn*argn_Vrth; - if(p[98]>0.0){ - argx=(-VBBEatT-(*Vbex))/(NBBEatT*Vtv); - argx_VBBEatT=-1.0/(NBBEatT*Vtv); - argx_Vbex=-1.0/(NBBEatT*Vtv); - argx_NBBEatT=-(-(*Vbex)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); - argx_Vtv=-(-(*Vbex)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); - argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; - expx=exp(argx); - expx_argx=expx; - expx_Vrth=expx_argx*argx_Vrth; - expx_Vbex=expx_argx*argx_Vbex; - (*Ibex)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT); - Ibex_IBEIatT=expi-1.0; - Ibex_expi=IBEIatT; - Ibex_IBENatT=expn-1.0; - Ibex_expn=IBENatT; - Ibex_expx=-p[100]; - Ibex_EBBEatT=p[100]; - *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expx*expx_Vrth; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expx*expx_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_EBBEatT*EBBEatT_Vrth; - }else{ - (*Ibex)=IBEIatT*(expi-1.0)+IBENatT*(expn-1.0); - Ibex_IBEIatT=expi-1.0; - Ibex_expi=IBEIatT; - Ibex_IBENatT=expn-1.0; - Ibex_expn=IBENatT; - *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; - } - }else{ - argi=(*Vbei)/(p[33]*Vtv); - argi_Vbei=1.0/(p[33]*Vtv); - argi_Vtv=-(*Vbei)/(p[33]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbei=expi_argi*argi_Vbei; - expi_Vrth=expi_argi*argi_Vrth; - argn=(*Vbei)/(p[35]*Vtv); - argn_Vbei=1.0/(p[35]*Vtv); - argn_Vtv=-(*Vbei)/(p[35]*(Vtv*Vtv)); - argn_Vrth=argn_Vtv*Vtv_Vrth; - expn=exp(argn); - expn_argn=expn; - expn_Vbei=expn_argn*argn_Vbei; - expn_Vrth=expn_argn*argn_Vrth; - if(p[98]>0.0){ - argx=(-VBBEatT-(*Vbei))/(NBBEatT*Vtv); - argx_VBBEatT=-1.0/(NBBEatT*Vtv); - argx_Vbei=-1.0/(NBBEatT*Vtv); - argx_NBBEatT=-(-(*Vbei)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); - argx_Vtv=-(-(*Vbei)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); - argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; - expx=exp(argx); - expx_argx=expx; - expx_Vrth=expx_argx*argx_Vrth; - expx_Vbei=expx_argx*argx_Vbei; - (*Ibe)=p[32]*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT)); - Ibe_IBEIatT=(expi-1.0)*p[32]; - Ibe_expi=IBEIatT*p[32]; - Ibe_IBENatT=(expn-1.0)*p[32]; - Ibe_expn=IBENatT*p[32]; - Ibe_expx=-p[100]*p[32]; - Ibe_EBBEatT=p[100]*p[32]; - *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expx*expx_Vrth; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expx*expx_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_EBBEatT*EBBEatT_Vrth; - }else{ - (*Ibe)=p[32]*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)); - Ibe_IBEIatT=(expi-1.0)*p[32]; - Ibe_expi=IBEIatT*p[32]; - Ibe_IBENatT=(expn-1.0)*p[32]; - Ibe_expn=IBENatT*p[32]; - *Ibe_Vrth=Ibe_IBEIatT*IBEIatT_Vrth; - *Ibe_Vbei=Ibe_expi*expi_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expi*expi_Vrth; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_IBENatT*IBENatT_Vrth; - *Ibe_Vbei=(*Ibe_Vbei)+Ibe_expn*expn_Vbei; - *Ibe_Vrth=(*Ibe_Vrth)+Ibe_expn*expn_Vrth; - } - argi=(*Vbex)/(p[33]*Vtv); - argi_Vbex=1.0/(p[33]*Vtv); - argi_Vtv=-(*Vbex)/(p[33]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbex=expi_argi*argi_Vbex; - expi_Vrth=expi_argi*argi_Vrth; - argn=(*Vbex)/(p[35]*Vtv); - argn_Vbex=1.0/(p[35]*Vtv); - argn_Vtv=-(*Vbex)/(p[35]*(Vtv*Vtv)); - argn_Vrth=argn_Vtv*Vtv_Vrth; - expn=exp(argn); - expn_argn=expn; - expn_Vbex=expn_argn*argn_Vbex; - expn_Vrth=expn_argn*argn_Vrth; - if(p[98]>0.0){ - argx=(-VBBEatT-(*Vbex))/(NBBEatT*Vtv); - argx_VBBEatT=-1.0/(NBBEatT*Vtv); - argx_Vbex=-1.0/(NBBEatT*Vtv); - argx_NBBEatT=-(-(*Vbex)-VBBEatT)/((NBBEatT*NBBEatT)*Vtv); - argx_Vtv=-(-(*Vbex)-VBBEatT)/(NBBEatT*(Vtv*Vtv)); - argx_Vrth=argx_VBBEatT*VBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_NBBEatT*NBBEatT_Vrth; - argx_Vrth=argx_Vrth+argx_Vtv*Vtv_Vrth; - expx=exp(argx); - expx_argx=expx; - expx_Vrth=expx_argx*argx_Vrth; - expx_Vbex=expx_argx*argx_Vbex; - (*Ibex)=(1.0-p[32])*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)-p[100]*(expx-EBBEatT)); - Ibex_IBEIatT=(expi-1.0)*(1.0-p[32]); - Ibex_expi=IBEIatT*(1.0-p[32]); - Ibex_IBENatT=(expn-1.0)*(1.0-p[32]); - Ibex_expn=IBENatT*(1.0-p[32]); - Ibex_expx=-p[100]*(1.0-p[32]); - Ibex_EBBEatT=p[100]*(1.0-p[32]); - *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expx*expx_Vrth; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expx*expx_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_EBBEatT*EBBEatT_Vrth; - }else{ - (*Ibex)=(1.0-p[32])*(IBEIatT*(expi-1.0)+IBENatT*(expn-1.0)); - Ibex_IBEIatT=(expi-1.0)*(1.0-p[32]); - Ibex_expi=IBEIatT*(1.0-p[32]); - Ibex_IBENatT=(expn-1.0)*(1.0-p[32]); - Ibex_expn=IBENatT*(1.0-p[32]); - *Ibex_Vrth=Ibex_IBEIatT*IBEIatT_Vrth; - *Ibex_Vbex=Ibex_expi*expi_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expi*expi_Vrth; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_IBENatT*IBENatT_Vrth; - *Ibex_Vbex=(*Ibex_Vbex)+Ibex_expn*expn_Vbex; - *Ibex_Vrth=(*Ibex_Vrth)+Ibex_expn*expn_Vrth; - } - } - argi=(*Vbci)/(p[37]*Vtv); - argi_Vbci=1.0/(p[37]*Vtv); - argi_Vtv=-(*Vbci)/(p[37]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbci=expi_argi*argi_Vbci; - expi_Vrth=expi_argi*argi_Vrth; - argn=(*Vbci)/(p[39]*Vtv); - argn_Vbci=1.0/(p[39]*Vtv); - argn_Vtv=-(*Vbci)/(p[39]*(Vtv*Vtv)); - argn_Vrth=argn_Vtv*Vtv_Vrth; - expn=exp(argn); - expn_argn=expn; - expn_Vbci=expn_argn*argn_Vbci; - expn_Vrth=expn_argn*argn_Vrth; - Ibcj=IBCIatT*(expi-1.0)+IBCNatT*(expn-1.0); - Ibcj_IBCIatT=expi-1.0; - Ibcj_expi=IBCIatT; - Ibcj_IBCNatT=expn-1.0; - Ibcj_expn=IBCNatT; - Ibcj_Vrth=Ibcj_IBCIatT*IBCIatT_Vrth; - Ibcj_Vbci=Ibcj_expi*expi_Vbci; - Ibcj_Vrth=Ibcj_Vrth+Ibcj_expi*expi_Vrth; - Ibcj_Vrth=Ibcj_Vrth+Ibcj_IBCNatT*IBCNatT_Vrth; - Ibcj_Vbci=Ibcj_Vbci+Ibcj_expn*expn_Vbci; - Ibcj_Vrth=Ibcj_Vrth+Ibcj_expn*expn_Vrth; - if((p[45]>0.0)||(p[46]>0.0)){ - argi=(*Vbep)/(p[37]*Vtv); - argi_Vbep=1.0/(p[37]*Vtv); - argi_Vtv=-(*Vbep)/(p[37]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbep=expi_argi*argi_Vbep; - expi_Vrth=expi_argi*argi_Vrth; - argn=(*Vbep)/(p[39]*Vtv); - argn_Vbep=1.0/(p[39]*Vtv); - argn_Vtv=-(*Vbep)/(p[39]*(Vtv*Vtv)); - argn_Vrth=argn_Vtv*Vtv_Vrth; - expn=exp(argn); - expn_argn=expn; - expn_Vbep=expn_argn*argn_Vbep; - expn_Vrth=expn_argn*argn_Vrth; - (*Ibep)=IBEIPatT*(expi-1.0)+IBENPatT*(expn-1.0); - Ibep_IBEIPatT=expi-1.0; - Ibep_expi=IBEIPatT; - Ibep_IBENPatT=expn-1.0; - Ibep_expn=IBENPatT; - *Ibep_Vrth=Ibep_IBEIPatT*IBEIPatT_Vrth; - *Ibep_Vbep=Ibep_expi*expi_Vbep; - *Ibep_Vrth=(*Ibep_Vrth)+Ibep_expi*expi_Vrth; - *Ibep_Vrth=(*Ibep_Vrth)+Ibep_IBENPatT*IBENPatT_Vrth; - *Ibep_Vbep=(*Ibep_Vbep)+Ibep_expn*expn_Vbep; - *Ibep_Vrth=(*Ibep_Vrth)+Ibep_expn*expn_Vrth; - }else{ - (*Ibep)=0.0; - *Ibep_Vrth=0.0; - *Ibep_Vbep=0.0; - } - if(p[40]>0.0){ - vl=0.5*(sqrt((PCatT-(*Vbci))*(PCatT-(*Vbci))+0.01)+(PCatT-(*Vbci))); - vl_PCatT=0.5*((PCatT-(*Vbci))/sqrt(((PCatT-(*Vbci))*(PCatT-(*Vbci)))+0.01)+1.0); - vl_Vbci=0.5*(-(PCatT-(*Vbci))/sqrt(((PCatT-(*Vbci))*(PCatT-(*Vbci)))+0.01)-1.0); - vl_Vrth=vl_PCatT*PCatT_Vrth; - xvar2=(p[25]-1.0); - xvar3=pow(vl,xvar2); - xvar3_vl=xvar3*xvar2/vl; - xvar3_Vrth=xvar3_vl*vl_Vrth; - xvar3_Vbci=xvar3_vl*vl_Vbci; - xvar1=-AVC2atT*xvar3; - xvar1_AVC2atT=-xvar3; - xvar1_xvar3=-AVC2atT; - xvar1_Vrth=xvar1_AVC2atT*AVC2atT_Vrth; - xvar1_Vrth=xvar1_Vrth+xvar1_xvar3*xvar3_Vrth; - xvar1_Vbci=xvar1_xvar3*xvar3_Vbci; - xvar4=exp(xvar1); - xvar4_xvar1=xvar4; - xvar4_Vrth=xvar4_xvar1*xvar1_Vrth; - xvar4_Vbci=xvar4_xvar1*xvar1_Vbci; - avalf=p[40]*vl*xvar4; - avalf_vl=p[40]*xvar4; - avalf_xvar4=p[40]*vl; - avalf_Vrth=avalf_vl*vl_Vrth; - avalf_Vbci=avalf_vl*vl_Vbci; - avalf_Vrth=avalf_Vrth+avalf_xvar4*xvar4_Vrth; - avalf_Vbci=avalf_Vbci+avalf_xvar4*xvar4_Vbci; - Igc=((*Itxf)-(*Itzr)-Ibcj)*avalf; - Igc_Itxf=avalf; - Igc_Itzr=-avalf; - Igc_Ibcj=-avalf; - Igc_avalf=-(*Itzr)+(*Itxf)-Ibcj; - Igc_Vrxf=Igc_Itxf*(*Itxf_Vrxf); - Igc_Vrth=Igc_Itzr*(*Itzr_Vrth); - Igc_Vbci=Igc_Itzr*(*Itzr_Vbci); - Igc_Vbei=Igc_Itzr*(*Itzr_Vbei); - Igc_Vrth=Igc_Vrth+Igc_Ibcj*Ibcj_Vrth; - Igc_Vbci=Igc_Vbci+Igc_Ibcj*Ibcj_Vbci; - Igc_Vrth=Igc_Vrth+Igc_avalf*avalf_Vrth; - Igc_Vbci=Igc_Vbci+Igc_avalf*avalf_Vbci; - }else{ - Igc=0.0; - Igc_Vrxf=0.0; - Igc_Vrth=0.0; - Igc_Vbci=0.0; - Igc_Vbei=0.0; - } - (*Ibc)=Ibcj-Igc; - Ibc_Ibcj=1.0; - Ibc_Igc=-1.0; - *Ibc_Vrth=Ibc_Ibcj*Ibcj_Vrth; - *Ibc_Vbci=Ibc_Ibcj*Ibcj_Vbci; - *Ibc_Vrxf=Ibc_Igc*Igc_Vrxf; - *Ibc_Vrth=(*Ibc_Vrth)+Ibc_Igc*Igc_Vrth; - *Ibc_Vbci=(*Ibc_Vbci)+Ibc_Igc*Igc_Vbci; - *Ibc_Vbei=Ibc_Igc*Igc_Vbei; - if(p[1]>0.0){ - (*Ircx)=(*Vrcx)/RCXatT; - *Ircx_Vrcx=1.0/RCXatT; - Ircx_RCXatT=-(*Vrcx)/(RCXatT*RCXatT); - *Ircx_Vrth=Ircx_RCXatT*RCXatT_Vrth; - }else{ - (*Ircx)=0.0; - *Ircx_Vrcx=0.0; - *Ircx_Vrth=0.0; - } - argi=(*Vbci)/Vtv; - argi_Vbci=1.0/Vtv; - argi_Vtv=-(*Vbci)/(Vtv*Vtv); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbci=expi_argi*argi_Vbci; - expi_Vrth=expi_argi*argi_Vrth; - argx=(*Vbcx)/Vtv; - argx_Vbcx=1.0/Vtv; - argx_Vtv=-(*Vbcx)/(Vtv*Vtv); - argx_Vrth=argx_Vtv*Vtv_Vrth; - expx=exp(argx); - expx_argx=expx; - expx_Vbcx=expx_argx*argx_Vbcx; - expx_Vrth=expx_argx*argx_Vrth; - Kbci=sqrt(1.0+GAMMatT*expi); - Kbci_GAMMatT=expi/(2.0*sqrt(expi*GAMMatT+1.0)); - Kbci_expi=GAMMatT/(2.0*sqrt(expi*GAMMatT+1.0)); - Kbci_Vrth=Kbci_GAMMatT*GAMMatT_Vrth; - Kbci_Vbci=Kbci_expi*expi_Vbci; - Kbci_Vrth=Kbci_Vrth+Kbci_expi*expi_Vrth; - Kbcx=sqrt(1.0+GAMMatT*expx); - Kbcx_GAMMatT=expx/(2.0*sqrt(expx*GAMMatT+1.0)); - Kbcx_expx=GAMMatT/(2.0*sqrt(expx*GAMMatT+1.0)); - Kbcx_Vrth=Kbcx_GAMMatT*GAMMatT_Vrth; - Kbcx_Vbcx=Kbcx_expx*expx_Vbcx; - Kbcx_Vrth=Kbcx_Vrth+Kbcx_expx*expx_Vrth; - if(p[2]>0.0){ - rKp1=(Kbci+1.0)/(Kbcx+1.0); - rKp1_Kbci=1.0/(Kbcx+1.0); - rKp1_Kbcx=-(Kbci+1.0)/((Kbcx+1.0)*(Kbcx+1.0)); - rKp1_Vrth=rKp1_Kbci*Kbci_Vrth; - rKp1_Vbci=rKp1_Kbci*Kbci_Vbci; - rKp1_Vrth=rKp1_Vrth+rKp1_Kbcx*Kbcx_Vrth; - rKp1_Vbcx=rKp1_Kbcx*Kbcx_Vbcx; - xvar1=log(rKp1); - xvar1_rKp1=1.0/rKp1; - xvar1_Vrth=xvar1_rKp1*rKp1_Vrth; - xvar1_Vbci=xvar1_rKp1*rKp1_Vbci; - xvar1_Vbcx=xvar1_rKp1*rKp1_Vbcx; - Iohm=((*Vrci)+Vtv*(Kbci-Kbcx-xvar1))/RCIatT; - Iohm_Vrci=1.0/RCIatT; - Iohm_Vtv=(-xvar1-Kbcx+Kbci)/RCIatT; - Iohm_Kbci=Vtv/RCIatT; - Iohm_Kbcx=-Vtv/RCIatT; - Iohm_xvar1=-Vtv/RCIatT; - Iohm_RCIatT=-(Vtv*(-xvar1-Kbcx+Kbci)+(*Vrci))/(RCIatT*RCIatT); - Iohm_Vrth=Iohm_Vtv*Vtv_Vrth; - Iohm_Vrth=Iohm_Vrth+Iohm_Kbci*Kbci_Vrth; - Iohm_Vbci=Iohm_Kbci*Kbci_Vbci; - Iohm_Vrth=Iohm_Vrth+Iohm_Kbcx*Kbcx_Vrth; - Iohm_Vbcx=Iohm_Kbcx*Kbcx_Vbcx; - Iohm_Vrth=Iohm_Vrth+Iohm_xvar1*xvar1_Vrth; - Iohm_Vbci=Iohm_Vbci+Iohm_xvar1*xvar1_Vbci; - Iohm_Vbcx=Iohm_Vbcx+Iohm_xvar1*xvar1_Vbcx; - Iohm_Vrth=Iohm_Vrth+Iohm_RCIatT*RCIatT_Vrth; - derf=IVO*RCIatT*Iohm/(1.0+0.5*IVO*IHRCF*sqrt((*Vrci)*(*Vrci)+0.01)); - derf_IVO=Iohm*RCIatT/(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)-0.5*IHRCF*Iohm*IVO*RCIatT*sqrt(((*Vrci)*(*Vrci))+0.01)/((0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)*(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)); - derf_RCIatT=Iohm*IVO/(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0); - derf_Iohm=IVO*RCIatT/(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0); - derf_Vrci=-0.5*IHRCF*Iohm*(IVO*IVO)*RCIatT*(*Vrci)/(sqrt(((*Vrci)*(*Vrci))+0.01)*((0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0)*(0.5*IHRCF*IVO*sqrt(((*Vrci)*(*Vrci))+0.01)+1.0))); - derf_Vrth=derf_IVO*IVO_Vrth; - derf_Vrth=derf_Vrth+derf_RCIatT*RCIatT_Vrth; - derf_Vrci=derf_Vrci+derf_Iohm*Iohm_Vrci; - derf_Vrth=derf_Vrth+derf_Iohm*Iohm_Vrth; - derf_Vbci=derf_Iohm*Iohm_Vbci; - derf_Vbcx=derf_Iohm*Iohm_Vbcx; - (*Irci)=Iohm/sqrt(1.0+derf*derf); - Irci_Iohm=1.0/sqrt((derf*derf)+1.0); - Irci_derf=-derf*Iohm/pow(((derf*derf)+1.0),(3.0/2.0)); - *Irci_Vrci=Irci_Iohm*Iohm_Vrci; - *Irci_Vrth=Irci_Iohm*Iohm_Vrth; - *Irci_Vbci=Irci_Iohm*Iohm_Vbci; - *Irci_Vbcx=Irci_Iohm*Iohm_Vbcx; - *Irci_Vrth=(*Irci_Vrth)+Irci_derf*derf_Vrth; - *Irci_Vrci=(*Irci_Vrci)+Irci_derf*derf_Vrci; - *Irci_Vbci=(*Irci_Vbci)+Irci_derf*derf_Vbci; - *Irci_Vbcx=(*Irci_Vbcx)+Irci_derf*derf_Vbcx; - }else{ - (*Irci)=0.0; - *Irci_Vrci=0.0; - *Irci_Vrth=0.0; - *Irci_Vbci=0.0; - *Irci_Vbcx=0.0; - } - if(p[6]>0.0){ - (*Irbx)=(*Vrbx)/RBXatT; - *Irbx_Vrbx=1.0/RBXatT; - Irbx_RBXatT=-(*Vrbx)/(RBXatT*RBXatT); - *Irbx_Vrth=Irbx_RBXatT*RBXatT_Vrth; - }else{ - (*Irbx)=0.0; - *Irbx_Vrbx=0.0; - *Irbx_Vrth=0.0; - } - if(p[7]>0.0){ - (*Irbi)=(*Vrbi)*qb/RBIatT; - *Irbi_Vrbi=qb/RBIatT; - Irbi_qb=(*Vrbi)/RBIatT; - Irbi_RBIatT=-qb*(*Vrbi)/(RBIatT*RBIatT); - *Irbi_Vrth=Irbi_qb*qb_Vrth; - *Irbi_Vbei=Irbi_qb*qb_Vbei; - *Irbi_Vbci=Irbi_qb*qb_Vbci; - *Irbi_Vrth=(*Irbi_Vrth)+Irbi_RBIatT*RBIatT_Vrth; - }else{ - (*Irbi)=0.0; - *Irbi_Vrbi=0.0; - *Irbi_Vrth=0.0; - *Irbi_Vbei=0.0; - *Irbi_Vbci=0.0; - } - if(p[8]>0.0){ - (*Ire)=(*Vre)/REatT; - *Ire_Vre=1.0/REatT; - Ire_REatT=-(*Vre)/(REatT*REatT); - *Ire_Vrth=Ire_REatT*REatT_Vrth; - }else{ - (*Ire)=0.0; - *Ire_Vre=0.0; - *Ire_Vrth=0.0; - } - if(p[10]>0.0){ - (*Irbp)=(*Vrbp)*qbp/RBPatT; - *Irbp_Vrbp=qbp/RBPatT; - Irbp_qbp=(*Vrbp)/RBPatT; - Irbp_RBPatT=-qbp*(*Vrbp)/(RBPatT*RBPatT); - *Irbp_Vrth=Irbp_qbp*qbp_Vrth; - *Irbp_Vbep=Irbp_qbp*qbp_Vbep; - *Irbp_Vbci=Irbp_qbp*qbp_Vbci; - *Irbp_Vrth=(*Irbp_Vrth)+Irbp_RBPatT*RBPatT_Vrth; - }else{ - (*Irbp)=0.0; - *Irbp_Vrbp=0.0; - *Irbp_Vrth=0.0; - *Irbp_Vbep=0.0; - *Irbp_Vbci=0.0; - } - if((p[47]>0.0)||(p[49]>0.0)){ - argi=(*Vbcp)/(p[48]*Vtv); - argi_Vbcp=1.0/(p[48]*Vtv); - argi_Vtv=-(*Vbcp)/(p[48]*(Vtv*Vtv)); - argi_Vrth=argi_Vtv*Vtv_Vrth; - expi=exp(argi); - expi_argi=expi; - expi_Vbcp=expi_argi*argi_Vbcp; - expi_Vrth=expi_argi*argi_Vrth; - argn=(*Vbcp)/(p[50]*Vtv); - argn_Vbcp=1.0/(p[50]*Vtv); - argn_Vtv=-(*Vbcp)/(p[50]*(Vtv*Vtv)); - argn_Vrth=argn_Vtv*Vtv_Vrth; - expn=exp(argn); - expn_argn=expn; - expn_Vbcp=expn_argn*argn_Vbcp; - expn_Vrth=expn_argn*argn_Vrth; - (*Ibcp)=IBCIPatT*(expi-1.0)+IBCNPatT*(expn-1.0); - Ibcp_IBCIPatT=expi-1.0; - Ibcp_expi=IBCIPatT; - Ibcp_IBCNPatT=expn-1.0; - Ibcp_expn=IBCNPatT; - *Ibcp_Vrth=Ibcp_IBCIPatT*IBCIPatT_Vrth; - *Ibcp_Vbcp=Ibcp_expi*expi_Vbcp; - *Ibcp_Vrth=(*Ibcp_Vrth)+Ibcp_expi*expi_Vrth; - *Ibcp_Vrth=(*Ibcp_Vrth)+Ibcp_IBCNPatT*IBCNPatT_Vrth; - *Ibcp_Vbcp=(*Ibcp_Vbcp)+Ibcp_expn*expn_Vbcp; - *Ibcp_Vrth=(*Ibcp_Vrth)+Ibcp_expn*expn_Vrth; - }else{ - (*Ibcp)=0.0; - *Ibcp_Vrth=0.0; - *Ibcp_Vbcp=0.0; - } - if(p[9]>0.0){ - (*Irs)=(*Vrs)/RSatT; - *Irs_Vrs=1.0/RSatT; - Irs_RSatT=-(*Vrs)/(RSatT*RSatT); - *Irs_Vrth=Irs_RSatT*RSatT_Vrth; - }else{ - (*Irs)=0.0; - *Irs_Vrs=0.0; - *Irs_Vrth=0.0; - } - if(Ifi>0.0){ - sgIf=1.0; - }else{ - sgIf=0.0; - } - rIf=Ifi*sgIf*IITF; - rIf_Ifi=IITF*sgIf; - rIf_Vrth=rIf_Ifi*Ifi_Vrth; - rIf_Vbei=rIf_Ifi*Ifi_Vbei; - mIf=rIf/(rIf+1.0); - mIf_rIf=1.0/(rIf+1.0)-rIf/((rIf+1.0)*(rIf+1.0)); - mIf_Vrth=mIf_rIf*rIf_Vrth; - mIf_Vbei=mIf_rIf*rIf_Vbei; - xvar1=(*Vbci)*IVTF/1.44; - xvar1_Vbci=0.6944444*IVTF; - xvar2=exp(xvar1); - xvar2_xvar1=xvar2; - xvar2_Vbci=xvar2_xvar1*xvar1_Vbci; - 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_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_Vrth=tff_q1*q1_Vrth; - tff_Vbei=tff_q1*q1_Vbei; - tff_Vbci=tff_q1*q1_Vbci; - tff_Vbci=tff_Vbci+tff_xvar2*xvar2_Vbci; - tff_Vrth=tff_Vrth+tff_mIf*mIf_Vrth; - tff_Vbei=tff_Vbei+tff_mIf*mIf_Vbei; - (*Qbe)=CJEatT*qdbe*p[32]+tff*Ifi/qb; - Qbe_CJEatT=qdbe*p[32]; - Qbe_qdbe=CJEatT*p[32]; - Qbe_tff=Ifi/qb; - Qbe_Ifi=tff/qb; - Qbe_qb=-Ifi*tff/(qb*qb); - *Qbe_Vrth=Qbe_CJEatT*CJEatT_Vrth; - *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qdbe*qdbe_Vrth; - *Qbe_Vbei=Qbe_qdbe*qdbe_Vbei; - *Qbe_Vrth=(*Qbe_Vrth)+Qbe_tff*tff_Vrth; - *Qbe_Vbei=(*Qbe_Vbei)+Qbe_tff*tff_Vbei; - *Qbe_Vbci=Qbe_tff*tff_Vbci; - *Qbe_Vrth=(*Qbe_Vrth)+Qbe_Ifi*Ifi_Vrth; - *Qbe_Vbei=(*Qbe_Vbei)+Qbe_Ifi*Ifi_Vbei; - *Qbe_Vrth=(*Qbe_Vrth)+Qbe_qb*qb_Vrth; - *Qbe_Vbei=(*Qbe_Vbei)+Qbe_qb*qb_Vbei; - *Qbe_Vbci=(*Qbe_Vbci)+Qbe_qb*qb_Vbci; - (*Qbex)=CJEatT*qdbex*(1.0-p[32]); - Qbex_CJEatT=qdbex*(1.0-p[32]); - Qbex_qdbex=CJEatT*(1.0-p[32]); - *Qbex_Vrth=Qbex_CJEatT*CJEatT_Vrth; - *Qbex_Vrth=(*Qbex_Vrth)+Qbex_qdbex*qdbex_Vrth; - *Qbex_Vbex=Qbex_qdbex*qdbex_Vbex; - (*Qbc)=CJCatT*qdbc+p[61]*Iri+p[22]*Kbci; - Qbc_CJCatT=qdbc; - Qbc_qdbc=CJCatT; - Qbc_Iri=p[61]; - Qbc_Kbci=p[22]; - *Qbc_Vrth=Qbc_CJCatT*CJCatT_Vrth; - *Qbc_Vrth=(*Qbc_Vrth)+Qbc_qdbc*qdbc_Vrth; - *Qbc_Vbci=Qbc_qdbc*qdbc_Vbci; - *Qbc_Vrth=(*Qbc_Vrth)+Qbc_Iri*Iri_Vrth; - *Qbc_Vbci=(*Qbc_Vbci)+Qbc_Iri*Iri_Vbci; - *Qbc_Vrth=(*Qbc_Vrth)+Qbc_Kbci*Kbci_Vrth; - *Qbc_Vbci=(*Qbc_Vbci)+Qbc_Kbci*Kbci_Vbci; - (*Qbcx)=p[22]*Kbcx; - Qbcx_Kbcx=p[22]; - *Qbcx_Vrth=Qbcx_Kbcx*Kbcx_Vrth; - *Qbcx_Vbcx=Qbcx_Kbcx*Kbcx_Vbcx; - (*Qbep)=CJEPatT*qdbep+p[61]*Ifp; - Qbep_CJEPatT=qdbep; - Qbep_qdbep=CJEPatT; - Qbep_Ifp=p[61]; - *Qbep_Vrth=Qbep_CJEPatT*CJEPatT_Vrth; - *Qbep_Vrth=(*Qbep_Vrth)+Qbep_qdbep*qdbep_Vrth; - *Qbep_Vbep=Qbep_qdbep*qdbep_Vbep; - *Qbep_Vrth=(*Qbep_Vrth)+Qbep_Ifp*Ifp_Vrth; - *Qbep_Vbep=(*Qbep_Vbep)+Qbep_Ifp*Ifp_Vbep; - *Qbep_Vbci=Qbep_Ifp*Ifp_Vbci; - (*Qbcp)=CJCPatT*qdbcp+p[87]*(*Vbcp); - Qbcp_CJCPatT=qdbcp; - Qbcp_qdbcp=CJCPatT; - *Qbcp_Vbcp=p[87]; - *Qbcp_Vrth=Qbcp_CJCPatT*CJCPatT_Vrth; - *Qbcp_Vrth=(*Qbcp_Vrth)+Qbcp_qdbcp*qdbcp_Vrth; - *Qbcp_Vbcp=(*Qbcp_Vbcp)+Qbcp_qdbcp*qdbcp_Vbcp; - (*Qbeo)=(*Vbe)*p[15]; - *Qbeo_Vbe=p[15]; - (*Qbco)=(*Vbc)*p[20]; - *Qbco_Vbc=p[20]; - (*Ith)=-((*Ibe)*(*Vbei)+(*Ibc)*(*Vbci)+((*Itxf)-(*Itzr))*(*Vcei)+(*Ibex)*(*Vbex)+(*Ibep)*(*Vbep)+(*Irs)*(*Vrs)+(*Ibcp)*(*Vbcp)+(*Iccp)*(*Vcep)+(*Ircx)*(*Vrcx)+(*Irci)*(*Vrci)+(*Irbx)*(*Vrbx)+(*Irbi)*(*Vrbi)+(*Ire)*(*Vre)+(*Irbp)*(*Vrbp)); - Ith_Ibe=-(*Vbei); - *Ith_Vbei=-(*Ibe); - Ith_Ibc=-(*Vbci); - *Ith_Vbci=-(*Ibc); - Ith_Itxf=-(*Vcei); - Ith_Itzr=(*Vcei); - *Ith_Vcei=(*Itzr)-(*Itxf); - Ith_Ibex=-(*Vbex); - *Ith_Vbex=-(*Ibex); - Ith_Ibep=-(*Vbep); - *Ith_Vbep=-(*Ibep); - Ith_Irs=-(*Vrs); - *Ith_Vrs=-(*Irs); - Ith_Ibcp=-(*Vbcp); - *Ith_Vbcp=-(*Ibcp); - Ith_Iccp=-(*Vcep); - *Ith_Vcep=-(*Iccp); - Ith_Ircx=-(*Vrcx); - *Ith_Vrcx=-(*Ircx); - Ith_Irci=-(*Vrci); - *Ith_Vrci=-(*Irci); - Ith_Irbx=-(*Vrbx); - *Ith_Vrbx=-(*Irbx); - Ith_Irbi=-(*Vrbi); - *Ith_Vrbi=-(*Irbi); - Ith_Ire=-(*Vre); - *Ith_Vre=-(*Ire); - Ith_Irbp=-(*Vrbp); - *Ith_Vrbp=-(*Irbp); - *Ith_Vrth=Ith_Ibe*(*Ibe_Vrth); - *Ith_Vbei=(*Ith_Vbei)+Ith_Ibe*(*Ibe_Vbei); - *Ith_Vrth=(*Ith_Vrth)+Ith_Ibc*(*Ibc_Vrth); - *Ith_Vbci=(*Ith_Vbci)+Ith_Ibc*(*Ibc_Vbci); - *Ith_Vrxf=Ith_Ibc*(*Ibc_Vrxf); - *Ith_Vbei=(*Ith_Vbei)+Ith_Ibc*(*Ibc_Vbei); - *Ith_Vrxf=(*Ith_Vrxf)+Ith_Itxf*(*Itxf_Vrxf); - *Ith_Vrth=(*Ith_Vrth)+Ith_Itzr*(*Itzr_Vrth); - *Ith_Vbci=(*Ith_Vbci)+Ith_Itzr*(*Itzr_Vbci); - *Ith_Vbei=(*Ith_Vbei)+Ith_Itzr*(*Itzr_Vbei); - *Ith_Vrth=(*Ith_Vrth)+Ith_Ibex*(*Ibex_Vrth); - *Ith_Vbex=(*Ith_Vbex)+Ith_Ibex*(*Ibex_Vbex); - *Ith_Vrth=(*Ith_Vrth)+Ith_Ibep*(*Ibep_Vrth); - *Ith_Vbep=(*Ith_Vbep)+Ith_Ibep*(*Ibep_Vbep); - *Ith_Vrs=(*Ith_Vrs)+Ith_Irs*(*Irs_Vrs); - *Ith_Vrth=(*Ith_Vrth)+Ith_Irs*(*Irs_Vrth); - *Ith_Vrth=(*Ith_Vrth)+Ith_Ibcp*(*Ibcp_Vrth); - *Ith_Vbcp=(*Ith_Vbcp)+Ith_Ibcp*(*Ibcp_Vbcp); - *Ith_Vrth=(*Ith_Vrth)+Ith_Iccp*(*Iccp_Vrth); - *Ith_Vbep=(*Ith_Vbep)+Ith_Iccp*(*Iccp_Vbep); - *Ith_Vbci=(*Ith_Vbci)+Ith_Iccp*(*Iccp_Vbci); - *Ith_Vbcp=(*Ith_Vbcp)+Ith_Iccp*(*Iccp_Vbcp); - *Ith_Vrcx=(*Ith_Vrcx)+Ith_Ircx*(*Ircx_Vrcx); - *Ith_Vrth=(*Ith_Vrth)+Ith_Ircx*(*Ircx_Vrth); - *Ith_Vrci=(*Ith_Vrci)+Ith_Irci*(*Irci_Vrci); - *Ith_Vrth=(*Ith_Vrth)+Ith_Irci*(*Irci_Vrth); - *Ith_Vbci=(*Ith_Vbci)+Ith_Irci*(*Irci_Vbci); - *Ith_Vbcx=Ith_Irci*(*Irci_Vbcx); - *Ith_Vrbx=(*Ith_Vrbx)+Ith_Irbx*(*Irbx_Vrbx); - *Ith_Vrth=(*Ith_Vrth)+Ith_Irbx*(*Irbx_Vrth); - *Ith_Vrbi=(*Ith_Vrbi)+Ith_Irbi*(*Irbi_Vrbi); - *Ith_Vrth=(*Ith_Vrth)+Ith_Irbi*(*Irbi_Vrth); - *Ith_Vbei=(*Ith_Vbei)+Ith_Irbi*(*Irbi_Vbei); - *Ith_Vbci=(*Ith_Vbci)+Ith_Irbi*(*Irbi_Vbci); - *Ith_Vre=(*Ith_Vre)+Ith_Ire*(*Ire_Vre); - *Ith_Vrth=(*Ith_Vrth)+Ith_Ire*(*Ire_Vrth); - *Ith_Vrbp=(*Ith_Vrbp)+Ith_Irbp*(*Irbp_Vrbp); - *Ith_Vrth=(*Ith_Vrth)+Ith_Irbp*(*Irbp_Vrth); - *Ith_Vbep=(*Ith_Vbep)+Ith_Irbp*(*Irbp_Vbep); - *Ith_Vbci=(*Ith_Vbci)+Ith_Irbp*(*Irbp_Vbci); - if(p[83]>0.0){ - (*Irth)=(*Vrth)/p[83]; - *Irth_Vrth=1.0/p[83]; - }else{ - (*Irth)=0.0; - *Irth_Vrth=0.0; - } - (*Qcth)=(*Vrth)*p[84]; - *Qcth_Vrth=p[84]; - (*Flxf)=LEP*(*Ixxf); - Flxf_Ixxf=LEP; - *Flxf_Vrxf=Flxf_Ixxf*(*Ixxf_Vrxf); - (*Qcxf)=CEP*(*Vcxf); - *Qcxf_Vcxf=CEP; - -/* Scale outputs */ - - if((*SCALE)!=1.0){ - *Ibe=(*SCALE)*(*Ibe); - *Ibe_Vrth=(*SCALE)*(*Ibe_Vrth); - *Ibe_Vbei=(*SCALE)*(*Ibe_Vbei); - *Ibex=(*SCALE)*(*Ibex); - *Ibex_Vrth=(*SCALE)*(*Ibex_Vrth); - *Ibex_Vbex=(*SCALE)*(*Ibex_Vbex); - *Itxf=(*SCALE)*(*Itxf); - *Itxf_Vrxf=(*SCALE)*(*Itxf_Vrxf); - *Itzr=(*SCALE)*(*Itzr); - *Itzr_Vrth=(*SCALE)*(*Itzr_Vrth); - *Itzr_Vbci=(*SCALE)*(*Itzr_Vbci); - *Itzr_Vbei=(*SCALE)*(*Itzr_Vbei); - *Ibc=(*SCALE)*(*Ibc); - *Ibc_Vrth=(*SCALE)*(*Ibc_Vrth); - *Ibc_Vbci=(*SCALE)*(*Ibc_Vbci); - *Ibc_Vrxf=(*SCALE)*(*Ibc_Vrxf); - *Ibc_Vbei=(*SCALE)*(*Ibc_Vbei); - *Ibep=(*SCALE)*(*Ibep); - *Ibep_Vrth=(*SCALE)*(*Ibep_Vrth); - *Ibep_Vbep=(*SCALE)*(*Ibep_Vbep); - *Ircx=(*SCALE)*(*Ircx); - *Ircx_Vrcx=(*SCALE)*(*Ircx_Vrcx); - *Ircx_Vrth=(*SCALE)*(*Ircx_Vrth); - *Irci=(*SCALE)*(*Irci); - *Irci_Vrci=(*SCALE)*(*Irci_Vrci); - *Irci_Vrth=(*SCALE)*(*Irci_Vrth); - *Irci_Vbci=(*SCALE)*(*Irci_Vbci); - *Irci_Vbcx=(*SCALE)*(*Irci_Vbcx); - *Irbx=(*SCALE)*(*Irbx); - *Irbx_Vrbx=(*SCALE)*(*Irbx_Vrbx); - *Irbx_Vrth=(*SCALE)*(*Irbx_Vrth); - *Irbi=(*SCALE)*(*Irbi); - *Irbi_Vrbi=(*SCALE)*(*Irbi_Vrbi); - *Irbi_Vrth=(*SCALE)*(*Irbi_Vrth); - *Irbi_Vbei=(*SCALE)*(*Irbi_Vbei); - *Irbi_Vbci=(*SCALE)*(*Irbi_Vbci); - *Ire=(*SCALE)*(*Ire); - *Ire_Vre=(*SCALE)*(*Ire_Vre); - *Ire_Vrth=(*SCALE)*(*Ire_Vrth); - *Irbp=(*SCALE)*(*Irbp); - *Irbp_Vrbp=(*SCALE)*(*Irbp_Vrbp); - *Irbp_Vrth=(*SCALE)*(*Irbp_Vrth); - *Irbp_Vbep=(*SCALE)*(*Irbp_Vbep); - *Irbp_Vbci=(*SCALE)*(*Irbp_Vbci); - *Qbe=(*SCALE)*(*Qbe); - *Qbe_Vrth=(*SCALE)*(*Qbe_Vrth); - *Qbe_Vbei=(*SCALE)*(*Qbe_Vbei); - *Qbe_Vbci=(*SCALE)*(*Qbe_Vbci); - *Qbex=(*SCALE)*(*Qbex); - *Qbex_Vrth=(*SCALE)*(*Qbex_Vrth); - *Qbex_Vbex=(*SCALE)*(*Qbex_Vbex); - *Qbc=(*SCALE)*(*Qbc); - *Qbc_Vrth=(*SCALE)*(*Qbc_Vrth); - *Qbc_Vbci=(*SCALE)*(*Qbc_Vbci); - *Qbcx=(*SCALE)*(*Qbcx); - *Qbcx_Vrth=(*SCALE)*(*Qbcx_Vrth); - *Qbcx_Vbcx=(*SCALE)*(*Qbcx_Vbcx); - *Qbep=(*SCALE)*(*Qbep); - *Qbep_Vrth=(*SCALE)*(*Qbep_Vrth); - *Qbep_Vbep=(*SCALE)*(*Qbep_Vbep); - *Qbep_Vbci=(*SCALE)*(*Qbep_Vbci); - *Qbeo=(*SCALE)*(*Qbeo); - *Qbeo_Vbe=(*SCALE)*(*Qbeo_Vbe); - *Qbco=(*SCALE)*(*Qbco); - *Qbco_Vbc=(*SCALE)*(*Qbco_Vbc); - *Ibcp=(*SCALE)*(*Ibcp); - *Ibcp_Vrth=(*SCALE)*(*Ibcp_Vrth); - *Ibcp_Vbcp=(*SCALE)*(*Ibcp_Vbcp); - *Iccp=(*SCALE)*(*Iccp); - *Iccp_Vrth=(*SCALE)*(*Iccp_Vrth); - *Iccp_Vbep=(*SCALE)*(*Iccp_Vbep); - *Iccp_Vbci=(*SCALE)*(*Iccp_Vbci); - *Iccp_Vbcp=(*SCALE)*(*Iccp_Vbcp); - *Irs=(*SCALE)*(*Irs); - *Irs_Vrs=(*SCALE)*(*Irs_Vrs); - *Irs_Vrth=(*SCALE)*(*Irs_Vrth); - *Qbcp=(*SCALE)*(*Qbcp); - *Qbcp_Vrth=(*SCALE)*(*Qbcp_Vrth); - *Qbcp_Vbcp=(*SCALE)*(*Qbcp_Vbcp); - *Irth=(*SCALE)*(*Irth); - *Irth_Vrth=(*SCALE)*(*Irth_Vrth); - *Ith=(*SCALE)*(*Ith); - *Ith_Vrth=(*SCALE)*(*Ith_Vrth); - *Ith_Vbei=(*SCALE)*(*Ith_Vbei); - *Ith_Vbci=(*SCALE)*(*Ith_Vbci); - *Ith_Vrxf=(*SCALE)*(*Ith_Vrxf); - *Ith_Vcei=(*SCALE)*(*Ith_Vcei); - *Ith_Vbex=(*SCALE)*(*Ith_Vbex); - *Ith_Vbep=(*SCALE)*(*Ith_Vbep); - *Ith_Vrs=(*SCALE)*(*Ith_Vrs); - *Ith_Vbcp=(*SCALE)*(*Ith_Vbcp); - *Ith_Vcep=(*SCALE)*(*Ith_Vcep); - *Ith_Vrcx=(*SCALE)*(*Ith_Vrcx); - *Ith_Vrci=(*SCALE)*(*Ith_Vrci); - *Ith_Vbcx=(*SCALE)*(*Ith_Vbcx); - *Ith_Vrbx=(*SCALE)*(*Ith_Vrbx); - *Ith_Vrbi=(*SCALE)*(*Ith_Vrbi); - *Ith_Vre=(*SCALE)*(*Ith_Vre); - *Ith_Vrbp=(*SCALE)*(*Ith_Vrbp); - *Qcth=(*SCALE)*(*Qcth); - *Qcth_Vrth=(*SCALE)*(*Qcth_Vrth); - *Ixzf=(*SCALE)*(*Ixzf); - *Ixzf_Vrth=(*SCALE)*(*Ixzf_Vrth); - *Ixzf_Vbei=(*SCALE)*(*Ixzf_Vbei); - *Ixzf_Vbci=(*SCALE)*(*Ixzf_Vbci); - *Ixxf=(*SCALE)*(*Ixxf); - *Ixxf_Vrxf=(*SCALE)*(*Ixxf_Vrxf); - *Qcxf=(*SCALE)*(*Qcxf); - *Qcxf_Vcxf=(*SCALE)*(*Qcxf_Vcxf); - *Flxf=(*SCALE)*(*Flxf); - *Flxf_Vrxf=(*SCALE)*(*Flxf_Vrxf); - } - return(0); -} diff --git a/src/spicelib/devices/vbic/vbicnoise.c b/src/spicelib/devices/vbic/vbicnoise.c index f1995a24d..3a61ff142 100644 --- a/src/spicelib/devices/vbic/vbicnoise.c +++ b/src/spicelib/devices/vbic/vbicnoise.c @@ -127,16 +127,10 @@ VBICnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt, Ndata * ckt,THERMNOISE,inst->VBICsubsSINode,inst->VBICsubsNode, *(ckt->CKTstate0 + inst->VBICirs_Vrs), dtemp); - if (!inst->VBIC_excessPhase) { - NevalSrc(&noizDens[VBICICNOIZ],&lnNdens[VBICICNOIZ], - ckt,SHOTNOISE,inst->VBICcollCINode, inst->VBICemitEINode, - *(ckt->CKTstate0 + inst->VBICitzf)); - } - if (inst->VBIC_excessPhase) { - NevalSrc(&noizDens[VBICICNOIZ],&lnNdens[VBICICNOIZ], - ckt,SHOTNOISE,inst->VBICcollCINode, inst->VBICemitEINode, - *(ckt->CKTstate0 + inst->VBICitxf)); - } + NevalSrc(&noizDens[VBICICNOIZ],&lnNdens[VBICICNOIZ], + ckt,SHOTNOISE,inst->VBICcollCINode, inst->VBICemitEINode, + *(ckt->CKTstate0 + inst->VBICiciei)); + NevalSrc(&noizDens[VBICIBNOIZ],&lnNdens[VBICIBNOIZ], ckt,SHOTNOISE,inst->VBICbaseBINode, inst->VBICemitEINode, *(ckt->CKTstate0 + inst->VBICibe)); diff --git a/src/spicelib/devices/vbic/vbicpzld.c b/src/spicelib/devices/vbic/vbicpzld.c index 6fe9cc06a..aae665655 100644 --- a/src/spicelib/devices/vbic/vbicpzld.c +++ b/src/spicelib/devices/vbic/vbicpzld.c @@ -23,7 +23,7 @@ VBICpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) VBICinstance *here; VBICmodel *model = (VBICmodel*)inModel; double Ibe_Vbei,Ibex_Vbex - ,Itzf_Vbei,Itzf_Vbci,Itzr_Vbci,Itzr_Vbei,Ibc_Vbci + ,Iciei_Vbei,Iciei_Vbci,Ibc_Vbci ,Ibc_Vbei,Ibep_Vbep,Ircx_Vrcx,Irci_Vrci ,Irci_Vbci,Irci_Vbcx,Irbx_Vrbx,Irbi_Vrbi,Irbi_Vbei ,Irbi_Vbci,Ire_Vre,Irbp_Vrbp,Irbp_Vbep,Irbp_Vbci @@ -32,7 +32,7 @@ VBICpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) XQbcx_Vbcx, XQbep_Vbep, XQbep_Vbci, XQbcp_Vbcp, XQbeo_Vbe, XQbco_Vbc; - double Ibe_Vrth, Ibex_Vrth, Itzf_Vrth=0.0, Itzr_Vrth, Ibc_Vrth, Ibep_Vrth, + double Ibe_Vrth, Ibex_Vrth, Iciei_Vrth, Iciei_Vxf2, Ibc_Vrth, Ibep_Vrth, Ircx_Vrth, Irci_Vrth, Irbx_Vrth, Irbi_Vrth, Ire_Vrth, Irbp_Vrth, Ibcp_Vrth, Iccp_Vrth, Irs_Vrth, Irth_Vrth, Ith_Vrth, Ith_Vbei, Ith_Vbci, Ith_Vcei, Ith_Vbex, Ith_Vbep, Ith_Vbcp, Ith_Vcep, @@ -40,22 +40,34 @@ VBICpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) double XQcth_Vrth, XQbe_Vrth, XQbex_Vrth, XQbc_Vrth, XQbcx_Vrth, XQbep_Vrth, XQbcp_Vrth; //NQS - double Itxf_Vrxf, Ibc_Vrxf, Ith_Vrxf, Ixzf_Vrth, Ixxf_Vrxf, XQcxf_Vcxf; - double Ixzf_Vbei, Ixzf_Vbci, Xl; + double XQxf1_Vxf1; + double XQxf2_Vxf2; + + double Ixf1_Vbei; + double Ixf1_Vbci; + double Ixf1_Vxf2; + double Ixf1_Vxf1; + double Ixf1_Vrth; + + double Ixf2_Vbei; + double Ixf2_Vbci; + double Ixf2_Vxf2; + double Ixf2_Vxf1; + double Ixf2_Vrth; /* loop through all the models */ for( ; model != NULL; model = VBICnextModel(model)) { /* loop through all the instances of the model */ - for( here = VBICinstances(model); here!= NULL; + for( here = VBICinstances(model); here!= NULL; here = VBICnextInstance(here)) { Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei); Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex); - Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei); - Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci); - Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci); - Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei); + Iciei_Vbei = *(ckt->CKTstate0 + here->VBICiciei_Vbei); + Iciei_Vbci = *(ckt->CKTstate0 + here->VBICiciei_Vbci); + Iciei_Vrth = *(ckt->CKTstate0 + here->VBICiciei_Vrth); + Iciei_Vxf2 = *(ckt->CKTstate0 + here->VBICiciei_Vxf2); Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci); Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei); Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep); @@ -77,6 +89,18 @@ VBICpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs); Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre); + Ixf1_Vbei = *(ckt->CKTstate0 + here->VBICixf1_Vbei); + Ixf1_Vbci = *(ckt->CKTstate0 + here->VBICixf1_Vbci); + Ixf1_Vxf2 = *(ckt->CKTstate0 + here->VBICixf1_Vxf2); + Ixf1_Vxf1 = *(ckt->CKTstate0 + here->VBICixf1_Vxf1); + 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_Vrth = *(ckt->CKTstate0 + here->VBICixf2_Vrth); + /* c The real part */ @@ -94,32 +118,22 @@ c Stamp element: Ibex *(here->VBICbaseBXEmitEIPtr) += -Ibex_Vbex; *(here->VBICemitEIBaseBXPtr) += -Ibex_Vbex; *(here->VBICemitEIEmitEIPtr) += Ibex_Vbex; - - if (!here->VBIC_excessPhase) { /* -c Stamp element: Itzf +c Stamp element: Iciei */ - *(here->VBICcollCIBaseBIPtr) += Itzf_Vbei; - *(here->VBICcollCIEmitEIPtr) += -Itzf_Vbei; - *(here->VBICcollCIBaseBIPtr) += Itzf_Vbci; - *(here->VBICcollCICollCIPtr) += -Itzf_Vbci; - *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbei; - *(here->VBICemitEIEmitEIPtr) += Itzf_Vbei; - *(here->VBICemitEIBaseBIPtr) += -Itzf_Vbci; - *(here->VBICemitEICollCIPtr) += Itzf_Vbci; + *(here->VBICcollCIBaseBIPtr) += Iciei_Vbei; + *(here->VBICcollCIEmitEIPtr) += -Iciei_Vbei; + *(here->VBICcollCIBaseBIPtr) += Iciei_Vbci; + *(here->VBICcollCICollCIPtr) += -Iciei_Vbci; + *(here->VBICemitEIBaseBIPtr) += -Iciei_Vbei; + *(here->VBICemitEIEmitEIPtr) += Iciei_Vbei; + *(here->VBICemitEIBaseBIPtr) += -Iciei_Vbci; + *(here->VBICemitEICollCIPtr) += Iciei_Vbci; + if (here->VBIC_excessPhase) { + *(here->VBICcollCIXf2Ptr) += Iciei_Vxf2; + *(here->VBICemitEIXf2Ptr) += -Iciei_Vxf2; } /* -c Stamp element: Itzr -*/ - *(here->VBICemitEIBaseBIPtr) += Itzr_Vbci; - *(here->VBICemitEICollCIPtr) += -Itzr_Vbci; - *(here->VBICemitEIBaseBIPtr) += Itzr_Vbei; - *(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei; - *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci; - *(here->VBICcollCICollCIPtr) += Itzr_Vbci; - *(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei; - *(here->VBICcollCIEmitEIPtr) += Itzr_Vbei; -/* c Stamp element: Ibc */ *(here->VBICbaseBIBaseBIPtr) += Ibc_Vbci; @@ -138,14 +152,14 @@ c Stamp element: Ibep *(here->VBICbaseBPBaseBXPtr) += -Ibep_Vbep; *(here->VBICbaseBPBaseBPPtr) += Ibep_Vbep; /* -c Stamp element: Ircx +c Stamp element: Rcx */ *(here->VBICcollCollPtr) += Ircx_Vrcx; *(here->VBICcollCXCollCXPtr) += Ircx_Vrcx; *(here->VBICcollCXCollPtr) += -Ircx_Vrcx; *(here->VBICcollCollCXPtr) += -Ircx_Vrcx; /* -c Stamp element: Irci +c Stamp element: Rci */ *(here->VBICcollCXCollCXPtr) += Irci_Vrci; *(here->VBICcollCXCollCIPtr) += -Irci_Vrci; @@ -160,14 +174,14 @@ c Stamp element: Irci *(here->VBICcollCIBaseBIPtr) += -Irci_Vbcx; *(here->VBICcollCICollCXPtr) += Irci_Vbcx; /* -c Stamp element: Irbx +c Stamp element: Rbx */ *(here->VBICbaseBasePtr) += Irbx_Vrbx; *(here->VBICbaseBXBaseBXPtr) += Irbx_Vrbx; *(here->VBICbaseBXBasePtr) += -Irbx_Vrbx; *(here->VBICbaseBaseBXPtr) += -Irbx_Vrbx; /* -c Stamp element: Irbi +c Stamp element: Rbi */ *(here->VBICbaseBXBaseBXPtr) += Irbi_Vrbi; *(here->VBICbaseBXBaseBIPtr) += -Irbi_Vrbi; @@ -182,14 +196,14 @@ c Stamp element: Irbi *(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbci; *(here->VBICbaseBICollCIPtr) += Irbi_Vbci; /* -c Stamp element: Ire +c Stamp element: Re */ *(here->VBICemitEmitPtr) += Ire_Vre; *(here->VBICemitEIEmitEIPtr) += Ire_Vre; *(here->VBICemitEIEmitPtr) += -Ire_Vre; *(here->VBICemitEmitEIPtr) += -Ire_Vre; /* -c Stamp element: Irbp +c Stamp element: Rbp */ *(here->VBICbaseBPBaseBPPtr) += Irbp_Vrbp; *(here->VBICbaseBPCollCXPtr) += -Irbp_Vrbp; @@ -226,7 +240,7 @@ c Stamp element: Iccp *(here->VBICsubsSISubsSIPtr) += -Iccp_Vbcp; *(here->VBICsubsSIBaseBPPtr) += Iccp_Vbcp; /* -c Stamp element: Irs +c Stamp element: Rs */ *(here->VBICsubsSubsPtr) += Irs_Vrs; *(here->VBICsubsSISubsSIPtr) += Irs_Vrs; @@ -237,9 +251,6 @@ c Stamp element: Irs Ibe_Vrth = here->VBICibe_Vrth; Ibex_Vrth = here->VBICibex_Vrth; - if (!here->VBIC_excessPhase) - Itzf_Vrth = here->VBICitzf_vrth; - Itzr_Vrth = here->VBICitzr_Vrth; Ibc_Vrth = here->VBICibc_Vrth; Ibep_Vrth = here->VBICibep_Vrth; Ircx_Vrth = here->VBICircx_Vrth; @@ -279,19 +290,11 @@ c Stamp element: Ibex */ *(here->VBICbaseBXtempPtr) += Ibex_Vrth; *(here->VBICemitEItempPtr) += -Ibex_Vrth; - - if (!here->VBIC_excessPhase) { /* -c Stamp element: Itzf +c Stamp element: Iciei */ - *(here->VBICcollCItempPtr) += Itzf_Vrth; - *(here->VBICemitEItempPtr) += -Itzf_Vrth; - } -/* -c Stamp element: Itzr -*/ - *(here->VBICemitEItempPtr) += Itzr_Vrth; - *(here->VBICcollCItempPtr) += -Itzr_Vrth; + *(here->VBICcollCItempPtr) += Iciei_Vrth; + *(here->VBICemitEItempPtr) += -Iciei_Vrth; /* c Stamp element: Ibc */ @@ -386,44 +389,23 @@ c Stamp element: Ith *(here->VBICtempEmitEIPtr) += +Ith_Vre; *(here->VBICtempSubsPtr) += -Ith_Vrs; *(here->VBICtempSubsSIPtr) += +Ith_Vrs; - if (here->VBIC_excessPhase) { - Ith_Vrxf = *(ckt->CKTstate0 + here->VBICith_Vrxf); - *(here->VBICtempXf2Ptr) += +Ith_Vrxf; - } } if (here->VBIC_excessPhase) { - Itxf_Vrxf = *(ckt->CKTstate0 + here->VBICitxf_Vrxf); - Ibc_Vrxf = *(ckt->CKTstate0 + here->VBICibc_Vrxf); - Ixzf_Vbei = *(ckt->CKTstate0 + here->VBICixzf_Vbei); - Ixzf_Vbci = *(ckt->CKTstate0 + here->VBICixzf_Vbci); - Ixxf_Vrxf = *(ckt->CKTstate0 + here->VBICixxf_Vrxf); -/* -c Stamp element: Itxf -*/ - *(here->VBICcollCIXf2Ptr) += Itxf_Vrxf; - *(here->VBICemitEIXf2Ptr) += -Itxf_Vrxf; -/* -c Stamp element: Ibc -*/ - *(here->VBICbaseBIXf2Ptr) += Ibc_Vrxf; - *(here->VBICcollCIXf2Ptr) += -Ibc_Vrxf; -/* -c Stamp element: Ixzf, Branch: xf1-ground -*/ - *(here->VBICxf1BaseBIPtr) += +Ixzf_Vbei; - *(here->VBICxf1EmitEIPtr) += -Ixzf_Vbei; - *(here->VBICxf1BaseBIPtr) += +Ixzf_Vbci; - *(here->VBICxf1CollCIPtr) += -Ixzf_Vbci; - if (here->VBIC_selfheat) { - Ixzf_Vrth = *(ckt->CKTstate0 + here->VBICixzf_Vrth); - *(here->VBICxf1TempPtr) += Ixzf_Vrth; - } -/* -c Stamp element: Ixxf, Branch: xf2-ground -*/ - *(here->VBICxf2Xf2Ptr) += +Ixxf_Vrxf; - + //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; } /* @@ -439,6 +421,8 @@ c The complex part XQbcp_Vbcp = *(ckt->CKTstate0 + here->VBICcqbcp); XQbeo_Vbe = *(ckt->CKTstate0 + here->VBICcqbeo); XQbco_Vbc = *(ckt->CKTstate0 + here->VBICcqbco); + XQxf1_Vxf1 = *(ckt->CKTstate0 + here->VBICcqxf1); + XQxf2_Vxf2 = *(ckt->CKTstate0 + here->VBICcqxf2); /* c Stamp element: Qbe */ @@ -545,6 +529,14 @@ c Stamp element: Qbco *(here->VBICcollBasePtr ) += -XQbco_Vbc * (s->real); *(here->VBICcollBasePtr + 1) += -XQbco_Vbc * (s->imag); + if (here->VBIC_excessPhase) { + //Qxf1 + *(here->VBICxf1Xf1Ptr + 1) += +XQxf1_Vxf1*(s->imag); + *(here->VBICxf1Xf1Ptr) += +XQxf1_Vxf1*(s->real); + //Qxf2 + *(here->VBICxf2Xf2Ptr + 1) += +XQxf2_Vxf2*(s->imag); + *(here->VBICxf2Xf2Ptr ) += +XQxf2_Vxf2*(s->real); + } if (here->VBIC_selfheat) { XQcth_Vrth = here->VBICcapcth; XQbe_Vrth = here->VBICcapqbeth; @@ -581,28 +573,14 @@ c Stamp element: Qbco *(here->VBICsubsSItempPtr + 1) += XQbcp_Vrth * (s->imag); *(here->VBICbaseBPtempPtr ) += -XQbcp_Vrth * (s->real); *(here->VBICbaseBPtempPtr + 1) += -XQbcp_Vrth * (s->imag); - + if (here->VBIC_excessPhase) { +// Stamp element: Ixf1 f_xf1 = + + *(here->VBICxf1TempPtr) += Ixf1_Vrth; +// Stamp element: Ixf2 f_xf2 = + + *(here->VBICxf2TempPtr) += Ixf2_Vrth; + } } - if (here->VBIC_excessPhase) { -/* -c Stamp element: Qcxf -*/ - XQcxf_Vcxf = here->VBICcapQcxf; - *(here->VBICxf1Xf1Ptr ) += XQcxf_Vcxf * s->real; - *(here->VBICxf1Xf1Ptr + 1) += XQcxf_Vcxf * s->imag; -/* -c Stamp element: L = TD/3 -*/ - Xl = here->VBICindInduct; - *(here->VBICxf1IbrPtr) += 1; - *(here->VBICxf2IbrPtr) -= 1; - *(here->VBICibrXf1Ptr) += 1; - *(here->VBICibrXf2Ptr) -= 1; - *(here->VBICibrIbrPtr ) -= Xl * s->real; - *(here->VBICibrIbrPtr + 1) -= Xl * s->imag; - - } } } return(OK); diff --git a/src/spicelib/devices/vbic/vbicsetup.c b/src/spicelib/devices/vbic/vbicsetup.c index 5c65aefc9..097bfa469 100644 --- a/src/spicelib/devices/vbic/vbicsetup.c +++ b/src/spicelib/devices/vbic/vbicsetup.c @@ -483,7 +483,6 @@ VBICsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) model->VBICthermalCapacitance = 1e-12; if((model->VBICdelayTimeFGiven) && (model->VBICdelayTimeF > 0.0)) { - here->VBICindInduct = model->VBICdelayTimeF / 3.0 / here->VBICm; here->VBIC_excessPhase = 1; } else { here->VBIC_excessPhase = 0; @@ -518,11 +517,6 @@ VBICsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) if(error) return(error); here->VBICxf2Node = tmp->number; } - if(here->VBICbrEq == 0) { - error = CKTmkCur(ckt,&tmp,here->VBICname,"branch"); - if(error) return(error); - here->VBICbrEq = tmp->number; - } } else { here->VBICxf1Node = 0; here->VBICxf2Node = 0; @@ -612,27 +606,25 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ TSTALLOC(VBICtempSubsSIPtr,VBICtempNode,VBICsubsSINode); TSTALLOC(VBICtempTempPtr,VBICtempNode,VBICtempNode); if (here->VBIC_excessPhase) { - TSTALLOC(VBICtempXf2Ptr, VBICtempNode, VBICxf2Node); - TSTALLOC(VBICxf1TempPtr, VBICxf1Node ,VBICtempNode); + TSTALLOC(VBICxf2TempPtr ,VBICxf2Node ,VBICtempNode); + TSTALLOC(VBICxf1TempPtr ,VBICxf1Node ,VBICtempNode); } } if (here->VBIC_excessPhase) { - TSTALLOC(VBICxf1Xf1Ptr , VBICxf1Node , VBICxf1Node); - TSTALLOC(VBICxf1Xf2Ptr , VBICxf1Node , VBICxf2Node); - TSTALLOC(VBICxf1CollCIPtr, VBICxf1Node , VBICcollCINode); - TSTALLOC(VBICxf1BaseBIPtr, VBICxf1Node , VBICbaseBINode); - TSTALLOC(VBICxf1EmitEIPtr, VBICxf1Node , VBICemitEINode); - TSTALLOC(VBICxf2Xf2Ptr , VBICxf2Node , VBICxf2Node); - TSTALLOC(VBICxf2Xf1Ptr , VBICxf2Node , VBICxf1Node); - TSTALLOC(VBICcollCIXf2Ptr, VBICcollCINode, VBICxf2Node); - TSTALLOC(VBICbaseBIXf2Ptr, VBICbaseBINode, VBICxf2Node); - TSTALLOC(VBICemitEIXf2Ptr, VBICemitEINode, VBICxf2Node); - TSTALLOC(VBICxf1IbrPtr, VBICxf1Node, VBICbrEq); - TSTALLOC(VBICxf2IbrPtr, VBICxf2Node, VBICbrEq); - TSTALLOC(VBICibrXf2Ptr, VBICbrEq, VBICxf2Node); - TSTALLOC(VBICibrXf1Ptr, VBICbrEq, VBICxf1Node); - TSTALLOC(VBICibrIbrPtr, VBICbrEq, VBICbrEq); + TSTALLOC(VBICxf1Xf1Ptr ,VBICxf1Node ,VBICxf1Node); + TSTALLOC(VBICxf1BaseBIPtr,VBICxf1Node ,VBICbaseBINode); + TSTALLOC(VBICxf1EmitEIPtr,VBICxf1Node ,VBICemitEINode); + TSTALLOC(VBICxf1CollCIPtr,VBICxf1Node ,VBICcollCINode); + TSTALLOC(VBICxf1Xf2Ptr ,VBICxf1Node ,VBICxf2Node); + + TSTALLOC(VBICxf2Xf1Ptr ,VBICxf2Node ,VBICxf1Node); + TSTALLOC(VBICxf2BaseBIPtr,VBICxf2Node ,VBICbaseBINode); + TSTALLOC(VBICxf2EmitEIPtr,VBICxf2Node ,VBICemitEINode); + TSTALLOC(VBICxf2CollCIPtr,VBICxf2Node ,VBICcollCINode); + TSTALLOC(VBICxf2Xf2Ptr ,VBICxf2Node ,VBICxf2Node); + TSTALLOC(VBICemitEIXf2Ptr,VBICemitEINode,VBICxf2Node); + TSTALLOC(VBICcollCIXf2Ptr,VBICcollCINode,VBICxf2Node); } } @@ -695,9 +687,6 @@ VBICunsetup( CKTdltNNum(ckt, here->VBICxf2Node); here->VBICxf2Node = 0; - if (here->VBICbrEq > 0) - CKTdltNNum(ckt, here->VBICbrEq); - here->VBICbrEq = 0; } } }