2013-04-01 1 views
0

저는 Fortran을 처음 접했으므로이 질문에 대해 아무런 설명도하지 마십시오. 어쨌든 일부 시뮬레이션 소프트웨어를 최적화하려고합니다.변수에 대한 포트란 참조

내가 편집하고있는 서브 루틴이 시작 부분에 일부 정적 변수를 초기화하고 시작 조건이 무엇이든 관계없이 동일해야합니다.

문제는 각 시간 단계에서이 서브 루틴을 호출하여 수백 개의 변수를 다시 초기화하는 코드를 작성했기 때문에 그대로 유지해야합니다. 이 문제를 해결하기 위해 프로그램의 다른 모듈에서 이러한 모든 변수를 포함하는 파생 형식을 만들었으며 모듈 변수 대신 파생 형식 변수를 초기화하여 다른 시간 단계를 참조 할 수 있도록 소프트웨어를 편집하고 있습니다.

내 질문은, 나는 uneeded 작업을하고있다. 대신에 모든 초기화 작업을 수행하고 메인 프로그램 외부의 서브 루틴에 넣은 다음 컴파일시 이러한 작업을 링크하면 모든 변수가 함수 호출에서 값을 유지하게됩니다.

답변

2

한 번 결코 변경 초기화해야 할 변수가있는 경우, 그것을 매개 변수 속성 제공 :

real, parameter :: pi = 3.141592

컴파일러는 변경할 수없는 상수로 "변수"를 취급을 . 그러한 변수를 실수로 변경하려고하면 컴파일러에서 실수를 알려줍니다.

귀하의 질문에 대한 답변이 있습니까?

+0

그러나 문제는 그게 지금하고있는 것과 같은 많은 작업이 필요하다는 것입니다. 내가 궁금해 한 것은 모듈이 작동하는 방식입니다. 하나의 서브 루틴에서 모듈의 변수를 초기화한다면 그 모듈을 다른 서브 루틴에 포함하면 그 값을 유지할 것입니다. –

-2

내가하고있는 것을 말할 수는 없지만 FORTRAN은 3GL이며 참조로 매개 변수를 전달합니다. 메인의 변수를 서브 루틴에 넣으려면 공통 블록에 넣어야합니다. 일반적인 블록은 C의 전역 변수와 같습니다.

+2

아무도 공통 블록으로 새로운 포트란을 작성하면 안됩니다. 그 외에도, 서브 루틴에 변수를 전달하는 유일한 방법은 공통 블록을 사용하는 것이라는 제안은 잘못되었습니다. 그냥 틀렸어. –

관련 문제