Actual source code: fmultadd.F90
1: !
2: !
3: ! Fortran kernel for sparse matrix-vector product in the AIJ format
4: !
5: #include <petsc/finclude/petscsys.h>
6: !
7: pure 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:*)
14: PetscInt :: i, jstart, jend
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
22: end subroutine FortranMultAddAIJ