8#ifndef WARPX_INJECTOR_MOMENTUM_H_
9#define WARPX_INJECTOR_MOMENTUM_H_
20#include <AMReX_Config.H>
103 int a_flux_normal_axis,
int a_flux_direction) noexcept
131 amrex::Real u = generateGaussianFluxDist(u_m, u_th, engine);
225 amrex::Abort(
"Negative temperature parameter theta encountered, which is not allowed");
229 if (beta <= -1._rt || beta >= 1._rt) {
230 amrex::Abort(
"beta = v/c magnitude greater than or equal to 1");
234 int const dir =
velocity.direction();
240 amrex::Real const gamma = std::sqrt(1._rt + u[0]*u[0]+u[1]*u[1]+u[2]*u[2]);
260 u[dir] = 1._rt/std::sqrt(1._rt-beta*beta)*(u[dir]+gamma*beta);
273 for (
auto& el : u) { el = 0.0_rt; }
275 int const dir =
velocity.direction();
276 const auto gamma = 1._rt/std::sqrt(1._rt-beta*beta);
312 if (theta < 0.1_rt) {
313 amrex::Abort(
"Temperature parameter theta is less than minimum 0.1 allowed for Maxwell-Juttner");
317 if (beta <= -1._rt || beta >= 1._rt) {
318 amrex::Abort(
"beta = v/c magnitude greater than or equal to 1");
320 int const dir =
velocity.direction();
326 while(u[dir]-gamma <= x1)
330 gamma = std::sqrt(1._rt+u[dir]*u[dir]);
339 u[(dir+1)%3] = 2._rt*u[dir]*std::sqrt(x1*(1._rt-x1))*std::sin(2._rt*
MathConst::pi*x2);
340 u[(dir+2)%3] = 2._rt*u[dir]*std::sqrt(x1*(1._rt-x1))*std::cos(2._rt*
MathConst::pi*x2);
342 u[dir] = u[dir]*(2._rt*x1-1._rt);
356 if(-beta*u[dir]/gamma>x1)
363 u[dir] = 1._rt/std::sqrt(1._rt-beta*beta)*(u[dir]+gamma*beta);
376 for (
auto& el : u) { el = 0.0_rt; }
378 int const dir =
velocity.direction();
379 auto const gamma = 1._rt/std::sqrt(1._rt-beta*beta);
475 object(t, a_ux, a_uy, a_uz)
484 object(t, a_ux_parser, a_uy_parser, a_uz_parser)
496 object(t, a_ux_m_parser, a_uy_m_parser, a_uz_m_parser,
497 a_ux_th_parser, a_uy_th_parser, a_uz_th_parser)
505 object(t,a_ux_m,a_uy_m,a_uz_m,a_ux_th,a_uy_th,a_uz_th)
512 int a_flux_normal_axis,
int a_flux_direction)
514 object(t,a_ux_m,a_uy_m,a_uz_m,a_ux_th,a_uy_th,a_uz_th,a_flux_normal_axis,a_flux_direction)
522 object(t,a_ux_min,a_uy_min,a_uz_min,a_ux_max,a_uy_max,a_uz_max)
528 object(t, temperature, velocity)
535 object(t, temperature, velocity)
562 return object.parser.getMomentum(x,y,z,engine);
566 return object.gaussian.getMomentum(x,y,z,engine);
570 return object.gaussianparser.getMomentum(x,y,z,engine);
574 return object.gaussianflux.getMomentum(x,y,z,engine);
578 return object.uniform.getMomentum(x,y,z,engine);
582 return object.boltzmann.getMomentum(x,y,z,engine);
586 return object.juttner.getMomentum(x,y,z,engine);
590 return object.constant.getMomentum(x,y,z,engine);
595 return {0.0,0.0,0.0};
611 return object.parser.getBulkMomentum(x,y,z);
615 return object.gaussian.getBulkMomentum(x,y,z);
619 return object.gaussianparser.getBulkMomentum(x,y,z);
623 return object.gaussianflux.getBulkMomentum(x,y,z);
627 return object.uniform.getBulkMomentum(x,y,z);
631 return object.boltzmann.getBulkMomentum(x,y,z);
635 return object.juttner.getBulkMomentum(x,y,z);
639 return object.constant.getBulkMomentum(x,y,z);
644 return {0.0,0.0,0.0};
664 :
gaussian(a_ux_m,a_uy_m,a_uz_m,a_ux_th,a_uy_th,a_uz_th) {}
669 int a_flux_normal_axis,
int a_flux_direction) noexcept
670 :
gaussianflux(a_ux_m,a_uy_m,a_uz_m,a_ux_th,a_uy_th,a_uz_th,a_flux_normal_axis,a_flux_direction) {}
675 :
uniform(a_ux_min,a_uy_min,a_uz_min,a_ux_max,a_uy_max,a_uz_max) {}
686 :
parser(a_ux_parser, a_uy_parser, a_uz_parser) {}
695 a_ux_th_parser, a_uy_th_parser, a_uz_th_parser) {}
#define AMREX_GPU_HOST_DEVICE
Real RandomNormal(Real mean, Real stddev)
constexpr auto pi
ratio of a circle's circumference to its diameter
Definition constant.H:29
void Abort(const std::string &msg)
Get temperature at a point on the grid.
Definition GetTemperature.H:23
Definition GetVelocity.H:21
Definition InjectorMomentum.H:205
GetTemperature temperature
Definition InjectorMomentum.H:283
GetVelocity velocity
Definition InjectorMomentum.H:282
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real const x, amrex::Real const y, amrex::Real const z, amrex::RandomEngine const &engine) const noexcept
Definition InjectorMomentum.H:216
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real const x, amrex::Real const y, amrex::Real const z) const noexcept
Definition InjectorMomentum.H:269
InjectorMomentumBoltzmann(GetTemperature const &t, GetVelocity const &b) noexcept
Definition InjectorMomentum.H:209
Definition InjectorMomentum.H:34
amrex::Real m_uy
Definition InjectorMomentum.H:56
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real, amrex::Real, amrex::Real) const noexcept
Definition InjectorMomentum.H:50
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real, amrex::Real, amrex::Real, amrex::RandomEngine const &) const noexcept
Definition InjectorMomentum.H:41
amrex::Real m_ux
Definition InjectorMomentum.H:56
InjectorMomentumConstant(amrex::Real a_ux, amrex::Real a_uy, amrex::Real a_uz) noexcept
Definition InjectorMomentum.H:35
amrex::Real m_uz
Definition InjectorMomentum.H:56
Definition InjectorMomentum.H:710
void operator()(InjectorMomentum *p) const
Definition InjectorMomentum.H:711
Definition InjectorMomentum.H:99
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real, amrex::Real, amrex::Real) const noexcept
Definition InjectorMomentum.H:146
amrex::Real m_uy_m
Definition InjectorMomentum.H:152
int m_flux_normal_axis
Definition InjectorMomentum.H:154
amrex::Real m_ux_m
Definition InjectorMomentum.H:152
amrex::Real m_uz_th
Definition InjectorMomentum.H:153
amrex::Real m_ux_th
Definition InjectorMomentum.H:153
amrex::Real m_uy_th
Definition InjectorMomentum.H:153
InjectorMomentumGaussianFlux(amrex::Real a_ux_m, amrex::Real a_uy_m, amrex::Real a_uz_m, amrex::Real a_ux_th, amrex::Real a_uy_th, amrex::Real a_uz_th, int a_flux_normal_axis, int a_flux_direction) noexcept
Definition InjectorMomentum.H:100
amrex::Real m_uz_m
Definition InjectorMomentum.H:152
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real, amrex::Real, amrex::Real, amrex::RandomEngine const &engine) const noexcept
Definition InjectorMomentum.H:114
int m_flux_direction
Definition InjectorMomentum.H:155
Definition InjectorMomentum.H:62
amrex::Real m_uz_m
Definition InjectorMomentum.H:90
amrex::Real m_ux_m
Definition InjectorMomentum.H:90
amrex::Real m_ux_th
Definition InjectorMomentum.H:91
amrex::Real m_uy_th
Definition InjectorMomentum.H:91
amrex::Real m_uy_m
Definition InjectorMomentum.H:90
InjectorMomentumGaussian(amrex::Real a_ux_m, amrex::Real a_uy_m, amrex::Real a_uz_m, amrex::Real a_ux_th, amrex::Real a_uy_th, amrex::Real a_uz_th) noexcept
Definition InjectorMomentum.H:63
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real, amrex::Real, amrex::Real, amrex::RandomEngine const &engine) const noexcept
Definition InjectorMomentum.H:73
amrex::Real m_uz_th
Definition InjectorMomentum.H:91
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real, amrex::Real, amrex::Real) const noexcept
Definition InjectorMomentum.H:84
Definition InjectorMomentum.H:420
InjectorMomentumGaussianParser(amrex::ParserExecutor< 3 > const &a_ux_m_parser, amrex::ParserExecutor< 3 > const &a_uy_m_parser, amrex::ParserExecutor< 3 > const &a_uz_m_parser, amrex::ParserExecutor< 3 > const &a_ux_th_parser, amrex::ParserExecutor< 3 > const &a_uy_th_parser, amrex::ParserExecutor< 3 > const &a_uz_th_parser) noexcept
Definition InjectorMomentum.H:421
amrex::ParserExecutor< 3 > m_ux_th_parser
Definition InjectorMomentum.H:456
amrex::ParserExecutor< 3 > m_uz_m_parser
Definition InjectorMomentum.H:455
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorMomentum.H:450
amrex::ParserExecutor< 3 > m_ux_m_parser
Definition InjectorMomentum.H:455
amrex::ParserExecutor< 3 > m_uy_th_parser
Definition InjectorMomentum.H:456
amrex::ParserExecutor< 3 > m_uz_th_parser
Definition InjectorMomentum.H:456
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real x, amrex::Real y, amrex::Real z, amrex::RandomEngine const &engine) const noexcept
Definition InjectorMomentum.H:433
amrex::ParserExecutor< 3 > m_uy_m_parser
Definition InjectorMomentum.H:455
Definition InjectorMomentum.H:470
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real x, amrex::Real y, amrex::Real z, amrex::RandomEngine const &engine) const noexcept
Definition InjectorMomentum.H:555
Type type
Definition InjectorMomentum.H:650
InjectorMomentum(InjectorMomentum &&)=delete
~InjectorMomentum()=default
InjectorMomentum(InjectorMomentumParser *t, amrex::ParserExecutor< 3 > const &a_ux_parser, amrex::ParserExecutor< 3 > const &a_uy_parser, amrex::ParserExecutor< 3 > const &a_uz_parser)
Definition InjectorMomentum.H:479
void operator=(InjectorMomentum const &)=delete
void clear()
Definition InjectorMomentum.cpp:12
InjectorMomentum(InjectorMomentumConstant *t, amrex::Real a_ux, amrex::Real a_uy, amrex::Real a_uz)
Definition InjectorMomentum.H:472
InjectorMomentum(InjectorMomentum const &)=delete
InjectorMomentum(InjectorMomentumGaussian *t, amrex::Real a_ux_m, amrex::Real a_uy_m, amrex::Real a_uz_m, amrex::Real a_ux_th, amrex::Real a_uy_th, amrex::Real a_uz_th)
Definition InjectorMomentum.H:501
InjectorMomentum(InjectorMomentumUniform *t, amrex::Real a_ux_min, amrex::Real a_uy_min, amrex::Real a_uz_min, amrex::Real a_ux_max, amrex::Real a_uy_max, amrex::Real a_uz_max)
Definition InjectorMomentum.H:518
Type
Definition InjectorMomentum.H:649
@ gaussian
Definition InjectorMomentum.H:649
@ parser
Definition InjectorMomentum.H:649
@ boltzmann
Definition InjectorMomentum.H:649
@ gaussianflux
Definition InjectorMomentum.H:649
@ constant
Definition InjectorMomentum.H:649
@ juttner
Definition InjectorMomentum.H:649
@ uniform
Definition InjectorMomentum.H:649
@ gaussianparser
Definition InjectorMomentum.H:649
Object object
Definition InjectorMomentum.H:705
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorMomentum.H:605
InjectorMomentum(InjectorMomentumGaussianFlux *t, amrex::Real a_ux_m, amrex::Real a_uy_m, amrex::Real a_uz_m, amrex::Real a_ux_th, amrex::Real a_uy_th, amrex::Real a_uz_th, int a_flux_normal_axis, int a_flux_direction)
Definition InjectorMomentum.H:509
InjectorMomentum(InjectorMomentumBoltzmann *t, GetTemperature const &temperature, GetVelocity const &velocity)
Definition InjectorMomentum.H:525
InjectorMomentum(InjectorMomentumJuttner *t, GetTemperature const &temperature, GetVelocity const &velocity)
Definition InjectorMomentum.H:532
InjectorMomentum(InjectorMomentumGaussianParser *t, amrex::ParserExecutor< 3 > const &a_ux_m_parser, amrex::ParserExecutor< 3 > const &a_uy_m_parser, amrex::ParserExecutor< 3 > const &a_uz_m_parser, amrex::ParserExecutor< 3 > const &a_ux_th_parser, amrex::ParserExecutor< 3 > const &a_uy_th_parser, amrex::ParserExecutor< 3 > const &a_uz_th_parser)
Definition InjectorMomentum.H:488
Definition InjectorMomentum.H:290
GetVelocity velocity
Definition InjectorMomentum.H:385
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real const x, amrex::Real const y, amrex::Real const z) const noexcept
Definition InjectorMomentum.H:372
GetTemperature temperature
Definition InjectorMomentum.H:386
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real const x, amrex::Real const y, amrex::Real const z, amrex::RandomEngine const &engine) const noexcept
Definition InjectorMomentum.H:301
InjectorMomentumJuttner(GetTemperature const &t, GetVelocity const &b) noexcept
Definition InjectorMomentum.H:294
Definition InjectorMomentum.H:391
AMREX_GPU_HOST_DEVICE amrex::XDim3 getMomentum(amrex::Real x, amrex::Real y, amrex::Real z, amrex::RandomEngine const &) const noexcept
Definition InjectorMomentum.H:401
InjectorMomentumParser(amrex::ParserExecutor< 3 > const &a_ux_parser, amrex::ParserExecutor< 3 > const &a_uy_parser, amrex::ParserExecutor< 3 > const &a_uz_parser) noexcept
Definition InjectorMomentum.H:392
amrex::ParserExecutor< 3 > m_uz_parser
Definition InjectorMomentum.H:415
AMREX_GPU_HOST_DEVICE amrex::XDim3 getBulkMomentum(amrex::Real x, amrex::Real y, amrex::Real z) const noexcept
Definition InjectorMomentum.H:410
amrex::ParserExecutor< 3 > m_uy_parser
Definition InjectorMomentum.H:415
amrex::ParserExecutor< 3 > m_ux_parser
Definition InjectorMomentum.H:415
Definition InjectorMomentum.H:656
InjectorMomentumGaussian gaussian
Definition InjectorMomentum.H:697
InjectorMomentumUniform uniform
Definition InjectorMomentum.H:699
Object(InjectorMomentumGaussianFlux *, amrex::Real a_ux_m, amrex::Real a_uy_m, amrex::Real a_uz_m, amrex::Real a_ux_th, amrex::Real a_uy_th, amrex::Real a_uz_th, int a_flux_normal_axis, int a_flux_direction) noexcept
Definition InjectorMomentum.H:665
Object(InjectorMomentumBoltzmann *, GetTemperature const &t, GetVelocity const &b) noexcept
Definition InjectorMomentum.H:676
Object(InjectorMomentumParser *, amrex::ParserExecutor< 3 > const &a_ux_parser, amrex::ParserExecutor< 3 > const &a_uy_parser, amrex::ParserExecutor< 3 > const &a_uz_parser) noexcept
Definition InjectorMomentum.H:682
InjectorMomentumGaussianParser gaussianparser
Definition InjectorMomentum.H:703
InjectorMomentumJuttner juttner
Definition InjectorMomentum.H:701
Object(InjectorMomentumUniform *, amrex::Real a_ux_min, amrex::Real a_uy_min, amrex::Real a_uz_min, amrex::Real a_ux_max, amrex::Real a_uy_max, amrex::Real a_uz_max) noexcept
Definition InjectorMomentum.H:671
InjectorMomentumBoltzmann boltzmann
Definition InjectorMomentum.H:700
InjectorMomentumGaussianFlux gaussianflux
Definition InjectorMomentum.H:698
Object(InjectorMomentumJuttner *, GetTemperature const &t, GetVelocity const &b) noexcept
Definition InjectorMomentum.H:679
Object(InjectorMomentumGaussian *, amrex::Real a_ux_m, amrex::Real a_uy_m, amrex::Real a_uz_m, amrex::Real a_ux_th, amrex::Real a_uy_th, amrex::Real a_uz_th) noexcept
Definition InjectorMomentum.H:660
InjectorMomentumParser parser
Definition InjectorMomentum.H:702
InjectorMomentumConstant constant
Definition InjectorMomentum.H:696
Object(InjectorMomentumGaussianParser *, amrex::ParserExecutor< 3 > const &a_ux_m_parser, amrex::ParserExecutor< 3 > const &a_uy_m_parser, amrex::ParserExecutor< 3 > const &a_uz_m_parser, amrex::ParserExecutor< 3 > const &a_ux_th_parser, amrex::ParserExecutor< 3 > const &a_uy_th_parser, amrex::ParserExecutor< 3 > const &a_uz_th_parser) noexcept
Definition InjectorMomentum.H:687
Object(InjectorMomentumConstant *, amrex::Real a_ux, amrex::Real a_uy, amrex::Real a_uz) noexcept
Definition InjectorMomentum.H:657