tem_spacetime_lua_vector_for_treeIds Function

private function tem_spacetime_lua_vector_for_treeIds(fun_ref, treeIds, time, tree, n, ncomp, conf) result(res)

This function invokes the Lua function for barycentric coordinates of an element specified by treeIds and returns an array with the given number of components.

Note, that the returned object by the Lua function has to be a table, except if there is only one component. For arrays of length 1 the Lua return value has to be a simple scalar, not a table!

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: fun_ref

Reference of the function to open

integer(kind=long_k), intent(in) :: treeIds(n)

treeIds of elements in given level

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

timer object incl. the current time information

type(treelmesh_type), intent(in) :: tree

global treelm mesh

integer, intent(in) :: n

number of return values

integer, intent(in) :: ncomp

number of components per returned value

type(flu_State), intent(in) :: conf

lua state

Return Value real(kind=rk), (n,ncomp)

return value


Calls

proc~~tem_spacetime_lua_vector_for_treeids~~CallsGraph proc~tem_spacetime_lua_vector_for_treeids tem_spacetime_lua_vector_for_treeIds aot_fun_close aot_fun_close proc~tem_spacetime_lua_vector_for_treeids->aot_fun_close aot_fun_do aot_fun_do proc~tem_spacetime_lua_vector_for_treeids->aot_fun_do aot_fun_open aot_fun_open proc~tem_spacetime_lua_vector_for_treeids->aot_fun_open aot_fun_put aot_fun_put proc~tem_spacetime_lua_vector_for_treeids->aot_fun_put aot_top_get_val aot_top_get_val proc~tem_spacetime_lua_vector_for_treeids->aot_top_get_val proc~tem_abort tem_abort proc~tem_spacetime_lua_vector_for_treeids->proc~tem_abort proc~tem_baryofid tem_BaryOfId proc~tem_spacetime_lua_vector_for_treeids->proc~tem_baryofid mpi_abort mpi_abort proc~tem_abort->mpi_abort proc~tem_coordofid tem_CoordOfId proc~tem_baryofid->proc~tem_coordofid proc~tem_elemsizelevel tem_ElemSizeLevel proc~tem_baryofid->proc~tem_elemsizelevel proc~tem_levelof tem_LevelOf proc~tem_coordofid->proc~tem_levelof

Called by

proc~~tem_spacetime_lua_vector_for_treeids~~CalledByGraph proc~tem_spacetime_lua_vector_for_treeids tem_spacetime_lua_vector_for_treeIds interface~tem_spacetime_lua_for tem_spacetime_lua_for interface~tem_spacetime_lua_for->proc~tem_spacetime_lua_vector_for_treeids proc~tem_spacetime_for_coord tem_spacetime_for_coord proc~tem_spacetime_for_coord->interface~tem_spacetime_lua_for proc~tem_spacetime_for_treeids tem_spacetime_for_treeIDs proc~tem_spacetime_for_treeids->interface~tem_spacetime_lua_for proc~tem_spacetime_scalar_for_index tem_spacetime_scalar_for_index proc~tem_spacetime_scalar_for_index->interface~tem_spacetime_lua_for proc~tem_spacetime_scalar_for_index->proc~tem_spacetime_for_coord proc~tem_spacetime_vector_for_coord tem_spacetime_vector_for_coord proc~tem_spacetime_vector_for_coord->interface~tem_spacetime_lua_for proc~tem_spacetime_vector_for_index tem_spacetime_vector_for_index proc~tem_spacetime_vector_for_index->interface~tem_spacetime_lua_for proc~tem_spacetime_vector_for_index->proc~tem_spacetime_vector_for_coord proc~tem_spacetime_vector_for_treeids tem_spacetime_vector_for_treeIDs proc~tem_spacetime_vector_for_treeids->interface~tem_spacetime_lua_for interface~tem_spacetime_for tem_spacetime_for interface~tem_spacetime_for->proc~tem_spacetime_for_coord interface~tem_spacetime_for->proc~tem_spacetime_for_treeids interface~tem_spacetime_for->proc~tem_spacetime_scalar_for_index interface~tem_spacetime_for->proc~tem_spacetime_vector_for_coord interface~tem_spacetime_for->proc~tem_spacetime_vector_for_index interface~tem_spacetime_for->proc~tem_spacetime_vector_for_treeids proc~tem_spacetime_for_stcoord tem_spacetime_for_stcoord interface~tem_spacetime_for->proc~tem_spacetime_for_stcoord proc~tem_spacetime_for_stcoord->proc~tem_spacetime_for_coord proc~evaluate_add_spacetime_scalarbycoordinate evaluate_add_spacetime_scalarByCoordinate proc~evaluate_add_spacetime_scalarbycoordinate->interface~tem_spacetime_for proc~evaluate_add_spacetime_scalarbytreeid evaluate_add_spacetime_scalarByTreeID proc~evaluate_add_spacetime_scalarbytreeid->interface~tem_spacetime_for proc~evaluate_add_spacetime_vectorbycoordinate evaluate_add_spacetime_vectorByCoordinate proc~evaluate_add_spacetime_vectorbycoordinate->interface~tem_spacetime_for proc~evaluate_add_spacetime_vectorbytreeid evaluate_add_spacetime_vectorByTreeID proc~evaluate_add_spacetime_vectorbytreeid->interface~tem_spacetime_for proc~evaluate_first_spacetime_scalarbycoordinate evaluate_first_spacetime_scalarByCoordinate proc~evaluate_first_spacetime_scalarbycoordinate->interface~tem_spacetime_for proc~evaluate_first_spacetime_scalarbytreeid evaluate_first_spacetime_scalarByTreeID proc~evaluate_first_spacetime_scalarbytreeid->interface~tem_spacetime_for proc~evaluate_first_spacetime_vectorbycoordinate evaluate_first_spacetime_vectorByCoordinate proc~evaluate_first_spacetime_vectorbycoordinate->interface~tem_spacetime_for proc~evaluate_first_spacetime_vectorbytreeid evaluate_first_spacetime_vectorByTreeID proc~evaluate_first_spacetime_vectorbytreeid->interface~tem_spacetime_for proc~evaluate_foag_spacetime_scalarbycoordinate evaluate_FOAG_spacetime_scalarByCoordinate proc~evaluate_foag_spacetime_scalarbycoordinate->interface~tem_spacetime_for proc~evaluate_foag_spacetime_scalarbytreeid evaluate_FOAG_spacetime_scalarByTreeID proc~evaluate_foag_spacetime_scalarbytreeid->interface~tem_spacetime_for proc~evaluate_foag_spacetime_vectorbycoordinate evaluate_FOAG_spacetime_vectorByCoordinate proc~evaluate_foag_spacetime_vectorbycoordinate->interface~tem_spacetime_for proc~evaluate_foag_spacetime_vectorbytreeid evaluate_FOAG_spacetime_vectorByTreeID proc~evaluate_foag_spacetime_vectorbytreeid->interface~tem_spacetime_for proc~get_valofindex_add_scalar_spacetime get_valOfIndex_add_scalar_spacetime proc~get_valofindex_add_scalar_spacetime->interface~tem_spacetime_for proc~get_valofindex_add_vector_spacetime get_valOfIndex_add_vector_spacetime proc~get_valofindex_add_vector_spacetime->interface~tem_spacetime_for proc~get_valofindex_first_scalar_spacetime get_valOfIndex_first_scalar_spacetime proc~get_valofindex_first_scalar_spacetime->interface~tem_spacetime_for proc~get_valofindex_first_vector_spacetime get_valOfIndex_first_vector_spacetime proc~get_valofindex_first_vector_spacetime->interface~tem_spacetime_for proc~get_valofindex_foag_scalar_spacetime get_valOfIndex_FOAG_scalar_spacetime proc~get_valofindex_foag_scalar_spacetime->interface~tem_spacetime_for proc~get_valofindex_foag_vector_spacetime get_valOfIndex_FOAG_vector_spacetime proc~get_valofindex_foag_vector_spacetime->interface~tem_spacetime_for proc~tem_update_surfpos tem_update_surfPos proc~tem_update_surfpos->interface~tem_spacetime_for

