31#include "passivePositionParticleCloud.H"
42 const fvMesh& srcMesh,
43 const fvMesh& tgtMesh,
44 const label nSrcCells,
45 const mapDistributePolyMesh& distMap
52 const mapDistribute& cellMap = distMap_.cellMap();
55 destinationProcID_ =
labelList(tgtMesh_.nCells(), Pstream::myProcNo());
56 cellMap.reverseDistribute(nSrcCells, destinationProcID_);
58 destinationCell_ =
identity(tgtMesh_.nCells());
59 cellMap.reverseDistribute(nSrcCells, destinationCell_);
71 List<wordList>& objectNames
85 cloudNames.setSize(localCloudDirs.size());
88 cloudNames[i] = localCloudDirs[i];
95 objectNames.setSize(cloudNames.size());
97 for (
const fileName& localCloudName : localCloudDirs)
100 IOobjectList localObjs
107 bool isCloud =
false;
108 if (localObjs.erase(
"coordinates"))
112 if (localObjs.erase(
"positions"))
121 const label cloudi = cloudNames.find(localCloudName);
123 objectNames[cloudi] = localObjs.sortedNames();
139 passivePositionParticleCloud& lpi
144 const label oldLpi = lpi.size();
155 List<IDLList<passivePositionParticle>> particleTransferLists
164 for (passivePositionParticle& ppi : lpi)
166 const label destProcI = destinationProcID_[ppi.cell()];
167 const label destCellI = destinationCell_[ppi.cell()];
169 ppi.cell() = destCellI;
170 destProc[particleI++] = destProcI;
171 particleTransferLists[destProcI].append(lpi.remove(&ppi));
180 forAll(particleTransferLists, procI)
184 if (particleTransferLists[procI].size())
186 UOPstream particleStream(procI, pBufs);
187 particleStream << particleTransferLists[procI];
194 pBufs.finishedSends();
205 passivePositionParticleCloud lagrangianPositions
209 IDLList<passivePositionParticle>()
213 for (
const int proci : pBufs.allProcs())
218 if (pBufs.recvDataCount(proci))
220 UIPstream particleStream(proci, pBufs);
223 IDLList<passivePositionParticle> newParticles
226 passivePositionParticle::iNew(tgtMesh_)
229 for (passivePositionParticle& newp : newParticles)
231 lagrangianPositions.addParticle(newParticles.remove(&newp));
236 if (lagrangianPositions.size())
239 IOPosition<passivePositionParticleCloud>
247 IOPosition<passivePositionParticleCloud>
260 const fileName oldCoords
262 IOPosition<passivePositionParticleCloud>
270 const fileName oldPos
272 IOPosition<passivePositionParticleCloud>
291 nsTransPs[sendProcI] = subMap[sendProcI].size();
297 label constructSize = 0;
298 forAll(constructMap, procI)
307 map[i] = constructSize++;
316 std::move(constructMap)
328 passivePositionParticleCloud lpi(srcMesh_,
cloudName,
false);
330 return distributeLagrangianPositions(lpi);
Various functions to operate on Lists.
void setSize(const label n)
Alias for resize()
label nProcs() const noexcept
Number of ranks associated with PstreamBuffers.
static void combineGather(const List< commsStruct > &comms, T &value, const CombineOp &cop, const int tag, const label comm)
static void combineAllGather(const List< commsStruct > &comms, T &value, const CombineOp &cop, const int tag=UPstream::msgType(), const label comm=UPstream::worldComm)
static void broadcast(Type &value, const label comm=UPstream::worldComm)
static autoPtr< Time > New()
Construct (dummy) Time - no functionObjects or libraries.
static word timeName(const scalar t, const int precision=precision_)
fileName timePath() const
Return current time path.
@ nonBlocking
"nonBlocking"
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
static const word prefix
The prefix to local: lagrangian.
const Time & time() const
Return the top-level database.
Lagrangian field redistributor.
static void findClouds(const fvMesh &, wordList &cloudNames, List< wordList > &objectNames)
autoPtr< mapDistributeBase > distributeLagrangianPositions(passivePositionParticleCloud &cloud) const
Redistribute and write lagrangian positions.
static int verbose_
Output verbosity when writing.
static bool writeLagrangianPositions
virtual const fileName & dbDir() const
Override the objectRegistry dbDir for a single-region case.
int myProcNo() const noexcept
Return processor number.
bool rm(const fileName &file)
Remove a file (or its gz equivalent), returning true if successful.
List< fileName > fileNameList
A List of fileNames.
labelList identity(const label len, label start=0)
Return an identity map of the given length with (map[i] == i)
List< label > labelList
A List of labels.
List< labelList > labelListList
A List of labelList.
fileNameList readDir(const fileName &directory, const fileName::Type type=fileName::FILE, const bool filtergz=true, const bool followLink=true)
Read a directory and return the entries as a fileName List.
labelListList invertOneToMany(const label len, const labelUList &map)
Invert one-to-many map. Unmapped elements will be size 0.
#define forAll(list, i)
Loop across all elements in list.
const word cloudName(propsDict.get< word >("cloud"))