Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
e2d2f505
Commit
e2d2f505
authored
Dec 05, 2012
by
mattijs
Browse files
ENH: snappyHexMesh: keep orientation of baffle
parent
03fa70e4
Changes
12
Hide whitespace changes
Inline
Side-by-side
applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C
View file @
e2d2f505
...
...
@@ -369,7 +369,10 @@ int main(int argc, char *argv[])
// Add all the surface regions as patches
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
labelList
globalToPatch
;
//- Global surface region to patch (non faceZone surface) or patches
// (faceZone surfaces)
labelList
globalToMasterPatch
;
labelList
globalToSlavePatch
;
{
Info
<<
nl
<<
"Adding patches for surface regions"
<<
nl
...
...
@@ -377,7 +380,8 @@ int main(int argc, char *argv[])
<<
endl
;
// From global region number to mesh patch.
globalToPatch
.
setSize
(
surfaces
.
nRegions
(),
-
1
);
globalToMasterPatch
.
setSize
(
surfaces
.
nRegions
(),
-
1
);
globalToSlavePatch
.
setSize
(
surfaces
.
nRegions
(),
-
1
);
Info
<<
"Patch
\t
Type
\t
Region"
<<
nl
<<
"-----
\t
----
\t
------"
...
...
@@ -394,36 +398,111 @@ int main(int argc, char *argv[])
Info
<<
surfaces
.
names
()[
surfI
]
<<
':'
<<
nl
<<
nl
;
forAll
(
regNames
,
i
)
if
(
surfaces
.
faceZoneNames
()[
surfI
].
empty
()
)
{
label
globalRegionI
=
surfaces
.
globalRegion
(
surfI
,
i
);
label
patchI
;
if
(
surfacePatchInfo
.
set
(
globalRegionI
))
// 'Normal' surface
forAll
(
regNames
,
i
)
{
patchI
=
meshRefiner
.
addMeshedPatch
(
regNames
[
i
],
surfacePatchInfo
[
globalRegionI
]
);
label
globalRegionI
=
surfaces
.
globalRegion
(
surfI
,
i
);
label
patchI
;
if
(
surfacePatchInfo
.
set
(
globalRegionI
))
{
patchI
=
meshRefiner
.
addMeshedPatch
(
regNames
[
i
],
surfacePatchInfo
[
globalRegionI
]
);
}
else
{
dictionary
patchInfo
;
patchInfo
.
set
(
"type"
,
wallPolyPatch
::
typeName
);
patchI
=
meshRefiner
.
addMeshedPatch
(
regNames
[
i
],
patchInfo
);
}
Info
<<
patchI
<<
'\t'
<<
mesh
.
boundaryMesh
()[
patchI
].
type
()
<<
'\t'
<<
regNames
[
i
]
<<
nl
;
globalToMasterPatch
[
globalRegionI
]
=
patchI
;
globalToSlavePatch
[
globalRegionI
]
=
patchI
;
}
else
}
else
{
// Zoned surface
forAll
(
regNames
,
i
)
{
dictionary
patchInfo
;
patchInfo
.
set
(
"type"
,
wallPolyPatch
::
typeName
);
patchI
=
meshRefiner
.
addMeshedPatch
(
regNames
[
i
],
patchInfo
);
label
globalRegionI
=
surfaces
.
globalRegion
(
surfI
,
i
);
// Add master side patch
{
label
patchI
;
if
(
surfacePatchInfo
.
set
(
globalRegionI
))
{
patchI
=
meshRefiner
.
addMeshedPatch
(
regNames
[
i
],
surfacePatchInfo
[
globalRegionI
]
);
}
else
{
dictionary
patchInfo
;
patchInfo
.
set
(
"type"
,
wallPolyPatch
::
typeName
);
patchI
=
meshRefiner
.
addMeshedPatch
(
regNames
[
i
],
patchInfo
);
}
Info
<<
patchI
<<
'\t'
<<
mesh
.
boundaryMesh
()[
patchI
].
type
()
<<
'\t'
<<
regNames
[
i
]
<<
nl
;
globalToMasterPatch
[
globalRegionI
]
=
patchI
;
}
// Add slave side patch
{
const
word
slaveName
=
regNames
[
i
]
+
"_slave"
;
label
patchI
;
if
(
surfacePatchInfo
.
set
(
globalRegionI
))
{
patchI
=
meshRefiner
.
addMeshedPatch
(
slaveName
,
surfacePatchInfo
[
globalRegionI
]
);
}
else
{
dictionary
patchInfo
;
patchInfo
.
set
(
"type"
,
wallPolyPatch
::
typeName
);
patchI
=
meshRefiner
.
addMeshedPatch
(
slaveName
,
patchInfo
);
}
Info
<<
patchI
<<
'\t'
<<
mesh
.
boundaryMesh
()[
patchI
].
type
()
<<
'\t'
<<
slaveName
<<
nl
;
globalToSlavePatch
[
globalRegionI
]
=
patchI
;
}
}
Info
<<
patchI
<<
'\t'
<<
mesh
.
boundaryMesh
()[
patchI
].
type
()
<<
'\t'
<<
regNames
[
i
]
<<
nl
;
globalToPatch
[
globalRegionI
]
=
patchI
;
}
Info
<<
nl
;
...
...
@@ -479,7 +558,8 @@ int main(int argc, char *argv[])
meshRefiner
,
decomposer
,
distributor
,
globalToPatch
globalToMasterPatch
,
globalToSlavePatch
);
// Refinement parameters
...
...
@@ -510,7 +590,8 @@ int main(int argc, char *argv[])
autoSnapDriver
snapDriver
(
meshRefiner
,
globalToPatch
globalToMasterPatch
,
globalToSlavePatch
);
// Snap parameters
...
...
@@ -544,7 +625,12 @@ int main(int argc, char *argv[])
{
cpuTime
timer
;
autoLayerDriver
layerDriver
(
meshRefiner
,
globalToPatch
);
autoLayerDriver
layerDriver
(
meshRefiner
,
globalToMasterPatch
,
globalToSlavePatch
);
// Layer addition parameters
layerParameters
layerParams
(
layerDict
,
mesh
.
boundaryMesh
());
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.C
View file @
e2d2f505
...
...
@@ -2372,11 +2372,13 @@ void Foam::autoLayerDriver::getLayerCellsFaces
Foam
::
autoLayerDriver
::
autoLayerDriver
(
meshRefinement
&
meshRefiner
,
const
labelList
&
globalToPatch
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
)
:
meshRefiner_
(
meshRefiner
),
globalToPatch_
(
globalToPatch
)
globalToMasterPatch_
(
globalToMasterPatch
),
globalToSlavePatch_
(
globalToSlavePatch
)
{}
...
...
@@ -2435,7 +2437,12 @@ void Foam::autoLayerDriver::addLayers
// Create baffles (pairs of faces that share the same points)
// Baffles stored as owner and neighbour face that have been created.
List
<
labelPair
>
baffles
;
meshRefiner_
.
createZoneBaffles
(
globalToPatch_
,
baffles
);
meshRefiner_
.
createZoneBaffles
(
globalToMasterPatch_
,
globalToSlavePatch_
,
baffles
);
if
(
debug
&
meshRefinement
::
MESH
)
{
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriver.H
View file @
e2d2f505
...
...
@@ -99,7 +99,10 @@ class autoLayerDriver
meshRefinement
&
meshRefiner_
;
//- From surface region to patch
const
labelList
globalToPatch_
;
const
labelList
globalToMasterPatch_
;
//- From surface region to patch
const
labelList
globalToSlavePatch_
;
...
...
@@ -518,7 +521,8 @@ public:
autoLayerDriver
(
meshRefinement
&
meshRefiner
,
const
labelList
&
globalToPatch
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
);
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoLayerDriverShrink.C
View file @
e2d2f505
...
...
@@ -1135,6 +1135,12 @@ void Foam::autoLayerDriver::medialAxisSmoothingInfo
<<
" "
<<
medialRatio
.
name
()
<<
" : ratio of medial distance to wall distance"
<<
nl
<<
endl
;
meshRefiner_
.
mesh
().
setInstance
(
meshRefiner_
.
timeName
());
meshRefiner_
.
write
(
debug
,
mesh
.
time
().
path
()
/
meshRefiner_
.
timeName
()
);
dispVec
.
write
();
medialDist
.
write
();
medialVec
.
write
();
...
...
@@ -1409,6 +1415,94 @@ void Foam::autoLayerDriver::shrinkMeshMedialDistance
*
dispVec
[
pointI
];
}
//XXXXX
// // Smear displacement away from fixed values (medialRatio=0 or 1)
// {
// const edgeList& edges = mesh.edges();
// scalarField edgeWeight(edges.size(), 0.0);
// forAll(edges, edgeI)
// {
// if (isMasterEdge[edgeI])
// {
// scalar eMag = edges[edgeI].mag(mesh.points());
// if (eMag > VSMALL)
// {
// edgeWeight[edgeI] = 1.0/eMag;
// }
// else
// {
// edgeWeight[edgeI] = GREAT;
// }
// }
// }
// scalarField invSumWeight(mesh.nPoints());
// sumWeights(isMasterEdge, edgeWeight, invSumWeight);
//
//
// // Get smoothly varying patch field.
// Info<< "shrinkMeshDistance : Smoothing displacement ..." << endl;
//
// const scalar lambda = 0.33;
// const scalar mu = -0.34;
//
// pointField average(mesh.nPoints());
// for (label iter = 0; iter < 90; iter++)
// {
// // Calculate average of field
// averageNeighbours
// (
// mesh,
// edgeWeight,
// invSumWeight,
// displacement,
// average
// );
//
// forAll(displacement, i)
// {
// if (medialRatio[i] > SMALL && medialRatio[i] < 1-SMALL)
// {
// displacement[i] =
// (1-lambda)*displacement[i]
// +lambda*average[i];
// }
// }
//
//
// // Calculate average of field
// averageNeighbours
// (
// mesh,
// edgeWeight,
// invSumWeight,
// displacement,
// average
// );
//
// forAll(displacement, i)
// {
// if (medialRatio[i] > SMALL && medialRatio[i] < 1-SMALL)
// {
// displacement[i] = (1-mu)*displacement[i]+mu*average[i];
// }
// }
//
//
// // Do residual calculation every so often.
// if ((iter % 10) == 0)
// {
// Info<< " Iteration " << iter << " residual "
// << gSum(mag(displacement-average))
// /returnReduce(average.size(), sumOp<label>())
// << endl;
// }
// }
// }
//XXXXX
if
(
debug
&
meshRefinement
::
MESH
||
debug
&
meshRefinement
::
LAYERINFO
)
{
const_cast
<
Time
&>
(
mesh
.
time
())
++
;
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C
View file @
e2d2f505
...
...
@@ -57,13 +57,15 @@ Foam::autoRefineDriver::autoRefineDriver
meshRefinement
&
meshRefiner
,
decompositionMethod
&
decomposer
,
fvMeshDistribute
&
distributor
,
const
labelList
&
globalToPatch
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
)
:
meshRefiner_
(
meshRefiner
),
decomposer_
(
decomposer
),
distributor_
(
distributor
),
globalToPatch_
(
globalToPatch
)
globalToMasterPatch_
(
globalToMasterPatch
),
globalToSlavePatch_
(
globalToSlavePatch
)
{}
...
...
@@ -313,7 +315,8 @@ void Foam::autoRefineDriver::removeInsideCells
meshRefiner_
.
splitMesh
(
nBufferLayers
,
// nBufferLayers
globalToPatch_
,
globalToMasterPatch_
,
globalToSlavePatch_
,
refineParams
.
keepPoints
()[
0
]
);
...
...
@@ -521,7 +524,8 @@ void Foam::autoRefineDriver::baffleAndSplitMesh
!
handleSnapProblems
,
// merge free standing baffles?
motionDict
,
const_cast
<
Time
&>
(
mesh
.
time
()),
globalToPatch_
,
globalToMasterPatch_
,
globalToSlavePatch_
,
refineParams
.
keepPoints
()[
0
]
);
}
...
...
@@ -606,7 +610,8 @@ void Foam::autoRefineDriver::splitAndMergeBaffles
//true, // merge free standing baffles?
motionDict
,
const_cast
<
Time
&>
(
mesh
.
time
()),
globalToPatch_
,
globalToMasterPatch_
,
globalToSlavePatch_
,
refineParams
.
keepPoints
()[
0
]
);
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H
View file @
e2d2f505
...
...
@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011
-2012
OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
...
...
@@ -65,7 +65,10 @@ class autoRefineDriver
fvMeshDistribute
&
distributor_
;
//- From surface region to patch
const
labelList
globalToPatch_
;
const
labelList
globalToMasterPatch_
;
//- From surface region to patch
const
labelList
globalToSlavePatch_
;
// Private Member Functions
...
...
@@ -146,7 +149,8 @@ public:
meshRefinement
&
meshRefiner
,
decompositionMethod
&
decomposer
,
fvMeshDistribute
&
distributor
,
const
labelList
&
globalToPatch
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
);
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.C
View file @
e2d2f505
...
...
@@ -573,11 +573,13 @@ bool Foam::autoSnapDriver::outwardsDisplacement
Foam
::
autoSnapDriver
::
autoSnapDriver
(
meshRefinement
&
meshRefiner
,
const
labelList
&
globalToPatch
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
)
:
meshRefiner_
(
meshRefiner
),
globalToPatch_
(
globalToPatch
)
globalToMasterPatch_
(
globalToMasterPatch
),
globalToSlavePatch_
(
globalToSlavePatch
)
{}
...
...
@@ -1191,7 +1193,7 @@ Foam::autoPtr<Foam::mapPolyMesh> Foam::autoSnapDriver::repatchToSurface
if
(
hitSurface
[
i
]
!=
-
1
&&
!
isZonedFace
.
get
(
faceI
))
{
closestPatch
[
i
]
=
globalToPatch_
closestPatch
[
i
]
=
globalTo
Master
Patch_
[
surfaces
.
globalRegion
(
...
...
@@ -1265,7 +1267,12 @@ void Foam::autoSnapDriver::doSnap
// Create baffles (pairs of faces that share the same points)
// Baffles stored as owner and neighbour face that have been created.
List
<
labelPair
>
baffles
;
meshRefiner_
.
createZoneBaffles
(
globalToPatch_
,
baffles
);
meshRefiner_
.
createZoneBaffles
(
globalToMasterPatch_
,
globalToSlavePatch_
,
baffles
);
// Selectively 'forget' about the baffles, i.e. not check across them
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriver.H
View file @
e2d2f505
...
...
@@ -59,8 +59,11 @@ class autoSnapDriver
//- Mesh+surface
meshRefinement
&
meshRefiner_
;
//- From surface region to patch
const
labelList
globalToPatch_
;
//- From global surface region to master side patch
const
labelList
globalToMasterPatch_
;
//- From global surface region to slave side patch
const
labelList
globalToSlavePatch_
;
// Private Member Functions
...
...
@@ -390,7 +393,8 @@ public:
autoSnapDriver
(
meshRefinement
&
meshRefiner
,
const
labelList
&
globalToPatch
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
);
...
...
src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoSnapDriverFeature.C
View file @
e2d2f505
...
...
@@ -573,7 +573,7 @@ void Foam::autoSnapDriver::calcNearestFacePointProperties
pFc
[
i
]
=
pp
.
faceCentres
()[
faceI
];
//label meshFaceI = pp.addressing()[faceI];
//pFid[i] = mesh.boundaryMesh().whichPatch(meshFaceI);
pFid
[
i
]
=
globalToPatch_
[
faceSurfaceGlobalRegion
[
faceI
]];
pFid
[
i
]
=
globalTo
Master
Patch_
[
faceSurfaceGlobalRegion
[
faceI
]];
}
}
...
...
src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.C
View file @
e2d2f505
...
...
@@ -55,6 +55,7 @@ License
#include "searchableSurfaces.H"
#include "treeBoundBox.H"
#include "zeroGradientFvPatchFields.H"
#include "fvMeshTools.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
...
...
@@ -1700,7 +1701,7 @@ Foam::label Foam::meshRefinement::addPatch
oldToNew
[
addedPatchI
]
=
insertPatchI
;
// Shuffle into place
polyPatches
.
reorder
(
oldToNew
);
polyPatches
.
reorder
(
oldToNew
,
true
);
fvPatches
.
reorder
(
oldToNew
);
reorderPatchFields
<
volScalarField
>
(
mesh
,
oldToNew
);
...
...
@@ -1736,6 +1737,28 @@ Foam::label Foam::meshRefinement::addMeshedPatch
// Add patch
label
patchI
=
addPatch
(
mesh_
,
name
,
patchInfo
);
// dictionary patchDict(patchInfo);
// patchDict.set("nFaces", 0);
// patchDict.set("startFace", 0);
// autoPtr<polyPatch> ppPtr
// (
// polyPatch::New
// (
// name,
// patchDict,
// 0,
// mesh_.boundaryMesh()
// )
// );
// label patchI = fvMeshTools::addPatch
// (
// mesh_,
// ppPtr(),
// dictionary(), // optional field values
// calculatedFvPatchField<scalar>::typeName,
// true
// );
// Store
label
sz
=
meshedPatches_
.
size
();
meshedPatches_
.
setSize
(
sz
+
1
);
...
...
src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H
View file @
e2d2f505
...
...
@@ -330,10 +330,11 @@ private:
// Baffle handling
//- Get faces to repatch. Returns map from face to patch.
Map
<
label
>
getZoneBafflePatches
Map
<
label
Pair
>
getZoneBafflePatches
(
const
bool
allowBoundary
,
const
labelList
&
globalToPatch
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
)
const
;
//- Geometric test on see whether face needs to be baffled:
...
...
@@ -349,7 +350,7 @@ private:
//- Determine patches for baffles
void
getBafflePatches
(
const
labelList
&
globalToPatch
,
const
labelList
&
globalTo
Master
Patch
,
const
labelList
&
neiLevel
,
const
pointField
&
neiCc
,
labelList
&
ownPatch
,
...
...
@@ -426,7 +427,7 @@ private:
const
dictionary
&
motionDict
,
const
bool
removeEdgeConnectedCells
,
const
scalarField
&
perpendicularAngle
,
const
labelList
&
globalToPatch
const
labelList
&
globalTo
Master
Patch
)
const
;
...
...
@@ -707,7 +708,8 @@ public:
const
bool
mergeFreeStanding
,
const
dictionary
&
motionDict
,
Time
&
runTime
,
const
labelList
&
globalToPatch
,
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
,
const
point
&
keepPoint
);
...
...
@@ -716,7 +718,8 @@ public:
autoPtr
<
mapPolyMesh
>
splitMesh
(
const
label
nBufferLayers
,
const
labelList
&
globalToPatch
,
const
labelList
&
globalToMasterPatch
,
const
labelList
&
globalToSlavePatch
,
const
point
&
keepPoint
);
...
...
@@ -741,7 +744,8 @@ public:
// baffles.
autoPtr
<
mapPolyMesh
>
createZoneBaffles
(
const
labelList
&
globalToPatch
,
const
labelList
&
globalToMasterPatch
,