1

当我使用 abaqus 子程序读取具有多个处理器(cpus)的文件时出现错误,你能帮我处理这个错误吗。非常感谢

我想从文件中读取变量,当使用一个cpu时,一切正常,但是当使用多个cpu时,就会出现错误,似乎每个cpu都重复相同的命令。

例如,下面是要读取的文件内容,文件名是data.dat

*matID ,2,1

131000.000、8880.000、8180.000

   0.324,       0.324,       0.300

3990.000,    5320.000,    5320.000

1871.000,      59.700,      59.700

1291.000,     215.000,     215.000

  90.000,     102.000,     102.000

我的子程序如下所示: character*12 check1 integer check2,error OPEN(10,file='data.dat',status='old',iostat=error)
if (error.EQ.0) then read(10, *,iostat=error) check1,Nm end if
close(10)
print *,'Nm=',nm,error print *,'**'

当我使用 2 个 CPU 时,打印结果将是:

牛米= 2 0

牛米= 8880 0

**

**

4

1 回答 1

2

根据从文件中读取数据的原因,有几种方法可以避免这个问题:

如果您只需要访问一次数据:在始终以串行方式调用的子程序中读取数据。UEXTERNALDB 是一个很好的例子,可以用来使文件打开仅在分析开始时或根据需要增量开始时发生。然后,您可以小心地将信息存储在公共块中。从一个公共块并行读取应该可以正常工作,但不要从并行子例程写入它们。

另一种获取少量数据的方法是在输入文件中定义解决方案变量。

如果您确实需要在每个并行线程中本地打开此文件(不知道原因,但需要更正),您可以使用 GETNUMCPUS 和 GETRANK 在每个线程中打开文件的不同副本。GETRANK 返回一个整数,为您提供进程的等级/ID。不过,我建议不要使用这种方法。如果您的问题大到足以保证使用并行,那么您应该避免通过文件读取减慢它的速度。

有关详细信息,请参阅 Abaqus 6.14 文档的 1.1.31 和 2.1.4 部分。

于 2015-05-13T11:05:33.517 回答