Xyce  6.1
N_DEV_BJT.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_BJT.h,v $
27 //
28 // Purpose :
29 //
30 // Special Notes :
31 //
32 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
33 //
34 // Creation Date : 02/28/00
35 //
36 // Revision Information:
37 // ---------------------
38 //
39 // Revision Number: $Revision: 1.171.2.1 $
40 //
41 // Revision Date : $Date: 2015/04/02 18:20:10 $
42 //
43 // Current Owner : $Author: tvrusso $
44 //-----------------------------------------------------------------------------
45 
46 
47 #ifndef Xyce_N_DEV_BJT_H
48 #define Xyce_N_DEV_BJT_H
49 
50 // ---------- Standard Includes ----------
51 
52 // ---------- Xyce Includes ----------
53 #include <N_DEV_Configuration.h>
54 #include <N_DEV_DeviceMaster.h>
55 #include <N_DEV_DeviceInstance.h>
56 #include <N_DEV_DeviceModel.h>
57 #include <N_DEV_DeviceBlock.h>
58 #include <N_DEV_Param.h>
59 
60 namespace Xyce {
61 namespace Device {
62 namespace BJT {
63 
64 class Model;
65 class Instance;
66 
67 struct Traits : public DeviceTraits<Model, Instance>
68 {
69  static const char *name() {return "Bipolar Junction Transistor";}
70  static const char *deviceTypeName() {return "Q level 1";}
71  static int numNodes() {return 3;}
72  static int numOptionalNodes() {return 4;}
73  static int numFillNodes() {return 1;}
74  static bool modelRequired() {return true;}
75  static bool isLinearDevice() {return false;}
76 
77  static Device *factory(const Configuration &configuration, const FactoryBlock &factory_block);
78  static void loadModelParameters(ParametricData<Model> &model_parameters);
79  static void loadInstanceParameters(ParametricData<Instance> &instance_parameters);
80 };
81 
82 //-----------------------------------------------------------------------------
83 // Class : Instance
84 // Purpose : This class refers to a single instance of the BJT
85 // device. It contains indices into the matrix equation.
86 // See the comments for the ResistorInstance class for
87 // more details.
88 //
89 // The bjt will have 4 external nodes: collector, base,
90 // emitter, and substrate, and 3 internal nodes:
91 // collectorPrime, basePrime, and emitterPrime.
92 // Special Notes :
93 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
94 // Creation Date : 3/16/00
95 //-----------------------------------------------------------------------------
96 
97 class Instance : public DeviceInstance
98 {
99  friend class ParametricData<Instance>;
100  friend class Model;
101  friend class Traits;friend class Master;
102 
103  // functions
104 public:
105 
106  Instance(
107  const Configuration & configuration,
108  const InstanceBlock & IB,
109  Model & it_MB,
110  const FactoryBlock & factory_block);
111 
112  ~Instance();
113 
114 private:
115  Instance(const Instance &);
116  Instance &operator=(const Instance &);
117 
118 public:
119  void registerLIDs( const std::vector<int> & intLIDVecRef,
120  const std::vector<int> & extLIDVecRef );
121  void registerStateLIDs( const std::vector<int> & stateLIDVecRef );
122  void registerStoreLIDs( const std::vector<int> & stoLIDVecRef);
123 
124  void loadNodeSymbols(Util::SymbolTable &symbol_table) const; // override
125 
126  const std::vector< std::vector<int> > & jacobianStamp() const;
127  void registerJacLIDs( const std::vector< std::vector<int> > & jacLIDVec );
128 
129  bool processParams ();
130  bool updateTemperature (const double & temp = -999.0 );
131  bool lambertWCurrent (double &Id, double &Gd, double Vd, double Vte, double Isat);
132 
133  bool updateIntermediateVars ();
134  bool updatePrimaryState ();
135  bool updateSecondaryState ();
136 
137  int getNumNoiseSources () const;
138  void setupNoiseSources (Xyce::Analysis::NoiseData & noiseData);
139  void getNoiseSources (Xyce::Analysis::NoiseData & noiseData);
140 
141  void loadErrorWeightMask ();
142 
143 #ifdef Xyce_DEBUG_EXCESS_PHASE
144  bool plotfileFlag () {return true;}
145 #else
146  bool plotfileFlag () {return false;}
147 #endif
148 
151  (double & iEX, double & gEX, double & iC_local);
152 
153  // load functions, residual:
154  bool loadDAEQVector ();
155  bool loadDAEFVector ();
156 
157  void auxDAECalculations ();
158 
159  // load functions, Jacobian:
160  bool loadDAEdQdx ();
161  bool loadDAEdFdx ();
162 
163  // Debugging Excess Phase function:
164  bool outputPlotFiles ();
165 
166  void setupPointers();
167 
168 protected:
169 private:
170 
171  //attributes
172 public:
173  //iterator reference to the BJT model which owns this instance.
174  // Getters and setters
176  {
177  return model_;
178  }
179 
180 private:
181 
182  Model & model_; //< Owning model
183 
184  //external instance params
185  double AREA; // The normalized emitter area (AREA)
186  double icVBE; // the inital base-emitter voltage (ICVBE)
187  double icVCE; // the inital collector-emitter voltage (ICVCE)
188  double TEMP; // instance temperature (TEMP)
189  bool OFF; // initial mode of operation (OFF)
191  bool IC_GIVEN;
193  bool offFlag;
194 
195  //generated instance params
196  double vt; //thermal junc. volt.
197  double tSatCur; //saturation current (temp. adj.)
198  double tBetaF; //forward beta (temp. adj.)
199  double tBetaR; //reverse beta (temp. adj.)
200  double tBELeakCur; //BE leakage current (temp. adj.)
201  double tBCLeakCur; //BC leakage current (temp. adj.)
202  double tBECap; //BE capacitance (temp. adj.)
203  double tBCCap; //BC capacitance (temp. adj.)
204  double tBEPot; //BE potential (temp. adj.)
205  double tBCPot; //BC potential (temp. adj.)
206  double tDepCap; //join pt in diode curve (temp. adj.)
207  double tF1; //polynomial coeff. (temp. adj.)
208  double tF4; //polynomial coeff. (temp. adj.)
209  double tF5; //polynomial coeff. (temp. adj.)
210  double tVCrit; //critical voltage (temp. adj.)
211 
212  // additional temperature-adjusted parameters
215  double tRollOffExp;
216  double tInvRollOffF;
217  double tInvRollOffR;
220  double tBaseResist;
223 
224  //generated intermediate variables
225  double vEEp; // e-e' voltage
226  double vBBp; // b-b' voltage
227  double vCCp; // c-c' voltage
228 
229  double vBE; // b'-e' voltage
230  double vBC; // b'-c' voltage
231  double vBX; // b-c' voltage
232  double vCS; // c'-s voltage
233 
234  double vBE_old; // b'-e' voltage, from previous newton step.
235  double vBC_old; // b'-c' voltage, from previous newton step.
236 
237  double vBE_orig; // b'-e' voltage, before pinning.
238  double vBC_orig; // b'-c' voltage, before pinning.
239 
240  double qB; // Base charge factor
241  double invqB; // inverse of qB
242  double dqBdvEp; // d(qB)/d(vE')
243  double dqBdvBp; // d(qB)/d(vB')
244  double dqBdvCp; // d(qB)/d(vC')
245 
246  double iBE; // b-e current (not including capacitors)
247  double iBC; // b-c current (not including capacitors)
248  double iBEleak;
249  double iBCleak;
250  double iCE; // c-e current
251 
252  double iB; // total current to base
253  double iC; // total current to collector
254  double iE; // total current to emitter
255 
256  // high current versions of iBE, gBE.
257  double iBEhighCurr;
258  double gBEhighCurr;
259 
260  double gBE;
261  double gBC;
262  double gBEleak;
263  double gBCleak;
264 
265  double gEpr; // conductance for e-e' resistance
266  double gCpr; // conductance for c-c' resistance
267 
268  double gX; // conductance for b-b' resistance
269 
270  double geqCB; // high current forward transit effect (conductance)
271  double capeqCB; // high current forward transit effect (capacitance)
272 
273  // Partial derivatives that originally were local to load function
274  double diBrdvB;
275  double diBrdvEp;
276  double diBrdvCp;
277  double diBrdvBp;
278  double diCEdvEp;
279  double diCEdvCp;
280  double diCEdvBp;
281  double diBEdvEp;
282  double diBEdvCp;
283  double diBEdvBp;
284 
285  double gCapBEdiff;
286  double gCapBEdep;
287  double gCapBCdiff;
288  double gCapBCdep;
289  double gCapBX;
290  double gCapCS;
291  double gBEtot;
292  double gBCtot;
293  //double gCpr;
294  //double gEpr;
295 
296 
297  //state variables
298  double qBEdiff; // charge in the b-e diffusion capacitor
299  double iBEdiff; // current through the b-e diffusion capacitor
300  double capBEdiff; // capacitance for b-e diffusion capacitor
301  double qBEdep; // charge in the b-e depletion capacitor
302  double iBEdep; // current through the b-e diffusion capacitor
303  double capBEdep; // capacitance for b-e depletion capacitor
304  double qCS; // charge in the c-s capacitor
305  double iCS; // current through the c-s capacitor
306  double capCS; // capacitance for c-s capacitor
307  double qBCdiff; // charge in the b-c diffusion capacitor
308  double iBCdiff; // current through the b-c diffusion capacitor
309  double capBCdiff; // capacitance for b-c diffusion capacitor
310  double qBCdep; // charge in the b-c depletion capacitor
311  double iBCdep; // current through the b-c depletion capacitor
312  double capBCdep; // capacitance for b-c depletion capacitor
313  double qBX; // charge in the b-cP capacitor
314  double iBX; // current through the b-cP capacitor
315  double capBX; // capacitance for b-cP capacitor
316 
317  //local indexing of solution and state variables
318  int li_Coll;
319  int li_CollP;
320  int li_Base;
321  int li_BaseP;
322  int li_Emit;
323  int li_EmitP;
324  int li_Subst;
325 
326  //new variables for full new DAE integration of excess phase term
327  int li_Ifx;
328  int li_dIfx;
329 
336 
337  // for the "old" excess phase calculation.
339 
340  // stored data for limiting and lead currents.
348 
349  //conductance values
350  double gcpr;
351  double gepr;
352  double gx;
353  double gm;
354  double go;
355  double gmu;
356  double gpi;
357  double gccs;
358  double geqbx;
359  double geqbc;
360 
361  // excess phase variables
362  double nextCexbc;
363  double currCexbc;
364  double lastCexbc;
365  double phaseScalar;
366  double dt0,dt1;
367 
368  // Offset variables corresponding to the above declared indices.
393 
394  //new offsets for full new DAE integration of excess phase term
397 
398  // ERK. These 3 are only needed for dcop.
402 
405 
411 
412 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
413  // f-matrix pointers:
438 
439  //new offsets for full new DAE integration of excess phase term
442 
443  // ERK. These 3 are only needed for dcop.
447 
450 
456 
457 
458  // q-matrix pointers:
483 
484  //new offsets for full new DAE integration of excess phase term
487 
488  // ERK. These 3 are only needed for dcop.
492 
495 
501 #endif
502 
503 
504  static std::vector< std::vector<int> > jacStamp_RB_RC_RE_;
505  static std::vector< std::vector<int> > jacStamp_RB_RC_;
506  static std::vector< std::vector<int> > jacStamp_RB_RE_;
507  static std::vector< std::vector<int> > jacStamp_RC_RE_;
508  static std::vector< std::vector<int> > jacStamp_RB_;
509  static std::vector< std::vector<int> > jacStamp_RC_;
510  static std::vector< std::vector<int> > jacStamp_RE_;
511  static std::vector< std::vector<int> > jacStamp_;
512 
513  static std::vector<int> jacMap_RB_RC_RE_;
514  static std::vector<int> jacMap_RB_RC_;
515  static std::vector<int> jacMap_RB_RE_;
516  static std::vector<int> jacMap_RC_RE_;
517  static std::vector<int> jacMap_RB_;
518  static std::vector<int> jacMap_RC_;
519  static std::vector<int> jacMap_RE_;
520  static std::vector<int> jacMap_;
521 
522  static std::vector< std::vector<int> > jacMap2_RB_RC_RE_;
523  static std::vector< std::vector<int> > jacMap2_RB_RC_;
524  static std::vector< std::vector<int> > jacMap2_RB_RE_;
525  static std::vector< std::vector<int> > jacMap2_RC_RE_;
526  static std::vector< std::vector<int> > jacMap2_RB_;
527  static std::vector< std::vector<int> > jacMap2_RC_;
528  static std::vector< std::vector<int> > jacMap2_RE_;
529  static std::vector< std::vector<int> > jacMap2_;
530 
532 };
533 
534 //-----------------------------------------------------------------------------
535 // Class : Model
536 // Purpose :
537 // Special Notes :
538 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
539 // Creation Date : 3/16/00
540 //-----------------------------------------------------------------------------
541 class Model : public DeviceModel
542 {
543  typedef std::vector<Instance *> InstanceVector;
544 
545  friend class ParametricData<Model>;
546  friend class Instance;
547  friend class Traits;friend class Master;
548 
549 public:
550  Model(
551  const Configuration & configuration,
552  const ModelBlock & MB,
553  const FactoryBlock & factory_block);
554 
555  ~Model();
556 
557 private:
558  Model();
559  Model(const Model &);
560  Model &operator=(const Model &);
561 
562 public:
564 
565  virtual void forEachInstance(DeviceInstanceOp &op) const /* override */;
566 
567  virtual std::ostream &printOutInstances(std::ostream &os) const;
568 
569  bool processParams ();
570  bool processInstanceParams ();
571 
572 
573 public:
574  void addInstance(Instance *instance)
575  {
576  instanceContainer.push_back(instance);
577  }
578 
579 private:
580  std::vector<Instance*> instanceContainer;
581 
582 private:
583 
584  //external model params
585  int TYPE; //+1 = NPN, -1 = PNP
586  double TNOM; //nominal temperature
587  double satCur; //Saturation Current (IS)
588 
589  double betaF; //forward beta (BF)
590  bool BFgiven; // given flag for forward beta (spice/Pspice)
591  bool BFMgiven; // given flag for forward beta (hspice)
592  double emissionCoeffF; //forward current emmission coeff (NF)
593  double earlyVoltF; //forward early voltage (VAF)
594  bool VAgiven; // given flag for fwd early voltage (Hspice/Pspice)
595  bool VAFgiven; // given flag for fwd early voltage (Spice)
596  bool VBFgiven; // given flag for fwd early voltage (Hspice)
597 
598  double rollOffF; //forward high current roll-off (IKF)
599  bool IKFgiven; // given flag for high current roll-off (spice)
600  bool IKgiven; // given flag for high current roll-off (pspice/hspice)
601  bool JBFgiven; // given flag for high current roll-off (hspice)
602 
603  double leakBECurrent; //BE leakage saturation current (ISE)
604  double leakBEEmissionCoeff;//BE leakage emission coeff. (NE)
605  bool NEgiven; // given flag for leakage emission coef.(NE) (spice/pspice)
606  bool NLEgiven; // given flag for leakage emission coef.(NLE) (hspice)
607 
608  double betaR; // reverse beta (BR)
609  bool BRgiven; // given flag for reverse beta, BR (spice/pspice)
610  bool BRMgiven; // given flag for reverse beta, BR (hspice)
611 
612  double emissionCoeffR; // reverse current emmission coeff (NR)
613  double earlyVoltR; // reverse early voltage (VAR/VB/VRB/BV)
614  bool VARgiven; // given flag for reverse early voltage(VAR) (spice)
615  bool VBgiven; // given flag for reverse early voltage(VB) (pspice/hspice)
616  bool VRBgiven; // given flag for reverse early voltage(VRB) (hspice)
617  bool BVgiven; // given flag for reverse early voltage(BV) (hspice)
618 
619 
620  double rollOffR; //reverse high current roll-off (IKR)
621  bool IKRgiven; // given flag for reverse high current roll-off (IKR) (spice)
622  bool JBRgiven; // given flag for reverse high current roll-off (JBR) (Hspice)
623  double leakBCCurrent; //BC leakage saturation current (ISC)
624  double leakBCEmissionCoeff;//BC leakage emission coeff. (NC)
625 
626  double baseResist; //zero bias base resistance (RB)
627  double baseCurrHalfResist; //current for 1/2 base resistance (IRB)
628  bool IRBgiven; // given flag for 1/2 base resist. (IRB, spice)
629  bool JRBgiven; // given flag for 1/2 base resist. (JRB, spice)
630  bool IOBgiven; // given flag for 1/2 base resist. (IOB, spice)
631 
632  double minBaseResist; //min base resistance for high current (RBM)
633  double emitterResist; //emitter resistance (RE)
634  double collectorResist; //collector resistance (RC)
635 
636  double depCapBE; //BE zero bias depletion capacitance (CJE)
637  double potBE; //BE built-in potential (VJE)
638  bool VJEgiven; // given flag for BE built-in potential (VJE,spice)
639  bool PEgiven; // given flag for BE built-in potential (PE,pspice, hspice)
640 
641  double juncExpBE; //BE junction exponential factor (MJE)
642  bool MJEgiven; // given flag for BE exponential factor (MJE,spice)
643  bool MEgiven; // given flag for BE exponential factor (ME,pspice, hspice)
644 
645  double transTimeF; //ideal forward transit time (TF)
646  double transTimeBiasCoeffF;//bias dependent coefficient for TF (XTF)
647  double transTimeFVBC; //VBC dependence for TF (VTF)
648  double transTimeHighCurrF; //high current parameter for TF (ITF)
649  bool ITFgiven; // given flag for ITF (spice)
650  bool JTFgiven; // given flag for ITF (hspice)
651  double excessPhase; //excess phase at freq=1.0/(TF*2PI) Hz (PTF)
652 
653  double depCapBC; //BC zero bias depletion capacitance (CJC)
654  double potBC; //BC built-in potential (VJC)
655  bool VJCgiven; // given flag for BC built-in potential (VJE,spice)
656  bool PCgiven; // given flag for BC built-in potential (PE,pspice, hspice)
657 
658  double juncExpBC; //BC junction exponential factor (MJC)
659  bool MJCgiven; // given flag for BC exponential factor (MJC,spice)
660  bool MCgiven; // given flag for BC exponential factor (MC,pspice, hspice)
661 
662  double baseFracBCCap; //fraction of BC cap. to int. base node (XCJC)
663  bool XCJCgiven; // given flag for spice/pspice.
664  bool CDISgiven; // given flag for hspice
665 
666  double transTimeR; //ideal reverse transit time (TR)
667 
668  double CJS; //zero-bias coll-subst capacitance (CJS)
669  bool CJSgiven; //zero-bias coll-subst capacitance (CJS) given flag (spice)
670  bool CCSgiven; //zero-bias coll-subst capacitance (CCS) given flag (Pspice/Hspice)
671  bool CSUBgiven; //zero-bias coll-subst capacitance (CSUB) given flag (Hspice)
672 
673  double potSubst; //substrate junction built-in potential (VJS)
674  bool VJSgiven; // given flag for spice format (VJS)
675  bool PSgiven; // given flag for spice format (PS)
676  bool PSUBgiven; // given flag for spice format (PSUB)
677 
678  double expSubst; //subst. junction exponential factor (MJS)
679  bool MJSgiven; // given flag for spice format (MJS)
680  bool MSgiven; // given flag for spice format (MS)
681  bool ESUBgiven; // given flag for spice format (ESUB)
682 
683  double betaExp; //beta temperature exponent (XTB)
684  bool XTBgiven; // given for spice/pspice
685  bool TBgiven; // given for hspice
686  bool TCBgiven; // given for hspice
687 
688  double energyGap; //energy gap for temp. effect on IS (EG)
689  double tempExpIS; //temp. exponent for IS (XTI)
690  bool XTIgiven; // given for spice/hspice
691  bool PTgiven; // given for pspice
692 
693  double depCapCoeff; //coeff. for fwd bias depletion cap. (FC)
694  double fNCoeff; //flicker-noise coeff. (KF)
695  double fNExp; //flicker-noise exponent (AF)
696 
697  double rollOffExp; //Pspice high-current rolloff parameter (NK)
698  bool NKgiven; // spice/pspice
699  bool NKFgiven; // hspice
700 
701  double c2;
702  double c4;
703 
704  bool leakBECurrentGiven; // specified as ISE (spice)
705  bool JLEgiven; // hspice version of leakBECurrent
706  bool leakBCCurrentGiven; // specified as ISC (spice)
707  bool JLCgiven; // hspice version of leakBCCurrent
708 
709  bool c2Given;
710  bool c4Given;
712 
713  //generated model params
714  double invEarlyVoltF; //inverse of fwd early voltage
715  double invEarlyVoltR; //inverse of rvs early voltage
716  double invRollOffF; //inverse of fwd high curr. roll-off
717  double invRollOffR; //inverse of rvs high curr. roll-off
718  double collectorConduct; //collector conductance
719  double emitterConduct; //emitter conductance
720  double transTimeVBCFac; //VBC transit time factor
721  double excessPhaseFac; //excess phase factor
722 
723  double f2;
724  double f3;
725  double f6;
726  double f7;
727 };
728 
729 
730 //-----------------------------------------------------------------------------
731 // Class : Master
732 // Purpose :
733 // Special Notes :
734 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
735 // Creation Date : 11/26/08
736 //-----------------------------------------------------------------------------
737 class Master : public DeviceMaster<Traits>
738 {
739 public:
741  const Configuration & configuration,
742  const FactoryBlock & factory_block,
743  const SolverState & ss1,
744  const DeviceOptions & do1)
745  : DeviceMaster<Traits>(configuration, factory_block, ss1, do1)
746  {}
747 
748  virtual bool updateState (double * solVec, double * staVec, double * stoVec);
749  virtual bool updateSecondaryState (double * staDeriv, double * stoVec);
750 
751  // load functions, residual:
752  virtual bool loadDAEVectors (double * solVec, double * fVec, double * qVec, double * bVec, double * storeLeadF, double * storeLeadQ, double * leadF, double * leadQ, double * junctionV);
753 
754  // load functions, Jacobian:
755  virtual bool loadDAEMatrices (Linear::Matrix & dFdx, Linear::Matrix & dQdx);
756 
757  friend class Instance;
758  friend class Traits;
759  friend class Model;
760 };
761 
762 void registerDevice();
763 
764 } // namespace BJT
765 } // namespace Device
766 } // namespace Xyce
767 
768 #endif
static std::vector< std::vector< int > > jacMap2_RB_RC_RE_
Definition: N_DEV_BJT.h:522
const std::vector< std::vector< int > > & jacobianStamp() const
Definition: N_DEV_BJT.C:1386
Instance(const Configuration &configuration, const InstanceBlock &IB, Model &it_MB, const FactoryBlock &factory_block)
Definition: N_DEV_BJT.C:665
static std::vector< int > jacMap_RB_RE_
Definition: N_DEV_BJT.h:515
Pure virtual class to augment a linear system.
virtual bool updateSecondaryState(double *staDeriv, double *stoVec)
Updates the devices secondary state information.
Definition: N_DEV_BJT.C:4109
Master(const Configuration &configuration, const FactoryBlock &factory_block, const SolverState &ss1, const DeviceOptions &do1)
Definition: N_DEV_BJT.h:740
void registerDevice()
Definition: N_DEV_BJT.C:4537
static std::vector< std::vector< int > > jacStamp_RB_RC_
Definition: N_DEV_BJT.h:505
Model & operator=(const Model &)
static std::vector< std::vector< int > > jacStamp_RB_RC_RE_
Definition: N_DEV_BJT.h:504
void registerJacLIDs(const std::vector< std::vector< int > > &jacLIDVec)
Definition: N_DEV_BJT.C:1432
static std::vector< int > jacMap_RE_
Definition: N_DEV_BJT.h:519
static std::vector< int > jacMap_RB_RC_
Definition: N_DEV_BJT.h:514
std::vector< Instance * > InstanceVector
Definition: N_DEV_BJT.h:543
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
Definition: N_DEV_BJT.C:4531
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
Definition: N_DEV_BJT.C:1290
void registerLIDs(const std::vector< int > &intLIDVecRef, const std::vector< int > &extLIDVecRef)
Definition: N_DEV_BJT.C:1171
static std::vector< std::vector< int > > jacStamp_RB_RE_
Definition: N_DEV_BJT.h:506
static std::vector< std::vector< int > > jacStamp_RE_
Definition: N_DEV_BJT.h:510
DeviceMaster instantiates a device as described by the device traits T.
void registerStoreLIDs(const std::vector< int > &stoLIDVecRef)
Definition: N_DEV_BJT.C:1357
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
static std::vector< int > jacMap_RC_
Definition: N_DEV_BJT.h:518
static std::vector< std::vector< int > > jacMap2_RE_
Definition: N_DEV_BJT.h:528
void setupNoiseSources(Xyce::Analysis::NoiseData &noiseData)
Definition: N_DEV_BJT.C:2441
static std::vector< int > jacMap_
Definition: N_DEV_BJT.h:520
static std::vector< std::vector< int > > jacStamp_RB_
Definition: N_DEV_BJT.h:508
static std::vector< std::vector< int > > jacStamp_RC_RE_
Definition: N_DEV_BJT.h:507
static std::vector< std::vector< int > > jacMap2_RB_RE_
Definition: N_DEV_BJT.h:524
static std::vector< std::vector< int > > jacMap2_RB_
Definition: N_DEV_BJT.h:526
static std::vector< int > jacMap_RB_
Definition: N_DEV_BJT.h:517
static bool modelRequired()
Definition: N_DEV_BJT.h:74
The Device class is an interface for device implementations.
Definition: N_DEV_Device.h:101
bool processInstanceParams()
processInstanceParams
Definition: N_DEV_BJT.C:3533
static const char * deviceTypeName()
Definition: N_DEV_BJT.h:70
virtual std::ostream & printOutInstances(std::ostream &os) const
Definition: N_DEV_BJT.C:3992
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
Definition: N_DEV_BJT.C:4034
virtual bool loadDAEMatrices(Linear::Matrix &dFdx, Linear::Matrix &dQdx)
Populates the device's Jacobian object with these pointers.
Definition: N_DEV_BJT.C:4315
virtual bool updateState(double *solVec, double *staVec, double *stoVec)
Updates the devices state information.
Definition: N_DEV_BJT.C:4053
static int numFillNodes()
Definition: N_DEV_BJT.h:73
bool updateTemperature(const double &temp=-999.0)
Definition: N_DEV_BJT.C:1679
Class Configuration contains device configuration data.
void addInstance(Instance *instance)
Definition: N_DEV_BJT.h:574
static const char * name()
Definition: N_DEV_BJT.h:69
virtual bool loadDAEVectors(double *solVec, double *fVec, double *qVec, double *bVec, double *storeLeadF, double *storeLeadQ, double *leadF, double *leadQ, double *junctionV)
Populates the device's ExternData object with these pointers.
Definition: N_DEV_BJT.C:4140
static std::vector< std::vector< int > > jacStamp_RC_
Definition: N_DEV_BJT.h:509
static bool isLinearDevice()
Definition: N_DEV_BJT.h:75
void getNoiseSources(Xyce::Analysis::NoiseData &noiseData)
Definition: N_DEV_BJT.C:2496
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
Definition: N_DEV_BJT.C:72
std::vector< Instance * > instanceContainer
Definition: N_DEV_BJT.h:580
static std::vector< std::vector< int > > jacMap2_
Definition: N_DEV_BJT.h:529
static int numOptionalNodes()
Definition: N_DEV_BJT.h:72
static std::vector< int > jacMap_RB_RC_RE_
Definition: N_DEV_BJT.h:513
bool lambertWCurrent(double &Id, double &Gd, double Vd, double Vte, double Isat)
Definition: N_DEV_BJT.C:1854
void registerStateLIDs(const std::vector< int > &stateLIDVecRef)
Definition: N_DEV_BJT.C:1331
void oldDAEExcessPhaseCalculation2(double &iEX, double &gEX, double &iC_local)
Definition: N_DEV_BJT.C:2585
static int numNodes()
Definition: N_DEV_BJT.h:71
static std::vector< int > jacMap_RC_RE_
Definition: N_DEV_BJT.h:516
bool processParams()
processParams
Definition: N_DEV_BJT.C:3452
ModelBlock represents a .MODEL line from the netlist.
The DeviceTraits template describes the configuration of a device.
Manages parameter binding for class C.
Definition: N_DEV_Pars.h:214
InstanceBlock represent a device instance line from the netlist.
static std::vector< std::vector< int > > jacStamp_
Definition: N_DEV_BJT.h:511
int getNumNoiseSources() const
Definition: N_DEV_BJT.C:2428
static std::vector< std::vector< int > > jacMap2_RB_RC_
Definition: N_DEV_BJT.h:523
static std::vector< std::vector< int > > jacMap2_RC_
Definition: N_DEV_BJT.h:527
static std::vector< std::vector< int > > jacMap2_RC_RE_
Definition: N_DEV_BJT.h:525
static void loadModelParameters(ParametricData< Model > &model_parameters)
Definition: N_DEV_BJT.C:111
Instance & operator=(const Instance &)