diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options
index deef74acc..2b9836121 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options
@@ -8,6 +8,7 @@ EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/sampling/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/finiteVolume/cfdTools \
-I$(LIB_SRC)/transportModels/compressible/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/checkResidualControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/checkResidualControls.H
deleted file mode 100644
index 8068798cd..000000000
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/checkResidualControls.H
+++ /dev/null
@@ -1,66 +0,0 @@
-// Residual control used?
-bool resControlUsed = false;
-int nFluidControlled = fluidRegions.size();
-int nSolidControlled = solidRegions.size();
-
-// Check wheater there is a single regions that uses residual control
-forAll(fluidRegions, i)
-{
- if (residualControlUsedFluid[i])
- {
- resControlUsed = true;
- }
-}
-
-forAll(solidRegions, i)
-{
- if(residualControlUsedSolid[i])
- {
- resControlUsed = true;
- }
-}
-
-if (resControlUsed)
-{
- int nFluidConv = 0;
- int nSolidConv = 0;
-
- // Sum of all converged regions (Note: if no residual control is used
- // the residualReached* flag is already set to true)
- forAll(fluidRegions, i)
- {
- if (residualReachedFluid[i])
- {
- nFluidConv++;
- }
- }
-
- forAll(solidRegions, i)
- {
- if (residualReachedSolid[i])
- {
- nSolidConv++;
- }
- }
-
- if (nFluidConv == nFluidControlled && nSolidConv == nSolidControlled)
- {
- // Activate flag to go to the 'Final' loop using the 'Final'
- // relaxation factors
- allRegionsConverged = true;
- }
-}
-
-if (finalIter && resControlUsed && !allRegionsConverged)
-{
- Info<< "\nRegions not converged after " << nOuterCorr
- << " outer correctors" << endl;
-}
-else if (finalIter && resControlUsed && allRegionsConverged)
-{
- Info<< "\nRegions converged after " << oCorr
- << " outer correctors" << endl;
-
- // Leave PIMPLE loop
- break;
-}
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
index 8f11f8bab..c58eadb06 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
- \\ / A nd | Copyright (C) 2011-2017 OpenFOAM Foundation
+ \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@@ -45,6 +45,8 @@ Description
#include "radiationModel.H"
#include "fvOptions.H"
#include "coordinateSystem.H"
+#include "pimpleMultiRegionControl.H"
+#include "pressureControl.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -59,17 +61,18 @@ int main(int argc, char *argv[])
#include "createMeshes.H"
#include "createFields.H"
#include "initContinuityErrs.H"
+ pimpleMultiRegionControl pimples(fluidRegions, solidRegions);
+ #include "createFluidPressureControls.H"
#include "createTimeControls.H"
#include "readSolidTimeControls.H"
#include "compressibleMultiRegionCourantNo.H"
#include "solidRegionDiffusionNo.H"
#include "setInitialMultiRegionDeltaT.H"
- while (runTime.run())
+ while (pimples.run(runTime))
{
#include "readTimeControls.H"
#include "readSolidTimeControls.H"
- #include "readPIMPLEControls.H"
#include "compressibleMultiRegionCourantNo.H"
#include "solidRegionDiffusionNo.H"
@@ -79,36 +82,15 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl;
- if (nOuterCorr != 1)
- {
- forAll(fluidRegions, i)
- {
- #include "storeOldFluidFields.H"
- }
- }
-
- bool allRegionsConverged = false;
- bool finalIter = false;
-
// --- PIMPLE loop
- for (int oCorr=0; oCorr.
-
-Application
- chtMultiRegionSimpleFoam
-
-Description
- Steady-state solver for buoyant, turbulent fluid flow and solid heat
- conduction with conjugate heat transfer between solid and fluid regions.
-
-\*---------------------------------------------------------------------------*/
-
-#include "fvCFD.H"
-#include "rhoThermo.H"
-#include "turbulentFluidThermoModel.H"
-#include "fixedGradientFvPatchFields.H"
-#include "regionProperties.H"
-#include "solidThermo.H"
-#include "radiationModel.H"
-#include "fvOptions.H"
-#include "coordinateSystem.H"
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-int main(int argc, char *argv[])
-{
- #define NO_CONTROL
- #define CREATE_MESH createMeshesPostProcess.H
- #include "postProcess.H"
-
- #include "setRootCase.H"
- #include "createTime.H"
- #include "createMeshes.H"
- #include "createFields.H"
- #include "initContinuityErrs.H"
-
- // Residual control
- bool allRegionsConverged = false;
-
- while (runTime.run())
- {
- runTime++;
-
- Info<< "Time = " << runTime.timeName() << nl << endl;
-
- forAll(fluidRegions, i)
- {
- Info<< "\nSolving for fluid region "
- << fluidRegions[i].name() << endl;
- #include "setRegionFluidFields.H"
- #include "readFluidMultiRegionSIMPLEControls.H"
- #include "readFluidMultiRegionResidualControls.H"
- #include "solveFluid.H"
- #include "residualControlsFluid.H"
- }
-
- forAll(solidRegions, i)
- {
- Info<< "\nSolving for solid region "
- << solidRegions[i].name() << endl;
- #include "setRegionSolidFields.H"
- #include "readSolidMultiRegionSIMPLEControls.H"
- #include "readSolidMultiRegionResidualControls.H"
- #include "solveSolid.H"
- #include "residualControlsSolid.H"
- }
-
- #include "checkResidualControls.H"
-
- runTime.write();
-
- Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
- << " ClockTime = " << runTime.elapsedClockTime() << " s"
- << nl << endl;
- }
-
- Info<< "End\n" << endl;
-
- return 0;
-}
-
-
-// ************************************************************************* //
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/EEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/EEqn.H
deleted file mode 100644
index 3fd3ba505..000000000
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/EEqn.H
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- volScalarField& he = thermo.he();
-
- fvScalarMatrix EEqn
- (
- fvm::div(phi, he)
- + (
- he.name() == "e"
- ? fvc::div(phi, volScalarField("Ekp", 0.5*magSqr(U) + p/rho))
- : fvc::div(phi, volScalarField("K", 0.5*magSqr(U)))
- )
- - fvm::laplacian(turb.alphaEff(), he)
- ==
- rho*(U&g)
- + rad.Sh(thermo, he)
- + fvOptions(rho, he)
- );
-
- EEqn.relax();
-
- fvOptions.constrain(EEqn);
-
- solvPerfh = EEqn.solve();
-
- fvOptions.correct(he);
-
- thermo.correct();
- rad.correct();
-
- Info<< "Min/max T:" << min(thermo.T()).value() << ' '
- << max(thermo.T()).value() << endl;
-}
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H
deleted file mode 100644
index 636c29ff9..000000000
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H
+++ /dev/null
@@ -1,35 +0,0 @@
- // Solve the Momentum equation
-
- MRF.correctBoundaryVelocity(U);
-
- tmp tUEqn
- (
- fvm::div(phi, U)
- + MRF.DDt(rho, U)
- + turb.divDevRhoReff(U)
- ==
- fvOptions(rho, U)
- );
- fvVectorMatrix& UEqn = tUEqn.ref();
-
- UEqn.relax();
-
- fvOptions.constrain(UEqn);
-
- if (momentumPredictor)
- {
- solvPerfU = solve
- (
- UEqn
- ==
- fvc::reconstruct
- (
- (
- - ghf*fvc::snGrad(rho)
- - fvc::snGrad(p_rgh)
- )*mesh.magSf()
- )
- );
- }
-
- fvOptions.correct(U);
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H
deleted file mode 100644
index 046ca5ec3..000000000
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- dimensionedScalar totalMass = fvc::domainIntegrate(rho);
-
- scalar sumLocalContErr =
- (
- fvc::domainIntegrate(mag(rho - thermo.rho()))/totalMass
- ).value();
-
- scalar globalContErr =
- (
- fvc::domainIntegrate(rho - thermo.rho())/totalMass
- ).value();
-
- cumulativeContErr[i] += globalContErr;
-
- Info<< "time step continuity errors (" << mesh.name() << ")"
- << ": sum local = " << sumLocalContErr
- << ", global = " << globalContErr
- << ", cumulative = " << cumulativeContErr[i]
- << endl;
-}
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H
deleted file mode 100644
index e070c5966..000000000
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H
+++ /dev/null
@@ -1,15 +0,0 @@
- scalar CoNum = -great;
- forAll(fluidRegions, regionI)
- {
- CoNum = max
- (
- compressibleCourantNo
- (
- fluidRegions[regionI],
- runTime,
- rhoFluid[regionI],
- phiFluid[regionI]
- ),
- CoNum
- );
- }
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H
deleted file mode 100644
index c1bb05fc2..000000000
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H
+++ /dev/null
@@ -1,277 +0,0 @@
-// Initialise fluid field pointer lists
-PtrList thermoFluid(fluidRegions.size());
-PtrList rhoFluid(fluidRegions.size());
-PtrList UFluid(fluidRegions.size());
-PtrList phiFluid(fluidRegions.size());
-PtrList gFluid(fluidRegions.size());
-PtrList hRefFluid(fluidRegions.size());
-PtrList ghFluid(fluidRegions.size());
-PtrList ghfFluid(fluidRegions.size());
-PtrList turbulence(fluidRegions.size());
-PtrList p_rghFluid(fluidRegions.size());
-PtrList radiation(fluidRegions.size());
-
-List initialMassFluid(fluidRegions.size());
-List