Actual source code: fmaxpy.F90

  1: !
  2: !
  3: !    Fortran kernel for the MAXPY() vector routine
  4: !
  5: #include <petsc/finclude/petscsys.h>
  6: !

  8: pure subroutine FortranMAXPY4(x, a0, a1, a2, a3, y0, y1, y2, y3, n)
  9:   use, intrinsic :: ISO_C_binding
 10:   implicit none(type, external)
 11:   PetscScalar, intent(in) ::  a0, a1, a2, a3
 12:   PetscScalar, intent(inout) :: x(*)
 13:   PetscScalar, intent(in) :: y0(*), y1(*), y2(*), y3(*)
 14:   PetscInt, intent(in) :: n

 16:   PETSC_AssertAlignx(16, x(1))
 17:   PETSC_AssertAlignx(16, y0(1))
 18:   PETSC_AssertAlignx(16, y1(1))
 19:   PETSC_AssertAlignx(16, y2(1))
 20:   PETSC_AssertAlignx(16, y3(1))

 22:   x(1:n) = x(1:n) + (a0*y0(1:n) + a1*y1(1:n) + a2*y2(1:n) + a3*y3(1:n))
 23: end subroutine FortranMAXPY4

 25: pure subroutine FortranMAXPY3(x, a0, a1, a2, y0, y1, y2, n)
 26:   use, intrinsic :: ISO_C_binding
 27:   implicit none(type, external)
 28:   PetscScalar, intent(in) ::  a0, a1, a2
 29:   PetscScalar, intent(inout) :: x(*)
 30:   PetscScalar, intent(in) :: y0(*), y1(*), y2(*)
 31:   PetscInt, intent(in) :: n

 33:   PETSC_AssertAlignx(16, x(1))
 34:   PETSC_AssertAlignx(16, y0(1))
 35:   PETSC_AssertAlignx(16, y1(1))
 36:   PETSC_AssertAlignx(16, y2(1))

 38:   x(1:n) = x(1:n) + (a0*y0(1:n) + a1*y1(1:n) + a2*y2(1:n))
 39: end subroutine FortranMAXPY3

 41: pure subroutine FortranMAXPY2(x, a0, a1, y0, y1, n)
 42:   use, intrinsic :: ISO_C_binding
 43:   implicit none(type, external)
 44:   PetscScalar, intent(in) ::  a0, a1
 45:   PetscScalar, intent(inout) :: x(*)
 46:   PetscScalar, intent(in) :: y0(*), y1(*)
 47:   PetscInt, intent(in) :: n

 49:   PETSC_AssertAlignx(16, x(1))
 50:   PETSC_AssertAlignx(16, y0(1))
 51:   PETSC_AssertAlignx(16, y1(1))

 53:   x(1:n) = x(1:n) + (a0*y0(1:n) + a1*y1(1:n))
 54: end subroutine FortranMAXPY2