1 #ifndef BASIC_PHYSICS_HPP
2 #define BASIC_PHYSICS_HPP
16 KOKKOS_INLINE_FUNCTION
double maxwellian_dist(
double den,
double temp,
double energy){
17 return den/(temp*sqrt(temp))*exp(-min(
EXP_LIM,energy/temp));
25 return 1.0/sqrt(temp)*exp(-min(
EXP_LIM,energy/temp)) / (1.0-exp(-maxe));
33 return 1.0/temp*exp(-min(
EXP_LIM,energy/temp)) / (1.0-exp(-maxe));
44 KOKKOS_INLINE_FUNCTION
double exp_ad(
double x){
45 #ifdef USE_LINEAR_ADIABATIC_RESPONSE
46 constexpr
bool use_linear =
true;
48 constexpr
bool use_linear =
false;
51 #ifdef LINEAR_ADIABATIC_RESPONSE_BD
52 constexpr
double lim=LINEAR_ADIABATIC_RESPONSE_BD;
54 constexpr
double lim=0.7;
56 if constexpr(use_linear){
57 double tmp = exp(-abs(x)+lim)*(1-lim);
58 double tmp2 = (x<-lim ? tmp : 1.0+x);
59 return (x>lim ? 2.0-tmp : tmp2);
66 KOKKOS_INLINE_FUNCTION
double gyro_radius(
double B,
double mu,
double c2_2m){
67 return sqrt(mu/(B*c2_2m));
76 return sqrt((temp_ev*
EV_2_J)/mass);
86 return v*sqrt(mass/(temp_ev*
EV_2_J));
97 KOKKOS_INLINE_FUNCTION
double normalized_v_para(
double c_m,
double mass,
double B,
double temp_ev,
double rho){
98 return c_m*rho*B*sqrt(mass/(temp_ev*
EV_2_J));
108 return sqrt(mu*2.0*B/(temp_ev*
EV_2_J));
112 KOKKOS_INLINE_FUNCTION
void rho_mu_to_en_pitch(
double B,
double c_m,
double c2_2m,
double mass,
double rho,
double mu,
double& en,
double& pitch){
113 en = mu*B + c2_2m*(rho*rho*B*B);
114 double v_para = c_m*rho*B;
115 double v_perp2 = 2.0*mu*B/mass;
116 pitch=v_para/sqrt(v_para*v_para + v_perp2);
120 KOKKOS_INLINE_FUNCTION
void en_pitch_to_rho_mu(
double B,
double c_m,
double mass,
double en,
double pitch,
double& rho,
double& mu){
121 rho = pitch*sqrt(2.0*en/mass)/(B*c_m);
122 mu = max(0.0,(1.0-pitch*pitch)*en/B);
125 KOKKOS_INLINE_FUNCTION
void rz_2_psitheta(
double dpsidr,
double dpsidz,
double x_r,
double x_z,
double& x_rad,
double& x_theta){
126 x_rad = dpsidr * x_r + dpsidz * x_z;
127 x_theta = -dpsidz * x_r + dpsidr * x_z;
131 for (
int i_simd = 0; i_simd<SIMD_SIZE; i_simd++){
132 double x_rad, x_theta;
133 rz_2_psitheta(dpsidr[i_simd], dpsidz[i_simd], x.
r[i_simd], x.
z[i_simd], x_rad, x_theta);
135 x.
z[i_simd] = x_theta;
139 KOKKOS_INLINE_FUNCTION
void psitheta_2_rz(
double dpsidr,
double dpsidz,
double x_rad,
double x_theta,
double& x_r,
double& x_z){
140 x_r = dpsidr * x_rad - dpsidz * x_theta;
141 x_z = dpsidz * x_rad + dpsidr * x_theta;
KOKKOS_INLINE_FUNCTION double normalized_v_para(double c_m, double mass, double B, double temp_ev, double rho)
Definition: basic_physics.hpp:97
constexpr double EV_2_J
Conversion rate ev to J.
Definition: constants.hpp:5
KOKKOS_INLINE_FUNCTION double thermal_velocity(double mass, double temp_ev)
Definition: basic_physics.hpp:75
KOKKOS_INLINE_FUNCTION void en_pitch_to_rho_mu(double B, double c_m, double mass, double en, double pitch, double &rho, double &mu)
Definition: basic_physics.hpp:120
KOKKOS_INLINE_FUNCTION void rz_2_psitheta(double dpsidr, double dpsidz, double x_r, double x_z, double &x_rad, double &x_theta)
Definition: basic_physics.hpp:125
KOKKOS_INLINE_FUNCTION double maxwellian_dist(double den, double temp, double energy)
Definition: basic_physics.hpp:16
KOKKOS_INLINE_FUNCTION double kinetic_energy(double mass, double v)
Definition: basic_physics.hpp:9
KOKKOS_INLINE_FUNCTION void rho_mu_to_en_pitch(double B, double c_m, double c2_2m, double mass, double rho, double mu, double &en, double &pitch)
Definition: basic_physics.hpp:112
Simd< double > z
Definition: simd.hpp:141
KOKKOS_INLINE_FUNCTION double maxwellian_dist_1d_v(double temp, double energy, double maxe)
Definition: basic_physics.hpp:24
KOKKOS_INLINE_FUNCTION double normalize_to_vth(double mass, double temp_ev, double v)
Definition: basic_physics.hpp:85
KOKKOS_INLINE_FUNCTION void psitheta_2_rz(double dpsidr, double dpsidz, double x_rad, double x_theta, double &x_r, double &x_z)
Definition: basic_physics.hpp:139
KOKKOS_INLINE_FUNCTION double normalized_sqrt_mu(double B, double temp_ev, double mu)
Definition: basic_physics.hpp:107
Simd< double > r
Definition: simd.hpp:140
KOKKOS_INLINE_FUNCTION double maxwellian_dist_2d_v(double temp, double energy, double maxe)
Definition: basic_physics.hpp:32
KOKKOS_INLINE_FUNCTION double exp_ad(double x)
Definition: basic_physics.hpp:44
const double EXP_LIM
Limit of exponents.
Definition: constants.hpp:14