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 InNamespace 00025 Foam 00026 00027 Description 00028 Gets the indices of (source)particles that have been appended to the 00029 target cloud and maps the lagrangian fields accordingly. 00030 00031 \*---------------------------------------------------------------------------*/ 00032 00033 #ifndef MapLagrangianFields_H 00034 #define MapLagrangianFields_H 00035 00036 #include <OpenFOAM/cloud.H> 00037 #include <OpenFOAM/GeometricField.H> 00038 #include <sampling/meshToMesh.H> 00039 #include <OpenFOAM/IOobjectList.H> 00040 00041 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 00042 00043 namespace Foam 00044 { 00045 00046 //- Gets the indices of (source)particles that have been appended to the 00047 // target cloud and maps the lagrangian fields accordingly. 00048 template<class Type> 00049 void MapLagrangianFields 00050 ( 00051 const string& cloudName, 00052 const IOobjectList& objects, 00053 const meshToMesh& meshToMeshInterp, 00054 const labelList& addParticles 00055 ) 00056 { 00057 const fvMesh& meshTarget = meshToMeshInterp.toMesh(); 00058 00059 IOobjectList fields = objects.lookupClass(IOField<Type>::typeName); 00060 00061 forAllIter(IOobjectList, fields, fieldIter) 00062 { 00063 Info<< " mapping lagrangian field " << fieldIter()->name() << endl; 00064 00065 // Read field (does not need mesh) 00066 IOField<Type> fieldSource(*fieldIter()); 00067 00068 // Map 00069 IOField<Type> fieldTarget 00070 ( 00071 IOobject 00072 ( 00073 fieldIter()->name(), 00074 meshTarget.time().timeName(), 00075 cloud::prefix/cloudName, 00076 meshTarget, 00077 IOobject::NO_READ, 00078 IOobject::NO_WRITE, 00079 false 00080 ), 00081 addParticles.size() 00082 ); 00083 forAll(addParticles, i) 00084 { 00085 fieldTarget[i] = fieldSource[addParticles[i]]; 00086 } 00087 00088 // Write field 00089 fieldTarget.write(); 00090 } 00091 } 00092 00093 00094 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 00095 00096 } // End namespace Foam 00097 00098 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 00099 00100 #endif 00101 00102 // ************************ vim: set sw=4 sts=4 et: ************************ //