Actual source code: sgemv.F90
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)
13: PetscInt i,j
15: do 5, j=1,bs
16: y(j) = 0.0d0
17: 5 continue
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
25: return
26: end
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)
34: PetscInt i, j
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
42: return
43: end
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)
51: PetscInt i, j
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
59: return
60: end
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)
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
78: return
79: end
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
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
98: return
99: end
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
107: PetscInt i,j,k
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
119: return
120: end