diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
index f95d5d0ef0..6b0d78ac38 100644
--- a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
+++ b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
@@ -45,6 +45,7 @@ License
#include "RemoveParcels.H"
#include "VoidFraction.H"
#include "KinematicReynoldsNumber.H"
+#include "ParticleDose.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -65,7 +66,8 @@ License
makeCloudFunctionObjectType(PatchParticleHistogram, CloudType); \
makeCloudFunctionObjectType(RemoveParcels, CloudType); \
makeCloudFunctionObjectType(VoidFraction, CloudType); \
- makeCloudFunctionObjectType(KinematicReynoldsNumber, CloudType);
+ makeCloudFunctionObjectType(KinematicReynoldsNumber, CloudType); \
+ makeCloudFunctionObjectType(ParticleDose, CloudType);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/intermediate/parcels/include/makeReactingParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeReactingParcelCloudFunctionObjects.H
index 16258ff40c..e8bed51a3e 100644
--- a/src/lagrangian/intermediate/parcels/include/makeReactingParcelCloudFunctionObjects.H
+++ b/src/lagrangian/intermediate/parcels/include/makeReactingParcelCloudFunctionObjects.H
@@ -48,6 +48,7 @@ License
#include "HeatTransferCoeff.H"
#include "ThermoReynoldsNumber.H"
#include "WeberNumberReacting.H"
+#include "ParticleDose.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -71,7 +72,8 @@ License
makeCloudFunctionObjectType(NusseltNumber, CloudType); \
makeCloudFunctionObjectType(HeatTransferCoeff, CloudType); \
makeCloudFunctionObjectType(ThermoReynoldsNumber, CloudType); \
- makeCloudFunctionObjectType(WeberNumberReacting, CloudType);
+ makeCloudFunctionObjectType(WeberNumberReacting, CloudType); \
+ makeCloudFunctionObjectType(ParticleDose, CloudType);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/intermediate/parcels/include/makeThermoParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeThermoParcelCloudFunctionObjects.H
index a703eb8040..0e0a312b8f 100644
--- a/src/lagrangian/intermediate/parcels/include/makeThermoParcelCloudFunctionObjects.H
+++ b/src/lagrangian/intermediate/parcels/include/makeThermoParcelCloudFunctionObjects.H
@@ -46,6 +46,7 @@ License
#include "NusseltNumber.H"
#include "HeatTransferCoeff.H"
#include "ThermoReynoldsNumber.H"
+#include "ParticleDose.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -68,7 +69,8 @@ License
makeCloudFunctionObjectType(VoidFraction, CloudType); \
makeCloudFunctionObjectType(NusseltNumber, CloudType); \
makeCloudFunctionObjectType(HeatTransferCoeff, CloudType); \
- makeCloudFunctionObjectType(ThermoReynoldsNumber, CloudType);
+ makeCloudFunctionObjectType(ThermoReynoldsNumber, CloudType); \
+ makeCloudFunctionObjectType(ParticleDose, CloudType);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleDose/ParticleDose.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleDose/ParticleDose.C
new file mode 100644
index 0000000000..2868804093
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleDose/ParticleDose.C
@@ -0,0 +1,108 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | www.openfoam.com
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+ Copyright (C) 2022 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 "ParticleDose.H"
+#include "volFields.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::ParticleDose::ParticleDose
+(
+ const dictionary& dict,
+ CloudType& owner,
+ const word& modelName
+)
+:
+ CloudFunctionObject(dict, owner, modelName, typeName),
+ GName_(this->coeffDict().getWord("GName"))
+{}
+
+
+template
+Foam::ParticleDose::ParticleDose
+(
+ const ParticleDose& re
+)
+:
+ CloudFunctionObject(re),
+ GName_(re.GName_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+void Foam::ParticleDose::postEvolve
+(
+ const typename parcelType::trackingData& td
+)
+{
+ auto& c = this->owner();
+
+ if (!c.template foundObject>("D"))
+ {
+ auto* DPtr =
+ new IOField
+ (
+ IOobject
+ (
+ "D",
+ c.time().timeName(),
+ c,
+ IOobject::NO_READ
+ )
+ );
+
+ DPtr->store();
+ }
+
+ auto& D = c.template lookupObjectRef>("D");
+
+ D.resize(c.size(), Zero);
+
+ const fvMesh& mesh = this->owner().mesh();
+
+ const auto& G = mesh.lookupObject(GName_);
+
+ label parceli = 0;
+ forAllConstIters(c, parcelIter)
+ {
+ const parcelType& p = parcelIter();
+
+ D[parceli] += G[p.cell()]*mesh.time().deltaTValue();
+ parceli++;
+ }
+
+ if (c.size() && c.time().writeTime())
+ {
+ D.write();
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleDose/ParticleDose.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleDose/ParticleDose.H
new file mode 100644
index 0000000000..b4bdef6695
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/ParticleDose/ParticleDose.H
@@ -0,0 +1,161 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | www.openfoam.com
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+ Copyright (C) 2022 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::ParticleDose
+
+Group
+ grpLagrangianIntermediateFunctionObjects
+
+Description
+ Calculate the doses absorbed by a particle as the time integral
+ of the particle track along the radiation field G [w/m2].
+
+ Operands:
+ \table
+ Operand | Type | Location
+ input | - | -
+ output file | - | -
+ output field | scalarField | \