Hipace
Public Member Functions | Public Attributes | Private Attributes | Static Private Attributes | List of all members
PlasmaParticleContainer Class Reference

Container for particles of 1 plasma species. More...

#include <PlasmaParticleContainer.H>

Inheritance diagram for PlasmaParticleContainer:
amrex::ParticleContainer_impl< class, T_NArrayReal, T_NArrayInt, Allocator, class > amrex::ParticleContainerBase

Public Member Functions

 PlasmaParticleContainer (std::string name)
 
void ReadParameters ()
 
void InitData (const amrex::Geometry &geom)
 
void InitParticles (const amrex::RealVect &a_thermal_momentum_std, const amrex::RealVect &a_thermal_momentum_mean, const amrex::Real a_radius, const amrex::Real a_hollow_core_radius)
 
void InitIonizationModule (const amrex::Geometry &geom, PlasmaParticleContainer *product_pc, const amrex::Real background_density_SI)
 
void IonizationModule (const int lev, const amrex::Geometry &geom, const Fields &fields, const amrex::Real background_density_SI)
 
void ReorderParticles (const int islice)
 
void UpdateDensityFunction (const amrex::Real pos_z)
 
void TagByLevel (const int current_N_level, amrex::Vector< amrex::Geometry > const &geom3D, const bool to_prev=false)
 Store the finest level of every plasma particle in the cpu() attribute. More...
 
amrex::RealVect GetUMean () const
 
amrex::RealVect GetUStd () const
 
amrex::Real GetCharge () const
 
amrex::Real GetMass () const
 
const std::string & GetName () const
 
void InSituComputeDiags (int islice)
 
void InSituWriteToFile (int step, amrex::Real time, const amrex::Geometry &geom)
 
