XGC1
diag_3d_f0_f.hpp
Go to the documentation of this file.
1 #ifndef DIAG_3D_F0_F_HPP
2 #define DIAG_3D_F0_F_HPP
3 
4 #include "diagnostic.hpp"
5 #include "grid.hpp"
7 #include "electric_field.hpp"
8 #include "perturbed_B_field.hpp"
9 #include "vgrid_distribution.hpp"
10 #include "plasma.hpp"
11 #include "moments.hpp"
12 
13 class Diag3DF0F : public Diagnostic{
14 
15  public: // Cuda workaround for: A type that is a private or protected class member cannot be used in the type of a variable captured by an extended __device__ or __host__ __device__ lambda
16 
17  enum VarNames{
38  NVARS
39  };
40 
41  std::vector<std::string> var_names;
42 
43  // Precalculated values
44  View<double*, CLayout, DeviceType> v_curv_rad_fsa;
45  View<double*, CLayout, DeviceType> v_grad_B_rad_fsa;
46 
47  struct Drifts{
48  View<double*****,CLayout,DeviceType> v_exb;
49  View<double*****,CLayout,DeviceType> v_mag;
50  View<double*****,CLayout,DeviceType> v_par;
51  View<double***,CLayout,DeviceType> boltz_fac;
52  View<double***,CLayout,DeviceType> dpot;
53 
54  Drifts(){}
55 
57  : v_exb(NoInit("v_exb"), f0_f.n_species(), f0_f.n_vr(), f0_f.n_nodes(), f0_f.n_vz(),3),
58  v_mag(NoInit("v_mag"), v_exb.layout()),
59  v_par(NoInit("v_par"), v_exb.layout()),
60  boltz_fac(NoInit("boltz_fac"), f0_f.n_species(), f0_f.n_vr(), f0_f.n_nodes()),
61  dpot(NoInit("dpot"), boltz_fac.layout())
62  {}
63  };
64 
65  public:
66 
68 
70 
71  void init(NLReader::NamelistReader& nlr, const MagneticField<DeviceType>& magnetic_field, const Grid<DeviceType>& grid, int default_period);
72 
74  const VGridDistribution<DeviceType>& f0_f, const View<double**,CLayout,DeviceType>& T0, bool use_turb);
75 
76  Drifts copy_drift_velocities(const Drifts& d_in);
77 
79  const View<double**,CLayout,DeviceType>& T0, const View<double**,CLayout,DeviceType>& n0,
80  const View<double**,CLayout,DeviceType>& n,
81  View<double***,CLayout,HostType>& moments_adia_n0,
82  View<double***,CLayout,HostType>& moments_nonadia_n0,
83  View<double***,CLayout,HostType>& moments_adia_turb,
84  View<double***,CLayout,HostType>& moments_nonadia_turb,
85  View<double****,CLayout,HostType>& moments_nonadia_turb_en);
86 
87  void write(const Simulation<DeviceType>& sml, const MagneticField<DeviceType>& magnetic_field, const Grid<DeviceType>& grid, const DomainDecomposition<DeviceType>& pol_decomp, Plasma& plasma, PerturbedBField<DeviceType> &perturbed_B_field, const VelocityGrid& vgrid, ElectricField<DeviceType>& electric_field,
88  const VGridDistribution<DeviceType>& f0_f, const Moments& moments);
89 };
90 
91 #endif
Definition: diag_3d_f0_f.hpp:13
void init(NLReader::NamelistReader &nlr, const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, int default_period)
Definition: diag_3d_f0_f.cpp:7
View< double *, CLayout, DeviceType > v_curv_rad_fsa
Definition: diag_3d_f0_f.hpp:44
Drifts get_drift_velocities(const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, const VelocityGrid &vgrid, ElectricField< DeviceType > &electric_field, Plasma &plasma, PerturbedBField< DeviceType > &perturbed_B_field, const Simulation< DeviceType > &sml, const VGridDistribution< DeviceType > &f0_f, const View< double **, CLayout, DeviceType > &T0, bool use_turb)
Definition: diag_3d_f0_f.cpp:92
View< double *, CLayout, DeviceType > v_grad_B_rad_fsa
Definition: diag_3d_f0_f.hpp:45
Diag3DF0F()
Definition: diag_3d_f0_f.hpp:69
Drifts copy_drift_velocities(const Drifts &d_in)
Definition: diag_3d_f0_f.cpp:305
void calculate_diagnostics(const Simulation< DeviceType > &sml, const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, Plasma &plasma, const VelocityGrid &vgrid, ElectricField< DeviceType > &electric_field, PerturbedBField< DeviceType > &perturbed_B_field, const VGridDistribution< DeviceType > &f0_f, const View< double **, CLayout, DeviceType > &T0, const View< double **, CLayout, DeviceType > &n0, const View< double **, CLayout, DeviceType > &n, View< double ***, CLayout, HostType > &moments_adia_n0, View< double ***, CLayout, HostType > &moments_nonadia_n0, View< double ***, CLayout, HostType > &moments_adia_turb, View< double ***, CLayout, HostType > &moments_nonadia_turb, View< double ****, CLayout, HostType > &moments_nonadia_turb_en)
Definition: diag_3d_f0_f.cpp:358
bool adios_stage
Definition: diag_3d_f0_f.hpp:67
void write(const Simulation< DeviceType > &sml, const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, Plasma &plasma, PerturbedBField< DeviceType > &perturbed_B_field, const VelocityGrid &vgrid, ElectricField< DeviceType > &electric_field, const VGridDistribution< DeviceType > &f0_f, const Moments &moments)
Definition: diag_3d_f0_f.cpp:574
VarNames
Definition: diag_3d_f0_f.hpp:17
@ RadEnFluxMag
Definition: diag_3d_f0_f.hpp:29
@ RadPotEnFluxMag
Definition: diag_3d_f0_f.hpp:33
@ ParPotEnFlux
Definition: diag_3d_f0_f.hpp:37
@ ToroidalVelocity
Definition: diag_3d_f0_f.hpp:18
@ RadEnFluxExB
Definition: diag_3d_f0_f.hpp:28
@ TorAngMom
Definition: diag_3d_f0_f.hpp:24
@ RadialFluxMag
Definition: diag_3d_f0_f.hpp:22
@ PoloidalVelocity
Definition: diag_3d_f0_f.hpp:19
@ ParallelVelocity
Definition: diag_3d_f0_f.hpp:20
@ RadialFluxExB
Definition: diag_3d_f0_f.hpp:21
@ RadMomFlux3DB
Definition: diag_3d_f0_f.hpp:27
@ RadialFlux3DB
Definition: diag_3d_f0_f.hpp:23
@ RadMomFluxExB
Definition: diag_3d_f0_f.hpp:25
@ RadMomFluxMag
Definition: diag_3d_f0_f.hpp:26
@ NVARS
Definition: diag_3d_f0_f.hpp:38
@ RadPotEnFluxExB
Definition: diag_3d_f0_f.hpp:31
@ ParMomFlux
Definition: diag_3d_f0_f.hpp:35
@ RadPotEnFlux3DB
Definition: diag_3d_f0_f.hpp:34
@ RadEnFlux3DB
Definition: diag_3d_f0_f.hpp:30
@ ParEnFlux
Definition: diag_3d_f0_f.hpp:36
@ RadPotEnFluxExBTurb
Definition: diag_3d_f0_f.hpp:32
std::vector< std::string > var_names
Definition: diag_3d_f0_f.hpp:41
Definition: diagnostic.hpp:10
Definition: magnetic_field.hpp:12
Definition: NamelistReader.hpp:193
Definition: perturbed_B_field.hpp:12
Definition: plasma.hpp:13
Definition: sml.hpp:9
Definition: vgrid_distribution.hpp:18
Definition: magnetic_field.F90:1
subroutine plasma(grid, itr, p, dene_out, deni_out, Te_out, Ti_out, Vparai_out, ignore_vacuum)
Calculate the plasma density, temperature, and parallel velocity for a point in triangle itr using pl...
Definition: neutral_totalf.F90:1548
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:69
Definition: diag_3d_f0_f.hpp:47
View< double ***, CLayout, DeviceType > boltz_fac
Definition: diag_3d_f0_f.hpp:51
View< double ***, CLayout, DeviceType > dpot
Definition: diag_3d_f0_f.hpp:52
View< double *****, CLayout, DeviceType > v_par
Definition: diag_3d_f0_f.hpp:50
Drifts()
Definition: diag_3d_f0_f.hpp:54
View< double *****, CLayout, DeviceType > v_mag
Definition: diag_3d_f0_f.hpp:49
Drifts(const VGridDistribution< DeviceType > &f0_f)
Definition: diag_3d_f0_f.hpp:56
View< double *****, CLayout, DeviceType > v_exb
Definition: diag_3d_f0_f.hpp:48
Definition: electric_field.hpp:76
Definition: moments.hpp:9
Definition: velocity_grid.hpp:8