55 WARPX_PROFILE(
"collision::binarycollision::virtualphotons::GenerateVirtualPhotons()");
58 for (
int i_s = 0; i_s < mypc->
nSpecies(); ++i_s) {
62 if(!primary.has_virtual_photons()){
85 int const nlevs = std::max(0, primary.finestLevel()+1);
86 for (
int lev = 0; lev < nlevs; ++lev) {
88#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
90 for (
amrex::MFIter mfi = primary.MakeMFIter(lev); mfi.isValid(); ++mfi)
94 ParticleTileType& ptile = primary.ParticlesAt(lev, mfi);
102 auto* num_vp_data = num_vp.
dataPtr();
122 amrex::Real r_photons = alpha_over_pi * lny * lny * sampling_factor;
128 num_vp_data[i] = n_photons;
137 auto *
const offset_vp_data = offsets_vp.dataPtr();
142 ParticleTileType& ptile_vp = vphotons.ParticlesAt(lev, mfi);
143 ptile_vp.
resize(total_num_vp);
149#pragma omp critical (virtual_photon_nextid)
152 pid = ParticleTileType::ParticleType::NextID();
153 ParticleTileType::ParticleType::NextID(pid + total_num_vp);
159 auto &soa_vp = ptile_vp.GetStructOfArrays();
167 pa_vp[ia] = soa_vp.GetRealData(ia).
data();
181 amrex::ParticleReal u_primary = std::sqrt(ux_primary*ux_primary + uy_primary*uy_primary + uz_primary*uz_primary);
185 amrex::ParticleReal gamma_primary = std::sqrt( 1.0_rt + (ux_primary*ux_primary + uy_primary*uy_primary + uz_primary*uz_primary)*inv_c2 );
187#if defined (WARPX_DIM_3D)
191#elif defined (WARPX_DIM_XZ)
194#elif defined (WARPX_DIM_RZ)
198#elif defined (WARPX_DIM_1D_Z)
200#elif defined (WARPX_DIM_RCYLINDER)
203#elif defined(WARPX_DIM_RSPHERE)
217 amrex::Real umax = std::log(y_min) * std::log(y_min);
219 for (
int j = 0; j < num_vp_data[i]; j++)
235 pa_vp[
PIdx::ux][ip] = vphoton_energy * nx;
236 pa_vp[
PIdx::uy][ip] = vphoton_energy * ny;
237 pa_vp[
PIdx::uz][ip] = vphoton_energy * nz;
240#if defined (WARPX_DIM_3D)
242 pa_vp[PIdx::y][ip] = y;
244#elif defined (WARPX_DIM_XZ)
247#elif defined (WARPX_DIM_RZ)
250 pa_vp[PIdx::theta][ip] = theta;
251#elif defined (WARPX_DIM_1D_Z)
253#elif defined (WARPX_DIM_RCYLINDER)
255 pa_vp[PIdx::theta][ip] = theta;
256#elif defined(WARPX_DIM_RSPHERE)
258 pa_vp[PIdx::theta][ip] = theta;
259 pa_vp[PIdx::phi][ip] = phi;
261 pa_vp[
PIdx::w][ip] = w / sampling_factor;