WarpX
MacroscopicProperties.H
Go to the documentation of this file.
1 #ifndef WARPX_MACROSCOPICPROPERTIES_H_
2 #define WARPX_MACROSCOPICPROPERTIES_H_
3 
5 
6 #include "Utils/WarpXConst.H"
7 
8 #include <AMReX_Array.H>
9 #include <AMReX_Extension.H>
10 #include <AMReX_GpuQualifiers.H>
11 #include <AMReX_MultiFab.H>
12 #include <AMReX_Parser.H>
13 #include <AMReX_REAL.H>
14 
15 #include <memory>
16 #include <string>
17 
22 class
24 {
25 public:
26  MacroscopicProperties (); // constructor
28  void ReadParameters ();
30  void InitData ();
31 
33  amrex::MultiFab& getsigma_mf () {return (*m_sigma_mf);}
35  amrex::MultiFab& getepsilon_mf () {return (*m_eps_mf);}
37  amrex::MultiFab& getmu_mf () {return (*m_mu_mf);}
38 
42  void InitializeMacroMultiFabUsingParser (amrex::MultiFab *macro_mf,
43  amrex::ParserExecutor<3> const& macro_parser,
44  int lev);
46  amrex::GpuArray<int, 3> sigma_IndexType;
48  amrex::GpuArray<int, 3> epsilon_IndexType;
50  amrex::GpuArray<int, 3> mu_IndexType;
52  amrex::GpuArray<int, 3> Ex_IndexType;
54  amrex::GpuArray<int, 3> Ey_IndexType;
56  amrex::GpuArray<int, 3> Ez_IndexType;
58  amrex::GpuArray<int, 3> macro_cr_ratio;
59 
60 private:
62  amrex::Real m_sigma = 0.0;
64  amrex::Real m_epsilon = PhysConst::ep0;
66  amrex::Real m_mu = PhysConst::mu0;
68  std::unique_ptr<amrex::MultiFab> m_sigma_mf;
70  std::unique_ptr<amrex::MultiFab> m_eps_mf;
72  std::unique_ptr<amrex::MultiFab> m_mu_mf;
74  std::string m_sigma_s = "constant";
76  std::string m_epsilon_s = "constant";
78  std::string m_mu_s = "constant";
79 
81  std::string m_str_sigma_function;
83  std::string m_str_mu_function;
85  std::unique_ptr<amrex::Parser> m_sigma_parser;
86  std::unique_ptr<amrex::Parser> m_epsilon_parser;
87  std::unique_ptr<amrex::Parser> m_mu_parser;
88 };
89 
99 
100  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
101  static amrex::Real alpha (amrex::Real const sigma,
102  amrex::Real const epsilon,
103  amrex::Real dt) {
104  using namespace amrex;
105  amrex::Real fac1 = 0.5_rt * sigma * dt / epsilon;
106  amrex::Real alpha = (1._rt - fac1)/(1._rt + fac1);
107  return alpha;
108  }
109 
110  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
111  static amrex::Real beta (amrex::Real const sigma,
112  amrex::Real const epsilon,
113  amrex::Real dt) {
114  using namespace amrex;
115  amrex::Real fac1 = 0.5_rt * sigma * dt / epsilon;
116  amrex::Real beta = dt / ( epsilon * (1._rt + fac1) );
117  return beta;
118  }
119 
120 };
121 
131 
132  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
133  static amrex::Real alpha (amrex::Real const sigma,
134  amrex::Real const epsilon,
135  amrex::Real dt) {
136  using namespace amrex;
137  amrex::Real fac1 = sigma * dt / epsilon;
138  amrex::Real alpha = (1._rt)/(1._rt + fac1);
139  return alpha;
140  }
141 
142  AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
143  static amrex::Real beta (amrex::Real const sigma,
144  amrex::Real const epsilon,
145  amrex::Real dt) {
146  using namespace amrex;
147  amrex::Real fac1 = sigma * dt / epsilon;
148  amrex::Real beta = dt / ( epsilon * (1._rt + fac1) );
149  return beta;
150  }
151 
152 };
153 
154 #endif // WARPX_MACROSCOPIC_PROPERTIES_H_
amrex::GpuArray< int, 3 > mu_IndexType
Definition: MacroscopicProperties.H:50
This class contains the macroscopic properties of the medium needed to evaluate macroscopic Maxwell e...
Definition: MacroscopicProperties.H:22
std::unique_ptr< amrex::MultiFab > m_mu_mf
Definition: MacroscopicProperties.H:72
amrex::GpuArray< int, 3 > Ex_IndexType
Definition: MacroscopicProperties.H:52
std::unique_ptr< amrex::MultiFab > m_sigma_mf
Definition: MacroscopicProperties.H:68
amrex::GpuArray< int, 3 > sigma_IndexType
Definition: MacroscopicProperties.H:46
std::unique_ptr< amrex::Parser > m_mu_parser
Definition: MacroscopicProperties.H:87
This struct contains only static functions to compute the co-efficients for the BackwardEuler scheme ...
Definition: MacroscopicProperties.H:130
std::unique_ptr< amrex::MultiFab > m_eps_mf
Definition: MacroscopicProperties.H:70
This struct contains only static functions to compute the co-efficients for the Lax-Wendroff scheme o...
Definition: MacroscopicProperties.H:98
amrex::GpuArray< int, 3 > macro_cr_ratio
Definition: MacroscopicProperties.H:58
amrex::GpuArray< int, 3 > epsilon_IndexType
Definition: MacroscopicProperties.H:48
std::unique_ptr< amrex::Parser > m_epsilon_parser
Definition: MacroscopicProperties.H:86
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:133
std::string m_str_mu_function
Definition: MacroscopicProperties.H:83
amrex::MultiFab & getepsilon_mf()
Definition: MacroscopicProperties.H:35
amrex::MultiFab & getmu_mf()
Definition: MacroscopicProperties.H:37
amrex::GpuArray< int, 3 > Ez_IndexType
Definition: MacroscopicProperties.H:56
amrex::MultiFab & getsigma_mf()
Definition: MacroscopicProperties.H:33
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: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:111
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:101
std::string m_str_epsilon_function
Definition: MacroscopicProperties.H:82
std::unique_ptr< amrex::Parser > m_sigma_parser
Definition: MacroscopicProperties.H:85
amrex::GpuArray< int, 3 > Ey_IndexType
Definition: MacroscopicProperties.H:54
std::string m_str_sigma_function
Definition: MacroscopicProperties.H:81
Definition: BreitWheelerEngineWrapper.H:35