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;
+}
+
+// ************************************************************************* //