- Public Member Functions inherited from amrex::ParticleContainer_impl< class, T_NArrayReal, T_NArrayInt, Allocator, class >
 ParticleContainer_impl ()
 
 ParticleContainer_impl (ParGDBBase *gdb)
 
 ParticleContainer_impl (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
 
 ParticleContainer_impl (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
 
 ParticleContainer_impl (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
 
 ~ParticleContainer_impl () override=default
 
 ParticleContainer_impl (const ParticleContainer_impl &)=delete
 
ParticleContainer_imploperator= (const ParticleContainer_impl &)=delete
 
 ParticleContainer_impl (ParticleContainer_impl &&) noexcept=default
 
ParticleContainer_imploperator= (ParticleContainer_impl &&) noexcept=default
 
void Define (ParGDBBase *gdb)
 
void Define (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
 
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
 
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
 
int numLocalTilesAtLevel (int lev) const
 
void reserveData () override
 
void resizeData () override
 
void InitFromAsciiFile (const std::string &file, int extradata, const IntVect *Nrep=nullptr)
 
void InitFromBinaryFile (const std::string &file, int extradata)
 
void InitFromBinaryMetaFile (const std::string &file, int extradata)
 
void InitRandom (Long icount, ULong iseed, const ParticleInitData &pdata, bool serialize=false, RealBox bx=RealBox())
 
void InitRandomPerBox (Long icount, ULong iseed, const ParticleInitData &pdata)
 
void InitOnePerCell (Real x_off, Real y_off, Real z_off, const ParticleInitData &pdata)
 
void InitNRandomPerCell (int n_per_cell, const ParticleInitData &pdata)
 
void Increment (MultiFab &mf, int level)
 
Long IncrementWithTotal (MultiFab &mf, int level, bool local=false)
 
void Redistribute (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
 
void ReorderParticles (int lev, const MFIter &mfi, const index_type *permutations)
 
void SortParticlesForDeposition (IntVect idx_type)
 
void SortParticlesByCell ()
 
void SortParticlesByBin (IntVect bin_size)
 
bool OK (int lev_min=0, int lev_max=-1, int nGrow=0) const
 
std::array< Long, 3 > ByteSpread () const
 
std::array< Long, 3 > PrintCapacity () const
 
void ShrinkToFit ()
 
Long NumberOfParticlesAtLevel (int level, bool only_valid=true, bool only_local=false) const
 
Vector< Long > NumberOfParticlesInGrid (int level, bool only_valid=true, bool only_local=false) const
 
Long TotalNumberOfParticles (bool only_valid=true, bool only_local=false) const
 
void RemoveParticlesAtLevel (int level)
 
void RemoveParticlesNotAtFinestLevel ()
 
void CreateVirtualParticles (int level, AoS &virts) const
 
void CreateGhostParticles (int level, int ngrow, AoS &ghosts) const
 
void AddParticlesAtLevel (AoS &particles, int level, int nGrow=0)
 
void CreateVirtualParticles (int level, ParticleTileType &virts) const
 
void CreateGhostParticles (int level, int ngrow, ParticleTileType &ghosts) const
 
void AddParticlesAtLevel (ParticleTileType &particles, int level, int nGrow=0)
 
void clearParticles ()
 
void copyParticles (const PCType &other, bool local=false)
 
void addParticles (const PCType &other, bool local=false)
 
void copyParticles (const PCType &other, F &&f, bool local=false)
 
void addParticles (const PCType &other, F &&f, bool local=false)
 
void WriteParticleRealData (void *data, size_t size, std::ostream &os) const
 
void ReadParticleRealData (void *data, size_t size, std::istream &is)
 
void Checkpoint (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
 
void Checkpoint (const std::string &dir, const std::string &name, bool is_checkpoint, const Vector< std::string > &real_comp_names=Vector< std::string >(), const Vector< std::string > &int_comp_names=Vector< std::string >()) const
 
void WriteBinaryParticleData (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f, bool is_checkpoint=false) const
 
void CheckpointPre ()
 
void CheckpointPost ()
 
void Restart (const std::string &dir, const std::string &file)
 
void Restart (const std::string &dir, const std::string &file, bool is_checkpoint)
 
void WritePlotFile (const std::string &dir, const std::string &name) const
 
void WritePlotFile (const std::string &dir, const std::string &name, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f) const
 
void WritePlotFilePre ()
 
void WritePlotFilePost ()
 
void WriteAsciiFile (const std::string &file)
 
const Vector< ParticleLevel > & GetParticles () const
 
Vector< ParticleLevel > & GetParticles ()
 
const ParticleLevelGetParticles (int lev) const
 
ParticleLevelGetParticles (int lev)
 
const ParticleTileTypeParticlesAt (int lev, int grid, int tile) const
 
ParticleTileTypeParticlesAt (int lev, int grid, int tile)
 
const ParticleTileTypeParticlesAt (int lev, const Iterator &iter) const
 
ParticleTileTypeParticlesAt (int lev, const Iterator &iter)
 
ParticleTileTypeDefineAndReturnParticleTile (int lev, int grid, int tile)
 
ParticleTileTypeDefineAndReturnParticleTile (int lev, const Iterator &iter)
 
void AssignDensity (int rho_index, Vector< std::unique_ptr< MultiFab > > &mf_to_be_filled, int lev_min, int ncomp, int finest_level, int ngrow=2) const
 
void AssignCellDensitySingleLevel (int rho_index, MultiFab &mf, int level, int ncomp=1, int particle_lvl_offset=0) const
 
IntVect Index (const P &p, int lev) const
 
ParticleLocData Reset (ParticleType &prt, bool update, bool verbose=true, ParticleLocData pld=ParticleLocData()) const
 
bool PeriodicShift (P &p) const
 
void SetLevelDirectoriesCreated (bool tf)
 
bool GetLevelDirectoriesCreated () const
 
void SetUsePrePost (bool tf) const
 
bool GetUsePrePost () const
 
int GetMaxNextIDPrePost () const
 
Long GetNParticlesPrePost () const
 
void SetUseUnlink (bool tf) const
 
bool GetUseUnlink () const
 
void RedistributeCPU (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
 
void RedistributeGPU (int lev_min=0, int lev_max=-1, int nGrow=0, int local=0, bool remove_negative=true)
 
Long superParticleSize () const
 
void AddRealComp (T communicate=true)
 
void AddIntComp (T communicate=true)
 
int NumRuntimeRealComps () const
 
int NumRuntimeIntComps () const
 
int NumRealComps () const
 
int NumIntComps () const
 
void ResizeRuntimeRealComp (int new_size, bool communicate)
 
void ResizeRuntimeIntComp (int new_size, bool communicate)
 
ContainerLike< NewAllocator > make_alike () const
 
void WriteParticles (int level, std::ofstream &ofs, int fnum, Vector< int > &which, Vector< int > &count, Vector< Long > &where, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::map< std::pair< int, int >, IntVector >> &particle_io_flags, bool is_checkpoint) const
 
IntVect Index (const P &p, int lev) const
 
bool Where (const P &p, ParticleLocData &pld, int lev_min, int lev_max, int nGrow, int local_grid) const
 
bool EnforcePeriodicWhere (P &p, ParticleLocData &pld, int lev_min, int lev_max, int local_grid) const
 
bool PeriodicShift (P &p) const
 
void locateParticle (P &p, ParticleLocData &pld, int lev_min, int lev_max, int nGrow, int local_grid) const
 
void copyParticles (const PCType &other, bool local)
 
void addParticles (const PCType &other, bool local)
 
void copyParticles (const PCType &other, F &&f, bool local)
 
void addParticles (const PCType &other, F &&f, bool local)
 
void ReorderParticles (int lev, const MFIter &mfi, const index_type *permutations)
 
void WritePlotFile (const std::string &dir, const std::string &name, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< std::string > &real_comp_names, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, F &&f) const
 
void WritePlotFile (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f) const
 
void WriteBinaryParticleData (const std::string &dir, const std::string &name, const Vector< int > &write_real_comp, const Vector< int > &write_int_comp, const Vector< std::string > &real_comp_names, const Vector< std::string > &int_comp_names, F &&f, bool is_checkpoint) const
 
void ReadParticles (int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
 
- Public Member Functions inherited from amrex::ParticleContainerBase
 ParticleContainerBase ()=default
 
 ParticleContainerBase (ParGDBBase *gdb)
 
 ParticleContainerBase (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
 
 ParticleContainerBase (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
 
 ParticleContainerBase (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
 
virtual ~ParticleContainerBase ()=default
 
 ParticleContainerBase (const ParticleContainerBase &)=delete
 
ParticleContainerBaseoperator= (const ParticleContainerBase &)=delete
 
 ParticleContainerBase (ParticleContainerBase &&)=default
 
ParticleContainerBaseoperator= (ParticleContainerBase &&)=default
 
void Define (ParGDBBase *gdb)
 
void Define (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
 
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
 
void Define (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
 
bool isDefined () const
 
void RedefineDummyMF (int lev)
 
MFIter MakeMFIter (int lev, const MFItInfo &info) const
 
MFIter MakeMFIter (int lev) const
 
MFIter MakeMFIter (int lev, bool tile) const
 
void SetParGDB (const Geometry &geom, const DistributionMapping &dmap, const BoxArray &ba)
 
void SetParGDB (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< IntVect > &rr)
 
void SetParGDB (const Vector< Geometry > &geom, const Vector< DistributionMapping > &dmap, const Vector< BoxArray > &ba, const Vector< int > &rr)
 
void SetParticleBoxArray (int lev, BoxArray new_ba)
 
void SetParticleDistributionMap (int lev, DistributionMapping new_dmap)
 
void SetParticleGeometry (int lev, Geometry new_geom)
 
const BoxArrayParticleBoxArray (int lev) const
 
const DistributionMappingParticleDistributionMap (int lev) const
 
const GeometryGeom (int lev) const
 
const GeometryParticleGeom (int lev) const
 
int finestLevel () const
 
int maxLevel () const
 
int numLevels () const
 
const ParGDBBaseGetParGDB () const
 
ParGDBBaseGetParGDB ()
 
int Verbose () const
 
void SetVerbose (int verbose)
 
const ParticleBufferMapBufferMap () const
 
Vector< intNeighborProcs (int ngrow) const
 
bool OnSameGrids (int level, const MF &mf) const
 

Public Attributes

amrex::Parser m_parser
 
amrex::ParserExecutor< 3 > m_density_func
 
amrex::Real m_min_density {0.}
 
bool m_use_density_table
 
std::map< amrex::Real, std::string > m_density_table
 
bool m_do_symmetrize = false
 
amrex::Real m_max_qsa_weighting_factor {35.}
 
amrex::Real m_radius {std::numeric_limits<amrex::Real>::infinity()}
 
amrex::Real m_insitu_radius {std::numeric_limits<amrex::Real>::infinity()}
 
amrex::Real m_hollow_core_radius {0.}
 
bool m_use_fine_patch = false
 
int m_fine_transition_cells = 5
 
amrex::Parser m_parser_fine_patch
 
amrex::ParserExecutor< 2 > m_fine_patch_func
 
amrex::Array< int, 2 > m_ppc {0,0}
 
amrex::Array< int, 2 > m_ppc_fine {0,0}
 
amrex::RealVect m_u_mean {0,0,0}
 
amrex::RealVect m_u_std {0,0,0}
 
amrex::Real m_temperature_in_ev {0.}
 
bool m_neutralize_background = true
 
amrex::Real m_mass = 0
 
amrex::Real m_charge = 0
 
int m_init_ion_lev = -1
 
int m_n_subcycles = 1
 
bool m_can_ionize = false
 
std::string m_product_name = ""
 
PlasmaParticleContainerm_product_pc = nullptr
 
amrex::Gpu::DeviceVector< amrex::Real > m_adk_prefactor
 
amrex::Gpu::DeviceVector< amrex::Real > m_adk_exp_prefactor
 
amrex::Gpu::DeviceVector< amrex::Real > m_adk_power
 
int m_reorder_period = 0
 
amrex::IntVect m_reorder_idx_type = {0, 0, 0}
 
int m_insitu_period {0}
 
- Public Attributes inherited from amrex::ParticleContainer_impl< class, T_NArrayReal, T_NArrayInt, Allocator, class >
RealDescriptor ParticleRealDescriptor
 
Vector< inth_redistribute_real_comp
 
Vector< inth_redistribute_int_comp
 
bool levelDirectoriesCreated
 
bool usePrePost
 
bool doUnlink
 
int maxnextidPrePost
 
int nOutFilesPrePost
 
Long nparticlesPrePost
 
Vector< Long > nParticlesAtLevelPrePost
 
Vector< Vector< int > > whichPrePost
 
Vector< Vector< int > > countPrePost
 
Vector< Vector< Long > > wherePrePost
 
std::string HdrFileNamePrePost
 
Vector< std::string > filePrefixPrePost
 
- Public Attributes inherited from amrex::ParticleContainerBase
AmrParticleLocator< DenseBins< Box > > m_particle_locator
 

Private Attributes

std::string m_name
 
int m_nslices
 
amrex::Vector< amrex::Real > m_insitu_rdata
 
amrex::Vector< intm_insitu_idata
 
amrex::Vector< amrex::Real > m_insitu_sum_rdata
 
amrex::Vector< intm_insitu_sum_idata
 
std::string m_insitu_file_prefix = "diags/plasma_insitu"
 

Static Private Attributes

static constexpr int m_insitu_nrp = 14
 
static constexpr int m_insitu_nip = 1
 

Additional Inherited Members

- Public Types inherited from amrex::ParticleContainer_impl< class, T_NArrayReal, T_NArrayInt, Allocator, class >
typedef T_ParticleType ParticleType
 
typedef typename ParticleType::ConstType ConstParticleType
 
typedef T_CellAssignor CellAssignor
 
typedef Allocator< T > AllocatorType
 
typedef Particle< NStructReal+NArrayReal, NStructInt+NArrayIntSuperParticleType
 
typedef typename Particle< NStructReal, NStructInt >::RealType RealType
 
typedef ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignorParticleContainerType
 
typedef ParticleTile< ParticleType, NArrayReal, NArrayInt, Allocator > ParticleTileType
 
typedef ParticleInitType< NStructReal, NStructInt, NArrayReal, NArrayIntParticleInitData
 
typedef std::map< std::pair< int, int >, ParticleTileTypeParticleLevel
 
typedef typename ParticleTileType::AoS AoS
 
typedef typename ParticleTileType::SoA SoA
 
typedef typename SoA::RealVector RealVector
 
typedef typename SoA::IntVector IntVector
 
typedef typename AoS::ParticleVector ParticleVector
 
typedef Gpu::DeviceVector< char > CharVector
 
typedef ParIter_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignorParIterType
 
typedef ParConstIter_impl< ParticleType, NArrayReal, NArrayInt, Allocator, CellAssignorParConstIterType
 
typedef amrex::ParticleContainer_impl< ParticleType, NArrayReal, NArrayInt, NewAllocator > ContainerLike
 
- Static Public Member Functions inherited from amrex::ParticleContainerBase
static const std::string & CheckpointVersion ()
 
static const std::string & PlotfileVersion ()
 
static const std::string & DataPrefix ()
 
static int MaxReaders ()
 
static Long MaxParticlesPerRead ()
 
static const std::string & AggregationType ()
 
static int AggregationBuffer ()
 
- Static Public Attributes inherited from amrex::ParticleContainer_impl< class, T_NArrayReal, T_NArrayInt, Allocator, class >
static constexpr int NStructReal
 
static constexpr int NStructInt
 
static constexpr int NArrayReal
 
static constexpr int NArrayInt
 
- Static Public Attributes inherited from amrex::ParticleContainerBase
static AMREX_EXPORT bool do_tiling
 
static AMREX_EXPORT IntVect tile_size
 
static AMREX_EXPORT bool memEfficientSort
 
- Protected Member Functions inherited from amrex::ParticleContainer_impl< class, T_NArrayReal, T_NArrayInt, Allocator, class >
bool Where (const P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int nGrow=0, int local_grid=-1) const
 
bool EnforcePeriodicWhere (P &prt, ParticleLocData &pld, int lev_min=0, int lev_max=-1, int local_grid=-1) const
 
void ReadParticles (int cnt, int grd, int lev, std::ifstream &ifs, int finest_level_in_file, bool convert_ids)
 
void SetParticleSize ()
 
- Protected Member Functions inherited from amrex::ParticleContainerBase
void BuildRedistributeMask (int lev, int nghost=1) const
 
void defineBufferMap () const
 
- Protected Attributes inherited from amrex::ParticleContainer_impl< class, T_NArrayReal, T_NArrayInt, Allocator, class >
DenseBins< typename ParticleTileType::ParticleTileDataTypem_bins
 
- Protected Attributes inherited from amrex::ParticleContainerBase
int m_verbose
 
std::unique_ptr< ParGDBm_gdb_object
 
ParGDBBasem_gdb
 
Vector< std::unique_ptr< MultiFab > > m_dummy_mf
 
std::unique_ptr< iMultiFabredistribute_mask_ptr
 
int redistribute_mask_nghost
 
amrex::Vector< intneighbor_procs
 
ParticleBufferMap m_buffer_map
 

Detailed Description

Container for particles of 1 plasma species.

Constructor & Destructor Documentation

◆ PlasmaParticleContainer()

PlasmaParticleContainer::PlasmaParticleContainer ( std::string  name)
inlineexplicit

Constructor

Member Function Documentation

◆ GetCharge()

amrex::Real PlasmaParticleContainer::GetCharge ( ) const
inline

Returns elementary charge q_e (or -q_e for electrons). TODO: for collisions, return the charge of the fully-ionized atom (atomic number * elementary charge)

◆ GetMass()

amrex::Real PlasmaParticleContainer::GetMass ( ) const
inline

Returns mass of physical species

◆ GetName()

const std::string& PlasmaParticleContainer::GetName ( ) const
inline

Returns name of the plasma

◆ GetUMean()

amrex::RealVect PlasmaParticleContainer::GetUMean ( ) const
inline

returns u_mean of the plasma distribution

◆ GetUStd()

amrex::RealVect PlasmaParticleContainer::GetUStd ( ) const
inline

returns u_std of the plasma distribution

◆ InitData()

void PlasmaParticleContainer::InitData ( const amrex::Geometry geom)

Allocate data for the beam particles and initialize particles with requested beam profile

Parameters
[in]geomGeometry object for the whole domain

◆ InitIonizationModule()

void PlasmaParticleContainer::InitIonizationModule ( const amrex::Geometry geom,
PlasmaParticleContainer product_pc,
const amrex::Real  background_density_SI 
)

Initialize ADK prefactors of ionizable plasmas

Parameters
[in]geomGeometry of the simulation, to get the cell size
[in]product_pcThe electron plasma PC that this Ion Plasma ionizes to
[in]background_density_SIbackground plasma density (only needed for normalized units)

◆ InitParticles()

void PlasmaParticleContainer::InitParticles ( const amrex::RealVect a_thermal_momentum_std,
const amrex::RealVect a_thermal_momentum_mean,
const amrex::Real  a_radius,
const amrex::Real  a_hollow_core_radius 
)

Initialize 1 xy slice of particles, with fixed number of particles per cell

Parameters
[in]a_thermal_momentum_stdstandard deviation of the momentum distribution (3d)
[in]a_thermal_momentum_meanaverage momentum (3d)
[in]a_radiusplasma radius. Only particles with x**2+y**2<a_radius**2 are injected
[in]a_hollow_core_radiushollow core plasma radius. Only particles with x**2+y**2>a_hollow_core_radius**2 are injected

◆ InSituComputeDiags()

void PlasmaParticleContainer::InSituComputeDiags ( int  islice)

Compute in-situ plasma diagnostics of current slice, store in member variable

Parameters
[in]islicecurrent slice, on which diags are computed.

◆ InSituWriteToFile()

void PlasmaParticleContainer::InSituWriteToFile ( int  step,
amrex::Real  time,
const amrex::Geometry geom 
)

Dump in-situ reduced diagnostics to file.

Parameters
[in]stepcurrent time step
[in]timephysical time
[in]geomGeometry object for the whole domain

◆ IonizationModule()

void PlasmaParticleContainer::IonizationModule ( const int  lev,
const amrex::Geometry geom,
const Fields fields,
const amrex::Real  background_density_SI 
)

Calculates Ionization Probability and generates new Plasma Particles

Parameters
[in]levMR level
[in]geomGeometry of the simulation, to get the cell size
[in]fieldsthe general field class
[in]background_density_SIbackground plasma density (only needed for normalized units)

◆ ReadParameters()

void PlasmaParticleContainer::ReadParameters ( )

Read parameters from the input file

◆ ReorderParticles()

void PlasmaParticleContainer::ReorderParticles ( const int  islice)

Reorder particles to speed-up current deposition

Parameters
[in]islicezeta slice index

◆ TagByLevel()

void PlasmaParticleContainer::TagByLevel ( const int  current_N_level,
amrex::Vector< amrex::Geometry > const &  geom3D,
const bool  to_prev = false 
)

Store the finest level of every plasma particle in the cpu() attribute.

Parameters
[in]current_N_levelnumber of MR levels active on the current slice
[in]geom3DGeometry object for the whole domain
[in]to_previf particles should be tagged to x_prev and y_prev

◆ UpdateDensityFunction()

void PlasmaParticleContainer::UpdateDensityFunction ( const amrex::Real  pos_z)

Update m_density_func with m_density_table if applicable

Parameters
[in]pos_zz position to evaluate m_density_table

Member Data Documentation

◆ m_adk_exp_prefactor

amrex::Gpu::DeviceVector<amrex::Real> PlasmaParticleContainer::m_adk_exp_prefactor

to calculate Ionization probability with ADK formula

◆ m_adk_power

amrex::Gpu::DeviceVector<amrex::Real> PlasmaParticleContainer::m_adk_power

to calculate Ionization probability with ADK formula

◆ m_adk_prefactor

amrex::Gpu::DeviceVector<amrex::Real> PlasmaParticleContainer::m_adk_prefactor

to calculate Ionization probability with ADK formula

◆ m_can_ionize

bool PlasmaParticleContainer::m_can_ionize = false

whether this plasma can ionize

◆ m_charge

amrex::Real PlasmaParticleContainer::m_charge = 0

charge of each particle of this species, per Ion level

◆ m_density_func

amrex::ParserExecutor<3> PlasmaParticleContainer::m_density_func

Density function for the plasma

◆ m_density_table

std::map<amrex::Real, std::string> PlasmaParticleContainer::m_density_table

plasma density value table, key: position=c*time, value=density function string

◆ m_do_symmetrize

bool PlasmaParticleContainer::m_do_symmetrize = false

Option to symmetrize the plasma

◆ m_fine_patch_func

amrex::ParserExecutor<2> PlasmaParticleContainer::m_fine_patch_func

◆ m_fine_transition_cells

int PlasmaParticleContainer::m_fine_transition_cells = 5

◆ m_hollow_core_radius

amrex::Real PlasmaParticleContainer::m_hollow_core_radius {0.}

hollow core radius of the plasma

◆ m_init_ion_lev

int PlasmaParticleContainer::m_init_ion_lev = -1

initial Ion level of each particle

◆ m_insitu_file_prefix

std::string PlasmaParticleContainer::m_insitu_file_prefix = "diags/plasma_insitu"
private

Prefix/path for the output files

◆ m_insitu_idata

amrex::Vector<int> PlasmaParticleContainer::m_insitu_idata
private

Per-slice int plasma properties

◆ m_insitu_nip

constexpr int PlasmaParticleContainer::m_insitu_nip = 1
staticconstexprprivate

Number of int plasma properties for in-situ per-slice reduced diagnostics.

◆ m_insitu_nrp

constexpr int PlasmaParticleContainer::m_insitu_nrp = 14
staticconstexprprivate

Number of real plasma properties for in-situ per-slice reduced diagnostics.

◆ m_insitu_period

int PlasmaParticleContainer::m_insitu_period {0}

How often the insitu plasma diagnostics should be computed and written Default is 0, meaning no output

◆ m_insitu_radius

amrex::Real PlasmaParticleContainer::m_insitu_radius {std::numeric_limits<amrex::Real>::infinity()}

radius of the plasma insitu diagnostics

◆ m_insitu_rdata

amrex::Vector<amrex::Real> PlasmaParticleContainer::m_insitu_rdata
private

Per-slice real plasma properties

◆ m_insitu_sum_idata

amrex::Vector<int> PlasmaParticleContainer::m_insitu_sum_idata
private

Sum of all per-slice int plasma properties

◆ m_insitu_sum_rdata

amrex::Vector<amrex::Real> PlasmaParticleContainer::m_insitu_sum_rdata
private

Sum of all per-slice real plasma properties

◆ m_mass

amrex::Real PlasmaParticleContainer::m_mass = 0

mass of each particle of this species

◆ m_max_qsa_weighting_factor

amrex::Real PlasmaParticleContainer::m_max_qsa_weighting_factor {35.}

maximum weighting factor gamma/(Psi +1) before particle is regarded as violating the quasi-static approximation and is removed

◆ m_min_density

amrex::Real PlasmaParticleContainer::m_min_density {0.}

minimal density at which particles are injected

◆ m_n_subcycles

int PlasmaParticleContainer::m_n_subcycles = 1

number of subcycles in the plasma particle push

◆ m_name

std::string PlasmaParticleContainer::m_name
private

name of the species

◆ m_neutralize_background

bool PlasmaParticleContainer::m_neutralize_background = true

whether to add a neutralizing background of immobile particles of opposite charge

◆ m_nslices

int PlasmaParticleContainer::m_nslices
private

number of z slices of the domain

◆ m_parser

amrex::Parser PlasmaParticleContainer::m_parser

owns data for m_density_func

◆ m_parser_fine_patch

amrex::Parser PlasmaParticleContainer::m_parser_fine_patch

owns data for m_fine_patch_func

◆ m_ppc

amrex::Array<int, 2> PlasmaParticleContainer::m_ppc {0,0}

Number of particles per cell in each direction

◆ m_ppc_fine

amrex::Array<int, 2> PlasmaParticleContainer::m_ppc_fine {0,0}

Number of particles per cell in each direction

◆ m_product_name

std::string PlasmaParticleContainer::m_product_name = ""

name of Ionization product plasma

◆ m_product_pc

PlasmaParticleContainer* PlasmaParticleContainer::m_product_pc = nullptr

Ionization product plasma

◆ m_radius

amrex::Real PlasmaParticleContainer::m_radius {std::numeric_limits<amrex::Real>::infinity()}

radius of the plasma

◆ m_reorder_idx_type

amrex::IntVect PlasmaParticleContainer::m_reorder_idx_type = {0, 0, 0}

2D reordering index type. 0: cell, 1: node, 2: both

◆ m_reorder_period

int PlasmaParticleContainer::m_reorder_period = 0

After how many slices the particles are reordered. 0: off

◆ m_temperature_in_ev

amrex::Real PlasmaParticleContainer::m_temperature_in_ev {0.}

Temperature of the plasma in eV

◆ m_u_mean

amrex::RealVect PlasmaParticleContainer::m_u_mean {0,0,0}

Avg momentum in each direction normalized by m*c

◆ m_u_std

amrex::RealVect PlasmaParticleContainer::m_u_std {0,0,0}

Thermal momentum in each direction normalized by m*c

◆ m_use_density_table

bool PlasmaParticleContainer::m_use_density_table

if a density value table was specified

◆ m_use_fine_patch

bool PlasmaParticleContainer::m_use_fine_patch = false

The documentation for this class was generated from the following files: