2013-04-24 1 views
2

저는 Fortran을 처음 접했지만 일반적으로 모듈이나 타입에 대해 머리 숙여지면 C 나 Matlab에서 할 수있는 대부분의 일을 할 수 있습니다. 그러나 gfortran (gcc 버전 4.6.2) 또는 ifort (13.0.2) 중 어떤 것을 사용 하느냐에 따라 결과의 차이에 의해 난처한 편입니다. Gfortran은 내가 예상 한 결과를 제공하지만, ifort는 3 개의 빈 줄을 제공합니다! 어떤 아이디어?ifort와 gfortran이 서로 다른 타입을 정의 할 때

module define_structures 
implicit none 
private 

public modelling_params 

    type modelling_params 
     real, dimension(:), allocatable :: freqs 
     real, dimension(:), allocatable :: offsets  
     complex, dimension(:), allocatable :: data 
    end type modelling_params 
end module define_structures 

program main 

use define_structures 
    implicit none 

    type (modelling_params) :: S 

    S%data = [(1,1) ,(2,3), (3,1)] 
    S%freqs = [1, 3, 7] 
    S%offsets = [100, 200, 300] 
    print *,S%data 
    print *,S%freqs 
    print *,S%offsets 


end program main 

여기

( 1.0000000 , 1.0000000 ) ( 2.0000000 , 3.0000000 ) ( 3.0000000 , 1.0000000 ) 
1.0000000  3.0000000  7.0000000  
100.00000  200.00000  300.00000 

그리고 ifort와 gfortran

컴파일의 출력을, 난 그냥 3 개 빈 줄을 얻을 그것을 잘 컴파일하지만!

미리 감사드립니다.

답변

2

ifort에 할당시 할당 가능한 변수를 다시 할당하는 기능은 -assume realloc_lhs 명령 줄 옵션이 컴파일러에 전달 될 때 사용할 수 있습니다. 당신이 처음 할당 한 후 바로 다음에 삽입하는 경우 :

print *, allocated(S%data) 

당신은 할당 할 때 할당 가능한 필드가 할당되지 않은 즉, F을 볼 것입니다. 코드는 -assume realloc_lhs으로 예상대로 작동합니다.

+0

정확히 말하면, Hristo. '-assume realloc_lhs'를 컴파일러 옵션으로 추가하면 예상대로 작동합니다. 컴파일러에서 경고 메시지를받지 못한 이유에 대해 궁금합니다. –

+0

런타임 검사를 활성화 한 상태에서 실행하려고하면 할당되지 않은 배열에 할당 할 때 오류가 발생합니다. –

관련 문제