24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 832  |  回复: 6

gelitao1234

金虫 (正式写手)

[求助] 程序运行的结果很奇怪,不知道原因是什么

程序如下,程序运行结果是TTT的值是NaN,数组TEMP的结果也是这样的,原因是什么?
C
C....<< CACULATION  OF  TEMPERATURE>>
      
       SUBROUTINE TEMPER
       PARAMETER(MX=181,MY=151,MZ=161)
       IMPLICIT DOUBLE PRECISION(A-H,O-Z)
       COMMON /PARA3/ NX,NY,NZ
       COMMON /PARA4/ DT,TIME
       COMMON /TEMP/ TEMP(0:MX+2,0:MY+2,0:MZ+2)
     &,               TEMPH(0:MZ+2)
     &,               SGST(0:MX+2,0:MY+2,0:MZ+2)
      COMMON /FLOWS/ UU(0:MX+2,0:MY+2,0:MZ+2)
     &,              VV(0:MX+2,0:MY+2,0:MZ+2)
     &,              WW(0:MX+2,0:MY+2,0:MZ+2)
      COMMON /DELT1/ DXU(0:MX+1),DYU(0:MY+1),DZU(0:MZ+1)
      COMMON /DELT2/ DXV(0:MX+1),DYV(0:MY+1),DZV(0:MZ+1)
      COMMON /DELT3/ DXW(0:MX+1),DYW(0:MY+1),DZW(0:MZ+1)
      
      COMMON /DELT3/ DXT(0:MX+1),DYT(0:MY+1),DZT(0:MZ+1)
      
      COMMON /DELT3/ DXP(0:MX+1),DYP(0:MY+1),DZP(0:MZ+1)
C....<INITIAL CONDITION >
      DO K=0,NZ+2
      DO J=0,NY+2
      DO I=0,NX+2

      TEMP(I,J,K)=1.2D0
      END DO
      END DO
      END DO

      DO J=0,NY+2
      DO I=0,NX+2

      TEMP(I,J,2)=6.D0
      TEMP(I,J,1)=6.D0

      END DO
      END DO
C....<< TEMPERATURE B.C.>>
      DO K=1,NZ+1
      DO J=1,NY+1
      TEMP(1,J,K)=TEMP(2,J,K)
      TEMP(NX+1,J,K)=TEMP(NX,J,K)
      END DO
      END DO
      DO J=1,NY+1
      DO I=1,NX+1
      TEMP(I,J,1)=TEMP(I,J,2)
      TEMP(I,J,NZ+1)=TEMP(I,J,NZ)
      END DO
      END DO
      DO K=1,NZ+1
      DO I=1,NX+1
      TEMP(I,1,K)=TEMP(I,2,K)
      TEMP(I,NY+1,K)=TEMP(I,NY,K)
      END DO
      END DO
C

C....<TEMPERATURE CACULATION >
      DO K=2,NZ
      DO J=2,NY
      DO I=2,NX
C....<<SPACING LENGTH>>
      H1=DXP(I-1)
      H2=DXP(I)
      H3=DYP(J-1)
      H4=DYP(J)
      H5=DZP(K-1)
      H6=DZP(K)
      DX=DXU(I-1)
      DY=DYV(J-1)
      DZ=DZW(K-1)

C....<<CACULATION>>
      YIX=DT*UU(I,J,K)*(TEMP(I+1,J,K)-TEMP(I-1,J,K))
      YIY=DT*VV(I,J,K)*(TEMP(I,J+1,K)-TEMP(I,J-1,K))
      YIZ=DT*WW(I,J,K)*(TEMP(I,J,K+1)-TEMP(I,J,K-1))
      ERX=TEMP(I+1,J,K)/(DX*H2)-TEMP(I,J,K)*(1.D0/(DX*H1)+1.D0/(DX*H2))
      ERY=TEMP(I,J+1,K)/(DY*H4)-TEMP(I,J,K)*(1.D0/(DY*H3)+1.D0/(DY*H4))
      ERY=TEMP(I,J,K+1)/(DZ*H6)-TEMP(I,J,K)*(1.D0/(DZ*H5)+1.D0/(DZ*H6))
      TEMP(I,J,K)=TEMP(I,J,K)+YIX/(DXT(I)+DXT(I+1))
     & +YIY/(DYT(J)+DYT(J+1))
     & +YIZ/(DZT(K)+DZT(K+1))  
     & -DT*SGST(I,J,K)*(ERX+TEMP(I-1,J,K)/(DX*H1))
     & -DT*SGST(I,J,K)*(ERY+TEMP(I,J-1,K)/(DY*H3))
     & -DT*SGST(I,J,K)*(RYZ+TEMP(I,J,K-1)/(DZ*H5))
      END DO
      END DO
      END DO
