From 9f9a64cedc9a0ecc037821661d718ef9057afa17 Mon Sep 17 00:00:00 2001
From: andy <andy>
Date: Tue, 20 Sep 2011 14:41:25 +0100
Subject: [PATCH] ENH: Added 'voidFraction' cloud function object

---
 .../include/makeParcelCloudFunctionObjects.H  |   4 +-
 .../VoidFraction/VoidFraction.C               | 137 ++++++++++++++++++
 .../VoidFraction/VoidFraction.H               | 137 ++++++++++++++++++
 3 files changed, 277 insertions(+), 1 deletion(-)
 create mode 100644 src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C
 create mode 100644 src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H

diff --git a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
index 0a68bee908a..6eadb7fea82 100644
--- a/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
+++ b/src/lagrangian/intermediate/parcels/include/makeParcelCloudFunctionObjects.H
@@ -31,6 +31,7 @@ License
 #include "FacePostProcessing.H"
 #include "ParticleTracks.H"
 #include "PatchPostProcessing.H"
+#include "VoidFraction.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -40,7 +41,8 @@ License
                                                                               \
     makeCloudFunctionObjectType(FacePostProcessing, CloudType);               \
     makeCloudFunctionObjectType(ParticleTracks, CloudType);                   \
-    makeCloudFunctionObjectType(PatchPostProcessing, CloudType);
+    makeCloudFunctionObjectType(PatchPostProcessing, CloudType);              \
+    makeCloudFunctionObjectType(VoidFraction, CloudType);
 
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C
new file mode 100644
index 00000000000..855db45c88a
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.C
@@ -0,0 +1,137 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+     \\/     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 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 <http://www.gnu.org/licenses/>.
+
+\*---------------------------------------------------------------------------*/
+
+#include "VoidFraction.H"
+#
+// * * * * * * * * * * * * * Protectd Member Functions * * * * * * * * * * * //
+
+template<class CloudType>
+void Foam::VoidFraction<CloudType>::write()
+{
+    if (thetaPtr_.valid())
+    {
+        thetaPtr_->write();
+    }
+    else
+    {
+        FatalErrorIn("void Foam::VoidFraction<CloudType>::write()")
+            << "thetaPtr not valid" << abort(FatalError);
+    }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class CloudType>
+Foam::VoidFraction<CloudType>::VoidFraction
+(
+    const dictionary& dict,
+    CloudType& owner
+)
+:
+    CloudFunctionObject<CloudType>(owner),
+    thetaPtr_(NULL)
+{}
+
+
+template<class CloudType>
+Foam::VoidFraction<CloudType>::VoidFraction
+(
+    const VoidFraction<CloudType>& vf
+)
+:
+    CloudFunctionObject<CloudType>(vf),
+    thetaPtr_(NULL)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class CloudType>
+Foam::VoidFraction<CloudType>::~VoidFraction()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class CloudType>
+void Foam::VoidFraction<CloudType>::preEvolve()
+{
+    if (thetaPtr_.valid())
+    {
+        thetaPtr_->internalField() = 0.0;
+    }
+    else
+    {
+        const fvMesh& mesh = this->owner().mesh();
+
+        thetaPtr_.reset
+        (
+            new volScalarField
+            (
+                IOobject
+                (
+                    this->owner().name() + "Theta",
+                    mesh.time().timeName(),
+                    mesh,
+                    IOobject::NO_READ,
+                    IOobject::NO_WRITE
+                ),
+                mesh,
+                dimensionedScalar("zero", dimless, 0.0)
+            )
+        );
+    }
+}
+
+
+template<class CloudType>
+void Foam::VoidFraction<CloudType>::postEvolve()
+{
+    volScalarField& theta = thetaPtr_();
+
+    const fvMesh& mesh = this->owner().mesh();
+
+    theta.internalField() /= mesh.time().deltaTValue()*mesh.V();
+
+    CloudFunctionObject<CloudType>::postEvolve();
+}
+
+
+template<class CloudType>
+void Foam::VoidFraction<CloudType>::postMove
+(
+    const parcelType& p,
+    const label cellI,
+    const scalar dt
+)
+{
+    volScalarField& theta = thetaPtr_();
+
+    theta[cellI] += dt*p.nParticle()*p.volume();
+}
+
+
+// ************************************************************************* //
diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H
new file mode 100644
index 00000000000..0b15a6f6207
--- /dev/null
+++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/VoidFraction/VoidFraction.H
@@ -0,0 +1,137 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
+     \\/     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 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 <http://www.gnu.org/licenses/>.
+
+Class
+    Foam::VoidFraction
+
+Description
+    Creates particle void fraction field on carrier phase
+
+SourceFiles
+    VoidFraction.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef VoidFraction_H
+#define VoidFraction_H
+
+#include "CloudFunctionObject.H"
+#include "volFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+                       Class VoidFraction Declaration
+\*---------------------------------------------------------------------------*/
+
+template<class CloudType>
+class VoidFraction
+:
+    public CloudFunctionObject<CloudType>
+{
+    // Private Data
+
+        // Typedefs
+
+            //- Convenience typedef for parcel type
+            typedef typename CloudType::parcelType parcelType;
+
+
+        //- Void fraction field
+        autoPtr<volScalarField> thetaPtr_;
+
+
+protected:
+
+    // Protected Member Functions
+
+        //- Write post-processing info
+        virtual void write();
+
+
+public:
+
+    //- Runtime type information
+    TypeName("voidFraction");
+
+
+    // Constructors
+
+        //- Construct from dictionary
+        VoidFraction(const dictionary& dict, CloudType& owner);
+
+        //- Construct copy
+        VoidFraction(const VoidFraction<CloudType>& vf);
+
+        //- Construct and return a clone
+        virtual autoPtr<CloudFunctionObject<CloudType> > clone() const
+        {
+            return autoPtr<CloudFunctionObject<CloudType> >
+            (
+                new VoidFraction<CloudType>(*this)
+            );
+        }
+
+
+    //- Destructor
+    virtual ~VoidFraction();
+
+
+    // Member Functions
+
+        // Evaluation
+
+            //- Pre-evolve hook
+            virtual void preEvolve();
+
+            //- Post-evolve hook
+            virtual void postEvolve();
+
+            //- Post-move hook
+            virtual void postMove
+            (   
+                const parcelType& p,
+                const label cellI,
+                const scalar dt
+            );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+#   include "VoidFraction.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
-- 
GitLab