From 7fad95f978928ba9cacb37ae1c0d09083b5065de Mon Sep 17 00:00:00 2001 From: Weiqun Zhang Date: Mon, 5 Feb 2024 15:12:00 -0800 Subject: [PATCH] Implement some virtual functions in MLLinOp so that the derived classes don't need to --- Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.H | 12 ----------- Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp | 15 ------------- Src/LinearSolvers/MLMG/AMReX_MLLinOp.H | 24 +++++++++++++++------ Src/LinearSolvers/MLMG/AMReX_MLNodeLinOp.H | 20 ++--------------- 4 files changed, 19 insertions(+), 52 deletions(-) diff --git a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.H b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.H index a366bb65567..0e98eb9ea4d 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.H +++ b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.H @@ -77,16 +77,6 @@ public: MF& res, const MF& crse_sol, const MF& crse_rhs, MF& fine_res, MF& fine_sol, const MF& fine_rhs) const override; - void compFlux (int amrlev, const Array& fluxes, - MF& sol, Location loc) const override; - - void compGrad (int amrlev, const Array& grad, - MF& sol, Location loc) const override; - - void applyMetricTerm (int /*amrlev*/, int /*mglev*/, MF& /*rhs*/) const override {} - - void unapplyMetricTerm (int /*amrlev*/, int /*mglev*/, MF& /*rhs*/) const override {} - void prepareForSolve () override; [[nodiscard]] bool isSingular (int /*amrlev*/) const override { return false; } @@ -94,8 +84,6 @@ public: RT xdoty (int amrlev, int mglev, const MF& x, const MF& y, bool local) const override; - std::unique_ptr> makeNLinOp (int /*grid_size*/) const override { return nullptr; } - [[nodiscard]] RT normInf (int amrlev, MF const& mf, bool local) const override; void averageDownAndSync (Vector& sol) const override; diff --git a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp index 94d2b1d17ce..1455f024415 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp +++ b/Src/LinearSolvers/MLMG/AMReX_MLCurlCurl.cpp @@ -320,23 +320,8 @@ void MLCurlCurl::reflux (int crse_amrlev, amrex::Abort("MLCurlCurl::reflux: TODO"); } -void MLCurlCurl::compFlux (int amrlev, const Array& fluxes, - MF& sol, Location loc) const -{ - amrex::ignore_unused(amrlev, fluxes, sol, loc); - amrex::Abort("MLCurlCurl::compFlux: TODO"); -} - -void MLCurlCurl::compGrad (int amrlev, const Array& grad, - MF& sol, Location loc) const -{ - amrex::ignore_unused(amrlev, grad, sol, loc); - amrex::Abort("MLCurlCurl::compGrad: TODO"); -} - void MLCurlCurl::prepareForSolve () { - // xxxxx TODO MLCurlCurl::prepareForSolve } Real MLCurlCurl::xdoty (int amrlev, int mglev, const MF& x, const MF& y, diff --git a/Src/LinearSolvers/MLMG/AMReX_MLLinOp.H b/Src/LinearSolvers/MLMG/AMReX_MLLinOp.H index cf9eb34951a..3d552729046 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLLinOp.H +++ b/Src/LinearSolvers/MLMG/AMReX_MLLinOp.H @@ -388,8 +388,11 @@ public: * \param sol solution * \param loc location of the fluxes */ - virtual void compFlux (int amrlev, const Array& fluxes, - MF& sol, Location loc) const = 0; + virtual void compFlux (int /*amrlev*/, const Array& /*fluxes*/, + MF& /*sol*/, Location /*loc*/) const + { + amrex::Abort("AMReX_MLLinOp::compFlux::How did we get here?"); + } /** * \brief Compute gradients of the solution @@ -399,13 +402,16 @@ public: * \param sol solution * \param loc location of the gradients */ - virtual void compGrad (int amrlev, const Array& grad, - MF& sol, Location loc) const = 0; + virtual void compGrad (int /*amrlev*/, const Array& /*grad*/, + MF& /*sol*/, Location /*loc*/) const + { + amrex::Abort("AMReX_MLLinOp::compGrad::How did we get here?"); + } //! apply metric terms if there are any - virtual void applyMetricTerm (int amrlev, int mglev, MF& rhs) const = 0; + virtual void applyMetricTerm (int /*amrlev*/, int /*mglev*/, MF& /*rhs*/) const {} //! unapply metric terms if there are any - virtual void unapplyMetricTerm (int amrlev, int mglev, MF& rhs) const = 0; + virtual void unapplyMetricTerm (int /*amrlev*/, int /*mglev*/, MF& /*rhs*/) const {} //! This is needed for our nodal projection solver virtual void unimposeNeumannBC (int /*amrlev*/, MF& /*rhs*/) const {} @@ -437,7 +443,11 @@ public: //! x dot y, used by the bottom solver virtual RT xdoty (int amrlev, int mglev, const MF& x, const MF& y, bool local) const = 0; - virtual std::unique_ptr> makeNLinOp (int grid_size) const = 0; + virtual std::unique_ptr> makeNLinOp (int grid_size) const + { + amrex::Abort("MLLinOp::makeNLinOp: N-Solve not supported"); + return nullptr; + } virtual void getFluxes (const Vector >& /*a_flux*/, const Vector& /*a_sol*/, diff --git a/Src/LinearSolvers/MLMG/AMReX_MLNodeLinOp.H b/Src/LinearSolvers/MLMG/AMReX_MLNodeLinOp.H index 89ee258a3aa..5d25cd78596 100644 --- a/Src/LinearSolvers/MLMG/AMReX_MLNodeLinOp.H +++ b/Src/LinearSolvers/MLMG/AMReX_MLNodeLinOp.H @@ -38,8 +38,8 @@ public: } void setLevelBC (int /*amrlev*/, const MultiFab* /*levelbcdata*/, - const MultiFab* = nullptr, const MultiFab* = nullptr, - const MultiFab* = nullptr) final {} + const MultiFab* = nullptr, const MultiFab* = nullptr, + const MultiFab* = nullptr) final {} void apply (int amrlev, int mglev, MultiFab& out, MultiFab& in, BCMode bc_mode, StateMode s_mode, const MLMGBndry* bndry=nullptr) const final; @@ -51,17 +51,6 @@ public: const MultiFab* crse_bcdata=nullptr) override; void correctionResidual (int amrlev, int mglev, MultiFab& resid, MultiFab& x, const MultiFab& b, BCMode bc_mode, const MultiFab* crse_bcdata=nullptr) override; - void compFlux (int /*amrlev*/, const Array& /*fluxes*/, - MultiFab& /*sol*/, Location /*loc*/) const final { - amrex::Abort("AMReX_MLNodeLinOp::compFlux::How did we get here?"); - } - void compGrad (int /*amrlev*/, const Array& /*grad*/, - MultiFab& /*sol*/, Location /*loc*/) const override { - amrex::Abort("AMReX_MLNodeLinOp::compGrad::How did we get here?"); - } - - void applyMetricTerm (int /*amrlev*/, int /*mglev*/, MultiFab& /*rhs*/) const final {} - void unapplyMetricTerm (int /*amrlev*/, int /*mglev*/, MultiFab& /*rhs*/) const final {} Vector getSolvabilityOffset (int amrlev, int mglev, MultiFab const& rhs) const override; @@ -84,11 +73,6 @@ public: void nodalSync (int amrlev, int mglev, MultiFab& mf) const; - std::unique_ptr makeNLinOp (int /*grid_size*/) const final { - amrex::Abort("MLNodeLinOp::makeNLinOp: N-Solve not supported"); - return std::unique_ptr{}; - } - static std::unique_ptr makeOwnerMask (const BoxArray& ba, const DistributionMapping& dm, const Geometry& geom);