Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / applications / utilities / parallelProcessing / reconstructParMesh / reconstructLagrangianFields.C
blobac590379fe8b3d89d65432cd7cda18029029c7aa
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 \*---------------------------------------------------------------------------*/
26 #include "IOField.H"
27 #include "foamTime.H"
29 // * * * * * * * * * * * * * * * Global Functions  * * * * * * * * * * * * * //
31 template<class Type>
32 Foam::tmp<Foam::IOField<Type> > Foam::reconstructLagrangianField
34     const word& cloudName,
35     const polyMesh& mesh,
36     const PtrList<fvMesh>& meshes,
37     const word& fieldName
40     // Construct empty field on mesh
41     tmp<IOField<Type> > tfield
42     (
43         new IOField<Type>
44         (
45             IOobject
46             (
47                 fieldName,
48                 mesh.time().timeName(),
49                 cloud::prefix/cloudName,
50                 mesh,
51                 IOobject::NO_READ,
52                 IOobject::NO_WRITE
53             ),
54             Field<Type>(0)
55         )
56     );
57     Field<Type>& field = tfield();
59     forAll(meshes, i)
60     {
61         // Check object on local mesh
62         IOobject localIOobject
63         (
64             fieldName,
65             meshes[i].time().timeName(),
66             cloud::prefix/cloudName,
67             meshes[i],
68             IOobject::MUST_READ,
69             IOobject::NO_WRITE
70         );
72         if (localIOobject.headerOk())
73         {
74             IOField<Type> fieldi(localIOobject);
76             label offset = field.size();
77             field.setSize(offset + fieldi.size());
79             forAll(fieldi, j)
80             {
81                 field[offset + j] = fieldi[j];
82             }
83         }
84     }
86     return tfield;
90 template<class Type>
91 void Foam::reconstructLagrangianFields
93     const word& cloudName,
94     const polyMesh& mesh,
95     const PtrList<fvMesh>& meshes,
96     const IOobjectList& objects
99     word fieldClassName(IOField<Type>::typeName);
101     IOobjectList fields = objects.lookupClass(fieldClassName);
103     if (fields.size())
104     {
105         Info<< "    Reconstructing lagrangian "
106             << fieldClassName << "s\n" << endl;
108         forAllIter(IOobjectList, fields, fieldIter)
109         {
110             Info<< "        " << fieldIter()->name() << endl;
111             reconstructLagrangianField<Type>
112             (
113                 cloudName,
114                 mesh,
115                 meshes,
116                 fieldIter()->name()
117             )().write();
118         }
120         Info<< endl;
121     }
125 // ************************************************************************* //