Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / conversion / ensight / part / ensightPart.H
bloba7c3cde944e37c303e0c19e9e89c2ebf49fbd36f
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2008-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 Class
25     Foam::ensightPart
27 Description
28     Base class for ensightPartCells and ensightPartFaces
30 SourceFiles
31     ensightPart.C
32     ensightPartIO.C
33     ensightPartTemplates.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef ensightPart_H
38 #define ensightPart_H
40 #include "ensightFile.H"
41 #include "ensightGeoFile.H"
42 #include "typeInfo.H"
43 #include "labelList.H"
44 #include "polyMesh.H"
45 #include "Field.H"
46 #include "IOPtrList.H"
47 #include "IOstream.H"
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 namespace Foam
54 /*---------------------------------------------------------------------------*\
55                          Class ensightPart Declaration
56 \*---------------------------------------------------------------------------*/
58 class ensightPart
60     // Private data
62         // Static data members
63         static const List<word> elemTypes_;
66 protected:
68     // Protected data
70         //- part number
71         label number_;
73         //- part name (or description)
74         string name_;
76         //- simple labelList with a name
77         labelListList elemLists_;
79         //- start offset for elemLists_
80         label offset_;
82         //- number of elements in this part
83         label size_;
85         //- cell or face data
86         bool isCellData_;
88         //- material id (numeric)
89         label matId_;
91         //- pointField referenced
92         const pointField& points_;
95     // Protected Classes
97         //- track the points used by the part and map global to local indices
98         class localPoints
99         {
100         public:
101             //- number of points used
102             label nPoints;
104             //- map global to local indices
105             labelList list;
107             //- null constructor
108             localPoints()
109             :
110                 nPoints(0),
111                 list(0)
112             {}
114             //- construct for mesh points
115             localPoints(const pointField& pts)
116             :
117                 nPoints(0),
118                 list(pts.size(), -1)
119             {}
120         };
123     // Protected Member Functions
125         //- Reconstruct part characteristics (eg, element types) from Istream
126         //  A part reconstructed in this manner can be used when writing fields,
127         //  but cannot be used to write a new geometry
128         void reconstruct(Istream&);
130         //- check for fully defined fields
131         bool isFieldDefined(const List<scalar>&) const;
133         //- write the part header
134         void writeHeader(ensightFile&, bool withDescription=false) const;
136         //- write a scalar field for idList
137         //  A null reference for idList writes the perNode values
138         void writeFieldList
139         (
140             ensightFile& os,
141             const List<scalar>& field,
142             const labelUList& idList
143         ) const;
145         //- track points used
146         virtual localPoints calcLocalPoints() const
147         {
148             return localPoints();
149         }
151         //- write connectivities
152         virtual void writeConnectivity
153         (
154             ensightGeoFile&,
155             const word& key,
156             const labelUList& idList,
157             const labelUList& pointMap
158         ) const
159         {}
162 public:
164     //- Runtime type information
165     TypeName("ensightPart");
168     // Constructors
170         //- Construct null
171         ensightPart();
173         //- Construct empty part with number and description
174         ensightPart(label partNumber, const string& partDescription);
176         //- Construct part with number, description and points reference
177         ensightPart
178         (
179             label partNumber,
180             const string& partDescription,
181             const pointField& points
182         );
184         //- Construct as copy
185         ensightPart(const ensightPart&);
188     // Selectors
190         // Declare run-time constructor selection table
191         declareRunTimeSelectionTable
192         (
193             autoPtr,
194             ensightPart,
195             istream,
196             (
197                 Istream& is
198             ),
199             (is)
200         );
202         //- Construct and return clone
203         autoPtr<ensightPart> clone() const
204         {
205             return autoPtr<ensightPart>(new ensightPart(*this));
206         };
208         //- Reconstruct part characteristics on freestore from Istream
209         //  \sa reconstruct
210         static autoPtr<ensightPart> New(Istream&);
213     //- Destructor
214     virtual ~ensightPart();
217     // Static members
219         virtual const List<word>& elementTypes() const
220         {
221             return elemTypes_;
222         }
225     // Access
227         //- number of elements in this part
228         label size() const
229         {
230             return size_;
231         }
233         //- represents cell data
234         bool isCellData() const
235         {
236             return isCellData_;
237         }
239         //- represents face data
240         bool isFaceData() const
241         {
242             return !isCellData_;
243         }
245         //- part number
246         label number() const
247         {
248             return number_;
249         }
251         //- part name or description
252         const string& name() const
253         {
254             return name_;
255         }
257         //- material id
258         label materialId() const
259         {
260             return matId_;
261         }
263         //- non-const access to part name or description
264         void name(const string& value)
265         {
266             name_ = value;
267         }
269         //- non-const access to material id
270         void materialId(const label value)
271         {
272             matId_ = value;
273         }
275         //- simple labelList with a name
276         const labelListList& elemLists() const
277         {
278             return elemLists_;
279         }
281         //- offset for element ids
282         label offset() const
283         {
284             return offset_;
285         }
288     // Edit
290         //- renumber elements
291         void renumber(const labelUList&);
293         //- write summary information about the object
294         bool writeSummary(Ostream&) const;
296         //- write reconstruction information for the object
297         bool writeData(Ostream&) const;
299         //- Write geometry
300         virtual void writeGeometry(ensightGeoFile&) const
301         {}
303         //- Helper: write geometry given the pointField
304         void writeGeometry(ensightGeoFile&, const pointField&) const;
306         //- write scalar field
307         //  optionally write data per node
308         void writeScalarField
309         (
310             ensightFile&,
311             const List<scalar>& field,
312             const bool perNode = false
313         ) const;
315         //- write vector field components
316         //  optionally write data per node
317         void writeVectorField
318         (
319             ensightFile&,
320             const List<scalar>& field0,
321             const List<scalar>& field1,
322             const List<scalar>& field2,
323             const bool perNode = false
324         ) const;
327         //- write generalized field components
328         //  optionally write data per node
329         template<class Type>
330         void writeField
331         (
332             ensightFile&,
333             const Field<Type>&,
334             const bool perNode = false
335         ) const;
338     // Member Operators
340         //- Disallow default bitwise assignment
341         void operator=(const ensightPart&)
342         {
343             notImplemented("ensightPart::operator=(const ensightPart&)");
344         }
347     // IOstream Operators
349         //- write data (reconstruction information)
350         friend Ostream& operator<<(Ostream&, const ensightPart&);
352         //- write geometry
353         friend ensightGeoFile& operator<<(ensightGeoFile&, const ensightPart&);
358 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
360 } // End namespace Foam
362 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
364 #ifdef NoRepository
365 #   include "ensightPartTemplates.C"
366 #endif
368 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
370 #endif
372 // ************************************************************************* //