Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(c_ptr), | intent(in) | :: | A | |||
type(c_ptr), | intent(in) | :: | f | |||
type(c_ptr), | intent(inout) | :: | Af | |||
integer, | intent(in) | :: | controldegree | |||
integer, | intent(in) | :: | targetdegree | |||
integer, | intent(in) | :: | nvars | |||
integer, | intent(in) | :: | nelems | |||
type(c_ptr), | intent(in) | :: | handle |
subroutine self_blas_matrixop_dim1_2d(A,f,Af,controldegree,targetdegree,nvars,nelems,handle)
type(c_ptr),intent(in) :: A
type(c_ptr),intent(in) :: f
type(c_ptr),intent(inout) :: Af
integer,intent(in) :: controldegree,targetdegree,nvars,nelems
type(c_ptr),intent(in) :: handle
! Local
integer(c_int) :: m
integer(c_int) :: n
integer(c_int) :: k
real(c_prec) :: alpha
integer(c_int) :: lda
integer(c_int) :: ldb
integer(c_int) :: ldc
real(c_prec) :: beta
m = targetdegree+1 ! number of rows of A^T
n = nvars*nelems*(controldegree+1) ! number of columns of B
k = controldegree+1 ! number of columns of A^T
alpha = 1.0_c_prec
lda = k ! leading dimension of A (interpolation/derivative matrix)
ldb = k ! leading dimension of B (f)
ldc = m ! leading dimension of C (fTarget)
beta = 0.0_c_prec
! First pass interpolates in the first quadrature dimension
call hipblasCheck(hipblasgemm(handle, &
HIPBLAS_OP_T,HIPBLAS_OP_N, &
m,n,k,alpha, &
A,lda, &
f,ldb,beta, &
Af,ldc))
endsubroutine self_blas_matrixop_dim1_2d