diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files index 9ae6090832..908d7b3a95 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/files @@ -1,7 +1,6 @@ fluid/compressibleCourantNo.C solid/solidRegionDiffNo.C - chtMultiRegionFoam.C -EXE = $(FOAM_APPBIN)/chtMultiRegionFoam +EXE = $(FOAM_USER_APPBIN)/chtMultiRegionFoam diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options index 2fcfff4126..95dee86bce 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/Make/options @@ -1,14 +1,23 @@ + EXE_INC = \ - -Ifluid \ - -Isolid \ - -Iinclude \ + -I./fluid \ + -I./solid \ + -I./porousFluid \ + -I./porousSolid \ + -I./include \ -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \ + -I$(LIB_SRC)/fieldSources/lnInclude \ + -I$(LIB_SRC)/regionModels/regionModel/lnInclude + EXE_LIBS = \ -lbasicThermophysicalModels \ @@ -16,7 +25,9 @@ EXE_LIBS = \ -lspecie \ -lcompressibleTurbulenceModel \ -lcompressibleRASModels \ - -lcompressibleLESModels \ -lmeshTools \ -lfiniteVolume \ - -lradiationModels + -lradiationModels \ + -lfieldSources \ + -lregionModels \ + -lsampling diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C index b65ecf5118..ab7b6add66 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C @@ -26,7 +26,13 @@ Application Description Combination of heatConductionFoam and buoyantFoam for conjugate heat - transfer between a solid region and fluid region + transfer between a solid region and fluid region. It includes + porous media in the primary fluid region treated explicitly. + + It handles secondary fluid or solid circuits which can be coupled + thermally with the main fluid region. i.e radiators, etc. + + The secondary fluid region is \*---------------------------------------------------------------------------*/ @@ -39,6 +45,9 @@ Description #include "solidRegionDiffNo.H" #include "basicSolidThermo.H" #include "radiationModel.H" +#include "porousZones.H" +#include "IObasicSourceList.H" + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -51,12 +60,16 @@ int main(int argc, char *argv[]) #include "createFluidMeshes.H" #include "createSolidMeshes.H" + #include "createPorousFluidRegions.H" + #include "createPorousSolidMeshes.H" #include "createFluidFields.H" #include "createSolidFields.H" + #include "createPorousFluidFields.H" + #include "createPorousSolidFields.H" + #include "initContinuityErrs.H" - #include "readTimeControls.H" #include "readSolidTimeControls.H" @@ -65,14 +78,12 @@ int main(int argc, char *argv[]) #include "solidRegionDiffusionNo.H" #include "setInitialMultiRegionDeltaT.H" - while (runTime.run()) { #include "readTimeControls.H" #include "readSolidTimeControls.H" #include "readPIMPLEControls.H" - #include "compressibleMultiRegionCourantNo.H" #include "solidRegionDiffusionNo.H" #include "setMultiRegionDeltaT.H" @@ -105,6 +116,24 @@ int main(int argc, char *argv[]) #include "solveFluid.H" } + forAll(porousFluidRegions, i) + { + Info<< "\nSolving for fluid porous region " + << porousFluidRegions[i].name() << endl; + #include "setPorousFluidFields.H" + #include "readPorousFluidRegionPIMPLEControls.H" + #include "solvePorousFluid.H" + } + + forAll(porousSolidRegions, i) + { + Info<< "\nSolving for porous solid region " + << porousSolidRegions[i].name() << endl; + #include "setPorousRegionSolidFields.H" + #include "readPorousSolidMultiRegionPIMPLEControls.H" + #include "solvePorousSolid.H" + } + forAll(solidRegions, i) { Info<< "\nSolving for solid region " @@ -113,6 +142,7 @@ int main(int argc, char *argv[]) #include "readSolidMultiRegionPIMPLEControls.H" #include "solveSolid.H" } + } runTime.write(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options index ef9d1fbc84..306ea815f6 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/Make/options @@ -1,16 +1,21 @@ EXE_INC = \ - -I.. \ -Ifluid \ -Isolid \ + -I./porousFluid \ + -I./porousSolid \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/finiteVolume/cfdTools \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/radiationModels/lnInclude \ -I$(LIB_SRC)/turbulenceModels \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ - -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \ + -I$(LIB_SRC)/fieldSources/lnInclude \ + -I$(LIB_SRC)/sampling/lnInclude \ + -I$(LIB_SRC)/regionModels/regionModel/lnInclude EXE_LIBS = \ -lfiniteVolume \ @@ -20,4 +25,7 @@ EXE_LIBS = \ -lcompressibleTurbulenceModel \ -lcompressibleRASModels \ -lcompressibleLESModels \ - -lradiationModels + -lradiationModels \ + -lfieldSources \ + -lregionModels \ + -lsampling diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C index 905b0ca709..3cfc5af784 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -36,6 +36,8 @@ Description #include "regionProperties.H" #include "basicSolidThermo.H" #include "radiationModel.H" +#include "porousZones.H" +#include "IObasicSourceList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -48,9 +50,13 @@ int main(int argc, char *argv[]) #include "createFluidMeshes.H" #include "createSolidMeshes.H" + #include "createPorousFluidRegions.H" + #include "createPorousSolidMeshes.H" #include "createFluidFields.H" #include "createSolidFields.H" + #include "createPorousFluidFields.H" + #include "createPorousSolidFields.H" #include "initContinuityErrs.H" @@ -68,6 +74,24 @@ int main(int argc, char *argv[]) #include "solveFluid.H" } + forAll(porousFluidRegions, i) + { + Info<< "\nSolving for fluid porous region " + << porousFluidRegions[i].name() << endl; + #include "setPorousFluidFields.H" + #include "readPorousFluidRegionSIMPLEControls.H" + #include "solvePorousFluid.H" + } + + forAll(porousSolidRegions, i) + { + Info<< "\nSolving for porous solid region " + << porousSolidRegions[i].name() << endl; + #include "setPorousRegionSolidFields.H" + #include "readPorousSolidMultiRegionSIMPLEControls.H" + #include "solvePorousSolid.H" + } + forAll(solidRegions, i) { Info<< "\nSolving for solid region " diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H index 68b29fd0c2..8bbc8be581 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/UEqn.H @@ -3,10 +3,14 @@ ( fvm::div(phi, U) + turb.divDevRhoReff(U) + + sources(rho, U) ); UEqn().relax(); + // Add porous resistance + pZones.addResistance(UEqn()); + solve ( UEqn() diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H index 14f51f4c50..0ce4a25ac3 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidFields.H @@ -18,6 +18,9 @@ PtrList rhoMax(fluidRegions.size()); PtrList rhoMin(fluidRegions.size()); + PtrList heatSources(fluidRegions.size()); + PtrList porousZonesFluid(fluidRegions.size()); + // Populate fluid field pointer lists forAll(fluidRegions, i) { @@ -209,6 +212,20 @@ ) ) ); + + Info<< " Adding sources\n" << endl; + heatSources.set + ( + i, + new IObasicSourceList(fluidRegions[i]) + ); + + Info<< " Adding porous zones\n" << endl; + porousZonesFluid.set + ( + i, + new porousZones(fluidRegions[i]) + ); } diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H index 30a2e1089f..9ded78bb7a 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H @@ -1,8 +1,10 @@ - PtrList fluidRegions(rp.fluidRegionNames().size()); + const wordList fluidNames(rp["fluid"]); - forAll(rp.fluidRegionNames(), i) + PtrList fluidRegions(fluidNames.size()); + + forAll(fluidNames, i) { - Info<< "Create fluid mesh for region " << rp.fluidRegionNames()[i] + Info<< "Create fluid mesh for region " << fluidNames[i] << " for time = " << runTime.timeName() << nl << endl; fluidRegions.set @@ -12,7 +14,7 @@ ( IOobject ( - rp.fluidRegionNames()[i], + fluidNames[i], runTime.timeName(), runTime, IOobject::MUST_READ diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/hEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/hEqn.H index 4505f77ed0..e55b6d141d 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/hEqn.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/hEqn.H @@ -7,6 +7,7 @@ == - fvc::div(phi, 0.5*magSqr(U), "div(phi,K)") + rad.Sh(thermo) + + sources(rho, h) ); hEqn.relax(); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H index f8a11b7159..616fabd7fe 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H @@ -3,9 +3,3 @@ const int nNonOrthCorr = simple.lookupOrDefault("nNonOrthogonalCorrectors", 0); - const bool momentumPredictor = - simple.lookupOrDefault("momentumPredictor", true); - - const bool transonic = - simple.lookupOrDefault("transonic", false); - diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H index cbad65e1c2..39d3de9648 100644 --- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H @@ -12,6 +12,10 @@ const volScalarField& psi = thermo.psi(); volScalarField& h = thermo.h(); + IObasicSourceList& sources = heatSources[i]; + + const porousZones& pZones = porousZonesFluid[i]; + const dimensionedScalar initialMass ( "initialMass", diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/porousFluid/UPorousFluidEqn.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/porousFluid/UPorousFluidEqn.H new file mode 100644 index 0000000000..4c1081f5d4 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/porousFluid/UPorousFluidEqn.H @@ -0,0 +1,11 @@ + // Solve the Momentum equation + tmp porousUEqn + ( + fvm::div(porousPhi, porousU) + + turbPorous.divDevRhoReff(porousU) + + porousSources(porousRho, porousU) + ); + + porousUEqn().relax(); + + solve(porousUEqn() == -fvc::grad(porousP)); diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/porousFluid/createPorousFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/porousFluid/createPorousFluidFields.H new file mode 100644 index 0000000000..fa925f4c87 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/porousFluid/createPorousFluidFields.H @@ -0,0 +1,181 @@ + // Initialise porous field pointer lists + PtrList thermoPorous(porousFluidRegions.size()); + PtrList rhoPorous(porousFluidRegions.size()); + PtrList kappaPorous(porousFluidRegions.size()); + PtrList UPorous(porousFluidRegions.size()); + PtrList phiPorous(porousFluidRegions.size()); + PtrList turbulencePorous + ( + porousFluidRegions.size() + ); + PtrList pPorous(porousFluidRegions.size()); + + List initialMassFluidPorous(porousFluidRegions.size()); + List