WarpX
Loading...
Searching...
No Matches
LinearBreitWheelerInitializeMomentum.H
Go to the documentation of this file.
1/* Copyright 2023 Arianna Formenti
2 *
3 * This file is part of WarpX.
4 *
5 * License: BSD-3-Clause-LBNL
6 */
7
8#ifndef LINEAR_BREIT_WHEELER_INITIALIZE_MOMENTUM_H
9#define LINEAR_BREIT_WHEELER_INITIALIZE_MOMENTUM_H
10
13#include "Utils/ParticleUtils.H"
14#include "Utils/WarpXConst.H"
15
16#include <AMReX_DenseBins.H>
17#include <AMReX_Random.H>
18#include <AMReX_REAL.H>
19
20#include <cmath>
21#include <limits>
22
23namespace {
24 // Define shortcuts for frequently-used type names
25 using SoaData_type = WarpXParticleContainer::ParticleTileType::ParticleTileDataType;
28 using ParticleTileDataType = ParticleTileType::ParticleTileDataType;
30 using index_type = ParticleBins::index_type;
31
50 void LinearBreitWheelerInitializeMomentum (
51 const SoaData_type& soa1_in, const SoaData_type& soa2_in,
52 SoaData_type& soa1_out, SoaData_type& soa2_out,
53 const index_type& idx1_in, const index_type& idx2_in,
54 const index_type& idx1_out_start, const index_type& idx2_out_start,
55 const amrex::RandomEngine& engine)
56 {
57 using namespace amrex::literals;
58
59 amrex::ParticleReal ux1_out = 0.0_prt, uy1_out = 0.0_prt, uz1_out = 0.0_prt;
60 amrex::ParticleReal ux2_out = 0.0_prt, uy2_out = 0.0_prt, uz2_out = 0.0_prt;
61
62 LinearBreitWheelerComputeProductMomenta(
63 soa1_in.m_rdata[PIdx::ux][idx1_in],
64 soa1_in.m_rdata[PIdx::uy][idx1_in],
65 soa1_in.m_rdata[PIdx::uz][idx1_in],
66 soa2_in.m_rdata[PIdx::ux][idx2_in],
67 soa2_in.m_rdata[PIdx::uy][idx2_in],
68 soa2_in.m_rdata[PIdx::uz][idx2_in],
69 ux1_out, uy1_out, uz1_out,
70 ux2_out, uy2_out, uz2_out,
71 engine);
72
73 // Fill momentum of product species (note that we actually
74 // create 4 products, 2 at the position of each incident particle)
75 soa1_out.m_rdata[PIdx::ux][idx1_out_start] = ux1_out;
76 soa1_out.m_rdata[PIdx::uy][idx1_out_start] = uy1_out;
77 soa1_out.m_rdata[PIdx::uz][idx1_out_start] = uz1_out;
78 soa1_out.m_rdata[PIdx::ux][idx1_out_start + 1] = ux1_out;
79 soa1_out.m_rdata[PIdx::uy][idx1_out_start + 1] = uy1_out;
80 soa1_out.m_rdata[PIdx::uz][idx1_out_start + 1] = uz1_out;
81 soa2_out.m_rdata[PIdx::ux][idx2_out_start] = ux2_out;
82 soa2_out.m_rdata[PIdx::uy][idx2_out_start] = uy2_out;
83 soa2_out.m_rdata[PIdx::uz][idx2_out_start] = uz2_out;
84 soa2_out.m_rdata[PIdx::ux][idx2_out_start + 1] = ux2_out;
85 soa2_out.m_rdata[PIdx::uy][idx2_out_start + 1] = uy2_out;
86 soa2_out.m_rdata[PIdx::uz][idx2_out_start + 1] = uz2_out;
87 }
88}
89
90#endif // LINEAR_BREIT_WHEELER_INITIALIZE_MOMENTUM_H
#define AMREX_INLINE
#define AMREX_GPU_HOST_DEVICE
typename WarpXParticleContainer::ParticleTileType ParticleTileType
Definition ParticleUtils.H:22
DenseBins< ParticleTileDataType > ParticleBins
Definition ParticleUtils.cpp:30
typename WarpXParticleContainer::ParticleType ParticleType
Definition ParticleUtils.cpp:29
typename ParticleTileType::ParticleTileDataType ParticleTileDataType
Definition ParticleUtils.H:23
@ uz
Definition WarpXParticleContainer.H:70
@ uy
Definition WarpXParticleContainer.H:70
@ ux
Definition WarpXParticleContainer.H:70