1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
7 -------------------------------------------------------------------------------
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
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 \*---------------------------------------------------------------------------*/
27 #include "fvMeshAdder.H"
28 #include "faceCoupleInfo.H"
31 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
33 //- Calculate map from new patch faces to old patch faces. -1 where
35 Foam::labelList Foam::fvMeshAdder::calcPatchMap
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++)
51 label newFaceI = oldToNew[oldStart+i];
53 if (newFaceI >= newStart && newFaceI < newStart+newSize)
55 newToOld[newFaceI-newStart] = i;
62 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
64 // Inplace add mesh1 to mesh0
65 Foam::autoPtr<Foam::mapAddedPolyMesh> Foam::fvMeshAdder::add
69 const faceCoupleInfo& coupleInfo,
70 const bool validBoundary
75 // Resulting merged mesh (polyMesh only!)
76 autoPtr<mapAddedPolyMesh> mapPtr
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)
94 fvPatches.set(patchI, fvPatch::New(patches[patchI], fvPatches));
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);
115 // ************************************************************************* //