Source Code

  function tem_spacetime_lua_vector_for_treeIds( fun_ref, treeIds, time, tree, &
    &                                            n, ncomp, conf ) result(res)
    ! -------------------------------------------------------------------- !
    !> Reference of the function to open
    integer, intent(in) :: fun_ref
    !> global treelm mesh
    type(treelmesh_type), intent(in) ::tree
    !> number of return values
    integer, intent(in) :: n
    !> number of components per returned value
    integer, intent(in) :: ncomp
    !> treeIds of elements in given level
    integer(kind=long_k), intent(in) :: treeIds(n)
    !> timer object incl. the current time information
    type(tem_time_type), intent(in)  :: time
    !> return value
    real(kind=rk) :: res(n,ncomp)
    !> lua state
    type(flu_State), intent(in) :: conf
    ! -------------------------------------------------------------------- !
    type(aot_fun_type) :: fun
    integer :: iError(ncomp)
    integer :: i, j
    real(kind=rk) :: coord(3)
    ! -------------------------------------------------------------------- !

    call aot_fun_open(L = conf, fun = fun, ref = fun_ref)

    do i=1,n
      coord = tem_BaryOfId( tree, treeIds(i) )
      do j=1,3
        call aot_fun_put(L=conf, fun=fun, arg=coord(j))
      end do
      call aot_fun_put(L=conf, fun=fun, arg=time%sim)
      call aot_fun_do(L=conf, fun=fun, nresults=1)
      if (nComp == 1) then
        call aot_top_get_val(L=conf, val=res(i,1), ErrCode=iError(1))
        if ( any(btest(iError,aoterr_Fatal)) ) then
          write(logunit(0),*) "ERROR Obtaining a space time function"
          write(logunit(0),*) "Probably wrong number of components returned"
          write(logunit(0),*) "or a scalar was return as a lua table"
          write(logunit(0),*) 'Expected nComp: ', nComp
          write(logunit(0),*) 'ErrorCodes: ', iError
          write(logunit(0),*) "Check return values of your Lua functions!"
          call tem_abort()
        end if
      else
        call aot_top_get_val(L=conf, val=res(i,:), ErrCode=iError)
        if ( any(btest(iError,aoterr_Fatal)) ) then
          write(logunit(0),*) "ERROR Obtaining a space time function"
          write(logunit(0),*) "Probably wrong number of components returned"
          write(logunit(0),*) "or a scalar was return as a lua table"
          write(logunit(0),*) 'Expected nComp: ', nComp
          write(logunit(0),*) 'ErrorCodes: ', iError
          write(logunit(0),*) "Check return values of your Lua functions!"
          call tem_abort()
        end if
      end if
    end do

    call aot_fun_close(L = conf, fun = fun)

  end function tem_spacetime_lua_vector_for_treeIds