Fortran用openmp编译出stackoverflow问题

分配的数组太大,会引发如下错误:

0x000007FE083F86C8 (DH0_fortran_DLL.dll) (GccCallfortranDLLexample.exe 中)处有未经处理的异常: 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x0000000000033000)。

应该用动态数组:

      REAL,ALLOCATABLE :: W2(:),W3(:),W4(:),W5(:),DSP_A(:)
      ALLOCATE(W2(MAXFR))
      ALLOCATE(W3(MAXFR))
      ALLOCATE(W4(MAXFR))
      ALLOCATE(W5(MAXFR))
      ALLOCATE(DSP_A(MAXFR))
      DO I=1,MAXFR
          DSP_A(I)=DSP1(I)
      END DO

在subroutine调用的时候,应该给方法写上interface

      SUBROUTINE ESCG1(NITR,EITR)
C
      IMPLICIT NONE
      PARAMETER(MAXND=80000,MAXFR=MAXND*3)
C
      interface
        subroutine AXMLT1(aaa,bbb)
          real, intent(inout) :: aaa(:), bbb(:)
        end subroutine AXMLT1
      end interface
C
C
      COMMON/EQUA/DSP1(MAXFR)
      REAL,ALLOCATABLE :: W2(:),W3(:),W4(:),W5(:),DSP_A(:)
      ALLOCATE(W2(MAXFR))
      ALLOCATE(W3(MAXFR))
      ALLOCATE(W4(MAXFR))
      ALLOCATE(W5(MAXFR))
      ALLOCATE(DSP_A(MAXFR))
      DO I=1,MAXFR
          DSP_A(I)=DSP1(I)
      END DO
      CALL AXMLT1(DSP_A,W2)
      RETURN
      END

原本的方法改为这样:

      SUBROUTINE AXMLT1(X,Z)
C
      IMPLICIT REAL*8(A-Z)
      real,allocatable,dimension(:)::X,Z
C
      RETURN
      END

http://pages.swcp.com/~walt/fortran_store/Html/Info/books/t90_2.html

转载于:https://my.oschina.net/u/2996334/blog/1809097

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值