Forward compatibility: flex
[foam-extend-3.2.git] / applications / utilities / postProcessing / dataConversion / foamToVTK / vtkMesh.H
blob894a4ed68706f5b2d6357e858113ab4082d1caf3
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::vtkMesh
27 Description
28     Encapsulation of VTK mesh data. Holds mesh or meshsubset and
29     polyhedral-cell decomposition on it.
31 SourceFiles
32     vtkMesh.C
34 \*---------------------------------------------------------------------------*/
36 #ifndef vtkMesh_H
37 #define vtkMesh_H
39 #include "vtkTopo.H"
40 #include "fvMeshSubset.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 // Forward declaration of classes
48 class Time;
50 /*---------------------------------------------------------------------------*\
51                            Class vtkMesh Declaration
52 \*---------------------------------------------------------------------------*/
54 class vtkMesh
56     public fvMesh
58     // Private data
60         //- Mesh subset
61         fvMeshSubset subsetMesh_;
63         //- Current cellSet (or empty)
64         const word setName_;
66         //- Current decomposition of topology
67         mutable autoPtr<vtkTopo> topoPtr_;
71     // Private Member Functions
73         //- Disallow default bitwise copy construct
74         vtkMesh(const vtkMesh&);
76         //- Disallow default bitwise assignment
77         void operator=(const vtkMesh&);
80 public:
82     // Constructors
84         //- Construct from components
85         vtkMesh(const IOobject& io, const word& setName = "");
88     // Destructor
90         virtual ~vtkMesh();
93     // Member Functions
95         // Access
97             const fvMeshSubset& subsetMesh() const
98             {
99                 return subsetMesh_;
100             }
102             //- Check if running subMesh
103             bool useSubMesh() const
104             {
105                 return setName_.size();
106             }
108             //- topology
109             const vtkTopo& topo() const
110             {
111                 if (topoPtr_.empty())
112                 {
113                     topoPtr_.reset(new vtkTopo(mesh()));
114                 }
115                 return topoPtr_();
116             }
118             //- Access either mesh or submesh
119             const fvMesh& mesh() const
120             {
121                 if (useSubMesh())
122                 {
123                     return subsetMesh_.subMesh();
124                 }
125                 else
126                 {
127                     return *this;
128                 }
129             }
131             //- Access either pointMesh of base or pointMesh of subset
132             const pointMesh& pMesh() const
133             {
134                 if (useSubMesh())
135                 {
136                     return pointMesh::New(subsetMesh_.subMesh());
137                 }
138                 else
139                 {
140                     return pointMesh::New(*this);
141                 }
142             }
144             //- Number of field cells
145             label nFieldCells() const
146             {
147                 return topo().cellTypes().size();
148             }
150             //- Number of field points
151             label nFieldPoints() const
152             {
153                 return mesh().nPoints() + topo().addPointCellLabels().size();
154             }
157         // Edit
159             //- Read mesh
160             polyMesh::readUpdateState readUpdate();
163             //- Map volume field (does in fact do very little interpolation;
164             //  just copied from fvMeshSubset)
165             template<class GeoField>
166             tmp<GeoField> interpolate(const GeoField& fld) const
167             {
168                 if (useSubMesh())
169                 {
170                     tmp<GeoField> subFld = subsetMesh_.interpolate(fld);
171                     subFld().rename(fld.name());
172                     return subFld;
173                 }
174                 else
175                 {
176                     return fld;
177                 }
178             }
182 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
184 } // End namespace Foam
186 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
188 #endif
190 // ************************************************************************* //