aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/FiniteDifferenceSolver
diff options
context:
space:
mode:
authorGravatar Edoardo Zoni <59625522+EZoni@users.noreply.github.com> 2023-03-08 20:52:56 -0800
committerGravatar GitHub <noreply@github.com> 2023-03-09 04:52:56 +0000
commit03b2fe60ff49748aaff8402824ea0457eef24d5c (patch)
tree1f29cb899516a03eecc5babd9e9a65f84a8f7dd4 /Source/FieldSolver/FiniteDifferenceSolver
parent92013ab8403512a0d42ee3ba49f474b72d1ed88f (diff)
downloadWarpX-03b2fe60ff49748aaff8402824ea0457eef24d5c.tar.gz
WarpX-03b2fe60ff49748aaff8402824ea0457eef24d5c.tar.zst
WarpX-03b2fe60ff49748aaff8402824ea0457eef24d5c.zip
New user input for grid type (collocated, staggered, hybrid) (#3683)
* Introduce `warpx.grid_type` parameter * Replace `or` with `||` * Update examples with new user input syntax * Fix `if` condition * Improve error message * Fix `if` condition * Fix bugs * Fix warning * Fix RZ * Debugging * Fix RZ * Fix bug * Clean up * More changes: - set default algo parameters with hybrid grid - all hybrid input parameters under warpx name * Set default field gathering algo for hybrid grids * Update documentation
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver')
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp4
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp2
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H6
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp6
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp2
11 files changed, 16 insertions, 16 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp b/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp
index 9ac32a19d..2725e4310 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/ComputeDivE.cpp
@@ -51,7 +51,7 @@ void FiniteDifferenceSolver::ComputeDivE (
ComputeDivECylindrical <CylindricalYeeAlgorithm> ( Efield, divEfield );
#else
- if (m_do_nodal) {
+ if (m_grid_type == GridType::Collocated) {
ComputeDivECartesian <CartesianNodalAlgorithm> ( Efield, divEfield );
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
index 0e6515a73..b53f0780c 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveB.cpp
@@ -70,11 +70,11 @@ void FiniteDifferenceSolver::EvolveB (
ignore_unused(Gfield, face_areas);
EvolveBCylindrical <CylindricalYeeAlgorithm> ( Bfield, Efield, lev, dt );
#else
- if(m_do_nodal or m_fdtd_algo != ElectromagneticSolverAlgo::ECT){
+ if(m_grid_type == GridType::Collocated || m_fdtd_algo != ElectromagneticSolverAlgo::ECT){
amrex::ignore_unused(face_areas);
}
- if (m_do_nodal) {
+ if (m_grid_type == GridType::Collocated) {
EvolveBCartesian <CartesianNodalAlgorithm> ( Bfield, Efield, Gfield, lev, dt );
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp
index 2907e3fdf..ba0d7c9ce 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveBPML.cpp
@@ -53,7 +53,7 @@ void FiniteDifferenceSolver::EvolveBPML (
amrex::Abort(Utils::TextMsg::Err(
"PML are not implemented in cylindrical geometry."));
#else
- if (m_do_nodal) {
+ if (m_grid_type == GridType::Collocated) {
EvolveBPMLCartesian <CartesianNodalAlgorithm> (Bfield, Efield, dt, dive_cleaning);
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp
index fe6181aca..d37e5f744 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveE.cpp
@@ -70,7 +70,7 @@ void FiniteDifferenceSolver::EvolveE (
ignore_unused(edge_lengths);
EvolveECylindrical <CylindricalYeeAlgorithm> ( Efield, Bfield, Jfield, Ffield, lev, dt );
#else
- if (m_do_nodal) {
+ if (m_grid_type == GridType::Collocated) {
EvolveECartesian <CartesianNodalAlgorithm> ( Efield, Bfield, Jfield, edge_lengths, Ffield, lev, dt );
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp
index 1dadd8e9f..d3475b0c9 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveEPML.cpp
@@ -59,7 +59,7 @@ void FiniteDifferenceSolver::EvolveEPML (
amrex::Abort(Utils::TextMsg::Err(
"PML are not implemented in cylindrical geometry."));
#else
- if (m_do_nodal) {
+ if (m_grid_type == GridType::Collocated) {
EvolveEPMLCartesian <CartesianNodalAlgorithm> (
Efield, Bfield, Jfield, edge_lengths, Ffield, sigba, dt, pml_has_particles );
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp
index 27d7fb4e5..171967b81 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveF.cpp
@@ -58,7 +58,7 @@ void FiniteDifferenceSolver::EvolveF (
EvolveFCylindrical <CylindricalYeeAlgorithm> ( Ffield, Efield, rhofield, rhocomp, dt );
#else
- if (m_do_nodal) {
+ if (m_grid_type == GridType::Collocated) {
EvolveFCartesian <CartesianNodalAlgorithm> ( Ffield, Efield, rhofield, rhocomp, dt );
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp
index 6a94d205a..1cb5201cd 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveFPML.cpp
@@ -51,7 +51,7 @@ void FiniteDifferenceSolver::EvolveFPML (
amrex::Abort(Utils::TextMsg::Err(
"PML are not implemented in cylindrical geometry."));
#else
- if (m_do_nodal) {
+ if (m_grid_type == GridType::Collocated) {
EvolveFPMLCartesian <CartesianNodalAlgorithm> ( Ffield, Efield, dt );
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp b/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp
index 0c971d577..c31929258 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/EvolveG.cpp
@@ -47,7 +47,7 @@ void FiniteDifferenceSolver::EvolveG (
amrex::ignore_unused(Gfield, Bfield, dt);
#else
// Select algorithm
- if (m_do_nodal)
+ if (m_grid_type == GridType::Collocated)
{
EvolveGCartesian<CartesianNodalAlgorithm>(Gfield, Bfield, dt);
}
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
index ed6f918b3..aecf4ed9e 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
@@ -39,12 +39,12 @@ class FiniteDifferenceSolver
*
* \param fdtd_algo Identifies the chosen algorithm, as defined in WarpXAlgorithmSelection.H
* \param cell_size Cell size along each dimension, for the chosen refinement level
- * \param do_nodal Whether the solver is applied to a nodal or staggered grid
+ * \param grid_type Whether the solver is applied to a collocated or staggered grid
*/
FiniteDifferenceSolver (
int const fdtd_algo,
std::array<amrex::Real,3> cell_size,
- bool const do_nodal );
+ short const grid_type );
void EvolveB ( std::array< std::unique_ptr<amrex::MultiFab>, 3 >& Bfield,
std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& Efield,
@@ -132,7 +132,7 @@ class FiniteDifferenceSolver
private:
int m_fdtd_algo;
- bool m_do_nodal;
+ short m_grid_type;
#ifdef WARPX_DIM_RZ
amrex::Real m_dr, m_rmin;
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
index e8529ef15..a65d86b8f 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.cpp
@@ -30,11 +30,11 @@
FiniteDifferenceSolver::FiniteDifferenceSolver (
int const fdtd_algo,
std::array<amrex::Real,3> cell_size,
- bool do_nodal ) {
+ short grid_type) {
// Register the type of finite-difference algorithm
m_fdtd_algo = fdtd_algo;
- m_do_nodal = do_nodal;
+ m_grid_type = grid_type;
// return if not FDTD
if (fdtd_algo == ElectromagneticSolverAlgo::None || fdtd_algo == ElectromagneticSolverAlgo::PSATD)
@@ -62,7 +62,7 @@ FiniteDifferenceSolver::FiniteDifferenceSolver (
"FiniteDifferenceSolver: Unknown algorithm"));
}
#else
- if (do_nodal) {
+ if (grid_type == GridType::Collocated) {
CartesianNodalAlgorithm::InitializeStencilCoefficients( cell_size,
m_h_stencil_coefs_x, m_h_stencil_coefs_y, m_h_stencil_coefs_z );
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp
index 22a222726..487ab0652 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicEvolveE.cpp
@@ -51,7 +51,7 @@ void FiniteDifferenceSolver::MacroscopicEvolveE (
"currently macro E-push does not work for RZ"));
#else
WARPX_ALWAYS_ASSERT_WITH_MESSAGE(
- !m_do_nodal, "macro E-push does not work for nodal");
+ m_grid_type != GridType::Collocated, "Macroscopic E field solver does not work on collocated grids");
if (m_fdtd_algo == ElectromagneticSolverAlgo::Yee) {