Garfield++ v2r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
|
Component for importing field maps computed by Elmer. More...
#include <ComponentElmer.hh>
Public Member Functions | |
ComponentElmer () | |
Default constructor. | |
ComponentElmer (const std::string &header, const std::string &elist, const std::string &nlist, const std::string &mplist, const std::string &volt, const std::string &unit) | |
Constructor with a set of field map files, see Initialise(). | |
~ComponentElmer () | |
Destructor. | |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status) |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status) |
void | WeightingField (const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label) |
double | WeightingPotential (const double x, const double y, const double z, const std::string &label) |
Medium * | GetMedium (const double x, const double y, const double z) |
Get the medium at a given location (x, y, z). | |
virtual bool | IsInBoundingBox (const double x, const double y, const double z) const |
bool | Initialise (const std::string &header="mesh.header", const std::string &elist="mesh.elements", const std::string &nlist="mesh.nodes", const std::string &mplist="dielectrics.dat", const std::string &volt="out.result", const std::string &unit="cm") |
bool | SetWeightingField (std::string prnsol, std::string label) |
Import a list of voltages to be used as weighting field. | |
Public Member Functions inherited from Garfield::ComponentFieldMap | |
ComponentFieldMap () | |
Constructor. | |
virtual | ~ComponentFieldMap () |
Destructor. | |
virtual void | SetRange () |
Calculate x, y, z, V and angular ranges. | |
void | PrintRange () |
Show x, y, z, V and angular ranges. | |
virtual bool | IsInBoundingBox (const double x, const double y, const double z) const |
virtual bool | GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) |
Get the bounding box coordinates. | |
virtual bool | GetVoltageRange (double &vmin, double &vmax) |
Calculate the voltage range [V]. | |
void | PrintMaterials () |
List all currently defined materials. | |
void | DriftMedium (const unsigned int imat) |
Flag a field map material as a drift medium. | |
void | NotDriftMedium (const unsigned int imat) |
Flag a field map materials as a non-drift medium. | |
unsigned int | GetNumberOfMaterials () const |
Return the number of materials in the field map. | |
double | GetPermittivity (const unsigned int imat) const |
Return the permittivity of a field map material. | |
double | GetConductivity (const unsigned int imat) const |
Return the conductivity of a field map material. | |
void | SetMedium (const unsigned int imat, Medium *medium) |
Associate a field map material with a Medium class. | |
Medium * | GetMedium (const unsigned int i) const |
Return the Medium associated to a field map material. | |
Medium * | GetMedium (const double x, const double y, const double z)=0 |
Get the medium at a given location (x, y, z). | |
unsigned int | GetNumberOfMedia () const |
int | GetNumberOfElements () const |
Return the number of mesh elements. | |
bool | GetElement (const unsigned int i, double &vol, double &dmin, double &dmax) |
Return the volume and aspect ratio of a mesh element. | |
virtual void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status)=0 |
virtual void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status)=0 |
virtual void | WeightingField (const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label)=0 |
virtual double | WeightingPotential (const double x, const double y, const double z, const std::string &label)=0 |
void | EnableCheckMapIndices () |
void | DisableCheckMapIndices () |
void | EnableDeleteBackgroundElements () |
void | DisableDeleteBackgroundElements () |
void | EnableTetrahedralTreeForElementSearch (const bool on=true) |
Public Member Functions inherited from Garfield::ComponentBase | |
ComponentBase () | |
Constructor. | |
virtual | ~ComponentBase () |
Destructor. | |
virtual void | SetGeometry (GeometryBase *geo) |
Define the geometry. | |
virtual void | Clear () |
Reset. | |
virtual Medium * | GetMedium (const double x, const double y, const double z) |
Get the medium at a given location (x, y, z). | |
virtual void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status)=0 |
virtual void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status)=0 |
virtual bool | GetVoltageRange (double &vmin, double &vmax)=0 |
Calculate the voltage range [V]. | |
virtual void | WeightingField (const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label) |
virtual double | WeightingPotential (const double x, const double y, const double z, const std::string &label) |
virtual void | MagneticField (const double x, const double y, const double z, double &bx, double &by, double &bz, int &status) |
void | SetMagneticField (const double bx, const double by, const double bz) |
Set a constant magnetic field. | |
virtual bool | IsReady () |
Ready for use? | |
virtual bool | GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) |
Get the bounding box coordinates. | |
virtual bool | IsWireCrossed (const double x0, const double y0, const double z0, const double x1, const double y1, const double z1, double &xc, double &yc, double &zc) |
virtual bool | IsInTrapRadius (const double q0, const double x0, const double y0, const double z0, double &xw, double &yw, double &rw) |
void | EnablePeriodicityX (const bool on=true) |
Enable simple periodicity in the direction. | |
void | DisablePeriodicityX () |
void | EnablePeriodicityY (const bool on=true) |
Enable simple periodicity in the direction. | |
void | DisablePeriodicityY () |
void | EnablePeriodicityZ (const bool on=true) |
Enable simple periodicity in the direction. | |
void | DisablePeriodicityZ () |
void | EnableMirrorPeriodicityX (const bool on=true) |
Enable mirror periodicity in the direction. | |
void | DisableMirrorPeriodicityX () |
void | EnableMirrorPeriodicityY (const bool on=true) |
Enable mirror periodicity in the direction. | |
void | DisableMirrorPeriodicityY () |
void | EnableMirrorPeriodicityZ (const bool on=true) |
Enable mirror periodicity in the direction. | |
void | DisableMirrorPeriodicityZ () |
void | EnableAxialPeriodicityX (const bool on=true) |
Enable axial periodicity in the direction. | |
void | DisableAxialPeriodicityX () |
void | EnableAxialPeriodicityY (const bool on=true) |
Enable axial periodicity in the direction. | |
void | DisableAxialPeriodicityY () |
void | EnableAxialPeriodicityZ (const bool on=true) |
Enable axial periodicity in the direction. | |
void | DisableAxialPeriodicityZ () |
void | EnableRotationSymmetryX (const bool on=true) |
Enable rotation symmetry around the axis. | |
void | DisableRotationSymmetryX () |
void | EnableRotationSymmetryY (const bool on=true) |
Enable rotation symmetry around the axis. | |
void | DisableRotationSymmetryY () |
void | EnableRotationSymmetryZ (const bool on=true) |
Enable rotation symmetry around the axis. | |
void | DisableRotationSymmetryZ () |
void | EnableDebugging () |
Switch on debugging messages. | |
void | DisableDebugging () |
Switch off debugging messages. | |
void | ActivateTraps () |
Request trapping to be taken care of by the component (for TCAD). | |
void | DeactivateTraps () |
bool | IsTrapActive () |
void | ActivateVelocityMap () |
Request velocity to be taken care of by the component (for TCAD). | |
void | DectivateVelocityMap () |
bool | IsVelocityActive () |
virtual bool | ElectronAttachment (const double, const double, const double, double &eta) |
Get the electron attachment coefficient. | |
virtual bool | HoleAttachment (const double, const double, const double, double &eta) |
Get the hole attachment coefficient. | |
virtual void | ElectronVelocity (const double, const double, const double, double &vx, double &vy, double &vz, Medium *&, int &status) |
Get the electron drift velocity. | |
virtual void | HoleVelocity (const double, const double, const double, double &vx, double &vy, double &vz, Medium *&, int &status) |
Get the hole drift velocity. | |
virtual bool | GetElectronLifetime (const double, const double, const double, double &etau) |
virtual bool | GetHoleLifetime (const double, const double, const double, double &htau) |
Protected Member Functions | |
void | UpdatePeriodicity () |
Verify periodicities. | |
double | GetElementVolume (const unsigned int i) |
void | GetAspectRatio (const unsigned int i, double &dmin, double &dmax) |
Protected Member Functions inherited from Garfield::ComponentFieldMap | |
void | Reset () |
Geometry checks. | |
virtual void | UpdatePeriodicity ()=0 |
Verify periodicities. | |
void | UpdatePeriodicity2d () |
void | UpdatePeriodicityCommon () |
int | FindElement5 (const double x, const double y, const double z, double &t1, double &t2, double &t3, double &t4, double jac[4][4], double &det) |
Find the element for a point in curved quadratic quadrilaterals. | |
int | FindElement13 (const double x, const double y, const double z, double &t1, double &t2, double &t3, double &t4, double jac[4][4], double &det) |
Find the element for a point in curved quadratic tetrahedra. | |
int | FindElementCube (const double x, const double y, const double z, double &t1, double &t2, double &t3, TMatrixD *&jac, std::vector< TMatrixD * > &dN) |
Find the element for a point in a cube. | |
void | MapCoordinates (double &xpos, double &ypos, double &zpos, bool &xmirrored, bool &ymirrored, bool &zmirrored, double &rcoordinate, double &rotation) const |
Move (xpos, ypos, zpos) to field map coordinates. | |
void | UnmapFields (double &ex, double &ey, double &ez, double &xpos, double &ypos, double &zpos, bool &xmirrored, bool &ymirrored, bool &zmirrored, double &rcoordinate, double &rotation) const |
Move (ex, ey, ez) to global coordinates. | |
int | ReadInteger (char *token, int def, bool &error) |
double | ReadDouble (char *token, double def, bool &error) |
virtual double | GetElementVolume (const unsigned int i)=0 |
virtual void | GetAspectRatio (const unsigned int i, double &dmin, double &dmax)=0 |
void | PrintWarning (const std::string &header) |
void | PrintNotReady (const std::string &header) const |
void | PrintElement (const std::string &header, const double x, const double y, const double z, const double t1, const double t2, const double t3, const double t4, const unsigned int i, const unsigned int n, const int iw=-1) const |
virtual void | Reset ()=0 |
Geometry checks. | |
virtual void | UpdatePeriodicity ()=0 |
Verify periodicities. | |
Additional Inherited Members | |
Protected Attributes inherited from Garfield::ComponentFieldMap | |
bool | m_is3d |
int | nElements |
std::vector< Element > | elements |
int | nNodes |
std::vector< Node > | nodes |
unsigned int | m_nMaterials |
std::vector< Material > | materials |
int | nWeightingFields |
std::vector< std::string > | wfields |
std::vector< bool > | wfieldsOk |
bool | hasBoundingBox |
double | xMinBoundingBox |
double | yMinBoundingBox |
double | zMinBoundingBox |
double | xMaxBoundingBox |
double | yMaxBoundingBox |
double | zMaxBoundingBox |
double | mapxmin |
double | mapymin |
double | mapzmin |
double | mapxmax |
double | mapymax |
double | mapzmax |
double | mapxamin |
double | mapyamin |
double | mapzamin |
double | mapxamax |
double | mapyamax |
double | mapzamax |
double | mapvmin |
double | mapvmax |
bool | setangx |
bool | setangy |
bool | setangz |
double | mapsx |
double | mapsy |
double | mapsz |
double | cellsx |
double | cellsy |
double | cellsz |
double | mapnxa |
double | mapnya |
double | mapnza |
bool | m_deleteBackground |
bool | m_warning |
unsigned int | m_nWarnings |
Protected Attributes inherited from Garfield::ComponentBase | |
std::string | m_className |
Class name. | |
GeometryBase * | m_geometry |
Pointer to the geometry. | |
bool | m_ready |
Ready for use? | |
bool | m_activeTraps |
Does the component have traps? | |
bool | m_hasVelocityMap |
Does the component have velocity maps? | |
bool | m_xPeriodic |
Simple periodicity in x. | |
bool | m_yPeriodic |
Simple periodicity in y. | |
bool | m_zPeriodic |
Simple periodicity in z. | |
bool | m_xMirrorPeriodic |
Mirror periodicity in x. | |
bool | m_yMirrorPeriodic |
Mirror periodicity in y. | |
bool | m_zMirrorPeriodic |
Mirror periodicity in z. | |
bool | m_xAxiallyPeriodic |
Axial periodicity in x. | |
bool | m_yAxiallyPeriodic |
Axial periodicity in y. | |
bool | m_zAxiallyPeriodic |
Axial periodicity in z. | |
bool | m_xRotationSymmetry |
Rotation symmetry around x-axis. | |
bool | m_yRotationSymmetry |
Rotation symmetry around y-axis. | |
bool | m_zRotationSymmetry |
Rotation symmetry around z-axis. | |
double | m_bx0 |
double | m_by0 |
double | m_bz0 |
bool | m_debug |
Switch on/off debugging messages. | |
Component for importing field maps computed by Elmer.
Definition at line 12 of file ComponentElmer.hh.
Garfield::ComponentElmer::ComponentElmer | ( | ) |
Default constructor.
Definition at line 30 of file ComponentElmer.cc.
Garfield::ComponentElmer::ComponentElmer | ( | const std::string & | header, |
const std::string & | elist, | ||
const std::string & | nlist, | ||
const std::string & | mplist, | ||
const std::string & | volt, | ||
const std::string & | unit | ||
) |
Constructor with a set of field map files, see Initialise().
Definition at line 35 of file ComponentElmer.cc.
|
inline |
|
virtual |
Implements Garfield::ComponentFieldMap.
Definition at line 567 of file ComponentElmer.cc.
|
virtual |
Calculate the drift field at given point.
x,y,z | coordinates [cm]. |
ex,ey,ez | components of the electric field [V/cm]. |
m | pointer to the medium at this location. |
status | status flag |
Status flags:
0: Inside an active medium > 0: Inside a wire of type X -4 ... -1: On the side of a plane where no wires are -5: Inside the mesh but not in an active medium -6: Outside the mesh -10: Unknown potential type (should not occur) other: Other cases (should not occur)
Implements Garfield::ComponentFieldMap.
Definition at line 559 of file ComponentElmer.cc.
Referenced by ElectricField().
|
protectedvirtual |
Implements Garfield::ComponentFieldMap.
Definition at line 886 of file ComponentElmer.cc.
|
protectedvirtual |
Implements Garfield::ComponentFieldMap.
Definition at line 864 of file ComponentElmer.cc.
|
virtual |
Get the medium at a given location (x, y, z).
Implements Garfield::ComponentFieldMap.
Definition at line 821 of file ComponentElmer.cc.
bool Garfield::ComponentElmer::Initialise | ( | const std::string & | header = "mesh.header" , |
const std::string & | elist = "mesh.elements" , |
||
const std::string & | nlist = "mesh.nodes" , |
||
const std::string & | mplist = "dielectrics.dat" , |
||
const std::string & | volt = "out.result" , |
||
const std::string & | unit = "cm" |
||
) |
Import a field map from a set of files.
header | name of the header file (contains the number of elements and nodes). |
elist | name of the file that contains the list of mesh elements |
nlist | name of the file that contains the list of mesh nodes |
mplist | name of the file that contains the material properties |
volt | output of the field solver (list of voltages) |
unit | length unit to be used |
Definition at line 47 of file ComponentElmer.cc.
Referenced by ComponentElmer().
|
inlinevirtual |
Reimplemented from Garfield::ComponentFieldMap.
Definition at line 38 of file ComponentElmer.hh.
bool Garfield::ComponentElmer::SetWeightingField | ( | std::string | prnsol, |
std::string | label | ||
) |
Import a list of voltages to be used as weighting field.
Definition at line 455 of file ComponentElmer.cc.
|
inlineprotectedvirtual |
Verify periodicities.
Implements Garfield::ComponentFieldMap.
Definition at line 65 of file ComponentElmer.hh.
Referenced by Initialise().
|
virtual |
Calculate the weighting field at a given point and for a given electrode.
x,y,z | coordinates [cm]. |
wx,wy,wz | components of the weighting field [1/cm]. |
label | name of the electrode |
Implements Garfield::ComponentFieldMap.
Definition at line 666 of file ComponentElmer.cc.
|
virtual |
Implements Garfield::ComponentFieldMap.
Definition at line 760 of file ComponentElmer.cc.