Merge branch 'parallelTopo'

Conflicts:
	applications/utilities/mesh/manipulation/moveDyMEngineMesh/Make/options
	applications/utilities/mesh/manipulation/moveDyMEngineMesh/moveDyMEngineMesh.C
	applications/utilities/mesh/manipulation/setsToZones/setsToZones.C
	applications/utilities/parallelProcessing/decomposePar/decomposePar.C
	src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/processor/processorPolyPatch.C
	src/decompositionMethods/decompositionMethods/patchConstrainedDecomp/patchConstrainedDecomp.C
	src/decompositionMethods/metisDecomp/metisDecomp.C
	src/dynamicMesh/topoChangerFvMesh/Make/files
	src/dynamicMesh/topoChangerFvMesh/mixerFvMesh/mixerFvMesh.C
	src/finiteArea/faMesh/faMesh.C
	src/finiteVolume/cfdTools/general/include/checkVolContinuity.H
	src/tetDecompositionFiniteElement/tetPolyMeshCellDecomp/tetPolyPatches/constraint/processor/calcProcessorTetPolyPatchCellDecompPointAddr.C
	src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C
	src/turbulenceModels/compressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C
	src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/epsilonWallFunctions/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C
	src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/omegaWallFunctions/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C
	tutorials/incompressible/icoDyMFoam/movingConeTopo/system/decomposeParDict
This commit is contained in:
Hrvoje Jasak 2012-04-25 10:38:12 +01:00
commit b2cd738861
30 changed files with 391 additions and 168 deletions

View file

@ -36,7 +36,6 @@ Description
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"

View file

@ -69,6 +69,7 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
bool meshChanged = mesh.update(); bool meshChanged = mesh.update();
reduce(meshChanged, orOp<bool>());
if (meshChanged) if (meshChanged)
{ {

View file

@ -4,10 +4,12 @@ EXE_INC = \
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \
-I$(LIB_SRC)/engine/lnInclude
EXE_LIBS = \ EXE_LIBS = \
-lengine \ -lengine \
-lfiniteVolume \
-ldynamicFvMesh \ -ldynamicFvMesh \
-ldynamicMesh \ -ldynamicMesh \
-ltopoChangerFvMesh \ -ltopoChangerFvMesh \
@ -17,6 +19,5 @@ EXE_LIBS = \
-lbasicThermophysicalModels \ -lbasicThermophysicalModels \
-lspecie \ -lspecie \
-lmeshTools \ -lmeshTools \
-lfiniteVolume \
$(WM_DECOMP_LIBS) \ $(WM_DECOMP_LIBS) \
-llduSolvers -llduSolvers

View file

@ -6,6 +6,13 @@
+ turbulence->divDevRhoReff(U) + turbulence->divDevRhoReff(U)
); );
if (oCorr == nOuterCorr - 1)
{
UEqn.relax(1);
}
else
{
UEqn.relax(); UEqn.relax();
}
solve(UEqn == -fvc::grad(p)); solve(UEqn == -fvc::grad(p));

View file

