ENH: patchCloud: return pTraits<Type>::max for unfound points
[OpenFOAM-1.7.x.git] / applications / utilities / preProcessing / mapFields / MapConsistentVolFields.H
blob41c53e9215477230086c57fd08eaa3de8f8cad70
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  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 // ************************************************************************* //