10 extern "C" void set_mom_module_ptrs(
double* den_local_cpp,
double* upara_local_cpp,
double* uperp_local_cpp,
double* temp_local_cpp,
double* Kperp_local_cpp,
11 double* Kpara_local_cpp,
double* temp_para_local_cpp,
double* den_all_cpp,
double* temp_all_cpp,
double* temp_perp_all_cpp,
double* temp_para_all_cpp,
double* upara_all_cpp);
22 View<double**, CLayout, HostType>
den_all;
31 :
den_local(
"den_local", f.n_nodes(), f.n_species()),
50 if(do_gather)
gather(pol_decomp);
73 for (
int ivr=0; ivr<vgrid.
nvr; ivr++){
75 double mu_vol = (ivr==0 || ivr==vgrid.
nvr-1) ? 0.5 : 1.0;
76 double smu = ivr*vgrid.
dsmu;
78 double en_perp= 0.5 * mu;
81 for(
int ivz=0; ivz<vgrid.
nvz; ivz++){
82 int ivp = ivz - vgrid.
nvp;
83 double vp = ivp*vgrid.
dvp;
84 double en_para2 = vp*vp;
86 double wt = mu_vol*f(isp, ivr, inode, ivz);
88 upara(inode,isp) += wt*vp;
89 uperp(inode,isp) += wt*smu;
90 Kperp(inode,isp) += wt*en_perp;
91 Kpara(inode,isp) += wt*en_para2;
98 const double UPERP_DEFAULT_COEFF = sqrt(0.25*
TWOPI);
102 double den0 = 1.0e-4*species.
f0.den_h(inode);
103 if (!std::isfinite(den(inode,isp))) den(inode,isp) = den0;
104 den(inode,isp) = max(den0,den(inode,isp));
107 double t_norm_ev = species.
f0.temp_ev_h(inode);
111 double inv_density = 1.0/den(inode,isp);
112 Kperp(inode,isp) *= t_norm_ev*inv_density;
113 Kpara(inode,isp) *= t_norm_ev*inv_density;
114 upara(inode,isp) *= vth*inv_density;
115 uperp(inode,isp) *= vth*inv_density;
116 den(inode,isp) *= species.
f0.grid_vol_vonly_h(inode);
120 temp(inode,isp) = ( temp_para(inode,isp) + 2.0*Kperp(inode,isp) )/3.0;
123 if (!std::isfinite(den(inode,isp))) den(inode,isp) = species.
f0.den_h(inode);
124 if (!std::isfinite(Kperp(inode,isp))) Kperp(inode,isp) = t_norm_ev;
125 if (!std::isfinite(Kpara(inode,isp))) Kpara(inode,isp) = t_norm_ev;
126 if (!std::isfinite(temp_para(inode,isp))) temp_para(inode,isp) = t_norm_ev;
127 if (!std::isfinite(temp(inode,isp))) temp(inode,isp) = t_norm_ev;
128 if (!std::isfinite(upara(inode,isp))) upara(inode,isp) = species.
f0.flow_h(inode)*vth;
129 if (!std::isfinite(uperp(inode,isp))) uperp(inode,isp) = UPERP_DEFAULT_COEFF*vth;
132 den (inode,isp) = min(max(den (inode,isp),1.0e-2*species.
f0.den_h(inode)),1.0e2*species.
f0.den_h(inode));
133 Kperp (inode,isp) = min(max(Kperp (inode,isp),1.0e-2*t_norm_ev ),1.0e2*t_norm_ev );
134 Kpara (inode,isp) = min(max(Kpara (inode,isp),1.0e-2*t_norm_ev ),1.0e2*t_norm_ev );
135 temp (inode,isp) = min(max(temp (inode,isp),1.0e-2*t_norm_ev ),1.0e2*t_norm_ev );
136 temp_para (inode,isp) = min(max(temp_para (inode,isp),1.0e-2*t_norm_ev ),1.0e2*t_norm_ev );
137 upara (inode,isp) = min(max(upara (inode,isp),-0.75*vgrid.
vp_max*vth ),0.75*vgrid.
vp_max*vth );
138 uperp (inode,isp) = min(max(uperp (inode,isp),0.05*vgrid.
vp_max*vth ),0.75*vgrid.
vp_max*vth );
147 View<int*,CLayout,HostType> cnts(
NoInit(
"cnts"), pol_decomp.mpi.n_plane_ranks);
148 View<int*,CLayout,HostType> displs(
NoInit(
"cnts"), pol_decomp.mpi.n_plane_ranks);
152 for(
int i = 0; i<cnts.size(); i++){
157 int my_send_count = cnts(pol_decomp.mpi.my_plane_rank);
158 MPI_Allgatherv(
den_local.data(), my_send_count, MPI_DOUBLE,
den_all.data(), cnts.data(), displs.data(), MPI_DOUBLE, pol_decomp.mpi.plane_comm);
159 MPI_Allgatherv(
temp_local.data(), my_send_count, MPI_DOUBLE,
temp_all.data(), cnts.data(), displs.data(), MPI_DOUBLE, pol_decomp.mpi.plane_comm);
160 MPI_Allgatherv(
temp_para_local.data(),my_send_count, MPI_DOUBLE,
temp_para_all.data(), cnts.data(), displs.data(), MPI_DOUBLE, pol_decomp.mpi.plane_comm);
161 MPI_Allgatherv(
Kperp_local.data(), my_send_count, MPI_DOUBLE,
temp_perp_all.data(), cnts.data(), displs.data(), MPI_DOUBLE, pol_decomp.mpi.plane_comm);
162 MPI_Allgatherv(
upara_local.data(), my_send_count, MPI_DOUBLE,
upara_all.data(), cnts.data(), displs.data(), MPI_DOUBLE, pol_decomp.mpi.plane_comm);
View< double **, CLayout, HostType > Kperp_local
perpendicular kinetic energy,
Definition: moments.hpp:18
void calculate_moments_of_distribution(const VelocityGrid &vgrid, Plasma &plasma, const VGridDistribution< HostType > &f)
Definition: moments.hpp:58
Moments()
Definition: moments.hpp:28
Distribution< Device > f0
Species distribution in velocity space on local mesh nodes.
Definition: species.hpp:119
int nvp
n points in parallel velocity (not including zero)
Definition: velocity_grid.hpp:9
View< double **, CLayout, HostType > temp_local
temperature,
Definition: moments.hpp:17
View< double **, CLayout, HostType > temp_all
temperature,
Definition: moments.hpp:24
Definition: velocity_grid.hpp:8
View< double **, CLayout, HostType > upara_all
parallel bulk velocity,
Definition: moments.hpp:23
subroutine plasma(grid, itr, p, dene_out, deni_out, Te_out, Ti_out, Vparai_out)
Calculate the plasma density, temperature, and parallel velocity for a point in triangle itr using pl...
Definition: neutral_totalf.F90:1235
Definition: plasma.hpp:94
Definition: moments.hpp:13
int nvr
full grid size (including zero)
Definition: velocity_grid.hpp:19
void for_all_nonadiabatic_species(F func, DevicePtlOpt device_ptl_opt=UseDevicePtl)
Definition: plasma.hpp:113
View< double **, CLayout, HostType > den_all
density,
Definition: moments.hpp:22
int nonadiabatic_idx
Index of species skipping adiabatic species (for compatibility with fortran arrays) ...
Definition: species.hpp:80
View< double **, CLayout, HostType > upara_local
parallel bulk velocity,
Definition: moments.hpp:15
View< double **, CLayout, HostType > Kpara_local
parllel kinetic energy,
Definition: moments.hpp:19
constexpr double J_2_EV
Conversion rate J to ev.
Definition: constants.hpp:6
double mass
Particle mass.
Definition: species.hpp:82
KOKKOS_INLINE_FUNCTION double kinetic_energy(double mass, double v)
Definition: basic_physics.hpp:8
View< double **, CLayout, HostType > temp_perp_all
perpendicular kinetic energy,
Definition: moments.hpp:25
View< double **, CLayout, HostType > den_local
density,
Definition: moments.hpp:14
double vp_max
max parallel velocity
Definition: velocity_grid.hpp:10
KOKKOS_INLINE_FUNCTION double get_f0_eq_thermal_velocity_lnode_h(int inode) const
Definition: species.hpp:730
Definition: plasma.hpp:14
double dsmu
grid spacing in mu
Definition: velocity_grid.hpp:15
View< double **, CLayout, HostType > temp_para_local
parallel temperature,
Definition: moments.hpp:20
void gather(const DomainDecomposition< DeviceType > &pol_decomp)
Definition: moments.hpp:145
void set_mom_module_ptrs(double *den_local_cpp, double *upara_local_cpp, double *uperp_local_cpp, double *temp_local_cpp, double *Kperp_local_cpp, double *Kpara_local_cpp, double *temp_para_local_cpp, double *den_all_cpp, double *temp_all_cpp, double *temp_perp_all_cpp, double *temp_para_all_cpp, double *upara_all_cpp)
View< double **, CLayout, HostType > temp_para_all
parllel kinetic energy,
Definition: moments.hpp:26
Definition: species.hpp:74
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
int nvz
full grid size (including negative and zero)
Definition: velocity_grid.hpp:20
KOKKOS_INLINE_FUNCTION int n_nodes() const
Definition: vgrid_distribution.hpp:157
View< double **, CLayout, HostType > uperp_local
perpendicular bulk velocity,
Definition: moments.hpp:16
Moments(const Grid< DeviceType > &grid, const DomainDecomposition< DeviceType > &pol_decomp, const VelocityGrid &vgrid, Plasma &plasma, const VGridDistribution< HostType > &f, bool do_gather)
Definition: moments.hpp:30
double dvp
grid spacing in parallel velocity
Definition: velocity_grid.hpp:11
Kokkos::ViewAllocateWithoutInitializing NoInit
Definition: space_settings.hpp:68
constexpr double TWOPI
Definition: constants.hpp:9
Kokkos::View< int *, Kokkos::LayoutRight, HostType > gvid0_pid_h
Which processors get which vertices (host)
Definition: domain_decomposition.hpp:45