11 using namespace Utilities;
29 double r_plus, r2_plus, r3_plus, r_minus, r2_minus, r3_minus, np_Pp, nm_Pm,
30 Aij, AijAij, n_plus[3], n_minus[3], np_Sp[3], nm_Sm[3];
32 r2_plus = (
x - par_b) * (
x - par_b) +
y *
y + z * z;
33 r2_minus = (
x + par_b) * (
x + par_b) +
y *
y + z * z;
34 r_plus = sqrt (r2_plus);
35 r_minus = sqrt (r2_minus);
36 r3_plus = r_plus * r2_plus;
37 r3_minus = r_minus * r2_minus;
39 n_plus[0] = (
x - par_b) / r_plus;
40 n_minus[0] = (
x + par_b) / r_minus;
41 n_plus[1] =
y / r_plus;
42 n_minus[1] =
y / r_minus;
43 n_plus[2] = z / r_plus;
44 n_minus[2] = z / r_minus;
49 for (i = 0; i < 3; i++)
51 np_Pp += n_plus[i] * par_P_plus[i];
52 nm_Pm += n_minus[i] * par_P_minus[i];
55 np_Sp[0] = n_plus[1] * par_S_plus[2] - n_plus[2] * par_S_plus[1];
56 np_Sp[1] = n_plus[2] * par_S_plus[0] - n_plus[0] * par_S_plus[2];
57 np_Sp[2] = n_plus[0] * par_S_plus[1] - n_plus[1] * par_S_plus[0];
58 nm_Sm[0] = n_minus[1] * par_S_minus[2] - n_minus[2] * par_S_minus[1];
59 nm_Sm[1] = n_minus[2] * par_S_minus[0] - n_minus[0] * par_S_minus[2];
60 nm_Sm[2] = n_minus[0] * par_S_minus[1] - n_minus[1] * par_S_minus[0];
62 for (i = 0; i < 3; i++)
64 for (
j = 0;
j < 3;
j++)
67 + 1.5 * (par_P_plus[i] * n_plus[
j] + par_P_plus[
j] * n_plus[i]
68 + np_Pp * n_plus[i] * n_plus[
j]) / r2_plus
69 + 1.5 * (par_P_minus[i] * n_minus[
j] + par_P_minus[
j] * n_minus[i]
70 + nm_Pm * n_minus[i] * n_minus[
j]) / r2_minus
71 - 3.0 * (np_Sp[i] * n_plus[
j] + np_Sp[
j] * n_plus[i]) / r3_plus
72 - 3.0 * (nm_Sm[i] * n_minus[
j] + nm_Sm[
j] * n_minus[i]) / r3_minus;
74 Aij -= +1.5 * (np_Pp / r2_plus + nm_Pm / r2_minus);
87 double r_plus, r2_plus, r3_plus, r_minus, r2_minus, r3_minus, np_Pp, nm_Pm,
88 n_plus[3], n_minus[3], np_Sp[3], nm_Sm[3];
90 const double TP4 = TP_epsilon*TP_epsilon*TP_epsilon*TP_epsilon;
91 r2_plus = (
x - par_b) * (
x - par_b) +
y *
y + z * z;
92 r2_minus = (
x + par_b) * (
x + par_b) +
y *
y + z * z;
93 r2_plus = sqrt (r2_plus*r2_plus + TP4);
94 r2_minus = sqrt (r2_minus*r2_minus + TP4);
96 const double TPT2 = TP_Tiny*TP_Tiny;
101 r_plus = sqrt (r2_plus);
102 r_minus = sqrt (r2_minus);
103 r3_plus = r_plus * r2_plus;
104 r3_minus = r_minus * r2_minus;
106 n_plus[0] = (
x - par_b) / r_plus;
107 n_minus[0] = (
x + par_b) / r_minus;
108 n_plus[1] =
y / r_plus;
109 n_minus[1] =
y / r_minus;
110 n_plus[2] = z / r_plus;
111 n_minus[2] = z / r_minus;
116 for (i = 0; i < 3; i++)
118 np_Pp += n_plus[i] * par_P_plus[i];
119 nm_Pm += n_minus[i] * par_P_minus[i];
122 np_Sp[0] = n_plus[1] * par_S_plus[2] - n_plus[2] * par_S_plus[1];
123 np_Sp[1] = n_plus[2] * par_S_plus[0] - n_plus[0] * par_S_plus[2];
124 np_Sp[2] = n_plus[0] * par_S_plus[1] - n_plus[1] * par_S_plus[0];
125 nm_Sm[0] = n_minus[1] * par_S_minus[2] - n_minus[2] * par_S_minus[1];
126 nm_Sm[1] = n_minus[2] * par_S_minus[0] - n_minus[0] * par_S_minus[2];
127 nm_Sm[2] = n_minus[0] * par_S_minus[1] - n_minus[1] * par_S_minus[0];
128 for (i = 0; i < 3; i++)
130 for (
j = 0;
j < 3;
j++)
133 + 1.5 * (par_P_plus[i] * n_plus[
j] + par_P_plus[
j] * n_plus[i]
134 + np_Pp * n_plus[i] * n_plus[
j]) / r2_plus
135 + 1.5 * (par_P_minus[i] * n_minus[
j] + par_P_minus[
j] * n_minus[i]
136 + nm_Pm * n_minus[i] * n_minus[
j]) / r2_minus
137 - 3.0 * (np_Sp[i] * n_plus[
j] + np_Sp[
j] * n_plus[i]) / r3_plus
138 - 3.0 * (nm_Sm[i] * n_minus[
j] + nm_Sm[
j] * n_minus[i]) / r3_minus;
142 Aij[0][0] -= +1.5 * (np_Pp / r2_plus + nm_Pm / r2_minus);
143 Aij[1][1] -= +1.5 * (np_Pp / r2_plus + nm_Pm / r2_minus);
144 Aij[2][2] -= +1.5 * (np_Pp / r2_plus + nm_Pm / r2_minus);
154 double A,
double B,
double X,
double R,
155 double x,
double r,
double phi,
156 double y,
double z,
derivs U,
double *values)
159 double r_plus, r_minus, psi, psi2, psi4, psi7;
162 r_plus = sqrt ((
x - par_b) * (
x - par_b) +
y *
y + z * z);
163 r_minus = sqrt ((
x + par_b) * (
x + par_b) +
y *
y + z * z);
166 1. + 0.5 * par_m_plus / r_plus + 0.5 * par_m_minus / r_minus + U.
d0[0];
169 psi7 = psi * psi2 * psi4;
172 U.
d11[0] + U.
d22[0] + U.
d33[0] + 0.125 * BY_KKofxyz (
x,
y, z) / psi7 +
173 2.0 * Pi / psi2/psi * rho_adm;
182 double x,
double r,
double phi,
186 double r_plus, r_minus, psi, psi2, psi4, psi8;
188 r_plus = sqrt ((
x - par_b) * (
x - par_b) +
y *
y + z * z);
189 r_minus = sqrt ((
x + par_b) * (
x + par_b) +
y *
y + z * z);
192 1. + 0.5 * par_m_plus / r_plus + 0.5 * par_m_minus / r_minus + U.
d0[0];
197 values[0] = dU.
d11[0] + dU.
d22[0] + dU.
d33[0]
198 - 0.875 * BY_KKofxyz (
x,
y, z) / psi8 * dU.
d0[0];
double BY_KKofxyz(double x, double y, double z)
void NonLinEquations(double rho_adm, double A, double B, double X, double R, double x, double r, double phi, double y, double z, derivs U, double *values)
void BY_Aijofxyz(double x, double y, double z, double Aij[3][3])
void LinEquations(double A, double B, double X, double R, double x, double r, double phi, double y, double z, derivs dU, derivs U, double *values)
This file contains aliases for making access to the long state vector Q as used eg.