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