Return splitting positions based on the weights provided by each rank.
This is the SPARTA algorithm which uses simple splitting based on given weights for all elements in the mesh.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=rk), | intent(in) | :: | weight(:) | Sorted list of weights corresponding to treeID order |
||
| integer, | intent(in) | :: | myPart | |||
| integer, | intent(in) | :: | nParts | Number of procs the distribution should span |
||
| integer, | intent(in) | :: | comm | MPI Communicator |
||
| integer, | intent(inout) | :: | myElems | number of elements |
||
| integer(kind=long_k), | intent(out) | :: | offset | Array of offsets with the size nParts. Offset index starts at 0. This Array needs to be allocate and deallocated outside |
||
| type(tem_sparta_type), | intent(inout) | :: | sparta |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | private | :: | iErr | ||||
| integer, | private | :: | iElem | ||||
| integer, | private | :: | iProc | ||||
| integer(kind=long_k), | private | :: | myElems_long | ||||
| real(kind=rk), | private | :: | w_sum | ||||
| real(kind=rk), | private | :: | w_opt | ||||
| real(kind=rk), | private | :: | send | ||||
| real(kind=rk), | private | :: | recv | ||||
| real(kind=rk), | private | :: | lower_boundary | ||||
| real(kind=rk), | private | :: | upper_boundary | ||||
| real(kind=rk), | private, | allocatable | :: | presum(:) | |||
| integer, | private | :: | rmin | ||||
| integer, | private | :: | rmax | ||||
| integer, | private | :: | lb | ||||
| integer, | private | :: | ub | ||||
| integer, | private | :: | left_off | ||||
| integer, | private | :: | mid | ||||
| real(kind=rk), | private | :: | opt_split | ||||
| real(kind=rk), | private | :: | wsplit | ||||
| integer, | private | :: | send_count(0:nParts-1) |