vtkPV3Foam.H 20.2 KB
Newer Older
1
2
3
4
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
Mark Olesen's avatar
Mark Olesen committed
5
    \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
     \\/     M anipulation  |
-------------------------------------------------------------------------------
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 2 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, write to the Free Software Foundation,
    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

Class
    Foam::vtkPV3Foam

Description
    Provides a reader interface for OpenFOAM to VTK interaction.

SourceFiles
    vtkPV3Foam.C
    vtkPV3Foam.H
Mark Olesen's avatar
Mark Olesen committed
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    vtkPV3FoamFields.C
    vtkPV3FoamMesh.C
    vtkPV3FoamMeshLagrangian.C
    vtkPV3FoamMeshPatch.C
    vtkPV3FoamMeshSet.C
    vtkPV3FoamMeshVolume.C
    vtkPV3FoamMeshZone.C
    vtkPV3FoamFaceField.H
    vtkPV3FoamLagrangianFields.H
    vtkPV3FoamPatchField.H
    vtkPV3FoamPointFields.H
    vtkPV3FoamPoints.H
    vtkPV3FoamUpdateInfo.C
    vtkPV3FoamUpdateInfoFields.H
48
    vtkPV3FoamUtils.C
Mark Olesen's avatar
Mark Olesen committed
49
    vtkPV3FoamVolFields.H
50
    vtkPV3FoamAddToSelection.H
51

52
    // Needed by VTK:
53
54
55
56
57
58
59
    vtkDataArrayTemplateImplicit.txx

\*---------------------------------------------------------------------------*/

#ifndef vtkPV3Foam_H
#define vtkPV3Foam_H

Mark Olesen's avatar
Mark Olesen committed
60
61
62
63
64
// do not include legacy strstream headers
#ifndef  VTK_EXCLUDE_STRSTREAM_HEADERS
# define VTK_EXCLUDE_STRSTREAM_HEADERS
#endif

65
66
67
#include "className.H"
#include "fileName.H"
#include "stringList.H"
68
#include "wordList.H"
69
#include "primitivePatch.H"
mattijs's avatar
mattijs committed
70
#include "PrimitivePatchInterpolation.H"
mattijs's avatar
mattijs committed
71
#include "volPointInterpolation.H"
72

73
74
#undef VTKPV3FOAM_DUALPORT

75
76
77
78
79
80
81
82
// * * * * * * * * * * * * * Forward Declarations  * * * * * * * * * * * * * //

class vtkDataArraySelection;
class vtkDataSet;
class vtkPoints;
class vtkPV3FoamReader;
class vtkRenderer;
class vtkTextActor;
Mark Olesen's avatar
Mark Olesen committed
83
class vtkMultiBlockDataSet;
84
85
class vtkPolyData;
class vtkUnstructuredGrid;
Mark Olesen's avatar
Mark Olesen committed
86
class vtkIndent;
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

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

