33#include < AMReX_Config.H>
44
55#include < AMReX_MLLinOp.H>
6+ #include < AMReX_iMultiFab.H>
67
78namespace amrex {
89
@@ -109,6 +110,8 @@ public:
109110
110111 virtual void interpolation (int amrlev, int fmglev, MultiFab& fine, const MultiFab& crse) const override ;
111112
113+ virtual void interpAssign (int amrlev, int fmglev, MultiFab& fine, MultiFab& crse) const override ;
114+
112115 virtual void averageDownSolutionRHS (int camrlev, MultiFab& crse_sol, MultiFab& crse_rhs,
113116 const MultiFab& fine_sol, const MultiFab& fine_rhs) override ;
114117
@@ -132,9 +135,12 @@ public:
132135 virtual void compGrad (int amrlev, const Array<MultiFab*,AMREX_SPACEDIM>& grad,
133136 MultiFab& sol, Location loc) const override ;
134137
135- virtual void applyMetricTerm (int amrlev, int mglev, MultiFab & rhs) const final override ;
138+ virtual void applyMetricTerm (int amrlev, int mglev, Any & rhs) const final override ;
136139 virtual void unapplyMetricTerm (int amrlev, int mglev, MultiFab& rhs) const final override ;
137- virtual void fillSolutionBC (int amrlev, MultiFab& sol, const MultiFab* crse_bcdata=nullptr ) final override ;
140+ virtual Vector<Real> getSolvabilityOffset (int amrlev, int mglev,
141+ Any const & rhs) const override ;
142+ virtual void fixSolvabilityByOffset (int amrlev, int mglev, Any& rhs,
143+ Vector<Real> const & offset) const override ;
138144
139145 virtual void prepareForSolve () override ;
140146
@@ -146,6 +152,18 @@ public:
146152 const Array<FArrayBox*,AMREX_SPACEDIM>& flux,
147153 const FArrayBox& sol, Location loc, const int face_only=0 ) const = 0;
148154
155+ // This could be turned into template if needed.
156+ void applyMetricTermToMF (int amrlev, int mglev, MultiFab& rhs) const ;
157+
158+ virtual Real AnyNormInfMask (int amrlev, Any const & a, bool local) const override ;
159+
160+ virtual void AnyAvgDownResAmr (int clev, Any& cres, Any const & fres) const override ;
161+
162+ virtual void AnyInterpolationAmr (int famrlev, Any& fine, const Any& crse,
163+ IntVect const & /* nghost*/ ) const override ;
164+
165+ virtual void AnyAverageDownAndSync (Vector<Any>& sol) const override ;
166+
149167 struct BCTL {
150168 BoundCond type;
151169 Real location;
@@ -210,12 +228,17 @@ protected:
210228 // boundary cell flags for covered, not_covered, outside_domain
211229 Vector<Vector<Array<MultiMask,2 *AMREX_SPACEDIM> > > m_maskvals;
212230
231+ Vector<std::unique_ptr<iMultiFab> > m_norm_fine_mask;
232+
213233 mutable Vector<YAFluxRegister> m_fluxreg;
214234
215235private:
216236
217237 void defineAuxData ();
218238 void defineBC ();
239+
240+ void computeVolInv () const ;
241+ mutable Vector<Vector<Real> > m_volinv; // used by solvability fix
219242};
220243
221244}
0 commit comments