Merge branch 'master' into testLoop/MartinBeaudoin

This commit is contained in:
Martin Beaudoin 2010-10-13 17:17:03 -04:00
commit 6c89f28e58
76 changed files with 732 additions and 470 deletions

View file

@ -0,0 +1,3 @@
icoDyMFoam.C
EXE = $(FOAM_APPBIN)/icoDyMFoam

View file

@ -0,0 +1,13 @@
EXE_INC = \
-I$(LIB_SRC)/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude
EXE_LIBS = \
-ldynamicFvMesh \
-ldynamicMesh \
-lengine \
-lmeshTools \
-lfiniteVolume \
-llduSolvers

View file

@ -0,0 +1,11 @@
fvVectorMatrix UEqn
(
fvm::ddt(U)
+ fvm::div(phi, U)
- fvm::laplacian(nu, U)
);
if (momentumPredictor)
{
solve(UEqn == -fvc::grad(p));
}

View file

@ -0,0 +1,47 @@
{
wordList pcorrTypes(p.boundaryField().types());
for (label i=0; i<p.boundaryField().size(); i++)
{
if (p.boundaryField()[i].fixesValue())
{
pcorrTypes[i] = fixedValueFvPatchScalarField::typeName;
}
}
volScalarField pcorr
(
IOobject
(
"pcorr",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar("pcorr", p.dimensions(), 0.0),
pcorrTypes
);
for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
fvScalarMatrix pcorrEqn
(
fvm::laplacian(rAU, pcorr) == fvc::div(phi)
);
pcorrEqn.setReference(pRefCell, pRefValue);
pcorrEqn.solve();
if (nonOrth == nNonOrthCorr)
{
phi -= pcorrEqn.flux();
}
// Fluxes are corrected to absolute velocity and further corrected
// later. HJ, 6/Feb/2009
}
}
#include "continuityErrs.H"

View file

@ -0,0 +1,90 @@
Info<< "Reading transportProperties\n" << endl;
IOdictionary transportProperties
(
IOobject
(
"transportProperties",
runTime.constant(),
mesh,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
dimensionedScalar nu
(
transportProperties.lookup("nu")
);
Info<< "Reading field p\n" << endl;
volScalarField p
(
IOobject
(
"p",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
Info<< "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
# include "createPhi.H"
label pRefCell = 0;
scalar pRefValue = 0.0;
setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue);
Info<< "Reading field rAU if present\n" << endl;
volScalarField rAU
(
IOobject
(
"rAU",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
runTime.deltaT(),
zeroGradientFvPatchScalarField::typeName
);
{
const dictionary& piso = mesh.solutionDict().subDict("PISO");
bool momentumPredictor = true;
if (piso.found("momentumPredictor"))
{
momentumPredictor = Switch(piso.lookup("momentumPredictor"));
}
bool momentumPredictorSave = momentumPredictor;
momentumPredictor = false;
# include "UEqn.H"
momentumPredictor = momentumPredictorSave;
rAU = 1.0/UEqn.A();
}

View file

@ -0,0 +1,149 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / 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
Application
icoDyMFoam
Description
Transient solver for incompressible, laminar flow of Newtonian fluids
with dynamic mesh.
Author
Hrvoje Jasak, Wikki Ltd. All rights reserved.
\*---------------------------------------------------------------------------*/
#include "fvCFD.H"
#include "dynamicFvMesh.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
# include "setRootCase.H"
# include "createTime.H"
# include "createDynamicFvMesh.H"
# include "initContinuityErrs.H"
# include "initTotalVolume.H"
# include "createFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Info<< "\nStarting time loop\n" << endl;
while (runTime.run())
{
# include "readControls.H"
# include "checkTotalVolume.H"
# include "CourantNo.H"
# include "setDeltaT.H"
// Make the fluxes absolute
fvc::makeAbsolute(phi, U);
runTime++;
Info<< "Time = " << runTime.timeName() << nl << endl;
bool meshChanged = mesh.update();
# include "volContinuity.H"
if (correctPhi && meshChanged)
{
// Fluxes will be corrected to absolute velocity
// HJ, 6/Feb/2009
# include "correctPhi.H"
}
// Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, U);
if (meshChanged)
{
# include "CourantNo.H"
}
# include "UEqn.H"
// --- PISO loop
for (int corr=0; corr<nCorr; corr++)
{
rAU = 1.0/UEqn.A();
U = rAU*UEqn.H();
phi = (fvc::interpolate(U) & mesh.Sf());
//+ fvc::ddtPhiCorr(rAU, U, phi);
adjustPhi(phi, U, p);
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
fvScalarMatrix pEqn
(
fvm::laplacian(rAU, p) == fvc::div(phi)
);
pEqn.setReference(pRefCell, pRefValue);
if (corr == nCorr - 1 && nonOrth == nNonOrthCorr)
{
pEqn.solve(mesh.solver(p.name() + "Final"));
}
else
{
pEqn.solve(mesh.solver(p.name()));
}
if (nonOrth == nNonOrthCorr)
{
phi -= pEqn.flux();
}
}
# include "continuityErrs.H"
// Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, U);
U -= rAU*fvc::grad(p);
U.correctBoundaryConditions();
}
runTime.write();
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
<< " ClockTime = " << runTime.elapsedClockTime() << " s"
<< nl << endl;
}
Info<< "End\n" << endl;
return(0);
}
// ************************************************************************* //

View file

@ -0,0 +1,14 @@
# include "readTimeControls.H"
# include "readPISOControls.H"
bool correctPhi = false;
if (piso.found("correctPhi"))
{
correctPhi = Switch(piso.lookup("correctPhi"));
}
bool checkMeshCourantNo = false;
if (piso.found("checkMeshCourantNo"))
{
checkMeshCourantNo = Switch(piso.lookup("checkMeshCourantNo"));
}

View file

@ -24,12 +24,6 @@
pcorrTypes
);
# include "continuityErrs.H"
// Flux predictor
phi = (fvc::interpolate(U) & mesh.Sf());
rAU == runTime.deltaT();
for(int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
fvScalarMatrix pcorrEqn
@ -50,4 +44,4 @@
}
}
#include "continuityErrs.H"

