Forward compatibility: flex
[foam-extend-3.2.git] / applications / utilities / parallelProcessing / decomposePar / lagrangianFieldDecomposer.C
blobd9510d103783a77f2456707fc7d93ae5f87a1788
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Description
25     Lagrangian field decomposer.
27 \*---------------------------------------------------------------------------*/
29 #include "lagrangianFieldDecomposer.H"
32 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
34 namespace Foam
37 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
39 // Construct from components
40 lagrangianFieldDecomposer::lagrangianFieldDecomposer
42     const polyMesh& mesh,
43     const polyMesh& procMesh,
44     const labelList& cellProcAddressing,
45     const word& cloudName,
46     const Cloud<indexedParticle>& lagrangianPositions,
47     const List<SLList<indexedParticle*>*>& cellParticles
50     procMesh_(procMesh),
51     positions_(procMesh, cloudName, false),
52     particleIndices_(lagrangianPositions.size())
54     label pi = 0;
56     forAll(cellProcAddressing, procCelli)
57     {
58         label celli = cellProcAddressing[procCelli];
60         if (cellParticles[celli])
61         {
62             SLList<indexedParticle*>& particlePtrs = *cellParticles[celli];
64             forAllIter(SLList<indexedParticle*>, particlePtrs, iter)
65             {
66                 const indexedParticle& ppi = *iter();
67                 particleIndices_[pi++] = ppi.index();
69                 positions_.append
70                 (
71                     new passiveParticle
72                     (
73                         positions_,
74                         ppi.position(),
75                         procCelli
76                     )
77                 );
78             }
79         }
80     }
82     particleIndices_.setSize(pi);
84     IOPosition<passiveParticle>(positions_).write();
88 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
90 } // End namespace Foam
92 // ************************************************************************* //