namespace Foam
{

// Foam class forward declarations
class argList;
class Time;
class fvMesh;
class IOobjectList;
class polyPatch;
class faceSet;
class pointSet;

102
103
template<class Type> class IOField;
template<class Type> class List;
104
105
106
107
108
109
110

/*---------------------------------------------------------------------------*\
                        Class vtkPV3Foam Declaration
\*---------------------------------------------------------------------------*/

class vtkPV3Foam
{
Mark Olesen's avatar
Mark Olesen committed
111
    // Private classes
112

Mark Olesen's avatar
Mark Olesen committed
113
114
        //- Bookkeeping for GUI checklists and the multi-block organization
        class partInfo
115
116
        {
            const char *name_;
117
            int block_;
118
119
120
121
122
            int start_;
            int size_;

        public:

Mark Olesen's avatar
Mark Olesen committed
123
            partInfo(const char *name, const int blockNo=0)
124
125
            :
                name_(name),
126
                block_(blockNo),
127
128
129
130
131
                start_(-1),
                size_(0)
            {}

            //- Return the block holding these datasets
132
            int block() const
133
134
135
136
            {
                return block_;
            }

Mark Olesen's avatar
Mark Olesen committed
137
            //- Assign block number, return previous value
138
139
140
141
142
143
144
            int block(int blockNo)
            {
                int prev = block_;
                block_ = blockNo;
                return prev;
            }

145
146
147
148
149
            const char* name() const
            {
                return name_;
            }

150
            int start() const
151
152
153
154
            {
                return start_;
            }

155
            int end() const
156
157
158
159
            {
                return start_ + size_;
            }

160
            int size() const
161
162
163
164
            {
                return size_;
            }

165
166
            bool empty() const
            {
Mark Olesen's avatar
Mark Olesen committed
167
                return !size_;
168
169
            }

170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
            void reset()
            {
                start_ = -1;
                size_ = 0;
            }

            //- Assign new start and reset the size
            void operator=(const int i)
            {
                start_ = i;
                size_ = 0;
            }

            //- Increment the size
            void operator+=(const int n)
            {
                size_ += n;
            }
        };

Mark Olesen's avatar
Mark Olesen committed
190
191
192
193
194
195
196
        //- bookkeeping for polyhedral cell decomposition
        //  hide in extra pointMap (cellSet/cellZone) for now
        class polyDecomp
        {
            labelList superCells_;
            labelList addPointCellLabels_;
            labelList pointMap_;
197

Mark Olesen's avatar
Mark Olesen committed
198
        public:
Mark Olesen's avatar
Mark Olesen committed
199

Mark Olesen's avatar
Mark Olesen committed
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
            polyDecomp()
            {}

            //- Label of original cell for decomposed cells
            labelList& superCells()
            {
                return superCells_;
            }

            //- Label of original cell for decomposed cells
            const labelList& superCells() const
            {
                return superCells_;
            }

            //- Cell-centre labels for additional points of decomposed cells
            labelList& addPointCellLabels()
            {
                return addPointCellLabels_;
            }

            //- Cell-centre labels for additional points of decomposed cells
            const labelList& addPointCellLabels() const
            {
                return addPointCellLabels_;
            }

            //- Point labels for subsetted meshes
            labelList& pointMap()
            {
                return pointMap_;
            }

            //- Point labels for subsetted meshes
            const labelList& pointMap() const
            {
                return pointMap_;
            }


            //- Clear
            void clear()
            {
                superCells_.clear();
                addPointCellLabels_.clear();
                pointMap_.clear();
            }
        };


    // Private Data

        //- Access to the controlling vtkPV3FoamReader
        vtkPV3FoamReader* reader_;

        //- Foam time control
        autoPtr<Time> dbPtr_;

        //- Foam mesh
        fvMesh* meshPtr_;

261
262
263
264
265
        //- The mesh region
        word meshRegion_;

        //- The mesh directory for the region
        fileName meshDir_;
Mark Olesen's avatar
Mark Olesen committed
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306

        //- The time index
        int timeIndex_;

        //- Track changes in mesh geometry
        bool meshChanged_;

        //- Track changes in fields
        bool fieldsChanged_;

        //- Selected geometrical parts (internalMesh, patches, ...)
        boolList partStatus_;

        //- Datasets corresponding to selected geometrical pieces
        //  a negative number indicates that no vtkmesh exists for this piece
        labelList partDataset_;

        //- First instance and size of various mesh parts
        //  used to index into partStatus_ and partDataset_
        partInfo partInfoVolume_;
        partInfo partInfoPatches_;
        partInfo partInfoLagrangian_;
        partInfo partInfoCellZones_;
        partInfo partInfoFaceZones_;
        partInfo partInfoPointZones_;
        partInfo partInfoCellSets_;
        partInfo partInfoFaceSets_;
        partInfo partInfoPointSets_;

        //- Decomposed cells information (mesh regions)
        //  TODO: regions
        List<polyDecomp> regionPolyDecomp_;