View file

@ -54,17 +54,37 @@
scalar pRefValue = 0.0;
setRefCell(p, mesh.solutionDict().subDict("PISO"), pRefCell, pRefValue);
scalar totalVolume = sum(mesh.V()).value();
Info<< "Reading field rAU if present\n" << endl;
volScalarField rAU
(
IOobject
(
"rAU",
runTime.timeName(),
mesh
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
mesh,
runTime.deltaT(),
zeroGradientFvPatchScalarField::typeName
);
{
const dictionary& piso = mesh.solutionDict().subDict("PISO");
bool momentumPredictor = true;
if (piso.found("momentumPredictor"))
{
momentumPredictor = Switch(piso.lookup("momentumPredictor"));
}
bool momentumPredictorSave = momentumPredictor;
momentumPredictor = false;
# include "UEqn.H"
momentumPredictor = momentumPredictorSave;
rAU = 1.0/UEqn.A();
}

View file

@ -46,6 +46,7 @@ int main(int argc, char *argv[])
# include "createTime.H"
# include "createDynamicFvMesh.H"
# include "initContinuityErrs.H"
# include "initTotalVolume.H"
# include "createFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -55,7 +55,7 @@ cleanTimeDirectories ()
zeros=`printf %0${nZeros}d 0`
nZeros=$(($nZeros + 1))
done
rm -rf ./{[1-9]*,-[1-9]*,log,log.*,log-*,logSummary.*,.fxLock,*.xml,ParaView*,paraFoam*,*.OpenFOAM} > /dev/null 2>&1
rm -rf ./[1-9]* ./-[1-9]* ./log ./log.* ./log-* ./logSummary.* ./.fxLock ./*.xml ./ParaView* ./paraFoam* ./*.OpenFOAM > /dev/null 2>&1
}
cleanCase ()
@ -66,10 +66,20 @@ cleanCase ()
rm -rf forces* > /dev/null 2>&1
rm -rf system/machines \
constant/polyMesh/{allOwner*,cell*,face*,meshModifiers*} \
constant/polyMesh/{owner*,neighbour*,point*,edge*} \
constant/polyMesh/{cellLevel*,pointLevel*,refinementHistory*,surfaceIndex*} \
constant/{cellToRegion,cellLevel*,pointLevel*} \
constant/polyMesh/allOwner* \
constant/polyMesh/cell* \
constant/polyMesh/face* \
constant/polyMesh/meshModifiers* \
constant/polyMesh/owner* \
constant/polyMesh/neighbour* \
constant/polyMesh/point* \
constant/polyMesh/edge* \
constant/polyMesh/zoneToPatchName \
constant/polyMesh/cellLevel* \
constant/polyMesh/pointLevel* \
constant/polyMesh/refinementHistory*, \
constant/polyMesh/surfaceIndex* \
constant/cellToRegion \
constant/polyMesh/sets/ \
VTK \
> /dev/null 2>&1

View file

@ -65,6 +65,12 @@ compileApplication ()
wmake $1
}
compileLibrary ()
{
echo "Compiling $1 application"
wmake libso $1
}
cloneCase ()
{
if [ -d $2 ] ; then

View file

@ -912,6 +912,8 @@ Tolerances
// Thermophysical models
specieThermoTol 1e-4;
speciesThermoTJump 20;
speciesThermoMaxIter 100;
// Intersection tolerance
intersectionPlanarTol 0.2;

View file

@ -81,10 +81,11 @@ protected:
//- Face restriction addressing array.
// Maps from the finer to the coarser level.
// Positive indices map the finer faces which form part of the boundary
// of the coarser cells to the corresponding coarser cell face.
// Positive indices map the finer faces which form part of the
// boundary of the coarser cells to the corresponding coarser
// cell face.
// Negative indices map the finer faces which are internal to the
// coarser cells to minus the corresponding coarser cell index minus 1.
// coarser cells to minus the corresponding coarser cell index minus 1
PtrList<labelList> faceRestrictAddressing_;
//- Hierarchy of mesh addressing

View file

@ -73,7 +73,7 @@ class pointMesh
public:
// Declare name of the class and its debug switch
ClassName("pointMesh");
TypeName("pointMesh");
typedef pointMesh Mesh;
typedef pointBoundaryMesh BoundaryMesh;

View file

@ -1226,7 +1226,6 @@ void Foam::polyMesh::setOldPoints
oldPointsPtr_ = new pointField::subField(oldAllPoints(), nPoints());
curMotionTimeIndex_ = 0;
primitiveMesh::clearGeom();
}

View file

@ -28,6 +28,7 @@ License
#include "primitiveMesh.H"
#include "globalMeshData.H"
#include "demandDrivenData.H"
#include "meshObjectBase.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
@ -90,6 +91,9 @@ void Foam::polyMesh::clearGeom()
// Reset valid directions (could change with rotation)
geometricD_ = Vector<label>::zero;
solutionD_ = Vector<label>::zero;
// Move points all mesh objects. HJ, 13/Oct/2010
meshObjectBase::allMovePoints(*this);
}

View file

@ -27,6 +27,8 @@ License
#include "polyMesh.H"
#include "Time.H"
#include "cellIOList.H"
#include "meshObjectBase.H"
#include "mapPolyMesh.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
@ -394,6 +396,11 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate()
cellZones_.set(czI, newCellZones[czI].clone(cellZones_));
}
// Instantiate a dummy mapPolyMesh
autoPtr<mapPolyMesh> mapPtr(new mapPolyMesh(*this));
// Execute dummy topo change on all mesh objects
meshObjectBase::allUpdateTopology(*this, mapPtr());
if (boundaryChanged)
{
@ -440,6 +447,9 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate()
geometricD_ = Vector<label>::zero;
solutionD_ = Vector<label>::zero;
// Move points in all mesh objects
meshObjectBase::allMovePoints<polyMesh>(*this);
return polyMesh::POINTS_MOVED;
}
else

View file

@ -577,7 +577,7 @@ Foam::label Foam::directTopoChange::getCellOrder
// Now we have new-to-old in newOrder.
newOrder.setSize(cellInOrder);
// Invert to get old-to-new. Make sure removed (i.e. unmapped) cells are -1.
// Invert to get old-to-new. Make sure removed (i.e. unmapped) cells are -1
oldToNew = invert(cellCellAddressing.size(), newOrder);
return cellInOrder;
@ -1487,7 +1487,8 @@ void Foam::directTopoChange::resetZones
{
if (newZoneAddr[i] < pointMap_.size())
{
curPzRnb[i] = oldZone.whichPoint(pointMap_[newZoneAddr[i]]);
curPzRnb[i] =
oldZone.whichPoint(pointMap_[newZoneAddr[i]]);
}
else
{
@ -2034,6 +2035,7 @@ void Foam::directTopoChange::compactAndReorder
{
//HR 22.11.09: Fixes error when faceZone is empty
label maxFaceIndex = -1;
if ( mesh.faceZones()[zoneI].size() > 0 )
{
maxFaceIndex = max(mesh.faceZones()[zoneI]);
@ -2211,8 +2213,8 @@ void Foam::directTopoChange::addMesh
const pointZoneMesh& pointZones = mesh.pointZones();
// Resize
points_.setSize(points_.size() + points.size());
pointMap_.setSize(pointMap_.size() + points.size());
points_.setCapacity(points_.size() + points.size());
pointMap_.setCapacity(pointMap_.size() + points.size());
pointZone_.resize(pointZone_.size() + points.size()/100);
// Precalc offset zones
@ -2251,11 +2253,11 @@ void Foam::directTopoChange::addMesh
// always equals nCells
label nAllCells = mesh.nCells();
cellMap_.setSize(cellMap_.size() + nAllCells);
cellMap_.setCapacity(cellMap_.size() + nAllCells);
cellFromPoint_.resize(cellFromPoint_.size() + nAllCells/100);
cellFromEdge_.resize(cellFromEdge_.size() + nAllCells/100);
cellFromFace_.resize(cellFromFace_.size() + nAllCells/100);
cellZone_.setSize(cellZone_.size() + nAllCells);
cellZone_.setCapacity(cellZone_.size() + nAllCells);
// Precalc offset zones
@ -2311,11 +2313,11 @@ void Foam::directTopoChange::addMesh
// Resize
label nAllFaces = mesh.faces().size();
faces_.setSize(faces_.size() + nAllFaces);
region_.setSize(region_.size() + nAllFaces);
faceOwner_.setSize(faceOwner_.size() + nAllFaces);
faceNeighbour_.setSize(faceNeighbour_.size() + nAllFaces);
faceMap_.setSize(faceMap_.size() + nAllFaces);
faces_.setCapacity(faces_.size() + nAllFaces);
region_.setCapacity(region_.size() + nAllFaces);
faceOwner_.setCapacity(faceOwner_.size() + nAllFaces);
faceNeighbour_.setCapacity(faceNeighbour_.size() + nAllFaces);
faceMap_.setCapacity(faceMap_.size() + nAllFaces);
faceFromPoint_.resize(faceFromPoint_.size() + nAllFaces/100);
faceFromEdge_.resize(faceFromEdge_.size() + nAllFaces/100);
flipFaceFlux_.resize(flipFaceFlux_.size() + nAllFaces/100);

View file

@ -59,6 +59,7 @@ void boundMinMax
const dimensionedScalar& vsf1
);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam

View file

@ -37,7 +37,6 @@ License
#include "MapFvFields.H"
#include "fvMeshMapper.H"
#include "mapClouds.H"
#include "meshObjectBase.H"
#include "volPointInterpolation.H"
#include "extendedLeastSquaresVectors.H"
@ -78,9 +77,8 @@ void Foam::fvMesh::clearGeom()
// needs to be saved.
// Geometry dependent object updated through call-back
// "Reserve" optional delete. Reconsider
// and handled by polyMesh
// HJ, 29/Aug/2010
// meshObjectBase::allDelete(*this);
}
@ -89,9 +87,8 @@ void Foam::fvMesh::clearAddressing()
deleteDemandDrivenData(lduPtr_);
// Geometry dependent object updated through call-back
// "Reserve" optional delete. Reconsider
// and handled by polyMesh
// HJ, 29/Aug/2010
// meshObjectBase::allDelete(*this);
}
@ -528,9 +525,6 @@ void Foam::fvMesh::syncUpdateMesh()
// This is a temporary solution
surfaceInterpolation::movePoints();
// Instantiate a dummy mapPolyMesh
autoPtr<mapPolyMesh> mapPtr(new mapPolyMesh(*this));
// Function object update moved to polyMesh
// HJ, 29/Aug/2010
}

View file

@ -81,7 +81,7 @@ class volPointInterpolation
public:
// Declare name of the class and its debug switch
ClassName("volPointInterpolation");
TypeName("volPointInterpolation");
// Constructors

View file

@ -74,7 +74,7 @@ Foam::bicgSolver::bicgSolver
coupleBouCoeffs,
coupleIntCoeffs,
interfaces,
dict.subDict("preconditioner")
dict
)
)
{}

View file

@ -78,7 +78,7 @@ Foam::bicgStabSolver::bicgStabSolver
coupleBouCoeffs,
coupleIntCoeffs,
interfaces,
dict.subDict("preconditioner")
dict
)
)
{}

View file

@ -74,7 +74,7 @@ Foam::cgSolver::cgSolver
coupleBouCoeffs,
coupleIntCoeffs,
interfaces,
dict.subDict("preconditioner")
dict
)
)
{}

View file

@ -146,7 +146,7 @@ Foam::deflationSolver::deflationSolver
coupleBouCoeffs,
coupleIntCoeffs,
interfaces,
dict.subDict("preconditioner")
dict
)
),
rpmOrder_(readLabel(dict.lookup("rpmOrder"))),

View file

@ -109,7 +109,7 @@ Foam::gmresSolver::gmresSolver
coupleBouCoeffs,
coupleIntCoeffs,
interfaces,
dict.subDict("preconditioner")
dict
)
),
nDirs_(readLabel(dict.lookup("nDirections")))

View file

@ -114,10 +114,12 @@ private:
// Private member functions
//- Check given temperature is within the range of the fitted coeffs
inline void checkT(const scalar T) const;
// Note: bounding T within range. HJ, 12/Oct/2010
inline void checkT(scalar& T) const;
//- Return the coefficients corresponding to the given temperature
inline const coeffArray& coeffs(const scalar T) const;
// Note: bounding T within range. HJ, 12/Oct/2010
inline const coeffArray& coeffs(scalar& T) const;
public:
@ -145,19 +147,23 @@ public:
// Member Functions
//- Heat capacity at constant pressure [J/(kmol K)]
inline scalar cp(const scalar T) const;
// Note: bounding T within range. HJ, 12/Oct/2010
inline scalar cp(scalar T) const;
//- Enthalpy [J/kmol]
inline scalar h(const scalar T) const;
// Note: bounding T within range. HJ, 12/Oct/2010
inline scalar h(scalar T) const;
//- Sensible enthalpy [J/kmol]
inline scalar hs(const scalar T) const;
// Note: bounding T within range. HJ, 12/Oct/2010
inline scalar hs(scalar T) const;
//- Chemical enthalpy [J/kmol]
inline scalar hc() const;
//- Entropy [J/(kmol K)]
inline scalar s(const scalar T) const;
// Note: bounding T within range. HJ, 12/Oct/2010
inline scalar s(scalar T) const;
// Member operators

View file

@ -54,17 +54,21 @@ inline Foam::janafThermo<equationOfState>::janafThermo
template<class equationOfState>
inline void Foam::janafThermo<equationOfState>::checkT(const scalar T) const
inline void Foam::janafThermo<equationOfState>::checkT(scalar& T) const
{
if (T < Tlow_ || T > Thigh_)
{
FatalErrorIn
// Improvements: graceful exit with recovery. HJ, 11/Oct/2010
InfoIn
(
"janafThermo<equationOfState>::checkT(const scalar T) const"
"janafThermo<equationOfState>::checkT(scalar& T) const"
) << "attempt to use janafThermo<equationOfState>"
" out of temperature range "
<< Tlow_ << " -> " << Thigh_ << "; T = " << T
<< abort(FatalError);
<< endl;
// Bracket T to avoid out-of-range error
T = Foam::min(Thigh_, Foam::max(T, Tlow_));
}
}
@ -73,9 +77,11 @@ template<class equationOfState>
inline const typename Foam::janafThermo<equationOfState>::coeffArray&
Foam::janafThermo<equationOfState>::coeffs
(
const scalar T
scalar& T
) const
{
// Note: T will be bounded by checkT in coeffs(T). No longer const
// HJ, 12/Oct/2010
checkT(T);
if (T < Tcommon_)
@ -103,7 +109,7 @@ inline Foam::janafThermo<equationOfState>::janafThermo
Thigh_(jt.Thigh_),
Tcommon_(jt.Tcommon_)
{
for (register label coefLabel=0; coefLabel<nCoeffs_; coefLabel++)
for (register label coefLabel = 0; coefLabel < nCoeffs_; coefLabel++)
{
highCpCoeffs_[coefLabel] = jt.highCpCoeffs_[coefLabel];
lowCpCoeffs_[coefLabel] = jt.lowCpCoeffs_[coefLabel];
@ -116,7 +122,7 @@ inline Foam::janafThermo<equationOfState>::janafThermo
template<class equationOfState>
inline Foam::scalar Foam::janafThermo<equationOfState>::cp
(
const scalar T
scalar T
) const
{
const coeffArray& a = coeffs(T);
@ -127,7 +133,7 @@ inline Foam::scalar Foam::janafThermo<equationOfState>::cp
template<class equationOfState>
inline Foam::scalar Foam::janafThermo<equationOfState>::h
(
const scalar T
scalar T
) const
{
const coeffArray& a = coeffs(T);
@ -142,7 +148,7 @@ inline Foam::scalar Foam::janafThermo<equationOfState>::h
template<class equationOfState>
inline Foam::scalar Foam::janafThermo<equationOfState>::hs
(
const scalar T
scalar T
) const
{
return h(T) - hc();
@ -167,9 +173,12 @@ inline Foam::scalar Foam::janafThermo<equationOfState>::hc() const
template<class equationOfState>
inline Foam::scalar Foam::janafThermo<equationOfState>::s
(
const scalar T
scalar T
) const
{
// Note: T will be bounded by checkT in coeffs(T). No longer const
// HJ, 12/Oct/2010
const coeffArray& a = coeffs(T);
return
this->RR*

View file

@ -41,6 +41,13 @@ const Foam::scalar Foam::specieThermo<thermo>::tol_
);
template<class thermo>
const Foam::scalar Foam::specieThermo<thermo>::TJump_
(
debug::tolerances("speciesThermoTJump", 20)
);
template<class thermo>
const int Foam::specieThermo<thermo>::maxIter_
(

View file

@ -98,13 +98,16 @@ class specieThermo
//- Convergence tolerance of energy -> temperature inversion functions
static const scalar tol_;
//- Max temperature jump of energy -> temperature inversion functions
static const scalar TJump_;
//- Max number of iterations in energy->temperature inversion functions
static const int maxIter_;
// Private member functions
//- return the temperature corresponding to the value of the
//- Return the temperature corresponding to the value of the
// thermodynamic property f, given the function f = F(T) and dF(T)/dT
inline scalar T
(
@ -131,7 +134,7 @@ public:
// Member Functions
// Fundamaental properties
// Fundamental properties
// (These functions must be provided in derived types)
// Heat capacity at constant pressure [J/(kmol K)]

View file

@ -54,19 +54,29 @@ inline Foam::scalar Foam::specieThermo<thermo>::T
do
{
// Limit the temperature jump in a single corrector to TJump_
// HJ, 12/Oct/2010
Test = Tnew;
Tnew = Test - ((this->*F)(Test) - f)/(this->*dFdT)(Test);
Tnew = Test
- Foam::min(((this->*F)(Test) - f)/(this->*dFdT)(Test), TJump_);
if (iter++ > maxIter_)
{
FatalErrorIn
// Improvements: graceful exit with recovery. HJ, 11/Oct/2010
InfoIn
(
"specieThermo<thermo>::T(scalar f, scalar T0, "
"scalar (specieThermo<thermo>::*F)(const scalar) const, "
"scalar (specieThermo<thermo>::*dFdT)(const scalar) const"
") const"
) << "Maximum number of iterations exceeded"
<< abort(FatalError);
) << "Maximum number of iterations exceeded. Rescue by HJ"
<< endl;
// Use value where dFdT is calculated using T0. HJ, 11/Oct/2010
Tnew = f/(this->*dFdT)(T0);
return Tnew;
}
} while (mag(Tnew - Test) > Ttol);

View file

@ -1,14 +0,0 @@
#!/bin/sh
currDir=`pwd`
application=`basename $currDir`
cases="springDamper sixDOFmotion"
tutorialPath=`dirname $0`/..
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
for case in $cases
do
cleanCase $case
rm $case/*.dat
done

View file

@ -1,13 +0,0 @@
#!/bin/sh
currDir=`pwd`
application=`basename $currDir`
cases="springDamper sixDOFmotion"
tutorialPath=`dirname $0`/..
. $WM_PROJECT_DIR/bin/tools/RunFunctions
for case in $cases
do
(cd $case; runApplication $application)
done

View file

@ -0,0 +1,7 @@
#!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -f *.dat

View file

@ -0,0 +1,7 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
application="sixDOFSolver"
runApplication $application

View file

@ -0,0 +1,7 @@
#!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -f *.dat

View file

@ -0,0 +1,7 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
application="sixDOFSolver"
runApplication $application

View file

@ -1,52 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5-dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
5
(
impellerWall
{
type wall;
nFaces 68;
startFace 1040;
}
baffleWall
{
type wall;
nFaces 84;
startFace 1108;
}
insideSlider
{
type patch;
nFaces 36;
startFace 1192;
}
outsideSlider
{
type patch;
nFaces 36;
startFace 1228;
}
defaultFaces
{
type empty;
nFaces 1152;
startFace 1264;
}
)
// ************************************************************************* //

View file

@ -10,12 +10,6 @@ FoamFile
{
version 2.0;
format ascii;
root "";
case "";
instance "";
local "";
class dictionary;
object fvSolution;
}
@ -24,12 +18,10 @@ FoamFile
solvers
{
pcorr PCG
pcorr
{
preconditioner
{
type DIC;
}
solver BiCGStab;
preconditioner DILU;
minIter 0;
maxIter 1000;
@ -37,59 +29,41 @@ solvers
relTol 0;
};
p PCG
p
{
preconditioner
{
type DIC;
}
solver CG;
preconditioner Cholesky;
minIter 0;
maxIter 1000;
tolerance 1e-06;
relTol 0.05;
tolerance 1e-07;
relTol 0.0;
};
pFinal PCG
pFinal
{
preconditioner
{
type DIC;
}
solver CG;
preconditioner Cholesky;
minIter 0;
maxIter 1000;
tolerance 1e-06;
tolerance 1e-07;
relTol 0;
};
U PBiCG
U
{
preconditioner
{
type DILU;
}
solver BiCGStab;
preconditioner DILU;
minIter 0;
maxIter 1000;
tolerance 1e-05;
relTol 0;
};
cellMotionUx PCG
{
preconditioner
{
type DIC;
}
minIter 0;
maxIter 1000;
tolerance 1e-08;
tolerance 1e-07;
relTol 0;
};
}
PISO
{
nCorrectors 4;

View file

@ -5,5 +5,5 @@
cleanCase
rm -rf VTK
rm constant/polyMesh/boundary
rm -f constant/polyMesh/boundary
rm -rf constant/polyMesh/sets

View file

@ -62,7 +62,7 @@ functions
phi phi;
// Where to load it from (if not already in solver)
functionObjectLibs ("libsampling.so");
functionObjectLibs ("libcheckFunctionObjects.so");
}
);

View file

@ -18,12 +18,10 @@ FoamFile
solvers
{
pcorr BiCGStab
pcorr
{
preconditioner
{
type DILU;
}
solver BiCGStab;
preconditioner DILU;
minIter 0;
maxIter 1000;
@ -31,12 +29,10 @@ solvers
relTol 0;
};
p BiCGStab
p
{
preconditioner
{
type DILU;
}
solver CG;
preconditioner Cholesky;
minIter 0;
maxIter 1000;
@ -44,12 +40,10 @@ solvers
relTol 0.0;
};
pFinal BiCGStab
pFinal
{
preconditioner
{
type DILU;
}
solver CG;
preconditioner Cholesky;
minIter 0;
maxIter 1000;
@ -57,12 +51,10 @@ solvers
relTol 0;
};
U BiCGStab
U
{
preconditioner
{
type DILU;
}
solver BiCGStab;
preconditioner DILU;
minIter 0;
maxIter 1000;
@ -71,6 +63,7 @@ solvers
};
}
PISO
{
nCorrectors 4;

View file

@ -25,7 +25,7 @@ License
Author
Frank Bos, TU Delft. All rights reserved.
\*----------------------------------------------------------------------------*/
\*---------------------------------------------------------------------------*/
#include "RBFMotionFunctionObject.H"
#include "addToRunTimeSelectionTable.H"
@ -56,8 +56,7 @@ Foam::RBFMotionFunctionObject::RBFMotionFunctionObject
const dictionary& dict
)
:
functionObject(),
name_(name),
functionObject(name),
time_(t),
regionName_(polyMesh::defaultRegion),
rotationAmplitude_(readScalar(dict.lookup("rotationAmplitude"))),

