xref: /petsc/src/mat/ftn-kernels/sgemv.F90 (revision 98d129c30f3ee9fdddc40fdbc5a989b7be64f888)
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      end
26
27      subroutine MSGemvp(bs,ncols,A,x,y)
28      implicit none
29      PetscInt          bs,ncols
30      MatScalar        A(bs,ncols)
31      PetscScalar      x(ncols),y(bs)
32
33      PetscInt         i, j
34
35      do 10, i=1,ncols
36        do 20, j=1,bs
37          y(j) = y(j) + A(j,i)*x(i)
38 20     continue
39 10   continue
40
41      end
42
43      subroutine MSGemvm(bs,ncols,A,x,y)
44      implicit none
45      PetscInt          bs,ncols
46      MatScalar        A(bs,ncols)
47      PetscScalar      x(ncols),y(bs)
48
49      PetscInt         i, j
50
51      do 10, i=1,ncols
52        do 20, j=1,bs
53          y(j) = y(j) - A(j,i)*x(i)
54 20     continue
55 10   continue
56
57      end
58
59      subroutine MSGemvt(bs,ncols,A,x,y)
60      implicit none
61      PetscInt          bs,ncols
62      MatScalar        A(bs,ncols)
63      PetscScalar      x(bs),y(ncols)
64
65      PetscInt          i,j
66      PetscScalar      sum
67      do 10, i=1,ncols
68        sum = y(i)
69        do 20, j=1,bs
70          sum = sum + A(j,i)*x(j)
71 20     continue
72        y(i) = sum
73 10   continue
74
75      end
76
77      subroutine MSGemm(bs,A,B,C)
78      implicit none
79      PetscInt    bs
80      MatScalar   A(bs,bs),B(bs,bs),C(bs,bs)
81      PetscScalar sum
82      PetscInt    i,j,k
83
84      do 10, i=1,bs
85        do 20, j=1,bs
86          sum = A(i,j)
87          do 30, k=1,bs
88            sum = sum - B(i,k)*C(k,j)
89 30       continue
90          A(i,j) = sum
91 20     continue
92 10   continue
93
94      end
95
96      subroutine MSGemmi(bs,A,C,B)
97      implicit none
98      PetscInt    bs
99      MatScalar   A(bs,bs),B(bs,bs),C(bs,bs)
100      PetscScalar sum
101
102      PetscInt    i,j,k
103
104      do 10, i=1,bs
105        do 20, j=1,bs
106          sum = 0.0d0
107          do 30, k=1,bs
108            sum = sum + B(i,k)*C(k,j)
109 30       continue
110          A(i,j) = sum
111 20     continue
112 10   continue
113
114      end
115