ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / sampling / sampledSet / writers / vtk / vtkSetWriter.C
blobb865e704d496dda72bb67ef8ec24b9771ac42fea
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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 "vtkSetWriter.H"
27 #include "coordSet.H"
28 #include "fileName.H"
29 #include "OFstream.H"
30 #include "addToRunTimeSelectionTable.H"
33 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
35 template<class Type>
36 Foam::vtkSetWriter<Type>::vtkSetWriter()
38     writer<Type>()
41 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
43 template<class Type>
44 Foam::vtkSetWriter<Type>::~vtkSetWriter()
48 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
50 template<class Type>
51 Foam::fileName Foam::vtkSetWriter<Type>::getFileName
53     const coordSet& points,
54     const wordList& valueSetNames
55 ) const
57     return this->getBaseName(points, valueSetNames) + ".vtk";
61 template<class Type>
62 void Foam::vtkSetWriter<Type>::write
64     const coordSet& points,
65     const wordList& valueSetNames,
66     const List<const Field<Type>*>& valueSets,
67     Ostream& os
68 ) const
70     os  << "# vtk DataFile Version 2.0" << nl
71         << points.name() << nl
72         << "ASCII" << nl
73         << "DATASET POLYDATA" << nl
74         << "POINTS " << points.size() << " float" << nl;
76     forAll(points, i)
77     {
78         const vector& pt = points[i];
79         os  << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl;
80     }
83     os  << "POINT_DATA " << points.size() << nl
84         << " FIELD attributes " << valueSetNames.size() << nl;
86     forAll(valueSetNames, setI)
87     {
88         os  << valueSetNames[setI] << ' ' << pTraits<Type>::nComponents << ' '
89             << points.size() << " float" << nl;
91         const Field<Type>& fld = *valueSets[setI];
93         forAll(fld, pointI)
94         {
95             if (pointI != 0)
96             {
97                 os  << ' ';
98             }
99             writer<Type>::write(fld[pointI], os);
100         }
101         os  << nl;
102     }
106 template<class Type>
107 void Foam::vtkSetWriter<Type>::write
109     const bool writeTracks,
110     const PtrList<coordSet>& tracks,
111     const wordList& valueSetNames,
112     const List<List<Field<Type> > >& valueSets,
113     Ostream& os
114 ) const
116     if (valueSets.size() != valueSetNames.size())
117     {
118         FatalErrorIn("vtkSetWriter<Type>::write(..)")
119             << "Number of variables:" << valueSetNames.size() << endl
120             << "Number of valueSets:" << valueSets.size()
121             << exit(FatalError);
122     }
124     label nTracks = tracks.size();
125     label nPoints = 0;
126     forAll(tracks, i)
127     {
128         nPoints += tracks[i].size();
129     }
131     os  << "# vtk DataFile Version 2.0" << nl
132         << tracks[0].name() << nl
133         << "ASCII" << nl
134         << "DATASET POLYDATA" << nl
135         << "POINTS " << nPoints << " float" << nl;
137     forAll(tracks, trackI)
138     {
139         const coordSet& points = tracks[trackI];
140         forAll(points, i)
141         {
142             const vector& pt = points[i];
143             os  << pt.x() << ' ' << pt.y() << ' ' << pt.z() << nl;
144         }
145     }
147     if (writeTracks)
148     {
149         os  << "LINES " << nTracks << ' ' << nPoints+nTracks << nl;
151         // Write ids of track points to file
152         label globalPtI = 0;
153         forAll(tracks, trackI)
154         {
155             const coordSet& points = tracks[trackI];
157             os  << points.size();
158             forAll(points, i)
159             {
160                 os  << ' ' << globalPtI;
161                 globalPtI++;
162             }
163             os << nl;
164         }
165     }
167     os  << "POINT_DATA " << nPoints << nl
168         << " FIELD attributes " << valueSetNames.size() << nl;
170     forAll(valueSetNames, setI)
171     {
172         os  << valueSetNames[setI] << ' ' << pTraits<Type>::nComponents << ' '
173             << nPoints << " float" << nl;
175         const List<Field<Type> >& fieldVals = valueSets[setI];
177         forAll(fieldVals, i)
178         {
179             const Field<Type>& vals = fieldVals[i];
181             forAll(vals, j)
182             {
183                 if (j != 0)
184                 {
185                     os  << ' ';
186                 }
187                 writer<Type>::write(vals[j], os);
188             }
189             os  << nl;
190         }
191     }
195 // ************************************************************************* //