다소 이해하기 어려운 Fortran 코드가 있습니다.
1. 코드 / (i1,i1=0,nn-1) /
의 구조 이름은 무엇입니까?
콘텐츠를보기 위해 코드에서 직접 인쇄하려면 어떻게해야합니까?
2. 다시 컴파일하지 않고 nn
의 값을 변경하는 방법을 찾고 있는데 어떻게해야합니까? nn
은 배열 길이가 omega
인 것으로 가정합니다.
3. nn
을 변경할 수있는 경우 omega
길이를 어떻게 설정해야합니까? 나는 더 이상 parameter (nn=20)
가 없을 때를 의미합니다.Fortran 코드에 대한 몇 가지 질문입니다. Fortran에 익숙하지 않습니다.
program test_20140919
! test
implicit none
integer nn
parameter (nn=20)
real omega(nn)
call test_real(nn, 2.0, 4.0, omega)
print *, omega
end program test_20140919
!c ===
subroutine test_real(nn, o1, o2, omega)
integer nn
real o1, o2
real omega(nn)
print *, nn
omega = o1 + (o2*o1)*(/ (i1,i1=0,nn-1) /)/real(nn-1)
print *, real(nn)
return
end
이 내용은 터미널에 gfortran test.f -ffree-form -o test
행으로 컴파일되었습니다.
UPD 인해 블라디미르 F로부터 응답에 대한 부호의 개정판 :
module subs
implicit none
contains
subroutine test_real(nn, o1, o2, omega)
integer nn
real o1, o2
real :: omega(:)
if (.not. allocated(omega)) allocate(omega(nn))
omega = o1 + (o2*o1)*(/ (i1,i1=0,nn-1) /)/real(nn-1)
print *, real(nn)
end subrotine
end module
program test_20140920
! test
use subs
implicit none
integer nn
real, allocatable :: omega(:)
read(*,*) nn
allocate(omega(nn))
call test_real(nn, 2.0, 4.0, omega)
print *, omega
end program test_20140920
명령 줄 입력 리디렉션 ('>')을 사용하여 텍스트 파일을 표준 입력으로 리디렉션 할 수도 있습니다. 그러면 프로그램에서 파일을 읽습니다. –