Calculates the gradient of a function using the strong form of the gradient in mapped coordinates.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(MappedScalar2D), | intent(inout) | :: | this | |||
type(c_ptr), | intent(out) | :: | df |
subroutine MappedGradient_MappedScalar2D(this,df)
!! Calculates the gradient of a function using the strong form of the gradient
!! in mapped coordinates.
implicit none
class(MappedScalar2D),intent(inout) :: this
type(c_ptr),intent(out) :: df
! Local
real(prec),pointer :: f_p(:,:,:,:,:)
type(c_ptr) :: fc
call ContravariantWeight_2D_gpu(this%interior_gpu, &
this%geometry%dsdx%interior_gpu,this%jas_gpu, &
this%interp%N,this%nvar,this%nelem)
! From Vector divergence
call c_f_pointer(this%jas_gpu,f_p,[this%interp%N+1,this%interp%N+1,this%nelem,2*this%nvar,2])
fc = c_loc(f_p(1,1,1,1,1))
call self_blas_matrixop_dim1_2d(this%interp%dMatrix_gpu,fc,df, &
this%interp%N,this%interp%N,2*this%nvar,this%nelem,this%blas_handle)
fc = c_loc(f_p(1,1,1,1,2))
call self_blas_matrixop_dim2_2d(this%interp%dMatrix_gpu,fc,df, &
1.0_c_prec,this%interp%N,this%interp%N,2*this%nvar,this%nelem,this%blas_handle)
f_p => null()
call JacobianWeight_2D_gpu(df,this%geometry%J%interior_gpu,this%N,2*this%nVar,this%nelem)
endsubroutine MappedGradient_MappedScalar2D