XGCa
fgrid_coarse_graining.hpp
Go to the documentation of this file.
1 
14 #ifndef FGRID_COARSE_GRAINING_HPP
15 #define FGRID_COARSE_GRAINING_HPP
16 
17 #include "source.hpp" // base class + StepTrigger
18 #include "plasma.hpp" // Plasma / Species
19 #include "vgrid_distribution.hpp" // VGridDistribution
20 #include "NamelistReader.hpp" // (same helper used elsewhere)
21 #include "view_arithmetic.hpp"
22 
39 {
40  double alpha;
41  bool enabled;
42 
43 public:
44  // Default constructor
46 
61  {
62  nlr.use_namelist("f0_param");
63  enabled = nlr.get<bool> ("f0_coarse_graining_on", false);
64  alpha = nlr.get<double>("f0_coarse_graining_alpha", 1.0e-3);
65 
66  // call every f_source step
68  }
69 
86  VGridDistribution<DeviceType>& df0g) const {
87  plasma.for_all_nonadiabatic_species([&](Species<DeviceType>& species){
88  const int isp = species.nonadiabatic_idx;
89  species.f0.f0g_send_to_device();
90  add_ay_to_x(my_subview(df0g.f,isp), species.f0.f0g, alpha);
91  add_ay_to_x(species.f0.f0g, species.f0.f0g, -alpha);
92  species.f0.deallocate_device_views();
93 
94  //Kokkos::parallel_for("recycle_f0g", Kokkos::RangePolicy<ExSpace>(0,df0g.n_nodes()), KOKKOS_LAMBDA( const int inode ){
95  // for(int imu=0; imu<df0g.n_vr(); imu++){
96  // for(int ivp=0; ivp<df0g.n_vz(); ivp++){
97  // double val = alpha*species.f0.f0g(ivp, inode, imu);
98  // species.f0.f0g(ivp, inode, imu) -= val;
99  // df0g(isp, ivp, inode, imu) += val;
100  // }
101  // }
102  //});
103  //Kokkos::fence();
104  });
105  }
106 };
107 
108 #endif // FGRID_COARSE_GRAINING_HPP
109 
Definition: fgrid_coarse_graining.hpp:39
double alpha
Definition: fgrid_coarse_graining.hpp:40
bool enabled
Definition: fgrid_coarse_graining.hpp:41
void apply(Plasma &plasma, VGridDistribution< DeviceType > &df0g) const
Apply the coarse‑graining operation to all non‑adiabatic species.
Definition: fgrid_coarse_graining.hpp:85
FGridCoarseGraining()
Definition: fgrid_coarse_graining.hpp:45
FGridCoarseGraining(NLReader::NamelistReader &nlr)
Construct and configure FGridCoarseGraining from the f0_param namelist.
Definition: fgrid_coarse_graining.hpp:60
Definition: NamelistReader.hpp:193
T get(const string &param, const T default_val, int val_ind=0)
Definition: NamelistReader.hpp:386
void use_namelist(const string &namelist, Options required=Required)
Definition: NamelistReader.hpp:360
Definition: plasma.hpp:13
Definition: species.hpp:75
int nonadiabatic_idx
Index of species skipping adiabatic species (for compatibility with fortran arrays)
Definition: species.hpp:81
Distribution< Device > f0
Species distribution in velocity space on local mesh nodes.
Definition: species.hpp:132
Definition: step_trigger.hpp:4
Definition: vgrid_distribution.hpp:18
View< double ****, CLayout, Device > f
Definition: vgrid_distribution.hpp:23
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
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
Definition: source.hpp:7
StepTrigger step_trigger
Definition: source.hpp:8
void add_ay_to_x(const V1 &dest_view, const V2 &added_view, T coeff)
Definition: view_arithmetic.hpp:86