Skip to content

Commit 335b267

Browse files
committed
Merge branch 'development' of https://github.com/AMReX-Codes/amrex into test-set_eb_data
2 parents 1e9e302 + 9aaff41 commit 335b267

42 files changed

Lines changed: 2451 additions & 1076 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.clang-tidy

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ Checks: >
5353
readability-*,
5454
-readability-avoid-nested-conditional-operator,
5555
-readability-avoid-unconditional-preprocessor-if,
56-
-readability-container-contains,
5756
-readability-else-after-return,
5857
-readability-function-cognitive-complexity,
5958
-readability-function-size,
@@ -85,4 +84,3 @@ HeaderFileExtensions: ['', "H", 'h', 'hh', 'hpp', 'hxx']
8584
# -modernize-use-ranges
8685
# -modernize-use-integer-sign-comparison
8786
# -modernize-use-starts-ends-with
88-
# -readability-container-contains

Docs/sphinx_documentation/source/LinearSolvers.rst

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -863,14 +863,16 @@ discretized form of
863863

864864
.. math:: \nabla \times (\alpha \nabla \times \vec{E}) + \beta \vec{E} = \vec{f},
865865

866-
where :math:`\vec{E}` and :math:`\vec{f}` are defined on cell edges,
867-
:math:`\alpha` is a positive scalar, and :math:`\beta` is a non-negative
868-
scalar (either a constant or a field). An :cpp:`Array` of three
869-
:cpp:`MultiFab`\ s is used to store the components of :math:`\vec{E}` and
870-
:math:`\vec{f}`. It is the user's responsibility to ensure that the
871-
right-hand-side data are consistent on edges shared by multiple
872-
:cpp:`Box`\ es. If needed, you can call :cpp:`MLCurlCurl::prepareRHS` to
873-
perform this synchronization.
866+
where :math:`\vec{E}` and :math:`\vec{f}` are defined on cell edges. The
867+
coefficient :math:`\alpha` may be supplied either as a single positive
868+
scalar through :cpp:`MLCurlCurl::setScalars`, or as a nodal :cpp:`MultiFab`
869+
by calling :cpp:`MLCurlCurl::setAlpha` with one entry per AMR level. The
870+
:math:`\beta` term can be a non-negative scalar or an edge-centered field
871+
set via :cpp:`setBeta`. An :cpp:`Array` of three :cpp:`MultiFab`\ s is used
872+
to store the components of :math:`\vec{E}` and :math:`\vec{f}`. It is the
873+
user's responsibility to ensure that the right-hand-side data are consistent
874+
on edges shared by multiple :cpp:`Box`\ es. If needed, you can call
875+
:cpp:`MLCurlCurl::prepareRHS` to perform this synchronization.
874876

875877
The solver supports 1D, 2D and 3D. Note that even in the 1D and 2D cases,
876878
:math:`\vec{E}` still has three components, one for each spatial

Src/Base/AMReX_CArena.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ CArena::alloc_protected (std::size_t nbytes)
121121
else
122122
{
123123
BL_ASSERT((*free_it).size() >= nbytes);
124-
BL_ASSERT(m_busylist.find(*free_it) == m_busylist.end());
124+
BL_ASSERT(!m_busylist.contains(*free_it));
125125

126126
vp = (*free_it).block();
127127

@@ -174,7 +174,7 @@ CArena::alloc_in_place (void* pt, std::size_t szmin, std::size_t szmax)
174174
amrex::Abort("CArena::alloc_in_place: unknown pointer");
175175
return std::make_pair(nullptr,0);
176176
}
177-
AMREX_ASSERT(m_freelist.find(*busy_it) == m_freelist.end());
177+
AMREX_ASSERT(!m_freelist.contains(*busy_it));
178178

