48 const Vect3& p1x,
const double norm2p1x,
49 const Vect3& p1p0,
const double norm2p1p0)
55 const double arg = (norm2p0x * norm2p1p0 - p0x * p1p0) / (norm2p1x * norm2p1p0 - p1x * p1p0);
56 return (std::isnormal(arg) && arg > 0.0) ? log(arg) : fabs(log(norm2p1x / norm2p0x));
66 double tanTHETA0m, tanTHETA0p, tanTHETA1m, tanTHETA1p, tanTHETA2m,
tanTHETA2p;
87 p1p0 = p1-p0; p2p1 = p2-p1; p0p2 = p0-p2;
88 norm2p1p0 = p1p0.
norm(); norm2p2p1 = p2p1.norm(); norm2p0p2 = p0p2.norm();
100 p1p0 = p1-p0; p2p1 = p2-p1; p0p2 = p0-p2;
101 norm2p1p0 = p1p0.
norm(); norm2p2p1 = p2p1.norm(); norm2p0p2 = p0p2.norm();
111 const Vect3& p0x = p0-x;
112 const Vect3& p1x = p1-x;
113 const Vect3& p2x = p2-x;
114 const double norm2p0x = p0x.
norm();
115 const double norm2p1x = p1x.
norm();
116 const double norm2p2x = p2x.
norm();
122 const double alpha = p0x*n;
124 return (((p0x*nu0)*g0+(p1x*nu1)*g1+(p2x*nu2)*g2)-alpha*x.solangl(p0, p1, p2));
145 double y1 = Y1.
norm();
146 double y2 = Y2.
norm();
147 double y3 = Y3.
norm();
148 double d = Y1*(Y2^Y3);
151 if ( fabs(d) < derr ) {
155 double omega = 2. * atan2(d, (y1*y2*y3 + y1*(Y2*Y3) + y2*(Y3*Y1) + y3*(Y1*Y2)));
163 double d1 = D1.
norm();
164 double d2 = D2.
norm();
165 double d3 = D3.
norm();
166 double g1 = -1.0/d1*log((y1*d1+Y1*D1)/(y2*d1+Y2*D1));
167 double g2 = -1.0/d2*log((y2*d2+Y2*D2)/(y3*d2+Y3*D2));
168 double g3 = -1.0/d3*log((y3*d3+Y3*D3)/(y1*d3+Y1*D3));
170 double invA = 1.0/N.
norm2();
171 Vect3 S = D1*g1+D2*g2+D3*g3;
173 omega_i.
x() = invA*(Z1*N*omega+d*(D2*S));
174 omega_i.
y() = invA*(Z2*N*omega+d*(D3*S));
175 omega_i.
z() = invA*(Z3*N*omega+d*(D1*S));
198 double rn = r.
norm();
199 return (q*r)/(rn*rn*rn);
207 Vect3 H0p0DivNorm2, H1p1DivNorm2, H2p2DivNorm2,
n;
216 Vect3 p0, p1, p2, p1p0, p2p1, p0p2, p1p0n, p2p1n, p0p2n, p1H0, p2H1, p0H2;
221 p1p0 = p0-p1; p2p1 = p1-p2; p0p2 = p2-p0;
224 p1H0 = (p1p0*p2p1n)*p2p1n; H0 = p1H0+p1; H0p0DivNorm2 = p0-H0; H0p0DivNorm2 = H0p0DivNorm2/H0p0DivNorm2.
norm2();
225 p2H1 = (p2p1*p0p2n)*p0p2n; H1 = p2H1+p2; H1p1DivNorm2 = p1-H1; H1p1DivNorm2 = H1p1DivNorm2/H1p1DivNorm2.
norm2();
226 p0H2 = (p0p2*p1p0n)*p1p0n; H2 = p0H2+p0; H2p2DivNorm2 = p2-H2; H2p2DivNorm2 = H2p2DivNorm2/H2p2DivNorm2.
norm2();
234 Vect3 P1part(H0p0DivNorm2*(x-H0), H1p1DivNorm2*(x-H1), H2p2DivNorm2*(x-H2));
238 double rn = r.
norm();
239 double EMpart = n*(q/pow(rn, 3.)-3*(q*r)*r/pow(rn, 5.));
241 return -EMpart*P1part;
void init(const Vect3 &v0, const Vect3 &v1, const Vect3 &v2)
double f(const Vect3 &x) const
void init(const Vect3 &_q, const Vect3 &_r0)
Vect3 f(const Vect3 &x) const
void init(const Triangle &T, const Vect3 &_q, const Vect3 &_r0)
const Vertex & s1() const
Vect3 p2
vertices of the triangle
const Vertex & s3() const
void init(const Triangle &T)
analyticD3(const Triangle &T)
const Vertex & s2() const
double integral_simplified_green(const Vect3 &p0x, const double norm2p0x, const Vect3 &p1x, const double norm2p1x, const Vect3 &p1p0, const double norm2p1p0)
double f(const Vect3 &x) const
Vect3 f(const Vect3 &x) const