31 real* mhd_dmhd,
int aldforce) {
42 gradB[0] = (B[0]*B_dB[1] + B[1]*B_dB[5] + B[2]*B_dB[9]) / normB;
43 gradB[1] = (B[0]*B_dB[2] + B[1]*B_dB[6] + B[2]*B_dB[10])
45 gradB[2] = (B[0]*B_dB[3] + B[1]*B_dB[7] + B[2]*B_dB[11]) / normB;
51 curlB[0] = B_dB[10] / y[0] - B_dB[7];
52 curlB[1] = B_dB[3] - B_dB[9];
53 curlB[2] = (B[1] - B_dB[2]) / y[0] + B_dB[5];
56 real alpha = mhd_dmhd[0];
57 gradalpha[0] = mhd_dmhd[2];
58 gradalpha[1] = mhd_dmhd[3];
59 gradalpha[2] = mhd_dmhd[4];
61 real gradalphacrossB[3];
65 Bstar[0] = B[0] + gradalphacrossB[0] + alpha * curlB[0]
66 + ( y[3] / charge ) * ( curlB[0] / normB
67 - gradBcrossB[0] / (normB*normB));
68 Bstar[1] = B[1] + gradalphacrossB[1] + alpha * curlB[1]
69 + ( y[3] / charge ) * ( curlB[1] / normB
70 - gradBcrossB[0] / (normB*normB));
71 Bstar[2] = B[2] + gradalphacrossB[2] + alpha * curlB[2]
72 + ( y[3] / charge ) * ( curlB[2] / normB
73 - gradBcrossB[2] / (normB*normB));
76 Estar[0] = E[0] - mhd_dmhd[7] - y[4] * gradB[0] / ( charge * gamma )
78 Estar[1] = E[1] - mhd_dmhd[8] - y[4] * gradB[1] / ( charge * gamma )
80 Estar[2] = E[2] - mhd_dmhd[9] - y[4] * gradB[2] / ( charge * gamma )
84 Bhat[0] = B[0] / normB;
85 Bhat[1] = B[1] / normB;
86 Bhat[2] = B[2] / normB;
90 real EstarcrossBhat[3];
93 ydot[0] = (y[3] * Bstar[0] / ( gamma * mass )
94 + EstarcrossBhat[0]) / BhatDotBstar;
95 ydot[1] = (y[3] * Bstar[1] / ( gamma * mass )
96 + EstarcrossBhat[1]) / (y[0]*BhatDotBstar);
97 ydot[2] = (y[3] * Bstar[2] / ( gamma * mass )
98 + EstarcrossBhat[2]) / BhatDotBstar;
99 ydot[3] = charge *
math_dot(Bstar,Estar) / BhatDotBstar;
101 ydot[5] = charge * normB / (gamma*mass);
103 real t_ald = phys_ald_force_chartime(charge, mass, normB, gamma) * aldforce;
105 ydot[3] += -t_ald * y[3] * C;
106 ydot[4] += -2 * t_ald * y[4] * (1 + C);
static DECLARE_TARGET_SIMD void step_gceom_mhd(real *ydot, real *y, real mass, real charge, real *B_dB, real *E, real *mhd_dmhd, int aldforce)
Calculate guiding center equations of motion for a single particle.