@ -8,6 +8,8 @@
); );
basicPsiThermo& thermo = pThermo(); basicPsiThermo& thermo = pThermo();
// Make density field with zero gradient boundary conditions to handle
// attach-detach cases. HJ, 20/Mar/2011
volScalarField rho volScalarField rho
( (
IOobject IOobject
@ -18,7 +20,8 @@
IOobject::NO_READ, IOobject::NO_READ,
IOobject::AUTO_WRITE IOobject::AUTO_WRITE
), ),
thermo.rho() thermo.rho(),
zeroGradientFvPatchScalarField::typeName
); );
rho.oldTime(); rho.oldTime();
@ -73,6 +76,7 @@
fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p) fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p)
); );
volScalarField dpdt = fvc::ddt(p);
volScalarField rUA volScalarField rUA
( (

View file

@ -1,17 +1,17 @@
Pav << runTime.theta() << " " << p.weightedAverage(mesh.V()).value() << endl; Pav << runTime.theta() << " " << p.weightedAverage(mesh.V()).value() << endl;
Tav << runTime.theta() << " " << T.weightedAverage(mesh.V()).value() << endl; Tav << runTime.theta() << " " << T.weightedAverage(mesh.V()).value() << endl;
Info << "Max T = " << max(T) << " K" << endl; Info << "Max T = " << max(T).value() << " K" << endl;
Info << "Min T = " << min(T) << " K" << endl; Info << "Min T = " << min(T).value() << " K" << endl;
Info << "Max p = " << max(p)/1.0e5 << " bar" << endl; Info << "Max p = " << max(p).value()/1.0e5 << " bar" << endl;
massBal << runTime.theta() << " " massBal << runTime.theta() << " "
<< fvc::domainIntegrate(rho).value() << endl; << fvc::domainIntegrate(rho).value() << endl;
volume << runTime.theta() << " " << sum(mesh.V()) << endl; volume << runTime.theta() << " " << sum(mesh.V()) << endl;
debugT << nl << "Crank angle: " << runTime.theta() << endl; debugT << nl << "Crank angle: " << runTime.theta() << endl;
debugT << "Max T = " << max(T) << " K" << endl; debugT << "Max T = " << max(T).value() << " K" << endl;
debugT << "Min T = " << min(T) << " K" << endl; debugT << "Min T = " << min(T).value() << " K" << endl;
kav << runTime.theta() << " " kav << runTime.theta() << " "
<< (turbulence->k())().weightedAverage(mesh.V()).value() << endl; << (turbulence->k())().weightedAverage(mesh.V()).value() << endl;

View file

@ -2,14 +2,40 @@
rho = thermo.rho(); rho = thermo.rho();
rUA = 1.0/UEqn.A(); rUA = 1.0/UEqn.A();
H = UEqn.H();
U = rUA*UEqn.H(); U = rUA*UEqn.H();
phi = fvc::interpolate(rho) if (nOuterCorr != 1)
*((fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U)); {
// Store pressure for under-relaxation
p.storePrevIter(); p.storePrevIter();
}
if (transonic)
{
surfaceScalarField phid =
fvc::interpolate(thermo.psi())*
((fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U));
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{
fvScalarMatrix pEqn
(
fvm::ddt(psi, p)
+ fvm::div(phid, p, "div(phid,p)")
- fvm::laplacian(rho*rUA, p)
);
pEqn.solve();
if (nonOrth == nNonOrthCorr)
{
phi == pEqn.flux();
}
}
}
else
{
phi = fvc::interpolate(rho)*
((fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U));
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++) for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
{ {
@ -27,20 +53,20 @@
phi += pEqn.flux(); phi += pEqn.flux();
} }
} }
}
// Explicitly relax pressure except for last corrector
if (oCorr != nOuterCorr - 1)
{
p.relax();
}
# include "rhoEqn.H" # include "rhoEqn.H"
# include "compressibleContinuityErrs.H" # include "compressibleContinuityErrs.H"
// Warning:
// rho does not carry working boundary conditions and needs to be updated
// strictly according to the thermodynamics package
// HJ, 22/Aug/2007
thermo.correct();
rho = thermo.rho();
DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p);
U -= rUA*fvc::grad(p); U -= rUA*fvc::grad(p);
U.correctBoundaryConditions(); U.correctBoundaryConditions();
}
DpDt = fvc::DDt(surfaceScalarField("phiU", phi/fvc::interpolate(rho)), p);
dpdt = fvc::ddt(p);
}

View file

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

View file