        //- Decomposed cells information (cellZone meshes)
        List<polyDecomp> zonePolyDecomp_;

        //- Decomposed cells information (cellSet meshes)
        List<polyDecomp> csetPolyDecomp_;

        //- List of patch names for rendering to window
        List<vtkTextActor*> patchTextActorsPtrs_;
307
308
309
310
311
312
313
314
315

    // Private Member Functions

        // Convenience method use to convert the readers from VTK 5
        // multiblock API to the current composite data infrastructure
        static void AddToBlock
        (
            vtkMultiBlockDataSet* output,
            vtkDataSet* dataset,
Mark Olesen's avatar
Mark Olesen committed
316
317
            const partInfo&,
            const label datasetNo,
318
            const std::string& datasetName
319
320
321
322
323
324
325
        );

        // Convenience method use to convert the readers from VTK 5
        // multiblock API to the current composite data infrastructure
        static vtkDataSet* GetDataSetFromBlock
        (
            vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
326
            const partInfo&,
327
328
329
330
331
332
333
334
            const label datasetNo
        );

        // Convenience method use to convert the readers from VTK 5
        // multiblock API to the current composite data infrastructure
        static label GetNumberOfDataSets
        (
            vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
335
            const partInfo&
336
337
338
339
340
341
342
        );

        //- Reset data counters
        void resetCounters();

        // Update information helper functions

Mark Olesen's avatar
Mark Olesen committed
343
344
            //- Update the mesh parts selected in the GUI
            void updateMeshPartsStatus();
345
346

            //- Internal mesh info
Mark Olesen's avatar
Mark Olesen committed
347
            void updateInfoInternalMesh();
348
349

            //- Lagrangian info
Mark Olesen's avatar
Mark Olesen committed
350
            void updateInfoLagrangian();
351
352

            //- Patch info
Mark Olesen's avatar
Mark Olesen committed
353
            void updateInfoPatches();
354
355

            //- Set info
Mark Olesen's avatar
Mark Olesen committed
356
357
358
359
            void updateInfoSets();

            //- Zone info
            void updateInfoZones();
360

361
362
363
            //- Read zone names for zoneType from file
            wordList readZoneNames(const word& zoneType);

Mark Olesen's avatar
Mark Olesen committed
364
            //- Add objects of Type to paraview array selection
365
366
367
            template<class Type>
            label addToSelection
            (
Mark Olesen's avatar
Mark Olesen committed
368
                vtkDataArraySelection*,
369
                const IOobjectList&,
370
                const string& suffix=string::null
371
372
            );

373
374
            //- Field info
            template<template<class> class patchType, class meshType>
Mark Olesen's avatar
Mark Olesen committed
375
            void updateInfoFields(vtkDataArraySelection*);
376
377

            //- Lagrangian field info
Mark Olesen's avatar
Mark Olesen committed
378
            void updateInfoLagrangianFields();
379
380
381
382
383
384
385


        // Update helper functions

            //- Foam mesh
            void updateFoamMesh();

Mark Olesen's avatar
Mark Olesen committed
386
387
388
            //- Reduce memory footprint after conversion
            void reduceMemory();

389
            //- Volume fields
390
            void updateVolFields(vtkMultiBlockDataSet*);
391
392

            //- Point fields
393
            void updatePointFields(vtkMultiBlockDataSet*);
394
395

            //- Lagrangian fields
396
            void updateLagrangianFields(vtkMultiBlockDataSet*);
397
398
399
400
401


        // Mesh conversion functions

            //- Volume mesh
402
            void convertMeshVolume(vtkMultiBlockDataSet*, int& blockNo);
403
404

            //- Lagrangian mesh
405
            void convertMeshLagrangian(vtkMultiBlockDataSet*, int& blockNo);
406
407

            //- Patch meshes
408
            void convertMeshPatches(vtkMultiBlockDataSet*, int& blockNo);
409
410