C....<<HORIZENTAL AVERAGING >>
       DO K=0,NZ+1
       TEMPH(K)= 0
      END DO

       DO K=1,NZ+1
       TEMPH(K-1)= TEMPH(K)/DFLOAT(NX+1)*(NY+1)
      DO J=1,NY+1
      DO I=1,NX+1
       TEMPH(K)=TEMPH(K)+TEMP(I,J,K)
      END DO
      END DO
      END DO
C....<<AVERAGING & SUBTRACTION>>
      TTT=0.D0
      DPLAY=0.D0
      DO K=1,NZ+1
      DO J=1,NY+1
      DO I=1,NX+1
      TTT=TTT+TEMP(I,J,K)
      END DO
      END DO
      END DO
      
      DO K=1,NZ+1
      DO J=1,NY+1
      DO I=1,NX+1
      TEMP(I,J,K)=TEMP(I,J,K)-TTT/DFLOAT((NX+1)*(NY+1)*(NZ+1))
      END DO
      END DO
      END DO
      DPLAY=TTT/DFLOAT((NX+1)*(NY+1)*(NZ+1))      
      WRITE(*,601)DPLAY
  601 FORMAT(' TTT',F8.1)
      RETURN  
      END
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

感谢参与,应助指数 +1
ERY=TEMP(I,J,K+1)/(DZ*H6)-TEMP(I,J,K)*(1.D0/(DZ*H5)+1.D0/(DZ*H6))
      TEMP(I,J,K)=TEMP(I,J,K)+YIX/(DXT(I)+DXT(I+1))
     & +YIY/(DYT(J)+DYT(J+1))
     & +YIZ/(DZT(K)+DZT(K+1))  
     & -DT*SGST(I,J,K)*(ERX+TEMP(I-1,J,K)/(DX*H1))
     & -DT*SGST(I,J,K)*(ERY+TEMP(I,J-1,K)/(DY*H3))
     & -DT*SGST(I,J,K)*(RYZ+TEMP(I,J,K-1)/(DZ*H5))
这两段里,首先ERY可能是ERZ(重复了)?其次,RYZ是ERZ?
你的RYZ完全没有赋值啊。
2楼2013-06-16 20:18:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gelitao1234

金虫 (正式写手)

引用回帖:
2楼: Originally posted by pippi6 at 2013-06-16 20:18:20
ERY=TEMP(I,J,K+1)/(DZ*H6)-TEMP(I,J,K)*(1.D0/(DZ*H5)+1.D0/(DZ*H6))
      TEMP(I,J,K)=TEMP(I,J,K)+YIX/(DXT(I)+DXT(I+1))
     & +YIY/(DYT(J)+DYT(J+1))
     & +YIZ/(DZT(K)+DZT(K+1))  
     &a ...

万分感谢。我尝试一下看看。
3楼2013-06-16 23:56:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

pippi6

铁杆木虫 (著名写手)

工程和科学数值计算咨询

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
gelitao1234: 金币+20 2013-06-17 10:31:06
引用回帖:
3楼: Originally posted by gelitao1234 at 2013-06-16 23:56:43
万分感谢。我尝试一下看看。...

以后最好在subroutine开始时使用
implicit none
可以帮助你查出许多没有定义、没有赋值、写错变量这样的初级错误
4楼2013-06-17 05:54:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gelitao1234

金虫 (正式写手)

非常感谢你,你的建议对我帮助很大
5楼2013-06-17 10:30:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gelitao1234

金虫 (正式写手)

引用回帖:
4楼: Originally posted by pippi6 at 2013-06-17 05:54:43
以后最好在subroutine开始时使用
implicit none
可以帮助你查出许多没有定义、没有赋值、写错变量这样的初级错误...

非常感谢你,你的建议对我帮助很大
6楼2013-06-17 10:31:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gelitao1234

金虫 (正式写手)

引用回帖:
4楼: Originally posted by pippi6 at 2013-06-17 05:54:43
以后最好在subroutine开始时使用
implicit none
可以帮助你查出许多没有定义、没有赋值、写错变量这样的初级错误...

非常感谢你,你的建议对我帮助很大
7楼2013-06-17 10:31:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 gelitao1234 的主题更新
信息提示
请填处理意见