【发布时间】:2016-11-06 20:20:20
【问题描述】:
我正在寻找 Fortran 示例(也是接口函数)以将数组作为参数传递给 lua 函数。我可以使用fortlua project 开始。但是提供的示例一次传递一个元素。感谢任何帮助。
--Lua code
local q1
local q2
function getoutput( qout1, qout2)
-- qout1 and qout2 are arrays with some dimension
q1 = qout1
q2 = qout2
end
--我在fortran中使用过
config_function('getoutput', args, 2, cstatus)
但是设置参数是我寻求帮助的地方。下面的代码完成了标量参数变量的工作,而不是我猜的数组。
!> Evaluate a function in the config file and get its result.
FUNCTION config_function(name,args,nargs,status)
REAL :: config_function
CHARACTER(LEN=*) :: name
REAL, DIMENSION(nargs) :: args
REAL(KIND=c_double) :: anarg
INTEGER :: nargs
INTEGER :: status
INTEGER :: iargs
INTEGER(c_int) :: stackstart
stackstart = lua_gettop(mluastate)
config_function = 0
status = 0
CALL lua_getglobal(mluastate,TRIM(name)//C_NULL_CHAR)
IF ( lua_type(mluastate,-1) .eq. LUA_TFUNCTION ) THEN
DO iargs = 1,nargs
anarg = args(iargs)
CALL lua_pushnumber(mluastate,anarg)
ENDDO
IF (lua_pcall(mluastate,nargs,1,0) .eq. 0) THEN
if (lua_isnumber(mluastate,-1) .ne. 0) THEN
config_function = lua_tonumber(mluastate,-1)
CALL lua_settop(mluastate,-2)
ELSE
! Nothing to pop here
status=-3
ENDIF
ELSE
CALL lua_settop(mluastate,-2)
status=-2
ENDIF
ELSE
CALL lua_settop(mluastate,-2)
status=-1
ENDIF
IF (stackstart .ne. lua_gettop(mluastate)) THEN
WRITE(*,*) 'The stack is a different size coming out of config_function'
ENDIF
END FUNCTION config_function
【问题讨论】:
-
对所有 Fortran 问题使用标签 fortran。
-
你可以把东西推到一个表中,然后把这个表传递给函数。但是,您仍然可能会将元素一个接一个地推入表中。我想,如果您正在查看大量数据,使用 userdata 可能会更好,尽管这可能会涉及很多。在 aotus 中,我们还使用将单个标量放入堆栈,尽管您可以循环任意数量的元素:geb.sts.nt.uni-siegen.de/doxy/aotus/module/aot_fun_module.html
标签: arrays lua fortran lua-table