포트란에서 변수을 역으로 추적하려고 합니다.

  • #317147
    포트란 144.***.179.221 2068
    안녕하세요,

    모듈로 이루어진 포트란 코드에 다음과 같은 문장이 있는데

    call get_parameter_integer(“nn”  , nn   )

    nn을 어디서 읽어들이는지 찾으려면 어떻게 해야하나요?
    특별한 값을 넣어주지 않아도 nn값이 저장이 되는 걸로 보면
    어디선가 읽어들이는 것 같은데 찾기가 쉽지 않네요.


    좋은 방법이 없을까요?




    • 초보 207.***.223.184

      get_parameter_integer.f
      또는
      get_parameter_integer.f90
      으로 된 파일을 찾아요.

      • 포트란 75.***.84.124

        답변 감사합니다.
        그런데 그런 모듈이 없더군요.
        위의 예는 값을 읽어들이는 많은 것들 중의 하나인데 어떤 것 은 직접 input file에 값을 입력해야 하고 어떤 것은 그럴 필요가 없는 걸로 봐서 분명히 어디선가 정의가 된 것 같은데 코드가 분량이 많아서 찾지를 못하겠네요. gdb라는 것을 쓰면 될까요?

    • gdb 71.***.29.144

      gdb를 써보셨는지요? 왠만한 디버깅 툴에는 변수에 대한 값을 바로 확인이 가능하므로 그 값들이 어디서 나오는지 따로 grep 해보면 소스를 확인할 수 있지 않을까 생각합니다.
      ctags으로 전역 혹은 static 변수에 대한 소스추적도 도움이 될껍니다.

      • 포트란 75.***.84.124

        gbd라는게 여러 모듈로 이루어진 코드도 가능한건가요? 지금 쓰고 있는 코드는 일단 make을 실행하면 *.x라는 파일이 생겨서 이걸 실행시키든지 아니면 start.csh와 run.csh를 차례로 실행시켜야 계산을 시작합니다. 여기에 gbd가 비집고 들어갈 수가 있는지요?

        • gdb 71.***.29.144

          물론입니다. 전체 프로그램중에 디버깅하고자 하는 파일 혹은 함수만 찾아서 디버깅할 수 있는 건 기본이죠.
          http://infohost.nmt.edu/tcc/help/lang/fortran/gdb.html
          좀 더 구체적인 설명은 찾아보실 수 있을거라 믿습니다.
          지금 실행하고자 한 shell코드는 단순한 script입니다. 말그대로 순차적인 commands들의 실행이지요. start.csh 나 run.csh파일을 잘 읽어보시면 분명히 fortran 코드를 실행하는 부분을 찾을 수 있을 겁니다.
          그 부분을 찾아 gdb로 실행하면 님께서 원하시는 결과를 얻을 수 있을껍니다.
          하지만, start.csh 나 run.csh에서 하고 있는 fortran 코드 실행전의 선행작업은 manual로 실행해야 할 필요가 있겠죠.

    • 미국인 65.***.23.15

      처음들어보는 외국어이군요.

      이거는 어느나라말인가요?

    • 초보 24.***.136.192

      물론 툴을 쓰면 확실할테고.

      >> 그런데 그런 모듈이 없더군요.

      그렇다면 내장 라이버러리에 정의된 함수일수도 있겠네요.
      get_parameter_integer가 들어가는 간단한 프로그램을 짠 다음, 입력에러가 나게해서 그 에러코드를 힌트삼아 가지고, help를 통해서 찾아들어가 보는 방법.

      >>어떤 것 은 직접 input file에 값을 입력해야 하고 어떤 것은 그럴 필요가 없는 걸로 봐서

      또 이 함수가 실제로 내장함수인 경우는 입(출)력을 제어하는 파라미터일수도 있겠군요. 이 경우, 키보드 입력함수가정의 되어 있어야 하므로, 입출력 환경설정에 관련된 선행 스크립트가 실행되어야 하는 것일 수 도있겠고….또 이경우 common block 에 변수가 물리적 트랜스프없이 참조될수도 있지요.

    • 서브루틴 100.***.180.176

      subroutine 으로 정의되어 있을겁니다.
      소스 코드들 모여있는 패쓰에 가셔서..
      > grep -e ‘subroutine get_parameter_integer’
      아마 어떤 모듈 파일 안에 정의되어 있을겁니다.
      포트란 내장 함수는 아니고 유저가 정의한 서브루틴인데..
      “nn” 이라는 character 변수를 받아서 nn 이라는 integer 로 돌려주는것 같은데..
      소스 코드 들여다 보시면 되겠죠.

Cancel