14 double p1 = x , p2 = y , p3 = z ;
15 double u1x = 1., u2x = 0., u3x = 0.;
16 double u1y = 0., u2y = 1., u3y = 0.;
17 double u1z = 0., u2z = 0., u3z = 1.;
19 MapCoordinates(p1, p2, p3, u1x, u2x, u3x, u1y, u2y, u3y, u1z, u2z, u3z,
25 std::cerr <<
" ComponentBase pointer is NULL for point (" << x <<
", "
26 << y <<
"," << z <<
")\n";
33 std::cerr <<
" Coordinates: \n";
34 std::cerr <<
" Global: (" << x <<
", " << y <<
", " << z <<
")\n";
35 std::cerr <<
" Local: (" << p1 <<
", " << p2 <<
", " << p3 <<
")\n";
36 std::cerr <<
" Local base vectors: \n";
37 std::cerr <<
" u1: (" << u1x <<
", " << u1y <<
", " << u1z <<
")\n";
38 std::cerr <<
" u2: (" << u2x <<
", " << u2y <<
", " << u2z <<
")\n";
39 std::cerr <<
" u3: (" << u3x <<
", " << u3y <<
", " << u3z <<
")\n";
46 const double z,
double& ex,
double& ey,
47 double& ez,
Medium*& m,
int& status){
53 const double z,
double& ex,
double& ey,
54 double& ez,
double& v,
Medium*& m,
56 double p1 = x , p2 = y , p3 = z ;
57 double u1x = 1., u2x = 0., u3x = 0.;
58 double u1y = 0., u2y = 1., u3y = 0.;
59 double u1z = 0., u2z = 0., u3z = 1.;
60 double e1 = 0., e2 = 0., e3 = 0.;
63 MapCoordinates(p1, p2, p3, u1x, u2x, u3x, u1y, u2y, u3y, u1z, u2z, u3z,
69 std::cerr <<
" ComponentBase pointer is NULL for point (" << x <<
", "
70 << y <<
"," << z <<
")\n";
79 std::cerr <<
" Coordinates: \n";
80 std::cerr <<
" Global: (" << x <<
", " << y <<
", " << z <<
")\n";
81 std::cerr <<
" Local: (" << p1 <<
", " << p2 <<
", " << p3 <<
")\n";
82 std::cerr <<
" Local base vectors: \n";
83 std::cerr <<
" u1: (" << u1x <<
", " << u1y <<
", " << u1z <<
")\n";
84 std::cerr <<
" u2: (" << u2x <<
", " << u2y <<
", " << u2z <<
")\n";
85 std::cerr <<
" u3: (" << u3x <<
", " << u3y <<
", " << u3z <<
")\n";
88 pComponent->
ElectricField(p1, p2, p3, e1, e2, e3, v, m, status);
89 UnmapField(e1, e2, e3, u1x, u2x, u3x, u1y, u2y, u3y, u1z, u2z, u3z, ex, ey,
94 const double z,
double& wx,
95 double& wy,
double& wz,
96 const std::string& label) {
97 double p1 = x , p2 = y , p3 = z ;
98 double u1x = 1., u2x = 0., u3x = 0.;
99 double u1y = 0., u2y = 1., u3y = 0.;
100 double u1z = 0., u2z = 0., u3z = 1.;
101 double w1 = 0., w2 = 0., w3 = 0.;
103 std::string label_ = label;
105 MapCoordinates(p1, p2, p3, u1x, u2x, u3x, u1y, u2y, u3y, u1z, u2z, u3z,
111 std::cerr <<
" ComponentBase pointer is NULL for point (" << x <<
", "
112 << y <<
"," << z <<
")\n";
120 std::cerr <<
" Coordinates: \n";
121 std::cerr <<
" Global: (" << x <<
", " << y <<
", " << z <<
")\n";
122 std::cerr <<
" Local: (" << p1 <<
", " << p2 <<
", " << p3 <<
")\n";
123 std::cerr <<
" Local base vectors: \n";
124 std::cerr <<
" u1: (" << u1x <<
", " << u1y <<
", " << u1z <<
")\n";
125 std::cerr <<
" u2: (" << u2x <<
", " << u2y <<
", " << u2z <<
")\n";
126 std::cerr <<
" u3: (" << u3x <<
", " << u3y <<
", " << u3z <<
")\n";
130 UnmapField(w1, w2, w3, u1x, u2x, u3x, u1y, u2y, u3y, u1z, u2z, u3z, wx, wy,
136 const std::string& label) {
137 double p1 = x , p2 = y , p3 = z ;
138 double u1x = 1., u2x = 0., u3x = 0.;
139 double u1y = 0., u2y = 1., u3y = 0.;
140 double u1z = 0., u2z = 0., u3z = 1.;
142 std::string label_ = label;
143 MapCoordinates(p1, p2, p3, u1x, u2x, u3x, u1y, u2y, u3y, u1z, u2z, u3z,
148 std::cerr <<
m_className <<
"::WeightingPotential:\n";
149 std::cerr <<
" ComponentBase pointer is NULL for point (" << x <<
", "
150 << y <<
"," << z <<
")\n";
156 std::cerr <<
m_className <<
"::WeightingPotential:\n";
157 std::cerr <<
" Coordinates: \n";
158 std::cerr <<
" Global: (" << x <<
", " << y <<
", " << z <<
")\n";
159 std::cerr <<
" Local: (" << p1 <<
", " << p2 <<
", " << p3 <<
")\n";
160 std::cerr <<
" Local base vectors: \n";
161 std::cerr <<
" u1: (" << u1x <<
", " << u1y <<
", " << u1z <<
")\n";
162 std::cerr <<
" u2: (" << u2x <<
", " << u2y <<
", " << u2z <<
")\n";
163 std::cerr <<
" u3: (" << u3x <<
", " << u3y <<
", " << u3z <<
")\n";
171 std::cerr <<
m_className <<
"::UpdatePeriodicity:\n";
172 std::cerr <<
" Periodicities should be implemented by overloading the "
173 <<
"MapCoordinates function.\n";
Abstract base class for components.
virtual void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status)=0
virtual double WeightingPotential(const double x, const double y, const double z, const std::string &label)
virtual void WeightingField(const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label)
std::string m_className
Class name.
bool m_debug
Switch on/off debugging messages.
virtual Medium * GetMedium(const double x, const double y, const double z)
Get the medium at a given location (x, y, z).
Medium * GetMedium(const double x, const double y, const double z)
Get the medium at a given location (x, y, z).
void UnmapField(const double e1, const double e2, const double e3, const double u1x, const double u2x, const double u3x, const double u1y, const double u2y, const double u3y, const double u1z, const double u2z, const double u3z, double &ex, double &ey, double &ez) const
void ElectricField(const double x, const double y, const double z, double &ex, double &ey, double &ez, 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)
void UpdatePeriodicity()
Verify periodicities.
virtual ~ComponentUserMapBase()
double WeightingPotential(const double x, const double y, const double z, const std::string &label)
virtual void MapCoordinates(double &p1, double &p2, double &p3, double &u1x, double &u2x, double &u3x, double &u1y, double &u2y, double &u3y, double &u1z, double &u2z, double &u3z, ComponentBase *&pComponent)=0
Abstract base class for media.