4#include <AMReX_Config.H>
101 virtual void read (std::istream& is,
110 virtual void write (std::ostream& os,
113 int num_comp)
const = 0;
120 virtual void skip (std::istream& is,
123 virtual void skip (std::istream& is,
125 int nCompToSkip)
const = 0;
155 int& nCompAvailable);
168 void read (std::istream& is,
171 void write (std::ostream& os,
174 int num_comp)
const override;
176 void skip (std::istream& is,
179 void skip (std::istream& is,
181 int nCompToSkip)
const override;
184 void write_header (std::ostream& os,
186 int nvar)
const override;
188 std::unique_ptr<RealDescriptor> realDesc;
251 Arena* ar =
nullptr);
289 [[nodiscard]]
bool contains_nan (const
Box& bx,
int scomp,
int ncomp) const noexcept;
308 [[nodiscard]]
bool contains_inf (const
Box& bx,
int scomp,
int ncomp) const noexcept;
327 friend std::ostream& operator<< (std::ostream& os, const
FArrayBox& fb);
329 friend std::istream& operator>> (std::istream& is,
FArrayBox& fb);
334 void writeOn (std::ostream& os) const;
347 void writeOn (std::ostream& os,
349 int num_comp=1) const;
360 int readFrom (std::istream& is,
int compIndex);
371 static
void skipFAB (std::istream& is);
462template <
RunOn run_on>
470template <RunOn run_on>
481 reduce_op.
eval(n, reduce_data,
484 return {
static_cast<int>(amrex::isnan(dp[i])) };
486 ReduceTuple hv = reduce_data.
value(reduce_op);
487 return amrex::get<0>(hv);
491 for (
Long i = 0; i < n; i++) {
492 if (amrex::isnan(*dp++)) {
500template <RunOn run_on>
510 const auto& a = this->
array();
517 reduce_op.
eval(bx, reduce_data,
521 for (
int n = scomp; n < scomp+ncomp; ++n) {
522 t = t || amrex::isnan(a(i,j,k,n));
524 return {
static_cast<int>(t) };
526 ReduceTuple hv = reduce_data.
value(reduce_op);
527 return amrex::get<0>(hv);
531 for (
int n = scomp; n < scomp+ncomp; ++n) {
532 for (
IntVect iv : bx.iterator()) {
533 if (amrex::isnan(a(iv, n))) {
542template <RunOn run_on>
546 return contains_nan<run_on>(
domain, 0,
nComp(), where);
549template <RunOn run_on>
559 const auto& a = this->
array();
563 std::numeric_limits<int>::lowest(),
564 std::numeric_limits<int>::lowest())};
572 for (
int n = scomp; n < scomp+ncomp; ++n) {
573 t = t || amrex::isnan(a(i,j,k,n));
575 if (t && (*flag == 0)) {
590 for (
int n = scomp; n < scomp+ncomp; ++n) {
591 for (
IntVect iv : bx.iterator()) {
592 if (amrex::isnan(a(iv, n))) {
602template <RunOn run_on>
613 reduce_op.
eval(n, reduce_data,
616 return {
static_cast<int>(amrex::isinf(dp[i])) };
618 ReduceTuple hv = reduce_data.
value(reduce_op);
619 return amrex::get<0>(hv);
623 for (
Long i = 0; i < n; i++) {
624 if (amrex::isinf(*dp++)) {
632template <RunOn run_on>
642 const auto& a = this->
array();
649 reduce_op.
eval(bx, reduce_data,
653 for (
int n = scomp; n < scomp+ncomp; ++n) {
654 t = t || amrex::isinf(a(i,j,k,n));
656 return {
static_cast<int>(t) };
658 ReduceTuple hv = reduce_data.
value(reduce_op);
659 return amrex::get<0>(hv);
663 for (
int n = scomp; n < scomp+ncomp; ++n) {
664 for (
IntVect iv : bx.iterator()) {
665 if (amrex::isinf(a(iv, n))) {
674template <RunOn run_on>
678 return contains_inf<run_on>(
domain,0,
nComp(),where);
681template <RunOn run_on>
691 const auto& a = this->
array();
695 std::numeric_limits<int>::lowest(),
696 std::numeric_limits<int>::lowest())};
704 for (
int n = scomp; n < scomp+ncomp; ++n) {
705 t = t || amrex::isinf(a(i,j,k,n));
707 if (t && (*flag == 0)) {
722 for (
int n = scomp; n < scomp+ncomp; ++n) {
723 for (
IntVect iv : bx.iterator()) {
724 if (amrex::isinf(a(iv, n))) {
#define BL_ASSERT(EX)
Definition AMReX_BLassert.H:39
#define AMREX_DEFAULT_RUNON
Definition AMReX_GpuControl.H:73
#define AMREX_GPU_DEVICE
Definition AMReX_GpuQualifiers.H:18
#define AMREX_D_TERM(a, b, c)
Definition AMReX_SPACE.H:172
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
A virtual base class for objects that manage their own dynamic memory allocation.
Definition AMReX_Arena.H:124
A FortranArrayBox(FAB)-like object.
Definition AMReX_BaseFab.H:189
Array4< Real const > array() const noexcept
Definition AMReX_BaseFab.H:381
Box domain
My index space.
Definition AMReX_BaseFab.H:1164
Real * dptr
The data pointer.
Definition AMReX_BaseFab.H:1163
int nvar
Number components.
Definition AMReX_BaseFab.H:1165
Long numPts() const noexcept
Returns the number of points.
Definition AMReX_BaseFab.H:287
int nComp() const noexcept
Returns the number of components.
Definition AMReX_BaseFab.H:279
__host__ __device__ bool contains(const IntVectND< dim > &p) const noexcept
Return true if argument is contained within BoxND.
Definition AMReX_Box.H:212
Definition AMReX_FabFactory.H:76
Definition AMReX_FArrayBox.H:164
void read(std::istream &is, FArrayBox &fb) const override
Pure virtual function. Derived classes MUST override this function to read an FArrayBox from the istr...
Definition AMReX_FArrayBox.cpp:915
void skip(std::istream &is, FArrayBox &f) const override
Pure virtual function. Derived classes MUST override this function to skip over the next FAB f in the...
Definition AMReX_FArrayBox.cpp:949
void write(std::ostream &os, const FArrayBox &fb, int comp, int num_comp) const override
Pure virtual function. Derived classes MUST override this function to write the FArrayBox to the ostr...
Definition AMReX_FArrayBox.cpp:929
A Class Facilitating I/O for Fabs.
Definition AMReX_FArrayBox.H:30
Format
An enum which controls format of FAB output.
Definition AMReX_FArrayBox.H:67
@ FAB_IEEE
Definition AMReX_FArrayBox.H:69
@ FAB_NATIVE_32
Definition AMReX_FArrayBox.H:77
@ FAB_ASCII
Definition AMReX_FArrayBox.H:68
@ FAB_NATIVE
Definition AMReX_FArrayBox.H:70
@ FAB_8BIT
Definition AMReX_FArrayBox.H:75
@ FAB_IEEE_32
Definition AMReX_FArrayBox.H:76
virtual void skip(std::istream &is, FArrayBox &f) const =0
Pure virtual function. Derived classes MUST override this function to skip over the next FAB f in the...
Precision
An enum which controls precision of FAB output. Valid values are FAB_FLOAT and FAB_DOUBLE....
Definition AMReX_FArrayBox.H:40
@ FAB_DOUBLE
Definition AMReX_FArrayBox.H:42
@ FAB_FLOAT
Definition AMReX_FArrayBox.H:41
virtual void read(std::istream &is, FArrayBox &fb) const =0
Pure virtual function. Derived classes MUST override this function to read an FArrayBox from the istr...
virtual void skip(std::istream &is, FArrayBox &f, int nCompToSkip) const =0
static FABio * read_header(std::istream &is, FArrayBox &f)
Read in the header from the istream. Returns a new'd FABio of the written-out type....
Definition AMReX_FArrayBox.cpp:448
virtual void write(std::ostream &os, const FArrayBox &fb, int comp, int num_comp) const =0
Pure virtual function. Derived classes MUST override this function to write the FArrayBox to the ostr...
Ordering
An enum which controls byte ordering of FAB output. Valid values are FAB_NORMAL_ORDER,...
Definition AMReX_FArrayBox.H:88
@ FAB_REVERSE_ORDER
Definition AMReX_FArrayBox.H:90
@ FAB_NORMAL_ORDER
Definition AMReX_FArrayBox.H:89
@ FAB_REVERSE_ORDER_2
Definition AMReX_FArrayBox.H:91
virtual ~FABio()=default
The virtual destructor.
virtual void write_header(std::ostream &os, const FArrayBox &f, int nvar) const
Write out a header describing FArrayBox f that contains nvar components. It must be the case that nva...
Definition AMReX_FArrayBox.cpp:95
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:231
void initVal() noexcept
Definition AMReX_FArrayBox.cpp:143
static void Finalize()
Definition AMReX_FArrayBox.cpp:431
static std::string getClassName()
Definition AMReX_FArrayBox.cpp:222
static bool initialized
Definition AMReX_FArrayBox.H:438
static Box skipFAB(std::istream &is, int &num_comp)
Skip over the next FAB from the input stream. Return the Box defining the domain of the FAB and the n...
Definition AMReX_FArrayBox.cpp:673
static void Initialize()
Initialize from ParmParse with "fab" prefix.
Definition AMReX_FArrayBox.cpp:333
static FABio::Precision getPrecision()
Returns the FABio::Precision. This is deprecated. It is not useful with the "new" FAB I/O format....
Definition AMReX_FArrayBox.cpp:298
FabType getType() const noexcept
Definition AMReX_FArrayBox.H:322
static void setOrdering(FABio::Ordering ordering)
Set the FABio::Ordering for reading old FABs. It does NOT set the ordering for output....
Definition AMReX_FArrayBox.cpp:278
void writeOn(std::ostream &os) const
Writes out the FAB in whatever format you've set. The default format is NATIVE.
Definition AMReX_FArrayBox.cpp:228
FArrayBox(Array4< Real const > const &a) noexcept
Definition AMReX_FArrayBox.H:263
static Real initval
Definition AMReX_FArrayBox.H:456
static const FABio & getFABio()
Returns reference to the FABio object used by the program.
Definition AMReX_FArrayBox.cpp:191
static void setFormat(FABio::Format fmt)
Set the FABio::Format in the program. This is the preferred way to set the output format in "new" FAB...
Definition AMReX_FArrayBox.cpp:241
static void setPrecision(FABio::Precision precision)
Set the FABio::Precision. This is deprecated. It is not useful with the "new" FAB I/O format.
Definition AMReX_FArrayBox.cpp:292
static void setFABio(FABio *rd)
Sets the FABio object used by the program. It is an error if the passed pointer rd is the null pointe...
Definition AMReX_FArrayBox.cpp:197
static FABio * fabio
The FABio pointer describing our output format.
Definition AMReX_FArrayBox.H:452
FabType m_type
Definition AMReX_FArrayBox.H:442
void readFrom(std::istream &is)
Read FAB from istream. Format is as it was written out.
Definition AMReX_FArrayBox.cpp:625
static FABio::Format format
Format and ordering for all FAB output. This stuff exists solely to support reading old FABs.
Definition AMReX_FArrayBox.H:448
FArrayBox(Array4< Real const > const &a, IndexType t) noexcept
Definition AMReX_FArrayBox.H:265
FArrayBox(Array4< Real > const &a, IndexType t) noexcept
Definition AMReX_FArrayBox.H:261
static FABio::Ordering ordering
Definition AMReX_FArrayBox.H:449
static std::unique_ptr< RealDescriptor > getDataDescriptor()
Definition AMReX_FArrayBox.cpp:205
static FABio::Ordering getOrdering()
Gets the FABio::Ordering set in the program. This is deprecated. It does NOT do the right thing with ...
Definition AMReX_FArrayBox.cpp:285
static Real get_initval()
Definition AMReX_FArrayBox.cpp:327
static bool do_initval
initial value
Definition AMReX_FArrayBox.H:455
bool contains_nan() const noexcept
Are there any NaNs in the FAB? This may return false, even if the FAB contains NaNs,...
Definition AMReX_FArrayBox.H:472
FArrayBox() noexcept=default
Construct an invalid FAB with no memory.
static FABio::Format getFormat()
Gets the FABio::Format set in the program.
Definition AMReX_FArrayBox.cpp:185
static Real set_initval(Real iv)
Definition AMReX_FArrayBox.cpp:319
static bool set_do_initval(bool tf)
Definition AMReX_FArrayBox.cpp:305
void resize(const Box &b, int N=1, Arena *ar=nullptr)
For debugging purposes we hide BaseFab version and do some extra work.
Definition AMReX_FArrayBox.cpp:178
static bool get_do_initval()
Definition AMReX_FArrayBox.cpp:313
static bool init_snan
Definition AMReX_FArrayBox.H:457
~FArrayBox() noexcept override=default
The destructor.
bool contains_inf() const noexcept
Are there any Infs in the FAB? This may return false, even if the FAB contains Infs,...
Definition AMReX_FArrayBox.H:604
GPU-compatible tuple.
Definition AMReX_Tuple.H:98
Dynamically allocated vector for trivially copyable data.
Definition AMReX_PODVector.H:308
T * data() noexcept
Definition AMReX_PODVector.H:666
A Descriptor of the Real Type.
Definition AMReX_FabConv.H:105
Definition AMReX_Reduce.H:257
Type value()
Definition AMReX_Reduce.H:289
Definition AMReX_Reduce.H:389
std::enable_if_t< IsFabArray< MF >::value > eval(MF const &mf, IntVect const &nghost, D &reduce_data, F &&f)
Definition AMReX_Reduce.H:458
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
amrex_long Long
Definition AMReX_INT.H:30
std::array< T, N > Array
Definition AMReX_Array.H:26
__host__ __device__ AMREX_FORCE_INLINE T Exch(T *address, T val) noexcept
Definition AMReX_GpuAtomic.H:487
void streamSynchronize() noexcept
Definition AMReX_GpuDevice.H:263
void dtoh_memcpy_async(void *p_h, const void *p_d, const std::size_t sz) noexcept
Definition AMReX_GpuDevice.H:315
bool inLaunchRegion() noexcept
Definition AMReX_GpuControl.H:92
void htod_memcpy_async(void *p_d, const void *p_h, const std::size_t sz) noexcept
Definition AMReX_GpuDevice.H:301
Definition AMReX_Amr.cpp:49
MakeType
Definition AMReX_MakeType.H:7
std::enable_if_t< std::is_integral_v< T > > ParallelFor(TypeList< CTOs... > ctos, std::array< int, sizeof...(CTOs)> const &runtime_options, T N, F &&f)
Definition AMReX_CTOParallelForImpl.H:193
RunOn
Definition AMReX_GpuControl.H:69
IntVectND< 3 > IntVect
IntVect is an alias for amrex::IntVectND instantiated with AMREX_SPACEDIM.
Definition AMReX_BaseFwd.H:33
FabType
Definition AMReX_FabFactory.H:18
A multidimensional array accessor.
Definition AMReX_Array4.H:224
void * alloc(std::size_t sz) const noexcept
Definition AMReX_DataAllocator.H:16