initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / applications / utilities / parallelProcessing / decomposePar / lagrangianFieldDecomposer.C
blob5d8a7f4301c9463cb1d56eccf1a7a2ddcc41b083
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Description
26     Lagrangian field decomposer.
28 \*---------------------------------------------------------------------------*/
30 #include "lagrangianFieldDecomposer.H"
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 namespace Foam
38 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
40 // Construct from components
41 lagrangianFieldDecomposer::lagrangianFieldDecomposer
43     const polyMesh& mesh,
44     const polyMesh& procMesh,
45     const labelList& cellProcAddressing,
46     const word& cloudName,
47     const Cloud<indexedParticle>& lagrangianPositions,
48     const List<SLList<indexedParticle*>*>& cellParticles
51     procMesh_(procMesh),
52     positions_(procMesh, cloudName, false),
53     particleIndices_(lagrangianPositions.size())
55     label pi = 0;
57     forAll(cellProcAddressing, procCelli)
58     {
59         label celli = cellProcAddressing[procCelli];
61         if (cellParticles[celli])
62         {
63             SLList<indexedParticle*>& particlePtrs = *cellParticles[celli];
65             forAllIter(SLList<indexedParticle*>, particlePtrs, iter)
66             {
67                 const indexedParticle& ppi = *iter();
68                 particleIndices_[pi++] = ppi.index();
70                 positions_.append
71                 (
72                     new passiveParticle
73                     (
74                         positions_,
75                         ppi.position(),
76                         procCelli
77                     )
78                 );
79             }
80         }
81     }
83     particleIndices_.setSize(pi);
85     IOPosition<passiveParticle>(positions_).write();
89 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
91 } // End namespace Foam
93 // ************************************************************************* //