17 const Vect3& p1x,
const double norm2p1x,
18 const Vect3& p1p0,
const double norm2p1p0)
24 const double arg = (norm2p0x*norm2p1p0-
dotprod(p0x,p1p0))/(norm2p1x*norm2p1p0-
dotprod(p1x,p1p0));
25 return (std::isnormal(arg) && arg>0.0) ? log(arg) : fabs(log(norm2p1x/norm2p0x));
41 norm2p1p0 = p1p0.
norm();
42 norm2p2p1 = p2p1.norm();
43 norm2p0p2 = p0p2.norm();
46 void finish_intialization() {
60 finish_intialization();
67 finish_intialization();
72 const Vect3& p0x = p0-x;
73 const Vect3& p1x = p1-x;
74 const Vect3& p2x = p2-x;
75 const double norm2p0x = p0x.
norm();
76 const double norm2p1x = p1x.
norm();
77 const double norm2p2x = p2x.
norm();
83 const double alpha =
dotprod(p0x,n);
91 Vect3 p2p1, p1p0, p0p2;
94 double norm2p2p1, norm2p1p0, norm2p0p2;
101 Vect3 diff(
const unsigned i,
const unsigned j)
const {
return triangle.vertex(i)-triangle.vertex(j); }
118 triangle(T),D1(diff(1,0)),D2(diff(2,1)),D3(diff(0,2)),U1(unit_vector(D1)),U2(unit_vector(D2)),U3(unit_vector(D3))
128 const Vect3& Y1 = triangle.vertex(0)-x;
129 const Vect3& Y2 = triangle.vertex(1)-x;
130 const Vect3& Y3 = triangle.vertex(2)-x;
131 const double y1 = Y1.
norm();
132 const double y2 = Y2.
norm();
133 const double y3 = Y3.
norm();
134 const double d =
det(Y1,Y2,Y3);
147 const Vect3& N = Z1+Z2+Z3;
148 const Vect3& S = U1*g1+U2*g2+U3*g3;
150 return (omega*
Vect3(
dotprod(Z1,N),
dotprod(Z2,N),
dotprod(Z3,N))+d*
Vect3(
dotprod(D2,S),
dotprod(D3,S),
dotprod(D1,S)))/N.
norm2();
174 const Vect3& p1p0 = p0-p1;
175 const Vect3& p2p1 = p1-p2;
176 const Vect3& p0p2 = p2-p0;
183 H0p0DivNorm2 = p0-H0;
184 H0p0DivNorm2 = H0p0DivNorm2/H0p0DivNorm2.
norm2();
187 H1p1DivNorm2 = p1-H1;
188 H1p1DivNorm2 = H1p1DivNorm2/H1p1DivNorm2.
norm2();
191 H2p2DivNorm2 = p2-H2;
192 H2p2DivNorm2 = H2p2DivNorm2/H2p2DivNorm2.
norm2();
203 const Vect3& x = r-dipole.position();
204 const double inv_xnrm2 = 1.0/x.
norm2();
205 const double EMpart =
dotprod(n,dipole.moment()-3*
dotprod(dipole.moment(),x)*x*inv_xnrm2)*(inv_xnrm2*sqrt(inv_xnrm2));
207 return -EMpart*P1part;
215 Vect3 H0p0DivNorm2, H1p1DivNorm2, H2p2DivNorm2, n;
Matrix class Matrix class.
void setlin(const Index i, const Vector &v)
Vertex & vertex(const unsigned &vindex)
double solid_angle(const Vect3 &v1, const Vect3 &v2, const Vect3 &v3) const
analyticD3(const Triangle &T)
Vect3 f(const Vect3 &x) const
Vect3 f(const Vect3 &r) const
analyticDipPotDer(const Dipole &dip, const Triangle &T)
analyticS(const Triangle &T)
analyticS(const Vect3 &v0, const Vect3 &v1, const Vect3 &v2)
double f(const Vect3 &x) const
double integral_simplified_green(const Vect3 &p0x, const double norm2p0x, const Vect3 &p1x, const double norm2p1x, const Vect3 &p1p0, const double norm2p1p0)
Vect3 crossprod(const Vect3 &V1, const Vect3 &V2)
double det(const Vect3 &V1, const Vect3 &V2, const Vect3 &V3)
double dotprod(const Vect3 &V1, const Vect3 &V2)