[問題] fortran 數字太大 跑出來都是****的星號

看板Programming作者 (7.7)時間7年前 (2017/10/05 00:57), 編輯推噓1(1011)
留言12則, 3人參與, 7年前最新討論串1/1
※ [本文轉錄自 Fortran 看板 #1PrHBDIp ] 作者: Ecampus (7.7) 看板: Fortran 標題: [問題] 數字太大 導致跑出來都是"****"的星號Q_Q 時間: Thu Oct 5 00:56:42 2017 不好意思 我最近在改寫一個FORTRAN的程式碼(是關於把汙染物放進河川裡) 我把汙染物的初始濃度 設定為1000000000 (1E9) 然後數據跑出來 很多都是*********星號(代表數據過大) 我覺得 這應該是我給fortran的空間不夠 但我修改之後 還是沒辦法修正結果 還是會跑出*********星號 我想可能是我修改錯誤 想請大家幫忙看一下 我可能錯在哪裡 相關code如下: PROGRAM DISPERSION IMPLICIT NONE REAL*8 :: CC(300), Xstop(10), Xgauge(10), UU(10), EE(10) REAL*8 :: INI_X, END_X, E, U, DE, DX REAL*8 :: T, TT, DT INTEGER :: N, I, II, IT, ITT, ITW, WT, NO_S CHARACTER(LEN=100) :: filename CHARACTER(LEN=40) :: ext=".dat" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! INPUT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! CHARACTER(LEN=20000) :: casename='test123' ! directory for saveing files INI_X = 0. ! initial of x END_X = 1700. ! end of x DX = 10. N = INT((END_X-INI_X)/DX)+1 ! number of node T = 0. ! the same unit as U and E ITW = 50 ! iteration steps duration to write TT = 3120. ! end time of T DT = 0.1 CC(1) = 1E9 ! concentration of first node at time = 0.0 CC(N) = 0. ! concentration of last node at time = 0.0 DE = 0.0000008333333333333333333333 NO_S = 3 ! number of station !!!!! stations !!!!! Xstop(1) = 0. ! first station Xstop(2) = 850. ! second station Xstop(3) = 1700. ! third station !!!!! velocity, U !!!!! UU(1) = 0.49 ! velocity between 1st and 2nd station UU(2) = 0.49 ! velocity between 2nd and 3rd station !!!!! diffusion coefficient, E !!!!! EE(1) = 6.5 ! coefficient between 1st and 2nd station EE(2) = 6.5 ! coefficient between 2nd and 3rd station !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! END SETTING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! OPEN(101, FILE='time'//ext, STATUS='UNKNOWN') DO I = 1, NO_S II = 1 DO WHILE ((INI_X+float(II-1)*DX-Xstop(I)) .LE. 0.) II = II+1 ENDDO Xgauge(I) = II-1 WRITE(filename,'(I3.3)') I ! filename contains the time you write OPEN(301,file='station'//TRIM(filename)//ext,STATUS='unknown') ENDDO DO I=2, N-1 CC(I)=0. ENDDO IT = 0 ITT = 0 WT = 0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! start !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! WRITE(101,102) T 102 FORMAT(F100.95) WRITE(filename,'(I5.5)') WT ! filename contains the time you write OPEN(201,file=TRIM(filename)//ext,STATUS='unknown') WRITE(201,202) (CC(I),I=1,N) 202 FORMAT(2X,10000F8.4) DO II = 1, NO_S WRITE(filename,'(I3.3)') II ! filename contains the time you write OPEN(301,file='station'//TRIM(filename)//ext,STATUS='old') WRITE(301,302) CC(INT(Xgauge(II))) 302 FORMAT(F8.4) ENDDO OPEN(401,file='x'//ext,STATUS='unknown') DO I = 1, N WRITE(401,*) (INI_X+(I-1)*DX) ENDDO 12 T=T+DT IT=IT+1 ITT = ITT+1 DO WHILE (T .LT. TT+DT) DO I=2,N-1 IF ((I-1)*DX+INI_X .GE. Xstop(1) .AND. (I-1)*DX+INI_X .LT. Xstop(2)) THEN U = UU(1) E = EE(1) ELSEIF ((I-1)*DX+INI_X .GE. Xstop(2) .AND. (I-1)*DX+INI_X .LT. Xstop(3)) THEN U = UU(2) E = EE(2) ENDIF CC(I)=CC(I)+E*DT*(CC(I+1)-2*CC(I)+CC(I-1))/DX/DX-& U*DT*(CC(I+1)-CC(I-1))/2./DX-& DE*DT*CC(I) CC(N+1) = CC(N-1) ENDDO IF(IT.LT.ITW) GOTO 12 WRITE(101,102) T WT = WT+1 WRITE(filename,'(I5.5)') WT ! filename contains the time you write OPEN(201,file=TRIM(filename)//ext,STATUS='unknown') WRITE(201,202) (CC(I),I=1,N) IT = 0 DO II = 1, NO_S WRITE(filename,'(I3.3)') II ! filename contains the time you write OPEN(301,file='station'//TRIM(filename)//ext,STATUS='old',ACCESS='APPEND') WRITE(301,302) CC(INT(Xgauge(II))) ENDDO WRITE(*,15) T 15 FORMAT(1X,'output data at time = ',F10.4) GOTO 12 ENDDO CLOSE(101); CLOSE(201); CLOSE(301); CLOSE(401); call system('mkdir ' // casename) call system('move *.dat ' // casename) STOP END -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.230.80.110 ※ 文章網址: https://www.ptt.cc/bbs/Fortran/M.1507136205.A.4B3.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: Ecampus (125.230.80.110), 10/05/2017 00:57:14

10/05 11:10, 7年前 , 1F
公式參數你要自己調整 把每一次計算的
10/05 11:10, 1F

10/05 11:11, 7年前 , 2F
關鍵值印出來看從哪裡開始爆
10/05 11:11, 2F

10/05 11:11, 7年前 , 3F
Dijkstra說 最簡單的應用就是科學計算
10/05 11:11, 3F

10/05 11:12, 7年前 , 4F
調整到不會爆則是科學計算最簡單的事
10/05 11:12, 4F

10/05 11:17, 7年前 , 5F
感謝 已經修正^^ 感謝3Q 太久沒碰 都
10/05 11:17, 5F

10/05 11:18, 7年前 , 6F
忘記ㄌ
10/05 11:18, 6F

10/05 15:22, 7年前 , 7F
……非常好… (y)
10/05 15:22, 7F

10/07 15:05, 7年前 , 8F
一定要這麼多位數嗎? 實際量測的位數也沒
10/07 15:05, 8F

10/07 15:06, 7年前 , 9F
這麼多吧 可以先用有效位數小一點來測試
10/07 15:06, 9F

10/07 15:07, 7年前 , 10F
例如de那個參數
10/07 15:07, 10F

10/07 20:29, 7年前 , 11F
我後來修正format 就可以跑出來了 謝謝各
10/07 20:29, 11F

10/07 20:29, 7年前 , 12F
位QQ
10/07 20:29, 12F
文章代碼(AID): #1PrHBhSk (Programming)
文章代碼(AID): #1PrHBhSk (Programming)