/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright held by original author \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA \*---------------------------------------------------------------------------*/ #include "pointFieldReconstructor.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::pointFieldReconstructor::pointFieldReconstructor ( const pointMesh& mesh, const PtrList& procMeshes, const PtrList& pointProcAddressing, const PtrList& boundaryProcAddressing ) : mesh_(mesh), procMeshes_(procMeshes), pointProcAddressing_(pointProcAddressing), boundaryProcAddressing_(boundaryProcAddressing), patchPointAddressing_(procMeshes.size()) { // Inverse-addressing of the patch point labels. labelList pointMap(mesh_.size(), -1); // Create the pointPatch addressing forAll(procMeshes_, proci) { const pointMesh& procMesh = procMeshes_[proci]; patchPointAddressing_[proci].setSize(procMesh.boundary().size()); forAll(procMesh.boundary(), patchi) { if (boundaryProcAddressing_[proci][patchi] >= 0) { labelList& procPatchAddr = patchPointAddressing_[proci][patchi]; procPatchAddr.setSize(procMesh.boundary()[patchi].size(), -1); const labelList& patchPointLabels = mesh_.boundary()[boundaryProcAddressing_[proci][patchi]] .meshPoints(); // Create the inverse-addressing of the patch point labels. forAll (patchPointLabels, pointi) { pointMap[patchPointLabels[pointi]] = pointi; } const labelList& procPatchPoints = procMesh.boundary()[patchi].meshPoints(); forAll (procPatchPoints, pointi) { procPatchAddr[pointi] = pointMap [ pointProcAddressing_[proci][procPatchPoints[pointi]] ]; } if (procPatchAddr.size() && min(procPatchAddr) < 0) { FatalErrorIn ( "pointFieldReconstructor::pointFieldReconstructor" "(\n" " const pointMesh& mesh,\n" " const PtrList& procMeshes,\n" " const PtrList& pointProcAddressing,\n" " const PtrList& " "boundaryProcAddressing\n" ")" ) << "Incomplete patch point addressing" << abort(FatalError); } } } } } // ************************************************************************* //