Xyce  6.1
N_DEV_DopeInfo.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_DopeInfo.h,v $
27 //
28 // Purpose : This file contains classes related to the doping specificaiton.
29 //
30 // Special Notes :
31 //
32 // Creator : Eric R. Keiter, SNL, Parallel Computational Sciences
33 //
34 // Creation Date : 05/15/01
35 //
36 // Revision Information:
37 // ---------------------
38 //
39 // Revision Number: $Revision: 1.19.2.1 $
40 //
41 // Revision Date : $Date: 2015/04/02 18:20:12 $
42 //
43 // Current Owner : $Author: tvrusso $
44 //-----------------------------------------------------------------------------
45 
46 #ifndef Xyce_N_DEV_DopeInfo_h
47 #define Xyce_N_DEV_DopeInfo_h
48 
49 // ---------- Standard Includes ----------
50 
51 // ---------- Xyce Includes ----------
52 #include <N_DEV_fwd.h>
53 #include <N_DEV_Const.h>
54 #include <N_DEV_CompositeParam.h>
55 
56 namespace Xyce {
57 namespace Device {
58 
59 //-----------------------------------------------------------------------------
60 // Class : N_DEV_DopeInfo
61 // Purpose : Doping region information.
62 // Special Notes :
63 // Creator : Eric Keiter, SNL, Parallel Computational Sciences
64 // Creation Date : 03/28/03
65 //-----------------------------------------------------------------------------
66 class DopeInfo : public CompositeParam
67 {
68  friend class ParametricData<DopeInfo>;
69 
70 public:
72 
73  DopeInfo();
74  bool processParam(Param & ndParam, std::string & param, DevicePDEInstance & di);
75  void processParams();
76 
77  void setupInfo(
78  std::vector<double> & CVec,
79  std::vector<double> & CdonorVec,
80  std::vector<double> & CacceptorVec,
81  std::vector<double> & xVec, DeviceSupport & devSup);
82 
83  void setupInfo2d(
84  std::vector<double> & CVec,
85  std::vector<double> & CdonorVec,
86  std::vector<double> & CacceptorVec,
87  std::vector<double> & xVec, std::vector<double> &yVec, DeviceSupport & devSup);
88 
89  static double nsdep(double x, double W, double Dt);
90  static double ngdep(double x, double y, double W, double ax, double ay);
91  static double ngdep2(double x, double y, double ax, double ay);
92  static double erf(double x);
93 
94  static void readDopingFile(std::string & filename, std::vector<double> & xloc,
95  std::vector<double> & nvec, std::vector<double> & y2, DeviceSupport & devSup);
96 
97  static void readDopingFile(std::string & filename, std::vector<double> & xloc,
98  std::vector<double> & nvec, std::vector<double> & y2_n,
99  std::vector<double> & pvec, std::vector<double> & y2_p, DeviceSupport & devSup);
100 
101 public:
102  std::string name; // this is also the index into the map.
103  std::string type; // p-type or n-type
104  std::string funcType; // uniform, step, gaussian.
105  std::string speciesName; // boron, phosphorus, etc.
106  std::string fileName; // doping file.
107  std::string exprString; // if expression based, store here.
108 
109  // location params:
110  double xmin;
111  double xmax;
112  bool xminGiven;
113  bool xmaxGiven;
114 
115  double xloc;
116  double xwidth;
117 
118  double ymin;
119  double ymax;
120  bool yminGiven;
121  bool ymaxGiven;
122 
123  double yloc;
124  double ywidth;
125 
126  double Nmax; // maximum magnitude
127  double Nmin; // minimum magnitude
128 
129  // sometimes having a really high doping hurts convergence.
130  // This lets the user set truncate it.
131  double Nmax_chop;
133 
134  int flatX;
135  int flatY;
136 
137  // arrays for spline fitting, if specified from file:
138  std::vector<double> xlocVec;
139  std::vector<double> dopeVec;
140  std::vector<double> y2Vec;
141  std::vector<double> splintDopeVec;
142 };
143 
144 // inline functions
145 //-----------------------------------------------------------------------------
146 // Function : DopeInfo::operator<<
147 // Purpose : "<<" operator
148 // Special Notes :
149 // Scope : public
150 // Creator : Eric R. Keiter, 9233, SNL, Parallel Computational Sciences
151 // Creation Date : 03/31/03
152 //-----------------------------------------------------------------------------
153 inline std::ostream & operator<<(std::ostream & os, const DopeInfo & di)
154 {
155  os << di.name << ":\n";
156  os << " type = " << di.type << "\n";
157  os << " funcType = " << di.funcType << "\n";
158 
159  if (di.funcType == "expression")
160  {
161  os << " exp. string = " << di.exprString << "\n";
162  }
163 
164  os << " xloc = " << di.xloc << "\n";
165  os << " xwidth = " << di.xwidth << "\n";
166  os << " yloc = " << di.yloc << "\n";
167  os << " ywidth = " << di.ywidth << "\n";
168 
169  os << " Nmax = " << di.Nmax << "\n";
170  os << " Nmin = " << di.Nmin << "\n";
171 
172  os << " flatX = " << di.flatX << "\n";
173  os << " flatY = " << di.flatY << "\n";
174 
175  os << std::endl;
176 
177  return os;
178 }
179 
180 } // namespace Device
181 } // namespace Xyce
182 
183 #endif
184 
std::vector< double > dopeVec
static double ngdep(double x, double y, double W, double ax, double ay)
static ParametricData< DopeInfo > & getParametricData()
static double ngdep2(double x, double y, double ax, double ay)
static double nsdep(double x, double W, double Dt)
Pure virtual class to augment a linear system.
static void readDopingFile(std::string &filename, std::vector< double > &xloc, std::vector< double > &nvec, std::vector< double > &y2, DeviceSupport &devSup)
std::vector< double > xlocVec
void setupInfo(std::vector< double > &CVec, std::vector< double > &CdonorVec, std::vector< double > &CacceptorVec, std::vector< double > &xVec, DeviceSupport &devSup)
std::vector< double > y2Vec
void setupInfo2d(std::vector< double > &CVec, std::vector< double > &CdonorVec, std::vector< double > &CacceptorVec, std::vector< double > &xVec, std::vector< double > &yVec, DeviceSupport &devSup)
static double erf(double x)
bool processParam(Param &ndParam, std::string &param, DevicePDEInstance &di)
std::vector< double > splintDopeVec
#define W
Manages parameter binding for class C.
Definition: N_DEV_Pars.h:214
void processParams()
processParams post processes the parameters that have been set in the object of the derived class...
CompositeParam is the base class for classes that wish to only manage the processing of parameter dat...
std::ostream & operator<<(std::ostream &os, const Configuration &configuration)
Definition: N_DEV_Dump.C:134