[問題] IMSL問題
以下是我的程式
USE MSIMSL
!!! SIMPLE EUTECTIC SYSTEM
!!! SLE-SIMPLE.F90
IMPLICIT NONE
INTEGER, PARAMETER :: NPARA=2, MSTEP=10000
REAL (KIND=8),PARAMETER :: TOL=1.E-12
INTEGER :: I, NO_DATA, FIRST
REAL (KIND=8) :: SUMD, F_RE, SPA
REAL (KIND=8) :: X2E(20), TEXP(20), TCAL(20), AADT(20), &
& XXGUESS(NPARA), XX(NPARA), SCA(NPARA)
COMMON /GROUP2/ NO_DATA, X2E, TEXP
COMMON /GROUP3/ TCAL, AADT, SUMD
COMMON /GROUP5/ SCA
COMMON /GROUP6/ FIRST
EXTERNAL MAIN
OPEN (1,FILE="C:\Wilson\LA+DOC.txt")
OPEN (2,FILE="C:\Wilson\LA+DOC-R.TXT ",ACCESS="APPEND")
WRITE (*,*) "INPUT THE NO. OF DATA POINT BEFORE THE EUTECTIC POINT"
READ (*,*) FIRST
CALL INPUT()
SPA=0.01
WRITE (*,*) "ENTER THE INITIAL GUESS OF D12, D21" !ENTER THE PARAMETER OF THE LIQUID MODEL
READ (*,*) XXGUESS(1), XXGUESS(2)
CALL DUMPOL(MAIN,NPARA,XXGUESS,SPA,TOL,MSTEP,XX,F_RE)
!CALL MAIN(NPARA,XXGUESS,XX,F_RE)
WRITE (2,10) XX(1)*SCA(1)
WRITE (2,15) XX(2)*SCA(2)
WRITE (*,10) XX(1)*SCA(1)
WRITE (*,15) XX(2)*SCA(2)
!WRITE (2,10) XXGUESS(1)*SCA(1)
!WRITE (2,15) XXGUESS(2)*SCA(2)
DO I=1, NO_DATA
AADT(I)=AADT(I)*100.
WRITE (2,20) X2E(I), TEXP(I), TCAL(I), AADT(I)
ENDDO
SUMD=SUMD*100.
WRITE (2,25) NO_DATA, SUMD
WRITE (*,25) NO_DATA, SUMD
10 FORMAT (1X,"INTERACTION PARAMETER, D12:",1X,F12.8)
15 FORMAT (1X,"INTERACTION PARAMETER, D21:",1X,F12.8)
20 FORMAT (1X,F6.4,3(1X,F7.3))
25 FORMAT (1X,"TOTAL NO. OF DATA POINT IS",1X,I3,", AAD IS",1X,F12.8)
STOP
END
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE INPUT()
IMPLICIT NONE
INTEGER, PARAMETER :: N_C=2
CHARACTER (LEN=20) :: NAME(N_C)
INTEGER :: I, NO_COMP, NO_DATA
REAL (KIND=8) :: HFUS(N_C), TM(N_C), X2E(20), TEXP(20)
COMMON /GROUP1/ HFUS, TM
COMMON /GROUP2/ NO_DATA, X2E, TEXP
READ (1,*) NO_COMP !NO. OF THE COMPONENT IN THE SYSTEM
DO I=1, NO_COMP
READ (1,*) NAME(I) !NAME OF THE COMPONENT I
READ (1,*) HFUS(I) !VALUE OF THE FUSION HEAT OF COMPONENT I (J/MOL)
READ (1,*) TM(I) !VALUE OF THE MELTING POINT OF COMPONENT I (K)
ENDDO
READ (1,*) NO_DATA !NO OF THE EXPT. DATA POINT IN THE SYSTEM
DO I=1, NO_DATA
READ (1,*) X2E(I), TEXP(I)
!THE EXPT. DATA OF THE COMPOSITION OF COMPONENT 2 IN LIQUID PHASE (x2, MOLE FRACTION) &
!THE LIQUIFIED TEMP. (TL, K)
ENDDO
RETURN
END
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE MAIN(NPARA, XX, F_RE)
IMPLICIT NONE
INTEGER, PARAMETER :: N_C=2, N_PA=2
REAL (KIND=8) :: RG=8.314 !UNIT OF RG: J/MOL-K
INTEGER :: I, NO_DATA, NPARA, FIRST
REAL (KIND=8) :: XX(NPARA), DK(N_PA), S(N_C), R(N_C)
REAL (KIND=8) :: HFUS(N_C), TM(N_C), X2E(20), TEXP(20), TCAL(20), AADT(20), SUMD, F_RE
REAL (KIND=8) :: SCA(N_PA)=(/ 1.E+0, 1.E+0 /)
COMMON /GROUP1/ HFUS, TM
COMMON /GROUP2/ NO_DATA, X2E, TEXP
COMMON /GROUP3/ TCAL, AADT, SUMD
COMMON /GROUP4/ DK
COMMON /GROUP5/ SCA
COMMON /GROUP6/ FIRST
DO I=1, NPARA
DK(I)=XX(I)*SCA(I)
ENDDO
SUMD=0.
DO I=1, NO_DATA
S(2)=X2E(I) !COMPOSITION OF COMPONENT 2 (x2, MOLE FRACTION)
S(1)=1.-X2E(I) !COMPOSITION OF COMPONENT 1 (x1, MOLE FRACTION)
CALL ACTIVITYCOEFF(S,R,TEXP(I))
IF (I <= FIRST) THEN
TCAL(I)=1./(1./TM(1)-RG*DLOG(R(1)*S(1))/HFUS(1)) !COMPONENT 1 AS THE SOLID
ELSE
TCAL(I)=1./(1./TM(2)-RG*DLOG(R(2)*S(2))/HFUS(2)) !COMPONENT 2 AS THE SOLID
ENDIF
AADT(I)=DABS(TCAL(I)-TEXP(I))/TEXP(I)
SUMD=SUMD+AADT(I)
ENDDO
SUMD=SUMD/NO_DATA
F_RE=SUMD
write(2,*) F_RE
RETURN
END
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE ACTIVITYCOEFF(S,R,T)
IMPLICIT NONE
INTEGER, PARAMETER :: N_C=2, N_PA=2
REAL (KIND=8) :: DK(N_PA), S(N_C), R(N_C) ,D12, D21, V1, V2, T
COMMON /GROUP4/ DK
!!!!!!!!!!
! WILSON MODEL
! DK(1)=L12-L11, DK(2)=L21-L22
V1= 210.04
V2= 392.66
D12= V2/V1*DEXP(-(DK(1)/8.314/T))
D21= V1/V2*DEXP(-(DK(2)/8.314/T))
R(1)=-DLOG(S(1)+D12*S(2))+S(2)*(D12/(S(1)+D12*S(2))-D21/(D21*S(1)+S(2))) !lnr1
R(2)=-DLOG(S(2)+D21*S(1))-S(1)*(D12/(S(1)+D12*S(2))-D21/(D21*S(1)+S(2))) !lnr2
R(1)=DEXP(R(1)) !r1
R(2)=DEXP(R(2)) !r2
RETURN
END
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
在build時,出現LINK : fatal error LNK1104: cannot open file "imsls_err.lib"
Error executing link.exe.
請問該如何解決??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.240.237.183
推
07/09 14:34, , 1F
07/09 14:34, 1F
推
07/09 15:48, , 2F
07/09 15:48, 2F
Programming 近期熱門文章
PTT數位生活區 即時熱門文章