[問題] 關於fortran中imsl的一些問題

看板Programming作者 (古大大)時間17年前 (2007/09/19 14:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
大家好,小弟有一些imsl使用上的問題 在程式裡,小弟的目的是想先用程式裡寫好的方程式算出所要的初值 再把算好的初值放到xguess裡去給程式收歛 但是debug完後,程式說 Error: This symbol must be a defined parameter or an argument of an inquiry fun ction that evaluates to a compile-time constant. Error: This is not a valid initialization expression. 結果只能事先先算好,再把算好的值(數字)放到xguess裡讓程式收歛 這樣程式才會跑出結果 也就是說程式只收歛常數(數字)而已 後來又試過以下方法 1.試過先用副程式算好,再call到主程式裡 2.用READ去讀檔裡的數字 但結果也是出現debug那兩行 不知道有沒有什麼方式可以在同一程式裡算好 再自動代入xguess裡去算 要不然要一組一組輸入很沒效率(因為小弟有上千組數據等著收) 下面是我的程式碼,先謝過大家了 PROGRAM MAIN USE IMSL IMPLICIT NONE INTEGER, PARAMETER :: ITMAX=100 INTEGER, PARAMETER :: NROOT=1 REAL, PARAMETER :: EPS=1.E-6 REAL, PARAMETER :: ERRABS=1.E-6 REAL, PARAMETER :: ERRREL=1.E-6 REAL, PARAMETER :: ETA=1.E-6 INTEGER INFO(NROOT) REAL, EXTERNAL :: FS,FR REAL :: XS(NROOT) REAL :: XR(NROOT) real :: VR=1./10. REAL :: XGUESS1(NROOT)=(/vr/) REAL :: XGUESS2(NROOT)=(/0.09/) REAL Z,ZSIM,ZREF CALL ZREAL (FS,ERRABS,ERRREL,EPS,ETA,NROOT,ITMAX,XGUESS1,XS,INFO) CALL ZREAL (FR,ERRABS,ERRREL,EPS,ETA,NROOT,ITMAX,XGUESS2,XR,INFO) WRITE(*,"('VR(0)=',F20.18)") XS WRITE(*,"('VR(r)=',F20.18)") XR STOP END REAL FUNCTION FS(XS) IMPLICIT NONE REAL:: XS REAL ,PARAMETER :: BE1=0.65392 REAL ,PARAMETER :: GA1=0.060167 REAL GB,GC,GD,TR,PR,TEMP,T,P INTEGER, PARAMETER :: H=4 REAL :: W1(H),Y1(H),Z1(H),Z REAL, PARAMETER :: TC= 190.56 REAL, PARAMETER :: PC= 45.99 T=100. P=20. W1(1)=0.1181193 W1(2)=0.265728 W1(3)=0.15479 W1(4)=0.030323 Y1(1)=0.0236744 Y1(2)=0.0186984 Y1(3)=0.0 Y1(4)=0.042724 Z1(1)=0.0000155488 Z1(2)=0.0000623689 TR=T/TC PR=P/PC GB=W1(1)-W1(2)/TR-W1(3)/TR**2-W1(4)/TR**3 GC=Y1(1)-Y1(2)/TR+Y1(3)/TR**3 GD=Z1(1)+Z1(2)/TR FS=TR/PR*(1/XS+GB/XS**2+GC/XS**3+GD/XS**6+Y1(4)/TR**3/XS**3*(BE1+GA1/XS**2)*E XP(-GA1/XS**2))-1 RETURN END FUNCTION REAL FUNCTION FR(XR) IMPLICIT NONE REAL:: XR REAL ,PARAMETER :: BE2=1.226 REAL ,PARAMETER :: GA2=0.03754 REAL GB,GC,GD,TR,PR,TEMP,T,P INTEGER, PARAMETER :: H=4 REAL :: W2(H),Y2(H),Z2(H),Z REAL, PARAMETER :: TC= 190.56 REAL, PARAMETER :: PC= 45.99 T=100. P=20. W2(1)=0.2026579 W2(2)=0.331511 W2(3)=0.027655 W2(4)=0.203488 Y2(1)=0.0313385 Y2(2)=0.0503618 Y2(3)=0.016901 Y2(4)=0.041577 Z2(1)=0.000048736 Z2(2)=0.00000740336 TR=T/TC PR=P/PC GB=W2(1)-W2(2)/TR-W2(3)/TR**2-W2(4)/TR**3 GC=Y2(1)-Y2(2)/TR+Y2(3)/TR**3 GD=Z2(1)+Z2(2)/TR FR=TR/PR*(1/XR+GB/XR**2+GC/XR**3+GD/XR**6+Y2(4)/TR**3/XR**3*(BE2+GA2/XR**2)*E XP(-GA2/XR**2))-1 RETURN END FUNCTION -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.50.204 ※ 編輯: m710387 來自: 140.124.50.204 (09/19 14:32)
文章代碼(AID): #16yC7mhZ (Programming)