            //- Cell zone meshes
411
            void convertMeshCellZones(vtkMultiBlockDataSet*, int& blockNo);
412

413
            //- Face zone meshes
414
            void convertMeshFaceZones(vtkMultiBlockDataSet*, int& blockNo);
415

416
            //- Point zone meshes
417
            void convertMeshPointZones(vtkMultiBlockDataSet*, int& blockNo);
418
419

            //- Cell set meshes
420
            void convertMeshCellSets(vtkMultiBlockDataSet*, int& blockNo);
421
422

            //- Face set meshes
423
            void convertMeshFaceSets(vtkMultiBlockDataSet*, int& blockNo);
424
425

            //- Point set meshes
426
            void convertMeshPointSets(vtkMultiBlockDataSet*, int& blockNo);
427
428
429
430
431


        // Add mesh functions

            //- Add internal mesh/cell set meshes
Mark Olesen's avatar
Mark Olesen committed
432
            vtkUnstructuredGrid* volumeVTKMesh(const fvMesh&, polyDecomp&);
433
434

            //- Add Lagrangian mesh
Mark Olesen's avatar
Mark Olesen committed
435
            vtkPolyData* lagrangianVTKMesh
436
437
            (
                const fvMesh&,
Mark Olesen's avatar
Mark Olesen committed
438
                const word& cloudName
439
440
441
            );

            //- Add patch mesh
Mark Olesen's avatar
Mark Olesen committed
442
            vtkPolyData* patchVTKMesh(const polyPatch&);
443
444

            //- Add face zone mesh
Mark Olesen's avatar
Mark Olesen committed
445
            vtkPolyData* faceZoneVTKMesh
446
447
            (
                const fvMesh&,
Mark Olesen's avatar
Mark Olesen committed
448
                const labelList& faceLabels
449
450
451
            );

            //- Add point zone
Mark Olesen's avatar
Mark Olesen committed
452
            vtkPolyData* pointZoneVTKMesh
453
454
            (
                const fvMesh&,
Mark Olesen's avatar
Mark Olesen committed
455
                const labelList& pointLabels
456
457
458
            );

            //- Add face set mesh
Mark Olesen's avatar
Mark Olesen committed
459
            vtkPolyData* faceSetVTKMesh
460
461
            (
                const fvMesh&,
Mark Olesen's avatar
Mark Olesen committed
462
                const faceSet&
463
464
465
            );

            //- Add point mesh
Mark Olesen's avatar
Mark Olesen committed
466
            vtkPolyData* pointSetVTKMesh
467
468
            (
                const fvMesh&,
Mark Olesen's avatar
Mark Olesen committed
469
                const pointSet&
470
471
            );

472
473
474
475
476
477
478
479
480
481
482
        // Field conversion functions

            //- Convert volume fields
            void convertVolFields(vtkMultiBlockDataSet*);

            //- Convert point fields
            void convertPointFields(vtkMultiBlockDataSet*);

            //- Convert Lagrangian fields
            void convertLagrangianFields(vtkMultiBlockDataSet*);

483
484
485
486

        //- Add the fields in the selected time directory to the selection
        //  lists
        template<class GeoField>
487
        label addObjectsToSelection
488
        (
Mark Olesen's avatar
Mark Olesen committed
489
490
            vtkDataArraySelection*,
            const IOobjectList&,
491
            const string& suffix=string::null
492
493
494
495
496
497
498
499
500
501
        );


        // Convert Foam fields

