WarpX
MacroscopicProperties.H
Go to the documentation of this file.
1 /* Copyright 2020 Revathi Jambunathan
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 
8 #ifndef WARPX_MACROSCOPICPROPERTIES_H_
9 #define WARPX_MACROSCOPICPROPERTIES_H_
10 
12 
13 #include "Utils/WarpXConst.H"
14 
15 #include <AMReX_Array.H>
16 #include <AMReX_BoxArray.H>
18 #include <AMReX_Extension.H>
19 #include <AMReX_GpuQualifiers.H>
20 #include <AMReX_IntVect.H>
21 #include <AMReX_MultiFab.H>
22 #include <AMReX_Parser.H>
23 #include <AMReX_REAL.H>
24 
25 #include <memory>
26 #include <string>
27 
28 
34 {
35 public:
36  MacroscopicProperties (); // constructor
38  void ReadParameters ();
39 
51  void InitData (
52  const amrex::BoxArray& ba,
53  const amrex::DistributionMapping& dmap,
54  const amrex::IntVect& ng_EB_alloc,
55  const amrex::Geometry& geom,
56  const amrex::IntVect& Ex_stag,
57  const amrex::IntVect& Ey_stag,
58  const amrex::IntVect& Ez_stag);
59 
65  amrex::MultiFab& getmu_mf () {return (*m_mu_mf);}
66 
71  amrex::ParserExecutor<3> const& macro_parser,
73  const amrex::RealBox& prob_domain_lev);
74 
89 
90 private:
91 
93  amrex::Real m_sigma = 0.0;
95  amrex::Real m_epsilon = PhysConst::ep0;
97  amrex::Real m_mu = PhysConst::mu0;
99  std::unique_ptr<amrex::MultiFab> m_sigma_mf;
101  std::unique_ptr<amrex::MultiFab> m_eps_mf;
103  std::unique_ptr<amrex::MultiFab> m_mu_mf;
104 
106  std::string m_sigma_s = "constant";
108  std::string m_epsilon_s = "constant";
110  std::string m_mu_s = "constant";
111 
113  std::string m_str_sigma_function;
115  std::string m_str_mu_function;
117  std::unique_ptr<amrex::Parser> m_sigma_parser;
118  std::unique_ptr<amrex::Parser> m_epsilon_parser;
119  std::unique_ptr<amrex::Parser> m_mu_parser;
120 
121 };
122 
132 
134  static amrex::Real alpha (amrex::Real const sigma,
135  amrex::Real const epsilon,
136  amrex::Real dt) {
137  using namespace amrex;
138  const amrex::Real fac1 = 0.5_rt * sigma * dt / epsilon;
139  const amrex::Real alpha = (1._rt - fac1)/(1._rt + fac1);
140  return alpha;
141  }
142 
144  static amrex::Real beta (amrex::Real const sigma,
145  amrex::Real const epsilon,
146  amrex::Real dt) {
147  using namespace amrex;
148  const amrex::Real fac1 = 0.5_rt * sigma * dt / epsilon;
149  const amrex::Real beta = dt / ( epsilon * (1._rt + fac1) );
150  return beta;
151  }
152 
153 };
154 
164 
166  static amrex::Real alpha (amrex::Real const sigma,
167  amrex::Real const epsilon,
168  amrex::Real dt) {
169  using namespace amrex;
170  const amrex::Real fac1 = sigma * dt / epsilon;
171  const amrex::Real alpha = (1._rt)/(1._rt + fac1);
172  return alpha;
173  }
174 
176  static amrex::Real beta (amrex::Real const sigma,
177  amrex::Real const epsilon,
178  amrex::Real dt) {
179  using namespace amrex;
180  const amrex::Real fac1 = sigma * dt / epsilon;
181  const amrex::Real beta = dt / ( epsilon * (1._rt + fac1) );
182  return beta;
183  }
184 
185 };
186 
187 #endif // WARPX_MACROSCOPIC_PROPERTIES_H_
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
This class contains the macroscopic properties of the medium needed to evaluate macroscopic Maxwell e...
Definition: MacroscopicProperties.H:34
amrex::Real m_epsilon
Definition: MacroscopicProperties.H:95
amrex::GpuArray< int, 3 > epsilon_IndexType
Definition: MacroscopicProperties.H:78
amrex::GpuArray< int, 3 > mu_IndexType
Definition: MacroscopicProperties.H:80
std::string m_sigma_s
Definition: MacroscopicProperties.H:106
amrex::Real m_mu
Definition: MacroscopicProperties.H:97
amrex::GpuArray< int, 3 > sigma_IndexType
Definition: MacroscopicProperties.H:76
std::string m_str_epsilon_function
Definition: MacroscopicProperties.H:114
std::string m_str_mu_function
Definition: MacroscopicProperties.H:115
amrex::Real m_sigma
Definition: MacroscopicProperties.H:93
amrex::MultiFab & getepsilon_mf()
Definition: MacroscopicProperties.H:63
std::unique_ptr< amrex::Parser > m_mu_parser
Definition: MacroscopicProperties.H:119
amrex::MultiFab & getsigma_mf()
Definition: MacroscopicProperties.H:61
MacroscopicProperties()
Definition: MacroscopicProperties.cpp:28
void InitializeMacroMultiFabUsingParser(amrex::MultiFab *macro_mf, amrex::ParserExecutor< 3 > const &macro_parser, const amrex::GpuArray< amrex::Real, AMREX_SPACEDIM > &dx_lev, const amrex::RealBox &prob_domain_lev)
Definition: MacroscopicProperties.cpp:205
std::unique_ptr< amrex::MultiFab > m_mu_mf
Definition: MacroscopicProperties.H:103
std::string m_str_sigma_function
Definition: MacroscopicProperties.H:113
void ReadParameters()
Definition: MacroscopicProperties.cpp:34
std::unique_ptr< amrex::Parser > m_epsilon_parser
Definition: MacroscopicProperties.H:118
void InitData(const amrex::BoxArray &ba, const amrex::DistributionMapping &dmap, const amrex::IntVect &ng_EB_alloc, const amrex::Geometry &geom, const amrex::IntVect &Ex_stag, const amrex::IntVect &Ey_stag, const amrex::IntVect &Ez_stag)
Initialize multifabs storing macroscopic multifabs.
Definition: MacroscopicProperties.cpp:122
amrex::GpuArray< int, 3 > Ex_IndexType
Definition: MacroscopicProperties.H:82
amrex::GpuArray< int, 3 > Ey_IndexType
Definition: MacroscopicProperties.H:84
std::string m_mu_s
Definition: MacroscopicProperties.H:110
amrex::MultiFab & getmu_mf()
Definition: MacroscopicProperties.H:65
std::string m_epsilon_s
Definition: MacroscopicProperties.H:108
amrex::GpuArray< int, 3 > Ez_IndexType
Definition: MacroscopicProperties.H:86
amrex::GpuArray< int, 3 > macro_cr_ratio
Definition: MacroscopicProperties.H:88
std::unique_ptr< amrex::Parser > m_sigma_parser
Definition: MacroscopicProperties.H:117
std::unique_ptr< amrex::MultiFab > m_sigma_mf
Definition: MacroscopicProperties.H:99
std::unique_ptr< amrex::MultiFab > m_eps_mf
Definition: MacroscopicProperties.H:101
static constexpr auto ep0
vacuum permittivity: dielectric permittivity of vacuum [F/m]
Definition: constant.H:46
static constexpr auto mu0
vacuum permeability: magnetic permeability of vacuum = 4.0e-7 * pi [H/m]
Definition: constant.H:48
float dt
Definition: stencil.py:442
This struct contains only static functions to compute the coefficients for the BackwardEuler scheme o...
Definition: MacroscopicProperties.H:163
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real beta(amrex::Real const sigma, amrex::Real const epsilon, amrex::Real dt)
Definition: MacroscopicProperties.H:176
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real alpha(amrex::Real const sigma, amrex::Real const epsilon, amrex::Real dt)
Definition: MacroscopicProperties.H:166
This struct contains only static functions to compute the coefficients for the Lax-Wendroff scheme of...
Definition: MacroscopicProperties.H:131
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real beta(amrex::Real const sigma, amrex::Real const epsilon, amrex::Real dt)
Definition: MacroscopicProperties.H:144
AMREX_GPU_HOST_DEVICE static AMREX_FORCE_INLINE amrex::Real alpha(amrex::Real const sigma, amrex::Real const epsilon, amrex::Real dt)
Definition: MacroscopicProperties.H:134