fortran的报错解决方法

主程序:

PROGRAM ap8ae8
      real L_FROMFILE_Start,L_FROMFILE_End, L_FROMFILE_Gap,
     1BB0_FROMFILE_Start,BB0_FROMFILE_End,BB0_FROMFILE_Gap,
     1xlatStart,xlatEnd,xlatGap,xlongStart,xlongEnd,xlongGap,
     1yearStart,yearEnd,yearGap,heightStart,
     1heightEnd,heightGap,  E1, E2

      integer coordType,MODEL, FLUXTYPE
      
      CHARACTER, dimension(*),intent(in):: OutputFileName
      INTEGER :: lenFNM


      Integer::i
      Character,dimension(100)::crg
      i=0
      DO
      CALL get_command_argument(i,crg)
      IF(LEN_TRIM(crg)==0)EXIT
      WRITE(*,*)i,crg
      IF(i==1) THEN
          OutputFileName=crg
      ELSE IF(i==2) THEN
          Read(crg,*)lenOfOutputFileName
      ELSE IF(i==3) THEN
          Read(crg,*)coordType
      ELSE IF(i==4) THEN
          Read(crg,*)L_FROMFILE_Start
      ELSE IF(i==5) THEN
          Read(crg,*)L_FROMFILE_End
      ELSE IF(i==6) THEN
          Read(crg,*)L_FROMFILE_Gap
      ELSE IF(i==7) THEN
          Read(crg,*)BB0_FROMFILE_Start
      ELSE IF(i==8) THEN
          Read(crg,*)BB0_FROMFILE_End
      ELSE IF(i==9) THEN
          Read(crg,*)BB0_FROMFILE_Gap
      ELSE IF(i==10) THEN
          Read(crg,*)xlatStart
      ELSE IF(i==11) THEN
          Read(crg,*)xlatEnd
      ELSE IF(i==12) THEN
          Read(crg,*)xlatGap
      ELSE IF(i==13) THEN
          Read(crg,*)xlongStart
      ELSE IF(i==14) THEN
          Read(crg,*)xlongEnd
      ELSE IF(i==15) THEN
          Read(crg,*)xlongGap
      ELSE IF(i==16) THEN
          Read(crg,*)yearStart
      ELSE IF(i==17) THEN
          Read(crg,*)yearEnd
      ELSE IF(i==18) THEN
          Read(crg,*)yearGap
      ELSE IF(i==19) THEN
          Read(crg,*)heightStart
      ELSE IF(i==20) THEN
          Read(crg,*)heightEnd
      ELSE IF(i==21) THEN
          Read(crg,*)heightGap
      ELSE IF(i==22) THEN
          Read(crg,*)MODEL
      ELSE IF(i==23) THEN
          Read(crg,*)FLUXTYPE
      ELSE IF(i==24) THEN
          Read(crg,*)E1
      ELSE 
          Read(crg,*)E2
      END IF
      i=i+1
      END DO


      CHARACTER(len=lenOfOutputFileName):: FNM

      do i=1,lenOfOutputFileName
      FNM(i:i)=OutputFileName(i)
      end do 

      call ap8ae8main (OutputFileName,lenOfOutputFileName,coordType,
     1L_FROMFILE_Start,L_FROMFILE_End, L_FROMFILE_Gap,
     1BB0_FROMFILE_Start,BB0_FROMFILE_End,BB0_FROMFILE_Gap,xlatStart,
     1xlatEnd,xlatGap,xlongStart,xlongEnd,xlongGap,yearStart,yearEnd,
     1yearGap,heightStart,heightEnd,heightGap, MODEL, FLUXTYPE, E1, E2)

      END 

 

 

注意:fortran中必须对变量进行声明,而lenOfOutputFileName变量用的其实是隐式声明,即默认i-n是整型

 

error #6850: This attribute specification is not valid in the main scoping unit.   [INTENT]

错误分析:因为intent(in)/intent(out)是表示子程序虚变量属性,而本文是主程序,去掉该属性即可

error #6236: A specification statement cannot appear in the executable section.

错误分析:声明语句不能出现在执行语句部分,将该语句挪到声明部分即可

error #6364: The upper bound shall not be omitted in the last dimension of a reference to an assumed size array.   [OUTPUTFILENAME]

错误分析:outputfilename的上边界不应该删除,意思是必须指出来。即针对CHARACTER, dimension(*):: OutputFileName语句。但是在子程序里面此种声明对于编译器是能通过的,只是主程序里面却不能通过。可以将CHARACTER, dimension(*):: OutputFileName改成CHARACTER, dimension(100):: OutputFileName

error #6364: The upper bound shall not be omitted in the last dimension of a reference to an assumed size array.   [CRG]

