Commit d0cc8729 authored by mattijs's avatar mattijs
Browse files

Merge branch 'master' of /home/noisy3/OpenFOAM/OpenFOAM-dev

parents 39d597f3 d88d92ed
......@@ -204,8 +204,8 @@ $(interpolation)/interpolationCellPoint/makeInterpolationCellPoint.C
$(interpolation)/interpolationCellPointFace/makeInterpolationCellPointFace.C
$(interpolation)/interpolationCellPointWallModified/cellPointWeightWallModified/cellPointWeightWallModified.C
$(interpolation)/interpolationCellPointWallModified/makeInterpolationCellPointWallModified.C
$(interpolation)/interpolationPoint/pointMVCWeight.C
$(interpolation)/interpolationPoint/makeInterpolationPoint.C
$(interpolation)/interpolationPointMVC/pointMVCWeight.C
$(interpolation)/interpolationPointMVC/makeInterpolationPointMVC.C
volPointInterpolation = interpolation/volPointInterpolation
$(volPointInterpolation)/volPointInterpolation.C
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -23,13 +23,13 @@ License
\*---------------------------------------------------------------------------*/
#include "interpolationPoint.H"
#include "interpolationPointMVC.H"
#include "volPointInterpolation.H"
// * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
template<class Type>
Foam::interpolationPoint<Type>::interpolationPoint
Foam::interpolationPointMVC<Type>::interpolationPointMVC
(
const GeometricField<Type, fvPatchField, volMesh>& psi
)
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -22,7 +22,7 @@ License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::interpolationPoint
Foam::interpolationPointMVC
Description
Given cell centre values interpolates to vertices and uses these to
......@@ -30,8 +30,8 @@ Description
\*---------------------------------------------------------------------------*/
#ifndef interpolationPoint_H
#define interpolationPoint_H
#ifndef interpolationPointMVC_H
#define interpolationPointMVC_H
#include "interpolation.H"
#include "pointMVCWeight.H"
......@@ -42,11 +42,11 @@ namespace Foam
{
/*---------------------------------------------------------------------------*\
Class interpolationPoint Declaration
Class interpolationPointMVC Declaration
\*---------------------------------------------------------------------------*/
template<class Type>
class interpolationPoint
class interpolationPointMVC
:
public interpolation<Type>
{
......@@ -57,16 +57,17 @@ protected:
//- Interpolated volfield
const GeometricField<Type, pointPatchField, pointMesh> psip_;
public:
//- Runtime type information
TypeName("point");
TypeName("pointMVC");
// Constructors
//- Construct from components
interpolationPoint
interpolationPointMVC
(
const GeometricField<Type, fvPatchField, volMesh>& psi
);
......@@ -93,12 +94,12 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "interpolationPointI.H"
#include "interpolationPointMVCI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "interpolationPoint.C"
# include "interpolationPointMVC.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -26,7 +26,7 @@ License
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type>
inline Type Foam::interpolationPoint<Type>::interpolate
inline Type Foam::interpolationPointMVC<Type>::interpolate
(
const pointMVCWeight& cpw
) const
......@@ -36,7 +36,7 @@ inline Type Foam::interpolationPoint<Type>::interpolate
template<class Type>
inline Type Foam::interpolationPoint<Type>::interpolate
inline Type Foam::interpolationPointMVC<Type>::interpolate
(
const vector& position,
const label cellI,
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -23,13 +23,13 @@ License
\*---------------------------------------------------------------------------*/
#include "interpolationPoint.H"
#include "interpolationPointMVC.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
makeInterpolation(interpolationPoint);
makeInterpolation(interpolationPointMVC);
}
// ************************************************************************* //
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -56,7 +56,7 @@ void Foam::pointMVCWeight::calcWeights
forAll(f, j)
{
label jPlus1 = f.fcIndex(j);
scalar l = mag(u[j]-u[jPlus1]);
scalar l = mag(u[j] - u[jPlus1]);
theta[j] = 2.0*Foam::asin(l/2.0);
}
......@@ -68,7 +68,7 @@ void Foam::pointMVCWeight::calcWeights
weights[pid] =
1.0
/ dist[pid]
* (Foam::tan(theta[jMin1]/2.0)+Foam::tan(theta[j]/2.0));
* (Foam::tan(theta[jMin1]/2.0) + Foam::tan(theta[j]/2.0));
sumWeight += weights[pid];
}
......@@ -132,11 +132,10 @@ void Foam::pointMVCWeight::calcWeights
//Pout<< " uj:" << u[j] << " ujPlus1:" << u[jPlus1]
// << " temp:" << temp << endl;
scalar l = mag(u[j]-u[jPlus1]);
scalar l = min(mag(u[j] - u[jPlus1]), 2.0);
scalar angle = 2.0*Foam::asin(l/2.0);
//Pout<< " j:" << j << " l:" << l
// << " angle:" << angle << endl;
//Pout<< " j:" << j << " l:" << l << " angle:" << angle << endl;
v += 0.5*angle*temp;
}
......@@ -145,14 +144,14 @@ void Foam::pointMVCWeight::calcWeights
v /= vNorm;
// Make sure v points towards the polygon
//if (((v&u[0]) < 0) != (mesh.faceOwner()[faceI] != cellIndex_))
//{
// FatalErrorIn("pointMVCWeight::calcWeights(..)")
// << "v:" << v << " u[0]:" << u[0]
// << exit(FatalError);
//}
if ((v&u[0]) < 0)
//if (((v&u[0]) < 0) != (mesh.faceOwner()[faceI] != cellIndex_))
//{
// FatalErrorIn("pointMVCWeight::calcWeights(..)")
// << "v:" << v << " u[0]:" << u[0]
// << exit(FatalError);
//}
if ((v & u[0]) < 0)
{
v = -v;
}
......@@ -165,22 +164,22 @@ void Foam::pointMVCWeight::calcWeights
label jPlus1 = f.fcIndex(j);
//Pout<< " uj:" << u[j] << " ujPlus1:" << u[jPlus1] << endl;
vector n0 = u[j] ^ v;
vector n0 = u[j]^v;
n0 /= mag(n0);
vector n1 = u[jPlus1] ^ v;
vector n1 = u[jPlus1]^v;
n1 /= mag(n1);
scalar l = mag(n0-n1);
scalar l = min(mag(n0 - n1), 2.0);
//Pout<< " l:" << l << endl;
alpha(j) = 2.0*Foam::asin(l/2.0);
vector temp = n0 ^ n1;
vector temp = n0^n1;
if ((temp&v) < 0.0)
{
alpha[j] = -alpha[j];
}
l = mag(u[j]-v);
l = min(mag(u[j] - v), 2.0);
//Pout<< " l:" << l << endl;
theta(j) = 2.0*Foam::asin(l/2.0);
}
......@@ -211,7 +210,7 @@ void Foam::pointMVCWeight::calcWeights
sum +=
1.0
/ Foam::tan(theta[j])
* (Foam::tan(alpha[j]/2.0)+Foam::tan(alpha[jMin1]/2.0));
* (Foam::tan(alpha[j]/2.0) + Foam::tan(alpha[jMin1]/2.0));
}
// The special case when x lies on the polygon, handle it using 2D mvc.
......@@ -234,7 +233,7 @@ void Foam::pointMVCWeight::calcWeights
/ sum
/ dist[pid]
/ Foam::sin(theta[j])
* (Foam::tan(alpha[j]/2.0)+Foam::tan(alpha[jMin1]/2.0));
* (Foam::tan(alpha[j]/2.0) + Foam::tan(alpha[jMin1]/2.0));
}
}
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......
......@@ -89,12 +89,12 @@ Foam::CloudFunctionObjectList<CloudType>::CloudFunctionObjectList
template<class CloudType>
Foam::CloudFunctionObjectList<CloudType>::CloudFunctionObjectList
(
const CloudFunctionObjectList& ppm
const CloudFunctionObjectList& cfol
)
:
PtrList<CloudFunctionObject<CloudType> >(ppm),
owner_(ppm.owner_),
dict_(ppm.dict_)
PtrList<CloudFunctionObject<CloudType> >(cfol),
owner_(cfol.owner_),
dict_(cfol.dict_)
{}
......
......@@ -307,7 +307,7 @@ getVolumeType
forAll(eFaces, i)
{
edgeNormal += patch_.faceNormal()[eFaces[i]];
edgeNormal += patch_.faceNormals()[eFaces[i]];
}
if (debug & 2)
......
......@@ -10,6 +10,13 @@ thermoSingleLayer/thermoSingleLayer.C
submodels/subModelBase.C
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/injectionModelNew.C
$(KINEMATICMODELS)/injectionModel/injectionModelList/injectionModelList.C
......
......@@ -34,6 +34,10 @@ License
#include "directMappedWallPolyPatch.H"
#include "mapDistribute.H"
#include "cachedRandom.H"
#include "normal.H"
#include "mathematicalConstants.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
......@@ -61,8 +65,6 @@ bool kinematicSingleLayer::read()
solution.lookup("nCorr") >> nCorr_;
solution.lookup("nNonOrthCorr") >> nNonOrthCorr_;
coeffs_.lookup("Cf") >> Cf_;
return true;
}
else
......@@ -76,9 +78,10 @@ void kinematicSingleLayer::correctThermoFields()
{
if (thermoModel_ == tmConstant)
{
rho_ == dimensionedScalar(coeffs_.lookup("rho0"));
mu_ == dimensionedScalar(coeffs_.lookup("mu0"));
sigma_ == dimensionedScalar(coeffs_.lookup("sigma0"));
const dictionary& constDict(coeffs_.subDict("constantThermoCoeffs"));
rho_ == dimensionedScalar(constDict.lookup("rho0"));
mu_ == dimensionedScalar(constDict.lookup("mu0"));
sigma_ == dimensionedScalar(constDict.lookup("sigma0"));
}
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
(
const volScalarField& pu,
......@@ -312,9 +296,8 @@ tmp<Foam::fvVectorMatrix> kinematicSingleLayer::solveMomentum
+ fvm::div(phi_, U_)
==
- USp_
+ tau(U_)
+ fvc::grad(sigma_)
- fvm::SuSp(rhoSp_, U_)
+ forces_.correct(U_)
);
fvVectorMatrix& UEqn = tUEqn();
......@@ -459,8 +442,6 @@ kinematicSingleLayer::kinematicSingleLayer
cumulativeContErr_(0.0),
Cf_(readScalar(coeffs().lookup("Cf"))),
rho_
(
IOobject
......@@ -773,6 +754,8 @@ kinematicSingleLayer::kinematicSingleLayer
injection_(*this, coeffs_),
forces_(*this, coeffs_),
addedMassTotal_(0.0)
{
if (readFields)
......
......@@ -42,6 +42,7 @@ SourceFiles
#include "fvMatrices.H"
#include "injectionModelList.H"
#include "forceList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
......@@ -93,12 +94,6 @@ protected:
scalar cumulativeContErr_;
// Model parameters
//- Skin frition coefficient for film/primary region interface
scalar Cf_;
// Thermo properties
// Fields
......@@ -199,6 +194,9 @@ protected:
//- Cloud injection
injectionModelList injection_;
//- List of film forces
forceList forces_;
// Checks
......@@ -238,9 +236,6 @@ protected:
//- Update film surface velocities
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
// given value
template<class Type>
......@@ -314,12 +309,6 @@ public:
inline label nNonOrthCorr() const;
// Model parameters
//- Return the skin friction coefficient
inline scalar Cf() const;
// Thermo properties
//- Return const access to the dynamic viscosity / [Pa.s]
......
......@@ -61,12 +61,6 @@ inline label kinematicSingleLayer::nNonOrthCorr() const
}
inline scalar kinematicSingleLayer::Cf() const
{
return Cf_;
}
inline const volScalarField& kinematicSingleLayer::mu() const
{
return mu_;
......
/*---------------------------------------------------------------------------*\
========= |
\\ / 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();