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) |