1 #ifndef FIELD_FOLLOWING_COORDINATES_HPP
2 #define FIELD_FOLLOWING_COORDINATES_HPP
10 View<int**,CLayout,DeviceType>
tr;
11 View<double***,CLayout,DeviceType>
p;
14 View<double**,CLayout,DeviceType>
result;
22 p(
NoInit(
"p"),projection.
p.layout()),
26 Kokkos::deep_copy(
tr, projection.
tr);
27 Kokkos::deep_copy(
p, projection.
p);
37 if(input.extent(0) != 2 || input.extent(1) != grid.
nnode ||
38 output.extent(0)!= 2 || output.extent(1)!= grid.
nnode )
exit_XGC(
"\nError in cnvt_grid_ff2real: Unexpected View sizes. \n");
41 Kokkos::deep_copy(output, 0.0);
44 View<double**,CLayout,DeviceType> vol(
"vol",input.layout());
47 View<double**,CLayout,DeviceType> node_vol_ff(
NoInit(
"node_vol_ff"),input.layout());
55 for (
int dir=0;dir<2;dir++){
56 for (
int j=0;j<3;j++){
59 double wt=ff.
p(dir,i,j)*node_vol_ff(dir,nd);
62 Kokkos::atomic_add(&(output(dir,nd)), wt*input(dir,i));
63 Kokkos::atomic_add(&(vol(dir,nd)), wt);
70 for (
int dir=0;dir<2;dir++){
71 if(vol(dir, i) == 0.0){
74 output(dir, i) /= vol(dir, i);
80 Kokkos::parallel_for(
"cnvt_grid_ff2real_fillempty", Kokkos::RangePolicy<ExSpace>(0,grid.
nnode), KOKKOS_LAMBDA(
const int i ){
81 for (
int dir=0; dir<2; dir++){
85 for (
int j=0;j<3;j++){
87 double wt=ff.
p(cdir,i,j);
90 output(dir,i) += wt*input(dir,nd);
105 if(input.extent(0) != 2 || input.extent(1) != grid.
nnode ||
106 output.extent(0)!= 2 || output.extent(1)!= grid.
nnode )
exit_XGC(
"\nError in cnvt_grid_real2ff: Unexpected View sizes. \n");
109 Kokkos::deep_copy(output, 0.0);
116 for (
int dir=0;dir<2;dir++){
117 for (
int j=0;j<3;j++){
120 double wt=ff.
p(dir,i,j);
123 output(dir,i) += wt*input(dir,nd);
139 Kokkos::deep_copy(input,
result);
148 for(
int i = 0; i<input.extent(0); i++){
162 for(
int i = 0; i<input.extent(0); i++){
176 Kokkos::View<double**,Kokkos::LayoutRight,DeviceType> dest_view(
NoInit(
"dest_view"), nphi, field_in.nnode());
179 field_in.copy_to_double_view(
my_subview(dest_view, 0));
180 field_in.copy_to_double_view(
my_subview(dest_view, 1));
186 field_out.transpose_copy_from_double_view(
result);
VolumesAndAreas volumes_and_areas
Definition: grid.hpp:286
Definition: field_following_coordinates.hpp:9
void cnvt_grid_ff2real(const Grid< DeviceType > &grid, const View< double **, CLayout, DeviceType > &input, const View< double **, Kokkos::LayoutRight, DeviceType > &output) const
Definition: field_following_coordinates.hpp:35
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:103
FieldFollowingCoordinates(const Projection< HostType > &projection)
Definition: field_following_coordinates.hpp:20
FieldFollowingCoordinates()
Definition: field_following_coordinates.hpp:18
View< int **, CLayout, DeviceType > tr
Definition: field_following_coordinates.hpp:10
Definition: grid_field.hpp:25
View< double ***, CLayout, Device > p
Definition: grid.hpp:54
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:147
void cnvt_grid_real2ff(const Grid< DeviceType > &grid, const View< double ***, CLayout, DeviceType > &input) const
Definition: field_following_coordinates.hpp:161
KOKKOS_INLINE_FUNCTION int get_node_index(int triangle_index, int tri_vertex_index) const
Definition: grid.tpp:792
void cnvt_grid_real2ff(const Grid< DeviceType > &grid, const View< double **, CLayout, DeviceType > &input) const
Definition: field_following_coordinates.hpp:135
void exit_XGC(std::string msg)
Definition: globals.hpp:37
View< double ***, CLayout, DeviceType > p
Definition: field_following_coordinates.hpp:11
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
View< int **, CLayout, Device > tr
Definition: grid.hpp:53
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
View< double **, CLayout, DeviceType > result
Definition: field_following_coordinates.hpp:14
int nnode
Number of grid nodes.
Definition: grid.hpp:246
void cnvt_grid_real2ff(const Grid< DeviceType > &grid, const ScalarGridField &field_in, const GridField< DeviceType, VarType::Scalar, PhiInterpType::Planes, TorType::OnePlane, KinType::DriftKin > &field_out) const
Definition: field_following_coordinates.hpp:171
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:68
View< double **, CLayout, HostType > node_vol_ff_h
Definition: grid.hpp:22