subroutine Gradient_Scalar2D(this,df)
implicit none
class(Scalar2D),intent(in) :: this
type(c_ptr),intent(inout) :: df
!Local
real(prec),pointer :: df_p(:,:,:,:,:)
real(prec),pointer :: dfloc(:,:,:,:)
type(c_ptr) :: dfc
call c_f_pointer(df,df_p,[this%interp%N+1,this%interp%N+1,this%nelem,this%nvar,2])
dfloc(1:,1:,1:,1:) => df_p(1:,1:,1:,1:,1)
dfc = c_loc(dfloc)
call self_blas_matrixop_dim1_2d(this%interp%dMatrix_gpu,this%interior_gpu,dfc, &
this%interp%N,this%interp%N,this%nvar,this%nelem,this%blas_handle)
dfloc(1:,1:,1:,1:) => df_p(1:,1:,1:,1:,2)
dfc = c_loc(dfloc)
call self_blas_matrixop_dim2_2d(this%interp%dMatrix_gpu,this%interior_gpu,dfc,0.0_c_prec, &
this%interp%N,this%interp%N,this%nvar,this%nelem,this%blas_handle)
dfloc => null()
df_p => null()
endsubroutine Gradient_Scalar2D