Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / dynamicMesh / fvMeshAdder / fvMeshAdder.C
blob5df785840620abb0743146c01ba3a5c7bc7b6740
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-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 #include "fvMesh.H"
27 #include "fvMeshAdder.H"
28 #include "faceCoupleInfo.H"
29 #include "fvMesh.H"
31 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
33 //- Calculate map from new patch faces to old patch faces. -1 where
34 //  could not map.
35 Foam::labelList Foam::fvMeshAdder::calcPatchMap
37     const label oldStart,
38     const label oldSize,
39     const labelList& oldToNew,
40     const polyPatch& newPatch,
41     const label unmappedValue
44     labelList newToOld(newPatch.size(), unmappedValue);
46     label newStart = newPatch.start();
47     label newSize = newPatch.size();
49     for (label i = 0; i < oldSize; i++)
50     {
51         label newFaceI = oldToNew[oldStart+i];
53         if (newFaceI >= newStart && newFaceI < newStart+newSize)
54         {
55             newToOld[newFaceI-newStart] = i;
56         }
57     }
58     return newToOld;
62 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
64 // Inplace add mesh1 to mesh0
65 Foam::autoPtr<Foam::mapAddedPolyMesh> Foam::fvMeshAdder::add
67     fvMesh& mesh0,
68     const fvMesh& mesh1,
69     const faceCoupleInfo& coupleInfo,
70     const bool validBoundary
73     mesh0.clearOut();
75     // Resulting merged mesh (polyMesh only!)
76     autoPtr<mapAddedPolyMesh> mapPtr
77     (
78         polyMeshAdder::add
79         (
80             mesh0,
81             mesh1,
82             coupleInfo,
83             validBoundary
84         )
85     );
87     // Adjust the fvMesh part.
88     const polyBoundaryMesh& patches = mesh0.boundaryMesh();
90     fvBoundaryMesh& fvPatches = const_cast<fvBoundaryMesh&>(mesh0.boundary());
91     fvPatches.setSize(patches.size());
92     forAll(patches, patchI)
93     {
94         fvPatches.set(patchI, fvPatch::New(patches[patchI], fvPatches));
95     }
97     // Do the mapping of the stored fields
98     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
99     fvMeshAdder::MapVolFields<scalar>(mapPtr, mesh0, mesh1);
100     fvMeshAdder::MapVolFields<vector>(mapPtr, mesh0, mesh1);
101     fvMeshAdder::MapVolFields<sphericalTensor>(mapPtr, mesh0, mesh1);
102     fvMeshAdder::MapVolFields<symmTensor>(mapPtr, mesh0, mesh1);
103     fvMeshAdder::MapVolFields<tensor>(mapPtr, mesh0, mesh1);
105     fvMeshAdder::MapSurfaceFields<scalar>(mapPtr, mesh0, mesh1);
106     fvMeshAdder::MapSurfaceFields<vector>(mapPtr, mesh0, mesh1);
107     fvMeshAdder::MapSurfaceFields<sphericalTensor>(mapPtr, mesh0, mesh1);
108     fvMeshAdder::MapSurfaceFields<symmTensor>(mapPtr, mesh0, mesh1);
109     fvMeshAdder::MapSurfaceFields<tensor>(mapPtr, mesh0, mesh1);
111     return mapPtr;
115 // ************************************************************************* //