aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/FiniteDifferenceSolver
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver')
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H7
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.H6
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.cpp47
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/HybridPICSolveE.cpp18
4 files changed, 27 insertions, 51 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
index aec2bd330..7bb23874c 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/FiniteDifferenceSolver.H
@@ -145,6 +145,7 @@ class FiniteDifferenceSolver
* \param[in] edge_lengths length of edges along embedded boundaries
* \param[in] lev level number for the calculation
* \param[in] hybrid_pic_model instance of the hybrid-PIC model
+ * \param[in] include_resistivity_term boolean flag for whether to include resistivity
*/
void HybridPICSolveE ( std::array< std::unique_ptr<amrex::MultiFab>, 3>& Efield,
std::array< std::unique_ptr<amrex::MultiFab>, 3>& Jfield,
@@ -154,7 +155,7 @@ class FiniteDifferenceSolver
std::unique_ptr<amrex::MultiFab> const& Pefield,
std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
int lev, HybridPICModel const* hybrid_pic_model,
- DtType a_dt_type );
+ const bool include_resistivity_term );
/**
* \brief Calculation of total current using Ampere's law (without
@@ -237,7 +238,7 @@ class FiniteDifferenceSolver
std::unique_ptr<amrex::MultiFab> const& Pefield,
std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
int lev, HybridPICModel const* hybrid_pic_model,
- DtType a_dt_type );
+ const bool include_resistivity_term );
template<typename T_Algo>
void CalculateCurrentAmpereCylindrical (
@@ -341,7 +342,7 @@ class FiniteDifferenceSolver
std::unique_ptr<amrex::MultiFab> const& Pefield,
std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
int lev, HybridPICModel const* hybrid_pic_model,
- DtType a_dt_type );
+ const bool include_resistivity_term );
template<typename T_Algo>
void CalculateCurrentAmpereCartesian (
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.H b/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.H
index 0793b3b27..f24726929 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.H
@@ -75,21 +75,21 @@ public:
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3>> const& Bfield,
amrex::Vector<std::unique_ptr<amrex::MultiFab>> const& rhofield,
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3>> const& edge_lengths,
- DtType dt_type);
+ const bool include_resistivity_term);
void HybridPICSolveE (
std::array< std::unique_ptr<amrex::MultiFab>, 3>& Efield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Jfield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
std::unique_ptr<amrex::MultiFab> const& rhofield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& edge_lengths,
- const int lev, DtType dt_type);
+ const int lev, const bool include_resistivity_term);
void HybridPICSolveE (
std::array< std::unique_ptr<amrex::MultiFab>, 3>& Efield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Jfield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
std::unique_ptr<amrex::MultiFab> const& rhofield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& edge_lengths,
- const int lev, PatchType patch_type, DtType dt_type);
+ const int lev, PatchType patch_type, const bool include_resistivity_term);
/**
* \brief
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.cpp b/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.cpp
index 4d8d9bde4..34ad2c16d 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/HybridPICModel/HybridPICModel.cpp
@@ -221,14 +221,14 @@ void HybridPICModel::HybridPICSolveE (
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3>> const& Bfield,
amrex::Vector<std::unique_ptr<amrex::MultiFab>> const& rhofield,
amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3>> const& edge_lengths,
- DtType a_dt_type)
+ const bool include_resistivity_term)
{
auto& warpx = WarpX::GetInstance();
for (int lev = 0; lev <= warpx.finestLevel(); ++lev)
{
HybridPICSolveE(
Efield[lev], Jfield[lev], Bfield[lev], rhofield[lev],
- edge_lengths[lev], lev, a_dt_type
+ edge_lengths[lev], lev, include_resistivity_term
);
}
}
@@ -239,13 +239,13 @@ void HybridPICModel::HybridPICSolveE (
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
std::unique_ptr<amrex::MultiFab> const& rhofield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& edge_lengths,
- const int lev, DtType a_dt_type)
+ const int lev, const bool include_resistivity_term)
{
WARPX_PROFILE("WarpX::HybridPICSolveE()");
HybridPICSolveE(
Efield, Jfield, Bfield, rhofield, edge_lengths, lev,
- PatchType::fine, a_dt_type
+ PatchType::fine, include_resistivity_term
);
if (lev > 0)
{
@@ -260,41 +260,17 @@ void HybridPICModel::HybridPICSolveE (
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& Bfield,
std::unique_ptr<amrex::MultiFab> const& rhofield,
std::array< std::unique_ptr<amrex::MultiFab>, 3> const& edge_lengths,
- const int lev, PatchType patch_type, DtType a_dt_type)
+ const int lev, PatchType patch_type,
+ const bool include_resistivity_term)
{
auto& warpx = WarpX::GetInstance();
// Solve E field in regular cells
- // The first half step uses t=n quantities, the second half t=n+1/2
- // quantities and the full step uses t=n+1 quantities
- if (a_dt_type == DtType::FirstHalf) {
- warpx.get_pointer_fdtd_solver_fp(lev)->HybridPICSolveE(
- Efield, current_fp_ampere[lev],
- current_fp_temp[lev], Bfield,
- rho_fp_temp[lev],
- electron_pressure_fp[lev],
- edge_lengths, lev, this, a_dt_type
- );
- }
- else if (a_dt_type == DtType::SecondHalf) {
- warpx.get_pointer_fdtd_solver_fp(lev)->HybridPICSolveE(
- Efield, current_fp_ampere[lev],
- Jfield, Bfield,
- rho_fp_temp[lev],
- electron_pressure_fp[lev],
- edge_lengths, lev, this, a_dt_type
- );
- }
- else {
- warpx.get_pointer_fdtd_solver_fp(lev)->HybridPICSolveE(
- Efield, current_fp_ampere[lev],
- current_fp_temp[lev], Bfield,
- rhofield,
- electron_pressure_fp[lev],
- edge_lengths, lev, this, a_dt_type
- );
- }
-
+ warpx.get_pointer_fdtd_solver_fp(lev)->HybridPICSolveE(
+ Efield, current_fp_ampere[lev], Jfield, Bfield, rhofield,
+ electron_pressure_fp[lev],
+ edge_lengths, lev, this, include_resistivity_term
+ );
warpx.ApplyEfieldBoundary(lev, patch_type);
}
@@ -327,7 +303,6 @@ void HybridPICModel::CalculateElectronPressure(const int lev, DtType a_dt_type)
electron_pressure_fp[lev]->FillBoundary(warpx.Geom(lev).periodicity());
}
-
void HybridPICModel::FillElectronPressureMF (
std::unique_ptr<amrex::MultiFab> const& Pe_field,
amrex::MultiFab* const& rho_field )
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/HybridPICSolveE.cpp b/Source/FieldSolver/FiniteDifferenceSolver/HybridPICSolveE.cpp
index 8d74adb45..f4f236e61 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/HybridPICSolveE.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/HybridPICSolveE.cpp
@@ -196,7 +196,7 @@ void FiniteDifferenceSolver::HybridPICSolveE (
std::unique_ptr<amrex::MultiFab> const& Pefield,
std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
int lev, HybridPICModel const* hybrid_model,
- DtType a_dt_type )
+ const bool include_resistivity_term )
{
// Select algorithm (The choice of algorithm is a runtime option,
// but we compile code for each algorithm, using templates)
@@ -205,14 +205,14 @@ void FiniteDifferenceSolver::HybridPICSolveE (
HybridPICSolveECylindrical <CylindricalYeeAlgorithm> (
Efield, Jfield, Jifield, Bfield, rhofield, Pefield,
- edge_lengths, lev, hybrid_model, a_dt_type
+ edge_lengths, lev, hybrid_model, include_resistivity_term
);
#else
HybridPICSolveECartesian <CartesianYeeAlgorithm> (
Efield, Jfield, Jifield, Bfield, rhofield, Pefield,
- edge_lengths, lev, hybrid_model, a_dt_type
+ edge_lengths, lev, hybrid_model, include_resistivity_term
);
#endif
@@ -233,14 +233,14 @@ void FiniteDifferenceSolver::HybridPICSolveECylindrical (
std::unique_ptr<amrex::MultiFab> const& Pefield,
std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
int lev, HybridPICModel const* hybrid_model,
- DtType a_dt_type )
+ const bool include_resistivity_term )
{
#ifndef AMREX_USE_EB
amrex::ignore_unused(edge_lengths);
#endif
amrex::ignore_unused(
Efield, Jfield, Jifield, Bfield, rhofield, Pefield, edge_lengths,
- lev, hybrid_model, a_dt_type
+ lev, hybrid_model, include_resistivity_term
);
amrex::Abort(Utils::TextMsg::Err(
"currently hybrid E-solve does not work for RZ"));
@@ -258,7 +258,7 @@ void FiniteDifferenceSolver::HybridPICSolveECartesian (
std::unique_ptr<amrex::MultiFab> const& Pefield,
std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
int lev, HybridPICModel const* hybrid_model,
- DtType a_dt_type )
+ const bool include_resistivity_term )
{
#ifndef AMREX_USE_EB
amrex::ignore_unused(edge_lengths);
@@ -435,7 +435,7 @@ void FiniteDifferenceSolver::HybridPICSolveECartesian (
Ex(i, j, k) = (enE_x - grad_Pe) / rho_val;
// Add resistivity only if E field value is used to update B
- if (a_dt_type != DtType::Full) Ex(i, j, k) += eta(rho_val) * Jx(i, j, k);
+ if (include_resistivity_term) Ex(i, j, k) += eta(rho_val) * Jx(i, j, k);
},
// Ey calculation
@@ -465,7 +465,7 @@ void FiniteDifferenceSolver::HybridPICSolveECartesian (
Ey(i, j, k) = (enE_y - grad_Pe) / rho_val;
// Add resistivity only if E field value is used to update B
- if (a_dt_type != DtType::Full) Ey(i, j, k) += eta(rho_val) * Jy(i, j, k);
+ if (include_resistivity_term) Ey(i, j, k) += eta(rho_val) * Jy(i, j, k);
},
// Ez calculation
@@ -490,7 +490,7 @@ void FiniteDifferenceSolver::HybridPICSolveECartesian (
Ez(i, j, k) = (enE_z - grad_Pe) / rho_val;
// Add resistivity only if E field value is used to update B
- if (a_dt_type != DtType::Full) Ez(i, j, k) += eta(rho_val) * Jz(i, j, k);
+ if (include_resistivity_term) Ez(i, j, k) += eta(rho_val) * Jz(i, j, k);
}
);