vtkPV3FoamFields.C 7.45 KB
Newer Older
Mark Olesen's avatar
Mark Olesen committed
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.
Mark Olesen's avatar
Mark Olesen committed
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
34
35
36
37
38
39
40
41
42
43
44
45
46
     \\/     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

Description

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

#include "vtkPV3Foam.H"

// Foam includes
#include "IOobjectList.H"
#include "vtkPV3FoamReader.h"

// VTK includes
#include "vtkDataArraySelection.h"
#include "vtkPolyData.h"
#include "vtkUnstructuredGrid.h"

// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //

#include "vtkPV3FoamVolFields.H"
#include "vtkPV3FoamPointFields.H"
#include "vtkPV3FoamLagrangianFields.H"


Mark Olesen's avatar
Mark Olesen committed
47
void Foam::vtkPV3Foam::pruneObjectList
Mark Olesen's avatar
Mark Olesen committed
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
(
    IOobjectList& objects,
    const wordHashSet& selected
)
{
    // hash all the selected field names
    if (!selected.size())
    {
        objects.clear();
    }

    // only keep selected fields
    forAllIter(IOobjectList, objects, iter)
    {
        if (!selected.found(iter()->name()))
        {
            objects.erase(iter);
        }
    }
}


void Foam::vtkPV3Foam::convertVolFields
(
    vtkMultiBlockDataSet* output
)
{
75
76
    const fvMesh& mesh = *meshPtr_;

Mark Olesen's avatar
Mark Olesen committed
77
78
79
80
81
82
83
84
85
86
87
    wordHashSet selectedFields = getSelected
    (
        reader_->GetVolFieldSelection()
    );

    if (!selectedFields.size())
    {
        return;
    }

    // Get objects (fields) for this time - only keep selected fields
88
    // the region name is already in the mesh db
Mark Olesen's avatar
Mark Olesen committed
89
    IOobjectList objects(mesh, dbPtr_().timeName());
Mark Olesen's avatar
Mark Olesen committed
90
    pruneObjectList(objects, selectedFields);
Mark Olesen's avatar
Mark Olesen committed
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

    if (!objects.size())
    {
        return;
    }

    if (debug)
    {
        Info<< "<beg> Foam::vtkPV3Foam::convertVolFields" << nl
            << "converting Foam volume fields" << endl;
        forAllConstIter(IOobjectList, objects, iter)
        {
            Info<< "  " << iter()->name()
                << " == " << iter()->objectPath() << nl;
        }
        printMemory();
    }


    PtrList<PrimitivePatchInterpolation<primitivePatch> >
        ppInterpList(mesh.boundaryMesh().size());

    forAll(ppInterpList, i)
    {
        ppInterpList.set
        (
            i,
            new PrimitivePatchInterpolation<primitivePatch>
            (
                mesh.boundaryMesh()[i]
            )
        );
    }


    convertVolFields<scalar>
    (
mattijs's avatar
mattijs committed
128
        mesh, ppInterpList, objects, output
Mark Olesen's avatar
Mark Olesen committed
129
130
131
    );
    convertVolFields<vector>
    (
mattijs's avatar
mattijs committed
132
        mesh, ppInterpList, objects, output
Mark Olesen's avatar
Mark Olesen committed
133
134
135
    );
    convertVolFields<sphericalTensor>
    (
mattijs's avatar
mattijs committed
136
        mesh, ppInterpList, objects, output
Mark Olesen's avatar
Mark Olesen committed
137
138
139
    );
    convertVolFields<symmTensor>
    (
mattijs's avatar
mattijs committed
140
        mesh, ppInterpList, objects, output
Mark Olesen's avatar
Mark Olesen committed
141
142
143
    );
    convertVolFields<tensor>
    (
mattijs's avatar
mattijs committed
144
        mesh, ppInterpList, objects, output
Mark Olesen's avatar
Mark Olesen committed
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
    );

    if (debug)
    {
        Info<< "<end> Foam::vtkPV3Foam::convertVolFields" << endl;
        printMemory();
    }
}


