diff --git a/applications/utilities/postProcessing/wall/sonicWallHeatFlux/CMakeLists.txt b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/CMakeLists.txt new file mode 100644 index 000000000..b1404209a --- /dev/null +++ b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/CMakeLists.txt @@ -0,0 +1,46 @@ +# -------------------------------------------------------------------------- +# ======== | +# \ / F ield | foam-extend: Open Source CFD +# \ / O peration | Version: 4.1 +# \ / A nd | Web: http://www.foam-extend.org +# \/ M anipulation | For copyright notice see file Copyright +# -------------------------------------------------------------------------- +# License +# This file is part of foam-extend. +# +# foam-extend 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. +# +# foam-extend 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 foam-extend. If not, see . +# +# Description +# CMakeLists.txt file for libraries and applications +# +# Author +# Hrvoje Jasak, Wikki Ltd, 2019. All rights reserved +# +# +# -------------------------------------------------------------------------- + +list(APPEND SOURCES + sonicWallHeatFlux.C +) + +# Set minimal environment for external compilation +if(NOT FOAM_FOUND) + cmake_minimum_required(VERSION 2.8) + find_package(FOAM REQUIRED) +endif() + +add_foam_executable(sonicWallHeatFlux + DEPENDS reactionThermophysicalModels compressibleRASModels + SOURCES ${SOURCES} +) diff --git a/applications/utilities/postProcessing/wall/sonicWallHeatFlux/Make/files b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/Make/files new file mode 100644 index 000000000..466d7d242 --- /dev/null +++ b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/Make/files @@ -0,0 +1,3 @@ +sonicWallHeatFlux.C + +EXE = $(FOAM_APPBIN)/sonicWallHeatFlux diff --git a/applications/utilities/postProcessing/wall/sonicWallHeatFlux/Make/options b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/Make/options new file mode 100644 index 000000000..6ea9210f2 --- /dev/null +++ b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/Make/options @@ -0,0 +1,15 @@ +EXE_INC = \ + -I$(LIB_SRC)/turbulenceModels \ + -I$(LIB_SRC)/turbulenceModels/compressible/RAS/RASModel \ + -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/reactionThermo/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude + +EXE_LIBS = \ + -lcompressibleTurbulenceModel \ + -lcompressibleRASModels \ + -lreactionThermophysicalModels \ + -lfiniteVolume \ + -lspecie \ + -lbasicThermophysicalModels diff --git a/applications/utilities/postProcessing/wall/sonicWallHeatFlux/createFields.H b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/createFields.H new file mode 100644 index 000000000..1cea43615 --- /dev/null +++ b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/createFields.H @@ -0,0 +1,43 @@ +autoPtr thermo +( + basicPsiThermo::New(mesh) +); + +const volScalarField& e = thermo->e(); + +volScalarField rho +( + IOobject + ( + "rho", + runTime.timeName(), + mesh + ), + thermo->rho() +); + +volVectorField U +( + IOobject + ( + "U", + runTime.timeName(), + mesh, + IOobject::MUST_READ, + IOobject::AUTO_WRITE + ), + mesh +); + +#include "compressibleCreatePhi.H" + +autoPtr RASModel +( + compressible::RASModel::New + ( + rho, + U, + phi, + thermo() + ) +); diff --git a/applications/utilities/postProcessing/wall/sonicWallHeatFlux/sonicWallHeatFlux.C b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/sonicWallHeatFlux.C new file mode 100644 index 000000000..b976bf5f2 --- /dev/null +++ b/applications/utilities/postProcessing/wall/sonicWallHeatFlux/sonicWallHeatFlux.C @@ -0,0 +1,104 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | foam-extend: Open Source CFD + \\ / O peration | Version: 4.1 + \\ / A nd | Web: http://www.foam-extend.org + \\/ M anipulation | For copyright notice see file Copyright +------------------------------------------------------------------------------- +License + This file is part of foam-extend. + + foam-extend 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. + + foam-extend 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 foam-extend. If not, see . + +Application + wallHeatFlux + +Description + Calculates and writes the heat flux for all patches as the boundary field + of a volScalarField and also prints the integrated flux for all wall + patches. + +\*---------------------------------------------------------------------------*/ + +#include "fvCFD.H" +#include "basicPsiThermo.H" +#include "RASModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +int main(int argc, char *argv[]) +{ + timeSelector::addOptions(); +# include "setRootCase.H" +# include "createTime.H" + instantList timeDirs = timeSelector::select0(runTime, args); +# include "createMesh.H" + + forAll(timeDirs, timeI) + { + runTime.setTime(timeDirs[timeI], timeI); + Info<< "Time = " << runTime.timeName() << endl; + mesh.readUpdate(); + +# include "createFields.H" + + surfaceScalarField heatFlux = + fvc::interpolate(RASModel->alphaEff())*fvc::snGrad(e); + + const surfaceScalarField::GeometricBoundaryField& patchHeatFlux = + heatFlux.boundaryField(); + + Info<< "\nWall heat fluxes [W]" << endl; + forAll(patchHeatFlux, patchi) + { + if (mesh.boundary()[patchi].isWall()) + { + Info<< mesh.boundary()[patchi].name() + << " " + << sum + ( + mesh.magSf().boundaryField()[patchi] + *patchHeatFlux[patchi] + ) + << endl; + } + } + Info<< endl; + + volScalarField wallHeatFlux + ( + IOobject + ( + "wallHeatFlux", + runTime.timeName(), + mesh + ), + mesh, + dimensionedScalar("wallHeatFlux", heatFlux.dimensions(), 0.0) + ); + + forAll(wallHeatFlux.boundaryField(), patchi) + { + wallHeatFlux.boundaryField()[patchi] = patchHeatFlux[patchi]; + } + + wallHeatFlux.write(); + } + + Info<< "End" << endl; + + return 0; +} + +// ************************************************************************* //