Xyce  6.1
N_DEV_DeviceInstance.h
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_DeviceInstance.h,v $
27 //
28 // Purpose : This file contains the device instance base class.
29 //
30 // Special Notes :
31 //
32 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
33 //
34 // Creation Date : 03/30/00
35 //
36 // Revision Information:
37 // ---------------------
38 //
39 // Revision Number: $Revision: 1.200.2.1 $
40 //
41 // Revision Date : $Date: 2015/04/02 18:20:09 $
42 //
43 // Current Owner : $Author: tvrusso $
44 //-----------------------------------------------------------------------------
45 
46 #ifndef Xyce_N_DEV_DeviceInstance_h
47 #define Xyce_N_DEV_DeviceInstance_h
48 
49 #include <list>
50 #include <map>
51 #include <string>
52 #include <vector>
53 
54 #include <N_ANP_fwd.h>
55 #include <N_DEV_fwd.h>
56 #include <N_LAS_fwd.h>
57 
58 #include <N_DEV_DeviceEntity.h>
59 #include <N_DEV_DeviceSupport.h>
60 #include <N_UTL_Diagnostic.h>
61 #include <N_UTL_IndexPair.h>
62 #include <N_UTL_NodeSymbols.h>
63 
64 namespace Xyce {
65 namespace Device {
66 
67 //-----------------------------------------------------------------------------
68 // Class : DeviceInstance
69 // Purpose :
70 // Special Notes :
71 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
72 // Creation Date : 3/16/00
73 //-----------------------------------------------------------------------------
75 {
76 private:
78 
79 public:
81  const InstanceBlock & instance_block,
82  ParametricData<void> & parametric_data,
83  const FactoryBlock & factory_block);
84 
85  virtual ~DeviceInstance();
86 
87 private:
90 
91 public:
92  virtual std::ostream &printName(std::ostream &os) const;
93 
94  // This function configures the device to request space in the store
95  // vector for lead current calculations. It must be called soon
96  // after the constructor call before the store vector is allocated.
97  virtual void enableLeadCurrentCalc();
98 
99  virtual void registerGIDs(const IndexPairVector & intGIDListRef, const IndexPairVector &extGIDListRef)
100  {}
101 
102  virtual void registerStateGIDs(const IndexPairVector & staGIDListRef)
103  {}
104 
105  virtual void registerStoreGIDs(const IndexPairVector & stoGIDListRef)
106  {}
107 
108  virtual void registerLIDs( const LocalIdVector & intLIDVecRef, const LocalIdVector & extLIDVecRef )
109  {}
110 
111  virtual void registerStateLIDs( const LocalIdVector & staLIDVecRef )
112  {}
113 
114  virtual void registerStoreLIDs( const LocalIdVector & stoLIDVecRef )
115  {}
116 
117  virtual void registerBranchDataLIDs( const LocalIdVector & branchDataLIDVecRef )
118  {}
119 
120  virtual const std::vector<std::string> & getDepSolnVars();
121  virtual void registerDepSolnGIDs( const std::vector< IdVector > & varList );
122 
123  virtual const std::vector<std::string> & getDepStateVars();
124  virtual void registerDepStateGIDs( const std::vector< IdVector > & varList );
125 
126  virtual const std::vector<std::string> & getDepStoreVars();
127  virtual void registerDepStoreGIDs( const std::vector< IdVector > & varList );
128 
129  virtual const std::vector<std::string> & getDepLeadCurrentVars();
130  virtual void registerDepLeadCurrentGIDs( const std::vector< IdVector > & varList );
131 
132 
133  virtual void registerDepSolnLIDs(const std::vector< IdVector > & depSolnLIDVecRef);
134 
135  virtual void registerDepStateLIDs(const std::vector< IdVector > & depStaLIDVecRef )
136  {}
137 
138  virtual void registerDepStoreLIDs( const std::vector< IdVector > & depStoLIDVecRef )
139  {}
140 
141  virtual const JacobianStamp & jacobianStamp() const
142  {
143  static JacobianStamp dummy;
144  return dummy;
145  }
146 
147  virtual void registerJacLIDs( const JacobianStamp & jacLIDVec );
148 
149  virtual void registerGIDData(
150  const std::vector<int> & counts,
151  const IdVector & GIDs,
152  const JacobianStamp & jacGIDs );
153 
154  virtual void setupPointers()
155  {}
156 
157  virtual const IdVector & getDepSolnGIDVec()
158  {
159  return expVarGIDs;
160  }
161 
162  virtual const IndexPairVector & getIndexPairList()
163  {
164  return indexPairList;
165  }
166 
167  virtual bool getInstanceBreakPoints (std::vector<Util::BreakPoint> &breakPointTimes);
168 
169  virtual bool updateSource ();
170 
171  virtual bool processParams ();
172 
173  virtual bool processInstanceParams ()
174  {
175  return true;
176  }
177 
178  virtual bool updateTemperature(const double & temp_tmp);
179 
180  virtual bool isConverged();
181 
182  virtual bool testDAEMatrices(const std::vector<const std::string *> &nameVec);
183 
184  virtual bool loadTrivialDAE_FMatrixStamp ();
185  bool trivialStampLoader (Linear::Matrix * matPtr);
186  bool zeroMatrixDiagonal (Linear::Matrix * matPtr);
187 
188  virtual bool updateIntermediateVars() = 0;
189  virtual bool updatePrimaryState() = 0;
190  virtual bool updateSecondaryState ();
191  virtual bool setIC ();
192 
193  // This indicates if the device has functions that can output plot files for
194  // internal variables.
195  virtual bool plotfileFlag () {return false;}
196 
197  // load zeros into mask for equations that should not be used
198  // to compute error estimates. Return true if any zeros set.
199  // Default implementation just does nothing (leaves everything 1.0)
200  virtual void loadErrorWeightMask() {}
201 
202  // tell device instance that current solution has been accepted at
203  // current time. Most devices don't care, but the transmission line
204  // does.
205  virtual void acceptStep() {}
206 
207  // new DAE functions:
208  virtual bool loadDAEQVector ()=0;
209  virtual bool loadDAEFVector ()=0;
210  virtual bool loadDAEBVector (){return true;}
211 
212  virtual bool loadDAEdQdx ()=0;
213  virtual bool loadDAEdFdx ()=0;
214 
215  virtual int getNumNoiseSources () const
216  {
217  return 0;
218  }
219 
220  virtual void setupNoiseSources (Xyce::Analysis::NoiseData & noiseDataVec)
221  {
222  return;
223  }
224 
225  virtual void getNoiseSources (Xyce::Analysis::NoiseData & noiseDataVec)
226  {
227  return;
228  }
229 
230  const InstanceName &getName() const
231  {
232  return name_;
233  }
234 
235  int getNumIntVars() const
236  {
237  return numIntVars;
238  }
239 
240  int getNumExtVars() const
241  {
242  return numExtVars;
243  }
244 
245  int getNumStateVars() const
246  {
247  return numStateVars;
248  }
249 
250  int getNumStoreVars() const
251  {
252  return numStoreVars;
253  }
254 
256  {
257  return numBranchDataVars;
258  }
259 
260  void setNumStoreVars(int num_store_vars)
261  {
262  numStoreVars = num_store_vars;
263  }
264 
265  void setNumBranchDataVars(int num_branch_data_vars)
266  {
267  numBranchDataVars = num_branch_data_vars;
268  }
269 
270 
271  virtual const std::vector<int> & getDevConMap();
272 
273  virtual DeviceState * getInternalState();
274  virtual bool setInternalState( const DeviceState & state );
275 
276  virtual bool loadDFDV(int iElectrode, Linear::Vector * dfdvPtr);
277  virtual bool calcConductance (int iElectrode, const Linear::Vector * dxdvPtr);
278 
279  //-----------------------------------------------------------------------------
280  // Function : Instance::loadNodeSymbols
281  // Purpose :
282  // Special Notes :
283  // Scope : public
284  // Creator : Richard Schiek, Electrical Models & Simulations
285  // Creation Date : 10/23/2014
286  //-----------------------------------------------------------------------------
287  /// Populates and returns the store name map.
288  ///
289  /// If the DeviceInstance::storeNameMap is empty, populate it.
290  ///
291  /// For the purpose of lead currents, store vector elements must be given
292  /// names that can be used to locate lead currents at print time.
293  /// When a netlist attempts to print, say, "I(R1)" the output code looks for
294  /// an entry in the store vector named R1:DEV_I.
295  ///
296  /// This method does the assignment of names to various vector elements.
297  ///
298  /// @author David G. Baur
299  /// @date 12/18/2014
300  virtual void loadNodeSymbols(Util::SymbolTable &symbol_table) const = 0;
301 
302  virtual bool outputPlotFiles () {return true;}
303 
304  // two level newton and PDE-continuation
305  virtual bool enablePDEContinuation(int &max_PDE_continuation_steps);
306  virtual bool disablePDEContinuation();
307  virtual void setPDEContinuationAlpha (double alpha);
308  virtual void setPDEContinuationBeta (double beta );
309 
310  virtual bool setInitialGuess ();
311  virtual double getMaxTimeStepSize ();
312 
313  virtual void varTypes( std::vector<char> & varTypeVec ) {}
314 
315 protected:
316  void jacStampMap(
317  const JacobianStamp & stamp_parent,
318  IdVector & map_parent,
319  JacobianStamp & map2_parent,
320  JacobianStamp & stamp,
321  IdVector & map,
322  JacobianStamp & map2,
323  int from,
324  int to,
325  int original_size);
326 
328  const JacobianStamp & stamp_parent,
329  JacobianStamp & map2_parent,
330  JacobianStamp & stamp,
331  JacobianStamp & map2);
332 
333  void outputJacStamp(const JacobianStamp & jac);
334  void outputJacMaps(const std::vector<int> & jacMap, const JacobianStamp & jacMap2);
335 
336 public:
337  bool getOrigFlag() const
338  {
339  return origFlag;
340  }
341 
342  void setOrigFlag(bool origFlag_local)
343  {
344  origFlag = origFlag_local;
345  }
346 
347  const IdVector &getDevLIDs() const
348  {
349  return devLIDs;
350  }
351 
352  const std::vector<IdVector > &getDevJacLIDs() const
353  {
354  return devJacLIDs;
355  }
356 
357  const IdVector &getStaLIDVec() const
358  {
359  return staLIDVec;
360  }
361 
362  bool getMergeRowColChecked() const
363  {
364  return mergeRowColChecked;
365  }
366  void setMergeRowColChecked(bool mergeRowColChecked_local)
367  {
368  mergeRowColChecked = mergeRowColChecked_local;
369  }
370 
372  {
373  return mlData;
374  }
375 
377  {
378  return mlData;
379  }
380 
381  const ExternData &getExternData() const {
382  return extData;
383  }
384 
385 private:
388 
389 protected:
391 
392  IndexPairVector indexPairList;
393  IndexPairVector intGIDList;
394  IndexPairVector extGIDList;
395  IndexPairVector staGIDList;
396 
401  IdVector devLIDs; ///< devLIDs is a combined LID vector, containing int, ext, and expVar ID's.
403 
404  // device support class: (limiter functions, etc.)
406 
407 private:
408  bool configuredForLeadCurrent; // flag which indicates that numStoreVars already includes numLeadCurrentStoreVars
409 
410 public:
411  std::vector<int> & cols;
412  std::vector<double> & vals;
413 
415 
416  bool psLoaded;
417  bool ssLoaded;
418  bool rhsLoaded;
419 
420  bool origFlag;
421 
427 
429  bool loadLeadCurrent; // flag indicating that we want to load lead current data during F & Q load
430 
431  int numBranchDataVars; // number of spaces to allocate in lead current and junction voltage arrays for lead current and power calculations
432  // this is initially set to zero but the next variable is added to this if the parser find a lead current or power
433  // calculation called for by the simulation.
434  int numBranchDataVarsIfAllocated; // number of spaces to allocate in lead current and junction voltage arrays for lead current and power calculations
435 
436  std::vector<int> devConMap;
437 
439 };
440 
441 //-----------------------------------------------------------------------------
442 // Function : DeviceInstance::updateSecondaryState
443 // Purpose :
444 // Special Notes :
445 // Scope : public
446 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
447 // Creation Date : 11/30/00
448 //-----------------------------------------------------------------------------
450 {
451  return true;
452 }
453 
454 //-----------------------------------------------------------------------------
455 // Function : DeviceInstance::setIC
456 // Purpose :
457 // Special Notes :
458 // Scope : public
459 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
460 // Creation Date : 07/22/03
461 //-----------------------------------------------------------------------------
462 inline bool DeviceInstance::setIC ()
463 {
464  return true;
465 }
466 
467 //-----------------------------------------------------------------------------
468 // Function : DeviceInstance::getInternalState
469 // Purpose :
470 // Special Notes :
471 // Scope : public
472 // Creator : Robert J Hoekstra, SNL, Parallel Computational Sciences
473 // Creation Date : 09/02/01
474 //-----------------------------------------------------------------------------
476 {
477  return NULL;
478 }
479 
480 //-----------------------------------------------------------------------------
481 // Function : DeviceInstance::getDevConMap
482 // Purpose : Get connectivity map for leads. Zero means a lead is
483 // connected to ground. Other values indicate subsets of
484 // leads that have connection to each other. Example would
485 // be a mosfet which would have 1 for gate and 2 for drain
486 // and source and zero for bulk, assuming bulk is grounded
487 // Special Notes :
488 // Scope : public
489 // Creator : Dave Shirley, PSSI
490 // Creation Date : 06/20/05
491 //-----------------------------------------------------------------------------
492 inline const std::vector<int> & DeviceInstance::getDevConMap()
493 {
494  return devConMap;
495 }
496 
497 //-----------------------------------------------------------------------------
498 // Function : DeviceInstance::loadDFDV
499 // Purpose :
500 // Special Notes :
501 // Scope : public
502 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
503 // Creation Date : 12/03/02
504 //-----------------------------------------------------------------------------
505 inline bool DeviceInstance::loadDFDV(int iElectrode, Linear::Vector * dfdvPtr)
506 {
507  return true;
508 }
509 
510 //-----------------------------------------------------------------------------
511 // Function : DeviceInstance::calcConductance
512 // Purpose :
513 // Special Notes :
514 // Scope : public
515 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
516 // Creation Date : 12/03/02
517 //-----------------------------------------------------------------------------
518 inline bool DeviceInstance::calcConductance (int iElectrode, const Linear::Vector * dxdvPtr)
519 {
520  return true;
521 }
522 
523 //-----------------------------------------------------------------------------
524 // Function : DeviceInstance:isConverged ()
525 // Purpose : Return whether a device has done something that should
526 // be interpreted as invalidating other convergence tests
527 // (i.e. that means this step should not be considered
528 // converged even if norms are good)
529 // Since origFlag is set to true by the DeviceInstance
530 // constructor, this is a suitable base class method for
531 // almost all devices. Devices with more complex convergence
532 // issues can override.
533 // Special Notes :
534 // Scope : public
535 // Creator : Tom Russo, SNL, Component Information and Models
536 // Creation Date : 03/22/05
537 //-----------------------------------------------------------------------------
539 {
540  return origFlag;
541 }
542 
543 //-----------------------------------------------------------------------------
544 // Function : DeviceInstance::getInstanceBreakPoints
545 // Purpose : virtual function for obtaining breakpoints from a device.
546 //
547 // Special Notes : No-op for the base class version.
548 //
549 // Scope : public
550 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
551 // Creation Date : 2/05/06
552 //-----------------------------------------------------------------------------
553 inline bool DeviceInstance::getInstanceBreakPoints(std::vector<Util::BreakPoint> &breakPointTimes)
554 {
555  return false;
556 }
557 
558 //-----------------------------------------------------------------------------
559 // Function : DeviceInstance::updateSource
560 // Purpose : virtual function for obtaining breakpoints from a device.
561 //
562 // Special Notes : No-op for the base class version.
563 //
564 // Scope : public
565 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
566 // Creation Date : 2/05/06
567 //-----------------------------------------------------------------------------
569 {
570  return true;
571 }
572 
573 inline void addInternalNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name) {
574  Util::addSymbol(symbol_table, Util::SOLUTION_SYMBOL, index, spiceInternalName(instance_name, lead_name));
575 }
576 
577 inline void addInternalNode(Util::SymbolTable &symbol_table, int index, const std::string &lead_name) {
578  Util::addSymbol(symbol_table, Util::SOLUTION_SYMBOL, index, lead_name);
579 }
580 
581 inline void addStoreNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name) {
582  Util::addSymbol(symbol_table, Util::STORE_SYMBOL, index, spiceStoreName(instance_name, lead_name));
583 }
584 
585 inline void addStoreNode(Util::SymbolTable &symbol_table, int index, const std::string &lead_name) {
586  Util::addSymbol(symbol_table, Util::STORE_SYMBOL, index, lead_name);
587 }
588 
589 inline void addStateNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name) {
590  Util::addSymbol(symbol_table, Util::STATE_SYMBOL, index, spiceInternalName(instance_name, lead_name));
591 }
592 
593 inline void addBranchDataNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name) {
594  Util::addSymbol(symbol_table, Util::BRANCH_SYMBOL, index, spiceStoreName(instance_name, lead_name));
595 }
596 
597 inline void addBranchDataNode(Util::SymbolTable &symbol_table, int index, const std::string &lead_name) {
598  Util::addSymbol(symbol_table, Util::BRANCH_SYMBOL, index, lead_name);
599 }
600 
601 } // namespace Device
602 } // namespace Xyce
603 
604 #endif
605 
const InstanceName & getName() const
virtual void registerGIDData(const std::vector< int > &counts, const IdVector &GIDs, const JacobianStamp &jacGIDs)
virtual const IndexPairVector & getIndexPairList()
virtual void setupNoiseSources(Xyce::Analysis::NoiseData &noiseDataVec)
virtual void registerStoreLIDs(const LocalIdVector &stoLIDVecRef)
void addStateNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
virtual void registerStateGIDs(const IndexPairVector &staGIDListRef)
std::vector< double > & vals
const std::vector< IdVector > & getDevJacLIDs() const
virtual DeviceState * getInternalState()
Pure virtual class to augment a linear system.
Devices and models are each named.
virtual void getNoiseSources(Xyce::Analysis::NoiseData &noiseDataVec)
virtual void registerGIDs(const IndexPairVector &intGIDListRef, const IndexPairVector &extGIDListRef)
void addInternalNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
void outputJacMaps(const std::vector< int > &jacMap, const JacobianStamp &jacMap2)
virtual bool loadDAEFVector()=0
void setNumStoreVars(int num_store_vars)
virtual bool loadDAEQVector()=0
void addBranchDataNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
virtual bool enablePDEContinuation(int &max_PDE_continuation_steps)
virtual void registerDepSolnGIDs(const std::vector< IdVector > &varList)
virtual bool loadDAEdFdx()=0
void jacStampMap_fixOrder(const JacobianStamp &stamp_parent, JacobianStamp &map2_parent, JacobianStamp &stamp, JacobianStamp &map2)
virtual void registerDepStateLIDs(const std::vector< IdVector > &depStaLIDVecRef)
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
virtual bool getInstanceBreakPoints(std::vector< Util::BreakPoint > &breakPointTimes)
void setOrigFlag(bool origFlag_local)
virtual bool setInternalState(const DeviceState &state)
const IdVector & getStaLIDVec() const
virtual bool testDAEMatrices(const std::vector< const std::string * > &nameVec)
const MatrixLoadData & getMatrixLoadData() const
virtual bool loadDFDV(int iElectrode, Linear::Vector *dfdvPtr)
virtual const std::vector< int > & getDevConMap()
virtual const std::vector< std::string > & getDepStoreVars()
virtual void registerStateLIDs(const LocalIdVector &staLIDVecRef)
virtual void registerDepStateGIDs(const std::vector< IdVector > &varList)
std::vector< int > IdVector
Definition: N_DEV_fwd.h:186
virtual void registerLIDs(const LocalIdVector &intLIDVecRef, const LocalIdVector &extLIDVecRef)
virtual bool calcConductance(int iElectrode, const Linear::Vector *dxdvPtr)
const IdVector & getDevLIDs() const
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
virtual void registerBranchDataLIDs(const LocalIdVector &branchDataLIDVecRef)
virtual void registerDepSolnLIDs(const std::vector< IdVector > &depSolnLIDVecRef)
virtual const std::vector< std::string > & getDepLeadCurrentVars()
virtual void registerDepLeadCurrentGIDs(const std::vector< IdVector > &varList)
std::vector< std::vector< int > > JacobianStamp
Definition: N_DEV_fwd.h:185
virtual bool updateTemperature(const double &temp_tmp)
Class ParametricData manages the configuration information and the parameter binding map...
Definition: N_DEV_Pars.h:1303
bool trivialStampLoader(Linear::Matrix *matPtr)
void setMergeRowColChecked(bool mergeRowColChecked_local)
virtual void registerStoreGIDs(const IndexPairVector &stoGIDListRef)
DeviceInstance & operator=(const DeviceInstance &)
virtual bool loadDAEdQdx()=0
virtual bool updatePrimaryState()=0
virtual void loadNodeSymbols(Util::SymbolTable &symbol_table) const =0
Populates and returns the store name map.
IdVector LocalIdVector
Definition: N_DEV_fwd.h:187
void addStoreNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
virtual void registerDepStoreLIDs(const std::vector< IdVector > &depStoLIDVecRef)
virtual void varTypes(std::vector< char > &varTypeVec)
void outputJacStamp(const JacobianStamp &jac)
virtual int getNumNoiseSources() const
virtual void setPDEContinuationBeta(double beta)
virtual const std::vector< std::string > & getDepStateVars()
IdVector devLIDs
devLIDs is a combined LID vector, containing int, ext, and expVar ID's.
void jacStampMap(const JacobianStamp &stamp_parent, IdVector &map_parent, JacobianStamp &map2_parent, JacobianStamp &stamp, IdVector &map, JacobianStamp &map2, int from, int to, int original_size)
virtual void registerDepStoreGIDs(const std::vector< IdVector > &varList)
virtual void setPDEContinuationAlpha(double alpha)
std::string spiceStoreName(const InstanceName &instance_name, const std::string &lead)
virtual const JacobianStamp & jacobianStamp() const
void setNumBranchDataVars(int num_branch_data_vars)
const ExternData & getExternData() const
std::string spiceInternalName(const InstanceName &instance_name, const std::string &lead)
bool zeroMatrixDiagonal(Linear::Matrix *matPtr)
virtual std::ostream & printName(std::ostream &os) const
virtual const IdVector & getDepSolnGIDVec()
InstanceBlock represent a device instance line from the netlist.
virtual bool updateIntermediateVars()=0
virtual const std::vector< std::string > & getDepSolnVars()