aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp')
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp144
1 files changed, 53 insertions, 91 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp
index cfa3479da..7166eb99d 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp
+++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.cpp
@@ -22,6 +22,49 @@
using namespace amrex;
+GetSigmaMacroparameter::GetSigmaMacroparameter () noexcept
+{
+ auto& warpx = WarpX::GetInstance();
+ auto& macroscopic_properties = warpx.GetMacroscopicProperties();
+ if (macroscopic_properties.m_sigma_s == "constant") {
+ m_type = ConstantValue;
+ m_value = macroscopic_properties.m_sigma;
+ }
+ else if (macroscopic_properties.m_sigma_s == "parse_sigma_function") {
+ m_type = ParserFunction;
+ m_parser = macroscopic_properties.m_sigma_parser->compile<3>();
+ }
+}
+
+GetMuMacroparameter::GetMuMacroparameter () noexcept
+{
+ auto& warpx = WarpX::GetInstance();
+ auto& macroscopic_properties = warpx.GetMacroscopicProperties();
+ if (macroscopic_properties.m_mu_s == "constant") {
+ m_type = ConstantValue;
+ m_value = macroscopic_properties.m_mu;
+ }
+ else if (macroscopic_properties.m_mu_s == "parse_mu_function") {
+ m_type = ParserFunction;
+ m_parser = macroscopic_properties.m_mu_parser->compile<3>();
+ }
+}
+
+GetEpsilonMacroparameter::GetEpsilonMacroparameter () noexcept
+{
+ auto& warpx = WarpX::GetInstance();
+ auto& macroscopic_properties = warpx.GetMacroscopicProperties();
+ if (macroscopic_properties.m_epsilon_s == "constant") {
+ m_type = ConstantValue;
+ m_value = macroscopic_properties.m_epsilon;
+ }
+ else if (macroscopic_properties.m_epsilon_s == "parse_epsilon_function") {
+ m_type = ParserFunction;
+ m_parser = macroscopic_properties.m_epsilon_parser->compile<3>();
+ }
+}
+
+
MacroscopicProperties::MacroscopicProperties ()
{
ReadParameters();
@@ -105,112 +148,31 @@ MacroscopicProperties::InitData ()
amrex::Print() << "we are in init data of macro \n";
auto & warpx = WarpX::GetInstance();
- // Get BoxArray and DistributionMap of warpx instant.
- int lev = 0;
- BoxArray ba = warpx.boxArray(lev);
- DistributionMapping dmap = warpx.DistributionMap(lev);
- const amrex::IntVect ng = warpx.getngE();
- // Define material property multifabs using ba and dmap from WarpX instance
- // sigma is cell-centered MultiFab
- m_sigma_mf = std::make_unique<MultiFab>(ba, dmap, 1, ng);
- // epsilon is cell-centered MultiFab
- m_eps_mf = std::make_unique<MultiFab>(ba, dmap, 1, ng);
- // mu is cell-centered MultiFab
- m_mu_mf = std::make_unique<MultiFab>(ba, dmap, 1, ng);
- // Initialize sigma
- if (m_sigma_s == "constant") {
-
- m_sigma_mf->setVal(m_sigma);
-
- } else if (m_sigma_s == "parse_sigma_function") {
-
- InitializeMacroMultiFabUsingParser(m_sigma_mf.get(), m_sigma_parser->compile<3>(), lev);
- }
- // Initialize epsilon
- if (m_epsilon_s == "constant") {
-
- m_eps_mf->setVal(m_epsilon);
-
- } else if (m_epsilon_s == "parse_epsilon_function") {
-
- InitializeMacroMultiFabUsingParser(m_eps_mf.get(), m_epsilon_parser->compile<3>(), lev);
-
- }
- // Initialize mu
- if (m_mu_s == "constant") {
-
- m_mu_mf->setVal(m_mu);
-
- } else if (m_mu_s == "parse_mu_function") {
-
- InitializeMacroMultiFabUsingParser(m_mu_mf.get(), m_mu_parser->compile<3>(), lev);
-
- }
-
-
- IntVect sigma_stag = m_sigma_mf->ixType().toIntVect();
- IntVect epsilon_stag = m_eps_mf->ixType().toIntVect();
- IntVect mu_stag = m_mu_mf->ixType().toIntVect();
IntVect Ex_stag = warpx.getEfield_fp(0,0).ixType().toIntVect();
IntVect Ey_stag = warpx.getEfield_fp(0,1).ixType().toIntVect();
IntVect Ez_stag = warpx.getEfield_fp(0,2).ixType().toIntVect();
+ IntVect Bx_stag = warpx.getBfield_fp(0,0).ixType().toIntVect();
+ IntVect By_stag = warpx.getBfield_fp(0,1).ixType().toIntVect();
+ IntVect Bz_stag = warpx.getBfield_fp(0,2).ixType().toIntVect();
+
for ( int idim = 0; idim < AMREX_SPACEDIM; ++idim) {
- sigma_IndexType[idim] = sigma_stag[idim];
- epsilon_IndexType[idim] = epsilon_stag[idim];
- mu_IndexType[idim] = mu_stag[idim];
Ex_IndexType[idim] = Ex_stag[idim];
Ey_IndexType[idim] = Ey_stag[idim];
Ez_IndexType[idim] = Ez_stag[idim];
- macro_cr_ratio[idim] = 1;
+ Bx_IndexType[idim] = Bx_stag[idim];
+ By_IndexType[idim] = By_stag[idim];
+ Bz_IndexType[idim] = Bz_stag[idim];
}
#if (AMREX_SPACEDIM==2)
- sigma_IndexType[2] = 0;
- epsilon_IndexType[2] = 0;
- mu_IndexType[2] = 0;
Ex_IndexType[2] = 0;
Ey_IndexType[2] = 0;
Ez_IndexType[2] = 0;
- macro_cr_ratio[2] = 1;
+ Bx_IndexType[2] = 0;
+ By_IndexType[2] = 0;
+ Bz_IndexType[2] = 0;
#endif
}
-void
-MacroscopicProperties::InitializeMacroMultiFabUsingParser (
- MultiFab *macro_mf, ParserExecutor<3> const& macro_parser,
- int lev)
-{
- auto& warpx = WarpX::GetInstance();
- const auto dx_lev = warpx.Geom(lev).CellSizeArray();
- const RealBox& real_box = warpx.Geom(lev).ProbDomain();
- IntVect iv = macro_mf->ixType().toIntVect();
- for ( MFIter mfi(*macro_mf, TilingIfNotGPU()); mfi.isValid(); ++mfi ) {
- // Initialize ghost cells in addition to valid cells
-
- const Box& tb = mfi.tilebox(iv, macro_mf->nGrowVect());
- auto const& macro_fab = macro_mf->array(mfi);
- amrex::ParallelFor (tb,
- [=] AMREX_GPU_DEVICE (int i, int j, int k) {
- // Shift x, y, z position based on index type
- Real fac_x = (1._rt - iv[0]) * dx_lev[0] * 0.5_rt;
- Real x = i * dx_lev[0] + real_box.lo(0) + fac_x;
-#if (AMREX_SPACEDIM==2)
- amrex::Real y = 0._rt;
- Real fac_z = (1._rt - iv[1]) * dx_lev[1] * 0.5_rt;
- Real z = j * dx_lev[1] + real_box.lo(1) + fac_z;
-#else
- Real fac_y = (1._rt - iv[1]) * dx_lev[1] * 0.5_rt;
- Real y = j * dx_lev[1] + real_box.lo(1) + fac_y;
- Real fac_z = (1._rt - iv[2]) * dx_lev[2] * 0.5_rt;
- Real z = k * dx_lev[2] + real_box.lo(2) + fac_z;
-#endif
- // initialize the macroparameter
- macro_fab(i,j,k) = macro_parser(x,y,z);
- });
-
- }
-
-
-}