/* Copyright 2020 Remi Lehe * * This file is part of WarpX. * * License: BSD-3-Clause-LBNL */ #ifndef WARPX_FINITE_DIFFERENCE_ALGORITHM_CARTESIAN_YEE_H_ #define WARPX_FINITE_DIFFERENCE_ALGORITHM_CARTESIAN_YEE_H_ #include "FieldAccessorFunctors.H" #include "Utils/WarpXConst.H" #include #include #include #include #include #include /** * This struct contains only static functions to initialize the stencil coefficients * and to compute finite-difference derivatives for the Cartesian Yee algorithm. */ struct CartesianYeeAlgorithm { static void InitializeStencilCoefficients ( std::array& cell_size, amrex::Vector& stencil_coefs_x, amrex::Vector& stencil_coefs_y, amrex::Vector& stencil_coefs_z ) { using namespace amrex; // Store the inverse cell size along each direction in the coefficients stencil_coefs_x.resize(1); stencil_coefs_x[0] = 1._rt/cell_size[0]; stencil_coefs_y.resize(1); stencil_coefs_y[0] = 1._rt/cell_size[1]; stencil_coefs_z.resize(1); stencil_coefs_z[0] = 1._rt/cell_size[2]; } /** * Compute the maximum timestep, for which the scheme remains stable * (Courant-Friedrichs-Levy limit) */ static amrex::Real ComputeMaxDt ( amrex::Real const * const dx ) { using namespace amrex::literals; amrex::Real const delta_t = 1._rt / ( std::sqrt( AMREX_D_TERM( 1._rt / (dx[0]*dx[0]), + 1._rt / (dx[1]*dx[1]), + 1._rt / (dx[2]*dx[2]) ) ) * PhysConst::c ); return delta_t; } /** * \brief Returns maximum number of guard cells required by the field-solve */ static amrex::IntVect GetMaxGuardCell () { // The yee solver requires one guard cell in each dimension return (amrex::IntVect(AMREX_D_DECL(1,1,1))); } /** * Perform derivative along x on a cell-centered grid, from a nodal field `F`*/ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE static amrex::Real UpwardDx ( amrex::Array4 const& F, amrex::Real const * const coefs_x, int const /*n_coefs_x*/, int const i, int const j, int const k, int const ncomp=0 ) { using namespace amrex; #if (defined WARPX_DIM_1D_Z) amrex::ignore_unused(F, coefs_x, i, j, k, ncomp); return 0._rt; // 1D Cartesian: derivative along x is 0 #else amrex::Real const inv_dx = coefs_x[0]; return inv_dx*( F(i+1,j,k,ncomp) - F(i,j,k,ncomp) ); #endif } /** * Perform derivative along x on a nodal grid, from a cell-centered field `F`*/ template< typename T_Field> AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE static amrex::Real DownwardDx ( T_Field const& F, amrex::Real const * const coefs_x, int const /*n_coefs_x*/, int const i, int const j, int const k, int const ncomp=0 ) { using namespace amrex; #if (defined WARPX_DIM_1D_Z) amrex::ignore_unused(F, coefs_x, i, j, k, ncomp); return 0._rt; // 1D Cartesian: derivative along x is 0 #else amrex::Real const inv_dx = coefs_x[0]; return inv_dx*( F(i,j,k,ncomp) - F(i-1,j,k,ncomp) ); #endif } /** * Perform derivative along y on a cell-centered grid, from a nodal field `F`*/ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE static amrex::Real UpwardDy ( amrex::Array4 const& F, amrex::Real const * const coefs_y, int const n_coefs_y, int const i, int const j, int const k, int const ncomp=0 ) { using namespace amrex; #if defined WARPX_DIM_3D Real const inv_dy = coefs_y[0]; amrex::ignore_unused(n_coefs_y); return inv_dy*( F(i,j+1,k,ncomp) - F(i,j,k,ncomp) ); #elif (defined WARPX_DIM_XZ || WARPX_DIM_1D_Z) amrex::ignore_unused(F, coefs_y, n_coefs_y, i, j, k, ncomp); return 0._rt; // 1D and 2D Cartesian: derivative along y is 0 #else amrex::ignore_unused(F, coefs_y, n_coefs_y, i, j, k, ncomp); #endif } /** * Perform derivative along y on a nodal grid, from a cell-centered field `F`*/ template< typename T_Field> AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE static amrex::Real DownwardDy ( T_Field const& F, amrex::Real const * const coefs_y, int const n_coefs_y, int const i, int const j, int const k, int const ncomp=0 ) { using namespace amrex; #if defined WARPX_DIM_3D Real const inv_dy = coefs_y[0]; amrex::ignore_unused(n_coefs_y); return inv_dy*( F(i,j,k,ncomp) - F(i,j-1,k,ncomp) ); #elif (defined WARPX_DIM_XZ || WARPX_DIM_1D_Z) amrex::ignore_unused(F, coefs_y, n_coefs_y, i, j, k, ncomp); return 0._rt; // 1D and 2D Cartesian: derivative along y is 0 #else amrex::ignore_unused(F, coefs_y, n_coefs_y, i, j, k, ncomp); #endif } /** * Perform derivative along z on a cell-centered grid, from a nodal field `F`*/ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE static amrex::Real UpwardDz ( amrex::Array4 const& F, amrex::Real const * const coefs_z, int const /*n_coefs_z*/, int const i, int const j, int const k, int const ncomp=0 ) { using namespace amrex; Real const inv_dz = coefs_z[0]; #if defined WARPX_DIM_3D return inv_dz*( F(i,j,k+1,ncomp) - F(i,j,k,ncomp) ); #elif (defined WARPX_DIM_XZ) return inv_dz*( F(i,j+1,k,ncomp) - F(i,j,k,ncomp) ); #elif (defined WARPX_DIM_1D_Z) return inv_dz*( F(i+1,j,k,ncomp) - F(i,j,k,ncomp) ); #endif } /** * Perform derivative along z on a nodal grid, from a cell-centered field `F`*/ template< typename T_Field> AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE static amrex::Real DownwardDz ( T_Field const& F, amrex::Real const * const coefs_z, int const /*n_coefs_z*/, int const i, int const j, int const k, int const ncomp=0 ) { using namespace amrex; Real const inv_dz = coefs_z[0]; #if defined WARPX_DIM_3D return inv_dz*( F(i,j,k,ncomp) - F(i,j,k-1,ncomp) ); #elif (defined WARPX_DIM_XZ) return inv_dz*( F(i,j,k,ncomp) - F(i,j-1,k,ncomp) ); #elif (defined WARPX_DIM_1D_Z) return inv_dz*( F(i,j,k,ncomp) - F(i-1,j,k,ncomp) ); #endif } }; #endif // WARPX_FINITE_DIFFERENCE_ALGORITHM_CARTESIAN_YEE_H_ t/csr Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2025-03-31fix: update `vite` to latest version (#13526)Gravatar Junseong Park 15-101/+118
2025-03-31[ci] formatGravatar Emanuele Stoppa 3-4/+2
2025-03-31fix(i18n): return value from `preferredLocale` (#13524)Gravatar Emanuele Stoppa 5-15/+51
2025-03-31chore(tailwind): delete integration (#13511)Gravatar Florian Lefebvre 16-1083/+1
2025-03-31fix(deps): update all non-major dependencies (#13521)Gravatar renovate[bot] 14-163/+163
2025-03-31[ci] formatGravatar Matt Kane 3-4/+3
2025-03-31feat(cloudflare): add KV session storage support (#13514)Gravatar Matt Kane 19-487/+490
2025-03-31fix(deps): update astro client runtimes (#13522)Gravatar renovate[bot] 4-6/+7
2025-03-27fix(deps): update astro dependencies (#13498)Gravatar renovate[bot] 47-412/+427
2025-03-27[ci] formatGravatar Emanuele Stoppa 3-8/+7
2025-03-27refactor(actions): use `Omit` to avoid leaking types to shared context (#13429)Gravatar Emanuele Stoppa 5-11/+41
2025-03-26[ci] release (#13504)astro@5.5.5@astrojs/vue@5.0.8@astrojs/tailwind@6.0.2@astrojs/svelte@7.0.8@astrojs/studio@0.1.5@astrojs/solid-js@5.0.6@astrojs/react@4.2.2@astrojs/preact@4.0.7@astrojs/netlify@6.2.4@astrojs/mdx@4.2.2@astrojs/markdoc@0.13.2@astrojs/db@0.14.9@astrojs/cloudflare@12.3.1@astrojs/alpinejs@0.4.4Gravatar Houston (Bot) 56-132/+197
2025-03-26[ci] formatGravatar Florian Lefebvre 2-2/+2
2025-03-26fix(astro): dynamically import actions (#13510)Gravatar Florian Lefebvre 12-51/+96
2025-03-26[ci] formatGravatar Matt Kane 2-2/+2
2025-03-26fix: cache raw cookie value and decode when getting (#13485)Gravatar Matt Kane 3-17/+37
2025-03-25fix: update vite (#13505)Gravatar Emanuele Stoppa 16-104/+123
2025-03-24[ci] formatGravatar Emanuele Stoppa 1-1/+1
2025-03-24fix(app): call renderer when routes don't match (#13483)Gravatar Emanuele Stoppa 4-1/+30
2025-03-21[ci] release (#13460)astro@5.5.4@astrojs/vercel@8.1.3@astrojs/tailwind@6.0.1@astrojs/svelte@7.0.7@astrojs/preact@4.0.6@astrojs/cloudflare@12.3.0Gravatar Houston (Bot) 45-118/+119
2025-03-21fix: better error handling on Stackblitz (#13484)Gravatar Matt Kane 2-0/+12
2025-03-21Repair server islands to work with client router (#13481)Gravatar Martin Trapp 2-6/+11
2025-03-21fix: generate correct external redirects (#13480)Gravatar Matt Kane 3-4/+21
2025-03-21fix(deps): update all non-major dependencies (#13440)Gravatar renovate[bot] 24-435/+436
2025-03-21[ci] formatGravatar Florian Lefebvre 2-2/+2
2025-03-21feat(cloudflare): global env (#13444)Gravatar Florian Lefebvre 6-47/+130
2025-03-21fix(deps): update astro client runtimes (#13474)Gravatar renovate[bot] 7-345/+348
2025-03-20Small change to linking style (#13472)Gravatar Chris Swithinbank 1-1/+1
2025-03-20Add deprecation notice to Tailwind integration README (#13471)Gravatar Chris Swithinbank 2-6/+11
2025-03-20[ci] formatGravatar Matt Kane 2-2/+1
2025-03-20fix(preact,svelte): empty target container before rendering `client:only` isl...Gravatar Matt Kane 5-5/+41
2025-03-20chore(renovate): group updates (#13466)Gravatar Emanuele Stoppa 1-11/+58
2025-03-19[ci] formatGravatar Matt Kane 1-3/+2
2025-03-19fix: don't attempt to move files after build with base (#13463)Gravatar Matt Kane 8-13/+66
2025-03-19[ci] formatGravatar Emanuele Stoppa 2-6/+18
2025-03-19fix(routing): don't add site to static redirects (#13447)Gravatar Emanuele Stoppa 7-10/+49
2025-03-18[ci] formatGravatar Matt Kane 2-2/+1
2025-03-18fix: set correct statusText for custom error pages (#13457)Gravatar Matt Kane 4-2/+19
2025-03-18chore(deps): update github-actions (#13459)Gravatar renovate[bot] 9-13/+13
2025-03-18chore(deps): update github-actions (#13458)Gravatar renovate[bot] 1-5/+5
2025-03-18[ci] formatGravatar Emanuele Stoppa 1-1/+3
2025-03-18chore: remove deprecated package (#13455)Gravatar Emanuele Stoppa 3-23/+16
2025-03-18fix(deps): update dependency miniflare to v4 (#13441)Gravatar renovate[bot] 2-31/+31