introduce rcxxx limiting as long as adms can't node collapsing

This commit is contained in:
dwarning 2017-08-14 12:51:10 +02:00 committed by Holger Vogt
parent 4bfc00ddd4
commit 6ac699f08e
3 changed files with 60 additions and 9 deletions

View File

@ -28,6 +28,11 @@ begin // Currents and charges
in case of vanishing resistance corresponding node
is not addressed: */
`ifdef insideADMS
//dw we have limited all the RCXXX to MIN_R
Vc4c1 = TYPE * V(c4, c1);
Vc3c4 = TYPE * V(c3, c4);
`else
if (RCBLX > 0.0)
begin
if (RCBLI > 0.0)
@ -54,6 +59,7 @@ else
Vc3c4 = 0 ;
end
end
`endif
Vb1c4 = Vb1b2 + Vb2c2 - Vc1c2 - Vc4c1 ;
Vcc3 = - Vbc + Vbb1 + Vb1c4 - Vc3c4 ;
@ -257,9 +263,9 @@ Vsc3 = Vsc4 - Vc3c4 ;
// nBex since MXT 504.10.1: Ackn. Jos Peters, Geoffrey Coram
nBex = (g1 - If0) / (1.0 + sqrt(1.0 + g1));
pWex = g2 / (1.0 + sqrt(1.0 + g2));
/* Iex until and including MXT 504.9:
Iex = (1.0 / BRI_T) * (0.5 * IK_TM * nBex - IS_TM);
*/
// Iex until and including MXT 504.9:
// Iex = (1.0 / BRI_T) * (0.5 * IK_TM * nBex - IS_TM);
//
// Iex since MXT 504.10: RvdT@TUDelft Q1, 2011:
Iex = IK_TM * nBex / (2.0 * BRI_T) ;
@ -295,7 +301,7 @@ if (ICSS < 0.0)
XIsub = 0.0;
`endif
/* begin: RvdT, Q4 2012, Mextram 504.11: added EXMOD=2 option: */
// begin: RvdT, Q4 2012, Mextram 504.11: added EXMOD=2 option:
if (EXMOD == 1 || EXMOD == 2)
begin
@ -310,9 +316,9 @@ if (ICSS < 0.0)
// XnBex = Xg1 / (1.0 + sqrt(1.0 + Xg1));
// XnBex in MXT 504.10.1: Ackn. Jos Peters, Geoffrey Coram:
XnBex = (Xg1 - If0) / (1.0 + sqrt(1.0 + Xg1));
/* XIMex until and including MXT 504.9:
XIMex = XEXT * (0.5 * IK_TM * XnBex - IS_TM) / BRI_T;
*/
// XIMex until and including MXT 504.9:
// XIMex = XEXT * (0.5 * IK_TM * XnBex - IS_TM) / BRI_T;
//
// XIMex in MXT 504.10: RvdT@TUDelft Q1, 2011:
XIMex = XEXT * 0.5 * IK_TM * XnBex / BRI_T;
@ -592,11 +598,21 @@ This construct supports the case
RCBLI = 0.0 and or RCBLX = 0.0 .
It is up to the compiler to adjust the circuit topology
and perform a node-collapse in such cases. */
if (RCBLX > 0.0)
begin
`ifdef insideADMS
//dw we have limited all the RCXXX to MIN_R
I(b, c3) <+ TYPE * XIex;
I(c, c3) <+ TYPE * Vcc3 * GCCxx_TM ;
I(b, c3) <+ ddt(TYPE * (XQtex + XQex));
I(c4, c1) <+ TYPE * Vc4c1 * GCCin_TM;
I(b1, c4) <+ TYPE * (Ib3 + Iex);
I(c3, c4) <+ TYPE * Vc3c4 * GCCex_TM ;
I(b1, c4) <+ ddt(TYPE * (Qtex + Qex));
`else
if (RCBLX > 0.0)
begin
I(b, c3) <+ TYPE * XIex;
I(c, c3) <+ TYPE * Vcc3 * GCCxx_TM ;
I(b, c3) <+ ddt(TYPE * (XQtex + XQex));
if (RCBLI > 0.0)
begin
I(c4, c1) <+ TYPE * Vc4c1 * GCCin_TM;
@ -635,4 +651,5 @@ else
I(c3, c1) <+ TYPE * Vc3c4 * GCCex_TM ;
end
end
`endif

View File

@ -22,6 +22,10 @@
`define AJS 2.0
`define VEXLIM 400.0
`define PI 3.1415926
`ifdef insideADMS
//dw needed for RCXXX limiting
`define MIN_R 0.001
`endif
// Desriptions and units
`ifdef __VAMS_COMPACT_MODELING__
@ -34,9 +38,16 @@
`define PAI(des,uni) parameter integer
`endif
// ADMS specific definitions
`ifdef insideADMS
`define MODEL @(initial_model)
`define INSTANCE @(initial_instance)
`define NOISE @(noise)
`else
`define MODEL
`define INSTANCE
`define NOISE
`endif
// Smooth limitting functions
`define max_hyp0(result, x, epsilon)\

View File

@ -77,9 +77,25 @@
RBC_T = RBC * exp(lntN * AEX);
// RvdT, 30-11-2007: new collector resistances RCCxx_T, RCCex_T, RCCin_T
`ifdef insideADMS
//dw limiting all the RCXXX to MIN_R
if (RCC > 0.0)
RCCxx_T = RCC * exp(lntN * AC);
else
RCCxx_T = `MIN_R * exp(lntN * AC);
if (RCBLX > 0.0)
RCCex_T = RCBLX * exp(lntN * ACBL);
else
RCCex_T = `MIN_R * exp(lntN * ACBL);
if (RCBLI > 0.0)
RCCin_T = RCBLI * exp(lntN * ACBL);
else
RCCin_T = `MIN_R * exp(lntN * ACBL);
`else
RCCxx_T = RCC * exp(lntN * AC);
RCCex_T = RCBLX * exp(lntN * ACBL);
RCCin_T = RCBLI * exp(lntN * ACBL);
`endif
RCV_T = RCV * exp(lntN * AEPI);
@ -207,6 +223,12 @@
// RvdT, 03-12-2007: new collector conductances
`ifdef insideADMS
//dw we have limited all the RCXXX to MIN_R
GCCxx_TM = 1.0 / RCCxx_TM ;
GCCex_TM = 1.0 / RCCex_TM ;
GCCin_TM = 1.0 / RCCin_TM ;
`else
if (RCC > 0.0)
begin
GCCxx_TM = 1.0 / RCCxx_TM ;
@ -233,6 +255,7 @@
begin
GCCin_TM = 0 ;
end
`endif
`ifdef SELFHEATING
RTH_Tamb_M = RTH_Tamb * invMULT;