1! 2! 3! Fortran kernel for sparse matrix-vector product in the AIJ format 4! 5#include <petsc/finclude/petscsys.h> 6! 7pure subroutine FortranMultAddAIJ(n, x, ii, jj, a, y, z) 8 use, intrinsic :: ISO_C_binding 9 implicit none(type, external) 10 PetscScalar, intent(in) :: x(0:*), a(0:*), y(*) 11 PetscScalar, intent(inout) :: z(*) 12 PetscInt, intent(in) :: n, ii(*), jj(0:*) 13 14 PetscInt :: i, jstart, jend 15 16 jend = ii(1) 17 do i = 1, n 18 jstart = jend 19 jend = ii(i + 1) 20 z(i) = y(i) + sum(a(jstart:jend - 1)*x(jj(jstart:jend - 1))) 21 end do 22end subroutine FortranMultAddAIJ 23