XGCa
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_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_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 Grid<DeviceType>& grid,
75  const DomainDecomposition<DeviceType>& pol_decomp,
76  const VelocityGrid& vgrid,
77  Species<DeviceType>& species,
78  const PerturbedBField<DeviceType> &perturbed_B_field,
79  const Simulation<DeviceType>& sml,
81  const View<double*,CLayout,DeviceType>& T0,
82  const View<double*,CLayout,DeviceType> pot0_d,
83  const View<double*,CLayout,DeviceType>& dpot_d,
85  const GridFieldPackPtr& gfpack_ptr,
86  bool use_turb);
87 
88  Drifts copy_drift_velocities(const Drifts& d_in);
89 
91  const View<double**,CLayout,DeviceType>& T0, const View<double**,CLayout,DeviceType>& n0,
92  const View<double**,CLayout,DeviceType>& n,
93  View<double***,CLayout,HostType>& moments_adia_n0,
94  View<double***,CLayout,HostType>& moments_nonadia_n0,
95  View<double***,CLayout,HostType>& moments_adia_turb,
96  View<double***,CLayout,HostType>& moments_nonadia_turb,
97  View<double****,CLayout,HostType>& moments_nonadia_turb_en);
98 
99  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,
100  const VGridDistribution<DeviceType>& f0_f, const Moments& moments);
101 };
102 
103 #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
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:295
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:348
bool adios_stage
Definition: diag_3d_f0_f.hpp:67
Drifts get_drift_velocities(const MagneticField< DeviceType > &magnetic_field, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, const VelocityGrid &vgrid, Species< DeviceType > &species, const PerturbedBField< DeviceType > &perturbed_B_field, const Simulation< DeviceType > &sml, const VGridDistribution< DeviceType > &f0_f, const View< double *, CLayout, DeviceType > &T0, const View< double *, CLayout, DeviceType > pot0_d, const View< double *, CLayout, DeviceType > &dpot_d, const GridField< DeviceType, VarType::Scalar, PIT_GLOBAL, TorType::OnePlane, KinType::GyroKin > &pot, const GridFieldPackPtr &gfpack_ptr, bool use_turb)
Definition: diag_3d_f0_f.cpp:92
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:591
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:199
Definition: perturbed_B_field.hpp:12
Definition: plasma.hpp:13
Definition: sml.hpp:10
Definition: species.hpp:63
Definition: vgrid_distribution.hpp:18
std::unique_ptr< GridFieldPackGeneric > GridFieldPackPtr
Definition: grid_field_pack.hpp:21
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:1541
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:69
Definition: diag_3d_f0_f.hpp:47
View< double ****, CLayout, DeviceType > v_par
Definition: diag_3d_f0_f.hpp:50
View< double ****, CLayout, DeviceType > v_mag
Definition: diag_3d_f0_f.hpp:49
View< double ****, CLayout, DeviceType > v_exb
Definition: diag_3d_f0_f.hpp:48
View< double **, CLayout, DeviceType > boltz_fac
Definition: diag_3d_f0_f.hpp:51
Drifts()
Definition: diag_3d_f0_f.hpp:54
Drifts(const VGridDistribution< DeviceType > &f0_f)
Definition: diag_3d_f0_f.hpp:56
View< double **, CLayout, DeviceType > dpot
Definition: diag_3d_f0_f.hpp:52
Definition: electric_field.hpp:76
Definition: grid_field.hpp:22
Definition: moments.hpp:9
Definition: velocity_grid.hpp:8