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