Fix tutorials: coupled/conjugateHeatFoam/conjugateCavity: fix Allrun file
[OpenFOAM-1.6-ext.git] / src / surfMesh / surfaceFormats / smesh / SMESHsurfaceFormat.C
blob0234a56f8bdb251400e1cedbc16ca82870a46764
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "SMESHsurfaceFormat.H"
28 #include "clock.H"
29 #include "IFstream.H"
30 #include "OFstream.H"
31 #include "Ostream.H"
33 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
35 template<class Face>
36 Foam::fileFormats::SMESHsurfaceFormat<Face>::SMESHsurfaceFormat()
40 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
42 template<class Face>
43 void Foam::fileFormats::SMESHsurfaceFormat<Face>::write
45     const fileName& filename,
46     const MeshedSurfaceProxy<Face>& surf
49     const pointField& pointLst = surf.points();
50     const List<Face>&  faceLst = surf.faces();
51     const List<label>& faceMap = surf.faceMap();
53     const List<surfZone>& zones =
54     (
55         surf.surfZones().size() > 1
56       ? surf.surfZones()
57       : oneZone(faceLst)
58     );
60     const bool useFaceMap = (surf.useFaceMap() && zones.size() > 1);
63     OFstream os(filename);
64     if (!os.good())
65     {
66         FatalErrorIn
67         (
68             "fileFormats::SMESHsurfaceFormat::write"
69             "(const fileName&, const MeshedSurfaceProxy<Face>&)"
70         )
71             << "Cannot open file for writing " << filename
72             << exit(FatalError);
73     }
76     // Write header
77     os  << "# tetgen .smesh file written " << clock::dateTime().c_str() << nl
78         << "# <points count=\"" << pointLst.size() << "\">" << nl
79         << pointLst.size() << " 3" << nl;    // 3: dimensions
81     // Write vertex coords
82     forAll(pointLst, ptI)
83     {
84         const point& pt = pointLst[ptI];
86         os  << ptI << ' ' << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl;
87     }
88     os  << "# </points>" << nl
89         << nl
90         << "# <faces count=\"" << faceLst.size() << "\">" << endl;
92     os  << faceLst.size() << " 1" << endl;   // one attribute: zone number
95     label faceIndex = 0;
96     forAll(zones, zoneI)
97     {
98         const surfZone& zone = zones[zoneI];
100         if (useFaceMap)
101         {
102             forAll(zone, localFaceI)
103             {
104                 const Face& f = faceLst[faceMap[faceIndex++]];
106                 os << f.size();
107                 forAll(f, fp)
108                 {
109                     os << ' ' << f[fp];
110                 }
111                 os << ' ' << zoneI << endl;
112             }
113         }
114         else
115         {
116             forAll(zones[zoneI], localFaceI)
117             {
118                 const Face& f = faceLst[faceIndex++];
120                 os << f.size();
121                 forAll(f, fp)
122                 {
123                     os << ' ' << f[fp];
124                 }
125                 os << ' ' << zoneI << endl;
126             }
127         }
128     }
130     // write tail
132     os  << "# </faces>" << nl
133         << nl
134         << "# no holes or regions:" << nl
135         << '0' << nl        // holes
136         << '0' << endl;     // regions
140 // ************************************************************************* //