Xyce  6.1
N_DEV_DeviceOptions.C
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // Copyright Notice
3 //
4 // Copyright 2002 Sandia Corporation. Under the terms
5 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S.
6 // Government retains certain rights in this software.
7 //
8 // Xyce(TM) Parallel Electrical Simulator
9 // Copyright (C) 2002-2015 Sandia Corporation
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 //-----------------------------------------------------------------------------
24 
25 //-----------------------------------------------------------------------------
26 // Filename : $RCSfile: N_DEV_DeviceOptions.C,v $
27 //
28 // Purpose :
29 //
30 // Special Notes :
31 //
32 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
33 //
34 // Creation Date : 07/06/01
35 //
36 // Revision Information:
37 // ---------------------
38 //
39 // Revision Number: $Revision: 1.106 $
40 //
41 // Revision Date : $Date: 2015/10/27 18:25:33 $
42 //
43 // Current Owner : $Author: peshola $
44 //-----------------------------------------------------------------------------
45 
46 #include <Xyce_config.h>
47 
48 #include <iostream>
49 
50 #ifdef HAVE_CLIMITS
51 #include <climits>
52 #else
53 #include <limits.h>
54 #endif
55 
56 #include <N_DEV_Const.h>
57 #include <N_DEV_DeviceOptions.h>
58 #include <N_ERH_ErrorMgr.h>
59 #include <N_IO_CmdParse.h>
60 #include <N_IO_PkgOptionsMgr.h>
61 #include <N_UTL_Diagnostic.h>
62 #include <N_UTL_FeatureTest.h>
63 #include <N_UTL_OptionBlock.h>
64 #include <N_UTL_MachDepParams.h>
65 
66 #ifndef Xyce_NEW_EXCESS_PHASE
67 static const bool EXCESS_PHASE = false;
68 #else
69 static const bool EXCESS_PHASE = true;
70 #endif
71 
72 namespace Xyce {
73 namespace Device {
74 
75 //-----------------------------------------------------------------------------
76 // Function : DeviceOptions::DeviceOptions
77 // Purpose : constructor
78 //
79 // Special Notes : The are initialized to default values, but are reset
80 // in the setupDefaultOptions function. Confusing I know,
81 // but I had a reason for doing this, I think.
82 //
83 // Consider setupDefaultOptions function to be the
84 // ultimate authority.
85 //
86 // Scope : public
87 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
88 // Creation Date : 4/01/02
89 //-----------------------------------------------------------------------------
91  : defad (0.0e+0), // MOS drain diffusion area.
92  defas (0.0e+0), // MOS source diffusion area.
93  defl (1.0e-4), // MOS channel length.
94  defw (1.0e-4), // MOS channel width.
95  abstol(1.0e-12), // absolute current error tol.
96  reltol(1.0e-4), // relative current error tol.
97  chgtol(1.0e-12), // absolute charge error tol.
98  gmin (1.0e-12), // minimum allowed conductance.
99  gmin_orig (1.0e-12), // minimum allowed conductance, final
100  gmin_init (1.0e-02), // minimum allowed conductance, initial
101  gmin_scalar(1.0e10),
102  gmax (1.0e20), // maximum allowed conductance.
103  testJac_relTol(0.01), // reltol for num. jacobian diagnostic
104  testJac_absTol(1.0e-8), // abstol for num. jacobian diagnostic.
105  testJac_SqrtEta(1.0e-8), // dx = numJacSqrtEta * (1.0 + fabs(soln[i]));
106  deviceSens_dp(1.0e-8), // similar to eta, but for numerical device sensitivities
107  tnom (CONSTREFTEMP),
108  temp(Util::Param("TEMP", CONSTREFTEMP)),
109  scale_src (0.0),
110  numericalJacobianFlag (false),
111  testJacobianFlag (false),
112  testJacStartStep(0),
113  testJacStopStep(Util::MachineDependentParams::IntMax()),
114  testJacWarn (false),
115  testJacDeviceName(""),
116  testJacDeviceNameGiven( false ),
117  voltageLimiterFlag (true),
118  lambertWFlag (0),
119  icMultiplier (10000.0),
120  defaultMaxTimeStep (1.0e99),
121  vdsScaleMin(0.3),
122  vgstConst(4.5),
123  numGainScaleBlocks(1),
124  staggerGainScale(false),
125  randomizeVgstConst(false),
126  length0(5.0e-6), // used in mosfet "size" homotopy
127  width0(200.0e-6), // used in mosfet "size" homotopy
128  tox0(6.0e-8), // used in mosfet "size" homotopy
129  minRes(0.0),
130  minCap(0.0),
131  exp_order(100.0),
132  zeroResistanceTol(1.0e-100),
133  checkForZeroResistance(true),
134  debugMinTimestep (0),
135  debugMaxTimestep (Util::MachineDependentParams::IntMax()), // later, this should be MAX_INT
136  debugMinTime (0),
137  debugMaxTime (Util::MachineDependentParams::DoubleMax()),
138  verboseLevel (0),
139  newExcessPhase(EXCESS_PHASE),
140  defaultNewExcessPhase(EXCESS_PHASE),
141  excessPhaseScalar1 (1.0),
142  excessPhaseScalar2 (1.0),
143  randomSeed (0),
144  tryToCompact (false),
145  calculateAllLeadCurrents (false),
146  newMeyerFlag(false),
147  digInitState(3)
148 {
149  setSensitivityDebugLevel(0);
150  setDeviceDebugLevel(1);
151 }
152 
153 //-----------------------------------------------------------------------------
154 // Function : DeviceOptions::~DeviceOptions
155 // Purpose : destructor
156 // Special Notes :
157 // Scope : public
158 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
159 // Creation Date : 4/01/02
160 //-----------------------------------------------------------------------------
162 {}
163 
164 //-----------------------------------------------------------------------------
165 // Function : DeviceOptions::registerOptions
166 // Purpose :
167 // Special Notes :
168 // Scope : public
169 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
170 // Creation Date : 5/24/00
171 //-----------------------------------------------------------------------------
172 bool
174  const Util::OptionBlock & option_block)
175 {
176  for (Util::ParamList::const_iterator it = option_block.begin(), end = option_block.end(); it != end; ++it)
177  {
178  const std::string &tag = (*it).uTag();
179 
180  if (tag == "DEFAD")
181  defad = (*it).getImmutableValue<double>();
182  else if (tag == "DEFAS")
183  defas = (*it).getImmutableValue<double>();
184  else if (tag == "DEFL")
185  defl = (*it).getImmutableValue<double>();
186  else if (tag == "DEFW")
187  defw = (*it).getImmutableValue<double>();
188  else if (tag == "ABSTOL")
189  abstol = (*it).getImmutableValue<double>();
190  else if (tag == "RELTOL")
191  reltol = (*it).getImmutableValue<double>();
192  else if (tag == "CHGTOL")
193  chgtol = (*it).getImmutableValue<double>();
194  else if (tag == "GMIN")
195  gmin = (*it).getImmutableValue<double>();
196  else if (tag == "GMINSCALAR")
197  gmin_scalar = (*it).getImmutableValue<double>();
198  else if (tag == "GMAX")
199  gmax = (*it).getImmutableValue<double>();
200  else if (tag == "TJRELTOL")
201  testJac_relTol = (*it).getImmutableValue<double>();
202  else if (tag == "TJABSTOL")
203  testJac_absTol = (*it).getImmutableValue<double>();
204  else if (tag == "TJSQRTETA")
205  testJac_SqrtEta = (*it).getImmutableValue<double>();
206  else if (tag == "SENSDP")
207  deviceSens_dp = (*it).getImmutableValue<double>();
208  else if (tag == "TNOM")
209  tnom = (*it).getImmutableValue<double>() + CONSTCtoK;
210  else if (tag == "TEMP")
211  {
212  temp = *it;
213  if ( !(*it).isTimeDependent() )
214  temp.setVal((*it).getImmutableValue<double>() + CONSTCtoK);
215  else
216  {
217  temp.setVal( (*it).stringValue() );
218  temp.setTimeDependent( true );
219  }
220  }
221  else if (tag == "SCALESRC")
222  scale_src = (*it).getImmutableValue<double>();
223  else if (tag == "NUMJAC")
224  numericalJacobianFlag = static_cast<bool>((*it).getImmutableValue<int>());
225  else if (tag == "TESTJAC")
226  testJacobianFlag = static_cast<bool>((*it).getImmutableValue<int>());
227  else if (tag == "TESTJACSTARTSTEP")
228  testJacStartStep = (*it).getImmutableValue<int>();
229  else if (tag == "TESTJACSTOPSTEP")
230  testJacStopStep = (*it).getImmutableValue<int>();
231  else if (tag == "TESTJACWARN")
232  testJacWarn = static_cast<bool> ((*it).getImmutableValue<int>());
233  else if (tag == "TESTJACDEVICENAME")
234  {
235  testJacDeviceName = (*it).stringValue();
236  testJacDeviceNameGiven = true;
237  }
238  else if (tag == "VOLTLIM")
239  voltageLimiterFlag = static_cast<bool>((*it).getImmutableValue<int>());
240  else if (tag == "LAMBERTW")
241  lambertWFlag = static_cast<int>((*it).getImmutableValue<int>());
242  else if (tag == "ICFAC" )
243  icMultiplier = (*it).getImmutableValue<double>();
244  else if (tag == "MAXTIMESTEP" )
245  defaultMaxTimeStep = (*it).getImmutableValue<double>();
246 
247  else if (tag == "VDSSCALEMIN" )
248  vdsScaleMin = (*it).getImmutableValue<double>();
249  else if (tag == "VGSTCONST" )
250  vgstConst = (*it).getImmutableValue<double>();
251  else if (tag == "NUMGAINSCALEBLOCKS" )
252  numGainScaleBlocks = static_cast<int>((*it).getImmutableValue<int>());
253  else if (tag == "STAGGERGAINSCALE")
254  staggerGainScale = static_cast<bool>((*it).getImmutableValue<int>());
255  else if (tag == "RANDOMIZEVGSTCONST")
256  randomizeVgstConst = static_cast<bool>((*it).getImmutableValue<int>());
257  else if (tag == "LENGTH0" )
258  length0 = (*it).getImmutableValue<double>();
259  else if (tag == "WIDTH0" )
260  width0 = (*it).getImmutableValue<double>();
261  else if (tag == "TOX0" )
262  tox0 = (*it).getImmutableValue<double>();
263  else if (tag == "MINRES" )
264  minRes = (*it).getImmutableValue<double>();
265  else if (tag == "MINCAP" )
266  minCap = (*it).getImmutableValue<double>();
267  else if (tag == "NEWMEYER" )
268  newMeyerFlag = (*it).getImmutableValue<bool>();
269  else if (tag == "SENSDEBUGLEVEL")
270  {
271  setDeviceSensitivityDebugLevel((*it).getImmutableValue<int>());
272  }
273  else if (tag == "DEBUGLEVEL")
274  {
275  setDeviceDebugLevel((*it).getImmutableValue<int>());
276  }
277  else if (tag == "VERBOSELEVEL")
278  {
279  verboseLevel = ((*it).getImmutableValue<int>());
280  }
281  else if (tag == "DEBUGMINTIMESTEP")
282  {
283  debugMinTimestep = ((*it).getImmutableValue<int>());
284  }
285  else if (tag == "DEBUGMAXTIMESTEP")
286  {
287  debugMaxTimestep = ((*it).getImmutableValue<int>());
288  }
289  else if (tag == "DEBUGMINTIME")
290  {
291  debugMinTime = ((*it).getImmutableValue<double>());
292  }
293  else if (tag == "DEBUGMAXTIME")
294  {
295  debugMaxTime = ((*it).getImmutableValue<double>());
296  }
297  else if (tag == "NEWEXCESSPHASE")
298  {
299  newExcessPhase = static_cast<bool> ((*it).getImmutableValue<int>());
300  }
301  else if (tag == "EXCESSPHASESCALAR1")
302  {
303  excessPhaseScalar1 = ((*it).getImmutableValue<double>());
304  }
305  else if (tag == "EXCESSPHASESCALAR2")
306  {
307  excessPhaseScalar2 = ((*it).getImmutableValue<double>());
308  }
309  else if (tag == "ZERORESISTANCETOL")
310  {
311  zeroResistanceTol = ((*it).getImmutableValue<double>());
312  }
313  else if (tag == "CHECKFORZERORESISTANCE")
314  {
315  checkForZeroResistance = ((*it).getImmutableValue<bool>());
316  }
317  else if (tag == "RANDOMSEED" )
318  {
319  randomSeed = ((*it).getImmutableValue<long>());
320  }
321  else if (tag == "TRYTOCOMPACT")
322  {
323  tryToCompact = static_cast<bool> ((*it).getImmutableValue<int>());
324  }
325  else if (tag == "CALCULATEALLLEADCURRENTS")
326  {
327  calculateAllLeadCurrents = ((*it).getImmutableValue<bool>());
328  }
329  else if (tag == "DIGINITSTATE")
330  {
331  digInitState = ((*it).getImmutableValue<int>());
332  }
333  else
334  {
335  Report::UserError0() << tag << " is not a recognized device package option.";
336  }
337  }
338 
339  gmin_orig = gmin;
340  gmin_init = gmin*gmin_scalar; // by default, 10 orders of magnitude larger.
341 
342  if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
343  dout() << *this << std::endl;
344 
345  return true;
346 }
347 
348 void
350  IO::PkgOptionsMgr & options_manager)
351 {
352  Util::ParamMap &parameters = options_manager.addOptionsMetadataMap("DEVICE");
353 
354  parameters.insert(Util::ParamMap::value_type("DEFAS", Util::Param("DEFAS", 0.0)));
355  parameters.insert(Util::ParamMap::value_type("DEFAD", Util::Param("DEFAD", 0.0)));
356  parameters.insert(Util::ParamMap::value_type("DEFL", Util::Param("DEFL", 1.0e-4)));
357  parameters.insert(Util::ParamMap::value_type("DEFW", Util::Param("DEFW", 1.0e-4)));
358  parameters.insert(Util::ParamMap::value_type("GMIN", Util::Param("GMIN", 1.0e-12)));
359  parameters.insert(Util::ParamMap::value_type("GMINSCALAR", Util::Param("GMINSCALAR", 1.0e+10)));
360  parameters.insert(Util::ParamMap::value_type("GMAX", Util::Param("GMAX", 1.0e20)));
361  parameters.insert(Util::ParamMap::value_type("TEMP", Util::Param("TEMP", 27.0)));
362  parameters.insert(Util::ParamMap::value_type("TNOM", Util::Param("TNOM", 27.0)));
363  parameters.insert(Util::ParamMap::value_type("SCALESRC", Util::Param("SCALESRC", 0.0)));
364  parameters.insert(Util::ParamMap::value_type("NUMJAC", Util::Param("NUMJAC", 0)));
365  parameters.insert(Util::ParamMap::value_type("TESTJAC", Util::Param("TESTJAC", 0)));
366  parameters.insert(Util::ParamMap::value_type("TESTJACSTARTSTEP", Util::Param("TESTJACSTARTSTEP", 0)));
367  parameters.insert(Util::ParamMap::value_type("TESTJACSTOPSTEP", Util::Param("TESTJACSTOPSTEP", 0)));
368  parameters.insert(Util::ParamMap::value_type("TJRELTOL", Util::Param("TJRELTOL", 0.01)));
369  parameters.insert(Util::ParamMap::value_type("TJABSTOL", Util::Param("TJABSTOL", 1.0e-8)));
370  parameters.insert(Util::ParamMap::value_type("TJSQRTETA", Util::Param("TJSQRTETA", 1.0e-8)));
371  parameters.insert(Util::ParamMap::value_type("SENSDP", Util::Param("SENSDP", 1.0e-8)));
372  parameters.insert(Util::ParamMap::value_type("TESTJACWARN", Util::Param("TESTJACWARN", 0)));
373  parameters.insert(Util::ParamMap::value_type("TESTJACDEVICENAME", Util::Param("TESTJACDEVICENAME", "")));
374  parameters.insert(Util::ParamMap::value_type("VOLTLIM", Util::Param("VOLTLIM", 1)));
375  parameters.insert(Util::ParamMap::value_type("ICFAC", Util::Param("ICFAC", 10000.0)));
376  parameters.insert(Util::ParamMap::value_type("LAMBERTW", Util::Param("LAMBERTW", 0)));
377  parameters.insert(Util::ParamMap::value_type("MAXTIMESTEP", Util::Param("MAXTIMESTEP", 1.0e99)));
378  parameters.insert(Util::ParamMap::value_type("DEBUGLEVEL", Util::Param("DEBUGLEVEL", 1)));
379  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIMESTEP", Util::Param("DEBUGMINTIMESTEP", 0)));
380  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIMESTEP", Util::Param("DEBUGMAXTIMESTEP", 65536)));
381  parameters.insert(Util::ParamMap::value_type("DEBUGMINTIME", Util::Param("DEBUGMINTIME", 0.0)));
382  parameters.insert(Util::ParamMap::value_type("DEBUGMAXTIME", Util::Param("DEBUGMAXTIME", 100.0)));
383  parameters.insert(Util::ParamMap::value_type("VERBOSELEVEL", Util::Param("VERBOSELEVEL", 0)));
384  parameters.insert(Util::ParamMap::value_type("ABSTOL", Util::Param("ABSTOL", 1.0e-12)));
385  parameters.insert(Util::ParamMap::value_type("CHGTOL", Util::Param("CHGTOL", 1.0e-12)));
386  parameters.insert(Util::ParamMap::value_type("VDSSCALEMIN", Util::Param("VDSSCALEMIN", 0.3)));
387  parameters.insert(Util::ParamMap::value_type("VGSTCONST", Util::Param("VGSTCONST", 4.5)));
388  parameters.insert(Util::ParamMap::value_type("LENGTH0", Util::Param("LENGTH0", 5.0e-6)));
389  parameters.insert(Util::ParamMap::value_type("WIDTH0", Util::Param("WIDTH0", 200.0e-6)));
390  parameters.insert(Util::ParamMap::value_type("TOX0", Util::Param("TOX0", 6.0e-8)));
391  parameters.insert(Util::ParamMap::value_type("MINRES", Util::Param("MINRES", 0.0)));
392  parameters.insert(Util::ParamMap::value_type("MINCAP", Util::Param("MINCAP", 0.0)));
393  parameters.insert(Util::ParamMap::value_type("SENSDEBUGLEVEL", Util::Param("SENSDEBUGLEVEL", 0)));
394  parameters.insert(Util::ParamMap::value_type("NUMGAINSCALEBLOCKS", Util::Param("NUMGAINSCALEBLOCKS", 1)));
395  parameters.insert(Util::ParamMap::value_type("STAGGERGAINSCALE", Util::Param("STAGGERGAINSCALE", 0)));
396  parameters.insert(Util::ParamMap::value_type("RANDOMIZEVGSTCONST", Util::Param("RANDOMIZEVGSTCONST", 0)));
397  parameters.insert(Util::ParamMap::value_type("NEWEXCESSPHASE", Util::Param("NEWEXCESSPHASE", 1)));
398  parameters.insert(Util::ParamMap::value_type("EXCESSPHASESCALAR1", Util::Param("EXCESSPHASESCALAR1", 1.0)));
399  parameters.insert(Util::ParamMap::value_type("EXCESSPHASESCALAR2", Util::Param("EXCESSPHASESCALAR2", 1.0)));
400  parameters.insert(Util::ParamMap::value_type("RANDOMSEED", Util::Param("RANDOMSEED", 0)));
401  parameters.insert(Util::ParamMap::value_type("TRYTOCOMPACT", Util::Param("TRYTOCOMPACT", false)));
402  parameters.insert(Util::ParamMap::value_type("CALCULATEALLLEADCURRENTS", Util::Param("CALCULATEALLLEADCURRENTS", false)));
403  parameters.insert(Util::ParamMap::value_type("NEWMEYER", Util::Param("NEWMEYER", false )));
404  parameters.insert(Util::ParamMap::value_type("ZERORESISTANCETOL", Util::Param("ZERORESISTANCETOL", 1.0e-100 )));
405  parameters.insert(Util::ParamMap::value_type("CHECKFORZERORESISTANCE", Util::Param("CHECKFORZERORESISTANCE", true )));
406  parameters.insert(Util::ParamMap::value_type("DIGINITSTATE", Util::Param("DIGINITSTATE", 3 )));
407 }
408 
409 //-----------------------------------------------------------------------------
410 // Function : DeviceOptions::operator<<
411 // Purpose : "<<" operator
412 // Special Notes :
413 // Scope : public
414 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
415 // Creation Date : 5/23/05
416 //-----------------------------------------------------------------------------
417 std::ostream & operator<<(std::ostream & os, const DeviceOptions & devOp)
418 {
419  os << "\n\n-----------------------------------------" << std::endl
420  << "\tDevice Options:\n"
421  << "\t\tdefad = " << devOp.defad << "\n"
422  << "\t\tdefas = " << devOp.defas << "\n"
423  << "\t\tdefl = " << devOp.defl << "\n"
424  << "\t\tdefw = " << devOp.defw << "\n"
425  << "\t\tabstol = " << devOp.abstol << "\n"
426  << "\t\treltol = " << devOp.reltol << "\n"
427  << "\t\tchgtol = " << devOp.chgtol << "\n"
428  << "\t\tgmin = " << devOp.gmin << "\n"
429  << "\t\tgmin_orig = " << devOp.gmin_orig << "\n"
430  << "\t\tgmin_init = " << devOp.gmin_init << "\n"
431  << "\t\tgmin_scalar = " << devOp.gmin_scalar << "\n"
432  << "\t\tgmax = " << devOp.gmax << "\n"
433  << "\t\ttnom = " << devOp.tnom << "\n"
434  << "\t\tscale_src = " << devOp.scale_src << "\n"
435  << "\t\tnumericalJacobianFlag = " << devOp.numericalJacobianFlag << "\n"
436  << "\t\ttestJacobianFlag = " << devOp.testJacobianFlag << "\n"
437  << "\t\ttestJacStartStep = " << devOp.testJacStartStep << "\n"
438  << "\t\ttestJacStopStep = " << devOp.testJacStopStep << "\n"
439  << "\t\ttestJacWarn = " << devOp.testJacWarn << "\n"
440  << "\t\ttestJacDeviceName = " << devOp.testJacDeviceName << "\n"
441 
442  << "\t\ttestJac_relTol = " << devOp.testJac_relTol << "\n"
443  << "\t\ttestJac_absTol = " << devOp.testJac_absTol << "\n"
444  << "\t\ttestJac_SqrtEta = " << devOp.testJac_SqrtEta << "\n"
445  << "\t\tdeviceSens_dp = " << devOp.deviceSens_dp << "\n"
446 
447  << "\t\tvoltageLimiterFlag = " << devOp.voltageLimiterFlag << "\n"
448  << "\t\tlambertWFlag = " << devOp.lambertWFlag << "\n"
449  << "\t\ticMultiplier = " << devOp.icMultiplier << "\n"
450  << "\t\tdefaultMaxTimeStep = " << devOp.defaultMaxTimeStep << "\n"
451  << "\t\tvdsScaleMin = " << devOp.vdsScaleMin << "\n"
452  << "\t\tvgstConst = " << devOp.vgstConst << "\n"
453  << "\t\tnumGainScaleBlocks = " << devOp.numGainScaleBlocks << "\n"
454  << "\t\tstaggerGainScale = " << devOp.staggerGainScale << "\n"
455  << "\t\trandomizeVgstConst = " << devOp.randomizeVgstConst << "\n"
456  << "\t\tlength0 = " << devOp.length0 << "\n"
457  << "\t\twidth0 = " << devOp.width0 << "\n"
458  << "\t\ttox0 = " << devOp.tox0 << "\n"
459  << "\t\tminres = " << devOp.minRes << "\n"
460  << "\t\tmincap = " << devOp.minCap << "\n"
461  << "\t\tdebugMinTimestep = " << devOp.debugMinTimestep << "\n"
462  << "\t\tdebugMaxTimestep = " << devOp.debugMaxTimestep << "\n"
463  << "\t\tdebugMinTime = " << devOp.debugMinTime << "\n"
464  << "\t\tdebugMaxTime = " << devOp.debugMaxTime << "\n"
465  << "\t\tverboseLevel = " << devOp.verboseLevel << "\n"
466  << "\t\tnewExcessPhase = " << devOp.newExcessPhase << "\n"
467  << "\t\tdefaultNewExcessPhase = " << devOp.defaultNewExcessPhase << "\n"
468  << "\t\texcessPhaseScalar1 = " << devOp.excessPhaseScalar1 << "\n"
469  << "\t\texcessPhaseScalar2 = " << devOp.excessPhaseScalar2 << "\n"
470  << "\t\tnewMeyerFlag = " << devOp.newMeyerFlag << "\n"
471  << "\t\tdigInitState = " << devOp.digInitState << "\n"
472  << Xyce::section_divider
473  << std::endl;
474 
475  return os;
476 }
477 
478 } // namespace Device
479 } // namespace Xyce
double defad
MOS drain diffusion area.
double defw
MOS channel width.
#define CONSTCtoK
Definition: N_DEV_Const.h:52
double testJac_absTol
abstol for num. jacobian diagnostic.
#define CONSTREFTEMP
Definition: N_DEV_Const.h:56
double chgtol
absolute charge error tolerance.
double reltol
relative current error tolerance.
Pure virtual class to augment a linear system.
unsigned int randomSeed
seed for random number generator used by some devices.
double gmax
maximum allowed conductance.
double testJac_relTol
reltol for num. jacobian diagnostic
double gmin_scalar
this is needed for gmin-homotopy.
static const bool EXCESS_PHASE
double defl
MOS channel length.
double tnom
nominal temperature for device params.
double deviceSens_dp
similar to eta, but for numerical device sensitivities
double gmin_init
this is needed for gmin-homotopy.
bool tryToCompact
Try to compact past history for LTRA device(s).
double abstol
absolute current error tolerance.
bool calculateAllLeadCurrents
configure all devices to load lead currents
double defas
MOS source diffusion area.
bool setOptions(const Util::OptionBlock &option_block)
int digInitState
used to initialize all of the digital gates in a circuit
double defaultMaxTimeStep
mosfet homotopy:
static void populateMetadata(IO::PkgOptionsMgr &options_manager)
double testJac_SqrtEta
dx = numJacSqrtEta * (1.0 + std::fabs(soln[i]));
double gmin
minimum allowed conductance.
double scale_src
scaling for source loads
Util::Param temp
operating temperature of ckt.
bool defaultNewExcessPhase
default is true for MPDE, false for non-MPDE.
double gmin_orig
this is needed for gmin-homotopy.
std::ostream & operator<<(std::ostream &os, const Configuration &configuration)
Definition: N_DEV_Dump.C:134