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 : Tue, 11 Mar 2014 10:54:42
38 //
39 // Revision Information:
40 // ---------------------
41 //
42 // Revision Number: $Revision: 1.24.2.5 $
43 //
44 // Revision Date : $Date: 2014/03/11 17:21:52 $
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 
2011  if (intNameMap.empty())
2012  {
2013  std::string tmpstr;
2014 
2015  tmpstr = getName() + "_di";
2016  spiceInternalName(tmpstr);
2017  intNameMap[li_di] = tmpstr;
2018 
2019  tmpstr = getName() + "_si";
2020  spiceInternalName(tmpstr);
2021  intNameMap[li_si] = tmpstr;
2022 
2023  }
2024  return intNameMap;
2025 }
2026 
2027 //-----------------------------------------------------------------------------
2028 // Function : Instance::registerStateLIDs
2029 // Purpose :
2030 // Special Notes :
2031 // Scope : public
2032 // Creator : admsXml
2033 // Creation Date :
2034 //-----------------------------------------------------------------------------
2035 void Instance::registerStateLIDs( const std::vector<int> & staLIDVecRef)
2036 {
2037  AssertLIDs(staLIDVecRef.size() == numStateVars);
2038 }
2039 
2040 //-----------------------------------------------------------------------------
2041 // Function : Instance::jacobianStamp
2042 // Purpose :
2043 // Special Notes : In initial version, we won't support mapping away nodes
2044 // Scope : public
2045 // Creator : admsXml
2046 // Creation Date :
2047 //-----------------------------------------------------------------------------
2048 const std::vector< std::vector<int> > & Instance::jacobianStamp() const
2049 {
2050  return jacStamp;
2051 }
2052 
2053 //-----------------------------------------------------------------------------
2054 // Function : Instance::registerJacLIDs
2055 // Purpose : Create Offset variables used for referencing jacobian
2056 // elements
2057 // Special Notes :
2058 // Scope : public
2059 // Creator : admsXml
2060 // Creation Date :
2061 //-----------------------------------------------------------------------------
2062 void Instance::registerJacLIDs( const std::vector< std::vector<int> > & jacLIDVec)
2063 {
2065  std::vector<int> & map=jacMap;
2066  std::vector< std::vector<int> > & map2=jacMap2;
2067 
2068 
2069  // do nothing, we won't use the jac lids anymore, we'll use pointers
2070 
2071 }
2072 
2073 //-----------------------------------------------------------------------------
2074 // Function : Instance::setupPointers
2075 // Purpose : Create pointer variables used for referencing jacobian
2076 // elements
2077 // Special Notes :
2078 // Scope : public
2079 // Creator : admsXml
2080 // Creation Date :
2081 //-----------------------------------------------------------------------------
2083 {
2084 
2085  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
2086  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
2087  f_d_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_d);
2088  q_d_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_d);
2089  f_d_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_s);
2090  q_d_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_s);
2091  f_d_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_di);
2092  q_d_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_di);
2093  f_d_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_si);
2094  q_d_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_si);
2095  f_d_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_g);
2096  q_d_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_g);
2097  f_d_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_d,li_e);
2098  q_d_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_d,li_e);
2099  f_g_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_g);
2100  q_g_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_g);
2101  f_g_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_di);
2102  q_g_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_di);
2103  f_g_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_si);
2104  q_g_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_si);
2105  f_g_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_e);
2106  q_g_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_e);
2107  f_g_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_s);
2108  q_g_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_s);
2109  f_g_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_g,li_d);
2110  q_g_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_g,li_d);
2111  f_s_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_d);
2112  q_s_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_d);
2113  f_s_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_s);
2114  q_s_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_s);
2115  f_s_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_di);
2116  q_s_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_di);
2117  f_s_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_si);
2118  q_s_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_si);
2119  f_s_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_g);
2120  q_s_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_g);
2121  f_s_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_s,li_e);
2122  q_s_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_s,li_e);
2123  f_e_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_g);
2124  q_e_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_g);
2125  f_e_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_e);
2126  q_e_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_e);
2127  f_e_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_di);
2128  q_e_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_di);
2129  f_e_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_si);
2130  q_e_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_si);
2131  f_e_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_s);
2132  q_e_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_s);
2133  f_e_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_d);
2134  q_e_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_d);
2135  f_di_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_g);
2136  q_di_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_g);
2137  f_di_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_di);
2138  q_di_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_di);
2139  f_di_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_si);
2140  q_di_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_si);
2141  f_di_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_e);
2142  q_di_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_e);
2143  f_di_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_s);
2144  q_di_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_s);
2145  f_di_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_di,li_d);
2146  q_di_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_di,li_d);
2147  f_si_Equ_g_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_g);
2148  q_si_Equ_g_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_g);
2149  f_si_Equ_di_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_di);
2150  q_si_Equ_di_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_di);
2151  f_si_Equ_si_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_si);
2152  q_si_Equ_si_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_si);
2153  f_si_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_e);
2154  q_si_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_e);
2155  f_si_Equ_s_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_s);
2156  q_si_Equ_s_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_s);
2157  f_si_Equ_d_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_si,li_d);
2158  q_si_Equ_d_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_si,li_d);
2159 
2160 
2161 }
2162 
2163 // RHS load functions
2164 
2165 //-----------------------------------------------------------------------------
2166 // Function : Instance::loadDAEFVector
2167 // Purpose : load F vector (static contributions) for one instance for
2168 // NEW DAE formulation
2169 // Special Notes :
2170 // Scope : public
2171 // Creator : admsXml
2172 // Creation Date :
2173 //-----------------------------------------------------------------------------
2175 {
2176 
2177  bool bsuccess=true;
2178 
2185 
2186  return bsuccess;
2187 }
2188 
2189 //-----------------------------------------------------------------------------
2190 // Function : Instance::loadDAEQVector
2191 // Purpose : load Q vector (dynamic contributions) for one instance for
2192 // NEW DAE formulation
2193 // Special Notes :
2194 // Scope : public
2195 // Creator : admsXml
2196 // Creation Date :
2197 //-----------------------------------------------------------------------------
2199 {
2206 
2207  return true;
2208 }
2209 
2210 
2211 //-----------------------------------------------------------------------------
2212 // Function : Instance::updatePrimaryState
2213 // Purpose :
2214 // Special Notes : In this initial implementation, does little more than
2215 // call updateIntermediateVars()
2216 // Scope : public
2217 // Creator : admsXml
2218 // Creation Date :
2219 //-----------------------------------------------------------------------------
2221 {
2222  bool bsuccess = true;
2223 
2224  bsuccess = updateIntermediateVars();
2225 
2226  // if old DAE were implemented, we'd save dynamic contributions as state
2227  // here.
2228 
2229 
2230  return bsuccess;
2231 }
2232 
2233 //-----------------------------------------------------------------------------
2234 // Function : Instance::updateSecondaryState
2235 // Purpose :
2236 // Special Notes : In this initial implementation, does nothing
2237 // Scope : public
2238 // Creator : admsXml
2239 // Creation Date :
2240 //-----------------------------------------------------------------------------
2242 {
2243  bool bsuccess = true;
2244 
2245  // were old DAE implemented, we'd pull dynamic contribution derivatives
2246  // out of state.
2247 
2248  return bsuccess;
2249 }
2250 
2251 //-----------------------------------------------------------------------------
2252 // Function : Instance::updateIntermediateVars
2253 // Purpose : update intermediate variables for one bsimcmg instance
2254 // Special Notes :
2255 // Scope : public
2256 // Creator : admsXml
2257 // Creation Date :
2258 //-----------------------------------------------------------------------------
2260 {
2261 
2262  bool bsuccess=true;
2263  N_LAS_Vector * solVectorPtr = extData.nextSolVectorPtr;
2264 
2265 #ifdef Xyce_DEBUG_DEVICE
2266  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
2267  {
2268  Xyce::dout() << std::endl << subsection_divider << std::endl;
2269  Xyce::dout() << " In ADMSbsimcmg::Instance::updateIntermediateVars\n\n";
2270  Xyce::dout() << " name = " << getName() << std::endl;
2271  }
2272 #endif
2273 
2274  // Local variables
2275  AdmsFadType sid;
2276  AdmsFadType Swi;
2277  double T10;
2278  AdmsFadType Ssi;
2279  AdmsFadType Nstar;
2280  AdmsFadType Nl;
2281  AdmsFadType N0;
2282  AdmsFadType DelClm;
2283  double Leffnoisq;
2284  double Leffnoi;
2285  AdmsFadType Esatnoi;
2286  AdmsFadType IdovVds;
2287  AdmsFadType vge_overlap;
2288  AdmsFadType Qedj3;
2289  AdmsFadType Qedj2;
2290  AdmsFadType Qedj1;
2291  AdmsFadType Qesj3;
2292  AdmsFadType Qesj2;
2293  double vec;
2294  double pb2;
2295  AdmsFadType Qec;
2296  AdmsFadType arg;
2297  AdmsFadType sarg;
2298  AdmsFadType Qesj1;
2299  AdmsFadType T4a;
2300  AdmsFadType T1_exp;
2301  AdmsFadType Vdseffx;
2302  AdmsFadType igc0;
2303  AdmsFadType Voxacc;
2304  AdmsFadType Vaux_Igbacc;
2305  double vfbzb;
2306  AdmsFadType Vaux_Igbinv;
2307  double ALPHAII;
2308  AdmsFadType VgsStep;
2309  AdmsFadType Vdsatii;
2310  AdmsFadType Vdiff;
2311  AdmsFadType Ratio;
2312  AdmsFadType cgsp;
2313  AdmsFadType cgdp;
2314  AdmsFadType vgd_overlap;
2315  AdmsFadType vgs_overlap;
2316  AdmsFadType qgd_ov;
2317  AdmsFadType qgs_ov;
2318  AdmsFadType qinv;
2319  AdmsFadType inv_MclmCV;
2320  AdmsFadType dqi_idscv;
2321  AdmsFadType beta_cv;
2322  AdmsFadType idscv;
2323  AdmsFadType Tcom;
2324  AdmsFadType vgd_eff;
2325  AdmsFadType vgs_eff;
2326  AdmsFadType Dr;
2327  AdmsFadType Rdsi;
2328  AdmsFadType ids0_ov_dqi;
2329  AdmsFadType ids0;
2330  AdmsFadType MclmCV;
2331  AdmsFadType DvsatCV;
2332  AdmsFadType EsatCVL;
2333  AdmsFadType EsatCV;
2334  AdmsFadType Mob;
2335  AdmsFadType Mnud;
2336  AdmsFadType Nsat;
2337  AdmsFadType Dvsat;
2338  AdmsFadType Esat1L;
2339  AdmsFadType Esat1;
2340  AdmsFadType Mclm;
2341  AdmsFadType Moc;
2342  AdmsFadType VaDIBL;
2343  AdmsFadType Vgst2Vtm;
2344  AdmsFadType diffVds;
2345  AdmsFadType PVAGfactor;
2346  AdmsFadType DIBLfactor;
2347  AdmsFadType Dmob_cv;
2348  AdmsFadType Eeffm_cv;
2349  AdmsFadType ueff;
2350  AdmsFadType Dmob;
2351  AdmsFadType Eeffm;
2352  AdmsFadType beta;
2353  AdmsFadType coxeff;
2354  AdmsFadType qia2;
2355  AdmsFadType dqi;
2356  AdmsFadType qia;
2357  double qba;
2358  AdmsFadType phid;
2359  AdmsFadType vpolyd;
2360  AdmsFadType Vdseff;
2361  AdmsFadType Vdsat;
2362  AdmsFadType Tc;
2363  AdmsFadType Ta;
2364  double WVCox;
2365  AdmsFadType T6;
2366  AdmsFadType EsatL;
2367  AdmsFadType Esat;
2368  AdmsFadType Rdss;
2369  AdmsFadType Dmobs;
2370  double qb0;
2371  AdmsFadType Eeffs;
2372  AdmsFadType phis;
2373  AdmsFadType TA;
2374  AdmsFadType T9;
2375  AdmsFadType T8;
2376  AdmsFadType T7;
2377  AdmsFadType T5;
2378  AdmsFadType T4;
2379  AdmsFadType secg0;
2380  AdmsFadType cosg0;
2381  AdmsFadType guessB;
2382  AdmsFadType guessA;
2383  AdmsFadType vpolys;
2384  AdmsFadType vch;
2385  AdmsFadType tang0a;
2386  AdmsFadType g0a;
2387  AdmsFadType e3;
2388  AdmsFadType e2;
2389  AdmsFadType e1;
2390  AdmsFadType e0;
2391  AdmsFadType inv_g0;
2392  AdmsFadType lncosg0;
2393  AdmsFadType secg0sq;
2394  AdmsFadType lng0;
2395  AdmsFadType tang0;
2396  AdmsFadType g0;
2397  AdmsFadType z2;
2398  AdmsFadType z1;
2399  AdmsFadType expff;
2400  AdmsFadType F0;
2401  AdmsFadType inv_g0sq;
2402  AdmsFadType vgsfbeff;
2403  AdmsFadType cdop;
2404  AdmsFadType vtdop_acc;
2405  AdmsFadType vtdop;
2406  AdmsFadType dvth_all;
2407  double dvth_rsce;
2408  AdmsFadType dvth_dibl;
2409  double dvth_vtroll;
2410  AdmsFadType nVtm;
2411  AdmsFadType cdsc;
2412  double phist;
2413  AdmsFadType inv_MEXP;
2414  AdmsFadType RDDR_a;
2415  AdmsFadType RSDR_a;
2416  AdmsFadType VSAT1_a;
2417  AdmsFadType PTWG_a;
2418  AdmsFadType MEXP_a;
2419  AdmsFadType PDIBL1_a;
2420  AdmsFadType ETA0_a;
2421  AdmsFadType CDSCD_a;
2422  AdmsFadType wr;
2423  AdmsFadType wf;
2424  AdmsFadType veseff;
2425  double vesmax;
2426  AdmsFadType vesx;
2427  AdmsFadType vdsx;
2428  AdmsFadType Qedj;
2429  AdmsFadType Qesj;
2430  AdmsFadType etaiv;
2431  AdmsFadType vgsfb;
2432  AdmsFadType ves;
2433  AdmsFadType vgd;
2434  AdmsFadType vds;
2435  AdmsFadType vgs;
2436  AdmsFadType vge;
2437  AdmsFadType ved_jct;
2438  AdmsFadType ves_jct;
2439  AdmsFadType vgd_noswap;
2440  AdmsFadType vds_noswap;
2441  AdmsFadType vgs_noswap;
2442  double TRatio;
2443  double delTemp;
2444  double Vtm;
2445  double Vtm0;
2446  double Eg;
2447  double Eg0;
2448  double ni;
2449  double Nc;
2450  double ThetaSS;
2451  double kT;
2452  double E0;
2453  double E0prime;
2454  double E1;
2455  double E1prime;
2456  double gam0;
2457  double gam1;
2458  double dvch_qm;
2459  double ETA0_t;
2460  double ETA0R_t;
2461  double U0_t;
2462  double u0;
2463  double ETAMOB_t;
2464  double UA_t;
2465  double UC_t;
2466  double UD_t;
2467  double UCS_t;
2468  double rdstemp;
2469  double RSDR_t;
2470  double RSDRR_t;
2471  double RDDR_t;
2472  double RDDRR_t;
2473  double VSAT_t;
2474  double VSAT1_t;
2475  double VSAT1R_t;
2476  double VSATCV_t;
2477  double MEXP_t;
2478  double MEXPR_t;
2479  double PTWG_t;
2480  double PTWGR_t;
2481  double dvth_temp;
2482  double BETA0_t;
2483  double SII0_t;
2484  double K0_t;
2485  double K0SI_t;
2486  double K1SI_t;
2487  double K1_t;
2488  double K1SAT_t;
2489  double A1_t;
2490  double A2_t;
2491  double AIGBINV_t;
2492  double AIGBACC_t;
2493  double AIGC_t;
2494  double AIGS_t;
2495  double AIGD_t;
2496  double BGIDL_t;
2497  double BGISL_t;
2498  double ALPHA0_t;
2499  double ALPHA1_t;
2500  double ALPHAII0_t;
2501  double ALPHAII1_t;
2502  double igtemp;
2503  double igsd_mult;
2504  double beta0;
2505  double vfbsd;
2506  double phib;
2507  double vbi;
2508  double deltaPhi;
2509  double vpoly0;
2510  double cpoly;
2511  double kpoly;
2512  double g0max;
2513  double g0min;
2514  double r2;
2515  double eta_mu;
2516  double eta_mu_cv;
2517  AdmsFadType Tb;
2518  double igentemp;
2519  double DevTemp;
2520  int initialized;
2521  double R;
2522  AdmsFadType vgsfbeff_acc;
2523  AdmsFadType vt0;
2524  AdmsFadType vt0_acc;
2525  AdmsFadType F1;
2526  double F1_acc;
2527  AdmsFadType cdop_acc;
2528  AdmsFadType qid;
2529  AdmsFadType qis;
2530  AdmsFadType tang0d;
2531  AdmsFadType tang0s;
2532  AdmsFadType T11;
2533  AdmsFadType T12;
2534  AdmsFadType T13;
2535  AdmsFadType T14;
2536  AdmsFadType ids;
2537  double sigvds;
2538  AdmsFadType Iii;
2539  AdmsFadType qd;
2540  AdmsFadType qg;
2541  AdmsFadType qs;
2542  double qb;
2543  double Qbul;
2544  AdmsFadType aab;
2545  double Weff0;
2546  double WeffCV0;
2547  AdmsFadType Weff;
2548  AdmsFadType WeffCV;
2549  double CJS_t;
2550  double CJSWS_t;
2551  double CJSWGS_t;
2552  double CJD_t;
2553  double CJSWD_t;
2554  double CJSWGD_t;
2555  double PBS_t;
2556  double PBSWS_t;
2557  double PBSWGS_t;
2558  double PBD_t;
2559  double PBSWD_t;
2560  double PBSWGD_t;
2561  double JSS_t;
2562  double JSWS_t;
2563  double JSWGS_t;
2564  double JSD_t;
2565  double JSWD_t;
2566  double JSWGD_t;
2567  double JTSS_t;
2568  double JTSSWS_t;
2569  double JTSSWGS_t;
2570  double JTSD_t;
2571  double JTSSWD_t;
2572  double JTSSWGD_t;
2573  double NJTS_t;
2574  double NJTSSW_t;
2575  double NJTSSWG_t;
2576  double NJTSD_t;
2577  double NJTSSWD_t;
2578  double NJTSSWGD_t;
2579  AdmsFadType Ies;
2580  AdmsFadType Ied;
2581  double Czbs;
2582  double Czbssw;
2583  double Czbsswg;
2584  double Czbd;
2585  double Czbdsw;
2586  double Czbdswg;
2587  AdmsFadType Qes;
2588  AdmsFadType Qed;
2589  AdmsFadType Qeg;
2590  double Isbs;
2591  double Isbd;
2592  double Nvtms;
2593  double Nvtmd;
2594  double SslpRev;
2595  double IVjsmRev;
2596  double VjsmRev;
2597  double SslpFwd;
2598  double IVjsmFwd;
2599  double VjsmFwd;
2600  double DslpRev;
2601  double IVjdmRev;
2602  double VjdmRev;
2603  double DslpFwd;
2604  double IVjdmFwd;
2605  double VjdmFwd;
2606  double XExpBVS;
2607  double XExpBVD;
2608  AdmsFadType idsgen;
2609  double phibulk;
2610  double phipert;
2611  AdmsFadType g0s;
2612  AdmsFadType g0d;
2613  double r1;
2614  AdmsFadType q0;
2615  double F2;
2616  double Inv_r1pi;
2617  AdmsFadType Tcen;
2618  double MTcen;
2619  AdmsFadType Rdrain;
2620  AdmsFadType Rsource;
2621  double Cfr_geo;
2622  AdmsFadType igbinv;
2623  AdmsFadType igbs;
2624  AdmsFadType igbd;
2625  AdmsFadType igbacc;
2626  AdmsFadType igcs;
2627  AdmsFadType igcd;
2628  AdmsFadType igidl;
2629  AdmsFadType igisl;
2630  AdmsFadType igs;
2631  AdmsFadType igd;
2632  AdmsFadType cox_acc;
2633  double r1_acc;
2634  double Inv_r1pi_acc;
2635  double CGSO_i;
2636  double CGDO_i;
2637  double q0_acc;
2638  AdmsFadType qb_acc;
2639  AdmsFadType qg_acc;
2640  AdmsFadType qi_acc;
2641  AdmsFadType qgs_fr;
2642  AdmsFadType qgd_fr;
2643  AdmsFadType qds_fr;
2644  AdmsFadType qgs_parasitic;
2645  AdmsFadType qgd_parasitic;
2646  AdmsFadType FNPowerAt1Hz;
2647  AdmsFadType Gtnoi;
2648  AdmsFadType gspr;
2649  AdmsFadType gdpr;
2650  int devsign;
2651  double epssub;
2652  double epssp;
2653  double cox;
2654  double csi;
2655  double cbox;
2656  double epsratio;
2657  double scl;
2658  double heff;
2659  double mx;
2660  double mxprime;
2661  double md;
2662  double mdprime;
2663  double gprime;
2664  double gfactor;
2665  double Lg;
2666  double deltaL;
2667  double deltaLCV;
2668  double Leff;
2669  double LeffCV;
2670  double LeffCV_acc;
2671  double NFINtotal;
2672  double Inv_L;
2673  double Inv_NFIN;
2674  double Inv_LNFIN;
2675  double NBODY_i;
2676  double PHIG_i;
2677  double NGATE_i;
2678  double CIT_i;
2679  double CDSC_i;
2680  double CDSCD_i;
2681  double DVT0_i;
2682  double DVT1_i;
2683  double DVT1SS_i;
2684  double PHIN_i;
2685  double ETA0_i;
2686  double DSUB_i;
2687  double K1RSCE_i;
2688  double LPE0_i;
2689  double DVTSHIFT_i;
2690  double K0_i;
2691  double K01_i;
2692  double K0SI_i;
2693  double K0SI1_i;
2694  double K1SI_i;
2695  double K1SI1_i;
2696  double PHIBE_i;
2697  double K1_i;
2698  double K11_i;
2699  double K1SAT_i;
2700  double K1SAT1_i;
2701  double QMFACTOR_i;
2702  double QMTCENIV_i;
2703  double QMTCENCV_i;
2704  double QMTCENCVA_i;
2705  double VSAT_i;
2706  double VSAT1_i;
2707  double VSATCV_i;
2708  double DELTAVSAT_i;
2709  double PSAT_i;
2710  double DELTAVSATCV_i;
2711  double PSATCV_i;
2712  double KSATIV_i;
2713  double MEXP_i;
2714  double PTWG_i;
2715  double U0_i;
2716  double ETAMOB_i;
2717  double UP_i;
2718  double UA_i;
2719  double UC_i;
2720  double EU_i;
2721  double UD_i;
2722  double UCS_i;
2723  double PCLM_i;
2724  double PCLMG_i;
2725  double PCLMCV_i;
2726  double A1_i;
2727  double A11_i;
2728  double A2_i;
2729  double A21_i;
2730  double RDSW_i;
2731  double RSW_i;
2732  double RDW_i;
2733  double PRWGD_i;
2734  double PRWGS_i;
2735  double WR_i;
2736  double PDIBL1_i;
2737  double PDIBL2_i;
2738  double DROUT_i;
2739  double PVAG_i;
2740  double AIGBINV_i;
2741  double AIGBINV1_i;
2742  double BIGBINV_i;
2743  double CIGBINV_i;
2744  double EIGBINV_i;
2745  double NIGBINV_i;
2746  double AIGBACC_i;
2747  double AIGBACC1_i;
2748  double BIGBACC_i;
2749  double CIGBACC_i;
2750  double NIGBACC_i;
2751  double AIGC_i;
2752  double AIGC1_i;
2753  double BIGC_i;
2754  double CIGC_i;
2755  double PIGCD_i;
2756  double AIGS_i;
2757  double AIGS1_i;
2758  double BIGS_i;
2759  double CIGS_i;
2760  double AIGD_i;
2761  double AIGD1_i;
2762  double BIGD_i;
2763  double CIGD_i;
2764  double NTOX_i;
2765  double POXEDGE_i;
2766  double AGIDL_i;
2767  double BGIDL_i;
2768  double CGIDL_i;
2769  double EGIDL_i;
2770  double PGIDL_i;
2771  double AGISL_i;
2772  double BGISL_i;
2773  double CGISL_i;
2774  double EGISL_i;
2775  double PGISL_i;
2776  double ALPHA0_i;
2777  double ALPHA1_i;
2778  double ALPHAII0_i;
2779  double ALPHAII1_i;
2780  double BETA0_i;
2781  double BETAII0_i;
2782  double BETAII1_i;
2783  double BETAII2_i;
2784  double ESATII_i;
2785  double LII_i;
2786  double SII0_i;
2787  double SII1_i;
2788  double SII2_i;
2789  double SIID_i;
2790  double TII_i;
2791  double CFS_i;
2792  double CFD_i;
2793  AdmsFadType COVS_i;
2794  AdmsFadType COVD_i;
2795  double CGSL_i;
2796  double CGDL_i;
2797  double CGBL_i;
2798  double CKAPPAS_i;
2799  double CKAPPAD_i;
2800  double CKAPPAB_i;
2801  double NTGEN_i;
2802  double AIGEN_i;
2803  double BIGEN_i;
2804  double CDSCDR_i;
2805  double ETA0R_i;
2806  double VSAT1R_i;
2807  double MEXPR_i;
2808  double PTWGR_i;
2809  double PDIBL1R_i;
2810  double UTE_i;
2811  double UTL_i;
2812  double EMOBT_i;
2813  double UA1_i;
2814  double UC1_i;
2815  double UD1_i;
2816  double UCSTE_i;
2817  double PTWGT_i;
2818  double AT_i;
2819  double PRT_i;
2820  double KT1_i;
2821  double TSS_i;
2822  double IIT_i;
2823  double TGIDL_i;
2824  double IGT_i;
2825  double Tcen0;
2826  double RDSWMIN_i;
2827  double RSWMIN_i;
2828  double RDWMIN_i;
2829  double LINTIGEN_i;
2830  double LINTNOI_i;
2831  double NTNOI_i;
2832  double Arsd;
2833  double Prsd;
2834  double mu_max;
2835  double mu_rsd;
2836  double rhorsd;
2837  double thetarsp;
2838  double afin;
2839  AdmsFadType T1;
2840  double Rsp;
2841  double arsd_total;
2842  double prsd_total;
2843  double lt;
2844  double alpha;
2845  AdmsFadType T0;
2846  double eta;
2847  AdmsFadType T2;
2848  AdmsFadType T3;
2849  double RrsdTML;
2850  double Rrsdside;
2851  double Rrsd;
2852  double Rdsgeo;
2853  double RSourceGeo;
2854  double RDrainGeo;
2855  double Hg;
2856  double Trsd;
2857  double Wg;
2858  double Hrsd;
2859  double Cgg_top;
2860  double Cgg_side;
2861  double Acorner;
2862  double Ccorner;
2863  double csbox;
2864  double cdbox;
2865  double cgbox;
2866  double EeffFactor;
2867  double WeffWRFactor;
2868  double litl;
2869  double tmp;
2870  double Theta_SCE;
2871  double Theta_SW;
2872  double Theta_DIBL;
2873  double Theta_RSCE;
2874  double nbody;
2875  double qbs;
2876  double Aechvb;
2877  double Bechvb;
2878  double Toxratio;
2879  double Toxratioedge;
2880  double igsd_mult0;
2881  double Tnom;
2882 
2883 
2884  // set the sizes of the Fad arrays:
2885 
2886  if (probeVars.size() != (14))
2887  {
2888  probeVars.resize(14);
2889  staticContributions.resize(6+0);
2890  dynamicContributions.resize(6+0);
2891  }
2892 
2893  // initialize contributions to zero (automatically sets derivatives to zero)
2894  for (int i=0; i < 6+0 ; ++i)
2895  {
2896  staticContributions[i]=0;
2897  dynamicContributions[i]=0;
2898  }
2899 
2900  // extract solution variables and set as Fad independent variables.
2901  probeVars[admsProbeID_V_s_si] = (*solVectorPtr)[li_s] - (*solVectorPtr)[li_si];
2903 
2904  probeVars[admsProbeID_V_d_di] = (*solVectorPtr)[li_d] - (*solVectorPtr)[li_di];
2906 
2907  probeVars[admsProbeID_V_e_g] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_g];
2909 
2910  probeVars[admsProbeID_V_d_s] = (*solVectorPtr)[li_d] - (*solVectorPtr)[li_s];
2912 
2913  probeVars[admsProbeID_V_g_d] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_d];
2915 
2916  probeVars[admsProbeID_V_g_s] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_s];
2918 
2919  probeVars[admsProbeID_V_di_d] = (*solVectorPtr)[li_di] - (*solVectorPtr)[li_d];
2921 
2922  probeVars[admsProbeID_V_si_s] = (*solVectorPtr)[li_si] - (*solVectorPtr)[li_s];
2924 
2925  probeVars[admsProbeID_V_g_e] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_e];
2927 
2928  probeVars[admsProbeID_V_e_di] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_di];
2930 
2931  probeVars[admsProbeID_V_e_si] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_si];
2933 
2934  probeVars[admsProbeID_V_g_di] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_di];
2936 
2937  probeVars[admsProbeID_V_di_si] = (*solVectorPtr)[li_di] - (*solVectorPtr)[li_si];
2939 
2940  probeVars[admsProbeID_V_g_si] = (*solVectorPtr)[li_g] - (*solVectorPtr)[li_si];
2942 
2943 
2944  // -- code converted from analog/code block
2945  //Begin block CMGBiasIndepCalc
2946  {
2947  initialized = 1;
2948  R = 0;
2949  vgsfbeff_acc = 0;
2950  vt0 = 0;
2951  vt0_acc = 0;
2952  F1 = 0;
2953  F1_acc = 0;
2954  cdop_acc = 0;
2955  qid = 0;
2956  qis = 0;
2957  tang0d = 0;
2958  tang0s = 0;
2959  T11 = 0;
2960  T12 = 0;
2961  T13 = 0;
2962  T14 = 0;
2963  ids = 0;
2964  sigvds = 0;
2965  Iii = 0;
2966  qd = 0;
2967  qg = 0;
2968  qs = 0;
2969  qb = 0;
2970  Qbul = 0;
2971  aab = 0;
2972  Weff0 = 0;
2973  WeffCV0 = 0;
2974  Weff = 0;
2975  WeffCV = 0;
2976  CJS_t = 0;
2977  CJSWS_t = 0;
2978  CJSWGS_t = 0;
2979  CJD_t = 0;
2980  CJSWD_t = 0;
2981  CJSWGD_t = 0;
2982  PBS_t = 0;
2983  PBSWS_t = 0;
2984  PBSWGS_t = 0;
2985  PBD_t = 0;
2986  PBSWD_t = 0;
2987  PBSWGD_t = 0;
2988  JSS_t = 0;
2989  JSWS_t = 0;
2990  JSWGS_t = 0;
2991  JSD_t = 0;
2992  JSWD_t = 0;
2993  JSWGD_t = 0;
2994  JTSS_t = 0;
2995  JTSSWS_t = 0;
2996  JTSSWGS_t = 0;
2997  JTSD_t = 0;
2998  JTSSWD_t = 0;
2999  JTSSWGD_t = 0;
3000  NJTS_t = 0;
3001  NJTSSW_t = 0;
3002  NJTSSWG_t = 0;
3003  NJTSD_t = 0;
3004  NJTSSWD_t = 0;
3005  NJTSSWGD_t = 0;
3006  Ies = 0;
3007  Ied = 0;
3008  Czbs = 0;
3009  Czbssw = 0;
3010  Czbsswg = 0;
3011  Czbd = 0;
3012  Czbdsw = 0;
3013  Czbdswg = 0;
3014  Qes = 0;
3015  Qed = 0;
3016  Qeg = 0;
3017  Isbs = 0;
3018  Isbd = 0;
3019  Nvtms = 0;
3020  Nvtmd = 0;
3021  SslpRev = 0;
3022  IVjsmRev = 0;
3023  VjsmRev = 0;
3024  SslpFwd = 0;
3025  IVjsmFwd = 0;
3026  VjsmFwd = 0;
3027  DslpRev = 0;
3028  IVjdmRev = 0;
3029  VjdmRev = 0;
3030  DslpFwd = 0;
3031  IVjdmFwd = 0;
3032  VjdmFwd = 0;
3033  XExpBVS = 0;
3034  XExpBVD = 0;
3035  idsgen = 0;
3036  phibulk = 0;
3037  phipert = 0;
3038  g0s = 0;
3039  g0d = 0;
3040  r1 = 0;
3041  q0 = 0;
3042  F2 = 0;
3043  Inv_r1pi = 0;
3044  Tcen = 0;
3045  MTcen = 0;
3046  Rdrain = 0;
3047  Rsource = 0;
3048  Cfr_geo = 0;
3049  igbinv = 0;
3050  igbs = 0;
3051  igbd = 0;
3052  igbacc = 0;
3053  igcs = 0;
3054  igcd = 0;
3055  igidl = 0;
3056  igisl = 0;
3057  igs = 0;
3058  igd = 0;
3059  cox_acc = 0;
3060  r1_acc = 0;
3061  Inv_r1pi_acc = 0;
3062  CGSO_i = 0;
3063  CGDO_i = 0;
3064  q0_acc = 0;
3065  qb_acc = 0;
3066  qg_acc = 0;
3067  qi_acc = 0;
3068  qgs_fr = 0;
3069  qgd_fr = 0;
3070  qds_fr = 0;
3071  qgs_parasitic = 0;
3072  qgd_parasitic = 0;
3073  FNPowerAt1Hz = 0;
3074  Gtnoi = 0;
3075  gspr = 0;
3076  gdpr = 0;
3077  if ( (model_.GEOMOD) == (0))
3078  {
3079  Weff0 = ((2*(model_.HFIN))-(model_.DELTAW));
3080  WeffCV0 = ((2*(model_.HFIN))-(model_.DELTAWCV));
3081  }
3082  else
3083  if ( (model_.GEOMOD) == (1))
3084  {
3085  Weff0 = (((2*(model_.HFIN))+((model_.FECH)*TFIN))-(model_.DELTAW));
3086  WeffCV0 = (((2*(model_.HFIN))+((model_.FECHCV)*TFIN))-(model_.DELTAWCV));
3087  }
3088  else
3089  if ( (model_.GEOMOD) == (2))
3090  {
3091  Weff0 = (((2*(model_.HFIN))+((2*(model_.FECH))*TFIN))-(model_.DELTAW));
3092  WeffCV0 = (((2*(model_.HFIN))+((2*(model_.FECHCV))*TFIN))-(model_.DELTAWCV));
3093  }
3094  else
3095  if ( (model_.GEOMOD) == (3))
3096  {
3097  R = (D/2.0);
3098  Weff0 = ((3.14159265358979323846*D)-(model_.DELTAW));
3099  WeffCV0 = ((3.14159265358979323846*D)-(model_.DELTAWCV));
3100  }
3101  else
3102  {
3103  // no default
3104  }
3105  if (((model_.DEVTYPE)==1))
3106  {
3107  devsign = 1;
3108  }
3109  else
3110  {
3111  devsign = (-1);
3112  }
3113 
3114  // Manually added code:
3115  if (model_.getType() == "pmos" || model_.getType() == "PMOS")
3116  devsign = -1;
3117 
3118  epssub = ((model_.EPSRSUB)*8.8542e-12);
3119  epssp = ((model_.EPSRSP)*8.8542e-12);
3120  cox = ((3.9*8.8542e-12)/(model_.EOT));
3121  csi = (epssub/TFIN);
3122  cbox = ((3.9*8.8542e-12)/(model_.EOTBOX));
3123  epsratio = ((model_.EPSRSUB)/3.9);
3124  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
3125  {
3126  cox_acc = ((3.9*8.8542e-12)/(model_.EOTACC));
3127  }
3128  scl = sqrt(((((0.5*epsratio)*TFIN)*(model_.EOT))*(1.0+(TFIN/((4.0*epsratio)*(model_.EOT))))));
3129  heff = sqrt((((model_.HFIN)*((model_.HFIN)+((2*epsratio)*(model_.EOT))))/8.0));
3130  if ( (model_.GEOMOD) == (1))
3131  {
3132  scl = (1.0/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3133  }
3134  else
3135  if ( (model_.GEOMOD) == (2))
3136  {
3137  scl = (0.5/sqrt(((1.0/(scl*scl))+(0.25/(heff*heff)))));
3138  }
3139  else
3140  if ( (model_.GEOMOD) == (3))
3141  {
3142  scl = sqrt(((((0.5*epsratio)*R)*(model_.EOT))*(1.0+(R/((2.0*epsratio)*(model_.EOT))))));
3143  }
3144  else
3145  {
3146  // no default
3147  }
3148  mx = (0.916*9.11e-31);
3149  mxprime = (0.190*9.11e-31);
3150  md = (0.190*9.11e-31);
3151  mdprime = (0.417*9.11e-31);
3152  gprime = 4.0;
3153  gfactor = 2.0;
3154  Lg = (L+(model_.XL));
3155  deltaL = ((model_.LINT)+((model_.LL)*pow(Lg,(-(model_.LLN)))));
3156  deltaLCV = ((model_.DLC)+((model_.LLC)*pow(Lg,(-(model_.LLN)))));
3157  Leff = (Lg-(2.0*deltaL));
3158  LeffCV = (Lg-(2.0*deltaLCV));
3159  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
3160  {
3161  LeffCV_acc = (LeffCV-(model_.DLCACC));
3162  }
3163  NFINtotal = (NFIN*(model_.NF));
3164  Inv_L = (1.0e-6/(Leff+(model_.DLBIN)));
3165  Inv_NFIN = (1.0/NFIN);
3166  Inv_LNFIN = (1.0e-6/((Leff+(model_.DLBIN))*NFIN));
3167  NBODY_i = ((((model_.NBODY)+(Inv_L*(model_.LNBODY)))+(Inv_NFIN*(model_.NNBODY)))+(Inv_LNFIN*(model_.PNBODY)));
3168  PHIG_i = ((((model_.PHIG)+(Inv_L*(model_.LPHIG)))+(Inv_NFIN*(model_.NPHIG)))+(Inv_LNFIN*(model_.PPHIG)));
3169  NGATE_i = ((((model_.NGATE)+(Inv_L*(model_.LNGATE)))+(Inv_NFIN*(model_.NNGATE)))+(Inv_LNFIN*(model_.PNGATE)));
3170  CIT_i = ((((model_.CIT)+(Inv_L*(model_.LCIT)))+(Inv_NFIN*(model_.NCIT)))+(Inv_LNFIN*(model_.PCIT)));
3171  CDSC_i = ((((model_.CDSC)+(Inv_L*(model_.LCDSC)))+(Inv_NFIN*(model_.NCDSC)))+(Inv_LNFIN*(model_.PCDSC)));
3172  CDSCD_i = ((((model_.CDSCD)+(Inv_L*(model_.LCDSCD)))+(Inv_NFIN*(model_.NCDSCD)))+(Inv_LNFIN*(model_.PCDSCD)));
3173  DVT0_i = ((((model_.DVT0)+(Inv_L*(model_.LDVT0)))+(Inv_NFIN*(model_.NDVT0)))+(Inv_LNFIN*(model_.PDVT0)));
3174  DVT1_i = ((((model_.DVT1)+(Inv_L*(model_.LDVT1)))+(Inv_NFIN*(model_.NDVT1)))+(Inv_LNFIN*(model_.PDVT1)));
3175  DVT1SS_i = ((((model_.DVT1SS)+(Inv_L*(model_.LDVT1SS)))+(Inv_NFIN*(model_.NDVT1SS)))+(Inv_LNFIN*(model_.PDVT1SS)));
3176  PHIN_i = ((((model_.PHIN)+(Inv_L*(model_.LPHIN)))+(Inv_NFIN*(model_.NPHIN)))+(Inv_LNFIN*(model_.PPHIN)));
3177  ETA0_i = ((((model_.ETA0)+(Inv_L*(model_.LETA0)))+(Inv_NFIN*(model_.NETA0)))+(Inv_LNFIN*(model_.PETA0)));
3178  DSUB_i = ((((model_.DSUB)+(Inv_L*(model_.LDSUB)))+(Inv_NFIN*(model_.NDSUB)))+(Inv_LNFIN*(model_.PDSUB)));
3179  K1RSCE_i = ((((model_.K1RSCE)+(Inv_L*(model_.LK1RSCE)))+(Inv_NFIN*(model_.NK1RSCE)))+(Inv_LNFIN*(model_.PK1RSCE)));
3180  LPE0_i = ((((model_.LPE0)+(Inv_L*(model_.LLPE0)))+(Inv_NFIN*(model_.NLPE0)))+(Inv_LNFIN*(model_.PLPE0)));
3181  DVTSHIFT_i = ((((model_.DVTSHIFT)+(Inv_L*(model_.LDVTSHIFT)))+(Inv_NFIN*(model_.NDVTSHIFT)))+(Inv_LNFIN*(model_.PDVTSHIFT)));
3182  K0_i = ((((model_.K0)+(Inv_L*(model_.LK0)))+(Inv_NFIN*(model_.NK0)))+(Inv_LNFIN*(model_.PK0)));
3183  K01_i = ((((model_.K01)+(Inv_L*(model_.LK01)))+(Inv_NFIN*(model_.NK01)))+(Inv_LNFIN*(model_.PK01)));
3184  K0SI_i = ((((model_.K0SI)+(Inv_L*(model_.LK0SI)))+(Inv_NFIN*(model_.NK0SI)))+(Inv_LNFIN*(model_.PK0SI)));
3185  K0SI1_i = ((((model_.K0SI1)+(Inv_L*(model_.LK0SI1)))+(Inv_NFIN*(model_.NK0SI1)))+(Inv_LNFIN*(model_.PK0SI1)));
3186  K1SI_i = ((((model_.K1SI)+(Inv_L*(model_.LK1SI)))+(Inv_NFIN*(model_.NK1SI)))+(Inv_LNFIN*(model_.PK1SI)));
3187  K1SI1_i = ((((model_.K1SI1)+(Inv_L*(model_.LK1SI1)))+(Inv_NFIN*(model_.NK1SI1)))+(Inv_LNFIN*(model_.PK1SI1)));
3188  if (((model_.BULKMOD)!=0))
3189  {
3190  PHIBE_i = ((((model_.PHIBE)+(Inv_L*(model_.LPHIBE)))+(Inv_NFIN*(model_.NPHIBE)))+(Inv_LNFIN*(model_.PPHIBE)));
3191  K1_i = ((((model_.K1)+(Inv_L*(model_.LK1)))+(Inv_NFIN*(model_.NK1)))+(Inv_LNFIN*(model_.PK1)));
3192  K11_i = ((((model_.K11)+(Inv_L*(model_.LK11)))+(Inv_NFIN*(model_.NK11)))+(Inv_LNFIN*(model_.PK11)));
3193  K1SAT_i = ((((model_.K1SAT)+(Inv_L*(model_.LK1SAT)))+(Inv_NFIN*(model_.NK1SAT)))+(Inv_LNFIN*(model_.PK1SAT)));
3194  K1SAT1_i = ((((model_.K1SAT1)+(Inv_L*(model_.LK1SAT1)))+(Inv_NFIN*(model_.NK1SAT1)))+(Inv_LNFIN*(model_.PK1SAT1)));
3195  }
3196  QMFACTOR_i = ((((model_.QMFACTOR)+(Inv_L*(model_.LQMFACTOR)))+(Inv_NFIN*(model_.NQMFACTOR)))+(Inv_LNFIN*(model_.PQMFACTOR)));
3197  QMTCENIV_i = ((((model_.QMTCENIV)+(Inv_L*(model_.LQMTCENIV)))+(Inv_NFIN*(model_.NQMTCENIV)))+(Inv_LNFIN*(model_.PQMTCENIV)));
3198  QMTCENCV_i = ((((model_.QMTCENCV)+(Inv_L*(model_.LQMTCENCV)))+(Inv_NFIN*(model_.NQMTCENCV)))+(Inv_LNFIN*(model_.PQMTCENCV)));
3199  QMTCENCVA_i = ((((model_.QMTCENCVA)+(Inv_L*(model_.LQMTCENCVA)))+(Inv_NFIN*(model_.NQMTCENCVA)))+(Inv_LNFIN*(model_.PQMTCENCVA)));
3200  VSAT_i = ((((model_.VSAT)+(Inv_L*(model_.LVSAT)))+(Inv_NFIN*(model_.NVSAT)))+(Inv_LNFIN*(model_.PVSAT)));
3201  VSAT1_i = ((((model_.VSAT1)+(Inv_L*(model_.LVSAT1)))+(Inv_NFIN*(model_.NVSAT1)))+(Inv_LNFIN*(model_.PVSAT1)));
3202  VSATCV_i = ((((model_.VSATCV)+(Inv_L*(model_.LVSATCV)))+(Inv_NFIN*(model_.NVSATCV)))+(Inv_LNFIN*(model_.PVSATCV)));
3203  DELTAVSAT_i = ((((model_.DELTAVSAT)+(Inv_L*(model_.LDELTAVSAT)))+(Inv_NFIN*(model_.NDELTAVSAT)))+(Inv_LNFIN*(model_.PDELTAVSAT)));
3204  PSAT_i = ((((model_.PSAT)+(Inv_L*(model_.LPSAT)))+(Inv_NFIN*(model_.NPSAT)))+(Inv_LNFIN*(model_.PPSAT)));
3205  DELTAVSATCV_i = ((((model_.DELTAVSATCV)+(Inv_L*(model_.LDELTAVSATCV)))+(Inv_NFIN*(model_.NDELTAVSATCV)))+(Inv_LNFIN*(model_.PDELTAVSATCV)));
3206  PSATCV_i = ((((model_.PSATCV)+(Inv_L*(model_.LPSATCV)))+(Inv_NFIN*(model_.NPSATCV)))+(Inv_LNFIN*(model_.PPSATCV)));
3207  KSATIV_i = ((((model_.KSATIV)+(Inv_L*(model_.LKSATIV)))+(Inv_NFIN*(model_.NKSATIV)))+(Inv_LNFIN*(model_.PKSATIV)));
3208  MEXP_i = ((((model_.MEXP)+(Inv_L*(model_.LMEXP)))+(Inv_NFIN*(model_.NMEXP)))+(Inv_LNFIN*(model_.PMEXP)));
3209  PTWG_i = ((((model_.PTWG)+(Inv_L*(model_.LPTWG)))+(Inv_NFIN*(model_.NPTWG)))+(Inv_LNFIN*(model_.PPTWG)));
3210  U0_i = ((((model_.U0)+(Inv_L*(model_.LU0)))+(Inv_NFIN*(model_.NU0)))+(Inv_LNFIN*(model_.PU0)));
3211  ETAMOB_i = ((((model_.ETAMOB)+(Inv_L*(model_.LETAMOB)))+(Inv_NFIN*(model_.NETAMOB)))+(Inv_LNFIN*(model_.PETAMOB)));
3212  UP_i = ((((model_.UP)+(Inv_L*(model_.LUP)))+(Inv_NFIN*(model_.NUP)))+(Inv_LNFIN*(model_.PUP)));
3213  UA_i = ((((model_.UA)+(Inv_L*(model_.LUA)))+(Inv_NFIN*(model_.NUA)))+(Inv_LNFIN*(model_.PUA)));
3214  if (((model_.BULKMOD)!=0))
3215  {
3216  UC_i = ((((model_.UC)+(Inv_L*(model_.LUC)))+(Inv_NFIN*(model_.NUC)))+(Inv_LNFIN*(model_.PUC)));
3217  }
3218  EU_i = ((((model_.EU)+(Inv_L*(model_.LEU)))+(Inv_NFIN*(model_.NEU)))+(Inv_LNFIN*(model_.PEU)));
3219  UD_i = ((((model_.UD)+(Inv_L*(model_.LUD)))+(Inv_NFIN*(model_.NUD)))+(Inv_LNFIN*(model_.PUD)));
3220  UCS_i = ((((model_.UCS)+(Inv_L*(model_.LUCS)))+(Inv_NFIN*(model_.NUCS)))+(Inv_LNFIN*(model_.PUCS)));
3221  PCLM_i = ((((model_.PCLM)+(Inv_L*(model_.LPCLM)))+(Inv_NFIN*(model_.NPCLM)))+(Inv_LNFIN*(model_.PPCLM)));
3222  PCLMG_i = ((((model_.PCLMG)+(Inv_L*(model_.LPCLMG)))+(Inv_NFIN*(model_.NPCLMG)))+(Inv_LNFIN*(model_.PPCLMG)));
3223  PCLMCV_i = ((((model_.PCLMCV)+(Inv_L*(model_.LPCLMCV)))+(Inv_NFIN*(model_.NPCLMCV)))+(Inv_LNFIN*(model_.PPCLMCV)));
3224  A1_i = ((((model_.A1)+(Inv_L*(model_.LA1)))+(Inv_NFIN*(model_.NA1)))+(Inv_LNFIN*(model_.PA1)));
3225  A11_i = ((((model_.A11)+(Inv_L*(model_.LA11)))+(Inv_NFIN*(model_.NA11)))+(Inv_LNFIN*(model_.PA11)));
3226  A2_i = ((((model_.A2)+(Inv_L*(model_.LA2)))+(Inv_NFIN*(model_.NA2)))+(Inv_LNFIN*(model_.PA2)));
3227  A21_i = ((((model_.A21)+(Inv_L*(model_.LA21)))+(Inv_NFIN*(model_.NA21)))+(Inv_LNFIN*(model_.PA21)));
3228  RDSW_i = ((((model_.RDSW)+(Inv_L*(model_.LRDSW)))+(Inv_NFIN*(model_.NRDSW)))+(Inv_LNFIN*(model_.PRDSW)));
3229  RSW_i = ((((model_.RSW)+(Inv_L*(model_.LRSW)))+(Inv_NFIN*(model_.NRSW)))+(Inv_LNFIN*(model_.PRSW)));
3230  RDW_i = ((((model_.RDW)+(Inv_L*(model_.LRDW)))+(Inv_NFIN*(model_.NRDW)))+(Inv_LNFIN*(model_.PRDW)));
3231  PRWGD_i = ((((model_.PRWGD)+(Inv_L*(model_.LPRWGD)))+(Inv_NFIN*(model_.NPRWGD)))+(Inv_LNFIN*(model_.PPRWGD)));
3232  PRWGS_i = ((((model_.PRWGS)+(Inv_L*(model_.LPRWGS)))+(Inv_NFIN*(model_.NPRWGS)))+(Inv_LNFIN*(model_.PPRWGS)));
3233  WR_i = ((((model_.WR)+(Inv_L*(model_.LWR)))+(Inv_NFIN*(model_.NWR)))+(Inv_LNFIN*(model_.PWR)));
3234  PDIBL1_i = ((((model_.PDIBL1)+(Inv_L*(model_.LPDIBL1)))+(Inv_NFIN*(model_.NPDIBL1)))+(Inv_LNFIN*(model_.PPDIBL1)));
3235  PDIBL2_i = ((((model_.PDIBL2)+(Inv_L*(model_.LPDIBL2)))+(Inv_NFIN*(model_.NPDIBL2)))+(Inv_LNFIN*(model_.PPDIBL2)));
3236  DROUT_i = ((((model_.DROUT)+(Inv_L*(model_.LDROUT)))+(Inv_NFIN*(model_.NDROUT)))+(Inv_LNFIN*(model_.PDROUT)));
3237  PVAG_i = ((((model_.PVAG)+(Inv_L*(model_.LPVAG)))+(Inv_NFIN*(model_.NPVAG)))+(Inv_LNFIN*(model_.PPVAG)));
3238  AIGBINV_i = ((((model_.AIGBINV)+(Inv_L*(model_.LAIGBINV)))+(Inv_NFIN*(model_.NAIGBINV)))+(Inv_LNFIN*(model_.PAIGBINV)));
3239  AIGBINV1_i = ((((model_.AIGBINV1)+(Inv_L*(model_.LAIGBINV1)))+(Inv_NFIN*(model_.NAIGBINV1)))+(Inv_LNFIN*(model_.PAIGBINV1)));
3240  BIGBINV_i = ((((model_.BIGBINV)+(Inv_L*(model_.LBIGBINV)))+(Inv_NFIN*(model_.NBIGBINV)))+(Inv_LNFIN*(model_.PBIGBINV)));
3241  CIGBINV_i = ((((model_.CIGBINV)+(Inv_L*(model_.LCIGBINV)))+(Inv_NFIN*(model_.NCIGBINV)))+(Inv_LNFIN*(model_.PCIGBINV)));
3242  EIGBINV_i = ((((model_.EIGBINV)+(Inv_L*(model_.LEIGBINV)))+(Inv_NFIN*(model_.NEIGBINV)))+(Inv_LNFIN*(model_.PEIGBINV)));
3243  NIGBINV_i = ((((model_.NIGBINV)+(Inv_L*(model_.LNIGBINV)))+(Inv_NFIN*(model_.NNIGBINV)))+(Inv_LNFIN*(model_.PNIGBINV)));
3244  AIGBACC_i = ((((model_.AIGBACC)+(Inv_L*(model_.LAIGBACC)))+(Inv_NFIN*(model_.NAIGBACC)))+(Inv_LNFIN*(model_.PAIGBACC)));
3245  AIGBACC1_i = ((((model_.AIGBACC1)+(Inv_L*(model_.LAIGBACC1)))+(Inv_NFIN*(model_.NAIGBACC1)))+(Inv_LNFIN*(model_.PAIGBACC1)));
3246  BIGBACC_i = ((((model_.BIGBACC)+(Inv_L*(model_.LBIGBACC)))+(Inv_NFIN*(model_.NBIGBACC)))+(Inv_LNFIN*(model_.PBIGBACC)));
3247  CIGBACC_i = ((((model_.CIGBACC)+(Inv_L*(model_.LCIGBACC)))+(Inv_NFIN*(model_.NCIGBACC)))+(Inv_LNFIN*(model_.PCIGBACC)));
3248  NIGBACC_i = ((((model_.NIGBACC)+(Inv_L*(model_.LNIGBACC)))+(Inv_NFIN*(model_.NNIGBACC)))+(Inv_LNFIN*(model_.PNIGBACC)));
3249  AIGC_i = ((((model_.AIGC)+(Inv_L*(model_.LAIGC)))+(Inv_NFIN*(model_.NAIGC)))+(Inv_LNFIN*(model_.PAIGC)));
3250  AIGC1_i = ((((model_.AIGC1)+(Inv_L*(model_.LAIGC1)))+(Inv_NFIN*(model_.NAIGC1)))+(Inv_LNFIN*(model_.PAIGC1)));
3251  BIGC_i = ((((model_.BIGC)+(Inv_L*(model_.LBIGC)))+(Inv_NFIN*(model_.NBIGC)))+(Inv_LNFIN*(model_.PBIGC)));
3252  CIGC_i = ((((model_.CIGC)+(Inv_L*(model_.LCIGC)))+(Inv_NFIN*(model_.NCIGC)))+(Inv_LNFIN*(model_.PCIGC)));
3253  PIGCD_i = ((((model_.PIGCD)+(Inv_L*(model_.LPIGCD)))+(Inv_NFIN*(model_.NPIGCD)))+(Inv_LNFIN*(model_.PPIGCD)));
3254  AIGS_i = ((((model_.AIGS)+(Inv_L*(model_.LAIGS)))+(Inv_NFIN*(model_.NAIGS)))+(Inv_LNFIN*(model_.PAIGS)));
3255  AIGS1_i = ((((model_.AIGS1)+(Inv_L*(model_.LAIGS1)))+(Inv_NFIN*(model_.NAIGS1)))+(Inv_LNFIN*(model_.PAIGS1)));
3256  BIGS_i = ((((model_.BIGS)+(Inv_L*(model_.LBIGS)))+(Inv_NFIN*(model_.NBIGS)))+(Inv_LNFIN*(model_.PBIGS)));
3257  CIGS_i = ((((model_.CIGS)+(Inv_L*(model_.LCIGS)))+(Inv_NFIN*(model_.NCIGS)))+(Inv_LNFIN*(model_.PCIGS)));
3258  AIGD_i = ((((model_.AIGD)+(Inv_L*(model_.LAIGD)))+(Inv_NFIN*(model_.NAIGD)))+(Inv_LNFIN*(model_.PAIGD)));
3259  AIGD1_i = ((((model_.AIGD1)+(Inv_L*(model_.LAIGD1)))+(Inv_NFIN*(model_.NAIGD1)))+(Inv_LNFIN*(model_.PAIGD1)));
3260  BIGD_i = ((((model_.BIGD)+(Inv_L*(model_.LBIGD)))+(Inv_NFIN*(model_.NBIGD)))+(Inv_LNFIN*(model_.PBIGD)));
3261  CIGD_i = ((((model_.CIGD)+(Inv_L*(model_.LCIGD)))+(Inv_NFIN*(model_.NCIGD)))+(Inv_LNFIN*(model_.PCIGD)));
3262  NTOX_i = ((((model_.NTOX)+(Inv_L*(model_.LNTOX)))+(Inv_NFIN*(model_.NNTOX)))+(Inv_LNFIN*(model_.PNTOX)));
3263  POXEDGE_i = ((((model_.POXEDGE)+(Inv_L*(model_.LPOXEDGE)))+(Inv_NFIN*(model_.NPOXEDGE)))+(Inv_LNFIN*(model_.PPOXEDGE)));
3264  AGIDL_i = ((((model_.AGIDL)+(Inv_L*(model_.LAGIDL)))+(Inv_NFIN*(model_.NAGIDL)))+(Inv_LNFIN*(model_.PAGIDL)));
3265  BGIDL_i = ((((model_.BGIDL)+(Inv_L*(model_.LBGIDL)))+(Inv_NFIN*(model_.NBGIDL)))+(Inv_LNFIN*(model_.PBGIDL)));
3266  CGIDL_i = ((((model_.CGIDL)+(Inv_L*(model_.LCGIDL)))+(Inv_NFIN*(model_.NCGIDL)))+(Inv_LNFIN*(model_.PCGIDL)));
3267  EGIDL_i = ((((model_.EGIDL)+(Inv_L*(model_.LEGIDL)))+(Inv_NFIN*(model_.NEGIDL)))+(Inv_LNFIN*(model_.PEGIDL)));
3268  PGIDL_i = ((((model_.PGIDL)+(Inv_L*(model_.LPGIDL)))+(Inv_NFIN*(model_.NPGIDL)))+(Inv_LNFIN*(model_.PPGIDL)));
3269  AGISL_i = ((((model_.AGISL)+(Inv_L*(model_.LAGISL)))+(Inv_NFIN*(model_.NAGISL)))+(Inv_LNFIN*(model_.PAGISL)));
3270  BGISL_i = ((((model_.BGISL)+(Inv_L*(model_.LBGISL)))+(Inv_NFIN*(model_.NBGISL)))+(Inv_LNFIN*(model_.PBGISL)));
3271  CGISL_i = ((((model_.CGISL)+(Inv_L*(model_.LCGISL)))+(Inv_NFIN*(model_.NCGISL)))+(Inv_LNFIN*(model_.PCGISL)));
3272  EGISL_i = ((((model_.EGISL)+(Inv_L*(model_.LEGISL)))+(Inv_NFIN*(model_.NEGISL)))+(Inv_LNFIN*(model_.PEGISL)));
3273  PGISL_i = ((((model_.PGISL)+(Inv_L*(model_.LPGISL)))+(Inv_NFIN*(model_.NPGISL)))+(Inv_LNFIN*(model_.PPGISL)));
3274  ALPHA0_i = ((((model_.ALPHA0)+(Inv_L*(model_.LALPHA0)))+(Inv_NFIN*(model_.NALPHA0)))+(Inv_LNFIN*(model_.PALPHA0)));
3275  ALPHA1_i = ((((model_.ALPHA1)+(Inv_L*(model_.LALPHA1)))+(Inv_NFIN*(model_.NALPHA1)))+(Inv_LNFIN*(model_.PALPHA1)));
3276  ALPHAII0_i = ((((model_.ALPHAII0)+(Inv_L*(model_.LALPHAII0)))+(Inv_NFIN*(model_.NALPHAII0)))+(Inv_LNFIN*(model_.PALPHAII0)));
3277  ALPHAII1_i = ((((model_.ALPHAII1)+(Inv_L*(model_.LALPHAII1)))+(Inv_NFIN*(model_.NALPHAII1)))+(Inv_LNFIN*(model_.PALPHAII1)));
3278  BETA0_i = ((((model_.BETA0)+(Inv_L*(model_.LBETA0)))+(Inv_NFIN*(model_.NBETA0)))+(Inv_LNFIN*(model_.PBETA0)));
3279  BETAII0_i = ((((model_.BETAII0)+(Inv_L*(model_.LBETAII0)))+(Inv_NFIN*(model_.NBETAII0)))+(Inv_LNFIN*(model_.PBETAII0)));
3280  BETAII1_i = ((((model_.BETAII1)+(Inv_L*(model_.LBETAII1)))+(Inv_NFIN*(model_.NBETAII1)))+(Inv_LNFIN*(model_.PBETAII1)));
3281  BETAII2_i = ((((model_.BETAII2)+(Inv_L*(model_.LBETAII2)))+(Inv_NFIN*(model_.NBETAII2)))+(Inv_LNFIN*(model_.PBETAII2)));
3282  ESATII_i = ((((model_.ESATII)+(Inv_L*(model_.LESATII)))+(Inv_NFIN*(model_.NESATII)))+(Inv_LNFIN*(model_.PESATII)));
3283  LII_i = ((((model_.LII)+(Inv_L*(model_.LLII)))+(Inv_NFIN*(model_.NLII)))+(Inv_LNFIN*(model_.PLII)));
3284  SII0_i = ((((model_.SII0)+(Inv_L*(model_.LSII0)))+(Inv_NFIN*(model_.NSII0)))+(Inv_LNFIN*(model_.PSII0)));
3285  SII1_i = ((((model_.SII1)+(Inv_L*(model_.LSII1)))+(Inv_NFIN*(model_.NSII1)))+(Inv_LNFIN*(model_.PSII1)));
3286  SII2_i = ((((model_.SII2)+(Inv_L*(model_.LSII2)))+(Inv_NFIN*(model_.NSII2)))+(Inv_LNFIN*(model_.PSII2)));
3287  SIID_i = ((((model_.SIID)+(Inv_L*(model_.LSIID)))+(Inv_NFIN*(model_.NSIID)))+(Inv_LNFIN*(model_.PSIID)));
3288  TII_i = ((((model_.TII)+(Inv_L*(model_.LTII)))+(Inv_NFIN*(model_.NTII)))+(Inv_LNFIN*(model_.PTII)));
3289  CFS_i = ((((model_.CFS)+(Inv_L*(model_.LCFS)))+(Inv_NFIN*(model_.NCFS)))+(Inv_LNFIN*(model_.PCFS)));
3290  CFD_i = ((((model_.CFD)+(Inv_L*(model_.LCFD)))+(Inv_NFIN*(model_.NCFD)))+(Inv_LNFIN*(model_.PCFD)));
3291  COVS_i = (((COVS+(Inv_L*(model_.LCOVS)))+(Inv_NFIN*(model_.NCOVS)))+(Inv_LNFIN*(model_.PCOVS)));
3292  COVD_i = (((COVD+(Inv_L*(model_.LCOVD)))+(Inv_NFIN*(model_.NCOVD)))+(Inv_LNFIN*(model_.PCOVD)));
3293  CGSL_i = ((((model_.CGSL)+(Inv_L*(model_.LCGSL)))+(Inv_NFIN*(model_.NCGSL)))+(Inv_LNFIN*(model_.PCGSL)));
3294  CGDL_i = ((((model_.CGDL)+(Inv_L*(model_.LCGDL)))+(Inv_NFIN*(model_.NCGDL)))+(Inv_LNFIN*(model_.PCGDL)));
3295  CGBL_i = ((((model_.CGBL)+(Inv_L*(model_.LCGBL)))+(Inv_NFIN*(model_.NCGBL)))+(Inv_LNFIN*(model_.PCGBL)));
3296  CKAPPAS_i = ((((model_.CKAPPAS)+(Inv_L*(model_.LCKAPPAS)))+(Inv_NFIN*(model_.NCKAPPAS)))+(Inv_LNFIN*(model_.PCKAPPAS)));
3297  CKAPPAD_i = ((((model_.CKAPPAD)+(Inv_L*(model_.LCKAPPAD)))+(Inv_NFIN*(model_.NCKAPPAD)))+(Inv_LNFIN*(model_.PCKAPPAD)));
3298  CKAPPAB_i = ((((model_.CKAPPAB)+(Inv_L*(model_.LCKAPPAB)))+(Inv_NFIN*(model_.NCKAPPAB)))+(Inv_LNFIN*(model_.PCKAPPAB)));
3299  NTGEN_i = ((((model_.NTGEN)+(Inv_L*(model_.LNTGEN)))+(Inv_NFIN*(model_.NNTGEN)))+(Inv_LNFIN*(model_.PNTGEN)));
3300  AIGEN_i = ((((model_.AIGEN)+(Inv_L*(model_.LAIGEN)))+(Inv_NFIN*(model_.NAIGEN)))+(Inv_LNFIN*(model_.PAIGEN)));
3301  BIGEN_i = ((((model_.BIGEN)+(Inv_L*(model_.LBIGEN)))+(Inv_NFIN*(model_.NBIGEN)))+(Inv_LNFIN*(model_.PBIGEN)));
3302  if (((model_.ASYMMOD)!=0))
3303  {
3304  CDSCDR_i = ((((model_.CDSCDR)+(Inv_L*(model_.LCDSCDR)))+(Inv_NFIN*(model_.NCDSCDR)))+(Inv_LNFIN*(model_.PCDSCDR)));
3305  ETA0R_i = ((((model_.ETA0R)+(Inv_L*(model_.LETA0R)))+(Inv_NFIN*(model_.NETA0R)))+(Inv_LNFIN*(model_.PETA0R)));
3306  VSAT1R_i = ((((model_.VSAT1R)+(Inv_L*(model_.LVSAT1R)))+(Inv_NFIN*(model_.NVSAT1R)))+(Inv_LNFIN*(model_.PVSAT1R)));
3307  MEXPR_i = ((((model_.MEXPR)+(Inv_L*(model_.LMEXPR)))+(Inv_NFIN*(model_.NMEXPR)))+(Inv_LNFIN*(model_.PMEXPR)));
3308  PTWGR_i = ((((model_.PTWGR)+(Inv_L*(model_.LPTWGR)))+(Inv_NFIN*(model_.NPTWGR)))+(Inv_LNFIN*(model_.PPTWGR)));
3309  PDIBL1R_i = ((((model_.PDIBL1R)+(Inv_L*(model_.LPDIBL1R)))+(Inv_NFIN*(model_.NPDIBL1R)))+(Inv_LNFIN*(model_.PPDIBL1R)));
3310  }
3311  if (((model_.NQSMOD)==1))
3312  {
3313  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;
3314  }
3315  if (((model_.NQSMOD)==2))
3316  {
3317  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;
3318  }
3319  UTE_i = ((((model_.UTE)+(Inv_L*(model_.LUTE)))+(Inv_NFIN*(model_.NUTE)))+(Inv_LNFIN*(model_.PUTE)));
3320  UTL_i = ((((model_.UTL)+(Inv_L*(model_.LUTL)))+(Inv_NFIN*(model_.NUTL)))+(Inv_LNFIN*(model_.PUTL)));
3321  EMOBT_i = ((((model_.EMOBT)+(Inv_L*(model_.LEMOBT)))+(Inv_NFIN*(model_.NEMOBT)))+(Inv_LNFIN*(model_.PEMOBT)));
3322  UA1_i = ((((model_.UA1)+(Inv_L*(model_.LUA1)))+(Inv_NFIN*(model_.NUA1)))+(Inv_LNFIN*(model_.PUA1)));
3323  if (((model_.BULKMOD)!=0))
3324  {
3325  UC1_i = ((((model_.UC1)+(Inv_L*(model_.LUC1)))+(Inv_NFIN*(model_.NUC1)))+(Inv_LNFIN*(model_.PUC1)));
3326  }
3327  UD1_i = ((((model_.UD1)+(Inv_L*(model_.LUD1)))+(Inv_NFIN*(model_.NUD1)))+(Inv_LNFIN*(model_.PUD1)));
3328  UCSTE_i = ((((model_.UCSTE)+(Inv_L*(model_.LUCSTE)))+(Inv_NFIN*(model_.NUCSTE)))+(Inv_LNFIN*(model_.PUCSTE)));
3329  PTWGT_i = ((((model_.PTWGT)+(Inv_L*(model_.LPTWGT)))+(Inv_NFIN*(model_.NPTWGT)))+(Inv_LNFIN*(model_.PPTWGT)));
3330  AT_i = ((((model_.AT)+(Inv_L*(model_.LAT)))+(Inv_NFIN*(model_.NAT)))+(Inv_LNFIN*(model_.PAT)));
3331  PRT_i = ((((model_.PRT)+(Inv_L*(model_.LPRT)))+(Inv_NFIN*(model_.NPRT)))+(Inv_LNFIN*(model_.PPRT)));
3332  KT1_i = ((((model_.KT1)+(Inv_L*(model_.LKT1)))+(Inv_NFIN*(model_.NKT1)))+(Inv_LNFIN*(model_.PKT1)));
3333  TSS_i = ((((model_.TSS)+(Inv_L*(model_.LTSS)))+(Inv_NFIN*(model_.NTSS)))+(Inv_LNFIN*(model_.PTSS)));
3334  IIT_i = ((((model_.IIT)+(Inv_L*(model_.LIIT)))+(Inv_NFIN*(model_.NIIT)))+(Inv_LNFIN*(model_.PIIT)));
3335  TGIDL_i = ((((model_.TGIDL)+(Inv_L*(model_.LTGIDL)))+(Inv_NFIN*(model_.NTGIDL)))+(Inv_LNFIN*(model_.PTGIDL)));
3336  IGT_i = ((((model_.IGT)+(Inv_L*(model_.LIGT)))+(Inv_NFIN*(model_.NIGT)))+(Inv_LNFIN*(model_.PIGT)));
3337  if (((model_.PHIGN1)!=0))
3338  {
3339  PHIG_i = (PHIG_i*(1.0+(((model_.PHIGN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.PHIGN2)))))));
3340  }
3341  if (((model_.ETA0N1)!=0))
3342  {
3343  ETA0_i = (ETA0_i*(1.0+(((model_.ETA0N1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.ETA0N2)))))));
3344  }
3345  if (((model_.CDSCN1)!=0))
3346  {
3347  CDSC_i = (CDSC_i*(1.0+(((model_.CDSCN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.CDSCN2)))))));
3348  }
3349  if (((model_.CDSCDN1)!=0))
3350  {
3351  CDSCD_i = (CDSCD_i*(1.0+(((model_.CDSCDN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.CDSCDN2)))))));
3352  }
3353  if (((model_.CDSCDRN1)!=0))
3354  {
3355  CDSCDR_i = (CDSCDR_i*(1.0+(((model_.CDSCDRN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.CDSCDRN2)))))));
3356  }
3357  if (((model_.NBODYN1)!=0))
3358  {
3359  NBODY_i = (NBODY_i*(1.0+(((model_.NBODYN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.NBODYN2)))))));
3360  }
3361  if (((model_.VSATN1)!=0))
3362  {
3363  VSAT_i = (VSAT_i*(1.0+(((model_.VSATN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.VSATN2)))))));
3364  }
3365  if (((model_.VSAT1N1)!=0))
3366  {
3367  VSAT1_i = (VSAT1_i*(1.0+(((model_.VSAT1N1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.VSAT1N2)))))));
3368  }
3369  if (((model_.VSAT1RN1)!=0))
3370  {
3371  VSAT1R_i = (VSAT1R_i*(1.0+(((model_.VSAT1RN1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.VSAT1RN2)))))));
3372  }
3373  if (((model_.U0N1)!=0))
3374  {
3375  U0_i = (U0_i*(1.0+(((model_.U0N1)/NFIN)*model_.analogFunctions.lln((1.0+(NFIN/(model_.U0N2)))))));
3376  }
3377  PHIG_i = (PHIG_i+((model_.PHIGL)*Leff));
3378  if (((model_.LPA)>0))
3379  {
3380  U0_i = (U0_i*(1-(UP_i*pow(Leff,(-(model_.LPA))))));
3381  }
3382  else
3383  {
3384  U0_i = (U0_i*(1-UP_i));
3385  }
3386  UA_i = (UA_i+((model_.AUA)*model_.analogFunctions.lexp(((-Leff)/(model_.BUA)))));
3387  UD_i = (UD_i+((model_.AUD)*model_.analogFunctions.lexp(((-Leff)/(model_.BUD)))));
3388  EU_i = (EU_i+((model_.AEU)*model_.analogFunctions.lexp(((-Leff)/(model_.BEU)))));
3389  if (((model_.RDSMOD)==1))
3390  {
3391  RSW_i = (RSW_i+((model_.ARSW)*model_.analogFunctions.lexp(((-Leff)/(model_.BRSW)))));
3392  RDW_i = (RDW_i+((model_.ARDW)*model_.analogFunctions.lexp(((-Leff)/(model_.BRDW)))));
3393  }
3394  else
3395  {
3396  RDSW_i = (RDSW_i+((model_.ARDSW)*model_.analogFunctions.lexp(((-Leff)/(model_.BRDSW)))));
3397  }
3398  PCLM_i = (PCLM_i+((model_.APCLM)*model_.analogFunctions.lexp(((-Leff)/(model_.BPCLM)))));
3399  MEXP_i = (MEXP_i+((model_.AMEXP)*pow(Leff,(-(model_.BMEXP)))));
3400  if (((model_.ASYMMOD)!=0))
3401  {
3402  MEXPR_i = (MEXPR_i+((model_.AMEXPR)*pow(Leff,(-(model_.BMEXPR)))));
3403  }
3404  PTWG_i = (PTWG_i+((model_.APTWG)*model_.analogFunctions.lexp(((-Leff)/(model_.BPTWG)))));
3405  if (((model_.ASYMMOD)!=0))
3406  {
3407  PTWGR_i = (PTWGR_i+((model_.APTWG)*model_.analogFunctions.lexp(((-Leff)/(model_.BPTWG)))));
3408  }
3409  VSAT_i = (VSAT_i+((model_.AVSAT)*model_.analogFunctions.lexp(((-Leff)/(model_.BVSAT)))));
3410  VSAT1_i = (VSAT1_i+((model_.AVSAT1)*model_.analogFunctions.lexp(((-Leff)/(model_.BVSAT1)))));
3411  if (((model_.ASYMMOD)!=0))
3412  {
3413  VSAT1R_i = (VSAT1R_i+((model_.AVSAT1)*model_.analogFunctions.lexp(((-Leff)/(model_.BVSAT1)))));
3414  }
3415  PSAT_i = (PSAT_i+((model_.APSAT)*model_.analogFunctions.lexp(((-Leff)/(model_.BPSAT)))));
3416  PSATCV_i = (PSATCV_i+((model_.APSATCV)*model_.analogFunctions.lexp(((-Leff)/(model_.BPSATCV)))));
3417  VSATCV_i = (VSATCV_i+((model_.AVSATCV)*model_.analogFunctions.lexp(((-LeffCV)/(model_.BVSATCV)))));
3418  if ((((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0))||(QMTCENCVA_i>0.0)))
3419  {
3420  if ( (model_.GEOMOD) == (0))
3421  {
3422  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-TFIN)/(model_.BQMTCEN)))));
3423  Tcen0 = (TFIN*MTcen);
3424  }
3425  else
3426  if ( (model_.GEOMOD) == (1))
3427  {
3428  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-std::min((model_.HFIN),TFIN))/(model_.BQMTCEN)))));
3429  Tcen0 = (std::min(TFIN,(model_.HFIN))*MTcen);
3430  }
3431  else
3432  if ( (model_.GEOMOD) == (2))
3433  {
3434  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-std::min((model_.HFIN),TFIN))/(model_.BQMTCEN)))));
3435  Tcen0 = (std::min(TFIN,(model_.HFIN))*MTcen);
3436  }
3437  else
3438  if ( (model_.GEOMOD) == (3))
3439  {
3440  MTcen = (1.0+((model_.AQMTCEN)*model_.analogFunctions.lexp(((-R)/(model_.BQMTCEN)))));
3441  Tcen0 = (R*MTcen);
3442  }
3443  else
3444  {
3445  // no default
3446  }
3447  }
3448  if ((Leff<=0))
3449  {
3450  std::cerr << "Fatal: Leff = %e is not positive." << Leff << std::endl;
3451  }
3452  else
3453  {
3454  if ((Leff<=1e-9))
3455  {
3456  std::cerr << "Warning: Leff = %e <= 1.0e-9." << Leff << std::endl;
3457  }
3458  }
3459  if ((LeffCV<=1e-9))
3460  {
3461  std::cerr << "Warning: LeffCV = %e <= 1.0e-9." << LeffCV << std::endl;
3462  }
3463  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
3464  {
3465  if ((LeffCV_acc<=1e-9))
3466  {
3467  std::cerr << "Warning: LeffCV_acc = %e <= 1.0e-9." << LeffCV_acc << std::endl;
3468  }
3469  }
3470  if ((Weff0<=1e-9))
3471  {
3472  std::cerr << "Warning: Weff0 = %e <= 1.0e-9." << Weff0 << std::endl;
3473  }
3474  if ((WeffCV0<=1e-9))
3475  {
3476  std::cerr << "Warning: WeffCV0 = %e <= 1.0e-9." << WeffCV0 << std::endl;
3477  }
3478  if ((NBODY_i<=0))
3479  {
3480  std::cerr << "Fatal: NBODY_i = %e is not positive." << NBODY_i << std::endl;
3481  }
3482  else
3483  {
3484  if ((NBODY_i<=1e18))
3485  {
3486  std::cerr << "Warning: NBODY_i = %e m^-3 may be too small." << NBODY_i << std::endl;
3487  }
3488  }
3489  if ((NGATE_i<0))
3490  {
3491  std::cerr << "Fatal: NGATE_i = %e is negative." << NGATE_i << std::endl;
3492  }
3493  else
3494  {
3495  if (((NGATE_i!=0)&&(NGATE_i<=1e24)))
3496  {
3497  std::cerr << "Warning: NGATE_i = %e may be too small." << NGATE_i << std::endl;
3498  }
3499  else
3500  {
3501  if ((NGATE_i>1e31))
3502  {
3503  std::cerr << "Fatal: NGATE_i = %e is too high." << NGATE_i << std::endl;
3504  }
3505  }
3506  }
3507  if ((DVT0_i<0))
3508  {
3509  std::cerr << "Warning: DVT0_i = %e is negative." << DVT0_i << std::endl;
3510  }
3511  if ((DVT1_i<=0))
3512  {
3513  std::cerr << "Fatal: DVT1_i = %e is not positive." << DVT1_i << std::endl;
3514  }
3515  if ((DVT1SS_i<=0))
3516  {
3517  std::cerr << "Fatal: DVT1SS_i = %e is not positive." << DVT1SS_i << std::endl;
3518  }
3519  if ((CDSC_i<0))
3520  {
3521  std::cerr << "Warning: CDSC_i = %e is negative." << CDSC_i << std::endl;
3522  }
3523  if ((CDSCD_i<0))
3524  {
3525  std::cerr << "Warning: CDSCD_i = %e is negative." << CDSCD_i << std::endl;
3526  }
3527  if ((DSUB_i<=0))
3528  {
3529  std::cerr << "Fatal: DSUB_i = %e is not positive." << DSUB_i << std::endl;
3530  }
3531  if ((ETA0_i<0))
3532  {
3533  std::cerr << "Warning: ETA0_i = %e is negative." << ETA0_i << std::endl;
3534  }
3535  if ((LPE0_i<(-Leff)))
3536  {
3537  std::cerr << "Warning: LPE0_i = %e is less than -Leff. Clipping LPE0_i to 0" << LPE0_i << std::endl;
3538  LPE0_i = 0;
3539  }
3540  if ((K0SI_i<=0))
3541  {
3542  std::cerr << "Warning: K0SI_i = %e is not positive, setting it to 0." << K0SI_i << std::endl;
3543  K0SI_i = 0;
3544  }
3545  if ((K1SI_i<=0))
3546  {
3547  std::cerr << "Warning: K1SI_i = %e is not positive, setting it to 0." << K1SI_i << std::endl;
3548  K1SI_i = 0;
3549  }
3550  if (((PHIBE_i<0.2)&&((model_.BULKMOD)!=0)))
3551  {
3552  std::cerr << "Warning: PHIBE_i = %e is less than 0.2, setting it to 0.2." << PHIBE_i << std::endl;
3553  PHIBE_i = 0.2;
3554  }
3555  if (((PHIBE_i>1.2)&&((model_.BULKMOD)!=0)))
3556  {
3557  std::cerr << "Warning: PHIBE_i = %e is larger than 1.2, setting it to 1.2." << PHIBE_i << std::endl;
3558  PHIBE_i = 1.2;
3559  }
3560  if ((PSAT_i<2.0))
3561  {
3562  std::cerr << "Warning: PSAT_i = %e is less than 2.0, setting it to 2.0." << PSAT_i << std::endl;
3563  PSAT_i = 2.0;
3564  }
3565  if ((PSATCV_i<2.0))
3566  {
3567  std::cerr << "Warning: PSATCV_i = %e is less than 2.0, setting it to 2.0." << PSATCV_i << std::endl;
3568  PSATCV_i = 2.0;
3569  }
3570  if ((U0_i<0))
3571  {
3572  std::cerr << "Warning: U0_i = %e is negative, setting it to 0." << U0_i << std::endl;
3573  U0_i = 0;
3574  }
3575  if ((UA_i<0))
3576  {
3577  std::cerr << "Warning: UA_i = %e is negative, setting it to 0." << UA_i << std::endl;
3578  UA_i = 0;
3579  }
3580  if ((EU_i<0))
3581  {
3582  std::cerr << "Warning: EU_i = %e is negative, setting it to 0." << EU_i << std::endl;
3583  EU_i = 0;
3584  }
3585  if ((UD_i<0))
3586  {
3587  std::cerr << "Warning: UD_i = %e is negative, setting it to 0." << UD_i << std::endl;
3588  UD_i = 0;
3589  }
3590  if ((UCS_i<0))
3591  {
3592  std::cerr << "Warning: UCS_i = %e is negative, setting it to 0." << UCS_i << std::endl;
3593  UCS_i = 0;
3594  }
3595  RDSWMIN_i = (model_.RDSWMIN);
3596  if ((RDSWMIN_i<0))
3597  {
3598  std::cerr << "Warning: RDSWMIN = %e is negative. Set to zero" << RDSWMIN_i << std::endl;
3599  RDSWMIN_i = 0;
3600  }
3601  if ((RDSW_i<0))
3602  {
3603  std::cerr << "Warning: RDSW_i = %e is negative. Set to zero" << RDSW_i << std::endl;
3604  RDSW_i = 0;
3605  }
3606  RSWMIN_i = (model_.RSWMIN);
3607  if ((RSWMIN_i<0))
3608  {
3609  std::cerr << "Warning: RSWMIN = %e is negative. Set to zero" << RSWMIN_i << std::endl;
3610  RSWMIN_i = 0;
3611  }
3612  if ((RSW_i<0))
3613  {
3614  std::cerr << "Warning: RSW_i = %e is negative. Set to zero" << RSW_i << std::endl;
3615  RSW_i = 0;
3616  }
3617  RDWMIN_i = (model_.RDWMIN);
3618  if ((RDWMIN_i<0))
3619  {
3620  std::cerr << "Warning: RDWMIN = %e is negative. Set to zero" << RDWMIN_i << std::endl;
3621  RDWMIN_i = 0;
3622  }
3623  if ((RDW_i<0))
3624  {
3625  std::cerr << "Warning: RDW_i = %e is negative. Set to zero" << RDW_i << std::endl;
3626  RDW_i = 0;
3627  }
3628  if ((PRWGD_i<0))
3629  {
3630  std::cerr << "Warning: PRWGD_i = %e is negative. Set to zero" << PRWGD_i << std::endl;
3631  PRWGD_i = 0;
3632  }
3633  if ((PRWGS_i<0))
3634  {
3635  std::cerr << "Warning: PRWGS_i = %e is negative. Set to zero" << PRWGS_i << std::endl;
3636  PRWGS_i = 0;
3637  }
3638  if ((PCLM_i<0))
3639  {
3640  std::cerr << "Warning: PCLM_i = %e is negative." << PCLM_i << std::endl;
3641  }
3642  if ((PDIBL1_i<0))
3643  {
3644  std::cerr << "Warning: PDIBL1_i = %e is negative." << PDIBL1_i << std::endl;
3645  }
3646  if (((model_.ASYMMOD)!=0))
3647  {
3648  if ((PDIBL1R_i<0))
3649  {
3650  std::cerr << "Warning: PDIBL1R_i = %e is negative." << PDIBL1R_i << std::endl;
3651  }
3652  }
3653  if ((PDIBL2_i<0))
3654  {
3655  std::cerr << "Fatal: PDIBL2_i = %e is negative." << PDIBL2_i << std::endl;
3656  }
3657  if ((DROUT_i<=0))
3658  {
3659  std::cerr << "Fatal: DROUT_i = %e is non-positive." << DROUT_i << std::endl;
3660  }
3661  if ((MEXP_i<2.0))
3662  {
3663  std::cerr << "Warning: MEXP_i = %e < 2. Setting MEXP_i = 2." << MEXP_i << std::endl;
3664  MEXP_i = 2.0;
3665  }
3666  if (((model_.ASYMMOD)!=0))
3667  {
3668  if ((MEXPR_i<2.0))
3669  {
3670  std::cerr << "Warning: MEXPR_i = %e < 2. Setting MEXPR_i = 2." << MEXPR_i << std::endl;
3671  MEXPR_i = 2.0;
3672  }
3673  }
3674  if ((PTWG_i<0))
3675  {
3676  std::cerr << "Warning: PTWG_i = %e is negative, setting it to 0." << PTWG_i << std::endl;
3677  PTWG_i = 0;
3678  }
3679  if (((QMTCENIV_i>0)||(QMTCENCV_i>0)))
3680  {
3681  if (((model_.QM0)<=0))
3682  {
3683  std::cerr << "Fatal: QM0 = %e is non-positive." << (model_.QM0) << std::endl;
3684  }
3685  }
3686  if (((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0))&&(QMTCENCVA_i>0)))
3687  {
3688  if (((model_.QM0ACC)<=0))
3689  {
3690  std::cerr << "Fatal: QM0ACC = %e is non-positive." << (model_.QM0ACC) << std::endl;
3691  }
3692  }
3693  if ((CGIDL_i<0.0))
3694  {
3695  std::cerr << "Warning: CGIDL_i = %e < 0. Setting CGIDL_i = 0." << CGIDL_i << std::endl;
3696  CGIDL_i = 0.0;
3697  }
3698  if ((CGISL_i<0.0))
3699  {
3700  std::cerr << "Warning: CGISL_i = %e < 0. Setting CGISL_i = 0." << CGISL_i << std::endl;
3701  CGISL_i = 0.0;
3702  }
3703  if (((model_.IGBMOD)!=0))
3704  {
3705  if ((NIGBINV_i<=0))
3706  {
3707  std::cerr << "Fatal: NIGBINV_i = %e is non-positive." << NIGBINV_i << std::endl;
3708  }
3709  if ((NIGBACC_i<=0))
3710  {
3711  std::cerr << "Fatal: NIGBACC_i = %e is non-positive." << NIGBACC_i << std::endl;
3712  }
3713  }
3714  if (((model_.IGCMOD)!=0))
3715  {
3716  if ((POXEDGE_i<=0))
3717  {
3718  std::cerr << "Fatal: POXEDGE_i = %e is non-positive." << POXEDGE_i << std::endl;
3719  }
3720  if ((PIGCD_i<=0))
3721  {
3722  std::cerr << "Fatal: PIGCD_i = %e is non-positive." << PIGCD_i << std::endl;
3723  }
3724  }
3725  if ((((model_.IGCMOD)!=0)||((model_.IGBMOD)!=0)))
3726  {
3727  if (((model_.TOXREF)<=0))
3728  {
3729  std::cerr << "Fatal: TOXREF = %e is non-positive." << (model_.TOXREF) << std::endl;
3730  }
3731  }
3732  if (((model_.LINTIGEN)>=(Leff/2)))
3733  {
3734  std::cerr << "Warning: LINTIGEN = %e is too large - Leff for r/g current is negative. Re-setting LINTIGEN = 0." << (model_.LINTIGEN) << std::endl;
3735  LINTIGEN_i = 0;
3736  }
3737  else
3738  {
3739  LINTIGEN_i = (model_.LINTIGEN);
3740  }
3741  if ((NTGEN_i<=0))
3742  {
3743  std::cerr << "Fatal: NTGEN_i = %e is non-positive." << NTGEN_i << std::endl;
3744  }
3745  if (((model_.IIMOD)==2))
3746  {
3747  if ((BETAII0_i<0.0))
3748  {
3749  std::cerr << "Warning: BETAII0_i = %e is negative." << BETAII0_i << std::endl;
3750  }
3751  if ((BETAII1_i<0.0))
3752  {
3753  std::cerr << "Warning: BETAII1_i = %e is negative." << BETAII1_i << std::endl;
3754  }
3755  if ((BETAII2_i<0.0))
3756  {
3757  std::cerr << "Warning: BETAII2_i = %e is negative." << BETAII2_i << std::endl;
3758  }
3759  if ((ESATII_i<0.0))
3760  {
3761  std::cerr << "Warning: ESATII_i = %e is negative." << ESATII_i << std::endl;
3762  }
3763  if ((LII_i<0.0))
3764  {
3765  std::cerr << "Warning: LII_i = %e is negative." << LII_i << std::endl;
3766  }
3767  if ((SII1_i<0.0))
3768  {
3769  std::cerr << "Warning: SII1_i = %e is negative." << (model_.SII1) << std::endl;
3770  }
3771  if ((SII2_i<0.0))
3772  {
3773  std::cerr << "Warning: SII2_i = %e is negative." << SII2_i << std::endl;
3774  }
3775  if ((SIID_i<0.0))
3776  {
3777  std::cerr << "Warning: SIID_i = %e is negative." << SIID_i << std::endl;
3778  }
3779  }
3780  if (((model_.EF)<=0))
3781  {
3782  std::cerr << "Fatal: EF = %e is non-positive." << (model_.EF) << std::endl;
3783  }
3784  else
3785  {
3786  if (((model_.EF)>2.0))
3787  {
3788  std::cerr << "Fatal: EF = %e > 2.0." << (model_.EF) << std::endl;
3789  }
3790  }
3791  if (((model_.LINTNOI)>=(Leff/2)))
3792  {
3793  std::cerr << "Warning: LINTNOI = %e is too large - Leff for noise is negative. Re-setting LINTNOI = 0." << (model_.LINTNOI) << std::endl;
3794  LINTNOI_i = 0;
3795  }
3796  else
3797  {
3798  LINTNOI_i = (model_.LINTNOI);
3799  }
3800  if (((model_.NTNOI)<0))
3801  {
3802  std::cerr << "Warning: NTNOI = %e is negative. Set to zero." << (model_.NTNOI) << std::endl;
3803  NTNOI_i = 0;
3804  }
3805  else
3806  {
3807  NTNOI_i = (model_.NTNOI);
3808  }
3809  if (((model_.SHMOD)!=0))
3810  {
3811  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;
3812  }
3813  if (((model_.RGATEMOD)!=0))
3814  {
3815  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;
3816  }
3817  if (((model_.RGEOMOD)==0))
3818  {
3819  RSourceGeo = ((model_.RSHS)*NRS);
3820  RDrainGeo = ((model_.RSHD)*NRD);
3821  }
3822  else
3823  {
3824  if (((model_.HEPI)>0))
3825  {
3826  Arsd = ((FPITCH*(model_.HFIN))+((TFIN+((FPITCH-TFIN)*(model_.CRATIO)))*(model_.HEPI)));
3827  }
3828  else
3829  {
3830  Arsd = (FPITCH*std::max(((model_.HFIN)+(model_.HEPI)),1.0e-9));
3831  }
3832  Prsd = (FPITCH+(model_.DELTAPRSD));
3833  if ((model_.given("RHORSD")))
3834  {
3835  rhorsd = (model_.RHORSD);
3836  }
3837  else
3838  {
3839  if (((model_.DEVTYPE)==1))
3840  {
3841  mu_max = 1417;
3842  }
3843  else
3844  {
3845  mu_max = 470.5;
3846  }
3847  if (((model_.DEVTYPE)==1))
3848  {
3849  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);
3850  }
3851  else
3852  {
3853  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);
3854  }
3855  rhorsd = (1/((1.60219e-19*(model_.NSD))*mu_rsd));
3856  }
3857  thetarsp = ((55*3.14159265358979323846)/180);
3858  afin = std::min(std::max((TFIN*((model_.HFIN)+std::min((model_.HEPI),0.0))),1.0e-18),Arsd);
3859  T1 = ((thetarsp>=(3.14159265358979323846/2))?0:((thetarsp<=((-3.14159265358979323846)/2))?0:(1.0/tan(thetarsp))));
3860  Rsp = (((rhorsd*T1.val())/(sqrt(3.14159265358979323846)*NFIN))*(((1.0/sqrt(afin))-(2.0/sqrt(Arsd)))+sqrt((afin/(Arsd*Arsd)))));
3861  arsd_total = ((Arsd*NFIN)+(model_.ARSDEND));
3862  prsd_total = ((Prsd*NFIN)+(model_.PRSDEND));
3863  lt = sqrt((((model_.RHOC)*arsd_total)/(rhorsd*prsd_total)));
3864  alpha = (LRSD/lt);
3865  T0 = model_.analogFunctions.lexp<AdmsFadType>((alpha+alpha));
3866  if (((model_.SDTERM)==1))
3867  {
3868  eta = ((rhorsd*lt)/(model_.RHOC));
3869  T1 = (T0*(1.0+eta));
3870  T2 = ((T1+1.0)-eta);
3871  T3 = ((T1-1.0)+eta);
3872  }
3873  else
3874  {
3875  T2 = (T0+1.0);
3876  T3 = (T0-1.0);
3877  }
3878  RrsdTML = (((rhorsd*lt)*T2.val())/(arsd_total*T3.val()));
3879  if (((model_.HEPI)<(-1.0e-10)))
3880  {
3881  Rrsdside = ((model_.RHOC)/(((-(model_.HEPI))*TFIN)*NFIN));
3882  Rrsd = (((RrsdTML+Rsp)*Rrsdside)/((RrsdTML+Rsp)+Rrsdside));
3883  }
3884  else
3885  {
3886  Rrsd = (RrsdTML+Rsp);
3887  }
3888  Rdsgeo = ((Rrsd/(model_.NF))*std::max((((((model_.RGEOA)+((model_.RGEOB)*TFIN))+((model_.RGEOC)*FPITCH))+((model_.RGEOD)*LRSD))+((model_.RGEOE)*(model_.HEPI))),0.0));
3889  RSourceGeo = Rdsgeo;
3890  RDrainGeo = Rdsgeo;
3891  }
3892  if ((RSourceGeo<=1.0e-3))
3893  {
3894  RSourceGeo = 1.0e-3;
3895  }
3896  if ((RDrainGeo<=1.0e-3))
3897  {
3898  RDrainGeo = 1.0e-3;
3899  }
3900  if (((model_.RDSMOD)!=0))
3901  {
3902  if ((RSWMIN_i<=0))
3903  {
3904  RSWMIN_i = 0;
3905  }
3906  if ((RDWMIN_i<=0))
3907  {
3908  RDWMIN_i = 0;
3909  }
3910  if ((RSW_i<=0))
3911  {
3912  RSW_i = 0;
3913  }
3914  if ((RDW_i<=0))
3915  {
3916  RDW_i = 0;
3917  }
3918  }
3919  else
3920  {
3921  if ((RDSWMIN_i<=0))
3922  {
3923  RDSWMIN_i = 0;
3924  }
3925  if ((RDSW_i<=0))
3926  {
3927  RDSW_i = 0;
3928  }
3929  }
3930  if (((model_.CGEOMOD)!=1))
3931  {
3932  if ((model_.given("CGSO")))
3933  {
3934  CGSO_i = (model_.CGSO);
3935  }
3936  else
3937  {
3938  if (((model_.given("DLC"))&&((model_.DLC)>0)))
3939  {
3940  CGSO_i = std::max(0.0,(((model_.DLC)*cox)-CGSL_i));
3941  }
3942  else
3943  {
3944  CGSO_i = ((0.3*TFIN)*cox);
3945  }
3946  }
3947  if ((model_.given("CGDO")))
3948  {
3949  CGDO_i = (model_.CGDO);
3950  }
3951  else
3952  {
3953  if (((model_.given("DLC"))&&((model_.DLC)>0)))
3954  {
3955  CGDO_i = std::max(0.0,(((model_.DLC)*cox)-CGDL_i));
3956  }
3957  else
3958  {
3959  CGDO_i = ((0.3*TFIN)*cox);
3960  }
3961  }
3962  }
3963  if (((model_.CGEOMOD)==2))
3964  {
3965  Hg = ((model_.TGATE)+(model_.TMASK));
3966  Trsd = (0.5*(FPITCH-TFIN));
3967  Wg = std::max((Trsd-(model_.TOXP)),0.0);
3968  Hrsd = std::max(((model_.HEPI)+(model_.TSILI)),0.0);
3969  if (((model_.TMASK)>0))
3970  {
3971  T0 = (3.467e-11*model_.analogFunctions.lln<AdmsFadType>(((1.0e-7*(model_.EPSRSP))/(3.9*(model_.LSP)))));
3972  T1 = (((0.942*Hrsd)*epssp)/(model_.LSP));
3973  Cgg_top = ((T0.val()+T1.val())*(TFIN+((FPITCH-TFIN)*(model_.CRATIO))));
3974  }
3975  else
3976  {
3977  //Begin block cfr_top_trigate
3978  {
3979  //Block-local variables for block cfr_top_trigate
3980  double Hr;
3981  double Lr;
3982  double Hgdelta;
3983  double Lmax;
3984  double y;
3985  double x;
3986  //End of Block-local variables
3987  //Block-local variables for block cfr_top_trigate
3988  double CcgSat;
3989  double Cnon;
3990  double TT1;
3991  double Ccg1;
3992  double r1cf;
3993  double Rcf;
3994  double Ccg2;
3995  //End of Block-local variables
3996  //Block-local variables for block cfr_top_trigate
3997  double Ccg;
3998  double C1;
3999  double C2;
4000  double C3;
4001  double Cfglog;
4002  double dcf;
4003  double TT0;
4004  //End of Block-local variables
4005  //Block-local variables for block cfr_top_trigate
4006  double TT2;
4007  double Cfgsat;
4008  double delta;
4009  double Cfg;
4010  //End of Block-local variables
4011  Hr = (2.3+((0.2*(Hg+(model_.TOXP)))/Hrsd));
4012  Lr = 1.05;
4013  Hgdelta = fabs(((Hg+(model_.TOXP))-Hrsd));
4014  Lmax = ((model_.LSP)*Lr);
4015  y = std::min(Hrsd,(Hg+(model_.TOXP)));
4016  x = ((model_.LSP)/(Hr+1.0));
4017  Cnon = 1.7e12;
4018  CcgSat = ((epssp*(y-x))/(model_.LSP));
4019  TT1 = (Cnon*CcgSat);
4020  if ((TT1>80.0))
4021  {
4022  Ccg1 = CcgSat;
4023  }
4024  else
4025  {
4026  Ccg1 = ((1.0/Cnon)*log((1.0+model_.analogFunctions.lexp(TT1))));
4027  }
4028  r1cf = (0.5*std::min((Hrsd/(Hg+(model_.TOXP))),((Hg+(model_.TOXP))/Hrsd)));
4029  Rcf = (Hgdelta*r1cf);
4030  Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((model_.LSP)+((0.5*3.14159265358979323846)*Rcf))/(model_.LSP))));
4031  Ccg = (TFIN*(Ccg1+Ccg2));
4032  x = (Lmax/Hg);
4033  C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4034  C2 = ((((sqrt(((((model_.TOXP)*(model_.TOXP))+((2.0*Hg)*(model_.TOXP)))+((Hg*Hg)*(x+1))))*sqrt((x+1)))+(model_.TOXP))+(Hg*x))+Hg);
4035  C3 = (((model_.TOXP)*sqrt(((x+1)*(x+4))))+((model_.TOXP)*(x+2)));
4036  Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4037  dcf = (Hr*Lr);
4038  TT0 = sqrt(((dcf*dcf)+1.0));
4039  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);
4040  TT2 = ((TT0+1.0)*(dcf*(model_.TOXP)));
4041  Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4042  delta = 1.2e-12;
4043  TT1 = ((Cfgsat-Cfglog)-delta);
4044  Cfg = (TFIN*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4045  Cgg_top = (Ccg+Cfg);
4046  }
4047  // End block cfr_top_trigate
4048  }
4049  if (((model_.TMASK)>0))
4050  {
4051  //Begin block cfr_side_dblgate
4052  {
4053  //Block-local variables for block cfr_side_dblgate
4054  double Hr;
4055  double Lr;
4056  double Hgdelta;
4057  double Lmax;
4058  double y;
4059  double x;
4060  //End of Block-local variables
4061  //Block-local variables for block cfr_side_dblgate
4062  double CcgSat;
4063  double Cnon;
4064  double TT1;
4065  double Ccg1;
4066  double r1cf;
4067  double Rcf;
4068  double Ccg2;
4069  //End of Block-local variables
4070  //Block-local variables for block cfr_side_dblgate
4071  double Ccg;
4072  double C1;
4073  double C2;
4074  double C3;
4075  double Cfglog;
4076  double dcf;
4077  double TT0;
4078  //End of Block-local variables
4079  //Block-local variables for block cfr_side_dblgate
4080  double TT2;
4081  double Cfgsat;
4082  double delta;
4083  double Cfg;
4084  //End of Block-local variables
4085  Hr = (2.3+((0.2*(Wg+(model_.TOXP)))/Trsd));
4086  Lr = 1.05;
4087  Hgdelta = fabs(((Wg+(model_.TOXP))-Trsd));
4088  Lmax = ((model_.LSP)*Lr);
4089  y = std::min(Trsd,(Wg+(model_.TOXP)));
4090  x = ((model_.LSP)/(Hr+1.0));
4091  Cnon = 1.7e12;
4092  CcgSat = ((epssp*(y-x))/(model_.LSP));
4093  TT1 = (Cnon*CcgSat);
4094  if ((TT1>80.0))
4095  {
4096  Ccg1 = CcgSat;
4097  }
4098  else
4099  {
4100  Ccg1 = ((1.0/Cnon)*log((1.0+model_.analogFunctions.lexp(TT1))));
4101  }
4102  r1cf = (0.5*std::min((Trsd/(Wg+(model_.TOXP))),((Wg+(model_.TOXP))/Trsd)));
4103  Rcf = (Hgdelta*r1cf);
4104  Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((model_.LSP)+((0.5*3.14159265358979323846)*Rcf))/(model_.LSP))));
4105  Ccg = ((model_.HFIN)*(Ccg1+Ccg2));
4106  x = (Lmax/Wg);
4107  C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4108  C2 = ((((sqrt(((((model_.TOXP)*(model_.TOXP))+((2.0*Wg)*(model_.TOXP)))+((Wg*Wg)*(x+1))))*sqrt((x+1)))+(model_.TOXP))+(Wg*x))+Wg);
4109  C3 = (((model_.TOXP)*sqrt(((x+1)*(x+4))))+((model_.TOXP)*(x+2)));
4110  Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4111  dcf = (Hr*Lr);
4112  TT0 = sqrt(((dcf*dcf)+1.0));
4113  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);
4114  TT2 = ((TT0+1.0)*(dcf*(model_.TOXP)));
4115  Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.70)*dcf)/TT0)*log((TT1/TT2)));
4116  delta = 1.2e-12;
4117  TT1 = ((Cfgsat-Cfglog)-delta);
4118  Cfg = ((model_.HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4119  Cgg_side = (Ccg+Cfg);
4120  }
4121  // End block cfr_side_dblgate
4122  }
4123  else
4124  {
4125  //Begin block cfr_side_trigate
4126  {
4127  //Block-local variables for block cfr_side_trigate
4128  double Hr;
4129  double Lr;
4130  double Hgdelta;
4131  double Lmax;
4132  double y;
4133  double x;
4134  //End of Block-local variables
4135  //Block-local variables for block cfr_side_trigate
4136  double CcgSat;
4137  double Cnon;
4138  double TT1;
4139  double Ccg1;
4140  double r1cf;
4141  double Rcf;
4142  double Ccg2;
4143  //End of Block-local variables
4144  //Block-local variables for block cfr_side_trigate
4145  double Ccg;
4146  double C1;
4147  double C2;
4148  double C3;
4149  double Cfglog;
4150  double dcf;
4151  double TT0;
4152  //End of Block-local variables
4153  //Block-local variables for block cfr_side_trigate
4154  double TT2;
4155  double Cfgsat;
4156  double delta;
4157  double Cfg;
4158  //End of Block-local variables
4159  Hr = (2.3+((0.2*(Wg+(model_.TOXP)))/Trsd));
4160  Lr = 1.05;
4161  Hgdelta = fabs(((Wg+(model_.TOXP))-Trsd));
4162  Lmax = ((model_.LSP)*Lr);
4163  y = std::min(Trsd,(Wg+(model_.TOXP)));
4164  x = ((model_.LSP)/(Hr+1.0));
4165  Cnon = 1.7e12;
4166  CcgSat = ((epssp*(y-x))/(model_.LSP));
4167  TT1 = (Cnon*CcgSat);
4168  if ((TT1>80.0))
4169  {
4170  Ccg1 = CcgSat;
4171  }
4172  else
4173  {
4174  Ccg1 = ((1.0/Cnon)*log((1.0+model_.analogFunctions.lexp(TT1))));
4175  }
4176  r1cf = (0.5*std::min((Trsd/(Wg+(model_.TOXP))),((Wg+(model_.TOXP))/Trsd)));
4177  Rcf = (Hgdelta*r1cf);
4178  Ccg2 = (((epssp*2)/3.14159265358979323846)*log((((model_.LSP)+((0.5*3.14159265358979323846)*Rcf))/(model_.LSP))));
4179  Ccg = ((model_.HFIN)*(Ccg1+Ccg2));
4180  x = (Lmax/Wg);
4181  C1 = (4.0/(sqrt((2.0*(x+1)))*3.14159265358979323846));
4182  C2 = ((((sqrt(((((model_.TOXP)*(model_.TOXP))+((2.0*Wg)*(model_.TOXP)))+((Wg*Wg)*(x+1))))*sqrt((x+1)))+(model_.TOXP))+(Wg*x))+Wg);
4183  C3 = (((model_.TOXP)*sqrt(((x+1)*(x+4))))+((model_.TOXP)*(x+2)));
4184  Cfglog = (epssp*((C1*log((C2/C3)))+12.27));
4185  dcf = (Hr*Lr);
4186  TT0 = sqrt(((dcf*dcf)+1.0));
4187  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);
4188  TT2 = ((TT0+1.0)*(dcf*(model_.TOXP)));
4189  Cfgsat = (((((((2.0*epssp)*sqrt(2.0))/3.14159265358979323846)*0.85)*dcf)/TT0)*log((TT1/TT2)));
4190  delta = 1.2e-12;
4191  TT1 = ((Cfgsat-Cfglog)-delta);
4192  Cfg = ((model_.HFIN)*(Cfgsat-(0.5*(TT1+sqrt(((TT1*TT1)+((4*delta)*Cfgsat)))))));
4193  Cgg_side = (Ccg+Cfg);
4194  }
4195  // End block cfr_side_trigate
4196  }
4197  if (((model_.TMASK)>0))
4198  {
4199  Acorner = 0.0;
4200  }
4201  else
4202  {
4203  if (((model_.HEPI)>0))
4204  {
4205  Acorner = ((FPITCH-TFIN)*(((model_.HEPI)*(model_.CRATIO))+(model_.TSILI)));
4206  }
4207  else
4208  {
4209  Acorner = ((FPITCH-TFIN)*Hrsd);
4210  }
4211  }
4212  Ccorner = (((((NFIN*Acorner)+(model_.ARSDEND))+(model_.ASILIEND))*epssp)/(model_.LSP));
4213  Cfr_geo = (((Ccorner+(Cgg_top*NFIN))+((((model_.CGEOE)*Cgg_side)*NFIN)*2.0))*(model_.NF));
4214  Cfr_geo = (Cfr_geo*std::max(((((model_.CGEOA)+((model_.CGEOB)*TFIN))+((model_.CGEOC)*FPITCH))+((model_.CGEOD)*LRSD)),0.0));
4215  }
4217  csbox = ((cbox*ASEO)+(T0.val()*std::max(0.0,(PSEO-(FPITCH*NFINtotal)))));
4218  cdbox = ((cbox*ADEO)+(T0.val()*std::max(0.0,(PDEO-(FPITCH*NFINtotal)))));
4219  cgbox = (((((model_.CGBO)*(model_.NF))*NGCON)+((model_.CGBN)*NFINtotal))*LeffCV);
4220  EeffFactor = (1.0e-8/(epsratio*(model_.EOT)));
4221  WeffWRFactor = (1.0/(pow((Weff0*1.0e6),WR_i)*NFINtotal));
4222  litl = sqrt((((epsratio*(model_.EOT))*0.5)*TFIN));
4223  tmp = (((DVT1_i*Leff)/scl)+1.0e-6);
4224  if ((tmp<40.0))
4225  {
4226  Theta_SCE = (0.5/(cosh(tmp)-1.0));
4227  }
4228  else
4229  {
4230  Theta_SCE = exp((-tmp));
4231  }
4232  tmp = (((DVT1SS_i*Leff)/scl)+1.0e-6);
4233  if ((tmp<40.0))
4234  {
4235  Theta_SW = (0.5/(cosh(tmp)-1.0));
4236  }
4237  else
4238  {
4239  Theta_SW = exp((-tmp));
4240  }
4241  tmp = (((DSUB_i*Leff)/scl)+1.0e-6);
4242  if ((tmp<40.0))
4243  {
4244  Theta_DIBL = (0.5/(cosh(tmp)-1.0));
4245  }
4246  else
4247  {
4248  Theta_DIBL = exp((-tmp));
4249  }
4250  Theta_RSCE = (sqrt((1.0+(LPE0_i/Leff)))-1.0);
4251  if ((((model_.COREMOD)!=0)&&(NBODY_i>1e23)))
4252  {
4253  nbody = 1e23;
4254  }
4255  else
4256  {
4257  nbody = NBODY_i;
4258  }
4259  if (((model_.GEOMOD)!=3))
4260  {
4261  qbs = (((1.60219e-19*nbody)*TFIN)/(2*cox));
4262  }
4263  else
4264  {
4265  qbs = (((1.60219e-19*nbody)*R)/(2*cox));
4266  }
4267  if (((model_.GEOMOD)!=3))
4268  {
4269  phibulk = ((((1.60219e-19/(2*epssub))*nbody)*(TFIN/2))*(TFIN/2));
4270  if (((model_.COREMOD)!=0))
4271  {
4272  Qbul = 0;
4273  }
4274  else
4275  {
4276  Qbul = sqrt(((((2*1.60219e-19)*nbody)*epssub)*phibulk));
4277  }
4278  F2 = model_.analogFunctions.lln((2.0/TFIN));
4279  }
4280  else
4281  {
4282  r1 = ((2*epssub)/(R*cox));
4283  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4284  {
4285  r1_acc = ((2.0*epssub)/(R*cox_acc.val()));
4286  }
4287  }
4288  if (((model_.DEVTYPE)==1))
4289  {
4290  Aechvb = 4.97232e-7;
4291  }
4292  else
4293  {
4294  Aechvb = 3.42537e-7;
4295  }
4296  if (((model_.DEVTYPE)==1))
4297  {
4298  Bechvb = 7.45669e11;
4299  }
4300  else
4301  {
4302  Bechvb = 1.16645e12;
4303  }
4304  T0 = ((model_.TOXG)*(model_.TOXG));
4305  T1 = ((model_.TOXG)*POXEDGE_i);
4306  T2 = (T1*T1);
4307  Toxratio = (model_.analogFunctions.lexp((NTOX_i*model_.analogFunctions.lln(((model_.TOXREF)/(model_.TOXG)))))/T0.val());
4308  Toxratioedge = (model_.analogFunctions.lexp((NTOX_i*model_.analogFunctions.lln(((model_.TOXREF)/T1.val()))))/T2.val());
4309  igsd_mult0 = ((Weff0*Aechvb)*Toxratioedge);
4310  if (((model_.TNOM)<(-273.15)))
4311  {
4312  std::cerr << "Warning: (TNOM=%e) < -`P_CELSIUS0. Set to 27 C." << (model_.TNOM) << std::endl;
4313  Tnom = 300.15;
4314  }
4315  else
4316  {
4317  Tnom = ((model_.TNOM)+273.15);
4318  }
4319  }
4320  // End block CMGBiasIndepCalc
4321  DevTemp = (admsTemperature+(model_.DTEMP));
4322  //Begin block CMGTempDepCalc
4323  {
4324  TRatio = (DevTemp/Tnom);
4325  delTemp = (DevTemp-Tnom);
4326  Vtm = (8.617087e-5*DevTemp);
4327  Vtm0 = (8.617087e-5*Tnom);
4328  Eg = ((model_.BG0SUB)-((((model_.TBGASUB)*DevTemp)*DevTemp)/(DevTemp+(model_.TBGBSUB))));
4329  Eg0 = ((model_.BG0SUB)-((((model_.TBGASUB)*Tnom)*Tnom)/(Tnom+(model_.TBGBSUB))));
4330  T1 = ((DevTemp/300.15)*sqrt((DevTemp/300.15)));
4331  ni = (((model_.NI0SUB)*T1.val())*model_.analogFunctions.lexp((((model_.BG0SUB)/((2.0*8.617087e-5)*300.15))-(Eg/(2.0*Vtm)))));
4332  Nc = ((model_.NC0SUB)*T1.val());
4333  ThetaSS = model_.analogFunctions.hypsmooth(((1.0+(TSS_i*delTemp))-1.0E-6),1.0E-3);
4334  if (((model_.GEOMOD)!=3))
4335  {
4336  kT = (Vtm*1.60219e-19);
4337  T0 = ((1.05457e-34*3.14159265358979323846)/TFIN);
4338  E0 = ((T0.val()*T0.val())/(2.0*mx));
4339  E0prime = ((T0.val()*T0.val())/(2.0*mxprime));
4340  E1 = (4.0*E0);
4341  E1prime = (4.0*E0prime);
4342  T1 = ((gprime*mdprime)/(gfactor*md));
4343  gam0 = (1.0+(T1.val()*model_.analogFunctions.lexp(((E0-E0prime)/kT))));
4344  gam1 = ((gam0+model_.analogFunctions.lexp(((E0-E1)/kT)))+(T1.val()*model_.analogFunctions.lexp(((E0-E1prime)/kT))));
4345  T2 = ((-Vtm)*model_.analogFunctions.lln<AdmsFadType>((((((gfactor*md)/(((3.14159265358979323846*1.05457e-34)*1.05457e-34)*Nc))*kT)/TFIN)*gam1)));
4346  dvch_qm = (QMFACTOR_i*((E0/1.60219e-19)+T2.val()));
4347  }
4348  else
4349  {
4350  T0 = ((1.05457e-34*2.4048)/R);
4351  E0 = ((T0.val()*T0.val())/(2.0*mx));
4352  dvch_qm = ((QMFACTOR_i*E0)/1.60219e-19);
4353  }
4354  ETA0_t = (ETA0_i*(1.0+model_.analogFunctions.hypmax(((model_.TETA0)*delTemp),(-0.9),1e-4)));
4355  ETA0R_t = (ETA0R_i*(1.0+model_.analogFunctions.hypmax(((model_.TETA0R)*delTemp),(-0.9),1e-4)));
4356  T1 = (U0_i*pow(TRatio,UTE_i));
4357  U0_t = (T1.val()+model_.analogFunctions.hypmax((UTL_i*delTemp),((-0.9)*T1.val()),1e-4));
4358  u0 = U0_t;
4359  ETAMOB_t = (ETAMOB_i*model_.analogFunctions.hypsmooth(((1.0+(EMOBT_i*delTemp))-1.0E-6),1.0E-3));
4360  UA_t = (UA_i+model_.analogFunctions.hypmax((UA1_i*delTemp),(-UA_i),1.0e-6));
4361  if (((model_.BULKMOD)!=0))
4362  {
4363  UC_t = (UC_i*model_.analogFunctions.hypsmooth(((1.0+(UC1_i*delTemp))-1.0E-6),1.0E-3));
4364  }
4365  UD_t = (UD_i*pow(TRatio,UD1_i));
4366  UCS_t = (UCS_i*pow(TRatio,UCSTE_i));
4367  rdstemp = model_.analogFunctions.hypsmooth(((1.0+(PRT_i*delTemp))-1.0E-6),1.0E-3);
4368  RSDR_t = ((model_.RSDR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRSDR)*delTemp))-1.0E-6),1.0E-3));
4369  if (((model_.ASYMMOD)!=0))
4370  {
4371  RSDRR_t = ((model_.RSDRR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRSDR)*delTemp))-1.0E-6),1.0E-3));
4372  }
4373  RDDR_t = ((model_.RDDR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRDDR)*delTemp))-1.0E-6),1.0E-3));
4374  if (((model_.ASYMMOD)!=0))
4375  {
4376  RDDRR_t = ((model_.RDDRR)*model_.analogFunctions.hypsmooth(((1.0+((model_.TRDDR)*delTemp))-1.0E-6),1.0E-3));
4377  }
4378  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)));
4379  if ((VSAT_t<1000))
4380  {
4381  std::cerr << "Warning: VSAT(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT_t << std::endl;
4382  VSAT_t = 1000;
4383  }
4384  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)));
4385  if ((VSAT1_t<1000))
4386  {
4387  std::cerr << "Warning: VSAT1(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1_t << std::endl;
4388  VSAT1_t = 1000;
4389  }
4390  if (((model_.ASYMMOD)!=0))
4391  {
4392  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)));
4393  if ((VSAT1R_t<1000))
4394  {
4395  std::cerr << "Warning: VSAT1R(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSAT1R_t << std::endl;
4396  VSAT1R_t = 1000;
4397  }
4398  }
4399  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)));
4400  if ((VSATCV_t<1000))
4401  {
4402  std::cerr << "Warning: VSATCV(%f) = %e is less than 1K, setting it to 1K." << DevTemp << VSATCV_t << std::endl;
4403  VSATCV_t = 1000;
4404  }
4405  MEXP_t = (model_.analogFunctions.hypsmooth(((MEXP_i*(1.0+((model_.TMEXP)*delTemp)))-2.0),1.0E-3)+2.0);
4406  if (((model_.ASYMMOD)!=0))
4407  {
4408  MEXPR_t = (model_.analogFunctions.hypsmooth(((MEXPR_i*(1.0+((model_.TMEXPR)*delTemp)))-2.0),1.0E-3)+2.0);
4409  }
4410  PTWG_t = (PTWG_i*model_.analogFunctions.hypsmooth(((1.0-(PTWGT_i*delTemp))-1.0E-6),1.0E-3));
4411  if (((model_.ASYMMOD)!=0))
4412  {
4413  PTWGR_t = (PTWGR_i*model_.analogFunctions.hypsmooth(((1.0-(PTWGT_i*delTemp))-1.0E-6),1.0E-3));
4414  }
4415  dvth_temp = ((KT1_i+((model_.KT1L)/Leff))*(TRatio-1.0));
4416  BETA0_t = (BETA0_i*pow(TRatio,IIT_i));
4417  SII0_t = (SII0_i*(model_.analogFunctions.hypsmooth(((1+(TII_i*(TRatio-1)))-0.01),1.0E-3)+0.01));
4418  K0_t = (K0_i+(K01_i*delTemp));
4419  K0SI_t = (K0SI_i+model_.analogFunctions.hypmax((K0SI1_i*delTemp),(-K0SI_i),1E-6));
4420  K1SI_t = (K1SI_i+model_.analogFunctions.hypmax((K1SI1_i*delTemp),(-K1SI_i),1E-6));
4421  K1_t = (K1_i+model_.analogFunctions.hypmax((K11_i*delTemp),(-K1_i),1E-6));
4422  K1SAT_t = (K1SAT_i+(K1SAT1_i*delTemp));
4423  A1_t = (A1_i+(A11_i*delTemp));
4424  A2_t = (A2_i+(A21_i*delTemp));
4425  AIGBINV_t = (AIGBINV_i+model_.analogFunctions.hypmax((AIGBINV1_i*delTemp),(-AIGBINV_i),1.0E-6));
4426  AIGBACC_t = (AIGBACC_i+model_.analogFunctions.hypmax((AIGBACC1_i*delTemp),(-AIGBACC_i),1.0E-6));
4427  AIGC_t = (AIGC_i+model_.analogFunctions.hypmax((AIGC1_i*delTemp),(-AIGC_i),1.0E-6));
4428  AIGS_t = (AIGS_i+model_.analogFunctions.hypmax((AIGS1_i*delTemp),(-AIGS_i),1.0E-6));
4429  AIGD_t = (AIGD_i+model_.analogFunctions.hypmax((AIGD1_i*delTemp),(-AIGD_i),1.0E-6));
4430  BGIDL_t = (BGIDL_i*model_.analogFunctions.hypsmooth(((1.0+(TGIDL_i*delTemp))-1.0E-6),1.0E-3));
4431  BGISL_t = (BGISL_i*model_.analogFunctions.hypsmooth(((1.0+(TGIDL_i*delTemp))-1.0E-6),1.0E-3));
4432  ALPHA0_t = (ALPHA0_i+model_.analogFunctions.hypmax(((model_.ALPHA01)*delTemp),(-ALPHA0_i),1.0E-6));
4433  ALPHA1_t = (ALPHA1_i+model_.analogFunctions.hypmax(((model_.ALPHA11)*delTemp),(-ALPHA1_i),1.0E-6));
4434  ALPHAII0_t = (ALPHAII0_i+model_.analogFunctions.hypmax(((model_.ALPHAII01)*delTemp),(-ALPHAII0_i),1.0E-6));
4435  ALPHAII1_t = (ALPHAII1_i+model_.analogFunctions.hypmax(((model_.ALPHAII11)*delTemp),(-ALPHAII1_i),1.0E-6));
4436  igtemp = model_.analogFunctions.lexp((IGT_i*model_.analogFunctions.lln(TRatio)));
4437  igsd_mult = (igsd_mult0*igtemp);
4438  if (((model_.BULKMOD)!=0))
4439  {
4440  CJS_t = ((model_.CJS)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJ)*delTemp))-1.0E-6),1.0E-3));
4441  CJD_t = ((model_.CJD)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJ)*delTemp))-1.0E-6),1.0E-3));
4442  CJSWS_t = ((model_.CJSWS)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSW)*delTemp))-1.0E-6),1.0E-3));
4443  CJSWD_t = ((model_.CJSWD)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSW)*delTemp))-1.0E-6),1.0E-3));
4444  CJSWGS_t = ((model_.CJSWGS)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSWG)*delTemp))-1.0E-6),1.0E-3));
4445  CJSWGD_t = ((model_.CJSWGD)*model_.analogFunctions.hypsmooth(((1.0+((model_.TCJSWG)*delTemp))-1.0E-6),1.0E-3));
4446  PBS_t = (model_.analogFunctions.hypsmooth((((model_.PBS)-((model_.TPB)*delTemp))-0.01),1.0E-3)+0.01);
4447  PBD_t = (model_.analogFunctions.hypsmooth((((model_.PBD)-((model_.TPB)*delTemp))-0.01),1.0E-3)+0.01);
4448  PBSWS_t = (model_.analogFunctions.hypsmooth((((model_.PBSWS)-((model_.TPBSW)*delTemp))-0.01),1.0E-3)+0.01);
4449  PBSWD_t = (model_.analogFunctions.hypsmooth((((model_.PBSWD)-((model_.TPBSW)*delTemp))-0.01),1.0E-3)+0.01);
4450  PBSWGS_t = (model_.analogFunctions.hypsmooth((((model_.PBSWGS)-((model_.TPBSWG)*delTemp))-0.01),1.0E-3)+0.01);
4451  PBSWGD_t = (model_.analogFunctions.hypsmooth((((model_.PBSWGD)-((model_.TPBSWG)*delTemp))-0.01),1.0E-3)+0.01);
4452  T0 = ((Eg0/Vtm0)-(Eg/Vtm));
4453  T1 = model_.analogFunctions.lln<AdmsFadType>(TRatio);
4454  T3 = model_.analogFunctions.lexp<AdmsFadType>(((T0+((model_.XTIS)*T1))/(model_.NJS)));
4455  JSS_t = ((model_.JSS)*T3.val());
4456  JSWS_t = ((model_.JSWS)*T3.val());
4457  JSWGS_t = ((model_.JSWGS)*T3.val());
4458  T3 = model_.analogFunctions.lexp<AdmsFadType>(((T0+((model_.XTID)*T1))/(model_.NJD)));
4459  JSD_t = ((model_.JSD)*T3.val());
4460  JSWD_t = ((model_.JSWD)*T3.val());
4461  JSWGD_t = ((model_.JSWGD)*T3.val());
4462  JTSS_t = ((model_.JTSS)*model_.analogFunctions.lexp((((Eg0*(model_.XTSS))*(TRatio-1))/Vtm)));
4463  JTSD_t = ((model_.JTSD)*model_.analogFunctions.lexp((((Eg0*(model_.XTSD))*(TRatio-1))/Vtm)));
4464  JTSSWS_t = ((model_.JTSSWS)*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWS))*(TRatio-1))/Vtm)));
4465  JTSSWD_t = ((model_.JTSSWD)*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWD))*(TRatio-1))/Vtm)));
4466  JTSSWGS_t = (((model_.JTSSWGS)*(sqrt(((model_.JTWEFF)/Weff0))+1.0))*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWGS))*(TRatio-1))/Vtm)));
4467  JTSSWGD_t = (((model_.JTSSWGD)*(sqrt(((model_.JTWEFF)/Weff0))+1.0))*model_.analogFunctions.lexp((((Eg0*(model_.XTSSWGD))*(TRatio-1))/Vtm)));
4468  NJTS_t = (model_.analogFunctions.hypsmooth((((model_.NJTS)*(1.0+((model_.TNJTS)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4469  NJTSD_t = (model_.analogFunctions.hypsmooth((((model_.NJTSD)*(1.0+((model_.TNJTSD)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4470  NJTSSW_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSW)*(1.0+((model_.TNJTSSW)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4471  NJTSSWD_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSWD)*(1.0+((model_.TNJTSSWD)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4472  NJTSSWG_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSWG)*(1.0+((model_.TNJTSSWG)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4473  NJTSSWGD_t = (model_.analogFunctions.hypsmooth((((model_.NJTSSWGD)*(1.0+((model_.TNJTSSWGD)*(TRatio-1.0))))-0.01),1.0E-3)+0.01);
4474  }
4475  beta0 = (((u0*cox)*Weff0)/Leff);
4476  if (((model_.NGATE)>0))
4477  {
4478  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))))));
4479  }
4480  else
4481  {
4482  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))))));
4483  }
4484  phib = (Vtm*model_.analogFunctions.lln((nbody/ni)));
4485  vbi = (Vtm*model_.analogFunctions.lln(((nbody*(model_.NSD))/(ni*ni))));
4486  if ((NGATE_i>0))
4487  {
4488  deltaPhi = model_.analogFunctions.hypsmooth(((0.5*Eg)-(Vtm*model_.analogFunctions.lln((NGATE_i/ni)))),1.0E-4);
4489  if (((model_.GEOMOD)!=3))
4490  {
4491  vpoly0 = (((1.60219e-19*NGATE_i)*epssub)/((2.0*cox)*cox));
4492  cpoly = (1.0/(4.0*vpoly0));
4493  }
4494  else
4495  {
4496  T0 = ((R+(model_.EOT))/R);
4497  vpoly0 = (((((1.60219e-19*NGATE_i)*epssub)*T0.val())*T0.val())/((2.0*cox)*cox));
4498  cpoly = (1.0/(4.0*vpoly0));
4499  }
4500  kpoly = (1.0+((2.0*cpoly)*qbs));
4501  }
4502  else
4503  {
4504  if (((model_.DEVTYPE)==1))
4505  {
4506  deltaPhi = (devsign*(PHIG_i-((model_.EASUB))));
4507  }
4508  else
4509  {
4510  deltaPhi = (devsign*(PHIG_i-((model_.EASUB)+Eg)));
4511  }
4512  cpoly = 0.0;
4513  vpoly0 = 0.0;
4514  kpoly = 0.0;
4515  }
4516  if (((model_.GEOMOD)!=3))
4517  {
4518  r1 = ((2.0*epssub)/(cox*TFIN));
4519  g0max = 1.57079;
4520  g0min = 1e-37;
4521  Inv_r1pi = (1.0/(r1*3.14159265358979323846));
4522  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4523  {
4524  r1_acc = ((2.0*epssub)/(cox_acc.val()*TFIN));
4525  Inv_r1pi_acc = (1.0/(r1_acc*3.14159265358979323846));
4526  }
4527  }
4528  else
4529  {
4530  g0max = 700;
4531  g0min = 1e-37;
4532  }
4533  if ((NGATE_i>0))
4534  {
4535  if (((model_.GEOMOD)!=3))
4536  {
4537  r2 = (((4.0*Vtm)*epssub)/(((1.60219e-19*TFIN)*TFIN)*NGATE_i));
4538  }
4539  else
4540  {
4541  r2 = ((((2.0*cpoly)*r1)*r1)*Vtm);
4542  }
4543  }
4544  else
4545  {
4546  r2 = 0.0;
4547  }
4548  eta_mu = (0.5*ETAMOB_t);
4549  eta_mu_cv = 0.5;
4550  if (((model_.DEVTYPE)!=1))
4551  {
4552  eta_mu = ((1.0/3.0)*ETAMOB_t);
4553  eta_mu_cv = (1.0/3.0);
4554  }
4555  if (((model_.BULKMOD)!=0))
4556  {
4557  Isbs = (((ASEJ*JSS_t)+(PSEJ*JSWS_t))+((Weff0*NFINtotal)*JSWGS_t));
4558  if ((Isbs>0.0))
4559  {
4560  Nvtms = (Vtm*(model_.NJS));
4561  XExpBVS = (model_.analogFunctions.lexp(((-(model_.BVS))/Nvtms))*(model_.XJBVS));
4562  T2 = std::max(((model_.IJTHSFWD)/Isbs),10.0);
4563  Tb = ((1.0+T2)-XExpBVS);
4564  VjsmFwd = (Nvtms*model_.analogFunctions.lln((0.5*(Tb.val()+sqrt(((Tb.val()*Tb.val())+(4*XExpBVS)))))));
4565  T0 = model_.analogFunctions.lexp<AdmsFadType>((VjsmFwd/Nvtms));
4566  IVjsmFwd = (Isbs*(((T0.val()-(XExpBVS/T0.val()))+XExpBVS)-1.0));
4567  SslpFwd = ((Isbs*(T0.val()+(XExpBVS/T0.val())))/Nvtms);
4568  T2 = (model_.analogFunctions.hypsmooth<AdmsFadType>((((model_.IJTHSREV)/Isbs)-10.0),1.0E-3)+10.0);
4569  VjsmRev = ((-(model_.BVS))-(Nvtms*model_.analogFunctions.lln(((T2.val()-1.0)/(model_.XJBVS)))));
4570  T1 = ((model_.XJBVS)*model_.analogFunctions.lexp<AdmsFadType>(((-((model_.BVS)+VjsmRev))/Nvtms)));
4571  IVjsmRev = (Isbs*(1.0+T1.val()));
4572  SslpRev = (((-Isbs)*T1.val())/Nvtms);
4573  }
4574  Isbd = (((ADEJ*JSD_t)+(PDEJ*JSWD_t))+((Weff0*NFINtotal)*JSWGD_t));
4575  if ((Isbd>0.0))
4576  {
4577  Nvtmd = (Vtm*(model_.NJD));
4578  XExpBVD = (model_.analogFunctions.lexp(((-(model_.BVD))/Nvtmd))*(model_.XJBVD));
4579  T2 = std::max(((model_.IJTHDFWD)/Isbd),10.0);
4580  Tb = ((1.0+T2)-XExpBVD);
4581  VjdmFwd = (Nvtmd*model_.analogFunctions.lln((0.5*(Tb.val()+sqrt(((Tb.val()*Tb.val())+(4*XExpBVD)))))));
4582  T0 = model_.analogFunctions.lexp<AdmsFadType>((VjdmFwd/Nvtmd));
4583  IVjdmFwd = (Isbd*(((T0.val()-(XExpBVD/T0.val()))+XExpBVD)-1.0));
4584  DslpFwd = ((Isbd*(T0.val()+(XExpBVD/T0.val())))/Nvtmd);
4585  T2 = (model_.analogFunctions.hypsmooth<AdmsFadType>((((model_.IJTHDREV)/Isbd)-10.0),1.0E-3)+10.0);
4586  VjdmRev = ((-(model_.BVD))-(Nvtmd*model_.analogFunctions.lln(((T2.val()-1.0)/(model_.XJBVD)))));
4587  T1 = ((model_.XJBVD)*model_.analogFunctions.lexp<AdmsFadType>(((-((model_.BVD)+VjdmRev))/Nvtmd)));
4588  IVjdmRev = (Isbd*(1.0+T1.val()));
4589  DslpRev = (((-Isbd)*T1.val())/Nvtmd);
4590  }
4591  Czbs = (CJS_t*ASEJ);
4592  Czbssw = (CJSWS_t*PSEJ);
4593  Czbsswg = ((CJSWGS_t*Weff0)*NFINtotal);
4594  Czbd = (CJD_t*ADEJ);
4595  Czbdsw = (CJSWD_t*PDEJ);
4596  Czbdswg = ((CJSWGD_t*Weff0)*NFINtotal);
4597  }
4598  T0 = ((Eg/Vtm)*(TRatio-1.0));
4599  T1 = (T0/NTGEN_i);
4600  igentemp = model_.analogFunctions.lexp(T1.val());
4601  }
4602  // End block CMGTempDepCalc
4603  if ((!initialized))
4604  {
4605  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;
4606  }
4607  else
4608  {
4609  vgs_noswap = (devsign*(probeVars[admsProbeID_V_g_si]));
4610  vds_noswap = (devsign*(probeVars[admsProbeID_V_di_si]));
4611  vgd_noswap = (devsign*(probeVars[admsProbeID_V_g_di]));
4612  ves_jct = (devsign*(probeVars[admsProbeID_V_e_si]));
4613  ved_jct = (devsign*(probeVars[admsProbeID_V_e_di]));
4614  vge = (devsign*(probeVars[admsProbeID_V_g_e]));
4615  sigvds = 1.0;
4616  if ((vds_noswap<0.0))
4617  {
4618  sigvds = (-1.0);
4619  vgs = (vgs_noswap-vds_noswap);
4620  vds = ((-1.0)*vds_noswap);
4621  vgd = (vgd_noswap+vds_noswap);
4622  ves = ved_jct;
4623  }
4624  else
4625  {
4626  vgs = vgs_noswap;
4627  vds = vds_noswap;
4628  vgd = vgd_noswap;
4629  ves = ves_jct;
4630  }
4631  vgsfb = (vgs-deltaPhi);
4632  etaiv = 0.0;
4633  Qes = 0.0;
4634  Qesj = 0.0;
4635  Qeg = 0.0;
4636  Qed = 0.0;
4637  Qedj = 0.0;
4638  vdsx = (sqrt(((vds*vds)+0.01))-0.1);
4639  if (((model_.BULKMOD)!=0))
4640  {
4641  vesx = (ves-(0.5*(vds-vdsx)));
4642  vesmax = (0.95*PHIBE_i);
4643  T2 = ((vesmax-vesx)-1.0E-3);
4644  veseff = (vesmax-(0.5*(T2+sqrt(((T2*T2)+(0.004*vesmax))))));
4645  }
4646  T0 = tanh(((0.6*vds_noswap)/Vtm));
4647  wf = (0.5+(0.5*T0));
4648  wr = (1.0-wf);
4649  if (((model_.ASYMMOD)!=0))
4650  {
4651  CDSCD_a = ((CDSCDR_i*wr)+(CDSCD_i*wf));
4652  ETA0_a = ((ETA0R_t*wr)+(ETA0_t*wf));
4653  PDIBL1_a = ((PDIBL1R_i*wr)+(PDIBL1_i*wf));
4654  MEXP_a = ((MEXPR_t*wr)+(MEXP_t*wf));
4655  PTWG_a = ((PTWGR_t*wr)+(PTWG_t*wf));
4656  VSAT1_a = ((VSAT1R_t*wr)+(VSAT1_t*wf));
4657  RSDR_a = ((RSDRR_t*wr)+(RSDR_t*wf));
4658  RDDR_a = ((RDDRR_t*wr)+(RDDR_t*wf));
4659  }
4660  else
4661  {
4662  CDSCD_a = CDSCD_i;
4663  ETA0_a = ETA0_t;
4664  PDIBL1_a = PDIBL1_i;
4665  MEXP_a = MEXP_t;
4666  PTWG_a = PTWG_t;
4667  VSAT1_a = VSAT1_t;
4668  RSDR_a = RSDR_t;
4669  RDDR_a = RDDR_t;
4670  }
4671  inv_MEXP = (1.0/MEXP_a);
4672  phist = ((0.4+phib)+PHIN_i);
4673  if (((model_.GEOMOD)!=3))
4674  {
4675  T1 = (((2*cox)*csi)/((2*csi)+cox));
4676  }
4677  else
4678  {
4679  T1 = cox;
4680  }
4681  cdsc = (Theta_SW*(CDSC_i+(CDSCD_a*vdsx)));
4682  nVtm = ((Vtm*ThetaSS)*(1.0+(((CIT_i/TRatio)+cdsc)/T1)));
4683  dvth_vtroll = (((-DVT0_i)*Theta_SCE)*(vbi-phist));
4684  dvth_dibl = ((((-ETA0_a)*Theta_DIBL)*vdsx)+((model_.DVTP0)*pow(vdsx,(model_.DVTP1))));
4685  dvth_rsce = ((K1RSCE_i*Theta_RSCE)*sqrt(phist));
4686  dvth_all = ((((dvth_vtroll+dvth_dibl)+dvth_rsce)+dvth_temp)+DVTSHIFT_i);
4687  vgsfb = (vgsfb-dvth_all);
4688  if (((model_.GEOMOD)!=3))
4689  {
4690  F1 = ((0.5*model_.analogFunctions.lln<AdmsFadType>((((2*epssub)*nVtm)/(1.60219e-19*Nc))))+F2);
4691  if (((model_.COREMOD)!=0))
4692  {
4693  vgsfb = (vgsfb-((((0.5*1.60219e-19)*nbody)*TFIN)/cox));
4694  }
4695  else
4696  {
4697  q0 = ((((5.0*nVtm)*(epssub/TFIN))+(2.0*Qbul))/cox);
4698  }
4699  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4700  {
4701  F1_acc = ((0.5*model_.analogFunctions.lln((((2*epssub)*Vtm)/(1.60219e-19*Nc))))+F2);
4702  }
4703  cdop = 1.0;
4704  }
4705  else
4706  {
4707  q0 = ((2.0*nVtm)*r1);
4708  T0 = (((1.60219e-19*nbody)*R)/cox);
4709  vtdop = (((-nVtm)*model_.analogFunctions.lln<AdmsFadType>((nVtm/T0)))-(nVtm*model_.analogFunctions.lln<AdmsFadType>((1-model_.analogFunctions.lexp<AdmsFadType>(((-T0)/((2.0*r1)*nVtm)))))));
4710  cdop = ((2.0*r1)*model_.analogFunctions.lexp<AdmsFadType>(((-vtdop)/nVtm)));
4711  vt0 = ((((0.5*T0)+(((2.0*phib)*nVtm)/Vtm))-(nVtm*model_.analogFunctions.lln<AdmsFadType>(((0.5*T0)/nVtm))))+vtdop);
4712  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4713  {
4714  q0_acc = ((2.0*Vtm)*r1_acc);
4715  T0 = (((1.60219e-19*ni)*R)/cox_acc);
4716  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)))))));
4717  cdop_acc = ((2.0*r1_acc)*model_.analogFunctions.lexp<AdmsFadType>(((-vtdop_acc)/Vtm)));
4718  vt0_acc = (((0.5*T0)-(Vtm*model_.analogFunctions.lln<AdmsFadType>(((0.5*T0)/Vtm))))+vtdop_acc);
4719  }
4720  }
4721  if (((model_.GEOMOD)!=3))
4722  {
4723  T0 = (-(dvch_qm+(nVtm*model_.analogFunctions.lln<AdmsFadType>((((2.0*cox)*(model_.Imin))/((((beta0*nVtm)*1.60219e-19)*Nc)*TFIN))))));
4724  T1 = ((vgsfb+T0)+(model_.DELVTRAND));
4725  vgsfbeff = (model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-T0);
4726  }
4727  else
4728  {
4729  T0 = (-(dvch_qm+(nVtm*model_.analogFunctions.lln<AdmsFadType>((((2.0*cox)*(model_.Imin))/((((beta0*nVtm)*1.60219e-19)*ni)*R))))));
4730  T1 = ((((vgsfb+(model_.DELVTRAND))+T0)+(0.5*Eg))+((phib*nVtm)/Vtm));
4731  vgsfbeff = ((model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-T0)-vt0);
4732  }
4733  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4734  {
4735  T1 = ((((-vge)+deltaPhi)-(0.5*Eg))+(model_.DELVFBACC));
4736  if (((model_.GEOMOD)!=3))
4737  {
4738  vgsfbeff_acc = (model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-(0.5*Eg));
4739  }
4740  else
4741  {
4742  vgsfbeff_acc = (model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-4)-vt0_acc);
4743  }
4744  }
4745  if (((model_.GEOMOD)!=3))
4746  {
4747  T14 = (2.0*nVtm);
4748  if (((model_.COREMOD)==0))
4749  {
4750  aab = (phibulk/(nVtm*nVtm));
4751  T0 = (phibulk*aab);
4752  T11 = (((r1*phibulk)/nVtm)+(r2*T0));
4753  T12 = model_.analogFunctions.lexp<AdmsFadType>((phibulk/(2.0*nVtm)));
4754  T13 = (T12*T12);
4755  }
4756  }
4757  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
4758  {
4759  if (((model_.GEOMOD)!=3))
4760  {
4761  F0 = ((vgsfbeff_acc/(2.0*Vtm))-F1_acc);
4762  expff = model_.analogFunctions.lexp<AdmsFadType>(F0);
4763  z1 = atan(expff);
4764  if ((F0>80.0))
4765  {
4766  T0 = F0;
4767  }
4768  else
4769  {
4770  T0 = model_.analogFunctions.lln<AdmsFadType>((1.0+expff));
4771  }
4772  z2 = atan(((2*T0)*Inv_r1pi_acc));
4773  g0 = min(z1,max(z2,1e-15));
4774  if (((g0>g0max)||(g0<g0min)))
4775  {
4776  if ((g0>g0max))
4777  {
4778  g0 = g0max;
4779  }
4780  else
4781  {
4782  g0 = g0min;
4783  }
4784  }
4785  tang0 = tan(g0);
4786  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4787  secg0sq = ((tang0*tang0)+1.0);
4788  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4789  inv_g0 = (1.0/g0);
4790  T0 = (g0*tang0);
4791  e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4792  e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4793  e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4794  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))));
4795  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)))));
4796  if (((g0>g0max)||(g0<g0min)))
4797  {
4798  if ((g0>g0max))
4799  {
4800  g0 = g0max;
4801  }
4802  else
4803  {
4804  g0 = g0min;
4805  }
4806  }
4807  tang0 = tan(g0);
4808  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4809  secg0sq = ((tang0*tang0)+1.0);
4810  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4811  inv_g0 = (1.0/g0);
4812  T0 = (g0*tang0);
4813  e0 = (((lng0-lncosg0)+(r1_acc*T0))-F0);
4814  e1 = ((inv_g0+((secg0sq*g0)*r1_acc))+(tang0*(1.0+r1_acc)));
4815  e2 = ((secg0sq*(1.0+(2.0*(r1_acc+(T0*r1_acc)))))-(inv_g0*inv_g0));
4816  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))));
4817  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)))));
4818  if (((g0>g0max)||(g0<g0min)))
4819  {
4820  if ((g0>g0max))
4821  {
4822  g0 = g0max;
4823  }
4824  else
4825  {
4826  g0 = g0min;
4827  }
4828  }
4829  g0a = g0;
4830  tang0a = tan(g0a);
4831  qi_acc = (vgsfbeff_acc-((2.0*Vtm)*((model_.analogFunctions.lln<AdmsFadType>(g0a)+(0.5*model_.analogFunctions.lln<AdmsFadType>((1.0+(tang0a*tang0a)))))+F1_acc)));
4832  }
4833  else
4834  {
4835  F0 = (vgsfbeff_acc/(2.0*Vtm));
4836  if ((F0>80.0))
4837  {
4838  T0 = F0;
4839  }
4840  else
4841  {
4843  }
4844  if ((F0<(-10)))
4845  {
4846  g0 = model_.analogFunctions.lexp<AdmsFadType>((2*F0));
4847  }
4848  else
4849  {
4850  if ((F0>10))
4851  {
4852  g0 = (F0/r1_acc);
4853  }
4854  else
4855  {
4856  g0 = ((sqrt((0.25+(((r1_acc*r1_acc)*T0)*T0)))-0.5)/(r1_acc*r1_acc));
4857  }
4858  }
4859  if (((g0>g0max)||(g0<g0min)))
4860  {
4861  if ((g0>g0max))
4862  {
4863  g0 = g0max;
4864  }
4865  else
4866  {
4867  g0 = g0min;
4868  }
4869  }
4870  if ((F0<(-50)))
4871  {
4872  g0a = g0;
4873  }
4874  else
4875  {
4876  inv_g0 = (1.0/g0);
4877  inv_g0sq = (inv_g0*inv_g0);
4878  T0 = (1+(cdop_acc*g0));
4879  T1 = (cdop_acc/T0);
4880  T2 = (T1*T1);
4881  e0 = ((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1_acc*g0))-F0);
4882  e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4883  e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4884  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4885  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)))));
4886  if (((g0>g0max)||(g0<g0min)))
4887  {
4888  if ((g0>g0max))
4889  {
4890  g0 = g0max;
4891  }
4892  else
4893  {
4894  g0 = g0min;
4895  }
4896  }
4897  inv_g0 = (1.0/g0);
4898  inv_g0sq = (inv_g0*inv_g0);
4899  T0 = (1+(cdop_acc*g0));
4900  T1 = (cdop_acc/T0);
4901  T2 = (T1*T1);
4902  e0 = ((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1_acc*g0))-F0);
4903  e1 = (((0.5*inv_g0)+(0.5*T1))+r1_acc);
4904  e2 = (((-0.5)*inv_g0sq)-(0.5*T2));
4905  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
4906  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)))));
4907  if (((g0>g0max)||(g0<g0min)))
4908  {
4909  if ((g0>g0max))
4910  {
4911  g0 = g0max;
4912  }
4913  else
4914  {
4915  g0 = g0min;
4916  }
4917  }
4918  g0a = g0;
4919  }
4920  qi_acc = (q0_acc*g0a);
4921  }
4922  }
4923  vch = (+dvch_qm);
4924  if (((model_.GEOMOD)!=3))
4925  {
4926  if (((model_.COREMOD)!=0))
4927  {
4928  F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
4929  expff = model_.analogFunctions.lexp<AdmsFadType>(F0);
4930  z1 = atan(expff);
4931  if ((F0>80.0))
4932  {
4933  T0 = F0;
4934  }
4935  else
4936  {
4937  T0 = model_.analogFunctions.lln<AdmsFadType>((1.0+expff));
4938  }
4939  z2 = atan(((2*T0)*Inv_r1pi));
4940  g0 = min(z1,max(z2,1e-15));
4941  if (((g0>g0max)||(g0<g0min)))
4942  {
4943  if ((g0>g0max))
4944  {
4945  g0 = g0max;
4946  }
4947  else
4948  {
4949  g0 = g0min;
4950  }
4951  }
4952  tang0 = tan(g0);
4953  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4954  secg0sq = ((tang0*tang0)+1.0);
4955  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4956  inv_g0 = (1.0/g0);
4957  T0 = (g0*tang0);
4958  T1 = (T0*T0);
4959  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4960  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4961  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)));
4962  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))))));
4963  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)))));
4964  if (((g0>g0max)||(g0<g0min)))
4965  {
4966  if ((g0>g0max))
4967  {
4968  g0 = g0max;
4969  }
4970  else
4971  {
4972  g0 = g0min;
4973  }
4974  }
4975  tang0 = tan(g0);
4976  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
4977  secg0sq = ((tang0*tang0)+1.0);
4978  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
4979  inv_g0 = (1.0/g0);
4980  T0 = (g0*tang0);
4981  T1 = (T0*T0);
4982  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
4983  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
4984  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)));
4985  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))))));
4986  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)))));
4987  if (((g0>g0max)||(g0<g0min)))
4988  {
4989  if ((g0>g0max))
4990  {
4991  g0 = g0max;
4992  }
4993  else
4994  {
4995  g0 = g0min;
4996  }
4997  }
4998  g0s = g0;
4999  tang0s = tan(g0s);
5000  phis = (vch+((2.0*nVtm)*((model_.analogFunctions.lln<AdmsFadType>(g0s)+(0.5*model_.analogFunctions.lln<AdmsFadType>((1.0+(tang0s*tang0s)))))+F1)));
5001  }
5002  else
5003  {
5004  F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
5005  T0 = (phibulk*aab);
5006  T1 = (phibulk/T14);
5007  z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
5008  guessA = ((2.0*r1)*T1);
5009  guessA = (guessA/(1.0-exp((-guessA))));
5010  z2 = (z1+log((sqrt(guessA)/r1)));
5011  if (((F0-z2)>((-0.3)/T14)))
5012  {
5013  if (((F0-z2)<20))
5014  {
5015  T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5016  }
5017  else
5018  {
5019  T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5020  }
5021  T3 = pow(T2,2.0);
5022  guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5023  }
5024  else
5025  {
5026  guessB = exp(((F0-z1)-T1));
5027  }
5028  g0 = guessB;
5029  if ((g0>1e-60))
5030  {
5031  g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5032  tang0 = tan(g0);
5033  cosg0 = cos(g0);
5034  secg0 = (1.0/cosg0);
5035  secg0sq = (secg0*secg0);
5036  lng0 = (-log((1.0/g0)));
5037  T0 = (1.0+(g0*tang0));
5038  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5039  T2 = sqrt(T1);
5040  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5041  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))));
5042  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5043  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5044  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5045  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5046  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));
5047  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))))));
5048  tang0 = tan(g0);
5049  cosg0 = cos(g0);
5050  secg0 = (1.0/cosg0);
5051  secg0sq = (secg0*secg0);
5052  lng0 = (-log((1.0/g0)));
5053  T0 = (1.0+(g0*tang0));
5054  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5055  T2 = sqrt(T1);
5056  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5057  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))));
5058  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5059  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5060  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5061  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5062  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));
5063  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))))));
5064  lng0 = (-log((1.0/g0)));
5065  }
5066  else
5067  {
5068  if ((g0>=1e-300))
5069  {
5070  lng0 = (-log((1.0/g0)));
5071  }
5072  else
5073  {
5074  if (((F0-z2)>((-0.3)/T14)))
5075  {
5076  lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5077  }
5078  else
5079  {
5080  lng0 = ((F0-z1)-T1);
5081  }
5082  }
5083  }
5084  phis = ((vch+(T14*((lng0-model_.analogFunctions.lln<AdmsFadType>(cos(g0)))+F1)))+phibulk);
5085  }
5086  }
5087  else
5088  {
5089  F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5090  if ((F0<(-10)))
5091  {
5092  g0 = model_.analogFunctions.lexp<AdmsFadType>((2.0*F0));
5093  }
5094  else
5095  {
5096  if ((F0>10))
5097  {
5098  g0 = (F0/r1);
5099  }
5100  else
5101  {
5103  g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5104  }
5105  }
5106  if (((g0>g0max)||(g0<g0min)))
5107  {
5108  if ((g0>g0max))
5109  {
5110  g0 = g0max;
5111  }
5112  else
5113  {
5114  g0 = g0min;
5115  }
5116  }
5117  if ((F0<(-50)))
5118  {
5119  g0s = g0;
5120  }
5121  else
5122  {
5123  inv_g0 = (1.0/g0);
5124  inv_g0sq = (inv_g0*inv_g0);
5125  T0 = (1+(cdop*g0));
5126  T1 = (cdop/T0);
5127  T2 = (T1*T1);
5128  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5129  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5130  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5131  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5132  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)))));
5133  if (((g0>g0max)||(g0<g0min)))
5134  {
5135  if ((g0>g0max))
5136  {
5137  g0 = g0max;
5138  }
5139  else
5140  {
5141  g0 = g0min;
5142  }
5143  }
5144  inv_g0 = (1.0/g0);
5145  inv_g0sq = (inv_g0*inv_g0);
5146  T0 = (1+(cdop*g0));
5147  T1 = (cdop/T0);
5148  T2 = (T1*T1);
5149  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5150  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5151  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2.0*r2));
5152  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5153  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)))));
5154  if (((g0>g0max)||(g0<g0min)))
5155  {
5156  if ((g0>g0max))
5157  {
5158  g0 = g0max;
5159  }
5160  else
5161  {
5162  g0 = g0min;
5163  }
5164  }
5165  g0s = g0;
5166  }
5167  vpolys = ((((2.0*nVtm)*r2)*g0s)*g0s);
5168  phis = ((vgsfbeff-(((2.0*nVtm)*r1)*g0s))-vpolys);
5169  qis = (q0*g0s);
5170  }
5171  if (((model_.GEOMOD)!=3))
5172  {
5173  if ((NGATE_i>0))
5174  {
5175  T0 = (sqrt((1.0+((vgsfbeff-phis)/vpoly0)))-1.0);
5176  vpolys = ((vpoly0*T0)*T0);
5177  }
5178  else
5179  {
5180  vpolys = 0;
5181  }
5182  if (((model_.COREMOD)!=0))
5183  {
5184  qis = ((vgsfbeff-phis)-vpolys);
5185  }
5186  else
5187  {
5188  qis = (((vgsfbeff-phis)-qbs)-vpolys);
5189  }
5190  }
5191  Eeffs = (EeffFactor*(qbs+(eta_mu*qis)));
5192  qb0 = (1.0e-2/cox);
5193  T2 = pow((0.5*(1.0+fabs((qis/qb0)))),UCS_t);
5194  if (((model_.BULKMOD)!=0))
5195  {
5196  T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5197  }
5198  else
5199  {
5200  T3 = ((UA_t*pow(fabs(Eeffs),EU_i))+(UD_t/T2));
5201  }
5202  Dmobs = (1.0+T3);
5203  Dmobs = (Dmobs/(model_.U0MULT));
5204  if (((model_.RDSMOD)!=0))
5205  {
5206  Rdss = 0.0;
5207  }
5208  else
5209  {
5210  T4 = (1.0+(PRWGS_i*qis));
5211  T1 = (1.0/T4);
5212  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5213  Rdss = ((((RDSWMIN_i+(RDSW_i*T0))*WeffWRFactor)*NFINtotal)*rdstemp);
5214  }
5215  Esat = (((2*VSAT_t)/u0)*Dmobs);
5216  EsatL = (Esat*Leff);
5217  T6 = (KSATIV_i*((vgsfbeff-phis)+(2*Vtm)));
5218  if ((Rdss==0))
5219  {
5220  Vdsat = ((EsatL*T6)/(EsatL+T6));
5221  }
5222  else
5223  {
5224  WVCox = ((Weff0*VSAT_t)*cox);
5225  T0 = (WVCox*Rdss);
5226  Ta = (2*T0);
5227  Tb = ((T6+EsatL)+((3*T6)*T0));
5228  Tc = (T6*(EsatL+((2*T6)*T0)));
5229  Vdsat = ((Tb-sqrt(((Tb*Tb)-((2*Ta)*Tc))))/Ta);
5230  }
5231  Vdsat = (model_.analogFunctions.hypsmooth<AdmsFadType>((Vdsat-1.0E-3),1.0E-5)+1.0E-3);
5232  T7 = pow((vds/Vdsat),MEXP_a);
5233  T8 = pow((1.0+T7),inv_MEXP);
5234  Vdseff = (vds/T8);
5235  if ((Vdseff>vds))
5236  {
5237  Vdseff = vds;
5238  }
5239  vch = (Vdseff+dvch_qm);
5240  if (((model_.GEOMOD)!=3))
5241  {
5242  if (((model_.COREMOD)!=0))
5243  {
5244  F0 = (((vgsfbeff-vch)/(2.0*nVtm))-F1);
5245  expff = model_.analogFunctions.lexp<AdmsFadType>(F0);
5246  z1 = atan(expff);
5247  if ((F0>80.0))
5248  {
5249  T0 = F0;
5250  }
5251  else
5252  {
5253  T0 = model_.analogFunctions.lln<AdmsFadType>((1.0+expff));
5254  }
5255  z2 = atan(((2*T0)*Inv_r1pi));
5256  g0 = min(z1,max(z2,1e-15));
5257  if (((g0>g0max)||(g0<g0min)))
5258  {
5259  if ((g0>g0max))
5260  {
5261  g0 = g0max;
5262  }
5263  else
5264  {
5265  g0 = g0min;
5266  }
5267  }
5268  tang0 = tan(g0);
5269  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
5270  secg0sq = ((tang0*tang0)+1.0);
5271  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
5272  inv_g0 = (1.0/g0);
5273  T0 = (g0*tang0);
5274  T1 = (T0*T0);
5275  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5276  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5277  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)));
5278  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))))));
5279  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)))));
5280  if (((g0>g0max)||(g0<g0min)))
5281  {
5282  if ((g0>g0max))
5283  {
5284  g0 = g0max;
5285  }
5286  else
5287  {
5288  g0 = g0min;
5289  }
5290  }
5291  tang0 = tan(g0);
5292  lng0 = model_.analogFunctions.lln<AdmsFadType>(g0);
5293  secg0sq = ((tang0*tang0)+1.0);
5294  lncosg0 = ((-0.5)*model_.analogFunctions.lln<AdmsFadType>(secg0sq));
5295  inv_g0 = (1.0/g0);
5296  T0 = (g0*tang0);
5297  T1 = (T0*T0);
5298  e0 = ((((lng0-lncosg0)+(r1*T0))+(r2*T1))-F0);
5299  e1 = ((inv_g0+((secg0sq*g0)*(r1+((2.0*r2)*T0))))+(tang0*(1.0+(r1+((2.0*r2)*T0)))));
5300  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)));
5301  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))))));
5302  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)))));
5303  if (((g0>g0max)||(g0<g0min)))
5304  {
5305  if ((g0>g0max))
5306  {
5307  g0 = g0max;
5308  }
5309  else
5310  {
5311  g0 = g0min;
5312  }
5313  }
5314  g0d = g0;
5315  tang0d = tan(g0d);
5316  phid = (vch+((2.0*nVtm)*((model_.analogFunctions.lln<AdmsFadType>(g0d)+(0.5*model_.analogFunctions.lln<AdmsFadType>((1.0+(tang0d*tang0d)))))+F1)));
5317  }
5318  else
5319  {
5320  F0 = ((((vgsfbeff-phibulk)-vch)/T14)-F1);
5321  T0 = (phibulk*aab);
5322  T1 = (phibulk/T14);
5323  z1 = ((((2.0*r1)-1.0)*T1)+(r2*T0));
5324  guessA = ((2.0*r1)*T1);
5325  guessA = (guessA/(1.0-exp((-guessA))));
5326  z2 = (z1+log((sqrt(guessA)/r1)));
5327  if (((F0-z2)>((-0.3)/T14)))
5328  {
5329  if (((F0-z2)<20))
5330  {
5331  T2 = (((0.5/guessA)*log((1.0+exp((2.0*(F0-z2))))))+1.0);
5332  }
5333  else
5334  {
5335  T2 = (((0.5/guessA)*(2.0*(F0-z2)))+1.0);
5336  }
5337  T3 = pow(T2,2.0);
5338  guessB = (((guessA/r1)*sqrt((T3-1.0)))*exp((-T1)));
5339  }
5340  else
5341  {
5342  guessB = exp(((F0-z1)-T1));
5343  }
5344  g0 = guessB;
5345  if ((g0>1e-60))
5346  {
5347  g0 = (1.0/((1.0/g0)+(1.0/(0.5*3.14159265358979323846))));
5348  tang0 = tan(g0);
5349  cosg0 = cos(g0);
5350  secg0 = (1.0/cosg0);
5351  secg0sq = (secg0*secg0);
5352  lng0 = (-log((1.0/g0)));
5353  T0 = (1.0+(g0*tang0));
5354  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5355  T2 = sqrt(T1);
5356  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5357  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))));
5358  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5359  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5360  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5361  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5362  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));
5363  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))))));
5364  tang0 = tan(g0);
5365  cosg0 = cos(g0);
5366  secg0 = (1.0/cosg0);
5367  secg0sq = (secg0*secg0);
5368  lng0 = (-log((1.0/g0)));
5369  T0 = (1.0+(g0*tang0));
5370  T1 = (((g0*g0)*((T13*secg0sq)-1.0))+(aab*(phibulk-(T14*model_.analogFunctions.lln<AdmsFadType>(cosg0)))));
5371  T2 = sqrt(T1);
5372  T3 = ((((-2.0)*g0)+((aab*T14)*tang0))+((((2.0*T13)*g0)*secg0sq)*T0));
5373  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))));
5374  T5 = (((2.0*tang0)*T4)+(4.0*(((((((3.0*T13)*g0)*secg0sq)*secg0sq)*T0)+tang0)+((((2.0*T13)*secg0sq)*T0)*tang0))));
5375  T7 = ((((lng0-model_.analogFunctions.lln<AdmsFadType>(cosg0))+(r2*T1))+(r1*T2))-F0);
5376  T8 = ((((1.0/g0)+tang0)+(r2*T3))+((r1*T3)/(2.0*T2)));
5377  T9 = ((((((-1.0)/(g0*g0))+secg0sq)-(((r1*T3)*T3)/(((4*T2)*T2)*T2)))+((r1*T4)/(2.0*T2)))+(r2*T4));
5378  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));
5379  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))))));
5380  lng0 = (-log((1.0/g0)));
5381  }
5382  else
5383  {
5384  if ((g0>=1e-300))
5385  {
5386  lng0 = (-log((1.0/g0)));
5387  }
5388  else
5389  {
5390  if (((F0-z2)>((-0.3)/T14)))
5391  {
5392  lng0 = ((-log((1.0/((guessA/r1)*sqrt((T3-1.0))))))-T1);
5393  }
5394  else
5395  {
5396  lng0 = ((F0-z1)-T1);
5397  }
5398  }
5399  }
5400  phid = ((vch+(T14*((lng0-model_.analogFunctions.lln<AdmsFadType>(cos(g0)))+F1)))+phibulk);
5401  }
5402  }
5403  else
5404  {
5405  F0 = ((vgsfbeff-vch)/(2.0*nVtm));
5406  if ((F0<(-10)))
5407  {
5408  g0 = model_.analogFunctions.lexp<AdmsFadType>((2.0*F0));
5409  }
5410  else
5411  {
5412  if ((F0>10))
5413  {
5414  g0 = (F0/r1);
5415  }
5416  else
5417  {
5419  g0 = ((sqrt((0.25+(((r1*r1)*T0)*T0)))-0.5)/(r1*r1));
5420  }
5421  }
5422  if (((g0>g0max)||(g0<g0min)))
5423  {
5424  if ((g0>g0max))
5425  {
5426  g0 = g0max;
5427  }
5428  else
5429  {
5430  g0 = g0min;
5431  }
5432  }
5433  if ((F0<(-50)))
5434  {
5435  g0d = g0;
5436  }
5437  else
5438  {
5439  inv_g0 = (1.0/g0);
5440  inv_g0sq = (inv_g0*inv_g0);
5441  T0 = (1+(cdop*g0));
5442  T1 = (cdop/T0);
5443  T2 = (T1*T1);
5444  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5445  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5446  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5447  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5448  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)))));
5449  if (((g0>g0max)||(g0<g0min)))
5450  {
5451  if ((g0>g0max))
5452  {
5453  g0 = g0max;
5454  }
5455  else
5456  {
5457  g0 = g0min;
5458  }
5459  }
5460  inv_g0 = (1.0/g0);
5461  inv_g0sq = (inv_g0*inv_g0);
5462  T0 = (1+(cdop*g0));
5463  T1 = (cdop/T0);
5464  T2 = (T1*T1);
5465  e0 = (((((0.5*model_.analogFunctions.lln<AdmsFadType>(g0))+(0.5*model_.analogFunctions.lln<AdmsFadType>(T0)))+(r1*g0))+((r2*g0)*g0))-F0);
5466  e1 = ((((0.5*inv_g0)+(0.5*T1))+r1)+((2*r2)*g0));
5467  e2 = ((((-0.5)*inv_g0sq)-(0.5*T2))+(2*r2));
5468  e3 = ((inv_g0*inv_g0sq)+(T2*T1));
5469  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)))));
5470  if (((g0>g0max)||(g0<g0min)))
5471  {
5472  if ((g0>g0max))
5473  {
5474  g0 = g0max;
5475  }
5476  else
5477  {
5478  g0 = g0min;
5479  }
5480  }
5481  g0d = g0;
5482  }
5483  vpolyd = ((((2*nVtm)*r2)*g0d)*g0d);
5484  phid = ((vgsfbeff-(((2*nVtm)*r1)*g0d))-vpolyd);
5485  qid = (q0*g0d);
5486  }
5487  qba = qbs;
5488  if (((model_.GEOMOD)!=3))
5489  {
5490  if ((NGATE_i>0))
5491  {
5492  T0 = (sqrt((1+((vgsfbeff-phid)/vpoly0)))-1);
5493  vpolyd = ((vpoly0*T0)*T0);
5494  }
5495  else
5496  {
5497  vpolyd = 0;
5498  }
5499  if (((model_.COREMOD)!=0))
5500  {
5501  qid = ((vgsfbeff-phid)-vpolyd);
5502  }
5503  else
5504  {
5505  qid = (((vgsfbeff-phid)-qbs)-vpolyd);
5506  }
5507  }
5508  qia = (0.5*(qis+qid));
5509  dqi = (qis-qid);
5510  T0 = (pow(Vdseff,2.0)/6.25e-4);
5511  if (((model_.CHARGEWF)!=0))
5512  {
5513  qia2 = ((0.5*(qis+qid))+((((model_.CHARGEWF)*(1.0-model_.analogFunctions.lexp<AdmsFadType>((-T0))))*0.5)*dqi));
5514  }
5515  else
5516  {
5517  qia2 = (0.5*(qis+qid));
5518  }
5519  if (((QMTCENIV_i>0.0)||(QMTCENCV_i>0.0)))
5520  {
5521  T4 = ((qia+((model_.ETAQM)*qba))/(model_.QM0));
5522  T5 = (1.0+pow(T4,(model_.PQM)));
5523  Tcen = (Tcen0/T5);
5524  if ( (model_.GEOMOD) == (0))
5525  {
5526  Weff = Weff0;
5527  WeffCV = WeffCV0;
5528  }
5529  else
5530  if ( (model_.GEOMOD) == (1))
5531  {
5532  Weff = (Weff0-((4.0*QMTCENIV_i)*Tcen));
5533  WeffCV = (WeffCV0-((4.0*QMTCENCV_i)*Tcen));
5534  }
5535  else
5536  if ( (model_.GEOMOD) == (2))
5537  {
5538  Weff = (Weff0-((8.0*QMTCENIV_i)*Tcen));
5539  WeffCV = (WeffCV0-((8.0*QMTCENCV_i)*Tcen));
5540  }
5541  else
5542  if ( (model_.GEOMOD) == (3))
5543  {
5544  Weff = (Weff0-(((2.0*3.14159265358979323846)*QMTCENIV_i)*Tcen));
5545  WeffCV = (WeffCV0-(((2.0*3.14159265358979323846)*QMTCENCV_i)*Tcen));
5546  }
5547  else
5548  {
5549  // no default
5550  }
5551  if (((model_.GEOMOD)!=3))
5552  {
5553  coxeff = ((3.9*8.8542e-12)/((((model_.TOXP)*3.9)/(model_.EPSROX))+((Tcen*QMTCENCV_i)/epsratio)));
5554  }
5555  else
5556  {
5557  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)))));
5558  }
5559  }
5560  else
5561  {
5562  Weff = Weff0;
5563  WeffCV = WeffCV0;
5564  coxeff = cox;
5565  }
5566  if (((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0))&&(QMTCENCVA_i!=0)))
5567  {
5568  T6 = (1.0+pow((qi_acc/(model_.QM0ACC)),(model_.PQMACC)));
5569  Tcen = (Tcen0/T6);
5570  if (((model_.GEOMOD)!=3))
5571  {
5572  cox_acc = ((3.9*8.8542e-12)/((((model_.TOXP)*3.9)/(model_.EPSROX))+((Tcen*QMTCENCVA_i)/epsratio)));
5573  }
5574  else
5575  {
5576  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)))));
5577  }
5578  }
5579  beta = (((u0*cox)*Weff)/Leff);
5580  Eeffm = (EeffFactor*(qba+(eta_mu*qia2)));
5581  T2 = pow((0.5*(1.0+fabs((qia2/qb0)))),UCS_t);
5582  if (((model_.BULKMOD)!=0))
5583  {
5584  T3 = (((UA_t+(UC_t*veseff))*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5585  }
5586  else
5587  {
5588  T3 = ((UA_t*pow(fabs(Eeffm),EU_i))+(UD_t/T2));
5589  }
5590  Dmob = (1.0+T3);
5591  Dmob = (Dmob/(model_.U0MULT));
5592  ueff = (u0/Dmob);
5593  Eeffm_cv = (EeffFactor*(qba+(eta_mu_cv*qia2)));
5594  T3 = ((UA_t*pow(fabs(Eeffm_cv),EU_i))+(UD_t/T2));
5595  Dmob_cv = (1.0+T3);
5596  Dmob_cv = (Dmob_cv/(model_.U0MULT));
5597  tmp = (((DROUT_i*Leff)/scl)+1.0e-6);
5598  if ((tmp<40.0))
5599  {
5600  DIBLfactor = (((0.5*PDIBL1_a)/(cosh(tmp)-1.0))+PDIBL2_i);
5601  }
5602  else
5603  {
5604  DIBLfactor = ((PDIBL1_a*exp((-tmp)))+PDIBL2_i);
5605  }
5606  if ((PVAG_i>0))
5607  {
5608  PVAGfactor = (1.0+((PVAG_i*qia)/EsatL));
5609  }
5610  else
5611  {
5612  PVAGfactor = (1.0/(1.0-((PVAG_i*qia)/EsatL)));
5613  }
5614  if ((Vdseff>vds))
5615  {
5616  Vdseff = vds;
5617  }
5618  diffVds = (vds-Vdseff);
5619  Vgst2Vtm = (qia+(2.0*Vtm));
5620  if ((DIBLfactor>0))
5621  {
5622  T1 = Vgst2Vtm;
5623  T3 = (T1/(Vdsat+T1));
5624  VaDIBL = (((T1/DIBLfactor)*T3)*PVAGfactor);
5625  Moc = (1.0+(diffVds/VaDIBL));
5626  }
5627  else
5628  {
5629  Moc = 1.0;
5630  }
5631  if ((PCLM_i>0))
5632  {
5633  if ((PCLMG_i<0.0))
5634  {
5635  T1 = (1.0/((1.0/PCLM_i)-(PCLMG_i*qia)));
5636  }
5637  else
5638  {
5639  T1 = (PCLM_i+(PCLMG_i*qia));
5640  }
5641  Mclm = (1.0+(T1*model_.analogFunctions.lln<AdmsFadType>((1.0+(((vds-Vdseff)/T1)/(Vdsat+EsatL))))));
5642  }
5643  else
5644  {
5645  Mclm = 1.0;
5646  }
5647  Moc = (Moc*Mclm);
5648  Esat1 = ((2.0*VSAT1_a)/ueff);
5649  Esat1L = (Esat1*Leff);
5651  Ta = (1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSAT_i)*model_.analogFunctions.lln<AdmsFadType>(DELTAVSAT_i))));
5652  Dvsat = ((1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSAT_i)*model_.analogFunctions.lln<AdmsFadType>((DELTAVSAT_i+T0)))))/Ta);
5653  Dvsat = (Dvsat+((((0.5*PTWG_a)*qia)*dqi)*dqi));
5654  T0 = (A1_t+(A2_t/(qia+(2.0*nVtm))));
5655  T1 = ((T0*dqi)*dqi);
5656  T2 = ((T1+1.0)-0.001);
5657  T3 = ((-1.0)+(0.5*(T2+sqrt(((T2*T2)+0.004)))));
5658  Nsat = (0.5*(1.0+sqrt((1.0+T3))));
5659  Dvsat = (Dvsat*Nsat);
5660  if ((K0_t!=0))
5661  {
5662  T1 = (K0_t/((K0SI_t*qia)+(2.0*nVtm)));
5663  Mnud = model_.analogFunctions.lexp<AdmsFadType>((-T1));
5664  }
5665  else
5666  {
5667  Mnud = 1.0;
5668  }
5669  if (((model_.BULKMOD)!=0))
5670  {
5671  T0 = model_.analogFunctions.hypsmooth<AdmsFadType>((K1_t+(K1SAT_t*vdsx)),1.0E-6);
5672  T1 = (T0/((K1SI_t*qia)+(2.0*nVtm)));
5673  T3 = (sqrt((PHIBE_i-veseff))-sqrt(PHIBE_i));
5674  Mob = model_.analogFunctions.lexp<AdmsFadType>(((-T1)*T3));
5675  }
5676  else
5677  {
5678  Mob = 1.0;
5679  }
5680  EsatCV = (((2.0*VSATCV_t)*Dmob_cv)/u0);
5681  EsatCVL = (EsatCV*LeffCV);
5682  T0 = model_.analogFunctions.lexp<AdmsFadType>((PSATCV_i*model_.analogFunctions.lln<AdmsFadType>((dqi/EsatCVL))));
5683  Ta = (1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSATCV_i)*model_.analogFunctions.lln<AdmsFadType>(DELTAVSATCV_i))));
5684  DvsatCV = ((1.0+model_.analogFunctions.lexp<AdmsFadType>(((1.0/PSATCV_i)*model_.analogFunctions.lln<AdmsFadType>((DELTAVSATCV_i+T0)))))/Ta);
5685  if ((PCLMCV_i!=0))
5686  {
5687  MclmCV = (1.0+(PCLMCV_i*model_.analogFunctions.lln<AdmsFadType>((1.0+(((vds-Vdseff)/PCLMCV_i)/(Vdsat+EsatCVL))))));
5688  }
5689  else
5690  {
5691  MclmCV = 1.0;
5692  }
5693  if (((model_.GEOMOD)!=3))
5694  {
5695  qb = (((((-1.60219e-19)*nbody)*(model_.HFIN))*TFIN)*LeffCV);
5696  }
5697  else
5698  {
5699  qb = ((((((-1.60219e-19)*nbody)*3.14159265358979323846)*R)*R)*LeffCV);
5700  }
5701  if ((((model_.GEOMOD)!=3)&&((model_.COREMOD)!=0)))
5702  {
5703  T0 = ((2.0*csi)/cox);
5704  T1 = (g0s*tang0s);
5705  T2 = (g0d*tang0d);
5706  if ((NGATE_i>0.0))
5707  {
5708  T3 = ((((4.0*r2)*(((T1*T1)+(T1*T2))+(T2*T2)))/3.0)+(T0*(T1+T2)));
5709  }
5710  else
5711  {
5712  T3 = (T0*(T1+T2));
5713  }
5714  T6 = ((g0s*g0s)-(g0d*g0d));
5715  ids0 = ((((2.0*T0)*nVtm)*nVtm)*(((T3+2.0)*(T1-T2))-T6));
5716  ids0_ov_dqi = ((0.5*nVtm)*(T3+1.0));
5717  if (((model_.RDSMOD)!=0))
5718  {
5719  Rdsi = 0.0;
5720  Dr = 1.0;
5721  T2 = (vgs_noswap-vfbsd);
5722  T3 = sqrt(((T2*T2)+1.0e-1));
5723  vgs_eff = (0.5*(T2+T3));
5724  T4 = (1.0+(PRWGS_i*vgs_eff));
5725  T1 = (1.0/T4);
5726  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5728  Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5729  T2 = (vgd_noswap-vfbsd);
5730  T3 = sqrt(((T2*T2)+1.0e-1));
5731  vgd_eff = (0.5*(T2+T3));
5732  T4 = (1.0+(PRWGD_i*vgd_eff));
5733  T1 = (1.0/T4);
5734  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5736  Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5737  }
5738  else
5739  {
5740  Rsource = RSourceGeo;
5741  Rdrain = RDrainGeo;
5742  T4 = (1.0+(PRWGS_i*qia));
5743  T1 = (1.0/T4);
5744  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5745  Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5746  Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5747  }
5748  ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5749  ids = (ids*(model_.IDS0MULT));
5750  if ((NGATE_i>0.0))
5751  {
5752  Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5753  }
5754  else
5755  {
5756  Tcom = 0.0;
5757  }
5758  if ((NGATE_i>0))
5759  {
5760  idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5761  }
5762  else
5763  {
5764  idscv = (qia+((2.0-etaiv)*nVtm));
5765  }
5766  idscv = (idscv/DvsatCV);
5767  beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5768  dqi_idscv = (dqi/idscv);
5769  if ((NGATE_i>0))
5770  {
5771  T1 = (kpoly+((4.0*cpoly)*qia));
5772  }
5773  else
5774  {
5775  T1 = 1.0;
5776  }
5777  qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5778  if ((NGATE_i>0))
5779  {
5780  T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5781  T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5782  }
5783  else
5784  {
5785  T1 = 15.0;
5786  T2 = 63.0;
5787  }
5788  qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5789  inv_MclmCV = (1.0/MclmCV);
5790  qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5791  qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5792  T1 = ((WeffCV*LeffCV)*coxeff);
5793  qinv = ((NFINtotal*qg)*T1);
5794  qd = ((NFINtotal*qd)*T1);
5795  qg = (qinv-(NFINtotal*qb));
5796  qd = (-qd);
5797  qb = ((+NFINtotal)*qb);
5798  qs = (((-qg)-qd)-qb);
5799  if ((sigvds<0))
5800  {
5801  T1 = qd;
5802  qd = qs;
5803  qs = T1;
5804  }
5805  }
5806  else
5807  {
5808  if (((model_.NQSMOD)==3))
5809  {
5810  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;
5811  }
5812  if ((NGATE_i>0.0))
5813  {
5814  Tcom = (((qis*qis)+(qis*qid))+(qid*qid));
5815  }
5816  else
5817  {
5818  Tcom = 0.0;
5819  }
5820  if ((NGATE_i>0))
5821  {
5822  T0 = (((2.0*cpoly)*Tcom)/3);
5823  T1 = (kpoly*qia);
5824  }
5825  else
5826  {
5827  T0 = 0;
5828  T1 = qia;
5829  }
5830  etaiv = (q0/(q0+(cdop*qia)));
5831  T2 = ((2.0-etaiv)*nVtm);
5832  ids0_ov_dqi = ((T0+T1)+T2);
5833  ids0 = (ids0_ov_dqi*dqi);
5834  if (((model_.RDSMOD)!=0))
5835  {
5836  Rdsi = 0.0;
5837  Dr = 1.0;
5838  T2 = (vgs_noswap-vfbsd);
5839  T3 = sqrt(((T2*T2)+1.0e-1));
5840  vgs_eff = (0.5*(T2+T3));
5841  T4 = (1.0+(PRWGS_i*vgs_eff));
5842  T1 = (1.0/T4);
5843  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5845  Rsource = (rdstemp*(RSourceGeo+((RSWMIN_i+(T5*T0))*WeffWRFactor)));
5846  T2 = (vgd_noswap-vfbsd);
5847  T3 = sqrt(((T2*T2)+1.0e-1));
5848  vgd_eff = (0.5*(T2+T3));
5849  T4 = (1.0+(PRWGD_i*vgd_eff));
5850  T1 = (1.0/T4);
5851  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5853  Rdrain = (rdstemp*(RDrainGeo+((RDWMIN_i+(T5*T0))*WeffWRFactor)));
5854  }
5855  else
5856  {
5857  Rsource = RSourceGeo;
5858  Rdrain = RDrainGeo;
5859  T4 = (1.0+(PRWGS_i*qia));
5860  T1 = (1.0/T4);
5861  T0 = (0.5*(T1+sqrt(((T1*T1)+0.01))));
5862  Rdsi = ((rdstemp*(RDSWMIN_i+(RDSW_i*T0)))*WeffWRFactor);
5863  Dr = (1.0+((((NFINtotal*beta)*ids0_ov_dqi)/(Dmob*Dvsat))*Rdsi));
5864  }
5865  ids = ((((((NFINtotal*beta)*ids0)*Moc)*Mob)*Mnud)/((Dmob*Dvsat)*Dr));
5866  ids = (ids*(model_.IDS0MULT));
5867  if ((NGATE_i>0))
5868  {
5869  idscv = (((((2.0*cpoly)*Tcom)/3.0)+(kpoly*qia))+((2.0-etaiv)*nVtm));
5870  }
5871  else
5872  {
5873  idscv = (qia+((2.0-etaiv)*nVtm));
5874  }
5875  idscv = (idscv/DvsatCV);
5876  beta_cv = (((u0*coxeff)*WeffCV)/LeffCV);
5877  dqi_idscv = (dqi/idscv);
5878  if ((NGATE_i>0))
5879  {
5880  T1 = (kpoly+((4.0*cpoly)*qia));
5881  }
5882  else
5883  {
5884  T1 = 1.0;
5885  }
5886  qg = (qia+(((T1*dqi)*dqi_idscv)/12.0));
5887  if ((NGATE_i>0))
5888  {
5889  T1 = ((15.0*kpoly)+(cpoly*((32.0*qid)+(28.0*qis))));
5890  T2 = ((((63.0*kpoly)*kpoly)+(((126.0*cpoly)*kpoly)*qia))+((cpoly*cpoly)*((256.0*Tcom)+((240.0*qis)*qid))));
5891  }
5892  else
5893  {
5894  T1 = 15.0;
5895  T2 = 63.0;
5896  }
5897  qd = ((0.5*qia)-((dqi*((1.0-((T1*dqi_idscv)/30.0))-(((T2*dqi_idscv)*dqi_idscv)/1260.0)))/12.0));
5898  inv_MclmCV = (1.0/MclmCV);
5899  qg = ((inv_MclmCV*qg)+((MclmCV-1.0)*qid));
5900  qd = (((inv_MclmCV*inv_MclmCV)*qd)+((0.5*(MclmCV-inv_MclmCV))*qid));
5901  T1 = ((WeffCV*LeffCV)*coxeff);
5902  qinv = ((NFINtotal*qg)*T1);
5903  qd = ((NFINtotal*qd)*T1);
5904  qg = (qinv-(NFINtotal*qb));
5905  qd = (-qd);
5906  qb = ((+NFINtotal)*qb);
5907  qs = (((-qg)-qd)-qb);
5908  if ((sigvds<0))
5909  {
5910  T1 = qd;
5911  qd = qs;
5912  qs = T1;
5913  }
5914  }
5915  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
5916  {
5917  T1 = (((NFINtotal*WeffCV0)*LeffCV_acc)*cox_acc);
5918  qg_acc = ((-qi_acc)*T1);
5919  qb_acc = ((+qi_acc)*T1);
5920  }
5921  qgs_ov = 0.0;
5922  qgd_ov = 0.0;
5923  if (((model_.CGEOMOD)!=1))
5924  {
5925  T1 = ((NFINtotal*WeffCV)*devsign);
5926  T2 = (devsign*(probeVars[admsProbeID_V_g_si]));
5927  T0 = ((T2-vfbsd)+0.02);
5928  vgs_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5929  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)));
5930  T2 = (devsign*(probeVars[admsProbeID_V_g_di]));
5931  T0 = ((T2-vfbsd)+0.02);
5932  vgd_overlap = (0.5*(T0-sqrt(((T0*T0)+(4.0*0.02)))));
5933  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)));
5934  }
5935  if (((model_.CGEOMOD)==0))
5936  {
5937  T1 = (NFINtotal*WeffCV0);
5938  qgs_fr = ((T1*CFS_i)*(probeVars[admsProbeID_V_g_si]));
5939  qgd_fr = ((T1*CFD_i)*(probeVars[admsProbeID_V_g_di]));
5940  qgs_parasitic = (qgs_ov+qgs_fr);
5941  qgd_parasitic = (qgd_ov+qgd_fr);
5942  }
5943  else
5944  {
5945  if (((model_.CGEOMOD)==1))
5946  {
5947  if (((model_.CGEO1SW)==1))
5948  {
5949  T0 = (NFINtotal*WeffCV0);
5950  COVS_i = (T0*COVS_i);
5951  COVD_i = (T0*COVD_i);
5952  cgsp = (T0*CGSP);
5953  cgdp = (T0*CGDP);
5954  }
5955  else
5956  {
5957  cgsp = CGSP;
5958  cgdp = CGDP;
5959  }
5960  qgs_ov = (COVS_i*(probeVars[admsProbeID_V_g_si]));
5961  qgd_ov = (COVD_i*(probeVars[admsProbeID_V_g_di]));
5962  qgs_parasitic = qgs_ov;
5963  qgd_parasitic = qgd_ov;
5964  qgs_fr = (cgsp*(probeVars[admsProbeID_V_g_s]));
5965  qgd_fr = (cgdp*(probeVars[admsProbeID_V_g_d]));
5966  }
5967  else
5968  {
5969  qgs_fr = (Cfr_geo*(probeVars[admsProbeID_V_g_si]));
5970  qgd_fr = (Cfr_geo*(probeVars[admsProbeID_V_g_di]));
5971  qgs_parasitic = (qgs_ov+qgs_fr);
5972  qgd_parasitic = (qgd_ov+qgd_fr);
5973  }
5974  }
5975  qds_fr = (CDSP*(probeVars[admsProbeID_V_d_s]));
5976  Iii = 0;
5977  if (((model_.IIMOD)==1))
5978  {
5979  T0 = ((ALPHA0_t+(ALPHA1_t*Leff))/Leff);
5980  if (((T0<=0.0)||(BETA0_t<=0.0)))
5981  {
5982  Iii = 0.0;
5983  }
5984  else
5985  {
5986  T1 = ((-BETA0_t)/(diffVds+1.0e-30));
5987  Iii = (((T0*diffVds)*ids)*model_.analogFunctions.lexp<AdmsFadType>(T1));
5988  }
5989  }
5990  else
5991  {
5992  if (((model_.IIMOD)==2))
5993  {
5994  ALPHAII = ((ALPHAII0_t+(ALPHAII1_t*Leff))/Leff);
5995  if ((ALPHAII<=0.0))
5996  {
5997  Iii = 0.0;
5998  }
5999  else
6000  {
6001  T0 = (ESATII_i*Leff);
6002  T1 = ((SII0_t*T0)/(1.0+T0));
6003  T0 = (1.0/(1.0+model_.analogFunctions.hypsmooth<AdmsFadType>((SII1_i*vgsfbeff),1.0e-3)));
6004  T3 = (T0+SII2_i);
6005  T2 = model_.analogFunctions.hypsmooth<AdmsFadType>((vgsfbeff*T3),1.0e-3);
6006  T3 = (1.0/(1.0+(SIID_i*vds)));
6007  VgsStep = ((T1*T2)*T3);
6008  Vdsatii = (VgsStep*(1.0-(LII_i/Leff)));
6009  Vdiff = (vds-Vdsatii);
6010  T0 = ((BETAII2_i+(BETAII1_i*Vdiff))+((BETAII0_i*Vdiff)*Vdiff));
6011  T1 = sqrt(((T0*T0)+1.0E-10));
6012  T2 = ((10.0-(ALPHAII*model_.analogFunctions.lexp<AdmsFadType>((Vdiff/T1))))-0.01);
6013  Ratio = (10.0-(0.5*(T2+sqrt(((T2*T2)+((4.0*10.0)*0.01))))));
6014  Iii = (Ratio*ids);
6015  }
6016  }
6017  }
6018  igbinv = 0.0;
6019  igbacc = 0.0;
6020  igcs = 0.0;
6021  igcd = 0.0;
6022  igs = 0.0;
6023  igd = 0.0;
6024  if (((model_.IGBMOD)!=0))
6025  {
6026  T1 = (((qia-EIGBINV_i)/NIGBINV_i)/Vtm);
6027  Vaux_Igbinv = ((NIGBINV_i*Vtm)*model_.analogFunctions.lln<AdmsFadType>((1+model_.analogFunctions.lexp<AdmsFadType>(T1))));
6028  T2 = (AIGBINV_t-(BIGBINV_i*qia));
6029  T3 = (1+(CIGBINV_i*qia));
6030  T4 = ((((-9.82222e11)*(model_.TOXG))*T2)*T3);
6032  T6 = 3.75956e-7;
6033  igbinv = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbinv)*T5);
6034  igbinv = (igbinv*igtemp);
6035  vfbzb = ((deltaPhi-(Eg/2.0))-phib);
6036  T0 = (vfbzb-vge);
6037  T1 = ((T0/NIGBACC_i)/Vtm);
6038  Vaux_Igbacc = ((NIGBACC_i*Vtm)*model_.analogFunctions.lln<AdmsFadType>((1+model_.analogFunctions.lexp<AdmsFadType>(T1))));
6039  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
6040  {
6041  Voxacc = qi_acc;
6042  }
6043  else
6044  {
6045  if ((vfbzb<=0))
6046  {
6047  Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))-(0.08*vfbzb)))));
6048  }
6049  else
6050  {
6051  Voxacc = (0.5*((T0-0.02)+sqrt((((T0-0.02)*(T0-0.02))+(0.08*vfbzb)))));
6052  }
6053  }
6054  T2 = (AIGBACC_t-(BIGBACC_i*Voxacc));
6055  T3 = (1+(CIGBACC_i*Voxacc));
6056  T4 = ((((-7.45669e11)*(model_.TOXG))*T2)*T3);
6058  T6 = 4.97232e-7;
6059  igbacc = ((((((Weff0*Leff)*T6)*Toxratio)*vge)*Vaux_Igbacc)*T5);
6060  igbacc = (igbacc*igtemp);
6061  }
6062  if (((model_.IGCMOD)!=0))
6063  {
6064  T1 = (AIGC_t-(BIGC_i*qia));
6065  T2 = (1.0+(CIGC_i*qia));
6066  T3 = ((((-Bechvb)*(model_.TOXG))*T1)*T2);
6067  T4 = (qia*model_.analogFunctions.lexp<AdmsFadType>(T3));
6068  T5 = ((vge+(0.5*vdsx))+(0.5*(ves_jct+ved_jct)));
6069  igc0 = ((((((Weff0*Leff)*Aechvb)*Toxratio)*T4)*T5)*igtemp);
6070  Vdseffx = (sqrt(((Vdseff*Vdseff)+0.01))-0.1);
6071  T1 = (PIGCD_i*Vdseffx);
6072  T1_exp = model_.analogFunctions.lexp<AdmsFadType>((-T1));
6073  T3 = (((T1+T1_exp)-1.0)+1.0E-4);
6074  T4 = ((1.0-((T1+1.0)*T1_exp))+1.0E-4);
6075  T5 = ((T1*T1)+2.0E-4);
6076  igcd = ((igc0*T4)/T5);
6077  igcs = ((igc0*T3)/T5);
6078  T0 = vgs_noswap;
6079  vgs_eff = sqrt(((T0*T0)+1.0e-4));
6080  T1 = (AIGS_t-(BIGS_i*vgs_eff));
6081  T2 = (1.0+(CIGS_i*vgs_eff));
6082  T3 = (((((-Bechvb)*(model_.TOXG))*POXEDGE_i)*T1)*T2);
6084  if ((sigvds>0))
6085  {
6086  igs = ((((igsd_mult*(model_.DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6087  }
6088  else
6089  {
6090  igd = ((((igsd_mult*(model_.DLCIGS))*vgs_noswap)*vgs_eff)*T4);
6091  }
6092  T0 = vgd_noswap;
6093  vgd_eff = sqrt(((T0*T0)+1.0e-4));
6094  T1 = (AIGD_t-(BIGD_i*vgd_eff));
6095  T2 = (1.0+(CIGD_i*vgd_eff));
6096  T3 = (((((-Bechvb)*(model_.TOXG))*POXEDGE_i)*T1)*T2);
6098  if ((sigvds>0))
6099  {
6100  igd = ((((igsd_mult*(model_.DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6101  }
6102  else
6103  {
6104  igs = ((((igsd_mult*(model_.DLCIGD))*vgd_noswap)*vgd_eff)*T4);
6105  }
6106  }
6107  igisl = 0.0;
6108  igidl = 0.0;
6109  if (((model_.GIDLMOD)!=0))
6110  {
6111  T0 = (epsratio*(model_.EOT));
6112  if (((AGIDL_i<=0.0)||(BGIDL_t<=0.0)))
6113  {
6114  T6 = 0.0;
6115  }
6116  else
6117  {
6118  T1 = ((((-vgd_noswap)-EGIDL_i)+vfbsd)/T0);
6119  T1 = model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-2);
6120  T2 = (BGIDL_t/(T1+1.0E-3));
6122  if (((model_.BULKMOD)!=0))
6123  {
6124  T4 = (((-ved_jct)*ved_jct)*ved_jct);
6125  T4a = ((CGIDL_i+fabs(T4))+1.0E-9);
6126  T5 = (model_.analogFunctions.hypsmooth<AdmsFadType>((T4/T4a),1.0E-6)-1.0E-6);
6127  T6 = ((((AGIDL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*T5);
6128  }
6129  else
6130  {
6131  T6 = ((((AGIDL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*vds_noswap);
6132  }
6133  }
6134  if ((sigvds>0.0))
6135  {
6136  igidl = T6;
6137  }
6138  else
6139  {
6140  igisl = T6;
6141  }
6142  if (((AGISL_i<=0.0)||(BGISL_t<=0.0)))
6143  {
6144  T6 = 0.0;
6145  }
6146  else
6147  {
6148  T1 = ((((-vgs_noswap)-EGISL_i)+vfbsd)/T0);
6149  T1 = model_.analogFunctions.hypsmooth<AdmsFadType>(T1,1.0E-2);
6150  T2 = (BGISL_t/(T1+1.0E-3));
6152  if (((model_.BULKMOD)!=0))
6153  {
6154  T4 = (((-ves_jct)*ves_jct)*ves_jct);
6155  T4a = ((CGISL_i+fabs(T4))+1.0E-9);
6156  T5 = (model_.analogFunctions.hypsmooth<AdmsFadType>((T4/T4a),1.0E-6)-1.0E-6);
6157  T6 = ((((AGISL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*T5);
6158  }
6159  else
6160  {
6161  T6 = ((((AGISL_i*Weff0)*T3)*model_.analogFunctions.lexp<AdmsFadType>((-T2)))*(-vds_noswap));
6162  }
6163  }
6164  if ((sigvds>0.0))
6165  {
6166  igisl = T6;
6167  }
6168  else
6169  {
6170  igidl = T6;
6171  }
6172  }
6173  if (((model_.BULKMOD)!=0))
6174  {
6175  if ((Isbs>0.0))
6176  {
6177  if ((ves_jct<VjsmRev))
6178  {
6179  T0 = (ves_jct/Nvtms);
6180  T1 = (model_.analogFunctions.lexp<AdmsFadType>(T0)-1.0);
6181  T2 = (IVjsmRev+(SslpRev*(ves_jct-VjsmRev)));
6182  Ies = (T1*T2);
6183  }
6184  else
6185  {
6186  if ((ves_jct<=VjsmFwd))
6187  {
6188  T0 = (ves_jct/Nvtms);
6189  T1 = (((model_.BVS)+ves_jct)/Nvtms);
6190  T2 = model_.analogFunctions.lexp<AdmsFadType>((-T1));
6191  Ies = (Isbs*(((model_.analogFunctions.lexp<AdmsFadType>(T0)+XExpBVS)-1.0)-((model_.XJBVS)*T2)));
6192  }
6193  else
6194  {
6195  Ies = (IVjsmFwd+(SslpFwd*(ves_jct-VjsmFwd)));
6196  }
6197  }
6198  }
6199  else
6200  {
6201  Ies = 0.0;
6202  }
6203  if ((JTSS_t>0.0))
6204  {
6205  if ((((model_.VTSS)-ves_jct)<((model_.VTSS)*1.0e-3)))
6206  {
6207  T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6208  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6209  Ies = (Ies-((ASEJ*JTSS_t)*T1));
6210  }
6211  else
6212  {
6213  T0 = (((-ves_jct)/Vtm0)/NJTS_t);
6214  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSS))/((model_.VTSS)-ves_jct)))-1.0);
6215  Ies = (Ies-((ASEJ*JTSS_t)*T1));
6216  }
6217  }
6218  if ((JTSSWS_t>0.0))
6219  {
6220  if ((((model_.VTSSWS)-ves_jct)<((model_.VTSSWS)*1.0e-3)))
6221  {
6222  T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6223  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6224  Ies = (Ies-((PSEJ*JTSSWS_t)*T1));
6225  }
6226  else
6227  {
6228  T0 = (((-ves_jct)/Vtm0)/NJTSSW_t);
6229  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWS))/((model_.VTSSWS)-ves_jct)))-1.0);
6230  Ies = (Ies-((PSEJ*JTSSWS_t)*T1));
6231  }
6232  }
6233  if ((JTSSWGS_t>0.0))
6234  {
6235  if ((((model_.VTSSWGS)-ves_jct)<((model_.VTSSWGS)*1.0e-3)))
6236  {
6237  T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6238  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6239  Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6240  }
6241  else
6242  {
6243  T0 = (((-ves_jct)/Vtm0)/NJTSSWG_t);
6244  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWGS))/((model_.VTSSWGS)-ves_jct)))-1.0);
6245  Ies = (Ies-(((Weff0*NFINtotal)*JTSSWGS_t)*T1));
6246  }
6247  }
6248  if ((Isbd>0.0))
6249  {
6250  if ((ved_jct<VjdmRev))
6251  {
6252  T0 = (ved_jct/Nvtmd);
6253  T1 = (model_.analogFunctions.lexp<AdmsFadType>(T0)-1.0);
6254  T2 = (IVjdmRev+(DslpRev*(ved_jct-VjdmRev)));
6255  Ied = (T1*T2);
6256  }
6257  else
6258  {
6259  if ((ved_jct<=VjdmFwd))
6260  {
6261  T0 = (ved_jct/Nvtmd);
6262  T1 = (((model_.BVD)+ved_jct)/Nvtmd);
6263  T2 = model_.analogFunctions.lexp<AdmsFadType>((-T1));
6264  Ied = (Isbd*(((model_.analogFunctions.lexp<AdmsFadType>(T0)+XExpBVD)-1.0)-((model_.XJBVD)*T2)));
6265  }
6266  else
6267  {
6268  Ied = (IVjdmFwd+(DslpFwd*(ved_jct-VjdmFwd)));
6269  }
6270  }
6271  }
6272  else
6273  {
6274  Ied = 0.0;
6275  }
6276  if ((JTSD_t>0.0))
6277  {
6278  if ((((model_.VTSD)-ved_jct)<((model_.VTSD)*1.0e-3)))
6279  {
6280  T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6281  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6282  Ied = (Ied-((ADEJ*JTSD_t)*T1));
6283  }
6284  else
6285  {
6286  T0 = (((-ved_jct)/Vtm0)/NJTSD_t);
6287  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSD))/((model_.VTSD)-ved_jct)))-1.0);
6288  Ied = (Ied-((ADEJ*JTSD_t)*T1));
6289  }
6290  }
6291  if ((JTSSWD_t>0.0))
6292  {
6293  if ((((model_.VTSSWD)-ved_jct)<((model_.VTSSWD)*1.0e-3)))
6294  {
6295  T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6296  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6297  Ied = (Ied-((PDEJ*JTSSWD_t)*T1));
6298  }
6299  else
6300  {
6301  T0 = (((-ved_jct)/Vtm0)/NJTSSWD_t);
6302  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWD))/((model_.VTSSWD)-ved_jct)))-1.0);
6303  Ied = (Ied-((PDEJ*JTSSWD_t)*T1));
6304  }
6305  }
6306  if ((JTSSWGD_t>0.0))
6307  {
6308  if ((((model_.VTSSWGD)-ved_jct)<((model_.VTSSWGD)*1.0e-3)))
6309  {
6310  T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6311  T1 = (model_.analogFunctions.lexp<AdmsFadType>((T0*1.0e+3))-1.0);
6312  Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6313  }
6314  else
6315  {
6316  T0 = (((-ved_jct)/Vtm0)/NJTSSWGD_t);
6317  T1 = (model_.analogFunctions.lexp<AdmsFadType>(((T0*(model_.VTSSWGD))/((model_.VTSSWGD)-ved_jct)))-1.0);
6318  Ied = (Ied-(((Weff0*NFINtotal)*JTSSWGD_t)*T1));
6319  }
6320  }
6321  {
6322  if ((Czbs>0.0))
6323  {
6324  T1 = (ves_jct/PBS_t);
6325  if ((T1<0.9))
6326  {
6327  if (((model_.SJS)>0.0))
6328  {
6329  vec = (PBS_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJS))*model_.analogFunctions.lln((1.0/(model_.SJS)))))));
6330  pb2 = ((((PBS_t*(model_.SJS))*(model_.MJS2))/(model_.MJS))/model_.analogFunctions.lexp(((-(1.0+(model_.MJS)))*model_.analogFunctions.lln((1.0-(vec/PBS_t))))));
6331  if ((ves_jct>vec))
6332  {
6333  arg = (1.0-T1);
6334  if (((model_.MJS)==0.5))
6335  {
6336  sarg = (1.0/sqrt(arg));
6337  }
6338  else
6339  {
6341  }
6342  Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS)));
6343  }
6344  else
6345  {
6346  arg = (1.0-(vec/PBS_t));
6347  if (((model_.MJS)==0.5))
6348  {
6349  sarg = (1.0/sqrt(arg));
6350  }
6351  else
6352  {
6354  }
6355  Qec = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS)));
6356  arg = (1.0-((ves_jct-vec)/pb2));
6357  if (((model_.MJS2)==0.5))
6358  {
6359  sarg = (1.0/sqrt(arg));
6360  }
6361  else
6362  {
6364  }
6365  Qesj1 = (Qec+(((((model_.SJS)*pb2)*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS2))));
6366  }
6367  }
6368  else
6369  {
6370  arg = (1.0-T1);
6371  if (((model_.MJS)==0.5))
6372  {
6373  sarg = (1.0/sqrt(arg));
6374  }
6375  else
6376  {
6378  }
6379  Qesj1 = (((PBS_t*Czbs)*(1.0-(arg*sarg)))/(1.0-(model_.MJS)));
6380  }
6381  }
6382  else
6383  {
6385  T3 = (1.0/(1.0-(model_.MJS)));
6386  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJS))*(T1-1.0))+(1.0+(model_.MJS))));
6387  T5 = (T3*(1.0-(((0.05*(model_.MJS))*(1.0+(model_.MJS)))*T2)));
6388  Qesj1 = ((PBS_t*Czbs)*(T4+T5));
6389  }
6390  }
6391  else
6392  {
6393  Qesj1 = 0.0;
6394  }
6395  }
6396  {
6397  if ((Czbssw>0.0))
6398  {
6399  T1 = (ves_jct/PBSWS_t);
6400  if ((T1<0.9))
6401  {
6402  if (((model_.SJSWS)>0.0))
6403  {
6404  vec = (PBSWS_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWS))*model_.analogFunctions.lln((1.0/(model_.SJSWS)))))));
6405  pb2 = ((((PBSWS_t*(model_.SJSWS))*(model_.MJSWS2))/(model_.MJSWS))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWS)))*model_.analogFunctions.lln((1.0-(vec/PBSWS_t))))));
6406  if ((ves_jct>vec))
6407  {
6408  arg = (1.0-T1);
6409  if (((model_.MJSWS)==0.5))
6410  {
6411  sarg = (1.0/sqrt(arg));
6412  }
6413  else
6414  {
6416  }
6417  Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS)));
6418  }
6419  else
6420  {
6421  arg = (1.0-(vec/PBSWS_t));
6422  if (((model_.MJSWS)==0.5))
6423  {
6424  sarg = (1.0/sqrt(arg));
6425  }
6426  else
6427  {
6429  }
6430  Qec = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS)));
6431  arg = (1.0-((ves_jct-vec)/pb2));
6432  if (((model_.MJSWS2)==0.5))
6433  {
6434  sarg = (1.0/sqrt(arg));
6435  }
6436  else
6437  {
6439  }
6440  Qesj2 = (Qec+(((((model_.SJSWS)*pb2)*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS2))));
6441  }
6442  }
6443  else
6444  {
6445  arg = (1.0-T1);
6446  if (((model_.MJSWS)==0.5))
6447  {
6448  sarg = (1.0/sqrt(arg));
6449  }
6450  else
6451  {
6453  }
6454  Qesj2 = (((PBSWS_t*Czbssw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWS)));
6455  }
6456  }
6457  else
6458  {
6460  T3 = (1.0/(1.0-(model_.MJSWS)));
6461  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWS))*(T1-1.0))+(1.0+(model_.MJSWS))));
6462  T5 = (T3*(1.0-(((0.05*(model_.MJSWS))*(1.0+(model_.MJSWS)))*T2)));
6463  Qesj2 = ((PBSWS_t*Czbssw)*(T4+T5));
6464  }
6465  }
6466  else
6467  {
6468  Qesj2 = 0.0;
6469  }
6470  }
6471  {
6472  if ((Czbsswg>0.0))
6473  {
6474  T1 = (ves_jct/PBSWGS_t);
6475  if ((T1<0.9))
6476  {
6477  if (((model_.SJSWGS)>0.0))
6478  {
6479  vec = (PBSWGS_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWGS))*model_.analogFunctions.lln((1.0/(model_.SJSWGS)))))));
6480  pb2 = ((((PBSWGS_t*(model_.SJSWGS))*(model_.MJSWGS2))/(model_.MJSWGS))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWGS)))*model_.analogFunctions.lln((1.0-(vec/PBSWGS_t))))));
6481  if ((ves_jct>vec))
6482  {
6483  arg = (1.0-T1);
6484  if (((model_.MJSWGS)==0.5))
6485  {
6486  sarg = (1.0/sqrt(arg));
6487  }
6488  else
6489  {
6491  }
6492  Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS)));
6493  }
6494  else
6495  {
6496  arg = (1.0-(vec/PBSWGS_t));
6497  if (((model_.MJSWGS)==0.5))
6498  {
6499  sarg = (1.0/sqrt(arg));
6500  }
6501  else
6502  {
6504  }
6505  Qec = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS)));
6506  arg = (1.0-((ves_jct-vec)/pb2));
6507  if (((model_.MJSWGS2)==0.5))
6508  {
6509  sarg = (1.0/sqrt(arg));
6510  }
6511  else
6512  {
6514  }
6515  Qesj3 = (Qec+(((((model_.SJSWGS)*pb2)*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS2))));
6516  }
6517  }
6518  else
6519  {
6520  arg = (1.0-T1);
6521  if (((model_.MJSWGS)==0.5))
6522  {
6523  sarg = (1.0/sqrt(arg));
6524  }
6525  else
6526  {
6528  }
6529  Qesj3 = (((PBSWGS_t*Czbsswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGS)));
6530  }
6531  }
6532  else
6533  {
6535  T3 = (1.0/(1.0-(model_.MJSWGS)));
6536  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWGS))*(T1-1.0))+(1.0+(model_.MJSWGS))));
6537  T5 = (T3*(1.0-(((0.05*(model_.MJSWGS))*(1.0+(model_.MJSWGS)))*T2)));
6538  Qesj3 = ((PBSWGS_t*Czbsswg)*(T4+T5));
6539  }
6540  }
6541  else
6542  {
6543  Qesj3 = 0.0;
6544  }
6545  }
6546  Qesj = ((Qesj1+Qesj2)+Qesj3);
6547  {
6548  if ((Czbd>0.0))
6549  {
6550  T1 = (ved_jct/PBD_t);
6551  if ((T1<0.9))
6552  {
6553  if (((model_.SJD)>0.0))
6554  {
6555  vec = (PBD_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJD))*model_.analogFunctions.lln((1.0/(model_.SJD)))))));
6556  pb2 = ((((PBD_t*(model_.SJD))*(model_.MJD2))/(model_.MJD))/model_.analogFunctions.lexp(((-(1.0+(model_.MJD)))*model_.analogFunctions.lln((1.0-(vec/PBD_t))))));
6557  if ((ved_jct>vec))
6558  {
6559  arg = (1.0-T1);
6560  if (((model_.MJD)==0.5))
6561  {
6562  sarg = (1.0/sqrt(arg));
6563  }
6564  else
6565  {
6567  }
6568  Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD)));
6569  }
6570  else
6571  {
6572  arg = (1.0-(vec/PBD_t));
6573  if (((model_.MJD)==0.5))
6574  {
6575  sarg = (1.0/sqrt(arg));
6576  }
6577  else
6578  {
6580  }
6581  Qec = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD)));
6582  arg = (1.0-((ved_jct-vec)/pb2));
6583  if (((model_.MJD2)==0.5))
6584  {
6585  sarg = (1.0/sqrt(arg));
6586  }
6587  else
6588  {
6590  }
6591  Qedj1 = (Qec+(((((model_.SJD)*pb2)*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD2))));
6592  }
6593  }
6594  else
6595  {
6596  arg = (1.0-T1);
6597  if (((model_.MJD)==0.5))
6598  {
6599  sarg = (1.0/sqrt(arg));
6600  }
6601  else
6602  {
6604  }
6605  Qedj1 = (((PBD_t*Czbd)*(1.0-(arg*sarg)))/(1.0-(model_.MJD)));
6606  }
6607  }
6608  else
6609  {
6611  T3 = (1.0/(1.0-(model_.MJD)));
6612  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJD))*(T1-1.0))+(1.0+(model_.MJD))));
6613  T5 = (T3*(1.0-(((0.05*(model_.MJD))*(1.0+(model_.MJD)))*T2)));
6614  Qedj1 = ((PBD_t*Czbd)*(T4+T5));
6615  }
6616  }
6617  else
6618  {
6619  Qedj1 = 0.0;
6620  }
6621  }
6622  {
6623  if ((Czbdsw>0.0))
6624  {
6625  T1 = (ved_jct/PBSWD_t);
6626  if ((T1<0.9))
6627  {
6628  if (((model_.SJSWD)>0.0))
6629  {
6630  vec = (PBSWD_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWD))*model_.analogFunctions.lln((1.0/(model_.SJSWD)))))));
6631  pb2 = ((((PBSWD_t*(model_.SJSWD))*(model_.MJSWD2))/(model_.MJSWD))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWD)))*model_.analogFunctions.lln((1.0-(vec/PBSWD_t))))));
6632  if ((ved_jct>vec))
6633  {
6634  arg = (1.0-T1);
6635  if (((model_.MJSWD)==0.5))
6636  {
6637  sarg = (1.0/sqrt(arg));
6638  }
6639  else
6640  {
6642  }
6643  Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD)));
6644  }
6645  else
6646  {
6647  arg = (1.0-(vec/PBSWD_t));
6648  if (((model_.MJSWD)==0.5))
6649  {
6650  sarg = (1.0/sqrt(arg));
6651  }
6652  else
6653  {
6655  }
6656  Qec = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD)));
6657  arg = (1.0-((ved_jct-vec)/pb2));
6658  if (((model_.MJSWD2)==0.5))
6659  {
6660  sarg = (1.0/sqrt(arg));
6661  }
6662  else
6663  {
6665  }
6666  Qedj2 = (Qec+(((((model_.SJSWD)*pb2)*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD2))));
6667  }
6668  }
6669  else
6670  {
6671  arg = (1.0-T1);
6672  if (((model_.MJSWD)==0.5))
6673  {
6674  sarg = (1.0/sqrt(arg));
6675  }
6676  else
6677  {
6679  }
6680  Qedj2 = (((PBSWD_t*Czbdsw)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWD)));
6681  }
6682  }
6683  else
6684  {
6686  T3 = (1.0/(1.0-(model_.MJSWD)));
6687  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWD))*(T1-1.0))+(1.0+(model_.MJSWD))));
6688  T5 = (T3*(1.0-(((0.05*(model_.MJSWD))*(1.0+(model_.MJSWD)))*T2)));
6689  Qedj2 = ((PBSWD_t*Czbdsw)*(T4+T5));
6690  }
6691  }
6692  else
6693  {
6694  Qedj2 = 0.0;
6695  }
6696  }
6697  {
6698  if ((Czbdswg>0.0))
6699  {
6700  T1 = (ved_jct/PBSWGD_t);
6701  if ((T1<0.9))
6702  {
6703  if (((model_.SJSWGD)>0.0))
6704  {
6705  vec = (PBSWGD_t*(1.0-model_.analogFunctions.lexp(((1.0/(model_.MJSWGD))*model_.analogFunctions.lln((1.0/(model_.SJSWGD)))))));
6706  pb2 = ((((PBSWGD_t*(model_.SJSWGD))*(model_.MJSWGD2))/(model_.MJSWGD))/model_.analogFunctions.lexp(((-(1.0+(model_.MJSWGD)))*model_.analogFunctions.lln((1.0-(vec/PBSWGD_t))))));
6707  if ((ved_jct>vec))
6708  {
6709  arg = (1.0-T1);
6710  if (((model_.MJSWGD)==0.5))
6711  {
6712  sarg = (1.0/sqrt(arg));
6713  }
6714  else
6715  {
6717  }
6718  Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD)));
6719  }
6720  else
6721  {
6722  arg = (1.0-(vec/PBSWGD_t));
6723  if (((model_.MJSWGD)==0.5))
6724  {
6725  sarg = (1.0/sqrt(arg));
6726  }
6727  else
6728  {
6730  }
6731  Qec = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD)));
6732  arg = (1.0-((ved_jct-vec)/pb2));
6733  if (((model_.MJSWGD2)==0.5))
6734  {
6735  sarg = (1.0/sqrt(arg));
6736  }
6737  else
6738  {
6740  }
6741  Qedj3 = (Qec+(((((model_.SJSWGD)*pb2)*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD2))));
6742  }
6743  }
6744  else
6745  {
6746  arg = (1.0-T1);
6747  if (((model_.MJSWGD)==0.5))
6748  {
6749  sarg = (1.0/sqrt(arg));
6750  }
6751  else
6752  {
6754  }
6755  Qedj3 = (((PBSWGD_t*Czbdswg)*(1.0-(arg*sarg)))/(1.0-(model_.MJSWGD)));
6756  }
6757  }
6758  else
6759  {
6761  T3 = (1.0/(1.0-(model_.MJSWGD)));
6762  T4 = ((T2*(T1-1.0))*(((5.0*(model_.MJSWGD))*(T1-1.0))+(1.0+(model_.MJSWGD))));
6763  T5 = (T3*(1.0-(((0.05*(model_.MJSWGD))*(1.0+(model_.MJSWGD)))*T2)));
6764  Qedj3 = ((PBSWGD_t*Czbdswg)*(T4+T5));
6765  }
6766  }
6767  else
6768  {
6769  Qedj3 = 0.0;
6770  }
6771  }
6772  Qedj = ((Qedj1+Qedj2)+Qedj3);
6773  }
6774  Qes = (Qesj+(csbox*ves_jct));
6775  Qed = (Qedj+(cdbox*ved_jct));
6776  Qeg = ((cgbox*devsign)*(probeVars[admsProbeID_V_e_g]));
6777  if (((model_.BULKMOD)!=0))
6778  {
6779  T2 = (devsign*(probeVars[admsProbeID_V_g_e]));
6780  T3 = ((((T2-deltaPhi)+(Eg/2.0))+phib)-(model_.DELVFBACC));
6781  T0 = (T3+0.02);
6782  vge_overlap = (0.5*(T0+sqrt(((T0*T0)+(4.0*0.02)))));
6783  Qeg = (Qeg-((NFINtotal*LeffCV)*(CGBL_i*((T3-vge_overlap)+((0.5*CKAPPAB_i)*(sqrt((1.0+((4.0*vge_overlap)/CKAPPAB_i)))-1.0))))));
6784  }
6785  T0 = vds;
6786  T1 = (T0*(AIGEN_i+((BIGEN_i*T0)*T0)));
6787  idsgen = (((((model_.HFIN)*TFIN)*(Leff-(2.0*LINTIGEN_i)))*igentemp)*T1);
6788  IdovVds = (((beta*ids0_ov_dqi)*Moc)/((Dmob*Dvsat)*Dr));
6789  T0 = (((ueff*coxeff)*Weff)/Leff);
6790  igidl = (NFINtotal*igidl);
6791  igisl = (NFINtotal*igisl);
6792  igcd = (NFINtotal*igcd);
6793  igcs = (NFINtotal*igcs);
6794  igs = (NFINtotal*igs);
6795  igd = (NFINtotal*igd);
6796  igbinv = (NFINtotal*igbinv);
6797  igbacc = (NFINtotal*igbacc);
6798  idsgen = (NFINtotal*idsgen);
6799  Iii = (NFINtotal*Iii);
6800  igbs = 0.0;
6801  igbd = 0.0;
6802  if (((model_.BULKMOD)==0))
6803  {
6804  igbs = ((igbinv+igbacc)*wf);
6805  igbd = ((igbinv+igbacc)*wr);
6806  }
6807  Esatnoi = ((2.0*VSAT_t)/ueff);
6808  if (((((model_.NOIA)>0)||((model_.NOIB)>0))||((model_.NOIC)>0)))
6809  {
6810  Leffnoi = (Leff-(2.0*LINTNOI_i));
6811  Leffnoisq = (Leffnoi*Leffnoi);
6812  if (((model_.EM)<=0.0))
6813  {
6814  DelClm = 0.0;
6815  }
6816  else
6817  {
6818  T0 = (((diffVds/litl)+(model_.EM))/Esatnoi);
6819  DelClm = (litl*model_.analogFunctions.lln<AdmsFadType>(T0));
6820  if ((DelClm<0.0))
6821  {
6822  DelClm = 0.0;
6823  }
6824  }
6825  T1 = (((((1.60219e-19*1.60219e-19)*1.60219e-19)*Vtm)*fabs(ids))*ueff);
6826  T2 = ((1.0e10*coxeff)*Leffnoisq);
6827  N0 = ((coxeff*qis)/1.60219e-19);
6828  Nl = ((coxeff*qid)/1.60219e-19);
6829  Nstar = ((Vtm/1.60219e-19)*(coxeff+CIT_i));
6830  T3 = ((model_.NOIA)*model_.analogFunctions.lln<AdmsFadType>(((N0+Nstar)/(Nl+Nstar))));
6831  T4 = ((model_.NOIB)*(N0-Nl));
6832  T5 = ((0.5*(model_.NOIC))*((N0*N0)-(Nl*Nl)));
6833  T6 = (((1.60219e-19*Vtm)*ids)*ids);
6834  T7 = (((1.0e10*Leffnoisq)*Weff)*NFINtotal);
6835  T8 = (((model_.NOIA)+((model_.NOIB)*Nl))+(((model_.NOIC)*Nl)*Nl));
6836  T9 = ((Nl+Nstar)*(Nl+Nstar));
6837  Ssi = (((T1/T2)*((T3+T4)+T5))+((((T6/T7)*DelClm)*T8)/T9));
6838  T10 = (((model_.NOIA)*1.60219e-19)*Vtm);
6839  T11 = (((((Weff*NFINtotal)*Leffnoi)*1.0e10)*Nstar)*Nstar);
6840  Swi = (((T10/T11)*ids)*ids);
6841  T1 = (Swi+Ssi);
6842  if ((T1>0.0))
6843  {
6844  FNPowerAt1Hz = ((Ssi*Swi)/T1);
6845  }
6846  else
6847  {
6848  FNPowerAt1Hz = 0.0;
6849  }
6850  }
6851  else
6852  {
6853  FNPowerAt1Hz = 0.0;
6854  }
6855  T0 = (ueff*qinv);
6856  T1 = ((T0*Rdsi)+(Leff*Leff));
6857  Gtnoi = ((T0/T1)*NTNOI_i);
6858  sid = (((4*Vtm)*1.60219e-19)*Gtnoi);
6859  gspr = (1/Rsource);
6860  gdpr = (1/Rdrain);
6861  }
6862  if ((!initialized))
6863  {
6864  devsign = 0.0;
6865  Rsource = 1.0;
6866  Rdrain = 1.0;
6867  std::cerr << "uninitialized" << std::endl;
6868  }
6869  if ((sigvds>0.0))
6870  {
6871  // I(di,si) <+ ((devsign*ids))
6872  staticContributions[admsNodeID_di] += (devsign*ids);
6873  staticContributions[admsNodeID_si] -= (devsign*ids);
6874  }
6875  else
6876  {
6877  // I(si,di) <+ ((devsign*ids))
6878  staticContributions[admsNodeID_si] += (devsign*ids);
6879  staticContributions[admsNodeID_di] -= (devsign*ids);
6880  }
6881  // I(di,si) <+ ((devsign*ddt(qd)))
6882  dynamicContributions[admsNodeID_di] += (devsign*(qd));
6883  dynamicContributions[admsNodeID_si] -= (devsign*(qd));
6884  // I(g,si) <+ ((devsign*ddt(qg)))
6885  dynamicContributions[admsNodeID_g] += (devsign*(qg));
6886  dynamicContributions[admsNodeID_si] -= (devsign*(qg));
6887  if ((sigvds>0))
6888  {
6889  // I(di,si) <+ ((devsign*idsgen))
6890  staticContributions[admsNodeID_di] += (devsign*idsgen);
6891  staticContributions[admsNodeID_si] -= (devsign*idsgen);
6892  // I(g,si) <+ ((devsign*(igcs+igs)))
6893  staticContributions[admsNodeID_g] += (devsign*(igcs+igs));
6894  staticContributions[admsNodeID_si] -= (devsign*(igcs+igs));
6895  // I(g,di) <+ ((devsign*(igcd+igd)))
6896  staticContributions[admsNodeID_g] += (devsign*(igcd+igd));
6897  staticContributions[admsNodeID_di] -= (devsign*(igcd+igd));
6898  if (((model_.BULKMOD)!=0))
6899  {
6900  // I(di,e) <+ ((devsign*(igidl+Iii)))
6901  staticContributions[admsNodeID_di] += (devsign*(igidl+Iii));
6902  staticContributions[admsNodeID_e] -= (devsign*(igidl+Iii));
6903  // I(si,e) <+ ((devsign*igisl))
6904  staticContributions[admsNodeID_si] += (devsign*igisl);
6905  staticContributions[admsNodeID_e] -= (devsign*igisl);
6906  // I(g,e) <+ ((devsign*(igbinv+igbacc)))
6907  staticContributions[admsNodeID_g] += (devsign*(igbinv+igbacc));
6908  staticContributions[admsNodeID_e] -= (devsign*(igbinv+igbacc));
6909  }
6910  else
6911  {
6912  // I(di,si) <+ ((devsign*(igidl+Iii)))
6913  staticContributions[admsNodeID_di] += (devsign*(igidl+Iii));
6914  staticContributions[admsNodeID_si] -= (devsign*(igidl+Iii));
6915  // I(si,di) <+ ((devsign*igisl))
6916  staticContributions[admsNodeID_si] += (devsign*igisl);
6917  staticContributions[admsNodeID_di] -= (devsign*igisl);
6918  }
6919  }
6920  else
6921  {
6922  // I(si,di) <+ ((devsign*idsgen))
6923  staticContributions[admsNodeID_si] += (devsign*idsgen);
6924  staticContributions[admsNodeID_di] -= (devsign*idsgen);
6925  // I(g,di) <+ ((devsign*(igcs+igs)))
6926  staticContributions[admsNodeID_g] += (devsign*(igcs+igs));
6927  staticContributions[admsNodeID_di] -= (devsign*(igcs+igs));
6928  // I(g,si) <+ ((devsign*(igcd+igd)))
6929  staticContributions[admsNodeID_g] += (devsign*(igcd+igd));
6930  staticContributions[admsNodeID_si] -= (devsign*(igcd+igd));
6931  if (((model_.BULKMOD)!=0))
6932  {
6933  // I(si,e) <+ ((devsign*(igidl+Iii)))
6934  staticContributions[admsNodeID_si] += (devsign*(igidl+Iii));
6935  staticContributions[admsNodeID_e] -= (devsign*(igidl+Iii));
6936  // I(di,e) <+ ((devsign*igisl))
6937  staticContributions[admsNodeID_di] += (devsign*igisl);
6938  staticContributions[admsNodeID_e] -= (devsign*igisl);
6939  // I(g,e) <+ ((devsign*(igbinv+igbacc)))
6940  staticContributions[admsNodeID_g] += (devsign*(igbinv+igbacc));
6941  staticContributions[admsNodeID_e] -= (devsign*(igbinv+igbacc));
6942  }
6943  else
6944  {
6945  // I(si,di) <+ ((devsign*(igidl+Iii)))
6946  staticContributions[admsNodeID_si] += (devsign*(igidl+Iii));
6947  staticContributions[admsNodeID_di] -= (devsign*(igidl+Iii));
6948  // I(di,si) <+ ((devsign*igisl))
6949  staticContributions[admsNodeID_di] += (devsign*igisl);
6950  staticContributions[admsNodeID_si] -= (devsign*igisl);
6951  }
6952  }
6953  if (((model_.BULKMOD)==0))
6954  {
6955  // I(g,si) <+ ((devsign*igbs))
6956  staticContributions[admsNodeID_g] += (devsign*igbs);
6957  staticContributions[admsNodeID_si] -= (devsign*igbs);
6958  // I(g,di) <+ ((devsign*igbd))
6959  staticContributions[admsNodeID_g] += (devsign*igbd);
6960  staticContributions[admsNodeID_di] -= (devsign*igbd);
6961  }
6962  if (((model_.BULKMOD)!=0))
6963  {
6964  // I(e,si) <+ ((devsign*Ies))
6965  staticContributions[admsNodeID_e] += (devsign*Ies);
6966  staticContributions[admsNodeID_si] -= (devsign*Ies);
6967  // I(e,di) <+ ((devsign*Ied))
6968  staticContributions[admsNodeID_e] += (devsign*Ied);
6969  staticContributions[admsNodeID_di] -= (devsign*Ied);
6970  }
6971  // I(e,si) <+ ((devsign*ddt(Qes)))
6972  dynamicContributions[admsNodeID_e] += (devsign*(Qes));
6973  dynamicContributions[admsNodeID_si] -= (devsign*(Qes));
6974  // I(e,di) <+ ((devsign*ddt(Qed)))
6975  dynamicContributions[admsNodeID_e] += (devsign*(Qed));
6976  dynamicContributions[admsNodeID_di] -= (devsign*(Qed));
6977  // I(e,g) <+ ((devsign*ddt(Qeg)))
6978  dynamicContributions[admsNodeID_e] += (devsign*(Qeg));
6979  dynamicContributions[admsNodeID_g] -= (devsign*(Qeg));
6980  // I(g,si) <+ (ddt(qgs_parasitic))
6981  dynamicContributions[admsNodeID_g] += (qgs_parasitic);
6982  dynamicContributions[admsNodeID_si] -= (qgs_parasitic);
6983  // I(g,di) <+ (ddt(qgd_parasitic))
6984  dynamicContributions[admsNodeID_g] += (qgd_parasitic);
6985  dynamicContributions[admsNodeID_di] -= (qgd_parasitic);
6986  // I(d,s) <+ (ddt(qds_fr))
6987  dynamicContributions[admsNodeID_d] += (qds_fr);
6988  dynamicContributions[admsNodeID_s] -= (qds_fr);
6989  if (((model_.CGEOMOD)==1))
6990  {
6991  // I(g,s) <+ (ddt(qgs_fr))
6992  dynamicContributions[admsNodeID_g] += (qgs_fr);
6993  dynamicContributions[admsNodeID_s] -= (qgs_fr);
6994  // I(g,d) <+ (ddt(qgd_fr))
6995  dynamicContributions[admsNodeID_g] += (qgd_fr);
6996  dynamicContributions[admsNodeID_d] -= (qgd_fr);
6997  }
6998  if ((((model_.CAPMOD)!=0)&&((model_.BULKMOD)!=0)))
6999  {
7000  // I(g,si) <+ ((devsign*ddt(qg_acc)))
7001  dynamicContributions[admsNodeID_g] += (devsign*(qg_acc));
7002  dynamicContributions[admsNodeID_si] -= (devsign*(qg_acc));
7003  // I(e,si) <+ ((devsign*ddt(qb_acc)))
7004  dynamicContributions[admsNodeID_e] += (devsign*(qb_acc));
7005  dynamicContributions[admsNodeID_si] -= (devsign*(qb_acc));
7006  }
7007  // I(d,di) <+ ((V(d,di)/Rdrain))
7010  // I(s,si) <+ ((V(s,si)/Rsource))
7013  // I(di,si) <+ (flicker_noise(FNPowerAt1Hz,EF,"flicker"))
7014  // I(d,di) <+ (white_noise((((4*Vtm)*1.60219e-19)*gdpr),"thermal"))
7015  // I(s,si) <+ (white_noise((((4*Vtm)*1.60219e-19)*gspr),"thermal"))
7016  // I(di,si) <+ (white_noise(sid,"thermal"))
7017  if (((model_.IGCMOD)!=0))
7018  {
7019  if ((sigvds>0))
7020  {
7021  // I(g,si) <+ (white_noise(((2*1.60219e-19)*abs((igcs+igs))),"shot"))
7022  // I(g,di) <+ (white_noise(((2*1.60219e-19)*abs((igcd+igd))),"shot"))
7023  }
7024  else
7025  {
7026  // I(g,di) <+ (white_noise(((2*1.60219e-19)*abs((igcs+igs))),"shot"))
7027  // I(g,si) <+ (white_noise(((2*1.60219e-19)*abs((igcd+igd))),"shot"))
7028  }
7029  }
7030  if (((model_.IGBMOD)!=0))
7031  {
7032  if (((model_.BULKMOD)!=0))
7033  {
7034  // I(g,e) <+ (white_noise(((2*1.60219e-19)*abs((igbinv+igbacc))),"shot"))
7035  }
7036  else
7037  {
7038  // I(g,si) <+ (white_noise(((2*1.60219e-19)*abs(igbs)),"shot"))
7039  // I(g,di) <+ (white_noise(((2*1.60219e-19)*abs(igbd)),"shot"))
7040  }
7041  }
7042 
7043 
7044  // -- endcode converted from analog/code block
7045 #ifdef Xyce_DEBUG_DEVICE
7047  {
7048  Xyce::dout() << " probeVars[admsProbeID_V_s_si] = "
7049  <<probeVars[admsProbeID_V_s_si].val() << std::endl;
7050  Xyce::dout() << " probeVars[admsProbeID_V_d_di] = "
7051  <<probeVars[admsProbeID_V_d_di].val() << std::endl;
7052  Xyce::dout() << " probeVars[admsProbeID_V_e_g] = "
7053  <<probeVars[admsProbeID_V_e_g].val() << std::endl;
7054  Xyce::dout() << " probeVars[admsProbeID_V_d_s] = "
7055  <<probeVars[admsProbeID_V_d_s].val() << std::endl;
7056  Xyce::dout() << " probeVars[admsProbeID_V_g_d] = "
7057  <<probeVars[admsProbeID_V_g_d].val() << std::endl;
7058  Xyce::dout() << " probeVars[admsProbeID_V_g_s] = "
7059  <<probeVars[admsProbeID_V_g_s].val() << std::endl;
7060  Xyce::dout() << " probeVars[admsProbeID_V_di_d] = "
7061  <<probeVars[admsProbeID_V_di_d].val() << std::endl;
7062  Xyce::dout() << " probeVars[admsProbeID_V_si_s] = "
7063  <<probeVars[admsProbeID_V_si_s].val() << std::endl;
7064  Xyce::dout() << " probeVars[admsProbeID_V_g_e] = "
7065  <<probeVars[admsProbeID_V_g_e].val() << std::endl;
7066  Xyce::dout() << " probeVars[admsProbeID_V_e_di] = "
7067  <<probeVars[admsProbeID_V_e_di].val() << std::endl;
7068  Xyce::dout() << " probeVars[admsProbeID_V_e_si] = "
7069  <<probeVars[admsProbeID_V_e_si].val() << std::endl;
7070  Xyce::dout() << " probeVars[admsProbeID_V_g_di] = "
7071  <<probeVars[admsProbeID_V_g_di].val() << std::endl;
7072  Xyce::dout() << " probeVars[admsProbeID_V_di_si] = "
7073  <<probeVars[admsProbeID_V_di_si].val() << std::endl;
7074  Xyce::dout() << " probeVars[admsProbeID_V_g_si] = "
7075  <<probeVars[admsProbeID_V_g_si].val() << std::endl;
7076  Xyce::dout() << " staticContributions[admsNodeID_d] = "
7077  <<staticContributions[admsNodeID_d].val() << std::endl;
7078  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_s_si) << std::endl;
7079  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_d_di) << std::endl;
7080  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_e_g) << std::endl;
7081  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_d_s) << std::endl;
7082  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_d) << std::endl;
7083  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_s) << std::endl;
7084  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_di_d) << std::endl;
7085  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s) << std::endl;
7086  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_e) << std::endl;
7087  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_e_di) << std::endl;
7088  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_e_si) << std::endl;
7089  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_di) << std::endl;
7090  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_di_si) << std::endl;
7091  Xyce::dout() << " staticContributions[admsNodeID_d].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_d].dx(admsProbeID_V_g_si) << std::endl;
7092  Xyce::dout() << " dynamicContributions[admsNodeID_d] = "
7093  <<dynamicContributions[admsNodeID_d].val() << std::endl;
7094  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_s_si) << std::endl;
7095  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_di) << std::endl;
7096  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_g) << std::endl;
7097  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s) << std::endl;
7098  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_d) << std::endl;
7099  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_s) << std::endl;
7100  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_d) << std::endl;
7101  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_si_s) << std::endl;
7102  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_e) << std::endl;
7103  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_di) << std::endl;
7104  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_e_si) << std::endl;
7105  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_di) << std::endl;
7106  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_di_si) << std::endl;
7107  Xyce::dout() << " dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_d].dx(admsProbeID_V_g_si) << std::endl;
7108  Xyce::dout() << " staticContributions[admsNodeID_g] = "
7109  <<staticContributions[admsNodeID_g].val() << std::endl;
7110  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_s_si) << std::endl;
7111  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_d_di) << std::endl;
7112  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_e_g) << std::endl;
7113  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_d_s) << std::endl;
7114  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_d) << std::endl;
7115  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_s) << std::endl;
7116  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d) << std::endl;
7117  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s) << std::endl;
7118  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_e) << std::endl;
7119  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_e_di) << std::endl;
7120  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_e_si) << std::endl;
7121  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_di) << std::endl;
7122  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_di_si) << std::endl;
7123  Xyce::dout() << " staticContributions[admsNodeID_g].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_g].dx(admsProbeID_V_g_si) << std::endl;
7124  Xyce::dout() << " dynamicContributions[admsNodeID_g] = "
7125  <<dynamicContributions[admsNodeID_g].val() << std::endl;
7126  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_s_si) << std::endl;
7127  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_di) << std::endl;
7128  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_g) << std::endl;
7129  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_d_s) << std::endl;
7130  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d) << std::endl;
7131  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s) << std::endl;
7132  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_d) << std::endl;
7133  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_si_s) << std::endl;
7134  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_e) << std::endl;
7135  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_di) << std::endl;
7136  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_e_si) << std::endl;
7137  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_di) << std::endl;
7138  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_di_si) << std::endl;
7139  Xyce::dout() << " dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_si) << std::endl;
7140  Xyce::dout() << " staticContributions[admsNodeID_s] = "
7141  <<staticContributions[admsNodeID_s].val() << std::endl;
7142  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_s_si) << std::endl;
7143  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_d_di) << std::endl;
7144  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_e_g) << std::endl;
7145  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_d_s) << std::endl;
7146  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_d) << std::endl;
7147  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_s) << std::endl;
7148  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d) << std::endl;
7149  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_si_s) << std::endl;
7150  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_e) << std::endl;
7151  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_e_di) << std::endl;
7152  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_e_si) << std::endl;
7153  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_di) << std::endl;
7154  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_di_si) << std::endl;
7155  Xyce::dout() << " staticContributions[admsNodeID_s].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_s].dx(admsProbeID_V_g_si) << std::endl;
7156  Xyce::dout() << " dynamicContributions[admsNodeID_s] = "
7157  <<dynamicContributions[admsNodeID_s].val() << std::endl;
7158  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_s_si) << std::endl;
7159  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_di) << std::endl;
7160  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_g) << std::endl;
7161  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s) << std::endl;
7162  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_d) << std::endl;
7163  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_s) << std::endl;
7164  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_d) << std::endl;
7165  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_si_s) << std::endl;
7166  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_e) << std::endl;
7167  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_di) << std::endl;
7168  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_e_si) << std::endl;
7169  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_di) << std::endl;
7170  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_di_si) << std::endl;
7171  Xyce::dout() << " dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_s].dx(admsProbeID_V_g_si) << std::endl;
7172  Xyce::dout() << " staticContributions[admsNodeID_e] = "
7173  <<staticContributions[admsNodeID_e].val() << std::endl;
7174  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_s_si) << std::endl;
7175  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_d_di) << std::endl;
7176  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_g) << std::endl;
7177  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_d_s) << std::endl;
7178  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_d) << std::endl;
7179  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_s) << std::endl;
7180  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d) << std::endl;
7181  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s) << std::endl;
7182  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_e) << std::endl;
7183  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_di) << std::endl;
7184  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_si) << std::endl;
7185  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_di) << std::endl;
7186  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_di_si) << std::endl;
7187  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_g_si) << std::endl;
7188  Xyce::dout() << " dynamicContributions[admsNodeID_e] = "
7189  <<dynamicContributions[admsNodeID_e].val() << std::endl;
7190  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_s_si) << std::endl;
7191  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_di) << std::endl;
7192  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_g) << std::endl;
7193  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_d_s) << std::endl;
7194  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_d) << std::endl;
7195  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_s) << std::endl;
7196  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d) << std::endl;
7197  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s) << std::endl;
7198  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_e) << std::endl;
7199  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_di) << std::endl;
7200  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_si) << std::endl;
7201  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_di) << std::endl;
7202  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_si) << std::endl;
7203  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_g_si) << std::endl;
7204  Xyce::dout() << " staticContributions[admsNodeID_di] = "
7205  <<staticContributions[admsNodeID_di].val() << std::endl;
7206  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_s_si) << std::endl;
7207  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_d_di) << std::endl;
7208  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_e_g) << std::endl;
7209  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_d_s) << std::endl;
7210  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_d) << std::endl;
7211  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_s) << std::endl;
7212  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_di_d) << std::endl;
7213  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s) << std::endl;
7214  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_e) << std::endl;
7215  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_e_di) << std::endl;
7216  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_e_si) << std::endl;
7217  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_di) << std::endl;
7218  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_di_si) << std::endl;
7219  Xyce::dout() << " staticContributions[admsNodeID_di].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_di].dx(admsProbeID_V_g_si) << std::endl;
7220  Xyce::dout() << " dynamicContributions[admsNodeID_di] = "
7221  <<dynamicContributions[admsNodeID_di].val() << std::endl;
7222  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_s_si) << std::endl;
7223  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_di) << std::endl;
7224  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_g) << std::endl;
7225  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_d_s) << std::endl;
7226  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_d) << std::endl;
7227  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_s) << std::endl;
7228  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_d) << std::endl;
7229  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s) << std::endl;
7230  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_e) << std::endl;
7231  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_di) << std::endl;
7232  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_e_si) << std::endl;
7233  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_di) << std::endl;
7234  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_di_si) << std::endl;
7235  Xyce::dout() << " dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_di].dx(admsProbeID_V_g_si) << std::endl;
7236  Xyce::dout() << " staticContributions[admsNodeID_si] = "
7237  <<staticContributions[admsNodeID_si].val() << std::endl;
7238  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_s_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_s_si) << std::endl;
7239  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_d_di) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_d_di) << std::endl;
7240  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_e_g) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_e_g) << std::endl;
7241  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_d_s) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_d_s) << std::endl;
7242  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_d) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_d) << std::endl;
7243  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_s) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_s) << std::endl;
7244  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d) << std::endl;
7245  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_si_s) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_si_s) << std::endl;
7246  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_e) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_e) << std::endl;
7247  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_e_di) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_e_di) << std::endl;
7248  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_e_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_e_si) << std::endl;
7249  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_di) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_di) << std::endl;
7250  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_di_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_di_si) << std::endl;
7251  Xyce::dout() << " staticContributions[admsNodeID_si].dx(admsProbeID_V_g_si) = " <<staticContributions[admsNodeID_si].dx(admsProbeID_V_g_si) << std::endl;
7252  Xyce::dout() << " dynamicContributions[admsNodeID_si] = "
7253  <<dynamicContributions[admsNodeID_si].val() << std::endl;
7254  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_s_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_s_si) << std::endl;
7255  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_di) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_di) << std::endl;
7256  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_g) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_g) << std::endl;
7257  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_s) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_d_s) << std::endl;
7258  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_d) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_d) << std::endl;
7259  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_s) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_s) << std::endl;
7260  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d) << std::endl;
7261  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_si_s) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_si_s) << std::endl;
7262  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_e) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_e) << std::endl;
7263  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_di) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_di) << std::endl;
7264  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_e_si) << std::endl;
7265  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_di) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_di) << std::endl;
7266  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_si) << std::endl;
7267  Xyce::dout() << " dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_si) = " <<dynamicContributions[admsNodeID_si].dx(admsProbeID_V_g_si) << std::endl;
7268 
7269  if (!origFlag)
7270  Xyce::dout() << "This step was limited by this device." << std::endl;
7271  }
7272 #endif // Xyce_DEBUG_DEVICE
7273  return true;
7274 }
7275 
7276 //-----------------------------------------------------------------------------
7277 // Function : Instance::loadDAEdFdx
7278 // Purpose :
7279 // Special Notes : Load the dFdx ("static jacobian") matrix
7280 // Scope : public
7281 // Creator : admsXml
7282 // Creation Date :
7283 //-----------------------------------------------------------------------------
7285 {
7286  bool bsuccess = true;
7287  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
7288 
7289 #ifdef Xyce_DEBUG_DEVICE
7290  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7291  {
7292  Xyce::dout() << subsection_divider << std::endl;
7293  Xyce::dout() << "ADMSbsimcmg::Instance::loadDAEdFdx (" << getName() << "):" << std::endl;
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
7396 
7397 
7398 #ifdef Xyce_DEBUG_DEVICE
7399  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7400  {
7402  }
7403 #endif
7404  (*f_g_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s);
7405 
7406 
7407 #ifdef Xyce_DEBUG_DEVICE
7408  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7409  {
7410  Xyce::dout() << " (*f_g_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_g].dx(admsProbeID_V_si_s)<< std::endl;
7411  }
7412 #endif
7414 
7415 
7416 #ifdef Xyce_DEBUG_DEVICE
7417  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7418  {
7419  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;
7420  }
7421 #endif
7422  (*f_g_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d);
7423 
7424 
7425 #ifdef Xyce_DEBUG_DEVICE
7426  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7427  {
7428  Xyce::dout() << " (*f_g_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_g].dx(admsProbeID_V_di_d)<< std::endl;
7429  }
7430 #endif
7431  (*f_si_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d);
7432 
7433 
7434 #ifdef Xyce_DEBUG_DEVICE
7435  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7436  {
7437  Xyce::dout() << " (*f_si_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_si].dx(admsProbeID_V_di_d)<< std::endl;
7438  }
7439 #endif
7440  (*f_di_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s);
7441 
7442 
7443 #ifdef Xyce_DEBUG_DEVICE
7444  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7445  {
7446  Xyce::dout() << " (*f_di_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_di].dx(admsProbeID_V_si_s)<< std::endl;
7447  }
7448 #endif
7450 
7451 
7452 #ifdef Xyce_DEBUG_DEVICE
7453  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7454  {
7455  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;
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
7486 
7487 
7488 #ifdef Xyce_DEBUG_DEVICE
7489  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7490  {
7492  }
7493 #endif
7494  (*f_e_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s);
7495 
7496 
7497 #ifdef Xyce_DEBUG_DEVICE
7498  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7499  {
7500  Xyce::dout() << " (*f_e_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_e].dx(admsProbeID_V_si_s)<< std::endl;
7501  }
7502 #endif
7503  (*f_e_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d);
7504 
7505 
7506 #ifdef Xyce_DEBUG_DEVICE
7507  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7508  {
7509  Xyce::dout() << " (*f_e_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_e].dx(admsProbeID_V_di_d)<< std::endl;
7510  }
7511 #endif
7513 
7514 
7515 #ifdef Xyce_DEBUG_DEVICE
7516  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7517  {
7518  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;
7519  }
7520 #endif
7521  (*f_d_Equ_s_Node_Ptr) += -staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s);
7522 
7523 
7524 #ifdef Xyce_DEBUG_DEVICE
7525  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7526  {
7527  Xyce::dout() << " (*f_d_Equ_s_Node_Ptr) += " << -staticContributions[admsNodeID_d].dx(admsProbeID_V_si_s)<< std::endl;
7528  }
7529 #endif
7530  (*f_s_Equ_d_Node_Ptr) += -staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d);
7531 
7532 
7533 #ifdef Xyce_DEBUG_DEVICE
7534  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7535  {
7536  Xyce::dout() << " (*f_s_Equ_d_Node_Ptr) += " << -staticContributions[admsNodeID_s].dx(admsProbeID_V_di_d)<< std::endl;
7537  }
7538 #endif
7540 
7541 
7542 #ifdef Xyce_DEBUG_DEVICE
7543  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7544  {
7545  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;
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
7612 
7613 
7614 #ifdef Xyce_DEBUG_DEVICE
7615  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7616  {
7618  }
7619 #endif
7620 
7621 
7622  return bsuccess;
7623 }
7624 
7625 
7626 //-----------------------------------------------------------------------------
7627 // Function : Instance::loadDAEdQdx
7628 // Purpose :
7629 // Special Notes : Load the dQdx ("dynamic jacobian") matrix
7630 // Scope : public
7631 // Creator : admsXml
7632 // Creation Date :
7633 //-----------------------------------------------------------------------------
7635 {
7636  bool bsuccess = true;
7637  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
7638 
7639 #ifdef Xyce_DEBUG_DEVICE
7640  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7641  {
7642  Xyce::dout() << subsection_divider << std::endl;
7643  Xyce::dout() << "ADMSbsimcmg::Instance::loadDAEdQdx (" << getName() << "):" << std::endl;
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
7746 
7747 
7748 #ifdef Xyce_DEBUG_DEVICE
7749  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7750  {
7752  }
7753 #endif
7754  (*q_g_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s);
7755 
7756 
7757 #ifdef Xyce_DEBUG_DEVICE
7758  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7759  {
7760  Xyce::dout() << " (*q_g_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_s)<< std::endl;
7761  }
7762 #endif
7764 
7765 
7766 #ifdef Xyce_DEBUG_DEVICE
7767  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7768  {
7769  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;
7770  }
7771 #endif
7772  (*q_g_Equ_d_Node_Ptr) += -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d);
7773 
7774 
7775 #ifdef Xyce_DEBUG_DEVICE
7776  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7777  {
7778  Xyce::dout() << " (*q_g_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_g].dx(admsProbeID_V_g_d)<< std::endl;
7779  }
7780 #endif
7781  (*q_si_Equ_d_Node_Ptr) += -dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d);
7782 
7783 
7784 #ifdef Xyce_DEBUG_DEVICE
7785  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7786  {
7787  Xyce::dout() << " (*q_si_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_si].dx(admsProbeID_V_di_d)<< std::endl;
7788  }
7789 #endif
7790  (*q_di_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s);
7791 
7792 
7793 #ifdef Xyce_DEBUG_DEVICE
7794  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7795  {
7796  Xyce::dout() << " (*q_di_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_di].dx(admsProbeID_V_si_s)<< std::endl;
7797  }
7798 #endif
7800 
7801 
7802 #ifdef Xyce_DEBUG_DEVICE
7803  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7804  {
7805  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;
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
7836 
7837 
7838 #ifdef Xyce_DEBUG_DEVICE
7839  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7840  {
7842  }
7843 #endif
7844  (*q_e_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s);
7845 
7846 
7847 #ifdef Xyce_DEBUG_DEVICE
7848  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7849  {
7850  Xyce::dout() << " (*q_e_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_si_s)<< std::endl;
7851  }
7852 #endif
7853  (*q_e_Equ_d_Node_Ptr) += -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d);
7854 
7855 
7856 #ifdef Xyce_DEBUG_DEVICE
7857  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7858  {
7859  Xyce::dout() << " (*q_e_Equ_d_Node_Ptr) += " << -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_di_d)<< std::endl;
7860  }
7861 #endif
7863 
7864 
7865 #ifdef Xyce_DEBUG_DEVICE
7866  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7867  {
7868  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;
7869  }
7870 #endif
7871  (*q_d_Equ_s_Node_Ptr) += -dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s);
7872 
7873 
7874 #ifdef Xyce_DEBUG_DEVICE
7875  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7876  {
7877  Xyce::dout() << " (*q_d_Equ_s_Node_Ptr) += " << -dynamicContributions[admsNodeID_d].dx(admsProbeID_V_d_s)<< std::endl;
7878  }
7879 #endif
7880  (*q_s_Equ_d_Node_Ptr) += +dynamicContributions[admsNodeID_s].dx(admsProbeID_V_d_s);
7881 
7882 
7883 #ifdef Xyce_DEBUG_DEVICE
7884  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7885  {
7886  Xyce::dout() << " (*q_s_Equ_d_Node_Ptr) += " << +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  {
7895  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;
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
7962 
7963 
7964 #ifdef Xyce_DEBUG_DEVICE
7965  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
7966  {
7968  }
7969 #endif
7970 
7971 
7972  return bsuccess;
7973 }
7974 
7975 //-----------------------------------------------------------------------------
7976 // Function : Instance::updateTemperature
7977 // Purpose : Set temperature and update any parameters that depend on it
7978 // Special Notes : In Xyce ADMS, we'll simply copy the temperature, which is
7979 // in Kelvin, to our "admsTemperature" variable, which needs
7980 // to be in Celsius.
7981 // Scope : public
7982 // Creator : admsXml
7983 // Creation Date :
7984 //-----------------------------------------------------------------------------
7985 bool Instance::updateTemperature(const double & temperatureTemp)
7986 {
7987 
7988  admsTemperature = temperatureTemp;
7989  adms_vt_nom = adms_vt(temperatureTemp);
7990 
7991  return true;
7992 }
7993 
7994 // Class Model
7995 //-----------------------------------------------------------------------------
7996 // Function : Model::processParams
7997 // Purpose :
7998 // Special Notes :
7999 // Scope : public
8000 // Creator : admsXml
8001 // Creation Date :
8002 //-----------------------------------------------------------------------------
8004 {
8005 
8006  // Now we need to check that any parameters are within their ranges as
8007  // specified in the verilog:
8008 
8009  // Parameter NF : [ 1, (+inf) [
8010  if ( (!((NF >=1))) )
8011  {
8012  UserError0(*this) << "ADMSbsimcmg: Parameter NF value " << NF << " out of range [ 1, (+inf) [";
8013  }
8014 
8015  // Parameter U0MULT : [ 0, (+inf) [
8016  if ( (!((U0MULT >=0))) )
8017  {
8018  UserError0(*this) << "ADMSbsimcmg: Parameter U0MULT value " << U0MULT << " out of range [ 0, (+inf) [";
8019  }
8020 
8021  // Parameter IDS0MULT : [ 0, (+inf) [
8022  if ( (!((IDS0MULT >=0))) )
8023  {
8024  UserError0(*this) << "ADMSbsimcmg: Parameter IDS0MULT value " << IDS0MULT << " out of range [ 0, (+inf) [";
8025  }
8026 
8027  // Parameter DEVTYPE : [ 0, 1 ]
8028  if ( (!((DEVTYPE >=0 && DEVTYPE <=1 ))) )
8029  {
8030  UserError0(*this) << "ADMSbsimcmg: Parameter DEVTYPE value " << DEVTYPE << " out of range [ 0, 1 ]";
8031  }
8032 
8033  // Parameter BULKMOD : [ 0, 1 ]
8034  if ( (!((BULKMOD >=0 && BULKMOD <=1 ))) )
8035  {
8036  UserError0(*this) << "ADMSbsimcmg: Parameter BULKMOD value " << BULKMOD << " out of range [ 0, 1 ]";
8037  }
8038 
8039  // Parameter COREMOD : [ 0, 1 ]
8040  if ( (!((COREMOD >=0 && COREMOD <=1 ))) )
8041  {
8042  UserError0(*this) << "ADMSbsimcmg: Parameter COREMOD value " << COREMOD << " out of range [ 0, 1 ]";
8043  }
8044 
8045  // Parameter GEOMOD : [ 0, 3 ]
8046  if ( (!((GEOMOD >=0 && GEOMOD <=3 ))) )
8047  {
8048  UserError0(*this) << "ADMSbsimcmg: Parameter GEOMOD value " << GEOMOD << " out of range [ 0, 3 ]";
8049  }
8050 
8051  // Parameter CGEO1SW : [ 0, 1 ]
8052  if ( (!((CGEO1SW >=0 && CGEO1SW <=1 ))) )
8053  {
8054  UserError0(*this) << "ADMSbsimcmg: Parameter CGEO1SW value " << CGEO1SW << " out of range [ 0, 1 ]";
8055  }
8056 
8057  // Parameter RDSMOD : [ 0, 1 ]
8058  if ( (!((RDSMOD >=0 && RDSMOD <=1 ))) )
8059  {
8060  UserError0(*this) << "ADMSbsimcmg: Parameter RDSMOD value " << RDSMOD << " out of range [ 0, 1 ]";
8061  }
8062 
8063  // Parameter ASYMMOD : [ 0, 1 ]
8064  if ( (!((ASYMMOD >=0 && ASYMMOD <=1 ))) )
8065  {
8066  UserError0(*this) << "ADMSbsimcmg: Parameter ASYMMOD value " << ASYMMOD << " out of range [ 0, 1 ]";
8067  }
8068 
8069  // Parameter IGCMOD : [ 0, 1 ]
8070  if ( (!((IGCMOD >=0 && IGCMOD <=1 ))) )
8071  {
8072  UserError0(*this) << "ADMSbsimcmg: Parameter IGCMOD value " << IGCMOD << " out of range [ 0, 1 ]";
8073  }
8074 
8075  // Parameter IGBMOD : [ 0, 1 ]
8076  if ( (!((IGBMOD >=0 && IGBMOD <=1 ))) )
8077  {
8078  UserError0(*this) << "ADMSbsimcmg: Parameter IGBMOD value " << IGBMOD << " out of range [ 0, 1 ]";
8079  }
8080 
8081  // Parameter GIDLMOD : [ 0, 1 ]
8082  if ( (!((GIDLMOD >=0 && GIDLMOD <=1 ))) )
8083  {
8084  UserError0(*this) << "ADMSbsimcmg: Parameter GIDLMOD value " << GIDLMOD << " out of range [ 0, 1 ]";
8085  }
8086 
8087  // Parameter IIMOD : [ 0, 2 ]
8088  if ( (!((IIMOD >=0 && IIMOD <=2 ))) )
8089  {
8090  UserError0(*this) << "ADMSbsimcmg: Parameter IIMOD value " << IIMOD << " out of range [ 0, 2 ]";
8091  }
8092 
8093  // Parameter NQSMOD : [ 0, 2 ]
8094  if ( (!((NQSMOD >=0 && NQSMOD <=2 ))) )
8095  {
8096  UserError0(*this) << "ADMSbsimcmg: Parameter NQSMOD value " << NQSMOD << " out of range [ 0, 2 ]";
8097  }
8098 
8099  // Parameter SHMOD : [ 0, 1 ]
8100  if ( (!((SHMOD >=0 && SHMOD <=1 ))) )
8101  {
8102  UserError0(*this) << "ADMSbsimcmg: Parameter SHMOD value " << SHMOD << " out of range [ 0, 1 ]";
8103  }
8104 
8105  // Parameter RGATEMOD : [ 0, 1 ]
8106  if ( (!((RGATEMOD >=0 && RGATEMOD <=1 ))) )
8107  {
8108  UserError0(*this) << "ADMSbsimcmg: Parameter RGATEMOD value " << RGATEMOD << " out of range [ 0, 1 ]";
8109  }
8110 
8111  // Parameter RGEOMOD : [ 0, 1 ]
8112  if ( (!((RGEOMOD >=0 && RGEOMOD <=1 ))) )
8113  {
8114  UserError0(*this) << "ADMSbsimcmg: Parameter RGEOMOD value " << RGEOMOD << " out of range [ 0, 1 ]";
8115  }
8116 
8117  // Parameter CGEOMOD : [ 0, 2 ]
8118  if ( (!((CGEOMOD >=0 && CGEOMOD <=2 ))) )
8119  {
8120  UserError0(*this) << "ADMSbsimcmg: Parameter CGEOMOD value " << CGEOMOD << " out of range [ 0, 2 ]";
8121  }
8122 
8123  // Parameter CAPMOD : [ 0, 1 ]
8124  if ( (!((CAPMOD >=0 && CAPMOD <=1 ))) )
8125  {
8126  UserError0(*this) << "ADMSbsimcmg: Parameter CAPMOD value " << CAPMOD << " out of range [ 0, 1 ]";
8127  }
8128 
8129  // Parameter EOT : [ 0.1*1.0e-9, (+inf) [
8130  if ( (!((EOT >=0.1*1.0e-9))) )
8131  {
8132  UserError0(*this) << "ADMSbsimcmg: Parameter EOT value " << EOT << " out of range [ 0.1*1.0e-9, (+inf) [";
8133  }
8134 
8135  // Parameter TOXP : [ 0.1*1.0e-9, (+inf) [
8136  if ( (!((TOXP >=0.1*1.0e-9))) )
8137  {
8138  UserError0(*this) << "ADMSbsimcmg: Parameter TOXP value " << TOXP << " out of range [ 0.1*1.0e-9, (+inf) [";
8139  }
8140 
8141  // Parameter EOTBOX : [ 1*1.0e-9, (+inf) [
8142  if ( (!((EOTBOX >=1*1.0e-9))) )
8143  {
8144  UserError0(*this) << "ADMSbsimcmg: Parameter EOTBOX value " << EOTBOX << " out of range [ 1*1.0e-9, (+inf) [";
8145  }
8146 
8147  // Parameter HFIN : [ 1*1.0e-9, (+inf) [
8148  if ( (!((HFIN >=1*1.0e-9))) )
8149  {
8150  UserError0(*this) << "ADMSbsimcmg: Parameter HFIN value " << HFIN << " out of range [ 1*1.0e-9, (+inf) [";
8151  }
8152 
8153  // Parameter FECH : [ 0, (+inf) [
8154  if ( (!((FECH >=0))) )
8155  {
8156  UserError0(*this) << "ADMSbsimcmg: Parameter FECH value " << FECH << " out of range [ 0, (+inf) [";
8157  }
8158 
8159  // Parameter FECHCV : [ 0, (+inf) [
8160  if ( (!((FECHCV >=0))) )
8161  {
8162  UserError0(*this) << "ADMSbsimcmg: Parameter FECHCV value " << FECHCV << " out of range [ 0, (+inf) [";
8163  }
8164 
8165  // Parameter NBODY : [ 1e18, 5e24 ]
8166  if ( (!((NBODY >=1e18 && NBODY <=5e24 ))) )
8167  {
8168  UserError0(*this) << "ADMSbsimcmg: Parameter NBODY value " << NBODY << " out of range [ 1e18, 5e24 ]";
8169  }
8170 
8171  // Parameter NBODYN1 : [ (-0.08), (+inf) [
8172  if ( (!((NBODYN1 >=(-0.08)))) )
8173  {
8174  UserError0(*this) << "ADMSbsimcmg: Parameter NBODYN1 value " << NBODYN1 << " out of range [ (-0.08), (+inf) [";
8175  }
8176 
8177  // Parameter NBODYN2 : [ 1.0e-5, (+inf) [
8178  if ( (!((NBODYN2 >=1.0e-5))) )
8179  {
8180  UserError0(*this) << "ADMSbsimcmg: Parameter NBODYN2 value " << NBODYN2 << " out of range [ 1.0e-5, (+inf) [";
8181  }
8182 
8183  // Parameter NSD : [ 2e25, 1e27 ]
8184  if ( (!((NSD >=2e25 && NSD <=1e27 ))) )
8185  {
8186  UserError0(*this) << "ADMSbsimcmg: Parameter NSD value " << NSD << " out of range [ 2e25, 1e27 ]";
8187  }
8188 
8189  // Parameter PHIG : [ 0, (+inf) [
8190  if ( (!((PHIG >=0))) )
8191  {
8192  UserError0(*this) << "ADMSbsimcmg: Parameter PHIG value " << PHIG << " out of range [ 0, (+inf) [";
8193  }
8194 
8195  // Parameter PHIGN1 : [ (-0.08), (+inf) [
8196  if ( (!((PHIGN1 >=(-0.08)))) )
8197  {
8198  UserError0(*this) << "ADMSbsimcmg: Parameter PHIGN1 value " << PHIGN1 << " out of range [ (-0.08), (+inf) [";
8199  }
8200 
8201  // Parameter PHIGN2 : [ 1.0e-5, (+inf) [
8202  if ( (!((PHIGN2 >=1.0e-5))) )
8203  {
8204  UserError0(*this) << "ADMSbsimcmg: Parameter PHIGN2 value " << PHIGN2 << " out of range [ 1.0e-5, (+inf) [";
8205  }
8206 
8207  // Parameter EPSROX : [ 1, (+inf) [
8208  if ( (!((EPSROX >=1))) )
8209  {
8210  UserError0(*this) << "ADMSbsimcmg: Parameter EPSROX value " << EPSROX << " out of range [ 1, (+inf) [";
8211  }
8212 
8213  // Parameter EPSRSUB : [ 1, (+inf) [
8214  if ( (!((EPSRSUB >=1))) )
8215  {
8216  UserError0(*this) << "ADMSbsimcmg: Parameter EPSRSUB value " << EPSRSUB << " out of range [ 1, (+inf) [";
8217  }
8218 
8219  // Parameter EASUB : [ 0, (+inf) [
8220  if ( (!((EASUB >=0))) )
8221  {
8222  UserError0(*this) << "ADMSbsimcmg: Parameter EASUB value " << EASUB << " out of range [ 0, (+inf) [";
8223  }
8224 
8225  // Parameter CDSCN1 : [ (-0.08), (+inf) [
8226  if ( (!((CDSCN1 >=(-0.08)))) )
8227  {
8228  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCN1 value " << CDSCN1 << " out of range [ (-0.08), (+inf) [";
8229  }
8230 
8231  // Parameter CDSCN2 : [ 1.0e-5, (+inf) [
8232  if ( (!((CDSCN2 >=1.0e-5))) )
8233  {
8234  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCN2 value " << CDSCN2 << " out of range [ 1.0e-5, (+inf) [";
8235  }
8236 
8237  // Parameter CDSCDN1 : [ (-0.08), (+inf) [
8238  if ( (!((CDSCDN1 >=(-0.08)))) )
8239  {
8240  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDN1 value " << CDSCDN1 << " out of range [ (-0.08), (+inf) [";
8241  }
8242 
8243  // Parameter CDSCDN2 : [ 1.0e-5, (+inf) [
8244  if ( (!((CDSCDN2 >=1.0e-5))) )
8245  {
8246  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDN2 value " << CDSCDN2 << " out of range [ 1.0e-5, (+inf) [";
8247  }
8248 
8249  // Parameter CDSCDRN1 : [ (-0.08), (+inf) [
8250  if ( (!((CDSCDRN1 >=(-0.08)))) )
8251  {
8252  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDRN1 value " << CDSCDRN1 << " out of range [ (-0.08), (+inf) [";
8253  }
8254 
8255  // Parameter CDSCDRN2 : [ 1.0e-5, (+inf) [
8256  if ( (!((CDSCDRN2 >=1.0e-5))) )
8257  {
8258  UserError0(*this) << "ADMSbsimcmg: Parameter CDSCDRN2 value " << CDSCDRN2 << " out of range [ 1.0e-5, (+inf) [";
8259  }
8260 
8261  // Parameter ETA0N1 : [ (-0.08), (+inf) [
8262  if ( (!((ETA0N1 >=(-0.08)))) )
8263  {
8264  UserError0(*this) << "ADMSbsimcmg: Parameter ETA0N1 value " << ETA0N1 << " out of range [ (-0.08), (+inf) [";
8265  }
8266 
8267  // Parameter ETA0N2 : [ 1.0e-5, (+inf) [
8268  if ( (!((ETA0N2 >=1.0e-5))) )
8269  {
8270  UserError0(*this) << "ADMSbsimcmg: Parameter ETA0N2 value " << ETA0N2 << " out of range [ 1.0e-5, (+inf) [";
8271  }
8272 
8273  // Parameter VSATN1 : [ (-0.08), (+inf) [
8274  if ( (!((VSATN1 >=(-0.08)))) )
8275  {
8276  UserError0(*this) << "ADMSbsimcmg: Parameter VSATN1 value " << VSATN1 << " out of range [ (-0.08), (+inf) [";
8277  }
8278 
8279  // Parameter VSATN2 : [ 1.0e-5, (+inf) [
8280  if ( (!((VSATN2 >=1.0e-5))) )
8281  {
8282  UserError0(*this) << "ADMSbsimcmg: Parameter VSATN2 value " << VSATN2 << " out of range [ 1.0e-5, (+inf) [";
8283  }
8284 
8285  // Parameter VSAT1N1 : [ (-0.08), (+inf) [
8286  if ( (!((VSAT1N1 >=(-0.08)))) )
8287  {
8288  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1N1 value " << VSAT1N1 << " out of range [ (-0.08), (+inf) [";
8289  }
8290 
8291  // Parameter VSAT1N2 : [ 1.0e-5, (+inf) [
8292  if ( (!((VSAT1N2 >=1.0e-5))) )
8293  {
8294  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1N2 value " << VSAT1N2 << " out of range [ 1.0e-5, (+inf) [";
8295  }
8296 
8297  // Parameter VSAT1RN1 : [ (-0.08), (+inf) [
8298  if ( (!((VSAT1RN1 >=(-0.08)))) )
8299  {
8300  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1RN1 value " << VSAT1RN1 << " out of range [ (-0.08), (+inf) [";
8301  }
8302 
8303  // Parameter VSAT1RN2 : [ 1.0e-5, (+inf) [
8304  if ( (!((VSAT1RN2 >=1.0e-5))) )
8305  {
8306  UserError0(*this) << "ADMSbsimcmg: Parameter VSAT1RN2 value " << VSAT1RN2 << " out of range [ 1.0e-5, (+inf) [";
8307  }
8308 
8309  // Parameter U0N1 : [ (-0.08), (+inf) [
8310  if ( (!((U0N1 >=(-0.08)))) )
8311  {
8312  UserError0(*this) << "ADMSbsimcmg: Parameter U0N1 value " << U0N1 << " out of range [ (-0.08), (+inf) [";
8313  }
8314 
8315  // Parameter U0N2 : [ 1.0e-5, (+inf) [
8316  if ( (!((U0N2 >=1.0e-5))) )
8317  {
8318  UserError0(*this) << "ADMSbsimcmg: Parameter U0N2 value " << U0N2 << " out of range [ 1.0e-5, (+inf) [";
8319  }
8320 
8321  // Parameter CHARGEWF : [ (-1), 1 ]
8322  if ( (!((CHARGEWF >=(-1) && CHARGEWF <=1 ))) )
8323  {
8324  UserError0(*this) << "ADMSbsimcmg: Parameter CHARGEWF value " << CHARGEWF << " out of range [ (-1), 1 ]";
8325  }
8326 
8327  // Parameter RSDR : [ 0, (+inf) [
8328  if ( (!((RSDR >=0))) )
8329  {
8330  UserError0(*this) << "ADMSbsimcmg: Parameter RSDR value " << RSDR << " out of range [ 0, (+inf) [";
8331  }
8332 
8333  // Parameter RSDRR : [ 0, (+inf) [
8334  if ( (!((RSDRR >=0))) )
8335  {
8336  UserError0(*this) << "ADMSbsimcmg: Parameter RSDRR value " << RSDRR << " out of range [ 0, (+inf) [";
8337  }
8338 
8339  // Parameter RDDR : [ 0, (+inf) [
8340  if ( (!((RDDR >=0))) )
8341  {
8342  UserError0(*this) << "ADMSbsimcmg: Parameter RDDR value " << RDDR << " out of range [ 0, (+inf) [";
8343  }
8344 
8345  // Parameter RDDRR : [ 0, (+inf) [
8346  if ( (!((RDDRR >=0))) )
8347  {
8348  UserError0(*this) << "ADMSbsimcmg: Parameter RDDRR value " << RDDRR << " out of range [ 0, (+inf) [";
8349  }
8350 
8351  // Parameter RGEXT : [ 0, (+inf) [
8352  if ( (!((RGEXT >=0))) )
8353  {
8354  UserError0(*this) << "ADMSbsimcmg: Parameter RGEXT value " << RGEXT << " out of range [ 0, (+inf) [";
8355  }
8356 
8357  // Parameter RGFIN : [ 1.0e-3, (+inf) [
8358  if ( (!((RGFIN >=1.0e-3))) )
8359  {
8360  UserError0(*this) << "ADMSbsimcmg: Parameter RGFIN value " << RGFIN << " out of range [ 1.0e-3, (+inf) [";
8361  }
8362 
8363  // Parameter RHOC : [ 1.0e-18, 1.0e-9 ]
8364  if ( (!((RHOC >=1.0e-18 && RHOC <=1.0e-9 ))) )
8365  {
8366  UserError0(*this) << "ADMSbsimcmg: Parameter RHOC value " << RHOC << " out of range [ 1.0e-18, 1.0e-9 ]";
8367  }
8368 
8369  // Parameter RHORSD : ] 0, (+inf) [
8370  if ( (!((RHORSD >0))) )
8371  {
8372  UserError0(*this) << "ADMSbsimcmg: Parameter RHORSD value " << RHORSD << " out of range ] 0, (+inf) [";
8373  }
8374 
8375  // Parameter CRATIO : [ 0, 1 ]
8376  if ( (!((CRATIO >=0 && CRATIO <=1 ))) )
8377  {
8378  UserError0(*this) << "ADMSbsimcmg: Parameter CRATIO value " << CRATIO << " out of range [ 0, 1 ]";
8379  }
8380 
8381  // Parameter DELTAPRSD : ] (-FPITCH), (+inf) [
8382  if ( (!((DELTAPRSD >(-FPITCH)))) )
8383  {
8384  UserError0(*this) << "ADMSbsimcmg: Parameter DELTAPRSD value " << DELTAPRSD << " out of range ] (-FPITCH), (+inf) [";
8385  }
8386 
8387  // Parameter SDTERM : [ 0, 1 ]
8388  if ( (!((SDTERM >=0 && SDTERM <=1 ))) )
8389  {
8390  UserError0(*this) << "ADMSbsimcmg: Parameter SDTERM value " << SDTERM << " out of range [ 0, 1 ]";
8391  }
8392 
8393  // Parameter LSP : ] 0, (+inf) [
8394  if ( (!((LSP >0))) )
8395  {
8396  UserError0(*this) << "ADMSbsimcmg: Parameter LSP value " << LSP << " out of range ] 0, (+inf) [";
8397  }
8398 
8399  // Parameter EPSRSP : [ 1, (+inf) [
8400  if ( (!((EPSRSP >=1))) )
8401  {
8402  UserError0(*this) << "ADMSbsimcmg: Parameter EPSRSP value " << EPSRSP << " out of range [ 1, (+inf) [";
8403  }
8404 
8405  // Parameter TGATE : ] 0, (+inf) [
8406  if ( (!((TGATE >0))) )
8407  {
8408  UserError0(*this) << "ADMSbsimcmg: Parameter TGATE value " << TGATE << " out of range ] 0, (+inf) [";
8409  }
8410 
8411  // Parameter TMASK : [ 0, (+inf) [
8412  if ( (!((TMASK >=0))) )
8413  {
8414  UserError0(*this) << "ADMSbsimcmg: Parameter TMASK value " << TMASK << " out of range [ 0, (+inf) [";
8415  }
8416 
8417  // Parameter ASILIEND : [ 0, (+inf) [
8418  if ( (!((ASILIEND >=0))) )
8419  {
8420  UserError0(*this) << "ADMSbsimcmg: Parameter ASILIEND value " << ASILIEND << " out of range [ 0, (+inf) [";
8421  }
8422 
8423  // Parameter ARSDEND : [ 0, (+inf) [
8424  if ( (!((ARSDEND >=0))) )
8425  {
8426  UserError0(*this) << "ADMSbsimcmg: Parameter ARSDEND value " << ARSDEND << " out of range [ 0, (+inf) [";
8427  }
8428 
8429  // Parameter PRSDEND : [ 0, (+inf) [
8430  if ( (!((PRSDEND >=0))) )
8431  {
8432  UserError0(*this) << "ADMSbsimcmg: Parameter PRSDEND value " << PRSDEND << " out of range [ 0, (+inf) [";
8433  }
8434 
8435  // Parameter NSDE : [ 1e25, 1e26 ]
8436  if ( (!((NSDE >=1e25 && NSDE <=1e26 ))) )
8437  {
8438  UserError0(*this) << "ADMSbsimcmg: Parameter NSDE value " << NSDE << " out of range [ 1e25, 1e26 ]";
8439  }
8440 
8441  // Parameter CGEOE : [ 0, (+inf) [
8442  if ( (!((CGEOE >=0))) )
8443  {
8444  UserError0(*this) << "ADMSbsimcmg: Parameter CGEOE value " << CGEOE << " out of range [ 0, (+inf) [";
8445  }
8446 
8447  // Parameter TOXREF : ] 0, (+inf) [
8448  if ( (!((TOXREF >0))) )
8449  {
8450  UserError0(*this) << "ADMSbsimcmg: Parameter TOXREF value " << TOXREF << " out of range ] 0, (+inf) [";
8451  }
8452 
8453  // Parameter EOTACC : [ 0.1*1.0e-9, (+inf) [
8454  if ( (!((EOTACC >=0.1*1.0e-9))) )
8455  {
8456  UserError0(*this) << "ADMSbsimcmg: Parameter EOTACC value " << EOTACC << " out of range [ 0.1*1.0e-9, (+inf) [";
8457  }
8458 
8459  // Parameter CFS : [ 0, (+inf) [
8460  if ( (!((CFS >=0))) )
8461  {
8462  UserError0(*this) << "ADMSbsimcmg: Parameter CFS value " << CFS << " out of range [ 0, (+inf) [";
8463  }
8464 
8465  // Parameter CFD : [ 0, (+inf) [
8466  if ( (!((CFD >=0))) )
8467  {
8468  UserError0(*this) << "ADMSbsimcmg: Parameter CFD value " << CFD << " out of range [ 0, (+inf) [";
8469  }
8470 
8471  // Parameter CGSO : [ 0, (+inf) [
8472  if ( (!((CGSO >=0))) )
8473  {
8474  UserError0(*this) << "ADMSbsimcmg: Parameter CGSO value " << CGSO << " out of range [ 0, (+inf) [";
8475  }
8476 
8477  // Parameter CGDO : [ 0, (+inf) [
8478  if ( (!((CGDO >=0))) )
8479  {
8480  UserError0(*this) << "ADMSbsimcmg: Parameter CGDO value " << CGDO << " out of range [ 0, (+inf) [";
8481  }
8482 
8483  // Parameter CGSL : [ 0, (+inf) [
8484  if ( (!((CGSL >=0))) )
8485  {
8486  UserError0(*this) << "ADMSbsimcmg: Parameter CGSL value " << CGSL << " out of range [ 0, (+inf) [";
8487  }
8488 
8489  // Parameter CGDL : [ 0, (+inf) [
8490  if ( (!((CGDL >=0))) )
8491  {
8492  UserError0(*this) << "ADMSbsimcmg: Parameter CGDL value " << CGDL << " out of range [ 0, (+inf) [";
8493  }
8494 
8495  // Parameter CKAPPAS : [ 0.02, (+inf) [
8496  if ( (!((CKAPPAS >=0.02))) )
8497  {
8498  UserError0(*this) << "ADMSbsimcmg: Parameter CKAPPAS value " << CKAPPAS << " out of range [ 0.02, (+inf) [";
8499  }
8500 
8501  // Parameter CKAPPAD : [ 0.02, (+inf) [
8502  if ( (!((CKAPPAD >=0.02))) )
8503  {
8504  UserError0(*this) << "ADMSbsimcmg: Parameter CKAPPAD value " << CKAPPAD << " out of range [ 0.02, (+inf) [";
8505  }
8506 
8507  // Parameter CGBO : [ 0, (+inf) [
8508  if ( (!((CGBO >=0))) )
8509  {
8510  UserError0(*this) << "ADMSbsimcmg: Parameter CGBO value " << CGBO << " out of range [ 0, (+inf) [";
8511  }
8512 
8513  // Parameter CGBN : [ 0, (+inf) [
8514  if ( (!((CGBN >=0))) )
8515  {
8516  UserError0(*this) << "ADMSbsimcmg: Parameter CGBN value " << CGBN << " out of range [ 0, (+inf) [";
8517  }
8518 
8519  // Parameter CGBL : [ 0, (+inf) [
8520  if ( (!((CGBL >=0))) )
8521  {
8522  UserError0(*this) << "ADMSbsimcmg: Parameter CGBL value " << CGBL << " out of range [ 0, (+inf) [";
8523  }
8524 
8525  // Parameter CKAPPAB : [ 0.02, (+inf) [
8526  if ( (!((CKAPPAB >=0.02))) )
8527  {
8528  UserError0(*this) << "ADMSbsimcmg: Parameter CKAPPAB value " << CKAPPAB << " out of range [ 0.02, (+inf) [";
8529  }
8530 
8531  // Parameter CSDESW : [ 0, (+inf) [
8532  if ( (!((CSDESW >=0))) )
8533  {
8534  UserError0(*this) << "ADMSbsimcmg: Parameter CSDESW value " << CSDESW << " out of range [ 0, (+inf) [";
8535  }
8536 
8537  // Parameter SJS : [ 0, (+inf) [
8538  if ( (!((SJS >=0))) )
8539  {
8540  UserError0(*this) << "ADMSbsimcmg: Parameter SJS value " << SJS << " out of range [ 0, (+inf) [";
8541  }
8542 
8543  // Parameter SJD : [ 0, (+inf) [
8544  if ( (!((SJD >=0))) )
8545  {
8546  UserError0(*this) << "ADMSbsimcmg: Parameter SJD value " << SJD << " out of range [ 0, (+inf) [";
8547  }
8548 
8549  // Parameter SJSWS : [ 0, (+inf) [
8550  if ( (!((SJSWS >=0))) )
8551  {
8552  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWS value " << SJSWS << " out of range [ 0, (+inf) [";
8553  }
8554 
8555  // Parameter SJSWD : [ 0, (+inf) [
8556  if ( (!((SJSWD >=0))) )
8557  {
8558  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWD value " << SJSWD << " out of range [ 0, (+inf) [";
8559  }
8560 
8561  // Parameter SJSWGS : [ 0, (+inf) [
8562  if ( (!((SJSWGS >=0))) )
8563  {
8564  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWGS value " << SJSWGS << " out of range [ 0, (+inf) [";
8565  }
8566 
8567  // Parameter SJSWGD : [ 0, (+inf) [
8568  if ( (!((SJSWGD >=0))) )
8569  {
8570  UserError0(*this) << "ADMSbsimcmg: Parameter SJSWGD value " << SJSWGD << " out of range [ 0, (+inf) [";
8571  }
8572 
8573  // Parameter NSEG : [ 4, 10 ]
8574  if ( (!((NSEG >=4 && NSEG <=10 ))) )
8575  {
8576  UserError0(*this) << "ADMSbsimcmg: Parameter NSEG value " << NSEG << " out of range [ 4, 10 ]";
8577  }
8578 
8579  // Parameter NTNOI : [ 0, (+inf) [
8580  if ( (!((NTNOI >=0))) )
8581  {
8582  UserError0(*this) << "ADMSbsimcmg: Parameter NTNOI value " << NTNOI << " out of range [ 0, (+inf) [";
8583  }
8584 
8585  // Parameter TNOM : [ (-273.15), (+inf) [
8586  if ( (!((TNOM >=(-273.15)))) )
8587  {
8588  UserError0(*this) << "ADMSbsimcmg: Parameter TNOM value " << TNOM << " out of range [ (-273.15), (+inf) [";
8589  }
8590 
8591  // Parameter RTH0 : [ 0, (+inf) [
8592  if ( (!((RTH0 >=0))) )
8593  {
8594  UserError0(*this) << "ADMSbsimcmg: Parameter RTH0 value " << RTH0 << " out of range [ 0, (+inf) [";
8595  }
8596 
8597  // Parameter CTH0 : [ 0, (+inf) [
8598  if ( (!((CTH0 >=0))) )
8599  {
8600  UserError0(*this) << "ADMSbsimcmg: Parameter CTH0 value " << CTH0 << " out of range [ 0, (+inf) [";
8601  }
8602 
8603  // Parameter WTH0 : [ 0, (+inf) [
8604  if ( (!((WTH0 >=0))) )
8605  {
8606  UserError0(*this) << "ADMSbsimcmg: Parameter WTH0 value " << WTH0 << " out of range [ 0, (+inf) [";
8607  }
8608 
8609 
8610  // and of course, this routine is where we should put the initial_model
8611  // stuff
8612 
8613 
8614  return true;
8615 }
8616 //----------------------------------------------------------------------------
8617 // Function : Model::processInstanceParams
8618 // Purpose :
8619 // Special Notes :
8620 // Scope : public
8621 // Creator :
8622 // Creation Date :
8623 //----------------------------------------------------------------------------
8625 {
8626 
8627  std::vector<Instance*>::iterator iter;
8628  std::vector<Instance*>::iterator first = instanceContainer.begin();
8629  std::vector<Instance*>::iterator last = instanceContainer.end();
8630 
8631  for (iter=first; iter!=last; ++iter)
8632  {
8633  (*iter)->processParams();
8634  }
8635 
8636  return true;
8637 }
8638 
8639 //-----------------------------------------------------------------------------
8640 // Function : Model::Model
8641 // Purpose : model block constructor
8642 // Special Notes :
8643 // Scope : public
8644 // Creator :
8645 // Creation Date :
8646 //-----------------------------------------------------------------------------
8648  const Configuration & configuration,
8649  const ModelBlock & model_block,
8650  const FactoryBlock & factory_block)
8651  : DeviceModel(model_block, configuration.getModelParameters(), factory_block),
8652  NF(1),
8653  XL(0),
8654  DTEMP(0),
8655  DELVTRAND(0),
8656  U0MULT(1),
8657  IDS0MULT(1),
8658  DEVTYPE(1),
8659  BULKMOD(0),
8660  COREMOD(0),
8661  GEOMOD(1),
8662  CGEO1SW(0),
8663  RDSMOD(0),
8664  ASYMMOD(0),
8665  IGCMOD(0),
8666  IGBMOD(0),
8667  GIDLMOD(0),
8668  IIMOD(0),
8669  NQSMOD(0),
8670  SHMOD(0),
8671  RGATEMOD(0),
8672  RGEOMOD(0),
8673  CGEOMOD(0),
8674  CAPMOD(0),
8675  LINT(0),
8676  LL(0),
8677  LLN(1),
8678  DLC(0),
8679  DLCACC(0),
8680  DLBIN(0),
8681  LLC(0),
8682  EOT(1.0*1.0e-9),
8683  TOXP(1.2*1.0e-9),
8684  EOTBOX(140*1.0e-9),
8685  HFIN(30*1.0e-9),
8686  FECH(1),
8687  DELTAW(0),
8688  FECHCV(1),
8689  DELTAWCV(0),
8690  NBODY(1e22),
8691  NBODYN1(0),
8692  NBODYN2(1.0e5),
8693  NSD(2e26),
8694  PHIG(4.61),
8695  PHIGL(0),
8696  PHIGN1(0),
8697  PHIGN2(1.0e5),
8698  EPSROX(3.9),
8699  EPSRSUB(11.9),
8700  EASUB(4.05),
8701  NI0SUB(1.1e16),
8702  BG0SUB(1.12),
8703  NC0SUB(2.86e25),
8704  NGATE(0.0),
8705  Imin(1.0E-15),
8706  CIT(0.0),
8707  CDSC(7e-3),
8708  CDSCN1(0),
8709  CDSCN2(1.0e5),
8710  CDSCD(7e-3),
8711  CDSCDN1(0),
8712  CDSCDN2(1.0e5),
8713  CDSCDR(0.0),
8714  CDSCDRN1(0.0),
8715  CDSCDRN2(0.0),
8716  DVT0(0.0),
8717  DVT1(0.60),
8718  DVT1SS(0.0),
8719  PHIN(0.05),
8720  ETA0(0.60),
8721  ETA0N1(0),
8722  ETA0N2(1.0e5),
8723  TETA0(0.0),
8724  ETA0R(0.0),
8725  TETA0R(0.0),
8726  DSUB(1.06),
8727  DVTP0(0),
8728  DVTP1(0),
8729  K1RSCE(0.0),
8730  LPE0(5.0*1.0e-9),
8731  DVTSHIFT(0),
8732  K0(0.0),
8733  K01(0.0),
8734  K0SI(1.0),
8735  K0SI1(0.0),
8736  K1SI(0.0),
8737  K1SI1(0.0),
8738  PHIBE(0.7),
8739  K1(0.0),
8740  K11(0.0),
8741  K1SAT(0.0),
8742  K1SAT1(0.0),
8743  QMFACTOR(0.0),
8744  QMTCENIV(0.0),
8745  QMTCENCV(0.0),
8746  QMTCENCVA(0.0),
8747  AQMTCEN(0.0),
8748  BQMTCEN(12.0e-9),
8749  ETAQM(0.54),
8750  QM0(1.00e-3),
8751  PQM(0.66),
8752  QM0ACC(1.00e-3),
8753  PQMACC(0.66),
8754  VSAT(85000),
8755  VSATN1(0),
8756  VSATN2(1.0e5),
8757  AVSAT(0.0),
8758  BVSAT(100.0e-9),
8759  VSAT1(0.0),
8760  VSAT1N1(0.0),
8761  VSAT1N2(0.0),
8762  VSAT1R(0.0),
8763  VSAT1RN1(0.0),
8764  VSAT1RN2(0.0),
8765  AVSAT1(0.0),
8766  BVSAT1(0.0),
8767  DELTAVSAT(1.0),
8768  PSAT(2.0),
8769  APSAT(0.0),
8770  BPSAT(1.0),
8771  KSATIV(1.0),
8772  VSATCV(0.0),
8773  AVSATCV(0.0),
8774  BVSATCV(0.0),
8775  DELTAVSATCV(0.0),
8776  PSATCV(0.0),
8777  APSATCV(0.0),
8778  BPSATCV(0.0),
8779  MEXP(4.0),
8780  AMEXP(0.0),
8781  BMEXP(1.0),
8782  MEXPR(0.0),
8783  AMEXPR(0.0),
8784  BMEXPR(0.0),
8785  PTWG(0.0),
8786  PTWGR(0.0),
8787  APTWG(0.0),
8788  BPTWG(100.0e-9),
8789  AT((-1.56e-3)),
8790  TMEXP(0.0),
8791  TMEXPR(0.0),
8792  PTWGT(0.004),
8793  U0(0.03),
8794  U0N1(0),
8795  U0N2(1.0e5),
8796  ETAMOB(2.0),
8797  UP(0),
8798  LPA(1.0),
8799  UA(0.3),
8800  AUA(0.0),
8801  BUA(100.0e-9),
8802  UC(0.0),
8803  EU(2.5),
8804  AEU(0.0),
8805  BEU(100.0e-9),
8806  UD(0.0),
8807  AUD(0.0),
8808  BUD(50.0e-9),
8809  UCS(1.0),
8810  UTE(0.0),
8811  UTL((-1.5e-3)),
8812  EMOBT(0.0),
8813  UA1(1.032e-3),
8814  UC1(0.056e-9),
8815  UD1(0.0),
8816  UCSTE((-4.775e-3)),
8817  CHARGEWF(0),
8818  RDSWMIN(0.0),
8819  RDSW(100.0),
8820  ARDSW(0.0),
8821  BRDSW(100.0e-9),
8822  RSWMIN(0.0),
8823  RSW(50.0),
8824  ARSW(0.0),
8825  BRSW(100.0e-9),
8826  RDWMIN(0.0),
8827  RDW(50.0),
8828  ARDW(0.0),
8829  BRDW(100.0e-9),
8830  RSDR(0.0),
8831  RSDRR(0.0),
8832  RDDR(0.0),
8833  RDDRR(0.0),
8834  PRSDR(1.0),
8835  PRDDR(0.0),
8836  PRWGS(0.0),
8837  PRWGD(0.0),
8838  WR(1.0),
8839  PRT(0.001),
8840  TRSDR(0.0),
8841  TRDDR(0.0),
8842  PDIBL1(1.30),
8843  PDIBL1R(0.0),
8844  PDIBL2(2.0e-4),
8845  DROUT(1.06),
8846  PVAG(1.0),
8847  PCLM(0.013),
8848  APCLM(0.0),
8849  BPCLM(100.0e-9),
8850  PCLMG(0.0),
8851  PCLMCV(0.0),
8852  A1(0.0),
8853  A11(0.0),
8854  A2(0.0),
8855  A21(0.0),
8856  RGEXT(0.0),
8857  RGFIN(1.0e-3),
8858  RSHS(0.0),
8859  RSHD(0.0),
8860  HEPI(10.0*1.0e-9),
8861  TSILI(10.0*1.0e-9),
8862  RHOC(1.0e-12),
8863  RHORSD(1.0),
8864  CRATIO(0.5),
8865  DELTAPRSD(0.0),
8866  SDTERM(0),
8867  LSP(0.0),
8868  EPSRSP(3.9),
8869  TGATE(30.0*1.0e-9),
8870  TMASK(30.0*1.0e-9),
8871  ASILIEND(0.0),
8872  ARSDEND(0.0),
8873  PRSDEND(0.0),
8874  NSDE(2e25),
8875  RGEOA(1.0),
8876  RGEOB(0.0),
8877  RGEOC(0.0),
8878  RGEOD(0.0),
8879  RGEOE(0.0),
8880  CGEOA(1.0),
8881  CGEOB(0.0),
8882  CGEOC(0.0),
8883  CGEOD(0.0),
8884  CGEOE(1.0),
8885  AIGBINV(1.11e-2),
8886  AIGBINV1(0),
8887  BIGBINV(9.49e-4),
8888  CIGBINV(6.00e-3),
8889  EIGBINV(1.1),
8890  NIGBINV(3.0),
8891  AIGBACC(1.36e-2),
8892  AIGBACC1(0),
8893  BIGBACC(1.71e-3),
8894  CIGBACC(7.5e-2),
8895  NIGBACC(1.0),
8896  AIGC(1.36e-2),
8897  AIGC1(0),
8898  BIGC(1.71e-3),
8899  CIGC(0.075),
8900  PIGCD(1.0),
8901  DLCIGS(0),
8902  AIGS(1.36e-2),
8903  AIGS1(0),
8904  BIGS(1.71e-3),
8905  CIGS(0.075),
8906  DLCIGD(0.0),
8907  AIGD(0.0),
8908  AIGD1(0.0),
8909  BIGD(0.0),
8910  CIGD(0.0),
8911  TOXREF(1.2*1.0e-9),
8912  TOXG(0.0),
8913  NTOX(1.0),
8914  POXEDGE(1.0),
8915  AGISL(6.055*1.0e-12),
8916  BGISL(0.3e9),
8917  CGISL(0.5),
8918  EGISL(0.2),
8919  PGISL(1.0),
8920  AGIDL(0.0),
8921  BGIDL(0.0),
8922  CGIDL(0.0),
8923  EGIDL(0.0),
8924  PGIDL(0.0),
8925  ALPHA0(0.0),
8926  ALPHA01(0.0),
8927  ALPHA1(0.0),
8928  ALPHA11(0.0),
8929  BETA0(0.0),
8930  ALPHAII0(0.0),
8931  ALPHAII01(0.0),
8932  ALPHAII1(0.0),
8933  ALPHAII11(0.0),
8934  BETAII0(0.0),
8935  BETAII1(0.0),
8936  BETAII2(0.1),
8937  ESATII(1.0e7),
8938  LII(0.5E-9),
8939  SII0(0.5),
8940  SII1(0.1),
8941  SII2(0.0),
8942  SIID(0.0),
8943  EOTACC(0.0),
8944  DELVFBACC(0.0),
8945  CFS(2.5e-11),
8946  CFD(0.0),
8947  CGSO(0.0),
8948  CGDO(0.0),
8949  CGSL(0.0),
8950  CGDL(0.0),
8951  CKAPPAS(0.6),
8952  CKAPPAD(0.0),
8953  CGBO(0.0),
8954  CGBN(0.0),
8955  CGBL(0.0),
8956  CKAPPAB(0.6),
8957  CSDESW(0.0),
8958  CJS(5.0e-4),
8959  CJD(0.0),
8960  CJSWS(5.0e-10),
8961  CJSWD(0.0),
8962  CJSWGS(0.0),
8963  CJSWGD(0.0),
8964  PBS(1.0),
8965  PBD(0.0),
8966  PBSWS(1.0),
8967  PBSWD(0.0),
8968  PBSWGS(0.0),
8969  PBSWGD(0.0),
8970  MJS(0.5),
8971  MJD(0.0),
8972  MJSWS(0.33),
8973  MJSWD(0.0),
8974  MJSWGS(0.0),
8975  MJSWGD(0.0),
8976  SJS(0.0),
8977  SJD(0.0),
8978  SJSWS(0.0),
8979  SJSWD(0.0),
8980  SJSWGS(0.0),
8981  SJSWGD(0.0),
8982  MJS2(0.125),
8983  MJD2(0.0),
8984  MJSWS2(0.083),
8985  MJSWD2(0.0),
8986  MJSWGS2(0.0),
8987  MJSWGD2(0.0),
8988  JSS(1.0e-4),
8989  JSD(0.0),
8990  JSWS(0.0),
8991  JSWD(0.0),
8992  JSWGS(0.0),
8993  JSWGD(0.0),
8994  NJS(1.0),
8995  NJD(0.0),
8996  IJTHSFWD(0.1),
8997  IJTHDFWD(0.0),
8998  IJTHSREV(0.1),
8999  IJTHDREV(0.0),
9000  BVS(10.0),
9001  BVD(0.0),
9002  XJBVS(1.0),
9003  XJBVD(0.0),
9004  JTSS(0.0),
9005  JTSD(0.0),
9006  JTSSWS(0.0),
9007  JTSSWD(0.0),
9008  JTSSWGS(0.0),
9009  JTSSWGD(0.0),
9010  JTWEFF(0.0),
9011  NJTS(20.0),
9012  NJTSD(0.0),
9013  NJTSSW(20.0),
9014  NJTSSWD(0.0),
9015  NJTSSWG(20.0),
9016  NJTSSWGD(0.0),
9017  VTSS(10.0),
9018  VTSD(0.0),
9019  VTSSWS(10.0),
9020  VTSSWD(0.0),
9021  VTSSWGS(10.0),
9022  VTSSWGD(0.0),
9023  LINTIGEN(0),
9024  NTGEN(1.0),
9025  AIGEN(0),
9026  BIGEN(0),
9027  XRCRG1(12.0),
9028  XRCRG2(1.0),
9029  NSEG(4),
9030  EF(1.0),
9031  EM(4.1e7),
9032  NOIA(6.250e+39),
9033  NOIB(3.125e+24),
9034  NOIC(8.750e+07),
9035  NTNOI(1.0),
9036  TNOM(27.0),
9037  TBGASUB(7.02e-4),
9038  TBGBSUB(1108.0),
9039  KT1(0.0),
9040  KT1L(0.0),
9041  TSS(0.0),
9042  IIT((-0.5)),
9043  TII(0.0),
9044  TGIDL((-0.003)),
9045  IGT(2.5),
9046  TCJ(0.0),
9047  TCJSW(0.0),
9048  TCJSWG(0.0),
9049  TPB(0.0),
9050  TPBSW(0.0),
9051  TPBSWG(0.0),
9052  XTIS(3.0),
9053  XTID(0.0),
9054  XTSS(0.02),
9055  XTSD(0.0),
9056  XTSSWS(0.02),
9057  XTSSWD(0.0),
9058  XTSSWGS(0.02),
9059  XTSSWGD(0.0),
9060  TNJTS(0.0),
9061  TNJTSD(0.0),
9062  TNJTSSW(0.0),
9063  TNJTSSWD(0.0),
9064  TNJTSSWG(0.0),
9065  TNJTSSWGD(0.0),
9066  RTH0(0.01),
9067  CTH0(1.0E-05),
9068  WTH0(0.0),
9069  LNBODY(0),
9070  NNBODY(0),
9071  PNBODY(0),
9072  LPHIG(0),
9073  NPHIG(0),
9074  PPHIG(0),
9075  LNGATE(0),
9076  NNGATE(0),
9077  PNGATE(0),
9078  LCIT(0),
9079  NCIT(0),
9080  PCIT(0),
9081  LCDSC(0),
9082  NCDSC(0),
9083  PCDSC(0),
9084  LCDSCD(0),
9085  NCDSCD(0),
9086  PCDSCD(0),
9087  LCDSCDR(0.0),
9088  NCDSCDR(0.0),
9089  PCDSCDR(0.0),
9090  LDVT0(0),
9091  NDVT0(0),
9092  PDVT0(0),
9093  LDVT1(0),
9094  NDVT1(0),
9095  PDVT1(0),
9096  LDVT1SS(0),
9097  NDVT1SS(0),
9098  PDVT1SS(0),
9099  LPHIN(0),
9100  NPHIN(0),
9101  PPHIN(0),
9102  LETA0(0),
9103  NETA0(0),
9104  PETA0(0),
9105  LETA0R(0.0),
9106  NETA0R(0.0),
9107  PETA0R(0.0),
9108  LDSUB(0),
9109  NDSUB(0),
9110  PDSUB(0),
9111  LK1RSCE(0),
9112  NK1RSCE(0),
9113  PK1RSCE(0),
9114  LLPE0(0),
9115  NLPE0(0),
9116  PLPE0(0),
9117  LDVTSHIFT(0),
9118  NDVTSHIFT(0),
9119  PDVTSHIFT(0),
9120  LPHIBE(0),
9121  NPHIBE(0),
9122  PPHIBE(0),
9123  LK0(0),
9124  NK0(0),
9125  PK0(0),
9126  LK01(0),
9127  NK01(0),
9128  PK01(0),
9129  LK0SI(0),
9130  NK0SI(0),
9131  PK0SI(0),
9132  LK0SI1(0),
9133  NK0SI1(0),
9134  PK0SI1(0),
9135  LK1SI(0),
9136  NK1SI(0),
9137  PK1SI(0),
9138  LK1SI1(0),
9139  NK1SI1(0),
9140  PK1SI1(0),
9141  LK1(0),
9142  NK1(0),
9143  PK1(0),
9144  LK11(0),
9145  NK11(0),
9146  PK11(0),
9147  LK1SAT(0),
9148  NK1SAT(0),
9149  PK1SAT(0),
9150  LK1SAT1(0),
9151  NK1SAT1(0),
9152  PK1SAT1(0),
9153  LDVTB(0),
9154  NDVTB(0),
9155  PDVTB(0),
9156  LLPEB(0),
9157  NLPEB(0),
9158  PLPEB(0),
9159  LQMFACTOR(0.0),
9160  NQMFACTOR(0.0),
9161  PQMFACTOR(0.0),
9162  LQMTCENIV(0.0),
9163  NQMTCENIV(0.0),
9164  PQMTCENIV(0.0),
9165  LQMTCENCV(0.0),
9166  NQMTCENCV(0.0),
9167  PQMTCENCV(0.0),
9168  LQMTCENCVA(0.0),
9169  NQMTCENCVA(0.0),
9170  PQMTCENCVA(0.0),
9171  LVSAT(0),
9172  NVSAT(0),
9173  PVSAT(0),
9174  LVSAT1(0.0),
9175  NVSAT1(0.0),
9176  PVSAT1(0.0),
9177  LVSAT1R(0.0),
9178  NVSAT1R(0.0),
9179  PVSAT1R(0.0),
9180  LPSAT(0),
9181  NPSAT(0),
9182  PPSAT(0),
9183  LDELTAVSAT(0),
9184  NDELTAVSAT(0),
9185  PDELTAVSAT(0),
9186  LKSATIV(0),
9187  NKSATIV(0),
9188  PKSATIV(0),
9189  LVSATCV(0),
9190  NVSATCV(0),
9191  PVSATCV(0),
9192  LPSATCV(0),
9193  NPSATCV(0),
9194  PPSATCV(0),
9195  LDELTAVSATCV(0),
9196  NDELTAVSATCV(0),
9197  PDELTAVSATCV(0),
9198  LMEXP(0),
9199  NMEXP(0),
9200  PMEXP(0),
9201  LMEXPR(0),
9202  NMEXPR(0),
9203  PMEXPR(0),
9204  LPTWG(0.0),
9205  NPTWG(0.0),
9206  PPTWG(0.0),
9207  LPTWGR(0.0),
9208  NPTWGR(0.0),
9209  PPTWGR(0.0),
9210  LU0(0),
9211  NU0(0),
9212  PU0(0),
9213  LETAMOB(0),
9214  NETAMOB(0),
9215  PETAMOB(0),
9216  LUP(0),
9217  NUP(0),
9218  PUP(0),
9219  LUA(0),
9220  NUA(0),
9221  PUA(0),
9222  LUC(0),
9223  NUC(0),
9224  PUC(0),
9225  LEU(0),
9226  NEU(0),
9227  PEU(0),
9228  LUD(0),
9229  NUD(0),
9230  PUD(0),
9231  LUCS(0),
9232  NUCS(0),
9233  PUCS(0),
9234  LPCLM(0),
9235  NPCLM(0),
9236  PPCLM(0),
9237  LPCLMG(0),
9238  NPCLMG(0),
9239  PPCLMG(0),
9240  LPCLMCV(0),
9241  NPCLMCV(0),
9242  PPCLMCV(0),
9243  LA1(0),
9244  NA1(0),
9245  PA1(0),
9246  LA11(0),
9247  NA11(0),
9248  PA11(0),
9249  LA2(0),
9250  NA2(0),
9251  PA2(0),
9252  LA21(0),
9253  NA21(0),
9254  PA21(0),
9255  LRDSW(0),
9256  NRDSW(0),
9257  PRDSW(0),
9258  LRSW(0.0),
9259  NRSW(0.0),
9260  PRSW(0.0),
9261  LRDW(0.0),
9262  NRDW(0.0),
9263  PRDW(0.0),
9264  LPRWGS(0),
9265  NPRWGS(0),
9266  PPRWGS(0),
9267  LPRWGD(0),
9268  NPRWGD(0),
9269  PPRWGD(0),
9270  LWR(0),
9271  NWR(0),
9272  PWR(0),
9273  LPDIBL1(0),
9274  NPDIBL1(0),
9275  PPDIBL1(0),
9276  LPDIBL1R(0.0),
9277  NPDIBL1R(0.0),
9278  PPDIBL1R(0.0),
9279  LPDIBL2(0),
9280  NPDIBL2(0),
9281  PPDIBL2(0),
9282  LDROUT(0),
9283  NDROUT(0),
9284  PDROUT(0),
9285  LPVAG(0),
9286  NPVAG(0),
9287  PPVAG(0),
9288  LAIGBINV(0),
9289  NAIGBINV(0),
9290  PAIGBINV(0),
9291  LAIGBINV1(0),
9292  NAIGBINV1(0),
9293  PAIGBINV1(0),
9294  LBIGBINV(0),
9295  NBIGBINV(0),
9296  PBIGBINV(0),
9297  LCIGBINV(0),
9298  NCIGBINV(0),
9299  PCIGBINV(0),
9300  LEIGBINV(0),
9301  NEIGBINV(0),
9302  PEIGBINV(0),
9303  LNIGBINV(0),
9304  NNIGBINV(0),
9305  PNIGBINV(0),
9306  LAIGBACC(0),
9307  NAIGBACC(0),
9308  PAIGBACC(0),
9309  LAIGBACC1(0),
9310  NAIGBACC1(0),
9311  PAIGBACC1(0),
9312  LBIGBACC(0),
9313  NBIGBACC(0),
9314  PBIGBACC(0),
9315  LCIGBACC(0),
9316  NCIGBACC(0),
9317  PCIGBACC(0),
9318  LNIGBACC(0),
9319  NNIGBACC(0),
9320  PNIGBACC(0),
9321  LAIGC(0),
9322  NAIGC(0),
9323  PAIGC(0),
9324  LAIGC1(0),
9325  NAIGC1(0),
9326  PAIGC1(0),
9327  LBIGC(0),
9328  NBIGC(0),
9329  PBIGC(0),
9330  LCIGC(0),
9331  NCIGC(0),
9332  PCIGC(0),
9333  LPIGCD(0),
9334  NPIGCD(0),
9335  PPIGCD(0),
9336  LAIGS(0),
9337  NAIGS(0),
9338  PAIGS(0),
9339  LAIGS1(0),
9340  NAIGS1(0),
9341  PAIGS1(0),
9342  LBIGS(0),
9343  NBIGS(0),
9344  PBIGS(0),
9345  LCIGS(0),
9346  NCIGS(0),
9347  PCIGS(0),
9348  LAIGD(0.0),
9349  NAIGD(0.0),
9350  PAIGD(0.0),
9351  LAIGD1(0.0),
9352  NAIGD1(0.0),
9353  PAIGD1(0.0),
9354  LBIGD(0.0),
9355  NBIGD(0.0),
9356  PBIGD(0.0),
9357  LCIGD(0.0),
9358  NCIGD(0.0),
9359  PCIGD(0.0),
9360  LNTOX(0),
9361  NNTOX(0),
9362  PNTOX(0),
9363  LPOXEDGE(0),
9364  NPOXEDGE(0),
9365  PPOXEDGE(0),
9366  LAGISL(0),
9367  NAGISL(0),
9368  PAGISL(0),
9369  LBGISL(0),
9370  NBGISL(0),
9371  PBGISL(0),
9372  LCGISL(0),
9373  NCGISL(0),
9374  PCGISL(0),
9375  LEGISL(0),
9376  NEGISL(0),
9377  PEGISL(0),
9378  LPGISL(0),
9379  NPGISL(0),
9380  PPGISL(0),
9381  LAGIDL(0.0),
9382  NAGIDL(0.0),
9383  PAGIDL(0.0),
9384  LBGIDL(0.0),
9385  NBGIDL(0.0),
9386  PBGIDL(0.0),
9387  LCGIDL(0.0),
9388  NCGIDL(0.0),
9389  PCGIDL(0.0),
9390  LEGIDL(0.0),
9391  NEGIDL(0.0),
9392  PEGIDL(0.0),
9393  LPGIDL(0.0),
9394  NPGIDL(0.0),
9395  PPGIDL(0.0),
9396  LALPHA0(0.0),
9397  NALPHA0(0.0),
9398  PALPHA0(0.0),
9399  LALPHA1(0.0),
9400  NALPHA1(0.0),
9401  PALPHA1(0.0),
9402  LALPHAII0(0.0),
9403  NALPHAII0(0.0),
9404  PALPHAII0(0.0),
9405  LALPHAII1(0.0),
9406  NALPHAII1(0.0),
9407  PALPHAII1(0.0),
9408  LBETA0(0.0),
9409  NBETA0(0.0),
9410  PBETA0(0.0),
9411  LBETAII0(0.0),
9412  NBETAII0(0.0),
9413  PBETAII0(0.0),
9414  LBETAII1(0.0),
9415  NBETAII1(0.0),
9416  PBETAII1(0.0),
9417  LBETAII2(0.0),
9418  NBETAII2(0.0),
9419  PBETAII2(0.0),
9420  LESATII(0.0),
9421  NESATII(0.0),
9422  PESATII(0.0),
9423  LLII(0.0),
9424  NLII(0.0),
9425  PLII(0.0),
9426  LSII0(0.0),
9427  NSII0(0.0),
9428  PSII0(0.0),
9429  LSII1(0.0),
9430  NSII1(0.0),
9431  PSII1(0.0),
9432  LSII2(0.0),
9433  NSII2(0.0),
9434  PSII2(0.0),
9435  LSIID(0.0),
9436  NSIID(0.0),
9437  PSIID(0.0),
9438  LCFS(0.0),
9439  NCFS(0.0),
9440  PCFS(0.0),
9441  LCFD(0.0),
9442  NCFD(0.0),
9443  PCFD(0.0),
9444  LCOVS(0.0),
9445  NCOVS(0.0),
9446  PCOVS(0.0),
9447  LCOVD(0.0),
9448  NCOVD(0.0),
9449  PCOVD(0.0),
9450  LCGSL(0.0),
9451  NCGSL(0.0),
9452  PCGSL(0.0),
9453  LCGDL(0.0),
9454  NCGDL(0.0),
9455  PCGDL(0.0),
9456  LCKAPPAS(0.0),
9457  NCKAPPAS(0.0),
9458  PCKAPPAS(0.0),
9459  LCKAPPAD(0.0),
9460  NCKAPPAD(0.0),
9461  PCKAPPAD(0.0),
9462  LCGBL(0.0),
9463  NCGBL(0.0),
9464  PCGBL(0.0),
9465  LCKAPPAB(0.0),
9466  NCKAPPAB(0.0),
9467  PCKAPPAB(0.0),
9468  LNTGEN(0),
9469  NNTGEN(0),
9470  PNTGEN(0),
9471  LAIGEN(0),
9472  NAIGEN(0),
9473  PAIGEN(0),
9474  LBIGEN(0),
9475  NBIGEN(0),
9476  PBIGEN(0),
9477  LXRCRG1(0.0),
9478  NXRCRG1(0.0),
9479  PXRCRG1(0.0),
9480  LXRCRG2(0.0),
9481  NXRCRG2(0.0),
9482  PXRCRG2(0.0),
9483  LINTNOI(0.0),
9484  LUTE(0.0),
9485  NUTE(0.0),
9486  PUTE(0.0),
9487  LUTL(0.0),
9488  NUTL(0.0),
9489  PUTL(0.0),
9490  LEMOBT(0),
9491  NEMOBT(0),
9492  PEMOBT(0),
9493  LUA1(0.0),
9494  NUA1(0.0),
9495  PUA1(0.0),
9496  LUC1(0.0),
9497  NUC1(0.0),
9498  PUC1(0.0),
9499  LUD1(0.0),
9500  NUD1(0.0),
9501  PUD1(0.0),
9502  LUCSTE(0.0),
9503  NUCSTE(0.0),
9504  PUCSTE(0.0),
9505  LPTWGT(0),
9506  NPTWGT(0),
9507  PPTWGT(0),
9508  LAT(0),
9509  NAT(0),
9510  PAT(0),
9511  LSTTHETASAT(0),
9512  NSTTHETASAT(0),
9513  PSTTHETASAT(0),
9514  LPRT(0),
9515  NPRT(0),
9516  PPRT(0),
9517  LKT1(0),
9518  NKT1(0),
9519  PKT1(0),
9520  LTSS(0),
9521  NTSS(0),
9522  PTSS(0),
9523  LIIT(0),
9524  NIIT(0),
9525  PIIT(0),
9526  LTII(0.0),
9527  NTII(0.0),
9528  PTII(0.0),
9529  LTGIDL(0),
9530  NTGIDL(0),
9531  PTGIDL(0),
9532  LIGT(0),
9533  NIGT(0),
9534  PIGT(0)
9535 {
9536  // Set params to constant default values (from parTable):
9537  setDefaultParams();
9538 
9539  // Set params according to .model line and constant defaults from metadata:
9540  setModParams(model_block.params);
9541 
9542  // Set any non-constant parameter defaults:
9543  // Set any parameters that were not given and whose defaults depend on other
9544  // parameters:
9545  if (!given("CDSCDR"))
9546  {
9547  CDSCDR = CDSCD;
9548  }
9549  if (!given("CDSCDRN1"))
9550  {
9551  CDSCDRN1 = CDSCDN1;
9552  }
9553  if (!given("CDSCDRN2"))
9554  {
9555  CDSCDRN2 = CDSCDN2;
9556  }
9557  if (!given("DVT1SS"))
9558  {
9559  DVT1SS = DVT1;
9560  }
9561  if (!given("ETA0R"))
9562  {
9563  ETA0R = ETA0;
9564  }
9565  if (!given("TETA0R"))
9566  {
9567  TETA0R = TETA0;
9568  }
9569  if (!given("K1SI"))
9570  {
9571  K1SI = K0SI;
9572  }
9573  if (!given("K1SI1"))
9574  {
9575  K1SI1 = K0SI1;
9576  }
9577  if (!given("VSAT1"))
9578  {
9579  VSAT1 = VSAT;
9580  }
9581  if (!given("VSAT1N1"))
9582  {
9583  VSAT1N1 = VSATN1;
9584  }
9585  if (!given("VSAT1N2"))
9586  {
9587  VSAT1N2 = VSATN2;
9588  }
9589  if (!given("VSAT1R"))
9590  {
9591  VSAT1R = VSAT1;
9592  }
9593  if (!given("VSAT1RN1"))
9594  {
9595  VSAT1RN1 = VSAT1N1;
9596  }
9597  if (!given("VSAT1RN2"))
9598  {
9599  VSAT1RN2 = VSAT1N2;
9600  }
9601  if (!given("AVSAT1"))
9602  {
9603  AVSAT1 = AVSAT;
9604  }
9605  if (!given("BVSAT1"))
9606  {
9607  BVSAT1 = BVSAT;
9608  }
9609  if (!given("VSATCV"))
9610  {
9611  VSATCV = VSAT;
9612  }
9613  if (!given("AVSATCV"))
9614  {
9615  AVSATCV = AVSAT;
9616  }
9617  if (!given("BVSATCV"))
9618  {
9619  BVSATCV = BVSAT;
9620  }
9621  if (!given("DELTAVSATCV"))
9622  {
9624  }
9625  if (!given("PSATCV"))
9626  {
9627  PSATCV = PSAT;
9628  }
9629  if (!given("APSATCV"))
9630  {
9631  APSATCV = APSAT;
9632  }
9633  if (!given("BPSATCV"))
9634  {
9635  BPSATCV = BPSAT;
9636  }
9637  if (!given("MEXPR"))
9638  {
9639  MEXPR = MEXP;
9640  }
9641  if (!given("AMEXPR"))
9642  {
9643  AMEXPR = AMEXP;
9644  }
9645  if (!given("BMEXPR"))
9646  {
9647  BMEXPR = BMEXP;
9648  }
9649  if (!given("PTWGR"))
9650  {
9651  PTWGR = PTWG;
9652  }
9653  if (!given("TMEXPR"))
9654  {
9655  TMEXPR = TMEXP;
9656  }
9657  if (!given("RSDRR"))
9658  {
9659  RSDRR = RSDR;
9660  }
9661  if (!given("RDDR"))
9662  {
9663  RDDR = RSDR;
9664  }
9665  if (!given("RDDRR"))
9666  {
9667  RDDRR = RDDR;
9668  }
9669  if (!given("PRDDR"))
9670  {
9671  PRDDR = PRSDR;
9672  }
9673  if (!given("PRWGD"))
9674  {
9675  PRWGD = PRWGS;
9676  }
9677  if (!given("TRDDR"))
9678  {
9679  TRDDR = TRSDR;
9680  }
9681  if (!given("PDIBL1R"))
9682  {
9683  PDIBL1R = PDIBL1;
9684  }
9685  if (!given("PCLMCV"))
9686  {
9687  PCLMCV = PCLM;
9688  }
9689  if (!given("RSHD"))
9690  {
9691  RSHD = RSHS;
9692  }
9693  if (!given("LSP"))
9694  {
9695  LSP = (0.2*(L+XL));
9696  }
9697  if (!given("DLCIGD"))
9698  {
9699  DLCIGD = DLCIGS;
9700  }
9701  if (!given("AIGD"))
9702  {
9703  AIGD = AIGS;
9704  }
9705  if (!given("AIGD1"))
9706  {
9707  AIGD1 = AIGS1;
9708  }
9709  if (!given("BIGD"))
9710  {
9711  BIGD = BIGS;
9712  }
9713  if (!given("CIGD"))
9714  {
9715  CIGD = CIGS;
9716  }
9717  if (!given("TOXG"))
9718  {
9719  TOXG = TOXP;
9720  }
9721  if (!given("AGIDL"))
9722  {
9723  AGIDL = AGISL;
9724  }
9725  if (!given("BGIDL"))
9726  {
9727  BGIDL = BGISL;
9728  }
9729  if (!given("CGIDL"))
9730  {
9731  CGIDL = CGISL;
9732  }
9733  if (!given("EGIDL"))
9734  {
9735  EGIDL = EGISL;
9736  }
9737  if (!given("PGIDL"))
9738  {
9739  PGIDL = PGISL;
9740  }
9741  if (!given("EOTACC"))
9742  {
9743  EOTACC = EOT;
9744  }
9745  if (!given("CFD"))
9746  {
9747  CFD = CFS;
9748  }
9749  if (!given("CGDO"))
9750  {
9751  CGDO = CGSO;
9752  }
9753  if (!given("CGDL"))
9754  {
9755  CGDL = CGSL;
9756  }
9757  if (!given("CKAPPAD"))
9758  {
9759  CKAPPAD = CKAPPAS;
9760  }
9761  if (!given("CJD"))
9762  {
9763  CJD = CJS;
9764  }
9765  if (!given("CJSWD"))
9766  {
9767  CJSWD = CJSWS;
9768  }
9769  if (!given("CJSWGD"))
9770  {
9771  CJSWGD = CJSWGS;
9772  }
9773  if (!given("PBD"))
9774  {
9775  PBD = PBS;
9776  }
9777  if (!given("PBSWD"))
9778  {
9779  PBSWD = PBSWS;
9780  }
9781  if (!given("PBSWGS"))
9782  {
9783  PBSWGS = PBSWS;
9784  }
9785  if (!given("PBSWGD"))
9786  {
9787  PBSWGD = PBSWGS;
9788  }
9789  if (!given("MJD"))
9790  {
9791  MJD = MJS;
9792  }
9793  if (!given("MJSWD"))
9794  {
9795  MJSWD = MJSWS;
9796  }
9797  if (!given("MJSWGS"))
9798  {
9799  MJSWGS = MJSWS;
9800  }
9801  if (!given("MJSWGD"))
9802  {
9803  MJSWGD = MJSWGS;
9804  }
9805  if (!given("SJD"))
9806  {
9807  SJD = SJS;
9808  }
9809  if (!given("SJSWD"))
9810  {
9811  SJSWD = SJSWS;
9812  }
9813  if (!given("SJSWGD"))
9814  {
9815  SJSWGD = SJSWGS;
9816  }
9817  if (!given("MJD2"))
9818  {
9819  MJD2 = MJS2;
9820  }
9821  if (!given("MJSWD2"))
9822  {
9823  MJSWD2 = MJSWS2;
9824  }
9825  if (!given("MJSWGS2"))
9826  {
9827  MJSWGS2 = MJSWS2;
9828  }
9829  if (!given("MJSWGD2"))
9830  {
9831  MJSWGD2 = MJSWGS2;
9832  }
9833  if (!given("JSD"))
9834  {
9835  JSD = JSS;
9836  }
9837  if (!given("JSWD"))
9838  {
9839  JSWD = JSWS;
9840  }
9841  if (!given("JSWGD"))
9842  {
9843  JSWGD = JSWGS;
9844  }
9845  if (!given("NJD"))
9846  {
9847  NJD = NJS;
9848  }
9849  if (!given("IJTHDFWD"))
9850  {
9851  IJTHDFWD = IJTHSFWD;
9852  }
9853  if (!given("IJTHDREV"))
9854  {
9855  IJTHDREV = IJTHSREV;
9856  }
9857  if (!given("BVD"))
9858  {
9859  BVD = BVS;
9860  }
9861  if (!given("XJBVD"))
9862  {
9863  XJBVD = XJBVS;
9864  }
9865  if (!given("JTSD"))
9866  {
9867  JTSD = JTSS;
9868  }
9869  if (!given("JTSSWD"))
9870  {
9871  JTSSWD = JTSSWS;
9872  }
9873  if (!given("JTSSWGD"))
9874  {
9875  JTSSWGD = JTSSWGS;
9876  }
9877  if (!given("NJTSD"))
9878  {
9879  NJTSD = NJTS;
9880  }
9881  if (!given("NJTSSWD"))
9882  {
9883  NJTSSWD = NJTSSW;
9884  }
9885  if (!given("NJTSSWGD"))
9886  {
9887  NJTSSWGD = NJTSSWG;
9888  }
9889  if (!given("VTSD"))
9890  {
9891  VTSD = VTSS;
9892  }
9893  if (!given("VTSSWD"))
9894  {
9895  VTSSWD = VTSSWS;
9896  }
9897  if (!given("VTSSWGD"))
9898  {
9899  VTSSWGD = VTSSWGS;
9900  }
9901  if (!given("XTID"))
9902  {
9903  XTID = XTIS;
9904  }
9905  if (!given("XTSD"))
9906  {
9907  XTSD = XTSS;
9908  }
9909  if (!given("XTSSWD"))
9910  {
9911  XTSSWD = XTSSWS;
9912  }
9913  if (!given("XTSSWGD"))
9914  {
9915  XTSSWGD = XTSSWGS;
9916  }
9917  if (!given("TNJTSD"))
9918  {
9919  TNJTSD = TNJTS;
9920  }
9921  if (!given("TNJTSSWD"))
9922  {
9923  TNJTSSWD = TNJTSSW;
9924  }
9925  if (!given("TNJTSSWGD"))
9926  {
9927  TNJTSSWGD = TNJTSSWG;
9928  }
9929  if (!given("LCDSCDR"))
9930  {
9931  LCDSCDR = LCDSCD;
9932  }
9933  if (!given("NCDSCDR"))
9934  {
9935  NCDSCDR = NCDSCD;
9936  }
9937  if (!given("PCDSCDR"))
9938  {
9939  PCDSCDR = PCDSCD;
9940  }
9941  if (!given("LETA0R"))
9942  {
9943  LETA0R = LETA0;
9944  }
9945  if (!given("NETA0R"))
9946  {
9947  NETA0R = NETA0;
9948  }
9949  if (!given("PETA0R"))
9950  {
9951  PETA0R = PETA0;
9952  }
9953  if (!given("LVSAT1"))
9954  {
9955  LVSAT1 = LVSAT;
9956  }
9957  if (!given("NVSAT1"))
9958  {
9959  NVSAT1 = NVSAT;
9960  }
9961  if (!given("PVSAT1"))
9962  {
9963  PVSAT1 = PVSAT;
9964  }
9965  if (!given("LVSAT1R"))
9966  {
9967  LVSAT1R = LVSAT1;
9968  }
9969  if (!given("NVSAT1R"))
9970  {
9971  NVSAT1R = NVSAT1;
9972  }
9973  if (!given("PVSAT1R"))
9974  {
9975  PVSAT1R = PVSAT1;
9976  }
9977  if (!given("LPTWGR"))
9978  {
9979  LPTWGR = LPTWG;
9980  }
9981  if (!given("NPTWGR"))
9982  {
9983  NPTWGR = NPTWG;
9984  }
9985  if (!given("PPTWGR"))
9986  {
9987  PPTWGR = PPTWG;
9988  }
9989  if (!given("LPDIBL1R"))
9990  {
9991  LPDIBL1R = LPDIBL1;
9992  }
9993  if (!given("NPDIBL1R"))
9994  {
9995  NPDIBL1R = NPDIBL1;
9996  }
9997  if (!given("PPDIBL1R"))
9998  {
9999  PPDIBL1R = PPDIBL1;
10000  }
10001  if (!given("LAIGD"))
10002  {
10003  LAIGD = LAIGS;
10004  }
10005  if (!given("NAIGD"))
10006  {
10007  NAIGD = NAIGS;
10008  }
10009  if (!given("PAIGD"))
10010  {
10011  PAIGD = PAIGS;
10012  }
10013  if (!given("LAIGD1"))
10014  {
10015  LAIGD1 = LAIGS1;
10016  }
10017  if (!given("NAIGD1"))
10018  {
10019  NAIGD1 = NAIGS1;
10020  }
10021  if (!given("PAIGD1"))
10022  {
10023  PAIGD1 = PAIGS1;
10024  }
10025  if (!given("LBIGD"))
10026  {
10027  LBIGD = LBIGS;
10028  }
10029  if (!given("NBIGD"))
10030  {
10031  NBIGD = NBIGS;
10032  }
10033  if (!given("PBIGD"))
10034  {
10035  PBIGD = PBIGS;
10036  }
10037  if (!given("LCIGD"))
10038  {
10039  LCIGD = LCIGS;
10040  }
10041  if (!given("NCIGD"))
10042  {
10043  NCIGD = NCIGS;
10044  }
10045  if (!given("PCIGD"))
10046  {
10047  PCIGD = PCIGS;
10048  }
10049  if (!given("LAGIDL"))
10050  {
10051  LAGIDL = LAGISL;
10052  }
10053  if (!given("NAGIDL"))
10054  {
10055  NAGIDL = NAGISL;
10056  }
10057  if (!given("PAGIDL"))
10058  {
10059  PAGIDL = PAGISL;
10060  }
10061  if (!given("LBGIDL"))
10062  {
10063  LBGIDL = LBGISL;
10064  }
10065  if (!given("NBGIDL"))
10066  {
10067  NBGIDL = NBGISL;
10068  }
10069  if (!given("PBGIDL"))
10070  {
10071  PBGIDL = PBGISL;
10072  }
10073  if (!given("LCGIDL"))
10074  {
10075  LCGIDL = LCGISL;
10076  }
10077  if (!given("NCGIDL"))
10078  {
10079  NCGIDL = NCGISL;
10080  }
10081  if (!given("PCGIDL"))
10082  {
10083  PCGIDL = PCGISL;
10084  }
10085  if (!given("LEGIDL"))
10086  {
10087  LEGIDL = LEGISL;
10088  }
10089  if (!given("NEGIDL"))
10090  {
10091  NEGIDL = NEGISL;
10092  }
10093  if (!given("PEGIDL"))
10094  {
10095  PEGIDL = PEGISL;
10096  }
10097  if (!given("LPGIDL"))
10098  {
10099  LPGIDL = LPGISL;
10100  }
10101  if (!given("NPGIDL"))
10102  {
10103  NPGIDL = NPGISL;
10104  }
10105  if (!given("PPGIDL"))
10106  {
10107  PPGIDL = PPGISL;
10108  }
10109  if (!given("LCFD"))
10110  {
10111  LCFD = LCFS;
10112  }
10113  if (!given("NCFD"))
10114  {
10115  NCFD = NCFS;
10116  }
10117  if (!given("PCFD"))
10118  {
10119  PCFD = PCFS;
10120  }
10121  if (!given("LCOVD"))
10122  {
10123  LCOVD = LCOVS;
10124  }
10125  if (!given("NCOVD"))
10126  {
10127  NCOVD = NCOVS;
10128  }
10129  if (!given("PCOVD"))
10130  {
10131  PCOVD = PCOVS;
10132  }
10133  if (!given("LCGDL"))
10134  {
10135  LCGDL = LCGSL;
10136  }
10137  if (!given("NCGDL"))
10138  {
10139  NCGDL = NCGSL;
10140  }
10141  if (!given("PCGDL"))
10142  {
10143  PCGDL = PCGSL;
10144  }
10145  if (!given("LCKAPPAD"))
10146  {
10147  LCKAPPAD = LCKAPPAS;
10148  }
10149  if (!given("NCKAPPAD"))
10150  {
10151  NCKAPPAD = NCKAPPAS;
10152  }
10153  if (!given("PCKAPPAD"))
10154  {
10155  PCKAPPAD = PCKAPPAS;
10156  }
10157 
10158 
10159  if (!given("XYCEADMSMODTEMP"))
10160  admsModTemp=getDeviceOptions().temp.getImmutableValue<double>();
10161 
10162  // Fix the TNOM parameter that has "helpfully" been converted to Kelvin
10163  // by the DeviceEntity class
10164 
10165  if (given("TNOM"))
10166  TNOM -= CONSTCtoK;
10167 
10168  // Calculate any parameters specified as expressions:
10169 
10171 
10172  // calculate dependent (ie computed) params and check for errors:
10173  processParams();
10174 }
10175 
10176 //-----------------------------------------------------------------------------
10177 // Function : Model::~Model
10178 // Purpose : destructor
10179 // Special Notes :
10180 // Scope : public
10181 // Creator :
10182 // Creation Date :
10183 //-----------------------------------------------------------------------------
10185 {
10186  std::vector<Instance*>::iterator iterI;
10187  std::vector<Instance*>::iterator firstI = instanceContainer.begin ();
10188  std::vector<Instance*>::iterator lastI = instanceContainer.end ();
10189 
10190  // loop over instances:
10191  for (iterI = firstI; iterI != lastI; ++iterI)
10192  {
10193  delete (*iterI);
10194  }
10195 }
10196 
10197 //-----------------------------------------------------------------------------
10198 // Function : Model::printOutInstances
10199 // Purpose : debugging tool.
10200 // Special Notes :
10201 // Scope : public
10202 // Creator :
10203 // Creation Date :
10204 //-----------------------------------------------------------------------------
10205 std::ostream &Model::printOutInstances(std::ostream &os) const
10206 {
10207  std::vector<Instance*>::const_iterator iter;
10208  std::vector<Instance*>::const_iterator first = instanceContainer.begin();
10209  std::vector<Instance*>::const_iterator last = instanceContainer.end();
10210 
10211  int i;
10212  os << std::endl;
10213  os << " name model name Parameters" << std::endl;
10214  for (i=0, iter=first; iter!=last; ++iter, ++i)
10215  {
10216  os << " " << i << ": " << (*iter)->getName() << " ";
10217  os << getName();
10218 
10219  os << std::endl;
10220  os << "L = " << (*iter)->L << std::endl;
10221  os << "D = " << (*iter)->D << std::endl;
10222  os << "TFIN = " << (*iter)->TFIN << std::endl;
10223  os << "FPITCH = " << (*iter)->FPITCH << std::endl;
10224  os << "NFIN = " << (*iter)->NFIN << std::endl;
10225  os << "NGCON = " << (*iter)->NGCON << std::endl;
10226  os << "ASEO = " << (*iter)->ASEO << std::endl;
10227  os << "ADEO = " << (*iter)->ADEO << std::endl;
10228  os << "PSEO = " << (*iter)->PSEO << std::endl;
10229  os << "PDEO = " << (*iter)->PDEO << std::endl;
10230  os << "ASEJ = " << (*iter)->ASEJ << std::endl;
10231  os << "ADEJ = " << (*iter)->ADEJ << std::endl;
10232  os << "PSEJ = " << (*iter)->PSEJ << std::endl;
10233  os << "PDEJ = " << (*iter)->PDEJ << std::endl;
10234  os << "COVS = " << (*iter)->COVS << std::endl;
10235  os << "COVD = " << (*iter)->COVD << std::endl;
10236  os << "CGSP = " << (*iter)->CGSP << std::endl;
10237  os << "CGDP = " << (*iter)->CGDP << std::endl;
10238  os << "CDSP = " << (*iter)->CDSP << std::endl;
10239  os << "NRS = " << (*iter)->NRS << std::endl;
10240  os << "NRD = " << (*iter)->NRD << std::endl;
10241  os << "LRSD = " << (*iter)->LRSD << std::endl;
10242  os << std::endl;
10243  }
10244 
10245  os << std::endl;
10246 
10247  return os;
10248 }
10249 
10250 //-----------------------------------------------------------------------------
10251 // Function : Model::forEachInstance
10252 // Purpose :
10253 // Special Notes :
10254 // Scope : public
10255 // Creator : David Baur
10256 // Creation Date : 2/4/2014
10257 //-----------------------------------------------------------------------------
10258 /// Apply a device instance "op" to all instances associated with this
10259 /// model
10260 ///
10261 /// @param[in] op Operator to apply to all instances.
10262 ///
10263 ///
10264 void Model::forEachInstance(DeviceInstanceOp &op) const /* override */
10265 {
10266  for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
10267  op(*it);
10268 }
10269 
10270 Device *Traits::factory(const Configuration &configuration, const FactoryBlock &factory_block)
10271 {
10272  return new DeviceMaster<Traits>(configuration, factory_block, factory_block.solverState_, factory_block.deviceOptions_);
10273 }
10274 
10276 {
10278  .registerDevice("m", 107)
10279  .registerModelType("nmos", 107)
10280  .registerModelType("pmos", 107);
10281 }
10282 
10283 
10284 
10285 } // namespace ADMSbsimcmg
10286 } // namespace Device
10287 } // namespace Xyce