Calculates the gradient of a function using the weak form of the gradient and the average boundary state. This method will compute the average boundary state from the and attributes of
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(MappedScalar3D), | intent(in) | :: | this | |||
type(c_ptr), | intent(inout) | :: | df |
subroutine MappedDGGradient_MappedScalar3D(this,df)
!! Calculates the gradient of a function using the weak form of the gradient
!! and the average boundary state.
!! This method will compute the average boundary state from the
!! and attributes of
implicit none
class(MappedScalar3D),intent(in) :: this
type(c_ptr),intent(inout) :: df
! Local
real(prec),pointer :: f_p(:,:,:,:,:,:)
type(c_ptr) :: fc
call ContravariantWeight_3D_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%interp%N+1,this%nelem,3*this%nvar,3])
fc = c_loc(f_p(1,1,1,1,1,1))
call self_blas_matrixop_dim1_3d(this%interp%dgMatrix_gpu,fc,df, &
this%interp%N,this%interp%N,3*this%nvar,this%nelem,this%blas_handle)
fc = c_loc(f_p(1,1,1,1,1,2))
call self_blas_matrixop_dim2_3d(this%interp%dgMatrix_gpu,fc,df, &
1.0_c_prec,this%interp%N,this%interp%N,3*this%nvar,this%nelem,this%blas_handle)
fc = c_loc(f_p(1,1,1,1,1,3))
call self_blas_matrixop_dim3_3d(this%interp%dgMatrix_gpu,fc,df, &
1.0_c_prec,this%interp%N,this%interp%N,3*this%nvar,this%nelem,this%blas_handle)
f_p => null()
! Do the boundary terms
call NormalWeight_3D_gpu(this%avgBoundary_gpu, &
this%geometry%nhat%boundary_gpu,this%geometry%nscale%boundary_gpu, &
this%boundarynormal_gpu, &
this%interp%N,this%nvar,this%nelem)
call DG_BoundaryContribution_3D_gpu(this%interp%bmatrix_gpu,this%interp%qweights_gpu, &
this%boundarynormal_gpu,df,this%interp%N,3*this%nvar,this%nelem)
call JacobianWeight_3D_gpu(df,this%geometry%J%interior_gpu,this%N,3*this%nVar,this%nelem)
endsubroutine MappedDGGradient_MappedScalar3D