tem_spacetime_scalar_for_index Function

private function tem_spacetime_scalar_for_index(me, grwPnt, idx, nVals, iLevel, time) result(res)

This function returns pre-stored value at given idx if spacetime function is predefined apesmate else evaluate a spacetime function for a point at given idx in growing array of points. Return value is a scalar.

Arguments

Type IntentOptional Attributes Name
type(tem_spacetime_fun_type), intent(in) :: me

spacetime type

type(tem_grwPoints_type), intent(in) :: grwPnt

growing array of all spacetime point of a variable

integer, intent(in) :: idx(nVals)

Index position to return a pre-store value or to compute

integer, intent(in) :: nVals

number of return values

integer, intent(in) :: iLevel

Level to access stored value in aps_coupling

type(tem_time_type), intent(in) :: time

timer object incl. the current time information

Return Value real(kind=rk), (nVals)

return value of a function


Source Code

  function tem_spacetime_scalar_for_index( me, grwPnt, idx, nVals, iLevel, &
    &                                      time ) result (res)
    ! -------------------------------------------------------------------- !
    !> spacetime type
    type(tem_spacetime_fun_type), intent(in) :: me
    !> number of return values
    integer, intent(in) :: nVals
    !> growing array of all spacetime point of a variable
    type(tem_grwPoints_type), intent(in) :: grwPnt
    !> Index position to return a pre-store value or to compute
    integer, intent(in) :: idx(nVals)
    !> return value of a function
    real( kind=rk ) :: res(nVals)
    !> Level to access stored value in aps_coupling
    integer, intent(in) :: iLevel
    !> timer object incl. the current time information
    type(tem_time_type), intent(in)  :: time
    ! -------------------------------------------------------------------- !
    integer :: iVal
    real(kind=rk) :: coord(1,3), res_tmp(1), trans
    ! -------------------------------------------------------------------- !
    select case (trim(me%fun_kind))
    case ('none')
      res = 0.0
    case ('const')
      res = me%const(1)
    case ('lua_fun')
      do iVal = 1, nVals
        coord(1,:) =  (/ grwPnt%coordX%val( idx(iVal) ), &
          &              grwPnt%coordY%val( idx(iVal) ), &
          &              grwPnt%coordZ%val( idx(iVal) ) /)

        res_tmp = tem_spacetime_lua_for( fun_ref = me%lua_fun_ref, &
          &                              coord   = coord,          &
          &                              time    = time,           &
          &                              n       = 1,              &
          &                              conf    = me%conf         )

        res(iVal) = res_tmp(1)
      end do
    case ('combined')
      trans = tem_temporal_for( temporal   = me%temporal, &
        &                       time       = time         )
      res = tem_spatial_for( me     = me%spatial, &
        &                    grwPnt = grwPnt,     &
        &                    idx    = idx,        &
        &                    nVals  = nVals,      &
        &                    iLevel = iLevel      )
      res = trans*res
    case ('apesmate')
      res(1:nVals) = me%aps_coupling%valOnLvl(iLevel)      &
        &                           %evalVal( idx(1:nVals) )
    case ('precice')
      res(1:nVals) = tem_precice_read(                            &
        & dataID   = me%precice_coupling%readVar%IDs(1),          &
        & npoints  = nVals,                                       &
        & posIDs   = me%precice_coupling%readVar%posIDLvl(iLevel) &
        &                              %posIDs(idx(:))            )
    case default
      do iVal = 1, nVals
        coord(1,:) =  (/ grwPnt%coordX%val( idx(iVal) ), &
          &              grwPnt%coordY%val( idx(iVal) ), &
          &              grwPnt%coordZ%val( idx(iVal) ) /)

        res_tmp = tem_spacetime_for_coord( me    = me,    &
          &                                coord = coord, &
          &                                time  = time,  &
          &                                n     = 1      )
        res(iVal) = res_tmp(1)
      end do
    end select

  end function tem_spacetime_scalar_for_index