56 WARPX_PROFILE(
"collision::binarycollision::virtualphotons::GenerateVirtualPhotons()");
59 for (
int i_s = 0; i_s < mypc->
nSpecies(); ++i_s) {
63 if(!primary.has_virtual_photons()){
86 int const nlevs = std::max(0, primary.finestLevel()+1);
87 for (
int lev = 0; lev < nlevs; ++lev) {
89#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
91 for (
amrex::MFIter mfi = primary.MakeMFIter(lev); mfi.isValid(); ++mfi)
95 ParticleTileType& ptile = primary.ParticlesAt(lev, mfi);
103 auto* num_vp_data = num_vp.
dataPtr();
123 amrex::Real r_photons = alpha_over_pi * lny * lny * sampling_factor;
129 num_vp_data[i] = n_photons;
138 auto *
const offset_vp_data = offsets_vp.dataPtr();
143 ParticleTileType& ptile_vp = vphotons.ParticlesAt(lev, mfi);
144 ptile_vp.
resize(total_num_vp);
150#pragma omp critical (virtual_photon_nextid)
153 pid = ParticleTileType::ParticleType::NextID();
154 ParticleTileType::ParticleType::NextID(pid + total_num_vp);
160 auto &soa_vp = ptile_vp.GetStructOfArrays();
168 pa_vp[ia] = soa_vp.GetRealData(ia).
data();
182 amrex::ParticleReal u_primary = std::sqrt(ux_primary*ux_primary + uy_primary*uy_primary + uz_primary*uz_primary);
186 amrex::ParticleReal gamma_primary = std::sqrt( 1.0_rt + (ux_primary*ux_primary + uy_primary*uy_primary + uz_primary*uz_primary)*inv_c2 );
188#if defined (WARPX_DIM_3D)
192#elif defined (WARPX_DIM_XZ)
195#elif defined (WARPX_DIM_RZ)
199#elif defined (WARPX_DIM_1D_Z)
201#elif defined (WARPX_DIM_RCYLINDER)
204#elif defined(WARPX_DIM_RSPHERE)
218 amrex::Real umax = std::log(y_min) * std::log(y_min);
220 for (
int j = 0; j < num_vp_data[i]; j++)
236 pa_vp[
PIdx::ux][ip] = vphoton_energy * nx;
237 pa_vp[
PIdx::uy][ip] = vphoton_energy * ny;
238 pa_vp[
PIdx::uz][ip] = vphoton_energy * nz;
241#if defined (WARPX_DIM_3D)
243 pa_vp[PIdx::y][ip] = y;
245#elif defined (WARPX_DIM_XZ)
248#elif defined (WARPX_DIM_RZ)
251 pa_vp[PIdx::theta][ip] = theta;
252#elif defined (WARPX_DIM_1D_Z)
254#elif defined (WARPX_DIM_RCYLINDER)
256 pa_vp[PIdx::theta][ip] = theta;
257#elif defined(WARPX_DIM_RSPHERE)
259 pa_vp[PIdx::theta][ip] = theta;
260 pa_vp[PIdx::phi][ip] = phi;
262 pa_vp[
PIdx::w][ip] = w / sampling_factor;