@startuml Simplified Parallel Activity Diagram
start
:Пусть ""size = matrixA.length"";
:Объявление двумерного массива ""matrixC"",\nразмера ""size"";
while (""int i = 0; i < size; i++"") is (Следующая итерация)
    :Объявление строки ""matrixC"" размера ""size"";
    while (""int j = 0; j < size; j++"") is (Следующая итерация)
        if (j != i) then (Да)
            :""matrixC[i][j] = -matrixA[i][j] / matrixA[i][i]"";
        else (Нет)
            :""matrixC[i][j] = 0"";
        endif
    endwhile (Конец цикла)
endwhile (Конец цикла)
:Объявление массива ""vectorD"" размера ""size"";
while (""int i = 0; i < size; i++"") is (Следующая итерация)
    :""vectorD[i] = vectorB[i] / matrixA[i][i]"";
endwhile (Конец цикла)
:Поэлементное копирование ""vectorB"" в ""vectorX"";
repeat
    :Объявление ""vectorN"";
    :Поэлементное копирование ""vectorX"" в ""vectorN"";
    fork
        :Вычисление шага диапазона ""range"" итераций потока\n""step = range.get() / parallelCount"";
        while (""int i = range.getLeft() + p * step;\ni < p < parallelCount - 1 ? range.getLeft() + (p + 1) * step\n: range.getRight(); i++"") is (Следующая итерация)
            :Вычисление ""sum1 = sum(matrixC[i][j - 1] * vectorN[j - 1])""\nдля ""j = [1, i)"";
            :Вычисление ""sum2 = sum(matrixC[i][j - 1] * vectorX[j - 1])""\nдля ""j = [i + 1, size)"";
            :""vectorN[i] = sum1 + sum2 + vectorD[i]"";
        endwhile (Конец цикла)
    fork again
        :Вычисление шага диапазона ""range"" итераций потока\n""step = range.get() / parallelCount"";
        while (""int i = range.getLeft() + p * step;\ni < p < parallelCount - 1 ? range.getLeft() + (p + 1) * step\n: range.getRight(); i++"") is (Следующая итерация)
            :Вычисление ""sum1 = sum(matrixC[i][j - 1] * vectorN[j - 1])""\nдля ""j = [1, i)"";
            :Вычисление ""sum2 = sum(matrixC[i][j - 1] * vectorX[j - 1])""\nдля ""j = [i + 1, size)"";
            :""vectorN[i] = sum1 + sum2 + vectorD[i]"";
        endwhile (Конец цикла)
    end fork
    :Проверка точности вычислений:\n""sqrt(sum(pow(vectorN[i] - vectorX[i], 2))) <= pow(0.1, decimalPrecision)""\nдля ""i = [0, size)"" и заданной десятичной точности вычислений ""decimalPrecision"";
repeat while (Точность не достигнута?)
stop
@enduml