mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of /home/dm4/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -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) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -383,12 +383,7 @@ int main(int argc, char *argv[])
|
|||||||
// Determine extrudePatch normal
|
// Determine extrudePatch normal
|
||||||
pointField extrudePatchPointNormals
|
pointField extrudePatchPointNormals
|
||||||
(
|
(
|
||||||
PatchTools::pointNormals //calcNormals
|
PatchTools::pointNormals(mesh, extrudePatch)
|
||||||
(
|
|
||||||
mesh,
|
|
||||||
extrudePatch,
|
|
||||||
meshFaces
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
@ -629,12 +624,13 @@ int main(int argc, char *argv[])
|
|||||||
const labelListList& layerFaces = layerExtrude.layerFaces();
|
const labelListList& layerFaces = layerExtrude.layerFaces();
|
||||||
backPatchFaces.setSize(layerFaces.size());
|
backPatchFaces.setSize(layerFaces.size());
|
||||||
frontPatchFaces.setSize(layerFaces.size());
|
frontPatchFaces.setSize(layerFaces.size());
|
||||||
forAll(backPatchFaces, i)
|
forAll(backPatchFaces, patchFaceI)
|
||||||
{
|
{
|
||||||
backPatchFaces[i] = layerFaces[i].first();
|
backPatchFaces[patchFaceI] = layerFaces[patchFaceI].first();
|
||||||
frontPatchFaces[i] = layerFaces[i].last();
|
frontPatchFaces[patchFaceI] = layerFaces[patchFaceI].last();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Create dummy fvSchemes, fvSolution
|
// Create dummy fvSchemes, fvSolution
|
||||||
createDummyFvMeshFiles(mesh, regionDir);
|
createDummyFvMeshFiles(mesh, regionDir);
|
||||||
|
|
||||||
@ -654,6 +650,13 @@ int main(int argc, char *argv[])
|
|||||||
mesh
|
mesh
|
||||||
);
|
);
|
||||||
|
|
||||||
|
layerExtrude.updateMesh
|
||||||
|
(
|
||||||
|
map(),
|
||||||
|
identity(extrudePatch.size()),
|
||||||
|
identity(extrudePatch.nPoints())
|
||||||
|
);
|
||||||
|
|
||||||
// Calculate face labels for front and back.
|
// Calculate face labels for front and back.
|
||||||
frontPatchFaces = renumber
|
frontPatchFaces = renumber
|
||||||
(
|
(
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
EXE_INC = \
|
EXE_INC = \
|
||||||
|
-I$(LIB_SRC)/surfMesh/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
|
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude
|
||||||
|
|
||||||
EXE_LIBS = \
|
EXE_LIBS = \
|
||||||
|
-lsurfMesh \
|
||||||
-lfiniteVolume \
|
-lfiniteVolume \
|
||||||
-lmeshTools \
|
-lmeshTools \
|
||||||
-ldynamicMesh \
|
-ldynamicMesh \
|
||||||
|
|||||||
@ -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) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -133,6 +133,8 @@ Notes:
|
|||||||
#include "pointFields.H"
|
#include "pointFields.H"
|
||||||
//#include "ReadFields.H"
|
//#include "ReadFields.H"
|
||||||
#include "fvMeshTools.H"
|
#include "fvMeshTools.H"
|
||||||
|
#include "OBJstream.H"
|
||||||
|
#include "PatchTools.H"
|
||||||
|
|
||||||
using namespace Foam;
|
using namespace Foam;
|
||||||
|
|
||||||
@ -1233,6 +1235,252 @@ void setCouplingInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Extrude and write geometric properties
|
||||||
|
void extrudeGeometricProperties
|
||||||
|
(
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const primitiveFacePatch& extrudePatch,
|
||||||
|
const createShellMesh& extruder,
|
||||||
|
const polyMesh& regionMesh,
|
||||||
|
const extrudeModel& model
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const pointIOField patchFaceCentres
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"patchFaceCentres",
|
||||||
|
mesh.pointsInstance(),
|
||||||
|
mesh.meshSubDir,
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
const pointIOField patchEdgeCentres
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"patchEdgeCentres",
|
||||||
|
mesh.pointsInstance(),
|
||||||
|
mesh.meshSubDir,
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
//forAll(extrudePatch.edges(), edgeI)
|
||||||
|
//{
|
||||||
|
// const edge& e = extrudePatch.edges()[edgeI];
|
||||||
|
// Pout<< "Edge:" << e.centre(extrudePatch.localPoints()) << nl
|
||||||
|
// << "read:" << patchEdgeCentres[edgeI]
|
||||||
|
// << endl;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
// Determine edge normals on original patch
|
||||||
|
labelList patchEdges;
|
||||||
|
labelList coupledEdges;
|
||||||
|
PackedBoolList sameEdgeOrientation;
|
||||||
|
PatchTools::matchEdges
|
||||||
|
(
|
||||||
|
extrudePatch,
|
||||||
|
mesh.globalData().coupledPatch(),
|
||||||
|
patchEdges,
|
||||||
|
coupledEdges,
|
||||||
|
sameEdgeOrientation
|
||||||
|
);
|
||||||
|
|
||||||
|
pointField patchEdgeNormals
|
||||||
|
(
|
||||||
|
PatchTools::edgeNormals
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
extrudePatch,
|
||||||
|
patchEdges,
|
||||||
|
coupledEdges
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
pointIOField faceCentres
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"faceCentres",
|
||||||
|
regionMesh.pointsInstance(),
|
||||||
|
regionMesh.meshSubDir,
|
||||||
|
regionMesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
regionMesh.nFaces()
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Work out layers. Guaranteed in columns so no fancy parallel bits.
|
||||||
|
|
||||||
|
|
||||||
|
forAll(extruder.faceToFaceMap(), faceI)
|
||||||
|
{
|
||||||
|
if (extruder.faceToFaceMap()[faceI] != 0)
|
||||||
|
{
|
||||||
|
// 'horizontal' face
|
||||||
|
label patchFaceI = mag(extruder.faceToFaceMap()[faceI])-1;
|
||||||
|
|
||||||
|
label cellI = regionMesh.faceOwner()[faceI];
|
||||||
|
if (regionMesh.isInternalFace(faceI))
|
||||||
|
{
|
||||||
|
cellI = max(cellI, regionMesh.faceNeighbour()[faceI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate layer from cell numbering (see createShellMesh)
|
||||||
|
label layerI = (cellI % model.nLayers());
|
||||||
|
|
||||||
|
if
|
||||||
|
(
|
||||||
|
!regionMesh.isInternalFace(faceI)
|
||||||
|
&& extruder.faceToFaceMap()[faceI] > 0
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// Top face
|
||||||
|
layerI++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Recalculate based on extrusion model
|
||||||
|
faceCentres[faceI] = model
|
||||||
|
(
|
||||||
|
patchFaceCentres[patchFaceI],
|
||||||
|
extrudePatch.faceNormals()[patchFaceI],
|
||||||
|
layerI
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 'vertical face
|
||||||
|
label patchEdgeI = extruder.faceToEdgeMap()[faceI];
|
||||||
|
label layerI =
|
||||||
|
(
|
||||||
|
regionMesh.faceOwner()[faceI]
|
||||||
|
% model.nLayers()
|
||||||
|
);
|
||||||
|
|
||||||
|
// Extrude patch edge centre to this layer
|
||||||
|
point pt0 = model
|
||||||
|
(
|
||||||
|
patchEdgeCentres[patchEdgeI],
|
||||||
|
patchEdgeNormals[patchEdgeI],
|
||||||
|
layerI
|
||||||
|
);
|
||||||
|
// Extrude patch edge centre to next layer
|
||||||
|
point pt1 = model
|
||||||
|
(
|
||||||
|
patchEdgeCentres[patchEdgeI],
|
||||||
|
patchEdgeNormals[patchEdgeI],
|
||||||
|
layerI+1
|
||||||
|
);
|
||||||
|
|
||||||
|
// Interpolate
|
||||||
|
faceCentres[faceI] = 0.5*(pt0+pt1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pointIOField cellCentres
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"cellCentres",
|
||||||
|
regionMesh.pointsInstance(),
|
||||||
|
regionMesh.meshSubDir,
|
||||||
|
regionMesh,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
regionMesh.nCells()
|
||||||
|
);
|
||||||
|
|
||||||
|
forAll(extruder.cellToFaceMap(), cellI)
|
||||||
|
{
|
||||||
|
label patchFaceI = extruder.cellToFaceMap()[cellI];
|
||||||
|
|
||||||
|
// Calculate layer from cell numbering (see createShellMesh)
|
||||||
|
label layerI = (cellI % model.nLayers());
|
||||||
|
|
||||||
|
// Recalculate based on extrusion model
|
||||||
|
point pt0 = model
|
||||||
|
(
|
||||||
|
patchFaceCentres[patchFaceI],
|
||||||
|
extrudePatch.faceNormals()[patchFaceI],
|
||||||
|
layerI
|
||||||
|
);
|
||||||
|
point pt1 = model
|
||||||
|
(
|
||||||
|
patchFaceCentres[patchFaceI],
|
||||||
|
extrudePatch.faceNormals()[patchFaceI],
|
||||||
|
layerI+1
|
||||||
|
);
|
||||||
|
|
||||||
|
// Interpolate
|
||||||
|
cellCentres[cellI] = 0.5*(pt0+pt1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Bit of checking
|
||||||
|
if (false)
|
||||||
|
{
|
||||||
|
OBJstream faceStr(regionMesh.time().path()/"faceCentres.obj");
|
||||||
|
OBJstream cellStr(regionMesh.time().path()/"cellCentres.obj");
|
||||||
|
|
||||||
|
forAll(faceCentres, faceI)
|
||||||
|
{
|
||||||
|
Pout<< "Model :" << faceCentres[faceI] << endl
|
||||||
|
<< "regionMesh:" << regionMesh.faceCentres()[faceI] << endl;
|
||||||
|
faceStr.write
|
||||||
|
(
|
||||||
|
linePointRef
|
||||||
|
(
|
||||||
|
faceCentres[faceI],
|
||||||
|
regionMesh.faceCentres()[faceI]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
forAll(cellCentres, cellI)
|
||||||
|
{
|
||||||
|
Pout<< "Model :" << cellCentres[cellI] << endl
|
||||||
|
<< "regionMesh:" << regionMesh.cellCentres()[cellI] << endl;
|
||||||
|
cellStr.write
|
||||||
|
(
|
||||||
|
linePointRef
|
||||||
|
(
|
||||||
|
cellCentres[cellI],
|
||||||
|
regionMesh.cellCentres()[cellI]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Info<< "Writing geometric properties for mesh " << regionMesh.name()
|
||||||
|
<< " to " << regionMesh.pointsInstance() << nl
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
bool ok = faceCentres.write() && cellCentres.write();
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
FatalErrorIn("extrudeGeometricProperties(..)")
|
||||||
|
<< "Failed writing " << faceCentres.objectPath()
|
||||||
|
<< " and " << cellCentres.objectPath()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Main program:
|
// Main program:
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
@ -2393,6 +2641,36 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// See if we need to extrude coordinates as well
|
||||||
|
{
|
||||||
|
autoPtr<pointIOField> patchFaceCentresPtr;
|
||||||
|
|
||||||
|
IOobject io
|
||||||
|
(
|
||||||
|
"patchFaceCentres",
|
||||||
|
mesh.pointsInstance(),
|
||||||
|
mesh.meshSubDir,
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ
|
||||||
|
);
|
||||||
|
if (io.headerOk())
|
||||||
|
{
|
||||||
|
// Read patchFaceCentres and patchEdgeCentres
|
||||||
|
Info<< "Reading patch face,edge centres : "
|
||||||
|
<< io.name() << " and patchEdgeCentres" << endl;
|
||||||
|
|
||||||
|
extrudeGeometricProperties
|
||||||
|
(
|
||||||
|
mesh,
|
||||||
|
extrudePatch,
|
||||||
|
extruder,
|
||||||
|
regionMesh,
|
||||||
|
model()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Insert baffles into original mesh
|
// Insert baffles into original mesh
|
||||||
|
|||||||
@ -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) 2011-2012 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -2052,6 +2052,9 @@ void Foam::polyTopoChange::reorderCoupledFaces
|
|||||||
|
|
||||||
if (anyChanged)
|
if (anyChanged)
|
||||||
{
|
{
|
||||||
|
// Reorder faces according to oldToNew.
|
||||||
|
reorderCompactFaces(oldToNew.size(), oldToNew);
|
||||||
|
|
||||||
// Rotate faces (rotation is already in new face indices).
|
// Rotate faces (rotation is already in new face indices).
|
||||||
forAll(rotation, faceI)
|
forAll(rotation, faceI)
|
||||||
{
|
{
|
||||||
@ -2060,9 +2063,6 @@ void Foam::polyTopoChange::reorderCoupledFaces
|
|||||||
inplaceRotateList<List, label>(faces_[faceI], rotation[faceI]);
|
inplaceRotateList<List, label>(faces_[faceI], rotation[faceI]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reorder faces according to oldToNew.
|
|
||||||
reorderCompactFaces(oldToNew.size(), oldToNew);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user