안녕하세요~~ 오랜만에 들어오서 염치가 없네여...
다름이 아니라 제가 initial value를 이용한 화학반응의 농도를 산출하는
계산식을 Gear's Mthod를 이용하여 해를 구하고 있습니다.
IMSL 소스를 이용해서 다시 코딩을 하였습니다. 그런데 컴파일을 하면 링크에러가
발생하는데 해결이 잘 안되네요~~
소스파일이 좀 많지만 지켜야될 범주여서 소스파일과 에러내용을 올리겠습니다.
번창하는 카페가 될 수 있도록 많이 찾아오겠습니다.
<<이하 소스파일...>>
USE NUMERICAL_LIBRARIES
INTEGER MXPARM, N
PARAMETER (MXPARM = 50, N = 15)
INTEGER MABSE, MBDF, MSOLVE
PARAMETER (MABSE = 1, MBDF = 2, MSOLVE = 1)
INTEGER IDO, NOUT
REAL A(1,1), PARAM(MXPARM), T, TEND, TOL, C(N), C0(N)
EXTERNAL FCN, FCNJ
CALL UMACH (2, NOUT)
OPEN (UNIT=NOUT, FILE='IAQCMS.TEXT', STATUS='UNKNOWN', &
ACTION='WRITE')
! SPECIES LISTS
! C(1)=NO2, C(2)=NO, C(3)=O, C(4)=O2, C(5)=O3, C(6)=OH,
! C(7)=HNO3, C(8)=HO2, C(9)=HCHO, C(10)=CO, C(11)=PNA(HNO4)
! C(12)=HC, C(13)=NO3, C(14)=N2O5, C(15)=H2O
! INITIAL CONDITION
T = 0.0
Q = 0.1
V = 300.0
! OUTDOOR INITIAL CONCENTRATION(PPM)
C0(1) = 0.04
C0(2) = 0.1
C0(3) = 10.0E6
C0(4) = 0.0
C0(5) = 0.001
C0(6) = 0.0
C0(7) = 0.0
C0(8) = 0.0
C0(9) = 1.0
C0(10) = 0.0
C0(11) = 0.0
C0(12) = 0.3
C0(13) = 0.0
C0(14) = 0.0
C0(15) = 10.0E4
! INDOOR INITIAL CONCENTRATION(PPM)
C(1) = 0.01
C(2) = 0.02
C(3) = 0.03
C(4) = 0.04
C(5) = 0.05
C(6) = 0.06
C(7) = 0.07
C(8) = 0.08
C(9) = 0.09
C(10) = 0.01
C(11) = 0.02
C(12) = 0.03
C(13) = 0.04
C(14) = 0.05
C(15) = 0.06
! ERROR TOLERANCE
TOL = 1.0
CALL SSET (MXPARM, 0.0, PARAM, 1)
! ABSOLUTE ERROR CONTROL
PARAM(10) = MABSE
! SELECT BDF METHOD
PARAM(12) = MBDF
! SELECT CHORD METHOD AND USER-PROVIDED JACOVIAN MATRIX
PARAM(13) = MSOLVE
IDO = 1
TIME = 0
10 CONTINUE
TIME = TIME + 60
TEND = TIME
CALL IVPAG (IDO, N, FCN, FCNJ, A, T, TEND, TOL, PARAM, C)
IF (TIME .LE. 1440) THEN
WRITE (NOUT, 99998) T, C
IF (TIME .EQ. 1440) IDO = 3
GO TO 10
END IF
99998 FORMAT (2X,'TIME',2x,':',F12.2,/3(6F13.5,/))
END
SUBROUTINE FCN (N, T, C, CPRIME)
INTEGER N
REAL T, C(N), CPRIME(N), C0(N)
REAL K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, &
K11, K12, K13, K14, K15
SAVE K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, &
K11, K12, K13, K14, K15
DATA K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, &
K11, K12, K13, K14, K15, Q, V/2.0E-5,28.0,0.011,300.0,&
21000.0,470.0,6.0,5500.0,22000.0,0.0123,0.048,&
6800.0,1.5E-13,15.0,11000.0,0.1,300.0/
C0(1) = 0.04
C0(2) = 0.1
C0(3) = 10.0E6
C0(4) = 0.0
C0(5) = 0.001
C0(6) = 0.0
C0(7) = 0.0
C0(8) = 0.0
C0(9) = 1.0
C0(10) = 0.0
C0(11) = 0.0
C0(12) = 0.3
C0(13) = 0.0
C0(14) = 0.0
C0(15) = 10.0E4
CPRIME(1) = K(2)*C(6)*C(2)-K(3)*C(6)*C(1)+K(4)*C(8)*C(2) &
+K(6)*C(8)*C(1)-K(7)*C(8)*C(1)-K(11)*C(5)*C(1) &
-K(12)*C(13)*C(1)+K(14)*C(14)+2*K(15)*C(13)*C(1) &
+Q/V*C0(1)-Q/V*C(1)
CPRIME(2) = -K(2)*C(5)*C(2)-K(4)*C(8)*C(2)-K(6)*C(8)*C(2) &
+K(12)*C(13)*C(1)-K(15)*C(13)*C(2)+Q/V*C0(2)-Q/V*C(2)
CPRIME(3) = 0.0
CPRIME(4) = 0.0
CPRIME(5) = K(1)*C(4)*C(3)-K(2)*C(5)*C(2)-K(11)*C(5)*C(1) &
+Q/V*C0(5)-Q/V*C(5)
CPRIME(6) = 0.0
CPRIME(7) = K(3)*C(6)*C(1)+2*K(13)*C(14)*C(15)+Q/V*C0(7) &
-Q/V*C(7)
CPRIME(8) = 0.0
CPRIME(9) = -K(5)*C(9)*C(6)+K(8)*C(12)*C(4)+1.560*K(9)*C(12)*C(6) &
+K(10)*C(12)*C(5)+Q/V*C0(9)+Q/V*C(9)
CPRIME(10) = K(5)*C(9)*C(6)+K(8)*C(12)*C(4)+0.420*K(10)*C(12)*C(5) &
+Q/V*C0(10)-Q/V*C(10)
CPRIME(11) = K(7)*C(8)*C(1)+Q/V*C0(11)-Q/V*C(11)
CPRIME(12) = -K(8)*C(12)*C(4)-K(9)*C(12)*C(6)-K(10)*C(12)*C(5) &
+Q/V*C0(12)-Q/V*C(12)
CPRIME(13) = 0.0
CPRIME(14) = 0.0
CPRIME(15) = -K(13)*C(14)*C(15)+Q/V*C0(15)-Q/V*C(15)
WRITE (NOUT, 99997) (C(J), J=1,15), (CPRIME(J), J=1,15), Q, V, &
(C0(J), J=1,15)
99997 FORMAT (47E9.4)
RETURN
END
SUBROUTINE FCNJ (N, T, C, DCPDC)
INTEGER N
REAL T, C(N), DCPDC(N,*), C0(N)
REAL K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, &
K11, K12, K13, K14, K15
SAVE K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, &
K11, K12, K13, K14, K15
EXTERNAL SSET
DATA K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, &
K11, K12, K13, K14, K15, Q, V/2.0E-5,28.0,0.011,300.0,&
21000.0,470.0,6.0,5500.0,22000.0,0.0123,0.048,&
6800.0,1.5E-13,15.0,11000.0,0.1,300.0/
CALL SSET (N**2, 0.0, DCPDC, 1)
C0(1) = 0.04
C0(2) = 0.1
C0(3) = 10.0E6
C0(4) = 0.0
C0(5) = 0.001
C0(6) = 0.0
C0(7) = 0.0
C0(8) = 0.0
C0(9) = 1.0
C0(10) = 0.0
C0(11) = 0.0
C0(12) = 0.3
C0(13) = 0.0
C0(14) = 0.0
C0(15) = 10.0E4
! JACOBICA MATRIX
DCPDC(1,1) = -K(3)*C(6)+K(6)*C(8)-K(7)*C(8)-K(11)*C(5)-K(12)*C(13) &
+2*K(15)*C(13)-Q/V
DCPDC(1,2) = K(2)*C(6)+K(4)*C(8)
DCPDC(1,5) = -K(11)*C(1)
DCPDC(1,6) = K(2)*C(2)-K(3)*C(1)
DCPDC(1,8) = K(4)*C(2)+K(6)*C(1)-K(7)*C(1)
DCPDC(1,13) = -K(12)*C(1)+2*K(15)*C(1)
DCPDC(1,14) = K(14)
DCPDC(2,1) = K(12)*C(13)
DCPDC(2,2) = -K(2)*C(5)-K(4)*C(8)-K(6)*C(8)-K(15)*C(13)-Q/V
DCPDC(2,5) = -K(2)*C(2)
DCPDC(2,8) = -K(4)*C(2)-K(6)*C(2)
DCPDC(2,13) = K(12)*C(1)-K(15)*C(2)
DCPDC(5,1) = -K(11)*C(5)
DCPDC(5,2) = -K(2)*C(5)
DCPDC(5,3) = K(1)*C(4)
DCPDC(5,4) = K(1)*C(3)
DCPDC(5,5) = -K(2)*C(2)-K(11)*C(1)-Q/V
DCPDC(7,1) = K(3)*C(6)
DCPDC(7,6) = K(3)*C(1)
DCPDC(7,7) = -Q/V
DCPDC(7,14) = 2*K(13)*C(15)
DCPDC(7,15) = 2*K(13)*C(14)
DCPDC(9,4) = K(8)*C(12)
DCPDC(9,5) = K(10)*C(12)
DCPDC(9,6) = -K(10)*C(9)+1.560*K(9)*C(12)
DCPDC(9,9) = -K(5)*C(6)-Q/V
DCPDC(9,12) = K(8)*C(4)+1.560*K(9)*C(6)+K(10)*C(5)
DCPDC(10,4) = K(8)*C(12)
DCPDC(10,5) = 0.420*K(10)*C(12)
DCPDC(10,6) = K(5)*C(9)
DCPDC(10,9) = K(5)*C(6)
DCPDC(10,10) = -Q/V
DCPDC(10,12) = K(8)*C(4)+0.420*K(10)*C(5)
DCPDC(11,1) = K(7)*C(8)
DCPDC(11,8) = K(7)*C(1)
DCPDC(11,11) = -Q/V
DCPDC(12,4) = -K(8)*C(12)
DCPDC(12,5) = -K(10)*C(12)
DCPDC(12,6) = -K(9)*C(12)
DCPDC(12,12) = -K(8)*C(4)-K(9)*C(6)-K(10)*C(5)-Q/V
DCPDC(15,14) = -K(13)*C(15)
DCPDC(15,15) = -K(13)*C(14)-Q/V
RETURN
END
--------------소스파일---------------------------------
<<error massege>>
--------------------Configuration: REACTION - Win32 Debug--------------------
Compiling Fortran...
D:\FORTRAN(FINAL)\REACTION\REACTION.f90
Linking...
REACTION.obj : error LNK2001: unresolved external symbol _K@4
Debug/REACTION.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
REACTION.exe - 2 error(s), 0 warning(s)
어떻게 해결해야 하는지 방법을 알고싶습니다...
카페 게시글
검색이 허용된 게시물입니다.
답글
수정
삭제
스팸처리
포트란 Q&A
error LNK2001:unresolved external symbol_K@4...
박일건
추천 0
조회 214
07.03.05 18:30
댓글 5
북마크
번역하기
공유하기
기능 더보기
다음검색
첫댓글 저두 잘 못하지만.. 초보자입장인 제 생각엔 _K@4라는 함수선언이 없거나 변수의 수나 형이 틀리거나 또는 함수명이 함수선언부와 다르거나.. 그런 경우 종종 제 경우엔 발생하는 에러이더군요... 초보자 주제에 죄송..
자주 보는 문제 유형중 하나죠.
error LNK2001 으로 검색하시면 충분한 답을 얻을수 있습니다. 질문전 꼭!1 검색해보세요. 저도 검색한후 이글 올립니다.
큰 실수는 아니니까 힌트를 하나 드리죠. ^^ K1 이 맞을까요? K(1)이 맞을까요? K2가 맞을까요? K(2)가 맞을까요?
감사합니다.. 'K' value에서 꿈꾸는 가인님의 힌트가 맞았네요~~ㅋㅋ 정신없이 짜다보니 이런걸 못 찾았네요~~ K(1)를 K1 로 수정하니깐 런이 되네요^^ 감사합니다~~