Fortran example

Case2.f

      program sample

      CHARACTER(len=16) :: cmd_option_name
      CHARACTER(len=512) :: inputdeck, inputmesh
      INTEGER :: num_of_args, i
      LOGICAL :: args_error_flag = .false.

      num_of_args = iargc()

      do i=1, num_of_args, 2
            call getarg(i,cmd_option_name)

            if( cmd_option_name .eq. "-inp") then
                  call getarg(i+1,inputdeck)
            else if ( cmd_option_name .eq. "-mesh") then
                  call getarg(i+1,inputmesh)
            else
                  args_error_flag = .true.
                  WRITE (*,*) "ERROR: INVALID COMAND OPTION: " ,
     +            cmd_option_name
            endif
      enddo

      if ( args_error_flag .eqv. .true. ) then
            WRITE(*,*) "CHECK YOUR COMAND OPTION"
            stop
      endif

      inputdeck=trim(inputdeck)
      inputmesh=trim(inputmesh)

      write (*,*) "Input file path : ", inputdeck
      write (*,*) "Input file path : ", inputmesh


      end program
주요 변수 설명
  • cmd_option_name : 커맨드 옵션(포트 명)을 저장하는 크기가 16인 character형 배열로 선언
  • inputdeck : 입력 파일의 path를 저장하는 배열로 크기는 512인 characcter형 배열을 선언
  • num_of_args : 실행 시 같이 입력된 argument의 개수를 저장하는 변수
  • args_error_flag = .false. : 커맨드 옵션(포트 명)이 잘못 입력된 경우, 이 변수의 값을 .true.로 변경
주요 코드 설명
      ...
      num_of_args = iargc()
      ...
  • iargc() 함수를 이용하여 입력된 argument의 개수를 num_of_args 변수에 저장
      ...
[1]   do i=1, num_of_args, 2   
[2]         call getarg(i,cmd_option_name)

[3]         if( cmd_option_name .eq. "-inp") then
                  call getarg(i+1,inputdeck)
[4]         else if ( cmd_option_name .eq. "-mesh") then
                  call getarg(i+1,inputmesh)
[5]         else
                  args_error_flag = .true.
                  write (*,*) "ERROR: INVALID COMAND OPTION: " ,
     +            cmd_option_name
            endif
      enddo
      ...
  1. do loop를 이용해 num_of_args 개수 까지 i 값을 2씩 증가하면서 loop 문 수행
    • 예제에서 iargc() 함수로 받은 값이 4 이므로 loop문이 두번 수행 됨
  2. getarg() 함수를 이용해 i번째 arument 값을 cmd_option_name 변수에 저장
  3. 저장한 cmd_option_name 값이 -inp와 같은지 확인하여 같으면, i+1번째 arument 값을 읽어서 inputdeck 배열에 저장.
  4. 저장한 cmd_option_name 값이 -mesh와 같은지 확인하여 같으면, i+1번째 arument 값을 읽어서 inputmesh 배열에 저장
  5. cmd_option_name 값이 -inp-mesh 같지 않으면, args_error_flag.false.로 변경하고 잘못 입력한 커맨드 옵션을 출력

results matching ""

    No results matching ""