ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / mesh / autoMesh / autoHexMesh / trackedParticle / trackedParticle.C
blob35b32de3f88c492663cc6081cf8f1c697d3b5e7c
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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
13     the Free Software Foundation, either version 3 of the License, or
14     (at your 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, see <http://www.gnu.org/licenses/>.
24 \*----------------------------------------------------------------------------*/
26 #include "trackedParticle.H"
28 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
30 Foam::trackedParticle::trackedParticle
32     const polyMesh& mesh,
33     const vector& position,
34     const label cellI,
35     const label tetFaceI,
36     const label tetPtI,
37     const point& end,
38     const label level,
39     const label i,
40     const label j
43     particle(mesh, position, cellI, tetFaceI, tetPtI),
44     end_(end),
45     level_(level),
46     i_(i),
47     j_(j)
51 Foam::trackedParticle::trackedParticle
53     const polyMesh& mesh,
54     Istream& is,
55     bool readFields
58     particle(mesh, is, readFields)
60     if (readFields)
61     {
62         if (is.format() == IOstream::ASCII)
63         {
64             is >> end_;
65             level_ = readLabel(is);
66             i_ = readLabel(is);
67             j_ = readLabel(is);
68         }
69         else
70         {
71             is.read
72             (
73                 reinterpret_cast<char*>(&end_),
74                 sizeof(end_) + sizeof(level_) + sizeof(i_) + sizeof(j_)
75             );
76         }
77     }
79     // Check state of Istream
80     is.check
81     (
82         "trackedParticle::trackedParticle"
83         "(const Cloud<trackedParticle>&, Istream&, bool)"
84     );
88 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
90 bool Foam::trackedParticle::move
92     trackingData& td,
93     const scalar trackedParticle
96     td.switchProcessor = false;
97     td.keepParticle = true;
99     scalar tEnd = (1.0 - stepFraction())*trackedParticle;
100     scalar dtMax = tEnd;
102     while (td.keepParticle && !td.switchProcessor && tEnd > SMALL)
103     {
104         // set the lagrangian time-step
105         scalar dt = min(dtMax, tEnd);
107         // mark visited cell with max level.
108         td.maxLevel()[cell()] = max(td.maxLevel()[cell()], level_);
110         dt *= trackToFace(end_, td);
112         tEnd -= dt;
113         stepFraction() = 1.0 - tEnd/trackedParticle;
114     }
116     return td.keepParticle;
120 bool Foam::trackedParticle::hitPatch
122     const polyPatch&,
123     trackingData& td,
124     const label patchI,
125     const scalar trackFraction,
126     const tetIndices& tetIs
129     return false;
133 void Foam::trackedParticle::hitWedgePatch
135     const wedgePolyPatch&,
136     trackingData& td
139     // Remove particle
140     td.keepParticle = false;
144 void Foam::trackedParticle::hitSymmetryPatch
146     const symmetryPolyPatch&,
147     trackingData& td
150     // Remove particle
151     td.keepParticle = false;
155 void Foam::trackedParticle::hitCyclicPatch
157     const cyclicPolyPatch&,
158     trackingData& td
161     // Remove particle
162     td.keepParticle = false;
166 void Foam::trackedParticle::hitProcessorPatch
168     const processorPolyPatch&,
169     trackingData& td
172     // Remove particle
173     td.switchProcessor = true;
177 void Foam::trackedParticle::hitWallPatch
179     const wallPolyPatch& wpp,
180     trackingData& td,
181     const tetIndices&
184     // Remove particle
185     td.keepParticle = false;
189 void Foam::trackedParticle::hitPatch
191     const polyPatch& wpp,
192     trackingData& td
195     // Remove particle
196     td.keepParticle = false;
200 // * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
202 Foam::Ostream& Foam::operator<<(Ostream& os, const trackedParticle& p)
204     if (os.format() == IOstream::ASCII)
205     {
206         os  << static_cast<const particle&>(p)
207             << token::SPACE << p.end_
208             << token::SPACE << p.level_
209             << token::SPACE << p.i_
210             << token::SPACE << p.j_;
211     }
212     else
213     {
214         os  << static_cast<const particle&>(p);
215         os.write
216         (
217             reinterpret_cast<const char*>(&p.end_),
218             sizeof(p.end_) + sizeof(p.level_) + sizeof(p.i_) + sizeof(p.j_)
219         );
220     }
222     // Check state of Ostream
223     os.check("Ostream& operator<<(Ostream&, const trackedParticle&)");
225     return os;
229 // ************************************************************************* //