在ansys的linux下的分割错误

我在使用Fortran(Intel Composer(2011.1.107))为ANSYS14.5.7编写用户子程序。我编辑了一些代码,将一些数据写入外部顺序文件,并将它们读取到数组中进行计算,如下所示:

c Writes the array elements into the relevent elementID file and Integration point Do ElementNo=1,MaxEleNo c writes the file name for the relevent element write (filename1, '( "Element_", I4)' ) ElementNo c opens the relevent file for the element data OPEN(unit=ElementNo,status='unknown',ACCESS='APPEND' & ,file=filename1) Write(ElementNo,fmt='(*(D))')(sthistory(ElementNo,:)) close (ElementNo) end do sthistory=ZERO else endif 

当我运行这个时,我从HPC系统得到这个错误:

 Lyra: Ansys (v14.5.7) loaded. Lyra: Intel Composer (2011.1.107) module loaded. /pkg/suse11/ansys/v145/ansys/bin/ansys145: line 817: 50102 Segmentation fault /pkg/suse11/ansys/v145/ansys/bin/linx64/ansys.e145 -np 4 

但是当我在子例程中使用具有save属性的静态数组运行代码时没有问题。 但是,在我的计算中保存所有数据并不足够。 有人能帮我find什么是可能的。

低单位数通常保留为“特殊单位”,如STDOUTSTDERRSTDIN 。 不要使用这些(除非你知道自己在做什么),否则会发生意想不到的事情。 我轻度地意识到单位数字有一些上限,但目前我找不到一个参考。

所以解决你的问题最简单的方法就是给单元添加一个偏移量(这又会导致大数组的问题),或者如果你的编译器支持,则使用newunit= 。 但是因为你关闭了循环体的末尾的文件,不使用1234这样的固定数字吗?

但是你的代码有更多的问题:线路

 write (filename1, '( "Element_", I4)' ) ElementNo 

会导致问题(对于大多数编译器)。

考虑这个简单的程序:

 program test write (*, '( "Element_", I4)' ) 1 write (*, '( "Element_", I4)' ) 10 write (*, '( "Element_", I4)' ) 100 write (*, '( "Element_", I4)' ) 1000 write (*, '( "Element_", I4)' ) 10000 end program 

输出是:

 Element_ 1 Element_ 10 Element_ 100 Element_1000 Element_**** 

这导致包含空格的文件名。 这可能会导致错误! 你可以做的是通过使用'( "Element_", I4.4)'改变格式说明符来使用固定长度,这将给你:

 Element_0001 Element_0010 Element_0100 Element_1000 Element_**** 

你可以看到,四位数字仍然太小,不能容纳更大的元素,但没有空间。

最后,如果你想直接在斜线后面开始数字而不用前导零,你可以使用adjustl()trim()

 program test character(len=32) :: filename write (filename, '(I4)') 1 filename = "Element_" // adjustl(trim(filename)) write(*,'(a)') filename write (filename, '(I4)') 10 filename = "Element_" // adjustl(trim(filename)) write(*,'(a)') filename write (filename, '(I4)') 100 filename = "Element_" // adjustl(trim(filename)) write(*,'(a)') filename end program 

结果是

 Element_1 Element_10 Element_100