我查了帮助文档,需要在MDI_ACAR_PRIVATE_DIR环境变量定义的路径下,默认是C:\Documents and Settings\用户名\arail_private路径下,我将userPortName.h,utilCcallable.h,DFORMD.LIB,DFPORT.LIB以及C语言编写的用户自定义子程序都放在这个目录下,并且按照Adams帮助文档,把C语言编写的用户自定义子程序用户名改为req123.c ,内容为: (这里为了试验能否通过,函数里面没有加任何内容)
在命令行窗口中,将路径调到C:\Documents and Settings\用户名\arail_private路径下
运行
C:\Documents and Settings\用户名\arail_private>adams05 arail cr-solverprivate n 回车
req123.c回车
回车
出现的错误如下图所示
虽然有错误,但是在该路径下adams生成的dispatch.f文件中添加了对应req子程序第一个参数为123的一段:
subroutine reqsub( ID,
& TIME,
& PAR,
& NPAR,
& IFLAG,
& RESULT )
C This is a dispatcher routine written by gendisp.exe
INTEGER ID
DOUBLE PRECISION TIME
DOUBLE PRECISION PAR(*)
INTEGER NPAR
LOGICAL IFLAG
DOUBLE PRECISION RESULT(8)
C Local variables
character*(80) errmsg
......
ELSE IF ( INT(PAR(1)).EQ.123 ) THEN
CALL req123 ( ID,
& TIME,
& PAR,
& NPAR,
& IFLAG,
& RESULT )
ELSE
......
如将用户自定义子程序名字改为reqsub123.c,则运行
C:\Documents and Settings\用户名\arail_private>adams05 arail cr-solverprivate n req123.f 回车回车
能通过,但是查看dispatch.f,其中没有添加reqsub子程序对应处理第一个参数为123的一段程序,下面再运行
C:\Documents and Settings\用户名\arail_private>adams05 arail ru-solver d1_dyn.acf会报错,无法正常仿真模型,错误如下图:
我按照上述完全相同的方法,改为采用fortran编写用户自定义子程序req123.f,内容为
subroutine req123( id, time, par, npar, iflag, result )
integer id, npar
double precision time, par(*), result(8)
logical iflag
return
end
则C:\Documents and Settings\用户名\arail_private>adams05 arail cr-solverprivate n req123.f 回车回车
能通过
再运行C:\Documents and Settings\用户名\arail_private>adams05 arail ru-solver d1_dyn.acf
也能一切正常的运行