Garfield++ 5.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
ComponentNeBem3d.hh
Go to the documentation of this file.
1#ifndef G_COMPONENT_NEBEM_3D_H
2#define G_COMPONENT_NEBEM_3D_H
3
4#include <map>
5
6#include "Component.hh"
7
8namespace Garfield {
9
10/// Interface to neBEM.
11
13 public:
14 /// Constructor
16 /// Destructor
18
19 Medium* GetMedium(const double x, const double y, const double z) override;
20
21 /// Add a plane at constant x.
22 void AddPlaneX(const double x, const double voltage);
23 /// Add a plane at constant y.
24 void AddPlaneY(const double y, const double voltage);
25 /// Add a plane at constant z.
26 void AddPlaneZ(const double z, const double voltage);
27 /// Get the number of equipotential planes at constant x.
28 unsigned int GetNumberOfPlanesX() const;
29 /// Get the number of equipotential planes at constant y.
30 unsigned int GetNumberOfPlanesY() const;
31 /// Get the number of equipotential planes at constant z.
32 unsigned int GetNumberOfPlanesZ() const;
33 /// Retrieve the parameters of a plane at constant x.
34 bool GetPlaneX(const unsigned int i, double& x, double& v) const;
35 /// Retrieve the parameters of a plane at constant y.
36 bool GetPlaneY(const unsigned int i, double& y, double& v) const;
37 /// Retrieve the parameters of a plane at constant z.
38 bool GetPlaneZ(const unsigned int i, double& z, double& v) const;
39
40 unsigned int GetNumberOfPrimitives() const { return m_primitives.size(); }
41 bool GetPrimitive(const unsigned int i, double& a, double& b, double& c,
42 std::vector<double>& xv, std::vector<double>& yv,
43 std::vector<double>& zv, int& interface, double& v,
44 double& q, double& lambda) const;
45 bool GetPrimitive(const unsigned int i, double& a, double& b, double& c,
46 std::vector<double>& xv, std::vector<double>& yv,
47 std::vector<double>& zv, int& vol1, int& vol2) const;
48 bool GetVolume(const unsigned int vol, int& shape, int& material, double& eps,
49 double& potential, double& charge, int& bc);
50 int GetVolume(const double x, const double y, const double z);
51
52 unsigned int GetNumberOfElements() const { return m_elements.size(); }
53 bool GetElement(const unsigned int i, std::vector<double>& xv,
54 std::vector<double>& yv, std::vector<double>& zv,
55 int& interface, double& bc, double& lambda) const;
56
57 /// Retrieve surface panels, remove contacts and cut polygons to rectangles
58 /// and right-angle triangles.
59 bool Initialise();
60
61 /// Set the default value of the target linear size of the elements
62 /// produced by neBEM's discretisation process.
63 void SetTargetElementSize(const double length);
64 /// Set the smallest and largest allowed number of elements along
65 /// the lenght of a primitive.
66 void SetMinMaxNumberOfElements(const unsigned int nmin,
67 const unsigned int nmax);
68
69 void SetNewModel(const unsigned int NewModel);
70 void SetNewMesh(const unsigned int NewMesh);
71 void SetNewBC(const unsigned int NewBC);
72 void SetNewPP(const unsigned int NewPP);
73 void SetModelOptions(const unsigned int NewModel, const unsigned int NewMesh,
74 const unsigned int NewBC, const unsigned int NewPP);
75
76 /// Set storing options (OptStoreInflMatrix, OptStoreInvMatrix,
77 /// OptStoreInvMatrix, OptStoreInvMatrix)
78 /// OptStorePrimitives, OptStorePrimitives)
79 /// OptStoreElements, OptStoreElements)
80 /// OptFormattedFile, OptUnformattedFile)
81 void SetStoreInflMatrix(const unsigned int OptStoreInflMatrix);
82 void SetReadInflMatrix(const unsigned int OptReadInflMatrix);
83 void SetStoreInvMatrix(const unsigned int OptStoreInvMatrix);
84 void SetReadInvMatrix(const unsigned int OptReadInvMatrix);
85 void SetStorePrimitives(const unsigned int OptStorePrimitives);
86 void SetReadPrimitives(const unsigned int OptReadPrimitives);
87 void SetStoreElements(const unsigned int OptStoreElements);
88 void SetReadElements(const unsigned int OptReadElements);
89 void SetFormattedFile(const unsigned int OptFormattedFile);
90 void SetUnformattedFile(const unsigned int OptUnformattedFile);
91 void SetStoreReadOptions(const unsigned int OptStoreInflMatrix,
92 const unsigned int OptReadInflMatrix,
93 const unsigned int OptStoreInvMatrix,
94 const unsigned int OptReadInvMatrix,
95 const unsigned int OptStorePrimitives,
96 const unsigned int OptReadPrimitives,
97 const unsigned int OptStoreElements,
98 const unsigned int OptReadElements,
99 const unsigned int OptFormattedFile,
100 const unsigned int OptUnformattedFile);
101
102 // Set whether an older model is to be re-used. Expects an inverted matrix
103 // stored during an earlier computation that had identical model and mesh.
104 // This execution considers only a change in the boundary conditions.
105 void SetReuseModel(void);
106
107 /// Other functions to be, are
108 /// void SetPlotOptions(OptGnuplot=0, OptGnuplotPrimitives=0,
109 /// OptGnuplotElements=0,
110 /// OptPrimitiveFiles=0, OptElementFiles=0)
111
112 // Functions that set computation details and constraints
113 void SetSystemChargeZero(const unsigned int OptSystemChargeZero);
114 void SetValidateSolution(const unsigned int OptValidateSolution);
115 void SetForceValidation(const unsigned int OptForceValidation);
116 void SetRepeatLHMatrix(const unsigned int OptRepeatLHMatrix);
117 void SetComputeOptions(const unsigned int OptSystemChargeZero,
118 const unsigned int OptValidateSolution,
119 const unsigned int OptForceValidation,
120 const unsigned int OptRepeatLHMatrix);
121
122 // Fast volume related information (physical potential and fields)
123 void SetFastVolOptions(const unsigned int OptFastVol,
124 const unsigned int OptCreateFastPF,
125 const unsigned int OptReadFastPF);
126 void SetFastVolVersion(const unsigned int VersionFV);
127 void SetFastVolBlocks(const unsigned int NbBlocksFV);
128
129 // Needs to include IdWtField information for each of these WtFld functions
130 // Weighting potential and field related Fast volume information
131 void SetWtFldFastVolOptions(const unsigned int IdWtField,
132 const unsigned int OptWtFldFastVol,
133 const unsigned int OptCreateWtFldFastPF,
134 const unsigned int OptReadWtFldFastPF);
135 void SetWtFldFastVolVersion(const unsigned int IdWtField,
136 const unsigned int VersionWtFldFV);
137 void SetWtFldFastVolBlocks(const unsigned int IdWtField,
138 const unsigned int NbBlocksWtFldFV);
139
140 // Known charge options
141 void SetKnownChargeOptions(const unsigned int OptKnownCharge);
142
143 // Charging up options
144 void SetChargingUpOptions(const unsigned int OptChargingUp);
145
146 /// Invert the influence matrix using lower-upper (LU) decomposition.
147 void UseLUInversion() { m_inversion = Inversion::LU; }
148 /// Invert the influence matrix using singular value decomposition.
149 void UseSVDInversion() { m_inversion = Inversion::SVD; }
150
151 /// Set the parameters \f$n_x, n_y, n_z\f$ defining the number of periodic
152 /// copies that neBEM will use when dealing with periodic configurations.
153 /// neBEM will use \f$2 \times n + 1\f$ copies (default: \f$n = 5\f$).
154 void SetPeriodicCopies(const unsigned int nx, const unsigned int ny,
155 const unsigned int nz);
156 /// Retrieve the number of periodic copies used by neBEM.
157 void GetPeriodicCopies(unsigned int& nx, unsigned int& ny,
158 unsigned int& nz) const {
159 nx = m_nCopiesX;
160 ny = m_nCopiesY;
161 nz = m_nCopiesZ;
162 }
163 /// Set the periodic length [cm] in the x-direction.
164 void SetPeriodicityX(const double s);
165 /// Set the periodic length [cm] in the y-direction.
166 void SetPeriodicityY(const double s);
167 /// Set the periodic length [cm] in the z-direction.
168 void SetPeriodicityZ(const double s);
169 /// Set the periodic length [cm] in the x-direction.
170 void SetMirrorPeriodicityX(const double s);
171 /// Set the periodic length [cm] in the y-direction.
172 void SetMirrorPeriodicityY(const double s);
173 /// Set the periodic length [cm] in the z-direction.
174 void SetMirrorPeriodicityZ(const double s);
175 /// Get the periodic length in the x-direction.
176 bool GetPeriodicityX(double& s) const;
177 /// Get the periodic length in the y-direction.
178 bool GetPeriodicityY(double& s) const;
179 /// Get the periodic length in the z-direction.
180 bool GetPeriodicityZ(double& s) const;
181
182 /// Set the number of threads to be used by neBEM.
183 void SetNumberOfThreads(const unsigned int n) { m_nThreads = n > 0 ? n : 1; }
184
185 /// Set the number of repetitions after which primitive properties are used
186 /// for the physical field.
187 /// A negative value (default) implies all the elements are always evaluated.
188 void SetPrimAfter(const int n) { m_primAfter = n; }
189
190 /// Set the number of repetitions after which primitive properties are used
191 /// for the weighting field.
192 /// A negative value (default) implies all the elements are always evaluated.
193 void SetWtFldPrimAfter(const int n) { m_wtFldPrimAfter = n; }
194
195 /// Set option related to removal of primitives.
196 void SetOptRmPrim(const unsigned int n) { m_optRmPrim = n; }
197
198 void ElectricField(const double x, const double y, const double z, double& ex,
199 double& ey, double& ez, Medium*& m, int& status) override;
200 void ElectricField(const double x, const double y, const double z, double& ex,
201 double& ey, double& ez, double& v, Medium*& m,
202 int& status) override;
204 bool GetVoltageRange(double& vmin, double& vmax) override;
205
206 void WeightingField(const double x, const double y, const double z,
207 double& wx, double& wy, double& wz,
208 const std::string& label) override;
209 double WeightingPotential(const double x, const double y, const double z,
210 const std::string& label) override;
211
212 protected:
213 void Reset() override;
214 void UpdatePeriodicity() override;
215
216 private:
217 struct Primitive {
218 /// Perpendicular vector
219 double a, b, c;
220 /// X-coordinates of vertices
221 std::vector<double> xv;
222 /// Y-coordinates of vertices
223 std::vector<double> yv;
224 /// Z-coordinates of vertices
225 std::vector<double> zv;
226 /// Interface type.
227 int interface = 0;
228 /// Potential
229 double v = 0.;
230 /// Charge
231 double q = 0.;
232 /// Ratio of dielectric constants
233 double lambda = 0.;
234 /// Target element size.
235 double elementSize;
236 /// Volumes.
237 int vol1, vol2;
238 };
239 /// List of primitives.
240 std::vector<Primitive> m_primitives;
241
242 struct Element {
243 /// Local origin.
244 std::array<double, 3> origin;
245 double lx;
246 double lz;
247 /// Area.
248 double dA;
249 /// Direction cosines.
250 std::array<std::array<double, 3>, 3> dcos;
251 /// X-coordinates of vertices
252 std::vector<double> xv;
253 /// Y-coordinates of vertices
254 std::vector<double> yv;
255 /// Z-coordinates of vertices
256 std::vector<double> zv;
257 /// Interface type.
258 int interface = 0;
259 /// Ratio of dielectric permittivities.
260 double lambda = 0.;
261 /// Collocation point.
262 std::array<double, 3> collocationPoint;
263 /// Boundary condition.
264 double bc = 0.;
265 /// Fixed charge density.
266 double assigned = 0.;
267 /// Solution (accumulated charge).
268 double solution = 0.;
269 };
270 /// List of elements.
271 std::vector<Element> m_elements;
272
273 /// Plane existence.
274 std::array<bool, 6> m_ynplan{{false, false, false, false, false, false}};
275 /// Plane coordinates.
276 std::array<double, 6> m_coplan{{0., 0., 0., 0., 0., 0.}};
277 /// Plane potentials.
278 std::array<double, 6> m_vtplan{{0., 0., 0., 0., 0., 0.}};
279
280 // Model specifications
281 unsigned int m_newModel = 1;
282 unsigned int m_newMesh = 1;
283 unsigned int m_newBC = 1;
284 unsigned int m_newPP = 1;
285
286 // Store and read options
287 unsigned int m_optStoreInflMatrix = 0;
288 unsigned int m_optReadInflMatrix = 0;
289 unsigned int m_optStoreInvMatrix = 1;
290 unsigned int m_optReadInvMatrix = 0;
291 unsigned int m_optStorePrimitives = 0;
292 unsigned int m_optReadPrimitives = 0;
293 unsigned int m_optStoreElements = 0;
294 unsigned int m_optReadElements = 0;
295 unsigned int m_optStoreFormatted = 1;
296 unsigned int m_optStoreUnformatted = 0;
297
298 // Plot options
299 // unsigned int m_optGnuplotPrimitives = 0;
300 // unsigned int m_optGnuplotElements = 0;
301 // unsigned int m_optPrimitiveFiles = 0;
302 // unsigned int m_optElementFiles = 0;
303
304 // Compute options
305 unsigned int m_optSystemChargeZero = 1;
306 unsigned int m_optValidateSolution = 1;
307 unsigned int m_optForceValidation = 0;
308 unsigned int m_optRepeatLHMatrix = 0;
309
310 // Fast volume information (physical potential and fields)
311 unsigned int m_optFastVol = 0;
312 unsigned int m_optCreateFastPF = 0;
313 unsigned int m_optReadFastPF = 0;
314 unsigned int m_versionFV = 0;
315 unsigned int m_nbBlocksFV = 0;
316
317 // Weighting potential and field related Fast volume information
318 unsigned int m_idWtField = 0;
319 unsigned int m_optWtFldFastVol[11];
320 unsigned int m_optCreateWtFldFastPF[11];
321 unsigned int m_optReadWtFldFastPF[11];
322 unsigned int m_versionWtFldFV[11];
323 unsigned int m_nbBlocksWtFldFV[11];
324
325 // Known charge options
326 unsigned int m_optKnownCharge = 0;
327
328 // Charging up options
329 unsigned int m_optChargingUp = 0;
330
331 // Number of threads to be used by neBEM.
332 unsigned int m_nThreads = 1;
333
334 // Number of repetitions, after which only primitive properties are used.
335 // a negative value implies elements are used always.
336 int m_primAfter = -1;
337
338 // Number of repetitions, after which only primitive properties are used
339 // for weighting field calculations.
340 // A negative value implies only elements are used.
341 int m_wtFldPrimAfter = -1;
342
343 // Option for removing primitives from a device geometry.
344 // Zero implies none to be removed.
345 unsigned int m_optRmPrim = 0;
346
347 static constexpr double MinDist = 1.e-6;
348 /// Target size of elements [cm].
349 double m_targetElementSize = 50.0e-4;
350 /// Smallest number of elements produced along the axis of a primitive.
351 unsigned int m_minNbElementsOnLength = 1;
352 /// Largest number of elements produced along the axis of a primitive.
353 unsigned int m_maxNbElementsOnLength = 100;
354 /// Periodic lengths.
355 std::array<double, 3> m_periodicLength{{0., 0., 0.}};
356 /// Number of periodic copies along x.
357 unsigned int m_nCopiesX = 5;
358 /// Number of periodic copies along y.
359 unsigned int m_nCopiesY = 5;
360 /// Number of periodic copies along z.
361 unsigned int m_nCopiesZ = 5;
362
363 enum class Inversion { LU = 0, SVD };
364 Inversion m_inversion = Inversion::LU;
365
366 /// Electrode labels and corresponding neBEM weighting field indices.
367 std::map<std::string, int> m_wfields;
368
369 void InitValues();
370 /// Reduce panels to the basic period.
371 void ShiftPanels(std::vector<Panel>& panels) const;
372 /// Isolate the parts of polygon 1 that are not hidden by 2 and vice versa.
373 bool EliminateOverlaps(const Panel& panel1, const Panel& panel2,
374 std::vector<Panel>& panelsOut,
375 std::vector<int>& itypo);
376
377 bool TraceEnclosed(const std::vector<double>& xl1,
378 const std::vector<double>& yl1,
379 const std::vector<double>& xl2,
380 const std::vector<double>& yl2, const Panel& originalPanel,
381 std::vector<Panel>& newPanels) const;
382
383 void TraceNonOverlap(
384 const std::vector<double>& xp1, const std::vector<double>& yp1,
385 const std::vector<double>& xl1, const std::vector<double>& yl1,
386 const std::vector<double>& xl2, const std::vector<double>& yl2,
387 const std::vector<int>& flags1, const std::vector<int>& flags2,
388 const std::vector<int>& links1, const std::vector<int>& links2,
389 std::vector<bool>& mark1, int ip1, const Panel& originalPanel,
390 std::vector<Panel>& newPanels) const;
391
392 void TraceOverlap(
393 const std::vector<double>& xp1, const std::vector<double>& yp1,
394 const std::vector<double>& xp2, const std::vector<double>& yp2,
395 const std::vector<double>& xl1, const std::vector<double>& yl1,
396 const std::vector<double>& xl2, const std::vector<double>& yl2,
397 const std::vector<int>& flags1, const std::vector<int>& links1,
398 const std::vector<int>& links2, std::vector<bool>& mark1, int ip1,
399 int ip2, const Panel& originalPanel, std::vector<Panel>& newPanels) const;
400
401 /// Split a polygon into rectangles and right-angled triangles.
402 bool MakePrimitives(const Panel& panelIn,
403 std::vector<Panel>& panelsOut) const;
404
405 /// Check whether a polygon contains parallel lines.
406 /// If it does, split it in rectangular and non-rectangular parts.
407 bool SplitTrapezium(const Panel panelIn, std::vector<Panel>& stack,
408 std::vector<Panel>& panelsOut, const double epsang) const;
409
410 unsigned int NbOfSegments(const double length, const double target) const;
411 bool DiscretizeWire(const Primitive& primitive, const double targetSize,
412 std::vector<Element>& elements) const;
413 bool DiscretizeTriangle(const Primitive& primitive, const double targetSize,
414 std::vector<Element>& elements) const;
415 bool DiscretizeRectangle(const Primitive& prim, const double targetSize,
416 std::vector<Element>& elements) const;
417 int InterfaceType(const Solid::BoundaryCondition bc) const;
418};
419
421
422} // namespace Garfield
423
424#endif
bool GetPlaneZ(const unsigned int i, double &z, double &v) const
Retrieve the parameters of a plane at constant z.
bool GetPlaneY(const unsigned int i, double &y, double &v) const
Retrieve the parameters of a plane at constant y.
void SetSystemChargeZero(const unsigned int OptSystemChargeZero)
void SetWtFldPrimAfter(const int n)
void AddPlaneZ(const double z, const double voltage)
Add a plane at constant z.
bool GetPeriodicityX(double &s) const
Get the periodic length in the x-direction.
unsigned int GetNumberOfPrimitives() const
void SetFastVolBlocks(const unsigned int NbBlocksFV)
void SetStoreElements(const unsigned int OptStoreElements)
void SetWtFldFastVolVersion(const unsigned int IdWtField, const unsigned int VersionWtFldFV)
bool GetPeriodicityZ(double &s) const
Get the periodic length in the z-direction.
void Reset() override
Reset the component.
void SetUnformattedFile(const unsigned int OptUnformattedFile)
void SetMirrorPeriodicityX(const double s)
Set the periodic length [cm] in the x-direction.
void SetOptRmPrim(const unsigned int n)
Set option related to removal of primitives.
void SetPeriodicityX(const double s)
Set the periodic length [cm] in the x-direction.
void SetWtFldFastVolOptions(const unsigned int IdWtField, const unsigned int OptWtFldFastVol, const unsigned int OptCreateWtFldFastPF, const unsigned int OptReadWtFldFastPF)
void UpdatePeriodicity() override
Verify periodicities.
bool GetVoltageRange(double &vmin, double &vmax) override
Calculate the voltage range [V].
void SetStoreReadOptions(const unsigned int OptStoreInflMatrix, const unsigned int OptReadInflMatrix, const unsigned int OptStoreInvMatrix, const unsigned int OptReadInvMatrix, const unsigned int OptStorePrimitives, const unsigned int OptReadPrimitives, const unsigned int OptStoreElements, const unsigned int OptReadElements, const unsigned int OptFormattedFile, const unsigned int OptUnformattedFile)
unsigned int GetNumberOfPlanesY() const
Get the number of equipotential planes at constant y.
bool GetPeriodicityY(double &s) const
Get the periodic length in the y-direction.
void SetReadPrimitives(const unsigned int OptReadPrimitives)
unsigned int GetNumberOfPlanesZ() const
Get the number of equipotential planes at constant z.
void SetNumberOfThreads(const unsigned int n)
Set the number of threads to be used by neBEM.
void SetReadInvMatrix(const unsigned int OptReadInvMatrix)
void AddPlaneY(const double y, const double voltage)
Add a plane at constant y.
void AddPlaneX(const double x, const double voltage)
Add a plane at constant x.
void SetForceValidation(const unsigned int OptForceValidation)
void SetRepeatLHMatrix(const unsigned int OptRepeatLHMatrix)
void SetValidateSolution(const unsigned int OptValidateSolution)
void SetMirrorPeriodicityZ(const double s)
Set the periodic length [cm] in the z-direction.
void SetPeriodicityZ(const double s)
Set the periodic length [cm] in the z-direction.
bool GetVolume(const unsigned int vol, int &shape, int &material, double &eps, double &potential, double &charge, int &bc)
void SetPeriodicityY(const double s)
Set the periodic length [cm] in the y-direction.
void UseSVDInversion()
Invert the influence matrix using singular value decomposition.
Medium * GetMedium(const double x, const double y, const double z) override
Get the medium at a given location (x, y, z).
void SetNewMesh(const unsigned int NewMesh)
unsigned int GetNumberOfPlanesX() const
Get the number of equipotential planes at constant x.
bool GetElement(const unsigned int i, std::vector< double > &xv, std::vector< double > &yv, std::vector< double > &zv, int &interface, double &bc, double &lambda) const
void SetTargetElementSize(const double length)
void SetStoreInvMatrix(const unsigned int OptStoreInvMatrix)
void SetWtFldFastVolBlocks(const unsigned int IdWtField, const unsigned int NbBlocksWtFldFV)
void SetMirrorPeriodicityY(const double s)
Set the periodic length [cm] in the y-direction.
void SetPeriodicCopies(const unsigned int nx, const unsigned int ny, const unsigned int nz)
void SetComputeOptions(const unsigned int OptSystemChargeZero, const unsigned int OptValidateSolution, const unsigned int OptForceValidation, const unsigned int OptRepeatLHMatrix)
bool GetPrimitive(const unsigned int i, double &a, double &b, double &c, std::vector< double > &xv, std::vector< double > &yv, std::vector< double > &zv, int &interface, double &v, double &q, double &lambda) const
void SetFastVolOptions(const unsigned int OptFastVol, const unsigned int OptCreateFastPF, const unsigned int OptReadFastPF)
void SetMinMaxNumberOfElements(const unsigned int nmin, const unsigned int nmax)
void SetReadInflMatrix(const unsigned int OptReadInflMatrix)
void SetChargingUpOptions(const unsigned int OptChargingUp)
unsigned int GetNumberOfElements() const
void SetNewBC(const unsigned int NewBC)
void SetModelOptions(const unsigned int NewModel, const unsigned int NewMesh, const unsigned int NewBC, const unsigned int NewPP)
void SetFastVolVersion(const unsigned int VersionFV)
void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status) override
void SetStoreInflMatrix(const unsigned int OptStoreInflMatrix)
void UseLUInversion()
Invert the influence matrix using lower-upper (LU) decomposition.
void SetNewPP(const unsigned int NewPP)
void SetNewModel(const unsigned int NewModel)
void SetReadElements(const unsigned int OptReadElements)
bool GetPlaneX(const unsigned int i, double &x, double &v) const
Retrieve the parameters of a plane at constant x.
double WeightingPotential(const double x, const double y, const double z, const std::string &label) override
void SetKnownChargeOptions(const unsigned int OptKnownCharge)
void GetPeriodicCopies(unsigned int &nx, unsigned int &ny, unsigned int &nz) const
Retrieve the number of periodic copies used by neBEM.
void SetStorePrimitives(const unsigned int OptStorePrimitives)
void WeightingField(const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label) override
void SetFormattedFile(const unsigned int OptFormattedFile)
virtual void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status)=0
Component()=delete
Default constructor.
Abstract base class for media.
Definition Medium.hh:16
ComponentNeBem3d * gComponentNeBem3d
neBEMGLOBAL int OptRepeatLHMatrix
Definition neBEM.h:58
neBEMGLOBAL int OptReadPrimitives
Definition neBEM.h:52
neBEMGLOBAL int OptStorePrimitives
Definition neBEM.h:51
neBEMGLOBAL int NewModel
Definition neBEM.h:180
neBEMGLOBAL int OptFormattedFile
Definition neBEM.h:56
neBEMGLOBAL int OptChargingUp
Definition neBEM.h:60
neBEMGLOBAL int NewMesh
Definition neBEM.h:180
neBEMGLOBAL int OptWtFldFastVol[MAXWtFld]
Definition neBEM.h:492
neBEMGLOBAL int NbBlocksWtFldFV[MAXWtFld]
Definition neBEM.h:497
neBEMGLOBAL int VersionFV
Definition neBEM.h:422
neBEMGLOBAL int OptCreateFastPF
Definition neBEM.h:420
neBEMGLOBAL int OptSystemChargeZero
Definition neBEM.h:125
neBEMGLOBAL int NewPP
Definition neBEM.h:180
neBEMGLOBAL int OptCreateWtFldFastPF[MAXWtFld]
Definition neBEM.h:494
neBEMGLOBAL int OptFastVol
Definition neBEM.h:418
neBEMGLOBAL int * InterfaceType
Definition neBEM.h:75
neBEMGLOBAL int OptReadFastPF
Definition neBEM.h:421
neBEMGLOBAL int OptStoreInflMatrix
Definition neBEM.h:47
neBEMGLOBAL int OptReadInflMatrix
Definition neBEM.h:48
neBEMGLOBAL int OptForceValidation
Definition neBEM.h:45
neBEMGLOBAL int OptUnformattedFile
Definition neBEM.h:57
neBEMGLOBAL int OptReadInvMatrix
Definition neBEM.h:50
neBEMGLOBAL int NbBlocksFV
Definition neBEM.h:423
neBEMGLOBAL int VersionWtFldFV[MAXWtFld]
Definition neBEM.h:496
neBEMGLOBAL int OptValidateSolution
Definition neBEM.h:44
neBEMGLOBAL int OptReadElements
Definition neBEM.h:55
neBEMGLOBAL int OptStoreElements
Definition neBEM.h:54
neBEMGLOBAL int OptStoreInvMatrix
Definition neBEM.h:49
neBEMGLOBAL int OptReadWtFldFastPF[MAXWtFld]
Definition neBEM.h:495
neBEMGLOBAL int NewBC
Definition neBEM.h:180