Высокопроизводительные вычисления на кластерах. Беликов Д.А - 161 стр.

UptoLike

161
На границе квадрата выполняются условия Дирихле:
u
=1.
В результате применения метода конечных разностей на сетке
( , ), , 0,..., ; 1/
h
ih jh i j n h n
получим следующую систему
линейных алгебраических уравнений относительно неизвестных
ij
u
:
1 1 1 1
4 0, 1,..., 1; 1,..., 1,
1,( 0) ( ) ( 0) ( ).
i j i j ij ij ij
ij
u u u u u i n j n
u i i n j j n
program main
implicit none
#include "include/finclude/petsc.h"
#include "include/finclude/petscvec.h"
#include "include/finclude/petscmat.h"
#include "include/finclude/petscksp.h"
#include "include/finclude/petscpc.h"
Vec x, b, u
! приближенное решение, вектор правых частей, точное
! решение
Mat A ! матрица, определяющая линейную систему
KSP ksp ! линейный солвер
PC pc ! предобуславливатель
Double precision norm ! норма ошибки
INTEGER i, j, Ii, Jj, Istart, Iend, m, n, its, ierr, rank
Double precision v, one
Call PetscInitialize(PETSC_NULL_CHARACTER, ierr)
Call MPI_COMM_RANK(PETSC_COMM_WORLD, Rank,
$ Ierr)
c Зададим размеры матрицы
m = 8
n = 7
c Вычисляем матрицу и вектор правых частей,
c которые определяют линейную систему Ax = b
c Создаём матрицу, распределенную по активированным
c процессам
Call MatCreate(PETSC_COMM_WORLD, A, ierr)