diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C index 403e6d6d1b..395225ab42 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C @@ -206,7 +206,7 @@ void Foam::nastranSurfaceWriter::writeGeometry ( Ostream& os, const meshedSurf& surf, - List>& decomposedFaces + List& decomposedFaces ) const { const pointField& points = surf.points(); @@ -224,9 +224,9 @@ void Foam::nastranSurfaceWriter::writeGeometry writeCoord(os, points[pointi], pointi); } - // Write faces + // Write faces, with on-the-fly decomposition (triangulation) decomposedFaces.clear(); - decomposedFaces.setSize(faces.size()); + decomposedFaces.resize(faces.size()); os << "$" << nl << "$ Faces" << nl @@ -236,30 +236,34 @@ void Foam::nastranSurfaceWriter::writeGeometry forAll(faces, facei) { const face& f = faces[facei]; + faceList& decomp = decomposedFaces[facei]; + // 1-offset for PID const label PID = 1 + (facei < zones.size() ? zones[facei] : 0); if (f.size() == 3) { writeFace(os, "CTRIA3", f, ++nFace, PID); - decomposedFaces[facei].append(f); + decomp.resize(1); + decomp[0] = f; } else if (f.size() == 4) { writeFace(os, "CQUAD4", f, ++nFace, PID); - decomposedFaces[facei].append(f); + decomp.resize(1); + decomp[0] = f; } else { // Decompose poly face into tris - label nTri = 0; - faceList triFaces; - f.triangles(points, nTri, triFaces); + decomp.resize(f.nTriangles()); - forAll(triFaces, trii) + label nTri = 0; + f.triangles(points, nTri, decomp); + + for (const face& f2 : decomp) { - writeFace(os, "CTRIA3", triFaces[trii], ++nFace, PID); - decomposedFaces[facei].append(triFaces[trii]); + writeFace(os, "CTRIA3", f2, ++nFace, PID); } } } @@ -392,7 +396,7 @@ Foam::fileName Foam::nastranSurfaceWriter::write << "$" << nl << "BEGIN BULK" << nl; - List> decomposedFaces; + List decomposedFaces; writeGeometry(os, surf, decomposedFaces); writeFooter(os, surf) diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H index 57dcfaac0b..c002fe40fe 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H @@ -80,7 +80,7 @@ Description SourceFiles nastranSurfaceWriter.C - nastranSurfaceWriterTemplates.C + nastranSurfaceWriterImpl.C \*---------------------------------------------------------------------------*/ @@ -161,7 +161,7 @@ private: ( Ostream& os, const meshedSurf& surf, - List>& decomposedFaces + List& decomposedFaces ) const; //- Write the formatted keyword to the output stream diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterImpl.C b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterImpl.C index 479fb5ac24..6a505e3352 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterImpl.C +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterImpl.C @@ -190,7 +190,7 @@ Foam::fileName Foam::nastranSurfaceWriter::writeTemplate << "$" << nl << "BEGIN BULK" << nl; - List> decomposedFaces; + List decomposedFaces; writeGeometry(os, surf, decomposedFaces); os << "$" << nl @@ -201,7 +201,7 @@ Foam::fileName Foam::nastranSurfaceWriter::writeTemplate if (isNodeValues) { - for (const DynamicList& dFaces : decomposedFaces) + for (const faceList& dFaces : decomposedFaces) { for (const face& f : dFaces) { @@ -219,12 +219,16 @@ Foam::fileName Foam::nastranSurfaceWriter::writeTemplate } else { - for (const DynamicList& dFaces : decomposedFaces) + auto valIter = values.cbegin(); + + for (const faceList& dFaces : decomposedFaces) { forAll(dFaces, facei) { - writeFaceValue(os, format, values[facei], ++elemId); + writeFaceValue(os, format, *valIter, ++elemId); } + + ++valIter; } }