24 #elif defined(AMREX_USE_HIP)
25 # if __has_include(<rocfft/rocfft.h>)
26 # include <rocfft/rocfft.h>
39 # ifdef AMREX_USE_FLOAT
41 const auto cufft_type = CUFFT_C2C;
42 using cufftComplex = cuComplex;
45 const auto cufft_type = CUFFT_Z2Z;
46 using cufftComplex = cuDoubleComplex;
48 #elif defined(AMREX_USE_HIP)
53 # ifdef AMREX_USE_FLOAT
154 template<
typename input_type>
204 int max_step, amrex::Real max_time);
214 int max_step, amrex::Real max_time);
258 std::unique_ptr<hpmg::MultiGrid>
m_mg;
276 #ifdef AMREX_USE_CUDA
277 cufftResult m_result_fwd;
278 cufftResult m_result_bkw;
Main class handling all field data structures and operations.
Definition: Fields.H:85
Definition: MultiLaser.H:99
void InitData(const amrex::BoxArray &slice_ba, const amrex::DistributionMapping &slice_dm, const amrex::Geometry &geom_3D)
Allocate laser multifab.
Definition: MultiLaser.cpp:86
amrex::MultiFab & getSlices()
Definition: MultiLaser.H:123
void GetEnvelopeFromFileHelper(const amrex::Geometry &gm)
Read in a laser from an openPMD file.
Definition: MultiLaser.cpp:220
static constexpr int m_insitu_ncp
Definition: MultiLaser.H:285
bool m_laser_from_file
Definition: MultiLaser.H:238
SpectralFieldLoc m_rhs_fourier
Definition: MultiLaser.H:275
amrex::Vector< Laser > m_all_lasers
Definition: MultiLaser.H:229
void AdvanceSliceFFT(const Fields &fields, amrex::Real dt, int step)
Definition: MultiLaser.cpp:744
bool m_use_laser
Definition: MultiLaser.H:219
int m_insitu_period
Definition: MultiLaser.H:288
amrex::Vector< amrex::GpuComplex< amrex::Real > > m_insitu_cdata
Definition: MultiLaser.H:294
amrex::Vector< std::string > m_names
Definition: MultiLaser.H:227
int m_MG_verbose
Definition: MultiLaser.H:254
void ReadParameters()
Definition: MultiLaser.cpp:41
std::string m_file_geometry
Definition: MultiLaser.H:248
std::unique_ptr< hpmg::MultiGrid > m_mg
Definition: MultiLaser.H:258
void InSituComputeDiags(int step, amrex::Real time, int islice, const amrex::Geometry &geom3D, int max_step, amrex::Real max_time)
Definition: MultiLaser.cpp:1070
amrex::FArrayBox m_F_input_file
Definition: MultiLaser.H:240
void InitLaserSlice(const amrex::Geometry &geom, const int islice, const int comp)
Definition: MultiLaser.cpp:1000
MultiLaser()
Definition: MultiLaser.H:106
void AdvanceSlice(const Fields &fields, amrex::Real dt, int step)
Definition: MultiLaser.cpp:537
~MultiLaser()
Definition: MultiLaser.H:111
void InSituWriteToFile(int step, amrex::Real time, const amrex::Geometry &geom3D, int max_step, amrex::Real max_time)
Definition: MultiLaser.cpp:1153
bool m_use_phase
Definition: MultiLaser.H:233
amrex::Real m_MG_tolerance_abs
Definition: MultiLaser.H:253
amrex::Real GetLambda0() const
Definition: MultiLaser.H:217
int m_nlasers
Definition: MultiLaser.H:228
amrex::Real m_lambda0
Definition: MultiLaser.H:226
LaserFFT::VendorFFT m_plan_bkw
Definition: MultiLaser.H:269
std::string m_file_envelope_name
Definition: MultiLaser.H:244
const amrex::MultiFab & getSlices() const
Definition: MultiLaser.H:126
int m_file_num_iteration
Definition: MultiLaser.H:246
amrex::Geometry m_laser_geom_3D
Definition: MultiLaser.H:235
std::string m_solver_type
Definition: MultiLaser.H:232
amrex::IntVect m_slices_nguards
Definition: MultiLaser.H:231
static constexpr int m_insitu_nrp
Definition: MultiLaser.H:283
amrex::Real m_MG_tolerance_rel
Definition: MultiLaser.H:252
SpectralFieldLoc m_rhs
Definition: MultiLaser.H:273
std::string m_insitu_file_prefix
Definition: MultiLaser.H:296
LaserFFT::VendorFFT m_plan_fwd
Definition: MultiLaser.H:267
amrex::Vector< amrex::Real > m_insitu_sum_rdata
Definition: MultiLaser.H:292
amrex::Vector< amrex::Real > m_insitu_rdata
Definition: MultiLaser.H:290
amrex::MultiFab m_slices
Definition: MultiLaser.H:251
void GetEnvelopeFromFile(const amrex::Geometry &gm)
Read in a laser from an openPMD file.
Definition: MultiLaser.cpp:277
void AdvanceSliceMG(const Fields &fields, amrex::Real dt, int step)
Definition: MultiLaser.cpp:552
SpectralFieldLoc m_sol
Definition: MultiLaser.H:271
void InitSliceEnvelope(const int islice, const int comp)
Initialize on slice of the 3D laser field.
Definition: MultiLaser.cpp:201
bool m_MG_average_rhs
Definition: MultiLaser.H:256
void ShiftLaserSlices()
Shift 2D slices in zeta.
Definition: MultiLaser.cpp:503
std::string m_input_file_path
Definition: MultiLaser.H:242
amrex::Box m_slice_box
Definition: MultiLaser.H:234
Definition: MultiLaser.H:34
const auto VendorExecute
Definition: MultiLaser.H:63
fftw_plan VendorFFT
Definition: MultiLaser.H:60
const auto VendorDestroy
Definition: MultiLaser.H:64
fftw_complex FFTWComplex
Definition: MultiLaser.H:61
const auto VendorCreate
Definition: MultiLaser.H:62
describes which slice with respect to the currently calculated is used
Definition: MultiLaser.H:70
slice
Definition: MultiLaser.H:73
@ n00j00_i
Definition: MultiLaser.H:81
@ nm1jp1_r
Definition: MultiLaser.H:76
@ n00jp1_r
Definition: MultiLaser.H:82
@ nm1jp2_r
Definition: MultiLaser.H:78
@ np1jp1_r
Definition: MultiLaser.H:88
@ np1j00_i
Definition: MultiLaser.H:87
@ np1j00_r
Definition: MultiLaser.H:86
@ np1jp2_r
Definition: MultiLaser.H:90
@ n00jp2_i
Definition: MultiLaser.H:85
@ nm1jp1_i
Definition: MultiLaser.H:77
@ np1jp2_i
Definition: MultiLaser.H:91
@ n00jp1_i
Definition: MultiLaser.H:83
@ np1jp1_i
Definition: MultiLaser.H:89
@ nm1j00_i
Definition: MultiLaser.H:75
@ nm1jp2_i
Definition: MultiLaser.H:79
@ n00jp2_r
Definition: MultiLaser.H:84
@ nm1j00_r
Definition: MultiLaser.H:74
@ n00j00_r
Definition: MultiLaser.H:80
@ N
Definition: MultiLaser.H:92