Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
Loading...
Searching...
No Matches
ComponentTcad2d.hh
Go to the documentation of this file.
1#ifndef G_COMPONENT_TCAD_2D_H
2#define G_COMPONENT_TCAD_2D_H
3
4#include <array>
5#include <memory>
6
8#include "QuadTree.hh"
9
10namespace Garfield {
11
13
15 public:
20
22 void SetRangeZ(const double zmin, const double zmax);
23
31 bool GetElement(const size_t i, double& vol, double& dmin, double& dmax,
32 int& type) const;
34 bool GetNode(const size_t i, double& x, double& y, double& z) const override;
35
36 void ElectricField(const double x, const double y, const double z, double& ex,
37 double& ey, double& ez, double& v, Medium*& m,
38 int& status) override;
39
40 void ElectricField(const double x, const double y, const double z, double& ex,
41 double& ey, double& ez, Medium*& m, int& status) override {
42 double v = 0.;
43 ElectricField(x, y, z, ex, ey, ez, v, m, status);
44 }
45 using Component::ElectricField;
46 Medium* GetMedium(const double x, const double y, const double z) override;
47 void DelayedWeightingPotentials(const double x, const double y,
48 const double z, const std::string& label,
49 std::vector<double>& dwp) override;
50
51 bool GetBoundingBox(double& xmin, double& ymin, double& zmin, double& xmax,
52 double& ymax, double& zmax) override;
53 bool GetElementaryCell(double& xmin, double& ymin, double& zmin, double& xmax,
54 double& ymax, double& zmax) override;
55
56 private:
57 // Bounding box
58 bool m_hasRangeZ = false;
59
60 // Tetrahedral tree.
61 std::unique_ptr<QuadTree> m_tree;
62
63 void Reset() override {
64 Cleanup();
65 m_hasRangeZ = false;
66 m_ready = false;
67 }
68
69 size_t FindElement(const double x, const double y,
70 std::array<double, nMaxVertices>& w) const;
71 // Check whether a point is inside a given element and calculate the
72 // shape functions if it is.
73 bool InElement(const double x, const double y, const Element& element,
74 std::array<double, nMaxVertices>& w) const;
75 bool InRectangle(const double x, const double y, const Element& element,
76 std::array<double, nMaxVertices>& w) const;
77 bool InTriangle(const double x, const double y, const Element& element,
78 std::array<double, nMaxVertices>& w) const;
79 bool OnLine(const double x, const double y, const Element& element,
80 std::array<double, nMaxVertices>& w) const;
81 bool AtPoint(const double x, const double y, const Element& element,
82 std::array<double, nMaxVertices>& w) const;
83
84 bool Interpolate(const double x, const double y, const double z,
85 const std::vector<double>& field, double& f) override;
86 bool Interpolate(const double x, const double y, const double z,
87 const std::vector<std::array<double, 2> >& field, double& fx,
88 double& fy, double& fz) override;
89 void FillTree() override;
90};
91} // namespace Garfield
92#endif
void FillTree() override
bool GetBoundingBox(double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) override
ComponentTcad2d()
Constructor.
size_t FindElement(const double x, const double y, std::array< double, nMaxVertices > &w) const
void SetRangeZ(const double zmin, const double zmax)
Set the z-extent of the bounding box (default: unlimited).
bool OnLine(const double x, const double y, 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
bool GetElement(const size_t i, double &vol, double &dmin, double &dmax, int &type) const
Retrieve the properties of an element.
bool InElement(const double x, const double y, const Element &element, std::array< double, nMaxVertices > &w) const
bool Interpolate(const double x, const double y, const double z, const std::vector< std::array< double, 2 > > &field, double &fx, double &fy, double &fz) override
std::unique_ptr< QuadTree > m_tree
Medium * GetMedium(const double x, const double y, const double z) override
bool Interpolate(const double x, const double y, const double z, const std::vector< double > &field, double &f) override
bool InRectangle(const double x, const double y, const Element &element, 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.
void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status) override
void DelayedWeightingPotentials(const double x, const double y, const double z, const std::string &label, std::vector< double > &dwp) override
bool InTriangle(const double x, const double y, const Element &element, std::array< double, nMaxVertices > &w) const
bool GetElementaryCell(double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) override
bool AtPoint(const double x, const double y, const Element &element, std::array< double, nMaxVertices > &w) const