Added KLU support to HICUM model
This commit is contained in:
parent
6b6e9bb7cb
commit
ae83b7c807
|
|
@ -26,6 +26,10 @@ libhicum2_la_SOURCES = \
|
|||
hicum2soachk.c \
|
||||
hicum2trunc.c
|
||||
|
||||
if KLU_WANTED
|
||||
libhicum2_la_SOURCES += hicum2bindCSC.c
|
||||
endif
|
||||
|
||||
AM_CFLAGS = -O -g -Wall -Wextra -I$(top_srcdir)/src/include
|
||||
AM_CPPFLAGS = @AM_CPPFLAGS@ -O -g -Wall -Wextra
|
||||
AM_CXXFLAGS = -I$(top_srcdir)/src/include/cppduals -I$(top_srcdir)/src/include -std=c++11 -O -g -Wall -Wextra
|
||||
|
|
|
|||
|
|
@ -0,0 +1,423 @@
|
|||
/**********
|
||||
Author: 2022 Francesco Lannutti
|
||||
**********/
|
||||
|
||||
#include "ngspice/ngspice.h"
|
||||
#include "ngspice/cktdefs.h"
|
||||
#include "hicum2defs.h"
|
||||
#include "ngspice/sperror.h"
|
||||
#include "ngspice/klu-binding.h"
|
||||
|
||||
int
|
||||
HICUMbindCSC (GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
HICUMmodel *model = (HICUMmodel *)inModel ;
|
||||
HICUMinstance *here ;
|
||||
BindElement i, *matched, *BindStruct ;
|
||||
size_t nz ;
|
||||
|
||||
BindStruct = ckt->CKTmatrix->SMPkluMatrix->KLUmatrixBindStructCOO ;
|
||||
nz = (size_t)ckt->CKTmatrix->SMPkluMatrix->KLUmatrixLinkedListNZ ;
|
||||
|
||||
/* loop through all the HICUM models */
|
||||
for ( ; model != NULL ; model = HICUMnextModel(model))
|
||||
{
|
||||
int selfheat = (((model->HICUMflsh == 1) || (model->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
||||
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
||||
|
||||
/* loop through all the instances of the model */
|
||||
for (here = HICUMinstances(model); here != NULL ; here = HICUMnextInstance(here))
|
||||
{
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCollPtr, HICUMcollCollBinding, HICUMcollNode, HICUMcollNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBasePtr, HICUMbaseBaseBinding, HICUMbaseNode, HICUMbaseNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEmitPtr, HICUMemitEmitBinding, HICUMemitNode, HICUMemitNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsSubsPtr, HICUMsubsSubsBinding, HICUMsubsNode, HICUMsubsNode);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCICollCIPtr, HICUMcollCICollCIBinding, HICUMcollCINode, HICUMcollCINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBIBaseBIPtr, HICUMbaseBIBaseBIBinding, HICUMbaseBINode, HICUMbaseBINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEIEmitEIPtr, HICUMemitEIEmitEIBinding, HICUMemitEINode, HICUMemitEINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPBaseBPPtr, HICUMbaseBPBaseBPBinding, HICUMbaseBPNode, HICUMbaseBPNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsSISubsSIPtr, HICUMsubsSISubsSIBinding, HICUMsubsSINode, HICUMsubsSINode);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseEmitPtr, HICUMbaseEmitBinding, HICUMbaseNode, HICUMemitNode); //b-e
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitBasePtr, HICUMemitBaseBinding, HICUMemitNode, HICUMbaseNode); //e-b
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBaseBPPtr, HICUMbaseBaseBPBinding, HICUMbaseNode, HICUMbaseBPNode); //b-bp
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPBasePtr, HICUMbaseBPBaseBinding, HICUMbaseBPNode, HICUMbaseNode); //bp-b
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEmitEIPtr, HICUMemitEmitEIBinding, HICUMemitNode, HICUMemitEINode); //e-ei
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEIEmitPtr, HICUMemitEIEmitBinding, HICUMemitEINode, HICUMemitNode); //ei-e
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsSubsSIPtr, HICUMsubsSubsSIBinding, HICUMsubsNode, HICUMsubsSINode); //s-si
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsSISubsPtr, HICUMsubsSISubsBinding, HICUMsubsSINode, HICUMsubsNode); //si-s
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCIBasePtr, HICUMcollCIBaseBinding, HICUMcollCINode, HICUMbaseNode); //b-ci
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseCollCIPtr, HICUMbaseCollCIBinding, HICUMbaseNode, HICUMcollCINode); //ci-b
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCIEmitEIPtr, HICUMcollCIEmitEIBinding, HICUMcollCINode, HICUMemitEINode); //ci-ei
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEICollCIPtr, HICUMemitEICollCIBinding, HICUMemitEINode, HICUMcollCINode); //ei-ci
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPBaseBIPtr, HICUMbaseBPBaseBIBinding, HICUMbaseBPNode, HICUMbaseBINode); //bp-bi
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBIBaseBPPtr, HICUMbaseBIBaseBPBinding, HICUMbaseBINode, HICUMbaseBPNode); //bi-bp
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPEmitEIPtr, HICUMbaseBPEmitEIBinding, HICUMbaseBPNode, HICUMemitEINode); //bp-ei
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEIBaseBPPtr, HICUMemitEIBaseBPBinding, HICUMemitEINode, HICUMbaseBPNode); //ei-bp
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPEmitPtr, HICUMbaseBPEmitBinding, HICUMbaseBPNode, HICUMemitNode); //bp-e
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitBaseBPPtr, HICUMemitBaseBPBinding, HICUMemitNode, HICUMbaseBPNode); //e-bp
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPSubsSIPtr, HICUMbaseBPSubsSIBinding, HICUMbaseBPNode, HICUMsubsSINode); //bp-si
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsSIBaseBPPtr, HICUMsubsSIBaseBPBinding, HICUMsubsSINode, HICUMbaseBPNode); //si-bp
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBIEmitEIPtr, HICUMbaseBIEmitEIBinding, HICUMbaseBINode, HICUMemitEINode); //ei-bi
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEIBaseBIPtr, HICUMemitEIBaseBIBinding, HICUMemitEINode, HICUMbaseBINode); //bi-ei
|
||||
if (nqs) {
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBIXfPtr, HICUMbaseBIXfBinding, HICUMbaseBINode, HICUMxfNode); //bi - xf
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEIXfPtr, HICUMemitEIXfBinding, HICUMemitEINode, HICUMxfNode); //ei - xf
|
||||
}
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBICollCIPtr, HICUMbaseBICollCIBinding, HICUMbaseBINode, HICUMcollCINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCIBaseBIPtr, HICUMcollCIBaseBIBinding, HICUMcollCINode, HICUMbaseBINode);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPCollCIPtr, HICUMbaseBPCollCIBinding, HICUMbaseBPNode, HICUMcollCINode); //bp-ci
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCIBaseBPPtr, HICUMcollCIBaseBPBinding, HICUMcollCINode, HICUMbaseBPNode); //ci-bp
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsSICollCIPtr, HICUMsubsSICollCIBinding, HICUMsubsSINode, HICUMcollCINode); //si-ci
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCISubsSIPtr, HICUMcollCISubsSIBinding, HICUMcollCINode, HICUMsubsSINode); //ci-si
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCICollPtr, HICUMcollCICollBinding, HICUMcollCINode, HICUMcollNode); //ci-c
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCollCIPtr, HICUMcollCollCIBinding, HICUMcollNode, HICUMcollCINode); //c-ci
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsCollPtr, HICUMsubsCollBinding, HICUMsubsNode, HICUMcollNode); //s-c
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollSubsPtr, HICUMcollSubsBinding, HICUMcollNode, HICUMsubsNode); //c-s
|
||||
|
||||
if (nqs) {
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf1Xf1Ptr, HICUMxf1Xf1Binding, HICUMxf1Node, HICUMxf1Node);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf1BaseBIPtr, HICUMxf1BaseBIBinding, HICUMxf1Node, HICUMbaseBINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf1EmitEIPtr, HICUMxf1EmitEIBinding, HICUMxf1Node, HICUMemitEINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf1CollCIPtr, HICUMxf1CollCIBinding, HICUMxf1Node, HICUMcollCINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf1Xf2Ptr, HICUMxf1Xf2Binding, HICUMxf1Node, HICUMxf2Node);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf2Xf1Ptr, HICUMxf2Xf1Binding, HICUMxf2Node, HICUMxf1Node);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf2BaseBIPtr, HICUMxf2BaseBIBinding, HICUMxf2Node, HICUMbaseBINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf2EmitEIPtr, HICUMxf2EmitEIBinding, HICUMxf2Node, HICUMemitEINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf2CollCIPtr, HICUMxf2CollCIBinding, HICUMxf2Node, HICUMcollCINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf2Xf2Ptr, HICUMxf2Xf2Binding, HICUMxf2Node, HICUMxf2Node);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEIXf2Ptr, HICUMemitEIXf2Binding, HICUMemitEINode, HICUMxf2Node);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCIXf2Ptr, HICUMcollCIXf2Binding, HICUMcollCINode, HICUMxf2Node);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxfXfPtr, HICUMxfXfBinding, HICUMxfNode, HICUMxfNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxfEmitEIPtr, HICUMxfEmitEIBinding, HICUMxfNode, HICUMemitEINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxfCollCIPtr, HICUMxfCollCIBinding, HICUMxfNode, HICUMcollCINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxfBaseBIPtr, HICUMxfBaseBIBinding, HICUMxfNode, HICUMbaseBINode);
|
||||
}
|
||||
|
||||
if (selfheat) {
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollTempPtr, HICUMcollTempBinding, HICUMcollNode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseTempPtr, HICUMbaseTempBinding, HICUMbaseNode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitTempPtr, HICUMemitTempBinding, HICUMemitNode, HICUMtempNode);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollCItempPtr, HICUMcollCItempBinding, HICUMcollCINode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBItempPtr, HICUMbaseBItempBinding, HICUMbaseBINode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMbaseBPtempPtr, HICUMbaseBPtempBinding, HICUMbaseBPNode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMemitEItempPtr, HICUMemitEItempBinding, HICUMemitEINode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsSItempPtr, HICUMsubsSItempBinding, HICUMsubsSINode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMsubsTempPtr, HICUMsubsTempBinding, HICUMsubsNode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMcollTempPtr, HICUMcollTempBinding, HICUMcollNode, HICUMtempNode);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempCollPtr, HICUMtempCollBinding, HICUMtempNode, HICUMcollNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempBasePtr, HICUMtempBaseBinding, HICUMtempNode, HICUMbaseNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempEmitPtr, HICUMtempEmitBinding, HICUMtempNode, HICUMemitNode);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempCollCIPtr, HICUMtempCollCIBinding, HICUMtempNode, HICUMcollCINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempBaseBIPtr, HICUMtempBaseBIBinding, HICUMtempNode, HICUMbaseBINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempBaseBPPtr, HICUMtempBaseBPBinding, HICUMtempNode, HICUMbaseBPNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempEmitEIPtr, HICUMtempEmitEIBinding, HICUMtempNode, HICUMemitEINode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempSubsSIPtr, HICUMtempSubsSIBinding, HICUMtempNode, HICUMsubsSINode);
|
||||
|
||||
CREATE_KLU_BINDING_TABLE(HICUMtempTempPtr, HICUMtempTempBinding, HICUMtempNode, HICUMtempNode);
|
||||
|
||||
if (nqs) {
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxfTempPtr, HICUMxfTempBinding, HICUMxfNode, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf2TempPtr, HICUMxf2TempBinding, HICUMxf2Node, HICUMtempNode);
|
||||
CREATE_KLU_BINDING_TABLE(HICUMxf1TempPtr, HICUMxf1TempBinding, HICUMxf1Node, HICUMtempNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (OK) ;
|
||||
}
|
||||
|
||||
int
|
||||
HICUMbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
HICUMmodel *model = (HICUMmodel *)inModel ;
|
||||
HICUMinstance *here ;
|
||||
|
||||
NG_IGNORE (ckt) ;
|
||||
|
||||
/* loop through all the HICUM models */
|
||||
for ( ; model != NULL ; model = HICUMnextModel(model))
|
||||
{
|
||||
int selfheat = (((model->HICUMflsh == 1) || (model->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
||||
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
||||
|
||||
/* loop through all the instances of the model */
|
||||
for (here = HICUMinstances(model); here != NULL ; here = HICUMnextInstance(here))
|
||||
{
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCollPtr, HICUMcollCollBinding, HICUMcollNode, HICUMcollNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBasePtr, HICUMbaseBaseBinding, HICUMbaseNode, HICUMbaseNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEmitPtr, HICUMemitEmitBinding, HICUMemitNode, HICUMemitNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsSubsPtr, HICUMsubsSubsBinding, HICUMsubsNode, HICUMsubsNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCICollCIPtr, HICUMcollCICollCIBinding, HICUMcollCINode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBIBaseBIPtr, HICUMbaseBIBaseBIBinding, HICUMbaseBINode, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEIEmitEIPtr, HICUMemitEIEmitEIBinding, HICUMemitEINode, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPBaseBPPtr, HICUMbaseBPBaseBPBinding, HICUMbaseBPNode, HICUMbaseBPNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsSISubsSIPtr, HICUMsubsSISubsSIBinding, HICUMsubsSINode, HICUMsubsSINode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseEmitPtr, HICUMbaseEmitBinding, HICUMbaseNode, HICUMemitNode); //b-e
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitBasePtr, HICUMemitBaseBinding, HICUMemitNode, HICUMbaseNode); //e-b
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBaseBPPtr, HICUMbaseBaseBPBinding, HICUMbaseNode, HICUMbaseBPNode); //b-bp
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPBasePtr, HICUMbaseBPBaseBinding, HICUMbaseBPNode, HICUMbaseNode); //bp-b
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEmitEIPtr, HICUMemitEmitEIBinding, HICUMemitNode, HICUMemitEINode); //e-ei
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEIEmitPtr, HICUMemitEIEmitBinding, HICUMemitEINode, HICUMemitNode); //ei-e
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsSubsSIPtr, HICUMsubsSubsSIBinding, HICUMsubsNode, HICUMsubsSINode); //s-si
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsSISubsPtr, HICUMsubsSISubsBinding, HICUMsubsSINode, HICUMsubsNode); //si-s
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCIBasePtr, HICUMcollCIBaseBinding, HICUMcollCINode, HICUMbaseNode); //b-ci
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseCollCIPtr, HICUMbaseCollCIBinding, HICUMbaseNode, HICUMcollCINode); //ci-b
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCIEmitEIPtr, HICUMcollCIEmitEIBinding, HICUMcollCINode, HICUMemitEINode); //ci-ei
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEICollCIPtr, HICUMemitEICollCIBinding, HICUMemitEINode, HICUMcollCINode); //ei-ci
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPBaseBIPtr, HICUMbaseBPBaseBIBinding, HICUMbaseBPNode, HICUMbaseBINode); //bp-bi
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBIBaseBPPtr, HICUMbaseBIBaseBPBinding, HICUMbaseBINode, HICUMbaseBPNode); //bi-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPEmitEIPtr, HICUMbaseBPEmitEIBinding, HICUMbaseBPNode, HICUMemitEINode); //bp-ei
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEIBaseBPPtr, HICUMemitEIBaseBPBinding, HICUMemitEINode, HICUMbaseBPNode); //ei-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPEmitPtr, HICUMbaseBPEmitBinding, HICUMbaseBPNode, HICUMemitNode); //bp-e
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitBaseBPPtr, HICUMemitBaseBPBinding, HICUMemitNode, HICUMbaseBPNode); //e-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPSubsSIPtr, HICUMbaseBPSubsSIBinding, HICUMbaseBPNode, HICUMsubsSINode); //bp-si
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsSIBaseBPPtr, HICUMsubsSIBaseBPBinding, HICUMsubsSINode, HICUMbaseBPNode); //si-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBIEmitEIPtr, HICUMbaseBIEmitEIBinding, HICUMbaseBINode, HICUMemitEINode); //ei-bi
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEIBaseBIPtr, HICUMemitEIBaseBIBinding, HICUMemitEINode, HICUMbaseBINode); //bi-ei
|
||||
if (nqs) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBIXfPtr, HICUMbaseBIXfBinding, HICUMbaseBINode, HICUMxfNode); //bi - xf
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEIXfPtr, HICUMemitEIXfBinding, HICUMemitEINode, HICUMxfNode); //ei - xf
|
||||
}
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBICollCIPtr, HICUMbaseBICollCIBinding, HICUMbaseBINode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCIBaseBIPtr, HICUMcollCIBaseBIBinding, HICUMcollCINode, HICUMbaseBINode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPCollCIPtr, HICUMbaseBPCollCIBinding, HICUMbaseBPNode, HICUMcollCINode); //bp-ci
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCIBaseBPPtr, HICUMcollCIBaseBPBinding, HICUMcollCINode, HICUMbaseBPNode); //ci-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsSICollCIPtr, HICUMsubsSICollCIBinding, HICUMsubsSINode, HICUMcollCINode); //si-ci
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCISubsSIPtr, HICUMcollCISubsSIBinding, HICUMcollCINode, HICUMsubsSINode); //ci-si
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCICollPtr, HICUMcollCICollBinding, HICUMcollCINode, HICUMcollNode); //ci-c
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCollCIPtr, HICUMcollCollCIBinding, HICUMcollNode, HICUMcollCINode); //c-ci
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsCollPtr, HICUMsubsCollBinding, HICUMsubsNode, HICUMcollNode); //s-c
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollSubsPtr, HICUMcollSubsBinding, HICUMcollNode, HICUMsubsNode); //c-s
|
||||
|
||||
if (nqs) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf1Xf1Ptr, HICUMxf1Xf1Binding, HICUMxf1Node, HICUMxf1Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf1BaseBIPtr, HICUMxf1BaseBIBinding, HICUMxf1Node, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf1EmitEIPtr, HICUMxf1EmitEIBinding, HICUMxf1Node, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf1CollCIPtr, HICUMxf1CollCIBinding, HICUMxf1Node, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf1Xf2Ptr, HICUMxf1Xf2Binding, HICUMxf1Node, HICUMxf2Node);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf2Xf1Ptr, HICUMxf2Xf1Binding, HICUMxf2Node, HICUMxf1Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf2BaseBIPtr, HICUMxf2BaseBIBinding, HICUMxf2Node, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf2EmitEIPtr, HICUMxf2EmitEIBinding, HICUMxf2Node, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf2CollCIPtr, HICUMxf2CollCIBinding, HICUMxf2Node, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf2Xf2Ptr, HICUMxf2Xf2Binding, HICUMxf2Node, HICUMxf2Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEIXf2Ptr, HICUMemitEIXf2Binding, HICUMemitEINode, HICUMxf2Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCIXf2Ptr, HICUMcollCIXf2Binding, HICUMcollCINode, HICUMxf2Node);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxfXfPtr, HICUMxfXfBinding, HICUMxfNode, HICUMxfNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxfEmitEIPtr, HICUMxfEmitEIBinding, HICUMxfNode, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxfCollCIPtr, HICUMxfCollCIBinding, HICUMxfNode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxfBaseBIPtr, HICUMxfBaseBIBinding, HICUMxfNode, HICUMbaseBINode);
|
||||
}
|
||||
|
||||
if (selfheat) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollTempPtr, HICUMcollTempBinding, HICUMcollNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseTempPtr, HICUMbaseTempBinding, HICUMbaseNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitTempPtr, HICUMemitTempBinding, HICUMemitNode, HICUMtempNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollCItempPtr, HICUMcollCItempBinding, HICUMcollCINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBItempPtr, HICUMbaseBItempBinding, HICUMbaseBINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMbaseBPtempPtr, HICUMbaseBPtempBinding, HICUMbaseBPNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMemitEItempPtr, HICUMemitEItempBinding, HICUMemitEINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsSItempPtr, HICUMsubsSItempBinding, HICUMsubsSINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMsubsTempPtr, HICUMsubsTempBinding, HICUMsubsNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMcollTempPtr, HICUMcollTempBinding, HICUMcollNode, HICUMtempNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempCollPtr, HICUMtempCollBinding, HICUMtempNode, HICUMcollNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempBasePtr, HICUMtempBaseBinding, HICUMtempNode, HICUMbaseNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempEmitPtr, HICUMtempEmitBinding, HICUMtempNode, HICUMemitNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempCollCIPtr, HICUMtempCollCIBinding, HICUMtempNode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempBaseBIPtr, HICUMtempBaseBIBinding, HICUMtempNode, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempBaseBPPtr, HICUMtempBaseBPBinding, HICUMtempNode, HICUMbaseBPNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempEmitEIPtr, HICUMtempEmitEIBinding, HICUMtempNode, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempSubsSIPtr, HICUMtempSubsSIBinding, HICUMtempNode, HICUMsubsSINode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMtempTempPtr, HICUMtempTempBinding, HICUMtempNode, HICUMtempNode);
|
||||
|
||||
if (nqs) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxfTempPtr, HICUMxfTempBinding, HICUMxfNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf2TempPtr, HICUMxf2TempBinding, HICUMxf2Node, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_COMPLEX(HICUMxf1TempPtr, HICUMxf1TempBinding, HICUMxf1Node, HICUMtempNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (OK) ;
|
||||
}
|
||||
|
||||
int
|
||||
HICUMbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
HICUMmodel *model = (HICUMmodel *)inModel ;
|
||||
HICUMinstance *here ;
|
||||
|
||||
NG_IGNORE (ckt) ;
|
||||
|
||||
/* loop through all the HICUM models */
|
||||
for ( ; model != NULL ; model = HICUMnextModel(model))
|
||||
{
|
||||
int selfheat = (((model->HICUMflsh == 1) || (model->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
||||
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
||||
|
||||
/* loop through all the instances of the model */
|
||||
for (here = HICUMinstances(model); here != NULL ; here = HICUMnextInstance(here))
|
||||
{
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCollPtr, HICUMcollCollBinding, HICUMcollNode, HICUMcollNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBasePtr, HICUMbaseBaseBinding, HICUMbaseNode, HICUMbaseNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEmitPtr, HICUMemitEmitBinding, HICUMemitNode, HICUMemitNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsSubsPtr, HICUMsubsSubsBinding, HICUMsubsNode, HICUMsubsNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCICollCIPtr, HICUMcollCICollCIBinding, HICUMcollCINode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBIBaseBIPtr, HICUMbaseBIBaseBIBinding, HICUMbaseBINode, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEIEmitEIPtr, HICUMemitEIEmitEIBinding, HICUMemitEINode, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPBaseBPPtr, HICUMbaseBPBaseBPBinding, HICUMbaseBPNode, HICUMbaseBPNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsSISubsSIPtr, HICUMsubsSISubsSIBinding, HICUMsubsSINode, HICUMsubsSINode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseEmitPtr, HICUMbaseEmitBinding, HICUMbaseNode, HICUMemitNode); //b-e
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitBasePtr, HICUMemitBaseBinding, HICUMemitNode, HICUMbaseNode); //e-b
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBaseBPPtr, HICUMbaseBaseBPBinding, HICUMbaseNode, HICUMbaseBPNode); //b-bp
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPBasePtr, HICUMbaseBPBaseBinding, HICUMbaseBPNode, HICUMbaseNode); //bp-b
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEmitEIPtr, HICUMemitEmitEIBinding, HICUMemitNode, HICUMemitEINode); //e-ei
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEIEmitPtr, HICUMemitEIEmitBinding, HICUMemitEINode, HICUMemitNode); //ei-e
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsSubsSIPtr, HICUMsubsSubsSIBinding, HICUMsubsNode, HICUMsubsSINode); //s-si
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsSISubsPtr, HICUMsubsSISubsBinding, HICUMsubsSINode, HICUMsubsNode); //si-s
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCIBasePtr, HICUMcollCIBaseBinding, HICUMcollCINode, HICUMbaseNode); //b-ci
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseCollCIPtr, HICUMbaseCollCIBinding, HICUMbaseNode, HICUMcollCINode); //ci-b
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCIEmitEIPtr, HICUMcollCIEmitEIBinding, HICUMcollCINode, HICUMemitEINode); //ci-ei
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEICollCIPtr, HICUMemitEICollCIBinding, HICUMemitEINode, HICUMcollCINode); //ei-ci
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPBaseBIPtr, HICUMbaseBPBaseBIBinding, HICUMbaseBPNode, HICUMbaseBINode); //bp-bi
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBIBaseBPPtr, HICUMbaseBIBaseBPBinding, HICUMbaseBINode, HICUMbaseBPNode); //bi-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPEmitEIPtr, HICUMbaseBPEmitEIBinding, HICUMbaseBPNode, HICUMemitEINode); //bp-ei
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEIBaseBPPtr, HICUMemitEIBaseBPBinding, HICUMemitEINode, HICUMbaseBPNode); //ei-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPEmitPtr, HICUMbaseBPEmitBinding, HICUMbaseBPNode, HICUMemitNode); //bp-e
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitBaseBPPtr, HICUMemitBaseBPBinding, HICUMemitNode, HICUMbaseBPNode); //e-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPSubsSIPtr, HICUMbaseBPSubsSIBinding, HICUMbaseBPNode, HICUMsubsSINode); //bp-si
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsSIBaseBPPtr, HICUMsubsSIBaseBPBinding, HICUMsubsSINode, HICUMbaseBPNode); //si-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBIEmitEIPtr, HICUMbaseBIEmitEIBinding, HICUMbaseBINode, HICUMemitEINode); //ei-bi
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEIBaseBIPtr, HICUMemitEIBaseBIBinding, HICUMemitEINode, HICUMbaseBINode); //bi-ei
|
||||
if (nqs) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBIXfPtr, HICUMbaseBIXfBinding, HICUMbaseBINode, HICUMxfNode); //bi - xf
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEIXfPtr, HICUMemitEIXfBinding, HICUMemitEINode, HICUMxfNode); //ei - xf
|
||||
}
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBICollCIPtr, HICUMbaseBICollCIBinding, HICUMbaseBINode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCIBaseBIPtr, HICUMcollCIBaseBIBinding, HICUMcollCINode, HICUMbaseBINode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPCollCIPtr, HICUMbaseBPCollCIBinding, HICUMbaseBPNode, HICUMcollCINode); //bp-ci
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCIBaseBPPtr, HICUMcollCIBaseBPBinding, HICUMcollCINode, HICUMbaseBPNode); //ci-bp
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsSICollCIPtr, HICUMsubsSICollCIBinding, HICUMsubsSINode, HICUMcollCINode); //si-ci
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCISubsSIPtr, HICUMcollCISubsSIBinding, HICUMcollCINode, HICUMsubsSINode); //ci-si
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCICollPtr, HICUMcollCICollBinding, HICUMcollCINode, HICUMcollNode); //ci-c
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCollCIPtr, HICUMcollCollCIBinding, HICUMcollNode, HICUMcollCINode); //c-ci
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsCollPtr, HICUMsubsCollBinding, HICUMsubsNode, HICUMcollNode); //s-c
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollSubsPtr, HICUMcollSubsBinding, HICUMcollNode, HICUMsubsNode); //c-s
|
||||
|
||||
if (nqs) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf1Xf1Ptr, HICUMxf1Xf1Binding, HICUMxf1Node, HICUMxf1Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf1BaseBIPtr, HICUMxf1BaseBIBinding, HICUMxf1Node, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf1EmitEIPtr, HICUMxf1EmitEIBinding, HICUMxf1Node, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf1CollCIPtr, HICUMxf1CollCIBinding, HICUMxf1Node, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf1Xf2Ptr, HICUMxf1Xf2Binding, HICUMxf1Node, HICUMxf2Node);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf2Xf1Ptr, HICUMxf2Xf1Binding, HICUMxf2Node, HICUMxf1Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf2BaseBIPtr, HICUMxf2BaseBIBinding, HICUMxf2Node, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf2EmitEIPtr, HICUMxf2EmitEIBinding, HICUMxf2Node, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf2CollCIPtr, HICUMxf2CollCIBinding, HICUMxf2Node, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf2Xf2Ptr, HICUMxf2Xf2Binding, HICUMxf2Node, HICUMxf2Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEIXf2Ptr, HICUMemitEIXf2Binding, HICUMemitEINode, HICUMxf2Node);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCIXf2Ptr, HICUMcollCIXf2Binding, HICUMcollCINode, HICUMxf2Node);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxfXfPtr, HICUMxfXfBinding, HICUMxfNode, HICUMxfNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxfEmitEIPtr, HICUMxfEmitEIBinding, HICUMxfNode, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxfCollCIPtr, HICUMxfCollCIBinding, HICUMxfNode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxfBaseBIPtr, HICUMxfBaseBIBinding, HICUMxfNode, HICUMbaseBINode);
|
||||
}
|
||||
|
||||
if (selfheat) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollTempPtr, HICUMcollTempBinding, HICUMcollNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseTempPtr, HICUMbaseTempBinding, HICUMbaseNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitTempPtr, HICUMemitTempBinding, HICUMemitNode, HICUMtempNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollCItempPtr, HICUMcollCItempBinding, HICUMcollCINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBItempPtr, HICUMbaseBItempBinding, HICUMbaseBINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMbaseBPtempPtr, HICUMbaseBPtempBinding, HICUMbaseBPNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMemitEItempPtr, HICUMemitEItempBinding, HICUMemitEINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsSItempPtr, HICUMsubsSItempBinding, HICUMsubsSINode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMsubsTempPtr, HICUMsubsTempBinding, HICUMsubsNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMcollTempPtr, HICUMcollTempBinding, HICUMcollNode, HICUMtempNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempCollPtr, HICUMtempCollBinding, HICUMtempNode, HICUMcollNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempBasePtr, HICUMtempBaseBinding, HICUMtempNode, HICUMbaseNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempEmitPtr, HICUMtempEmitBinding, HICUMtempNode, HICUMemitNode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempCollCIPtr, HICUMtempCollCIBinding, HICUMtempNode, HICUMcollCINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempBaseBIPtr, HICUMtempBaseBIBinding, HICUMtempNode, HICUMbaseBINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempBaseBPPtr, HICUMtempBaseBPBinding, HICUMtempNode, HICUMbaseBPNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempEmitEIPtr, HICUMtempEmitEIBinding, HICUMtempNode, HICUMemitEINode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempSubsSIPtr, HICUMtempSubsSIBinding, HICUMtempNode, HICUMsubsSINode);
|
||||
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMtempTempPtr, HICUMtempTempBinding, HICUMtempNode, HICUMtempNode);
|
||||
|
||||
if (nqs) {
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxfTempPtr, HICUMxfTempBinding, HICUMxfNode, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf2TempPtr, HICUMxf2TempBinding, HICUMxf2Node, HICUMtempNode);
|
||||
CONVERT_KLU_BINDING_TABLE_TO_REAL(HICUMxf1TempPtr, HICUMxf1TempBinding, HICUMxf1Node, HICUMtempNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (OK) ;
|
||||
}
|
||||
|
|
@ -365,6 +365,89 @@ typedef struct sHICUMinstance {
|
|||
#endif /*NONOISE*/
|
||||
/* the above to avoid allocating memory when it is not needed */
|
||||
|
||||
#ifdef KLU
|
||||
BindElement *HICUMbaseBaseBinding ;
|
||||
BindElement *HICUMbaseBaseBPBinding ;
|
||||
BindElement *HICUMbaseBIBaseBIBinding ;
|
||||
BindElement *HICUMbaseBIBaseBPBinding ;
|
||||
BindElement *HICUMbaseBICollCIBinding ;
|
||||
BindElement *HICUMbaseBIEmitEIBinding ;
|
||||
BindElement *HICUMbaseBItempBinding ;
|
||||
BindElement *HICUMbaseBIXfBinding ;
|
||||
BindElement *HICUMbaseBPBaseBIBinding ;
|
||||
BindElement *HICUMbaseBPBaseBinding ;
|
||||
BindElement *HICUMbaseBPBaseBPBinding ;
|
||||
BindElement *HICUMbaseBPCollCIBinding ;
|
||||
BindElement *HICUMbaseBPEmitBinding ;
|
||||
BindElement *HICUMbaseBPEmitEIBinding ;
|
||||
BindElement *HICUMbaseBPSubsSIBinding ;
|
||||
BindElement *HICUMbaseBPtempBinding ;
|
||||
BindElement *HICUMbaseCollCIBinding ;
|
||||
BindElement *HICUMbaseEmitBinding ;
|
||||
BindElement *HICUMbaseTempBinding ;
|
||||
BindElement *HICUMcollCIBaseBIBinding ;
|
||||
BindElement *HICUMcollCIBaseBinding ;
|
||||
BindElement *HICUMcollCIBaseBPBinding ;
|
||||
BindElement *HICUMcollCICollBinding ;
|
||||
BindElement *HICUMcollCICollCIBinding ;
|
||||
BindElement *HICUMcollCIEmitEIBinding ;
|
||||
BindElement *HICUMcollCISubsSIBinding ;
|
||||
BindElement *HICUMcollCItempBinding ;
|
||||
BindElement *HICUMcollCIXf2Binding ;
|
||||
BindElement *HICUMcollCollBinding ;
|
||||
BindElement *HICUMcollCollCIBinding ;
|
||||
BindElement *HICUMcollSubsBinding ;
|
||||
BindElement *HICUMcollTempBinding ;
|
||||
BindElement *HICUMemitBaseBinding ;
|
||||
BindElement *HICUMemitBaseBPBinding ;
|
||||
BindElement *HICUMemitEIBaseBIBinding ;
|
||||
BindElement *HICUMemitEIBaseBPBinding ;
|
||||
BindElement *HICUMemitEICollCIBinding ;
|
||||
BindElement *HICUMemitEIEmitBinding ;
|
||||
BindElement *HICUMemitEIEmitEIBinding ;
|
||||
BindElement *HICUMemitEItempBinding ;
|
||||
BindElement *HICUMemitEIXf2Binding ;
|
||||
BindElement *HICUMemitEIXfBinding ;
|
||||
BindElement *HICUMemitEmitBinding ;
|
||||
BindElement *HICUMemitEmitEIBinding ;
|
||||
BindElement *HICUMemitTempBinding ;
|
||||
BindElement *HICUMsubsCollBinding ;
|
||||
BindElement *HICUMsubsSIBaseBPBinding ;
|
||||
BindElement *HICUMsubsSICollCIBinding ;
|
||||
BindElement *HICUMsubsSISubsBinding ;
|
||||
BindElement *HICUMsubsSISubsSIBinding ;
|
||||
BindElement *HICUMsubsSItempBinding ;
|
||||
BindElement *HICUMsubsSubsBinding ;
|
||||
BindElement *HICUMsubsSubsSIBinding ;
|
||||
BindElement *HICUMsubsTempBinding ;
|
||||
BindElement *HICUMtempBaseBIBinding ;
|
||||
BindElement *HICUMtempBaseBinding ;
|
||||
BindElement *HICUMtempBaseBPBinding ;
|
||||
BindElement *HICUMtempCollBinding ;
|
||||
BindElement *HICUMtempCollCIBinding ;
|
||||
BindElement *HICUMtempEmitBinding ;
|
||||
BindElement *HICUMtempEmitEIBinding ;
|
||||
BindElement *HICUMtempSubsSIBinding ;
|
||||
BindElement *HICUMtempTempBinding ;
|
||||
BindElement *HICUMxf1BaseBIBinding ;
|
||||
BindElement *HICUMxf1CollCIBinding ;
|
||||
BindElement *HICUMxf1EmitEIBinding ;
|
||||
BindElement *HICUMxf1TempBinding ;
|
||||
BindElement *HICUMxf1Xf1Binding ;
|
||||
BindElement *HICUMxf1Xf2Binding ;
|
||||
BindElement *HICUMxf2BaseBIBinding ;
|
||||
BindElement *HICUMxf2CollCIBinding ;
|
||||
BindElement *HICUMxf2EmitEIBinding ;
|
||||
BindElement *HICUMxf2TempBinding ;
|
||||
BindElement *HICUMxf2Xf1Binding ;
|
||||
BindElement *HICUMxf2Xf2Binding ;
|
||||
BindElement *HICUMxfBaseBIBinding ;
|
||||
BindElement *HICUMxfCollCIBinding ;
|
||||
BindElement *HICUMxfEmitEIBinding ;
|
||||
BindElement *HICUMxfTempBinding ;
|
||||
BindElement *HICUMxfXfBinding ;
|
||||
#endif
|
||||
|
||||
} HICUMinstance;
|
||||
|
||||
/* entries in the state vector for hicum: */
|
||||
|
|
|
|||
|
|
@ -24,4 +24,10 @@ extern int HICUMtrunc(GENmodel*,CKTcircuit*,double*);
|
|||
extern int HICUMnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
|
||||
extern int HICUMsoaCheck(CKTcircuit *, GENmodel *);
|
||||
|
||||
#ifdef KLU
|
||||
extern int HICUMbindCSC (GENmodel*, CKTcircuit*) ;
|
||||
extern int HICUMbindCSCComplex (GENmodel*, CKTcircuit*) ;
|
||||
extern int HICUMbindCSCComplexToReal (GENmodel*, CKTcircuit*) ;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -75,6 +75,12 @@ SPICEdev HICUMinfo = {
|
|||
.DEVdump = NULL,
|
||||
.DEVacct = NULL,
|
||||
#endif
|
||||
|
||||
#ifdef KLU
|
||||
.DEVbindCSC = HICUMbindCSC,
|
||||
.DEVbindCSCComplex = HICUMbindCSCComplex,
|
||||
.DEVbindCSCComplexToReal = HICUMbindCSCComplexToReal,
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue