8 #ifndef WARPX_FINITE_DIFFERENCE_ALGORITHM_CYLINDRICAL_YEE_H_
9 #define WARPX_FINITE_DIFFERENCE_ALGORITHM_CYLINDRICAL_YEE_H_
33 using namespace amrex;
35 stencil_coefs_r.resize(1);
37 stencil_coefs_z.resize(1);
47 int const n_rz_azimuthal_modes ) {
48 using namespace amrex::literals;
52 std::array< amrex::Real, 6 >
const multimode_coeffs = {{ 0.2105_rt, 1.0_rt, 3.5234_rt, 8.5104_rt, 15.5059_rt, 24.5037_rt }};
53 const amrex::Real multimode_alpha = (n_rz_azimuthal_modes < 7)?
54 multimode_coeffs[n_rz_azimuthal_modes-1]:
55 (n_rz_azimuthal_modes - 1._rt)*(n_rz_azimuthal_modes - 1._rt) - 0.4_rt;
56 const amrex::Real delta_t = 1._rt / ( std::sqrt(
57 (1._rt + multimode_alpha) / (
dx[0]*
dx[0])
58 + 1._rt / (
dx[1]*
dx[1])
78 amrex::Real
const r, amrex::Real
const dr,
79 amrex::Real
const *
const coefs_r,
int const n_coefs_r,
80 int const i,
int const j,
int const k,
int const comp ) {
82 using namespace amrex;
85 Real
const inv_dr = coefs_r[0];
86 return 1._rt/r * inv_dr*( (r+0.5_rt*dr)*F(
i+1,j,k,comp) - (r-0.5_rt*dr)*F(
i,j,k,comp) );
96 amrex::Real
const r, amrex::Real
const dr,
97 amrex::Real
const *
const coefs_r,
int const n_coefs_r,
98 int const i,
int const j,
int const k,
int const comp ) {
100 using namespace amrex;
103 Real
const inv_dr = coefs_r[0];
104 return 1._rt/r * inv_dr*( (r+0.5_rt*dr)*F(
i,j,k,comp) - (r-0.5_rt*dr)*F(
i-1,j,k,comp) );
112 amrex::Real
const *
const coefs_r,
int const n_coefs_r,
113 int const i,
int const j,
int const k,
int const comp ) {
115 using namespace amrex;
118 Real
const inv_dr = coefs_r[0];
119 return inv_dr*( F(
i+1,j,k,comp) - F(
i,j,k,comp) );
127 amrex::Real
const *
const coefs_r,
int const n_coefs_r,
128 int const i,
int const j,
int const k,
int const comp ) {
130 using namespace amrex;
133 Real
const inv_dr = coefs_r[0];
134 return inv_dr*( F(
i,j,k,comp) - F(
i-1,j,k,comp) );
142 amrex::Real
const *
const coefs_z,
int const n_coefs_z,
143 int const i,
int const j,
int const k,
int const comp ) {
147 amrex::Real
const inv_dz = coefs_z[0];
148 return inv_dz*( F(
i,j+1,k,comp) - F(
i,j,k,comp) );
156 amrex::Real
const *
const coefs_z,
int const n_coefs_z,
157 int const i,
int const j,
int const k,
int const comp ) {
161 amrex::Real
const inv_dz = coefs_z[0];
162 return inv_dz*( F(
i,j,k,comp) - F(
i,j-1,k,comp) );
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
#define AMREX_D_DECL(a, b, c)
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
i
Definition: check_interp_points_and_weights.py:174
cell_size
Definition: compute_domain.py:37
tuple dx
lab frame
Definition: stencil.py:429
Definition: CylindricalYeeAlgorithm.H:26
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real UpwardDz(amrex::Array4< amrex::Real > const &F, amrex::Real const *const coefs_z, int const n_coefs_z, int const i, int const j, int const k, int const comp)
Definition: CylindricalYeeAlgorithm.H:140
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real UpwardDr(amrex::Array4< amrex::Real > const &F, amrex::Real const *const coefs_r, int const n_coefs_r, int const i, int const j, int const k, int const comp)
Definition: CylindricalYeeAlgorithm.H:110
static amrex::IntVect GetMaxGuardCell()
Returns maximum number of guard cells required by the field-solve.
Definition: CylindricalYeeAlgorithm.H:66
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real DownwardDr(amrex::Array4< amrex::Real > const &F, amrex::Real const *const coefs_r, int const n_coefs_r, int const i, int const j, int const k, int const comp)
Definition: CylindricalYeeAlgorithm.H:125
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real DownwardDrr_over_r(amrex::Array4< amrex::Real > const &F, amrex::Real const r, amrex::Real const dr, amrex::Real const *const coefs_r, int const n_coefs_r, int const i, int const j, int const k, int const comp)
Definition: CylindricalYeeAlgorithm.H:94
static amrex::Real ComputeMaxDt(amrex::Real const *const dx, int const n_rz_azimuthal_modes)
Definition: CylindricalYeeAlgorithm.H:46
static void InitializeStencilCoefficients(std::array< amrex::Real, 3 > &cell_size, amrex::Vector< amrex::Real > &stencil_coefs_r, amrex::Vector< amrex::Real > &stencil_coefs_z)
Definition: CylindricalYeeAlgorithm.H:28
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real DownwardDz(amrex::Array4< amrex::Real > const &F, amrex::Real const *const coefs_z, int const n_coefs_z, int const i, int const j, int const k, int const comp)
Definition: CylindricalYeeAlgorithm.H:154
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real UpwardDrr_over_r(amrex::Array4< amrex::Real > const &F, amrex::Real const r, amrex::Real const dr, amrex::Real const *const coefs_r, int const n_coefs_r, int const i, int const j, int const k, int const comp)
Definition: CylindricalYeeAlgorithm.H:76