diff --git a/src/functionObjects/field/Make/files b/src/functionObjects/field/Make/files
index 2e19e13910..9681a84e95 100644
--- a/src/functionObjects/field/Make/files
+++ b/src/functionObjects/field/Make/files
@@ -34,6 +34,7 @@ nearWallFields/findCellParticle.C
nearWallFields/findCellParticleCloud.C
processorField/processorField.C
+proudmanAcousticPower/proudmanAcousticPower.C
readFields/readFields.C
setFlow/setFlow.C
diff --git a/src/functionObjects/field/proudmanAcousticPower/proudmanAcousticPower.C b/src/functionObjects/field/proudmanAcousticPower/proudmanAcousticPower.C
new file mode 100644
index 0000000000..4077b78801
--- /dev/null
+++ b/src/functionObjects/field/proudmanAcousticPower/proudmanAcousticPower.C
@@ -0,0 +1,226 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | www.openfoam.com
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+ Copyright (C) 2019 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 3 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, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "proudmanAcousticPower.H"
+#include "volFields.H"
+#include "basicThermo.H"
+#include "turbulenceModel.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+ defineTypeNameAndDebug(proudmanAcousticPower, 0);
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ proudmanAcousticPower,
+ dictionary
+ );
+}
+}
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+Foam::tmp
+Foam::functionObjects::proudmanAcousticPower::rhoScale
+(
+ const tmp& fld
+) const
+{
+ const basicThermo* thermoPtr =
+ getObjectPtr(basicThermo::dictName);
+
+ if (thermoPtr)
+ {
+ return fld*thermoPtr->rho();
+ }
+
+ if (rhoInf_.value() < 0)
+ {
+ FatalErrorInFunction
+ << type() << " " << name() << ": "
+ << "Incompressible calculation assumed, but no reference density "
+ << "set. Please set the entry 'rhoInf' to an appropriate value"
+ << nl
+ << exit(FatalError);
+ }
+
+ return rhoInf_*fld;
+}
+
+
+Foam::tmp
+Foam::functionObjects::proudmanAcousticPower::a() const
+{
+ const basicThermo* thermoPtr =
+ getObjectPtr(basicThermo::dictName);
+
+ if (thermoPtr)
+ {
+ const basicThermo& thermo = *thermoPtr;
+ return sqrt(thermo.gamma()*thermo.p()/thermo.rho());
+ }
+
+ return
+ tmp::New
+ (
+ IOobject
+ (
+ scopedName("a"),
+ mesh_.time().timeName(),
+ mesh_,
+ IOobject::NO_READ
+ ),
+ mesh_,
+ aRef_
+ );
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::functionObjects::proudmanAcousticPower::proudmanAcousticPower
+(
+ const word& name,
+ const Time& runTime,
+ const dictionary& dict
+)
+:
+ fvMeshFunctionObject(name, runTime, dict),
+ rhoInf_("0", dimDensity, -1),
+ aRef_(dimVelocity, Zero),
+ alphaEps_(0.1)
+{
+ read(dict);
+
+ volScalarField* PAPtr
+ (
+ new volScalarField
+ (
+ IOobject
+ (
+ scopedName("P_A"),
+ mesh_.time().timeName(),
+ mesh_,
+ IOobject::NO_READ,
+ IOobject::NO_WRITE
+ ),
+ mesh_,
+ dimensionedScalar(dimPower/dimVolume, Zero)
+ )
+ );
+
+ PAPtr->store();
+
+ volScalarField* LPPtr
+ (
+ new volScalarField
+ (
+ IOobject
+ (
+ scopedName("L_P"),
+ mesh_.time().timeName(),
+ mesh_,
+ IOobject::NO_READ,
+ IOobject::NO_WRITE
+ ),
+ mesh_,
+ dimensionedScalar(dimless, Zero)
+ )
+ );
+
+ LPPtr->store();
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::proudmanAcousticPower::read(const dictionary& dict)
+{
+ if (fvMeshFunctionObject::read(dict))
+ {
+ rhoInf_.readIfPresent("rhoInf", dict);
+ aRef_.readIfPresent("aRef", dict);
+ dict.readIfPresent("alphaEps", alphaEps_);
+
+ return true;
+ }
+
+ return false;
+}
+
+
+bool Foam::functionObjects::proudmanAcousticPower::execute()
+{
+ const turbulenceModel& turb =
+ lookupObject(turbulenceModel::propertiesName);
+
+ const volScalarField Mt(sqrt(2*turb.k())/a());
+
+ volScalarField& P_A =
+ mesh_.lookupObjectRef(scopedName("P_A"));
+
+ P_A = rhoScale(alphaEps_*turb.epsilon()*pow5(Mt));
+
+ volScalarField& L_P =
+ mesh_.lookupObjectRef(scopedName("L_P"));
+
+ L_P = 10*log10(P_A/dimensionedScalar("PRef", dimPower/dimVolume, 1e-12));
+
+ return true;
+}
+
+
+bool Foam::functionObjects::proudmanAcousticPower::write()
+{
+ Log << type() << " " << name() << " write:" << nl;
+
+ const volScalarField& P_A =
+ mesh_.lookupObject(scopedName("P_A"));
+
+ Log << " writing field " << P_A.name() << nl;
+
+ P_A.write();
+
+ const volScalarField& L_P =
+ mesh_.lookupObject(scopedName("L_P"));
+
+ Log << " writing field " << L_P.name() << nl;
+
+ L_P.write();
+
+ Log << endl;
+
+ return true;
+}
+
+
+// ************************************************************************* //
diff --git a/src/functionObjects/field/proudmanAcousticPower/proudmanAcousticPower.H b/src/functionObjects/field/proudmanAcousticPower/proudmanAcousticPower.H
new file mode 100644
index 0000000000..3804a6e25e
--- /dev/null
+++ b/src/functionObjects/field/proudmanAcousticPower/proudmanAcousticPower.H
@@ -0,0 +1,183 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | www.openfoam.com
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+ Copyright (C) 2019 OpenCFD Ltd.
+-------------------------------------------------------------------------------
+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 3 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, see .
+
+Class
+ Foam::functionObjects::proudmanAcousticPower
+
+Group
+ grpFieldFunctionObjects
+
+Description
+ Calculates the acoustic power due to the volume of isotropic turbulence
+ using Proudman's formula
+
+ The acoustic power \f$ P_A \f$ [W/m3] in terms of turbulence \f$ k \f$
+ and \f$ \epsilon \f$ is given as:
+
+ \f[
+ P_A = alpha_\epsilon \rho \epsilon M_t^5
+ \f]
+
+ where \f$ alpha_\epsilon \f$ is a constant (0.1) and
+
+ \f[
+ M_t = \frac{\sqrt{2 k}}{a_0}
+ \f]
+
+ with \f$ a_0 \f$ the speed of sound. The acoustic power is also output in
+ dB using:
+
+ \f[
+ L_P = 10 \log \frac{P_A}{P_ref}
+ \f]
+
+ where \f$ P_ref \f$ is a constant (1e-12 W/m3)
+
+Usage
+ Example of function object specification to calculate the Proudman acoustic
+ power:
+ \verbatim
+ proudmanAcousticPower1
+ {
+ type proudmanAcousticPower;
+ libs ("libfieldFunctionObjects.so");
+ ...
+
+ // Required additional entries for incompressible calculations
+ rhoInf 1.225;
+ aRef 340;
+ }
+ \endverbatim
+
+ Where the entries comprise:
+ \table
+ Property | Description | Required | Default
+ type | type name: proudmanAcousticPower | yes |
+ rhoInf | Freestream density (for incompressible) | no |
+ aRef | Reference speed of sound (for incompressible) | no |
+ alphaEps | Model coefficient | no | 0.1
+ \endtable
+
+Note
+ The freestream density and reference speed of sound are only necessary
+ when a thermodynamics package is unavailable, typically for incompressible
+ cases.
+
+See also
+ Foam::functionObjects::fvMeshFunctionObject
+
+SourceFiles
+ proudmanAcousticPower.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjects_proudmanAcousticPower_H
+#define functionObjects_proudmanAcousticPower_H
+
+#include "fvMeshFunctionObject.H"
+#include "volFieldsFwd.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+ Class proudmanAcousticPower Declaration
+\*---------------------------------------------------------------------------*/
+
+class proudmanAcousticPower
+:
+ public fvMeshFunctionObject
+{
+private:
+
+ // Private Data
+
+ //- Freestream density (incompressible calcs only)
+ dimensionedScalar rhoInf_;
+
+ //- Reference speed of sound (incompressible calcs only)
+ dimensionedScalar aRef_;
+
+ //- Model coefficient; default = 0.1
+ scalar alphaEps_;
+
+
+ // Private Member Functions
+
+ //- Multiply the field by density and return
+ tmp rhoScale(const tmp& fld) const;
+
+ //- Speed of sound
+ tmp a() const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("proudmanAcousticPower");
+
+
+ // Constructors
+
+ //- Construct from Time and dictionary
+ proudmanAcousticPower
+ (
+ const word& name,
+ const Time& runTime,
+ const dictionary&
+ );
+
+
+ //- Destructor
+ virtual ~proudmanAcousticPower() = default;
+
+
+ // Member Functions
+
+ //- Read the Proudman acoustic power data
+ virtual bool read(const dictionary&);
+
+ //- Calculate the Proudman acoustic power
+ virtual bool execute();
+
+ //- Write the Proudman acoustic power
+ virtual bool write();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //