vtkPVFoamReader.h 7.61 KB
Newer Older
1 2 3 4
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
OpenFOAM bot's avatar
OpenFOAM bot committed
5
    \\  /    A nd           | www.openfoam.com
OpenFOAM bot's avatar
OpenFOAM bot committed
6 7
     \\/     M anipulation  |
-------------------------------------------------------------------------------
OpenFOAM bot's avatar
OpenFOAM bot committed
8 9
    Copyright (C) 2011-2016 OpenFOAM Foundation
    Copyright (C) 2017 OpenCFD Ltd.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

    OpenFOAM is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General Public License
    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.

Class
28
    vtkPVFoamReader
29 30

Description
31
    Reads a dataset in OpenFOAM format
32

33
    vtkPVFoamReader creates an multiblock dataset.
34 35 36 37
    It uses the OpenFOAM infrastructure (fvMesh, etc) to handle mesh and
    field data.

SourceFiles
38
    vtkPVblockMeshReader.cxx
39 40

\*---------------------------------------------------------------------------*/
41 42
#ifndef vtkPVFoamReader_h
#define vtkPVFoamReader_h
43 44 45 46 47 48 49 50 51

// VTK includes
#include "vtkMultiBlockDataSetAlgorithm.h"

// * * * * * * * * * * * * * Forward Declarations  * * * * * * * * * * * * * //

// VTK forward declarations
class vtkDataArraySelection;
class vtkCallbackCommand;
52
template<class T> class vtkSmartPointer;
53 54 55 56

// OpenFOAM forward declarations
namespace Foam
{
57
    class vtkPVFoam;
58 59 60 61
}


/*---------------------------------------------------------------------------*\
62
                       Class vtkPVFoamReader Declaration
63 64
\*---------------------------------------------------------------------------*/

65
class vtkPVFoamReader
66 67 68 69
:
    public vtkMultiBlockDataSetAlgorithm
{
public:
70
    vtkTypeMacro(vtkPVFoamReader, vtkMultiBlockDataSetAlgorithm);
71
    void PrintSelf(ostream&, vtkIndent) VTK_OVERRIDE;
72

73
    static vtkPVFoamReader* New();
74 75 76 77 78 79 80 81 82 83

    // Description:
    // Get the current timestep and the timestep range.
    vtkGetVector2Macro(TimeStepRange, int);

    // Description:
    // Set/Get the filename.
    vtkSetStringMacro(FileName);
    vtkGetStringMacro(FileName);

84 85 86 87
    // Description:
    // Print some case information
    virtual void PrintInfo();

88
    // Description:
89 90 91
    // Mesh caching control (0:none,1:fvMesh,3:fvMesh+vtk)
    vtkSetMacro(MeshCaching, int);
    vtkGetMacro(MeshCaching, int);
92 93 94

    // Description:
    // OpenFOAM refresh times/fields
95
    virtual void Refresh();
96 97 98

    // Description:
    // OpenFOAM skip/include the 0/ time directory
99 100
    vtkSetMacro(SkipZeroTime, bool);
    vtkGetMacro(SkipZeroTime, bool);
101 102 103

    // Description:
    // GUI update control
104 105
    vtkSetMacro(UpdateGUI, bool);
    vtkGetMacro(UpdateGUI, bool);
106 107 108

    // Description:
    // OpenFOAM extrapolate internal values onto the patches
109 110
    vtkSetMacro(ExtrapolatePatches, bool);
    vtkGetMacro(ExtrapolatePatches, bool);
111 112 113

    // Description:
    // OpenFOAM use vtkPolyhedron instead of decomposing polyhedra
114 115
    vtkSetMacro(UseVTKPolyhedron, bool);
    vtkGetMacro(UseVTKPolyhedron, bool);
116 117 118

    // Description:
    // OpenFOAM read sets control
119 120
    virtual void SetIncludeSets(bool);
    vtkGetMacro(IncludeSets, bool);
121 122 123

    // Description:
    // OpenFOAM read zones control
124 125
    virtual void SetIncludeZones(bool);
    vtkGetMacro(IncludeZones, bool);
126 127 128

    // Description:
    // OpenFOAM display patch names control
129 130
    virtual void SetShowPatchNames(bool);
    vtkGetMacro(ShowPatchNames, bool);
131 132 133

    // Description:
    // OpenFOAM display patchGroups
134 135
    virtual void SetShowGroupsOnly(bool);
    vtkGetMacro(ShowGroupsOnly, bool);
136 137 138

    // Description:
    // OpenFOAM volField interpolation
139 140
    vtkSetMacro(InterpolateVolFields, bool);
    vtkGetMacro(InterpolateVolFields, bool);
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194

    // Description:
    // Get the current timestep
    int  GetTimeStep();

    // Description:
    // Parts selection list control
    virtual vtkDataArraySelection* GetPartSelection();
    int  GetNumberOfPartArrays();
    int  GetPartArrayStatus(const char* name);
    void SetPartArrayStatus(const char* name, int status);
    const char* GetPartArrayName(int index);

    // Description:
    // volField selection list control
    virtual vtkDataArraySelection* GetVolFieldSelection();
    int  GetNumberOfVolFieldArrays();
    int  GetVolFieldArrayStatus(const char* name);
    void SetVolFieldArrayStatus(const char* name, int status);
    const char* GetVolFieldArrayName(int index);

    // Description:
    // pointField selection list control
    virtual vtkDataArraySelection* GetPointFieldSelection();
    int  GetNumberOfPointFieldArrays();
    int  GetPointFieldArrayStatus(const char* name);
    void SetPointFieldArrayStatus(const char* name, int status);
    const char* GetPointFieldArrayName(int index);

    // Description:
    // lagrangianField selection list control
    virtual vtkDataArraySelection* GetLagrangianFieldSelection();
    int  GetNumberOfLagrangianFieldArrays();
    int  GetLagrangianFieldArrayStatus(const char* name);
    void SetLagrangianFieldArrayStatus(const char* name, int status);
    const char* GetLagrangianFieldArrayName(int index);

    // Description:
    // Callback registered with the SelectionObserver
    // for all the selection lists
    static void SelectionModifiedCallback
    (
        vtkObject* caller,
        unsigned long eid,
        void* clientdata,
        void* calldata
    );

    void SelectionModified();


protected:

    //- Construct null
195
    vtkPVFoamReader();
196 197

    //- Destructor
198
    ~vtkPVFoamReader();
199 200 201 202 203 204 205

    //- Return information about mesh, times, etc without loading anything
    virtual int RequestInformation
    (
        vtkInformation*,
        vtkInformationVector**,
        vtkInformationVector*
206
    ) VTK_OVERRIDE;
207 208 209 210 211 212 213

    //- Get the mesh/fields for a particular time
    virtual int RequestData
    (
        vtkInformation*,
        vtkInformationVector**,
        vtkInformationVector*
214
    ) VTK_OVERRIDE;
215 216

    //- Fill in additional port information
217
    virtual int FillOutputPortInformation(int, vtkInformation*) VTK_OVERRIDE;
218 219 220 221 222 223 224 225 226 227

    //- The observer to modify this object when array selections are modified
    vtkCallbackCommand* SelectionObserver;

    //- The file name for this case
    char* FileName;


private:

228
    //- No copy construct
229
    vtkPVFoamReader(const vtkPVFoamReader&) = delete;
230

231
    //- No copy assignment
232
    void operator=(const vtkPVFoamReader&) = delete;
233 234 235 236 237

    //- Add/remove patch names to/from the view
    void updatePatchNamesView(const bool show);

    int TimeStepRange[2];
238
    int MeshCaching;
239 240 241 242 243 244 245 246 247
    bool SkipZeroTime;

    bool ExtrapolatePatches;
    bool UseVTKPolyhedron;
    bool IncludeSets;
    bool IncludeZones;
    bool ShowPatchNames;
    bool ShowGroupsOnly;
    bool InterpolateVolFields;
248 249

    //- Dummy variable/switch to invoke a reader update
250
    bool UpdateGUI;
251 252 253 254 255 256

    vtkDataArraySelection* PartSelection;
    vtkDataArraySelection* VolFieldSelection;
    vtkDataArraySelection* PointFieldSelection;
    vtkDataArraySelection* LagrangianFieldSelection;

257 258
    //- Backend portion of the reader
    Foam::vtkPVFoam* backend_;
259 260 261 262 263 264 265
};

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

// ************************************************************************* //