xref: /petsc/src/vec/vec/impls/seq/ftn-kernels/fmaxpy.F90 (revision c4762a1b19cd2af06abeed90e8f9d34fb975dd94)
1!
2!
3!    Fortran kernel for the MAXPY() vector routine
4!
5#include <petsc/finclude/petscsys.h>
6!
7
8      Subroutine FortranMAXPY4(x, a0, a1, a2, a3, y0, y1, y2, y3, n)
9      implicit none
10      PetscScalar  a0,a1,a2,a3
11      PetscScalar  x(*),y0(*)
12      PetscScalar y1(*),y2(*),y3(*)
13      PetscInt n, i
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      do i=1,n
21          x(i)  = x(i) + a0*y0(i) + a1*y1(i) + a2*y2(i) + a3*y3(i)
22      enddo
23      return
24      end
25
26      subroutine FortranMAXPY3(x,a0,a1,a2,y0,y1,y2,n)
27      implicit none
28      PetscScalar  a0,a1,a2,x(*)
29      PetscScalar y0(*),y1(*),y2(*)
30      PetscInt n
31      PetscInt i
32      PETSC_AssertAlignx(16,x(1))
33      PETSC_AssertAlignx(16,y0(1))
34      PETSC_AssertAlignx(16,y1(1))
35      PETSC_AssertAlignx(16,y2(1))
36      do 10,i=1,n
37         x(i) = x(i) + a0*y0(i) + a1*y1(i) + a2*y2(i)
38  10  continue
39      return
40      end
41
42      Subroutine FortranMAXPY2(x, a0, a1, y0, y1, n)
43      implicit none
44      PetscScalar  a0,a1,x(*)
45      PetscScalar  y0(*),y1(*)
46      PetscInt n, i
47      PETSC_AssertAlignx(16,x(1))
48      PETSC_AssertAlignx(16,y0(1))
49      PETSC_AssertAlignx(16,y1(1))
50      do i=1,n
51          x(i)  = x(i) + a0*y0(i) + a1*y1(i)
52      enddo
53      return
54      end
55