From 0f5f4ed62c680c8cd8b8e88e6418b3d7c13175ac Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Wed, 25 Jan 2023 12:22:02 +0000 Subject: [PATCH] solver: Registered to database This change lets the solver be looked up from the region database, so that aspects of the solution algorithm can be accessed by functionObjects and fvModels and similar. For example, a fluid solver could be looked up as follows: const solvers::fluid& s = mesh().lookupObject(solver::typeName); --- .../solvers/modules/VoFSolver/VoFSolver.C | 2 +- .../compressibleMultiphaseVoF.C | 2 +- .../modules/compressibleVoF/compressibleVoF.C | 2 +- .../solvers/modules/fluidSolver/fluidSolver.C | 6 +++--- .../solvers/modules/fluidSolver/fluidSolver.H | 4 ++-- .../incompressibleFluid/incompressibleFluid.C | 4 ++-- .../incompressibleMultiphaseVoF.C | 2 +- .../incompressibleVoF/incompressibleVoF.C | 2 +- .../modules/isothermalFluid/isothermalFluid.C | 6 +++--- .../multiphaseEuler/multiphaseEuler.C | 10 ++++----- .../multiphaseEuler/multiphaseEuler.H | 4 ++-- .../solvers/modules/shockFluid/shockFluid.C | 4 ++-- applications/solvers/modules/solid/solid.C | 6 +++--- applications/solvers/modules/solid/solid.H | 2 +- .../solidDisplacement/solidDisplacement.C | 6 +++--- .../solidDisplacement/solidDisplacement.H | 2 +- src/finiteVolume/solver/solver.C | 21 ++++++++++++++++++- src/finiteVolume/solver/solver.H | 10 ++++++++- 18 files changed, 61 insertions(+), 34 deletions(-) diff --git a/applications/solvers/modules/VoFSolver/VoFSolver.C b/applications/solvers/modules/VoFSolver/VoFSolver.C index acc0784664..da491b1469 100644 --- a/applications/solvers/modules/VoFSolver/VoFSolver.C +++ b/applications/solvers/modules/VoFSolver/VoFSolver.C @@ -197,7 +197,7 @@ Foam::scalar Foam::solvers::VoFSolver::maxDeltaT() const void Foam::solvers::VoFSolver::preSolve() { // Read the controls - read(); + readControls(); if (transient()) { diff --git a/applications/solvers/modules/compressibleMultiphaseVoF/compressibleMultiphaseVoF.C b/applications/solvers/modules/compressibleMultiphaseVoF/compressibleMultiphaseVoF.C index 5b00d558b7..b97def57d6 100644 --- a/applications/solvers/modules/compressibleMultiphaseVoF/compressibleMultiphaseVoF.C +++ b/applications/solvers/modules/compressibleMultiphaseVoF/compressibleMultiphaseVoF.C @@ -100,7 +100,7 @@ Foam::solvers::compressibleMultiphaseVoF::compressibleMultiphaseVoF momentumTransport(momentumTransport_()) { // Read the controls - read(); + readControls(); if (correctPhi) { diff --git a/applications/solvers/modules/compressibleVoF/compressibleVoF.C b/applications/solvers/modules/compressibleVoF/compressibleVoF.C index 2c8d2e47ca..cef372b4e8 100644 --- a/applications/solvers/modules/compressibleVoF/compressibleVoF.C +++ b/applications/solvers/modules/compressibleVoF/compressibleVoF.C @@ -114,7 +114,7 @@ Foam::solvers::compressibleVoF::compressibleVoF(fvMesh& mesh) thermophysicalTransport(momentumTransport) { // Read the controls - read(); + readControls(); if (correctPhi) { diff --git a/applications/solvers/modules/fluidSolver/fluidSolver.C b/applications/solvers/modules/fluidSolver/fluidSolver.C index 66a277e40b..3c3b2577e4 100644 --- a/applications/solvers/modules/fluidSolver/fluidSolver.C +++ b/applications/solvers/modules/fluidSolver/fluidSolver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -42,7 +42,7 @@ namespace solvers // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::solvers::fluidSolver::read() +void Foam::solvers::fluidSolver::readControls() { maxCo = runTime.controlDict().lookupOrDefault("maxCo", 1.0); @@ -191,7 +191,7 @@ Foam::solvers::fluidSolver::fluidSolver(fvMesh& mesh) CoNum(0) { // Read the controls - read(); + readControls(); } diff --git a/applications/solvers/modules/fluidSolver/fluidSolver.H b/applications/solvers/modules/fluidSolver/fluidSolver.H index 6c5f9155ea..abb70d9587 100644 --- a/applications/solvers/modules/fluidSolver/fluidSolver.H +++ b/applications/solvers/modules/fluidSolver/fluidSolver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -99,7 +99,7 @@ protected: scalar CoNum; //- Read controls - void read(); + void readControls(); //- Check mesh Courant numbers for moving mesh cases void meshCourantNo() const; diff --git a/applications/solvers/modules/incompressibleFluid/incompressibleFluid.C b/applications/solvers/modules/incompressibleFluid/incompressibleFluid.C index 8300c0f0f4..63127ac12a 100644 --- a/applications/solvers/modules/incompressibleFluid/incompressibleFluid.C +++ b/applications/solvers/modules/incompressibleFluid/incompressibleFluid.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -176,7 +176,7 @@ Foam::solvers::incompressibleFluid::~incompressibleFluid() void Foam::solvers::incompressibleFluid::preSolve() { // Read the controls - read(); + readControls(); fvModels().preUpdateMesh(); diff --git a/applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoF.C b/applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoF.C index dc8dbcfc2b..7aa00dbb80 100644 --- a/applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoF.C +++ b/applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoF.C @@ -100,7 +100,7 @@ Foam::solvers::incompressibleMultiphaseVoF::incompressibleMultiphaseVoF momentumTransport(momentumTransport_()) { // Read the controls - read(); + readControls(); if (!runTime.restart() || !divergent()) { diff --git a/applications/solvers/modules/incompressibleVoF/incompressibleVoF.C b/applications/solvers/modules/incompressibleVoF/incompressibleVoF.C index 84982d6c65..deda3634ed 100644 --- a/applications/solvers/modules/incompressibleVoF/incompressibleVoF.C +++ b/applications/solvers/modules/incompressibleVoF/incompressibleVoF.C @@ -86,7 +86,7 @@ Foam::solvers::incompressibleVoF::incompressibleVoF(fvMesh& mesh) ) { // Read the controls - read(); + readControls(); if (!runTime.restart() || !divergent()) { diff --git a/applications/solvers/modules/isothermalFluid/isothermalFluid.C b/applications/solvers/modules/isothermalFluid/isothermalFluid.C index a658249215..b25f9e7b08 100644 --- a/applications/solvers/modules/isothermalFluid/isothermalFluid.C +++ b/applications/solvers/modules/isothermalFluid/isothermalFluid.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -180,7 +180,7 @@ Foam::solvers::isothermalFluid::isothermalFluid MRF(mesh) { // Read the controls - read(); + readControls(); mesh.schemes().setFluxRequired(p.name()); momentumTransport->validate(); @@ -280,7 +280,7 @@ Foam::solvers::isothermalFluid::~isothermalFluid() void Foam::solvers::isothermalFluid::preSolve() { // Read the controls - read(); + readControls(); if (transient()) { diff --git a/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.C b/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.C index 52de506205..8c0c714ed7 100644 --- a/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.C +++ b/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -45,9 +45,9 @@ namespace solvers // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::solvers::multiphaseEuler::read() +void Foam::solvers::multiphaseEuler::readControls() { - fluidSolver::read(); + fluidSolver::readControls(); faceMomentum = pimple.dict().lookupOrDefault("faceMomentum", false); @@ -171,7 +171,7 @@ Foam::solvers::multiphaseEuler::multiphaseEuler(fvMesh& mesh) MRF(fluid.MRF()) { // Read the controls - read(); + readControls(); mesh.schemes().setFluxRequired(p_rgh.name()); @@ -193,7 +193,7 @@ Foam::solvers::multiphaseEuler::~multiphaseEuler() void Foam::solvers::multiphaseEuler::preSolve() { // Read the controls - read(); + readControls(); if (transient()) { diff --git a/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.H b/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.H index 8bb33e5b28..7a97bfd3e9 100644 --- a/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.H +++ b/applications/solvers/modules/multiphaseEuler/multiphaseEuler/multiphaseEuler.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -152,7 +152,7 @@ protected: tmp divU; //- Read controls - void read(); + void readControls(); private: diff --git a/applications/solvers/modules/shockFluid/shockFluid.C b/applications/solvers/modules/shockFluid/shockFluid.C index 64a76a78de..c08e65ac10 100644 --- a/applications/solvers/modules/shockFluid/shockFluid.C +++ b/applications/solvers/modules/shockFluid/shockFluid.C @@ -178,7 +178,7 @@ Foam::solvers::shockFluid::shockFluid(fvMesh& mesh) ) { // Read the controls - read(); + readControls(); thermo.validate(type(), "e"); @@ -235,7 +235,7 @@ Foam::solvers::shockFluid::~shockFluid() void Foam::solvers::shockFluid::preSolve() { // Read the controls - read(); + readControls(); { const surfaceScalarField amaxSf diff --git a/applications/solvers/modules/solid/solid.C b/applications/solvers/modules/solid/solid.C index 97c8910845..2549b1a1f2 100644 --- a/applications/solvers/modules/solid/solid.C +++ b/applications/solvers/modules/solid/solid.C @@ -41,7 +41,7 @@ namespace solvers // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::solvers::solid::read() +void Foam::solvers::solid::readControls() { maxDi = runTime.controlDict().lookupOrDefault("maxDi", 1.0); @@ -117,7 +117,7 @@ Foam::solvers::solid::solid(fvMesh& mesh) solid(mesh, solidThermo::New(mesh)) { // Read the controls - read(); + readControls(); } @@ -146,7 +146,7 @@ Foam::scalar Foam::solvers::solid::maxDeltaT() const void Foam::solvers::solid::preSolve() { // Read the controls - read(); + readControls(); fvModels().preUpdateMesh(); diff --git a/applications/solvers/modules/solid/solid.H b/applications/solvers/modules/solid/solid.H index 70caee3af4..f372fc7703 100644 --- a/applications/solvers/modules/solid/solid.H +++ b/applications/solvers/modules/solid/solid.H @@ -88,7 +88,7 @@ protected: // Protected Member Functions //- Read controls - virtual void read(); + virtual void readControls(); private: diff --git a/applications/solvers/modules/solidDisplacement/solidDisplacement.C b/applications/solvers/modules/solidDisplacement/solidDisplacement.C index b4e94488de..bd01d9f119 100644 --- a/applications/solvers/modules/solidDisplacement/solidDisplacement.C +++ b/applications/solvers/modules/solidDisplacement/solidDisplacement.C @@ -45,9 +45,9 @@ namespace solvers // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -void Foam::solvers::solidDisplacement::read() +void Foam::solvers::solidDisplacement::readControls() { - solid::read(); + solid::readControls(); nCorr = pimple.dict().lookupOrDefault("nCorrectors", 1); convergenceTolerance = pimple.dict().lookupOrDefault("D", 0); @@ -134,7 +134,7 @@ Foam::solvers::solidDisplacement::solidDisplacement(fvMesh& mesh) mesh.schemes().setFluxRequired(D.name()); // Read the controls - read(); + readControls(); } diff --git a/applications/solvers/modules/solidDisplacement/solidDisplacement.H b/applications/solvers/modules/solidDisplacement/solidDisplacement.H index 95ea10d4a0..03c2f57f6a 100644 --- a/applications/solvers/modules/solidDisplacement/solidDisplacement.H +++ b/applications/solvers/modules/solidDisplacement/solidDisplacement.H @@ -124,7 +124,7 @@ protected: // Protected Member Functions //- Read controls - virtual void read(); + virtual void readControls(); public: diff --git a/src/finiteVolume/solver/solver.C b/src/finiteVolume/solver/solver.C index ef1e46e11c..c881f9b3f5 100644 --- a/src/finiteVolume/solver/solver.C +++ b/src/finiteVolume/solver/solver.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -35,10 +35,29 @@ namespace Foam } +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +bool Foam::solver::writeData(Ostream&) const +{ + NotImplemented; + return false; +} + + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::solver::solver(fvMesh& mesh_) : + regIOobject + ( + IOobject + ( + typeName, + mesh_.time().timeName(), + mesh_ + ) + ), + mesh(mesh_), runTime(mesh.time()), diff --git a/src/finiteVolume/solver/solver.H b/src/finiteVolume/solver/solver.H index a589147bc7..a0acb6492c 100644 --- a/src/finiteVolume/solver/solver.H +++ b/src/finiteVolume/solver/solver.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2022-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -51,6 +51,8 @@ namespace Foam \*---------------------------------------------------------------------------*/ class solver +: + public regIOobject { public: @@ -85,6 +87,12 @@ private: mutable Foam::fvConstraints* fvConstraintsPtr; + // Private Member Functions + + //- Dummy write for regIOobject + virtual bool writeData(Ostream&) const; + + public: //- Runtime type information