subroutine Gradient_Vector3D(this,df)
implicit none
class(Vector3D),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%interp%N+1,this%nelem,this%nvar,2,2])
dfloc(1:,1:,1:,1:,1:) => df_p(1:,1:,1:,1:,1:,1,1)
dfc = c_loc(dfloc)
call self_blas_matrixop_dim1_3d(this%interp%dMatrix_gpu,this%interior_gpu,dfc, &
this%interp%N,this%interp%N,3*this%nvar,this%nelem,this%blas_handle)
dfloc(1:,1:,1:,1:,1:) => df_p(1:,1:,1:,1:,1:,1,2)
dfc = c_loc(dfloc)
call self_blas_matrixop_dim2_3d(this%interp%dMatrix_gpu,this%interior_gpu,dfc,0.0_c_prec, &
this%interp%N,this%interp%N,3*this%nvar,this%nelem,this%blas_handle)
dfloc(1:,1:,1:,1:,1:) => df_p(1:,1:,1:,1:,1:,1,3)
dfc = c_loc(dfloc)
call self_blas_matrixop_dim3_3d(this%interp%dMatrix_gpu,this%interior_gpu,dfc,0.0_c_prec, &
this%interp%N,this%interp%N,3*this%nvar,this%nelem,this%blas_handle)
dfloc => null()
df_p => null()
endsubroutine Gradient_Vector3D