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

This commit is contained in:
mattijs
2011-08-09 10:48:25 +01:00
91 changed files with 38245 additions and 9880 deletions

View File

@ -27,11 +27,13 @@ License
#include "alphaContactAngleFvPatchScalarField.H"
#include "Time.H"
#include "subCycle.H"
#include "fvCFD.H"
#include "MULES.H"
#include "fvcSnGrad.H"
#include "fvcFlux.H"
// * * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * //
const scalar Foam::multiphaseMixture::convertToRad =
const Foam::scalar Foam::multiphaseMixture::convertToRad =
Foam::constant::mathematical::pi/180.0;
@ -249,10 +251,6 @@ void Foam::multiphaseMixture::solve()
label nAlphaSubCycles(readLabel(pimpleDict.lookup("nAlphaSubCycles")));
label nAlphaCorr(readLabel(pimpleDict.lookup("nAlphaCorr")));
bool cycleAlpha(Switch(pimpleDict.lookup("cycleAlpha")));
scalar cAlpha(readScalar(pimpleDict.lookup("cAlpha")));
@ -269,7 +267,7 @@ void Foam::multiphaseMixture::solve()
!(++alphaSubCycle).end();
)
{
solveAlphas(nAlphaCorr, cycleAlpha, cAlpha);
solveAlphas(cAlpha);
rhoPhiSum += (runTime.deltaT()/totalDeltaT)*rhoPhi_;
}
@ -277,7 +275,7 @@ void Foam::multiphaseMixture::solve()
}
else
{
solveAlphas(nAlphaCorr, cycleAlpha, cAlpha);
solveAlphas(cAlpha);
}
}
@ -481,8 +479,6 @@ Foam::multiphaseMixture::nearInterface() const
void Foam::multiphaseMixture::solveAlphas
(
const label nAlphaCorr,
const bool cycleAlpha,
const scalar cAlpha
)
{
@ -490,92 +486,108 @@ void Foam::multiphaseMixture::solveAlphas
nSolves++;
word alphaScheme("div(phi,alpha)");
word alphacScheme("div(phirb,alpha)");
tmp<fv::convectionScheme<scalar> > mvConvection
(
fv::convectionScheme<scalar>::New
(
mesh_,
alphaTable_,
phi_,
mesh_.divScheme(alphaScheme)
)
);
word alpharScheme("div(phirb,alpha)");
surfaceScalarField phic(mag(phi_/mesh_.magSf()));
phic = min(cAlpha*phic, max(phic));
for (int gCorr=0; gCorr<nAlphaCorr; gCorr++)
PtrList<surfaceScalarField> phiAlphaCorrs(phases_.size());
int phasei = 0;
forAllIter(PtrDictionary<phase>, phases_, iter)
{
phase* refPhasePtr = &refPhase_;
phase& alpha = iter();
if (cycleAlpha)
{
PtrDictionary<phase>::iterator refPhaseIter = phases_.begin();
for (label i=0; i<nSolves%phases_.size(); i++)
{
++refPhaseIter;
}
refPhasePtr = &refPhaseIter();
}
phase& refPhase = *refPhasePtr;
volScalarField refPhaseNew(refPhase);
refPhaseNew == 1.0;
rhoPhi_ = phi_*refPhase.rho();
forAllIter(PtrDictionary<phase>, phases_, iter)
{
phase& alpha = iter();
if (&alpha == &refPhase) continue;
fvScalarMatrix alphaEqn
phiAlphaCorrs.set
(
phasei,
new surfaceScalarField
(
fvm::ddt(alpha)
+ mvConvection->fvmDiv(phi_, alpha)
);
forAllIter(PtrDictionary<phase>, phases_, iter2)
{
phase& alpha2 = iter2();
if (&alpha2 == &alpha) continue;
surfaceScalarField phir(phic*nHatf(alpha, alpha2));
surfaceScalarField phirb12
fvc::flux
(
-fvc::flux(-phir, alpha2, alphacScheme)
);
phi_,
alpha,
alphaScheme
)
)
);
alphaEqn += fvm::div(phirb12, alpha, alphacScheme);
}
surfaceScalarField& phiAlphaCorr = phiAlphaCorrs[phasei];
alphaEqn.solve(mesh_.solver("alpha"));
forAllIter(PtrDictionary<phase>, phases_, iter2)
{
phase& alpha2 = iter2();
rhoPhi_ += alphaEqn.flux()*(alpha.rho() - refPhase.rho());
if (&alpha2 == &alpha) continue;
Info<< alpha.name() << " volume fraction, min, max = "
<< alpha.weightedAverage(mesh_.V()).value()
<< ' ' << min(alpha).value()
<< ' ' << max(alpha).value()
<< endl;
surfaceScalarField phir(phic*nHatf(alpha, alpha2));
refPhaseNew == refPhaseNew - alpha;
phiAlphaCorr += fvc::flux
(
-fvc::flux(-phir, alpha2, alpharScheme),
alpha,
alpharScheme
);
}
refPhase == refPhaseNew;
MULES::limit
(
geometricOneField(),
alpha,
phi_,
phiAlphaCorr,
zeroField(),
zeroField(),
1,
0,
3,
true
);
Info<< refPhase.name() << " volume fraction, min, max = "
<< refPhase.weightedAverage(mesh_.V()).value()
<< ' ' << min(refPhase).value()
<< ' ' << max(refPhase).value()
<< endl;
phasei++;
}
MULES::limitSum(phiAlphaCorrs);
rhoPhi_ = 0.0*phi_*refPhase_.rho();
volScalarField sumAlpha("sumAlpha", 0.0*refPhase_);
phasei = 0;
forAllIter(PtrDictionary<phase>, phases_, iter)
{
phase& alpha = iter();
surfaceScalarField& phiAlpha = phiAlphaCorrs[phasei];
phiAlpha += upwind<scalar>(mesh_, phi_).flux(alpha);
MULES::explicitSolve
(
geometricOneField(),
alpha,
phiAlpha,
zeroField(),
zeroField()
);
rhoPhi_ += phiAlpha*alpha.rho();
Info<< alpha.name() << " volume fraction, min, max = "
<< alpha.weightedAverage(mesh_.V()).value()
<< ' ' << min(alpha).value()
<< ' ' << max(alpha).value()
<< endl;
sumAlpha += alpha;
phasei++;
}
Info<< "Phase-sum volume fraction, min, max = "
<< sumAlpha.weightedAverage(mesh_.V()).value()
<< ' ' << min(sumAlpha).value()
<< ' ' << max(sumAlpha).value()
<< endl;
calcAlphas();
}

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -168,12 +168,7 @@ private:
void calcAlphas();
void solveAlphas
(
const label nAlphaCorr,
const bool cycleAlpha,
const scalar cAlpha
);
void solveAlphas(const scalar cAlpha);
tmp<surfaceVectorField> nHatfv
(

View File

@ -9,7 +9,7 @@ wmake snappyHexMesh
if [ -d "$CGAL_ARCH_PATH" ]
then
wmake cvMesh
cd cvMesh && ./Allwmake
fi
# ----------------------------------------------------------------- end-of-file

View File

@ -105,19 +105,19 @@ int main(int argc, char *argv[])
"file",
"specify an alternative dictionary for the topoSet dictionary"
);
# include "addRegionOption.H"
#include "addRegionOption.H"
argList::addBoolOption
(
"noSync",
"do not synchronise selection across coupled patches"
);
# include "setRootCase.H"
# include "createTime.H"
#include "setRootCase.H"
#include "createTime.H"
instantList timeDirs = timeSelector::selectIfPresent(runTime, args);
# include "createNamedPolyMesh.H"
#include "createNamedPolyMesh.H"
const bool noSync = args.optionFound("noSync");

View File

@ -912,7 +912,7 @@ DimensionedConstants
}
electromagnetic
{
e e [ 0 0 -1 0 0 1 0 ] 1.60218e-19;
e e [ 0 0 1 0 0 1 0 ] 1.60218e-19;
}
atomic
{
@ -942,7 +942,7 @@ DimensionedConstants
}
electromagnetic
{
e e [ 0 0 -1 0 0 1 0 ] 1.60218e-19;
e e [ 0 0 1 0 0 1 0 ] 1.60218e-19;
}
atomic
{

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -56,7 +56,7 @@ Foam::Istream& Foam::operator>>(Foam::Istream& is, FixedList<T, Size>& L)
{
L = dynamicCast<token::Compound<List<T> > >
(
firstToken.transferCompoundToken()
firstToken.transferCompoundToken(is)
);
}
else if (firstToken.isLabel())

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -59,7 +59,7 @@ Foam::Istream& Foam::operator>>(Istream& is, List<T>& L)
(
dynamicCast<token::Compound<List<T> > >
(
firstToken.transferCompoundToken()
firstToken.transferCompoundToken(is)
)
);
}

View File

@ -1,133 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Class
Foam::CompoundToken
Description
An abstract base class for managing compound tokens
\*---------------------------------------------------------------------------*/
#ifndef CompoundToken_H
#define CompoundToken_H
#include "refCount.H"
#include "typeInfo.H"
#include "autoPtr.H"
#include "runTimeSelectionTables.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of friend functions and operators
class CompoundToken;
Ostream& operator<<(Ostream&, const CompoundToken&);
/*---------------------------------------------------------------------------*\
Class CompoundToken Declaration
\*---------------------------------------------------------------------------*/
class CompoundToken
:
public refCount
{
// Private Member Functions
//- Disallow default bitwise copy construct
CompoundToken(const CompoundToken&);
//- Disallow default bitwise assignment
void operator=(const CompoundToken&);
public:
//- Runtime type information
virtual const word& type() const = 0;
// Declare run-time constructor selection tables
declareRunTimeSelectionTable
(
autoPtr,
CompoundToken,
Istream,
(const word& type, Istream& is),
(type, is)
);
// Constructors
//- Construct null
CompoundToken()
{}
//- Return the clone as this and increment reference count
virtual autoPtr<CompoundToken> clone() const = 0;
// Selectors
//- Select null constructed
static autoPtr<CompoundToken> New(const word& type, Istream& is);
//- Destructor
virtual ~CompoundToken();
// Member Functions
// Access
// Check
// Edit
// Write
virtual void write(Istream&) = 0;
// IOstream Operators
friend Ostream& operator<<(Ostream&, const CompoundToken&);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -63,11 +63,11 @@ Foam::autoPtr<Foam::token::compound> Foam::token::compound::New
if (cstrIter == IstreamConstructorTablePtr_->end())
{
FatalErrorIn("token::compound::New(const word&, Istream&)")
FatalIOErrorIn("token::compound::New(const word&, Istream&)", is)
<< "Unknown compound type " << compoundType << nl << nl
<< "Valid compound types:" << endl
<< IstreamConstructorTablePtr_->sortedToc()
<< abort(FatalError);
<< abort(FatalIOError);
}
return autoPtr<Foam::token::compound>(cstrIter()(is));
@ -86,15 +86,18 @@ bool Foam::token::compound::isCompound(const word& name)
}
Foam::token::compound& Foam::token::transferCompoundToken()
Foam::token::compound& Foam::token::transferCompoundToken(const Istream& is)
{
if (type_ == COMPOUND)
{
if (compoundTokenPtr_->empty())
{
FatalErrorIn("token::transferCompoundToken()")
<< "compound has already been transfered from token\n "
<< info() << abort(FatalError);
FatalIOErrorIn
(
"token::transferCompoundToken(const Istream& is)",
is
) << "compound has already been transfered from token\n "
<< info() << abort(FatalIOError);
}
else
{

View File

@ -351,7 +351,7 @@ public:
inline bool isCompound() const;
inline const compound& compoundToken() const;
compound& transferCompoundToken();
compound& transferCompoundToken(const Istream& is);
inline label lineNumber() const;
inline label& lineNumber();

View File

@ -44,7 +44,7 @@ const Foam::dimensionedScalar Foam::constant::electromagnetic::mu0
dimensionedScalar
(
"mu0",
dimensionSet(1, 2, -1, 0, 0, -2, 0),
dimensionSet(1, 1, -2, 0, 0, -2, 0),
4.0*constant::mathematical::pi*1e-07
)
)

View File

@ -145,7 +145,6 @@ Foam::pointField Foam::coupledPolyPatch::getAnchorPoints
Foam::scalarField Foam::coupledPolyPatch::calcFaceTol
(
const scalar matchTol,
const UList<face>& faces,
const pointField& points,
const pointField& faceCentres
@ -173,7 +172,7 @@ Foam::scalarField Foam::coupledPolyPatch::calcFaceTol
maxLenSqr = max(maxLenSqr, magSqr(pt - cc));
maxCmpt = max(maxCmpt, cmptMax(cmptMag(pt)));
}
tols[faceI] = max(SMALL*maxCmpt, matchTol*Foam::sqrt(maxLenSqr));
tols[faceI] = max(SMALL*maxCmpt, Foam::sqrt(maxLenSqr));
}
return tols;
}

View File

