00001 /*---------------------------------------------------------------------------*\ 00002 ========= | 00003 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox 00004 \\ / O peration | 00005 \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. 00006 \\/ M anipulation | 00007 ------------------------------------------------------------------------------- 00008 License 00009 This file is part of OpenFOAM. 00010 00011 OpenFOAM is free software: you can redistribute it and/or modify it 00012 under the terms of the GNU General Public License as published by 00013 the Free Software Foundation, either version 3 of the License, or 00014 (at your option) any later version. 00015 00016 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT 00017 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00018 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 00019 for more details. 00020 00021 You should have received a copy of the GNU General Public License 00022 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>. 00023 00024 \*---------------------------------------------------------------------------*/ 00025 00026 #include <OpenFOAM/interpolatePointToCell.H> 00027 00028 // * * * * * * * * * * * * * * * Global Functions * * * * * * * * * * * * * // 00029 00030 template<class Type> 00031 Type Foam::interpolatePointToCell 00032 ( 00033 const GeometricField<Type, pointPatchField, pointMesh>& ptf, 00034 const label celli 00035 ) 00036 { 00037 const primitiveMesh& mesh = ptf.mesh()(); 00038 00039 const cell& cFaces = mesh.cells()[celli]; 00040 00041 labelHashSet pointHad(10*cFaces.size()); 00042 00043 Type sum(pTraits<Type>::zero); 00044 00045 forAll(cFaces, i) 00046 { 00047 const face& f = mesh.faces()[cFaces[i]]; 00048 00049 forAll(f, fp) 00050 { 00051 label v = f[fp]; 00052 00053 if (pointHad.insert(v)) 00054 { 00055 sum += ptf[v]; 00056 } 00057 } 00058 } 00059 00060 return sum/pointHad.size(); 00061 } 00062 00063 00064 // ************************ vim: set sw=4 sts=4 et: ************************ //