错误分析:与上面一样,主程序里面dimension不能是默认,必须指出来

 error #6360: A scalar-valued argument is required in this context.   [GET_COMMAND_ARGUMENT]

 错误分析:该报错是针对 CALL get_command_argument(i,crg)

error#6512: A scalar-valued expression is required in this context.

错误分析:该报错是针对IF(LEN_TRIM(crg)==0)EXIT

造成上面报错的原因是crg声明的错误引起的:

 Character,dimension(100)::crg

改为Character(100)::crg

error #6219: This variable, used in a specification expression, must be a dummy argument, a COMMON block object, or an object accessible through host or use association.   [LENOFOUTPUTFILENAME]

error #6591: An automatic object is invalid in a main program.   [FNM]

错误分析:以上两个错误是针对CHARACTER(len=lenOfOutputFileName):: FNM,报错提示主程序里面FNM的长度设置为自动的是无效的,改成确定的即可leofoutputfilename只能作为虚参数,因为它是不确定的,而虚参数是子程序所用的,所以此处不能用

改成CHARACTER(100):: FNM即可

 

完成的正确代码如下:

 PROGRAM ap8ae8
      real L_FROMFILE_Start,L_FROMFILE_End, L_FROMFILE_Gap,
     1BB0_FROMFILE_Start,BB0_FROMFILE_End,BB0_FROMFILE_Gap,
     1xlatStart,xlatEnd,xlatGap,xlongStart,xlongEnd,xlongGap,
     1yearStart,yearEnd,yearGap,heightStart,
     1heightEnd,heightGap,  E1, E2

      integer coordType,MODEL, FLUXTYPE
      
      CHARACTER, dimension(100):: OutputFileName
      INTEGER :: lenFNM

      CHARACTER(100):: FNM
      Integer::i
      Character(100)::crg
      i=0
      DO
      CALL get_command_argument(i,crg)
      IF(LEN_TRIM(crg)==0)EXIT
      WRITE(*,*)i,crg
      IF(i==1) THEN
          OutputFileName=crg
      ELSE IF(i==2) THEN
          Read(crg,*)lenOfOutputFileName
      ELSE IF(i==3) THEN
          Read(crg,*)coordType
      ELSE IF(i==4) THEN
          Read(crg,*)L_FROMFILE_Start
      ELSE IF(i==5) THEN
          Read(crg,*)L_FROMFILE_End
      ELSE IF(i==6) THEN
          Read(crg,*)L_FROMFILE_Gap
      ELSE IF(i==7) THEN
          Read(crg,*)BB0_FROMFILE_Start
      ELSE IF(i==8) THEN
          Read(crg,*)BB0_FROMFILE_End
      ELSE IF(i==9) THEN
          Read(crg,*)BB0_FROMFILE_Gap
      ELSE IF(i==10) THEN
          Read(crg,*)xlatStart
      ELSE IF(i==11) THEN
          Read(crg,*)xlatEnd
      ELSE IF(i==12) THEN
          Read(crg,*)xlatGap
      ELSE IF(i==13) THEN
          Read(crg,*)xlongStart
      ELSE IF(i==14) THEN
          Read(crg,*)xlongEnd
      ELSE IF(i==15) THEN
          Read(crg,*)xlongGap
      ELSE IF(i==16) THEN
          Read(crg,*)yearStart
      ELSE IF(i==17) THEN
          Read(crg,*)yearEnd
      ELSE IF(i==18) THEN
          Read(crg,*)yearGap
      ELSE IF(i==19) THEN
          Read(crg,*)heightStart
      ELSE IF(i==20) THEN
          Read(crg,*)heightEnd
      ELSE IF(i==21) THEN
          Read(crg,*)heightGap
      ELSE IF(i==22) THEN
          Read(crg,*)MODEL
      ELSE IF(i==23) THEN
          Read(crg,*)FLUXTYPE
      ELSE IF(i==24) THEN
          Read(crg,*)E1
      ELSE 
          Read(crg,*)E2
      END IF
      i=i+1
      END DO


      

      do i=1,lenOfOutputFileName
      FNM(i:i)=OutputFileName(i)
      end do 

      call ap8ae8main (OutputFileName,lenOfOutputFileName,coordType,
     1L_FROMFILE_Start,L_FROMFILE_End, L_FROMFILE_Gap,
     1BB0_FROMFILE_Start,BB0_FROMFILE_End,BB0_FROMFILE_Gap,xlatStart,
     1xlatEnd,xlatGap,xlongStart,xlongEnd,xlongGap,yearStart,yearEnd,
     1yearGap,heightStart,heightEnd,heightGap, MODEL, FLUXTYPE, E1, E2)

      END 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值