            //- Volume fields - all types
            template<class Type>
            void convertVolFields
            (
                const fvMesh&,
502
                const PtrList<PrimitivePatchInterpolation<primitivePatch> >&,
Mark Olesen's avatar
Mark Olesen committed
503
                const IOobjectList&,
504
505
506
                vtkMultiBlockDataSet* output
            );

Mark Olesen's avatar
Mark Olesen committed
507
508
509
510
511
            //- Volume field - all selected parts
            template<class Type>
            void convertVolFieldBlock
            (
                const GeometricField<Type, fvPatchField, volMesh>&,
mattijs's avatar
mattijs committed
512
                autoPtr<GeometricField<Type, pointPatchField, pointMesh> >&,
Mark Olesen's avatar
Mark Olesen committed
513
514
515
516
517
                vtkMultiBlockDataSet* output,
                const partInfo& selector,
                const List<polyDecomp>& decompLst
            );

Mark Olesen's avatar
Mark Olesen committed
518
            //- Volume field
519
520
521
522
523
            template<class Type>
            void convertVolField
            (
                const GeometricField<Type, fvPatchField, volMesh>&,
                vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
524
                const partInfo&,
525
                const label datasetNo,
Mark Olesen's avatar
Mark Olesen committed
526
                const polyDecomp&
527
528
529
530
            );

            //- Patch field
            template<class Type>
Mark Olesen's avatar
Mark Olesen committed
531
            void convertPatchField
532
533
534
535
            (
                const word& name,
                const Field<Type>&,
                vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
536
                const partInfo&,
537
538
539
540
541
542
543
544
545
                const label datasetNo
            );

            //- face set/zone field
            template<class Type>
            void convertFaceField
            (
                const GeometricField<Type, fvPatchField, volMesh>&,
                vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
546
                const partInfo&,
547
548
549
550
551
552
553
554
555
556
557
                const label datasetNo,
                const fvMesh&,
                const labelList& faceLabels
            );

            //- face set/zone field
            template<class Type>
            void convertFaceField
            (
                const GeometricField<Type, fvPatchField, volMesh>&,
                vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
558
                const partInfo&,
559
560
561
562
563
564
565
566
567
                const label datasetNo,
                const fvMesh&,
                const faceSet&
            );

            //- Lagrangian fields - all types
            template<class Type>
            void convertLagrangianFields
            (
Mark Olesen's avatar
Mark Olesen committed
568
569
570
                const IOobjectList&,
                vtkMultiBlockDataSet* output,
                const label datasetNo
571
572
            );

Mark Olesen's avatar
Mark Olesen committed
573
            //- Lagrangian field
574
575
576
577
578
            template<class Type>
            void convertLagrangianField
            (
                const IOField<Type>&,
                vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
579
                const partInfo&,
580
581
582
583
584
585
586
                const label datasetNo
            );

            //- Point fields - all types
            template<class Type>
            void convertPointFields
            (
Mark Olesen's avatar
Mark Olesen committed
587
588
589
                const fvMesh&,
                const pointMesh&,
                const IOobjectList&,
590
591
592
                vtkMultiBlockDataSet* output
            );

Mark Olesen's avatar
Mark Olesen committed
593
594
595
596
597
598
599
600
601
602
            //- Point field - all selected parts
            template<class Type>
            void convertPointFieldBlock
            (
                const GeometricField<Type, pointPatchField, pointMesh>&,
                vtkMultiBlockDataSet* output,
                const partInfo& selector,
                const List<polyDecomp>&
            );

Mark Olesen's avatar
Mark Olesen committed
603
            //- Point fields
604
605
606
            template<class Type>
            void convertPointField
            (
Mark Olesen's avatar
Mark Olesen committed
607
608
                const GeometricField<Type, pointPatchField, pointMesh>&,
                const GeometricField<Type, fvPatchField, volMesh>&,
609
                vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
610
611
612
                const partInfo&,
                const label datasetNo,
                const polyDecomp&
613
614
            );

Mark Olesen's avatar
Mark Olesen committed
615
            //- Patch point field
616
617
618
619
            template<class Type>
            void convertPatchPointField
            (
                const word& name,
Mark Olesen's avatar
Mark Olesen committed
620
                const Field<Type>&,
621
                vtkMultiBlockDataSet* output,
Mark Olesen's avatar
Mark Olesen committed
622
                const partInfo&,
623
624
625
626
627
628
                const label datasetNo
            );


