Skip to content

Commit 9ed4f59

Browse files
authored
Fix a new bug introduced in AMReX-Codes#2858 (AMReX-Codes#2901)
We need to take into account that `amrex::Any` stores `MultiFab&` or `MultiFab const&`.
1 parent 6eaab8c commit 9ed4f59

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

Src/Base/AMReX_Any.H

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,25 @@ public:
4848

4949
//! Returns a reference to the contained object.
5050
template <typename MF>
51-
MF& get () { return dynamic_cast<innards<MF>&>(*m_ptr).m_mf; }
51+
MF& get () {
52+
if (auto p0 = dynamic_cast<innards<MF>*>(m_ptr.get())) {
53+
return p0->m_mf;
54+
} else {
55+
return dynamic_cast<innards<MF&>&>(*m_ptr).m_mf;
56+
}
57+
}
5258

5359
//! Returns a const reference to the contained object.
5460
template <typename MF>
55-
MF const& get () const { return dynamic_cast<innards<MF> const&>(*m_ptr).m_mf; }
61+
MF const& get () const {
62+
if (auto p0 = dynamic_cast<innards<MF>*>(m_ptr.get())) {
63+
return p0->m_mf;
64+
} else if (auto p1 = dynamic_cast<innards<MF&>*>(m_ptr.get())) {
65+
return p1->m_mf;
66+
} else {
67+
return dynamic_cast<innards<MF const&> const&>(*m_ptr).m_mf;
68+
}
69+
}
5670

5771
template <typename MF>
5872
bool is () const { return m_ptr->Type() == typeid(MF); }

Src/LinearSolvers/MLMG/AMReX_MLMG.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1152,7 +1152,7 @@ MLMG::compResidual (const Vector<MultiFab*>& a_res, const Vector<MultiFab*>& a_s
11521152
{
11531153
if (cf_strategy == CFStrategy::ghostnodes || a_sol[alev]->nGrowVect() == ng_sol)
11541154
{
1155-
sol[alev] = linop.AnyMakeAlias(a_sol[alev]);
1155+
sol[alev] = linop.AnyMakeAlias(*a_sol[alev]);
11561156
sol_is_alias[alev] = true;
11571157
}
11581158
else

0 commit comments

Comments
 (0)