From ffdb211bdcdb9bef6adbce522235afcba92938dc Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Tue, 10 Jan 2023 10:12:43 +0000 Subject: [PATCH] solvers::incompressibleMultiphaseVoF: New solver module for multiphase VoF simulations executed with foamRun for single region simulations of foamMultiRun for multi-region simulations. Replaces multiphaseInterFoam and all the corresponding tutorials have been updated and moved to tutorials/modules/incompressibleMultiphaseVoF. incompressibleMultiphaseVoF is derived from the multiphaseVoFSolver which adds multiphase capability to the VoFSolver base-class used as the basis of all two-phase and multiphase VoF solvers. Class Foam::solvers::incompressibleMultiphaseVoF Description Solver module for the solution of multiple incompressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach, with optional mesh motion and mesh topology changes including adaptive re-meshing. The momentum and other fluid properties are of the "mixture" and a single momentum equation is solved. A mixture approach for momentum transport is provided in which a single laminar, RAS or LES model is selected to model the momentum stress. Uses the flexible PIMPLE (PISO-SIMPLE) solution for time-resolved and pseudo-transient and steady simulations. SourceFiles incompressibleMultiphaseVoF.C See also Foam::solvers::VoFSolver Foam::solvers::multiphaseVoFSolver --- applications/solvers/modules/Allwmake | 2 + .../solvers/modules/VoFSolver/VoFSolver.H | 12 +- .../incompressibleMultiphaseVoF/Make/files | 7 + .../incompressibleMultiphaseVoF}/Make/options | 18 +- .../alphaPredictor.C | 212 +++++++ .../incompressibleMultiphaseVoF.C | 187 ++++++ .../incompressibleMultiphaseVoF.H | 194 ++++++ .../incompressibleMultiphaseVoFMixture.C | 199 ++++++ .../incompressibleMultiphaseVoFMixture.H | 143 +++++ .../incompressibleVoFphase.C} | 17 +- .../incompressibleVoFphase.H} | 65 +- .../pressureCorrector.C | 162 +++++ .../modules/multiphaseVoFSolver/Make/files | 7 + .../modules/multiphaseVoFSolver/Make/options | 20 + .../multiphaseVoFMixture/VoFphase/VoFphase.C | 57 ++ .../multiphaseVoFMixture/VoFphase/VoFphase.H | 119 ++++ .../multiphaseVoFMixture.C | 258 ++++++++ .../multiphaseVoFMixture.H} | 159 ++--- .../multiphaseVoFSolver/multiphaseVoFSolver.C | 120 ++++ .../multiphaseVoFSolver/multiphaseVoFSolver.H | 151 +++++ .../multiphaseVoFSolver/setInterfaceRDeltaT.C | 107 ++++ applications/solvers/multiphase/Allwmake | 12 - .../Make/options | 1 - .../compressibleMultiphaseMixture/Make/files | 1 + .../Make/options | 2 - .../phase/phase.C | 0 .../phase/phase.H | 0 .../multiphase/multiphaseInterFoam/Allwclean | 7 - .../multiphase/multiphaseInterFoam/Allwmake | 10 - .../multiphase/multiphaseInterFoam/Make/files | 3 - .../multiphase/multiphaseInterFoam/UEqn.H | 31 - .../multiphaseInterFoam/correctPhi.H | 21 - .../multiphaseInterFoam/createFields.H | 90 --- .../Make/files | 5 - .../Make/options | 14 - .../incompressibleMultiphaseMixture.C | 595 ------------------ .../multiphaseInterFoam/initCorrectPhi.H | 50 -- .../multiphaseInterFoam/multiphaseInterFoam.C | 159 ----- .../multiphase/multiphaseInterFoam/pEqn.H | 94 --- bin/multiphaseInterFoam | 46 ++ etc/config.sh/bash_completion | 25 - .../damBreak4phase/0/U | 0 .../damBreak4phase/0/alpha.air.orig | 0 .../damBreak4phase/0/alpha.mercury.orig | 0 .../damBreak4phase/0/alpha.oil.orig | 0 .../damBreak4phase/0/alpha.water.orig | 0 .../damBreak4phase/0/epsilon | 0 .../damBreak4phase/0/k | 0 .../damBreak4phase/0/nut | 0 .../damBreak4phase/0/p_rgh | 0 .../damBreak4phase/Allclean | 0 .../damBreak4phase/Allrun | 0 .../damBreak4phase/constant/g | 0 .../damBreak4phase/constant/momentumTransport | 0 .../damBreak4phase/constant/phaseProperties | 0 .../constant/physicalProperties.air | 0 .../constant/physicalProperties.mercury | 0 .../constant/physicalProperties.oil | 0 .../constant/physicalProperties.water | 0 .../damBreak4phase/system/blockMeshDict | 0 .../damBreak4phase/system/controlDict | 4 +- .../damBreak4phase/system/decomposeParDict | 0 .../damBreak4phase/system/fvSchemes | 0 .../damBreak4phase/system/fvSolution | 0 .../damBreak4phase/system/setFieldsDict | 0 .../damBreak4phaseFineLaminar}/0/U | 0 .../0/alpha.air.orig | 0 .../0/alpha.mercury.orig | 0 .../0/alpha.oil.orig | 0 .../0/alpha.water.orig | 0 .../damBreak4phaseFineLaminar}/0/p_rgh | 0 .../damBreak4phaseFineLaminar}/Allclean | 0 .../damBreak4phaseFineLaminar}/Allrun | 0 .../damBreak4phaseFineLaminar}/constant/g | 0 .../constant/momentumTransport | 0 .../constant/phaseProperties | 0 .../constant/physicalProperties.air | 0 .../constant/physicalProperties.mercury | 0 .../constant/physicalProperties.oil | 0 .../constant/physicalProperties.water | 0 .../system/blockMeshDict | 0 .../system/controlDict | 6 +- .../system/decomposeParDict | 0 .../system/fvSchemes | 0 .../system/fvSolution | 0 .../system/setFieldsDict | 0 .../damBreak4phaseLaminar}/0/U | 0 .../damBreak4phaseLaminar}/0/alpha.air.orig | 0 .../0/alpha.mercury.orig | 0 .../damBreak4phaseLaminar}/0/alpha.oil.orig | 0 .../damBreak4phaseLaminar}/0/alpha.water.orig | 0 .../damBreak4phaseLaminar}/0/p_rgh | 0 .../damBreak4phaseLaminar}/Allclean | 0 .../damBreak4phaseLaminar}/Allrun | 0 .../damBreak4phaseLaminar}/constant/g | 0 .../constant/momentumTransport | 0 .../constant/phaseProperties | 0 .../constant/physicalProperties.air | 0 .../constant/physicalProperties.mercury | 0 .../constant/physicalProperties.oil | 0 .../constant/physicalProperties.water | 0 .../system/blockMeshDict | 0 .../damBreak4phaseLaminar}/system/controlDict | 4 +- .../system/decomposeParDict | 0 .../damBreak4phaseLaminar}/system/fvSchemes | 0 .../damBreak4phaseLaminar}/system/fvSolution | 0 .../system/setFieldsDict | 0 .../mixerVessel2DMRF/0/U | 0 .../mixerVessel2DMRF/0/alpha.air.orig | 0 .../mixerVessel2DMRF/0/alpha.mercury.orig | 0 .../mixerVessel2DMRF/0/alpha.oil.orig | 0 .../mixerVessel2DMRF/0/alpha.water.orig | 0 .../mixerVessel2DMRF/0/p_rgh | 0 .../mixerVessel2DMRF/Allclean | 0 .../mixerVessel2DMRF/Allrun | 0 .../mixerVessel2DMRF/constant/MRFProperties | 0 .../mixerVessel2DMRF/constant/g | 0 .../constant/momentumTransport | 0 .../mixerVessel2DMRF/constant/phaseProperties | 0 .../constant/physicalProperties.air | 0 .../constant/physicalProperties.mercury | 0 .../constant/physicalProperties.oil | 0 .../constant/physicalProperties.water | 0 .../mixerVessel2DMRF/system/controlDict | 4 +- .../mixerVessel2DMRF/system/fvSchemes | 0 .../mixerVessel2DMRF/system/fvSolution | 0 .../mixerVessel2DMRF/system/setFieldsDict | 0 127 files changed, 2116 insertions(+), 1284 deletions(-) create mode 100644 applications/solvers/modules/incompressibleMultiphaseVoF/Make/files rename applications/solvers/{multiphase/multiphaseInterFoam => modules/incompressibleMultiphaseVoF}/Make/options (56%) create mode 100644 applications/solvers/modules/incompressibleMultiphaseVoF/alphaPredictor.C create mode 100644 applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoF.C create mode 100644 applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoF.H create mode 100644 applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoFMixture/incompressibleMultiphaseVoFMixture.C create mode 100644 applications/solvers/modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoFMixture/incompressibleMultiphaseVoFMixture.H rename applications/solvers/{multiphase/multiphaseInterFoam/incompressibleMultiphaseMixture/incompressiblePhase/incompressiblePhase.C => modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoFMixture/incompressibleVoFphase/incompressibleVoFphase.C} (79%) rename applications/solvers/{multiphase/multiphaseInterFoam/incompressibleMultiphaseMixture/incompressiblePhase/incompressiblePhase.H => modules/incompressibleMultiphaseVoF/incompressibleMultiphaseVoFMixture/incompressibleVoFphase/incompressibleVoFphase.H} (66%) create mode 100644 applications/solvers/modules/incompressibleMultiphaseVoF/pressureCorrector.C create mode 100644 applications/solvers/modules/multiphaseVoFSolver/Make/files create mode 100644 applications/solvers/modules/multiphaseVoFSolver/Make/options create mode 100644 applications/solvers/modules/multiphaseVoFSolver/multiphaseVoFMixture/VoFphase/VoFphase.C create mode 100644 applications/solvers/modules/multiphaseVoFSolver/multiphaseVoFMixture/VoFphase/VoFphase.H create mode 100644 applications/solvers/modules/multiphaseVoFSolver/multiphaseVoFMixture/multiphaseVoFMixture.C rename applications/solvers/{multiphase/multiphaseInterFoam/incompressibleMultiphaseMixture/incompressibleMultiphaseMixture.H => modules/multiphaseVoFSolver/multiphaseVoFMixture/multiphaseVoFMixture.H} (60%) create mode 100644 applications/solvers/modules/multiphaseVoFSolver/multiphaseVoFSolver.C create mode 100644 applications/solvers/modules/multiphaseVoFSolver/multiphaseVoFSolver.H create mode 100644 applications/solvers/modules/multiphaseVoFSolver/setInterfaceRDeltaT.C delete mode 100755 applications/solvers/multiphase/Allwmake rename applications/solvers/multiphase/{multiphaseInterFoam/incompressibleMultiphaseMixture => compressibleMultiphaseInterFoam/compressibleMultiphaseMixture}/phase/phase.C (100%) rename applications/solvers/multiphase/{multiphaseInterFoam/incompressibleMultiphaseMixture => compressibleMultiphaseInterFoam/compressibleMultiphaseMixture}/phase/phase.H (100%) delete mode 100755 applications/solvers/multiphase/multiphaseInterFoam/Allwclean delete mode 100755 applications/solvers/multiphase/multiphaseInterFoam/Allwmake delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/Make/files delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/UEqn.H delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/correctPhi.H delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/createFields.H delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/incompressibleMultiphaseMixture/Make/files delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/incompressibleMultiphaseMixture/Make/options delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/incompressibleMultiphaseMixture/incompressibleMultiphaseMixture.C delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/initCorrectPhi.H delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/multiphaseInterFoam.C delete mode 100644 applications/solvers/multiphase/multiphaseInterFoam/pEqn.H create mode 100755 bin/multiphaseInterFoam rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/U (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/alpha.air.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/alpha.mercury.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/alpha.oil.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/alpha.water.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/epsilon (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/k (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/nut (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/0/p_rgh (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/Allclean (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/Allrun (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/constant/g (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/constant/momentumTransport (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/constant/phaseProperties (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/constant/physicalProperties.air (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/constant/physicalProperties.mercury (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/constant/physicalProperties.oil (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/constant/physicalProperties.water (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/system/blockMeshDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/system/controlDict (93%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/system/decomposeParDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/system/fvSchemes (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/system/fvSolution (100%) rename tutorials/{multiphase/multiphaseInterFoam/RAS => modules/incompressibleMultiphaseVoF}/damBreak4phase/system/setFieldsDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/0/U (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/0/alpha.air.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/0/alpha.mercury.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/0/alpha.oil.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/0/alpha.water.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/0/p_rgh (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/Allclean (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/Allrun (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/constant/g (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/constant/momentumTransport (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/constant/phaseProperties (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/constant/physicalProperties.air (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/constant/physicalProperties.mercury (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/constant/physicalProperties.oil (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/constant/physicalProperties.water (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/system/blockMeshDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/system/controlDict (91%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/system/decomposeParDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/system/fvSchemes (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/system/fvSolution (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseFineLaminar}/system/setFieldsDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/0/U (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/0/alpha.air.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/0/alpha.mercury.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/0/alpha.oil.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/0/alpha.water.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/0/p_rgh (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/Allclean (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/Allrun (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/constant/g (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/constant/momentumTransport (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/constant/phaseProperties (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/constant/physicalProperties.air (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/constant/physicalProperties.mercury (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/constant/physicalProperties.oil (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/constant/physicalProperties.water (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/system/blockMeshDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/system/controlDict (93%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/system/decomposeParDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/system/fvSchemes (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phase => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/system/fvSolution (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar/damBreak4phaseFine => modules/incompressibleMultiphaseVoF/damBreak4phaseLaminar}/system/setFieldsDict (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/0/U (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/0/alpha.air.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/0/alpha.mercury.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/0/alpha.oil.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/0/alpha.water.orig (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/0/p_rgh (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/Allclean (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/Allrun (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/MRFProperties (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/g (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/momentumTransport (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/phaseProperties (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/physicalProperties.air (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/physicalProperties.mercury (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/physicalProperties.oil (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/constant/physicalProperties.water (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/system/controlDict (93%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/system/fvSchemes (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/system/fvSolution (100%) rename tutorials/{multiphase/multiphaseInterFoam/laminar => modules/incompressibleMultiphaseVoF}/mixerVessel2DMRF/system/setFieldsDict (100%) diff --git a/applications/solvers/modules/Allwmake b/applications/solvers/modules/Allwmake index 640eaccf22..9b2cb328a7 100755 --- a/applications/solvers/modules/Allwmake +++ b/applications/solvers/modules/Allwmake @@ -14,6 +14,8 @@ wmake $targetType VoFSolver wmake $targetType twoPhaseVoFSolver incompressibleVoF/Allwmake $targetType $* compressibleVoF/Allwmake $targetType $* +wmake $targetType multiphaseVoFSolver +wmake $targetType incompressibleMultiphaseVoF multiphaseEuler/Allwmake $targetType $* wmake $targetType solid solidDisplacement/Allwmake $targetType $* diff --git a/applications/solvers/modules/VoFSolver/VoFSolver.H b/applications/solvers/modules/VoFSolver/VoFSolver.H index fa804ee6d7..22ae747aa0 100644 --- a/applications/solvers/modules/VoFSolver/VoFSolver.H +++ b/applications/solvers/modules/VoFSolver/VoFSolver.H @@ -25,18 +25,14 @@ Class Foam::solvers::VoFSolver Description - Solver module base-class for for 2 immiscible fluids using a VOF (volume - of fluid) phase-fraction based interface capturing approach, with optional - mesh motion and mesh topology changes including adaptive re-meshing. + Base solver module base-class for the solution of immiscible fluids using + a VOF (volume of fluid) phase-fraction based interface capturing approach, + with optional mesh motion and mesh topology changes including adaptive + re-meshing. The momentum and other fluid properties are of the "mixture" and a single momentum equation is solved. - Either mixture or two-phase transport modelling may be selected. In the - mixture approach a single laminar, RAS or LES model is selected to model the - momentum stress. In the Euler-Euler two-phase approach separate laminar, - RAS or LES selected models are selected for each of the phases. - Uses the flexible PIMPLE (PISO-SIMPLE) solution for time-resolved and pseudo-transient and steady simulations. diff --git a/applications/solvers/modules/incompressibleMultiphaseVoF/Make/files b/applications/solvers/modules/incompressibleMultiphaseVoF/Make/files new file mode 100644 index 0000000000..da6c87f468 --- /dev/null +++ b/applications/solvers/modules/incompressibleMultiphaseVoF/Make/files @@ -0,0 +1,7 @@ +incompressibleMultiphaseVoFMixture/incompressibleVoFphase/incompressibleVoFphase.C +incompressibleMultiphaseVoFMixture/incompressibleMultiphaseVoFMixture.C +alphaPredictor.C +pressureCorrector.C +incompressibleMultiphaseVoF.C + +LIB = $(FOAM_LIBBIN)/libincompressibleMultiphaseVoF diff --git a/applications/solvers/multiphase/multiphaseInterFoam/Make/options b/applications/solvers/modules/incompressibleMultiphaseVoF/Make/options similarity index 56% rename from applications/solvers/multiphase/multiphaseInterFoam/Make/options rename to applications/solvers/modules/incompressibleMultiphaseVoF/Make/options index e120ed62f5..06edbdacba 100644 --- a/applications/solvers/multiphase/multiphaseInterFoam/Make/options +++ b/applications/solvers/modules/incompressibleMultiphaseVoF/Make/options @@ -1,24 +1,26 @@ EXE_INC = \ - -IincompressibleMultiphaseMixture/lnInclude \ + -I$(FOAM_SOLVERS)/modules/multiphaseVoFSolver/lnInclude \ + -I$(FOAM_SOLVERS)/modules/VoFSolver/lnInclude \ + -I$(FOAM_SOLVERS)/modules/fluidSolver/lnInclude \ -I$(LIB_SRC)/physicalProperties/lnInclude \ - -I$(LIB_SRC)/twoPhaseModels/VoF \ - -I$(LIB_SRC)/twoPhaseModels/interfaceCompression/lnInclude \ - -I$(LIB_SRC)/twoPhaseModels/interfaceProperties/lnInclude \ + -I$(LIB_SRC)/multiphaseModels/multiphaseProperties/lnInclude \ -I$(LIB_SRC)/MomentumTransportModels/momentumTransportModels/lnInclude \ -I$(LIB_SRC)/MomentumTransportModels/incompressible/lnInclude \ + -I$(LIB_SRC)/MomentumTransportModels/phaseIncompressible/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/sampling/lnInclude -EXE_LIBS = \ - -lincompressibleMultiphaseMixture \ +LIB_LIBS = \ + -lmultiphaseVoFSolver \ -lphysicalProperties \ + -lmultiphaseProperties \ -linterfaceCompression \ - -linterfaceProperties \ -lmomentumTransportModels \ -lincompressibleMomentumTransportModels \ + -lphaseIncompressibleMomentumTransportModels \ -lfiniteVolume \ + -lmeshTools \ -lfvModels \ -lfvConstraints \ - -lmeshTools \ -lsampling diff --git a/applications/solvers/modules/incompressibleMultiphaseVoF/alphaPredictor.C b/applications/solvers/modules/incompressibleMultiphaseVoF/alphaPredictor.C new file mode 100644 index 0000000000..a6a5a18656 --- /dev/null +++ b/applications/solvers/modules/incompressibleMultiphaseVoF/alphaPredictor.C @@ -0,0 +1,212 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2023 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +\*---------------------------------------------------------------------------*/ + +#include "incompressibleMultiphaseVoF.H" +#include "subCycle.H" +#include "CMULES.H" +#include "fvcFlux.H" + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +void Foam::solvers::incompressibleMultiphaseVoF::alphaSolve +( + const dictionary& alphaControls +) +{ + const scalar cAlpha(alphaControls.lookup("cAlpha")); + + const word alphaScheme("div(phi,alpha)"); + const word alpharScheme("div(phirb,alpha)"); + + surfaceScalarField phic(mag(phi/mesh.magSf())); + phic = min(cAlpha*phic, max(phic)); + + UPtrList alphas(phases.size()); + PtrList alphaPhis(phases.size()); + + forAll(phases, phasei) + { + const incompressibleVoFphase& alpha = phases[phasei]; + + alphas.set(phasei, &alpha); + + alphaPhis.set + ( + phasei, + new surfaceScalarField + ( + "phi" + alpha.name() + "Corr", + fvc::flux + ( + phi, + alpha, + alphaScheme + ) + ) + ); + + surfaceScalarField& alphaPhi = alphaPhis[phasei]; + + forAll(phases, phasej) + { + incompressibleVoFphase& alpha2 = phases[phasej]; + + if (&alpha2 == &alpha) continue; + + surfaceScalarField phir(phic*mixture.nHatf(alpha, alpha2)); + + alphaPhi += fvc::flux + ( + -fvc::flux(-phir, alpha2, alpharScheme), + alpha, + alpharScheme + ); + } + + // Limit alphaPhi for each phase + MULES::limit + ( + 1.0/mesh.time().deltaT().value(), + geometricOneField(), + alpha, + phi, + alphaPhi, + zeroField(), + zeroField(), + oneField(), + zeroField(), + false + ); + } + + MULES::limitSum(alphas, alphaPhis, phi); + + rhoPhi = Zero; + + volScalarField sumAlpha + ( + IOobject + ( + "sumAlpha", + mesh.time().name(), + mesh + ), + mesh, + dimensionedScalar(dimless, 0) + ); + + forAll(phases, phasei) + { + incompressibleVoFphase& alpha = phases[phasei]; + surfaceScalarField& alphaPhi = alphaPhis[phasei]; + + MULES::explicitSolve + ( + geometricOneField(), + alpha, + alphaPhi + ); + + rhoPhi += alphaPhi*alpha.rho(); + + Info<< alpha.name() << " volume fraction, min, max = " + << alpha.weightedAverage(mesh.V()).value() + << ' ' << min(alpha).value() + << ' ' << max(alpha).value() + << endl; + + sumAlpha += alpha; + } + + Info<< "Phase-sum volume fraction, min, max = " + << sumAlpha.weightedAverage(mesh.V()).value() + << ' ' << min(sumAlpha).value() + << ' ' << max(sumAlpha).value() + << endl; + + // Correct the sum of the phase-fractions to avoid 'drift' + volScalarField sumCorr(1.0 - sumAlpha); + forAll(phases, phasei) + { + incompressibleVoFphase& alpha = phases[phasei]; + alpha += alpha*sumCorr; + } +} + + +void Foam::solvers::incompressibleMultiphaseVoF::alphaPredictor() +{ + const dictionary& alphaControls = mesh.solution().solverDict("alpha"); + + const label nAlphaSubCycles(alphaControls.lookup