1 #ifndef GET_POTENTIAL_GRAD 
    2 #define GET_POTENTIAL_GRAD 
   21 template<
class Device>
 
   23     View<double**,CLayout,Device> 
field;
 
   32     View<double*,CLayout, Device> 
left(
int i_plane){
 
   33         int i_left_alt = i_plane%2;
 
   37     View<double*,CLayout, Device> 
right(
int i_plane){
 
   38         int i_right_alt = (i_plane+1)%2;
 
   43 template<
class Device, 
class DeviceOut>
 
   71         nrho(gyroavg_requested ? gyro_avg_matrices_in.
nrho : 0),
 
   84         if(!std::is_same<DeviceOut,Device>()){
 
   90         if(gradient_requested){
 
   91 #ifdef NO_FORTRAN_MODULES 
   92             grad_matrices = grid.gradient_matrices_h.template mirror<DeviceType>();
 
  106         if(gradient_requested && !sml.
is_XGCa){
 
  109         GPTLstop(
"GET_POT_GRAD_GPTX_SETUP");
 
  113 template<
class Device>
 
  119     View<double*,CLayout, Device, Kokkos::MemoryTraits<Kokkos::Unmanaged>> 
pot;
 
  120     View<double*,CLayout, Device> 
r;
 
  121     View<double*,CLayout, Device> 
z;
 
  127     template<
class DeviceIn>
 
  129      : 
r(
NoInit(
"r"), field_in.f.extent(0)),
 
  130        z(
NoInit(
"z"), field_in.f.extent(0)),
 
  137         pot = View<double*,CLayout,Device, Kokkos::MemoryTraits<Kokkos::Unmanaged>>((
double*)(
pot_managed.data()), 
pot_managed.layout());
 
  155     template<
class DeviceOut, PhiInterpType PIT>
 
  160             View<double**,CLayout, Device> r_tmp(
NoInit(
"r_tmp"), nphi, 
r.size());
 
  161             View<double**,CLayout, Device> z_tmp(
NoInit(
"z_tmp"), nphi, 
z.size());
 
  163             for(
int iphi=0; iphi<nphi; iphi++){
 
  174             for(
int iphi=0; iphi<nphi; iphi++){
 
  175                 Kokkos::parallel_for(
"set_field", Kokkos::RangePolicy<ExSpace>(0,field00_ff_h.extent(0)), KOKKOS_LAMBDA( 
const int i ){
 
  177                     field00_ff(i).V[iphi][0]=r_tmp(iphi,i);
 
  178                     field00_ff(i).V[iphi][1]=z_tmp(iphi,i);
 
  180                     field00_ff(i).E[0]=r_tmp(iphi,i);
 
  181                     field00_ff(i).E[1]=z_tmp(iphi,i);
 
  189             Kokkos::parallel_for(
"set_field", Kokkos::RangePolicy<typename DeviceOut::execution_space>(0,field00_ff_h.extent(0)), KOKKOS_LAMBDA( 
const int i ){
 
  191                 field00_ff_h(i).V[0][0]=0.0;
 
  192                 field00_ff_h(i).V[0][1]=0.0;
 
  193                 field00_ff_h(i).V[1][0]=0.0;
 
  194                 field00_ff_h(i).V[1][1]=0.0;
 
  196                 field00_ff_h(i).E[0]=0.0;
 
  197                 field00_ff_h(i).E[1]=0.0;
 
  204 template<
class DeviceIn, 
class DeviceOut, VarType VT, PhiInterpType PIT, TorType TT, KinType KT>
 
  206     View<double**,CLayout,DeviceIn, Kokkos::MemoryTraits<Kokkos::Unmanaged>> 
input_potential;
 
  217     GetPotGradFieldArgs(
const View<
double**,
CLayout,DeviceIn, Kokkos::MemoryTraits<Kokkos::Unmanaged>>& input_potential_in, 
bool ignore_poloidal_dpot_in=
false)
 
  226     GetPotGradFieldArgs(
const View<double*,CLayout,DeviceIn>& input_potential_in, 
bool ignore_poloidal_dpot_in=
false)
 
  250 void get_field_Ah_cv_ff(
const Grid<DeviceType>& grid, 
const DomainDecomposition<DeviceType>& pol_decomp, 
const GridField<HostType,VarType::Scalar,PhiInterpType::None,TorType::MultiplePlanes,KinType::DriftKin>& Ah_cv_h, 
const GridField<HostType,VarType::Scalar,PhiInterpType::Planes,TorType::OnePlane,KinType::DriftKin>& Ah_cv_ff);
 
  252 template<
class DeviceIn, 
class DeviceOut, VarType VT, PhiInterpType PIT, TorType TT, KinType KT>
 
Definition: get_potential_grad.hpp:22
 
View< double *, CLayout, Device > left(int i_plane)
Definition: get_potential_grad.hpp:32
 
View< double *, CLayout, Device > right(int i_plane)
Definition: get_potential_grad.hpp:37
 
View< double **, CLayout, Device > field
Definition: get_potential_grad.hpp:23
 
AlternatingStorage(const std::string &name, int nnode)
Definition: get_potential_grad.hpp:27
 
Definition: boundary.hpp:83
 
Definition: field_following_coordinates.hpp:9
 
void cnvt_grid_real2ff(const Grid< DeviceType > &grid, const View< double **, CLayout, DeviceType > &input, const View< double **, Kokkos::LayoutRight, DeviceType > &output) const
Definition: field_following_coordinates.hpp:169
 
Projection< HostType > half_plane_ff
Definition: grid.hpp:194
 
int nnode
Number of grid nodes.
Definition: grid.hpp:174
 
Definition: magnetic_field.hpp:12
 
static constexpr bool is_XGCa
Equivalent to the preprocessor flag for now.
Definition: sml.hpp:20
 
constexpr VarType vec2d_if_axisym()
 
VarType
Definition: field.hpp:11
 
void get_field_Ah_cv_ff(const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, const GridField< HostType, VarType::Scalar, PhiInterpType::None, TorType::MultiplePlanes, KinType::DriftKin > &Ah_cv_h, const GridField< HostType, VarType::Scalar, PhiInterpType::Planes, TorType::OnePlane, KinType::DriftKin > &Ah_cv_ff)
Definition: get_potential_grad.cpp:6
 
void get_field_grad(const Grid< DeviceType > &grid, GetPotGradFieldArgs< DeviceIn, DeviceOut, VT, PIT, TT, KT > &args, GetPotentialGradTemp< DeviceType, DeviceOut > &tmp)
Definition: get_potential_grad.cpp:389
 
void ptb_3db_replace_b_grad_phi(double *tmp)
 
constexpr PhiInterpType PIT_GLOBAL
Definition: globals.hpp:103
 
PhiInterpType
Definition: globals.hpp:95
 
void grid_deriv(const GradientMatrices< DeviceType > &gm, const Grid< DeviceType > &grid, const Kokkos::View< double *, Kokkos::LayoutRight, DeviceType > &qty, const Kokkos::View< double *, Kokkos::LayoutRight, DeviceType > &qty_deriv_x, const Kokkos::View< double *, Kokkos::LayoutRight, DeviceType > &qty_deriv_y, bool discard_when_basis_is_one)
Definition: grid_deriv.cpp:18
 
void mirror_copy(T1 &view_dest, const T2 &view_src)
Definition: my_mirror_view.hpp:122
 
View< T *, CLayout, Device > my_mirror_view(const View< T *, CLayout, Device > &view, Device nd)
Definition: my_mirror_view.hpp:14
 
Kokkos::View< T *, Kokkos::LayoutRight, Device > my_subview(const Kokkos::View< T ****, Kokkos::LayoutRight, Device > &view, int i, int j, int k)
Definition: my_subview.hpp:8
 
Definition: col_grid.cpp:127
 
void parallel_for(const std::string name, int n_ptl, Function func, Option option, HostAoSoA aosoa_h, DeviceAoSoA aosoa_d)
Definition: streamed_parallel_for.hpp:252
 
Definition: magnetic_field.F90:1
 
logical false
Definition: module.F90:102
 
logical true
Definition: module.F90:102
 
Kokkos::LayoutRight CLayout
Definition: space_settings.hpp:68
 
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:69
 
Definition: get_potential_grad.hpp:114
 
void calculate_gradient(const Grid< DeviceType > &grid, const GradientMatrices< DeviceType > &grad_matrices)
Definition: get_potential_grad.hpp:140
 
Field00(const GridField< DeviceIn, VarType::Scalar, PhiInterpType::None, TorType::OnePlane, KinType::DriftKin > &field_in, bool discard_when_basis_is_one_in)
Definition: get_potential_grad.hpp:128
 
View< double *, CLayout, Device > r
Definition: get_potential_grad.hpp:120
 
bool discard_when_basis_is_one
Definition: get_potential_grad.hpp:116
 
void set_field(const Grid< DeviceType > &grid, const FieldFollowingCoordinates &ff, View< Field< VarType::Vector2D, PIT > *, CLayout, DeviceOut > &field00_ff_h)
Definition: get_potential_grad.hpp:156
 
View< double *, CLayout, Device, Kokkos::MemoryTraits< Kokkos::Unmanaged > > pot
Definition: get_potential_grad.hpp:119
 
bool is_provided
Definition: get_potential_grad.hpp:115
 
Field00()
Definition: get_potential_grad.hpp:123
 
View< double *, CLayout, Device > z
Definition: get_potential_grad.hpp:121
 
View< Field< VarType::Scalar, PhiInterpType::None > *, CLayout, Device > pot_managed
Definition: get_potential_grad.hpp:118
 
Definition: get_potential_grad.hpp:205
 
bool potential_is_requested
Definition: get_potential_grad.hpp:211
 
bool gradient_is_requested
Definition: get_potential_grad.hpp:212
 
void request_para_grad(const View< double **, CLayout, DeviceType > ¶_grad_in)
Definition: get_potential_grad.hpp:244
 
void request_gradient(const GridField< DeviceOut, VT, PIT, TT, KT > &gradient_in)
Definition: get_potential_grad.hpp:239
 
bool ignore_poloidal_dpot
Definition: get_potential_grad.hpp:210
 
Field00< DeviceType > field00
Definition: get_potential_grad.hpp:214
 
GridField< DeviceOut, VarType::Scalar, PIT, TT, KT > potential
Definition: get_potential_grad.hpp:208
 
void request_potential(const GridField< DeviceOut, VarType::Scalar, PIT, TT, KT > &potential_in)
Definition: get_potential_grad.hpp:234
 
bool para_grad_is_requested
Definition: get_potential_grad.hpp:213
 
GridField< DeviceOut, VT, PIT, TT, KT > gradient
Definition: get_potential_grad.hpp:207
 
GetPotGradFieldArgs(const View< double **, CLayout, DeviceIn, Kokkos::MemoryTraits< Kokkos::Unmanaged >> &input_potential_in, bool ignore_poloidal_dpot_in=false)
Definition: get_potential_grad.hpp:217
 
View< double **, CLayout, DeviceType > para_grad
Definition: get_potential_grad.hpp:209
 
View< double **, CLayout, DeviceIn, Kokkos::MemoryTraits< Kokkos::Unmanaged > > input_potential
Definition: get_potential_grad.hpp:206
 
GetPotGradFieldArgs(const View< double *, CLayout, DeviceIn > &input_potential_in, bool ignore_poloidal_dpot_in=false)
Definition: get_potential_grad.hpp:226
 
Definition: get_potential_grad.hpp:44
 
int ndim
Definition: get_potential_grad.hpp:49
 
View< double ****, CLayout, Device > gradient_rho
Definition: get_potential_grad.hpp:57
 
AlternatingStorage< Device > potential_alt
Definition: get_potential_grad.hpp:52
 
GyroAverageMatrices< DeviceType > gyro_avg_matrices
Definition: get_potential_grad.hpp:64
 
int nnode
Definition: get_potential_grad.hpp:46
 
int nrho
Definition: get_potential_grad.hpp:47
 
GetPotentialGradTemp(const Simulation< DeviceType > &sml, const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, const MagneticField< DeviceType > &magnetic_field, const Boundary &boundary, int n_input_potential_planes, bool gradient_requested, bool gyroavg_requested, const GyroAverageMatrices< DeviceType > &gyro_avg_matrices_in=GyroAverageMatrices< DeviceType >())
Definition: get_potential_grad.hpp:69
 
GradParXTmp gptx
Definition: get_potential_grad.hpp:67
 
View< double **, CLayout, Device > potential
Definition: get_potential_grad.hpp:55
 
AlternatingStorage< Device > gradient_r_alt
Definition: get_potential_grad.hpp:53
 
FieldFollowingCoordinates ff
Definition: get_potential_grad.hpp:66
 
View< double *, CLayout, Device > scratch
Definition: get_potential_grad.hpp:60
 
View< double ***, CLayout, Device > potential_rho
Definition: get_potential_grad.hpp:58
 
int nphi
Definition: get_potential_grad.hpp:48
 
GradientMatrices< DeviceType > grad_matrices
Definition: get_potential_grad.hpp:65
 
AlternatingStorage< Device > gradient_z_alt
Definition: get_potential_grad.hpp:54
 
View< double ***, CLayout, Device > gradient
Definition: get_potential_grad.hpp:56
 
View< double **, CLayout, Device > input_potential
Definition: get_potential_grad.hpp:51
 
Definition: gradparx2.hpp:8
 
Definition: grid_field.hpp:22
 
static int GPTLstart(const char *name)
Definition: timer_macro.hpp:9
 
static int GPTLstop(const char *name)
Definition: timer_macro.hpp:10