Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / surfMesh / surfaceFormats / starcd / STARCDsurfaceFormatCore.C
blob3795d433f93c38ee9a094de290c9c60df9bb8645
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2008-2010 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 \*---------------------------------------------------------------------------*/
26 #include "STARCDsurfaceFormatCore.H"
27 #include "clock.H"
28 #include "regExp.H"
29 #include "IStringStream.H"
31 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
33 // parse things like this:
34 //     CTNAME  1  someName
35 // don't bother with the older comma-delimited format
37 Foam::Map<Foam::word>
38 Foam::fileFormats::STARCDsurfaceFormatCore::readInpCellTable
40     IFstream& is
43     Map<word> lookup;
45     regExp ctnameRE
46     (
47         " *CTNA[^ ]*"        // keyword - min 4 chars
48         "[[:space:]]+"       // space delimited
49         "([0-9]+)"           // 1: <digits>
50         "[[:space:]]+"       // space delimited
51         "([^,[:space:]].*)", // 2: <name>
52         true                 // ignore case
53     );
55     string line;
56     List<string> groups;
57     while (is.good() && is.getLine(line).good())
58     {
59         if (ctnameRE.match(line, groups))
60         {
61             const label tableId = atoi(groups[0].c_str());
63             // strip bad chars
64             string::stripInvalid<word>(groups[1]);
66             if (!groups[1].empty())
67             {
68                 lookup.insert(tableId, groups[1]);
69             }
70         }
71     }
73     return lookup;
77 void Foam::fileFormats::STARCDsurfaceFormatCore::writeCase
79     Ostream& os,
80     const pointField& pointLst,
81     const label nFaces,
82     const UList<surfZone>& zoneLst
85     word caseName = os.name().lessExt().name();
87     os  << "! STAR-CD file written " << clock::dateTime().c_str() << nl
88         << "! " << pointLst.size() << " points, " << nFaces << " faces" << nl
89         << "! case " << caseName << nl
90         << "! ------------------------------" << nl;
92     forAll(zoneLst, zoneI)
93     {
94         os  << "ctable " << zoneI + 1 << " shell" << " ,,,,,," << nl
95             << "ctname " << zoneI + 1 << " "
96             << zoneLst[zoneI].name() << nl;
97     }
99     os  << "! ------------------------------" << nl
100         << "*set icvo mxv - 1" << nl
101         << "vread " << caseName << ".vrt icvo,,,coded" << nl
102         << "cread " << caseName << ".cel icvo,,,add,coded" << nl
103         << "*set icvo" << nl
104         << "! end" << nl;
106     os.flush();
110 // ************************************************************************* //