This function invokes the Lua function for a given coordinate and returns an array valued result.
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!
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | fun_ref |
Reference of the function to open |
||
real(kind=rk), | intent(in) | :: | coord(n,3) |
barycentric Ids of an elements. 1st index goes over number of elements and 2nd index goes over x,y,z coordinates |
||
type(tem_time_type), | intent(in) | :: | time |
timer object incl. the current time information |
||
integer, | intent(in) | :: | n |
number of return values |
||
integer, | intent(in) | :: | ncomp |
number of components returned for each value |
||
type(flu_State), | intent(in), | optional | :: | conf |
lua state |
return value
function tem_spacetime_lua_vector_for_coord( fun_ref, coord, time, n, ncomp, & & conf ) result(res) ! -------------------------------------------------------------------- ! !> Reference of the function to open integer, intent(in) :: fun_ref !> number of return values integer, intent(in) :: n !> number of components returned for each value integer, intent(in) :: ncomp !> barycentric Ids of an elements. !! 1st index goes over number of elements and !! 2nd index goes over x,y,z coordinates real(kind=rk), intent(in) :: coord(n,3) !> 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), optional :: conf ! -------------------------------------------------------------------- ! type(aot_fun_type) :: fun integer :: iError(ncomp) integer :: i, j ! -------------------------------------------------------------------- ! call aot_fun_open(L = conf, fun = fun, ref = fun_ref) do i=1,n do j=1,3 call aot_fun_put(L=conf, fun=fun, arg=coord(i,j)) end do call aot_fun_put(L=conf, fun=fun, arg=time%sim) call aot_fun_do(L=conf, fun=fun, nresults=1) 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 do call aot_fun_close(L = conf, fun = fun) end function tem_spacetime_lua_vector_for_coord