ENH: Updated and restructured film force models, new contact angle force

This commit is contained in:
andy
2011-05-19 17:07:13 +01:00
parent 3d3cfa914c
commit 23d58e5402
16 changed files with 1206 additions and 54 deletions

View File

@ -10,6 +10,13 @@ thermoSingleLayer/thermoSingleLayer.C
submodels/subModelBase.C submodels/subModelBase.C
KINEMATICMODELS=submodels/kinematic KINEMATICMODELS=submodels/kinematic
$(KINEMATICMODELS)/force/force/force.C
$(KINEMATICMODELS)/force/force/forceNew.C
$(KINEMATICMODELS)/force/forceList/forceList.C
$(KINEMATICMODELS)/force/contactAngleForce/contactAngleForce.C
$(KINEMATICMODELS)/force/surfaceShearForce/surfaceShearForce.C
$(KINEMATICMODELS)/force/thermocapillaryForce/thermocapillaryForce.C
$(KINEMATICMODELS)/injectionModel/injectionModel/injectionModel.C $(KINEMATICMODELS)/injectionModel/injectionModel/injectionModel.C
$(KINEMATICMODELS)/injectionModel/injectionModel/injectionModelNew.C $(KINEMATICMODELS)/injectionModel/injectionModel/injectionModelNew.C
$(KINEMATICMODELS)/injectionModel/injectionModelList/injectionModelList.C $(KINEMATICMODELS)/injectionModel/injectionModelList/injectionModelList.C

View File