179179
if (busy_it->size() >= szmax) {
180180
return std::make_pair(pt, busy_it->size());
@@ -248,7 +248,7 @@ CArena::shrink_in_place (void* pt, std::size_t new_size)
248248
amrex::Abort("CArena::shrink_in_place: unknown pointer");
249249
return nullptr;
250250
}
251-
AMREX_ASSERT(m_freelist.find(*busy_it) == m_freelist.end());
251+
AMREX_ASSERT(!m_freelist.contains(*busy_it));
252252

253253
auto const old_size = busy_it->size();
254254

@@ -312,7 +312,7 @@ CArena::free (void* vp)
312312
amrex::Abort("CArena::free: unknown pointer");
313313
return;
314314
}
315-
BL_ASSERT(m_freelist.find(*busy_it) == m_freelist.end());
315+
BL_ASSERT(!m_freelist.contains(*busy_it));
316316

317317
m_actually_used -= busy_it->size();
318318

Src/Base/AMReX_FACopyDescriptor.H

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ FabArrayCopyDescriptor<FAB>::CollectData ()
475475

476476
Total_Rcvs_Size += Cnt;
477477

478-
if (Rcvs.count(Who) > 0)
478+
if (Rcvs.contains(Who))
479479
{
480480
Rcvs[Who] += 1;
481481
}
@@ -484,7 +484,7 @@ FabArrayCopyDescriptor<FAB>::CollectData ()
484484
Rcvs[Who] = 1;
485485
}
486486

487-
if (Npts.count(Who) > 0)
487+
if (Npts.contains(Who))
488488
{
489489
Npts[Who] += Cnt;
490490
}
@@ -493,7 +493,7 @@ FabArrayCopyDescriptor<FAB>::CollectData ()
493493
Npts[Who] = Cnt;
494494
}
495495
}
496-
BL_ASSERT(Rcvs.count(MyProc) == 0);
496+
BL_ASSERT(!Rcvs.contains(MyProc));
497497

498498
BL_ASSERT((Total_Rcvs_Size*sizeof(value_type))
499499
< static_cast<std::size_t>(std::numeric_limits<int>::max()));

Src/Base/AMReX_ForkJoin.H

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class ForkJoin
106106
// TODO: may want to de-register MFs if they change across invocations
107107

108108
MultiFab &get_mf (const std::string &name, int idx = 0) {
109-
AMREX_ASSERT_WITH_MESSAGE(data.count(name) > 0 && idx < data[name].size(), "get_mf(): name or index not found");
109+
AMREX_ASSERT_WITH_MESSAGE(data.contains(name) && idx < data[name].size(), "get_mf(): name or index not found");
110110
AMREX_ASSERT(task_me >= 0 && task_me < data[name][idx].forked.size());
111111
return data[name][idx].forked[task_me];
112112
}

Src/Base/AMReX_ForkJoin.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ ForkJoin::reg_mf (MultiFab &mf, const std::string &name, int idx,
140140
void
141141
ForkJoin::modify_ngrow (const std::string &name, int idx, IntVect ngrow)
142142
{
143-
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(data.count(name) > 0 && data[name].size() > idx,
143+
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(data.contains(name) && data[name].size() > idx,
144144
"(name, index) pair doesn't exist");
145145
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(!flag_invoked,
146146
"Can only specify grow cells before first forkjoin() invocation");
@@ -154,7 +154,7 @@ ForkJoin::modify_ngrow (const std::string &name, int idx, IntVect ngrow)
154154
void
155155
ForkJoin::modify_split (const std::string &name, int idx, Vector<ComponentSet> comp_split)
156156
{
157-
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(data.count(name) > 0 && data[name].size() > idx,
157+
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(data.contains(name) && data[name].size() > idx,
158158
"(name, index) pair doesn't exist");
159159
AMREX_ALWAYS_ASSERT_WITH_MESSAGE(!flag_invoked,
160160
"Can only specify custom split before first forkjoin() invocation");

Src/Base/AMReX_GpuAtomic.H

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@ namespace Gpu::Atomic {
1818
// For LogicalOr and LogicalAnd, the data type is int.
1919
// For Exch and CAS, the data type is generic.
2020
// All these functions are non-atomic in host code!!!
21-
// If one needs them to be atomic in host code, use HostDevice::Atomic::*. Currently only
22-
// HostDevice::Atomic::Add is supported. We could certainly add more.
21+
// If one needs them to be atomic in host code, use HostDevice::Atomic::*.
2322
// If we add more types for atomicAdd, we also need to update HasAtomicAdd in AMReX_TypeTraits.H.
2423

2524
/// \cond DOXYGEN_IGNORE
@@ -617,6 +616,21 @@ namespace HostDevice::Atomic {
617616
*sum += value;
618617
}
619618

619+
template <class T>
620+
AMREX_FORCE_INLINE
621+
T FetchAdd_Host (T* const sum, T const value) noexcept
622+
{
623+
T old;
624+
#ifdef AMREX_USE_OMP
625+
#pragma omp atomic capture
626+
#endif
627+
{
628+
old = *sum;
629+
*sum += value;
630+
}
631+
return old;
632+
}
633+
620634
template <class T>
621635
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
622636
void Add (T* const sum, T const value) noexcept
@@ -625,6 +639,14 @@ namespace HostDevice::Atomic {
625639
AMREX_IF_ON_HOST((Add_Host(sum,value);))
626640
}
627641

642+
template <class T>
643+
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE
644+
T FetchAdd (T* const sum, T const value) noexcept
645+
{
646+
AMREX_IF_ON_DEVICE((return Gpu::Atomic::Add(sum,value);))
647+
AMREX_IF_ON_HOST((return FetchAdd_Host(sum,value);))
648+
}
649+
628650
}
629651

630652
#ifdef AMREX_USE_GPU

Src/Base/AMReX_Random.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ UniqueRandomSubset (Vector<int> &uSet, int setSize, int poolSize,
208208
uSet.clear();
209209
while(static_cast<int>(copySet.size()) < setSize) {
210210
int r = static_cast<int>(Random_int(poolSize));
211-
if(copySet.find(r) == copySet.end()) {
211+
if(!copySet.contains(r)) {
212212
copySet.insert(r);
213213
uSet.push_back(r);
214214
}

Src/Base/AMReX_TinyProfiler.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ TinyProfiler::Finalize (bool bFlushing)
421421

422422
if (!alreadySynced) {
423423
for (auto const& s : syncedRegions) {
424-
if (lstatsmap.find(s) == lstatsmap.end()) {
424+
if (!lstatsmap.contains(s)) {
425425
lstatsmap.insert(std::make_pair(s,std::map<std::string,Stats>()));
426426
}
427427
}
@@ -529,7 +529,7 @@ TinyProfiler::PrintStats (std::map<std::string,Stats>& regstats, double dt_max,
529529

530530
if (! alreadySynced) { // add the new name
531531
for (auto const& s : syncedStrings) {
532-
if (regstats.find(s) == regstats.end()) {
532+
if (!regstats.contains(s)) {
533533
regstats.insert(std::make_pair(s, Stats()));
534534
}
535535
}
@@ -744,7 +744,7 @@ TinyProfiler::PrintMemStats (std::map<std::string, MemStat>& memstats,
744744

745745
if (! alreadySynced) { // add the new name
746746
for (auto const& s : syncedStrings) {
747-
if (memstats.find(s) == memstats.end()) {
747+
if (!memstats.contains(s)) {
748748
memstats[s]; // insert
749749
}
750750
}

Src/Base/AMReX_VisMF.H

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ Read (FabArray<FAB>& fa, const std::string& name)
668668
auto whichread = allreads[fi].begin();
669669
for ( ; whichread != allreads[fi].end(); ++whichread) {
670670
const int tryproc = whichread->first;
671-
if (busyprocs.find(tryproc) == busyprocs.end()) { // not busy
671+
if (!busyprocs.contains(tryproc)) { // not busy
672672
busyprocs.insert(tryproc);
673673
Vector<int> vreads;
674674
vreads.reserve(whichread->second.size());

0 commit comments

Comments
 (0)