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 : Mon, 02 Jun 2014 11:31:29
38 //
39 // Revision Information:
40 // ---------------------
41 //
42 // Revision Number: $Revision: 1.74 $
43 //
44 // Revision Date : $Date: 2014/06/02 17:46:47 $
45 //
46 // Current Owner : $Author: tvrusso $
47 //-------------------------------------------------------------------------
48 
49 #include <Xyce_config.h>
50 #include <N_DEV_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  if (intNameMap.empty())
1139  {
1141  {
1143  }
1144 
1145  if (!externalNodeMode)
1146  {
1148  }
1149 
1151  {
1153  }
1154 
1155  if (!externalNodeMode)
1156  {
1158  }
1159 
1161  {
1163  }
1165  // End manually modified code
1166  }
1167  return intNameMap;
1168 }
1169 
1170 //-----------------------------------------------------------------------------
1171 // Function : Instance::registerStateLIDs
1172 // Purpose :
1173 // Special Notes :
1174 // Scope : public
1175 // Creator : admsXml
1176 // Creation Date :
1177 //-----------------------------------------------------------------------------
1178 void Instance::registerStateLIDs( const std::vector<int> & staLIDVecRef)
1179 {
1180  AssertLIDs(staLIDVecRef.size() == numStateVars);
1181 
1182  int numSta = staLIDVecRef.size();
1183  if (numSta > 0)
1184  {
1185  int i=0;
1186  staLIDVec = staLIDVecRef;
1187 
1195  }
1196 }
1197 
1198 //-----------------------------------------------------------------------------
1199 // Function : Instance::jacobianStamp
1200 // Purpose :
1201 // Special Notes : In initial version, we won't support mapping away nodes
1202 // Scope : public
1203 // Creator : admsXml
1204 // Creation Date :
1205 //-----------------------------------------------------------------------------
1206 const std::vector< std::vector<int> > & Instance::jacobianStamp() const
1207 {
1208  return jacStamp;
1209 }
1210 
1211 //-----------------------------------------------------------------------------
1212 // Function : Instance::registerJacLIDs
1213 // Purpose : Create Offset variables used for referencing jacobian
1214 // elements
1215 // Special Notes :
1216 // Scope : public
1217 // Creator : admsXml
1218 // Creation Date :
1219 //-----------------------------------------------------------------------------
1220 void Instance::registerJacLIDs( const std::vector< std::vector<int> > & jacLIDVec)
1221 {
1223  std::vector<int> & map=jacMap;
1224  std::vector< std::vector<int> > & map2=jacMap2;
1225 
1226 
1227  // do nothing, we won't use the jac lids anymore, we'll use pointers
1228 
1229 }
1230 
1231 //-----------------------------------------------------------------------------
1232 // Function : Instance::setupPointers
1233 // Purpose : Create pointer variables used for referencing jacobian
1234 // elements
1235 // Special Notes :
1236 // Scope : public
1237 // Creator : admsXml
1238 // Creation Date :
1239 //-----------------------------------------------------------------------------
1241 {
1242 
1243  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
1244  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
1245  f_c_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_dt);
1246  q_c_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_dt);
1247  f_c_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_c);
1248  q_c_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_c);
1249  f_c_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_cx);
1250  q_c_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_cx);
1251  f_c_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_c,li_b);
1252  q_c_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_c,li_b);
1253  f_b_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_dt);
1254  q_b_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_dt);
1255  f_b_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_b);
1256  q_b_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_b);
1257  f_b_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_bx);
1258  q_b_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_bx);
1259  f_b_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_e);
1260  q_b_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_e);
1261  f_b_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_b,li_c);
1262  q_b_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_b,li_c);
1263  f_e_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_dt);
1264  q_e_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_dt);
1265  f_e_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_e);
1266  q_e_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_e);
1267  f_e_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_ei);
1268  q_e_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_ei);
1269  f_e_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_e,li_b);
1270  q_e_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_e,li_b);
1271  f_dt_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_dt);
1272  q_dt_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_dt);
1273  f_dt_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bp);
1274  q_dt_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bp);
1275  f_dt_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_cx);
1276  q_dt_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_cx);
1277  f_dt_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_e);
1278  q_dt_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_e);
1279  f_dt_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_ei);
1280  q_dt_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_ei);
1281  f_dt_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bx);
1282  q_dt_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bx);
1283  f_dt_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_bi);
1284  q_dt_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_bi);
1285  f_dt_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_b);
1286  q_dt_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_b);
1287  f_dt_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_ci);
1288  q_dt_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_ci);
1289  f_dt_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_dt,li_c);
1290  q_dt_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_dt,li_c);
1291  f_cx_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_dt);
1292  q_cx_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_dt);
1293  f_cx_Equ_c_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_c);
1294  q_cx_Equ_c_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_c);
1295  f_cx_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_cx);
1296  q_cx_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_cx);
1297  f_cx_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bi);
1298  q_cx_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bi);
1299  f_cx_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_ci);
1300  q_cx_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_ci);
1301  f_cx_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bx);
1302  q_cx_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bx);
1303  f_cx_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_cx,li_bp);
1304  q_cx_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_cx,li_bp);
1305  f_ci_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_bi);
1306  q_ci_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_bi);
1307  f_ci_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_ci);
1308  q_ci_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_ci);
1309  f_ci_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_ei);
1310  q_ci_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_ei);
1311  f_ci_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_dt);
1312  q_ci_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_dt);
1313  f_ci_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ci,li_cx);
1314  q_ci_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ci,li_cx);
1315  f_bx_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bx);
1316  q_bx_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bx);
1317  f_bx_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_ei);
1318  q_bx_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_ei);
1319  f_bx_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_dt);
1320  q_bx_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_dt);
1321  f_bx_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bp);
1322  q_bx_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bp);
1323  f_bx_Equ_b_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_b);
1324  q_bx_Equ_b_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_b);
1325  f_bx_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_bi);
1326  q_bx_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_bi);
1327  f_bx_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bx,li_ci);
1328  q_bx_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bx,li_ci);
1329  f_bi_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_bi);
1330  q_bi_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_bi);
1331  f_bi_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_ei);
1332  q_bi_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_ei);
1333  f_bi_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_dt);
1334  q_bi_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_dt);
1335  f_bi_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_ci);
1336  q_bi_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_ci);
1337  f_bi_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_bx);
1338  q_bi_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_bx);
1339  f_bi_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bi,li_cx);
1340  q_bi_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bi,li_cx);
1341  f_ei_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_bi);
1342  q_ei_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_bi);
1343  f_ei_Equ_ei_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_ei);
1344  q_ei_Equ_ei_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_ei);
1345  f_ei_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_dt);
1346  q_ei_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_dt);
1347  f_ei_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_bx);
1348  q_ei_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_bx);
1349  f_ei_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_ci);
1350  q_ei_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_ci);
1351  f_ei_Equ_e_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_ei,li_e);
1352  q_ei_Equ_e_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_ei,li_e);
1353  f_bp_Equ_bx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bx);
1354  q_bp_Equ_bx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bx);
1355  f_bp_Equ_bp_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bp);
1356  q_bp_Equ_bp_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bp);
1357  f_bp_Equ_dt_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_dt);
1358  q_bp_Equ_dt_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_dt);
1359  f_bp_Equ_bi_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_bi);
1360  q_bp_Equ_bi_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_bi);
1361  f_bp_Equ_ci_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_ci);
1362  q_bp_Equ_ci_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_ci);
1363  f_bp_Equ_cx_Node_Ptr = dFdxMatPtr->returnRawEntryPointer(li_bp,li_cx);
1364  q_bp_Equ_cx_Node_Ptr = dQdxMatPtr->returnRawEntryPointer(li_bp,li_cx);
1365 
1366 
1367 }
1368 
1369 // RHS load functions
1370 
1371 //-----------------------------------------------------------------------------
1372 // Function : Instance::loadDAEFVector
1373 // Purpose : load F vector (static contributions) for one instance for
1374 // NEW DAE formulation
1375 // Special Notes :
1376 // Scope : public
1377 // Creator : admsXml
1378 // Creation Date :
1379 //-----------------------------------------------------------------------------
1381 {
1382 
1383  bool bsuccess=true;
1384 
1396  {
1397  double *dFdxdVp = extData.dFdxdVpVectorRawPtr;
1398  dFdxdVp[li_c] += Jdxp_static[admsNodeID_c];
1399  dFdxdVp[li_b] += Jdxp_static[admsNodeID_b];
1400  dFdxdVp[li_e] += Jdxp_static[admsNodeID_e];
1401  dFdxdVp[li_dt] += Jdxp_static[admsNodeID_dt];
1402  dFdxdVp[li_cx] += Jdxp_static[admsNodeID_cx];
1403  dFdxdVp[li_ci] += Jdxp_static[admsNodeID_ci];
1404  dFdxdVp[li_bx] += Jdxp_static[admsNodeID_bx];
1405  dFdxdVp[li_bi] += Jdxp_static[admsNodeID_bi];
1406  dFdxdVp[li_ei] += Jdxp_static[admsNodeID_ei];
1407  dFdxdVp[li_bp] += Jdxp_static[admsNodeID_bp];
1408 
1409  }
1410 
1411  return bsuccess;
1412 }
1413 
1414 //-----------------------------------------------------------------------------
1415 // Function : Instance::loadDAEQVector
1416 // Purpose : load Q vector (dynamic contributions) for one instance for
1417 // NEW DAE formulation
1418 // Special Notes :
1419 // Scope : public
1420 // Creator : admsXml
1421 // Creation Date :
1422 //-----------------------------------------------------------------------------
1424 {
1436  {
1437  double *dQdxdVp = extData.dQdxdVpVectorRawPtr;
1438  dQdxdVp[li_c] += Jdxp_dynamic[admsNodeID_c];
1439  dQdxdVp[li_b] += Jdxp_dynamic[admsNodeID_b];
1440  dQdxdVp[li_e] += Jdxp_dynamic[admsNodeID_e];
1441  dQdxdVp[li_dt] += Jdxp_dynamic[admsNodeID_dt];
1442  dQdxdVp[li_cx] += Jdxp_dynamic[admsNodeID_cx];
1443  dQdxdVp[li_ci] += Jdxp_dynamic[admsNodeID_ci];
1444  dQdxdVp[li_bx] += Jdxp_dynamic[admsNodeID_bx];
1445  dQdxdVp[li_bi] += Jdxp_dynamic[admsNodeID_bi];
1446  dQdxdVp[li_ei] += Jdxp_dynamic[admsNodeID_ei];
1447  dQdxdVp[li_bp] += Jdxp_dynamic[admsNodeID_bp];
1448  }
1449 
1450  return true;
1451 }
1452 
1453 
1454 //-----------------------------------------------------------------------------
1455 // Function : Instance::updatePrimaryState
1456 // Purpose :
1457 // Special Notes : In this initial implementation, does little more than
1458 // call updateIntermediateVars()
1459 // Scope : public
1460 // Creator : admsXml
1461 // Creation Date :
1462 //-----------------------------------------------------------------------------
1464 {
1465  bool bsuccess = true;
1466 
1467  bsuccess = updateIntermediateVars();
1468 
1469  // if old DAE were implemented, we'd save dynamic contributions as state
1470  // here.
1471 
1472  double * staVec = extData.nextStaVectorRawPtr;
1473  // Also need to save limited voltage drops
1474  // This formulation assumes that we have *always* written the
1475  // limited voltages back into the probeVars[] array.
1476 
1484 
1485  return bsuccess;
1486 }
1487 
1488 //-----------------------------------------------------------------------------
1489 // Function : Instance::updateSecondaryState
1490 // Purpose :
1491 // Special Notes : In this initial implementation, does nothing
1492 // Scope : public
1493 // Creator : admsXml
1494 // Creation Date :
1495 //-----------------------------------------------------------------------------
1497 {
1498  bool bsuccess = true;
1499 
1500  // were old DAE implemented, we'd pull dynamic contribution derivatives
1501  // out of state.
1502 
1503  return bsuccess;
1504 }
1505 
1506 //-----------------------------------------------------------------------------
1507 // Function : Instance::updateIntermediateVars
1508 // Purpose : update intermediate variables for one vbic instance
1509 // Special Notes :
1510 // Scope : public
1511 // Creator : admsXml
1512 // Creation Date :
1513 //-----------------------------------------------------------------------------
1515 {
1516 
1517  bool bsuccess=true;
1518  N_LAS_Vector * solVectorPtr = extData.nextSolVectorPtr;
1519 
1520 #ifdef Xyce_DEBUG_DEVICE
1521  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
1522  {
1523  Xyce::dout() << std::endl << subsection_divider << std::endl;
1524  Xyce::dout() << " In ADMSvbic::Instance::updateIntermediateVars\n\n";
1525  Xyce::dout() << " name = " << getName() << std::endl;
1526  }
1527 #endif
1528 
1529  // Local variables
1530  AdmsFadType Qcth;
1531  AdmsFadType Irth;
1532  AdmsFadType Ith;
1533  AdmsFadType Qbco;
1534  AdmsFadType Qbeo;
1535  AdmsFadType Qbep;
1536  AdmsFadType Qbcx;
1537  AdmsFadType Qbc;
1538  AdmsFadType Qbex;
1539  AdmsFadType Qbe;
1540  AdmsFadType tff;
1541  AdmsFadType tff_exparg;
1542  AdmsFadType mIf;
1543  AdmsFadType rIf;
1544  AdmsFadType sgIf;
1545  AdmsFadType Irbp;
1546  AdmsFadType Ire;
1547  AdmsFadType Irbi;
1548  AdmsFadType Irbx;
1549  AdmsFadType Irci;
1550  AdmsFadType derf;
1551  AdmsFadType Iohm;
1552  AdmsFadType rKp1;
1553  AdmsFadType Kbcx;
1554  AdmsFadType Kbci;
1555  AdmsFadType expx_vbcx;
1556  AdmsFadType argx_vbcx;
1557  AdmsFadType Ircx;
1558  AdmsFadType Ibc;
1559  AdmsFadType Igc;
1560  AdmsFadType avalf;
1561  AdmsFadType avalf_exparg;
1562  AdmsFadType Ibep;
1563  AdmsFadType expn_vbep;
1564  AdmsFadType argn_vbep;
1565  AdmsFadType Ibcj;
1566  AdmsFadType expn_vbci;
1567  AdmsFadType argn_vbci;
1568  AdmsFadType Ibex;
1569  AdmsFadType Ibe;
1570  AdmsFadType expx_vbei;
1571  AdmsFadType argx_vbei;
1572  AdmsFadType expn_vbei;
1573  AdmsFadType argn_vbei;
1574  AdmsFadType argi_vbex;
1575  AdmsFadType expi_vbex;
1576  AdmsFadType argn_vbex;
1577  AdmsFadType expn_vbex;
1578  AdmsFadType argx_vbex;
1579  AdmsFadType expx_vbex;
1580  AdmsFadType qbp;
1581  AdmsFadType q2p;
1582  AdmsFadType Ifp;
1583  AdmsFadType expx_vbci;
1584  AdmsFadType argx_vbci;
1585  AdmsFadType expi_vbep;
1586  AdmsFadType argi_vbep;
1587  AdmsFadType Itzf;
1588  AdmsFadType Itzr;
1589  AdmsFadType qb;
1590  AdmsFadType q2;
1591  AdmsFadType q1;
1592  AdmsFadType q1z;
1593  AdmsFadType Iri;
1594  AdmsFadType expi_vbci;
1595  AdmsFadType argi_vbci;
1596  AdmsFadType Ifi;
1597  AdmsFadType expi_vbei;
1598  AdmsFadType argi_vbei;
1599  AdmsFadType qdbep;
1600  AdmsFadType qhi_vbep;
1601  AdmsFadType qlo_vbep;
1602  AdmsFadType dvh_vbep;
1603  AdmsFadType ql_vbep;
1604  AdmsFadType cl_vbep;
1605  AdmsFadType sel_vbep;
1606  AdmsFadType vl_vbep;
1607  AdmsFadType vnl_vbep;
1608  AdmsFadType vn_vbep;
1609  AdmsFadType mv_vbep;
1610  AdmsFadType dv_vbep;
1611  AdmsFadType qdbc;
1612  AdmsFadType qhi_vbci;
1613  AdmsFadType qlo_vbci;
1614  AdmsFadType dvh_vbci;
1615  AdmsFadType ql_vbci;
1616  AdmsFadType cl_vbci;
1617  AdmsFadType cmx;
1618  AdmsFadType crt;
1619  AdmsFadType sel_vbci;
1620  AdmsFadType vl_vbci;
1621  AdmsFadType vnl_vbci;
1622  AdmsFadType vn_vbci;
1623  AdmsFadType qlo0;
1624  AdmsFadType vnl0;
1625  AdmsFadType vn0;
1626  AdmsFadType mv_vbci;
1627  AdmsFadType dv_vbci;
1628  AdmsFadType qdbex;
1629  AdmsFadType qhi_vbex;
1630  AdmsFadType qlo_vbex;
1631  AdmsFadType dvh_vbex;
1632  AdmsFadType vl_vbex;
1633  AdmsFadType mv_vbex;
1634  AdmsFadType dv_vbex;
1635  AdmsFadType qdbe;
1636  AdmsFadType qhi_vbei;
1637  AdmsFadType qlo_vbei;
1638  double pwq;
1639  AdmsFadType dvh_vbei;
1640  AdmsFadType vl_vbei;
1641  AdmsFadType mv_vbei;
1642  AdmsFadType dv_vbei;
1643  AdmsFadType q0;
1644  AdmsFadType vl0;
1645  AdmsFadType mv0;
1646  AdmsFadType dv0;
1647  double slTF;
1648  double IITF;
1649  double IVTF;
1650  double IHRCF;
1651  AdmsFadType IVO;
1652  double IIKP;
1653  double IIKR;
1654  AdmsFadType IIKF;
1655  double IVER;
1656  double IVEF;
1657  AdmsFadType EBBEatT;
1658  AdmsFadType VOatT;
1659  AdmsFadType GAMMatT;
1660  AdmsFadType CJCPatT;
1661  AdmsFadType CJEPatT;
1662  AdmsFadType CJCatT;
1663  AdmsFadType CJEatT;
1664  AdmsFadType PSatT;
1665  AdmsFadType PCatT;
1666  AdmsFadType PEatT;
1667  AdmsFadType psiin;
1668  AdmsFadType psiio;
1669  AdmsFadType NBBEatT;
1670  AdmsFadType VBBEatT;
1671  AdmsFadType AVC2atT;
1672  AdmsFadType NRatT;
1673  AdmsFadType NFatT;
1674  AdmsFadType IBCNPatT;
1675  AdmsFadType IBCIPatT;
1676  AdmsFadType IBENPatT;
1677  AdmsFadType IBEIPatT;
1678  AdmsFadType IBCNatT;
1679  AdmsFadType IBCIatT;
1680  AdmsFadType IBENatT;
1681  AdmsFadType IBEIatT;
1682  AdmsFadType ISPatT;
1683  AdmsFadType ISRRatT;
1684  AdmsFadType ISatT;
1685  AdmsFadType RBPatT;
1686  AdmsFadType RSatT;
1687  AdmsFadType REatT;
1688  AdmsFadType RBIatT;
1689  AdmsFadType RBXatT;
1690  AdmsFadType RCIatT;
1691  AdmsFadType RCXatT;
1692  AdmsFadType IKFatT;
1693  AdmsFadType dT;
1694  AdmsFadType rT;
1695  AdmsFadType Vtv;
1696  AdmsFadType Tdev;
1697  double Tini;
1698  AdmsFadType Vcei;
1699  AdmsFadType Vbc;
1700  AdmsFadType Vrbp;
1701  AdmsFadType Vre;
1702  AdmsFadType Vrbx;
1703  AdmsFadType Vrbi;
1704  AdmsFadType Vrci;
1705  AdmsFadType Vrcx;
1706  AdmsFadType Vbe;
1707  AdmsFadType Vrth;
1708  AdmsFadType Vbep;
1709  AdmsFadType Vbcx;
1710  AdmsFadType Vbex;
1711  AdmsFadType Vbci;
1712  AdmsFadType Vbei;
1713  double tVCrit;
1714  // temporary variables for limiting
1715  double Vbe_orig,Vbe_limited,Vbe_old;
1716  double Vrth_orig,Vrth_limited,Vrth_old;
1717  double Vbep_orig,Vbep_limited,Vbep_old;
1718  double Vbcx_orig,Vbcx_limited,Vbcx_old;
1719  double Vbex_orig,Vbex_limited,Vbex_old;
1720  double Vbci_orig,Vbci_limited,Vbci_old;
1721  double Vbei_orig,Vbei_limited,Vbei_old;
1722 
1723 
1724  // set the sizes of the Fad arrays:
1725 
1726  if (probeVars.size() != (15))
1727  {
1728  probeVars.resize(15);
1729  staticContributions.resize(10+0);
1730  dynamicContributions.resize(10+0);
1731  probeDiffs.resize(15,0.0);
1732  Jdxp_static.resize(10+0);
1733  Jdxp_dynamic.resize(10+0);
1734  }
1735 
1736  // initialize contributions to zero (automatically sets derivatives to zero)
1737  for (int i=0; i < 10+0 ; ++i)
1738  {
1739  staticContributions[i]=0;
1740  dynamicContributions[i]=0;
1741  Jdxp_static[i]=0;
1742  Jdxp_dynamic[i]=0;
1743  }
1744 
1745  for (int i=0; i < 15 ; ++i)
1746  {
1747  probeDiffs[i] = 0.0;
1748  }
1749  // extract solution variables and set as Fad independent variables.
1750  probeVars[admsProbeID_V_ci_ei] = (*solVectorPtr)[li_ci] - (*solVectorPtr)[li_ei];
1752 
1753  probeVars[admsProbeID_V_b_c] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_c];
1755 
1756  probeVars[admsProbeID_V_bp_cx] = (*solVectorPtr)[li_bp] - (*solVectorPtr)[li_cx];
1758 
1759  probeVars[admsProbeID_V_e_ei] = (*solVectorPtr)[li_e] - (*solVectorPtr)[li_ei];
1761 
1762  probeVars[admsProbeID_V_b_bx] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_bx];
1764 
1765  probeVars[admsProbeID_V_bx_bi] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_bi];
1767 
1768  probeVars[admsProbeID_V_cx_ci] = (*solVectorPtr)[li_cx] - (*solVectorPtr)[li_ci];
1770 
1771  probeVars[admsProbeID_V_c_cx] = (*solVectorPtr)[li_c] - (*solVectorPtr)[li_cx];
1773 
1774  probeVars[admsProbeID_V_b_e] = (*solVectorPtr)[li_b] - (*solVectorPtr)[li_e];
1776 
1777  probeVars[admsProbeID_V_dt_GND] = (*solVectorPtr)[li_dt];
1779 
1780  probeVars[admsProbeID_V_bx_bp] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_bp];
1782 
1783  probeVars[admsProbeID_V_bi_cx] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_cx];
1785 
1786  probeVars[admsProbeID_V_bx_ei] = (*solVectorPtr)[li_bx] - (*solVectorPtr)[li_ei];
1788 
1789  probeVars[admsProbeID_V_bi_ci] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_ci];
1791 
1792  probeVars[admsProbeID_V_bi_ei] = (*solVectorPtr)[li_bi] - (*solVectorPtr)[li_ei];
1794 
1795 
1796  // pre-multiply any "typed" probes (i.e. those limited with "typedpnjlim")
1803 
1804  // Copy probes into limiting vars
1805  Vbe_orig = Vbe_limited = probeVars[admsProbeID_V_b_e].val();
1807  Vrth_orig = Vrth_limited = probeVars[admsProbeID_V_dt_GND].val();
1809  Vbep_orig = Vbep_limited = probeVars[admsProbeID_V_bx_bp].val();
1811  Vbcx_orig = Vbcx_limited = probeVars[admsProbeID_V_bi_cx].val();
1813  Vbex_orig = Vbex_limited = probeVars[admsProbeID_V_bx_ei].val();
1815  Vbci_orig = Vbci_limited = probeVars[admsProbeID_V_bi_ci].val();
1817  Vbei_orig = Vbei_limited = probeVars[admsProbeID_V_bi_ei].val();
1819 
1820  origFlag = true;
1821 
1822  // code manually moved from below, because we need it earlier than predicted by adms
1823  tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
1824 
1825  if (getSolverState().newtonIter == 0)
1826  {
1827 
1829  {
1830  // manually inserted code:
1832  {
1833  N_LAS_Vector * flagSolVectorPtr = (extData.flagSolVectorPtr);
1834  if ((*flagSolVectorPtr)[li_e] == 0 ||
1835  (*flagSolVectorPtr)[li_ei] == 0 ||
1836  (*flagSolVectorPtr)[li_b] == 0 ||
1837  (*flagSolVectorPtr)[li_bi] == 0 ||
1838  (*flagSolVectorPtr)[li_bx] == 0 ||
1839  (*flagSolVectorPtr)[li_bp] == 0 ||
1840  (*flagSolVectorPtr)[li_c] == 0 ||
1841  (*flagSolVectorPtr)[li_ci] == 0 ||
1842  (*flagSolVectorPtr)[li_cx] == 0 ||
1843  (*flagSolVectorPtr)[li_dt] == 0 )
1844  {
1845  Vbci_limited = Vbcx_limited = Vbep_limited = 0;
1846  Vbe_limited = Vbei_limited = Vbex_limited = tVCrit;
1847  Vrth_limited = 0;
1848  origFlag = false;
1849  }
1850  }
1851  else
1852  {
1853  Vbci_limited = Vbcx_limited = Vbep_limited = 0;
1854  Vbe_limited = Vbei_limited = Vbex_limited = tVCrit;
1855  Vrth_limited = 0;
1856  origFlag = false;
1857 #ifdef Xyce_DEBUG_DEVICE
1859  {
1860  Xyce::dout() << " Setting device initial condition to Base-Emitter drop=tVCrit (" << tVCrit << ")"<<std::endl;
1861  }
1862 #endif
1863  }
1864  }
1865  // end manually inserted code
1866 
1867  if (!(getSolverState().dcopFlag)||(getSolverState().locaEnabledFlag && getSolverState().dcopFlag))
1868  {
1876  }
1877  else
1878  {
1879  Vbe_old = Vbe_limited;
1880  Vrth_old = Vrth_limited;
1881  Vbep_old = Vbep_limited;
1882  Vbcx_old = Vbcx_limited;
1883  Vbex_old = Vbex_limited;
1884  Vbci_old = Vbci_limited;
1885  Vbei_old = Vbei_limited;
1886  }
1887  }
1888  else
1889  {
1897  }
1898 
1899  // -- code converted from analog/code block
1900  // manually moved to above, we need it earlier than this:
1901  //tVCrit = (adms_vt(admsTemperature)*log((adms_vt(admsTemperature)/(1.41421356237309504880*(model_.IS)))));
1902 
1903 
1904  //Vbei = ($limit(V(bi,ei),"typedpnjlim_new",$vt(),tVCrit,dtype));
1906  {
1907  int icheck=0;
1908  Vbei_limited = devSupport.pnjlim_new(Vbei_limited,Vbei_old,adms_vt_nom,tVCrit,&icheck);
1909  if (icheck == 1)
1910  origFlag = false;
1911  if (!origFlag)
1912  {
1913  probeDiffs[admsProbeID_V_bi_ei] = Vbei_limited - Vbei_orig;
1915  }
1916  }
1918 
1919 
1920 
1921  //Vbci = ($limit(V(bi,ci),"typedpnjlim_new",$vt(),tVCrit,dtype));
1922  if (getDeviceOptions().voltageLimiterFlag)
1923  {
1924  int icheck=0;
1925  Vbci_limited = devSupport.pnjlim_new(Vbci_limited,Vbci_old,adms_vt_nom,tVCrit,&icheck);
1926  if (icheck == 1)
1927  origFlag = false;
1928  if (!origFlag)
1929  {
1930  probeDiffs[admsProbeID_V_bi_ci] = Vbci_limited - Vbci_orig;
1932  }
1933  }
1935 
1936 
1937 
1938  //Vbex = ($limit(V(bx,ei),"typedpnjlim_new",$vt(),tVCrit,dtype));
1939  if (getDeviceOptions().voltageLimiterFlag)
1940  {
1941  int icheck=0;
1942  Vbex_limited = devSupport.pnjlim_new(Vbex_limited,Vbex_old,adms_vt_nom,tVCrit,&icheck);
1943  if (icheck == 1)
1944  origFlag = false;
1945  if (!origFlag)
1946  {
1947  probeDiffs[admsProbeID_V_bx_ei] = Vbex_limited - Vbex_orig;
1949  }
1950  }
1952 
1953 
1954 
1955  //Vbcx = ($limit(V(bi,cx),"typedpnjlim_new",$vt(),tVCrit,dtype));
1956  if (getDeviceOptions().voltageLimiterFlag)
1957  {
1958  int icheck=0;
1959  Vbcx_limited = devSupport.pnjlim_new(Vbcx_limited,Vbcx_old,adms_vt_nom,tVCrit,&icheck);
1960  if (icheck == 1)
1961  origFlag = false;
1962  if (!origFlag)
1963  {
1964  probeDiffs[admsProbeID_V_bi_cx] = Vbcx_limited - Vbcx_orig;
1966  }
1967  }
1969 
1970 
1971 
1972  //Vbep = ($limit(V(bx,bp),"typedpnjlim_new",$vt(),tVCrit,dtype));
1973  if (getDeviceOptions().voltageLimiterFlag)
1974  {
1975  int icheck=0;
1976  Vbep_limited = devSupport.pnjlim_new(Vbep_limited,Vbep_old,adms_vt_nom,tVCrit,&icheck);
1977  if (icheck == 1)
1978  origFlag = false;
1979  if (!origFlag)
1980  {
1981  probeDiffs[admsProbeID_V_bx_bp] = Vbep_limited - Vbep_orig;
1983  }
1984  }
1986 
1987 
1988 
1989  //Vrth = ($limit(V(dt,GND),"limRTH"));
1990  if (getDeviceOptions().voltageLimiterFlag)
1991  {
1992  int icheck=0;
1993  Vrth_limited = model_.analogFunctions.limRTH(Vrth_limited,Vrth_old);
1994  if (Vrth_limited != Vrth_orig)
1995  {
1996  icheck=1;
1997  }
1998  if (icheck == 1)
1999  origFlag = false;
2000  if (!origFlag)
2001  {
2002  probeDiffs[admsProbeID_V_dt_GND] = Vrth_limited - Vrth_orig;
2004  }
2005  }
2007 
2008 
2009 
2010  //Vbe = ($limit(V(b,e),"typeddummy",$vt(),tVCrit,dtype));
2011  if (getDeviceOptions().voltageLimiterFlag)
2012  {
2013  int icheck=0;
2014  // dummy limiting for initialization purposes
2015  if (icheck == 1)
2016  origFlag = false;
2017  if (!origFlag)
2018  {
2019  probeDiffs[admsProbeID_V_b_e] = Vbe_limited - Vbe_orig;
2021  }
2022  }
2024 
2025  Vrcx = ((model_.dtype)*(probeVars[admsProbeID_V_c_cx]));
2026  Vrci = ((model_.dtype)*(probeVars[admsProbeID_V_cx_ci]));
2027  Vrbi = ((model_.dtype)*(probeVars[admsProbeID_V_bx_bi]));
2028  Vrbx = ((model_.dtype)*(probeVars[admsProbeID_V_b_bx]));
2030  Vrbp = ((model_.dtype)*(probeVars[admsProbeID_V_bp_cx]));
2031  Vbc = ((model_.dtype)*(probeVars[admsProbeID_V_b_c]));
2032  Vcei = ((model_.dtype)*(probeVars[admsProbeID_V_ci_ei]));
2033  Tini = (2.731500e+02+(model_.TNOM));
2034  Tdev = ((admsTemperature+(model_.DTEMP))+Vrth);
2035  Vtv = ((1.380662e-23*Tdev)/1.602189e-19);
2036  rT = (Tdev/Tini);
2037  dT = (Tdev-Tini);
2038  IKFatT = ((model_.IKF)*pow(rT,(model_.XIKF)));
2039  RCXatT = ((model_.RCX)*pow(rT,(model_.XRCX)));
2040  RCIatT = ((model_.RCI)*pow(rT,(model_.XRCI)));
2041  RBXatT = ((model_.RBX)*pow(rT,(model_.XRBX)));
2042  RBIatT = ((model_.RBI)*pow(rT,(model_.XRBI)));
2043  REatT = ((model_.RE)*pow(rT,(model_.XRE)));
2044  RSatT = ((model_.RS)*pow(rT,(model_.XRS)));
2045  RBPatT = ((model_.RBP)*pow(rT,(model_.XRBP)));
2046  ISatT = ((model_.IS)*pow((pow(rT,(model_.XIS))*exp((((-(model_.EA))*(1.0-rT))/Vtv))),(1.0/(model_.NF))));
2047  ISRRatT = ((model_.ISRR)*pow((pow(rT,(model_.XISR))*exp((((-(model_.DEAR))*(1.0-rT))/Vtv))),(1.0/(model_.NR))));
2048  ISPatT = ((model_.ISP)*pow((pow(rT,(model_.XIS))*exp((((-(model_.EAP))*(1.0-rT))/Vtv))),(1.0/(model_.NFP))));
2049  IBEIatT = ((model_.IBEI)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIE))*(1.0-rT))/Vtv))),(1.0/(model_.NEI))));
2050  IBENatT = ((model_.IBEN)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANE))*(1.0-rT))/Vtv))),(1.0/(model_.NEN))));
2051  IBCIatT = ((model_.IBCI)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIC))*(1.0-rT))/Vtv))),(1.0/(model_.NCI))));
2052  IBCNatT = ((model_.IBCN)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANC))*(1.0-rT))/Vtv))),(1.0/(model_.NCN))));
2053  IBEIPatT = ((model_.IBEIP)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIC))*(1.0-rT))/Vtv))),(1.0/(model_.NCI))));
2054  IBENPatT = ((model_.IBENP)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANC))*(1.0-rT))/Vtv))),(1.0/(model_.NCN))));
2055  IBCIPatT = ((model_.IBCIP)*pow((pow(rT,(model_.XII))*exp((((-(model_.EAIS))*(1.0-rT))/Vtv))),(1.0/(model_.NCIP))));
2056  IBCNPatT = ((model_.IBCNP)*pow((pow(rT,(model_.XIN))*exp((((-(model_.EANS))*(1.0-rT))/Vtv))),(1.0/(model_.NCNP))));
2057  NFatT = ((model_.NF)*(1.0+(dT*(model_.TNF))));
2058  NRatT = ((model_.NR)*(1.0+(dT*(model_.TNF))));
2059  AVC2atT = ((model_.AVC2)*(1.0+(dT*(model_.TAVC))));
2060  VBBEatT = ((model_.VBBE)*(1.0+(dT*((model_.TVBBE1)+(dT*(model_.TVBBE2))))));
2061  NBBEatT = ((model_.NBBE)*(1.0+(dT*(model_.TNBBE))));
2062  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PE))*rT)/Vtv))-exp(((((-0.5)*(model_.PE))*rT)/Vtv)))));
2063  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIE)*(rT-1.0)));
2064  PEatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2065  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PC))*rT)/Vtv))-exp(((((-0.5)*(model_.PC))*rT)/Vtv)))));
2066  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIC)*(rT-1.0)));
2067  PCatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2068  psiio = ((2.0*(Vtv/rT))*log((exp((((0.5*(model_.PS))*rT)/Vtv))-exp(((((-0.5)*(model_.PS))*rT)/Vtv)))));
2069  psiin = (((psiio*rT)-((3.0*Vtv)*log(rT)))-((model_.EAIS)*(rT-1.0)));
2070  PSatT = (psiin+((2.0*Vtv)*log((0.5*(1.0+sqrt((1.0+(4.0*exp(((-psiin)/Vtv))))))))));
2071  CJEatT = ((model_.CJE)*pow(((model_.PE)/PEatT),(model_.ME)));
2072  CJCatT = ((model_.CJC)*pow(((model_.PC)/PCatT),(model_.MC)));
2073  CJEPatT = ((model_.CJEP)*pow(((model_.PC)/PCatT),(model_.MC)));
2074  CJCPatT = ((model_.CJCP)*pow(((model_.PS)/PSatT),(model_.MS)));
2075  GAMMatT = (((model_.GAMM)*pow(rT,(model_.XIS)))*exp((((-(model_.EA))*(1.0-rT))/Vtv)));
2076  VOatT = ((model_.VO)*pow(rT,(model_.XVO)));
2077  EBBEatT = exp(((-VBBEatT)/(NBBEatT*Vtv)));
2078  IVEF = (((model_.VEF)>0.0)?(1.0/(model_.VEF)):0.0);
2079  IVER = (((model_.VER)>0.0)?(1.0/(model_.VER)):0.0);
2080  IIKF = 0.0;
2081  if (((model_.IKF)>0.0))
2082  {
2083  IIKF = (1.0/IKFatT);
2084  }
2085  IIKR = (((model_.IKR)>0.0)?(1.0/(model_.IKR)):0.0);
2086  IIKP = (((model_.IKP)>0.0)?(1.0/(model_.IKP)):0.0);
2087  IVO = 0.0;
2088  if (((model_.VO)>0.0))
2089  {
2090  IVO = (1.0/VOatT);
2091  }
2092  IHRCF = (((model_.HRCF)>0.0)?(1.0/(model_.HRCF)):0.0);
2093  IVTF = (((model_.VTF)>0.0)?(1.0/(model_.VTF)):0.0);
2094  IITF = (((model_.ITF)>0.0)?(1.0/(model_.ITF)):0.0);
2095  slTF = (((model_.ITF)>0.0)?0.0:1.0);
2096  dv0 = ((-PEatT)*(model_.FC));
2097  if (((model_.AJE)<=0.0))
2098  {
2099  dvh_vbei = (Vbei+dv0);
2100  if ((dvh_vbei>0.0))
2101  {
2102  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.ME)));
2103  qlo_vbei = ((PEatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.ME)));
2104  qhi_vbei = ((dvh_vbei*((1.0-(model_.FC))+(((0.5*(model_.ME))*dvh_vbei)/PEatT)))*pwq);
2105  }
2106  else
2107  {
2108  qlo_vbei = ((PEatT*(1.0-pow((1.0-(Vbei/PEatT)),(1.0-(model_.ME)))))/(1.0-(model_.ME)));
2109  qhi_vbei = 0.0;
2110  }
2111  qdbe = (qlo_vbei+qhi_vbei);
2112  }
2113  else
2114  {
2115  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJE))*(model_.AJE))));
2116  vl0 = ((-0.5)*(dv0+mv0));
2117  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2118  dv_vbei = (Vbei+dv0);
2119  mv_vbei = sqrt(((dv_vbei*dv_vbei)+((4*(model_.AJE))*(model_.AJE))));
2120  vl_vbei = ((0.5*(dv_vbei-mv_vbei))-dv0);
2121  qlo_vbei = (((-PEatT)*pow((1.0-(vl_vbei/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2122  qdbe = ((qlo_vbei+(pow((1.0-(model_.FC)),(-(model_.ME)))*((Vbei-vl_vbei)+vl0)))-q0);
2123  }
2124  dv0 = ((-PEatT)*(model_.FC));
2125  if (((model_.AJE)<=0.0))
2126  {
2127  dvh_vbex = (Vbex+dv0);
2128  if ((dvh_vbex>0.0))
2129  {
2130  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.ME)));
2131  qlo_vbex = ((PEatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.ME)));
2132  qhi_vbex = ((dvh_vbex*((1.0-(model_.FC))+(((0.5*(model_.ME))*dvh_vbex)/PEatT)))*pwq);
2133  }
2134  else
2135  {
2136  qlo_vbex = ((PEatT*(1.0-pow((1.0-(Vbex/PEatT)),(1.0-(model_.ME)))))/(1.0-(model_.ME)));
2137  qhi_vbex = 0.0;
2138  }
2139  qdbex = (qlo_vbex+qhi_vbex);
2140  }
2141  else
2142  {
2143  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJE))*(model_.AJE))));
2144  vl0 = ((-0.5)*(dv0+mv0));
2145  q0 = (((-PEatT)*pow((1.0-(vl0/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2146  dv_vbex = (Vbex+dv0);
2147  mv_vbex = sqrt(((dv_vbex*dv_vbex)+((4*(model_.AJE))*(model_.AJE))));
2148  vl_vbex = ((0.5*(dv_vbex-mv_vbex))-dv0);
2149  qlo_vbex = (((-PEatT)*pow((1.0-(vl_vbex/PEatT)),(1.0-(model_.ME))))/(1.0-(model_.ME)));
2150  qdbex = ((qlo_vbex+(pow((1.0-(model_.FC)),(-(model_.ME)))*((Vbex-vl_vbex)+vl0)))-q0);
2151  }
2152  dv0 = ((-PCatT)*(model_.FC));
2153  if (((model_.AJC)<=0.0))
2154  {
2155  dvh_vbci = (Vbci+dv0);
2156  if ((dvh_vbci>0.0))
2157  {
2158  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.MC)));
2159  qlo_vbci = ((PCatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.MC)));
2160  qhi_vbci = ((dvh_vbci*((1.0-(model_.FC))+(((0.5*(model_.MC))*dvh_vbci)/PCatT)))*pwq);
2161  }
2162  else
2163  {
2164  if ((((model_.VRT)>0.0)&&(Vbci<(-(model_.VRT)))))
2165  {
2166  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)));
2167  }
2168  else
2169  {
2170  qlo_vbci = ((PCatT*(1.0-pow((1.0-(Vbci/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2171  }
2172  qhi_vbci = 0.0;
2173  }
2174  qdbc = (qlo_vbci+qhi_vbci);
2175  }
2176  else
2177  {
2178  if ((((model_.VRT)>0.0)&&((model_.ART)>0.0)))
2179  {
2180  vn0 = (((model_.VRT)+dv0)/((model_.VRT)-dv0));
2181  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))))));
2182  vl0 = (0.5*(((vnl0*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2183  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2184  vn_vbci = ((((2*Vbci)+(model_.VRT))+dv0)/((model_.VRT)-dv0));
2185  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))))));
2186  vl_vbci = (0.5*(((vnl_vbci*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2187  qlo_vbci = ((PCatT*(1.0-pow((1.0-(vl_vbci/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2188  sel_vbci = (0.5*(vnl_vbci+1.0));
2189  crt = pow((1.0+((model_.VRT)/PCatT)),(-(model_.MC)));
2190  cmx = pow((1.0+(dv0/PCatT)),(-(model_.MC)));
2191  cl_vbci = (((1.0-sel_vbci)*crt)+(sel_vbci*cmx));
2192  ql_vbci = (((Vbci-vl_vbci)+vl0)*cl_vbci);
2193  qdbc = ((ql_vbci+qlo_vbci)-qlo0);
2194  }
2195  else
2196  {
2197  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJC))*(model_.AJC))));
2198  vl0 = ((-0.5)*(dv0+mv0));
2199  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2200  dv_vbci = (Vbci+dv0);
2201  mv_vbci = sqrt(((dv_vbci*dv_vbci)+((4*(model_.AJC))*(model_.AJC))));
2202  vl_vbci = ((0.5*(dv_vbci-mv_vbci))-dv0);
2203  qlo_vbci = (((-PCatT)*pow((1.0-(vl_vbci/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2204  qdbc = ((qlo_vbci+(pow((1.0-(model_.FC)),(-(model_.MC)))*((Vbci-vl_vbci)+vl0)))-q0);
2205  }
2206  }
2207  dv0 = ((-PCatT)*(model_.FC));
2208  if (((model_.AJC)<=0.0))
2209  {
2210  dvh_vbep = (Vbep+dv0);
2211  if ((dvh_vbep>0.0))
2212  {
2213  pwq = pow((1.0-(model_.FC)),((-1.0)-(model_.MC)));
2214  qlo_vbep = ((PCatT*(1.0-((pwq*(1.0-(model_.FC)))*(1.0-(model_.FC)))))/(1.0-(model_.MC)));
2215  qhi_vbep = ((dvh_vbep*((1.0-(model_.FC))+(((0.5*(model_.MC))*dvh_vbep)/PCatT)))*pwq);
2216  }
2217  else
2218  {
2219  if ((((model_.VRT)>0.0)&&(Vbep<(-(model_.VRT)))))
2220  {
2221  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)));
2222  }
2223  else
2224  {
2225  qlo_vbep = ((PCatT*(1.0-pow((1.0-(Vbep/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2226  }
2227  qhi_vbep = 0.0;
2228  }
2229  qdbep = (qlo_vbep+qhi_vbep);
2230  }
2231  else
2232  {
2233  if ((((model_.VRT)>0.0)&&((model_.ART)>0.0)))
2234  {
2235  vn0 = (((model_.VRT)+dv0)/((model_.VRT)-dv0));
2236  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))))));
2237  vl0 = (0.5*(((vnl0*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2238  qlo0 = ((PCatT*(1.0-pow((1.0-(vl0/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2239  vn_vbep = ((((2*Vbep)+(model_.VRT))+dv0)/((model_.VRT)-dv0));
2240  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))))));
2241  vl_vbep = (0.5*(((vnl_vbep*((model_.VRT)-dv0))-(model_.VRT))-dv0));
2242  qlo_vbep = ((PCatT*(1.0-pow((1.0-(vl_vbep/PCatT)),(1.0-(model_.MC)))))/(1.0-(model_.MC)));
2243  sel_vbep = (0.5*(vnl_vbep+1.0));
2244  crt = pow((1.0+((model_.VRT)/PCatT)),(-(model_.MC)));
2245  cmx = pow((1.0+(dv0/PCatT)),(-(model_.MC)));
2246  cl_vbep = (((1.0-sel_vbep)*crt)+(sel_vbep*cmx));
2247  ql_vbep = (((Vbep-vl_vbep)+vl0)*cl_vbep);
2248  qdbep = ((ql_vbep+qlo_vbep)-qlo0);
2249  }
2250  else
2251  {
2252  mv0 = sqrt(((dv0*dv0)+((4*(model_.AJC))*(model_.AJC))));
2253  vl0 = ((-0.5)*(dv0+mv0));
2254  q0 = (((-PCatT)*pow((1.0-(vl0/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2255  dv_vbep = (Vbep+dv0);
2256  mv_vbep = sqrt(((dv_vbep*dv_vbep)+((4*(model_.AJC))*(model_.AJC))));
2257  vl_vbep = ((0.5*(dv_vbep-mv_vbep))-dv0);
2258  qlo_vbep = (((-PCatT)*pow((1.0-(vl_vbep/PCatT)),(1.0-(model_.MC))))/(1.0-(model_.MC)));
2259  qdbep = ((qlo_vbep+(pow((1.0-(model_.FC)),(-(model_.MC)))*((Vbep-vl_vbep)+vl0)))-q0);
2260  }
2261  }
2262  argi_vbei = (Vbei/(NFatT*Vtv));
2263  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2264  Ifi = (ISatT*(expi_vbei-1.0));
2265  argi_vbci = (Vbci/(NRatT*Vtv));
2266  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2267  Iri = ((ISatT*ISRRatT)*(expi_vbci-1.0));
2268  q1z = ((1.0+(qdbe*IVER))+(qdbc*IVEF));
2269  q1 = ((0.5*((sqrt((((q1z-1.0e-4)*(q1z-1.0e-4))+1.0e-8))+q1z)-1.0e-4))+1.0e-4);
2270  q2 = ((Ifi*IIKF)+(Iri*IIKR));
2271  if ((q2>0))
2272  {
2273  if (((model_.QBM)<0.5))
2274  {
2275  qb = (0.5*(q1+pow((pow(q1,(1.0/(model_.NKF)))+(4.0*q2)),(model_.NKF))));
2276  }
2277  else
2278  {
2279  qb = ((0.5*q1)*(1.0+pow((1.0+(4.0*q2)),(model_.NKF))));
2280  }
2281  }
2282  else
2283  {
2284  qb = q1;
2285  }
2286  Itzr = (Iri/qb);
2287  Itzf = (Ifi/qb);
2288  if (((model_.ISP)>0.0))
2289  {
2290  argi_vbep = (Vbep/((model_.NFP)*Vtv));
2291  expi_vbep = limexp<AdmsFadType>(argi_vbep);
2292  argx_vbci = (Vbci/((model_.NFP)*Vtv));
2293  expx_vbci = limexp<AdmsFadType>(argx_vbci);
2294  Ifp = (ISPatT*((((model_.WSP)*expi_vbep)+((1.0-(model_.WSP))*expx_vbci))-1.0));
2295  q2p = (Ifp*IIKP);
2296  qbp = (0.5*(1.0+sqrt((1.0+(4.0*q2p)))));
2297  }
2298  else
2299  {
2300  Ifp = 0.0;
2301  qbp = 1.0;
2302  }
2303  if (((model_.WBE)==1.0))
2304  {
2305  argi_vbei = (Vbei/((model_.NEI)*Vtv));
2306  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2307  argn_vbei = (Vbei/((model_.NEN)*Vtv));
2308  expn_vbei = limexp<AdmsFadType>(argn_vbei);
2309  if (((model_.VBBE)>0.0))
2310  {
2311  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
2312  expx_vbei = limexp<AdmsFadType>(argx_vbei);
2313  Ibe = (((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-((model_.IBBE)*(expx_vbei-EBBEatT)));
2314  }
2315  else
2316  {
2317  Ibe = ((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)));
2318  }
2319  Ibex = 0.0;
2320  }
2321  else
2322  {
2323  if (((model_.WBE)==0.0))
2324  {
2325  Ibe = 0.0;
2326  argi_vbex = (Vbex/((model_.NEI)*Vtv));
2327  expi_vbex = limexp<AdmsFadType>(argi_vbex);
2328  argn_vbex = (Vbex/((model_.NEN)*Vtv));
2329  expn_vbex = limexp<AdmsFadType>(argn_vbex);
2330  if (((model_.VBBE)>0.0))
2331  {
2332  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
2333  expx_vbex = limexp<AdmsFadType>(argx_vbex);
2334  Ibex = (((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-((model_.IBBE)*(expx_vbex-EBBEatT)));
2335  }
2336  else
2337  {
2338  Ibex = ((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)));
2339  }
2340  }
2341  else
2342  {
2343  argi_vbei = (Vbei/((model_.NEI)*Vtv));
2344  expi_vbei = limexp<AdmsFadType>(argi_vbei);
2345  argn_vbei = (Vbei/((model_.NEN)*Vtv));
2346  expn_vbei = limexp<AdmsFadType>(argn_vbei);
2347  if (((model_.VBBE)>0.0))
2348  {
2349  argx_vbei = (((-VBBEatT)-Vbei)/(NBBEatT*Vtv));
2350  expx_vbei = limexp<AdmsFadType>(argx_vbei);
2351  Ibe = ((model_.WBE)*(((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0)))-((model_.IBBE)*(expx_vbei-EBBEatT))));
2352  }
2353  else
2354  {
2355  Ibe = ((model_.WBE)*((IBEIatT*(expi_vbei-1.0))+(IBENatT*(expn_vbei-1.0))));
2356  }
2357  argi_vbex = (Vbex/((model_.NEI)*Vtv));
2358  expi_vbex = limexp<AdmsFadType>(argi_vbex);
2359  argn_vbex = (Vbex/((model_.NEN)*Vtv));
2360  expn_vbex = limexp<AdmsFadType>(argn_vbex);
2361  if (((model_.VBBE)>0.0))
2362  {
2363  argx_vbex = (((-VBBEatT)-Vbex)/(NBBEatT*Vtv));
2364  expx_vbex = limexp<AdmsFadType>(argx_vbex);
2365  Ibex = ((1.0-(model_.WBE))*(((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0)))-((model_.IBBE)*(expx_vbex-EBBEatT))));
2366  }
2367  else
2368  {
2369  Ibex = ((1.0-(model_.WBE))*((IBEIatT*(expi_vbex-1.0))+(IBENatT*(expn_vbex-1.0))));
2370  }
2371  }
2372  }
2373  argi_vbci = (Vbci/((model_.NCI)*Vtv));
2374  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2375  argn_vbci = (Vbci/((model_.NCN)*Vtv));
2376  expn_vbci = limexp<AdmsFadType>(argn_vbci);
2377  Ibcj = ((IBCIatT*(expi_vbci-1.0))+(IBCNatT*(expn_vbci-1.0)));
2378  if ((((model_.IBEIP)>0.0)||((model_.IBENP)>0.0)))
2379  {
2380  argi_vbep = (Vbep/((model_.NCI)*Vtv));
2381  expi_vbep = limexp<AdmsFadType>(argi_vbep);
2382  argn_vbep = (Vbep/((model_.NCN)*Vtv));
2383  expn_vbep = limexp<AdmsFadType>(argn_vbep);
2384  Ibep = ((IBEIPatT*(expi_vbep-1.0))+(IBENPatT*(expn_vbep-1.0)));
2385  }
2386  else
2387  {
2388  Ibep = 0.0;
2389  }
2390  if (((model_.AVC1)>0.0))
2391  {
2392  vl_vbci = (0.5*(sqrt((((PCatT-Vbci)*(PCatT-Vbci))+0.01))+(PCatT-Vbci)));
2393  avalf_exparg = ((-AVC2atT)*pow(vl_vbci,((model_.MC)-1.0)));
2394  avalf = (((model_.AVC1)*vl_vbci)*limexp<AdmsFadType>(avalf_exparg));
2395  Igc = (((Itzf-Itzr)-Ibcj)*avalf);
2396  }
2397  else
2398  {
2399  Igc = 0.0;
2400  }
2401  Ibc = (Ibcj-Igc);
2402  if (((model_.RCX)>0.0))
2403  {
2404  Ircx = (Vrcx/RCXatT);
2405  }
2406  else
2407  {
2408  Ircx = 0.0;
2409  }
2410  argi_vbci = (Vbci/Vtv);
2411  expi_vbci = limexp<AdmsFadType>(argi_vbci);
2412  argx_vbcx = (Vbcx/Vtv);
2413  expx_vbcx = limexp<AdmsFadType>(argx_vbcx);
2414  Kbci = sqrt((1.0+(GAMMatT*expi_vbci)));
2415  Kbcx = sqrt((1.0+(GAMMatT*expx_vbcx)));
2416  if (((model_.RCI)>0.0))
2417  {
2418  rKp1 = ((Kbci+1.0)/(Kbcx+1.0));
2419  Iohm = ((Vrci+(Vtv*((Kbci-Kbcx)-log(rKp1))))/RCIatT);
2420  derf = (((IVO*RCIatT)*Iohm)/(1.0+(((0.5*IVO)*IHRCF)*sqrt(((Vrci*Vrci)+0.01)))));
2421  Irci = (Iohm/sqrt((1+(derf*derf))));
2422  }
2423  else
2424  {
2425  Irci = 0.0;
2426  }
2427  if (((model_.RBX)>0.0))
2428  {
2429  Irbx = (Vrbx/RBXatT);
2430  }
2431  else
2432  {
2433  Irbx = 0.0;
2434  }
2435  if (((model_.RBI)>0.0))
2436  {
2437  Irbi = ((Vrbi*qb)/RBIatT);
2438  }
2439  else
2440  {
2441  Irbi = 0.0;
2442  }
2443  if (((model_.RE)>0.0))
2444  {
2445  Ire = (Vre/REatT);
2446  }
2447  else
2448  {
2449  Ire = 0.0;
2450  }
2451  if (((model_.RBP)>0.0))
2452  {
2453  Irbp = ((Vrbp*qbp)/RBPatT);
2454  }
2455  else
2456  {
2457  Irbp = 0.0;
2458  }
2459  sgIf = ((Ifi>0.0)?1.0:0.0);
2460  rIf = ((Ifi*sgIf)*IITF);
2461  mIf = (rIf/(rIf+1.0));
2462  tff_exparg = ((Vbci*IVTF)/1.44);
2463  tff = (((model_.TF)*(1.0+((model_.QTF)*q1)))*(1.0+((((model_.XTF)*limexp<AdmsFadType>(tff_exparg))*(slTF+(mIf*mIf)))*sgIf)));
2464  Qbe = (((CJEatT*qdbe)*(model_.WBE))+((tff*Ifi)/qb));
2465  Qbex = ((CJEatT*qdbex)*(1.0-(model_.WBE)));
2466  Qbc = (((CJCatT*qdbc)+((model_.TR)*Iri))+((model_.QCO)*Kbci));
2467  Qbcx = ((model_.QCO)*Kbcx);
2468  Qbep = ((CJEPatT*qdbep)+((model_.TR)*Ifp));
2469  Qbeo = (Vbe*(model_.CBEO));
2470  Qbco = (Vbc*(model_.CBCO));
2471  Ith = (-(((((((((((Ibe*Vbei)+(Ibc*Vbci))+((Itzf-Itzr)*Vcei))+(Ibex*Vbex))+(Ibep*Vbep))+(Ircx*Vrcx))+(Irci*Vrci))+(Irbx*Vrbx))+(Irbi*Vrbi))+(Ire*Vre))+(Irbp*Vrbp)));
2472  if (((model_.RTH)>0.0))
2473  {
2474  Irth = (Vrth/(model_.RTH));
2475  }
2476  else
2477  {
2478  Irth = 0.0;
2479  }
2480  Qcth = (Vrth*(model_.CTH));
2481  // I(bi,ei) <+ (((M*dtype)*(Ibe+($simparam("gmin")*Vbei))))
2482  {
2483  AdmsFadType contribTemp;
2484  contribTemp= ((M*(model_.dtype))*(Ibe+(getDeviceOptions().gmin*Vbei)));
2485  staticContributions[admsNodeID_bi] += contribTemp;
2486  staticContributions[admsNodeID_ei] -= contribTemp;
2487 
2490  }
2491  // I(bx,ei) <+ (((M*dtype)*(Ibex+($simparam("gmin")*Vbex))))
2492  {
2493  AdmsFadType contribTemp;
2494  contribTemp= ((M*(model_.dtype))*(Ibex+(getDeviceOptions().gmin*Vbex)));
2495  staticContributions[admsNodeID_bx] += contribTemp;
2496  staticContributions[admsNodeID_ei] -= contribTemp;
2497 
2500  }
2501  // I(ci,ei) <+ (((M*dtype)*Itzf))
2502  {
2503  AdmsFadType contribTemp;
2504  contribTemp= ((M*(model_.dtype))*Itzf);
2505  staticContributions[admsNodeID_ci] += contribTemp;
2506  staticContributions[admsNodeID_ei] -= contribTemp;
2507 
2510  }
2511  // I(ei,ci) <+ (((M*dtype)*Itzr))
2512  {
2513  AdmsFadType contribTemp;
2514  contribTemp= ((M*(model_.dtype))*Itzr);
2515  staticContributions[admsNodeID_ei] += contribTemp;
2516  staticContributions[admsNodeID_ci] -= contribTemp;
2517 
2520  }
2521  // I(bi,ci) <+ (((M*dtype)*(Ibc+($simparam("gmin")*Vbci))))
2522  {
2523  AdmsFadType contribTemp;
2524  contribTemp= ((M*(model_.dtype))*(Ibc+(getDeviceOptions().gmin*Vbci)));
2525  staticContributions[admsNodeID_bi] += contribTemp;
2526  staticContributions[admsNodeID_ci] -= contribTemp;
2527 
2530  }
2531  // I(bx,bp) <+ (((M*dtype)*(Ibep+($simparam("gmin")*Vbep))))
2532  {
2533  AdmsFadType contribTemp;
2534  contribTemp= ((M*(model_.dtype))*(Ibep+(getDeviceOptions().gmin*Vbep)));
2535  staticContributions[admsNodeID_bx] += contribTemp;
2536  staticContributions[admsNodeID_bp] -= contribTemp;
2537 
2540  }
2541  if (((model_.RCX)>0))
2542  {
2543  // I(c,cx) <+ (((M*dtype)*Ircx))
2544  {
2545  AdmsFadType contribTemp;
2546  contribTemp= ((M*(model_.dtype))*Ircx);
2547  staticContributions[admsNodeID_c] += contribTemp;
2548  staticContributions[admsNodeID_cx] -= contribTemp;
2549 
2552  }
2553  }
2554  else
2555  {
2556  // V(c,cx) <+ (0.0)
2557  // do nothing at all
2558  }
2559  // I(cx,ci) <+ (((M*dtype)*(Irci+($simparam("gmin")*Vrci))))
2560  {
2561  AdmsFadType contribTemp;
2562  contribTemp= ((M*(model_.dtype))*(Irci+(getDeviceOptions().gmin*Vrci)));
2563  staticContributions[admsNodeID_cx] += contribTemp;
2564  staticContributions[admsNodeID_ci] -= contribTemp;
2565 
2568  }
2569  if (((model_.RBX)>0))
2570  {
2571  // I(b,bx) <+ (((M*dtype)*Irbx))
2572  {
2573  AdmsFadType contribTemp;
2574  contribTemp= ((M*(model_.dtype))*Irbx);
2575  staticContributions[admsNodeID_b] += contribTemp;
2576  staticContributions[admsNodeID_bx] -= contribTemp;
2577 
2580  }
2581  }
2582  else
2583  {
2584  // V(b,bx) <+ (0.0)
2585  // do nothing at all
2586  }
2587  // I(bx,bi) <+ (((M*dtype)*Irbi))
2588  {
2589  AdmsFadType contribTemp;
2590  contribTemp= ((M*(model_.dtype))*Irbi);
2591  staticContributions[admsNodeID_bx] += contribTemp;
2592  staticContributions[admsNodeID_bi] -= contribTemp;
2593 
2596  }
2597  if (((model_.RE)>0))
2598  {
2599  // I(e,ei) <+ (((M*dtype)*Ire))
2600  {
2601  AdmsFadType contribTemp;
2602  contribTemp= ((M*(model_.dtype))*Ire);
2603  staticContributions[admsNodeID_e] += contribTemp;
2604  staticContributions[admsNodeID_ei] -= contribTemp;
2605 
2608  }
2609  }
2610  else
2611  {
2612  // V(e,ei) <+ (0.0)
2613  // do nothing at all
2614  }
2615  // I(bp,cx) <+ (((M*dtype)*Irbp))
2616  {
2617  AdmsFadType contribTemp;
2618  contribTemp= ((M*(model_.dtype))*Irbp);
2619  staticContributions[admsNodeID_bp] += contribTemp;
2620  staticContributions[admsNodeID_cx] -= contribTemp;
2621 
2624  }
2625  // I(bi,ei) <+ (((M*dtype)*ddt(Qbe)))
2626  {
2627  AdmsFadType contribTemp;
2628  contribTemp= ((M*(model_.dtype))*(Qbe));
2629  dynamicContributions[admsNodeID_bi] += contribTemp;
2630  dynamicContributions[admsNodeID_ei] -= contribTemp;
2631 
2634  }
2635  // I(bx,ei) <+ (((M*dtype)*ddt(Qbex)))
2636  {
2637  AdmsFadType contribTemp;
2638  contribTemp= ((M*(model_.dtype))*(Qbex));
2639  dynamicContributions[admsNodeID_bx] += contribTemp;
2640  dynamicContributions[admsNodeID_ei] -= contribTemp;
2641 
2644  }
2645  // I(bi,ci) <+ (((M*dtype)*ddt(Qbc)))
2646  {
2647  AdmsFadType contribTemp;
2648  contribTemp= ((M*(model_.dtype))*(Qbc));
2649  dynamicContributions[admsNodeID_bi] += contribTemp;
2650  dynamicContributions[admsNodeID_ci] -= contribTemp;
2651 
2654  }
2655  // I(bi,cx) <+ (((M*dtype)*ddt(Qbcx)))
2656  {
2657  AdmsFadType contribTemp;
2658  contribTemp= ((M*(model_.dtype))*(Qbcx));
2659  dynamicContributions[admsNodeID_bi] += contribTemp;
2660  dynamicContributions[admsNodeID_cx] -= contribTemp;
2661 
2664  }
2665  // I(bx,bp) <+ (((M*dtype)*ddt(Qbep)))
2666  {
2667  AdmsFadType contribTemp;
2668  contribTemp= ((M*(model_.dtype))*(Qbep));
2669  dynamicContributions[admsNodeID_bx] += contribTemp;
2670  dynamicContributions[admsNodeID_bp] -= contribTemp;
2671 
2674  }
2675  // I(b,e) <+ (((M*dtype)*ddt(Qbeo)))
2676  {
2677  AdmsFadType contribTemp;
2678  contribTemp= ((M*(model_.dtype))*(Qbeo));
2679  dynamicContributions[admsNodeID_b] += contribTemp;
2680  dynamicContributions[admsNodeID_e] -= contribTemp;
2681 
2684  }
2685  // I(b,c) <+ (((M*dtype)*ddt(Qbco)))
2686  dynamicContributions[admsNodeID_b] += ((M*(model_.dtype))*(Qbco));
2687  dynamicContributions[admsNodeID_c] -= ((M*(model_.dtype))*(Qbco));
2688  // I(dt,GND) <+ (Irth)
2689  {
2690  AdmsFadType contribTemp;
2691  contribTemp= Irth;
2692  staticContributions[admsNodeID_dt] += contribTemp;
2693 
2695  }
2696  // I(dt,GND) <+ (Ith)
2697  {
2698  AdmsFadType contribTemp;
2699  contribTemp= Ith;
2700  staticContributions[admsNodeID_dt] += contribTemp;
2701 
2703  }
2704  // I(dt,GND) <+ (ddt(Qcth))
2705  {
2706  AdmsFadType contribTemp;
2707  contribTemp= (Qcth);
2708  dynamicContributions[admsNodeID_dt] += contribTemp;
2709 
2711  }
2712 
2713 
2714  // -- endcode converted from analog/code block
2715 #ifdef Xyce_DEBUG_DEVICE
2716  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
2717  {
2718  Xyce::dout() << " probeVars[admsProbeID_V_ci_ei] = "
2719  <<probeVars[admsProbeID_V_ci_ei].val() << std::endl;
2720  Xyce::dout() << " probeVars[admsProbeID_V_b_c] = "
2721  <<probeVars[admsProbeID_V_b_c].val() << std::endl;
2722  Xyce::dout() << " probeVars[admsProbeID_V_bp_cx] = "
2723  <<probeVars[admsProbeID_V_bp_cx].val() << std::endl;
2724  Xyce::dout() << " probeVars[admsProbeID_V_e_ei] = "
2725  <<probeVars[admsProbeID_V_e_ei].val() << std::endl;
2726  Xyce::dout() << " probeVars[admsProbeID_V_b_bx] = "
2727  <<probeVars[admsProbeID_V_b_bx].val() << std::endl;
2728  Xyce::dout() << " probeVars[admsProbeID_V_bx_bi] = "
2729  <<probeVars[admsProbeID_V_bx_bi].val() << std::endl;
2730  Xyce::dout() << " probeVars[admsProbeID_V_cx_ci] = "
2731  <<probeVars[admsProbeID_V_cx_ci].val() << std::endl;
2732  Xyce::dout() << " probeVars[admsProbeID_V_c_cx] = "
2733  <<probeVars[admsProbeID_V_c_cx].val() << std::endl;
2734  Xyce::dout() << " probeVars[admsProbeID_V_b_e] = "
2735  <<probeVars[admsProbeID_V_b_e].val() << std::endl;
2736  Xyce::dout() << " probeVars[admsProbeID_V_dt_GND] = "
2737  <<probeVars[admsProbeID_V_dt_GND].val() << std::endl;
2738  Xyce::dout() << " probeVars[admsProbeID_V_bx_bp] = "
2739  <<probeVars[admsProbeID_V_bx_bp].val() << std::endl;
2740  Xyce::dout() << " probeVars[admsProbeID_V_bi_cx] = "
2741  <<probeVars[admsProbeID_V_bi_cx].val() << std::endl;
2742  Xyce::dout() << " probeVars[admsProbeID_V_bx_ei] = "
2743  <<probeVars[admsProbeID_V_bx_ei].val() << std::endl;
2744  Xyce::dout() << " probeVars[admsProbeID_V_bi_ci] = "
2745  <<probeVars[admsProbeID_V_bi_ci].val() << std::endl;
2746  Xyce::dout() << " probeVars[admsProbeID_V_bi_ei] = "
2747  <<probeVars[admsProbeID_V_bi_ei].val() << std::endl;
2748  Xyce::dout() << " staticContributions[admsNodeID_c] = "
2749  <<staticContributions[admsNodeID_c].val() << std::endl;
2750  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
2751  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_c) << std::endl;
2752  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) << std::endl;
2753  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) << std::endl;
2754  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) << std::endl;
2755  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) << std::endl;
2756  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
2757  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) << std::endl;
2758  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_b_e) << std::endl;
2759  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) << std::endl;
2760  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) << std::endl;
2761  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) << std::endl;
2762  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) << std::endl;
2763  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) << std::endl;
2764  Xyce::dout() << " staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) << std::endl;
2765  Xyce::dout() << " dynamicContributions[admsNodeID_c] = "
2766  <<dynamicContributions[admsNodeID_c].val() << std::endl;
2767  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
2768  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c) << std::endl;
2769  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bp_cx) << std::endl;
2770  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_e_ei) << std::endl;
2771  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_bx) << std::endl;
2772  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bi) << std::endl;
2773  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
2774  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_c_cx) << std::endl;
2775  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_e) << std::endl;
2776  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND) << std::endl;
2777  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_bp) << std::endl;
2778  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_cx) << std::endl;
2779  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bx_ei) << std::endl;
2780  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ci) << std::endl;
2781  Xyce::dout() << " dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_c].dx(admsProbeID_V_bi_ei) << std::endl;
2782  Xyce::dout() << " Jdxp_static[admsNodeID_c] = "
2783  <<Jdxp_static[admsNodeID_c] << std::endl;
2784  Xyce::dout() << " Jdxp_dynamic[admsNodeID_c] = "
2785  <<Jdxp_dynamic[admsNodeID_c] << std::endl;
2786  Xyce::dout() << " staticContributions[admsNodeID_b] = "
2787  <<staticContributions[admsNodeID_b].val() << std::endl;
2788  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
2789  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_c) << std::endl;
2790  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) << std::endl;
2791  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) << std::endl;
2792  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) << std::endl;
2793  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) << std::endl;
2794  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
2795  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) << std::endl;
2796  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_b_e) << std::endl;
2797  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) << std::endl;
2798  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) << std::endl;
2799  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) << std::endl;
2800  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) << std::endl;
2801  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) << std::endl;
2802  Xyce::dout() << " staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) << std::endl;
2803  Xyce::dout() << " dynamicContributions[admsNodeID_b] = "
2804  <<dynamicContributions[admsNodeID_b].val() << std::endl;
2805  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
2806  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c) << std::endl;
2807  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bp_cx) << std::endl;
2808  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_e_ei) << std::endl;
2809  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_bx) << std::endl;
2810  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bi) << std::endl;
2811  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
2812  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_c_cx) << std::endl;
2813  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e) << std::endl;
2814  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND) << std::endl;
2815  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_bp) << std::endl;
2816  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_cx) << std::endl;
2817  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bx_ei) << std::endl;
2818  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ci) << std::endl;
2819  Xyce::dout() << " dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_b].dx(admsProbeID_V_bi_ei) << std::endl;
2820  Xyce::dout() << " Jdxp_static[admsNodeID_b] = "
2821  <<Jdxp_static[admsNodeID_b] << std::endl;
2822  Xyce::dout() << " Jdxp_dynamic[admsNodeID_b] = "
2823  <<Jdxp_dynamic[admsNodeID_b] << std::endl;
2824  Xyce::dout() << " staticContributions[admsNodeID_e] = "
2825  <<staticContributions[admsNodeID_e].val() << std::endl;
2826  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
2827  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_c) << std::endl;
2828  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) << std::endl;
2829  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) << std::endl;
2830  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) << std::endl;
2831  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) << std::endl;
2832  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
2833  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) << std::endl;
2834  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_b_e) << std::endl;
2835  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) << std::endl;
2836  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) << std::endl;
2837  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) << std::endl;
2838  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) << std::endl;
2839  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) << std::endl;
2840  Xyce::dout() << " staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) << std::endl;
2841  Xyce::dout() << " dynamicContributions[admsNodeID_e] = "
2842  <<dynamicContributions[admsNodeID_e].val() << std::endl;
2843  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
2844  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_c) << std::endl;
2845  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bp_cx) << std::endl;
2846  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_e_ei) << std::endl;
2847  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_bx) << std::endl;
2848  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bi) << std::endl;
2849  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
2850  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_c_cx) << std::endl;
2851  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e) << std::endl;
2852  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND) << std::endl;
2853  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_bp) << std::endl;
2854  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_cx) << std::endl;
2855  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bx_ei) << std::endl;
2856  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ci) << std::endl;
2857  Xyce::dout() << " dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_e].dx(admsProbeID_V_bi_ei) << std::endl;
2858  Xyce::dout() << " Jdxp_static[admsNodeID_e] = "
2859  <<Jdxp_static[admsNodeID_e] << std::endl;
2860  Xyce::dout() << " Jdxp_dynamic[admsNodeID_e] = "
2861  <<Jdxp_dynamic[admsNodeID_e] << std::endl;
2862  Xyce::dout() << " staticContributions[admsNodeID_dt] = "
2863  <<staticContributions[admsNodeID_dt].val() << std::endl;
2864  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) << std::endl;
2865  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) << std::endl;
2866  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) << std::endl;
2867  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) << std::endl;
2868  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) << std::endl;
2869  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) << std::endl;
2870  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) << std::endl;
2871  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) << std::endl;
2872  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) << std::endl;
2873  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) << std::endl;
2874  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) << std::endl;
2875  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) << std::endl;
2876  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) << std::endl;
2877  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) << std::endl;
2878  Xyce::dout() << " staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) << std::endl;
2879  Xyce::dout() << " dynamicContributions[admsNodeID_dt] = "
2880  <<dynamicContributions[admsNodeID_dt].val() << std::endl;
2881  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_ci_ei) << std::endl;
2882  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_c) << std::endl;
2883  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bp_cx) << std::endl;
2884  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei) << std::endl;
2885  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx) << std::endl;
2886  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bi) << std::endl;
2887  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_cx_ci) << std::endl;
2888  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx) << std::endl;
2889  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_b_e) << std::endl;
2890  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND) << std::endl;
2891  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_bp) << std::endl;
2892  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_cx) << std::endl;
2893  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bx_ei) << std::endl;
2894  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ci) << std::endl;
2895  Xyce::dout() << " dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_bi_ei) << std::endl;
2896  Xyce::dout() << " Jdxp_static[admsNodeID_dt] = "
2897  <<Jdxp_static[admsNodeID_dt] << std::endl;
2898  Xyce::dout() << " Jdxp_dynamic[admsNodeID_dt] = "
2899  <<Jdxp_dynamic[admsNodeID_dt] << std::endl;
2900  Xyce::dout() << " staticContributions[admsNodeID_cx] = "
2901  <<staticContributions[admsNodeID_cx].val() << std::endl;
2902  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) << std::endl;
2903  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) << std::endl;
2904  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) << std::endl;
2905  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) << std::endl;
2906  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) << std::endl;
2907  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) << std::endl;
2908  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) << std::endl;
2909  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) << std::endl;
2910  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) << std::endl;
2911  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) << std::endl;
2912  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) << std::endl;
2913  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) << std::endl;
2914  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) << std::endl;
2915  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) << std::endl;
2916  Xyce::dout() << " staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) << std::endl;
2917  Xyce::dout() << " dynamicContributions[admsNodeID_cx] = "
2918  <<dynamicContributions[admsNodeID_cx].val() << std::endl;
2919  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) << std::endl;
2920  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_c) << std::endl;
2921  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bp_cx) << std::endl;
2922  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_e_ei) << std::endl;
2923  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_bx) << std::endl;
2924  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bi) << std::endl;
2925  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) << std::endl;
2926  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx) << std::endl;
2927  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_b_e) << std::endl;
2928  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND) << std::endl;
2929  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp) << std::endl;
2930  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx) << std::endl;
2931  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bx_ei) << std::endl;
2932  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ci) << std::endl;
2933  Xyce::dout() << " dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_ei) << std::endl;
2934  Xyce::dout() << " Jdxp_static[admsNodeID_cx] = "
2935  <<Jdxp_static[admsNodeID_cx] << std::endl;
2936  Xyce::dout() << " Jdxp_dynamic[admsNodeID_cx] = "
2937  <<Jdxp_dynamic[admsNodeID_cx] << std::endl;
2938  Xyce::dout() << " staticContributions[admsNodeID_ci] = "
2939  <<staticContributions[admsNodeID_ci].val() << std::endl;
2940  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) << std::endl;
2941  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) << std::endl;
2942  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) << std::endl;
2943  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) << std::endl;
2944  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) << std::endl;
2945  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) << std::endl;
2946  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) << std::endl;
2947  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) << std::endl;
2948  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) << std::endl;
2949  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) << std::endl;
2950  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) << std::endl;
2951  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) << std::endl;
2952  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) << std::endl;
2953  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) << std::endl;
2954  Xyce::dout() << " staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) << std::endl;
2955  Xyce::dout() << " dynamicContributions[admsNodeID_ci] = "
2956  <<dynamicContributions[admsNodeID_ci].val() << std::endl;
2957  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) << std::endl;
2958  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_c) << std::endl;
2959  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bp_cx) << std::endl;
2960  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_e_ei) << std::endl;
2961  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_bx) << std::endl;
2962  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bi) << std::endl;
2963  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) << std::endl;
2964  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_c_cx) << std::endl;
2965  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_b_e) << std::endl;
2966  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND) << std::endl;
2967  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_bp) << std::endl;
2968  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_cx) << std::endl;
2969  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bx_ei) << std::endl;
2970  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci) << std::endl;
2971  Xyce::dout() << " dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei) << std::endl;
2972  Xyce::dout() << " Jdxp_static[admsNodeID_ci] = "
2973  <<Jdxp_static[admsNodeID_ci] << std::endl;
2974  Xyce::dout() << " Jdxp_dynamic[admsNodeID_ci] = "
2975  <<Jdxp_dynamic[admsNodeID_ci] << std::endl;
2976  Xyce::dout() << " staticContributions[admsNodeID_bx] = "
2977  <<staticContributions[admsNodeID_bx].val() << std::endl;
2978  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) << std::endl;
2979  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) << std::endl;
2980  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) << std::endl;
2981  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) << std::endl;
2982  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) << std::endl;
2983  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) << std::endl;
2984  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) << std::endl;
2985  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) << std::endl;
2986  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) << std::endl;
2987  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) << std::endl;
2988  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) << std::endl;
2989  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) << std::endl;
2990  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) << std::endl;
2991  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) << std::endl;
2992  Xyce::dout() << " staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) << std::endl;
2993  Xyce::dout() << " dynamicContributions[admsNodeID_bx] = "
2994  <<dynamicContributions[admsNodeID_bx].val() << std::endl;
2995  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_ci_ei) << std::endl;
2996  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_c) << std::endl;
2997  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bp_cx) << std::endl;
2998  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_e_ei) << std::endl;
2999  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx) << std::endl;
3000  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bi) << std::endl;
3001  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_cx_ci) << std::endl;
3002  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_c_cx) << std::endl;
3003  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_b_e) << std::endl;
3004  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND) << std::endl;
3005  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp) << std::endl;
3006  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_cx) << std::endl;
3007  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei) << std::endl;
3008  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci) << std::endl;
3009  Xyce::dout() << " dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ei) << std::endl;
3010  Xyce::dout() << " Jdxp_static[admsNodeID_bx] = "
3011  <<Jdxp_static[admsNodeID_bx] << std::endl;
3012  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bx] = "
3013  <<Jdxp_dynamic[admsNodeID_bx] << std::endl;
3014  Xyce::dout() << " staticContributions[admsNodeID_bi] = "
3015  <<staticContributions[admsNodeID_bi].val() << std::endl;
3016  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) << std::endl;
3017  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) << std::endl;
3018  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) << std::endl;
3019  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) << std::endl;
3020  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) << std::endl;
3021  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) << std::endl;
3022  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) << std::endl;
3023  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) << std::endl;
3024  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) << std::endl;
3025  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) << std::endl;
3026  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) << std::endl;
3027  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) << std::endl;
3028  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) << std::endl;
3029  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) << std::endl;
3030  Xyce::dout() << " staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) << std::endl;
3031  Xyce::dout() << " dynamicContributions[admsNodeID_bi] = "
3032  <<dynamicContributions[admsNodeID_bi].val() << std::endl;
3033  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) << std::endl;
3034  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_c) << std::endl;
3035  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bp_cx) << std::endl;
3036  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_e_ei) << std::endl;
3037  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_bx) << std::endl;
3038  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi) << std::endl;
3039  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) << std::endl;
3040  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_c_cx) << std::endl;
3041  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_b_e) << std::endl;
3042  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND) << std::endl;
3043  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bp) << std::endl;
3044  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx) << std::endl;
3045  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bx_ei) << std::endl;
3046  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci) << std::endl;
3047  Xyce::dout() << " dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei) << std::endl;
3048  Xyce::dout() << " Jdxp_static[admsNodeID_bi] = "
3049  <<Jdxp_static[admsNodeID_bi] << std::endl;
3050  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bi] = "
3051  <<Jdxp_dynamic[admsNodeID_bi] << std::endl;
3052  Xyce::dout() << " staticContributions[admsNodeID_ei] = "
3053  <<staticContributions[admsNodeID_ei].val() << std::endl;
3054  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) << std::endl;
3055  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) << std::endl;
3056  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) << std::endl;
3057  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) << std::endl;
3058  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) << std::endl;
3059  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) << std::endl;
3060  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) << std::endl;
3061  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) << std::endl;
3062  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) << std::endl;
3063  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) << std::endl;
3064  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) << std::endl;
3065  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) << std::endl;
3066  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) << std::endl;
3067  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) << std::endl;
3068  Xyce::dout() << " staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) << std::endl;
3069  Xyce::dout() << " dynamicContributions[admsNodeID_ei] = "
3070  <<dynamicContributions[admsNodeID_ei].val() << std::endl;
3071  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) << std::endl;
3072  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_c) << std::endl;
3073  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bp_cx) << std::endl;
3074  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei) << std::endl;
3075  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_bx) << std::endl;
3076  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bi) << std::endl;
3077  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) << std::endl;
3078  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_c_cx) << std::endl;
3079  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_b_e) << std::endl;
3080  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND) << std::endl;
3081  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_bp) << std::endl;
3082  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_cx) << std::endl;
3083  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei) << std::endl;
3084  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci) << std::endl;
3085  Xyce::dout() << " dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ei) << std::endl;
3086  Xyce::dout() << " Jdxp_static[admsNodeID_ei] = "
3087  <<Jdxp_static[admsNodeID_ei] << std::endl;
3088  Xyce::dout() << " Jdxp_dynamic[admsNodeID_ei] = "
3089  <<Jdxp_dynamic[admsNodeID_ei] << std::endl;
3090  Xyce::dout() << " staticContributions[admsNodeID_bp] = "
3091  <<staticContributions[admsNodeID_bp].val() << std::endl;
3092  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) << std::endl;
3093  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) << std::endl;
3094  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) << std::endl;
3095  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) << std::endl;
3096  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) << std::endl;
3097  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) << std::endl;
3098  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) << std::endl;
3099  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) << std::endl;
3100  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) << std::endl;
3101  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) << std::endl;
3102  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) << std::endl;
3103  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) << std::endl;
3104  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) << std::endl;
3105  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) << std::endl;
3106  Xyce::dout() << " staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) = " <<staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) << std::endl;
3107  Xyce::dout() << " dynamicContributions[admsNodeID_bp] = "
3108  <<dynamicContributions[admsNodeID_bp].val() << std::endl;
3109  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_ci_ei) << std::endl;
3110  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_c) << std::endl;
3111  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx) << std::endl;
3112  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_e_ei) << std::endl;
3113  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_bx) << std::endl;
3114  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bi) << std::endl;
3115  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_cx_ci) << std::endl;
3116  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_c_cx) << std::endl;
3117  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_b_e) << std::endl;
3118  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND) << std::endl;
3119  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp) << std::endl;
3120  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_cx) << std::endl;
3121  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_ei) << std::endl;
3122  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci) << std::endl;
3123  Xyce::dout() << " dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) = " <<dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ei) << std::endl;
3124  Xyce::dout() << " Jdxp_static[admsNodeID_bp] = "
3125  <<Jdxp_static[admsNodeID_bp] << std::endl;
3126  Xyce::dout() << " Jdxp_dynamic[admsNodeID_bp] = "
3127  <<Jdxp_dynamic[admsNodeID_bp] << std::endl;
3128 
3129  if (!origFlag)
3130  {
3131  Xyce::dout() << "This step was limited by this device." << std::endl;
3132  Xyce::dout() << " Vbei_limited = " << Vbei_limited << " _orig = " << Vbei_orig << " diff = " << Vbei_limited - Vbei_orig << std::endl;
3133  Xyce::dout() << " Vbci_limited = " << Vbci_limited << " _orig = " << Vbci_orig << " diff = " << Vbci_limited - Vbci_orig << std::endl;
3134  Xyce::dout() << " Vbex_limited = " << Vbex_limited << " _orig = " << Vbex_orig << " diff = " << Vbex_limited - Vbex_orig << std::endl;
3135  Xyce::dout() << " Vbcx_limited = " << Vbcx_limited << " _orig = " << Vbcx_orig << " diff = " << Vbcx_limited - Vbcx_orig << std::endl;
3136  Xyce::dout() << " Vbep_limited = " << Vbep_limited << " _orig = " << Vbep_orig << " diff = " << Vbep_limited - Vbep_orig << std::endl;
3137  Xyce::dout() << " Vrth_limited = " << Vrth_limited << " _orig = " << Vrth_orig << " diff = " << Vrth_limited - Vrth_orig << std::endl;
3138  }
3139  }
3140 #endif // Xyce_DEBUG_DEVICE
3141  return true;
3142 }
3143 
3144 //-----------------------------------------------------------------------------
3145 // Function : Instance::loadDAEdFdx
3146 // Purpose :
3147 // Special Notes : Load the dFdx ("static jacobian") matrix
3148 // Scope : public
3149 // Creator : admsXml
3150 // Creation Date :
3151 //-----------------------------------------------------------------------------
3153 {
3154  bool bsuccess = true;
3155  N_LAS_Matrix * dFdxMatPtr = extData.dFdxMatrixPtr;
3156 
3157 #ifdef Xyce_DEBUG_DEVICE
3158  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3159  {
3160  Xyce::dout() << subsection_divider << std::endl;
3161  Xyce::dout() << "ADMSvbic::Instance::loadDAEdFdx (" << getName() << "):" << std::endl;
3162  }
3163 #endif
3165 
3166 
3167 #ifdef Xyce_DEBUG_DEVICE
3168  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3169  {
3171  }
3172 #endif
3173  (*f_bi_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei);
3174 
3175 
3176 #ifdef Xyce_DEBUG_DEVICE
3177  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3178  {
3179  Xyce::dout() << " (*f_bi_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei)<< std::endl;
3180  }
3181 #endif
3183 
3184 
3185 #ifdef Xyce_DEBUG_DEVICE
3186  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3187  {
3188  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;
3189  }
3190 #endif
3192 
3193 
3194 #ifdef Xyce_DEBUG_DEVICE
3195  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3196  {
3198  }
3199 #endif
3200  (*f_bi_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND);
3201 
3202 
3203 #ifdef Xyce_DEBUG_DEVICE
3204  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3205  {
3206  Xyce::dout() << " (*f_bi_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND)<< std::endl;
3207  }
3208 #endif
3209  (*f_ei_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND);
3210 
3211 
3212 #ifdef Xyce_DEBUG_DEVICE
3213  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3214  {
3215  Xyce::dout() << " (*f_ei_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND)<< std::endl;
3216  }
3217 #endif
3219 
3220 
3221 #ifdef Xyce_DEBUG_DEVICE
3222  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3223  {
3225  }
3226 #endif
3228 
3229 
3230 #ifdef Xyce_DEBUG_DEVICE
3231  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3232  {
3233  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;
3234  }
3235 #endif
3236  (*f_ei_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei);
3237 
3238 
3239 #ifdef Xyce_DEBUG_DEVICE
3240  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3241  {
3242  Xyce::dout() << " (*f_ei_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei)<< std::endl;
3243  }
3244 #endif
3245  (*f_bx_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND);
3246 
3247 
3248 #ifdef Xyce_DEBUG_DEVICE
3249  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3250  {
3251  Xyce::dout() << " (*f_bx_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND)<< std::endl;
3252  }
3253 #endif
3255 
3256 
3257 #ifdef Xyce_DEBUG_DEVICE
3258  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3259  {
3261  }
3262 #endif
3264 
3265 
3266 #ifdef Xyce_DEBUG_DEVICE
3267  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3268  {
3269  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;
3270  }
3271 #endif
3272  (*f_ei_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci);
3273 
3274 
3275 #ifdef Xyce_DEBUG_DEVICE
3276  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3277  {
3278  Xyce::dout() << " (*f_ei_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci)<< std::endl;
3279  }
3280 #endif
3281  (*f_ci_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei);
3282 
3283 
3284 #ifdef Xyce_DEBUG_DEVICE
3285  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3286  {
3287  Xyce::dout() << " (*f_ci_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ei)<< std::endl;
3288  }
3289 #endif
3290  (*f_ci_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND);
3291 
3292 
3293 #ifdef Xyce_DEBUG_DEVICE
3294  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3295  {
3296  Xyce::dout() << " (*f_ci_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND)<< std::endl;
3297  }
3298 #endif
3299  (*f_bi_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci);
3300 
3301 
3302 #ifdef Xyce_DEBUG_DEVICE
3303  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3304  {
3305  Xyce::dout() << " (*f_bi_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci)<< std::endl;
3306  }
3307 #endif
3308  (*f_bx_Equ_bp_Node_Ptr) += -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp);
3309 
3310 
3311 #ifdef Xyce_DEBUG_DEVICE
3312  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3313  {
3314  Xyce::dout() << " (*f_bx_Equ_bp_Node_Ptr) += " << -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp)<< std::endl;
3315  }
3316 #endif
3317  (*f_bp_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
3318 
3319 
3320 #ifdef Xyce_DEBUG_DEVICE
3321  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3322  {
3323  Xyce::dout() << " (*f_bp_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3324  }
3325 #endif
3327 
3328 
3329 #ifdef Xyce_DEBUG_DEVICE
3330  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3331  {
3332  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;
3333  }
3334 #endif
3335  (*f_bp_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND);
3336 
3337 
3338 #ifdef Xyce_DEBUG_DEVICE
3339  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3340  {
3341  Xyce::dout() << " (*f_bp_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND)<< std::endl;
3342  }
3343 #endif
3344  (*f_c_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND);
3345 
3346 
3347 #ifdef Xyce_DEBUG_DEVICE
3348  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3349  {
3350  Xyce::dout() << " (*f_c_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_c].dx(admsProbeID_V_dt_GND)<< std::endl;
3351  }
3352 #endif
3353  (*f_cx_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND);
3354 
3355 
3356 #ifdef Xyce_DEBUG_DEVICE
3357  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3358  {
3359  Xyce::dout() << " (*f_cx_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND)<< std::endl;
3360  }
3361 #endif
3362  (*f_c_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx);
3363 
3364 
3365 #ifdef Xyce_DEBUG_DEVICE
3366  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3367  {
3368  Xyce::dout() << " (*f_c_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx)<< std::endl;
3369  }
3370 #endif
3371  (*f_c_Equ_cx_Node_Ptr) += -staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx);
3372 
3373 
3374 #ifdef Xyce_DEBUG_DEVICE
3375  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3376  {
3377  Xyce::dout() << " (*f_c_Equ_cx_Node_Ptr) += " << -staticContributions[admsNodeID_c].dx(admsProbeID_V_c_cx)<< std::endl;
3378  }
3379 #endif
3380  (*f_cx_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx);
3381 
3382 
3383 #ifdef Xyce_DEBUG_DEVICE
3384  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3385  {
3386  Xyce::dout() << " (*f_cx_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_cx)<< std::endl;
3387  }
3388 #endif
3390 
3391 
3392 #ifdef Xyce_DEBUG_DEVICE
3393  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3394  {
3396  }
3397 #endif
3399 
3400 
3401 #ifdef Xyce_DEBUG_DEVICE
3402  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3403  {
3404  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;
3405  }
3406 #endif
3408 
3409 
3410 #ifdef Xyce_DEBUG_DEVICE
3411  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3412  {
3413  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;
3414  }
3415 #endif
3417 
3418 
3419 #ifdef Xyce_DEBUG_DEVICE
3420  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3421  {
3422  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;
3423  }
3424 #endif
3425  (*f_b_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND);
3426 
3427 
3428 #ifdef Xyce_DEBUG_DEVICE
3429  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3430  {
3431  Xyce::dout() << " (*f_b_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_b].dx(admsProbeID_V_dt_GND)<< std::endl;
3432  }
3433 #endif
3434  (*f_b_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx);
3435 
3436 
3437 #ifdef Xyce_DEBUG_DEVICE
3438  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3439  {
3440  Xyce::dout() << " (*f_b_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx)<< std::endl;
3441  }
3442 #endif
3443  (*f_b_Equ_bx_Node_Ptr) += -staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx);
3444 
3445 
3446 #ifdef Xyce_DEBUG_DEVICE
3447  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3448  {
3449  Xyce::dout() << " (*f_b_Equ_bx_Node_Ptr) += " << -staticContributions[admsNodeID_b].dx(admsProbeID_V_b_bx)<< std::endl;
3450  }
3451 #endif
3452  (*f_bx_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx);
3453 
3454 
3455 #ifdef Xyce_DEBUG_DEVICE
3456  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3457  {
3458  Xyce::dout() << " (*f_bx_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_bx].dx(admsProbeID_V_b_bx)<< std::endl;
3459  }
3460 #endif
3462 
3463 
3464 #ifdef Xyce_DEBUG_DEVICE
3465  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3466  {
3468  }
3469 #endif
3470  (*f_bx_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
3471 
3472 
3473 #ifdef Xyce_DEBUG_DEVICE
3474  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3475  {
3476  Xyce::dout() << " (*f_bx_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
3477  }
3478 #endif
3479  (*f_bi_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi);
3480 
3481 
3482 #ifdef Xyce_DEBUG_DEVICE
3483  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3484  {
3485  Xyce::dout() << " (*f_bi_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_bi].dx(admsProbeID_V_bx_bi)<< std::endl;
3486  }
3487 #endif
3488  (*f_e_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND);
3489 
3490 
3491 #ifdef Xyce_DEBUG_DEVICE
3492  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3493  {
3494  Xyce::dout() << " (*f_e_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_e].dx(admsProbeID_V_dt_GND)<< std::endl;
3495  }
3496 #endif
3497  (*f_e_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei);
3498 
3499 
3500 #ifdef Xyce_DEBUG_DEVICE
3501  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3502  {
3503  Xyce::dout() << " (*f_e_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei)<< std::endl;
3504  }
3505 #endif
3506  (*f_e_Equ_ei_Node_Ptr) += -staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei);
3507 
3508 
3509 #ifdef Xyce_DEBUG_DEVICE
3510  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3511  {
3512  Xyce::dout() << " (*f_e_Equ_ei_Node_Ptr) += " << -staticContributions[admsNodeID_e].dx(admsProbeID_V_e_ei)<< std::endl;
3513  }
3514 #endif
3515  (*f_ei_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei);
3516 
3517 
3518 #ifdef Xyce_DEBUG_DEVICE
3519  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3520  {
3521  Xyce::dout() << " (*f_ei_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_ei].dx(admsProbeID_V_e_ei)<< std::endl;
3522  }
3523 #endif
3524  (*f_bp_Equ_bi_Node_Ptr) += +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3525 
3526 
3527 #ifdef Xyce_DEBUG_DEVICE
3528  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3529  {
3530  Xyce::dout() << " (*f_bp_Equ_bi_Node_Ptr) += " << +staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3531  }
3532 #endif
3533  (*f_bp_Equ_ci_Node_Ptr) += -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3534 
3535 
3536 #ifdef Xyce_DEBUG_DEVICE
3537  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3538  {
3539  Xyce::dout() << " (*f_bp_Equ_ci_Node_Ptr) += " << -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3540  }
3541 #endif
3542  (*f_cx_Equ_bx_Node_Ptr) += +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp);
3543 
3544 
3545 #ifdef Xyce_DEBUG_DEVICE
3546  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3547  {
3548  Xyce::dout() << " (*f_cx_Equ_bx_Node_Ptr) += " << +staticContributions[admsNodeID_cx].dx(admsProbeID_V_bx_bp)<< std::endl;
3549  }
3550 #endif
3552 
3553 
3554 #ifdef Xyce_DEBUG_DEVICE
3555  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3556  {
3557  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;
3558  }
3559 #endif
3560  (*f_bp_Equ_cx_Node_Ptr) += -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx);
3561 
3562 
3563 #ifdef Xyce_DEBUG_DEVICE
3564  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3565  {
3566  Xyce::dout() << " (*f_bp_Equ_cx_Node_Ptr) += " << -staticContributions[admsNodeID_bp].dx(admsProbeID_V_bp_cx)<< std::endl;
3567  }
3568 #endif
3569  (*f_dt_Equ_dt_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND);
3570 
3571 
3572 #ifdef Xyce_DEBUG_DEVICE
3573  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3574  {
3575  Xyce::dout() << " (*f_dt_Equ_dt_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND)<< std::endl;
3576  }
3577 #endif
3579 
3580 
3581 #ifdef Xyce_DEBUG_DEVICE
3582  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3583  {
3584  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;
3585  }
3586 #endif
3588 
3589 
3590 #ifdef Xyce_DEBUG_DEVICE
3591  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3592  {
3594  }
3595 #endif
3596  (*f_dt_Equ_e_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei);
3597 
3598 
3599 #ifdef Xyce_DEBUG_DEVICE
3600  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3601  {
3602  Xyce::dout() << " (*f_dt_Equ_e_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_e_ei)<< std::endl;
3603  }
3604 #endif
3606 
3607 
3608 #ifdef Xyce_DEBUG_DEVICE
3609  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3610  {
3612  }
3613 #endif
3615 
3616 
3617 #ifdef Xyce_DEBUG_DEVICE
3618  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3619  {
3621  }
3622 #endif
3624 
3625 
3626 #ifdef Xyce_DEBUG_DEVICE
3627  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3628  {
3630  }
3631 #endif
3632  (*f_dt_Equ_b_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx);
3633 
3634 
3635 #ifdef Xyce_DEBUG_DEVICE
3636  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3637  {
3638  Xyce::dout() << " (*f_dt_Equ_b_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_b_bx)<< std::endl;
3639  }
3640 #endif
3642 
3643 
3644 #ifdef Xyce_DEBUG_DEVICE
3645  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3646  {
3648  }
3649 #endif
3650  (*f_dt_Equ_c_Node_Ptr) += +staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx);
3651 
3652 
3653 #ifdef Xyce_DEBUG_DEVICE
3654  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3655  {
3656  Xyce::dout() << " (*f_dt_Equ_c_Node_Ptr) += " << +staticContributions[admsNodeID_dt].dx(admsProbeID_V_c_cx)<< std::endl;
3657  }
3658 #endif
3659 
3660 
3661  return bsuccess;
3662 }
3663 
3664 
3665 //-----------------------------------------------------------------------------
3666 // Function : Instance::loadDAEdQdx
3667 // Purpose :
3668 // Special Notes : Load the dQdx ("dynamic jacobian") matrix
3669 // Scope : public
3670 // Creator : admsXml
3671 // Creation Date :
3672 //-----------------------------------------------------------------------------
3674 {
3675  bool bsuccess = true;
3676  N_LAS_Matrix * dQdxMatPtr = extData.dQdxMatrixPtr;
3677 
3678 #ifdef Xyce_DEBUG_DEVICE
3679  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3680  {
3681  Xyce::dout() << subsection_divider << std::endl;
3682  Xyce::dout() << "ADMSvbic::Instance::loadDAEdQdx (" << getName() << "):" << std::endl;
3683  }
3684 #endif
3686 
3687 
3688 #ifdef Xyce_DEBUG_DEVICE
3689  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3690  {
3692  }
3693 #endif
3694  (*q_bi_Equ_ei_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei);
3695 
3696 
3697 #ifdef Xyce_DEBUG_DEVICE
3698  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3699  {
3700  Xyce::dout() << " (*q_bi_Equ_ei_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ei)<< std::endl;
3701  }
3702 #endif
3704 
3705 
3706 #ifdef Xyce_DEBUG_DEVICE
3707  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3708  {
3709  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;
3710  }
3711 #endif
3713 
3714 
3715 #ifdef Xyce_DEBUG_DEVICE
3716  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3717  {
3718  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;
3719  }
3720 #endif
3721  (*q_bi_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND);
3722 
3723 
3724 #ifdef Xyce_DEBUG_DEVICE
3725  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3726  {
3727  Xyce::dout() << " (*q_bi_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_dt_GND)<< std::endl;
3728  }
3729 #endif
3730  (*q_ei_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND);
3731 
3732 
3733 #ifdef Xyce_DEBUG_DEVICE
3734  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3735  {
3736  Xyce::dout() << " (*q_ei_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_dt_GND)<< std::endl;
3737  }
3738 #endif
3740 
3741 
3742 #ifdef Xyce_DEBUG_DEVICE
3743  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3744  {
3745  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;
3746  }
3747 #endif
3748  (*q_bx_Equ_ei_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei);
3749 
3750 
3751 #ifdef Xyce_DEBUG_DEVICE
3752  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3753  {
3754  Xyce::dout() << " (*q_bx_Equ_ei_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_ei)<< std::endl;
3755  }
3756 #endif
3757  (*q_ei_Equ_bx_Node_Ptr) += +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei);
3758 
3759 
3760 #ifdef Xyce_DEBUG_DEVICE
3761  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3762  {
3763  Xyce::dout() << " (*q_ei_Equ_bx_Node_Ptr) += " << +dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bx_ei)<< std::endl;
3764  }
3765 #endif
3766  (*q_bx_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND);
3767 
3768 
3769 #ifdef Xyce_DEBUG_DEVICE
3770  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3771  {
3772  Xyce::dout() << " (*q_bx_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_dt_GND)<< std::endl;
3773  }
3774 #endif
3775  (*q_ci_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci);
3776 
3777 
3778 #ifdef Xyce_DEBUG_DEVICE
3779  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3780  {
3781  Xyce::dout() << " (*q_ci_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci)<< std::endl;
3782  }
3783 #endif
3784  (*q_ci_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci);
3785 
3786 
3787 #ifdef Xyce_DEBUG_DEVICE
3788  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3789  {
3790  Xyce::dout() << " (*q_ci_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_bi_ci)<< std::endl;
3791  }
3792 #endif
3793  (*q_ei_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci);
3794 
3795 
3796 #ifdef Xyce_DEBUG_DEVICE
3797  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3798  {
3799  Xyce::dout() << " (*q_ei_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_ei].dx(admsProbeID_V_bi_ci)<< std::endl;
3800  }
3801 #endif
3802  (*q_ci_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND);
3803 
3804 
3805 #ifdef Xyce_DEBUG_DEVICE
3806  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3807  {
3808  Xyce::dout() << " (*q_ci_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_ci].dx(admsProbeID_V_dt_GND)<< std::endl;
3809  }
3810 #endif
3811  (*q_bi_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci);
3812 
3813 
3814 #ifdef Xyce_DEBUG_DEVICE
3815  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3816  {
3817  Xyce::dout() << " (*q_bi_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_ci)<< std::endl;
3818  }
3819 #endif
3820  (*q_bx_Equ_bp_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp);
3821 
3822 
3823 #ifdef Xyce_DEBUG_DEVICE
3824  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3825  {
3826  Xyce::dout() << " (*q_bx_Equ_bp_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bx_bp)<< std::endl;
3827  }
3828 #endif
3829  (*q_bp_Equ_bx_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
3830 
3831 
3832 #ifdef Xyce_DEBUG_DEVICE
3833  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3834  {
3835  Xyce::dout() << " (*q_bp_Equ_bx_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3836  }
3837 #endif
3838  (*q_bp_Equ_bp_Node_Ptr) += -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp);
3839 
3840 
3841 #ifdef Xyce_DEBUG_DEVICE
3842  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3843  {
3844  Xyce::dout() << " (*q_bp_Equ_bp_Node_Ptr) += " << -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bx_bp)<< std::endl;
3845  }
3846 #endif
3847  (*q_bp_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND);
3848 
3849 
3850 #ifdef Xyce_DEBUG_DEVICE
3851  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3852  {
3853  Xyce::dout() << " (*q_bp_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_dt_GND)<< std::endl;
3854  }
3855 #endif
3856  (*q_cx_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND);
3857 
3858 
3859 #ifdef Xyce_DEBUG_DEVICE
3860  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3861  {
3862  Xyce::dout() << " (*q_cx_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_dt_GND)<< std::endl;
3863  }
3864 #endif
3865  (*q_c_Equ_c_Node_Ptr) += -dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c);
3866 
3867 
3868 #ifdef Xyce_DEBUG_DEVICE
3869  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3870  {
3871  Xyce::dout() << " (*q_c_Equ_c_Node_Ptr) += " << -dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c)<< std::endl;
3872  }
3873 #endif
3874  (*q_cx_Equ_cx_Node_Ptr) += -dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx);
3875 
3876 
3877 #ifdef Xyce_DEBUG_DEVICE
3878  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3879  {
3880  Xyce::dout() << " (*q_cx_Equ_cx_Node_Ptr) += " << -dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx)<< std::endl;
3881  }
3882 #endif
3883  (*q_cx_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx);
3884 
3885 
3886 #ifdef Xyce_DEBUG_DEVICE
3887  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3888  {
3889  Xyce::dout() << " (*q_cx_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_cx].dx(admsProbeID_V_bi_cx)<< std::endl;
3890  }
3891 #endif
3893 
3894 
3895 #ifdef Xyce_DEBUG_DEVICE
3896  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3897  {
3898  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;
3899  }
3900 #endif
3901  (*q_bx_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
3902 
3903 
3904 #ifdef Xyce_DEBUG_DEVICE
3905  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3906  {
3907  Xyce::dout() << " (*q_bx_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
3908  }
3909 #endif
3910  (*q_bx_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci);
3911 
3912 
3913 #ifdef Xyce_DEBUG_DEVICE
3914  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3915  {
3916  Xyce::dout() << " (*q_bx_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bx].dx(admsProbeID_V_bi_ci)<< std::endl;
3917  }
3918 #endif
3919  (*q_e_Equ_e_Node_Ptr) += -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e);
3920 
3921 
3922 #ifdef Xyce_DEBUG_DEVICE
3923  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3924  {
3925  Xyce::dout() << " (*q_e_Equ_e_Node_Ptr) += " << -dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e)<< std::endl;
3926  }
3927 #endif
3928  (*q_bp_Equ_bi_Node_Ptr) += +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3929 
3930 
3931 #ifdef Xyce_DEBUG_DEVICE
3932  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3933  {
3934  Xyce::dout() << " (*q_bp_Equ_bi_Node_Ptr) += " << +dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3935  }
3936 #endif
3937  (*q_bp_Equ_ci_Node_Ptr) += -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci);
3938 
3939 
3940 #ifdef Xyce_DEBUG_DEVICE
3941  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3942  {
3943  Xyce::dout() << " (*q_bp_Equ_ci_Node_Ptr) += " << -dynamicContributions[admsNodeID_bp].dx(admsProbeID_V_bi_ci)<< std::endl;
3944  }
3945 #endif
3946  (*q_bi_Equ_cx_Node_Ptr) += -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx);
3947 
3948 
3949 #ifdef Xyce_DEBUG_DEVICE
3950  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3951  {
3952  Xyce::dout() << " (*q_bi_Equ_cx_Node_Ptr) += " << -dynamicContributions[admsNodeID_bi].dx(admsProbeID_V_bi_cx)<< std::endl;
3953  }
3954 #endif
3955  (*q_b_Equ_e_Node_Ptr) += -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e);
3956 
3957 
3958 #ifdef Xyce_DEBUG_DEVICE
3959  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3960  {
3961  Xyce::dout() << " (*q_b_Equ_e_Node_Ptr) += " << -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_e)<< std::endl;
3962  }
3963 #endif
3964  (*q_e_Equ_b_Node_Ptr) += +dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e);
3965 
3966 
3967 #ifdef Xyce_DEBUG_DEVICE
3968  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3969  {
3970  Xyce::dout() << " (*q_e_Equ_b_Node_Ptr) += " << +dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_e)<< std::endl;
3971  }
3972 #endif
3973  (*q_b_Equ_c_Node_Ptr) += -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c);
3974 
3975 
3976 #ifdef Xyce_DEBUG_DEVICE
3977  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3978  {
3979  Xyce::dout() << " (*q_b_Equ_c_Node_Ptr) += " << -dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_c)<< std::endl;
3980  }
3981 #endif
3982  (*q_c_Equ_b_Node_Ptr) += +dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c);
3983 
3984 
3985 #ifdef Xyce_DEBUG_DEVICE
3986  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3987  {
3988  Xyce::dout() << " (*q_c_Equ_b_Node_Ptr) += " << +dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_c)<< std::endl;
3989  }
3990 #endif
3991  (*q_dt_Equ_dt_Node_Ptr) += +dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND);
3992 
3993 
3994 #ifdef Xyce_DEBUG_DEVICE
3995  if (getDeviceOptions().debugLevel > 0 && getSolverState().debugTimeFlag)
3996  {
3997  Xyce::dout() << " (*q_dt_Equ_dt_Node_Ptr) += " << +dynamicContributions[admsNodeID_dt].dx(admsProbeID_V_dt_GND)<< std::endl;
3998  }
3999 #endif
4000 
4001 
4002  return bsuccess;
4003 }
4004 
4005 //-----------------------------------------------------------------------------
4006 // Function : Instance::updateTemperature
4007 // Purpose : Set temperature and update any parameters that depend on it
4008 // Special Notes : In Xyce ADMS, we'll simply copy the temperature, which is
4009 // in Kelvin, to our "admsTemperature" variable, which needs
4010 // to be in Celsius.
4011 // Scope : public
4012 // Creator : admsXml
4013 // Creation Date :
4014 //-----------------------------------------------------------------------------
4015 bool Instance::updateTemperature(const double & temperatureTemp)
4016 {
4017 
4018  admsTemperature = temperatureTemp;
4019  adms_vt_nom = adms_vt(temperatureTemp);
4020 
4021  return true;
4022 }
4023 
4024 // Class Model
4025 //-----------------------------------------------------------------------------
4026 // Function : Model::processParams
4027 // Purpose :
4028 // Special Notes :
4029 // Scope : public
4030 // Creator : admsXml
4031 // Creation Date :
4032 //-----------------------------------------------------------------------------
4034 {
4035 
4036  // Now we need to check that any parameters are within their ranges as
4037  // specified in the verilog:
4038 
4039  // Parameter RCX : [ 0.0, (+inf) [
4040  if ( (!((RCX >=0.0))) )
4041  {
4042  UserError0(*this) << "ADMSvbic: Parameter RCX value " << RCX << " out of range [ 0.0, (+inf) [";
4043  }
4044 
4045  // Parameter RCI : [ 0.0, (+inf) [
4046  if ( (!((RCI >=0.0))) )
4047  {
4048  UserError0(*this) << "ADMSvbic: Parameter RCI value " << RCI << " out of range [ 0.0, (+inf) [";
4049  }
4050 
4051  // Parameter VO : [ 0.0, (+inf) [
4052  if ( (!((VO >=0.0))) )
4053  {
4054  UserError0(*this) << "ADMSvbic: Parameter VO value " << VO << " out of range [ 0.0, (+inf) [";
4055  }
4056 
4057  // Parameter GAMM : [ 0.0, (+inf) [
4058  if ( (!((GAMM >=0.0))) )
4059  {
4060  UserError0(*this) << "ADMSvbic: Parameter GAMM value " << GAMM << " out of range [ 0.0, (+inf) [";
4061  }
4062 
4063  // Parameter HRCF : [ 0.0, (+inf) [
4064  if ( (!((HRCF >=0.0))) )
4065  {
4066  UserError0(*this) << "ADMSvbic: Parameter HRCF value " << HRCF << " out of range [ 0.0, (+inf) [";
4067  }
4068 
4069  // Parameter RBX : [ 0.0, (+inf) [
4070  if ( (!((RBX >=0.0))) )
4071  {
4072  UserError0(*this) << "ADMSvbic: Parameter RBX value " << RBX << " out of range [ 0.0, (+inf) [";
4073  }
4074 
4075  // Parameter RBI : [ 0.0, (+inf) [
4076  if ( (!((RBI >=0.0))) )
4077  {
4078  UserError0(*this) << "ADMSvbic: Parameter RBI value " << RBI << " out of range [ 0.0, (+inf) [";
4079  }
4080 
4081  // Parameter RE : [ 0.0, (+inf) [
4082  if ( (!((RE >=0.0))) )
4083  {
4084  UserError0(*this) << "ADMSvbic: Parameter RE value " << RE << " out of range [ 0.0, (+inf) [";
4085  }
4086 
4087  // Parameter RS : [ 0.0, (+inf) [
4088  if ( (!((RS >=0.0))) )
4089  {
4090  UserError0(*this) << "ADMSvbic: Parameter RS value " << RS << " out of range [ 0.0, (+inf) [";
4091  }
4092 
4093  // Parameter RBP : [ 0.0, (+inf) [
4094  if ( (!((RBP >=0.0))) )
4095  {
4096  UserError0(*this) << "ADMSvbic: Parameter RBP value " << RBP << " out of range [ 0.0, (+inf) [";
4097  }
4098 
4099  // Parameter IS : ] 0.0, (+inf) [
4100  if ( (!((IS >0.0))) )
4101  {
4102  UserError0(*this) << "ADMSvbic: Parameter IS value " << IS << " out of range ] 0.0, (+inf) [";
4103  }
4104 
4105  // Parameter NF : ] 0.0, (+inf) [
4106  if ( (!((NF >0.0))) )
4107  {
4108  UserError0(*this) << "ADMSvbic: Parameter NF value " << NF << " out of range ] 0.0, (+inf) [";
4109  }
4110 
4111  // Parameter NR : ] 0.0, (+inf) [
4112  if ( (!((NR >0.0))) )
4113  {
4114  UserError0(*this) << "ADMSvbic: Parameter NR value " << NR << " out of range ] 0.0, (+inf) [";
4115  }
4116 
4117  // Parameter FC : [ 0.0, 1.0 [
4118  if ( (!((FC >=0.0 && FC <1.0 ))) )
4119  {
4120  UserError0(*this) << "ADMSvbic: Parameter FC value " << FC << " out of range [ 0.0, 1.0 [";
4121  }
4122 
4123  // Parameter CBEO : [ 0.0, (+inf) [
4124  if ( (!((CBEO >=0.0))) )
4125  {
4126  UserError0(*this) << "ADMSvbic: Parameter CBEO value " << CBEO << " out of range [ 0.0, (+inf) [";
4127  }
4128 
4129  // Parameter CJE : [ 0.0, (+inf) [
4130  if ( (!((CJE >=0.0))) )
4131  {
4132  UserError0(*this) << "ADMSvbic: Parameter CJE value " << CJE << " out of range [ 0.0, (+inf) [";
4133  }
4134 
4135  // Parameter PE : ] 0.0, (+inf) [
4136  if ( (!((PE >0.0))) )
4137  {
4138  UserError0(*this) << "ADMSvbic: Parameter PE value " << PE << " out of range ] 0.0, (+inf) [";
4139  }
4140 
4141  // Parameter ME : ] 0.0, 1.0 ]
4142  if ( (!((ME >0.0 && ME <=1.0 ))) )
4143  {
4144  UserError0(*this) << "ADMSvbic: Parameter ME value " << ME << " out of range ] 0.0, 1.0 ]";
4145  }
4146 
4147  // Parameter CBCO : [ 0.0, (+inf) [
4148  if ( (!((CBCO >=0.0))) )
4149  {
4150  UserError0(*this) << "ADMSvbic: Parameter CBCO value " << CBCO << " out of range [ 0.0, (+inf) [";
4151  }
4152 
4153  // Parameter CJC : [ 0.0, (+inf) [
4154  if ( (!((CJC >=0.0))) )
4155  {
4156  UserError0(*this) << "ADMSvbic: Parameter CJC value " << CJC << " out of range [ 0.0, (+inf) [";
4157  }
4158 
4159  // Parameter QCO : [ 0.0, (+inf) [
4160  if ( (!((QCO >=0.0))) )
4161  {
4162  UserError0(*this) << "ADMSvbic: Parameter QCO value " << QCO << " out of range [ 0.0, (+inf) [";
4163  }
4164 
4165  // Parameter CJEP : [ 0.0, (+inf) [
4166  if ( (!((CJEP >=0.0))) )
4167  {
4168  UserError0(*this) << "ADMSvbic: Parameter CJEP value " << CJEP << " out of range [ 0.0, (+inf) [";
4169  }
4170 
4171  // Parameter PC : ] 0.0, (+inf) [
4172  if ( (!((PC >0.0))) )
4173  {
4174  UserError0(*this) << "ADMSvbic: Parameter PC value " << PC << " out of range ] 0.0, (+inf) [";
4175  }
4176 
4177  // Parameter MC : ] 0.0, 1.0 ]
4178  if ( (!((MC >0.0 && MC <=1.0 ))) )
4179  {
4180  UserError0(*this) << "ADMSvbic: Parameter MC value " << MC << " out of range ] 0.0, 1.0 ]";
4181  }
4182 
4183  // Parameter CJCP : [ 0.0, (+inf) [
4184  if ( (!((CJCP >=0.0))) )
4185  {
4186  UserError0(*this) << "ADMSvbic: Parameter CJCP value " << CJCP << " out of range [ 0.0, (+inf) [";
4187  }
4188 
4189  // Parameter PS : ] 0.0, (+inf) [
4190  if ( (!((PS >0.0))) )
4191  {
4192  UserError0(*this) << "ADMSvbic: Parameter PS value " << PS << " out of range ] 0.0, (+inf) [";
4193  }
4194 
4195  // Parameter MS : ] 0.0, 1.0 ]
4196  if ( (!((MS >0.0 && MS <=1.0 ))) )
4197  {
4198  UserError0(*this) << "ADMSvbic: Parameter MS value " << MS << " out of range ] 0.0, 1.0 ]";
4199  }
4200 
4201  // Parameter IBEI : ] 0.0, (+inf) [
4202  if ( (!((IBEI >0.0))) )
4203  {
4204  UserError0(*this) << "ADMSvbic: Parameter IBEI value " << IBEI << " out of range ] 0.0, (+inf) [";
4205  }
4206 
4207  // Parameter WBE : [ 0.0, 1.0 ]
4208  if ( (!((WBE >=0.0 && WBE <=1.0 ))) )
4209  {
4210  UserError0(*this) << "ADMSvbic: Parameter WBE value " << WBE << " out of range [ 0.0, 1.0 ]";
4211  }
4212 
4213  // Parameter NEI : ] 0.0, (+inf) [
4214  if ( (!((NEI >0.0))) )
4215  {
4216  UserError0(*this) << "ADMSvbic: Parameter NEI value " << NEI << " out of range ] 0.0, (+inf) [";
4217  }
4218 
4219  // Parameter IBEN : [ 0.0, (+inf) [
4220  if ( (!((IBEN >=0.0))) )
4221  {
4222  UserError0(*this) << "ADMSvbic: Parameter IBEN value " << IBEN << " out of range [ 0.0, (+inf) [";
4223  }
4224 
4225  // Parameter NEN : ] 0.0, (+inf) [
4226  if ( (!((NEN >0.0))) )
4227  {
4228  UserError0(*this) << "ADMSvbic: Parameter NEN value " << NEN << " out of range ] 0.0, (+inf) [";
4229  }
4230 
4231  // Parameter IBCI : ] 0.0, (+inf) [
4232  if ( (!((IBCI >0.0))) )
4233  {
4234  UserError0(*this) << "ADMSvbic: Parameter IBCI value " << IBCI << " out of range ] 0.0, (+inf) [";
4235  }
4236 
4237  // Parameter NCI : ] 0.0, (+inf) [
4238  if ( (!((NCI >0.0))) )
4239  {
4240  UserError0(*this) << "ADMSvbic: Parameter NCI value " << NCI << " out of range ] 0.0, (+inf) [";
4241  }
4242 
4243  // Parameter IBCN : [ 0.0, (+inf) [
4244  if ( (!((IBCN >=0.0))) )
4245  {
4246  UserError0(*this) << "ADMSvbic: Parameter IBCN value " << IBCN << " out of range [ 0.0, (+inf) [";
4247  }
4248 
4249  // Parameter NCN : ] 0.0, (+inf) [
4250  if ( (!((NCN >0.0))) )
4251  {
4252  UserError0(*this) << "ADMSvbic: Parameter NCN value " << NCN << " out of range ] 0.0, (+inf) [";
4253  }
4254 
4255  // Parameter AVC1 : [ 0.0, (+inf) [
4256  if ( (!((AVC1 >=0.0))) )
4257  {
4258  UserError0(*this) << "ADMSvbic: Parameter AVC1 value " << AVC1 << " out of range [ 0.0, (+inf) [";
4259  }
4260 
4261  // Parameter AVC2 : [ 0.0, (+inf) [
4262  if ( (!((AVC2 >=0.0))) )
4263  {
4264  UserError0(*this) << "ADMSvbic: Parameter AVC2 value " << AVC2 << " out of range [ 0.0, (+inf) [";
4265  }
4266 
4267  // Parameter ISP : [ 0.0, (+inf) [
4268  if ( (!((ISP >=0.0))) )
4269  {
4270  UserError0(*this) << "ADMSvbic: Parameter ISP value " << ISP << " out of range [ 0.0, (+inf) [";
4271  }
4272 
4273  // Parameter WSP : [ 0.0, 1.0 ]
4274  if ( (!((WSP >=0.0 && WSP <=1.0 ))) )
4275  {
4276  UserError0(*this) << "ADMSvbic: Parameter WSP value " << WSP << " out of range [ 0.0, 1.0 ]";
4277  }
4278 
4279  // Parameter NFP : ] 0.0, (+inf) [
4280  if ( (!((NFP >0.0))) )
4281  {
4282  UserError0(*this) << "ADMSvbic: Parameter NFP value " << NFP << " out of range ] 0.0, (+inf) [";
4283  }
4284 
4285  // Parameter IBEIP : [ 0.0, (+inf) [
4286  if ( (!((IBEIP >=0.0))) )
4287  {
4288  UserError0(*this) << "ADMSvbic: Parameter IBEIP value " << IBEIP << " out of range [ 0.0, (+inf) [";
4289  }
4290 
4291  // Parameter IBENP : [ 0.0, (+inf) [
4292  if ( (!((IBENP >=0.0))) )
4293  {
4294  UserError0(*this) << "ADMSvbic: Parameter IBENP value " << IBENP << " out of range [ 0.0, (+inf) [";
4295  }
4296 
4297  // Parameter IBCIP : [ 0.0, (+inf) [
4298  if ( (!((IBCIP >=0.0))) )
4299  {
4300  UserError0(*this) << "ADMSvbic: Parameter IBCIP value " << IBCIP << " out of range [ 0.0, (+inf) [";
4301  }
4302 
4303  // Parameter NCIP : ] 0.0, (+inf) [
4304  if ( (!((NCIP >0.0))) )
4305  {
4306  UserError0(*this) << "ADMSvbic: Parameter NCIP value " << NCIP << " out of range ] 0.0, (+inf) [";
4307  }
4308 
4309  // Parameter IBCNP : [ 0.0, (+inf) [
4310  if ( (!((IBCNP >=0.0))) )
4311  {
4312  UserError0(*this) << "ADMSvbic: Parameter IBCNP value " << IBCNP << " out of range [ 0.0, (+inf) [";
4313  }
4314 
4315  // Parameter NCNP : ] 0.0, (+inf) [
4316  if ( (!((NCNP >0.0))) )
4317  {
4318  UserError0(*this) << "ADMSvbic: Parameter NCNP value " << NCNP << " out of range ] 0.0, (+inf) [";
4319  }
4320 
4321  // Parameter VEF : [ 0.0, (+inf) [
4322  if ( (!((VEF >=0.0))) )
4323  {
4324  UserError0(*this) << "ADMSvbic: Parameter VEF value " << VEF << " out of range [ 0.0, (+inf) [";
4325  }
4326 
4327  // Parameter VER : [ 0.0, (+inf) [
4328  if ( (!((VER >=0.0))) )
4329  {
4330  UserError0(*this) << "ADMSvbic: Parameter VER value " << VER << " out of range [ 0.0, (+inf) [";
4331  }
4332 
4333  // Parameter IKF : [ 0.0, (+inf) [
4334  if ( (!((IKF >=0.0))) )
4335  {
4336  UserError0(*this) << "ADMSvbic: Parameter IKF value " << IKF << " out of range [ 0.0, (+inf) [";
4337  }
4338 
4339  // Parameter IKR : [ 0.0, (+inf) [
4340  if ( (!((IKR >=0.0))) )
4341  {
4342  UserError0(*this) << "ADMSvbic: Parameter IKR value " << IKR << " out of range [ 0.0, (+inf) [";
4343  }
4344 
4345  // Parameter IKP : [ 0.0, (+inf) [
4346  if ( (!((IKP >=0.0))) )
4347  {
4348  UserError0(*this) << "ADMSvbic: Parameter IKP value " << IKP << " out of range [ 0.0, (+inf) [";
4349  }
4350 
4351  // Parameter TF : [ 0.0, (+inf) [
4352  if ( (!((TF >=0.0))) )
4353  {
4354  UserError0(*this) << "ADMSvbic: Parameter TF value " << TF << " out of range [ 0.0, (+inf) [";
4355  }
4356 
4357  // Parameter QTF : [ 0.0, (+inf) [
4358  if ( (!((QTF >=0.0))) )
4359  {
4360  UserError0(*this) << "ADMSvbic: Parameter QTF value " << QTF << " out of range [ 0.0, (+inf) [";
4361  }
4362 
4363  // Parameter XTF : [ 0.0, (+inf) [
4364  if ( (!((XTF >=0.0))) )
4365  {
4366  UserError0(*this) << "ADMSvbic: Parameter XTF value " << XTF << " out of range [ 0.0, (+inf) [";
4367  }
4368 
4369  // Parameter VTF : [ 0.0, (+inf) [
4370  if ( (!((VTF >=0.0))) )
4371  {
4372  UserError0(*this) << "ADMSvbic: Parameter VTF value " << VTF << " out of range [ 0.0, (+inf) [";
4373  }
4374 
4375  // Parameter ITF : [ 0.0, (+inf) [
4376  if ( (!((ITF >=0.0))) )
4377  {
4378  UserError0(*this) << "ADMSvbic: Parameter ITF value " << ITF << " out of range [ 0.0, (+inf) [";
4379  }
4380 
4381  // Parameter TR : [ 0.0, (+inf) [
4382  if ( (!((TR >=0.0))) )
4383  {
4384  UserError0(*this) << "ADMSvbic: Parameter TR value " << TR << " out of range [ 0.0, (+inf) [";
4385  }
4386 
4387  // Parameter TD : [ 0.0, (+inf) [
4388  if ( (!((TD >=0.0))) )
4389  {
4390  UserError0(*this) << "ADMSvbic: Parameter TD value " << TD << " out of range [ 0.0, (+inf) [";
4391  }
4392 
4393  // Parameter KFN : [ 0.0, (+inf) [
4394  if ( (!((KFN >=0.0))) )
4395  {
4396  UserError0(*this) << "ADMSvbic: Parameter KFN value " << KFN << " out of range [ 0.0, (+inf) [";
4397  }
4398 
4399  // Parameter AFN : ] 0.0, (+inf) [
4400  if ( (!((AFN >0.0))) )
4401  {
4402  UserError0(*this) << "ADMSvbic: Parameter AFN value " << AFN << " out of range ] 0.0, (+inf) [";
4403  }
4404 
4405  // Parameter BFN : ] 0.0, (+inf) [
4406  if ( (!((BFN >0.0))) )
4407  {
4408  UserError0(*this) << "ADMSvbic: Parameter BFN value " << BFN << " out of range ] 0.0, (+inf) [";
4409  }
4410 
4411  // Parameter RTH : [ 0.0, (+inf) [
4412  if ( (!((RTH >=0.0))) )
4413  {
4414  UserError0(*this) << "ADMSvbic: Parameter RTH value " << RTH << " out of range [ 0.0, (+inf) [";
4415  }
4416 
4417  // Parameter CTH : [ 0.0, (+inf) [
4418  if ( (!((CTH >=0.0))) )
4419  {
4420  UserError0(*this) << "ADMSvbic: Parameter CTH value " << CTH << " out of range [ 0.0, (+inf) [";
4421  }
4422 
4423  // Parameter VRT : [ 0.0, (+inf) [
4424  if ( (!((VRT >=0.0))) )
4425  {
4426  UserError0(*this) << "ADMSvbic: Parameter VRT value " << VRT << " out of range [ 0.0, (+inf) [";
4427  }
4428 
4429  // Parameter ART : ] 0.0, (+inf) [
4430  if ( (!((ART >0.0))) )
4431  {
4432  UserError0(*this) << "ADMSvbic: Parameter ART value " << ART << " out of range ] 0.0, (+inf) [";
4433  }
4434 
4435  // Parameter CCSO : [ 0.0, (+inf) [
4436  if ( (!((CCSO >=0.0))) )
4437  {
4438  UserError0(*this) << "ADMSvbic: Parameter CCSO value " << CCSO << " out of range [ 0.0, (+inf) [";
4439  }
4440 
4441  // Parameter NKF : ] 0.0, (+inf) [
4442  if ( (!((NKF >0.0))) )
4443  {
4444  UserError0(*this) << "ADMSvbic: Parameter NKF value " << NKF << " out of range ] 0.0, (+inf) [";
4445  }
4446 
4447  // Parameter ISRR : ] 0.0, (+inf) [
4448  if ( (!((ISRR >0.0))) )
4449  {
4450  UserError0(*this) << "ADMSvbic: Parameter ISRR value " << ISRR << " out of range ] 0.0, (+inf) [";
4451  }
4452 
4453  // Parameter NBBE : ] 0.0, (+inf) [
4454  if ( (!((NBBE >0.0))) )
4455  {
4456  UserError0(*this) << "ADMSvbic: Parameter NBBE value " << NBBE << " out of range ] 0.0, (+inf) [";
4457  }
4458 
4459  // Parameter dtype : [ (-1), 1 ][ 0, 0 ]
4460  if ( (!((dtype >=(-1) && dtype <=1 )) || (dtype >=0 && dtype <=0 )) )
4461  {
4462  UserError0(*this) << "ADMSvbic: Parameter dtype value " << dtype << " out of range [ (-1), 1 ] or in excluded range [ 0, 0 ]";
4463  }
4464 
4465 
4466  // and of course, this routine is where we should put the initial_model
4467  // stuff
4468 
4469 
4470  return true;
4471 }
4472 //----------------------------------------------------------------------------
4473 // Function : Model::processInstanceParams
4474 // Purpose :
4475 // Special Notes :
4476 // Scope : public
4477 // Creator :
4478 // Creation Date :
4479 //----------------------------------------------------------------------------
4481 {
4482 
4483  std::vector<Instance*>::iterator iter;
4484  std::vector<Instance*>::iterator first = instanceContainer.begin();
4485  std::vector<Instance*>::iterator last = instanceContainer.end();
4486 
4487  for (iter=first; iter!=last; ++iter)
4488  {
4489  (*iter)->processParams();
4490  }
4491 
4492  return true;
4493 }
4494 
4495 //-----------------------------------------------------------------------------
4496 // Function : Model::Model
4497 // Purpose : model block constructor
4498 // Special Notes :
4499 // Scope : public
4500 // Creator :
4501 // Creation Date :
4502 //-----------------------------------------------------------------------------
4504  const Configuration & configuration,
4505  const ModelBlock & model_block,
4506  const FactoryBlock & factory_block)
4507  : DeviceModel(model_block, configuration.getModelParameters(), factory_block),
4508  TNOM(27.0),
4509  RCX(0.0),
4510  RCI(0.0),
4511  VO(0.0),
4512  GAMM(0.0),
4513  HRCF(0.0),
4514  RBX(0.0),
4515  RBI(0.0),
4516  RE(0.0),
4517  RS(0.0),
4518  RBP(0.0),
4519  IS(1.0e-16),
4520  NF(1.0),
4521  NR(1.0),
4522  FC(0.9),
4523  CBEO(0.0),
4524  CJE(0.0),
4525  PE(0.75),
4526  ME(0.33),
4527  AJE((-0.5)),
4528  CBCO(0.0),
4529  CJC(0.0),
4530  QCO(0.0),
4531  CJEP(0.0),
4532  PC(0.75),
4533  MC(0.33),
4534  AJC((-0.5)),
4535  CJCP(0.0),
4536  PS(0.75),
4537  MS(0.33),
4538  AJS((-0.5)),
4539  IBEI(1.0e-18),
4540  WBE(1.0),
4541  NEI(1.0),
4542  IBEN(0.0),
4543  NEN(2.0),
4544  IBCI(1.0e-16),
4545  NCI(1.0),
4546  IBCN(0.0),
4547  NCN(2.0),
4548  AVC1(0.0),
4549  AVC2(0.0),
4550  ISP(0.0),
4551  WSP(1.0),
4552  NFP(1.0),
4553  IBEIP(0.0),
4554  IBENP(0.0),
4555  IBCIP(0.0),
4556  NCIP(1.0),
4557  IBCNP(0.0),
4558  NCNP(2.0),
4559  VEF(0.0),
4560  VER(0.0),
4561  IKF(0.0),
4562  IKR(0.0),
4563  IKP(0.0),
4564  TF(0.0),
4565  QTF(0.0),
4566  XTF(0.0),
4567  VTF(0.0),
4568  ITF(0.0),
4569  TR(0.0),
4570  TD(0.0),
4571  KFN(0.0),
4572  AFN(1.0),
4573  BFN(1.0),
4574  XRE(0),
4575  XRBI(0),
4576  XRCI(0),
4577  XRS(0),
4578  XVO(0),
4579  EA(1.12),
4580  EAIE(1.12),
4581  EAIC(1.12),
4582  EAIS(1.12),
4583  EANE(1.12),
4584  EANC(1.12),
4585  EANS(1.12),
4586  XIS(3.0),
4587  XII(3.0),
4588  XIN(3.0),
4589  TNF(0.0),
4590  TAVC(0.0),
4591  RTH(0.0),
4592  CTH(0.0),
4593  VRT(0.0),
4594  ART(0.1),
4595  CCSO(0.0),
4596  QBM(0.0),
4597  NKF(0.5),
4598  XIKF(0),
4599  XRCX(0),
4600  XRBX(0),
4601  XRBP(0),
4602  ISRR(1.0),
4603  XISR(0.0),
4604  DEAR(0.0),
4605  EAP(1.12),
4606  VBBE(0.0),
4607  NBBE(1.0),
4608  IBBE(1.0e-6),
4609  TVBBE1(0.0),
4610  TVBBE2(0.0),
4611  TNBBE(0.0),
4612  EBBE(0.0),
4613  DTEMP(0.0),
4614  VERS(1.2),
4615  VREV(0.0),
4616  dtype(1)
4617 {
4618  // Set params to constant default values (from parTable):
4619  setDefaultParams();
4620 
4621  // Set params according to .model line and constant defaults from metadata:
4622  setModParams(model_block.params);
4623 
4624  // Set any non-constant parameter defaults:
4625  // Set any parameters that were not given and whose defaults depend on other
4626  // parameters:
4627 
4628 
4629  if (!given("XYCEADMSMODTEMP"))
4630  admsModTemp=getDeviceOptions().temp.getImmutableValue<double>();
4631 
4632  // Fix the TNOM parameter that has "helpfully" been converted to Kelvin
4633  // by the DeviceEntity class
4634 
4635  if (given("TNOM"))
4636  TNOM -= CONSTCtoK;
4637 
4638  // Calculate any parameters specified as expressions:
4639 
4641 
4642  // calculate dependent (ie computed) params and check for errors:
4643  //Manually inserted these two lines:
4644  if (getType() == "pnp" || getType() == "PNP")
4645  dtype = -1;
4646 
4647  processParams();
4648 }
4649 
4650 //-----------------------------------------------------------------------------
4651 // Function : Model::~Model
4652 // Purpose : destructor
4653 // Special Notes :
4654 // Scope : public
4655 // Creator :
4656 // Creation Date :
4657 //-----------------------------------------------------------------------------
4659 {
4660  std::vector<Instance*>::iterator iterI;
4661  std::vector<Instance*>::iterator firstI = instanceContainer.begin ();
4662  std::vector<Instance*>::iterator lastI = instanceContainer.end ();
4663 
4664  // loop over instances:
4665  for (iterI = firstI; iterI != lastI; ++iterI)
4666  {
4667  delete (*iterI);
4668  }
4669 }
4670 
4671 //-----------------------------------------------------------------------------
4672 // Function : Model::printOutInstances
4673 // Purpose : debugging tool.
4674 // Special Notes :
4675 // Scope : public
4676 // Creator :
4677 // Creation Date :
4678 //-----------------------------------------------------------------------------
4679 std::ostream &Model::printOutInstances(std::ostream &os) const
4680 {
4681  std::vector<Instance*>::const_iterator iter;
4682  std::vector<Instance*>::const_iterator first = instanceContainer.begin();
4683  std::vector<Instance*>::const_iterator last = instanceContainer.end();
4684 
4685  int i;
4686  os << std::endl;
4687  os << " name model name Parameters" << std::endl;
4688  for (i=0, iter=first; iter!=last; ++iter, ++i)
4689  {
4690  os << " " << i << ": " << (*iter)->getName() << " ";
4691  os << getName();
4692 
4693  os << std::endl;
4694  os << "M = " << (*iter)->M << std::endl;
4695  os << std::endl;
4696  }
4697 
4698  os << std::endl;
4699 
4700  return os;
4701 }
4702 
4703 //-----------------------------------------------------------------------------
4704 // Function : Model::forEachInstance
4705 // Purpose :
4706 // Special Notes :
4707 // Scope : public
4708 // Creator : David Baur
4709 // Creation Date : 2/4/2014
4710 //-----------------------------------------------------------------------------
4711 /// Apply a device instance "op" to all instances associated with this
4712 /// model
4713 ///
4714 /// @param[in] op Operator to apply to all instances.
4715 ///
4716 ///
4717 void Model::forEachInstance(DeviceInstanceOp &op) const /* override */
4718 {
4719  for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
4720  op(*it);
4721 }
4722 
4723 Device *Traits::factory(const Configuration &configuration, const FactoryBlock &factory_block)
4724 {
4725  return new DeviceMaster<Traits>(configuration, factory_block, factory_block.solverState_, factory_block.deviceOptions_);
4726 }
4727 
4729 {
4731  .registerDevice("q", 10)
4732  .registerModelType("npn", 10)
4733  .registerModelType("pnp", 10);
4734 }
4735 
4736 
4737 
4738 } // namespace ADMSvbic
4739 } // namespace Device
4740 } // namespace Xyce