Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / applications / utilities / preProcessing / mapFields / MapConsistentVolFields.H
blob3a0dfacbd46c59cbfc5e861fb85141052375ac12
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 #ifndef MapConsistentVolFields_H
27 #define MapConsistentVolFields_H
29 #include "GeometricField.H"
30 #include "meshToMesh.H"
31 #include "IOobjectList.H"
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 namespace Foam
38 template<class Type>
39 void MapConsistentVolFields
41     const IOobjectList& objects,
42     const meshToMesh& meshToMeshInterp
45     const fvMesh& meshSource = meshToMeshInterp.fromMesh();
46     const fvMesh& meshTarget = meshToMeshInterp.toMesh();
48     word fieldClassName
49     (
50         GeometricField<Type, fvPatchField, volMesh>::typeName
51     );
53     IOobjectList fields = objects.lookupClass(fieldClassName);
55     for
56     (
57         IOobjectList::iterator fieldIter = fields.begin();
58         fieldIter != fields.end();
59         ++fieldIter
60     )
61     {
62         Info<< "    interpolating " << fieldIter()->name()
63             << endl;
65         // Read field
66         GeometricField<Type, fvPatchField, volMesh> fieldSource
67         (
68             *fieldIter(),
69             meshSource
70         );
72         IOobject fieldTargetIOobject
73         (
74             fieldIter()->name(),
75             meshTarget.time().timeName(),
76             meshTarget,
77             IOobject::MUST_READ,
78             IOobject::AUTO_WRITE
79         );
81         if (fieldTargetIOobject.headerOk())
82         {
83             // Read fieldTarget
84             GeometricField<Type, fvPatchField, volMesh> fieldTarget
85             (
86                 fieldTargetIOobject,
87                 meshTarget
88             );
90             // Interpolate field
91             meshToMeshInterp.interpolate
92             (
93                 fieldTarget,
94                 fieldSource,
95                 meshToMesh::INTERPOLATE
96             );
98             // Write field
99             fieldTarget.write();
100         }
101         else
102         {
103             fieldTargetIOobject.readOpt() = IOobject::NO_READ;
105             // Interpolate field
106             GeometricField<Type, fvPatchField, volMesh> fieldTarget
107             (
108                 fieldTargetIOobject,
109                 meshToMeshInterp.interpolate
110                 (
111                     fieldSource,
112                     meshToMesh::INTERPOLATE
113                 )
114             );
116             // Write field
117             fieldTarget.write();
118         }
119     }
123 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
125 } // End namespace Foam
127 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
129 #endif
131 // ************************************************************************* //