我已经编写了一个python代码,用于在Abaqus中对结构进行建模。我已经在命令窗口中通过abaqus cae noGUI=mycode.py
进行了检查(这就是调用Abaqus来运行该代码的方式)。它完全可以工作。我还用abaqus(在Fortran中)编写了UMAT
代码。我需要在该UMAT
代码中调用Python代码。
我使用了st=system('abaqus cae noGUI=mycode.py')
,而st
是一个整数。但是,未调用python代码。我创建了一个批处理文件,其中写了abaqus cae noGUI=mycode.py
。我用st=system('code.bat')
在UMAT中调用了该文件,但收到一个错误,指出code.bat
无法识别为内部或外部命令,可操作程序或批处理文件。
答案 0 :(得分:1)
从Fortran子例程运行Abaqus / CAE Python脚本,甚至调用内置的Python解释器,当然可以完成。我发现它在某些带有警告的边缘情况下非常有用。 谨慎使用。
您似乎走在正确的轨道上,但是您必须记住对Abaqus子例程中指定的所有外部文件使用完整文件路径。
您会发现Abaqus实用程序子例程getjobname
和getoutdir
很有用。这是一个准系统示例片段,其中包含一些变量定义:
use ifport, only: system, ierrno !! Note: `USE` must come before any `INLCUDE`
character(len=256) :: outdir, jobname
character(len=:), allocatable :: cwd, cmd
integer :: jobnamelen, outdirlen, rc, errnum
call getjobname(jobname, jobnamelen)
call getoutdir(outdir, outdirlen)
cwd = outdir(1:outdirlen)
cmd = 'abaqus cae nogui=' // cwd // '/my_script.py'
rc = system(cmd)
if (rc .eq. -1) then
errnum = ierrno( )
print *, 'Error: ', errnum
endif
注释:
1。如果未指定完整路径,Abaqus将假定存在外部文件/将在临时目录中创建外部文件。通常这与当前工作目录不同。
2。上面显示的代码段已使用uexternaldb
和通用的“ hello world”样式的Python脚本成功进行了测试。
3。如果您使用的是ifort 17或更高版本(如果需要),还应该可以将ifport
的可移植性功能替换为Fortran 2008固有的execute_command_line
。
4。您可以使用批处理文件,但是,该批处理文件(以及批处理文件中提到的Python脚本)仍必须具有完整的文件路径。