@ -160,7 +160,6 @@ protected:
// from face centre to any of the face vertices.
static scalarField calcFaceTol
(
const scalar matchTol,
const UList<face>& faces,
const pointField& points,
const pointField& faceCentres

View File

@ -304,9 +304,9 @@ void Foam::cyclicPolyPatch::calcTransforms
{
scalarField half0Tols
(
calcFaceTol
matchTolerance()
*calcFaceTol
(
matchTolerance(),
half0,
half0.points(),
static_cast<const pointField&>(half0Ctrs)
@ -562,7 +562,7 @@ void Foam::cyclicPolyPatch::getCentresAndAnchors
// Calculate typical distance per face
tols = calcFaceTol(matchTolerance(), pp1, pp1.points(), half1Ctrs);
tols = matchTolerance()*calcFaceTol(pp1, pp1.points(), half1Ctrs);
}

View File

@ -444,7 +444,7 @@ void Foam::oldCyclicPolyPatch::getCentresAndAnchors
// Calculate typical distance per face
tols = calcFaceTol(matchTolerance(), half1Faces, pp.points(), half1Ctrs);
tols = matchTolerance()*calcFaceTol(half1Faces, pp.points(), half1Ctrs);
}

View File

@ -179,6 +179,10 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
// Neighbour normals
vectorField nbrFaceNormals(neighbFaceAreas_.size());
// Face match tolerances
scalarField tols =
calcFaceTol(*this, points(), faceCentres());
// Calculate normals from areas and check
forAll(faceNormals, facei)
{
@ -194,7 +198,7 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
faceNormals[facei] = point(1, 0, 0);
nbrFaceNormals[facei] = faceNormals[facei];
}
else if (mag(magSf - nbrMagSf)/avSf > matchTolerance())
else if (mag(magSf - nbrMagSf) > matchTolerance()*sqr(tols[facei]))
{
fileName nm
(
@ -238,7 +242,8 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
<< "patch:" << name()
<< " my area:" << magSf
<< " neighbour area:" << nbrMagSf
<< " matching tolerance:" << matchTolerance()
<< " matching tolerance:"
<< matchTolerance()*sqr(tols[facei])
<< endl
<< "Mesh face:" << start()+facei
<< " vertices:"
@ -264,7 +269,7 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
neighbFaceCentres_,
faceNormals,
nbrFaceNormals,
calcFaceTol(matchTolerance(), *this, points(), faceCentres()),
matchTolerance()*tols,
matchTolerance()
);
}
@ -569,7 +574,7 @@ bool Foam::processorPolyPatch::order
// Calculate typical distance from face centre
scalarField tols
(
calcFaceTol(matchTolerance(), pp, pp.points(), pp.faceCentres())
matchTolerance()*calcFaceTol(pp, pp.points(), pp.faceCentres())
);
if (debug || masterCtrs.size() != pp.size())

View File

@ -86,13 +86,10 @@ Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
const dictionary& dict
)
:
totalPressureFvPatchScalarField(p, iF),
totalPressureFvPatchScalarField(p, iF, dict),
fanCurve_(dict),
direction_(fanFlowDirectionNames_.read(dict.lookup("direction")))
{
// Assign initial pressure by "value"
fvPatchField<scalar>::operator==(scalarField("value", dict, p.size()));
}
{}
Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2006-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -80,4 +80,60 @@ void Foam::MULES::implicitSolve
}
void Foam::MULES::limitSum(UPtrList<scalarField>& phiPsiCorrs)
{
forAll(phiPsiCorrs[0], facei)
{
scalar sumPos = 0;
scalar sumNeg = 0;
for (int phasei=0; phasei<phiPsiCorrs.size(); phasei++)
{
if (phiPsiCorrs[phasei][facei] > 0)
{
sumPos += phiPsiCorrs[phasei][facei];
}
else
{
sumNeg += phiPsiCorrs[phasei][facei];
}
}
scalar sum = sumPos + sumNeg;
if (sum > 0 && sumPos > VSMALL)
{
scalar lambda = -sumNeg/sumPos;
for (int phasei=0; phasei<phiPsiCorrs.size(); phasei++)
{
if (phiPsiCorrs[phasei][facei] > 0)
{
phiPsiCorrs[phasei][facei] *= lambda;
}
}
}
else if (sum < 0 && sumNeg < -VSMALL)
{
scalar lambda = -sumPos/sumNeg;
for (int phasei=0; phasei<phiPsiCorrs.size(); phasei++)
{
if (phiPsiCorrs[phasei][facei] < 0)
{
phiPsiCorrs[phasei][facei] *= lambda;
}
}
}
else
{
for (int phasei=0; phasei<phiPsiCorrs.size(); phasei++)
{
phiPsiCorrs[phasei][facei] = 0;
}
}
}
}
// ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2006-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -45,18 +45,27 @@ SourceFiles
#include "volFields.H"
#include "surfaceFieldsFwd.H"
#include "primitiveFieldsFwd.H"
#include "zero.H"
#include "geometricOneField.H"
#include "zero.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
namespace MULES
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace MULES
{
template<class RhoType, class SpType, class SuType>
void explicitSolve
(
const RhoType& rho,
volScalarField& psi,
const surfaceScalarField& phiPsi,
const SpType& Sp,
const SuType& Su
);
template<class RhoType, class SpType, class SuType>
void explicitSolve
@ -117,10 +126,29 @@ void limiter
const label nLimiterIter
);
} // End namespace MULES
template<class RhoType, class SpType, class SuType>
void limit
(
const RhoType& rho,
const volScalarField& psi,
const surfaceScalarField& phi,
surfaceScalarField& phiPsi,
const SpType& Sp,
const SuType& Su,
const scalar psiMax,
const scalar psiMin,
const label nLimiterIter,
const bool returnCorr
);
void limitSum(UPtrList<scalarField>& phiPsiCorrs);
template<class SurfaceScalarFieldList>
void limitSum(SurfaceScalarFieldList& phiPsiCorrs);
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace MULES
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2006-2011 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -43,58 +43,14 @@ void Foam::MULES::explicitSolve
(
const RhoType& rho,
volScalarField& psi,
const surfaceScalarField& phi,
surfaceScalarField& phiPsi,
const surfaceScalarField& phiPsi,
const SpType& Sp,
const SuType& Su,
const scalar psiMax,
const scalar psiMin
const SuType& Su
)
{
Info<< "MULES: Solving for " << psi.name() << endl;
const fvMesh& mesh = psi.mesh();
psi.correctBoundaryConditions();
surfaceScalarField phiBD(upwind<scalar>(psi.mesh(), phi).flux(psi));
surfaceScalarField& phiCorr = phiPsi;
phiCorr -= phiBD;
scalarField allLambda(mesh.nFaces(), 1.0);
slicedSurfaceScalarField lambda
(
IOobject
(
"lambda",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
mesh,
dimless,
allLambda,
false // Use slices for the couples
);
limiter
(
allLambda,
rho,
psi,
phiBD,
phiCorr,
Sp,
Su,
psiMax,
psiMin,
3
);
phiPsi = phiBD + lambda*phiCorr;
scalarField& psiIf = psi;
const scalarField& psi0 = psi.oldTime();
@ -127,6 +83,25 @@ void Foam::MULES::explicitSolve
}
template<class RhoType, class SpType, class SuType>
void Foam::MULES::explicitSolve
(
const RhoType& rho,
volScalarField& psi,
const surfaceScalarField& phi,
surfaceScalarField& phiPsi,
const SpType& Sp,
const SuType& Su,
const scalar psiMax,
const scalar psiMin
)
{
psi.correctBoundaryConditions();
limit(rho, psi, phi, phiPsi, Sp, Su, psiMax, psiMin, 3, false);
explicitSolve(rho, psi, phiPsi, Sp, Su);
}
template<class RhoType, class SpType, class SuType>
void Foam::MULES::implicitSolve
(
@ -614,4 +589,100 @@ void Foam::MULES::limiter
}
template<class RhoType, class SpType, class SuType>
void Foam::MULES::limit
(
const RhoType& rho,
const volScalarField& psi,
const surfaceScalarField& phi,
surfaceScalarField& phiPsi,
const SpType& Sp,
const SuType& Su,
const scalar psiMax,
const scalar psiMin,
const label nLimiterIter,
const bool returnCorr
)
{
const fvMesh& mesh = psi.mesh();
surfaceScalarField phiBD(upwind<scalar>(psi.mesh(), phi).flux(psi));
surfaceScalarField& phiCorr = phiPsi;
phiCorr -= phiBD;
scalarField allLambda(mesh.nFaces(), 1.0);
slicedSurfaceScalarField lambda
(
IOobject
(
"lambda",
mesh.time().timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE,
false
),
mesh,
dimless,
allLambda,
false // Use slices for the couples
);
limiter
(
allLambda,
rho,
psi,
phiBD,
phiCorr,
Sp,
Su,
psiMax,
psiMin,
nLimiterIter
);
if (returnCorr)
{
phiCorr *= lambda;
}
else
{
phiPsi = phiBD + lambda*phiCorr;
}
}
template<class SurfaceScalarFieldList>
void Foam::MULES::limitSum(SurfaceScalarFieldList& phiPsiCorrs)
{
{
UPtrList<scalarField> phiPsiCorrsInternal(phiPsiCorrs.size());
forAll(phiPsiCorrs, phasei)
{
phiPsiCorrsInternal.set(phasei, &phiPsiCorrs[phasei]);
}
limitSum(phiPsiCorrsInternal);
}
forAll(phiPsiCorrs[0].boundaryField(), patchi)
{
UPtrList<scalarField> phiPsiCorrsPatch(phiPsiCorrs.size());
forAll(phiPsiCorrs, phasei)
{
phiPsiCorrsPatch.set
(
phasei,
&phiPsiCorrs[phasei].boundaryField()[patchi]
);
}
limitSum(phiPsiCorrsPatch);
}
}
// ************************************************************************* //

View File

@ -147,7 +147,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
(
dynamicCast<token::Compound<List<scalar> > >
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -184,7 +184,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
(
dynamicCast<token::Compound<List<vector> > >
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -224,7 +224,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
token::Compound<List<sphericalTensor> >
>
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -264,7 +264,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
token::Compound<List<symmTensor> >
>
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -301,7 +301,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
(
dynamicCast<token::Compound<List<tensor> > >
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);

View File

@ -129,7 +129,7 @@ genericPointPatchField<Type>::genericPointPatchField
(
dynamicCast<token::Compound<List<scalar> > >
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -167,7 +167,7 @@ genericPointPatchField<Type>::genericPointPatchField
(
dynamicCast<token::Compound<List<vector> > >
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -208,7 +208,7 @@ genericPointPatchField<Type>::genericPointPatchField
token::Compound<List<sphericalTensor> >
>
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -249,7 +249,7 @@ genericPointPatchField<Type>::genericPointPatchField
token::Compound<List<symmTensor> >
>
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);
@ -287,7 +287,7 @@ genericPointPatchField<Type>::genericPointPatchField
(
dynamicCast<token::Compound<List<tensor> > >
(
fieldToken.transferCompoundToken()
fieldToken.transferCompoundToken(is)
)
);

View File

@ -52,7 +52,7 @@ functions
type fieldAverage;
// Where to load it from (if not already in solver)
functionObjectLibs ("libfieldAverage.so");
functionObjectLibs ("libfieldFunctionObjects.so");
// Function object enabled flag
enabled true;

View File

@ -34,7 +34,7 @@ Description
type fieldAverage;
// Where to load it from (if not already in solver)
functionObjectLibs ("libfieldAverage.so");
functionObjectLibs ("libfieldFunctionObjects.so");
// Whether to perform a clean restart, or start from previous
// averaging info if available

View File

@ -34,11 +34,13 @@ boundaryField
lowerWall
{
type kqRWallFunction;
value $internalField;
}
"motorBike_.*"
{
type kqRWallFunction;
value $internalField;
}
#include "include/frontBackUpperPatches"

View File

@ -34,11 +34,13 @@ boundaryField
lowerWall
{
type omegaWallFunction;
value $internalField;
}
"motorBike_.*"
{
type omegaWallFunction;
value $internalField;
}
#include "include/frontBackUpperPatches"

View File

@ -16,19 +16,19 @@ FoamFile
application simpleFoam;
startFrom latestTime;
startFrom latestTime;
startTime 0;
stopAt nextWrite;
stopAt endTime;
endTime 500;
deltaT 1;
writeControl timeStep;
writeControl timeStep;
writeInterval 1;
writeInterval 100;
purgeWrite 0;
@ -44,13 +44,6 @@ timePrecision 6;
runTimeModifiable true;
libs
(
"libOpenFOAM.so"
"libcompressibleTurbulenceModels.so"
"libcompressibleRASModels.so"
);
functions
{
#include "readFields"

View File

@ -27,7 +27,7 @@ gradSchemes
divSchemes
{
default none;
div(phi,U) Gauss linearUpwind grad(U);
div(phi,U) Gauss linearUpwindV grad(U);
div(phi,k) Gauss upwind;
div(phi,omega) Gauss upwind;
div((nuEff*dev(T(grad(U))))) Gauss linear;

View File

@ -0,0 +1,9 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
# ----------------------------------------------------------------- end-of-file

View File

@ -0,0 +1,11 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
runApplication blockMesh
runApplication cvMesh $nProc
runApplication checkMesh $nProc -constant -allGeometry -allTopology
# ----------------------------------------------------------------- end-of-file

View File

@ -0,0 +1,34 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Get the number of processors to run on from system/decomposeParDict
nProc=`grep numberOfSubdomains system/decomposeParDict \
| sed s/"numberOfSubdomains *\(.*\);"/"\1"/`
runApplication blockMesh
runApplication decomposePar
for dir in processor*
do
if [[ -d $dir ]]
then
cp -r $dir/constant/polyMesh $dir/constant/polyMesh_background
fi
done
runParallel cvMesh $nProc
runApplication reconstructParMesh -constant -mergeTol 1e-10
runParallel checkMesh $nProc -constant -allGeometry -allTopology
# To run from the same background mesh as before
# for dir in processor*;
# do
# rm -r $dir/constant/polyMesh
# cp -r $dir/constant/polyMesh_background $dir/constant/polyMesh
# done
# ----------------------------------------------------------------- end-of-file

View File

@ -0,0 +1,69 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 1.0;
xmin -1.3;
xmax 0.65;
ymin -1.1;
ymax 0.8;
zmin -1.4;
zmax 0.55;
vertices
(
($xmin $ymin $zmin)
($xmax $ymin $zmin)
($xmax $ymax $zmin)
($xmin $ymax $zmin)
($xmin $ymin $zmax)
($xmax $ymin $zmax)
($xmax $ymax $zmax)
($xmin $ymax $zmax)
);
blocks
(
hex (0 1 2 3 4 5 6 7) (11 11 9) simpleGrading (1 1 1)
);
edges
(
);
boundary
(
walls
{
type wall;
faces
(
(3 7 6 2)
(0 4 7 3)
(2 6 5 1)
(1 5 4 0)
(0 3 2 1)
(4 5 6 7)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //

View File

@ -8,40 +8,27 @@
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphas;
format binary;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
2
(
blob.stl_patch1
{
type zeroGradient;
type wall;
nFaces 64564;
startFace 459986;
}
rightWall
cvMesh_defaultPatch
{
type zeroGradient;
type wall;
nFaces 0;
startFace 524550;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type zeroGradient;
}
defaultFaces
{
type empty;
}
}
)
// ************************************************************************* //

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -28,19 +28,19 @@ startTime 0;
stopAt endTime;
endTime 0;
endTime 80;
deltaT 1;
writeControl timeStep;
writeInterval 1000; //10 to see the meshing steps
writeInterval 1000;
purgeWrite 0;
writeFormat ascii;
writeFormat binary;//ascii;
writePrecision 10;
writePrecision 12;
writeCompression uncompressed;
@ -50,5 +50,4 @@ timePrecision 6;
runTimeModifiable yes;
// ************************************************************************* //

View File

@ -27,16 +27,54 @@ FoamFile
geometry
{
flange.obj
blob.stl
{
type triSurfaceMesh;
}
refinementBox
{
type searchableBox;
min (-0.2 -0.6 -0.2);
max ( 0.4 0.2 0.35);
}
}
backgroundMeshDecomposition
{
minLevels 0;
sampleResolution 4;
spanScale 20;
maxCellWeightCoeff 20;
}
initialPoints
{
minimumSurfaceDistanceCoeff 0.55;
initialPointsMethod autoDensity;
// initialPointsMethod pointFile;
autoDensityCoeffs
{
minLevels 0;
maxSizeRatio 5.0;
sampleResolution 5;
surfaceSampleResolution 5;
}
pointFileCoeffs
{
pointFile "constant/internalDelaunayVertices";
}
}
surfaceConformation
{
locationInMesh (0 0 0);
locationInMesh (0.1 0.1 0.2);
pointPairDistanceCoeff 0.1;
@ -70,7 +108,8 @@ surfaceConformation
maxIterations 15;
iterationToInitialHitRatioLimit 0.001;
iterationToIntialHitRatioLimit 0.01;
iterationToInitialHitRatioLimit 0.01;
}
fineConformationControls
@ -89,44 +128,44 @@ surfaceConformation
maxIterations 15;
iterationToInitialHitRatioLimit 0.001;
iterationToInitialHitRatioLimit 0.002;
iterationToIntialHitRatioLimit 0.002;
}
geometryToConformTo
{
flange.obj
blob.stl
{
featureMethod extendedFeatureEdgeMesh;
extendedFeatureEdgeMesh "flange.extendedFeatureEdgeMesh";
featureMethod none;
}
}
additionalFeatures {}
}
initialPoints
{
minimumSurfaceDistanceCoeff 0.55;
initialPointsMethod pointFile;
pointFileCoeffs
additionalFeatures
{
pointFile "constant/internalDelaunayVertices";
}
}
motionControl
{
defaultCellSize 0.00075;
defaultCellSize 0.04;
// Assign a priority to all requests for cell sizes, the highest overrules.
defaultPriority 0;
cellSizeControlGeometry
{
blob.stl
{
priority 1;
mode bothSides;
cellSizeFunction uniformDistance;
uniformDistanceCoeffs
{
cellSize 0.02;
distance 0.1;
}
}
}
relaxationModel adaptiveLinear;
@ -139,13 +178,15 @@ motionControl
objOutput no;
timeChecks yes;
timeChecks no;
alignmentSearchSpokes 36;
maxLoadUnbalance 0.05;
alignmentSearchSpokes 24;
alignmentAcceptanceAngle 48;
sizeAndAlignmentRebuildFrequency 20;
sizeAndAlignmentRebuildFrequency 40;
pointInsertionCriteria
{
@ -171,37 +212,33 @@ motionControl
polyMeshFiltering
{
// Write the underlying Delaunay tet mesh at output time
writeTetDualMesh true;
writeTetDualMesh false;
filterSizeCoeff 0.2;
mergeClosenessCoeff 1e-4;
mergeClosenessCoeff 1e-9;
continueFilteringOnBadInitialPolyMesh true;
filterErrorReductionCoeff 0.5;
filterCountSkipThreshold 4;
surfaceStepFaceAngle 80;
maxCollapseIterations 25;
maxConsecutiveEqualFaceSets 5;
surfaceStepFaceAngle 80;
edgeCollapseGuardFraction 0.3;
maxCollapseFaceToPointSideLengthCoeff 0.35;
}
meshQualityControls
{
maxNonOrtho 65;
maxBoundarySkewness 50;
maxInternalSkewness 10;
maxConcave 80;
minVol 1e-20;
minTetQuality 1e-30;
minVol 0;
minArea -1;
minTwist 0.02;
minTwist 0.0;
minDeterminant 0.001;
minFaceWeight 0.02;
minVolRatio 0.01;
minTriangleTwist -1;
}
// ************************************************************************* //

View File

@ -11,45 +11,37 @@ FoamFile
format ascii;
class dictionary;
location "system";
object fvSchemes;
object decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
d2dt2Schemes
numberOfSubdomains 64;
method scotch;
// method ptscotch;
// method hierarchical;
simpleCoeffs
{
default steadyState;
n ( 2 2 1 );
delta 0.001;
}
gradSchemes
hierarchicalCoeffs
{
default Gauss cubic;
n ( 2 2 2 );
delta 0.001;
order xyz;
}
divSchemes
manualCoeffs
{
default Gauss cubic;
dataFile "";
}
laplacianSchemes
{
default Gauss linear uncorrected;
}
distributed no;
interpolationSchemes
{
default cubic;
}
snGradSchemes
{
default uncorrected;
}
fluxRequired
{
default no;
D ;
}
roots ( );
// ************************************************************************* //

View File

@ -15,40 +15,39 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
d2dt2Schemes
ddtSchemes
{
default steadyState;
default none;
}
gradSchemes
{
default Gauss cubic;
default none;
}
divSchemes
{
default Gauss cubic;
default none;
}
laplacianSchemes
{
default Gauss linear uncorrected;
default none;
}
interpolationSchemes
{
default cubic;
default none;
}
snGradSchemes
{
default uncorrected;
default none;
}
fluxRequired
{
default no;
D ;
}

View File

@ -17,25 +17,6 @@ FoamFile
solvers
{
"(D|Dcorr)"
{
solver GAMG;
tolerance 1e-06;
relTol 0.99;
smoother GaussSeidel;
cacheAgglomeration true;
nCellsInCoarsestLevel 6;
agglomerator faceAreaPair;
mergeLevels 1;
}
}
stressAnalysis
{
nCorrectors 1;
D 1e-10;
accelerationFactor 2;
}
// ************************************************************************* //

View File

@ -24,7 +24,7 @@ actions
source boxToCell;
sourceInfo
{
box (-100 -100 -0.01)(100 100 100);
box (-100 -100 -0.2)(100 100 100);
}
}
@ -61,42 +61,42 @@ actions
// ~~~~~~~~~~~~~~~~ //
{
name y;
name x;
type cellSet;
action new;
source boxToCell;
sourceInfo
{
box (-100 0 -100)(100 100 100);
box (-0.32 -100 -100)(100 100 100);
}
}
{
name yf;
name xf;
type faceSet;
action new;
source cellToFace;
sourceInfo
{
set y;
set x;
option all;
}
}
{
name y;
name x;
type cellSet;
action invert;
}
{
name yf;
name xf;
type faceSet;
action subset;
source cellToFace;
sourceInfo
{
set y;
set x;
option all;
}
}
@ -104,42 +104,43 @@ actions
// ~~~~~~~~~~~~~~~~ //
{
name x;
name sp;
type cellSet;
action new;
source boxToCell;
source sphereToCell;
sourceInfo
{
box (0 -100 -100)(100 100 100);
centre (-0.3 -0.3 -0.3);
radius 0.4;
}
}
{
name xf;
name spf;
type faceSet;
action new;
source cellToFace;
sourceInfo
{
set x;
set sp;
option all;
}
}
{
name x;
name sp;
type cellSet;
action invert;
}
{
name xf;
name spf;
type faceSet;
action subset;
source cellToFace;
sourceInfo
{
set x;
set sp;
option all;
}
}

View File

@ -1,48 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
surfacePointMerge constant/triSurface/m_car01_wheels.obj \
1e-2 constant/triSurface/m_car01_wheels_merge.obj \
> log.surfacePointMerge 2>&1
# Orient so point to be meshed is inside surface
surfaceOrient \
constant/triSurface/m_car01_wheels_merge.obj \
-inside -usePierceTest '(13 -200 149)' \
constant/triSurface/m_car01_wheels_merge_orient.obj \
> log.surfaceOrient.m_car01 2>&1
# Same for outside
surfaceOrient \
constant/triSurface/domain.stl \
-inside -usePierceTest '(13 -200 149)' \
constant/triSurface/domain_orient.stl \
> log.surfaceOrient.domain 2>&1
# Extract feature edges and points
runApplication surfaceFeatureExtract \
constant/triSurface/m_car01_wheels_merge_orient.obj \
m_car01 -includedAngle 125 -writeObj
mv log.surfaceFeatureExtract log.surfaceFeatureExtract.m_car01
unset FOAM_SIGFPE
runApplication surfaceFeatureExtract \
constant/triSurface/domain_orient.stl \
domain -includedAngle 125 -writeObj
mv log.surfaceFeatureExtract log.surfaceFeatureExtract.domain
# Generate aligned points (in constant/internalDelaunayVertices) and a
# mesh from that.
runApplication cvMesh
# Generate some sets for a bit of mesh inspection
runApplication topoSet -constant -time 0:100
# And a field for thresholding
writeCellCentres -constant
# ----------------------------------------------------------------- end-of-file

File diff suppressed because it is too large Load Diff

View File

@ -1,54 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
root "";
case "";
instance "";
local "";
class dictionary;
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 0; //80;
deltaT 1;
writeControl timeStep;
writeInterval 1000; //10 to see the meshing steps
purgeWrite 0;
writeFormat ascii;
writePrecision 10;
writeCompression uncompressed;
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
// ************************************************************************* //

View File

@ -1,473 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object cvMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
/*
Control dictionary for cvMesh - polyhedral mesh generator.
cvMesh phases:
1. fill volume with initial points (initialPoints subdictionary). An option
is to reread from previous set of points.
2. internal point motion (motionControl subdictionary)
3. every once in a while add point duplets/triplets to conform to
surfaces and features (surfaceConformation subdictionary)
4. back to 2
5. construct polyMesh.
- filter (polyMeshFiltering subdictionary)
- check (meshQualityControls subdictionary) and undo filtering
See also cvControls.H in the conformalVoronoiMesh library
*/
// Important:
// ----------
// Any scalar with a name <name>Coeff specifies a value that will be implemented
// as a faction of the local target cell size
// Any scalar with a name <name>Size specifies an absolute size.
// Geometry. Definition of all surfaces. All surfaces are of class
// searchableSurface.
// Surfaces need to be (almost) closed - use closedTriSurfaceMesh
// if they are not topologically closed. Surfaces need to be oriented so
// the space to be meshed is always on the inside of all surfaces. Use e.g.
// surfaceOrient.
geometry
{
// Internal shape
m_car01_wheels_merge_orient.obj
{
name m_car01;
type closedTriSurfaceMesh;
}
// Outside of domain
domain_orient.stl
{
name domain;
type triSurfaceMesh;
}
}
// Controls for conforming to the surfaces.
surfaceConformation
{
// A point inside surfaces that is inside mesh.
locationInMesh (13 -200 149);
// How far apart are point-duplets generated. Balance this between
// - very low distance: little chance of interference from other
// surfaces
// - largish distance: less non-orthogonality in final cell
// (circumcentre far away from centroid)
pointPairDistanceCoeff 0.1;
// Mixed feature edges - both inside and outside edges. Recreated
// by inserting triplets of points to recreate a single edge. Done for
// all edges emanating from point. triplets of points get inserted
// mixedFeaturePointPPDistanceCoeff distance away from feature point.
mixedFeaturePointPPDistanceCoeff 5.0;
// Distance to a feature point within which surface and edge
// conformation points are excluded - fraction of the local target
// cell size
featurePointExclusionDistanceCoeff 0.4;
// Distance to an existing feature edge conformation location
// within which other edge conformation location are excluded -
// fraction of the local target cell size
featureEdgeExclusionDistanceCoeff 0.2;
// Optimisation: do not check for surface intersection (of dual edges)
// for points near to surface.
surfaceSearchDistanceCoeff 2.5;
// Maximum allowable protrusion through the surface before
// conformation points are added - fraction of the local target
// cell size. These small protusions are (hopefully) done by mesh filtering
// instead.
maxSurfaceProtrusionCoeff 0.1;
// If feature edge with large angle (so more than 125 degrees) introduce
// additional points to create two half angled cells (= mitering).
maxQuadAngle 125;
// Frequency to redo surface conformation (expensive).
surfaceConformationRebuildFrequency 10;
// Initial and intermediate controls
coarseConformationControls
{
// Initial conformation
initial
{
// We've got a point poking through the surface. Don't do any
// surface conformation if near feature edge (since feature edge
// conformation should have priority)
// distance to search for near feature edges
edgeSearchDistCoeff 1.1;
// Proximity to a feature edge where a surface hit is
// not created, only the edge conformation is created
// - fraction of the local target cell size. Coarse
// conformation, initial protrusion tests.
surfacePtReplaceDistCoeff 0.5;
}
// Same for iterations
iteration
{
edgeSearchDistCoeff 1.25;
surfacePtReplaceDistCoeff 0.7;
}
// Stop either at maxIterations or if the number of surface pokes
// is very small (iterationToInitialHitRatioLimit * initial number)
// Note: perhaps iterationToInitialHitRatioLimit should be absolute
// count?
maxIterations 15;
iterationToInitialHitRatioLimit 0.001;
}
// Final (at endTime) controls
fineConformationControls
{
initial
{
edgeSearchDistCoeff 1.1;
surfacePtReplaceDistCoeff 0.5;
}
iteration
{
edgeSearchDistCoeff 1.25;
surfacePtReplaceDistCoeff 0.7;
}
maxIterations 15;
iterationToInitialHitRatioLimit 0.001;
}
// Geometry to mesh to
geometryToConformTo
{
m_car01
{
featureMethod extendedFeatureEdgeMesh;
extendedFeatureEdgeMesh "m_car01_merge_orient.extendedFeatureEdgeMesh";
}
domain
{
featureMethod extendedFeatureEdgeMesh;
extendedFeatureEdgeMesh "domain_orient.extendedFeatureEdgeMesh";
}
}
additionalFeatures {}
}
// Controls for seeding initial points and general control of the target
// cell size (used everywhere)
initialPoints
{
// Do not place point closer than minimumSurfaceDistanceCoeff
// to the surface. Is fraction of local target cell size (see below)
minimumSurfaceDistanceCoeff 0.55;
//initialPointsMethod autoDensity;
// initialPointsMethod uniformGrid;
// initialPointsMethod bodyCentredCubic;
initialPointsMethod pointFile;
// Take boundbox of all geometry. Samples with this box. If too much
// samples (due to target cell size) in box split box.
autoDensityCoeffs
{
// Initial number of refinement levels. Needs to be enough to pick
// up features due to size ratio. If not enough it will take longer
// to determine point seeding.
minLevels 1;
// Split box if ratio of min to max cell size larger than maxSizeRatio
maxSizeRatio 5.0;
// Per box sample 3x3x3 internally
sampleResolution 3;
// Additionally per face of the box sample 3
surfaceSampleResolution 3;
}
uniformGridCoeffs
{
// Absolute cell size.
initialCellSize 0.0015;
randomiseInitialGrid yes;
randomPerturbationCoeff 0.02;
}
bodyCentredCubicCoeffs
{
initialCellSize 0.0015;
randomiseInitialGrid no;
randomPerturbationCoeff 0.1;
}
pointFileCoeffs
{
// Reads points from file. Still rejects points that are too
// close to the surface (minimumSurfaceDistanceCoeff) or on the
// wrong side of the surfaces.
pointFile "constant/internalDelaunayVertices";
}
}
// Control size of voronoi cells i.e. distance between points. This
// determines the target cell size which is used everywhere.
// It determines the cell size given a location. It then uses all
// the rules
// - defaultCellSize
// - cellSizeControlGeometry
// to determine target cell size. Rule with highest priority wins. If same
// priority smallest cell size wins.
motionControl
{
// Absolute cell size of back ground mesh. This is the maximum cell size.
defaultCellSize 10;
// Assign a priority to all requests for cell sizes, the highest overrules.
defaultPriority 0;
cellSizeControlGeometry
{
nearCar
{
// optional name of geometry
surface m_car01;
priority 1;
mode bothSides;
cellSizeFunction linearDistance;
// cellSizeFunctions:
// uniform : uniform size
// uniformDistance : fixed size for all within distance
// linearSpatial : grading in specified direction only
// linearDistance : vary linearly as distance to surface
// surfaceOffsetLinearDistance : constant close to surface then
// fade like linearDistance
// Vary from surfaceCellSize (close to the surface) to
// distanceCellSize (further than 'distance')
linearDistanceCoeffs
{
surfaceCellSize 1; // absolute size
distanceCellSize $defaultCellSize;
distance 10.0;
}
}
}
// Underrelaxation for point motion. Simulated annealing: starts off at 1
// and lowers to 0 (at simulation endTime) to converge points.
// adaptiveLinear is preferred choice.
// Points move by e.g. 10% of tet size.
relaxationModel adaptiveLinear; //rampHoldFall
adaptiveLinearCoeffs
{
relaxationStart 1.0;
relaxationEnd 0.0;
}
// Output lots and lots of .obj files
objOutput no;
// Timing and memory usage.
timeChecks yes;
// Number of rays in plane parallel to nearest surface. Used to detect
// next closest surfaces. Used to work out alignment (three vectors)
// to surface.
// Note that only the initial points (from the seeding) calculate this
// information so if these are not fine enough the alignment will
// not be correct. (any points added during the running will lookup
// this information from the nearest initial point since it is
// expensive)
alignmentSearchSpokes 36;
// For each delaunay edge (between two vertices, becomes
// the Voronoi face normal) snap to the alignment direction if within
// alignmentAcceptanceAngle. Slightly > 45 is a good choice - prevents
// flipping.
alignmentAcceptanceAngle 48;
// How often to rebuild the alignment info (expensive)
sizeAndAlignmentRebuildFrequency 20;
// When to insert points. Not advisable change to
// these settings.
pointInsertionCriteria
{
// If edge larger than 1.75 target cell size
// (so tets too large/stretched) insert point
cellCentreDistCoeff 1.75;
// Do not insert point if voronoi face (on edge) very small.
faceAreaRatioCoeff 0.0025;
// Insert point only if edge closely aligned to local alignment
// direction.
acceptanceAngle 21.5;
}
// Opposite: remove point if mesh too compressed. Do not change these
// settings.
pointRemovalCriteria
{
cellCentreDistCoeff 0.65;
}
// How to determine the point motion. All edges got some direction.
// Sum all edge contributions to determine point motion. Weigh by
// face area so motion is preferentially determined by large faces
// (or more importantly ignore contribution from small faces).
// Do not change these settings.
faceAreaWeightModel piecewiseLinearRamp;
piecewiseLinearRampCoeffs
{
lowerAreaFraction 0.5;
upperAreaFraction 1.0;
}
}
// After simulation, when converting to polyMesh, filter out small faces/edges.
// Do not change. See cvControls.H
polyMeshFiltering
{
// Write the underlying Delaunay tet mesh at output time
writeTetDualMesh true;
// Upper limit on the size of faces to be filtered.
// fraction of the local target cell size
filterSizeCoeff 0.2;
// Upper limit on how close two dual vertices can be before
// being merged, fraction of the local target cell size
mergeClosenessCoeff 1e-9;
// To not filter: set maxNonOrtho to 1 (so check fails) and then
// set continueFilteringOnBadInitialPolyMesh to false.
continueFilteringOnBadInitialPolyMesh false; //true;
// When a face is "bad", what fraction should the filterSizeCoeff be
// reduced by. Recursive, so for a filterCount value of fC, the
// filterSizeCoeff is reduced by pow(filterErrorReductionCoeff, fC)
filterErrorReductionCoeff 0.5;
// Maximum number of filterCount applications before a face
// is not attempted to be filtered
filterCountSkipThreshold 4;
// Maximum number of permissible iterations of the face collapse
// algorithm. The value to choose will be related the maximum number
// of points on a face that is to be collapsed and how many faces
// around it need to be collapsed.
maxCollapseIterations 25;
// Maximum number of times an to allow an equal faceSet to be
// returned from the face quality assessment before stopping iterations
// to break an infinitie loop.
maxConsecutiveEqualFaceSets 5;
// Remove little steps (almost perp to surface) by collapsing face.
surfaceStepFaceAngle 80;
// Do not collapse face to edge if should become edges
edgeCollapseGuardFraction 0.3;
// Only collapse face to point if high aspect ratio
maxCollapseFaceToPointSideLengthCoeff 0.35;
}
// Generic mesh quality settings. At any undoable phase these determine
// where to undo. Same as in snappyHexMeshDict
meshQualityControls
{
//- Maximum non-orthogonality allowed. Set to 180 to disable.
maxNonOrtho 65;
//- Max skewness allowed. Set to <0 to disable.
maxBoundarySkewness 50;
maxInternalSkewness 10;
//- Max concaveness allowed. Is angle (in degrees) below which concavity
// is allowed. 0 is straight face, <0 would be convex face.
// Set to 180 to disable.
maxConcave 80;
//- Minimum pyramid volume. Is absolute volume of cell pyramid.
// Set to a sensible fraction of the smallest cell volume expected.
// Set to very negative number (e.g. -1E30) to disable.
minVol -1E30;
//- Minimum quality of the tet formed by the
// variable base point minimum decomposition triangles and
// the cell centre (so not face-centre decomposition).
// This has to be a positive number for tracking
// to work. Set to very negative number (e.g. -1E30) to
// disable.
// <0 = inside out tet,
// 0 = flat tet
// 1 = regular tet
minTetQuality 1e-30;
//- Minimum absolute face area. Set to <0 to disable.
minArea -1;
//- Minimum face twist. Set to <-1 to disable. dot product of face normal
//- and face centre triangles normal
minTwist 0.001;
//- minimum normalised cell determinant
//- 1 = hex, <= 0 = folded or flattened illegal cell
minDeterminant 0.001;
//- minFaceWeight (0 -> 0.5)
minFaceWeight 0.02;
//- minVolRatio (0 -> 1)
minVolRatio 0.01;
//must be >0 for Fluent compatibility
minTriangleTwist -1;
}
// ************************************************************************* //

View File

@ -1,148 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object topoSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
actions
(
{
name z;
type cellSet;
action new;
source boxToCell;
sourceInfo
{
box (-100000 -100000 50)(100000 100000 100000);
}
}
{
name zf;
type faceSet;
action new;
source cellToFace;
sourceInfo
{
set z;
option all;
}
}
{
name z;
type cellSet;
action invert;
}
{
name zf;
type faceSet;
action subset;
source cellToFace;
sourceInfo
{
set z;
option all;
}
}
// ~~~~~~~~~~~~~~~~ //
{
name y;
type cellSet;
action new;
source boxToCell;
sourceInfo
{
box (-100000 0 -100000)(100000 100000 100000);
}
}
{
name yf;
type faceSet;
action new;
source cellToFace;
sourceInfo
{
set y;
option all;
}
}
{
name y;
type cellSet;
action invert;
}
{
name yf;
type faceSet;
action subset;
source cellToFace;
sourceInfo
{
set y;
option all;
}
}
// ~~~~~~~~~~~~~~~~ //
{
name x;
type cellSet;
action new;
source boxToCell;
sourceInfo
{
box (0 -100000 -100000)(100000 100000 100000);
}
}
{
name xf;
type faceSet;
action new;
source cellToFace;
sourceInfo
{
set x;
option all;
}
}
{
name x;
type cellSet;
action invert;
}
{
name xf;
type faceSet;
action subset;
source cellToFace;
sourceInfo
{
set x;
option all;
}
}
);
// ************************************************************************* //

View File

@ -1,24 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
rm -r \
constant/extendedFeatureEdgeMesh \
constant/internalDelaunayVertices \
constant/ccx constant/ccy constant/ccz \
constant/targetCellSize \
constant/tetDualMesh \
constant/polyMesh/boundary \
constant/triSurface/m_car01_wheel_merge.obj \
constant/triSurface/m_car01_wheel_merge_orient.eMesh \
constant/triSurface/m_car01_wheel_merge_orient.obj \
constant/triSurface/small_orient.eMesh \
constant/triSurface/small_orient.stl \
> /dev/null 2>&1
rm constant/triSurface/*.eMesh > /dev/null 2>&1
cleanCase
# ----------------------------------------------------------------- end-of-file

View File

@ -1,48 +0,0 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
surfacePointMerge constant/triSurface/m_car01_wheel.obj \
1e-2 constant/triSurface/m_car01_wheel_merge.obj \
> log.surfacePointMerge 2>&1
# Orient so point to be meshed is inside surface
surfaceOrient \
constant/triSurface/m_car01_wheel_merge.obj \
-inside -usePierceTest '(-100 0 170)' \
constant/triSurface/m_car01_wheel_merge_orient.obj \
> log.surfaceOrient.m_car01 2>&1
# Same for outside
surfaceOrient \
constant/triSurface/small.stl \
-inside -usePierceTest '(-100 0 170)' \
constant/triSurface/small_orient.stl \
> log.surfaceOrient.small 2>&1
# Extract feature edges and points
runApplication surfaceFeatureExtract \
constant/triSurface/m_car01_wheel_merge_orient.obj \
m_car01 -includedAngle 165 -writeObj
mv log.surfaceFeatureExtract log.surfaceFeatureExtract.m_car01
unset FOAM_SIGFPE
runApplication surfaceFeatureExtract \
constant/triSurface/small_orient.stl \
small -includedAngle 125 -writeObj
mv log.surfaceFeatureExtract log.surfaceFeatureExtract.small
# Generate aligned points (in constant/internalDelaunayVertices) and a
# mesh from that.
runApplication cvMesh
# Generate some sets for a bit of mesh inspection
runApplication topoSet -constant -time 0:100
# And a field for thresholding
writeCellCentres -constant
# ----------------------------------------------------------------- end-of-file

View File

@ -1,86 +0,0 @@
solid ascii
facet normal -1 0 0
outer loop
vertex -200 -50 0
vertex -200 -50 200
vertex -200 250 0
endloop
endfacet
facet normal -1 0 0
outer loop
vertex -200 250 200
vertex -200 250 0
vertex -200 -50 200
endloop
endfacet
facet normal 1 0 0
outer loop
vertex 0 -50 0
vertex 0 250 0
vertex 0 -50 200
endloop
endfacet
facet normal 1 -0 0
outer loop
vertex 0 250 200
vertex 0 -50 200
vertex 0 250 0
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex -200 -50 0
vertex 0 -50 0
vertex -200 -50 200
endloop
endfacet
facet normal 0 -1 0
outer loop
vertex 0 -50 200
vertex -200 -50 200
vertex 0 -50 0
endloop
endfacet
facet normal 0 1 0
outer loop
vertex -200 250 0
vertex -200 250 200
vertex 0 250 0
endloop
endfacet
facet normal 0 1 -0
outer loop
vertex 0 250 200
vertex 0 250 0
vertex -200 250 200
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex -200 -50 0
vertex -200 250 0
vertex 0 -50 0
endloop
endfacet
facet normal 0 0 -1
outer loop
vertex 0 250 0
vertex 0 -50 0
vertex -200 250 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -200 -50 200
vertex 0 -50 200
vertex -200 250 200
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 0 250 200
vertex -200 250 200
vertex 0 -50 200
endloop
endfacet
endsolid

View File

@ -1,54 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
root "";
case "";
instance "";
local "";
class dictionary;
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 0; //80;
deltaT 1;
writeControl timeStep;
writeInterval 1000; //10 to see the meshing steps
purgeWrite 0;
writeFormat ascii;
writePrecision 10;
writeCompression uncompressed;
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
// ************************************************************************* //

View File

@ -1,474 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object cvMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
/*
Control dictionary for cvMesh - polyhedral mesh generator.
cvMesh phases:
1. fill volume with initial points (initialPoints subdictionary). An option
is to reread from previous set of points.
2. internal point motion (motionControl subdictionary)
3. every once in a while add point duplets/triplets to conform to
surfaces and features (surfaceConformation subdictionary)
4. back to 2
5. construct polyMesh.
- filter (polyMeshFiltering subdictionary)
- check (meshQualityControls subdictionary) and undo filtering
See also cvControls.H in the conformalVoronoiMesh library
*/
// Important:
// ----------
// Any scalar with a name <name>Coeff specifies a value that will be implemented
// as a faction of the local target cell size
// Any scalar with a name <name>Size specifies an absolute size.
// Geometry. Definition of all surfaces. All surfaces are of class
// searchableSurface.
// Surfaces need to be (almost) closed - use closedTriSurfaceMesh
// if they are not topologically closed. Surfaces need to be oriented so
// the space to be meshed is always on the inside of all surfaces. Use e.g.
// surfaceOrient.
geometry
{
// Internal shape
m_car01_wheel_merge_orient.obj
{
name m_car01;
type closedTriSurfaceMesh;
}
// Outside of domain
small_orient.stl
{
name small;
type triSurfaceMesh;
}
}
// Controls for conforming to the surfaces.
surfaceConformation
{
// A point inside surfaces that is inside mesh.
locationInMesh (-100 0 170);
// How far apart are point-duplets generated. Balance this between
// - very low distance: little chance of interference from other
// surfaces
// - largish distance: less non-orthogonality in final cell
// (circumcentre far away from centroid)
pointPairDistanceCoeff 0.1;
// Mixed feature points - connected to both inside and outside edges.
// Recreated by inserting triplets of points to recreate a single edge.
// Done for all edges emanating from point. triplets of points get inserted
// mixedFeaturePointPPDistanceCoeff distance away from feature point.
// Set to a positive number to enable.
mixedFeaturePointPPDistanceCoeff 5.0;
// Distance to a feature point within which surface and edge
// conformation points are excluded - fraction of the local target
// cell size
featurePointExclusionDistanceCoeff 0.4;
// Distance to an existing feature edge conformation location
// within which other edge conformation location are excluded -
// fraction of the local target cell size
featureEdgeExclusionDistanceCoeff 0.2;
// Optimisation: do not check for surface intersection (of dual edges)
// for points near to surface.
surfaceSearchDistanceCoeff 2.5;
// Maximum allowable protrusion through the surface before
// conformation points are added - fraction of the local target
// cell size. These small protusions are (hopefully) done by mesh filtering
// instead.
maxSurfaceProtrusionCoeff 0.1;
// If feature edge with large angle (so more than 125 degrees) introduce
// additional points to create two half angled cells (= mitering).
maxQuadAngle 125;
// Frequency to redo surface conformation (expensive).
surfaceConformationRebuildFrequency 10;
// Initial and intermediate controls
coarseConformationControls
{
// Initial conformation
initial
{
// We've got a point poking through the surface. Don't do any
// surface conformation if near feature edge (since feature edge
// conformation should have priority)
// distance to search for near feature edges
edgeSearchDistCoeff 1.1;
// Proximity to a feature edge where a surface hit is
// not created, only the edge conformation is created
// - fraction of the local target cell size. Coarse
// conformation, initial protrusion tests.
surfacePtReplaceDistCoeff 0.5;
}
// Same for iterations
iteration
{
edgeSearchDistCoeff 1.25;
surfacePtReplaceDistCoeff 0.7;
}
// Stop either at maxIterations or if the number of surface pokes
// is very small (iterationToInitialHitRatioLimit * initial number)
// Note: perhaps iterationToInitialHitRatioLimit should be absolute
// count?
maxIterations 15;
iterationToInitialHitRatioLimit 0.001;
}
// Final (at endTime) controls
fineConformationControls
{
initial
{
edgeSearchDistCoeff 1.1;
surfacePtReplaceDistCoeff 0.5;
}
iteration
{
edgeSearchDistCoeff 1.25;
surfacePtReplaceDistCoeff 0.7;
}
maxIterations 15;
iterationToInitialHitRatioLimit 0.001;
}
// Geometry to mesh to
geometryToConformTo
{
m_car01
{
featureMethod extendedFeatureEdgeMesh;
extendedFeatureEdgeMesh "m_car01_wheel_merge_orient.extendedFeatureEdgeMesh";
}
small
{
featureMethod extendedFeatureEdgeMesh;
extendedFeatureEdgeMesh "small_orient.extendedFeatureEdgeMesh";
}
}
additionalFeatures {}
}
// Controls for seeding initial points and general control of the target
// cell size (used everywhere)
initialPoints
{
// Do not place point closer than minimumSurfaceDistanceCoeff
// to the surface. Is fraction of local target cell size (see below)
minimumSurfaceDistanceCoeff 0.55;
initialPointsMethod autoDensity;
// initialPointsMethod uniformGrid;
// initialPointsMethod bodyCentredCubic;
// initialPointsMethod pointFile;
// Take boundbox of all geometry. Samples with this box. If too much
// samples (due to target cell size) in box split box.
autoDensityCoeffs
{
// Initial number of refinement levels. Needs to be enough to pick
// up features due to size ratio. If not enough it will take longer
// to determine point seeding.
minLevels 3;
// Split box if ratio of min to max cell size larger than maxSizeRatio
maxSizeRatio 5.0;
// Per box sample 3x3x3 internally
sampleResolution 3;
// Additionally per face of the box sample 3
surfaceSampleResolution 3;
}
uniformGridCoeffs
{
// Absolute cell size.
initialCellSize 0.0015;
randomiseInitialGrid yes;
randomPerturbationCoeff 0.02;
}
bodyCentredCubicCoeffs
{
initialCellSize 0.0015;
randomiseInitialGrid no;
randomPerturbationCoeff 0.1;
}
pointFileCoeffs
{
// Reads points from file. Still rejects points that are too
// close to the surface (minimumSurfaceDistanceCoeff) or on the
// wrong side of the surfaces.
pointFile "constant/internalDelaunayVertices";
}
}
// Control size of voronoi cells i.e. distance between points. This
// determines the target cell size which is used everywhere.
// It determines the cell size given a location. It then uses all
// the rules
// - defaultCellSize
// - cellSizeControlGeometry
// to determine target cell size. Rule with highest priority wins. If same
// priority smallest cell size wins.
motionControl
{
// Absolute cell size of back ground mesh. This is the maximum cell size.
defaultCellSize 10;
// Assign a priority to all requests for cell sizes, the highest overrules.
defaultPriority 0;
cellSizeControlGeometry
{
nearCar
{
// optional name of geometry
surface m_car01;
priority 1;
mode bothSides;
cellSizeFunction linearDistance;
// cellSizeFunctions:
// uniform : uniform size
// uniformDistance : fixed size for all within distance
// linearSpatial : grading in specified direction only
// linearDistance : vary linearly as distance to surface
// surfaceOffsetLinearDistance : constant close to surface then
// fade like linearDistance
// Vary from surfaceCellSize (close to the surface) to
// distanceCellSize (further than 'distance')
linearDistanceCoeffs
{
surfaceCellSize 1; // absolute size
distanceCellSize $defaultCellSize;
distance 10.0;
}
}
}
// Underrelaxation for point motion. Simulated annealing: starts off at 1
// and lowers to 0 (at simulation endTime) to converge points.
// adaptiveLinear is preferred choice.
// Points move by e.g. 10% of tet size.
relaxationModel adaptiveLinear; //rampHoldFall
adaptiveLinearCoeffs
{
relaxationStart 1.0;
relaxationEnd 0.0;
}
// Output lots and lots of .obj files
objOutput no;
// Timing and memory usage.
timeChecks yes;
// Number of rays in plane parallel to nearest surface. Used to detect
// next closest surfaces. Used to work out alignment (three vectors)
// to surface.
// Note that only the initial points (from the seeding) calculate this
// information so if these are not fine enough the alignment will
// not be correct. (any points added during the running will lookup
// this information from the nearest initial point since it is
// expensive)
alignmentSearchSpokes 36;
// For each delaunay edge (between two vertices, becomes
// the Voronoi face normal) snap to the alignment direction if within
// alignmentAcceptanceAngle. Slightly > 45 is a good choice - prevents
// flipping.
alignmentAcceptanceAngle 48;
// How often to rebuild the alignment info (expensive)
sizeAndAlignmentRebuildFrequency 20;
// When to insert points. Not advisable change to
// these settings.
pointInsertionCriteria
{
// If edge larger than 1.75 target cell size
// (so tets too large/stretched) insert point
cellCentreDistCoeff 1.75;
// Do not insert point if voronoi face (on edge) very small.
faceAreaRatioCoeff 0.0025;
// Insert point only if edge closely aligned to local alignment
// direction.
acceptanceAngle 21.5;
}
// Opposite: remove point if mesh too compressed. Do not change these
// settings.
pointRemovalCriteria
{
cellCentreDistCoeff 0.65;
}
// How to determine the point motion. All edges got some direction.
// Sum all edge contributions to determine point motion. Weigh by
// face area so motion is preferentially determined by large faces
// (or more importantly ignore contribution from small faces).
// Do not change these settings.
faceAreaWeightModel piecewiseLinearRamp;
piecewiseLinearRampCoeffs
{
lowerAreaFraction 0.5;
upperAreaFraction 1.0;
}
}
// After simulation, when converting to polyMesh, filter out small faces/edges.
// Do not change. See cvControls.H
polyMeshFiltering
{
// Write the underlying Delaunay tet mesh at output time
writeTetDualMesh true;
// Upper limit on the size of faces to be filtered.
// fraction of the local target cell size
filterSizeCoeff 0.2;
// Upper limit on how close two dual vertices can be before
// being merged, fraction of the local target cell size
mergeClosenessCoeff 1e-9;
// To not filter: set maxNonOrtho to 1 (so check fails) and then
// set continueFilteringOnBadInitialPolyMesh to false.
continueFilteringOnBadInitialPolyMesh true;
// When a face is "bad", what fraction should the filterSizeCoeff be
// reduced by. Recursive, so for a filterCount value of fC, the
// filterSizeCoeff is reduced by pow(filterErrorReductionCoeff, fC)
filterErrorReductionCoeff 0.5;
// Maximum number of filterCount applications before a face
// is not attempted to be filtered
filterCountSkipThreshold 4;
// Maximum number of permissible iterations of the face collapse
// algorithm. The value to choose will be related the maximum number
// of points on a face that is to be collapsed and how many faces
// around it need to be collapsed.
maxCollapseIterations 25;
// Maximum number of times an to allow an equal faceSet to be
// returned from the face quality assessment before stopping iterations
// to break an infinitie loop.
maxConsecutiveEqualFaceSets 5;
// Remove little steps (almost perp to surface) by collapsing face.
surfaceStepFaceAngle 80;
// Do not collapse face to edge if should become edges
edgeCollapseGuardFraction 0.3;
// Only collapse face to point if high aspect ratio
maxCollapseFaceToPointSideLengthCoeff 0.35;
}
// Generic mesh quality settings. At any undoable phase these determine
// where to undo. Same as in snappyHexMeshDict
meshQualityControls
{
//- Maximum non-orthogonality allowed. Set to 180 to disable.
maxNonOrtho 65;
//- Max skewness allowed. Set to <0 to disable.
maxBoundarySkewness 50;
maxInternalSkewness 10;
//- Max concaveness allowed. Is angle (in degrees) below which concavity
// is allowed. 0 is straight face, <0 would be convex face.
// Set to 180 to disable.
maxConcave 80;
//- Minimum pyramid volume. Is absolute volume of cell pyramid.
// Set to a sensible fraction of the smallest cell volume expected.
// Set to very negative number (e.g. -1E30) to disable.
minVol -1E30;
//- Minimum quality of the tet formed by the
// variable base point minimum decomposition triangles and
// the cell centre (so not face-centre decomposition).
// This has to be a positive number for tracking
// to work. Set to very negative number (e.g. -1E30) to
// disable.
// <0 = inside out tet,
// 0 = flat tet
// 1 = regular tet
minTetQuality 1e-30;
//- Minimum absolute face area. Set to <0 to disable.
minArea -1;
//- Minimum face twist. Set to <-1 to disable. dot product of face normal
//- and face centre triangles normal
minTwist 0.001;
//- minimum normalised cell determinant
//- 1 = hex, <= 0 = folded or flattened illegal cell
minDeterminant 0.001;
//- minFaceWeight (0 -> 0.5)
minFaceWeight 0.02;
//- minVolRatio (0 -> 1)
minVolRatio 0.01;
//must be >0 for Fluent compatibility
minTriangleTwist -1;
}
// ************************************************************************* //

View File

@ -1 +0,0 @@
../fvSchemes

View File

@ -1 +0,0 @@
../fvSolution

View File

@ -4,9 +4,8 @@ cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
rm -r constant/extendedFeatureEdgeMesh constant/internalDelaunayVertices > /dev/null 2>&1
rm constant/triSurface/flange.eMesh > /dev/null 2>&1
rm flange system/cvMeshDict system/controlDict > /dev/null 2>&1
rm -rf constant/extendedFeatureEdgeMesh flange > /dev/null 2>&1
rm -r constant/ccx constant/ccy constant/ccz > /dev/null 2>&1
cleanCase

View File

@ -4,20 +4,36 @@ cd ${0%/*} || exit 1 # run from this directory
# Source tutorial run functions
. $WM_PROJECT_DIR/bin/tools/RunFunctions
# Generate aligned points (in constant/internalDelaunayVertices) and a
# mesh from that.
cp system/controlDict-generatePoints system/controlDict
cp system/cvMeshDict-generatePoints system/cvMeshDict
runApplication surfaceFeatureExtract constant/triSurface/flange.obj flange -includedAngle 150
runApplication cvMesh
# Get the number of processors to run on from system/decomposeParDict
nProc=`grep numberOfSubdomains system/decomposeParDict \
| sed s/"numberOfSubdomains *\(.*\);"/"\1"/`
# Use pre-generated aligned points (constant/internalDelaunayVertices)
# to generate a mesh
# cp system/controlDict-usePoints system/controlDict
# cp system/cvMeshDict-usePoints system/cvMeshDict
# runApplication cvMesh
runApplication surfaceFeatureExtract constant/triSurface/flange.obj flange -includedAngle 155
# Generate some sets for a bit of mesh inspection
runApplication topoSet
# Create tight-fitting background mesh
runApplication blockMesh
runApplication topoSet -dict system/topoSetDict-background
mv log.topoSet log.topoSet.background
runApplication subsetMesh background -patch walls -overwrite
runApplication decomposePar
# Backup initial background mesh on each processor
for dir in processor*
do
if [[ -d $dir ]]
then
cp -r $dir/constant/polyMesh $dir/constant/polyMesh_background
fi
done
runParallel cvMesh $nProc
runApplication reconstructParMesh -constant -mergeTol 1e-6
runApplication topoSet -dict system/topoSetDict-slices
mv log.topoSet log.topoSet.slices
runApplication writeCellCentres -constant
runParallel checkMesh $nProc -constant -allGeometry -allTopology
# ----------------------------------------------------------------- end-of-file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,69 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
convertToMeters 1.0;
xmin -0.0265;
xmax 0.0265;
ymin -0.028;
ymax 0.023;
zmin -0.024;
zmax 0.0025;
vertices
(
($xmin $ymin $zmin)
($xmax $ymin $zmin)
($xmax $ymax $zmin)
($xmin $ymax $zmin)
($xmin $ymin $zmax)
($xmax $ymin $zmax)
($xmax $ymax $zmax)
($xmin $ymax $zmax)
);
blocks
(
hex (0 1 2 3 4 5 6 7) (5 6 3) simpleGrading (1 1 1)
);
edges
(
);
boundary
(
walls
{
type wall;
faces
(
(3 7 6 2)
(0 4 7 3)
(2 6 5 1)
(1 5 4 0)
(0 3 2 1)
(4 5 6 7)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //

View File

@ -8,7 +8,7 @@
FoamFile
{
version 2.0;
format ascii;
format binary;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
@ -20,32 +20,32 @@ FoamFile
flange.obj_patch1
{
type wall;
nFaces 9298;
startFace 95552;
nFaces 24684;
startFace 193547;
}
flange.obj_patch2
{
type wall;
nFaces 1107;
startFace 104850;
nFaces 1674;
startFace 218231;
}
flange.obj_patch3
{
type wall;
nFaces 329;
startFace 105957;
nFaces 438;
startFace 219905;
}
flange.obj_patch4
{
type wall;
nFaces 1473;
startFace 106286;
nFaces 3595;
startFace 220343;
}
cvMesh_defaultPatch
{
type wall;
nFaces 41;
startFace 107759;
nFaces 0;
startFace 223938;
}
)

View File

@ -0,0 +1,224 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format binary;
class featureEdgeMesh;
location "constant/triSurface";
object flange.eMesh;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// points:
777
(9<><39>v<EFBFBD><76>z?<3F><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z<EFBFBD><7A><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>Mb`?<3F>p<EFBFBD><70>I<EFBFBD><49><EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>Mb`?9<>` <0B><>_<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>p<EFBFBD><70>I<EFBFBD><49><EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>Mb`?9<>` <0B><>_<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>Mb`?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>Mb`?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>Mb`?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>Mb`?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z?<3F><1E><>Q<EFBFBD>~?<3F>!<21> Ɛ<>9<EFBFBD>D9<44>/Q?A<> <0B><><><C9BC><EFBFBD>ZI<5A><49><EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><1E><>Q<EFBFBD>~?x}<07>8\a<>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><1E><>Q<EFBFBD>~?<3F>!<21> Ɛ<>9<EFBFBD>D9<44>/Q<>A<EFBFBD> <0B><><><C9BC><EFBFBD>ZI<5A><49><EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><1E><>Q<EFBFBD>~?x}<07>8\a<><61>+<2B><>xd?A<> <0B><><>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>S<EFBFBD>.<2E> <0B>b?A<> <0B><><><02><>E<45> d<>B<15>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><19><>]D<><44>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>5&<1F><>P_<50>J:<3A>?<3F><><EFBFBD><EFBFBD>Mb`?<18>vLݕ<4C><DD95><EFBFBD><EFBFBD><EFBFBD><E0A58A>?<3F><><EFBFBD><EFBFBD>Mb`?#<<3C><><47>6<EFBFBD><36>r~/<2F>?<3F><><EFBFBD><EFBFBD>Mb`?<08>Zd;<3B><><EFBFBD><18>(<28><><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?O<><4F><EFBFBD><1E><><EFBFBD><EFBFBD><EFBFBD>Q<><51><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?/$<16>^<16><>S<EFBFBD>.<2E> <0B>b?A<> <0B><>%ɼ|<7C>5Z<0E><><EFBFBD><EFBFBD><19>(<28><1E>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><>n<EFBFBD>2 <20><><EFBFBD>E<EFBFBD><45>[T<>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}X<1B><><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?e<><65>n<EFBFBD><16><>jO<6A>9<EFBFBD><39><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>q<EFBFBD><02><><EFBFBD>ŜV<C59C><56>A<EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<18>vLݕ<4C><DD95><EFBFBD><EFBFBD>PIBǓ?<3F><><EFBFBD><EFBFBD>Mb`?0<><30>K<EFBFBD>ώ<EFBFBD><CF8E><19>(<28><1E>?<3F><><EFBFBD><EFBFBD>Mb`?I><3E><>B<EFBFBD><EFBFBD>}X<1B><><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?d<><64>I<>y<EFBFBD>jO<6A>9<EFBFBD><39><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>G<EFBFBD><47>t<EFBFBD>ŜV<C59C><56>A<EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><>Y ͚p<CD9A><70><EFBFBD>PIBǓ?<3F><><EFBFBD><EFBFBD>Mb`?<3F><01>)<29>Ml<4D>6<EFBFBD><36>r~/<2F>?<3F><><EFBFBD><EFBFBD>Mb`?9<><39>v<EFBFBD><76>j<EFBFBD><19><>]D<><44>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>[v<><EFBFBD><7F><EFBFBD><EFBFBD><E0A58A>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>s<EFBFBD>01Ll<4C>P_<50>J:<3A>?<3F><><EFBFBD><EFBFBD>Mb`?Au<41>~Қp<D29A><70><18>(<28><><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?3<>-z<>t<EFBFBD><74><EFBFBD>Q<><51><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>iq!<21><>y<EFBFBD>S<EFBFBD>.<2E> <0B>b<EFBFBD>A<EFBFBD> <0B><><><02><>E<45>+<2B><>xd<78>A<EFBFBD> <0B><><>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><19><>]D<><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>5&<1F><><EFBFBD> d<>B<15><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD>񂿹<EFBFBD><EFBFBD><E0A58A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?#<<3C><><47>P_<50>J:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<18>vLݕ<4C><DD95>6<EFBFBD><36>r~/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<08>Zd;<3B><><EFBFBD><18>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?O<><4F><EFBFBD><1E><><EFBFBD><EFBFBD><EFBFBD>Q<><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?/$<16>^<16><>S<EFBFBD>.<2E> <0B>b<EFBFBD>A<EFBFBD> <0B><>%ɼ|<7C>5Z<0E><><EFBFBD><EFBFBD>E<EFBFBD><45>[T<><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><19>(<28><1E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><>n<EFBFBD>2 <20><>}X<1B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?e<><65>n<EFBFBD><16><>jO<6A>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>q<EFBFBD><02><><EFBFBD>ŜV<C59C><56>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<18>vLݕ<4C><DD95><EFBFBD><EFBFBD>PIBǓ<42><C793><EFBFBD><EFBFBD><EFBFBD>Mb`?0<><30>K<EFBFBD>ώ<EFBFBD><CF8E><19>(<28><1E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?I><3E><>B<EFBFBD><EFBFBD>}X<1B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?d<><64>I<>y<EFBFBD>jO<6A>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>G<EFBFBD><47>t<EFBFBD>ŜV<C59C><56>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><>Y ͚p<CD9A><70><EFBFBD>PIBǓ<42><C793><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><01>)<29>Ml<4D>6<EFBFBD><36>r~/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?9<><39>v<EFBFBD><76>j<EFBFBD><19><>]D<><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>[v<><EFBFBD>P_<50>J:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?Au<41>~Қp<D29A><70><EFBFBD><EFBFBD><E0A58A><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>s<EFBFBD>01Ll<4C><6C><18>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?3<>-z<>t<EFBFBD><74><EFBFBD>Q<><51><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>iq!<21><>y<EFBFBD>4<EFBFBD><34><EFBFBD>`[X?<3F><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51>Kx<4B>h<EFBFBD><68>g?<3F><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD>Y<1C>oPq?<3F><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51>V<EFBFBD><56><EFBFBD><EFBFBD>Ev?<3F><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD>x<EFBFBD>޳<EFBFBD> ?
ףp=
<EFBFBD>?<3F>p=
ף<EFBFBD><EFBFBD>9<EFBFBD>D9<EFBFBD>/Q?
ףp=
<EFBFBD>?W<><57><EFBFBD><04><><EFBFBD>e<><0E>a?
ףp=
<EFBFBD>?<3F><><EFBFBD><EFBFBD>aN<61><4E><EFBFBD><EFBFBD><45>j?
ףp=
<EFBFBD>?<3F><>Z<EFBFBD>#<23><><EFBFBD>O<EFBFBD>|4<><34>q?
ףp=
<EFBFBD>?<3F>(<28><><EFBFBD>G<EFBFBD><47>H <20><><EFBFBD>)v?
ףp=
<EFBFBD>?)\<5C><><EFBFBD>(<28><>P<>,<2C>cy?
ףp=
<EFBFBD>?<3F>J<EFBFBD><4A><EFBFBD>ʉ<EFBFBD><CA89>Ɍ<EFBFBD><C98C>^{?
ףp=
<EFBFBD>?<3F><><EFBFBD>ZI<5A><49><EFBFBD><EFBFBD>$U<><55>}|?
ףp=
<EFBFBD>? <0B><><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD><16><>i<EFBFBD>|?
ףp=
<EFBFBD>?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><06>ӿN\?<3F>~<7E>u cn>ލ<05>A<EFBFBD><41><EFBFBD>^tG9w?W?<3F>~<7E>u cn>"z<08><1A><><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?<3F>O<16><>X?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?Kx<4B>h<EFBFBD><68>g?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?<3F>Y<1C>oPq?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?V<><56><EFBFBD><EFBFBD>Ev?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?9<>D9<44>/Q?
ףp=
<EFBFBD>?!ȃ%c<><63>x<EFBFBD>޳<EFBFBD> ?
ףp=
<EFBFBD>?;<3B>O<EFBFBD><4F>nb<6E>e<><0E>a?
ףp=
<EFBFBD>?<3F><><EFBFBD>A#e<><65><EFBFBD><45>j?
ףp=
<EFBFBD>?b<><62>%<25><>h<EFBFBD>O<EFBFBD>|4<><34>q?
ףp=
<EFBFBD>?<3F><>7דmn<6D>H <20><><EFBFBD>)v?
ףp=
<EFBFBD>?<3F><>~j<>ts<74><73>Ɍ<EFBFBD><C98C>^{?
ףp=
<EFBFBD>?jS<6A>,
<EFBFBD>|<7C>P<>,<2C>cy?
ףp=
<EFBFBD>?<3F><1C><1D>0x<30><78>$U<><55>}|?
ףp=
<EFBFBD>?<3F><><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD><06>ӿN\?<3F>~<7E>u cn>p<><70><EFBFBD>$<24>~<7E><>o=<3D>1O?<3F>G@
<EFBFBD><EFBFBD><>72<37>|<7C><>x<EFBFBD>޳<EFBFBD> ?/#<23><>Z<EFBFBD>>_<07>Q<>{<7B>4<EFBFBD><34><EFBFBD>`[X<><58><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51>Kx<4B>h<EFBFBD><68>g<EFBFBD><67><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD>Y<1C>oPq<50><71><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51>V<EFBFBD><56><EFBFBD><EFBFBD>Ev<45><76><1E><>Q<EFBFBD>~<7E>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD>D9<44>/Q<>
ףp=
<EFBFBD>?W<><57><EFBFBD><04><><EFBFBD>e<><0E>a<EFBFBD>
ףp=
<EFBFBD>?<3F><><EFBFBD><EFBFBD>aN<61><4E><EFBFBD><EFBFBD><45>j<EFBFBD>
ףp=
<EFBFBD>?<3F><>Z<EFBFBD>#<23><><EFBFBD>O<EFBFBD>|4<><34>q<EFBFBD>
ףp=
<EFBFBD>?<3F>(<28><><EFBFBD>G<EFBFBD><47>H <20><><EFBFBD>)v<>
ףp=
<EFBFBD>?)\<5C><><EFBFBD>(<28><><EFBFBD>Ɍ<EFBFBD><C98C>^{<7B>
ףp=
<EFBFBD>?<3F><><EFBFBD>ZI<5A><49><EFBFBD>P<>,<2C>cy<63>
ףp=
<EFBFBD>?<3F>J<EFBFBD><4A><EFBFBD>ʉ<EFBFBD><CA89>$U<><55>}|<7C>
ףp=
<EFBFBD>? <0B><><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD><16><>i<EFBFBD>|<7C>
ףp=
<EFBFBD>?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><06>ӿN\<5C><>~<7E>u cn>ލ<05>A<EFBFBD><41><EFBFBD>^tG9w?W<><57>~<7E>u cn>"z<08><1A><><EFBFBD>O<16><>X<EFBFBD><58><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?Kx<4B>h<EFBFBD><68>g<EFBFBD><67><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?<3F>Y<1C>oPq<50><71><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?V<><56><EFBFBD><EFBFBD>Ev<45><76><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z<EFBFBD><7A><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?9<>D9<44>/Q<>
ףp=
<EFBFBD>?!ȃ%c<>e<><0E>a<EFBFBD>
ףp=
<EFBFBD>?<3F><><EFBFBD>A#e<><65><EFBFBD><45>j<EFBFBD>
ףp=
<EFBFBD>?b<><62>%<25><>h<EFBFBD>O<EFBFBD>|4<><34>q<EFBFBD>
ףp=
<EFBFBD>?<3F><>7דmn<6D>H <20><><EFBFBD>)v<>
ףp=
<EFBFBD>?<3F><>~j<>ts<74>P<>,<2C>cy<63>
ףp=
<EFBFBD>?<3F><1C><1D>0x<30><78>Ɍ<EFBFBD><C98C>^{<7B>
ףp=
<EFBFBD>?jS<6A>,
<EFBFBD>|<7C><>$U<><55>}|<7C>
ףp=
<EFBFBD>?<3F><><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD><06>ӿN\<5C><>~<7E>u cn>p<><70><EFBFBD>$<24>~<7E><>o=<3D>1O<31><4F>G@
<EFBFBD><EFBFBD><>72<37>|<7C><>x<EFBFBD>޳<EFBFBD> ?9<><39>v<EFBFBD><76>z?<3F>p=
ף<EFBFBD><EFBFBD>9<EFBFBD>D9<EFBFBD>/Q?9<><39>v<EFBFBD><76>z?W<><57><EFBFBD><04><><EFBFBD>9<EFBFBD>D9<44>/Q?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?W<><57><EFBFBD><04><><EFBFBD><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F>p=
ף<EFBFBD><EFBFBD>e<><0E>a?9<><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>aN<61><4E>e<><0E>a?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD><EFBFBD>aN<61><4E><EFBFBD><EFBFBD><45>j?9<><39>v<EFBFBD><76>z?<3F><>Z<EFBFBD>#<23><><EFBFBD><EFBFBD><EFBFBD><45>j?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>Z<EFBFBD>#<23><><EFBFBD>O<EFBFBD>|4<><34>q?9<><39>v<EFBFBD><76>z?<3F>(<28><><EFBFBD>G<EFBFBD><47>O<EFBFBD>|4<><34>q?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F>(<28><><EFBFBD>G<EFBFBD><47>H <20><><EFBFBD>)v?9<><39>v<EFBFBD><76>z?)\<5C><><EFBFBD>(<28><>H <20><><EFBFBD>)v?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?)\<5C><><EFBFBD>(<28><>P<>,<2C>cy?9<><39>v<EFBFBD><76>z?<3F>J<EFBFBD><4A><EFBFBD>ʉ<EFBFBD><CA89>Ɍ<EFBFBD><C98C>^{?9<><39>v<EFBFBD><76>z?<3F><><EFBFBD>ZI<5A><49><EFBFBD><EFBFBD>Ɍ<EFBFBD><C98C>^{?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD>ZI<5A><49><EFBFBD>P<>,<2C>cy?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F>J<EFBFBD><4A><EFBFBD>ʉ<EFBFBD><CA89>$U<><55>}|?9<><39>v<EFBFBD><76>z? <0B><><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD>$U<><55>}|?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>? <0B><><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD><16><>i<EFBFBD>|?9<><39>v<EFBFBD><76>z?<3F>l<EFBFBD><6C><EFBFBD>񂿠<16><>i<EFBFBD>|?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD>D9<44>/Q?9<><39>v<EFBFBD><76>z?<3F><>+<2B>*c<><63>x<EFBFBD>޳<EFBFBD> ?9<><39>v<EFBFBD><76>z?;<3B>O<EFBFBD><4F>nb<6E><62>x<EFBFBD>޳<EFBFBD> ?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?;<3B>O<EFBFBD><4F>nb<6E>9<EFBFBD>D9<44>/Q?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>+<2B>*c<>e<><0E>a?9<><39>v<EFBFBD><76>z?<3F><><EFBFBD>A#e<>e<><0E>a?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD>A#e<><65><EFBFBD><45>j?9<><39>v<EFBFBD><76>z?b<><62>%<25><>h<EFBFBD><68><EFBFBD><45>j?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?b<><62>%<25><>h<EFBFBD>O<EFBFBD>|4<><34>q?9<><39>v<EFBFBD><76>z?<3F><>7דmn<6D>O<EFBFBD>|4<><34>q?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>7דmn<6D>H <20><><EFBFBD>)v?9<><39>v<EFBFBD><76>z?<3F><>~j<>ts<74>H <20><><EFBFBD>)v?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>~j<>ts<74><73>Ɍ<EFBFBD><C98C>^{?9<><39>v<EFBFBD><76>z?jS<6A>,
<EFBFBD>|<7C>P<>,<2C>cy?9<><39>v<EFBFBD><76>z?g@<40>n<EFBFBD>0x<30>P<>,<2C>cy?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?g@<40>n<EFBFBD>0x<30><78>Ɍ<EFBFBD><C98C>^{?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?jS<6A>,
<EFBFBD>|<7C><>$U<><55>}|?9<><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD>$U<><55>}|?<3F><><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD>9<EFBFBD>D9<44>/Q<>9<EFBFBD><39>v<EFBFBD><76>z?W<><57><EFBFBD><04><><EFBFBD>9<EFBFBD>D9<44>/Q<><51><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?W<><57><EFBFBD><04><><EFBFBD>e<><0E>a<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>aN<61><4E>e<><0E>a<EFBFBD><61><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD><EFBFBD>aN<61><4E><EFBFBD><EFBFBD><45>j<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><>Z<EFBFBD>#<23><><EFBFBD><EFBFBD><EFBFBD><45>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>Z<EFBFBD>#<23><><EFBFBD>O<EFBFBD>|4<><34>q<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F>(<28><><EFBFBD>G<EFBFBD><47>O<EFBFBD>|4<><34>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F>(<28><><EFBFBD>G<EFBFBD><47>H <20><><EFBFBD>)v<>9<EFBFBD><39>v<EFBFBD><76>z?)\<5C><><EFBFBD>(<28><>H <20><><EFBFBD>)v<><76><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?)\<5C><><EFBFBD>(<28><><EFBFBD>Ɍ<EFBFBD><C98C>^{<7B>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD>ZI<5A><49><EFBFBD>P<>,<2C>cy<63>9<EFBFBD><39>v<EFBFBD><76>z?<3F>J<EFBFBD><4A><EFBFBD>ʉ<EFBFBD>P<>,<2C>cy<63><79><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F>J<EFBFBD><4A><EFBFBD>ʉ<EFBFBD><CA89>Ɍ<EFBFBD><C98C>^{<7B><><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD>ZI<5A><49><EFBFBD><EFBFBD>$U<><55>}|<7C>9<EFBFBD><39>v<EFBFBD><76>z? <0B><><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD>$U<><55>}|<7C><><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>? <0B><><EFBFBD><EFBFBD>F<EFBFBD><46><EFBFBD><16><>i<EFBFBD>|<7C>9<EFBFBD><39>v<EFBFBD><76>z?<3F>l<EFBFBD><6C><EFBFBD>񂿠<16><>i<EFBFBD>|<7C><><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD>D9<44>/Q<>9<EFBFBD><39>v<EFBFBD><76>z?<3F><>+<2B>*c<>9<EFBFBD>D9<44>/Q<><51><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>+<2B>*c<>e<><0E>a<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD>A#e<>e<><0E>a<EFBFBD><61><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD>A#e<><65><EFBFBD><45>j<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?b<><62>%<25><>h<EFBFBD><68><EFBFBD><45>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?b<><62>%<25><>h<EFBFBD>O<EFBFBD>|4<><34>q<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><>7דmn<6D>O<EFBFBD>|4<><34>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>7דmn<6D>H <20><><EFBFBD>)v<>9<EFBFBD><39>v<EFBFBD><76>z?<3F><>~j<>ts<74>H <20><><EFBFBD>)v<><76><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><>~j<>ts<74>P<>,<2C>cy<63>9<EFBFBD><39>v<EFBFBD><76>z?g@<40>n<EFBFBD>0x<30><78>Ɍ<EFBFBD><C98C>^{<7B>9<EFBFBD><39>v<EFBFBD><76>z?jS<6A>,
<EFBFBD>|<7C><>Ɍ<EFBFBD><C98C>^{<7B><><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?jS<6A>,
<EFBFBD>|<7C>P<>,<2C>cy<63><79><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?g@<40>n<EFBFBD>0x<30><78>$U<><55>}|<7C>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD><EFBFBD>$U<><55>}|<7C><><EFBFBD><EFBFBD><EFBFBD>ސ<EFBFBD>?<3F><><EFBFBD><EFBFBD>r<EFBFBD><72><EFBFBD>7q<37>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?<3F>q <>
<EFBFBD><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?<3F>{<7B><><EFBFBD>G<EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>Q<EFBFBD>:|<7C><>A<EFBFBD><41>.<2E><>?<3F><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD>@<40>?<3F><1E><>Q<EFBFBD>~<7E>e<EFBFBD><65>/`s<> <0C>><3E><><EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E>bS<62><53><EFBFBD>"h<><68><EFBFBD>PS&<26><>?<3F><1E><>Q<EFBFBD>~<7E><>8Bi<1C>[<5B><11>c<>ߓ?<3F><1E><>Q<EFBFBD>~<7E>e<EFBFBD><65>h <0B>O<EFBFBD>6<EFBFBD><36>r~/<2F>?<3F><1E><>Q<EFBFBD>~<7E>
\<1B><>W0<57>/<2F><10>.<2E><>?<3F><1E><>Q<EFBFBD>~<7E><>
<EFBFBD><EFBFBD>V?<>(L<>?<3F>?<3F><1E><>Q<EFBFBD>~<7E>?lm
<EFBFBD><EFBFBD>B?<3F>nEɧ<><C9A7><EFBFBD><1E><>Q<EFBFBD>~<7E><><19><17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> S<><53><EFBFBD><1E><>Q<EFBFBD>~<7E><><EFBFBD>X<EFBFBD>)<29><><EFBFBD><EFBFBD>{<7B><><EFBFBD>G<EFBFBD><47><EFBFBD><1E><>Q<EFBFBD>~<7E><><17><><EFBFBD>Ň<EFBFBD><C587>A<EFBFBD><41>.<2E><><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD>@<40><><EFBFBD><1E><>Q<EFBFBD>~<7E>d<EFBFBD>nm<3<><33> <0C>><3E><><EFBFBD><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E>><3E><>F<EFBFBD>ڏ<EFBFBD><DA8F><EFBFBD>PS&<26><><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E>2<EFBFBD><32>8*7<><37> <09><>g<EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>3<01><>6<EFBFBD><36>r~/<2F><><EFBFBD><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>^@Ԓ<><D492>q <>
<EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?7q<37>x<EFBFBD><78><EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E>;<3B>O<EFBFBD><4F>nb?e<>gc<67>O?<3F>4{@<40>:?R<41><CA99>u <0B>B<EFBFBD>FH?1<>v<EFBFBD><76><EFBFBD>G?<3F>7}<7D><><EFBFBD><EFBFBD><EFBFBD>
?<3F><><?F<>}TN?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F>P<EFBFBD>?<3F>bP?<08><><EFBFBD><1D><><EFBFBD><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F><1E><>Q<EFBFBD>~<7E><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>@<40>V?<3F><1E><>Q<EFBFBD>~<7E><><06>Ŧ<EFBFBD><C5A6><EFBFBD>*<2A> "f?<3F><1E><>Q<EFBFBD>~<7E><>4<EFBFBD>8EG<45><47><EFBFBD>}<7D>?w8p?<3F><1E><>Q<EFBFBD>~<7E><>ĘO<C498>ő<EFBFBD><C591><EFBFBD><E8B3A8>t?<3F><1E><>Q<EFBFBD>~<7E>wT볹 <20><>獓¼<E78D93>y?<3F><1E><>Q<EFBFBD>~<7E>D9,h<><1B><><EFBFBD><EFBFBD>ڥ.<2E>~?<3F><1E><>Q<EFBFBD>~<7E>A<EFBFBD>]<5D><>a<EFBFBD><61>G<EFBFBD><47><EFBFBD> <11>?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%<25><><0E>kA0<41>?<3F><1E><>Q<EFBFBD>~<7E><06>G<EFBFBD><47>|<7C><><EFBFBD><EFBFBD>}8H<38><48>?<3F><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>6<EFBFBD><36>r~/<2F>?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>^@Ԓ<><D492><EFBFBD><EFBFBD> S<>?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD>X<EFBFBD>)<29><><EFBFBD>><3E><>H*<2A><>?<3F><1E><>Q<EFBFBD>~<7E>*<2A>8 <0B><><EFBFBD>H)2<><32>#<23>?<3F><1E><>Q<EFBFBD>~<7E><>ƒ<66><D7BD><EFBFBD>nEɧ<>?<3F><1E><>Q<EFBFBD>~<7E><><19><17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>@<40>V?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD>5L<35><4C>6<EFBFBD><36>x<EFBFBD>޳<EFBFBD> ?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD>Mb0<62>*<2A> "f?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>?VKE<4B><45>}<7D>?w8p?<3F><1E><>Q<EFBFBD>~<7E><>,<2C><>j<EFBFBD>R<EFBFBD><52><EFBFBD><E8B3A8>t?<3F><1E><>Q<EFBFBD>~<7E><>K<EFBFBD><4B><EFBFBD>]<5D>獓¼<E78D93>y?<3F><1E><>Q<EFBFBD>~<7E>
<EFBFBD>J$<24><>f<EFBFBD>G<EFBFBD><47><EFBFBD> <11>?<3F><1E><>Q<EFBFBD>~<7E><0E> x|{w<><77><EFBFBD>ڥ.<2E>~?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD>q<><0E>kA0<41>?<3F><1E><>Q<EFBFBD>~<7E>!<0E>J<EFBFBD>~<7E><><EFBFBD><EFBFBD>Av<41><76>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD>񂿔N$<24>jf<6A>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD><33><DAAA><EFBFBD>&<26>XL<11>?<3F><><EFBFBD><EFBFBD>Mb`?qй6<D0B9>E<EFBFBD><45>?<3F>+T퉔?<3F><><EFBFBD><EFBFBD>Mb`?>u<>Rz<52><7A><EFBFBD>)<29>5<10>ٓ?<3F><><EFBFBD><EFBFBD>Mb`? <0B><>3S<33><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`` <0C>?<3F><><EFBFBD><EFBFBD>Mb`?+ժZ_<5A><5F>6<EFBFBD><36>r~/<2F>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@v͚S<>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>
<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>m<EFBFBD><6D>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>`<60><12><>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>i2<69>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD>BF<42><46>?<3F><><EFBFBD><EFBFBD>Mb`?V<><56><EFBFBD><EFBFBD>E<EFBFBD><45>S<EFBFBD><53>.<17><>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>I<07>F<EFBFBD><46><EFBFBD>^<1F>G
<EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD>񂿔N$<24>jf<6A>?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><33><DAAA><EFBFBD><EFBFBD><EFBFBD>Av<41><76>?<3F><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<26>XL<11>?<3F><1E><>Q<EFBFBD>~<7E>qй6<D0B9>E<EFBFBD><45>?<3F>+T퉔?<3F><1E><>Q<EFBFBD>~<7E>>u<>Rz<52><7A><EFBFBD>)<29>5<10>ٓ?<3F><1E><>Q<EFBFBD>~<7E> <0B><>3S<33><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`` <0C>?<3F><1E><>Q<EFBFBD>~<7E>Z_<5A><5F>6<EFBFBD><36>r~/<2F>?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@v͚S<>?<3F><1E><>Q<EFBFBD>~<7E><>
<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD><EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E><>m<EFBFBD><6D>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>`<60><12><>?<3F><1E><>Q<EFBFBD>~<7E><>i2<69>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD>BF<42><46>?<3F><1E><>Q<EFBFBD>~<7E>V<EFBFBD><56><EFBFBD><EFBFBD>E<EFBFBD><45>S<EFBFBD><53>.<17><>?<3F><1E><>Q<EFBFBD>~<7E><>I<07>F<EFBFBD><46><EFBFBD>^<1F>G
<EFBFBD><EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD>񂿔N$<24>jf<6A>?<3F><><EFBFBD><EFBFBD>Mb`?h<<11>y8<79><38><EFBFBD>&<26>XL<11>?<3F><><EFBFBD><EFBFBD>Mb`?L*<2A>I;<>?<3F>+T퉔?<3F><><EFBFBD><EFBFBD>Mb`?<3F>,Rr<52>y|<7C>)<29>5<10>ٓ?<3F><><EFBFBD><EFBFBD>Mb`?<<3C><>\z<><7A><EFBFBD><EFBFBD>`` <0C>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>H<><48>y<>6<EFBFBD><36>r~/<2F>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>~j<>t<EFBFBD>x<EFBFBD>@v͚S<>?<3F><><EFBFBD><EFBFBD>Mb`?<08>|<7C>y<><79>`<60><><EFBFBD><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>ֈ`\z<><7A><EFBFBD>`<60><12><>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>CFQ<46>{|<7C><><EFBFBD>BF<42><46>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>(<28><><EFBFBD>;<>S<EFBFBD><53>.<17><>?<3F><><EFBFBD><EFBFBD>Mb`?v<><76>g
9<EFBFBD><EFBFBD><EFBFBD>N$<24>jf<6A>?<3F><1E><>Q<EFBFBD>~<7E>h<<11>y8<79><38><EFBFBD>&<26>XL<11>?<3F><1E><>Q<EFBFBD>~<7E>L*<2A>I;<>?<3F>+T퉔?<3F><1E><>Q<EFBFBD>~<7E><>,Rr<52>y|<7C>)<29>5<10>ٓ?<3F><1E><>Q<EFBFBD>~<7E><<3C><>\z<><7A><EFBFBD><EFBFBD>`` <0C>?<3F><1E><>Q<EFBFBD>~<7E><>H<><48>y<>6<EFBFBD><36>r~/<2F>?<3F><1E><>Q<EFBFBD>~<7E><>~j<>t<EFBFBD>x<EFBFBD>@v͚S<>?<3F><1E><>Q<EFBFBD>~<7E><08>|<7C>y<><79>`<60><><EFBFBD><EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E><>ֈ`\z<><7A><EFBFBD>`<60><12><>?<3F><1E><>Q<EFBFBD>~<7E><>CFQ<46>{|<7C><><EFBFBD>BF<42><46>?<3F><1E><>Q<EFBFBD>~<7E><>(<28><><EFBFBD>;<>S<EFBFBD><53>.<17><>?<3F><1E><>Q<EFBFBD>~<7E>v<EFBFBD><76>g
9<EFBFBD><EFBFBD>e<>gc<67>O<EFBFBD><4F>4{@<40>:?R<41><CA99>u <0B>B<EFBFBD>FH<46>1<EFBFBD>v<EFBFBD><76><EFBFBD>G?<3F>7}<7D><><EFBFBD><EFBFBD><EFBFBD>
?<3F><><<3C>F<>}TN?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E687BF>G<EFBFBD>@<40>V<EFBFBD><56><1E><>Q<EFBFBD>~<7E><><06>Ŧ<EFBFBD><C5A6><EFBFBD>*<2A> "f<><66><1E><>Q<EFBFBD>~<7E><>4<EFBFBD>8EG<45><47><EFBFBD>}<7D>?w8p<38><70><1E><>Q<EFBFBD>~<7E><>ĘO<C498>ő<EFBFBD><C591><EFBFBD><E8B3A8>t<EFBFBD><74><1E><>Q<EFBFBD>~<7E>wT볹 <20><>獓¼<E78D93>y<EFBFBD><79><1E><>Q<EFBFBD>~<7E>D9,h<><1B><>G<EFBFBD><47><EFBFBD> <11><><EFBFBD><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>%<25><><EFBFBD><EFBFBD>ڥ.<2E>~<7E><><1E><>Q<EFBFBD>~<7E>A<EFBFBD>]<5D><>a<EFBFBD><61><0E>kA0<41><30><EFBFBD><1E><>Q<EFBFBD>~<7E><06>G<EFBFBD><47>|<7C><><EFBFBD><EFBFBD>}8H<38><48><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>><3E><>H*<2A><><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E>*<2A>8 <0B><><EFBFBD>H)2<><32>#<23><><EFBFBD><1E><>Q<EFBFBD>~<7E><>ƒ<66><D7BD><EFBFBD><EFBFBD>G<EFBFBD>@<40>V<EFBFBD><56><1E><>Q<EFBFBD>~<7E><><EFBFBD>5L<35><4C>6<EFBFBD>*<2A> "f<><66><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>?VKE<4B><45>}<7D>?w8p<38><70><1E><>Q<EFBFBD>~<7E><>,<2C><>j<EFBFBD>R<EFBFBD><52><EFBFBD><E8B3A8>t<EFBFBD><74><1E><>Q<EFBFBD>~<7E><>K<EFBFBD><4B><EFBFBD>]<5D>獓¼<E78D93>y<EFBFBD><79><1E><>Q<EFBFBD>~<7E>
<EFBFBD>J$<24><>f<EFBFBD><66><EFBFBD>ڥ.<2E>~<7E><><1E><>Q<EFBFBD>~<7E><><EFBFBD>q<>G<EFBFBD><47><EFBFBD> <11><><EFBFBD><1E><>Q<EFBFBD>~<7E><0E> x|{w<><0E>kA0<41><30><EFBFBD><1E><>Q<EFBFBD>~<7E>!<0E>J<EFBFBD>~<7E><>N$<24>jf<6A><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD><33><DAAA><EFBFBD><EFBFBD><EFBFBD>Av<41><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<26>XL<11><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?qй6<D0B9>E<EFBFBD><45>?<3F>+T퉔<54><ED8994><EFBFBD><EFBFBD><EFBFBD>Mb`?>u<>Rz<52><7A><EFBFBD>)<29>5<10>ٓ<EFBFBD><D993><EFBFBD><EFBFBD><EFBFBD>Mb`? <0B><>3S<33><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`` <0C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?+ժZ_<5A><5F>6<EFBFBD><36>r~/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@v͚S<><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>
<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>m<EFBFBD><6D>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>`<60><12><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>i2<69>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD>BF<42><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?V<><56><EFBFBD><EFBFBD>E<EFBFBD><45>S<EFBFBD><53>.<17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>I<07>F<EFBFBD><46><EFBFBD>^<1F>G
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD>񂿾<EFBFBD><F182BFBE>Av<41><76><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD>񂿔N$<24>jf<6A><66><EFBFBD><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><33><DAAA><EFBFBD>&<26>XL<11><><EFBFBD><1E><>Q<EFBFBD>~<7E>qй6<D0B9>E<EFBFBD><45>?<3F>+T퉔<54><ED8994><1E><>Q<EFBFBD>~<7E>>u<>Rz<52><7A><EFBFBD>)<29>5<10>ٓ<EFBFBD><D993><1E><>Q<EFBFBD>~<7E> <0B><>3S<33><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`` <0C><><EFBFBD><1E><>Q<EFBFBD>~<7E>Z_<5A><5F>6<EFBFBD><36>r~/<2F><><EFBFBD><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@v͚S<><53><EFBFBD><1E><>Q<EFBFBD>~<7E><>
<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>m<EFBFBD><6D>E<EFBFBD><45><EFBFBD><EFBFBD><EFBFBD>`<60><12><><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>i2<69>m<EFBFBD><6D><EFBFBD><EFBFBD><EFBFBD>BF<42><46><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E>V<EFBFBD><56><EFBFBD><EFBFBD>E<EFBFBD><45>S<EFBFBD><53>.񍿸<1E><>Q<EFBFBD>~<7E><>I<07>F<EFBFBD><46><EFBFBD>^<1F>G
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>l<EFBFBD><6C><EFBFBD>񂿔N$<24>jf<6A><66><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?h<<11>y8<79><38><EFBFBD>&<26>XL<11><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?L*<2A>I;<>?<3F>+T퉔<54><ED8994><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>,Rr<52>y|<7C>)<29>5<10>ٓ<EFBFBD><D993><EFBFBD><EFBFBD><EFBFBD>Mb`?<<3C><>\z<><7A><EFBFBD><EFBFBD>`` <0C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>H<><48>y<>6<EFBFBD><36>r~/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>~j<>t<EFBFBD>x<EFBFBD>@v͚S<><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<08>|<7C>y<><79>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>ֈ`\z<><7A><EFBFBD>`<60><12><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>CFQ<46>{|<7C><><EFBFBD>BF<42><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>(<28><><EFBFBD>;<>S<EFBFBD><53>.<17><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?v<><76>g
9<EFBFBD><EFBFBD><EFBFBD>N$<24>jf<6A><66><EFBFBD><1E><>Q<EFBFBD>~<7E>h<<11>y8<79><38><EFBFBD>&<26>XL<11><><EFBFBD><1E><>Q<EFBFBD>~<7E>L*<2A>I;<>?<3F>+T퉔<54><ED8994><1E><>Q<EFBFBD>~<7E><>,Rr<52>y|<7C>)<29>5<10>ٓ<EFBFBD><D993><1E><>Q<EFBFBD>~<7E><<3C><>\z<><7A><EFBFBD><EFBFBD>`` <0C><><EFBFBD><1E><>Q<EFBFBD>~<7E><>H<><48>y<>6<EFBFBD><36>r~/<2F><><EFBFBD><1E><>Q<EFBFBD>~<7E><>~j<>t<EFBFBD>x<EFBFBD>@v͚S<><53><EFBFBD><1E><>Q<EFBFBD>~<7E><08>|<7C>y<><79>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>ֈ`\z<><7A><EFBFBD>`<60><12><><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>CFQ<46>{|<7C><><EFBFBD>BF<42><46><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>(<28><><EFBFBD>;<>S<EFBFBD><53>.񍿸<1E><>Q<EFBFBD>~<7E>v<EFBFBD><76>g
9<EFBFBD><EFBFBD>6<EFBFBD><EFBFBD>r~/<2F><><EFBFBD><1E><>Q<EFBFBD>~<7E>
\<1B><>W0<57><EFBFBD>(L<>?<3F><><EFBFBD><1E><>Q<EFBFBD>~<7E>?lm
<EFBFBD><EFBFBD>B?/<2F><10>.<2E><><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>
<EFBFBD><EFBFBD>V?<3F>{<7B><><EFBFBD>G<EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E><><17><><EFBFBD>Ň<EFBFBD><C587>U<EFBFBD><55><EFBFBD>@<40>?<3F><1E><>Q<EFBFBD>~<7E>d<EFBFBD>nm<3<><33> <0C>><3E><><EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E>><3E><>F<EFBFBD>ڏ<EFBFBD><DA8F><EFBFBD>PS&<26><>?<3F><1E><>Q<EFBFBD>~<7E>2<EFBFBD><32>8*7<><37> <09><>g<EFBFBD><67><EFBFBD>?<3F><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>3<01><><EFBFBD>{<7B><><EFBFBD>G<EFBFBD><47><EFBFBD><1E><>Q<EFBFBD>~<7E><><EFBFBD><EFBFBD>Q<EFBFBD>:|<7C><>U<EFBFBD><55><EFBFBD>@<40><><EFBFBD><1E><>Q<EFBFBD>~<7E>e<EFBFBD><65>/`s<> <0C>><3E><><EFBFBD><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E>bS<62><53><EFBFBD>"h<><68><EFBFBD>PS&<26><><EFBFBD><EFBFBD><1E><>Q<EFBFBD>~<7E><>8Bi<1C>[<5B><11>c<>ߓ<EFBFBD><DF93><1E><>Q<EFBFBD>~<7E>e<EFBFBD><65>h <0B>O<EFBFBD>9<EFBFBD>D9<44>/Q?<3F><><19>R<>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O?C<><43>N9?)\<5C><><EFBFBD>(<28><><16>4<EFBFBD>_<EFBFBD>H?l
<00><>+G?)\<5C><><EFBFBD>(<28><>q?t<>I<?n<>U1FN?)\<5C><><EFBFBD>(<28><><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F><><EFBFBD><EFBFBD>MbP?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O?C<><43>N9<>)\<5C><><EFBFBD>(<28><><16>4<EFBFBD>_<EFBFBD>H?l
<00><>+G<>)\<5C><><EFBFBD>(<28><>q?t<>I<?n<>U1FN<46>)\<5C><><EFBFBD>(<28><><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F><><EFBFBD><EFBFBD>MbP<62>)\<5C><><EFBFBD>(<28><>6<EFBFBD><36>r~/<2F>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>^@Ԓ<><D492><EFBFBD><EFBFBD> S<>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><>X<EFBFBD>)<29><><EFBFBD>><3E><>H*<2A><>?<3F><><EFBFBD><EFBFBD>Mb`?*<2A>8 <0B><><EFBFBD>H)2<><32>#<23>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>ƒ<66><D7BD><EFBFBD>nEɧ<>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><19><17><><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD><41>.<2E><>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>G<EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><17><><EFBFBD>Ň<EFBFBD><C587>U<EFBFBD><55><EFBFBD>@<40>?<3F><><EFBFBD><EFBFBD>Mb`?d<>nm<3<><33> <0C>><3E><><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?><3E><>F<EFBFBD>ڏ<EFBFBD><DA8F><EFBFBD>PS&<26><>?<3F><><EFBFBD><EFBFBD>Mb`?2<><32>8*7<><37> <09><>g<EFBFBD><67><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>3<01><><EFBFBD>{<7B><><EFBFBD>G<EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>Q<EFBFBD>:|<7C><>U<EFBFBD><55><EFBFBD>@<40>?<3F><><EFBFBD><EFBFBD>Mb`?e<><65>/`s<> <0C>><3E><><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?bS<62><53><EFBFBD>"h<><68><EFBFBD>PS&<26><>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>8Bi<1C>[<5B><11>c<>ߓ?<3F><><EFBFBD><EFBFBD>Mb`?e<><65>h <0B>O<EFBFBD>6<EFBFBD><36>r~/<2F>?<3F><><EFBFBD><EFBFBD>Mb`?
\<1B><>W0<57><EFBFBD>(L<>?<3F>?<3F><><EFBFBD><EFBFBD>Mb`??lm
<EFBFBD><EFBFBD>B?<3F>q <>
<EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?;<3B>O<EFBFBD><4F>nb?7q<37>x<EFBFBD><78><EFBFBD>?<3F><><EFBFBD><EFBFBD>Mb`?;<3B>O<EFBFBD><4F>nb?/<2F><10>.<2E><>?<3F><><EFBFBD><EFBFBD>Mb`?<3F>
<EFBFBD><EFBFBD>V?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>C<EFBFBD><43>N9?)\<5C><><EFBFBD>(<28><>9<EFBFBD>D9<44>/Q<><51><EFBFBD><19>R<>)\<5C><><EFBFBD>(<28><><16>4<EFBFBD>_<EFBFBD>H<EFBFBD>l
<00><>+G?)\<5C><><EFBFBD>(<28><>q?t<>I<<3C>n<EFBFBD>U1FN?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>C<EFBFBD><43>N9<>)\<5C><><EFBFBD>(<28><><16>4<EFBFBD>_<EFBFBD>H<EFBFBD>l
<00><>+G<>)\<5C><><EFBFBD>(<28><>q?t<>I<<3C>n<EFBFBD>U1FN<46>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD> S<><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><>X<EFBFBD>)<29><><EFBFBD>6<EFBFBD><36>r~/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>^@Ԓ<>><3E><>H*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?*<2A>8 <0B><><EFBFBD>H)2<><32>#<23><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>ƒ<66><D7BD><EFBFBD>nEɧ<><C9A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><19><17><><EFBFBD><EFBFBD><EFBFBD>{<7B><><EFBFBD>G<EFBFBD><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><17><><EFBFBD>Ň<EFBFBD><C587>A<EFBFBD><41>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><55><EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?d<>nm<3<><33> <0C>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?><3E><>F<EFBFBD>ڏ<EFBFBD><DA8F><EFBFBD>PS&<26><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?2<><32>8*7<><37> <09><>g<EFBFBD><EFBFBD><EA93BF><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>3<01><><EFBFBD>{<7B><><EFBFBD>G<EFBFBD><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F><><EFBFBD>Q<EFBFBD>:|<7C><>U<EFBFBD><55><EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?e<><65>/`s<> <0C>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?bS<62><53><EFBFBD>"h<><68><EFBFBD>PS&<26><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>8Bi<1C>[<5B><11>c<>ߓ<EFBFBD><DF93><EFBFBD><EFBFBD><EFBFBD>Mb`?e<><65>h <0B>O<EFBFBD>6<EFBFBD><36>r~/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?
\<1B><>W0<57><EFBFBD>(L<>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`??lm
<EFBFBD><EFBFBD>B?<3F>q <>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?;<3B>O<EFBFBD><4F>nb?/<2F><10>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?<3F>
<EFBFBD><EFBFBD>V?7q<37>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Mb`?;<3B>O<EFBFBD><4F>nb?<3F><>8sY<73>i?)\<5C><><EFBFBD>(<28><>)\<5C><><EFBFBD>(<28><><EFBFBD><>
p?)\<5C><><EFBFBD>(<28><>עh[͊<>H<EFBFBD>5<EFBFBD>Ēq?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>~<7E><>󉿣(ȶ<>
p?)\<5C><><EFBFBD>(<28><><EFBFBD>џG<D19F>+v<><76><EFBFBD>8sY<73>i?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>~j<>ts<74>H<EFBFBD>5<EFBFBD>Ēq?)\<5C><><EFBFBD>(<28><>5<EFBFBD>ع<EFBFBD><D8B9>w<EFBFBD><77><>
p<EFBFBD>)\<5C><><EFBFBD>(<28><>עh[͊<><CD8A><EFBFBD>8sY<73>i<EFBFBD>)\<5C><><EFBFBD>(<28><>)\<5C><><EFBFBD>(<28><>H<EFBFBD>5<EFBFBD>Ēq<C492>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>~<7E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8sY<73>i<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>~j<>ts<74><73><>
p<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD>џG<D19F>+v<>H<EFBFBD>5<EFBFBD>Ēq<C492>)\<5C><><EFBFBD>(<28><>5<EFBFBD>ع<EFBFBD><D8B9>w<EFBFBD>9<EFBFBD>D9<44>/Q?<3F>'<27>1<EFBFBD><31>q?R<><1E><>Q<EFBFBD><51><EFBFBD>x<EFBFBD>޳<EFBFBD> ?;<3B>O<EFBFBD><4F>nr?R<><1E><>Q<EFBFBD><51><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>4<EFBFBD><34><EFBFBD>`[X?<3F><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>p<> @<40>a?<1B>E\cDp?R<><1E><>Q<EFBFBD><51>Kx<4B>h<EFBFBD><68>g?<3F><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51><EFBFBD><EFBFBD>sZ\<5C>j?<3F><>Dwj?R<><1E><>Q<EFBFBD><51><EFBFBD>Y<1C>oPq?<3F><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>c <0C><><EFBFBD><EFBFBD>r?g<>NVɤȼR<C8BC><1E><>Q<EFBFBD><51>I<EFBFBD>B<>r?kܴ|<7C><>R?R<><1E><>Q<EFBFBD><51>mH<6D><48>A8p?m<>$<24><b?R<><1E><>Q<EFBFBD><51>V<EFBFBD><56><EFBFBD><EFBFBD>Ev?<3F><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<1F><>
{<7B><><R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD>S<EFBFBD><53>k?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><>~j<>ts?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?J +<2B>y?R<><1E><>Q<EFBFBD><51><EFBFBD>x<EFBFBD>޳<EFBFBD> ?;<3B>O<EFBFBD><4F>nr<6E>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD>D9<44>/Q?<3F>'<27>1<EFBFBD><31>q<EFBFBD>R<EFBFBD><1E><>Q<EFBFBD><51>p<> @<40>a?<1B>E\cDp<44>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD><EFBFBD>sZ\<5C>j?<3F><>Dwj<>R<EFBFBD><1E><>Q<EFBFBD><51>I<EFBFBD>B<>r?kܴ|<7C><>R<EFBFBD>R<EFBFBD><1E><>Q<EFBFBD><51>mH<6D><48>A8p?m<>$<24><b<>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD><EFBFBD>Mb`<60>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><><EFBFBD>S<EFBFBD><53>k<EFBFBD>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?<3F><>~j<>ts<74>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z?J +<2B>y<>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F>Q<EFBFBD><1E>둿㥛<EB91BF> <20><><EFBFBD><EFBFBD><EFBFBD>G<EFBFBD>@<40>V?<3F>Q<EFBFBD><1E><EFBFBD><06>Ŧ<EFBFBD><C5A6><EFBFBD>*<2A> "f?<3F>Q<EFBFBD><1E><EFBFBD>4<EFBFBD>8EG<45><47><EFBFBD>}<7D>?w8p?<3F>Q<EFBFBD><1E><EFBFBD>ĘO<C498>ő<EFBFBD><C591><EFBFBD><E8B3A8>t?<3F>Q<EFBFBD><1E>둿wT볹 <20><>獓¼<E78D93>y?<3F>Q<EFBFBD><1E>둿D9,h<><1B><><EFBFBD><EFBFBD>ڥ.<2E>~?<3F>Q<EFBFBD><1E>둿A<EB91BF>]<5D><>a<EFBFBD><61>G<EFBFBD><47><EFBFBD> <11>?<3F>Q<EFBFBD><1E><EFBFBD><EB91BF><EFBFBD><EFBFBD><EFBFBD>%<25><><0E>kA0<41>?<3F>Q<EFBFBD><1E><06>G<EFBFBD><47>|<7C><><EFBFBD><EFBFBD>}8H<38><48>?<3F>Q<EFBFBD><1E><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD>D9<44>/Q?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>2d<32><64><EFBFBD>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD> ?)\<5C><><EFBFBD>(<28><>g<EFBFBD><67>j+<2B><><EFBFBD><EFBFBD><EFBFBD>y<>/]?)\<5C><><EFBFBD>(<28><><f<>2<EFBFBD>}<7D><><EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD>b?)\<5C><><EFBFBD>(<28><>3Y<33><59><49><DD84>+<2B><>xd?)\<5C><><EFBFBD>(<28><><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dN<64>R<EFBFBD>Cs?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>t?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ZI<5A><49><EFBFBD><EFBFBD><ED9689><EFBFBD>u?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>LLb<><62>\><3E><><1E>v?)\<5C><><EFBFBD>(<28><><EFBFBD>l<EFBFBD><6C><EFBFBD>񂿆x<F182BF86>޳<EFBFBD> ?)\<5C><><EFBFBD>(<28><>%u<02><1B><>Yh)Q<><51>Q?)\<5C><><EFBFBD>(<28><><EFBFBD>ˤ<<3C>卿"<22><>R<EFBFBD><52>`?)\<5C><><EFBFBD>(<28><>S<EFBFBD><53><EFBFBD>.Q<><51>_v<5F>d<EFBFBD>X?
ףp=
<EFBFBD>?<3F><><EFBFBD><EFBFBD><><D392>x<EFBFBD>޳<EFBFBD> ?
ףp=
<EFBFBD>?<3F>l<EFBFBD><6C><EFBFBD>񒿐 <0B>_!Rg?
ףp=
<EFBFBD>?<3F>)<29><><13><><EFBFBD>n<18><><EFBFBD><EFBFBD>p?
ףp=
<EFBFBD>?F$
-<2D><><EFBFBD><EFBFBD>#<23><>H<>u?
ףp=
<EFBFBD>?<3F>d<EFBFBD><64><EFBFBD>F<EFBFBD><46><EFBFBD>
F%uz?
ףp=
<EFBFBD>?<3F><>8h<><68><EFBFBD><EFBFBD>r<EFBFBD><72>{<7B>?
ףp=
<EFBFBD>?<3F>D
(y<><79><EFBFBD><EFBFBD>Y<EFBFBD><59> ?
ףp=
<EFBFBD>?<3F>N<><EFBFBD>r<EFBFBD><72>h<EFBFBD><68>?
ףp=
<EFBFBD>?<ۤ<><DBA4><EFBFBD><EFBFBD><1F><15>Z <0B>?
ףp=
<EFBFBD>?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<>gc<67>O?<3F>4{@<40>:<3A>R<41><CA99>u <0B>B<EFBFBD>FH?1<>v<EFBFBD><76><EFBFBD>G<EFBFBD><47>7}<7D><><EFBFBD><EFBFBD><EFBFBD>
?<3F><><?F<>}TN<54><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>޳<EFBFBD> ?<3F>P<EFBFBD>?<3F>bP<62><08><><EFBFBD><1D><><EFBFBD><EFBFBD>O<16><>X?<3F><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?<3F>x<EFBFBD>޳<EFBFBD> ?<3F><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?Kx<4B>h<EFBFBD><68>g?<3F><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?<3F>Y<1C>oPq?<3F><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?V<><56><EFBFBD><EFBFBD>Ev?<3F><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z?<3F><><EFBFBD>S<EFBFBD><53>k?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z?<3F><>~j<>ts?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z?J +<2B>y?;<3B>O<EFBFBD><4F>nb?<3F><>G<EFBFBD>@<40>V?<3F>Q<EFBFBD><1E><EFBFBD><EB91BF>5L<35><4C>6<EFBFBD><36>x<EFBFBD>޳<EFBFBD> ?<3F>Q<EFBFBD><1E><EFBFBD><EB91BF><EFBFBD><EFBFBD>Mb0<62>*<2A> "f?<3F>Q<EFBFBD><1E><EFBFBD><EB91BF><EFBFBD>?VKE<4B><45>}<7D>?w8p?<3F>Q<EFBFBD><1E><EFBFBD>,<2C><>j<EFBFBD>R<EFBFBD><52><EFBFBD><E8B3A8>t?<3F>Q<EFBFBD><1E><EFBFBD>K<EFBFBD><4B><EFBFBD>]<5D>獓¼<E78D93>y?<3F>Q<EFBFBD><1E>
<EFBFBD>J$<24><>f<EFBFBD>G<EFBFBD><47><EFBFBD> <11>?<3F>Q<EFBFBD><1E><0E> x|{w<><77><EFBFBD>ڥ.<2E>~?<3F>Q<EFBFBD><1E><EFBFBD><EB91BF>q<><0E>kA0<41>?<3F>Q<EFBFBD><1E>둿!<0E>J<EFBFBD>~<7E>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD> ?)\<5C><><EFBFBD>(<28><>_<07>Q<>{<7B>9<EFBFBD>D9<44>/Q?)\<5C><><EFBFBD>(<28><>ò><3E>߹|<7C><><EFBFBD>y<>/]?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>\<5C><><EFBFBD>~<7E><>B<EFBFBD><42><EFBFBD><EFBFBD>b?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><06><><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>t?)\<5C><><EFBFBD>(<28><>jS<6A>,
<EFBFBD>|<7C>dN<64>R<EFBFBD>Cs?)\<5C><><EFBFBD>(<28><>B<EFBFBD>]<5D>gFz<46><EFBFBD><ED9689><EFBFBD>u?)\<5C><><EFBFBD>(<28><>j<EFBFBD><6A><EFBFBD><<3C><><EFBFBD>Yh)Q<><51>Q?)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><14><>o<EFBFBD><6F>x<EFBFBD>޳<EFBFBD> ?)\<5C><><EFBFBD>(<28><>ŏ1w-!o<>"<22><>R<EFBFBD><52>`?)\<5C><><EFBFBD>(<28><><EFBFBD>ò<EFBFBD>_$q<><71>x<EFBFBD>޳<EFBFBD> ?
ףp=
<EFBFBD>?_v<5F>d<EFBFBD>X?
ףp=
<EFBFBD>?<3F>A<EFBFBD>p<EFBFBD>-<1E><> <0B>_!Rg?
ףp=
<EFBFBD>? m<>ze<<3C>n<18><><EFBFBD><EFBFBD>p?
ףp=
<EFBFBD>?i,<2C>lVN<56>#<23><>H<>u?
ףp=
<EFBFBD>?<3F>}<7D>ϕ<EFBFBD>Z<EFBFBD><5A>
F%uz?
ףp=
<EFBFBD>?. <20><1E>Ld<4C><64><EFBFBD>Y<EFBFBD><59> ?
ףp=
<EFBFBD>?<3F><><EFBFBD>{<7B>p<><70><EFBFBD>r<EFBFBD><72>{<7B>?
ףp=
<EFBFBD>?2(<28><>W<EFBFBD>v<EFBFBD><76>r<EFBFBD><72>h<EFBFBD><68>?
ףp=
<EFBFBD>?<3F><><EFBFBD><EFBFBD>bc~<7E>9<EFBFBD>D9<44>/Q<><51>'<27>1<EFBFBD><31>q?R<><1E><>Q<EFBFBD><51>4<EFBFBD><34><EFBFBD>`[X<><58><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>p<> @<40>a<EFBFBD><1B>E\cDp?R<><1E><>Q<EFBFBD><51>Kx<4B>h<EFBFBD><68>g<EFBFBD><67><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51><EFBFBD><EFBFBD>sZ\<5C>j<EFBFBD><6A><EFBFBD>Dwj?R<><1E><>Q<EFBFBD><51><EFBFBD>Y<1C>oPq<50><71><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>I<EFBFBD>B<>r<>kܴ|<7C><>R?R<><1E><>Q<EFBFBD><51>c <0C><><EFBFBD><EFBFBD>r<EFBFBD>g<EFBFBD>NVɤȼR<C8BC><1E><>Q<EFBFBD><51>mH<6D><48>A8p<38>m<EFBFBD>$<24><b?R<><1E><>Q<EFBFBD><51>V<EFBFBD><56><EFBFBD><EFBFBD>Ev<45><76><1E><>Q<EFBFBD>~?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><1F><>
{<7B><><R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD>S<EFBFBD><53>k?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD>~j<>ts?R<><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD>J +<2B>y?R<><1E><>Q<EFBFBD><51>9<EFBFBD>D9<44>/Q<><51>'<27>1<EFBFBD><31>q<EFBFBD>R<EFBFBD><1E><>Q<EFBFBD><51>p<> @<40>a<EFBFBD><1B>E\cDp<44>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD><EFBFBD>sZ\<5C>j<EFBFBD><6A><EFBFBD>Dwj<>R<EFBFBD><1E><>Q<EFBFBD><51>I<EFBFBD>B<>r<>kܴ|<7C><>R<EFBFBD>R<EFBFBD><1E><>Q<EFBFBD><51>mH<6D><48>A8p<38>m<EFBFBD>$<24><b<>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD><EFBFBD>Mb`<60>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD>S<EFBFBD><53>k<EFBFBD>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD>~j<>ts<74>R<EFBFBD><1E><>Q<EFBFBD><51>9<EFBFBD><39>v<EFBFBD><76>z<EFBFBD>J +<2B>y<>R<EFBFBD><1E><>Q<EFBFBD><51><EFBFBD><EFBFBD>G<EFBFBD>@<40>V<EFBFBD><56>Q<EFBFBD><1E><EFBFBD><06>Ŧ<EFBFBD><C5A6><EFBFBD>*<2A> "f<><66>Q<EFBFBD><1E><EFBFBD>4<EFBFBD>8EG<45><47><EFBFBD>}<7D>?w8p<38><70>Q<EFBFBD><1E><EFBFBD>ĘO<C498>ő<EFBFBD><C591><EFBFBD><E8B3A8>t<EFBFBD><74>Q<EFBFBD><1E>둿wT볹 <20><>獓¼<E78D93>y<EFBFBD><79>Q<EFBFBD><1E>둿D9,h<><1B><>G<EFBFBD><47><EFBFBD> <11><><EFBFBD>Q<EFBFBD><1E><EFBFBD><EB91BF><EFBFBD><EFBFBD><EFBFBD>%<25><><EFBFBD><EFBFBD>ڥ.<2E>~<7E><>Q<EFBFBD><1E>둿A<EB91BF>]<5D><>a<EFBFBD><61><0E>kA0<41><30><EFBFBD>Q<EFBFBD><1E><06>G<EFBFBD><47>|<7C><><EFBFBD><EFBFBD>}8H<38><48><EFBFBD><EFBFBD>Q<EFBFBD><1E><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD>D9<44>/Q<>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>2d<32><64><EFBFBD><EFBFBD><EFBFBD>y<>/]<5D>)\<5C><><EFBFBD>(<28><><f<>2<EFBFBD>}<7D><><EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD>b<EFBFBD>)\<5C><><EFBFBD>(<28><>3Y<33><59><49><DD84>+<2B><>xd<78>)\<5C><><EFBFBD>(<28><><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>t<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ZI<5A><49><EFBFBD>dN<64>R<EFBFBD>Cs<43>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><ED9689><EFBFBD>u<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>LLb<><62>\><3E><><1E>v<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Yh)Q<><51>Q<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD>ˤ<<3C>卿"<22><>R<EFBFBD><52>`<60>)\<5C><><EFBFBD>(<28><>S<EFBFBD><53><EFBFBD>.Q<><51>_v<5F>d<EFBFBD>X<EFBFBD>
ףp=
<EFBFBD>?<3F><><EFBFBD><EFBFBD><><D392> <0B>_!Rg<52>
ףp=
<EFBFBD>?<3F>)<29><><13><><EFBFBD>n<18><><EFBFBD><EFBFBD>p<EFBFBD>
ףp=
<EFBFBD>?F$
-<2D><><EFBFBD><EFBFBD>#<23><>H<>u<EFBFBD>
ףp=
<EFBFBD>?<3F>d<EFBFBD><64><EFBFBD>F<EFBFBD><46><EFBFBD>
F%uz<>
ףp=
<EFBFBD>?<3F><>8h<><68><EFBFBD><EFBFBD>Y<EFBFBD><59> <>
ףp=
<EFBFBD>?<3F>N<><EFBFBD><E28DBF>r<EFBFBD><72>{<7B><>
ףp=
<EFBFBD>?<3F>D
(y<><79><EFBFBD>r<EFBFBD><72>h<EFBFBD><68><EFBFBD>
ףp=
<EFBFBD>?<ۤ<><DBA4><EFBFBD><EFBFBD><1F><15>Z <0B><>
ףp=
<EFBFBD>?<3F>l<EFBFBD><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>e<>gc<67>O<EFBFBD><4F>4{@<40>:<3A>R<41><CA99>u <0B>B<EFBFBD>FH<46>1<EFBFBD>v<EFBFBD><76><EFBFBD>G<EFBFBD><47>7}<7D><><EFBFBD><EFBFBD><EFBFBD>
?<3F><><<3C>F<>}TN<54><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<16><>X<EFBFBD><58><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?Kx<4B>h<EFBFBD><68>g<EFBFBD><67><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?<3F>Y<1C>oPq<50><71><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?V<><56><EFBFBD><EFBFBD>Ev<45><76><1E><>Q<EFBFBD>~?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD><EFBFBD>S<EFBFBD><53>k?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z<EFBFBD><7A><EFBFBD>~j<>ts?;<3B>O<EFBFBD><4F>nb?9<><39>v<EFBFBD><76>z<EFBFBD>J +<2B>y?;<3B>O<EFBFBD><4F>nb?<3F><>G<EFBFBD>@<40>V<EFBFBD><56>Q<EFBFBD><1E><EFBFBD><EB91BF>5L<35><4C>6<EFBFBD>*<2A> "f<><66>Q<EFBFBD><1E><EFBFBD><EB91BF><EFBFBD>?VKE<4B><45>}<7D>?w8p<38><70>Q<EFBFBD><1E><EFBFBD>,<2C><>j<EFBFBD>R<EFBFBD><52><EFBFBD><E8B3A8>t<EFBFBD><74>Q<EFBFBD><1E><EFBFBD>K<EFBFBD><4B><EFBFBD>]<5D>獓¼<E78D93>y<EFBFBD><79>Q<EFBFBD><1E>
<EFBFBD>J$<24><>f<EFBFBD><66><EFBFBD>ڥ.<2E>~<7E><>Q<EFBFBD><1E><EFBFBD><EB91BF>q<>G<EFBFBD><47><EFBFBD> <11><><EFBFBD>Q<EFBFBD><1E><0E> x|{w<><0E>kA0<41><30><EFBFBD>Q<EFBFBD><1E>둿!<0E>J<EFBFBD>~<7E>9<EFBFBD>D9<44>/Q<>)\<5C><><EFBFBD>(<28><>ò><3E>߹|<7C><><EFBFBD>y<>/]<5D>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD>\<5C><><EFBFBD>~<7E><>B<EFBFBD><42><EFBFBD><EFBFBD>b<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><06><>dN<64>R<EFBFBD>Cs<43>)\<5C><><EFBFBD>(<28><>B<EFBFBD>]<5D>gFz<46><7A><EFBFBD>4<EFBFBD><34><EFBFBD>t<EFBFBD>)\<5C><><EFBFBD>(<28><>jS<6A>,
<EFBFBD>|<7C><EFBFBD><ED9689><EFBFBD>u<EFBFBD>)\<5C><><EFBFBD>(<28><>j<EFBFBD><6A><EFBFBD><<3C><><EFBFBD>Yh)Q<><51>Q<EFBFBD>)\<5C><><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><14><>o<EFBFBD>"<22><>R<EFBFBD><52>`<60>)\<5C><><EFBFBD>(<28><><EFBFBD>ò<EFBFBD>_$q<>_v<5F>d<EFBFBD>X<EFBFBD>
ףp=
<EFBFBD>?<3F>A<EFBFBD>p<EFBFBD>-<1E><> <0B>_!Rg<52>
ףp=
<EFBFBD>? m<>ze<<3C>n<18><><EFBFBD><EFBFBD>p<EFBFBD>
ףp=
<EFBFBD>?i,<2C>lVN<56>#<23><>H<>u<EFBFBD>

View File

@ -34,11 +34,11 @@ deltaT 1;
writeControl timeStep;
writeInterval 1000; //10 to see the meshing steps
writeInterval 1000;
purgeWrite 0;
writeFormat ascii;
writeFormat binary; //ascii;
writePrecision 10;
@ -50,5 +50,7 @@ timePrecision 6;
runTimeModifiable yes;
libs ("libdistributed.so");
// ************************************************************************* //

View File

@ -34,6 +34,15 @@ geometry
}
backgroundMeshDecomposition
{
minLevels 1;
sampleResolution 4;
spanScale 5;
maxCellWeightCoeff 10;
}
surfaceConformation
{
locationInMesh (0 0 0);
@ -96,12 +105,14 @@ surfaceConformation
{
flange.obj
{
featureMethod extendedFeatureEdgeMesh;
extendedFeatureEdgeMesh "flange.extendedFeatureEdgeMesh";
featureMethod extendedFeatureEdgeMesh;
extendedFeatureEdgeMesh "flange.extendedFeatureEdgeMesh";
}
}
additionalFeatures {}
additionalFeatures
{
}
}
@ -110,32 +121,16 @@ initialPoints
minimumSurfaceDistanceCoeff 0.55;
initialPointsMethod autoDensity;
// initialPointsMethod uniformGrid;
// initialPointsMethod bodyCentredCubic;
// initialPointsMethod pointFile;
autoDensityCoeffs
{
minLevels 1;
maxSizeRatio 2.0;
sampleResolution 5;
maxSizeRatio 3.0;
sampleResolution 4;
surfaceSampleResolution 5;
}
uniformGridCoeffs
{
initialCellSize 0.0015;
randomiseInitialGrid yes;
randomPerturbationCoeff 0.02;
}
bodyCentredCubicCoeffs
{
initialCellSize 0.0015;
randomiseInitialGrid no;
randomPerturbationCoeff 0.1;
}
pointFileCoeffs
{
pointFile "constant/internalDelaunayVertices";
@ -145,13 +140,25 @@ initialPoints
motionControl
{
defaultCellSize 0.00075;
defaultCellSize 0.001;
// Assign a priority to all requests for cell sizes, the highest overrules.
defaultPriority 0;
cellSizeControlGeometry
{
flange.obj
{
priority 1;
mode bothSides;
cellSizeFunction linearDistance;
linearDistanceCoeffs
{
surfaceCellSize 0.0005;
distanceCellSize $defaultCellSize;
distance 0.004;
}
}
}
relaxationModel adaptiveLinear;
@ -164,9 +171,11 @@ motionControl
objOutput no;
timeChecks yes;
timeChecks no;
alignmentSearchSpokes 36;
maxLoadUnbalance 0.05;
alignmentSearchSpokes 24;
alignmentAcceptanceAngle 48;
@ -196,10 +205,9 @@ motionControl
polyMeshFiltering
{
// Write the underlying Delaunay tet mesh at output time
writeTetDualMesh true;
writeTetDualMesh false;
filterSizeCoeff 0.2;
mergeClosenessCoeff 1e-4;
mergeClosenessCoeff 1e-9;
continueFilteringOnBadInitialPolyMesh true;
filterErrorReductionCoeff 0.5;
filterCountSkipThreshold 4;
@ -220,7 +228,7 @@ meshQualityControls
minTetQuality 1e-30;
minVol 0;
minArea -1;
minTwist 0.02;
minTwist 0.001;
minDeterminant 0.001;
minFaceWeight 0.02;
minVolRatio 0.01;

View File

@ -11,31 +11,35 @@ FoamFile
format ascii;
class dictionary;
location "system";
object fvSolution;
object decomposeParDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
numberOfSubdomains 8;
method scotch;
simpleCoeffs
{
"(D|Dcorr)"
{
solver GAMG;
tolerance 1e-06;
relTol 0.99;
smoother GaussSeidel;
cacheAgglomeration true;
nCellsInCoarsestLevel 6;
agglomerator faceAreaPair;
mergeLevels 1;
}
n ( 2 2 1 );
delta 0.001;
}
stressAnalysis
hierarchicalCoeffs
{
nCorrectors 1;
D 1e-10;
accelerationFactor 2;
n ( 2 2 2 );
delta 0.001;
order xyz;
}
manualCoeffs
{
dataFile "";
}
distributed no;
roots ( );
// ************************************************************************* //

View File

@ -0,0 +1,35 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object faceSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Name of set to operate on
name facesToBeRemoved;
// One of clear/new/invert/add/delete|subset/list
action new;
// Actions to apply to pointSet. These are all the topoSetSource's ending
// in ..ToFace (see the meshTools library).
topoSetSources
(
// Select by explicitly providing face labels
labelToFace
{
value #include "../facesToBeRemoved";
}
);
// ************************************************************************* //

View File

@ -15,40 +15,39 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
d2dt2Schemes
ddtSchemes
{
default steadyState;
default none;
}
gradSchemes
{
default Gauss cubic;
default none;
}
divSchemes
{
default Gauss cubic;
default none;
}
laplacianSchemes
{
default Gauss linear uncorrected;
default none;
}
interpolationSchemes
{
default cubic;
default none;
}
snGradSchemes
{
default uncorrected;
default none;
}
fluxRequired
{
default no;
D ;
}

View File

@ -17,25 +17,6 @@ FoamFile
solvers
{
"(D|Dcorr)"
{
solver GAMG;
tolerance 1e-06;
relTol 0.99;
smoother GaussSeidel;
cacheAgglomeration true;
nCellsInCoarsestLevel 6;
agglomerator faceAreaPair;
mergeLevels 1;
}
}
stressAnalysis
{
nCorrectors 1;
D 1e-10;
accelerationFactor 2;
}
// ************************************************************************* //

View File

@ -0,0 +1,319 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object topoSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// List of actions. Each action is a dictionary with e.g.
// // name of set
// name c0;
//
// // type: pointSet/faceSet/cellSet/faceZoneSet/cellZoneSet
// type cellSet;
//
// // action to perform on set. Two types:
// // - require no source : clear/invert
// // - require source : new/add/delete/subset
// action new;
//
// The source entry varies according to the type of set:
//
// cellSet
// ~~~~~~~
//
// // Select by explicitly providing cell labels
// source labelToCell;
// {
// value (12 13 56); // labels of cells
// }
//
// // Copy elements from cellSet
// source cellToCell;
// {
// set c1;
// }
//
// // Cells in cell zone
// source zoneToCell;
// {
// name ".*Zone"; // Name of cellZone, regular expressions allowed
// }
//
// // Cells on master or slave side of faceZone
// source faceZoneToCell;
// {
// name ".*Zone"; // Name of faceZone, regular expressions allowed
// option master; // master/slave
// }
//
// // Select based on faceSet
// source faceToCell;
// {
// set f0; // Name of faceSet
//
// //option neighbour; // cell with neighbour in faceSet
// //option owner; // ,, owner
// option any; // cell with any face in faceSet
// //option all; // cell with all faces in faceSet
// }
//
// // Select based on pointSet
// source pointToCell;
// {
// set p0;
// option any; // cell with any point in pointSet
// //option all; // cell with all points in pointSet
// }
//
// // Select based on cellShape
// source shapeToCell;
// {
// type hex; // hex/wedge/prism/pyr/tet/tetWedge/splitHex
// }
//
// // Cells with cell centre within box
// source boxToCell;
// {
// box (0 0 0) (1 1 1);
// }
//
// // Cells with cell centre within box
// // Is skewed, rotated box. Given as origin and three spanning vectors.
// source rotatedBoxToCell;
// {
// origin (0.2 0.2 -10);
// i (0.2 0.2 0);
// j (-0.2 0.2 0);
// k (10 10 10);
// }
//
// // Cells with centre within cylinder
// source cylinderToCell;
// {
// p1 (0.2 0.2 -10); // start point on cylinder axis
// p2 (0.2 0.2 0); // end point on cylinder axis
// radius 5.0;
// }
//
// // Cells with centre within sphere
// source sphereToCell;
// {
// centre (0.2 0.2 -10);
// radius 5.0;
// }
//
// // Cells with cellCentre nearest to coordinates
// source nearestToCell;
// {
// points ((0 0 0) (1 1 1)(2 2 2));
// }
//
// // Select based on surface
// source surfaceToCell;
// {
// file "www.avl.com-geometry.stl";
// outsidePoints ((-99 -99 -59)); // definition of outside
// includeCut false; // cells cut by surface
// includeInside false; // cells not on outside of surf
// includeOutside false; // cells on outside of surf
// nearDistance -1; // cells with centre near surf
// // (set to -1 if not used)
// curvature 0.9; // cells within nearDistance
// // and near surf curvature
// // (set to -100 if not used)
// }
//
// // values of field within certain range
// source fieldToCell;
// {
// fieldName U; // Note: uses mag(U) since volVectorField
// min 0.1;
// max 0.5;
// }
//
// // Mesh region (non-face connected part of (subset of)mesh)
// source regionToCell;
// {
// set c0; // name of cellSet giving mesh subset
// insidePoint (1 2 3); // point inside region to select
// }
//
//
//
// faceSet
// ~~~~~~~
//
// // Copy elements from faceSet
// source faceToFace;
// {
// set f1;
// }
//
// // Select based on cellSet
// source cellToFace;
// {
// set c0;
// option all; // All faces of cells
// //option both; // Only faces whose owner&neighbour are in cellSet
// }
//
// // Select based on pointSet
// source pointToFace;
// {
// set p0;
// option any; // Faces using any point in pointSet
// //option all // Faces with all points in pointSet
// }
//
// // Select by explicitly providing face labels
// source labelToFace;
// {
// value (12 13 56); // labels of faces
// }
//
// // All faces of patch
// source patchToFace;
// {
// name ".*Wall"; // Name of patch, regular expressions allowed
// }
//
// // All faces of faceZone
// source zoneToFace;
// {
// name ".*Zone1"; // Name of faceZone, regular expressions allowed
// }
//
// // Faces with face centre within box
// source boxToFace;
// {
// box (0 0 0) (1 1 1);
// }
//
// // Faces with normal to within certain angle aligned with vector.
// source normalToFace;
// {
// normal (0 0 1); // Vector
// cos 0.01; // Tolerance (max cos of angle)
// }
//
//
//
// pointSet
// ~~~~~~~
//
// // Copy elements from pointSet
// source pointToPoint;
// {
// set p1;
// }
//
// // Select based on cellSet
// source cellToPoint;
// {
// set c0;
// option all; // all points of cell
// }
//
// // Select based on faceSet
// source faceToPoint;
// {
// set f0; // name of faceSet
// option all; // all points of face
// }
//
// // Select by explicitly providing point labels
// source labelToPoint;
// {
// value (12 13 56); // labels of points
// }
//
// // All points in pointzone
// source zoneToPoint;
// {
// name ".*Zone"; // name of pointZone, regular expressions allowed
// }
//
// // Points nearest to coordinates
// source nearestToPoint;
// {
// points ((0 0 0) (1 1 1));
// }
//
// // Points with coordinate within box
// source boxToPoint;
// {
// box (0 0 0) (1 1 1);
// }
//
// // Select based on surface
// source surfaceToPoint;
// {
// file "www.avl.com-geometry.stl";
// nearDistance 0.1; // points near to surface
// includeInside false; // points on inside of surface
// // (requires closed surface with consistent
// // normals)
// includeOutside false; // ,, outside ,,
// }
//
//
//
//
// cellZoneSet
// ~~~~~~~~~~~
// (mirrors operations on a cellSet into a cellZone)
//
// // Select based on cellSet
// source setToCellZone;
// {
// set c0; // name of cellSet
// }
//
//
//
// faceZoneSet
// ~~~~~~~~~~~
// // Select based on faceSet without orientation
// source setToFaceZone;
// {
// set f0; // name of faceSet
// }
//
// // Select based on faceSet, using cellSet to determine orientation
// source setsToFaceZone;
// {
// faceSet f0; // name of faceSet
// cellSet c0; // name of cellSet of slave side
// }
actions
(
{
name background;
type cellSet;
action new;
source surfaceToCell;
sourceInfo
{
file "constant/triSurface/flange.obj";
outsidePoints ((-0.026 -0.0275 -0.0235));
includeCut true;
includeInside true;
includeOutside false;
nearDistance -1;
curvature -100;
}
}
);
// ************************************************************************* //

View File

@ -15,6 +15,10 @@ FoamFile
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
zSlice -0.009;
ySlice 0.0;
xSlice 0.0;
actions
(
{
@ -24,7 +28,7 @@ actions
source boxToCell;
sourceInfo
{
box (-100000 -100000 50)(100000 100000 100000);
box (-100 -100 $zSlice)(100 100 100);
}
}
@ -67,7 +71,7 @@ actions
source boxToCell;
sourceInfo
{
box (-100000 0 -100000)(100000 100000 100000);
box (-100 $ySlice -100)(100 100 100);
}
}
@ -110,7 +114,7 @@ actions
source boxToCell;
sourceInfo
{
box (0 -100000 -100000)(100000 100000 100000);
box ($xSlice -100 -100)(100 100 100);
}
}

View File

@ -384,6 +384,9 @@ polyMeshFiltering
edgeCollapseGuardFraction 0.3;
// Only collapse face to point if high aspect ratio
maxCollapseFaceToPointSideLengthCoeff 0.35;
// Write the tet-dual mesh for post-processing
writeTetDualMesh yes;
}

View File

@ -1,51 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
leftWall
{
type fixedValue;
value uniform (0 0 0);
}
rightWall
{
type fixedValue;
value uniform (0 0 0);
}
lowerWall
{
type fixedValue;
value uniform (0 0 0);
}
atmosphere
{
type fluxCorrectedVelocity;
value uniform (0 0 0);
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,79 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphaair;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type alphaContactAngle;
thetaProperties
(
( water air ) 90 0 0 0
( oil air ) 90 0 0 0
( mercury air ) 90 0 0 0
( water oil ) 90 0 0 0
( water mercury ) 90 0 0 0
( oil mercury ) 90 0 0 0
);
value uniform 0;
}
rightWall
{
type alphaContactAngle;
thetaProperties
(
( water air ) 90 0 0 0
( oil air ) 90 0 0 0
( mercury air ) 90 0 0 0
( water oil ) 90 0 0 0
( water mercury ) 90 0 0 0
( oil mercury ) 90 0 0 0
);
value uniform 1;
}
lowerWall
{
type alphaContactAngle;
thetaProperties
(
( water air ) 90 0 0 0
( oil air ) 90 0 0 0
( mercury air ) 90 0 0 0
( water oil ) 90 0 0 0
( water mercury ) 90 0 0 0
( oil mercury ) 90 0 0 0
);
value uniform 0;
}
atmosphere
{
type inletOutlet;
inletValue uniform 1;
value uniform 1;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,49 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphamercury;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,49 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphaoil;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,49 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphawater;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,59 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object p_rgh;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type buoyantPressure;
value uniform 0;
}
rightWall
{
type buoyantPressure;
value uniform 0;
}
lowerWall
{
type buoyantPressure;
value uniform 0;
}
atmosphere
{
type totalPressure;
p0 uniform 0;
U U;
phi phi;
rho rho;
psi none;
gamma 1;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,9 +1,11 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
\rm -rf 0
cp -r 0.org 0
# ----------------------------------------------------------------- end-of-file

View File

@ -7,6 +7,9 @@ cd ${0%/*} || exit 1 # run from this directory
# Set application name
application=`getApplication`
\rm -rf 0
cp -r 0.org 0
runApplication blockMesh
runApplication setFields
runApplication $application

View File

@ -17,7 +17,7 @@ FoamFile
application multiphaseInterFoam;
startFrom latestTime;
startFrom startTime;
startTime 0;

View File

@ -77,7 +77,7 @@ solvers
maxIter 20;
}
"(U|alpha)"
U
{
solver smoothSolver;
smoother GaussSeidel;
@ -96,11 +96,9 @@ solvers
PIMPLE
{
nCorrectors 4;
nCorrectors 2;
nNonOrthogonalCorrectors 0;
nAlphaCorr 4;
nAlphaSubCycles 4;
cycleAlpha yes;
cAlpha 2;
}

View File

@ -1,51 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
leftWall
{
type fixedValue;
value uniform (0 0 0);
}
rightWall
{
type fixedValue;
value uniform (0 0 0);
}
lowerWall
{
type fixedValue;
value uniform (0 0 0);
}
atmosphere
{
type fluxCorrectedVelocity;
value uniform (0 0 0);
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,79 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphaair;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type alphaContactAngle;
thetaProperties
(
( water air ) 90 0 0 0
( oil air ) 90 0 0 0
( mercury air ) 90 0 0 0
( water oil ) 90 0 0 0
( water mercury ) 90 0 0 0
( oil mercury ) 90 0 0 0
);
value uniform 0;
}
rightWall
{
type alphaContactAngle;
thetaProperties
(
( water air ) 90 0 0 0
( oil air ) 90 0 0 0
( mercury air ) 90 0 0 0
( water oil ) 90 0 0 0
( water mercury ) 90 0 0 0
( oil mercury ) 90 0 0 0
);
value uniform 1;
}
lowerWall
{
type alphaContactAngle;
thetaProperties
(
( water air ) 90 0 0 0
( oil air ) 90 0 0 0
( mercury air ) 90 0 0 0
( water oil ) 90 0 0 0
( water mercury ) 90 0 0 0
( oil mercury ) 90 0 0 0
);
value uniform 0;
}
atmosphere
{
type inletOutlet;
inletValue uniform 1;
value uniform 1;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,49 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphamercury;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,49 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphaoil;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,47 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphas;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type zeroGradient;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,49 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alphawater;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 0 0 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,59 +0,0 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object p_rgh;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [1 -1 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
leftWall
{
type buoyantPressure;
value uniform 0;
}
rightWall
{
type buoyantPressure;
value uniform 0;
}
lowerWall
{
type buoyantPressure;
value uniform 0;
}
atmosphere
{
type totalPressure;
p0 uniform 0;
U U;
phi phi;
rho rho;
psi none;
gamma 1;
value uniform 0;
}
defaultFaces
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,9 +1,11 @@
#!/bin/sh
cd ${0%/*} || exit 1 # run from this directory
# Source tutorial clean functions
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
cleanCase
\rm -rf 0
cp -r 0.org 0
# ----------------------------------------------------------------- end-of-file

View File

@ -7,8 +7,12 @@ cd ${0%/*} || exit 1 # run from this directory
# Set application name
application=`getApplication`
cp -r 0.org 0
runApplication blockMesh
runApplication setFields
runApplication $application
runApplication decomposePar
runParallel $application 4
runApplication reconstructPar
# ----------------------------------------------------------------- end-of-file

View File

@ -90,11 +90,9 @@ solvers
PIMPLE
{
momentumPredictor no;
nCorrectors 4;
nCorrectors 2;
nNonOrthogonalCorrectors 0;
nAlphaCorr 4;
nAlphaSubCycles 4;
cycleAlpha yes;
cAlpha 2;
}