📄 b3soifdset.c
字号:
error = CKTmkVolt(ckt,&tmp,here->B3SOIFDname,"Temp"); if(error) return(error); here->B3SOIFDtempNode = tmp->number; } else { here->B3SOIFDtempNode = 0; }/* here for debugging purpose only */ if ((here->B3SOIFDdebugMod > 1) || (here->B3SOIFDdebugMod == -1)) { /* The real Vbs value */ error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbs"); if(error) return(error); here->B3SOIFDvbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ids"); if(error) return(error); here->B3SOIFDidsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ic"); if(error) return(error); here->B3SOIFDicNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ibs"); if(error) return(error); here->B3SOIFDibsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ibd"); if(error) return(error); here->B3SOIFDibdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Iii"); if(error) return(error); here->B3SOIFDiiiNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Igidl"); if(error) return(error); here->B3SOIFDigidlNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Itun"); if(error) return(error); here->B3SOIFDitunNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Ibp"); if(error) return(error); here->B3SOIFDibpNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Abeff"); if(error) return(error); here->B3SOIFDabeffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbs0eff"); if(error) return(error); here->B3SOIFDvbs0effNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbseff"); if(error) return(error); here->B3SOIFDvbseffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Xc"); if(error) return(error); here->B3SOIFDxcNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbb"); if(error) return(error); here->B3SOIFDcbbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbd"); if(error) return(error); here->B3SOIFDcbdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbg"); if(error) return(error); here->B3SOIFDcbgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qbody"); if(error) return(error); here->B3SOIFDqbNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qbf"); if(error) return(error); here->B3SOIFDqbfNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qjs"); if(error) return(error); here->B3SOIFDqjsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qjd"); if(error) return(error); here->B3SOIFDqjdNode = tmp->number; /* clean up last */ error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gm"); if(error) return(error); here->B3SOIFDgmNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gmbs"); if(error) return(error); here->B3SOIFDgmbsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gds"); if(error) return(error); here->B3SOIFDgdsNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Gme"); if(error) return(error); here->B3SOIFDgmeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vbs0teff"); if(error) return(error); here->B3SOIFDvbs0teffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vth"); if(error) return(error); here->B3SOIFDvthNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vgsteff"); if(error) return(error); here->B3SOIFDvgsteffNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Xcsat"); if(error) return(error); here->B3SOIFDxcsatNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qac0"); if(error) return(error); here->B3SOIFDqaccNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsub0"); if(error) return(error); here->B3SOIFDqsub0Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsubs1"); if(error) return(error); here->B3SOIFDqsubs1Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsubs2"); if(error) return(error); here->B3SOIFDqsubs2Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qsub"); if(error) return(error); here->B3SOIFDqeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qdrn"); if(error) return(error); here->B3SOIFDqdNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Qgate"); if(error) return(error); here->B3SOIFDqgNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vdscv"); if(error) return(error); here->B3SOIFDvdscvNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Vcscv"); if(error) return(error); here->B3SOIFDvcscvNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Cbe"); if(error) return(error); here->B3SOIFDcbeNode = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum1"); if(error) return(error); here->B3SOIFDdum1Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum2"); if(error) return(error); here->B3SOIFDdum2Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum3"); if(error) return(error); here->B3SOIFDdum3Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum4"); if(error) return(error); here->B3SOIFDdum4Node = tmp->number; error = CKTmkVolt(ckt, &tmp, here->B3SOIFDname, "Dum5"); if(error) return(error); here->B3SOIFDdum5Node = tmp->number; } /* set Sparse Matrix Pointers *//* macro to make elements with built in test for out of memory */#define TSTALLOC(ptr,first,second) \if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\ return(E_NOMEM);\} if ((model->B3SOIFDshMod == 1) && (here->B3SOIFDrth0!=0.0)) { TSTALLOC(B3SOIFDTemptempPtr, B3SOIFDtempNode, B3SOIFDtempNode) TSTALLOC(B3SOIFDTempdpPtr, B3SOIFDtempNode, B3SOIFDdNodePrime) TSTALLOC(B3SOIFDTempspPtr, B3SOIFDtempNode, B3SOIFDsNodePrime) TSTALLOC(B3SOIFDTempgPtr, B3SOIFDtempNode, B3SOIFDgNode) TSTALLOC(B3SOIFDTempbPtr, B3SOIFDtempNode, B3SOIFDbNode) TSTALLOC(B3SOIFDTempePtr, B3SOIFDtempNode, B3SOIFDeNode) TSTALLOC(B3SOIFDGtempPtr, B3SOIFDgNode, B3SOIFDtempNode) TSTALLOC(B3SOIFDDPtempPtr, B3SOIFDdNodePrime, B3SOIFDtempNode) TSTALLOC(B3SOIFDSPtempPtr, B3SOIFDsNodePrime, B3SOIFDtempNode) TSTALLOC(B3SOIFDEtempPtr, B3SOIFDeNode, B3SOIFDtempNode) TSTALLOC(B3SOIFDBtempPtr, B3SOIFDbNode, B3SOIFDtempNode) if (here->B3SOIFDbodyMod == 1) { TSTALLOC(B3SOIFDPtempPtr, B3SOIFDpNode, B3SOIFDtempNode) } } if (here->B3SOIFDbodyMod == 2) { /* Don't create any Jacobian entry for pNode */ } else if (here->B3SOIFDbodyMod == 1) { TSTALLOC(B3SOIFDBpPtr, B3SOIFDbNode, B3SOIFDpNode) TSTALLOC(B3SOIFDPbPtr, B3SOIFDpNode, B3SOIFDbNode) TSTALLOC(B3SOIFDPpPtr, B3SOIFDpNode, B3SOIFDpNode) TSTALLOC(B3SOIFDPgPtr, B3SOIFDpNode, B3SOIFDgNode) TSTALLOC(B3SOIFDPdpPtr, B3SOIFDpNode, B3SOIFDdNodePrime) TSTALLOC(B3SOIFDPspPtr, B3SOIFDpNode, B3SOIFDsNodePrime) TSTALLOC(B3SOIFDPePtr, B3SOIFDpNode, B3SOIFDeNode) } TSTALLOC(B3SOIFDEgPtr, B3SOIFDeNode, B3SOIFDgNode) TSTALLOC(B3SOIFDEdpPtr, B3SOIFDeNode, B3SOIFDdNodePrime) TSTALLOC(B3SOIFDEspPtr, B3SOIFDeNode, B3SOIFDsNodePrime) TSTALLOC(B3SOIFDGePtr, B3SOIFDgNode, B3SOIFDeNode) TSTALLOC(B3SOIFDDPePtr, B3SOIFDdNodePrime, B3SOIFDeNode) TSTALLOC(B3SOIFDSPePtr, B3SOIFDsNodePrime, B3SOIFDeNode) TSTALLOC(B3SOIFDEbPtr, B3SOIFDeNode, B3SOIFDbNode) TSTALLOC(B3SOIFDEePtr, B3SOIFDeNode, B3SOIFDeNode) TSTALLOC(B3SOIFDGgPtr, B3SOIFDgNode, B3SOIFDgNode) TSTALLOC(B3SOIFDGdpPtr, B3SOIFDgNode, B3SOIFDdNodePrime) TSTALLOC(B3SOIFDGspPtr, B3SOIFDgNode, B3SOIFDsNodePrime) TSTALLOC(B3SOIFDDPgPtr, B3SOIFDdNodePrime, B3SOIFDgNode) TSTALLOC(B3SOIFDDPdpPtr, B3SOIFDdNodePrime, B3SOIFDdNodePrime) TSTALLOC(B3SOIFDDPspPtr, B3SOIFDdNodePrime, B3SOIFDsNodePrime) TSTALLOC(B3SOIFDDPdPtr, B3SOIFDdNodePrime, B3SOIFDdNode) TSTALLOC(B3SOIFDSPgPtr, B3SOIFDsNodePrime, B3SOIFDgNode) TSTALLOC(B3SOIFDSPdpPtr, B3SOIFDsNodePrime, B3SOIFDdNodePrime) TSTALLOC(B3SOIFDSPspPtr, B3SOIFDsNodePrime, B3SOIFDsNodePrime) TSTALLOC(B3SOIFDSPsPtr, B3SOIFDsNodePrime, B3SOIFDsNode) TSTALLOC(B3SOIFDDdPtr, B3SOIFDdNode, B3SOIFDdNode) TSTALLOC(B3SOIFDDdpPtr, B3SOIFDdNode, B3SOIFDdNodePrime) TSTALLOC(B3SOIFDSsPtr, B3SOIFDsNode, B3SOIFDsNode) TSTALLOC(B3SOIFDSspPtr, B3SOIFDsNode, B3SOIFDsNodePrime)/* here for debugging purpose only */ if ((here->B3SOIFDdebugMod > 1) || (here->B3SOIFDdebugMod == -1)) { TSTALLOC(B3SOIFDVbsPtr, B3SOIFDvbsNode, B3SOIFDvbsNode) TSTALLOC(B3SOIFDIdsPtr, B3SOIFDidsNode, B3SOIFDidsNode) TSTALLOC(B3SOIFDIcPtr, B3SOIFDicNode, B3SOIFDicNode) TSTALLOC(B3SOIFDIbsPtr, B3SOIFDibsNode, B3SOIFDibsNode) TSTALLOC(B3SOIFDIbdPtr, B3SOIFDibdNode, B3SOIFDibdNode) TSTALLOC(B3SOIFDIiiPtr, B3SOIFDiiiNode, B3SOIFDiiiNode) TSTALLOC(B3SOIFDIgidlPtr, B3SOIFDigidlNode, B3SOIFDigidlNode) TSTALLOC(B3SOIFDItunPtr, B3SOIFDitunNode, B3SOIFDitunNode) TSTALLOC(B3SOIFDIbpPtr, B3SOIFDibpNode, B3SOIFDibpNode) TSTALLOC(B3SOIFDAbeffPtr, B3SOIFDabeffNode, B3SOIFDabeffNode) TSTALLOC(B3SOIFDVbs0effPtr, B3SOIFDvbs0effNode, B3SOIFDvbs0effNode) TSTALLOC(B3SOIFDVbseffPtr, B3SOIFDvbseffNode, B3SOIFDvbseffNode) TSTALLOC(B3SOIFDXcPtr, B3SOIFDxcNode, B3SOIFDxcNode) TSTALLOC(B3SOIFDCbbPtr, B3SOIFDcbbNode, B3SOIFDcbbNode) TSTALLOC(B3SOIFDCbdPtr, B3SOIFDcbdNode, B3SOIFDcbdNode) TSTALLOC(B3SOIFDCbgPtr, B3SOIFDcbgNode, B3SOIFDcbgNode) TSTALLOC(B3SOIFDqbPtr, B3SOIFDqbNode, B3SOIFDqbNode) TSTALLOC(B3SOIFDQbfPtr, B3SOIFDqbfNode, B3SOIFDqbfNode) TSTALLOC(B3SOIFDQjsPtr, B3SOIFDqjsNode, B3SOIFDqjsNode) TSTALLOC(B3SOIFDQjdPtr, B3SOIFDqjdNode, B3SOIFDqjdNode) /* clean up last */ TSTALLOC(B3SOIFDGmPtr, B3SOIFDgmNode, B3SOIFDgmNode) TSTALLOC(B3SOIFDGmbsPtr, B3SOIFDgmbsNode, B3SOIFDgmbsNode) TSTALLOC(B3SOIFDGdsPtr, B3SOIFDgdsNode, B3SOIFDgdsNode) TSTALLOC(B3SOIFDGmePtr, B3SOIFDgmeNode, B3SOIFDgmeNode) TSTALLOC(B3SOIFDVbs0teffPtr, B3SOIFDvbs0teffNode, B3SOIFDvbs0teffNode) TSTALLOC(B3SOIFDVthPtr, B3SOIFDvthNode, B3SOIFDvthNode) TSTALLOC(B3SOIFDVgsteffPtr, B3SOIFDvgsteffNode, B3SOIFDvgsteffNode) TSTALLOC(B3SOIFDXcsatPtr, B3SOIFDxcsatNode, B3SOIFDxcsatNode) TSTALLOC(B3SOIFDVcscvPtr, B3SOIFDvcscvNode, B3SOIFDvcscvNode) TSTALLOC(B3SOIFDVdscvPtr, B3SOIFDvdscvNode, B3SOIFDvdscvNode) TSTALLOC(B3SOIFDCbePtr, B3SOIFDcbeNode, B3SOIFDcbeNode) TSTALLOC(B3SOIFDDum1Ptr, B3SOIFDdum1Node, B3SOIFDdum1Node) TSTALLOC(B3SOIFDDum2Ptr, B3SOIFDdum2Node, B3SOIFDdum2Node) TSTALLOC(B3SOIFDDum3Ptr, B3SOIFDdum3Node, B3SOIFDdum3Node) TSTALLOC(B3SOIFDDum4Ptr, B3SOIFDdum4Node, B3SOIFDdum4Node) TSTALLOC(B3SOIFDDum5Ptr, B3SOIFDdum5Node, B3SOIFDdum5Node) TSTALLOC(B3SOIFDQaccPtr, B3SOIFDqaccNode, B3SOIFDqaccNode) TSTALLOC(B3SOIFDQsub0Ptr, B3SOIFDqsub0Node, B3SOIFDqsub0Node) TSTALLOC(B3SOIFDQsubs1Ptr, B3SOIFDqsubs1Node, B3SOIFDqsubs1Node) TSTALLOC(B3SOIFDQsubs2Ptr, B3SOIFDqsubs2Node, B3SOIFDqsubs2Node) TSTALLOC(B3SOIFDqePtr, B3SOIFDqeNode, B3SOIFDqeNode) TSTALLOC(B3SOIFDqdPtr, B3SOIFDqdNode, B3SOIFDqdNode) TSTALLOC(B3SOIFDqgPtr, B3SOIFDqgNode, B3SOIFDqgNode) } } } return(OK);} intB3SOIFDunsetup(GENmodel *inModel, CKTcircuit *ckt){ B3SOIFDmodel *model; B3SOIFDinstance *here; for (model = (B3SOIFDmodel *)inModel; model != NULL; model = model->B3SOIFDnextModel) { for (here = model->B3SOIFDinstances; here != NULL; here=here->B3SOIFDnextInstance) { if (here->B3SOIFDdNodePrime && here->B3SOIFDdNodePrime != here->B3SOIFDdNode) { CKTdltNNum(ckt, here->B3SOIFDdNodePrime); here->B3SOIFDdNodePrime = 0; } if (here->B3SOIFDsNodePrime && here->B3SOIFDsNodePrime != here->B3SOIFDsNode) { CKTdltNNum(ckt, here->B3SOIFDsNodePrime); here->B3SOIFDsNodePrime = 0; } } } return OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -