Merge branch 'master' into testLoop/MartinBeaudoin

This commit is contained in:
Martin Beaudoin 2010-10-12 21:35:05 -04:00
commit bd3d61803e
310 changed files with 4914 additions and 276306 deletions

View file

@ -37,7 +37,7 @@
- fvm::laplacian(rUAf, p) - fvm::laplacian(rUAf, p)
); );
if (corr == nCorr-1 && nonOrth == nNonOrthCorr) if (corr == nCorr - 1 && nonOrth == nNonOrthCorr)
{ {
pEqn.solve(mesh.solver(p.name() + "Final")); pEqn.solve(mesh.solver(p.name() + "Final"));
} }

View file

@ -47,6 +47,10 @@ _foamAddLib()
while [ $# -ge 1 ] while [ $# -ge 1 ]
do do
export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$1:$LD_LIBRARY_PATH
if [ "$WM_ARCH" == "darwinIntel" ]
then
export DYLD_LIBRARY_PATH=$1:$DYLD_LIBRARY_PATH
fi
shift shift
done done
} }
@ -168,15 +172,24 @@ unset MPI_ARCH_PATH
case "$WM_MPLIB" in case "$WM_MPLIB" in
OPENMPI) OPENMPI)
mpi_version=openmpi-1.4.1 if [ "$WM_ARCH" == "darwinIntel" ]
export MPI_HOME=$WM_THIRD_PARTY_DIR/$mpi_version then
export MPI_ARCH_PATH=$MPI_HOME/platforms/$WM_OPTIONS mpi_version=openmpi-system
export MPI_HOME=/usr
export MPI_ARCH_PATH=/usr
# Tell OpenMPI where to find its install directory unset OPAL_PREFIX
export OPAL_PREFIX=$MPI_ARCH_PATH else
mpi_version=openmpi-1.4.1
export MPI_HOME=$WM_THIRD_PARTY_DIR/$mpi_version
export MPI_ARCH_PATH=$MPI_HOME/platforms/$WM_OPTIONS
_foamAddPath $MPI_ARCH_PATH/bin # Tell OpenMPI where to find its install directory
_foamAddLib $MPI_ARCH_PATH/lib export OPAL_PREFIX=$MPI_ARCH_PATH
_foamAddPath $MPI_ARCH_PATH/bin
_foamAddLib $MPI_ARCH_PATH/lib
fi
export FOAM_MPI_LIBBIN=$FOAM_LIBBIN/$mpi_version export FOAM_MPI_LIBBIN=$FOAM_LIBBIN/$mpi_version
unset mpi_version unset mpi_version
@ -317,6 +330,16 @@ export MPI_BUFFER_SIZE
# export LD_PRELOAD=$FOAM_LIBBIN/libhoard.so:$LD_PRELOAD # export LD_PRELOAD=$FOAM_LIBBIN/libhoard.so:$LD_PRELOAD
#fi #fi
# HOARD seems to crash Paraview on Mac OS X 10.6
#if [ -f $FOAM_LIBBIN/libhoard.dylib ]
#then
# if [ -z "$DYLD_INSERT_LIBRARIES" ]
# then
# export DYLD_INSERT_LIBRARIES=$FOAM_LIBBIN/libhoard.dylib
# else
# export DYLD_INSERT_LIBRARIES=$FOAM_LIBBIN/libhoard.dylib:$DYLD_INSERT_LIBRARIES
# fi
#fi
# cleanup environment: # cleanup environment:
# ~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~

View file

@ -27,9 +27,10 @@ Class
Author Author
Hrvoje Jasak, Wikki Ltd. All rights reserved Hrvoje Jasak, Wikki Ltd. All rights reserved
Fethi Tekin, All rights reserved,
Description Description
Mass-conservative face interpolation: typedef for polyPatch to Mass-conservative face interpolation: typedef for stand-alone patch to
stand-alone patch stand-alone patch
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -49,7 +50,7 @@ namespace Foam
{ {
typedef GGIInterpolation typedef GGIInterpolation
< <
PrimitivePatch<face, SubList, const pointField&>, PrimitivePatch<face, List, pointField>,
PrimitivePatch<face, List, pointField> PrimitivePatch<face, List, pointField>
> overlapGgiInterpolation; > overlapGgiInterpolation;
} }

View file

@ -24,6 +24,7 @@ License
Author Author
Hrvoje Jasak, Wikki Ltd. All rights reserved. Hrvoje Jasak, Wikki Ltd. All rights reserved.
Fethi Tekin, All rights reserved.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -60,7 +61,8 @@ Foam::overlapGgiPolyPatch::overlapGgiPolyPatch
shadowName_(word::null), shadowName_(word::null),
shadowIndex_(-1), shadowIndex_(-1),
rotationAxis_(vector(0.0, 0.0, 1.0)), rotationAxis_(vector(0.0, 0.0, 1.0)),
angle_(0), nCopies_(0),
expandedMasterPtr_(NULL),
expandedSlavePtr_(NULL), expandedSlavePtr_(NULL),
patchToPatchPtr_(NULL), patchToPatchPtr_(NULL),
reconFaceCellCentresPtr_(NULL) reconFaceCellCentresPtr_(NULL)
@ -77,14 +79,15 @@ Foam::overlapGgiPolyPatch::overlapGgiPolyPatch
const polyBoundaryMesh& bm, const polyBoundaryMesh& bm,
const word& shadowName, const word& shadowName,
const vector& axis, const vector& axis,
const scalar angle const scalar nCopies
) )
: :
coupledPolyPatch(name, size, start, index, bm), coupledPolyPatch(name, size, start, index, bm),
shadowName_(shadowName), shadowName_(shadowName),
shadowIndex_(-1), shadowIndex_(-1),
rotationAxis_(axis), rotationAxis_(axis),
angle_(angle), nCopies_(nCopies),
expandedMasterPtr_(NULL),
expandedSlavePtr_(NULL), expandedSlavePtr_(NULL),
patchToPatchPtr_(NULL), patchToPatchPtr_(NULL),
reconFaceCellCentresPtr_(NULL) reconFaceCellCentresPtr_(NULL)
@ -104,7 +107,8 @@ Foam::overlapGgiPolyPatch::overlapGgiPolyPatch
shadowName_(dict.lookup("shadowPatch")), shadowName_(dict.lookup("shadowPatch")),
shadowIndex_(-1), shadowIndex_(-1),
rotationAxis_(dict.lookup("rotationAxis")), rotationAxis_(dict.lookup("rotationAxis")),
angle_(readScalar(dict.lookup("angle"))), nCopies_(readScalar(dict.lookup("nCopies"))),
expandedMasterPtr_(NULL),
expandedSlavePtr_(NULL), expandedSlavePtr_(NULL),
patchToPatchPtr_(NULL), patchToPatchPtr_(NULL),
reconFaceCellCentresPtr_(NULL) reconFaceCellCentresPtr_(NULL)
@ -122,7 +126,8 @@ Foam::overlapGgiPolyPatch::overlapGgiPolyPatch
shadowName_(pp.shadowName_), shadowName_(pp.shadowName_),
shadowIndex_(-1), shadowIndex_(-1),
rotationAxis_(pp.rotationAxis_), rotationAxis_(pp.rotationAxis_),
angle_(pp.angle_), nCopies_(pp.nCopies_),
expandedMasterPtr_(NULL),
expandedSlavePtr_(NULL), expandedSlavePtr_(NULL),
patchToPatchPtr_(NULL), patchToPatchPtr_(NULL),
reconFaceCellCentresPtr_(NULL) reconFaceCellCentresPtr_(NULL)
@ -143,7 +148,8 @@ Foam::overlapGgiPolyPatch::overlapGgiPolyPatch
shadowName_(pp.shadowName_), shadowName_(pp.shadowName_),
shadowIndex_(-1), shadowIndex_(-1),
rotationAxis_(pp.rotationAxis_), rotationAxis_(pp.rotationAxis_),
angle_(pp.angle_), nCopies_(pp.nCopies_),
expandedMasterPtr_(NULL),
expandedSlavePtr_(NULL), expandedSlavePtr_(NULL),
patchToPatchPtr_(NULL), patchToPatchPtr_(NULL),
reconFaceCellCentresPtr_(NULL) reconFaceCellCentresPtr_(NULL)
@ -199,7 +205,6 @@ Foam::label Foam::overlapGgiPolyPatch::shadowIndex() const
return shadowIndex_; return shadowIndex_;
} }
const Foam::overlapGgiPolyPatch& const Foam::overlapGgiPolyPatch&
Foam::overlapGgiPolyPatch::shadow() const Foam::overlapGgiPolyPatch::shadow() const
{ {
@ -209,34 +214,21 @@ Foam::overlapGgiPolyPatch::shadow() const
Foam::label Foam::overlapGgiPolyPatch::nCopies() const Foam::label Foam::overlapGgiPolyPatch::nCopies() const
{ {
// Calculate number of copies to be made for the expanded slave // Read the number of copies to be made from the dictionary for the
// to completely cover the master // expanded slave and expanded master to cover 360 degrees
if (!master()) return nCopies_;
{
FatalErrorIn("label overlapGgiPolyPatch::nCopies() const")
<< "nCopies requested for a slave. Error in master-slave logic"
<< abort(FatalError);
}
label ncp = 0;
scalar remainder = angle_;
const scalar slaveAngle = shadow().angle();
while (remainder > SMALL)
{
remainder -= slaveAngle;
ncp++;
}
return ncp;
} }
bool Foam::overlapGgiPolyPatch::master() const bool Foam::overlapGgiPolyPatch::master() const
{ {
// The first overlapggi interface is master,second one is slave
if (angle() == shadow().angle())
{
return start() < shadow().start() ;
}
// Master is the one with the larger angle // Master is the one with the larger angle
return angle() >= shadow().angle(); return angle() > shadow().angle();
} }
@ -246,7 +238,9 @@ void Foam::overlapGgiPolyPatch::write(Ostream& os) const
polyPatch::write(os); polyPatch::write(os);
os.writeKeyword("rotationAxis") << rotationAxis_ os.writeKeyword("rotationAxis") << rotationAxis_
<< token::END_STATEMENT << nl; << token::END_STATEMENT << nl;
os.writeKeyword("angle") << angle_ os.writeKeyword("nCopies") << nCopies_
<< token::END_STATEMENT << nl;
os.writeKeyword("shadowPatch") << shadowName_
<< token::END_STATEMENT << nl; << token::END_STATEMENT << nl;
} }

View file

@ -26,17 +26,17 @@ Class
overlapGgiPolyPatch overlapGgiPolyPatch
Description Description
Partial overlap generalised grid interface (GGI) patch. Master side Partial overlap generalised grid interface (GGI) patch. Master and slave
remains unchanged and the slave side will be copied as needed sides are copied as much as the given number to complete the 360 degree
to pave the master patch surface. cicumferential surface.
This implies that the master patch has got a larger angular pitch than The data interpolation between master and slave patches do not depend on
the slave and that master and slave are aligned at one edge. relative position of them, because of the full circumferential expansion
Master and slave will specify the pitch, based on which the expansion for both sides.
of the master side will be performed and used in interpolation.
Author Author
Hrvoje Jasak, Wikki Ltd. All rights reserved Hrvoje Jasak, Wikki Ltd. All rights reserved
Fethi Tekin, All rights reserved.
SourceFiles SourceFiles
overlapGgiPolyPatch.C overlapGgiPolyPatch.C
@ -78,12 +78,20 @@ class overlapGgiPolyPatch
//- Rotation axis //- Rotation axis
const vector rotationAxis_; const vector rotationAxis_;
//- Wedge angle // Number of copies in order to complete 360 degrees
const scalar angle_; const scalar nCopies_;
// Interpolation // Interpolation
//- Pointer to expanded master patch
mutable standAlonePatch* expandedMasterPtr_;
//- Pointer to expanded faceCentres of Master
mutable vectorField* faceCentresPtr_;
//- Pointer to expanded faceareas of Master
mutable vectorField* faceAreasPtr_;
//- Pointer to expanded slave patch //- Pointer to expanded slave patch
mutable standAlonePatch* expandedSlavePtr_; mutable standAlonePatch* expandedSlavePtr_;
@ -97,17 +105,23 @@ class overlapGgiPolyPatch
// Private member functions // Private member functions
//- Return reference to patch-to-patch interpolation
const overlapGgiInterpolation& patchToPatch() const;
//- Calculate expanded master patch
void calcExpandedMaster() const;
//- Calculate expanded slave patch //- Calculate expanded slave patch
void calcExpandedSlave() const; void calcExpandedSlave() const;
//- Return reference to expanded master patch
const standAlonePatch& expandedMaster() const;
//- Return reference to expanded slave patch //- Return reference to expanded slave patch
const standAlonePatch& expandedSlave() const; const standAlonePatch& expandedSlave() const;
//- Calculate interpolation //- Calculate interpolation
void calcPatchToPatch() const; void calcPatchToPatch() const;
//- Return reference to patch-to-patch interpolation
const overlapGgiInterpolation& patchToPatch() const;
//- Calculate reconstructed cell centres //- Calculate reconstructed cell centres
void calcReconFaceCellCentres() const; void calcReconFaceCellCentres() const;
@ -118,10 +132,6 @@ class overlapGgiPolyPatch
//- Check definition: angles and offsets //- Check definition: angles and offsets
void checkDefinition() const; void checkDefinition() const;
//- Expand slave face field to full coverage
template<class Type>
tmp<Field<Type> > expandSlaveData(const Field<Type>& spf) const;
//- Clear out //- Clear out
void clearOut(); void clearOut();
@ -177,7 +187,7 @@ public:
const polyBoundaryMesh& bm, const polyBoundaryMesh& bm,
const word& shadowName, const word& shadowName,
const vector& axis, const vector& axis,
const scalar angle const scalar n
); );
//- Construct from dictionary //- Construct from dictionary
@ -263,9 +273,9 @@ public:
} }
//- Return wedge angle //- Return wedge angle
const scalar& angle() const scalar angle() const
{ {
return angle_; return 360.0/nCopies();
} }
//- Return number of slave copies //- Return number of slave copies
@ -280,6 +290,14 @@ public:
return !master(); return !master();
} }
//- Expand master face field to full for 360 degrees coverage
template<class Type>
tmp<Field<Type> > expandMasterData(const Field<Type>& spf) const;
//- Expand slave face field to full for 360 degrees coverage
template<class Type>
tmp<Field<Type> > expandSlaveData(const Field<Type>& spf) const;
//- Interpolate face field: given field on a the shadow side, //- Interpolate face field: given field on a the shadow side,
// create an interpolated field on this side // create an interpolated field on this side
template<class Type> template<class Type>

View file

@ -24,11 +24,14 @@ License
Author Author
Hrvoje Jasak, Wikki Ltd. All rights reserved. Hrvoje Jasak, Wikki Ltd. All rights reserved.
Fethi Tekin, All rights reserved.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "overlapGgiPolyPatch.H" #include "overlapGgiPolyPatch.H"
#include "polyMesh.H" #include "polyMesh.H"
#include "polyPatch.H"
#include "primitiveMesh.H"
#include "demandDrivenData.H" #include "demandDrivenData.H"
#include "polyPatchID.H" #include "polyPatchID.H"
#include "OFstream.H" #include "OFstream.H"
@ -36,6 +39,108 @@ Author
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void Foam::overlapGgiPolyPatch::calcExpandedMaster() const
{
// Create expanded master patch interpolation
if (expandedMasterPtr_)
{
FatalErrorIn("void overlapGgiPolyPatch::calcExpandedMaster() const")
<< "Expanded master already calculated"
<< abort(FatalError);
}
if (master())
{
// Create expanded master patch
const label ncpm = nCopies();
Info << "Number of master copies: " << ncpm << endl;
// Create expanded master points and faces
const polyPatch& master = boundaryMesh()[index()];
const pointField& masterLocalPoints = master.localPoints();
pointField MasterExpandedPoints(ncpm*masterLocalPoints.size());
const scalar masterAngle = angle();
Info << "Master Angle is: " << masterAngle << endl;
// Transform points
label nPoints_master = 0;
for (label copyI = 0; copyI < ncpm; copyI++)
{
// Calculate transform
const tensor curRotation =
RodriguesRotation(rotationAxis_, copyI*(masterAngle));
forAll (masterLocalPoints, pointI)
{
MasterExpandedPoints[nPoints_master] =
transform(curRotation, masterLocalPoints[pointI]);
nPoints_master++;
}
}
// Transform faces
const faceList& masterLocalFaces = master.localFaces();
faceList MasterExpandedFaces(ncpm*masterLocalFaces.size());
label nFacesMaster = 0;
for (label copyI = 0; copyI < ncpm; copyI++)
{
const label copyOffsetMaster = copyI*masterLocalPoints.size();
forAll (masterLocalFaces, faceI)
{
const face& curMasterFace = masterLocalFaces[faceI];
face& MastercurExpandedFace =
MasterExpandedFaces[nFacesMaster];
// Copy face with offsets
MastercurExpandedFace.setSize(curMasterFace.size());
forAll (curMasterFace, fpI)
{
MastercurExpandedFace[fpI] =
curMasterFace[fpI] + copyOffsetMaster;
}
nFacesMaster++;
}
}
expandedMasterPtr_ =
new standAlonePatch(MasterExpandedFaces, MasterExpandedPoints);
if (debug > 1)
{
Info << "Writing expanded master patch as VTK" << endl;
const polyMesh& mesh = boundaryMesh().mesh();
fileName fvPath(mesh.time().path()/"VTK");
mkDir(fvPath);
standAlonePatch::writeVTK
(
fvPath/fileName("expandedMaster" + name() + shadow().name()),
MasterExpandedFaces,
MasterExpandedPoints
);
}
}
else
{
FatalErrorIn("void overlapGgiPolyPatch::calcExpandedMaster() const")
<< "Attempting to create expanded master on a shadow"
<< abort(FatalError);
}
}
void Foam::overlapGgiPolyPatch::calcExpandedSlave() const void Foam::overlapGgiPolyPatch::calcExpandedSlave() const
{ {
// Create expanded slave patch interpolation // Create expanded slave patch interpolation
@ -49,7 +154,7 @@ void Foam::overlapGgiPolyPatch::calcExpandedSlave() const
if (master()) if (master())
{ {
// Create expanded patch // Create expanded patch
const label ncp = nCopies(); const label ncp = shadow().nCopies();
Info << "Number of slave copies: " << ncp << endl; Info << "Number of slave copies: " << ncp << endl;
@ -135,11 +240,18 @@ void Foam::overlapGgiPolyPatch::calcExpandedSlave() const
} }
const Foam::standAlonePatch& Foam::overlapGgiPolyPatch::expandedMaster() const
{
if (!expandedMasterPtr_)
{
calcExpandedMaster();
}
return *expandedMasterPtr_;
}
const Foam::standAlonePatch& Foam::overlapGgiPolyPatch::expandedSlave() const const Foam::standAlonePatch& Foam::overlapGgiPolyPatch::expandedSlave() const
{ {
// Note: expanded slave only exists for the master side.
// Slave patch will use master for interpolation.
// HJ, 14/Jan/2009
if (!expandedSlavePtr_) if (!expandedSlavePtr_)
{ {
calcExpandedSlave(); calcExpandedSlave();
@ -151,7 +263,8 @@ const Foam::standAlonePatch& Foam::overlapGgiPolyPatch::expandedSlave() const
void Foam::overlapGgiPolyPatch::calcPatchToPatch() const void Foam::overlapGgiPolyPatch::calcPatchToPatch() const
{ {
// Create patch-to-patch interpolation // Create patch-to-patch interpolation between the expanded master
// and slave patches
if (patchToPatchPtr_) if (patchToPatchPtr_)
{ {
FatalErrorIn("void overlapGgiPolyPatch::calcPatchToPatch() const") FatalErrorIn("void overlapGgiPolyPatch::calcPatchToPatch() const")
@ -164,7 +277,7 @@ void Foam::overlapGgiPolyPatch::calcPatchToPatch() const
patchToPatchPtr_ = patchToPatchPtr_ =
new overlapGgiInterpolation new overlapGgiInterpolation
( (
*this, expandedMaster(),
expandedSlave(), expandedSlave(),
forwardT(), forwardT(),
reverseT(), reverseT(),
@ -214,8 +327,6 @@ void Foam::overlapGgiPolyPatch::calcReconFaceCellCentres() const
// Create neighbouring face centres using interpolation // Create neighbouring face centres using interpolation
if (master()) if (master())
{ {
vectorField alpha(shadow().size(), vector(0, 0, 1));
const label shadowID = shadowIndex(); const label shadowID = shadowIndex();
// Get the transformed and interpolated shadow face cell centers // Get the transformed and interpolated shadow face cell centers
@ -239,7 +350,7 @@ void Foam::overlapGgiPolyPatch::calcReconFaceCellCentres() const
void Foam::overlapGgiPolyPatch::checkDefinition() const void Foam::overlapGgiPolyPatch::checkDefinition() const
{ {
// Sanity checks // Sanity checks
// 1. Check // 1. Check
Info << "overlapGgiPolyPatch: sanity checks missing. HJ" << endl; Info << "overlapGgiPolyPatch: sanity checks missing. HJ" << endl;
// if // if
@ -265,6 +376,7 @@ void Foam::overlapGgiPolyPatch::checkDefinition() const
void Foam::overlapGgiPolyPatch::clearOut() void Foam::overlapGgiPolyPatch::clearOut()
{ {
deleteDemandDrivenData(expandedMasterPtr_);
deleteDemandDrivenData(expandedSlavePtr_); deleteDemandDrivenData(expandedSlavePtr_);
deleteDemandDrivenData(patchToPatchPtr_); deleteDemandDrivenData(patchToPatchPtr_);
deleteDemandDrivenData(reconFaceCellCentresPtr_); deleteDemandDrivenData(reconFaceCellCentresPtr_);

View file

@ -24,6 +24,7 @@ License
Author Author
Hrvoje Jasak, Wikki Ltd. All rights reserved. Hrvoje Jasak, Wikki Ltd. All rights reserved.
Fethi Tekin, All rights reserved.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -36,20 +37,10 @@ template<class Type>
Foam::tmp<Foam::Field<Type> > Foam::tmp<Foam::Field<Type> >
Foam::overlapGgiPolyPatch::expandSlaveData(const Field<Type>& spf) const Foam::overlapGgiPolyPatch::expandSlaveData(const Field<Type>& spf) const
{ {
if (spf.size() != shadow().size())
{
FatalErrorIn
(
"tmp<Field<Type> > overlapGgiPolyPatch::interpolate"
"(const Field<Type>& spf) const"
) << " Incorrect field size for expansion. Field size: "
<< spf.size() << " patch size: " << shadow().size()
<< abort(FatalError);
}
const scalar slaveAngle = shadow().angle(); const scalar slaveAngle = shadow().angle();
const label ncp = nCopies(); const label ncp = shadow().nCopies();
tmp<Field<Type> > tef(new Field<Type>(ncp*spf.size())); tmp<Field<Type> > tef(new Field<Type>(ncp*spf.size()));
Field<Type>& ef = tef(); Field<Type>& ef = tef();
@ -72,6 +63,35 @@ Foam::overlapGgiPolyPatch::expandSlaveData(const Field<Type>& spf) const
return tef; return tef;
} }
template<class Type>
Foam::tmp<Foam::Field<Type> >
Foam::overlapGgiPolyPatch::expandMasterData(const Field<Type>& spf) const
{
const scalar masterAngle = angle();
const label ncpm = nCopies();
tmp<Field<Type> > tef(new Field<Type>(ncpm*spf.size()));
Field<Type>& ef = tef();
label nFaces = 0;
for (label copyI = 0; copyI < ncpm; copyI++)
{
// Calculate transform
const tensor curRotation =
RodriguesRotation(rotationAxis_, copyI*(masterAngle));
forAll (spf, faceI)
{
ef[nFaces] = transform(curRotation, spf[faceI]);
nFaces++;
}
}
return tef;
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
@ -82,13 +102,20 @@ Foam::overlapGgiPolyPatch::interpolate(const Field<Type>& pf) const
if (master()) if (master())
{ {
// Expand slave data // Expand slave data
tmp<Field<Type> > expand = expandSlaveData(pf); tmp<Field<Type> > expandslave = expandSlaveData(pf);
return patchToPatch().slaveToMaster(expand); tmp<Field<Type> > tresult= patchToPatch().slaveToMaster(expandslave);
// Truncate to size
tresult().setSize(size());
return tresult;
} }
else else
{ {
tmp<Field<Type> > tresult = patchToPatch().masterToSlave(pf); // Expand master data
tmp<Field<Type> > expandmaster = expandMasterData(pf);
tmp<Field<Type> > tresult = patchToPatch().masterToSlave(expandmaster);
// Truncate to size // Truncate to size
tresult().setSize(size()); tresult().setSize(size());
@ -107,11 +134,19 @@ Foam::overlapGgiPolyPatch::interpolate(const tmp<Field<Type> >& tpf) const
// Expand slave data // Expand slave data
tmp<Field<Type> > expand = expandSlaveData(tpf()); tmp<Field<Type> > expand = expandSlaveData(tpf());
return patchToPatch().slaveToMaster(expand); tmp<Field<Type> > tresult = patchToPatch().slaveToMaster(expand);
// Truncate to size
tresult().setSize(size());
return tresult;
} }
else else
{ {
tmp<Field<Type> > tresult = patchToPatch().masterToSlave(tpf); // Expand master data
tmp<Field<Type> > expandmaster = expandMasterData(tpf());
tmp<Field<Type> > tresult = patchToPatch().masterToSlave(expandmaster);
// Truncate to size // Truncate to size
tresult().setSize(size()); tresult().setSize(size());

View file

@ -18,6 +18,7 @@ $(solidBodyMotionFunctions)/SKA/SKA.C
$(solidBodyMotionFunctions)/translation/translation.C $(solidBodyMotionFunctions)/translation/translation.C
mixerGgiFvMesh/mixerGgiFvMesh.C mixerGgiFvMesh/mixerGgiFvMesh.C
turboFvMesh/turboFvMesh.C
tetMetrics/tetMetric.C tetMetrics/tetMetric.C
tetMetrics/tetMetrics.C tetMetrics/tetMetrics.C

View file

@ -1,53 +1,43 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.5.dev |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: http://www.openfoam.org |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object dynamicMeshDict;
case "FENE-CR";
instance "0";
local "";
class volSymmTensorField;
object taufirst;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0]; dynamicFvMeshLib "libtopoChangerFvMesh.so";
dynamicFvMesh turboFvMesh;
internalField uniform (0 0 0 0 0 0); turboFvMeshCoeffs
boundaryField
{ {
patch3 coordinateSystem
{ {
type fixedValue; type cylindrical;
value uniform (0 0 0 0 0 0); origin (0 0 0);
axis (0 0 1);
direction (1 0 0);
} }
patch2
rpm
{ {
type zeroGradient; Rotor1 60;
} Rotor2 -30;
patch1 Stator 0;
{ }
type zeroGradient;
}
patch0
{
type empty;
}
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -0,0 +1,225 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ 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
Instructions:
This tool is used to have multiple rotating regions around the same origin
with different rpms.
Creating the cellZones is not implemented in this tool.
The steps to obtain the cellZones are :
1) use regionCellSets utility. With this command you can have different
cellSets for each region.
2) Change the name of the regions eg. CellRegion0 to Rotor1 ,CellRegion1
to Stator and vice versa.
3) run command " setsToZones -noFlipMap ". After this command the
cellSets are transformed to cellZones.
4) in dynamicMeshDict rpm section should be added.
5) The case is ready to be run.
Implemented by Fethi Tekin, 24.03.2010
Author
Hrvoje Jasak, Wikki Ltd. All rights reserved.
Fethi Tekin, All rights reserved.
\*---------------------------------------------------------------------------*/
#include "turboFvMesh.H"
#include "Time.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(turboFvMesh, 0);
addToRunTimeSelectionTable(dynamicFvMesh, turboFvMesh, IOobject);
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void Foam::turboFvMesh::addZonesAndModifiers()
{
// Add zones and modifiers for motion action
// No functionality is implemented
if (cellZones().size() > 0)
{
Info<< "void turboFvMesh::addZonesAndModifiers() : "
<< "Zones and modifiers already present. Skipping."
<< endl;
return;
}
else
{
FatalErrorIn("turboFvMesh")
<< "Cell Regions have to be created"
<< abort(FatalError);
}
}
void Foam::turboFvMesh::calcMovingPoints() const
{
if (debug)
{
Info<< "void turboFvMesh::calcMovingMasks() const : "
<< "Calculating point and cell masks"
<< endl;
}
if (movingPointsPtr_)
{
FatalErrorIn("void turboFvMesh::calcMovingMasks() const")
<< "point mask already calculated"
<< abort(FatalError);
}
// Retrieve the zone Names
const wordList zoneNames = cellZones().names();
// Set the points
movingPointsPtr_ = new vectorField(allPoints().size(),vector::zero);
vectorField& movingPoints = *movingPointsPtr_;
const cellList& c = cells();
const faceList& f = allFaces();
forAll(zoneNames,zoneI)
{
Info<< "Moving Region Zone Name:" << zoneNames[zoneI]<< nl<<endl;
const labelList& cellAddr =
cellZones()[cellZones().findZoneID(zoneNames[zoneI])];
rpm_ = readScalar(dict_.subDict("rpm").lookup(zoneNames[zoneI]));
Info<< "rpm:" << rpm_<<nl<<endl;
forAll (cellAddr, cellI)
{
const cell& curCell = c[cellAddr[cellI]];
forAll (curCell, faceI)
{
const face& curFace = f[curCell[faceI]];
forAll (curFace, pointI)
{
//The rotation data is saved within the cell data. For
//non-rotating regions rpm is zero,so mesh movement is
//also zero. The conversion of rotational speed
movingPoints[curFace[pointI]] =
vector(0,rpm_*360.0*time().deltaT().value()/60.0, 0);
}
}
}
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// Construct from components
Foam::turboFvMesh::turboFvMesh
(
const IOobject& io
)
:
dynamicFvMesh(io),
dict_
(
IOdictionary
(
IOobject
(
"dynamicMeshDict",
time().constant(),
*this,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
).subDict(typeName + "Coeffs")
),
csPtr_
(
coordinateSystem::New
(
"coordinateSystem",
dict_.subDict("coordinateSystem")
)
),
movingPointsPtr_(NULL)
{
addZonesAndModifiers();
Info<< "Turbomachine Mixer mesh:" << nl
<< " origin: " << cs().origin() << nl
<< " axis : " << cs().axis() << endl;
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::turboFvMesh::~turboFvMesh()
{
deleteDemandDrivenData(movingPointsPtr_);
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// Return moving points mask
const Foam::vectorField& Foam::turboFvMesh::movingPoints() const
{
if (!movingPointsPtr_)
{
calcMovingPoints();
}
return *movingPointsPtr_;
}
bool Foam::turboFvMesh::update()
{
movePoints
(
csPtr_->globalPosition
(
csPtr_->localPosition(allPoints()) + movingPoints()
)
);
// The mesh is not morphing
return false;
}
// ************************************************************************* //

View file

@ -0,0 +1,131 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2006-7 H. Jasak All rights reserved
\\/ 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
turboFvMesh
Description
Simple mixer mesh using an overlapGGI interface
Author
Hrvoje Jasak, Wikki Ltd. All rights reserved.
Fethi Tekin, All rights reserved.
SourceFiles
turboFvMesh.C
\*---------------------------------------------------------------------------*/
#ifndef turboFvMesh_H
#define turboFvMesh_H
#include "dynamicFvMesh.H"
#include "cylindricalCS.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class turboFvMesh Declaration
\*---------------------------------------------------------------------------*/
class turboFvMesh
:
public dynamicFvMesh
{
// Private data
//- Motion dictionary
dictionary dict_;
//- Coordinate system
autoPtr<coordinateSystem> csPtr_;
// - Rotational speed in rotations per minute (rpm)
mutable scalar rpm_;
//- Markup field for points.
mutable vectorField* movingPointsPtr_;
// Private Member Functions
//- Disallow default bitwise copy construct
turboFvMesh(const turboFvMesh&);
//- Disallow default bitwise assignment
void operator=(const turboFvMesh&);
//- Add mixer zones
void addZonesAndModifiers();
//- Calculate moving Points
void calcMovingPoints() const;
//- Return moving points
const vectorField& movingPoints() const;
public:
//- Runtime type information
TypeName("turboFvMesh");
// Constructors
//- Construct from IOobject
explicit turboFvMesh(const IOobject& io);
// Destructor
virtual ~turboFvMesh();
// Member Functions
//- Return coordinate system
const coordinateSystem& cs() const
{
return csPtr_();
}
//- Update the mesh for both mesh motion
virtual bool update();
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -12,13 +12,13 @@ viscoelasticLaws/FENE-CR/FENE_CR.C
viscoelasticLaws/FENE-P/FENE_P.C viscoelasticLaws/FENE-P/FENE_P.C
viscoelasticLaws/XPP_SE/XPP_SE.C viscoelasticLaws/XPP_SE/XPP_SE.C
viscoelasticLaws/XPP_DE/XPP_DE.C viscoelasticLaws/XPP_DE/XPP_DE.C
viscoelasticLaws/PP/PP.C
viscoelasticLaws/DCPP/DCPP.C viscoelasticLaws/DCPP/DCPP.C
viscoelasticLaws/Feta-PTT/Feta_PTT.C viscoelasticLaws/Feta-PTT/Feta_PTT.C
viscoelasticLaws/Leonov/Leonov.C viscoelasticLaws/Leonov/Leonov.C
viscoelasticLaws/White-Metzner/White-Metzner_Larson/White_Metzner_Larson.C viscoelasticLaws/WhiteMetzner/WhiteMetznerLarson/WhiteMetznerLarson.C
viscoelasticLaws/White-Metzner/White-Metzner_CM/White_Metzner_CM.C viscoelasticLaws/WhiteMetzner/WhiteMetznerCross/WhiteMetznerCross.C
viscoelasticLaws/White-Metzner/White-Metzner_CY/White_Metzner_CY.C viscoelasticLaws/WhiteMetzner/WhiteMetznerCarreauYasuda/WhiteMetznerCarreauYasuda.C
viscoelasticLaws/S_MDCPP/S_MDCPP.C
viscoelasticLaws/multiMode/multiMode.C viscoelasticLaws/multiMode/multiMode.C

View file

@ -27,20 +27,18 @@ License
#include "DCPP.H" #include "DCPP.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(DCPP, 0);
addToRunTimeSelectionTable(viscoelasticLaw, DCPP, dictionary);
}
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(DCPP, 0);
addToRunTimeSelectionTable(viscoelasticLaw, DCPP, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::DCPP::DCPP
DCPP::DCPP
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -117,25 +115,23 @@ DCPP::DCPP
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> DCPP::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::DCPP::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_;
dimensionedScalar etaPEff = etaP_;
return return
( (
fvc::div(tau_/rho_, "div(tau)") fvc::div(tau_/rho_, "div(tau)")
- fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)") - fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)")
+ fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)") + fvm::laplacian((etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)")
); );
} }
void DCPP::correct() void Foam::DCPP::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Upper convected derivate term // Upper convected derivate term
volTensorField Cupper = S_ & L; volTensorField Cupper = S_ & L;
@ -144,48 +140,42 @@ void DCPP::correct()
volTensorField Clower = L & S_; volTensorField Clower = L & S_;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Evolution of orientation // Evolution of orientation
tmp<fvSymmTensorMatrix> SEqn fvSymmTensorMatrix SEqn
( (
fvm::ddt(S_) fvm::ddt(S_)
+ fvm::div(phi(), S_) + fvm::div(phi(), S_)
== ==
(1 - zeta_/2)*twoSymm( Cupper ) (1 - zeta_/2)*twoSymm(Cupper)
- (zeta_/2)*twoSymm( Clower ) - (zeta_/2)*twoSymm(Clower)
- (1 - zeta_)*fvm::Sp( (twoD && S_) , S_ ) - (1 - zeta_)*fvm::Sp((twoD && S_), S_)
- fvm::Sp(( 1/lambdaOb_/Foam::sqr(Lambda_) ), S_ ) - fvm::Sp(1/lambdaOb_/Foam::sqr(Lambda_), S_)
+ 1/lambdaOb_/Foam::sqr(Lambda_)/3*I_ + 1/lambdaOb_/Foam::sqr(Lambda_)/3*I_
); );
SEqn().relax(); SEqn.relax();
solve(SEqn); SEqn.solve();
// Evolution of the backbone stretch // Evolution of the backbone stretch
tmp<fvScalarMatrix> LambdaEqn fvScalarMatrix lambdaEqn
( (
fvm::ddt(Lambda_) fvm::ddt(Lambda_)
+ fvm::div(phi(), Lambda_) + fvm::div(phi(), Lambda_)
== ==
fvm::Sp( (twoD && S_) / 2 , Lambda_ ) fvm::Sp((twoD && S_)/2 , Lambda_)
- fvm::Sp( Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_ , Lambda_ ) - fvm::Sp(Foam::exp(2/q_*(Lambda_ - 1))/lambdaOs_ , Lambda_)
+ Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_ + Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_
); );
LambdaEqn().relax(); lambdaEqn.relax();
solve(LambdaEqn); lambdaEqn.solve();
// Viscoelastic stress // Viscoelastic stress
tau_ = etaP_/lambdaOb_/(1 - zeta_) * (3*Foam::sqr(Lambda_)*S_ - I_); tau_ = etaP_/lambdaOb_/(1 - zeta_) * (3*Foam::sqr(Lambda_)*S_ - I_);
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -62,7 +62,7 @@ class DCPP
volSymmTensorField S_; volSymmTensorField S_;
//- Evolution of the backbone stretch //- Evolution of the backbone stretch
volScalarField Lambda_; volScalarField Lambda_;
//- Transported viscoelastic stress //- Transported viscoelastic stress
volSymmTensorField tau_; volSymmTensorField tau_;
@ -91,7 +91,7 @@ class DCPP
//- Relaxation time for the stretch //- Relaxation time for the stretch
dimensionedScalar lambdaOs_; dimensionedScalar lambdaOs_;
//- Amount of arms at the end of a backbone //- Amount of arms at the end of a backbone
dimensionedScalar q_; dimensionedScalar q_;

View file

@ -27,20 +27,17 @@ License
#include "EPTT.H" #include "EPTT.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(EPTT, 0);
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // addToRunTimeSelectionTable(viscoelasticLaw, EPTT, dictionary);
}
defineTypeNameAndDebug(EPTT, 0);
addToRunTimeSelectionTable(viscoelasticLaw, EPTT, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::EPTT::EPTT
EPTT::EPTT
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -72,7 +69,7 @@ EPTT::EPTT
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> EPTT::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::EPTT::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_; dimensionedScalar etaPEff = etaP_;
@ -85,37 +82,36 @@ tmp<fvVectorMatrix> EPTT::divTau(volVectorField& U) const
} }
void EPTT::correct() void Foam::EPTT::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaP_ / lambda_ * twoD etaP_/lambda_*twoD
+ twoSymm( C ) + twoSymm(C)
- zeta_ / 2 * ( (tau_ & twoD) + (twoD & tau_) ) - zeta_/2*((tau_ & twoD) + (twoD & tau_))
- fvm::Sp( (1/lambda_) * Foam::exp( epsilon_ * lambda_ / etaP_ * tr(tau_) ) , tau_ ) - fvm::Sp
(
(1/lambda_)*Foam::exp(epsilon_*lambda_/etaP_*tr(tau_)),
tau_
)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -27,20 +27,18 @@ License
#include "FENE_CR.H" #include "FENE_CR.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(FENE_CR, 0);
addToRunTimeSelectionTable(viscoelasticLaw, FENE_CR, dictionary);
}
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(FENE_CR, 0);
addToRunTimeSelectionTable(viscoelasticLaw, FENE_CR, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::FENE_CR::FENE_CR
FENE_CR::FENE_CR
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -71,7 +69,7 @@ FENE_CR::FENE_CR
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> FENE_CR::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::FENE_CR::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_; dimensionedScalar etaPEff = etaP_;
@ -84,36 +82,31 @@ tmp<fvVectorMatrix> FENE_CR::divTau(volVectorField& U) const
} }
void FENE_CR::correct() void Foam::FENE_CR::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
((L2_ / lambda_ + tr(tau_)/etaP_) / (L2_ - 3.0) ) * etaP_ * twoD ((L2_ / lambda_ + tr(tau_)/etaP_)/(L2_ - 3.0))*etaP_*twoD
+ twoSymm( C ) + twoSymm(C)
- fvm::Sp( (L2_ / lambda_ + tr(tau_)/etaP_) / (L2_ - 3.0), tau_ ) - fvm::Sp((L2_/lambda_ + tr(tau_)/etaP_)/(L2_ - 3), tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -72,7 +72,7 @@ class FENE_CR
//- Zero shear rate polymer viscosity //- Zero shear rate polymer viscosity
dimensionedScalar etaP_; dimensionedScalar etaP_;
//- Molecular adimensional extensibility //- Molecular adimensional extensibility
dimensionedScalar L2_; dimensionedScalar L2_;
//- Relaxation time //- Relaxation time
@ -118,7 +118,7 @@ public:
virtual tmp<volSymmTensorField> tau() const virtual tmp<volSymmTensorField> tau() const
{ {
return tau_; return tau_;
} }
//- Return the coupling term for the momentum equation //- Return the coupling term for the momentum equation
virtual tmp<fvVectorMatrix> divTau(volVectorField& U) const; virtual tmp<fvVectorMatrix> divTau(volVectorField& U) const;

View file

@ -27,20 +27,18 @@ License
#include "FENE_P.H" #include "FENE_P.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(FENE_P, 0);
addToRunTimeSelectionTable(viscoelasticLaw, FENE_P, dictionary);
}
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(FENE_P, 0);
addToRunTimeSelectionTable(viscoelasticLaw, FENE_P, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::FENE_P::FENE_P
FENE_P::FENE_P
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -71,10 +69,9 @@ FENE_P::FENE_P
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> FENE_P::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::FENE_P::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_;
dimensionedScalar etaPEff = etaP_;
return return
( (
@ -86,36 +83,35 @@ tmp<fvVectorMatrix> FENE_P::divTau(volVectorField& U) const
} }
void FENE_P::correct() void Foam::FENE_P::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
( 1 / lambda_ / (1 - 3/L2_) ) * etaP_ * twoD (1/lambda_/(1 - 3/L2_))*etaP_*twoD
+ twoSymm( C ) + twoSymm(C)
- fvm::Sp( 1 / lambda_ + ( 3 / lambda_ / (1 - 3/L2_) + tr(tau_)/etaP_ ) / (L2_), tau_ ) - fvm::Sp
(
1/lambda_ + (3/lambda_/(1 - 3/L2_) + tr(tau_)/etaP_)/(L2_),
tau_
)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -27,20 +27,17 @@ License
#include "Feta_PTT.H" #include "Feta_PTT.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(Feta_PTT, 0);
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // addToRunTimeSelectionTable(viscoelasticLaw, Feta_PTT, dictionary);
}
defineTypeNameAndDebug(Feta_PTT, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Feta_PTT, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::Feta_PTT::Feta_PTT
Feta_PTT::Feta_PTT
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -80,7 +77,11 @@ Feta_PTT::Feta_PTT
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
etaP_/( Foam::pow(scalar(1) + A_*Foam::pow(0.5*( Foam::sqr(tr(tau_)) - tr(tau_ & tau_) ) * Foam::sqr(lambda_) / Foam::sqr(etaP_), a_), b_) ) etaP_/
(
Foam::pow(scalar(1) + A_*Foam::pow(0.5*( Foam::sqr(tr(tau_))
- tr(tau_ & tau_))*Foam::sqr(lambda_)/Foam::sqr(etaP_), a_), b_)
)
), ),
lambdaEff_ lambdaEff_
( (
@ -92,17 +93,17 @@ Feta_PTT::Feta_PTT
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
lambda_ / (scalar(1) + epsilon_*lambda_*tr(tau_) / etaP_) lambda_ / (scalar(1) + epsilon_*lambda_*tr(tau_) / etaP_)
) )
{} {}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> Feta_PTT::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::Feta_PTT::divTau(volVectorField& U) const
{ {
// Need to be equal to old time step (a constant)
dimensionedScalar etaPEff = etaP_; // need to be equal to old time step (a constant) dimensionedScalar etaPEff = etaP_;
return return
( (
@ -110,46 +111,45 @@ tmp<fvVectorMatrix> Feta_PTT::divTau(volVectorField& U) const
- fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)") - fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)")
+ fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)") + fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)")
); );
} }
void Feta_PTT::correct() void Foam::Feta_PTT::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// etaP effective // etaP effective
etaPEff_ = etaP_/( Foam::pow(scalar(1) + A_*Foam::pow(0.5*( Foam::sqr(tr(tau_)) - tr(tau_ & tau_) ) * Foam::sqr(lambda_) / Foam::sqr(etaP_), a_), b_) ); etaPEff_ = etaP_/
(
Foam::pow(scalar(1) + A_*Foam::pow(0.5*( Foam::sqr(tr(tau_))
- tr(tau_ & tau_)) * Foam::sqr(lambda_)/Foam::sqr(etaP_), a_), b_)
);
// lambda effective // lambda effective
lambdaEff_ = (lambda_ / (scalar(1) + epsilon_*lambda_*tr(tau_) / etaP_) ); lambdaEff_ = lambda_/(scalar(1) + epsilon_*lambda_*tr(tau_)/etaP_);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaPEff_ / lambdaEff_ * twoD etaPEff_/lambdaEff_*twoD
+ twoSymm( C ) + twoSymm(C)
- zeta_ / 2 * ( (tau_ & twoD) + (twoD & tau_) ) - zeta_/2*((tau_ & twoD) + (twoD & tau_))
- fvm::Sp( epsilon_ / etaPEff_ * tr(tau_) + 1/lambdaEff_, tau_ ) - fvm::Sp(epsilon_/etaPEff_*tr(tau_) + 1/lambdaEff_, tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -89,11 +89,13 @@ class Feta_PTT
dimensionedScalar b_; dimensionedScalar b_;
//- Effective zero shear rate polymer viscosity and relaxation time //- Effective zero shear rate polymer viscosity
volScalarField etaPEff_; volScalarField etaPEff_;
//- Relaxation time
volScalarField lambdaEff_; volScalarField lambdaEff_;
// Private Member Functions // Private Member Functions
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct

View file

@ -27,20 +27,18 @@ License
#include "Giesekus.H" #include "Giesekus.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(Giesekus, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Giesekus, dictionary);
}
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Giesekus, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Giesekus, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::Giesekus::Giesekus
Giesekus::Giesekus
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -71,7 +69,7 @@ Giesekus::Giesekus
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> Giesekus::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::Giesekus::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_; dimensionedScalar etaPEff = etaP_;
@ -84,7 +82,7 @@ tmp<fvVectorMatrix> Giesekus::divTau(volVectorField& U) const
} }
void Giesekus::correct() void Foam::Giesekus::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad(U()); volTensorField L = fvc::grad(U());
@ -96,25 +94,21 @@ void Giesekus::correct()
volSymmTensorField twoD = twoSymm(L); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaP_ / lambda_ * twoD etaP_/lambda_*twoD
+ twoSymm( C ) + twoSymm(C)
- (alpha_ / etaP_) * ( tau_ & tau_) - (alpha_/etaP_)*(tau_ & tau_)
- fvm::Sp(1/lambda_, tau_ ) - fvm::Sp(1/lambda_, tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -116,7 +116,7 @@ public:
virtual tmp<volSymmTensorField> tau() const virtual tmp<volSymmTensorField> tau() const
{ {
return tau_; return tau_;
} }
//- Return the coupling term for the momentum equation //- Return the coupling term for the momentum equation
virtual tmp<fvVectorMatrix> divTau(volVectorField& U) const; virtual tmp<fvVectorMatrix> divTau(volVectorField& U) const;

View file

@ -27,20 +27,17 @@ License
#include "LPTT.H" #include "LPTT.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(LPTT, 0);
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // addToRunTimeSelectionTable(viscoelasticLaw, LPTT, dictionary);
}
defineTypeNameAndDebug(LPTT, 0);
addToRunTimeSelectionTable(viscoelasticLaw, LPTT, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::LPTT::LPTT
LPTT::LPTT
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -72,11 +69,10 @@ LPTT::LPTT
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> LPTT::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::LPTT::divTau(volVectorField& U) const
{ {
// dimensionedScalar etaPEff = (1 + 1/epsilon_)*etaP_; // dimensionedScalar etaPEff = (1 + 1/epsilon_)*etaP_;
dimensionedScalar etaPEff = etaP_; dimensionedScalar etaPEff = etaP_;
return return
( (
@ -88,37 +84,32 @@ tmp<fvVectorMatrix> LPTT::divTau(volVectorField& U) const
} }
void LPTT::correct() void Foam::LPTT::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation
// Stress transport equation fvSymmTensorMatrix tauEqn
tmp<fvSymmTensorMatrix> tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaP_ / lambda_ * twoD etaP_/lambda_*twoD
+ twoSymm( C ) + twoSymm(C)
- zeta_ / 2 * ( (tau_ & twoD) + (twoD & tau_) ) - zeta_/2*((tau_ & twoD) + (twoD & tau_))
- fvm::Sp( epsilon_ / etaP_ * tr(tau_) + 1/lambda_, tau_ ) - fvm::Sp(epsilon_/etaP_*tr(tau_) + 1/lambda_, tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -27,20 +27,17 @@ License
#include "Leonov.H" #include "Leonov.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(Leonov, 0);
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // addToRunTimeSelectionTable(viscoelasticLaw, Leonov, dictionary);
}
defineTypeNameAndDebug(Leonov, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Leonov, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::Leonov::Leonov
Leonov::Leonov
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -102,10 +99,9 @@ Leonov::Leonov
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> Leonov::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::Leonov::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_;
dimensionedScalar etaPEff = etaP_;
return return
( (
@ -116,40 +112,43 @@ tmp<fvVectorMatrix> Leonov::divTau(volVectorField& U) const
} }
void Leonov::correct() void Foam::Leonov::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = sigma_ & L; volTensorField C = sigma_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> sigmaEqn fvSymmTensorMatrix sigmaEqn
( (
fvm::ddt(sigma_) fvm::ddt(sigma_)
+ fvm::div(phi(), sigma_) + fvm::div(phi(), sigma_)
== ==
twoSymm( C ) twoSymm(C)
- 1/etaP_/2*( (sigma_ & sigma_) - Foam::pow( (etaP_/lambda_),2)*I_ ) - 1/etaP_/2*((sigma_ & sigma_) - Foam::pow((etaP_/lambda_), 2)*I_)
+ fvm::Sp(1/etaP_/6*( tr(sigma_) - Foam::pow(etaP_/lambda_,2) * tr(inv(sigma_)) ), sigma_) + fvm::Sp
(
1/etaP_/6*
(
tr(sigma_)
- Foam::pow(etaP_/lambda_,2) * tr(inv(sigma_))
),
sigma_
)
); );
sigmaEqn().relax(); sigmaEqn.relax();
solve(sigmaEqn); sigmaEqn.solve();
// Viscoelastic stress // Viscoelastic stress
tau_ = sigma_ - etaP_/lambda_ * I_; tau_ = sigma_ - etaP_/lambda_*I_;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -27,20 +27,18 @@ License
#include "Maxwell.H" #include "Maxwell.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(Maxwell, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Maxwell, dictionary);
}
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Maxwell, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Maxwell, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::Maxwell::Maxwell
Maxwell::Maxwell
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -70,10 +68,9 @@ Maxwell::Maxwell
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> Maxwell::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::Maxwell::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_;
dimensionedScalar etaPEff = etaP_;
return return
( (
@ -85,32 +82,26 @@ tmp<fvVectorMatrix> Maxwell::divTau(volVectorField& U) const
} }
void Maxwell::correct() void Foam::Maxwell::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
== ==
etaP_ / lambda_ * twoD etaP_/lambda_*twoD
- fvm::Sp( 1/lambda_, tau_ ) - fvm::Sp( 1/lambda_, tau_ )
); );
// tauEqn().relax(); // to see tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -27,20 +27,18 @@ License
#include "Oldroyd_B.H" #include "Oldroyd_B.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(Oldroyd_B, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Oldroyd_B, dictionary);
}
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(Oldroyd_B, 0);
addToRunTimeSelectionTable(viscoelasticLaw, Oldroyd_B, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::Oldroyd_B::Oldroyd_B
Oldroyd_B::Oldroyd_B
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -70,10 +68,10 @@ Oldroyd_B::Oldroyd_B
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> Oldroyd_B::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix>
Foam::Oldroyd_B::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_;
dimensionedScalar etaPEff = etaP_;
return return
( (
@ -81,40 +79,34 @@ tmp<fvVectorMatrix> Oldroyd_B::divTau(volVectorField& U) const
- fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)") - fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)")
+ fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)") + fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)")
); );
} }
void Oldroyd_B::correct() void Foam::Oldroyd_B::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaP_ / lambda_ * twoD etaP_/lambda_*twoD
+ twoSymm( C ) + twoSymm(C)
- fvm::Sp( 1/lambda_, tau_ ) - fvm::Sp(1/lambda_, tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -24,23 +24,20 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "PP.H" #include "S_MDCPP.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(PP, 0); namespace Foam
addToRunTimeSelectionTable(viscoelasticLaw, PP, dictionary); {
defineTypeNameAndDebug(S_MDCPP, 0);
addToRunTimeSelectionTable(viscoelasticLaw, S_MDCPP, dictionary);
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::S_MDCPP::S_MDCPP
PP::PP
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -49,30 +46,6 @@ PP::PP
) )
: :
viscoelasticLaw(name, U, phi), viscoelasticLaw(name, U, phi),
S_
(
IOobject
(
"S" + name,
U.time().timeName(),
U.mesh(),
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
U.mesh()
),
Lambda_
(
IOobject
(
"Lambda" + name,
U.time().timeName(),
U.mesh(),
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
U.mesh()
),
tau_ tau_
( (
IOobject IOobject
@ -80,16 +53,10 @@ PP::PP
"tau" + name, "tau" + name,
U.time().timeName(), U.time().timeName(),
U.mesh(), U.mesh(),
IOobject::NO_READ, IOobject::MUST_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
U.mesh(), U.mesh()
dimensionedSymmTensor
(
"zero",
dimensionSet(1, -1, -2, 0, 0, 0, 0),
symmTensor::zero
)
), ),
I_ I_
( (
@ -108,6 +75,7 @@ PP::PP
rho_(dict.lookup("rho")), rho_(dict.lookup("rho")),
etaS_(dict.lookup("etaS")), etaS_(dict.lookup("etaS")),
etaP_(dict.lookup("etaP")), etaP_(dict.lookup("etaP")),
zeta_(dict.lookup("zeta")),
lambdaOb_(dict.lookup("lambdaOb")), lambdaOb_(dict.lookup("lambdaOb")),
lambdaOs_(dict.lookup("lambdaOs")), lambdaOs_(dict.lookup("lambdaOs")),
q_(dict.lookup("q")) q_(dict.lookup("q"))
@ -116,9 +84,8 @@ PP::PP
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> PP::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::S_MDCPP::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_; dimensionedScalar etaPEff = etaP_;
return return
@ -131,68 +98,46 @@ tmp<fvVectorMatrix> PP::divTau(volVectorField& U) const
} }
void PP::correct() void Foam::S_MDCPP::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = S_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Lambda (Backbone stretch)
volScalarField Lambda =
Foam::sqrt(1 + tr(tau_)*lambdaOb_*(1 - zeta_)/3/etaP_);
// Evolution of orientation // Auxiliary field
tmp<fvSymmTensorMatrix> SEqn volScalarField aux = Foam::exp( 2/q_*(Lambda - 1));
// Extra function
volScalarField fTau =
aux*(2*lambdaOb_/lambdaOs_*(1 - 1/Lambda) + 1/Foam::sqr(Lambda));
// Stress transport equation
fvSymmTensorMatrix tauEqn
( (
fvm::ddt(S_) fvm::ddt(tau_)
+ fvm::div(phi(), S_) + fvm::div(phi(), tau_)
== ==
twoSymm( C ) etaP_/lambdaOb_*twoD
- fvm::Sp( 1/lambdaOb_, S_ ) + twoSymm(C)
+ 1/3/lambdaOb_*I_ - zeta_/2*((tau_ & twoD) + (twoD & tau_))
- fvm::Sp(1/lambdaOb_*fTau, tau_)
); - (
1/lambdaOb_*( etaP_/lambdaOb_/(1 - zeta_)*(fTau - aux)*I_)
SEqn().relax();
solve(SEqn);
// Evolution of the backbone stretch
tmp<fvScalarMatrix> LambdaEqn
(
fvm::ddt(Lambda_)
+ fvm::div(phi(), Lambda_)
==
fvm::Sp( (twoD && (S_/tr(S_)) ) / 2 , Lambda_ )
- fvm::Sp( Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_ , Lambda_ )
+ Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_
);
LambdaEqn().relax();
solve(LambdaEqn);
// Pom Pom condition:
Lambda_.max
(
dimensionedScalar
(
"zero",
Lambda_.dimensions(),
scalar( q_.value() )
) )
); );
// Viscoelastic stress tauEqn.relax();
tau_ = etaP_/lambdaOb_ * (3*Foam::sqr(Lambda_)*S_/tr(S_) - I_); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -0,0 +1,147 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ 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
S_MDCPP
Description
S-MDCPP non linear viscoelastic fluid model:
Wei Wang, Xikui Li and Xianhong Han,
Journal of Non-Newtonian Fluid Mechanics, 165,1480-1493, 2010.
Author
Jovani L. Favero. All rights reserved
SourceFiles
S_MDCPP.C
\*---------------------------------------------------------------------------*/
#ifndef S_MDCPP_H
#define S_MDCPP_H
#include "viscoelasticLaw.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class S_MDCPP Declaration
\*---------------------------------------------------------------------------*/
class S_MDCPP
:
public viscoelasticLaw
{
// Private data
//- Transported viscoelastic stress
volSymmTensorField tau_;
//- Identity tensor
dimensionedSymmTensor I_;
// Model constants
//- Density
dimensionedScalar rho_;
//- Solvent viscosity
dimensionedScalar etaS_;
//- Zero shear rate polymer viscosity
dimensionedScalar etaP_;
//- Material parameter, defining the amount of anisotropy
dimensionedScalar zeta_;
//- Relaxation time of the backbone tube orientation
dimensionedScalar lambdaOb_;
//- Relaxation time for the stretch
dimensionedScalar lambdaOs_;
//- Amount of arms at the end of a backbone
dimensionedScalar q_;
// Private Member Functions
//- Disallow default bitwise copy construct
S_MDCPP(const S_MDCPP&);
//- Disallow default bitwise assignment
void operator=(const S_MDCPP&);
public:
//- Runtime type information
TypeName("S-MDCPP");
// Constructors
//- Construct from components
S_MDCPP
(
const word& name,
const volVectorField& U,
const surfaceScalarField& phi,
const dictionary& dict
);
// Destructor
virtual ~S_MDCPP()
{}
// Member Functions
//- Return the viscoelastic stress tensor
virtual tmp<volSymmTensorField> tau() const
{
return tau_;
}
//- Return the coupling term for the momentum equation
virtual tmp<fvVectorMatrix> divTau(volVectorField& U) const;
//- Correct the viscoelastic stress
virtual void correct();
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,144 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ 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 "S_MDCPP.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam
{
defineTypeNameAndDebug(S_MDCPP, 0);
addToRunTimeSelectionTable(viscoelasticLaw, S_MDCPP, dictionary);
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::S_MDCPP::S_MDCPP
(
const word& name,
const volVectorField& U,
const surfaceScalarField& phi,
const dictionary& dict
)
:
viscoelasticLaw(name, U, phi),
tau_
(
IOobject
(
"tau" + name,
U.time().timeName(),
U.mesh(),
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
U.mesh()
),
I_
(
dimensionedSymmTensor
(
"I",
dimensionSet(0, 0, 0, 0, 0, 0, 0),
symmTensor
(
1, 0, 0,
1, 0,
1
)
)
),
rho_(dict.lookup("rho")),
etaS_(dict.lookup("etaS")),
etaP_(dict.lookup("etaP")),
zeta_(dict.lookup("zeta")),
lambdaOb_(dict.lookup("lambdaOb")),
lambdaOs_(dict.lookup("lambdaOs")),
q_(dict.lookup("q"))
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::tmp<Foam::fvVectorMatrix> Foam::S_MDCPP::divTau(volVectorField& U) const
{
dimensionedScalar etaPEff = etaP_;
return
(
fvc::div(tau_/rho_, "div(tau)")
- fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)")
+ fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)")
);
}
void Foam::S_MDCPP::correct()
{
// Velocity gradient tensor
volTensorField L = fvc::grad(U());
// Convected derivate term
volTensorField C = tau_ & L;
// Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm(L);
// Lambda (Backbone stretch)
volScalarField Lambda =
Foam::sqrt(1 + tr(tau_)*lambdaOb_*(1 - zeta_)/3/etaP_);
// Auxiliary field
volScalarField aux = Foam::exp( 2/q_*(Lambda - 1));
// Extra function
volScalarField fTau =
aux*(2*lambdaOb_/lambdaOs_*(1 - 1/Lambda) + 1/Foam::sqr(Lambda));
// Stress transport equation
fvSymmTensorMatrix tauEqn
(
fvm::ddt(tau_)
+ fvm::div(phi(), tau_)
==
etaP_/lambdaOb_*twoD
+ twoSymm(C)
- zeta_/2*((tau_ & twoD) + (twoD & tau_))
- fvm::Sp(1/lambdaOb_*fTau, tau_)
- (
1/lambdaOb_*(etaP_/lambdaOb_/(1 - zeta_)*(fTau - aux)*I_)
)
);
tauEqn.relax();
tauEqn.solve();
}
// ************************************************************************* //

View file

@ -23,22 +23,23 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class Class
PP S-MDCPP
Description Description
Pom-Pom (PP) non linear viscoelastic fluid model. S-MDCPP non linear viscoelastic fluid model:
(McLeish,T.C.B., Larson R.G., J. Rheol. 42, 81, 1998) Wei Wang, Xikui Li and Xianhong Han,
Journal of Non-Newtonian Fluid Mechanics, 165,1480-1493, 2010.
Author Author
Jovani L. Favero. All rights reserved Jovani L. Favero. All rights reserved
SourceFiles SourceFiles
PP.C S_MDCPP.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef PP_H #ifndef S_MDCP_H
#define PP_H #define S_MDCP_H
#include "viscoelasticLaw.H" #include "viscoelasticLaw.H"
@ -48,32 +49,25 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class PP Declaration Class S_MDCPP Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class PP class S_MDCPP
: :
public viscoelasticLaw public viscoelasticLaw
{ {
// Private data // Private data
//- Evolution of orientation //- Transported viscoelastic stress
volSymmTensorField S_;
//- Evolution of the backbone stretch
volScalarField Lambda_;
//- Transported viscoelastic stress
volSymmTensorField tau_; volSymmTensorField tau_;
//- Identity tensor //- Identity tensor
dimensionedSymmTensor I_; dimensionedSymmTensor I_;
// Model constants // Model constants
//- Density //- Density
dimensionedScalar rho_; dimensionedScalar rho_;
//- Solvent viscosity //- Solvent viscosity
dimensionedScalar etaS_; dimensionedScalar etaS_;
@ -81,6 +75,9 @@ class PP
//- Zero shear rate polymer viscosity //- Zero shear rate polymer viscosity
dimensionedScalar etaP_; dimensionedScalar etaP_;
//- Material parameter, defining the amount of anisotropy
dimensionedScalar zeta_;
//- Relaxation time of the backbone tube orientation //- Relaxation time of the backbone tube orientation
dimensionedScalar lambdaOb_; dimensionedScalar lambdaOb_;
@ -94,21 +91,21 @@ class PP
// Private Member Functions // Private Member Functions
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
PP(const PP&); S_MDCPP(const S_MDCPP&);
//- Disallow default bitwise assignment //- Disallow default bitwise assignment
void operator=(const PP&); void operator=(const S_MDCPP&);
public: public:
//- Runtime type information //- Runtime type information
TypeName("PP"); TypeName("S_MDCPP");
// Constructors // Constructors
//- Construct from components //- Construct from components
PP S_MDCPP
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -119,7 +116,7 @@ public:
// Destructor // Destructor
virtual ~PP() virtual ~S_MDCPP()
{} {}

View file

@ -24,23 +24,27 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "White_Metzner_CY.H" #include "WhiteMetznerCarreauYasuda.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // defineTypeNameAndDebug(WhiteMetznerCarreauYasuda, 0);
addToRunTimeSelectionTable
(
viscoelasticLaw,
WhiteMetznerCarreauYasuda,
dictionary
);
}
defineTypeNameAndDebug(White_Metzner_CY, 0);
addToRunTimeSelectionTable(viscoelasticLaw, White_Metzner_CY, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::WhiteMetznerCarreauYasuda::WhiteMetznerCarreauYasuda
White_Metzner_CY::White_Metzner_CY
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -76,10 +80,11 @@ White_Metzner_CY::White_Metzner_CY
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> White_Metzner_CY::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix>
Foam::WhiteMetznerCarreauYasuda::divTau(volVectorField& U) const
{ {
// Need to be equal to old time step (a constant)
dimensionedScalar etaPEff = etaP_; // need to be equal to old time step (a constant) dimensionedScalar etaPEff = etaP_;
return return
( (
@ -87,45 +92,43 @@ tmp<fvVectorMatrix> White_Metzner_CY::divTau(volVectorField& U) const
- fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)") - fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)")
+ fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)") + fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)")
); );
} }
void White_Metzner_CY::correct() void Foam::WhiteMetznerCarreauYasuda::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Effective viscosity and relaxation time // Effective viscosity and relaxation time
volScalarField etaPValue = etaP_ * Foam::pow( 1 + Foam::pow( K_* sqrt(2.0)*mag(symm(L)),a_), (m_- 1)/a_ ); volScalarField etaPValue = etaP_*
volScalarField lambdaValue = lambda_ * Foam::pow( 1 + Foam::pow( L_* sqrt(2.0)*mag(symm(L)),b_), (n_- 1)/b_ ); Foam::pow(1 + Foam::pow(K_* sqrt(2.0)*mag(symm(L)),a_), (m_- 1)/a_);
volScalarField lambdaValue = lambda_*
Foam::pow(1 + Foam::pow( L_* sqrt(2.0)*mag(symm(L)),b_), (n_- 1)/b_);
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaPValue / lambdaValue * twoD etaPValue/lambdaValue*twoD
+ twoSymm( C ) + twoSymm(C)
- fvm::Sp( 1/lambdaValue, tau_ ) - fvm::Sp(1/lambdaValue, tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -23,7 +23,7 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class Class
White_Metzner_CY WhiteMetznerCarreauYasuda
Description Description
White-Metzner Carreau-Yasuda Law non linear viscoelastic fluid model White-Metzner Carreau-Yasuda Law non linear viscoelastic fluid model
@ -34,12 +34,12 @@ Author
Jovani L. Favero. All rights reserved Jovani L. Favero. All rights reserved
SourceFiles SourceFiles
White_Metzner_CY.C WhiteMetznerCarreauYasuda.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef White_Metzner_CY_H #ifndef WhiteMetznerCarreauYasuda_H
#define White_Metzner_CY_H #define WhiteMetznerCarreauYasuda_H
#include "viscoelasticLaw.H" #include "viscoelasticLaw.H"
@ -49,10 +49,10 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class White_Metzner_CY Declaration Class WhiteMetznerCarreauYasuda Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class White_Metzner_CY class WhiteMetznerCarreauYasuda
: :
public viscoelasticLaw public viscoelasticLaw
{ {
@ -98,21 +98,21 @@ class White_Metzner_CY
// Private Member Functions // Private Member Functions
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
White_Metzner_CY(const White_Metzner_CY&); WhiteMetznerCarreauYasuda(const WhiteMetznerCarreauYasuda&);
//- Disallow default bitwise assignment //- Disallow default bitwise assignment
void operator=(const White_Metzner_CY&); void operator=(const WhiteMetznerCarreauYasuda&);
public: public:
//- Runtime type information //- Runtime type information
TypeName("White-Metzner_Carreau-Yasuda"); TypeName("WhiteMetznerCarreauYasuda");
// Constructors // Constructors
//- Construct from components //- Construct from components
White_Metzner_CY WhiteMetznerCarreauYasuda
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -123,7 +123,7 @@ public:
// Destructor // Destructor
virtual ~White_Metzner_CY() virtual ~WhiteMetznerCarreauYasuda()
{} {}

View file

@ -24,23 +24,21 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "White_Metzner_CM.H" #include "WhiteMetznerCross.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(White_Metzner_CM, 0); namespace Foam
addToRunTimeSelectionTable(viscoelasticLaw, White_Metzner_CM, dictionary); {
defineTypeNameAndDebug(WhiteMetznerCross, 0);
addToRunTimeSelectionTable(viscoelasticLaw, WhiteMetznerCross, dictionary);
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::WhiteMetznerCross::WhiteMetznerCross
White_Metzner_CM::White_Metzner_CM
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -74,10 +72,11 @@ White_Metzner_CM::White_Metzner_CM
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> White_Metzner_CM::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix>
Foam::WhiteMetznerCross::divTau(volVectorField& U) const
{ {
// Need to be equal to old time step (a constant)
dimensionedScalar etaPEff = etaP_; // need to be equal to old time step (a constant) dimensionedScalar etaPEff = etaP_;
return return
( (
@ -89,40 +88,38 @@ tmp<fvVectorMatrix> White_Metzner_CM::divTau(volVectorField& U) const
} }
void White_Metzner_CM::correct() void Foam::WhiteMetznerCross::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Effective viscosity and relaxation time // Effective viscosity and relaxation time
volScalarField etaPValue = etaP_ / (1 + Foam::pow(K_* sqrt(2.0)*mag(symm(L)), (1 - m_)) ); volScalarField etaPValue = etaP_/
volScalarField lambdaValue = lambda_ / (1 + Foam::pow(L_ * sqrt(2.0)*mag(symm(L)), (1 - n_)) ); (1 + Foam::pow(K_* sqrt(2.0)*mag(symm(L)), (1 - m_)));
// Stress transport equation volScalarField lambdaValue = lambda_/
tmp<fvSymmTensorMatrix> tauEqn (1 + Foam::pow(L_ * sqrt(2.0)*mag(symm(L)), (1 - n_)));
// Stress transport equation
fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaPValue / lambdaValue * twoD etaPValue/lambdaValue*twoD
+ twoSymm( C ) + twoSymm(C)
- fvm::Sp( 1/lambdaValue, tau_ ) - fvm::Sp(1/lambdaValue, tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -23,7 +23,7 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class Class
White_Metzner_CM WhiteMetznerCross
Description Description
White-Metzner Power Law non linear viscoelastic fluid model White-Metzner Power Law non linear viscoelastic fluid model
@ -34,12 +34,12 @@ Author
Jovani L. Favero. All rights reserved Jovani L. Favero. All rights reserved
SourceFiles SourceFiles
White_Metzner_CM.C WhiteMetznerCross.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef White_Metzner_CM_H #ifndef WhiteMetznerCross_H
#define White_Metzner_CM_H #define WhiteMetznerCross_H
#include "viscoelasticLaw.H" #include "viscoelasticLaw.H"
@ -49,10 +49,10 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class White_Metzner_CM Declaration Class WhiteMetznerCross Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class White_Metzner_CM class WhiteMetznerCross
: :
public viscoelasticLaw public viscoelasticLaw
{ {
@ -92,21 +92,21 @@ class White_Metzner_CM
// Private Member Functions // Private Member Functions
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
White_Metzner_CM(const White_Metzner_CM&); WhiteMetznerCross(const WhiteMetznerCross&);
//- Disallow default bitwise assignment //- Disallow default bitwise assignment
void operator=(const White_Metzner_CM&); void operator=(const WhiteMetznerCross&);
public: public:
//- Runtime type information //- Runtime type information
TypeName("White-Metzner_Cross-Model"); TypeName("WhiteMetznerCross");
// Constructors // Constructors
//- Construct from components //- Construct from components
White_Metzner_CM WhiteMetznerCross
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -117,7 +117,7 @@ public:
// Destructor // Destructor
virtual ~White_Metzner_CM() virtual ~WhiteMetznerCross()
{} {}

View file

@ -24,23 +24,25 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "White_Metzner_Larson.H" #include "WhiteMetznerLarson.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(White_Metzner_Larson, 0); namespace Foam
addToRunTimeSelectionTable(viscoelasticLaw, White_Metzner_Larson, dictionary); {
defineTypeNameAndDebug(WhiteMetznerLarson, 0);
addToRunTimeSelectionTable
(
viscoelasticLaw,
WhiteMetznerLarson,
dictionary
);
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::WhiteMetznerLarson::WhiteMetznerLarson
White_Metzner_Larson::White_Metzner_Larson
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -71,10 +73,13 @@ White_Metzner_Larson::White_Metzner_Larson
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> White_Metzner_Larson::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::WhiteMetznerLarson::divTau
(
volVectorField& U
) const
{ {
// Meed to be equal to old time step (a constant)
dimensionedScalar etaPEff = etaP_; // need to be equal to old time step (a constant) dimensionedScalar etaPEff = etaP_;
return return
( (
@ -82,13 +87,11 @@ tmp<fvVectorMatrix> White_Metzner_Larson::divTau(volVectorField& U) const
- fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)") - fvc::laplacian(etaPEff/rho_, U, "laplacian(etaPEff,U)")
+ fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)") + fvm::laplacian( (etaPEff + etaS_)/rho_, U, "laplacian(etaPEff+etaS,U)")
); );
} }
void White_Metzner_Larson::correct() void Foam::WhiteMetznerLarson::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad( U() );
@ -99,23 +102,19 @@ void White_Metzner_Larson::correct()
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm( L );
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaP_ / lambda_ * twoD etaP_/lambda_*twoD
+ twoSymm( C ) + twoSymm(C)
- fvm::Sp( (1 + a_*lambda_* sqrt(2.0)*mag(symm(L)) )/lambda_, tau_ ) - fvm::Sp((1 + a_*lambda_* sqrt(2.0)*mag(symm(L)) )/lambda_, tau_)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -23,7 +23,7 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class Class
White_Metzner_Larson WhiteMetznerLarson
Description Description
White-Metzner non linear viscoelastic fluid model (Larson, R. G., White-Metzner non linear viscoelastic fluid model (Larson, R. G.,
@ -33,12 +33,12 @@ Author
Jovani L. Favero. All rights reserved Jovani L. Favero. All rights reserved
SourceFiles SourceFiles
White_Metzner_Larson.C WhiteMetznerLarson.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef White_Metzner_Larson_H #ifndef WhiteMetznerLarson_H
#define White_Metzner_Larson_H #define WhiteMetznerLarson_H
#include "viscoelasticLaw.H" #include "viscoelasticLaw.H"
@ -48,10 +48,10 @@ namespace Foam
{ {
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class White_Metzner_Larson Declaration Class WhiteMetznerLarson Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class White_Metzner_Larson class WhiteMetznerLarson
: :
public viscoelasticLaw public viscoelasticLaw
{ {
@ -82,21 +82,21 @@ class White_Metzner_Larson
// Private Member Functions // Private Member Functions
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
White_Metzner_Larson(const White_Metzner_Larson&); WhiteMetznerLarson(const WhiteMetznerLarson&);
//- Disallow default bitwise assignment //- Disallow default bitwise assignment
void operator=(const White_Metzner_Larson&); void operator=(const WhiteMetznerLarson&);
public: public:
//- Runtime type information //- Runtime type information
TypeName("White-Metzner_Larson"); TypeName("WhiteMetznerLarson");
// Constructors // Constructors
//- Construct from components //- Construct from components
White_Metzner_Larson WhiteMetznerLarson
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -107,7 +107,7 @@ public:
// Destructor // Destructor
virtual ~White_Metzner_Larson() virtual ~WhiteMetznerLarson()
{} {}

View file

@ -27,20 +27,17 @@ License
#include "XPP_DE.H" #include "XPP_DE.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(XPP_DE, 0);
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // addToRunTimeSelectionTable(viscoelasticLaw, XPP_DE, dictionary);
}
defineTypeNameAndDebug(XPP_DE, 0);
addToRunTimeSelectionTable(viscoelasticLaw, XPP_DE, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::XPP_DE::XPP_DE
XPP_DE::XPP_DE
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -117,9 +114,8 @@ XPP_DE::XPP_DE
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> XPP_DE::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::XPP_DE::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_; dimensionedScalar etaPEff = etaP_;
return return
@ -132,29 +128,33 @@ tmp<fvVectorMatrix> XPP_DE::divTau(volVectorField& U) const
} }
void XPP_DE::correct() void Foam::XPP_DE::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = S_ & L; volTensorField C = S_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Evolution of orientation
// Evolution of orientation
tmp<fvSymmTensorMatrix> SEqn tmp<fvSymmTensorMatrix> SEqn
( (
fvm::ddt(S_) fvm::ddt(S_)
+ fvm::div(phi(), S_) + fvm::div(phi(), S_)
== ==
twoSymm( C ) twoSymm(C)
- fvm::Sp( (twoD && S_) , S_ ) - fvm::Sp((twoD && S_) , S_)
- fvm::Sp( 1/lambdaOb_/Foam::sqr(Lambda_)*(1 - alpha_ - 3*alpha_*Foam::pow(Lambda_, 4)*tr(S_ & S_) ), S_ ) - fvm::Sp
- 1/lambdaOb_/Foam::sqr(Lambda_)*( 3*alpha_*Foam::pow(Lambda_, 4)*(S_ & S_) - (1 - alpha_)/3*I_ ) (
1/lambdaOb_/Foam::sqr(Lambda_)*
(1 - alpha_ - 3*alpha_*Foam::pow(Lambda_, 4)*tr(S_ & S_)),
S_
)
- 1/lambdaOb_/Foam::sqr(Lambda_)*
(3*alpha_*Foam::pow(Lambda_, 4)*(S_ & S_) - (1 - alpha_)/3*I_)
); );
SEqn().relax(); SEqn().relax();
@ -162,28 +162,22 @@ void XPP_DE::correct()
// Evolution of the backbone stretch // Evolution of the backbone stretch
tmp<fvScalarMatrix> LambdaEqn fvScalarMatrix LambdaEqn
( (
fvm::ddt(Lambda_) fvm::ddt(Lambda_)
+ fvm::div(phi(), Lambda_) + fvm::div(phi(), Lambda_)
== ==
fvm::Sp( (twoD && S_) / 2 , Lambda_ ) fvm::Sp((twoD && S_)/2 , Lambda_)
- fvm::Sp( Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_ , Lambda_ ) - fvm::Sp(Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_ , Lambda_)
+ Foam::exp( 2/q_*(Lambda_ - 1))/lambdaOs_ + Foam::exp(2/q_*(Lambda_ - 1))/lambdaOs_
); );
LambdaEqn().relax(); LambdaEqn.relax();
solve(LambdaEqn); LambdaEqn.solve();
// Viscoelastic stress // Viscoelastic stress
tau_ = etaP_/lambdaOb_ * (3*Foam::sqr(Lambda_)*S_ - I_); tau_ = etaP_/lambdaOb_*(3*Foam::sqr(Lambda_)*S_ - I_);
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -61,7 +61,7 @@ class XPP_DE
volSymmTensorField S_; volSymmTensorField S_;
//- Evolution of the backbone stretch //- Evolution of the backbone stretch
volScalarField Lambda_; volScalarField Lambda_;
//- Transported viscoelastic stress //- Transported viscoelastic stress
volSymmTensorField tau_; volSymmTensorField tau_;

View file

@ -27,19 +27,17 @@ License
#include "XPP_SE.H" #include "XPP_SE.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(XPP_SE, 0);
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // addToRunTimeSelectionTable(viscoelasticLaw, XPP_SE, dictionary);
}
defineTypeNameAndDebug(XPP_SE, 0);
addToRunTimeSelectionTable(viscoelasticLaw, XPP_SE, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
XPP_SE::XPP_SE Foam::XPP_SE::XPP_SE
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -86,7 +84,7 @@ XPP_SE::XPP_SE
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> XPP_SE::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix> Foam::XPP_SE::divTau(volVectorField& U) const
{ {
dimensionedScalar etaPEff = etaP_; dimensionedScalar etaPEff = etaP_;
@ -101,47 +99,50 @@ tmp<fvVectorMatrix> XPP_SE::divTau(volVectorField& U) const
} }
void XPP_SE::correct() void Foam::XPP_SE::correct()
{ {
// Velocity gradient tensor // Velocity gradient tensor
volTensorField L = fvc::grad( U() ); volTensorField L = fvc::grad(U());
// Convected derivate term // Convected derivate term
volTensorField C = tau_ & L; volTensorField C = tau_ & L;
// Twice the rate of deformation tensor // Twice the rate of deformation tensor
volSymmTensorField twoD = twoSymm( L ); volSymmTensorField twoD = twoSymm(L);
// Lambda (Backbone stretch) // Lambda (Backbone stretch)
volScalarField Lambda = Foam::sqrt( 1 + tr(tau_)*lambdaOb_/3/etaP_ ); volScalarField Lambda = Foam::sqrt(1 + tr(tau_)*lambdaOb_/3/etaP_);
// lambdaS (stretch relaxation time) // lambdaS (stretch relaxation time)
volScalarField lambdaS = lambdaOs_*Foam::exp( -2/q_*(Lambda - 1)); volScalarField lambdaS = lambdaOs_*Foam::exp(-2/q_*(Lambda - 1));
// Extra function // Extra function
volScalarField fTau = 2*lambdaOb_/lambdaS*(1 - 1/Lambda) + 1/Foam::sqr(Lambda)*(1 - alpha_*tr(tau_ & tau_)/3/Foam::sqr(etaP_/lambdaOb_) ); volScalarField fTau = 2*lambdaOb_/lambdaS*(1 - 1/Lambda)
+ 1/Foam::sqr(Lambda)*
(1 - alpha_*tr(tau_ & tau_)/3/Foam::sqr(etaP_/lambdaOb_));
// Stress transport equation // Stress transport equation
tmp<fvSymmTensorMatrix> tauEqn fvSymmTensorMatrix tauEqn
( (
fvm::ddt(tau_) fvm::ddt(tau_)
+ fvm::div(phi(), tau_) + fvm::div(phi(), tau_)
== ==
etaP_ / lambdaOb_ * twoD etaP_/lambdaOb_*twoD
+ twoSymm( C ) + twoSymm(C)
- fvm::Sp(1/lambdaOb_*fTau, tau_) - fvm::Sp(1/lambdaOb_*fTau, tau_)
- ( - (
1/lambdaOb_*( alpha_*lambdaOb_/etaP_*(tau_ & tau_) + etaP_/lambdaOb_*(fTau -1)*I_ ) ) 1/lambdaOb_*
(
alpha_*lambdaOb_/etaP_*(tau_ & tau_)
+ etaP_/lambdaOb_*(fTau - 1)*I_
)
)
); );
tauEqn().relax(); tauEqn.relax();
solve(tauEqn); tauEqn.solve();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -27,20 +27,18 @@ License
#include "multiMode.H" #include "multiMode.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(multiMode, 0);
addToRunTimeSelectionTable(viscoelasticLaw, multiMode, dictionary);
}
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
defineTypeNameAndDebug(multiMode, 0);
addToRunTimeSelectionTable(viscoelasticLaw, multiMode, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// from components Foam::multiMode::multiMode
multiMode::multiMode
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -67,24 +65,6 @@ multiMode::multiMode
symmTensor::zero symmTensor::zero
) )
), ),
nulo_
(
IOobject
(
"nulo",
U.time().timeName(),
U.mesh(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
U.mesh(),
dimensionedSymmTensor
(
"zero",
dimensionSet(1, -1, -2, 0, 0, 0, 0),
symmTensor::zero
)
),
models_() models_()
{ {
PtrList<entry> modelEntries(dict.lookup("models")); PtrList<entry> modelEntries(dict.lookup("models"));
@ -109,7 +89,8 @@ multiMode::multiMode
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
tmp<fvVectorMatrix> multiMode::divTau(volVectorField& U) const Foam::tmp<Foam::fvVectorMatrix>
Foam::multiMode::divTau(volVectorField& U) const
{ {
tmp<fvVectorMatrix> divMatrix = models_[0].divTau(U); tmp<fvVectorMatrix> divMatrix = models_[0].divTau(U);
@ -122,10 +103,9 @@ tmp<fvVectorMatrix> multiMode::divTau(volVectorField& U) const
} }
tmp<volSymmTensorField> multiMode::tau() const Foam::tmp<Foam::volSymmTensorField> Foam::multiMode::tau() const
{ {
tau_ *= 0;
tau_ = nulo_;
for (label i = 0; i < models_.size(); i++) for (label i = 0; i < models_.size(); i++)
{ {
@ -133,11 +113,10 @@ tmp<volSymmTensorField> multiMode::tau() const
} }
return tau_; return tau_;
} }
void multiMode::correct() void Foam::multiMode::correct()
{ {
forAll (models_, i) forAll (models_, i)
{ {
@ -146,12 +125,7 @@ void multiMode::correct()
} }
tau(); tau();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -59,9 +59,6 @@ class multiMode
//- Transported viscoelastic stress //- Transported viscoelastic stress
mutable volSymmTensorField tau_; mutable volSymmTensorField tau_;
//- A null (zero) symmetric tensor
volSymmTensorField nulo_;
//- List of models //- List of models
PtrList<viscoelasticLaw> models_; PtrList<viscoelasticLaw> models_;

View file

@ -29,12 +29,7 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam Foam::autoPtr<Foam::viscoelasticLaw> Foam::viscoelasticLaw::New
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
autoPtr<viscoelasticLaw> viscoelasticLaw::New
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -66,8 +61,4 @@ autoPtr<viscoelasticLaw> viscoelasticLaw::New
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -30,15 +30,14 @@ License
namespace Foam namespace Foam
{ {
defineTypeNameAndDebug(viscoelasticLaw, 0);
defineRunTimeSelectionTable(viscoelasticLaw, dictionary);
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
defineTypeNameAndDebug(viscoelasticLaw, 0);
defineRunTimeSelectionTable(viscoelasticLaw, dictionary);
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
viscoelasticLaw::viscoelasticLaw Foam::viscoelasticLaw::viscoelasticLaw
( (
const word& name, const word& name,
const volVectorField& U, const volVectorField& U,
@ -51,8 +50,4 @@ viscoelasticLaw::viscoelasticLaw
{} {}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,60 +1,56 @@
#!/bin/sh #!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cd PTT-Exponential cd PTT-Exponential
cleanCase ./Allclean
cd .. cd ..
cd DCPP cd DCPP
cleanCase ./Allclean
cd .. cd ..
cd Giesekus cd Giesekus
cleanCase ./Allclean
cd .. cd ..
cd FENE-CR cd FENE-CR
rm -rf constant/polyMesh/sets > /dev/null 2>&1 ./Allclean
cleanCase
cd .. cd ..
cd FENE-P cd FENE-P
cleanCase ./Allclean
cd .. cd ..
cd Feta-PTT cd Feta-PTT
cleanCase ./Allclean
cd .. cd ..
cd Leonov cd Leonov
cleanCase ./Allclean
cd .. cd ..
cd Oldroyd-B cd Oldroyd-B
cleanCase ./Allclean
cd .. cd ..
cd PP cd S-MDCPP
cleanCase ./Allclean
cd .. cd ..
cd PTT-Linear cd PTT-Linear
cleanCase ./Allclean
cd .. cd ..
cd White-Metzner/Carreau-Yasuda cd WhiteMetzner/CarreauYasuda
cleanCase ./Allclean
cd ../.. cd ../..
cd XPP_DE cd XPP_DE
cleanCase ./Allclean
cd .. cd ..
cd XPP_SE cd XPP_SE
cleanCase ./Allclean
cd .. cd ..

View file

@ -1,39 +1,55 @@
#!/bin/sh #!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
application="viscoelasticFluidFoam"
cd FENE-CR
runApplication gmshToFoam mesh.msh
cp boundary constant/polyMesh/boundary
echo "FENE-CR: execution time ~ 320 s in a Core 2 Duo 2.0 Ghz processor"
runApplication $application
cd ..
cd PTT-Exponential cd PTT-Exponential
runApplication blockMesh ./Allrun
echo "PTT-Exponential: execution time ~ 4250 s in a Core 2 Duo 2.0 Ghz processor"
runApplication $application
cd .. cd ..
cd DCPP cd DCPP
./Allrun
runApplication blockMesh
echo "DCPP: execution time ~ 41830 s in a Core 2 Duo 2.0 Ghz processor"
runApplication $application
runApplication PSD
runApplication sample
cd .. cd ..
cd Giesekus cd Giesekus
./Allrun
runApplication blockMesh
echo "Giesekus: execution time ~ 91195 s in a Core 2 Duo 2.0 Ghz processor" cd ..
runApplication $application cd FENE-CR
runApplication stressDifferences ./Allrun
cd ..
cd FENE-P
./Allrun
cd ..
cd Feta-PTT
./Allrun
cd ..
cd Leonov
./Allrun
cd ..
cd Oldroyd-B
./Allrun
cd ..
cd S-MDCPP
./Allrun
cd ..
cd PTT-Linear
./Allrun
cd ..
cd White-Metzner/Carreau-Yasuda
./Allrun
cd ../..
cd XPP_DE
./Allrun
cd ..
cd XPP_SE
./Allrun
cd .. cd ..

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volScalarField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Lambdafirst;
case "DCPP";
instance "0";
local "";
class volScalarField;
object Lambdafirst;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volScalarField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Lambdafourth;
case "DCPP";
instance "0";
local "";
class volScalarField;
object Lambdafourth;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volScalarField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Lambdasecond;
case "DCPP";
instance "0";
local "";
class volScalarField;
object Lambdasecond;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volScalarField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Lambdathird;
case "DCPP";
instance "0";
local "";
class volScalarField;
object Lambdathird;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.5-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.OpenFOAM.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volSymmTensorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Sfirst;
case "DCPP";
instance "0";
local "";
class volSymmTensorField;
object Sfirst;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volSymmTensorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Sfourth;
case "DCPP";
instance "0";
local "";
class volSymmTensorField;
object Sfourth;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volSymmTensorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Ssecond;
case "DCPP";
instance "0";
local "";
class volSymmTensorField;
object Ssecond;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volSymmTensorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object Sthird;
case "DCPP";
instance "0";
local "";
class volSymmTensorField;
object Sthird;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0]; dimensions [0 0 0 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volVectorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object U;
case "DCPP";
instance "0";
local "";
class volVectorField;
object U;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0]; dimensions [0 1 -1 0 0 0 0];
@ -52,5 +44,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volScalarField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object p;
case "DCPP";
instance "0";
local "";
class volScalarField;
object p;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0]; dimensions [0 2 -2 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volSymmTensorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object tau;
case "DCPP";
instance "0";
local "";
class volSymmTensorField;
object tau;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0]; dimensions [1 -1 -2 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -0,0 +1,9 @@
#!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -R -f sets
echo "done!"

View file

@ -0,0 +1,22 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Get application name
application=`getApplication`
echo "Running blockMesh application"
runApplication blockMesh
echo "Running viscoelasticFluidFoam solver"
echo "DCPP model: execution time ~ 41830 s in a Core 2 Duo 2.0 Ghz processor"
runApplication $application
echo "Running PSD application"
runApplication PSD
echo "Running sample application"
runApplication sample
echo "done!"

View file

@ -0,0 +1,35 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
#
#+TITLE: *DCPP viscoelastic constitutive model README file for version 1.6-ext*
#+AUTHOR: Jovani
#+DATE: 05 October 2010
* This is a simulation case for a viscoelastic fluid described by the Double
Convected Pom-Pom constitutive model (DCPP).
The geometry was the 4:1 plane contraction. This is a well studied
geometry in viscoelastic fluid flow research.
More details about the model or parameters used, as also informations
about the geometry, can be found at:
*** CLEMEUR, N.; RUTGERS, R. P. G.; DEBBAUT, B. Numerical simulation of abrupt
contraction flows using the double convected pom-pom model. Journal of Non-
Newtonian Fluid Mechanics, v. 117, n. 2-3, p. 193 209, 2004. ISSN 0377-
0257.
<http://www.sciencedirect.com/science/article/B6TGV-4C47GVS-3/2/d9d170224e2a3ee5f6560b5ec5875662>
* The results for this case using viscoelasticFluidFoam solver can be found at:
*** Journal of Non-Newtonian Fluid Mechanics:
<http://www.sciencedirect.com/science/article/B6TGV-511BYYF-1/2/53b604790dda6f271bb2e82870ba0c2a>

View file

@ -1,28 +1,19 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object blockMeshDict;
case "DCPP";
instance "constant";
local "polyMesh";
class dictionary;
object blockMeshDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 0.001; convertToMeters 0.001;
vertices vertices
@ -104,5 +95,4 @@ mergePatchPairs
( (
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,9 +1,9 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.5-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Revision: exported | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | Web: http://www.OpenFOAM.org | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {

View file

@ -1,25 +1,17 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root ""; object viscoelasticProperties;
case "";
instance "";
local "";
class dictionary;
object viscoelasticProperties;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
/* /*
@ -41,7 +33,6 @@ zeta 0.2 0.2 0.07 0.05
*/ */
rheology rheology
{ {
@ -100,9 +91,6 @@ rheology
); );
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object controlDict;
case "DCPP";
instance "system";
local "";
class dictionary;
object controlDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application viscoelasticFluidFoam; application viscoelasticFluidFoam;
@ -60,5 +52,4 @@ maxCo 0.8;
maxDeltaT 0.01; maxDeltaT 0.01;
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,28 +1,19 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root ""; object decomposeParDict;
case "";
instance "";
local "";
class dictionary;
object decomposeParDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 2; numberOfSubdomains 2;
method metis; method metis;
@ -60,5 +51,4 @@ roots
( (
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,31 +1,22 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/home/jovani/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object fvSchemes;
case "DCPP";
instance "system";
local "";
class dictionary;
object fvSchemes;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes ddtSchemes
{ {
default CrankNicholson 1; default Euler;
} }
gradSchemes gradSchemes
@ -33,23 +24,22 @@ gradSchemes
default Gauss linear; default Gauss linear;
grad(p) Gauss linear; grad(p) Gauss linear;
grad(U) Gauss linear; grad(U) Gauss linear;
} }
divSchemes divSchemes
{ {
default none; default none;
div(phi,U) Gauss upwind; //GammaV 0.5; div(phi,U) Gauss Minmod; //upwind;
div(phi,Sfirst) Gauss upwind; //Gamma 0.5; div(phi,Sfirst) Gauss Minmod; //upwind;
div(phi,Ssecond) Gauss upwind; //Gamma 0.5; div(phi,Ssecond) Gauss Minmod; //upwind;
div(phi,Sthird) Gauss upwind; //Gamma 0.5; div(phi,Sthird) Gauss Minmod; //upwind;
div(phi,Sfourth) Gauss upwind; //Gamma 0.5; div(phi,Sfourth) Gauss Minmod; //upwind;
div(phi,Lambdafirst) Gauss upwind; //Gamma 0.5; div(phi,Lambdafirst) Gauss Minmod; //upwind;
div(phi,Lambdasecond) Gauss upwind; //Gamma 0.5; div(phi,Lambdasecond) Gauss Minmod; //upwind;
div(phi,Lambdathird) Gauss upwind; //Gamma 0.5; div(phi,Lambdathird) Gauss Minmod; //upwind;
div(phi,Lambdafourth) Gauss upwind; //Gamma 0.5; div(phi,Lambdafourth) Gauss Minmod; //upwind;
div(tau) Gauss linear; div(tau) Gauss linear;
} }
@ -79,5 +69,4 @@ fluxRequired
p; p;
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,36 +1,29 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object fvSolution;
case "DCPP";
instance "system";
local "";
class dictionary;
object fvSolution;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers solvers
{ {
p CG p
{ {
solver PCG;
preconditioner preconditioner
{ {
// type Cholesky; // preconditioner Cholesky;
type AMG; preconditioner AMG;
cycle W-cycle; cycle W-cycle;
policy AAMG; policy AAMG;
nPreSweeps 0; nPreSweeps 0;
@ -43,135 +36,144 @@ solvers
} }
tolerance 1e-07; tolerance 1e-07;
relTol 0.0; relTol 0;
minIter 0; minIter 0;
maxIter 800; maxIter 800;
}; }
U BiCGStab U
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Sfirst BiCGStab Sfirst
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Ssecond BiCGStab Ssecond
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Sthird BiCGStab Sthird
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Sfourth BiCGStab Sfourth
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Lambdafirst BiCGStab Lambdafirst
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Lambdasecond BiCGStab Lambdasecond
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Lambdathird BiCGStab Lambdathird
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
Lambdafourth BiCGStab Lambdafourth
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
} }
PISO PISO
{ {
momentumPredictor yes;
nCorrectors 2; nCorrectors 2;
nNonOrthogonalCorrectors 1; nNonOrthogonalCorrectors 0;
pRefCell 0; pRefCell 0;
pRefValue 0; pRefValue 0;
} }
@ -193,6 +195,4 @@ relaxationFactors
Lambdafourth 0.3; Lambdafourth 0.3;
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,19 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary; class dictionary;
object sampleDict; object sampleDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
interpolationScheme cellPointFace; interpolationScheme cellPointFace;
@ -58,5 +56,4 @@ fields
PSD PSD
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,57 +1,47 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.3 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volVectorField;
root ""; object U;
case "FENE-CR";
instance "";
local "";
class volVectorField;
object U;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0]; dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0); internalField uniform (0 0 0);
boundaryField boundaryField
{ {
patch3 inlet
{ {
type fixedValue; type fixedValue;
value uniform (5 0 0); value uniform (0 0 -0.03875);
} }
fixedWalls
patch2
{
type zeroGradient;
}
patch1
{ {
type fixedValue; type fixedValue;
value uniform (0 0 0); value uniform (0 0 0);
} }
outlet
patch0 {
type zeroGradient;
}
simetry
{
type symmetryPlane;
}
frontAndBack
{ {
type empty; type empty;
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,55 +1,46 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.3 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volScalarField;
root ""; object p;
case "FENE-CR";
instance "";
local "";
class volScalarField;
object p;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0]; dimensions [0 2 -2 0 0 0 0];
internalField uniform 0; internalField uniform 0;
boundaryField boundaryField
{ {
patch3 inlet
{ {
type zeroGradient; type zeroGradient;
} }
patch2 fixedWalls
{
type zeroGradient;
}
outlet
{ {
type fixedValue; type fixedValue;
value uniform 0; value uniform 0;
} }
patch1 simetry
{ {
type zeroGradient; type symmetryPlane;
} }
frontAndBack
patch0
{ {
type empty; type empty;
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volSymmTensorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object tau;
case "FENE-CR";
instance "0";
local "";
class volSymmTensorField;
object tau;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0]; dimensions [1 -1 -2 0 0 0 0];
@ -28,27 +20,27 @@ internalField uniform (0 0 0 0 0 0);
boundaryField boundaryField
{ {
patch3 inlet
{ {
type fixedValue; type fixedValue;
value uniform (0 0 0 0 0 0); value uniform (0 0 0 0 0 0);
} }
patch2 fixedWalls
{ {
type zeroGradient; type zeroGradient;
} }
patch1 outlet
{ {
type zeroGradient; type zeroGradient;
} }
simetry
patch0 {
type symmetryPlane;
}
frontAndBack
{ {
type empty; type empty;
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -0,0 +1,8 @@
#!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"

View file

@ -0,0 +1,16 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Get application name
application=`getApplication`
echo "Running blockMesh application"
runApplication blockMesh
echo "Running viscoelasticFluidFoam solver"
echo "FENE-CR model: "
runApplication $application
echo "done!"

View file

@ -0,0 +1,26 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
#
#+TITLE: *FENE-CR viscoelastic constitutive model README file for version 1.6-ext*
#+AUTHOR: Jovani
#+DATE: 05 October 2010
* This is a simulation case for a viscoelastic fluid described by the Finitely
Extensible Nonlinear Elastic Chilcott-Rallison constitutive model (FENE-CR).
The geometry was the 5:1 3D plane contraction, considering 1/4 of the real
geometry.
*** This is only an illustrative case for the FENE-CR constitutive model. Therefore,
there are not more details published until now for this model using this geometry
and viscoelasticFluidFoam solver.
*** Some results using this model with a 2D 4:1 plane contraction can be found at:
<http://hdl.handle.net/10183/16306>

View file

@ -0,0 +1,102 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 0.001;
vertices
(
(0 0 0)
(1 0 0)
(0 1 0)
(0 0 50) //block one
(1 0 50)
(0 1 50)
(3 0 50) //block two
(0 3 50)
(5 0 50)
(0 5 50)
(0 0 120)
(1 0 120) //block three
(0 1 120)
(3 0 120) //block four
(0 3 120)
(5 0 120)
(0 5 120)
);
blocks
(
hex (0 1 2 0 3 4 5 3) (10 10 50) simpleGrading (0.3 1 0.05)
hex (3 4 5 3 10 11 12 10) (10 10 60) simpleGrading (0.3 1 20)
hex (4 6 7 5 11 13 14 12) (20 10 60) simpleGrading (3 1 20)
hex (6 8 9 7 13 15 16 14) (20 10 60) simpleGrading (0.3 1 20)
);
edges
(
arc 1 2 (0.9396926 0.342020 0)
arc 4 5 (0.9396926 0.342020 50)
arc 6 7 (2.8190779 1.026060 50)
arc 8 9 (4.698463 1.7101007 50)
arc 11 12 (0.9396926 0.342020 120)
arc 13 14 (2.8190779 1.026060 120)
arc 15 16 (4.698463 1.7101007 120)
);
patches
(
patch inlet
(
(10 12 11 10)
(12 14 13 11)
(14 16 15 13)
)
wall fixedWalls
(
(1 4 5 2)
(4 6 7 5)
(6 8 9 7)
(8 15 16 9)
)
patch outlet
(
(0 1 2 0)
)
symmetryPlane simetry
(
(0 3 4 1)
(0 2 5 3)
(3 10 11 4)
(4 11 13 6)
(6 13 15 8)
(3 5 12 10)
(5 7 14 12)
(7 9 16 14)
)
);
mergePatchPairs
(
);
// ************************************************************************* //

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.5-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.OpenFOAM.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
@ -15,33 +15,38 @@ FoamFile
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
4 5
( (
patch0 inlet
{ {
type empty; type patch;
nFaces 8592; nFaces 500;
startFace 6292; startFace 99900;
} }
patch1 fixedWalls
{ {
type wall; type wall;
nFaces 292; nFaces 1500;
startFace 14884; startFace 100400;
} }
patch2 outlet
{ {
type patch; type patch;
nFaces 6; nFaces 100;
startFace 15176; startFace 101900;
} }
patch3 simetry
{ {
type patch; type symmetryPlane;
nFaces 6; nFaces 7000;
startFace 15182; startFace 102000;
}
defaultFaces
{
type empty;
nFaces 0;
startFace 109000;
} }
) )
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,50 +1,29 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root ""; object viscoelasticProperties;
case "";
instance "";
local "";
class dictionary;
object viscoelasticProperties;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
rheology rheology
{ {
type multiMode;
models
(
first
{
type FENE-CR; type FENE-CR;
rho rho [1 -3 0 0 0 0 0] 875.96; rho rho [1 -3 0 0 0 0 0] 875.96;
etaS etaS [1 -1 -1 0 0 0 0] 0.007; etaS etaS [1 -1 -1 0 0 0 0] 0.007;
etaP etaP [1 -1 -1 0 0 0 0] 11.356; etaP etaP [1 -1 -1 0 0 0 0] 11.356;
lambda lambda [0 0 1 0 0 0 0] 0.35; lambda lambda [0 0 1 0 0 0 0] 0.35;
L2 L2 [0 0 0 0 0 0 0] 25; L2 L2 [0 0 0 0 0 0 0] 25;
}
);
} }
// ************************************************************************* // // ************************************************************************* //

File diff suppressed because it is too large Load diff

View file

@ -1,42 +1,34 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object controlDict;
case "FENE-CR";
instance "system";
local "";
class dictionary;
object controlDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application viscoelasticFluidFoam; application viscoelasticFluidFoam;
startFrom startTime; startFrom startTime;
startTime 0.0; startTime 0;
stopAt endTime; stopAt endTime;
endTime 5; endTime 3;
deltaT 1e-6; deltaT 1e-5;
writeControl adjustableRunTime; writeControl adjustableRunTime;
writeInterval 1; writeInterval 0.5;
purgeWrite 0; purgeWrite 0;
@ -60,5 +52,4 @@ maxCo 0.8;
maxDeltaT 0.001; maxDeltaT 0.001;
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,28 +1,19 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root ""; object decomposeParDict;
case "";
instance "";
local "";
class dictionary;
object decomposeParDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 2; numberOfSubdomains 2;
method metis; method metis;
@ -60,5 +51,4 @@ roots
( (
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,30 +1,22 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/home/jovani/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object fvSchemes;
case "FENE-CR";
instance "system";
local "";
class dictionary;
object fvSchemes;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes ddtSchemes
{ {
default CrankNicholson 1; default Euler;
} }
gradSchemes gradSchemes
@ -38,8 +30,8 @@ gradSchemes
divSchemes divSchemes
{ {
default none; default none;
div(phi,U) Gauss upwind; //GammaV 0.5; div(phi,U) Gauss upwind;
div(phi,taufirst) Gauss upwind; //Gamma 0.5; div(phi,tau) Gauss upwind;
div(tau) Gauss linear; div(tau) Gauss linear;
} }
@ -68,5 +60,4 @@ fluxRequired
p; p;
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,36 +1,29 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object fvSolution;
case "FENE-CR";
instance "system";
local "";
class dictionary;
object fvSolution;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers solvers
{ {
p CG p
{ {
solver PCG;
preconditioner preconditioner
{ {
type Cholesky; // preconditioner Cholesky;
/* type AMG; preconditioner AMG;
cycle W-cycle; cycle W-cycle;
policy AAMG; policy AAMG;
nPreSweeps 0; nPreSweeps 0;
@ -39,41 +32,43 @@ solvers
minCoarseEqns 20; minCoarseEqns 20;
nMaxLevels 100; nMaxLevels 100;
scale off; scale off;
smoother ILU;*/ smoother ILU;
} }
tolerance 1e-07;
tolerance 1e-06; relTol 0;
relTol 0.0;
minIter 0; minIter 0;
maxIter 800; maxIter 800;
}; }
U
U BiCGStab
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-5; }
relTol 0.0;
};
taufirst BiCGStab tau
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-5;
relTol 0.0;
}; };
@ -81,7 +76,6 @@ solvers
PISO PISO
{ {
momentumPredictor yes;
nCorrectors 2; nCorrectors 2;
nNonOrthogonalCorrectors 1; nNonOrthogonalCorrectors 1;
pRefCell 0; pRefCell 0;
@ -92,9 +86,7 @@ relaxationFactors
{ {
p 0.3; p 0.3;
U 0.5; U 0.5;
taufirst 0.3; tau 0.3;
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -0,0 +1,50 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object N1;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
inlet
{
type calculated;
value uniform 0;
}
fixedWalls
{
type calculated;
value uniform 0;
}
outlet
{
type calculated;
value uniform 0;
}
simetry
{
type symmetryPlane;
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* //

View file

@ -0,0 +1,50 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object N2;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
inlet
{
type calculated;
value uniform 0;
}
fixedWalls
{
type calculated;
value uniform 0;
}
outlet
{
type calculated;
value uniform 0;
}
simetry
{
type symmetryPlane;
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volVectorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object U;
case "FENE-P";
instance "0";
local "";
class volVectorField;
object U;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0]; dimensions [0 1 -1 0 0 0 0];
@ -52,5 +44,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volScalarField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object p;
case "FENE-P";
instance "0";
local "";
class volScalarField;
object p;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0]; dimensions [0 2 -2 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,25 +1,17 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class volSymmTensorField;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind"; object tau;
case "FENE-P";
instance "0";
local "";
class volSymmTensorField;
object tau;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0]; dimensions [1 -1 -2 0 0 0 0];
@ -51,5 +43,4 @@ boundaryField
} }
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,55 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.4.1-dev |
| \\ / A nd | Web: http://www.openfoam.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
root "/home/jovani/jovaniFoam/foamNewSolver/cases/recentCases/upwind";
case "FENE-P";
instance "0";
local "";
class volSymmTensorField;
object taufirst;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0];
internalField uniform (0 0 0 0 0 0);
boundaryField
{
inlet
{
type fixedValue;
value uniform (0 0 0 0 0 0);
}
fixedWalls
{
type zeroGradient;
}
outlet
{
type zeroGradient;
}
simetry
{
type symmetryPlane;
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* //

View file

@ -0,0 +1,9 @@
#!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -R -f sets
echo "done!"

View file

@ -0,0 +1,22 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Get application name
application=`getApplication`
echo "Running blockMesh application"
runApplication blockMesh
echo "Running viscoelasticFluidFoam solver"
echo "FENE-P model:"
runApplication $application
echo "Running stressDifferences application"
runApplication stressDifferences
echo "Running sample application"
runApplication sample
echo "done!"

View file

@ -0,0 +1,34 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
#
#+TITLE: *FENE-P viscoelastic constitutive model README file for version 1.6-ext*
#+AUTHOR: Jovani
#+DATE: 05 October 2010
* This is a simulation case for a viscoelastic fluid described by the Finitely
Extensible Nonlinear Elastic-Peterlin constitutive model (FENE-P).
The geometry was the 4:1 plane contraction. This is a well studied
geometry in viscoelastic fluid flow research.
More details about the model or parameters used, as also informations
about the geometry, can be found at:
*** AZAIEZ, J.; GUÉNETTE, R.; AïT-KADI, A. Numerical simulation of viscoelastic
flows through a planar contraction. Journal of Non-Newtonian Fluid
Mechanics, v. 62, n. 2-3, p. 253 277, 1996. ISSN 0377-0257.
<http://www.sciencedirect.com/science/article/B6TGV-3TKMMG1-8/2/b9b59e81347a3b5b3c185a2d9f2289af>
* The results for this case using viscoelasticFluidFoam solver can be found at:
*** Journal of Non-Newtonian Fluid Mechanics:
<http://www.sciencedirect.com/science/article/B6TGV-511BYYF-1/2/53b604790dda6f271bb2e82870ba0c2a>

View file

@ -1,28 +1,19 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object blockMeshDict;
case "FENE-P";
instance "constant";
local "polyMesh";
class dictionary;
object blockMeshDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 0.0032; convertToMeters 0.0032;
vertices vertices
@ -104,5 +95,4 @@ mergePatchPairs
( (
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.5-dev | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.OpenFOAM.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile

View file

@ -1,25 +1,17 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root ""; object viscoelasticProperties;
case "";
instance "";
local "";
class dictionary;
object viscoelasticProperties;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
/* /*
@ -30,32 +22,22 @@ Mechanics, v. 62, n. 2-3, p. 253 - 277, 1996.
Table 1 Table 1
Model Model parameter lambda etaS etaP Model Model parameter lambda etaS etaP
PTT Linear L2 = 6.0 0.04 0.002 1.422 FENE-P L2 = 6.0 0.04 0.002 1.422
*/ */
rheology rheology
{ {
type multiMode;
models
(
first
{
type FENE-P; type FENE-P;
rho rho [1 -3 0 0 0 0 0] 803.87097; rho rho [1 -3 0 0 0 0 0] 803.87097;
etaS etaS [1 -1 -1 0 0 0 0] 0.002; etaS etaS [1 -1 -1 0 0 0 0] 0.002;
etaP etaP [1 -1 -1 0 0 0 0] 1.422; etaP etaP [1 -1 -1 0 0 0 0] 1.422;
lambda lambda [0 0 1 0 0 0 0] 0.04; lambda lambda [0 0 1 0 0 0 0] 0.04;
L2 L2 [0 0 0 0 0 0 0] 6.0; L2 L2 [0 0 0 0 0 0 0] 6.0;
}
);
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,32 +1,24 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object controlDict;
case "FENE-P";
instance "system";
local "";
class dictionary;
object controlDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application viscoelasticFluidFoam; application viscoelasticFluidFoam;
startFrom startTime; startFrom startTime;
startTime 0.0; startTime 0;
stopAt endTime; stopAt endTime;
@ -36,7 +28,7 @@ deltaT 1e-5;
writeControl adjustableRunTime; writeControl adjustableRunTime;
writeInterval 0.1; writeInterval 1;
purgeWrite 0; purgeWrite 0;
@ -60,5 +52,4 @@ maxCo 0.8;
maxDeltaT 0.001; maxDeltaT 0.001;
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,28 +1,19 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root ""; object decomposeParDict;
case "";
instance "";
local "";
class dictionary;
object decomposeParDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
numberOfSubdomains 2; numberOfSubdomains 2;
method metis; method metis;
@ -60,5 +51,4 @@ roots
( (
); );
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,30 +1,22 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/home/jovani/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object fvSchemes;
case "FENE-P";
instance "system";
local "";
class dictionary;
object fvSchemes;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes ddtSchemes
{ {
default CrankNicholson 1; default Euler;
} }
gradSchemes gradSchemes
@ -38,8 +30,8 @@ gradSchemes
divSchemes divSchemes
{ {
default none; default none;
div(phi,U) Gauss upwind; //GammaV 0.5; div(phi,U) Gauss Minmod; //upwind;
div(phi,taufirst) Gauss upwind; //Gamma 0.5; div(phi,tau) Gauss Minmod; //upwind;
div(tau) Gauss linear; div(tau) Gauss linear;
} }
@ -68,5 +60,4 @@ fluxRequired
p; p;
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,36 +1,29 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4.1 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/opt/OpenFOAM/jovani-1.4.1/run/tutorials/viscoelasticFluidFoam"; object fvSolution;
case "FENE-P";
instance "system";
local "";
class dictionary;
object fvSolution;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers solvers
{ {
p CG p
{ {
solver PCG;
preconditioner preconditioner
{ {
// type Cholesky; // preconditioner Cholesky;
type AMG; preconditioner AMG;
cycle W-cycle; cycle W-cycle;
policy AAMG; policy AAMG;
nPreSweeps 0; nPreSweeps 0;
@ -42,38 +35,40 @@ solvers
smoother ILU; smoother ILU;
} }
tolerance 1e-07; tolerance 1e-07;
relTol 0.0; relTol 0;
minIter 0; minIter 0;
maxIter 800; maxIter 800;
}; }
U
U BiCGStab
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6; }
relTol 0.0;
};
taufirst BiCGStab tau
{ {
solver BiCGStab;
preconditioner preconditioner
{ {
type Cholesky; preconditioner Cholesky;
} }
tolerance 1e-6;
relTol 0;
minIter 0; minIter 0;
maxIter 1000; maxIter 1000;
tolerance 1e-6;
relTol 0.0;
}; };
@ -81,9 +76,8 @@ solvers
PISO PISO
{ {
momentumPredictor yes;
nCorrectors 2; nCorrectors 2;
nNonOrthogonalCorrectors 1; nNonOrthogonalCorrectors 0;
pRefCell 0; pRefCell 0;
pRefValue 0; pRefValue 0;
} }
@ -92,9 +86,7 @@ relaxationFactors
{ {
p 0.3; p 0.3;
U 0.5; U 0.5;
taufirst 0.3; tau 0.3;
} }
// ************************************************************************* // // ************************************************************************* //

View file

@ -1,31 +1,22 @@
/*---------------------------------------------------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.4 | | \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: http://www.openfoam.org | | \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root ""; object sampleDict;
case "FENE-P";
instance "";
local "";
class dictionary;
object sampleDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
interpolationScheme cellPoint; interpolationScheme cellPoint;
writeFormat raw; setFormat raw;
sets sets
( (
@ -49,7 +40,6 @@ sets
nPoints 100; nPoints 100;
} }
fig7_x_1 fig7_x_1
{ {
type uniform; type uniform;
@ -59,7 +49,6 @@ sets
nPoints 100; nPoints 100;
} }
fig7_x_15 fig7_x_15
{ {
type uniform; type uniform;
@ -87,7 +76,6 @@ sets
nPoints 100; nPoints 100;
} }
// y axes N1 upstream profile // y axes N1 upstream profile
fig7_y_1 fig7_y_1
@ -221,5 +209,4 @@ fields
N1 N1
); );
// ************************************************************************* // // ************************************************************************* //

Some files were not shown because too many files have changed in this diff Show more