       // GUI selection helper functions

Mark Olesen's avatar
Mark Olesen committed
629
630
            //- Only keep what is listed in hashSet
            static void pruneObjectList
Mark Olesen's avatar
Mark Olesen committed
631
632
633
634
635
            (
                IOobjectList&,
                const wordHashSet&
            );

Mark Olesen's avatar
Mark Olesen committed
636
            //- Retrieve the current selections
Mark Olesen's avatar
Mark Olesen committed
637
638
            static wordHashSet getSelected(vtkDataArraySelection*);

Mark Olesen's avatar
Mark Olesen committed
639
640
            //- Retrieve a sub-list of the current selections
            static wordHashSet getSelected
641
            (
Mark Olesen's avatar
Mark Olesen committed
642
                vtkDataArraySelection*,
Mark Olesen's avatar
Mark Olesen committed
643
                const partInfo&
644
645
            );

Mark Olesen's avatar
Mark Olesen committed
646
647
648
649
            //- Retrieve the current selections
            static stringList getSelectedArrayEntries(vtkDataArraySelection*);

            //- Retrieve a sub-list of the current selections
650
651
            static stringList getSelectedArrayEntries
            (
Mark Olesen's avatar
Mark Olesen committed
652
                vtkDataArraySelection*,
Mark Olesen's avatar
Mark Olesen committed
653
                const partInfo&
654
655
656
657
658
            );

            //- Set selection(s)
            static void setSelectedArrayEntries
            (
Mark Olesen's avatar
Mark Olesen committed
659
660
                vtkDataArraySelection*,
                const stringList&
661
662
            );

Mark Olesen's avatar
Mark Olesen committed
663
664
665
            //- Get the first word from the mesh parts selection
            word getPartName(int);

666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686

        //- Disallow default bitwise copy construct
        vtkPV3Foam(const vtkPV3Foam&);

        //- Disallow default bitwise assignment
        void operator=(const vtkPV3Foam&);


public:

    //- Static data members

        ClassName("vtkPV3Foam");


    // Constructors

        //- Construct from components
        vtkPV3Foam
        (
            const char* const FileName,
Mark Olesen's avatar
Mark Olesen committed
687
            vtkPV3FoamReader* reader
688
689
690
691
692
693
694
695
696
697
        );


    //- Destructor

        ~vtkPV3Foam();


    // Member Functions

Mark Olesen's avatar
Mark Olesen committed
698
        //- Update
Mark Olesen's avatar
Mark Olesen committed
699
        void updateInfo();
700

701
702
703
704
705
        void Update
        (
            vtkMultiBlockDataSet* output,
            vtkMultiBlockDataSet* lagrangianOutput
        );
706

mattijs's avatar
mattijs committed
707
708
709
        //- Clean any storage
        void CleanUp();

Mark Olesen's avatar
Mark Olesen committed
710
        //- Allocate and return a list of selected times
711
        //  returns the count via the parameter
Mark Olesen's avatar
Mark Olesen committed
712
        double* findTimes(int& nTimeSteps);
713

Mark Olesen's avatar
Mark Olesen committed
714
715
        //- Add/remove patch names to/from the view
        void renderPatchNames(vtkRenderer*, const bool show);
716

Mark Olesen's avatar
Mark Olesen committed
717
718
719
720
721
        //- set the runTime to the first plausible request time,
        //  returns the timeIndex
        //  sets to "constant" on error
        int setTime(int count, const double requestTimes[]);

722

Mark Olesen's avatar
Mark Olesen committed
723
724
725
726
727
        //- The current time index
        int timeIndex() const
        {
           return timeIndex_;
        }
728

Mark Olesen's avatar
Mark Olesen committed
729

730
731
     // Access

Mark Olesen's avatar
Mark Olesen committed
732
733
        //- Debug information
        void PrintSelf(ostream&, vtkIndent) const;
734

Mark Olesen's avatar
Mark Olesen committed
735
736
737
        //- Simple memory used debugging information
        static void printMemory();

738
739
740
741
742
743
744
745
746
747
748
749
};


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

} // End namespace Foam

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

#endif

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