9 #include <gsl/gsl_complex.h>
10 #include <gsl/gsl_complex_math.h>
14 using namespace Utilities;
28 double At = 0.5 * (A + 1), A_X, A_XX, B_R, B_RR;
32 *R = Pih + 2 * atan (B);
36 B_R = 0.5 * (1 + B * B);
39 for (ivar = 0; ivar < nvar; ivar++)
41 U.
d11[ivar] = A_X * A_X * U.
d11[ivar] + A_XX * U.
d1[ivar];
42 U.
d12[ivar] = A_X * B_R * U.
d12[ivar];
43 U.
d13[ivar] = A_X * U.
d13[ivar];
44 U.
d22[ivar] = B_R * B_R * U.
d22[ivar] + B_RR * U.
d2[ivar];
45 U.
d23[ivar] = B_R * U.
d23[ivar];
46 U.
d1[ivar] = A_X * U.
d1[ivar];
47 U.
d2[ivar] = B_R * U.
d2[ivar];
63 double C_c2, U_cb, U_CB;
64 gsl_complex C, C_c, C_cc,
c, c_C, c_CC, U_c, U_cc, U_C, U_CC;
67 C = gsl_complex_rect (
X, R);
69 c = gsl_complex_mul_real (gsl_complex_cosh (C), par_b);
70 c_C = gsl_complex_mul_real (gsl_complex_sinh (C), par_b);
73 C_c = gsl_complex_inverse (c_C);
74 C_cc = gsl_complex_negative (gsl_complex_mul (gsl_complex_mul (C_c, C_c), gsl_complex_mul (C_c, c_CC)));
75 C_c2 = gsl_complex_abs2 (C_c);
77 for (ivar = 0; ivar < nvar; ivar++)
81 U_C = gsl_complex_rect (0.5 * U.
d13[ivar], -0.5 * U.
d23[ivar]);
82 U_c = gsl_complex_mul (U_C, C_c);
83 U.
d13[ivar] = 2. * GSL_REAL(U_c);
84 U.
d23[ivar] = -2. * GSL_IMAG(U_c);
88 U_C = gsl_complex_rect (0.5 * U.
d1[ivar], -0.5 * U.
d2[ivar]);
89 U_c = gsl_complex_mul (U_C, C_c);
90 U.
d1[ivar] = 2. * GSL_REAL(U_c);
91 U.
d2[ivar] = -2. * GSL_IMAG(U_c);
95 U_CC = gsl_complex_rect (0.25 * (U.
d11[ivar] - U.
d22[ivar]), -0.5 * U.
d12[ivar]);
96 U_CB = 0.25 * (U.
d11[ivar] + U.
d22[ivar]);
100 U_cc = gsl_complex_add (gsl_complex_mul (C_cc, U_C), gsl_complex_mul (gsl_complex_mul (C_c, C_c), U_CC));
105 U.
d11[ivar] = 2 * (U_cb + GSL_REAL(U_cc));
106 U.
d22[ivar] = 2 * (U_cb - GSL_REAL(U_cc));
107 U.
d12[ivar] = -2 * GSL_IMAG(U_cc);
117 double *
y,
double *z,
derivs U)
129 sin2_phi = sin_phi * sin_phi,
130 cos2_phi = cos_phi * cos_phi,
131 sin_2phi = 2 * sin_phi * cos_phi,
132 cos_2phi = cos2_phi - sin2_phi, r_inv = 1 / r, r_inv2 = r_inv * r_inv;
137 for (jvar = 0; jvar < nvar; jvar++)
139 double U_x = U.
d1[jvar], U_r = U.
d2[jvar], U_3 = U.
d3[jvar],
140 U_xx = U.
d11[jvar], U_xr = U.
d12[jvar], U_x3 = U.
d13[jvar],
141 U_rr = U.
d22[jvar], U_r3 = U.
d23[jvar], U_33 = U.
d33[jvar];
143 U.
d2[jvar] = U_r * cos_phi - U_3 * r_inv * sin_phi;
144 U.
d3[jvar] = U_r * sin_phi + U_3 * r_inv * cos_phi;
146 U.
d12[jvar] = U_xr * cos_phi - U_x3 * r_inv * sin_phi;
147 U.
d13[jvar] = U_xr * sin_phi + U_x3 * r_inv * cos_phi;
148 U.
d22[jvar] = U_rr * cos2_phi + r_inv2 * sin2_phi * (U_33 + r * U_r)
149 + sin_2phi * r_inv2 * (U_3 - r * U_r3);
150 U.
d23[jvar] = 0.5 * sin_2phi * (U_rr - r_inv * U_r - r_inv2 * U_33)
151 - cos_2phi * r_inv2 * (U_3 - r * U_r3);
152 U.
d33[jvar] = U_rr * sin2_phi + r_inv2 * cos2_phi * (U_33 + r * U_r)
153 - sin_2phi * r_inv2 * (U_3 - r * U_r3);
void AB_To_XR(int nvar, double A, double B, double *X, double *R, derivs U)
void rx3_To_xyz(int nvar, double x, double r, double phi, double *y, double *z, derivs U)
void C_To_c(int nvar, double X, double R, double *x, double *r, derivs U)
This file contains aliases for making access to the long state vector Q as used eg.