我在 Abaqus 中使用 Fortran 用户子例程 (UMAT)。我用它在我的主计算中运行其他 Abaqus 子计算。
子计算名称是变量,所以我这样定义它们:
character (len=256) :: strJOB,strOLDJOB
character (len=256) :: strGoToWorkPath,strCommand,strCmdLine
character (len=256) :: temp, strNOEL, strNPT, striCalcs, striCalcsPrev
write(temp, '(i6)') NOEL
read(temp, *) strNOEL
temp = ''
write(temp, '(i6)') NPT
read(temp, *) strNPT
temp = ''
write(temp, '(i6)') iCalcs
read(temp, *) striCalcs
temp = ''
write(temp, '(i6)') (iCalcs-1)
read(temp, *) striCalcsPrev
temp = ''
strJOB = "micro_" // trim(strNOEL) //"_"// trim(strNPT) // "_" // trim(striCalcs)
strOLDJOB = "micro_" // trim(strNOEL) //"_"// trim(strNPT) //"_"// trim(striCalcsPrev)
strGoToWorkPath = "cd C:\AbaqusCalc"
strCommand = "abaqus interactive job=" // trim(strJOB) // " oldjob=" // trim(strOLDJOB)
strCmdLine = trim(strGoToWorkPath) // ' && ' // trim(strCommand)
然后我只是call system(trim(strCmdLine))
用来运行我的子计算。
让我生气的是,这适用于一些子计算(有时只是 1,有时是 100,有点随机),但后来我得到了一些这样的错误:
Abaqus 错误:找不到以下文件:micro_1_1_1#.odb
其中 # 始终是一个“奇怪的”字符(您可以在此处查看示例https://www.dropbox.com/s/82b7u7enlxpc62e/1.jpg?dl=0)。我可以确认(通过调试或在文件上写入字符变量 strCmdLine)我正在使用参数“oldjob=micro_1_1_1”正确执行,如下所示:
cd C:\AbaqusCalc && abaqus 交互式作业=micro_1_1_2 oldjob=micro_1_1_1
在某些情况下,Abaqus 可以找到并处理旧作业(文件 micro_1_1_1.odb),但在另一些情况下,他只是在文件名末尾和“.odb”扩展名之间添加了那个奇怪的字符。
我的问题是:
- 这与
call system()
功能有关吗? - 这可能是与 Abaqus 相关而不与 Fortran 相关的错误吗?
- 有没有其他方法可以用来调用我的 Abaqus 计算,而不是
call system
?