WarpX
Loading...
Searching...
No Matches
ExternalFieldReader Class Reference

#include <ExternalField.H>

Public Member Functions

 ExternalFieldReader (std::string read_fields_from_path, std::string F_name, std::string F_component, amrex::GpuArray< amrex::Real, 3 > const &problo, amrex::GpuArray< amrex::Real, 3 > const &pdx, amrex::Box const &dombox, bool distributed)
 Constructor.
 
ExternalFieldView getView (int li) const
 Return lightweight view that can be used in kernels.
 
ExternalFieldView getView () const
 Return lightweight view that can be used in kernels.
 
void prepare (amrex::BoxArray const &grids, amrex::DistributionMapping const &dmap, amrex::IntVect const &ngrow, std::function< amrex::Real(amrex::Real)> const &get_zlab=nullptr)
 This must be called before calling getView to prepare for loading distributed data. This is usually used during the initialization of particles and fields.
 
void prepare (amrex::RealBox const &pbox, int moving_dir, int moving_sign, std::function< amrex::Real(amrex::Real)> const &get_zlab=nullptr)
 This needs to be called before loading data for moving window.
 
bool distributed () const
 Is the data loaded distributedly?
 

Private Member Functions

void load_data (amrex::RealBox const &pbox)
 Read data within this box.
 
ExternalFieldView make_view (amrex::BaseFab< double > const &fab) const
 Used by getView to make ExternalFieldView.
 
void make_cache_box (amrex::RealBox const &pbox, int moving_dir, int moving_sign)
 

Private Attributes

std::string m_file
 
std::string m_name
 OpenMPD file name.
 
std::string m_component
 Field name.
 
amrex::GpuArray< amrex::Real, 3 > m_problo
 Component name.
 
amrex::GpuArray< amrex::Real, 3 > m_probdx
 WarpX's initial prob lo.
 
amrex::Box m_dombox
 WarpX's cell size.
 
bool m_distributed = false
 WarpX's initial domain.
 
bool m_moving_window = false
 Is the data loaded distributedly?
 
amrex::RealVect m_dx
 In moving window stage?
 
amrex::RealVect m_offset
 
amrex::IntVect m_size
 
amrex::RealBox m_domain
 
amrex::RealBox m_cache_domain
 
std::shared_ptr< double > m_FC_data_cpu
 
amrex::BaseFab< double > m_fab
 buffer in cpu memory for loading data
 
amrex::FabArray< amrex::BaseFab< double > > m_mf
 data container for loaded data
 

Detailed Description

OpenPMD field data reader

This reads an OpenPMD file for a given field. Then we can get a lightweight object ExternalFieldView that can be use in kernels. This class can be used for the initialization of particles and fields, and during moving window.

Constructor & Destructor Documentation

◆ ExternalFieldReader()

ExternalFieldReader::ExternalFieldReader ( std::string read_fields_from_path,
std::string F_name,
std::string F_component,
amrex::GpuArray< amrex::Real, 3 > const & problo,
amrex::GpuArray< amrex::Real, 3 > const & pdx,
amrex::Box const & dombox,
bool distributed )

Constructor.

Parameters
[in]read_fields_from_pathOpenPMD file name
[in]F_namefield name
[in]F_componentfield component name
[in]problolower corner of WarpX problem domain
[in]pdxcell size of WarpX
[in]domboxWarpX domain box
[in]distributedread OpenPMD data distributely

Member Function Documentation

◆ distributed()

bool ExternalFieldReader::distributed ( ) const
inlinenodiscard

Is the data loaded distributedly?

◆ getView() [1/2]

ExternalFieldView ExternalFieldReader::getView ( ) const
nodiscard

Return lightweight view that can be used in kernels.

◆ getView() [2/2]

ExternalFieldView ExternalFieldReader::getView ( int li) const
nodiscard

Return lightweight view that can be used in kernels.

◆ load_data()

void ExternalFieldReader::load_data ( amrex::RealBox const & pbox)
private

Read data within this box.

◆ make_cache_box()

void ExternalFieldReader::make_cache_box ( amrex::RealBox const & pbox,
int moving_dir,
int moving_sign )
private

During the moving window stage, we cache the data for performance. This function makes a Box for caching.

◆ make_view()

ExternalFieldView ExternalFieldReader::make_view ( amrex::BaseFab< double > const & fab) const
nodiscardprivate

Used by getView to make ExternalFieldView.

◆ prepare() [1/2]

void ExternalFieldReader::prepare ( amrex::BoxArray const & grids,
amrex::DistributionMapping const & dmap,
amrex::IntVect const & ngrow,
std::function< amrex::Real(amrex::Real)> const & get_zlab = nullptr )

This must be called before calling getView to prepare for loading distributed data. This is usually used during the initialization of particles and fields.

Parameters
[in]gridsBoxArray of destionation ParticleContainer/MultiFab
[in]dmapDistributionMapping of destionation ParticleContainer/MultiFab
[in]ngrownumber of ghost cells in destination MultiFab
[in]get_zlaboptional function for transforming z-coordinates into lab frame

◆ prepare() [2/2]

void ExternalFieldReader::prepare ( amrex::RealBox const & pbox,
int moving_dir,
int moving_sign,
std::function< amrex::Real(amrex::Real)> const & get_zlab = nullptr )

This needs to be called before loading data for moving window.

Parameters
[in]pboxtarget domain
[in]moving_dirmoving window direction
[in]moving_signpositive or negative direction
[in]get_zlaboptional function for transforming z-coordinates into lab frame

Member Data Documentation

◆ m_cache_domain

amrex::RealBox ExternalFieldReader::m_cache_domain
private

◆ m_component

std::string ExternalFieldReader::m_component
private

Field name.

◆ m_distributed

bool ExternalFieldReader::m_distributed = false
private

WarpX's initial domain.

◆ m_domain

amrex::RealBox ExternalFieldReader::m_domain
private

◆ m_dombox

amrex::Box ExternalFieldReader::m_dombox
private

WarpX's cell size.

◆ m_dx

amrex::RealVect ExternalFieldReader::m_dx
private

In moving window stage?

◆ m_fab

amrex::BaseFab<double> ExternalFieldReader::m_fab
private

buffer in cpu memory for loading data

◆ m_FC_data_cpu

std::shared_ptr<double> ExternalFieldReader::m_FC_data_cpu
private

◆ m_file

std::string ExternalFieldReader::m_file
private

◆ m_mf

amrex::FabArray<amrex::BaseFab<double> > ExternalFieldReader::m_mf
private

data container for loaded data

◆ m_moving_window

bool ExternalFieldReader::m_moving_window = false
private

Is the data loaded distributedly?

◆ m_name

std::string ExternalFieldReader::m_name
private

OpenMPD file name.

◆ m_offset

amrex::RealVect ExternalFieldReader::m_offset
private

◆ m_probdx

amrex::GpuArray<amrex::Real,3> ExternalFieldReader::m_probdx
private

WarpX's initial prob lo.

◆ m_problo

amrex::GpuArray<amrex::Real,3> ExternalFieldReader::m_problo
private

Component name.

◆ m_size

amrex::IntVect ExternalFieldReader::m_size
private

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