MappedDGGradient_MappedScalar3D Subroutine

public 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

Arguments

TypeIntentOptionalAttributesName
class(MappedScalar3D), intent(in) :: this
type(c_ptr), intent(inout) :: df

Calls

proc~~mappeddggradient_mappedscalar3d~~CallsGraph proc~mappeddggradient_mappedscalar3d MappedDGGradient_MappedScalar3D interface~contravariantweight_3d_gpu ContravariantWeight_3D_gpu proc~mappeddggradient_mappedscalar3d->interface~contravariantweight_3d_gpu interface~normalweight_3d_gpu NormalWeight_3D_gpu proc~mappeddggradient_mappedscalar3d->interface~normalweight_3d_gpu self_blas_matrixop_dim2_3d self_blas_matrixop_dim2_3d proc~mappeddggradient_mappedscalar3d->self_blas_matrixop_dim2_3d interface~dg_boundarycontribution_3d_gpu DG_BoundaryContribution_3D_gpu proc~mappeddggradient_mappedscalar3d->interface~dg_boundarycontribution_3d_gpu self_blas_matrixop_dim1_3d self_blas_matrixop_dim1_3d proc~mappeddggradient_mappedscalar3d->self_blas_matrixop_dim1_3d self_blas_matrixop_dim3_3d self_blas_matrixop_dim3_3d proc~mappeddggradient_mappedscalar3d->self_blas_matrixop_dim3_3d interface~jacobianweight_3d_gpu JacobianWeight_3D_gpu proc~mappeddggradient_mappedscalar3d->interface~jacobianweight_3d_gpu

Contents


Source Code

  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