MODULE cg_matrix USE cg_precision, ONLY : prec IMPLICIT NONE REAL(KIND=prec), ALLOCATABLE, PRIVATE :: coeffmat(:,:) CONTAINS SUBROUTINE init_mat(n) ! Tämä aliohjelma alustaa kerroinmatriisin INTEGER, INTENT(in) :: n INTEGER :: allocstat, i, j ALLOCATE(coeffmat(n, n), STAT=allocstat) IF (allocstat /= 0) STOP 'muistinvaraus epäonistui!' DO j=1, n DO i=1, n coeffmat(i,j) = 1/(1.0_prec+ABS(i-j)) END DO END DO END SUBROUTINE init_mat SUBROUTINE mult_mat(n, x, y) ! Tämä aliohjelma laskee matriisi-vektoritulon y=A*x INTEGER, INTENT(in) :: n REAL(KIND=prec), INTENT(IN) :: x(n) REAL(KIND=prec), INTENT(OUT) :: y(n) y = MATMUL(coeffmat, x) END SUBROUTINE mult_mat END MODULE cg_matrix