ВУЗ:
Рубрика:
137
res_global=1d0
do while (res_global.gt.1d-10)
c Сборка на каждом процессе вектора решения
call rp(x, y1, f1) !расчет значения правой части
res=0d0
do i=1,m
y(i)=y0(i)+h4*(9.0*f1(i)+19.0*ff(3,i)-5.0*ff(2,i)+ff(1,i))
!!!коррекция
res=dmax1(dabs(y(i)-y1(i))/dmax1(dabs(y(i)),1d-10),res)
!!!вычисление нормы
y1(i)=y(i)
!!!подготовка к вычислению следующего приближения
end do
c Вычисление нормы глобальной ошибки
call mpi_allreduce(res, res_global, 1, mpi_double_precision,
$ mpi_max, mpi_comm_world, ierr)
iter=iter+1
end do
c Подготовка для осуществления следующей итерации
c метода
do i=1,m
ff(0,i)=ff(1,i)
ff(1,i)=ff(2,i)
ff(2,i)=ff(3,i)
ff(3,i)=f1(i)
y0(i)=y(i)
end do
end do
return
end
c
subroutine rp(x, y, f)
c Задание правых частей ОДУ, параллельная версия
implicit none
c
include 'mpif.h'
include 'dim.h'
integer i, m, rank, size, ierr
double precision x, y(n), f(n), s, s_global
common/parallel/ rank, size, m
Страницы
- « первая
- ‹ предыдущая
- …
- 135
- 136
- 137
- 138
- 139
- …
- следующая ›
- последняя »
