Xyce  6.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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-2014 Sandia Corporation
11 //
12 // This program is free software: you can redistribute it and/or modify
13 // it under the terms of the GNU General Public License as published by
14 // the Free Software Foundation, either version 3 of the License, or
15 // (at your option) any later version.
16 //
17 // This program is distributed in the hope that it will be useful,
18 // but WITHOUT ANY WARRANTY; without even the implied warranty of
19 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 // GNU General Public License for more details.
21 //
22 // You should have received a copy of the GNU General Public License
23 // along with this program. If not, see <http://www.gnu.org/licenses/>.
24 //-----------------------------------------------------------------------------
25 
26 //-------------------------------------------------------------------------
27 // Filename : $RCSfile: N_DEV_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.1.0
33 // DO NOT EDIT THIS FILE DIRECTLY! It may be overwritten!
34 //
35 // Creator : admsXml-2.3.0
36 //
37 // Creation Date : Thu, 06 Mar 2014 15:58:02
38 //
39 // Revision Information:
40 // ---------------------
41 //
42 // Revision Number: $Revision: 1.70.2.3 $
43 //
44 // Revision Date : $Date: 2014/03/06 23:33:42 $
45 //
46 // Current Owner : $Author: tvrusso $
47 //-------------------------------------------------------------------------
48 
49 #include <Xyce_config.h>
50 #include <N_DEV_ADMSvbic.h>
51 
52 
53 #include <N_UTL_Misc.h>
54 
55 #include <N_DEV_Const.h>
56 #include <N_DEV_DeviceOptions.h>
57 #include <N_DEV_DeviceMaster.h>
58 #include <N_DEV_ExternData.h>
59 #include <N_DEV_MatrixLoadData.h>
60 #include <N_DEV_SolverState.h>
61 #include <N_DEV_Message.h>
62 
63 #include <N_LAS_Matrix.h>
64 #include <N_LAS_Vector.h>
65 
66 namespace Xyce {
67 namespace Device {
68 namespace ADMSvbic {
69 
70 
71 void
73 {
74  // Set up each parameter directly, using the up-cased variable name
75  // as the tag.
76 
77  // This kludge is to force us always to have an instance parameter
78  // that the device manager can set to the temperature, even if we have
79  // no "TEMP".
80  p.addPar("XYCEADMSINSTTEMP", 0.0, &ADMSvbic::Instance::admsInstTemp)
81  .setExpressionAccess(NO_DOC)
82  .setUnit(U_DEGK)
83  .setCategory(CAT_TEMP)
84  .setDescription("Internal-use parameter for setting device instance temperature");
85  p.addPar("M", static_cast<int>(1), &ADMSvbic::Instance::M)
86  .setUnit(U_NONE)
87  .setDescription("Number of devices in parallel");
88 
89 
90 }
91 
93 {
94  // Set up each parameter directly, using the up-cased variable name
95  // as the tag.
96 
97  // This kludge is to force us always to have a model parameter
98  // that the device manager can set to the temperature, even if we have
99  // no "TEMP".
100  p.addPar("XYCEADMSMODTEMP", 0.0, &ADMSvbic::Model::admsModTemp)
101  .setExpressionAccess(NO_DOC)
102  .setUnit(U_DEGK)
103  .setCategory(CAT_TEMP)
104  .setDescription("Internal-use parameter for setting device model temperature");
105  p.addPar("TNOM", static_cast<double>(27.0), &ADMSvbic::Model::TNOM)
106  .setUnit(U_DEGC)
107 
108  .setDescription("Nominal temperature");
109  p.addPar("RCX", static_cast<double>(0.0), &ADMSvbic::Model::RCX)
110  .setExpressionAccess(ParameterType::MIN_RES)
111  .setUnit(U_OHM)
112 
113  .setDescription("Extrinsic Collector resistance");
114  p.addPar("RCI", static_cast<double>(0.0), &ADMSvbic::Model::RCI)
115  .setExpressionAccess(ParameterType::MIN_RES)
116  .setUnit(U_OHM)
117 
118  .setDescription("Intrinsic Collector resistance");
119  p.addPar("VO", static_cast<double>(0.0), &ADMSvbic::Model::VO)
120  .setUnit(U_VOLT)
121 
122  .setDescription("Epi drift saturation voltage");
123  p.addPar("GAMM", static_cast<double>(0.0), &ADMSvbic::Model::GAMM)
124  .setUnit(U_NONE)
125 
126  .setDescription("Epi doping parameter");
127  p.addPar("HRCF", static_cast<double>(0.0), &ADMSvbic::Model::HRCF)
128  .setUnit(U_NONE)
129 
130  .setDescription("High current RC factor");
131  p.addPar("RBX", static_cast<double>(0.0), &ADMSvbic::Model::RBX)
132  .setExpressionAccess(ParameterType::MIN_RES)
133  .setUnit(U_OHM)
134 
135  .setDescription("Extrinsic base resistance");
136  p.addPar("RBI", static_cast<double>(0.0), &ADMSvbic::Model::RBI)
137  .setExpressionAccess(ParameterType::MIN_RES)
138  .setUnit(U_OHM)
139 
140  .setDescription("Intrinsic base resistance");
141  p.addPar("RE", static_cast<double>(0.0), &ADMSvbic::Model::RE)
142  .setExpressionAccess(ParameterType::MIN_RES)
143  .setUnit(U_OHM)
144 
145  .setDescription("Emitter resistance");
146  p.addPar("RS", static_cast<double>(0.0), &ADMSvbic::Model::RS)
147  .setExpressionAccess(ParameterType::MIN_RES)
148  .setUnit(U_OHM)
149 
150  .setDescription("Substrate resistance");
151  p.addPar("RBP", static_cast<double>(0.0), &ADMSvbic::Model::RBP)
152  .setExpressionAccess(ParameterType::MIN_RES)
153  .setUnit(U_OHM)
154 
155  .setDescription("Parasitic base resistance");
156  p.addPar("IS", static_cast<double>(1.0e-16), &ADMSvbic::Model::IS)
157  .setUnit(U_AMP)
158 
159  .setDescription("Transport saturation current");
160  p.addPar("NF", static_cast<double>(1.0), &ADMSvbic::Model::NF)
161  .setUnit(U_NONE)
162 
163  .setDescription("Forward emission coefficient");
164  p.addPar("NR", static_cast<double>(1.0), &ADMSvbic::Model::NR)
165  .setUnit(U_NONE)
166 
167  .setDescription("Reverse emission coefficient");
168  p.addPar("FC", static_cast<double>(0.9), &ADMSvbic::Model::FC)
169  .setUnit(U_NONE)
170 
171  .setDescription("Forward-bias depletion capacitance limit");
172  p.addPar("CBEO", static_cast<double>(0.0), &ADMSvbic::Model::CBEO)
173  .setExpressionAccess(ParameterType::MIN_CAP)
174  .setUnit(U_FARAD)
175 
176  .setDescription("Extrinsic B-E overlap capacitance");
177  p.addPar("CJE", static_cast<double>(0.0), &ADMSvbic::Model::CJE)
178  .setExpressionAccess(ParameterType::MIN_CAP)
179  .setUnit(U_FARAD)
180 
181  .setDescription("B-E zero-bias capacitance");
182  p.addPar("PE", static_cast<double>(0.75), &ADMSvbic::Model::PE)
183  .setUnit(U_NONE)
184 
185  .setDescription("B-E built-in potential");
186  p.addPar("ME", static_cast<double>(0.33), &ADMSvbic::Model::ME)
187  .setUnit(U_NONE)
188 
189  .setDescription("B-E grading coefficient");
190  p.addPar("AJE", static_cast<double>((-0.5)), &ADMSvbic::Model::AJE)
191  .setUnit(U_NONE)
192 
193  .setDescription("Base-Emitter capacitor smoothing factor");
194  p.addPar("CBCO", static_cast<double>(0.0), &ADMSvbic::Model::CBCO)
195  .setExpressionAccess(ParameterType::MIN_CAP)
196  .setUnit(U_FARAD)
197 
198  .setDescription("Extrinsic B-C overlap capacitance");
199  p.addPar("CJC", static_cast<double>(0.0), &ADMSvbic::Model::CJC)
200  .setExpressionAccess(ParameterType::MIN_CAP)
201  .setUnit(U_FARAD)
202 
203  .setDescription("B-C zero-bias capacitance");
204  p.addPar("QCO", static_cast<double>(0.0), &ADMSvbic::Model::QCO)
205  .setUnit(U_COULOMB)
206 
207  .setDescription("Epi charge parameter");
208  p.addPar("CJEP", static_cast<double>(0.0), &ADMSvbic::Model::CJEP)
209  .setExpressionAccess(ParameterType::MIN_CAP)
210  .setUnit(U_FARAD)
211 
212  .setDescription("S-E zero-bias capacitance");
213  p.addPar("PC", static_cast<double>(0.75), &ADMSvbic::Model::PC)
214  .setUnit(U_NONE)
215 
216  .setDescription("B-C built-in potential");
217  p.addPar("MC", static_cast<double>(0.33), &ADMSvbic::Model::MC)
218  .setUnit(U_NONE)
219 
220  .setDescription("B-C grading coefficient");
221  p.addPar("AJC", static_cast<double>((-0.5)), &ADMSvbic::Model::AJC)
222  .setUnit(U_NONE)
223 
224  .setDescription("Base-Collector capacitor smoothing factor");
225  p.addPar("CJCP", static_cast<double>(0.0), &ADMSvbic::Model::CJCP)
226  .setExpressionAccess(ParameterType::MIN_CAP)
227  .setUnit(U_FARAD)
228 
229  .setDescription("S-C zero-bias capacitance");
230  p.addPar("PS", static_cast<double>(0.75), &ADMSvbic::Model::PS)
231  .setUnit(U_NONE)
232 
233  .setDescription("S-C built-in potential");
234  p.addPar("MS", static_cast<double>(0.33), &ADMSvbic::Model::MS)
235  .setUnit(U_NONE)
236 
237  .setDescription("S-C grading coefficient");
238  p.addPar("AJS", static_cast<double>((-0.5)), &ADMSvbic::Model::AJS)
239  .setUnit(U_NONE)
240 
241  .setDescription("Substrate-collector capacitor smoothing factor (unused)");
242  p.addPar("IBEI", static_cast<double>(1.0e-18), &ADMSvbic::Model::IBEI)
243  .setUnit(U_AMP)
244 
245  .setDescription("Ideal B-E saturation current");
246  p.addPar("WBE", static_cast<double>(1.0), &ADMSvbic::Model::WBE)
247  .setUnit(U_NONE)
248 
249  .setDescription("Portion of Ibei from Vbei");
250  p.addPar("NEI", static_cast<double>(1.0), &ADMSvbic::Model::NEI)
251  .setUnit(U_NONE)
252 
253  .setDescription("Ideal B-E emission coefficient");
254  p.addPar("IBEN", static_cast<double>(0.0), &ADMSvbic::Model::IBEN)
255  .setUnit(U_AMP)
256 
257  .setDescription("Nonideal B-E saturation current");
258  p.addPar("NEN", static_cast<double>(2.0), &ADMSvbic::Model::NEN)
259  .setUnit(U_NONE)
260 
261  .setDescription("Non-ideal B-E emission coefficient");
262  p.addPar("IBCI", static_cast<double>(1.0e-16), &ADMSvbic::Model::IBCI)
263  .setUnit(U_AMP)
264 
265  .setDescription("Ideal B-C saturation current");
266  p.addPar("NCI", static_cast<double>(1.0), &ADMSvbic::Model::NCI)
267  .setUnit(U_NONE)
268 
269  .setDescription("Ideal B-C emission coefficient");
270  p.addPar("IBCN", static_cast<double>(0.0), &ADMSvbic::Model::IBCN)
271  .setUnit(U_AMP)
272 
273  .setDescription("Nonideal B-C saturation current");
274  p.addPar("NCN", static_cast<double>(2.0), &ADMSvbic::Model::NCN)
275  .setUnit(U_NONE)
276 
277  .setDescription("Non-ideal B-C emission coefficient");
278  p.addPar("AVC1", static_cast<double>(0.0), &ADMSvbic::Model::AVC1)
279  .setUnit(U_VOLTM1)
280 
281  .setDescription("B-C weak avalanche parameter");
282  p.addPar("AVC2", static_cast<double>(0.0), &ADMSvbic::Model::AVC2)
283  .setUnit(U_VOLTM1)
284 
285  .setDescription("B-C weak avalanche parameter");
286  p.addPar("ISP", static_cast<double>(0.0), &ADMSvbic::Model::ISP)
287  .setUnit(U_AMP)
288 
289  .setDescription("Parasitic transport saturation current");
290  p.addPar("WSP", static_cast<double>(1.0), &ADMSvbic::Model::WSP)
291  .setUnit(U_NONE)
292 
293  .setDescription("Portion of Iccp from Vbep");
294  p.addPar("NFP", static_cast<double>(1.0), &ADMSvbic::Model::NFP)
295  .setUnit(U_NONE)
296 
297  .setDescription("Parasitic forward emission coefficient");
298  p.addPar("IBEIP", static_cast<double>(0.0), &ADMSvbic::Model::IBEIP)
299  .setUnit(U_AMP)
300 
301  .setDescription("Ideal parasitic B-E saturation current");
302  p.addPar("IBENP", static_cast<double>(0.0), &ADMSvbic::Model::IBENP)
303  .setUnit(U_AMP)
304 
305  .setDescription("Nonideal parasitic B-E saturation current");
306  p.addPar("IBCIP", static_cast<double>(0.0), &ADMSvbic::Model::IBCIP)
307  .setUnit(U_AMP)
308 
309  .setDescription("Ideal parasitic B-C saturation current");
310  p.addPar("NCIP", static_cast<double>(1.0), &ADMSvbic::Model::NCIP)
311  .setUnit(U_NONE)
312 
313  .setDescription("Ideal parasitic B-C emission coefficient");
314  p.addPar("IBCNP", static_cast<double>(0.0), &ADMSvbic::Model::IBCNP)
315  .setUnit(U_AMP)
316 
317  .setDescription("Nonideal parasitic B-C saturation current");
318  p.addPar("NCNP", static_cast<double>(2.0), &ADMSvbic::Model::NCNP)
319  .setUnit(U_NONE)
320 
321  .setDescription("Non-ideal parasitic B-C emission coefficient");
322  p.addPar("VEF", static_cast<double>(0.0), &ADMSvbic::Model::VEF)
323  .setUnit(U_VOLT)
324 
325  .setDescription("Forward Early voltage");
326  p.addPar("VER", static_cast<double>(0.0), &ADMSvbic::Model::VER)
327  .setUnit(U_VOLT)
328 
329  .setDescription("Reverse Early voltage");
330  p.addPar("IKF", static_cast<double>(0.0), &ADMSvbic::Model::IKF)
331  .setUnit(U_AMP)
332 
333  .setDescription("Forward knee current");
334  p.addPar("IKR", static_cast<double>(0.0), &ADMSvbic::Model::IKR)
335  .setUnit(U_AMP)
336 
337  .setDescription("Reverse knee current");
338  p.addPar("IKP", static_cast<double>(0.0), &ADMSvbic::Model::IKP)
339  .setUnit(U_AMP)
340 
341  .setDescription("Parasitic knee current");
342  p.addPar("TF", static_cast<double>(0.0), &ADMSvbic::Model::TF)
343  .setUnit(U_SECOND)
344 
345  .setDescription("Forward transit time");
346  p.addPar("QTF", static_cast<double>(0.0), &ADMSvbic::Model::QTF)
347  .setUnit(U_NONE)
348 
349  .setDescription("Variation of tf with base width modulation");
350  p.addPar("XTF", static_cast<double>(0.0), &ADMSvbic::Model::XTF)
351  .setUnit(U_NONE)
352 
353  .setDescription("Coefficient of tf with bias dependence");
354  p.addPar("VTF", static_cast<double>(0.0), &ADMSvbic::Model::VTF)
355  .setUnit(U_NONE)
356 
357  .setDescription("Coefficient of tf dependence on Vbc");
358  p.addPar("ITF", static_cast<double>(0.0), &ADMSvbic::Model::ITF)
359  .setUnit(U_NONE)
360 
361  .setDescription("Coefficient of tf dependence on Ic");
362  p.addPar("TR", static_cast<double>(0.0), &ADMSvbic::Model::TR)
363  .setUnit(U_NONE)
364 
365  .setDescription("Reverse transit time");
366  p.addPar("TD", static_cast<double>(0.0), &ADMSvbic::Model::TD)
367  .setUnit(U_NONE)
368 
369  .setDescription("Forward excess-phase delay time (unused in this version)");
370  p.addPar("KFN", static_cast<double>(0.0), &ADMSvbic::Model::KFN)
371  .setUnit(U_NONE)
372 
373  .setDescription("B-E flicker (1/f) noise coefficient (unused)");
374  p.addPar("AFN", static_cast<double>(1.0), &ADMSvbic::Model::AFN)
375  .setUnit(U_NONE)
376 
377  .setDescription("Base-Emitter Flicker Noise coefficient (unused)");
378  p.addPar("BFN", static_cast<double>(1.0), &ADMSvbic::Model::BFN)
379  .setUnit(U_NONE)
380 
381  .setDescription("B-E flicker noise dependence (unused)");
382  p.addPar("XRE", static_cast<double>(0), &ADMSvbic::Model::XRE)
383  .setUnit(U_NONE)
384 
385  .setDescription("Temperature exponent of re");
386  p.addPar("XRBI", static_cast<double>(0), &ADMSvbic::Model::XRBI)
387  .setUnit(U_NONE)
388 
389  .setDescription("");
390  p.addPar("XRCI", static_cast<double>(0), &ADMSvbic::Model::XRCI)
391  .setUnit(U_NONE)
392 
393  .setDescription("");
394  p.addPar("XRS", static_cast<double>(0), &ADMSvbic::Model::XRS)
395  .setUnit(U_NONE)
396 
397  .setDescription("Temperature exponent of rs");
398  p.addPar("XVO", static_cast<double>(0), &ADMSvbic::Model::XVO)
399  .setUnit(U_NONE)
400 
401  .setDescription("Temperature exponent of vo");
402  p.addPar("EA", static_cast<double>(1.12), &ADMSvbic::Model::EA)
403  .setUnit(U_EV)
404 
405  .setDescription("Activation energy for IS");
406  p.addPar("EAIE", static_cast<double>(1.12), &ADMSvbic::Model::EAIE)
407  .setUnit(U_EV)
408 
409  .setDescription("Activation energy for IBEI");
410  p.addPar("EAIC", static_cast<double>(1.12), &ADMSvbic::Model::EAIC)
411  .setUnit(U_EV)
412 
413  .setDescription("Activation energy for IBCI");
414  p.addPar("EAIS", static_cast<double>(1.12), &ADMSvbic::Model::EAIS)
415  .setUnit(U_EV)
416 
417  .setDescription("Activation energy for IBCIP");
418  p.addPar("EANE", static_cast<double>(1.12), &ADMSvbic::Model::EANE)
419  .setUnit(U_EV)
420 
421  .setDescription("Activation energy for IBEN");
422  p.addPar("EANC", static_cast<double>(1.12), &ADMSvbic::Model::EANC)
423  .setUnit(U_EV)
424 
425  .setDescription("Activation energy for IBCN");
426  p.addPar("EANS", static_cast<double>(1.12), &ADMSvbic::Model::EANS)
427  .setUnit(U_EV)
428 
429  .setDescription("Activation energy for IBCNP");
430  p.addPar("XIS", static_cast<double>(3.0), &ADMSvbic::Model::XIS)
431  .setUnit(U_NONE)
432 
433  .setDescription("Temperature exponent of IS");
434  p.addPar("XII", static_cast<double>(3.0), &ADMSvbic::Model::XII)
435  .setUnit(U_NONE)
436 
437  .setDescription("Temperature exponent of Ibei, Ibci, Ibeip, and Ibcip");
438  p.addPar("XIN", static_cast<double>(3.0), &ADMSvbic::Model::XIN)
439  .setUnit(U_NONE)
440 
441  .setDescription("Temperature exponent of Iben, Ibcn, Ibenp, and Ibcnp");
442  p.addPar("TNF", static_cast<double>(0.0), &ADMSvbic::Model::TNF)
443  .setUnit(U_NONE)
444 
445  .setDescription("Temperature coefficient of Nf");
446  p.addPar("TAVC", static_cast<double>(0.0), &ADMSvbic::Model::TAVC)
447  .setUnit(U_NONE)
448 
449  .setDescription("Temperature coefficient of Avc2");
450  p.addPar("RTH", static_cast<double>(0.0), &ADMSvbic::Model::RTH)
451  .setUnit(U_OHM)
452 
453  .setDescription("Thermal resistance, must be given for self-heating");
454  p.addPar("CTH", static_cast<double>(0.0), &ADMSvbic::Model::CTH)
455  .setUnit(U_FARAD)
456 
457  .setDescription("Thermal capacitance");
458  p.addPar("VRT", static_cast<double>(0.0), &ADMSvbic::Model::VRT)
459  .setUnit(U_NONE)
460 
461  .setDescription("");
462  p.addPar("ART", static_cast<double>(0.1), &ADMSvbic::Model::ART)
463  .setUnit(U_NONE)
464 
465  .setDescription("");
466  p.addPar("CCSO", static_cast<double>(0.0), &ADMSvbic::Model::CCSO)
467  .setUnit(U_NONE)
468 
469  .setDescription("(unused)");
470  p.addPar("QBM", static_cast<double>(0.0), &ADMSvbic::Model::QBM)
471  .setUnit(U_NONE)
472 
473  .setDescription("");
474  p.addPar("NKF", static_cast<double>(0.5), &ADMSvbic::Model::NKF)
475  .setUnit(U_NONE)
476 
477  .setDescription("");
478  p.addPar("XIKF", static_cast<double>(0), &ADMSvbic::Model::XIKF)
479  .setUnit(U_NONE)
480 
481  .setDescription("");
482  p.addPar("XRCX", static_cast<double>(0), &ADMSvbic::Model::XRCX)
483  .setUnit(U_NONE)
484 
485  .setDescription("");
486  p.addPar("XRBX", static_cast<double>(0), &ADMSvbic::Model::XRBX)
487  .setUnit(U_NONE)
488 
489  .setDescription("");
490  p.addPar("XRBP", static_cast<double>(0), &ADMSvbic::Model::XRBP)
491  .setUnit(U_NONE)
492 
493  .setDescription("");
494  p.addPar("ISRR", static_cast<double>(1.0), &ADMSvbic::Model::ISRR)
495  .setUnit(U_NONE)
496 
497  .setDescription("Saturation current for reverse operation");
498  p.addPar("XISR", static_cast<double>(0.0), &ADMSvbic::Model::XISR)
499  .setUnit(U_NONE)
500 
501  .setDescription("Temperature exponent of ISRR");
502  p.addPar("DEAR", static_cast<double>(0.0), &ADMSvbic::Model::DEAR)
503  .setUnit(U_NONE)
504 
505  .setDescription("Activation energy for ISRR");
506  p.addPar("EAP", static_cast<double>(1.12), &ADMSvbic::Model::EAP)
507  .setUnit(U_NONE)
508 
509  .setDescription("Activation energy for ISP");
510  p.addPar("VBBE", static_cast<double>(0.0), &ADMSvbic::Model::VBBE)
511  .setUnit(U_NONE)
512 
513  .setDescription("");
514  p.addPar("NBBE", static_cast<double>(1.0), &ADMSvbic::Model::NBBE)
515  .setUnit(U_NONE)
516 
517  .setDescription("");
518  p.addPar("IBBE", static_cast<double>(1.0e-6), &ADMSvbic::Model::IBBE)
519  .setUnit(U_NONE)
520 
521  .setDescription("");
522  p.addPar("TVBBE1", static_cast<double>(0.0), &ADMSvbic::Model::TVBBE1)
523  .setUnit(U_NONE)
524 
525  .setDescription("");
526  p.addPar("TVBBE2", static_cast<double>(0.0), &ADMSvbic::Model::TVBBE2)
527  .setUnit(U_NONE)
528 
529  .setDescription("");
530  p.addPar("TNBBE", static_cast<double>(0.0), &ADMSvbic::Model::TNBBE)
531  .setUnit(U_NONE)
532 
533  .setDescription("");
534  p.addPar("EBBE", static_cast<double>(0.0), &ADMSvbic::Model::EBBE)
535  .setUnit(U_NONE)
536 
537  .setDescription("(unused)");
538  p.addPar("DTEMP", static_cast<double>(0.0), &ADMSvbic::Model::DTEMP)
539  .setUnit(U_NONE)
540 
541  .setDescription("Device temperature (use 0.0 for ambient)");
542  p.addPar("VERS", static_cast<double>(1.2), &ADMSvbic::Model::VERS)
543  .setUnit(U_NONE)
544 
545  .setDescription("Version of this VBIC model");
546  p.addPar("VREV", static_cast<double>(0.0), &ADMSvbic::Model::VREV)
547  .setUnit(U_NONE)
548 
549  .setDescription("");
550  //Hidden parameter dtype
551 
552 }
553 
554 //-----------------------------------------------------------------------------
555 // Function : Instance::processParams
556 // Purpose :
557 // Special Notes :
558 // Scope : public
559 // Creator : admsXml
560 // Creation Date :
561 //-----------------------------------------------------------------------------
563 {
564  // Now we need to check that any parameters are within their ranges as
565  // specified in the verilog:
566 
567  // Parameter M : [ 1, (+inf) [
568  if ( (!((M >=1))) )
569  {
570  UserError0(*this) << "ADMSvbic: Parameter M value " << M << " out of range [ 1, (+inf) [";
571  }
572 
573 
574  // this seems a little stupid, but verilog models that use $temperature
575  // don't also use a defined parameter "Temp", and count on $temperature
576  // to be the one the simulator wants:
577 
579 
580  // and of course, this routine is where we should put the initial_instance
581  // stuff
582 
583 
584  return true;
585 }
586 
587 //-----------------------------------------------------------------------------
588 // Function : Instance::Instance
589 // Purpose : "instance block" constructor
590 // Special Notes :
591 // Scope : public
592 // Creator : admsXml
593 // Creation Date :
594 //-----------------------------------------------------------------------------
595 
597  const Configuration & configuration,
598  const InstanceBlock & instance_block,
599  Model & model,
600  const FactoryBlock & factory_block)
601  : DeviceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
602  model_(model),
603  M(1),
604  li_c(-1),
605  li_b(-1),
606  li_e(-1),
607  li_dt(-1),
608  li_cx(-1),
609  li_ci(-1),
610  li_bx(-1),
611  li_bi(-1),
612  li_ei(-1),
613  li_bp(-1),
614  f_bi_Equ_bi_Node_Ptr(0),
615  f_bi_Equ_ei_Node_Ptr(0),
616  f_ei_Equ_bi_Node_Ptr(0),
617  f_ei_Equ_ei_Node_Ptr(0),
618  f_bi_Equ_dt_Node_Ptr(0),
619  f_ei_Equ_dt_Node_Ptr(0),
620  f_bx_Equ_bx_Node_Ptr(0),
621  f_bx_Equ_ei_Node_Ptr(0),
622  f_ei_Equ_bx_Node_Ptr(0),
623  f_bx_Equ_dt_Node_Ptr(0),
624  f_ci_Equ_bi_Node_Ptr(0),
625  f_ci_Equ_ci_Node_Ptr(0),
626  f_ei_Equ_ci_Node_Ptr(0),
627  f_ci_Equ_ei_Node_Ptr(0),
628  f_ci_Equ_dt_Node_Ptr(0),
629  f_bi_Equ_ci_Node_Ptr(0),
630  f_bx_Equ_bp_Node_Ptr(0),
631  f_bp_Equ_bx_Node_Ptr(0),
632  f_bp_Equ_bp_Node_Ptr(0),
633  f_bp_Equ_dt_Node_Ptr(0),
634  f_c_Equ_dt_Node_Ptr(0),
635  f_cx_Equ_dt_Node_Ptr(0),
636  f_c_Equ_c_Node_Ptr(0),
637  f_c_Equ_cx_Node_Ptr(0),
638  f_cx_Equ_c_Node_Ptr(0),
639  f_cx_Equ_cx_Node_Ptr(0),
640  f_cx_Equ_bi_Node_Ptr(0),
641  f_ci_Equ_cx_Node_Ptr(0),
642  f_cx_Equ_ci_Node_Ptr(0),
643  f_b_Equ_dt_Node_Ptr(0),
644  f_b_Equ_b_Node_Ptr(0),
645  f_b_Equ_bx_Node_Ptr(0),
646  f_bx_Equ_b_Node_Ptr(0),
647  f_bx_Equ_bi_Node_Ptr(0),
648  f_bx_Equ_ci_Node_Ptr(0),
649  f_bi_Equ_bx_Node_Ptr(0),
650  f_e_Equ_dt_Node_Ptr(0),
651  f_e_Equ_e_Node_Ptr(0),
652  f_e_Equ_ei_Node_Ptr(0),
653  f_ei_Equ_e_Node_Ptr(0),
654  f_bp_Equ_bi_Node_Ptr(0),
655  f_bp_Equ_ci_Node_Ptr(0),
656  f_cx_Equ_bx_Node_Ptr(0),
657  f_cx_Equ_bp_Node_Ptr(0),
658  f_bp_Equ_cx_Node_Ptr(0),
659  f_bi_Equ_cx_Node_Ptr(0),
660  f_b_Equ_e_Node_Ptr(0),
661  f_e_Equ_b_Node_Ptr(0),
662  f_b_Equ_c_Node_Ptr(0),
663  f_c_Equ_b_Node_Ptr(0),
664  f_dt_Equ_dt_Node_Ptr(0),
665  f_dt_Equ_bp_Node_Ptr(0),
666  f_dt_Equ_cx_Node_Ptr(0),
667  f_dt_Equ_e_Node_Ptr(0),
668  f_dt_Equ_ei_Node_Ptr(0),
669  f_dt_Equ_bx_Node_Ptr(0),
670  f_dt_Equ_bi_Node_Ptr(0),
671  f_dt_Equ_b_Node_Ptr(0),
672  f_dt_Equ_ci_Node_Ptr(0),
673  f_dt_Equ_c_Node_Ptr(0),
674  q_bi_Equ_bi_Node_Ptr(0),
675  q_bi_Equ_ei_Node_Ptr(0),
676  q_ei_Equ_bi_Node_Ptr(0),
677  q_ei_Equ_ei_Node_Ptr(0),
678  q_bi_Equ_dt_Node_Ptr(0),
679  q_ei_Equ_dt_Node_Ptr(0),
680  q_bx_Equ_bx_Node_Ptr(0),
681  q_bx_Equ_ei_Node_Ptr(0),
682  q_ei_Equ_bx_Node_Ptr(0),
683  q_bx_Equ_dt_Node_Ptr(0),
684  q_ci_Equ_bi_Node_Ptr(0),
685  q_ci_Equ_ci_Node_Ptr(0),
686  q_ei_Equ_ci_Node_Ptr(0),
687  q_ci_Equ_ei_Node_Ptr(0),
688  q_ci_Equ_dt_Node_Ptr(0),
689  q_bi_Equ_ci_Node_Ptr(0),
690  q_bx_Equ_bp_Node_Ptr(0),
691  q_bp_Equ_bx_Node_Ptr(0),
692  q_bp_Equ_bp_Node_Ptr(0),
693  q_bp_Equ_dt_Node_Ptr(0),
694  q_c_Equ_dt_Node_Ptr(0),
695  q_cx_Equ_dt_Node_Ptr(0),
696  q_c_Equ_c_Node_Ptr(0),
697  q_c_Equ_cx_Node_Ptr(0),
698  q_cx_Equ_c_Node_Ptr(0),
699  q_cx_Equ_cx_Node_Ptr(0),
700  q_cx_Equ_bi_Node_Ptr(0),
701  q_ci_Equ_cx_Node_Ptr(0),
702  q_cx_Equ_ci_Node_Ptr(0),
703  q_b_Equ_dt_Node_Ptr(0),
704  q_b_Equ_b_Node_Ptr(0),
705  q_b_Equ_bx_Node_Ptr(0),
706  q_bx_Equ_b_Node_Ptr(0),
707  q_bx_Equ_bi_Node_Ptr(0),
708  q_bx_Equ_ci_Node_Ptr(0),
709  q_bi_Equ_bx_Node_Ptr(0),
710  q_e_Equ_dt_Node_Ptr(0),
711  q_e_Equ_e_Node_Ptr(0),
712  q_e_Equ_ei_Node_Ptr(0),
713  q_ei_Equ_e_Node_Ptr(0),
714  q_bp_Equ_bi_Node_Ptr(0),
715  q_bp_Equ_ci_Node_Ptr(0),
716  q_cx_Equ_bx_Node_Ptr(0),
717  q_cx_Equ_bp_Node_Ptr(0),
718  q_bp_Equ_cx_Node_Ptr(0),
719  q_bi_Equ_cx_Node_Ptr(0),
720  q_b_Equ_e_Node_Ptr(0),
721  q_e_Equ_b_Node_Ptr(0),
722  q_b_Equ_c_Node_Ptr(0),
723  q_c_Equ_b_Node_Ptr(0),
724  q_dt_Equ_dt_Node_Ptr(0),
725  q_dt_Equ_bp_Node_Ptr(0),
726  q_dt_Equ_cx_Node_Ptr(0),
727  q_dt_Equ_e_Node_Ptr(0),
728  q_dt_Equ_ei_Node_Ptr(0),
729  q_dt_Equ_bx_Node_Ptr(0),
730  q_dt_Equ_bi_Node_Ptr(0),
731  q_dt_Equ_b_Node_Ptr(0),
732  q_dt_Equ_ci_Node_Ptr(0),
733  q_dt_Equ_c_Node_Ptr(0),
734  admsTemperature(getDeviceOptions().temp.getImmutableValue<double>()),
735  externalNodeMode(false)
736 
737 {
738  numIntVars = 6 + 0;
739  numExtVars = 4;
740 
741 
742  // Right now, we only have state for limited probes...
743  numStateVars = 7;
744 
745  // Manually inserted code:
746  devConMap.resize(4);
747  devConMap[0] = 1;
748  devConMap[1] = 1;
749  devConMap[2] = 1;
750  devConMap[3] = 2;
751 
752  if ( instance_block.numExtVars > 4)
753  {
754  numExtVars = instance_block.numExtVars;
755  externalNodeMode = true;
756  numIntVars -= numExtVars-4;
757  devConMap.resize(numExtVars);
758  for (int i1=4; i1<numExtVars; ++i1)
759  devConMap[i1]=1;
760  }
761  // End manually inserted code
762 
763  // Set up jacobian stamp:
764 
765  if (jacStamp.empty())
766  {
767  jacStamp.resize(10);
768  jacStamp[admsNodeID_c].resize(4);
773  jacStamp[admsNodeID_b].resize(5);
779  jacStamp[admsNodeID_e].resize(4);
784  jacStamp[admsNodeID_dt].resize(10);
795  jacStamp[admsNodeID_cx].resize(7);
803  jacStamp[admsNodeID_ci].resize(5);
809  jacStamp[admsNodeID_bx].resize(7);
817  jacStamp[admsNodeID_bi].resize(6);
824  jacStamp[admsNodeID_ei].resize(6);
831  jacStamp[admsNodeID_bp].resize(6);
838 
839 
840  // This is really not strictly necessary when not mapping away nodes,
841  // but makes life easier when we get to registerJacLIDs. This block
842  // simply makes a map that leaves everything in place. Later, when we
843  // start making nodes go away, we will need to modify this.
844 
845  int mapSize = jacStamp.size();
846  jacMap.clear();
847  jacMap2.clear();
848  jacMap.resize(mapSize);
849  jacMap2.resize(mapSize);
850  for (int i=0;i<mapSize;++i)
851  {
852  int rowSize=jacStamp[i].size();
853  jacMap[i]=i;
854  jacMap2[i].resize(rowSize);
855  for (int j=0;j<rowSize;++j)
856  {
857  jacMap2[i][j] = j;
858  }
859  }
860 
861  }
862 
863 
865  setParams(instance_block.params);
866  // set any non-constant parameter defaults
867 
868  // copy any model variables that have associated instance variables, but
869  // are only given in the model card:
870 
871 
872 
873  // Set any parameters that were not given and whose defaults depend on other
874  // parameters:
875 
876 
877  // Real bogosity here...
878  if (!given("XYCEADMSINSTTEMP"))
879  admsInstTemp=getDeviceOptions().temp.getImmutableValue<double>();
880 
881  //calculate any parameters specified as expressions
883 
884  // calculate dependent (i.e. computed params) and check for errors.
885  processParams();
886  collapseNodes();
887 
888  // Manually added code
889  // there are always ci and bi, but the others could be mapped away.
890  int numExist = ((collapseNode_cx)?0:1) + ((collapseNode_bx)?0:1) + ((collapseNode_ei)?0:1) + 2;
891 
892  if (externalNodeMode && (numExtVars != 4+numExist))
893  {
894  DevelFatal0(*this) << "Instance " << getName() << " has wrong number of external nodes!"
895  << " If you specify any internal nodes as external, you must set all that exist. ";
896  }
897  // End manually added code
898 }
899 
900 //-----------------------------------------------------------------------------
901 // Function : Instance::collapseNodes
902 // Purpose : function to handle collapsing of nodes
903 // Special Notes :
904 // Scope : public
905 // Creator : admsXml
906 // Creation Date :
907 //-----------------------------------------------------------------------------
909 {double slTF;
910  double IITF;
911  double IVTF;
912  double IHRCF;
913  double IIKP;
914  double IIKR;
915  double IVER;
916  double IVEF;
917  double Tini;
918  double tVCrit;
919  collapseNode_cx = false;
920  collapseNode_bx = false;
921  collapseNode_ei = false;
922  tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
923 
924  Tini = (2.731500e+02+(model_.TNOM));
925 
926  IVEF = (((model_.VEF)>0.0)?(1.0/(model_.VEF)):0.0);
927 
928  IVER = (((model_.VER)>0.0)?(1.0/(model_.VER)):0.0);
929 
930  IIKR = (((model_.IKR)>0.0)?(1.0/(model_.IKR)):0.0);
931 
932  IIKP = (((model_.IKP)>0.0)?(1.0/(model_.IKP)):0.0);
933 
934  IHRCF = (((model_.HRCF)>0.0)?(1.0/(model_.HRCF)):0.0);
935 
936  IVTF = (((model_.VTF)>0.0)?(1.0/(model_.VTF)):0.0);
937 
938  IITF = (((model_.ITF)>0.0)?(1.0/(model_.ITF)):0.0);
939 
940  slTF = (((model_.ITF)>0.0)?0.0:1.0);
941 
942  if (!(((model_.RCX)>0)))
943  {
944  collapseNode_cx = true;
945 
946  }
947 
948  if (!(((model_.RBX)>0)))
949  {
950  collapseNode_bx = true;
951 
952  }
953 
954  if (!(((model_.RE)>0)))
955  {
956  collapseNode_ei = true;
957 
958  }
959 
960 
961 
962  // Map away any unneeded internal nodes:
963  // temporary stamps and maps
964  std::vector< std::vector<int> > tempStamp;
965  std::vector<int> tempMap;
966  std::vector< std::vector<int> > tempMap2;
967 
968  int OriginalSize = jacMap.size();
969 
970  // If the columns of the jacstamp are not in ascending order then
971  // jacStampMap will do bogus things. Our ADMS back-end doesn't guarantee
972  // in-order jacStamps. So we reorder (through the maps)
973  jacStampMap_fixOrder(jacStamp,jacMap2,tempStamp,tempMap2);
974  jacStamp=tempStamp; jacMap2=tempMap2;
975 
976  if (collapseNode_cx)
977  {
978  tempStamp.clear(); tempMap.clear(); tempMap2.clear();
980  tempStamp, tempMap, tempMap2,
982  OriginalSize);
983  // now move the new stuff into the old place
984  jacStamp = tempStamp; jacMap = tempMap; jacMap2 = tempMap2;
985  numIntVars--;
986  }
987  if (collapseNode_bx)
988  {
989  tempStamp.clear(); tempMap.clear(); tempMap2.clear();
991  tempStamp, tempMap, tempMap2,
993  OriginalSize);
994  // now move the new stuff into the old place
995  jacStamp = tempStamp; jacMap = tempMap; jacMap2 = tempMap2;
996  numIntVars--;
997  }
998  if (collapseNode_ei)
999  {
1000  tempStamp.clear(); tempMap.clear(); tempMap2.clear();
1002  tempStamp, tempMap, tempMap2,
1004  OriginalSize);
1005  // now move the new stuff into the old place
1006  jacStamp = tempStamp; jacMap = tempMap; jacMap2 = tempMap2;
1007  numIntVars--;
1008  }
1009 }
1010 
1011 //-----------------------------------------------------------------------------
1012 // Function : Instance::~Instance
1013 // Purpose : destructor
1014 // Special Notes :
1015 // Scope : public
1016 // Creator : admsXml
1017 // Creation Date :
1018 //-----------------------------------------------------------------------------
1020 {
1021 }
1022 
1023 //-----------------------------------------------------------------------------
1024 // Function : Instance::registerLIDs
1025 // Purpose : function for registering, and setting up, local ID's.
1026 // Special Notes :
1027 // Scope : public
1028 // Creator : admsXml
1029 // Creation Date :
1030 //-----------------------------------------------------------------------------
1031 void Instance::registerLIDs( const std::vector<int> & intLIDVecRef,
1032  const std::vector<int> & extLIDVecRef)
1033 {
1034  AssertLIDs(intLIDVecRef.size() == numIntVars);
1035  AssertLIDs(extLIDVecRef.size() == numExtVars);
1036 
1037 #ifdef Xyce_DEBUG_DEVICE
1038 
1039  if (getDeviceOptions().debugLevel > 0)
1040  {
1041  Xyce::dout() << std::endl << section_divider << std::endl;
1042  Xyce::dout() << "In ADMSvbic::Instance::register LIDs\n\n";
1043  Xyce::dout() << "name = " << getName() << std::endl;
1044  Xyce::dout() << "number of internal variables: " << numIntVars << std::endl;
1045  Xyce::dout() << "number of external variables: " << numExtVars << std::endl;
1046  }
1047 #endif
1048 
1049  // copy over the global ID lists.
1050  intLIDVec = intLIDVecRef;
1051  extLIDVec = extLIDVecRef;
1052 
1053  // Now use these lists to obtain the indices into the linear algebra
1054  // entities. This assumes an order.
1055  int i=0;
1056  li_c = extLIDVecRef[i++];
1057  li_b = extLIDVecRef[i++];
1058  li_e = extLIDVecRef[i++];
1059  li_dt = extLIDVecRef[i++];
1060 
1061  // Manually modified code
1062  int j=0;
1063  if (!collapseNode_cx)
1064  {
1065  if (externalNodeMode)
1066  li_cx = extLIDVecRef[i++];
1067  else
1068  li_cx = intLIDVecRef[j++];
1069  }
1070  else
1071  li_cx = li_c;
1072  if (externalNodeMode)
1073  li_ci = extLIDVecRef[i++];
1074  else
1075  li_ci = intLIDVecRef[j++];
1076 
1077  if (!collapseNode_bx)
1078  {
1079  if (externalNodeMode)
1080  li_bx = extLIDVecRef[i++];
1081  else
1082  li_bx = intLIDVecRef[j++];
1083  }
1084  else
1085  li_bx = li_b;
1086  if (externalNodeMode)
1087  li_bi = extLIDVecRef[i++];
1088  else
1089  li_bi = intLIDVecRef[j++];
1090  if (!collapseNode_ei)
1091  {
1092  if (externalNodeMode)
1093  li_ei = extLIDVecRef[i++];
1094  else
1095  li_ei = intLIDVecRef[j++];
1096  }
1097  else
1098  li_ei = li_e;
1099  li_bp = intLIDVecRef[j++];
1100  // End manually modified code
1101 
1102 #ifdef Xyce_DEBUG_DEVICE
1103  if (getDeviceOptions().debugLevel > 0)
1104  {
1105  Xyce::dout() << "\nSolution and RHS variables:\n";
1106  Xyce::dout() << "\nli_c = " << li_c << std::endl;
1107  Xyce::dout() << "\nli_b = " << li_b << std::endl;
1108  Xyce::dout() << "\nli_e = " << li_e << std::endl;
1109  Xyce::dout() << "\nli_dt = " << li_dt << std::endl;
1110  Xyce::dout() << "\nli_cx = " << li_cx << std::endl;
1111  Xyce::dout() << "\nli_ci = " << li_ci << std::endl;
1112  Xyce::dout() << "\nli_bx = " << li_bx << std::endl;
1113  Xyce::dout() << "\nli_bi = " << li_bi << std::endl;
1114  Xyce::dout() << "\nli_ei = " << li_ei << std::endl;
1115  Xyce::dout() << "\nli_bp = " << li_bp << std::endl;
1116  }
1117 #endif
1118 
1119 #ifdef Xyce_DEBUG_DEVICE
1120  if (getDeviceOptions().debugLevel > 0)
1121  {
1122  Xyce::dout() << "\nEnd of ADMSvbic::Instance::register LIDs\n";
1123  Xyce::dout() << section_divider << std::endl;
1124  }
1125 #endif
1126 }
1127 
1128 //-----------------------------------------------------------------------------
1129 // Function : Instance::getIntNameMap
1130 // Purpose :
1131 // Special Notes :
1132 // Scope : public
1133 // Creator : admsXml
1134 // Creation Date :
1135 //-----------------------------------------------------------------------------
1136 std::map<int,std::string> & Instance::getIntNameMap ()
1137 {
1138 
1139  if (intNameMap.empty())
1140  {
1141  std::string tmpstr;
1142  // Manually Modified Code
1144  {
1145 
1146  tmpstr = getName() + "_cx";
1147  spiceInternalName(tmpstr);
1148  intNameMap[li_cx] = tmpstr;
1149  }
1150 
1151  if (!externalNodeMode)
1152  {
1153  tmpstr = getName() + "_ci";
1154  spiceInternalName(tmpstr);
1155  intNameMap[li_ci] = tmpstr;
1156  }
1157 
1159  {
1160 
1161  tmpstr = getName() + "_bx";
1162  spiceInternalName(tmpstr);
1163  intNameMap[li_bx] = tmpstr;
1164  }
1165 
1166  if (!externalNodeMode)
1167  {
1168  tmpstr = getName() + "_bi";
1169  spiceInternalName(tmpstr);
1170  intNameMap[li_bi] = tmpstr;
1171  }
1172 
1174  {
1175 
1176  tmpstr = getName() + "_ei";
1177  spiceInternalName(tmpstr);
1178  intNameMap[li_ei] = tmpstr;
1179  }
1180 
1181  tmpstr = getName() + "_bp";
1182  spiceInternalName(tmpstr);
1183  intNameMap[li_bp] = tmpstr;
1184  // End manually modified code
1185  }
1186  return intNameMap;
1187 }
1188 
1189 //-----------------------------------------------------------------------------
1190 // Function : Instance::registerStateLIDs
1191 // Purpose :
1192 // Special Notes :
1193 // Scope : public
1194 // Creator : admsXml
1195 // Creation Date :
1196 //-----------------------------------------------------------------------------
1197 void Instance::registerStateLIDs( const std::vector<int> & staLIDVecRef)
1198 {
1199  AssertLIDs(staLIDVecRef.size() == numStateVars);
1200 
1201  int numSta = staLIDVecRef.size();
1202  if (numSta > 0)
1203  {
1204  int i=0;
1205  staLIDVec = staLIDVecRef;
1206 
1214  }
1215 }
1216 
1217 //-----------------------------------------------------------------------------
1218 // Function : Instance::jacobianStamp
1219 // Purpose :
1220 // Special Notes : In initial version, we won't support mapping away nodes
1221 // Scope : public
1222 // Creator : admsXml
1223 // Creation Date :
1224 //-----------------------------------------------------------------------------
1225 const std::vector< std::vector<int> > & Instance::jacobianStamp() const
1226 {
1227  return jacStamp;
1228 }
1229 
1230 //-----------------------------------------------------------------------------
1231 // Function : Instance::registerJacLIDs
1232 // Purpose : Create Offset variables used for referencing jacobian
1233 // elements
1234 // Special Notes :
1235 // Scope : public
1236 // Creator : admsXml
1237 // Creation Date :
1238 //-----------------------------------------------------------------------------
1239 void Instance::registerJacLIDs( const std::vector< std::vector<int> > & jacLIDVec)
1240 {
1242  std::vector<int> & map=jacMap;
1243  std::vector< std::vector<int> > & map2=jacMap2;
1244 
1245 
1246  // do nothing, we won't use the jac lids anymore, we'll use pointers
1247 
1248 }
1249 
1250 //-----------------------------------------------------------------------------
1251 // Function : Instance::setupPointers
1252 // Purpose : Create pointer variables used for referencing jacobian
1253 // elements
1254 // Special Notes :
1255 // Scope : public
1256 // Creator : admsXml
1257 // Creation Date :
1258 //-----------------------------------------------------------------------------
1260 {
1261 
1262  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
1263  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
1264  f_c_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_dt);
1265  q_c_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_dt);
1266  f_c_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_c);
1267  q_c_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_c);
1268  f_c_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_cx);
1269  q_c_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_cx);
1270  f_c_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_b);
1271  q_c_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_b);
1272  f_b_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_dt);
1273  q_b_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_dt);
1274  f_b_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_b);
1275  q_b_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_b);
1276  f_b_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_bx);
1277  q_b_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_bx);
1278  f_b_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_e);
1279  q_b_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_e);
1280  f_b_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_c);
1281  q_b_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_c);
1282  f_e_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_dt);
1283  q_e_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_dt);
1284  f_e_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_e);
1285  q_e_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_e);
1286  f_e_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_ei);
1287  q_e_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_ei);
1288  f_e_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_b);
1289  q_e_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_b);
1290  f_dt_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_dt);
1291  q_dt_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_dt);
1292  f_dt_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bp);
1293  q_dt_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bp);
1294  f_dt_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_cx);
1295  q_dt_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_cx);
1296  f_dt_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_e);
1297  q_dt_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_e);
1298  f_dt_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_ei);
1299  q_dt_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_ei);
1300  f_dt_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bx);
1301  q_dt_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bx);
1302  f_dt_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bi);
1303  q_dt_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bi);
1304  f_dt_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_b);
1305  q_dt_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_b);
1306  f_dt_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_ci);
1307  q_dt_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_ci);
1308  f_dt_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_c);
1309  q_dt_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_c);
1310  f_cx_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_dt);
1311  q_cx_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_dt);
1312  f_cx_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_c);
1313  q_cx_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_c);
1314  f_cx_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_cx);
1315  q_cx_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_cx);
1316  f_cx_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bi);
1317  q_cx_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bi);
1318  f_cx_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_ci);
1319  q_cx_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_ci);
1320  f_cx_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bx);
1321  q_cx_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bx);
1322  f_cx_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bp);
1323  q_cx_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bp);
1324  f_ci_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_bi);
1325  q_ci_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_bi);
1326  f_ci_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_ci);
1327  q_ci_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_ci);
1328  f_ci_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_ei);
1329  q_ci_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_ei);
1330  f_ci_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_dt);
1331  q_ci_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_dt);
1332  f_ci_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_cx);
1333  q_ci_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_cx);
1334  f_bx_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bx);
1335  q_bx_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bx);
1336  f_bx_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_ei);
1337  q_bx_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_ei);
1338  f_bx_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_dt);
1339  q_bx_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_dt);
1340  f_bx_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bp);
1341  q_bx_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bp);
1342  f_bx_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_b);
1343  q_bx_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_b);
1344  f_bx_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bi);
1345  q_bx_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bi);
1346  f_bx_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_ci);
1347  q_bx_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_ci);
1348  f_bi_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_bi);
1349  q_bi_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_bi);
1350  f_bi_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_ei);
1351  q_bi_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_ei);
1352  f_bi_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_dt);
1353  q_bi_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_dt);
1354  f_bi_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_ci);
1355  q_bi_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_ci);
1356  f_bi_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_bx);
1357  q_bi_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_bx);
1358  f_bi_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_cx);
1359  q_bi_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_cx);
1360  f_ei_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_bi);
1361  q_ei_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_bi);
1362  f_ei_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_ei);
1363  q_ei_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_ei);
1364  f_ei_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_dt);
1365  q_ei_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_dt);
1366  f_ei_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_bx);
1367  q_ei_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_bx);
1368  f_ei_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_ci);
1369  q_ei_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_ci);
1370  f_ei_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_e);
1371  q_ei_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_e);
1372  f_bp_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bx);
1373  q_bp_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bx);
1374  f_bp_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bp);
1375  q_bp_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bp);
1376  f_bp_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_dt);
1377  q_bp_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_dt);
1378  f_bp_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bi);
1379  q_bp_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bi);
1380  f_bp_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_ci);
1381  q_bp_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_ci);
1382  f_bp_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_cx);
1383  q_bp_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_cx);
1384 
1385 
1386 }
1387 
1388 // RHS load functions
1389 
1390 //-----------------------------------------------------------------------------
1391 // Function : Instance::loadDAEFVector
1392 // Purpose : load F vector (static contributions) for one instance for
1393 // NEW DAE formulation
1394 // Special Notes :
1395 // Scope : public
1396 // Creator : admsXml
1397 // Creation Date :
1398 //-----------------------------------------------------------------------------
1400 {
1401 
1402  bool bsuccess=true;
1403 
1415  {
1416  double *dFdxdVp = extData.dFdxdVpVectorRawPtr;
1417  dFdxdVp[li_c] += Jdxp_static[admsNodeID_c];
1418  dFdxdVp[li_b] += Jdxp_static[admsNodeID_b];
1419  dFdxdVp[li_e] += Jdxp_static[admsNodeID_e];
1420  dFdxdVp[li_dt] += Jdxp_static[admsNodeID_dt];
1421  dFdxdVp[li_cx] += Jdxp_static[admsNodeID_cx];
1422  dFdxdVp[li_ci] += Jdxp_static[admsNodeID_ci];
1423  dFdxdVp[li_bx] += Jdxp_static[admsNodeID_bx];
1424  dFdxdVp[li_bi] += Jdxp_static[admsNodeID_bi];
1425  dFdxdVp[li_ei] += Jdxp_static[admsNodeID_ei];
1426  dFdxdVp[li_bp] += Jdxp_static[admsNodeID_bp];
1427 
1428  }
1429 
1430  return bsuccess;
1431 }
1432 
1433 //-----------------------------------------------------------------------------
1434 // Function : Instance::loadDAEQVector
1435 // Purpose : load Q vector (dynamic contributions) for one instance for
1436 // NEW DAE formulation
1437 // Special Notes :
1438 // Scope : public
1439 // Creator : admsXml
1440 // Creation Date :
1441 //-----------------------------------------------------------------------------
1443 {
1455  {
1456  double *dQdxdVp = extData.dQdxdVpVectorRawPtr;
1457  dQdxdVp[li_c] += Jdxp_dynamic[admsNodeID_c];
1458  dQdxdVp[li_b] += Jdxp_dynamic[admsNodeID_b];
1459  dQdxdVp[li_e] += Jdxp_dynamic[admsNodeID_e];
1460  dQdxdVp[li_dt] += Jdxp_dynamic[admsNodeID_dt];
1461  dQdxdVp[li_cx] += Jdxp_dynamic[admsNodeID_cx];
1462  dQdxdVp[li_ci] += Jdxp_dynamic[admsNodeID_ci];
1463  dQdxdVp[li_bx] += Jdxp_dynamic[admsNodeID_bx];
1464  dQdxdVp[li_bi] += Jdxp_dynamic[admsNodeID_bi];
1465  dQdxdVp[li_ei] += Jdxp_dynamic[admsNodeID_ei];
1466  dQdxdVp[li_bp] += Jdxp_dynamic[admsNodeID_bp];
1467  }
1468 
1469  return true;
1470 }
1471 
1472 
1473 //-----------------------------------------------------------------------------
1474 // Function : Instance::updatePrimaryState
1475 // Purpose :
1476 // Special Notes : In this initial implementation, does little more than
1477 // call updateIntermediateVars()
1478 // Scope : public
1479 // Creator : admsXml
1480 // Creation Date :
1481 //-----------------------------------------------------------------------------
1483 {
1484  bool bsuccess = true;
1485 
1486  bsuccess = updateIntermediateVars();
1487 
1488  // if old DAE were implemented, we'd save dynamic contributions as state
1489  // here.
1490 
1491  double * staVec = extData.nextStaVectorRawPtr;
1492  // Also need to save limited voltage drops
1493  // This formulation assumes that we have *always* written the
1494  // limited voltages back into the probeVars[] array.
1495 
1503 
1504  return bsuccess;
1505 }
1506 
1507 //-----------------------------------------------------------------------------
1508 // Function : Instance::updateSecondaryState
1509 // Purpose :
1510 // Special Notes : In this initial implementation, does nothing
1511 // Scope : public
1512 // Creator : admsXml
1513 // Creation Date :
1514 //-----------------------------------------------------------------------------
1516 {
1517  bool bsuccess = true;
1518 
1519  // were old DAE implemented, we'd pull dynamic contribution derivatives
1520  // out of state.
1521 
1522  return bsuccess;
1523 }
1524 
1525 //-----------------------------------------------------------------------------
1526 // Function : Instance::updateIntermediateVars
1527 // Purpose : update intermediate variables for one vbic instance
1528 // Special Notes :
1529 // Scope : public
1530 // Creator : admsXml
1531 // Creation Date :
1532 //-----------------------------------------------------------------------------
1534 {
1535 
1536  bool bsuccess=true;
1537  N_LAS_Vector * solVectorPtr = extData.nextSolVectorPtr;
1538 
1539 #ifdef Xyce_DEBUG_DEVICE
1540  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
1541  {
1542  Xyce::dout() << std::endl << subsection_divider << std::endl;
1543  Xyce::dout() << " In ADMSvbic::Instance::updateIntermediateVars\n\n";
1544  Xyce::dout() << " name = " << getName() << std::endl;
1545  }
1546 #endif
1547 
1548  // Local variables
1549  AdmsFadType Qcth;
1550  AdmsFadType Irth;
1551  AdmsFadType Ith;
1552  AdmsFadType Qbco;
1553  AdmsFadType Qbeo;
1554  AdmsFadType Qbep;
1555  AdmsFadType Qbcx;
1556  AdmsFadType Qbc;
1557  AdmsFadType Qbex;
1558  AdmsFadType Qbe;
1559  AdmsFadType tff;
1560  AdmsFadType tff_exparg;
1561  AdmsFadType mIf;
1562  AdmsFadType rIf;
1563  AdmsFadType sgIf;
1564  AdmsFadType Irbp;
1565  AdmsFadType Ire;
1566  AdmsFadType Irbi;
1567  AdmsFadType Irbx;
1568  AdmsFadType Irci;
1569  AdmsFadType derf;
1570  AdmsFadType Iohm;
1571  AdmsFadType rKp1;
1572  AdmsFadType Kbcx;
1573  AdmsFadType Kbci;
1574  AdmsFadType expx_vbcx;
1575  AdmsFadType argx_vbcx;
1576  AdmsFadType Ircx;
1577  AdmsFadType Ibc;
1578  AdmsFadType Igc;
1579  AdmsFadType avalf;
1580  AdmsFadType avalf_exparg;
1581  AdmsFadType Ibep;
1582  AdmsFadType expn_vbep;
1583  AdmsFadType argn_vbep;
1584  AdmsFadType Ibcj;
1585  AdmsFadType expn_vbci;
1586  AdmsFadType argn_vbci;
1587  AdmsFadType Ibex;
1588  AdmsFadType Ibe;
1589  AdmsFadType expx_vbei;
1590  AdmsFadType argx_vbei;
1591  AdmsFadType expn_vbei;
1592  AdmsFadType argn_vbei;
1593  AdmsFadType argi_vbex;
1594  AdmsFadType expi_vbex;
1595  AdmsFadType argn_vbex;
1596  AdmsFadType expn_vbex;
1597  AdmsFadType argx_vbex;
1598  AdmsFadType expx_vbex;
1599  AdmsFadType qbp;
1600  AdmsFadType q2p;
1601  AdmsFadType Ifp;
1602  AdmsFadType expx_vbci;
1603  AdmsFadType argx_vbci;
1604  AdmsFadType expi_vbep;
1605  AdmsFadType argi_vbep;
1606  AdmsFadType Itzf;
1607  AdmsFadType Itzr;
1608  AdmsFadType qb;
1609  AdmsFadType q2;
1610  AdmsFadType q1;
1611  AdmsFadType q1z;
1612  AdmsFadType Iri;
1613  AdmsFadType expi_vbci;
1614  AdmsFadType argi_vbci;
1615  AdmsFadType Ifi;
1616  AdmsFadType expi_vbei;
1617  AdmsFadType argi_vbei;
1618  AdmsFadType qdbep;
1619  AdmsFadType qhi_vbep;
1620  AdmsFadType qlo_vbep;
1621  AdmsFadType dvh_vbep;
1622  AdmsFadType ql_vbep;
1623  AdmsFadType cl_vbep;
1624  AdmsFadType sel_vbep;
1625  AdmsFadType vl_vbep;
1626  AdmsFadType vnl_vbep;
1627  AdmsFadType vn_vbep;
1628  AdmsFadType mv_vbep;
1629  AdmsFadType dv_vbep;
1630  AdmsFadType qdbc;
1631  AdmsFadType qhi_vbci;
1632  AdmsFadType qlo_vbci;
1633  AdmsFadType dvh_vbci;
1634  AdmsFadType ql_vbci;
1635  AdmsFadType cl_vbci;
1636  AdmsFadType cmx;
1637  AdmsFadType crt;
1638  AdmsFadType sel_vbci;
1639  AdmsFadType vl_vbci;
1640  AdmsFadType vnl_vbci;
1641  AdmsFadType vn_vbci;
1642  AdmsFadType qlo0;
1643  AdmsFadType vnl0;
1644  AdmsFadType vn0;
1645  AdmsFadType mv_vbci;
1646  AdmsFadType dv_vbci;
1647  AdmsFadType qdbex;
1648  AdmsFadType qhi_vbex;
1649  AdmsFadType qlo_vbex;
1650  AdmsFadType dvh_vbex;
1651  AdmsFadType vl_vbex;
1652  AdmsFadType mv_vbex;
1653  AdmsFadType dv_vbex;
1654  AdmsFadType qdbe;
1655  AdmsFadType qhi_vbei;
1656  AdmsFadType qlo_vbei;
1657  double pwq;
1658  AdmsFadType dvh_vbei;
1659  AdmsFadType vl_vbei;
1660  AdmsFadType mv_vbei;
1661  AdmsFadType dv_vbei;
1662  AdmsFadType q0;
1663  AdmsFadType vl0;
1664  AdmsFadType mv0;
1665  AdmsFadType dv0;
1666  double slTF;
1667  double IITF;
1668  double IVTF;
1669  double IHRCF;
1670  AdmsFadType IVO;
1671  double IIKP;
1672  double IIKR;
1673  AdmsFadType IIKF;
1674  double IVER;
1675  double IVEF;
1676  AdmsFadType EBBEatT;
1677  AdmsFadType VOatT;
1678  AdmsFadType GAMMatT;
1679  AdmsFadType CJCPatT;
1680  AdmsFadType CJEPatT;
1681  AdmsFadType CJCatT;
1682  AdmsFadType CJEatT;
1683  AdmsFadType PSatT;
1684  AdmsFadType PCatT;
1685  AdmsFadType PEatT;
1686  AdmsFadType psiin;
1687  AdmsFadType psiio;
1688  AdmsFadType NBBEatT;
1689  AdmsFadType VBBEatT;
1690  AdmsFadType AVC2atT;
1691  AdmsFadType NRatT;
1692  AdmsFadType NFatT;
1693  AdmsFadType IBCNPatT;
1694  AdmsFadType IBCIPatT;
1695  AdmsFadType IBENPatT;
1696  AdmsFadType IBEIPatT;
1697  AdmsFadType IBCNatT;
1698  AdmsFadType IBCIatT;
1699  AdmsFadType IBENatT;
1700  AdmsFadType IBEIatT;
1701  AdmsFadType ISPatT;
1702  AdmsFadType ISRRatT;
1703  AdmsFadType ISatT;
1704  AdmsFadType RBPatT;
1705  AdmsFadType RSatT;
1706  AdmsFadType REatT;
1707  AdmsFadType RBIatT;
1708  AdmsFadType RBXatT;
1709  AdmsFadType RCIatT;
1710  AdmsFadType RCXatT;
1711  AdmsFadType IKFatT;
1712  AdmsFadType dT;
1713  AdmsFadType rT;
1714  AdmsFadType Vtv;
1715  AdmsFadType Tdev;
1716  double Tini;
1717  AdmsFadType Vcei;
1718  AdmsFadType Vbc;
1719  AdmsFadType Vrbp;
1720  AdmsFadType Vre;
1721  AdmsFadType Vrbx;
1722  AdmsFadType Vrbi;
1723  AdmsFadType Vrci;
1724  AdmsFadType Vrcx;
1725  AdmsFadType Vbe;
1726  AdmsFadType Vrth;
1727  AdmsFadType Vbep;
1728  AdmsFadType Vbcx;
1729  AdmsFadType Vbex;
1730  AdmsFadType Vbci;
1731  AdmsFadType Vbei;
1732  double tVCrit;
1733  // temporary variables for limiting
1734  double Vbe_orig,Vbe_limited,Vbe_old;
1735  double Vrth_orig,Vrth_limited,Vrth_old;
1736  double Vbep_orig,Vbep_limited,Vbep_old;
1737  double Vbcx_orig,Vbcx_limited,Vbcx_old;
1738  double Vbex_orig,Vbex_limited,Vbex_old;
1739  double Vbci_orig,Vbci_limited,Vbci_old;
1740  double Vbei_orig,Vbei_limited,Vbei_old;
1741 
1742 
1743  // set the sizes of the Fad arrays:
1744 
1745  if (probeVars.size() != (15))
1746  {
1747  probeVars.resize(15);
1748  staticContributions.resize(10+0);
1749  dynamicContributions.resize(10+0);
1750  probeDiffs.resize(15,0.0);
1751  Jdxp_static.resize(10+0);
1752  Jdxp_dynamic.resize(10+0);
1753  }
1754 
1755  // initialize contributions to zero (automatically sets derivatives to zero)
1756  for (int i=0; i < 10+0 ; ++i)
1757  {
1758  staticContributions[i]=0;
1759  dynamicContributions[i]=0;
1760  Jdxp_static[i]=0;
1761  Jdxp_dynamic[i]=0;
1762  }
1763 
1764  for (int i=0; i < 15 ; ++i)
1765  {
1766  probeDiffs[i] = 0.0;
1767  }
1768  // extract solution variables and set as Fad independent variables.
1769  probeVars[admsProbeID_V_ci_ei] = (*solVectorPtr)[li_ci] - (*solVectorPtr)[li_ei];
1771 
1772  probeVars[admsProbeID_V_b_c] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_c];
1774 
1775  probeVars[admsProbeID_V_bp_cx] = (*solVectorPtr)[li_bp] - (*solVectorPtr)[li_cx];
1777 
1778  probeVars[admsProbeID_V_e_ei] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_ei];
1780 
1781  probeVars[admsProbeID_V_b_bx] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_bx];
1783 
1784  probeVars[admsProbeID_V_bx_bi] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_bi];
1786 
1787  probeVars[admsProbeID_V_cx_ci] = (*solVectorPtr)[li_cx] - (*solVectorPtr)[li_ci];
1789 
1790  probeVars[admsProbeID_V_c_cx] = (*solVectorPtr)[li_c] - (*solVectorPtr)[li_cx];
1792 
1793  probeVars[admsProbeID_V_b_e] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_e];
1795 
1796  probeVars[admsProbeID_V_dt_GND] = (*solVectorPtr)[li_dt];
1798 
1799  probeVars[admsProbeID_V_bx_bp] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_bp];
1801 
1802  probeVars[admsProbeID_V_bi_cx] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_cx];
1804 
1805  probeVars[admsProbeID_V_bx_ei] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_ei];
1807 
1808  probeVars[admsProbeID_V_bi_ci] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_ci];
1810 
1811  probeVars[admsProbeID_V_bi_ei] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_ei];
1813 
1814 
1815  // pre-multiply any "typed" probes (i.e. those limited with "typedpnjlim")
1822 
1823  // Copy probes into limiting vars
1824  Vbe_orig = Vbe_limited = probeVars[admsProbeID_V_b_e].val();
1826  Vrth_orig = Vrth_limited = probeVars[admsProbeID_V_dt_GND].val();
1828  Vbep_orig = Vbep_limited = probeVars[admsProbeID_V_bx_bp].val();
1830  Vbcx_orig = Vbcx_limited = probeVars[admsProbeID_V_bi_cx].val();
1832  Vbex_orig = Vbex_limited = probeVars[admsProbeID_V_bx_ei].val();
1834  Vbci_orig = Vbci_limited = probeVars[admsProbeID_V_bi_ci].val();
1836  Vbei_orig = Vbei_limited = probeVars[admsProbeID_V_bi_ei].val();
1838 
1839  origFlag = true;
1840 
1841  // code manually moved from below, because we need it earlier than predicted by adms
1842  tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
1843 
1844  if (getSolverState().newtonIter == 0)
1845  {
1846 
1848  {
1849  // manually inserted code:
1851  {
1852  N_LAS_Vector * flagSolVectorPtr = (extData.flagSolVectorPtr);
1853  if ((*flagSolVectorPtr)[li_e] == 0 ||
1854  (*flagSolVectorPtr)[li_ei] == 0 ||
1855  (*flagSolVectorPtr)[li_b] == 0 ||
1856  (*flagSolVectorPtr)[li_bi] == 0 ||
1857  (*flagSolVectorPtr)[li_bx] == 0 ||
1858  (*flagSolVectorPtr)[li_bp] == 0 ||
1859  (*flagSolVectorPtr)[li_c] == 0 ||
1860  (*flagSolVectorPtr)[li_ci] == 0 ||
1861  (*flagSolVectorPtr)[li_cx] == 0 ||
1862  (*flagSolVectorPtr)[li_dt] == 0 )
1863  {
1864  Vbci_limited = Vbcx_limited = Vbep_limited = 0;
1865  Vbe_limited = Vbei_limited = Vbex_limited = tVCrit;
1866  Vrth_limited = 0;
1867  origFlag = false;
1868  }
1869  }
1870  else
1871  {
1872  Vbci_limited = Vbcx_limited = Vbep_limited = 0;
1873  Vbe_limited = Vbei_limited = Vbex_limited = tVCrit;
1874  Vrth_limited = 0;
1875  origFlag = false;
1876 #ifdef Xyce_DEBUG_DEVICE
1878  {
1879  Xyce::dout() << " Setting device initial condition to Base-Emitter drop=tVCrit (" << tVCrit << ")"<<std::endl;
1880  }
1881 #endif
1882  }
1883  }
1884  // end manually inserted code
1885 
1886  if (!(getSolverState().dcopFlag)||(getSolverState().locaEnabledFlag && getSolverState().dcopFlag))
1887  {
1895  }
1896  else
1897  {
1898  Vbe_old = Vbe_limited;
1899  Vrth_old = Vrth_limited;
1900  Vbep_old = Vbep_limited;
1901  Vbcx_old = Vbcx_limited;
1902  Vbex_old = Vbex_limited;
1903  Vbci_old = Vbci_limited;
1904  Vbei_old = Vbei_limited;
1905  }
1906  }
1907  else
1908  {
1916  }
1917 
1918  // -- code converted from analog/code block
1919  // manually moved to above, we need it earlier than this:
1920  //tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
1921 
1922 
1923  //Vbei = ($limit(V(bi,ei),"typedpnjlim_new",$vt(),tVCrit,dtype));
1925  {
1926  int icheck=0;
1927  Vbei_limited = devSupport.pnjlim_new(Vbei_limited,Vbei_old,adms_vt_nom,tVCrit,&icheck);
1928  if (icheck == 1)
1929  origFlag = false;
1930  if (!origFlag)
1931  {
1932  probeDiffs[admsProbeID_V_bi_ei] = Vbei_limited - Vbei_orig;
1934  }
1935  }
1937 
1938 
1939 
1940  //Vbci = ($limit(V(bi,ci),"typedpnjlim_new",$vt(),tVCrit,dtype));
1941  if (getDeviceOptions().voltageLimiterFlag)
1942  {
1943  int icheck=0;
1944  Vbci_limited = devSupport.pnjlim_new(Vbci_limited,Vbci_old,adms_vt_nom,tVCrit,&icheck);
1945  if (icheck == 1)
1946  origFlag = false;
1947  if (!origFlag)
1948  {
1949  probeDiffs[admsProbeID_V_bi_ci] = Vbci_limited - Vbci_orig;
1951  }
1952  }
1954 
1955 
1956 
1957  //Vbex = ($limit(V(bx,ei),"typedpnjlim_new",$vt(),tVCrit,dtype));
1958  if (getDeviceOptions().voltageLimiterFlag)
1959  {
1960  int icheck=0;
1961  Vbex_limited = devSupport.pnjlim_new(Vbex_limited,Vbex_old,adms_vt_nom,tVCrit,&icheck);
1962  if (icheck == 1)
1963  origFlag = false;
1964  if (!origFlag)
1965  {
1966  probeDiffs[admsProbeID_V_bx_ei] = Vbex_limited - Vbex_orig;
1968  }
1969  }
1971 
1972 
1973 
1974  //Vbcx = ($limit(V(bi,cx),"typedpnjlim_new",$vt(),tVCrit,dtype));
1975  if (getDeviceOptions().voltageLimiterFlag)
1976  {
1977  int icheck=0;
1978  Vbcx_limited = devSupport.pnjlim_new(Vbcx_limited,Vbcx_old,adms_vt_nom,tVCrit,&icheck);
1979  if (icheck == 1)
1980  origFlag = false;
1981  if (!origFlag)
1982  {
1983  probeDiffs[admsProbeID_V_bi_cx] = Vbcx_limited - Vbcx_orig;
1985  }
1986  }
1988 
1989 
1990 
1991  //Vbep = ($limit(V(bx,bp),"typedpnjlim_new",$vt(),tVCrit,dtype));
1992  if (getDeviceOptions().voltageLimiterFlag)
1993  {
1994  int icheck=0;
1995  Vbep_limited = devSupport.pnjlim_new(Vbep_limited,Vbep_old,adms_vt_nom,tVCrit,&icheck);
1996  if (icheck == 1)
1997  origFlag = false;
1998  if (!origFlag)
1999  {
2000  probeDiffs[admsProbeID_V_bx_bp] = Vbep_limited - Vbep_orig;
2002  }
2003  }
2005 
2006 
2007 
2008  //Vrth = ($limit(V(dt,GND),"limRTH"));
2009  if (getDeviceOptions().voltageLimiterFlag)
2010  {
2011  int icheck=0;
2012  Vrth_limited = model_.analogFunctions.limRTH(Vrth_limited,Vrth_old);
2013  if (Vrth_limited != Vrth_orig)
2014  {
2015  icheck=1;
2016  }
2017  if (icheck == 1)
2018  origFlag = false;
2019  if (!origFlag)
2020  {
2021  probeDiffs[admsProbeID_V_dt_GND] = Vrth_limited - Vrth_orig;
2023  }
2024  }
2026 
2027 
2028 
2029  //Vbe = ($limit(V(b,e),"typeddummy",$vt(),tVCrit,dtype));
2030  if (getDeviceOptions().voltageLimiterFlag)
2031  {
2032  int icheck=0;
2033  // dummy limiting for initialization purposes
2034  if (icheck == 1)
2035  origFlag = false;
2036  if (!origFlag)
2037  {
2038  probeDiffs[admsProbeID_V_b_e] = Vbe_limited - Vbe_orig;
2040  }
2041  }
2043 
2044  Vrcx = ((model_.dtype)*(probeVars[admsProbeID_V_c_cx]));
2045  Vrci = ((model_.dtype)*(probeVars[admsProbeID_V_cx_ci]));
2046  Vrbi = ((model_.dtype)*(probeVars[admsProbeID_V_bx_bi]));
2047  Vrbx = ((model_.dtype)*(probeVars[admsProbeID_V_b_bx]));
2049  Vrbp = ((model_.dtype)*(probeVars[admsProbeID_V_bp_cx]));
2050  Vbc = ((model_.dtype)*(probeVars[admsProbeID_V_b_c]));
2051  Vcei = ((model_.dtype)*(probeVars[admsProbeID_V_ci_ei]));
2052  Tini = (2.731500e+02+(model_.TNOM));
2053  Tdev = ((admsTemperature+(model_.DTEMP))+Vrth);
2054  Vtv = ((1.380662e-23*Tdev)/1.602189e-19);
2055  rT = (Tdev/Tini);
2056  dT = (Tdev-Tini);
2057  IKFatT = ((model_.IKF)*pow(rT,(model_.XIKF)));
2058  RCXatT = ((model_.RCX)*pow(rT,(model_.XRCX)));
2059  RCIatT = ((model_.RCI)*pow(rT,(model_.XRCI)));
2060  RBXatT = ((model_.RBX)*pow(rT,(model_.XRBX)));
2061  RBIatT = ((model_.RBI)*pow(rT,(model_.XRBI)));
2062  REatT = ((model_.RE)*pow(rT,(model_.XRE)));
2063  RSatT = ((model_.RS)*pow(rT,(model_.XRS)));
2064  RBPatT = ((model_.RBP)*pow(rT,(model_.XRBP)));
2065  ISatT = ((model_.IS)*pow((pow(rT,(model_.XIS))*exp((((-(model_.EA))*(1.0-rT))/Vtv))),(1.0/(model_.NF))));
2066  ISRRatT = ((model_.ISRR)*pow((pow(rT,(model_.XISR))*exp((((-(model_.DEAR))*(1.0-rT))/Vtv))),(1.0/(model_.NR))));
2067  ISPatT = ((model_.ISP)*pow((pow(rT,(model_.XIS))*exp((((-(model_.EAP))*(1.0-rT))/Vtv))),(1.0/(model_.NFP))));
2068  IBEIatT = ((model_.IBEI)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIE))*(1.0-rT))/Vtv))),(1.0/(model_.NEI))));
2069  IBENatT = ((model_.IBEN)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANE))*(1.0-rT))/Vtv))),(1.0/(model_.NEN))));
2070  IBCIatT = ((model_.IBCI)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIC))*(1.0-rT))/Vtv))),(1.0/(model_.NCI))));
2071  IBCNatT = ((model_.IBCN)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANC))*(1.0-rT))/Vtv))),(1.0/(model_.NCN))));
2072  IBEIPatT = ((model_.IBEIP)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIC))*(1.0-rT))/Vtv))),(1.0/(model_.NCI))));
2073  IBENPatT = ((model_.IBENP)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANC))*(1.0-rT))/Vtv))),(1.0/(model_.NCN))));
2074  IBCIPatT = ((model_.IBCIP)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIS))*(1.0-rT))/Vtv))),(1.0/(model_.NCIP))));
2075  IBCNPatT = ((model_.IBCNP)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANS))*(1.0-rT))/Vtv))),(1.0/(model_.NCNP))));
2076  NFatT = ((model_.NF)*(1.0+(dT*(model_.TNF))));
2077  NRatT = ((model_.NR)*(1.0+(dT*(model_.TNF))));
2078  AVC2atT = ((model_.AVC2)*(1.0+(dT*(model_.TAVC))));
2079  VBBEatT = ((model_.VBBE)*(1.0+(dT*((model_.TVBBE1)+(dT*(model_.TVBBE2))))));
2080  NBBEatT = ((model_.NBBE)*(1.0+(dT*(model_.TNBBE))));
2081  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PE))*rT)/Vtv))-exp(((((-0.5)*(model_.PE))*rT)/Vtv)))));
2082  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIE)*(rT-1.0)));
2083  PEatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2084  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PC))*rT)/Vtv))-exp(((((-0.5)*(model_.PC))*rT)/Vtv)))));
2085  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIC)*(rT-1.0)));
2086  PCatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2087  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PS))*rT)/Vtv))-exp(((((-0.5)*(model_.PS))*rT)/Vtv)))));
2088  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIS)*(rT-1.0)));
2089  PSatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2090  CJEatT = ((model_.CJE)*pow(((model_.PE)/PEatT),(model_.ME)));
2091  CJCatT = ((model_.CJC)*pow(((model_.PC)/PCatT),(model_.MC)));
2092  CJEPatT = ((model_.CJEP)*pow(((model_.PC)/PCatT),(model_.MC)));
2093  CJCPatT = ((model_.CJCP)*pow(((model_.PS)/PSatT),(model_.MS)));
2094  GAMMatT = (((model_.GAMM)*pow(rT,(model_.XIS)))*exp((((-(model_.EA))*(1.0-rT))/Vtv)));
2095  VOatT = ((model_.VO)*pow(rT,(model_.XVO)));
2096  EBBEatT = exp(((-VBBEatT)/(NBBEatT*Vtv)));
2097  IVEF = (((model_.VEF)>0.0)?(1.0/(model_.VEF)):0.0);
2098  IVER = (((model_.VER)>0.0)?(1.0/(model_.VER)):0.0);
2099  IIKF = 0.0;
2100  if (((model_.IKF)>0.0))
2101  {
2102  IIKF = (1.0/IKFatT);
2103  }
2104  IIKR = (((model_.IKR)>0.0)?(1.0/(model_.IKR)):0.0);
2105  IIKP = (((model_.IKP)>0.0)?(1.0/(model_.IKP)):0.0);
2106  IVO = 0.0;
2107  if (((model_.VO)>0.0))
2108  {
2109  IVO = (1.0/VOatT);
2110  }
2111  IHRCF = (((model_.HRCF)>0.0)?(1.0/(model_.HRCF)):0.0);
2112  IVTF = (((model_.VTF)>0.0)?(1.0/(model_.VTF)):0.0);
2113  IITF = (((model_.ITF)>0.0)?(1.0/(model_.ITF)):0.0);
2114  slTF = (((model_.ITF)>0.0)?0.0:1.0);
2115  dv0 = ((-PEatT)*(model_.FC));
2116  if (((model_.AJE)<=0.0))
2117  {
2118  dvh_vbei = (Vbei+dv0);
2119  if ((dvh_vbei>0.0))
2120  {
2121  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.ME)));
2122  qlo_vbei = ((PEatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.ME)));
2123  qhi_vbei = ((dvh_vbei*((1.0-(model_.FC))+(((0.5*(model_.ME))*dvh_vbei)/PEatT)))*pwq);
2124  }
2125  else
2126  {
2127  qlo_vbei = ((PEatT*(1.0-pow((1.0-(Vbei/PEatT)),(1.0-(model_.ME)))))/(1.0-(model_.ME)));
2128  qhi_vbei = 0.0;
2129  }
2130  qdbe = (qlo_vbei+qhi_vbei);
2131  }
2132  else
2133  {
2134  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJE))*(model_.AJE))));
2135  vl0 = ((-0.5)*(dv0+mv0));
2136  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2137  dv_vbei = (Vbei+dv0);
2138  mv_vbei = sqrt(((dv_vbei*dv_vbei)+((4*(model_.AJE))*(model_.AJE))));
2139  vl_vbei = ((0.5*(dv_vbei-mv_vbei))-dv0);
2140  qlo_vbei = (((-PEatT)*pow((1.0-(vl_vbei/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2141  qdbe = ((qlo_vbei+(pow((1.0-(model_.FC)),(-(model_.ME)))*((Vbei-vl_vbei)+vl0)))-q0);
2142  }
2143  dv0 = ((-PEatT)*(model_.FC));
2144  if (((model_.AJE)<=0.0))
2145  {
2146  dvh_vbex = (Vbex+dv0);
2147  if ((dvh_vbex>0.0))
2148  {
2149  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.ME)));
2150  qlo_vbex = ((PEatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.ME)));
2151  qhi_vbex = ((dvh_vbex*((1.0-(model_.FC))+(((0.5*(model_.ME))*dvh_vbex)/PEatT)))*pwq);
2152  }
2153  else
2154  {
2155  qlo_vbex = ((PEatT*(1.0-pow((1.0-(Vbex/PEatT)),(1.0-(model_.ME)))))/(1.0-(model_.ME)));
2156  qhi_vbex = 0.0;
2157  }
2158  qdbex = (qlo_vbex+qhi_vbex);
2159  }
2160  else
2161  {
2162  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJE))*(model_.AJE))));
2163  vl0 = ((-0.5)*(dv0+mv0));
2164  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2165  dv_vbex = (Vbex+dv0);
2166  mv_vbex = sqrt(((dv_vbex*dv_vbex)+((4*(model_.AJE))*(model_.AJE))));
2167  vl_vbex = ((0.5*(dv_vbex-mv_vbex))-dv0);
2168  qlo_vbex = (((-PEatT)*pow((1.0-(vl_vbex/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2169  qdbex = ((qlo_vbex+(pow((1.0-(model_.FC)),(-(model_.ME)))*((Vbex-vl_vbex)+vl0)))-q0);
2170  }
2171  dv0 = ((-PCatT)*(model_.FC));
2172  if (((model_.AJC)<=0.0))
2173  {
2174  dvh_vbci = (Vbci+dv0);
2175  if ((dvh_vbci>0.0))
2176  {
2177  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.MC)));
2178  qlo_vbci = ((PCatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.MC)));
2179  qhi_vbci = ((dvh_vbci*((1.0-(model_.FC))+(((0.5*(model_.MC))*dvh_vbci)/PCatT)))*pwq);
2180  }
2181  else
2182  {
2183  if ((((model_.VRT)>0.0)&&(Vbci<(-(model_.VRT)))))
2184  {
2185  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)));
2186  }
2187  else
2188  {
2189  qlo_vbci = ((PCatT*(1.0-pow((1.0-(Vbci/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2190  }
2191  qhi_vbci = 0.0;
2192  }
2193  qdbc = (qlo_vbci+qhi_vbci);
2194  }
2195  else
2196  {
2197  if ((((model_.VRT)>0.0)&&((model_.ART)>0.0)))
2198  {
2199  vn0 = (((model_.VRT)+dv0)/((model_.VRT)-dv0));
2200  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))))));
2201  vl0 = (0.5*(((vnl0*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2202  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2203  vn_vbci = ((((2*Vbci)+(model_.VRT))+dv0)/((model_.VRT)-dv0));
2204  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))))));
2205  vl_vbci = (0.5*(((vnl_vbci*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2206  qlo_vbci = ((PCatT*(1.0-pow((1.0-(vl_vbci/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2207  sel_vbci = (0.5*(vnl_vbci+1.0));
2208  crt = pow((1.0+((model_.VRT)/PCatT)),(-(model_.MC)));
2209  cmx = pow((1.0+(dv0/PCatT)),(-(model_.MC)));
2210  cl_vbci = (((1.0-sel_vbci)*crt)+(sel_vbci*cmx));
2211  ql_vbci = (((Vbci-vl_vbci)+vl0)*cl_vbci);
2212  qdbc = ((ql_vbci+qlo_vbci)-qlo0);
2213  }
2214  else
2215  {
2216  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJC))*(model_.AJC))));
2217  vl0 = ((-0.5)*(dv0+mv0));
2218  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2219  dv_vbci = (Vbci+dv0);
2220  mv_vbci = sqrt(((dv_vbci*dv_vbci)+((4*(model_.AJC))*(model_.AJC))));
2221  vl_vbci = ((0.5*(dv_vbci-mv_vbci))-dv0);
2222  qlo_vbci = (((-PCatT)*pow((1.0-(vl_vbci/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2223  qdbc = ((qlo_vbci+(pow((1.0-(model_.FC)),(-(model_.MC)))*((Vbci-vl_vbci)+vl0)))-q0);
2224  }
2225  }
2226  dv0 = ((-PCatT)*(model_.FC));
2227  if (((model_.AJC)<=0.0))
2228  {
2229  dvh_vbep = (Vbep+dv0);
2230  if ((dvh_vbep>0.0))
2231  {
2232  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.MC)));
2233  qlo_vbep = ((PCatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.MC)));
2234  qhi_vbep = ((dvh_vbep*((1.0-(model_.FC))+(((0.5*(model_.MC))*dvh_vbep)/PCatT)))*pwq);
2235  }
2236  else
2237  {
2238  if ((((model_.VRT)>0.0)&&(Vbep<(-(model_.VRT)))))
2239  {
2240  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)));
2241  }
2242  else
2243  {
2244  qlo_vbep = ((PCatT*(1.0-pow((1.0-(Vbep/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2245  }
2246  qhi_vbep = 0.0;
2247  }
2248  qdbep = (qlo_vbep+qhi_vbep);
2249  }
2250  else
2251  {
2252  if ((((model_.VRT)>0.0)&&((model_.ART)>0.0)))
2253  {
2254  vn0 = (((model_.VRT)+dv0)/((model_.VRT)-dv0));
2255  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))))));
2256  vl0 = (0.5*(((vnl0*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2257  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2258  vn_vbep = ((((2*Vbep)+(model_.VRT))+dv0)/((model_.VRT)-dv0));
2259  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))))));
2260  vl_vbep = (0.5*(((vnl_vbep*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2261  qlo_vbep = ((PCatT*(1.0-pow((1.0-(vl_vbep/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2262  sel_vbep = (0.5*(vnl_vbep+1.0));
2263  crt = pow((1.0+((model_.VRT)/PCatT)),(-(model_.MC)));
2264  cmx = pow((1.0+(dv0/PCatT)),(-(model_.MC)));
2265  cl_vbep = (((1.0-sel_vbep)*crt)+(sel_vbep*cmx));
2266  ql_vbep = (((Vbep-vl_vbep)+vl0)*cl_vbep);
2267  qdbep = ((ql_vbep+qlo_vbep)-qlo0);
2268  }
2269  else
2270  {
2271  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJC))*(model_.AJC))));
2272  vl0 = ((-0.5)*(dv0+mv0));
2273  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2274  dv_vbep = (Vbep+dv0);
2275  mv_vbep = sqrt(((dv_vbep*dv_vbep)+((4*(model_.AJC))*(model_.AJC))));
2276  vl_vbep = ((0.5*(dv_vbep-mv_vbep))-dv0);
2277  qlo_vbep = (((-PCatT)*pow((1.0-(vl_vbep/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2278  qdbep = ((qlo_vbep+(pow((1.0-(model_.FC)),(-(model_.MC)))*((Vbep-vl_vbep)+vl0)))-q0);
2279  }
2280  }
2281  argi_vbei = (Vbei/(NFatT*Vtv));
2282  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2283  Ifi = (ISatT*(expi_vbei-1.0));
2284  argi_vbci = (Vbci/(NRatT*Vtv));
2285  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2286  Iri = ((ISatT*ISRRatT)*(expi_vbci-1.0));
2287  q1z = ((1.0+(qdbe*IVER))+(qdbc*IVEF));
2288  q1 = ((0.5*((sqrt((((q1z-1.0e-4)*(q1z-1.0e-4))+1.0e-8))+q1z)-1.0e-4))+1.0e-4);
2289  q2 = ((Ifi*IIKF)+(Iri*IIKR));
2290  if ((q2>0))
2291  {
2292  if (((model_.QBM)<0.5))
2293  {
2294  qb = (0.5*(q1+pow((pow(q1,(1.0/(model_.NKF)))+(4.0*q2)),(model_.NKF))));
2295  }
2296  else
2297  {
2298  qb = ((0.5*q1)*(1.0+pow((1.0+(4.0*q2)),(model_.NKF))));
2299  }
2300  }
2301  else
2302  {
2303  qb = q1;
2304  }
2305  Itzr = (Iri/qb);
2306  Itzf = (Ifi/qb);
2307  if (((model_.ISP)>0.0))
2308  {
2309  argi_vbep = (Vbep/((model_.NFP)*Vtv));
2310  expi_vbep = limexp<AdmsFadType>(argi_vbep);
2311  argx_vbci = (Vbci/((model_.NFP)*Vtv));
2312  expx_vbci = limexp<AdmsFadType>(argx_vbci);
2313  Ifp = (ISPatT*((((model_.WSP)*expi_vbep)+((1.0-(model_.WSP))*expx_vbci))-1.0));
2314  q2p = (Ifp*IIKP);
2315  qbp = (0.5*(1.0+sqrt((1.0+(4.0*q2p)))));
2316  }
2317  else
2318  {
2319  Ifp = 0.0;
2320  qbp = 1.0;
2321  }
2322  if (((model_.WBE)==1.0))
2323  {
2324  argi_vbei = (Vbei/((model_.NEI)*Vtv));
2325  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2326  argn_vbei = (Vbei/((model_.NEN)*Vtv));
2327  expn_vbei = limexp<AdmsFadType>(argn_vbei);
2328  if (((model_.VBBE)>0.0))
2329  {
2330  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
2331  expx_vbei = limexp<AdmsFadType>(argx_vbei);
2332  Ibe = (((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-((model_.IBBE)*(expx_vbei-EBBEatT)));
2333  }
2334  else
2335  {
2336  Ibe = ((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)));
2337  }
2338  Ibex = 0.0;
2339  }
2340  else
2341  {
2342  if (((model_.WBE)==0.0))
2343  {
2344  Ibe = 0.0;
2345  argi_vbex = (Vbex/((model_.NEI)*Vtv));
2346  expi_vbex = limexp<AdmsFadType>(argi_vbex);
2347  argn_vbex = (Vbex/((model_.NEN)*Vtv));
2348  expn_vbex = limexp<AdmsFadType>(argn_vbex);
2349  if (((model_.VBBE)>0.0))
2350  {
2351  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
2352  expx_vbex = limexp<AdmsFadType>(argx_vbex);
2353  Ibex = (((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-((model_.IBBE)*(expx_vbex-EBBEatT)));
2354  }
2355  else
2356  {
2357  Ibex = ((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)));
2358  }
2359  }
2360  else
2361  {
2362  argi_vbei = (Vbei/((model_.NEI)*Vtv));
2363  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2364  argn_vbei = (Vbei/((model_.NEN)*Vtv));
2365  expn_vbei = limexp<AdmsFadType>(argn_vbei);
2366  if (((model_.VBBE)>0.0))
2367  {
2368  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
2369  expx_vbei = limexp<AdmsFadType>(argx_vbei);
2370  Ibe = ((model_.WBE)*(((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-((model_.IBBE)*(expx_vbei-EBBEatT))));
2371  }
2372  else
2373  {
2374  Ibe = ((model_.WBE)*((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0))));
2375  }
2376  argi_vbex = (Vbex/((model_.NEI)*Vtv));
2377  expi_vbex = limexp<AdmsFadType>(argi_vbex);
2378  argn_vbex = (Vbex/((model_.NEN)*Vtv));
2379  expn_vbex = limexp<AdmsFadType>(argn_vbex);
2380  if (((model_.VBBE)>0.0))
2381  {
2382  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
2383  expx_vbex = limexp<AdmsFadType>(argx_vbex);
2384  Ibex = ((1.0-(model_.WBE))*(((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-((model_.IBBE)*(expx_vbex-EBBEatT))));
2385  }
2386  else
2387  {
2388  Ibex = ((1.0-(model_.WBE))*((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0))));
2389  }
2390  }
2391  }
2392  argi_vbci = (Vbci/((model_.NCI)*Vtv));
2393  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2394  argn_vbci = (Vbci/((model_.NCN)*Vtv));
2395  expn_vbci = limexp<AdmsFadType>(argn_vbci);
2396  Ibcj = ((IBCIatT*(expi_vbci-1.0))+(IBCNatT*(expn_vbci-1.0)));
2397  if ((((model_.IBEIP)>0.0)||((model_.IBENP)>0.0)))
2398  {
2399  argi_vbep = (Vbep/((model_.NCI)*Vtv));
2400  expi_vbep = limexp<AdmsFadType>(argi_vbep);
2401  argn_vbep = (Vbep/((model_.NCN)*Vtv));
2402  expn_vbep = limexp<AdmsFadType>(argn_vbep);
2403  Ibep = ((IBEIPatT*(expi_vbep-1.0))+(IBENPatT*(expn_vbep-1.0)));
2404  }
2405  else
2406  {
2407  Ibep = 0.0;
2408  }
2409  if (((model_.AVC1)>0.0))
2410  {
2411  vl_vbci = (0.5*(sqrt((((PCatT-Vbci)*(PCatT-Vbci))+0.01))+(PCatT-Vbci)));
2412  avalf_exparg = ((-AVC2atT)*pow(vl_vbci,((model_.MC)-1.0)));
2413  avalf = (((model_.AVC1)*vl_vbci)*limexp<AdmsFadType>(avalf_exparg));
2414  Igc = (((Itzf-Itzr)-Ibcj)*avalf);
2415  }
2416  else
2417  {
2418  Igc = 0.0;
2419  }
2420  Ibc = (Ibcj-Igc);
2421  if (((model_.RCX)>0.0))
2422  {
2423  Ircx = (Vrcx/RCXatT);
2424  }
2425  else
2426  {
2427  Ircx = 0.0;
2428  }
2429  argi_vbci = (Vbci/Vtv);
2430  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2431  argx_vbcx = (Vbcx/Vtv);
2432  expx_vbcx = limexp<AdmsFadType>(argx_vbcx);
2433  Kbci = sqrt((1.0+(GAMMatT*expi_vbci)));
2434  Kbcx = sqrt((1.0+(GAMMatT*expx_vbcx)));
2435  if (((model_.RCI)>0.0))
2436  {
2437  rKp1 = ((Kbci+1.0)/(Kbcx+1.0));
2438  Iohm = ((Vrci+(Vtv*((Kbci-Kbcx)-log(rKp1))))/RCIatT);
2439  derf = (((IVO*RCIatT)*Iohm)/(1.0+(((0.5*IVO)*IHRCF)*sqrt(((Vrci*Vrci)+0.01)))));
2440  Irci = (Iohm/sqrt((1+(derf*derf))));
2441  }
2442  else
2443  {
2444  Irci = 0.0;
2445  }
2446  if (((model_.RBX)>0.0))
2447  {
2448  Irbx = (Vrbx/RBXatT);
2449  }
2450  else
2451  {
2452  Irbx = 0.0;
2453  }
2454  if (((model_.RBI)>0.0))
2455  {
2456  Irbi = ((Vrbi*qb)/RBIatT);
2457  }
2458  else
2459  {
2460  Irbi = 0.0;
2461  }
2462  if (((model_.RE)>0.0))
2463  {
2464  Ire = (Vre/REatT);
2465  }
2466  else
2467  {
2468  Ire = 0.0;
2469  }
2470  if (((model_.RBP)>0.0))
2471  {
2472  Irbp = ((Vrbp*qbp)/RBPatT);
2473  }
2474  else
2475  {
2476  Irbp = 0.0;
2477  }
2478  sgIf = ((Ifi>0.0)?1.0:0.0);
2479  rIf = ((Ifi*sgIf)*IITF);
2480  mIf = (rIf/(rIf+1.0));
2481  tff_exparg = ((Vbci*IVTF)/1.44);
2482  tff = (((model_.TF)*(1.0+((model_.QTF)*q1)))*(1.0+((((model_.XTF)*limexp<AdmsFadType>(tff_exparg))*(slTF+(mIf*mIf)))*sgIf)));
2483  Qbe = (((CJEatT*qdbe)*(model_.WBE))+((tff*Ifi)/qb));
2484  Qbex = ((CJEatT*qdbex)*(1.0-(model_.WBE)));
2485  Qbc = (((CJCatT*qdbc)+((model_.TR)*Iri))+((model_.QCO)*Kbci));
2486  Qbcx = ((model_.QCO)*Kbcx);
2487  Qbep = ((CJEPatT*qdbep)+((model_.TR)*Ifp));
2488  Qbeo = (Vbe*(model_.CBEO));
2489  Qbco = (Vbc*(model_.CBCO));
2490  Ith = (-(((((((((((Ibe*Vbei)+(Ibc*Vbci))+((Itzf-Itzr)*Vcei))+(Ibex*Vbex))+(Ibep*Vbep))+(Ircx*Vrcx))+(Irci*Vrci))+(Irbx*Vrbx))+(Irbi*Vrbi))+(Ire*Vre))+(Irbp*Vrbp)));
2491  if (((model_.RTH)>0.0))
2492  {
2493  Irth = (Vrth/(model_.RTH));
2494  }
2495  else
2496  {
2497  Irth = 0.0;
2498  }
2499  Qcth = (Vrth*(model_.CTH));
2500  // I(bi,ei) <+ (((M*dtype)*(Ibe+($simparam("gmin")*Vbei))))
2501  {
2502  AdmsFadType contribTemp;
2503  contribTemp= ((M*(model_.dtype))*(Ibe+(getDeviceOptions().gmin*Vbei)));
2504  staticContributions[admsNodeID_bi] += contribTemp;
2505  staticContributions[admsNodeID_ei] -= contribTemp;
2506 
2509  }
2510  // I(bx,ei) <+ (((M*dtype)*(Ibex+($simparam("gmin")*Vbex))))
2511  {
2512  AdmsFadType contribTemp;
2513  contribTemp= ((M*(model_.dtype))*(Ibex+(getDeviceOptions().gmin*Vbex)));
2514  staticContributions[admsNodeID_bx] += contribTemp;
2515  staticContributions[admsNodeID_ei] -= contribTemp;
2516 
2519  }
2520  // I(ci,ei) <+ (((M*dtype)*Itzf))
2521  {
2522  AdmsFadType contribTemp;
2523  contribTemp= ((M*(model_.dtype))*Itzf);
2524  staticContributions[admsNodeID_ci] += contribTemp;
2525  staticContributions[admsNodeID_ei] -= contribTemp;
2526 
2529  }
2530  // I(ei,ci) <+ (((M*dtype)*Itzr))
2531  {
2532  AdmsFadType contribTemp;
2533  contribTemp= ((M*(model_.dtype))*Itzr);
2534  staticContributions[admsNodeID_ei] += contribTemp;
2535  staticContributions[admsNodeID_ci] -= contribTemp;
2536 
2539  }
2540  // I(bi,ci) <+ (((M*dtype)*(Ibc+($simparam("gmin")*Vbci))))
2541  {
2542  AdmsFadType contribTemp;
2543  contribTemp= ((M*(model_.dtype))*(Ibc+(getDeviceOptions().gmin*Vbci)));
2544  staticContributions[admsNodeID_bi] += contribTemp;
2545  staticContributions[admsNodeID_ci] -= contribTemp;
2546 
2549  }
2550  // I(bx,bp) <+ (((M*dtype)*(Ibep+($simparam("gmin")*Vbep))))
2551  {
2552  AdmsFadType contribTemp;
2553  contribTemp= ((M*(model_.dtype))*(Ibep+(getDeviceOptions().gmin*Vbep)));
2554  staticContributions[admsNodeID_bx] += contribTemp;
2555  staticContributions[admsNodeID_bp] -= contribTemp;
2556 
2559  }
2560  if (((model_.RCX)>0))
2561  {
2562  // I(c,cx) <+ (((M*dtype)*Ircx))
2563  {
2564  AdmsFadType contribTemp;
2565  contribTemp= ((M*(model_.dtype))*Ircx);
2566  staticContributions[admsNodeID_c] += contribTemp;
2567  staticContributions[admsNodeID_cx] -= contribTemp;
2568 
2571  }
2572  }
2573  else
2574  {
2575  // V(c,cx) <+ (0.0)
2576  // do nothing at all
2577  }
2578  // I(cx,ci) <+ (((M*dtype)*(Irci+($simparam("gmin")*Vrci))))
2579  {
2580  AdmsFadType contribTemp;
2581  contribTemp= ((M*(model_.dtype))*(Irci+(getDeviceOptions().gmin*Vrci)));
2582  staticContributions[admsNodeID_cx] += contribTemp;
2583  staticContributions[admsNodeID_ci] -= contribTemp;
2584 
2587  }
2588  if (((model_.RBX)>0))
2589  {
2590  // I(b,bx) <+ (((M*dtype)*Irbx))
2591  {
2592  AdmsFadType contribTemp;
2593  contribTemp= ((M*(model_.dtype))*Irbx);
2594  staticContributions[admsNodeID_b] += contribTemp;
2595  staticContributions[admsNodeID_bx] -= contribTemp;
2596 
2599  }
2600  }
2601  else
2602  {
2603  // V(b,bx) <+ (0.0)
2604  // do nothing at all
2605  }
2606  // I(bx,bi) <+ (((M*dtype)*Irbi))
2607  {
2608  AdmsFadType contribTemp;
2609  contribTemp= ((M*(model_.dtype))*Irbi);
2610  staticContributions[admsNodeID_bx] += contribTemp;
2611  staticContributions[admsNodeID_bi] -= contribTemp;
2612 
2615  }
2616  if (((model_.RE)>0))
2617  {
2618  // I(e,ei) <+ (((M*dtype)*Ire))
2619  {
2620  AdmsFadType contribTemp;
2621  contribTemp= ((M*(model_.dtype))*Ire);
2622  staticContributions[admsNodeID_e] += contribTemp;
2623  staticContributions[admsNodeID_ei] -= contribTemp;
2624 
2627  }
2628  }
2629  else
2630  {
2631  // V(e,ei) <+ (0.0)
2632  // do nothing at all
2633  }
2634  // I(bp,cx) <+ (((M*dtype)*Irbp))
2635  {
2636  AdmsFadType contribTemp;
2637  contribTemp= ((M*(model_.dtype))*Irbp);
2638  staticContributions[admsNodeID_bp] += contribTemp;
2639  staticContributions[admsNodeID_cx] -= contribTemp;
2640 
2643  }
2644  // I(bi,ei) <+ (((M*dtype)*ddt(Qbe)))
2645  {
2646  AdmsFadType contribTemp;
2647  contribTemp= ((M*(model_.dtype))*(Qbe));
2648  dynamicContributions[admsNodeID_bi] += contribTemp;
2649  dynamicContributions[admsNodeID_ei] -= contribTemp;
2650 
2653  }
2654  // I(bx,ei) <+ (((M*dtype)*ddt(Qbex)))
2655  {
2656  AdmsFadType contribTemp;
2657  contribTemp= ((M*(model_.dtype))*(Qbex));
2658  dynamicContributions[admsNodeID_bx] += contribTemp;
2659  dynamicContributions[admsNodeID_ei] -= contribTemp;
2660 
2663  }
2664  // I(bi,ci) <+ (((M*dtype)*ddt(Qbc)))
2665  {
2666  AdmsFadType contribTemp;
2667  contribTemp= ((M*(model_.dtype))*(Qbc));
2668  dynamicContributions[admsNodeID_bi] += contribTemp;
2669  dynamicContributions[admsNodeID_ci] -= contribTemp;
2670 
2673  }
2674  // I(bi,cx) <+ (((M*dtype)*ddt(Qbcx)))
2675  {
2676  AdmsFadType contribTemp;
2677  contribTemp= ((M*(model_.dtype))*(Qbcx));
2678  dynamicContributions[admsNodeID_bi] += contribTemp;
2679  dynamicContributions[admsNodeID_cx] -= contribTemp;
2680 
2683  }
2684  // I(bx,bp) <+ (((M*dtype)*ddt(Qbep)))
2685  {
2686  AdmsFadType contribTemp;
2687  contribTemp= ((M*(model_.dtype))*(Qbep));
2688  dynamicContributions[admsNodeID_bx] += contribTemp;
2689  dynamicContributions[admsNodeID_bp] -= contribTemp;
2690 
2693  }
2694  // I(b,e) <+ (((M*dtype)*ddt(Qbeo)))
2695  {
2696  AdmsFadType contribTemp;
2697  contribTemp= ((M*(model_.dtype))*(Qbeo));
2698  dynamicContributions[admsNodeID_b] += contribTemp;
2699  dynamicContributions[admsNodeID_e] -= contribTemp;
2700 
2703  }
2704  // I(b,c) <+ (((M*dtype)*ddt(Qbco)))
2705  dynamicContributions[admsNodeID_b] += ((M*(model_.dtype))*(Qbco));
2706  dynamicContributions[admsNodeID_c] -= ((M*(model_.dtype))*(Qbco));
2707  // I(dt,GND) <+ (Irth)
2708  {
2709  AdmsFadType contribTemp;
2710  contribTemp= Irth;
2711  staticContributions[admsNodeID_dt] += contribTemp;
2712 
2714  }
2715  // I(dt,GND) <+ (Ith)
2716  {
2717  AdmsFadType contribTemp;
2718  contribTemp= Ith;
2719  staticContributions[admsNodeID_dt] += contribTemp;
2720 
2722  }
2723  // I(dt,GND) <+ (ddt(Qcth))
2724  {
2725  AdmsFadType contribTemp;
2726  contribTemp= (Qcth);
2727  dynamicContributions[admsNodeID_dt] += contribTemp;
2728 
2730  }
2731 
2732 
2733  // -- endcode converted from analog/code block
2734 #ifdef Xyce_DEBUG_DEVICE
2735  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
2736  {
2737  Xyce::dout() << " probeVars[admsProbeID_V_ci_ei] = "
2738  <<probeVars[admsProbeID_V_ci_ei].val() << std::endl;
2739  Xyce::dout() << " probeVars[admsProbeID_V_b_c] = "
2740  <<probeVars[admsProbeID_V_b_c].val() << std::endl;
2741  Xyce::dout() << " probeVars[admsProbeID_V_bp_cx] = "
2742  <<probeVars[admsProbeID_V_bp_cx].val() << std::endl;
2743  Xyce::dout() << " probeVars[admsProbeID_V_e_ei] = "
2744  <<probeVars[admsProbeID_V_e_ei].val() << std::endl;
2745  Xyce::dout() << " probeVars[admsProbeID_V_b_bx] = "
2746  <<probeVars[admsProbeID_V_b_bx].val() << std::endl;
2747  Xyce::dout() << " probeVars[admsProbeID_V_bx_bi] = "
2748  <<probeVars[admsProbeID_V_bx_bi].val() << std::endl;
2749  Xyce::dout() << " probeVars[admsProbeID_V_cx_ci] = "
2750  <<probeVars[admsProbeID_V_cx_ci].val() << std::endl;
2751  Xyce::dout() << " probeVars[admsProbeID_V_c_cx] = "
2752  <<probeVars[admsProbeID_V_c_cx].val() << std::endl;
2753  Xyce::dout() << " probeVars[admsProbeID_V_b_e] = "
2754  <<probeVars[admsProbeID_V_b_e].val() << std::endl;
2755  Xyce::dout() << " probeVars[admsProbeID_V_dt_GND] = "
2756  <<probeVars[admsProbeID_V_dt_GND].val() << std::endl;
2757  Xyce::dout() << " probeVars[admsProbeID_V_bx_bp] = "
2758  <<probeVars[admsProbeID_V_bx_bp].val() << std::endl;
2759  Xyce::dout() << " probeVars[admsProbeID_V_bi_cx] = "
2760  <<probeVars[admsProbeID_V_bi_cx].val() << std::endl;
2761  Xyce::dout() << " probeVars[admsProbeID_V_bx_ei] = "
2762  <<probeVars[admsProbeID_V_bx_ei].val() << std::endl;
2763  Xyce::dout() << " probeVars[admsProbeID_V_bi_ci] = "
2764  <<probeVars[admsProbeID_V_bi_ci].val() << std::endl;
2765  Xyce::dout() << " probeVars[admsProbeID_V_bi_ei] = "
2766  <<probeVars[admsProbeID_V_bi_ei].val() << std::endl;
2767  Xyce::dout() << " staticContributions[admsNodeID_c] = "
2768  <<staticContributions[admsNodeID_c].val() << std::endl;
2769  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
2770  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_c) << std::endl;
2771  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) << std::endl;
2772  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) << std::endl;
2773  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) << std::endl;
2774  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) << std::endl;
2775  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
2776  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) << std::endl;
2777  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_e) << std::endl;
2778  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) << std::endl;
2779  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) << std::endl;
2780  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) << std::endl;
2781  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) << std::endl;
2782  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) << std::endl;
2783  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) << std::endl;
2784  Xyce::dout() << " dynamicContributions[admsNodeID_c] = "
2785  <<dynamicContributions[admsNodeID_c].val() << std::endl;
2786  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
2787  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c) << std::endl;
2788  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) << std::endl;
2789  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) << std::endl;
2790  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) << std::endl;
2791  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) << std::endl;
2792  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
2793  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) << std::endl;
2794  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_e) << std::endl;
2795  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) << std::endl;
2796  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) << std::endl;
2797  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) << std::endl;
2798  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) << std::endl;
2799  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) << std::endl;
2800  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) << std::endl;
2801  Xyce::dout() << " Jdxp_static[admsNodeID_c] = "
2802  <<Jdxp_static[admsNodeID_c] << std::endl;
2803  Xyce::dout() << " Jdxp_dynamic[admsNodeID_c] = "
2804  <<Jdxp_dynamic[admsNodeID_c] << std::endl;
2805  Xyce::dout() << " staticContributions[admsNodeID_b] = "
2806  <<staticContributions[admsNodeID_b].val() << std::endl;
2807  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
2808  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_c) << std::endl;
2809  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) << std::endl;
2810  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) << std::endl;
2811  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) << std::endl;
2812  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) << std::endl;
2813  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
2814  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) << std::endl;
2815  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_e) << std::endl;
2816  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) << std::endl;
2817  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) << std::endl;
2818  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) << std::endl;
2819  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) << std::endl;
2820  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) << std::endl;
2821  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) << std::endl;
2822  Xyce::dout() << " dynamicContributions[admsNodeID_b] = "
2823  <<dynamicContributions[admsNodeID_b].val() << std::endl;
2824  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
2825  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c) << std::endl;
2826  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) << std::endl;
2827  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) << std::endl;
2828  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) << std::endl;
2829  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) << std::endl;
2830  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
2831  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) << std::endl;
2832  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e) << std::endl;
2833  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) << std::endl;
2834  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) << std::endl;
2835  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) << std::endl;
2836  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) << std::endl;
2837  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) << std::endl;
2838  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) << std::endl;
2839  Xyce::dout() << " Jdxp_static[admsNodeID_b] = "
2840  <<Jdxp_static[admsNodeID_b] << std::endl;
2841  Xyce::dout() << " Jdxp_dynamic[admsNodeID_b] = "
2842  <<Jdxp_dynamic[admsNodeID_b] << std::endl;
2843  Xyce::dout() << " staticContributions[admsNodeID_e] = "
2844  <<staticContributions[admsNodeID_e].val() << std::endl;
2845  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
2846  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_c) << std::endl;
2847  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) << std::endl;
2848  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) << std::endl;
2849  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) << std::endl;
2850  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) << std::endl;
2851  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
2852  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) << std::endl;
2853  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_e) << std::endl;
2854  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) << std::endl;
2855  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) << std::endl;
2856  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) << std::endl;
2857  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) << std::endl;
2858  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) << std::endl;
2859  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) << std::endl;
2860  Xyce::dout() << " dynamicContributions[admsNodeID_e] = "
2861  <<dynamicContributions[admsNodeID_e].val() << std::endl;
2862  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
2863  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_c) << std::endl;
2864  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) << std::endl;
2865  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) << std::endl;
2866  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) << std::endl;
2867  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) << std::endl;
2868  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
2869  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) << std::endl;
2870  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e) << std::endl;
2871  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) << std::endl;
2872  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) << std::endl;
2873  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) << std::endl;
2874  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) << std::endl;
2875  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) << std::endl;
2876  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) << std::endl;
2877  Xyce::dout() << " Jdxp_static[admsNodeID_e] = "
2878  <<Jdxp_static[admsNodeID_e] << std::endl;
2879  Xyce::dout() << " Jdxp_dynamic[admsNodeID_e] = "
2880  <<Jdxp_dynamic[admsNodeID_e] << std::endl;
2881  Xyce::dout() << " staticContributions[admsNodeID_dt] = "
2882  <<staticContributions[admsNodeID_dt].val() << std::endl;
2883  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) << std::endl;
2884  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) << std::endl;
2885  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) << std::endl;
2886  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) << std::endl;
2887  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) << std::endl;
2888  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) << std::endl;
2889  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) << std::endl;
2890  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) << std::endl;
2891  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) << std::endl;
2892  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) << std::endl;
2893  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) << std::endl;
2894  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) << std::endl;
2895  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) << std::endl;
2896  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) << std::endl;
2897  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) << std::endl;
2898  Xyce::dout() << " dynamicContributions[admsNodeID_dt] = "
2899  <<dynamicContributions[admsNodeID_dt].val() << std::endl;
2900  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) << std::endl;
2901  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) << std::endl;
2902  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) << std::endl;
2903  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) << std::endl;
2904  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) << std::endl;
2905  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) << std::endl;
2906  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) << std::endl;
2907  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) << std::endl;
2908  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) << std::endl;
2909  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) << std::endl;
2910  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) << std::endl;
2911  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) << std::endl;
2912  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) << std::endl;
2913  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) << std::endl;
2914  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) << std::endl;
2915  Xyce::dout() << " Jdxp_static[admsNodeID_dt] = "
2916  <<Jdxp_static[admsNodeID_dt] << std::endl;
2917  Xyce::dout() << " Jdxp_dynamic[admsNodeID_dt] = "
2918  <<Jdxp_dynamic[admsNodeID_dt] << std::endl;
2919  Xyce::dout() << " staticContributions[admsNodeID_cx] = "
2920  <<staticContributions[admsNodeID_cx].val() << std::endl;
2921  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) << std::endl;
2922  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) << std::endl;
2923  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) << std::endl;
2924  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) << std::endl;
2925  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) << std::endl;
2926  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) << std::endl;
2927  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) << std::endl;
2928  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) << std::endl;
2929  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) << std::endl;
2930  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) << std::endl;
2931  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) << std::endl;
2932  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) << std::endl;
2933  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) << std::endl;
2934  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) << std::endl;
2935  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) << std::endl;
2936  Xyce::dout() << " dynamicContributions[admsNodeID_cx] = "
2937  <<dynamicContributions[admsNodeID_cx].val() << std::endl;
2938  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) << std::endl;
2939  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) << std::endl;
2940  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) << std::endl;
2941  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) << std::endl;
2942  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) << std::endl;
2943  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) << std::endl;
2944  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) << std::endl;
2945  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) << std::endl;
2946  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) << std::endl;
2947  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) << std::endl;
2948  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) << std::endl;
2949  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) << std::endl;
2950  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) << std::endl;
2951  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) << std::endl;
2952  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) << std::endl;
2953  Xyce::dout() << " Jdxp_static[admsNodeID_cx] = "
2954  <<Jdxp_static[admsNodeID_cx] << std::endl;
2955  Xyce::dout() << " Jdxp_dynamic[admsNodeID_cx] = "
2956  <<Jdxp_dynamic[admsNodeID_cx] << std::endl;
2957  Xyce::dout() << " staticContributions[admsNodeID_ci] = "
2958  <<staticContributions[admsNodeID_ci].val() << std::endl;
2959  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) << std::endl;
2960  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) << std::endl;
2961  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) << std::endl;
2962  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) << std::endl;
2963  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) << std::endl;
2964  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) << std::endl;
2965  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) << std::endl;
2966  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) << std::endl;
2967  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) << std::endl;
2968  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) << std::endl;
2969  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) << std::endl;
2970  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) << std::endl;
2971  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) << std::endl;
2972  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) << std::endl;
2973  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) << std::endl;
2974  Xyce::dout() << " dynamicContributions[admsNodeID_ci] = "
2975  <<dynamicContributions[admsNodeID_ci].val() << std::endl;
2976  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) << std::endl;
2977  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) << std::endl;
2978  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) << std::endl;
2979  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) << std::endl;
2980  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) << std::endl;
2981  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) << std::endl;
2982  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) << std::endl;
2983  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) << std::endl;
2984  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) << std::endl;
2985  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) << std::endl;
2986  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) << std::endl;
2987  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) << std::endl;
2988  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) << std::endl;
2989  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) << std::endl;
2990  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) << std::endl;
2991  Xyce::dout() << " Jdxp_static[admsNodeID_ci] = "
2992  <<Jdxp_static[admsNodeID_ci] << std::endl;
2993  Xyce::dout() << " Jdxp_dynamic[admsNodeID_ci] = "
2994  <<Jdxp_dynamic[admsNodeID_ci] << std::endl;
2995  Xyce::dout() << " staticContributions[admsNodeID_bx] = "
2996  <<staticContributions[admsNodeID_bx].val() << std::endl;
2997  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) << std::endl;
2998  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) << std::endl;
2999  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) << std::endl;
3000  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) << std::endl;
3001  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) << std::endl;
3002  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) << std::endl;
3003  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) << std::endl;
3004  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) << std::endl;
3005  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) << std::endl;
3006  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) << std::endl;
3007  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) << std::endl;
3008  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) << std::endl;
3009  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) << std::endl;
3010  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) << std::endl;
3011  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) << std::endl;
3012  Xyce::dout() << " dynamicContributions[admsNodeID_bx] = "
3013  <<dynamicContributions[admsNodeID_bx].val() << std::endl;
3014  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) << std::endl;
3015  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) << std::endl;
3016  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) << std::endl;
3017  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) << std::endl;
3018  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) << std::endl;
3019  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) << std::endl;
3020  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) << std::endl;
3021  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) << std::endl;
3022  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) << std::endl;
3023  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) << std::endl;
3024  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) << std::endl;
3025  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) << std::endl;
3026  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) << std::endl;
3027  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) << std::endl;
3028  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) << std::endl;
3029  Xyce::dout() << " Jdxp_static[admsNodeID_bx] = "
3030  <<Jdxp_static[admsNodeID_bx] << std::endl;
3031  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bx] = "
3032  <<Jdxp_dynamic[admsNodeID_bx] << std::endl;
3033  Xyce::dout() << " staticContributions[admsNodeID_bi] = "
3034  <<staticContributions[admsNodeID_bi].val() << std::endl;
3035  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) << std::endl;
3036  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) << std::endl;
3037  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) << std::endl;
3038  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) << std::endl;
3039  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) << std::endl;
3040  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) << std::endl;
3041  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) << std::endl;
3042  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) << std::endl;
3043  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) << std::endl;
3044  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) << std::endl;
3045  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) << std::endl;
3046  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) << std::endl;
3047  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) << std::endl;
3048  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) << std::endl;
3049  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) << std::endl;
3050  Xyce::dout() << " dynamicContributions[admsNodeID_bi] = "
3051  <<dynamicContributions[admsNodeID_bi].val() << std::endl;
3052  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) << std::endl;
3053  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) << std::endl;
3054  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) << std::endl;
3055  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) << std::endl;
3056  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) << std::endl;
3057  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) << std::endl;
3058  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) << std::endl;
3059  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) << std::endl;
3060  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) << std::endl;
3061  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) << std::endl;
3062  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) << std::endl;
3063  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) << std::endl;
3064  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) << std::endl;
3065  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) << std::endl;
3066  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) << std::endl;
3067  Xyce::dout() << " Jdxp_static[admsNodeID_bi] = "
3068  <<Jdxp_static[admsNodeID_bi] << std::endl;
3069  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bi] = "
3070  <<Jdxp_dynamic[admsNodeID_bi] << std::endl;
3071  Xyce::dout() << " staticContributions[admsNodeID_ei] = "
3072  <<staticContributions[admsNodeID_ei].val() << std::endl;
3073  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) << std::endl;
3074  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) << std::endl;
3075  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) << std::endl;
3076  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) << std::endl;
3077  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) << std::endl;
3078  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) << std::endl;
3079  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) << std::endl;
3080  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) << std::endl;
3081  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) << std::endl;
3082  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) << std::endl;
3083  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) << std::endl;
3084  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) << std::endl;
3085  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) << std::endl;
3086  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) << std::endl;
3087  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) << std::endl;
3088  Xyce::dout() << " dynamicContributions[admsNodeID_ei] = "
3089  <<dynamicContributions[admsNodeID_ei].val() << std::endl;
3090  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) << std::endl;
3091  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) << std::endl;
3092  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) << std::endl;
3093  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) << std::endl;
3094  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) << std::endl;
3095  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) << std::endl;
3096  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) << std::endl;
3097  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) << std::endl;
3098  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) << std::endl;
3099  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) << std::endl;
3100  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) << std::endl;
3101  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) << std::endl;
3102  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) << std::endl;
3103  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) << std::endl;
3104  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) << std::endl;
3105  Xyce::dout() << " Jdxp_static[admsNodeID_ei] = "
3106  <<Jdxp_static[admsNodeID_ei] << std::endl;
3107  Xyce::dout() << " Jdxp_dynamic[admsNodeID_ei] = "
3108  <<Jdxp_dynamic[admsNodeID_ei] << std::endl;
3109  Xyce::dout() << " staticContributions[admsNodeID_bp] = "
3110  <<staticContributions[admsNodeID_bp].val() << std::endl;
3111  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) << std::endl;
3112  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) << std::endl;
3113  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) << std::endl;
3114  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) << std::endl;
3115  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) << std::endl;
3116  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) << std::endl;
3117  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) << std::endl;
3118  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) << std::endl;
3119  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) << std::endl;
3120  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) << std::endl;
3121  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) << std::endl;
3122  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) << std::endl;
3123  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) << std::endl;
3124  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) << std::endl;
3125  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) << std::endl;
3126  Xyce::dout() << " dynamicContributions[admsNodeID_bp] = "
3127  <<dynamicContributions[admsNodeID_bp].val() << std::endl;
3128  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) << std::endl;
3129  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) << std::endl;
3130  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) << std::endl;
3131  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) << std::endl;
3132  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) << std::endl;
3133  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) << std::endl;
3134  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) << std::endl;
3135  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) << std::endl;
3136  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) << std::endl;
3137  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) << std::endl;
3138  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) << std::endl;
3139  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) << std::endl;
3140  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) << std::endl;
3141  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) << std::endl;
3142  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) << std::endl;
3143  Xyce::dout() << " Jdxp_static[admsNodeID_bp] = "
3144  <<Jdxp_static[admsNodeID_bp] << std::endl;
3145  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bp] = "
3146  <<Jdxp_dynamic[admsNodeID_bp] << std::endl;
3147 
3148  if (!origFlag)
3149  {
3150  Xyce::dout() << "This step was limited by this device." << std::endl;
3151  Xyce::dout() << " Vbei_limited = " << Vbei_limited << " _orig = " << Vbei_orig << " diff = " << Vbei_limited - Vbei_orig << std::endl;
3152  Xyce::dout() << " Vbci_limited = " << Vbci_limited << " _orig = " << Vbci_orig << " diff = " << Vbci_limited - Vbci_orig << std::endl;
3153  Xyce::dout() << " Vbex_limited = " << Vbex_limited << " _orig = " << Vbex_orig << " diff = " << Vbex_limited - Vbex_orig << std::endl;
3154  Xyce::dout() << " Vbcx_limited = " << Vbcx_limited << " _orig = " << Vbcx_orig << " diff = " << Vbcx_limited - Vbcx_orig << std::endl;
3155  Xyce::dout() << " Vbep_limited = " << Vbep_limited << " _orig = " << Vbep_orig << " diff = " << Vbep_limited - Vbep_orig << std::endl;
3156  Xyce::dout() << " Vrth_limited = " << Vrth_limited << " _orig = " << Vrth_orig << " diff = " << Vrth_limited - Vrth_orig << std::endl;
3157  }
3158  }
3159 #endif // Xyce_DEBUG_DEVICE
3160  return true;
3161 }
3162 
3163 //-----------------------------------------------------------------------------
3164 // Function : Instance::loadDAEdFdx
3165 // Purpose :
3166 // Special Notes : Load the dFdx ("static jacobian") matrix
3167 // Scope : public
3168 // Creator : admsXml
3169 // Creation Date :
3170 //-----------------------------------------------------------------------------
3172 {
3173  bool bsuccess = true;
3174  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
3175 
3176 #ifdef Xyce_DEBUG_DEVICE
3177  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3178  {
3179  Xyce::dout() << subsection_divider << std::endl;
3180  Xyce::dout() << "ADMSvbic::Instance::loadDAEdFdx (" << getName() << "):" << std::endl;
3181  }
3182 #endif
3184 
3185 
3186 #ifdef Xyce_DEBUG_DEVICE
3187  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3188  {
3190  }
3191 #endif
3192  (*f_bi_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei);
3193 
3194 
3195 #ifdef Xyce_DEBUG_DEVICE
3196  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3197  {
3198  Xyce::dout() << " (*f_bi_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei)<< std::endl;
3199  }
3200 #endif
3202 
3203 
3204 #ifdef Xyce_DEBUG_DEVICE
3205  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3206  {
3207  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;
3208  }
3209 #endif
3211 
3212 
3213 #ifdef Xyce_DEBUG_DEVICE
3214  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3215  {
3217  }
3218 #endif
3219  (*f_bi_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND);
3220 
3221 
3222 #ifdef Xyce_DEBUG_DEVICE
3223  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3224  {
3225  Xyce::dout() << " (*f_bi_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND)<< std::endl;
3226  }
3227 #endif
3228  (*f_ei_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND);
3229 
3230 
3231 #ifdef Xyce_DEBUG_DEVICE
3232  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3233  {
3234  Xyce::dout() << " (*f_ei_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND)<< std::endl;
3235  }
3236 #endif
3238 
3239 
3240 #ifdef Xyce_DEBUG_DEVICE
3241  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3242  {
3244  }
3245 #endif
3247 
3248 
3249 #ifdef Xyce_DEBUG_DEVICE
3250  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3251  {
3252  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;
3253  }
3254 #endif
3255  (*f_ei_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei);
3256 
3257 
3258 #ifdef Xyce_DEBUG_DEVICE
3259  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3260  {
3261  Xyce::dout() << " (*f_ei_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei)<< std::endl;
3262  }
3263 #endif
3264  (*f_bx_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND);
3265 
3266 
3267 #ifdef Xyce_DEBUG_DEVICE
3268  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3269  {
3270  Xyce::dout() << " (*f_bx_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND)<< std::endl;
3271  }
3272 #endif
3274 
3275 
3276 #ifdef Xyce_DEBUG_DEVICE
3277  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3278  {
3280  }
3281 #endif
3283 
3284 
3285 #ifdef Xyce_DEBUG_DEVICE
3286  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3287  {
3288  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;
3289  }
3290 #endif
3291  (*f_ei_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci);
3292 
3293 
3294 #ifdef Xyce_DEBUG_DEVICE
3295  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3296  {
3297  Xyce::dout() << " (*f_ei_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci)<< std::endl;
3298  }
3299 #endif
3300  (*f_ci_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei);
3301 
3302 
3303 #ifdef Xyce_DEBUG_DEVICE
3304  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3305  {
3306  Xyce::dout() << " (*f_ci_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei)<< std::endl;
3307  }
3308 #endif
3309  (*f_ci_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND);
3310 
3311 
3312 #ifdef Xyce_DEBUG_DEVICE
3313  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3314  {
3315  Xyce::dout() << " (*f_ci_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND)<< std::endl;
3316  }
3317 #endif
3318  (*f_bi_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci);
3319 
3320 
3321 #ifdef Xyce_DEBUG_DEVICE
3322  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3323  {
3324  Xyce::dout() << " (*f_bi_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci)<< std::endl;
3325  }
3326 #endif
3327  (*f_bx_Equ_bp_Node_Ptr) += -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp);
3328 
3329 
3330 #ifdef Xyce_DEBUG_DEVICE
3331  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3332  {
3333  Xyce::dout() << " (*f_bx_Equ_bp_Node_Ptr) += " << -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp)<< std::endl;
3334  }
3335 #endif
3336  (*f_bp_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
3337 
3338 
3339 #ifdef Xyce_DEBUG_DEVICE
3340  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3341  {
3342  Xyce::dout() << " (*f_bp_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3343  }
3344 #endif
3346 
3347 
3348 #ifdef Xyce_DEBUG_DEVICE
3349  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3350  {
3351  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;
3352  }
3353 #endif
3354  (*f_bp_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND);
3355 
3356 
3357 #ifdef Xyce_DEBUG_DEVICE
3358  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3359  {
3360  Xyce::dout() << " (*f_bp_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND)<< std::endl;
3361  }
3362 #endif
3363  (*f_c_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND);
3364 
3365 
3366 #ifdef Xyce_DEBUG_DEVICE
3367  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3368  {
3369  Xyce::dout() << " (*f_c_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND)<< std::endl;
3370  }
3371 #endif
3372  (*f_cx_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND);
3373 
3374 
3375 #ifdef Xyce_DEBUG_DEVICE
3376  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3377  {
3378  Xyce::dout() << " (*f_cx_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND)<< std::endl;
3379  }
3380 #endif
3381  (*f_c_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx);
3382 
3383 
3384 #ifdef Xyce_DEBUG_DEVICE
3385  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3386  {
3387  Xyce::dout() << " (*f_c_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx)<< std::endl;
3388  }
3389 #endif
3390  (*f_c_Equ_cx_Node_Ptr) += -staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx);
3391 
3392 
3393 #ifdef Xyce_DEBUG_DEVICE
3394  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3395  {
3396  Xyce::dout() << " (*f_c_Equ_cx_Node_Ptr) += " << -staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx)<< std::endl;
3397  }
3398 #endif
3399  (*f_cx_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx);
3400 
3401 
3402 #ifdef Xyce_DEBUG_DEVICE
3403  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3404  {
3405  Xyce::dout() << " (*f_cx_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx)<< std::endl;
3406  }
3407 #endif
3409 
3410 
3411 #ifdef Xyce_DEBUG_DEVICE
3412  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3413  {
3415  }
3416 #endif
3418 
3419 
3420 #ifdef Xyce_DEBUG_DEVICE
3421  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3422  {
3423  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;
3424  }
3425 #endif
3427 
3428 
3429 #ifdef Xyce_DEBUG_DEVICE
3430  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3431  {
3432  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;
3433  }
3434 #endif
3436 
3437 
3438 #ifdef Xyce_DEBUG_DEVICE
3439  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3440  {
3441  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;
3442  }
3443 #endif
3444  (*f_b_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND);
3445 
3446 
3447 #ifdef Xyce_DEBUG_DEVICE
3448  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3449  {
3450  Xyce::dout() << " (*f_b_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND)<< std::endl;
3451  }
3452 #endif
3453  (*f_b_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx);
3454 
3455 
3456 #ifdef Xyce_DEBUG_DEVICE
3457  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3458  {
3459  Xyce::dout() << " (*f_b_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx)<< std::endl;
3460  }
3461 #endif
3462  (*f_b_Equ_bx_Node_Ptr) += -staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx);
3463 
3464 
3465 #ifdef Xyce_DEBUG_DEVICE
3466  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3467  {
3468  Xyce::dout() << " (*f_b_Equ_bx_Node_Ptr) += " << -staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx)<< std::endl;
3469  }
3470 #endif
3471  (*f_bx_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx);
3472 
3473 
3474 #ifdef Xyce_DEBUG_DEVICE
3475  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3476  {
3477  Xyce::dout() << " (*f_bx_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx)<< std::endl;
3478  }
3479 #endif
3481 
3482 
3483 #ifdef Xyce_DEBUG_DEVICE
3484  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3485  {
3487  }
3488 #endif
3489  (*f_bx_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
3490 
3491 
3492 #ifdef Xyce_DEBUG_DEVICE
3493  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3494  {
3495  Xyce::dout() << " (*f_bx_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
3496  }
3497 #endif
3498  (*f_bi_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi);
3499 
3500 
3501 #ifdef Xyce_DEBUG_DEVICE
3502  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3503  {
3504  Xyce::dout() << " (*f_bi_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi)<< std::endl;
3505  }
3506 #endif
3507  (*f_e_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND);
3508 
3509 
3510 #ifdef Xyce_DEBUG_DEVICE
3511  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3512  {
3513  Xyce::dout() << " (*f_e_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND)<< std::endl;
3514  }
3515 #endif
3516  (*f_e_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei);
3517 
3518 
3519 #ifdef Xyce_DEBUG_DEVICE
3520  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3521  {
3522  Xyce::dout() << " (*f_e_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei)<< std::endl;
3523  }
3524 #endif
3525  (*f_e_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei);
3526 
3527 
3528 #ifdef Xyce_DEBUG_DEVICE
3529  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3530  {
3531  Xyce::dout() << " (*f_e_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei)<< std::endl;
3532  }
3533 #endif
3534  (*f_ei_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei);
3535 
3536 
3537 #ifdef Xyce_DEBUG_DEVICE
3538  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3539  {
3540  Xyce::dout() << " (*f_ei_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei)<< std::endl;
3541  }
3542 #endif
3543  (*f_bp_Equ_bi_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3544 
3545 
3546 #ifdef Xyce_DEBUG_DEVICE
3547  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3548  {
3549  Xyce::dout() << " (*f_bp_Equ_bi_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3550  }
3551 #endif
3552  (*f_bp_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3553 
3554 
3555 #ifdef Xyce_DEBUG_DEVICE
3556  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3557  {
3558  Xyce::dout() << " (*f_bp_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3559  }
3560 #endif
3561  (*f_cx_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp);
3562 
3563 
3564 #ifdef Xyce_DEBUG_DEVICE
3565  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3566  {
3567  Xyce::dout() << " (*f_cx_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp)<< std::endl;
3568  }
3569 #endif
3571 
3572 
3573 #ifdef Xyce_DEBUG_DEVICE
3574  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3575  {
3576  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;
3577  }
3578 #endif
3579  (*f_bp_Equ_cx_Node_Ptr) += -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx);
3580 
3581 
3582 #ifdef Xyce_DEBUG_DEVICE
3583  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3584  {
3585  Xyce::dout() << " (*f_bp_Equ_cx_Node_Ptr) += " << -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx)<< std::endl;
3586  }
3587 #endif
3588  (*f_dt_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND);
3589 
3590 
3591 #ifdef Xyce_DEBUG_DEVICE
3592  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3593  {
3594  Xyce::dout() << " (*f_dt_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND)<< std::endl;
3595  }
3596 #endif
3598 
3599 
3600 #ifdef Xyce_DEBUG_DEVICE
3601  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3602  {
3603  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;
3604  }
3605 #endif
3607 
3608 
3609 #ifdef Xyce_DEBUG_DEVICE
3610  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3611  {
3613  }
3614 #endif
3615  (*f_dt_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei);
3616 
3617 
3618 #ifdef Xyce_DEBUG_DEVICE
3619  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3620  {
3621  Xyce::dout() << " (*f_dt_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei)<< std::endl;
3622  }
3623 #endif
3625 
3626 
3627 #ifdef Xyce_DEBUG_DEVICE
3628  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3629  {
3631  }
3632 #endif
3634 
3635 
3636 #ifdef Xyce_DEBUG_DEVICE
3637  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3638  {
3640  }
3641 #endif
3643 
3644 
3645 #ifdef Xyce_DEBUG_DEVICE
3646  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3647  {
3649  }
3650 #endif
3651  (*f_dt_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx);
3652 
3653 
3654 #ifdef Xyce_DEBUG_DEVICE
3655  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3656  {
3657  Xyce::dout() << " (*f_dt_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx)<< std::endl;
3658  }
3659 #endif
3661 
3662 
3663 #ifdef Xyce_DEBUG_DEVICE
3664  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3665  {
3667  }
3668 #endif
3669  (*f_dt_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx);
3670 
3671 
3672 #ifdef Xyce_DEBUG_DEVICE
3673  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3674  {
3675  Xyce::dout() << " (*f_dt_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx)<< std::endl;
3676  }
3677 #endif
3678 
3679 
3680  return bsuccess;
3681 }
3682 
3683 
3684 //-----------------------------------------------------------------------------
3685 // Function : Instance::loadDAEdQdx
3686 // Purpose :
3687 // Special Notes : Load the dQdx ("dynamic jacobian") matrix
3688 // Scope : public
3689 // Creator : admsXml
3690 // Creation Date :
3691 //-----------------------------------------------------------------------------
3693 {
3694  bool bsuccess = true;
3695  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
3696 
3697 #ifdef Xyce_DEBUG_DEVICE
3698  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3699  {
3700  Xyce::dout() << subsection_divider << std::endl;
3701  Xyce::dout() << "ADMSvbic::Instance::loadDAEdQdx (" << getName() << "):" << std::endl;
3702  }
3703 #endif
3705 
3706 
3707 #ifdef Xyce_DEBUG_DEVICE
3708  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3709  {
3711  }
3712 #endif
3713  (*q_bi_Equ_ei_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei);
3714 
3715 
3716 #ifdef Xyce_DEBUG_DEVICE
3717  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3718  {
3719  Xyce::dout() << " (*q_bi_Equ_ei_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei)<< std::endl;
3720  }
3721 #endif
3723 
3724 
3725 #ifdef Xyce_DEBUG_DEVICE
3726  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3727  {
3728  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;
3729  }
3730 #endif
3732 
3733 
3734 #ifdef Xyce_DEBUG_DEVICE
3735  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3736  {
3737  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;
3738  }
3739 #endif
3740  (*q_bi_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND);
3741 
3742 
3743 #ifdef Xyce_DEBUG_DEVICE
3744  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3745  {
3746  Xyce::dout() << " (*q_bi_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND)<< std::endl;
3747  }
3748 #endif
3749  (*q_ei_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND);
3750 
3751 
3752 #ifdef Xyce_DEBUG_DEVICE
3753  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3754  {
3755  Xyce::dout() << " (*q_ei_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND)<< std::endl;
3756  }
3757 #endif
3759 
3760 
3761 #ifdef Xyce_DEBUG_DEVICE
3762  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3763  {
3764  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;
3765  }
3766 #endif
3767  (*q_bx_Equ_ei_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei);
3768 
3769 
3770 #ifdef Xyce_DEBUG_DEVICE
3771  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3772  {
3773  Xyce::dout() << " (*q_bx_Equ_ei_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei)<< std::endl;
3774  }
3775 #endif
3776  (*q_ei_Equ_bx_Node_Ptr) += +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei);
3777 
3778 
3779 #ifdef Xyce_DEBUG_DEVICE
3780  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3781  {
3782  Xyce::dout() << " (*q_ei_Equ_bx_Node_Ptr) += " << +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei)<< std::endl;
3783  }
3784 #endif
3785  (*q_bx_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND);
3786 
3787 
3788 #ifdef Xyce_DEBUG_DEVICE
3789  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3790  {
3791  Xyce::dout() << " (*q_bx_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND)<< std::endl;
3792  }
3793 #endif
3794  (*q_ci_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci);
3795 
3796 
3797 #ifdef Xyce_DEBUG_DEVICE
3798  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3799  {
3800  Xyce::dout() << " (*q_ci_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci)<< std::endl;
3801  }
3802 #endif
3803  (*q_ci_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci);
3804 
3805 
3806 #ifdef Xyce_DEBUG_DEVICE
3807  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3808  {
3809  Xyce::dout() << " (*q_ci_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci)<< std::endl;
3810  }
3811 #endif
3812  (*q_ei_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci);
3813 
3814 
3815 #ifdef Xyce_DEBUG_DEVICE
3816  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3817  {
3818  Xyce::dout() << " (*q_ei_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci)<< std::endl;
3819  }
3820 #endif
3821  (*q_ci_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND);
3822 
3823 
3824 #ifdef Xyce_DEBUG_DEVICE
3825  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3826  {
3827  Xyce::dout() << " (*q_ci_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND)<< std::endl;
3828  }
3829 #endif
3830  (*q_bi_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci);
3831 
3832 
3833 #ifdef Xyce_DEBUG_DEVICE
3834  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3835  {
3836  Xyce::dout() << " (*q_bi_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci)<< std::endl;
3837  }
3838 #endif
3839  (*q_bx_Equ_bp_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp);
3840 
3841 
3842 #ifdef Xyce_DEBUG_DEVICE
3843  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3844  {
3845  Xyce::dout() << " (*q_bx_Equ_bp_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp)<< std::endl;
3846  }
3847 #endif
3848  (*q_bp_Equ_bx_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
3849 
3850 
3851 #ifdef Xyce_DEBUG_DEVICE
3852  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3853  {
3854  Xyce::dout() << " (*q_bp_Equ_bx_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3855  }
3856 #endif
3857  (*q_bp_Equ_bp_Node_Ptr) += -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
3858 
3859 
3860 #ifdef Xyce_DEBUG_DEVICE
3861  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3862  {
3863  Xyce::dout() << " (*q_bp_Equ_bp_Node_Ptr) += " << -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3864  }
3865 #endif
3866  (*q_bp_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND);
3867 
3868 
3869 #ifdef Xyce_DEBUG_DEVICE
3870  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3871  {
3872  Xyce::dout() << " (*q_bp_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND)<< std::endl;
3873  }
3874 #endif
3875  (*q_cx_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND);
3876 
3877 
3878 #ifdef Xyce_DEBUG_DEVICE
3879  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3880  {
3881  Xyce::dout() << " (*q_cx_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND)<< std::endl;
3882  }
3883 #endif
3884  (*q_c_Equ_c_Node_Ptr) += -dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c);
3885 
3886 
3887 #ifdef Xyce_DEBUG_DEVICE
3888  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3889  {
3890  Xyce::dout() << " (*q_c_Equ_c_Node_Ptr) += " << -dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c)<< std::endl;
3891  }
3892 #endif
3893  (*q_cx_Equ_cx_Node_Ptr) += -dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx);
3894 
3895 
3896 #ifdef Xyce_DEBUG_DEVICE
3897  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3898  {
3899  Xyce::dout() << " (*q_cx_Equ_cx_Node_Ptr) += " << -dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx)<< std::endl;
3900  }
3901 #endif
3902  (*q_cx_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx);
3903 
3904 
3905 #ifdef Xyce_DEBUG_DEVICE
3906  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3907  {
3908  Xyce::dout() << " (*q_cx_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx)<< std::endl;
3909  }
3910 #endif
3912 
3913 
3914 #ifdef Xyce_DEBUG_DEVICE
3915  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3916  {
3917  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;
3918  }
3919 #endif
3920  (*q_bx_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
3921 
3922 
3923 #ifdef Xyce_DEBUG_DEVICE
3924  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3925  {
3926  Xyce::dout() << " (*q_bx_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
3927  }
3928 #endif
3929  (*q_bx_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
3930 
3931 
3932 #ifdef Xyce_DEBUG_DEVICE
3933  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3934  {
3935  Xyce::dout() << " (*q_bx_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
3936  }
3937 #endif
3938  (*q_e_Equ_e_Node_Ptr) += -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e);
3939 
3940 
3941 #ifdef Xyce_DEBUG_DEVICE
3942  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3943  {
3944  Xyce::dout() << " (*q_e_Equ_e_Node_Ptr) += " << -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e)<< std::endl;
3945  }
3946 #endif
3947  (*q_bp_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3948 
3949 
3950 #ifdef Xyce_DEBUG_DEVICE
3951  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3952  {
3953  Xyce::dout() << " (*q_bp_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3954  }
3955 #endif
3956  (*q_bp_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3957 
3958 
3959 #ifdef Xyce_DEBUG_DEVICE
3960  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3961  {
3962  Xyce::dout() << " (*q_bp_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3963  }
3964 #endif
3965  (*q_bi_Equ_cx_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx);
3966 
3967 
3968 #ifdef Xyce_DEBUG_DEVICE
3969  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3970  {
3971  Xyce::dout() << " (*q_bi_Equ_cx_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx)<< std::endl;
3972  }
3973 #endif
3974  (*q_b_Equ_e_Node_Ptr) += -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e);
3975 
3976 
3977 #ifdef Xyce_DEBUG_DEVICE
3978  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3979  {
3980  Xyce::dout() << " (*q_b_Equ_e_Node_Ptr) += " << -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e)<< std::endl;
3981  }
3982 #endif
3983  (*q_e_Equ_b_Node_Ptr) += +dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e);
3984 
3985 
3986 #ifdef Xyce_DEBUG_DEVICE
3987  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3988  {
3989  Xyce::dout() << " (*q_e_Equ_b_Node_Ptr) += " << +dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e)<< std::endl;
3990  }
3991 #endif
3992  (*q_b_Equ_c_Node_Ptr) += -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c);
3993 
3994 
3995 #ifdef Xyce_DEBUG_DEVICE
3996  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3997  {
3998  Xyce::dout() << " (*q_b_Equ_c_Node_Ptr) += " << -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c)<< std::endl;
3999  }
4000 #endif
4001  (*q_c_Equ_b_Node_Ptr) += +dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c);
4002 
4003 
4004 #ifdef Xyce_DEBUG_DEVICE
4005  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
4006  {
4007  Xyce::dout() << " (*q_c_Equ_b_Node_Ptr) += " << +dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c)<< std::endl;
4008  }
4009 #endif
4010  (*q_dt_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND);
4011 
4012 
4013 #ifdef Xyce_DEBUG_DEVICE
4014  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
4015  {
4016  Xyce::dout() << " (*q_dt_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND)<< std::endl;
4017  }
4018 #endif
4019 
4020 
4021  return bsuccess;
4022 }
4023 
4024 //-----------------------------------------------------------------------------
4025 // Function : Instance::updateTemperature
4026 // Purpose : Set temperature and update any parameters that depend on it
4027 // Special Notes : In Xyce ADMS, we'll simply copy the temperature, which is
4028 // in Kelvin, to our "admsTemperature" variable, which needs
4029 // to be in Celsius.
4030 // Scope : public
4031 // Creator : admsXml
4032 // Creation Date :
4033 //-----------------------------------------------------------------------------
4034 bool Instance::updateTemperature(const double & temperatureTemp)
4035 {
4036 
4037  admsTemperature = temperatureTemp;
4038  adms_vt_nom = adms_vt(temperatureTemp);
4039 
4040  return true;
4041 }
4042 
4043 // Class Model
4044 //-----------------------------------------------------------------------------
4045 // Function : Model::processParams
4046 // Purpose :
4047 // Special Notes :
4048 // Scope : public
4049 // Creator : admsXml
4050 // Creation Date :
4051 //-----------------------------------------------------------------------------
4053 {
4054 
4055  // Now we need to check that any parameters are within their ranges as
4056  // specified in the verilog:
4057 
4058  // Parameter RCX : [ 0.0, (+inf) [
4059  if ( (!((RCX >=0.0))) )
4060  {
4061  UserError0(*this) << "ADMSvbic: Parameter RCX value " << RCX << " out of range [ 0.0, (+inf) [";
4062  }
4063 
4064  // Parameter RCI : [ 0.0, (+inf) [
4065  if ( (!((RCI >=0.0))) )
4066  {
4067  UserError0(*this) << "ADMSvbic: Parameter RCI value " << RCI << " out of range [ 0.0, (+inf) [";
4068  }
4069 
4070  // Parameter VO : [ 0.0, (+inf) [
4071  if ( (!((VO >=0.0))) )
4072  {
4073  UserError0(*this) << "ADMSvbic: Parameter VO value " << VO << " out of range [ 0.0, (+inf) [";
4074  }
4075 
4076  // Parameter GAMM : [ 0.0, (+inf) [
4077  if ( (!((GAMM >=0.0))) )
4078  {
4079  UserError0(*this) << "ADMSvbic: Parameter GAMM value " << GAMM << " out of range [ 0.0, (+inf) [";
4080  }
4081 
4082  // Parameter HRCF : [ 0.0, (+inf) [
4083  if ( (!((HRCF >=0.0))) )
4084  {
4085  UserError0(*this) << "ADMSvbic: Parameter HRCF value " << HRCF << " out of range [ 0.0, (+inf) [";
4086  }
4087 
4088  // Parameter RBX : [ 0.0, (+inf) [
4089  if ( (!((RBX >=0.0))) )
4090  {
4091  UserError0(*this) << "ADMSvbic: Parameter RBX value " << RBX << " out of range [ 0.0, (+inf) [";
4092  }
4093 
4094  // Parameter RBI : [ 0.0, (+inf) [
4095  if ( (!((RBI >=0.0))) )
4096  {
4097  UserError0(*this) << "ADMSvbic: Parameter RBI value " << RBI << " out of range [ 0.0, (+inf) [";
4098  }
4099 
4100  // Parameter RE : [ 0.0, (+inf) [
4101  if ( (!((RE >=0.0))) )
4102  {
4103  UserError0(*this) << "ADMSvbic: Parameter RE value " << RE << " out of range [ 0.0, (+inf) [";
4104  }
4105 
4106  // Parameter RS : [ 0.0, (+inf) [
4107  if ( (!((RS >=0.0))) )
4108  {
4109  UserError0(*this) << "ADMSvbic: Parameter RS value " << RS << " out of range [ 0.0, (+inf) [";
4110  }
4111 
4112  // Parameter RBP : [ 0.0, (+inf) [
4113  if ( (!((RBP >=0.0))) )
4114  {
4115  UserError0(*this) << "ADMSvbic: Parameter RBP value " << RBP << " out of range [ 0.0, (+inf) [";
4116  }
4117 
4118  // Parameter IS : ] 0.0, (+inf) [
4119  if ( (!((IS >0.0))) )
4120  {
4121  UserError0(*this) << "ADMSvbic: Parameter IS value " << IS << " out of range ] 0.0, (+inf) [";
4122  }
4123 
4124  // Parameter NF : ] 0.0, (+inf) [
4125  if ( (!((NF >0.0))) )
4126  {
4127  UserError0(*this) << "ADMSvbic: Parameter NF value " << NF << " out of range ] 0.0, (+inf) [";
4128  }
4129 
4130  // Parameter NR : ] 0.0, (+inf) [
4131  if ( (!((NR >0.0))) )
4132  {
4133  UserError0(*this) << "ADMSvbic: Parameter NR value " << NR << " out of range ] 0.0, (+inf) [";
4134  }
4135 
4136  // Parameter FC : [ 0.0, 1.0 [
4137  if ( (!((FC >=0.0 && FC <1.0 ))) )
4138  {
4139  UserError0(*this) << "ADMSvbic: Parameter FC value " << FC << " out of range [ 0.0, 1.0 [";
4140  }
4141 
4142  // Parameter CBEO : [ 0.0, (+inf) [
4143  if ( (!((CBEO >=0.0))) )
4144  {
4145  UserError0(*this) << "ADMSvbic: Parameter CBEO value " << CBEO << " out of range [ 0.0, (+inf) [";
4146  }
4147 
4148  // Parameter CJE : [ 0.0, (+inf) [
4149  if ( (!((CJE >=0.0))) )
4150  {
4151  UserError0(*this) << "ADMSvbic: Parameter CJE value " << CJE << " out of range [ 0.0, (+inf) [";
4152  }
4153 
4154  // Parameter PE : ] 0.0, (+inf) [
4155  if ( (!((PE >0.0))) )
4156  {
4157  UserError0(*this) << "ADMSvbic: Parameter PE value " << PE << " out of range ] 0.0, (+inf) [";
4158  }
4159 
4160  // Parameter ME : ] 0.0, 1.0 ]
4161  if ( (!((ME >0.0 && ME <=1.0 ))) )
4162  {
4163  UserError0(*this) << "ADMSvbic: Parameter ME value " << ME << " out of range ] 0.0, 1.0 ]";
4164  }
4165 
4166  // Parameter CBCO : [ 0.0, (+inf) [
4167  if ( (!((CBCO >=0.0))) )
4168  {
4169  UserError0(*this) << "ADMSvbic: Parameter CBCO value " << CBCO << " out of range [ 0.0, (+inf) [";
4170  }
4171 
4172  // Parameter CJC : [ 0.0, (+inf) [
4173  if ( (!((CJC >=0.0))) )
4174  {
4175  UserError0(*this) << "ADMSvbic: Parameter CJC value " << CJC << " out of range [ 0.0, (+inf) [";
4176  }
4177 
4178  // Parameter QCO : [ 0.0, (+inf) [
4179  if ( (!((QCO >=0.0))) )
4180  {
4181  UserError0(*this) << "ADMSvbic: Parameter QCO value " << QCO << " out of range [ 0.0, (+inf) [";
4182  }
4183 
4184  // Parameter CJEP : [ 0.0, (+inf) [
4185  if ( (!((CJEP >=0.0))) )
4186  {
4187  UserError0(*this) << "ADMSvbic: Parameter CJEP value " << CJEP << " out of range [ 0.0, (+inf) [";
4188  }
4189 
4190  // Parameter PC : ] 0.0, (+inf) [
4191  if ( (!((PC >0.0))) )
4192  {
4193  UserError0(*this) << "ADMSvbic: Parameter PC value " << PC << " out of range ] 0.0, (+inf) [";
4194  }
4195 
4196  // Parameter MC : ] 0.0, 1.0 ]
4197  if ( (!((MC >0.0 && MC <=1.0 ))) )
4198  {
4199  UserError0(*this) << "ADMSvbic: Parameter MC value " << MC << " out of range ] 0.0, 1.0 ]";
4200  }
4201 
4202  // Parameter CJCP : [ 0.0, (+inf) [
4203  if ( (!((CJCP >=0.0))) )
4204  {
4205  UserError0(*this) << "ADMSvbic: Parameter CJCP value " << CJCP << " out of range [ 0.0, (+inf) [";
4206  }
4207 
4208  // Parameter PS : ] 0.0, (+inf) [
4209  if ( (!((PS >0.0))) )
4210  {
4211  UserError0(*this) << "ADMSvbic: Parameter PS value " << PS << " out of range ] 0.0, (+inf) [";
4212  }
4213 
4214  // Parameter MS : ] 0.0, 1.0 ]
4215  if ( (!((MS >0.0 && MS <=1.0 ))) )
4216  {
4217  UserError0(*this) << "ADMSvbic: Parameter MS value " << MS << " out of range ] 0.0, 1.0 ]";
4218  }
4219 
4220  // Parameter IBEI : ] 0.0, (+inf) [
4221  if ( (!((IBEI >0.0))) )
4222  {
4223  UserError0(*this) << "ADMSvbic: Parameter IBEI value " << IBEI << " out of range ] 0.0, (+inf) [";
4224  }
4225 
4226  // Parameter WBE : [ 0.0, 1.0 ]
4227  if ( (!((WBE >=0.0 && WBE <=1.0 ))) )
4228  {
4229  UserError0(*this) << "ADMSvbic: Parameter WBE value " << WBE << " out of range [ 0.0, 1.0 ]";
4230  }
4231 
4232  // Parameter NEI : ] 0.0, (+inf) [
4233  if ( (!((NEI >0.0))) )
4234  {
4235  UserError0(*this) << "ADMSvbic: Parameter NEI value " << NEI << " out of range ] 0.0, (+inf) [";
4236  }
4237 
4238  // Parameter IBEN : [ 0.0, (+inf) [
4239  if ( (!((IBEN >=0.0))) )
4240  {
4241  UserError0(*this) << "ADMSvbic: Parameter IBEN value " << IBEN << " out of range [ 0.0, (+inf) [";
4242  }
4243 
4244  // Parameter NEN : ] 0.0, (+inf) [
4245  if ( (!((NEN >0.0))) )
4246  {
4247  UserError0(*this) << "ADMSvbic: Parameter NEN value " << NEN << " out of range ] 0.0, (+inf) [";
4248  }
4249 
4250  // Parameter IBCI : ] 0.0, (+inf) [
4251  if ( (!((IBCI >0.0))) )
4252  {
4253  UserError0(*this) << "ADMSvbic: Parameter IBCI value " << IBCI << " out of range ] 0.0, (+inf) [";
4254  }
4255 
4256  // Parameter NCI : ] 0.0, (+inf) [
4257  if ( (!((NCI >0.0))) )
4258  {
4259  UserError0(*this) << "ADMSvbic: Parameter NCI value " << NCI << " out of range ] 0.0, (+inf) [";
4260  }
4261 
4262  // Parameter IBCN : [ 0.0, (+inf) [
4263  if ( (!((IBCN >=0.0))) )
4264  {
4265  UserError0(*this) << "ADMSvbic: Parameter IBCN value " << IBCN << " out of range [ 0.0, (+inf) [";
4266  }
4267 
4268  // Parameter NCN : ] 0.0, (+inf) [
4269  if ( (!((NCN >0.0))) )
4270  {
4271  UserError0(*this) << "ADMSvbic: Parameter NCN value " << NCN << " out of range ] 0.0, (+inf) [";
4272  }
4273 
4274  // Parameter AVC1 : [ 0.0, (+inf) [
4275  if ( (!((AVC1 >=0.0))) )
4276  {
4277  UserError0(*this) << "ADMSvbic: Parameter AVC1 value " << AVC1 << " out of range [ 0.0, (+inf) [";
4278  }
4279 
4280  // Parameter AVC2 : [ 0.0, (+inf) [
4281  if ( (!((AVC2 >=0.0))) )
4282  {
4283  UserError0(*this) << "ADMSvbic: Parameter AVC2 value " << AVC2 << " out of range [ 0.0, (+inf) [";
4284  }
4285 
4286  // Parameter ISP : [ 0.0, (+inf) [
4287  if ( (!((ISP >=0.0))) )
4288  {
4289  UserError0(*this) << "ADMSvbic: Parameter ISP value " << ISP << " out of range [ 0.0, (+inf) [";
4290  }
4291 
4292  // Parameter WSP : [ 0.0, 1.0 ]
4293  if ( (!((WSP >=0.0 && WSP <=1.0 ))) )
4294  {
4295  UserError0(*this) << "ADMSvbic: Parameter WSP value " << WSP << " out of range [ 0.0, 1.0 ]";
4296  }
4297 
4298  // Parameter NFP : ] 0.0, (+inf) [
4299  if ( (!((NFP >0.0))) )
4300  {
4301  UserError0(*this) << "ADMSvbic: Parameter NFP value " << NFP << " out of range ] 0.0, (+inf) [";
4302  }
4303 
4304  // Parameter IBEIP : [ 0.0, (+inf) [
4305  if ( (!((IBEIP >=0.0))) )
4306  {
4307  UserError0(*this) << "ADMSvbic: Parameter IBEIP value " << IBEIP << " out of range [ 0.0, (+inf) [";
4308  }
4309 
4310  // Parameter IBENP : [ 0.0, (+inf) [
4311  if ( (!((IBENP >=0.0))) )
4312  {
4313  UserError0(*this) << "ADMSvbic: Parameter IBENP value " << IBENP << " out of range [ 0.0, (+inf) [";
4314  }
4315 
4316  // Parameter IBCIP : [ 0.0, (+inf) [
4317  if ( (!((IBCIP >=0.0))) )
4318  {
4319  UserError0(*this) << "ADMSvbic: Parameter IBCIP value " << IBCIP << " out of range [ 0.0, (+inf) [";
4320  }
4321 
4322  // Parameter NCIP : ] 0.0, (+inf) [
4323  if ( (!((NCIP >0.0))) )
4324  {
4325  UserError0(*this) << "ADMSvbic: Parameter NCIP value " << NCIP << " out of range ] 0.0, (+inf) [";
4326  }
4327 
4328  // Parameter IBCNP : [ 0.0, (+inf) [
4329  if ( (!((IBCNP >=0.0))) )
4330  {
4331  UserError0(*this) << "ADMSvbic: Parameter IBCNP value " << IBCNP << " out of range [ 0.0, (+inf) [";
4332  }
4333 
4334  // Parameter NCNP : ] 0.0, (+inf) [
4335  if ( (!((NCNP >0.0))) )
4336  {
4337  UserError0(*this) << "ADMSvbic: Parameter NCNP value " << NCNP << " out of range ] 0.0, (+inf) [";
4338  }
4339 
4340  // Parameter VEF : [ 0.0, (+inf) [
4341  if ( (!((VEF >=0.0))) )
4342  {
4343  UserError0(*this) << "ADMSvbic: Parameter VEF value " << VEF << " out of range [ 0.0, (+inf) [";
4344  }
4345 
4346  // Parameter VER : [ 0.0, (+inf) [
4347  if ( (!((VER >=0.0))) )
4348  {
4349  UserError0(*this) << "ADMSvbic: Parameter VER value " << VER << " out of range [ 0.0, (+inf) [";
4350  }
4351 
4352  // Parameter IKF : [ 0.0, (+inf) [
4353  if ( (!((IKF >=0.0))) )
4354  {
4355  UserError0(*this) << "ADMSvbic: Parameter IKF value " << IKF << " out of range [ 0.0, (+inf) [";
4356  }
4357 
4358  // Parameter IKR : [ 0.0, (+inf) [
4359  if ( (!((IKR >=0.0))) )
4360  {
4361  UserError0(*this) << "ADMSvbic: Parameter IKR value " << IKR << " out of range [ 0.0, (+inf) [";
4362  }
4363 
4364  // Parameter IKP : [ 0.0, (+inf) [
4365  if ( (!((IKP >=0.0))) )
4366  {
4367  UserError0(*this) << "ADMSvbic: Parameter IKP value " << IKP << " out of range [ 0.0, (+inf) [";
4368  }
4369 
4370  // Parameter TF : [ 0.0, (+inf) [
4371  if ( (!((TF >=0.0))) )
4372  {
4373  UserError0(*this) << "ADMSvbic: Parameter TF value " << TF << " out of range [ 0.0, (+inf) [";
4374  }
4375 
4376  // Parameter QTF : [ 0.0, (+inf) [
4377  if ( (!((QTF >=0.0))) )
4378  {
4379  UserError0(*this) << "ADMSvbic: Parameter QTF value " << QTF << " out of range [ 0.0, (+inf) [";
4380  }
4381 
4382  // Parameter XTF : [ 0.0, (+inf) [
4383  if ( (!((XTF >=0.0))) )
4384  {
4385  UserError0(*this) << "ADMSvbic: Parameter XTF value " << XTF << " out of range [ 0.0, (+inf) [";
4386  }
4387 
4388  // Parameter VTF : [ 0.0, (+inf) [
4389  if ( (!((VTF >=0.0))) )
4390  {
4391  UserError0(*this) << "ADMSvbic: Parameter VTF value " << VTF << " out of range [ 0.0, (+inf) [";
4392  }
4393 
4394  // Parameter ITF : [ 0.0, (+inf) [
4395  if ( (!((ITF >=0.0))) )
4396  {
4397  UserError0(*this) << "ADMSvbic: Parameter ITF value " << ITF << " out of range [ 0.0, (+inf) [";
4398  }
4399 
4400  // Parameter TR : [ 0.0, (+inf) [
4401  if ( (!((TR >=0.0))) )
4402  {
4403  UserError0(*this) << "ADMSvbic: Parameter TR value " << TR << " out of range [ 0.0, (+inf) [";
4404  }
4405 
4406  // Parameter TD : [ 0.0, (+inf) [
4407  if ( (!((TD >=0.0))) )
4408  {
4409  UserError0(*this) << "ADMSvbic: Parameter TD value " << TD << " out of range [ 0.0, (+inf) [";
4410  }
4411 
4412  // Parameter KFN : [ 0.0, (+inf) [
4413  if ( (!((KFN >=0.0))) )
4414  {
4415  UserError0(*this) << "ADMSvbic: Parameter KFN value " << KFN << " out of range [ 0.0, (+inf) [";
4416  }
4417 
4418  // Parameter AFN : ] 0.0, (+inf) [
4419  if ( (!((AFN >0.0))) )
4420  {
4421  UserError0(*this) << "ADMSvbic: Parameter AFN value " << AFN << " out of range ] 0.0, (+inf) [";
4422  }
4423 
4424  // Parameter BFN : ] 0.0, (+inf) [
4425  if ( (!((BFN >0.0))) )
4426  {
4427  UserError0(*this) << "ADMSvbic: Parameter BFN value " << BFN << " out of range ] 0.0, (+inf) [";
4428  }
4429 
4430  // Parameter RTH : [ 0.0, (+inf) [
4431  if ( (!((RTH >=0.0))) )
4432  {
4433  UserError0(*this) << "ADMSvbic: Parameter RTH value " << RTH << " out of range [ 0.0, (+inf) [";
4434  }
4435 
4436  // Parameter CTH : [ 0.0, (+inf) [
4437  if ( (!((CTH >=0.0))) )
4438  {
4439  UserError0(*this) << "ADMSvbic: Parameter CTH value " << CTH << " out of range [ 0.0, (+inf) [";
4440  }
4441 
4442  // Parameter VRT : [ 0.0, (+inf) [
4443  if ( (!((VRT >=0.0))) )
4444  {
4445  UserError0(*this) << "ADMSvbic: Parameter VRT value " << VRT << " out of range [ 0.0, (+inf) [";
4446  }
4447 
4448  // Parameter ART : ] 0.0, (+inf) [
4449  if ( (!((ART >0.0))) )
4450  {
4451  UserError0(*this) << "ADMSvbic: Parameter ART value " << ART << " out of range ] 0.0, (+inf) [";
4452  }
4453 
4454  // Parameter CCSO : [ 0.0, (+inf) [
4455  if ( (!((CCSO >=0.0))) )
4456  {
4457  UserError0(*this) << "ADMSvbic: Parameter CCSO value " << CCSO << " out of range [ 0.0, (+inf) [";
4458  }
4459 
4460  // Parameter NKF : ] 0.0, (+inf) [
4461  if ( (!((NKF >0.0))) )
4462  {
4463  UserError0(*this) << "ADMSvbic: Parameter NKF value " << NKF << " out of range ] 0.0, (+inf) [";
4464  }
4465 
4466  // Parameter ISRR : ] 0.0, (+inf) [
4467  if ( (!((ISRR >0.0))) )
4468  {
4469  UserError0(*this) << "ADMSvbic: Parameter ISRR value " << ISRR << " out of range ] 0.0, (+inf) [";
4470  }
4471 
4472  // Parameter NBBE : ] 0.0, (+inf) [
4473  if ( (!((NBBE >0.0))) )
4474  {
4475  UserError0(*this) << "ADMSvbic: Parameter NBBE value " << NBBE << " out of range ] 0.0, (+inf) [";
4476  }
4477 
4478  // Parameter dtype : [ (-1), 1 ][ 0, 0 ]
4479  if ( (!((dtype >=(-1) && dtype <=1 )) || (dtype >=0 && dtype <=0 )) )
4480  {
4481  UserError0(*this) << "ADMSvbic: Parameter dtype value " << dtype << " out of range [ (-1), 1 ] or in excluded range [ 0, 0 ]";
4482  }
4483 
4484 
4485  // and of course, this routine is where we should put the initial_model
4486  // stuff
4487 
4488 
4489  return true;
4490 }
4491 //----------------------------------------------------------------------------
4492 // Function : Model::processInstanceParams
4493 // Purpose :
4494 // Special Notes :
4495 // Scope : public
4496 // Creator :
4497 // Creation Date :
4498 //----------------------------------------------------------------------------
4500 {
4501 
4502  std::vector<Instance*>::iterator iter;
4503  std::vector<Instance*>::iterator first = instanceContainer.begin();
4504  std::vector<Instance*>::iterator last = instanceContainer.end();
4505 
4506  for (iter=first; iter!=last; ++iter)
4507  {
4508  (*iter)->processParams();
4509  }
4510 
4511  return true;
4512 }
4513 
4514 //-----------------------------------------------------------------------------
4515 // Function : Model::Model
4516 // Purpose : model block constructor
4517 // Special Notes :
4518 // Scope : public
4519 // Creator :
4520 // Creation Date :
4521 //-----------------------------------------------------------------------------
4523  const Configuration & configuration,
4524  const ModelBlock & model_block,
4525  const FactoryBlock & factory_block)
4526  : DeviceModel(model_block, configuration.getModelParameters(), factory_block),
4527  TNOM(27.0),
4528  RCX(0.0),
4529  RCI(0.0),
4530  VO(0.0),
4531  GAMM(0.0),
4532  HRCF(0.0),
4533  RBX(0.0),
4534  RBI(0.0),
4535  RE(0.0),
4536  RS(0.0),
4537  RBP(0.0),
4538  IS(1.0e-16),
4539  NF(1.0),
4540  NR(1.0),
4541  FC(0.9),
4542  CBEO(0.0),
4543  CJE(0.0),
4544  PE(0.75),
4545  ME(0.33),
4546  AJE((-0.5)),
4547  CBCO(0.0),
4548  CJC(0.0),
4549  QCO(0.0),
4550  CJEP(0.0),
4551  PC(0.75),
4552  MC(0.33),
4553  AJC((-0.5)),
4554  CJCP(0.0),
4555  PS(0.75),
4556  MS(0.33),
4557  AJS((-0.5)),
4558  IBEI(1.0e-18),
4559  WBE(1.0),
4560  NEI(1.0),
4561  IBEN(0.0),
4562  NEN(2.0),
4563  IBCI(1.0e-16),
4564  NCI(1.0),
4565  IBCN(0.0),
4566  NCN(2.0),
4567  AVC1(0.0),
4568  AVC2(0.0),
4569  ISP(0.0),
4570  WSP(1.0),
4571  NFP(1.0),
4572  IBEIP(0.0),
4573  IBENP(0.0),
4574  IBCIP(0.0),
4575  NCIP(1.0),
4576  IBCNP(0.0),
4577  NCNP(2.0),
4578  VEF(0.0),
4579  VER(0.0),
4580  IKF(0.0),
4581  IKR(0.0),
4582  IKP(0.0),
4583  TF(0.0),
4584  QTF(0.0),
4585  XTF(0.0),
4586  VTF(0.0),
4587  ITF(0.0),
4588  TR(0.0),
4589  TD(0.0),
4590  KFN(0.0),
4591  AFN(1.0),
4592  BFN(1.0),
4593  XRE(0),
4594  XRBI(0),
4595  XRCI(0),
4596  XRS(0),
4597  XVO(0),
4598  EA(1.12),
4599  EAIE(1.12),
4600  EAIC(1.12),
4601  EAIS(1.12),
4602  EANE(1.12),
4603  EANC(1.12),
4604  EANS(1.12),
4605  XIS(3.0),
4606  XII(3.0),
4607  XIN(3.0),
4608  TNF(0.0),
4609  TAVC(0.0),
4610  RTH(0.0),
4611  CTH(0.0),
4612  VRT(0.0),
4613  ART(0.1),
4614  CCSO(0.0),
4615  QBM(0.0),
4616  NKF(0.5),
4617  XIKF(0),
4618  XRCX(0),
4619  XRBX(0),
4620  XRBP(0),
4621  ISRR(1.0),
4622  XISR(0.0),
4623  DEAR(0.0),
4624  EAP(1.12),
4625  VBBE(0.0),
4626  NBBE(1.0),
4627  IBBE(1.0e-6),
4628  TVBBE1(0.0),
4629  TVBBE2(0.0),
4630  TNBBE(0.0),
4631  EBBE(0.0),
4632  DTEMP(0.0),
4633  VERS(1.2),
4634  VREV(0.0),
4635  dtype(1)
4636 {
4637  // Set params to constant default values (from parTable):
4638  setDefaultParams();
4639 
4640  // Set params according to .model line and constant defaults from metadata:
4641  setModParams(model_block.params);
4642 
4643  // Set any non-constant parameter defaults:
4644  // Set any parameters that were not given and whose defaults depend on other
4645  // parameters:
4646 
4647 
4648  if (!given("XYCEADMSMODTEMP"))
4649  admsModTemp=getDeviceOptions().temp.getImmutableValue<double>();
4650 
4651  // Fix the TNOM parameter that has "helpfully" been converted to Kelvin
4652  // by the DeviceEntity class
4653 
4654  if (given("TNOM"))
4655  TNOM -= CONSTCtoK;
4656 
4657  // Calculate any parameters specified as expressions:
4658 
4660 
4661  // calculate dependent (ie computed) params and check for errors:
4662  //Manually inserted these two lines:
4663  if (getType() == "pnp" || getType() == "PNP")
4664  dtype = -1;
4665 
4666  processParams();
4667 }
4668 
4669 //-----------------------------------------------------------------------------
4670 // Function : Model::~Model
4671 // Purpose : destructor
4672 // Special Notes :
4673 // Scope : public
4674 // Creator :
4675 // Creation Date :
4676 //-----------------------------------------------------------------------------
4678 {
4679  std::vector<Instance*>::iterator iterI;
4680  std::vector<Instance*>::iterator firstI = instanceContainer.begin ();
4681  std::vector<Instance*>::iterator lastI = instanceContainer.end ();
4682 
4683  // loop over instances:
4684  for (iterI = firstI; iterI != lastI; ++iterI)
4685  {
4686  delete (*iterI);
4687  }
4688 }
4689 
4690 //-----------------------------------------------------------------------------
4691 // Function : Model::printOutInstances
4692 // Purpose : debugging tool.
4693 // Special Notes :
4694 // Scope : public
4695 // Creator :
4696 // Creation Date :
4697 //-----------------------------------------------------------------------------
4698 std::ostream &Model::printOutInstances(std::ostream &os) const
4699 {
4700  std::vector<Instance*>::const_iterator iter;
4701  std::vector<Instance*>::const_iterator first = instanceContainer.begin();
4702  std::vector<Instance*>::const_iterator last = instanceContainer.end();
4703 
4704  int i;
4705  os << std::endl;
4706  os << " name model name Parameters" << std::endl;
4707  for (i=0, iter=first; iter!=last; ++iter, ++i)
4708  {
4709  os << " " << i << ": " << (*iter)->getName() << " ";
4710  os << getName();
4711 
4712  os << std::endl;
4713  os << "M = " << (*iter)->M << std::endl;
4714  os << std::endl;
4715  }
4716 
4717  os << std::endl;
4718 
4719  return os;
4720 }
4721 
4722 //-----------------------------------------------------------------------------
4723 // Function : Model::forEachInstance
4724 // Purpose :
4725 // Special Notes :
4726 // Scope : public
4727 // Creator : David Baur
4728 // Creation Date : 2/4/2014
4729 //-----------------------------------------------------------------------------
4730 /// Apply a device instance "op" to all instances associated with this
4731 /// model
4732 ///
4733 /// @param[in] op Operator to apply to all instances.
4734 ///
4735 ///
4736 void Model::forEachInstance(DeviceInstanceOp &op) const /* override */
4737 {
4738  for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
4739  op(*it);
4740 }
4741 
4742 Device *Traits::factory(const Configuration &configuration, const FactoryBlock &factory_block)
4743 {
4744  return new DeviceMaster<Traits>(configuration, factory_block, factory_block.solverState_, factory_block.deviceOptions_);
4745 }
4746 
4748 {
4750  .registerDevice("q", 10)
4751  .registerModelType("npn", 10)
4752  .registerModelType("pnp", 10);
4753 }
4754 
4755 
4756 
4757 } // namespace ADMSvbic
4758 } // namespace Device
4759 } // namespace Xyce