// Reads points section. Read region as well? void readPoints ( IFstream& is, DynamicList<point>& points, // coordinates DynamicList<label>& unvPointID // unv index ) { Sout<< "Starting reading points at line " << is.lineNumber() << '.' << endl; static bool hasWarned = false; while (true) { string line; is.getLine(line); label pointI = readLabel(IStringStream(line.substr(0, 10))()); if (pointI == -1) { break; } else if (pointI != points.size()+1 && !hasWarned) { hasWarned = true; IOWarningIn ( "readPoints(IFstream&, label&, DynamicList<point>" ", DynamicList<label>&)", is ) << "Points not in order starting at point " << pointI //<< " at line " << is.lineNumber() //<< abort(FatalError); << endl; } point pt; is.getLine(line); pt[0] = readUnvScalar(line.substr(0, 25)); pt[1] = readUnvScalar(line.substr(25, 25)); pt[2] = readUnvScalar(line.substr(50, 25)); unvPointID.append(pointI); points.append(pt); } points.shrink(); unvPointID.shrink(); Sout<< "Read " << points.size() << " points." << endl; }
// Skip void skipSection(IFstream& is) { Info<< "Skipping section at line " << is.lineNumber() << '.' << endl; string line; while (is.good()) { is.getLine(line); if (isSeparator(line)) { break; } } }
// Reads cells section. Read region as well? Not handled yet but should just // be a matter of reading corresponding to boundaryFaces the correct property // and sorting it later on. void readCells ( IFstream& is, DynamicList<cellShape>& cellVerts, DynamicList<label>& cellMaterial, DynamicList<label>& boundaryFaceIndices, DynamicList<face>& boundaryFaces, DynamicList<label>& cellCorrespondence, DynamicList<label>& unvPointID // unv index ) { Info<< "Starting reading cells at line " << is.lineNumber() << '.' << endl; // Invert point numbering. label maxUnvPoint = 0; forAll(unvPointID, pointi) { maxUnvPoint = max(maxUnvPoint, unvPointID[pointi]); }
// Reads unit section void readUnits ( IFstream& is, scalar& lengthScale, scalar& forceScale, scalar& tempScale, scalar& tempOffset ) { Sout<< "Starting reading units at line " << is.lineNumber() << '.' << endl; string line; is.getLine(line); label l = readLabel(IStringStream(line.substr(0, 10))()); Sout<< "l:" << l << endl; string units(line.substr(10, 20)); Sout<< "units:" << units << endl; label unitType = readLabel(IStringStream(line.substr(30, 10))()); Sout<< "unitType:" << unitType << endl; // Read lengthscales is.getLine(line); lengthScale = readUnvScalar(line.substr(0, 25)); forceScale = readUnvScalar(line.substr(25, 25)); tempScale = readUnvScalar(line.substr(50, 25)); is.getLine(line); tempOffset = readUnvScalar(line.substr(0, 25)); Sout<< "Unit factors:" << nl << " Length scale : " << lengthScale << nl << " Force scale : " << forceScale << nl << " Temperature scale : " << tempScale << nl << " Temperature offset : " << tempOffset << nl << endl; }
// Reads cells section. Read region as well? Not handled yet but should just // be a matter of reading corresponding to boundaryFaces the correct property // and sorting it later on. void readCells ( IFstream& is, DynamicList<cellShape>& cellVerts, DynamicList<label>& cellMaterial, DynamicList<label>& boundaryFaceIndices, DynamicList<face>& boundaryFaces ) { Sout<< "Starting reading cells at line " << is.lineNumber() << '.' << endl; const cellModel& hex = *(cellModeller::lookup("hex")); const cellModel& prism = *(cellModeller::lookup("prism")); const cellModel& tet = *(cellModeller::lookup("tet")); labelHashSet skippedElements; labelHashSet foundFeType; while (true) { string line; is.getLine(line); if (isSeparator(line)) { break; } IStringStream lineStr(line); label cellI, feID, physProp, matProp, colour, nNodes; lineStr >> cellI >> feID >> physProp >> matProp >> colour >> nNodes; if (foundFeType.insert(feID)) { Info<< "First occurrence of element type " << feID << " for cell " << cellI << " at line " << is.lineNumber() << endl; } if (feID == 11) { // Rod. Skip. is.getLine(line); is.getLine(line); } else if (feID == 171) { // Rod. Skip. is.getLine(line); } else if (feID == 41 || feID == 91) { // Triangle. Save - used for patching later on. is.getLine(line); face cVerts(3); IStringStream lineStr(line); lineStr >> cVerts[0] >> cVerts[1] >> cVerts[2]; boundaryFaces.append(cVerts); boundaryFaceIndices.append(cellI); } else if (feID == 44 || feID == 94)