2015-06-22 3 views
1

У меня возникло множество ошибок, которые говорят, что мои переменные не являются переменными и мои операторы не определены. Эта подпрограмма необходима для компиляции моей более крупной программы, поэтому я просто скопировал ее в конце моей программы. Это не сработало, если я собрал их вместе в разных файлах. Как я могу исправить эти «неопределенные» проблемы? Это из-за того, как я копирую свою подпрограмму в конце моей программы? (я скомпилирован с g77 и gfortran, то же самое происходит)Проблема Fortran с неопределенными утверждениями в подпрограмме

geomalb.f:1088.6: 

     TEMP(J)= TLINAL(J)             
     1 
Error: Unclassifiable statement at (1) 
geomalb.f:1089.6: 

     DEN(J)= DLINAL(J)             
     1 
Error: Unclassifiable statement at (1) 
geomalb.f:1090.6: 

     PRESS(J)=PLINAL(J)             
     1 
Error: Unclassifiable statement at (1) 
geomalb.f:1110.6: 

     XMU(J)=28.0134*XN2(J)+2.158*H2(J)+16.0426*CH4(J)+39.948*AR(J)  
     1 
Error: Unclassifiable statement at (1) 
geomalb.f:1132.6: 

    1001 IF (IPRINT .LT. 0) RETURN           
     1 
Error: Bad continuation line at (1) 
geomalb.f:1152.72: 

     ENDDO                
                    1 
Error: Statement label in ENDDO at (1) doesn't match DO label 
geomalb.f:1130.72: 

     IF (DT .LT. 0.001) GO TO 1001          
                     1 
Error: Label 1001 referenced at (1) is never defined 
geomalb.f:72.27: 

     CALL ATMSETUP(NLEVEL,Z,RHCH4,FH2,FARGON,TEMP,PRESS,DEN,XMU,  
          1 
Warning: Rank mismatch in argument 'z' at (1) (scalar and rank-1) 

Вот подпрограмма часть программы:

 SUBROUTINE ATMSETUP(NLEVEL,Z,RHCH4,FH2,FARGON,TEMP,PRESS,DEN,XMU, 
    & CH4,H2,XN2,AR,IPRINT) 
     PARAMETER (NMAX=201) 
     DIMENSION CH4(1),H2(1),XN2(1),AR(1) 
     DIMENSION TLINAL(NMAX),DLINAL(NMAX),PLINAL(NMAX) 
     CALL LINDAL(NLEVEL,Z,TLINAL,DLINAL,PLINAL) 
     DO J=1,NLEVEL 
     TEMP(J)= TLINAL(J) 
     DEN(J)= DLINAL(J) 
     PRESS(J)=PLINAL(J) 
     ENDDO 
     DO 1000 ITS =1,20 
     CH4(NLEVEL)=PCH4(TEMP(NLEVEL))*RHCH4/PRESS(NLEVEL) 
     DO 134 J=NLEVEL-1,1,-1 
     CH4SAT=PCH4(TEMP(J))/PRESS(J) 
     CH4(J)=AMIN1(CH4SAT,CH4(NLEVEL),CH4(J+1)) 
    134 CONTINUE 
     DO 20 J=1,NLEVEL 
     H2(J)=FH2 
     IF (FARGON .LT. 0.) THEN 
     AR(J)=(-FARGON-28.0134+25.8554*H2(J)+11.9708*CH4(J))/11.9346 
     ELSE 
     IF (FARGON .EQ. 0.) THEN 
     AR(J)=0.0 
     ELSE 
     AR(J)=FARGON 
     ENDIF 
     ENDIF 
     XN2(J)=1.0 - H2(J) - CH4(J) -AR(J) 
     XMU(J)=28.0134*XN2(J)+2.158*H2(J)+16.0426*CH4(J)+39.948*AR(J) 
    20 CONTINUE 
     SUMT=PLINAL(1)*6.02E23/10. 
     SUMB=SUMT 
     TLAST=TEMP(NLEVEL) 
     DO J=2,NLEVEL 
     DENF=294.1/(XN2(J)*294.1 + CH4(J)*410. + H2(J)*136. + AR(J)*277.8) 
     DEN(J) = DLINAL(J)*DENF 
     ADEN=(DEN(J)-DEN(J-1))/ALOG(DEN(J)/DEN(J-1)) 
     SUMT=SUMT+(EFFG(Z(J))*ADEN)*(Z(J-1)-Z(J))*XMU(J) 
     ADEN=(DLINAL(J)-DLINAL(J-1))/ALOG(DLINAL(J)/DLINAL(J-1)) 
     SUMB=SUMB+(EFFG(Z(J))*ADEN)*(Z(J-1)-Z(J))*28.01340 
     PRESS(J)=PLINAL(J)*SUMT/SUMB 
     TEMP(J) =TLINAL(J)*(SUMT/SUMB)*(1./DENF) 
     ENDDO 
    30 CONTINUE 
     DT= ABS(TEMP(NLEVEL)-TLAST) 
     IF (DT .LT. 0.001) GO TO 1001 
    1000 CONTINUE 
    1001 IF (IPRINT .LT. 0) RETURN 
     WRITE (6,139)RHCH4,FH2,FARGON,DT 
     DO 135 J=1,NLEVEL-1 
     WRITE(6,140)J,Z(J),PRESS(J),DEN(J),TEMP(J), 
    &   CH4(J)*PRESS(J)/PCH4(TEMP(J)) 
    &   ,CH4(J)*100.,XN2(J)*100.,H2(J)*100.,AR(J)*100.,XMU(J) 
    &   ,(TEMP(J+1)-TEMP(J))/(Z(J+1)-Z(J)) 
    135 CONTINUE 
     J=NLEVEL 
     WRITE(6,140)J,Z(J),PRESS(J),DEN(J),TEMP(J), 
    & CH4(J)*PRESS(J)/PCH4(TEMP(J)) 
    & ,CH4(J)*100.,XN2(J)*100.,H2(J)*100.,AR(J)*100.,XMU(J) 
    139 FORMAT(///' BACKGROUNG ATMOSPHERE AT LEVELS'/ 
    & ' SURFACE HUMIDITY OF CH4:',F5.3,' H2 MIXING RATIO:',F6.4, 
    & ' ARGON SETTING:',F8.4/' FINAL CONVERGENCE ON TEMP:',F10.5 
    & ' LINDAL ET AL SCALING'/ 
    &' LVL ALTITUDE P(BARS) DEN(CM-3) TEMP RH-CH4' 
    & , ' %CH4 %N2 %H2 %AR MU DT/DZ' ) 
    140 FORMAT(1X,I3,F8.3,1P2E10.3,0PF7.2,F5.2,2F6.2,2F5.2,4F6.2) 
     RETURN 
     ENDDO 
     END 

ответ

3

Вам потребуется заявление

 DIMENSION DEN(1), PRESS(1), TEMP(1) 

в подпрограмма. В противном случае подпрограмма не «знает», что эти переменные должны рассматриваться как массивы.

+0

Отлично, работал. Спасибо ! Любая идея для ошибки «Ошибка рассогласования» и ошибки 1001? – JadeChee

+0

@JadeChee: В каком столбце помечен знак '1001'? В зависимости от ключей командной строки, возможно, это должно начинаться в столбце 1. – wallyk

+0

@wallyk. Сейчас он начинается в столбце 2. Я попытался запустить его в столбце 1, но при этом возникают те же ошибки. – JadeChee

 Смежные вопросы

  • Нет связанных вопросов^_^