xref: /petsc/src/vec/vec/impls/seq/ftn-kernels/fmaxpy.F90 (revision d66e387e1b17bf1eafe50b0bb7df00ccc9053b5a)
1!
2!
3!    Fortran kernel for the MAXPY() vector routine
4!
5#include <petsc/finclude/petscsys.h>
6!
7
8pure subroutine FortranMAXPY4(x, a0, a1, a2, a3, y0, y1, y2, y3, n)
9  implicit none (type, external)
10  PetscScalar, intent(in) ::  a0,a1,a2,a3
11  PetscScalar, intent(inout) :: x(*)
12  PetscScalar, intent(in) :: y0(*),y1(*),y2(*),y3(*)
13  PetscInt, intent(in) :: n
14
15  PETSC_AssertAlignx(16,x(1))
16  PETSC_AssertAlignx(16,y0(1))
17  PETSC_AssertAlignx(16,y1(1))
18  PETSC_AssertAlignx(16,y2(1))
19  PETSC_AssertAlignx(16,y3(1))
20
21  x(1:n)  = x(1:n) + (a0*y0(1:n) + a1*y1(1:n) + a2*y2(1:n) + a3*y3(1:n))
22end subroutine FortranMAXPY4
23
24pure subroutine FortranMAXPY3(x, a0, a1, a2, y0, y1, y2, n)
25  implicit none (type, external)
26  PetscScalar, intent(in) ::  a0,a1,a2
27  PetscScalar, intent(inout) :: x(*)
28  PetscScalar, intent(in) :: y0(*),y1(*),y2(*)
29  PetscInt, intent(in) :: n
30
31  PETSC_AssertAlignx(16,x(1))
32  PETSC_AssertAlignx(16,y0(1))
33  PETSC_AssertAlignx(16,y1(1))
34  PETSC_AssertAlignx(16,y2(1))
35
36  x(1:n) = x(1:n) + (a0*y0(1:n) + a1*y1(1:n) + a2*y2(1:n))
37end subroutine FortranMAXPY3
38
39pure subroutine FortranMAXPY2(x, a0, a1, y0, y1, n)
40  implicit none (type, external)
41  PetscScalar, intent(in) ::  a0,a1
42  PetscScalar, intent(inout) :: x(*)
43  PetscScalar, intent(in) :: y0(*),y1(*)
44  PetscInt, intent(in) :: n
45
46  PETSC_AssertAlignx(16,x(1))
47  PETSC_AssertAlignx(16,y0(1))
48  PETSC_AssertAlignx(16,y1(1))
49
50  x(1:n)  = x(1:n) + (a0*y0(1:n) + a1*y1(1:n))
51end subroutine FortranMAXPY2
52