ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
111
Реализация “Fortran77”
PROGRAM LAPLAS
INCLUDE 'mpif.h'
INTEGER n,m,npmin,nps,itmax
PARAMETER (n = 400, npmin=1, nps=n/npmin+1, itmax = 1000)
REAL*8 A(0:n+1,0:nps+1), B(n,nps)
REAL*8 diffnorm, gdiffnorm, eps, time
INTEGER left, right, i, j, k, itcnt, status(0:3), tag
INTEGER IAM, NPROCS, ierr
LOGICAL converged
С определение числа процессоров, выделенных задаче (NPROCS),
C и номера текущего процессора (IAM)
CALL MPI_INIT(IERR)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD, NPROCS, ierr)
CALL MPI_COMM_RANK(MPI_COMM_WORLD, IAM, ierr)
С установка критерия достижения сходимости
eps = 0.01
С вычисление числа столбцов, обрабатываемых процессором
m = n/NPROCS
IF (IAM.LT.(n-NPROCS*m)) THEN
m = m+1
END IF
time = MPI_Wtime()
С задание начальных и граничных значений
do j = 0,m+1
do i = 0,n+1
a(i,j) = 0.0
end do
end do
do j = 0,m+1
A(0,j) = 1.0
A(n+1,j) = 1.0
end do
IF(IAM.EQ.0) then
do i = 0,n+1
A(i,0) = 1.0
end do
end if
IF(IAM.EQ.NPROCS-1) then
do i = 0,n+1
A(i,m+1) = 1.0
end do
end if
С определение номеров процессоров слева и справа. Если таковые
С отсутствуют, то им присваивается значение MPI_PROC_NULL
С (для них коммуникационные операцииа игнорируются)
IF (IAM.EQ.0) THEN
left = MPI_PROC_NULL
ELSE
left = IAM - 1