View file

@ -58,9 +58,6 @@ class RBFMotionFunctionObject
{
// Private data
//- Name
const word name_;
//- Reference to main object registry
const Time& time_;

View file

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

View file

@ -18,32 +18,29 @@ FoamFile
solvers
{
p CG
p
{
preconditioner
{
type DIC;
}
solver CG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
};
pFinal CG
pFinal
{
preconditioner
{
type DIC;
}
solver CG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
};
U BiCGStab
U
{
preconditioner
{
type DILU;
}
solver BiCGStab;
preconditioner DILU;
tolerance 1e-7;
relTol 0;
};

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
@ -10,6 +10,7 @@ FoamFile
version 2.0;
format binary;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -16,29 +16,33 @@ FoamFile
solvers
{
pcorr PCG
pcorr
{
solver PCG;
preconditioner DIC;
tolerance 1e-02;
relTol 0;
};
p PCG
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0.05;
};
pFinal PCG
pFinal
{
solver PCG;
preconditioner DIC;
tolerance 1e-06;
relTol 0;
};
U PBiCG
U
{
solver PBiCG;
preconditioner DILU;
tolerance 1e-05;
relTol 0;

View file

@ -1,22 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object tetFemSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
motionU ICCG 1e-06 0;
}
// ************************************************************************* //

View file

@ -0,0 +1,8 @@
#!/bin/sh
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -f 0/motionGamma
( cd setMotionMovingCone ; wclean )

View file

@ -0,0 +1,11 @@
#!/bin/sh
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Get application name from directory
application="icoDyMFoam"
compileApplication setMotionMovingCone
runApplication setMotionMovingCone
runApplication blockMesh
runApplication $application

View file

@ -1,84 +1,70 @@
/*---------------------------------------------------------------------------*\
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.4.1 |
| \\ / A nd | Web: http://www.openfoam.org |
| \\ / 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;
root "/home/hjasak/OpenFOAM/OpenFOAM-1.4.1/tutorials/icoDyMFoam";
case "movingConeMotion";
instance "constant";
local "polyMesh";
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
8
(
movingWall
{
movingWall
{
type wall;
nFaces 85;
startFace 3665;
}
farFieldMoving
{
}
farFieldMoving
{
type patch;
nFaces 50;
startFace 3750;
}
fixedWall
{
}
fixedWall
{
type wall;
nFaces 35;
startFace 3800;
}
axis
{
}
axis
{
type empty;
nFaces 0;
startFace 3835;
}
left
{
}
left
{
type patch;
nFaces 30;
startFace 3835;
}
farField
{
}
farField
{
type patch;
nFaces 35;
startFace 3865;
}
back
{
}
back
{
type wedge;
nFaces 1900;
startFace 3900;
}
front
{
}
front
{
type wedge;
nFaces 1900;
startFace 5800;
}
}
)
// ************************************************************************* //

View file

@ -1,4 +1,4 @@
/*---------------------------------------------------------------------------*\
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.4 |
@ -10,12 +10,6 @@ FoamFile
{
version 2.0;
format ascii;
root "";
case "";
instance "";
local "";
class dictionary;
object fvSolution;
}
@ -24,12 +18,10 @@ FoamFile
solvers
{
pcorr PCG
pcorr
{
preconditioner
{
type DIC;
}
solver PCG;
preconditioner DIC;
minIter 0;
maxIter 1000;
@ -37,12 +29,10 @@ solvers
relTol 0;
};
p PCG
p
{
preconditioner
{
type DIC;
}
solver PCG;
preconditioner DIC;
minIter 0;
maxIter 1000;
@ -50,12 +40,10 @@ solvers
relTol 0.05;
};
pFinal PCG
pFinal
{
preconditioner
{
type DIC;
}
solver PCG;
preconditioner DIC;
minIter 0;
maxIter 1000;
@ -63,33 +51,19 @@ solvers
relTol 0;
};
U PBiCG
U
{
preconditioner
{
type DILU;
}
solver PBiCG;
preconditioner DILU;
minIter 0;
maxIter 1000;
tolerance 1e-05;
relTol 0;
};
cellMotionUx PCG
{
preconditioner
{
type DIC;
}
minIter 0;
maxIter 1000;
tolerance 1e-08;
relTol 0;
};
}
PISO
{
nCorrectors 2;

View file

@ -18,8 +18,9 @@ FoamFile
solvers
{
motionU amgSolver
motionU
{
solver amgSolver;
cycle W-cycle;
policy AAMG;
nPreSweeps 0;

View file

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

View file

@ -18,12 +18,10 @@ FoamFile
solvers
{
pcorr PCG
pcorr
{
preconditioner
{
type DIC;
}
solver PCG;
preconditioner DIC;
minIter 0;
maxIter 1000;
@ -31,12 +29,10 @@ solvers
relTol 0;
};
p PCG
p
{
preconditioner
{
type DIC;
}
solver PCG;
preconditioner DIC;
minIter 0;
maxIter 1000;
@ -44,12 +40,10 @@ solvers
relTol 0.0;
};
pFinal PCG
pFinal
{
preconditioner
{
type DIC;
}
solver PCG;
preconditioner DIC;
minIter 0;
maxIter 1000;
@ -57,12 +51,10 @@ solvers
relTol 0;
};
U PBiCG
U
{
preconditioner
{
type DILU;
}
solver PBiCG;
preconditioner DILU;
minIter 0;
maxIter 1000;

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
@ -10,6 +10,7 @@ FoamFile
version 2.0;
format ascii;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
@ -10,6 +10,7 @@ FoamFile
version 2.0;
format ascii;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
@ -10,6 +10,7 @@ FoamFile
version 2.0;
format ascii;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -1,8 +1,8 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\ / F ield | OpenFOAM Extend Project: Open source CFD |
| \\ / O peration | Version: 1.6-ext |
| \\ / A nd | Web: www.extend-project.de |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
@ -10,6 +10,7 @@ FoamFile
version 2.0;
format ascii;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View file

@ -3,7 +3,5 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -R -f sets
echo "done!"
cleanCase
rm -rf sets

View file

@ -3,6 +3,5 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"
cleanCase

View file

@ -3,7 +3,6 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -R -f sets
echo "done!"
cleanCase
rm -rf sets

View file

@ -3,6 +3,5 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"
cleanCase

View file

@ -3,7 +3,6 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -R -f sets
echo "done!"
cleanCase
rm -rf sets

View file

@ -3,6 +3,6 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"
cleanCase
echo "done!"

View file

@ -3,7 +3,6 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -R -f sets
echo "done!"
cleanCase
rm -R -f sets

View file

@ -3,6 +3,5 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"
cleanCase

View file

@ -3,7 +3,6 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
rm -R -f sets
echo "done!"
cleanCase
rm -Rf sets

View file

@ -3,6 +3,5 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"
cleanCase

View file

@ -3,6 +3,5 @@
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"
cleanCase

View file

@ -4,5 +4,4 @@
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
echo "done!"