void Foam::vtkPV3Foam::convertPointFields
(
    vtkMultiBlockDataSet* output
)
{
160
161
    const fvMesh& mesh = *meshPtr_;

Mark Olesen's avatar
Mark Olesen committed
162
163
164
165
166
167
168
169
170
171
172
    wordHashSet selectedFields = getSelected
    (
        reader_->GetPointFieldSelection()
    );

    if (!selectedFields.size())
    {
        return;
    }

    // Get objects (fields) for this time - only keep selected fields
173
    // the region name is already in the mesh db
Mark Olesen's avatar
Mark Olesen committed
174
    IOobjectList objects(mesh, dbPtr_().timeName());
Mark Olesen's avatar
Mark Olesen committed
175
    pruneObjectList(objects, selectedFields);
Mark Olesen's avatar
Mark Olesen committed
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
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

    if (!objects.size())
    {
        return;
    }

    if (debug)
    {
        Info<< "<beg> Foam::vtkPV3Foam::convertPointFields" << nl
            << "converting Foam volume fields" << endl;
        forAllConstIter(IOobjectList, objects, iter)
        {
            Info<< "  " << iter()->name()
                << " == " << iter()->objectPath() << nl;
        }
        printMemory();
    }

    // Construct interpolation on the raw mesh
    pointMesh pMesh(mesh);


    convertPointFields<scalar>
    (
        mesh, pMesh, objects, output
    );
    convertPointFields<vector>
    (
        mesh, pMesh, objects, output
    );
    convertPointFields<sphericalTensor>
    (
        mesh, pMesh, objects, output
    );
    convertPointFields<symmTensor>
    (
        mesh, pMesh, objects, output
    );
    convertPointFields<tensor>
    (
        mesh, pMesh, objects, output
    );

    if (debug)
    {
        Info<< "<end> Foam::vtkPV3Foam::convertPointFields" << endl;
        printMemory();
    }
}


void Foam::vtkPV3Foam::convertLagrangianFields
(
    vtkMultiBlockDataSet* output
)
{
Mark Olesen's avatar
Mark Olesen committed
232
233
234
    partInfo& selector = partInfoLagrangian_;
    const fvMesh& mesh = *meshPtr_;

Mark Olesen's avatar
Mark Olesen committed
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
    wordHashSet selectedFields = getSelected
    (
        reader_->GetLagrangianFieldSelection()
    );

    if (!selectedFields.size())
    {
        return;
    }

    if (debug)
    {
        Info<< "<beg> Foam::vtkPV3Foam::convertLagrangianFields" << endl;
        printMemory();
    }

Mark Olesen's avatar
Mark Olesen committed
251
    for (int partId = selector.start(); partId < selector.end(); ++partId)
Mark Olesen's avatar
Mark Olesen committed
252
    {
Mark Olesen's avatar
Mark Olesen committed
253
254
        const word  cloudName = getPartName(partId);
        const label datasetNo = partDataset_[partId];
Mark Olesen's avatar
Mark Olesen committed
255

Mark Olesen's avatar
Mark Olesen committed
256
        if (!partStatus_[partId] || datasetNo < 0)
Mark Olesen's avatar
Mark Olesen committed
257
258
259
260
        {
            continue;
        }

261

Mark Olesen's avatar
Mark Olesen committed
262
263
        // Get the Lagrangian fields for this time and this cloud
        // but only keep selected fields
264
        // the region name is already in the mesh db
Mark Olesen's avatar
Mark Olesen committed
265
266
267
268
        IOobjectList objects
        (
            mesh,
            dbPtr_().timeName(),
269
            cloud::prefix/cloudName
Mark Olesen's avatar
Mark Olesen committed
270
        );
Mark Olesen's avatar
Mark Olesen committed
271
        pruneObjectList(objects, selectedFields);
Mark Olesen's avatar
Mark Olesen committed
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
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322

        if (!objects.size())
        {
            continue;
        }

        if (debug)
        {
            Info<< "converting Foam lagrangian fields" << nl;
            forAllConstIter(IOobjectList, objects, iter)
            {
                Info<< "  " << iter()->name()
                    << " == " << iter()->objectPath() << nl;
            }
        }

        convertLagrangianFields<label>
        (
            objects, output, datasetNo
        );
        convertLagrangianFields<scalar>
        (
            objects, output, datasetNo
        );
        convertLagrangianFields<vector>
        (
            objects, output, datasetNo
        );
        convertLagrangianFields<sphericalTensor>
        (
            objects, output, datasetNo
        );
        convertLagrangianFields<symmTensor>
        (
            objects, output, datasetNo
        );
        convertLagrangianFields<tensor>
        (
            objects, output, datasetNo
        );
    }

    if (debug)
    {
        Info<< "<end> Foam::vtkPV3Foam::convertLagrangianFields" << endl;
        printMemory();
    }
}


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