1 /*---------------------------------------------------------------------------*\
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
5 \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
7 -------------------------------------------------------------------------------
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
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 "CollidingParcel.H"
27 #include "IOstreams.H"
30 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32 template<class ParcelType>
33 Foam::string Foam::CollidingParcel<ParcelType>::propHeader =
34 ParcelType::propHeader
35 + " collisionRecordsPairAccessed"
36 + " collisionRecordsPairOrigProcOfOther"
37 + " collisionRecordsPairOrigIdOfOther"
38 + " (collisionRecordsPairData)"
39 + " collisionRecordsWallAccessed"
40 + " collisionRecordsWallPRel"
41 + " (collisionRecordsWallData)";
44 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
46 template<class ParcelType>
47 Foam::CollidingParcel<ParcelType>::CollidingParcel
54 ParcelType(mesh, is, readFields),
59 is >> collisionRecords_;
62 // Check state of Istream
65 "CollidingParcel<ParcelType>::Collisions"
66 "(const polyMesh&, Istream&, bool)"
71 template<class ParcelType>
72 template<class CloudType>
73 void Foam::CollidingParcel<ParcelType>::readFields(CloudType& c)
80 ParcelType::readFields(c);
82 labelFieldCompactIOField collisionRecordsPairAccessed
84 c.fieldIOobject("collisionRecordsPairAccessed", IOobject::MUST_READ)
86 c.checkFieldFieldIOobject(c, collisionRecordsPairAccessed);
88 labelFieldCompactIOField collisionRecordsPairOrigProcOfOther
92 "collisionRecordsPairOrigProcOfOther",
96 c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther);
98 labelFieldCompactIOField collisionRecordsPairOrigIdOfOther
102 "collisionRecordsPairOrigIdOfOther",
106 c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther);
108 pairDataFieldCompactIOField collisionRecordsPairData
110 c.fieldIOobject("collisionRecordsPairData", IOobject::MUST_READ)
112 c.checkFieldFieldIOobject(c, collisionRecordsPairData);
114 labelFieldCompactIOField collisionRecordsWallAccessed
116 c.fieldIOobject("collisionRecordsWallAccessed", IOobject::MUST_READ)
118 c.checkFieldFieldIOobject(c, collisionRecordsWallAccessed);
120 vectorFieldCompactIOField collisionRecordsWallPRel
122 c.fieldIOobject("collisionRecordsWallPRel", IOobject::MUST_READ)
124 c.checkFieldFieldIOobject(c, collisionRecordsWallPRel);
126 wallDataFieldCompactIOField collisionRecordsWallData
128 c.fieldIOobject("collisionRecordsWallData", IOobject::MUST_READ)
130 c.checkFieldFieldIOobject(c, collisionRecordsWallData);
134 forAllIter(typename CloudType, c, iter)
136 CollidingParcel<ParcelType>& p = iter();
138 p.collisionRecords_ = collisionRecordList
140 collisionRecordsPairAccessed[i],
141 collisionRecordsPairOrigProcOfOther[i],
142 collisionRecordsPairOrigIdOfOther[i],
143 collisionRecordsPairData[i],
144 collisionRecordsWallAccessed[i],
145 collisionRecordsWallPRel[i],
146 collisionRecordsWallData[i]
154 template<class ParcelType>
155 template<class CloudType>
156 void Foam::CollidingParcel<ParcelType>::writeFields(const CloudType& c)
158 ParcelType::writeFields(c);
162 labelFieldCompactIOField collisionRecordsPairAccessed
164 c.fieldIOobject("collisionRecordsPairAccessed", IOobject::NO_READ),
167 labelFieldCompactIOField collisionRecordsPairOrigProcOfOther
171 "collisionRecordsPairOrigProcOfOther",
176 labelFieldCompactIOField collisionRecordsPairOrigIdOfOther
178 c.fieldIOobject("collisionRecordsPairOrigIdOfOther", IOobject::NO_READ),
181 pairDataFieldCompactIOField collisionRecordsPairData
183 c.fieldIOobject("collisionRecordsPairData", IOobject::NO_READ),
186 labelFieldCompactIOField collisionRecordsWallAccessed
188 c.fieldIOobject("collisionRecordsWallAccessed", IOobject::NO_READ),
191 vectorFieldCompactIOField collisionRecordsWallPRel
193 c.fieldIOobject("collisionRecordsWallPRel", IOobject::NO_READ),
196 wallDataFieldCompactIOField collisionRecordsWallData
198 c.fieldIOobject("collisionRecordsWallData", IOobject::NO_READ),
204 forAllConstIter(typename CloudType, c, iter)
206 const CollidingParcel<ParcelType>& p = iter();
208 collisionRecordsPairAccessed[i] = p.collisionRecords().pairAccessed();
209 collisionRecordsPairOrigProcOfOther[i] =
210 p.collisionRecords().pairOrigProcOfOther();
211 collisionRecordsPairOrigIdOfOther[i] =
212 p.collisionRecords().pairOrigIdOfOther();
213 collisionRecordsPairData[i] = p.collisionRecords().pairData();
214 collisionRecordsWallAccessed[i] = p.collisionRecords().wallAccessed();
215 collisionRecordsWallPRel[i] = p.collisionRecords().wallPRel();
216 collisionRecordsWallData[i] = p.collisionRecords().wallData();
221 collisionRecordsPairAccessed.write();
222 collisionRecordsPairOrigProcOfOther.write();
223 collisionRecordsPairOrigIdOfOther.write();
224 collisionRecordsPairData.write();
225 collisionRecordsWallAccessed.write();
226 collisionRecordsWallPRel.write();
227 collisionRecordsWallData.write();
231 // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
233 template<class ParcelType>
234 Foam::Ostream& Foam::operator<<
237 const CollidingParcel<ParcelType>& p
240 if (os.format() == IOstream::ASCII)
242 os << static_cast<const ParcelType&>(p)
243 << token::SPACE << p.collisionRecords();
247 os << static_cast<const ParcelType&>(p)
248 << p.collisionRecords();
251 // Check state of Ostream
254 "Ostream& operator<<(Ostream&, const CollidingParcel<ParcelType>&)"
261 // ************************************************************************* //