tem_spatial_lua_vector_for_treeIds Function

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

This function invokes the vectorial Lua function, in which the barycentric coordinates are computed from treeIds of an element.

Lua function defined in the script is connected to the conf handle and return the result of the function. The Lua function takes barycentric coordinate as input argument i.e fun_name(x,y,z)

Arguments

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

Lua reference to the function to evaluate.

type(flu_State) :: conf

lua state

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

treeIds of elements in given level

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

global treelm mesh

integer, intent(in) :: n

number of return values

integer, intent(in) :: ncomp

Number of components in each returned value

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

return value


Calls

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

Called by

proc~~tem_spatial_lua_vector_for_treeids~~CalledByGraph proc~tem_spatial_lua_vector_for_treeids tem_spatial_lua_vector_for_treeIds interface~tem_spatial_lua_for tem_spatial_lua_for interface~tem_spatial_lua_for->proc~tem_spatial_lua_vector_for_treeids proc~tem_spatial_for_treeids tem_spatial_for_treeIDs proc~tem_spatial_for_treeids->interface~tem_spatial_lua_for proc~tem_spatial_scalar_for_index tem_spatial_scalar_for_index proc~tem_spatial_scalar_for_index->interface~tem_spatial_lua_for proc~tem_spatial_for_coord tem_spatial_for_coord proc~tem_spatial_scalar_for_index->proc~tem_spatial_for_coord proc~tem_spatial_vector_for_index tem_spatial_vector_for_index proc~tem_spatial_vector_for_index->interface~tem_spatial_lua_for proc~tem_spatial_vector_for_coord tem_spatial_vector_for_coord proc~tem_spatial_vector_for_index->proc~tem_spatial_vector_for_coord proc~tem_spatial_vector_for_coord->interface~tem_spatial_lua_for proc~tem_spatial_vector_for_treeids tem_spatial_vector_for_treeIDs proc~tem_spatial_vector_for_treeids->interface~tem_spatial_lua_for proc~tem_spatial_for_coord->interface~tem_spatial_lua_for interface~tem_spatial_for tem_spatial_for interface~tem_spatial_for->proc~tem_spatial_for_treeids interface~tem_spatial_for->proc~tem_spatial_scalar_for_index interface~tem_spatial_for->proc~tem_spatial_vector_for_index interface~tem_spatial_for->proc~tem_spatial_vector_for_coord interface~tem_spatial_for->proc~tem_spatial_vector_for_treeids interface~tem_spatial_for->proc~tem_spatial_for_coord proc~tem_spacetime_for_treeids tem_spacetime_for_treeIDs proc~tem_spacetime_for_treeids->interface~tem_spatial_for proc~tem_spacetime_vector_for_index tem_spacetime_vector_for_index proc~tem_spacetime_vector_for_index->interface~tem_spatial_for proc~tem_spatial_scalar_storeval tem_spatial_scalar_storeVal proc~tem_spatial_scalar_storeval->interface~tem_spatial_for proc~tem_spacetime_for_coord tem_spacetime_for_coord proc~tem_spacetime_for_coord->interface~tem_spatial_for proc~tem_spacetime_scalar_for_index tem_spacetime_scalar_for_index proc~tem_spacetime_scalar_for_index->interface~tem_spatial_for proc~tem_spacetime_vector_for_treeids tem_spacetime_vector_for_treeIDs proc~tem_spacetime_vector_for_treeids->interface~tem_spatial_for proc~tem_spacetime_vector_for_coord tem_spacetime_vector_for_coord proc~tem_spacetime_vector_for_coord->interface~tem_spatial_for proc~tem_spatial_vector_storeval tem_spatial_vector_storeVal proc~tem_spatial_vector_storeval->interface~tem_spatial_for

Contents


Source Code

  function tem_spatial_lua_vector_for_treeIds( fun_ref, conf, treeIds, tree, &
    &                                          n, ncomp ) result(res)
    ! -------------------------------------------------------------------- !
    !> Lua reference to the function to evaluate.
    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 in each returned value
    integer, intent(in) :: ncomp
    !> treeIds of elements in given level
    integer(kind=long_k), intent(in) :: treeIds(n)
    !> lua state
    type(flu_State) :: conf
    !> return value
    real(kind=rk) :: res(n,ncomp)
    ! -------------------------------------------------------------------- !
    type(aot_fun_type) :: fun
    integer :: iError(nComp)
    integer :: iDir, jDir
    real(kind=rk) :: coord(3)
    ! -------------------------------------------------------------------- !

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

    do iDir=1,n
      coord = tem_BaryOfId( tree, treeIds(iDir) )
      do jDir=1,3
        call aot_fun_put(L=conf, fun=fun, arg=coord(jDir))
      end do
      call aot_fun_do(L=conf, fun=fun, nresults=1)
      call aot_top_get_val(L=conf, val=res(iDir,:), ErrCode=iError)
      if ( any(btest(iError,aoterr_Fatal)) ) then
        write(logunit(0),*) "ERROR Obtaining a spatial 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 do

    call aot_fun_close(L=conf, fun=fun)

  end function tem_spatial_lua_vector_for_treeIds