Xyce  6.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
N_DEV_ADMSbsimcmg.C
Go to the documentation of this file.
1 
2 //-----------------------------------------------------------------------------
3 // Copyright Notice
4 //
5 // Copyright 2002 Sandia Corporation. Under the terms
6 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S.
7 // Government retains certain rights in this software.
8 //
9 // Xyce(TM) Parallel Electrical Simulator
10 // Copyright (C) 2002-2014 Sandia Corporation
11 //
12 // This program is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation, either version 3 of the License, or
15 // (at your option) any later version.
16 //
17 // This program is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
22 // You should have received a copy of the GNU General Public License
23 // along with this program. If not, see <http://www.gnu.org/licenses/>.
24 //-----------------------------------------------------------------------------
25 
26 //-------------------------------------------------------------------------
27 // Filename : $RCSfile: N_DEV_ADMSbsimcmg.C,v $
28 //
29 // Purpose :
30 //
31 // Special Notes : Generated from verilog file bsimcmg.va with ADMS
32 // interface for Xyce 6.1.0
33 // DO NOT EDIT THIS FILE DIRECTLY! It may be overwritten!
34 //
35 // Creator : admsXml-2.3.0
36 //
37 // Creation Date : Mon, 02 Jun 2014 11:31:50
38 //
39 // Revision Information:
40 // ---------------------
41 //
42 // Revision Number: $Revision: 1.28 $
43 //
44 // Revision Date : $Date: 2014/06/02 17:46:47 $
45 //
46 // Current Owner : $Author: tvrusso $
47 //-------------------------------------------------------------------------
48 
49 #include <Xyce_config.h>
50 #include <N_DEV_ADMSbsimcmg.h>
51 
52 
53 #include <N_UTL_Misc.h>
54 
55 #include <N_DEV_Const.h>
56 #include <N_DEV_DeviceOptions.h>
57 #include <N_DEV_DeviceMaster.h>
58 #include <N_DEV_ExternData.h>
59 #include <N_DEV_MatrixLoadData.h>
60 #include <N_DEV_SolverState.h>
61 #include <N_DEV_Message.h>
62 
63 #include <N_LAS_Matrix.h>
64 #include <N_LAS_Vector.h>
65 
66 namespace Xyce {
67 namespace Device {
68 namespace ADMSbsimcmg {
69 std::vector< std::vector<int> > Instance::jacStamp;
70 std::vector<int> Instance::jacMap;
71 std::vector< std::vector<int> > Instance::jacMap2;
72 
73 
74 void
76 {
77  // Set up each parameter directly, using the up-cased variable name
78  // as the tag.
79 
80  // This kludge is to force us always to have an instance parameter
81  // that the device manager can set to the temperature, even if we have
82  // no "TEMP".
83  p.addPar("XYCEADMSINSTTEMP", 0.0, &ADMSbsimcmg::Instance::admsInstTemp)
84  .setExpressionAccess(NO_DOC)
85  .setUnit(U_DEGK)
86  .setCategory(CAT_TEMP)
87  .setDescription("Internal-use parameter for setting device instance temperature");
88  p.addPar("L", static_cast<double>(30*1.0e-9), &ADMSbsimcmg::Instance::L)
89  .setDescription("Designed Gate Length");
90  p.addPar("D", static_cast<double>(40*1.0e-9), &ADMSbsimcmg::Instance::D)
91  .setDescription("Diameter of the cylinder (GEOMOD=3)");
92  p.addPar("TFIN", static_cast<double>(15*1.0e-9), &ADMSbsimcmg::Instance::TFIN)
93  .setDescription("Body (Fin) thickness");
94  p.addPar("FPITCH", static_cast<double>(80*1.0e-9), &ADMSbsimcmg::Instance::FPITCH)
95  .setDescription("Fin pitch");
96  p.addPar("NFIN", static_cast<double>(1.0), &ADMSbsimcmg::Instance::NFIN)
97  .setDescription("Number of fins per finger (real number enables optimization)");
98  p.addPar("NGCON", static_cast<int>(1), &ADMSbsimcmg::Instance::NGCON)
99  .setDescription("number of gate contact (1 or 2 sided)");
100  p.addPar("ASEO", static_cast<double>(0), &ADMSbsimcmg::Instance::ASEO)
101  .setDescription("Source to substrate overlap area through oxide");
102  p.addPar("ADEO", static_cast<double>(0), &ADMSbsimcmg::Instance::ADEO)
103  .setDescription("Drain to substrate overlap area through oxide");
104  p.addPar("PSEO", static_cast<double>(0), &ADMSbsimcmg::Instance::PSEO)
105  .setDescription("Perimeter of source to substrate overlap region through oxide");
106  p.addPar("PDEO", static_cast<double>(0), &ADMSbsimcmg::Instance::PDEO)
107  .setDescription("Perimeter of drain to substrate overlap region through oxide");
108  p.addPar("ASEJ", static_cast<double>(0), &ADMSbsimcmg::Instance::ASEJ)
109  .setDescription("Source junction area (BULKMOD=1)");
110  p.addPar("ADEJ", static_cast<double>(0), &ADMSbsimcmg::Instance::ADEJ)
111  .setDescription("Drain junction area (BULKMOD=1)");
112  p.addPar("PSEJ", static_cast<double>(0), &ADMSbsimcmg::Instance::PSEJ)
113  .setDescription("Source to substrate PN junction perimeter (BULKMOD=1)");
114  p.addPar("PDEJ", static_cast<double>(0), &ADMSbsimcmg::Instance::PDEJ)
115  .setDescription("Drain to substrate PN junction perimeter (BULKMOD=1)");
116  p.addPar("COVS", static_cast<double>(0), &ADMSbsimcmg::Instance::COVS)
117  .setDescription("Constant g/s overlap capacitance (CGEOMOD=1)");
118  p.addPar("COVD", 0.0, &ADMSbsimcmg::Instance::COVD)
119  .setDescription("Constant g/d overlap capacitance (CGEOMOD=1)");
120  p.addPar("CGSP", static_cast<double>(0.0), &ADMSbsimcmg::Instance::CGSP)
121  .setDescription("Constant gate-to-source fringe capacitance (CGEOMOD=1)");
122  p.addPar("CGDP", static_cast<double>(0.0), &ADMSbsimcmg::Instance::CGDP)
123  .setDescription("Constant gate-to-drain fringe capacitance (CGEOMOD=1)");
124  p.addPar("CDSP", static_cast<double>(0.0), &ADMSbsimcmg::Instance::CDSP)
125  .setDescription("Constant drain-to-source fringe capacitance (All CGEOMOD)");
126  p.addPar("NRS", static_cast<double>(0.0), &ADMSbsimcmg::Instance::NRS)
127  .setDescription("Number of source diffusion squares");
128  p.addPar("NRD", static_cast<double>(0.0), &ADMSbsimcmg::Instance::NRD)
129  .setDescription("Number of source diffusion squares");
130  p.addPar("LRSD", 0.0, &ADMSbsimcmg::Instance::LRSD)
131  .setDescription("Length of the source/drain");
132 
133 
134 }
135 
137 {
138  // Set up each parameter directly, using the up-cased variable name
139  // as the tag.
140 
141  // This kludge is to force us always to have a model parameter
142  // that the device manager can set to the temperature, even if we have
143  // no "TEMP".
144  p.addPar("XYCEADMSMODTEMP", 0.0, &ADMSbsimcmg::Model::admsModTemp)
145  .setExpressionAccess(NO_DOC)
146  .setUnit(U_DEGK)
147  .setCategory(CAT_TEMP)
148  .setDescription("Internal-use parameter for setting device model temperature");
149  p.addPar("L", static_cast<double>(30*1.0e-9), &ADMSbsimcmg::Model::L)
150  .setDescription("Designed Gate Length");
151  p.addPar("D", static_cast<double>(40*1.0e-9), &ADMSbsimcmg::Model::D)
152  .setDescription("Diameter of the cylinder (GEOMOD=3)");
153  p.addPar("TFIN", static_cast<double>(15*1.0e-9), &ADMSbsimcmg::Model::TFIN)
154  .setDescription("Body (Fin) thickness");
155  p.addPar("FPITCH", static_cast<double>(80*1.0e-9), &ADMSbsimcmg::Model::FPITCH)
156  .setDescription("Fin pitch");
157  p.addPar("NF", static_cast<int>(1), &ADMSbsimcmg::Model::NF)
158  .setDescription("Number of fingers");
159  p.addPar("NFIN", static_cast<double>(1.0), &ADMSbsimcmg::Model::NFIN)
160  .setDescription("Number of fins per finger (real number enables optimization)");
161  p.addPar("NGCON", static_cast<int>(1), &ADMSbsimcmg::Model::NGCON)
162  .setDescription("number of gate contact (1 or 2 sided)");
163  p.addPar("ASEO", static_cast<double>(0), &ADMSbsimcmg::Model::ASEO)
164  .setDescription("Source to substrate overlap area through oxide");
165  p.addPar("ADEO", static_cast<double>(0), &ADMSbsimcmg::Model::ADEO)
166  .setDescription("Drain to substrate overlap area through oxide");
167  p.addPar("PSEO", static_cast<double>(0), &ADMSbsimcmg::Model::PSEO)
168  .setDescription("Perimeter of source to substrate overlap region through oxide");
169  p.addPar("PDEO", static_cast<double>(0), &ADMSbsimcmg::Model::PDEO)
170  .setDescription("Perimeter of drain to substrate overlap region through oxide");
171  p.addPar("ASEJ", static_cast<double>(0), &ADMSbsimcmg::Model::ASEJ)
172  .setDescription("Source junction area (BULKMOD=1)");
173  p.addPar("ADEJ", static_cast<double>(0), &ADMSbsimcmg::Model::ADEJ)
174  .setDescription("Drain junction area (BULKMOD=1)");
175  p.addPar("PSEJ", static_cast<double>(0), &ADMSbsimcmg::Model::PSEJ)
176  .setDescription("Source to substrate PN junction perimeter (BULKMOD=1)");
177  p.addPar("PDEJ", static_cast<double>(0), &ADMSbsimcmg::Model::PDEJ)
178  .setDescription("Drain to substrate PN junction perimeter (BULKMOD=1)");
179  p.addPar("COVS", static_cast<double>(0), &ADMSbsimcmg::Model::COVS)
180  .setDescription("Constant g/s overlap capacitance (CGEOMOD=1)");
181  p.addPar("COVD", 0.0, &ADMSbsimcmg::Model::COVD)
182  .setDescription("Constant g/d overlap capacitance (CGEOMOD=1)");
183  p.addPar("CGSP", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGSP)
184  .setDescription("Constant gate-to-source fringe capacitance (CGEOMOD=1)");
185  p.addPar("CGDP", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGDP)
186  .setDescription("Constant gate-to-drain fringe capacitance (CGEOMOD=1)");
187  p.addPar("CDSP", static_cast<double>(0.0), &ADMSbsimcmg::Model::CDSP)
188  .setDescription("Constant drain-to-source fringe capacitance (All CGEOMOD)");
189  p.addPar("NRS", static_cast<double>(0.0), &ADMSbsimcmg::Model::NRS)
190  .setDescription("Number of source diffusion squares");
191  p.addPar("NRD", static_cast<double>(0.0), &ADMSbsimcmg::Model::NRD)
192  .setDescription("Number of source diffusion squares");
193  p.addPar("LRSD", 0.0, &ADMSbsimcmg::Model::LRSD)
194  .setDescription("Length of the source/drain");
195  p.addPar("XL", static_cast<double>(0), &ADMSbsimcmg::Model::XL)
196  .setDescription("L offset for channel length due to mask/etch effect");
197  p.addPar("DTEMP", static_cast<double>(0), &ADMSbsimcmg::Model::DTEMP)
198  .setDescription("Variability in Device Temperature ");
199  p.addPar("DELVTRAND", static_cast<double>(0), &ADMSbsimcmg::Model::DELVTRAND)
200  .setDescription("Variability in Vth");
201  p.addPar("U0MULT", static_cast<double>(1), &ADMSbsimcmg::Model::U0MULT)
202  .setDescription("Variability in carrier mobility");
203  p.addPar("IDS0MULT", static_cast<double>(1), &ADMSbsimcmg::Model::IDS0MULT)
204  .setDescription("Variability in Drain current for misc. reasons ");
205  p.addPar("DEVTYPE", static_cast<int>(1), &ADMSbsimcmg::Model::DEVTYPE);
206  p.addPar("BULKMOD", static_cast<int>(0), &ADMSbsimcmg::Model::BULKMOD)
207  .setDescription("Bulk model");
208  p.addPar("COREMOD", static_cast<int>(0), &ADMSbsimcmg::Model::COREMOD)
209  .setDescription("Surface potential algorithm");
210  p.addPar("GEOMOD", static_cast<int>(1), &ADMSbsimcmg::Model::GEOMOD)
211  .setDescription("Geometry mode selector");
212  p.addPar("CGEO1SW", static_cast<int>(0), &ADMSbsimcmg::Model::CGEO1SW);
213  p.addPar("RDSMOD", static_cast<int>(0), &ADMSbsimcmg::Model::RDSMOD)
214  .setDescription("Resistance model selector");
215  p.addPar("ASYMMOD", static_cast<int>(0), &ADMSbsimcmg::Model::ASYMMOD)
216  .setDescription("Asymmetric model selector");
217  p.addPar("IGCMOD", static_cast<int>(0), &ADMSbsimcmg::Model::IGCMOD)
218  .setDescription("model selector for Igc, Igs, and Igd");
219  p.addPar("IGBMOD", static_cast<int>(0), &ADMSbsimcmg::Model::IGBMOD)
220  .setDescription("model selector for Igb");
221  p.addPar("GIDLMOD", static_cast<int>(0), &ADMSbsimcmg::Model::GIDLMOD)
222  .setDescription("GIDL/GISL current switcher");
223  p.addPar("IIMOD", static_cast<int>(0), &ADMSbsimcmg::Model::IIMOD)
224  .setDescription("Impact ionization model switch");
225  p.addPar("NQSMOD", static_cast<int>(0), &ADMSbsimcmg::Model::NQSMOD);
226  p.addPar("SHMOD", static_cast<int>(0), &ADMSbsimcmg::Model::SHMOD)
227  .setDescription("Self heating and T node switcher --- NOT USED IN XYCE");
228  p.addPar("RGATEMOD", static_cast<int>(0), &ADMSbsimcmg::Model::RGATEMOD)
229  .setDescription("Gate electrode resistor and ge node switcher --- NOT USED IN XYCE");
230  p.addPar("RGEOMOD", static_cast<int>(0), &ADMSbsimcmg::Model::RGEOMOD)
231  .setDescription("Bias independent parasitic resistance model selector");
232  p.addPar("CGEOMOD", static_cast<int>(0), &ADMSbsimcmg::Model::CGEOMOD)
233  .setDescription("parasitic capacitance model selector");
234  p.addPar("CAPMOD", static_cast<int>(0), &ADMSbsimcmg::Model::CAPMOD)
235  .setDescription("Accumulation region capacitance model selector");
236  p.addPar("LINT", static_cast<double>(0), &ADMSbsimcmg::Model::LINT)
237  .setDescription("Length reduction parameter (dopant diffusion effect)");
238  p.addPar("LL", static_cast<double>(0), &ADMSbsimcmg::Model::LL)
239  .setDescription("Length reduction parameter (dopant diffusion effect)");
240  p.addPar("LLN", static_cast<double>(1), &ADMSbsimcmg::Model::LLN)
241  .setDescription("Length reduction parameter (dopant diffusion effect)");
242  p.addPar("DLC", static_cast<double>(0), &ADMSbsimcmg::Model::DLC)
243  .setDescription("Delta L for C-V model");
244  p.addPar("DLCACC", static_cast<double>(0), &ADMSbsimcmg::Model::DLCACC)
245  .setDescription("Delta L for C-V model in accumulation region (CAPMOD=1, BULKMOD=1)");
246  p.addPar("DLBIN", static_cast<double>(0), &ADMSbsimcmg::Model::DLBIN)
247  .setDescription("Delta L for Binning");
248  p.addPar("LLC", static_cast<double>(0), &ADMSbsimcmg::Model::LLC)
249  .setDescription("Length reduction parameter (dopant diffusion effect)");
250  p.addPar("EOT", static_cast<double>(1.0*1.0e-9), &ADMSbsimcmg::Model::EOT)
251  .setDescription("equivalent oxide thickness in meters");
252  p.addPar("TOXP", static_cast<double>(1.2*1.0e-9), &ADMSbsimcmg::Model::TOXP)
253  .setDescription("physical oxide thickness in meters");
254  p.addPar("EOTBOX", static_cast<double>(140*1.0e-9), &ADMSbsimcmg::Model::EOTBOX)
255  .setDescription("equivalent oxide thickness of the buried oxide (SOI FinFET) or STI (bulk FinFET) in meters");
256  p.addPar("HFIN", static_cast<double>(30*1.0e-9), &ADMSbsimcmg::Model::HFIN)
257  .setDescription("Fin height in meters");
258  p.addPar("FECH", static_cast<double>(1), &ADMSbsimcmg::Model::FECH)
259  .setDescription("End-channel factor, for different orientation/shape");
260  p.addPar("DELTAW", static_cast<double>(0), &ADMSbsimcmg::Model::DELTAW)
261  .setDescription("change of effective width due to shape of fin/cylinder");
262  p.addPar("FECHCV", static_cast<double>(1), &ADMSbsimcmg::Model::FECHCV)
263  .setDescription("CV end-channel factor, for different orientaion/shape");
264  p.addPar("DELTAWCV", static_cast<double>(0), &ADMSbsimcmg::Model::DELTAWCV)
265  .setDescription("CV change of effective width due to shape of fin/cylinder");
266  p.addPar("NBODY", static_cast<double>(1e22), &ADMSbsimcmg::Model::NBODY)
267  .setDescription("channel (body) doping");
268  p.addPar("NBODYN1", static_cast<double>(0), &ADMSbsimcmg::Model::NBODYN1)
269  .setDescription("NFIN dependence of channel (body) doping");
270  p.addPar("NBODYN2", static_cast<double>(1.0e5), &ADMSbsimcmg::Model::NBODYN2)
271  .setDescription("NFIN dependence of channel (body) doping");
272  p.addPar("NSD", static_cast<double>(2e26), &ADMSbsimcmg::Model::NSD)
273  .setDescription("Source/drain active doping concentration in m-3");
274  p.addPar("PHIG", static_cast<double>(4.61), &ADMSbsimcmg::Model::PHIG)
275  .setDescription("Gate workfunction, eV");
276  p.addPar("PHIGL", static_cast<double>(0), &ADMSbsimcmg::Model::PHIGL)
277  .setDescription("Length dependence of Gate workfunction, eV/m");
278  p.addPar("PHIGN1", static_cast<double>(0), &ADMSbsimcmg::Model::PHIGN1)
279  .setDescription("NFIN dependence of Gate workfunction");
280  p.addPar("PHIGN2", static_cast<double>(1.0e5), &ADMSbsimcmg::Model::PHIGN2)
281  .setDescription("NFIN dependence of Gate workfunction");
282  p.addPar("EPSROX", static_cast<double>(3.9), &ADMSbsimcmg::Model::EPSROX)
283  .setDescription("Relative dielectric constant of the gate dielectric");
284  p.addPar("EPSRSUB", static_cast<double>(11.9), &ADMSbsimcmg::Model::EPSRSUB)
285  .setDescription("Relative dielectric constant of the channel material");
286  p.addPar("EASUB", static_cast<double>(4.05), &ADMSbsimcmg::Model::EASUB)
287  .setDescription("Electron affinity of substrate, eV");
288  p.addPar("NI0SUB", static_cast<double>(1.1e16), &ADMSbsimcmg::Model::NI0SUB)
289  .setDescription("Intrinsic carrier constant at 300.15K, m-3");
290  p.addPar("BG0SUB", static_cast<double>(1.12), &ADMSbsimcmg::Model::BG0SUB)
291  .setDescription("Band gap of substrate at 300.15K, eV");
292  p.addPar("NC0SUB", static_cast<double>(2.86e25), &ADMSbsimcmg::Model::NC0SUB)
293  .setDescription("Conduction band density of states, m-3");
294  p.addPar("NGATE", static_cast<double>(0.0), &ADMSbsimcmg::Model::NGATE)
295  .setDescription("Parameter for Poly Gate Doping, for metal gate please set NGATE = 0");
296  p.addPar("IMIN", static_cast<double>(1.0E-15), &ADMSbsimcmg::Model::Imin)
297  .setDescription("Parameter for Vgs Clamping for inversion region calc. in accumulation");
298  p.addPar("CIT", static_cast<double>(0.0), &ADMSbsimcmg::Model::CIT)
299  .setDescription("parameter for interface trap");
300  p.addPar("CDSC", static_cast<double>(7e-3), &ADMSbsimcmg::Model::CDSC)
301  .setDescription("coupling capacitance between S/D and channel");
302  p.addPar("CDSCN1", static_cast<double>(0), &ADMSbsimcmg::Model::CDSCN1)
303  .setDescription("NFIN dependence of CDSC");
304  p.addPar("CDSCN2", static_cast<double>(1.0e5), &ADMSbsimcmg::Model::CDSCN2)
305  .setDescription("NFIN dependence of CDSC");
306  p.addPar("CDSCD", static_cast<double>(7e-3), &ADMSbsimcmg::Model::CDSCD)
307  .setDescription("drain-bias sensitivity of CDSC");
308  p.addPar("CDSCDN1", static_cast<double>(0), &ADMSbsimcmg::Model::CDSCDN1)
309  .setDescription("NFIN dependence of CDSCD");
310  p.addPar("CDSCDN2", static_cast<double>(1.0e5), &ADMSbsimcmg::Model::CDSCDN2)
311  .setDescription("NFIN dependence of CDSCD");
312  p.addPar("CDSCDR", 0.0, &ADMSbsimcmg::Model::CDSCDR)
313  .setDescription("Reverse-mode drain-bais sensitivity of CDSC (Experimental)");
314  p.addPar("CDSCDRN1", 0.0, &ADMSbsimcmg::Model::CDSCDRN1)
315  .setDescription("NFIN dependence of CDSCD");
316  p.addPar("CDSCDRN2", 0.0, &ADMSbsimcmg::Model::CDSCDRN2)
317  .setDescription("NFIN dependence of CDSCD");
318  p.addPar("DVT0", static_cast<double>(0.0), &ADMSbsimcmg::Model::DVT0)
319  .setDescription("SCE coefficient");
320  p.addPar("DVT1", static_cast<double>(0.60), &ADMSbsimcmg::Model::DVT1)
321  .setDescription("SCE exponent coefficient, after binning should be in (0:inf)");
322  p.addPar("DVT1SS", 0.0, &ADMSbsimcmg::Model::DVT1SS)
323  .setDescription("Subthreshold Swing exponent coefficient, after binning should be in (0:inf)");
324  p.addPar("PHIN", static_cast<double>(0.05), &ADMSbsimcmg::Model::PHIN)
325  .setDescription("Nonuniform vertical doping effect on surface potential, V");
326  p.addPar("ETA0", static_cast<double>(0.60), &ADMSbsimcmg::Model::ETA0)
327  .setDescription("DIBL coefficient");
328  p.addPar("ETA0N1", static_cast<double>(0), &ADMSbsimcmg::Model::ETA0N1)
329  .setDescription("NFIN dependence of ETA0");
330  p.addPar("ETA0N2", static_cast<double>(1.0e5), &ADMSbsimcmg::Model::ETA0N2)
331  .setDescription("NFIN dependence of ETA0");
332  p.addPar("TETA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::TETA0)
333  .setDescription("Temperature dependence of DIBL coefficient, 1/K");
334  p.addPar("ETA0R", 0.0, &ADMSbsimcmg::Model::ETA0R)
335  .setDescription("Reverse-mode DIBL coefficient (Experimental)");
336  p.addPar("TETA0R", 0.0, &ADMSbsimcmg::Model::TETA0R)
337  .setDescription("Temperature dependence of Reverse-mode DIBL coefficient, 1/K");
338  p.addPar("DSUB", static_cast<double>(1.06), &ADMSbsimcmg::Model::DSUB)
339  .setDescription("DIBL exponent coefficient");
340  p.addPar("DVTP0", static_cast<double>(0), &ADMSbsimcmg::Model::DVTP0)
341  .setDescription("Coefficient for Drain-Induced Vth Shift (DITS)");
342  p.addPar("DVTP1", static_cast<double>(0), &ADMSbsimcmg::Model::DVTP1)
343  .setDescription("DITS exponent coefficient");
344  p.addPar("K1RSCE", static_cast<double>(0.0), &ADMSbsimcmg::Model::K1RSCE)
345  .setDescription("K1 for reverse short channel effect calculation ");
346  p.addPar("LPE0", static_cast<double>(5.0*1.0e-9), &ADMSbsimcmg::Model::LPE0)
347  .setDescription("Equivalent length of pocket region at zero bias");
348  p.addPar("DVTSHIFT", static_cast<double>(0), &ADMSbsimcmg::Model::DVTSHIFT)
349  .setDescription("Vth shift handle");
350  p.addPar("K0", static_cast<double>(0.0), &ADMSbsimcmg::Model::K0)
351  .setDescription("Lateral NUD voltage parameter, V");
352  p.addPar("K01", static_cast<double>(0.0), &ADMSbsimcmg::Model::K01)
353  .setDescription("Temperature dependence of lateral NUD voltage parameter, V/K");
354  p.addPar("K0SI", static_cast<double>(1.0), &ADMSbsimcmg::Model::K0SI)
355  .setDescription("Correction factor for strong inversion, used in Mnud, after binnig should be from (0:inf)");
356  p.addPar("K0SI1", static_cast<double>(0.0), &ADMSbsimcmg::Model::K0SI1)
357  .setDescription("Temperature dependence of K0SI, 1/K");
358  p.addPar("K1SI", 0.0, &ADMSbsimcmg::Model::K1SI)
359  .setDescription("Correction factor for strong inversion, used in Mob");
360  p.addPar("K1SI1", 0.0, &ADMSbsimcmg::Model::K1SI1)
361  .setDescription("Temperature dependence of K1SI, 1/K");
362  p.addPar("PHIBE", static_cast<double>(0.7), &ADMSbsimcmg::Model::PHIBE)
363  .setDescription("Body effect voltage parameter, V, after binnig should be from [0.2:1.2]");
364  p.addPar("K1", static_cast<double>(0.0), &ADMSbsimcmg::Model::K1)
365  .setDescription("Body effect coefficient for sub-threshold region");
366  p.addPar("K11", static_cast<double>(0.0), &ADMSbsimcmg::Model::K11)
367  .setDescription("Temperature dependence of K1");
368  p.addPar("K1SAT", static_cast<double>(0.0), &ADMSbsimcmg::Model::K1SAT)
369  .setDescription("Correction factor for K1 in saturation (high Vds) ");
370  p.addPar("K1SAT1", static_cast<double>(0.0), &ADMSbsimcmg::Model::K1SAT1)
371  .setDescription("Temperature dependence of K1SAT1 ");
372  p.addPar("QMFACTOR", static_cast<double>(0.0), &ADMSbsimcmg::Model::QMFACTOR)
373  .setDescription("Prefactor + switch for QM Vth correction");
374  p.addPar("QMTCENIV", static_cast<double>(0.0), &ADMSbsimcmg::Model::QMTCENIV)
375  .setDescription("Prefactor + switch for QM Width correction for IV");
376  p.addPar("QMTCENCV", static_cast<double>(0.0), &ADMSbsimcmg::Model::QMTCENCV)
377  .setDescription("Prefactor + switch for QM Width and Toxeff correction for CV");
378  p.addPar("QMTCENCVA", static_cast<double>(0.0), &ADMSbsimcmg::Model::QMTCENCVA)
379  .setDescription("Prefactor + switch for QM Width and Toxeff correction for CV (accumulation region)");
380  p.addPar("AQMTCEN", static_cast<double>(0.0), &ADMSbsimcmg::Model::AQMTCEN)
381  .setDescription("Parameter for Geometric dependence of Tcen on R/TFIN/HFIN");
382  p.addPar("BQMTCEN", static_cast<double>(12.0e-9), &ADMSbsimcmg::Model::BQMTCEN)
383  .setDescription("Parameter for Geometric dependence of Tcen on R/TFIN/HFIN");
384  p.addPar("ETAQM", static_cast<double>(0.54), &ADMSbsimcmg::Model::ETAQM)
385  .setDescription("Bulk charge coefficient for Tcen");
386  p.addPar("QM0", static_cast<double>(1.00e-3), &ADMSbsimcmg::Model::QM0)
387  .setDescription("Knee-Point for Tcen in inversion (Charge normalized to Cox)");
388  p.addPar("PQM", static_cast<double>(0.66), &ADMSbsimcmg::Model::PQM)
389  .setDescription("Slope of normalized Tcen in inversion");
390  p.addPar("QM0ACC", static_cast<double>(1.00e-3), &ADMSbsimcmg::Model::QM0ACC)
391  .setDescription("Knee-Point for Tcen in accumulation (Charge normalized to Cox)");
392  p.addPar("PQMACC", static_cast<double>(0.66), &ADMSbsimcmg::Model::PQMACC)
393  .setDescription("Slope of normalized Tcen in accumulation");
394  p.addPar("VSAT", static_cast<double>(85000), &ADMSbsimcmg::Model::VSAT);
395  p.addPar("VSATN1", static_cast<double>(0), &ADMSbsimcmg::Model::VSATN1)
396  .setDescription("NFIN dependence of VSAT ");
397  p.addPar("VSATN2", static_cast<double>(1.0e5), &ADMSbsimcmg::Model::VSATN2)
398  .setDescription("NFIN dependence of VSAT ");
399  p.addPar("AVSAT", static_cast<double>(0.0), &ADMSbsimcmg::Model::AVSAT);
400  p.addPar("BVSAT", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BVSAT);
401  p.addPar("VSAT1", 0.0, &ADMSbsimcmg::Model::VSAT1)
402  .setDescription("Velocity Saturation parameter for I_on degradation - forward mode");
403  p.addPar("VSAT1N1", 0.0, &ADMSbsimcmg::Model::VSAT1N1)
404  .setDescription("NFIN dependence of VSAT1 ");
405  p.addPar("VSAT1N2", 0.0, &ADMSbsimcmg::Model::VSAT1N2)
406  .setDescription("NFIN dependence of VSAT1 ");
407  p.addPar("VSAT1R", 0.0, &ADMSbsimcmg::Model::VSAT1R)
408  .setDescription("Velocity Saturation parameter for I_on degradation - reverse mode");
409  p.addPar("VSAT1RN1", 0.0, &ADMSbsimcmg::Model::VSAT1RN1)
410  .setDescription("NFIN dependence of VSAT1R ");
411  p.addPar("VSAT1RN2", 0.0, &ADMSbsimcmg::Model::VSAT1RN2)
412  .setDescription("NFIN dependence of VSAT1R ");
413  p.addPar("AVSAT1", 0.0, &ADMSbsimcmg::Model::AVSAT1);
414  p.addPar("BVSAT1", 0.0, &ADMSbsimcmg::Model::BVSAT1);
415  p.addPar("DELTAVSAT", static_cast<double>(1.0), &ADMSbsimcmg::Model::DELTAVSAT);
416  p.addPar("PSAT", static_cast<double>(2.0), &ADMSbsimcmg::Model::PSAT)
417  .setDescription("Velocity saturation exponent, after binnig should be from [2.0:inf)");
418  p.addPar("APSAT", static_cast<double>(0.0), &ADMSbsimcmg::Model::APSAT);
419  p.addPar("BPSAT", static_cast<double>(1.0), &ADMSbsimcmg::Model::BPSAT);
420  p.addPar("KSATIV", static_cast<double>(1.0), &ADMSbsimcmg::Model::KSATIV);
421  p.addPar("VSATCV", 0.0, &ADMSbsimcmg::Model::VSATCV)
422  .setDescription("Velocity Saturation parameter for CV");
423  p.addPar("AVSATCV", 0.0, &ADMSbsimcmg::Model::AVSATCV);
424  p.addPar("BVSATCV", 0.0, &ADMSbsimcmg::Model::BVSATCV);
425  p.addPar("DELTAVSATCV", 0.0, &ADMSbsimcmg::Model::DELTAVSATCV);
426  p.addPar("PSATCV", 0.0, &ADMSbsimcmg::Model::PSATCV)
427  .setDescription("Velocity saturation exponent for C-V");
428  p.addPar("APSATCV", 0.0, &ADMSbsimcmg::Model::APSATCV);
429  p.addPar("BPSATCV", 0.0, &ADMSbsimcmg::Model::BPSATCV);
430  p.addPar("MEXP", static_cast<double>(4.0), &ADMSbsimcmg::Model::MEXP);
431  p.addPar("AMEXP", static_cast<double>(0.0), &ADMSbsimcmg::Model::AMEXP);
432  p.addPar("BMEXP", static_cast<double>(1.0), &ADMSbsimcmg::Model::BMEXP);
433  p.addPar("MEXPR", 0.0, &ADMSbsimcmg::Model::MEXPR);
434  p.addPar("AMEXPR", 0.0, &ADMSbsimcmg::Model::AMEXPR);
435  p.addPar("BMEXPR", 0.0, &ADMSbsimcmg::Model::BMEXPR);
436  p.addPar("PTWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::PTWG)
437  .setDescription("Gmsat degradation parameter - forward mode ");
438  p.addPar("PTWGR", 0.0, &ADMSbsimcmg::Model::PTWGR)
439  .setDescription("Gmsat degradation parameter - reverse mode");
440  p.addPar("APTWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::APTWG);
441  p.addPar("BPTWG", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BPTWG);
442  p.addPar("AT", static_cast<double>((-1.56e-3)), &ADMSbsimcmg::Model::AT);
443  p.addPar("TMEXP", static_cast<double>(0.0), &ADMSbsimcmg::Model::TMEXP);
444  p.addPar("TMEXPR", 0.0, &ADMSbsimcmg::Model::TMEXPR);
445  p.addPar("PTWGT", static_cast<double>(0.004), &ADMSbsimcmg::Model::PTWGT);
446  p.addPar("U0", static_cast<double>(0.03), &ADMSbsimcmg::Model::U0);
447  p.addPar("U0N1", static_cast<double>(0), &ADMSbsimcmg::Model::U0N1)
448  .setDescription("NFIN dependence of U0 ");
449  p.addPar("U0N2", static_cast<double>(1.0e5), &ADMSbsimcmg::Model::U0N2)
450  .setDescription("NFIN dependence of U0 ");
451  p.addPar("ETAMOB", static_cast<double>(2.0), &ADMSbsimcmg::Model::ETAMOB);
452  p.addPar("UP", static_cast<double>(0), &ADMSbsimcmg::Model::UP);
453  p.addPar("LPA", static_cast<double>(1.0), &ADMSbsimcmg::Model::LPA);
454  p.addPar("UA", static_cast<double>(0.3), &ADMSbsimcmg::Model::UA);
455  p.addPar("AUA", static_cast<double>(0.0), &ADMSbsimcmg::Model::AUA);
456  p.addPar("BUA", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BUA);
457  p.addPar("UC", static_cast<double>(0.0), &ADMSbsimcmg::Model::UC)
458  .setDescription("Body effect for mobility degradation parameter - BULKMOD=1");
459  p.addPar("EU", static_cast<double>(2.5), &ADMSbsimcmg::Model::EU);
460  p.addPar("AEU", static_cast<double>(0.0), &ADMSbsimcmg::Model::AEU);
461  p.addPar("BEU", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BEU);
462  p.addPar("UD", static_cast<double>(0.0), &ADMSbsimcmg::Model::UD);
463  p.addPar("AUD", static_cast<double>(0.0), &ADMSbsimcmg::Model::AUD);
464  p.addPar("BUD", static_cast<double>(50.0e-9), &ADMSbsimcmg::Model::BUD);
465  p.addPar("UCS", static_cast<double>(1.0), &ADMSbsimcmg::Model::UCS);
466  p.addPar("UTE", static_cast<double>(0.0), &ADMSbsimcmg::Model::UTE);
467  p.addPar("UTL", static_cast<double>((-1.5e-3)), &ADMSbsimcmg::Model::UTL);
468  p.addPar("EMOBT", static_cast<double>(0.0), &ADMSbsimcmg::Model::EMOBT);
469  p.addPar("UA1", static_cast<double>(1.032e-3), &ADMSbsimcmg::Model::UA1);
470  p.addPar("UC1", static_cast<double>(0.056e-9), &ADMSbsimcmg::Model::UC1);
471  p.addPar("UD1", static_cast<double>(0.0), &ADMSbsimcmg::Model::UD1);
472  p.addPar("UCSTE", static_cast<double>((-4.775e-3)), &ADMSbsimcmg::Model::UCSTE);
473  p.addPar("CHARGEWF", static_cast<double>(0), &ADMSbsimcmg::Model::CHARGEWF)
474  .setDescription("Average Channel Charge Weighting Factor, +1:source-side, 0:middle, -1:drain-side ");
475  p.addPar("RDSWMIN", static_cast<double>(0.0), &ADMSbsimcmg::Model::RDSWMIN);
476  p.addPar("RDSW", static_cast<double>(100.0), &ADMSbsimcmg::Model::RDSW);
477  p.addPar("ARDSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::ARDSW);
478  p.addPar("BRDSW", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BRDSW);
479  p.addPar("RSWMIN", static_cast<double>(0.0), &ADMSbsimcmg::Model::RSWMIN);
480  p.addPar("RSW", static_cast<double>(50.0), &ADMSbsimcmg::Model::RSW);
481  p.addPar("ARSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::ARSW);
482  p.addPar("BRSW", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BRSW);
483  p.addPar("RDWMIN", static_cast<double>(0.0), &ADMSbsimcmg::Model::RDWMIN);
484  p.addPar("RDW", static_cast<double>(50.0), &ADMSbsimcmg::Model::RDW);
485  p.addPar("ARDW", static_cast<double>(0.0), &ADMSbsimcmg::Model::ARDW);
486  p.addPar("BRDW", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BRDW);
487  p.addPar("RSDR", static_cast<double>(0.0), &ADMSbsimcmg::Model::RSDR)
488  .setDescription("Source side drift resistance parameter - forward mode");
489  p.addPar("RSDRR", 0.0, &ADMSbsimcmg::Model::RSDRR)
490  .setDescription("Source side drift resistance parameter - reverse mode");
491  p.addPar("RDDR", 0.0, &ADMSbsimcmg::Model::RDDR)
492  .setDescription("Drain side drift resistance parameter - forward mode");
493  p.addPar("RDDRR", 0.0, &ADMSbsimcmg::Model::RDDRR)
494  .setDescription("Drain side drift resistance parameter - reverse mode");
495  p.addPar("PRSDR", static_cast<double>(1.0), &ADMSbsimcmg::Model::PRSDR)
496  .setDescription("Source side quasi-saturation parameter");
497  p.addPar("PRDDR", 0.0, &ADMSbsimcmg::Model::PRDDR)
498  .setDescription("Drain side quasi-saturation parameter");
499  p.addPar("PRWGS", static_cast<double>(0.0), &ADMSbsimcmg::Model::PRWGS)
500  .setUnit(U_VOLTM1)
501 
502  .setDescription("Gate bias dependence of source extension resistance");
503  p.addPar("PRWGD", 0.0, &ADMSbsimcmg::Model::PRWGD)
504  .setUnit(U_VOLTM1)
505 
506  .setDescription("Gate bias dependence of drain extension resistance");
507  p.addPar("WR", static_cast<double>(1.0), &ADMSbsimcmg::Model::WR);
508  p.addPar("PRT", static_cast<double>(0.001), &ADMSbsimcmg::Model::PRT);
509  p.addPar("TRSDR", static_cast<double>(0.0), &ADMSbsimcmg::Model::TRSDR);
510  p.addPar("TRDDR", 0.0, &ADMSbsimcmg::Model::TRDDR);
511  p.addPar("PDIBL1", static_cast<double>(1.30), &ADMSbsimcmg::Model::PDIBL1)
512  .setDescription("DIBL Output Conductance parameter - forward mode");
513  p.addPar("PDIBL1R", 0.0, &ADMSbsimcmg::Model::PDIBL1R)
514  .setDescription("DIBL Output Conductance parameter - reverse mode ");
515  p.addPar("PDIBL2", static_cast<double>(2.0e-4), &ADMSbsimcmg::Model::PDIBL2)
516  .setDescription("DIBL Output Conductance parameter ");
517  p.addPar("DROUT", static_cast<double>(1.06), &ADMSbsimcmg::Model::DROUT);
518  p.addPar("PVAG", static_cast<double>(1.0), &ADMSbsimcmg::Model::PVAG);
519  p.addPar("PCLM", static_cast<double>(0.013), &ADMSbsimcmg::Model::PCLM);
520  p.addPar("APCLM", static_cast<double>(0.0), &ADMSbsimcmg::Model::APCLM);
521  p.addPar("BPCLM", static_cast<double>(100.0e-9), &ADMSbsimcmg::Model::BPCLM);
522  p.addPar("PCLMG", static_cast<double>(0.0), &ADMSbsimcmg::Model::PCLMG);
523  p.addPar("PCLMCV", 0.0, &ADMSbsimcmg::Model::PCLMCV)
524  .setDescription("CLM parameter for Short Channel CV ");
525  p.addPar("A1", static_cast<double>(0.0), &ADMSbsimcmg::Model::A1)
526  .setDescription("Non-saturation effect parameter for strong inversion region");
527  p.addPar("A11", static_cast<double>(0.0), &ADMSbsimcmg::Model::A11)
528  .setDescription("Temperature dependence of A1");
529  p.addPar("A2", static_cast<double>(0.0), &ADMSbsimcmg::Model::A2)
530  .setDescription("Non-saturation effect parameter for moderate inversion region");
531  p.addPar("A21", static_cast<double>(0.0), &ADMSbsimcmg::Model::A21)
532  .setDescription("Temperature dependence of A2");
533  p.addPar("RGEXT", static_cast<double>(0.0), &ADMSbsimcmg::Model::RGEXT)
534  .setDescription("Effective gate electrode external resistance");
535  p.addPar("RGFIN", static_cast<double>(1.0e-3), &ADMSbsimcmg::Model::RGFIN)
536  .setDescription("Effective gate electrode per finger per fin resistance");
537  p.addPar("RSHS", static_cast<double>(0.0), &ADMSbsimcmg::Model::RSHS)
538  .setDescription("Source-side sheet resistance");
539  p.addPar("RSHD", 0.0, &ADMSbsimcmg::Model::RSHD)
540  .setDescription("Drain-side sheet resistance");
541  p.addPar("HEPI", static_cast<double>(10.0*1.0e-9), &ADMSbsimcmg::Model::HEPI)
542  .setDescription("Height of the raised source/drain on top of the fin");
543  p.addPar("TSILI", static_cast<double>(10.0*1.0e-9), &ADMSbsimcmg::Model::TSILI)
544  .setDescription("Thickness of the silicide on top of the raised source/drain");
545  p.addPar("RHOC", static_cast<double>(1.0e-12), &ADMSbsimcmg::Model::RHOC);
546  p.addPar("RHORSD", static_cast<double>(1.0), &ADMSbsimcmg::Model::RHORSD);
547  p.addPar("CRATIO", static_cast<double>(0.5), &ADMSbsimcmg::Model::CRATIO);
548  p.addPar("DELTAPRSD", static_cast<double>(0.0), &ADMSbsimcmg::Model::DELTAPRSD);
549  p.addPar("SDTERM", static_cast<int>(0), &ADMSbsimcmg::Model::SDTERM);
550  p.addPar("LSP", 0.0, &ADMSbsimcmg::Model::LSP);
551  p.addPar("EPSRSP", static_cast<double>(3.9), &ADMSbsimcmg::Model::EPSRSP)
552  .setDescription("Relative dielectric constant of the spacer");
553  p.addPar("TGATE", static_cast<double>(30.0*1.0e-9), &ADMSbsimcmg::Model::TGATE)
554  .setDescription("Gate height on top of the hard mask");
555  p.addPar("TMASK", static_cast<double>(30.0*1.0e-9), &ADMSbsimcmg::Model::TMASK)
556  .setDescription("Height of hard mask on top of the fin");
557  p.addPar("ASILIEND", static_cast<double>(0.0), &ADMSbsimcmg::Model::ASILIEND);
558  p.addPar("ARSDEND", static_cast<double>(0.0), &ADMSbsimcmg::Model::ARSDEND);
559  p.addPar("PRSDEND", static_cast<double>(0.0), &ADMSbsimcmg::Model::PRSDEND);
560  p.addPar("NSDE", static_cast<double>(2e25), &ADMSbsimcmg::Model::NSDE)
561  .setDescription("Source/drain active doping concentration at Leff edge");
562  p.addPar("RGEOA", static_cast<double>(1.0), &ADMSbsimcmg::Model::RGEOA)
563  .setDescription("Fitting parameter for RGEOMOD=1");
564  p.addPar("RGEOB", static_cast<double>(0.0), &ADMSbsimcmg::Model::RGEOB)
565  .setDescription("Fitting parameter for RGEOMOD=1");
566  p.addPar("RGEOC", static_cast<double>(0.0), &ADMSbsimcmg::Model::RGEOC)
567  .setDescription("Fitting parameter for RGEOMOD=1");
568  p.addPar("RGEOD", static_cast<double>(0.0), &ADMSbsimcmg::Model::RGEOD)
569  .setDescription("Fitting parameter for RGEOMOD=1");
570  p.addPar("RGEOE", static_cast<double>(0.0), &ADMSbsimcmg::Model::RGEOE)
571  .setDescription("Fitting parameter for RGEOMOD=1");
572  p.addPar("CGEOA", static_cast<double>(1.0), &ADMSbsimcmg::Model::CGEOA)
573  .setDescription("Fitting parameter for CGEOMOD=2");
574  p.addPar("CGEOB", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGEOB)
575  .setDescription("Fitting parameter for CGEOMOD=2");
576  p.addPar("CGEOC", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGEOC)
577  .setDescription("Fitting parameter for CGEOMOD=2");
578  p.addPar("CGEOD", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGEOD)
579  .setDescription("Fitting parameter for CGEOMOD=2");
580  p.addPar("CGEOE", static_cast<double>(1.0), &ADMSbsimcmg::Model::CGEOE)
581  .setDescription("Fitting parameter for CGEOMOD=2");
582  p.addPar("AIGBINV", static_cast<double>(1.11e-2), &ADMSbsimcmg::Model::AIGBINV)
583  .setDescription("parameter for Igb in inversion");
584  p.addPar("AIGBINV1", static_cast<double>(0), &ADMSbsimcmg::Model::AIGBINV1)
585  .setDescription("parameter for Igb in inversion");
586  p.addPar("BIGBINV", static_cast<double>(9.49e-4), &ADMSbsimcmg::Model::BIGBINV)
587  .setDescription("parameter for Igb in inversion");
588  p.addPar("CIGBINV", static_cast<double>(6.00e-3), &ADMSbsimcmg::Model::CIGBINV)
589  .setDescription("parameter for Igb in inversion");
590  p.addPar("EIGBINV", static_cast<double>(1.1), &ADMSbsimcmg::Model::EIGBINV)
591  .setDescription("parameter for Igb in inversion");
592  p.addPar("NIGBINV", static_cast<double>(3.0), &ADMSbsimcmg::Model::NIGBINV)
593  .setDescription("parameter for Igb in inversion");
594  p.addPar("AIGBACC", static_cast<double>(1.36e-2), &ADMSbsimcmg::Model::AIGBACC)
595  .setDescription("parameter for Igb in accumulation");
596  p.addPar("AIGBACC1", static_cast<double>(0), &ADMSbsimcmg::Model::AIGBACC1)
597  .setDescription("parameter for Igb in accumulation");
598  p.addPar("BIGBACC", static_cast<double>(1.71e-3), &ADMSbsimcmg::Model::BIGBACC)
599  .setDescription("parameter for Igb in accumulation");
600  p.addPar("CIGBACC", static_cast<double>(7.5e-2), &ADMSbsimcmg::Model::CIGBACC)
601  .setDescription("parameter for Igb in accumulation");
602  p.addPar("NIGBACC", static_cast<double>(1.0), &ADMSbsimcmg::Model::NIGBACC)
603  .setDescription("parameter for Igb in accumulation");
604  p.addPar("AIGC", static_cast<double>(1.36e-2), &ADMSbsimcmg::Model::AIGC)
605  .setDescription("parameter for Igc in inversion");
606  p.addPar("AIGC1", static_cast<double>(0), &ADMSbsimcmg::Model::AIGC1)
607  .setDescription("parameter for Igc in inversion");
608  p.addPar("BIGC", static_cast<double>(1.71e-3), &ADMSbsimcmg::Model::BIGC)
609  .setDescription("parameter for Igc in inversion");
610  p.addPar("CIGC", static_cast<double>(0.075), &ADMSbsimcmg::Model::CIGC)
611  .setDescription("parameter for Igc in inversion");
612  p.addPar("PIGCD", static_cast<double>(1.0), &ADMSbsimcmg::Model::PIGCD)
613  .setDescription("parameter for Igc partition");
614  p.addPar("DLCIGS", static_cast<double>(0), &ADMSbsimcmg::Model::DLCIGS)
615  .setDescription("Delta L for Igs model");
616  p.addPar("AIGS", static_cast<double>(1.36e-2), &ADMSbsimcmg::Model::AIGS)
617  .setDescription("parameter for Igs in inversion");
618  p.addPar("AIGS1", static_cast<double>(0), &ADMSbsimcmg::Model::AIGS1)
619  .setDescription("parameter for Igs in inversion");
620  p.addPar("BIGS", static_cast<double>(1.71e-3), &ADMSbsimcmg::Model::BIGS)
621  .setDescription("parameter for Igs in inversion");
622  p.addPar("CIGS", static_cast<double>(0.075), &ADMSbsimcmg::Model::CIGS)
623  .setDescription("parameter for Igs in inversion");
624  p.addPar("DLCIGD", 0.0, &ADMSbsimcmg::Model::DLCIGD)
625  .setDescription("Delta L for Igd model");
626  p.addPar("AIGD", 0.0, &ADMSbsimcmg::Model::AIGD)
627  .setDescription("parameter for Igd in inversion");
628  p.addPar("AIGD1", 0.0, &ADMSbsimcmg::Model::AIGD1)
629  .setDescription("parameter for Igd in inversion");
630  p.addPar("BIGD", 0.0, &ADMSbsimcmg::Model::BIGD)
631  .setDescription("parameter for Igd in inversion");
632  p.addPar("CIGD", 0.0, &ADMSbsimcmg::Model::CIGD)
633  .setDescription("parameter for Igd in inversion");
634  p.addPar("TOXREF", static_cast<double>(1.2*1.0e-9), &ADMSbsimcmg::Model::TOXREF)
635  .setDescription("Target tox value [m]");
636  p.addPar("TOXG", 0.0, &ADMSbsimcmg::Model::TOXG)
637  .setUnit(U_METER)
638 
639  .setDescription("oxide thickness for gate current model in meters, Introduced in BSIM-CMG106.1.0");
640  p.addPar("NTOX", static_cast<double>(1.0), &ADMSbsimcmg::Model::NTOX)
641  .setDescription("Exponent for Tox ratio");
642  p.addPar("POXEDGE", static_cast<double>(1.0), &ADMSbsimcmg::Model::POXEDGE)
643  .setDescription("Factor for the gate edge Tox");
644  p.addPar("AGISL", static_cast<double>(6.055*1.0e-12), &ADMSbsimcmg::Model::AGISL)
645  .setDescription("pre-exponential coeff. for GISL in mho");
646  p.addPar("BGISL", static_cast<double>(0.3e9), &ADMSbsimcmg::Model::BGISL)
647  .setUnit(U_VMM1)
648 
649  .setDescription("exponential coeff. for GISL");
650  p.addPar("CGISL", static_cast<double>(0.5), &ADMSbsimcmg::Model::CGISL)
651  .setUnit(U_VOLT3)
652 
653  .setDescription("parameter for body-effect of GISL");
654  p.addPar("EGISL", static_cast<double>(0.2), &ADMSbsimcmg::Model::EGISL)
655  .setUnit(U_VOLT)
656 
657  .setDescription("band bending parameter for GISL");
658  p.addPar("PGISL", static_cast<double>(1.0), &ADMSbsimcmg::Model::PGISL)
659  .setDescription("parameter for body-bias effect on GISL");
660  p.addPar("AGIDL", 0.0, &ADMSbsimcmg::Model::AGIDL)
661  .setDescription("pre-exponential coeff. for GIDL in mho");
662  p.addPar("BGIDL", 0.0, &ADMSbsimcmg::Model::BGIDL)
663  .setUnit(U_VMM1)
664 
665  .setDescription("exponential coeff. for GIDL");
666  p.addPar("CGIDL", 0.0, &ADMSbsimcmg::Model::CGIDL)
667  .setUnit(U_VOLT3)
668 
669  .setDescription("parameter for body-effect of GIDL");
670  p.addPar("EGIDL", 0.0, &ADMSbsimcmg::Model::EGIDL)
671  .setUnit(U_VOLT)
672 
673  .setDescription("band bending parameter for GIDL");
674  p.addPar("PGIDL", 0.0, &ADMSbsimcmg::Model::PGIDL)
675  .setDescription("parameter for body-bias effect on GIDL");
676  p.addPar("ALPHA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHA0)
677  .setUnit(U_MVM1)
678 
679  .setDescription("first parameter of Iii");
680  p.addPar("ALPHA01", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHA01)
681  .setDescription("Temperature dependence of ALPHA0, m/V/degrees");
682  p.addPar("ALPHA1", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHA1)
683  .setUnit(U_VOLTM1)
684 
685  .setDescription("L scaling parameter of Iii");
686  p.addPar("ALPHA11", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHA11)
687  .setDescription("Temperature dependence ALPHA1, 1/V/degree");
688  p.addPar("BETA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::BETA0)
689  .setUnit(U_VOLTM1)
690 
691  .setDescription("Vds dependent parameter of Iii");
692  p.addPar("ALPHAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHAII0)
693  .setDescription("first parameter of Iii for IIMOD=2, m/V ");
694  p.addPar("ALPHAII01", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHAII01)
695  .setDescription("Temperature dependence of ALPHAII0, m/V/degrees");
696  p.addPar("ALPHAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHAII1)
697  .setUnit(U_VOLTM1)
698 
699  .setDescription("L scaling parameter of Iii for IIMOD=2");
700  p.addPar("ALPHAII11", static_cast<double>(0.0), &ADMSbsimcmg::Model::ALPHAII11)
701  .setDescription("Temperature dependence of ALPHAII1, 1/V/degrees");
702  p.addPar("BETAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::BETAII0)
703  .setUnit(U_VOLTM1)
704 
705  .setDescription("Vds dependent parameter of Iii");
706  p.addPar("BETAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::BETAII1)
707  .setDescription("Vds dependent parameter of Iii");
708  p.addPar("BETAII2", static_cast<double>(0.1), &ADMSbsimcmg::Model::BETAII2)
709  .setDescription("Vds dependent parameter of Iii, V");
710  p.addPar("ESATII", static_cast<double>(1.0e7), &ADMSbsimcmg::Model::ESATII)
711  .setUnit(U_VMM1)
712 
713  .setDescription("Saturation channel E-Field for Iii");
714  p.addPar("LII", static_cast<double>(0.5E-9), &ADMSbsimcmg::Model::LII)
715  .setUnit(U_VM)
716 
717  .setDescription("Channel length dependent parameter of Iii");
718  p.addPar("SII0", static_cast<double>(0.5), &ADMSbsimcmg::Model::SII0)
719  .setUnit(U_VOLTM1)
720 
721  .setDescription("Vgs dependent parameter of Iii");
722  p.addPar("SII1", static_cast<double>(0.1), &ADMSbsimcmg::Model::SII1)
723  .setUnit(U_VOLTM1)
724 
725  .setDescription("1st Vgs dependent parameter of Iii");
726  p.addPar("SII2", static_cast<double>(0.0), &ADMSbsimcmg::Model::SII2)
727  .setDescription("2nd Vgs dependent parameter of Iii");
728  p.addPar("SIID", static_cast<double>(0.0), &ADMSbsimcmg::Model::SIID)
729  .setUnit(U_VOLTM1)
730 
731  .setDescription("3rd Vds dependent parameter of Iii");
732  p.addPar("EOTACC", 0.0, &ADMSbsimcmg::Model::EOTACC)
733  .setUnit(U_METER)
734 
735  .setDescription("equivalent oxide thickness for accumulation region in meters");
736  p.addPar("DELVFBACC", static_cast<double>(0.0), &ADMSbsimcmg::Model::DELVFBACC)
737  .setDescription("Change in Flatband Voltage; Vfb_accumulation-Vfb_inversion");
738  p.addPar("CFS", static_cast<double>(2.5e-11), &ADMSbsimcmg::Model::CFS)
739  .setDescription("Outer Fringe Cap (source side)");
740  p.addPar("CFD", 0.0, &ADMSbsimcmg::Model::CFD)
741  .setDescription("Outer Fringe Cap (drain side)");
742  p.addPar("CGSO", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGSO)
743  .setDescription("Non LDD region source-gate overlap capacitance per unit channel width");
744  p.addPar("CGDO", 0.0, &ADMSbsimcmg::Model::CGDO)
745  .setDescription("Non LDD region drain-gate overlap capacitance per unit channel width");
746  p.addPar("CGSL", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGSL);
747  p.addPar("CGDL", 0.0, &ADMSbsimcmg::Model::CGDL);
748  p.addPar("CKAPPAS", static_cast<double>(0.6), &ADMSbsimcmg::Model::CKAPPAS);
749  p.addPar("CKAPPAD", 0.0, &ADMSbsimcmg::Model::CKAPPAD);
750  p.addPar("CGBO", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGBO)
751  .setDescription("Gate to substrate overlap cap per unit channel length per finger per NGCON ");
752  p.addPar("CGBN", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGBN)
753  .setDescription("Gate to substrate overlap cap per unit channel length per fin per finger");
754  p.addPar("CGBL", static_cast<double>(0.0), &ADMSbsimcmg::Model::CGBL)
755  .setDescription("Bias dependent component of Gate to substrate overlap cap ");
756  p.addPar("CKAPPAB", static_cast<double>(0.6), &ADMSbsimcmg::Model::CKAPPAB);
757  p.addPar("CSDESW", static_cast<double>(0.0), &ADMSbsimcmg::Model::CSDESW)
758  .setDescription("Coefficient for source/drain to substrate sidewall cap");
759  p.addPar("CJS", static_cast<double>(5.0e-4), &ADMSbsimcmg::Model::CJS)
760  .setDescription("Unit area source-side junction capacitance at zero bias");
761  p.addPar("CJD", 0.0, &ADMSbsimcmg::Model::CJD)
762  .setDescription("Unit area drain-side junction capacitance at zero bias");
763  p.addPar("CJSWS", static_cast<double>(5.0e-10), &ADMSbsimcmg::Model::CJSWS)
764  .setDescription("Unit length source-side sidewall junction capacitance at zero bias");
765  p.addPar("CJSWD", 0.0, &ADMSbsimcmg::Model::CJSWD)
766  .setDescription("Unit length drain-side sidewall junction capacitance at zero bias");
767  p.addPar("CJSWGS", static_cast<double>(0.0), &ADMSbsimcmg::Model::CJSWGS)
768  .setDescription("Unit length source-side gate sidewall junction capacitance at zero bias");
769  p.addPar("CJSWGD", 0.0, &ADMSbsimcmg::Model::CJSWGD)
770  .setDescription("Unit length drain-side gate sidewall junction capacitance at zero bias");
771  p.addPar("PBS", static_cast<double>(1.0), &ADMSbsimcmg::Model::PBS)
772  .setDescription("Source-side bulk junction built-in potential");
773  p.addPar("PBD", 0.0, &ADMSbsimcmg::Model::PBD)
774  .setDescription("Drain-side bulk junction built-in potential");
775  p.addPar("PBSWS", static_cast<double>(1.0), &ADMSbsimcmg::Model::PBSWS)
776  .setDescription("Built-in potential for Source-side sidewall junction capacitance");
777  p.addPar("PBSWD", 0.0, &ADMSbsimcmg::Model::PBSWD)
778  .setDescription("Built-in potential for Drain-side sidewall junction capacitance");
779  p.addPar("PBSWGS", 0.0, &ADMSbsimcmg::Model::PBSWGS)
780  .setDescription("Built-in potential for Source-side gate sidewall junction capacitance");
781  p.addPar("PBSWGD", 0.0, &ADMSbsimcmg::Model::PBSWGD)
782  .setDescription("Built-in potential for Drain-side gate sidewall junction capacitance");
783  p.addPar("MJS", static_cast<double>(0.5), &ADMSbsimcmg::Model::MJS)
784  .setDescription("Source bottom junction capacitance grading coefficient");
785  p.addPar("MJD", 0.0, &ADMSbsimcmg::Model::MJD)
786  .setDescription("Drain bottom junction capacitance grading coefficient");
787  p.addPar("MJSWS", static_cast<double>(0.33), &ADMSbsimcmg::Model::MJSWS)
788  .setDescription("Source sidewall junction capacitance grading coefficient");
789  p.addPar("MJSWD", 0.0, &ADMSbsimcmg::Model::MJSWD)
790  .setDescription("Drain sidewall junction capacitance grading coefficient");
791  p.addPar("MJSWGS", 0.0, &ADMSbsimcmg::Model::MJSWGS)
792  .setDescription("Source-side gate sidewall junction capacitance grading coefficient");
793  p.addPar("MJSWGD", 0.0, &ADMSbsimcmg::Model::MJSWGD)
794  .setDescription("Drain-side gate sidewall junction capacitance grading coefficient");
795  p.addPar("SJS", static_cast<double>(0.0), &ADMSbsimcmg::Model::SJS)
796  .setDescription("Constant for source-side two-step second junction");
797  p.addPar("SJD", 0.0, &ADMSbsimcmg::Model::SJD)
798  .setDescription("Constant for drain-side two-step second junction");
799  p.addPar("SJSWS", static_cast<double>(0.0), &ADMSbsimcmg::Model::SJSWS)
800  .setDescription("Constant for source-side sidewall two-step second junction");
801  p.addPar("SJSWD", 0.0, &ADMSbsimcmg::Model::SJSWD)
802  .setDescription("Constant for drain-side sidewall two-step second junction");
803  p.addPar("SJSWGS", static_cast<double>(0.0), &ADMSbsimcmg::Model::SJSWGS)
804  .setDescription("Constant for source-side gate sidewall two-step second junction");
805  p.addPar("SJSWGD", 0.0, &ADMSbsimcmg::Model::SJSWGD)
806  .setDescription("Constant for source-side gate sidewall two-step second junction");
807  p.addPar("MJS2", static_cast<double>(0.125), &ADMSbsimcmg::Model::MJS2)
808  .setDescription("Source bottom two-step second junction capacitance grading coefficient");
809  p.addPar("MJD2", 0.0, &ADMSbsimcmg::Model::MJD2)
810  .setDescription("Drain bottom two-step second junction capacitance grading coefficient ");
811  p.addPar("MJSWS2", static_cast<double>(0.083), &ADMSbsimcmg::Model::MJSWS2)
812  .setDescription("Source sidewall two-step second junction capacitance grading coefficient");
813  p.addPar("MJSWD2", 0.0, &ADMSbsimcmg::Model::MJSWD2)
814  .setDescription("Drain sidewall two-step second junction capacitance grading coefficient");
815  p.addPar("MJSWGS2", 0.0, &ADMSbsimcmg::Model::MJSWGS2)
816  .setDescription("Source-side gate sidewall two-step");
817  p.addPar("MJSWGD2", 0.0, &ADMSbsimcmg::Model::MJSWGD2)
818  .setDescription("Drain-side gate sidewall two-step");
819  p.addPar("JSS", static_cast<double>(1.0e-4), &ADMSbsimcmg::Model::JSS)
820  .setDescription("Bottom source junction reverse saturation current density");
821  p.addPar("JSD", 0.0, &ADMSbsimcmg::Model::JSD)
822  .setDescription("Bottom drain junction reverse saturation current density");
823  p.addPar("JSWS", static_cast<double>(0.0), &ADMSbsimcmg::Model::JSWS)
824  .setDescription("Unit length reverse saturation current for sidewall source junction");
825  p.addPar("JSWD", 0.0, &ADMSbsimcmg::Model::JSWD)
826  .setDescription("Unit length reverse saturation current for sidewall drain junction");
827  p.addPar("JSWGS", static_cast<double>(0.0), &ADMSbsimcmg::Model::JSWGS)
828  .setDescription("Unit length reverse saturation current for gate-edge sidewall source junction");
829  p.addPar("JSWGD", 0.0, &ADMSbsimcmg::Model::JSWGD)
830  .setDescription("Unit length reverse saturation current for gate-edge sidewall drain junction");
831  p.addPar("NJS", static_cast<double>(1.0), &ADMSbsimcmg::Model::NJS)
832  .setDescription("Source junction emission coefficient");
833  p.addPar("NJD", 0.0, &ADMSbsimcmg::Model::NJD)
834  .setDescription("Drain junction emission coefficient");
835  p.addPar("IJTHSFWD", static_cast<double>(0.1), &ADMSbsimcmg::Model::IJTHSFWD)
836  .setDescription("Forward source diode breakdown limiting current");
837  p.addPar("IJTHDFWD", 0.0, &ADMSbsimcmg::Model::IJTHDFWD)
838  .setDescription("Forward drain diode breakdown limiting current");
839  p.addPar("IJTHSREV", static_cast<double>(0.1), &ADMSbsimcmg::Model::IJTHSREV)
840  .setDescription("Reverse source diode breakdown limiting current");
841  p.addPar("IJTHDREV", 0.0, &ADMSbsimcmg::Model::IJTHDREV)
842  .setDescription("Reverse drain diode breakdown limiting current");
843  p.addPar("BVS", static_cast<double>(10.0), &ADMSbsimcmg::Model::BVS)
844  .setDescription("Source diode breakdown voltage");
845  p.addPar("BVD", 0.0, &ADMSbsimcmg::Model::BVD)
846  .setDescription("Drain diode breakdown voltage");
847  p.addPar("XJBVS", static_cast<double>(1.0), &ADMSbsimcmg::Model::XJBVS)
848  .setDescription("Fitting parameter for source diode breakdown current");
849  p.addPar("XJBVD", 0.0, &ADMSbsimcmg::Model::XJBVD)
850  .setDescription("Fitting parameter for drain diode breakdown current");
851  p.addPar("JTSS", static_cast<double>(0.0), &ADMSbsimcmg::Model::JTSS)
852  .setDescription("Bottom source junction trap-assisted saturation current density");
853  p.addPar("JTSD", 0.0, &ADMSbsimcmg::Model::JTSD)
854  .setDescription("Bottom drain junction trap-assisted saturation current density");
855  p.addPar("JTSSWS", static_cast<double>(0.0), &ADMSbsimcmg::Model::JTSSWS)
856  .setDescription("Unit length trap-assisted saturation current for sidewall source junction");
857  p.addPar("JTSSWD", 0.0, &ADMSbsimcmg::Model::JTSSWD)
858  .setDescription("Unit length trap-assisted saturation current for sidewall drain junction");
859  p.addPar("JTSSWGS", static_cast<double>(0.0), &ADMSbsimcmg::Model::JTSSWGS)
860  .setDescription("Unit length trap-assisted saturation current for gate-edge sidewall source junction");
861  p.addPar("JTSSWGD", 0.0, &ADMSbsimcmg::Model::JTSSWGD)
862  .setDescription("Unit length trap-assisted saturation current for gate-edge sidewall drain junction");
863  p.addPar("JTWEFF", static_cast<double>(0.0), &ADMSbsimcmg::Model::JTWEFF)
864  .setDescription("Trap assisted tunneling current width dependence");
865  p.addPar("NJTS", static_cast<double>(20.0), &ADMSbsimcmg::Model::NJTS)
866  .setDescription("Non-ideality factor for JTSS");
867  p.addPar("NJTSD", 0.0, &ADMSbsimcmg::Model::NJTSD)
868  .setDescription("Non-ideality factor for JTSD");
869  p.addPar("NJTSSW", static_cast<double>(20.0), &ADMSbsimcmg::Model::NJTSSW)
870  .setDescription("Non-ideality factor for JTSSWS");
871  p.addPar("NJTSSWD", 0.0, &ADMSbsimcmg::Model::NJTSSWD)
872  .setDescription("Non-ideality factor for JTSSWD");
873  p.addPar("NJTSSWG", static_cast<double>(20.0), &ADMSbsimcmg::Model::NJTSSWG)
874  .setDescription("Non-ideality factor for JTSSWGS");
875  p.addPar("NJTSSWGD", 0.0, &ADMSbsimcmg::Model::NJTSSWGD)
876  .setDescription("Non-ideality factor for JTSSWGD");
877  p.addPar("VTSS", static_cast<double>(10.0), &ADMSbsimcmg::Model::VTSS)
878  .setDescription("Bottom source junction trap-assisted current voltage dependent parameter");
879  p.addPar("VTSD", 0.0, &ADMSbsimcmg::Model::VTSD)
880  .setDescription("Bottom drain junction trap-assisted current voltage dependent parameter");
881  p.addPar("VTSSWS", static_cast<double>(10.0), &ADMSbsimcmg::Model::VTSSWS)
882  .setDescription("Unit length trap-assisted current voltage dependent parameter for sidewall source junction ");
883  p.addPar("VTSSWD", 0.0, &ADMSbsimcmg::Model::VTSSWD)
884  .setDescription("Unit length trap-assisted current voltage dependent parameter for sidewall drain junction");
885  p.addPar("VTSSWGS", static_cast<double>(10.0), &ADMSbsimcmg::Model::VTSSWGS)
886  .setDescription("Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall source junction");
887  p.addPar("VTSSWGD", 0.0, &ADMSbsimcmg::Model::VTSSWGD)
888  .setDescription("Unit length trap-assisted current voltage dependent parameter for gate-edge sidewall drain junction ");
889  p.addPar("LINTIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::LINTIGEN)
890  .setDescription("Lint for Thermal Generation Current");
891  p.addPar("NTGEN", static_cast<double>(1.0), &ADMSbsimcmg::Model::NTGEN)
892  .setDescription("Thermal Generation Current Parameter");
893  p.addPar("AIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::AIGEN)
894  .setDescription("Thermal Generation Current Parameter");
895  p.addPar("BIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::BIGEN)
896  .setDescription("Thermal Generation Current Parameter");
897  p.addPar("XRCRG1", static_cast<double>(12.0), &ADMSbsimcmg::Model::XRCRG1);
898  p.addPar("XRCRG2", static_cast<double>(1.0), &ADMSbsimcmg::Model::XRCRG2);
899  p.addPar("NSEG", static_cast<int>(4), &ADMSbsimcmg::Model::NSEG)
900  .setDescription("Number of segments for NQSMOD=3 (3,5 and 10 supported)");
901  p.addPar("EF", static_cast<double>(1.0), &ADMSbsimcmg::Model::EF);
902  p.addPar("EM", static_cast<double>(4.1e7), &ADMSbsimcmg::Model::EM);
903  p.addPar("NOIA", static_cast<double>(6.250e+39), &ADMSbsimcmg::Model::NOIA);
904  p.addPar("NOIB", static_cast<double>(3.125e+24), &ADMSbsimcmg::Model::NOIB);
905  p.addPar("NOIC", static_cast<double>(8.750e+07), &ADMSbsimcmg::Model::NOIC);
906  p.addPar("NTNOI", static_cast<double>(1.0), &ADMSbsimcmg::Model::NTNOI);
907  p.addPar("TNOM", static_cast<double>(27.0), &ADMSbsimcmg::Model::TNOM)
908  .setDescription("Temperature at which the model is extracted (degrees)");
909  p.addPar("TBGASUB", static_cast<double>(7.02e-4), &ADMSbsimcmg::Model::TBGASUB)
910  .setDescription("Bandgap Temperature Coefficient (eV / degrees)");
911  p.addPar("TBGBSUB", static_cast<double>(1108.0), &ADMSbsimcmg::Model::TBGBSUB)
912  .setDescription("Bandgap Temperature Coefficient (degrees)");
913  p.addPar("KT1", static_cast<double>(0.0), &ADMSbsimcmg::Model::KT1)
914  .setDescription("Vth Temperature Coefficient (V)");
915  p.addPar("KT1L", static_cast<double>(0.0), &ADMSbsimcmg::Model::KT1L)
916  .setDescription("Vth Temperature L Coefficient (m-V)");
917  p.addPar("TSS", static_cast<double>(0.0), &ADMSbsimcmg::Model::TSS)
918  .setDescription("SSwing Temperature Coefficient (/ degrees)");
919  p.addPar("IIT", static_cast<double>((-0.5)), &ADMSbsimcmg::Model::IIT)
920  .setDescription("Impact Ionization Temperature Dependence, IIMOD=1");
921  p.addPar("TII", static_cast<double>(0.0), &ADMSbsimcmg::Model::TII)
922  .setDescription("Impact Ionization Temperature Dependence, IIMOD=2");
923  p.addPar("TGIDL", static_cast<double>((-0.003)), &ADMSbsimcmg::Model::TGIDL)
924  .setDescription("GIDL/GISL Temperature Dependence");
925  p.addPar("IGT", static_cast<double>(2.5), &ADMSbsimcmg::Model::IGT)
926  .setDescription("Gate Current Temperature Dependence");
927  p.addPar("TCJ", static_cast<double>(0.0), &ADMSbsimcmg::Model::TCJ)
928  .setDescription("Temperature coefficient for CJS/CJD");
929  p.addPar("TCJSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::TCJSW)
930  .setDescription("Temperature coefficient for CJSWS/CJSWD");
931  p.addPar("TCJSWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::TCJSWG)
932  .setDescription("Temperature coefficient for CJSWGS/CJSWGD");
933  p.addPar("TPB", static_cast<double>(0.0), &ADMSbsimcmg::Model::TPB)
934  .setDescription("Temperature coefficient for PBS/PBD");
935  p.addPar("TPBSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::TPBSW)
936  .setDescription("Temperature coefficient for PBSWS/PBSWD");
937  p.addPar("TPBSWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::TPBSWG)
938  .setDescription("Temperature coefficient for PBSWGS/PBSWGD");
939  p.addPar("XTIS", static_cast<double>(3.0), &ADMSbsimcmg::Model::XTIS)
940  .setDescription("Source junction current temperature exponent");
941  p.addPar("XTID", 0.0, &ADMSbsimcmg::Model::XTID)
942  .setDescription("Drain junction current temperature exponent");
943  p.addPar("XTSS", static_cast<double>(0.02), &ADMSbsimcmg::Model::XTSS)
944  .setDescription("Power dependence of JTSS on temperature");
945  p.addPar("XTSD", 0.0, &ADMSbsimcmg::Model::XTSD)
946  .setDescription("Power dependence of JTSD on temperature");
947  p.addPar("XTSSWS", static_cast<double>(0.02), &ADMSbsimcmg::Model::XTSSWS)
948  .setDescription("Power dependence of JTSSWS on temperature");
949  p.addPar("XTSSWD", 0.0, &ADMSbsimcmg::Model::XTSSWD)
950  .setDescription("Power dependence of JTSSWD on temperature");
951  p.addPar("XTSSWGS", static_cast<double>(0.02), &ADMSbsimcmg::Model::XTSSWGS)
952  .setDescription("Power dependence of JTSSWGS on temperature");
953  p.addPar("XTSSWGD", 0.0, &ADMSbsimcmg::Model::XTSSWGD)
954  .setDescription("Power dependence of JTSSWGD on temperature");
955  p.addPar("TNJTS", static_cast<double>(0.0), &ADMSbsimcmg::Model::TNJTS)
956  .setDescription("Temperature coefficient for NJTS");
957  p.addPar("TNJTSD", 0.0, &ADMSbsimcmg::Model::TNJTSD)
958  .setDescription("Temperature coefficient for NJTSD");
959  p.addPar("TNJTSSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::TNJTSSW)
960  .setDescription("Temperature coefficient for NJTSSW");
961  p.addPar("TNJTSSWD", 0.0, &ADMSbsimcmg::Model::TNJTSSWD)
962  .setDescription("NTemperature coefficient for NJTSSWD");
963  p.addPar("TNJTSSWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::TNJTSSWG)
964  .setDescription("Temperature coefficient for NJTSSWG");
965  p.addPar("TNJTSSWGD", 0.0, &ADMSbsimcmg::Model::TNJTSSWGD)
966  .setDescription("Temperature coefficient for NJTSSWGD");
967  p.addPar("RTH0", static_cast<double>(0.01), &ADMSbsimcmg::Model::RTH0)
968  .setDescription("Thermal resistance");
969  p.addPar("CTH0", static_cast<double>(1.0E-05), &ADMSbsimcmg::Model::CTH0)
970  .setDescription("Thermal capacitance");
971  p.addPar("WTH0", static_cast<double>(0.0), &ADMSbsimcmg::Model::WTH0)
972  .setDescription("Width dependence coefficient for Rth and Cth");
973  p.addPar("LNBODY", static_cast<double>(0), &ADMSbsimcmg::Model::LNBODY);
974  p.addPar("NNBODY", static_cast<double>(0), &ADMSbsimcmg::Model::NNBODY);
975  p.addPar("PNBODY", static_cast<double>(0), &ADMSbsimcmg::Model::PNBODY);
976  p.addPar("LPHIG", static_cast<double>(0), &ADMSbsimcmg::Model::LPHIG);
977  p.addPar("NPHIG", static_cast<double>(0), &ADMSbsimcmg::Model::NPHIG);
978  p.addPar("PPHIG", static_cast<double>(0), &ADMSbsimcmg::Model::PPHIG);
979  p.addPar("LNGATE", static_cast<double>(0), &ADMSbsimcmg::Model::LNGATE);
980  p.addPar("NNGATE", static_cast<double>(0), &ADMSbsimcmg::Model::NNGATE);
981  p.addPar("PNGATE", static_cast<double>(0), &ADMSbsimcmg::Model::PNGATE);
982  p.addPar("LCIT", static_cast<double>(0), &ADMSbsimcmg::Model::LCIT);
983  p.addPar("NCIT", static_cast<double>(0), &ADMSbsimcmg::Model::NCIT);
984  p.addPar("PCIT", static_cast<double>(0), &ADMSbsimcmg::Model::PCIT);
985  p.addPar("LCDSC", static_cast<double>(0), &ADMSbsimcmg::Model::LCDSC);
986  p.addPar("NCDSC", static_cast<double>(0), &ADMSbsimcmg::Model::NCDSC);
987  p.addPar("PCDSC", static_cast<double>(0), &ADMSbsimcmg::Model::PCDSC);
988  p.addPar("LCDSCD", static_cast<double>(0), &ADMSbsimcmg::Model::LCDSCD);
989  p.addPar("NCDSCD", static_cast<double>(0), &ADMSbsimcmg::Model::NCDSCD);
990  p.addPar("PCDSCD", static_cast<double>(0), &ADMSbsimcmg::Model::PCDSCD);
991  p.addPar("LCDSCDR", 0.0, &ADMSbsimcmg::Model::LCDSCDR);
992  p.addPar("NCDSCDR", 0.0, &ADMSbsimcmg::Model::NCDSCDR);
993  p.addPar("PCDSCDR", 0.0, &ADMSbsimcmg::Model::PCDSCDR);
994  p.addPar("LDVT0", static_cast<double>(0), &ADMSbsimcmg::Model::LDVT0);
995  p.addPar("NDVT0", static_cast<double>(0), &ADMSbsimcmg::Model::NDVT0);
996  p.addPar("PDVT0", static_cast<double>(0), &ADMSbsimcmg::Model::PDVT0);
997  p.addPar("LDVT1", static_cast<double>(0), &ADMSbsimcmg::Model::LDVT1);
998  p.addPar("NDVT1", static_cast<double>(0), &ADMSbsimcmg::Model::NDVT1);
999  p.addPar("PDVT1", static_cast<double>(0), &ADMSbsimcmg::Model::PDVT1);
1000  p.addPar("LDVT1SS", static_cast<double>(0), &ADMSbsimcmg::Model::LDVT1SS);
1001  p.addPar("NDVT1SS", static_cast<double>(0), &ADMSbsimcmg::Model::NDVT1SS);
1002  p.addPar("PDVT1SS", static_cast<double>(0), &ADMSbsimcmg::Model::PDVT1SS);
1003  p.addPar("LPHIN", static_cast<double>(0), &ADMSbsimcmg::Model::LPHIN);
1004  p.addPar("NPHIN", static_cast<double>(0), &ADMSbsimcmg::Model::NPHIN);
1005  p.addPar("PPHIN", static_cast<double>(0), &ADMSbsimcmg::Model::PPHIN);
1006  p.addPar("LETA0", static_cast<double>(0), &ADMSbsimcmg::Model::LETA0);
1007  p.addPar("NETA0", static_cast<double>(0), &ADMSbsimcmg::Model::NETA0);
1008  p.addPar("PETA0", static_cast<double>(0), &ADMSbsimcmg::Model::PETA0);
1009  p.addPar("LETA0R", 0.0, &ADMSbsimcmg::Model::LETA0R);
1010  p.addPar("NETA0R", 0.0, &ADMSbsimcmg::Model::NETA0R);
1011  p.addPar("PETA0R", 0.0, &ADMSbsimcmg::Model::PETA0R);
1012  p.addPar("LDSUB", static_cast<double>(0), &ADMSbsimcmg::Model::LDSUB);
1013  p.addPar("NDSUB", static_cast<double>(0), &ADMSbsimcmg::Model::NDSUB);
1014  p.addPar("PDSUB", static_cast<double>(0), &ADMSbsimcmg::Model::PDSUB);
1015  p.addPar("LK1RSCE", static_cast<double>(0), &ADMSbsimcmg::Model::LK1RSCE);
1016  p.addPar("NK1RSCE", static_cast<double>(0), &ADMSbsimcmg::Model::NK1RSCE);
1017  p.addPar("PK1RSCE", static_cast<double>(0), &ADMSbsimcmg::Model::PK1RSCE);
1018  p.addPar("LLPE0", static_cast<double>(0), &ADMSbsimcmg::Model::LLPE0);
1019  p.addPar("NLPE0", static_cast<double>(0), &ADMSbsimcmg::Model::NLPE0);
1020  p.addPar("PLPE0", static_cast<double>(0), &ADMSbsimcmg::Model::PLPE0);
1021  p.addPar("LDVTSHIFT", static_cast<double>(0), &ADMSbsimcmg::Model::LDVTSHIFT);
1022  p.addPar("NDVTSHIFT", static_cast<double>(0), &ADMSbsimcmg::Model::NDVTSHIFT);
1023  p.addPar("PDVTSHIFT", static_cast<double>(0), &ADMSbsimcmg::Model::PDVTSHIFT);
1024  p.addPar("LPHIBE", static_cast<double>(0), &ADMSbsimcmg::Model::LPHIBE);
1025  p.addPar("NPHIBE", static_cast<double>(0), &ADMSbsimcmg::Model::NPHIBE);
1026  p.addPar("PPHIBE", static_cast<double>(0), &ADMSbsimcmg::Model::PPHIBE);
1027  p.addPar("LK0", static_cast<double>(0), &ADMSbsimcmg::Model::LK0);
1028  p.addPar("NK0", static_cast<double>(0), &ADMSbsimcmg::Model::NK0);
1029  p.addPar("PK0", static_cast<double>(0), &ADMSbsimcmg::Model::PK0);
1030  p.addPar("LK01", static_cast<double>(0), &ADMSbsimcmg::Model::LK01);
1031  p.addPar("NK01", static_cast<double>(0), &ADMSbsimcmg::Model::NK01);
1032  p.addPar("PK01", static_cast<double>(0), &ADMSbsimcmg::Model::PK01);
1033  p.addPar("LK0SI", static_cast<double>(0), &ADMSbsimcmg::Model::LK0SI);
1034  p.addPar("NK0SI", static_cast<double>(0), &ADMSbsimcmg::Model::NK0SI);
1035  p.addPar("PK0SI", static_cast<double>(0), &ADMSbsimcmg::Model::PK0SI);
1036  p.addPar("LK0SI1", static_cast<double>(0), &ADMSbsimcmg::Model::LK0SI1);
1037  p.addPar("NK0SI1", static_cast<double>(0), &ADMSbsimcmg::Model::NK0SI1);
1038  p.addPar("PK0SI1", static_cast<double>(0), &ADMSbsimcmg::Model::PK0SI1);
1039  p.addPar("LK1SI", static_cast<double>(0), &ADMSbsimcmg::Model::LK1SI);
1040  p.addPar("NK1SI", static_cast<double>(0), &ADMSbsimcmg::Model::NK1SI);
1041  p.addPar("PK1SI", static_cast<double>(0), &ADMSbsimcmg::Model::PK1SI);
1042  p.addPar("LK1SI1", static_cast<double>(0), &ADMSbsimcmg::Model::LK1SI1);
1043  p.addPar("NK1SI1", static_cast<double>(0), &ADMSbsimcmg::Model::NK1SI1);
1044  p.addPar("PK1SI1", static_cast<double>(0), &ADMSbsimcmg::Model::PK1SI1);
1045  p.addPar("LK1", static_cast<double>(0), &ADMSbsimcmg::Model::LK1);
1046  p.addPar("NK1", static_cast<double>(0), &ADMSbsimcmg::Model::NK1);
1047  p.addPar("PK1", static_cast<double>(0), &ADMSbsimcmg::Model::PK1);
1048  p.addPar("LK11", static_cast<double>(0), &ADMSbsimcmg::Model::LK11);
1049  p.addPar("NK11", static_cast<double>(0), &ADMSbsimcmg::Model::NK11);
1050  p.addPar("PK11", static_cast<double>(0), &ADMSbsimcmg::Model::PK11);
1051  p.addPar("LK1SAT", static_cast<double>(0), &ADMSbsimcmg::Model::LK1SAT);
1052  p.addPar("NK1SAT", static_cast<double>(0), &ADMSbsimcmg::Model::NK1SAT);
1053  p.addPar("PK1SAT", static_cast<double>(0), &ADMSbsimcmg::Model::PK1SAT);
1054  p.addPar("LK1SAT1", static_cast<double>(0), &ADMSbsimcmg::Model::LK1SAT1);
1055  p.addPar("NK1SAT1", static_cast<double>(0), &ADMSbsimcmg::Model::NK1SAT1);
1056  p.addPar("PK1SAT1", static_cast<double>(0), &ADMSbsimcmg::Model::PK1SAT1);
1057  p.addPar("LDVTB", static_cast<double>(0), &ADMSbsimcmg::Model::LDVTB);
1058  p.addPar("NDVTB", static_cast<double>(0), &ADMSbsimcmg::Model::NDVTB);
1059  p.addPar("PDVTB", static_cast<double>(0), &ADMSbsimcmg::Model::PDVTB);
1060  p.addPar("LLPEB", static_cast<double>(0), &ADMSbsimcmg::Model::LLPEB);
1061  p.addPar("NLPEB", static_cast<double>(0), &ADMSbsimcmg::Model::NLPEB);
1062  p.addPar("PLPEB", static_cast<double>(0), &ADMSbsimcmg::Model::PLPEB);
1063  p.addPar("LQMFACTOR", static_cast<double>(0.0), &ADMSbsimcmg::Model::LQMFACTOR);
1064  p.addPar("NQMFACTOR", static_cast<double>(0.0), &ADMSbsimcmg::Model::NQMFACTOR);
1065  p.addPar("PQMFACTOR", static_cast<double>(0.0), &ADMSbsimcmg::Model::PQMFACTOR);
1066  p.addPar("LQMTCENIV", static_cast<double>(0.0), &ADMSbsimcmg::Model::LQMTCENIV);
1067  p.addPar("NQMTCENIV", static_cast<double>(0.0), &ADMSbsimcmg::Model::NQMTCENIV);
1068  p.addPar("PQMTCENIV", static_cast<double>(0.0), &ADMSbsimcmg::Model::PQMTCENIV);
1069  p.addPar("LQMTCENCV", static_cast<double>(0.0), &ADMSbsimcmg::Model::LQMTCENCV);
1070  p.addPar("NQMTCENCV", static_cast<double>(0.0), &ADMSbsimcmg::Model::NQMTCENCV);
1071  p.addPar("PQMTCENCV", static_cast<double>(0.0), &ADMSbsimcmg::Model::PQMTCENCV);
1072  p.addPar("LQMTCENCVA", static_cast<double>(0.0), &ADMSbsimcmg::Model::LQMTCENCVA);
1073  p.addPar("NQMTCENCVA", static_cast<double>(0.0), &ADMSbsimcmg::Model::NQMTCENCVA);
1074  p.addPar("PQMTCENCVA", static_cast<double>(0.0), &ADMSbsimcmg::Model::PQMTCENCVA);
1075  p.addPar("LVSAT", static_cast<double>(0), &ADMSbsimcmg::Model::LVSAT);
1076  p.addPar("NVSAT", static_cast<double>(0), &ADMSbsimcmg::Model::NVSAT);
1077  p.addPar("PVSAT", static_cast<double>(0), &ADMSbsimcmg::Model::PVSAT);
1078  p.addPar("LVSAT1", 0.0, &ADMSbsimcmg::Model::LVSAT1);
1079  p.addPar("NVSAT1", 0.0, &ADMSbsimcmg::Model::NVSAT1);
1080  p.addPar("PVSAT1", 0.0, &ADMSbsimcmg::Model::PVSAT1);
1081  p.addPar("LVSAT1R", 0.0, &ADMSbsimcmg::Model::LVSAT1R);
1082  p.addPar("NVSAT1R", 0.0, &ADMSbsimcmg::Model::NVSAT1R);
1083  p.addPar("PVSAT1R", 0.0, &ADMSbsimcmg::Model::PVSAT1R);
1084  p.addPar("LPSAT", static_cast<double>(0), &ADMSbsimcmg::Model::LPSAT);
1085  p.addPar("NPSAT", static_cast<double>(0), &ADMSbsimcmg::Model::NPSAT);
1086  p.addPar("PPSAT", static_cast<double>(0), &ADMSbsimcmg::Model::PPSAT);
1087  p.addPar("LDELTAVSAT", static_cast<double>(0), &ADMSbsimcmg::Model::LDELTAVSAT);
1088  p.addPar("NDELTAVSAT", static_cast<double>(0), &ADMSbsimcmg::Model::NDELTAVSAT);
1089  p.addPar("PDELTAVSAT", static_cast<double>(0), &ADMSbsimcmg::Model::PDELTAVSAT);
1090  p.addPar("LKSATIV", static_cast<double>(0), &ADMSbsimcmg::Model::LKSATIV);
1091  p.addPar("NKSATIV", static_cast<double>(0), &ADMSbsimcmg::Model::NKSATIV);
1092  p.addPar("PKSATIV", static_cast<double>(0), &ADMSbsimcmg::Model::PKSATIV);
1093  p.addPar("LVSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::LVSATCV);
1094  p.addPar("NVSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::NVSATCV);
1095  p.addPar("PVSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::PVSATCV);
1096  p.addPar("LPSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::LPSATCV);
1097  p.addPar("NPSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::NPSATCV);
1098  p.addPar("PPSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::PPSATCV);
1099  p.addPar("LDELTAVSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::LDELTAVSATCV);
1100  p.addPar("NDELTAVSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::NDELTAVSATCV);
1101  p.addPar("PDELTAVSATCV", static_cast<double>(0), &ADMSbsimcmg::Model::PDELTAVSATCV);
1102  p.addPar("LMEXP", static_cast<double>(0), &ADMSbsimcmg::Model::LMEXP);
1103  p.addPar("NMEXP", static_cast<double>(0), &ADMSbsimcmg::Model::NMEXP);
1104  p.addPar("PMEXP", static_cast<double>(0), &ADMSbsimcmg::Model::PMEXP);
1105  p.addPar("LMEXPR", static_cast<double>(0), &ADMSbsimcmg::Model::LMEXPR);
1106  p.addPar("NMEXPR", static_cast<double>(0), &ADMSbsimcmg::Model::NMEXPR);
1107  p.addPar("PMEXPR", static_cast<double>(0), &ADMSbsimcmg::Model::PMEXPR);
1108  p.addPar("LPTWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::LPTWG);
1109  p.addPar("NPTWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::NPTWG);
1110  p.addPar("PPTWG", static_cast<double>(0.0), &ADMSbsimcmg::Model::PPTWG);
1111  p.addPar("LPTWGR", 0.0, &ADMSbsimcmg::Model::LPTWGR);
1112  p.addPar("NPTWGR", 0.0, &ADMSbsimcmg::Model::NPTWGR);
1113  p.addPar("PPTWGR", 0.0, &ADMSbsimcmg::Model::PPTWGR);
1114  p.addPar("LU0", static_cast<double>(0), &ADMSbsimcmg::Model::LU0);
1115  p.addPar("NU0", static_cast<double>(0), &ADMSbsimcmg::Model::NU0);
1116  p.addPar("PU0", static_cast<double>(0), &ADMSbsimcmg::Model::PU0);
1117  p.addPar("LETAMOB", static_cast<double>(0), &ADMSbsimcmg::Model::LETAMOB);
1118  p.addPar("NETAMOB", static_cast<double>(0), &ADMSbsimcmg::Model::NETAMOB);
1119  p.addPar("PETAMOB", static_cast<double>(0), &ADMSbsimcmg::Model::PETAMOB);
1120  p.addPar("LUP", static_cast<double>(0), &ADMSbsimcmg::Model::LUP);
1121  p.addPar("NUP", static_cast<double>(0), &ADMSbsimcmg::Model::NUP);
1122  p.addPar("PUP", static_cast<double>(0), &ADMSbsimcmg::Model::PUP);
1123  p.addPar("LUA", static_cast<double>(0), &ADMSbsimcmg::Model::LUA);
1124  p.addPar("NUA", static_cast<double>(0), &ADMSbsimcmg::Model::NUA);
1125  p.addPar("PUA", static_cast<double>(0), &ADMSbsimcmg::Model::PUA);
1126  p.addPar("LUC", static_cast<double>(0), &ADMSbsimcmg::Model::LUC);
1127  p.addPar("NUC", static_cast<double>(0), &ADMSbsimcmg::Model::NUC);
1128  p.addPar("PUC", static_cast<double>(0), &ADMSbsimcmg::Model::PUC);
1129  p.addPar("LEU", static_cast<double>(0), &ADMSbsimcmg::Model::LEU);
1130  p.addPar("NEU", static_cast<double>(0), &ADMSbsimcmg::Model::NEU);
1131  p.addPar("PEU", static_cast<double>(0), &ADMSbsimcmg::Model::PEU);
1132  p.addPar("LUD", static_cast<double>(0), &ADMSbsimcmg::Model::LUD);
1133  p.addPar("NUD", static_cast<double>(0), &ADMSbsimcmg::Model::NUD);
1134  p.addPar("PUD", static_cast<double>(0), &ADMSbsimcmg::Model::PUD);
1135  p.addPar("LUCS", static_cast<double>(0), &ADMSbsimcmg::Model::LUCS);
1136  p.addPar("NUCS", static_cast<double>(0), &ADMSbsimcmg::Model::NUCS);
1137  p.addPar("PUCS", static_cast<double>(0), &ADMSbsimcmg::Model::PUCS);
1138  p.addPar("LPCLM", static_cast<double>(0), &ADMSbsimcmg::Model::LPCLM);
1139  p.addPar("NPCLM", static_cast<double>(0), &ADMSbsimcmg::Model::NPCLM);
1140  p.addPar("PPCLM", static_cast<double>(0), &ADMSbsimcmg::Model::PPCLM);
1141  p.addPar("LPCLMG", static_cast<double>(0), &ADMSbsimcmg::Model::LPCLMG);
1142  p.addPar("NPCLMG", static_cast<double>(0), &ADMSbsimcmg::Model::NPCLMG);
1143  p.addPar("PPCLMG", static_cast<double>(0), &ADMSbsimcmg::Model::PPCLMG);
1144  p.addPar("LPCLMCV", static_cast<double>(0), &ADMSbsimcmg::Model::LPCLMCV);
1145  p.addPar("NPCLMCV", static_cast<double>(0), &ADMSbsimcmg::Model::NPCLMCV);
1146  p.addPar("PPCLMCV", static_cast<double>(0), &ADMSbsimcmg::Model::PPCLMCV);
1147  p.addPar("LA1", static_cast<double>(0), &ADMSbsimcmg::Model::LA1);
1148  p.addPar("NA1", static_cast<double>(0), &ADMSbsimcmg::Model::NA1);
1149  p.addPar("PA1", static_cast<double>(0), &ADMSbsimcmg::Model::PA1);
1150  p.addPar("LA11", static_cast<double>(0), &ADMSbsimcmg::Model::LA11);
1151  p.addPar("NA11", static_cast<double>(0), &ADMSbsimcmg::Model::NA11);
1152  p.addPar("PA11", static_cast<double>(0), &ADMSbsimcmg::Model::PA11);
1153  p.addPar("LA2", static_cast<double>(0), &ADMSbsimcmg::Model::LA2);
1154  p.addPar("NA2", static_cast<double>(0), &ADMSbsimcmg::Model::NA2);
1155  p.addPar("PA2", static_cast<double>(0), &ADMSbsimcmg::Model::PA2);
1156  p.addPar("LA21", static_cast<double>(0), &ADMSbsimcmg::Model::LA21);
1157  p.addPar("NA21", static_cast<double>(0), &ADMSbsimcmg::Model::NA21);
1158  p.addPar("PA21", static_cast<double>(0), &ADMSbsimcmg::Model::PA21);
1159  p.addPar("LRDSW", static_cast<double>(0), &ADMSbsimcmg::Model::LRDSW);
1160  p.addPar("NRDSW", static_cast<double>(0), &ADMSbsimcmg::Model::NRDSW);
1161  p.addPar("PRDSW", static_cast<double>(0), &ADMSbsimcmg::Model::PRDSW);
1162  p.addPar("LRSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::LRSW);
1163  p.addPar("NRSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::NRSW);
1164  p.addPar("PRSW", static_cast<double>(0.0), &ADMSbsimcmg::Model::PRSW);
1165  p.addPar("LRDW", static_cast<double>(0.0), &ADMSbsimcmg::Model::LRDW);
1166  p.addPar("NRDW", static_cast<double>(0.0), &ADMSbsimcmg::Model::NRDW);
1167  p.addPar("PRDW", static_cast<double>(0.0), &ADMSbsimcmg::Model::PRDW);
1168  p.addPar("LPRWGS", static_cast<double>(0), &ADMSbsimcmg::Model::LPRWGS);
1169  p.addPar("NPRWGS", static_cast<double>(0), &ADMSbsimcmg::Model::NPRWGS);
1170  p.addPar("PPRWGS", static_cast<double>(0), &ADMSbsimcmg::Model::PPRWGS);
1171  p.addPar("LPRWGD", static_cast<double>(0), &ADMSbsimcmg::Model::LPRWGD);
1172  p.addPar("NPRWGD", static_cast<double>(0), &ADMSbsimcmg::Model::NPRWGD);
1173  p.addPar("PPRWGD", static_cast<double>(0), &ADMSbsimcmg::Model::PPRWGD);
1174  p.addPar("LWR", static_cast<double>(0), &ADMSbsimcmg::Model::LWR);
1175  p.addPar("NWR", static_cast<double>(0), &ADMSbsimcmg::Model::NWR);
1176  p.addPar("PWR", static_cast<double>(0), &ADMSbsimcmg::Model::PWR);
1177  p.addPar("LPDIBL1", static_cast<double>(0), &ADMSbsimcmg::Model::LPDIBL1);
1178  p.addPar("NPDIBL1", static_cast<double>(0), &ADMSbsimcmg::Model::NPDIBL1);
1179  p.addPar("PPDIBL1", static_cast<double>(0), &ADMSbsimcmg::Model::PPDIBL1);
1180  p.addPar("LPDIBL1R", 0.0, &ADMSbsimcmg::Model::LPDIBL1R);
1181  p.addPar("NPDIBL1R", 0.0, &ADMSbsimcmg::Model::NPDIBL1R);
1182  p.addPar("PPDIBL1R", 0.0, &ADMSbsimcmg::Model::PPDIBL1R);
1183  p.addPar("LPDIBL2", static_cast<double>(0), &ADMSbsimcmg::Model::LPDIBL2);
1184  p.addPar("NPDIBL2", static_cast<double>(0), &ADMSbsimcmg::Model::NPDIBL2);
1185  p.addPar("PPDIBL2", static_cast<double>(0), &ADMSbsimcmg::Model::PPDIBL2);
1186  p.addPar("LDROUT", static_cast<double>(0), &ADMSbsimcmg::Model::LDROUT);
1187  p.addPar("NDROUT", static_cast<double>(0), &ADMSbsimcmg::Model::NDROUT);
1188  p.addPar("PDROUT", static_cast<double>(0), &ADMSbsimcmg::Model::PDROUT);
1189  p.addPar("LPVAG", static_cast<double>(0), &ADMSbsimcmg::Model::LPVAG);
1190  p.addPar("NPVAG", static_cast<double>(0), &ADMSbsimcmg::Model::NPVAG);
1191  p.addPar("PPVAG", static_cast<double>(0), &ADMSbsimcmg::Model::PPVAG);
1192  p.addPar("LAIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGBINV);
1193  p.addPar("NAIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGBINV);
1194  p.addPar("PAIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGBINV);
1195  p.addPar("LAIGBINV1", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGBINV1);
1196  p.addPar("NAIGBINV1", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGBINV1);
1197  p.addPar("PAIGBINV1", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGBINV1);
1198  p.addPar("LBIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::LBIGBINV);
1199  p.addPar("NBIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::NBIGBINV);
1200  p.addPar("PBIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::PBIGBINV);
1201  p.addPar("LCIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::LCIGBINV);
1202  p.addPar("NCIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::NCIGBINV);
1203  p.addPar("PCIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::PCIGBINV);
1204  p.addPar("LEIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::LEIGBINV);
1205  p.addPar("NEIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::NEIGBINV);
1206  p.addPar("PEIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::PEIGBINV);
1207  p.addPar("LNIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::LNIGBINV);
1208  p.addPar("NNIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::NNIGBINV);
1209  p.addPar("PNIGBINV", static_cast<double>(0), &ADMSbsimcmg::Model::PNIGBINV);
1210  p.addPar("LAIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGBACC);
1211  p.addPar("NAIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGBACC);
1212  p.addPar("PAIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGBACC);
1213  p.addPar("LAIGBACC1", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGBACC1);
1214  p.addPar("NAIGBACC1", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGBACC1);
1215  p.addPar("PAIGBACC1", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGBACC1);
1216  p.addPar("LBIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::LBIGBACC);
1217  p.addPar("NBIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::NBIGBACC);
1218  p.addPar("PBIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::PBIGBACC);
1219  p.addPar("LCIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::LCIGBACC);
1220  p.addPar("NCIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::NCIGBACC);
1221  p.addPar("PCIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::PCIGBACC);
1222  p.addPar("LNIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::LNIGBACC);
1223  p.addPar("NNIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::NNIGBACC);
1224  p.addPar("PNIGBACC", static_cast<double>(0), &ADMSbsimcmg::Model::PNIGBACC);
1225  p.addPar("LAIGC", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGC);
1226  p.addPar("NAIGC", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGC);
1227  p.addPar("PAIGC", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGC);
1228  p.addPar("LAIGC1", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGC1);
1229  p.addPar("NAIGC1", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGC1);
1230  p.addPar("PAIGC1", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGC1);
1231  p.addPar("LBIGC", static_cast<double>(0), &ADMSbsimcmg::Model::LBIGC);
1232  p.addPar("NBIGC", static_cast<double>(0), &ADMSbsimcmg::Model::NBIGC);
1233  p.addPar("PBIGC", static_cast<double>(0), &ADMSbsimcmg::Model::PBIGC);
1234  p.addPar("LCIGC", static_cast<double>(0), &ADMSbsimcmg::Model::LCIGC);
1235  p.addPar("NCIGC", static_cast<double>(0), &ADMSbsimcmg::Model::NCIGC);
1236  p.addPar("PCIGC", static_cast<double>(0), &ADMSbsimcmg::Model::PCIGC);
1237  p.addPar("LPIGCD", static_cast<double>(0), &ADMSbsimcmg::Model::LPIGCD);
1238  p.addPar("NPIGCD", static_cast<double>(0), &ADMSbsimcmg::Model::NPIGCD);
1239  p.addPar("PPIGCD", static_cast<double>(0), &ADMSbsimcmg::Model::PPIGCD);
1240  p.addPar("LAIGS", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGS);
1241  p.addPar("NAIGS", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGS);
1242  p.addPar("PAIGS", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGS);
1243  p.addPar("LAIGS1", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGS1);
1244  p.addPar("NAIGS1", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGS1);
1245  p.addPar("PAIGS1", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGS1);
1246  p.addPar("LBIGS", static_cast<double>(0), &ADMSbsimcmg::Model::LBIGS);
1247  p.addPar("NBIGS", static_cast<double>(0), &ADMSbsimcmg::Model::NBIGS);
1248  p.addPar("PBIGS", static_cast<double>(0), &ADMSbsimcmg::Model::PBIGS);
1249  p.addPar("LCIGS", static_cast<double>(0), &ADMSbsimcmg::Model::LCIGS);
1250  p.addPar("NCIGS", static_cast<double>(0), &ADMSbsimcmg::Model::NCIGS);
1251  p.addPar("PCIGS", static_cast<double>(0), &ADMSbsimcmg::Model::PCIGS);
1252  p.addPar("LAIGD", 0.0, &ADMSbsimcmg::Model::LAIGD);
1253  p.addPar("NAIGD", 0.0, &ADMSbsimcmg::Model::NAIGD);
1254  p.addPar("PAIGD", 0.0, &ADMSbsimcmg::Model::PAIGD);
1255  p.addPar("LAIGD1", 0.0, &ADMSbsimcmg::Model::LAIGD1);
1256  p.addPar("NAIGD1", 0.0, &ADMSbsimcmg::Model::NAIGD1);
1257  p.addPar("PAIGD1", 0.0, &ADMSbsimcmg::Model::PAIGD1);
1258  p.addPar("LBIGD", 0.0, &ADMSbsimcmg::Model::LBIGD);
1259  p.addPar("NBIGD", 0.0, &ADMSbsimcmg::Model::NBIGD);
1260  p.addPar("PBIGD", 0.0, &ADMSbsimcmg::Model::PBIGD);
1261  p.addPar("LCIGD", 0.0, &ADMSbsimcmg::Model::LCIGD);
1262  p.addPar("NCIGD", 0.0, &ADMSbsimcmg::Model::NCIGD);
1263  p.addPar("PCIGD", 0.0, &ADMSbsimcmg::Model::PCIGD);
1264  p.addPar("LNTOX", static_cast<double>(0), &ADMSbsimcmg::Model::LNTOX);
1265  p.addPar("NNTOX", static_cast<double>(0), &ADMSbsimcmg::Model::NNTOX);
1266  p.addPar("PNTOX", static_cast<double>(0), &ADMSbsimcmg::Model::PNTOX);
1267  p.addPar("LPOXEDGE", static_cast<double>(0), &ADMSbsimcmg::Model::LPOXEDGE);
1268  p.addPar("NPOXEDGE", static_cast<double>(0), &ADMSbsimcmg::Model::NPOXEDGE);
1269  p.addPar("PPOXEDGE", static_cast<double>(0), &ADMSbsimcmg::Model::PPOXEDGE);
1270  p.addPar("LAGISL", static_cast<double>(0), &ADMSbsimcmg::Model::LAGISL);
1271  p.addPar("NAGISL", static_cast<double>(0), &ADMSbsimcmg::Model::NAGISL);
1272  p.addPar("PAGISL", static_cast<double>(0), &ADMSbsimcmg::Model::PAGISL);
1273  p.addPar("LBGISL", static_cast<double>(0), &ADMSbsimcmg::Model::LBGISL);
1274  p.addPar("NBGISL", static_cast<double>(0), &ADMSbsimcmg::Model::NBGISL);
1275  p.addPar("PBGISL", static_cast<double>(0), &ADMSbsimcmg::Model::PBGISL);
1276  p.addPar("LCGISL", static_cast<double>(0), &ADMSbsimcmg::Model::LCGISL);
1277  p.addPar("NCGISL", static_cast<double>(0), &ADMSbsimcmg::Model::NCGISL);
1278  p.addPar("PCGISL", static_cast<double>(0), &ADMSbsimcmg::Model::PCGISL);
1279  p.addPar("LEGISL", static_cast<double>(0), &ADMSbsimcmg::Model::LEGISL);
1280  p.addPar("NEGISL", static_cast<double>(0), &ADMSbsimcmg::Model::NEGISL);
1281  p.addPar("PEGISL", static_cast<double>(0), &ADMSbsimcmg::Model::PEGISL);
1282  p.addPar("LPGISL", static_cast<double>(0), &ADMSbsimcmg::Model::LPGISL);
1283  p.addPar("NPGISL", static_cast<double>(0), &ADMSbsimcmg::Model::NPGISL);
1284  p.addPar("PPGISL", static_cast<double>(0), &ADMSbsimcmg::Model::PPGISL);
1285  p.addPar("LAGIDL", 0.0, &ADMSbsimcmg::Model::LAGIDL);
1286  p.addPar("NAGIDL", 0.0, &ADMSbsimcmg::Model::NAGIDL);
1287  p.addPar("PAGIDL", 0.0, &ADMSbsimcmg::Model::PAGIDL);
1288  p.addPar("LBGIDL", 0.0, &ADMSbsimcmg::Model::LBGIDL);
1289  p.addPar("NBGIDL", 0.0, &ADMSbsimcmg::Model::NBGIDL);
1290  p.addPar("PBGIDL", 0.0, &ADMSbsimcmg::Model::PBGIDL);
1291  p.addPar("LCGIDL", 0.0, &ADMSbsimcmg::Model::LCGIDL);
1292  p.addPar("NCGIDL", 0.0, &ADMSbsimcmg::Model::NCGIDL);
1293  p.addPar("PCGIDL", 0.0, &ADMSbsimcmg::Model::PCGIDL);
1294  p.addPar("LEGIDL", 0.0, &ADMSbsimcmg::Model::LEGIDL);
1295  p.addPar("NEGIDL", 0.0, &ADMSbsimcmg::Model::NEGIDL);
1296  p.addPar("PEGIDL", 0.0, &ADMSbsimcmg::Model::PEGIDL);
1297  p.addPar("LPGIDL", 0.0, &ADMSbsimcmg::Model::LPGIDL);
1298  p.addPar("NPGIDL", 0.0, &ADMSbsimcmg::Model::NPGIDL);
1299  p.addPar("PPGIDL", 0.0, &ADMSbsimcmg::Model::PPGIDL);
1300  p.addPar("LALPHA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::LALPHA0);
1301  p.addPar("NALPHA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::NALPHA0);
1302  p.addPar("PALPHA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::PALPHA0);
1303  p.addPar("LALPHA1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LALPHA1);
1304  p.addPar("NALPHA1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NALPHA1);
1305  p.addPar("PALPHA1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PALPHA1);
1306  p.addPar("LALPHAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::LALPHAII0);
1307  p.addPar("NALPHAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::NALPHAII0);
1308  p.addPar("PALPHAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::PALPHAII0);
1309  p.addPar("LALPHAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LALPHAII1);
1310  p.addPar("NALPHAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NALPHAII1);
1311  p.addPar("PALPHAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PALPHAII1);
1312  p.addPar("LBETA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::LBETA0);
1313  p.addPar("NBETA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::NBETA0);
1314  p.addPar("PBETA0", static_cast<double>(0.0), &ADMSbsimcmg::Model::PBETA0);
1315  p.addPar("LBETAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::LBETAII0);
1316  p.addPar("NBETAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::NBETAII0);
1317  p.addPar("PBETAII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::PBETAII0);
1318  p.addPar("LBETAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LBETAII1);
1319  p.addPar("NBETAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NBETAII1);
1320  p.addPar("PBETAII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PBETAII1);
1321  p.addPar("LBETAII2", static_cast<double>(0.0), &ADMSbsimcmg::Model::LBETAII2);
1322  p.addPar("NBETAII2", static_cast<double>(0.0), &ADMSbsimcmg::Model::NBETAII2);
1323  p.addPar("PBETAII2", static_cast<double>(0.0), &ADMSbsimcmg::Model::PBETAII2);
1324  p.addPar("LESATII", static_cast<double>(0.0), &ADMSbsimcmg::Model::LESATII);
1325  p.addPar("NESATII", static_cast<double>(0.0), &ADMSbsimcmg::Model::NESATII);
1326  p.addPar("PESATII", static_cast<double>(0.0), &ADMSbsimcmg::Model::PESATII);
1327  p.addPar("LLII", static_cast<double>(0.0), &ADMSbsimcmg::Model::LLII);
1328  p.addPar("NLII", static_cast<double>(0.0), &ADMSbsimcmg::Model::NLII);
1329  p.addPar("PLII", static_cast<double>(0.0), &ADMSbsimcmg::Model::PLII);
1330  p.addPar("LSII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::LSII0);
1331  p.addPar("NSII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::NSII0);
1332  p.addPar("PSII0", static_cast<double>(0.0), &ADMSbsimcmg::Model::PSII0);
1333  p.addPar("LSII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LSII1);
1334  p.addPar("NSII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NSII1);
1335  p.addPar("PSII1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PSII1);
1336  p.addPar("LSII2", static_cast<double>(0.0), &ADMSbsimcmg::Model::LSII2);
1337  p.addPar("NSII2", static_cast<double>(0.0), &ADMSbsimcmg::Model::NSII2);
1338  p.addPar("PSII2", static_cast<double>(0.0), &ADMSbsimcmg::Model::PSII2);
1339  p.addPar("LSIID", static_cast<double>(0.0), &ADMSbsimcmg::Model::LSIID);
1340  p.addPar("NSIID", static_cast<double>(0.0), &ADMSbsimcmg::Model::NSIID);
1341  p.addPar("PSIID", static_cast<double>(0.0), &ADMSbsimcmg::Model::PSIID);
1342  p.addPar("LCFS", static_cast<double>(0.0), &ADMSbsimcmg::Model::LCFS);
1343  p.addPar("NCFS", static_cast<double>(0.0), &ADMSbsimcmg::Model::NCFS);
1344  p.addPar("PCFS", static_cast<double>(0.0), &ADMSbsimcmg::Model::PCFS);
1345  p.addPar("LCFD", 0.0, &ADMSbsimcmg::Model::LCFD);
1346  p.addPar("NCFD", 0.0, &ADMSbsimcmg::Model::NCFD);
1347  p.addPar("PCFD", 0.0, &ADMSbsimcmg::Model::PCFD);
1348  p.addPar("LCOVS", static_cast<double>(0.0), &ADMSbsimcmg::Model::LCOVS);
1349  p.addPar("NCOVS", static_cast<double>(0.0), &ADMSbsimcmg::Model::NCOVS);
1350  p.addPar("PCOVS", static_cast<double>(0.0), &ADMSbsimcmg::Model::PCOVS);
1351  p.addPar("LCOVD", 0.0, &ADMSbsimcmg::Model::LCOVD);
1352  p.addPar("NCOVD", 0.0, &ADMSbsimcmg::Model::NCOVD);
1353  p.addPar("PCOVD", 0.0, &ADMSbsimcmg::Model::PCOVD);
1354  p.addPar("LCGSL", static_cast<double>(0.0), &ADMSbsimcmg::Model::LCGSL);
1355  p.addPar("NCGSL", static_cast<double>(0.0), &ADMSbsimcmg::Model::NCGSL);
1356  p.addPar("PCGSL", static_cast<double>(0.0), &ADMSbsimcmg::Model::PCGSL);
1357  p.addPar("LCGDL", 0.0, &ADMSbsimcmg::Model::LCGDL);
1358  p.addPar("NCGDL", 0.0, &ADMSbsimcmg::Model::NCGDL);
1359  p.addPar("PCGDL", 0.0, &ADMSbsimcmg::Model::PCGDL);
1360  p.addPar("LCKAPPAS", static_cast<double>(0.0), &ADMSbsimcmg::Model::LCKAPPAS);
1361  p.addPar("NCKAPPAS", static_cast<double>(0.0), &ADMSbsimcmg::Model::NCKAPPAS);
1362  p.addPar("PCKAPPAS", static_cast<double>(0.0), &ADMSbsimcmg::Model::PCKAPPAS);
1363  p.addPar("LCKAPPAD", 0.0, &ADMSbsimcmg::Model::LCKAPPAD);
1364  p.addPar("NCKAPPAD", 0.0, &ADMSbsimcmg::Model::NCKAPPAD);
1365  p.addPar("PCKAPPAD", 0.0, &ADMSbsimcmg::Model::PCKAPPAD);
1366  p.addPar("LCGBL", static_cast<double>(0.0), &ADMSbsimcmg::Model::LCGBL);
1367  p.addPar("NCGBL", static_cast<double>(0.0), &ADMSbsimcmg::Model::NCGBL);
1368  p.addPar("PCGBL", static_cast<double>(0.0), &ADMSbsimcmg::Model::PCGBL);
1369  p.addPar("LCKAPPAB", static_cast<double>(0.0), &ADMSbsimcmg::Model::LCKAPPAB);
1370  p.addPar("NCKAPPAB", static_cast<double>(0.0), &ADMSbsimcmg::Model::NCKAPPAB);
1371  p.addPar("PCKAPPAB", static_cast<double>(0.0), &ADMSbsimcmg::Model::PCKAPPAB);
1372  p.addPar("LNTGEN", static_cast<double>(0), &ADMSbsimcmg::Model::LNTGEN);
1373  p.addPar("NNTGEN", static_cast<double>(0), &ADMSbsimcmg::Model::NNTGEN);
1374  p.addPar("PNTGEN", static_cast<double>(0), &ADMSbsimcmg::Model::PNTGEN);
1375  p.addPar("LAIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::LAIGEN);
1376  p.addPar("NAIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::NAIGEN);
1377  p.addPar("PAIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::PAIGEN);
1378  p.addPar("LBIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::LBIGEN);
1379  p.addPar("NBIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::NBIGEN);
1380  p.addPar("PBIGEN", static_cast<double>(0), &ADMSbsimcmg::Model::PBIGEN);
1381  p.addPar("LXRCRG1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LXRCRG1);
1382  p.addPar("NXRCRG1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NXRCRG1);
1383  p.addPar("PXRCRG1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PXRCRG1);
1384  p.addPar("LXRCRG2", static_cast<double>(0.0), &ADMSbsimcmg::Model::LXRCRG2);
1385  p.addPar("NXRCRG2", static_cast<double>(0.0), &ADMSbsimcmg::Model::NXRCRG2);
1386  p.addPar("PXRCRG2", static_cast<double>(0.0), &ADMSbsimcmg::Model::PXRCRG2);
1387  p.addPar("LINTNOI", static_cast<double>(0.0), &ADMSbsimcmg::Model::LINTNOI);
1388  p.addPar("LUTE", static_cast<double>(0.0), &ADMSbsimcmg::Model::LUTE);
1389  p.addPar("NUTE", static_cast<double>(0.0), &ADMSbsimcmg::Model::NUTE);
1390  p.addPar("PUTE", static_cast<double>(0.0), &ADMSbsimcmg::Model::PUTE);
1391  p.addPar("LUTL", static_cast<double>(0.0), &ADMSbsimcmg::Model::LUTL);
1392  p.addPar("NUTL", static_cast<double>(0.0), &ADMSbsimcmg::Model::NUTL);
1393  p.addPar("PUTL", static_cast<double>(0.0), &ADMSbsimcmg::Model::PUTL);
1394  p.addPar("LEMOBT", static_cast<double>(0), &ADMSbsimcmg::Model::LEMOBT);
1395  p.addPar("NEMOBT", static_cast<double>(0), &ADMSbsimcmg::Model::NEMOBT);
1396  p.addPar("PEMOBT", static_cast<double>(0), &ADMSbsimcmg::Model::PEMOBT);
1397  p.addPar("LUA1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LUA1);
1398  p.addPar("NUA1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NUA1);
1399  p.addPar("PUA1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PUA1);
1400  p.addPar("LUC1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LUC1);
1401  p.addPar("NUC1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NUC1);
1402  p.addPar("PUC1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PUC1);
1403  p.addPar("LUD1", static_cast<double>(0.0), &ADMSbsimcmg::Model::LUD1);
1404  p.addPar("NUD1", static_cast<double>(0.0), &ADMSbsimcmg::Model::NUD1);
1405  p.addPar("PUD1", static_cast<double>(0.0), &ADMSbsimcmg::Model::PUD1);
1406  p.addPar("LUCSTE", static_cast<double>(0.0), &ADMSbsimcmg::Model::LUCSTE);
1407  p.addPar("NUCSTE", static_cast<double>(0.0), &ADMSbsimcmg::Model::NUCSTE);
1408  p.addPar("PUCSTE", static_cast<double>(0.0), &ADMSbsimcmg::Model::PUCSTE);
1409  p.addPar("LPTWGT", static_cast<double>(0), &ADMSbsimcmg::Model::LPTWGT);
1410  p.addPar("NPTWGT", static_cast<double>(0), &ADMSbsimcmg::Model::NPTWGT);
1411  p.addPar("PPTWGT", static_cast<double>(0), &ADMSbsimcmg::Model::PPTWGT);
1412  p.addPar("LAT", static_cast<double>(0), &ADMSbsimcmg::Model::LAT);
1413  p.addPar("NAT", static_cast<double>(0), &ADMSbsimcmg::Model::NAT);
1414  p.addPar("PAT", static_cast<double>(0), &ADMSbsimcmg::Model::PAT);
1415  p.addPar("LSTTHETASAT", static_cast<double>(0), &ADMSbsimcmg::Model::LSTTHETASAT);
1416  p.addPar("NSTTHETASAT", static_cast<double>(0), &ADMSbsimcmg::Model::NSTTHETASAT);
1417  p.addPar("PSTTHETASAT", static_cast<double>(0), &ADMSbsimcmg::Model::PSTTHETASAT);
1418  p.addPar("LPRT", static_cast<double>(0), &ADMSbsimcmg::Model::LPRT);
1419  p.addPar("NPRT", static_cast<double>(0), &ADMSbsimcmg::Model::NPRT);
1420  p.addPar("PPRT", static_cast<double>(0), &ADMSbsimcmg::Model::PPRT);
1421  p.addPar("LKT1", static_cast<double>(0), &ADMSbsimcmg::Model::LKT1);
1422  p.addPar("NKT1", static_cast<double>(0), &ADMSbsimcmg::Model::NKT1);
1423  p.addPar("PKT1", static_cast<double>(0), &ADMSbsimcmg::Model::PKT1);
1424  p.addPar("LTSS", static_cast<double>(0), &ADMSbsimcmg::Model::LTSS);
1425  p.addPar("NTSS", static_cast<double>(0), &ADMSbsimcmg::Model::NTSS);
1426  p.addPar("PTSS", static_cast<double>(0), &ADMSbsimcmg::Model::PTSS);
1427  p.addPar("LIIT", static_cast<double>(0), &ADMSbsimcmg::Model::LIIT);
1428  p.addPar("NIIT", static_cast<double>(0), &ADMSbsimcmg::Model::NIIT);
1429  p.addPar("PIIT", static_cast<double>(0), &ADMSbsimcmg::Model::PIIT);
1430  p.addPar("LTII", static_cast<double>(0.0), &ADMSbsimcmg::Model::LTII);
1431  p.addPar("NTII", static_cast<double>(0.0), &ADMSbsimcmg::Model::NTII);
1432  p.addPar("PTII", static_cast<double>(0.0), &ADMSbsimcmg::Model::PTII);
1433  p.addPar("LTGIDL", static_cast<double>(0), &ADMSbsimcmg::Model::LTGIDL);
1434  p.addPar("NTGIDL", static_cast<double>(0), &ADMSbsimcmg::Model::NTGIDL);
1435  p.addPar("PTGIDL", static_cast<double>(0), &ADMSbsimcmg::Model::PTGIDL);
1436  p.addPar("LIGT", static_cast<double>(0), &ADMSbsimcmg::Model::LIGT);
1437  p.addPar("NIGT", static_cast<double>(0), &ADMSbsimcmg::Model::NIGT);
1438  p.addPar("PIGT", static_cast<double>(0), &ADMSbsimcmg::Model::PIGT);
1439 
1440 }
1441 
1442 //-----------------------------------------------------------------------------
1443 // Function : Instance::processParams
1444 // Purpose :
1445 // Special Notes :
1446 // Scope : public
1447 // Creator : admsXml
1448 // Creation Date :
1449 //-----------------------------------------------------------------------------
1451 {
1452  // Now we need to check that any parameters are within their ranges as
1453  // specified in the verilog:
1454 
1455  // Parameter L : [ 1*1.0e-9, (+inf) [
1456  if ( (!((L >=1*1.0e-9))) )
1457  {
1458  UserError0(*this) << "ADMSbsimcmg: Parameter L value " << L << " out of range [ 1*1.0e-9, (+inf) [";
1459  }
1460 
1461  // Parameter D : [ 1*1.0e-9, (+inf) [
1462  if ( (!((D >=1*1.0e-9))) )
1463  {
1464  UserError0(*this) << "ADMSbsimcmg: Parameter D value " << D << " out of range [ 1*1.0e-9, (+inf) [";
1465  }
1466 
1467  // Parameter TFIN : [ 1*1.0e-9, (+inf) [
1468  if ( (!((TFIN >=1*1.0e-9))) )
1469  {
1470  UserError0(*this) << "ADMSbsimcmg: Parameter TFIN value " << TFIN << " out of range [ 1*1.0e-9, (+inf) [";
1471  }
1472 
1473  // Parameter FPITCH : [ TFIN, (+inf) [
1474  if ( (!((FPITCH >=TFIN))) )
1475  {
1476  UserError0(*this) << "ADMSbsimcmg: Parameter FPITCH value " << FPITCH << " out of range [ TFIN, (+inf) [";
1477  }
1478 
1479  // Parameter NFIN : ] 0, (+inf) [
1480  if ( (!((NFIN >0))) )
1481  {
1482  UserError0(*this) << "ADMSbsimcmg: Parameter NFIN value " << NFIN << " out of range ] 0, (+inf) [";
1483  }
1484 
1485  // Parameter NGCON : [ 1, 2 ]
1486  if ( (!((NGCON >=1 && NGCON <=2 ))) )
1487  {
1488  UserError0(*this) << "ADMSbsimcmg: Parameter NGCON value " << NGCON << " out of range [ 1, 2 ]";
1489  }
1490 
1491  // Parameter ASEO : [ 0, (+inf) [
1492  if ( (!((ASEO >=0))) )
1493  {
1494  UserError0(*this) << "ADMSbsimcmg: Parameter ASEO value " << ASEO << " out of range [ 0, (+inf) [";
1495  }
1496 
1497  // Parameter ADEO : [ 0, (+inf) [
1498  if ( (!((ADEO >=0))) )
1499  {
1500  UserError0(*this) << "ADMSbsimcmg: Parameter ADEO value " << ADEO << " out of range [ 0, (+inf) [";
1501  }
1502 
1503  // Parameter PSEO : [ 0, (+inf) [
1504  if ( (!((PSEO >=0))) )
1505  {
1506  UserError0(*this) << "ADMSbsimcmg: Parameter PSEO value " << PSEO << " out of range [ 0, (+inf) [";
1507  }
1508 
1509  // Parameter PDEO : [ 0, (+inf) [
1510  if ( (!((PDEO >=0))) )
1511  {
1512  UserError0(*this) << "ADMSbsimcmg: Parameter PDEO value " << PDEO << " out of range [ 0, (+inf) [";
1513  }
1514 
1515  // Parameter ASEJ : [ 0, (+inf) [
1516  if ( (!((ASEJ >=0))) )
1517  {
1518  UserError0(*this) << "ADMSbsimcmg: Parameter ASEJ value " << ASEJ << " out of range [ 0, (+inf) [";
1519  }
1520 
1521  // Parameter ADEJ : [ 0, (+inf) [
1522  if ( (!((ADEJ >=0))) )
1523  {
1524  UserError0(*this) << "ADMSbsimcmg: Parameter ADEJ value " << ADEJ << " out of range [ 0, (+inf) [";
1525  }
1526 
1527  // Parameter PSEJ : [ 0, (+inf) [
1528  if ( (!((PSEJ >=0))) )
1529  {
1530  UserError0(*this) << "ADMSbsimcmg: Parameter PSEJ value " << PSEJ << " out of range [ 0, (+inf) [";
1531  }
1532 
1533  // Parameter PDEJ : [ 0, (+inf) [
1534  if ( (!((PDEJ >=0))) )
1535  {
1536  UserError0(*this) << "ADMSbsimcmg: Parameter PDEJ value " << PDEJ << " out of range [ 0, (+inf) [";
1537  }
1538 
1539  // Parameter COVS : [ 0, (+inf) [
1540  if ( (!((COVS >=0))) )
1541  {
1542  UserError0(*this) << "ADMSbsimcmg: Parameter COVS value " << COVS << " out of range [ 0, (+inf) [";
1543  }
1544 
1545  // Parameter COVD : [ 0, (+inf) [
1546  if ( (!((COVD >=0))) )
1547  {
1548  UserError0(*this) << "ADMSbsimcmg: Parameter COVD value " << COVD << " out of range [ 0, (+inf) [";
1549  }
1550 
1551  // Parameter CGSP : [ 0, (+inf) [
1552  if ( (!((CGSP >=0))) )
1553  {
1554  UserError0(*this) << "ADMSbsimcmg: Parameter CGSP value " << CGSP << " out of range [ 0, (+inf) [";
1555  }
1556 
1557  // Parameter CGDP : [ 0, (+inf) [
1558  if ( (!((CGDP >=0))) )
1559  {
1560  UserError0(*this) << "ADMSbsimcmg: Parameter CGDP value " << CGDP << " out of range [ 0, (+inf) [";
1561  }
1562 
1563  // Parameter CDSP : [ 0, (+inf) [
1564  if ( (!((CDSP >=0))) )
1565  {
1566  UserError0(*this) << "ADMSbsimcmg: Parameter CDSP value " << CDSP << " out of range [ 0, (+inf) [";
1567  }
1568 
1569  // Parameter NRS : [ 0, (+inf) [
1570  if ( (!((NRS >=0))) )
1571  {
1572  UserError0(*this) << "ADMSbsimcmg: Parameter NRS value " << NRS << " out of range [ 0, (+inf) [";
1573  }
1574 
1575  // Parameter NRD : [ 0, (+inf) [
1576  if ( (!((NRD >=0))) )
1577  {
1578  UserError0(*this) << "ADMSbsimcmg: Parameter NRD value " << NRD << " out of range [ 0, (+inf) [";
1579  }
1580 
1581  // Parameter LRSD : ] 0, (+inf) [
1582  if ( (!((LRSD >0))) )
1583  {
1584  UserError0(*this) << "ADMSbsimcmg: Parameter LRSD value " << LRSD << " out of range ] 0, (+inf) [";
1585  }
1586 
1587 
1588  // this seems a little stupid, but verilog models that use $temperature
1589  // don't also use a defined parameter "Temp", and count on $temperature
1590  // to be the one the simulator wants:
1591 
1593 
1594  // and of course, this routine is where we should put the initial_instance
1595  // stuff
1596 
1597 
1598  return true;
1599 }
1600 
1601 //-----------------------------------------------------------------------------
1602 // Function : Instance::Instance
1603 // Purpose : "instance block" constructor
1604 // Special Notes :
1605 // Scope : public
1606 // Creator : admsXml
1607 // Creation Date :
1608 //-----------------------------------------------------------------------------
1609 
1611  const Configuration & configuration,
1612  const InstanceBlock & instance_block,
1613  Model & model,
1614  const FactoryBlock & factory_block)
1615  : DeviceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
1616  model_(model),
1617  L(30*1.0e-9),
1618  D(40*1.0e-9),
1619  TFIN(15*1.0e-9),
1620  FPITCH(80*1.0e-9),
1621  NFIN(1.0),
1622  NGCON(1),
1623  ASEO(0),
1624  ADEO(0),
1625  PSEO(0),
1626  PDEO(0),
1627  ASEJ(0),
1628  ADEJ(0),
1629  PSEJ(0),
1630  PDEJ(0),
1631  COVS(0),
1632  COVD(0.0),
1633  CGSP(0.0),
1634  CGDP(0.0),
1635  CDSP(0.0),
1636  NRS(0.0),
1637  NRD(0.0),
1638  LRSD(0.0),
1639  li_d(-1),
1640  li_g(-1),
1641  li_s(-1),
1642  li_e(-1),
1643  li_di(-1),
1644  li_si(-1),
1645  f_di_Equ_g_Node_Ptr(0),
1646  f_di_Equ_di_Node_Ptr(0),
1647  f_si_Equ_g_Node_Ptr(0),
1648  f_si_Equ_di_Node_Ptr(0),
1649  f_di_Equ_si_Node_Ptr(0),
1650  f_si_Equ_si_Node_Ptr(0),
1651  f_di_Equ_e_Node_Ptr(0),
1652  f_si_Equ_e_Node_Ptr(0),
1653  f_g_Equ_g_Node_Ptr(0),
1654  f_g_Equ_di_Node_Ptr(0),
1655  f_g_Equ_si_Node_Ptr(0),
1656  f_g_Equ_e_Node_Ptr(0),
1657  f_g_Equ_s_Node_Ptr(0),
1658  f_si_Equ_s_Node_Ptr(0),
1659  f_g_Equ_d_Node_Ptr(0),
1660  f_si_Equ_d_Node_Ptr(0),
1661  f_di_Equ_s_Node_Ptr(0),
1662  f_di_Equ_d_Node_Ptr(0),
1663  f_e_Equ_g_Node_Ptr(0),
1664  f_e_Equ_e_Node_Ptr(0),
1665  f_e_Equ_di_Node_Ptr(0),
1666  f_e_Equ_si_Node_Ptr(0),
1667  f_e_Equ_s_Node_Ptr(0),
1668  f_e_Equ_d_Node_Ptr(0),
1669  f_d_Equ_d_Node_Ptr(0),
1670  f_d_Equ_s_Node_Ptr(0),
1671  f_s_Equ_d_Node_Ptr(0),
1672  f_s_Equ_s_Node_Ptr(0),
1673  f_s_Equ_di_Node_Ptr(0),
1674  f_s_Equ_si_Node_Ptr(0),
1675  f_s_Equ_g_Node_Ptr(0),
1676  f_s_Equ_e_Node_Ptr(0),
1677  f_d_Equ_di_Node_Ptr(0),
1678  f_d_Equ_si_Node_Ptr(0),
1679  f_d_Equ_g_Node_Ptr(0),
1680  f_d_Equ_e_Node_Ptr(0),
1681  q_di_Equ_g_Node_Ptr(0),
1682  q_di_Equ_di_Node_Ptr(0),
1683  q_si_Equ_g_Node_Ptr(0),
1684  q_si_Equ_di_Node_Ptr(0),
1685  q_di_Equ_si_Node_Ptr(0),
1686  q_si_Equ_si_Node_Ptr(0),
1687  q_di_Equ_e_Node_Ptr(0),
1688  q_si_Equ_e_Node_Ptr(0),
1689  q_g_Equ_g_Node_Ptr(0),
1690  q_g_Equ_di_Node_Ptr(0),
1691  q_g_Equ_si_Node_Ptr(0),
1692  q_g_Equ_e_Node_Ptr(0),
1693  q_g_Equ_s_Node_Ptr(0),
1694  q_si_Equ_s_Node_Ptr(0),
1695  q_g_Equ_d_Node_Ptr(0),
1696  q_si_Equ_d_Node_Ptr(0),
1697  q_di_Equ_s_Node_Ptr(0),
1698  q_di_Equ_d_Node_Ptr(0),
1699  q_e_Equ_g_Node_Ptr(0),
1700  q_e_Equ_e_Node_Ptr(0),
1701  q_e_Equ_di_Node_Ptr(0),
1702  q_e_Equ_si_Node_Ptr(0),
1703  q_e_Equ_s_Node_Ptr(0),
1704  q_e_Equ_d_Node_Ptr(0),
1705  q_d_Equ_d_Node_Ptr(0),
1706  q_d_Equ_s_Node_Ptr(0),
1707  q_s_Equ_d_Node_Ptr(0),
1708  q_s_Equ_s_Node_Ptr(0),
1709  q_s_Equ_di_Node_Ptr(0),
1710  q_s_Equ_si_Node_Ptr(0),
1711  q_s_Equ_g_Node_Ptr(0),
1712  q_s_Equ_e_Node_Ptr(0),
1713  q_d_Equ_di_Node_Ptr(0),
1714  q_d_Equ_si_Node_Ptr(0),
1715  q_d_Equ_g_Node_Ptr(0),
1716  q_d_Equ_e_Node_Ptr(0),
1717  admsTemperature(getDeviceOptions().temp.getImmutableValue<double>())
1718 
1719 {
1720  numIntVars = 2 + 0;
1721  numExtVars = 4;
1722 
1723 
1724  // Right now, we only have state for limited probes...
1725  numStateVars = 0;
1726 
1727 
1728  // Set up jacobian stamp:
1729 
1730  if (jacStamp.empty())
1731  {
1732  jacStamp.resize(6);
1733  jacStamp[admsNodeID_d].resize(6);
1740  jacStamp[admsNodeID_g].resize(6);
1747  jacStamp[admsNodeID_s].resize(6);
1754  jacStamp[admsNodeID_e].resize(6);
1761  jacStamp[admsNodeID_di].resize(6);
1768  jacStamp[admsNodeID_si].resize(6);
1775 
1776 
1777  // This is really not strictly necessary when not mapping away nodes,
1778  // but makes life easier when we get to registerJacLIDs. This block
1779  // simply makes a map that leaves everything in place. Later, when we
1780  // start making nodes go away, we will need to modify this.
1781 
1782  int mapSize = jacStamp.size();
1783  jacMap.clear();
1784  jacMap2.clear();
1785  jacMap.resize(mapSize);
1786  jacMap2.resize(mapSize);
1787  for (int i=0;i<mapSize;++i)
1788  {
1789  int rowSize=jacStamp[i].size();
1790  jacMap[i]=i;
1791  jacMap2[i].resize(rowSize);
1792  for (int j=0;j<rowSize;++j)
1793  {
1794  jacMap2[i][j] = j;
1795  }
1796  }
1797 
1798  }
1799 
1800 
1801  setDefaultParams();
1802  setParams(instance_block.params);
1803  // set any non-constant parameter defaults
1804 
1805  // copy any model variables that have associated instance variables, but
1806  // are only given in the model card:
1807  if (!(given("L")))
1808  {
1809  L = model_.L;
1810  }
1811  if (!(given("D")))
1812  {
1813  D = model_.D;
1814  }
1815  if (!(given("TFIN")))
1816  {
1817  TFIN = model_.TFIN;
1818  }
1819  if (!(given("FPITCH")))
1820  {
1821  FPITCH = model_.FPITCH;
1822  }
1823  if (!(given("NFIN")))
1824  {
1825  NFIN = model_.NFIN;
1826  }
1827  if (!(given("NGCON")))
1828  {
1829  NGCON = model_.NGCON;
1830  }
1831  if (!(given("ASEO")))
1832  {
1833  ASEO = model_.ASEO;
1834  }
1835  if (!(given("ADEO")))
1836  {
1837  ADEO = model_.ADEO;
1838  }
1839  if (!(given("PSEO")))
1840  {
1841  PSEO = model_.PSEO;
1842  }
1843  if (!(given("PDEO")))
1844  {
1845  PDEO = model_.PDEO;
1846  }
1847  if (!(given("ASEJ")))
1848  {
1849  ASEJ = model_.ASEJ;
1850  }
1851  if (!(given("ADEJ")))
1852  {
1853  ADEJ = model_.ADEJ;
1854  }
1855  if (!(given("PSEJ")))
1856  {
1857  PSEJ = model_.PSEJ;
1858  }
1859  if (!(given("PDEJ")))
1860  {
1861  PDEJ = model_.PDEJ;
1862  }
1863  if (!(given("COVS")))
1864  {
1865  COVS = model_.COVS;
1866  }
1867  if (!(given("COVD")))
1868  {
1869  COVD = model_.COVD;
1870  }
1871  if (!(given("CGSP")))
1872  {
1873  CGSP = model_.CGSP;
1874  }
1875  if (!(given("CGDP")))
1876  {
1877  CGDP = model_.CGDP;
1878  }
1879  if (!(given("CDSP")))
1880  {
1881  CDSP = model_.CDSP;
1882  }
1883  if (!(given("NRS")))
1884  {
1885  NRS = model_.NRS;
1886  }
1887  if (!(given("NRD")))
1888  {
1889  NRD = model_.NRD;
1890  }
1891  if (!(given("LRSD")))
1892  {
1893  LRSD = model_.LRSD;
1894  }
1895 
1896 
1897 
1898  // Set any parameters that were not given and whose defaults depend on other
1899  // parameters:
1900  if (!given("COVD"))
1901  {
1902  COVD = COVS;
1903  }
1904  if (!given("LRSD"))
1905  {
1906  LRSD = L;
1907  }
1908 
1909 
1910  // Real bogosity here...
1911  if (!given("XYCEADMSINSTTEMP"))
1912  admsInstTemp=getDeviceOptions().temp.getImmutableValue<double>();
1913 
1914 
1915  //calculate any parameters specified as expressions
1917 
1918  // calculate dependent (i.e. computed params) and check for errors.
1919  processParams();
1920 }
1921 
1922 //-----------------------------------------------------------------------------
1923 // Function : Instance::~Instance
1924 // Purpose : destructor
1925 // Special Notes :
1926 // Scope : public
1927 // Creator : admsXml
1928 // Creation Date :
1929 //-----------------------------------------------------------------------------
1931 {
1932 }
1933 
1934 //-----------------------------------------------------------------------------
1935 // Function : Instance::registerLIDs
1936 // Purpose : function for registering, and setting up, local ID's.
1937 // Special Notes :
1938 // Scope : public
1939 // Creator : admsXml
1940 // Creation Date :
1941 //-----------------------------------------------------------------------------
1942 void Instance::registerLIDs( const std::vector<int> & intLIDVecRef,
1943  const std::vector<int> & extLIDVecRef)
1944 {
1945  AssertLIDs(intLIDVecRef.size() == numIntVars);
1946  AssertLIDs(extLIDVecRef.size() == numExtVars);
1947 
1948 #ifdef Xyce_DEBUG_DEVICE
1949 
1950  if (getDeviceOptions().debugLevel > 0)
1951  {
1952  Xyce::dout() << std::endl << section_divider << std::endl;
1953  Xyce::dout() << "In ADMSbsimcmg::Instance::register LIDs\n\n";
1954  Xyce::dout() << "name = " << getName() << std::endl;
1955  Xyce::dout() << "number of internal variables: " << numIntVars << std::endl;
1956  Xyce::dout() << "number of external variables: " << numExtVars << std::endl;
1957  }
1958 #endif
1959 
1960  // copy over the global ID lists.
1961  intLIDVec = intLIDVecRef;
1962  extLIDVec = extLIDVecRef;
1963 
1964  // Now use these lists to obtain the indices into the linear algebra
1965  // entities. This assumes an order.
1966  int i=0;
1967  li_d = extLIDVecRef[i++];
1968  li_g = extLIDVecRef[i++];
1969  li_s = extLIDVecRef[i++];
1970  li_e = extLIDVecRef[i++];
1971 
1972 
1973  i=0;
1974  li_di = intLIDVecRef[i++];
1975  li_si = intLIDVecRef[i++];
1976 
1977 
1978 #ifdef Xyce_DEBUG_DEVICE
1979  if (getDeviceOptions().debugLevel > 0)
1980  {
1981  Xyce::dout() << "\nSolution and RHS variables:\n";
1982  Xyce::dout() << "\nli_d = " << li_d << std::endl;
1983  Xyce::dout() << "\nli_g = " << li_g << std::endl;
1984  Xyce::dout() << "\nli_s = " << li_s << std::endl;
1985  Xyce::dout() << "\nli_e = " << li_e << std::endl;
1986  Xyce::dout() << "\nli_di = " << li_di << std::endl;
1987  Xyce::dout() << "\nli_si = " << li_si << std::endl;
1988  }
1989 #endif
1990 
1991 #ifdef Xyce_DEBUG_DEVICE
1992  if (getDeviceOptions().debugLevel > 0)
1993  {
1994  Xyce::dout() << "\nEnd of ADMSbsimcmg::Instance::register LIDs\n";
1995  Xyce::dout() << section_divider << std::endl;
1996  }
1997 #endif
1998 }
1999 
2000 //-----------------------------------------------------------------------------
2001 // Function : Instance::getIntNameMap
2002 // Purpose :
2003 // Special Notes :
2004 // Scope : public
2005 // Creator : admsXml
2006 // Creation Date :
2007 //-----------------------------------------------------------------------------
2008 std::map<int,std::string> & Instance::getIntNameMap ()
2009 {
2010  if (intNameMap.empty())
2011  {
2014  }
2015  return intNameMap;
2016 }
2017 
2018 //-----------------------------------------------------------------------------
2019 // Function : Instance::registerStateLIDs
2020 // Purpose :
2021 // Special Notes :
2022 // Scope : public
2023 // Creator : admsXml
2024 // Creation Date :
2025 //-----------------------------------------------------------------------------
2026 void Instance::registerStateLIDs( const std::vector<int> & staLIDVecRef)
2027 {
2028  AssertLIDs(staLIDVecRef.size() == numStateVars);
2029 }
2030 
2031 //-----------------------------------------------------------------------------
2032 // Function : Instance::jacobianStamp
2033 // Purpose :
2034 // Special Notes : In initial version, we won't support mapping away nodes
2035 // Scope : public
2036 // Creator : admsXml
2037 // Creation Date :
2038 //-----------------------------------------------------------------------------
2039 const std::vector< std::vector<int> > & Instance::jacobianStamp() const
2040 {
2041  return jacStamp;
2042 }
2043 
2044 //-----------------------------------------------------------------------------
2045 // Function : Instance::registerJacLIDs
2046 // Purpose : Create Offset variables used for referencing jacobian
2047 // elements
2048 // Special Notes :
2049 // Scope : public
2050 // Creator : admsXml
2051 // Creation Date :
2052 //-----------------------------------------------------------------------------
2053 void Instance::registerJacLIDs( const std::vector< std::vector<int> > & jacLIDVec)
2054 {
2056  std::vector<int> & map=jacMap;
2057  std::vector< std::vector<int> > & map2=jacMap2;
2058 
2059 
2060  // do nothing, we won't use the jac lids anymore, we'll use pointers
2061 
2062 }
2063 
2064 //-----------------------------------------------------------------------------
2065 // Function : Instance::setupPointers
2066 // Purpose : Create pointer variables used for referencing jacobian
2067 // elements
2068 // Special Notes :
2069 // Scope : public
2070 // Creator : admsXml
2071 // Creation Date :
2072 //-----------------------------------------------------------------------------
2074 {
2075 
2076  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
2077  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
2078  f_d_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_d);
2079  q_d_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_d);
2080  f_d_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_s);
2081  q_d_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_s);
2082  f_d_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_di);
2083  q_d_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_di);
2084  f_d_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_si);
2085  q_d_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_si);
2086  f_d_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_g);
2087  q_d_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_g);
2088  f_d_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_e);
2089  q_d_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_e);
2090  f_g_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_g);
2091  q_g_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_g);
2092  f_g_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_di);
2093  q_g_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_di);
2094  f_g_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_si);
2095  q_g_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_si);
2096  f_g_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_e);
2097  q_g_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_e);
2098  f_g_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_s);
2099  q_g_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_s);
2100  f_g_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_d);
2101  q_g_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_d);
2102  f_s_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_d);
2103  q_s_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_d);
2104  f_s_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_s);
2105  q_s_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_s);
2106  f_s_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_di);
2107  q_s_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_di);
2108  f_s_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_si);
2109  q_s_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_si);
2110  f_s_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_g);
2111  q_s_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_g);
2112  f_s_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_e);
2113  q_s_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_e);
2114  f_e_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_g);
2115  q_e_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_g);
2116  f_e_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_e);
2117  q_e_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_e);
2118  f_e_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_di);
2119  q_e_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_di);
2120  f_e_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_si);
2121  q_e_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_si);
2122  f_e_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_s);
2123  q_e_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_s);
2124  f_e_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_d);
2125  q_e_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_d);
2126  f_di_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_g);
2127  q_di_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_g);
2128  f_di_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_di);
2129  q_di_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_di);
2130  f_di_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_si);
2131  q_di_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_si);
2132  f_di_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_e);
2133  q_di_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_e);
2134  f_di_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_s);
2135  q_di_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_s);
2136  f_di_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_d);
2137  q_di_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_d);
2138  f_si_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_g);
2139  q_si_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_g);
2140  f_si_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_di);
2141  q_si_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_di);
2142  f_si_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_si);
2143  q_si_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_si);
2144  f_si_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_e);
2145  q_si_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_e);
2146  f_si_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_s);
2147  q_si_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_s);
2148  f_si_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_d);
2149  q_si_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_d);
2150 
2151 
2152 }
2153 
2154 // RHS load functions
2155 
2156 //-----------------------------------------------------------------------------
2157 // Function : Instance::loadDAEFVector
2158 // Purpose : load F vector (static contributions) for one instance for
2159 // NEW DAE formulation
2160 // Special Notes :
2161 // Scope : public
2162 // Creator : admsXml
2163 // Creation Date :
2164 //-----------------------------------------------------------------------------
2166 {
2167 
2168  bool bsuccess=true;
2169 
2176 
2177  return bsuccess;
2178 }
2179 
2180 //-----------------------------------------------------------------------------
2181 // Function : Instance::loadDAEQVector
2182 // Purpose : load Q vector (dynamic contributions) for one instance for
2183 // NEW DAE formulation
2184 // Special Notes :
2185 // Scope : public
2186 // Creator : admsXml
2187 // Creation Date :
2188 //-----------------------------------------------------------------------------
2190 {
2197 
2198  return true;
2199 }
2200 
2201 
2202 //-----------------------------------------------------------------------------
2203 // Function : Instance::updatePrimaryState
2204 // Purpose :
2205 // Special Notes : In this initial implementation, does little more than
2206 // call updateIntermediateVars()
2207 // Scope : public
2208 // Creator : admsXml
2209 // Creation Date :
2210 //-----------------------------------------------------------------------------
2212 {
2213  bool bsuccess = true;
2214 
2215  bsuccess = updateIntermediateVars();
2216 
2217  // if old DAE were implemented, we'd save dynamic contributions as state
2218  // here.
2219 
2220 
2221  return bsuccess;
2222 }
2223 
2224 //-----------------------------------------------------------------------------
2225 // Function : Instance::updateSecondaryState
2226 // Purpose :
2227 // Special Notes : In this initial implementation, does nothing
2228 // Scope : public
2229 // Creator : admsXml
2230 // Creation Date :
2231 //-----------------------------------------------------------------------------
2233 {
2234  bool bsuccess = true;
2235 
2236  // were old DAE implemented, we'd pull dynamic contribution derivatives
2237  // out of state.
2238 
2239  return bsuccess;
2240 }
2241 
2242 //-----------------------------------------------------------------------------
2243 // Function : Instance::updateIntermediateVars
2244 // Purpose : update intermediate variables for one bsimcmg instance
2245 // Special Notes :
2246 // Scope : public
2247 // Creator : admsXml
2248 // Creation Date :
2249 //-----------------------------------------------------------------------------
2251 {
2252 
2253  bool bsuccess=true;
2254  N_LAS_Vector * solVectorPtr = extData.nextSolVectorPtr;
2255 
2256 #ifdef Xyce_DEBUG_DEVICE
2257  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
2258  {
2259  Xyce::dout() << std::endl << subsection_divider << std::endl;
2260  Xyce::dout() << " In ADMSbsimcmg::Instance::updateIntermediateVars\n\n";
2261  Xyce::dout() << " name = " << getName() << std::endl;
2262  }
2263 #endif
2264 
2265  // Local variables
2266  AdmsFadType sid;
2267  AdmsFadType Swi;
2268  double T10;
2269  AdmsFadType Ssi;
2270  AdmsFadType Nstar;
2271  AdmsFadType Nl;
2272  AdmsFadType N0;
2273  AdmsFadType DelClm;
2274  double Leffnoisq;
2275  double Leffnoi;
2276  AdmsFadType Esatnoi;
2277  AdmsFadType IdovVds;
2278  AdmsFadType vge_overlap;
2279  AdmsFadType Qedj3;
2280  AdmsFadType Qedj2;
2281  AdmsFadType Qedj1;
2282  AdmsFadType Qesj3;
2283  AdmsFadType Qesj2;
2284  double vec;
2285  double pb2;
2286  AdmsFadType Qec;
2287  AdmsFadType arg;
2288  AdmsFadType sarg;
2289  AdmsFadType Qesj1;
2290  AdmsFadType T4a;
2291  AdmsFadType T1_exp;
2292  AdmsFadType Vdseffx;
2293  AdmsFadType igc0;
2294  AdmsFadType Voxacc;
2295  AdmsFadType Vaux_Igbacc;
2296  double vfbzb;
2297  AdmsFadType Vaux_Igbinv;
2298  double ALPHAII;
2299  AdmsFadType VgsStep;
2300  AdmsFadType Vdsatii;
2301  AdmsFadType Vdiff;
2302  AdmsFadType Ratio;
2303  AdmsFadType cgsp;
2304  AdmsFadType cgdp;
2305  AdmsFadType vgd_overlap;
2306  AdmsFadType vgs_overlap;
2307  AdmsFadType qgd_ov;
2308  AdmsFadType qgs_ov;
2309  AdmsFadType qinv;
2310  AdmsFadType inv_MclmCV;
2311  AdmsFadType dqi_idscv;
2312  AdmsFadType beta_cv;
2313  AdmsFadType idscv;
2314  AdmsFadType Tcom;
2315  AdmsFadType vgd_eff;
2316  AdmsFadType vgs_eff;
2317  AdmsFadType Dr;
2318  AdmsFadType Rdsi;
2319  AdmsFadType ids0_ov_dqi;
2320  AdmsFadType ids0;
2321  AdmsFadType MclmCV;
2322  AdmsFadType DvsatCV;
2323  AdmsFadType EsatCVL;
2324  AdmsFadType EsatCV;
2325  AdmsFadType Mob;
2326  AdmsFadType Mnud;
2327  AdmsFadType Nsat;
2328  AdmsFadType Dvsat;
2329  AdmsFadType Esat1L;
2330  AdmsFadType Esat1;
2331  AdmsFadType Mclm;
2332  AdmsFadType Moc;
2333  AdmsFadType VaDIBL;
2334  AdmsFadType Vgst2Vtm;
2335  AdmsFadType diffVds;
2336  AdmsFadType PVAGfactor;
2337  AdmsFadType DIBLfactor;
2338  AdmsFadType Dmob_cv;
2339  AdmsFadType Eeffm_cv;
2340  AdmsFadType ueff;
2341  AdmsFadType Dmob;
2342  AdmsFadType Eeffm;
2343  AdmsFadType beta;
2344  AdmsFadType coxeff;
2345  AdmsFadType qia2;
2346  AdmsFadType dqi;
2347  AdmsFadType qia;
2348  double qba;
2349  AdmsFadType phid;
2350  AdmsFadType vpolyd;
2351  AdmsFadType Vdseff;
2352  AdmsFadType Vdsat;
2353  AdmsFadType Tc;
2354  AdmsFadType Ta;
2355  double WVCox;
2356  AdmsFadType T6;
2357  AdmsFadType EsatL;
2358  AdmsFadType Esat;
2359  AdmsFadType Rdss;
2360  AdmsFadType Dmobs;
2361  double qb0;
2362  AdmsFadType Eeffs;
2363  AdmsFadType phis;
2364  AdmsFadType TA;
2365  AdmsFadType T9;
2366  AdmsFadType T8;
2367  AdmsFadType T7;
2368  AdmsFadType T5;
2369  AdmsFadType T4;
2370  AdmsFadType secg0;
2371  AdmsFadType cosg0;
2372  AdmsFadType guessB;
2373  AdmsFadType guessA;
2374  AdmsFadType vpolys;
2375  AdmsFadType vch;
2376  AdmsFadType tang0a;
2377  AdmsFadType g0a;
2378  AdmsFadType e3;
2379  AdmsFadType e2;
2380  AdmsFadType e1;
2381  AdmsFadType e0;
2382  AdmsFadType inv_g0;
2383  AdmsFadType lncosg0;
2384  AdmsFadType secg0sq;
2385  AdmsFadType lng0;
2386  AdmsFadType tang0;
2387  AdmsFadType g0;
2388  AdmsFadType z2;
2389  AdmsFadType z1;
2390  AdmsFadType expff;
2391  AdmsFadType F0;
2392  AdmsFadType inv_g0sq;
2393  AdmsFadType vgsfbeff;
2394  AdmsFadType cdop;
2395  AdmsFadType vtdop_acc;
2396  AdmsFadType vtdop;
2397  AdmsFadType dvth_all;
2398  double dvth_rsce;
2399  AdmsFadType dvth_dibl;
2400  double dvth_vtroll;
2401  AdmsFadType nVtm;
2402  AdmsFadType cdsc;
2403  double phist;
2404  AdmsFadType inv_MEXP;
2405  AdmsFadType RDDR_a;
2406  AdmsFadType RSDR_a;
2407  AdmsFadType VSAT1_a;
2408  AdmsFadType PTWG_a;
2409  AdmsFadType MEXP_a;
2410  AdmsFadType PDIBL1_a;
2411  AdmsFadType ETA0_a;
2412  AdmsFadType CDSCD_a;
2413  AdmsFadType wr;
2414  AdmsFadType wf;
2415  AdmsFadType veseff;
2416  double vesmax;
2417  AdmsFadType vesx;
2418  AdmsFadType vdsx;
2419  AdmsFadType Qedj;
2420  AdmsFadType Qesj;
2421  AdmsFadType etaiv;
2422  AdmsFadType vgsfb;
2423  AdmsFadType ves;
2424  AdmsFadType vgd;
2425  AdmsFadType vds;
2426  AdmsFadType vgs;
2427  AdmsFadType vge;
2428  AdmsFadType ved_jct;
2429  AdmsFadType ves_jct;
2430  AdmsFadType vgd_noswap;
2431  AdmsFadType vds_noswap;
2432  AdmsFadType vgs_noswap;
2433  double TRatio;
2434  double delTemp;
2435  double Vtm;
2436  double Vtm0;
2437  double Eg;
2438  double Eg0;
2439  double ni;
2440  double Nc;
2441  double ThetaSS;
2442  double kT;
2443  double E0;
2444  double E0prime;
2445  double E1;
2446  double E1prime;
2447  double gam0;
2448  double gam1;
2449  double dvch_qm;
2450  double ETA0_t;
2451  double ETA0R_t;
2452  double U0_t;
2453  double u0;
2454  double ETAMOB_t;
2455  double UA_t;
2456  double UC_t;
2457  double UD_t;
2458  double UCS_t;
2459  double rdstemp;
2460  double RSDR_t;
2461  double RSDRR_t;
2462  double RDDR_t;
2463  double RDDRR_t;
2464  double VSAT_t;
2465  double VSAT1_t;
2466  double VSAT1R_t;
2467  double VSATCV_t;
2468  double MEXP_t;
2469  double MEXPR_t;
2470  double PTWG_t;
2471  double PTWGR_t;
2472  double dvth_temp;
2473  double BETA0_t;
2474  double SII0_t;
2475  double K0_t;
2476  double K0SI_t;
2477  double K1SI_t;
2478  double K1_t;
2479  double K1SAT_t;
2480  double A1_t;
2481  double A2_t;
2482  double AIGBINV_t;
2483  double AIGBACC_t;
2484  double AIGC_t;
2485  double AIGS_t;
2486  double AIGD_t;
2487  double BGIDL_t;
2488  double BGISL_t;
2489  double ALPHA0_t;
2490  double ALPHA1_t;
2491  double ALPHAII0_t;
2492  double ALPHAII1_t;
2493  double igtemp;
2494  double igsd_mult;
2495  double beta0;
2496  double vfbsd;
2497  double phib;
2498  double vbi;
2499  double deltaPhi;
2500  double vpoly0;
2501  double cpoly;
2502  double kpoly;
2503  double g0max;
2504  double g0min;
2505  double r2;
2506  double eta_mu;
2507  double eta_mu_cv;
2508  AdmsFadType Tb;
2509  double igentemp;
2510  double DevTemp;
2511  int initialized;
2512  double R;
2513  AdmsFadType vgsfbeff_acc;
2514  AdmsFadType vt0;
2515  AdmsFadType vt0_acc;
2516  AdmsFadType F1;
2517  double F1_acc;
2518  AdmsFadType cdop_acc;
2519  AdmsFadType qid;
2520  AdmsFadType qis;
2521  AdmsFadType tang0d;
2522  AdmsFadType tang0s;
2523  AdmsFadType T11;
2524  AdmsFadType T12;
2525  AdmsFadType T13;
2526  AdmsFadType T14;
2527  AdmsFadType ids;
2528  double sigvds;
2529  AdmsFadType Iii;
2530  AdmsFadType qd;
2531  AdmsFadType qg;
2532  AdmsFadType qs;
2533  double qb;
2534  double Qbul;
2535  AdmsFadType aab;
2536  double Weff0;
2537  double WeffCV0;
2538  AdmsFadType Weff;
2539  AdmsFadType WeffCV;
2540  double CJS_t;
2541  double CJSWS_t;
2542  double CJSWGS_t;
2543  double CJD_t;
2544  double CJSWD_t;
2545  double CJSWGD_t;
2546  double PBS_t;
2547  double PBSWS_t;
2548  double PBSWGS_t;
2549  double PBD_t;
2550  double PBSWD_t;
2551  double PBSWGD_t;
2552  double JSS_t;
2553  double JSWS_t;
2554  double JSWGS_t;
2555  double JSD_t;
2556  double JSWD_t;
2557  double JSWGD_t;
2558  double JTSS_t;
2559  double JTSSWS_t;
2560  double JTSSWGS_t;
2561  double JTSD_t;
2562  double JTSSWD_t;
2563  double JTSSWGD_t;
2564  double NJTS_t;
2565  double NJTSSW_t;
2566  double NJTSSWG_t;
2567  double NJTSD_t;
2568  double NJTSSWD_t;
2569  double NJTSSWGD_t;
2570  AdmsFadType Ies;
2571  AdmsFadType Ied;
2572  double Czbs;
2573  double Czbssw;
2574  double Czbsswg;
2575  double Czbd;
2576  double Czbdsw;
2577  double Czbdswg;
2578  AdmsFadType Qes;
2579  AdmsFadType Qed;
2580  AdmsFadType Qeg;
2581  double Isbs;
2582  double Isbd;
2583  double Nvtms;
2584  double Nvtmd;
2585  double SslpRev;
2586  double IVjsmRev;
2587  double VjsmRev;
2588  double SslpFwd;
2589  double IVjsmFwd;
2590  double VjsmFwd;
2591  double DslpRev;
2592  double IVjdmRev;
2593  double VjdmRev;
2594  double DslpFwd;
2595  double IVjdmFwd;
2596  double VjdmFwd;
2597  double XExpBVS;
2598  double XExpBVD;
2599  AdmsFadType idsgen;
2600  double phibulk;
2601  double phipert;
2602  AdmsFadType g0s;
2603  AdmsFadType g0d;
2604  double r1;
2605  AdmsFadType q0;
2606  double F2;
2607  double Inv_r1pi;
2608  AdmsFadType Tcen;
2609  double MTcen;
2610  AdmsFadType Rdrain;
2611  AdmsFadType Rsource;
2612  double Cfr_geo;
2613  AdmsFadType igbinv;
2614  AdmsFadType igbs;
2615  AdmsFadType igbd;
2616  AdmsFadType igbacc;
2617  AdmsFadType igcs;
2618  AdmsFadType igcd;
2619  AdmsFadType igidl;
2620  AdmsFadType igisl;
2621  AdmsFadType igs;
2622  AdmsFadType igd;
2623  AdmsFadType cox_acc;
2624  double r1_acc;
2625  double Inv_r1pi_acc;
2626  double CGSO_i;
2627  double CGDO_i;
2628  double q0_acc;
2629  AdmsFadType qb_acc;
2630  AdmsFadType qg_acc;
2631  AdmsFadType qi_acc;
2632  AdmsFadType qgs_fr;
2633  AdmsFadType qgd_fr;
2634  AdmsFadType qds_fr;
2635  AdmsFadType qgs_parasitic;
2636  AdmsFadType qgd_parasitic;
2637  AdmsFadType FNPowerAt1Hz;
2638  AdmsFadType Gtnoi;
2639  AdmsFadType gspr;
2640  AdmsFadType gdpr;
2641  int devsign;
2642  double epssub;
2643  double epssp;
2644  double cox;
2645  double csi;
2646  double cbox;
2647  double epsratio;
2648  double scl;
2649  double heff;
2650  double mx;
2651  double mxprime;
2652  double md;
2653  double mdprime;
2654  double gprime;
2655  double gfactor;
2656  double Lg;
2657  double deltaL;
2658  double deltaLCV;
2659  double Leff;
2660  double LeffCV;
2661  double LeffCV_acc;
2662  double NFINtotal;
2663  double Inv_L;
2664  double Inv_NFIN;
2665  double Inv_LNFIN;
2666  double NBODY_i;
2667  double PHIG_i;
2668  double NGATE_i;
2669  double CIT_i;
2670  double CDSC_i;
2671  double CDSCD_i;
2672  double DVT0_i;
2673  double DVT1_i;
2674  double DVT1SS_i;
2675  double PHIN_i;
2676  double ETA0_i;
2677  double DSUB_i;
2678  double K1RSCE_i;
2679  double LPE0_i;
2680  double DVTSHIFT_i;
2681  double K0_i;
2682  double K01_i;
2683  double K0SI_i;
2684  double K0SI1_i;
2685  double K1SI_i;
2686  double K1SI1_i;
2687  double PHIBE_i;
2688  double K1_i;
2689  double K11_i;
2690  double K1SAT_i;
2691  double K1SAT1_i;
2692  double QMFACTOR_i;
2693  double QMTCENIV_i;
2694  double QMTCENCV_i;
2695  double QMTCENCVA_i;
2696  double VSAT_i;
2697  double VSAT1_i;
2698  double VSATCV_i;
2699  double DELTAVSAT_i;
2700  double PSAT_i;
2701  double DELTAVSATCV_i;
2702  double PSATCV_i;
2703  double KSATIV_i;
2704  double MEXP_i;
2705  double PTWG_i;
2706  double U0_i;
2707  double ETAMOB_i;
2708  double UP_i;
2709  double UA_i;
2710  double UC_i;
2711  double EU_i;
2712  double UD_i;
2713  double UCS_i;
2714  double PCLM_i;
2715  double PCLMG_i;
2716  double PCLMCV_i;
2717  double A1_i;
2718  double A11_i;
2719  double A2_i;
2720  double A21_i;
2721  double RDSW_i;
2722  double RSW_i;
2723  double RDW_i;
2724  double PRWGD_i;
2725  double PRWGS_i;
2726  double WR_i;
2727  double PDIBL1_i;
2728  double PDIBL2_i;
2729  double DROUT_i;
2730  double PVAG_i;
2731  double AIGBINV_i;
2732  double AIGBINV1_i;
2733  double BIGBINV_i;
2734  double CIGBINV_i;
2735  double EIGBINV_i;
2736  double NIGBINV_i;
2737  double AIGBACC_i;
2738  double AIGBACC1_i;
2739  double BIGBACC_i;
2740  double CIGBACC_i;
2741  double NIGBACC_i;
2742  double AIGC_i;
2743  double AIGC1_i;
2744  double BIGC_i;
2745  double CIGC_i;
2746  double PIGCD_i;
2747  double AIGS_i;
2748  double AIGS1_i;
2749  double BIGS_i;
2750  double CIGS_i;
2751  double AIGD_i;
2752  double AIGD1_i;
2753  double BIGD_i;
2754  double CIGD_i;
2755  double NTOX_i;
2756  double POXEDGE_i;
2757  double AGIDL_i;
2758  double BGIDL_i;
2759  double CGIDL_i;
2760  double EGIDL_i;
2761  double PGIDL_i;
2762  double AGISL_i;
2763  double BGISL_i;
2764  double CGISL_i;
2765  double EGISL_i;
2766  double PGISL_i;
2767  double ALPHA0_i;
2768  double ALPHA1_i;
2769  double ALPHAII0_i;
2770  double ALPHAII1_i;
2771  double BETA0_i;
2772  double BETAII0_i;
2773  double BETAII1_i;
2774  double BETAII2_i;
2775  double ESATII_i;
2776  double LII_i;
2777  double SII0_i;
2778  double SII1_i;
2779  double SII2_i;
2780  double SIID_i;
2781  double TII_i;
2782  double CFS_i;
2783  double CFD_i;
2784  AdmsFadType COVS_i;
2785  AdmsFadType COVD_i;
2786  double CGSL_i;
2787  double CGDL_i;
2788  double CGBL_i;
2789  double CKAPPAS_i;
2790  double CKAPPAD_i;
2791  double CKAPPAB_i;
2792  double NTGEN_i;
2793  double AIGEN_i;
2794  double BIGEN_i;
2795  double CDSCDR_i;
2796  double ETA0R_i;
2797  double VSAT1R_i;
2798  double MEXPR_i;
2799  double PTWGR_i;
2800  double PDIBL1R_i;
2801  double UTE_i;
2802  double UTL_i;
2803  double EMOBT_i;
2804  double UA1_i;
2805  double UC1_i;
2806  double UD1_i;
2807  double UCSTE_i;
2808  double PTWGT_i;
2809  double AT_i;
2810  double PRT_i;
2811  double KT1_i;
2812  double TSS_i;
2813  double IIT_i;
2814  double TGIDL_i;
2815  double IGT_i;
2816  double Tcen0;
2817  double RDSWMIN_i;
2818  double RSWMIN_i;
2819  double RDWMIN_i;
2820  double LINTIGEN_i;
2821  double LINTNOI_i;
2822  double NTNOI_i;
2823  double Arsd;
2824  double Prsd;
2825  double mu_max;
2826  double mu_rsd;
2827  double rhorsd;
2828  double thetarsp;
2829  double afin;
2830  AdmsFadType T1;
2831  double Rsp;
2832  double arsd_total;
2833  double prsd_total;
2834  double lt;
2835  double alpha;
2836  AdmsFadType T0;
2837  double eta;
2838  AdmsFadType T2;
2839  AdmsFadType T3;
2840  double RrsdTML;
2841  double Rrsdside;
2842  double Rrsd;
2843  double Rdsgeo;
2844  double RSourceGeo;
2845  double RDrainGeo;
2846  double Hg;
2847  double Trsd;
2848  double Wg;
2849  double Hrsd;
2850  double Cgg_top;
2851  double Cgg_side;
2852  double Acorner;
2853  double Ccorner;
2854  double csbox;
2855  double cdbox;
2856  double cgbox;
2857  double EeffFactor;
2858  double WeffWRFactor;
2859  double litl;
2860  double tmp;
2861  double Theta_SCE;
2862  double Theta_SW;
2863  double Theta_DIBL;
2864  double Theta_RSCE;
2865  double nbody;
2866  double qbs;
2867  double Aechvb;
2868  double Bechvb;
2869  double Toxratio;
2870  double Toxratioedge;
2871  double igsd_mult0;
2872  double Tnom;
2873 
2874 
2875  // set the sizes of the Fad arrays:
2876 
2877  if (probeVars.size() != (14))
2878  {
2879  probeVars.resize(14);
2880  staticContributions.resize(6+0);
2881  dynamicContributions.resize(6+0);
2882  }
2883 
2884  // initialize contributions to zero (automatically sets derivatives to zero)
2885  for (int i=0; i < 6+0 ; ++i)
2886  {
2887  staticContributions[i]=0;
2888  dynamicContributions[i]=0;
2889  }
2890 
2891  // extract solution variables and set as Fad independent variables.
2892  probeVars[admsProbeID_V_s_si] = (*solVectorPtr)[li_s] - (*solVectorPtr)[li_si];
2894 
2895  probeVars[admsProbeID_V_d_di] = (*solVectorPtr)[li_d] - (*solVectorPtr)[li_di];
2897 
2898  probeVars[admsProbeID_V_e_g] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_g];
2900 
2901  probeVars[admsProbeID_V_d_s] = (*solVectorPtr)[li_d] - (*solVectorPtr)[li_s];
2903 
2904  probeVars[admsProbeID_V_g_d] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_d];
2906 
2907  probeVars[admsProbeID_V_g_s] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_s];
2909 
2910  probeVars[admsProbeID_V_di_d] = (*solVectorPtr)[li_di] - (*solVectorPtr)[li_d];
2912 
2913  probeVars[admsProbeID_V_si_s] = (*solVectorPtr)[li_si] - (*solVectorPtr)[li_s];
2915 
2916  probeVars[admsProbeID_V_g_e] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_e];
2918 
2919  probeVars[admsProbeID_V_e_di] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_di];
2921 
2922  probeVars[admsProbeID_V_e_si] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_si];
2924 
2925  probeVars[admsProbeID_V_g_di] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_di];
2927 
2928  probeVars[admsProbeID_V_di_si] = (*solVectorPtr)[li_di] - (*solVectorPtr)[li_si];
2930 
2931  probeVars[admsProbeID_V_g_si] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_si];
2933 
2934 
2935  // -- code converted from analog/code block
2936  //Begin block CMGBiasIndepCalc
2937  {
2938  initialized = 1;
2939  R = 0;
2940  vgsfbeff_acc = 0;
2941  vt0 = 0;
2942  vt0_acc = 0;
2943  F1 = 0;
2944  F1_acc = 0;
2945  cdop_acc = 0;
2946  qid = 0;
2947  qis = 0;
2948  tang0d = 0;
2949  tang0s = 0;
2950  T11 = 0;
2951  T12 = 0;
2952  T13 = 0;
2953  T14 = 0;
2954  ids = 0;
2955  sigvds = 0;
2956  Iii = 0;
2957  qd = 0;
2958  qg = 0;
2959  qs = 0;
2960  qb = 0;
2961  Qbul = 0;
2962  aab = 0;
2963  Weff0 = 0;
2964  WeffCV0 = 0;
2965  Weff = 0;
2966  WeffCV = 0;
2967  CJS_t = 0;
2968  CJSWS_t = 0;
2969  CJSWGS_t = 0;
2970  CJD_t = 0;
2971  CJSWD_t = 0;
2972  CJSWGD_t = 0;
2973  PBS_t = 0;
2974  PBSWS_t = 0;
2975  PBSWGS_t = 0;
2976  PBD_t = 0;
2977  PBSWD_t = 0;
2978  PBSWGD_t = 0;
2979  JSS_t = 0;
2980  JSWS_t = 0;
2981  JSWGS_t = 0;
2982  JSD_t = 0;
2983  JSWD_t = 0;
2984  JSWGD_t = 0;
2985  JTSS_t = 0;
2986  JTSSWS_t = 0;
2987  JTSSWGS_t = 0;
2988  JTSD_t = 0;
2989  JTSSWD_t = 0;
2990  JTSSWGD_t = 0;
2991  NJTS_t = 0;
2992  NJTSSW_t = 0;
2993  NJTSSWG_t = 0;
2994  NJTSD_t = 0;
2995  NJTSSWD_t = 0;
2996  NJTSSWGD_t = 0;
2997  Ies = 0;
2998  Ied = 0;
2999  Czbs = 0;
3000  Czbssw = 0;
3001  Czbsswg = 0;
3002  Czbd = 0;
3003  Czbdsw = 0;
3004  Czbdswg = 0;
3005  Qes = 0;
3006  Qed = 0;
3007  Qeg = 0;
3008  Isbs = 0;
3009  Isbd = 0;
3010  Nvtms = 0;
3011  Nvtmd = 0;
3012  SslpRev = 0;
3013  IVjsmRev = 0;
3014  VjsmRev = 0;
3015  SslpFwd = 0;
3016  IVjsmFwd = 0;
3017  VjsmFwd = 0;
3018  DslpRev = 0;
3019  IVjdmRev = 0;
3020  VjdmRev = 0;
3021  DslpFwd = 0;
3022  IVjdmFwd = 0;
3023  VjdmFwd = 0;
3024  XExpBVS = 0;
3025  XExpBVD = 0;
3026  idsgen = 0;
3027  phibulk = 0;
3028  phipert = 0;
3029  g0s = 0;
3030  g0d = 0;
3031  r1 = 0;
3032  q0 = 0;
3033  F2 = 0;
3034  Inv_r1pi = 0;
3035  Tcen = 0;
3036  MTcen = 0;
3037  Rdrain = 0;
3038  Rsource = 0;
3039  Cfr_geo = 0;
3040  igbinv = 0;
3041  igbs = 0;
3042  igbd = 0;
3043  igbacc = 0;
3044  igcs = 0;
3045  igcd = 0;
3046  igidl = 0;
3047  igisl = 0;
3048  igs = 0;
3049  igd = 0;
3050  cox_acc = 0;
3051  r1_acc = 0;
3052  Inv_r1pi_acc = 0;
3053  CGSO_i = 0;
3054  CGDO_i = 0;
3055  q0_acc = 0;
3056  qb_acc = 0;
3057  qg_acc = 0;
3058  qi_acc = 0;
3059  qgs_fr = 0;
3060  qgd_fr = 0;
3061  qds_fr = 0;
3062  qgs_parasitic = 0;
3063  qgd_parasitic = 0;
3064  FNPowerAt1Hz = 0;
3065  Gtnoi = 0;
3066  gspr = 0;
3067  gdpr = 0;
3068  if ( (model_.GEOMOD) == (0))
3069  {
3070  Weff0 = ((2*(model_.HFIN))-(model_.DELTAW));
3071  WeffCV0 = ((2*(model_.HFIN))-(model_.DELTAWCV));
3072  }
3073  else
3074  if ( (model_.GEOMOD) == (1))
3075  {
3076  Weff0 = (((2*(model_.HFIN))+((model_.FECH)*TFIN))-(model_.DELTAW));
3077  WeffCV0 = (((2*(model_.HFIN))+((model_.FECHCV)*TFIN))-(model_.DELTAWCV));
3078  }
3079  else
3080  if ( (model_.GEOMOD) == (2))
3081  {
3082  Weff0 = (((2*(model_.HFIN))+((2*(model_.FECH))*TFIN))-(model_.DELTAW));
3083  WeffCV0 = (((2*(model_.HFIN))+((2*(model_.FECHCV))*TFIN))-(model_.DELTAWCV));
3084  }
3085  else
3086  if ( (model_.GEOMOD) == (3))
3087  {
3088  R = (D/2.0);
3089  Weff0 = ((3.14159265358979323846*D)-(model_.DELTAW));
3090  WeffCV0 = ((3.14159265358979323846*D)-(model_.DELTAWCV));
3091  }
3092  else
3093  {
3094  // no default
3095  }
3096  if (((model_.DEVTYPE)==1))
3097  {
3098  devsign = 1;
3099  }
3100  else
3101  {
3102  devsign = (-1);
3103  }
3104 
3105  // Manually added code:
3106  if (model_.getType() == "pmos" || model_.getType() == "PMOS")
3107  devsign = -1;
3108 
3109  epssub = ((model_.EPSRSUB)*8.8542e-12);
3110  epssp = ((model_.EPSRSP)*8.8542e-12);
3111  cox = ((3.9*8.8542e-12)/(model_.EOT));
3112  csi = (epssub/TFIN);
3113  cbox = ((3.9*8.8542e-12)/(model_.EOTBOX));
3114  epsratio = ((model_.EPSRSUB)/3.9);
3115  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
3116  {
3117  cox_acc = ((3.9*8.8542e-12)/(model_.EOTACC));
3118  }
3119  scl = sqrt(((((0.5*epsratio)*TFIN)*(model_.EOT))*(1.0+(TFIN/((4.0*epsratio)*(model_.EOT))))));
3120  heff = sqrt((((model_.HFIN)*((model_.HFIN)+((2*epsratio)*(model_.EOT))))/8.0));
3121  if ( (model_.GEOMOD) == (1))
3122  {
3123  scl = (1.0/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3124  }
3125  else
3126  if ( (model_.GEOMOD) == (2))
3127  {
3128  scl = (0.5/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3129  }
3130  else
3131  if ( (model_.GEOMOD) == (3))
3132  {
3133  scl = sqrt(((((0.5*epsratio)*R)*(model_.EOT))*(1.0+(R/((2.0*epsratio)*(model_.EOT))))));
3134  }
3135  else
3136  {
3137  // no default
3138  }
3139  mx = (0.916*9.11e-31);
3140  mxprime = (0.190*9.11e-31);
3141  md = (0.190*9.11e-31);
3142  mdprime = (0.417*9.11e-31);
3143  gprime = 4.0;
3144  gfactor = 2.0;
3145  Lg = (L+(model_.XL));
3146  deltaL = ((model_.LINT)+((model_.LL)*pow(Lg,(-(model_.LLN)))));
3147  deltaLCV = ((model_.DLC)+((model_.LLC)*pow(Lg,(-(model_.LLN)))));
3148  Leff = (Lg-(2.0*deltaL));
3149  LeffCV = (Lg-(2.0*deltaLCV));
3150  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
3151  {
3152  LeffCV_acc = (LeffCV-(model_.DLCACC));
3153  }
3154  NFINtotal = (NFIN*(model_.NF));
3155  Inv_L = (1.0e-6/(Leff+(model_.DLBIN)));
3156  Inv_NFIN = (1.0/NFIN);
3157  Inv_LNFIN = (1.0e-6/((Leff+(model_.DLBIN))*NFIN));
3158  NBODY_i = ((((model_.NBODY)+(Inv_L*(model_.LNBODY)))+(Inv_NFIN*(model_.NNBODY)))+(Inv_LNFIN*(model_.PNBODY)));
3159  PHIG_i = ((((model_.PHIG)+(Inv_L*(model_.LPHIG)))+(Inv_NFIN*(model_.NPHIG)))+(Inv_LNFIN*(model_.PPHIG)));
3160  NGATE_i = ((((model_.NGATE)+(Inv_L*(model_.LNGATE)))+(Inv_NFIN*(model_.NNGATE)))+(Inv_LNFIN*(model_.PNGATE)));
3161  CIT_i = ((((model_.CIT)+(Inv_L*(model_.LCIT)))+(Inv_NFIN*(model_.NCIT)))+(Inv_LNFIN*(model_.PCIT)));
3162  CDSC_i = ((((model_.CDSC)+(Inv_L*(model_.LCDSC)))+(Inv_NFIN*(model_.NCDSC)))+(Inv_LNFIN*(model_.PCDSC)));
3163  CDSCD_i = ((((model_.CDSCD)+(Inv_L*(model_.LCDSCD)))+(Inv_NFIN*(model_.NCDSCD)))+(Inv_LNFIN*(model_.PCDSCD)));
3164  DVT0_i = ((((model_.DVT0)+(Inv_L*(model_.LDVT0)))+(Inv_NFIN*(model_.NDVT0)))+(Inv_LNFIN*(model_.PDVT0)));
3165  DVT1_i = ((((model_.DVT1)+(Inv_L*(model_.LDVT1)))+(Inv_NFIN*(model_.NDVT1)))+(Inv_LNFIN*(model_.PDVT1)));
3166  DVT1SS_i = ((((model_.DVT1SS)+(Inv_L*(model_.LDVT1SS)))+(Inv_NFIN*(model_.NDVT1SS)))+(Inv_LNFIN*(model_.PDVT1SS)));
3167  PHIN_i = ((((model_.PHIN)+(Inv_L*(model_.LPHIN)))+(Inv_NFIN*(model_.NPHIN)))+(Inv_LNFIN*(model_.PPHIN)));
3168  ETA0_i = ((((model_.ETA0)+(Inv_L*(model_.LETA0)))+(Inv_NFIN*(model_.NETA0)))+(Inv_LNFIN*(model_.PETA0)));
3169  DSUB_i = ((((model_.DSUB)+(Inv_L*(model_.LDSUB)))+(Inv_NFIN*(model_.NDSUB)))+(Inv_LNFIN*(model_.PDSUB)));
3170  K1RSCE_i = ((((model_.K1RSCE)+(Inv_L*(model_.LK1RSCE)))+(Inv_NFIN*(model_.NK1RSCE)))+(Inv_LNFIN*(model_.PK1RSCE)));
3171  LPE0_i = ((((model_.LPE0)+(Inv_L*(model_.LLPE0)))+(Inv_NFIN*(model_.NLPE0)))+(Inv_LNFIN*(model_.PLPE0)));
3172  DVTSHIFT_i = ((((model_.DVTSHIFT)+(Inv_L*(model_.LDVTSHIFT)))+(Inv_NFIN*(model_.NDVTSHIFT)))+(Inv_LNFIN*(model_.PDVTSHIFT)));
3173  K0_i = ((((model_.K0)+(Inv_L*(model_.LK0)))+(Inv_NFIN*(model_.NK0)))+(Inv_LNFIN*(model_.PK0)));
3174  K01_i = ((((model_.K01)+(Inv_L*(model_.LK01)))+(Inv_NFIN*(model_.NK01)))+(Inv_LNFIN*(model_.PK01)));
3175  K0SI_i = ((((model_.K0SI)+(Inv_L*(model_.LK0SI)))+(Inv_NFIN*(model_.NK0SI)))+(Inv_LNFIN*(model_.PK0SI)));
3176  K0SI1_i = ((((model_.K0SI1)+(Inv_L*(model_.LK0SI1)))+(Inv_NFIN*(model_.NK0SI1)))+(Inv_LNFIN*(model_.PK0SI1)));
3177  K1SI_i = ((((model_.K1SI)+(Inv_L*(model_.LK1SI)))+(Inv_NFIN*(model_.NK1SI)))+(Inv_LNFIN*(model_.PK1SI)));
3178  K1SI1_i = ((((model_.K1SI1)+(Inv_L*(model_.LK1SI1)))+(Inv_NFIN*(model_.NK1SI1)))+(Inv_LNFIN*(model_.PK1SI1)));
3179  if (((model_.BULKMOD)!=0))
3180  {
3181  PHIBE_i = ((((model_.PHIBE)+(Inv_L*(model_.LPHIBE)))+(Inv_NFIN*(model_.NPHIBE)))+(Inv_LNFIN*(model_.PPHIBE)));
3182  K1_i = ((((model_.K1)+(Inv_L*(model_.LK1)))+(Inv_NFIN*(model_.NK1)))+(Inv_LNFIN*(model_.PK1)));
3183  K11_i = ((((model_.K11)+(Inv_L*(model_.LK11)))+(Inv_NFIN*(model_.NK11)))+(Inv_LNFIN*(model_.PK11)));
3184  K1SAT_i = ((((model_.K1SAT)+(Inv_L*(model_.LK1SAT)))+(Inv_NFIN*(model_.NK1SAT)))+(Inv_LNFIN*(model_.PK1SAT)));
3185  K1SAT1_i = ((((model_.K1SAT1)+(Inv_L*(model_.LK1SAT1)))+(Inv_NFIN*(model_.NK1SAT1)))+(Inv_LNFIN*(model_.PK1SAT1)));
3186  }
3187  QMFACTOR_i = ((((model_.QMFACTOR)+(Inv_L*(model_.LQMFACTOR)))+(Inv_NFIN*(model_.NQMFACTOR)))+(Inv_LNFIN*(model_.PQMFACTOR)));
3188  QMTCENIV_i = ((((model_.QMTCENIV)+(Inv_L*(model_.LQMTCENIV)))+(Inv_NFIN*(model_.NQMTCENIV)))+(Inv_LNFIN*(model_.PQMTCENIV)));
3189  QMTCENCV_i = ((((model_.QMTCENCV)+(Inv_L*(model_.LQMTCENCV)))+(Inv_NFIN*(model_.NQMTCENCV)))+(Inv_LNFIN*(model_.PQMTCENCV)));
3190  QMTCENCVA_i = ((((model_.QMTCENCVA)+(Inv_L*(model_.LQMTCENCVA)))+(Inv_NFIN*(model_.NQMTCENCVA)))+(Inv_LNFIN*(model_.PQMTCENCVA)));
3191  VSAT_i = ((((model_.VSAT)+(Inv_L*(model_.LVSAT)))+(Inv_NFIN*(model_.NVSAT)))+(Inv_LNFIN*(model_.PVSAT)));
3192  VSAT1_i = ((((model_.VSAT1)+(Inv_L*(model_.LVSAT1)))+(Inv_NFIN*(model_.NVSAT1)))+(Inv_LNFIN*(model_.PVSAT1)));
3193  VSATCV_i = ((((model_.VSATCV)+(Inv_L*(model_.LVSATCV)))+(Inv_NFIN*(model_.NVSATCV)))+(Inv_LNFIN*(model_.PVSATCV)));
3194  DELTAVSAT_i = ((((model_.DELTAVSAT)+(Inv_L*(model_.LDELTAVSAT)))+(Inv_NFIN*(model_.NDELTAVSAT)))+(Inv_LNFIN*(model_.PDELTAVSAT)));
3195  PSAT_i = ((((model_.PSAT)+(Inv_L*(model_.LPSAT)))+(Inv_NFIN*(model_.NPSAT)))+(Inv_LNFIN*(model_.PPSAT)));
3196  DELTAVSATCV_i = ((((model_.DELTAVSATCV)+(Inv_L*(model_.LDELTAVSATCV)))+(Inv_NFIN*(model_.NDELTAVSATCV)))+(Inv_LNFIN*(model_.PDELTAVSATCV)));
3197  PSATCV_i = ((((model_.PSATCV)+(Inv_L*(model_.LPSATCV)))+(Inv_NFIN*(model_.NPSATCV)))+(Inv_LNFIN*(model_.PPSATCV)));
3198  KSATIV_i = ((((model_.KSATIV)+(Inv_L*(model_.LKSATIV)))+(Inv_NFIN*(model_.NKSATIV)))+(Inv_LNFIN*(model_.PKSATIV)));
3199  MEXP_i = ((((model_.MEXP)+(Inv_L*(model_.LMEXP)))+(Inv_NFIN*(model_.NMEXP)))+(Inv_LNFIN*(model_.PMEXP)));
3200  PTWG_i = ((((model_.PTWG)+(Inv_L*(model_.LPTWG)))+(Inv_NFIN*(model_.NPTWG)))+(Inv_LNFIN*(model_.PPTWG)));
3201  U0_i = ((((model_.U0)+(Inv_L*(model_.LU0)))+(Inv_NFIN*(model_.NU0)))+(Inv_LNFIN*(model_.PU0)));
3202  ETAMOB_i = ((((model_.ETAMOB)+(Inv_L*(model_.LETAMOB)))+(Inv_NFIN*(model_.NETAMOB)))+(Inv_LNFIN*(model_.PETAMOB)));
3203  UP_i = ((((model_.UP)+(Inv_L*(model_.LUP)))+(Inv_NFIN*(model_.NUP)))+(Inv_LNFIN*(model_.PUP)));
3204  UA_i = ((((model_.UA)+(Inv_L*(model_.LUA)))+(Inv_NFIN*(model_.NUA)))+(Inv_LNFIN*(model_.PUA)));
3205  if (((model_.BULKMOD)!=0))
3206  {
3207  UC_i = ((((model_.UC)+(Inv_L*(model_.LUC)))+(Inv_NFIN*(model_.NUC)))+(Inv_LNFIN*(model_.PUC)));
3208  }
3209  EU_i = ((((model_.EU)+(Inv_L*(model_.LEU)))+(Inv_NFIN*(model_.NEU)))+(Inv_LNFIN*(model_.PEU)));
3210  UD_i = ((((model_.UD)+(Inv_L*(model_.LUD)))+(Inv_NFIN*(model_.NUD)))+(Inv_LNFIN*(model_.PUD)));
3211  UCS_i = ((((model_.UCS)+(Inv_L*(model_.LUCS)))+(Inv_NFIN*(model_.NUCS)))+(Inv_LNFIN*(model_.PUCS)));
3212  PCLM_i = ((((model_.PCLM)+(Inv_L*(model_.LPCLM)))+(Inv_NFIN*(model_.NPCLM)))+(Inv_LNFIN*(model_.PPCLM)));
3213  PCLMG_i = ((((model_.PCLMG)+(Inv_L*(model_.LPCLMG)))+(Inv_NFIN*(model_.NPCLMG)))+(Inv_LNFIN*(model_.PPCLMG)));
3214  PCLMCV_i = ((((model_.PCLMCV)+(Inv_L*(model_.LPCLMCV)))+(Inv_NFIN*(model_.NPCLMCV)))+(Inv_LNFIN*(model_.PPCLMCV)));
3215  A1_i = ((((model_.A1)+(Inv_L*(model_.LA1)))+(Inv_NFIN*(model_.NA1)))+(Inv_LNFIN*(model_.PA1)));
3216  A11_i = ((((model_.A11)+(Inv_L*(model_.LA11)))+(Inv_NFIN*(model_.NA11)))+(Inv_LNFIN*(model_.PA11)));
3217  A2_i = ((((model_.A2)+(Inv_L*(model_.LA2)))+(Inv_NFIN*(model_.NA2)))+(Inv_LNFIN*(model_.PA2)));
3218  A21_i = ((((model_.A21)+(Inv_L*(model_.LA21)))+(Inv_NFIN*(model_.NA21)))+(Inv_LNFIN*(model_.PA21)));
3219  RDSW_i = ((((model_.RDSW)+(Inv_L*(model_.LRDSW)))+(Inv_NFIN*(model_.NRDSW)))+(Inv_LNFIN*(model_.PRDSW)));
3220  RSW_i = ((((model_.RSW)+(Inv_L*(model_.LRSW)))+(Inv_NFIN*(model_.NRSW)))+(Inv_LNFIN*(model_.PRSW)));
3221  RDW_i = ((((model_.RDW)+(Inv_L*(model_.LRDW)))+(Inv_NFIN*(model_.NRDW)))+(Inv_LNFIN*(model_.PRDW)));
3222  PRWGD_i = ((((model_.PRWGD)+(Inv_L*(model_.LPRWGD)))+(Inv_NFIN*(model_.NPRWGD)))+(Inv_LNFIN*(model_.PPRWGD)));
3223  PRWGS_i = ((((model_.PRWGS)+(Inv_L*(model_.LPRWGS)))+(Inv_NFIN*(model_.NPRWGS)))+(Inv_LNFIN*(model_.PPRWGS)));
3224  WR_i = ((((model_.WR)+(Inv_L*(model_.LWR)))+(Inv_NFIN*(model_.NWR)))+(Inv_LNFIN*(model_.PWR)));
3225  PDIBL1_i = ((((model_.PDIBL1)+(Inv_L*(model_.LPDIBL1)))+(Inv_NFIN*(model_.NPDIBL1)))+(Inv_LNFIN*(model_.PPDIBL1)));
3226  PDIBL2_i = ((((model_.PDIBL2)+(Inv_L*(model_.LPDIBL2)))+(Inv_NFIN*(model_.NPDIBL2)))+(Inv_LNFIN*(model_.PPDIBL2)));
3227  DROUT_i = ((((model_.DROUT)+(Inv_L*(model_.LDROUT)))+(Inv_NFIN*(model_.NDROUT)))+(Inv_LNFIN*(model_.PDROUT)));
3228  PVAG_i = ((((model_.PVAG)+(Inv_L*(model_.LPVAG)))+(Inv_NFIN*(model_.NPVAG)))+(Inv_LNFIN*(model_.PPVAG)));
3229  AIGBINV_i = ((((model_.AIGBINV)+(Inv_L*(model_.LAIGBINV)))+(Inv_NFIN*(model_.NAIGBINV)))+(Inv_LNFIN*(model_.PAIGBINV)));
3230  AIGBINV1_i = ((((model_.AIGBINV1)+(Inv_L*(model_.LAIGBINV1)))+(Inv_NFIN*(model_.NAIGBINV1)))+(Inv_LNFIN*(model_.PAIGBINV1)));
3231  BIGBINV_i = ((((model_.BIGBINV)+(Inv_L*(model_.LBIGBINV)))+(Inv_NFIN*(model_.NBIGBINV)))+(Inv_LNFIN*(model_.PBIGBINV)));
3232  CIGBINV_i = ((((model_.CIGBINV)+(Inv_L*(model_.LCIGBINV)))+(Inv_NFIN*(model_.NCIGBINV)))+(Inv_LNFIN*(model_.PCIGBINV)));
3233  EIGBINV_i = ((((model_.EIGBINV)+(Inv_L*(model_.LEIGBINV)))+(Inv_NFIN*(model_.NEIGBINV)))+(Inv_LNFIN*(model_.PEIGBINV)));
3234  NIGBINV_i = ((((model_.NIGBINV)+(Inv_L*(model_.LNIGBINV)))+(Inv_NFIN*(model_.NNIGBINV)))+(Inv_LNFIN*(model_.PNIGBINV)));
3235  AIGBACC_i = ((((model_.AIGBACC)+(Inv_L*(model_.LAIGBACC)))+(Inv_NFIN*(model_.NAIGBACC)))+(Inv_LNFIN*(model_.PAIGBACC)));
3236  AIGBACC1_i = ((((model_.AIGBACC1)+(Inv_L*(model_.LAIGBACC1)))+(Inv_NFIN*(model_.NAIGBACC1)))+(Inv_LNFIN*(model_.PAIGBACC1)));
3237  BIGBACC_i = ((((model_.BIGBACC)+(Inv_L*(model_.LBIGBACC)))+(Inv_NFIN*(model_.NBIGBACC)))+(Inv_LNFIN*(model_.PBIGBACC)));
3238  CIGBACC_i = ((((model_.CIGBACC)+(Inv_L*(model_.LCIGBACC)))+(Inv_NFIN*(model_.NCIGBACC)))+(Inv_LNFIN*(model_.PCIGBACC)));
3239  NIGBACC_i = ((((model_.NIGBACC)+(Inv_L*(model_.LNIGBACC)))+(Inv_NFIN*(model_.NNIGBACC)))+(Inv_LNFIN*(model_.PNIGBACC)));
3240  AIGC_i = ((((model_.AIGC)+(Inv_L*(model_.LAIGC)))+(Inv_NFIN*(model_.NAIGC)))+(Inv_LNFIN*(model_.PAIGC)));
3241  AIGC1_i = ((((model_.AIGC1)+(Inv_L*(model_.LAIGC1)))+(Inv_NFIN*(model_.NAIGC1)))+(Inv_LNFIN*(model_.PAIGC1)));
3242  BIGC_i = ((((model_.BIGC)+(Inv_L*(model_.LBIGC)))+(Inv_NFIN*(model_.NBIGC)))+(Inv_LNFIN*(model_.PBIGC)));
3243  CIGC_i = ((((model_.CIGC)+(Inv_L*(model_.LCIGC)))+(Inv_NFIN*(model_.NCIGC)))+(Inv_LNFIN*(model_.PCIGC)));
3244  PIGCD_i = ((((model_.PIGCD)+(Inv_L*(model_.LPIGCD)))+(Inv_NFIN*(model_.NPIGCD)))+(Inv_LNFIN*(model_.PPIGCD)));
3245  AIGS_i = ((((model_.AIGS)+(Inv_L*(model_.LAIGS)))+(Inv_NFIN*(model_.NAIGS)))+(Inv_LNFIN*(model_.PAIGS)));
3246  AIGS1_i = ((((model_.AIGS1)+(Inv_L*(model_.LAIGS1)))+(Inv_NFIN*(model_.NAIGS1)))+(Inv_LNFIN*(model_.PAIGS1)));
3247  BIGS_i = ((((model_.BIGS)+(Inv_L*(model_.LBIGS)))+(Inv_NFIN*(model_.NBIGS)))+(Inv_LNFIN*(model_.PBIGS)));
3248  CIGS_i = ((((model_.CIGS)+(Inv_L*(model_.LCIGS)))+(Inv_NFIN*(model_.NCIGS)))+(Inv_LNFIN*(model_.PCIGS)));
3249  AIGD_i = ((((model_.AIGD)+(Inv_L*(model_.LAIGD)))+(Inv_NFIN*(model_.NAIGD)))+(Inv_LNFIN*(model_.PAIGD)));
3250  AIGD1_i = ((((model_.AIGD1)+(Inv_L*(model_.LAIGD1)))+(Inv_NFIN*(model_.NAIGD1)))+(Inv_LNFIN*(model_.PAIGD1)));
3251  BIGD_i = ((((model_.BIGD)+(Inv_L*(model_.LBIGD)))+(Inv_NFIN*(model_.NBIGD)))+(Inv_LNFIN*(model_.PBIGD)));
3252  CIGD_i = ((((model_.CIGD)+(Inv_L*(model_.LCIGD)))+(Inv_NFIN*(model_.NCIGD)))+(Inv_LNFIN*(model_.PCIGD)));
3253  NTOX_i = ((((model_.NTOX)+(Inv_L*(model_.LNTOX)))+(Inv_NFIN*(model_.NNTOX)))+(Inv_LNFIN*(model_.PNTOX)));
3254  POXEDGE_i = ((((model_.POXEDGE)+(Inv_L*(model_.LPOXEDGE)))+(Inv_NFIN*(model_.NPOXEDGE)))+(Inv_LNFIN*(model_.PPOXEDGE)));
3255  AGIDL_i = ((((model_.AGIDL)+(Inv_L*(model_.LAGIDL)))+(Inv_NFIN*(model_.NAGIDL)))+(Inv_LNFIN*(model_.PAGIDL)));
3256  BGIDL_i = ((((model_.BGIDL)+(Inv_L*(model_.LBGIDL)))+(Inv_NFIN*(model_.NBGIDL)))+(Inv_LNFIN*(model_.PBGIDL)));
3257  CGIDL_i = ((((model_.CGIDL)+(Inv_L*(model_.LCGIDL)))+(Inv_NFIN*(model_.NCGIDL)))+(Inv_LNFIN*(model_.PCGIDL)));
3258  EGIDL_i = ((((model_.EGIDL)+(Inv_L*(model_.LEGIDL)))+(Inv_NFIN*(model_.NEGIDL)))+(Inv_LNFIN*(model_.PEGIDL)));
3259  PGIDL_i = ((((model_.PGIDL)+(Inv_L*(model_.LPGIDL)))+(Inv_NFIN*(model_.NPGIDL)))+(Inv_LNFIN*(model_.PPGIDL)));
3260  AGISL_i = ((((model_.AGISL)+(Inv_L*(model_.LAGISL)))+(Inv_NFIN*(model_.NAGISL)))+(Inv_LNFIN*(model_.PAGISL)));
3261  BGISL_i = ((((model_.BGISL)+(Inv_L*(model_.LBGISL)))+(Inv_NFIN*(model_.NBGISL)))+(Inv_LNFIN*(model_.PBGISL)));
3262  CGISL_i = ((((model_.CGISL)+(Inv_L*(model_.LCGISL)))+(Inv_NFIN*(model_.NCGISL)))+(Inv_LNFIN*(model_.PCGISL)));
3263  EGISL_i = ((((model_.EGISL)+(Inv_L*(model_.LEGISL)))+(Inv_NFIN*(model_.NEGISL)))+(Inv_LNFIN*(model_.PEGISL)));
3264  PGISL_i = ((((model_.PGISL)+(Inv_L*(model_.LPGISL)))+(Inv_NFIN*(model_.NPGISL)))+(Inv_LNFIN*(model_.PPGISL)));
3265  ALPHA0_i = ((((model_.ALPHA0)+(Inv_L*(model_.LALPHA0)))+(Inv_NFIN*(model_.NALPHA0)))+(Inv_LNFIN*(model_.PALPHA0)));
3266  ALPHA1_i = ((((model_.ALPHA1)+(Inv_L*(model_.LALPHA1)))+(Inv_NFIN*(model_.NALPHA1)))+(Inv_LNFIN*(model_.PALPHA1)));
3267  ALPHAII0_i = ((((model_.ALPHAII0)+(Inv_L*(model_.LALPHAII0)))+(Inv_NFIN*(model_.NALPHAII0)))+(Inv_LNFIN*(model_.PALPHAII0)));
3268  ALPHAII1_i = ((((model_.ALPHAII1)+(Inv_L*(model_.LALPHAII1)))+(Inv_NFIN*(model_.NALPHAII1)))+(Inv_LNFIN*(model_.PALPHAII1)));
3269  BETA0_i = ((((model_.BETA0)+(Inv_L*(model_.LBETA0)))+(Inv_NFIN*(model_.NBETA0)))+(Inv_LNFIN*(model_.PBETA0)));
3270  BETAII0_i = ((((model_.BETAII0)+(Inv_L*(model_.LBETAII0)))+(Inv_NFIN*(model_.NBETAII0)))+(Inv_LNFIN*(model_.PBETAII0)));
3271  BETAII1_i = ((((model_.BETAII1)+(Inv_L*(model_.LBETAII1)))+(Inv_NFIN*(model_.NBETAII1)))+(Inv_LNFIN*(model_.PBETAII1)));
3272  BETAII2_i = ((((model_.BETAII2)+(Inv_L*(model_.LBETAII2)))+(Inv_NFIN*(model_.NBETAII2)))+(Inv_LNFIN*(model_.PBETAII2)));
3273  ESATII_i = ((((model_.ESATII)+(Inv_L*(model_.LESATII)))+(Inv_NFIN*(model_.NESATII)))+(Inv_LNFIN*(model_.PESATII)));
3274  LII_i = ((((model_.LII)+(Inv_L*(model_.LLII)))+(Inv_NFIN*(model_.NLII)))+(Inv_LNFIN*(model_.PLII)));
3275  SII0_i = ((((model_.SII0)+(Inv_L*(model_.LSII0)))+(Inv_NFIN*(model_.NSII0)))+(Inv_LNFIN*(model_.PSII0)));
3276  SII1_i = ((((model_.SII1)+(Inv_L*(model_.LSII1)))+(Inv_NFIN*(model_.NSII1)))+(Inv_LNFIN*(model_.PSII1)));
3277  SII2_i = ((((model_.SII2)+(Inv_L*(model_.LSII2)))+(Inv_NFIN*(model_.NSII2)))+(Inv_LNFIN*(model_.PSII2)));
3278  SIID_i = ((((model_.SIID)+(Inv_L*(model_.LSIID)))+(Inv_NFIN*(model_.NSIID)))+(Inv_LNFIN*(model_.PSIID)));
3279  TII_i = ((((model_.TII)+(Inv_L*(model_.LTII)))+(Inv_NFIN*(model_.NTII)))+(Inv_LNFIN*(model_.PTII)));
3280  CFS_i = ((((model_.CFS)+(Inv_L*(model_.LCFS)))+(Inv_NFIN*(model_.NCFS)))+(Inv_LNFIN*(model_.PCFS)));
3281  CFD_i = ((((model_.CFD)+(Inv_L*(model_.LCFD)))+(Inv_NFIN*(model_.NCFD)))+(Inv_LNFIN*(model_.PCFD)));
3282  COVS_i = (((COVS+(Inv_L*(model_.LCOVS)))+(Inv_NFIN*(model_.NCOVS)))+(Inv_LNFIN*(model_.PCOVS)));
3283  COVD_i = (((COVD+(Inv_L*(model_.LCOVD)))+(Inv_NFIN*(model_.NCOVD)))+(Inv_LNFIN*(model_.PCOVD)));
3284  CGSL_i = ((((model_.CGSL)+(Inv_L*(model_.LCGSL)))+(Inv_NFIN*(model_.NCGSL)))+(Inv_LNFIN*(model_.PCGSL)));
3285  CGDL_i = ((((model_.CGDL)+(Inv_L*(model_.LCGDL)))+(Inv_NFIN*(model_.NCGDL)))+(Inv_LNFIN*(model_.PCGDL)));
3286  CGBL_i = ((((model_.CGBL)+(Inv_L*(model_.LCGBL)))+(Inv_NFIN*(model_.NCGBL)))+(Inv_LNFIN*(model_.PCGBL)));
3287  CKAPPAS_i = ((((model_.CKAPPAS)+(Inv_L*(model_.LCKAPPAS)))+(Inv_NFIN*(model_.NCKAPPAS)))+(Inv_LNFIN*(model_.PCKAPPAS)));
3288  CKAPPAD_i = ((((model_.CKAPPAD)+(Inv_L*(model_.LCKAPPAD)))+(Inv_NFIN*(model_.NCKAPPAD)))+(Inv_LNFIN*(model_.PCKAPPAD)));
3289  CKAPPAB_i = ((((model_.CKAPPAB)+(Inv_L*(model_.LCKAPPAB)))+(Inv_NFIN*(model_.NCKAPPAB)))+(Inv_LNFIN*(model_.PCKAPPAB)));
3290  NTGEN_i = ((((model_.NTGEN)+(Inv_L*(model_.LNTGEN)))+(Inv_NFIN*(model_.NNTGEN)))+(Inv_LNFIN*(model_.PNTGEN)));
3291  AIGEN_i = ((((model_.AIGEN)+(Inv_L*(model_.LAIGEN)))+(Inv_NFIN*(model_.NAIGEN)))+(Inv_LNFIN*(model_.PAIGEN)));
3292  BIGEN_i = ((((model_.BIGEN)+(Inv_L*(model_.LBIGEN)))+(Inv_NFIN*(model_.NBIGEN)))+(Inv_LNFIN*(model_.PBIGEN)));
3293  if (((model_.ASYMMOD)!=0))
3294  {
3295  CDSCDR_i = ((((model_.CDSCDR)+(Inv_L*(model_.LCDSCDR)))+(Inv_NFIN*(model_.NCDSCDR)))+(Inv_LNFIN*(model_.PCDSCDR)));
3296  ETA0R_i = ((((model_.ETA0R)+(Inv_L*(model_.LETA0R)))+(Inv_NFIN*(model_.NETA0R)))+(Inv_LNFIN*(model_.PETA0R)));
3297  VSAT1R_i = ((((model_.VSAT1R)+(Inv_L*(model_.LVSAT1R)))+(Inv_NFIN*(model_.NVSAT1R)))+(Inv_LNFIN*(model_.PVSAT1R)));
3298  MEXPR_i = ((((model_.MEXPR)+(Inv_L*(model_.LMEXPR)))+(Inv_NFIN*(model_.NMEXPR)))+(Inv_LNFIN*(model_.PMEXPR)));
3299  PTWGR_i = ((((model_.PTWGR)+(Inv_L*(model_.LPTWGR)))+(Inv_NFIN*(model_.NPTWGR)))+(Inv_LNFIN*(model_.PPTWGR)));
3300  PDIBL1R_i = ((((model_.PDIBL1R)+(Inv_L*(model_.LPDIBL1R)))+(Inv_NFIN*(model_.NPDIBL1R)))+(Inv_LNFIN*(model_.PPDIBL1R)));
3301  }
3302  if (((model_.NQSMOD)==1))
3303  {
3304  std::cerr << "[bsimcmg] Although the model selector NQSMOD is set to 1, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment `define __NQSMOD1__ in bsimcmg.va to activate it." << std::endl;
3305  }
3306  if (((model_.NQSMOD)==2))
3307  {
3308  std::cerr << "[bsimcmg] Although the model selector NQSMOD is set to 2, the NQS gate resistance model is not activated in the Verilog-A code. Please uncomment `define __NQSMOD2__ in bsimcmg.va to activate it." << std::endl;
3309  }
3310  UTE_i = ((((model_.UTE)+(Inv_L*(model_.LUTE)))+(Inv_NFIN*(model_.NUTE)))+(Inv_LNFIN*(model_.PUTE)));
3311  UTL_i = ((((model_.UTL)+(Inv_L*(model_.LUTL)))+(Inv_NFIN*(model_.NUTL)))+(Inv_LNFIN*(model_.PUTL)));
3312  EMOBT_i = ((((model_.EMOBT)+(Inv_L*(model_.LEMOBT)))+(Inv_NFIN*(model_.NEMOBT)))+(Inv_LNFIN*(model_.PEMOBT)));
3313  UA1_i = ((((model_.UA1)+(Inv_L*(model_.LUA1)))+(Inv_NFIN*(model_.NUA1)))+(Inv_LNFIN*(model_.PUA1)));
3314  if (((model_.BULKMOD)!=0))
3315  {
3316  UC1_i = ((((model_.UC1)+(Inv_L*(model_.LUC1)))+(Inv_NFIN*(model_.NUC1)))+(Inv_LNFIN*(model_.PUC1)));
3317  }
3318  UD1_i = ((((model_.UD1)+(Inv_L*(model_.LUD1)))+(Inv_NFIN*(model_.NUD1)))+(Inv_LNFIN*(model_.PUD1)));
3319  UCSTE_i = ((((model_.UCSTE)+(Inv_L*(model_.LUCSTE)))+(Inv_NFIN*(model_.NUCSTE)))+(Inv_LNFIN*(model_.PUCSTE)));
3320  PTWGT_i = ((((model_.PTWGT)+(Inv_L*(model_.LPTWGT)))+(Inv_NFIN*(model_.NPTWGT)))+(Inv_LNFIN*(model_.PPTWGT)));
3321  AT_i = ((((model_.AT)+(Inv_L*(model_.LAT)))+(Inv_NFIN*(model_.NAT)))+(Inv_LNFIN*(model_.PAT)));
3322  PRT_i = ((((model_.PRT)+(Inv_L*(model_.LPRT)))+(Inv_NFIN*(model_.NPRT)))+(Inv_LNFIN*(model_.PPRT)));
3323  KT1_i = ((((model_.KT1)+(Inv_L*(model_.LKT1)))+(Inv_NFIN*(model_.NKT1)))+(Inv_LNFIN*(model_.PKT1)));
3324  TSS_i = ((((model_.TSS)+(Inv_L*(model_.LTSS)))+(Inv_NFIN*(model_.NTSS)))+(Inv_LNFIN*(model_.PTSS)));
3325  IIT_i = ((((model_.IIT)+(Inv_L*(model_.LIIT)))+(Inv_NFIN*(model_.NIIT)))+(Inv_LNFIN*(model_.PIIT)));
3326  TGIDL_i = ((((model_.TGIDL)+(Inv_L*(model_.LTGIDL)))+(Inv_NFIN*(model_.NTGIDL)))+(Inv_LNFIN*(model_.PTGIDL)));
3327  IGT_i = ((((model_.IGT)+(Inv_L*(model_.LIGT)))+(Inv_NFIN*(model_.NIGT)))+(Inv_LNFIN*(model_.PIGT)));
3328  if (((model_.PHIGN1)!=0))
3329  {
3330  PHIG_i = (PHIG_i*(1.0+(((model_.PHIGN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.PHIGN2)))))));
3331  }
3332  if (((model_.ETA0N1)!=0))
3333  {
3334  ETA0_i = (ETA0_i*(1.0+(((model_.ETA0N1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.ETA0N2)))))));
3335  }
3336  if (((model_.CDSCN1)!=0))
3337  {
3338  CDSC_i = (CDSC_i*(1.0+(((model_.CDSCN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.CDSCN2)))))));
3339  }
3340  if (((model_.CDSCDN1)!=0))
3341  {
3342  CDSCD_i = (CDSCD_i*(1.0+(((model_.CDSCDN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.CDSCDN2)))))));
3343  }
3344  if (((model_.CDSCDRN1)!=0))
3345  {
3346  CDSCDR_i = (CDSCDR_i*(1.0+(((model_.CDSCDRN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.CDSCDRN2)))))));
3347  }
3348  if (((model_.NBODYN1)!=0))
3349  {
3350  NBODY_i = (NBODY_i*(1.0+(((model_.NBODYN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.NBODYN2)))))));
3351  }
3352  if (((model_.VSATN1)!=0))
3353  {
3354  VSAT_i = (VSAT_i*(1.0+(((model_.VSATN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.VSATN2)))))));
3355  }
3356  if (((model_.VSAT1N1)!=0))
3357  {
3358  VSAT1_i = (VSAT1_i*(1.0+(((model_.VSAT1N1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.VSAT1N2)))))));
3359  }
3360  if (((model_.VSAT1RN1)!=0))
3361  {
3362  VSAT1R_i = (VSAT1R_i*(1.0+(((model_.VSAT1RN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.VSAT1RN2)))))));
3363  }
3364  if (((model_.U0N1)!=0))
3365  {
3366  U0_i = (U0_i*(1.0+(((model_.U0N1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.U0N2)))))));
3367  }
3368  PHIG_i = (PHIG_i+((model_.PHIGL)*Leff));
3369  if (((model_.LPA)>0))
3370  {
3371  U0_i = (U0_i*(1-(UP_i*pow(Leff,(-(model_.LPA))))));
3372  }
3373  else
3374  {
3375  U0_i = (U0_i*(1-UP_i));
3376  }
3377  UA_i = (UA_i+((model_.AUA)*model_.analogFunctions.lexp(((-Leff)/(model_.BUA)))));
3378  UD_i = (UD_i+((model_.AUD)*model_.analogFunctions.lexp(((-Leff)/(model_.BUD)))));
3379  EU_i = (EU_i+((model_.AEU)*model_.analogFunctions.lexp(((-Leff)/(model_.BEU)))));
3380  if (((model_.RDSMOD)==1))
3381  {
3382  RSW_i = (RSW_i+((model_.ARSW)*model_.analogFunctions.lexp(((-Leff)/(model_.BRSW)))));
3383  RDW_i = (RDW_i+((model_.ARDW)*model_.analogFunctions.lexp(((-Leff)/(model_.BRDW)))));
3384  }
3385  else
3386  {
3387  RDSW_i = (RDSW_i+((model_.ARDSW)*model_.analogFunctions.lexp(((-Leff)/(model_.BRDSW)))));
3388  }
3389  PCLM_i = (PCLM_i+((model_.APCLM)*model_.analogFunctions.lexp(((-Leff)/(model_.BPCLM)))));
3390  MEXP_i = (MEXP_i+((model_.AMEXP)*pow(Leff,(-(model_.BMEXP)))));
3391  if (((model_.ASYMMOD)!=0))
3392  {
3393  MEXPR_i = (MEXPR_i+((model_.AMEXPR)*pow(Leff,(-(model_.BMEXPR)))));
3394  }
3395  PTWG_i = (PTWG_i+((model_.APTWG)*model_.analogFunctions.lexp(((-Leff)/(model_.BPTWG)))));
3396  if (((model_.ASYMMOD)!=0))
3397  {
3398  PTWGR_i = (PTWGR_i+((model_.APTWG)*model_.analogFunctions.lexp(((-Leff)/(model_.BPTWG)))));
3399  }
3400  VSAT_i = (VSAT_i+((model_.AVSAT)*model_.analogFunctions.lexp(((-Leff)/(model_.BVSAT)))));
3401  VSAT1_i = (VSAT1_i+((model_.AVSAT1)*model_.analogFunctions.lexp(((-Leff)/(model_.BVSAT1)))));
3402  if (((model_.ASYMMOD)!=0))
3403  {
3404  VSAT1R_i = (VSAT1R_i+((model_.AVSAT1)*model_.analogFunctions.lexp(((-Leff)/(model_.BVSAT1)))));
3405  }
3406  PSAT_i = (PSAT_i+((model_.APSAT)*model_.analogFunctions.lexp(((-Leff)/(model_.BPSAT)))));
3407  PSATCV_i = (PSATCV_i+((model_.APSATCV)*model_.analogFunctions.lexp(((-Leff)/(model_.BPSATCV)))));
3408  VSATCV_i = (VSATCV_i+((model_.AVSATCV)*model_.analogFunctions.lexp(((-LeffCV)/(model_.BVSATCV)))));
3409  if ((((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0))||(QMTCENCVA_i>0.0)))
3410  {
3411  if ( (model_.GEOMOD) == (0))
3412  {
3413  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-TFIN)/(model_.BQMTCEN)))));
3414  Tcen0 = (TFIN*MTcen);
3415  }
3416  else
3417  if ( (model_.GEOMOD) == (1))
3418  {
3419  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-std::min((model_.HFIN),TFIN))/(model_.BQMTCEN)))));
3420  Tcen0 = (std::min(TFIN,(model_.HFIN))*MTcen);
3421  }
3422  else
3423  if ( (model_.GEOMOD) == (2))
3424  {
3425  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-std::min((model_.HFIN),TFIN))/(model_.BQMTCEN)))));
3426  Tcen0 = (std::min(TFIN,(model_.HFIN))*MTcen);
3427  }
3428  else
3429  if ( (model_.GEOMOD) == (3))
3430  {
3431  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-R)/(model_.BQMTCEN)))));
3432  Tcen0 = (R*MTcen);
3433  }
3434  else
3435  {
3436  // no default
3437  }
3438  }
3439  if ((Leff<=0))
3440  {
3441  std::cerr << "Fatal: Leff = %e is not positive." << Leff << std::endl;
3442  }
3443  else
3444  {
3445  if ((Leff<=1e-9))
3446  {
3447  std::cerr << "Warning: Leff = %e <= 1.0e-9." << Leff << std::endl;
3448  }
3449  }
3450  if ((LeffCV<=1e-9))
3451  {
3452  std::cerr << "Warning: LeffCV = %e <= 1.0e-9." << LeffCV << std::endl;
3453  }
3454  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
3455  {
3456  if ((LeffCV_acc<=1e-9))
3457  {
3458  std::cerr << "Warning: LeffCV_acc = %e <= 1.0e-9." << LeffCV_acc << std::endl;
3459  }
3460  }
3461  if ((Weff0<=1e-9))
3462  {
3463  std::cerr << "Warning: Weff0 = %e <= 1.0e-9." << Weff0 << std::endl;
3464  }
3465  if ((WeffCV0<=1e-9))
3466  {
3467  std::cerr << "Warning: WeffCV0 = %e <= 1.0e-9." << WeffCV0 << std::endl;
3468  }
3469  if ((NBODY_i<=0))
3470  {
3471  std::cerr << "Fatal: NBODY_i = %e is not positive." << NBODY_i << std::endl;
3472  }
3473  else
3474  {
3475  if ((NBODY_i<=1e18))
3476  {
3477  std::cerr << "Warning: NBODY_i = %e m^-3 may be too small." << NBODY_i << std::endl;
3478  }
3479  }
3480  if ((NGATE_i<0))
3481  {
3482  std::cerr << "Fatal: NGATE_i = %e is negative." << NGATE_i << std::endl;
3483  }
3484  else
3485  {
3486  if (((NGATE_i!=0)&&(NGATE_i<=1e24)))
3487  {
3488  std::cerr << "Warning: NGATE_i = %e may be too small." << NGATE_i << std::endl;
3489  }
3490  else
3491  {
3492  if ((NGATE_i>1e31))
3493  {
3494  std::cerr << "Fatal: NGATE_i = %e is too high." << NGATE_i << std::endl;
3495  }
3496  }
3497  }
3498  if ((DVT0_i<0))
3499  {
3500  std::cerr << "Warning: DVT0_i = %e is negative." << DVT0_i << std::endl;
3501  }
3502  if ((DVT1_i<=0))
3503  {
3504  std::cerr << "Fatal: DVT1_i = %e is not positive." << DVT1_i << std::endl;
3505  }
3506  if ((DVT1SS_i<=0))
3507  {
3508  std::cerr << "Fatal: DVT1SS_i = %e is not positive." << DVT1SS_i << std::endl;
3509  }
3510  if ((CDSC_i<0))
3511  {
3512  std::cerr << "Warning: CDSC_i = %e is negative." << CDSC_i << std::endl;
3513  }
3514  if ((CDSCD_i<0))
3515  {
3516  std::cerr << "Warning: CDSCD_i = %e is negative." << CDSCD_i << std::endl;
3517  }
3518  if ((DSUB_i<=0))
3519  {
3520  std::cerr << "Fatal: DSUB_i = %e is not positive." << DSUB_i << std::endl;
3521  }
3522  if ((ETA0_i<0))
3523  {
3524  std::cerr << "Warning: ETA0_i = %e is negative." << ETA0_i << std::endl;
3525  }
3526  if ((LPE0_i<(-Leff)))
3527  {
3528  std::cerr << "Warning: LPE0_i = %e is less than -Leff. Clipping LPE0_i to 0" << LPE0_i << std::endl;
3529  LPE0_i = 0;
3530  }
3531  if ((K0SI_i<=0))
3532  {
3533  std::cerr << "Warning: K0SI_i = %e is not positive, setting it to 0." << K0SI_i << std::endl;
3534  K0SI_i = 0;
3535  }
3536  if ((K1SI_i<=0))
3537  {
3538  std::cerr << "Warning: K1SI_i = %e is not positive, setting it to 0." << K1SI_i << std::endl;
3539  K1SI_i = 0;
3540  }
3541  if (((PHIBE_i<0.2)&&((model_.BULKMOD)!=0)))
3542  {
3543  std::cerr << "Warning: PHIBE_i = %e is less than 0.2, setting it to 0.2." << PHIBE_i << std::endl;
3544  PHIBE_i = 0.2;
3545  }
3546  if (((PHIBE_i>1.2)&&((model_.BULKMOD)!=0)))
3547  {
3548  std::cerr << "Warning: PHIBE_i = %e is larger than 1.2, setting it to 1.2." << PHIBE_i << std::endl;
3549  PHIBE_i = 1.2;
3550  }
3551  if ((PSAT_i<2.0))
3552  {
3553  std::cerr << "Warning: PSAT_i = %e is less than 2.0, setting it to 2.0." << PSAT_i << std::endl;
3554  PSAT_i = 2.0;
3555  }
3556  if ((PSATCV_i<2.0))
3557  {
3558  std::cerr << "Warning: PSATCV_i = %e is less than 2.0, setting it to 2.0." << PSATCV_i << std::endl;
3559  PSATCV_i = 2.0;
3560  }
3561  if ((U0_i<0))
3562  {
3563  std::cerr << "Warning: U0_i = %e is negative, setting it to 0." << U0_i << std::endl;
3564  U0_i = 0;
3565  }
3566  if ((UA_i<0))
3567  {
3568  std::cerr << "Warning: UA_i = %e is negative, setting it to 0." << UA_i << std::endl;
3569  UA_i = 0;
3570  }
3571  if ((EU_i<0))
3572  {
3573  std::cerr << "Warning: EU_i = %e is negative, setting it to 0." << EU_i << std::endl;
3574  EU_i = 0;
3575  }
3576  if ((UD_i<0))
3577  {
3578  std::cerr << "Warning: UD_i = %e is negative, setting it to 0." << UD_i << std::endl;
3579  UD_i = 0;
3580  }
3581  if ((UCS_i<0))
3582  {
3583  std::cerr << "Warning: UCS_i = %e is negative, setting it to 0." << UCS_i << std::endl;
3584  UCS_i = 0;
3585  }
3586  RDSWMIN_i = (model_.RDSWMIN);
3587  if ((RDSWMIN_i<0))
3588  {
3589  std::cerr << "Warning: RDSWMIN = %e is negative. Set to zero" << RDSWMIN_i << std::endl;
3590  RDSWMIN_i = 0;
3591  }
3592  if ((RDSW_i<0))
3593  {
3594  std::cerr << "Warning: RDSW_i = %e is negative. Set to zero" << RDSW_i << std::endl;
3595  RDSW_i = 0;
3596  }
3597  RSWMIN_i = (model_.RSWMIN);
3598  if ((RSWMIN_i<0))
3599  {
3600  std::cerr << "Warning: RSWMIN = %e is negative. Set to zero" << RSWMIN_i << std::endl;
3601  RSWMIN_i = 0;
3602  }
3603  if ((RSW_i<0))
3604  {
3605  std::cerr << "Warning: RSW_i = %e is negative. Set to zero" << RSW_i << std::endl;
3606  RSW_i = 0;
3607  }
3608  RDWMIN_i = (model_.RDWMIN);
3609  if ((RDWMIN_i<0))
3610  {
3611  std::cerr << "Warning: RDWMIN = %e is negative. Set to zero" << RDWMIN_i << std::endl;
3612  RDWMIN_i = 0;
3613  }
3614  if ((RDW_i<0))
3615  {
3616  std::cerr << "Warning: RDW_i = %e is negative. Set to zero" << RDW_i << std::endl;
3617  RDW_i = 0;
3618  }
3619  if ((PRWGD_i<0))
3620  {
3621  std::cerr << "Warning: PRWGD_i = %e is negative. Set to zero" << PRWGD_i << std::endl;
3622  PRWGD_i = 0;
3623  }
3624  if ((PRWGS_i<0))
3625  {
3626  std::cerr << "Warning: PRWGS_i = %e is negative. Set to zero" << PRWGS_i << std::endl;
3627  PRWGS_i = 0;
3628  }
3629  if ((PCLM_i<0))
3630  {
3631  std::cerr << "Warning: PCLM_i = %e is negative." << PCLM_i << std::endl;
3632  }
3633  if ((PDIBL1_i<0))
3634  {
3635  std::cerr << "Warning: PDIBL1_i = %e is negative." << PDIBL1_i << std::endl;
3636  }
3637  if (((model_.ASYMMOD)!=0))
3638  {
3639  if ((PDIBL1R_i<0))
3640  {
3641  std::cerr << "Warning: PDIBL1R_i = %e is negative." << PDIBL1R_i << std::endl;
3642  }
3643  }
3644  if ((PDIBL2_i<0))
3645  {
3646  std::cerr << "Fatal: PDIBL2_i = %e is negative." << PDIBL2_i << std::endl;
3647  }
3648  if ((DROUT_i<=0))
3649  {
3650  std::cerr << "Fatal: DROUT_i = %e is non-positive." << DROUT_i << std::endl;
3651  }
3652  if ((MEXP_i<2.0))
3653  {
3654  std::cerr << "Warning: MEXP_i = %e < 2. Setting MEXP_i = 2." << MEXP_i << std::endl;
3655  MEXP_i = 2.0;
3656  }
3657  if (((model_.ASYMMOD)!=0))
3658  {
3659  if ((MEXPR_i<2.0))
3660  {
3661  std::cerr << "Warning: MEXPR_i = %e < 2. Setting MEXPR_i = 2." << MEXPR_i << std::endl;
3662  MEXPR_i = 2.0;
3663  }
3664  }
3665  if ((PTWG_i<0))
3666  {
3667  std::cerr << "Warning: PTWG_i = %e is negative, setting it to 0." << PTWG_i << std::endl;
3668  PTWG_i = 0;
3669  }
3670  if (((QMTCENIV_i>0)||(QMTCENCV_i>0)))
3671  {
3672  if (((model_.QM0)<=0))
3673  {
3674  std::cerr << "Fatal: QM0 = %e is non-positive." << (model_.QM0) << std::endl;
3675  }
3676  }
3677  if (((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0))&&(QMTCENCVA_i>0)))
3678  {
3679  if (((model_.QM0ACC)<=0))
3680  {
3681  std::cerr << "Fatal: QM0ACC = %e is non-positive." << (model_.QM0ACC) << std::endl;
3682  }
3683  }
3684  if ((CGIDL_i<0.0))
3685  {
3686  std::cerr << "Warning: CGIDL_i = %e < 0. Setting CGIDL_i = 0." << CGIDL_i << std::endl;
3687  CGIDL_i = 0.0;
3688  }
3689  if ((CGISL_i<0.0))
3690  {
3691  std::cerr << "Warning: CGISL_i = %e < 0. Setting CGISL_i = 0." << CGISL_i << std::endl;
3692  CGISL_i = 0.0;
3693  }
3694  if (((model_.IGBMOD)!=0))
3695  {
3696  if ((NIGBINV_i<=0))
3697  {
3698  std::cerr << "Fatal: NIGBINV_i = %e is non-positive." << NIGBINV_i << std::endl;
3699  }
3700  if ((NIGBACC_i<=0))
3701  {
3702  std::cerr << "Fatal: NIGBACC_i = %e is non-positive." << NIGBACC_i << std::endl;
3703  }
3704  }
3705  if (((model_.IGCMOD)!=0))
3706  {
3707  if ((POXEDGE_i<=0))
3708  {
3709  std::cerr << "Fatal: POXEDGE_i = %e is non-positive." << POXEDGE_i << std::endl;
3710  }
3711  if ((PIGCD_i<=0))
3712  {
3713  std::cerr << "Fatal: PIGCD_i = %e is non-positive." << PIGCD_i << std::endl;
3714  }
3715  }
3716  if ((((model_.IGCMOD)!=0)||((model_.IGBMOD)!=0)))
3717  {
3718  if (((model_.TOXREF)<=0))
3719  {
3720  std::cerr << "Fatal: TOXREF = %e is non-positive." << (model_.TOXREF) << std::endl;
3721  }
3722  }
3723  if (((model_.LINTIGEN)>=(Leff/2)))
3724  {
3725  std::cerr << "Warning: LINTIGEN = %e is too large - Leff for r/g current is negative. Re-setting LINTIGEN = 0." << (model_.LINTIGEN) << std::endl;
3726  LINTIGEN_i = 0;
3727  }
3728  else
3729  {
3730  LINTIGEN_i = (model_.LINTIGEN);
3731  }
3732  if ((NTGEN_i<=0))
3733  {
3734  std::cerr << "Fatal: NTGEN_i = %e is non-positive." << NTGEN_i << std::endl;
3735  }
3736  if (((model_.IIMOD)==2))
3737  {
3738  if ((BETAII0_i<0.0))
3739  {
3740  std::cerr << "Warning: BETAII0_i = %e is negative." << BETAII0_i << std::endl;
3741  }
3742  if ((BETAII1_i<0.0))
3743  {
3744  std::cerr << "Warning: BETAII1_i = %e is negative." << BETAII1_i << std::endl;
3745  }
3746  if ((BETAII2_i<0.0))
3747  {
3748  std::cerr << "Warning: BETAII2_i = %e is negative." << BETAII2_i << std::endl;
3749  }
3750  if ((ESATII_i<0.0))
3751  {
3752  std::cerr << "Warning: ESATII_i = %e is negative." << ESATII_i << std::endl;
3753  }
3754  if ((LII_i<0.0))
3755  {
3756  std::cerr << "Warning: LII_i = %e is negative." << LII_i << std::endl;
3757  }
3758  if ((SII1_i<0.0))
3759  {
3760  std::cerr << "Warning: SII1_i = %e is negative." << (model_.SII1) << std::endl;
3761  }
3762  if ((SII2_i<0.0))
3763  {
3764  std::cerr << "Warning: SII2_i = %e is negative." << SII2_i << std::endl;
3765  }
3766  if ((SIID_i<0.0))
3767  {
3768  std::cerr << "Warning: SIID_i = %e is negative." << SIID_i << std::endl;
3769  }
3770  }
3771  if (((model_.EF)<=0))
3772  {
3773  std::cerr << "Fatal: EF = %e is non-positive." << (model_.EF) << std::endl;
3774  }
3775  else
3776  {
3777  if (((model_.EF)>2.0))
3778  {
3779  std::cerr << "Fatal: EF = %e > 2.0." << (model_.EF) << std::endl;
3780  }
3781  }
3782  if (((model_.LINTNOI)>=(Leff/2)))
3783  {
3784  std::cerr << "Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0." << (model_.LINTNOI) << std::endl;
3785  LINTNOI_i = 0;
3786  }
3787  else
3788  {
3789  LINTNOI_i = (model_.LINTNOI);
3790  }
3791  if (((model_.NTNOI)<0))
3792  {
3793  std::cerr << "Warning: NTNOI = %e is negative. Set to zero." << (model_.NTNOI) << std::endl;
3794  NTNOI_i = 0;
3795  }
3796  else
3797  {
3798  NTNOI_i = (model_.NTNOI);
3799  }
3800  if (((model_.SHMOD)!=0))
3801  {
3802  std::cerr << "[bsimcmg] Although the model selector SHMOD is set to 1, the self heating model is not activated in the Verilog-A code. Please uncomment `define __SHMOD__ in bsimcmg.va to activate it." << std::endl;
3803  }
3804  if (((model_.RGATEMOD)!=0))
3805  {
3806  std::cerr << "[bsimcmg] Although the model selector RGATEMOD is set to 1, the gate electrode resistance model is not activated in the Verilog-A code. Please uncomment `define __RGATEMOD__ in bsimcmg.va to activate it." << std::endl;
3807  }
3808  if (((model_.RGEOMOD)==0))
3809  {
3810  RSourceGeo = ((model_.RSHS)*NRS);
3811  RDrainGeo = ((model_.RSHD)*NRD);
3812  }
3813  else
3814  {
3815  if (((model_.HEPI)>0))
3816  {
3817  Arsd = ((FPITCH*(model_.HFIN))+((TFIN+((FPITCH-TFIN)*(model_.CRATIO)))*(model_.HEPI)));
3818  }
3819  else
3820  {
3821  Arsd = (FPITCH*std::max(((model_.HFIN)+(model_.HEPI)),1.0e-9));
3822  }
3823  Prsd = (FPITCH+(model_.DELTAPRSD));
3824  if ((model_.given("RHORSD")))
3825  {
3826  rhorsd = (model_.RHORSD);
3827  }
3828  else
3829  {
3830  if (((model_.DEVTYPE)==1))
3831  {
3832  mu_max = 1417;
3833  }
3834  else
3835  {
3836  mu_max = 470.5;
3837  }
3838  if (((model_.DEVTYPE)==1))
3839  {
3840  mu_rsd = (((52.2+((mu_max-52.2)/(1+pow(((model_.NSD)/9.68e22),0.680))))-(43.4/(1.0+pow((3.43e26/(model_.NSD)),2))))*1.0e-4);
3841  }
3842  else
3843  {
3844  mu_rsd = (((44.9+((mu_max-44.9)/(1+pow(((model_.NSD)/2.23e22),0.719))))-(29.0/(1.0+pow((6.10e26/(model_.NSD)),2))))*1.0e-4);
3845  }
3846  rhorsd = (1/((1.60219e-19*(model_.NSD))*mu_rsd));
3847  }
3848  thetarsp = ((55*3.14159265358979323846)/180);
3849  afin = std::min(std::max((TFIN*((model_.HFIN)+std::min((model_.HEPI),0.0))),1.0e-18),Arsd);
3850  T1 = ((thetarsp>=(3.14159265358979323846/2))?0:((thetarsp<=((-3.14159265358979323846)/2))?0:(1.0/tan(thetarsp))));
3851  Rsp = (((rhorsd*T1.val())/(sqrt(3.14159265358979323846)*NFIN))*(((1.0/sqrt(afin))-(2.0/sqrt(Arsd)))+sqrt((afin/(Arsd*Arsd)))));
3852  arsd_total = ((Arsd*NFIN)+(model_.ARSDEND));
3853  prsd_total = ((Prsd*NFIN)+(model_.PRSDEND));
3854  lt = sqrt((((model_.RHOC)*arsd_total)/(rhorsd*prsd_total)));
3855  alpha = (LRSD/lt);
3856  T0 = model_.analogFunctions.lexp<AdmsFadType>((alpha+alpha));
3857  if (((model_.SDTERM)==1))
3858  {
3859  eta = ((rhorsd*lt)/(model_.RHOC));
3860  T1 = (T0*(1.0+eta));
3861  T2 = ((T1+1.0)-eta);
3862  T3 = ((T1-1.0)+eta);
3863  }
3864  else
3865  {
3866  T2 = (T0+1.0);
3867  T3 = (T0-1.0);
3868  }
3869  RrsdTML = (((rhorsd*lt)*T2.val())/(arsd_total*T3.val()));
3870  if (((model_.HEPI)<(-1.0e-10)))
3871  {
3872  Rrsdside = ((model_.RHOC)/(((-(model_.HEPI))*TFIN)*NFIN));
3873  Rrsd = (((RrsdTML+Rsp)*Rrsdside)/((RrsdTML+Rsp)+Rrsdside));
3874  }
3875  else
3876  {
3877  Rrsd = (RrsdTML+Rsp);
3878  }
3879  Rdsgeo = ((Rrsd/(model_.NF))*std::max((((((model_.RGEOA)+((model_.RGEOB)*TFIN))+((model_.RGEOC)*FPITCH))+((model_.RGEOD)*LRSD))+((model_.RGEOE)*(model_.HEPI))),0.0));
3880  RSourceGeo = Rdsgeo;
3881  RDrainGeo = Rdsgeo;
3882  }
3883  if ((RSourceGeo<=1.0e-3))
3884  {
3885  RSourceGeo = 1.0e-3;
3886  }
3887  if ((RDrainGeo<=1.0e-3))
3888  {
3889  RDrainGeo = 1.0e-3;
3890  }
3891  if (((model_.RDSMOD)!=0))
3892  {
3893  if ((RSWMIN_i<=0))
3894  {
3895  RSWMIN_i = 0;
3896  }
3897  if ((RDWMIN_i<=0))
3898  {
3899  RDWMIN_i = 0;
3900  }
3901  if ((RSW_i<=0))
3902  {
3903  RSW_i = 0;
3904  }
3905  if ((RDW_i<=0))
3906  {
3907  RDW_i = 0;
3908  }
3909  }
3910  else
3911  {
3912  if ((RDSWMIN_i<=0))
3913  {
3914  RDSWMIN_i = 0;
3915  }
3916  if ((RDSW_i<=0))
3917  {
3918  RDSW_i = 0;
3919  }
3920  }
3921  if (((model_.CGEOMOD)!=1))
3922  {
3923  if ((model_.given("CGSO")))
3924  {
3925  CGSO_i = (model_.CGSO);
3926  }
3927  else
3928  {
3929  if (((model_.given("DLC"))&&((model_.DLC)>0)))
3930  {
3931  CGSO_i = std::max(0.0,(((model_.DLC)*cox)-CGSL_i));
3932  }
3933  else
3934  {
3935  CGSO_i = ((0.3*TFIN)*cox);
3936  }
3937  }
3938  if ((model_.given("CGDO")))
3939  {
3940  CGDO_i = (model_.CGDO);
3941  }
3942  else
3943  {
3944  if (((model_.given("DLC"))&&((model_.DLC)>0)))
3945  {
3946  CGDO_i = std::max(0.0,(((model_.DLC)*cox)-CGDL_i));
3947  }
3948  else
3949  {
3950  CGDO_i = ((0.3*TFIN)*cox);
3951  }
3952  }
3953  }
3954  if (((model_.CGEOMOD)==2))
3955  {
3956  Hg = ((model_.TGATE)+(model_.TMASK));
3957  Trsd = (0.5*(FPITCH-TFIN));
3958  Wg = std::max((Trsd-(model_.TOXP)),0.0);
3959  Hrsd = std::max(((model_.HEPI)+(model_.TSILI)),0.0);
3960  if (((model_.TMASK)>0))
3961  {
3962  T0 = (3.467e-11*model_.analogFunctions.lln<AdmsFadType>(((1.0e-7*(model_.EPSRSP))/(3.9*(model_.LSP)))));
3963  T1 = (((0.942*Hrsd)*epssp)/(model_.LSP));
3964  Cgg_top = ((T0.val()+T1.val())*(TFIN+((FPITCH-TFIN)*(model_.CRATIO))));
3965  }
3966  else
3967  {
3968  //Begin block cfr_top_trigate
3969  {
3970  //Block-local variables for block cfr_top_trigate
3971  double Hr;
3972  double Lr;
3973  double Hgdelta;
3974  double Lmax;
3975  double y;
3976  double x;
3977  //End of Block-local variables
3978  //Block-local variables for block cfr_top_trigate
3979  double CcgSat;
3980  double Cnon;
3981  double TT1;
3982  double Ccg1;
3983  double r1cf;
3984  double Rcf;
3985  double Ccg2;
3986  //End of Block-local variables
3987  //Block-local variables for block cfr_top_trigate
3988  double Ccg;
3989  double C1;
3990  double C2;
3991  double C3;
3992  double Cfglog;
3993  double dcf;
3994  double TT0;
3995  //End of Block-local variables
3996  //Block-local variables for block cfr_top_trigate
3997  double TT2;
3998  double Cfgsat;
3999  double delta;
4000  double Cfg;
4001  //End of Block-local variables
4002  Hr = (2.3+((0.2*(Hg+(model_.TOXP)))/Hrsd));
4003  Lr = 1.05;
4004  Hgdelta = fabs(((Hg+(model_.TOXP))-Hrsd));
4005  Lmax = ((model_.LSP)*Lr);
4006  y = std::min(Hrsd,(Hg+(model_.TOXP)));
4007  x = ((model_.LSP)/(Hr+1.0));
4008  Cnon = 1.7e12;
4009  CcgSat = ((epssp*(y-x))/(model_.LSP));
4010  TT1 = (Cnon*CcgSat);
4011  if ((TT1>80.0))
4012  {
4013  Ccg1 = CcgSat;
4014  }
4015  else
4016  {
4017  Ccg1 = ((1.0/Cnon)*log((1.0+model_.analogFunctions.lexp(TT1))));
4018  }
4019  r1cf = (0.5*std::min((Hrsd/(Hg+(model_.TOXP))),((Hg+(model_.TOXP))/Hrsd)));
4020  Rcf = (Hgdelta*r1cf);
4021  Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((model_.LSP)+((0.5*3.14159265358979323846)*Rcf))/(model_.LSP))));
4022  Ccg = (TFIN*(Ccg1+Ccg2));
4023  x = (Lmax/Hg);
4024  C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4025  C2 = ((((sqrt(((((model_.TOXP)*(model_.TOXP))+((2.0*Hg)*(model_.TOXP)))+((Hg*Hg)*(x+1))))*sqrt((x+1)))+(model_.TOXP))+(Hg*x))+Hg);
4026  C3 = (((model_.TOXP)*sqrt(((x+1)*(x+4))))+((model_.TOXP)*(x+2)));
4027  Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4028  dcf = (Hr*Lr);
4029  TT0 = sqrt(((dcf*dcf)+1.0));
4030  TT1 = (((sqrt((((dcf*dcf)+1)*((((dcf*(model_.TOXP))*(dcf*(model_.TOXP)))+(((2*dcf)*Lmax)*(model_.TOXP)))+((((dcf*dcf)+1)*Lmax)*Lmax))))+(dcf*(model_.TOXP)))+((dcf*dcf)*Lmax))+Lmax);
4031  TT2 = ((TT0+1.0)*(dcf*(model_.TOXP)));
4032  Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4033  delta = 1.2e-12;
4034  TT1 = ((Cfgsat-Cfglog)-delta);
4035  Cfg = (TFIN*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4036  Cgg_top = (Ccg+Cfg);
4037  }
4038  // End block cfr_top_trigate
4039  }
4040  if (((model_.TMASK)>0))
4041  {
4042  //Begin block cfr_side_dblgate
4043  {
4044  //Block-local variables for block cfr_side_dblgate
4045  double Hr;
4046  double Lr;
4047  double Hgdelta;
4048  double Lmax;
4049  double y;
4050  double x;
4051  //End of Block-local variables
4052  //Block-local variables for block cfr_side_dblgate
4053  double CcgSat;
4054  double Cnon;
4055  double TT1;
4056  double Ccg1;
4057  double r1cf;
4058  double Rcf;
4059  double Ccg2;
4060  //End of Block-local variables
4061  //Block-local variables for block cfr_side_dblgate
4062  double Ccg;
4063  double C1;
4064  double C2;
4065  double C3;
4066  double Cfglog;
4067  double dcf;
4068  double TT0;
4069  //End of Block-local variables
4070  //Block-local variables for block cfr_side_dblgate
4071  double TT2;
4072  double Cfgsat;
4073  double delta;
4074  double Cfg;
4075  //End of Block-local variables
4076  Hr = (2.3+((0.2*(Wg+(model_.TOXP)))/Trsd));
4077  Lr = 1.05;
4078  Hgdelta = fabs(((Wg+(model_.TOXP))-Trsd));
4079  Lmax = ((model_.LSP)*Lr);
4080  y = std::min(Trsd,(Wg+(model_.TOXP)));
4081  x = ((model_.LSP)/(Hr+1.0));
4082  Cnon = 1.7e12;
4083  CcgSat = ((epssp*(y-x))/(model_.LSP));
4084  TT1 = (Cnon*CcgSat);
4085  if ((TT1>80.0))
4086  {
4087  Ccg1 = CcgSat;
4088  }
4089  else
4090  {
4091  Ccg1 = ((1.0/Cnon)*log((1.0+model_.analogFunctions.lexp(TT1))));
4092  }
4093  r1cf = (0.5*std::min((Trsd/(Wg+(model_.TOXP))),((Wg+(model_.TOXP))/Trsd)));
4094  Rcf = (Hgdelta*r1cf);
4095  Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((model_.LSP)+((0.5*3.14159265358979323846)*Rcf))/(model_.LSP))));
4096  Ccg = ((model_.HFIN)*(Ccg1+Ccg2));
4097  x = (Lmax/Wg);
4098  C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4099  C2 = ((((sqrt(((((model_.TOXP)*(model_.TOXP))+((2.0*Wg)*(model_.TOXP)))+((Wg*Wg)*(x+1))))*sqrt((x+1)))+(model_.TOXP))+(Wg*x))+Wg);
4100  C3 = (((model_.TOXP)*sqrt(((x+1)*(x+4))))+((model_.TOXP)*(x+2)));
4101  Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4102  dcf = (Hr*Lr);
4103  TT0 = sqrt(((dcf*dcf)+1.0));
4104  TT1 = (((sqrt((((dcf*dcf)+1)*((((dcf*(model_.TOXP))*(dcf*(model_.TOXP)))+(((2*dcf)*Lmax)*(model_.TOXP)))+((((dcf*dcf)+1)*Lmax)*Lmax))))+(dcf*(model_.TOXP)))+((dcf*dcf)*Lmax))+Lmax);
4105  TT2 = ((TT0+1.0)*(dcf*(model_.TOXP)));
4106  Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.70)*dcf)/TT0)*log((TT1/TT2)));
4107  delta = 1.2e-12;
4108  TT1 = ((Cfgsat-Cfglog)-delta);
4109  Cfg = ((model_.HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4110  Cgg_side = (Ccg+Cfg);
4111  }
4112  // End block cfr_side_dblgate
4113  }
4114  else
4115  {
4116  //Begin block cfr_side_trigate
4117  {
4118  //Block-local variables for block cfr_side_trigate
4119  double Hr;
4120  double Lr;
4121  double Hgdelta;
4122  double Lmax;
4123  double y;
4124  double x;
4125  //End of Block-local variables
4126  //Block-local variables for block cfr_side_trigate
4127  double CcgSat;
4128  double Cnon;
4129  double TT1;
4130  double Ccg1;
4131  double r1cf;
4132  double Rcf;
4133  double Ccg2;
4134  //End of Block-local variables
4135  //Block-local variables for block cfr_side_trigate
4136  double Ccg;
4137  double C1;
4138  double C2;
4139  double C3;
4140  double Cfglog;
4141  double dcf;
4142  double TT0;
4143  //End of Block-local variables
4144  //Block-local variables for block cfr_side_trigate
4145  double TT2;
4146  double Cfgsat;
4147  double delta;
4148  double Cfg;
4149  //End of Block-local variables
4150  Hr = (2.3+((0.2*(Wg+(model_.TOXP)))/Trsd));
4151  Lr = 1.05;
4152  Hgdelta = fabs(((Wg+(model_.TOXP))-Trsd));
4153  Lmax = ((model_.LSP)*Lr);
4154  y = std::min(Trsd,(Wg+(model_.TOXP)));
4155  x = ((model_.LSP)/(Hr+1.0));
4156  Cnon = 1.7e12;
4157  CcgSat = ((epssp*(y-x))/(model_.LSP));
4158  TT1 = (Cnon*CcgSat);
4159  if ((TT1>80.0))
4160  {
4161  Ccg1 = CcgSat;
4162  }
4163  else
4164  {
4165  Ccg1 = ((1.0/Cnon)*log((1.0+model_.analogFunctions.lexp(TT1))));
4166  }
4167  r1cf = (0.5*std::min((Trsd/(Wg+(model_.TOXP))),((Wg+(model_.TOXP))/Trsd)));
4168  Rcf = (Hgdelta*r1cf);
4169  Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((model_.LSP)+((0.5*3.14159265358979323846)*Rcf))/(model_.LSP))));
4170  Ccg = ((model_.HFIN)*(Ccg1+Ccg2));
4171  x = (Lmax/Wg);
4172  C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4173  C2 = ((((sqrt(((((model_.TOXP)*(model_.TOXP))+((2.0*Wg)*(model_.TOXP)))+((Wg*Wg)*(x+1))))*sqrt((x+1)))+(model_.TOXP))+(Wg*x))+Wg);
4174  C3 = (((model_.TOXP)*sqrt(((x+1)*(x+4))))+((model_.TOXP)*(x+2)));
4175  Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4176  dcf = (Hr*Lr);
4177  TT0 = sqrt(((dcf*dcf)+1.0));
4178  TT1 = (((sqrt((((dcf*dcf)+1)*((((dcf*(model_.TOXP))*(dcf*(model_.TOXP)))+(((2*dcf)*Lmax)*(model_.TOXP)))+((((dcf*dcf)+1)*Lmax)*Lmax))))+(dcf*(model_.TOXP)))+((dcf*dcf)*Lmax))+Lmax);
4179  TT2 = ((TT0+1.0)*(dcf*(model_.TOXP)));
4180  Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4181  delta = 1.2e-12;
4182  TT1 = ((Cfgsat-Cfglog)-delta);
4183  Cfg = ((model_.HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4184  Cgg_side = (Ccg+Cfg);
4185  }
4186  // End block cfr_side_trigate
4187  }
4188  if (((model_.TMASK)>0))
4189  {
4190  Acorner = 0.0;
4191  }
4192  else
4193  {
4194  if (((model_.HEPI)>0))
4195  {
4196  Acorner = ((FPITCH-TFIN)*(((model_.HEPI)*(model_.CRATIO))+(model_.TSILI)));
4197  }
4198  else
4199  {
4200  Acorner = ((FPITCH-TFIN)*Hrsd);
4201  }
4202  }
4203  Ccorner = (((((NFIN*Acorner)+(model_.ARSDEND))+(model_.ASILIEND))*epssp)/(model_.LSP));
4204  Cfr_geo = (((Ccorner+(Cgg_top*NFIN))+((((model_.CGEOE)*Cgg_side)*NFIN)*2.0))*(model_.NF));
4205  Cfr_geo = (Cfr_geo*std::max(((((model_.CGEOA)+((model_.CGEOB)*TFIN))+((model_.CGEOC)*FPITCH))+((model_.CGEOD)*LRSD)),0.0));
4206  }
4208  csbox = ((cbox*ASEO)+(T0.val()*std::max(0.0,(PSEO-(FPITCH*NFINtotal)))));
4209  cdbox = ((cbox*ADEO)+(T0.val()*std::max(0.0,(PDEO-(FPITCH*NFINtotal)))));
4210  cgbox = (((((model_.CGBO)*(model_.NF))*NGCON)+((model_.CGBN)*NFINtotal))*LeffCV);
4211  EeffFactor = (1.0e-8/(epsratio*(model_.EOT)));
4212  WeffWRFactor = (1.0/(pow((Weff0*1.0e6),WR_i)*NFINtotal));
4213  litl = sqrt((((epsratio*(model_.EOT))*0.5)*TFIN));
4214  tmp = (((DVT1_i*Leff)/scl)+1.0e-6);
4215  if ((tmp<40.0))
4216  {
4217  Theta_SCE = (0.5/(cosh(tmp)-1.0));
4218  }
4219  else
4220  {
4221  Theta_SCE = exp((-tmp));
4222  }
4223  tmp = (((DVT1SS_i*Leff)/scl)+1.0e-6);
4224  if ((tmp<40.0))
4225  {
4226  Theta_SW = (0.5/(cosh(tmp)-1.0));
4227  }
4228  else
4229  {
4230  Theta_SW = exp((-tmp));
4231  }
4232  tmp = (((DSUB_i*Leff)/scl)+1.0e-6);
4233  if ((tmp<40.0))
4234  {
4235  Theta_DIBL = (0.5/(cosh(tmp)-1.0));
4236  }
4237  else
4238  {
4239  Theta_DIBL = exp((-tmp));
4240  }
4241  Theta_RSCE = (sqrt((1.0+(LPE0_i/Leff)))-1.0);
4242  if ((((model_.COREMOD)!=0)&&(NBODY_i>1e23)))
4243  {
4244  nbody = 1e23;
4245  }
4246  else
4247  {
4248  nbody = NBODY_i;
4249  }
4250  if (((model_.GEOMOD)!=3))
4251  {
4252  qbs = (((1.60219e-19*nbody)*TFIN)/(2*cox));
4253  }
4254  else
4255  {
4256  qbs = (((1.60219e-19*nbody)*R)/(2*cox));
4257  }
4258  if (((model_.GEOMOD)!=3))
4259  {
4260  phibulk = ((((1.60219e-19/(2*epssub))*nbody)*(TFIN/2))*(TFIN/2));
4261  if (((model_.COREMOD)!=0))
4262  {
4263  Qbul = 0;
4264  }
4265  else
4266  {
4267  Qbul = sqrt(((((2*1.60219e-19)*nbody)*epssub)*phibulk));
4268  }
4269  F2 = model_.analogFunctions.lln((2.0/TFIN));
4270  }
4271  else
4272  {
4273  r1 = ((2*epssub)/(R*cox));
4274  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4275  {
4276  r1_acc = ((2.0*epssub)/(R*cox_acc.val()));
4277  }
4278  }
4279  if (((model_.DEVTYPE)==1))
4280  {
4281  Aechvb = 4.97232e-7;
4282  }
4283  else
4284  {
4285  Aechvb = 3.42537e-7;
4286  }
4287  if (((model_.DEVTYPE)==1))
4288  {
4289  Bechvb = 7.45669e11;
4290  }
4291  else
4292  {
4293  Bechvb = 1.16645e12;
4294  }
4295  T0 = ((model_.TOXG)*(model_.TOXG));
4296  T1 = ((model_.TOXG)*POXEDGE_i);
4297  T2 = (T1*T1);
4298  Toxratio = (model_.analogFunctions.lexp((NTOX_i*model_.analogFunctions.lln(((model_.TOXREF)/(model_.TOXG)))))/T0.val());
4299  Toxratioedge = (model_.analogFunctions.lexp((NTOX_i*model_.analogFunctions.lln(((model_.TOXREF)/T1.val()))))/T2.val());
4300  igsd_mult0 = ((Weff0*Aechvb)*Toxratioedge);
4301  if (((model_.TNOM)<(-273.15)))
4302  {
4303  std::cerr << "Warning: (TNOM=%e) < -`P_CELSIUS0. Set to 27 C." << (model_.TNOM) << std::endl;
4304  Tnom = 300.15;
4305  }
4306  else
4307  {
4308  Tnom = ((model_.TNOM)+273.15);
4309  }
4310  }
4311  // End block CMGBiasIndepCalc
4312  DevTemp = (admsTemperature+(model_.DTEMP));
4313  //Begin block CMGTempDepCalc
4314  {
4315  TRatio = (DevTemp/Tnom);
4316  delTemp = (DevTemp-Tnom);
4317  Vtm = (8.617087e-5*DevTemp);
4318  Vtm0 = (8.617087e-5*Tnom);
4319  Eg = ((model_.BG0SUB)-((((model_.TBGASUB)*DevTemp)*DevTemp)/(DevTemp+(model_.TBGBSUB))));
4320  Eg0 = ((model_.BG0SUB)-((((model_.TBGASUB)*Tnom)*Tnom)/(Tnom+(model_.TBGBSUB))));
4321  T1 = ((DevTemp/300.15)*sqrt((DevTemp/300.15)));
4322  ni = (((model_.NI0SUB)*T1.val())*model_.analogFunctions.lexp((((model_.BG0SUB)/((2.0*8.617087e-5)*300.15))-(Eg/(2.0*Vtm)))));
4323  Nc = ((model_.NC0SUB)*T1.val());
4324  ThetaSS = model_.analogFunctions.hypsmooth(((1.0+(TSS_i*delTemp))-1.0E-6),1.0E-3);
4325  if (((model_.GEOMOD)!=3))
4326  {
4327  kT = (Vtm*1.60219e-19);
4328  T0 = ((1.05457e-34*3.14159265358979323846)/TFIN);
4329  E0 = ((T0.val()*T0.val())/(2.0*mx));
4330  E0prime = ((T0.val()*T0.val())/(2.0*mxprime));
4331  E1 = (4.0*E0);
4332  E1prime = (4.0*E0prime);
4333  T1 = ((gprime*mdprime)/(gfactor*md));
4334  gam0 = (1.0+(T1.val()*model_.analogFunctions.lexp(((E0-E0prime)/kT))));
4335  gam1 = ((gam0+model_.analogFunctions.lexp(((E0-E1)/kT)))+(T1.val()*model_.analogFunctions.lexp(((E0-E1prime)/kT))));
4336  T2 = ((-Vtm)*model_.analogFunctions.lln<AdmsFadType>((((((gfactor*md)/(((3.14159265358979323846*1.05457e-34)*1.05457e-34)*Nc))*kT)/TFIN)*gam1)));
4337  dvch_qm = (QMFACTOR_i*((E0/1.60219e-19)+T2.val()));
4338  }
4339  else
4340  {
4341  T0 = ((1.05457e-34*2.4048)/R);
4342  E0 = ((T0.val()*T0.val())/(2.0*mx));
4343  dvch_qm = ((QMFACTOR_i*E0)/1.60219e-19);
4344  }
4345  ETA0_t = (ETA0_i*(1.0+model_.analogFunctions.hypmax(((model_.TETA0)*delTemp),(-0.9),1e-4)));
4346  ETA0R_t = (ETA0R_i*(1.0+model_.analogFunctions.hypmax(((model_.TETA0R)*delTemp),(-0.9),1e-4)));
4347  T1 = (U0_i*pow(TRatio,UTE_i));
4348  U0_t = (T1.val()+model_.analogFunctions.hypmax((UTL_i*delTemp),((-0.9)*T1.val()),1e-4));
4349  u0 = U0_t;
4350  ETAMOB_t = (ETAMOB_i*model_.analogFunctions.hypsmooth(((1.0+(EMOBT_i*delTemp))-1.0E-6),1.0E-3));
4351  UA_t = (UA_i+model_.analogFunctions.hypmax((UA1_i*delTemp),(-UA_i),1.0e-6));
4352  if (((model_.BULKMOD)!=0))
4353  {
4354  UC_t = (UC_i*model_.analogFunctions.hypsmooth(((1.0+(UC1_i*delTemp))-1.0E-6),1.0E-3));
4355  }
4356  UD_t = (UD_i*pow(TRatio,UD1_i));
4357  UCS_t = (UCS_i*pow(TRatio,UCSTE_i));
4358  rdstemp = model_.analogFunctions.hypsmooth(((1.0+(PRT_i*delTemp))-1.0E-6),1.0E-3);
4359  RSDR_t = ((model_.RSDR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRSDR)*delTemp))-1.0E-6),1.0E-3));
4360  if (((model_.ASYMMOD)!=0))
4361  {
4362  RSDRR_t = ((model_.RSDRR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRSDR)*delTemp))-1.0E-6),1.0E-3));
4363  }
4364  RDDR_t = ((model_.RDDR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRDDR)*delTemp))-1.0E-6),1.0E-3));
4365  if (((model_.ASYMMOD)!=0))
4366  {
4367  RDDRR_t = ((model_.RDDRR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRDDR)*delTemp))-1.0E-6),1.0E-3));
4368  }
4369  VSAT_t = (VSAT_i*((1.0+model_.analogFunctions.hypsmooth((0.9-(AT_i*delTemp)),1.0E-3))-model_.analogFunctions.hypsmooth(0.9,1.0E-3)));
4370  if ((VSAT_t<1000))
4371  {
4372  std::cerr << "Warning: VSAT(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT_t << std::endl;
4373  VSAT_t = 1000;
4374  }
4375  VSAT1_t = (VSAT1_i*((1.0+model_.analogFunctions.hypsmooth((0.9-(AT_i*delTemp)),1.0E-3))-model_.analogFunctions.hypsmooth(0.9,1.0E-3)));
4376  if ((VSAT1_t<1000))
4377  {
4378  std::cerr << "Warning: VSAT1(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1_t << std::endl;
4379  VSAT1_t = 1000;
4380  }
4381  if (((model_.ASYMMOD)!=0))
4382  {
4383  VSAT1R_t = (VSAT1R_i*((1.0+model_.analogFunctions.hypsmooth((0.9-(AT_i*delTemp)),1.0E-3))-model_.analogFunctions.hypsmooth(0.9,1.0E-3)));
4384  if ((VSAT1R_t<1000))
4385  {
4386  std::cerr << "Warning: VSAT1R(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1R_t << std::endl;
4387  VSAT1R_t = 1000;
4388  }
4389  }
4390  VSATCV_t = (VSATCV_i*((1.0+model_.analogFunctions.hypsmooth((0.9-(AT_i*delTemp)),1.0E-3))-model_.analogFunctions.hypsmooth(0.9,1.0E-3)));
4391  if ((VSATCV_t<1000))
4392  {
4393  std::cerr << "Warning: VSATCV(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSATCV_t << std::endl;
4394  VSATCV_t = 1000;
4395  }
4396  MEXP_t = (model_.analogFunctions.hypsmooth(((MEXP_i*(1.0+((model_.TMEXP)*delTemp)))-2.0),1.0E-3)+2.0);
4397  if (((model_.ASYMMOD)!=0))
4398  {
4399  MEXPR_t = (model_.analogFunctions.hypsmooth(((MEXPR_i*(1.0+((model_.TMEXPR)*delTemp)))-2.0),1.0E-3)+2.0);
4400  }
4401  PTWG_t = (PTWG_i*model_.analogFunctions.hypsmooth(((1.0-(PTWGT_i*delTemp))-1.0E-6),1.0E-3));
4402  if (((model_.ASYMMOD)!=0))
4403  {
4404  PTWGR_t = (PTWGR_i*model_.analogFunctions.hypsmooth(((1.0-(PTWGT_i*delTemp))-1.0E-6),1.0E-3));
4405  }
4406  dvth_temp = ((KT1_i+((model_.KT1L)/Leff))*(TRatio-1.0));
4407  BETA0_t = (BETA0_i*pow(TRatio,IIT_i));
4408  SII0_t = (SII0_i*(model_.analogFunctions.hypsmooth(((1+(TII_i*(TRatio-1)))-0.01),1.0E-3)+0.01));
4409  K0_t = (K0_i+(K01_i*delTemp));
4410  K0SI_t = (K0SI_i+model_.analogFunctions.hypmax((K0SI1_i*delTemp),(-K0SI_i),1E-6));
4411  K1SI_t = (K1SI_i+model_.analogFunctions.hypmax((K1SI1_i*delTemp),(-K1SI_i),1E-6));
4412  K1_t = (K1_i+model_.analogFunctions.hypmax((K11_i*delTemp),(-K1_i),1E-6));
4413  K1SAT_t = (K1SAT_i+(K1SAT1_i*delTemp));
4414  A1_t = (A1_i+(A11_i*delTemp));
4415  A2_t = (A2_i+(A21_i*delTemp));
4416  AIGBINV_t = (AIGBINV_i+model_.analogFunctions.hypmax((AIGBINV1_i*delTemp),(-AIGBINV_i),1.0E-6));
4417  AIGBACC_t = (AIGBACC_i+model_.analogFunctions.hypmax((AIGBACC1_i*delTemp),(-AIGBACC_i),1.0E-6));
4418  AIGC_t = (AIGC_i+model_.analogFunctions.hypmax((AIGC1_i*delTemp),(-AIGC_i),1.0E-6));
4419  AIGS_t = (AIGS_i+model_.analogFunctions.hypmax((AIGS1_i*delTemp),(-AIGS_i),1.0E-6));
4420  AIGD_t = (AIGD_i+model_.analogFunctions.hypmax((AIGD1_i*delTemp),(-AIGD_i),1.0E-6));
4421  BGIDL_t = (BGIDL_i*model_.analogFunctions.hypsmooth(((1.0+(TGIDL_i*delTemp))-1.0E-6),1.0E-3));
4422  BGISL_t = (BGISL_i*model_.analogFunctions.hypsmooth(((1.0+(TGIDL_i*delTemp))-1.0E-6),1.0E-3));
4423  ALPHA0_t = (ALPHA0_i+model_.analogFunctions.hypmax(((model_.ALPHA01)*delTemp),(-ALPHA0_i),1.0E-6));
4424  ALPHA1_t = (ALPHA1_i+model_.analogFunctions.hypmax(((model_.ALPHA11)*delTemp),(-ALPHA1_i),1.0E-6));
4425  ALPHAII0_t = (ALPHAII0_i+model_.analogFunctions.hypmax(((model_.ALPHAII01)*delTemp),(-ALPHAII0_i),1.0E-6));
4426  ALPHAII1_t = (ALPHAII1_i+model_.analogFunctions.hypmax(((model_.ALPHAII11)*delTemp),(-ALPHAII1_i),1.0E-6));
4427  igtemp = model_.analogFunctions.lexp((IGT_i*model_.analogFunctions.lln(TRatio)));
4428  igsd_mult = (igsd_mult0*igtemp);
4429  if (((model_.BULKMOD)!=0))
4430  {
4431  CJS_t = ((model_.CJS)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJ)*delTemp))-1.0E-6),1.0E-3));
4432  CJD_t = ((model_.CJD)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJ)*delTemp))-1.0E-6),1.0E-3));
4433  CJSWS_t = ((model_.CJSWS)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSW)*delTemp))-1.0E-6),1.0E-3));
4434  CJSWD_t = ((model_.CJSWD)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSW)*delTemp))-1.0E-6),1.0E-3));
4435  CJSWGS_t = ((model_.CJSWGS)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSWG)*delTemp))-1.0E-6),1.0E-3));
4436  CJSWGD_t = ((model_.CJSWGD)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSWG)*delTemp))-1.0E-6),1.0E-3));
4437  PBS_t = (model_.analogFunctions.hypsmooth((((model_.PBS)-((model_.TPB)*delTemp))-0.01),1.0E-3)+0.01);
4438  PBD_t = (model_.analogFunctions.hypsmooth((((model_.PBD)-((model_.TPB)*delTemp))-0.01),1.0E-3)+0.01);
4439  PBSWS_t = (model_.analogFunctions.hypsmooth((((model_.PBSWS)-((model_.TPBSW)*delTemp))-0.01),1.0E-3)+0.01);
4440  PBSWD_t = (model_.analogFunctions.hypsmooth((((model_.PBSWD)-((model_.TPBSW)*delTemp))-0.01),1.0E-3)+0.01);
4441  PBSWGS_t = (model_.analogFunctions.hypsmooth((((model_.PBSWGS)-((model_.TPBSWG)*delTemp))-0.01),1.0E-3)+0.01);
4442  PBSWGD_t = (model_.analogFunctions.hypsmooth((((model_.PBSWGD)-((model_.TPBSWG)*delTemp))-0.01),1.0E-3)+0.01);
4443  T0 = ((Eg0/Vtm0)-(Eg/Vtm));
4444  T1 = model_.analogFunctions.lln<AdmsFadType>(TRatio);
4445  T3 = model_.analogFunctions.lexp<AdmsFadType>(((T0+((model_.XTIS)*T1))/(model_.NJS)));
4446  JSS_t = ((model_.JSS)*T3.val());
4447  JSWS_t = ((model_.JSWS)*T3.val());
4448  JSWGS_t = ((model_.JSWGS)*T3.val());
4449  T3 = model_.analogFunctions.lexp<AdmsFadType>(((T0+((model_.XTID)*T1))/(model_.NJD)));
4450  JSD_t = ((model_.JSD)*T3.val());
4451  JSWD_t = ((model_.JSWD)*T3.val());
4452  JSWGD_t = ((model_.JSWGD)*T3.val());
4453  JTSS_t = ((model_.JTSS)*model_.analogFunctions.lexp((((Eg0*(model_.XTSS))*(TRatio-1))/Vtm)));
4454  JTSD_t = ((model_.JTSD)*model_.analogFunctions.lexp((((Eg0*(model_.XTSD))*(TRatio-1))/Vtm)));
4455  JTSSWS_t = ((model_.JTSSWS)*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWS))*(TRatio-1))/Vtm)));
4456  JTSSWD_t = ((model_.JTSSWD)*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWD))*(TRatio-1))/Vtm)));
4457  JTSSWGS_t = (((model_.JTSSWGS)*(sqrt(((model_.JTWEFF)/Weff0))+1.0))*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWGS))*(TRatio-1))/Vtm)));
4458  JTSSWGD_t = (((model_.JTSSWGD)*(sqrt(((model_.JTWEFF)/Weff0))+1.0))*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWGD))*(TRatio-1))/Vtm)));
4459  NJTS_t = (model_.analogFunctions.hypsmooth((((model_.NJTS)*(1.0+((model_.TNJTS)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4460  NJTSD_t = (model_.analogFunctions.hypsmooth((((model_.NJTSD)*(1.0+((model_.TNJTSD)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4461  NJTSSW_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSW)*(1.0+((model_.TNJTSSW)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4462  NJTSSWD_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSWD)*(1.0+((model_.TNJTSSWD)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4463  NJTSSWG_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSWG)*(1.0+((model_.TNJTSSWG)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4464  NJTSSWGD_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSWGD)*(1.0+((model_.TNJTSSWGD)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4465  }
4466  beta0 = (((u0*cox)*Weff0)/Leff);
4467  if (((model_.NGATE)>0))
4468  {
4469  vfbsd = (devsign*(model_.analogFunctions.hypsmooth(((0.5*Eg)-(Vtm*model_.analogFunctions.lln(((model_.NGATE)/ni)))),1.0E-4)-((0.5*Eg)-(devsign*((0.5*Eg)-model_.analogFunctions.hypsmooth(((0.5*Eg)-(Vtm*model_.analogFunctions.lln(((model_.NSD)/ni)))),1.0E-4))))));
4470  }
4471  else
4472  {
4473  vfbsd = (devsign*(PHIG_i-(((model_.EASUB)+(0.5*Eg))-(devsign*((0.5*Eg)-model_.analogFunctions.hypsmooth(((0.5*Eg)-(Vtm*model_.analogFunctions.lln(((model_.NSD)/ni)))),1.0E-4))))));
4474  }
4475  phib = (Vtm*model_.analogFunctions.lln((nbody/ni)));
4476  vbi = (Vtm*model_.analogFunctions.lln(((nbody*(model_.NSD))/(ni*ni))));
4477  if ((NGATE_i>0))
4478  {
4479  deltaPhi = model_.analogFunctions.hypsmooth(((0.5*Eg)-(Vtm*model_.analogFunctions.lln((NGATE_i/ni)))),1.0E-4);
4480  if (((model_.GEOMOD)!=3))
4481  {
4482  vpoly0 = (((1.60219e-19*NGATE_i)*epssub)/((2.0*cox)*cox));
4483  cpoly = (1.0/(4.0*vpoly0));
4484  }
4485  else
4486  {
4487  T0 = ((R+(model_.EOT))/R);
4488  vpoly0 = (((((1.60219e-19*NGATE_i)*epssub)*T0.val())*T0.val())/((2.0*cox)*cox));
4489  cpoly = (1.0/(4.0*vpoly0));
4490  }
4491  kpoly = (1.0+((2.0*cpoly)*qbs));
4492  }
4493  else
4494  {
4495  if (((model_.DEVTYPE)==1))
4496  {
4497  deltaPhi = (devsign*(PHIG_i-((model_.EASUB))));
4498  }
4499  else
4500  {
4501  deltaPhi = (devsign*(PHIG_i-((model_.EASUB)+Eg)));
4502  }
4503  cpoly = 0.0;
4504  vpoly0 = 0.0;
4505  kpoly = 0.0;
4506  }
4507  if (((model_.GEOMOD)!=3))
4508  {
4509  r1 = ((2.0*epssub)/(cox*TFIN));
4510  g0max = 1.57079;
4511  g0min = 1e-37;
4512  Inv_r1pi = (1.0/(r1*3.14159265358979323846));
4513  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4514  {
4515  r1_acc = ((2.0*epssub)/(cox_acc.val()*TFIN));
4516  Inv_r1pi_acc = (1.0/(r1_acc*3.14159265358979323846));
4517  }
4518  }
4519  else
4520  {
4521  g0max = 700;
4522  g0min = 1e-37;
4523  }
4524  if ((NGATE_i>0))
4525  {
4526  if (((model_.GEOMOD)!=3))
4527  {
4528  r2 = (((4.0*Vtm)*epssub)/(((1.60219e-19*TFIN)*TFIN)*NGATE_i));
4529  }
4530  else
4531  {
4532  r2 = ((((2.0*cpoly)*r1)*r1)*Vtm);
4533  }
4534  }
4535  else
4536  {
4537  r2 = 0.0;
4538  }
4539  eta_mu = (0.5*ETAMOB_t);
4540  eta_mu_cv = 0.5;
4541  if (((model_.DEVTYPE)!=1))
4542  {
4543  eta_mu = ((1.0/3.0)*ETAMOB_t);
4544  eta_mu_cv = (1.0/3.0);
4545  }
4546  if (((model_.BULKMOD)!=0))
4547  {
4548  Isbs = (((ASEJ*JSS_t)+(PSEJ*JSWS_t))+((Weff0*NFINtotal)*JSWGS_t));
4549  if ((Isbs>0.0))
4550  {
4551  Nvtms = (Vtm*(model_.NJS));
4552  XExpBVS = (model_.analogFunctions.lexp(((-(model_.BVS))/Nvtms))*(model_.XJBVS));
4553  T2 = std::max(((model_.IJTHSFWD)/Isbs),10.0);
4554  Tb = ((1.0+T2)-XExpBVS);
4555  VjsmFwd = (Nvtms*model_.analogFunctions.lln((0.5*(Tb.val()+sqrt(((Tb.val()*Tb.val())+(4*XExpBVS)))))));
4556  T0 = model_.analogFunctions.lexp<AdmsFadType>((VjsmFwd/Nvtms));
4557  IVjsmFwd = (Isbs*(((T0.val()-(XExpBVS/T0.val()))+XExpBVS)-1.0));
4558  SslpFwd = ((Isbs*(T0.val()+(XExpBVS/T0.val())))/Nvtms);
4559  T2 = (model_.analogFunctions.hypsmooth<AdmsFadType>((((model_.IJTHSREV)/Isbs)-10.0),1.0E-3)+10.0);
4560  VjsmRev = ((-(model_.BVS))-(Nvtms*model_.analogFunctions.lln(((T2.val()-1.0)/(model_.XJBVS)))));
4561  T1 = ((model_.XJBVS)*model_.analogFunctions.lexp<AdmsFadType>(((-((model_.BVS)+VjsmRev))/Nvtms)));
4562  IVjsmRev = (Isbs*(1.0+T1.val()));
4563  SslpRev = (((-Isbs)*T1.val())/Nvtms);
4564  }
4565  Isbd = (((ADEJ*JSD_t)+(PDEJ*JSWD_t))+((Weff0*NFINtotal)*JSWGD_t));
4566  if ((Isbd>0.0))
4567  {
4568  Nvtmd = (Vtm*(model_.NJD));
4569  XExpBVD = (model_.analogFunctions.lexp(((-(model_.BVD))/Nvtmd))*(model_.XJBVD));
4570  T2 = std::max(((model_.IJTHDFWD)/Isbd),10.0);
4571  Tb = ((1.0+T2)-XExpBVD);
4572  VjdmFwd = (Nvtmd*model_.analogFunctions.lln((0.5*(Tb.val()+sqrt(((Tb.val()*Tb.val())+(4*XExpBVD)))))));
4573  T0 = model_.analogFunctions.lexp<AdmsFadType>((VjdmFwd/Nvtmd));
4574  IVjdmFwd = (Isbd*(((T0.val()-(XExpBVD/T0.val()))+XExpBVD)-1.0));
4575  DslpFwd = ((Isbd*(T0.val()+(XExpBVD/T0.val())))/Nvtmd);
4576  T2 = (model_.analogFunctions.hypsmooth<AdmsFadType>((((model_.IJTHDREV)/Isbd)-10.0),1.0E-3)+10.0);
4577  VjdmRev = ((-(model_.BVD))-(Nvtmd*model_.analogFunctions.lln(((T2.val()-1.0)/(model_.XJBVD)))));
4578  T1 = ((model_.XJBVD)*model_.analogFunctions.lexp<AdmsFadType>(((-((model_.BVD)+VjdmRev))/Nvtmd)));
4579  IVjdmRev = (Isbd*(1.0+T1.val()));
4580  DslpRev = (((-Isbd)*T1.val())/Nvtmd);
4581  }
4582  Czbs = (CJS_t*ASEJ);
4583  Czbssw = (CJSWS_t*PSEJ);
4584  Czbsswg = ((CJSWGS_t*Weff0)*NFINtotal);
4585  Czbd = (CJD_t*ADEJ);
4586  Czbdsw = (CJSWD_t*PDEJ);
4587  Czbdswg = ((CJSWGD_t*Weff0)*NFINtotal);
4588  }
4589  T0 = ((Eg/Vtm)*(TRatio-1.0));
4590  T1 = (T0/NTGEN_i);
4591  igentemp = model_.analogFunctions.lexp(T1.val());
4592  }
4593  // End block CMGTempDepCalc
4594  if ((!initialized))
4595  {
4596  std::cerr << "Warning: initial_step is not triggered at the first execution of this code. As a result, bias-independent variables may not be initialized. Check your simulator for Verilog-A language compatibility." << std::endl;
4597  }
4598  else
4599  {
4600  vgs_noswap = (devsign*(probeVars[admsProbeID_V_g_si]));
4601  vds_noswap = (devsign*(probeVars[admsProbeID_V_di_si]));
4602  vgd_noswap = (devsign*(probeVars[admsProbeID_V_g_di]));
4603  ves_jct = (devsign*(probeVars[admsProbeID_V_e_si]));
4604  ved_jct = (devsign*(probeVars[admsProbeID_V_e_di]));
4605  vge = (devsign*(probeVars[admsProbeID_V_g_e]));
4606  sigvds = 1.0;
4607  if ((vds_noswap<0.0))
4608  {
4609  sigvds = (-1.0);
4610  vgs = (vgs_noswap-vds_noswap);
4611  vds = ((-1.0)*vds_noswap);
4612  vgd = (vgd_noswap+vds_noswap);
4613  ves = ved_jct;
4614  }
4615  else
4616  {
4617  vgs = vgs_noswap;
4618  vds = vds_noswap;
4619  vgd = vgd_noswap;
4620  ves = ves_jct;
4621  }
4622  vgsfb = (vgs-deltaPhi);
4623  etaiv = 0.0;
4624  Qes = 0.0;
4625  Qesj = 0.0;
4626  Qeg = 0.0;
4627  Qed = 0.0;
4628  Qedj = 0.0;
4629  vdsx = (sqrt(((vds*vds)+0.01))-0.1);
4630  if (((model_.BULKMOD)!=0))
4631  {
4632  vesx = (ves-(0.5*(vds-vdsx)));
4633  vesmax = (0.95*PHIBE_i);
4634  T2 = ((vesmax-vesx)-1.0E-3);
4635  veseff = (vesmax-(0.5*(T2+sqrt(((T2*T2)+(0.004*vesmax))))));
4636  }
4637  T0 = tanh(((0.6*vds_noswap)/Vtm));
4638  wf = (0.5+(0.5*T0));
4639  wr = (1.0-wf);
4640  if (((model_.ASYMMOD)!=0))
4641  {
4642  CDSCD_a = ((CDSCDR_i*wr)+(CDSCD_i*wf));
4643  ETA0_a = ((ETA0R_t*wr)+(ETA0_t*wf));
4644  PDIBL1_a = ((PDIBL1R_i*wr)+(PDIBL1_i*wf));
4645  MEXP_a = ((MEXPR_t*wr)+(MEXP_t*wf));
4646  PTWG_a = ((PTWGR_t*wr)+(PTWG_t*wf));
4647  VSAT1_a = ((VSAT1R_t*wr)+(VSAT1_t*wf));
4648  RSDR_a = ((RSDRR_t*wr)+(RSDR_t*wf));
4649  RDDR_a = ((RDDRR_t*wr)+(RDDR_t*wf));
4650  }
4651  else
4652  {
4653  CDSCD_a = CDSCD_i;
4654  ETA0_a = ETA0_t;
4655  PDIBL1_a = PDIBL1_i;
4656  MEXP_a = MEXP_t;
4657  PTWG_a = PTWG_t;
4658  VSAT1_a = VSAT1_t;
4659  RSDR_a = RSDR_t;
4660  RDDR_a = RDDR_t;
4661  }
4662  inv_MEXP = (1.0/MEXP_a);
4663  phist = ((0.4+phib)+PHIN_i);
4664  if (((model_.GEOMOD)!=3))
4665  {
4666  T1 = (((2*cox)*csi)/((2*csi)+cox));
4667  }
4668  else
4669  {
4670  T1 = cox;
4671  }
4672  cdsc = (Theta_SW*(CDSC_i+(CDSCD_a*vdsx)));
4673  nVtm = ((Vtm*ThetaSS)*(1.0+(((CIT_i/TRatio)+cdsc)/T1)));
4674  dvth_vtroll = (((-DVT0_i)*Theta_SCE)*(vbi-phist));
4675  dvth_dibl = ((((-ETA0_a)*Theta_DIBL)*vdsx)+((model_.DVTP0)*pow(vdsx,(model_.DVTP1))));
4676  dvth_rsce = ((K1RSCE_i*Theta_RSCE)*sqrt(phist));
4677  dvth_all = ((((dvth_vtroll+dvth_dibl)+dvth_rsce)+dvth_temp)+DVTSHIFT_i);
4678  vgsfb = (vgsfb-dvth_all);
4679  if (((model_.GEOMOD)!=3))
4680  {
4681  F1 = ((0.5*model_.analogFunctions.lln<AdmsFadType>((((2*epssub)*nVtm)/(1.60219e-19*Nc))))+F2);
4682  if (((model_.COREMOD)!=0))
4683  {
4684  vgsfb = (vgsfb-((((0.5*1.60219e-19)*nbody)*TFIN)/cox));
4685  }
4686  else
4687  {
4688  q0 = ((((5.0*nVtm)*(epssub/TFIN))+(2.0*Qbul))/cox);
4689  }
4690  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4691  {
4692  F1_acc = ((0.5*model_.analogFunctions.lln((((2*epssub)*Vtm)/(1.60219e-19*Nc))))+F2);
4693  }
4694  cdop = 1.0;
4695  }
4696  else
4697  {
4698  q0 = ((2.0*nVtm)*r1);
4699  T0 = (((1.60219e-19*nbody)*R)/cox);
4700  vtdop = (((-nVtm)*model_.analogFunctions.lln<AdmsFadType>((nVtm/T0)))-(nVtm*model_.analogFunctions.lln<AdmsFadType>((1-model_.analogFunctions.lexp<AdmsFadType>(((-T0)/((2.0*r1)*nVtm)))))));
4701  cdop = ((2.0*r1)*model_.analogFunctions.lexp<AdmsFadType>(((-vtdop)/nVtm)));
4702  vt0 = ((((0.5*T0)+(((2.0*phib)*nVtm)/Vtm))-(nVtm*model_.analogFunctions.lln<AdmsFadType>(((0.5*T0)/nVtm))))+vtdop);
4703  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4704  {
4705  q0_acc = ((2.0*Vtm)*r1_acc);
4706  T0 = (((1.60219e-19*ni)*R)/cox_acc);
4707  vtdop_acc = (((-Vtm)*model_.analogFunctions.lln<AdmsFadType>((Vtm/T0)))-(Vtm*model_.analogFunctions.lln<AdmsFadType>((1-model_.analogFunctions.lexp<AdmsFadType>(((-T0)/((2.0*r1_acc)*Vtm)))))));
4708  cdop_acc = ((2.0*r1_acc)*model_.analogFunctions.lexp<AdmsFadType>(((-vtdop_acc)/Vtm)));
4709  vt0_acc = (((0.5*T0)-(Vtm*model_.analogFunctions.lln<AdmsFadType>(((0.5*T0)/Vtm))))+vtdop_acc);
4710  }
4711  }
4712  if (((model_.GEOMOD)!=3))
4713  {
4714  T0 = (-(dvch_qm+(nVtm*model_.analogFunctions.lln<AdmsFadType>((((2.0*cox)*(model_.Imin))/((((beta0*nVtm)*1.60219e-19)*Nc)*TFIN))))));
4715  T1 = ((vgsfb+T0)+(model_.DELVTRAND));
4716  vgsfbeff = (model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-T0);
4717  }
4718  else
4719  {
4720  T0 = (-(dvch_qm+(nVtm*model_.analogFunctions.lln<AdmsFadType>((((2.0*cox)*(model_.Imin))/((((beta0*nVtm)*1.60219e-19)*ni)*R))))));
4721  T1 = ((((vgsfb+(model_.DELVTRAND))+T0)+(0.5*Eg))+((phib*nVtm)/Vtm));
4722  vgsfbeff = ((model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-T0)-vt0);
4723  }
4724  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4725  {
4726  T1 = ((((-vge)+deltaPhi)-(0.5*Eg))+(model_.DELVFBACC));
4727  if (((model_.GEOMOD)!=3))
4728  {
4729  vgsfbeff_acc = (model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-(0.5*Eg));
4730  }
4731  else
4732  {
4733  vgsfbeff_acc = (model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-vt0_acc);
4734  }
4735  }
4736  if (((model_.GEOMOD)!=3))
4737  {
4738  T14 = (2.0*nVtm);
4739  if (((model_.COREMOD)==0))
4740  {
4741  aab = (phibulk/(nVtm*nVtm));
4742  T0 = (phibulk*aab);
4743  T11 = (((r1*phibulk)/nVtm)+(r2*T0));
4744  T12 = model_.analogFunctions.lexp<AdmsFadType>((phibulk/(2.0*nVtm)));
4745  T13 = (T12*T12);
4746  }
4747  }
4748  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4749  {
4750  if (((model_.GEOMOD)!=3))
4751  {
4752  F0 = ((vgsfbeff_acc/(2.0*Vtm))-F1_acc);
4753  expff = model_.analogFunctions.lexp<AdmsFadType>(F0);
4754  z1 = atan(expff);
4755  if ((F0>80.0))
4756  {
4757  T0 = F0;
4758  }
4759  else
4760  {
4761  T0 = model_.analogFunctions.lln<AdmsFadType>((1.0+expff));
4762  }
4763  z2 = atan(((2*T0)*Inv_r1pi_acc));
4764  g0 = min(z1,max(z2,1e-15));
4765  if (((g0>g0max)||(g0<g0min)))
4766  {
4767  if ((g0>g0max))
4768  {
4769  g0 = g0max;
4770  }
4771  else
4772  {
4773  g0 = g0min;
4774  }
4775  }
4776  tang0 = tan(g0);
4777  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4778  secg0sq = ((tang0*tang0)+1.0);
4779  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4780  inv_g0 = (1.0/g0);
4781  T0 = (g0*tang0);
4782  e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4783  e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4784  e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4785  e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*r1_acc))+(((2.0*secg0sq)*tang0)*((1.0+(3.0*r1_acc))+((2.0*r1_acc)*T0))));
4786  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4787  if (((g0>g0max)||(g0<g0min)))
4788  {
4789  if ((g0>g0max))
4790  {
4791  g0 = g0max;
4792  }
4793  else
4794  {
4795  g0 = g0min;
4796  }
4797  }
4798  tang0 = tan(g0);
4799  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4800  secg0sq = ((tang0*tang0)+1.0);
4801  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4802  inv_g0 = (1.0/g0);
4803  T0 = (g0*tang0);
4804  e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4805  e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4806  e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4807  e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*r1_acc))+(((2.0*secg0sq)*tang0)*((1.0+(3.0*r1_acc))+((2.0*r1_acc)*T0))));
4808  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4809  if (((g0>g0max)||(g0<g0min)))
4810  {
4811  if ((g0>g0max))
4812  {
4813  g0 = g0max;
4814  }
4815  else
4816  {
4817  g0 = g0min;
4818  }
4819  }
4820  g0a = g0;
4821  tang0a = tan(g0a);
4822  qi_acc = (vgsfbeff_acc-((2.0*Vtm)*((model_.analogFunctions.lln<AdmsFadType>(g0a)+(0.5*model_.analogFunctions.lln<AdmsFadType>((1.0+(tang0a*tang0a)))))+F1_acc)));
4823  }
4824  else
4825  {
4826  F0 = (vgsfbeff_acc/(2.0*Vtm));
4827  if ((F0>80.0))
4828  {
4829  T0 = F0;
4830  }
4831  else
4832  {
4834  }
4835  if ((F0<(-10)))
4836  {
4837  g0 = model_.analogFunctions.lexp<AdmsFadType>((2*F0));
4838  }
4839  else
4840  {
4841  if ((F0>10))
4842  {
4843  g0 = (F0/r1_acc);
4844  }
4845  else
4846  {
4847  g0 = ((sqrt((0.25+(((r1_acc*r1_acc)*T0)*T0)))-0.5)/(r1_acc*r1_acc));
4848  }
4849  }
4850  if (((g0>g0max)||(g0<g0min)))
4851  {
4852  if ((g0>g0max))
4853  {
4854  g0 = g0max;
4855  }
4856  else
4857  {
4858  g0 = g0min;
4859  }
4860  }
4861  if ((F0<(-50)))
4862  {
4863  g0a = g0;
4864  }
4865  else
4866  {
4867  inv_g0 = (1.0/g0);
4868  inv_g0sq = (inv_g0*inv_g0);
4869  T0 = (1+(cdop_acc*g0));
4870  T1 = (cdop_acc/T0);
4871  T2 = (T1*T1);
4872  e0 = ((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1_acc*g0))-F0);
4873  e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4874  e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4875  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4876  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4877  if (((g0>g0max)||(g0<g0min)))
4878  {
4879  if ((g0>g0max))
4880  {
4881  g0 = g0max;
4882  }
4883  else
4884  {
4885  g0 = g0min;
4886  }
4887  }
4888  inv_g0 = (1.0/g0);
4889  inv_g0sq = (inv_g0*inv_g0);
4890  T0 = (1+(cdop_acc*g0));
4891  T1 = (cdop_acc/T0);
4892  T2 = (T1*T1);
4893  e0 = ((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1_acc*g0))-F0);
4894  e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4895  e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4896  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4897  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4898  if (((g0>g0max)||(g0<g0min)))
4899  {
4900  if ((g0>g0max))
4901  {
4902  g0 = g0max;
4903  }
4904  else
4905  {
4906  g0 = g0min;
4907  }
4908  }
4909  g0a = g0;
4910  }
4911  qi_acc = (q0_acc*g0a);
4912  }
4913  }
4914  vch = (+dvch_qm);
4915  if (((model_.GEOMOD)!=3))
4916  {
4917  if (((model_.COREMOD)!=0))
4918  {
4919  F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
4920  expff = model_.analogFunctions.lexp<AdmsFadType>(F0);
4921  z1 = atan(expff);
4922  if ((F0>80.0))
4923  {
4924  T0 = F0;
4925  }
4926  else
4927  {
4928  T0 = model_.analogFunctions.lln<AdmsFadType>((1.0+expff));
4929  }
4930  z2 = atan(((2*T0)*Inv_r1pi));
4931  g0 = min(z1,max(z2,1e-15));
4932  if (((g0>g0max)||(g0<g0min)))
4933  {
4934  if ((g0>g0max))
4935  {
4936  g0 = g0max;
4937  }
4938  else
4939  {
4940  g0 = g0min;
4941  }
4942  }
4943  tang0 = tan(g0);
4944  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4945  secg0sq = ((tang0*tang0)+1.0);
4946  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4947  inv_g0 = (1.0/g0);
4948  T0 = (g0*tang0);
4949  T1 = (T0*T0);
4950  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4951  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4952  e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
4953  e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
4954  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4955  if (((g0>g0max)||(g0<g0min)))
4956  {
4957  if ((g0>g0max))
4958  {
4959  g0 = g0max;
4960  }
4961  else
4962  {
4963  g0 = g0min;
4964  }
4965  }
4966  tang0 = tan(g0);
4967  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4968  secg0sq = ((tang0*tang0)+1.0);
4969  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4970  inv_g0 = (1.0/g0);
4971  T0 = (g0*tang0);
4972  T1 = (T0*T0);
4973  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4974  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4975  e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
4976  e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
4977  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
4978  if (((g0>g0max)||(g0<g0min)))
4979  {
4980  if ((g0>g0max))
4981  {
4982  g0 = g0max;
4983  }
4984  else
4985  {
4986  g0 = g0min;
4987  }
4988  }
4989  g0s = g0;
4990  tang0s = tan(g0s);
4991  phis = (vch+((2.0*nVtm)*((model_.analogFunctions.lln<AdmsFadType>(g0s)+(0.5*model_.analogFunctions.lln<AdmsFadType>((1.0+(tang0s*tang0s)))))+F1)));
4992  }
4993  else
4994  {
4995  F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
4996  T0 = (phibulk*aab);
4997  T1 = (phibulk/T14);
4998  z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
4999  guessA = ((2.0*r1)*T1);
5000  guessA = (guessA/(1.0-exp((-guessA))));
5001  z2 = (z1+log((sqrt(guessA)/r1)));
5002  if (((F0-z2)>((-0.3)/T14)))
5003  {
5004  if (((F0-z2)<20))
5005  {
5006  T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5007  }
5008  else
5009  {
5010  T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5011  }
5012  T3 = pow(T2,2.0);
5013  guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5014  }
5015  else
5016  {
5017  guessB = exp(((F0-z1)-T1));
5018  }
5019  g0 = guessB;
5020  if ((g0>1e-60))
5021  {
5022  g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5023  tang0 = tan(g0);
5024  cosg0 = cos(g0);
5025  secg0 = (1.0/cosg0);
5026  secg0sq = (secg0*secg0);
5027  lng0 = (-log((1.0/g0)));
5028  T0 = (1.0+(g0*tang0));
5029  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5030  T2 = sqrt(T1);
5031  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5032  T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5033  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5034  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5035  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5036  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5037  TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5038  g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5039  tang0 = tan(g0);
5040  cosg0 = cos(g0);
5041  secg0 = (1.0/cosg0);
5042  secg0sq = (secg0*secg0);
5043  lng0 = (-log((1.0/g0)));
5044  T0 = (1.0+(g0*tang0));
5045  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5046  T2 = sqrt(T1);
5047  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5048  T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5049  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5050  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5051  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5052  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5053  TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5054  g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5055  lng0 = (-log((1.0/g0)));
5056  }
5057  else
5058  {
5059  if ((g0>=1e-300))
5060  {
5061  lng0 = (-log((1.0/g0)));
5062  }
5063  else
5064  {
5065  if (((F0-z2)>((-0.3)/T14)))
5066  {
5067  lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5068  }
5069  else
5070  {
5071  lng0 = ((F0-z1)-T1);
5072  }
5073  }
5074  }
5075  phis = ((vch+(T14*((lng0-model_.analogFunctions.lln<AdmsFadType>(cos(g0)))+F1)))+phibulk);
5076  }
5077  }
5078  else
5079  {
5080  F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5081  if ((F0<(-10)))
5082  {
5083  g0 = model_.analogFunctions.lexp<AdmsFadType>((2.0*F0));
5084  }
5085  else
5086  {
5087  if ((F0>10))
5088  {
5089  g0 = (F0/r1);
5090  }
5091  else
5092  {
5094  g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5095  }
5096  }
5097  if (((g0>g0max)||(g0<g0min)))
5098  {
5099  if ((g0>g0max))
5100  {
5101  g0 = g0max;
5102  }
5103  else
5104  {
5105  g0 = g0min;
5106  }
5107  }
5108  if ((F0<(-50)))
5109  {
5110  g0s = g0;
5111  }
5112  else
5113  {
5114  inv_g0 = (1.0/g0);
5115  inv_g0sq = (inv_g0*inv_g0);
5116  T0 = (1+(cdop*g0));
5117  T1 = (cdop/T0);
5118  T2 = (T1*T1);
5119  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5120  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5121  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5122  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5123  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5124  if (((g0>g0max)||(g0<g0min)))
5125  {
5126  if ((g0>g0max))
5127  {
5128  g0 = g0max;
5129  }
5130  else
5131  {
5132  g0 = g0min;
5133  }
5134  }
5135  inv_g0 = (1.0/g0);
5136  inv_g0sq = (inv_g0*inv_g0);
5137  T0 = (1+(cdop*g0));
5138  T1 = (cdop/T0);
5139  T2 = (T1*T1);
5140  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5141  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5142  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2.0*r2));
5143  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5144  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5145  if (((g0>g0max)||(g0<g0min)))
5146  {
5147  if ((g0>g0max))
5148  {
5149  g0 = g0max;
5150  }
5151  else
5152  {
5153  g0 = g0min;
5154  }
5155  }
5156  g0s = g0;
5157  }
5158  vpolys = ((((2.0*nVtm)*r2)*g0s)*g0s);
5159  phis = ((vgsfbeff-(((2.0*nVtm)*r1)*g0s))-vpolys);
5160  qis = (q0*g0s);
5161  }
5162  if (((model_.GEOMOD)!=3))
5163  {
5164  if ((NGATE_i>0))
5165  {
5166  T0 = (sqrt((1.0+((vgsfbeff-phis)/vpoly0)))-1.0);
5167  vpolys = ((vpoly0*T0)*T0);
5168  }
5169  else
5170  {
5171  vpolys = 0;
5172  }
5173  if (((model_.COREMOD)!=0))
5174  {
5175  qis = ((vgsfbeff-phis)-vpolys);
5176  }
5177  else
5178  {
5179  qis = (((vgsfbeff-phis)-qbs)-vpolys);
5180  }
5181  }
5182  Eeffs = (EeffFactor*(qbs+(eta_mu*qis)));
5183  qb0 = (1.0e-2/cox);
5184  T2 = pow((0.5*(1.0+fabs((qis/qb0)))),UCS_t);
5185  if (((model_.BULKMOD)!=0))
5186  {
5187  T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5188  }
5189  else
5190  {
5191  T3 = ((UA_t*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5192  }
5193  Dmobs = (1.0+T3);
5194  Dmobs = (Dmobs/(model_.U0MULT));
5195  if (((model_.RDSMOD)!=0))
5196  {
5197  Rdss = 0.0;
5198  }
5199  else
5200  {
5201  T4 = (1.0+(PRWGS_i*qis));
5202  T1 = (1.0/T4);
5203  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5204  Rdss = ((((RDSWMIN_i+(RDSW_i*T0))*WeffWRFactor)*NFINtotal)*rdstemp);
5205  }
5206  Esat = (((2*VSAT_t)/u0)*Dmobs);
5207  EsatL = (Esat*Leff);
5208  T6 = (KSATIV_i*((vgsfbeff-phis)+(2*Vtm)));
5209  if ((Rdss==0))
5210  {
5211  Vdsat = ((EsatL*T6)/(EsatL+T6));
5212  }
5213  else
5214  {
5215  WVCox = ((Weff0*VSAT_t)*cox);
5216  T0 = (WVCox*Rdss);
5217  Ta = (2*T0);
5218  Tb = ((T6+EsatL)+((3*T6)*T0));
5219  Tc = (T6*(EsatL+((2*T6)*T0)));
5220  Vdsat = ((Tb-sqrt(((Tb*Tb)-((2*Ta)*Tc))))/Ta);
5221  }
5222  Vdsat = (model_.analogFunctions.hypsmooth<AdmsFadType>((Vdsat-1.0E-3),1.0E-5)+1.0E-3);
5223  T7 = pow((vds/Vdsat),MEXP_a);
5224  T8 = pow((1.0+T7),inv_MEXP);
5225  Vdseff = (vds/T8);
5226  if ((Vdseff>vds))
5227  {
5228  Vdseff = vds;
5229  }
5230  vch = (Vdseff+dvch_qm);
5231  if (((model_.GEOMOD)!=3))
5232  {
5233  if (((model_.COREMOD)!=0))
5234  {
5235  F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
5236  expff = model_.analogFunctions.lexp<AdmsFadType>(F0);
5237  z1 = atan(expff);
5238  if ((F0>80.0))
5239  {
5240  T0 = F0;
5241  }
5242  else
5243  {
5244  T0 = model_.analogFunctions.lln<AdmsFadType>((1.0+expff));
5245  }
5246  z2 = atan(((2*T0)*Inv_r1pi));
5247  g0 = min(z1,max(z2,1e-15));
5248  if (((g0>g0max)||(g0<g0min)))
5249  {
5250  if ((g0>g0max))
5251  {
5252  g0 = g0max;
5253  }
5254  else
5255  {
5256  g0 = g0min;
5257  }
5258  }
5259  tang0 = tan(g0);
5260  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
5261  secg0sq = ((tang0*tang0)+1.0);
5262  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
5263  inv_g0 = (1.0/g0);
5264  T0 = (g0*tang0);
5265  T1 = (T0*T0);
5266  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5267  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5268  e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
5269  e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
5270  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5271  if (((g0>g0max)||(g0<g0min)))
5272  {
5273  if ((g0>g0max))
5274  {
5275  g0 = g0max;
5276  }
5277  else
5278  {
5279  g0 = g0min;
5280  }
5281  }
5282  tang0 = tan(g0);
5283  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
5284  secg0sq = ((tang0*tang0)+1.0);
5285  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
5286  inv_g0 = (1.0/g0);
5287  T0 = (g0*tang0);
5288  T1 = (T0*T0);
5289  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5290  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5291  e2 = ((secg0sq*(1.0+(2.0*(((r1+(((r2*g0)*g0)*secg0sq))+(T0*r1))+((2.0*r2)*(T1+(2.0*T0)))))))+((inv_g0*inv_g0)*(((2.0*T1)*r2)-1.0)));
5292  e3 = (((((2.0*inv_g0)*inv_g0)*inv_g0)+((((2.0*g0)*secg0sq)*secg0sq)*(r1+((2.0*r2)*(3.0+(4.0*T0))))))+(((2.0*secg0sq)*tang0)*(((1.0+(3.0*r1))+((2.0*r1)*T0))+((2.0*r2)*((3.0*(1+(2.0*T0)))+(2.0*T1))))));
5293  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5294  if (((g0>g0max)||(g0<g0min)))
5295  {
5296  if ((g0>g0max))
5297  {
5298  g0 = g0max;
5299  }
5300  else
5301  {
5302  g0 = g0min;
5303  }
5304  }
5305  g0d = g0;
5306  tang0d = tan(g0d);
5307  phid = (vch+((2.0*nVtm)*((model_.analogFunctions.lln<AdmsFadType>(g0d)+(0.5*model_.analogFunctions.lln<AdmsFadType>((1.0+(tang0d*tang0d)))))+F1)));
5308  }
5309  else
5310  {
5311  F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
5312  T0 = (phibulk*aab);
5313  T1 = (phibulk/T14);
5314  z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
5315  guessA = ((2.0*r1)*T1);
5316  guessA = (guessA/(1.0-exp((-guessA))));
5317  z2 = (z1+log((sqrt(guessA)/r1)));
5318  if (((F0-z2)>((-0.3)/T14)))
5319  {
5320  if (((F0-z2)<20))
5321  {
5322  T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5323  }
5324  else
5325  {
5326  T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5327  }
5328  T3 = pow(T2,2.0);
5329  guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5330  }
5331  else
5332  {
5333  guessB = exp(((F0-z1)-T1));
5334  }
5335  g0 = guessB;
5336  if ((g0>1e-60))
5337  {
5338  g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5339  tang0 = tan(g0);
5340  cosg0 = cos(g0);
5341  secg0 = (1.0/cosg0);
5342  secg0sq = (secg0*secg0);
5343  lng0 = (-log((1.0/g0)));
5344  T0 = (1.0+(g0*tang0));
5345  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5346  T2 = sqrt(T1);
5347  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5348  T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5349  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5350  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5351  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5352  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5353  TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5354  g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5355  tang0 = tan(g0);
5356  cosg0 = cos(g0);
5357  secg0 = (1.0/cosg0);
5358  secg0sq = (secg0*secg0);
5359  lng0 = (-log((1.0/g0)));
5360  T0 = (1.0+(g0*tang0));
5361  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5362  T2 = sqrt(T1);
5363  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5364  T4 = (((-2.0)+(((((2.0*T13)*g0)*g0)*secg0sq)*secg0sq))+(secg0sq*((((2*T13)+(aab*T14))+(((8.0*T13)*g0)*tang0))+(((((4.0*T13)*g0)*g0)*tang0)*tang0))));
5365  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5366  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5367  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5368  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5369  TA = (((((2.0/((g0*g0)*g0))+((2.0*secg0sq)*tang0))+((((3.0*r1)*T3)/(4.0*pow(T2,3)))*(((T3*T3)/((2.0*T2)*T2))-T4)))+((r1*T5)/(2.0*T2)))+(r2*T5));
5370  g0 = (g0-((T7/T8)*((1.0+((T7*T9)/((2.0*T8)*T8)))+(((T7*T7)*(((3.0*T9)*T9)-(T8*TA)))/(6.0*pow(T8,4))))));
5371  lng0 = (-log((1.0/g0)));
5372  }
5373  else
5374  {
5375  if ((g0>=1e-300))
5376  {
5377  lng0 = (-log((1.0/g0)));
5378  }
5379  else
5380  {
5381  if (((F0-z2)>((-0.3)/T14)))
5382  {
5383  lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5384  }
5385  else
5386  {
5387  lng0 = ((F0-z1)-T1);
5388  }
5389  }
5390  }
5391  phid = ((vch+(T14*((lng0-model_.analogFunctions.lln<AdmsFadType>(cos(g0)))+F1)))+phibulk);
5392  }
5393  }
5394  else
5395  {
5396  F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5397  if ((F0<(-10)))
5398  {
5399  g0 = model_.analogFunctions.lexp<AdmsFadType>((2.0*F0));
5400  }
5401  else
5402  {
5403  if ((F0>10))
5404  {
5405  g0 = (F0/r1);
5406  }
5407  else
5408  {
5410  g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5411  }
5412  }
5413  if (((g0>g0max)||(g0<g0min)))
5414  {
5415  if ((g0>g0max))
5416  {
5417  g0 = g0max;
5418  }
5419  else
5420  {
5421  g0 = g0min;
5422  }
5423  }
5424  if ((F0<(-50)))
5425  {
5426  g0d = g0;
5427  }
5428  else
5429  {
5430  inv_g0 = (1.0/g0);
5431  inv_g0sq = (inv_g0*inv_g0);
5432  T0 = (1+(cdop*g0));
5433  T1 = (cdop/T0);
5434  T2 = (T1*T1);
5435  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5436  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5437  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5438  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5439  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5440  if (((g0>g0max)||(g0<g0min)))
5441  {
5442  if ((g0>g0max))
5443  {
5444  g0 = g0max;
5445  }
5446  else
5447  {
5448  g0 = g0min;
5449  }
5450  }
5451  inv_g0 = (1.0/g0);
5452  inv_g0sq = (inv_g0*inv_g0);
5453  T0 = (1+(cdop*g0));
5454  T1 = (cdop/T0);
5455  T2 = (T1*T1);
5456  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5457  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5458  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5459  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5460  g0 = (g0-((e0/e1)*((1.0+((e0*e2)/((2.0*e1)*e1)))+(((e0*e0)*(((3.0*e2)*e2)-(e1*e3)))/((((6.0*e1)*e1)*e1)*e1)))));
5461  if (((g0>g0max)||(g0<g0min)))
5462  {
5463  if ((g0>g0max))
5464  {
5465  g0 = g0max;
5466  }
5467  else
5468  {
5469  g0 = g0min;
5470  }
5471  }
5472  g0d = g0;
5473  }
5474  vpolyd = ((((2*nVtm)*r2)*g0d)*g0d);
5475  phid = ((vgsfbeff-(((2*nVtm)*r1)*g0d))-vpolyd);
5476  qid = (q0*g0d);
5477  }
5478  qba = qbs;
5479  if (((model_.GEOMOD)!=3))
5480  {
5481  if ((NGATE_i>0))
5482  {
5483  T0 = (sqrt((1+((vgsfbeff-phid)/vpoly0)))-1);
5484  vpolyd = ((vpoly0*T0)*T0);
5485  }
5486  else
5487  {
5488  vpolyd = 0;
5489  }
5490  if (((model_.COREMOD)!=0))
5491  {
5492  qid = ((vgsfbeff-phid)-vpolyd);
5493  }
5494  else
5495  {
5496  qid = (((vgsfbeff-phid)-qbs)-vpolyd);
5497  }
5498  }
5499  qia = (0.5*(qis+qid));
5500  dqi = (qis-qid);
5501  T0 = (pow(Vdseff,2.0)/6.25e-4);
5502  if (((model_.CHARGEWF)!=0))
5503  {
5504  qia2 = ((0.5*(qis+qid))+((((model_.CHARGEWF)*(1.0-model_.analogFunctions.lexp<AdmsFadType>((-T0))))*0.5)*dqi));
5505  }
5506  else
5507  {
5508  qia2 = (0.5*(qis+qid));
5509  }
5510  if (((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0)))
5511  {
5512  T4 = ((qia+((model_.ETAQM)*qba))/(model_.QM0));
5513  T5 = (1.0+pow(T4,(model_.PQM)));
5514  Tcen = (Tcen0/T5);
5515  if ( (model_.GEOMOD) == (0))
5516  {
5517  Weff = Weff0;
5518  WeffCV = WeffCV0;
5519  }
5520  else
5521  if ( (model_.GEOMOD) == (1))
5522  {
5523  Weff = (Weff0-((4.0*QMTCENIV_i)*Tcen));
5524  WeffCV = (WeffCV0-((4.0*QMTCENCV_i)*Tcen));
5525  }
5526  else
5527  if ( (model_.GEOMOD) == (2))
5528  {
5529  Weff = (Weff0-((8.0*QMTCENIV_i)*Tcen));
5530  WeffCV = (WeffCV0-((8.0*QMTCENCV_i)*Tcen));
5531  }
5532  else
5533  if ( (model_.GEOMOD) == (3))
5534  {
5535  Weff = (Weff0-(((2.0*3.14159265358979323846)*QMTCENIV_i)*Tcen));
5536  WeffCV = (WeffCV0-(((2.0*3.14159265358979323846)*QMTCENCV_i)*Tcen));
5537  }
5538  else
5539  {
5540  // no default
5541  }
5542  if (((model_.GEOMOD)!=3))
5543  {
5544  coxeff = ((3.9*8.8542e-12)/((((model_.TOXP)*3.9)/(model_.EPSROX))+((Tcen*QMTCENCV_i)/epsratio)));
5545  }
5546  else
5547  {
5548  coxeff = ((3.9*8.8542e-12)/(R*((model_.analogFunctions.lln<AdmsFadType>((R/(R-(Tcen*QMTCENCV_i))))/epsratio)+((model_.analogFunctions.lln<AdmsFadType>((1+((model_.TOXP)/R)))*3.9)/(model_.EPSROX)))));
5549  }
5550  }
5551  else
5552  {
5553  Weff = Weff0;
5554  WeffCV = WeffCV0;
5555  coxeff = cox;
5556  }
5557  if (((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0))&&(QMTCENCVA_i!=0)))
5558  {
5559  T6 = (1.0+pow((qi_acc/(model_.QM0ACC)),(model_.PQMACC)));
5560  Tcen = (Tcen0/T6);
5561  if (((model_.GEOMOD)!=3))
5562  {
5563  cox_acc = ((3.9*8.8542e-12)/((((model_.TOXP)*3.9)/(model_.EPSROX))+((Tcen*QMTCENCVA_i)/epsratio)));
5564  }
5565  else
5566  {
5567  cox_acc = ((3.9*8.8542e-12)/(R*((model_.analogFunctions.lln<AdmsFadType>((R/(R-(Tcen*QMTCENCVA_i))))/epsratio)+((model_.analogFunctions.lln<AdmsFadType>((1+((model_.TOXP)/R)))*3.9)/(model_.EPSROX)))));
5568  }
5569  }
5570  beta = (((u0*cox)*Weff)/Leff);
5571  Eeffm = (EeffFactor*(qba+(eta_mu*qia2)));
5572  T2 = pow((0.5*(1.0+fabs((qia2/qb0)))),UCS_t);
5573  if (((model_.BULKMOD)!=0))
5574  {
5575  T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5576  }
5577  else
5578  {
5579  T3 = ((UA_t*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5580  }
5581  Dmob = (1.0+T3);
5582  Dmob = (Dmob/(model_.U0MULT));
5583  ueff = (u0/Dmob);
5584  Eeffm_cv = (EeffFactor*(qba+(eta_mu_cv*qia2)));
5585  T3 = ((UA_t*pow(fabs(Eeffm_cv),EU_i))+(UD_t/T2));
5586  Dmob_cv = (1.0+T3);
5587  Dmob_cv = (Dmob_cv/(model_.U0MULT));
5588  tmp = (((DROUT_i*Leff)/scl)+1.0e-6);
5589  if ((tmp<40.0))
5590  {
5591  DIBLfactor = (((0.5*PDIBL1_a)/(cosh(tmp)-1.0))+PDIBL2_i);
5592  }
5593  else
5594  {
5595  DIBLfactor = ((PDIBL1_a*exp((-tmp)))+PDIBL2_i);
5596  }
5597  if ((PVAG_i>0))
5598  {
5599  PVAGfactor = (1.0+((PVAG_i*qia)/EsatL));
5600  }
5601  else
5602  {
5603  PVAGfactor = (1.0/(1.0-((PVAG_i*qia)/EsatL)));
5604  }
5605  if ((Vdseff>vds))
5606  {
5607  Vdseff = vds;
5608  }
5609  diffVds = (vds-Vdseff);
5610  Vgst2Vtm = (qia+(2.0*Vtm));
5611  if ((DIBLfactor>0))
5612  {
5613  T1 = Vgst2Vtm;
5614  T3 = (T1/(Vdsat+T1));
5615  VaDIBL = (((T1/DIBLfactor)*T3)*PVAGfactor);
5616  Moc = (1.0+(diffVds/VaDIBL));
5617  }
5618  else
5619  {
5620  Moc = 1.0;
5621  }
5622  if ((PCLM_i>0))
5623  {
5624  if ((PCLMG_i<0.0))
5625  {
5626  T1 = (1.0/((1.0/PCLM_i)-(PCLMG_i*qia)));
5627  }
5628  else
5629  {
5630  T1 = (PCLM_i+(PCLMG_i*qia));
5631  }
5632  Mclm = (1.0+(T1*model_.analogFunctions.lln<AdmsFadType>((1.0+(((vds-Vdseff)/T1)/(Vdsat+EsatL))))));
5633  }
5634  else
5635  {
5636  Mclm = 1.0;
5637  }
5638  Moc = (Moc*Mclm);
5639  Esat1 = ((2.0*VSAT1_a)/ueff);
5640  Esat1L = (Esat1*Leff);
5642  Ta = (1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSAT_i)*model_.analogFunctions.lln<AdmsFadType>(DELTAVSAT_i))));
5643  Dvsat = ((1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSAT_i)*model_.analogFunctions.lln<AdmsFadType>((DELTAVSAT_i+T0)))))/Ta);
5644  Dvsat = (Dvsat+((((0.5*PTWG_a)*qia)*dqi)*dqi));
5645  T0 = (A1_t+(A2_t/(qia+(2.0*nVtm))));
5646  T1 = ((T0*dqi)*dqi);
5647  T2 = ((T1+1.0)-0.001);
5648  T3 = ((-1.0)+(0.5*(T2+sqrt(((T2*T2)+0.004)))));
5649  Nsat = (0.5*(1.0+sqrt((1.0+T3))));
5650  Dvsat = (Dvsat*Nsat);
5651  if ((K0_t!=0))
5652  {
5653  T1 = (K0_t/((K0SI_t*qia)+(2.0*nVtm)));
5654  Mnud = model_.analogFunctions.lexp<AdmsFadType>((-T1));
5655  }
5656  else
5657  {
5658  Mnud = 1.0;
5659  }
5660  if (((model_.BULKMOD)!=0))
5661  {
5662  T0 = model_.analogFunctions.hypsmooth<AdmsFadType>((K1_t+(K1SAT_t*vdsx)),1.0E-6);
5663  T1 = (T0/((K1SI_t*qia)+(2.0*nVtm)));
5664  T3 = (sqrt((PHIBE_i-veseff))-sqrt(PHIBE_i));
5665  Mob = model_.analogFunctions.lexp<AdmsFadType>(((-T1)*T3));
5666  }
5667  else
5668  {
5669  Mob = 1.0;
5670  }
5671  EsatCV = (((2.0*VSATCV_t)*Dmob_cv)/u0);
5672  EsatCVL = (EsatCV*LeffCV);
5673  T0 = model_.analogFunctions.lexp<AdmsFadType>((PSATCV_i*model_.analogFunctions.lln<AdmsFadType>((dqi/EsatCVL))));
5674  Ta = (1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSATCV_i)*model_.analogFunctions.lln<AdmsFadType>(DELTAVSATCV_i))));
5675  DvsatCV = ((1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSATCV_i)*model_.analogFunctions.lln<AdmsFadType>((DELTAVSATCV_i+T0)))))/Ta);
5676  if ((PCLMCV_i!=0))
5677  {
5678  MclmCV = (1.0+(PCLMCV_i*model_.analogFunctions.lln<AdmsFadType>((1.0+(((vds-Vdseff)/PCLMCV_i)/(Vdsat+EsatCVL))))));
5679  }
5680  else
5681  {
5682  MclmCV = 1.0;
5683  }
5684  if (((model_.GEOMOD)!=3))
5685  {
5686  qb = (((((-1.60219e-19)*nbody)*(model_.HFIN))*TFIN)*LeffCV);
5687  }
5688  else
5689  {
5690  qb = ((((((-1.60219e-19)*nbody)*3.14159265358979323846)*R)*R)*LeffCV);
5691  }
5692  if ((((model_.GEOMOD)!=3)&&((model_.COREMOD)!=0)))
5693  {
5694  T0 = ((2.0*csi)/cox);
5695  T1 = (g0s*tang0s);
5696  T2 = (g0d*tang0d);
5697  if ((NGATE_i>0.0))
5698  {
5699  T3 = ((((4.0*r2)*(((T1*T1)+(T1*T2))+(T2*T2)))/3.0)+(T0*(T1+T2)));
5700  }
5701  else
5702  {
5703  T3 = (T0*(T1+T2));
5704  }
5705  T6 = ((g0s*g0s)-(g0d*g0d));
5706  ids0 = ((((2.0*T0)*nVtm)*nVtm)*(((T3+2.0)*(T1-T2))-T6));
5707  ids0_ov_dqi = ((0.5*nVtm)*(T3+1.0));
5708  if (((model_.RDSMOD)!=0))
5709  {
5710  Rdsi = 0.0;
5711  Dr = 1.0;
5712  T2 = (vgs_noswap-vfbsd);
5713  T3 = sqrt(((T2*T2)+1.0e-1));
5714  vgs_eff = (0.5*(T2+T3));
5715  T4 = (1.0+(PRWGS_i*vgs_eff));
5716  T1 = (1.0/T4);
5717  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5719  Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5720  T2 = (vgd_noswap-vfbsd);
5721  T3 = sqrt(((T2*T2)+1.0e-1));
5722  vgd_eff = (0.5*(T2+T3));
5723  T4 = (1.0+(PRWGD_i*vgd_eff));
5724  T1 = (1.0/T4);
5725  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5727  Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5728  }
5729  else
5730  {
5731  Rsource = RSourceGeo;
5732  Rdrain = RDrainGeo;
5733  T4 = (1.0+(PRWGS_i*qia));
5734  T1 = (1.0/T4);
5735  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5736  Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5737  Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5738  }
5739  ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5740  ids = (ids*(model_.IDS0MULT));
5741  if ((NGATE_i>0.0))
5742  {
5743  Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5744  }
5745  else
5746  {
5747  Tcom = 0.0;
5748  }
5749  if ((NGATE_i>0))
5750  {
5751  idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5752  }
5753  else
5754  {
5755  idscv = (qia+((2.0-etaiv)*nVtm));
5756  }
5757  idscv = (idscv/DvsatCV);
5758  beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5759  dqi_idscv = (dqi/idscv);
5760  if ((NGATE_i>0))
5761  {
5762  T1 = (kpoly+((4.0*cpoly)*qia));
5763  }
5764  else
5765  {
5766  T1 = 1.0;
5767  }
5768  qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5769  if ((NGATE_i>0))
5770  {
5771  T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5772  T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5773  }
5774  else
5775  {
5776  T1 = 15.0;
5777  T2 = 63.0;
5778  }
5779  qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5780  inv_MclmCV = (1.0/MclmCV);
5781  qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5782  qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5783  T1 = ((WeffCV*LeffCV)*coxeff);
5784  qinv = ((NFINtotal*qg)*T1);
5785  qd = ((NFINtotal*qd)*T1);
5786  qg = (qinv-(NFINtotal*qb));
5787  qd = (-qd);
5788  qb = ((+NFINtotal)*qb);
5789  qs = (((-qg)-qd)-qb);
5790  if ((sigvds<0))
5791  {
5792  T1 = qd;
5793  qd = qs;
5794  qs = T1;
5795  }
5796  }
5797  else
5798  {
5799  if (((model_.NQSMOD)==3))
5800  {
5801  std::cerr << "[bsimcmg] Although the model selector NQSMOD is set to 3, the NQS charge segmentation model is not activated in the Verilog-A code. Please uncomment `define __NQSMOD3__ in bsimcmg.va to activate it. Quasi-static calculations being performed instead" << std::endl;
5802  }
5803  if ((NGATE_i>0.0))
5804  {
5805  Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5806  }
5807  else
5808  {
5809  Tcom = 0.0;
5810  }
5811  if ((NGATE_i>0))
5812  {
5813  T0 = (((2.0*cpoly)*Tcom)/3);
5814  T1 = (kpoly*qia);
5815  }
5816  else
5817  {
5818  T0 = 0;
5819  T1 = qia;
5820  }
5821  etaiv = (q0/(q0+(cdop*qia)));
5822  T2 = ((2.0-etaiv)*nVtm);
5823  ids0_ov_dqi = ((T0+T1)+T2);
5824  ids0 = (ids0_ov_dqi*dqi);
5825  if (((model_.RDSMOD)!=0))
5826  {
5827  Rdsi = 0.0;
5828  Dr = 1.0;
5829  T2 = (vgs_noswap-vfbsd);
5830  T3 = sqrt(((T2*T2)+1.0e-1));
5831  vgs_eff = (0.5*(T2+T3));
5832  T4 = (1.0+(PRWGS_i*vgs_eff));
5833  T1 = (1.0/T4);
5834  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5836  Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5837  T2 = (vgd_noswap-vfbsd);
5838  T3 = sqrt(((T2*T2)+1.0e-1));
5839  vgd_eff = (0.5*(T2+T3));
5840  T4 = (1.0+(PRWGD_i*vgd_eff));
5841  T1 = (1.0/T4);
5842  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5844  Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5845  }
5846  else
5847  {
5848  Rsource = RSourceGeo;
5849  Rdrain = RDrainGeo;
5850  T4 = (1.0+(PRWGS_i*qia));
5851  T1 = (1.0/T4);
5852  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5853  Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5854  Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5855  }
5856  ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5857  ids = (ids*(model_.IDS0MULT));
5858  if ((NGATE_i>0))
5859  {
5860  idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5861  }
5862  else
5863  {
5864  idscv = (qia+((2.0-etaiv)*nVtm));
5865  }
5866  idscv = (idscv/DvsatCV);
5867  beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5868  dqi_idscv = (dqi/idscv);
5869  if ((NGATE_i>0))
5870  {
5871  T1 = (kpoly+((4.0*cpoly)*qia));
5872  }
5873  else
5874  {
5875  T1 = 1.0;
5876  }
5877  qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5878  if ((NGATE_i>0))
5879  {
5880  T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5881  T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5882  }
5883  else
5884  {
5885  T1 = 15.0;
5886  T2 = 63.0;
5887  }
5888  qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5889  inv_MclmCV = (1.0/MclmCV);
5890  qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5891  qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5892  T1 = ((WeffCV*LeffCV)*coxeff);
5893  qinv = ((NFINtotal*qg)*T1);
5894  qd = ((NFINtotal*qd)*T1);
5895  qg = (qinv-(NFINtotal*qb));
5896  qd = (-qd);
5897  qb = ((+NFINtotal)*qb);
5898  qs = (((-qg)-qd)-qb);
5899  if ((sigvds<0))
5900  {
5901  T1 = qd;
5902  qd = qs;
5903  qs = T1;
5904  }
5905  }
5906  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
5907  {
5908  T1 = (((NFINtotal*WeffCV0)*LeffCV_acc)*cox_acc);
5909  qg_acc = ((-qi_acc)*T1);
5910  qb_acc = ((+qi_acc)*T1);
5911  }
5912  qgs_ov = 0.0;
5913  qgd_ov = 0.0;
5914  if (((model_.CGEOMOD)!=1))
5915  {
5916  T1 = ((NFINtotal*WeffCV)*devsign);
5917  T2 = (devsign*(probeVars[admsProbeID_V_g_si]));
5918  T0 = ((T2-vfbsd)+0.02);
5919  vgs_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5920  qgs_ov = (T1*((CGSL_i*(((T2-vfbsd)-vgs_overlap)-((0.5*CKAPPAS_i)*(sqrt((1.0-((4.0*vgs_overlap)/CKAPPAS_i)))-1.0))))+(CGSO_i*T2)));
5921  T2 = (devsign*(probeVars[admsProbeID_V_g_di]));
5922  T0 = ((T2-vfbsd)+0.02);
5923  vgd_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5924  qgd_ov = (T1*((CGDL_i*(((T2-vfbsd)-vgd_overlap)-((0.5*CKAPPAD_i)*(sqrt((1.0-((4.0*vgd_overlap)/CKAPPAD_i)))-1.0))))+(CGDO_i*T2)));
5925  }
5926  if (((model_.CGEOMOD)==0))
5927  {
5928  T1 = (NFINtotal*WeffCV0);
5929  qgs_fr = ((T1*CFS_i)*(probeVars[admsProbeID_V_g_si]));
5930  qgd_fr = ((T1*CFD_i)*(probeVars[admsProbeID_V_g_di]));
5931  qgs_parasitic = (qgs_ov+qgs_fr);
5932  qgd_parasitic = (qgd_ov+qgd_fr);
5933  }
5934  else
5935  {
5936  if (((model_.CGEOMOD)==1))
5937  {
5938  if (((model_.CGEO1SW)==1))
5939  {
5940  T0 = (NFINtotal*WeffCV0);
5941  COVS_i = (T0*COVS_i);
5942  COVD_i = (T0*COVD_i);
5943  cgsp = (T0*CGSP);
5944  cgdp = (T0*CGDP);
5945  }
5946  else
5947  {
5948  cgsp = CGSP;
5949  cgdp = CGDP;
5950  }
5951  qgs_ov = (COVS_i*(probeVars[admsProbeID_V_g_si]));
5952  qgd_ov = (COVD_i*(probeVars[admsProbeID_V_g_di]));
5953  qgs_parasitic = qgs_ov;
5954  qgd_parasitic = qgd_ov;
5955  qgs_fr = (cgsp*(probeVars[admsProbeID_V_g_s]));
5956  qgd_fr = (cgdp*(probeVars[admsProbeID_V_g_d]));
5957  }
5958  else
5959  {
5960  qgs_fr = (Cfr_geo*(probeVars[admsProbeID_V_g_si]));
5961  qgd_fr = (Cfr_geo*(probeVars[admsProbeID_V_g_di]));
5962  qgs_parasitic = (qgs_ov+qgs_fr);
5963  qgd_parasitic = (qgd_ov+qgd_fr);
5964  }
5965  }
5966  qds_fr = (CDSP*(probeVars[admsProbeID_V_d_s]));
5967  Iii = 0;
5968  if (((model_.IIMOD)==1))
5969  {
5970  T0 = ((ALPHA0_t+(ALPHA1_t*Leff))/Leff);
5971  if (((T0<=0.0)||(BETA0_t<=0.0)))
5972  {
5973  Iii = 0.0;
5974  }
5975  else
5976  {
5977  T1 = ((-BETA0_t)/(diffVds+1.0e-30));
5978  Iii = (((T0*diffVds)*ids)*model_.analogFunctions.lexp<AdmsFadType>(T1));
5979  }
5980  }
5981  else
5982  {
5983  if (((model_.IIMOD)==2))
5984  {
5985  ALPHAII = ((ALPHAII0_t+(ALPHAII1_t*Leff))/Leff);
5986  if ((ALPHAII<=0.0))
5987  {
5988  Iii = 0.0;
5989  }
5990  else
5991  {
5992  T0 = (ESATII_i*Leff);
5993  T1 = ((SII0_t*T0)/(1.0+T0));
5994  T0 = (1.0/(1.0+model_.analogFunctions.hypsmooth<AdmsFadType>((SII1_i*vgsfbeff),1.0e-3)));
5995  T3 = (T0+SII2_i);
5996  T2 = model_.analogFunctions.hypsmooth<AdmsFadType>((vgsfbeff*T3),1.0e-3);
5997  T3 = (1.0/(1.0+(SIID_i*vds)));
5998  VgsStep = ((T1*T2)*T3);
5999  Vdsatii = (VgsStep*(1.0-(LII_i/Leff)));
6000  Vdiff = (vds-Vdsatii);
6001  T0 = ((BETAII2_i+(BETAII1_i*Vdiff))+((BETAII0_i*Vdiff)*Vdiff));
6002  T1 = sqrt(((T0*T0)+1.0E-10));
6003  T2 = ((10.0-(ALPHAII*model_.analogFunctions.lexp<AdmsFadType>((Vdiff/T1))))-0.01);
6004  Ratio = (10.0-(0.5*(T2+sqrt(((T2*T2)+((4.0*10.0)*0.01))))));
6005  Iii = (Ratio*ids);
6006  }
6007  }
6008  }
6009  igbinv = 0.0;
6010  igbacc = 0.0;
6011  igcs = 0.0;
6012  igcd = 0.0;
6013  igs = 0.0;
6014  igd = 0.0;
6015  if (((model_.IGBMOD)!=0))
6016  {
6017  T1 = (((qia-EIGBINV_i)/NIGBINV_i)/Vtm);
6018  Vaux_Igbinv = ((NIGBINV_i*Vtm)*model_.analogFunctions.lln<AdmsFadType>((1+model_.analogFunctions.lexp<AdmsFadType>(T1))));
6019  T2 = (AIGBINV_t-(BIGBINV_i*qia));
6020  T3 = (1+(CIGBINV_i*qia));
6021  T4 = ((((-9.82222e11)*(model_.TOXG))*T2)*T3);
6023  T6 = 3.75956e-7;
6024  igbinv = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbinv)*T5);
6025  igbinv = (igbinv*igtemp);
6026  vfbzb = ((deltaPhi-(Eg/2.0))-phib);
6027  T0 = (vfbzb-vge);
6028  T1 = ((T0/NIGBACC_i)/Vtm);
6029  Vaux_Igbacc = ((NIGBACC_i*Vtm)*model_.analogFunctions.lln<AdmsFadType>((1+model_.analogFunctions.lexp<AdmsFadType>(T1))));
6030  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
6031  {
6032  Voxacc = qi_acc;
6033  }
6034  else
6035  {
6036  if ((vfbzb<=0))
6037  {
6038  Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))-(0.08*vfbzb)))));
6039  }
6040  else
6041  {
6042  Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))+(0.08*vfbzb)))));
6043  }
6044  }
6045  T2 = (AIGBACC_t-(BIGBACC_i*Voxacc));
6046  T3 = (1+(CIGBACC_i*Voxacc));
6047  T4 = ((((-7.45669e11)*(model_.TOXG))*T2)*T3);
6049  T6 = 4.97232e-7;
6050  igbacc = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbacc)*T5);
6051  igbacc = (igbacc*igtemp);
6052  }
6053  if (((model_.IGCMOD)!=0))
6054  {
6055  T1 = (AIGC_t-(BIGC_i*qia));
6056  T2 = (1.0+(CIGC_i*qia));
6057  T3 = ((((-Bechvb)*(model_.TOXG))*T1)*T2);
6058  T4 = (qia*model_.analogFunctions.lexp<AdmsFadType>(T3));
6059  T5 = ((vge+(0.5*vdsx))+(0.5*(ves_jct+ved_jct)));
6060  igc0 = ((((((Weff0*Leff)*Aechvb)*Toxratio)*T4)*T5)*igtemp);
6061  Vdseffx = (sqrt(((Vdseff*Vdseff)+0.01))-0.1);
6062  T1 = (PIGCD_i*Vdseffx);
6063  T1_exp = model_.analogFunctions.lexp<AdmsFadType>((-T1));
6064  T3 = (((T1+T1_exp)-1.0)+1.0E-4);
6065  T4 = ((1.0-((T1+1.0)*T1_exp))+1.0E-4);
6066  T5 = ((T1*T1)+2.0E-4);
6067  igcd = ((igc0*T4)/T5);
6068  igcs = ((igc0*T3)/T5);
6069  T0 = vgs_noswap;
6070  vgs_eff = sqrt(((T0*T0)+1.0e-4));
6071  T1 = (AIGS_t-(BIGS_i*vgs_eff));
6072  T2 = (1.0+(CIGS_i*vgs_eff));
6073  T3 = (((((-Bechvb)*(model_.TOXG))*POXEDGE_i)*T1)*T2);
6075  if ((sigvds>0))
6076  {
6077  igs = ((((igsd_mult*(model_.DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6078  }
6079  else
6080  {
6081  igd = ((((igsd_mult*(model_.DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6082  }
6083  T0 = vgd_noswap;
6084  vgd_eff = sqrt(((T0*T0)+1.0e-4));
6085  T1 = (AIGD_t-(BIGD_i*vgd_eff));
6086  T2 = (1.0+(CIGD_i*vgd_eff));
6087  T3 = (((((-Bechvb)*(model_.TOXG))*POXEDGE_i)*T1)*T2);
6089  if ((sigvds>0))
6090  {
6091  igd = ((((igsd_mult*(model_.DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6092  }
6093  else
6094  {
6095  igs = ((((igsd_mult*(model_.DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6096  }
6097  }
6098  igisl = 0.0;
6099  igidl = 0.0;
6100  if (((model_.GIDLMOD)!=0))
6101  {
6102  T0 = (epsratio*(model_.EOT));
6103  if (((AGIDL_i<=0.0)||(BGIDL_t<=0.0)))
6104  {
6105  T6 = 0.0;
6106  }
6107  else
6108  {
6109  T1 = ((((-vgd_noswap)-EGIDL_i)+vfbsd)/T0);
6110  T1 = model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-2);
6111  T2 = (BGIDL_t/(T1+1.0E-3));
6113  if (((model_.BULKMOD)!=0))
6114  {
6115  T4 = (((-ved_jct)*ved_jct)*ved_jct);
6116  T4a = ((CGIDL_i+fabs(T4))+1.0E-9);
6117  T5 = (model_.analogFunctions.hypsmooth<AdmsFadType>((T4/T4a),1.0E-6)-1.0E-6);
6118  T6 = ((((AGIDL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*T5);
6119  }
6120  else
6121  {
6122  T6 = ((((AGIDL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*vds_noswap);
6123  }
6124  }
6125  if ((sigvds>0.0))
6126  {
6127  igidl = T6;
6128  }
6129  else
6130  {
6131  igisl = T6;
6132  }
6133  if (((AGISL_i<=0.0)||(BGISL_t<=0.0)))
6134  {
6135  T6 = 0.0;
6136  }
6137  else
6138  {
6139  T1 = ((((-vgs_noswap)-EGISL_i)+vfbsd)/T0);
6140  T1 = model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-2);
6141  T2 = (BGISL_t/(T1+1.0E-3));
6143  if (((model_.BULKMOD)!=0))
6144  {
6145  T4 = (((-ves_jct)*ves_jct)*ves_jct);
6146  T4a = ((CGISL_i+fabs(T4))+1.0E-9);
6147  T5 = (model_.analogFunctions.hypsmooth<AdmsFadType>((T4/T4a),1.0E-6)-1.0E-6);
6148  T6 = ((((AGISL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*T5);
6149  }
6150  else
6151  {
6152  T6 = ((((AGISL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*(-vds_noswap));
6153  }
6154  }
6155  if ((sigvds>0.0))
6156  {
6157  igisl = T6;
6158  }
6159  else
6160  {
6161  igidl = T6;
6162  }
6163  }
6164  if (((model_.BULKMOD)!=0))
6165  {
6166  if ((Isbs>0.0))
6167  {
6168  if ((ves_jct<VjsmRev))
6169  {
6170  T0 = (ves_jct/Nvtms);
6171  T1 = (model_.analogFunctions.lexp<AdmsFadType>(T0)-1.0);
6172  T2 = (IVjsmRev+(SslpRev*(ves_jct-VjsmRev)));
6173  Ies = (T1*T2);
6174  }
6175  else
6176  {
6177  if ((ves_jct<=VjsmFwd))
6178  {
6179  T0 = (ves_jct/Nvtms);
6180  T1 = (((model_.BVS)+ves_jct)/Nvtms);
6181  T2 = model_.analogFunctions.lexp<AdmsFadType>((-T1));
6182  Ies = (Isbs*(((model_.analogFunctions.lexp<AdmsFadType>(T0)+XExpBVS)-1.0)-((model_.XJBVS)*T2)));
6183  }
6184  else
6185  {
6186  Ies = (IVjsmFwd+(SslpFwd*(ves_jct-VjsmFwd)));
6187  }
6188  }
6189  }
6190  else
6191  {
6192  Ies = 0.0;
6193  }
6194  if ((JTSS_t>0.0))
6195  {
6196  if ((((model_.VTSS)-ves_jct)<((model_.VTSS)*1.0e-3)))
6197  {
6198  T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6199  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6200  Ies = (Ies-((ASEJ*JTSS_t)*T1));
6201  }
6202  else
6203  {
6204  T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6205  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSS))/((model_.VTSS)-ves_jct)))-1.0);
6206  Ies = (Ies-((ASEJ*JTSS_t)*T1));
6207  }
6208  }
6209  if ((JTSSWS_t>0.0))
6210  {
6211  if ((((model_.VTSSWS)-ves_jct)<((model_.VTSSWS)*1.0e-3)))
6212  {
6213  T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6214  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6215  Ies = (Ies-((PSEJ*JTSSWS_t)*T1));
6216  }
6217  else
6218  {
6219  T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6220  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWS))/((model_.VTSSWS)-ves_jct)))-1.0);
6221  Ies = (Ies-((PSEJ*JTSSWS_t)*T1));
6222  }
6223  }
6224  if ((JTSSWGS_t>0.0))
6225  {
6226  if ((((model_.VTSSWGS)-ves_jct)<((model_.VTSSWGS)*1.0e-3)))
6227  {
6228  T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6229  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6230  Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6231  }
6232  else
6233  {
6234  T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6235  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWGS))/((model_.VTSSWGS)-ves_jct)))-1.0);
6236  Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6237  }
6238  }
6239  if ((Isbd>0.0))
6240  {
6241  if ((ved_jct<VjdmRev))
6242  {
6243  T0 = (ved_jct/Nvtmd);
6244  T1 = (model_.analogFunctions.lexp<AdmsFadType>(T0)-1.0);
6245  T2 = (IVjdmRev+(DslpRev*(ved_jct-VjdmRev)));
6246  Ied = (T1*T2);
6247  }
6248  else
6249  {
6250  if ((ved_jct<=VjdmFwd))
6251  {
6252  T0 = (ved_jct/Nvtmd);
6253  T1 = (((model_.BVD)+ved_jct)/Nvtmd);
6254  T2 = model_.analogFunctions.lexp<AdmsFadType>((-T1));
6255  Ied = (Isbd*(((model_.analogFunctions.lexp<AdmsFadType>(T0)+XExpBVD)-1.0)-((model_.XJBVD)*T2)));
6256  }
6257  else
6258  {
6259  Ied = (IVjdmFwd+(DslpFwd*(ved_jct-VjdmFwd)));
6260  }
6261  }
6262  }
6263  else
6264  {
6265  Ied = 0.0;
6266  }
6267  if ((JTSD_t>0.0))
6268  {
6269  if ((((model_.VTSD)-ved_jct)<((model_.VTSD)*1.0e-3)))
6270  {
6271  T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6272  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6273  Ied = (Ied-((ADEJ*JTSD_t)*T1));
6274  }
6275  else
6276  {
6277  T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6278  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSD))/((model_.VTSD)-ved_jct)))-1.0);
6279  Ied = (Ied-((ADEJ*JTSD_t)*T1));
6280  }
6281  }
6282  if ((JTSSWD_t>0.0))
6283  {
6284  if ((((model_.VTSSWD)-ved_jct)<((model_.VTSSWD)*1.0e-3)))
6285  {
6286  T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6287  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6288  Ied = (Ied-((PDEJ*JTSSWD_t)*T1));
6289  }
6290  else
6291  {
6292  T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6293  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWD))/((model_.VTSSWD)-ved_jct)))-1.0);
6294  Ied = (Ied-((PDEJ*JTSSWD_t)*T1));
6295  }
6296  }
6297  if ((JTSSWGD_t>0.0))
6298  {
6299  if ((((model_.VTSSWGD)-ved_jct)<((model_.VTSSWGD)*1.0e-3)))
6300  {
6301  T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6302  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6303  Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6304  }
6305  else
6306  {
6307  T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6308  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWGD))/((model_.VTSSWGD)-ved_jct)))-1.0);
6309  Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6310  }
6311  }
6312  {
6313  if ((Czbs>0.0))
6314  {
6315  T1 = (ves_jct/PBS_t);
6316  if ((T1<0.9))
6317  {
6318  if (((model_.SJS)>0.0))
6319  {
6320  vec = (PBS_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJS))*model_.analogFunctions.lln((1.0/(model_.SJS)))))));
6321  pb2 = ((((PBS_t*(model_.SJS))*(model_.MJS2))/(model_.MJS))/model_.analogFunctions.lexp(((-(1.0+(model_.MJS)))*model_.analogFunctions.lln((1.0-(vec/PBS_t))))));
6322  if ((ves_jct>vec))
6323  {
6324  arg = (1.0-T1);
6325  if (((model_.MJS)==0.5))
6326  {
6327  sarg = (1.0/sqrt(arg));
6328  }
6329  else
6330  {
6332  }
6333  Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS)));
6334  }
6335  else
6336  {
6337  arg = (1.0-(vec/PBS_t));
6338  if (((model_.MJS)==0.5))
6339  {
6340  sarg = (1.0/sqrt(arg));
6341  }
6342  else
6343  {
6345  }
6346  Qec = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS)));
6347  arg = (1.0-((ves_jct-vec)/pb2));
6348  if (((model_.MJS2)==0.5))
6349  {
6350  sarg = (1.0/sqrt(arg));
6351  }
6352  else
6353  {
6355  }
6356  Qesj1 = (Qec+(((((model_.SJS)*pb2)*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS2))));
6357  }
6358  }
6359  else
6360  {
6361  arg = (1.0-T1);
6362  if (((model_.MJS)==0.5))
6363  {
6364  sarg = (1.0/sqrt(arg));
6365  }
6366  else
6367  {
6369  }
6370  Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS)));
6371  }
6372  }
6373  else
6374  {
6376  T3 = (1.0/(1.0-(model_.MJS)));
6377  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJS))*(T1-1.0))+(1.0+(model_.MJS))));
6378  T5 = (T3*(1.0-(((0.05*(model_.MJS))*(1.0+(model_.MJS)))*T2)));
6379  Qesj1 = ((PBS_t*Czbs)*(T4+T5));
6380  }
6381  }
6382  else
6383  {
6384  Qesj1 = 0.0;
6385  }
6386  }
6387  {
6388  if ((Czbssw>0.0))
6389  {
6390  T1 = (ves_jct/PBSWS_t);
6391  if ((T1<0.9))
6392  {
6393  if (((model_.SJSWS)>0.0))
6394  {
6395  vec = (PBSWS_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWS))*model_.analogFunctions.lln((1.0/(model_.SJSWS)))))));
6396  pb2 = ((((PBSWS_t*(model_.SJSWS))*(model_.MJSWS2))/(model_.MJSWS))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWS)))*model_.analogFunctions.lln((1.0-(vec/PBSWS_t))))));
6397  if ((ves_jct>vec))
6398  {
6399  arg = (1.0-T1);
6400  if (((model_.MJSWS)==0.5))
6401  {
6402  sarg = (1.0/sqrt(arg));
6403  }
6404  else
6405  {
6407  }
6408  Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS)));
6409  }
6410  else
6411  {
6412  arg = (1.0-(vec/PBSWS_t));
6413  if (((model_.MJSWS)==0.5))
6414  {
6415  sarg = (1.0/sqrt(arg));
6416  }
6417  else
6418  {
6420  }
6421  Qec = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS)));
6422  arg = (1.0-((ves_jct-vec)/pb2));
6423  if (((model_.MJSWS2)==0.5))
6424  {
6425  sarg = (1.0/sqrt(arg));
6426  }
6427  else
6428  {
6430  }
6431  Qesj2 = (Qec+(((((model_.SJSWS)*pb2)*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS2))));
6432  }
6433  }
6434  else
6435  {
6436  arg = (1.0-T1);
6437  if (((model_.MJSWS)==0.5))
6438  {
6439  sarg = (1.0/sqrt(arg));
6440  }
6441  else
6442  {
6444  }
6445  Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS)));
6446  }
6447  }
6448  else
6449  {
6451  T3 = (1.0/(1.0-(model_.MJSWS)));
6452  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWS))*(T1-1.0))+(1.0+(model_.MJSWS))));
6453  T5 = (T3*(1.0-(((0.05*(model_.MJSWS))*(1.0+(model_.MJSWS)))*T2)));
6454  Qesj2 = ((PBSWS_t*Czbssw)*(T4+T5));
6455  }
6456  }
6457  else
6458  {
6459  Qesj2 = 0.0;
6460  }
6461  }
6462  {
6463  if ((Czbsswg>0.0))
6464  {
6465  T1 = (ves_jct/PBSWGS_t);
6466  if ((T1<0.9))
6467  {
6468  if (((model_.SJSWGS)>0.0))
6469  {
6470  vec = (PBSWGS_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWGS))*model_.analogFunctions.lln((1.0/(model_.SJSWGS)))))));
6471  pb2 = ((((PBSWGS_t*(model_.SJSWGS))*(model_.MJSWGS2))/(model_.MJSWGS))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWGS)))*model_.analogFunctions.lln((1.0-(vec/PBSWGS_t))))));
6472  if ((ves_jct>vec))
6473  {
6474  arg = (1.0-T1);
6475  if (((model_.MJSWGS)==0.5))
6476  {
6477  sarg = (1.0/sqrt(arg));
6478  }
6479  else
6480  {
6482  }
6483  Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS)));
6484  }
6485  else
6486  {
6487  arg = (1.0-(vec/PBSWGS_t));
6488  if (((model_.MJSWGS)==0.5))
6489  {
6490  sarg = (1.0/sqrt(arg));
6491  }
6492  else
6493  {
6495  }
6496  Qec = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS)));
6497  arg = (1.0-((ves_jct-vec)/pb2));
6498  if (((model_.MJSWGS2)==0.5))
6499  {
6500  sarg = (1.0/sqrt(arg));
6501  }
6502  else
6503  {
6505  }
6506  Qesj3 = (Qec+(((((model_.SJSWGS)*pb2)*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS2))));
6507  }
6508  }
6509  else
6510  {
6511  arg = (1.0-T1);
6512  if (((model_.MJSWGS)==0.5))
6513  {
6514  sarg = (1.0/sqrt(arg));
6515  }
6516  else
6517  {
6519  }
6520  Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS)));
6521  }
6522  }
6523  else
6524  {
6526  T3 = (1.0/(1.0-(model_.MJSWGS)));
6527  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWGS))*(T1-1.0))+(1.0+(model_.MJSWGS))));
6528  T5 = (T3*(1.0-(((0.05*(model_.MJSWGS))*(1.0+(model_.MJSWGS)))*T2)));
6529  Qesj3 = ((PBSWGS_t*Czbsswg)*(T4+T5));
6530  }
6531  }
6532  else
6533  {
6534  Qesj3 = 0.0;
6535  }
6536  }
6537  Qesj = ((Qesj1+Qesj2)+Qesj3);
6538  {
6539  if ((Czbd>0.0))
6540  {
6541  T1 = (ved_jct/PBD_t);
6542  if ((T1<0.9))
6543  {
6544  if (((model_.SJD)>0.0))
6545  {
6546  vec = (PBD_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJD))*model_.analogFunctions.lln((1.0/(model_.SJD)))))));
6547  pb2 = ((((PBD_t*(model_.SJD))*(model_.MJD2))/(model_.MJD))/model_.analogFunctions.lexp(((-(1.0+(model_.MJD)))*model_.analogFunctions.lln((1.0-(vec/PBD_t))))));
6548  if ((ved_jct>vec))
6549  {
6550  arg = (1.0-T1);
6551  if (((model_.MJD)==0.5))
6552  {
6553  sarg = (1.0/sqrt(arg));
6554  }
6555  else
6556  {
6558  }
6559  Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD)));
6560  }
6561  else
6562  {
6563  arg = (1.0-(vec/PBD_t));
6564  if (((model_.MJD)==0.5))
6565  {
6566  sarg = (1.0/sqrt(arg));
6567  }
6568  else
6569  {
6571  }
6572  Qec = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD)));
6573  arg = (1.0-((ved_jct-vec)/pb2));
6574  if (((model_.MJD2)==0.5))
6575  {
6576  sarg = (1.0/sqrt(arg));
6577  }
6578  else
6579  {
6581  }
6582  Qedj1 = (Qec+(((((model_.SJD)*pb2)*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD2))));
6583  }
6584  }
6585  else
6586  {
6587  arg = (1.0-T1);
6588  if (((model_.MJD)==0.5))
6589  {
6590  sarg = (1.0/sqrt(arg));
6591  }
6592  else
6593  {
6595  }
6596  Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD)));
6597  }
6598  }
6599  else
6600  {
6602  T3 = (1.0/(1.0-(model_.MJD)));
6603  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJD))*(T1-1.0))+(1.0+(model_.MJD))));
6604  T5 = (T3*(1.0-(((0.05*(model_.MJD))*(1.0+(model_.MJD)))*T2)));
6605  Qedj1 = ((PBD_t*Czbd)*(T4+T5));
6606  }
6607  }
6608  else
6609  {
6610  Qedj1 = 0.0;
6611  }
6612  }
6613  {
6614  if ((Czbdsw>0.0))
6615  {
6616  T1 = (ved_jct/PBSWD_t);
6617  if ((T1<0.9))
6618  {
6619  if (((model_.SJSWD)>0.0))
6620  {
6621  vec = (PBSWD_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWD))*model_.analogFunctions.lln((1.0/(model_.SJSWD)))))));
6622  pb2 = ((((PBSWD_t*(model_.SJSWD))*(model_.MJSWD2))/(model_.MJSWD))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWD)))*model_.analogFunctions.lln((1.0-(vec/PBSWD_t))))));
6623  if ((ved_jct>vec))
6624  {
6625  arg = (1.0-T1);
6626  if (((model_.MJSWD)==0.5))
6627  {
6628  sarg = (1.0/sqrt(arg));
6629  }
6630  else
6631  {
6633  }
6634  Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD)));
6635  }
6636  else
6637  {
6638  arg = (1.0-(vec/PBSWD_t));
6639  if (((model_.MJSWD)==0.5))
6640  {
6641  sarg = (1.0/sqrt(arg));
6642  }
6643  else
6644  {
6646  }
6647  Qec = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD)));
6648  arg = (1.0-((ved_jct-vec)/pb2));
6649  if (((model_.MJSWD2)==0.5))
6650  {
6651  sarg = (1.0/sqrt(arg));
6652  }
6653  else
6654  {
6656  }
6657  Qedj2 = (Qec+(((((model_.SJSWD)*pb2)*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD2))));
6658  }
6659  }
6660  else
6661  {
6662  arg = (1.0-T1);
6663  if (((model_.MJSWD)==0.5))
6664  {
6665  sarg = (1.0/sqrt(arg));
6666  }
6667  else
6668  {
6670  }
6671  Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD)));
6672  }
6673  }
6674  else
6675  {
6677  T3 = (1.0/(1.0-(model_.MJSWD)));
6678  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWD))*(T1-1.0))+(1.0+(model_.MJSWD))));
6679  T5 = (T3*(1.0-(((0.05*(model_.MJSWD))*(1.0+(model_.MJSWD)))*T2)));
6680  Qedj2 = ((PBSWD_t*Czbdsw)*(T4+T5));
6681  }
6682  }
6683  else
6684  {
6685  Qedj2 = 0.0;
6686  }
6687  }
6688  {
6689  if ((Czbdswg>0.0))
6690  {
6691  T1 = (ved_jct/PBSWGD_t);
6692  if ((T1<0.9))
6693  {
6694  if (((model_.SJSWGD)>0.0))
6695  {
6696  vec = (PBSWGD_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWGD))*model_.analogFunctions.lln((1.0/(model_.SJSWGD)))))));
6697  pb2 = ((((PBSWGD_t*(model_.SJSWGD))*(model_.MJSWGD2))/(model_.MJSWGD))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWGD)))*model_.analogFunctions.lln((1.0-(vec/PBSWGD_t))))));
6698  if ((ved_jct>vec))
6699  {
6700  arg = (1.0-T1);
6701  if (((model_.MJSWGD)==0.5))
6702  {
6703  sarg = (1.0/sqrt(arg));
6704  }
6705  else
6706  {
6708  }
6709  Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD)));
6710  }
6711  else
6712  {
6713  arg = (1.0-(vec/PBSWGD_t));
6714  if (((model_.MJSWGD)==0.5))
6715  {
6716  sarg = (1.0/sqrt(arg));
6717  }
6718  else
6719  {
6721  }
6722  Qec = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD)));
6723  arg = (1.0-((ved_jct-vec)/pb2));
6724  if (((model_.MJSWGD2)==0.5))
6725  {
6726  sarg = (1.0/sqrt(arg));
6727  }
6728  else
6729  {
6731  }
6732  Qedj3 = (Qec+(((((model_.SJSWGD)*pb2)*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD2))));
6733  }
6734  }
6735  else
6736  {
6737  arg = (1.0-T1);
6738  if (((model_.MJSWGD)==0.5))
6739  {
6740  sarg = (1.0/sqrt(arg));
6741  }
6742  else
6743  {
6745  }
6746  Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD)));
6747  }
6748  }
6749  else
6750  {
6752  T3 = (1.0/(1.0-(model_.MJSWGD)));
6753  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWGD))*(T1-1.0))+(1.0+(model_.MJSWGD))));
6754  T5 = (T3*(1.0-(((0.05*(model_.MJSWGD))*(1.0+(model_.MJSWGD)))*T2)));
6755  Qedj3 = ((PBSWGD_t*Czbdswg)*(T4+T5));
6756  }
6757  }
6758  else
6759  {
6760  Qedj3 = 0.0;
6761  }
6762  }
6763  Qedj = ((Qedj1+Qedj2)+Qedj3);
6764  }
6765  Qes = (Qesj+(csbox*ves_jct));
6766  Qed = (Qedj+(cdbox*ved_jct));
6767  Qeg = ((cgbox*devsign)*(probeVars[admsProbeID_V_e_g]));
6768  if (((model_.BULKMOD)!=0))
6769  {
6770  T2 = (devsign*(probeVars[admsProbeID_V_g_e]));
6771  T3 = ((((T2-deltaPhi)+(Eg/2.0))+phib)-(model_.DELVFBACC));
6772  T0 = (T3+0.02);
6773  vge_overlap = (0.5*(T0+sqrt(((T0*T0)+(4.0*0.02)))));
6774  Qeg = (Qeg-((NFINtotal*LeffCV)*(CGBL_i*((T3-vge_overlap)+((0.5*CKAPPAB_i)*(sqrt((1.0+((4.0*vge_overlap)/CKAPPAB_i)))-1.0))))));
6775  }
6776  T0 = vds;
6777  T1 = (T0*(AIGEN_i+((BIGEN_i*T0)*T0)));
6778  idsgen = (((((model_.HFIN)*TFIN)*(Leff-(2.0*LINTIGEN_i)))*igentemp)*T1);
6779  IdovVds = (((beta*ids0_ov_dqi)*Moc)/((Dmob*Dvsat)*Dr));
6780  T0 = (((ueff*coxeff)*Weff)/Leff);
6781  igidl = (NFINtotal*igidl);
6782  igisl = (NFINtotal*igisl);
6783  igcd = (NFINtotal*igcd);
6784  igcs = (NFINtotal*igcs);
6785  igs = (NFINtotal*igs);
6786  igd = (NFINtotal*igd);
6787  igbinv = (NFINtotal*igbinv);
6788  igbacc = (NFINtotal*igbacc);
6789  idsgen = (NFINtotal*idsgen);
6790  Iii = (NFINtotal*Iii);
6791  igbs = 0.0;
6792  igbd = 0.0;
6793  if (((model_.BULKMOD)==0))
6794  {
6795  igbs = ((igbinv+igbacc)*wf);
6796  igbd = ((igbinv+igbacc)*wr);
6797  }
6798  Esatnoi = ((2.0*VSAT_t)/ueff);
6799  if (((((model_.NOIA)>0)||((model_.NOIB)>0))||((model_.NOIC)>0)))
6800  {
6801  Leffnoi = (Leff-(2.0*LINTNOI_i));
6802  Leffnoisq = (Leffnoi*Leffnoi);
6803  if (((model_.EM)<=0.0))
6804  {
6805  DelClm = 0.0;
6806  }
6807  else
6808  {
6809  T0 = (((diffVds/litl)+(model_.EM))/Esatnoi);
6810  DelClm = (litl*model_.analogFunctions.lln<AdmsFadType>(T0));
6811  if ((DelClm<0.0))
6812  {
6813  DelClm = 0.0;
6814  }
6815  }
6816  T1 = (((((1.60219e-19*1.60219e-19)*1.60219e-19)*Vtm)*fabs(ids))*ueff);
6817  T2 = ((1.0e10*coxeff)*Leffnoisq);
6818  N0 = ((coxeff*qis)/1.60219e-19);
6819  Nl = ((coxeff*qid)/1.60219e-19);
6820  Nstar = ((Vtm/1.60219e-19)*(coxeff+CIT_i));
6821  T3 = ((model_.NOIA)*model_.analogFunctions.lln<AdmsFadType>(((N0+Nstar)/(Nl+Nstar))));
6822  T4 = ((model_.NOIB)*(N0-Nl));
6823  T5 = ((0.5*(model_.NOIC))*((N0*N0)-(Nl*Nl)));
6824  T6 = (((1.60219e-19*Vtm)*ids)*ids);
6825  T7 = (((1.0e10*Leffnoisq)*Weff)*NFINtotal);
6826  T8 = (((model_.NOIA)+((model_.NOIB)*Nl))+(((model_.NOIC)*Nl)*Nl));
6827  T9 = ((Nl+Nstar)*(Nl+Nstar));
6828  Ssi = (((T1/T2)*((T3+T4)+T5))+((((T6/T7)*DelClm)*T8)/T9));
6829  T10 = (((model_.NOIA)*1.60219e-19)*Vtm);
6830  T11 = (((((Weff*NFINtotal)*Leffnoi)*1.0e10)*Nstar)*Nstar);
6831  Swi = (((T10/T11)*ids)*ids);
6832  T1 = (Swi+Ssi);
6833  if ((T1>0.0))
6834  {
6835  FNPowerAt1Hz = ((Ssi*Swi)/T1);
6836  }
6837  else
6838  {
6839  FNPowerAt1Hz = 0.0;
6840  }
6841  }
6842  else
6843  {
6844  FNPowerAt1Hz = 0.0;
6845  }
6846  T0 = (ueff*qinv);
6847  T1 = ((T0*Rdsi)+(Leff*Leff));
6848  Gtnoi = ((T0/T1)*NTNOI_i);
6849  sid = (((4*Vtm)*1.60219e-19)*Gtnoi);
6850  gspr = (1/Rsource);
6851  gdpr = (1/Rdrain);
6852  }
6853  if ((!initialized))
6854  {
6855  devsign = 0.0;
6856  Rsource = 1.0;
6857  Rdrain = 1.0;
6858  std::cerr << "uninitialized" << std::endl;
6859  }
6860  if ((sigvds>0.0))
6861  {
6862  // I(di,si) <+ ((devsign*ids))
6863  staticContributions[admsNodeID_di] += (devsign*ids);
6864  staticContributions[admsNodeID_si] -= (devsign*ids);
6865  }
6866  else
6867  {
6868  // I(si,di) <+ ((devsign*ids))
6869  staticContributions[admsNodeID_si] += (devsign*ids);
6870  staticContributions[admsNodeID_di] -= (devsign*ids);
6871  }
6872  // I(di,si) <+ ((devsign*ddt(qd)))
6873  dynamicContributions[admsNodeID_di] += (devsign*(qd));
6874  dynamicContributions[admsNodeID_si] -= (devsign*(qd));
6875  // I(g,si) <+ ((devsign*ddt(qg)))
6876  dynamicContributions[admsNodeID_g] += (devsign*(qg));
6877  dynamicContributions[admsNodeID_si] -= (devsign*(qg));
6878  if ((sigvds>0))
6879  {
6880  // I(di,si) <+ ((devsign*idsgen))
6881  staticContributions[admsNodeID_di] += (devsign*idsgen);
6882  staticContributions[admsNodeID_si] -= (devsign*idsgen);
6883  // I(g,si) <+ ((devsign*(igcs+igs)))
6884  staticContributions[admsNodeID_g] += (devsign*(igcs+igs));
6885  staticContributions[admsNodeID_si] -= (devsign*(igcs+igs));
6886  // I(g,di) <+ ((devsign*(igcd+igd)))
6887  staticContributions[admsNodeID_g] += (devsign*(igcd+igd));
6888  staticContributions[admsNodeID_di] -= (devsign*(igcd+igd));
6889  if (((model_.BULKMOD)!=0))
6890  {
6891  // I(di,e) <+ ((devsign*(igidl+Iii)))
6892  staticContributions[admsNodeID_di] += (devsign*(igidl+Iii));
6893  staticContributions[admsNodeID_e] -= (devsign*(igidl+Iii));
6894  // I(si,e) <+ ((devsign*igisl))
6895  staticContributions[admsNodeID_si] += (devsign*igisl);
6896  staticContributions[admsNodeID_e] -= (devsign*igisl);
6897  // I(g,e) <+ ((devsign*(igbinv+igbacc)))
6898  staticContributions[admsNodeID_g] += (devsign*(igbinv+igbacc));
6899  staticContributions[admsNodeID_e] -= (devsign*(igbinv+igbacc));
6900  }
6901  else
6902  {
6903  // I(di,si) <+ ((devsign*(igidl+Iii)))
6904  staticContributions[admsNodeID_di] += (devsign*(igidl+Iii));
6905  staticContributions[admsNodeID_si] -= (devsign*(igidl+Iii));
6906  // I(si,di) <+ ((devsign*igisl))
6907  staticContributions[admsNodeID_si] += (devsign*igisl);
6908  staticContributions[admsNodeID_di] -= (devsign*igisl);
6909  }
6910  }
6911  else
6912  {
6913  // I(si,di) <+ ((devsign*idsgen))
6914  staticContributions[admsNodeID_si] += (devsign*idsgen);
6915  staticContributions[admsNodeID_di] -= (devsign*idsgen);
6916  // I(g,di) <+ ((devsign*(igcs+igs)))
6917  staticContributions[admsNodeID_g] += (devsign*(igcs+igs));
6918  staticContributions[admsNodeID_di] -= (devsign*(igcs+igs));
6919  // I(g,si) <+ ((devsign*(igcd+igd)))
6920  staticContributions[admsNodeID_g] += (devsign*(igcd+igd));
6921  staticContributions[admsNodeID_si] -= (devsign*(igcd+igd));
6922  if (((model_.BULKMOD)!=0))
6923  {
6924  // I(si,e) <+ ((devsign*(igidl+Iii)))
6925  staticContributions[admsNodeID_si] += (devsign*(igidl+Iii));
6926  staticContributions[admsNodeID_e] -= (devsign*(igidl+Iii));
6927  // I(di,e) <+ ((devsign*igisl))
6928  staticContributions[admsNodeID_di] += (devsign*igisl);
6929  staticContributions[admsNodeID_e] -= (devsign*igisl);
6930  // I(g,e) <+ ((devsign*(igbinv+igbacc)))
6931  staticContributions[admsNodeID_g] += (devsign*(igbinv+igbacc));
6932  staticContributions[admsNodeID_e] -= (devsign*(igbinv+igbacc));
6933  }
6934  else
6935  {
6936  // I(si,di) <+ ((devsign*(igidl+Iii)))
6937  staticContributions[admsNodeID_si] += (devsign*(igidl+Iii));
6938  staticContributions[admsNodeID_di] -= (devsign*(igidl+Iii));
6939  // I(di,si) <+ ((devsign*igisl))
6940  staticContributions[admsNodeID_di] += (devsign*igisl);
6941  staticContributions[admsNodeID_si] -= (devsign*igisl);
6942  }
6943  }
6944  if (((model_.BULKMOD)==0))
6945  {
6946  // I(g,si) <+ ((devsign*igbs))
6947  staticContributions[admsNodeID_g] += (devsign*igbs);
6948  staticContributions[admsNodeID_si] -= (devsign*igbs);
6949  // I(g,di) <+ ((devsign*igbd))
6950  staticContributions[admsNodeID_g] += (devsign*igbd);
6951  staticContributions[admsNodeID_di] -= (devsign*igbd);
6952  }
6953  if (((model_.BULKMOD)!=0))
6954  {
6955  // I(e,si) <+ ((devsign*Ies))
6956  staticContributions[admsNodeID_e] += (devsign*Ies);
6957  staticContributions[admsNodeID_si] -= (devsign*Ies);
6958  // I(e,di) <+ ((devsign*Ied))
6959  staticContributions[admsNodeID_e] += (devsign*Ied);
6960  staticContributions[admsNodeID_di] -= (devsign*Ied);
6961  }
6962  // I(e,si) <+ ((devsign*ddt(Qes)))
6963  dynamicContributions[admsNodeID_e] += (devsign*(Qes));
6964  dynamicContributions[admsNodeID_si] -= (devsign*(Qes));
6965  // I(e,di) <+ ((devsign*ddt(Qed)))
6966  dynamicContributions[admsNodeID_e] += (devsign*(Qed));
6967  dynamicContributions[admsNodeID_di] -= (devsign*(Qed));
6968  // I(e,g) <+ ((devsign*ddt(Qeg)))
6969  dynamicContributions[admsNodeID_e] += (devsign*(Qeg));
6970  dynamicContributions[admsNodeID_g] -= (devsign*(Qeg));
6971  // I(g,si) <+ (ddt(qgs_parasitic))
6972  dynamicContributions[admsNodeID_g] += (qgs_parasitic);
6973  dynamicContributions[admsNodeID_si] -= (qgs_parasitic);
6974  // I(g,di) <+ (ddt(qgd_parasitic))
6975  dynamicContributions[admsNodeID_g] += (qgd_parasitic);
6976  dynamicContributions[admsNodeID_di] -= (qgd_parasitic);
6977  // I(d,s) <+ (ddt(qds_fr))
6978  dynamicContributions[admsNodeID_d] += (qds_fr);
6979  dynamicContributions[admsNodeID_s] -= (qds_fr);
6980  if (((model_.CGEOMOD)==1))
6981  {
6982  // I(g,s) <+ (ddt(qgs_fr))
6983  dynamicContributions[admsNodeID_g] += (qgs_fr);
6984  dynamicContributions[admsNodeID_s] -= (qgs_fr);
6985  // I(g,d) <+ (ddt(qgd_fr))
6986  dynamicContributions[admsNodeID_g] += (qgd_fr);
6987  dynamicContributions[admsNodeID_d] -= (qgd_fr);
6988  }
6989  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
6990  {
6991  // I(g,si) <+ ((devsign*ddt(qg_acc)))
6992  dynamicContributions[admsNodeID_g] += (devsign*(qg_acc));
6993  dynamicContributions[admsNodeID_si] -= (devsign*(qg_acc));
6994  // I(e,si) <+ ((devsign*ddt(qb_acc)))
6995  dynamicContributions[admsNodeID_e] += (devsign*(qb_acc));
6996  dynamicContributions[admsNodeID_si] -= (devsign*(qb_acc));
6997  }
6998  // I(d,di) <+ ((V(d,di)/Rdrain))
7001  // I(s,si) <+ ((V(s,si)/Rsource))
7004  // I(di,si) <+ (flicker_noise(FNPowerAt1Hz,EF,"flicker"))
7005  // I(d,di) <+ (white_noise((((4*Vtm)*1.60219e-19)*gdpr),"thermal"))
7006  // I(s,si) <+ (white_noise((((4*Vtm)*1.60219e-19)*gspr),"thermal"))
7007  // I(di,si) <+ (white_noise(sid,"thermal"))
7008  if (((model_.IGCMOD)!=0))
7009  {
7010  if ((sigvds>0))
7011  {
7012  // I(g,si) <+ (white_noise(((2*1.60219e-19)*abs((igcs+igs))),"shot"))
7013  // I(g,di) <+ (white_noise(((2*1.60219e-19)*abs((igcd+igd))),"shot"))
7014  }
7015  else
7016  {
7017  // I(g,di) <+ (white_noise(((2*1.60219e-19)*abs((igcs+igs))),"shot"))
7018  // I(g,si) <+ (white_noise(((2*1.60219e-19)*abs((igcd+igd))),"shot"))
7019  }
7020  }
7021  if (((model_.IGBMOD)!=0))
7022  {
7023  if (((model_.BULKMOD)!=0))
7024  {
7025  // I(g,e) <+ (white_noise(((2*1.60219e-19)*abs((igbinv+igbacc))),"shot"))
7026  }
7027  else
7028  {
7029  // I(g,si) <+ (white_noise(((2*1.60219e-19)*abs(igbs)),"shot"))
7030  // I(g,di) <+ (white_noise(((2*1.60219e-19)*abs(igbd)),"shot"))
7031  }
7032  }
7033 
7034 
7035  // -- endcode converted from analog/code block
7036 #ifdef Xyce_DEBUG_DEVICE
7038  {
7039  Xyce::dout() << " probeVars[admsProbeID_V_s_si] = "
7040  <<probeVars[admsProbeID_V_s_si].val() << std::endl;
7041  Xyce::dout() << " probeVars[admsProbeID_V_d_di] = "
7042  <<probeVars[admsProbeID_V_d_di].val() << std::endl;
7043  Xyce::dout() << " probeVars[admsProbeID_V_e_g] = "
7044  <<probeVars[admsProbeID_V_e_g].val() << std::endl;
7045  Xyce::dout() << " probeVars[admsProbeID_V_d_s] = "
7046  <<probeVars[admsProbeID_V_d_s].val() << std::endl;
7047  Xyce::dout() << " probeVars[admsProbeID_V_g_d] = "
7048  <<probeVars[admsProbeID_V_g_d].val() << std::endl;
7049  Xyce::dout() << " probeVars[admsProbeID_V_g_s] = "
7050  <<probeVars[admsProbeID_V_g_s].val() << std::endl;
7051  Xyce::dout() << " probeVars[admsProbeID_V_di_d] = "
7052  <<probeVars[admsProbeID_V_di_d].val() << std::endl;
7053  Xyce::dout() << " probeVars[admsProbeID_V_si_s] = "
7054  <<probeVars[admsProbeID_V_si_s].val() << std::endl;
7055  Xyce::dout() << " probeVars[admsProbeID_V_g_e] = "
7056  <<probeVars[admsProbeID_V_g_e].val() << std::endl;
7057  Xyce::dout() << " probeVars[admsProbeID_V_e_di] = "
7058  <<probeVars[admsProbeID_V_e_di].val() << std::endl;
7059  Xyce::dout() << " probeVars[admsProbeID_V_e_si] = "
7060  <<probeVars[admsProbeID_V_e_si].val() << std::endl;
7061  Xyce::dout() << " probeVars[admsProbeID_V_g_di] = "
7062  <<probeVars[admsProbeID_V_g_di].val() << std::endl;
7063  Xyce::dout() << " probeVars[admsProbeID_V_di_si] = "
7064  <<probeVars[admsProbeID_V_di_si].val() << std::endl;
7065  Xyce::dout() << " probeVars[admsProbeID_V_g_si] = "
7066  <<probeVars[admsProbeID_V_g_si].val() << std::endl;
7067  Xyce::dout() << " staticContributions[admsNodeID_d] = "
7068  <<staticContributions[admsNodeID_d].val() << std::endl;
7069  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_s_si) << std::endl;
7070  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_d_di) << std::endl;
7071  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_e_g) << std::endl;
7072  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_d_s) << std::endl;
7073  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_d) << std::endl;
7074  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_s) << std::endl;
7075  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_di_d) << std::endl;
7076  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s) << std::endl;
7077  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_e) << std::endl;
7078  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_e_di) << std::endl;
7079  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_e_si) << std::endl;
7080  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_di) << std::endl;
7081  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_di_si) << std::endl;
7082  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_si) << std::endl;
7083  Xyce::dout() << " dynamicContributions[admsNodeID_d] = "
7084  <<dynamicContributions[admsNodeID_d].val() << std::endl;
7085  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_s_si) << std::endl;
7086  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_di) << std::endl;
7087  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_g) << std::endl;
7088  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s) << std::endl;
7089  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_d) << std::endl;
7090  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_s) << std::endl;
7091  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_d) << std::endl;
7092  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_si_s) << std::endl;
7093  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_e) << std::endl;
7094  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_di) << std::endl;
7095  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_si) << std::endl;
7096  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_di) << std::endl;
7097  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_si) << std::endl;
7098  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_si) << std::endl;
7099  Xyce::dout() << " staticContributions[admsNodeID_g] = "
7100  <<staticContributions[admsNodeID_g].val() << std::endl;
7101  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_s_si) << std::endl;
7102  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_d_di) << std::endl;
7103  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_e_g) << std::endl;
7104  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_d_s) << std::endl;
7105  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_d) << std::endl;
7106  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_s) << std::endl;
7107  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d) << std::endl;
7108  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s) << std::endl;
7109  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_e) << std::endl;
7110  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_e_di) << std::endl;
7111  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_e_si) << std::endl;
7112  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_di) << std::endl;
7113  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_di_si) << std::endl;
7114  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_si) << std::endl;
7115  Xyce::dout() << " dynamicContributions[admsNodeID_g] = "
7116  <<dynamicContributions[admsNodeID_g].val() << std::endl;
7117  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_s_si) << std::endl;
7118  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_di) << std::endl;
7119  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_g) << std::endl;
7120  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_s) << std::endl;
7121  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d) << std::endl;
7122  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s) << std::endl;
7123  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_d) << std::endl;
7124  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_si_s) << std::endl;
7125  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_e) << std::endl;
7126  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_di) << std::endl;
7127  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_si) << std::endl;
7128  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_di) << std::endl;
7129  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_si) << std::endl;
7130  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_si) << std::endl;
7131  Xyce::dout() << " staticContributions[admsNodeID_s] = "
7132  <<staticContributions[admsNodeID_s].val() << std::endl;
7133  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_s_si) << std::endl;
7134  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_d_di) << std::endl;
7135  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_e_g) << std::endl;
7136  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_d_s) << std::endl;
7137  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_d) << std::endl;
7138  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_s) << std::endl;
7139  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d) << std::endl;
7140  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_si_s) << std::endl;
7141  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_e) << std::endl;
7142  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_e_di) << std::endl;
7143  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_e_si) << std::endl;
7144  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_di) << std::endl;
7145  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_di_si) << std::endl;
7146  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_si) << std::endl;
7147  Xyce::dout() << " dynamicContributions[admsNodeID_s] = "
7148  <<dynamicContributions[admsNodeID_s].val() << std::endl;
7149  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_s_si) << std::endl;
7150  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_di) << std::endl;
7151  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_g) << std::endl;
7152  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s) << std::endl;
7153  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_d) << std::endl;
7154  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_s) << std::endl;
7155  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_d) << std::endl;
7156  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_si_s) << std::endl;
7157  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_e) << std::endl;
7158  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_di) << std::endl;
7159  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_si) << std::endl;
7160  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_di) << std::endl;
7161  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_si) << std::endl;
7162  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_si) << std::endl;
7163  Xyce::dout() << " staticContributions[admsNodeID_e] = "
7164  <<staticContributions[admsNodeID_e].val() << std::endl;
7165  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_s_si) << std::endl;
7166  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_d_di) << std::endl;
7167  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_g) << std::endl;
7168  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_d_s) << std::endl;
7169  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_d) << std::endl;
7170  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_s) << std::endl;
7171  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d) << std::endl;
7172  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s) << std::endl;
7173  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_e) << std::endl;
7174  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_di) << std::endl;
7175  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_si) << std::endl;
7176  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_di) << std::endl;
7177  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_di_si) << std::endl;
7178  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_si) << std::endl;
7179  Xyce::dout() << " dynamicContributions[admsNodeID_e] = "
7180  <<dynamicContributions[admsNodeID_e].val() << std::endl;
7181  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_s_si) << std::endl;
7182  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_di) << std::endl;
7183  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_g) << std::endl;
7184  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_s) << std::endl;
7185  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_d) << std::endl;
7186  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_s) << std::endl;
7187  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d) << std::endl;
7188  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s) << std::endl;
7189  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_e) << std::endl;
7190  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_di) << std::endl;
7191  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_si) << std::endl;
7192  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_di) << std::endl;
7193  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_si) << std::endl;
7194  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_si) << std::endl;
7195  Xyce::dout() << " staticContributions[admsNodeID_di] = "
7196  <<staticContributions[admsNodeID_di].val() << std::endl;
7197  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_s_si) << std::endl;
7198  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_d_di) << std::endl;
7199  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_e_g) << std::endl;
7200  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_d_s) << std::endl;
7201  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_d) << std::endl;
7202  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_s) << std::endl;
7203  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_di_d) << std::endl;
7204  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s) << std::endl;
7205  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_e) << std::endl;
7206  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_e_di) << std::endl;
7207  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_e_si) << std::endl;
7208  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_di) << std::endl;
7209  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_di_si) << std::endl;
7210  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_si) << std::endl;
7211  Xyce::dout() << " dynamicContributions[admsNodeID_di] = "
7212  <<dynamicContributions[admsNodeID_di].val() << std::endl;
7213  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_s_si) << std::endl;
7214  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_di) << std::endl;
7215  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_g) << std::endl;
7216  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_s) << std::endl;
7217  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_d) << std::endl;
7218  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_s) << std::endl;
7219  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_d) << std::endl;
7220  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s) << std::endl;
7221  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_e) << std::endl;
7222  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_di) << std::endl;
7223  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_si) << std::endl;
7224  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_di) << std::endl;
7225  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_si) << std::endl;
7226  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_si) << std::endl;
7227  Xyce::dout() << " staticContributions[admsNodeID_si] = "
7228  <<staticContributions[admsNodeID_si].val() << std::endl;
7229  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_s_si) << std::endl;
7230  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_d_di) << std::endl;
7231  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_e_g) << std::endl;
7232  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_d_s) << std::endl;
7233  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_d) << std::endl;
7234  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_s) << std::endl;
7235  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d) << std::endl;
7236  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_si_s) << std::endl;
7237  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_e) << std::endl;
7238  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_e_di) << std::endl;
7239  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_e_si) << std::endl;
7240  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_di) << std::endl;
7241  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_di_si) << std::endl;
7242  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_si) << std::endl;
7243  Xyce::dout() << " dynamicContributions[admsNodeID_si] = "
7244  <<dynamicContributions[admsNodeID_si].val() << std::endl;
7245  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_s_si) << std::endl;
7246  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_di) << std::endl;
7247  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_g) << std::endl;
7248  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_s) << std::endl;
7249  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_d) << std::endl;
7250  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_s) << std::endl;
7251  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d) << std::endl;
7252  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_si_s) << std::endl;
7253  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_e) << std::endl;
7254  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_di) << std::endl;
7255  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_si) << std::endl;
7256  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_di) << std::endl;
7257  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_si) << std::endl;
7258  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_si) << std::endl;
7259 
7260  if (!origFlag)
7261  Xyce::dout() << "This step was limited by this device." << std::endl;
7262  }
7263 #endif // Xyce_DEBUG_DEVICE
7264  return true;
7265 }
7266 
7267 //-----------------------------------------------------------------------------
7268 // Function : Instance::loadDAEdFdx
7269 // Purpose :
7270 // Special Notes : Load the dFdx ("static jacobian") matrix
7271 // Scope : public
7272 // Creator : admsXml
7273 // Creation Date :
7274 //-----------------------------------------------------------------------------
7276 {
7277  bool bsuccess = true;
7278  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
7279 
7280 #ifdef Xyce_DEBUG_DEVICE
7281  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7282  {
7283  Xyce::dout() << subsection_divider << std::endl;
7284  Xyce::dout() << "ADMSbsimcmg::Instance::loadDAEdFdx (" << getName() << "):" << std::endl;
7285  }
7286 #endif
7288 
7289 
7290 #ifdef Xyce_DEBUG_DEVICE
7291  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7292  {
7294  }
7295 #endif
7297 
7298 
7299 #ifdef Xyce_DEBUG_DEVICE
7300  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7301  {
7303  }
7304 #endif
7306 
7307 
7308 #ifdef Xyce_DEBUG_DEVICE
7309  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7310  {
7312  }
7313 #endif
7315 
7316 
7317 #ifdef Xyce_DEBUG_DEVICE
7318  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7319  {
7321  }
7322 #endif
7324 
7325 
7326 #ifdef Xyce_DEBUG_DEVICE
7327  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7328  {
7330  }
7331 #endif
7333 
7334 
7335 #ifdef Xyce_DEBUG_DEVICE
7336  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7337  {
7339  }
7340 #endif
7342 
7343 
7344 #ifdef Xyce_DEBUG_DEVICE
7345  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7346  {
7348  }
7349 #endif
7351 
7352 
7353 #ifdef Xyce_DEBUG_DEVICE
7354  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7355  {
7357  }
7358 #endif
7360 
7361 
7362 #ifdef Xyce_DEBUG_DEVICE
7363  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7364  {
7366  }
7367 #endif
7369 
7370 
7371 #ifdef Xyce_DEBUG_DEVICE
7372  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7373  {
7375  }
7376 #endif
7378 
7379 
7380 #ifdef Xyce_DEBUG_DEVICE
7381  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7382  {
7384  }
7385 #endif
7387 
7388 
7389 #ifdef Xyce_DEBUG_DEVICE
7390  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7391  {
7393  }
7394 #endif
7395  (*f_g_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s);
7396 
7397 
7398 #ifdef Xyce_DEBUG_DEVICE
7399  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7400  {
7401  Xyce::dout() << " (*f_g_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s)<< std::endl;
7402  }
7403 #endif
7405 
7406 
7407 #ifdef Xyce_DEBUG_DEVICE
7408  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7409  {
7410  Xyce::dout() << " (*f_si_Equ_s_Node_Ptr) += " << +staticContributions[admsNodeID_si].dx(admsProbeID_V_s_si) -staticContributions[admsNodeID_si].dx(admsProbeID_V_si_s)<< std::endl;
7411  }
7412 #endif
7413  (*f_g_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d);
7414 
7415 
7416 #ifdef Xyce_DEBUG_DEVICE
7417  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7418  {
7419  Xyce::dout() << " (*f_g_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d)<< std::endl;
7420  }
7421 #endif
7422  (*f_si_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d);
7423 
7424 
7425 #ifdef Xyce_DEBUG_DEVICE
7426  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7427  {
7428  Xyce::dout() << " (*f_si_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d)<< std::endl;
7429  }
7430 #endif
7431  (*f_di_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s);
7432 
7433 
7434 #ifdef Xyce_DEBUG_DEVICE
7435  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7436  {
7437  Xyce::dout() << " (*f_di_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s)<< std::endl;
7438  }
7439 #endif
7441 
7442 
7443 #ifdef Xyce_DEBUG_DEVICE
7444  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7445  {
7446  Xyce::dout() << " (*f_di_Equ_d_Node_Ptr) += " << +staticContributions[admsNodeID_di].dx(admsProbeID_V_d_di) -staticContributions[admsNodeID_di].dx(admsProbeID_V_di_d)<< std::endl;
7447  }
7448 #endif
7450 
7451 
7452 #ifdef Xyce_DEBUG_DEVICE
7453  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7454  {
7456  }
7457 #endif
7459 
7460 
7461 #ifdef Xyce_DEBUG_DEVICE
7462  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7463  {
7465  }
7466 #endif
7468 
7469 
7470 #ifdef Xyce_DEBUG_DEVICE
7471  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7472  {
7474  }
7475 #endif
7477 
7478 
7479 #ifdef Xyce_DEBUG_DEVICE
7480  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7481  {
7483  }
7484 #endif
7485  (*f_e_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s);
7486 
7487 
7488 #ifdef Xyce_DEBUG_DEVICE
7489  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7490  {
7491  Xyce::dout() << " (*f_e_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s)<< std::endl;
7492  }
7493 #endif
7494  (*f_e_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d);
7495 
7496 
7497 #ifdef Xyce_DEBUG_DEVICE
7498  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7499  {
7500  Xyce::dout() << " (*f_e_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d)<< std::endl;
7501  }
7502 #endif
7504 
7505 
7506 #ifdef Xyce_DEBUG_DEVICE
7507  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7508  {
7509  Xyce::dout() << " (*f_d_Equ_d_Node_Ptr) += " << +staticContributions[admsNodeID_d].dx(admsProbeID_V_d_di) -staticContributions[admsNodeID_d].dx(admsProbeID_V_di_d)<< std::endl;
7510  }
7511 #endif
7512  (*f_d_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s);
7513 
7514 
7515 #ifdef Xyce_DEBUG_DEVICE
7516  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7517  {
7518  Xyce::dout() << " (*f_d_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s)<< std::endl;
7519  }
7520 #endif
7521  (*f_s_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d);
7522 
7523 
7524 #ifdef Xyce_DEBUG_DEVICE
7525  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7526  {
7527  Xyce::dout() << " (*f_s_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d)<< std::endl;
7528  }
7529 #endif
7531 
7532 
7533 #ifdef Xyce_DEBUG_DEVICE
7534  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7535  {
7536  Xyce::dout() << " (*f_s_Equ_s_Node_Ptr) += " << +staticContributions[admsNodeID_s].dx(admsProbeID_V_s_si) -staticContributions[admsNodeID_s].dx(admsProbeID_V_si_s)<< std::endl;
7537  }
7538 #endif
7540 
7541 
7542 #ifdef Xyce_DEBUG_DEVICE
7543  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7544  {
7546  }
7547 #endif
7549 
7550 
7551 #ifdef Xyce_DEBUG_DEVICE
7552  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7553  {
7555  }
7556 #endif
7558 
7559 
7560 #ifdef Xyce_DEBUG_DEVICE
7561  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7562  {
7564  }
7565 #endif
7567 
7568 
7569 #ifdef Xyce_DEBUG_DEVICE
7570  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7571  {
7573  }
7574 #endif
7576 
7577 
7578 #ifdef Xyce_DEBUG_DEVICE
7579  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7580  {
7582  }
7583 #endif
7585 
7586 
7587 #ifdef Xyce_DEBUG_DEVICE
7588  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7589  {
7591  }
7592 #endif
7594 
7595 
7596 #ifdef Xyce_DEBUG_DEVICE
7597  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7598  {
7600  }
7601 #endif
7603 
7604 
7605 #ifdef Xyce_DEBUG_DEVICE
7606  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7607  {
7609  }
7610 #endif
7611 
7612 
7613  return bsuccess;
7614 }
7615 
7616 
7617 //-----------------------------------------------------------------------------
7618 // Function : Instance::loadDAEdQdx
7619 // Purpose :
7620 // Special Notes : Load the dQdx ("dynamic jacobian") matrix
7621 // Scope : public
7622 // Creator : admsXml
7623 // Creation Date :
7624 //-----------------------------------------------------------------------------
7626 {
7627  bool bsuccess = true;
7628  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
7629 
7630 #ifdef Xyce_DEBUG_DEVICE
7631  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7632  {
7633  Xyce::dout() << subsection_divider << std::endl;
7634  Xyce::dout() << "ADMSbsimcmg::Instance::loadDAEdQdx (" << getName() << "):" << std::endl;
7635  }
7636 #endif
7638 
7639 
7640 #ifdef Xyce_DEBUG_DEVICE
7641  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7642  {
7644  }
7645 #endif
7647 
7648 
7649 #ifdef Xyce_DEBUG_DEVICE
7650  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7651  {
7653  }
7654 #endif
7656 
7657 
7658 #ifdef Xyce_DEBUG_DEVICE
7659  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7660  {
7662  }
7663 #endif
7665 
7666 
7667 #ifdef Xyce_DEBUG_DEVICE
7668  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7669  {
7671  }
7672 #endif
7674 
7675 
7676 #ifdef Xyce_DEBUG_DEVICE
7677  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7678  {
7680  }
7681 #endif
7683 
7684 
7685 #ifdef Xyce_DEBUG_DEVICE
7686  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7687  {
7689  }
7690 #endif
7692 
7693 
7694 #ifdef Xyce_DEBUG_DEVICE
7695  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7696  {
7698  }
7699 #endif
7701 
7702 
7703 #ifdef Xyce_DEBUG_DEVICE
7704  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7705  {
7707  }
7708 #endif
7710 
7711 
7712 #ifdef Xyce_DEBUG_DEVICE
7713  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7714  {
7716  }
7717 #endif
7719 
7720 
7721 #ifdef Xyce_DEBUG_DEVICE
7722  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7723  {
7725  }
7726 #endif
7728 
7729 
7730 #ifdef Xyce_DEBUG_DEVICE
7731  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7732  {
7734  }
7735 #endif
7737 
7738 
7739 #ifdef Xyce_DEBUG_DEVICE
7740  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7741  {
7743  }
7744 #endif
7745  (*q_g_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s);
7746 
7747 
7748 #ifdef Xyce_DEBUG_DEVICE
7749  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7750  {
7751  Xyce::dout() << " (*q_g_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s)<< std::endl;
7752  }
7753 #endif
7755 
7756 
7757 #ifdef Xyce_DEBUG_DEVICE
7758  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7759  {
7760  Xyce::dout() << " (*q_si_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_s) -dynamicContributions[admsNodeID_si].dx(admsProbeID_V_si_s)<< std::endl;
7761  }
7762 #endif
7763  (*q_g_Equ_d_Node_Ptr) += -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d);
7764 
7765 
7766 #ifdef Xyce_DEBUG_DEVICE
7767  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7768  {
7769  Xyce::dout() << " (*q_g_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d)<< std::endl;
7770  }
7771 #endif
7772  (*q_si_Equ_d_Node_Ptr) += -dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d);
7773 
7774 
7775 #ifdef Xyce_DEBUG_DEVICE
7776  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7777  {
7778  Xyce::dout() << " (*q_si_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d)<< std::endl;
7779  }
7780 #endif
7781  (*q_di_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s);
7782 
7783 
7784 #ifdef Xyce_DEBUG_DEVICE
7785  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7786  {
7787  Xyce::dout() << " (*q_di_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s)<< std::endl;
7788  }
7789 #endif
7791 
7792 
7793 #ifdef Xyce_DEBUG_DEVICE
7794  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7795  {
7796  Xyce::dout() << " (*q_di_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_d) -dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_d)<< std::endl;
7797  }
7798 #endif
7800 
7801 
7802 #ifdef Xyce_DEBUG_DEVICE
7803  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7804  {
7806  }
7807 #endif
7809 
7810 
7811 #ifdef Xyce_DEBUG_DEVICE
7812  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7813  {
7815  }
7816 #endif
7818 
7819 
7820 #ifdef Xyce_DEBUG_DEVICE
7821  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7822  {
7824  }
7825 #endif
7827 
7828 
7829 #ifdef Xyce_DEBUG_DEVICE
7830  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7831  {
7833  }
7834 #endif
7835  (*q_e_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s);
7836 
7837 
7838 #ifdef Xyce_DEBUG_DEVICE
7839  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7840  {
7841  Xyce::dout() << " (*q_e_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s)<< std::endl;
7842  }
7843 #endif
7844  (*q_e_Equ_d_Node_Ptr) += -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d);
7845 
7846 
7847 #ifdef Xyce_DEBUG_DEVICE
7848  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7849  {
7850  Xyce::dout() << " (*q_e_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d)<< std::endl;
7851  }
7852 #endif
7854 
7855 
7856 #ifdef Xyce_DEBUG_DEVICE
7857  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7858  {
7859  Xyce::dout() << " (*q_d_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_d) +dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s)<< std::endl;
7860  }
7861 #endif
7862  (*q_d_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s);
7863 
7864 
7865 #ifdef Xyce_DEBUG_DEVICE
7866  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7867  {
7868  Xyce::dout() << " (*q_d_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s)<< std::endl;
7869  }
7870 #endif
7871  (*q_s_Equ_d_Node_Ptr) += +dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s);
7872 
7873 
7874 #ifdef Xyce_DEBUG_DEVICE
7875  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7876  {
7877  Xyce::dout() << " (*q_s_Equ_d_Node_Ptr) += " << +dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s)<< std::endl;
7878  }
7879 #endif
7881 
7882 
7883 #ifdef Xyce_DEBUG_DEVICE
7884  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7885  {
7886  Xyce::dout() << " (*q_s_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_s) -dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s)<< std::endl;
7887  }
7888 #endif
7890 
7891 
7892 #ifdef Xyce_DEBUG_DEVICE
7893  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7894  {
7896  }
7897 #endif
7899 
7900 
7901 #ifdef Xyce_DEBUG_DEVICE
7902  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7903  {
7905  }
7906 #endif
7908 
7909 
7910 #ifdef Xyce_DEBUG_DEVICE
7911  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7912  {
7914  }
7915 #endif
7917 
7918 
7919 #ifdef Xyce_DEBUG_DEVICE
7920  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7921  {
7923  }
7924 #endif
7926 
7927 
7928 #ifdef Xyce_DEBUG_DEVICE
7929  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7930  {
7932  }
7933 #endif
7935 
7936 
7937 #ifdef Xyce_DEBUG_DEVICE
7938  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7939  {
7941  }
7942 #endif
7944 
7945 
7946 #ifdef Xyce_DEBUG_DEVICE
7947  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7948  {
7950  }
7951 #endif
7953 
7954 
7955 #ifdef Xyce_DEBUG_DEVICE
7956  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7957  {
7959  }
7960 #endif
7961 
7962 
7963  return bsuccess;
7964 }
7965 
7966 //-----------------------------------------------------------------------------
7967 // Function : Instance::updateTemperature
7968 // Purpose : Set temperature and update any parameters that depend on it
7969 // Special Notes : In Xyce ADMS, we'll simply copy the temperature, which is
7970 // in Kelvin, to our "admsTemperature" variable, which needs
7971 // to be in Celsius.
7972 // Scope : public
7973 // Creator : admsXml
7974 // Creation Date :
7975 //-----------------------------------------------------------------------------
7976 bool Instance::updateTemperature(const double & temperatureTemp)
7977 {
7978 
7979  admsTemperature = temperatureTemp;
7980  adms_vt_nom = adms_vt(temperatureTemp);
7981 
7982  return true;
7983 }
7984 
7985 // Class Model
7986 //-----------------------------------------------------------------------------
7987 // Function : Model::processParams
7988 // Purpose :
7989 // Special Notes :
7990 // Scope : public
7991 // Creator : admsXml
7992 // Creation Date :
7993 //-----------------------------------------------------------------------------
7995 {
7996 
7997  // Now we need to check that any parameters are within their ranges as
7998  // specified in the verilog:
7999 
8000  // Parameter NF : [ 1, (+inf) [
8001  if ( (!((NF >=1))) )
8002  {
8003  UserError0(*this) << "ADMSbsimcmg: Parameter NF value " << NF << " out of range [ 1, (+inf) [";
8004  }
8005 
8006  // Parameter U0MULT : [ 0, (+inf) [
8007  if ( (!((U0MULT >=0))) )
8008  {
8009  UserError0(*this) << "ADMSbsimcmg: Parameter U0MULT value " << U0MULT << " out of range [ 0, (+inf) [";
8010  }
8011 
8012  // Parameter IDS0MULT : [ 0, (+inf) [
8013  if ( (!((IDS0MULT >=0))) )
8014  {
8015  UserError0(*this) << "ADMSbsimcmg: Parameter IDS0MULT value " << IDS0MULT << " out of range [ 0, (+inf) [";
8016  }
8017 
8018  // Parameter DEVTYPE : [ 0, 1 ]
8019  if ( (!((DEVTYPE >=0 && DEVTYPE <=1 ))) )
8020  {
8021  UserError0(*this) << "ADMSbsimcmg: Parameter DEVTYPE value " << DEVTYPE << " out of range [ 0, 1 ]";
8022  }
8023 
8024  // Parameter BULKMOD : [ 0, 1 ]
8025  if ( (!((BULKMOD >=0 && BULKMOD <=1 ))) )
8026  {
8027  UserError0(*this) << "ADMSbsimcmg: Parameter BULKMOD value " << BULKMOD << " out of range [ 0, 1 ]";
8028  }
8029 
8030  // Parameter COREMOD : [ 0, 1 ]
8031  if ( (!((COREMOD >=0 && COREMOD <=1 ))) )
8032  {
8033  UserError0(*this) << "ADMSbsimcmg: Parameter COREMOD value " << COREMOD << " out of range [ 0, 1 ]";
8034  }
8035 
8036  // Parameter GEOMOD : [ 0, 3 ]
8037  if ( (!((GEOMOD >=0 && GEOMOD <=3 ))) )
8038  {
8039  UserError0(*this) << "ADMSbsimcmg: Parameter GEOMOD value " << GEOMOD << " out of range [ 0, 3 ]";
8040  }
8041 
8042  // Parameter CGEO1SW : [ 0, 1 ]
8043  if ( (!((CGEO1SW >=0 && CGEO1SW <=1 ))) )
8044  {
8045  UserError0(*this) << "ADMSbsimcmg: Parameter CGEO1SW value " << CGEO1SW << " out of range [ 0, 1 ]";
8046  }
8047 
8048  // Parameter RDSMOD : [ 0, 1 ]
8049  if ( (!((RDSMOD >=0 && RDSMOD <=1 ))) )
8050  {
8051  UserError0(*this) << "ADMSbsimcmg: Parameter RDSMOD value " << RDSMOD << " out of range [ 0, 1 ]";
8052  }
8053 
8054  // Parameter ASYMMOD : [ 0, 1 ]
8055  if ( (!((ASYMMOD >=0 && ASYMMOD <=1 ))) )
8056  {
8057  UserError0(*this) << "ADMSbsimcmg: Parameter ASYMMOD value " << ASYMMOD << " out of range [ 0, 1 ]";
8058  }
8059 
8060  // Parameter IGCMOD : [ 0, 1 ]
8061  if ( (!((IGCMOD >=0 && IGCMOD <=1 ))) )
8062  {
8063  UserError0(*this) << "ADMSbsimcmg: Parameter IGCMOD value " << IGCMOD << " out of range [ 0, 1 ]";
8064  }
8065 
8066  // Parameter IGBMOD : [ 0, 1 ]
8067  if ( (!((IGBMOD >=0 && IGBMOD <=1 ))) )
8068  {
8069  UserError0(*this) << "ADMSbsimcmg: Parameter IGBMOD value " << IGBMOD << " out of range [ 0, 1 ]";
8070  }
8071 
8072  // Parameter GIDLMOD : [ 0, 1 ]
8073  if ( (!((GIDLMOD >=0 && GIDLMOD <=1 ))) )
8074  {
8075  UserError0(*this) << "ADMSbsimcmg: Parameter GIDLMOD value " << GIDLMOD << " out of range [ 0, 1 ]";
8076  }
8077 
8078  // Parameter IIMOD : [ 0, 2 ]
8079  if ( (!((IIMOD >=0 && IIMOD <=2 ))) )
8080  {
8081  UserError0(*this) << "ADMSbsimcmg: Parameter IIMOD value " << IIMOD << " out of range [ 0, 2 ]";
8082  }
8083 
8084  // Parameter NQSMOD : [ 0, 2 ]
8085  if ( (!((NQSMOD >=0 && NQSMOD <=2 ))) )
8086  {
8087  UserError0(*this) << "ADMSbsimcmg: Parameter NQSMOD value " << NQSMOD << " out of range [ 0, 2 ]";
8088  }
8089 
8090  // Parameter SHMOD : [ 0, 1 ]
8091  if ( (!((SHMOD >=0 && SHMOD <=1 ))) )
8092  {
8093  UserError0(*this) << "ADMSbsimcmg: Parameter SHMOD value " << SHMOD << " out of range [ 0, 1 ]";
8094  }
8095 
8096  // Parameter RGATEMOD : [ 0, 1 ]
8097  if ( (!((RGATEMOD >=0 && RGATEMOD <=1 ))) )
8098  {
8099  UserError0(*this) << "ADMSbsimcmg: Parameter RGATEMOD value " << RGATEMOD << " out of range [ 0, 1 ]";
8100  }
8101 
8102  // Parameter RGEOMOD : [ 0, 1 ]
8103  if ( (!((RGEOMOD >=0 && RGEOMOD <=1 ))) )
8104  {
8105  UserError0(*this) << "ADMSbsimcmg: Parameter RGEOMOD value " << RGEOMOD << " out of range [ 0, 1 ]";
8106  }
8107 
8108  // Parameter CGEOMOD : [ 0, 2 ]
8109  if ( (!((CGEOMOD >=0 && CGEOMOD <=2 ))) )
8110  {
8111  UserError0(*this) << "ADMSbsimcmg: Parameter CGEOMOD value " << CGEOMOD << " out of range [ 0, 2 ]";
8112  }
8113 
8114  // Parameter CAPMOD : [ 0, 1 ]
8115  if ( (!((CAPMOD >=0 && CAPMOD <=1 ))) )
8116  {
8117  UserError0(*this) << "ADMSbsimcmg: Parameter CAPMOD value " << CAPMOD << " out of range [ 0, 1 ]";
8118  }
8119 
8120  // Parameter EOT : [ 0.1*1.0e-9, (+inf) [
8121  if ( (!((EOT >=0.1*1.0e-9))) )
8122  {
8123  UserError0(*this) << "ADMSbsimcmg: Parameter EOT value " << EOT << " out of range [ 0.1*1.0e-9, (+inf) [";
8124  }
8125 
8126  // Parameter TOXP : [ 0.1*1.0e-9, (+inf) [
8127  if ( (!((TOXP >=0.1*1.0e-9))) )
8128  {
8129  UserError0(*this) << "ADMSbsimcmg: Parameter TOXP value " << TOXP << " out of range [ 0.1*1.0e-9, (+inf) [";
8130  }
8131 
8132  // Parameter EOTBOX : [ 1*1.0e-9, (+inf) [
8133  if ( (!((EOTBOX >=1*1.0e-9))) )
8134  {
8135  UserError0(*this) << "ADMSbsimcmg: Parameter EOTBOX value " << EOTBOX << " out of range [ 1*1.0e-9, (+inf) [";
8136  }
8137 
8138  // Parameter HFIN : [ 1*1.0e-9, (+inf) [
8139  if ( (!((HFIN >=1*1.0e-9))) )
8140  {
8141  UserError0(*this) << "ADMSbsimcmg: Parameter HFIN value " << HFIN << " out of range [ 1*1.0e-9, (+inf) [";
8142  }
8143 
8144  // Parameter FECH : [ 0, (+inf) [
8145  if ( (!((FECH >=0))) )
8146  {
8147  UserError0(*this) << "ADMSbsimcmg: Parameter FECH value " << FECH << " out of range [ 0, (+inf) [";
8148  }
8149 
8150  // Parameter FECHCV : [ 0, (+inf) [
8151  if ( (!((FECHCV >=0))) )
8152  {
8153  UserError0(*this) << "ADMSbsimcmg: Parameter FECHCV value " << FECHCV << " out of range [ 0, (+inf) [";
8154  }
8155 
8156  // Parameter NBODY : [ 1e18, 5e24 ]
8157  if ( (!((NBODY >=1e18 && NBODY <=5e24 ))) )
8158  {
8159  UserError0(*this) << "ADMSbsimcmg: Parameter NBODY value " << NBODY << " out of range [ 1e18, 5e24 ]";
8160  }
8161 
8162  // Parameter NBODYN1 : [ (-0.08), (+inf) [
8163  if ( (!((NBODYN1 >=(-0.08)))) )
8164  {
8165  UserError0(*this) << "ADMSbsimcmg: Parameter NBODYN1 value " << NBODYN1 << " out of range [ (-0.08), (+inf) [";
8166  }
8167 
8168  // Parameter NBODYN2 : [ 1.0e-5, (+inf) [
8169  if ( (!((NBODYN2 >=1.0e-5))) )
8170  {
8171  UserError0(*this) << "ADMSbsimcmg: Parameter NBODYN2 value " << NBODYN2 << " out of range [ 1.0e-5, (+inf) [";
8172  }
8173 
8174  // Parameter NSD : [ 2e25, 1e27 ]
8175  if ( (!((NSD >=2e25 && NSD <=1e27 ))) )
8176  {
8177  UserError0(*this) << "ADMSbsimcmg: Parameter NSD value " << NSD << " out of range [ 2e25, 1e27 ]";
8178  }
8179 
8180  // Parameter PHIG : [ 0, (+inf) [
8181  if ( (!((PHIG >=0))) )
8182  {
8183  UserError0(*this) << "ADMSbsimcmg: Parameter PHIG value " << PHIG << " out of range [ 0, (+inf) [";
8184  }
8185 
8186  // Parameter PHIGN1 : [ (-0.08), (+inf) [
8187  if ( (!((PHIGN1 >=(-0.08)))) )
8188  {
8189  UserError0(*this) << "ADMSbsimcmg: Parameter PHIGN1 value " << PHIGN1 << " out of range [ (-0.08), (+inf) [";
8190  }
8191 
8192  // Parameter PHIGN2 : [ 1.0e-5, (+inf) [
8193  if ( (!((PHIGN2 >=1.0e-5))) )
8194  {
8195  UserError0(*this) << "ADMSbsimcmg: Parameter PHIGN2 value " << PHIGN2 << " out of range [ 1.0e-5, (+inf) [";
8196  }
8197 
8198  // Parameter EPSROX : [ 1, (+inf) [
8199  if ( (!((EPSROX >=1))) )
8200  {
8201  UserError0(*this) << "ADMSbsimcmg: Parameter EPSROX value " << EPSROX << " out of range [ 1, (+inf) [";
8202  }
8203 
8204  // Parameter EPSRSUB : [ 1, (+inf) [
8205  if ( (!((EPSRSUB >=1))) )
8206  {
8207  UserError0(*this) << "ADMSbsimcmg: Parameter EPSRSUB value " << EPSRSUB << " out of range [ 1, (+inf) [";
8208  }
8209 
8210  // Parameter EASUB : [ 0, (+inf) [
8211  if ( (!((EASUB >=0))) )
8212  {
8213  UserError0(*this) << "ADMSbsimcmg: Parameter EASUB value " << EASUB << " out of range [ 0, (+inf) [";
8214  }
8215 
8216  // Parameter CDSCN1 : [ (-0.08), (+inf) [
8217  if ( (!((CDSCN1 >=(-0.08)))) )
8218  {
8219  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCN1 value " << CDSCN1 << " out of range [ (-0.08), (+inf) [";
8220  }
8221 
8222  // Parameter CDSCN2 : [ 1.0e-5, (+inf) [
8223  if ( (!((CDSCN2 >=1.0e-5))) )
8224  {
8225  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCN2 value " << CDSCN2 << " out of range [ 1.0e-5, (+inf) [";
8226  }
8227 
8228  // Parameter CDSCDN1 : [ (-0.08), (+inf) [
8229  if ( (!((CDSCDN1 >=(-0.08)))) )
8230  {
8231  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDN1 value " << CDSCDN1 << " out of range [ (-0.08), (+inf) [";
8232  }
8233 
8234  // Parameter CDSCDN2 : [ 1.0e-5, (+inf) [
8235  if ( (!((CDSCDN2 >=1.0e-5))) )
8236  {
8237  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDN2 value " << CDSCDN2 << " out of range [ 1.0e-5, (+inf) [";
8238  }
8239 
8240  // Parameter CDSCDRN1 : [ (-0.08), (+inf) [
8241  if ( (!((CDSCDRN1 >=(-0.08)))) )
8242  {
8243  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDRN1 value " << CDSCDRN1 << " out of range [ (-0.08), (+inf) [";
8244  }
8245 
8246  // Parameter CDSCDRN2 : [ 1.0e-5, (+inf) [
8247  if ( (!((CDSCDRN2 >=1.0e-5))) )
8248  {
8249  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDRN2 value " << CDSCDRN2 << " out of range [ 1.0e-5, (+inf) [";
8250  }
8251 
8252  // Parameter ETA0N1 : [ (-0.08), (+inf) [
8253  if ( (!((ETA0N1 >=(-0.08)))) )
8254  {
8255  UserError0(*this) << "ADMSbsimcmg: Parameter ETA0N1 value " << ETA0N1 << " out of range [ (-0.08), (+inf) [";
8256  }
8257 
8258  // Parameter ETA0N2 : [ 1.0e-5, (+inf) [
8259  if ( (!((ETA0N2 >=1.0e-5))) )
8260  {
8261  UserError0(*this) << "ADMSbsimcmg: Parameter ETA0N2 value " << ETA0N2 << " out of range [ 1.0e-5, (+inf) [";
8262  }
8263 
8264  // Parameter VSATN1 : [ (-0.08), (+inf) [
8265  if ( (!((VSATN1 >=(-0.08)))) )
8266  {
8267  UserError0(*this) << "ADMSbsimcmg: Parameter VSATN1 value " << VSATN1 << " out of range [ (-0.08), (+inf) [";
8268  }
8269 
8270  // Parameter VSATN2 : [ 1.0e-5, (+inf) [
8271  if ( (!((VSATN2 >=1.0e-5))) )
8272  {
8273  UserError0(*this) << "ADMSbsimcmg: Parameter VSATN2 value " << VSATN2 << " out of range [ 1.0e-5, (+inf) [";
8274  }
8275 
8276  // Parameter VSAT1N1 : [ (-0.08), (+inf) [
8277  if ( (!((VSAT1N1 >=(-0.08)))) )
8278  {
8279  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1N1 value " << VSAT1N1 << " out of range [ (-0.08), (+inf) [";
8280  }
8281 
8282  // Parameter VSAT1N2 : [ 1.0e-5, (+inf) [
8283  if ( (!((VSAT1N2 >=1.0e-5))) )
8284  {
8285  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1N2 value " << VSAT1N2 << " out of range [ 1.0e-5, (+inf) [";
8286  }
8287 
8288  // Parameter VSAT1RN1 : [ (-0.08), (+inf) [
8289  if ( (!((VSAT1RN1 >=(-0.08)))) )
8290  {
8291  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1RN1 value " << VSAT1RN1 << " out of range [ (-0.08), (+inf) [";
8292  }
8293 
8294  // Parameter VSAT1RN2 : [ 1.0e-5, (+inf) [
8295  if ( (!((VSAT1RN2 >=1.0e-5))) )
8296  {
8297  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1RN2 value " << VSAT1RN2 << " out of range [ 1.0e-5, (+inf) [";
8298  }
8299 
8300  // Parameter U0N1 : [ (-0.08), (+inf) [
8301  if ( (!((U0N1 >=(-0.08)))) )
8302  {
8303  UserError0(*this) << "ADMSbsimcmg: Parameter U0N1 value " << U0N1 << " out of range [ (-0.08), (+inf) [";
8304  }
8305 
8306  // Parameter U0N2 : [ 1.0e-5, (+inf) [
8307  if ( (!((U0N2 >=1.0e-5))) )
8308  {
8309  UserError0(*this) << "ADMSbsimcmg: Parameter U0N2 value " << U0N2 << " out of range [ 1.0e-5, (+inf) [";
8310  }
8311 
8312  // Parameter CHARGEWF : [ (-1), 1 ]
8313  if ( (!((CHARGEWF >=(-1) && CHARGEWF <=1 ))) )
8314  {
8315  UserError0(*this) << "ADMSbsimcmg: Parameter CHARGEWF value " << CHARGEWF << " out of range [ (-1), 1 ]";
8316  }
8317 
8318  // Parameter RSDR : [ 0, (+inf) [
8319  if ( (!((RSDR >=0))) )
8320  {
8321  UserError0(*this) << "ADMSbsimcmg: Parameter RSDR value " << RSDR << " out of range [ 0, (+inf) [";
8322  }
8323 
8324  // Parameter RSDRR : [ 0, (+inf) [
8325  if ( (!((RSDRR >=0))) )
8326  {
8327  UserError0(*this) << "ADMSbsimcmg: Parameter RSDRR value " << RSDRR << " out of range [ 0, (+inf) [";
8328  }
8329 
8330  // Parameter RDDR : [ 0, (+inf) [
8331  if ( (!((RDDR >=0))) )
8332  {
8333  UserError0(*this) << "ADMSbsimcmg: Parameter RDDR value " << RDDR << " out of range [ 0, (+inf) [";
8334  }
8335 
8336  // Parameter RDDRR : [ 0, (+inf) [
8337  if ( (!((RDDRR >=0))) )
8338  {
8339  UserError0(*this) << "ADMSbsimcmg: Parameter RDDRR value " << RDDRR << " out of range [ 0, (+inf) [";
8340  }
8341 
8342  // Parameter RGEXT : [ 0, (+inf) [
8343  if ( (!((RGEXT >=0))) )
8344  {
8345  UserError0(*this) << "ADMSbsimcmg: Parameter RGEXT value " << RGEXT << " out of range [ 0, (+inf) [";
8346  }
8347 
8348  // Parameter RGFIN : [ 1.0e-3, (+inf) [
8349  if ( (!((RGFIN >=1.0e-3))) )
8350  {
8351  UserError0(*this) << "ADMSbsimcmg: Parameter RGFIN value " << RGFIN << " out of range [ 1.0e-3, (+inf) [";
8352  }
8353 
8354  // Parameter RHOC : [ 1.0e-18, 1.0e-9 ]
8355  if ( (!((RHOC >=1.0e-18 && RHOC <=1.0e-9 ))) )
8356  {
8357  UserError0(*this) << "ADMSbsimcmg: Parameter RHOC value " << RHOC << " out of range [ 1.0e-18, 1.0e-9 ]";
8358  }
8359 
8360  // Parameter RHORSD : ] 0, (+inf) [
8361  if ( (!((RHORSD >0))) )
8362  {
8363  UserError0(*this) << "ADMSbsimcmg: Parameter RHORSD value " << RHORSD << " out of range ] 0, (+inf) [";
8364  }
8365 
8366  // Parameter CRATIO : [ 0, 1 ]
8367  if ( (!((CRATIO >=0 && CRATIO <=1 ))) )
8368  {
8369  UserError0(*this) << "ADMSbsimcmg: Parameter CRATIO value " << CRATIO << " out of range [ 0, 1 ]";
8370  }
8371 
8372  // Parameter DELTAPRSD : ] (-FPITCH), (+inf) [
8373  if ( (!((DELTAPRSD >(-FPITCH)))) )
8374  {
8375  UserError0(*this) << "ADMSbsimcmg: Parameter DELTAPRSD value " << DELTAPRSD << " out of range ] (-FPITCH), (+inf) [";
8376  }
8377 
8378  // Parameter SDTERM : [ 0, 1 ]
8379  if ( (!((SDTERM >=0 && SDTERM <=1 ))) )
8380  {
8381  UserError0(*this) << "ADMSbsimcmg: Parameter SDTERM value " << SDTERM << " out of range [ 0, 1 ]";
8382  }
8383 
8384  // Parameter LSP : ] 0, (+inf) [
8385  if ( (!((LSP >0))) )
8386  {
8387  UserError0(*this) << "ADMSbsimcmg: Parameter LSP value " << LSP << " out of range ] 0, (+inf) [";
8388  }
8389 
8390  // Parameter EPSRSP : [ 1, (+inf) [
8391  if ( (!((EPSRSP >=1))) )
8392  {
8393  UserError0(*this) << "ADMSbsimcmg: Parameter EPSRSP value " << EPSRSP << " out of range [ 1, (+inf) [";
8394  }
8395 
8396  // Parameter TGATE : ] 0, (+inf) [
8397  if ( (!((TGATE >0))) )
8398  {
8399  UserError0(*this) << "ADMSbsimcmg: Parameter TGATE value " << TGATE << " out of range ] 0, (+inf) [";
8400  }
8401 
8402  // Parameter TMASK : [ 0, (+inf) [
8403  if ( (!((TMASK >=0))) )
8404  {
8405  UserError0(*this) << "ADMSbsimcmg: Parameter TMASK value " << TMASK << " out of range [ 0, (+inf) [";
8406  }
8407 
8408  // Parameter ASILIEND : [ 0, (+inf) [
8409  if ( (!((ASILIEND >=0))) )
8410  {
8411  UserError0(*this) << "ADMSbsimcmg: Parameter ASILIEND value " << ASILIEND << " out of range [ 0, (+inf) [";
8412  }
8413 
8414  // Parameter ARSDEND : [ 0, (+inf) [
8415  if ( (!((ARSDEND >=0))) )
8416  {
8417  UserError0(*this) << "ADMSbsimcmg: Parameter ARSDEND value " << ARSDEND << " out of range [ 0, (+inf) [";
8418  }
8419 
8420  // Parameter PRSDEND : [ 0, (+inf) [
8421  if ( (!((PRSDEND >=0))) )
8422  {
8423  UserError0(*this) << "ADMSbsimcmg: Parameter PRSDEND value " << PRSDEND << " out of range [ 0, (+inf) [";
8424  }
8425 
8426  // Parameter NSDE : [ 1e25, 1e26 ]
8427  if ( (!((NSDE >=1e25 && NSDE <=1e26 ))) )
8428  {
8429  UserError0(*this) << "ADMSbsimcmg: Parameter NSDE value " << NSDE << " out of range [ 1e25, 1e26 ]";
8430  }
8431 
8432  // Parameter CGEOE : [ 0, (+inf) [
8433  if ( (!((CGEOE >=0))) )
8434  {
8435  UserError0(*this) << "ADMSbsimcmg: Parameter CGEOE value " << CGEOE << " out of range [ 0, (+inf) [";
8436  }
8437 
8438  // Parameter TOXREF : ] 0, (+inf) [
8439  if ( (!((TOXREF >0))) )
8440  {
8441  UserError0(*this) << "ADMSbsimcmg: Parameter TOXREF value " << TOXREF << " out of range ] 0, (+inf) [";
8442  }
8443 
8444  // Parameter EOTACC : [ 0.1*1.0e-9, (+inf) [
8445  if ( (!((EOTACC >=0.1*1.0e-9))) )
8446  {
8447  UserError0(*this) << "ADMSbsimcmg: Parameter EOTACC value " << EOTACC << " out of range [ 0.1*1.0e-9, (+inf) [";
8448  }
8449 
8450  // Parameter CFS : [ 0, (+inf) [
8451  if ( (!((CFS >=0))) )
8452  {
8453  UserError0(*this) << "ADMSbsimcmg: Parameter CFS value " << CFS << " out of range [ 0, (+inf) [";
8454  }
8455 
8456  // Parameter CFD : [ 0, (+inf) [
8457  if ( (!((CFD >=0))) )
8458  {
8459  UserError0(*this) << "ADMSbsimcmg: Parameter CFD value " << CFD << " out of range [ 0, (+inf) [";
8460  }
8461 
8462  // Parameter CGSO : [ 0, (+inf) [
8463  if ( (!((CGSO >=0))) )
8464  {
8465  UserError0(*this) << "ADMSbsimcmg: Parameter CGSO value " << CGSO << " out of range [ 0, (+inf) [";
8466  }
8467 
8468  // Parameter CGDO : [ 0, (+inf) [
8469  if ( (!((CGDO >=0))) )
8470  {
8471  UserError0(*this) << "ADMSbsimcmg: Parameter CGDO value " << CGDO << " out of range [ 0, (+inf) [";
8472  }
8473 
8474  // Parameter CGSL : [ 0, (+inf) [
8475  if ( (!((CGSL >=0))) )
8476  {
8477  UserError0(*this) << "ADMSbsimcmg: Parameter CGSL value " << CGSL << " out of range [ 0, (+inf) [";
8478  }
8479 
8480  // Parameter CGDL : [ 0, (+inf) [
8481  if ( (!((CGDL >=0))) )
8482  {
8483  UserError0(*this) << "ADMSbsimcmg: Parameter CGDL value " << CGDL << " out of range [ 0, (+inf) [";
8484  }
8485 
8486  // Parameter CKAPPAS : [ 0.02, (+inf) [
8487  if ( (!((CKAPPAS >=0.02))) )
8488  {
8489  UserError0(*this) << "ADMSbsimcmg: Parameter CKAPPAS value " << CKAPPAS << " out of range [ 0.02, (+inf) [";
8490  }
8491 
8492  // Parameter CKAPPAD : [ 0.02, (+inf) [
8493  if ( (!((CKAPPAD >=0.02))) )
8494  {
8495  UserError0(*this) << "ADMSbsimcmg: Parameter CKAPPAD value " << CKAPPAD << " out of range [ 0.02, (+inf) [";
8496  }
8497 
8498  // Parameter CGBO : [ 0, (+inf) [
8499  if ( (!((CGBO >=0))) )
8500  {
8501  UserError0(*this) << "ADMSbsimcmg: Parameter CGBO value " << CGBO << " out of range [ 0, (+inf) [";
8502  }
8503 
8504  // Parameter CGBN : [ 0, (+inf) [
8505  if ( (!((CGBN >=0))) )
8506  {
8507  UserError0(*this) << "ADMSbsimcmg: Parameter CGBN value " << CGBN << " out of range [ 0, (+inf) [";
8508  }
8509 
8510  // Parameter CGBL : [ 0, (+inf) [
8511  if ( (!((CGBL >=0))) )
8512  {
8513  UserError0(*this) << "ADMSbsimcmg: Parameter CGBL value " << CGBL << " out of range [ 0, (+inf) [";
8514  }
8515 
8516  // Parameter CKAPPAB : [ 0.02, (+inf) [
8517  if ( (!((CKAPPAB >=0.02))) )
8518  {
8519  UserError0(*this) << "ADMSbsimcmg: Parameter CKAPPAB value " << CKAPPAB << " out of range [ 0.02, (+inf) [";
8520  }
8521 
8522  // Parameter CSDESW : [ 0, (+inf) [
8523  if ( (!((CSDESW >=0))) )
8524  {
8525  UserError0(*this) << "ADMSbsimcmg: Parameter CSDESW value " << CSDESW << " out of range [ 0, (+inf) [";
8526  }
8527 
8528  // Parameter SJS : [ 0, (+inf) [
8529  if ( (!((SJS >=0))) )
8530  {
8531  UserError0(*this) << "ADMSbsimcmg: Parameter SJS value " << SJS << " out of range [ 0, (+inf) [";
8532  }
8533 
8534  // Parameter SJD : [ 0, (+inf) [
8535  if ( (!((SJD >=0))) )
8536  {
8537  UserError0(*this) << "ADMSbsimcmg: Parameter SJD value " << SJD << " out of range [ 0, (+inf) [";
8538  }
8539 
8540  // Parameter SJSWS : [ 0, (+inf) [
8541  if ( (!((SJSWS >=0))) )
8542  {
8543  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWS value " << SJSWS << " out of range [ 0, (+inf) [";
8544  }
8545 
8546  // Parameter SJSWD : [ 0, (+inf) [
8547  if ( (!((SJSWD >=0))) )
8548  {
8549  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWD value " << SJSWD << " out of range [ 0, (+inf) [";
8550  }
8551 
8552  // Parameter SJSWGS : [ 0, (+inf) [
8553  if ( (!((SJSWGS >=0))) )
8554  {
8555  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWGS value " << SJSWGS << " out of range [ 0, (+inf) [";
8556  }
8557 
8558  // Parameter SJSWGD : [ 0, (+inf) [
8559  if ( (!((SJSWGD >=0))) )
8560  {
8561  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWGD value " << SJSWGD << " out of range [ 0, (+inf) [";
8562  }
8563 
8564  // Parameter NSEG : [ 4, 10 ]
8565  if ( (!((NSEG >=4 && NSEG <=10 ))) )
8566  {
8567  UserError0(*this) << "ADMSbsimcmg: Parameter NSEG value " << NSEG << " out of range [ 4, 10 ]";
8568  }
8569 
8570  // Parameter NTNOI : [ 0, (+inf) [
8571  if ( (!((NTNOI >=0))) )
8572  {
8573  UserError0(*this) << "ADMSbsimcmg: Parameter NTNOI value " << NTNOI << " out of range [ 0, (+inf) [";
8574  }
8575 
8576  // Parameter TNOM : [ (-273.15), (+inf) [
8577  if ( (!((TNOM >=(-273.15)))) )
8578  {
8579  UserError0(*this) << "ADMSbsimcmg: Parameter TNOM value " << TNOM << " out of range [ (-273.15), (+inf) [";
8580  }
8581 
8582  // Parameter RTH0 : [ 0, (+inf) [
8583  if ( (!((RTH0 >=0))) )
8584  {
8585  UserError0(*this) << "ADMSbsimcmg: Parameter RTH0 value " << RTH0 << " out of range [ 0, (+inf) [";
8586  }
8587 
8588  // Parameter CTH0 : [ 0, (+inf) [
8589  if ( (!((CTH0 >=0))) )
8590  {
8591  UserError0(*this) << "ADMSbsimcmg: Parameter CTH0 value " << CTH0 << " out of range [ 0, (+inf) [";
8592  }
8593 
8594  // Parameter WTH0 : [ 0, (+inf) [
8595  if ( (!((WTH0 >=0))) )
8596  {
8597  UserError0(*this) << "ADMSbsimcmg: Parameter WTH0 value " << WTH0 << " out of range [ 0, (+inf) [";
8598  }
8599 
8600 
8601  // and of course, this routine is where we should put the initial_model
8602  // stuff
8603 
8604 
8605  return true;
8606 }
8607 //----------------------------------------------------------------------------
8608 // Function : Model::processInstanceParams
8609 // Purpose :
8610 // Special Notes :
8611 // Scope : public
8612 // Creator :
8613 // Creation Date :
8614 //----------------------------------------------------------------------------
8616 {
8617 
8618  std::vector<Instance*>::iterator iter;
8619  std::vector<Instance*>::iterator first = instanceContainer.begin();
8620  std::vector<Instance*>::iterator last = instanceContainer.end();
8621 
8622  for (iter=first; iter!=last; ++iter)
8623  {
8624  (*iter)->processParams();
8625  }
8626 
8627  return true;
8628 }
8629 
8630 //-----------------------------------------------------------------------------
8631 // Function : Model::Model
8632 // Purpose : model block constructor
8633 // Special Notes :
8634 // Scope : public
8635 // Creator :
8636 // Creation Date :
8637 //-----------------------------------------------------------------------------
8639  const Configuration & configuration,
8640  const ModelBlock & model_block,
8641  const FactoryBlock & factory_block)
8642  : DeviceModel(model_block, configuration.getModelParameters(), factory_block),
8643  NF(1),
8644  XL(0),
8645  DTEMP(0),
8646  DELVTRAND(0),
8647  U0MULT(1),
8648  IDS0MULT(1),
8649  DEVTYPE(1),
8650  BULKMOD(0),
8651  COREMOD(0),
8652  GEOMOD(1),
8653  CGEO1SW(0),
8654  RDSMOD(0),
8655  ASYMMOD(0),
8656  IGCMOD(0),
8657  IGBMOD(0),
8658  GIDLMOD(0),
8659  IIMOD(0),
8660  NQSMOD(0),
8661  SHMOD(0),
8662  RGATEMOD(0),
8663  RGEOMOD(0),
8664  CGEOMOD(0),
8665  CAPMOD(0),
8666  LINT(0),
8667  LL(0),
8668  LLN(1),
8669  DLC(0),
8670  DLCACC(0),
8671  DLBIN(0),
8672  LLC(0),
8673  EOT(1.0*1.0e-9),
8674  TOXP(1.2*1.0e-9),
8675  EOTBOX(140*1.0e-9),
8676  HFIN(30*1.0e-9),
8677  FECH(1),
8678  DELTAW(0),
8679  FECHCV(1),
8680  DELTAWCV(0),
8681  NBODY(1e22),
8682  NBODYN1(0),
8683  NBODYN2(1.0e5),
8684  NSD(2e26),
8685  PHIG(4.61),
8686  PHIGL(0),
8687  PHIGN1(0),
8688  PHIGN2(1.0e5),
8689  EPSROX(3.9),
8690  EPSRSUB(11.9),
8691  EASUB(4.05),
8692  NI0SUB(1.1e16),
8693  BG0SUB(1.12),
8694  NC0SUB(2.86e25),
8695  NGATE(0.0),
8696  Imin(1.0E-15),
8697  CIT(0.0),
8698  CDSC(7e-3),
8699  CDSCN1(0),
8700  CDSCN2(1.0e5),
8701  CDSCD(7e-3),
8702  CDSCDN1(0),
8703  CDSCDN2(1.0e5),
8704  CDSCDR(0.0),
8705  CDSCDRN1(0.0),
8706  CDSCDRN2(0.0),
8707  DVT0(0.0),
8708  DVT1(0.60),
8709  DVT1SS(0.0),
8710  PHIN(0.05),
8711  ETA0(0.60),
8712  ETA0N1(0),
8713  ETA0N2(1.0e5),
8714  TETA0(0.0),
8715  ETA0R(0.0),
8716  TETA0R(0.0),
8717  DSUB(1.06),
8718  DVTP0(0),
8719  DVTP1(0),
8720  K1RSCE(0.0),
8721  LPE0(5.0*1.0e-9),
8722  DVTSHIFT(0),
8723  K0(0.0),
8724  K01(0.0),
8725  K0SI(1.0),
8726  K0SI1(0.0),
8727  K1SI(0.0),
8728  K1SI1(0.0),
8729  PHIBE(0.7),
8730  K1(0.0),
8731  K11(0.0),
8732  K1SAT(0.0),
8733  K1SAT1(0.0),
8734  QMFACTOR(0.0),
8735  QMTCENIV(0.0),
8736  QMTCENCV(0.0),
8737  QMTCENCVA(0.0),
8738  AQMTCEN(0.0),
8739  BQMTCEN(12.0e-9),
8740  ETAQM(0.54),
8741  QM0(1.00e-3),
8742  PQM(0.66),
8743  QM0ACC(1.00e-3),
8744  PQMACC(0.66),
8745  VSAT(85000),
8746  VSATN1(0),
8747  VSATN2(1.0e5),
8748  AVSAT(0.0),
8749  BVSAT(100.0e-9),
8750  VSAT1(0.0),
8751  VSAT1N1(0.0),
8752  VSAT1N2(0.0),
8753  VSAT1R(0.0),
8754  VSAT1RN1(0.0),
8755  VSAT1RN2(0.0),
8756  AVSAT1(0.0),
8757  BVSAT1(0.0),
8758  DELTAVSAT(1.0),
8759  PSAT(2.0),
8760  APSAT(0.0),
8761  BPSAT(1.0),
8762  KSATIV(1.0),
8763  VSATCV(0.0),
8764  AVSATCV(0.0),
8765  BVSATCV(0.0),
8766  DELTAVSATCV(0.0),
8767  PSATCV(0.0),
8768  APSATCV(0.0),
8769  BPSATCV(0.0),
8770  MEXP(4.0),
8771  AMEXP(0.0),
8772  BMEXP(1.0),
8773  MEXPR(0.0),
8774  AMEXPR(0.0),
8775  BMEXPR(0.0),
8776  PTWG(0.0),
8777  PTWGR(0.0),
8778  APTWG(0.0),
8779  BPTWG(100.0e-9),
8780  AT((-1.56e-3)),
8781  TMEXP(0.0),
8782  TMEXPR(0.0),
8783  PTWGT(0.004),
8784  U0(0.03),
8785  U0N1(0),
8786  U0N2(1.0e5),
8787  ETAMOB(2.0),
8788  UP(0),
8789  LPA(1.0),
8790  UA(0.3),
8791  AUA(0.0),
8792  BUA(100.0e-9),
8793  UC(0.0),
8794  EU(2.5),
8795  AEU(0.0),
8796  BEU(100.0e-9),
8797  UD(0.0),
8798  AUD(0.0),
8799  BUD(50.0e-9),
8800  UCS(1.0),
8801  UTE(0.0),
8802  UTL((-1.5e-3)),
8803  EMOBT(0.0),
8804  UA1(1.032e-3),
8805  UC1(0.056e-9),
8806  UD1(0.0),
8807  UCSTE((-4.775e-3)),
8808  CHARGEWF(0),
8809  RDSWMIN(0.0),
8810  RDSW(100.0),
8811  ARDSW(0.0),
8812  BRDSW(100.0e-9),
8813  RSWMIN(0.0),
8814  RSW(50.0),
8815  ARSW(0.0),
8816  BRSW(100.0e-9),
8817  RDWMIN(0.0),
8818  RDW(50.0),
8819  ARDW(0.0),
8820  BRDW(100.0e-9),
8821  RSDR(0.0),
8822  RSDRR(0.0),
8823  RDDR(0.0),
8824  RDDRR(0.0),
8825  PRSDR(1.0),
8826  PRDDR(0.0),
8827  PRWGS(0.0),
8828  PRWGD(0.0),
8829  WR(1.0),
8830  PRT(0.001),
8831  TRSDR(0.0),
8832  TRDDR(0.0),
8833  PDIBL1(1.30),
8834  PDIBL1R(0.0),
8835  PDIBL2(2.0e-4),
8836  DROUT(1.06),
8837  PVAG(1.0),
8838  PCLM(0.013),
8839  APCLM(0.0),
8840  BPCLM(100.0e-9),
8841  PCLMG(0.0),
8842  PCLMCV(0.0),
8843  A1(0.0),
8844  A11(0.0),
8845  A2(0.0),
8846  A21(0.0),
8847  RGEXT(0.0),
8848  RGFIN(1.0e-3),
8849  RSHS(0.0),
8850  RSHD(0.0),
8851  HEPI(10.0*1.0e-9),
8852  TSILI(10.0*1.0e-9),
8853  RHOC(1.0e-12),
8854  RHORSD(1.0),
8855  CRATIO(0.5),
8856  DELTAPRSD(0.0),
8857  SDTERM(0),
8858  LSP(0.0),
8859  EPSRSP(3.9),
8860  TGATE(30.0*1.0e-9),
8861  TMASK(30.0*1.0e-9),
8862  ASILIEND(0.0),
8863  ARSDEND(0.0),
8864  PRSDEND(0.0),
8865  NSDE(2e25),
8866  RGEOA(1.0),
8867  RGEOB(0.0),
8868  RGEOC(0.0),
8869  RGEOD(0.0),
8870  RGEOE(0.0),
8871  CGEOA(1.0),
8872  CGEOB(0.0),
8873  CGEOC(0.0),
8874  CGEOD(0.0),
8875  CGEOE(1.0),
8876  AIGBINV(1.11e-2),
8877  AIGBINV1(0),
8878  BIGBINV(9.49e-4),
8879  CIGBINV(6.00e-3),
8880  EIGBINV(1.1),
8881  NIGBINV(3.0),
8882  AIGBACC(1.36e-2),
8883  AIGBACC1(0),
8884  BIGBACC(1.71e-3),
8885  CIGBACC(7.5e-2),
8886  NIGBACC(1.0),
8887  AIGC(1.36e-2),
8888  AIGC1(0),
8889  BIGC(1.71e-3),
8890  CIGC(0.075),
8891  PIGCD(1.0),
8892  DLCIGS(0),
8893  AIGS(1.36e-2),
8894  AIGS1(0),
8895  BIGS(1.71e-3),
8896  CIGS(0.075),
8897  DLCIGD(0.0),
8898  AIGD(0.0),
8899  AIGD1(0.0),
8900  BIGD(0.0),
8901  CIGD(0.0),
8902  TOXREF(1.2*1.0e-9),
8903  TOXG(0.0),
8904  NTOX(1.0),
8905  POXEDGE(1.0),
8906  AGISL(6.055*1.0e-12),
8907  BGISL(0.3e9),
8908  CGISL(0.5),
8909  EGISL(0.2),
8910  PGISL(1.0),
8911  AGIDL(0.0),
8912  BGIDL(0.0),
8913  CGIDL(0.0),
8914  EGIDL(0.0),
8915  PGIDL(0.0),
8916  ALPHA0(0.0),
8917  ALPHA01(0.0),
8918  ALPHA1(0.0),
8919  ALPHA11(0.0),
8920  BETA0(0.0),
8921  ALPHAII0(0.0),
8922  ALPHAII01(0.0),
8923  ALPHAII1(0.0),
8924  ALPHAII11(0.0),
8925  BETAII0(0.0),
8926  BETAII1(0.0),
8927  BETAII2(0.1),
8928  ESATII(1.0e7),
8929  LII(0.5E-9),
8930  SII0(0.5),
8931  SII1(0.1),
8932  SII2(0.0),
8933  SIID(0.0),
8934  EOTACC(0.0),
8935  DELVFBACC(0.0),
8936  CFS(2.5e-11),
8937  CFD(0.0),
8938  CGSO(0.0),
8939  CGDO(0.0),
8940  CGSL(0.0),
8941  CGDL(0.0),
8942  CKAPPAS(0.6),
8943  CKAPPAD(0.0),
8944  CGBO(0.0),
8945  CGBN(0.0),
8946  CGBL(0.0),
8947  CKAPPAB(0.6),
8948  CSDESW(0.0),
8949  CJS(5.0e-4),
8950  CJD(0.0),
8951  CJSWS(5.0e-10),
8952  CJSWD(0.0),
8953  CJSWGS(0.0),
8954  CJSWGD(0.0),
8955  PBS(1.0),
8956  PBD(0.0),
8957  PBSWS(1.0),
8958  PBSWD(0.0),
8959  PBSWGS(0.0),
8960  PBSWGD(0.0),
8961  MJS(0.5),
8962  MJD(0.0),
8963  MJSWS(0.33),
8964  MJSWD(0.0),
8965  MJSWGS(0.0),
8966  MJSWGD(0.0),
8967  SJS(0.0),
8968  SJD(0.0),
8969  SJSWS(0.0),
8970  SJSWD(0.0),
8971  SJSWGS(0.0),
8972  SJSWGD(0.0),
8973  MJS2(0.125),
8974  MJD2(0.0),
8975  MJSWS2(0.083),
8976  MJSWD2(0.0),
8977  MJSWGS2(0.0),
8978  MJSWGD2(0.0),
8979  JSS(1.0e-4),
8980  JSD(0.0),
8981  JSWS(0.0),
8982  JSWD(0.0),
8983  JSWGS(0.0),
8984  JSWGD(0.0),
8985  NJS(1.0),
8986  NJD(0.0),
8987  IJTHSFWD(0.1),
8988  IJTHDFWD(0.0),
8989  IJTHSREV(0.1),
8990  IJTHDREV(0.0),
8991  BVS(10.0),
8992  BVD(0.0),
8993  XJBVS(1.0),
8994  XJBVD(0.0),
8995  JTSS(0.0),
8996  JTSD(0.0),
8997  JTSSWS(0.0),
8998  JTSSWD(0.0),
8999  JTSSWGS(0.0),
9000  JTSSWGD(0.0),
9001  JTWEFF(0.0),
9002  NJTS(20.0),
9003  NJTSD(0.0),
9004  NJTSSW(20.0),
9005  NJTSSWD(0.0),
9006  NJTSSWG(20.0),
9007  NJTSSWGD(0.0),
9008  VTSS(10.0),
9009  VTSD(0.0),
9010  VTSSWS(10.0),
9011  VTSSWD(0.0),
9012  VTSSWGS(10.0),
9013  VTSSWGD(0.0),
9014  LINTIGEN(0),
9015  NTGEN(1.0),
9016  AIGEN(0),
9017  BIGEN(0),
9018  XRCRG1(12.0),
9019  XRCRG2(1.0),
9020  NSEG(4),
9021  EF(1.0),
9022  EM(4.1e7),
9023  NOIA(6.250e+39),
9024  NOIB(3.125e+24),
9025  NOIC(8.750e+07),
9026  NTNOI(1.0),
9027  TNOM(27.0),
9028  TBGASUB(7.02e-4),
9029  TBGBSUB(1108.0),
9030  KT1(0.0),
9031  KT1L(0.0),
9032  TSS(0.0),
9033  IIT((-0.5)),
9034  TII(0.0),
9035  TGIDL((-0.003)),
9036  IGT(2.5),
9037  TCJ(0.0),
9038  TCJSW(0.0),
9039  TCJSWG(0.0),
9040  TPB(0.0),
9041  TPBSW(0.0),
9042  TPBSWG(0.0),
9043  XTIS(3.0),
9044  XTID(0.0),
9045  XTSS(0.02),
9046  XTSD(0.0),
9047  XTSSWS(0.02),
9048  XTSSWD(0.0),
9049  XTSSWGS(0.02),
9050  XTSSWGD(0.0),
9051  TNJTS(0.0),
9052  TNJTSD(0.0),
9053  TNJTSSW(0.0),
9054  TNJTSSWD(0.0),
9055  TNJTSSWG(0.0),
9056  TNJTSSWGD(0.0),
9057  RTH0(0.01),
9058  CTH0(1.0E-05),
9059  WTH0(0.0),
9060  LNBODY(0),
9061  NNBODY(0),
9062  PNBODY(0),
9063  LPHIG(0),
9064  NPHIG(0),
9065  PPHIG(0),
9066  LNGATE(0),
9067  NNGATE(0),
9068  PNGATE(0),
9069  LCIT(0),
9070  NCIT(0),
9071  PCIT(0),
9072  LCDSC(0),
9073  NCDSC(0),
9074  PCDSC(0),
9075  LCDSCD(0),
9076  NCDSCD(0),
9077  PCDSCD(0),
9078  LCDSCDR(0.0),
9079  NCDSCDR(0.0),
9080  PCDSCDR(0.0),
9081  LDVT0(0),
9082  NDVT0(0),
9083  PDVT0(0),
9084  LDVT1(0),
9085  NDVT1(0),
9086  PDVT1(0),
9087  LDVT1SS(0),
9088  NDVT1SS(0),
9089  PDVT1SS(0),
9090  LPHIN(0),
9091  NPHIN(0),
9092  PPHIN(0),
9093  LETA0(0),
9094  NETA0(0),
9095  PETA0(0),
9096  LETA0R(0.0),
9097  NETA0R(0.0),
9098  PETA0R(0.0),
9099  LDSUB(0),
9100  NDSUB(0),
9101  PDSUB(0),
9102  LK1RSCE(0),
9103  NK1RSCE(0),
9104  PK1RSCE(0),
9105  LLPE0(0),
9106  NLPE0(0),
9107  PLPE0(0),
9108  LDVTSHIFT(0),
9109  NDVTSHIFT(0),
9110  PDVTSHIFT(0),
9111  LPHIBE(0),
9112  NPHIBE(0),
9113  PPHIBE(0),
9114  LK0(0),
9115  NK0(0),
9116  PK0(0),
9117  LK01(0),
9118  NK01(0),
9119  PK01(0),
9120  LK0SI(0),
9121  NK0SI(0),
9122  PK0SI(0),
9123  LK0SI1(0),
9124  NK0SI1(0),
9125  PK0SI1(0),
9126  LK1SI(0),
9127  NK1SI(0),
9128  PK1SI(0),
9129  LK1SI1(0),
9130  NK1SI1(0),
9131  PK1SI1(0),
9132  LK1(0),
9133  NK1(0),
9134  PK1(0),
9135  LK11(0),
9136  NK11(0),
9137  PK11(0),
9138  LK1SAT(0),
9139  NK1SAT(0),
9140  PK1SAT(0),
9141  LK1SAT1(0),
9142  NK1SAT1(0),
9143  PK1SAT1(0),
9144  LDVTB(0),
9145  NDVTB(0),
9146  PDVTB(0),
9147  LLPEB(0),
9148  NLPEB(0),
9149  PLPEB(0),
9150  LQMFACTOR(0.0),
9151  NQMFACTOR(0.0),
9152  PQMFACTOR(0.0),
9153  LQMTCENIV(0.0),
9154  NQMTCENIV(0.0),
9155  PQMTCENIV(0.0),
9156  LQMTCENCV(0.0),
9157  NQMTCENCV(0.0),
9158  PQMTCENCV(0.0),
9159  LQMTCENCVA(0.0),
9160  NQMTCENCVA(0.0),
9161  PQMTCENCVA(0.0),
9162  LVSAT(0),
9163  NVSAT(0),
9164  PVSAT(0),
9165  LVSAT1(0.0),
9166  NVSAT1(0.0),
9167  PVSAT1(0.0),
9168  LVSAT1R(0.0),
9169  NVSAT1R(0.0),
9170  PVSAT1R(0.0),
9171  LPSAT(0),
9172  NPSAT(0),
9173  PPSAT(0),
9174  LDELTAVSAT(0),
9175  NDELTAVSAT(0),
9176  PDELTAVSAT(0),
9177  LKSATIV(0),
9178  NKSATIV(0),
9179  PKSATIV(0),
9180  LVSATCV(0),
9181  NVSATCV(0),
9182  PVSATCV(0),
9183  LPSATCV(0),
9184  NPSATCV(0),
9185  PPSATCV(0),
9186  LDELTAVSATCV(0),
9187  NDELTAVSATCV(0),
9188  PDELTAVSATCV(0),
9189  LMEXP(0),
9190  NMEXP(0),
9191  PMEXP(0),
9192  LMEXPR(0),
9193  NMEXPR(0),
9194  PMEXPR(0),
9195  LPTWG(0.0),
9196  NPTWG(0.0),
9197  PPTWG(0.0),
9198  LPTWGR(0.0),
9199  NPTWGR(0.0),
9200  PPTWGR(0.0),
9201  LU0(0),
9202  NU0(0),
9203  PU0(0),
9204  LETAMOB(0),
9205  NETAMOB(0),
9206  PETAMOB(0),
9207  LUP(0),
9208  NUP(0),
9209  PUP(0),
9210  LUA(0),
9211  NUA(0),
9212  PUA(0),
9213  LUC(0),
9214  NUC(0),
9215  PUC(0),
9216  LEU(0),
9217  NEU(0),
9218  PEU(0),
9219  LUD(0),
9220  NUD(0),
9221  PUD(0),
9222  LUCS(0),
9223  NUCS(0),
9224  PUCS(0),
9225  LPCLM(0),
9226  NPCLM(0),
9227  PPCLM(0),
9228  LPCLMG(0),
9229  NPCLMG(0),
9230  PPCLMG(0),
9231  LPCLMCV(0),
9232  NPCLMCV(0),
9233  PPCLMCV(0),
9234  LA1(0),
9235  NA1(0),
9236  PA1(0),
9237  LA11(0),
9238  NA11(0),
9239  PA11(0),
9240  LA2(0),
9241  NA2(0),
9242  PA2(0),
9243  LA21(0),
9244  NA21(0),
9245  PA21(0),
9246  LRDSW(0),
9247  NRDSW(0),
9248  PRDSW(0),
9249  LRSW(0.0),
9250  NRSW(0.0),
9251  PRSW(0.0),
9252  LRDW(0.0),
9253  NRDW(0.0),
9254  PRDW(0.0),
9255  LPRWGS(0),
9256  NPRWGS(0),
9257  PPRWGS(0),
9258  LPRWGD(0),
9259  NPRWGD(0),
9260  PPRWGD(0),
9261  LWR(0),
9262  NWR(0),
9263  PWR(0),
9264  LPDIBL1(0),
9265  NPDIBL1(0),
9266  PPDIBL1(0),
9267  LPDIBL1R(0.0),
9268  NPDIBL1R(0.0),
9269  PPDIBL1R(0.0),
9270  LPDIBL2(0),
9271  NPDIBL2(0),
9272  PPDIBL2(0),
9273  LDROUT(0),
9274  NDROUT(0),
9275  PDROUT(0),
9276  LPVAG(0),
9277  NPVAG(0),
9278  PPVAG(0),
9279  LAIGBINV(0),
9280  NAIGBINV(0),
9281  PAIGBINV(0),
9282  LAIGBINV1(0),
9283  NAIGBINV1(0),
9284  PAIGBINV1(0),
9285  LBIGBINV(0),
9286  NBIGBINV(0),
9287  PBIGBINV(0),
9288  LCIGBINV(0),
9289  NCIGBINV(0),
9290  PCIGBINV(0),
9291  LEIGBINV(0),
9292  NEIGBINV(0),
9293  PEIGBINV(0),
9294  LNIGBINV(0),
9295  NNIGBINV(0),
9296  PNIGBINV(0),
9297  LAIGBACC(0),
9298  NAIGBACC(0),
9299  PAIGBACC(0),
9300  LAIGBACC1(0),
9301  NAIGBACC1(0),
9302  PAIGBACC1(0),
9303  LBIGBACC(0),
9304  NBIGBACC(0),
9305  PBIGBACC(0),
9306  LCIGBACC(0),
9307  NCIGBACC(0),
9308  PCIGBACC(0),
9309  LNIGBACC(0),
9310  NNIGBACC(0),
9311  PNIGBACC(0),
9312  LAIGC(0),
9313  NAIGC(0),
9314  PAIGC(0),
9315  LAIGC1(0),
9316  NAIGC1(0),
9317  PAIGC1(0),
9318  LBIGC(0),
9319  NBIGC(0),
9320  PBIGC(0),
9321  LCIGC(0),
9322  NCIGC(0),
9323  PCIGC(0),
9324  LPIGCD(0),
9325  NPIGCD(0),
9326  PPIGCD(0),
9327  LAIGS(0),
9328  NAIGS(0),
9329  PAIGS(0),
9330  LAIGS1(0),
9331  NAIGS1(0),
9332  PAIGS1(0),
9333  LBIGS(0),
9334  NBIGS(0),
9335  PBIGS(0),
9336  LCIGS(0),
9337  NCIGS(0),
9338  PCIGS(0),
9339  LAIGD(0.0),
9340  NAIGD(0.0),
9341  PAIGD(0.0),
9342  LAIGD1(0.0),
9343  NAIGD1(0.0),
9344  PAIGD1(0.0),
9345  LBIGD(0.0),
9346  NBIGD(0.0),
9347  PBIGD(0.0),
9348  LCIGD(0.0),
9349  NCIGD(0.0),
9350  PCIGD(0.0),
9351  LNTOX(0),
9352  NNTOX(0),
9353  PNTOX(0),
9354  LPOXEDGE(0),
9355  NPOXEDGE(0),
9356  PPOXEDGE(0),
9357  LAGISL(0),
9358  NAGISL(0),
9359  PAGISL(0),
9360  LBGISL(0),
9361  NBGISL(0),
9362  PBGISL(0),
9363  LCGISL(0),
9364  NCGISL(0),
9365  PCGISL(0),
9366  LEGISL(0),
9367  NEGISL(0),
9368  PEGISL(0),
9369  LPGISL(0),
9370  NPGISL(0),
9371  PPGISL(0),
9372  LAGIDL(0.0),
9373  NAGIDL(0.0),
9374  PAGIDL(0.0),
9375  LBGIDL(0.0),
9376  NBGIDL(0.0),
9377  PBGIDL(0.0),
9378  LCGIDL(0.0),
9379  NCGIDL(0.0),
9380  PCGIDL(0.0),
9381  LEGIDL(0.0),
9382  NEGIDL(0.0),
9383  PEGIDL(0.0),
9384  LPGIDL(0.0),
9385  NPGIDL(0.0),
9386  PPGIDL(0.0),
9387  LALPHA0(0.0),
9388  NALPHA0(0.0),
9389  PALPHA0(0.0),
9390  LALPHA1(0.0),
9391  NALPHA1(0.0),
9392  PALPHA1(0.0),
9393  LALPHAII0(0.0),
9394  NALPHAII0(0.0),
9395  PALPHAII0(0.0),
9396  LALPHAII1(0.0),
9397  NALPHAII1(0.0),
9398  PALPHAII1(0.0),
9399  LBETA0(0.0),
9400  NBETA0(0.0),
9401  PBETA0(0.0),
9402  LBETAII0(0.0),
9403  NBETAII0(0.0),
9404  PBETAII0(0.0),
9405  LBETAII1(0.0),
9406  NBETAII1(0.0),
9407  PBETAII1(0.0),
9408  LBETAII2(0.0),
9409  NBETAII2(0.0),
9410  PBETAII2(0.0),
9411  LESATII(0.0),
9412  NESATII(0.0),
9413  PESATII(0.0),
9414  LLII(0.0),
9415  NLII(0.0),
9416  PLII(0.0),
9417  LSII0(0.0),
9418  NSII0(0.0),
9419  PSII0(0.0),
9420  LSII1(0.0),
9421  NSII1(0.0),
9422  PSII1(0.0),
9423  LSII2(0.0),
9424  NSII2(0.0),
9425  PSII2(0.0),
9426  LSIID(0.0),
9427  NSIID(0.0),
9428  PSIID(0.0),
9429  LCFS(0.0),
9430  NCFS(0.0),
9431  PCFS(0.0),
9432  LCFD(0.0),
9433  NCFD(0.0),
9434  PCFD(0.0),
9435  LCOVS(0.0),
9436  NCOVS(0.0),
9437  PCOVS(0.0),
9438  LCOVD(0.0),
9439  NCOVD(0.0),
9440  PCOVD(0.0),
9441  LCGSL(0.0),
9442  NCGSL(0.0),
9443  PCGSL(0.0),
9444  LCGDL(0.0),
9445  NCGDL(0.0),
9446  PCGDL(0.0),
9447  LCKAPPAS(0.0),
9448  NCKAPPAS(0.0),
9449  PCKAPPAS(0.0),
9450  LCKAPPAD(0.0),
9451  NCKAPPAD(0.0),
9452  PCKAPPAD(0.0),
9453  LCGBL(0.0),
9454  NCGBL(0.0),
9455  PCGBL(0.0),
9456  LCKAPPAB(0.0),
9457  NCKAPPAB(0.0),
9458  PCKAPPAB(0.0),
9459  LNTGEN(0),
9460  NNTGEN(0),
9461  PNTGEN(0),
9462  LAIGEN(0),
9463  NAIGEN(0),
9464  PAIGEN(0),
9465  LBIGEN(0),
9466  NBIGEN(0),
9467  PBIGEN(0),
9468  LXRCRG1(0.0),
9469  NXRCRG1(0.0),
9470  PXRCRG1(0.0),
9471  LXRCRG2(0.0),
9472  NXRCRG2(0.0),
9473  PXRCRG2(0.0),
9474  LINTNOI(0.0),
9475  LUTE(0.0),
9476  NUTE(0.0),
9477  PUTE(0.0),
9478  LUTL(0.0),
9479  NUTL(0.0),
9480  PUTL(0.0),
9481  LEMOBT(0),
9482  NEMOBT(0),
9483  PEMOBT(0),
9484  LUA1(0.0),
9485  NUA1(0.0),
9486  PUA1(0.0),
9487  LUC1(0.0),
9488  NUC1(0.0),
9489  PUC1(0.0),
9490  LUD1(0.0),
9491  NUD1(0.0),
9492  PUD1(0.0),
9493  LUCSTE(0.0),
9494  NUCSTE(0.0),
9495  PUCSTE(0.0),
9496  LPTWGT(0),
9497  NPTWGT(0),
9498  PPTWGT(0),
9499  LAT(0),
9500  NAT(0),
9501  PAT(0),
9502  LSTTHETASAT(0),
9503  NSTTHETASAT(0),
9504  PSTTHETASAT(0),
9505  LPRT(0),
9506  NPRT(0),
9507  PPRT(0),
9508  LKT1(0),
9509  NKT1(0),
9510  PKT1(0),
9511  LTSS(0),
9512  NTSS(0),
9513  PTSS(0),
9514  LIIT(0),
9515  NIIT(0),
9516  PIIT(0),
9517  LTII(0.0),
9518  NTII(0.0),
9519  PTII(0.0),
9520  LTGIDL(0),
9521  NTGIDL(0),
9522  PTGIDL(0),
9523  LIGT(0),
9524  NIGT(0),
9525  PIGT(0)
9526 {
9527  // Set params to constant default values (from parTable):
9528  setDefaultParams();
9529 
9530  // Set params according to .model line and constant defaults from metadata:
9531  setModParams(model_block.params);
9532 
9533  // Set any non-constant parameter defaults:
9534  // Set any parameters that were not given and whose defaults depend on other
9535  // parameters:
9536  if (!given("CDSCDR"))
9537  {
9538  CDSCDR = CDSCD;
9539  }
9540  if (!given("CDSCDRN1"))
9541  {
9542  CDSCDRN1 = CDSCDN1;
9543  }
9544  if (!given("CDSCDRN2"))
9545  {
9546  CDSCDRN2 = CDSCDN2;
9547  }
9548  if (!given("DVT1SS"))
9549  {
9550  DVT1SS = DVT1;
9551  }
9552  if (!given("ETA0R"))
9553  {
9554  ETA0R = ETA0;
9555  }
9556  if (!given("TETA0R"))
9557  {
9558  TETA0R = TETA0;
9559  }
9560  if (!given("K1SI"))
9561  {
9562  K1SI = K0SI;
9563  }
9564  if (!given("K1SI1"))
9565  {
9566  K1SI1 = K0SI1;
9567  }
9568  if (!given("VSAT1"))
9569  {
9570  VSAT1 = VSAT;
9571  }
9572  if (!given("VSAT1N1"))
9573  {
9574  VSAT1N1 = VSATN1;
9575  }
9576  if (!given("VSAT1N2"))
9577  {
9578  VSAT1N2 = VSATN2;
9579  }
9580  if (!given("VSAT1R"))
9581  {
9582  VSAT1R = VSAT1;
9583  }
9584  if (!given("VSAT1RN1"))
9585  {
9586  VSAT1RN1 = VSAT1N1;
9587  }
9588  if (!given("VSAT1RN2"))
9589  {
9590  VSAT1RN2 = VSAT1N2;
9591  }
9592  if (!given("AVSAT1"))
9593  {
9594  AVSAT1 = AVSAT;
9595  }
9596  if (!given("BVSAT1"))
9597  {
9598  BVSAT1 = BVSAT;
9599  }
9600  if (!given("VSATCV"))
9601  {
9602  VSATCV = VSAT;
9603  }
9604  if (!given("AVSATCV"))
9605  {
9606  AVSATCV = AVSAT;
9607  }
9608  if (!given("BVSATCV"))
9609  {
9610  BVSATCV = BVSAT;
9611  }
9612  if (!given("DELTAVSATCV"))
9613  {
9615  }
9616  if (!given("PSATCV"))
9617  {
9618  PSATCV = PSAT;
9619  }
9620  if (!given("APSATCV"))
9621  {
9622  APSATCV = APSAT;
9623  }
9624  if (!given("BPSATCV"))
9625  {
9626  BPSATCV = BPSAT;
9627  }
9628  if (!given("MEXPR"))
9629  {
9630  MEXPR = MEXP;
9631  }
9632  if (!given("AMEXPR"))
9633  {
9634  AMEXPR = AMEXP;
9635  }
9636  if (!given("BMEXPR"))
9637  {
9638  BMEXPR = BMEXP;
9639  }
9640  if (!given("PTWGR"))
9641  {
9642  PTWGR = PTWG;
9643  }
9644  if (!given("TMEXPR"))
9645  {
9646  TMEXPR = TMEXP;
9647  }
9648  if (!given("RSDRR"))
9649  {
9650  RSDRR = RSDR;
9651  }
9652  if (!given("RDDR"))
9653  {
9654  RDDR = RSDR;
9655  }
9656  if (!given("RDDRR"))
9657  {
9658  RDDRR = RDDR;
9659  }
9660  if (!given("PRDDR"))
9661  {
9662  PRDDR = PRSDR;
9663  }
9664  if (!given("PRWGD"))
9665  {
9666  PRWGD = PRWGS;
9667  }
9668  if (!given("TRDDR"))
9669  {
9670  TRDDR = TRSDR;
9671  }
9672  if (!given("PDIBL1R"))
9673  {
9674  PDIBL1R = PDIBL1;
9675  }
9676  if (!given("PCLMCV"))
9677  {
9678  PCLMCV = PCLM;
9679  }
9680  if (!given("RSHD"))
9681  {
9682  RSHD = RSHS;
9683  }
9684  if (!given("LSP"))
9685  {
9686  LSP = (0.2*(L+XL));
9687  }
9688  if (!given("DLCIGD"))
9689  {
9690  DLCIGD = DLCIGS;
9691  }
9692  if (!given("AIGD"))
9693  {
9694  AIGD = AIGS;
9695  }
9696  if (!given("AIGD1"))
9697  {
9698  AIGD1 = AIGS1;
9699  }
9700  if (!given("BIGD"))
9701  {
9702  BIGD = BIGS;
9703  }
9704  if (!given("CIGD"))
9705  {
9706  CIGD = CIGS;
9707  }
9708  if (!given("TOXG"))
9709  {
9710  TOXG = TOXP;
9711  }
9712  if (!given("AGIDL"))
9713  {
9714  AGIDL = AGISL;
9715  }
9716  if (!given("BGIDL"))
9717  {
9718  BGIDL = BGISL;
9719  }
9720  if (!given("CGIDL"))
9721  {
9722  CGIDL = CGISL;
9723  }
9724  if (!given("EGIDL"))
9725  {
9726  EGIDL = EGISL;
9727  }
9728  if (!given("PGIDL"))
9729  {
9730  PGIDL = PGISL;
9731  }
9732  if (!given("EOTACC"))
9733  {
9734  EOTACC = EOT;
9735  }
9736  if (!given("CFD"))
9737  {
9738  CFD = CFS;
9739  }
9740  if (!given("CGDO"))
9741  {
9742  CGDO = CGSO;
9743  }
9744  if (!given("CGDL"))
9745  {
9746  CGDL = CGSL;
9747  }
9748  if (!given("CKAPPAD"))
9749  {
9750  CKAPPAD = CKAPPAS;
9751  }
9752  if (!given("CJD"))
9753  {
9754  CJD = CJS;
9755  }
9756  if (!given("CJSWD"))
9757  {
9758  CJSWD = CJSWS;
9759  }
9760  if (!given("CJSWGD"))
9761  {
9762  CJSWGD = CJSWGS;
9763  }
9764  if (!given("PBD"))
9765  {
9766  PBD = PBS;
9767  }
9768  if (!given("PBSWD"))
9769  {
9770  PBSWD = PBSWS;
9771  }
9772  if (!given("PBSWGS"))
9773  {
9774  PBSWGS = PBSWS;
9775  }
9776  if (!given("PBSWGD"))
9777  {
9778  PBSWGD = PBSWGS;
9779  }
9780  if (!given("MJD"))
9781  {
9782  MJD = MJS;
9783  }
9784  if (!given("MJSWD"))
9785  {
9786  MJSWD = MJSWS;
9787  }
9788  if (!given("MJSWGS"))
9789  {
9790  MJSWGS = MJSWS;
9791  }
9792  if (!given("MJSWGD"))
9793  {
9794  MJSWGD = MJSWGS;
9795  }
9796  if (!given("SJD"))
9797  {
9798  SJD = SJS;
9799  }
9800  if (!given("SJSWD"))
9801  {
9802  SJSWD = SJSWS;
9803  }
9804  if (!given("SJSWGD"))
9805  {
9806  SJSWGD = SJSWGS;
9807  }
9808  if (!given("MJD2"))
9809  {
9810  MJD2 = MJS2;
9811  }
9812  if (!given("MJSWD2"))
9813  {
9814  MJSWD2 = MJSWS2;
9815  }
9816  if (!given("MJSWGS2"))
9817  {
9818  MJSWGS2 = MJSWS2;
9819  }
9820  if (!given("MJSWGD2"))
9821  {
9822  MJSWGD2 = MJSWGS2;
9823  }
9824  if (!given("JSD"))
9825  {
9826  JSD = JSS;
9827  }
9828  if (!given("JSWD"))
9829  {
9830  JSWD = JSWS;
9831  }
9832  if (!given("JSWGD"))
9833  {
9834  JSWGD = JSWGS;
9835  }
9836  if (!given("NJD"))
9837  {
9838  NJD = NJS;
9839  }
9840  if (!given("IJTHDFWD"))
9841  {
9842  IJTHDFWD = IJTHSFWD;
9843  }
9844  if (!given("IJTHDREV"))
9845  {
9846  IJTHDREV = IJTHSREV;
9847  }
9848  if (!given("BVD"))
9849  {
9850  BVD = BVS;
9851  }
9852  if (!given("XJBVD"))
9853  {
9854  XJBVD = XJBVS;
9855  }
9856  if (!given("JTSD"))
9857  {
9858  JTSD = JTSS;
9859  }
9860  if (!given("JTSSWD"))
9861  {
9862  JTSSWD = JTSSWS;
9863  }
9864  if (!given("JTSSWGD"))
9865  {
9866  JTSSWGD = JTSSWGS;
9867  }
9868  if (!given("NJTSD"))
9869  {
9870  NJTSD = NJTS;
9871  }
9872  if (!given("NJTSSWD"))
9873  {
9874  NJTSSWD = NJTSSW;
9875  }
9876  if (!given("NJTSSWGD"))
9877  {
9878  NJTSSWGD = NJTSSWG;
9879  }
9880  if (!given("VTSD"))
9881  {
9882  VTSD = VTSS;
9883  }
9884  if (!given("VTSSWD"))
9885  {
9886  VTSSWD = VTSSWS;
9887  }
9888  if (!given("VTSSWGD"))
9889  {
9890  VTSSWGD = VTSSWGS;
9891  }
9892  if (!given("XTID"))
9893  {
9894  XTID = XTIS;
9895  }
9896  if (!given("XTSD"))
9897  {
9898  XTSD = XTSS;
9899  }
9900  if (!given("XTSSWD"))
9901  {
9902  XTSSWD = XTSSWS;
9903  }
9904  if (!given("XTSSWGD"))
9905  {
9906  XTSSWGD = XTSSWGS;
9907  }
9908  if (!given("TNJTSD"))
9909  {
9910  TNJTSD = TNJTS;
9911  }
9912  if (!given("TNJTSSWD"))
9913  {
9914  TNJTSSWD = TNJTSSW;
9915  }
9916  if (!given("TNJTSSWGD"))
9917  {
9918  TNJTSSWGD = TNJTSSWG;
9919  }
9920  if (!given("LCDSCDR"))
9921  {
9922  LCDSCDR = LCDSCD;
9923  }
9924  if (!given("NCDSCDR"))
9925  {
9926  NCDSCDR = NCDSCD;
9927  }
9928  if (!given("PCDSCDR"))
9929  {
9930  PCDSCDR = PCDSCD;
9931  }
9932  if (!given("LETA0R"))
9933  {
9934  LETA0R = LETA0;
9935  }
9936  if (!given("NETA0R"))
9937  {
9938  NETA0R = NETA0;
9939  }
9940  if (!given("PETA0R"))
9941  {
9942  PETA0R = PETA0;
9943  }
9944  if (!given("LVSAT1"))
9945  {
9946  LVSAT1 = LVSAT;
9947  }
9948  if (!given("NVSAT1"))
9949  {
9950  NVSAT1 = NVSAT;
9951  }
9952  if (!given("PVSAT1"))
9953  {
9954  PVSAT1 = PVSAT;
9955  }
9956  if (!given("LVSAT1R"))
9957  {
9958  LVSAT1R = LVSAT1;
9959  }
9960  if (!given("NVSAT1R"))
9961  {
9962  NVSAT1R = NVSAT1;
9963  }
9964  if (!given("PVSAT1R"))
9965  {
9966  PVSAT1R = PVSAT1;
9967  }
9968  if (!given("LPTWGR"))
9969  {
9970  LPTWGR = LPTWG;
9971  }
9972  if (!given("NPTWGR"))
9973  {
9974  NPTWGR = NPTWG;
9975  }
9976  if (!given("PPTWGR"))
9977  {
9978  PPTWGR = PPTWG;
9979  }
9980  if (!given("LPDIBL1R"))
9981  {
9982  LPDIBL1R = LPDIBL1;
9983  }
9984  if (!given("NPDIBL1R"))
9985  {
9986  NPDIBL1R = NPDIBL1;
9987  }
9988  if (!given("PPDIBL1R"))
9989  {
9990  PPDIBL1R = PPDIBL1;
9991  }
9992  if (!given("LAIGD"))
9993  {
9994  LAIGD = LAIGS;
9995  }
9996  if (!given("NAIGD"))
9997  {
9998  NAIGD = NAIGS;
9999  }
10000  if (!given("PAIGD"))
10001  {
10002  PAIGD = PAIGS;
10003  }
10004  if (!given("LAIGD1"))
10005  {
10006  LAIGD1 = LAIGS1;
10007  }
10008  if (!given("NAIGD1"))
10009  {
10010  NAIGD1 = NAIGS1;
10011  }
10012  if (!given("PAIGD1"))
10013  {
10014  PAIGD1 = PAIGS1;
10015  }
10016  if (!given("LBIGD"))
10017  {
10018  LBIGD = LBIGS;
10019  }
10020  if (!given("NBIGD"))
10021  {
10022  NBIGD = NBIGS;
10023  }
10024  if (!given("PBIGD"))
10025  {
10026  PBIGD = PBIGS;
10027  }
10028  if (!given("LCIGD"))
10029  {
10030  LCIGD = LCIGS;
10031  }
10032  if (!given("NCIGD"))
10033  {
10034  NCIGD = NCIGS;
10035  }
10036  if (!given("PCIGD"))
10037  {
10038  PCIGD = PCIGS;
10039  }
10040  if (!given("LAGIDL"))
10041  {
10042  LAGIDL = LAGISL;
10043  }
10044  if (!given("NAGIDL"))
10045  {
10046  NAGIDL = NAGISL;
10047  }
10048  if (!given("PAGIDL"))
10049  {
10050  PAGIDL = PAGISL;
10051  }
10052  if (!given("LBGIDL"))
10053  {
10054  LBGIDL = LBGISL;
10055  }
10056  if (!given("NBGIDL"))
10057  {
10058  NBGIDL = NBGISL;
10059  }
10060  if (!given("PBGIDL"))
10061  {
10062  PBGIDL = PBGISL;
10063  }
10064  if (!given("LCGIDL"))
10065  {
10066  LCGIDL = LCGISL;
10067  }
10068  if (!given("NCGIDL"))
10069  {
10070  NCGIDL = NCGISL;
10071  }
10072  if (!given("PCGIDL"))
10073  {
10074  PCGIDL = PCGISL;
10075  }
10076  if (!given("LEGIDL"))
10077  {
10078  LEGIDL = LEGISL;
10079  }
10080  if (!given("NEGIDL"))
10081  {
10082  NEGIDL = NEGISL;
10083  }
10084  if (!given("PEGIDL"))
10085  {
10086  PEGIDL = PEGISL;
10087  }
10088  if (!given("LPGIDL"))
10089  {
10090  LPGIDL = LPGISL;
10091  }
10092  if (!given("NPGIDL"))
10093  {
10094  NPGIDL = NPGISL;
10095  }
10096  if (!given("PPGIDL"))
10097  {
10098  PPGIDL = PPGISL;
10099  }
10100  if (!given("LCFD"))
10101  {
10102  LCFD = LCFS;
10103  }
10104  if (!given("NCFD"))
10105  {
10106  NCFD = NCFS;
10107  }
10108  if (!given("PCFD"))
10109  {
10110  PCFD = PCFS;
10111  }
10112  if (!given("LCOVD"))
10113  {
10114  LCOVD = LCOVS;
10115  }
10116  if (!given("NCOVD"))
10117  {
10118  NCOVD = NCOVS;
10119  }
10120  if (!given("PCOVD"))
10121  {
10122  PCOVD = PCOVS;
10123  }
10124  if (!given("LCGDL"))
10125  {
10126  LCGDL = LCGSL;
10127  }
10128  if (!given("NCGDL"))
10129  {
10130  NCGDL = NCGSL;
10131  }
10132  if (!given("PCGDL"))
10133  {
10134  PCGDL = PCGSL;
10135  }
10136  if (!given("LCKAPPAD"))
10137  {
10138  LCKAPPAD = LCKAPPAS;
10139  }
10140  if (!given("NCKAPPAD"))
10141  {
10142  NCKAPPAD = NCKAPPAS;
10143  }
10144  if (!given("PCKAPPAD"))
10145  {
10146  PCKAPPAD = PCKAPPAS;
10147  }
10148 
10149 
10150  if (!given("XYCEADMSMODTEMP"))
10151  admsModTemp=getDeviceOptions().temp.getImmutableValue<double>();
10152 
10153  // Fix the TNOM parameter that has "helpfully" been converted to Kelvin
10154  // by the DeviceEntity class
10155 
10156  if (given("TNOM"))
10157  TNOM -= CONSTCtoK;
10158 
10159  // Calculate any parameters specified as expressions:
10160 
10162 
10163  // calculate dependent (ie computed) params and check for errors:
10164  processParams();
10165 }
10166 
10167 //-----------------------------------------------------------------------------
10168 // Function : Model::~Model
10169 // Purpose : destructor
10170 // Special Notes :
10171 // Scope : public
10172 // Creator :
10173 // Creation Date :
10174 //-----------------------------------------------------------------------------
10176 {
10177  std::vector<Instance*>::iterator iterI;
10178  std::vector<Instance*>::iterator firstI = instanceContainer.begin ();
10179  std::vector<Instance*>::iterator lastI = instanceContainer.end ();
10180 
10181  // loop over instances:
10182  for (iterI = firstI; iterI != lastI; ++iterI)
10183  {
10184  delete (*iterI);
10185  }
10186 }
10187 
10188 //-----------------------------------------------------------------------------
10189 // Function : Model::printOutInstances
10190 // Purpose : debugging tool.
10191 // Special Notes :
10192 // Scope : public
10193 // Creator :
10194 // Creation Date :
10195 //-----------------------------------------------------------------------------
10196 std::ostream &Model::printOutInstances(std::ostream &os) const
10197 {
10198  std::vector<Instance*>::const_iterator iter;
10199  std::vector<Instance*>::const_iterator first = instanceContainer.begin();
10200  std::vector<Instance*>::const_iterator last = instanceContainer.end();
10201 
10202  int i;
10203  os << std::endl;
10204  os << " name model name Parameters" << std::endl;
10205  for (i=0, iter=first; iter!=last; ++iter, ++i)
10206  {
10207  os << " " << i << ": " << (*iter)->getName() << " ";
10208  os << getName();
10209 
10210  os << std::endl;
10211  os << "L = " << (*iter)->L << std::endl;
10212  os << "D = " << (*iter)->D << std::endl;
10213  os << "TFIN = " << (*iter)->TFIN << std::endl;
10214  os << "FPITCH = " << (*iter)->FPITCH << std::endl;
10215  os << "NFIN = " << (*iter)->NFIN << std::endl;
10216  os << "NGCON = " << (*iter)->NGCON << std::endl;
10217  os << "ASEO = " << (*iter)->ASEO << std::endl;
10218  os << "ADEO = " << (*iter)->ADEO << std::endl;
10219  os << "PSEO = " << (*iter)->PSEO << std::endl;
10220  os << "PDEO = " << (*iter)->PDEO << std::endl;
10221  os << "ASEJ = " << (*iter)->ASEJ << std::endl;
10222  os << "ADEJ = " << (*iter)->ADEJ << std::endl;
10223  os << "PSEJ = " << (*iter)->PSEJ << std::endl;
10224  os << "PDEJ = " << (*iter)->PDEJ << std::endl;
10225  os << "COVS = " << (*iter)->COVS << std::endl;
10226  os << "COVD = " << (*iter)->COVD << std::endl;
10227  os << "CGSP = " << (*iter)->CGSP << std::endl;
10228  os << "CGDP = " << (*iter)->CGDP << std::endl;
10229  os << "CDSP = " << (*iter)->CDSP << std::endl;
10230  os << "NRS = " << (*iter)->NRS << std::endl;
10231  os << "NRD = " << (*iter)->NRD << std::endl;
10232  os << "LRSD = " << (*iter)->LRSD << std::endl;
10233  os << std::endl;
10234  }
10235 
10236  os << std::endl;
10237 
10238  return os;
10239 }
10240 
10241 //-----------------------------------------------------------------------------
10242 // Function : Model::forEachInstance
10243 // Purpose :
10244 // Special Notes :
10245 // Scope : public
10246 // Creator : David Baur
10247 // Creation Date : 2/4/2014
10248 //-----------------------------------------------------------------------------
10249 /// Apply a device instance "op" to all instances associated with this
10250 /// model
10251 ///
10252 /// @param[in] op Operator to apply to all instances.
10253 ///
10254 ///
10255 void Model::forEachInstance(DeviceInstanceOp &op) const /* override */
10256 {
10257  for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
10258  op(*it);
10259 }
10260 
10261 Device *Traits::factory(const Configuration &configuration, const FactoryBlock &factory_block)
10262 {
10263  return new DeviceMaster<Traits>(configuration, factory_block, factory_block.solverState_, factory_block.deviceOptions_);
10264 }
10265 
10267 {
10269  .registerDevice("m", 107)
10270  .registerModelType("nmos", 107)
10271  .registerModelType("pmos", 107);
10272 }
10273 
10274 
10275 
10276 } // namespace ADMSbsimcmg
10277 } // namespace Device
10278 } // namespace Xyce