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