mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of /home/noisy3/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -27,11 +27,13 @@ License
|
|||||||
#include "alphaContactAngleFvPatchScalarField.H"
|
#include "alphaContactAngleFvPatchScalarField.H"
|
||||||
#include "Time.H"
|
#include "Time.H"
|
||||||
#include "subCycle.H"
|
#include "subCycle.H"
|
||||||
#include "fvCFD.H"
|
#include "MULES.H"
|
||||||
|
#include "fvcSnGrad.H"
|
||||||
|
#include "fvcFlux.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * //
|
||||||
|
|
||||||
const scalar Foam::multiphaseMixture::convertToRad =
|
const Foam::scalar Foam::multiphaseMixture::convertToRad =
|
||||||
Foam::constant::mathematical::pi/180.0;
|
Foam::constant::mathematical::pi/180.0;
|
||||||
|
|
||||||
|
|
||||||
@ -249,10 +251,6 @@ void Foam::multiphaseMixture::solve()
|
|||||||
|
|
||||||
label nAlphaSubCycles(readLabel(pimpleDict.lookup("nAlphaSubCycles")));
|
label nAlphaSubCycles(readLabel(pimpleDict.lookup("nAlphaSubCycles")));
|
||||||
|
|
||||||
label nAlphaCorr(readLabel(pimpleDict.lookup("nAlphaCorr")));
|
|
||||||
|
|
||||||
bool cycleAlpha(Switch(pimpleDict.lookup("cycleAlpha")));
|
|
||||||
|
|
||||||
scalar cAlpha(readScalar(pimpleDict.lookup("cAlpha")));
|
scalar cAlpha(readScalar(pimpleDict.lookup("cAlpha")));
|
||||||
|
|
||||||
|
|
||||||
@ -269,7 +267,7 @@ void Foam::multiphaseMixture::solve()
|
|||||||
!(++alphaSubCycle).end();
|
!(++alphaSubCycle).end();
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
solveAlphas(nAlphaCorr, cycleAlpha, cAlpha);
|
solveAlphas(cAlpha);
|
||||||
rhoPhiSum += (runTime.deltaT()/totalDeltaT)*rhoPhi_;
|
rhoPhiSum += (runTime.deltaT()/totalDeltaT)*rhoPhi_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +275,7 @@ void Foam::multiphaseMixture::solve()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
solveAlphas(nAlphaCorr, cycleAlpha, cAlpha);
|
solveAlphas(cAlpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,8 +479,6 @@ Foam::multiphaseMixture::nearInterface() const
|
|||||||
|
|
||||||
void Foam::multiphaseMixture::solveAlphas
|
void Foam::multiphaseMixture::solveAlphas
|
||||||
(
|
(
|
||||||
const label nAlphaCorr,
|
|
||||||
const bool cycleAlpha,
|
|
||||||
const scalar cAlpha
|
const scalar cAlpha
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -490,55 +486,34 @@ void Foam::multiphaseMixture::solveAlphas
|
|||||||
nSolves++;
|
nSolves++;
|
||||||
|
|
||||||
word alphaScheme("div(phi,alpha)");
|
word alphaScheme("div(phi,alpha)");
|
||||||
word alphacScheme("div(phirb,alpha)");
|
word alpharScheme("div(phirb,alpha)");
|
||||||
|
|
||||||
tmp<fv::convectionScheme<scalar> > mvConvection
|
|
||||||
(
|
|
||||||
fv::convectionScheme<scalar>::New
|
|
||||||
(
|
|
||||||
mesh_,
|
|
||||||
alphaTable_,
|
|
||||||
phi_,
|
|
||||||
mesh_.divScheme(alphaScheme)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
surfaceScalarField phic(mag(phi_/mesh_.magSf()));
|
surfaceScalarField phic(mag(phi_/mesh_.magSf()));
|
||||||
phic = min(cAlpha*phic, max(phic));
|
phic = min(cAlpha*phic, max(phic));
|
||||||
|
|
||||||
for (int gCorr=0; gCorr<nAlphaCorr; gCorr++)
|
PtrList<surfaceScalarField> phiAlphaCorrs(phases_.size());
|
||||||
{
|
int phasei = 0;
|
||||||
phase* refPhasePtr = &refPhase_;
|
|
||||||
|
|
||||||
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)
|
forAllIter(PtrDictionary<phase>, phases_, iter)
|
||||||
{
|
{
|
||||||
phase& alpha = iter();
|
phase& alpha = iter();
|
||||||
|
|
||||||
if (&alpha == &refPhase) continue;
|
phiAlphaCorrs.set
|
||||||
|
|
||||||
fvScalarMatrix alphaEqn
|
|
||||||
(
|
(
|
||||||
fvm::ddt(alpha)
|
phasei,
|
||||||
+ mvConvection->fvmDiv(phi_, alpha)
|
new surfaceScalarField
|
||||||
|
(
|
||||||
|
fvc::flux
|
||||||
|
(
|
||||||
|
phi_,
|
||||||
|
alpha,
|
||||||
|
alphaScheme
|
||||||
|
)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
surfaceScalarField& phiAlphaCorr = phiAlphaCorrs[phasei];
|
||||||
|
|
||||||
forAllIter(PtrDictionary<phase>, phases_, iter2)
|
forAllIter(PtrDictionary<phase>, phases_, iter2)
|
||||||
{
|
{
|
||||||
phase& alpha2 = iter2();
|
phase& alpha2 = iter2();
|
||||||
@ -546,17 +521,55 @@ void Foam::multiphaseMixture::solveAlphas
|
|||||||
if (&alpha2 == &alpha) continue;
|
if (&alpha2 == &alpha) continue;
|
||||||
|
|
||||||
surfaceScalarField phir(phic*nHatf(alpha, alpha2));
|
surfaceScalarField phir(phic*nHatf(alpha, alpha2));
|
||||||
surfaceScalarField phirb12
|
|
||||||
(
|
|
||||||
-fvc::flux(-phir, alpha2, alphacScheme)
|
|
||||||
);
|
|
||||||
|
|
||||||
alphaEqn += fvm::div(phirb12, alpha, alphacScheme);
|
phiAlphaCorr += fvc::flux
|
||||||
|
(
|
||||||
|
-fvc::flux(-phir, alpha2, alpharScheme),
|
||||||
|
alpha,
|
||||||
|
alpharScheme
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
alphaEqn.solve(mesh_.solver("alpha"));
|
MULES::limit
|
||||||
|
(
|
||||||
|
geometricOneField(),
|
||||||
|
alpha,
|
||||||
|
phi_,
|
||||||
|
phiAlphaCorr,
|
||||||
|
zeroField(),
|
||||||
|
zeroField(),
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
3,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
rhoPhi_ += alphaEqn.flux()*(alpha.rho() - refPhase.rho());
|
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 = "
|
Info<< alpha.name() << " volume fraction, min, max = "
|
||||||
<< alpha.weightedAverage(mesh_.V()).value()
|
<< alpha.weightedAverage(mesh_.V()).value()
|
||||||
@ -564,17 +577,16 @@ void Foam::multiphaseMixture::solveAlphas
|
|||||||
<< ' ' << max(alpha).value()
|
<< ' ' << max(alpha).value()
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
refPhaseNew == refPhaseNew - alpha;
|
sumAlpha += alpha;
|
||||||
|
|
||||||
|
phasei++;
|
||||||
}
|
}
|
||||||
|
|
||||||
refPhase == refPhaseNew;
|
Info<< "Phase-sum volume fraction, min, max = "
|
||||||
|
<< sumAlpha.weightedAverage(mesh_.V()).value()
|
||||||
Info<< refPhase.name() << " volume fraction, min, max = "
|
<< ' ' << min(sumAlpha).value()
|
||||||
<< refPhase.weightedAverage(mesh_.V()).value()
|
<< ' ' << max(sumAlpha).value()
|
||||||
<< ' ' << min(refPhase).value()
|
|
||||||
<< ' ' << max(refPhase).value()
|
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
|
||||||
|
|
||||||
calcAlphas();
|
calcAlphas();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -168,12 +168,7 @@ private:
|
|||||||
|
|
||||||
void calcAlphas();
|
void calcAlphas();
|
||||||
|
|
||||||
void solveAlphas
|
void solveAlphas(const scalar cAlpha);
|
||||||
(
|
|
||||||
const label nAlphaCorr,
|
|
||||||
const bool cycleAlpha,
|
|
||||||
const scalar cAlpha
|
|
||||||
);
|
|
||||||
|
|
||||||
tmp<surfaceVectorField> nHatfv
|
tmp<surfaceVectorField> nHatfv
|
||||||
(
|
(
|
||||||
|
|||||||
@ -9,7 +9,7 @@ wmake snappyHexMesh
|
|||||||
|
|
||||||
if [ -d "$CGAL_ARCH_PATH" ]
|
if [ -d "$CGAL_ARCH_PATH" ]
|
||||||
then
|
then
|
||||||
wmake cvMesh
|
cd cvMesh && ./Allwmake
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ----------------------------------------------------------------- end-of-file
|
# ----------------------------------------------------------------- end-of-file
|
||||||
|
|||||||
@ -105,19 +105,19 @@ int main(int argc, char *argv[])
|
|||||||
"file",
|
"file",
|
||||||
"specify an alternative dictionary for the topoSet dictionary"
|
"specify an alternative dictionary for the topoSet dictionary"
|
||||||
);
|
);
|
||||||
# include "addRegionOption.H"
|
#include "addRegionOption.H"
|
||||||
argList::addBoolOption
|
argList::addBoolOption
|
||||||
(
|
(
|
||||||
"noSync",
|
"noSync",
|
||||||
"do not synchronise selection across coupled patches"
|
"do not synchronise selection across coupled patches"
|
||||||
);
|
);
|
||||||
|
|
||||||
# include "setRootCase.H"
|
#include "setRootCase.H"
|
||||||
# include "createTime.H"
|
#include "createTime.H"
|
||||||
|
|
||||||
instantList timeDirs = timeSelector::selectIfPresent(runTime, args);
|
instantList timeDirs = timeSelector::selectIfPresent(runTime, args);
|
||||||
|
|
||||||
# include "createNamedPolyMesh.H"
|
#include "createNamedPolyMesh.H"
|
||||||
|
|
||||||
const bool noSync = args.optionFound("noSync");
|
const bool noSync = args.optionFound("noSync");
|
||||||
|
|
||||||
|
|||||||
@ -912,7 +912,7 @@ DimensionedConstants
|
|||||||
}
|
}
|
||||||
electromagnetic
|
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
|
atomic
|
||||||
{
|
{
|
||||||
@ -942,7 +942,7 @@ DimensionedConstants
|
|||||||
}
|
}
|
||||||
electromagnetic
|
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
|
atomic
|
||||||
{
|
{
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -56,7 +56,7 @@ Foam::Istream& Foam::operator>>(Foam::Istream& is, FixedList<T, Size>& L)
|
|||||||
{
|
{
|
||||||
L = dynamicCast<token::Compound<List<T> > >
|
L = dynamicCast<token::Compound<List<T> > >
|
||||||
(
|
(
|
||||||
firstToken.transferCompoundToken()
|
firstToken.transferCompoundToken(is)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (firstToken.isLabel())
|
else if (firstToken.isLabel())
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -59,7 +59,7 @@ Foam::Istream& Foam::operator>>(Istream& is, List<T>& L)
|
|||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<T> > >
|
dynamicCast<token::Compound<List<T> > >
|
||||||
(
|
(
|
||||||
firstToken.transferCompoundToken()
|
firstToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -63,11 +63,11 @@ Foam::autoPtr<Foam::token::compound> Foam::token::compound::New
|
|||||||
|
|
||||||
if (cstrIter == IstreamConstructorTablePtr_->end())
|
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
|
<< "Unknown compound type " << compoundType << nl << nl
|
||||||
<< "Valid compound types:" << endl
|
<< "Valid compound types:" << endl
|
||||||
<< IstreamConstructorTablePtr_->sortedToc()
|
<< IstreamConstructorTablePtr_->sortedToc()
|
||||||
<< abort(FatalError);
|
<< abort(FatalIOError);
|
||||||
}
|
}
|
||||||
|
|
||||||
return autoPtr<Foam::token::compound>(cstrIter()(is));
|
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 (type_ == COMPOUND)
|
||||||
{
|
{
|
||||||
if (compoundTokenPtr_->empty())
|
if (compoundTokenPtr_->empty())
|
||||||
{
|
{
|
||||||
FatalErrorIn("token::transferCompoundToken()")
|
FatalIOErrorIn
|
||||||
<< "compound has already been transfered from token\n "
|
(
|
||||||
<< info() << abort(FatalError);
|
"token::transferCompoundToken(const Istream& is)",
|
||||||
|
is
|
||||||
|
) << "compound has already been transfered from token\n "
|
||||||
|
<< info() << abort(FatalIOError);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -351,7 +351,7 @@ public:
|
|||||||
|
|
||||||
inline bool isCompound() const;
|
inline bool isCompound() const;
|
||||||
inline const compound& compoundToken() const;
|
inline const compound& compoundToken() const;
|
||||||
compound& transferCompoundToken();
|
compound& transferCompoundToken(const Istream& is);
|
||||||
|
|
||||||
inline label lineNumber() const;
|
inline label lineNumber() const;
|
||||||
inline label& lineNumber();
|
inline label& lineNumber();
|
||||||
|
|||||||
@ -44,7 +44,7 @@ const Foam::dimensionedScalar Foam::constant::electromagnetic::mu0
|
|||||||
dimensionedScalar
|
dimensionedScalar
|
||||||
(
|
(
|
||||||
"mu0",
|
"mu0",
|
||||||
dimensionSet(1, 2, -1, 0, 0, -2, 0),
|
dimensionSet(1, 1, -2, 0, 0, -2, 0),
|
||||||
4.0*constant::mathematical::pi*1e-07
|
4.0*constant::mathematical::pi*1e-07
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@ -145,7 +145,6 @@ Foam::pointField Foam::coupledPolyPatch::getAnchorPoints
|
|||||||
|
|
||||||
Foam::scalarField Foam::coupledPolyPatch::calcFaceTol
|
Foam::scalarField Foam::coupledPolyPatch::calcFaceTol
|
||||||
(
|
(
|
||||||
const scalar matchTol,
|
|
||||||
const UList<face>& faces,
|
const UList<face>& faces,
|
||||||
const pointField& points,
|
const pointField& points,
|
||||||
const pointField& faceCentres
|
const pointField& faceCentres
|
||||||
@ -173,7 +172,7 @@ Foam::scalarField Foam::coupledPolyPatch::calcFaceTol
|
|||||||
maxLenSqr = max(maxLenSqr, magSqr(pt - cc));
|
maxLenSqr = max(maxLenSqr, magSqr(pt - cc));
|
||||||
maxCmpt = max(maxCmpt, cmptMax(cmptMag(pt)));
|
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;
|
return tols;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -160,7 +160,6 @@ protected:
|
|||||||
// from face centre to any of the face vertices.
|
// from face centre to any of the face vertices.
|
||||||
static scalarField calcFaceTol
|
static scalarField calcFaceTol
|
||||||
(
|
(
|
||||||
const scalar matchTol,
|
|
||||||
const UList<face>& faces,
|
const UList<face>& faces,
|
||||||
const pointField& points,
|
const pointField& points,
|
||||||
const pointField& faceCentres
|
const pointField& faceCentres
|
||||||
|
|||||||
@ -304,9 +304,9 @@ void Foam::cyclicPolyPatch::calcTransforms
|
|||||||
{
|
{
|
||||||
scalarField half0Tols
|
scalarField half0Tols
|
||||||
(
|
(
|
||||||
calcFaceTol
|
matchTolerance()
|
||||||
|
*calcFaceTol
|
||||||
(
|
(
|
||||||
matchTolerance(),
|
|
||||||
half0,
|
half0,
|
||||||
half0.points(),
|
half0.points(),
|
||||||
static_cast<const pointField&>(half0Ctrs)
|
static_cast<const pointField&>(half0Ctrs)
|
||||||
@ -562,7 +562,7 @@ void Foam::cyclicPolyPatch::getCentresAndAnchors
|
|||||||
|
|
||||||
|
|
||||||
// Calculate typical distance per face
|
// Calculate typical distance per face
|
||||||
tols = calcFaceTol(matchTolerance(), pp1, pp1.points(), half1Ctrs);
|
tols = matchTolerance()*calcFaceTol(pp1, pp1.points(), half1Ctrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -444,7 +444,7 @@ void Foam::oldCyclicPolyPatch::getCentresAndAnchors
|
|||||||
|
|
||||||
|
|
||||||
// Calculate typical distance per face
|
// Calculate typical distance per face
|
||||||
tols = calcFaceTol(matchTolerance(), half1Faces, pp.points(), half1Ctrs);
|
tols = matchTolerance()*calcFaceTol(half1Faces, pp.points(), half1Ctrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -179,6 +179,10 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
|
|||||||
// Neighbour normals
|
// Neighbour normals
|
||||||
vectorField nbrFaceNormals(neighbFaceAreas_.size());
|
vectorField nbrFaceNormals(neighbFaceAreas_.size());
|
||||||
|
|
||||||
|
// Face match tolerances
|
||||||
|
scalarField tols =
|
||||||
|
calcFaceTol(*this, points(), faceCentres());
|
||||||
|
|
||||||
// Calculate normals from areas and check
|
// Calculate normals from areas and check
|
||||||
forAll(faceNormals, facei)
|
forAll(faceNormals, facei)
|
||||||
{
|
{
|
||||||
@ -194,7 +198,7 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
|
|||||||
faceNormals[facei] = point(1, 0, 0);
|
faceNormals[facei] = point(1, 0, 0);
|
||||||
nbrFaceNormals[facei] = faceNormals[facei];
|
nbrFaceNormals[facei] = faceNormals[facei];
|
||||||
}
|
}
|
||||||
else if (mag(magSf - nbrMagSf)/avSf > matchTolerance())
|
else if (mag(magSf - nbrMagSf) > matchTolerance()*sqr(tols[facei]))
|
||||||
{
|
{
|
||||||
fileName nm
|
fileName nm
|
||||||
(
|
(
|
||||||
@ -238,7 +242,8 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
|
|||||||
<< "patch:" << name()
|
<< "patch:" << name()
|
||||||
<< " my area:" << magSf
|
<< " my area:" << magSf
|
||||||
<< " neighbour area:" << nbrMagSf
|
<< " neighbour area:" << nbrMagSf
|
||||||
<< " matching tolerance:" << matchTolerance()
|
<< " matching tolerance:"
|
||||||
|
<< matchTolerance()*sqr(tols[facei])
|
||||||
<< endl
|
<< endl
|
||||||
<< "Mesh face:" << start()+facei
|
<< "Mesh face:" << start()+facei
|
||||||
<< " vertices:"
|
<< " vertices:"
|
||||||
@ -264,7 +269,7 @@ void Foam::processorPolyPatch::calcGeometry(PstreamBuffers& pBufs)
|
|||||||
neighbFaceCentres_,
|
neighbFaceCentres_,
|
||||||
faceNormals,
|
faceNormals,
|
||||||
nbrFaceNormals,
|
nbrFaceNormals,
|
||||||
calcFaceTol(matchTolerance(), *this, points(), faceCentres()),
|
matchTolerance()*tols,
|
||||||
matchTolerance()
|
matchTolerance()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -569,7 +574,7 @@ bool Foam::processorPolyPatch::order
|
|||||||
// Calculate typical distance from face centre
|
// Calculate typical distance from face centre
|
||||||
scalarField tols
|
scalarField tols
|
||||||
(
|
(
|
||||||
calcFaceTol(matchTolerance(), pp, pp.points(), pp.faceCentres())
|
matchTolerance()*calcFaceTol(pp, pp.points(), pp.faceCentres())
|
||||||
);
|
);
|
||||||
|
|
||||||
if (debug || masterCtrs.size() != pp.size())
|
if (debug || masterCtrs.size() != pp.size())
|
||||||
|
|||||||
@ -86,13 +86,10 @@ Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
|
|||||||
const dictionary& dict
|
const dictionary& dict
|
||||||
)
|
)
|
||||||
:
|
:
|
||||||
totalPressureFvPatchScalarField(p, iF),
|
totalPressureFvPatchScalarField(p, iF, dict),
|
||||||
fanCurve_(dict),
|
fanCurve_(dict),
|
||||||
direction_(fanFlowDirectionNames_.read(dict.lookup("direction")))
|
direction_(fanFlowDirectionNames_.read(dict.lookup("direction")))
|
||||||
{
|
{}
|
||||||
// Assign initial pressure by "value"
|
|
||||||
fvPatchField<scalar>::operator==(scalarField("value", dict, p.size()));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
|
Foam::fanPressureFvPatchScalarField::fanPressureFvPatchScalarField
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2006-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2006-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -45,18 +45,27 @@ SourceFiles
|
|||||||
#include "volFields.H"
|
#include "volFields.H"
|
||||||
#include "surfaceFieldsFwd.H"
|
#include "surfaceFieldsFwd.H"
|
||||||
#include "primitiveFieldsFwd.H"
|
#include "primitiveFieldsFwd.H"
|
||||||
#include "zero.H"
|
|
||||||
#include "geometricOneField.H"
|
#include "geometricOneField.H"
|
||||||
|
#include "zero.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
namespace Foam
|
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>
|
template<class RhoType, class SpType, class SuType>
|
||||||
void explicitSolve
|
void explicitSolve
|
||||||
@ -117,10 +126,29 @@ void limiter
|
|||||||
const label nLimiterIter
|
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
|
} // End namespace Foam
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2006-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -43,58 +43,14 @@ void Foam::MULES::explicitSolve
|
|||||||
(
|
(
|
||||||
const RhoType& rho,
|
const RhoType& rho,
|
||||||
volScalarField& psi,
|
volScalarField& psi,
|
||||||
const surfaceScalarField& phi,
|
const surfaceScalarField& phiPsi,
|
||||||
surfaceScalarField& phiPsi,
|
|
||||||
const SpType& Sp,
|
const SpType& Sp,
|
||||||
const SuType& Su,
|
const SuType& Su
|
||||||
const scalar psiMax,
|
|
||||||
const scalar psiMin
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Info<< "MULES: Solving for " << psi.name() << endl;
|
Info<< "MULES: Solving for " << psi.name() << endl;
|
||||||
|
|
||||||
const fvMesh& mesh = psi.mesh();
|
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;
|
scalarField& psiIf = psi;
|
||||||
const scalarField& psi0 = psi.oldTime();
|
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>
|
template<class RhoType, class SpType, class SuType>
|
||||||
void Foam::MULES::implicitSolve
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
|
|||||||
@ -147,7 +147,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<scalar> > >
|
dynamicCast<token::Compound<List<scalar> > >
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<vector> > >
|
dynamicCast<token::Compound<List<vector> > >
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
token::Compound<List<sphericalTensor> >
|
token::Compound<List<sphericalTensor> >
|
||||||
>
|
>
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -264,7 +264,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
token::Compound<List<symmTensor> >
|
token::Compound<List<symmTensor> >
|
||||||
>
|
>
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -301,7 +301,7 @@ Foam::genericFvPatchField<Type>::genericFvPatchField
|
|||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<tensor> > >
|
dynamicCast<token::Compound<List<tensor> > >
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -129,7 +129,7 @@ genericPointPatchField<Type>::genericPointPatchField
|
|||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<scalar> > >
|
dynamicCast<token::Compound<List<scalar> > >
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ genericPointPatchField<Type>::genericPointPatchField
|
|||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<vector> > >
|
dynamicCast<token::Compound<List<vector> > >
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ genericPointPatchField<Type>::genericPointPatchField
|
|||||||
token::Compound<List<sphericalTensor> >
|
token::Compound<List<sphericalTensor> >
|
||||||
>
|
>
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -249,7 +249,7 @@ genericPointPatchField<Type>::genericPointPatchField
|
|||||||
token::Compound<List<symmTensor> >
|
token::Compound<List<symmTensor> >
|
||||||
>
|
>
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -287,7 +287,7 @@ genericPointPatchField<Type>::genericPointPatchField
|
|||||||
(
|
(
|
||||||
dynamicCast<token::Compound<List<tensor> > >
|
dynamicCast<token::Compound<List<tensor> > >
|
||||||
(
|
(
|
||||||
fieldToken.transferCompoundToken()
|
fieldToken.transferCompoundToken(is)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -52,7 +52,7 @@ functions
|
|||||||
type fieldAverage;
|
type fieldAverage;
|
||||||
|
|
||||||
// Where to load it from (if not already in solver)
|
// Where to load it from (if not already in solver)
|
||||||
functionObjectLibs ("libfieldAverage.so");
|
functionObjectLibs ("libfieldFunctionObjects.so");
|
||||||
|
|
||||||
// Function object enabled flag
|
// Function object enabled flag
|
||||||
enabled true;
|
enabled true;
|
||||||
|
|||||||
@ -34,7 +34,7 @@ Description
|
|||||||
type fieldAverage;
|
type fieldAverage;
|
||||||
|
|
||||||
// Where to load it from (if not already in solver)
|
// 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
|
// Whether to perform a clean restart, or start from previous
|
||||||
// averaging info if available
|
// averaging info if available
|
||||||
|
|||||||
@ -34,11 +34,13 @@ boundaryField
|
|||||||
lowerWall
|
lowerWall
|
||||||
{
|
{
|
||||||
type kqRWallFunction;
|
type kqRWallFunction;
|
||||||
|
value $internalField;
|
||||||
}
|
}
|
||||||
|
|
||||||
"motorBike_.*"
|
"motorBike_.*"
|
||||||
{
|
{
|
||||||
type kqRWallFunction;
|
type kqRWallFunction;
|
||||||
|
value $internalField;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "include/frontBackUpperPatches"
|
#include "include/frontBackUpperPatches"
|
||||||
|
|||||||
@ -34,11 +34,13 @@ boundaryField
|
|||||||
lowerWall
|
lowerWall
|
||||||
{
|
{
|
||||||
type omegaWallFunction;
|
type omegaWallFunction;
|
||||||
|
value $internalField;
|
||||||
}
|
}
|
||||||
|
|
||||||
"motorBike_.*"
|
"motorBike_.*"
|
||||||
{
|
{
|
||||||
type omegaWallFunction;
|
type omegaWallFunction;
|
||||||
|
value $internalField;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "include/frontBackUpperPatches"
|
#include "include/frontBackUpperPatches"
|
||||||
|
|||||||
@ -20,7 +20,7 @@ startFrom latestTime;
|
|||||||
|
|
||||||
startTime 0;
|
startTime 0;
|
||||||
|
|
||||||
stopAt nextWrite;
|
stopAt endTime;
|
||||||
|
|
||||||
endTime 500;
|
endTime 500;
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ deltaT 1;
|
|||||||
|
|
||||||
writeControl timeStep;
|
writeControl timeStep;
|
||||||
|
|
||||||
writeInterval 1;
|
writeInterval 100;
|
||||||
|
|
||||||
purgeWrite 0;
|
purgeWrite 0;
|
||||||
|
|
||||||
@ -44,13 +44,6 @@ timePrecision 6;
|
|||||||
|
|
||||||
runTimeModifiable true;
|
runTimeModifiable true;
|
||||||
|
|
||||||
libs
|
|
||||||
(
|
|
||||||
"libOpenFOAM.so"
|
|
||||||
"libcompressibleTurbulenceModels.so"
|
|
||||||
"libcompressibleRASModels.so"
|
|
||||||
);
|
|
||||||
|
|
||||||
functions
|
functions
|
||||||
{
|
{
|
||||||
#include "readFields"
|
#include "readFields"
|
||||||
|
|||||||
@ -27,7 +27,7 @@ gradSchemes
|
|||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
default none;
|
default none;
|
||||||
div(phi,U) Gauss linearUpwind grad(U);
|
div(phi,U) Gauss linearUpwindV grad(U);
|
||||||
div(phi,k) Gauss upwind;
|
div(phi,k) Gauss upwind;
|
||||||
div(phi,omega) Gauss upwind;
|
div(phi,omega) Gauss upwind;
|
||||||
div((nuEff*dev(T(grad(U))))) Gauss linear;
|
div((nuEff*dev(T(grad(U))))) Gauss linear;
|
||||||
|
|||||||
9
tutorials/mesh/cvMesh/blob/Allclean
Executable file
9
tutorials/mesh/cvMesh/blob/Allclean
Executable 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
|
||||||
11
tutorials/mesh/cvMesh/blob/Allrun
Executable file
11
tutorials/mesh/cvMesh/blob/Allrun
Executable 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
|
||||||
34
tutorials/mesh/cvMesh/blob/Allrun-parallel
Executable file
34
tutorials/mesh/cvMesh/blob/Allrun-parallel
Executable 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
|
||||||
BIN
tutorials/mesh/cvMesh/blob/constant/internalDelaunayVertices
Normal file
BIN
tutorials/mesh/cvMesh/blob/constant/internalDelaunayVertices
Normal file
Binary file not shown.
69
tutorials/mesh/cvMesh/blob/constant/polyMesh/blockMeshDict
Normal file
69
tutorials/mesh/cvMesh/blob/constant/polyMesh/blockMeshDict
Normal 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
|
||||||
|
(
|
||||||
|
);
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -8,40 +8,27 @@
|
|||||||
FoamFile
|
FoamFile
|
||||||
{
|
{
|
||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format binary;
|
||||||
class volScalarField;
|
class polyBoundaryMesh;
|
||||||
location "0";
|
location "constant/polyMesh";
|
||||||
object alphas;
|
object boundary;
|
||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
dimensions [0 0 0 0 0 0 0];
|
2
|
||||||
|
(
|
||||||
internalField uniform 0;
|
blob.stl_patch1
|
||||||
|
|
||||||
boundaryField
|
|
||||||
{
|
|
||||||
leftWall
|
|
||||||
{
|
{
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
37
tutorials/mesh/cvMesh/blob/constant/targetCellSize
Normal file
37
tutorials/mesh/cvMesh/blob/constant/targetCellSize
Normal file
File diff suppressed because one or more lines are too long
21506
tutorials/mesh/cvMesh/blob/constant/triSurface/blob.stl
Normal file
21506
tutorials/mesh/cvMesh/blob/constant/triSurface/blob.stl
Normal file
File diff suppressed because it is too large
Load Diff
@ -28,19 +28,19 @@ startTime 0;
|
|||||||
|
|
||||||
stopAt endTime;
|
stopAt endTime;
|
||||||
|
|
||||||
endTime 0;
|
endTime 80;
|
||||||
|
|
||||||
deltaT 1;
|
deltaT 1;
|
||||||
|
|
||||||
writeControl timeStep;
|
writeControl timeStep;
|
||||||
|
|
||||||
writeInterval 1000; //10 to see the meshing steps
|
writeInterval 1000;
|
||||||
|
|
||||||
purgeWrite 0;
|
purgeWrite 0;
|
||||||
|
|
||||||
writeFormat ascii;
|
writeFormat binary;//ascii;
|
||||||
|
|
||||||
writePrecision 10;
|
writePrecision 12;
|
||||||
|
|
||||||
writeCompression uncompressed;
|
writeCompression uncompressed;
|
||||||
|
|
||||||
@ -50,5 +50,4 @@ timePrecision 6;
|
|||||||
|
|
||||||
runTimeModifiable yes;
|
runTimeModifiable yes;
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -27,16 +27,54 @@ FoamFile
|
|||||||
|
|
||||||
geometry
|
geometry
|
||||||
{
|
{
|
||||||
flange.obj
|
blob.stl
|
||||||
{
|
{
|
||||||
type triSurfaceMesh;
|
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
|
surfaceConformation
|
||||||
{
|
{
|
||||||
locationInMesh (0 0 0);
|
locationInMesh (0.1 0.1 0.2);
|
||||||
|
|
||||||
pointPairDistanceCoeff 0.1;
|
pointPairDistanceCoeff 0.1;
|
||||||
|
|
||||||
@ -70,7 +108,8 @@ surfaceConformation
|
|||||||
|
|
||||||
maxIterations 15;
|
maxIterations 15;
|
||||||
|
|
||||||
iterationToInitialHitRatioLimit 0.001;
|
iterationToIntialHitRatioLimit 0.01;
|
||||||
|
iterationToInitialHitRatioLimit 0.01;
|
||||||
}
|
}
|
||||||
|
|
||||||
fineConformationControls
|
fineConformationControls
|
||||||
@ -89,44 +128,44 @@ surfaceConformation
|
|||||||
|
|
||||||
maxIterations 15;
|
maxIterations 15;
|
||||||
|
|
||||||
iterationToInitialHitRatioLimit 0.001;
|
iterationToInitialHitRatioLimit 0.002;
|
||||||
|
iterationToIntialHitRatioLimit 0.002;
|
||||||
}
|
}
|
||||||
|
|
||||||
geometryToConformTo
|
geometryToConformTo
|
||||||
{
|
{
|
||||||
flange.obj
|
blob.stl
|
||||||
{
|
{
|
||||||
featureMethod extendedFeatureEdgeMesh;
|
featureMethod none;
|
||||||
extendedFeatureEdgeMesh "flange.extendedFeatureEdgeMesh";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
additionalFeatures {}
|
additionalFeatures
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
initialPoints
|
|
||||||
{
|
|
||||||
minimumSurfaceDistanceCoeff 0.55;
|
|
||||||
|
|
||||||
initialPointsMethod pointFile;
|
|
||||||
|
|
||||||
pointFileCoeffs
|
|
||||||
{
|
{
|
||||||
pointFile "constant/internalDelaunayVertices";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
motionControl
|
motionControl
|
||||||
{
|
{
|
||||||
defaultCellSize 0.00075;
|
defaultCellSize 0.04;
|
||||||
|
|
||||||
// Assign a priority to all requests for cell sizes, the highest overrules.
|
// Assign a priority to all requests for cell sizes, the highest overrules.
|
||||||
defaultPriority 0;
|
defaultPriority 0;
|
||||||
|
|
||||||
cellSizeControlGeometry
|
cellSizeControlGeometry
|
||||||
{
|
{
|
||||||
|
blob.stl
|
||||||
|
{
|
||||||
|
priority 1;
|
||||||
|
mode bothSides;
|
||||||
|
cellSizeFunction uniformDistance;
|
||||||
|
uniformDistanceCoeffs
|
||||||
|
{
|
||||||
|
cellSize 0.02;
|
||||||
|
distance 0.1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
relaxationModel adaptiveLinear;
|
relaxationModel adaptiveLinear;
|
||||||
@ -139,13 +178,15 @@ motionControl
|
|||||||
|
|
||||||
objOutput no;
|
objOutput no;
|
||||||
|
|
||||||
timeChecks yes;
|
timeChecks no;
|
||||||
|
|
||||||
alignmentSearchSpokes 36;
|
maxLoadUnbalance 0.05;
|
||||||
|
|
||||||
|
alignmentSearchSpokes 24;
|
||||||
|
|
||||||
alignmentAcceptanceAngle 48;
|
alignmentAcceptanceAngle 48;
|
||||||
|
|
||||||
sizeAndAlignmentRebuildFrequency 20;
|
sizeAndAlignmentRebuildFrequency 40;
|
||||||
|
|
||||||
pointInsertionCriteria
|
pointInsertionCriteria
|
||||||
{
|
{
|
||||||
@ -171,37 +212,33 @@ motionControl
|
|||||||
|
|
||||||
polyMeshFiltering
|
polyMeshFiltering
|
||||||
{
|
{
|
||||||
// Write the underlying Delaunay tet mesh at output time
|
writeTetDualMesh false;
|
||||||
writeTetDualMesh true;
|
|
||||||
|
|
||||||
filterSizeCoeff 0.2;
|
filterSizeCoeff 0.2;
|
||||||
mergeClosenessCoeff 1e-4;
|
mergeClosenessCoeff 1e-9;
|
||||||
continueFilteringOnBadInitialPolyMesh true;
|
continueFilteringOnBadInitialPolyMesh true;
|
||||||
filterErrorReductionCoeff 0.5;
|
filterErrorReductionCoeff 0.5;
|
||||||
filterCountSkipThreshold 4;
|
filterCountSkipThreshold 4;
|
||||||
|
surfaceStepFaceAngle 80;
|
||||||
maxCollapseIterations 25;
|
maxCollapseIterations 25;
|
||||||
maxConsecutiveEqualFaceSets 5;
|
maxConsecutiveEqualFaceSets 5;
|
||||||
surfaceStepFaceAngle 80;
|
|
||||||
edgeCollapseGuardFraction 0.3;
|
edgeCollapseGuardFraction 0.3;
|
||||||
maxCollapseFaceToPointSideLengthCoeff 0.35;
|
maxCollapseFaceToPointSideLengthCoeff 0.35;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
meshQualityControls
|
meshQualityControls
|
||||||
{
|
{
|
||||||
maxNonOrtho 65;
|
maxNonOrtho 65;
|
||||||
maxBoundarySkewness 50;
|
maxBoundarySkewness 50;
|
||||||
maxInternalSkewness 10;
|
maxInternalSkewness 10;
|
||||||
maxConcave 80;
|
maxConcave 80;
|
||||||
|
minVol 1e-20;
|
||||||
minTetQuality 1e-30;
|
minTetQuality 1e-30;
|
||||||
minVol 0;
|
|
||||||
minArea -1;
|
minArea -1;
|
||||||
minTwist 0.02;
|
minTwist 0.0;
|
||||||
minDeterminant 0.001;
|
minDeterminant 0.001;
|
||||||
minFaceWeight 0.02;
|
minFaceWeight 0.02;
|
||||||
minVolRatio 0.01;
|
minVolRatio 0.01;
|
||||||
minTriangleTwist -1;
|
minTriangleTwist -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -11,45 +11,37 @@ FoamFile
|
|||||||
format ascii;
|
format ascii;
|
||||||
class dictionary;
|
class dictionary;
|
||||||
location "system";
|
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
|
distributed no;
|
||||||
{
|
|
||||||
default Gauss linear uncorrected;
|
|
||||||
}
|
|
||||||
|
|
||||||
interpolationSchemes
|
roots ( );
|
||||||
{
|
|
||||||
default cubic;
|
|
||||||
}
|
|
||||||
|
|
||||||
snGradSchemes
|
|
||||||
{
|
|
||||||
default uncorrected;
|
|
||||||
}
|
|
||||||
|
|
||||||
fluxRequired
|
|
||||||
{
|
|
||||||
default no;
|
|
||||||
D ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -15,40 +15,39 @@ FoamFile
|
|||||||
}
|
}
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
d2dt2Schemes
|
ddtSchemes
|
||||||
{
|
{
|
||||||
default steadyState;
|
default none;
|
||||||
}
|
}
|
||||||
|
|
||||||
gradSchemes
|
gradSchemes
|
||||||
{
|
{
|
||||||
default Gauss cubic;
|
default none;
|
||||||
}
|
}
|
||||||
|
|
||||||
divSchemes
|
divSchemes
|
||||||
{
|
{
|
||||||
default Gauss cubic;
|
default none;
|
||||||
}
|
}
|
||||||
|
|
||||||
laplacianSchemes
|
laplacianSchemes
|
||||||
{
|
{
|
||||||
default Gauss linear uncorrected;
|
default none;
|
||||||
}
|
}
|
||||||
|
|
||||||
interpolationSchemes
|
interpolationSchemes
|
||||||
{
|
{
|
||||||
default cubic;
|
default none;
|
||||||
}
|
}
|
||||||
|
|
||||||
snGradSchemes
|
snGradSchemes
|
||||||
{
|
{
|
||||||
default uncorrected;
|
default none;
|
||||||
}
|
}
|
||||||
|
|
||||||
fluxRequired
|
fluxRequired
|
||||||
{
|
{
|
||||||
default no;
|
default no;
|
||||||
D ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -17,25 +17,6 @@ FoamFile
|
|||||||
|
|
||||||
solvers
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
// ************************************************************************* //
|
||||||
@ -24,7 +24,7 @@ actions
|
|||||||
source boxToCell;
|
source boxToCell;
|
||||||
sourceInfo
|
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;
|
type cellSet;
|
||||||
action new;
|
action new;
|
||||||
source boxToCell;
|
source boxToCell;
|
||||||
sourceInfo
|
sourceInfo
|
||||||
{
|
{
|
||||||
box (-100 0 -100)(100 100 100);
|
box (-0.32 -100 -100)(100 100 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name yf;
|
name xf;
|
||||||
type faceSet;
|
type faceSet;
|
||||||
action new;
|
action new;
|
||||||
source cellToFace;
|
source cellToFace;
|
||||||
sourceInfo
|
sourceInfo
|
||||||
{
|
{
|
||||||
set y;
|
set x;
|
||||||
option all;
|
option all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name y;
|
name x;
|
||||||
type cellSet;
|
type cellSet;
|
||||||
action invert;
|
action invert;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name yf;
|
name xf;
|
||||||
type faceSet;
|
type faceSet;
|
||||||
action subset;
|
action subset;
|
||||||
source cellToFace;
|
source cellToFace;
|
||||||
sourceInfo
|
sourceInfo
|
||||||
{
|
{
|
||||||
set y;
|
set x;
|
||||||
option all;
|
option all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,42 +104,43 @@ actions
|
|||||||
// ~~~~~~~~~~~~~~~~ //
|
// ~~~~~~~~~~~~~~~~ //
|
||||||
|
|
||||||
{
|
{
|
||||||
name x;
|
name sp;
|
||||||
type cellSet;
|
type cellSet;
|
||||||
action new;
|
action new;
|
||||||
source boxToCell;
|
source sphereToCell;
|
||||||
sourceInfo
|
sourceInfo
|
||||||
{
|
{
|
||||||
box (0 -100 -100)(100 100 100);
|
centre (-0.3 -0.3 -0.3);
|
||||||
|
radius 0.4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name xf;
|
name spf;
|
||||||
type faceSet;
|
type faceSet;
|
||||||
action new;
|
action new;
|
||||||
source cellToFace;
|
source cellToFace;
|
||||||
sourceInfo
|
sourceInfo
|
||||||
{
|
{
|
||||||
set x;
|
set sp;
|
||||||
option all;
|
option all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name x;
|
name sp;
|
||||||
type cellSet;
|
type cellSet;
|
||||||
action invert;
|
action invert;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name xf;
|
name spf;
|
||||||
type faceSet;
|
type faceSet;
|
||||||
action subset;
|
action subset;
|
||||||
source cellToFace;
|
source cellToFace;
|
||||||
sourceInfo
|
sourceInfo
|
||||||
{
|
{
|
||||||
set x;
|
set sp;
|
||||||
option all;
|
option all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -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
|
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -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;
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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
|
|
||||||
@ -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
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -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
|
|
||||||
@ -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;
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1 +0,0 @@
|
|||||||
../fvSchemes
|
|
||||||
@ -1 +0,0 @@
|
|||||||
../fvSolution
|
|
||||||
@ -4,9 +4,8 @@ cd ${0%/*} || exit 1 # run from this directory
|
|||||||
# Source tutorial run functions
|
# Source tutorial run functions
|
||||||
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
|
. $WM_PROJECT_DIR/bin/tools/CleanFunctions
|
||||||
|
|
||||||
rm -r constant/extendedFeatureEdgeMesh constant/internalDelaunayVertices > /dev/null 2>&1
|
rm -rf constant/extendedFeatureEdgeMesh flange > /dev/null 2>&1
|
||||||
rm constant/triSurface/flange.eMesh > /dev/null 2>&1
|
rm -r constant/ccx constant/ccy constant/ccz > /dev/null 2>&1
|
||||||
rm flange system/cvMeshDict system/controlDict > /dev/null 2>&1
|
|
||||||
|
|
||||||
cleanCase
|
cleanCase
|
||||||
|
|
||||||
|
|||||||
@ -4,20 +4,36 @@ cd ${0%/*} || exit 1 # run from this directory
|
|||||||
# Source tutorial run functions
|
# Source tutorial run functions
|
||||||
. $WM_PROJECT_DIR/bin/tools/RunFunctions
|
. $WM_PROJECT_DIR/bin/tools/RunFunctions
|
||||||
|
|
||||||
# Generate aligned points (in constant/internalDelaunayVertices) and a
|
# Get the number of processors to run on from system/decomposeParDict
|
||||||
# mesh from that.
|
nProc=`grep numberOfSubdomains system/decomposeParDict \
|
||||||
cp system/controlDict-generatePoints system/controlDict
|
| sed s/"numberOfSubdomains *\(.*\);"/"\1"/`
|
||||||
cp system/cvMeshDict-generatePoints system/cvMeshDict
|
|
||||||
runApplication surfaceFeatureExtract constant/triSurface/flange.obj flange -includedAngle 150
|
|
||||||
runApplication cvMesh
|
|
||||||
|
|
||||||
# Use pre-generated aligned points (constant/internalDelaunayVertices)
|
runApplication surfaceFeatureExtract constant/triSurface/flange.obj flange -includedAngle 155
|
||||||
# to generate a mesh
|
|
||||||
# cp system/controlDict-usePoints system/controlDict
|
|
||||||
# cp system/cvMeshDict-usePoints system/cvMeshDict
|
|
||||||
# runApplication cvMesh
|
|
||||||
|
|
||||||
# Generate some sets for a bit of mesh inspection
|
# Create tight-fitting background mesh
|
||||||
runApplication topoSet
|
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
|
# ----------------------------------------------------------------- end-of-file
|
||||||
|
|||||||
15304
tutorials/mesh/cvMesh/flange/constant/internalDelaunayVertices
Normal file
15304
tutorials/mesh/cvMesh/flange/constant/internalDelaunayVertices
Normal file
File diff suppressed because it is too large
Load Diff
69
tutorials/mesh/cvMesh/flange/constant/polyMesh/blockMeshDict
Normal file
69
tutorials/mesh/cvMesh/flange/constant/polyMesh/blockMeshDict
Normal 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
|
||||||
|
(
|
||||||
|
);
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -8,7 +8,7 @@
|
|||||||
FoamFile
|
FoamFile
|
||||||
{
|
{
|
||||||
version 2.0;
|
version 2.0;
|
||||||
format ascii;
|
format binary;
|
||||||
class polyBoundaryMesh;
|
class polyBoundaryMesh;
|
||||||
location "constant/polyMesh";
|
location "constant/polyMesh";
|
||||||
object boundary;
|
object boundary;
|
||||||
@ -20,32 +20,32 @@ FoamFile
|
|||||||
flange.obj_patch1
|
flange.obj_patch1
|
||||||
{
|
{
|
||||||
type wall;
|
type wall;
|
||||||
nFaces 9298;
|
nFaces 24684;
|
||||||
startFace 95552;
|
startFace 193547;
|
||||||
}
|
}
|
||||||
flange.obj_patch2
|
flange.obj_patch2
|
||||||
{
|
{
|
||||||
type wall;
|
type wall;
|
||||||
nFaces 1107;
|
nFaces 1674;
|
||||||
startFace 104850;
|
startFace 218231;
|
||||||
}
|
}
|
||||||
flange.obj_patch3
|
flange.obj_patch3
|
||||||
{
|
{
|
||||||
type wall;
|
type wall;
|
||||||
nFaces 329;
|
nFaces 438;
|
||||||
startFace 105957;
|
startFace 219905;
|
||||||
}
|
}
|
||||||
flange.obj_patch4
|
flange.obj_patch4
|
||||||
{
|
{
|
||||||
type wall;
|
type wall;
|
||||||
nFaces 1473;
|
nFaces 3595;
|
||||||
startFace 106286;
|
startFace 220343;
|
||||||
}
|
}
|
||||||
cvMesh_defaultPatch
|
cvMesh_defaultPatch
|
||||||
{
|
{
|
||||||
type wall;
|
type wall;
|
||||||
nFaces 41;
|
nFaces 0;
|
||||||
startFace 107759;
|
startFace 223938;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
224
tutorials/mesh/cvMesh/flange/constant/triSurface/flange.eMesh
Normal file
224
tutorials/mesh/cvMesh/flange/constant/triSurface/flange.eMesh
Normal 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><>GЎ<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><>GЎ<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>Eݽ<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>ucn>ލ<05>A<EFBFBD><41><EFBFBD>^tG9w?W?<3F>~<7E>ucn>"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>Eݽ<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>ucn>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>Eݽ<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>ucn>ލ<05>A<EFBFBD><41><EFBFBD>^tG9w?W<><57>~<7E>ucn>"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>Eݽ<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>ucn>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>Eݽ<45>j?9<><39>v<EFBFBD><76>z?<3F><>Z<EFBFBD>#<23><><EFBFBD><EFBFBD><EFBFBD>Eݽ<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>Eݽ<45>j?9<><39>v<EFBFBD><76>z?b<><62>%<25><>h<EFBFBD><68><EFBFBD>Eݽ<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>Eݽ<45>j<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?<3F><>Z<EFBFBD>#<23><><EFBFBD><EFBFBD><EFBFBD>Eݽ<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>Eݽ<45>j<EFBFBD>9<EFBFBD><39>v<EFBFBD><76>z?b<><62>%<25><>h<EFBFBD><68><EFBFBD>Eݽ<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>:?RAʙ<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><>f<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>3ڪ<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>3ڪ<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>:?RAʙ<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><>f<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>3ڪ<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>3ڪ<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
|
||||||
|
| ||||||