使用abaqus子程序读取多个处理器的文件时出错(cpus)

时间:2015-02-23 22:53:47

标签: subroutine multiprocessor abaqus

当我使用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

我的子程序如下所示:       字符* 12 check1       整数check2,错误       OPEN(10,文件=' data.dat文件',状态='旧',的iostat =错误)
      if(error.EQ.0)然后           读(10,*,iostat =错误)check1,Nm       结束如果
      关闭(10)
      打印*,' Nm =',nm,错误       打印*,' **'

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

Nm = 2 0

Nm = 8880 0

**

**

1 个答案:

答案 0 :(得分:1)

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

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

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

如果你真的需要在每个并行线程中本地打开这个文件(看不出原因但是可以打开更正),你可以使用GETNUMCPUS和GETRANK在每个文件中打开不同的文件副本线。 GETRANK返回一个整数,给出进程的等级/ ID。我会建议反对这种方法。如果您的问题足够大以保证使用并行,那么您应该避免使用文件读取减慢速度。

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