29 os <<
"HeavisideSphere";
234 return Vec3D(P.
Y * Q.
Z - P.
Z * Q.
Y, P.
Z * Q.
X - P.
X * Q.
Z, P.
X * Q.
Y - P.
Y * Q.
X);
248 return P.
X * Q.
X + P.
Y * Q.
Y + P.
Z * Q.
Z;
269 std::cerr <<
"error in CG_function" << std::endl;
300 std::cerr <<
"error in CG_function_2D" << std::endl;
323 std::cerr <<
"error in CG_function_1D" << std::endl;
343 std::cerr <<
"error in CG_gradient" << std::endl;
356 Vec3D tangential = P_P1 - a * P1_P2_normal;
367 if ((wn2 <= 0) | (a * fabs(a) >= wn2) | (b * fabs(b) <= -wn2))
369 return Vec3D(0, 0, 0);
374 double wn = std::sqrt(wn2);
376 double delta = w * 1e-3;
379 Vec3D delta_P_P2 = P_P2 + Vec3D(delta, 0, 0);
382 tangential = delta_P_P1 - a * P1_P2_normal;
385 delta_P_P1 = P_P1 + Vec3D(0, delta, 0);
386 delta_P_P2 = P_P2 + Vec3D(0, delta, 0);
389 tangential = delta_P_P1 - a * P1_P2_normal;
392 delta_P_P1 = P_P1 + Vec3D(0, 0, delta);
393 delta_P_P2 = P_P2 + Vec3D(0, 0, delta);
396 tangential = delta_P_P1 - a * P1_P2_normal;
399 return Vec3D(Ix - I, Iy - I, Iz - I) / delta;
404 return Vec3D(0, 0, 0);
417 Vec3D tangential = P_P1 - a * P1_P2_normal;
428 if ((wn2 <= 0) | (a * fabs(a) >= wn2) | (b * fabs(b) <= -wn2))
435 std::cout <<
"normal is parallel to the averaging direction: "
436 <<
" P1_P2_distance " << P1_P2_distance
437 <<
" tangential " << tangential << std::endl;
443 double wn = sqrt(wn2);
446 double delta = w * 3e-6;
448 Vec3D delta_P_P1 = P_P1 +
Vec3D(delta, delta, delta);
449 Vec3D delta_P_P2 = P_P2 + Vec3D(delta, delta, delta);
452 tangential = delta_P_P1 - a * P1_P2_normal;
456 delta_P_P1 = P_P1 - Vec3D(delta, delta, delta);
457 delta_P_P2 = P_P2 - Vec3D(delta, delta, delta);
460 tangential = delta_P_P1 - a * P1_P2_normal;
464 return (I2 - I1) / (2. * delta);
477 template <StatType T>
489 Vec3D tangential = P_P1 - a * P1_P2_normal;
495 if ((wn2<=0) | (a*fabs(a)>=wn2) | (b*fabs(b)<=-wn2))
509 static Mdouble P1_P2_distance_for_cutoff=-1, InvVolumeErf=-1;
510 if (P1_P2_distance_for_cutoff!=P1_P2_distance)
512 P1_P2_distance_for_cutoff = P1_P2_distance;
515 InvVolumeErf = P1_P2_distance/(
516 erf(bmax/w_sqrt_2)*bmax+w_sqrt_2/
constants::sqrt_pi*exp(-bmax*bmax/(w_sqrt_2*w_sqrt_2))
517 -erf(amax/w_sqrt_2)*amax-w_sqrt_2/
constants::sqrt_pi*exp(-amax*amax/(w_sqrt_2*w_sqrt_2)));
521 * ( erf(b/w_sqrt_2) - erf(a/w_sqrt_2) ) * InvVolumeErf /2./P1_P2_distance;
528 if ((wn2<=0) | (a*fabs(a)>=wn2) | (b*fabs(b)<=-wn2))
534 double wn = sqrt(wn2);
541 { std::cerr <<
"error in CG_integral" << std::endl; exit(-1);}
558 Vec3D tangential = P_P1 - a * P1_P2_normal;
564 if ((wn2 <= 0) || (a * fabs(a) >= wn2) || (b * fabs(b) <= -wn2))
572 if (std::max(fabs(a), fabs(b)) < 1e-20)
591 static Mdouble P1_P2_distance_for_cutoff = -1, InvVolumeErf = -1;
592 if (P1_P2_distance_for_cutoff != P1_P2_distance)
594 P1_P2_distance_for_cutoff = P1_P2_distance;
597 InvVolumeErf = P1_P2_distance / (
598 erf(bmax / w_sqrt_2) * bmax + w_sqrt_2 /
constants::sqrt_pi * exp(-bmax * bmax / (w_sqrt_2 * w_sqrt_2))
599 - erf(amax / w_sqrt_2) * amax - w_sqrt_2 /
constants::sqrt_pi * exp(-amax * amax / (w_sqrt_2 * w_sqrt_2))
606 * (erf(b / w_sqrt_2) - erf(a / w_sqrt_2)) * InvVolumeErf / 2. / P1_P2_distance;
609 rpsi_scalar = -a / P1_P2_distance * psi +
getCGWidthSquared() / P1_P2_distance / P1_P2_distance * (phi1 - phi2);
615 if ((wn2 <= 0) | (a * fabs(a) >= wn2) | (b * fabs(b) <= -wn2))
619 else if (P1_P2_distance < 1e-20)
626 double wn = sqrt(wn2);
634 std::cerr <<
"error in CG_integral_2D" << std::endl;
653 Vec3D tangential = P_P1 - a * P1_P2_normal;
659 if ((wn2 <= 0) | (a * fabs(a) >= wn2) | (b * fabs(b) <= -wn2))
666 if (std::max(fabs(a), fabs(b)) < 1e-20)
678 if (fabs(b - a) < 1e-20)
683 static Mdouble P1_P2_distance_for_cutoff = -1, InvVolumeErf = -1;
684 if (P1_P2_distance_for_cutoff != P1_P2_distance)
686 P1_P2_distance_for_cutoff = P1_P2_distance;
689 InvVolumeErf = P1_P2_distance / (
690 erf(bmax / w_sqrt_2) * bmax + w_sqrt_2 /
constants::sqrt_pi * exp(-bmax * bmax / (w_sqrt_2 * w_sqrt_2))
691 - erf(amax / w_sqrt_2) * amax - w_sqrt_2 /
constants::sqrt_pi * exp(-amax * amax / (w_sqrt_2 * w_sqrt_2))
696 Mdouble psi = (erf(b / w_sqrt_2) - erf(a / w_sqrt_2)) * InvVolumeErf / 2. / P1_P2_distance;
699 rpsi_scalar = -a / P1_P2_distance * psi +
getCGWidthSquared() / P1_P2_distance / P1_P2_distance * (phi1 - phi2);
706 if ((wn2 <= 0) | (a * fabs(a) >= wn2) | (b * fabs(b) <= -wn2))
721 double wn = sqrt(wn2);
728 std::cerr <<
"error in CG_integral_1D" << std::endl;
731 std::cout <<
"eind testje" << rpsi_scalar << std::endl;
737 std::stringstream ss;
743 <<
"DisplacementMomentumX "
744 <<
"DisplacementMomentumY "
745 <<
"DisplacementMomentumZ "
758 <<
"DisplacementMomentumFluxXX "
759 <<
"DisplacementMomentumFluxXY "
760 <<
"DisplacementMomentumFluxXZ "
761 <<
"DisplacementMomentumFluxYY "
762 <<
"DisplacementMomentumFluxYZ "
763 <<
"DisplacementMomentumFluxZZ "
776 <<
"TangentialStressXX "
777 <<
"TangentialStressXY "
778 <<
"TangentialStressXZ "
779 <<
"TangentialStressYX "
780 <<
"TangentialStressYY "
781 <<
"TangentialStressYZ "
782 <<
"TangentialStressZX "
783 <<
"TangentialStressZY "
784 <<
"TangentialStressZZ "
785 <<
"NormalTractionX "
786 <<
"NormalTractionY "
787 <<
"NormalTractionZ "
788 <<
"TangentialTractionX "
789 <<
"TangentialTractionY "
790 <<
"TangentialTractionZ "
797 <<
"CollisionalHeatFluxX "
798 <<
"CollisionalHeatFluxY "
799 <<
"CollisionalHeatFluxZ "
802 <<
"LocalAngularMomentumX "
803 <<
"LocalAngularMomentumY "
804 <<
"LocalAngularMomentumZ "
805 <<
"LocalAngularMomentumFluxXX "
806 <<
"LocalAngularMomentumFluxXY "
807 <<
"LocalAngularMomentumFluxXZ "
808 <<
"LocalAngularMomentumFluxYX "
809 <<
"LocalAngularMomentumFluxYY "
810 <<
"LocalAngularMomentumFluxYZ "
811 <<
"LocalAngularMomentumFluxZX "
812 <<
"LocalAngularMomentumFluxZY "
813 <<
"LocalAngularMomentumFluxZZ "
814 <<
"ContactCoupleStressXX "
815 <<
"ContactCoupleStressXY "
816 <<
"ContactCoupleStressXZ "
817 <<
"ContactCoupleStressYX "
818 <<
"ContactCoupleStressYY "
819 <<
"ContactCoupleStressYZ "
820 <<
"ContactCoupleStressZX "
821 <<
"ContactCoupleStressZY "
822 <<
"ContactCoupleStressZZ ";
829 std::stringstream ss;
842 <<
",\n Fabric " <<
Fabric
855 std::stringstream ss;
856 ss <<
"Nu " << std::sqrt(
Nu)
857 <<
", Density " << std::sqrt(
Density)
871 <<
", Potential " << std::sqrt(
Potential)
882 std::stringstream ss;
940 return CG_invvolume_computed;
975 { std::cerr <<
"error in CG_function" << std::endl; exit(-1);}
981 return gb->getSystemDimensions();
985 return gb->getSystemDimensions() - 1;
989 return gb->getSystemDimensions() - 1;
1005 return gb->getSystemDimensions() - 2;
1042 return ((gb->getSystemDimensions() != 3) ? (1.0) : (getZMaxStat() - getZMinStat()));
1046 return (getYMaxStat() - getYMinStat());
1050 return (getXMaxStat() - getXMinStat());
1054 return (getYMaxStat() - getYMinStat())
1055 * ((gb->getSystemDimensions() != 3) ? (1.0) : (getZMaxStat() - getZMinStat()));
1059 return (getXMaxStat() - getXMinStat())
1060 * ((gb->getSystemDimensions() != 3) ? (1.0) : (getZMaxStat() - getZMinStat()));
1064 return (getXMaxStat() - getXMinStat())
1065 * (getYMaxStat() - getYMinStat());
1069 return (getXMaxStat() - getXMinStat())
1070 * (getYMaxStat() - getYMinStat())
1071 * ((gb->getSystemDimensions() != 3) ? (1.0) : (getZMaxStat() - getZMinStat()));
1100 return CG_function_2D(PI);
1104 Mdouble dist2 = getDistanceSquaredNonAveraged(PI);
1110 return (getCutoff2() < dist2) ? 0.0 : getCGInverseVolume()
1111 * exp(-(R2 + RI2 + Z2) / (2.0 * getCGWidthSquared())) *
besselFunc::I0(sqrt(R2 * RI2) / getCGWidthSquared());
1115 std::cerr <<
"error in CG_function<RZ>" << std::endl;
1121 std::cerr <<
"error in CG_function<AZ>" << std::endl;
1126 Mdouble dist2 = getDistanceSquaredNonAveraged(PI);
1131 return (getCutoff2() < dist2) ? 0.0 : getCGInverseVolume()
1132 * exp(-(R2 + RI2) / (2.0 * getCGWidthSquared())) *
besselFunc::I0(sqrt(R2 * RI2) / getCGWidthSquared());
1136 std::cerr <<
"error in CG_function<R>" << std::endl;
1142 std::cerr <<
"error in CG_function<A>" << std::endl;
1148 return CG_function_2D(PI);
1152 return CG_function_2D(PI);
1156 return CG_function_2D(PI);
1160 return CG_function_1D(PI);
1164 return CG_function_1D(PI);
1168 return CG_function_1D(PI);
1172 return getCGInverseVolume();
1180 return Vec3D(0.0, P.
Y - Position.Y, P.
Z - Position.Z) * (phi / getCGWidthSquared());
1184 std::cerr <<
"error in CG_gradient<YZ>" << std::endl;
1193 return Vec3D(P.
X - Position.X, 0.0, P.
Z - Position.Z) * (phi / getCGWidthSquared());
1197 std::cerr <<
"error in CG_gradient<XZ>" << std::endl;
1206 return Vec3D(P.
X - Position.X, P.
Y - Position.Y, 0.0) * (phi / getCGWidthSquared());
1210 std::cerr <<
"error in CG_gradient<XY>" << std::endl;
1220 return Vec3D((P.
X - Position.X) * (phi / getCGWidthSquared()), 0.0, 0.0);
1224 Mdouble r = fabs(Position.X - P.
X) / getCGWidth();
1225 return Vec3D(getCGInverseVolume() * evaluatePolynomialGradient(r) / r / getCGWidthSquared() * (Position.X - P.
X), 0, 0);
1229 std::cerr <<
"error in CG_gradient<X>" << std::endl;
1238 return Vec3D(0.0, (P.
Y - Position.Y) * (phi / getCGWidthSquared()), 0.0);
1242 Mdouble r = fabs(Position.Y - P.
Y) / getCGWidth();
1243 return Vec3D(0, getCGInverseVolume() * evaluatePolynomialGradient(r) / r / getCGWidthSquared() * (Position.Y - P.
Y), 0);
1247 std::cerr <<
"error in CG_gradient<Y>" << std::endl;
1256 return Vec3D(0.0, 0.0, (P.
Z - Position.Z) * (phi / getCGWidthSquared()));
1260 Mdouble r = fabs(Position.Z - P.
Z) / getCGWidth();
1261 return Vec3D(0, 0, getCGInverseVolume() * evaluatePolynomialGradient(r) / r / getCGWidthSquared() * (Position.Z - P.
Z));
1265 std::cerr <<
"error in CG_gradient<Z>" << std::endl;
1272 return Vec3D(0.0, 0.0, 0.0);
1291 Mdouble psi = CG_integral_2D(P1, P2, P1_P2_normal, P1_P2_distance, rpsi_scalar);
1292 rpsi = Position * psi;
1297 Vec3D P=(P1+P2)/2;
return CG_function(P);
1301 std::cerr <<
"error in CG_function<AZ>" << std::endl; exit(-1);
1305 Vec3D P=(P1+P2)/2;
return CG_function(P);
1309 std::cerr <<
"error in CG_function<A>" << std::endl; exit(-1);
1315 Mdouble psi = CG_integral_2D(P1, P2, P1_P2_normal, P1_P2_distance, rpsi_scalar);
1316 rpsi =
Vec3D(Position.X * psi, Position.Y * psi, P1.
Z * psi - (P1.
Z - P2.
Z) * rpsi_scalar);
1322 Mdouble psi = CG_integral_2D(P1, P2, P1_P2_normal, P1_P2_distance, rpsi_scalar);
1323 rpsi =
Vec3D(Position.X * psi, P1.
Y * psi - (P1.
Y - P2.
Y) * rpsi_scalar, Position.Z * psi);
1329 Mdouble psi = CG_integral_2D(P1, P2, P1_P2_normal, P1_P2_distance, rpsi_scalar);
1330 rpsi =
Vec3D(P1.
X * psi - (P1.
X - P2.
X) * rpsi_scalar, Position.Y * psi, Position.Z * psi);
1336 Mdouble psi = CG_integral_1D(P1, P2, P1_P2_normal, P1_P2_distance, rpsi_scalar);
1337 rpsi =
Vec3D(Position.X * psi, P1.
Y * psi - (P1.
Y - P2.
Y) * rpsi_scalar, P1.
Z * psi - (P1.
Z - P2.
Z) * rpsi_scalar);
1343 Mdouble psi = CG_integral_1D(P1, P2, P1_P2_normal, P1_P2_distance, rpsi_scalar);
1344 rpsi =
Vec3D(P1.
X * psi - (P1.
X - P2.
X) * rpsi_scalar, Position.Y * psi, P1.
Z * psi - (P1.
Z - P2.
Z) * rpsi_scalar);
1350 Mdouble psi = CG_integral_1D(P1, P2, P1_P2_normal, P1_P2_distance, rpsi_scalar);
1351 rpsi =
Vec3D(P1.
X * psi - (P1.
X - P2.
X) * rpsi_scalar, P1.
Y * psi - (P1.
Y - P2.
Y) * rpsi_scalar, Position.Z * psi);
1356 Mdouble psi = getCGInverseVolume();
1363 return Vec3D(0, 0, CG_integral_gradient_1D(P1, P2, P1_P2_normal, P1_P2_distance));
1367 template<StatType T> std::ostream& operator<<(std::ostream& os, const StatisticsPoint<T> &stat)
1370 if (stat.mirrorParticle < 0)
1373 os << stat.getPosition() <<
" " << stat.write() << std::endl;
1378 template<> std::ostream& operator<<(std::ostream& os, const StatisticsPoint<RAZ> &stat)
1381 if (stat.mirrorParticle < 0)
1382 os << stat.getPosition().getCylindricalCoordinates() <<
" " << stat.write() << std::endl;
1385 template<> std::ostream& operator<<(std::ostream& os, const StatisticsPoint<RA> &stat)
1388 if (stat.mirrorParticle < 0)
1389 os << stat.getPosition().getCylindricalCoordinates() <<
" " << stat.write() << std::endl;
1392 template<> std::ostream& operator<<(std::ostream& os, const StatisticsPoint<RZ> &stat)
1395 if (stat.mirrorParticle < 0)
1396 os << stat.getPosition().getCylindricalCoordinates() <<
" " << stat.write() << std::endl;
1399 template<> std::ostream& operator<<(std::ostream& os, const StatisticsPoint<AZ> &stat)
1402 if (stat.mirrorParticle < 0)
1403 os << stat.getPosition().getCylindricalCoordinates() <<
" " << stat.write() << std::endl;
1406 template<> std::ostream& operator<<(std::ostream& os, const StatisticsPoint<R> &stat)
1409 if (stat.mirrorParticle < 0)
1410 os << stat.getPosition().getCylindricalCoordinates() <<
" " << stat.write() << std::endl;
1413 template<> std::ostream& operator<<(std::ostream& os, const StatisticsPoint<A> &stat)
1416 if (stat.mirrorParticle < 0)
1417 os << stat.getPosition().getCylindricalCoordinates() <<
" " << stat.write() << std::endl;
1452 return P.
X * Q.
X + P.
Y * Q.
Y;
1456 return P.
X * Q.
X + P.
Z * Q.
Z;
1460 return P.
Y * Q.
Y + P.
Z * Q.
Z;
1509 return Vec3D(0, 0, 0);
1514 return Vec3D(0, 0, P.
X * Q.
Y - P.
Y * Q.
X);
1518 return Vec3D(0, P.
Z * Q.
X - P.
X * Q.
Z, 0);
1522 return Vec3D(P.
Y * Q.
Z - P.
Z * Q.
Y, 0, 0);
1525 {
return Vec3D(0,0,0);}
1527 {
return Vec3D(0,0,0);}
1529 {
return Vec3D(0,0,0);}
1531 {
return Vec3D(0,0,0);}
1536 0, 0, P.
X * Q.
YX - P.
Y * Q.
XX,
1537 0, 0, P.
X * Q.
YY - P.
Y * Q.
XY,
1538 0, 0, P.
X * Q.
YZ - P.
Y * Q.
XZ);
1543 0, P.
Z * Q.
XX - P.
X * Q.
ZX, 0,
1544 0, P.
Z * Q.
XY - P.
X * Q.
ZY, 0,
1545 0, P.
Z * Q.
XZ - P.
X * Q.
ZZ, 0);
1550 P.
Y * Q.
ZX - P.
Z * Q.
YX, 0, 0,
1551 P.
Y * Q.
ZY - P.
Z * Q.
YY, 0, 0,
1552 P.
Y * Q.
ZZ - P.
Z * Q.
YZ, 0, 0);
1556 return Matrix3D(0,0,0,0,0,0,0,0,0);
1560 return Matrix3D(0,0,0,0,0,0,0,0,0);
1564 return Matrix3D(0,0,0,0,0,0,0,0,0);
1568 return Matrix3D(0,0,0,0,0,0,0,0,0);
Vec3D crossNonAveraged(Vec3D P, Vec3D &Q)
Returns the cross product of two vectors in the coordinates that are not averaged about...
Mdouble CG_function(const Vec3D &PI)
Returns the value of the course graining function phi(P,PI)
static MatrixSymmetric3D square(const MatrixSymmetric3D &A)
Calculates the pointwise square.
Mdouble CG_invvolume
Prefactor of CG function which depends on $w.
MatrixSymmetric3D DisplacementMomentumFlux
Momentum flux from linear displacement, .
Mdouble X
the vector components
Mdouble evaluatePolynomial(Mdouble r)
see StatisticsVector::evaluatePolynomial
Matrix3D ContactCoupleStress
Mdouble Dissipation
Dissipation form collisions, .
Mdouble CG_function_1D(const Vec3D &PI)
Returns the value of the course graining function phi(P,PI) averaged along a plane.
Vec3D CG_integral_gradient(Vec3D &P1, Vec3D &P2, Vec3D &P1_P2_normal, Mdouble P1_P2_distance)
gradient of phi
Mdouble CG_function_2D(const Vec3D &PI)
returns the value of the course graining function phi(P,PI) averaged along a line ...
void firstTimeAverage(const int n)
Defines a division operator needed to time-average values (because the displacement does not have a v...
Mdouble evaluateIntegral(Mdouble n1, Mdouble n2, Mdouble t)
see StatisticsVector::evaluateIntegral
void setZero()
Sets all elements to zero.
std::ostream & operator<<(std::ostream &os, const CG S)
static Vec3D sqrt(const Vec3D &a)
Calculates the pointwise square root of a Vec3D.
void set_Gaussian_invvolume(int dim)
sets CG_invvolume if CG_type=Gaussian
Matrix3D NormalStress
Stress from normal forces, .
Mdouble getCGWidth() const
see StatisticsVector::getCGWidth
static Vec3D square(const Vec3D &a)
Calculates the pointwise square of a Vec3D.
Matrix3D matrixCrossNonAveraged(Vec3D P, Matrix3D &Q)
Returns the cross product of two vectors in the coordinates that are not averaged about...
T square(T val)
squares a number
Mdouble getLengthSquared() const
Calculates the squared length of this Vec3D: .
static Mdouble getLength(const Vec3D &a)
Calculates the length of a Vec3D: .
void set_Heaviside_invvolume()
sets CG_invvolume if CG_type=HeaviSideSphere
Vec3D CollisionalHeatFlux
Heat flux from collisions, .
std::string write_variable_names()
Outputs names of statistical variables in computer-readable format.
CG
enum used to store the type of coarse-graining function used
Mdouble Nu
Particle volume fraction, .
Vec3D NormalTraction
Traction from normal forces, .
Mdouble getCutoff()
see StatisticsVector::getCutoff
Mdouble CG_integral_2D(Vec3D &P1, Vec3D &P2, Vec3D &P1_P2_normal, Mdouble P1_P2_distance, Mdouble &rpsi_scalar)
Returns the value of the coarse graining integral averaged along a line.
Vec3D DisplacementMomentum
Momentum from linear displacement, , where , with the time intervall between outputs.
MatrixSymmetric3D Fabric
Fabric tensor, .
void setCGInverseVolume()
sets CG_invvolume
std::string print() const
Outputs statistical variables in human-readable format.
Vec3D LocalAngularMomentum
Vec3D CG_gradient(const Vec3D &P, const Mdouble phi)
gradient of phi
Vec3D EnergyFlux
Energy flux, .
Mdouble Density
Density, .
MatrixSymmetric3D Displacement
Linear displacement, .
std::string write() const
Outputs statistical variables in computer-readable format.
void set_zero()
Sets all statistical variables to zero.
void setZero()
Sets all elements to zero.
Mdouble getCutoff2()
see StatisticsVector::getCutoff2
T cubic(T val)
calculates the cube of a number
StatisticsPoint< T > & operator+=(const StatisticsPoint< T > &P)
Defines a plus operator needed to average values ( )
StatisticsPoint< T > & operator/=(const Mdouble a)
Defines a division operator needed to average values ( )
Vec3D TangentialTraction
Traction from tangential forces, .
Mdouble getCGWidthSquared() const
see StatisticsVector::getCGWidthSquared
Matrix3D LocalAngularMomentumFlux
Mdouble dotNonAveraged(const Vec3D &P, const Vec3D &Q)
Returns the dot product of two vectors in the coordinates that are not averaged about.
StatisticsPoint< T > & operator=(const StatisticsPoint< T > &P)
Defines a equal operator needed for copy constructor.
Vec3D clearAveragedDirections(Vec3D P)
Returns a vector where the averaged directions are zero.
static Matrix3D sqrt(const Matrix3D &A)
Calculates the pointwise square root.
Mdouble Potential
Elastic energy .
Mdouble CG_integral_gradient_1D(Vec3D &P1, Vec3D &P2, Vec3D &P1_P2_normal, Mdouble P1_P2_distance)
Mdouble getLength() const
Calculates the length of this Vec3D: .
This class stores statistical values for a given spatial position; to be used in combination with Sta...
MatrixSymmetric3D MomentumFlux
Momentum flux, .
Mdouble XX
all nine matrix elements
void setZero()
Sets all elements to zero.
StatisticsPoint< T > & operator-=(const StatisticsPoint< T > &P)
Defines a plus operator needed to calculate variance.
This class is used to extract statistical data from MD simulations.
Mdouble getCGInverseVolume()
returns CG_invvolume
StatisticsPoint< T > getSquared()
Squares all statistical variables; needed for variance.
double compute_Gaussian_invvolume(int dim)
computes CG_invvolume if CG_type=Gaussian
Mdouble CG_integral(Vec3D &P1, Vec3D &P2, Vec3D &P1_P2_normal, Mdouble P1_P2_distance, Vec3D &rpsi)
Returns the value of the coarse graining integral .
Implementation of a 3D matrix.
Implementation of a 3D vector (by Vitaliy).
Vec3D Momentum
Momentum, .
static MatrixSymmetric3D sqrt(const MatrixSymmetric3D &A)
Calculates the pointwise square root.
Vec3D Position
Position at which evaluation occurs.
Mdouble CG_integral_1D(Vec3D &P1, Vec3D &P2, Vec3D &P1_P2_normal, Mdouble P1_P2_distance, Mdouble &rpsi_scalar)
Returns the value of the coarse graining integral averaged along a plane.
static StatisticsVector< T > * gb
Pointer to StatisticsVector (to obtain global parameters)
Mdouble evaluatePolynomialGradient(Mdouble r)
see StatisticsVector::evaluatePolynomialGradient
void set_Polynomial_invvolume(int dim)
sets CG_invvolume if CG_type=Polynomial
static Matrix3D square(const Matrix3D &A)
Calculates the pointwise square.
std::string print_sqrt() const
Outputs root of statistical variables in human-readable format.
CG getCGShape() const
see StatisticsVector::getCGShape
Matrix3D TangentialStress
Stress from tangential forces, .
Mdouble getDistanceSquaredNonAveraged(const Vec3D &P)
returns the coarse graining distance in the coordinates that are not averaged about ...