40 namespace surfaceWriters
59 Foam::Ostream& Foam::surfaceWriters::nastranWriter::writeKeyword
69 void Foam::surfaceWriters::nastranWriter::writeCoord
87 writeKeyword(os,
"GRID") << separator_;
89 os.setf(std::ios_base::right);
91 writeValue(os, pointI+1) << separator_;
92 writeValue(os,
"") << separator_;
93 writeValue(os, pt.x()) << separator_;
94 writeValue(os, pt.y()) << separator_;
98 case fieldFormat::SHORT :
100 os <<
setw(8) << pt.z() <<
nl;
101 os.unsetf(std::ios_base::right);
105 case fieldFormat::LONG :
108 os.unsetf(std::ios_base::right);
109 writeKeyword(os,
"");
110 os.setf(std::ios_base::right);
112 writeValue(os, pt.z()) <<
nl;
116 case fieldFormat::FREE :
118 writeValue(os, pt.z()) <<
nl;
123 os.unsetf(std::ios_base::right);
127 void Foam::surfaceWriters::nastranWriter::writeFace
130 const word& faceType,
150 writeKeyword(os, faceType) << separator_;
152 os.setf(std::ios_base::right);
154 writeValue(os, nFace) << separator_;
157 switch (writeFormat_)
159 case fieldFormat::SHORT :
161 for (
const label pointi : facePts)
163 writeValue(os, pointi + 1);
169 case fieldFormat::LONG :
173 writeValue(os, facePts[i] + 1);
177 os.unsetf(std::ios_base::right);
178 writeKeyword(os,
"");
179 os.setf(std::ios_base::right);
186 case fieldFormat::FREE :
188 for (
const label pointi : facePts)
191 writeValue(os, pointi + 1);
199 os.unsetf(std::ios_base::right);
203 void Foam::surfaceWriters::nastranWriter::writeGeometry
206 const meshedSurf& surf,
207 List<DynamicList<face>>& decomposedFaces
211 const faceList& faces = surf.faces();
222 writeCoord(os,
points[pointi], pointi);
226 decomposedFaces.clear();
227 decomposedFaces.setSize(faces.size());
236 const face&
f = faces[facei];
238 const label PID = 1 + (facei < zones.size() ? zones[facei] : 0);
242 writeFace(os,
"CTRIA3",
f, ++nFace, PID);
243 decomposedFaces[facei].append(
f);
245 else if (
f.size() == 4)
247 writeFace(os,
"CQUAD4",
f, ++nFace, PID);
248 decomposedFaces[facei].append(
f);
255 f.triangles(
points, nTri, triFaces);
259 writeFace(os,
"CTRIA3", triFaces[trii], ++nFace, PID);
260 decomposedFaces[facei].append(triFaces[trii]);
267 Foam::Ostream& Foam::surfaceWriters::nastranWriter::writeFooter
270 const meshedSurf& surf
276 if (pidsUsed.empty())
278 pidsUsed.setSize(1,
Zero);
281 for (
auto pid : pidsUsed)
283 writeKeyword(os,
"PSHELL") << separator_;
284 writeValue(os,
pid+1);
286 for (
label i = 0; i < 7; ++i)
300 writeKeyword(os,
"MAT1") << separator_;
303 for (
label i = 0; i < 7; ++i)
346 if (writeFormat_ == fieldFormat::FREE)
376 open(surf, outputPath, parallel);
391 open(
points, faces, outputPath, parallel);
404 if (useTimeDir() && !
timeName().empty())
407 outputFile = outputPath_.
path() /
timeName() / outputPath_.name();
409 outputFile.
ext(
"nas");
413 Info<<
"Writing nastran geometry to " << outputFile <<
endl;
429 os <<
"TITLE=OpenFOAM " << outputPath_.
name()
432 <<
"BEGIN BULK" <<
nl;
435 writeGeometry(os, surf, decomposedFaces);
437 writeFooter(os, surf)