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