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_Extension.H>
17 #include <AMReX_GpuQualifiers.H>
18 #include <AMReX_MultiFab.H>
19 #include <AMReX_Parser.H>
20 #include <AMReX_REAL.H>
21 
22 #include <memory>
23 #include <string>
24 
25 
30 class
32 {
33 public:
34  MacroscopicProperties (); // constructor
36  void ReadParameters ();
38  void InitData ();
39 
41  amrex::MultiFab& getsigma_mf () {return (*m_sigma_mf);}
43  amrex::MultiFab& getepsilon_mf () {return (*m_eps_mf);}
45  amrex::MultiFab& getmu_mf () {return (*m_mu_mf);}
46 
50  void InitializeMacroMultiFabUsingParser (amrex::MultiFab *macro_mf,
51  amrex::ParserExecutor<3> const& macro_parser,
53  const amrex::RealBox& prob_domain_lev);
54 
69 
70 private:
71 
73  amrex::Real m_sigma = 0.0;
75  amrex::Real m_epsilon = PhysConst::ep0;
77  amrex::Real m_mu = PhysConst::mu0;
79  std::unique_ptr<amrex::MultiFab> m_sigma_mf;
81  std::unique_ptr<amrex::MultiFab> m_eps_mf;
83  std::unique_ptr<amrex::MultiFab> m_mu_mf;
84 
86  std::string m_sigma_s = "constant";
88  std::string m_epsilon_s = "constant";
90  std::string m_mu_s = "constant";
91 
93  std::string m_str_sigma_function;
95  std::string m_str_mu_function;
97  std::unique_ptr<amrex::Parser> m_sigma_parser;
98  std::unique_ptr<amrex::Parser> m_epsilon_parser;
99  std::unique_ptr<amrex::Parser> m_mu_parser;
100 
101 };
102 
112 
114  static amrex::Real alpha (amrex::Real const sigma,
115  amrex::Real const epsilon,
116  amrex::Real dt) {
117  using namespace amrex;
118  const amrex::Real fac1 = 0.5_rt * sigma * dt / epsilon;
119  const amrex::Real alpha = (1._rt - fac1)/(1._rt + fac1);
120  return alpha;
121  }
122 
124  static amrex::Real beta (amrex::Real const sigma,
125  amrex::Real const epsilon,
126  amrex::Real dt) {
127  using namespace amrex;
128  const amrex::Real fac1 = 0.5_rt * sigma * dt / epsilon;
129  const amrex::Real beta = dt / ( epsilon * (1._rt + fac1) );
130  return beta;
131  }
132 
133 };
134 
144 
146  static amrex::Real alpha (amrex::Real const sigma,
147  amrex::Real const epsilon,
148  amrex::Real dt) {
149  using namespace amrex;
150  const amrex::Real fac1 = sigma * dt / epsilon;
151  const amrex::Real alpha = (1._rt)/(1._rt + fac1);
152  return alpha;
153  }
154 
156  static amrex::Real beta (amrex::Real const sigma,
157  amrex::Real const epsilon,
158  amrex::Real dt) {
159  using namespace amrex;
160  const amrex::Real fac1 = sigma * dt / epsilon;
161  const amrex::Real beta = dt / ( epsilon * (1._rt + fac1) );
162  return beta;
163  }
164 
165 };
166 
167 #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:32
amrex::GpuArray< int, 3 > epsilon_IndexType
Definition: MacroscopicProperties.H:58
amrex::GpuArray< int, 3 > mu_IndexType
Definition: MacroscopicProperties.H:60
amrex::GpuArray< int, 3 > sigma_IndexType
Definition: MacroscopicProperties.H:56
std::string m_str_epsilon_function
Definition: MacroscopicProperties.H:94
std::string m_str_mu_function
Definition: MacroscopicProperties.H:95
amrex::MultiFab & getepsilon_mf()
Definition: MacroscopicProperties.H:43
std::unique_ptr< amrex::Parser > m_mu_parser
Definition: MacroscopicProperties.H:99
amrex::MultiFab & getsigma_mf()
Definition: MacroscopicProperties.H:41
std::unique_ptr< amrex::MultiFab > m_mu_mf
Definition: MacroscopicProperties.H:83
std::string m_str_sigma_function
Definition: MacroscopicProperties.H:93
std::unique_ptr< amrex::Parser > m_epsilon_parser
Definition: MacroscopicProperties.H:98
amrex::GpuArray< int, 3 > Ex_IndexType
Definition: MacroscopicProperties.H:62
amrex::GpuArray< int, 3 > Ey_IndexType
Definition: MacroscopicProperties.H:64
amrex::MultiFab & getmu_mf()
Definition: MacroscopicProperties.H:45
amrex::GpuArray< int, 3 > Ez_IndexType
Definition: MacroscopicProperties.H:66
amrex::GpuArray< int, 3 > macro_cr_ratio
Definition: MacroscopicProperties.H:68
std::unique_ptr< amrex::Parser > m_sigma_parser
Definition: MacroscopicProperties.H:97
std::unique_ptr< amrex::MultiFab > m_sigma_mf
Definition: MacroscopicProperties.H:79
std::unique_ptr< amrex::MultiFab > m_eps_mf
Definition: MacroscopicProperties.H:81
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 co-efficients for the BackwardEuler scheme ...
Definition: MacroscopicProperties.H:143
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:156
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:146
This struct contains only static functions to compute the co-efficients for the Lax-Wendroff scheme o...
Definition: MacroscopicProperties.H:111
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:124
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:114