diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C index 3a67a8dd23bfc4786e6abff7845ce974ee233451..436457c4694bb2c717822f2ef418c9c9188d8799 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.C @@ -87,14 +87,13 @@ void Foam::nastranSurfaceWriter::formatOS(OFstream& os) const void Foam::nastranSurfaceWriter::writeCoord ( const point& p, - label& nPoint, - label& continuation, - Ostream& os + const label pointI, + OFstream& os ) const { // Fixed short/long formats: // 1 GRID - // 2 ID : point ID + // 2 ID : point ID - requires starting index of 1 // 3 CP : co-ordinate system ID (blank) // 4 X1 : point x cp-ordinate // 5 X2 : point x cp-ordinate @@ -107,35 +106,46 @@ void Foam::nastranSurfaceWriter::writeCoord { case wfShort: { - os << setw(8) << "GRID" - << setw(8) << ++nPoint + os.setf(ios_base::left); + os << setw(8) << "GRID"; + os.unsetf(ios_base::left); + os.setf(ios_base::right); + os << setw(8) << pointI + 1 << " " << setw(8) << p.x() << setw(8) << p.y() << setw(8) << p.z() << nl; + os.unsetf(ios_base::right); break; } case wfLong: { - os << setw(8) << "GRID*" - << setw(16) << ++nPoint + os.setf(ios_base::left); + os << setw(8) << "GRID*"; + os.unsetf(ios_base::left); + os.setf(ios_base::right); + os << setw(16) << pointI + 1 << " " << setw(16) << p.x() << setw(16) << p.y() - << setw(8) << ++continuation - << nl - << setw(8) << continuation - << setw(16) << p.z() << nl; + os.unsetf(ios_base::right); + os.setf(ios_base::left); + os << setw(8) << "*"; + os.unsetf(ios_base::left); + os.setf(ios_base::right); + os << setw(16) << p.z() + << nl; + os.unsetf(ios_base::right); break; } case wfFree: { os << "GRID" - << ',' << ++nPoint + << ',' << pointI + 1 << ',' << ',' << p.x() << ',' << p.y() @@ -163,7 +173,7 @@ void Foam::nastranSurfaceWriter::writeFace const word& faceType, const labelList& facePts, label& nFace, - Ostream& os + OFstream& os ) const { // Only valid surface elements are CTRIA3 and CQUAD4 @@ -172,7 +182,7 @@ void Foam::nastranSurfaceWriter::writeFace // 1 CQUAD4 // 2 EID : element ID // 3 PID : property element ID; default = EID (blank) - // 4 G1 : grid point index + // 4 G1 : grid point index - requires starting index of 1 // 5 G2 : grid point index // 6 G3 : grid point index // 7 G4 : grid point index @@ -183,18 +193,49 @@ void Foam::nastranSurfaceWriter::writeFace switch (writeFormat_) { case wfShort: - case wfLong: { - os << setw(8) << faceType - << setw(8) << ++nFace + os.setf(ios_base::left); + os << setw(8) << faceType; + os.unsetf(ios_base::left); + os.setf(ios_base::right); + os << setw(8) << nFace++ << " "; forAll(facePts, i) { - os << setw(8) << facePts[i]; + os << setw(8) << facePts[i] + 1; + } + + os << nl; + os.unsetf(ios_base::right); + + break; + } + case wfLong: + { + os.setf(ios_base::left); + os << setw(8) << word(faceType + "*"); + os.unsetf(ios_base::left); + os.setf(ios_base::right); + os << setw(16) << nFace++ + << " "; + + forAll(facePts, i) + { + os << setw(16) << facePts[i] + 1; + if (i == 1) + { + os << nl; + os.unsetf(ios_base::right); + os.setf(ios_base::left); + os << setw(8) << "*"; + os.unsetf(ios_base::left); + os.setf(ios_base::right); + } } os << nl; + os.unsetf(ios_base::right); break; } @@ -205,7 +246,7 @@ void Foam::nastranSurfaceWriter::writeFace forAll(facePts, i) { - os << ',' << facePts[i]; + os << ',' << facePts[i] + 1; } os << nl; @@ -235,7 +276,7 @@ void Foam::nastranSurfaceWriter::writeGeometry const pointField& points, const faceList& faces, List<DynamicList<face> >& decomposedFaces, - Ostream& os + OFstream& os ) const { // write points @@ -244,12 +285,9 @@ void Foam::nastranSurfaceWriter::writeGeometry << "$ Points" << nl << "$" << nl; - label nPoint = 0; - label continuation = 0; - forAll(points, pointI) { - writeCoord(points[pointI], nPoint, continuation, os); + writeCoord(points[pointI], pointI, os); } @@ -259,7 +297,7 @@ void Foam::nastranSurfaceWriter::writeGeometry << "$ Faces" << nl << "$" << nl; - label nFace = 0; + label nFace = 1; forAll(faces, faceI) { @@ -352,7 +390,7 @@ void Foam::nastranSurfaceWriter::write Info<< "Writing nastran file to " << os.name() << endl; } - os << "TITLE=OpeNFOAM " << surfaceName.c_str() << " mesh" << nl + os << "TITLE=OpenFOAM " << surfaceName.c_str() << " mesh" << nl << "$" << nl << "BEGIN BULK" << nl; diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H index 3667173d65b4da3104e7a98fd02d85a1e3c866d3..4e968ee55f4c53c3c06377590e8a3df73f5c1c3f 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriter.H @@ -85,9 +85,8 @@ private: void writeCoord ( const point& p, - label& nPoint, - label& continuation, - Ostream& os + const label pointI, + OFstream& os ) const; //- Write a face element (CTRIA3 or CQUAD4) @@ -96,7 +95,7 @@ private: const word& faceType, const labelList& facePts, label& nFace, - Ostream& os + OFstream& os ) const; //- Main driver to write the surface mesh geometry @@ -105,7 +104,7 @@ private: const pointField& points, const faceList& faces, List<DynamicList<face> >& decomposedFaces, - Ostream& os + OFstream& os ) const; //- Write a face-based value @@ -115,7 +114,7 @@ private: const word& nasFieldName, const Type& value, const label EID, - Ostream& os + OFstream& os ) const; //- Templated write operation diff --git a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C index a393a5968b37cc0f3befa8e70898ec0528ea6030..e01429fc88cbea5018d7f5bcb128927df49341ea 100644 --- a/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C +++ b/src/sampling/sampledSurface/writers/nastran/nastranSurfaceWriterTemplates.C @@ -34,7 +34,7 @@ void Foam::nastranSurfaceWriter::writeFaceValue const word& nasFieldName, const Type& value, const label EID, - Ostream& os + OFstream& os ) const { // Fixed short/long formats: @@ -43,26 +43,50 @@ void Foam::nastranSurfaceWriter::writeFaceValue // 3 EID : element ID // 4 onwards: load values - label SID = 0; + label SID = 1; - label w = 16; switch (writeFormat_) { case wfShort: { - w = 8; + os.setf(ios_base::left); + os << setw(8) << nasFieldName; + os.unsetf(ios_base::left); + os.setf(ios_base::right); + os << setw(8) << SID + << setw(8) << EID; + + for (direction dirI = 0; dirI < pTraits<Type>::nComponents; dirI++) + { + os << setw(8) << component(value, dirI); + } + + os.unsetf(ios_base::right); + + break; } case wfLong: { - os << setw(8) << nasFieldName - << setw(8) << SID - << setw(8) << EID; + os.setf(ios_base::left); + os << setw(8) << word(nasFieldName + "*"); + os.unsetf(ios_base::left); + os.setf(ios_base::right); + os << setw(16) << SID + << setw(16) << EID; for (direction dirI = 0; dirI < pTraits<Type>::nComponents; dirI++) { - os << setw(w) << component(value, dirI); + os << setw(16) << component(value, dirI); } + os.unsetf(ios_base::right); + + os << nl; + + os.setf(ios_base::left); + os << '*'; + os.unsetf(ios_base::left); + break; } case wfFree: