mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Adding extrudePatchMesh, re-location of extrudeModel and
createShellMesh and introducing io::READ_IF_PRESENT option in polyMesh constructor from components
This commit is contained in:
@ -10,7 +10,6 @@ EXE_INC = \
|
|||||||
${EXE_NDEBUG} \
|
${EXE_NDEBUG} \
|
||||||
${CGAL_INC} \
|
${CGAL_INC} \
|
||||||
-I$(FOAM_APP)/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/lnInclude \
|
-I$(FOAM_APP)/utilities/mesh/generation/extrude2DMesh/extrude2DMesh/lnInclude \
|
||||||
-I$(FOAM_APP)/utilities/mesh/generation/extrude/extrudeModel/lnInclude \
|
|
||||||
-IconformalVoronoi2DMesh/lnInclude \
|
-IconformalVoronoi2DMesh/lnInclude \
|
||||||
-I$(FOAM_APP)/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/lnInclude \
|
-I$(FOAM_APP)/utilities/mesh/generation/cvMesh/conformalVoronoiMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
@ -18,6 +17,7 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/surfMesh/lnInclude \
|
-I$(LIB_SRC)/surfMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/edgeMesh/lnInclude \
|
-I$(LIB_SRC)/edgeMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
||||||
|
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude \
|
||||||
-I$(LIB_SRC)/triSurface/lnInclude
|
-I$(LIB_SRC)/triSurface/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
|
|||||||
@ -2,7 +2,6 @@
|
|||||||
cd ${0%/*} || exit 1 # run from this directory
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
wclean libso extrudeModel
|
|
||||||
wclean extrudeMesh
|
wclean extrudeMesh
|
||||||
wclean extrudeToRegionMesh
|
wclean extrudeToRegionMesh
|
||||||
|
|
||||||
|
|||||||
@ -2,10 +2,7 @@
|
|||||||
cd ${0%/*} || exit 1 # run from this directory
|
cd ${0%/*} || exit 1 # run from this directory
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
wmake libso extrudeModel
|
|
||||||
wmake extrudeMesh
|
wmake extrudeMesh
|
||||||
|
|
||||||
wmake libso extrudeToRegionMesh/createShellMesh
|
|
||||||
wmake extrudeToRegionMesh
|
wmake extrudeToRegionMesh
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-IextrudedMesh \
|
-IextrudedMesh \
|
||||||
-I../extrudeModel/lnInclude \
|
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/surfMesh/lnInclude \
|
-I$(LIB_SRC)/surfMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude
|
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
||||||
|
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
|
|||||||
@ -1,13 +1,11 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I../extrudeModel/lnInclude \
|
|
||||||
-IcreateShellMesh/lnInclude \
|
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude
|
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
||||||
|
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
-lextrudeModel \
|
|
||||||
-lcreateShellMesh \
|
|
||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-ldynamicMesh
|
-ldynamicMesh \
|
||||||
|
-lextrudeModel
|
||||||
|
|||||||
@ -3,7 +3,7 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/surfMesh/lnInclude \
|
-I$(LIB_SRC)/surfMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
||||||
-Iextrude2DMesh/lnInclude \
|
-Iextrude2DMesh/lnInclude \
|
||||||
-I../extrude/extrudeModel/lnInclude
|
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
-lsurfMesh \
|
-lsurfMesh \
|
||||||
|
|||||||
@ -4,7 +4,7 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/surfMesh/lnInclude \
|
-I$(LIB_SRC)/surfMesh/lnInclude \
|
||||||
-I$(FOAM_APP)/utilities/mesh/generation/extrude/extrudeModel/lnInclude
|
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
|
|||||||
@ -52,6 +52,8 @@ wmake $makeType conversion
|
|||||||
|
|
||||||
wmake $makeType sampling
|
wmake $makeType sampling
|
||||||
|
|
||||||
|
wmake $makeType mesh/extrudeModel
|
||||||
|
|
||||||
wmake $makeType dynamicMesh
|
wmake $makeType dynamicMesh
|
||||||
wmake $makeType dynamicFvMesh
|
wmake $makeType dynamicFvMesh
|
||||||
wmake $makeType topoChangerFvMesh
|
wmake $makeType topoChangerFvMesh
|
||||||
|
|||||||
@ -130,6 +130,7 @@ Foam::solution::solution
|
|||||||
obr,
|
obr,
|
||||||
(
|
(
|
||||||
obr.readOpt() == IOobject::MUST_READ
|
obr.readOpt() == IOobject::MUST_READ
|
||||||
|
|| obr.readOpt() == IOobject::READ_IF_PRESENT
|
||||||
? IOobject::MUST_READ_IF_MODIFIED
|
? IOobject::MUST_READ_IF_MODIFIED
|
||||||
: obr.readOpt()
|
: obr.readOpt()
|
||||||
),
|
),
|
||||||
@ -148,6 +149,7 @@ Foam::solution::solution
|
|||||||
(
|
(
|
||||||
readOpt() == IOobject::MUST_READ
|
readOpt() == IOobject::MUST_READ
|
||||||
|| readOpt() == IOobject::MUST_READ_IF_MODIFIED
|
|| readOpt() == IOobject::MUST_READ_IF_MODIFIED
|
||||||
|
|| (readOpt() == IOobject::READ_IF_PRESENT && headerOk())
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
read(solutionDict());
|
read(solutionDict());
|
||||||
|
|||||||
@ -132,6 +132,84 @@ Foam::polyBoundaryMesh::polyBoundaryMesh
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::polyBoundaryMesh::polyBoundaryMesh
|
||||||
|
(
|
||||||
|
const IOobject& io,
|
||||||
|
const polyMesh& pm,
|
||||||
|
const polyPatchList& ppl
|
||||||
|
)
|
||||||
|
:
|
||||||
|
polyPatchList(),
|
||||||
|
regIOobject(io),
|
||||||
|
mesh_(pm)
|
||||||
|
{
|
||||||
|
if
|
||||||
|
(
|
||||||
|
(this->readOpt() == IOobject::READ_IF_PRESENT && this->headerOk())
|
||||||
|
|| this->readOpt() == IOobject::MUST_READ
|
||||||
|
|| this->readOpt() == IOobject::MUST_READ_IF_MODIFIED
|
||||||
|
)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (readOpt() == IOobject::MUST_READ_IF_MODIFIED)
|
||||||
|
{
|
||||||
|
WarningIn
|
||||||
|
(
|
||||||
|
"polyBoundaryMesh::polyBoundaryMesh\n"
|
||||||
|
"(\n"
|
||||||
|
" const IOobject&,\n"
|
||||||
|
" const polyMesh&\n"
|
||||||
|
" const polyPatchList&\n"
|
||||||
|
")"
|
||||||
|
) << "Specified IOobject::MUST_READ_IF_MODIFIED but class"
|
||||||
|
<< " does not support automatic rereading."
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
polyPatchList& patches = *this;
|
||||||
|
|
||||||
|
// Read polyPatchList
|
||||||
|
Istream& is = readStream(typeName);
|
||||||
|
|
||||||
|
PtrList<entry> patchEntries(is);
|
||||||
|
patches.setSize(patchEntries.size());
|
||||||
|
|
||||||
|
forAll(patches, patchI)
|
||||||
|
{
|
||||||
|
patches.set
|
||||||
|
(
|
||||||
|
patchI,
|
||||||
|
polyPatch::New
|
||||||
|
(
|
||||||
|
patchEntries[patchI].keyword(),
|
||||||
|
patchEntries[patchI].dict(),
|
||||||
|
patchI,
|
||||||
|
*this
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check state of IOstream
|
||||||
|
is.check
|
||||||
|
(
|
||||||
|
"polyBoundaryMesh::polyBoundaryMesh"
|
||||||
|
"(const IOobject&, const polyMesh&, const polyPatchList&)"
|
||||||
|
);
|
||||||
|
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
polyPatchList& patches = *this;
|
||||||
|
patches.setSize(ppl.size());
|
||||||
|
forAll (patches, patchI)
|
||||||
|
{
|
||||||
|
patches.set(patchI, ppl[patchI].clone(*this).ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
Foam::polyBoundaryMesh::~polyBoundaryMesh()
|
Foam::polyBoundaryMesh::~polyBoundaryMesh()
|
||||||
|
|||||||
@ -119,6 +119,14 @@ public:
|
|||||||
const label size
|
const label size
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct given polyPatchList
|
||||||
|
polyBoundaryMesh
|
||||||
|
(
|
||||||
|
const IOobject&,
|
||||||
|
const polyMesh&,
|
||||||
|
const polyPatchList&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
~polyBoundaryMesh();
|
~polyBoundaryMesh();
|
||||||
|
|||||||
@ -338,7 +338,7 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
points
|
points
|
||||||
@ -351,7 +351,7 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
faces
|
faces
|
||||||
@ -364,7 +364,7 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
owner
|
owner
|
||||||
@ -377,7 +377,7 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
neighbour
|
neighbour
|
||||||
@ -391,11 +391,11 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::AUTO_WRITE
|
IOobject::AUTO_WRITE
|
||||||
),
|
),
|
||||||
*this,
|
*this,
|
||||||
0
|
polyPatchList()
|
||||||
),
|
),
|
||||||
bounds_(points_, syncPar),
|
bounds_(points_, syncPar),
|
||||||
geometricD_(Vector<label>::zero),
|
geometricD_(Vector<label>::zero),
|
||||||
@ -410,11 +410,11 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
*this,
|
*this,
|
||||||
0
|
PtrList<pointZone>()
|
||||||
),
|
),
|
||||||
faceZones_
|
faceZones_
|
||||||
(
|
(
|
||||||
@ -424,11 +424,11 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
*this,
|
*this,
|
||||||
0
|
PtrList<faceZone>()
|
||||||
),
|
),
|
||||||
cellZones_
|
cellZones_
|
||||||
(
|
(
|
||||||
@ -438,11 +438,11 @@ Foam::polyMesh::polyMesh
|
|||||||
instance(),
|
instance(),
|
||||||
meshSubDir,
|
meshSubDir,
|
||||||
*this,
|
*this,
|
||||||
IOobject::NO_READ,
|
io.readOpt(),
|
||||||
IOobject::NO_WRITE
|
IOobject::NO_WRITE
|
||||||
),
|
),
|
||||||
*this,
|
*this,
|
||||||
0
|
PtrList<cellZone>()
|
||||||
),
|
),
|
||||||
globalMeshDataPtr_(NULL),
|
globalMeshDataPtr_(NULL),
|
||||||
moving_(false),
|
moving_(false),
|
||||||
|
|||||||
@ -162,6 +162,32 @@ Foam::ZoneMesh<ZoneType, MeshType>::ZoneMesh
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
template<class ZoneType, class MeshType>
|
||||||
|
Foam::ZoneMesh<ZoneType, MeshType>::ZoneMesh
|
||||||
|
(
|
||||||
|
const IOobject& io ,
|
||||||
|
const MeshType& mesh,
|
||||||
|
const PtrList<ZoneType>& pzm
|
||||||
|
)
|
||||||
|
:
|
||||||
|
PtrList<ZoneType>(),
|
||||||
|
regIOobject(io),
|
||||||
|
mesh_(mesh),
|
||||||
|
zoneMapPtr_(NULL)
|
||||||
|
{
|
||||||
|
ZoneMesh<ZoneType, MeshType>(io, mesh);
|
||||||
|
|
||||||
|
if (this->size() == 0)
|
||||||
|
{
|
||||||
|
PtrList<ZoneType>& zones = *this;
|
||||||
|
zones.setSize(pzm.size());
|
||||||
|
forAll (zones, zoneI)
|
||||||
|
{
|
||||||
|
zones.set(zoneI, pzm[zoneI].clone(*this).ptr());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
template<class ZoneType, class MeshType>
|
template<class ZoneType, class MeshType>
|
||||||
|
|||||||
@ -106,6 +106,15 @@ public:
|
|||||||
const label size
|
const label size
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//- Construct given a PtrList
|
||||||
|
ZoneMesh
|
||||||
|
(
|
||||||
|
const IOobject&,
|
||||||
|
const MeshType&,
|
||||||
|
const PtrList<ZoneType>&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
~ZoneMesh();
|
~ZoneMesh();
|
||||||
|
|
||||||
|
|||||||
@ -86,4 +86,9 @@ motionSmoother/polyMeshGeometry/polyMeshGeometry.C
|
|||||||
|
|
||||||
motionSolver/motionSolver.C
|
motionSolver/motionSolver.C
|
||||||
|
|
||||||
|
createShellMesh/createShellMesh.C
|
||||||
|
|
||||||
|
extrudePatchMesh/extrudePatchMesh.C
|
||||||
|
|
||||||
|
|
||||||
LIB = $(FOAM_LIBBIN)/libdynamicMesh
|
LIB = $(FOAM_LIBBIN)/libdynamicMesh
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||||
-I$(LIB_SRC)/triSurface/lnInclude
|
-I$(LIB_SRC)/triSurface/lnInclude \
|
||||||
|
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-ltriSurface
|
-ltriSurface \
|
||||||
|
-lextrudeModel
|
||||||
|
|||||||
283
src/dynamicMesh/extrudePatchMesh/extrudePatchMesh.C
Normal file
283
src/dynamicMesh/extrudePatchMesh/extrudePatchMesh.C
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2012-2012 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/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "extrudePatchMesh.H"
|
||||||
|
|
||||||
|
#include "createShellMesh.H"
|
||||||
|
#include "polyTopoChange.H"
|
||||||
|
#include "wallPolyPatch.H"
|
||||||
|
#include "emptyPolyPatch.H"
|
||||||
|
#include "wedgePolyPatch.H"
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
defineTypeNameAndDebug(extrudePatchMesh, 0);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
extrudePatchMesh::extrudePatchMesh
|
||||||
|
(
|
||||||
|
const fvMesh& mesh,
|
||||||
|
const fvPatch& patch,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
fvMesh
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
dict.lookup("region"),
|
||||||
|
mesh.facesInstance(),
|
||||||
|
mesh,
|
||||||
|
IOobject::READ_IF_PRESENT,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
true
|
||||||
|
),
|
||||||
|
xferCopy(pointField()),
|
||||||
|
xferCopy(faceList()),
|
||||||
|
xferCopy(labelList()),
|
||||||
|
xferCopy(labelList()),
|
||||||
|
false
|
||||||
|
),
|
||||||
|
extrudedPatch_(patch.patch())
|
||||||
|
{
|
||||||
|
if (this->boundaryMesh().size() == 0)
|
||||||
|
{
|
||||||
|
bool columnCells = readBool(dict.lookup("columnCells"));
|
||||||
|
|
||||||
|
PackedBoolList nonManifoldEdge(extrudedPatch_.nEdges());
|
||||||
|
for (label edgeI = 0; edgeI < extrudedPatch_.nInternalEdges(); edgeI++)
|
||||||
|
{
|
||||||
|
if (columnCells)
|
||||||
|
{
|
||||||
|
nonManifoldEdge[edgeI] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
autoPtr<extrudeModel> model_(extrudeModel::New(dict));
|
||||||
|
|
||||||
|
faceList pointGlobalRegions;
|
||||||
|
faceList pointLocalRegions;
|
||||||
|
labelList localToGlobalRegion;
|
||||||
|
|
||||||
|
const primitiveFacePatch pp
|
||||||
|
(
|
||||||
|
extrudedPatch_, extrudedPatch_.points()
|
||||||
|
);
|
||||||
|
|
||||||
|
createShellMesh::calcPointRegions
|
||||||
|
(
|
||||||
|
this->globalData(),
|
||||||
|
pp,
|
||||||
|
nonManifoldEdge,
|
||||||
|
false,
|
||||||
|
|
||||||
|
pointGlobalRegions,
|
||||||
|
pointLocalRegions,
|
||||||
|
localToGlobalRegion
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Per local region an originating point
|
||||||
|
labelList localRegionPoints(localToGlobalRegion.size());
|
||||||
|
forAll(pointLocalRegions, faceI)
|
||||||
|
{
|
||||||
|
const face& f = extrudedPatch_.localFaces()[faceI];
|
||||||
|
const face& pRegions = pointLocalRegions[faceI];
|
||||||
|
forAll(pRegions, fp)
|
||||||
|
{
|
||||||
|
localRegionPoints[pRegions[fp]] = f[fp];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate region normals by reducing local region normals
|
||||||
|
pointField localRegionNormals(localToGlobalRegion.size());
|
||||||
|
{
|
||||||
|
pointField localSum(localToGlobalRegion.size(), vector::zero);
|
||||||
|
|
||||||
|
forAll(pointLocalRegions, faceI)
|
||||||
|
{
|
||||||
|
const face& pRegions = pointLocalRegions[faceI];
|
||||||
|
forAll(pRegions, fp)
|
||||||
|
{
|
||||||
|
label localRegionI = pRegions[fp];
|
||||||
|
localSum[localRegionI] +=
|
||||||
|
extrudedPatch_.faceNormals()[faceI];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<point> globalSum(2*localToGlobalRegion.size());
|
||||||
|
|
||||||
|
forAll(localSum, localRegionI)
|
||||||
|
{
|
||||||
|
label globalRegionI = localToGlobalRegion[localRegionI];
|
||||||
|
globalSum.insert(globalRegionI, localSum[localRegionI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reduce
|
||||||
|
Pstream::mapCombineGather(globalSum, plusEqOp<point>());
|
||||||
|
Pstream::mapCombineScatter(globalSum);
|
||||||
|
|
||||||
|
forAll(localToGlobalRegion, localRegionI)
|
||||||
|
{
|
||||||
|
label globalRegionI = localToGlobalRegion[localRegionI];
|
||||||
|
localRegionNormals[localRegionI] = globalSum[globalRegionI];
|
||||||
|
}
|
||||||
|
localRegionNormals /= mag(localRegionNormals);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Per local region an extrusion direction
|
||||||
|
vectorField firstDisp(localToGlobalRegion.size());
|
||||||
|
forAll(firstDisp, regionI)
|
||||||
|
{
|
||||||
|
//const point& regionPt = regionCentres[regionI];
|
||||||
|
const point& regionPt = extrudedPatch_.points()
|
||||||
|
[
|
||||||
|
extrudedPatch_.meshPoints()
|
||||||
|
[
|
||||||
|
localRegionPoints[regionI]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
const vector& n = localRegionNormals[regionI];
|
||||||
|
firstDisp[regionI] = model_()(regionPt, n, 1) - regionPt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Extrude engine
|
||||||
|
createShellMesh extruder
|
||||||
|
(
|
||||||
|
pp,
|
||||||
|
pointLocalRegions,
|
||||||
|
localRegionPoints
|
||||||
|
);
|
||||||
|
|
||||||
|
List<polyPatch*> regionPatches(3);
|
||||||
|
List<word> patchNames(regionPatches.size());
|
||||||
|
List<word> patchTypes(regionPatches.size());
|
||||||
|
PtrList<dictionary> dicts(regionPatches.size());
|
||||||
|
|
||||||
|
forAll (dicts, patchI)
|
||||||
|
{
|
||||||
|
if (!dicts.set(patchI))
|
||||||
|
{
|
||||||
|
dicts.set(patchI, new dictionary());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dicts[bottomPatchID] = dict.subDict("bottomCoeffs");
|
||||||
|
dicts[sidePatchID] = dict.subDict("sideCoeffs");
|
||||||
|
dicts[topPatchID] = dict.subDict("topCoeffs");
|
||||||
|
|
||||||
|
forAll (dicts, patchI)
|
||||||
|
{
|
||||||
|
dicts[patchI].lookup("name") >> patchNames[patchI];
|
||||||
|
dicts[patchI].lookup("type") >> patchTypes[patchI];
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll (regionPatches, patchI)
|
||||||
|
{
|
||||||
|
dictionary& patchDict = dicts[patchI];
|
||||||
|
patchDict.set("nFaces", 0);
|
||||||
|
patchDict.set("startFace", 0);
|
||||||
|
|
||||||
|
regionPatches[patchI] = polyPatch::New
|
||||||
|
(
|
||||||
|
patchNames[patchI],
|
||||||
|
patchDict,
|
||||||
|
patchI,
|
||||||
|
mesh.boundaryMesh()
|
||||||
|
).ptr();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
this->clearOut();
|
||||||
|
this->removeFvBoundary();
|
||||||
|
this->addFvPatches(regionPatches, true);
|
||||||
|
|
||||||
|
|
||||||
|
// At this point we have a valid mesh with 3 patches and zero cells.
|
||||||
|
// Determine:
|
||||||
|
// - per face the top and bottom patch (topPatchID, bottomPatchID)
|
||||||
|
// - per edge, per face on edge the side patch (edgePatches)
|
||||||
|
labelListList edgePatches(extrudedPatch_.nEdges());
|
||||||
|
forAll(edgePatches, edgeI)
|
||||||
|
{
|
||||||
|
const labelList& eFaces = extrudedPatch_.edgeFaces()[edgeI];
|
||||||
|
|
||||||
|
if (eFaces.size() != 2 || nonManifoldEdge[edgeI])
|
||||||
|
{
|
||||||
|
edgePatches[edgeI].setSize(eFaces.size(), sidePatchID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
polyTopoChange meshMod(regionPatches.size());
|
||||||
|
|
||||||
|
extruder.setRefinement
|
||||||
|
(
|
||||||
|
firstDisp, // first displacement
|
||||||
|
model_().expansionRatio(),
|
||||||
|
model_().nLayers(), // nLayers
|
||||||
|
labelList(extrudedPatch_.size(), topPatchID),
|
||||||
|
labelList(extrudedPatch_.size(), bottomPatchID),
|
||||||
|
edgePatches,
|
||||||
|
meshMod
|
||||||
|
);
|
||||||
|
|
||||||
|
autoPtr<mapPolyMesh> map = meshMod.changeMesh
|
||||||
|
(
|
||||||
|
*this, // mesh to change
|
||||||
|
false // inflate
|
||||||
|
);
|
||||||
|
|
||||||
|
// Update numbering on extruder.
|
||||||
|
extruder.updateMesh(map);
|
||||||
|
|
||||||
|
this->setInstance(this->thisDb().time().constant());
|
||||||
|
this->write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
extrudePatchMesh::~extrudePatchMesh()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
177
src/dynamicMesh/extrudePatchMesh/extrudePatchMesh.H
Normal file
177
src/dynamicMesh/extrudePatchMesh/extrudePatchMesh.H
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2012-2012 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
|
||||||
|
extrudePatchMesh
|
||||||
|
|
||||||
|
Description
|
||||||
|
Mesh at a patch created on the fly. The following entried should be used
|
||||||
|
on the field boundary dictionary:
|
||||||
|
|
||||||
|
// New Shell mesh data
|
||||||
|
|
||||||
|
region "regionMesh";
|
||||||
|
extrudeModel linearNormal;
|
||||||
|
linearNormalCoeffs
|
||||||
|
{
|
||||||
|
thickness 40e-6;
|
||||||
|
}
|
||||||
|
nLayers 50;
|
||||||
|
expansionRatio 1;
|
||||||
|
columnCells true;
|
||||||
|
|
||||||
|
// Patch information
|
||||||
|
bottomCoeffs
|
||||||
|
{
|
||||||
|
name "bottom";
|
||||||
|
type mappedWall;
|
||||||
|
sampleMode nearestPatchFace;
|
||||||
|
samplePatch fixedWalls;
|
||||||
|
offsetMode uniform;
|
||||||
|
offset (0 0 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
topCoeffs
|
||||||
|
{
|
||||||
|
name "top";
|
||||||
|
type patch;
|
||||||
|
}
|
||||||
|
|
||||||
|
sideCoeffs
|
||||||
|
{
|
||||||
|
name "side";
|
||||||
|
type empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef extrudePatchMesh_H
|
||||||
|
#define extrudePatchMesh_H
|
||||||
|
|
||||||
|
#include "extrudeModel.H"
|
||||||
|
#include "autoPtr.H"
|
||||||
|
|
||||||
|
#include "fvMesh.H"
|
||||||
|
#include "Time.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class extrudePatchMesh Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class extrudePatchMesh
|
||||||
|
:
|
||||||
|
public fvMesh
|
||||||
|
{
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
//- Enumeration of patch IDs
|
||||||
|
enum patchID
|
||||||
|
{
|
||||||
|
bottomPatchID,
|
||||||
|
topPatchID,
|
||||||
|
sidePatchID
|
||||||
|
};
|
||||||
|
|
||||||
|
//- Const reference to the patch from which this mesh is extruded
|
||||||
|
const polyPatch& extrudedPatch_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("extrudePatchMesh");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from mesh, patch and dictionary
|
||||||
|
extrudePatchMesh
|
||||||
|
(
|
||||||
|
const fvMesh&,
|
||||||
|
const fvPatch&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~extrudePatchMesh();
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
|
||||||
|
// Access functions
|
||||||
|
|
||||||
|
//- Return region mesh
|
||||||
|
const fvMesh& regionMesh() const
|
||||||
|
{
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return bottom patch
|
||||||
|
const polyPatch& bottomPatch() const
|
||||||
|
{
|
||||||
|
return this->boundaryMesh()[bottomPatchID];
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return top patch
|
||||||
|
const polyPatch& topPatch() const
|
||||||
|
{
|
||||||
|
return this->boundaryMesh()[topPatchID];
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return sides patch
|
||||||
|
const polyPatch& sidesPatch() const
|
||||||
|
{
|
||||||
|
return this->boundaryMesh()[sidePatchID];
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Return extruded patch
|
||||||
|
const polyPatch& extrudedPatch() const
|
||||||
|
{
|
||||||
|
return extrudedPatch_;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
|
|
||||||
@ -258,6 +258,7 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
|
|||||||
obr,
|
obr,
|
||||||
(
|
(
|
||||||
obr.readOpt() == IOobject::MUST_READ
|
obr.readOpt() == IOobject::MUST_READ
|
||||||
|
|| obr.readOpt() == IOobject::READ_IF_PRESENT
|
||||||
? IOobject::MUST_READ_IF_MODIFIED
|
? IOobject::MUST_READ_IF_MODIFIED
|
||||||
: obr.readOpt()
|
: obr.readOpt()
|
||||||
),
|
),
|
||||||
@ -372,6 +373,7 @@ Foam::fvSchemes::fvSchemes(const objectRegistry& obr)
|
|||||||
(
|
(
|
||||||
readOpt() == IOobject::MUST_READ
|
readOpt() == IOobject::MUST_READ
|
||||||
|| readOpt() == IOobject::MUST_READ_IF_MODIFIED
|
|| readOpt() == IOobject::MUST_READ_IF_MODIFIED
|
||||||
|
|| (readOpt() == IOobject::READ_IF_PRESENT && headerOk())
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
read(schemesDict());
|
read(schemesDict());
|
||||||
|
|||||||
@ -295,7 +295,7 @@ Foam::fvMesh::fvMesh
|
|||||||
fvSchemes(static_cast<const objectRegistry&>(*this)),
|
fvSchemes(static_cast<const objectRegistry&>(*this)),
|
||||||
fvSolution(static_cast<const objectRegistry&>(*this)),
|
fvSolution(static_cast<const objectRegistry&>(*this)),
|
||||||
data(static_cast<const objectRegistry&>(*this)),
|
data(static_cast<const objectRegistry&>(*this)),
|
||||||
boundary_(*this),
|
boundary_(*this, boundaryMesh()),
|
||||||
lduPtr_(NULL),
|
lduPtr_(NULL),
|
||||||
curTimeIndex_(time().timeIndex()),
|
curTimeIndex_(time().timeIndex()),
|
||||||
VPtr_(NULL),
|
VPtr_(NULL),
|
||||||
|
|||||||
@ -5,5 +5,6 @@ set -x
|
|||||||
|
|
||||||
wmake $makeType autoMesh
|
wmake $makeType autoMesh
|
||||||
wmake $makeType blockMesh
|
wmake $makeType blockMesh
|
||||||
|
wmake $makeType extrudeModel
|
||||||
|
|
||||||
# ----------------------------------------------------------------- end-of-file
|
# ----------------------------------------------------------------- end-of-file
|
||||||
|
|||||||
@ -3,5 +3,4 @@ EXE_INC = \
|
|||||||
-I$(LIB_SRC)/dynamicMesh/lnInclude
|
-I$(LIB_SRC)/dynamicMesh/lnInclude
|
||||||
|
|
||||||
LIB_LIBS = \
|
LIB_LIBS = \
|
||||||
-lmeshTools \
|
-lmeshTools
|
||||||
-ldynamicMesh
|
|
||||||
Reference in New Issue
Block a user