WarpX
Loading...
Searching...
No Matches
WarpX.H
Go to the documentation of this file.
1/* Copyright 2016-2020 Andrew Myers, Ann Almgren, Aurore Blelly
2 * Axel Huebl, Burlen Loring, David Grote
3 * Glenn Richardson, Junmin Gu, Luca Fedeli
4 * Mathieu Lobet, Maxence Thevenet, Michael Rowan
5 * Remi Lehe, Revathi Jambunathan, Weiqun Zhang
6 * Yinjian Zhao
7 *
8 * This file is part of WarpX.
9 *
10 * License: BSD-3-Clause-LBNL
11 */
12#ifndef WARPX_H_
13#define WARPX_H_
14
32
33#ifdef WARPX_USE_FFT
34# ifdef WARPX_DIM_RZ
37# else
39# endif
40#endif
41
43#include "Fields.H"
49#include "Utils/export.H"
51
53#include <ablastr/utils/Enums.H>
55
56#include <AMReX_BaseFwd.H>
57#include <AMReX_AmrCoreFwd.H>
58
59#include <AMReX.H>
60#include <AMReX_AmrCore.H>
61#include <AMReX_Array.H>
62#include <AMReX_Config.H>
63#ifdef AMREX_USE_EB
64# include <AMReX_EB2.H>
65# include <AMReX_EBFabFactory.H>
66#endif
67#include <AMReX_GpuContainers.H>
68#include <AMReX_IntVect.H>
69#include <AMReX_LayoutData.H>
70#include <AMReX_Parser.H>
71#include <AMReX_REAL.H>
72#include <AMReX_RealBox.H>
73#include <AMReX_RealVect.H>
74#include <AMReX_Vector.H>
75
76#include <array>
77#include <iostream>
78#include <limits>
79#include <map>
80#include <memory>
81#include <optional>
82#include <string>
83#include <variant>
84#include <vector>
85
86class WARPX_EXPORT WarpX
87 : public amrex::AmrCore
88{
89public:
90 static WarpX& GetInstance ();
91
92 static void ResetInstance ();
93
98 static void Finalize();
99
101 ~WarpX () override;
102
104 WarpX ( WarpX const &) = delete;
106 WarpX& operator= ( WarpX const & ) = delete;
107
109 WarpX ( WarpX && ) = delete;
111 WarpX& operator= ( WarpX && ) = delete;
112
113 static std::string Version ();
114 static std::string PicsarVersion ();
115
116 [[nodiscard]] int Verbose () const { return verbose; }
117
122
124 {
125 return field_boundary_hi;
126 }
127
128 [[nodiscard]] int GetPECInsulator_IsESet ( int bdry_dir,
129 int bdry_side ) const;
130
131 void InitData ();
132
133 void Evolve (int numsteps = -1);
134
139
140 //
141 // Functions used by implicit solvers
142 //
143 void SyncMassMatricesPC ();
144 void SyncMassMatrices ();
147 void SetElectricFieldAndApplyBCs ( const WarpXSolverVec& a_E, amrex::Real a_time );
149 amrex::Real a_thetadt, amrex::Real start_time );
152 amrex::Real a_theta, amrex::Real a_time );
155 amrex::Real theta );
156 void DepositMassMatrices ();
158 void ImplicitComputeRHSE (int lev, amrex::Real dt, WarpXSolverVec& a_Erhs_vec);
159 void ImplicitComputeRHSE (int lev, PatchType patch_type, amrex::Real dt, WarpXSolverVec& a_Erhs_vec);
160
164 [[nodiscard]] HybridPICModel * get_pointer_HybridPICModel () const { return m_hybrid_pic_model.get(); }
170
176 [[nodiscard]] std::string GetAuthors () const { return m_authors; }
177
183
184 // Algorithms
205
210
216
222
227
232
237
239 // to satisfy the continuity equation and charge conservation
241
244 bool update_with_rho = false;
245
248
251
254
257
260
263
266
269 static bool do_dive_cleaning;
271 static bool do_divb_cleaning;
272
274 static int nox;
276 static int noy;
278 static int noz;
279
282
286
293
300 static int ncomps;
301
304 static bool use_fdtd_nci_corr;
315
317 static bool use_filter;
319 static bool use_kspace_filter;
322
325
332
336
339
341 static bool refine_plasma;
342
345
350
359
363
364 // Global rho nodal flag to know about rho index type when rho MultiFab is not allocated
366
382 void AllocInitMultiFab (
383 std::unique_ptr<amrex::iMultiFab>& mf,
384 const amrex::BoxArray& ba,
386 int ncomp,
387 const amrex::IntVect& ngrow,
388 int level,
389 const std::string& name,
390 std::optional<const int> initial_value = {});
391
392 // Maps of all of the iMultiFabs used (this can include MFs from other classes)
393 // This is a convenience for the Python interface, allowing all iMultiFabs
394 // to be easily referenced from Python.
395 std::map<std::string, amrex::iMultiFab *> imultifab_map;
396
401 [[nodiscard]] const amrex::iMultiFab*
403
404 [[nodiscard]] bool DoPML () const {return do_pml;}
405 [[nodiscard]] bool DoFluidSpecies () const {return do_fluid_species;}
406
408 [[nodiscard]] std::vector<bool> getPMLdirections() const;
409
410 static amrex::LayoutData<amrex::Real>* getCosts (int lev);
411
412 void setLoadBalanceEfficiency (int lev, amrex::Real efficiency);
413
414 amrex::Real getLoadBalanceEfficiency (int lev);
415
420
424
426
428 std::unique_ptr<MultiReducedDiags> reduced_diags;
429
430 void applyMirrors(amrex::Real time);
431
433 void ComputeDt ();
434
440 void ApplyDtLimiters (int step);
441
444
451 // Compute max_step automatically for simulations in a boosted frame.
453
458 int MoveWindow (int step, bool move_j);
459
465 void ShiftGalileanBoundary ();
466
467 void ResetProbDomain (const amrex::RealBox& rb);
468 void EvolveE ( amrex::Real dt, amrex::Real start_time);
469 void EvolveE (int lev, amrex::Real dt, amrex::Real start_time);
470 void EvolveB ( amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time);
471 void EvolveB (int lev, amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time);
472 void EvolveF ( amrex::Real dt, int rho_comp);
473 void EvolveF (int lev, amrex::Real dt, int rho_comp);
474 void EvolveG ( amrex::Real dt);
475 void EvolveG (int lev, amrex::Real dt);
476 void EvolveB (int lev, PatchType patch_type, amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time);
477 void EvolveE (int lev, PatchType patch_type, amrex::Real dt, amrex::Real start_time);
478 void EvolveF (int lev, PatchType patch_type, amrex::Real dt, int rho_comp);
479 void EvolveG (int lev, PatchType patch_type, amrex::Real dt);
480
481 void MacroscopicEvolveE ( amrex::Real dt, amrex::Real start_time);
482 void MacroscopicEvolveE (int lev, amrex::Real dt, amrex::Real start_time);
483 void MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real dt, amrex::Real start_time);
484
490 void HybridPICEvolveFields ();
491
500
508
514
520 void Hybrid_QED_Push (int lev, amrex::Real dt);
521
528 void Hybrid_QED_Push (int lev, PatchType patch_type, amrex::Real dt);
529
531
534 void CheckLoadBalance (int step);
535
538 void LoadBalance ();
539
542 void ResetCosts ();
543
550 void RescaleCosts (int step);
551
558
566 void DampFieldsInGuards (int lev,
567 const ablastr::fields::VectorField& Efield,
568 const ablastr::fields::VectorField& Bfield);
569
577 void DampFieldsInGuards (int lev, amrex::MultiFab* mf);
578
579#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
580 void ApplyInverseVolumeScalingToCurrentDensity (amrex::MultiFab* Jx,
581 amrex::MultiFab* Jy,
582 amrex::MultiFab* Jz,
583 int lev) const;
584
585 void ApplyInverseVolumeScalingToMassMatricesPC (amrex::MultiFab* Sxx,
586 amrex::MultiFab* Syy,
587 amrex::MultiFab* Szz,
588 int lev) const;
589
590 void ApplyInverseVolumeScalingToChargeDensity (amrex::MultiFab* Rho,
591 int lev) const;
592#endif
593
599 void ApplyRhofieldBoundary (int lev, amrex::MultiFab* Rho,
600 PatchType patch_type);
601
607 void ApplyJfieldBoundary (int lev, amrex::MultiFab* Jx,
609 PatchType patch_type);
610
611 void ApplyEfieldBoundary (int lev, PatchType patch_type, amrex::Real cur_time);
612 void ApplyBfieldBoundary (int lev, PatchType patch_type, SubcyclingHalf subcycling_half, amrex::Real cur_time);
613
614#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
615 // Applies the boundary conditions that are specific to the axis when in RZ.
616 void ApplyFieldBoundaryOnAxis (amrex::MultiFab* Er, amrex::MultiFab* Et, amrex::MultiFab* Ez, int lev) const;
617#endif
618
627 void ApplyElectronPressureBoundary (int lev, PatchType patch_type);
628
629 void DampPML ();
630 void DampPML (int lev);
631 void DampPML (int lev, PatchType patch_type);
632 void DampPML_Cartesian (int lev, PatchType patch_type);
633
634 void DampJPML ();
635 void DampJPML (int lev);
636 void DampJPML (int lev, PatchType patch_type);
637
638 void CopyJPML ();
639
641 static bool isAnyParticleBoundaryThermal();
642
643 PML* GetPML (int lev);
644#if (defined WARPX_DIM_RZ) && (defined WARPX_USE_FFT)
645 PML_RZ* GetPML_RZ (int lev);
646#endif
647
649 void doFieldIonization ();
650
651#ifdef WARPX_QED
653 void doQEDEvents ();
654#endif
655
656 void PushParticlesandDeposit (int lev, amrex::Real cur_time, SubcyclingHalf subcycling_half=SubcyclingHalf::None, bool skip_deposition=false,
657 PositionPushType position_push_type=PositionPushType::Full,
658 MomentumPushType momentum_push_type=MomentumPushType::Full,
659 ImplicitOptions const * implicit_options = nullptr);
660
661 void PushParticlesandDeposit (amrex::Real cur_time, bool skip_deposition=false,
662 PositionPushType position_push_type=PositionPushType::Full,
663 MomentumPushType momentum_push_type=MomentumPushType::Full,
664 ImplicitOptions const * implicit_options = nullptr);
665
666 // This function does aux(lev) = fp(lev) + I(aux(lev-1)-cp(lev)).
667 // Caller must make sure fp and cp have ghost cells filled.
668 void UpdateAuxiliaryData ();
669 void UpdateAuxiliaryDataStagToNodal ();
670 void UpdateAuxiliaryDataSameType ();
671
672 // Fill boundary cells including coarse/fine boundaries
673 void FillBoundaryB (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
674 void FillBoundaryE (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
675 void FillBoundaryB_avg (amrex::IntVect ng);
676 void FillBoundaryE_avg (amrex::IntVect ng);
677
678 void FillBoundaryF (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
679 void FillBoundaryG (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
680 void FillBoundaryAux (amrex::IntVect ng);
681 void FillBoundaryE (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
682 void FillBoundaryB (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
683 void FillBoundaryE_avg (int lev, amrex::IntVect ng);
684 void FillBoundaryB_avg (int lev, amrex::IntVect ng);
685
686 void FillBoundaryF (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
687 void FillBoundaryG (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
688 void FillBoundaryAux (int lev, amrex::IntVect ng);
689
696 void SyncCurrentAndRho ();
697
708 void SyncCurrent (const std::string& current_fp_string);
709
710 void SyncRho ();
711
712 void SyncRho (
715 ablastr::fields::MultiLevelScalarField const & charge_buffer);
716
717 [[nodiscard]] amrex::Vector<int> getnsubsteps () const {return nsubsteps;}
718 [[nodiscard]] int getnsubsteps (int lev) const {return nsubsteps[lev];}
719 [[nodiscard]] amrex::Vector<int> getistep () const {return istep;}
720 [[nodiscard]] int getistep (int lev) const {return istep[lev];}
721 void setistep (int lev, int ii) {istep[lev] = ii;}
722 [[nodiscard]] amrex::Vector<amrex::Real> gett_old () const {return t_old;}
723 [[nodiscard]] amrex::Real gett_old (int lev) const {return t_old[lev];}
724 [[nodiscard]] amrex::Vector<amrex::Real> gett_new () const {return t_new;}
725 [[nodiscard]] amrex::Real gett_new (int lev) const {return t_new[lev];}
726 void sett_new (int lev, amrex::Real time) {t_new[lev] = time;}
727 [[nodiscard]] amrex::Vector<amrex::Real> getdt () const {return dt;}
728 [[nodiscard]] amrex::Real getdt (int lev) const {return dt.at(lev);}
729 [[nodiscard]] int getdo_moving_window() const {return do_moving_window;}
730 [[nodiscard]] amrex::Real getmoving_window_x() const {return moving_window_x;}
731 [[nodiscard]] bool getis_synchronized() const {return m_is_synchronized;}
732
733 [[nodiscard]] int maxStep () const {return max_step;}
734 void updateMaxStep (const int new_max_step) {max_step = new_max_step;}
735 [[nodiscard]] amrex::Real stopTime () const {return stop_time;}
736 void updateStopTime (const amrex::Real new_stop_time) {stop_time = new_stop_time;}
737
738 static std::array<amrex::Real,3> CellSize (int lev);
739 static amrex::XDim3 InvCellSize (int lev);
740 static amrex::RealBox getRealBox(const amrex::Box& bx, int lev);
741
750 static amrex::XDim3 LowerCorner (const amrex::Box& bx, int lev, amrex::Real time_shift_delta);
759 static amrex::XDim3 UpperCorner (const amrex::Box& bx, int lev, amrex::Real time_shift_delta);
760
761 static amrex::IntVect RefRatio (int lev);
762
763 static const amrex::iMultiFab* CurrentBufferMasks (int lev);
764 static const amrex::iMultiFab* GatherBufferMasks (int lev);
765
768
769 static int do_moving_window; // boolean
770 static int start_moving_window_step; // the first step to move window
771 static int end_moving_window_step; // the last step to move window
777 static int moving_window_active (int const step) {
778 bool const step_before_end = (step < end_moving_window_step) || (end_moving_window_step < 0);
779 bool const step_after_start = (step >= start_moving_window_step);
780 return do_moving_window && step_before_end && step_after_start;
781 }
785
786 // these should be private, but can't due to Cuda limitations
787 static void ComputeDivB (amrex::MultiFab& divB, int dcomp,
789 const std::array<amrex::Real,3>& dx);
790
791 static void ComputeDivB (amrex::MultiFab& divB, int dcomp,
793 const std::array<amrex::Real,3>& dx, amrex::IntVect ngrow);
794
795 void ComputeDivE(amrex::MultiFab& divE, int lev);
796
797 void ProjectionCleanDivB ();
799
800 [[nodiscard]] amrex::IntVect getngEB() const { return guard_cells.ng_alloc_EB; }
801 [[nodiscard]] amrex::IntVect getngF() const { return guard_cells.ng_alloc_F; }
802 [[nodiscard]] amrex::IntVect getngUpdateAux() const { return guard_cells.ng_UpdateAux; }
803 [[nodiscard]] amrex::IntVect get_ng_depos_J() const {return guard_cells.ng_depos_J;}
804 [[nodiscard]] amrex::IntVect get_ng_depos_rho() const {return guard_cells.ng_depos_rho;}
805 [[nodiscard]] amrex::IntVect get_ng_fieldgather () const {return guard_cells.ng_FieldGather;}
806
814 [[nodiscard]] amrex::IntVect get_numprocs() const {return numprocs;}
815
817 void ComputeSpaceChargeField (bool reset_E_field, bool reset_B_field);
818
819 // Magnetostatic Solver Interface
829 amrex::Real required_precision=amrex::Real(1.e-11),
830 amrex::Real absolute_tolerance=amrex::Real(0.0),
831 int max_iters=200,
832 int verbosity=2); // const;
833
835
855 const std::variant<warpx::fields::FieldType, std::string>& field,
856 amrex::ParserExecutor<4> const& fx_parser,
857 amrex::ParserExecutor<4> const& fy_parser,
858 amrex::ParserExecutor<4> const& fz_parser,
859 int lev, PatchType patch_type,
860 amrex::Vector<std::array< std::unique_ptr<amrex::iMultiFab>,3 > > const& eb_update_field,
861 bool use_eb_flags = true);
862
867 void LoadExternalFields (int lev);
868
874 const std::string& read_fields_from_path, amrex::MultiFab* mf,
875 const std::string& F_name, const std::string& F_component, int dest_comp = 0);
876
885 void InitializeEBGridData(int lev);
886
893
894 void ApplyFilterandSumBoundaryRho (int lev, int glev, amrex::MultiFab& rho, int icomp, int ncomp);
895
896 void ApplyFilterMF (
898 int lev,
899 int idim);
900
901 void ApplyFilterMF (
903 int lev);
904
905#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
919 int lev, int scomp, int dcomp, int ncomp);
920#endif
921
926 void ApplyFilterJ (
928 int lev,
929 int idim);
930
931 void ApplyFilterJ (
933 int lev);
934
935 // Device vectors of stencil coefficients used for finite-order centering of fields
939
940 // Device vectors of stencil coefficients used for finite-order centering of currents
944
945 // This needs to be public for CUDA.
947 void ErrorEst (int lev, amrex::TagBoxArray& tags, amrex::Real time, int /*ngrow*/) final;
948
949 // Return the accelerator lattice instance defined at the given refinement level
951
952 // for cuda
953 void BuildBufferMasksInBox ( amrex::Box tbx, amrex::IArrayBox &buffer_mask,
954 const amrex::IArrayBox &guard_mask, int ng );
955#ifdef AMREX_USE_EB
956 [[nodiscard]] amrex::EBFArrayBoxFactory const& fieldEBFactory (int lev) const noexcept {
957 return static_cast<amrex::EBFArrayBoxFactory const&>(*m_field_factory[lev]);
958 }
959#endif
960
961 void InitEB ();
962
966 void ComputeDistanceToEB ();
971 void ComputeFaceExtensions();
975 void ComputeOneWayExtensions();
979 void ComputeEightWaysExtensions();
980
981#ifdef WARPX_USE_FFT
982 auto& get_spectral_solver_fp (int lev) {return *spectral_solver_fp[lev];}
983#endif
984
986
987 // Field container
990
993 void PostProcessBaseGrids (amrex::BoxArray& ba0) const final;
994
995#ifdef AMREX_USE_EB
996 amrex::EB2::IndexSpace const* GetEBIndexSpace (int lev) const {
997 // If EB data was built separately for each mesh-refinement level, return the one for
998 // this level; otherwise return the single global EB data (built at the finest level
999 // and coarsened for coarser levels).
1000 return (m_build_eb_data_per_level && lev < m_eb_index_space.size())
1001 ? m_eb_index_space[lev] : &(amrex::EB2::IndexSpace::top());
1002 }
1003#endif
1004
1005protected:
1006
1032 void InitLevelData (int lev, amrex::Real time);
1033
1035 [[nodiscard]] amrex::DistributionMapping
1036 MakeDistributionMap (int lev, amrex::BoxArray const& ba) final;
1037
1041 void MakeNewLevelFromScratch (int lev, amrex::Real time, const amrex::BoxArray& new_grids,
1042 const amrex::DistributionMapping& new_dmap) final;
1043
1047 void MakeNewLevelFromCoarse (int /*lev*/, amrex::Real /*time*/, const amrex::BoxArray& /*ba*/,
1048 const amrex::DistributionMapping& /*dm*/) final;
1049
1053 void RemakeLevel (int lev, amrex::Real time, const amrex::BoxArray& ba,
1054 const amrex::DistributionMapping& dm) final;
1055
1057 void ClearLevel (int lev) final;
1058
1059private:
1060
1067 WarpX ();
1068
1073 static void MakeWarpX ();
1074
1075 // Singleton is used when the code is run from python
1077
1079 void HandleSignals ();
1080
1081 void FillBoundaryB (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1082 void FillBoundaryE (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1083 void FillBoundaryF (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1084 void FillBoundaryG (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1085
1086 void FillBoundaryB_avg (int lev, PatchType patch_type, amrex::IntVect ng);
1087 void FillBoundaryE_avg (int lev, PatchType patch_type, amrex::IntVect ng);
1088
1089 void AddExternalFields (int lev);
1090
1095 void OneStep (
1096 amrex::Real a_cur_time,
1097 amrex::Real a_dt,
1098 int a_step
1099 );
1100
1101 void OneStep_nosub (
1102 amrex::Real a_cur_time,
1103 amrex::Real a_dt,
1104 int a_step
1105 );
1106
1107 void OneStep_sub1 (amrex::Real cur_time);
1108
1112 void OneStep_JRhom (amrex::Real cur_time);
1113
1117 int lev);
1122 int lev);
1123 void SumBoundaryJ (
1125 int lev,
1126 int idim,
1127 const amrex::Periodicity& period);
1128 void SumBoundaryJ (
1130 int lev,
1131 const amrex::Periodicity& period);
1132
1133 void RestrictRhoFromFineToCoarsePatch (int lev );
1137 int lev,
1138 PatchType patch_type,
1139 int icomp,
1140 int ncomp);
1144 ablastr::fields::MultiLevelScalarField const & charge_buffer,
1145 int lev,
1146 int icomp,
1147 int ncomp);
1148
1149 void ReadParameters ();
1150
1153 void BackwardCompatibility ();
1154
1156
1157 void AllocLevelData (int lev, const amrex::BoxArray& ba,
1158 const amrex::DistributionMapping& dm);
1159
1160 [[nodiscard]] amrex::DistributionMapping
1161 GetRestartDMap (const std::string& chkfile, const amrex::BoxArray& ba, int lev) const;
1162
1163 void InitFromCheckpoint ();
1165
1166 void InitPML ();
1168
1169 void InitFilter ();
1170
1172
1174
1180
1181 void BuildBufferMasks ();
1182
1183 [[nodiscard]] const amrex::iMultiFab* getCurrentBufferMasks (int lev) const {
1184 return current_buffer_masks[lev].get();
1185 }
1186
1187 [[nodiscard]] const amrex::iMultiFab* getGatherBufferMasks (int lev) const
1188 {
1189 return gather_buffer_masks[lev].get();
1190 }
1191
1192 void AllocLevelMFs (int lev, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm,
1193 const amrex::IntVect& ngEB, amrex::IntVect& ngJ,
1194 const amrex::IntVect& ngRho, const amrex::IntVect& ngF,
1195 const amrex::IntVect& ngG, bool aux_is_nodal);
1196
1197#ifdef WARPX_USE_FFT
1198# ifdef WARPX_DIM_RZ
1199 void AllocLevelSpectralSolverRZ (amrex::Vector<std::unique_ptr<SpectralSolverRZ>>& spectral_solver,
1200 int lev,
1201 const amrex::BoxArray& realspace_ba,
1203 const std::array<amrex::Real,3>& dx);
1204# else
1205 void AllocLevelSpectralSolver (amrex::Vector<std::unique_ptr<SpectralSolver>>& spectral_solver,
1206 int lev,
1207 const amrex::BoxArray& realspace_ba,
1209 const std::array<amrex::Real,3>& dx,
1210 bool pml_flag=false);
1211# endif
1212#endif
1213
1215 std::string m_authors;
1216
1218 amrex::Vector<int> nsubsteps; // how many substeps on each level?
1219
1223 // How often to update the timestep when using adaptive timestepping
1228
1230
1231 // Particle container
1232 std::unique_ptr<MultiParticleContainer> mypc;
1233 std::unique_ptr<MultiDiagnostics> multi_diags;
1234
1235 // Particle thermalizer configuration (constructed from inputs)
1237
1244
1245 // Fluid container
1246 bool do_fluid_species = false;
1247 std::unique_ptr<MultiFluidContainer> myfl;
1248
1251
1256
1257 //
1258 // Fields: First array for level, second for direction
1259 //
1260
1261 // Masks for computing dot product and global moments of fields when using grids that
1262 // have shared locations across different ranks (e.g., a Yee grid)
1267
1273
1280
1297
1302
1303 // Copy of the coarse aux
1306
1307 // PML
1308 int do_pml = 0;
1310 int pml_ncell = 10;
1311 int pml_delta = 10;
1316 bool do_pml_dive_cleaning; // default set in WarpX.cpp
1317 bool do_pml_divb_cleaning; // default set in WarpX.cpp
1321#if (defined WARPX_DIM_RZ) && (defined WARPX_USE_FFT)
1323#endif
1325
1326 // Insulator boundary conditions
1327 std::unique_ptr<PEC_Insulator> pec_insulator_boundary;
1328
1329 // External fields parameters
1330 std::unique_ptr<ExternalFieldParams> m_p_ext_field_params;
1331
1332 amrex::Real moving_window_x = std::numeric_limits<amrex::Real>::max();
1333
1334 // Mirrors
1339
1340 // Plasma injection parameters
1344
1345 // Timestepping parameters
1346 std::optional<amrex::Real> m_const_dt;
1347 std::optional<amrex::Real> m_max_dt;
1348 std::optional<amrex::Real> m_max_omegap_dt;
1349 std::optional<amrex::Real> m_max_omegac_dt;
1350
1351 // whether to use subcycling
1352 bool m_do_subcycling = false;
1353
1357
1358 // Macroscopic properties
1359 std::unique_ptr<MacroscopicProperties> m_macroscopic_properties;
1360
1361 // Electrostatic solver
1362 std::unique_ptr<ElectrostaticSolver> m_electrostatic_solver;
1363
1364 // Hybrid PIC algorithm parameters
1365 std::unique_ptr<HybridPICModel> m_hybrid_pic_model;
1366
1367 // Load balancing
1401
1402 // Determines timesteps for override sync
1404
1405 // Other runtime parameters
1406 int verbose = 1;
1408
1409 bool use_hybrid_QED = false;
1410
1411 int max_step = std::numeric_limits<int>::max();
1412 amrex::Real stop_time = std::numeric_limits<amrex::Real>::max();
1413
1417 std::optional<amrex::Real> m_zmax_plasma_to_compute_max_step = std::nullopt;
1418
1419 int regrid_int = -1;
1420
1422
1423 std::string restart_chkfile;
1424
1427
1429
1430 bool use_single_read = true;
1431 bool use_single_write = true;
1435
1439 std::unique_ptr<amrex::Parser> ref_patch_parser;
1440
1442
1443 // Synchronization of nodal points
1444 static constexpr bool sync_nodal_points = true;
1445
1447
1448 // Slice Parameters
1453
1455 int nox_fft = 16;
1456 int noy_fft = 16;
1457 int noz_fft = 16;
1458
1459
1460
1462#if defined(AMREX_USE_CUDA)
1464#else
1466#endif
1467
1470
1474
1477
1479 std::unique_ptr<ParticleBoundaryBuffer> m_particle_boundary_buffer;
1480
1481 // Accelerator lattice elements
1483
1484 //
1485 // Embedded Boundary
1486 //
1487
1488 // Factory for field data
1490
1494
1497 [[nodiscard]]
1498 bool checkStopSimulation (amrex::Real cur_time);
1499
1508 void HandleParticlesAtBoundaries (int step, amrex::Real cur_time, int num_moved);
1509
1516
1521
1522 void PushPSATD (amrex::Real start_time);
1523
1524#ifdef WARPX_USE_FFT
1525
1530
1536
1554
1565 std::string const & J_fp_string,
1566 std::string const & J_cp_string,
1567 bool apply_kspace_filter=true);
1568
1576 std::string const & J_fp_string,
1577 std::string const & J_cp_string);
1578
1591 std::string const & charge_fp_string,
1592 std::string const & charge_cp_string,
1593 int icomp, int dcomp, bool apply_kspace_filter=true);
1594
1599
1603 void PSATDMoveJNewToJOld ();
1604
1609
1613 void PSATDMoveJNewToJMid ();
1614
1618 void PSATDForwardTransformF ();
1619
1624
1628 void PSATDForwardTransformG ();
1629
1634
1639
1645 void PSATDScaleAverageFields (amrex::Real scale_factor);
1646
1651
1652# ifdef WARPX_DIM_RZ
1655# else
1658# endif
1659
1660#endif
1661
1664
1665 // implicit solver object
1666 std::unique_ptr<ImplicitSolver> m_implicit_solver;
1667
1669 bool m_JRhom = false;
1671
1679
1680#ifdef AMREX_USE_EB
1685 bool m_build_eb_data_per_level = true;
1687#endif
1688};
1689
1690#endif
#define AMREX_D_DECL(a, b, c)
EvolveScheme
struct to select the overall evolve scheme
Definition WarpXAlgorithmSelection.H:38
@ Default
Definition WarpXAlgorithmSelection.H:38
@ Default
Definition WarpXAlgorithmSelection.H:121
@ Default
Definition WarpXAlgorithmSelection.H:107
@ Default
Definition WarpXAlgorithmSelection.H:59
@ Default
Definition WarpXAlgorithmSelection.H:67
@ Default
Definition WarpXAlgorithmSelection.H:91
@ Default
Definition WarpXAlgorithmSelection.H:87
@ Default
Definition WarpXAlgorithmSelection.H:80
MacroscopicSolverAlgo
struct to select algorithm for macroscopic Maxwell solver LaxWendroff (semi-implicit) represents sigm...
Definition WarpXAlgorithmSelection.H:49
@ Default
Definition WarpXAlgorithmSelection.H:49
MediumForEM
struct to determine the computational medium, i.e., vacuum or material/macroscopic default is vacuum.
Definition WarpXAlgorithmSelection.H:27
@ Default
Definition WarpXAlgorithmSelection.H:27
@ Default
Definition WarpXAlgorithmSelection.H:73
PositionPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:178
@ Full
Definition WarpXAlgorithmSelection.H:178
PSATDSolutionType
Definition WarpXAlgorithmSelection.H:101
@ Default
Definition WarpXAlgorithmSelection.H:101
@ Default
Definition WarpXAlgorithmSelection.H:96
MomentumPushType
For advanced collision algorithms that split the particle push in substeps.
Definition WarpXAlgorithmSelection.H:185
@ Full
Definition WarpXAlgorithmSelection.H:185
ParticleBoundaryType
Definition WarpXAlgorithmSelection.H:146
@ Absorbing
particles crossing domain boundary are removed
Definition WarpXAlgorithmSelection.H:146
@ Default
Definition WarpXAlgorithmSelection.H:113
SubcyclingHalf
Subcycling half selector.
Definition WarpXAlgorithmSelection.H:166
@ None
Definition WarpXAlgorithmSelection.H:166
Definition AcceleratorLattice.H:21
Definition BilinearFilter.H:17
Base class for Electrostatic Solver.
Definition ElectrostaticSolver.H:25
Top-level class for the electromagnetic finite-difference solver.
Definition FiniteDifferenceSolver.H:40
This class contains the parameters needed to evaluate hybrid field solutions (kinetic ions with fluid...
Definition HybridPICModel.H:46
Definition MagnetostaticSolver.H:23
This class contains a vector of all diagnostics in the simulation.
Definition MultiDiagnostics.H:19
Definition MultiFluidContainer.H:36
Definition MultiParticleContainer.H:69
Definition PML_RZ.H:33
Definition PML.H:139
Definition ParticleBoundaryBuffer.H:23
Definition ParticleThermalizer.H:20
std::unique_ptr< ParticleBoundaryBuffer > m_particle_boundary_buffer
particle buffer for scraped particles on the boundaries
Definition WarpX.H:1479
void PSATDMoveRhoNewToRhoOld()
Copy rho_new to rho_old in spectral space (when rho is linear in time).
Definition WarpXPushFieldsEM.cpp:646
static auto field_gathering_algo
Integer that corresponds to the field gathering algorithm (energy-conserving, momentum-conserving).
Definition WarpX.H:190
static int field_centering_nox
Order of finite centering of fields (from staggered grid to nodal grid), along x.
Definition WarpX.H:288
static auto particle_pusher_algo
Integer that corresponds to the particle push algorithm (Boris, Vay, Higuera-Cary).
Definition WarpX.H:192
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > m_eb_reduce_particle_shape
Definition WarpX.H:1279
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition WarpX.H:1373
void LoadExternalFields(int lev)
Load field values from a user-specified openPMD file, for the fields Ex, Ey, Ez, Bx,...
int maxlevel_extEMfield_init
Definition WarpX.H:182
std::unique_ptr< PEC_Insulator > pec_insulator_boundary
Definition WarpX.H:1327
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_y
Definition WarpX.H:937
static int moving_window_dir
Definition WarpX.H:782
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_x
Definition WarpX.H:941
amrex::Real m_quantum_xi_c2
Definition WarpX.H:530
ablastr::utils::text::IntervalsParser override_sync_intervals
Definition WarpX.H:1403
void InitFilter()
void SyncMassMatrices()
Definition WarpXComm.cpp:1324
void BuildBufferMasks()
Definition WarpX.cpp:3536
void PSATDMoveJNewToJMid()
Copy J_new to J_mid in spectral space (when J is quadratic in time).
Definition WarpXPushFieldsEM.cpp:698
void SaveParticlesAtImplicitStepStart()
Definition WarpXImplicitOps.cpp:130
HybridPICModel * get_pointer_HybridPICModel() const
Definition WarpX.H:164
static auto poisson_solver_id
Definition WarpX.H:767
void PushPSATD(amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:771
bool use_hybrid_QED
Definition WarpX.H:1409
static bool do_dive_cleaning
Definition WarpX.H:269
bool DoFluidSpecies() const
Definition WarpX.H:405
static std::string Version()
Version of WarpX executable.
Definition WarpXVersion.cpp:14
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition WarpX.H:1359
bool DoPML() const
Definition WarpX.H:404
void ProjectionCleanDivB()
Definition ProjectionDivCleaner.cpp:415
static constexpr bool sync_nodal_points
Definition WarpX.H:1444
int pml_delta
Definition WarpX.H:1311
amrex::Real magnetostatic_solver_required_precision
Definition WarpX.H:821
amrex::Vector< std::unique_ptr< amrex::FabFactory< amrex::FArrayBox > > > m_field_factory
Definition WarpX.H:1489
bool getis_synchronized() const
Definition WarpX.H:731
void PSATDBackwardTransformJ(std::string const &J_fp_string, std::string const &J_cp_string)
Backward FFT of J on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:545
int do_pml_j_damping
Definition WarpX.H:1313
EvolveScheme evolve_scheme
Integer that corresponds to the evolve scheme (explicit, semi_implicit_em, theta_implicit_em).
Definition WarpX.H:196
int noy_fft
Definition WarpX.H:1456
static constexpr int villasenor_mass_matrices_max_grid_crossings
Definition WarpX.H:285
amrex::Vector< amrex::Real > m_v_galilean
Definition WarpX.H:422
void ResetProbDomain(const amrex::RealBox &rb)
Definition WarpXMovingWindow.cpp:764
static amrex::Array< ParticleBoundaryType, 3 > particle_boundary_hi
Definition WarpX.H:221
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition WarpX.H:1305
void updateStopTime(const amrex::Real new_stop_time)
Definition WarpX.H:736
void RestrictCurrentFromFineToCoarsePatch(const ablastr::fields::MultiLevelVectorField &J_fp, const ablastr::fields::MultiLevelVectorField &J_cp, int lev)
Fills the values of the current on the coarse patch by averaging the values of the current of the fin...
Definition WarpXComm.cpp:1431
static amrex::Real zmin_domain_boost_step_0
Definition WarpX.H:335
ParticleBoundaryBuffer & GetParticleBoundaryBuffer()
Definition WarpX.H:166
void PSATDBackwardTransformEBavg(ablastr::fields::MultiLevelVectorField const &E_avg_fp, ablastr::fields::MultiLevelVectorField const &B_avg_fp, ablastr::fields::MultiLevelVectorField const &E_avg_cp, ablastr::fields::MultiLevelVectorField const &B_avg_cp)
Backward FFT of averaged E,B on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:349
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & GetEBUpdateEFlag()
Definition WarpX.H:167
static bool sort_particles_for_deposition
If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition.
Definition WarpX.H:347
void SyncMassMatricesPC()
Definition WarpXComm.cpp:1307
static int n_field_gather_buffer
Definition WarpX.H:354
amrex::Vector< amrex::Real > t_new
Definition WarpX.H:1220
static bool do_single_precision_comms
perform field communications in single precision
Definition WarpX.H:247
amrex::IntVect slice_cr_ratio
Definition WarpX.H:1452
int field_io_nfiles
Definition WarpX.H:1433
amrex::Vector< int > getnsubsteps() const
Definition WarpX.H:717
guardCellManager guard_cells
Definition WarpX.H:1446
int magnetostatic_solver_verbosity
Definition WarpX.H:824
static void ComputeDivB(amrex::MultiFab &divB, int dcomp, ablastr::fields::VectorField const &B, const std::array< amrex::Real, 3 > &dx)
Definition WarpX.cpp:3349
static bool do_shared_mem_charge_deposition
used shared memory algorithm for charge deposition
Definition WarpX.H:250
void ComputeMagnetostaticField()
Definition MagnetostaticSolver.cpp:62
amrex::Real stop_time
Definition WarpX.H:1412
void EvolveG(amrex::Real dt)
Definition WarpXPushFieldsEM.cpp:1143
static amrex::Vector< int > boost_direction
Direction of the Lorentz transform that defines the boosted frame of the simulation.
Definition WarpX.H:119
void ComputeDt()
Definition WarpXComputeDt.cpp:51
bool m_exit_loop_due_to_interrupt_signal
Definition WarpX.H:1493
static bool use_fdtd_nci_corr
Definition WarpX.H:304
FiniteDifferenceSolver * get_pointer_fdtd_solver_fp(int lev)
Definition WarpX.H:985
amrex::IntVect m_sort_idx_type
Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed.
Definition WarpX.H:1469
static amrex::Real moving_window_v
Definition WarpX.H:783
static bool do_shared_mem_current_deposition
use shared memory algorithm for current deposition
Definition WarpX.H:253
const AcceleratorLattice & get_accelerator_lattice(int lev)
Definition WarpX.H:950
amrex::Vector< amrex::IntVect > do_pml_Hi
Definition WarpX.H:1319
std::string GetAuthors() const
If an authors' string is specified in the inputfile, this method returns that string....
Definition WarpX.H:176
void setistep(int lev, int ii)
Definition WarpX.H:721
void CheckLoadBalance(int step)
Definition WarpXRegrid.cpp:58
static auto load_balance_costs_update_algo
Definition WarpX.H:200
static bool fft_do_time_averaging
Definition WarpX.H:784
void PSATDForwardTransformEB()
Forward FFT of E,B on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:267
void ClearLevel(int lev) final
Delete level data. Called by AmrCore::regrid.
Definition WarpX.cpp:2323
amrex::Vector< std::unique_ptr< PML > > pml
Definition WarpX.H:1320
void OneStep_JRhom(amrex::Real cur_time)
Perform one PIC iteration, with the multiple J deposition per time step.
Definition WarpXEvolve.cpp:906
void FillBoundaryE_avg(amrex::IntVect ng)
Definition WarpXComm.cpp:708
static amrex::Array< ParticleBoundaryType, 3 > particle_boundary_lo
Definition WarpX.H:215
amrex::RealVect fine_tag_lo
Definition WarpX.H:1436
void SumBoundaryJ(const ablastr::fields::MultiLevelVectorField &current, int lev, int idim, const amrex::Periodicity &period)
Definition WarpXComm.cpp:1679
std::string restart_chkfile
Definition WarpX.H:1423
static WarpX * m_instance
Definition WarpX.H:1076
void HybridPICInitializeRhoJandB()
Hybrid-PIC initial deposition function. The hybrid-PIC algorithm uses the charge and current density ...
Definition WarpXPushFieldsHybridPIC.cpp:352
void ReadExternalFieldFromFile(const std::string &read_fields_from_path, amrex::MultiFab *mf, const std::string &F_name, const std::string &F_component, int dest_comp=0)
Load field values from a user-specified openPMD file for a specific field (specified by F_name).
int m_current_centering_noz
Order of finite centering of currents (from nodal grid to staggered grid), along z.
Definition WarpX.H:1243
static bool do_dynamic_scheduling
Definition WarpX.H:340
void computeVectorPotential(ablastr::fields::MultiLevelVectorField const &curr, ablastr::fields::MultiLevelVectorField const &A, amrex::Real required_precision=amrex::Real(1.e-11), amrex::Real absolute_tolerance=amrex::Real(0.0), int max_iters=200, int verbosity=2)
Definition MagnetostaticSolver.cpp:154
void PostRestart()
void InitFromCheckpoint()
Definition WarpXIO.cpp:96
std::unique_ptr< amrex::Parser > ref_patch_parser
User-defined parser to define refinement patches.
Definition WarpX.H:1439
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_z
Definition WarpX.H:938
amrex::Real stopTime() const
Definition WarpX.H:735
amrex::Vector< std::unique_ptr< PML_RZ > > pml_rz
Definition WarpX.H:1322
void FillBoundaryE(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:672
amrex::Vector< amrex::Real > m_v_comoving
Definition WarpX.H:425
void InitData()
std::unique_ptr< MultiFluidContainer > myfl
Definition WarpX.H:1247
void PSATDBackwardTransformG()
Backward FFT of G on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:445
amrex::Array< amrex::Real, 3 > m_galilean_shift
Definition WarpX.H:423
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_x
Definition WarpX.H:936
std::unique_ptr< HybridPICModel > m_hybrid_pic_model
Definition WarpX.H:1365
amrex::Vector< amrex::Real > getdt() const
Definition WarpX.H:727
bool m_safe_guard_cells
Definition WarpX.H:1229
static int noz
Order of the particle shape factors (splines) along z.
Definition WarpX.H:278
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_z
Definition WarpX.H:943
int mffile_nstreams
Definition WarpX.H:1432
void AddMagnetostaticFieldLabFrame()
Definition MagnetostaticSolver.cpp:75
void SpectralSourceFreeFieldAdvance(amrex::Real start_time)
Definition WarpXImplicitOps.cpp:92
bool m_JRhom
PSATD JRhom algorithm.
Definition WarpX.H:1669
bool do_pml_divb_cleaning
Definition WarpX.H:1317
int magnetostatic_solver_max_iters
Definition WarpX.H:823
static auto time_dependency_J
Definition WarpX.H:230
static amrex::Array< FieldBoundaryType, 3 > field_boundary_lo
Definition WarpX.H:204
void ApplyDtLimiters(int step)
Definition WarpXComputeDt.cpp:271
void ReadParameters()
Definition WarpX.cpp:562
amrex::Vector< amrex::Real > gett_old() const
Definition WarpX.H:722
void setVectorPotentialBC(ablastr::fields::MultiLevelVectorField const &A) const
Definition MagnetostaticSolver.cpp:230
static void ResetInstance()
Definition WarpX.cpp:320
int verbose
Definition WarpX.H:1406
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_y
Definition WarpX.H:942
void InitDiagnostics()
void InitLevelData(int lev, amrex::Real time)
This function initializes E, B, rho, and F, at all the levels of the multifab. rho and F are initiali...
static auto electromagnetic_solver_id
Integer that corresponds to the type of Maxwell solver (Yee, CKC, PSATD, ECT).
Definition WarpX.H:194
amrex::IntVect ApplyVolumeWeightedFilter(amrex::MultiFab &dst, const amrex::MultiFab &src_mf, int lev, int scomp, int dcomp, int ncomp)
Definition WarpXComm.cpp:1483
amrex::Real load_balance_knapsack_factor
Definition WarpX.H:1380
int MoveWindow(int step, bool move_j)
Move the moving window.
Definition WarpXMovingWindow.cpp:361
amrex::Vector< amrex::Real > load_balance_efficiency
Definition WarpX.H:1388
static amrex::IntVect sort_bin_size
Definition WarpX.H:344
amrex::IntVect m_rho_nodal_flag
Definition WarpX.H:365
void PSATDMoveRhoNewToRhoMid()
Copy rho_new to rho_mid in spectral space (when rho is quadratic in time).
Definition WarpXPushFieldsEM.cpp:662
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_ext_face
Definition WarpX.H:1296
std::optional< amrex::Real > m_max_omegap_dt
Definition WarpX.H:1348
amrex::IntVect getngEB() const
Definition WarpX.H:800
static auto charge_deposition_algo
Integer that corresponds to the charge deposition algorithm (only standard deposition).
Definition WarpX.H:188
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > Efield_dotMask
Definition WarpX.H:1263
void ComputeCostsHeuristic(amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > &costs)
adds particle and cell contributions in cells to compute heuristic cost in each box on each level,...
Definition WarpXRegrid.cpp:348
void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &new_grids, const amrex::DistributionMapping &new_dmap) final
Definition WarpX.cpp:2307
amrex::Real gett_old(int lev) const
Definition WarpX.H:723
static int do_moving_window
Definition WarpX.H:769
void MakeNewLevelFromCoarse(int, amrex::Real, const amrex::BoxArray &, const amrex::DistributionMapping &) final
Definition WarpX.cpp:2316
amrex::Real moving_window_x
Definition WarpX.H:1332
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > & GetEBUpdateBFlag()
Definition WarpX.H:168
int maxStep() const
Definition WarpX.H:733
static int nox
Order of the particle shape factors (splines) along x.
Definition WarpX.H:274
int getnsubsteps(int lev) const
Definition WarpX.H:718
WarpX(WarpX const &)=delete
amrex::Vector< int > getistep() const
Definition WarpX.H:719
void InitFromScratch()
ablastr::utils::text::IntervalsParser m_dt_update_interval
Definition WarpX.H:1224
bool synchronize_velocity_for_diagnostics
Definition WarpX.H:1428
void DepositMassMatrices()
Definition WarpXImplicitOps.cpp:280
PSATDSolutionType m_psatd_solution_type
Definition WarpX.H:1520
amrex::Vector< int > m_mirror_z_npoints
Definition WarpX.H:1338
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_info_face
Definition WarpX.H:1289
void updateMaxStep(const int new_max_step)
Definition WarpX.H:734
void UpdateMagneticFieldAndApplyBCs(ablastr::fields::MultiLevelVectorField const &a_Bn, amrex::Real a_thetadt, amrex::Real start_time)
Definition WarpXImplicitOps.cpp:64
void PSATDMoveJNewToJOld()
Copy J_new to J_old in spectral space (when J is linear in time).
Definition WarpXPushFieldsEM.cpp:678
static bool serialize_initial_conditions
If true, the initial conditions from random number generators are serialized (useful for reproducible...
Definition WarpX.H:324
static ablastr::utils::text::IntervalsParser sort_intervals
Definition WarpX.H:343
std::optional< amrex::Real > m_zmax_plasma_to_compute_max_step
Definition WarpX.H:1417
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition WarpX.H:1653
static amrex::IntVect m_fill_guards_fields
Whether to fill guard cells when computing inverse FFTs of fields.
Definition WarpX.H:262
ablastr::utils::text::IntervalsParser m_dt_update_write_interval
Definition WarpX.H:1225
MacroscopicSolverAlgo m_macroscopic_solver_algo
Definition WarpX.H:1255
void SynchronizeVelocityWithPosition()
Definition WarpXEvolve.cpp:116
ablastr::fields::MultiFabRegister & GetMultiFabRegister()
Definition WarpX.H:989
amrex::DistributionMapping MakeDistributionMap(int lev, amrex::BoxArray const &ba) final
Use this function to override how DistributionMapping is made.
Definition WarpX.cpp:3643
void EvolveB(amrex::Real dt, SubcyclingHalf subcycling_half, amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:946
static bool use_filter_compensation
If true, a compensation step is added to the bilinear filtering of charge and currents.
Definition WarpX.H:321
amrex::Vector< std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > > m_borrowing
Definition WarpX.H:1301
void HybridPICDepositRhoAndJ()
Hybrid-PIC deposition function. Helper function to contain all the needed logic to deposit charge and...
Definition WarpXPushFieldsHybridPIC.cpp:224
void PSATDPushSpectralFields()
Update all necessary fields in spectral space.
Definition WarpXPushFieldsEM.cpp:632
amrex::Real cfl
Definition WarpX.H:1421
bool m_sort_particles_for_deposition
If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition.
Definition WarpX.H:1465
amrex::Real gett_new(int lev) const
Definition WarpX.H:725
amrex::Vector< amrex::Real > dt
Definition WarpX.H:1222
MultiFluidContainer & GetFluidContainer()
Definition WarpX.H:162
void HybridPICEvolveFields()
Hybrid-PIC field evolve function. This function contains the logic involved in evolving the electric ...
Definition WarpXPushFieldsHybridPIC.cpp:25
int nox_fft
Definition WarpX.H:1455
int particle_io_nfiles
Definition WarpX.H:1434
void AllocInitMultiFab(std::unique_ptr< amrex::iMultiFab > &mf, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, int ncomp, const amrex::IntVect &ngrow, int level, const std::string &name, std::optional< const int > initial_value={})
Allocate and optionally initialize the iMultiFab. This also adds the iMultiFab to the map of MultiFab...
Definition WarpX.cpp:3622
static void Finalize()
This method has to be called at the end of the simulation. It deletes the WarpX instance.
Definition WarpX.cpp:329
static WarpX & GetInstance()
Definition WarpX.cpp:311
static auto grid_type
Definition WarpX.H:362
void AddCurrentFromFineLevelandSumBoundary(const ablastr::fields::MultiLevelVectorField &J_fp, const ablastr::fields::MultiLevelVectorField &J_cp, const ablastr::fields::MultiLevelVectorField &J_buffer, int lev)
Update the currents of lev by adding the currents from particles that are in the mesh refinement patc...
Definition WarpXComm.cpp:1746
amrex::RealVect fine_tag_hi
Definition WarpX.H:1437
amrex::IntVect get_ng_fieldgather() const
Definition WarpX.H:805
amrex::IntVect get_ng_depos_rho() const
Definition WarpX.H:804
const amrex::iMultiFab * getFieldDotMaskPointer(warpx::fields::FieldType field_type, int lev, ablastr::fields::Direction dir) const
Get pointer to the amrex::MultiFab containing the dotMask for the specified field.
Definition WarpX.cpp:3680
static int start_moving_window_step
Definition WarpX.H:770
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > Afield_dotMask
Definition WarpX.H:1265
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition WarpX.H:1183
void OneStep_sub1(amrex::Real cur_time)
Perform one PIC iteration, with subcycling i.e. The fine patch uses a smaller timestep (and steps mor...
Definition WarpXEvolve.cpp:1126
void PSATDForwardTransformF()
Forward FFT of F on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:375
int do_silver_mueller
Definition WarpX.H:1309
void RescaleCosts(int step)
Definition WarpXRegrid.cpp:398
amrex::Vector< int > istep
Definition WarpX.H:1217
bool m_do_initial_div_cleaning
Definition WarpX.H:1473
void PrintMainPICparameters()
const amrex::Array< FieldBoundaryType, 3 > & GetFieldBoundaryHi() const
Definition WarpX.H:123
void FillBoundaryB(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:663
void HandleSignals()
Complete the asynchronous broadcast of signal flags, and initiate a checkpoint if requested.
Definition WarpXEvolve.cpp:1568
static int n_current_deposition_buffer
Definition WarpX.H:358
void HandleParticlesAtBoundaries(int step, amrex::Real cur_time, int num_moved)
Definition WarpXEvolve.cpp:736
int Verbose() const
Definition WarpX.H:116
bool m_verboncoeur_axis_correction
Definition WarpX.H:1356
void PSATDScaleAverageFields(amrex::Real scale_factor)
Scale averaged E,B fields to account for time integration.
Definition WarpXPushFieldsEM.cpp:744
amrex::DistributionMapping GetRestartDMap(const std::string &chkfile, const amrex::BoxArray &ba, int lev) const
Definition WarpXIO.cpp:63
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > Bfield_dotMask
Definition WarpX.H:1264
void ShiftGalileanBoundary()
This function shifts the boundary of the grid by 'm_v_galilean*dt'. In doding so, only positions attr...
Definition WarpXMovingWindow.cpp:707
amrex::Real magnetostatic_solver_absolute_tolerance
Definition WarpX.H:822
amrex::Vector< int > injected_plasma_species
Definition WarpX.H:1343
void ApplyFilterMF(const ablastr::fields::MultiLevelVectorField &mfvec, int lev, int idim)
Definition WarpXComm.cpp:1453
bool m_is_synchronized
Definition WarpX.H:1441
void Evolve(int numsteps=-1)
Definition WarpXEvolve.cpp:150
static bool use_kspace_filter
If true, the bilinear filtering of charge and currents is done in Fourier space.
Definition WarpX.H:319
void InitNCICorrector()
void FinishImplicitField(const ablastr::fields::MultiLevelVectorField &Field_fp, const ablastr::fields::MultiLevelVectorField &Field_n, amrex::Real theta)
Definition WarpXImplicitOps.cpp:229
int getistep(int lev) const
Definition WarpX.H:720
std::unique_ptr< MultiDiagnostics > multi_diags
Definition WarpX.H:1233
static int noy
Order of the particle shape factors (splines) along y.
Definition WarpX.H:276
amrex::Vector< int > nsubsteps
Definition WarpX.H:1218
amrex::Vector< amrex::Real > gett_new() const
Definition WarpX.H:724
void ComputeMaxStep()
Compute the last time step of the simulation Calls computeMaxStepBoostAccelerator() if required.
int noz_fft
Definition WarpX.H:1457
std::optional< amrex::Real > m_max_omegac_dt
Definition WarpX.H:1349
static int field_centering_noz
Order of finite centering of fields (from staggered grid to nodal grid), along z.
Definition WarpX.H:292
void sett_new(int lev, amrex::Real time)
Definition WarpX.H:726
amrex::Real load_balance_efficiency_ratio_threshold
Definition WarpX.H:1386
ElectrostaticSolver & GetElectrostaticSolver()
Definition WarpX.H:163
amrex::IntVect getngF() const
Definition WarpX.H:801
static std::string PicsarVersion()
Version of PICSAR dependency.
Definition WarpXVersion.cpp:28
static amrex::Real beta_boost
Beta value corresponding to the Lorentz factor of the boosted frame of the simulation.
Definition WarpX.H:329
void FillBoundaryB_avg(amrex::IntVect ng)
Definition WarpXComm.cpp:699
bool do_fluid_species
Definition WarpX.H:1246
MultiParticleContainer & GetPartContainer()
Definition WarpX.H:161
std::unique_ptr< ImplicitSolver > m_implicit_solver
Definition WarpX.H:1666
void FinishMagneticFieldAndApplyBCs(ablastr::fields::MultiLevelVectorField const &a_Bn, amrex::Real a_theta, amrex::Real a_time)
Definition WarpXImplicitOps.cpp:81
void InitializeEBGridData(int lev)
This function initializes and calculates grid quantities used along with EBs such as edge lengths,...
void CheckGuardCells()
Check that the number of guard cells is smaller than the number of valid cells, for all available Mul...
static auto current_deposition_algo
Integer that corresponds to the current deposition algorithm (Esirkepov, direct, Vay,...
Definition WarpX.H:186
static bool do_divb_cleaning
Solve additional Maxwell equation for G in order to control errors in magnetic Gauss' law.
Definition WarpX.H:271
WarpX()
WarpX constructor. This method should not be called directly, but rather through the static member fu...
Definition WarpX.cpp:337
static auto electrostatic_solver_id
Definition WarpX.H:766
int load_balance_with_sfc
Definition WarpX.H:1375
void RestrictRhoFromFineToCoarsePatch(int lev)
Definition WarpXComm.cpp:1824
std::unique_ptr< MultiParticleContainer > mypc
Definition WarpX.H:1232
int m_current_centering_noy
Order of finite centering of currents (from nodal grid to staggered grid), along y.
Definition WarpX.H:1241
static bool use_filter
If true, a bilinear filter is used to smooth charge and currents.
Definition WarpX.H:317
void AddExternalFields(int lev)
void MacroscopicEvolveE(amrex::Real dt, amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:1195
static amrex::IntVect m_fill_guards_current
Whether to fill guard cells when computing inverse FFTs of currents.
Definition WarpX.H:265
void ComputeExternalFieldOnGridUsingParser(const std::variant< warpx::fields::FieldType, std::string > &field, amrex::ParserExecutor< 4 > const &fx_parser, amrex::ParserExecutor< 4 > const &fy_parser, amrex::ParserExecutor< 4 > const &fz_parser, int lev, PatchType patch_type, amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > const &eb_update_field, bool use_eb_flags=true)
This function computes the E, B, and J fields on each level using the parser and the user-defined fun...
void CalculateExternalCurlA()
Definition WarpXPushFieldsHybridPIC.cpp:436
MagnetostaticSolver::VectorPoissonBoundaryHandler m_vector_poisson_boundary_handler
Definition WarpX.H:820
bool m_collisions_split_momentum_push
WarpX class attribute that controls whether collisions are placed in the middle of the position push ...
Definition WarpX.H:1678
static amrex::IntVect shared_tilesize
tileSize to use for shared current deposition operations
Definition WarpX.H:259
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition WarpX.H:1662
std::unique_ptr< ElectrostaticSolver > m_electrostatic_solver
Definition WarpX.H:1362
void ExplicitFillBoundaryEBUpdateAux()
Definition WarpXEvolve.cpp:675
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition WarpX.H:1187
int m_current_centering_nox
Order of finite centering of currents (from nodal grid to staggered grid), along x.
Definition WarpX.H:1239
amrex::IntVect getngUpdateAux() const
Definition WarpX.H:802
static void MakeWarpX()
This method creates a new instance of the WarpX class.
Definition WarpX.cpp:274
ablastr::utils::text::IntervalsParser load_balance_intervals
Definition WarpX.H:1370
amrex::Vector< amrex::Real > m_mirror_z_width
Definition WarpX.H:1337
int slice_plot_int
Definition WarpX.H:1450
void BackwardCompatibility()
Definition WarpX.cpp:2005
void FinishImplicitParticleUpdate(amrex::Real a_time)
Definition WarpXImplicitOps.cpp:209
void EvolveE(amrex::Real dt, amrex::Real start_time)
Definition WarpXPushFieldsEM.cpp:1000
int num_injected_species
Definition WarpX.H:1342
MediumForEM m_em_solver_medium
Integer that corresponds to electromagnetic Maxwell solver (vacuum - 0, macroscopic - 1).
Definition WarpX.H:1250
amrex::Vector< amrex::Real > t_old
Definition WarpX.H:1221
void WriteDtUpdateFileHeader()
Definition WarpXComputeDt.cpp:222
static amrex::IntVect sort_idx_type
Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed.
Definition WarpX.H:349
int regrid_int
Definition WarpX.H:1419
bool use_single_write
Definition WarpX.H:1431
static bool refine_plasma
Definition WarpX.H:341
ablastr::utils::text::IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition WarpX.H:554
void PSATDForwardTransformRho(std::string const &charge_fp_string, std::string const &charge_cp_string, int icomp, int dcomp, bool apply_kspace_filter=true)
Forward FFT of rho on all mesh refinement levels, with k-space filtering (if needed).
Definition WarpXPushFieldsEM.cpp:589
static amrex::Array< FieldBoundaryType, 3 > field_boundary_hi
Definition WarpX.H:209
void PSATDForwardTransformJ(std::string const &J_fp_string, std::string const &J_cp_string, bool apply_kspace_filter=true)
Forward FFT of J on all mesh refinement levels, with k-space filtering (if needed).
Definition WarpXPushFieldsEM.cpp:476
bool use_single_read
Definition WarpX.H:1430
amrex::IntVect numprocs
Domain decomposition on Level 0.
Definition WarpX.H:1476
static int ncomps
Definition WarpX.H:300
std::map< std::string, amrex::iMultiFab * > imultifab_map
Definition WarpX.H:395
static int moving_window_active(int const step)
Definition WarpX.H:777
void PSATDForwardTransformG()
Forward FFT of G on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:425
const amrex::Array< FieldBoundaryType, 3 > & GetFieldBoundaryLo() const
Definition WarpX.H:118
bool m_limit_verbose_step
Definition WarpX.H:1407
int warpx_do_continuous_injection
Definition WarpX.H:1341
void OneStep(amrex::Real a_cur_time, amrex::Real a_dt, int a_step)
Perform collisions, particle injection, and advance fields and particles by one time step.
Definition WarpXEvolve.cpp:405
static bool galerkin_interpolation
Definition WarpX.H:314
int do_pml_in_domain
Definition WarpX.H:1314
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_eb_update_E
Definition WarpX.H:1271
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_bxbyez
Definition WarpX.H:419
void ErrorEst(int lev, amrex::TagBoxArray &tags, amrex::Real time, int) final
Tagging cells for refinement.
Definition WarpX.cpp:3489
static amrex::IntVect filter_npass_each_dir
Definition WarpX.H:416
void ComputeDivE(amrex::MultiFab &divE, int lev)
Definition WarpX.cpp:3393
amrex::IntVect get_numprocs() const
Definition WarpX.H:814
amrex::Real GlobalCyclotronFrequencyMax()
Definition WarpXComputeDt.cpp:125
void AllocLevelData(int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm)
Definition WarpX.cpp:2347
ablastr::fields::MultiFabRegister m_fields
Definition WarpX.H:988
void InitPML()
void ApplyFilterJ(const ablastr::fields::MultiLevelVectorField &current, int lev, int idim)
Definition WarpXComm.cpp:1651
amrex::Real v_particle_pml
Definition WarpX.H:1324
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_eb_update_B
Definition WarpX.H:1272
amrex::IntVect get_ng_depos_J() const
Definition WarpX.H:803
WarpX(WarpX &&)=delete
BilinearFilter bilinear_filter
Definition WarpX.H:417
static int particle_max_grid_crossings
Maximum number of allowed grid crossings for particles.
Definition WarpX.H:281
void FillBoundaryF(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:681
bool fft_periodic_single_box
Definition WarpX.H:1454
void PSATDBackwardTransformEB()
Backward FFT of E,B on all mesh refinement levels, with field damping in the guard cells (if needed).
Definition WarpXPushFieldsEM.cpp:301
void AddRhoFromFineLevelandSumBoundary(const ablastr::fields::MultiLevelScalarField &charge_fp, const ablastr::fields::MultiLevelScalarField &charge_cp, ablastr::fields::MultiLevelScalarField const &charge_buffer, int lev, int icomp, int ncomp)
Update the charge density of lev by adding the charge density from particles that are in the mesh ref...
Definition WarpXComm.cpp:1891
static int field_centering_noy
Order of finite centering of fields (from staggered grid to nodal grid), along y.
Definition WarpX.H:290
int do_pml
Definition WarpX.H:1308
amrex::Real getdt(int lev) const
Definition WarpX.H:728
int max_step
Definition WarpX.H:1411
bool m_do_subcycling
Definition WarpX.H:1352
ParticleThermalizer m_particle_thermalizer
Definition WarpX.H:1236
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > const & GetEBReduceParticleShapeFlag() const
Definition WarpX.H:169
amrex::Real costs_heuristic_particles_wt
Definition WarpX.H:1400
int pml_has_particles
Definition WarpX.H:1312
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition WarpX.H:418
bool do_current_centering
Definition WarpX.H:236
std::string m_dt_update_diagnostic_file
Definition WarpX.H:1226
int getdo_moving_window() const
Definition WarpX.H:729
auto & get_spectral_solver_fp(int lev)
Definition WarpX.H:982
int pml_ncell
Definition WarpX.H:1310
static int n_rz_azimuthal_modes
Number of modes for the RZ multi-mode version.
Definition WarpX.H:295
void PSATDBackwardTransformF()
Backward FFT of F on all mesh refinement levels.
Definition WarpXPushFieldsEM.cpp:395
std::unique_ptr< ExternalFieldParams > m_p_ext_field_params
Definition WarpX.H:1330
static amrex::Real gamma_boost
Lorentz factor of the boosted frame in which a boosted-frame simulation is run.
Definition WarpX.H:327
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > phi_dotMask
Definition WarpX.H:1266
static int shared_mem_current_tpb
number of threads to use per block in shared deposition
Definition WarpX.H:256
bool write_diagnostics_on_restart
Definition WarpX.H:1426
int m_num_mirrors
Definition WarpX.H:1335
static ParticleBoundaryType eb_particle_boundary
Definition WarpX.H:226
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition WarpX.H:1663
void ResetCosts()
resets costs to zero
Definition WarpXRegrid.cpp:381
void computeMaxStepBoostAccelerator()
bool checkStopSimulation(amrex::Real cur_time)
Definition WarpXEvolve.cpp:668
std::unique_ptr< MultiReducedDiags > reduced_diags
object with all reduced diagnostics, similar to MultiParticleContainer for species.
Definition WarpX.H:428
amrex::Vector< amrex::Real > m_mirror_z
Definition WarpX.H:1336
std::optional< amrex::Real > m_max_dt
Definition WarpX.H:1347
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition WarpX.H:1304
std::string m_authors
Author of an input file / simulation setup.
Definition WarpX.H:1215
int m_JRhom_subintervals
Definition WarpX.H:1670
int slice_max_grid_size
Definition WarpX.H:1449
void PSATDEraseAverageFields()
Set averaged E,B fields to zero before new iteration.
Definition WarpXPushFieldsEM.cpp:718
void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) final
Definition WarpXRegrid.cpp:176
void ImplicitComputeRHSE(amrex::Real dt, WarpXSolverVec &a_Erhs_vec)
Definition WarpXImplicitOps.cpp:296
void FillBoundaryG(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition WarpXComm.cpp:690
void ApplyFilterandSumBoundaryRho(int lev, int glev, amrex::MultiFab &rho, int icomp, int ncomp)
Definition WarpXComm.cpp:1848
void OneStep_nosub(amrex::Real a_cur_time, amrex::Real a_dt, int a_step)
Perform one PIC iteration, without subcycling i.e. all levels/patches use the same timestep (that of ...
Definition WarpXEvolve.cpp:527
amrex::Vector< std::unique_ptr< AcceleratorLattice > > m_accelerator_lattice
Definition WarpX.H:1482
static auto time_dependency_rho
Definition WarpX.H:231
std::optional< amrex::Real > m_const_dt
Definition WarpX.H:1346
void Hybrid_QED_Push(amrex::Vector< amrex::Real > dt)
Definition WarpX_QED_Field_Pushers.cpp:47
amrex::RealBox slice_realbox
Definition WarpX.H:1451
amrex::Vector< amrex::IntVect > do_pml_Lo
Definition WarpX.H:1318
void applyMirrors(amrex::Real time)
Definition WarpXEvolve.cpp:1507
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition WarpX.H:1654
amrex::Real getmoving_window_x() const
Definition WarpX.H:730
amrex::Real costs_heuristic_cells_wt
Definition WarpX.H:1394
bool do_pml_dive_cleaning
Definition WarpX.H:1316
amrex::Real GlobalPlasmaFrequencyMax()
Definition WarpXComputeDt.cpp:117
bool do_similar_dm_pml
Definition WarpX.H:1315
void EvolveF(amrex::Real dt, int rho_comp)
Definition WarpXPushFieldsEM.cpp:1089
void SetElectricFieldAndApplyBCs(const WarpXSolverVec &a_E, amrex::Real a_time)
Definition WarpXImplicitOps.cpp:46
static bool compute_max_step_from_btd
If true, the code will compute max_step from the back transformed diagnostics.
Definition WarpX.H:338
bool current_correction
If true, a correction is applied to the current in Fourier space,.
Definition WarpX.H:240
void ComputePMLFactors()
static int end_moving_window_step
Definition WarpX.H:771
bool update_with_rho
Definition WarpX.H:244
void LoadBalance()
perform load balance; compute and communicate new amrex::DistributionMapping
Definition WarpXRegrid.cpp:74
amrex::Real time_of_last_gal_shift
Definition WarpX.H:421
MultiDiagnostics & GetMultiDiags()
Definition WarpX.H:165
This is a wrapper class around a Vector of pointers to MultiFabs that contains basic math operators a...
Definition WarpXSolverVec.H:56
Definition MultiFabRegister.H:71
This class is a parser for multiple slices of the form x,y,z,... where x, y and z are slices of the f...
Definition IntervalsParser.H:105
static IndexSpace & top()
const FAB & get(const MFIter &mfi) const noexcept
This class computes and stores the number of guard cells needed for the allocation of the MultiFabs a...
Definition GuardCellManager.H:23
amrex_real Real
PODVector< T, ArenaAllocator< T > > DeviceVector
std::array< T, N > Array
std::array< amrex::MultiFab *, 3 > VectorField
Definition MultiFabRegister.H:201
amrex::Vector< ScalarField > MultiLevelScalarField
Definition MultiFabRegister.H:210
amrex::Vector< VectorField > MultiLevelVectorField
Definition MultiFabRegister.H:218
@ Default
Definition Enums.H:23
PatchType
Definition Enums.H:30
BoxND< 3 > Box
IntVectND< 3 > IntVect
RealVectND< 3 > RealVect
FieldType
Definition Fields.H:92
Definition ImplicitOptions.H:7
Definition MultiFabRegister.H:275