ВУЗ:
Рубрика:
101
6.2 Программа решения СЛАУ методом Гаусса
PROGRAM gauss_method
Implicit none
Include 'mpif.h'
Integer i, j, k, m, n, p, nom
Integer comm, ierr, size, rank, tag, status(100)
Parameter (n=1000)
Double precision a(n,n+1),b(n), x(n), pas(n+1), ch,time
Call MPI_INIT(ierr)
Call MPI_comm_size(mpi_comm_world, size, ierr)
Call MPI_comm_rank(mpi_comm_world, rank, ierr)
comm = mpi_comm_world
c Каждый ПЭ вычисляет размеры своих полос матрицы А и
с вектора правой части, n – исходная размерность матрицы, m –
с размерность полосы матрицы на ПЭ (размерность матрицы n
с делится без остатка на количество ПЭ)
m=n/size
c Задаем исходную матрицу:
c по главной диагонали числа = 2, остальные числа = 1
do i=1,m
do j=1,n
a(i,j)=1.0
if ( ((i-1)*size+rank+1) .eq. j ) a(i,j)=2.0
end do
c Столбец свободных членов добавляем (m+1)-й строкой в
с матрицу
b(i)=n*1.0d0+1
a(i,n+1)=b(i)
end do
c Фиксируем время начала расчета
if (rank.eq.0) time = MPI_Wtime()
c Прямой ход метода Гаусса
do k=1,m
do p=0,size-1
nom=(k-1)*size+p+1 !!! номер элемента
Страницы
- « первая
- ‹ предыдущая
- …
- 99
- 100
- 101
- 102
- 103
- …
- следующая ›
- последняя »
