mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: add -tri (triangulate) option to foamToSurface, surfaceMeshConvert
STYLE: drop surface extraction from foamToStarMesh - retain surfZone names when writing surfaces - remove surface extraction/writing from meshWriter since it now duplicates what the meshedSurface class can do.
This commit is contained in:
@ -29,6 +29,9 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
Foam::string Foam::meshWriter::defaultMeshName = "meshExport";
|
||||
|
||||
|
||||
const Foam::cellModel* Foam::meshWriter::unknownModel = Foam::cellModeller::
|
||||
lookup
|
||||
(
|
||||
@ -64,10 +67,6 @@ lookup
|
||||
);
|
||||
|
||||
|
||||
Foam::string Foam::meshWriter::defaultMeshName = "meshExport";
|
||||
Foam::string Foam::meshWriter::defaultSurfaceName = "surfExport";
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::meshWriter::meshWriter(const polyMesh& mesh, const scalar scaleFactor)
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -85,7 +85,7 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class meshWriter Declaration
|
||||
Class meshWriter Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class meshWriter
|
||||
@ -133,13 +133,12 @@ public:
|
||||
|
||||
// Static data members
|
||||
|
||||
//- Specify a default mesh name
|
||||
static string defaultMeshName;
|
||||
static string defaultSurfaceName;
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Ccreate a writer obejct
|
||||
//- Create a writer obejct
|
||||
meshWriter
|
||||
(
|
||||
const polyMesh&,
|
||||
@ -167,26 +166,14 @@ public:
|
||||
writeBoundary_ = false;
|
||||
}
|
||||
|
||||
|
||||
// Write
|
||||
|
||||
//- Write volume mesh
|
||||
// subclass must to supply this method
|
||||
//- Write volume mesh. Subclass must supply this method
|
||||
virtual bool write
|
||||
(
|
||||
const fileName& timeName = fileName::null
|
||||
) const = 0;
|
||||
|
||||
//- Write surface mesh with optional triangulation
|
||||
// subclass could supply this information
|
||||
virtual bool writeSurface
|
||||
(
|
||||
const fileName& timeName = fileName::null,
|
||||
const bool triangulate = false
|
||||
) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -527,201 +527,4 @@ bool Foam::meshWriters::STARCD::write(const fileName& meshName) const
|
||||
}
|
||||
|
||||
|
||||
bool Foam::meshWriters::STARCD::writeSurface
|
||||
(
|
||||
const fileName& meshName,
|
||||
const bool triangulate
|
||||
) const
|
||||
{
|
||||
fileName baseName(meshName);
|
||||
|
||||
if (baseName.empty())
|
||||
{
|
||||
baseName = meshWriter::defaultSurfaceName;
|
||||
|
||||
if
|
||||
(
|
||||
mesh_.time().timeName() != "0"
|
||||
&& mesh_.time().timeName() != "constant"
|
||||
)
|
||||
{
|
||||
baseName += "_" + mesh_.time().timeName();
|
||||
}
|
||||
}
|
||||
|
||||
rmFiles(baseName);
|
||||
|
||||
OFstream celFile(baseName + ".cel");
|
||||
writeHeader(celFile, "CELL");
|
||||
|
||||
Info<< "Writing " << celFile.name() << endl;
|
||||
|
||||
// mesh and patch info
|
||||
const pointField& points = mesh_.points();
|
||||
const labelList& owner = mesh_.faceOwner();
|
||||
const faceList& meshFaces = mesh_.faces();
|
||||
const polyBoundaryMesh& patches = mesh_.boundaryMesh();
|
||||
|
||||
label shapeId = 3; // shell/baffle element
|
||||
label typeId = 4; // 4(shell)
|
||||
|
||||
// remember which points need to be written
|
||||
labelHashSet pointHash;
|
||||
|
||||
// write boundary faces as normal STAR-CD mesh
|
||||
if (triangulate)
|
||||
{
|
||||
// cell Id has no particular meaning - just increment
|
||||
// use the cellTable id from the patch Number
|
||||
label cellId = 0;
|
||||
|
||||
forAll(patches, patchI)
|
||||
{
|
||||
label patchStart = patches[patchI].start();
|
||||
label patchSize = patches[patchI].size();
|
||||
|
||||
label ctableId = patchI + 1;
|
||||
|
||||
for
|
||||
(
|
||||
label faceI = patchStart;
|
||||
faceI < (patchStart + patchSize);
|
||||
++faceI
|
||||
)
|
||||
{
|
||||
const face& f = meshFaces[faceI];
|
||||
|
||||
label nTri = f.nTriangles(points);
|
||||
faceList triFaces;
|
||||
|
||||
// triangulate polygons, but not quads
|
||||
if (nTri <= 2)
|
||||
{
|
||||
triFaces.setSize(1);
|
||||
triFaces[0] = f;
|
||||
}
|
||||
else
|
||||
{
|
||||
triFaces.setSize(nTri);
|
||||
nTri = 0;
|
||||
f.triangles(points, nTri, triFaces);
|
||||
}
|
||||
|
||||
forAll(triFaces, faceI)
|
||||
{
|
||||
const labelList& vrtList = triFaces[faceI];
|
||||
|
||||
celFile
|
||||
<< cellId + 1 << " "
|
||||
<< shapeId << " "
|
||||
<< vrtList.size() << " "
|
||||
<< ctableId << " "
|
||||
<< typeId;
|
||||
|
||||
// must be 3 (triangle) but could be quad
|
||||
label count = 0;
|
||||
forAll(vrtList, i)
|
||||
{
|
||||
if ((count % 8) == 0)
|
||||
{
|
||||
celFile
|
||||
<< nl
|
||||
<< " " << cellId + 1;
|
||||
}
|
||||
// remember which points we'll need to write
|
||||
pointHash.insert(vrtList[i]);
|
||||
celFile << " " << vrtList[i] + 1;
|
||||
count++;
|
||||
}
|
||||
celFile << endl;
|
||||
|
||||
cellId++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// cell Id is the OpenFOAM face Id
|
||||
// use the cellTable id from the face owner
|
||||
// - allows separation of parts
|
||||
forAll(patches, patchI)
|
||||
{
|
||||
label patchStart = patches[patchI].start();
|
||||
label patchSize = patches[patchI].size();
|
||||
|
||||
for
|
||||
(
|
||||
label faceI = patchStart;
|
||||
faceI < (patchStart + patchSize);
|
||||
++faceI
|
||||
)
|
||||
{
|
||||
const labelList& vrtList = meshFaces[faceI];
|
||||
label cellId = faceI;
|
||||
|
||||
celFile
|
||||
<< cellId + 1 << " "
|
||||
<< shapeId << " "
|
||||
<< vrtList.size() << " "
|
||||
<< cellTableId_[owner[faceI]] << " "
|
||||
<< typeId;
|
||||
|
||||
// likely <= 8 vertices, but prevent overrun anyhow
|
||||
label count = 0;
|
||||
forAll(vrtList, i)
|
||||
{
|
||||
if ((count % 8) == 0)
|
||||
{
|
||||
celFile
|
||||
<< nl
|
||||
<< " " << cellId + 1;
|
||||
}
|
||||
// remember which points we'll need to write
|
||||
pointHash.insert(vrtList[i]);
|
||||
celFile << " " << vrtList[i] + 1;
|
||||
count++;
|
||||
}
|
||||
celFile << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
OFstream vrtFile(baseName + ".vrt");
|
||||
writeHeader(vrtFile, "VERTEX");
|
||||
|
||||
vrtFile.precision(10);
|
||||
vrtFile.setf(std::ios::showpoint); // force decimal point for Fortran
|
||||
|
||||
Info<< "Writing " << vrtFile.name() << endl;
|
||||
|
||||
// build sorted table of contents
|
||||
SortableList<label> toc(pointHash.size());
|
||||
{
|
||||
label i = 0;
|
||||
forAllConstIter(labelHashSet, pointHash, iter)
|
||||
{
|
||||
toc[i++] = iter.key();
|
||||
}
|
||||
}
|
||||
toc.sort();
|
||||
toc.shrink();
|
||||
pointHash.clear();
|
||||
|
||||
// write points in sorted order
|
||||
forAll(toc, i)
|
||||
{
|
||||
label vrtId = toc[i];
|
||||
vrtFile
|
||||
<< vrtId + 1
|
||||
<< " " << scaleFactor_ * points[vrtId].x()
|
||||
<< " " << scaleFactor_ * points[vrtId].y()
|
||||
<< " " << scaleFactor_ * points[vrtId].z()
|
||||
<< endl;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -28,11 +28,6 @@ Class
|
||||
Description
|
||||
Writes polyMesh in pro-STAR (v4) bnd/cel/vrt format
|
||||
|
||||
Alternatively, extracts the surface of the FOAM mesh into
|
||||
pro-STAR (v4) .cel/.vrt/ format.
|
||||
This can be useful, for example, for surface morphing in an external
|
||||
package.
|
||||
|
||||
The cellTableId and cellTable information are used (if available).
|
||||
Otherwise the cellZones are used (if available).
|
||||
|
||||
@ -131,12 +126,6 @@ public:
|
||||
const fileName& meshName = fileName::null
|
||||
) const;
|
||||
|
||||
//- Write surface mesh with optional triangulation
|
||||
virtual bool writeSurface
|
||||
(
|
||||
const fileName& meshName = fileName::null,
|
||||
const bool triangulate = false
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user