ВУЗ:
Рубрика:
162
Call MatSetSizes(A, PETSC_DECIDE, PETSC_DECIDE, m*n,
$ m*n, ierr)
Call MatSetFromOptions(A, ierr)
c Определяем номера строк, распределенных по локальным
c процессам
Call MatGetOwnershipRange(A, Istart, Iend, ierr)
c Заполним матрицу
do Ii=istart,iend-1
v = -1.0
i = Ii/n
j = Ii - i*n
if (i.gt.0) then
JJ = Ii - n
Call MatSetValues(A, 1, Ii, 1, JJ, v, INSERT_VALUES, ierr)
end if
if (i.lt.(m-1)) then
JJ = Ii + n
Call MatSetValues(A, 1, Ii, 1, JJ, v, INSERT_VALUES, ierr)
end if
if (j.gt.0) then
JJ = Ii - 1
Call MatSetValues(A, 1, Ii, 1, JJ, v, INSERT_VALUES, ierr)
end if
if (j.lt.(n-1)) then
JJ = Ii + 1
Call MatSetValues(A, 1, Ii, 1, JJ, v, INSERT_VALUES, ierr)
end if
v = 4.0
Call MatSetValues(A, 1, Ii, 1, Ii, v, INSERT_VALUES, ierr)
end do
c Обрабатываем матрицу
Call MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr)
Call MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr)
Call MatView(A, PETSC_VIEWER_STDOUT_WORLD, ierr)
c Создаём параллельные векторы
Call VecCreate(PETSC_COMM_WORLD, u, ierr)
Страницы
- « первая
- ‹ предыдущая
- …
- 160
- 161
- 162
- 163
- 164
- …
- следующая ›
- последняя »
