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