evaluate all degrees of freedom at all Gauss Points (deriv=0 solution, deriv=1 first derivative d/ds)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(t_base), | intent(in) | :: | sf |
self |
||
| integer, | intent(in) | :: | deriv(2) |
=(0,0): base, =(1,0): ds, =(0,2): dtheta, =(0,3): dzeta |
||
| real(kind=wp), | intent(in) | :: | DOFs(1:sf%s%nBase,1:sf%f%modes) |
array of all modes and all radial dofs |
||
| real(kind=wp), | intent(out) | :: | y_IP_GP(sf%f%mn_IP,sf%s%nGP_str:sf%s%nGP_end) |
OUTPUT ARRAY OF MPI SUBDOMAIN (GP points) |
SUBROUTINE base_evalDOF(sf,deriv,DOFs,y_IP_GP) ! MODULES IMPLICIT NONE !----------------------------------------------------------------------------------------------------------------------------------- ! INPUT VARIABLES CLASS(t_base), INTENT(IN ) :: sf !! self INTEGER , INTENT(IN ) :: deriv(2) !! =(0,0): base, =(DERIV_S,0): ds, =(0,DERIV_THET): dtheta, =(0,DERIV_ZETA): dzeta REAL(wp) , INTENT(IN ) :: DOFs(1:sf%s%nBase,1:sf%f%modes) !! array of all modes and all radial dofs !----------------------------------------------------------------------------------------------------------------------------------- ! OUTPUT VARIABLES REAL(wp) , INTENT(OUT ) :: y_IP_GP(sf%f%mn_IP,sf%s%nGP_str:sf%s%nGP_end) !! OUTPUT ARRAY OF MPI SUBDOMAIN (GP points) !----------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES INTEGER :: modes,mn_IP,deg,degGP INTEGER :: nGP_str,nGP_end,nElems_str,nElems_end !matrix matrix version: first s then f INTEGER :: i,j,iElem,iMode,iGP REAL(wp) :: y_tmp(sf%s%nGP_str:sf%s%nGP_end,sf%f%modes) !=================================================================================================================================== __PERFON('BaseEval') modes = sf%f%modes mn_IP = sf%f%mn_IP deg = sf%s%deg degGP = sf%s%degGP nGP_str= sf%s%nGP_str !< for MPI nGP_end= sf%s%nGP_end !< for MPI nElems_str=sf%s%grid%nElems_str !< for MPI nElems_end=sf%s%grid%nElems_end !< for MPI ! matrix-matrix version of first s then f __PERFON('eval_s') SELECT CASE(deriv(1)) CASE(0) !$OMP PARALLEL DO & !$OMP SCHEDULE(STATIC) DEFAULT(SHARED) PRIVATE(iMode,iElem,j,i) DO iMode=1,modes DO iElem=nElems_str,nElems_end j=sf%s%base_offset(iElem) i=(iElem-1)*(degGP+1)+1 y_tmp(i:i+degGP,iMode)=MATMUL(sf%s%base_GP(0:degGP,0:deg,iElem),DOFs(j:j+deg,iMode)) END DO !iElem END DO!iMode !$OMP END PARALLEL DO CASE(DERIV_S) !$OMP PARALLEL DO & !$OMP SCHEDULE(STATIC) DEFAULT(SHARED) PRIVATE(iMode,iElem,j,i) DO iMode=1,modes DO iElem=nElems_str,nElems_end j=sf%s%base_offset(iElem) i=(iElem-1)*(degGP+1)+1 y_tmp(i:i+degGP,iMode)=MATMUL(sf%s%base_ds_GP(0:degGP,0:deg,iElem),DOFs(j:j+deg,iMode)) END DO !iElem END DO!iMode !$OMP END PARALLEL DO END SELECT !deriv GP __PERFOFF('eval_s') __PERFON('eval_f') !$OMP PARALLEL DO & !$OMP SCHEDULE(STATIC) DEFAULT(SHARED) PRIVATE(iGP) DO iGP=nGP_str,nGP_end y_IP_GP(:,iGP)=sf%f%evalDOF_IP(deriv(2),y_tmp(iGP,:)) END DO !iGP !$OMP END PARALLEL DO __PERFOFF('eval_f') __PERFOFF('BaseEval') END SUBROUTINE base_evalDOF