48 if (! (
I->
a[0] >
I->
a [1] &&
I->
a[1] ==
I->
a[2] &&
I->
a[2] > 0.0))
_errorr(
"Semiaxes are not OK.");
56 J[2] = this->
I2(a1, a3, lambda, intpoint);
57 J[1] = this->
I1(a1, a3, J[2], lambda, intpoint);
58 J[3] = this->
I3(J[2]);
61 J[6] = this->
I13(a1, a3, J[1], J[3]);
62 J[5] = this->
I12(J[6]);
63 J[4] = this->
I11(a1, a3, J[6], lambda, intpoint);
65 double I33 = this->
I33(a1, a3, J[6], lambda, intpoint);
68 J[8] = this->
I22(I33);
69 J[9] = this->
I23(I33);
80 if (intpoint)
_errorr(
"derivatives are 0, this function should not be called");
91 const int NUM_ELLIP_INT = 13;
97 for (
int i = 0; i < 3; i++)
101 point->
dJi[3*i] = (J_pert[
_Xp_][i+1] - J_pert[
_Xm_][i+1]) / (2.0 * ndiff);
102 point->
dJi[3*i+1] = (J_pert[
_Yp_][i+1] - J_pert[
_Ym_][i+1]) / (2.0 * ndiff);
103 point->
dJi[3*i+2] = (J_pert[
_Zp_][i+1] - J_pert[
_Zm_][i+1]) / (2.0 * ndiff);
107 point->
ddJi[9*i] = (J_pert[
_Xp_][i+1] - 2.0 * J_pert[
_CENTER_][i+1] + J_pert[
_Xm_][i+1]) / (ndiff * ndiff);
111 point->
ddJi[9*i+3] = point->
ddJi[9*i+1];
112 point->
ddJi[9*i+4] = (J_pert[
_Yp_][i+1] - 2.0 * J_pert[
_CENTER_][i+1] + J_pert[
_Ym_][i+1]) / (ndiff * ndiff);
115 point->
ddJi[9*i+6] = point->
ddJi[9*i+2];
116 point->
ddJi[9*i+7] = point->
ddJi[9*i+5];
117 point->
ddJi[9*i+8] = (J_pert[
_Zp_][i+1] - 2.0 * J_pert[
_CENTER_][i+1] + J_pert[
_Zm_][i+1]) / (ndiff * ndiff);
121 for (
int i = 0; i < 9; i++)
125 point->
dJij[i] = (J_pert[
_Xp_][i+4] - J_pert[
_Xm_][i+4]) / (2.0 * ndiff);
126 point->
dJij[i+9] = (J_pert[
_Yp_][i+4] - J_pert[
_Ym_][i+4]) / (2.0 * ndiff);
127 point->
dJij[i+18] = (J_pert[
_Zp_][i+4] - J_pert[
_Zm_][i+4]) / (2.0 * ndiff);
131 point->
ddJij[9*i] = (J_pert[
_Xp_][i+4] - 2.0 * J_pert[
_CENTER_][i+4] + J_pert[
_Xm_][i+4]) / (ndiff * ndiff);
136 point->
ddJij[9*i+4] = (J_pert[
_Yp_][i+4] - 2.0 * J_pert[
_CENTER_][i+4] + J_pert[
_Ym_][i+4]) / (ndiff * ndiff);
141 point->
ddJij[9*i+8] = (J_pert[
_Zp_][i+4] - 2.0 * J_pert[
_CENTER_][i+4] + J_pert[
_Zm_][i+4]) / (ndiff * ndiff);
155 double a1 = a[0], a3 = a[2];
158 return( mult * ellInt.
ellf( Theta, k ) / sqrt(
SQR( a1 ) -
SQR( a3 ) ) );
173 double b =
get_b(a1, a3, lambda);
174 double d =
get_d(a1, a3, lambda);
186 return 2.0 *
PI * a1 *
SQR(a3) / pow(
SQR(a1) -
SQR(a3), 3.0 / 2.0) * (a1 / a3 * sqrt(
SQR(a1 / a3) - 1.0) -
acosh(a1 / a3));
191 double b =
get_b(a1, a3, lambda);
192 double d =
get_d(a1, a3, lambda);
193 return 2.0 *
PI * a1 *
SQR(a3) / pow(
SQR(a1) -
SQR(a3), 3.0 / 2.0) * (b * d -
acosh(b));
217 return 1.0 / 3.0 * (
_4PI_ * a1 *
SQR(a3) / (
SQR(a1) + lambda) / delta_lambda - 2.0 * I13);
234 return (I1 - I3)/(
SQR(a3) -
SQR(a1));
259 return PI /
SQR(a3) - I13 / 4.0;
265 return 1.0 / 4.0 * (
_4PI_ * a1 *
SQR(a3) / (
SQR(a3) + lambda) / delta_lambda - I13);
272 return sqrt((
SQR(a1) + lambda) / (
SQR(a3) + lambda));
278 return sqrt((
SQR(a1) -
SQR(a3)) / (
SQR(a3) + lambda));
284 return sqrt((
SQR(a1) + lambda) * (
SQR(a3) + lambda) * (
SQR(a3) + lambda));
298 return (-b + sqrt(
SQR(b) - 4.0 * c)) / 2.0;
void giveDerivativesOfEllipticIntegrals(Point *point, bool intpoint)
Function gives the values of Ferers-Dyson's elliptic integral derivatives of the inclusion this->I...
double loc_x[3]
Local coordinates of a point.
double get_b(double a1, double a3, double lambda)
Class legendreIntegrals provides functions calculating values of elliptical integrals.
const InclusionRecord3D * I
static double ellf(double phi, double ak)
Function calculating the Legendre's integral of the first kind - numerical recepies.
double I1(double a1, double a3, double I13, double lambda, bool intpoint)
double I11(double a1, double a3, double I13, double lambda, bool intpoint)
The header file of usefull macros.
double I2(double a1, double a3, double lambda, bool intpoint)
double I33(double a1, double a3, double I13, double lambda, bool intpoint)
void getPerturbatedLambdas(double *lambdas, const double loc_x[3])
Helper function.
Collection of the functions of basic manipulations, some of them can be used instead of their counter...
double ddJij[81]
Second derivatives of elliptic integral Iij.
Single Point data structure - contribution from Single inclusion.
double acosh(double x)
Inverse hyperbolic cosine.
double ndiff_1
derivative step for the first derivations
Class inclusion contains and handles all inclusion data.
void giveEllipticIntegrals(double J[13], double lambda, bool intpoint)
Function gives the values of Ferers-Dyson's elliptic integrals of the inclusion this->I.
Class eshelbySoluEllipticIntegralsProlateSpheroid.
double eI(double a[3], double k, double Theta, double mult)
double dJi[9]
First derivatives of elliptic integral Ii.
double * a
Inclusion semiaxes' dimensions in global arrangement.
double ddJi[27]
Second derivatives of elliptic integral Ii.
double I13(double a1, double a3, double I1, double I3)
double dJij[27]
First derivatives of elliptic integral Iij.
double get_d(double a1, double a3, double lambda)
double get_delta_lambda(double a1, double a3, double lambda)
double getLambda(const double a[3], double x1, double x2, double x3)
Returns lambda for a given point (x1, x2, x3)