mus_particle_comm_module contains the routines used for communication of particle data between processes
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | target | :: | particleGroup |
Array of particles |
||
| type(mus_scheme_type), | intent(inout) | :: | scheme |
Scheme for access to leveldescriptor |
||
| type(mus_geom_type), | intent(in) | :: | geometry |
Geometry for access to tree |
||
| type(mus_param_type), | intent(in) | :: | params |
Params for access to dt, dx, etc. |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | target | :: | particleGroup |
Array of particles |
||
| integer, | intent(in) | :: | nProcs |
Number of processes to communicate with |
||
| integer, | intent(in) | :: | maxParticles |
Maximum number of particles that can be held in communication buffer |
If a particle is removed from the global domain (e.g. after colliding with an open boundary) then exchangeParticlesToRemove will send messages informing all other processes that this particle should be removed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
If a particle is removed from the global domain (e.g. after colliding with an open boundary) then exchangeParticlesToRemove will send messages informing all other processes that this particle should be removed.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeForces send force contributions from each process on which a particle exists to the particle owner. The total hydrodynamic force is then computed by the particle owner as the sum of all the force contributions (which physically are the surface forces from the part of the particle surface handled by each process). The owner then updates particle velocity in a subsequent call to a different routine. For momentum-exchange method only!
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
addCollisionForceToBuffer adds DEM collision force Fcoll to the force buffer sent to particle with id particleID on rank recvRankIndex.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | particleGroup |
particleGroup of this process |
||
| integer | :: | recvRankIndex |
Index of receiving rank in particleGroup%send%buf_force(recvRankIndex) |
|||
| real(kind=rk), | intent(in) | :: | Fcoll(3) |
Collision force to add to buffer |
||
| integer, | intent(in) | :: | particleID |
ID of particle to which collision force should be applied |
DEM_exchangeForces sends DEM collision force contributions from collisions that cannot be resolved by the receiving process. The send force buffers in this case must already be filled in the DEM collision-handling routines!
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
DEM_exchangeForces sends DEM collision force contributions from collisions that cannot be resolved by the receiving process. The send force buffers in this case must already be filled in the DEM collision-handling routines!
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
DEM_exchangeWallPositions sends wall position sums close to a particle as detected on each process to the particle owner, which averages the results to get one average wall position Upon termination of this routine particle%rwall for all particles which I own should be set correctly.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
DEM_exchangeWallPositions sends wall position sums close to a particle as detected on each process to the particle owner, which averages the results to get one average wall position Upon termination of this routine particle%rwall for all particles which I own should be set correctly.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangePositions exchanges particles continuous positions after they have been updated by the particle owner. Each process sends position updates for particles they own and receives updates for particles which they do not own, but that do exist in their particleGroup.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangePositions exchanges particles continuous positions after they have been updated by the particle owner. Each process sends position updates for particles they own and receives updates for particles which they do not own, but that do exist in their particleGroup.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeVelocities exchanges particles continuous velocities after they have been updated by the particle owner. Each process sends velocity updates for particles they own and receives updates for particles which they do not own, but that do exist in their particleGroup.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeVelocities exchanges particles continuous velocities after they have been updated by the particle owner. Each process sends velocity updates for particles they own and receives updates for particles which they do not own, but that do exist in their particleGroup.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeHydroForces_DPS exchanges particles hydrodynamic forces after they have been updated by the particle owner. Each process sends force updates for particles they own and receives updates for particles which they do not own, but that do exist in their particleGroup.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeParticleStates is used to exchange particle (continuous) position and velocity as well as the integer coordOfOrigin. This is necessary for (for example) the collision handling routines
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeNewParticles sends all the data needed to initialize a particle on a process. This is needed when a particle travels from one process to another. The data is used to add the particle to the receiving process particleGroup. This only creates a continuous representation of the particle on the receiving process. A subsequent call to a different routine then maps this to the discrete representation in the form of elements in the exclusionList.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeNewParticles sends all the data needed to initialize a particle on a process. This is needed when a particle travels from one process to another. The data is used to add the particle to the receiving process particleGroup. This only creates a continuous representation of the particle on the receiving process. A subsequent call to a different routine then maps this to the discrete representation in the form of elements in the exclusionList.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |
exchangeMomInc_DPS send the accumulated momentum transfer FROM particles TO fluid from a particle's previous owner to its new owner.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_group_type), | intent(inout) | :: | this |
particleGroup of this process |
||
| type(mus_particles_communication_type), | intent(inout) | :: | send |
Communication type for sending force contributions |
||
| type(mus_particles_communication_type), | intent(inout) | :: | recv |
Communication type for receiving force contributions |
||
| integer, | intent(in) | :: | comm |
MPI communicator |
||
| integer, | intent(in) | :: | myRank |
Rank of this process |
||
| integer, | intent(in) | :: | message_flag |
Flag for message (in Musubi this is just iLevel, don't think we really need this here) |