evaluate all degrees of freedom at all Gauss Points (deriv=0 solution, deriv=1 first derivative d/ds)
__MATVEC_N(y_GP(k:k+degGP),sf%base_GP(:,:,iElem),DOFs(j:j+deg)) __MATVEC_N(y_GP(k:k+degGP),sf%base_ds_GP(:,:,iElem),DOFs(j:j+deg))
| Type | Intent | Optional | 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 |
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