Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
Loading...
Searching...
No Matches
ComponentTcad3d.hh
Go to the documentation of this file.
1#ifndef G_COMPONENT_TCAD_3D_H
2#define G_COMPONENT_TCAD_3D_H
3
4#include <array>
5#include <memory>
6
9
10namespace Garfield {
11
13
15 public:
20
28 bool GetElement(const size_t i, double& vol, double& dmin, double& dmax,
29 int& type) const;
31 bool GetNode(const size_t i, double& x, double& y, double& z) const override;
32
33 void ElectricField(const double x, const double y, const double z, double& ex,
34 double& ey, double& ez, double& v, Medium*& m,
35 int& status) override;
36 void ElectricField(const double x, const double y, const double z, double& ex,
37 double& ey, double& ez, Medium*& m, int& status) override;
39 Medium* GetMedium(const double x, const double y, const double z) override;
40 void DelayedWeightingPotentials(const double x, const double y,
41 const double z, const std::string& label,
42 std::vector<double>& dwp) override;
43
44 bool GetBoundingBox(double& xmin, double& ymin, double& zmin, double& xmax,
45 double& ymax, double& zmax) override;
46 bool GetElementaryCell(double& xmin, double& ymin, double& zmin, double& xmax,
47 double& ymax, double& zmax) override;
48
49 private:
50 // Tetrahedral tree.
51 std::unique_ptr<TetrahedralTree> m_tree;
52
53 void Reset() override {
54 Cleanup();
55 m_ready = false;
56 }
57
58 size_t FindElement(const double x, const double y, const double z,
59 std::array<double, nMaxVertices>& w) const;
60 bool InElement(const double x, const double y, const double z,
61 const Element& element,
62 std::array<double, nMaxVertices>& w) const;
63 bool InTetrahedron(const double x, const double y, const double z,
64 const Element& element,
65 std::array<double, nMaxVertices>& w) const;
66 bool InTriangle(const double x, const double y, const double z,
67 const Element& element,
68 std::array<double, nMaxVertices>& w) const;
69
70 bool Interpolate(const double x, const double y, const double z,
71 const std::vector<double>& field, double& f) override;
72 bool Interpolate(const double x, const double y, const double z,
73 const std::vector<std::array<double, 3> >& field, double& fx,
74 double& fy, double& fz) override;
75 void FillTree() override;
76};
77} // namespace Garfield
78#endif
bool GetElementaryCell(double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) override
Get the coordinates of the elementary cell.
bool GetElement(const size_t i, double &vol, double &dmin, double &dmax, int &type) const
Retrieve the properties of an element.
void DelayedWeightingPotentials(const double x, const double y, const double z, const std::string &label, std::vector< double > &dwp) override
Calculate the delayed weighting potentials at a given point and for a given electrode,...
void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status) override
Calculate the drift field [V/cm] and potential [V] at (x, y, z).
bool InTetrahedron(const double x, const double y, const double z, const Element &element, std::array< double, nMaxVertices > &w) const
size_t FindElement(const double x, const double y, const double z, std::array< double, nMaxVertices > &w) const
bool GetNode(const size_t i, double &x, double &y, double &z) const override
Get the coordinates of a mesh node.
bool Interpolate(const double x, const double y, const double z, const std::vector< double > &field, double &f) override
void Reset() override
Reset the component.
bool GetBoundingBox(double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) override
Get the bounding box coordinates.
void FillTree() override
Medium * GetMedium(const double x, const double y, const double z) override
Get the medium at a given location (x, y, z).
bool Interpolate(const double x, const double y, const double z, const std::vector< std::array< double, 3 > > &field, double &fx, double &fy, double &fz) override
bool InElement(const double x, const double y, const double z, const Element &element, std::array< double, nMaxVertices > &w) const
void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status) override
Calculate the drift field at given point.
bool InTriangle(const double x, const double y, const double z, const Element &element, std::array< double, nMaxVertices > &w) const
ComponentTcad3d()
Constructor.
std::unique_ptr< TetrahedralTree > m_tree
virtual void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status)=0
Calculate the drift field at given point.
bool m_ready
Ready for use?
Definition Component.hh:441
Abstract base class for components.
Definition Medium.hh:17