FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

MapLagrangianFields.H

Go to the documentation of this file.
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: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines