ВУЗ:
Рубрика:
163
Call VecSetSizes(u, PETSC_DECIDE, m*n, ierr)
Call VecSetFromOptions(u, ierr)
Call VecDuplicate(u, b, ierr)
Call VecDuplicate(b, x, ierr)
c Устанавливаем точное решение (u=1.0), а затем вычисляем
c вектор правых частей
one=1.0
Call VecSet(u, one, ierr)
Call MatMult(A, u, b, ierr)
c Cоздаем линейный солвер
Call KSPCreate(PETSC_COMM_WORLD, ksp, ierr)
c Устанавливаем операторы. Матрица, определяющая
c линейную систему, будет также предобуславливающей
c матрицей
Call KSPSetOperators(ksp, A, A,
$ DIFFERENT_NONZERO_PATTERN, ierr)
c Метод решения будем устанавливать в командной строке
c -ksp_type <type>
Call KSPSetFromOptions(ksp, ierr)
c Решаем СЛАУ
Call KSPSolve(ksp, b, x, ierr)
c Проверка решения
Call VecAXPY(x, -one, u, ierr)
Call VecNorm(x, NORM_2, norm, ierr)
Call KSPGetIterationNumber(ksp, its, ierr)
if (rank .eq. 0) then
if (norm .gt. 1.e-12) then
write(6,100) norm, its
else
write(6,110) its
endif
endif
100 format('Norm of error ',e10.4,',iterations ',i5)
110 format('Norm of error < 1.e-12,iterations ',i5)
Страницы
- « первая
- ‹ предыдущая
- …
- 161
- 162
- 163
- 164
- 165
- …
- следующая ›
- последняя »
