aboutsummaryrefslogtreecommitdiff
path: root/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H
diff options
context:
space:
mode:
Diffstat (limited to 'Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H')
-rw-r--r--Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H111
1 files changed, 31 insertions, 80 deletions
diff --git a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H
index 040fe2a67..b8e1db2a6 100644
--- a/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H
+++ b/Source/FieldSolver/FiniteDifferenceSolver/MacroscopicProperties/MacroscopicProperties.H
@@ -23,80 +23,6 @@
#include <string>
-enum MacroparameterInitType { ConstantValue, ParserFunction};
-
-/**
- * \brief Functor to return macropameter, either constant value, m_value, or
- * spatially varying scalar value computed using the parser function, m_parser.
- */
-
-struct GetMacroparameter
-{
- /* Type of initialization for macroparameter, constant or parser function */
- MacroparameterInitType m_type;
- /* Constant value of the macroparameter. */
- amrex::Real m_value;
- /* Parser funtion of the spatially varying macroparameter*/
- amrex::ParserExecutor<3> m_parser;
- /**
- * \brief Functor call. This method returns the value of the macroparameter,
- * or property of the medium needed for the macroscopic Maxwell solver,
- * at a given location (x,y,z) in the domain.
- *
- * @param[in] x x-coordinate of a given location
- * @param[in] y y-coordinate of a given location
- * @param[in] z z-coordinate of a given location
- * @return value of the macroparameter at (x,y,z).
- * m_value if init-type is constant
- * m_parser(x,y,z) if init-type is parser function
- */
- AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
- amrex::Real operator () (amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
- {
- using namespace amrex::literals;
- if (m_type == ConstantValue)
- {
- return m_value;
- }
- else if (m_type == ParserFunction)
- {
- return m_parser(x,y,z);
- }
- else
- {
- amrex::Abort("macroparameter init type not valid.");
- return 0.;
- }
- return 0.;
- }
-};
-
-/**
- * \brief Functor for conductivity, sigma, of the medium.
- */
-struct GetSigmaMacroparameter : GetMacroparameter
-{
- /** Constructor to store the type of intialization, m_type, and the value or parser function. */
- GetSigmaMacroparameter () noexcept;
-};
-
-/**
- * \brief Functor for permeability, mu, of the medium.
- */
-struct GetMuMacroparameter : GetMacroparameter
-{
- /** Constructor to store the type of intialization, m_type, and the value or parser function. */
- GetMuMacroparameter () noexcept;
-};
-
-/**
- * \brief Functor for permittivity, epsilon, of the medium.
- */
-struct GetEpsilonMacroparameter : GetMacroparameter
-{
- /** Constructor to store the type of intialization, m_type, and the value or parser function. */
- GetEpsilonMacroparameter () noexcept;
-};
/**
* \brief This class contains the macroscopic properties of the medium needed to
* evaluate macroscopic Maxwell equation.
@@ -111,18 +37,36 @@ public:
/** Initialize multifabs storing macroscopic multifabs */
void InitData ();
+ /** return MultiFab, sigma (conductivity) of the medium. */
+ amrex::MultiFab& getsigma_mf () {return (*m_sigma_mf);}
+ /** return MultiFab, epsilon (permittivity) of the medium. */
+ amrex::MultiFab& getepsilon_mf () {return (*m_eps_mf);}
+ /** return MultiFab, mu (permeability) of the medium. */
+ amrex::MultiFab& getmu_mf () {return (*m_mu_mf);}
+
+ /** Initializes the Multifabs storing macroscopic properties
+ * with user-defined functions(x,y,z).
+ */
+ void InitializeMacroMultiFabUsingParser (amrex::MultiFab *macro_mf,
+ amrex::ParserExecutor<3> const& macro_parser,
+ const int lev);
+
+ /** Gpu Vector with index type of the conductivity multifab */
+ amrex::GpuArray<int, 3> sigma_IndexType;
+ /** Gpu Vector with index type of the permittivity multifab */
+ amrex::GpuArray<int, 3> epsilon_IndexType;
+ /** Gpu Vector with index type of the permeability multifab */
+ amrex::GpuArray<int, 3> mu_IndexType;
/** Gpu Vector with index type of the Ex multifab */
amrex::GpuArray<int, 3> Ex_IndexType;
/** Gpu Vector with index type of the Ey multifab */
amrex::GpuArray<int, 3> Ey_IndexType;
/** Gpu Vector with index type of the Ez multifab */
amrex::GpuArray<int, 3> Ez_IndexType;
- /** Gpu Vector with index type of the Bx multifab */
- amrex::GpuArray<int, 3> Bx_IndexType;
- /** Gpu Vector with index type of the By multifab */
- amrex::GpuArray<int, 3> By_IndexType;
- /** Gpu Vector with index type of the Bz multifab */
- amrex::GpuArray<int, 3> Bz_IndexType;
+ /** Gpu Vector with index type of coarsening ratio with default value (1,1,1) */
+ amrex::GpuArray<int, 3> macro_cr_ratio;
+
+private:
/** Conductivity, sigma, of the medium */
amrex::Real m_sigma = 0.0;
@@ -130,6 +74,13 @@ public:
amrex::Real m_epsilon = PhysConst::ep0;
/** Permeability, mu, of the medium */
amrex::Real m_mu = PhysConst::mu0;
+ /** Multifab for m_sigma */
+ std::unique_ptr<amrex::MultiFab> m_sigma_mf;
+ /** Multifab for m_epsilon */
+ std::unique_ptr<amrex::MultiFab> m_eps_mf;
+ /** Multifab for m_mu */
+ std::unique_ptr<amrex::MultiFab> m_mu_mf;
+
/** Stores initialization type for conductivity : constant or parser */
std::string m_sigma_s = "constant";
/** Stores initialization type for permittivity : constant or parser */