! ! ! Fortran kernel for the MAXPY() vector routine ! #include ! pure subroutine FortranMAXPY4(x, a0, a1, a2, a3, y0, y1, y2, y3, n) use, intrinsic :: ISO_C_binding implicit none(type, external) PetscScalar, intent(in) :: a0, a1, a2, a3 PetscScalar, intent(inout) :: x(*) PetscScalar, intent(in) :: y0(*), y1(*), y2(*), y3(*) PetscInt, intent(in) :: n PETSC_AssertAlignx(16, x(1)) PETSC_AssertAlignx(16, y0(1)) PETSC_AssertAlignx(16, y1(1)) PETSC_AssertAlignx(16, y2(1)) PETSC_AssertAlignx(16, y3(1)) x(1:n) = x(1:n) + (a0*y0(1:n) + a1*y1(1:n) + a2*y2(1:n) + a3*y3(1:n)) end subroutine FortranMAXPY4 pure subroutine FortranMAXPY3(x, a0, a1, a2, y0, y1, y2, n) use, intrinsic :: ISO_C_binding implicit none(type, external) PetscScalar, intent(in) :: a0, a1, a2 PetscScalar, intent(inout) :: x(*) PetscScalar, intent(in) :: y0(*), y1(*), y2(*) PetscInt, intent(in) :: n PETSC_AssertAlignx(16, x(1)) PETSC_AssertAlignx(16, y0(1)) PETSC_AssertAlignx(16, y1(1)) PETSC_AssertAlignx(16, y2(1)) x(1:n) = x(1:n) + (a0*y0(1:n) + a1*y1(1:n) + a2*y2(1:n)) end subroutine FortranMAXPY3 pure subroutine FortranMAXPY2(x, a0, a1, y0, y1, n) use, intrinsic :: ISO_C_binding implicit none(type, external) PetscScalar, intent(in) :: a0, a1 PetscScalar, intent(inout) :: x(*) PetscScalar, intent(in) :: y0(*), y1(*) PetscInt, intent(in) :: n PETSC_AssertAlignx(16, x(1)) PETSC_AssertAlignx(16, y0(1)) PETSC_AssertAlignx(16, y1(1)) x(1:n) = x(1:n) + (a0*y0(1:n) + a1*y1(1:n)) end subroutine FortranMAXPY2