我正在寻找Fortran示例(也是接口函数)将数组作为参数传递给lua函数。我能够使用fortlua project开始。但提供的示例一次只传递一个元素。感谢任何帮助。将数组作为函数参数传递给Fortran
--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问题使用标签[tag:fortran]。 –
你可以将东西放到一个表中,然后将这个表传递给函数。但是,您仍然可能会将这些元素逐个推入表格中。我想,如果你正在研究大量的数据,使用userdata可能会更好,尽管这可能会相当复杂。在aotus中,我们也使用将单个标量放入堆栈,尽管您可以遍历任意数量的元素:https://geb.sts.nt.uni-siegen.de/doxy/aotus/module/aot_fun_module.html – haraldkl