diff --git a/src/spicelib/devices/hicum2/Makefile.am b/src/spicelib/devices/hicum2/Makefile.am index 1ca0511be..3ffdbe0ea 100644 --- a/src/spicelib/devices/hicum2/Makefile.am +++ b/src/spicelib/devices/hicum2/Makefile.am @@ -26,8 +26,8 @@ libhicum2_la_SOURCES = \ hicum2soachk.c \ hicum2trunc.c -AM_CFLAGS = -O -g -Wall -Wextra -AM_CPPFLAGS = @AM_CPPFLAGS@ -O -g -Wall -Wextra -AM_CXXFLAGS = -I$(top_srcdir)/../cppduals -std=c++11 -O -g -Wall -Wextra +AM_CFLAGS = -O -g -Wall -Wextra -I$(top_srcdir)/src/include +AM_CPPFLAGS = @AM_CPPFLAGS@ -O -g -Wall -Wextra -I$(top_srcdir)/src/include +AM_CXXFLAGS = -std=c++11 -O -g -Wall -Wextra MAINTAINERCLEANFILES = Makefile.in diff --git a/src/spicelib/devices/hicum2/hicum2load.c b/src/spicelib/devices/hicum2/hicum2load.c index 186817dc9..a29d40b14 100644 --- a/src/spicelib/devices/hicum2/hicum2load.c +++ b/src/spicelib/devices/hicum2/hicum2load.c @@ -1780,6 +1780,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) //todo: what about dQ/dT ? + //every branch connected with gmin Ibiei += ckt->CKTgmin*Vbiei; Ibiei_Vbiei += ckt->CKTgmin; Ibici += ckt->CKTgmin*Vbici; diff --git a/src/spicelib/devices/hicum2/hicumL2.cpp b/src/spicelib/devices/hicum2/hicumL2.cpp index 836daa5fa..6e479e5e0 100644 --- a/src/spicelib/devices/hicum2/hicumL2.cpp +++ b/src/spicelib/devices/hicum2/hicumL2.cpp @@ -2617,23 +2617,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Ibpbi_Vrth = 0; } - Ibiei += ckt->CKTgmin*Vbiei; - Ibiei_Vbiei += ckt->CKTgmin; - Ibici += ckt->CKTgmin*Vbici; - Ibici_Vbici += ckt->CKTgmin; - Ibici_Vbiei += ckt->CKTgmin; - Iciei += ckt->CKTgmin*Vciei; - Iciei_Vbiei += ckt->CKTgmin; - Iciei_Vbici += ckt->CKTgmin; - Ibpei += ckt->CKTgmin*Vbpei; - Ibpei_Vbpei += ckt->CKTgmin; - Ibpbi += ckt->CKTgmin*Vbpbi; - Ibpbi_Vbiei += ckt->CKTgmin; - Ibpbi_Vbici += ckt->CKTgmin; - Ibpci += ckt->CKTgmin*Vbpci; - Ibpci_Vbpci += ckt->CKTgmin; - Isici += ckt->CKTgmin*Vsici; - Isici_Vsici += ckt->CKTgmin; + //printf("Vbiei: %f Vbici: %f Vciei: %f Vbpei: %f Vbpci: %f Vbci: %f Vsici: %f\n", Vbiei, Vbici, Vciei, Vbpei, Vbpci, Vbci, Vsici); //printf("Ibiei: %g ibici: %g Ibpei: %g Iciei: %g\n",Ibiei,ibici,Ibpei,Iciei); @@ -2722,6 +2706,82 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) } // ******************************************** + // all nodes (B BP BI C CI E EI S SI) connected to gmin + // T node not neede since if rth to small, non existent + Ibiei += ckt->CKTgmin*Vbiei; //BI EI -> BI EI + Ibici += ckt->CKTgmin*Vbici; //BI CI -> CI + Ibpei += ckt->CKTgmin*Vbpei; //BP EI -> BP + // Iciei += ckt->CKTgmin*Vciei; //CI EI -> not needed + // Ibpbi += ckt->CKTgmin*Vbpbi; //BP BI -> not needed + // Ibpci += ckt->CKTgmin*Vbpci; //BP CI -> not needed + Isici += ckt->CKTgmin*Vsici; //SI CI -> SI + //C from Icic + //E from Ieie + //S from Isis + + //all derivatives with gmin + //Ibiei + Ibiei_Vbiei += ckt->CKTgmin; + Ibiei_Vbici += ckt->CKTgmin; + + //Ibici + Ibici_Vbici += ckt->CKTgmin; + Ibici_Vbiei += ckt->CKTgmin; + + //Iciei + Iciei_Vbiei += ckt->CKTgmin; + Iciei_Vbici += ckt->CKTgmin; + + //Ibpei + Ibpei_Vbpei += ckt->CKTgmin; + + // Ibpbi + Ibpbi_Vbiei += ckt->CKTgmin; + Ibpbi_Vbici += ckt->CKTgmin; + //Ibpbi_Vbpbi += ckt->CKTgmin; //not needed since rbi is set to gmin if too small + + //Ibpci + Ibpci_Vbpci += ckt->CKTgmin; + + //Isici + Isici_Vsici += ckt->CKTgmin; + + //Ibpsi + Ibpsi_Vbpci += ckt->CKTgmin; + Ibpsi_Vsici += ckt->CKTgmin; + + //SHE derivatives + if (!(model->HICUMflsh == 0 || model->HICUMrth < MIN_R )) { + //Ibiei + Ibiei_Vrth += ckt->CKTgmin; + //Ibici + Ibici_Vrth += ckt->CKTgmin; + //Iciei + Iciei_Vrth += ckt->CKTgmin; + //Ibpei + Ibpei_Vrth += ckt->CKTgmin; + // Ibpbi + Ibpbi_Vrth += ckt->CKTgmin; + //Ibpci + Ibpci_Vrth += ckt->CKTgmin; + //Isici + Isici_Vrth += ckt->CKTgmin; + //Ibpsi + Ibpsi_Vrth += ckt->CKTgmin; + //Ith + Ith_Vbiei += ckt->CKTgmin; + Ith_Vbici += ckt->CKTgmin; + Ith_Vbpbi += ckt->CKTgmin; + Ith_Vbpci += ckt->CKTgmin; + Ith_Vbpei += ckt->CKTgmin; + Ith_Vciei += ckt->CKTgmin; + Ith_Vsici += ckt->CKTgmin; + Ith_Vcic += ckt->CKTgmin; + Ith_Vbbp += ckt->CKTgmin; + Ith_Veie += ckt->CKTgmin; + Ith_Vrth += ckt->CKTgmin; + } + // NQS effect // Ibxf1 = Ixf1; // Icxf1 += ddt(Qxf1); diff --git a/src/spicelib/devices/hicum2/overview_files.md b/src/spicelib/devices/hicum2/overview_files.md index d647b19b6..3773a4e23 100644 --- a/src/spicelib/devices/hicum2/overview_files.md +++ b/src/spicelib/devices/hicum2/overview_files.md @@ -101,3 +101,13 @@ Im Update part, line 1361: if (ibets > 0 && (Vbpei < 0.0 || Vbiei < 0.0)) begin : HICTUN_T +# gmin + +Die Knoten eines nichlinearen Zweiges müssen einmal (!) mit gmin verbunden werden. +Daraus folgt, wie schon gemacht, für den Strom gmin*Vxy als Zusatz und für alle (!) +Ableitungen des Stromes gmin als Zusatz. + +Praktisch heißt das, daß die Beaufschlagung von Iciei überflüssig ist, +da schon mit den Zweigen biei und bici erfolgt ist. +Es fehlen aber noch Beaufschlagungen, +z.B. Ibiei_Vbici, weil die Ableitung später hinzugekommen ist. \ No newline at end of file