XGCa
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
diffusion.hpp
Go to the documentation of this file.
1 #ifndef DIFFUSION_HPP
2 #define DIFFUSION_HPP
3 
4 #include "sml.hpp"
5 #include "grid.hpp"
6 #include "magnetic_field.hpp"
7 #include "electric_field.hpp"
9 #include "velocity_grid.hpp"
10 #include "plasma.hpp"
11 #include "vgrid_distribution.hpp"
12 #include "source.hpp"
13 #include "smoothing.hpp"
14 #include "diag_f0_df.hpp"
15 #include "boundary.hpp"
16 #include "xgc_io.hpp"
17 
18 extern "C" void initialize_diffusion(int* bd, int is_update);
19 
43 class Diffusion : public Source{
44  double inner_psi_bound;
45  double outer_psi_bound;
46 
49 
50  bool update_on;
52 
54 
55  public:
56 
65  bool is_triggered_update(int step) const{
66  return step_trigger_update.is_triggered(step);
67  }
68 
78  int trigger_count_update(int step) const{
80  }
81 
90 
92 
94 
96  ElectricField<DeviceType>& electric_field,
97  const DomainDecomposition<DeviceType>& pol_decomp, const VelocityGrid& vgrid, Plasma& plasma, Smoothing& smoothing,
98  DiagF0DF& diag_f0_df, const Moments& moments,
100  double dt);
101 
102  void update(const Plasma& plasma, const DomainDecomposition<DeviceType>& pol_decomp, const Grid<DeviceType>& grid);
103 };
104 
105 #endif
void update(const Plasma &plasma, const DomainDecomposition< DeviceType > &pol_decomp, const Grid< DeviceType > &grid)
Updates the diffusion coefficients from an input BP file and passes the data to a Fortran routine...
Definition: diffusion.cpp:818
Definition: diag_f0_df.hpp:9
Definition: velocity_grid.hpp:8
Definition: sml.hpp:8
subroutine plasma(grid, itr, p, dene_out, deni_out, Te_out, Ti_out, Vparai_out)
Calculate the plasma density, temperature, and parallel velocity for a point in triangle itr using pl...
Definition: neutral_totalf.F90:1248
Definition: NamelistReader.hpp:193
Definition: magnetic_field.hpp:12
Definition: moments.hpp:9
int trigger_count_update(int step) const
Calculates how many times the update of the diffusion coefficient has been executed up to the given s...
Definition: diffusion.hpp:78
subroutine initialize_diffusion(bd, is_update)
Definition: diffusion.F90:868
Definition: electric_field.hpp:35
Definition: source.hpp:7
Implements an anomalous transport (advection-diffusion) model for the kinetic electrons in the plasma...
Definition: diffusion.hpp:43
int trigger_count(int step) const
Definition: step_trigger.hpp:50
Definition: boundary.hpp:85
bool is_triggered_update(int step) const
Determines whether the update of the diffusion coefficients should be executed on the given step...
Definition: diffusion.hpp:65
bool is_triggered(int step) const
Definition: step_trigger.hpp:25
Definition: smoothing.hpp:9
XGC_IO_Stream diffusion_update_stream
Adios stream used for reading the updated diffusion coefficients.
Definition: diffusion.hpp:53
double inner_psi_bound
Inner boundary for diffusion in terms of normalized poloidal flux.
Definition: diffusion.hpp:44
Definition: vgrid_distribution.hpp:18
bool use_smoothing
Whether to smooth the fluid moments before solving the transport equations.
Definition: diffusion.hpp:48
Definition: xgc_io.hpp:24
StepTrigger step_trigger_update
Triggers when it is time to update the diffusion coefficients.
Definition: diffusion.hpp:51
Definition: magnetic_field.F90:1
Definition: plasma.hpp:13
Boundary bndry
Boundary object for handling domain exclusion regions; now a member variable for later reuse...
Definition: diffusion.hpp:47
double outer_psi_bound
Outer boundary for diffusion in terms of normalized poloidal flux.
Definition: diffusion.hpp:45
Diffusion()
Default constructor. Creates an uninitialized Diffusion object.
Definition: diffusion.hpp:89
bool update_on
Switch for periodic updates of the diffusion coefficients.
Definition: diffusion.hpp:50
Definition: step_trigger.hpp:4
void init(NLReader::NamelistReader &nlr, const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid)
Constructs a Diffusion object by reading diffusion-related parameters from the namelist.
Definition: diffusion.cpp:864
void apply(const Simulation< DeviceType > &sml, const Grid< DeviceType > &grid, const MagneticField< DeviceType > &magnetic_field, ElectricField< DeviceType > &electric_field, const DomainDecomposition< DeviceType > &pol_decomp, const VelocityGrid &vgrid, Plasma &plasma, Smoothing &smoothing, DiagF0DF &diag_f0_df, const Moments &moments, const VGridDistribution< DeviceType > &f0_f, VGridDistribution< HostType > &f0_df0g, double dt)
Definition: diffusion.cpp:655