@ -49,8 +49,8 @@ int main(int argc, char *argv[])
# include "setRootCase.H" # include "setRootCase.H"
# include "createEngineTime.H" # include "createEngineTime.H"
# include "createDynamicFvMesh.H" # include "createEngineDynamicMesh.H"
# include "readPISOControls.H" # include "readPIMPLEControls.H"
# include "createFields.H" # include "createFields.H"
# include "initContinuityErrs.H" # include "initContinuityErrs.H"
# include "readEngineTimeControls.H" # include "readEngineTimeControls.H"
@ -67,7 +67,9 @@ int main(int argc, char *argv[])
while (runTime.run()) while (runTime.run())
{ {
# include "readControls.H" # include "readPIMPLEControls.H"
# include "checkTotalVolume.H"
# include "readEngineTimeControls.H"
# include "compressibleCourantNo.H" # include "compressibleCourantNo.H"
# include "setDeltaT.H" # include "setDeltaT.H"
@ -75,38 +77,48 @@ int main(int argc, char *argv[])
Info<< "Crank angle = " << runTime.theta() << " CA-deg" << endl; Info<< "Crank angle = " << runTime.theta() << " CA-deg" << endl;
// make phi relative // Make flux absolute
phi += meshFlux; phi += meshFlux;
bool meshChanged = mesh.update(); bool meshChanged = mesh.update();
# include "volContinuity.H"
mesh.setBoundaryVelocity(U);
if (meshChanged) if (meshChanged)
{ {
thermo.correct(); thermo.correct();
rho = thermo.rho();
# include "checkTotalVolume.H" rho.correctBoundaryConditions();
# include "compressibleCorrectPhi.H"
# include "CourantNo.H"
} }
meshFlux = fvc::interpolate(rho)*fvc::meshPhi(rho, U); meshFlux = fvc::interpolate(rho)*fvc::meshPhi(rho, U);
// Make phi absolute phi = fvc::interpolate(rho)
*((fvc::interpolate(U) & mesh.Sf()) - fvc::meshPhi(rho, U));
phi -= meshFlux; DpDt = dpdt + fvc::div(phi/fvc::interpolate(rho), p)
- fvc::div(phi/fvc::interpolate(rho) + fvc::meshPhi(U))*p;
# include "rhoEqn.H"
// --- SIMPLE loop
for (int corr=1; corr<=nCorr; corr++)
{ {
# include "compressibleCourantNo.H"
}
// Pressure-velocity corrector
int oCorr = 0;
do
{
# include "rhoEqn.H"
# include "UEqn.H" # include "UEqn.H"
# include "hEqn.H" // --- PISO loop
for (int corr = 1; corr <= nCorr; corr++)
{
# include "pEqn.H" # include "pEqn.H"
# include "hEqn.H"
} }
} while (++oCorr < nOuterCorr);
turbulence->correct(); turbulence->correct();

View file

@ -69,6 +69,7 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
bool meshChanged = mesh.update(); bool meshChanged = mesh.update();
reduce(meshChanged, orOp<bool>());
if (meshChanged) if (meshChanged)
{ {

View file

@ -68,6 +68,7 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
bool meshChanged = mesh.update(); bool meshChanged = mesh.update();
reduce(meshChanged, orOp<bool>());
# include "volContinuity.H" # include "volContinuity.H"

View file

@ -69,6 +69,7 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
bool meshChanged = mesh.update(); bool meshChanged = mesh.update();
reduce(meshChanged, orOp<bool>());
# include "volContinuity.H" # include "volContinuity.H"

View file

@ -70,8 +70,9 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
bool meshChanged = mesh.update(); bool meshChanged = mesh.update();
reduce(meshChanged, orOp<bool>());
if (correctPhi && (mesh.moving() || meshChanged)) if (correctPhi && meshChanged)
{ {
# include "correctPhi.H" # include "correctPhi.H"
} }
@ -79,7 +80,7 @@ int main(int argc, char *argv[])
// Make the fluxes relative to the mesh motion // Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, U); fvc::makeRelative(phi, U);
if (mesh.moving() && checkMeshCourantNo) if (checkMeshCourantNo)
{ {
# include "meshCourantNo.H" # include "meshCourantNo.H"
} }

View file

@ -82,17 +82,12 @@ int main(int argc, char *argv[])
scalar timeBeforeMeshUpdate = runTime.elapsedCpuTime(); scalar timeBeforeMeshUpdate = runTime.elapsedCpuTime();
// Do any mesh changes bool meshChanged = mesh.update();
mesh.update(); reduce(meshChanged, orOp<bool>());
if (mesh.changing()) # include "volContinuity.H"
{
Info<< "Execution time for mesh.update() = "
<< runTime.elapsedCpuTime() - timeBeforeMeshUpdate
<< " s" << endl;
}
if (mesh.changing() && correctPhi) if (correctPhi && meshChanged)
{ {
# include "correctPhi.H" # include "correctPhi.H"
} }
@ -101,7 +96,7 @@ int main(int argc, char *argv[])
// Make the fluxes relative to the mesh motion // Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, U); fvc::makeRelative(phi, U);
if (mesh.changing() && checkMeshCourantNo) if (checkMeshCourantNo)
{ {
# include "meshCourantNo.H" # include "meshCourantNo.H"
} }

View file

@ -75,22 +75,15 @@ int main(int argc, char *argv[])
Info<< "Time = " << runTime.timeName() << nl << endl; Info<< "Time = " << runTime.timeName() << nl << endl;
scalar timeBeforeMeshUpdate = runTime.elapsedCpuTime(); bool meshChanged = mesh.update();
reduce(meshChanged, orOp<bool>());
// Do any mesh changes # include "volContinuity.H"
mesh.update();
if (mesh.changing())
{
Info<< "Execution time for mesh.update() = "
<< runTime.elapsedCpuTime() - timeBeforeMeshUpdate
<< " s" << endl;
}
volScalarField gh("gh", g & mesh.C()); volScalarField gh("gh", g & mesh.C());
surfaceScalarField ghf("ghf", g & mesh.Cf()); surfaceScalarField ghf("ghf", g & mesh.Cf());
if (mesh.changing() && correctPhi) if (correctPhi && meshChanged)
{ {
# include "correctPhi.H" # include "correctPhi.H"
} }
@ -98,7 +91,7 @@ int main(int argc, char *argv[])
// Make the fluxes relative to the mesh motion // Make the fluxes relative to the mesh motion
fvc::makeRelative(phi, U); fvc::makeRelative(phi, U);
if (mesh.changing() && checkMeshCourantNo) if (checkMeshCourantNo)
{ {
# include "meshCourantNo.H" # include "meshCourantNo.H"
} }

View file

@ -1,15 +1,17 @@
EXE_INC = \ EXE_INC = \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/dynamicMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/dynamicFvMesh/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/engine/lnInclude \ -I$(LIB_SRC)/engine/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude $(WM_DECOMP_INC)
EXE_LIBS = \ EXE_LIBS = \
-lfiniteVolume \ -lfiniteVolume \
-ldynamicMesh \
-ldynamicFvMesh \ -ldynamicFvMesh \
-lmeshTools \ -lmeshTools \
-ldynamicMesh \
-lengine \ -lengine \
-lmeshTools \ -lmeshTools \
$(WM_DECOMP_LIBS) \
-llduSolvers -llduSolvers

View file

@ -1,23 +0,0 @@
{
// Volume and motion flux check
scalar newTotalVolume = sum(mesh.V()).value();
motionContErr =
fvc::ddt(dimensionedScalar("1", dimless, 1.0), mesh)
- fvc::div(fvc::meshPhi(U));
scalar sumLocalContErr = runTime.deltaT().value()*
mag(motionContErr)().weightedAverage(mesh.V()).value();
scalar maxContErr =
runTime.deltaT().value()*max(motionContErr.internalField());
Info<< "Volume: new = " << newTotalVolume << " old = " << totalVolume
<< " change = " << Foam::mag(newTotalVolume - totalVolume) << nl
<< "Motion continuity errors : sum local = " << sumLocalContErr
<< ", maximum = " << maxContErr
<< endl;
totalVolume = newTotalVolume;
}

View file

@ -26,7 +26,7 @@ Application
moveDynamicMesh moveDynamicMesh
Description Description
Mesh motion and topological mesh changes run for an engine geometry Mesh motion and topological mesh changes utility for an engine geometry
Author Author
Hrvoje Jasak, Wikki Ltd. All rights reserved Hrvoje Jasak, Wikki Ltd. All rights reserved
@ -36,56 +36,48 @@ Author
#include "fvCFD.H" #include "fvCFD.H"
#include "engineTime.H" #include "engineTime.H"
#include "engineTopoChangerMesh.H" #include "engineTopoChangerMesh.H"
<<<<<<< HEAD
=======
#include "OFstream.H"
using namespace Foam;
>>>>>>> parallelTopo
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// Main program:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
# include "setRootCase.H" # include "setRootCase.H"
# include "createEngineTime.H" # include "createEngineTime.H"
# include "createEngineDynamicMesh.H" # include "createEngineDynamicMesh.H"
scalar totalVolume = sum(mesh.V()).value();
Info<< "Reading field U\n" << endl;
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
dimensionedVector("zero", dimVelocity, vector::zero)
);
volScalarField motionContErr
(
IOobject
(
"motionContErr",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
fvc::ddt(dimensionedScalar("1", dimless, 1.0), mesh),
zeroGradientFvPatchScalarField::typeName
);
fileName path = runTime.caseName();
OFstream volFile(path+"/totVol.Cyl");
while (runTime.loop()) while (runTime.loop())
{ {
Info<< "Time = " << runTime.timeName() << endl; Info<< "Time = " << runTime.timeName() << endl;
mesh.update(); volFile << runTime.timeName() << "\t" << sum(mesh.V()).value() << endl;
// mesh.checkMesh(true);
# include "checkTotalVolume.H" if (isDir(runTime.path()/"VTK"))
{
Info << "Clear VTK directory" << endl;
rmDir(runTime.path()/"VTK");
}
mesh.update();
# include "checkVolContinuity.H"
if(checkEngineMesh)
{
mesh.checkMesh(true);
}
volFile << runTime.timeName() << tab << sum(mesh.V()).value() << endl;
runTime.write(); runTime.write();

View file

@ -30,7 +30,11 @@ Description
condition which denotes the side of the face. This application condition which denotes the side of the face. This application
reads a cellSet (xxxMasterCells if 'xxx' is the name of the faceSet) which reads a cellSet (xxxMasterCells if 'xxx' is the name of the faceSet) which
is the masterCells of the zone. Master cell is the one IN FRONT of the is the masterCells of the zone. Master cell is the one IN FRONT of the
<<<<<<< HEAD
face, ie. the one INTO which the face normal points. If master cells are face, ie. the one INTO which the face normal points. If master cells are
=======
face, ie. the one into which the face normal points. If master cells are
>>>>>>> parallelTopo
not found, take faces without a flip not found, take faces without a flip
If one is not interested in sidedness specify the -noFlipMap If one is not interested in sidedness specify the -noFlipMap

View file

@ -144,9 +144,51 @@ int main(int argc, char *argv[])
// Mesh write will be controlled by hand // Mesh write will be controlled by hand
meshPtr->write(); meshPtr->write();
procMeshes.writeAddressing();
meshPtr->setMotionWriteOpt(IOobject::NO_WRITE); meshPtr->setMotionWriteOpt(IOobject::NO_WRITE);
meshPtr->setTopoWriteOpt(IOobject::NO_WRITE); meshPtr->setTopoWriteOpt(IOobject::NO_WRITE);
// Write cell decomposition
if (writeCellDist)
{
// Write as volScalarField for post-processing
Info<< "Writing cellDist to time " << runTime.timeName()
<< endl;
volScalarField cellDist
(
IOobject
(
"cellDist",
runTime.timeName(),
meshPtr(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
meshPtr(),
dimensionedScalar("cellDist", dimless, 0),
zeroGradientFvPatchScalarField::typeName
);
scalarField& cellDistIn = cellDist.internalField();
label cellI = 0;
forAll (procMeshes.meshes(), procI)
{
for
(
label i = 0;
i < procMeshes.meshes()[procI].nCells();
i++
)
{
cellDistIn[cellI] = procI;
cellI++;
}
}
cellDist.write();
}
// Get region prefix for lagrangian // Get region prefix for lagrangian
fileName regionPrefix = ""; fileName regionPrefix = "";
if (regionName != fvMesh::defaultRegion) if (regionName != fvMesh::defaultRegion)
@ -221,7 +263,9 @@ int main(int argc, char *argv[])
if (writeCellDist) if (writeCellDist)
{ {
// Write as volScalarField for postprocessing. // Write as volScalarField for post-processing
Info<< "Writing cellDist to time " << runTime.timeName()
<< endl;
volScalarField cellDist volScalarField cellDist
( (
IOobject IOobject

View file

@ -293,7 +293,7 @@ void printMeshData(Ostream& os, const polyMesh& mesh)
} }
// Debugging: write volScalarField with decomposition for post processing. // Debugging: write volScalarField with decomposition for post-processing.
void writeDecomposition void writeDecomposition
( (
const word& name, const word& name,
@ -302,7 +302,7 @@ void writeDecomposition
) )
{ {
Info<< "Writing wanted cell distribution to volScalarField " << name Info<< "Writing wanted cell distribution to volScalarField " << name
<< " for postprocessing purposes." << nl << endl; << " for post-processing purposes." << nl << endl;
volScalarField procCells volScalarField procCells
( (

View file

@ -178,13 +178,10 @@ public:
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
timeSelector::addOptions();
# include "setRootCase.H" # include "setRootCase.H"
# include "createTime.H" # include "createTime.H"
// Get times list Info<< "Time = " << runTime.timeName() << endl;
instantList timeDirs = timeSelector::select0(runTime, args);
# include "createMesh.H" # include "createMesh.H"

View file

@ -40,6 +40,8 @@ DebugSwitches
mixingPlane 0; mixingPlane 0;
MixingPlaneInterpolation 0; MixingPlaneInterpolation 0;
tetFemVectorMatrix 0;
overlapGgi 0; overlapGgi 0;
cyclicGgi 0; cyclicGgi 0;
coupledLduMatrix 1; coupledLduMatrix 1;

View file

@ -1015,7 +1015,9 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChanger::changeMesh
<< "mapped correctly." << nl << "mapped correctly." << nl
<< "It uses a removed or a non-existing vertex or " << "It uses a removed or a non-existing vertex or "
<< "has been skipped." << nl << "has been skipped." << nl
<< "Face before mapping: " << oldFace << nl << "Face before mapping: " << oldFace << " with points "
<< oldFace.points(newPointsZeroVol) << nl
<< mesh.allPoints().size() << nl
<< "Face after mapping: " << renumberedFace << nl << "Face after mapping: " << renumberedFace << nl
<< "Max new vertex index: " << "Max new vertex index: "
<< newPointsZeroVol.size() - 1 << "." << nl << newPointsZeroVol.size() - 1 << "." << nl
@ -1098,6 +1100,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::polyTopoChanger::changeMesh
if (rotate != 0) if (rotate != 0)
{ {
Info<< "Rotating face" << endl;
newFaces[faceI] = rotateFace(newFaces[faceI], rotate); newFaces[faceI] = rotateFace(newFaces[faceI], rotate);
} }
} }

View file

@ -3,6 +3,7 @@ cd ${0%/*} || exit 1 # run from this directory
set -x set -x
# Make meshMotion solvers # Make meshMotion solvers
wmake libso solidBodyMotion
wmake libso fvMotionSolver wmake libso fvMotionSolver
wmake libso RBFMotionSolver wmake libso RBFMotionSolver
wmake libso mesquiteMotionSolver wmake libso mesquiteMotionSolver

View file

@ -310,10 +310,17 @@ void Foam::mixerFvMesh::calcMovingMask() const
( (
word(dict_.subDict("slider").lookup("moving")) + "Zone" word(dict_.subDict("slider").lookup("moving")) + "Zone"
); );
<<<<<<< HEAD
const labelList& movingSliderAddr = const labelList& movingSliderAddr =
faceZones()[faceZones().findZoneID(movingSliderZoneName)]; faceZones()[faceZones().findZoneID(movingSliderZoneName)];
=======
const labelList& movingSliderAddr =
faceZones()[faceZones().findZoneID(movingSliderZoneName)];
>>>>>>> parallelTopo
forAll (movingSliderAddr, faceI) forAll (movingSliderAddr, faceI)
{ {
const face& curFace = f[movingSliderAddr[faceI]]; const face& curFace = f[movingSliderAddr[faceI]];
@ -479,6 +486,7 @@ bool Foam::mixerFvMesh::update()
mappedOldPointsNew.map(oldPointsNew, topoChangeMap->pointMap()); mappedOldPointsNew.map(oldPointsNew, topoChangeMap->pointMap());
movePoints(mappedOldPointsNew); movePoints(mappedOldPointsNew);
<<<<<<< HEAD
resetMotion(); resetMotion();
setV0(); setV0();
@ -497,6 +505,27 @@ bool Foam::mixerFvMesh::update()
// Move the sliding interface points to correct position // Move the sliding interface points to correct position
movePoints(newPoints); movePoints(newPoints);
} }
=======
resetMotion();
setV0();
// Move the sliding interface points to correct position
movePoints(topoChangeMap->preMotionPoints());
}
else
{
pointField newPoints = allPoints();
movePoints(oldPointsNew);
resetMotion();
setV0();
// Move the sliding interface points to correct position
movePoints(newPoints);
}
>>>>>>> parallelTopo
} }
return topoChangeMap->morphing(); return topoChangeMap->morphing();

View file

@ -582,12 +582,17 @@ Foam::faMesh::faMesh
// Check for processor edges // Check for processor edges
labelList allUndefEdges = tmpList; labelList allUndefEdges = tmpList;
labelList ngbPolyPatch(allUndefEdges.size(), -1); labelList ngbPolyPatch(allUndefEdges.size(), -1);
<<<<<<< HEAD
forAll (ngbPolyPatch, edgeI) forAll (ngbPolyPatch, edgeI)
=======
forAll(ngbPolyPatch, edgeI)
>>>>>>> parallelTopo
{ {
label curEdge = allUndefEdges[edgeI]; label curEdge = allUndefEdges[edgeI];
label curPMeshEdge = meshEdges[curEdge]; label curPMeshEdge = meshEdges[curEdge];
<<<<<<< HEAD
forAll (edgeFaces[curPMeshEdge], faceI) forAll (edgeFaces[curPMeshEdge], faceI)
{ {
label curFace = edgeFaces[curPMeshEdge][faceI]; label curFace = edgeFaces[curPMeshEdge][faceI];
@ -597,10 +602,22 @@ Foam::faMesh::faMesh
label polyPatchID = label polyPatchID =
pMesh.boundaryMesh().whichPatch(curFace); pMesh.boundaryMesh().whichPatch(curFace);
=======
forAll(edgeFaces[curPMeshEdge], faceI)
{
label curFace = edgeFaces[curPMeshEdge][faceI];
if (findIndex(faceLabels_, curFace) == -1)
{
label polyPatchID =
m.boundaryMesh().whichPatch(curFace);
>>>>>>> parallelTopo
if (polyPatchID != -1) if (polyPatchID != -1)
{ {
ngbPolyPatch[edgeI] = polyPatchID; ngbPolyPatch[edgeI] = polyPatchID;
} }
<<<<<<< HEAD
} }
} }
} }
@ -620,6 +637,25 @@ Foam::faMesh::faMesh
) )
{ {
if (!processorPatchSet.found(ngbPolyPatch[edgeI])) if (!processorPatchSet.found(ngbPolyPatch[edgeI]))
=======
}
}
}
//Count ngb processorPolyPatch-es
labelHashSet processorPatchSet;
forAll(ngbPolyPatch, edgeI)
{
if (ngbPolyPatch[edgeI] != -1)
{
if
(
m.boundaryMesh()[ngbPolyPatch[edgeI]].type()
== processorPolyPatch::typeName
)
{
if(!processorPatchSet.found(ngbPolyPatch[edgeI]))
>>>>>>> parallelTopo
{ {
processorPatchSet.insert(ngbPolyPatch[edgeI]); processorPatchSet.insert(ngbPolyPatch[edgeI]);
} }
@ -629,7 +665,11 @@ Foam::faMesh::faMesh
labelList processorPatches(processorPatchSet.toc()); labelList processorPatches(processorPatchSet.toc());
faPatches.setSize(faPatches.size() + processorPatches.size()); faPatches.setSize(faPatches.size() + processorPatches.size());
<<<<<<< HEAD
for (label i=0; i<processorPatches.size(); i++) for (label i=0; i<processorPatches.size(); i++)
=======
for(label i=0; i<processorPatches.size(); i++)
>>>>>>> parallelTopo
{ {
SLList<label> tmpLst; SLList<label> tmpLst;
@ -640,6 +680,7 @@ Foam::faMesh::faMesh
tmpLst.append(allUndefEdges[eI]); tmpLst.append(allUndefEdges[eI]);
} }
} }
<<<<<<< HEAD
faPatches[faPatchNames.size() + i].edgeLabels_ = tmpLst; faPatches[faPatchNames.size() + i].edgeLabels_ = tmpLst;
@ -649,18 +690,31 @@ Foam::faMesh::faMesh
faPatches[faPatchNames.size() + i].type_ = faPatches[faPatchNames.size() + i].type_ =
processorFaPatch::typeName; processorFaPatch::typeName;
=======
faPatches[faPatchNames.size() + i].edgeLabels_ = tmpLst;
faPatches[faPatchNames.size() + i].name_ =
m.boundaryMesh()[processorPatches[i]].name();
faPatches[faPatchNames.size() + i].type_ =
processorFaPatch::typeName;
>>>>>>> parallelTopo
faPatches[faPatchNames.size() + i].ngbPolyPatchID_ = faPatches[faPatchNames.size() + i].ngbPolyPatchID_ =
processorPatches[i]; processorPatches[i];
} }
// Remaining undefined edges // Remaining undefined edges
SLList<label> undefEdges; SLList<label> undefEdges;
<<<<<<< HEAD
forAll (ngbPolyPatch, eI) forAll (ngbPolyPatch, eI)
=======
forAll(ngbPolyPatch, eI)
>>>>>>> parallelTopo
{ {
if (ngbPolyPatch[eI] == -1) if (ngbPolyPatch[eI] == -1)
{ {
undefEdges.append(allUndefEdges[eI]); undefEdges.append(allUndefEdges[eI]);
} }
<<<<<<< HEAD
else if else if
( (
!isA<processorPolyPatch> !isA<processorPolyPatch>
@ -670,6 +724,15 @@ Foam::faMesh::faMesh
) )
{ {
undefEdges.append(allUndefEdges[eI]); undefEdges.append(allUndefEdges[eI]);
=======
else if
(
m.boundaryMesh()[ngbPolyPatch[eI]].type()
!= processorPolyPatch::typeName
)
{
undefEdges.append(allUndefEdges[eI]);
>>>>>>> parallelTopo
} }
} }
@ -683,6 +746,7 @@ Foam::faMesh::faMesh
} }
else else
{ {
<<<<<<< HEAD
faPatches.setSize(faPatches.size() - 1); faPatches.setSize(faPatches.size() - 1);
} }
} }
@ -732,8 +796,60 @@ Foam::faMesh::faMesh
} }
faPatches[patchI].edgeLabels_ = reorderedEdgeLabels; faPatches[patchI].edgeLabels_ = reorderedEdgeLabels;
=======
faPatches.setSize(faPatches.size()-1);
>>>>>>> parallelTopo
} }
} }
else
{
faPatches.setSize(faPatches.size()-1);
}
// Reorder processorFaPatch using
// ordering of ngb processorPolyPatch
forAll(faPatches, patchI)
{
if (faPatches[patchI].type_ == processorFaPatch::typeName)
{
labelList ngbFaces(faPatches[patchI].edgeLabels_.size(), -1);
forAll(ngbFaces, edgeI)
{
label curEdge = faPatches[patchI].edgeLabels_[edgeI];
label curPMeshEdge = meshEdges[curEdge];
forAll(edgeFaces[curPMeshEdge], faceI)
{
label curFace = edgeFaces[curPMeshEdge][faceI];
label curPatchID =
m.boundaryMesh().whichPatch(curFace);
if (curPatchID == faPatches[patchI].ngbPolyPatchID_)
{
ngbFaces[edgeI] = curFace;
}
}
}
SortableList<label> sortedNgbFaces(ngbFaces);
labelList reorderedEdgeLabels(ngbFaces.size(), -1);
for (label i=0; i<reorderedEdgeLabels.size(); i++)
{
reorderedEdgeLabels[i] =
faPatches[patchI].edgeLabels_
[
sortedNgbFaces.indices()[i]
];
}
faPatches[patchI].edgeLabels_ = reorderedEdgeLabels;
}
}
// Add good patches to faMesh // Add good patches to faMesh
@ -754,6 +870,7 @@ Foam::faMesh::faMesh
if (faPatches[pI].ngbPolyPatchID_ == -1) if (faPatches[pI].ngbPolyPatchID_ == -1)
{ {
FatalErrorIn FatalErrorIn
<<<<<<< HEAD
( (
"void faMesh::faMesh(const polyMesh&, const fileName&)" "void faMesh::faMesh(const polyMesh&, const fileName&)"
) )
@ -766,12 +883,30 @@ Foam::faMesh::faMesh
refCast<const processorPolyPatch> refCast<const processorPolyPatch>
( (
pMesh.boundaryMesh()[faPatches[pI].ngbPolyPatchID_] pMesh.boundaryMesh()[faPatches[pI].ngbPolyPatchID_]
=======
(
"void faMesh::faMesh(const polyMesh&, const fileName&)"
)
<< "ngbPolyPatch is not defined for processorFaPatch: "
<< faPatches[pI].name_
<< abort(FatalError);
}
const processorPolyPatch& procPolyPatch =
refCast<const processorPolyPatch>
(
m.boundaryMesh()[faPatches[pI].ngbPolyPatchID_]
>>>>>>> parallelTopo
); );
faPatches[pI].dict_.add("myProcNo", procPolyPatch.myProcNo()); faPatches[pI].dict_.add("myProcNo", procPolyPatch.myProcNo());
faPatches[pI].dict_.add faPatches[pI].dict_.add
( (
<<<<<<< HEAD
"neighbProcNo", "neighbProcNo",
=======
"neighbProcNo",
>>>>>>> parallelTopo
procPolyPatch.neighbProcNo() procPolyPatch.neighbProcNo()
); );
} }

View file

@ -63,6 +63,8 @@ solvers
SIMPLE SIMPLE
{ {
nNonOrthogonalCorrectors 0; nNonOrthogonalCorrectors 0;
convergence 1e-4;
} }
relaxationFactors relaxationFactors

View file

@ -16,7 +16,14 @@ FoamFile
solvers solvers
{ {
motionU ICCG 1e-9 0.001; motionU
{
solver CG;
preconditioner Cholesky;
tolerance 1e-09;
relTol 0.001;
}
} }
// ************************************************************************* // // ************************************************************************* //