Fortran에서 Command-line arguments 읽어 들이기.

생각보다 귀찮아서 제가 필요한 만큼만 딱 subroutines으로 만들어서 배포합니다. 코드는 이메일로 사용목적(ex. 학생이다 등등)을 간단하게 알려주시면 제가 판단해서 보내드립니다.

ps) real(kind=8) 값이 정상적으로 입력되려면 compile할때 intel fortran complier의 경우에는 -r8 옵션을 주어야 합니다. 아래 두 예제에서 real(kind=8)로 선언된 dx값을 비교해보시면 무슨 이야기인지 감이 오실 듯.
😀

예제 1. -r8 옵션이 없는 경우

[worker@local]$ ifort -o main.app uwa_args.f90 main.f90
[worker@local]$ ./main.app job test trcr 100 fldr 2 dx 0.2 df 0.4
fn : test
trcr: 100
fldr: 2
dx : 0.200000002980232
df : 0.4000000

예제 2. -r8 옵션을 준 경우

[worker@local]$ ifort -o main.app uwa_args.f90 main.f90 -r8
[worker@local]$ ./main.app job test trcr 100 fldr 2 dx 0.2 df 0.4
fn : test
trcr: 100
fldr: 2
dx : 0.200000000000000
df : 0.4000000

사용법은 아래와 같습니다.

예제 0. main.f90

program main
use uwa_args

implicit none
character(len=256) :: fn00
integer(kind=8) :: itrcr
integer(kind=4) :: ifldr

real(kind=8) :: dx
real(kind=4) :: df

do iarg = 1, command_argument_count()
call uwa_command_argument (iarg, args)

select case (trim(args))
case ('job')
call uwa_command_argument (iarg+1, fn00)
case ('trcr')
call uwa_command_argument (iarg+1, itrcr)
case ('fldr')
call uwa_command_argument (iarg+1, ifldr)
case ('dx')
call uwa_command_argument (iarg+1, dx)
case ('df')
call uwa_command_argument (iarg+1, df)
end select
end do

print *, "fn : ", trim(fn00)
print *, "trcr: ", itrcr
print *, "fldr: ", ifldr

print *, "dx : ", dx
print *, "df : ", df

stop

end program main

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s