Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / conversion / ensight / part / ensightPart.H
blobd3b1671dcdf3f069d9767b52bfff3348670efda7
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  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     ensightPartI.H
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 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         //- mesh reference used
92         const polyMesh* meshPtr_;
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 polyMesh& pMesh)
116             :
117                 nPoints(0),
118                 list(pMesh.points().size(), -1)
119             {}
120         };
123     // Protected Member Functions
125         //- reconstruct contents from Istream
126         void reconstruct(Istream&);
128         //- check for fully defined fields
129         bool isFieldDefined(const List<scalar>&) const;
131         //- write the part header
132         void writeHeader(ensightFile&, bool withDescription=false) const;
134         //- write a scalar field for idList
135         void writeFieldList
136         (
137             ensightFile& os,
138             const List<scalar>& field,
139             const labelList& idList
140         ) const;
142         //- track points used
143         virtual localPoints calcLocalPoints() const
144         {
145             return localPoints();
146         }
148         //- write connectivities
149         virtual void writeConnectivity
150         (
151             ensightGeoFile& os,
152             const string& key,
153             const labelList& idList,
154             const labelList& pointMap
155         ) const
156         {}
159 public:
161     //- Runtime type information
162     TypeName("ensightPart");
165     // Constructors
167         //- Construct null
168         ensightPart();
170         //- Construct empty part with number and description
171         ensightPart(label partNumber, const string& partDescription);
173         //- Construct empty part with number and description
174         ensightPart
175         (
176             label partNumber,
177             const string& partDescription,
178             const polyMesh& pMesh
179         );
181         //- Construct as copy
182         ensightPart(const ensightPart&);
185     // Selectors
187         // Declare run-time constructor selection table
188         declareRunTimeSelectionTable
189         (
190             autoPtr,
191             ensightPart,
192             istream,
193             (
194                 Istream& is
195             ),
196             (is)
197         );
199         //- Construct and return clone
200         autoPtr<ensightPart> clone() const
201         {
202             return autoPtr<ensightPart>(new ensightPart(*this));
203         };
205         //- Construct on freestore from Istream
206         static autoPtr<ensightPart> New(Istream& is);
209     //- Destructor
210     virtual ~ensightPart();
213     // Static members
215         virtual List<word> const& elementTypes() const
216         {
217             return elemTypes_;
218         }
221     // Access
223         //- number of elements in this part
224         label size() const
225         {
226             return size_;
227         }
229         //- represents cell data
230         bool isCellData() const
231         {
232             return isCellData_;
233         }
235         //- represents face data
236         bool isFaceData() const
237         {
238             return !isCellData_;
239         }
241         //- part number
242         label number() const
243         {
244             return number_;
245         }
247         //- part name or description
248         const string& name() const
249         {
250             return name_;
251         }
253         //- material id
254         label materialId() const
255         {
256             return matId_;
257         }
259         //- non-const access
260         void name(const string& value)
261         {
262             name_ = value;
263         }
265         void materialId(const label value)
266         {
267             matId_ = value;
268         }
270         //- offset for element ids
271         label offset() const
272         {
273             return offset_;
274         }
277     // Edit
279         //- renumber elements
280         void renumber(labelList const&);
282         //- write summary information about the object
283         bool writeSummary(Ostream&) const;
285         //- write reconstruction information for the object
286         bool writeData(Ostream&) const;
288         //- write geometry
289         void writeGeometry(ensightGeoFile&) const;
291         //- write scalar field
292         void writeScalarField
293         (
294             ensightFile&,
295             const List<scalar>& field
296         ) const;
298         //- write vector field components
299         void writeVectorField
300         (
301             ensightFile&,
302             const List<scalar>& field0,
303             const List<scalar>& field1,
304             const List<scalar>& field2
305         ) const;
308         //- write generalized field components
309         template <class Type>
310         void writeField
311         (
312             ensightFile&,
313             const Field<Type>&
314         ) const;
317     // Member Operators
319         //- Disallow default bitwise assignment
320         void operator=(const ensightPart&)
321         {
322             notImplemented("ensightPart::operator=(const ensightPart&)");
323         }
326     // IOstream Operators
328         //- write data (reconstruction information)
329         friend Ostream& operator<<(Ostream&, const ensightPart&);
331         //- write geometry
332         friend ensightGeoFile& operator<<
333         (
334             ensightGeoFile&,
335             const ensightPart&
336         );
340 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
342 } // End namespace Foam
344 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
346 #ifdef NoRepository
347 #   include "ensightPartI.H"
348 #endif
350 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
352 #endif
354 // ************************************************************************* //