Xyce  6.1
N_DEV_fwd.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_fwd.h,v $
27 //
28 // Purpose : Forward declarations
29 //
30 // Special Notes : Forward declaring everything as a class breaks if the implementation of the type changes (like during
31 // templatization)
32 //
33 // Creator : David G. Baur Raytheon Sandia National Laboratories 1355
34 //
35 // Creation Date : 2013/04/18 18:01:27
36 //
37 // Revision Information:
38 // ---------------------
39 //
40 // Revision Number: $Revision: 1.43 $
41 //
42 // Revision Date : $Date: 2015/07/02 13:00:10 $
43 //
44 // Current Owner : $Author: dgbaur $
45 //-------------------------------------------------------------------------
46 
47 #ifndef Xyce_N_DEV_fwd_h
48 #define Xyce_N_DEV_fwd_h
49 
50 #if defined(HAVE_UNORDERED_MAP)
51 #include <unordered_map>
52 #include <unordered_set>
53 using std::unordered_map;
54 using std::unordered_set;
55 #elif defined(HAVE_TR1_UNORDERED_MAP)
56 #include <tr1/unordered_map>
57 #include <tr1/unordered_set>
58 using std::tr1::unordered_map;
59 using std::tr1::unordered_set;
60 #else
61 #error neither unordered_map/set or tr1/unordered_map/set found
62 #endif
63 #include <map>
64 #include <string>
65 #include <utility>
66 #include <vector>
67 
68 #include <N_UTL_NameLevelKey.h>
69 #include <N_UTL_NoCase.h>
70 #include <N_UTL_TypeIndex.h>
71 #include <N_UTL_IndexPair.h>
72 
73 namespace Xyce {
74 namespace Device {
75 
76 class CompositeParam;
77 class Configuration;
78 class Depend;
79 class Descriptor;
80 class Device;
81 class DeviceBuilder;
82 class DeviceEntity;
83 class DeviceInstance;
84 class DeviceMgr;
85 typedef DeviceMgr DeviceInterface; // DEPRECATED, use DeviceMgr
86 
87 class DeviceModel;
88 class DeviceOptions;
90 class DeviceState;
91 class DeviceSupport;
92 class InstanceName;
94 class ExternCodeInterface;
95 class ExternData;
96 class FactoryBlock;
97 class InstanceBlock;
98 class MatrixLoadData;
99 class ModelBlock;
100 class NumericalJacobian;
101 class Param;
102 class ParameterBase;
103 class Region;
104 class RegionData;
105 class RxnRegion;
106 class RxnRegion2;
107 class RxnRegionData;
108 
109 class SolverState;
110 class Globals;
111 class SourceInstance;
112 class XyceInterface;
113 
114 class ACData;
115 class ConstData;
116 class ExpData;
117 class PWLinData;
118 class PulseData;
119 class SFFMData;
120 class SinData;
121 class SmoothData;
122 class SmoothPulseData;
123 class SourceData;
124 
125 class DevicePDEInstance;
126 class DevicePDEModel;
127 
128 class PDE_Electrode;
129 class PDE_1DElectrode;
130 class PDE_2DElectrode;
131 
132 class XygraCoilData;
133 
134 class SpecieSource;
135 
136 class ScalingVars;
137 
139 
140 typedef unordered_map<std::string, InstanceBlock, HashNoCase, EqualNoCase> DeviceNameInstanceBlockMap;
141 
142 namespace Xygra {
143 class Instance;
144 class Model;
145 }
146 
147 namespace ExternDevice {
148 class Instance;
149 class Model;
150 }
151 
152 namespace Vsrc {
153 class Instance;
154 class Model;
155 }
156 
157 namespace ArtificialParameters {
158 struct ArtificialParameter;
159 }
160 
161 typedef type_index EntityTypeId;
162 typedef type_index ModelTypeId;
163 typedef type_index InstanceTypeId;
164 
165 typedef std::string ModelName;
166 
167 typedef unordered_map<std::string, Descriptor *, HashNoCase, EqualNoCase> ParameterMap;
168 typedef unordered_map<std::string, CompositeParam *, HashNoCase, EqualNoCase> CompositeMap;
169 typedef unordered_map<std::string, double, HashNoCase, EqualNoCase> GlobalParameterMap;
170 typedef unordered_map<std::string, ArtificialParameters::ArtificialParameter *, HashNoCase, EqualNoCase> ArtificialParameterMap;
171 typedef unordered_set<std::string, HashNoCase, EqualNoCase> PassthroughParameterSet;
172 
173 
174 typedef std::map<std::string, int, LessNoCase> DeviceCountMap;
175 
176 typedef std::vector<CompositeParam *> CompositeVector;
177 
178 typedef std::map<EntityTypeId, Device *> EntityTypeIdDeviceMap;
179 
180 struct ModelGroupLeadTraits;
181 
182 template <class M, class I, class G = ModelGroupLeadTraits>
183 class DeviceTraits;
184 
185 template <class T>
186 class DeviceMaster;
187 
188 template <class T>
189 class Config;
190 
191 typedef std::vector<Device *> DeviceVector;
192 typedef std::vector<DeviceEntity *> EntityVector;
193 typedef std::vector<DeviceInstance *> InstanceVector;
194 typedef std::vector<DeviceModel *> ModelVector;
195 
196 typedef std::vector<std::vector<int> > JacobianStamp;
197 typedef std::vector<int> IdVector;
198 typedef IdVector LocalIdVector;
199 
200 } // namespace Device
201 } // namespace Xyce
202 
203 #endif // Xyce_N_DEV_fwd_h
std::vector< CompositeParam * > CompositeVector
Definition: N_DEV_fwd.h:176
Config template derives from the Configuration class and provides the instance and model parameter de...
Pure virtual class to augment a linear system.
Devices and models are each named.
unordered_map< std::string, Descriptor *, HashNoCase, EqualNoCase > ParameterMap
Definition: N_DEV_fwd.h:167
type_index InstanceTypeId
Definition: N_DEV_fwd.h:163
Base class for all parameters.
Definition: N_DEV_Pars.h:169
std::vector< DeviceEntity * > EntityVector
Definition: N_DEV_fwd.h:192
type_index EntityTypeId
Definition: N_DEV_fwd.h:161
std::vector< int > IdVector
Definition: N_DEV_fwd.h:197
DeviceMaster instantiates a device as described by the device traits T.
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
unordered_map< std::string, CompositeParam *, HashNoCase, EqualNoCase > CompositeMap
Definition: N_DEV_fwd.h:168
unordered_set< std::string, HashNoCase, EqualNoCase > PassthroughParameterSet
Definition: N_DEV_fwd.h:171
std::vector< std::vector< int > > JacobianStamp
Definition: N_DEV_fwd.h:196
std::vector< DeviceModel * > ModelVector
Definition: N_DEV_fwd.h:194
IdVector LocalIdVector
Definition: N_DEV_fwd.h:198
type_index ModelTypeId
Definition: N_DEV_fwd.h:162
std::map< EntityTypeId, Device * > EntityTypeIdDeviceMap
Definition: N_DEV_fwd.h:178
unordered_map< std::string, InstanceBlock, HashNoCase, EqualNoCase > DeviceNameInstanceBlockMap
Definition: N_DEV_fwd.h:138
unordered_map< std::string, double, HashNoCase, EqualNoCase > GlobalParameterMap
Definition: N_DEV_fwd.h:169
std::map< std::string, int, LessNoCase > DeviceCountMap
Definition: N_DEV_fwd.h:174
DeviceMgr DeviceInterface
Definition: N_DEV_fwd.h:84
std::vector< Device * > DeviceVector
Definition: N_DEV_fwd.h:189
unordered_map< std::string, ArtificialParameters::ArtificialParameter *, HashNoCase, EqualNoCase > ArtificialParameterMap
Definition: N_DEV_fwd.h:170
ModelBlock represents a .MODEL line from the netlist.
The DeviceTraits template describes the configuration of a device.
std::string ModelName
Definition: N_DEV_fwd.h:165
InstanceBlock represent a device instance line from the netlist.
std::vector< DeviceInstance * > InstanceVector
Definition: N_DEV_fwd.h:193