Update all time reduction operation variables for entire domain
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | redTransVarPos(:) |
Position of time reduction variables in varSys |
||
type(tem_varSys_type), | intent(in) | :: | varSys |
Global Variable system |
||
type(treelmesh_type), | intent(in) | :: | tree |
treelmesh_type |
||
type(tem_time_type), | intent(in) | :: | time |
Current time |
subroutine tem_opVar_reduction_transient_update(redTransVarPos, varSys, tree,&
& time)
! ---------------------------------------------------------------------- !
!> Position of time reduction variables in varSys
integer, intent(in) :: redTransVarPos(:)
!> Global Variable system
type(tem_varSys_type), intent(in) :: varSys
!> treelmesh_type
type(treelmesh_type), intent(in) :: tree
!> Current time
type(tem_time_type), intent(in) :: time
! ---------------------------------------------------------------------- !
integer :: elemPos(tree%nElems)
real(kind=rk), allocatable :: input_varRes(:)
integer :: iVar, iElem, posDepVar, nCompMax, idxMax, nDofs
type(tem_varSys_op_data_type), pointer :: opData
! ---------------------------------------------------------------------- !
! Only need to do anything here if at least one variable with reduction
! is to be computed.
if (size(redTransVarPos) < 1) RETURN
! nDofs of solver are stored in opData%redTrans which is same for all
! variables so get from any reduction_transient variable
call C_F_Pointer(varSys%method%val(redTransVarPos(1))%method_data, &
& opData )
nDofs = opData%redTrans%nDofs
elemPos(1:tree%nElems) = (/ (iElem, iElem=1, tree%nElems) /)
nCompMax = maxval(varSys%method%val(redTransVarPos(:))%nComponents)
allocate(input_varRes(tree%nElems*nCompMax*nDofs))
do iVar = 1, size(redTransVarPos)
call C_F_Pointer(varSys%method%val(redTransVarPos(iVar))%method_data, &
& opData )
posDepVar = varSys%method%val(redTransVarPos(iVar))%input_varPos(1)
call varSys%method%val(posDepVar)%get_element( &
& varSys = varSys, &
& elemPos = elemPos, &
& time = time, &
& tree = tree, &
& nElems = tree%nElems, &
& nDofs = nDofs, &
& res = input_varRes(:) )
idxMax = opData%redTrans%nEntries
call tem_reduction_transient_update(me = opData%redTrans, &
& res = input_varRes(1:idxMax) )
end do
deallocate(input_varRes)
end subroutine tem_opVar_reduction_transient_update