diff options
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver')
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); } ); |