sBase_evalDOF_GP Function

private function sBase_evalDOF_GP(sf, deriv, DOFs) result(y_GP)

evaluate all degrees of freedom at all Gauss Points (deriv=0 solution, deriv=1 first derivative d/ds)

CALL DGEMV('N',SIZE(sf%base_GP(:,:,iElem),1),SIZE(sf%base_GP(:,:,iElem),2),1.0_wp,sf%base_GP(:,:,iElem),SIZE(sf%base_GP(:,:,iElem),1),DOFs(j:j+deg),1,0.0_wp,y_GP(k:k+degGP),1) CALL DGEMV('N',SIZE(sf%base_ds_GP(:,:,iElem),1),SIZE(sf%base_ds_GP(:,:,iElem),2),1.0_wp,sf%base_ds_GP(:,:,iElem),SIZE(sf%base_ds_GP(:,:,iElem),1),DOFs(j:j+deg),1,0.0_wp,y_GP(k:k+degGP),1)

Type Bound

t_sBase

Arguments

Type IntentOptional Attributes Name
class(t_sBase), intent(in) :: sf

self

integer, intent(in) :: deriv

only 0 or 1

real(kind=wp), intent(in) :: DOFs(:)

array of all degrees of freedom

Return Value real(kind=wp), (1:sf%nGP)


Called by

proc~~sbase_evaldof_gp~~CalledByGraph proc~sbase_evaldof_gp t_sBase%sBase_evalDOF_GP proc~sbase_test sBase_test proc~sbase_test->proc~sbase_evaldof_gp proc~sbase_new sBase_new proc~sbase_test->proc~sbase_new proc~sbase_init t_sBase%sBase_init proc~sbase_init->proc~sbase_test proc~sbase_copy t_sBase%sBase_copy proc~sbase_copy->proc~sbase_init proc~sbase_new->proc~sbase_init proc~base_copy t_base%base_copy proc~base_copy->proc~sbase_copy proc~base_new Base_new proc~base_new->proc~sbase_new proc~readstatefilefromascii ReadStateFileFromASCII proc~readstatefilefromascii->proc~sbase_new proc~readstatefilefromascii->proc~base_new interface~readstate ReadState interface~readstate->proc~readstatefilefromascii proc~init_base Init_Base proc~init_base->proc~base_new proc~initmhd3d t_functional_mhd3d%InitMHD3D proc~initmhd3d->proc~base_new proc~transform_sfl_init t_transform_sfl%transform_SFL_init proc~transform_sfl_init->proc~base_new proc~init Init proc~init->proc~initmhd3d proc~init_gvec_to_jorek init_gvec_to_jorek proc~init_gvec_to_jorek->interface~readstate proc~init_gvec_to_jorek->proc~init_base proc~restartfromstate RestartFromState proc~restartfromstate->interface~readstate proc~rungvec rungvec proc~rungvec->proc~initmhd3d proc~transform_sfl_new transform_sfl_new proc~transform_sfl_new->proc~transform_sfl_init program~gvec_post GVEC_POST program~gvec_post->proc~initmhd3d proc~start_rungvec start_rungvec proc~start_rungvec->proc~rungvec program~gvec GVEC program~gvec->proc~rungvec

Source Code

FUNCTION sBase_evalDOF_GP(sf,deriv,DOFs) RESULT(y_GP)
! MODULES
IMPLICIT NONE
!-----------------------------------------------------------------------------------------------------------------------------------
! INPUT VARIABLES
  CLASS(t_sbase), INTENT(IN   ) :: sf     !! self
  INTEGER       , INTENT(IN   ) :: deriv  !! only 0 or 1
  REAL(wp)      , INTENT(IN   ) :: DOFs(:)  !! array of all degrees of freedom
!-----------------------------------------------------------------------------------------------------------------------------------
! OUTPUT VARIABLES
  REAL(wp)                      :: y_GP(1:sf%nGP) ! will be be 1D array on input/output
!-----------------------------------------------------------------------------------------------------------------------------------
! LOCAL VARIABLES
  INTEGER                       :: iElem,j,k,deg,degGP,nelems
!===================================================================================================================================
  IF(SIZE(DOFs,1).NE.sf%nBase) CALL abort(__STAMP__, &
               'nDOF not correct when calling sBase_evalDOF_GP')
  deg=sf%deg; degGP=sf%degGP; nElems=sf%grid%nElems
  SELECT CASE(deriv)
  CASE(0)
!    k=1
!$OMP PARALLEL DO        &
!$OMP   SCHEDULE(STATIC) &
!$OMP   DEFAULT(NONE)    &
!$OMP   PRIVATE(iElem,j,k)  &
!$OMP   SHARED(sf,y_GP,DOFs,deg,degGP,nElems)
     DO iElem=1,nElems
      j=sf%base_offset(iElem)
      k=(iElem-1)*(degGP+1)+1
      y_GP(k:k+degGP)=MATMUL(sf%base_GP(   :,:,iElem),DOFs(j:j+deg))
      !!__MATVEC_N(y_GP(k:k+degGP),sf%base_GP(:,:,iElem),DOFs(j:j+deg))
    END DO
!$OMP END PARALLEL DO
  CASE(DERIV_S)
!    k=1
!$OMP PARALLEL DO        &
!$OMP   SCHEDULE(STATIC) &
!$OMP   DEFAULT(NONE)    &
!$OMP   PRIVATE(iElem,j,k)  &
!$OMP   SHARED(sf,y_GP,DOFs,deg,degGP,nElems)
    DO iElem=1,nElems
      j=sf%base_offset(iElem)
      k=(iElem-1)*(degGP+1)+1
      y_GP(k:k+degGP)=MATMUL(sf%base_ds_GP(:,:,iElem),DOFs(j:j+deg))
      !!__MATVEC_N(y_GP(k:k+degGP),sf%base_ds_GP(:,:,iElem),DOFs(j:j+deg))
    END DO
!$OMP END PARALLEL DO
  CASE DEFAULT
    CALL abort(__STAMP__, &
       'called evalDOF_GP: deriv must be 0 or DERIV_S!' )
  END SELECT !deriv
END FUNCTION sbase_evalDOF_GP