From 05e05a84d80f05762a55fedce3725e703fc508fa Mon Sep 17 00:00:00 2001 From: henry Date: Thu, 29 Apr 2010 13:36:22 +0100 Subject: [PATCH] chtMultiRegionSimpleFoam: new solver, steady-state version of chtMultiRegionFoam Supplied with "multiRegionHeater" tutorial case. --- .../chtMultiRegionSimpleFoam/Make/files | 5 + .../chtMultiRegionSimpleFoam/Make/options | 16 ++ .../chtMultiRegionSimpleFoam.C | 99 +++++++++++ ...olidWallHeatFluxTemperatureFvPatchScalarField.C | 169 +++++++++++++++++++ ...olidWallHeatFluxTemperatureFvPatchScalarField.H | 181 +++++++++++++++++++++ .../chtMultiRegionSimpleFoam/fluid/UEqn.H | 22 +++ .../fluid/compressibleContinuityErrors.H | 21 +++ .../fluid/compressibleCourantNo.C | 63 +++++++ .../fluid/compressibleCourantNo.H | 49 ++++++ .../fluid/compressibleMultiRegionCourantNo.H | 15 ++ .../fluid/convergenceCheck.H | 12 ++ .../fluid/createFluidFields.H | 144 ++++++++++++++++ .../fluid/createFluidMeshes.H | 22 +++ .../chtMultiRegionSimpleFoam/fluid/hEqn.H | 21 +++ .../fluid/initConvergenceCheck.H | 7 + .../chtMultiRegionSimpleFoam/fluid/pEqn.H | 74 +++++++++ .../fluid/readFluidMultiRegionSIMPLEControls.H | 25 +++ .../fluid/setRegionFluidFields.H | 24 +++ .../chtMultiRegionSimpleFoam/fluid/solveFluid.H | 11 ++ .../solid/createSolidFields.H | 91 +++++++++++ .../solid/createSolidMeshes.H | 27 +++ .../solid/readSolidMultiRegionSIMPLEControls.H | 7 + .../solid/setRegionSolidFields.H | 6 + .../chtMultiRegionSimpleFoam/solid/solveSolid.H | 16 ++ .../chtMultiRegionSimpleFoam/multiRegionHeater/0/K | 29 ++++ .../chtMultiRegionSimpleFoam/multiRegionHeater/0/T | 29 ++++ .../chtMultiRegionSimpleFoam/multiRegionHeater/0/U | 29 ++++ .../multiRegionHeater/0/cp | 29 ++++ .../multiRegionHeater/0/epsilon | 31 ++++ .../chtMultiRegionSimpleFoam/multiRegionHeater/0/k | 31 ++++ .../chtMultiRegionSimpleFoam/multiRegionHeater/0/p | 29 ++++ .../multiRegionHeater/0/rho | 29 ++++ .../multiRegionHeater/Allclean | 22 +++ .../multiRegionHeater/Allrun | 63 +++++++ .../constant/bottomAir/RASProperties | 24 +++ .../multiRegionHeater/constant/bottomAir/g | 20 +++ .../constant/bottomAir/thermophysicalProperties | 21 +++ .../constant/bottomAir/turbulenceProperties | 19 +++ .../constant/polyMesh/blockMeshDict | 72 ++++++++ .../multiRegionHeater/constant/polyMesh/boundary | 58 +++++++ .../multiRegionHeater/constant/regionProperties | 22 +++ .../constant/topAir/RASProperties | 24 +++ .../multiRegionHeater/constant/topAir/g | 20 +++ .../constant/topAir/thermophysicalProperties | 21 +++ .../constant/topAir/turbulenceProperties | 19 +++ .../multiRegionHeater/makeCellSets.setSet | 11 ++ .../multiRegionHeater/system/README | 3 + .../system/bottomAir/changeDictionaryDict | 109 +++++++++++++ .../system/bottomAir/decomposeParDict | 86 ++++++++++ .../multiRegionHeater/system/bottomAir/fvSchemes | 1 + .../multiRegionHeater/system/bottomAir/fvSolution | 1 + .../multiRegionHeater/system/controlDict | 47 ++++++ .../multiRegionHeater/system/decomposeParDict | 86 ++++++++++ .../multiRegionHeater/system/fvSchemes | 46 ++++++ .../multiRegionHeater/system/fvSolution | 17 ++ .../system/heater/changeDictionaryDict | 104 ++++++++++++ .../system/heater/decomposeParDict | 86 ++++++++++ .../multiRegionHeater/system/heater/fvSchemes | 53 ++++++ .../multiRegionHeater/system/heater/fvSolution | 38 +++++ .../system/leftSolid/changeDictionaryDict | 95 +++++++++++ .../system/leftSolid/decomposeParDict | 86 ++++++++++ .../multiRegionHeater/system/leftSolid/fvSchemes | 1 + .../multiRegionHeater/system/leftSolid/fvSolution | 1 + .../system/rightSolid/changeDictionaryDict | 95 +++++++++++ .../system/rightSolid/decomposeParDict | 86 ++++++++++ .../multiRegionHeater/system/rightSolid/fvSchemes | 1 + .../multiRegionHeater/system/rightSolid/fvSolution | 1 + .../system/topAir/changeDictionaryDict | 153 +++++++++++++++++ .../system/topAir/decomposeParDict | 86 ++++++++++ .../multiRegionHeater/system/topAir/fvSchemes | 67 ++++++++ .../multiRegionHeater/system/topAir/fvSolution | 70 ++++++++ 71 files changed, 3198 insertions(+) create mode 100755 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/files create mode 100755 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/options create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/UEqn.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.C create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/convergenceCheck.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidFields.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidMeshes.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/hEqn.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/initConvergenceCheck.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/pEqn.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/solveFluid.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidFields.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/createSolidMeshes.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/readSolidMultiRegionSIMPLEControls.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/setRegionSolidFields.H create mode 100644 applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/solid/solveSolid.H create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/K create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/T create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/U create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/cp create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/epsilon create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/k create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/p create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/0/rho create mode 100755 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/Allclean create mode 100755 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/Allrun create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/bottomAir/RASProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/bottomAir/g create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/bottomAir/thermophysicalProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/bottomAir/turbulenceProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/polyMesh/blockMeshDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/polyMesh/boundary create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/regionProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/topAir/RASProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/topAir/g create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/topAir/thermophysicalProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/constant/topAir/turbulenceProperties create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/makeCellSets.setSet create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/README create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/bottomAir/changeDictionaryDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/bottomAir/decomposeParDict create mode 120000 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/bottomAir/fvSchemes create mode 120000 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/bottomAir/fvSolution create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/controlDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/decomposeParDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/fvSchemes create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/fvSolution create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/heater/changeDictionaryDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/heater/decomposeParDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/heater/fvSchemes create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/heater/fvSolution create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/leftSolid/changeDictionaryDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/leftSolid/decomposeParDict create mode 120000 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/leftSolid/fvSchemes create mode 120000 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/leftSolid/fvSolution create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/rightSolid/changeDictionaryDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/rightSolid/decomposeParDict create mode 120000 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/rightSolid/fvSchemes create mode 120000 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/rightSolid/fvSolution create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/topAir/changeDictionaryDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/topAir/decomposeParDict create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/topAir/fvSchemes create mode 100644 tutorials/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater/system/topAir/fvSolution diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/files b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/files new file mode 100755 index 00000000..e5f536ca --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/files @@ -0,0 +1,5 @@ +derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C +chtMultiRegionSimpleFoam.C + +EXE = $(FOAM_APPBIN)/chtMultiRegionSimpleFoam + diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/options b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/options new file mode 100755 index 00000000..a5c9b828 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/Make/options @@ -0,0 +1,16 @@ +EXE_INC = \ + -Ifluid \ + -Isolid \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \ + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lbasicThermophysicalModels \ + -lspecie \ + -lcompressibleRASModels \ + -lcompressibleLESModels diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C new file mode 100644 index 00000000..1ed6e345 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C @@ -0,0 +1,99 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Application + chtMultiRegionSimpleFoam + +Description + Steady-state version of chtMultiRegionFoam + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "basicPsiThermo.H" +#include "turbulenceModel.H" +#include "fixedGradientFvPatchFields.H" +#include "regionProperties.H" +#include "compressibleCourantNo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + #include "setRootCase.H" + #include "createTime.H" + + regionProperties rp(runTime); + + #include "createFluidMeshes.H" + #include "createSolidMeshes.H" + + #include "createFluidFields.H" + #include "createSolidFields.H" + + #include "initContinuityErrs.H" + + + while (runTime.run()) + { + 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 "initConvergenceCheck.H" + #include "solveFluid.H" + #include "convergenceCheck.H" + } + + forAll(solidRegions, i) + { + Info<< "\nSolving for solid region " + << solidRegions[i].name() << endl; + #include "setRegionSolidFields.H" + #include "readSolidMultiRegionSIMPLEControls.H" + #include "initConvergenceCheck.H" + #include "solveSolid.H" + #include "convergenceCheck.H" + } + + runTime++; + + 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/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C new file mode 100644 index 00000000..a1afa56a --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.C @@ -0,0 +1,169 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "solidWallHeatFluxTemperatureFvPatchScalarField.H" +#include "addToRunTimeSelectionTable.H" +#include "fvPatchFieldMapper.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const fvPatch& p, + const DimensionedField& iF +) +: + fixedGradientFvPatchScalarField(p, iF), + q_(p.size(), 0.0), + KName_("undefined-K") +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const solidWallHeatFluxTemperatureFvPatchScalarField& ptf, + const fvPatch& p, + const DimensionedField& iF, + const fvPatchFieldMapper& mapper +) +: + fixedGradientFvPatchScalarField(ptf, p, iF, mapper), + q_(ptf.q_, mapper), + KName_(ptf.KName_) +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const fvPatch& p, + const DimensionedField& iF, + const dictionary& dict +) +: + fixedGradientFvPatchScalarField(p, iF, dict), + q_("q", dict, p.size()), + KName_(dict.lookup("K")) +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const solidWallHeatFluxTemperatureFvPatchScalarField& tppsf +) +: + fixedGradientFvPatchScalarField(tppsf), + q_(tppsf.q_), + KName_(tppsf.KName_) +{} + + +Foam::solidWallHeatFluxTemperatureFvPatchScalarField:: +solidWallHeatFluxTemperatureFvPatchScalarField +( + const solidWallHeatFluxTemperatureFvPatchScalarField& tppsf, + const DimensionedField& iF +) +: + fixedGradientFvPatchScalarField(tppsf, iF), + q_(tppsf.q_), + KName_(tppsf.KName_) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::autoMap +( + const fvPatchFieldMapper& m +) +{ + fixedGradientFvPatchScalarField::autoMap(m); + q_.autoMap(m); +} + + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::rmap +( + const fvPatchScalarField& ptf, + const labelList& addr +) +{ + fixedGradientFvPatchScalarField::rmap(ptf, addr); + + const solidWallHeatFluxTemperatureFvPatchScalarField& hfptf = + refCast(ptf); + + q_.rmap(hfptf.q_, addr); +} + + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::updateCoeffs() +{ + if (updated()) + { + return; + } + + const scalarField& Kw = patch().lookupPatchField + ( + KName_ + ); + + gradient() = q_/Kw; + + fixedGradientFvPatchScalarField::updateCoeffs(); +} + + +void Foam::solidWallHeatFluxTemperatureFvPatchScalarField::write +( + Ostream& os +) const +{ + fixedGradientFvPatchScalarField::write(os); + q_.writeEntry("q", os); + os.writeKeyword("K") << KName_ << token::END_STATEMENT << nl; + this->writeEntry("value", os); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + makePatchTypeField + ( + fvPatchScalarField, + solidWallHeatFluxTemperatureFvPatchScalarField + ); +} + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.H new file mode 100644 index 00000000..bd1e02fc --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/derivedFvPatchFields/solidWallHeatFluxTemperature/solidWallHeatFluxTemperatureFvPatchScalarField.H @@ -0,0 +1,181 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + solidWallHeatFluxTemperatureFvPatchScalarField + +Description + Heat flux boundary condition for temperature on solid region + + Example usage: + myWallPatch + { + type solidWallHeatFluxTemperature; + K K; // Name of K field + q uniform 1000; // Heat flux / [W/m2] + value 300.0; // Initial temperature / [K] + } + + +SourceFiles + solidWallHeatFluxTemperatureFvPatchScalarField.C + +\*---------------------------------------------------------------------------*/ + +#ifndef solidWallHeatFluxTemperatureFvPatchScalarField_H +#define solidWallHeatFluxTemperatureFvPatchScalarField_H + +#include "fixedGradientFvPatchFields.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class solidWallHeatFluxTemperatureFvPatchScalarField Declaration +\*---------------------------------------------------------------------------*/ + +class solidWallHeatFluxTemperatureFvPatchScalarField +: + public fixedGradientFvPatchScalarField +{ + // Private data + + //- Heat flux / [W/m2] + scalarField q_; + + //- Name of thermal conductivity field + word KName_; + + +public: + + //- Runtime type information + TypeName("solidWallHeatFluxTemperature"); + + + // Constructors + + //- Construct from patch and internal field + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const fvPatch&, + const DimensionedField& + ); + + //- Construct from patch, internal field and dictionary + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const fvPatch&, + const DimensionedField&, + const dictionary& + ); + + //- Construct by mapping given + // solidWallHeatFluxTemperatureFvPatchScalarField + // onto a new patch + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const solidWallHeatFluxTemperatureFvPatchScalarField&, + const fvPatch&, + const DimensionedField&, + const fvPatchFieldMapper& + ); + + //- Construct as copy + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const solidWallHeatFluxTemperatureFvPatchScalarField& + ); + + //- Construct and return a clone + virtual tmp clone() const + { + return tmp + ( + new solidWallHeatFluxTemperatureFvPatchScalarField(*this) + ); + } + + //- Construct as copy setting internal field reference + solidWallHeatFluxTemperatureFvPatchScalarField + ( + const solidWallHeatFluxTemperatureFvPatchScalarField&, + const DimensionedField& + ); + + //- Construct and return a clone setting internal field reference + virtual tmp clone + ( + const DimensionedField& iF + ) const + { + return tmp + ( + new solidWallHeatFluxTemperatureFvPatchScalarField(*this, iF) + ); + } + + + // Member functions + + // Evaluation functions + + //- Update the coefficients associated with the patch field + virtual void updateCoeffs(); + + + // Mapping functions + + //- Map (and resize as needed) from self given a mapping object + virtual void autoMap + ( + const fvPatchFieldMapper& + ); + + //- Reverse map the given fvPatchField onto this fvPatchField + virtual void rmap + ( + const fvPatchScalarField&, + const labelList& + ); + + + // I-O + + //- Write + void write(Ostream&) const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/UEqn.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/UEqn.H new file mode 100644 index 00000000..1cbafe36 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/UEqn.H @@ -0,0 +1,22 @@ + // Solve the Momentum equation + tmp UEqn + ( + fvm::div(phi, U) + - fvm::Sp(fvc::div(phi), U) + + turb.divDevRhoReff(U) + ); + + UEqn().relax(); + + eqnResidual = solve + ( + UEqn() + == + fvc::reconstruct + ( + fvc::interpolate(rho)*(g & mesh.Sf()) + - fvc::snGrad(p)*mesh.magSf() + ) + ).initialResidual(); + + maxResidual = max(eqnResidual, maxResidual); diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H new file mode 100644 index 00000000..046ca5ec --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleContinuityErrors.H @@ -0,0 +1,21 @@ +{ + 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/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.C b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.C new file mode 100644 index 00000000..c4fb220c --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.C @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "compressibleCourantNo.H" +#include "fvc.H" + +Foam::scalar Foam::compressibleCourantNo +( + const fvMesh& mesh, + const Time& runTime, + const volScalarField& rho, + const surfaceScalarField& phi +) +{ + scalar CoNum = 0.0; + scalar meanCoNum = 0.0; + + //- Can have fluid domains with 0 cells so do not test. + //if (mesh.nInternalFaces()) + { + surfaceScalarField SfUfbyDelta = + mesh.surfaceInterpolation::deltaCoeffs() + * mag(phi) + / fvc::interpolate(rho); + + CoNum = max(SfUfbyDelta/mesh.magSf()) + .value()*runTime.deltaT().value(); + + meanCoNum = (sum(SfUfbyDelta)/sum(mesh.magSf())) + .value()*runTime.deltaT().value(); + } + + Info<< "Region: " << mesh.name() << " Courant Number mean: " << meanCoNum + << " max: " << CoNum << endl; + + return CoNum; +} + + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.H new file mode 100644 index 00000000..58ad4f66 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleCourantNo.H @@ -0,0 +1,49 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. + \\/ 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Description + Calculates and outputs the mean and maximum Courant Numbers for the fluid + regions + +\*---------------------------------------------------------------------------*/ + +#ifndef compressibleCourantNo_H +#define compressibleCourantNo_H + +#include "fvMesh.H" + +namespace Foam +{ + scalar compressibleCourantNo + ( + const fvMesh& mesh, + const Time& runTime, + const volScalarField& rho, + const surfaceScalarField& phi + ); +} + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H new file mode 100644 index 00000000..3ca2f685 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/compressibleMultiRegionCourantNo.H @@ -0,0 +1,15 @@ + scalar CoNum = -GREAT; + forAll(fluidRegions, regionI) + { + CoNum = max + ( + compressibleCourantNo + ( + fluidRegions[regionI], + runTime, + rhoFluid[regionI], + phiFluid[regionI] + ), + CoNum + ); + } diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/convergenceCheck.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/convergenceCheck.H new file mode 100644 index 00000000..53c00386 --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/convergenceCheck.H @@ -0,0 +1,12 @@ +// check convergence +Info<< "maxResidual: " << maxResidual + << " convergence criterion: " << convergenceCriterion + << endl; + +if (maxResidual < convergenceCriterion) +{ + Info<< "reached convergence criterion: " << convergenceCriterion << endl; + runTime.writeAndEnd(); + Info<< "latestTime = " << runTime.timeName() << endl; +} + diff --git a/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidFields.H new file mode 100644 index 00000000..2d2ccf9a --- /dev/null +++ b/applications/solvers/heatTransfer/chtMultiRegionSimpleFoam/fluid/createFluidFields.H @@ -0,0 +1,144 @@ + // Initialise fluid field pointer lists + PtrList thermoFluid(fluidRegions.size()); + PtrList rhoFluid(fluidRegions.size()); + PtrList KFluid(fluidRegions.size()); + PtrList UFluid(fluidRegions.size()); + PtrList phiFluid(fluidRegions.size()); + PtrList gFluid(fluidRegions.size()); + PtrList turbulence(fluidRegions.size()); + PtrList DpDtf(fluidRegions.size()); + + List initialMassFluid(fluidRegions.size()); + List