WarpX
MagnetostaticSolver.H
Go to the documentation of this file.
1 /* Copyright 2022 S. Eric Clark, LLNL
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 #ifndef WARPX_MAGNETOSTATICSOLVER_H_
8 #define WARPX_MAGNETOSTATICSOLVER_H_
9 
10 #include <AMReX_Array.H>
11 #include <AMReX_MultiFab.H>
12 #include <AMReX_MLMG.H>
13 #include <AMReX_REAL.H>
14 
16 
22  public:
24  bool bcs_set = false;
25  std::array<std::array<bool, AMREX_SPACEDIM * 2>, 3> dirichlet_flag;
26  bool has_non_periodic = false;
27 
29  };
30 
36  private:
40 
41  public:
42  EBCalcBfromVectorPotentialPerLevel(const amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3>>& b_field,
43  const amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3>>& grad_buf_e_stag,
44  const amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3>>& grad_buf_b_stag)
45  : m_b_field(b_field),
46  m_grad_buf_e_stag(grad_buf_e_stag),
47  m_grad_buf_b_stag(grad_buf_b_stag)
48  {}
49 
50  void operator()(amrex::Array<std::unique_ptr<amrex::MLMG>,3> & mlmg, int lev);
51 
52  // Function to perform interpolation from cell edges to cell faces
53  void doInterp(const std::unique_ptr<amrex::MultiFab> &src, const std::unique_ptr<amrex::MultiFab> &dst);
54  };
55 } // namespace MagnetostaticSolver
56 
57 #endif //WARPX_MAGNETOSTATICSOLVER_H_
const amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 > > & m_grad_buf_e_stag
Definition: MagnetostaticSolver.H:38
const amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 > > & m_b_field
Definition: MagnetostaticSolver.H:37
EBCalcBfromVectorPotentialPerLevel(const amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 >> &b_field, const amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 >> &grad_buf_e_stag, const amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 >> &grad_buf_b_stag)
Definition: MagnetostaticSolver.H:42
void operator()(amrex::Array< std::unique_ptr< amrex::MLMG >, 3 > &mlmg, int lev)
Definition: MagnetostaticSolver.cpp:394
void doInterp(const std::unique_ptr< amrex::MultiFab > &src, const std::unique_ptr< amrex::MultiFab > &dst)
Definition: MagnetostaticSolver.cpp:352
const amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 > > & m_grad_buf_b_stag
Definition: MagnetostaticSolver.H:39
Definition: MagnetostaticSolver.H:21
bool bcs_set
Definition: MagnetostaticSolver.H:24
void defineVectorPotentialBCs()
Definition: MagnetostaticSolver.cpp:259
std::array< std::array< bool, AMREX_SPACEDIM *2 >, 3 > dirichlet_flag
Definition: MagnetostaticSolver.H:25
amrex::Array< amrex::Array< amrex::LinOpBCType, AMREX_SPACEDIM >, 3 > hibc
Definition: MagnetostaticSolver.H:23
amrex::Array< amrex::Array< amrex::LinOpBCType, AMREX_SPACEDIM >, 3 > lobc
Definition: MagnetostaticSolver.H:23
bool has_non_periodic
Definition: MagnetostaticSolver.H:26
Definition: MagnetostaticSolver.H:15
std::array< T, N > Array