2013-11-24 2 views
0

저는 DoL 내의 문제에 직면 한 Fortran의 신참입니다. Matlab에서 사용할 MEX 파일에 대한 포트란 코드를 프로그래밍 중입니다. k와 z의 정의에 문제가 있다고 가정하지만 그 이유는 알 수 없습니다. 어쩌면 너희들은 내가 잘못하고있는 것을 나에게 암시 할 수있다. 고마워요!루프 매개 변수를 숫자가 아닌 문자로 간주하십시오.

오류 메시지 및 코드 innerloops.F 할 K = 1, 4
오류 : (1) innerloops.F 에서 문 라벨에 숫자가 아닌 문자 할 K = 1, 4
오류 : (1) innerloops.F 에서 분류 할 문 Z = 1, 25
오류를 수행 숫자가 아닌 문자를 문 라벨 (1) innerloops.F 에서 할 Z = 1, 25 012,380,073,162,755,231, 오류하십시오 .F 접미사 기본적으로 컴파일러를 사용하여 (1)

C  Computational routine 
subroutine innerloops(J,c1,c2,c3,c4,n1,n2,n3,n4,y,m,n) 
mwSize m, n 
integer k, z 
real*8 J(m,n), y(4,1), c1, c2, c3, c4, n1, n2, n3, n4 
real*8 QuadRuleX(25,2) 
real*8 QuadRuleW(25,1) 
real*8 X(5,1), r, t 
real*8 P, c_h, n_h 
integer h = 10 

C  Gaussian Points 
X(1) = -.906179 
X(2) = -.538469 
X(3) = 0 
X(4) = .538469 
X(5) = .906179 

C  Corresponding QuadRule points 
QuadRuleX(1,1) = X(1) 
QuadRuleX(1,2) = X(1) 
C .... (snipped it here for readability) 

C Corresponding weights 
QuadRuleW(1) = Y(1)*Y(1) 
QuadRuleW(2) = Y(2)*Y(1) 
C .... (snipped it here for readability) 

do k = 1, 4   
do z = 1, 25 
r = QuadRuleX(z,1) 
t = QuadRuleX(z,2) 
P = shape(k,r,t) 
c_h = c1*shape(k,r,t) 
n_h = n1*shape(k,r,t) 
y(k,1) = (P*((((h-1)*c_h)/(h-1)*c_h+1))*n_h*(2-n_h)-n_h) 
continue 
continue 
return 
end do 
end subroutine innerloops 

C defining the shape functions 
Function shape(q,c,d) 
implicit none 
real q,c,d,P 
if (q == 1) then 
P = 1/4*(c-1)*(d-1) 
else if (q == 2) then 
P = -1/4*(c+1)*(d-1) 
else if (q == 3) then 
P = 1/4*(c+1)*(d+1) 
else if (q == 4) then 
P = -1/4*(c-1)*(d+1) 
endif 
return 
end Function shape 
+1

do k = 1, 4'에 대한 "end do"가 누락 된 것처럼 보입니다. –

+2

예. 아마도'continue' 문 대신에'end do'를 원할 것입니다. 그리고'return' 문 다음에'end do'를 제거하십시오 - 접근 할 수 없습니다. 들여 쓰기는 코드를 읽기 쉽게 만듭니다. –

+0

오류의 원인이 아니지만 정수 나누기 1/4을 알아두면 0이됩니다. 최고 1./4. .. – agentp

답변

3

에서 분류 할 문을 사용하면 고정 된 형식의 소스 코드를 사용하고 있다고 가정합니다. 고정 형식에서는 특정 열이 특수 용도로 예약되어 있습니다. 여기서 "do"가 실수로 문 레이블 (열 1 - 5) 용으로 예약 된 열에 들어간 것으로 보입니다. 귀하의 진술은 고정 형식 포트란 파일의 컬럼 7과 컬럼 72 사이에 맞아야합니다. 이것은 컴파일러가 불평하는 것입니다. 다른 사람들이 언급했듯이 코드에는 수정할 필요가있는 다른 오류가 포함되어 있습니다.

더 간단하게하려면 접미사를 .f90으로 변경하고 "C"주석 표시기를 "!"로 바꿔 자유 형식을 사용할 수 있습니다.

관련 문제