ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
109
{
diffnorm=B[i][j] - A[i][j];
}
}
}
// Переприсваивание внутренних точек области
for(i=1;i<=m;i++)
{
for(j=1;j<n-1;j++)
{
A[i][j] = B[i][j];
}
}
// Пересылка граничных значений в соседние процессоры
// посылка первой(1) и прием первой(0)
for(j=0;j<n;j++)
{
sendfirst[j] = A[1][j];
}
MPI_Sendrecv(sendfirst, n, MPI_DOUBLE, left, tag,
recvfirst, n, MPI_DOUBLE, left, tag, MPI_COMM_WORLD,
&status);
if(iam != 0)
{
for(j=1;j<n-1;j++)
{
A[0][j]= recvfirst[j];
}
}
// посылка последней(m) и прием последней строки(m+1)
for(j=0;j<n;j++)
{
sendlast[j] = A[m][j];
}
MPI_Sendrecv(sendlast, n, MPI_DOUBLE, right,
tag, recvlast, n, MPI_DOUBLE, right, tag,
MPI_COMM_WORLD, &status);
if(iam != nprocs - 1)
{
for(j=1;j<n-1;j++)
{
A[m + 1][j]= recvlast[j];
}
}
// Вычисление невязки и проверка условия достижения сходимости
MPI_Allreduce( &diffnorm, &gdiffnorm, 1, MPI_DOUBLE,
MPI_MAX, MPI_COMM_WORLD);
if(gdiffnorm < eps)
{
if(iam==(nprocs-1) || iam==0){m=m+1;
}