Xyce  6.1
N_DEV_ADMSvbic.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-2015 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_ADMSvbic.C,v $
28 //
29 // Purpose :
30 //
31 // Special Notes : Generated from verilog file vbic_3T_et_cf_Xyce_typed.vla with ADMS
32 // interface for Xyce 6.4.0
33 // DO NOT EDIT THIS FILE DIRECTLY! It may be overwritten!
34 //
35 // Creator : admsXml-2.3.4
36 //
37 // Creation Date : Wed, 04 Nov 2015 13:32:34
38 //
39 // Revision Information:
40 // ---------------------
41 //
42 // Revision Number: $Revision: 1.95 $
43 //
44 // Revision Date : $Date: 2015/11/04 21:33:47 $
45 //
46 // Current Owner : $Author: tvrusso $
47 //-------------------------------------------------------------------------
48 
49 #include <Xyce_config.h>
50 #include <N_DEV_ADMSvbic.h>
51 
52 
53 #include <N_DEV_Const.h>
54 #include <N_DEV_DeviceOptions.h>
55 #include <N_DEV_DeviceMaster.h>
56 #include <N_DEV_ExternData.h>
57 #include <N_DEV_MatrixLoadData.h>
58 #include <N_DEV_SolverState.h>
59 #include <N_DEV_Message.h>
60 
61 #include <N_LAS_Matrix.h>
62 #include <N_LAS_Vector.h>
63 
64 #include <N_UTL_FeatureTest.h>
65 #if defined(HAVE_UNORDERED_MAP)
66 #include <unordered_map>
67 using std::unordered_map;
68 #elif defined(HAVE_TR1_UNORDERED_MAP)
69 #include <tr1/unordered_map>
70 using std::tr1::unordered_map;
71 #else
72 #error neither unordered_map or tr1/unordered_map found
73 #endif
74 
75 namespace Xyce {
76 namespace Device {
77 namespace ADMSvbic {
78 
79 
80 void
82 {
83  // Set up each parameter directly, using the up-cased variable name
84  // as the tag.
85 
86  // This kludge is to force us always to have an instance parameter
87  // that the device manager can set to the temperature, even if we have
88  // no "TEMP".
89  p.addPar("XYCEADMSINSTTEMP", 0.0, &ADMSvbic::Instance::admsInstTemp)
90  .setExpressionAccess(NO_DOC)
91  .setUnit(U_DEGK)
92  .setCategory(CAT_TEMP)
93  .setDescription("Internal-use parameter for setting device instance temperature");
94  p.addPar("DTEMP", static_cast<double>(0.0), &ADMSvbic::Instance::DTEMP)
95  .setUnit(U_NONE)
96  .setDescription("Device temperature (use 0.0 for ambient)")
97 #ifdef Xyce_ADMS_SENSITIVITIES
98  .setAnalyticSensitivityAvailable(true)
99  .setSensitivityFunctor(&instSens)
100 #endif // Xyce_ADMS_SENSITIVITIES
101  ;
102  p.addPar("M", static_cast<int>(1), &ADMSvbic::Instance::M)
103  .setUnit(U_NONE)
104  .setDescription("Number of devices in parallel");
105 
106 
107 }
108 
110 {
111  // Set up each parameter directly, using the up-cased variable name
112  // as the tag.
113 
114  // This kludge is to force us always to have a model parameter
115  // that the device manager can set to the temperature, even if we have
116  // no "TEMP".
117  p.addPar("XYCEADMSMODTEMP", 0.0, &ADMSvbic::Model::admsModTemp)
118  .setExpressionAccess(NO_DOC)
119  .setUnit(U_DEGK)
120  .setCategory(CAT_TEMP)
121  .setDescription("Internal-use parameter for setting device model temperature");
122  p.addPar("TNOM", static_cast<double>(27.0), &ADMSvbic::Model::TNOM)
123  .setUnit(U_DEGC)
124  .setDescription("Nominal temperature")
125 #ifdef Xyce_ADMS_SENSITIVITIES
126  .setAnalyticSensitivityAvailable(true)
127  .setSensitivityFunctor(&modSens)
128 #endif // Xyce_ADMS_SENSITIVITIES
129  ;
130  p.addPar("RCX", static_cast<double>(0.0), &ADMSvbic::Model::RCX)
131  .setExpressionAccess(ParameterType::MIN_RES)
132  .setUnit(U_OHM)
133  .setDescription("Extrinsic Collector resistance")
134 #ifdef Xyce_ADMS_SENSITIVITIES
135  .setAnalyticSensitivityAvailable(true)
136  .setSensitivityFunctor(&modSens)
137 #endif // Xyce_ADMS_SENSITIVITIES
138  ;
139  p.addPar("RCI", static_cast<double>(0.0), &ADMSvbic::Model::RCI)
140  .setExpressionAccess(ParameterType::MIN_RES)
141  .setUnit(U_OHM)
142  .setDescription("Intrinsic Collector resistance")
143 #ifdef Xyce_ADMS_SENSITIVITIES
144  .setAnalyticSensitivityAvailable(true)
145  .setSensitivityFunctor(&modSens)
146 #endif // Xyce_ADMS_SENSITIVITIES
147  ;
148  p.addPar("VO", static_cast<double>(0.0), &ADMSvbic::Model::VO)
149  .setUnit(U_VOLT)
150  .setDescription("Epi drift saturation voltage")
151 #ifdef Xyce_ADMS_SENSITIVITIES
152  .setAnalyticSensitivityAvailable(true)
153  .setSensitivityFunctor(&modSens)
154 #endif // Xyce_ADMS_SENSITIVITIES
155  ;
156  p.addPar("GAMM", static_cast<double>(0.0), &ADMSvbic::Model::GAMM)
157  .setUnit(U_NONE)
158  .setDescription("Epi doping parameter")
159 #ifdef Xyce_ADMS_SENSITIVITIES
160  .setAnalyticSensitivityAvailable(true)
161  .setSensitivityFunctor(&modSens)
162 #endif // Xyce_ADMS_SENSITIVITIES
163  ;
164  p.addPar("HRCF", static_cast<double>(0.0), &ADMSvbic::Model::HRCF)
165  .setUnit(U_NONE)
166  .setDescription("High current RC factor")
167 #ifdef Xyce_ADMS_SENSITIVITIES
168  .setAnalyticSensitivityAvailable(true)
169  .setSensitivityFunctor(&modSens)
170 #endif // Xyce_ADMS_SENSITIVITIES
171  ;
172  p.addPar("RBX", static_cast<double>(0.0), &ADMSvbic::Model::RBX)
173  .setExpressionAccess(ParameterType::MIN_RES)
174  .setUnit(U_OHM)
175  .setDescription("Extrinsic base resistance")
176 #ifdef Xyce_ADMS_SENSITIVITIES
177  .setAnalyticSensitivityAvailable(true)
178  .setSensitivityFunctor(&modSens)
179 #endif // Xyce_ADMS_SENSITIVITIES
180  ;
181  p.addPar("RBI", static_cast<double>(0.0), &ADMSvbic::Model::RBI)
182  .setExpressionAccess(ParameterType::MIN_RES)
183  .setUnit(U_OHM)
184  .setDescription("Intrinsic base resistance")
185 #ifdef Xyce_ADMS_SENSITIVITIES
186  .setAnalyticSensitivityAvailable(true)
187  .setSensitivityFunctor(&modSens)
188 #endif // Xyce_ADMS_SENSITIVITIES
189  ;
190  p.addPar("RE", static_cast<double>(0.0), &ADMSvbic::Model::RE)
191  .setExpressionAccess(ParameterType::MIN_RES)
192  .setUnit(U_OHM)
193  .setDescription("Emitter resistance")
194 #ifdef Xyce_ADMS_SENSITIVITIES
195  .setAnalyticSensitivityAvailable(true)
196  .setSensitivityFunctor(&modSens)
197 #endif // Xyce_ADMS_SENSITIVITIES
198  ;
199  p.addPar("RS", static_cast<double>(0.0), &ADMSvbic::Model::RS)
200  .setExpressionAccess(ParameterType::MIN_RES)
201  .setUnit(U_OHM)
202  .setDescription("Substrate resistance")
203 #ifdef Xyce_ADMS_SENSITIVITIES
204  .setAnalyticSensitivityAvailable(true)
205  .setSensitivityFunctor(&modSens)
206 #endif // Xyce_ADMS_SENSITIVITIES
207  ;
208  p.addPar("RBP", static_cast<double>(0.0), &ADMSvbic::Model::RBP)
209  .setExpressionAccess(ParameterType::MIN_RES)
210  .setUnit(U_OHM)
211  .setDescription("Parasitic base resistance")
212 #ifdef Xyce_ADMS_SENSITIVITIES
213  .setAnalyticSensitivityAvailable(true)
214  .setSensitivityFunctor(&modSens)
215 #endif // Xyce_ADMS_SENSITIVITIES
216  ;
217  p.addPar("IS", static_cast<double>(1.0e-16), &ADMSvbic::Model::IS)
218  .setUnit(U_AMP)
219  .setDescription("Transport saturation current")
220 #ifdef Xyce_ADMS_SENSITIVITIES
221  .setAnalyticSensitivityAvailable(true)
222  .setSensitivityFunctor(&modSens)
223 #endif // Xyce_ADMS_SENSITIVITIES
224  ;
225  p.addPar("NF", static_cast<double>(1.0), &ADMSvbic::Model::NF)
226  .setUnit(U_NONE)
227  .setDescription("Forward emission coefficient")
228 #ifdef Xyce_ADMS_SENSITIVITIES
229  .setAnalyticSensitivityAvailable(true)
230  .setSensitivityFunctor(&modSens)
231 #endif // Xyce_ADMS_SENSITIVITIES
232  ;
233  p.addPar("NR", static_cast<double>(1.0), &ADMSvbic::Model::NR)
234  .setUnit(U_NONE)
235  .setDescription("Reverse emission coefficient")
236 #ifdef Xyce_ADMS_SENSITIVITIES
237  .setAnalyticSensitivityAvailable(true)
238  .setSensitivityFunctor(&modSens)
239 #endif // Xyce_ADMS_SENSITIVITIES
240  ;
241  p.addPar("FC", static_cast<double>(0.9), &ADMSvbic::Model::FC)
242  .setUnit(U_NONE)
243  .setDescription("Forward-bias depletion capacitance limit")
244 #ifdef Xyce_ADMS_SENSITIVITIES
245  .setAnalyticSensitivityAvailable(true)
246  .setSensitivityFunctor(&modSens)
247 #endif // Xyce_ADMS_SENSITIVITIES
248  ;
249  p.addPar("CBEO", static_cast<double>(0.0), &ADMSvbic::Model::CBEO)
250  .setExpressionAccess(ParameterType::MIN_CAP)
251  .setUnit(U_FARAD)
252  .setDescription("Extrinsic B-E overlap capacitance")
253 #ifdef Xyce_ADMS_SENSITIVITIES
254  .setAnalyticSensitivityAvailable(true)
255  .setSensitivityFunctor(&modSens)
256 #endif // Xyce_ADMS_SENSITIVITIES
257  ;
258  p.addPar("CJE", static_cast<double>(0.0), &ADMSvbic::Model::CJE)
259  .setExpressionAccess(ParameterType::MIN_CAP)
260  .setUnit(U_FARAD)
261  .setDescription("B-E zero-bias capacitance")
262 #ifdef Xyce_ADMS_SENSITIVITIES
263  .setAnalyticSensitivityAvailable(true)
264  .setSensitivityFunctor(&modSens)
265 #endif // Xyce_ADMS_SENSITIVITIES
266  ;
267  p.addPar("PE", static_cast<double>(0.75), &ADMSvbic::Model::PE)
268  .setUnit(U_NONE)
269  .setDescription("B-E built-in potential")
270 #ifdef Xyce_ADMS_SENSITIVITIES
271  .setAnalyticSensitivityAvailable(true)
272  .setSensitivityFunctor(&modSens)
273 #endif // Xyce_ADMS_SENSITIVITIES
274  ;
275  p.addPar("ME", static_cast<double>(0.33), &ADMSvbic::Model::ME)
276  .setUnit(U_NONE)
277  .setDescription("B-E grading coefficient")
278 #ifdef Xyce_ADMS_SENSITIVITIES
279  .setAnalyticSensitivityAvailable(true)
280  .setSensitivityFunctor(&modSens)
281 #endif // Xyce_ADMS_SENSITIVITIES
282  ;
283  p.addPar("AJE", static_cast<double>((-0.5)), &ADMSvbic::Model::AJE)
284  .setUnit(U_NONE)
285  .setDescription("Base-Emitter capacitor smoothing factor")
286 #ifdef Xyce_ADMS_SENSITIVITIES
287  .setAnalyticSensitivityAvailable(true)
288  .setSensitivityFunctor(&modSens)
289 #endif // Xyce_ADMS_SENSITIVITIES
290  ;
291  p.addPar("CBCO", static_cast<double>(0.0), &ADMSvbic::Model::CBCO)
292  .setExpressionAccess(ParameterType::MIN_CAP)
293  .setUnit(U_FARAD)
294  .setDescription("Extrinsic B-C overlap capacitance")
295 #ifdef Xyce_ADMS_SENSITIVITIES
296  .setAnalyticSensitivityAvailable(true)
297  .setSensitivityFunctor(&modSens)
298 #endif // Xyce_ADMS_SENSITIVITIES
299  ;
300  p.addPar("CJC", static_cast<double>(0.0), &ADMSvbic::Model::CJC)
301  .setExpressionAccess(ParameterType::MIN_CAP)
302  .setUnit(U_FARAD)
303  .setDescription("B-C zero-bias capacitance")
304 #ifdef Xyce_ADMS_SENSITIVITIES
305  .setAnalyticSensitivityAvailable(true)
306  .setSensitivityFunctor(&modSens)
307 #endif // Xyce_ADMS_SENSITIVITIES
308  ;
309  p.addPar("QCO", static_cast<double>(0.0), &ADMSvbic::Model::QCO)
310  .setUnit(U_COULOMB)
311  .setDescription("Epi charge parameter")
312 #ifdef Xyce_ADMS_SENSITIVITIES
313  .setAnalyticSensitivityAvailable(true)
314  .setSensitivityFunctor(&modSens)
315 #endif // Xyce_ADMS_SENSITIVITIES
316  ;
317  p.addPar("CJEP", static_cast<double>(0.0), &ADMSvbic::Model::CJEP)
318  .setExpressionAccess(ParameterType::MIN_CAP)
319  .setUnit(U_FARAD)
320  .setDescription("S-E zero-bias capacitance")
321 #ifdef Xyce_ADMS_SENSITIVITIES
322  .setAnalyticSensitivityAvailable(true)
323  .setSensitivityFunctor(&modSens)
324 #endif // Xyce_ADMS_SENSITIVITIES
325  ;
326  p.addPar("PC", static_cast<double>(0.75), &ADMSvbic::Model::PC)
327  .setUnit(U_NONE)
328  .setDescription("B-C built-in potential")
329 #ifdef Xyce_ADMS_SENSITIVITIES
330  .setAnalyticSensitivityAvailable(true)
331  .setSensitivityFunctor(&modSens)
332 #endif // Xyce_ADMS_SENSITIVITIES
333  ;
334  p.addPar("MC", static_cast<double>(0.33), &ADMSvbic::Model::MC)
335  .setUnit(U_NONE)
336  .setDescription("B-C grading coefficient")
337 #ifdef Xyce_ADMS_SENSITIVITIES
338  .setAnalyticSensitivityAvailable(true)
339  .setSensitivityFunctor(&modSens)
340 #endif // Xyce_ADMS_SENSITIVITIES
341  ;
342  p.addPar("AJC", static_cast<double>((-0.5)), &ADMSvbic::Model::AJC)
343  .setUnit(U_NONE)
344  .setDescription("Base-Collector capacitor smoothing factor")
345 #ifdef Xyce_ADMS_SENSITIVITIES
346  .setAnalyticSensitivityAvailable(true)
347  .setSensitivityFunctor(&modSens)
348 #endif // Xyce_ADMS_SENSITIVITIES
349  ;
350  p.addPar("CJCP", static_cast<double>(0.0), &ADMSvbic::Model::CJCP)
351  .setExpressionAccess(ParameterType::MIN_CAP)
352  .setUnit(U_FARAD)
353  .setDescription("S-C zero-bias capacitance")
354 #ifdef Xyce_ADMS_SENSITIVITIES
355  .setAnalyticSensitivityAvailable(true)
356  .setSensitivityFunctor(&modSens)
357 #endif // Xyce_ADMS_SENSITIVITIES
358  ;
359  p.addPar("PS", static_cast<double>(0.75), &ADMSvbic::Model::PS)
360  .setUnit(U_NONE)
361  .setDescription("S-C built-in potential")
362 #ifdef Xyce_ADMS_SENSITIVITIES
363  .setAnalyticSensitivityAvailable(true)
364  .setSensitivityFunctor(&modSens)
365 #endif // Xyce_ADMS_SENSITIVITIES
366  ;
367  p.addPar("MS", static_cast<double>(0.33), &ADMSvbic::Model::MS)
368  .setUnit(U_NONE)
369  .setDescription("S-C grading coefficient")
370 #ifdef Xyce_ADMS_SENSITIVITIES
371  .setAnalyticSensitivityAvailable(true)
372  .setSensitivityFunctor(&modSens)
373 #endif // Xyce_ADMS_SENSITIVITIES
374  ;
375  p.addPar("AJS", static_cast<double>((-0.5)), &ADMSvbic::Model::AJS)
376  .setUnit(U_NONE)
377  .setDescription("Substrate-collector capacitor smoothing factor (unused)")
378 #ifdef Xyce_ADMS_SENSITIVITIES
379  .setAnalyticSensitivityAvailable(true)
380  .setSensitivityFunctor(&modSens)
381 #endif // Xyce_ADMS_SENSITIVITIES
382  ;
383  p.addPar("IBEI", static_cast<double>(1.0e-18), &ADMSvbic::Model::IBEI)
384  .setUnit(U_AMP)
385  .setDescription("Ideal B-E saturation current")
386 #ifdef Xyce_ADMS_SENSITIVITIES
387  .setAnalyticSensitivityAvailable(true)
388  .setSensitivityFunctor(&modSens)
389 #endif // Xyce_ADMS_SENSITIVITIES
390  ;
391  p.addPar("WBE", static_cast<double>(1.0), &ADMSvbic::Model::WBE)
392  .setUnit(U_NONE)
393  .setDescription("Portion of Ibei from Vbei")
394 #ifdef Xyce_ADMS_SENSITIVITIES
395  .setAnalyticSensitivityAvailable(true)
396  .setSensitivityFunctor(&modSens)
397 #endif // Xyce_ADMS_SENSITIVITIES
398  ;
399  p.addPar("NEI", static_cast<double>(1.0), &ADMSvbic::Model::NEI)
400  .setUnit(U_NONE)
401  .setDescription("Ideal B-E emission coefficient")
402 #ifdef Xyce_ADMS_SENSITIVITIES
403  .setAnalyticSensitivityAvailable(true)
404  .setSensitivityFunctor(&modSens)
405 #endif // Xyce_ADMS_SENSITIVITIES
406  ;
407  p.addPar("IBEN", static_cast<double>(0.0), &ADMSvbic::Model::IBEN)
408  .setUnit(U_AMP)
409  .setDescription("Nonideal B-E saturation current")
410 #ifdef Xyce_ADMS_SENSITIVITIES
411  .setAnalyticSensitivityAvailable(true)
412  .setSensitivityFunctor(&modSens)
413 #endif // Xyce_ADMS_SENSITIVITIES
414  ;
415  p.addPar("NEN", static_cast<double>(2.0), &ADMSvbic::Model::NEN)
416  .setUnit(U_NONE)
417  .setDescription("Non-ideal B-E emission coefficient")
418 #ifdef Xyce_ADMS_SENSITIVITIES
419  .setAnalyticSensitivityAvailable(true)
420  .setSensitivityFunctor(&modSens)
421 #endif // Xyce_ADMS_SENSITIVITIES
422  ;
423  p.addPar("IBCI", static_cast<double>(1.0e-16), &ADMSvbic::Model::IBCI)
424  .setUnit(U_AMP)
425  .setDescription("Ideal B-C saturation current")
426 #ifdef Xyce_ADMS_SENSITIVITIES
427  .setAnalyticSensitivityAvailable(true)
428  .setSensitivityFunctor(&modSens)
429 #endif // Xyce_ADMS_SENSITIVITIES
430  ;
431  p.addPar("NCI", static_cast<double>(1.0), &ADMSvbic::Model::NCI)
432  .setUnit(U_NONE)
433  .setDescription("Ideal B-C emission coefficient")
434 #ifdef Xyce_ADMS_SENSITIVITIES
435  .setAnalyticSensitivityAvailable(true)
436  .setSensitivityFunctor(&modSens)
437 #endif // Xyce_ADMS_SENSITIVITIES
438  ;
439  p.addPar("IBCN", static_cast<double>(0.0), &ADMSvbic::Model::IBCN)
440  .setUnit(U_AMP)
441  .setDescription("Nonideal B-C saturation current")
442 #ifdef Xyce_ADMS_SENSITIVITIES
443  .setAnalyticSensitivityAvailable(true)
444  .setSensitivityFunctor(&modSens)
445 #endif // Xyce_ADMS_SENSITIVITIES
446  ;
447  p.addPar("NCN", static_cast<double>(2.0), &ADMSvbic::Model::NCN)
448  .setUnit(U_NONE)
449  .setDescription("Non-ideal B-C emission coefficient")
450 #ifdef Xyce_ADMS_SENSITIVITIES
451  .setAnalyticSensitivityAvailable(true)
452  .setSensitivityFunctor(&modSens)
453 #endif // Xyce_ADMS_SENSITIVITIES
454  ;
455  p.addPar("AVC1", static_cast<double>(0.0), &ADMSvbic::Model::AVC1)
456  .setUnit(U_VOLTM1)
457  .setDescription("B-C weak avalanche parameter")
458 #ifdef Xyce_ADMS_SENSITIVITIES
459  .setAnalyticSensitivityAvailable(true)
460  .setSensitivityFunctor(&modSens)
461 #endif // Xyce_ADMS_SENSITIVITIES
462  ;
463  p.addPar("AVC2", static_cast<double>(0.0), &ADMSvbic::Model::AVC2)
464  .setUnit(U_VOLTM1)
465  .setDescription("B-C weak avalanche parameter")
466 #ifdef Xyce_ADMS_SENSITIVITIES
467  .setAnalyticSensitivityAvailable(true)
468  .setSensitivityFunctor(&modSens)
469 #endif // Xyce_ADMS_SENSITIVITIES
470  ;
471  p.addPar("ISP", static_cast<double>(0.0), &ADMSvbic::Model::ISP)
472  .setUnit(U_AMP)
473  .setDescription("Parasitic transport saturation current")
474 #ifdef Xyce_ADMS_SENSITIVITIES
475  .setAnalyticSensitivityAvailable(true)
476  .setSensitivityFunctor(&modSens)
477 #endif // Xyce_ADMS_SENSITIVITIES
478  ;
479  p.addPar("WSP", static_cast<double>(1.0), &ADMSvbic::Model::WSP)
480  .setUnit(U_NONE)
481  .setDescription("Portion of Iccp from Vbep")
482 #ifdef Xyce_ADMS_SENSITIVITIES
483  .setAnalyticSensitivityAvailable(true)
484  .setSensitivityFunctor(&modSens)
485 #endif // Xyce_ADMS_SENSITIVITIES
486  ;
487  p.addPar("NFP", static_cast<double>(1.0), &ADMSvbic::Model::NFP)
488  .setUnit(U_NONE)
489  .setDescription("Parasitic forward emission coefficient")
490 #ifdef Xyce_ADMS_SENSITIVITIES
491  .setAnalyticSensitivityAvailable(true)
492  .setSensitivityFunctor(&modSens)
493 #endif // Xyce_ADMS_SENSITIVITIES
494  ;
495  p.addPar("IBEIP", static_cast<double>(0.0), &ADMSvbic::Model::IBEIP)
496  .setUnit(U_AMP)
497  .setDescription("Ideal parasitic B-E saturation current")
498 #ifdef Xyce_ADMS_SENSITIVITIES
499  .setAnalyticSensitivityAvailable(true)
500  .setSensitivityFunctor(&modSens)
501 #endif // Xyce_ADMS_SENSITIVITIES
502  ;
503  p.addPar("IBENP", static_cast<double>(0.0), &ADMSvbic::Model::IBENP)
504  .setUnit(U_AMP)
505  .setDescription("Nonideal parasitic B-E saturation current")
506 #ifdef Xyce_ADMS_SENSITIVITIES
507  .setAnalyticSensitivityAvailable(true)
508  .setSensitivityFunctor(&modSens)
509 #endif // Xyce_ADMS_SENSITIVITIES
510  ;
511  p.addPar("IBCIP", static_cast<double>(0.0), &ADMSvbic::Model::IBCIP)
512  .setUnit(U_AMP)
513  .setDescription("Ideal parasitic B-C saturation current")
514 #ifdef Xyce_ADMS_SENSITIVITIES
515  .setAnalyticSensitivityAvailable(true)
516  .setSensitivityFunctor(&modSens)
517 #endif // Xyce_ADMS_SENSITIVITIES
518  ;
519  p.addPar("NCIP", static_cast<double>(1.0), &ADMSvbic::Model::NCIP)
520  .setUnit(U_NONE)
521  .setDescription("Ideal parasitic B-C emission coefficient")
522 #ifdef Xyce_ADMS_SENSITIVITIES
523  .setAnalyticSensitivityAvailable(true)
524  .setSensitivityFunctor(&modSens)
525 #endif // Xyce_ADMS_SENSITIVITIES
526  ;
527  p.addPar("IBCNP", static_cast<double>(0.0), &ADMSvbic::Model::IBCNP)
528  .setUnit(U_AMP)
529  .setDescription("Nonideal parasitic B-C saturation current")
530 #ifdef Xyce_ADMS_SENSITIVITIES
531  .setAnalyticSensitivityAvailable(true)
532  .setSensitivityFunctor(&modSens)
533 #endif // Xyce_ADMS_SENSITIVITIES
534  ;
535  p.addPar("NCNP", static_cast<double>(2.0), &ADMSvbic::Model::NCNP)
536  .setUnit(U_NONE)
537  .setDescription("Non-ideal parasitic B-C emission coefficient")
538 #ifdef Xyce_ADMS_SENSITIVITIES
539  .setAnalyticSensitivityAvailable(true)
540  .setSensitivityFunctor(&modSens)
541 #endif // Xyce_ADMS_SENSITIVITIES
542  ;
543  p.addPar("VEF", static_cast<double>(0.0), &ADMSvbic::Model::VEF)
544  .setUnit(U_VOLT)
545  .setDescription("Forward Early voltage")
546 #ifdef Xyce_ADMS_SENSITIVITIES
547  .setAnalyticSensitivityAvailable(true)
548  .setSensitivityFunctor(&modSens)
549 #endif // Xyce_ADMS_SENSITIVITIES
550  ;
551  p.addPar("VER", static_cast<double>(0.0), &ADMSvbic::Model::VER)
552  .setUnit(U_VOLT)
553  .setDescription("Reverse Early voltage")
554 #ifdef Xyce_ADMS_SENSITIVITIES
555  .setAnalyticSensitivityAvailable(true)
556  .setSensitivityFunctor(&modSens)
557 #endif // Xyce_ADMS_SENSITIVITIES
558  ;
559  p.addPar("IKF", static_cast<double>(0.0), &ADMSvbic::Model::IKF)
560  .setUnit(U_AMP)
561  .setDescription("Forward knee current")
562 #ifdef Xyce_ADMS_SENSITIVITIES
563  .setAnalyticSensitivityAvailable(true)
564  .setSensitivityFunctor(&modSens)
565 #endif // Xyce_ADMS_SENSITIVITIES
566  ;
567  p.addPar("IKR", static_cast<double>(0.0), &ADMSvbic::Model::IKR)
568  .setUnit(U_AMP)
569  .setDescription("Reverse knee current")
570 #ifdef Xyce_ADMS_SENSITIVITIES
571  .setAnalyticSensitivityAvailable(true)
572  .setSensitivityFunctor(&modSens)
573 #endif // Xyce_ADMS_SENSITIVITIES
574  ;
575  p.addPar("IKP", static_cast<double>(0.0), &ADMSvbic::Model::IKP)
576  .setUnit(U_AMP)
577  .setDescription("Parasitic knee current")
578 #ifdef Xyce_ADMS_SENSITIVITIES
579  .setAnalyticSensitivityAvailable(true)
580  .setSensitivityFunctor(&modSens)
581 #endif // Xyce_ADMS_SENSITIVITIES
582  ;
583  p.addPar("TF", static_cast<double>(0.0), &ADMSvbic::Model::TF)
584  .setUnit(U_SECOND)
585  .setDescription("Forward transit time")
586 #ifdef Xyce_ADMS_SENSITIVITIES
587  .setAnalyticSensitivityAvailable(true)
588  .setSensitivityFunctor(&modSens)
589 #endif // Xyce_ADMS_SENSITIVITIES
590  ;
591  p.addPar("QTF", static_cast<double>(0.0), &ADMSvbic::Model::QTF)
592  .setUnit(U_NONE)
593  .setDescription("Variation of tf with base width modulation")
594 #ifdef Xyce_ADMS_SENSITIVITIES
595  .setAnalyticSensitivityAvailable(true)
596  .setSensitivityFunctor(&modSens)
597 #endif // Xyce_ADMS_SENSITIVITIES
598  ;
599  p.addPar("XTF", static_cast<double>(0.0), &ADMSvbic::Model::XTF)
600  .setUnit(U_NONE)
601  .setDescription("Coefficient of tf with bias dependence")
602 #ifdef Xyce_ADMS_SENSITIVITIES
603  .setAnalyticSensitivityAvailable(true)
604  .setSensitivityFunctor(&modSens)
605 #endif // Xyce_ADMS_SENSITIVITIES
606  ;
607  p.addPar("VTF", static_cast<double>(0.0), &ADMSvbic::Model::VTF)
608  .setUnit(U_NONE)
609  .setDescription("Coefficient of tf dependence on Vbc")
610 #ifdef Xyce_ADMS_SENSITIVITIES
611  .setAnalyticSensitivityAvailable(true)
612  .setSensitivityFunctor(&modSens)
613 #endif // Xyce_ADMS_SENSITIVITIES
614  ;
615  p.addPar("ITF", static_cast<double>(0.0), &ADMSvbic::Model::ITF)
616  .setUnit(U_NONE)
617  .setDescription("Coefficient of tf dependence on Ic")
618 #ifdef Xyce_ADMS_SENSITIVITIES
619  .setAnalyticSensitivityAvailable(true)
620  .setSensitivityFunctor(&modSens)
621 #endif // Xyce_ADMS_SENSITIVITIES
622  ;
623  p.addPar("TR", static_cast<double>(0.0), &ADMSvbic::Model::TR)
624  .setUnit(U_NONE)
625  .setDescription("Reverse transit time")
626 #ifdef Xyce_ADMS_SENSITIVITIES
627  .setAnalyticSensitivityAvailable(true)
628  .setSensitivityFunctor(&modSens)
629 #endif // Xyce_ADMS_SENSITIVITIES
630  ;
631  p.addPar("TD", static_cast<double>(0.0), &ADMSvbic::Model::TD)
632  .setUnit(U_NONE)
633  .setDescription("Forward excess-phase delay time (unused in this version)")
634 #ifdef Xyce_ADMS_SENSITIVITIES
635  .setAnalyticSensitivityAvailable(true)
636  .setSensitivityFunctor(&modSens)
637 #endif // Xyce_ADMS_SENSITIVITIES
638  ;
639  p.addPar("KFN", static_cast<double>(0.0), &ADMSvbic::Model::KFN)
640  .setUnit(U_NONE)
641  .setDescription("B-E flicker (1/f) noise coefficient (unused)")
642 #ifdef Xyce_ADMS_SENSITIVITIES
643  .setAnalyticSensitivityAvailable(true)
644  .setSensitivityFunctor(&modSens)
645 #endif // Xyce_ADMS_SENSITIVITIES
646  ;
647  p.addPar("AFN", static_cast<double>(1.0), &ADMSvbic::Model::AFN)
648  .setUnit(U_NONE)
649  .setDescription("Base-Emitter Flicker Noise coefficient (unused)")
650 #ifdef Xyce_ADMS_SENSITIVITIES
651  .setAnalyticSensitivityAvailable(true)
652  .setSensitivityFunctor(&modSens)
653 #endif // Xyce_ADMS_SENSITIVITIES
654  ;
655  p.addPar("BFN", static_cast<double>(1.0), &ADMSvbic::Model::BFN)
656  .setUnit(U_NONE)
657  .setDescription("B-E flicker noise dependence (unused)")
658 #ifdef Xyce_ADMS_SENSITIVITIES
659  .setAnalyticSensitivityAvailable(true)
660  .setSensitivityFunctor(&modSens)
661 #endif // Xyce_ADMS_SENSITIVITIES
662  ;
663  p.addPar("XRE", static_cast<double>(0), &ADMSvbic::Model::XRE)
664  .setUnit(U_NONE)
665  .setDescription("Temperature exponent of re")
666 #ifdef Xyce_ADMS_SENSITIVITIES
667  .setAnalyticSensitivityAvailable(true)
668  .setSensitivityFunctor(&modSens)
669 #endif // Xyce_ADMS_SENSITIVITIES
670  ;
671  p.addPar("XRBI", static_cast<double>(0), &ADMSvbic::Model::XRBI)
672  .setUnit(U_NONE)
673  .setDescription("")
674 #ifdef Xyce_ADMS_SENSITIVITIES
675  .setAnalyticSensitivityAvailable(true)
676  .setSensitivityFunctor(&modSens)
677 #endif // Xyce_ADMS_SENSITIVITIES
678  ;
679  p.addPar("XRCI", static_cast<double>(0), &ADMSvbic::Model::XRCI)
680  .setUnit(U_NONE)
681  .setDescription("")
682 #ifdef Xyce_ADMS_SENSITIVITIES
683  .setAnalyticSensitivityAvailable(true)
684  .setSensitivityFunctor(&modSens)
685 #endif // Xyce_ADMS_SENSITIVITIES
686  ;
687  p.addPar("XRS", static_cast<double>(0), &ADMSvbic::Model::XRS)
688  .setUnit(U_NONE)
689  .setDescription("Temperature exponent of rs")
690 #ifdef Xyce_ADMS_SENSITIVITIES
691  .setAnalyticSensitivityAvailable(true)
692  .setSensitivityFunctor(&modSens)
693 #endif // Xyce_ADMS_SENSITIVITIES
694  ;
695  p.addPar("XVO", static_cast<double>(0), &ADMSvbic::Model::XVO)
696  .setUnit(U_NONE)
697  .setDescription("Temperature exponent of vo")
698 #ifdef Xyce_ADMS_SENSITIVITIES
699  .setAnalyticSensitivityAvailable(true)
700  .setSensitivityFunctor(&modSens)
701 #endif // Xyce_ADMS_SENSITIVITIES
702  ;
703  p.addPar("EA", static_cast<double>(1.12), &ADMSvbic::Model::EA)
704  .setUnit(U_EV)
705  .setDescription("Activation energy for IS")
706 #ifdef Xyce_ADMS_SENSITIVITIES
707  .setAnalyticSensitivityAvailable(true)
708  .setSensitivityFunctor(&modSens)
709 #endif // Xyce_ADMS_SENSITIVITIES
710  ;
711  p.addPar("EAIE", static_cast<double>(1.12), &ADMSvbic::Model::EAIE)
712  .setUnit(U_EV)
713  .setDescription("Activation energy for IBEI")
714 #ifdef Xyce_ADMS_SENSITIVITIES
715  .setAnalyticSensitivityAvailable(true)
716  .setSensitivityFunctor(&modSens)
717 #endif // Xyce_ADMS_SENSITIVITIES
718  ;
719  p.addPar("EAIC", static_cast<double>(1.12), &ADMSvbic::Model::EAIC)
720  .setUnit(U_EV)
721  .setDescription("Activation energy for IBCI")
722 #ifdef Xyce_ADMS_SENSITIVITIES
723  .setAnalyticSensitivityAvailable(true)
724  .setSensitivityFunctor(&modSens)
725 #endif // Xyce_ADMS_SENSITIVITIES
726  ;
727  p.addPar("EAIS", static_cast<double>(1.12), &ADMSvbic::Model::EAIS)
728  .setUnit(U_EV)
729  .setDescription("Activation energy for IBCIP")
730 #ifdef Xyce_ADMS_SENSITIVITIES
731  .setAnalyticSensitivityAvailable(true)
732  .setSensitivityFunctor(&modSens)
733 #endif // Xyce_ADMS_SENSITIVITIES
734  ;
735  p.addPar("EANE", static_cast<double>(1.12), &ADMSvbic::Model::EANE)
736  .setUnit(U_EV)
737  .setDescription("Activation energy for IBEN")
738 #ifdef Xyce_ADMS_SENSITIVITIES
739  .setAnalyticSensitivityAvailable(true)
740  .setSensitivityFunctor(&modSens)
741 #endif // Xyce_ADMS_SENSITIVITIES
742  ;
743  p.addPar("EANC", static_cast<double>(1.12), &ADMSvbic::Model::EANC)
744  .setUnit(U_EV)
745  .setDescription("Activation energy for IBCN")
746 #ifdef Xyce_ADMS_SENSITIVITIES
747  .setAnalyticSensitivityAvailable(true)
748  .setSensitivityFunctor(&modSens)
749 #endif // Xyce_ADMS_SENSITIVITIES
750  ;
751  p.addPar("EANS", static_cast<double>(1.12), &ADMSvbic::Model::EANS)
752  .setUnit(U_EV)
753  .setDescription("Activation energy for IBCNP")
754 #ifdef Xyce_ADMS_SENSITIVITIES
755  .setAnalyticSensitivityAvailable(true)
756  .setSensitivityFunctor(&modSens)
757 #endif // Xyce_ADMS_SENSITIVITIES
758  ;
759  p.addPar("XIS", static_cast<double>(3.0), &ADMSvbic::Model::XIS)
760  .setUnit(U_NONE)
761  .setDescription("Temperature exponent of IS")
762 #ifdef Xyce_ADMS_SENSITIVITIES
763  .setAnalyticSensitivityAvailable(true)
764  .setSensitivityFunctor(&modSens)
765 #endif // Xyce_ADMS_SENSITIVITIES
766  ;
767  p.addPar("XII", static_cast<double>(3.0), &ADMSvbic::Model::XII)
768  .setUnit(U_NONE)
769  .setDescription("Temperature exponent of Ibei, Ibci, Ibeip, and Ibcip")
770 #ifdef Xyce_ADMS_SENSITIVITIES
771  .setAnalyticSensitivityAvailable(true)
772  .setSensitivityFunctor(&modSens)
773 #endif // Xyce_ADMS_SENSITIVITIES
774  ;
775  p.addPar("XIN", static_cast<double>(3.0), &ADMSvbic::Model::XIN)
776  .setUnit(U_NONE)
777  .setDescription("Temperature exponent of Iben, Ibcn, Ibenp, and Ibcnp")
778 #ifdef Xyce_ADMS_SENSITIVITIES
779  .setAnalyticSensitivityAvailable(true)
780  .setSensitivityFunctor(&modSens)
781 #endif // Xyce_ADMS_SENSITIVITIES
782  ;
783  p.addPar("TNF", static_cast<double>(0.0), &ADMSvbic::Model::TNF)
784  .setUnit(U_NONE)
785  .setDescription("Temperature coefficient of Nf")
786 #ifdef Xyce_ADMS_SENSITIVITIES
787  .setAnalyticSensitivityAvailable(true)
788  .setSensitivityFunctor(&modSens)
789 #endif // Xyce_ADMS_SENSITIVITIES
790  ;
791  p.addPar("TAVC", static_cast<double>(0.0), &ADMSvbic::Model::TAVC)
792  .setUnit(U_NONE)
793  .setDescription("Temperature coefficient of Avc2")
794 #ifdef Xyce_ADMS_SENSITIVITIES
795  .setAnalyticSensitivityAvailable(true)
796  .setSensitivityFunctor(&modSens)
797 #endif // Xyce_ADMS_SENSITIVITIES
798  ;
799  p.addPar("RTH", static_cast<double>(0.0), &ADMSvbic::Model::RTH)
800  .setUnit(U_OHM)
801  .setDescription("Thermal resistance, must be given for self-heating")
802 #ifdef Xyce_ADMS_SENSITIVITIES
803  .setAnalyticSensitivityAvailable(true)
804  .setSensitivityFunctor(&modSens)
805 #endif // Xyce_ADMS_SENSITIVITIES
806  ;
807  p.addPar("CTH", static_cast<double>(0.0), &ADMSvbic::Model::CTH)
808  .setUnit(U_FARAD)
809  .setDescription("Thermal capacitance")
810 #ifdef Xyce_ADMS_SENSITIVITIES
811  .setAnalyticSensitivityAvailable(true)
812  .setSensitivityFunctor(&modSens)
813 #endif // Xyce_ADMS_SENSITIVITIES
814  ;
815  p.addPar("VRT", static_cast<double>(0.0), &ADMSvbic::Model::VRT)
816  .setUnit(U_NONE)
817  .setDescription("")
818 #ifdef Xyce_ADMS_SENSITIVITIES
819  .setAnalyticSensitivityAvailable(true)
820  .setSensitivityFunctor(&modSens)
821 #endif // Xyce_ADMS_SENSITIVITIES
822  ;
823  p.addPar("ART", static_cast<double>(0.1), &ADMSvbic::Model::ART)
824  .setUnit(U_NONE)
825  .setDescription("")
826 #ifdef Xyce_ADMS_SENSITIVITIES
827  .setAnalyticSensitivityAvailable(true)
828  .setSensitivityFunctor(&modSens)
829 #endif // Xyce_ADMS_SENSITIVITIES
830  ;
831  p.addPar("CCSO", static_cast<double>(0.0), &ADMSvbic::Model::CCSO)
832  .setUnit(U_NONE)
833  .setDescription("(unused)")
834 #ifdef Xyce_ADMS_SENSITIVITIES
835  .setAnalyticSensitivityAvailable(true)
836  .setSensitivityFunctor(&modSens)
837 #endif // Xyce_ADMS_SENSITIVITIES
838  ;
839  p.addPar("QBM", static_cast<double>(0.0), &ADMSvbic::Model::QBM)
840  .setUnit(U_NONE)
841  .setDescription("")
842 #ifdef Xyce_ADMS_SENSITIVITIES
843  .setAnalyticSensitivityAvailable(true)
844  .setSensitivityFunctor(&modSens)
845 #endif // Xyce_ADMS_SENSITIVITIES
846  ;
847  p.addPar("NKF", static_cast<double>(0.5), &ADMSvbic::Model::NKF)
848  .setUnit(U_NONE)
849  .setDescription("")
850 #ifdef Xyce_ADMS_SENSITIVITIES
851  .setAnalyticSensitivityAvailable(true)
852  .setSensitivityFunctor(&modSens)
853 #endif // Xyce_ADMS_SENSITIVITIES
854  ;
855  p.addPar("XIKF", static_cast<double>(0), &ADMSvbic::Model::XIKF)
856  .setUnit(U_NONE)
857  .setDescription("")
858 #ifdef Xyce_ADMS_SENSITIVITIES
859  .setAnalyticSensitivityAvailable(true)
860  .setSensitivityFunctor(&modSens)
861 #endif // Xyce_ADMS_SENSITIVITIES
862  ;
863  p.addPar("XRCX", static_cast<double>(0), &ADMSvbic::Model::XRCX)
864  .setUnit(U_NONE)
865  .setDescription("")
866 #ifdef Xyce_ADMS_SENSITIVITIES
867  .setAnalyticSensitivityAvailable(true)
868  .setSensitivityFunctor(&modSens)
869 #endif // Xyce_ADMS_SENSITIVITIES
870  ;
871  p.addPar("XRBX", static_cast<double>(0), &ADMSvbic::Model::XRBX)
872  .setUnit(U_NONE)
873  .setDescription("")
874 #ifdef Xyce_ADMS_SENSITIVITIES
875  .setAnalyticSensitivityAvailable(true)
876  .setSensitivityFunctor(&modSens)
877 #endif // Xyce_ADMS_SENSITIVITIES
878  ;
879  p.addPar("XRBP", static_cast<double>(0), &ADMSvbic::Model::XRBP)
880  .setUnit(U_NONE)
881  .setDescription("")
882 #ifdef Xyce_ADMS_SENSITIVITIES
883  .setAnalyticSensitivityAvailable(true)
884  .setSensitivityFunctor(&modSens)
885 #endif // Xyce_ADMS_SENSITIVITIES
886  ;
887  p.addPar("ISRR", static_cast<double>(1.0), &ADMSvbic::Model::ISRR)
888  .setUnit(U_NONE)
889  .setDescription("Saturation current for reverse operation")
890 #ifdef Xyce_ADMS_SENSITIVITIES
891  .setAnalyticSensitivityAvailable(true)
892  .setSensitivityFunctor(&modSens)
893 #endif // Xyce_ADMS_SENSITIVITIES
894  ;
895  p.addPar("XISR", static_cast<double>(0.0), &ADMSvbic::Model::XISR)
896  .setUnit(U_NONE)
897  .setDescription("Temperature exponent of ISRR")
898 #ifdef Xyce_ADMS_SENSITIVITIES
899  .setAnalyticSensitivityAvailable(true)
900  .setSensitivityFunctor(&modSens)
901 #endif // Xyce_ADMS_SENSITIVITIES
902  ;
903  p.addPar("DEAR", static_cast<double>(0.0), &ADMSvbic::Model::DEAR)
904  .setUnit(U_NONE)
905  .setDescription("Activation energy for ISRR")
906 #ifdef Xyce_ADMS_SENSITIVITIES
907  .setAnalyticSensitivityAvailable(true)
908  .setSensitivityFunctor(&modSens)
909 #endif // Xyce_ADMS_SENSITIVITIES
910  ;
911  p.addPar("EAP", static_cast<double>(1.12), &ADMSvbic::Model::EAP)
912  .setUnit(U_NONE)
913  .setDescription("Activation energy for ISP")
914 #ifdef Xyce_ADMS_SENSITIVITIES
915  .setAnalyticSensitivityAvailable(true)
916  .setSensitivityFunctor(&modSens)
917 #endif // Xyce_ADMS_SENSITIVITIES
918  ;
919  p.addPar("VBBE", static_cast<double>(0.0), &ADMSvbic::Model::VBBE)
920  .setUnit(U_NONE)
921  .setDescription("")
922 #ifdef Xyce_ADMS_SENSITIVITIES
923  .setAnalyticSensitivityAvailable(true)
924  .setSensitivityFunctor(&modSens)
925 #endif // Xyce_ADMS_SENSITIVITIES
926  ;
927  p.addPar("NBBE", static_cast<double>(1.0), &ADMSvbic::Model::NBBE)
928  .setUnit(U_NONE)
929  .setDescription("")
930 #ifdef Xyce_ADMS_SENSITIVITIES
931  .setAnalyticSensitivityAvailable(true)
932  .setSensitivityFunctor(&modSens)
933 #endif // Xyce_ADMS_SENSITIVITIES
934  ;
935  p.addPar("IBBE", static_cast<double>(1.0e-6), &ADMSvbic::Model::IBBE)
936  .setUnit(U_NONE)
937  .setDescription("")
938 #ifdef Xyce_ADMS_SENSITIVITIES
939  .setAnalyticSensitivityAvailable(true)
940  .setSensitivityFunctor(&modSens)
941 #endif // Xyce_ADMS_SENSITIVITIES
942  ;
943  p.addPar("TVBBE1", static_cast<double>(0.0), &ADMSvbic::Model::TVBBE1)
944  .setUnit(U_NONE)
945  .setDescription("")
946 #ifdef Xyce_ADMS_SENSITIVITIES
947  .setAnalyticSensitivityAvailable(true)
948  .setSensitivityFunctor(&modSens)
949 #endif // Xyce_ADMS_SENSITIVITIES
950  ;
951  p.addPar("TVBBE2", static_cast<double>(0.0), &ADMSvbic::Model::TVBBE2)
952  .setUnit(U_NONE)
953  .setDescription("")
954 #ifdef Xyce_ADMS_SENSITIVITIES
955  .setAnalyticSensitivityAvailable(true)
956  .setSensitivityFunctor(&modSens)
957 #endif // Xyce_ADMS_SENSITIVITIES
958  ;
959  p.addPar("TNBBE", static_cast<double>(0.0), &ADMSvbic::Model::TNBBE)
960  .setUnit(U_NONE)
961  .setDescription("")
962 #ifdef Xyce_ADMS_SENSITIVITIES
963  .setAnalyticSensitivityAvailable(true)
964  .setSensitivityFunctor(&modSens)
965 #endif // Xyce_ADMS_SENSITIVITIES
966  ;
967  p.addPar("EBBE", static_cast<double>(0.0), &ADMSvbic::Model::EBBE)
968  .setUnit(U_NONE)
969  .setDescription("(unused)")
970 #ifdef Xyce_ADMS_SENSITIVITIES
971  .setAnalyticSensitivityAvailable(true)
972  .setSensitivityFunctor(&modSens)
973 #endif // Xyce_ADMS_SENSITIVITIES
974  ;
975  p.addPar("DTEMP", static_cast<double>(0.0), &ADMSvbic::Model::DTEMP)
976  .setUnit(U_NONE)
977  .setDescription("Device temperature (use 0.0 for ambient)")
978 #ifdef Xyce_ADMS_SENSITIVITIES
979  .setAnalyticSensitivityAvailable(true)
980  .setSensitivityFunctor(&modSens)
981 #endif // Xyce_ADMS_SENSITIVITIES
982  ;
983  p.addPar("VERS", static_cast<double>(1.2), &ADMSvbic::Model::VERS)
984  .setUnit(U_NONE)
985  .setDescription("Version of this VBIC model")
986 #ifdef Xyce_ADMS_SENSITIVITIES
987  .setAnalyticSensitivityAvailable(true)
988  .setSensitivityFunctor(&modSens)
989 #endif // Xyce_ADMS_SENSITIVITIES
990  ;
991  p.addPar("VREV", static_cast<double>(0.0), &ADMSvbic::Model::VREV)
992  .setUnit(U_NONE)
993  .setDescription("")
994 #ifdef Xyce_ADMS_SENSITIVITIES
995  .setAnalyticSensitivityAvailable(true)
996  .setSensitivityFunctor(&modSens)
997 #endif // Xyce_ADMS_SENSITIVITIES
998  ;
999  //Hidden parameter dtype
1000 
1001 }
1002 
1003 //-----------------------------------------------------------------------------
1004 // Function : Instance::processParams
1005 // Purpose :
1006 // Special Notes :
1007 // Scope : public
1008 // Creator : admsXml
1009 // Creation Date :
1010 //-----------------------------------------------------------------------------
1012 {
1013  // set any non-constant parameter defaults
1014 
1015  // copy any model variables that have associated instance variables, but
1016  // are only given in the model card:
1017  if (!(given("DTEMP")))
1018  {
1019  DTEMP = model_.DTEMP;
1020  }
1021 
1022 
1023 
1024  // Set any parameters that were not given and whose defaults depend on other
1025  // parameters:
1026 
1027 
1028  // Now we need to check that any parameters are within their ranges as
1029  // specified in the verilog:
1030 
1031  // Parameter M : [ 1, (+inf) [
1032  if ( (!((M >=1))) )
1033  {
1034  UserError0(*this) << "ADMSvbic: Parameter M value " << M << " out of range [ 1, (+inf) [";
1035  }
1036 
1037 
1038  // this seems a little stupid, but verilog models that use $temperature
1039  // don't also use a defined parameter "Temp", and count on $temperature
1040  // to be the one the simulator wants:
1041 
1043 
1044  // and of course, this routine is where we should put the initial_instance
1045  // stuff
1046 
1047 
1048  return true;
1049 }
1050 
1051 //-----------------------------------------------------------------------------
1052 // Function : Instance::Instance
1053 // Purpose : "instance block" constructor
1054 // Special Notes :
1055 // Scope : public
1056 // Creator : admsXml
1057 // Creation Date :
1058 //-----------------------------------------------------------------------------
1059 
1061  const Configuration & configuration,
1062  const InstanceBlock & instance_block,
1063  Model & model,
1064  const FactoryBlock & factory_block)
1065  : DeviceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
1066  model_(model),
1067  DTEMP(0.0),
1068  M(1),
1069  li_c(-1),
1070  li_b(-1),
1071  li_e(-1),
1072  li_dt(-1),
1073  li_cx(-1),
1074  li_ci(-1),
1075  li_bx(-1),
1076  li_bi(-1),
1077  li_ei(-1),
1078  li_bp(-1),
1079  f_bi_Equ_bi_Node_Ptr(0),
1080  f_bi_Equ_ei_Node_Ptr(0),
1081  f_ei_Equ_bi_Node_Ptr(0),
1082  f_ei_Equ_ei_Node_Ptr(0),
1083  f_bi_Equ_dt_Node_Ptr(0),
1084  f_ei_Equ_dt_Node_Ptr(0),
1085  f_bx_Equ_bx_Node_Ptr(0),
1086  f_bx_Equ_ei_Node_Ptr(0),
1087  f_ei_Equ_bx_Node_Ptr(0),
1088  f_bx_Equ_dt_Node_Ptr(0),
1089  f_ci_Equ_bi_Node_Ptr(0),
1090  f_ci_Equ_ci_Node_Ptr(0),
1091  f_ei_Equ_ci_Node_Ptr(0),
1092  f_ci_Equ_ei_Node_Ptr(0),
1093  f_ci_Equ_dt_Node_Ptr(0),
1094  f_bi_Equ_ci_Node_Ptr(0),
1095  f_bx_Equ_bp_Node_Ptr(0),
1096  f_bp_Equ_bx_Node_Ptr(0),
1097  f_bp_Equ_bp_Node_Ptr(0),
1098  f_bp_Equ_dt_Node_Ptr(0),
1099  f_c_Equ_dt_Node_Ptr(0),
1100  f_cx_Equ_dt_Node_Ptr(0),
1101  f_c_Equ_c_Node_Ptr(0),
1102  f_c_Equ_cx_Node_Ptr(0),
1103  f_cx_Equ_c_Node_Ptr(0),
1104  f_cx_Equ_cx_Node_Ptr(0),
1105  f_cx_Equ_bi_Node_Ptr(0),
1106  f_ci_Equ_cx_Node_Ptr(0),
1107  f_cx_Equ_ci_Node_Ptr(0),
1108  f_b_Equ_dt_Node_Ptr(0),
1109  f_b_Equ_b_Node_Ptr(0),
1110  f_b_Equ_bx_Node_Ptr(0),
1111  f_bx_Equ_b_Node_Ptr(0),
1112  f_bx_Equ_bi_Node_Ptr(0),
1113  f_bx_Equ_ci_Node_Ptr(0),
1114  f_bi_Equ_bx_Node_Ptr(0),
1115  f_e_Equ_dt_Node_Ptr(0),
1116  f_e_Equ_e_Node_Ptr(0),
1117  f_e_Equ_ei_Node_Ptr(0),
1118  f_ei_Equ_e_Node_Ptr(0),
1119  f_bp_Equ_bi_Node_Ptr(0),
1120  f_bp_Equ_ci_Node_Ptr(0),
1121  f_cx_Equ_bx_Node_Ptr(0),
1122  f_cx_Equ_bp_Node_Ptr(0),
1123  f_bp_Equ_cx_Node_Ptr(0),
1124  f_bi_Equ_cx_Node_Ptr(0),
1125  f_b_Equ_e_Node_Ptr(0),
1126  f_e_Equ_b_Node_Ptr(0),
1127  f_b_Equ_c_Node_Ptr(0),
1128  f_c_Equ_b_Node_Ptr(0),
1129  f_dt_Equ_dt_Node_Ptr(0),
1130  f_dt_Equ_bp_Node_Ptr(0),
1131  f_dt_Equ_cx_Node_Ptr(0),
1132  f_dt_Equ_e_Node_Ptr(0),
1133  f_dt_Equ_ei_Node_Ptr(0),
1134  f_dt_Equ_bx_Node_Ptr(0),
1135  f_dt_Equ_bi_Node_Ptr(0),
1136  f_dt_Equ_b_Node_Ptr(0),
1137  f_dt_Equ_ci_Node_Ptr(0),
1138  f_dt_Equ_c_Node_Ptr(0),
1139  q_bi_Equ_bi_Node_Ptr(0),
1140  q_bi_Equ_ei_Node_Ptr(0),
1141  q_ei_Equ_bi_Node_Ptr(0),
1142  q_ei_Equ_ei_Node_Ptr(0),
1143  q_bi_Equ_dt_Node_Ptr(0),
1144  q_ei_Equ_dt_Node_Ptr(0),
1145  q_bx_Equ_bx_Node_Ptr(0),
1146  q_bx_Equ_ei_Node_Ptr(0),
1147  q_ei_Equ_bx_Node_Ptr(0),
1148  q_bx_Equ_dt_Node_Ptr(0),
1149  q_ci_Equ_bi_Node_Ptr(0),
1150  q_ci_Equ_ci_Node_Ptr(0),
1151  q_ei_Equ_ci_Node_Ptr(0),
1152  q_ci_Equ_ei_Node_Ptr(0),
1153  q_ci_Equ_dt_Node_Ptr(0),
1154  q_bi_Equ_ci_Node_Ptr(0),
1155  q_bx_Equ_bp_Node_Ptr(0),
1156  q_bp_Equ_bx_Node_Ptr(0),
1157  q_bp_Equ_bp_Node_Ptr(0),
1158  q_bp_Equ_dt_Node_Ptr(0),
1159  q_c_Equ_dt_Node_Ptr(0),
1160  q_cx_Equ_dt_Node_Ptr(0),
1161  q_c_Equ_c_Node_Ptr(0),
1162  q_c_Equ_cx_Node_Ptr(0),
1163  q_cx_Equ_c_Node_Ptr(0),
1164  q_cx_Equ_cx_Node_Ptr(0),
1165  q_cx_Equ_bi_Node_Ptr(0),
1166  q_ci_Equ_cx_Node_Ptr(0),
1167  q_cx_Equ_ci_Node_Ptr(0),
1168  q_b_Equ_dt_Node_Ptr(0),
1169  q_b_Equ_b_Node_Ptr(0),
1170  q_b_Equ_bx_Node_Ptr(0),
1171  q_bx_Equ_b_Node_Ptr(0),
1172  q_bx_Equ_bi_Node_Ptr(0),
1173  q_bx_Equ_ci_Node_Ptr(0),
1174  q_bi_Equ_bx_Node_Ptr(0),
1175  q_e_Equ_dt_Node_Ptr(0),
1176  q_e_Equ_e_Node_Ptr(0),
1177  q_e_Equ_ei_Node_Ptr(0),
1178  q_ei_Equ_e_Node_Ptr(0),
1179  q_bp_Equ_bi_Node_Ptr(0),
1180  q_bp_Equ_ci_Node_Ptr(0),
1181  q_cx_Equ_bx_Node_Ptr(0),
1182  q_cx_Equ_bp_Node_Ptr(0),
1183  q_bp_Equ_cx_Node_Ptr(0),
1184  q_bi_Equ_cx_Node_Ptr(0),
1185  q_b_Equ_e_Node_Ptr(0),
1186  q_e_Equ_b_Node_Ptr(0),
1187  q_b_Equ_c_Node_Ptr(0),
1188  q_c_Equ_b_Node_Ptr(0),
1189  q_dt_Equ_dt_Node_Ptr(0),
1190  q_dt_Equ_bp_Node_Ptr(0),
1191  q_dt_Equ_cx_Node_Ptr(0),
1192  q_dt_Equ_e_Node_Ptr(0),
1193  q_dt_Equ_ei_Node_Ptr(0),
1194  q_dt_Equ_bx_Node_Ptr(0),
1195  q_dt_Equ_bi_Node_Ptr(0),
1196  q_dt_Equ_b_Node_Ptr(0),
1197  q_dt_Equ_ci_Node_Ptr(0),
1198  q_dt_Equ_c_Node_Ptr(0),
1199  admsTemperature(getDeviceOptions().temp.getImmutableValue<double>()),
1200  externalNodeMode(false)
1201 
1202 {
1203  numIntVars = 6 + 0;
1204  numExtVars = 4;
1205 
1206 
1207  // Right now, we only have state for limited probes...
1208  numStateVars = 7;
1209 
1210  // Manually inserted code:
1211  devConMap.resize(4);
1212  devConMap[0] = 1;
1213  devConMap[1] = 1;
1214  devConMap[2] = 1;
1215  devConMap[3] = 2;
1216 
1217  if ( instance_block.numExtVars > 4)
1218  {
1219  numExtVars = instance_block.numExtVars;
1220  externalNodeMode = true;
1221  numIntVars -= numExtVars-4;
1222  devConMap.resize(numExtVars);
1223  for (int i1=4; i1<numExtVars; ++i1)
1224  devConMap[i1]=1;
1225  }
1226  // End manually inserted code
1227 
1228  // Set up jacobian stamp:
1229 
1230  if (jacStamp.empty())
1231  {
1232  jacStamp.resize(10);
1233  jacStamp[admsNodeID_c].resize(4);
1238  jacStamp[admsNodeID_b].resize(5);
1244  jacStamp[admsNodeID_e].resize(4);
1249  jacStamp[admsNodeID_dt].resize(10);
1260  jacStamp[admsNodeID_cx].resize(7);
1268  jacStamp[admsNodeID_ci].resize(5);
1274  jacStamp[admsNodeID_bx].resize(7);
1282  jacStamp[admsNodeID_bi].resize(6);
1289  jacStamp[admsNodeID_ei].resize(6);
1296  jacStamp[admsNodeID_bp].resize(6);
1303 
1304 
1305  // This is really not strictly necessary when not mapping away nodes,
1306  // but makes life easier when we get to registerJacLIDs. This block
1307  // simply makes a map that leaves everything in place. Later, when we
1308  // start making nodes go away, we will need to modify this.
1309 
1310  int mapSize = jacStamp.size();
1311  jacMap.clear();
1312  jacMap2.clear();
1313  jacMap.resize(mapSize);
1314  jacMap2.resize(mapSize);
1315  for (int i=0;i<mapSize;++i)
1316  {
1317  int rowSize=jacStamp[i].size();
1318  jacMap[i]=i;
1319  jacMap2[i].resize(rowSize);
1320  for (int j=0;j<rowSize;++j)
1321  {
1322  jacMap2[i][j] = j;
1323  }
1324  }
1325 
1326  }
1327 
1328 
1329  setDefaultParams();
1330  setParams(instance_block.params);
1331 
1332  // Real bogosity here...
1333  if (!given("XYCEADMSINSTTEMP"))
1334  admsInstTemp=getDeviceOptions().temp.getImmutableValue<double>();
1335 
1336  //calculate any parameters specified as expressions
1338 
1339  // calculate dependent (i.e. computed params) and check for errors.
1340  processParams();
1341  collapseNodes();
1342 
1343  // Manually added code
1344  // there are always ci and bi, but the others could be mapped away.
1345  int numExist = ((collapseNode_cx)?0:1) + ((collapseNode_bx)?0:1) + ((collapseNode_ei)?0:1) + 2;
1346 
1347  if (externalNodeMode && (numExtVars != 4+numExist))
1348  {
1349  DevelFatal0(*this) << "Instance " << getName() << " has wrong number of external nodes!"
1350  << " If you specify any internal nodes as external, you must set all that exist. ";
1351  }
1352  // End manually added code
1353 }
1354 
1355 //-----------------------------------------------------------------------------
1356 // Function : Instance::collapseNodes
1357 // Purpose : function to handle collapsing of nodes
1358 // Special Notes :
1359 // Scope : public
1360 // Creator : admsXml
1361 // Creation Date :
1362 //-----------------------------------------------------------------------------
1364 {double slTF;
1365  double IITF;
1366  double IVTF;
1367  double IHRCF;
1368  double IIKP;
1369  double IIKR;
1370  double IVER;
1371  double IVEF;
1372  double Tini;
1373  double tVCrit;
1374  collapseNode_cx = false;
1375  collapseNode_bx = false;
1376  collapseNode_ei = false;
1377  tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
1378 
1379  Tini = (2.731500e+02+(model_.TNOM));
1380 
1381  IVEF = (((model_.VEF)>0.0)?(1.0/(model_.VEF)):0.0);
1382 
1383  IVER = (((model_.VER)>0.0)?(1.0/(model_.VER)):0.0);
1384 
1385  IIKR = (((model_.IKR)>0.0)?(1.0/(model_.IKR)):0.0);
1386 
1387  IIKP = (((model_.IKP)>0.0)?(1.0/(model_.IKP)):0.0);
1388 
1389  IHRCF = (((model_.HRCF)>0.0)?(1.0/(model_.HRCF)):0.0);
1390 
1391  IVTF = (((model_.VTF)>0.0)?(1.0/(model_.VTF)):0.0);
1392 
1393  IITF = (((model_.ITF)>0.0)?(1.0/(model_.ITF)):0.0);
1394 
1395  slTF = (((model_.ITF)>0.0)?0.0:1.0);
1396 
1397  if (!(((model_.RCX)>0)))
1398  {
1399  collapseNode_cx = true;
1400 
1401  }
1402 
1403  if (!(((model_.RBX)>0)))
1404  {
1405  collapseNode_bx = true;
1406 
1407  }
1408 
1409  if (!(((model_.RE)>0)))
1410  {
1411  collapseNode_ei = true;
1412 
1413  }
1414 
1415 
1416 
1417  // Map away any unneeded internal nodes:
1418  // temporary stamps and maps
1419  std::vector< std::vector<int> > tempStamp;
1420  std::vector<int> tempMap;
1421  std::vector< std::vector<int> > tempMap2;
1422 
1423  int OriginalSize = jacMap.size();
1424 
1425  // If the columns of the jacstamp are not in ascending order then
1426  // jacStampMap will do bogus things. Our ADMS back-end doesn't guarantee
1427  // in-order jacStamps. So we reorder (through the maps)
1428  jacStampMap_fixOrder(jacStamp,jacMap2,tempStamp,tempMap2);
1429  jacStamp=tempStamp; jacMap2=tempMap2;
1430 
1431  if (collapseNode_cx)
1432  {
1433  tempStamp.clear(); tempMap.clear(); tempMap2.clear();
1435  tempStamp, tempMap, tempMap2,
1437  OriginalSize);
1438  // now move the new stuff into the old place
1439  jacStamp = tempStamp; jacMap = tempMap; jacMap2 = tempMap2;
1440  numIntVars--;
1441  }
1442  if (collapseNode_bx)
1443  {
1444  tempStamp.clear(); tempMap.clear(); tempMap2.clear();
1446  tempStamp, tempMap, tempMap2,
1448  OriginalSize);
1449  // now move the new stuff into the old place
1450  jacStamp = tempStamp; jacMap = tempMap; jacMap2 = tempMap2;
1451  numIntVars--;
1452  }
1453  if (collapseNode_ei)
1454  {
1455  tempStamp.clear(); tempMap.clear(); tempMap2.clear();
1457  tempStamp, tempMap, tempMap2,
1459  OriginalSize);
1460  // now move the new stuff into the old place
1461  jacStamp = tempStamp; jacMap = tempMap; jacMap2 = tempMap2;
1462  numIntVars--;
1463  }
1464 }
1465 
1466 //-----------------------------------------------------------------------------
1467 // Function : Instance::~Instance
1468 // Purpose : destructor
1469 // Special Notes :
1470 // Scope : public
1471 // Creator : admsXml
1472 // Creation Date :
1473 //-----------------------------------------------------------------------------
1475 {
1476 }
1477 
1478 //-----------------------------------------------------------------------------
1479 // Function : Instance::registerLIDs
1480 // Purpose : function for registering, and setting up, local ID's.
1481 // Special Notes :
1482 // Scope : public
1483 // Creator : admsXml
1484 // Creation Date :
1485 //-----------------------------------------------------------------------------
1486 void Instance::registerLIDs( const LocalIdVector & intLIDVecRef,
1487  const LocalIdVector & extLIDVecRef)
1488 {
1489  AssertLIDs(intLIDVecRef.size() == numIntVars);
1490  AssertLIDs(extLIDVecRef.size() == numExtVars);
1491 
1492  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
1493  {
1494  Xyce::dout() << std::endl << section_divider << std::endl
1495  << "In ADMSvbic::Instance::register LIDs\n\n"
1496  << "name = " << getName() << std::endl
1497  << "number of internal variables: " << numIntVars << std::endl
1498  << "number of external variables: " << numExtVars << std::endl;
1499  }
1500 
1501  // copy over the global ID lists.
1502  intLIDVec = intLIDVecRef;
1503  extLIDVec = extLIDVecRef;
1504 
1505  // Now use these lists to obtain the indices into the linear algebra
1506  // entities. This assumes an order.
1507  int i=0;
1508  li_c = extLIDVecRef[i++];
1509  li_b = extLIDVecRef[i++];
1510  li_e = extLIDVecRef[i++];
1511  li_dt = extLIDVecRef[i++];
1512 
1513  // Manually modified code
1514  int j=0;
1515  if (!collapseNode_cx)
1516  {
1517  if (externalNodeMode)
1518  li_cx = extLIDVecRef[i++];
1519  else
1520  li_cx = intLIDVecRef[j++];
1521  }
1522  else
1523  li_cx = li_c;
1524  if (externalNodeMode)
1525  li_ci = extLIDVecRef[i++];
1526  else
1527  li_ci = intLIDVecRef[j++];
1528 
1529  if (!collapseNode_bx)
1530  {
1531  if (externalNodeMode)
1532  li_bx = extLIDVecRef[i++];
1533  else
1534  li_bx = intLIDVecRef[j++];
1535  }
1536  else
1537  li_bx = li_b;
1538  if (externalNodeMode)
1539  li_bi = extLIDVecRef[i++];
1540  else
1541  li_bi = intLIDVecRef[j++];
1542  if (!collapseNode_ei)
1543  {
1544  if (externalNodeMode)
1545  li_ei = extLIDVecRef[i++];
1546  else
1547  li_ei = intLIDVecRef[j++];
1548  }
1549  else
1550  li_ei = li_e;
1551  li_bp = intLIDVecRef[j++];
1552  // End manually modified code
1553 
1554  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
1555  {
1556  Xyce::dout() << "\nSolution and RHS variables:\n";
1557  Xyce::dout() << "\nli_c = " << li_c << std::endl;
1558  Xyce::dout() << "\nli_b = " << li_b << std::endl;
1559  Xyce::dout() << "\nli_e = " << li_e << std::endl;
1560  Xyce::dout() << "\nli_dt = " << li_dt << std::endl;
1561  Xyce::dout() << "\nli_cx = " << li_cx << std::endl;
1562  Xyce::dout() << "\nli_ci = " << li_ci << std::endl;
1563  Xyce::dout() << "\nli_bx = " << li_bx << std::endl;
1564  Xyce::dout() << "\nli_bi = " << li_bi << std::endl;
1565  Xyce::dout() << "\nli_ei = " << li_ei << std::endl;
1566  Xyce::dout() << "\nli_bp = " << li_bp << std::endl;
1567 
1568  Xyce::dout() << "\nEnd of ADMSvbic::Instance::register LIDs\n";
1569  Xyce::dout() << section_divider << std::endl;
1570  }
1571 }
1572 
1573 //-----------------------------------------------------------------------------
1574 // Function : Instance::loadNodeSymbols
1575 // Purpose :
1576 // Special Notes :
1577 // Scope : public
1578 // Creator : admsXml
1579 // Creation Date :
1580 //-----------------------------------------------------------------------------
1581 void Instance::loadNodeSymbols(Util::SymbolTable &symbol_table) const
1582 {
1583  if (!collapseNode_cx)
1584  {
1585  addInternalNode(symbol_table, li_cx, getName(), "cx");
1586  }
1587  addInternalNode(symbol_table, li_ci, getName(), "ci");
1588  if (!collapseNode_bx)
1589  {
1590  addInternalNode(symbol_table, li_bx, getName(), "bx");
1591  }
1592  addInternalNode(symbol_table, li_bi, getName(), "bi");
1593  if (!collapseNode_ei)
1594  {
1595  addInternalNode(symbol_table, li_ei, getName(), "ei");
1596  }
1597  addInternalNode(symbol_table, li_bp, getName(), "bp");
1598 }
1599 
1600 //-----------------------------------------------------------------------------
1601 //-----------------------------------------------------------------------------
1602 // Function : Instance::registerStateLIDs
1603 // Purpose :
1604 // Special Notes :
1605 // Scope : public
1606 // Creator : admsXml
1607 // Creation Date :
1608 //-----------------------------------------------------------------------------
1609 void Instance::registerStateLIDs( const LocalIdVector & staLIDVecRef)
1610 {
1611  AssertLIDs(staLIDVecRef.size() == numStateVars);
1612 
1613  int numSta = staLIDVecRef.size();
1614  if (numSta > 0)
1615  {
1616  int i=0;
1617  staLIDVec = staLIDVecRef;
1618 
1626  }
1627 }
1628 
1629 //-----------------------------------------------------------------------------
1630 // Function : Instance::jacobianStamp
1631 // Purpose :
1632 // Special Notes : In initial version, we won't support mapping away nodes
1633 // Scope : public
1634 // Creator : admsXml
1635 // Creation Date :
1636 //-----------------------------------------------------------------------------
1638 {
1639  return jacStamp;
1640 }
1641 
1642 //-----------------------------------------------------------------------------
1643 // Function : Instance::registerJacLIDs
1644 // Purpose : Create Offset variables used for referencing jacobian
1645 // elements
1646 // Special Notes :
1647 // Scope : public
1648 // Creator : admsXml
1649 // Creation Date :
1650 //-----------------------------------------------------------------------------
1652 {
1654  std::vector<int> & map=jacMap;
1655  std::vector< std::vector<int> > & map2=jacMap2;
1656 
1657 
1658  // do nothing, we won't use the jac lids anymore, we'll use pointers
1659 
1660 }
1661 
1662 //-----------------------------------------------------------------------------
1663 // Function : Instance::setupPointers
1664 // Purpose : Create pointer variables used for referencing jacobian
1665 // elements
1666 // Special Notes :
1667 // Scope : public
1668 // Creator : admsXml
1669 // Creation Date :
1670 //-----------------------------------------------------------------------------
1672 {
1673 
1674  Linear::Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
1675  Linear::Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
1676  f_c_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_dt);
1677  q_c_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_dt);
1678  f_c_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_c);
1679  q_c_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_c);
1680  f_c_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_cx);
1681  q_c_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_cx);
1682  f_c_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_b);
1683  q_c_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_b);
1684  f_b_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_dt);
1685  q_b_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_dt);
1686  f_b_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_b);
1687  q_b_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_b);
1688  f_b_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_bx);
1689  q_b_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_bx);
1690  f_b_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_e);
1691  q_b_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_e);
1692  f_b_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_c);
1693  q_b_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_c);
1694  f_e_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_dt);
1695  q_e_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_dt);
1696  f_e_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_e);
1697  q_e_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_e);
1698  f_e_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_ei);
1699  q_e_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_ei);
1700  f_e_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_b);
1701  q_e_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_b);
1702  f_dt_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_dt);
1703  q_dt_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_dt);
1704  f_dt_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bp);
1705  q_dt_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bp);
1706  f_dt_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_cx);
1707  q_dt_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_cx);
1708  f_dt_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_e);
1709  q_dt_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_e);
1710  f_dt_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_ei);
1711  q_dt_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_ei);
1712  f_dt_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bx);
1713  q_dt_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bx);
1714  f_dt_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bi);
1715  q_dt_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bi);
1716  f_dt_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_b);
1717  q_dt_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_b);
1718  f_dt_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_ci);
1719  q_dt_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_ci);
1720  f_dt_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_c);
1721  q_dt_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_c);
1722  f_cx_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_dt);
1723  q_cx_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_dt);
1724  f_cx_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_c);
1725  q_cx_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_c);
1726  f_cx_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_cx);
1727  q_cx_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_cx);
1728  f_cx_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bi);
1729  q_cx_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bi);
1730  f_cx_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_ci);
1731  q_cx_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_ci);
1732  f_cx_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bx);
1733  q_cx_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bx);
1734  f_cx_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bp);
1735  q_cx_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bp);
1736  f_ci_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_bi);
1737  q_ci_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_bi);
1738  f_ci_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_ci);
1739  q_ci_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_ci);
1740  f_ci_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_ei);
1741  q_ci_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_ei);
1742  f_ci_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_dt);
1743  q_ci_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_dt);
1744  f_ci_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_cx);
1745  q_ci_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_cx);
1746  f_bx_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bx);
1747  q_bx_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bx);
1748  f_bx_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_ei);
1749  q_bx_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_ei);
1750  f_bx_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_dt);
1751  q_bx_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_dt);
1752  f_bx_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bp);
1753  q_bx_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bp);
1754  f_bx_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_b);
1755  q_bx_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_b);
1756  f_bx_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bi);
1757  q_bx_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bi);
1758  f_bx_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_ci);
1759  q_bx_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_ci);
1760  f_bi_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_bi);
1761  q_bi_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_bi);
1762  f_bi_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_ei);
1763  q_bi_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_ei);
1764  f_bi_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_dt);
1765  q_bi_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_dt);
1766  f_bi_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_ci);
1767  q_bi_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_ci);
1768  f_bi_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_bx);
1769  q_bi_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_bx);
1770  f_bi_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_cx);
1771  q_bi_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_cx);
1772  f_ei_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_bi);
1773  q_ei_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_bi);
1774  f_ei_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_ei);
1775  q_ei_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_ei);
1776  f_ei_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_dt);
1777  q_ei_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_dt);
1778  f_ei_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_bx);
1779  q_ei_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_bx);
1780  f_ei_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_ci);
1781  q_ei_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_ci);
1782  f_ei_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_e);
1783  q_ei_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_e);
1784  f_bp_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bx);
1785  q_bp_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bx);
1786  f_bp_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bp);
1787  q_bp_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bp);
1788  f_bp_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_dt);
1789  q_bp_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_dt);
1790  f_bp_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bi);
1791  q_bp_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bi);
1792  f_bp_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_ci);
1793  q_bp_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_ci);
1794  f_bp_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_cx);
1795  q_bp_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_cx);
1796 
1797 
1798 }
1799 
1800 // RHS load functions
1801 
1802 //-----------------------------------------------------------------------------
1803 // Function : Instance::loadDAEFVector
1804 // Purpose : load F vector (static contributions) for one instance for
1805 // NEW DAE formulation
1806 // Special Notes :
1807 // Scope : public
1808 // Creator : admsXml
1809 // Creation Date :
1810 //-----------------------------------------------------------------------------
1812 {
1813 
1814  bool bsuccess=true;
1815 
1827  {
1828  double *dFdxdVp = extData.dFdxdVpVectorRawPtr;
1829  dFdxdVp[li_c] += Jdxp_static[admsNodeID_c];
1830  dFdxdVp[li_b] += Jdxp_static[admsNodeID_b];
1831  dFdxdVp[li_e] += Jdxp_static[admsNodeID_e];
1832  dFdxdVp[li_dt] += Jdxp_static[admsNodeID_dt];
1833  dFdxdVp[li_cx] += Jdxp_static[admsNodeID_cx];
1834  dFdxdVp[li_ci] += Jdxp_static[admsNodeID_ci];
1835  dFdxdVp[li_bx] += Jdxp_static[admsNodeID_bx];
1836  dFdxdVp[li_bi] += Jdxp_static[admsNodeID_bi];
1837  dFdxdVp[li_ei] += Jdxp_static[admsNodeID_ei];
1838  dFdxdVp[li_bp] += Jdxp_static[admsNodeID_bp];
1839 
1840  }
1841 
1842  return bsuccess;
1843 }
1844 
1845 //-----------------------------------------------------------------------------
1846 // Function : Instance::loadDAEQVector
1847 // Purpose : load Q vector (dynamic contributions) for one instance for
1848 // NEW DAE formulation
1849 // Special Notes :
1850 // Scope : public
1851 // Creator : admsXml
1852 // Creation Date :
1853 //-----------------------------------------------------------------------------
1855 {
1867  {
1868  double *dQdxdVp = extData.dQdxdVpVectorRawPtr;
1869  dQdxdVp[li_c] += Jdxp_dynamic[admsNodeID_c];
1870  dQdxdVp[li_b] += Jdxp_dynamic[admsNodeID_b];
1871  dQdxdVp[li_e] += Jdxp_dynamic[admsNodeID_e];
1872  dQdxdVp[li_dt] += Jdxp_dynamic[admsNodeID_dt];
1873  dQdxdVp[li_cx] += Jdxp_dynamic[admsNodeID_cx];
1874  dQdxdVp[li_ci] += Jdxp_dynamic[admsNodeID_ci];
1875  dQdxdVp[li_bx] += Jdxp_dynamic[admsNodeID_bx];
1876  dQdxdVp[li_bi] += Jdxp_dynamic[admsNodeID_bi];
1877  dQdxdVp[li_ei] += Jdxp_dynamic[admsNodeID_ei];
1878  dQdxdVp[li_bp] += Jdxp_dynamic[admsNodeID_bp];
1879  }
1880 
1881  return true;
1882 }
1883 
1884 
1885 //-----------------------------------------------------------------------------
1886 // Function : Instance::updatePrimaryState
1887 // Purpose :
1888 // Special Notes : In this initial implementation, does little more than
1889 // call updateIntermediateVars()
1890 // Scope : public
1891 // Creator : admsXml
1892 // Creation Date :
1893 //-----------------------------------------------------------------------------
1895 {
1896  bool bsuccess = true;
1897 
1898  bsuccess = updateIntermediateVars();
1899 
1900  // if old DAE were implemented, we'd save dynamic contributions as state
1901  // here.
1902 
1903  double * staVec = extData.nextStaVectorRawPtr;
1904  // Also need to save limited voltage drops
1905  // This formulation assumes that we have *always* written the
1906  // limited voltages back into the probeVars[] array.
1907 
1915 
1916  return bsuccess;
1917 }
1918 
1919 //-----------------------------------------------------------------------------
1920 // Function : Instance::updateSecondaryState
1921 // Purpose :
1922 // Special Notes : In this initial implementation, does nothing
1923 // Scope : public
1924 // Creator : admsXml
1925 // Creation Date :
1926 //-----------------------------------------------------------------------------
1928 {
1929  bool bsuccess = true;
1930 
1931  // were old DAE implemented, we'd pull dynamic contribution derivatives
1932  // out of state.
1933 
1934  return bsuccess;
1935 }
1936 
1937 //-----------------------------------------------------------------------------
1938 // Function : Instance::updateIntermediateVars
1939 // Purpose : update intermediate variables for one vbic instance
1940 // Special Notes :
1941 // Scope : public
1942 // Creator : admsXml
1943 // Creation Date :
1944 //-----------------------------------------------------------------------------
1946 {
1947 
1948  bool bsuccess=true;
1949  Linear::Vector * solVectorPtr = extData.nextSolVectorPtr;
1950 
1951  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
1952  {
1953  Xyce::dout() << std::endl << subsection_divider << std::endl;
1954  Xyce::dout() << " In ADMSvbic::Instance::updateIntermediateVars\n\n";
1955  Xyce::dout() << " name = " << getName() << std::endl;
1956  }
1957 
1958  // Local variables
1959  AdmsFadType Qcth;
1960  AdmsFadType Irth;
1961  AdmsFadType Ith;
1962  AdmsFadType Qbco;
1963  AdmsFadType Qbeo;
1964  AdmsFadType Qbep;
1965  AdmsFadType Qbcx;
1966  AdmsFadType Qbc;
1967  AdmsFadType Qbex;
1968  AdmsFadType Qbe;
1969  AdmsFadType tff;
1970  AdmsFadType tff_exparg;
1971  AdmsFadType mIf;
1972  AdmsFadType rIf;
1973  AdmsFadType sgIf;
1974  AdmsFadType Irbp;
1975  AdmsFadType Ire;
1976  AdmsFadType Irbi;
1977  AdmsFadType Irbx;
1978  AdmsFadType Irci;
1979  AdmsFadType derf;
1980  AdmsFadType Iohm;
1981  AdmsFadType rKp1;
1982  AdmsFadType Kbcx;
1983  AdmsFadType Kbci;
1984  AdmsFadType expx_vbcx;
1985  AdmsFadType argx_vbcx;
1986  AdmsFadType Ircx;
1987  AdmsFadType Ibc;
1988  AdmsFadType Igc;
1989  AdmsFadType avalf;
1990  AdmsFadType avalf_exparg;
1991  AdmsFadType Ibep;
1992  AdmsFadType expn_vbep;
1993  AdmsFadType argn_vbep;
1994  AdmsFadType Ibcj;
1995  AdmsFadType expn_vbci;
1996  AdmsFadType argn_vbci;
1997  AdmsFadType Ibex;
1998  AdmsFadType Ibe;
1999  AdmsFadType expx_vbei;
2000  AdmsFadType argx_vbei;
2001  AdmsFadType expn_vbei;
2002  AdmsFadType argn_vbei;
2003  AdmsFadType argi_vbex;
2004  AdmsFadType expi_vbex;
2005  AdmsFadType argn_vbex;
2006  AdmsFadType expn_vbex;
2007  AdmsFadType argx_vbex;
2008  AdmsFadType expx_vbex;
2009  AdmsFadType qbp;
2010  AdmsFadType q2p;
2011  AdmsFadType Ifp;
2012  AdmsFadType expx_vbci;
2013  AdmsFadType argx_vbci;
2014  AdmsFadType expi_vbep;
2015  AdmsFadType argi_vbep;
2016  AdmsFadType Itzf;
2017  AdmsFadType Itzr;
2018  AdmsFadType qb;
2019  AdmsFadType q2;
2020  AdmsFadType q1;
2021  AdmsFadType q1z;
2022  AdmsFadType Iri;
2023  AdmsFadType expi_vbci;
2024  AdmsFadType argi_vbci;
2025  AdmsFadType Ifi;
2026  AdmsFadType expi_vbei;
2027  AdmsFadType argi_vbei;
2028  AdmsFadType qdbep;
2029  AdmsFadType qhi_vbep;
2030  AdmsFadType qlo_vbep;
2031  AdmsFadType dvh_vbep;
2032  AdmsFadType ql_vbep;
2033  AdmsFadType cl_vbep;
2034  AdmsFadType sel_vbep;
2035  AdmsFadType vl_vbep;
2036  AdmsFadType vnl_vbep;
2037  AdmsFadType vn_vbep;
2038  AdmsFadType mv_vbep;
2039  AdmsFadType dv_vbep;
2040  AdmsFadType qdbc;
2041  AdmsFadType qhi_vbci;
2042  AdmsFadType qlo_vbci;
2043  AdmsFadType dvh_vbci;
2044  AdmsFadType ql_vbci;
2045  AdmsFadType cl_vbci;
2046  AdmsFadType cmx;
2047  AdmsFadType crt;
2048  AdmsFadType sel_vbci;
2049  AdmsFadType vl_vbci;
2050  AdmsFadType vnl_vbci;
2051  AdmsFadType vn_vbci;
2052  AdmsFadType qlo0;
2053  AdmsFadType vnl0;
2054  AdmsFadType vn0;
2055  AdmsFadType mv_vbci;
2056  AdmsFadType dv_vbci;
2057  AdmsFadType qdbex;
2058  AdmsFadType qhi_vbex;
2059  AdmsFadType qlo_vbex;
2060  AdmsFadType dvh_vbex;
2061  AdmsFadType vl_vbex;
2062  AdmsFadType mv_vbex;
2063  AdmsFadType dv_vbex;
2064  AdmsFadType qdbe;
2065  AdmsFadType qhi_vbei;
2066  AdmsFadType qlo_vbei;
2067  double pwq;
2068  AdmsFadType dvh_vbei;
2069  AdmsFadType vl_vbei;
2070  AdmsFadType mv_vbei;
2071  AdmsFadType dv_vbei;
2072  AdmsFadType q0;
2073  AdmsFadType vl0;
2074  AdmsFadType mv0;
2075  AdmsFadType dv0;
2076  double slTF;
2077  double IITF;
2078  double IVTF;
2079  double IHRCF;
2080  AdmsFadType IVO;
2081  double IIKP;
2082  double IIKR;
2083  AdmsFadType IIKF;
2084  double IVER;
2085  double IVEF;
2086  AdmsFadType EBBEatT;
2087  AdmsFadType VOatT;
2088  AdmsFadType GAMMatT;
2089  AdmsFadType CJCPatT;
2090  AdmsFadType CJEPatT;
2091  AdmsFadType CJCatT;
2092  AdmsFadType CJEatT;
2093  AdmsFadType PSatT;
2094  AdmsFadType PCatT;
2095  AdmsFadType PEatT;
2096  AdmsFadType psiin;
2097  AdmsFadType psiio;
2098  AdmsFadType NBBEatT;
2099  AdmsFadType VBBEatT;
2100  AdmsFadType AVC2atT;
2101  AdmsFadType NRatT;
2102  AdmsFadType NFatT;
2103  AdmsFadType IBCNPatT;
2104  AdmsFadType IBCIPatT;
2105  AdmsFadType IBENPatT;
2106  AdmsFadType IBEIPatT;
2107  AdmsFadType IBCNatT;
2108  AdmsFadType IBCIatT;
2109  AdmsFadType IBENatT;
2110  AdmsFadType IBEIatT;
2111  AdmsFadType ISPatT;
2112  AdmsFadType ISRRatT;
2113  AdmsFadType ISatT;
2114  AdmsFadType RBPatT;
2115  AdmsFadType RSatT;
2116  AdmsFadType REatT;
2117  AdmsFadType RBIatT;
2118  AdmsFadType RBXatT;
2119  AdmsFadType RCIatT;
2120  AdmsFadType RCXatT;
2121  AdmsFadType IKFatT;
2122  AdmsFadType dT;
2123  AdmsFadType rT;
2124  AdmsFadType Vtv;
2125  AdmsFadType Tdev;
2126  double Tini;
2127  AdmsFadType Vcei;
2128  AdmsFadType Vbc;
2129  AdmsFadType Vrbp;
2130  AdmsFadType Vre;
2131  AdmsFadType Vrbx;
2132  AdmsFadType Vrbi;
2133  AdmsFadType Vrci;
2134  AdmsFadType Vrcx;
2135  AdmsFadType Vbe;
2136  AdmsFadType Vrth;
2137  AdmsFadType Vbep;
2138  AdmsFadType Vbcx;
2139  AdmsFadType Vbex;
2140  AdmsFadType Vbci;
2141  AdmsFadType Vbei;
2142  double tVCrit;
2143  // temporary variables for limiting
2144  double Vbe_orig,Vbe_limited,Vbe_old;
2145  double Vrth_orig,Vrth_limited,Vrth_old;
2146  double Vbep_orig,Vbep_limited,Vbep_old;
2147  double Vbcx_orig,Vbcx_limited,Vbcx_old;
2148  double Vbex_orig,Vbex_limited,Vbex_old;
2149  double Vbci_orig,Vbci_limited,Vbci_old;
2150  double Vbei_orig,Vbei_limited,Vbei_old;
2151 
2152 
2153  // set the sizes of the Fad arrays:
2154 
2155  if (probeVars.size() != (15))
2156  {
2157  probeVars.resize(15);
2158  staticContributions.resize(10+0);
2159  dynamicContributions.resize(10+0);
2160  probeDiffs.resize(15,0.0);
2161  Jdxp_static.resize(10+0);
2162  Jdxp_dynamic.resize(10+0);
2163  }
2164 
2165  // initialize contributions to zero (automatically sets derivatives to zero)
2166  for (int i=0; i < 10+0 ; ++i)
2167  {
2168  staticContributions[i]=0;
2169  dynamicContributions[i]=0;
2170  Jdxp_static[i]=0;
2171  Jdxp_dynamic[i]=0;
2172  }
2173 
2174  for (int i=0; i < 15 ; ++i)
2175  {
2176  probeDiffs[i] = 0.0;
2177  }
2178  // extract solution variables and set as Fad independent variables.
2179 
2180  probeVars[admsProbeID_V_ci_ei] = (*solVectorPtr)[li_ci] - (*solVectorPtr)[li_ei];
2182 
2183  probeVars[admsProbeID_V_b_c] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_c];
2185 
2186  probeVars[admsProbeID_V_bp_cx] = (*solVectorPtr)[li_bp] - (*solVectorPtr)[li_cx];
2188 
2189  probeVars[admsProbeID_V_e_ei] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_ei];
2191 
2192  probeVars[admsProbeID_V_b_bx] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_bx];
2194 
2195  probeVars[admsProbeID_V_bx_bi] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_bi];
2197 
2198  probeVars[admsProbeID_V_cx_ci] = (*solVectorPtr)[li_cx] - (*solVectorPtr)[li_ci];
2200 
2201  probeVars[admsProbeID_V_c_cx] = (*solVectorPtr)[li_c] - (*solVectorPtr)[li_cx];
2203 
2204  probeVars[admsProbeID_V_b_e] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_e];
2206 
2207  probeVars[admsProbeID_V_dt_GND] = (*solVectorPtr)[li_dt];
2209 
2210  probeVars[admsProbeID_V_bx_bp] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_bp];
2212 
2213  probeVars[admsProbeID_V_bi_cx] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_cx];
2215 
2216  probeVars[admsProbeID_V_bx_ei] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_ei];
2218 
2219  probeVars[admsProbeID_V_bi_ci] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_ci];
2221 
2222  probeVars[admsProbeID_V_bi_ei] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_ei];
2224 
2225 
2226  // pre-multiply any "typed" probes (i.e. those limited with "typedpnjlim")
2233 
2234  // Copy probes into limiting vars
2235  Vbe_orig = Vbe_limited = probeVars[admsProbeID_V_b_e].val();
2237  Vrth_orig = Vrth_limited = probeVars[admsProbeID_V_dt_GND].val();
2239  Vbep_orig = Vbep_limited = probeVars[admsProbeID_V_bx_bp].val();
2241  Vbcx_orig = Vbcx_limited = probeVars[admsProbeID_V_bi_cx].val();
2243  Vbex_orig = Vbex_limited = probeVars[admsProbeID_V_bx_ei].val();
2245  Vbci_orig = Vbci_limited = probeVars[admsProbeID_V_bi_ci].val();
2247  Vbei_orig = Vbei_limited = probeVars[admsProbeID_V_bi_ei].val();
2249 
2250  origFlag = true;
2251 
2252  // code manually moved from below, because we need it earlier than predicted by adms
2253  tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
2254 
2255  if (getSolverState().newtonIter == 0)
2256  {
2257 
2259  {
2260  // manually inserted code:
2262  {
2263  Linear::Vector * flagSolVectorPtr = (extData.flagSolVectorPtr);
2264  if ((*flagSolVectorPtr)[li_e] == 0 ||
2265  (*flagSolVectorPtr)[li_ei] == 0 ||
2266  (*flagSolVectorPtr)[li_b] == 0 ||
2267  (*flagSolVectorPtr)[li_bi] == 0 ||
2268  (*flagSolVectorPtr)[li_bx] == 0 ||
2269  (*flagSolVectorPtr)[li_bp] == 0 ||
2270  (*flagSolVectorPtr)[li_c] == 0 ||
2271  (*flagSolVectorPtr)[li_ci] == 0 ||
2272  (*flagSolVectorPtr)[li_cx] == 0 ||
2273  (*flagSolVectorPtr)[li_dt] == 0 )
2274  {
2275  Vbci_limited = Vbcx_limited = Vbep_limited = 0;
2276  Vbe_limited = Vbei_limited = Vbex_limited = tVCrit;
2277  Vrth_limited = 0;
2278  origFlag = false;
2279  }
2280  }
2281  else
2282  {
2283  Vbci_limited = Vbcx_limited = Vbep_limited = 0;
2284  Vbe_limited = Vbei_limited = Vbex_limited = tVCrit;
2285  Vrth_limited = 0;
2286  origFlag = false;
2287  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) > 0 && getSolverState().debugTimeFlag)
2288  {
2289  Xyce::dout() << " Setting device initial condition to Base-Emitter drop=tVCrit (" << tVCrit << ")"<<std::endl;
2290  }
2291  }
2292  }
2293  // end manually inserted code
2294 
2295  if (!(getSolverState().dcopFlag)||(getSolverState().locaEnabledFlag && getSolverState().dcopFlag))
2296  {
2304  }
2305  else
2306  {
2307  Vbe_old = Vbe_limited;
2308  Vrth_old = Vrth_limited;
2309  Vbep_old = Vbep_limited;
2310  Vbcx_old = Vbcx_limited;
2311  Vbex_old = Vbex_limited;
2312  Vbci_old = Vbci_limited;
2313  Vbei_old = Vbei_limited;
2314  }
2315  }
2316  else
2317  {
2325  }
2326 
2327  // -- code converted from analog/code block
2328  // manually moved to above, we need it earlier than this:
2329  //tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
2330 
2331 
2332  //Vbei = ($limit(V(bi,ei),"typedpnjlim_new",$vt(),tVCrit,dtype));
2334  {
2335  int icheck=0;
2336  Vbei_limited = devSupport.pnjlim_new(Vbei_limited,Vbei_old,adms_vt_nom,tVCrit,&icheck);
2337  if (icheck == 1)
2338  origFlag = false;
2339  if (!origFlag)
2340  {
2341  probeDiffs[admsProbeID_V_bi_ei] = Vbei_limited - Vbei_orig;
2343  }
2344  }
2346 
2347 
2348 
2349  //Vbci = ($limit(V(bi,ci),"typedpnjlim_new",$vt(),tVCrit,dtype));
2350  if (getDeviceOptions().voltageLimiterFlag)
2351  {
2352  int icheck=0;
2353  Vbci_limited = devSupport.pnjlim_new(Vbci_limited,Vbci_old,adms_vt_nom,tVCrit,&icheck);
2354  if (icheck == 1)
2355  origFlag = false;
2356  if (!origFlag)
2357  {
2358  probeDiffs[admsProbeID_V_bi_ci] = Vbci_limited - Vbci_orig;
2360  }
2361  }
2363 
2364 
2365 
2366  //Vbex = ($limit(V(bx,ei),"typedpnjlim_new",$vt(),tVCrit,dtype));
2367  if (getDeviceOptions().voltageLimiterFlag)
2368  {
2369  int icheck=0;
2370  Vbex_limited = devSupport.pnjlim_new(Vbex_limited,Vbex_old,adms_vt_nom,tVCrit,&icheck);
2371  if (icheck == 1)
2372  origFlag = false;
2373  if (!origFlag)
2374  {
2375  probeDiffs[admsProbeID_V_bx_ei] = Vbex_limited - Vbex_orig;
2377  }
2378  }
2380 
2381 
2382 
2383  //Vbcx = ($limit(V(bi,cx),"typedpnjlim_new",$vt(),tVCrit,dtype));
2384  if (getDeviceOptions().voltageLimiterFlag)
2385  {
2386  int icheck=0;
2387  Vbcx_limited = devSupport.pnjlim_new(Vbcx_limited,Vbcx_old,adms_vt_nom,tVCrit,&icheck);
2388  if (icheck == 1)
2389  origFlag = false;
2390  if (!origFlag)
2391  {
2392  probeDiffs[admsProbeID_V_bi_cx] = Vbcx_limited - Vbcx_orig;
2394  }
2395  }
2397 
2398 
2399 
2400  //Vbep = ($limit(V(bx,bp),"typedpnjlim_new",$vt(),tVCrit,dtype));
2401  if (getDeviceOptions().voltageLimiterFlag)
2402  {
2403  int icheck=0;
2404  Vbep_limited = devSupport.pnjlim_new(Vbep_limited,Vbep_old,adms_vt_nom,tVCrit,&icheck);
2405  if (icheck == 1)
2406  origFlag = false;
2407  if (!origFlag)
2408  {
2409  probeDiffs[admsProbeID_V_bx_bp] = Vbep_limited - Vbep_orig;
2411  }
2412  }
2414 
2415 
2416 
2417  //Vrth = ($limit(V(dt,GND),"limRTH"));
2418  if (getDeviceOptions().voltageLimiterFlag)
2419  {
2420  int icheck=0;
2421  Vrth_limited = AnalogFunctions::limRTH(Vrth_limited,Vrth_old);
2422  if (Vrth_limited != Vrth_orig)
2423  {
2424  icheck=1;
2425  }
2426  if (icheck == 1)
2427  origFlag = false;
2428  if (!origFlag)
2429  {
2430  probeDiffs[admsProbeID_V_dt_GND] = Vrth_limited - Vrth_orig;
2432  }
2433  }
2435 
2436 
2437 
2438  //Vbe = ($limit(V(b,e),"typeddummy",$vt(),tVCrit,dtype));
2439  if (getDeviceOptions().voltageLimiterFlag)
2440  {
2441  int icheck=0;
2442  // dummy limiting for initialization purposes
2443  if (icheck == 1)
2444  origFlag = false;
2445  if (!origFlag)
2446  {
2447  probeDiffs[admsProbeID_V_b_e] = Vbe_limited - Vbe_orig;
2449  }
2450  }
2452 
2453  Vrcx = ((model_.dtype)*(probeVars[admsProbeID_V_c_cx]));
2454  Vrci = ((model_.dtype)*(probeVars[admsProbeID_V_cx_ci]));
2455  Vrbi = ((model_.dtype)*(probeVars[admsProbeID_V_bx_bi]));
2456  Vrbx = ((model_.dtype)*(probeVars[admsProbeID_V_b_bx]));
2458  Vrbp = ((model_.dtype)*(probeVars[admsProbeID_V_bp_cx]));
2459  Vbc = ((model_.dtype)*(probeVars[admsProbeID_V_b_c]));
2460  Vcei = ((model_.dtype)*(probeVars[admsProbeID_V_ci_ei]));
2461  Tini = (2.731500e+02+(model_.TNOM));
2462  Tdev = ((admsTemperature+DTEMP)+Vrth);
2463  Vtv = ((1.380662e-23*Tdev)/1.602189e-19);
2464  rT = (Tdev/Tini);
2465  dT = (Tdev-Tini);
2466  IKFatT = ((model_.IKF)*pow(rT,(model_.XIKF)));
2467  RCXatT = ((model_.RCX)*pow(rT,(model_.XRCX)));
2468  RCIatT = ((model_.RCI)*pow(rT,(model_.XRCI)));
2469  RBXatT = ((model_.RBX)*pow(rT,(model_.XRBX)));
2470  RBIatT = ((model_.RBI)*pow(rT,(model_.XRBI)));
2471  REatT = ((model_.RE)*pow(rT,(model_.XRE)));
2472  RSatT = ((model_.RS)*pow(rT,(model_.XRS)));
2473  RBPatT = ((model_.RBP)*pow(rT,(model_.XRBP)));
2474  ISatT = ((model_.IS)*pow((pow(rT,(model_.XIS))*exp((((-(model_.EA))*(1.0-rT))/Vtv))),(1.0/(model_.NF))));
2475  ISRRatT = ((model_.ISRR)*pow((pow(rT,(model_.XISR))*exp((((-(model_.DEAR))*(1.0-rT))/Vtv))),(1.0/(model_.NR))));
2476  ISPatT = ((model_.ISP)*pow((pow(rT,(model_.XIS))*exp((((-(model_.EAP))*(1.0-rT))/Vtv))),(1.0/(model_.NFP))));
2477  IBEIatT = ((model_.IBEI)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIE))*(1.0-rT))/Vtv))),(1.0/(model_.NEI))));
2478  IBENatT = ((model_.IBEN)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANE))*(1.0-rT))/Vtv))),(1.0/(model_.NEN))));
2479  IBCIatT = ((model_.IBCI)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIC))*(1.0-rT))/Vtv))),(1.0/(model_.NCI))));
2480  IBCNatT = ((model_.IBCN)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANC))*(1.0-rT))/Vtv))),(1.0/(model_.NCN))));
2481  IBEIPatT = ((model_.IBEIP)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIC))*(1.0-rT))/Vtv))),(1.0/(model_.NCI))));
2482  IBENPatT = ((model_.IBENP)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANC))*(1.0-rT))/Vtv))),(1.0/(model_.NCN))));
2483  IBCIPatT = ((model_.IBCIP)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIS))*(1.0-rT))/Vtv))),(1.0/(model_.NCIP))));
2484  IBCNPatT = ((model_.IBCNP)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANS))*(1.0-rT))/Vtv))),(1.0/(model_.NCNP))));
2485  NFatT = ((model_.NF)*(1.0+(dT*(model_.TNF))));
2486  NRatT = ((model_.NR)*(1.0+(dT*(model_.TNF))));
2487  AVC2atT = ((model_.AVC2)*(1.0+(dT*(model_.TAVC))));
2488  VBBEatT = ((model_.VBBE)*(1.0+(dT*((model_.TVBBE1)+(dT*(model_.TVBBE2))))));
2489  NBBEatT = ((model_.NBBE)*(1.0+(dT*(model_.TNBBE))));
2490  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PE))*rT)/Vtv))-exp(((((-0.5)*(model_.PE))*rT)/Vtv)))));
2491  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIE)*(rT-1.0)));
2492  PEatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2493  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PC))*rT)/Vtv))-exp(((((-0.5)*(model_.PC))*rT)/Vtv)))));
2494  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIC)*(rT-1.0)));
2495  PCatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2496  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PS))*rT)/Vtv))-exp(((((-0.5)*(model_.PS))*rT)/Vtv)))));
2497  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIS)*(rT-1.0)));
2498  PSatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2499  CJEatT = ((model_.CJE)*pow(((model_.PE)/PEatT),(model_.ME)));
2500  CJCatT = ((model_.CJC)*pow(((model_.PC)/PCatT),(model_.MC)));
2501  CJEPatT = ((model_.CJEP)*pow(((model_.PC)/PCatT),(model_.MC)));
2502  CJCPatT = ((model_.CJCP)*pow(((model_.PS)/PSatT),(model_.MS)));
2503  GAMMatT = (((model_.GAMM)*pow(rT,(model_.XIS)))*exp((((-(model_.EA))*(1.0-rT))/Vtv)));
2504  VOatT = ((model_.VO)*pow(rT,(model_.XVO)));
2505  EBBEatT = exp(((-VBBEatT)/(NBBEatT*Vtv)));
2506  IVEF = (((model_.VEF)>0.0)?(1.0/(model_.VEF)):0.0);
2507  IVER = (((model_.VER)>0.0)?(1.0/(model_.VER)):0.0);
2508  IIKF = 0.0;
2509  if (((model_.IKF)>0.0))
2510  {
2511  IIKF = (1.0/IKFatT);
2512  }
2513  IIKR = (((model_.IKR)>0.0)?(1.0/(model_.IKR)):0.0);
2514  IIKP = (((model_.IKP)>0.0)?(1.0/(model_.IKP)):0.0);
2515  IVO = 0.0;
2516  if (((model_.VO)>0.0))
2517  {
2518  IVO = (1.0/VOatT);
2519  }
2520  IHRCF = (((model_.HRCF)>0.0)?(1.0/(model_.HRCF)):0.0);
2521  IVTF = (((model_.VTF)>0.0)?(1.0/(model_.VTF)):0.0);
2522  IITF = (((model_.ITF)>0.0)?(1.0/(model_.ITF)):0.0);
2523  slTF = (((model_.ITF)>0.0)?0.0:1.0);
2524  dv0 = ((-PEatT)*(model_.FC));
2525  if (((model_.AJE)<=0.0))
2526  {
2527  dvh_vbei = (Vbei+dv0);
2528  if ((dvh_vbei>0.0))
2529  {
2530  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.ME)));
2531  qlo_vbei = ((PEatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.ME)));
2532  qhi_vbei = ((dvh_vbei*((1.0-(model_.FC))+(((0.5*(model_.ME))*dvh_vbei)/PEatT)))*pwq);
2533  }
2534  else
2535  {
2536  qlo_vbei = ((PEatT*(1.0-pow((1.0-(Vbei/PEatT)),(1.0-(model_.ME)))))/(1.0-(model_.ME)));
2537  qhi_vbei = 0.0;
2538  }
2539  qdbe = (qlo_vbei+qhi_vbei);
2540  }
2541  else
2542  {
2543  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJE))*(model_.AJE))));
2544  vl0 = ((-0.5)*(dv0+mv0));
2545  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2546  dv_vbei = (Vbei+dv0);
2547  mv_vbei = sqrt(((dv_vbei*dv_vbei)+((4*(model_.AJE))*(model_.AJE))));
2548  vl_vbei = ((0.5*(dv_vbei-mv_vbei))-dv0);
2549  qlo_vbei = (((-PEatT)*pow((1.0-(vl_vbei/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2550  qdbe = ((qlo_vbei+(pow((1.0-(model_.FC)),(-(model_.ME)))*((Vbei-vl_vbei)+vl0)))-q0);
2551  }
2552  dv0 = ((-PEatT)*(model_.FC));
2553  if (((model_.AJE)<=0.0))
2554  {
2555  dvh_vbex = (Vbex+dv0);
2556  if ((dvh_vbex>0.0))
2557  {
2558  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.ME)));
2559  qlo_vbex = ((PEatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.ME)));
2560  qhi_vbex = ((dvh_vbex*((1.0-(model_.FC))+(((0.5*(model_.ME))*dvh_vbex)/PEatT)))*pwq);
2561  }
2562  else
2563  {
2564  qlo_vbex = ((PEatT*(1.0-pow((1.0-(Vbex/PEatT)),(1.0-(model_.ME)))))/(1.0-(model_.ME)));
2565  qhi_vbex = 0.0;
2566  }
2567  qdbex = (qlo_vbex+qhi_vbex);
2568  }
2569  else
2570  {
2571  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJE))*(model_.AJE))));
2572  vl0 = ((-0.5)*(dv0+mv0));
2573  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2574  dv_vbex = (Vbex+dv0);
2575  mv_vbex = sqrt(((dv_vbex*dv_vbex)+((4*(model_.AJE))*(model_.AJE))));
2576  vl_vbex = ((0.5*(dv_vbex-mv_vbex))-dv0);
2577  qlo_vbex = (((-PEatT)*pow((1.0-(vl_vbex/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2578  qdbex = ((qlo_vbex+(pow((1.0-(model_.FC)),(-(model_.ME)))*((Vbex-vl_vbex)+vl0)))-q0);
2579  }
2580  dv0 = ((-PCatT)*(model_.FC));
2581  if (((model_.AJC)<=0.0))
2582  {
2583  dvh_vbci = (Vbci+dv0);
2584  if ((dvh_vbci>0.0))
2585  {
2586  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.MC)));
2587  qlo_vbci = ((PCatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.MC)));
2588  qhi_vbci = ((dvh_vbci*((1.0-(model_.FC))+(((0.5*(model_.MC))*dvh_vbci)/PCatT)))*pwq);
2589  }
2590  else
2591  {
2592  if ((((model_.VRT)>0.0)&&(Vbci<(-(model_.VRT)))))
2593  {
2594  qlo_vbci = ((PCatT*(1.0-(pow((1.0+((model_.VRT)/PCatT)),(1.0-(model_.MC)))*(1.0-(((1.0-(model_.MC))*(Vbci+(model_.VRT)))/(PCatT+(model_.VRT)))))))/(1.0-(model_.MC)));
2595  }
2596  else
2597  {
2598  qlo_vbci = ((PCatT*(1.0-pow((1.0-(Vbci/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2599  }
2600  qhi_vbci = 0.0;
2601  }
2602  qdbc = (qlo_vbci+qhi_vbci);
2603  }
2604  else
2605  {
2606  if ((((model_.VRT)>0.0)&&((model_.ART)>0.0)))
2607  {
2608  vn0 = (((model_.VRT)+dv0)/((model_.VRT)-dv0));
2609  vnl0 = ((2.0*vn0)/(sqrt((((vn0-1.0)*(vn0-1))+((4*(model_.AJC))*(model_.AJC))))+sqrt((((vn0+1.0)*(vn0+1))+((4*(model_.ART))*(model_.ART))))));
2610  vl0 = (0.5*(((vnl0*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2611  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2612  vn_vbci = ((((2*Vbci)+(model_.VRT))+dv0)/((model_.VRT)-dv0));
2613  vnl_vbci = ((2.0*vn_vbci)/(sqrt((((vn_vbci-1.0)*(vn_vbci-1))+((4*(model_.AJC))*(model_.AJC))))+sqrt((((vn_vbci+1.0)*(vn_vbci+1))+((4*(model_.ART))*(model_.ART))))));
2614  vl_vbci = (0.5*(((vnl_vbci*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2615  qlo_vbci = ((PCatT*(1.0-pow((1.0-(vl_vbci/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2616  sel_vbci = (0.5*(vnl_vbci+1.0));
2617  crt = pow((1.0+((model_.VRT)/PCatT)),(-(model_.MC)));
2618  cmx = pow((1.0+(dv0/PCatT)),(-(model_.MC)));
2619  cl_vbci = (((1.0-sel_vbci)*crt)+(sel_vbci*cmx));
2620  ql_vbci = (((Vbci-vl_vbci)+vl0)*cl_vbci);
2621  qdbc = ((ql_vbci+qlo_vbci)-qlo0);
2622  }
2623  else
2624  {
2625  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJC))*(model_.AJC))));
2626  vl0 = ((-0.5)*(dv0+mv0));
2627  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2628  dv_vbci = (Vbci+dv0);
2629  mv_vbci = sqrt(((dv_vbci*dv_vbci)+((4*(model_.AJC))*(model_.AJC))));
2630  vl_vbci = ((0.5*(dv_vbci-mv_vbci))-dv0);
2631  qlo_vbci = (((-PCatT)*pow((1.0-(vl_vbci/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2632  qdbc = ((qlo_vbci+(pow((1.0-(model_.FC)),(-(model_.MC)))*((Vbci-vl_vbci)+vl0)))-q0);
2633  }
2634  }
2635  dv0 = ((-PCatT)*(model_.FC));
2636  if (((model_.AJC)<=0.0))
2637  {
2638  dvh_vbep = (Vbep+dv0);
2639  if ((dvh_vbep>0.0))
2640  {
2641  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.MC)));
2642  qlo_vbep = ((PCatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.MC)));
2643  qhi_vbep = ((dvh_vbep*((1.0-(model_.FC))+(((0.5*(model_.MC))*dvh_vbep)/PCatT)))*pwq);
2644  }
2645  else
2646  {
2647  if ((((model_.VRT)>0.0)&&(Vbep<(-(model_.VRT)))))
2648  {
2649  qlo_vbep = ((PCatT*(1.0-(pow((1.0+((model_.VRT)/PCatT)),(1.0-(model_.MC)))*(1.0-(((1.0-(model_.MC))*(Vbep+(model_.VRT)))/(PCatT+(model_.VRT)))))))/(1.0-(model_.MC)));
2650  }
2651  else
2652  {
2653  qlo_vbep = ((PCatT*(1.0-pow((1.0-(Vbep/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2654  }
2655  qhi_vbep = 0.0;
2656  }
2657  qdbep = (qlo_vbep+qhi_vbep);
2658  }
2659  else
2660  {
2661  if ((((model_.VRT)>0.0)&&((model_.ART)>0.0)))
2662  {
2663  vn0 = (((model_.VRT)+dv0)/((model_.VRT)-dv0));
2664  vnl0 = ((2.0*vn0)/(sqrt((((vn0-1.0)*(vn0-1))+((4*(model_.AJC))*(model_.AJC))))+sqrt((((vn0+1.0)*(vn0+1))+((4*(model_.ART))*(model_.ART))))));
2665  vl0 = (0.5*(((vnl0*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2666  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2667  vn_vbep = ((((2*Vbep)+(model_.VRT))+dv0)/((model_.VRT)-dv0));
2668  vnl_vbep = ((2.0*vn_vbep)/(sqrt((((vn_vbep-1.0)*(vn_vbep-1))+((4*(model_.AJC))*(model_.AJC))))+sqrt((((vn_vbep+1.0)*(vn_vbep+1))+((4*(model_.ART))*(model_.ART))))));
2669  vl_vbep = (0.5*(((vnl_vbep*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2670  qlo_vbep = ((PCatT*(1.0-pow((1.0-(vl_vbep/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2671  sel_vbep = (0.5*(vnl_vbep+1.0));
2672  crt = pow((1.0+((model_.VRT)/PCatT)),(-(model_.MC)));
2673  cmx = pow((1.0+(dv0/PCatT)),(-(model_.MC)));
2674  cl_vbep = (((1.0-sel_vbep)*crt)+(sel_vbep*cmx));
2675  ql_vbep = (((Vbep-vl_vbep)+vl0)*cl_vbep);
2676  qdbep = ((ql_vbep+qlo_vbep)-qlo0);
2677  }
2678  else
2679  {
2680  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJC))*(model_.AJC))));
2681  vl0 = ((-0.5)*(dv0+mv0));
2682  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2683  dv_vbep = (Vbep+dv0);
2684  mv_vbep = sqrt(((dv_vbep*dv_vbep)+((4*(model_.AJC))*(model_.AJC))));
2685  vl_vbep = ((0.5*(dv_vbep-mv_vbep))-dv0);
2686  qlo_vbep = (((-PCatT)*pow((1.0-(vl_vbep/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2687  qdbep = ((qlo_vbep+(pow((1.0-(model_.FC)),(-(model_.MC)))*((Vbep-vl_vbep)+vl0)))-q0);
2688  }
2689  }
2690  argi_vbei = (Vbei/(NFatT*Vtv));
2691  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2692  Ifi = (ISatT*(expi_vbei-1.0));
2693  argi_vbci = (Vbci/(NRatT*Vtv));
2694  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2695  Iri = ((ISatT*ISRRatT)*(expi_vbci-1.0));
2696  q1z = ((1.0+(qdbe*IVER))+(qdbc*IVEF));
2697  q1 = ((0.5*((sqrt((((q1z-1.0e-4)*(q1z-1.0e-4))+1.0e-8))+q1z)-1.0e-4))+1.0e-4);
2698  q2 = ((Ifi*IIKF)+(Iri*IIKR));
2699  if ((q2>0))
2700  {
2701  if (((model_.QBM)<0.5))
2702  {
2703  qb = (0.5*(q1+pow((pow(q1,(1.0/(model_.NKF)))+(4.0*q2)),(model_.NKF))));
2704  }
2705  else
2706  {
2707  qb = ((0.5*q1)*(1.0+pow((1.0+(4.0*q2)),(model_.NKF))));
2708  }
2709  }
2710  else
2711  {
2712  qb = q1;
2713  }
2714  Itzr = (Iri/qb);
2715  Itzf = (Ifi/qb);
2716  if (((model_.ISP)>0.0))
2717  {
2718  argi_vbep = (Vbep/((model_.NFP)*Vtv));
2719  expi_vbep = limexp<AdmsFadType>(argi_vbep);
2720  argx_vbci = (Vbci/((model_.NFP)*Vtv));
2721  expx_vbci = limexp<AdmsFadType>(argx_vbci);
2722  Ifp = (ISPatT*((((model_.WSP)*expi_vbep)+((1.0-(model_.WSP))*expx_vbci))-1.0));
2723  q2p = (Ifp*IIKP);
2724  qbp = (0.5*(1.0+sqrt((1.0+(4.0*q2p)))));
2725  }
2726  else
2727  {
2728  Ifp = 0.0;
2729  qbp = 1.0;
2730  }
2731  if (((model_.WBE)==1.0))
2732  {
2733  argi_vbei = (Vbei/((model_.NEI)*Vtv));
2734  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2735  argn_vbei = (Vbei/((model_.NEN)*Vtv));
2736  expn_vbei = limexp<AdmsFadType>(argn_vbei);
2737  if (((model_.VBBE)>0.0))
2738  {
2739  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
2740  expx_vbei = limexp<AdmsFadType>(argx_vbei);
2741  Ibe = (((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-((model_.IBBE)*(expx_vbei-EBBEatT)));
2742  }
2743  else
2744  {
2745  Ibe = ((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)));
2746  }
2747  Ibex = 0.0;
2748  }
2749  else
2750  {
2751  if (((model_.WBE)==0.0))
2752  {
2753  Ibe = 0.0;
2754  argi_vbex = (Vbex/((model_.NEI)*Vtv));
2755  expi_vbex = limexp<AdmsFadType>(argi_vbex);
2756  argn_vbex = (Vbex/((model_.NEN)*Vtv));
2757  expn_vbex = limexp<AdmsFadType>(argn_vbex);
2758  if (((model_.VBBE)>0.0))
2759  {
2760  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
2761  expx_vbex = limexp<AdmsFadType>(argx_vbex);
2762  Ibex = (((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-((model_.IBBE)*(expx_vbex-EBBEatT)));
2763  }
2764  else
2765  {
2766  Ibex = ((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)));
2767  }
2768  }
2769  else
2770  {
2771  argi_vbei = (Vbei/((model_.NEI)*Vtv));
2772  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2773  argn_vbei = (Vbei/((model_.NEN)*Vtv));
2774  expn_vbei = limexp<AdmsFadType>(argn_vbei);
2775  if (((model_.VBBE)>0.0))
2776  {
2777  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
2778  expx_vbei = limexp<AdmsFadType>(argx_vbei);
2779  Ibe = ((model_.WBE)*(((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-((model_.IBBE)*(expx_vbei-EBBEatT))));
2780  }
2781  else
2782  {
2783  Ibe = ((model_.WBE)*((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0))));
2784  }
2785  argi_vbex = (Vbex/((model_.NEI)*Vtv));
2786  expi_vbex = limexp<AdmsFadType>(argi_vbex);
2787  argn_vbex = (Vbex/((model_.NEN)*Vtv));
2788  expn_vbex = limexp<AdmsFadType>(argn_vbex);
2789  if (((model_.VBBE)>0.0))
2790  {
2791  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
2792  expx_vbex = limexp<AdmsFadType>(argx_vbex);
2793  Ibex = ((1.0-(model_.WBE))*(((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-((model_.IBBE)*(expx_vbex-EBBEatT))));
2794  }
2795  else
2796  {
2797  Ibex = ((1.0-(model_.WBE))*((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0))));
2798  }
2799  }
2800  }
2801  argi_vbci = (Vbci/((model_.NCI)*Vtv));
2802  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2803  argn_vbci = (Vbci/((model_.NCN)*Vtv));
2804  expn_vbci = limexp<AdmsFadType>(argn_vbci);
2805  Ibcj = ((IBCIatT*(expi_vbci-1.0))+(IBCNatT*(expn_vbci-1.0)));
2806  if ((((model_.IBEIP)>0.0)||((model_.IBENP)>0.0)))
2807  {
2808  argi_vbep = (Vbep/((model_.NCI)*Vtv));
2809  expi_vbep = limexp<AdmsFadType>(argi_vbep);
2810  argn_vbep = (Vbep/((model_.NCN)*Vtv));
2811  expn_vbep = limexp<AdmsFadType>(argn_vbep);
2812  Ibep = ((IBEIPatT*(expi_vbep-1.0))+(IBENPatT*(expn_vbep-1.0)));
2813  }
2814  else
2815  {
2816  Ibep = 0.0;
2817  }
2818  if (((model_.AVC1)>0.0))
2819  {
2820  vl_vbci = (0.5*(sqrt((((PCatT-Vbci)*(PCatT-Vbci))+0.01))+(PCatT-Vbci)));
2821  avalf_exparg = ((-AVC2atT)*pow(vl_vbci,((model_.MC)-1.0)));
2822  avalf = (((model_.AVC1)*vl_vbci)*limexp<AdmsFadType>(avalf_exparg));
2823  Igc = (((Itzf-Itzr)-Ibcj)*avalf);
2824  }
2825  else
2826  {
2827  Igc = 0.0;
2828  }
2829  Ibc = (Ibcj-Igc);
2830  if (((model_.RCX)>0.0))
2831  {
2832  Ircx = (Vrcx/RCXatT);
2833  }
2834  else
2835  {
2836  Ircx = 0.0;
2837  }
2838  argi_vbci = (Vbci/Vtv);
2839  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2840  argx_vbcx = (Vbcx/Vtv);
2841  expx_vbcx = limexp<AdmsFadType>(argx_vbcx);
2842  Kbci = sqrt((1.0+(GAMMatT*expi_vbci)));
2843  Kbcx = sqrt((1.0+(GAMMatT*expx_vbcx)));
2844  if (((model_.RCI)>0.0))
2845  {
2846  rKp1 = ((Kbci+1.0)/(Kbcx+1.0));
2847  Iohm = ((Vrci+(Vtv*((Kbci-Kbcx)-log(rKp1))))/RCIatT);
2848  derf = (((IVO*RCIatT)*Iohm)/(1.0+(((0.5*IVO)*IHRCF)*sqrt(((Vrci*Vrci)+0.01)))));
2849  Irci = (Iohm/sqrt((1+(derf*derf))));
2850  }
2851  else
2852  {
2853  Irci = 0.0;
2854  }
2855  if (((model_.RBX)>0.0))
2856  {
2857  Irbx = (Vrbx/RBXatT);
2858  }
2859  else
2860  {
2861  Irbx = 0.0;
2862  }
2863  if (((model_.RBI)>0.0))
2864  {
2865  Irbi = ((Vrbi*qb)/RBIatT);
2866  }
2867  else
2868  {
2869  Irbi = 0.0;
2870  }
2871  if (((model_.RE)>0.0))
2872  {
2873  Ire = (Vre/REatT);
2874  }
2875  else
2876  {
2877  Ire = 0.0;
2878  }
2879  if (((model_.RBP)>0.0))
2880  {
2881  Irbp = ((Vrbp*qbp)/RBPatT);
2882  }
2883  else
2884  {
2885  Irbp = 0.0;
2886  }
2887  sgIf = ((Ifi>0.0)?1.0:0.0);
2888  rIf = ((Ifi*sgIf)*IITF);
2889  mIf = (rIf/(rIf+1.0));
2890  tff_exparg = ((Vbci*IVTF)/1.44);
2891  tff = (((model_.TF)*(1.0+((model_.QTF)*q1)))*(1.0+((((model_.XTF)*limexp<AdmsFadType>(tff_exparg))*(slTF+(mIf*mIf)))*sgIf)));
2892  Qbe = (((CJEatT*qdbe)*(model_.WBE))+((tff*Ifi)/qb));
2893  Qbex = ((CJEatT*qdbex)*(1.0-(model_.WBE)));
2894  Qbc = (((CJCatT*qdbc)+((model_.TR)*Iri))+((model_.QCO)*Kbci));
2895  Qbcx = ((model_.QCO)*Kbcx);
2896  Qbep = ((CJEPatT*qdbep)+((model_.TR)*Ifp));
2897  Qbeo = (Vbe*(model_.CBEO));
2898  Qbco = (Vbc*(model_.CBCO));
2899  Ith = (-(((((((((((Ibe*Vbei)+(Ibc*Vbci))+((Itzf-Itzr)*Vcei))+(Ibex*Vbex))+(Ibep*Vbep))+(Ircx*Vrcx))+(Irci*Vrci))+(Irbx*Vrbx))+(Irbi*Vrbi))+(Ire*Vre))+(Irbp*Vrbp)));
2900  if (((model_.RTH)>0.0))
2901  {
2902  Irth = (Vrth/(model_.RTH));
2903  }
2904  else
2905  {
2906  Irth = 0.0;
2907  }
2908  Qcth = (Vrth*(model_.CTH));
2909  // I(bi,ei) <+ (((M*dtype)*(Ibe+($simparam("gmin")*Vbei))))
2910  {
2911  AdmsFadType contribTemp;
2912  contribTemp= ((M*(model_.dtype))*(Ibe+(getDeviceOptions().gmin*Vbei)));
2913  staticContributions[admsNodeID_bi] += contribTemp;
2914  staticContributions[admsNodeID_ei] -= contribTemp;
2915 
2918  }
2919  // I(bx,ei) <+ (((M*dtype)*(Ibex+($simparam("gmin")*Vbex))))
2920  {
2921  AdmsFadType contribTemp;
2922  contribTemp= ((M*(model_.dtype))*(Ibex+(getDeviceOptions().gmin*Vbex)));
2923  staticContributions[admsNodeID_bx] += contribTemp;
2924  staticContributions[admsNodeID_ei] -= contribTemp;
2925 
2928  }
2929  // I(ci,ei) <+ (((M*dtype)*Itzf))
2930  {
2931  AdmsFadType contribTemp;
2932  contribTemp= ((M*(model_.dtype))*Itzf);
2933  staticContributions[admsNodeID_ci] += contribTemp;
2934  staticContributions[admsNodeID_ei] -= contribTemp;
2935 
2938  }
2939  // I(ei,ci) <+ (((M*dtype)*Itzr))
2940  {
2941  AdmsFadType contribTemp;
2942  contribTemp= ((M*(model_.dtype))*Itzr);
2943  staticContributions[admsNodeID_ei] += contribTemp;
2944  staticContributions[admsNodeID_ci] -= contribTemp;
2945 
2948  }
2949  // I(bi,ci) <+ (((M*dtype)*(Ibc+($simparam("gmin")*Vbci))))
2950  {
2951  AdmsFadType contribTemp;
2952  contribTemp= ((M*(model_.dtype))*(Ibc+(getDeviceOptions().gmin*Vbci)));
2953  staticContributions[admsNodeID_bi] += contribTemp;
2954  staticContributions[admsNodeID_ci] -= contribTemp;
2955 
2958  }
2959  // I(bx,bp) <+ (((M*dtype)*(Ibep+($simparam("gmin")*Vbep))))
2960  {
2961  AdmsFadType contribTemp;
2962  contribTemp= ((M*(model_.dtype))*(Ibep+(getDeviceOptions().gmin*Vbep)));
2963  staticContributions[admsNodeID_bx] += contribTemp;
2964  staticContributions[admsNodeID_bp] -= contribTemp;
2965 
2968  }
2969  if (((model_.RCX)>0))
2970  {
2971  // I(c,cx) <+ (((M*dtype)*Ircx))
2972  {
2973  AdmsFadType contribTemp;
2974  contribTemp= ((M*(model_.dtype))*Ircx);
2975  staticContributions[admsNodeID_c] += contribTemp;
2976  staticContributions[admsNodeID_cx] -= contribTemp;
2977 
2980  }
2981  }
2982  else
2983  {
2984  // V(c,cx) <+ (0.0)
2985  // do nothing at all
2986  }
2987  // I(cx,ci) <+ (((M*dtype)*(Irci+($simparam("gmin")*Vrci))))
2988  {
2989  AdmsFadType contribTemp;
2990  contribTemp= ((M*(model_.dtype))*(Irci+(getDeviceOptions().gmin*Vrci)));
2991  staticContributions[admsNodeID_cx] += contribTemp;
2992  staticContributions[admsNodeID_ci] -= contribTemp;
2993 
2996  }
2997  if (((model_.RBX)>0))
2998  {
2999  // I(b,bx) <+ (((M*dtype)*Irbx))
3000  {
3001  AdmsFadType contribTemp;
3002  contribTemp= ((M*(model_.dtype))*Irbx);
3003  staticContributions[admsNodeID_b] += contribTemp;
3004  staticContributions[admsNodeID_bx] -= contribTemp;
3005 
3008  }
3009  }
3010  else
3011  {
3012  // V(b,bx) <+ (0.0)
3013  // do nothing at all
3014  }
3015  // I(bx,bi) <+ (((M*dtype)*Irbi))
3016  {
3017  AdmsFadType contribTemp;
3018  contribTemp= ((M*(model_.dtype))*Irbi);
3019  staticContributions[admsNodeID_bx] += contribTemp;
3020  staticContributions[admsNodeID_bi] -= contribTemp;
3021 
3024  }
3025  if (((model_.RE)>0))
3026  {
3027  // I(e,ei) <+ (((M*dtype)*Ire))
3028  {
3029  AdmsFadType contribTemp;
3030  contribTemp= ((M*(model_.dtype))*Ire);
3031  staticContributions[admsNodeID_e] += contribTemp;
3032  staticContributions[admsNodeID_ei] -= contribTemp;
3033 
3036  }
3037  }
3038  else
3039  {
3040  // V(e,ei) <+ (0.0)
3041  // do nothing at all
3042  }
3043  // I(bp,cx) <+ (((M*dtype)*Irbp))
3044  {
3045  AdmsFadType contribTemp;
3046  contribTemp= ((M*(model_.dtype))*Irbp);
3047  staticContributions[admsNodeID_bp] += contribTemp;
3048  staticContributions[admsNodeID_cx] -= contribTemp;
3049 
3052  }
3053  // I(bi,ei) <+ (((M*dtype)*ddt(Qbe)))
3054  {
3055  AdmsFadType contribTemp;
3056  contribTemp= ((M*(model_.dtype))*(Qbe));
3057  dynamicContributions[admsNodeID_bi] += contribTemp;
3058  dynamicContributions[admsNodeID_ei] -= contribTemp;
3059 
3062  }
3063  // I(bx,ei) <+ (((M*dtype)*ddt(Qbex)))
3064  {
3065  AdmsFadType contribTemp;
3066  contribTemp= ((M*(model_.dtype))*(Qbex));
3067  dynamicContributions[admsNodeID_bx] += contribTemp;
3068  dynamicContributions[admsNodeID_ei] -= contribTemp;
3069 
3072  }
3073  // I(bi,ci) <+ (((M*dtype)*ddt(Qbc)))
3074  {
3075  AdmsFadType contribTemp;
3076  contribTemp= ((M*(model_.dtype))*(Qbc));
3077  dynamicContributions[admsNodeID_bi] += contribTemp;
3078  dynamicContributions[admsNodeID_ci] -= contribTemp;
3079 
3082  }
3083  // I(bi,cx) <+ (((M*dtype)*ddt(Qbcx)))
3084  {
3085  AdmsFadType contribTemp;
3086  contribTemp= ((M*(model_.dtype))*(Qbcx));
3087  dynamicContributions[admsNodeID_bi] += contribTemp;
3088  dynamicContributions[admsNodeID_cx] -= contribTemp;
3089 
3092  }
3093  // I(bx,bp) <+ (((M*dtype)*ddt(Qbep)))
3094  {
3095  AdmsFadType contribTemp;
3096  contribTemp= ((M*(model_.dtype))*(Qbep));
3097  dynamicContributions[admsNodeID_bx] += contribTemp;
3098  dynamicContributions[admsNodeID_bp] -= contribTemp;
3099 
3102  }
3103  // I(b,e) <+ (((M*dtype)*ddt(Qbeo)))
3104  {
3105  AdmsFadType contribTemp;
3106  contribTemp= ((M*(model_.dtype))*(Qbeo));
3107  dynamicContributions[admsNodeID_b] += contribTemp;
3108  dynamicContributions[admsNodeID_e] -= contribTemp;
3109 
3112  }
3113  // I(b,c) <+ (((M*dtype)*ddt(Qbco)))
3114  dynamicContributions[admsNodeID_b] += ((M*(model_.dtype))*(Qbco));
3115  dynamicContributions[admsNodeID_c] -= ((M*(model_.dtype))*(Qbco));
3116  // I(dt,GND) <+ (Irth)
3117  {
3118  AdmsFadType contribTemp;
3119  contribTemp= Irth;
3120  staticContributions[admsNodeID_dt] += contribTemp;
3121 
3123  }
3124  // I(dt,GND) <+ (Ith)
3125  {
3126  AdmsFadType contribTemp;
3127  contribTemp= Ith;
3128  staticContributions[admsNodeID_dt] += contribTemp;
3129 
3131  }
3132  // I(dt,GND) <+ (ddt(Qcth))
3133  {
3134  AdmsFadType contribTemp;
3135  contribTemp= (Qcth);
3136  dynamicContributions[admsNodeID_dt] += contribTemp;
3137 
3139  }
3140 
3141 
3142  // -- endcode converted from analog/code block
3143  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3144  {
3145  Xyce::dout() << " probeVars[admsProbeID_V_ci_ei] = "
3146  <<probeVars[admsProbeID_V_ci_ei].val() << std::endl;
3147  Xyce::dout() << " probeVars[admsProbeID_V_b_c] = "
3148  <<probeVars[admsProbeID_V_b_c].val() << std::endl;
3149  Xyce::dout() << " probeVars[admsProbeID_V_bp_cx] = "
3150  <<probeVars[admsProbeID_V_bp_cx].val() << std::endl;
3151  Xyce::dout() << " probeVars[admsProbeID_V_e_ei] = "
3152  <<probeVars[admsProbeID_V_e_ei].val() << std::endl;
3153  Xyce::dout() << " probeVars[admsProbeID_V_b_bx] = "
3154  <<probeVars[admsProbeID_V_b_bx].val() << std::endl;
3155  Xyce::dout() << " probeVars[admsProbeID_V_bx_bi] = "
3156  <<probeVars[admsProbeID_V_bx_bi].val() << std::endl;
3157  Xyce::dout() << " probeVars[admsProbeID_V_cx_ci] = "
3158  <<probeVars[admsProbeID_V_cx_ci].val() << std::endl;
3159  Xyce::dout() << " probeVars[admsProbeID_V_c_cx] = "
3160  <<probeVars[admsProbeID_V_c_cx].val() << std::endl;
3161  Xyce::dout() << " probeVars[admsProbeID_V_b_e] = "
3162  <<probeVars[admsProbeID_V_b_e].val() << std::endl;
3163  Xyce::dout() << " probeVars[admsProbeID_V_dt_GND] = "
3164  <<probeVars[admsProbeID_V_dt_GND].val() << std::endl;
3165  Xyce::dout() << " probeVars[admsProbeID_V_bx_bp] = "
3166  <<probeVars[admsProbeID_V_bx_bp].val() << std::endl;
3167  Xyce::dout() << " probeVars[admsProbeID_V_bi_cx] = "
3168  <<probeVars[admsProbeID_V_bi_cx].val() << std::endl;
3169  Xyce::dout() << " probeVars[admsProbeID_V_bx_ei] = "
3170  <<probeVars[admsProbeID_V_bx_ei].val() << std::endl;
3171  Xyce::dout() << " probeVars[admsProbeID_V_bi_ci] = "
3172  <<probeVars[admsProbeID_V_bi_ci].val() << std::endl;
3173  Xyce::dout() << " probeVars[admsProbeID_V_bi_ei] = "
3174  <<probeVars[admsProbeID_V_bi_ei].val() << std::endl;
3175  Xyce::dout() << " staticContributions[admsNodeID_c] = "
3176  <<staticContributions[admsNodeID_c].val() << std::endl;
3177  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
3178  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_c) << std::endl;
3179  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) << std::endl;
3180  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) << std::endl;
3181  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) << std::endl;
3182  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) << std::endl;
3183  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
3184  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) << std::endl;
3185  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_e) << std::endl;
3186  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) << std::endl;
3187  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) << std::endl;
3188  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) << std::endl;
3189  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) << std::endl;
3190  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) << std::endl;
3191  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) << std::endl;
3192  Xyce::dout() << " dynamicContributions[admsNodeID_c] = "
3193  <<dynamicContributions[admsNodeID_c].val() << std::endl;
3194  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
3195  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c) << std::endl;
3196  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) << std::endl;
3197  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) << std::endl;
3198  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) << std::endl;
3199  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) << std::endl;
3200  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
3201  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) << std::endl;
3202  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_e) << std::endl;
3203  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) << std::endl;
3204  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) << std::endl;
3205  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) << std::endl;
3206  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) << std::endl;
3207  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) << std::endl;
3208  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) << std::endl;
3209  Xyce::dout() << " Jdxp_static[admsNodeID_c] = "
3210  <<Jdxp_static[admsNodeID_c] << std::endl;
3211  Xyce::dout() << " Jdxp_dynamic[admsNodeID_c] = "
3212  <<Jdxp_dynamic[admsNodeID_c] << std::endl;
3213  Xyce::dout() << " staticContributions[admsNodeID_b] = "
3214  <<staticContributions[admsNodeID_b].val() << std::endl;
3215  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
3216  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_c) << std::endl;
3217  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) << std::endl;
3218  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) << std::endl;
3219  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) << std::endl;
3220  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) << std::endl;
3221  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
3222  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) << std::endl;
3223  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_e) << std::endl;
3224  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) << std::endl;
3225  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) << std::endl;
3226  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) << std::endl;
3227  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) << std::endl;
3228  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) << std::endl;
3229  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) << std::endl;
3230  Xyce::dout() << " dynamicContributions[admsNodeID_b] = "
3231  <<dynamicContributions[admsNodeID_b].val() << std::endl;
3232  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
3233  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c) << std::endl;
3234  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) << std::endl;
3235  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) << std::endl;
3236  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) << std::endl;
3237  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) << std::endl;
3238  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
3239  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) << std::endl;
3240  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e) << std::endl;
3241  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) << std::endl;
3242  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) << std::endl;
3243  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) << std::endl;
3244  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) << std::endl;
3245  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) << std::endl;
3246  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) << std::endl;
3247  Xyce::dout() << " Jdxp_static[admsNodeID_b] = "
3248  <<Jdxp_static[admsNodeID_b] << std::endl;
3249  Xyce::dout() << " Jdxp_dynamic[admsNodeID_b] = "
3250  <<Jdxp_dynamic[admsNodeID_b] << std::endl;
3251  Xyce::dout() << " staticContributions[admsNodeID_e] = "
3252  <<staticContributions[admsNodeID_e].val() << std::endl;
3253  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
3254  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_c) << std::endl;
3255  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) << std::endl;
3256  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) << std::endl;
3257  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) << std::endl;
3258  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) << std::endl;
3259  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
3260  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) << std::endl;
3261  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_e) << std::endl;
3262  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) << std::endl;
3263  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) << std::endl;
3264  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) << std::endl;
3265  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) << std::endl;
3266  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) << std::endl;
3267  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) << std::endl;
3268  Xyce::dout() << " dynamicContributions[admsNodeID_e] = "
3269  <<dynamicContributions[admsNodeID_e].val() << std::endl;
3270  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
3271  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_c) << std::endl;
3272  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) << std::endl;
3273  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) << std::endl;
3274  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) << std::endl;
3275  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) << std::endl;
3276  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
3277  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) << std::endl;
3278  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e) << std::endl;
3279  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) << std::endl;
3280  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) << std::endl;
3281  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) << std::endl;
3282  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) << std::endl;
3283  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) << std::endl;
3284  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) << std::endl;
3285  Xyce::dout() << " Jdxp_static[admsNodeID_e] = "
3286  <<Jdxp_static[admsNodeID_e] << std::endl;
3287  Xyce::dout() << " Jdxp_dynamic[admsNodeID_e] = "
3288  <<Jdxp_dynamic[admsNodeID_e] << std::endl;
3289  Xyce::dout() << " staticContributions[admsNodeID_dt] = "
3290  <<staticContributions[admsNodeID_dt].val() << std::endl;
3291  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) << std::endl;
3292  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) << std::endl;
3293  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) << std::endl;
3294  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) << std::endl;
3295  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) << std::endl;
3296  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) << std::endl;
3297  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) << std::endl;
3298  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) << std::endl;
3299  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) << std::endl;
3300  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) << std::endl;
3301  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) << std::endl;
3302  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) << std::endl;
3303  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) << std::endl;
3304  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) << std::endl;
3305  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) << std::endl;
3306  Xyce::dout() << " dynamicContributions[admsNodeID_dt] = "
3307  <<dynamicContributions[admsNodeID_dt].val() << std::endl;
3308  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) << std::endl;
3309  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) << std::endl;
3310  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) << std::endl;
3311  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) << std::endl;
3312  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) << std::endl;
3313  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) << std::endl;
3314  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) << std::endl;
3315  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) << std::endl;
3316  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) << std::endl;
3317  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) << std::endl;
3318  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) << std::endl;
3319  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) << std::endl;
3320  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) << std::endl;
3321  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) << std::endl;
3322  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) << std::endl;
3323  Xyce::dout() << " Jdxp_static[admsNodeID_dt] = "
3324  <<Jdxp_static[admsNodeID_dt] << std::endl;
3325  Xyce::dout() << " Jdxp_dynamic[admsNodeID_dt] = "
3326  <<Jdxp_dynamic[admsNodeID_dt] << std::endl;
3327  Xyce::dout() << " staticContributions[admsNodeID_cx] = "
3328  <<staticContributions[admsNodeID_cx].val() << std::endl;
3329  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) << std::endl;
3330  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) << std::endl;
3331  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) << std::endl;
3332  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) << std::endl;
3333  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) << std::endl;
3334  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) << std::endl;
3335  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) << std::endl;
3336  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) << std::endl;
3337  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) << std::endl;
3338  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) << std::endl;
3339  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) << std::endl;
3340  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) << std::endl;
3341  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) << std::endl;
3342  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) << std::endl;
3343  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) << std::endl;
3344  Xyce::dout() << " dynamicContributions[admsNodeID_cx] = "
3345  <<dynamicContributions[admsNodeID_cx].val() << std::endl;
3346  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) << std::endl;
3347  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) << std::endl;
3348  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) << std::endl;
3349  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) << std::endl;
3350  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) << std::endl;
3351  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) << std::endl;
3352  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) << std::endl;
3353  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) << std::endl;
3354  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) << std::endl;
3355  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) << std::endl;
3356  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) << std::endl;
3357  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) << std::endl;
3358  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) << std::endl;
3359  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) << std::endl;
3360  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) << std::endl;
3361  Xyce::dout() << " Jdxp_static[admsNodeID_cx] = "
3362  <<Jdxp_static[admsNodeID_cx] << std::endl;
3363  Xyce::dout() << " Jdxp_dynamic[admsNodeID_cx] = "
3364  <<Jdxp_dynamic[admsNodeID_cx] << std::endl;
3365  Xyce::dout() << " staticContributions[admsNodeID_ci] = "
3366  <<staticContributions[admsNodeID_ci].val() << std::endl;
3367  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) << std::endl;
3368  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) << std::endl;
3369  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) << std::endl;
3370  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) << std::endl;
3371  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) << std::endl;
3372  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) << std::endl;
3373  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) << std::endl;
3374  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) << std::endl;
3375  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) << std::endl;
3376  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) << std::endl;
3377  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) << std::endl;
3378  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) << std::endl;
3379  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) << std::endl;
3380  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) << std::endl;
3381  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) << std::endl;
3382  Xyce::dout() << " dynamicContributions[admsNodeID_ci] = "
3383  <<dynamicContributions[admsNodeID_ci].val() << std::endl;
3384  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) << std::endl;
3385  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) << std::endl;
3386  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) << std::endl;
3387  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) << std::endl;
3388  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) << std::endl;
3389  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) << std::endl;
3390  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) << std::endl;
3391  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) << std::endl;
3392  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) << std::endl;
3393  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) << std::endl;
3394  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) << std::endl;
3395  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) << std::endl;
3396  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) << std::endl;
3397  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) << std::endl;
3398  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) << std::endl;
3399  Xyce::dout() << " Jdxp_static[admsNodeID_ci] = "
3400  <<Jdxp_static[admsNodeID_ci] << std::endl;
3401  Xyce::dout() << " Jdxp_dynamic[admsNodeID_ci] = "
3402  <<Jdxp_dynamic[admsNodeID_ci] << std::endl;
3403  Xyce::dout() << " staticContributions[admsNodeID_bx] = "
3404  <<staticContributions[admsNodeID_bx].val() << std::endl;
3405  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) << std::endl;
3406  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) << std::endl;
3407  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) << std::endl;
3408  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) << std::endl;
3409  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) << std::endl;
3410  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) << std::endl;
3411  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) << std::endl;
3412  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) << std::endl;
3413  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) << std::endl;
3414  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) << std::endl;
3415  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) << std::endl;
3416  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) << std::endl;
3417  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) << std::endl;
3418  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) << std::endl;
3419  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) << std::endl;
3420  Xyce::dout() << " dynamicContributions[admsNodeID_bx] = "
3421  <<dynamicContributions[admsNodeID_bx].val() << std::endl;
3422  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) << std::endl;
3423  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) << std::endl;
3424  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) << std::endl;
3425  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) << std::endl;
3426  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) << std::endl;
3427  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) << std::endl;
3428  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) << std::endl;
3429  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) << std::endl;
3430  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) << std::endl;
3431  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) << std::endl;
3432  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) << std::endl;
3433  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) << std::endl;
3434  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) << std::endl;
3435  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) << std::endl;
3436  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) << std::endl;
3437  Xyce::dout() << " Jdxp_static[admsNodeID_bx] = "
3438  <<Jdxp_static[admsNodeID_bx] << std::endl;
3439  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bx] = "
3440  <<Jdxp_dynamic[admsNodeID_bx] << std::endl;
3441  Xyce::dout() << " staticContributions[admsNodeID_bi] = "
3442  <<staticContributions[admsNodeID_bi].val() << std::endl;
3443  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) << std::endl;
3444  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) << std::endl;
3445  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) << std::endl;
3446  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) << std::endl;
3447  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) << std::endl;
3448  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) << std::endl;
3449  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) << std::endl;
3450  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) << std::endl;
3451  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) << std::endl;
3452  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) << std::endl;
3453  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) << std::endl;
3454  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) << std::endl;
3455  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) << std::endl;
3456  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) << std::endl;
3457  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) << std::endl;
3458  Xyce::dout() << " dynamicContributions[admsNodeID_bi] = "
3459  <<dynamicContributions[admsNodeID_bi].val() << std::endl;
3460  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) << std::endl;
3461  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) << std::endl;
3462  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) << std::endl;
3463  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) << std::endl;
3464  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) << std::endl;
3465  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) << std::endl;
3466  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) << std::endl;
3467  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) << std::endl;
3468  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) << std::endl;
3469  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) << std::endl;
3470  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) << std::endl;
3471  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) << std::endl;
3472  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) << std::endl;
3473  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) << std::endl;
3474  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) << std::endl;
3475  Xyce::dout() << " Jdxp_static[admsNodeID_bi] = "
3476  <<Jdxp_static[admsNodeID_bi] << std::endl;
3477  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bi] = "
3478  <<Jdxp_dynamic[admsNodeID_bi] << std::endl;
3479  Xyce::dout() << " staticContributions[admsNodeID_ei] = "
3480  <<staticContributions[admsNodeID_ei].val() << std::endl;
3481  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) << std::endl;
3482  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) << std::endl;
3483  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) << std::endl;
3484  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) << std::endl;
3485  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) << std::endl;
3486  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) << std::endl;
3487  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) << std::endl;
3488  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) << std::endl;
3489  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) << std::endl;
3490  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) << std::endl;
3491  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) << std::endl;
3492  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) << std::endl;
3493  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) << std::endl;
3494  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) << std::endl;
3495  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) << std::endl;
3496  Xyce::dout() << " dynamicContributions[admsNodeID_ei] = "
3497  <<dynamicContributions[admsNodeID_ei].val() << std::endl;
3498  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) << std::endl;
3499  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) << std::endl;
3500  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) << std::endl;
3501  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) << std::endl;
3502  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) << std::endl;
3503  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) << std::endl;
3504  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) << std::endl;
3505  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) << std::endl;
3506  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) << std::endl;
3507  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) << std::endl;
3508  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) << std::endl;
3509  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) << std::endl;
3510  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) << std::endl;
3511  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) << std::endl;
3512  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) << std::endl;
3513  Xyce::dout() << " Jdxp_static[admsNodeID_ei] = "
3514  <<Jdxp_static[admsNodeID_ei] << std::endl;
3515  Xyce::dout() << " Jdxp_dynamic[admsNodeID_ei] = "
3516  <<Jdxp_dynamic[admsNodeID_ei] << std::endl;
3517  Xyce::dout() << " staticContributions[admsNodeID_bp] = "
3518  <<staticContributions[admsNodeID_bp].val() << std::endl;
3519  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) << std::endl;
3520  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) << std::endl;
3521  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) << std::endl;
3522  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) << std::endl;
3523  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) << std::endl;
3524  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) << std::endl;
3525  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) << std::endl;
3526  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) << std::endl;
3527  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) << std::endl;
3528  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) << std::endl;
3529  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) << std::endl;
3530  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) << std::endl;
3531  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) << std::endl;
3532  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) << std::endl;
3533  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) << std::endl;
3534  Xyce::dout() << " dynamicContributions[admsNodeID_bp] = "
3535  <<dynamicContributions[admsNodeID_bp].val() << std::endl;
3536  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) << std::endl;
3537  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) << std::endl;
3538  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) << std::endl;
3539  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) << std::endl;
3540  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) << std::endl;
3541  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) << std::endl;
3542  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) << std::endl;
3543  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) << std::endl;
3544  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) << std::endl;
3545  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) << std::endl;
3546  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) << std::endl;
3547  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) << std::endl;
3548  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) << std::endl;
3549  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) << std::endl;
3550  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) << std::endl;
3551  Xyce::dout() << " Jdxp_static[admsNodeID_bp] = "
3552  <<Jdxp_static[admsNodeID_bp] << std::endl;
3553  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bp] = "
3554  <<Jdxp_dynamic[admsNodeID_bp] << std::endl;
3555 
3556  if (!origFlag)
3557  {
3558  Xyce::dout() << "This step was limited by this device." << std::endl;
3559  Xyce::dout() << " Vbei_limited = " << Vbei_limited << " _orig = " << Vbei_orig << " diff = " << Vbei_limited - Vbei_orig << std::endl;
3560  Xyce::dout() << " Vbci_limited = " << Vbci_limited << " _orig = " << Vbci_orig << " diff = " << Vbci_limited - Vbci_orig << std::endl;
3561  Xyce::dout() << " Vbex_limited = " << Vbex_limited << " _orig = " << Vbex_orig << " diff = " << Vbex_limited - Vbex_orig << std::endl;
3562  Xyce::dout() << " Vbcx_limited = " << Vbcx_limited << " _orig = " << Vbcx_orig << " diff = " << Vbcx_limited - Vbcx_orig << std::endl;
3563  Xyce::dout() << " Vbep_limited = " << Vbep_limited << " _orig = " << Vbep_orig << " diff = " << Vbep_limited - Vbep_orig << std::endl;
3564  Xyce::dout() << " Vrth_limited = " << Vrth_limited << " _orig = " << Vrth_orig << " diff = " << Vrth_limited - Vrth_orig << std::endl;
3565  }
3566  }
3567 
3568  return true;
3569 }
3570 
3571 //-----------------------------------------------------------------------------
3572 // Function : Instance::loadDAEdFdx
3573 // Purpose :
3574 // Special Notes : Load the dFdx ("static jacobian") matrix
3575 // Scope : public
3576 // Creator : admsXml
3577 // Creation Date :
3578 //-----------------------------------------------------------------------------
3580 {
3581  bool bsuccess = true;
3582  Linear::Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
3583 
3584  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3585  {
3586  Xyce::dout() << subsection_divider << std::endl;
3587  Xyce::dout() << "ADMSvbic::Instance::loadDAEdFdx (" << getName() << "):" << std::endl;
3588  }
3590 
3591 
3592  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3593  {
3595  }
3596  (*f_bi_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei);
3597 
3598 
3599  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3600  {
3601  Xyce::dout() << " (*f_bi_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei)<< std::endl;
3602  }
3604 
3605 
3606  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3607  {
3608  Xyce::dout() << " (*f_ei_Equ_bi_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei)<< std::endl;
3609  }
3611 
3612 
3613  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3614  {
3616  }
3617  (*f_bi_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND);
3618 
3619 
3620  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3621  {
3622  Xyce::dout() << " (*f_bi_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND)<< std::endl;
3623  }
3624  (*f_ei_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND);
3625 
3626 
3627  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3628  {
3629  Xyce::dout() << " (*f_ei_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND)<< std::endl;
3630  }
3632 
3633 
3634  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3635  {
3637  }
3639 
3640 
3641  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3642  {
3643  Xyce::dout() << " (*f_bx_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei)<< std::endl;
3644  }
3645  (*f_ei_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei);
3646 
3647 
3648  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3649  {
3650  Xyce::dout() << " (*f_ei_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei)<< std::endl;
3651  }
3652  (*f_bx_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND);
3653 
3654 
3655  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3656  {
3657  Xyce::dout() << " (*f_bx_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND)<< std::endl;
3658  }
3660 
3661 
3662  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3663  {
3665  }
3667 
3668 
3669  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3670  {
3671  Xyce::dout() << " (*f_ci_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci)<< std::endl;
3672  }
3673  (*f_ei_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci);
3674 
3675 
3676  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3677  {
3678  Xyce::dout() << " (*f_ei_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci)<< std::endl;
3679  }
3680  (*f_ci_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei);
3681 
3682 
3683  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3684  {
3685  Xyce::dout() << " (*f_ci_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei)<< std::endl;
3686  }
3687  (*f_ci_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND);
3688 
3689 
3690  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3691  {
3692  Xyce::dout() << " (*f_ci_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND)<< std::endl;
3693  }
3694  (*f_bi_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci);
3695 
3696 
3697  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3698  {
3699  Xyce::dout() << " (*f_bi_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci)<< std::endl;
3700  }
3701  (*f_bx_Equ_bp_Node_Ptr) += -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp);
3702 
3703 
3704  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3705  {
3706  Xyce::dout() << " (*f_bx_Equ_bp_Node_Ptr) += " << -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp)<< std::endl;
3707  }
3708  (*f_bp_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
3709 
3710 
3711  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3712  {
3713  Xyce::dout() << " (*f_bp_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3714  }
3716 
3717 
3718  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3719  {
3720  Xyce::dout() << " (*f_bp_Equ_bp_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3721  }
3722  (*f_bp_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND);
3723 
3724 
3725  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3726  {
3727  Xyce::dout() << " (*f_bp_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND)<< std::endl;
3728  }
3729  (*f_c_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND);
3730 
3731 
3732  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3733  {
3734  Xyce::dout() << " (*f_c_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND)<< std::endl;
3735  }
3736  (*f_cx_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND);
3737 
3738 
3739  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3740  {
3741  Xyce::dout() << " (*f_cx_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND)<< std::endl;
3742  }
3743  (*f_c_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx);
3744 
3745 
3746  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3747  {
3748  Xyce::dout() << " (*f_c_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx)<< std::endl;
3749  }
3750  (*f_c_Equ_cx_Node_Ptr) += -staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx);
3751 
3752 
3753  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3754  {
3755  Xyce::dout() << " (*f_c_Equ_cx_Node_Ptr) += " << -staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx)<< std::endl;
3756  }
3757  (*f_cx_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx);
3758 
3759 
3760  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3761  {
3762  Xyce::dout() << " (*f_cx_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx)<< std::endl;
3763  }
3765 
3766 
3767  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3768  {
3770  }
3772 
3773 
3774  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3775  {
3776  Xyce::dout() << " (*f_cx_Equ_bi_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx)<< std::endl;
3777  }
3779 
3780 
3781  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3782  {
3783  Xyce::dout() << " (*f_ci_Equ_cx_Node_Ptr) += " << +staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx)<< std::endl;
3784  }
3786 
3787 
3788  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3789  {
3790  Xyce::dout() << " (*f_cx_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) -staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci)<< std::endl;
3791  }
3792  (*f_b_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND);
3793 
3794 
3795  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3796  {
3797  Xyce::dout() << " (*f_b_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND)<< std::endl;
3798  }
3799  (*f_b_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx);
3800 
3801 
3802  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3803  {
3804  Xyce::dout() << " (*f_b_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx)<< std::endl;
3805  }
3806  (*f_b_Equ_bx_Node_Ptr) += -staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx);
3807 
3808 
3809  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3810  {
3811  Xyce::dout() << " (*f_b_Equ_bx_Node_Ptr) += " << -staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx)<< std::endl;
3812  }
3813  (*f_bx_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx);
3814 
3815 
3816  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3817  {
3818  Xyce::dout() << " (*f_bx_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx)<< std::endl;
3819  }
3821 
3822 
3823  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3824  {
3826  }
3827  (*f_bx_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
3828 
3829 
3830  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3831  {
3832  Xyce::dout() << " (*f_bx_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
3833  }
3834  (*f_bi_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi);
3835 
3836 
3837  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3838  {
3839  Xyce::dout() << " (*f_bi_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi)<< std::endl;
3840  }
3841  (*f_e_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND);
3842 
3843 
3844  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3845  {
3846  Xyce::dout() << " (*f_e_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND)<< std::endl;
3847  }
3848  (*f_e_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei);
3849 
3850 
3851  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3852  {
3853  Xyce::dout() << " (*f_e_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei)<< std::endl;
3854  }
3855  (*f_e_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei);
3856 
3857 
3858  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3859  {
3860  Xyce::dout() << " (*f_e_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei)<< std::endl;
3861  }
3862  (*f_ei_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei);
3863 
3864 
3865  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3866  {
3867  Xyce::dout() << " (*f_ei_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei)<< std::endl;
3868  }
3869  (*f_bp_Equ_bi_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3870 
3871 
3872  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3873  {
3874  Xyce::dout() << " (*f_bp_Equ_bi_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3875  }
3876  (*f_bp_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3877 
3878 
3879  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3880  {
3881  Xyce::dout() << " (*f_bp_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3882  }
3883  (*f_cx_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp);
3884 
3885 
3886  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3887  {
3888  Xyce::dout() << " (*f_cx_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp)<< std::endl;
3889  }
3891 
3892 
3893  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3894  {
3895  Xyce::dout() << " (*f_cx_Equ_bp_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) -staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp)<< std::endl;
3896  }
3897  (*f_bp_Equ_cx_Node_Ptr) += -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx);
3898 
3899 
3900  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3901  {
3902  Xyce::dout() << " (*f_bp_Equ_cx_Node_Ptr) += " << -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx)<< std::endl;
3903  }
3904  (*f_dt_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND);
3905 
3906 
3907  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3908  {
3909  Xyce::dout() << " (*f_dt_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND)<< std::endl;
3910  }
3912 
3913 
3914  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3915  {
3916  Xyce::dout() << " (*f_dt_Equ_bp_Node_Ptr) += " << -staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) +staticContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx)<< std::endl;
3917  }
3919 
3920 
3921  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3922  {
3924  }
3925  (*f_dt_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei);
3926 
3927 
3928  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3929  {
3930  Xyce::dout() << " (*f_dt_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei)<< std::endl;
3931  }
3933 
3934 
3935  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3936  {
3938  }
3940 
3941 
3942  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3943  {
3945  }
3947 
3948 
3949  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3950  {
3952  }
3953  (*f_dt_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx);
3954 
3955 
3956  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3957  {
3958  Xyce::dout() << " (*f_dt_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx)<< std::endl;
3959  }
3961 
3962 
3963  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3964  {
3966  }
3967  (*f_dt_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx);
3968 
3969 
3970  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3971  {
3972  Xyce::dout() << " (*f_dt_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx)<< std::endl;
3973  }
3974 
3975 
3976  return bsuccess;
3977 }
3978 
3979 
3980 //-----------------------------------------------------------------------------
3981 // Function : Instance::loadDAEdQdx
3982 // Purpose :
3983 // Special Notes : Load the dQdx ("dynamic jacobian") matrix
3984 // Scope : public
3985 // Creator : admsXml
3986 // Creation Date :
3987 //-----------------------------------------------------------------------------
3989 {
3990  bool bsuccess = true;
3991  Linear::Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
3992 
3993  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
3994  {
3995  Xyce::dout() << subsection_divider << std::endl;
3996  Xyce::dout() << "ADMSvbic::Instance::loadDAEdQdx (" << getName() << "):" << std::endl;
3997  }
3999 
4000 
4001  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4002  {
4004  }
4005  (*q_bi_Equ_ei_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei);
4006 
4007 
4008  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4009  {
4010  Xyce::dout() << " (*q_bi_Equ_ei_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei)<< std::endl;
4011  }
4013 
4014 
4015  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4016  {
4017  Xyce::dout() << " (*q_ei_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci)<< std::endl;
4018  }
4020 
4021 
4022  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4023  {
4024  Xyce::dout() << " (*q_ei_Equ_ei_Node_Ptr) += " << -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei)<< std::endl;
4025  }
4026  (*q_bi_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND);
4027 
4028 
4029  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4030  {
4031  Xyce::dout() << " (*q_bi_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND)<< std::endl;
4032  }
4033  (*q_ei_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND);
4034 
4035 
4036  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4037  {
4038  Xyce::dout() << " (*q_ei_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND)<< std::endl;
4039  }
4041 
4042 
4043  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4044  {
4045  Xyce::dout() << " (*q_bx_Equ_bx_Node_Ptr) += " << +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei)<< std::endl;
4046  }
4047  (*q_bx_Equ_ei_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei);
4048 
4049 
4050  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4051  {
4052  Xyce::dout() << " (*q_bx_Equ_ei_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei)<< std::endl;
4053  }
4054  (*q_ei_Equ_bx_Node_Ptr) += +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei);
4055 
4056 
4057  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4058  {
4059  Xyce::dout() << " (*q_ei_Equ_bx_Node_Ptr) += " << +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei)<< std::endl;
4060  }
4061  (*q_bx_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND);
4062 
4063 
4064  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4065  {
4066  Xyce::dout() << " (*q_bx_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND)<< std::endl;
4067  }
4068  (*q_ci_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci);
4069 
4070 
4071  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4072  {
4073  Xyce::dout() << " (*q_ci_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci)<< std::endl;
4074  }
4075  (*q_ci_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci);
4076 
4077 
4078  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4079  {
4080  Xyce::dout() << " (*q_ci_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci)<< std::endl;
4081  }
4082  (*q_ei_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci);
4083 
4084 
4085  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4086  {
4087  Xyce::dout() << " (*q_ei_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci)<< std::endl;
4088  }
4089  (*q_ci_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND);
4090 
4091 
4092  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4093  {
4094  Xyce::dout() << " (*q_ci_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND)<< std::endl;
4095  }
4096  (*q_bi_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci);
4097 
4098 
4099  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4100  {
4101  Xyce::dout() << " (*q_bi_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci)<< std::endl;
4102  }
4103  (*q_bx_Equ_bp_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp);
4104 
4105 
4106  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4107  {
4108  Xyce::dout() << " (*q_bx_Equ_bp_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp)<< std::endl;
4109  }
4110  (*q_bp_Equ_bx_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
4111 
4112 
4113  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4114  {
4115  Xyce::dout() << " (*q_bp_Equ_bx_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
4116  }
4117  (*q_bp_Equ_bp_Node_Ptr) += -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
4118 
4119 
4120  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4121  {
4122  Xyce::dout() << " (*q_bp_Equ_bp_Node_Ptr) += " << -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
4123  }
4124  (*q_bp_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND);
4125 
4126 
4127  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4128  {
4129  Xyce::dout() << " (*q_bp_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND)<< std::endl;
4130  }
4131  (*q_cx_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND);
4132 
4133 
4134  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4135  {
4136  Xyce::dout() << " (*q_cx_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND)<< std::endl;
4137  }
4138  (*q_c_Equ_c_Node_Ptr) += -dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c);
4139 
4140 
4141  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4142  {
4143  Xyce::dout() << " (*q_c_Equ_c_Node_Ptr) += " << -dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c)<< std::endl;
4144  }
4145  (*q_cx_Equ_cx_Node_Ptr) += -dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx);
4146 
4147 
4148  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4149  {
4150  Xyce::dout() << " (*q_cx_Equ_cx_Node_Ptr) += " << -dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx)<< std::endl;
4151  }
4152  (*q_cx_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx);
4153 
4154 
4155  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4156  {
4157  Xyce::dout() << " (*q_cx_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx)<< std::endl;
4158  }
4160 
4161 
4162  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4163  {
4164  Xyce::dout() << " (*q_b_Equ_b_Node_Ptr) += " << +dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c) +dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e)<< std::endl;
4165  }
4166  (*q_bx_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
4167 
4168 
4169  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4170  {
4171  Xyce::dout() << " (*q_bx_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
4172  }
4173  (*q_bx_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
4174 
4175 
4176  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4177  {
4178  Xyce::dout() << " (*q_bx_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
4179  }
4180  (*q_e_Equ_e_Node_Ptr) += -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e);
4181 
4182 
4183  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4184  {
4185  Xyce::dout() << " (*q_e_Equ_e_Node_Ptr) += " << -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e)<< std::endl;
4186  }
4187  (*q_bp_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
4188 
4189 
4190  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4191  {
4192  Xyce::dout() << " (*q_bp_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
4193  }
4194  (*q_bp_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
4195 
4196 
4197  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4198  {
4199  Xyce::dout() << " (*q_bp_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
4200  }
4201  (*q_bi_Equ_cx_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx);
4202 
4203 
4204  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4205  {
4206  Xyce::dout() << " (*q_bi_Equ_cx_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx)<< std::endl;
4207  }
4208  (*q_b_Equ_e_Node_Ptr) += -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e);
4209 
4210 
4211  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4212  {
4213  Xyce::dout() << " (*q_b_Equ_e_Node_Ptr) += " << -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e)<< std::endl;
4214  }
4215  (*q_e_Equ_b_Node_Ptr) += +dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e);
4216 
4217 
4218  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4219  {
4220  Xyce::dout() << " (*q_e_Equ_b_Node_Ptr) += " << +dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e)<< std::endl;
4221  }
4222  (*q_b_Equ_c_Node_Ptr) += -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c);
4223 
4224 
4225  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4226  {
4227  Xyce::dout() << " (*q_b_Equ_c_Node_Ptr) += " << -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c)<< std::endl;
4228  }
4229  (*q_c_Equ_b_Node_Ptr) += +dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c);
4230 
4231 
4232  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4233  {
4234  Xyce::dout() << " (*q_c_Equ_b_Node_Ptr) += " << +dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c)<< std::endl;
4235  }
4236  (*q_dt_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND);
4237 
4238 
4239  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) && getSolverState().debugTimeFlag)
4240  {
4241  Xyce::dout() << " (*q_dt_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND)<< std::endl;
4242  }
4243 
4244 
4245  return bsuccess;
4246 }
4247 
4248 //-----------------------------------------------------------------------------
4249 // Function : Instance::updateTemperature
4250 // Purpose : Set temperature and update any parameters that depend on it
4251 // Special Notes : In Xyce ADMS, we'll simply copy the temperature, which is
4252 // in Kelvin, to our "admsTemperature" variable, which needs
4253 // to be in Celsius.
4254 // Scope : public
4255 // Creator : admsXml
4256 // Creation Date :
4257 //-----------------------------------------------------------------------------
4258 bool Instance::updateTemperature(const double & temperatureTemp)
4259 {
4260 
4261  admsTemperature = temperatureTemp;
4262  adms_vt_nom = adms_vt(temperatureTemp);
4263 
4264  return true;
4265 }
4266 
4267 // Class Model
4268 //-----------------------------------------------------------------------------
4269 // Function : Model::processParams
4270 // Purpose :
4271 // Special Notes :
4272 // Scope : public
4273 // Creator : admsXml
4274 // Creation Date :
4275 //-----------------------------------------------------------------------------
4277 {
4278 
4279  // Now we need to check that any parameters are within their ranges as
4280  // specified in the verilog:
4281 
4282  // Parameter RCX : [ 0.0, (+inf) [
4283  if ( (!((RCX >=0.0))) )
4284  {
4285  UserError0(*this) << "ADMSvbic: Parameter RCX value " << RCX << " out of range [ 0.0, (+inf) [";
4286  }
4287 
4288  // Parameter RCI : [ 0.0, (+inf) [
4289  if ( (!((RCI >=0.0))) )
4290  {
4291  UserError0(*this) << "ADMSvbic: Parameter RCI value " << RCI << " out of range [ 0.0, (+inf) [";
4292  }
4293 
4294  // Parameter VO : [ 0.0, (+inf) [
4295  if ( (!((VO >=0.0))) )
4296  {
4297  UserError0(*this) << "ADMSvbic: Parameter VO value " << VO << " out of range [ 0.0, (+inf) [";
4298  }
4299 
4300  // Parameter GAMM : [ 0.0, (+inf) [
4301  if ( (!((GAMM >=0.0))) )
4302  {
4303  UserError0(*this) << "ADMSvbic: Parameter GAMM value " << GAMM << " out of range [ 0.0, (+inf) [";
4304  }
4305 
4306  // Parameter HRCF : [ 0.0, (+inf) [
4307  if ( (!((HRCF >=0.0))) )
4308  {
4309  UserError0(*this) << "ADMSvbic: Parameter HRCF value " << HRCF << " out of range [ 0.0, (+inf) [";
4310  }
4311 
4312  // Parameter RBX : [ 0.0, (+inf) [
4313  if ( (!((RBX >=0.0))) )
4314  {
4315  UserError0(*this) << "ADMSvbic: Parameter RBX value " << RBX << " out of range [ 0.0, (+inf) [";
4316  }
4317 
4318  // Parameter RBI : [ 0.0, (+inf) [
4319  if ( (!((RBI >=0.0))) )
4320  {
4321  UserError0(*this) << "ADMSvbic: Parameter RBI value " << RBI << " out of range [ 0.0, (+inf) [";
4322  }
4323 
4324  // Parameter RE : [ 0.0, (+inf) [
4325  if ( (!((RE >=0.0))) )
4326  {
4327  UserError0(*this) << "ADMSvbic: Parameter RE value " << RE << " out of range [ 0.0, (+inf) [";
4328  }
4329 
4330  // Parameter RS : [ 0.0, (+inf) [
4331  if ( (!((RS >=0.0))) )
4332  {
4333  UserError0(*this) << "ADMSvbic: Parameter RS value " << RS << " out of range [ 0.0, (+inf) [";
4334  }
4335 
4336  // Parameter RBP : [ 0.0, (+inf) [
4337  if ( (!((RBP >=0.0))) )
4338  {
4339  UserError0(*this) << "ADMSvbic: Parameter RBP value " << RBP << " out of range [ 0.0, (+inf) [";
4340  }
4341 
4342  // Parameter IS : ] 0.0, (+inf) [
4343  if ( (!((IS >0.0))) )
4344  {
4345  UserError0(*this) << "ADMSvbic: Parameter IS value " << IS << " out of range ] 0.0, (+inf) [";
4346  }
4347 
4348  // Parameter NF : ] 0.0, (+inf) [
4349  if ( (!((NF >0.0))) )
4350  {
4351  UserError0(*this) << "ADMSvbic: Parameter NF value " << NF << " out of range ] 0.0, (+inf) [";
4352  }
4353 
4354  // Parameter NR : ] 0.0, (+inf) [
4355  if ( (!((NR >0.0))) )
4356  {
4357  UserError0(*this) << "ADMSvbic: Parameter NR value " << NR << " out of range ] 0.0, (+inf) [";
4358  }
4359 
4360  // Parameter FC : [ 0.0, 1.0 [
4361  if ( (!((FC >=0.0 && FC <1.0 ))) )
4362  {
4363  UserError0(*this) << "ADMSvbic: Parameter FC value " << FC << " out of range [ 0.0, 1.0 [";
4364  }
4365 
4366  // Parameter CBEO : [ 0.0, (+inf) [
4367  if ( (!((CBEO >=0.0))) )
4368  {
4369  UserError0(*this) << "ADMSvbic: Parameter CBEO value " << CBEO << " out of range [ 0.0, (+inf) [";
4370  }
4371 
4372  // Parameter CJE : [ 0.0, (+inf) [
4373  if ( (!((CJE >=0.0))) )
4374  {
4375  UserError0(*this) << "ADMSvbic: Parameter CJE value " << CJE << " out of range [ 0.0, (+inf) [";
4376  }
4377 
4378  // Parameter PE : ] 0.0, (+inf) [
4379  if ( (!((PE >0.0))) )
4380  {
4381  UserError0(*this) << "ADMSvbic: Parameter PE value " << PE << " out of range ] 0.0, (+inf) [";
4382  }
4383 
4384  // Parameter ME : ] 0.0, 1.0 ]
4385  if ( (!((ME >0.0 && ME <=1.0 ))) )
4386  {
4387  UserError0(*this) << "ADMSvbic: Parameter ME value " << ME << " out of range ] 0.0, 1.0 ]";
4388  }
4389 
4390  // Parameter CBCO : [ 0.0, (+inf) [
4391  if ( (!((CBCO >=0.0))) )
4392  {
4393  UserError0(*this) << "ADMSvbic: Parameter CBCO value " << CBCO << " out of range [ 0.0, (+inf) [";
4394  }
4395 
4396  // Parameter CJC : [ 0.0, (+inf) [
4397  if ( (!((CJC >=0.0))) )
4398  {
4399  UserError0(*this) << "ADMSvbic: Parameter CJC value " << CJC << " out of range [ 0.0, (+inf) [";
4400  }
4401 
4402  // Parameter QCO : [ 0.0, (+inf) [
4403  if ( (!((QCO >=0.0))) )
4404  {
4405  UserError0(*this) << "ADMSvbic: Parameter QCO value " << QCO << " out of range [ 0.0, (+inf) [";
4406  }
4407 
4408  // Parameter CJEP : [ 0.0, (+inf) [
4409  if ( (!((CJEP >=0.0))) )
4410  {
4411  UserError0(*this) << "ADMSvbic: Parameter CJEP value " << CJEP << " out of range [ 0.0, (+inf) [";
4412  }
4413 
4414  // Parameter PC : ] 0.0, (+inf) [
4415  if ( (!((PC >0.0))) )
4416  {
4417  UserError0(*this) << "ADMSvbic: Parameter PC value " << PC << " out of range ] 0.0, (+inf) [";
4418  }
4419 
4420  // Parameter MC : ] 0.0, 1.0 ]
4421  if ( (!((MC >0.0 && MC <=1.0 ))) )
4422  {
4423  UserError0(*this) << "ADMSvbic: Parameter MC value " << MC << " out of range ] 0.0, 1.0 ]";
4424  }
4425 
4426  // Parameter CJCP : [ 0.0, (+inf) [
4427  if ( (!((CJCP >=0.0))) )
4428  {
4429  UserError0(*this) << "ADMSvbic: Parameter CJCP value " << CJCP << " out of range [ 0.0, (+inf) [";
4430  }
4431 
4432  // Parameter PS : ] 0.0, (+inf) [
4433  if ( (!((PS >0.0))) )
4434  {
4435  UserError0(*this) << "ADMSvbic: Parameter PS value " << PS << " out of range ] 0.0, (+inf) [";
4436  }
4437 
4438  // Parameter MS : ] 0.0, 1.0 ]
4439  if ( (!((MS >0.0 && MS <=1.0 ))) )
4440  {
4441  UserError0(*this) << "ADMSvbic: Parameter MS value " << MS << " out of range ] 0.0, 1.0 ]";
4442  }
4443 
4444  // Parameter IBEI : ] 0.0, (+inf) [
4445  if ( (!((IBEI >0.0))) )
4446  {
4447  UserError0(*this) << "ADMSvbic: Parameter IBEI value " << IBEI << " out of range ] 0.0, (+inf) [";
4448  }
4449 
4450  // Parameter WBE : [ 0.0, 1.0 ]
4451  if ( (!((WBE >=0.0 && WBE <=1.0 ))) )
4452  {
4453  UserError0(*this) << "ADMSvbic: Parameter WBE value " << WBE << " out of range [ 0.0, 1.0 ]";
4454  }
4455 
4456  // Parameter NEI : ] 0.0, (+inf) [
4457  if ( (!((NEI >0.0))) )
4458  {
4459  UserError0(*this) << "ADMSvbic: Parameter NEI value " << NEI << " out of range ] 0.0, (+inf) [";
4460  }
4461 
4462  // Parameter IBEN : [ 0.0, (+inf) [
4463  if ( (!((IBEN >=0.0))) )
4464  {
4465  UserError0(*this) << "ADMSvbic: Parameter IBEN value " << IBEN << " out of range [ 0.0, (+inf) [";
4466  }
4467 
4468  // Parameter NEN : ] 0.0, (+inf) [
4469  if ( (!((NEN >0.0))) )
4470  {
4471  UserError0(*this) << "ADMSvbic: Parameter NEN value " << NEN << " out of range ] 0.0, (+inf) [";
4472  }
4473 
4474  // Parameter IBCI : ] 0.0, (+inf) [
4475  if ( (!((IBCI >0.0))) )
4476  {
4477  UserError0(*this) << "ADMSvbic: Parameter IBCI value " << IBCI << " out of range ] 0.0, (+inf) [";
4478  }
4479 
4480  // Parameter NCI : ] 0.0, (+inf) [
4481  if ( (!((NCI >0.0))) )
4482  {
4483  UserError0(*this) << "ADMSvbic: Parameter NCI value " << NCI << " out of range ] 0.0, (+inf) [";
4484  }
4485 
4486  // Parameter IBCN : [ 0.0, (+inf) [
4487  if ( (!((IBCN >=0.0))) )
4488  {
4489  UserError0(*this) << "ADMSvbic: Parameter IBCN value " << IBCN << " out of range [ 0.0, (+inf) [";
4490  }
4491 
4492  // Parameter NCN : ] 0.0, (+inf) [
4493  if ( (!((NCN >0.0))) )
4494  {
4495  UserError0(*this) << "ADMSvbic: Parameter NCN value " << NCN << " out of range ] 0.0, (+inf) [";
4496  }
4497 
4498  // Parameter AVC1 : [ 0.0, (+inf) [
4499  if ( (!((AVC1 >=0.0))) )
4500  {
4501  UserError0(*this) << "ADMSvbic: Parameter AVC1 value " << AVC1 << " out of range [ 0.0, (+inf) [";
4502  }
4503 
4504  // Parameter AVC2 : [ 0.0, (+inf) [
4505  if ( (!((AVC2 >=0.0))) )
4506  {
4507  UserError0(*this) << "ADMSvbic: Parameter AVC2 value " << AVC2 << " out of range [ 0.0, (+inf) [";
4508  }
4509 
4510  // Parameter ISP : [ 0.0, (+inf) [
4511  if ( (!((ISP >=0.0))) )
4512  {
4513  UserError0(*this) << "ADMSvbic: Parameter ISP value " << ISP << " out of range [ 0.0, (+inf) [";
4514  }
4515 
4516  // Parameter WSP : [ 0.0, 1.0 ]
4517  if ( (!((WSP >=0.0 && WSP <=1.0 ))) )
4518  {
4519  UserError0(*this) << "ADMSvbic: Parameter WSP value " << WSP << " out of range [ 0.0, 1.0 ]";
4520  }
4521 
4522  // Parameter NFP : ] 0.0, (+inf) [
4523  if ( (!((NFP >0.0))) )
4524  {
4525  UserError0(*this) << "ADMSvbic: Parameter NFP value " << NFP << " out of range ] 0.0, (+inf) [";
4526  }
4527 
4528  // Parameter IBEIP : [ 0.0, (+inf) [
4529  if ( (!((IBEIP >=0.0))) )
4530  {
4531  UserError0(*this) << "ADMSvbic: Parameter IBEIP value " << IBEIP << " out of range [ 0.0, (+inf) [";
4532  }
4533 
4534  // Parameter IBENP : [ 0.0, (+inf) [
4535  if ( (!((IBENP >=0.0))) )
4536  {
4537  UserError0(*this) << "ADMSvbic: Parameter IBENP value " << IBENP << " out of range [ 0.0, (+inf) [";
4538  }
4539 
4540  // Parameter IBCIP : [ 0.0, (+inf) [
4541  if ( (!((IBCIP >=0.0))) )
4542  {
4543  UserError0(*this) << "ADMSvbic: Parameter IBCIP value " << IBCIP << " out of range [ 0.0, (+inf) [";
4544  }
4545 
4546  // Parameter NCIP : ] 0.0, (+inf) [
4547  if ( (!((NCIP >0.0))) )
4548  {
4549  UserError0(*this) << "ADMSvbic: Parameter NCIP value " << NCIP << " out of range ] 0.0, (+inf) [";
4550  }
4551 
4552  // Parameter IBCNP : [ 0.0, (+inf) [
4553  if ( (!((IBCNP >=0.0))) )
4554  {
4555  UserError0(*this) << "ADMSvbic: Parameter IBCNP value " << IBCNP << " out of range [ 0.0, (+inf) [";
4556  }
4557 
4558  // Parameter NCNP : ] 0.0, (+inf) [
4559  if ( (!((NCNP >0.0))) )
4560  {
4561  UserError0(*this) << "ADMSvbic: Parameter NCNP value " << NCNP << " out of range ] 0.0, (+inf) [";
4562  }
4563 
4564  // Parameter VEF : [ 0.0, (+inf) [
4565  if ( (!((VEF >=0.0))) )
4566  {
4567  UserError0(*this) << "ADMSvbic: Parameter VEF value " << VEF << " out of range [ 0.0, (+inf) [";
4568  }
4569 
4570  // Parameter VER : [ 0.0, (+inf) [
4571  if ( (!((VER >=0.0))) )
4572  {
4573  UserError0(*this) << "ADMSvbic: Parameter VER value " << VER << " out of range [ 0.0, (+inf) [";
4574  }
4575 
4576  // Parameter IKF : [ 0.0, (+inf) [
4577  if ( (!((IKF >=0.0))) )
4578  {
4579  UserError0(*this) << "ADMSvbic: Parameter IKF value " << IKF << " out of range [ 0.0, (+inf) [";
4580  }
4581 
4582  // Parameter IKR : [ 0.0, (+inf) [
4583  if ( (!((IKR >=0.0))) )
4584  {
4585  UserError0(*this) << "ADMSvbic: Parameter IKR value " << IKR << " out of range [ 0.0, (+inf) [";
4586  }
4587 
4588  // Parameter IKP : [ 0.0, (+inf) [
4589  if ( (!((IKP >=0.0))) )
4590  {
4591  UserError0(*this) << "ADMSvbic: Parameter IKP value " << IKP << " out of range [ 0.0, (+inf) [";
4592  }
4593 
4594  // Parameter TF : [ 0.0, (+inf) [
4595  if ( (!((TF >=0.0))) )
4596  {
4597  UserError0(*this) << "ADMSvbic: Parameter TF value " << TF << " out of range [ 0.0, (+inf) [";
4598  }
4599 
4600  // Parameter QTF : [ 0.0, (+inf) [
4601  if ( (!((QTF >=0.0))) )
4602  {
4603  UserError0(*this) << "ADMSvbic: Parameter QTF value " << QTF << " out of range [ 0.0, (+inf) [";
4604  }
4605 
4606  // Parameter XTF : [ 0.0, (+inf) [
4607  if ( (!((XTF >=0.0))) )
4608  {
4609  UserError0(*this) << "ADMSvbic: Parameter XTF value " << XTF << " out of range [ 0.0, (+inf) [";
4610  }
4611 
4612  // Parameter VTF : [ 0.0, (+inf) [
4613  if ( (!((VTF >=0.0))) )
4614  {
4615  UserError0(*this) << "ADMSvbic: Parameter VTF value " << VTF << " out of range [ 0.0, (+inf) [";
4616  }
4617 
4618  // Parameter ITF : [ 0.0, (+inf) [
4619  if ( (!((ITF >=0.0))) )
4620  {
4621  UserError0(*this) << "ADMSvbic: Parameter ITF value " << ITF << " out of range [ 0.0, (+inf) [";
4622  }
4623 
4624  // Parameter TR : [ 0.0, (+inf) [
4625  if ( (!((TR >=0.0))) )
4626  {
4627  UserError0(*this) << "ADMSvbic: Parameter TR value " << TR << " out of range [ 0.0, (+inf) [";
4628  }
4629 
4630  // Parameter TD : [ 0.0, (+inf) [
4631  if ( (!((TD >=0.0))) )
4632  {
4633  UserError0(*this) << "ADMSvbic: Parameter TD value " << TD << " out of range [ 0.0, (+inf) [";
4634  }
4635 
4636  // Parameter KFN : [ 0.0, (+inf) [
4637  if ( (!((KFN >=0.0))) )
4638  {
4639  UserError0(*this) << "ADMSvbic: Parameter KFN value " << KFN << " out of range [ 0.0, (+inf) [";
4640  }
4641 
4642  // Parameter AFN : ] 0.0, (+inf) [
4643  if ( (!((AFN >0.0))) )
4644  {
4645  UserError0(*this) << "ADMSvbic: Parameter AFN value " << AFN << " out of range ] 0.0, (+inf) [";
4646  }
4647 
4648  // Parameter BFN : ] 0.0, (+inf) [
4649  if ( (!((BFN >0.0))) )
4650  {
4651  UserError0(*this) << "ADMSvbic: Parameter BFN value " << BFN << " out of range ] 0.0, (+inf) [";
4652  }
4653 
4654  // Parameter RTH : [ 0.0, (+inf) [
4655  if ( (!((RTH >=0.0))) )
4656  {
4657  UserError0(*this) << "ADMSvbic: Parameter RTH value " << RTH << " out of range [ 0.0, (+inf) [";
4658  }
4659 
4660  // Parameter CTH : [ 0.0, (+inf) [
4661  if ( (!((CTH >=0.0))) )
4662  {
4663  UserError0(*this) << "ADMSvbic: Parameter CTH value " << CTH << " out of range [ 0.0, (+inf) [";
4664  }
4665 
4666  // Parameter VRT : [ 0.0, (+inf) [
4667  if ( (!((VRT >=0.0))) )
4668  {
4669  UserError0(*this) << "ADMSvbic: Parameter VRT value " << VRT << " out of range [ 0.0, (+inf) [";
4670  }
4671 
4672  // Parameter ART : ] 0.0, (+inf) [
4673  if ( (!((ART >0.0))) )
4674  {
4675  UserError0(*this) << "ADMSvbic: Parameter ART value " << ART << " out of range ] 0.0, (+inf) [";
4676  }
4677 
4678  // Parameter CCSO : [ 0.0, (+inf) [
4679  if ( (!((CCSO >=0.0))) )
4680  {
4681  UserError0(*this) << "ADMSvbic: Parameter CCSO value " << CCSO << " out of range [ 0.0, (+inf) [";
4682  }
4683 
4684  // Parameter NKF : ] 0.0, (+inf) [
4685  if ( (!((NKF >0.0))) )
4686  {
4687  UserError0(*this) << "ADMSvbic: Parameter NKF value " << NKF << " out of range ] 0.0, (+inf) [";
4688  }
4689 
4690  // Parameter ISRR : ] 0.0, (+inf) [
4691  if ( (!((ISRR >0.0))) )
4692  {
4693  UserError0(*this) << "ADMSvbic: Parameter ISRR value " << ISRR << " out of range ] 0.0, (+inf) [";
4694  }
4695 
4696  // Parameter NBBE : ] 0.0, (+inf) [
4697  if ( (!((NBBE >0.0))) )
4698  {
4699  UserError0(*this) << "ADMSvbic: Parameter NBBE value " << NBBE << " out of range ] 0.0, (+inf) [";
4700  }
4701 
4702  // Parameter dtype : [ (-1), 1 ][ 0, 0 ]
4703  if ( (!((dtype >=(-1) && dtype <=1 )) || (dtype >=0 && dtype <=0 )) )
4704  {
4705  UserError0(*this) << "ADMSvbic: Parameter dtype value " << dtype << " out of range [ (-1), 1 ] or in excluded range [ 0, 0 ]";
4706  }
4707 
4708 
4709  // and of course, this routine is where we should put the initial_model
4710  // stuff
4711 
4712 
4713  return true;
4714 }
4715 //----------------------------------------------------------------------------
4716 // Function : Model::processInstanceParams
4717 // Purpose :
4718 // Special Notes :
4719 // Scope : public
4720 // Creator :
4721 // Creation Date :
4722 //----------------------------------------------------------------------------
4724 {
4725 
4726  std::vector<Instance*>::iterator iter;
4727  std::vector<Instance*>::iterator first = instanceContainer.begin();
4728  std::vector<Instance*>::iterator last = instanceContainer.end();
4729 
4730  for (iter=first; iter!=last; ++iter)
4731  {
4732  (*iter)->processParams();
4733  }
4734 
4735  return true;
4736 }
4737 
4738 //-----------------------------------------------------------------------------
4739 // Function : Model::Model
4740 // Purpose : model block constructor
4741 // Special Notes :
4742 // Scope : public
4743 // Creator :
4744 // Creation Date :
4745 //-----------------------------------------------------------------------------
4747  const Configuration & configuration,
4748  const ModelBlock & model_block,
4749  const FactoryBlock & factory_block)
4750  : DeviceModel(model_block, configuration.getModelParameters(), factory_block),
4751  TNOM(27.0),
4752  RCX(0.0),
4753  RCI(0.0),
4754  VO(0.0),
4755  GAMM(0.0),
4756  HRCF(0.0),
4757  RBX(0.0),
4758  RBI(0.0),
4759  RE(0.0),
4760  RS(0.0),
4761  RBP(0.0),
4762  IS(1.0e-16),
4763  NF(1.0),
4764  NR(1.0),
4765  FC(0.9),
4766  CBEO(0.0),
4767  CJE(0.0),
4768  PE(0.75),
4769  ME(0.33),
4770  AJE((-0.5)),
4771  CBCO(0.0),
4772  CJC(0.0),
4773  QCO(0.0),
4774  CJEP(0.0),
4775  PC(0.75),
4776  MC(0.33),
4777  AJC((-0.5)),
4778  CJCP(0.0),
4779  PS(0.75),
4780  MS(0.33),
4781  AJS((-0.5)),
4782  IBEI(1.0e-18),
4783  WBE(1.0),
4784  NEI(1.0),
4785  IBEN(0.0),
4786  NEN(2.0),
4787  IBCI(1.0e-16),
4788  NCI(1.0),
4789  IBCN(0.0),
4790  NCN(2.0),
4791  AVC1(0.0),
4792  AVC2(0.0),
4793  ISP(0.0),
4794  WSP(1.0),
4795  NFP(1.0),
4796  IBEIP(0.0),
4797  IBENP(0.0),
4798  IBCIP(0.0),
4799  NCIP(1.0),
4800  IBCNP(0.0),
4801  NCNP(2.0),
4802  VEF(0.0),
4803  VER(0.0),
4804  IKF(0.0),
4805  IKR(0.0),
4806  IKP(0.0),
4807  TF(0.0),
4808  QTF(0.0),
4809  XTF(0.0),
4810  VTF(0.0),
4811  ITF(0.0),
4812  TR(0.0),
4813  TD(0.0),
4814  KFN(0.0),
4815  AFN(1.0),
4816  BFN(1.0),
4817  XRE(0),
4818  XRBI(0),
4819  XRCI(0),
4820  XRS(0),
4821  XVO(0),
4822  EA(1.12),
4823  EAIE(1.12),
4824  EAIC(1.12),
4825  EAIS(1.12),
4826  EANE(1.12),
4827  EANC(1.12),
4828  EANS(1.12),
4829  XIS(3.0),
4830  XII(3.0),
4831  XIN(3.0),
4832  TNF(0.0),
4833  TAVC(0.0),
4834  RTH(0.0),
4835  CTH(0.0),
4836  VRT(0.0),
4837  ART(0.1),
4838  CCSO(0.0),
4839  QBM(0.0),
4840  NKF(0.5),
4841  XIKF(0),
4842  XRCX(0),
4843  XRBX(0),
4844  XRBP(0),
4845  ISRR(1.0),
4846  XISR(0.0),
4847  DEAR(0.0),
4848  EAP(1.12),
4849  VBBE(0.0),
4850  NBBE(1.0),
4851  IBBE(1.0e-6),
4852  TVBBE1(0.0),
4853  TVBBE2(0.0),
4854  TNBBE(0.0),
4855  EBBE(0.0),
4856  DTEMP(0.0),
4857  VERS(1.2),
4858  VREV(0.0),
4859  dtype(1)
4860 {
4861  // Set params to constant default values (from parTable):
4862  setDefaultParams();
4863 
4864  // Set params according to .model line and constant defaults from metadata:
4865  setModParams(model_block.params);
4866 
4867  // Set any non-constant parameter defaults:
4868  // Set any parameters that were not given and whose defaults depend on other
4869  // parameters:
4870 
4871 
4872  if (!given("XYCEADMSMODTEMP"))
4873  admsModTemp=getDeviceOptions().temp.getImmutableValue<double>();
4874 
4875  // Fix the TNOM parameter that has "helpfully" been converted to Kelvin
4876  // by the DeviceEntity class
4877 
4878  if (given("TNOM"))
4879  TNOM -= CONSTCtoK;
4880 
4881  // Calculate any parameters specified as expressions:
4882 
4884 
4885  // set internal model type based on model card type
4886  if (getType() == "pnp" || getType() == "PNP")
4887  dtype = -1;
4888 
4889  // calculate dependent (ie computed) params and check for errors:
4890  processParams();
4891 }
4892 
4893 //-----------------------------------------------------------------------------
4894 // Function : Model::~Model
4895 // Purpose : destructor
4896 // Special Notes :
4897 // Scope : public
4898 // Creator :
4899 // Creation Date :
4900 //-----------------------------------------------------------------------------
4902 {
4903  std::vector<Instance*>::iterator iterI;
4904  std::vector<Instance*>::iterator firstI = instanceContainer.begin ();
4905  std::vector<Instance*>::iterator lastI = instanceContainer.end ();
4906 
4907  // loop over instances:
4908  for (iterI = firstI; iterI != lastI; ++iterI)
4909  {
4910  delete (*iterI);
4911  }
4912 }
4913 
4914 //-----------------------------------------------------------------------------
4915 // Function : Model::printOutInstances
4916 // Purpose : debugging tool.
4917 // Special Notes :
4918 // Scope : public
4919 // Creator :
4920 // Creation Date :
4921 //-----------------------------------------------------------------------------
4922 std::ostream &Model::printOutInstances(std::ostream &os) const
4923 {
4924  std::vector<Instance*>::const_iterator iter;
4925  std::vector<Instance*>::const_iterator first = instanceContainer.begin();
4926  std::vector<Instance*>::const_iterator last = instanceContainer.end();
4927 
4928  int i;
4929  os << std::endl;
4930  os << " name model name Parameters" << std::endl;
4931  for (i=0, iter=first; iter!=last; ++iter, ++i)
4932  {
4933  os << " " << i << ": " << (*iter)->getName() << " ";
4934  os << getName();
4935 
4936  os << std::endl;
4937  os << "DTEMP = " << (*iter)->DTEMP << std::endl;
4938  os << "M = " << (*iter)->M << std::endl;
4939  os << std::endl;
4940  }
4941 
4942  os << std::endl;
4943 
4944  return os;
4945 }
4946 
4947 //-----------------------------------------------------------------------------
4948 // Function : Model::forEachInstance
4949 // Purpose :
4950 // Special Notes :
4951 // Scope : public
4952 // Creator : David Baur
4953 // Creation Date : 2/4/2014
4954 //-----------------------------------------------------------------------------
4955 /// Apply a device instance "op" to all instances associated with this
4956 /// model
4957 ///
4958 /// @param[in] op Operator to apply to all instances.
4959 ///
4960 ///
4961 void Model::forEachInstance(DeviceInstanceOp &op) const /* override */
4962 {
4963  for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
4964  op(*it);
4965 }
4966 
4967 Device *Traits::factory(const Configuration &configuration, const FactoryBlock &factory_block)
4968 {
4969  return new DeviceMaster<Traits>(configuration, factory_block, factory_block.solverState_, factory_block.deviceOptions_);
4970 }
4971 
4973 {
4975  .registerDevice("q", 10)
4976  .registerModelType("npn", 10)
4977  .registerModelType("pnp", 10);
4978 }
4979 
4980 
4981 
4982 #ifdef Xyce_ADMS_SENSITIVITIES
4983 //-----------------------------------------------------------------------------
4984 // Function : evaluateInitialInstance
4985 // Purpose : Evaluate the statements in the initial_instance block
4986 // Special Notes : specific for sensitivity use
4987 // Scope : public
4988 // Creator : admsXml
4989 // Creation Date :
4990 //-----------------------------------------------------------------------------
4991 void evaluateInitialInstance(
4992  // instance parameters
4993  // reals
4994  AdmsSensFadType & instancePar_DTEMP,
4995  bool instancePar_given_DTEMP,
4996  // non-reals(including hidden)
4997  int instancePar_M,
4998  bool instancePar_given_M,
4999  // model parameters
5000  // reals
5001  AdmsSensFadType & modelPar_TNOM,
5002  bool modelPar_given_TNOM,
5003  AdmsSensFadType & modelPar_RCX,
5004  bool modelPar_given_RCX,
5005  AdmsSensFadType & modelPar_RCI,
5006  bool modelPar_given_RCI,
5007  AdmsSensFadType & modelPar_VO,
5008  bool modelPar_given_VO,
5009  AdmsSensFadType & modelPar_GAMM,
5010  bool modelPar_given_GAMM,
5011  AdmsSensFadType & modelPar_HRCF,
5012  bool modelPar_given_HRCF,
5013  AdmsSensFadType & modelPar_RBX,
5014  bool modelPar_given_RBX,
5015  AdmsSensFadType & modelPar_RBI,
5016  bool modelPar_given_RBI,
5017  AdmsSensFadType & modelPar_RE,
5018  bool modelPar_given_RE,
5019  AdmsSensFadType & modelPar_RS,
5020  bool modelPar_given_RS,
5021  AdmsSensFadType & modelPar_RBP,
5022  bool modelPar_given_RBP,
5023  AdmsSensFadType & modelPar_IS,
5024  bool modelPar_given_IS,
5025  AdmsSensFadType & modelPar_NF,
5026  bool modelPar_given_NF,
5027  AdmsSensFadType & modelPar_NR,
5028  bool modelPar_given_NR,
5029  AdmsSensFadType & modelPar_FC,
5030  bool modelPar_given_FC,
5031  AdmsSensFadType & modelPar_CBEO,
5032  bool modelPar_given_CBEO,
5033  AdmsSensFadType & modelPar_CJE,
5034  bool modelPar_given_CJE,
5035  AdmsSensFadType & modelPar_PE,
5036  bool modelPar_given_PE,
5037  AdmsSensFadType & modelPar_ME,
5038  bool modelPar_given_ME,
5039  AdmsSensFadType & modelPar_AJE,
5040  bool modelPar_given_AJE,
5041  AdmsSensFadType & modelPar_CBCO,
5042  bool modelPar_given_CBCO,
5043  AdmsSensFadType & modelPar_CJC,
5044  bool modelPar_given_CJC,
5045  AdmsSensFadType & modelPar_QCO,
5046  bool modelPar_given_QCO,
5047  AdmsSensFadType & modelPar_CJEP,
5048  bool modelPar_given_CJEP,
5049  AdmsSensFadType & modelPar_PC,
5050  bool modelPar_given_PC,
5051  AdmsSensFadType & modelPar_MC,
5052  bool modelPar_given_MC,
5053  AdmsSensFadType & modelPar_AJC,
5054  bool modelPar_given_AJC,
5055  AdmsSensFadType & modelPar_CJCP,
5056  bool modelPar_given_CJCP,
5057  AdmsSensFadType & modelPar_PS,
5058  bool modelPar_given_PS,
5059  AdmsSensFadType & modelPar_MS,
5060  bool modelPar_given_MS,
5061  AdmsSensFadType & modelPar_AJS,
5062  bool modelPar_given_AJS,
5063  AdmsSensFadType & modelPar_IBEI,
5064  bool modelPar_given_IBEI,
5065  AdmsSensFadType & modelPar_WBE,
5066  bool modelPar_given_WBE,
5067  AdmsSensFadType & modelPar_NEI,
5068  bool modelPar_given_NEI,
5069  AdmsSensFadType & modelPar_IBEN,
5070  bool modelPar_given_IBEN,
5071  AdmsSensFadType & modelPar_NEN,
5072  bool modelPar_given_NEN,
5073  AdmsSensFadType & modelPar_IBCI,
5074  bool modelPar_given_IBCI,
5075  AdmsSensFadType & modelPar_NCI,
5076  bool modelPar_given_NCI,
5077  AdmsSensFadType & modelPar_IBCN,
5078  bool modelPar_given_IBCN,
5079  AdmsSensFadType & modelPar_NCN,
5080  bool modelPar_given_NCN,
5081  AdmsSensFadType & modelPar_AVC1,
5082  bool modelPar_given_AVC1,
5083  AdmsSensFadType & modelPar_AVC2,
5084  bool modelPar_given_AVC2,
5085  AdmsSensFadType & modelPar_ISP,
5086  bool modelPar_given_ISP,
5087  AdmsSensFadType & modelPar_WSP,
5088  bool modelPar_given_WSP,
5089  AdmsSensFadType & modelPar_NFP,
5090  bool modelPar_given_NFP,
5091  AdmsSensFadType & modelPar_IBEIP,
5092  bool modelPar_given_IBEIP,
5093  AdmsSensFadType & modelPar_IBENP,
5094  bool modelPar_given_IBENP,
5095  AdmsSensFadType & modelPar_IBCIP,
5096  bool modelPar_given_IBCIP,
5097  AdmsSensFadType & modelPar_NCIP,
5098  bool modelPar_given_NCIP,
5099  AdmsSensFadType & modelPar_IBCNP,
5100  bool modelPar_given_IBCNP,
5101  AdmsSensFadType & modelPar_NCNP,
5102  bool modelPar_given_NCNP,
5103  AdmsSensFadType & modelPar_VEF,
5104  bool modelPar_given_VEF,
5105  AdmsSensFadType & modelPar_VER,
5106  bool modelPar_given_VER,
5107  AdmsSensFadType & modelPar_IKF,
5108  bool modelPar_given_IKF,
5109  AdmsSensFadType & modelPar_IKR,
5110  bool modelPar_given_IKR,
5111  AdmsSensFadType & modelPar_IKP,
5112  bool modelPar_given_IKP,
5113  AdmsSensFadType & modelPar_TF,
5114  bool modelPar_given_TF,
5115  AdmsSensFadType & modelPar_QTF,
5116  bool modelPar_given_QTF,
5117  AdmsSensFadType & modelPar_XTF,
5118  bool modelPar_given_XTF,
5119  AdmsSensFadType & modelPar_VTF,
5120  bool modelPar_given_VTF,
5121  AdmsSensFadType & modelPar_ITF,
5122  bool modelPar_given_ITF,
5123  AdmsSensFadType & modelPar_TR,
5124  bool modelPar_given_TR,
5125  AdmsSensFadType & modelPar_TD,
5126  bool modelPar_given_TD,
5127  AdmsSensFadType & modelPar_KFN,
5128  bool modelPar_given_KFN,
5129  AdmsSensFadType & modelPar_AFN,
5130  bool modelPar_given_AFN,
5131  AdmsSensFadType & modelPar_BFN,
5132  bool modelPar_given_BFN,
5133  AdmsSensFadType & modelPar_XRE,
5134  bool modelPar_given_XRE,
5135  AdmsSensFadType & modelPar_XRBI,
5136  bool modelPar_given_XRBI,
5137  AdmsSensFadType & modelPar_XRCI,
5138  bool modelPar_given_XRCI,
5139  AdmsSensFadType & modelPar_XRS,
5140  bool modelPar_given_XRS,
5141  AdmsSensFadType & modelPar_XVO,
5142  bool modelPar_given_XVO,
5143  AdmsSensFadType & modelPar_EA,
5144  bool modelPar_given_EA,
5145  AdmsSensFadType & modelPar_EAIE,
5146  bool modelPar_given_EAIE,
5147  AdmsSensFadType & modelPar_EAIC,
5148  bool modelPar_given_EAIC,
5149  AdmsSensFadType & modelPar_EAIS,
5150  bool modelPar_given_EAIS,
5151  AdmsSensFadType & modelPar_EANE,
5152  bool modelPar_given_EANE,
5153  AdmsSensFadType & modelPar_EANC,
5154  bool modelPar_given_EANC,
5155  AdmsSensFadType & modelPar_EANS,
5156  bool modelPar_given_EANS,
5157  AdmsSensFadType & modelPar_XIS,
5158  bool modelPar_given_XIS,
5159  AdmsSensFadType & modelPar_XII,
5160  bool modelPar_given_XII,
5161  AdmsSensFadType & modelPar_XIN,
5162  bool modelPar_given_XIN,
5163  AdmsSensFadType & modelPar_TNF,
5164  bool modelPar_given_TNF,
5165  AdmsSensFadType & modelPar_TAVC,
5166  bool modelPar_given_TAVC,
5167  AdmsSensFadType & modelPar_RTH,
5168  bool modelPar_given_RTH,
5169  AdmsSensFadType & modelPar_CTH,
5170  bool modelPar_given_CTH,
5171  AdmsSensFadType & modelPar_VRT,
5172  bool modelPar_given_VRT,
5173  AdmsSensFadType & modelPar_ART,
5174  bool modelPar_given_ART,
5175  AdmsSensFadType & modelPar_CCSO,
5176  bool modelPar_given_CCSO,
5177  AdmsSensFadType & modelPar_QBM,
5178  bool modelPar_given_QBM,
5179  AdmsSensFadType & modelPar_NKF,
5180  bool modelPar_given_NKF,
5181  AdmsSensFadType & modelPar_XIKF,
5182  bool modelPar_given_XIKF,
5183  AdmsSensFadType & modelPar_XRCX,
5184  bool modelPar_given_XRCX,
5185  AdmsSensFadType & modelPar_XRBX,
5186  bool modelPar_given_XRBX,
5187  AdmsSensFadType & modelPar_XRBP,
5188  bool modelPar_given_XRBP,
5189  AdmsSensFadType & modelPar_ISRR,
5190  bool modelPar_given_ISRR,
5191  AdmsSensFadType & modelPar_XISR,
5192  bool modelPar_given_XISR,
5193  AdmsSensFadType & modelPar_DEAR,
5194  bool modelPar_given_DEAR,
5195  AdmsSensFadType & modelPar_EAP,
5196  bool modelPar_given_EAP,
5197  AdmsSensFadType & modelPar_VBBE,
5198  bool modelPar_given_VBBE,
5199  AdmsSensFadType & modelPar_NBBE,
5200  bool modelPar_given_NBBE,
5201  AdmsSensFadType & modelPar_IBBE,
5202  bool modelPar_given_IBBE,
5203  AdmsSensFadType & modelPar_TVBBE1,
5204  bool modelPar_given_TVBBE1,
5205  AdmsSensFadType & modelPar_TVBBE2,
5206  bool modelPar_given_TVBBE2,
5207  AdmsSensFadType & modelPar_TNBBE,
5208  bool modelPar_given_TNBBE,
5209  AdmsSensFadType & modelPar_EBBE,
5210  bool modelPar_given_EBBE,
5211  AdmsSensFadType & modelPar_DTEMP,
5212  bool modelPar_given_DTEMP,
5213  AdmsSensFadType & modelPar_VERS,
5214  bool modelPar_given_VERS,
5215  AdmsSensFadType & modelPar_VREV,
5216  bool modelPar_given_VREV,
5217  // non-reals (including hidden)
5218  int modelPar_dtype,
5219  double admsTemperature, double adms_vt_nom)
5220 {
5221 }
5222 
5223 
5224 
5225 //-----------------------------------------------------------------------------
5226 // Function : evaluateInitialModel
5227 // Purpose : Evaluate the statements in the initial_model block
5228 // Special Notes : specific for sensitivity use
5229 // Scope : public
5230 // Creator : admsXml
5231 // Creation Date :
5232 //-----------------------------------------------------------------------------
5233 void evaluateInitialModel(
5234  // model parameters
5235  // reals
5236  AdmsSensFadType & modelPar_TNOM,
5237  bool modelPar_given_TNOM,
5238  AdmsSensFadType & modelPar_RCX,
5239  bool modelPar_given_RCX,
5240  AdmsSensFadType & modelPar_RCI,
5241  bool modelPar_given_RCI,
5242  AdmsSensFadType & modelPar_VO,
5243  bool modelPar_given_VO,
5244  AdmsSensFadType & modelPar_GAMM,
5245  bool modelPar_given_GAMM,
5246  AdmsSensFadType & modelPar_HRCF,
5247  bool modelPar_given_HRCF,
5248  AdmsSensFadType & modelPar_RBX,
5249  bool modelPar_given_RBX,
5250  AdmsSensFadType & modelPar_RBI,
5251  bool modelPar_given_RBI,
5252  AdmsSensFadType & modelPar_RE,
5253  bool modelPar_given_RE,
5254  AdmsSensFadType & modelPar_RS,
5255  bool modelPar_given_RS,
5256  AdmsSensFadType & modelPar_RBP,
5257  bool modelPar_given_RBP,
5258  AdmsSensFadType & modelPar_IS,
5259  bool modelPar_given_IS,
5260  AdmsSensFadType & modelPar_NF,
5261  bool modelPar_given_NF,
5262  AdmsSensFadType & modelPar_NR,
5263  bool modelPar_given_NR,
5264  AdmsSensFadType & modelPar_FC,
5265  bool modelPar_given_FC,
5266  AdmsSensFadType & modelPar_CBEO,
5267  bool modelPar_given_CBEO,
5268  AdmsSensFadType & modelPar_CJE,
5269  bool modelPar_given_CJE,
5270  AdmsSensFadType & modelPar_PE,
5271  bool modelPar_given_PE,
5272  AdmsSensFadType & modelPar_ME,
5273  bool modelPar_given_ME,
5274  AdmsSensFadType & modelPar_AJE,
5275  bool modelPar_given_AJE,
5276  AdmsSensFadType & modelPar_CBCO,
5277  bool modelPar_given_CBCO,
5278  AdmsSensFadType & modelPar_CJC,
5279  bool modelPar_given_CJC,
5280  AdmsSensFadType & modelPar_QCO,
5281  bool modelPar_given_QCO,
5282  AdmsSensFadType & modelPar_CJEP,
5283  bool modelPar_given_CJEP,
5284  AdmsSensFadType & modelPar_PC,
5285  bool modelPar_given_PC,
5286  AdmsSensFadType & modelPar_MC,
5287  bool modelPar_given_MC,
5288  AdmsSensFadType & modelPar_AJC,
5289  bool modelPar_given_AJC,
5290  AdmsSensFadType & modelPar_CJCP,
5291  bool modelPar_given_CJCP,
5292  AdmsSensFadType & modelPar_PS,
5293  bool modelPar_given_PS,
5294  AdmsSensFadType & modelPar_MS,
5295  bool modelPar_given_MS,
5296  AdmsSensFadType & modelPar_AJS,
5297  bool modelPar_given_AJS,
5298  AdmsSensFadType & modelPar_IBEI,
5299  bool modelPar_given_IBEI,
5300  AdmsSensFadType & modelPar_WBE,
5301  bool modelPar_given_WBE,
5302  AdmsSensFadType & modelPar_NEI,
5303  bool modelPar_given_NEI,
5304  AdmsSensFadType & modelPar_IBEN,
5305  bool modelPar_given_IBEN,
5306  AdmsSensFadType & modelPar_NEN,
5307  bool modelPar_given_NEN,
5308  AdmsSensFadType & modelPar_IBCI,
5309  bool modelPar_given_IBCI,
5310  AdmsSensFadType & modelPar_NCI,
5311  bool modelPar_given_NCI,
5312  AdmsSensFadType & modelPar_IBCN,
5313  bool modelPar_given_IBCN,
5314  AdmsSensFadType & modelPar_NCN,
5315  bool modelPar_given_NCN,
5316  AdmsSensFadType & modelPar_AVC1,
5317  bool modelPar_given_AVC1,
5318  AdmsSensFadType & modelPar_AVC2,
5319  bool modelPar_given_AVC2,
5320  AdmsSensFadType & modelPar_ISP,
5321  bool modelPar_given_ISP,
5322  AdmsSensFadType & modelPar_WSP,
5323  bool modelPar_given_WSP,
5324  AdmsSensFadType & modelPar_NFP,
5325  bool modelPar_given_NFP,
5326  AdmsSensFadType & modelPar_IBEIP,
5327  bool modelPar_given_IBEIP,
5328  AdmsSensFadType & modelPar_IBENP,
5329  bool modelPar_given_IBENP,
5330  AdmsSensFadType & modelPar_IBCIP,
5331  bool modelPar_given_IBCIP,
5332  AdmsSensFadType & modelPar_NCIP,
5333  bool modelPar_given_NCIP,
5334  AdmsSensFadType & modelPar_IBCNP,
5335  bool modelPar_given_IBCNP,
5336  AdmsSensFadType & modelPar_NCNP,
5337  bool modelPar_given_NCNP,
5338  AdmsSensFadType & modelPar_VEF,
5339  bool modelPar_given_VEF,
5340  AdmsSensFadType & modelPar_VER,
5341  bool modelPar_given_VER,
5342  AdmsSensFadType & modelPar_IKF,
5343  bool modelPar_given_IKF,
5344  AdmsSensFadType & modelPar_IKR,
5345  bool modelPar_given_IKR,
5346  AdmsSensFadType & modelPar_IKP,
5347  bool modelPar_given_IKP,
5348  AdmsSensFadType & modelPar_TF,
5349  bool modelPar_given_TF,
5350  AdmsSensFadType & modelPar_QTF,
5351  bool modelPar_given_QTF,
5352  AdmsSensFadType & modelPar_XTF,
5353  bool modelPar_given_XTF,
5354  AdmsSensFadType & modelPar_VTF,
5355  bool modelPar_given_VTF,
5356  AdmsSensFadType & modelPar_ITF,
5357  bool modelPar_given_ITF,
5358  AdmsSensFadType & modelPar_TR,
5359  bool modelPar_given_TR,
5360  AdmsSensFadType & modelPar_TD,
5361  bool modelPar_given_TD,
5362  AdmsSensFadType & modelPar_KFN,
5363  bool modelPar_given_KFN,
5364  AdmsSensFadType & modelPar_AFN,
5365  bool modelPar_given_AFN,
5366  AdmsSensFadType & modelPar_BFN,
5367  bool modelPar_given_BFN,
5368  AdmsSensFadType & modelPar_XRE,
5369  bool modelPar_given_XRE,
5370  AdmsSensFadType & modelPar_XRBI,
5371  bool modelPar_given_XRBI,
5372  AdmsSensFadType & modelPar_XRCI,
5373  bool modelPar_given_XRCI,
5374  AdmsSensFadType & modelPar_XRS,
5375  bool modelPar_given_XRS,
5376  AdmsSensFadType & modelPar_XVO,
5377  bool modelPar_given_XVO,
5378  AdmsSensFadType & modelPar_EA,
5379  bool modelPar_given_EA,
5380  AdmsSensFadType & modelPar_EAIE,
5381  bool modelPar_given_EAIE,
5382  AdmsSensFadType & modelPar_EAIC,
5383  bool modelPar_given_EAIC,
5384  AdmsSensFadType & modelPar_EAIS,
5385  bool modelPar_given_EAIS,
5386  AdmsSensFadType & modelPar_EANE,
5387  bool modelPar_given_EANE,
5388  AdmsSensFadType & modelPar_EANC,
5389  bool modelPar_given_EANC,
5390  AdmsSensFadType & modelPar_EANS,
5391  bool modelPar_given_EANS,
5392  AdmsSensFadType & modelPar_XIS,
5393  bool modelPar_given_XIS,
5394  AdmsSensFadType & modelPar_XII,
5395  bool modelPar_given_XII,
5396  AdmsSensFadType & modelPar_XIN,
5397  bool modelPar_given_XIN,
5398  AdmsSensFadType & modelPar_TNF,
5399  bool modelPar_given_TNF,
5400  AdmsSensFadType & modelPar_TAVC,
5401  bool modelPar_given_TAVC,
5402  AdmsSensFadType & modelPar_RTH,
5403  bool modelPar_given_RTH,
5404  AdmsSensFadType & modelPar_CTH,
5405  bool modelPar_given_CTH,
5406  AdmsSensFadType & modelPar_VRT,
5407  bool modelPar_given_VRT,
5408  AdmsSensFadType & modelPar_ART,
5409  bool modelPar_given_ART,
5410  AdmsSensFadType & modelPar_CCSO,
5411  bool modelPar_given_CCSO,
5412  AdmsSensFadType & modelPar_QBM,
5413  bool modelPar_given_QBM,
5414  AdmsSensFadType & modelPar_NKF,
5415  bool modelPar_given_NKF,
5416  AdmsSensFadType & modelPar_XIKF,
5417  bool modelPar_given_XIKF,
5418  AdmsSensFadType & modelPar_XRCX,
5419  bool modelPar_given_XRCX,
5420  AdmsSensFadType & modelPar_XRBX,
5421  bool modelPar_given_XRBX,
5422  AdmsSensFadType & modelPar_XRBP,
5423  bool modelPar_given_XRBP,
5424  AdmsSensFadType & modelPar_ISRR,
5425  bool modelPar_given_ISRR,
5426  AdmsSensFadType & modelPar_XISR,
5427  bool modelPar_given_XISR,
5428  AdmsSensFadType & modelPar_DEAR,
5429  bool modelPar_given_DEAR,
5430  AdmsSensFadType & modelPar_EAP,
5431  bool modelPar_given_EAP,
5432  AdmsSensFadType & modelPar_VBBE,
5433  bool modelPar_given_VBBE,
5434  AdmsSensFadType & modelPar_NBBE,
5435  bool modelPar_given_NBBE,
5436  AdmsSensFadType & modelPar_IBBE,
5437  bool modelPar_given_IBBE,
5438  AdmsSensFadType & modelPar_TVBBE1,
5439  bool modelPar_given_TVBBE1,
5440  AdmsSensFadType & modelPar_TVBBE2,
5441  bool modelPar_given_TVBBE2,
5442  AdmsSensFadType & modelPar_TNBBE,
5443  bool modelPar_given_TNBBE,
5444  AdmsSensFadType & modelPar_EBBE,
5445  bool modelPar_given_EBBE,
5446  AdmsSensFadType & modelPar_DTEMP,
5447  bool modelPar_given_DTEMP,
5448  AdmsSensFadType & modelPar_VERS,
5449  bool modelPar_given_VERS,
5450  AdmsSensFadType & modelPar_VREV,
5451  bool modelPar_given_VREV,
5452  // non-reals (including hidden)
5453  int modelPar_dtype,
5454  double admsTemperature)
5455 {
5456 }
5457 
5458 
5459 
5460 //-----------------------------------------------------------------------------
5461 // Function : evaluateModelEquations
5462 // Purpose : Evaluate the main module block. Similar to
5463 // updateIntermediateVars, but takes all instance and model
5464 // parameters and variables as arguments instead of using
5465 // the ones stored in the objects.
5466 // Special Notes : specific for sensitivity use
5467 // Scope : public
5468 // Creator : admsXml
5469 // Creation Date :
5470 //-----------------------------------------------------------------------------
5471 void evaluateModelEquations(
5472  std::vector <double> & probeVars,
5473  // probe constants
5474  const int admsProbeID_V_ci_ei,
5475  const int admsProbeID_V_b_c,
5476  const int admsProbeID_V_bp_cx,
5477  const int admsProbeID_V_e_ei,
5478  const int admsProbeID_V_b_bx,
5479  const int admsProbeID_V_bx_bi,
5480  const int admsProbeID_V_cx_ci,
5481  const int admsProbeID_V_c_cx,
5482  const int admsProbeID_V_b_e,
5483  const int admsProbeID_V_dt_GND,
5484  const int admsProbeID_V_bx_bp,
5485  const int admsProbeID_V_bi_cx,
5486  const int admsProbeID_V_bx_ei,
5487  const int admsProbeID_V_bi_ci,
5488  const int admsProbeID_V_bi_ei,
5489  // node constants
5490  const int admsNodeID_c,
5491  const int admsNodeID_b,
5492  const int admsNodeID_e,
5493  const int admsNodeID_dt,
5494  const int admsNodeID_cx,
5495  const int admsNodeID_ci,
5496  const int admsNodeID_bx,
5497  const int admsNodeID_bi,
5498  const int admsNodeID_ei,
5499  const int admsNodeID_bp,
5500  // instance parameters
5501  // reals
5502  AdmsSensFadType & instancePar_DTEMP,
5503  bool instancePar_given_DTEMP,
5504  // non-reals(including hidden)
5505  int instancePar_M,
5506  bool instancePar_given_M,
5507  // model parameters
5508  // reals
5509  AdmsSensFadType & modelPar_TNOM,
5510  bool modelPar_given_TNOM,
5511  AdmsSensFadType & modelPar_RCX,
5512  bool modelPar_given_RCX,
5513  AdmsSensFadType & modelPar_RCI,
5514  bool modelPar_given_RCI,
5515  AdmsSensFadType & modelPar_VO,
5516  bool modelPar_given_VO,
5517  AdmsSensFadType & modelPar_GAMM,
5518  bool modelPar_given_GAMM,
5519  AdmsSensFadType & modelPar_HRCF,
5520  bool modelPar_given_HRCF,
5521  AdmsSensFadType & modelPar_RBX,
5522  bool modelPar_given_RBX,
5523  AdmsSensFadType & modelPar_RBI,
5524  bool modelPar_given_RBI,
5525  AdmsSensFadType & modelPar_RE,
5526  bool modelPar_given_RE,
5527  AdmsSensFadType & modelPar_RS,
5528  bool modelPar_given_RS,
5529  AdmsSensFadType & modelPar_RBP,
5530  bool modelPar_given_RBP,
5531  AdmsSensFadType & modelPar_IS,
5532  bool modelPar_given_IS,
5533  AdmsSensFadType & modelPar_NF,
5534  bool modelPar_given_NF,
5535  AdmsSensFadType & modelPar_NR,
5536  bool modelPar_given_NR,
5537  AdmsSensFadType & modelPar_FC,
5538  bool modelPar_given_FC,
5539  AdmsSensFadType & modelPar_CBEO,
5540  bool modelPar_given_CBEO,
5541  AdmsSensFadType & modelPar_CJE,
5542  bool modelPar_given_CJE,
5543  AdmsSensFadType & modelPar_PE,
5544  bool modelPar_given_PE,
5545  AdmsSensFadType & modelPar_ME,
5546  bool modelPar_given_ME,
5547  AdmsSensFadType & modelPar_AJE,
5548  bool modelPar_given_AJE,
5549  AdmsSensFadType & modelPar_CBCO,
5550  bool modelPar_given_CBCO,
5551  AdmsSensFadType & modelPar_CJC,
5552  bool modelPar_given_CJC,
5553  AdmsSensFadType & modelPar_QCO,
5554  bool modelPar_given_QCO,
5555  AdmsSensFadType & modelPar_CJEP,
5556  bool modelPar_given_CJEP,
5557  AdmsSensFadType & modelPar_PC,
5558  bool modelPar_given_PC,
5559  AdmsSensFadType & modelPar_MC,
5560  bool modelPar_given_MC,
5561  AdmsSensFadType & modelPar_AJC,
5562  bool modelPar_given_AJC,
5563  AdmsSensFadType & modelPar_CJCP,
5564  bool modelPar_given_CJCP,
5565  AdmsSensFadType & modelPar_PS,
5566  bool modelPar_given_PS,
5567  AdmsSensFadType & modelPar_MS,
5568  bool modelPar_given_MS,
5569  AdmsSensFadType & modelPar_AJS,
5570  bool modelPar_given_AJS,
5571  AdmsSensFadType & modelPar_IBEI,
5572  bool modelPar_given_IBEI,
5573  AdmsSensFadType & modelPar_WBE,
5574  bool modelPar_given_WBE,
5575  AdmsSensFadType & modelPar_NEI,
5576  bool modelPar_given_NEI,
5577  AdmsSensFadType & modelPar_IBEN,
5578  bool modelPar_given_IBEN,
5579  AdmsSensFadType & modelPar_NEN,
5580  bool modelPar_given_NEN,
5581  AdmsSensFadType & modelPar_IBCI,
5582  bool modelPar_given_IBCI,
5583  AdmsSensFadType & modelPar_NCI,
5584  bool modelPar_given_NCI,
5585  AdmsSensFadType & modelPar_IBCN,
5586  bool modelPar_given_IBCN,
5587  AdmsSensFadType & modelPar_NCN,
5588  bool modelPar_given_NCN,
5589  AdmsSensFadType & modelPar_AVC1,
5590  bool modelPar_given_AVC1,
5591  AdmsSensFadType & modelPar_AVC2,
5592  bool modelPar_given_AVC2,
5593  AdmsSensFadType & modelPar_ISP,
5594  bool modelPar_given_ISP,
5595  AdmsSensFadType & modelPar_WSP,
5596  bool modelPar_given_WSP,
5597  AdmsSensFadType & modelPar_NFP,
5598  bool modelPar_given_NFP,
5599  AdmsSensFadType & modelPar_IBEIP,
5600  bool modelPar_given_IBEIP,
5601  AdmsSensFadType & modelPar_IBENP,
5602  bool modelPar_given_IBENP,
5603  AdmsSensFadType & modelPar_IBCIP,
5604  bool modelPar_given_IBCIP,
5605  AdmsSensFadType & modelPar_NCIP,
5606  bool modelPar_given_NCIP,
5607  AdmsSensFadType & modelPar_IBCNP,
5608  bool modelPar_given_IBCNP,
5609  AdmsSensFadType & modelPar_NCNP,
5610  bool modelPar_given_NCNP,
5611  AdmsSensFadType & modelPar_VEF,
5612  bool modelPar_given_VEF,
5613  AdmsSensFadType & modelPar_VER,
5614  bool modelPar_given_VER,
5615  AdmsSensFadType & modelPar_IKF,
5616  bool modelPar_given_IKF,
5617  AdmsSensFadType & modelPar_IKR,
5618  bool modelPar_given_IKR,
5619  AdmsSensFadType & modelPar_IKP,
5620  bool modelPar_given_IKP,
5621  AdmsSensFadType & modelPar_TF,
5622  bool modelPar_given_TF,
5623  AdmsSensFadType & modelPar_QTF,
5624  bool modelPar_given_QTF,
5625  AdmsSensFadType & modelPar_XTF,
5626  bool modelPar_given_XTF,
5627  AdmsSensFadType & modelPar_VTF,
5628  bool modelPar_given_VTF,
5629  AdmsSensFadType & modelPar_ITF,
5630  bool modelPar_given_ITF,
5631  AdmsSensFadType & modelPar_TR,
5632  bool modelPar_given_TR,
5633  AdmsSensFadType & modelPar_TD,
5634  bool modelPar_given_TD,
5635  AdmsSensFadType & modelPar_KFN,
5636  bool modelPar_given_KFN,
5637  AdmsSensFadType & modelPar_AFN,
5638  bool modelPar_given_AFN,
5639  AdmsSensFadType & modelPar_BFN,
5640  bool modelPar_given_BFN,
5641  AdmsSensFadType & modelPar_XRE,
5642  bool modelPar_given_XRE,
5643  AdmsSensFadType & modelPar_XRBI,
5644  bool modelPar_given_XRBI,
5645  AdmsSensFadType & modelPar_XRCI,
5646  bool modelPar_given_XRCI,
5647  AdmsSensFadType & modelPar_XRS,
5648  bool modelPar_given_XRS,
5649  AdmsSensFadType & modelPar_XVO,
5650  bool modelPar_given_XVO,
5651  AdmsSensFadType & modelPar_EA,
5652  bool modelPar_given_EA,
5653  AdmsSensFadType & modelPar_EAIE,
5654  bool modelPar_given_EAIE,
5655  AdmsSensFadType & modelPar_EAIC,
5656  bool modelPar_given_EAIC,
5657  AdmsSensFadType & modelPar_EAIS,
5658  bool modelPar_given_EAIS,
5659  AdmsSensFadType & modelPar_EANE,
5660  bool modelPar_given_EANE,
5661  AdmsSensFadType & modelPar_EANC,
5662  bool modelPar_given_EANC,
5663  AdmsSensFadType & modelPar_EANS,
5664  bool modelPar_given_EANS,
5665  AdmsSensFadType & modelPar_XIS,
5666  bool modelPar_given_XIS,
5667  AdmsSensFadType & modelPar_XII,
5668  bool modelPar_given_XII,
5669  AdmsSensFadType & modelPar_XIN,
5670  bool modelPar_given_XIN,
5671  AdmsSensFadType & modelPar_TNF,
5672  bool modelPar_given_TNF,
5673  AdmsSensFadType & modelPar_TAVC,
5674  bool modelPar_given_TAVC,
5675  AdmsSensFadType & modelPar_RTH,
5676  bool modelPar_given_RTH,
5677  AdmsSensFadType & modelPar_CTH,
5678  bool modelPar_given_CTH,
5679  AdmsSensFadType & modelPar_VRT,
5680  bool modelPar_given_VRT,
5681  AdmsSensFadType & modelPar_ART,
5682  bool modelPar_given_ART,
5683  AdmsSensFadType & modelPar_CCSO,
5684  bool modelPar_given_CCSO,
5685  AdmsSensFadType & modelPar_QBM,
5686  bool modelPar_given_QBM,
5687  AdmsSensFadType & modelPar_NKF,
5688  bool modelPar_given_NKF,
5689  AdmsSensFadType & modelPar_XIKF,
5690  bool modelPar_given_XIKF,
5691  AdmsSensFadType & modelPar_XRCX,
5692  bool modelPar_given_XRCX,
5693  AdmsSensFadType & modelPar_XRBX,
5694  bool modelPar_given_XRBX,
5695  AdmsSensFadType & modelPar_XRBP,
5696  bool modelPar_given_XRBP,
5697  AdmsSensFadType & modelPar_ISRR,
5698  bool modelPar_given_ISRR,
5699  AdmsSensFadType & modelPar_XISR,
5700  bool modelPar_given_XISR,
5701  AdmsSensFadType & modelPar_DEAR,
5702  bool modelPar_given_DEAR,
5703  AdmsSensFadType & modelPar_EAP,
5704  bool modelPar_given_EAP,
5705  AdmsSensFadType & modelPar_VBBE,
5706  bool modelPar_given_VBBE,
5707  AdmsSensFadType & modelPar_NBBE,
5708  bool modelPar_given_NBBE,
5709  AdmsSensFadType & modelPar_IBBE,
5710  bool modelPar_given_IBBE,
5711  AdmsSensFadType & modelPar_TVBBE1,
5712  bool modelPar_given_TVBBE1,
5713  AdmsSensFadType & modelPar_TVBBE2,
5714  bool modelPar_given_TVBBE2,
5715  AdmsSensFadType & modelPar_TNBBE,
5716  bool modelPar_given_TNBBE,
5717  AdmsSensFadType & modelPar_EBBE,
5718  bool modelPar_given_EBBE,
5719  AdmsSensFadType & modelPar_DTEMP,
5720  bool modelPar_given_DTEMP,
5721  AdmsSensFadType & modelPar_VERS,
5722  bool modelPar_given_VERS,
5723  AdmsSensFadType & modelPar_VREV,
5724  bool modelPar_given_VREV,
5725  // non-reals (including hidden)
5726  int modelPar_dtype,
5727  // basic variables
5728  double admsTemperature, double adms_vt_nom, double gmin, std::vector <AdmsSensFadType> & staticContributions, std::vector <AdmsSensFadType> & dynamicContributions, const Instance & theInstance)
5729 {
5730 
5731  // Local variables
5732  AdmsSensFadType Qcth;
5733  AdmsSensFadType Irth;
5734  AdmsSensFadType Ith;
5735  AdmsSensFadType Qbco;
5736  AdmsSensFadType Qbeo;
5737  AdmsSensFadType Qbep;
5738  AdmsSensFadType Qbcx;
5739  AdmsSensFadType Qbc;
5740  AdmsSensFadType Qbex;
5741  AdmsSensFadType Qbe;
5742  AdmsSensFadType tff;
5743  AdmsSensFadType tff_exparg;
5744  AdmsSensFadType mIf;
5745  AdmsSensFadType rIf;
5746  AdmsSensFadType sgIf;
5747  AdmsSensFadType Irbp;
5748  AdmsSensFadType Ire;
5749  AdmsSensFadType Irbi;
5750  AdmsSensFadType Irbx;
5751  AdmsSensFadType Irci;
5752  AdmsSensFadType derf;
5753  AdmsSensFadType Iohm;
5754  AdmsSensFadType rKp1;
5755  AdmsSensFadType Kbcx;
5756  AdmsSensFadType Kbci;
5757  AdmsSensFadType expx_vbcx;
5758  AdmsSensFadType argx_vbcx;
5759  AdmsSensFadType Ircx;
5760  AdmsSensFadType Ibc;
5761  AdmsSensFadType Igc;
5762  AdmsSensFadType avalf;
5763  AdmsSensFadType avalf_exparg;
5764  AdmsSensFadType Ibep;
5765  AdmsSensFadType expn_vbep;
5766  AdmsSensFadType argn_vbep;
5767  AdmsSensFadType Ibcj;
5768  AdmsSensFadType expn_vbci;
5769  AdmsSensFadType argn_vbci;
5770  AdmsSensFadType Ibex;
5771  AdmsSensFadType Ibe;
5772  AdmsSensFadType expx_vbei;
5773  AdmsSensFadType argx_vbei;
5774  AdmsSensFadType expn_vbei;
5775  AdmsSensFadType argn_vbei;
5776  AdmsSensFadType argi_vbex;
5777  AdmsSensFadType expi_vbex;
5778  AdmsSensFadType argn_vbex;
5779  AdmsSensFadType expn_vbex;
5780  AdmsSensFadType argx_vbex;
5781  AdmsSensFadType expx_vbex;
5782  AdmsSensFadType qbp;
5783  AdmsSensFadType q2p;
5784  AdmsSensFadType Ifp;
5785  AdmsSensFadType expx_vbci;
5786  AdmsSensFadType argx_vbci;
5787  AdmsSensFadType expi_vbep;
5788  AdmsSensFadType argi_vbep;
5789  AdmsSensFadType Itzf;
5790  AdmsSensFadType Itzr;
5791  AdmsSensFadType qb;
5792  AdmsSensFadType q2;
5793  AdmsSensFadType q1;
5794  AdmsSensFadType q1z;
5795  AdmsSensFadType Iri;
5796  AdmsSensFadType expi_vbci;
5797  AdmsSensFadType argi_vbci;
5798  AdmsSensFadType Ifi;
5799  AdmsSensFadType expi_vbei;
5800  AdmsSensFadType argi_vbei;
5801  AdmsSensFadType qdbep;
5802  AdmsSensFadType qhi_vbep;
5803  AdmsSensFadType qlo_vbep;
5804  AdmsSensFadType dvh_vbep;
5805  AdmsSensFadType ql_vbep;
5806  AdmsSensFadType cl_vbep;
5807  AdmsSensFadType sel_vbep;
5808  AdmsSensFadType vl_vbep;
5809  AdmsSensFadType vnl_vbep;
5810  AdmsSensFadType vn_vbep;
5811  AdmsSensFadType mv_vbep;
5812  AdmsSensFadType dv_vbep;
5813  AdmsSensFadType qdbc;
5814  AdmsSensFadType qhi_vbci;
5815  AdmsSensFadType qlo_vbci;
5816  AdmsSensFadType dvh_vbci;
5817  AdmsSensFadType ql_vbci;
5818  AdmsSensFadType cl_vbci;
5819  AdmsSensFadType cmx;
5820  AdmsSensFadType crt;
5821  AdmsSensFadType sel_vbci;
5822  AdmsSensFadType vl_vbci;
5823  AdmsSensFadType vnl_vbci;
5824  AdmsSensFadType vn_vbci;
5825  AdmsSensFadType qlo0;
5826  AdmsSensFadType vnl0;
5827  AdmsSensFadType vn0;
5828  AdmsSensFadType mv_vbci;
5829  AdmsSensFadType dv_vbci;
5830  AdmsSensFadType qdbex;
5831  AdmsSensFadType qhi_vbex;
5832  AdmsSensFadType qlo_vbex;
5833  AdmsSensFadType dvh_vbex;
5834  AdmsSensFadType vl_vbex;
5835  AdmsSensFadType mv_vbex;
5836  AdmsSensFadType dv_vbex;
5837  AdmsSensFadType qdbe;
5838  AdmsSensFadType qhi_vbei;
5839  AdmsSensFadType qlo_vbei;
5840  AdmsSensFadType pwq;
5841  AdmsSensFadType dvh_vbei;
5842  AdmsSensFadType vl_vbei;
5843  AdmsSensFadType mv_vbei;
5844  AdmsSensFadType dv_vbei;
5845  AdmsSensFadType q0;
5846  AdmsSensFadType vl0;
5847  AdmsSensFadType mv0;
5848  AdmsSensFadType dv0;
5849  AdmsSensFadType slTF;
5850  AdmsSensFadType IITF;
5851  AdmsSensFadType IVTF;
5852  AdmsSensFadType IHRCF;
5853  AdmsSensFadType IVO;
5854  AdmsSensFadType IIKP;
5855  AdmsSensFadType IIKR;
5856  AdmsSensFadType IIKF;
5857  AdmsSensFadType IVER;
5858  AdmsSensFadType IVEF;
5859  AdmsSensFadType EBBEatT;
5860  AdmsSensFadType VOatT;
5861  AdmsSensFadType GAMMatT;
5862  AdmsSensFadType CJCPatT;
5863  AdmsSensFadType CJEPatT;
5864  AdmsSensFadType CJCatT;
5865  AdmsSensFadType CJEatT;
5866  AdmsSensFadType PSatT;
5867  AdmsSensFadType PCatT;
5868  AdmsSensFadType PEatT;
5869  AdmsSensFadType psiin;
5870  AdmsSensFadType psiio;
5871  AdmsSensFadType NBBEatT;
5872  AdmsSensFadType VBBEatT;
5873  AdmsSensFadType AVC2atT;
5874  AdmsSensFadType NRatT;
5875  AdmsSensFadType NFatT;
5876  AdmsSensFadType IBCNPatT;
5877  AdmsSensFadType IBCIPatT;
5878  AdmsSensFadType IBENPatT;
5879  AdmsSensFadType IBEIPatT;
5880  AdmsSensFadType IBCNatT;
5881  AdmsSensFadType IBCIatT;
5882  AdmsSensFadType IBENatT;
5883  AdmsSensFadType IBEIatT;
5884  AdmsSensFadType ISPatT;
5885  AdmsSensFadType ISRRatT;
5886  AdmsSensFadType ISatT;
5887  AdmsSensFadType RBPatT;
5888  AdmsSensFadType RSatT;
5889  AdmsSensFadType REatT;
5890  AdmsSensFadType RBIatT;
5891  AdmsSensFadType RBXatT;
5892  AdmsSensFadType RCIatT;
5893  AdmsSensFadType RCXatT;
5894  AdmsSensFadType IKFatT;
5895  AdmsSensFadType dT;
5896  AdmsSensFadType rT;
5897  AdmsSensFadType Vtv;
5898  AdmsSensFadType Tdev;
5899  AdmsSensFadType Tini;
5900  AdmsSensFadType Vcei;
5901  AdmsSensFadType Vbc;
5902  AdmsSensFadType Vrbp;
5903  AdmsSensFadType Vre;
5904  AdmsSensFadType Vrbx;
5905  AdmsSensFadType Vrbi;
5906  AdmsSensFadType Vrci;
5907  AdmsSensFadType Vrcx;
5908  AdmsSensFadType Vbe;
5909  double Vrth;
5910  AdmsSensFadType Vbep;
5911  AdmsSensFadType Vbcx;
5912  AdmsSensFadType Vbex;
5913  AdmsSensFadType Vbci;
5914  AdmsSensFadType Vbei;
5915  AdmsSensFadType tVCrit;
5916 
5917 
5918  // -- code converted from analog/code block
5919  tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*modelPar_IS))));
5920  Vbei = probeVars[admsProbeID_V_bi_ei];
5921 
5922  Vbci = probeVars[admsProbeID_V_bi_ci];
5923 
5924  Vbex = probeVars[admsProbeID_V_bx_ei];
5925 
5926  Vbcx = probeVars[admsProbeID_V_bi_cx];
5927 
5928  Vbep = probeVars[admsProbeID_V_bx_bp];
5929 
5930  Vrth = probeVars[admsProbeID_V_dt_GND];
5931 
5932  Vbe = probeVars[admsProbeID_V_b_e];
5933 
5934  Vrcx = (modelPar_dtype*(probeVars[admsProbeID_V_c_cx]));
5935  Vrci = (modelPar_dtype*(probeVars[admsProbeID_V_cx_ci]));
5936  Vrbi = (modelPar_dtype*(probeVars[admsProbeID_V_bx_bi]));
5937  Vrbx = (modelPar_dtype*(probeVars[admsProbeID_V_b_bx]));
5938  Vre = (modelPar_dtype*(probeVars[admsProbeID_V_e_ei]));
5939  Vrbp = (modelPar_dtype*(probeVars[admsProbeID_V_bp_cx]));
5940  Vbc = (modelPar_dtype*(probeVars[admsProbeID_V_b_c]));
5941  Vcei = (modelPar_dtype*(probeVars[admsProbeID_V_ci_ei]));
5942  Tini = (2.731500e+02+modelPar_TNOM);
5943  Tdev = ((admsTemperature+instancePar_DTEMP)+Vrth);
5944  Vtv = ((1.380662e-23*Tdev)/1.602189e-19);
5945  rT = (Tdev/Tini);
5946  dT = (Tdev-Tini);
5947  IKFatT = (modelPar_IKF*pow(rT,modelPar_XIKF));
5948  RCXatT = (modelPar_RCX*pow(rT,modelPar_XRCX));
5949  RCIatT = (modelPar_RCI*pow(rT,modelPar_XRCI));
5950  RBXatT = (modelPar_RBX*pow(rT,modelPar_XRBX));
5951  RBIatT = (modelPar_RBI*pow(rT,modelPar_XRBI));
5952  REatT = (modelPar_RE*pow(rT,modelPar_XRE));
5953  RSatT = (modelPar_RS*pow(rT,modelPar_XRS));
5954  RBPatT = (modelPar_RBP*pow(rT,modelPar_XRBP));
5955  ISatT = (modelPar_IS*pow((pow(rT,modelPar_XIS)*exp((((-modelPar_EA)*(1.0-rT))/Vtv))),(1.0/modelPar_NF)));
5956  ISRRatT = (modelPar_ISRR*pow((pow(rT,modelPar_XISR)*exp((((-modelPar_DEAR)*(1.0-rT))/Vtv))),(1.0/modelPar_NR)));
5957  ISPatT = (modelPar_ISP*pow((pow(rT,modelPar_XIS)*exp((((-modelPar_EAP)*(1.0-rT))/Vtv))),(1.0/modelPar_NFP)));
5958  IBEIatT = (modelPar_IBEI*pow((pow(rT,modelPar_XII)*exp((((-modelPar_EAIE)*(1.0-rT))/Vtv))),(1.0/modelPar_NEI)));
5959  IBENatT = (modelPar_IBEN*pow((pow(rT,modelPar_XIN)*exp((((-modelPar_EANE)*(1.0-rT))/Vtv))),(1.0/modelPar_NEN)));
5960  IBCIatT = (modelPar_IBCI*pow((pow(rT,modelPar_XII)*exp((((-modelPar_EAIC)*(1.0-rT))/Vtv))),(1.0/modelPar_NCI)));
5961  IBCNatT = (modelPar_IBCN*pow((pow(rT,modelPar_XIN)*exp((((-modelPar_EANC)*(1.0-rT))/Vtv))),(1.0/modelPar_NCN)));
5962  IBEIPatT = (modelPar_IBEIP*pow((pow(rT,modelPar_XII)*exp((((-modelPar_EAIC)*(1.0-rT))/Vtv))),(1.0/modelPar_NCI)));
5963  IBENPatT = (modelPar_IBENP*pow((pow(rT,modelPar_XIN)*exp((((-modelPar_EANC)*(1.0-rT))/Vtv))),(1.0/modelPar_NCN)));
5964  IBCIPatT = (modelPar_IBCIP*pow((pow(rT,modelPar_XII)*exp((((-modelPar_EAIS)*(1.0-rT))/Vtv))),(1.0/modelPar_NCIP)));
5965  IBCNPatT = (modelPar_IBCNP*pow((pow(rT,modelPar_XIN)*exp((((-modelPar_EANS)*(1.0-rT))/Vtv))),(1.0/modelPar_NCNP)));
5966  NFatT = (modelPar_NF*(1.0+(dT*modelPar_TNF)));
5967  NRatT = (modelPar_NR*(1.0+(dT*modelPar_TNF)));
5968  AVC2atT = (modelPar_AVC2*(1.0+(dT*modelPar_TAVC)));
5969  VBBEatT = (modelPar_VBBE*(1.0+(dT*(modelPar_TVBBE1+(dT*modelPar_TVBBE2)))));
5970  NBBEatT = (modelPar_NBBE*(1.0+(dT*modelPar_TNBBE)));
5971  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*modelPar_PE)*rT)/Vtv))-exp(((((-0.5)*modelPar_PE)*rT)/Vtv)))));
5972  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-(modelPar_EAIE*(rT-1.0)));
5973  PEatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
5974  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*modelPar_PC)*rT)/Vtv))-exp(((((-0.5)*modelPar_PC)*rT)/Vtv)))));
5975  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-(modelPar_EAIC*(rT-1.0)));
5976  PCatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
5977  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*modelPar_PS)*rT)/Vtv))-exp(((((-0.5)*modelPar_PS)*rT)/Vtv)))));
5978  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-(modelPar_EAIS*(rT-1.0)));
5979  PSatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
5980  CJEatT = (modelPar_CJE*pow((modelPar_PE/PEatT),modelPar_ME));
5981  CJCatT = (modelPar_CJC*pow((modelPar_PC/PCatT),modelPar_MC));
5982  CJEPatT = (modelPar_CJEP*pow((modelPar_PC/PCatT),modelPar_MC));
5983  CJCPatT = (modelPar_CJCP*pow((modelPar_PS/PSatT),modelPar_MS));
5984  GAMMatT = ((modelPar_GAMM*pow(rT,modelPar_XIS))*exp((((-modelPar_EA)*(1.0-rT))/Vtv)));
5985  VOatT = (modelPar_VO*pow(rT,modelPar_XVO));
5986  EBBEatT = exp(((-VBBEatT)/(NBBEatT*Vtv)));
5987  IVEF = adms_ternary_op<AdmsSensFadType>((modelPar_VEF>0.0),(1.0/modelPar_VEF),0.0);
5988  IVER = adms_ternary_op<AdmsSensFadType>((modelPar_VER>0.0),(1.0/modelPar_VER),0.0);
5989  IIKF = 0.0;
5990  if ((modelPar_IKF>0.0))
5991  {
5992  IIKF = (1.0/IKFatT);
5993  }
5994  IIKR = adms_ternary_op<AdmsSensFadType>((modelPar_IKR>0.0),(1.0/modelPar_IKR),0.0);
5995  IIKP = adms_ternary_op<AdmsSensFadType>((modelPar_IKP>0.0),(1.0/modelPar_IKP),0.0);
5996  IVO = 0.0;
5997  if ((modelPar_VO>0.0))
5998  {
5999  IVO = (1.0/VOatT);
6000  }
6001  IHRCF = adms_ternary_op<AdmsSensFadType>((modelPar_HRCF>0.0),(1.0/modelPar_HRCF),0.0);
6002  IVTF = adms_ternary_op<AdmsSensFadType>((modelPar_VTF>0.0),(1.0/modelPar_VTF),0.0);
6003  IITF = adms_ternary_op<AdmsSensFadType>((modelPar_ITF>0.0),(1.0/modelPar_ITF),0.0);
6004  slTF = ((modelPar_ITF>0.0)?0.0:1.0);
6005  dv0 = ((-PEatT)*modelPar_FC);
6006  if ((modelPar_AJE<=0.0))
6007  {
6008  dvh_vbei = (Vbei+dv0);
6009  if ((dvh_vbei>0.0))
6010  {
6011  pwq = pow((1.0-modelPar_FC),((-1.0)-modelPar_ME));
6012  qlo_vbei = ((PEatT*(1.0-((pwq*(1.0-modelPar_FC))*(1.0-modelPar_FC))))/(1.0-modelPar_ME));
6013  qhi_vbei = ((dvh_vbei*((1.0-modelPar_FC)+(((0.5*modelPar_ME)*dvh_vbei)/PEatT)))*pwq);
6014  }
6015  else
6016  {
6017  qlo_vbei = ((PEatT*(1.0-pow((1.0-(Vbei/PEatT)),(1.0-modelPar_ME))))/(1.0-modelPar_ME));
6018  qhi_vbei = 0.0;
6019  }
6020  qdbe = (qlo_vbei+qhi_vbei);
6021  }
6022  else
6023  {
6024  mv0 = sqrt(((dv0*dv0)+((4*modelPar_AJE)*modelPar_AJE)));
6025  vl0 = ((-0.5)*(dv0+mv0));
6026  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-modelPar_ME)))/(1.0-modelPar_ME));
6027  dv_vbei = (Vbei+dv0);
6028  mv_vbei = sqrt(((dv_vbei*dv_vbei)+((4*modelPar_AJE)*modelPar_AJE)));
6029  vl_vbei = ((0.5*(dv_vbei-mv_vbei))-dv0);
6030  qlo_vbei = (((-PEatT)*pow((1.0-(vl_vbei/PEatT)),(1.0-modelPar_ME)))/(1.0-modelPar_ME));
6031  qdbe = ((qlo_vbei+(pow((1.0-modelPar_FC),(-modelPar_ME))*((Vbei-vl_vbei)+vl0)))-q0);
6032  }
6033  dv0 = ((-PEatT)*modelPar_FC);
6034  if ((modelPar_AJE<=0.0))
6035  {
6036  dvh_vbex = (Vbex+dv0);
6037  if ((dvh_vbex>0.0))
6038  {
6039  pwq = pow((1.0-modelPar_FC),((-1.0)-modelPar_ME));
6040  qlo_vbex = ((PEatT*(1.0-((pwq*(1.0-modelPar_FC))*(1.0-modelPar_FC))))/(1.0-modelPar_ME));
6041  qhi_vbex = ((dvh_vbex*((1.0-modelPar_FC)+(((0.5*modelPar_ME)*dvh_vbex)/PEatT)))*pwq);
6042  }
6043  else
6044  {
6045  qlo_vbex = ((PEatT*(1.0-pow((1.0-(Vbex/PEatT)),(1.0-modelPar_ME))))/(1.0-modelPar_ME));
6046  qhi_vbex = 0.0;
6047  }
6048  qdbex = (qlo_vbex+qhi_vbex);
6049  }
6050  else
6051  {
6052  mv0 = sqrt(((dv0*dv0)+((4*modelPar_AJE)*modelPar_AJE)));
6053  vl0 = ((-0.5)*(dv0+mv0));
6054  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-modelPar_ME)))/(1.0-modelPar_ME));
6055  dv_vbex = (Vbex+dv0);
6056  mv_vbex = sqrt(((dv_vbex*dv_vbex)+((4*modelPar_AJE)*modelPar_AJE)));
6057  vl_vbex = ((0.5*(dv_vbex-mv_vbex))-dv0);
6058  qlo_vbex = (((-PEatT)*pow((1.0-(vl_vbex/PEatT)),(1.0-modelPar_ME)))/(1.0-modelPar_ME));
6059  qdbex = ((qlo_vbex+(pow((1.0-modelPar_FC),(-modelPar_ME))*((Vbex-vl_vbex)+vl0)))-q0);
6060  }
6061  dv0 = ((-PCatT)*modelPar_FC);
6062  if ((modelPar_AJC<=0.0))
6063  {
6064  dvh_vbci = (Vbci+dv0);
6065  if ((dvh_vbci>0.0))
6066  {
6067  pwq = pow((1.0-modelPar_FC),((-1.0)-modelPar_MC));
6068  qlo_vbci = ((PCatT*(1.0-((pwq*(1.0-modelPar_FC))*(1.0-modelPar_FC))))/(1.0-modelPar_MC));
6069  qhi_vbci = ((dvh_vbci*((1.0-modelPar_FC)+(((0.5*modelPar_MC)*dvh_vbci)/PCatT)))*pwq);
6070  }
6071  else
6072  {
6073  if (((modelPar_VRT>0.0)&&(Vbci<(-modelPar_VRT))))
6074  {
6075  qlo_vbci = ((PCatT*(1.0-(pow((1.0+(modelPar_VRT/PCatT)),(1.0-modelPar_MC))*(1.0-(((1.0-modelPar_MC)*(Vbci+modelPar_VRT))/(PCatT+modelPar_VRT))))))/(1.0-modelPar_MC));
6076  }
6077  else
6078  {
6079  qlo_vbci = ((PCatT*(1.0-pow((1.0-(Vbci/PCatT)),(1.0-modelPar_MC))))/(1.0-modelPar_MC));
6080  }
6081  qhi_vbci = 0.0;
6082  }
6083  qdbc = (qlo_vbci+qhi_vbci);
6084  }
6085  else
6086  {
6087  if (((modelPar_VRT>0.0)&&(modelPar_ART>0.0)))
6088  {
6089  vn0 = ((modelPar_VRT+dv0)/(modelPar_VRT-dv0));
6090  vnl0 = ((2.0*vn0)/(sqrt((((vn0-1.0)*(vn0-1))+((4*modelPar_AJC)*modelPar_AJC)))+sqrt((((vn0+1.0)*(vn0+1))+((4*modelPar_ART)*modelPar_ART)))));
6091  vl0 = (0.5*(((vnl0*(modelPar_VRT-dv0))-modelPar_VRT)-dv0));
6092  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-modelPar_MC))))/(1.0-modelPar_MC));
6093  vn_vbci = ((((2*Vbci)+modelPar_VRT)+dv0)/(modelPar_VRT-dv0));
6094  vnl_vbci = ((2.0*vn_vbci)/(sqrt((((vn_vbci-1.0)*(vn_vbci-1))+((4*modelPar_AJC)*modelPar_AJC)))+sqrt((((vn_vbci+1.0)*(vn_vbci+1))+((4*modelPar_ART)*modelPar_ART)))));
6095  vl_vbci = (0.5*(((vnl_vbci*(modelPar_VRT-dv0))-modelPar_VRT)-dv0));
6096  qlo_vbci = ((PCatT*(1.0-pow((1.0-(vl_vbci/PCatT)),(1.0-modelPar_MC))))/(1.0-modelPar_MC));
6097  sel_vbci = (0.5*(vnl_vbci+1.0));
6098  crt = pow((1.0+(modelPar_VRT/PCatT)),(-modelPar_MC));
6099  cmx = pow((1.0+(dv0/PCatT)),(-modelPar_MC));
6100  cl_vbci = (((1.0-sel_vbci)*crt)+(sel_vbci*cmx));
6101  ql_vbci = (((Vbci-vl_vbci)+vl0)*cl_vbci);
6102  qdbc = ((ql_vbci+qlo_vbci)-qlo0);
6103  }
6104  else
6105  {
6106  mv0 = sqrt(((dv0*dv0)+((4*modelPar_AJC)*modelPar_AJC)));
6107  vl0 = ((-0.5)*(dv0+mv0));
6108  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-modelPar_MC)))/(1.0-modelPar_MC));
6109  dv_vbci = (Vbci+dv0);
6110  mv_vbci = sqrt(((dv_vbci*dv_vbci)+((4*modelPar_AJC)*modelPar_AJC)));
6111  vl_vbci = ((0.5*(dv_vbci-mv_vbci))-dv0);
6112  qlo_vbci = (((-PCatT)*pow((1.0-(vl_vbci/PCatT)),(1.0-modelPar_MC)))/(1.0-modelPar_MC));
6113  qdbc = ((qlo_vbci+(pow((1.0-modelPar_FC),(-modelPar_MC))*((Vbci-vl_vbci)+vl0)))-q0);
6114  }
6115  }
6116  dv0 = ((-PCatT)*modelPar_FC);
6117  if ((modelPar_AJC<=0.0))
6118  {
6119  dvh_vbep = (Vbep+dv0);
6120  if ((dvh_vbep>0.0))
6121  {
6122  pwq = pow((1.0-modelPar_FC),((-1.0)-modelPar_MC));
6123  qlo_vbep = ((PCatT*(1.0-((pwq*(1.0-modelPar_FC))*(1.0-modelPar_FC))))/(1.0-modelPar_MC));
6124  qhi_vbep = ((dvh_vbep*((1.0-modelPar_FC)+(((0.5*modelPar_MC)*dvh_vbep)/PCatT)))*pwq);
6125  }
6126  else
6127  {
6128  if (((modelPar_VRT>0.0)&&(Vbep<(-modelPar_VRT))))
6129  {
6130  qlo_vbep = ((PCatT*(1.0-(pow((1.0+(modelPar_VRT/PCatT)),(1.0-modelPar_MC))*(1.0-(((1.0-modelPar_MC)*(Vbep+modelPar_VRT))/(PCatT+modelPar_VRT))))))/(1.0-modelPar_MC));
6131  }
6132  else
6133  {
6134  qlo_vbep = ((PCatT*(1.0-pow((1.0-(Vbep/PCatT)),(1.0-modelPar_MC))))/(1.0-modelPar_MC));
6135  }
6136  qhi_vbep = 0.0;
6137  }
6138  qdbep = (qlo_vbep+qhi_vbep);
6139  }
6140  else
6141  {
6142  if (((modelPar_VRT>0.0)&&(modelPar_ART>0.0)))
6143  {
6144  vn0 = ((modelPar_VRT+dv0)/(modelPar_VRT-dv0));
6145  vnl0 = ((2.0*vn0)/(sqrt((((vn0-1.0)*(vn0-1))+((4*modelPar_AJC)*modelPar_AJC)))+sqrt((((vn0+1.0)*(vn0+1))+((4*modelPar_ART)*modelPar_ART)))));
6146  vl0 = (0.5*(((vnl0*(modelPar_VRT-dv0))-modelPar_VRT)-dv0));
6147  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-modelPar_MC))))/(1.0-modelPar_MC));
6148  vn_vbep = ((((2*Vbep)+modelPar_VRT)+dv0)/(modelPar_VRT-dv0));
6149  vnl_vbep = ((2.0*vn_vbep)/(sqrt((((vn_vbep-1.0)*(vn_vbep-1))+((4*modelPar_AJC)*modelPar_AJC)))+sqrt((((vn_vbep+1.0)*(vn_vbep+1))+((4*modelPar_ART)*modelPar_ART)))));
6150  vl_vbep = (0.5*(((vnl_vbep*(modelPar_VRT-dv0))-modelPar_VRT)-dv0));
6151  qlo_vbep = ((PCatT*(1.0-pow((1.0-(vl_vbep/PCatT)),(1.0-modelPar_MC))))/(1.0-modelPar_MC));
6152  sel_vbep = (0.5*(vnl_vbep+1.0));
6153  crt = pow((1.0+(modelPar_VRT/PCatT)),(-modelPar_MC));
6154  cmx = pow((1.0+(dv0/PCatT)),(-modelPar_MC));
6155  cl_vbep = (((1.0-sel_vbep)*crt)+(sel_vbep*cmx));
6156  ql_vbep = (((Vbep-vl_vbep)+vl0)*cl_vbep);
6157  qdbep = ((ql_vbep+qlo_vbep)-qlo0);
6158  }
6159  else
6160  {
6161  mv0 = sqrt(((dv0*dv0)+((4*modelPar_AJC)*modelPar_AJC)));
6162  vl0 = ((-0.5)*(dv0+mv0));
6163  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-modelPar_MC)))/(1.0-modelPar_MC));
6164  dv_vbep = (Vbep+dv0);
6165  mv_vbep = sqrt(((dv_vbep*dv_vbep)+((4*modelPar_AJC)*modelPar_AJC)));
6166  vl_vbep = ((0.5*(dv_vbep-mv_vbep))-dv0);
6167  qlo_vbep = (((-PCatT)*pow((1.0-(vl_vbep/PCatT)),(1.0-modelPar_MC)))/(1.0-modelPar_MC));
6168  qdbep = ((qlo_vbep+(pow((1.0-modelPar_FC),(-modelPar_MC))*((Vbep-vl_vbep)+vl0)))-q0);
6169  }
6170  }
6171  argi_vbei = (Vbei/(NFatT*Vtv));
6172  expi_vbei = limexp<AdmsSensFadType>(argi_vbei);
6173  Ifi = (ISatT*(expi_vbei-1.0));
6174  argi_vbci = (Vbci/(NRatT*Vtv));
6175  expi_vbci = limexp<AdmsSensFadType>(argi_vbci);
6176  Iri = ((ISatT*ISRRatT)*(expi_vbci-1.0));
6177  q1z = ((1.0+(qdbe*IVER))+(qdbc*IVEF));
6178  q1 = ((0.5*((sqrt((((q1z-1.0e-4)*(q1z-1.0e-4))+1.0e-8))+q1z)-1.0e-4))+1.0e-4);
6179  q2 = ((Ifi*IIKF)+(Iri*IIKR));
6180  if ((q2>0))
6181  {
6182  if ((modelPar_QBM<0.5))
6183  {
6184  qb = (0.5*(q1+pow((pow(q1,(1.0/modelPar_NKF))+(4.0*q2)),modelPar_NKF)));
6185  }
6186  else
6187  {
6188  qb = ((0.5*q1)*(1.0+pow((1.0+(4.0*q2)),modelPar_NKF)));
6189  }
6190  }
6191  else
6192  {
6193  qb = q1;
6194  }
6195  Itzr = (Iri/qb);
6196  Itzf = (Ifi/qb);
6197  if ((modelPar_ISP>0.0))
6198  {
6199  argi_vbep = (Vbep/(modelPar_NFP*Vtv));
6200  expi_vbep = limexp<AdmsSensFadType>(argi_vbep);
6201  argx_vbci = (Vbci/(modelPar_NFP*Vtv));
6202  expx_vbci = limexp<AdmsSensFadType>(argx_vbci);
6203  Ifp = (ISPatT*(((modelPar_WSP*expi_vbep)+((1.0-modelPar_WSP)*expx_vbci))-1.0));
6204  q2p = (Ifp*IIKP);
6205  qbp = (0.5*(1.0+sqrt((1.0+(4.0*q2p)))));
6206  }
6207  else
6208  {
6209  Ifp = 0.0;
6210  qbp = 1.0;
6211  }
6212  if ((modelPar_WBE==1.0))
6213  {
6214  argi_vbei = (Vbei/(modelPar_NEI*Vtv));
6215  expi_vbei = limexp<AdmsSensFadType>(argi_vbei);
6216  argn_vbei = (Vbei/(modelPar_NEN*Vtv));
6217  expn_vbei = limexp<AdmsSensFadType>(argn_vbei);
6218  if ((modelPar_VBBE>0.0))
6219  {
6220  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
6221  expx_vbei = limexp<AdmsSensFadType>(argx_vbei);
6222  Ibe = (((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-(modelPar_IBBE*(expx_vbei-EBBEatT)));
6223  }
6224  else
6225  {
6226  Ibe = ((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)));
6227  }
6228  Ibex = 0.0;
6229  }
6230  else
6231  {
6232  if ((modelPar_WBE==0.0))
6233  {
6234  Ibe = 0.0;
6235  argi_vbex = (Vbex/(modelPar_NEI*Vtv));
6236  expi_vbex = limexp<AdmsSensFadType>(argi_vbex);
6237  argn_vbex = (Vbex/(modelPar_NEN*Vtv));
6238  expn_vbex = limexp<AdmsSensFadType>(argn_vbex);
6239  if ((modelPar_VBBE>0.0))
6240  {
6241  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
6242  expx_vbex = limexp<AdmsSensFadType>(argx_vbex);
6243  Ibex = (((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-(modelPar_IBBE*(expx_vbex-EBBEatT)));
6244  }
6245  else
6246  {
6247  Ibex = ((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)));
6248  }
6249  }
6250  else
6251  {
6252  argi_vbei = (Vbei/(modelPar_NEI*Vtv));
6253  expi_vbei = limexp<AdmsSensFadType>(argi_vbei);
6254  argn_vbei = (Vbei/(modelPar_NEN*Vtv));
6255  expn_vbei = limexp<AdmsSensFadType>(argn_vbei);
6256  if ((modelPar_VBBE>0.0))
6257  {
6258  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
6259  expx_vbei = limexp<AdmsSensFadType>(argx_vbei);
6260  Ibe = (modelPar_WBE*(((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-(modelPar_IBBE*(expx_vbei-EBBEatT))));
6261  }
6262  else
6263  {
6264  Ibe = (modelPar_WBE*((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0))));
6265  }
6266  argi_vbex = (Vbex/(modelPar_NEI*Vtv));
6267  expi_vbex = limexp<AdmsSensFadType>(argi_vbex);
6268  argn_vbex = (Vbex/(modelPar_NEN*Vtv));
6269  expn_vbex = limexp<AdmsSensFadType>(argn_vbex);
6270  if ((modelPar_VBBE>0.0))
6271  {
6272  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
6273  expx_vbex = limexp<AdmsSensFadType>(argx_vbex);
6274  Ibex = ((1.0-modelPar_WBE)*(((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-(modelPar_IBBE*(expx_vbex-EBBEatT))));
6275  }
6276  else
6277  {
6278  Ibex = ((1.0-modelPar_WBE)*((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0))));
6279  }
6280  }
6281  }
6282  argi_vbci = (Vbci/(modelPar_NCI*Vtv));
6283  expi_vbci = limexp<AdmsSensFadType>(argi_vbci);
6284  argn_vbci = (Vbci/(modelPar_NCN*Vtv));
6285  expn_vbci = limexp<AdmsSensFadType>(argn_vbci);
6286  Ibcj = ((IBCIatT*(expi_vbci-1.0))+(IBCNatT*(expn_vbci-1.0)));
6287  if (((modelPar_IBEIP>0.0)||(modelPar_IBENP>0.0)))
6288  {
6289  argi_vbep = (Vbep/(modelPar_NCI*Vtv));
6290  expi_vbep = limexp<AdmsSensFadType>(argi_vbep);
6291  argn_vbep = (Vbep/(modelPar_NCN*Vtv));
6292  expn_vbep = limexp<AdmsSensFadType>(argn_vbep);
6293  Ibep = ((IBEIPatT*(expi_vbep-1.0))+(IBENPatT*(expn_vbep-1.0)));
6294  }
6295  else
6296  {
6297  Ibep = 0.0;
6298  }
6299  if ((modelPar_AVC1>0.0))
6300  {
6301  vl_vbci = (0.5*(sqrt((((PCatT-Vbci)*(PCatT-Vbci))+0.01))+(PCatT-Vbci)));
6302  avalf_exparg = ((-AVC2atT)*pow(vl_vbci,(modelPar_MC-1.0)));
6303  avalf = ((modelPar_AVC1*vl_vbci)*limexp<AdmsSensFadType>(avalf_exparg));
6304  Igc = (((Itzf-Itzr)-Ibcj)*avalf);
6305  }
6306  else
6307  {
6308  Igc = 0.0;
6309  }
6310  Ibc = (Ibcj-Igc);
6311  if ((modelPar_RCX>0.0))
6312  {
6313  Ircx = (Vrcx/RCXatT);
6314  }
6315  else
6316  {
6317  Ircx = 0.0;
6318  }
6319  argi_vbci = (Vbci/Vtv);
6320  expi_vbci = limexp<AdmsSensFadType>(argi_vbci);
6321  argx_vbcx = (Vbcx/Vtv);
6322  expx_vbcx = limexp<AdmsSensFadType>(argx_vbcx);
6323  Kbci = sqrt((1.0+(GAMMatT*expi_vbci)));
6324  Kbcx = sqrt((1.0+(GAMMatT*expx_vbcx)));
6325  if ((modelPar_RCI>0.0))
6326  {
6327  rKp1 = ((Kbci+1.0)/(Kbcx+1.0));
6328  Iohm = ((Vrci+(Vtv*((Kbci-Kbcx)-log(rKp1))))/RCIatT);
6329  derf = (((IVO*RCIatT)*Iohm)/(1.0+(((0.5*IVO)*IHRCF)*sqrt(((Vrci*Vrci)+0.01)))));
6330  Irci = (Iohm/sqrt((1+(derf*derf))));
6331  }
6332  else
6333  {
6334  Irci = 0.0;
6335  }
6336  if ((modelPar_RBX>0.0))
6337  {
6338  Irbx = (Vrbx/RBXatT);
6339  }
6340  else
6341  {
6342  Irbx = 0.0;
6343  }
6344  if ((modelPar_RBI>0.0))
6345  {
6346  Irbi = ((Vrbi*qb)/RBIatT);
6347  }
6348  else
6349  {
6350  Irbi = 0.0;
6351  }
6352  if ((modelPar_RE>0.0))
6353  {
6354  Ire = (Vre/REatT);
6355  }
6356  else
6357  {
6358  Ire = 0.0;
6359  }
6360  if ((modelPar_RBP>0.0))
6361  {
6362  Irbp = ((Vrbp*qbp)/RBPatT);
6363  }
6364  else
6365  {
6366  Irbp = 0.0;
6367  }
6368  sgIf = ((Ifi>0.0)?1.0:0.0);
6369  rIf = ((Ifi*sgIf)*IITF);
6370  mIf = (rIf/(rIf+1.0));
6371  tff_exparg = ((Vbci*IVTF)/1.44);
6372  tff = ((modelPar_TF*(1.0+(modelPar_QTF*q1)))*(1.0+(((modelPar_XTF*limexp<AdmsSensFadType>(tff_exparg))*(slTF+(mIf*mIf)))*sgIf)));
6373  Qbe = (((CJEatT*qdbe)*modelPar_WBE)+((tff*Ifi)/qb));
6374  Qbex = ((CJEatT*qdbex)*(1.0-modelPar_WBE));
6375  Qbc = (((CJCatT*qdbc)+(modelPar_TR*Iri))+(modelPar_QCO*Kbci));
6376  Qbcx = (modelPar_QCO*Kbcx);
6377  Qbep = ((CJEPatT*qdbep)+(modelPar_TR*Ifp));
6378  Qbeo = (Vbe*modelPar_CBEO);
6379  Qbco = (Vbc*modelPar_CBCO);
6380  Ith = (-(((((((((((Ibe*Vbei)+(Ibc*Vbci))+((Itzf-Itzr)*Vcei))+(Ibex*Vbex))+(Ibep*Vbep))+(Ircx*Vrcx))+(Irci*Vrci))+(Irbx*Vrbx))+(Irbi*Vrbi))+(Ire*Vre))+(Irbp*Vrbp)));
6381  if ((modelPar_RTH>0.0))
6382  {
6383  Irth = (Vrth/modelPar_RTH);
6384  }
6385  else
6386  {
6387  Irth = 0.0;
6388  }
6389  Qcth = (Vrth*modelPar_CTH);
6390  // I(bi,ei) <+ (((M*dtype)*(Ibe+($simparam("gmin")*Vbei))))
6391  staticContributions[admsNodeID_bi] += ((instancePar_M*modelPar_dtype)*(Ibe+(gmin*Vbei)));
6392  staticContributions[admsNodeID_ei] -= ((instancePar_M*modelPar_dtype)*(Ibe+(gmin*Vbei)));
6393  // I(bx,ei) <+ (((M*dtype)*(Ibex+($simparam("gmin")*Vbex))))
6394  staticContributions[admsNodeID_bx] += ((instancePar_M*modelPar_dtype)*(Ibex+(gmin*Vbex)));
6395  staticContributions[admsNodeID_ei] -= ((instancePar_M*modelPar_dtype)*(Ibex+(gmin*Vbex)));
6396  // I(ci,ei) <+ (((M*dtype)*Itzf))
6397  staticContributions[admsNodeID_ci] += ((instancePar_M*modelPar_dtype)*Itzf);
6398  staticContributions[admsNodeID_ei] -= ((instancePar_M*modelPar_dtype)*Itzf);
6399  // I(ei,ci) <+ (((M*dtype)*Itzr))
6400  staticContributions[admsNodeID_ei] += ((instancePar_M*modelPar_dtype)*Itzr);
6401  staticContributions[admsNodeID_ci] -= ((instancePar_M*modelPar_dtype)*Itzr);
6402  // I(bi,ci) <+ (((M*dtype)*(Ibc+($simparam("gmin")*Vbci))))
6403  staticContributions[admsNodeID_bi] += ((instancePar_M*modelPar_dtype)*(Ibc+(gmin*Vbci)));
6404  staticContributions[admsNodeID_ci] -= ((instancePar_M*modelPar_dtype)*(Ibc+(gmin*Vbci)));
6405  // I(bx,bp) <+ (((M*dtype)*(Ibep+($simparam("gmin")*Vbep))))
6406  staticContributions[admsNodeID_bx] += ((instancePar_M*modelPar_dtype)*(Ibep+(gmin*Vbep)));
6407  staticContributions[admsNodeID_bp] -= ((instancePar_M*modelPar_dtype)*(Ibep+(gmin*Vbep)));
6408  if ((modelPar_RCX>0))
6409  {
6410  // I(c,cx) <+ (((M*dtype)*Ircx))
6411  staticContributions[admsNodeID_c] += ((instancePar_M*modelPar_dtype)*Ircx);
6412  staticContributions[admsNodeID_cx] -= ((instancePar_M*modelPar_dtype)*Ircx);
6413  }
6414  else
6415  {
6416  // V(c,cx) <+ (0.0)
6417  // do nothing at all
6418  }
6419  // I(cx,ci) <+ (((M*dtype)*(Irci+($simparam("gmin")*Vrci))))
6420  staticContributions[admsNodeID_cx] += ((instancePar_M*modelPar_dtype)*(Irci+(gmin*Vrci)));
6421  staticContributions[admsNodeID_ci] -= ((instancePar_M*modelPar_dtype)*(Irci+(gmin*Vrci)));
6422  if ((modelPar_RBX>0))
6423  {
6424  // I(b,bx) <+ (((M*dtype)*Irbx))
6425  staticContributions[admsNodeID_b] += ((instancePar_M*modelPar_dtype)*Irbx);
6426  staticContributions[admsNodeID_bx] -= ((instancePar_M*modelPar_dtype)*Irbx);
6427  }
6428  else
6429  {
6430  // V(b,bx) <+ (0.0)
6431  // do nothing at all
6432  }
6433  // I(bx,bi) <+ (((M*dtype)*Irbi))
6434  staticContributions[admsNodeID_bx] += ((instancePar_M*modelPar_dtype)*Irbi);
6435  staticContributions[admsNodeID_bi] -= ((instancePar_M*modelPar_dtype)*Irbi);
6436  if ((modelPar_RE>0))
6437  {
6438  // I(e,ei) <+ (((M*dtype)*Ire))
6439  staticContributions[admsNodeID_e] += ((instancePar_M*modelPar_dtype)*Ire);
6440  staticContributions[admsNodeID_ei] -= ((instancePar_M*modelPar_dtype)*Ire);
6441  }
6442  else
6443  {
6444  // V(e,ei) <+ (0.0)
6445  // do nothing at all
6446  }
6447  // I(bp,cx) <+ (((M*dtype)*Irbp))
6448  staticContributions[admsNodeID_bp] += ((instancePar_M*modelPar_dtype)*Irbp);
6449  staticContributions[admsNodeID_cx] -= ((instancePar_M*modelPar_dtype)*Irbp);
6450  // I(bi,ei) <+ (((M*dtype)*ddt(Qbe)))
6451  dynamicContributions[admsNodeID_bi] += ((instancePar_M*modelPar_dtype)*(Qbe));
6452  dynamicContributions[admsNodeID_ei] -= ((instancePar_M*modelPar_dtype)*(Qbe));
6453  // I(bx,ei) <+ (((M*dtype)*ddt(Qbex)))
6454  dynamicContributions[admsNodeID_bx] += ((instancePar_M*modelPar_dtype)*(Qbex));
6455  dynamicContributions[admsNodeID_ei] -= ((instancePar_M*modelPar_dtype)*(Qbex));
6456  // I(bi,ci) <+ (((M*dtype)*ddt(Qbc)))
6457  dynamicContributions[admsNodeID_bi] += ((instancePar_M*modelPar_dtype)*(Qbc));
6458  dynamicContributions[admsNodeID_ci] -= ((instancePar_M*modelPar_dtype)*(Qbc));
6459  // I(bi,cx) <+ (((M*dtype)*ddt(Qbcx)))
6460  dynamicContributions[admsNodeID_bi] += ((instancePar_M*modelPar_dtype)*(Qbcx));
6461  dynamicContributions[admsNodeID_cx] -= ((instancePar_M*modelPar_dtype)*(Qbcx));
6462  // I(bx,bp) <+ (((M*dtype)*ddt(Qbep)))
6463  dynamicContributions[admsNodeID_bx] += ((instancePar_M*modelPar_dtype)*(Qbep));
6464  dynamicContributions[admsNodeID_bp] -= ((instancePar_M*modelPar_dtype)*(Qbep));
6465  // I(b,e) <+ (((M*dtype)*ddt(Qbeo)))
6466  dynamicContributions[admsNodeID_b] += ((instancePar_M*modelPar_dtype)*(Qbeo));
6467  dynamicContributions[admsNodeID_e] -= ((instancePar_M*modelPar_dtype)*(Qbeo));
6468  // I(b,c) <+ (((M*dtype)*ddt(Qbco)))
6469  dynamicContributions[admsNodeID_b] += ((instancePar_M*modelPar_dtype)*(Qbco));
6470  dynamicContributions[admsNodeID_c] -= ((instancePar_M*modelPar_dtype)*(Qbco));
6471  // I(dt,GND) <+ (Irth)
6472  staticContributions[admsNodeID_dt] += Irth;
6473  // I(dt,GND) <+ (Ith)
6474  staticContributions[admsNodeID_dt] += Ith;
6475  // I(dt,GND) <+ (ddt(Qcth))
6476  dynamicContributions[admsNodeID_dt] += (Qcth);
6477 }
6478 
6479 
6480 
6481 //-----------------------------------------------------------------------------
6482 // Function : InstanceSensitivity::operator()
6483 // Purpose : return sensitivity for a single instance parameter
6484 // Special Notes :
6485 // Scope : public
6486 // Creator : admsXml
6487 // Creation Date :
6488 //-----------------------------------------------------------------------------
6489 /// Compute sensitivity of a device instance's outputs to a specified instance
6490 /// parameter
6491 ///
6492 ///
6493 /// @param[in] entity The device entity that owns the parameter
6494 /// @param[in] name The unadorned parameter name specific to the entity
6495 /// @param[out] dfdp The derivative of the F vector with respect to the parameter
6496 /// @param[out] dqdp The derivative of the Q vector with respect to the parameter
6497 /// @param[out] dbdp The derivative of the B vector with respect to the parameter
6498 /// @param[out] Findices The indices into the F vector corresponding to the elements of dfdp
6499 /// @param[out] Qindices The indices into the Q vector corresponding to the elements of dfdp
6500 /// @param[out] Bindices The indices into the B vector corresponding to the elements of dfdp
6501 ///
6502 ///
6503 void InstanceSensitivity::operator()
6504  (
6505  const ParameterBase &entity,
6506  const std::string &name,
6507  std::vector<double> & dfdp,
6508  std::vector<double> & dqdp,
6509  std::vector<double> & dbdp,
6510  std::vector<int> & Findices,
6511  std::vector<int> & Qindices,
6512  std::vector<int> & Bindices
6513  ) const
6514 {
6515  const ParameterBase * e1 = &entity;
6516  const Instance & in = *(dynamic_cast<const Instance *> (e1));
6517  const Model & mod =in.model_;
6518 
6519  dfdp.resize(10+0);
6520  dqdp.resize(10+0);
6521  Findices.resize(10+0);
6522  Qindices.resize(10+0);
6523 
6524  std::vector <double> probeVars(15);
6525  std::vector <AdmsSensFadType> staticContributions(10+0);
6526  std::vector <AdmsSensFadType> dynamicContributions(10+0);
6527 
6528 
6529  // initialize contributions to zero (automatically sets derivatives to zero)
6530  for (int i=0; i < 10+0 ; ++i)
6531  {
6532  staticContributions[i]=0;
6533  dynamicContributions[i]=0;
6534  }
6535 
6536  // Copy out all the model parameters (doubles) into FAD types
6537  //reals
6538  AdmsSensFadType modelPar_TNOM=mod.TNOM;
6539  bool modelPar_given_TNOM=mod.given("TNOM");
6540  AdmsSensFadType modelPar_RCX=mod.RCX;
6541  bool modelPar_given_RCX=mod.given("RCX");
6542  AdmsSensFadType modelPar_RCI=mod.RCI;
6543  bool modelPar_given_RCI=mod.given("RCI");
6544  AdmsSensFadType modelPar_VO=mod.VO;
6545  bool modelPar_given_VO=mod.given("VO");
6546  AdmsSensFadType modelPar_GAMM=mod.GAMM;
6547  bool modelPar_given_GAMM=mod.given("GAMM");
6548  AdmsSensFadType modelPar_HRCF=mod.HRCF;
6549  bool modelPar_given_HRCF=mod.given("HRCF");
6550  AdmsSensFadType modelPar_RBX=mod.RBX;
6551  bool modelPar_given_RBX=mod.given("RBX");
6552  AdmsSensFadType modelPar_RBI=mod.RBI;
6553  bool modelPar_given_RBI=mod.given("RBI");
6554  AdmsSensFadType modelPar_RE=mod.RE;
6555  bool modelPar_given_RE=mod.given("RE");
6556  AdmsSensFadType modelPar_RS=mod.RS;
6557  bool modelPar_given_RS=mod.given("RS");
6558  AdmsSensFadType modelPar_RBP=mod.RBP;
6559  bool modelPar_given_RBP=mod.given("RBP");
6560  AdmsSensFadType modelPar_IS=mod.IS;
6561  bool modelPar_given_IS=mod.given("IS");
6562  AdmsSensFadType modelPar_NF=mod.NF;
6563  bool modelPar_given_NF=mod.given("NF");
6564  AdmsSensFadType modelPar_NR=mod.NR;
6565  bool modelPar_given_NR=mod.given("NR");
6566  AdmsSensFadType modelPar_FC=mod.FC;
6567  bool modelPar_given_FC=mod.given("FC");
6568  AdmsSensFadType modelPar_CBEO=mod.CBEO;
6569  bool modelPar_given_CBEO=mod.given("CBEO");
6570  AdmsSensFadType modelPar_CJE=mod.CJE;
6571  bool modelPar_given_CJE=mod.given("CJE");
6572  AdmsSensFadType modelPar_PE=mod.PE;
6573  bool modelPar_given_PE=mod.given("PE");
6574  AdmsSensFadType modelPar_ME=mod.ME;
6575  bool modelPar_given_ME=mod.given("ME");
6576  AdmsSensFadType modelPar_AJE=mod.AJE;
6577  bool modelPar_given_AJE=mod.given("AJE");
6578  AdmsSensFadType modelPar_CBCO=mod.CBCO;
6579  bool modelPar_given_CBCO=mod.given("CBCO");
6580  AdmsSensFadType modelPar_CJC=mod.CJC;
6581  bool modelPar_given_CJC=mod.given("CJC");
6582  AdmsSensFadType modelPar_QCO=mod.QCO;
6583  bool modelPar_given_QCO=mod.given("QCO");
6584  AdmsSensFadType modelPar_CJEP=mod.CJEP;
6585  bool modelPar_given_CJEP=mod.given("CJEP");
6586  AdmsSensFadType modelPar_PC=mod.PC;
6587  bool modelPar_given_PC=mod.given("PC");
6588  AdmsSensFadType modelPar_MC=mod.MC;
6589  bool modelPar_given_MC=mod.given("MC");
6590  AdmsSensFadType modelPar_AJC=mod.AJC;
6591  bool modelPar_given_AJC=mod.given("AJC");
6592  AdmsSensFadType modelPar_CJCP=mod.CJCP;
6593  bool modelPar_given_CJCP=mod.given("CJCP");
6594  AdmsSensFadType modelPar_PS=mod.PS;
6595  bool modelPar_given_PS=mod.given("PS");
6596  AdmsSensFadType modelPar_MS=mod.MS;
6597  bool modelPar_given_MS=mod.given("MS");
6598  AdmsSensFadType modelPar_AJS=mod.AJS;
6599  bool modelPar_given_AJS=mod.given("AJS");
6600  AdmsSensFadType modelPar_IBEI=mod.IBEI;
6601  bool modelPar_given_IBEI=mod.given("IBEI");
6602  AdmsSensFadType modelPar_WBE=mod.WBE;
6603  bool modelPar_given_WBE=mod.given("WBE");
6604  AdmsSensFadType modelPar_NEI=mod.NEI;
6605  bool modelPar_given_NEI=mod.given("NEI");
6606  AdmsSensFadType modelPar_IBEN=mod.IBEN;
6607  bool modelPar_given_IBEN=mod.given("IBEN");
6608  AdmsSensFadType modelPar_NEN=mod.NEN;
6609  bool modelPar_given_NEN=mod.given("NEN");
6610  AdmsSensFadType modelPar_IBCI=mod.IBCI;
6611  bool modelPar_given_IBCI=mod.given("IBCI");
6612  AdmsSensFadType modelPar_NCI=mod.NCI;
6613  bool modelPar_given_NCI=mod.given("NCI");
6614  AdmsSensFadType modelPar_IBCN=mod.IBCN;
6615  bool modelPar_given_IBCN=mod.given("IBCN");
6616  AdmsSensFadType modelPar_NCN=mod.NCN;
6617  bool modelPar_given_NCN=mod.given("NCN");
6618  AdmsSensFadType modelPar_AVC1=mod.AVC1;
6619  bool modelPar_given_AVC1=mod.given("AVC1");
6620  AdmsSensFadType modelPar_AVC2=mod.AVC2;
6621  bool modelPar_given_AVC2=mod.given("AVC2");
6622  AdmsSensFadType modelPar_ISP=mod.ISP;
6623  bool modelPar_given_ISP=mod.given("ISP");
6624  AdmsSensFadType modelPar_WSP=mod.WSP;
6625  bool modelPar_given_WSP=mod.given("WSP");
6626  AdmsSensFadType modelPar_NFP=mod.NFP;
6627  bool modelPar_given_NFP=mod.given("NFP");
6628  AdmsSensFadType modelPar_IBEIP=mod.IBEIP;
6629  bool modelPar_given_IBEIP=mod.given("IBEIP");
6630  AdmsSensFadType modelPar_IBENP=mod.IBENP;
6631  bool modelPar_given_IBENP=mod.given("IBENP");
6632  AdmsSensFadType modelPar_IBCIP=mod.IBCIP;
6633  bool modelPar_given_IBCIP=mod.given("IBCIP");
6634  AdmsSensFadType modelPar_NCIP=mod.NCIP;
6635  bool modelPar_given_NCIP=mod.given("NCIP");
6636  AdmsSensFadType modelPar_IBCNP=mod.IBCNP;
6637  bool modelPar_given_IBCNP=mod.given("IBCNP");
6638  AdmsSensFadType modelPar_NCNP=mod.NCNP;
6639  bool modelPar_given_NCNP=mod.given("NCNP");
6640  AdmsSensFadType modelPar_VEF=mod.VEF;
6641  bool modelPar_given_VEF=mod.given("VEF");
6642  AdmsSensFadType modelPar_VER=mod.VER;
6643  bool modelPar_given_VER=mod.given("VER");
6644  AdmsSensFadType modelPar_IKF=mod.IKF;
6645  bool modelPar_given_IKF=mod.given("IKF");
6646  AdmsSensFadType modelPar_IKR=mod.IKR;
6647  bool modelPar_given_IKR=mod.given("IKR");
6648  AdmsSensFadType modelPar_IKP=mod.IKP;
6649  bool modelPar_given_IKP=mod.given("IKP");
6650  AdmsSensFadType modelPar_TF=mod.TF;
6651  bool modelPar_given_TF=mod.given("TF");
6652  AdmsSensFadType modelPar_QTF=mod.QTF;
6653  bool modelPar_given_QTF=mod.given("QTF");
6654  AdmsSensFadType modelPar_XTF=mod.XTF;
6655  bool modelPar_given_XTF=mod.given("XTF");
6656  AdmsSensFadType modelPar_VTF=mod.VTF;
6657  bool modelPar_given_VTF=mod.given("VTF");
6658  AdmsSensFadType modelPar_ITF=mod.ITF;
6659  bool modelPar_given_ITF=mod.given("ITF");
6660  AdmsSensFadType modelPar_TR=mod.TR;
6661  bool modelPar_given_TR=mod.given("TR");
6662  AdmsSensFadType modelPar_TD=mod.TD;
6663  bool modelPar_given_TD=mod.given("TD");
6664  AdmsSensFadType modelPar_KFN=mod.KFN;
6665  bool modelPar_given_KFN=mod.given("KFN");
6666  AdmsSensFadType modelPar_AFN=mod.AFN;
6667  bool modelPar_given_AFN=mod.given("AFN");
6668  AdmsSensFadType modelPar_BFN=mod.BFN;
6669  bool modelPar_given_BFN=mod.given("BFN");
6670  AdmsSensFadType modelPar_XRE=mod.XRE;
6671  bool modelPar_given_XRE=mod.given("XRE");
6672  AdmsSensFadType modelPar_XRBI=mod.XRBI;
6673  bool modelPar_given_XRBI=mod.given("XRBI");
6674  AdmsSensFadType modelPar_XRCI=mod.XRCI;
6675  bool modelPar_given_XRCI=mod.given("XRCI");
6676  AdmsSensFadType modelPar_XRS=mod.XRS;
6677  bool modelPar_given_XRS=mod.given("XRS");
6678  AdmsSensFadType modelPar_XVO=mod.XVO;
6679  bool modelPar_given_XVO=mod.given("XVO");
6680  AdmsSensFadType modelPar_EA=mod.EA;
6681  bool modelPar_given_EA=mod.given("EA");
6682  AdmsSensFadType modelPar_EAIE=mod.EAIE;
6683  bool modelPar_given_EAIE=mod.given("EAIE");
6684  AdmsSensFadType modelPar_EAIC=mod.EAIC;
6685  bool modelPar_given_EAIC=mod.given("EAIC");
6686  AdmsSensFadType modelPar_EAIS=mod.EAIS;
6687  bool modelPar_given_EAIS=mod.given("EAIS");
6688  AdmsSensFadType modelPar_EANE=mod.EANE;
6689  bool modelPar_given_EANE=mod.given("EANE");
6690  AdmsSensFadType modelPar_EANC=mod.EANC;
6691  bool modelPar_given_EANC=mod.given("EANC");
6692  AdmsSensFadType modelPar_EANS=mod.EANS;
6693  bool modelPar_given_EANS=mod.given("EANS");
6694  AdmsSensFadType modelPar_XIS=mod.XIS;
6695  bool modelPar_given_XIS=mod.given("XIS");
6696  AdmsSensFadType modelPar_XII=mod.XII;
6697  bool modelPar_given_XII=mod.given("XII");
6698  AdmsSensFadType modelPar_XIN=mod.XIN;
6699  bool modelPar_given_XIN=mod.given("XIN");
6700  AdmsSensFadType modelPar_TNF=mod.TNF;
6701  bool modelPar_given_TNF=mod.given("TNF");
6702  AdmsSensFadType modelPar_TAVC=mod.TAVC;
6703  bool modelPar_given_TAVC=mod.given("TAVC");
6704  AdmsSensFadType modelPar_RTH=mod.RTH;
6705  bool modelPar_given_RTH=mod.given("RTH");
6706  AdmsSensFadType modelPar_CTH=mod.CTH;
6707  bool modelPar_given_CTH=mod.given("CTH");
6708  AdmsSensFadType modelPar_VRT=mod.VRT;
6709  bool modelPar_given_VRT=mod.given("VRT");
6710  AdmsSensFadType modelPar_ART=mod.ART;
6711  bool modelPar_given_ART=mod.given("ART");
6712  AdmsSensFadType modelPar_CCSO=mod.CCSO;
6713  bool modelPar_given_CCSO=mod.given("CCSO");
6714  AdmsSensFadType modelPar_QBM=mod.QBM;
6715  bool modelPar_given_QBM=mod.given("QBM");
6716  AdmsSensFadType modelPar_NKF=mod.NKF;
6717  bool modelPar_given_NKF=mod.given("NKF");
6718  AdmsSensFadType modelPar_XIKF=mod.XIKF;
6719  bool modelPar_given_XIKF=mod.given("XIKF");
6720  AdmsSensFadType modelPar_XRCX=mod.XRCX;
6721  bool modelPar_given_XRCX=mod.given("XRCX");
6722  AdmsSensFadType modelPar_XRBX=mod.XRBX;
6723  bool modelPar_given_XRBX=mod.given("XRBX");
6724  AdmsSensFadType modelPar_XRBP=mod.XRBP;
6725  bool modelPar_given_XRBP=mod.given("XRBP");
6726  AdmsSensFadType modelPar_ISRR=mod.ISRR;
6727  bool modelPar_given_ISRR=mod.given("ISRR");
6728  AdmsSensFadType modelPar_XISR=mod.XISR;
6729  bool modelPar_given_XISR=mod.given("XISR");
6730  AdmsSensFadType modelPar_DEAR=mod.DEAR;
6731  bool modelPar_given_DEAR=mod.given("DEAR");
6732  AdmsSensFadType modelPar_EAP=mod.EAP;
6733  bool modelPar_given_EAP=mod.given("EAP");
6734  AdmsSensFadType modelPar_VBBE=mod.VBBE;
6735  bool modelPar_given_VBBE=mod.given("VBBE");
6736  AdmsSensFadType modelPar_NBBE=mod.NBBE;
6737  bool modelPar_given_NBBE=mod.given("NBBE");
6738  AdmsSensFadType modelPar_IBBE=mod.IBBE;
6739  bool modelPar_given_IBBE=mod.given("IBBE");
6740  AdmsSensFadType modelPar_TVBBE1=mod.TVBBE1;
6741  bool modelPar_given_TVBBE1=mod.given("TVBBE1");
6742  AdmsSensFadType modelPar_TVBBE2=mod.TVBBE2;
6743  bool modelPar_given_TVBBE2=mod.given("TVBBE2");
6744  AdmsSensFadType modelPar_TNBBE=mod.TNBBE;
6745  bool modelPar_given_TNBBE=mod.given("TNBBE");
6746  AdmsSensFadType modelPar_EBBE=mod.EBBE;
6747  bool modelPar_given_EBBE=mod.given("EBBE");
6748  AdmsSensFadType modelPar_DTEMP=mod.DTEMP;
6749  bool modelPar_given_DTEMP=mod.given("DTEMP");
6750  AdmsSensFadType modelPar_VERS=mod.VERS;
6751  bool modelPar_given_VERS=mod.given("VERS");
6752  AdmsSensFadType modelPar_VREV=mod.VREV;
6753  bool modelPar_given_VREV=mod.given("VREV");
6754 
6755 
6756  // hidden reals
6757 
6758 
6759  // non-reals (including hiddens)
6760  int modelPar_dtype=mod.dtype;
6761 
6762 
6763 
6764  // Copy out all the instance parameters (doubles) into FAD types
6765  // Keep a map so we can set the right one to the independent variable
6766  // We do this solely to avoid a big ugly "if/else" block just to find the
6767  // one parameter we're doing sensitivities on.
6768  unordered_map <std::string,AdmsSensFadType*,HashNoCase,EqualNoCase> inParamMap;
6769 
6770  // reals
6771  AdmsSensFadType instancePar_DTEMP=in.DTEMP;
6772  bool instancePar_given_DTEMP=in.given("DTEMP");
6773  inParamMap["DTEMP"] = &instancePar_DTEMP;
6774 
6775 
6776  // Copy all the real hidden instance params into fad types
6777 
6778 
6779 
6780  // Copy all the non-real instance params into vars of their appropriate type:
6781  int instancePar_M=in.M;
6782  bool instancePar_given_M=in.given("M");
6783 
6784 
6785  // Set the one parameter whose name was passed in to be the independent
6786  // variable for Sacado purposes. Since we stored variable pointers, this
6787  // makes sure that that ONE variable gets set right.
6788  // FIXME: make this check the name first, otherwise segfault on invalid name!
6789  inParamMap[name]->diff(0,1);
6790 
6791  //make local copies of all instance vars
6792  //reals
6793 
6794 
6795  //non-reals
6796 
6797 
6798  //make local copies of all model vars
6799  //reals
6800 
6801 
6802  // non-reals
6803 
6804 
6805 
6806  Linear::Vector * solVectorPtr = in.extData.nextSolVectorPtr;
6807 
6808  // extract solution variables and set as Fad independent variables.
6809 
6810  probeVars[in.admsProbeID_V_ci_ei] = (*solVectorPtr)[in.li_ci] - (*solVectorPtr)[in.li_ei];
6811  probeVars[in.admsProbeID_V_b_c] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_c];
6812  probeVars[in.admsProbeID_V_bp_cx] = (*solVectorPtr)[in.li_bp] - (*solVectorPtr)[in.li_cx];
6813  probeVars[in.admsProbeID_V_e_ei] = (*solVectorPtr)[in.li_e] - (*solVectorPtr)[in.li_ei];
6814  probeVars[in.admsProbeID_V_b_bx] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_bx];
6815  probeVars[in.admsProbeID_V_bx_bi] = (*solVectorPtr)[in.li_bx] - (*solVectorPtr)[in.li_bi];
6816  probeVars[in.admsProbeID_V_cx_ci] = (*solVectorPtr)[in.li_cx] - (*solVectorPtr)[in.li_ci];
6817  probeVars[in.admsProbeID_V_c_cx] = (*solVectorPtr)[in.li_c] - (*solVectorPtr)[in.li_cx];
6818  probeVars[in.admsProbeID_V_b_e] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_e];
6819  probeVars[in.admsProbeID_V_dt_GND] = (*solVectorPtr)[in.li_dt];
6820  probeVars[in.admsProbeID_V_bx_bp] = (*solVectorPtr)[in.li_bx] - (*solVectorPtr)[in.li_bp];
6821  probeVars[in.admsProbeID_V_bi_cx] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_cx];
6822  probeVars[in.admsProbeID_V_bx_ei] = (*solVectorPtr)[in.li_bx] - (*solVectorPtr)[in.li_ei];
6823  probeVars[in.admsProbeID_V_bi_ci] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_ci];
6824  probeVars[in.admsProbeID_V_bi_ei] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_ei];
6825 
6826  // pre-multiply any "typed" probes (i.e. those limited with "typedpnjlim")
6827  probeVars[in.admsProbeID_V_b_e] *= modelPar_dtype;
6828  probeVars[in.admsProbeID_V_bx_bp] *= modelPar_dtype;
6829  probeVars[in.admsProbeID_V_bi_cx] *= modelPar_dtype;
6830  probeVars[in.admsProbeID_V_bx_ei] *= modelPar_dtype;
6831  probeVars[in.admsProbeID_V_bi_ci] *= modelPar_dtype;
6832  probeVars[in.admsProbeID_V_bi_ei] *= modelPar_dtype;
6833 
6834 
6835 
6836  // Now call the function that does the heavy lifting.
6837  evaluateModelEquations(
6838  probeVars,
6839  // probe constants
6840  in.admsProbeID_V_ci_ei,
6841  in.admsProbeID_V_b_c,
6842  in.admsProbeID_V_bp_cx,
6843  in.admsProbeID_V_e_ei,
6844  in.admsProbeID_V_b_bx,
6845  in.admsProbeID_V_bx_bi,
6846  in.admsProbeID_V_cx_ci,
6847  in.admsProbeID_V_c_cx,
6848  in.admsProbeID_V_b_e,
6849  in.admsProbeID_V_dt_GND,
6850  in.admsProbeID_V_bx_bp,
6851  in.admsProbeID_V_bi_cx,
6852  in.admsProbeID_V_bx_ei,
6853  in.admsProbeID_V_bi_ci,
6854  in.admsProbeID_V_bi_ei,
6855 
6856  // node constants
6857  in.admsNodeID_c,
6858  in.admsNodeID_b,
6859  in.admsNodeID_e,
6860  in.admsNodeID_dt,
6861  in.admsNodeID_cx,
6862  in.admsNodeID_ci,
6863  in.admsNodeID_bx,
6864  in.admsNodeID_bi,
6865  in.admsNodeID_ei,
6866  in.admsNodeID_bp,
6867  // instance parameters
6868  // reals
6869  instancePar_DTEMP,
6870  instancePar_given_DTEMP,
6871  // non-reals(including hidden)
6872  instancePar_M,
6873  instancePar_given_M,
6874  // model parameters
6875  // reals
6876  modelPar_TNOM,
6877  modelPar_given_TNOM,
6878  modelPar_RCX,
6879  modelPar_given_RCX,
6880  modelPar_RCI,
6881  modelPar_given_RCI,
6882  modelPar_VO,
6883  modelPar_given_VO,
6884  modelPar_GAMM,
6885  modelPar_given_GAMM,
6886  modelPar_HRCF,
6887  modelPar_given_HRCF,
6888  modelPar_RBX,
6889  modelPar_given_RBX,
6890  modelPar_RBI,
6891  modelPar_given_RBI,
6892  modelPar_RE,
6893  modelPar_given_RE,
6894  modelPar_RS,
6895  modelPar_given_RS,
6896  modelPar_RBP,
6897  modelPar_given_RBP,
6898  modelPar_IS,
6899  modelPar_given_IS,
6900  modelPar_NF,
6901  modelPar_given_NF,
6902  modelPar_NR,
6903  modelPar_given_NR,
6904  modelPar_FC,
6905  modelPar_given_FC,
6906  modelPar_CBEO,
6907  modelPar_given_CBEO,
6908  modelPar_CJE,
6909  modelPar_given_CJE,
6910  modelPar_PE,
6911  modelPar_given_PE,
6912  modelPar_ME,
6913  modelPar_given_ME,
6914  modelPar_AJE,
6915  modelPar_given_AJE,
6916  modelPar_CBCO,
6917  modelPar_given_CBCO,
6918  modelPar_CJC,
6919  modelPar_given_CJC,
6920  modelPar_QCO,
6921  modelPar_given_QCO,
6922  modelPar_CJEP,
6923  modelPar_given_CJEP,
6924  modelPar_PC,
6925  modelPar_given_PC,
6926  modelPar_MC,
6927  modelPar_given_MC,
6928  modelPar_AJC,
6929  modelPar_given_AJC,
6930  modelPar_CJCP,
6931  modelPar_given_CJCP,
6932  modelPar_PS,
6933  modelPar_given_PS,
6934  modelPar_MS,
6935  modelPar_given_MS,
6936  modelPar_AJS,
6937  modelPar_given_AJS,
6938  modelPar_IBEI,
6939  modelPar_given_IBEI,
6940  modelPar_WBE,
6941  modelPar_given_WBE,
6942  modelPar_NEI,
6943  modelPar_given_NEI,
6944  modelPar_IBEN,
6945  modelPar_given_IBEN,
6946  modelPar_NEN,
6947  modelPar_given_NEN,
6948  modelPar_IBCI,
6949  modelPar_given_IBCI,
6950  modelPar_NCI,
6951  modelPar_given_NCI,
6952  modelPar_IBCN,
6953  modelPar_given_IBCN,
6954  modelPar_NCN,
6955  modelPar_given_NCN,
6956  modelPar_AVC1,
6957  modelPar_given_AVC1,
6958  modelPar_AVC2,
6959  modelPar_given_AVC2,
6960  modelPar_ISP,
6961  modelPar_given_ISP,
6962  modelPar_WSP,
6963  modelPar_given_WSP,
6964  modelPar_NFP,
6965  modelPar_given_NFP,
6966  modelPar_IBEIP,
6967  modelPar_given_IBEIP,
6968  modelPar_IBENP,
6969  modelPar_given_IBENP,
6970  modelPar_IBCIP,
6971  modelPar_given_IBCIP,
6972  modelPar_NCIP,
6973  modelPar_given_NCIP,
6974  modelPar_IBCNP,
6975  modelPar_given_IBCNP,
6976  modelPar_NCNP,
6977  modelPar_given_NCNP,
6978  modelPar_VEF,
6979  modelPar_given_VEF,
6980  modelPar_VER,
6981  modelPar_given_VER,
6982  modelPar_IKF,
6983  modelPar_given_IKF,
6984  modelPar_IKR,
6985  modelPar_given_IKR,
6986  modelPar_IKP,
6987  modelPar_given_IKP,
6988  modelPar_TF,
6989  modelPar_given_TF,
6990  modelPar_QTF,
6991  modelPar_given_QTF,
6992  modelPar_XTF,
6993  modelPar_given_XTF,
6994  modelPar_VTF,
6995  modelPar_given_VTF,
6996  modelPar_ITF,
6997  modelPar_given_ITF,
6998  modelPar_TR,
6999  modelPar_given_TR,
7000  modelPar_TD,
7001  modelPar_given_TD,
7002  modelPar_KFN,
7003  modelPar_given_KFN,
7004  modelPar_AFN,
7005  modelPar_given_AFN,
7006  modelPar_BFN,
7007  modelPar_given_BFN,
7008  modelPar_XRE,
7009  modelPar_given_XRE,
7010  modelPar_XRBI,
7011  modelPar_given_XRBI,
7012  modelPar_XRCI,
7013  modelPar_given_XRCI,
7014  modelPar_XRS,
7015  modelPar_given_XRS,
7016  modelPar_XVO,
7017  modelPar_given_XVO,
7018  modelPar_EA,
7019  modelPar_given_EA,
7020  modelPar_EAIE,
7021  modelPar_given_EAIE,
7022  modelPar_EAIC,
7023  modelPar_given_EAIC,
7024  modelPar_EAIS,
7025  modelPar_given_EAIS,
7026  modelPar_EANE,
7027  modelPar_given_EANE,
7028  modelPar_EANC,
7029  modelPar_given_EANC,
7030  modelPar_EANS,
7031  modelPar_given_EANS,
7032  modelPar_XIS,
7033  modelPar_given_XIS,
7034  modelPar_XII,
7035  modelPar_given_XII,
7036  modelPar_XIN,
7037  modelPar_given_XIN,
7038  modelPar_TNF,
7039  modelPar_given_TNF,
7040  modelPar_TAVC,
7041  modelPar_given_TAVC,
7042  modelPar_RTH,
7043  modelPar_given_RTH,
7044  modelPar_CTH,
7045  modelPar_given_CTH,
7046  modelPar_VRT,
7047  modelPar_given_VRT,
7048  modelPar_ART,
7049  modelPar_given_ART,
7050  modelPar_CCSO,
7051  modelPar_given_CCSO,
7052  modelPar_QBM,
7053  modelPar_given_QBM,
7054  modelPar_NKF,
7055  modelPar_given_NKF,
7056  modelPar_XIKF,
7057  modelPar_given_XIKF,
7058  modelPar_XRCX,
7059  modelPar_given_XRCX,
7060  modelPar_XRBX,
7061  modelPar_given_XRBX,
7062  modelPar_XRBP,
7063  modelPar_given_XRBP,
7064  modelPar_ISRR,
7065  modelPar_given_ISRR,
7066  modelPar_XISR,
7067  modelPar_given_XISR,
7068  modelPar_DEAR,
7069  modelPar_given_DEAR,
7070  modelPar_EAP,
7071  modelPar_given_EAP,
7072  modelPar_VBBE,
7073  modelPar_given_VBBE,
7074  modelPar_NBBE,
7075  modelPar_given_NBBE,
7076  modelPar_IBBE,
7077  modelPar_given_IBBE,
7078  modelPar_TVBBE1,
7079  modelPar_given_TVBBE1,
7080  modelPar_TVBBE2,
7081  modelPar_given_TVBBE2,
7082  modelPar_TNBBE,
7083  modelPar_given_TNBBE,
7084  modelPar_EBBE,
7085  modelPar_given_EBBE,
7086  modelPar_DTEMP,
7087  modelPar_given_DTEMP,
7088  modelPar_VERS,
7089  modelPar_given_VERS,
7090  modelPar_VREV,
7091  modelPar_given_VREV,
7092  // non-reals (including hidden)
7093  modelPar_dtype,
7094  in.admsTemperature,
7095  in.adms_vt_nom,
7096  in.getDeviceOptions().gmin,
7097  staticContributions,
7098  dynamicContributions,
7099  in);
7100 
7101 
7102  // We now have the F and Q vector stuff, populate the dependencies:
7103 
7104  dfdp[in.admsNodeID_c] += staticContributions[in.admsNodeID_c].dx(0);
7105  dqdp[in.admsNodeID_c] += dynamicContributions[in.admsNodeID_c].dx(0);
7106  Findices[in.admsNodeID_c] = in.li_c;
7107  Qindices[in.admsNodeID_c] = in.li_c;
7108  dfdp[in.admsNodeID_b] += staticContributions[in.admsNodeID_b].dx(0);
7109  dqdp[in.admsNodeID_b] += dynamicContributions[in.admsNodeID_b].dx(0);
7110  Findices[in.admsNodeID_b] = in.li_b;
7111  Qindices[in.admsNodeID_b] = in.li_b;
7112  dfdp[in.admsNodeID_e] += staticContributions[in.admsNodeID_e].dx(0);
7113  dqdp[in.admsNodeID_e] += dynamicContributions[in.admsNodeID_e].dx(0);
7114  Findices[in.admsNodeID_e] = in.li_e;
7115  Qindices[in.admsNodeID_e] = in.li_e;
7116  dfdp[in.admsNodeID_dt] += staticContributions[in.admsNodeID_dt].dx(0);
7117  dqdp[in.admsNodeID_dt] += dynamicContributions[in.admsNodeID_dt].dx(0);
7118  Findices[in.admsNodeID_dt] = in.li_dt;
7119  Qindices[in.admsNodeID_dt] = in.li_dt;
7120  dfdp[in.admsNodeID_cx] += staticContributions[in.admsNodeID_cx].dx(0);
7121  dqdp[in.admsNodeID_cx] += dynamicContributions[in.admsNodeID_cx].dx(0);
7122  Findices[in.admsNodeID_cx] = in.li_cx;
7123  Qindices[in.admsNodeID_cx] = in.li_cx;
7124  dfdp[in.admsNodeID_ci] += staticContributions[in.admsNodeID_ci].dx(0);
7125  dqdp[in.admsNodeID_ci] += dynamicContributions[in.admsNodeID_ci].dx(0);
7126  Findices[in.admsNodeID_ci] = in.li_ci;
7127  Qindices[in.admsNodeID_ci] = in.li_ci;
7128  dfdp[in.admsNodeID_bx] += staticContributions[in.admsNodeID_bx].dx(0);
7129  dqdp[in.admsNodeID_bx] += dynamicContributions[in.admsNodeID_bx].dx(0);
7130  Findices[in.admsNodeID_bx] = in.li_bx;
7131  Qindices[in.admsNodeID_bx] = in.li_bx;
7132  dfdp[in.admsNodeID_bi] += staticContributions[in.admsNodeID_bi].dx(0);
7133  dqdp[in.admsNodeID_bi] += dynamicContributions[in.admsNodeID_bi].dx(0);
7134  Findices[in.admsNodeID_bi] = in.li_bi;
7135  Qindices[in.admsNodeID_bi] = in.li_bi;
7136  dfdp[in.admsNodeID_ei] += staticContributions[in.admsNodeID_ei].dx(0);
7137  dqdp[in.admsNodeID_ei] += dynamicContributions[in.admsNodeID_ei].dx(0);
7138  Findices[in.admsNodeID_ei] = in.li_ei;
7139  Qindices[in.admsNodeID_ei] = in.li_ei;
7140  dfdp[in.admsNodeID_bp] += staticContributions[in.admsNodeID_bp].dx(0);
7141  dqdp[in.admsNodeID_bp] += dynamicContributions[in.admsNodeID_bp].dx(0);
7142  Findices[in.admsNodeID_bp] = in.li_bp;
7143  Qindices[in.admsNodeID_bp] = in.li_bp;
7144 
7145 
7146 }
7147 
7148 //-----------------------------------------------------------------------------
7149 // Function : ModelSensitivity::operator()
7150 // Purpose : return sensitivity for a single model parameter
7151 // Special Notes :
7152 // Scope : public
7153 // Creator : admsXml
7154 // Creation Date :
7155 //-----------------------------------------------------------------------------
7156 /// Compute sensitivity to a specified model
7157 /// parameter of all device instances of that model's outputs
7158 ///
7159 ///
7160 /// @param[in] entity The device entity that owns the parameter
7161 /// @param[in] name The unadorned parameter name specific to the entity
7162 /// @param[out] dfdp The derivative of the F vector with respect to the parameter
7163 /// @param[out] dqdp The derivative of the Q vector with respect to the parameter
7164 /// @param[out] dbdp The derivative of the B vector with respect to the parameter
7165 /// @param[out] Findices The indices into the F vector corresponding to the elements of dfdp
7166 /// @param[out] Qindices The indices into the Q vector corresponding to the elements of dfdp
7167 /// @param[out] Bindices The indices into the B vector corresponding to the elements of dfdp
7168 ///
7169 ///
7170 void ModelSensitivity::operator()
7171  (
7172  const ParameterBase &entity,
7173  const std::string &name,
7174  std::vector<double> & dfdp,
7175  std::vector<double> & dqdp,
7176  std::vector<double> & dbdp,
7177  std::vector<int> & Findices,
7178  std::vector<int> & Qindices,
7179  std::vector<int> & Bindices
7180  ) const
7181 {
7182  const ParameterBase * e1 = &entity;
7183  const Model & mod = *(dynamic_cast<const Model *> (e1));
7184  int sizeInstance = mod.instanceContainer.size();
7185 
7186  dfdp.resize((10+0)*sizeInstance);
7187  dqdp.resize((10+0)*sizeInstance);
7188  Findices.resize((10+0)*sizeInstance);
7189  Qindices.resize((10+0)*sizeInstance);
7190 
7191  std::vector <double> probeVars(15);
7192  std::vector <AdmsSensFadType> staticContributions(10+0);
7193  std::vector <AdmsSensFadType> dynamicContributions(10+0);
7194 
7195 
7196  // Copy out all the model parameters (doubles) into FAD types
7197  // Keep a map so we can set the right one to the independent variable
7198  // We do this solely to avoid a big ugly "if/else" block just to find the
7199  // one parameter we're doing sensitivities on.
7200  unordered_map <std::string,AdmsSensFadType*,HashNoCase,EqualNoCase> modParamMap;
7201 
7202  // reals
7203  AdmsSensFadType modelPar_TNOM=mod.TNOM;
7204  bool modelPar_given_TNOM=mod.given("TNOM");
7205  modParamMap["TNOM"] = &modelPar_TNOM;
7206  AdmsSensFadType modelPar_RCX=mod.RCX;
7207  bool modelPar_given_RCX=mod.given("RCX");
7208  modParamMap["RCX"] = &modelPar_RCX;
7209  AdmsSensFadType modelPar_RCI=mod.RCI;
7210  bool modelPar_given_RCI=mod.given("RCI");
7211  modParamMap["RCI"] = &modelPar_RCI;
7212  AdmsSensFadType modelPar_VO=mod.VO;
7213  bool modelPar_given_VO=mod.given("VO");
7214  modParamMap["VO"] = &modelPar_VO;
7215  AdmsSensFadType modelPar_GAMM=mod.GAMM;
7216  bool modelPar_given_GAMM=mod.given("GAMM");
7217  modParamMap["GAMM"] = &modelPar_GAMM;
7218  AdmsSensFadType modelPar_HRCF=mod.HRCF;
7219  bool modelPar_given_HRCF=mod.given("HRCF");
7220  modParamMap["HRCF"] = &modelPar_HRCF;
7221  AdmsSensFadType modelPar_RBX=mod.RBX;
7222  bool modelPar_given_RBX=mod.given("RBX");
7223  modParamMap["RBX"] = &modelPar_RBX;
7224  AdmsSensFadType modelPar_RBI=mod.RBI;
7225  bool modelPar_given_RBI=mod.given("RBI");
7226  modParamMap["RBI"] = &modelPar_RBI;
7227  AdmsSensFadType modelPar_RE=mod.RE;
7228  bool modelPar_given_RE=mod.given("RE");
7229  modParamMap["RE"] = &modelPar_RE;
7230  AdmsSensFadType modelPar_RS=mod.RS;
7231  bool modelPar_given_RS=mod.given("RS");
7232  modParamMap["RS"] = &modelPar_RS;
7233  AdmsSensFadType modelPar_RBP=mod.RBP;
7234  bool modelPar_given_RBP=mod.given("RBP");
7235  modParamMap["RBP"] = &modelPar_RBP;
7236  AdmsSensFadType modelPar_IS=mod.IS;
7237  bool modelPar_given_IS=mod.given("IS");
7238  modParamMap["IS"] = &modelPar_IS;
7239  AdmsSensFadType modelPar_NF=mod.NF;
7240  bool modelPar_given_NF=mod.given("NF");
7241  modParamMap["NF"] = &modelPar_NF;
7242  AdmsSensFadType modelPar_NR=mod.NR;
7243  bool modelPar_given_NR=mod.given("NR");
7244  modParamMap["NR"] = &modelPar_NR;
7245  AdmsSensFadType modelPar_FC=mod.FC;
7246  bool modelPar_given_FC=mod.given("FC");
7247  modParamMap["FC"] = &modelPar_FC;
7248  AdmsSensFadType modelPar_CBEO=mod.CBEO;
7249  bool modelPar_given_CBEO=mod.given("CBEO");
7250  modParamMap["CBEO"] = &modelPar_CBEO;
7251  AdmsSensFadType modelPar_CJE=mod.CJE;
7252  bool modelPar_given_CJE=mod.given("CJE");
7253  modParamMap["CJE"] = &modelPar_CJE;
7254  AdmsSensFadType modelPar_PE=mod.PE;
7255  bool modelPar_given_PE=mod.given("PE");
7256  modParamMap["PE"] = &modelPar_PE;
7257  AdmsSensFadType modelPar_ME=mod.ME;
7258  bool modelPar_given_ME=mod.given("ME");
7259  modParamMap["ME"] = &modelPar_ME;
7260  AdmsSensFadType modelPar_AJE=mod.AJE;
7261  bool modelPar_given_AJE=mod.given("AJE");
7262  modParamMap["AJE"] = &modelPar_AJE;
7263  AdmsSensFadType modelPar_CBCO=mod.CBCO;
7264  bool modelPar_given_CBCO=mod.given("CBCO");
7265  modParamMap["CBCO"] = &modelPar_CBCO;
7266  AdmsSensFadType modelPar_CJC=mod.CJC;
7267  bool modelPar_given_CJC=mod.given("CJC");
7268  modParamMap["CJC"] = &modelPar_CJC;
7269  AdmsSensFadType modelPar_QCO=mod.QCO;
7270  bool modelPar_given_QCO=mod.given("QCO");
7271  modParamMap["QCO"] = &modelPar_QCO;
7272  AdmsSensFadType modelPar_CJEP=mod.CJEP;
7273  bool modelPar_given_CJEP=mod.given("CJEP");
7274  modParamMap["CJEP"] = &modelPar_CJEP;
7275  AdmsSensFadType modelPar_PC=mod.PC;
7276  bool modelPar_given_PC=mod.given("PC");
7277  modParamMap["PC"] = &modelPar_PC;
7278  AdmsSensFadType modelPar_MC=mod.MC;
7279  bool modelPar_given_MC=mod.given("MC");
7280  modParamMap["MC"] = &modelPar_MC;
7281  AdmsSensFadType modelPar_AJC=mod.AJC;
7282  bool modelPar_given_AJC=mod.given("AJC");
7283  modParamMap["AJC"] = &modelPar_AJC;
7284  AdmsSensFadType modelPar_CJCP=mod.CJCP;
7285  bool modelPar_given_CJCP=mod.given("CJCP");
7286  modParamMap["CJCP"] = &modelPar_CJCP;
7287  AdmsSensFadType modelPar_PS=mod.PS;
7288  bool modelPar_given_PS=mod.given("PS");
7289  modParamMap["PS"] = &modelPar_PS;
7290  AdmsSensFadType modelPar_MS=mod.MS;
7291  bool modelPar_given_MS=mod.given("MS");
7292  modParamMap["MS"] = &modelPar_MS;
7293  AdmsSensFadType modelPar_AJS=mod.AJS;
7294  bool modelPar_given_AJS=mod.given("AJS");
7295  modParamMap["AJS"] = &modelPar_AJS;
7296  AdmsSensFadType modelPar_IBEI=mod.IBEI;
7297  bool modelPar_given_IBEI=mod.given("IBEI");
7298  modParamMap["IBEI"] = &modelPar_IBEI;
7299  AdmsSensFadType modelPar_WBE=mod.WBE;
7300  bool modelPar_given_WBE=mod.given("WBE");
7301  modParamMap["WBE"] = &modelPar_WBE;
7302  AdmsSensFadType modelPar_NEI=mod.NEI;
7303  bool modelPar_given_NEI=mod.given("NEI");
7304  modParamMap["NEI"] = &modelPar_NEI;
7305  AdmsSensFadType modelPar_IBEN=mod.IBEN;
7306  bool modelPar_given_IBEN=mod.given("IBEN");
7307  modParamMap["IBEN"] = &modelPar_IBEN;
7308  AdmsSensFadType modelPar_NEN=mod.NEN;
7309  bool modelPar_given_NEN=mod.given("NEN");
7310  modParamMap["NEN"] = &modelPar_NEN;
7311  AdmsSensFadType modelPar_IBCI=mod.IBCI;
7312  bool modelPar_given_IBCI=mod.given("IBCI");
7313  modParamMap["IBCI"] = &modelPar_IBCI;
7314  AdmsSensFadType modelPar_NCI=mod.NCI;
7315  bool modelPar_given_NCI=mod.given("NCI");
7316  modParamMap["NCI"] = &modelPar_NCI;
7317  AdmsSensFadType modelPar_IBCN=mod.IBCN;
7318  bool modelPar_given_IBCN=mod.given("IBCN");
7319  modParamMap["IBCN"] = &modelPar_IBCN;
7320  AdmsSensFadType modelPar_NCN=mod.NCN;
7321  bool modelPar_given_NCN=mod.given("NCN");
7322  modParamMap["NCN"] = &modelPar_NCN;
7323  AdmsSensFadType modelPar_AVC1=mod.AVC1;
7324  bool modelPar_given_AVC1=mod.given("AVC1");
7325  modParamMap["AVC1"] = &modelPar_AVC1;
7326  AdmsSensFadType modelPar_AVC2=mod.AVC2;
7327  bool modelPar_given_AVC2=mod.given("AVC2");
7328  modParamMap["AVC2"] = &modelPar_AVC2;
7329  AdmsSensFadType modelPar_ISP=mod.ISP;
7330  bool modelPar_given_ISP=mod.given("ISP");
7331  modParamMap["ISP"] = &modelPar_ISP;
7332  AdmsSensFadType modelPar_WSP=mod.WSP;
7333  bool modelPar_given_WSP=mod.given("WSP");
7334  modParamMap["WSP"] = &modelPar_WSP;
7335  AdmsSensFadType modelPar_NFP=mod.NFP;
7336  bool modelPar_given_NFP=mod.given("NFP");
7337  modParamMap["NFP"] = &modelPar_NFP;
7338  AdmsSensFadType modelPar_IBEIP=mod.IBEIP;
7339  bool modelPar_given_IBEIP=mod.given("IBEIP");
7340  modParamMap["IBEIP"] = &modelPar_IBEIP;
7341  AdmsSensFadType modelPar_IBENP=mod.IBENP;
7342  bool modelPar_given_IBENP=mod.given("IBENP");
7343  modParamMap["IBENP"] = &modelPar_IBENP;
7344  AdmsSensFadType modelPar_IBCIP=mod.IBCIP;
7345  bool modelPar_given_IBCIP=mod.given("IBCIP");
7346  modParamMap["IBCIP"] = &modelPar_IBCIP;
7347  AdmsSensFadType modelPar_NCIP=mod.NCIP;
7348  bool modelPar_given_NCIP=mod.given("NCIP");
7349  modParamMap["NCIP"] = &modelPar_NCIP;
7350  AdmsSensFadType modelPar_IBCNP=mod.IBCNP;
7351  bool modelPar_given_IBCNP=mod.given("IBCNP");
7352  modParamMap["IBCNP"] = &modelPar_IBCNP;
7353  AdmsSensFadType modelPar_NCNP=mod.NCNP;
7354  bool modelPar_given_NCNP=mod.given("NCNP");
7355  modParamMap["NCNP"] = &modelPar_NCNP;
7356  AdmsSensFadType modelPar_VEF=mod.VEF;
7357  bool modelPar_given_VEF=mod.given("VEF");
7358  modParamMap["VEF"] = &modelPar_VEF;
7359  AdmsSensFadType modelPar_VER=mod.VER;
7360  bool modelPar_given_VER=mod.given("VER");
7361  modParamMap["VER"] = &modelPar_VER;
7362  AdmsSensFadType modelPar_IKF=mod.IKF;
7363  bool modelPar_given_IKF=mod.given("IKF");
7364  modParamMap["IKF"] = &modelPar_IKF;
7365  AdmsSensFadType modelPar_IKR=mod.IKR;
7366  bool modelPar_given_IKR=mod.given("IKR");
7367  modParamMap["IKR"] = &modelPar_IKR;
7368  AdmsSensFadType modelPar_IKP=mod.IKP;
7369  bool modelPar_given_IKP=mod.given("IKP");
7370  modParamMap["IKP"] = &modelPar_IKP;
7371  AdmsSensFadType modelPar_TF=mod.TF;
7372  bool modelPar_given_TF=mod.given("TF");
7373  modParamMap["TF"] = &modelPar_TF;
7374  AdmsSensFadType modelPar_QTF=mod.QTF;
7375  bool modelPar_given_QTF=mod.given("QTF");
7376  modParamMap["QTF"] = &modelPar_QTF;
7377  AdmsSensFadType modelPar_XTF=mod.XTF;
7378  bool modelPar_given_XTF=mod.given("XTF");
7379  modParamMap["XTF"] = &modelPar_XTF;
7380  AdmsSensFadType modelPar_VTF=mod.VTF;
7381  bool modelPar_given_VTF=mod.given("VTF");
7382  modParamMap["VTF"] = &modelPar_VTF;
7383  AdmsSensFadType modelPar_ITF=mod.ITF;
7384  bool modelPar_given_ITF=mod.given("ITF");
7385  modParamMap["ITF"] = &modelPar_ITF;
7386  AdmsSensFadType modelPar_TR=mod.TR;
7387  bool modelPar_given_TR=mod.given("TR");
7388  modParamMap["TR"] = &modelPar_TR;
7389  AdmsSensFadType modelPar_TD=mod.TD;
7390  bool modelPar_given_TD=mod.given("TD");
7391  modParamMap["TD"] = &modelPar_TD;
7392  AdmsSensFadType modelPar_KFN=mod.KFN;
7393  bool modelPar_given_KFN=mod.given("KFN");
7394  modParamMap["KFN"] = &modelPar_KFN;
7395  AdmsSensFadType modelPar_AFN=mod.AFN;
7396  bool modelPar_given_AFN=mod.given("AFN");
7397  modParamMap["AFN"] = &modelPar_AFN;
7398  AdmsSensFadType modelPar_BFN=mod.BFN;
7399  bool modelPar_given_BFN=mod.given("BFN");
7400  modParamMap["BFN"] = &modelPar_BFN;
7401  AdmsSensFadType modelPar_XRE=mod.XRE;
7402  bool modelPar_given_XRE=mod.given("XRE");
7403  modParamMap["XRE"] = &modelPar_XRE;
7404  AdmsSensFadType modelPar_XRBI=mod.XRBI;
7405  bool modelPar_given_XRBI=mod.given("XRBI");
7406  modParamMap["XRBI"] = &modelPar_XRBI;
7407  AdmsSensFadType modelPar_XRCI=mod.XRCI;
7408  bool modelPar_given_XRCI=mod.given("XRCI");
7409  modParamMap["XRCI"] = &modelPar_XRCI;
7410  AdmsSensFadType modelPar_XRS=mod.XRS;
7411  bool modelPar_given_XRS=mod.given("XRS");
7412  modParamMap["XRS"] = &modelPar_XRS;
7413  AdmsSensFadType modelPar_XVO=mod.XVO;
7414  bool modelPar_given_XVO=mod.given("XVO");
7415  modParamMap["XVO"] = &modelPar_XVO;
7416  AdmsSensFadType modelPar_EA=mod.EA;
7417  bool modelPar_given_EA=mod.given("EA");
7418  modParamMap["EA"] = &modelPar_EA;
7419  AdmsSensFadType modelPar_EAIE=mod.EAIE;
7420  bool modelPar_given_EAIE=mod.given("EAIE");
7421  modParamMap["EAIE"] = &modelPar_EAIE;
7422  AdmsSensFadType modelPar_EAIC=mod.EAIC;
7423  bool modelPar_given_EAIC=mod.given("EAIC");
7424  modParamMap["EAIC"] = &modelPar_EAIC;
7425  AdmsSensFadType modelPar_EAIS=mod.EAIS;
7426  bool modelPar_given_EAIS=mod.given("EAIS");
7427  modParamMap["EAIS"] = &modelPar_EAIS;
7428  AdmsSensFadType modelPar_EANE=mod.EANE;
7429  bool modelPar_given_EANE=mod.given("EANE");
7430  modParamMap["EANE"] = &modelPar_EANE;
7431  AdmsSensFadType modelPar_EANC=mod.EANC;
7432  bool modelPar_given_EANC=mod.given("EANC");
7433  modParamMap["EANC"] = &modelPar_EANC;
7434  AdmsSensFadType modelPar_EANS=mod.EANS;
7435  bool modelPar_given_EANS=mod.given("EANS");
7436  modParamMap["EANS"] = &modelPar_EANS;
7437  AdmsSensFadType modelPar_XIS=mod.XIS;
7438  bool modelPar_given_XIS=mod.given("XIS");
7439  modParamMap["XIS"] = &modelPar_XIS;
7440  AdmsSensFadType modelPar_XII=mod.XII;
7441  bool modelPar_given_XII=mod.given("XII");
7442  modParamMap["XII"] = &modelPar_XII;
7443  AdmsSensFadType modelPar_XIN=mod.XIN;
7444  bool modelPar_given_XIN=mod.given("XIN");
7445  modParamMap["XIN"] = &modelPar_XIN;
7446  AdmsSensFadType modelPar_TNF=mod.TNF;
7447  bool modelPar_given_TNF=mod.given("TNF");
7448  modParamMap["TNF"] = &modelPar_TNF;
7449  AdmsSensFadType modelPar_TAVC=mod.TAVC;
7450  bool modelPar_given_TAVC=mod.given("TAVC");
7451  modParamMap["TAVC"] = &modelPar_TAVC;
7452  AdmsSensFadType modelPar_RTH=mod.RTH;
7453  bool modelPar_given_RTH=mod.given("RTH");
7454  modParamMap["RTH"] = &modelPar_RTH;
7455  AdmsSensFadType modelPar_CTH=mod.CTH;
7456  bool modelPar_given_CTH=mod.given("CTH");
7457  modParamMap["CTH"] = &modelPar_CTH;
7458  AdmsSensFadType modelPar_VRT=mod.VRT;
7459  bool modelPar_given_VRT=mod.given("VRT");
7460  modParamMap["VRT"] = &modelPar_VRT;
7461  AdmsSensFadType modelPar_ART=mod.ART;
7462  bool modelPar_given_ART=mod.given("ART");
7463  modParamMap["ART"] = &modelPar_ART;
7464  AdmsSensFadType modelPar_CCSO=mod.CCSO;
7465  bool modelPar_given_CCSO=mod.given("CCSO");
7466  modParamMap["CCSO"] = &modelPar_CCSO;
7467  AdmsSensFadType modelPar_QBM=mod.QBM;
7468  bool modelPar_given_QBM=mod.given("QBM");
7469  modParamMap["QBM"] = &modelPar_QBM;
7470  AdmsSensFadType modelPar_NKF=mod.NKF;
7471  bool modelPar_given_NKF=mod.given("NKF");
7472  modParamMap["NKF"] = &modelPar_NKF;
7473  AdmsSensFadType modelPar_XIKF=mod.XIKF;
7474  bool modelPar_given_XIKF=mod.given("XIKF");
7475  modParamMap["XIKF"] = &modelPar_XIKF;
7476  AdmsSensFadType modelPar_XRCX=mod.XRCX;
7477  bool modelPar_given_XRCX=mod.given("XRCX");
7478  modParamMap["XRCX"] = &modelPar_XRCX;
7479  AdmsSensFadType modelPar_XRBX=mod.XRBX;
7480  bool modelPar_given_XRBX=mod.given("XRBX");
7481  modParamMap["XRBX"] = &modelPar_XRBX;
7482  AdmsSensFadType modelPar_XRBP=mod.XRBP;
7483  bool modelPar_given_XRBP=mod.given("XRBP");
7484  modParamMap["XRBP"] = &modelPar_XRBP;
7485  AdmsSensFadType modelPar_ISRR=mod.ISRR;
7486  bool modelPar_given_ISRR=mod.given("ISRR");
7487  modParamMap["ISRR"] = &modelPar_ISRR;
7488  AdmsSensFadType modelPar_XISR=mod.XISR;
7489  bool modelPar_given_XISR=mod.given("XISR");
7490  modParamMap["XISR"] = &modelPar_XISR;
7491  AdmsSensFadType modelPar_DEAR=mod.DEAR;
7492  bool modelPar_given_DEAR=mod.given("DEAR");
7493  modParamMap["DEAR"] = &modelPar_DEAR;
7494  AdmsSensFadType modelPar_EAP=mod.EAP;
7495  bool modelPar_given_EAP=mod.given("EAP");
7496  modParamMap["EAP"] = &modelPar_EAP;
7497  AdmsSensFadType modelPar_VBBE=mod.VBBE;
7498  bool modelPar_given_VBBE=mod.given("VBBE");
7499  modParamMap["VBBE"] = &modelPar_VBBE;
7500  AdmsSensFadType modelPar_NBBE=mod.NBBE;
7501  bool modelPar_given_NBBE=mod.given("NBBE");
7502  modParamMap["NBBE"] = &modelPar_NBBE;
7503  AdmsSensFadType modelPar_IBBE=mod.IBBE;
7504  bool modelPar_given_IBBE=mod.given("IBBE");
7505  modParamMap["IBBE"] = &modelPar_IBBE;
7506  AdmsSensFadType modelPar_TVBBE1=mod.TVBBE1;
7507  bool modelPar_given_TVBBE1=mod.given("TVBBE1");
7508  modParamMap["TVBBE1"] = &modelPar_TVBBE1;
7509  AdmsSensFadType modelPar_TVBBE2=mod.TVBBE2;
7510  bool modelPar_given_TVBBE2=mod.given("TVBBE2");
7511  modParamMap["TVBBE2"] = &modelPar_TVBBE2;
7512  AdmsSensFadType modelPar_TNBBE=mod.TNBBE;
7513  bool modelPar_given_TNBBE=mod.given("TNBBE");
7514  modParamMap["TNBBE"] = &modelPar_TNBBE;
7515  AdmsSensFadType modelPar_EBBE=mod.EBBE;
7516  bool modelPar_given_EBBE=mod.given("EBBE");
7517  modParamMap["EBBE"] = &modelPar_EBBE;
7518  AdmsSensFadType modelPar_DTEMP=mod.DTEMP;
7519  bool modelPar_given_DTEMP=mod.given("DTEMP");
7520  modParamMap["DTEMP"] = &modelPar_DTEMP;
7521  AdmsSensFadType modelPar_VERS=mod.VERS;
7522  bool modelPar_given_VERS=mod.given("VERS");
7523  modParamMap["VERS"] = &modelPar_VERS;
7524  AdmsSensFadType modelPar_VREV=mod.VREV;
7525  bool modelPar_given_VREV=mod.given("VREV");
7526  modParamMap["VREV"] = &modelPar_VREV;
7527 
7528 
7529  // hidden reals
7530 
7531 
7532  // non-reals (including hiddens)
7533  int modelPar_dtype=mod.dtype;
7534 
7535 
7536  // Set the one parameter whose name was passed in to be the independent
7537  // variable for Sacado purposes. Since we stored variable pointers, this
7538  // makes sure that that ONE variable gets set right.
7539  // FIXME: make this check name for presence first! Segfault on invalid.
7540  modParamMap[name]->diff(0,1);
7541 
7542  //make local copies of all model vars
7543  //reals
7544 
7545 
7546  // non-reals
7547 
7548 
7549 
7550  // Now loop over all instances and do the deed
7551  int inst=0;
7552  for (std::vector<Instance*>::const_iterator in_it=mod.instanceContainer.begin(); in_it != mod.instanceContainer.end(); ++in_it,++inst)
7553  {
7554 
7555  Instance & in=*(*in_it);
7556  // initialize contributions to zero (automatically sets derivatives to zero)
7557  for (int i=0; i < 10+0 ; ++i)
7558  {
7559  staticContributions[i]=0;
7560  dynamicContributions[i]=0;
7561  }
7562 
7563 
7564 
7565  // Copy out all the instance parameters (doubles) into FAD types
7566  // reals
7567  AdmsSensFadType instancePar_DTEMP=in.DTEMP;
7568  bool instancePar_given_DTEMP=in.given("DTEMP");
7569 
7570 
7571  // real hidden instance
7572 
7573 
7574  // Copy all the non-real instance params into vars of their appropriate type:
7575  int instancePar_M=in.M;
7576  bool instancePar_given_M=in.given("M");
7577 
7578 
7579 
7580 
7581  // If there are any instance parameters that were not given, and have
7582  // corresponding model params, copy the model param into the instance.
7583  // This was already done by the instance constructor, but we do it again
7584  // because now we're propagating derivatives, and the user could be trying
7585  // to get sensitivity to the model parameter.
7586  if (!(in.given("DTEMP")))
7587  {
7588  instancePar_DTEMP = modelPar_DTEMP;
7589  }
7590 
7591 
7592  //make local copies of all instance vars
7593  //reals
7594 
7595 
7596  //non-reals
7597 
7598 
7599 
7600  Linear::Vector * solVectorPtr = in.extData.nextSolVectorPtr;
7601 
7602  // extract solution variables and set as Fad independent variables.
7603  probeVars[in.admsProbeID_V_ci_ei] = (*solVectorPtr)[in.li_ci] - (*solVectorPtr)[in.li_ei];
7604  probeVars[in.admsProbeID_V_b_c] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_c];
7605  probeVars[in.admsProbeID_V_bp_cx] = (*solVectorPtr)[in.li_bp] - (*solVectorPtr)[in.li_cx];
7606  probeVars[in.admsProbeID_V_e_ei] = (*solVectorPtr)[in.li_e] - (*solVectorPtr)[in.li_ei];
7607  probeVars[in.admsProbeID_V_b_bx] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_bx];
7608  probeVars[in.admsProbeID_V_bx_bi] = (*solVectorPtr)[in.li_bx] - (*solVectorPtr)[in.li_bi];
7609  probeVars[in.admsProbeID_V_cx_ci] = (*solVectorPtr)[in.li_cx] - (*solVectorPtr)[in.li_ci];
7610  probeVars[in.admsProbeID_V_c_cx] = (*solVectorPtr)[in.li_c] - (*solVectorPtr)[in.li_cx];
7611  probeVars[in.admsProbeID_V_b_e] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_e];
7612  probeVars[in.admsProbeID_V_dt_GND] = (*solVectorPtr)[in.li_dt];
7613  probeVars[in.admsProbeID_V_bx_bp] = (*solVectorPtr)[in.li_bx] - (*solVectorPtr)[in.li_bp];
7614  probeVars[in.admsProbeID_V_bi_cx] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_cx];
7615  probeVars[in.admsProbeID_V_bx_ei] = (*solVectorPtr)[in.li_bx] - (*solVectorPtr)[in.li_ei];
7616  probeVars[in.admsProbeID_V_bi_ci] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_ci];
7617  probeVars[in.admsProbeID_V_bi_ei] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_ei];
7618 
7619  // pre-multiply any "typed" probes (i.e. those limited with "typedpnjlim")
7620  probeVars[in.admsProbeID_V_b_e] *= modelPar_dtype;
7621  probeVars[in.admsProbeID_V_bx_bp] *= modelPar_dtype;
7622  probeVars[in.admsProbeID_V_bi_cx] *= modelPar_dtype;
7623  probeVars[in.admsProbeID_V_bx_ei] *= modelPar_dtype;
7624  probeVars[in.admsProbeID_V_bi_ci] *= modelPar_dtype;
7625  probeVars[in.admsProbeID_V_bi_ei] *= modelPar_dtype;
7626 
7627 
7628 
7629  // Now call the function that does the heavy lifting.
7630 
7631  evaluateModelEquations(
7632  probeVars,
7633  // probe constants
7634  in.admsProbeID_V_ci_ei,
7635  in.admsProbeID_V_b_c,
7636  in.admsProbeID_V_bp_cx,
7637  in.admsProbeID_V_e_ei,
7638  in.admsProbeID_V_b_bx,
7639  in.admsProbeID_V_bx_bi,
7640  in.admsProbeID_V_cx_ci,
7641  in.admsProbeID_V_c_cx,
7642  in.admsProbeID_V_b_e,
7643  in.admsProbeID_V_dt_GND,
7644  in.admsProbeID_V_bx_bp,
7645  in.admsProbeID_V_bi_cx,
7646  in.admsProbeID_V_bx_ei,
7647  in.admsProbeID_V_bi_ci,
7648  in.admsProbeID_V_bi_ei,
7649 
7650  // node constants
7651  in.admsNodeID_c,
7652  in.admsNodeID_b,
7653  in.admsNodeID_e,
7654  in.admsNodeID_dt,
7655  in.admsNodeID_cx,
7656  in.admsNodeID_ci,
7657  in.admsNodeID_bx,
7658  in.admsNodeID_bi,
7659  in.admsNodeID_ei,
7660  in.admsNodeID_bp,
7661  // instance parameters
7662  // reals
7663  instancePar_DTEMP,
7664  instancePar_given_DTEMP,
7665  // non-reals(including hidden)
7666  instancePar_M,
7667  instancePar_given_M,
7668  // model parameters
7669  // reals
7670  modelPar_TNOM,
7671  modelPar_given_TNOM,
7672  modelPar_RCX,
7673  modelPar_given_RCX,
7674  modelPar_RCI,
7675  modelPar_given_RCI,
7676  modelPar_VO,
7677  modelPar_given_VO,
7678  modelPar_GAMM,
7679  modelPar_given_GAMM,
7680  modelPar_HRCF,
7681  modelPar_given_HRCF,
7682  modelPar_RBX,
7683  modelPar_given_RBX,
7684  modelPar_RBI,
7685  modelPar_given_RBI,
7686  modelPar_RE,
7687  modelPar_given_RE,
7688  modelPar_RS,
7689  modelPar_given_RS,
7690  modelPar_RBP,
7691  modelPar_given_RBP,
7692  modelPar_IS,
7693  modelPar_given_IS,
7694  modelPar_NF,
7695  modelPar_given_NF,
7696  modelPar_NR,
7697  modelPar_given_NR,
7698  modelPar_FC,
7699  modelPar_given_FC,
7700  modelPar_CBEO,
7701  modelPar_given_CBEO,
7702  modelPar_CJE,
7703  modelPar_given_CJE,
7704  modelPar_PE,
7705  modelPar_given_PE,
7706  modelPar_ME,
7707  modelPar_given_ME,
7708  modelPar_AJE,
7709  modelPar_given_AJE,
7710  modelPar_CBCO,
7711  modelPar_given_CBCO,
7712  modelPar_CJC,
7713  modelPar_given_CJC,
7714  modelPar_QCO,
7715  modelPar_given_QCO,
7716  modelPar_CJEP,
7717  modelPar_given_CJEP,
7718  modelPar_PC,
7719  modelPar_given_PC,
7720  modelPar_MC,
7721  modelPar_given_MC,
7722  modelPar_AJC,
7723  modelPar_given_AJC,
7724  modelPar_CJCP,
7725  modelPar_given_CJCP,
7726  modelPar_PS,
7727  modelPar_given_PS,
7728  modelPar_MS,
7729  modelPar_given_MS,
7730  modelPar_AJS,
7731  modelPar_given_AJS,
7732  modelPar_IBEI,
7733  modelPar_given_IBEI,
7734  modelPar_WBE,
7735  modelPar_given_WBE,
7736  modelPar_NEI,
7737  modelPar_given_NEI,
7738  modelPar_IBEN,
7739  modelPar_given_IBEN,
7740  modelPar_NEN,
7741  modelPar_given_NEN,
7742  modelPar_IBCI,
7743  modelPar_given_IBCI,
7744  modelPar_NCI,
7745  modelPar_given_NCI,
7746  modelPar_IBCN,
7747  modelPar_given_IBCN,
7748  modelPar_NCN,
7749  modelPar_given_NCN,
7750  modelPar_AVC1,
7751  modelPar_given_AVC1,
7752  modelPar_AVC2,
7753  modelPar_given_AVC2,
7754  modelPar_ISP,
7755  modelPar_given_ISP,
7756  modelPar_WSP,
7757  modelPar_given_WSP,
7758  modelPar_NFP,
7759  modelPar_given_NFP,
7760  modelPar_IBEIP,
7761  modelPar_given_IBEIP,
7762  modelPar_IBENP,
7763  modelPar_given_IBENP,
7764  modelPar_IBCIP,
7765  modelPar_given_IBCIP,
7766  modelPar_NCIP,
7767  modelPar_given_NCIP,
7768  modelPar_IBCNP,
7769  modelPar_given_IBCNP,
7770  modelPar_NCNP,
7771  modelPar_given_NCNP,
7772  modelPar_VEF,
7773  modelPar_given_VEF,
7774  modelPar_VER,
7775  modelPar_given_VER,
7776  modelPar_IKF,
7777  modelPar_given_IKF,
7778  modelPar_IKR,
7779  modelPar_given_IKR,
7780  modelPar_IKP,
7781  modelPar_given_IKP,
7782  modelPar_TF,
7783  modelPar_given_TF,
7784  modelPar_QTF,
7785  modelPar_given_QTF,
7786  modelPar_XTF,
7787  modelPar_given_XTF,
7788  modelPar_VTF,
7789  modelPar_given_VTF,
7790  modelPar_ITF,
7791  modelPar_given_ITF,
7792  modelPar_TR,
7793  modelPar_given_TR,
7794  modelPar_TD,
7795  modelPar_given_TD,
7796  modelPar_KFN,
7797  modelPar_given_KFN,
7798  modelPar_AFN,
7799  modelPar_given_AFN,
7800  modelPar_BFN,
7801  modelPar_given_BFN,
7802  modelPar_XRE,
7803  modelPar_given_XRE,
7804  modelPar_XRBI,
7805  modelPar_given_XRBI,
7806  modelPar_XRCI,
7807  modelPar_given_XRCI,
7808  modelPar_XRS,
7809  modelPar_given_XRS,
7810  modelPar_XVO,
7811  modelPar_given_XVO,
7812  modelPar_EA,
7813  modelPar_given_EA,
7814  modelPar_EAIE,
7815  modelPar_given_EAIE,
7816  modelPar_EAIC,
7817  modelPar_given_EAIC,
7818  modelPar_EAIS,
7819  modelPar_given_EAIS,
7820  modelPar_EANE,
7821  modelPar_given_EANE,
7822  modelPar_EANC,
7823  modelPar_given_EANC,
7824  modelPar_EANS,
7825  modelPar_given_EANS,
7826  modelPar_XIS,
7827  modelPar_given_XIS,
7828  modelPar_XII,
7829  modelPar_given_XII,
7830  modelPar_XIN,
7831  modelPar_given_XIN,
7832  modelPar_TNF,
7833  modelPar_given_TNF,
7834  modelPar_TAVC,
7835  modelPar_given_TAVC,
7836  modelPar_RTH,
7837  modelPar_given_RTH,
7838  modelPar_CTH,
7839  modelPar_given_CTH,
7840  modelPar_VRT,
7841  modelPar_given_VRT,
7842  modelPar_ART,
7843  modelPar_given_ART,
7844  modelPar_CCSO,
7845  modelPar_given_CCSO,
7846  modelPar_QBM,
7847  modelPar_given_QBM,
7848  modelPar_NKF,
7849  modelPar_given_NKF,
7850  modelPar_XIKF,
7851  modelPar_given_XIKF,
7852  modelPar_XRCX,
7853  modelPar_given_XRCX,
7854  modelPar_XRBX,
7855  modelPar_given_XRBX,
7856  modelPar_XRBP,
7857  modelPar_given_XRBP,
7858  modelPar_ISRR,
7859  modelPar_given_ISRR,
7860  modelPar_XISR,
7861  modelPar_given_XISR,
7862  modelPar_DEAR,
7863  modelPar_given_DEAR,
7864  modelPar_EAP,
7865  modelPar_given_EAP,
7866  modelPar_VBBE,
7867  modelPar_given_VBBE,
7868  modelPar_NBBE,
7869  modelPar_given_NBBE,
7870  modelPar_IBBE,
7871  modelPar_given_IBBE,
7872  modelPar_TVBBE1,
7873  modelPar_given_TVBBE1,
7874  modelPar_TVBBE2,
7875  modelPar_given_TVBBE2,
7876  modelPar_TNBBE,
7877  modelPar_given_TNBBE,
7878  modelPar_EBBE,
7879  modelPar_given_EBBE,
7880  modelPar_DTEMP,
7881  modelPar_given_DTEMP,
7882  modelPar_VERS,
7883  modelPar_given_VERS,
7884  modelPar_VREV,
7885  modelPar_given_VREV,
7886  // non-reals (including hidden)
7887  modelPar_dtype,
7888  in.admsTemperature,
7889  in.adms_vt_nom,
7890  in.getDeviceOptions().gmin,
7891  staticContributions,
7892  dynamicContributions,
7893  in);
7894 
7895 
7896  // We now have the F and Q vector stuff, populate the dependencies:
7897 
7898  dfdp[in.admsNodeID_c+inst*(10+0)] += staticContributions[in.admsNodeID_c].dx(0);
7899  dqdp[in.admsNodeID_c+inst*(10+0)] += dynamicContributions[in.admsNodeID_c].dx(0);
7900  Findices[in.admsNodeID_c+inst*(10+0)] = in.li_c;
7901  Qindices[in.admsNodeID_c+inst*(10+0)] = in.li_c;
7902  dfdp[in.admsNodeID_b+inst*(10+0)] += staticContributions[in.admsNodeID_b].dx(0);
7903  dqdp[in.admsNodeID_b+inst*(10+0)] += dynamicContributions[in.admsNodeID_b].dx(0);
7904  Findices[in.admsNodeID_b+inst*(10+0)] = in.li_b;
7905  Qindices[in.admsNodeID_b+inst*(10+0)] = in.li_b;
7906  dfdp[in.admsNodeID_e+inst*(10+0)] += staticContributions[in.admsNodeID_e].dx(0);
7907  dqdp[in.admsNodeID_e+inst*(10+0)] += dynamicContributions[in.admsNodeID_e].dx(0);
7908  Findices[in.admsNodeID_e+inst*(10+0)] = in.li_e;
7909  Qindices[in.admsNodeID_e+inst*(10+0)] = in.li_e;
7910  dfdp[in.admsNodeID_dt+inst*(10+0)] += staticContributions[in.admsNodeID_dt].dx(0);
7911  dqdp[in.admsNodeID_dt+inst*(10+0)] += dynamicContributions[in.admsNodeID_dt].dx(0);
7912  Findices[in.admsNodeID_dt+inst*(10+0)] = in.li_dt;
7913  Qindices[in.admsNodeID_dt+inst*(10+0)] = in.li_dt;
7914  dfdp[in.admsNodeID_cx+inst*(10+0)] += staticContributions[in.admsNodeID_cx].dx(0);
7915  dqdp[in.admsNodeID_cx+inst*(10+0)] += dynamicContributions[in.admsNodeID_cx].dx(0);
7916  Findices[in.admsNodeID_cx+inst*(10+0)] = in.li_cx;
7917  Qindices[in.admsNodeID_cx+inst*(10+0)] = in.li_cx;
7918  dfdp[in.admsNodeID_ci+inst*(10+0)] += staticContributions[in.admsNodeID_ci].dx(0);
7919  dqdp[in.admsNodeID_ci+inst*(10+0)] += dynamicContributions[in.admsNodeID_ci].dx(0);
7920  Findices[in.admsNodeID_ci+inst*(10+0)] = in.li_ci;
7921  Qindices[in.admsNodeID_ci+inst*(10+0)] = in.li_ci;
7922  dfdp[in.admsNodeID_bx+inst*(10+0)] += staticContributions[in.admsNodeID_bx].dx(0);
7923  dqdp[in.admsNodeID_bx+inst*(10+0)] += dynamicContributions[in.admsNodeID_bx].dx(0);
7924  Findices[in.admsNodeID_bx+inst*(10+0)] = in.li_bx;
7925  Qindices[in.admsNodeID_bx+inst*(10+0)] = in.li_bx;
7926  dfdp[in.admsNodeID_bi+inst*(10+0)] += staticContributions[in.admsNodeID_bi].dx(0);
7927  dqdp[in.admsNodeID_bi+inst*(10+0)] += dynamicContributions[in.admsNodeID_bi].dx(0);
7928  Findices[in.admsNodeID_bi+inst*(10+0)] = in.li_bi;
7929  Qindices[in.admsNodeID_bi+inst*(10+0)] = in.li_bi;
7930  dfdp[in.admsNodeID_ei+inst*(10+0)] += staticContributions[in.admsNodeID_ei].dx(0);
7931  dqdp[in.admsNodeID_ei+inst*(10+0)] += dynamicContributions[in.admsNodeID_ei].dx(0);
7932  Findices[in.admsNodeID_ei+inst*(10+0)] = in.li_ei;
7933  Qindices[in.admsNodeID_ei+inst*(10+0)] = in.li_ei;
7934  dfdp[in.admsNodeID_bp+inst*(10+0)] += staticContributions[in.admsNodeID_bp].dx(0);
7935  dqdp[in.admsNodeID_bp+inst*(10+0)] += dynamicContributions[in.admsNodeID_bp].dx(0);
7936  Findices[in.admsNodeID_bp+inst*(10+0)] = in.li_bp;
7937  Qindices[in.admsNodeID_bp+inst*(10+0)] = in.li_bp;
7938  }
7939 
7940 }
7941 
7942 #endif // Xyce_ADMS_SENSITIVITIES
7943 
7944 } // namespace ADMSvbic
7945 } // namespace Device
7946 } // namespace Xyce
const InstanceName & getName() const
static T adms_vt(const T temp)
std::vector< double > Jdxp_dynamic
void registerLIDs(const LocalIdVector &intLIDVecRef, const LocalIdVector &extLIDVecRef)
const SolverState & solverState_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
Definition: N_DEV_Pars.h:1429
#define CONSTCtoK
Definition: N_DEV_Const.h:52
double pnjlim_new(double vnew, double vold, double vt, double vcrit, int *icheck)
Linear::Vector * nextSolVectorPtr
bool processParams()
processParams
bool given(const std::string &parameter_name) const
Linear::Vector * daeQVectorPtr
Pure virtual class to augment a linear system.
void addInternalNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
#define MC
#define AssertLIDs(cmp)
Parameter is subject to being set to minimum junction capacitance.
Definition: N_DEV_Pars.h:71
void jacStampMap_fixOrder(const JacobianStamp &stamp_parent, JacobianStamp &map2_parent, JacobianStamp &stamp, JacobianStamp &map2)
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
Parameter is subject to being set to minimum lead resistance.
Definition: N_DEV_Pars.h:70
std::vector< AdmsFadType > staticContributions
static void loadModelParameters(ParametricData< Model > &model_parameters)
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
Instance(const Configuration &configuration, const InstanceBlock &instance_block, Model &model, const FactoryBlock &factory_block)
std::vector< Param > params
Parameters from the line.
std::vector< std::vector< int > > jacMap2
void setParams(const std::vector< Param > &params)
const std::string & getName() const
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
Sacado::Fad::SFad< double, 1 > AdmsSensFadType
void registerJacLIDs(const JacobianStamp &jacLIDVec)
const DeviceOptions & getDeviceOptions() const
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
Parameter is not to be documented.
Definition: N_DEV_Pars.h:72
const DeviceOptions & deviceOptions_
std::vector< std::vector< int > > JacobianStamp
Definition: N_DEV_fwd.h:196
Linear::Vector * nextStaVectorPtr
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
Model(const Configuration &configuration, const ModelBlock &model_block, const FactoryBlock &factory_block)
Linear::Matrix * dFdxMatrixPtr
ScalarT limRTH(ScalarT orig, ScalarT old)
The Device class is an interface for device implementations.
Definition: N_DEV_Device.h:101
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
IdVector LocalIdVector
Definition: N_DEV_fwd.h:198
std::vector< double > probeDiffs
Sacado::Fad::SFad< double, 15 > AdmsFadType
std::vector< AdmsFadType > probeVars
Class Configuration contains device configuration data.
bool processInstanceParams()
processInstanceParams
const JacobianStamp & jacobianStamp() const
std::vector< double > Jdxp_static
#define M
void jacStampMap(const JacobianStamp &stamp_parent, IdVector &map_parent, JacobianStamp &map2_parent, JacobianStamp &stamp, IdVector &map, JacobianStamp &map2, int from, int to, int original_size)
const SolverState & getSolverState() const
std::vector< Instance * > instanceContainer
void registerStateLIDs(const LocalIdVector &staLIDVecRef)
virtual std::ostream & printOutInstances(std::ostream &os) const
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
Linear::Vector * currStaVectorPtr
Linear::Vector * daeFVectorPtr
const std::string & getType() const
double gmin
minimum allowed conductance.
std::vector< AdmsFadType > dynamicContributions
#define RS
ModelBlock represents a .MODEL line from the netlist.
Manages parameter binding for class C.
Definition: N_DEV_Pars.h:214
InstanceBlock represent a device instance line from the netlist.
bool initJctFlag_
true if on the first newton step of the first dcop solve of the first .STEP iteration. BJT, JFET, Diode, MOSFET, SW, Extern
Util::Param temp
operating temperature of ckt.
std::vector< Param > params
bool updateTemperature(const double &temp=-999.0)
Linear::Matrix * dQdxMatrixPtr
Linear::Vector * flagSolVectorPtr
std::vector< std::vector< int > > jacStamp
void setModParams(const std::vector< Param > &params)