Provides the data type for the moment exchange particles
Routine for allocating the existsOnProc, addToProc and removeFromProc masks used to determine when particles should be sent over to new processes or which processes need to receive position, velocity updates etc.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_MEM_type), | intent(inout) | :: | particle |
Particle to initialize |
||
| integer | :: | nProcs |
Number of processes to communicate particle data with |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | particleID | ||||
| integer, | public | :: | owner | ||||
| integer, | public | :: | previousOwner | = | -1 |
Process who was owner in last time step. We need this for the averaging of forces over two time steps |
|
| logical, | public, | allocatable | :: | existsOnProc(:) | |||
| logical, | public, | allocatable | :: | addToProc(:) | |||
| logical, | public, | allocatable | :: | removeFromProc(:) | |||
| logical, | public | :: | newForMe | = | .FALSE. |
Logical which tells us whether to initialize this particle or not is set to true only immediately after receiving this particle from a neighboring process |
|
| logical, | public | :: | hasCollided | = | .FALSE. |
hasCollided tells us whether particle has just had its velocity modified in a collision and that this information needs to be sent to other processes |
|
| logical, | public | :: | removeParticle_global | = | .FALSE. |
removeParticle indicates that this particle needs to be removed after e.g. hitting an open boundary. This information is first sent to all other procs that know about this particle, then the particle is actually removed from the particleGroup. |
|
| real(kind=rk), | public | :: | radius | ||||
| real(kind=rk), | public | :: | mass | ||||
| real(kind=rk), | public | :: | rotInertia | ||||
| integer, | public | :: | Rn | ||||
| real(kind=rk), | public | :: | vel(6) | ||||
| real(kind=rk), | public | :: | pos(6) | ||||
| real(kind=rk), | public | :: | oldPos(6) | ||||
| integer, | public | :: | coordOfOrigin(4) | ||||
| integer, | public | :: | oldCoordOfOrigin(4) | ||||
| real(kind=rk), | public | :: | F(6) | = | 0.0_rk | ||
| real(kind=rk), | public | :: | Fbuff(2,6) | = | 0.0_rk | ||
| real(kind=rk), | public | :: | Fext(6) | = | 0.0_rk | ||
| integer, | public | :: | Fnow | = | 1 | ||
| integer, | public | :: | Flast | = | 2 | ||
| real(kind=rk), | public | :: | F_DEM(2,6) | = | 0.0_rk | ||
| integer, | public | :: | F_DEM_now | = | 1 | ||
| integer, | public | :: | F_DEM_next | = | 2 | ||
| integer, | public | :: | nWallPos | = | 0 | ||
| real(kind=rk), | public | :: | avgWallPos(3) | = | 0.0_rk | ||
| real(kind=rk), | public | :: | rwall(3) | = | 0.0_rk | ||
| logical, | public | :: | interactWithWall | = | .FALSE. | ||
| type(dyn_intarray_type), | public | :: | exclusionList | ||||
| type(dyn_intarray_type), | public | :: | exclusionListBuffer |
Buffer for exclusion list used in moveParticle routine |
|||
| integer, | public | :: | NfluidNeighbors |
Number of fluid neighbors for this particle |
|||
| type(grw_intarray_type), | public | :: | makeFluidList |
Indices in levelDesc total list of elements that |
dynamic array (da) type for mus_particle_mem_type
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | nvals | = | 0 | ||
| integer, | public | :: | containersize | = | 0 | ||
| type(mus_particle_MEM_type), | public, | allocatable | :: | val(:) | |||
| integer, | public, | allocatable | :: | pidlist(:) | |||
| integer, | public, | allocatable | :: | pidsort(:) |
return the sorted position of a value in the given dynamic array
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(in) | :: | me | |||
| integer, | intent(in) | :: | pid | |||
| logical, | intent(in), | optional | :: | nextifnotfound |
flag to indicate, if the next entry in the list should be returned, if the searched one is not found. |
|
| integer, | intent(in), | optional | :: | lower | ||
| integer, | intent(in), | optional | :: | upper |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(inout) | :: | me | |||
| integer, | intent(in), | optional | :: | length |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(inout) | :: | me |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(inout) | :: | me | |||
| type(mus_particle_MEM_type), | intent(inout) | :: | particle | |||
| integer, | intent(in), | optional | :: | length | ||
| logical | :: | wasadded |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(inout) | :: | me | |||
| integer, | intent(in), | optional | :: | length |
optional length to expand the array with |
swaps the position of two particles in particle dynamic array new position of ielem1 = old position of ielem2 and vice-versa also updates the pidlist and pidsort arrays
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(inout) | :: | me |
particle array to operate on |
||
| integer, | intent(in) | :: | ielem1 |
current index of one element |
||
| integer, | intent(in) | :: | ielem2 |
current index of other element |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(inout) | :: | particles |
particle group to operate on |
||
| integer, | intent(in) | :: | ielem |
current index of element to remove |
truncate the dynamic particle array to only fit the actual entries
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(dyn_particle_mem_array_type), | intent(inout) | :: | me |
particle array to operate on |
Routine for allocating the existsOnProc, addToProc and removeFromProc masks used to determine when particles should be sent over to new processes or which processes need to receive position, velocity updates etc.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(mus_particle_MEM_type), | intent(inout) | :: | particle |
Particle to initialize |
||
| integer | :: | nProcs |
Number of processes to communicate particle data with |