@ -34,6 +34,10 @@ License
#include "directMappedWallPolyPatch.H" #include "directMappedWallPolyPatch.H"
#include "mapDistribute.H" #include "mapDistribute.H"
#include "cachedRandom.H"
#include "normal.H"
#include "mathematicalConstants.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -61,8 +65,6 @@ bool kinematicSingleLayer::read()
solution.lookup("nCorr") >> nCorr_; solution.lookup("nCorr") >> nCorr_;
solution.lookup("nNonOrthCorr") >> nNonOrthCorr_; solution.lookup("nNonOrthCorr") >> nNonOrthCorr_;
coeffs_.lookup("Cf") >> Cf_;
return true; return true;
} }
else else
@ -76,9 +78,10 @@ void kinematicSingleLayer::correctThermoFields()
{ {
if (thermoModel_ == tmConstant) if (thermoModel_ == tmConstant)
{ {
rho_ == dimensionedScalar(coeffs_.lookup("rho0")); const dictionary& constDict(coeffs_.subDict("constantThermoCoeffs"));
mu_ == dimensionedScalar(coeffs_.lookup("mu0")); rho_ == dimensionedScalar(constDict.lookup("rho0"));
sigma_ == dimensionedScalar(coeffs_.lookup("sigma0")); mu_ == dimensionedScalar(constDict.lookup("mu0"));
sigma_ == dimensionedScalar(constDict.lookup("sigma0"));
} }
else else
{ {
@ -273,25 +276,6 @@ void kinematicSingleLayer::updateSurfaceVelocities()
} }
tmp<fvVectorMatrix> kinematicSingleLayer::tau(volVectorField& U) const
{
// Calculate shear stress
volScalarField Cs("Cs", rho_*Cf_*mag(Us_ - U));
volScalarField Cw
(
"Cw",
mu_/(0.3333*(delta_ + dimensionedScalar("SMALL", dimLength, SMALL)))
);
Cw.min(1.0e+06);
return
(
- fvm::Sp(Cs, U) + Cs*Us_ // surface contribution
- fvm::Sp(Cw, U) + Cw*Uw_ // wall contribution
);
}
tmp<Foam::fvVectorMatrix> kinematicSingleLayer::solveMomentum tmp<Foam::fvVectorMatrix> kinematicSingleLayer::solveMomentum
( (
const volScalarField& pu, const volScalarField& pu,
@ -312,9 +296,8 @@ tmp<Foam::fvVectorMatrix> kinematicSingleLayer::solveMomentum
+ fvm::div(phi_, U_) + fvm::div(phi_, U_)
== ==
- USp_ - USp_
+ tau(U_)
+ fvc::grad(sigma_)
- fvm::SuSp(rhoSp_, U_) - fvm::SuSp(rhoSp_, U_)
+ forces_.correct(U_)
); );
fvVectorMatrix& UEqn = tUEqn(); fvVectorMatrix& UEqn = tUEqn();
@ -459,8 +442,6 @@ kinematicSingleLayer::kinematicSingleLayer
cumulativeContErr_(0.0), cumulativeContErr_(0.0),
Cf_(readScalar(coeffs().lookup("Cf"))),
rho_ rho_
( (
IOobject IOobject
@ -773,6 +754,8 @@ kinematicSingleLayer::kinematicSingleLayer
injection_(*this, coeffs_), injection_(*this, coeffs_),
forces_(*this, coeffs_),
addedMassTotal_(0.0) addedMassTotal_(0.0)
{ {
if (readFields) if (readFields)

View File

@ -42,6 +42,7 @@ SourceFiles
#include "fvMatrices.H" #include "fvMatrices.H"
#include "injectionModelList.H" #include "injectionModelList.H"
#include "forceList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -93,12 +94,6 @@ protected:
scalar cumulativeContErr_; scalar cumulativeContErr_;
// Model parameters
//- Skin frition coefficient for film/primary region interface
scalar Cf_;
// Thermo properties // Thermo properties
// Fields // Fields
@ -199,6 +194,9 @@ protected:
//- Cloud injection //- Cloud injection
injectionModelList injection_; injectionModelList injection_;
//- List of film forces
forceList forces_;
// Checks // Checks
@ -238,9 +236,6 @@ protected:
//- Update film surface velocities //- Update film surface velocities
virtual void updateSurfaceVelocities(); virtual void updateSurfaceVelocities();
//- Return the stress term for the momentum equation
virtual tmp<fvVectorMatrix> tau(volVectorField& dU) const;
//- Constrain a film region master/slave boundaries of a field to a //- Constrain a film region master/slave boundaries of a field to a
// given value // given value
template<class Type> template<class Type>
@ -314,12 +309,6 @@ public:
inline label nNonOrthCorr() const; inline label nNonOrthCorr() const;
// Model parameters
//- Return the skin friction coefficient
inline scalar Cf() const;
// Thermo properties // Thermo properties
//- Return const access to the dynamic viscosity / [Pa.s] //- Return const access to the dynamic viscosity / [Pa.s]

View File

@ -61,12 +61,6 @@ inline label kinematicSingleLayer::nNonOrthCorr() const
} }
inline scalar kinematicSingleLayer::Cf() const
{
return Cf_;
}
inline const volScalarField& kinematicSingleLayer::mu() const inline const volScalarField& kinematicSingleLayer::mu() const
{ {
return mu_; return mu_;

View File

@ -0,0 +1,164 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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 "contactAngleForce.H"
#include "addToRunTimeSelectionTable.H"
#include "fvcGrad.H"
#include "unitConversion.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(contactAngleForce, 0);
addToRunTimeSelectionTable(force, contactAngleForce, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
contactAngleForce::contactAngleForce
(
const surfaceFilmModel& owner,
const dictionary& dict
)
:
force(typeName, owner, dict),
deltaWet_(readScalar(coeffs_.lookup("deltaWet"))),
Ccf_(readScalar(coeffs_.lookup("Ccf"))),
rndGen_(label(0), -1),
distribution_
(
distributionModels::distributionModel::New
(
coeffs_.subDict("contactAngleDistribution"),
rndGen_
)
)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
contactAngleForce::~contactAngleForce()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
tmp<fvVectorMatrix> contactAngleForce::correct(volVectorField& U)
{
tmp<volVectorField> tForce
(
new volVectorField
(
IOobject
(
"contactForce",
owner_.time().timeName(),
owner_.regionMesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
owner_.regionMesh(),
dimensionedVector("zero", dimForce/dimArea, vector::zero)
)
);
vectorField& force = tForce().internalField();
const labelUList& own = owner_.regionMesh().owner();
const labelUList& nbr = owner_.regionMesh().neighbour();
const scalarField& magSf = owner_.magSf();
const volScalarField& delta = owner_.delta();
const volScalarField& sigma = owner_.sigma();
volScalarField alpha
(
"alpha",
pos(delta - dimensionedScalar("deltaWet", dimLength, deltaWet_))
);
volVectorField gradAlpha(fvc::grad(alpha));
scalarField nHits(force.size(), 0.0);
forAll(nbr, faceI)
{
const label cellO = own[faceI];
const label cellN = nbr[faceI];
label cellI = -1;
if ((delta[cellO] > deltaWet_) && (delta[cellN] < deltaWet_))
{
cellI = cellO;
}
else if ((delta[cellO] < deltaWet_) && (delta[cellN] > deltaWet_))
{
cellI = cellN;
}
if (cellI != -1)
{
// const scalar dx = Foam::sqrt(magSf[cellI]);
const scalar dx = owner_.regionMesh().deltaCoeffs()[faceI];
const vector n =
gradAlpha[cellI]/(mag(gradAlpha[cellI]) + ROOTVSMALL);
scalar theta = cos(degToRad(distribution_->sample()));
force[cellI] += Ccf_*n*sigma[cellI]*(1.0 - theta)/dx;
nHits[cellI]++;
}
}
nHits = max(nHits, 1.0);
force /= (nHits*magSf);
if (owner_.regionMesh().time().outputTime())
{
tForce().write();
}
tmp<fvVectorMatrix>
tfvm(new fvVectorMatrix(U, dimForce/dimArea*dimVolume));
tfvm() += tForce;
return tfvm;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,125 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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::contactAngleForce
Description
Film contact angle force
SourceFiles
contactAngleForce.C
\*---------------------------------------------------------------------------*/
#ifndef contactAngleForce_H
#define contactAngleForce_H
#include "force.H"
#include "distributionModel.H"
#include "cachedRandom.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
/*---------------------------------------------------------------------------*\
Class contactAngleForce Declaration
\*---------------------------------------------------------------------------*/
class contactAngleForce
:
public force
{
private:
// Private Data
//- Threshold film thickness beyon which the film is 'wet'
scalar deltaWet_;
//- Coefficient applied to the contact angle force
scalar Ccf_;
//- Random number generator
cachedRandom rndGen_;
//- Parcel size PDF model
const autoPtr<distributionModels::distributionModel> distribution_;
// Private member functions
//- Disallow default bitwise copy construct
contactAngleForce(const contactAngleForce&);
//- Disallow default bitwise assignment
void operator=(const contactAngleForce&);
public:
//- Runtime type information
TypeName("contactAngle");
// Constructors
//- Construct from surface film model
contactAngleForce
(
const surfaceFilmModel& owner,
const dictionary& dict
);
//- Destructor
virtual ~contactAngleForce();
// Member Functions
// Evolution
//- Correct
virtual tmp<fvVectorMatrix> correct(volVectorField& U);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,73 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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 "force.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(force, 0);
defineRunTimeSelectionTable(force, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
force::force(const surfaceFilmModel& owner)
:
subModelBase(owner)
{}
force::force
(
const word& type,
const surfaceFilmModel& owner,
const dictionary& dict
)
:
subModelBase(type, owner, dict)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
force::~force()
{}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,138 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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::force
Description
Base class for film (stress-based) force models
SourceFiles
force.C
forceNew.C
\*---------------------------------------------------------------------------*/
#ifndef force_H
#define force_H
#include "subModelBase.H"
#include "runTimeSelectionTables.H"
#include "fvMatrices.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
/*---------------------------------------------------------------------------*\
Class force Declaration
\*---------------------------------------------------------------------------*/
class force
:
public subModelBase
{
private:
// Private Member Functions
//- Disallow default bitwise copy construct
force(const force&);
//- Disallow default bitwise assignment
void operator=(const force&);
public:
//- Runtime type information
TypeName("force");
// Declare runtime constructor selection table
declareRunTimeSelectionTable
(
autoPtr,
force,
dictionary,
(
const surfaceFilmModel& owner,
const dictionary& dict
),
(owner, dict)
);
// Constructors
//- Construct null
force(const surfaceFilmModel& owner);
//- Construct from type name, dictionary and surface film model
force
(
const word& type,
const surfaceFilmModel& owner,
const dictionary& dict
);
// Selectors
//- Return a reference to the selected force model
static autoPtr<force> New
(
const surfaceFilmModel& owner,
const dictionary& dict,
const word& mdoelType
);
//- Destructor
virtual ~force();
// Member Functions
// Evolution
//- Correct
virtual tmp<fvVectorMatrix> correct(volVectorField& U) = 0;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,77 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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 "force.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
autoPtr<force> force::New
(
const surfaceFilmModel& model,
const dictionary& dict,
const word& modelType
)
{
Info<< " " << modelType << endl;
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(modelType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
{
FatalErrorIn
(
"force::New"
"("
"const surfaceFilmModel&, "
"const dictionary&, "
"const word&"
")"
) << "Unknown force type " << modelType
<< nl << nl << "Valid force types are:" << nl
<< dictionaryConstructorTablePtr_->toc()
<< exit(FatalError);
}
return autoPtr<force>(cstrIter()(model, dict));
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,101 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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 "forceList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
forceList::forceList(const surfaceFilmModel& owner)
:
PtrList<force>()
{}
forceList::forceList
(
const surfaceFilmModel& owner,
const dictionary& dict
)
:
PtrList<force>()
{
const wordList models(dict.lookup("forces"));
Info<< " Selecting film force models" << endl;
if (models.size() > 0)
{
this->setSize(models.size());
forAll(models, i)
{
set(i, force::New(owner, dict, models[i]));
}
}
else
{
Info<< " none" << endl;
}
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
forceList::~forceList()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
tmp<fvVectorMatrix> forceList::correct(volVectorField& U)
{
tmp<fvVectorMatrix> tResult
(
new fvVectorMatrix(U, dimForce/dimArea*dimVolume)
);
fvVectorMatrix& result = tResult();
forAll(*this, i)
{
result += this->operator[](i).correct(U);
}
return tResult;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,95 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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::forceList
Description
List container for film sources
SourceFiles
forceList.C
\*---------------------------------------------------------------------------*/
#ifndef forceList_H
#define forceList_H
#include "PtrList.H"
#include "force.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
/*---------------------------------------------------------------------------*\
Class forceList Declaration
\*---------------------------------------------------------------------------*/
class forceList
:
public PtrList<force>
{
public:
// Constructors
//- Construct null
forceList(const surfaceFilmModel& owner);
//- Construct from type name, dictionary and surface film model
forceList
(
const surfaceFilmModel& owner,
const dictionary& dict
);
//- Destructor
virtual ~forceList();
// Member functions
//- Return (net) force system
tmp<fvVectorMatrix> correct(volVectorField& U);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,100 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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 "surfaceShearForce.H"
#include "addToRunTimeSelectionTable.H"
#include "fvmSup.H"
#include "kinematicSingleLayer.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(surfaceShearForce, 0);
addToRunTimeSelectionTable(force, surfaceShearForce, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
surfaceShearForce::surfaceShearForce
(
const surfaceFilmModel& owner,
const dictionary& dict
)
:
force(typeName, owner, dict),
Cf_(readScalar(coeffs_.lookup("Cf")))
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
surfaceShearForce::~surfaceShearForce()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
tmp<fvVectorMatrix> surfaceShearForce::correct(volVectorField& U)
{
const kinematicSingleLayer& film =
static_cast<const kinematicSingleLayer&>(owner_);
const volScalarField& rho = film.rho();
const volScalarField& mu = film.mu();
const volVectorField& Us = film.Us();
const volVectorField& Uw = film.Uw();
const volScalarField& delta = film.delta();
// Calculate shear stress
volScalarField Cs("Cs", rho*Cf_*mag(Us - U));
volScalarField Cw
(
"Cw",
mu/(0.3333*(delta + dimensionedScalar("SMALL", dimLength, SMALL)))
);
Cw.min(1.0e+06);
return
(
- fvm::Sp(Cs, U) + Cs*Us // surface contribution
- fvm::Sp(Cw, U) + Cw*Uw // wall contribution
);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,114 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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::surfaceShearForce
Description
Film surface shear force
SourceFiles
surfaceShearForce.C
\*---------------------------------------------------------------------------*/
#ifndef surfaceShearForce_H
#define surfaceShearForce_H
#include "force.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
/*---------------------------------------------------------------------------*\
Class surfaceShearForce Declaration
\*---------------------------------------------------------------------------*/
class surfaceShearForce
:
public force
{
private:
// Private Data
//- Surface roughness coefficient
scalar Cf_;
// Private member functions
//- Disallow default bitwise copy construct
surfaceShearForce(const surfaceShearForce&);
//- Disallow default bitwise assignment
void operator=(const surfaceShearForce&);
public:
//- Runtime type information
TypeName("surfaceShear");
// Constructors
//- Construct from surface film model
surfaceShearForce
(
const surfaceFilmModel& owner,
const dictionary& dict
);
//- Destructor
virtual ~surfaceShearForce();
// Member Functions
// Evolution
//- Correct
virtual tmp<fvVectorMatrix> correct(volVectorField& U);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -0,0 +1,83 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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 "thermocapillaryForce.H"
#include "addToRunTimeSelectionTable.H"
#include "fvcGrad.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(thermocapillaryForce, 0);
addToRunTimeSelectionTable(force, thermocapillaryForce, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
thermocapillaryForce::thermocapillaryForce
(
const surfaceFilmModel& owner,
const dictionary& dict
)
:
force(owner)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
thermocapillaryForce::~thermocapillaryForce()
{}
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
tmp<fvVectorMatrix> thermocapillaryForce::correct(volVectorField& U)
{
const volScalarField& sigma = owner_.sigma();
tmp<fvVectorMatrix>
tfvm(new fvVectorMatrix(U, dimForce/dimArea*dimVolume));
tfvm() += fvc::grad(sigma);
return tfvm;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// ************************************************************************* //

View File

@ -0,0 +1,107 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2011 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 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::thermocapillaryForce
Description
Thermocapillary force
SourceFiles
thermocapillaryForce.C
\*---------------------------------------------------------------------------*/
#ifndef thermocapillaryForce_H
#define thermocapillaryForce_H
#include "force.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace regionModels
{
namespace surfaceFilmModels
{
/*---------------------------------------------------------------------------*\
Class thermocapillaryForce Declaration
\*---------------------------------------------------------------------------*/
class thermocapillaryForce
:
public force
{
private:
// Private member functions
//- Disallow default bitwise copy construct
thermocapillaryForce(const thermocapillaryForce&);
//- Disallow default bitwise assignment
void operator=(const thermocapillaryForce&);
public:
//- Runtime type information
TypeName("thermocapillary");
// Constructors
//- Construct from surface film model
thermocapillaryForce
(
const surfaceFilmModel& owner,
const dictionary& dict
);
//- Destructor
virtual ~thermocapillaryForce();
// Member Functions
// Evolution
//- Correct
virtual tmp<fvVectorMatrix> correct(volVectorField& U);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace surfaceFilmModels
} // End namespace regionModels
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -97,11 +97,13 @@ void thermoSingleLayer::correctThermoFields()
{ {
case tmConstant: case tmConstant:
{ {
rho_ == dimensionedScalar(coeffs_.lookup("rho0")); const dictionary&
mu_ == dimensionedScalar(coeffs_.lookup("mu0")); constDict(coeffs_.subDict("constantThermoCoeffs"));
sigma_ == dimensionedScalar(coeffs_.lookup("sigma0")); rho_ == dimensionedScalar(constDict.lookup("rho0"));
Cp_ == dimensionedScalar(coeffs_.lookup("Cp0")); mu_ == dimensionedScalar(constDict.lookup("mu0"));
kappa_ == dimensionedScalar(coeffs_.lookup("kappa0")); sigma_ == dimensionedScalar(constDict.lookup("sigma0"));
Cp_ == dimensionedScalar(constDict.lookup("Cp0"));
kappa_ == dimensionedScalar(constDict.lookup("kappa0"));
break; break;
} }