Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / applications / utilities / mesh / conversion / star3ToFoam / readPoints.C
blobbc931fd5c7fe634fe26ccd3505683a06e304a29a
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2011 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Description
25     Create intermediate mesh from PROSTAR files
27 \*---------------------------------------------------------------------------*/
29 #include "starMesh.H"
30 #include "IFstream.H"
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
34 label starMesh::readVtxLabel(IFstream& is)
36     char lcs[16];
38     for (int i=0; i<15; i++)
39     {
40         is.get(lcs[i]);
41     }
43     lcs[15] = '\0';
45     return atoi(lcs);
49 scalar starMesh::readVtxCmpt(IFstream& is)
51     char lcs[17];
53     for (int i=0; i<16; i++)
54     {
55         is.get(lcs[i]);
56     }
58     lcs[16] = '\0';
60     return scalar(atof(lcs));
64 void starMesh::readToNl(IFstream& is)
66     char c;
67     do
68     {
69         is.get(c);
70     } while (is && c != '\n');
74 void starMesh::readPoints(const scalar scaleFactor)
76     label nPoints = 0;
77     label maxLabel = -1;
79     fileName pointsFileName(casePrefix_ + ".vrt");
81     {
82         IFstream pointsFile(pointsFileName);
84         // Pass 1: get # points and maximum vertex label
86         if (pointsFile.good())
87         {
88             label pointLabel;
90             maxLabel = -1;
91             while (pointsFile)
92             {
93                 pointLabel = readVtxLabel(pointsFile);
95                 if (!pointsFile) break;
97                 maxLabel = max(maxLabel, pointLabel);
99                 readVtxCmpt(pointsFile);
100                 readVtxCmpt(pointsFile);
101                 readVtxCmpt(pointsFile);
103                 readToNl(pointsFile);
105                 nPoints++;
106             }
107         }
108         else
109         {
110             FatalErrorIn("starMesh::readPoints()")
111                 << "Cannot read file " << pointsFileName
112                 << abort(FatalError);
113         }
114     }
116     Info<< "Number of points = " << nPoints << endl << endl;
118     points_.setSize(nPoints);
120 #   ifdef starMesh_H
121     starPointID_.setSize(nPoints);
123     // Reset STAR point ID, just in case
124     starPointID_ = -1;
125 #   endif
127     starPointLabelLookup_.setSize(maxLabel+1);
129     // reset point labels to invalid value
130     starPointLabelLookup_ = -1;
132     if (nPoints > 0)
133     {
134         // Pass 2: construct pointlist and conversion table
135         // from Star vertex numbers to Foam pointLabels
137         IFstream pointsFile(pointsFileName);
138         label pointLabel;
140         forAll(points_, p)
141         {
142             pointLabel = readVtxLabel(pointsFile);
143             points_[p].x() = readVtxCmpt(pointsFile);
144             points_[p].y() = readVtxCmpt(pointsFile);
145             points_[p].z() = readVtxCmpt(pointsFile);
147             readToNl(pointsFile);
149 #           ifdef starMesh_H
150             starPointID_[p] = pointLabel;
151 #           endif
153             starPointLabelLookup_[pointLabel] = p;
154         }
156         if (scaleFactor > 1.0 + SMALL || scaleFactor < 1.0 - SMALL)
157         {
158             points_ *= scaleFactor;
159         }
160     }
161     else
162     {
163         FatalError
164             << "void starMesh::readPoints() : "
165             << "no points in file "
166             << pointsFileName
167             << abort(FatalError);
168     }
172 // ************************************************************************* //