Commit 8cabc8b5 authored by Andrew Heather's avatar Andrew Heather
Browse files

ENH: Added particle non-sphere drag model

parent 8f1fe51b
......@@ -31,6 +31,7 @@ License
#include "KinematicCloud.H"
#include "NoDrag.H"
#include "NonSphereDrag.H"
#include "SphereDrag.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
......@@ -40,6 +41,7 @@ License
makeDragModel(KinematicCloud<ParcelType>); \
\
makeDragModelType(NoDrag, KinematicCloud, ParcelType); \
makeDragModelType(NonSphereDrag, KinematicCloud, ParcelType); \
makeDragModelType(SphereDrag, KinematicCloud, ParcelType);
......
......@@ -27,14 +27,25 @@ License
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class CloudType>
Foam::DragModel<CloudType>::DragModel(CloudType& owner)
:
dict_(dictionary::null),
coeffDict_(dictionary::null),
owner_(owner)
{}
template<class CloudType>
Foam::DragModel<CloudType>::DragModel
(
const dictionary& dict,
CloudType& owner
CloudType& owner,
const word& type
)
:
dict_(dict),
coeffDict_(dict.subDict(type + "Coeffs")),
owner_(owner)
{}
......@@ -62,6 +73,13 @@ const Foam::dictionary& Foam::DragModel<CloudType>::dict() const
}
template<class CloudType>
const Foam::dictionary& Foam::DragModel<CloudType>::coeffDict() const
{
return coeffDict_;
}
template<class CloudType>
Foam::scalar Foam::DragModel<CloudType>::utc
(
......
......@@ -57,6 +57,9 @@ class DragModel
//- The cloud dictionary
const dictionary& dict_;
//- The model coefficients dictionary
const dictionary& coeffDict_;
//- Reference to the owner cloud class
CloudType& owner_;
......@@ -82,11 +85,15 @@ public:
// Constructors
//- Construct null from owner
DragModel(CloudType& owner);
//- Construct from components
DragModel
(
const dictionary& dict,
CloudType& owner
CloudType& owner,
const word& type
);
......@@ -110,6 +117,9 @@ public:
//- Return the dictionary
const dictionary& dict() const;
//- Return the coefficients dictionary
const dictionary& coeffDict() const;
// Member Functions
......
......@@ -30,7 +30,7 @@ License
template <class CloudType>
Foam::NoDrag<CloudType>::NoDrag(const dictionary& dict, CloudType& owner)
:
DragModel<CloudType>(dict, owner)
DragModel<CloudType>(owner)
{}
......
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "NonSphereDrag.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class CloudType>
Foam::NonSphereDrag<CloudType>::NonSphereDrag
(
const dictionary& dict,
CloudType& owner
)
:
DragModel<CloudType>(dict, owner, typeName),
phi_(readScalar(this->coeffDict().lookup("phi"))),
a_(exp(2.3288 - 6.4581*phi_ + 2.4486*sqr(phi_))),
b_(0.0964 + 0.5565*phi_),
c_(exp(4.9050 - 13.8944*phi_ + 18.4222*sqr(phi_) - 10.2599*pow3(phi_))),
d_(exp(1.4681 + 12.2584*phi_ - 20.7322*sqr(phi_) + 15.8855*pow3(phi_)))
{
if (phi_ <= 0 || phi_ > 1)
{
FatalErrorIn
(
"NonSphereDrag<CloudType>::NonSphereDrag"
"("
"const dictionary&, "
"CloudType&"
")"
) << "Ratio of surface of sphere having same volume as particle to "
<< "actual surface area of particle (phi) must be greater than 0 "
<< "and less than or equal to 1" << exit(FatalError);
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
template<class CloudType>
Foam::NonSphereDrag<CloudType>::~NonSphereDrag()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class CloudType>
bool Foam::NonSphereDrag<CloudType>::active() const
{
return true;
}
template<class CloudType>
Foam::scalar Foam::NonSphereDrag<CloudType>::Cd(const scalar Re) const
{
return 24.0/(Re + ROOTVSMALL)*(1.0 + a_*pow(Re, b_)) + Re*c_/(Re + d_);
}
// ************************************************************************* //
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2010-2010 OpenCFD Ltd.
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class
Foam::NonSphereDrag
Description
Drag model for non-spherical particles.
Takes the form of
24.0/Re*(1.0 + a_*pow(Re, b_)) + Re*c_/(Re + d_);
Where a(phi), b(phi), c(phi) and d(phi) are model coefficients, with phi
defined as:
area of sphere with same volume as particle
phi = -------------------------------------------
actual particle area
Equation used is Eqn (11) of reference below - good to within 2 to 4 % of
RMS values from experiment.
H and L also give a simplified model with greater error compared to
results from experiment - Eqn 12 - but since phi is presumed
constant, it offers little benefit.
Reference:
@verbatim
"Drag coefficient and terminal velocity of spherical and nonspherical
particles"
A. Haider and O. Levenspiel,
Powder Technology
Volume 58, Issue 1, May 1989, Pages 63-70
@endverbatim
\*---------------------------------------------------------------------------*/
#ifndef NonSphereDrag_H
#define NonSphereDrag_H
#include "DragModel.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class NonSphereDrag Declaration
\*---------------------------------------------------------------------------*/
template<class CloudType>
class NonSphereDrag
:
public DragModel<CloudType>
{
protected:
// Protected Data
//- Flag to indicate `Simple model'
bool simpleModel_;
//- Ratio of surface of sphere having same volume as particle to
// actual surface area of particle (0 < phi <= 1)
scalar phi_;
// Model coefficients
scalar a_;
scalar b_;
scalar c_;
scalar d_;
public:
//- Runtime type information
TypeName("NonSphereDrag");
// Constructors
//- Construct from dictionary
NonSphereDrag(const dictionary& dict, CloudType& owner);
//- Destructor
virtual ~NonSphereDrag();
// Member Functions
//- Flag to indicate whether model activates drag model
bool active() const;
//- Return drag coefficient
scalar Cd(const scalar Re) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "NonSphereDrag.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //
......@@ -30,11 +30,11 @@ License
template <class CloudType>
Foam::SphereDrag<CloudType>::SphereDrag
(
const dictionary& dict,
const dictionary&,
CloudType& owner
)
:
DragModel<CloudType>(dict, owner)
DragModel<CloudType>(owner)
{}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment