XGC1
solver_poisson_axisym.hpp
Go to the documentation of this file.
1 #ifndef SOLVER_POISSON_AXISYM_HPP
2 #define SOLVER_POISSON_AXISYM_HPP
3 
4 #include "solver.hpp"
5 
6 class SolverPoissonAxisym : public Solver{
7 
8  public:
9 
11  nlr.use_namelist("sml_param");
12  bool iter_solver = nlr.get<bool>("sml_iter_solver", true);
13  // non-axisymmetric parts. The axisymmetric part has the
14  // flux-surface averaged potential on the RHS. Solve
15  // iteratively by lagging the RHS potential by one
16  // iteration. Stop after sml_iter_solver_niter iterations.
17  // If .false., split Poisson equation into
18  // flux-surface averaged part and rest (assuming that the
19  // polarization term commutes with the flux-surface
20  // average) and the rest; solve in two steps.
21  return iter_solver;
22  }
23 
24  SolverPoissonAxisym(NLReader::NamelistReader& nlr, bool is_XGCa, bool is_em, const MagneticField<DeviceType>& magnetic_field, const Grid<DeviceType>& grid, std::string label_in, bool spectral_in, bool use_pade_in, bool update_solver, int update_solver_nstep)
25  : Solver(label_in, P0, -1, spectral_in, get_is_iter_solver(nlr) ? 2 : 1, grid.ntriangle, use_pade_in, update_solver, update_solver_nstep)
26  {
27 
28  TIMER("EXTEND_BOUNDARY",
29  setup_boundaries(nlr, is_XGCa, is_em, magnetic_field, grid) );
30 
31  if(is_rank_zero()){
32  write_solver_boundary(bd_rhs, "Efield_excluded_bnd.cbd0");
33  write_solver_boundary(bd, "Efield_excluded_bnd.pbd0");
34  }
35  }
36 
37  void setup_boundaries(NLReader::NamelistReader& nlr, bool is_XGCa, bool explicit_electromagnetic, const MagneticField<DeviceType>& magnetic_field, const Grid<DeviceType>& grid);
38 };
39 
40 #endif
Definition: magnetic_field.hpp:12
Definition: NamelistReader.hpp:199
T get(const string &param, const T default_val, int val_ind=0)
Definition: NamelistReader.hpp:392
void use_namelist(const string &namelist, Options required=Required)
Definition: NamelistReader.hpp:366
Definition: solver_poisson_axisym.hpp:6
SolverPoissonAxisym(NLReader::NamelistReader &nlr, bool is_XGCa, bool is_em, const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, std::string label_in, bool spectral_in, bool use_pade_in, bool update_solver, int update_solver_nstep)
Definition: solver_poisson_axisym.hpp:24
bool get_is_iter_solver(NLReader::NamelistReader &nlr) const
Definition: solver_poisson_axisym.hpp:10
void setup_boundaries(NLReader::NamelistReader &nlr, bool is_XGCa, bool explicit_electromagnetic, const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid)
Definition: solver_poisson_axisym.cpp:5
Definition: solver.hpp:16
Boundary bd
Definition: solver.hpp:35
@ P0
Definition: solver.hpp:20
Boundary bd_rhs
Definition: solver.hpp:34
bool is_rank_zero()
Definition: globals.hpp:28
Definition: magnetic_field.F90:1
void write_solver_boundary(const Boundary &excluded_boundary, std::string filename)
Definition: setup_solver_boundaries.cpp:3
#define TIMER(N, F)
Definition: timer_macro.hpp:24