Go to the documentation of this file.
41 const UList<Face>& faceLst
46 if (!faceTraits<Face>::isTri())
48 for (
const auto&
f : faceLst)
60 <<
"Surface has " << nNonTris <<
'/' << faceLst.size()
61 <<
" non-triangulated faces - not writing!" <<
endl;
96 <<
"Cannot read file " << filename <<
nl
101 string line = this->getLineNoComment(is);
114 auto& pointLst = this->storedPoints();
115 auto& faceLst = this->storedFaces();
116 auto& zoneIds = this->storedZoneIds();
119 faceLst.resize(nElems);
120 zoneIds.resize(nElems);
126 line = this->getLineNoComment(is);
133 pointLst[pointi] =
point(
x,
y, z);
141 line = this->getLineNoComment(is);
147 edges[edgei] =
edge(beg - 1,
end - 1);
155 label e0Label, e1Label, e2Label;
158 line = this->getLineNoComment(is);
162 >> e0Label >> e1Label >> e2Label;
169 if (!lineStream.
bad())
184 const edge& e0 = edges[e0Label - 1];
185 const edge& e1 = edges[e1Label - 1];
186 const edge& e2 = edges[e2Label - 1];
192 <<
"Edges 0 and 1 of triangle " << facei
193 <<
" do not share a point.\n"
194 <<
" edge0:" << e0 <<
nl
206 <<
"Edges 1 and 2 of triangle " << facei
207 <<
" do not share a point.\n"
208 <<
" edge1:" << e1 <<
nl
215 if (common12 != e1Far || e2Far != e0Far)
218 <<
"Edges of triangle " << facei
219 <<
" reference more than three points.\n"
220 <<
" edge0:" << e0 <<
nl
221 <<
" edge1:" << e1 <<
nl
222 <<
" edge2:" << e2 <<
nl
226 faceLst[facei] = Face{e0Far, common01, e1Far};
227 zoneIds[facei] = zoneI;
241 this->storedZoneToc().transfer(newZones);
242 this->addZonesToFaces();
258 streamOpt.
format(IOstream::ASCII);
267 : surfaceFormatsCore::oneZone(faceLst)
270 checkIfTriangulated(faceLst);
276 <<
"Cannot write file " << filename <<
nl
282 os <<
"# GTS file" <<
nl
287 os <<
"# " << zonei <<
" "
288 << zones[zonei].name() <<
nl;
292 os <<
"# nPoints nEdges nTriangles" <<
nl
293 << pointLst.
size() <<
' ' << surf.nEdges() <<
' '
298 for (
const point& pt : pointLst)
300 os << pt.x() <<
' ' << pt.y() <<
' ' << pt.z() <<
nl;
307 const labelList& meshPts = surf.meshPoints();
309 for (
const edge&
e : es)
311 os << meshPts[
e.start()] + 1 <<
' '
312 << meshPts[
e.end()] + 1 <<
nl;
323 for (label nLocal =
zone.size(); nLocal--; ++faceIndex)
325 const label facei = faceIndex;
329 os << fEdges[0] + 1 <<
' '
330 << fEdges[1] + 1 <<
' '
331 << fEdges[2] + 1 <<
' '
350 streamOpt.
format(IOstream::ASCII);
357 checkIfTriangulated(faceLst);
363 <<
"Cannot write file " << filename <<
nl
369 os <<
"# GTS file" <<
nl
374 os <<
"# " << zonei <<
" "
375 << zoneToc[zonei].name() <<
nl;
379 os <<
"# nPoints nEdges nTriangles" <<
nl
380 << pointLst.
size() <<
' ' << surf.nEdges() <<
' '
385 for (
const point& pt : pointLst)
387 os << pt.x() <<
' ' << pt.y() <<
' ' << pt.z() <<
nl;
394 const labelList& meshPts = surf.meshPoints();
396 for (
const edge&
e : es)
398 os << meshPts[
e.start()] + 1 <<
' '
399 << meshPts[
e.end()] + 1 <<
nl;
409 os << fEdges[0] + 1 <<
' '
410 << fEdges[1] + 1 <<
' '
411 << fEdges[2] + 1 <<
' '
412 << zoneIds[facei] <<
nl;
const surfZoneList & surfZones() const
Const access to the surface zones.
label commonVertex(const edge &other) const
Return vertex common with other edge or -1 on failure.
A class for handling file names.
Input from file stream, using an ISstream.
An edge is a list of two point labels. The functionality it provides supports the discretisation on a...
Base class for mesh zones.
streamFormat format() const noexcept
Get the current stream format.
const List< Face > & surfFaces() const
Return const access to the faces.
Input/output from string buffers.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Identifies a surface patch/zone by name, patch index and geometricType.
#define forAll(list, i)
Loop across all elements in list.
virtual const labelList & zoneIds() const
Return const access to the zone ids.
A surface geometry mesh, in which the surface zone information is conveyed by the 'zoneId' associated...
The IOstreamOption is a simple container for options an IOstream can normally have.
static const word defaultName("coeffs")
const List< surfZoneIdentifier > & zoneToc() const
Return const access to the zone table-of-contents.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
bool bad() const
Return true if stream is corrupted.
constexpr auto end(C &c) -> decltype(c.end())
Return iterator to the end of the container c.
label size() const
The surface size is the number of faces.
Input from string buffer, using a ISstream.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Output to file stream, using an OSstream.
label otherVertex(const label pointLabel) const
Given the point label for one vertex, return the other one.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
A surface zone on a MeshedSurface.
A 1D vector of objects of type <T>, where the size of the vector is known and can be used for subscri...
const dimensionedScalar e
Elementary charge.
void size(const label n) noexcept
Override size to be inconsistent with allocated storage.
vector point
Point is a vector.
bool good() const
Return true if next operation might succeed.
A surface geometry mesh with zone information, not to be confused with the similarly named surfaceMes...
label size() const
The surface size is the number of faces.