xref: /petsc/src/mat/ftn-kernels/sgemv.F90 (revision c96caacc6f00ba95b366aeae86152d44f6880d6b)
1*c96caaccSSatish Balay!
2*c96caaccSSatish Balay!    Fortran kernel for gemv() BLAS operation. This version supports
3*c96caaccSSatish Balay!  matrix array stored in single precision but vectors in double
4*c96caaccSSatish Balay!
5*c96caaccSSatish Balay#include <petsc/finclude/petscsys.h>
6*c96caaccSSatish Balay!
7*c96caaccSSatish Balay      subroutine MSGemv(bs,ncols,A,x,y)
8*c96caaccSSatish Balay      implicit none
9*c96caaccSSatish Balay      PetscInt          bs,ncols
10*c96caaccSSatish Balay      MatScalar        A(bs,ncols)
11*c96caaccSSatish Balay      PetscScalar      x(ncols),y(bs)
12*c96caaccSSatish Balay
13*c96caaccSSatish Balay      PetscInt         i,j
14*c96caaccSSatish Balay
15*c96caaccSSatish Balay      do 5, j=1,bs
16*c96caaccSSatish Balay        y(j) = 0.0d0
17*c96caaccSSatish Balay 5    continue
18*c96caaccSSatish Balay
19*c96caaccSSatish Balay      do 10, i=1,ncols
20*c96caaccSSatish Balay        do 20, j=1,bs
21*c96caaccSSatish Balay          y(j) = y(j) + A(j,i)*x(i)
22*c96caaccSSatish Balay 20     continue
23*c96caaccSSatish Balay 10   continue
24*c96caaccSSatish Balay
25*c96caaccSSatish Balay      return
26*c96caaccSSatish Balay      end
27*c96caaccSSatish Balay
28*c96caaccSSatish Balay
29*c96caaccSSatish Balay      subroutine MSGemvp(bs,ncols,A,x,y)
30*c96caaccSSatish Balay      implicit none
31*c96caaccSSatish Balay      PetscInt          bs,ncols
32*c96caaccSSatish Balay      MatScalar        A(bs,ncols)
33*c96caaccSSatish Balay      PetscScalar      x(ncols),y(bs)
34*c96caaccSSatish Balay
35*c96caaccSSatish Balay      PetscInt         i, j
36*c96caaccSSatish Balay
37*c96caaccSSatish Balay      do 10, i=1,ncols
38*c96caaccSSatish Balay        do 20, j=1,bs
39*c96caaccSSatish Balay          y(j) = y(j) + A(j,i)*x(i)
40*c96caaccSSatish Balay 20     continue
41*c96caaccSSatish Balay 10   continue
42*c96caaccSSatish Balay
43*c96caaccSSatish Balay      return
44*c96caaccSSatish Balay      end
45*c96caaccSSatish Balay
46*c96caaccSSatish Balay
47*c96caaccSSatish Balay      subroutine MSGemvm(bs,ncols,A,x,y)
48*c96caaccSSatish Balay      implicit none
49*c96caaccSSatish Balay      PetscInt          bs,ncols
50*c96caaccSSatish Balay      MatScalar        A(bs,ncols)
51*c96caaccSSatish Balay      PetscScalar      x(ncols),y(bs)
52*c96caaccSSatish Balay
53*c96caaccSSatish Balay      PetscInt         i, j
54*c96caaccSSatish Balay
55*c96caaccSSatish Balay      do 10, i=1,ncols
56*c96caaccSSatish Balay        do 20, j=1,bs
57*c96caaccSSatish Balay          y(j) = y(j) - A(j,i)*x(i)
58*c96caaccSSatish Balay 20     continue
59*c96caaccSSatish Balay 10   continue
60*c96caaccSSatish Balay
61*c96caaccSSatish Balay      return
62*c96caaccSSatish Balay      end
63*c96caaccSSatish Balay
64*c96caaccSSatish Balay
65*c96caaccSSatish Balay      subroutine MSGemvt(bs,ncols,A,x,y)
66*c96caaccSSatish Balay      implicit none
67*c96caaccSSatish Balay      PetscInt          bs,ncols
68*c96caaccSSatish Balay      MatScalar        A(bs,ncols)
69*c96caaccSSatish Balay      PetscScalar      x(bs),y(ncols)
70*c96caaccSSatish Balay
71*c96caaccSSatish Balay      PetscInt          i,j
72*c96caaccSSatish Balay      PetscScalar      sum
73*c96caaccSSatish Balay      do 10, i=1,ncols
74*c96caaccSSatish Balay        sum = y(i)
75*c96caaccSSatish Balay        do 20, j=1,bs
76*c96caaccSSatish Balay          sum = sum + A(j,i)*x(j)
77*c96caaccSSatish Balay 20     continue
78*c96caaccSSatish Balay        y(i) = sum
79*c96caaccSSatish Balay 10   continue
80*c96caaccSSatish Balay
81*c96caaccSSatish Balay      return
82*c96caaccSSatish Balay      end
83*c96caaccSSatish Balay
84*c96caaccSSatish Balay      subroutine MSGemm(bs,A,B,C)
85*c96caaccSSatish Balay      implicit none
86*c96caaccSSatish Balay      PetscInt    bs
87*c96caaccSSatish Balay      MatScalar   A(bs,bs),B(bs,bs),C(bs,bs)
88*c96caaccSSatish Balay      PetscScalar sum
89*c96caaccSSatish Balay      PetscInt    i,j,k
90*c96caaccSSatish Balay
91*c96caaccSSatish Balay
92*c96caaccSSatish Balay      do 10, i=1,bs
93*c96caaccSSatish Balay        do 20, j=1,bs
94*c96caaccSSatish Balay          sum = A(i,j)
95*c96caaccSSatish Balay          do 30, k=1,bs
96*c96caaccSSatish Balay            sum = sum - B(i,k)*C(k,j)
97*c96caaccSSatish Balay 30       continue
98*c96caaccSSatish Balay          A(i,j) = sum
99*c96caaccSSatish Balay 20     continue
100*c96caaccSSatish Balay 10   continue
101*c96caaccSSatish Balay
102*c96caaccSSatish Balay      return
103*c96caaccSSatish Balay      end
104*c96caaccSSatish Balay
105*c96caaccSSatish Balay
106*c96caaccSSatish Balay      subroutine MSGemmi(bs,A,C,B)
107*c96caaccSSatish Balay      implicit none
108*c96caaccSSatish Balay      PetscInt    bs
109*c96caaccSSatish Balay      MatScalar   A(bs,bs),B(bs,bs),C(bs,bs)
110*c96caaccSSatish Balay      PetscScalar sum
111*c96caaccSSatish Balay
112*c96caaccSSatish Balay      PetscInt    i,j,k
113*c96caaccSSatish Balay
114*c96caaccSSatish Balay
115*c96caaccSSatish Balay      do 10, i=1,bs
116*c96caaccSSatish Balay        do 20, j=1,bs
117*c96caaccSSatish Balay          sum = 0.0d0
118*c96caaccSSatish Balay          do 30, k=1,bs
119*c96caaccSSatish Balay            sum = sum + B(i,k)*C(k,j)
120*c96caaccSSatish Balay 30       continue
121*c96caaccSSatish Balay          A(i,j) = sum
122*c96caaccSSatish Balay 20     continue
123*c96caaccSSatish Balay 10   continue
124*c96caaccSSatish Balay
125*c96caaccSSatish Balay      return
126*c96caaccSSatish Balay      end
127