Fortran (또는 C) 코드를 구문 분석하여 Fortran (또는 C) 함수의 간격 확장을 생성 할 수있는 도구가 있습니까?


13

박사 학위 논문의 사례 연구에 따르면 CHEMKIN-II 에서 포트란 서브 루틴의 간격 확장이 필요합니다 (링크에 대한 사과; Sandia National Laboratory에서 더 이상 배포 할 수없는 패키지에 대한 것임). CHEMKIN-II는 연소 화학에 사용되는 화학 패키지입니다. 연소에 사용되는 표준 패키지이기 때문에 다른 패키지를 사용할 수 없습니다 (또는 오히려 선호하지 않을 것입니다).

필요한 간격 연장을 얻기 위해 DAEPACK 이라는 자체 개발 도구를 사용하고 있습니다.. 몇 년 전에 32 비트 OS (gcc 2.95에 해당하는 libstdc 버전으로)에서 필요한 CHEMKIN-II 서브 루틴의 필요한 간격 확장을 생성 할 수 있었지만 그 이후로 떨어진 오래된 바이너리 사용하고 엄청난 시련이 될 것입니다 (사용한 다른 모든 소프트웨어의 32 비트 버전을 찾아야하기 때문입니다). 이 패키지의 소스 코드도 독점적이지만 MIT에서 처음 개발되었으며 MIT에서 근무하기 때문에 (많은 노력을 기울인 후) DAEPACK의 소스 코드를 얻을 수있었습니다. 내가 가지고있는 소스 코드를 사용하여 64 비트 버전의 Linux와 호환되는 DAEPACK 버전과 gcc 4.xx에 해당하는 libstdc 버전을 컴파일 할 수 있었지만이 소스 코드는 오래된 것으로 생각됩니다. 논문을 완성하는 데 필요한 간격 확장 코드를 성공적으로 생성하지 못하는 실행 파일로 컴파일합니다. 소스 코드를 수정하는 데 도움을주기 위해 개발자에게 연락했지만 이전에 개발자와 연락 한 후에는 소스 코드를 수정하는 데 시간이 걸린다는 것을 알고 있습니다.

큰 문제 가 있습니다. 자금이 부족하여 졸업해야 할 때까지 6 개월 남았습니다. 필자는 박사 학위 논문을 성공적으로 마치기 위해 DAEPACK을 신속하게 수정하기 위해 개발자에게 의지 할 수 없습니다.

다음을 수행하는 패키지가 필요합니다.

  • 간격 확장, Taylor 모델 (간격 산술 사용) 및 거의 임의의 포트란 77 코드의 파생물을 생성합니다. DAEPACK에 의해 구문 분석되지 않은 유일한 구조는 DO루프와 IF명령문 이라고 생각합니다 . Taylor 모델이 필요하기 때문에 코드에는 자동 차별화 (AD) 기능도 있어야합니다.
  • Fortran 77 코드의 소스 간 변환으로 이러한 간격 확장 및 Taylor 모델을 생성합니다 (즉, 간격 확장 및 Taylor 모델을 계산하는 소스 코드를 생성하기 위해 컴파일러와 같이 소스 코드를 구문 분석합니다).

핀치에서, 위 두 가지를 수행하는 소프트웨어를 Fortran 77 코드 대신 C 코드로 사용한 다음 모든 것을 통과시킬 수 f2c있습니다. 나는 모든 것을 통과 시킬지 f2c조차 알지 못하기 때문에이 방법으로하지 않는 것을 선호 하지만 필사적입니다.

필사적으로 박사 과정 학생을 도울 수 있습니까?


몇 가지 가능한 제안을 예상하기 위해 시간 제약이있는 경우 나에게 적합하지 않은 접근법이 있습니다.

  • DAEPACK을 작동시키기 위해 더 열심히 노력하고 있습니다. 날 믿어 봐 그리고 개발자를 자주 괴롭 힙니다.
  • 객체 지향 (또는 객체 지향) 접근법을 사용하여 인터벌 확장 또는 Taylor 모델을 계산하는 도구. CHEMKIN-II (또는 다른 유사한 큰 라이브러리)를 새로운 유형으로 다시 코딩 할 시간이 없습니다. 너무 커.
  • Fortran 77/90 또는 C 이외의 다른 언어 사용. CHEMKIN-II 코드는 Fortran에 있습니다. 을 사용하여 C로 변환 f2c하거나 필요한 경우 TChem이라는 CHEMKIN-II의 Sandia 기반 클론을 사용하십시오. 나의 오래된 결과는 CHEMKIN-II를 사용합니다; 내 새로운 결과는 이전 결과를 복제해야하며 Cantera는 사례 연구 및 단위 테스트를 기반으로 CHEMKIN-II의 기능을 복제하지 않을 것입니다. 또한 저보다 앞서 대학원생은 CHEMKIN-II 소스 코드에 약간의 흑 마법을 사용하여 간격 산술이 특히 잘 작동하도록했습니다. 다른 패키지로 복제하기가 어렵습니다.

논문 주제를 즉시 변경하십시오. 바보 같은 간격의 산술을 제거하고 이상적으로 작동하는 소프트웨어를 사용하여 유용한 것을 수행하십시오. ;-D
Jed Brown

6
기존 결과를 가져와 논문 주제에 대한 해석으로 끌어 들여서 멋진 글씨를 작성하고 방어위원회에서 훌륭한 간식을 구입하십시오.
Matt Knepley

f:RRF:(R,R0+)((R,R0+)F(a,b)=f([ab,a+b])
Deathbreath

1
인터벌 산술의 기본 개요는 Wikipedia (인터벌 확장 개념 포함) 와이 페이지에 언급 된 참조에서 찾을 수 있습니다 . 내가 찾을 수있는 Taylor 모델에 대한 가장 좋은 소개는 여기 입니다. 자동 차별화는 일반적으로 Taylor 모델의 구현에 사용됩니다. 나는 아무도 수치 근사를 대신 사용한다고 들었거나 본 적이 없습니다.
Geoff Oxberry

2
@MishaBrukman : 오, 나는 그 모든 것을 펀칭했습니다.
Geoff Oxberry

답변:


2

DAEPACK32 비트 모드에서는 작동하지만 64 비트 모드에서는 작동하지 않는 문제를 가정하면 다음과 같은 방법으로이를 해결할 수 있습니다.

DAEPACK64 비트 OS에서 32 비트 모드로 컴파일

다른 질문 에서이 작업을 수행하는 방법을 참조하십시오 . 이것은 계속 작업하기 쉬운 방법 일 수 있습니다.

문제가 생성 된 코드 에 64 비트 모드에서 문제가있는 경우 유사한 32 비트 플래그 또는 32 비트 환경에서 생성 된 코드를 컴파일하십시오 (64 비트 OS는 적절한 라이브러리가 주어지면 32 비트 코드를 실행할 수 있지만 하지 그 반대의 경우도 마찬가지 ).

DAEPACK안전한 전체 환경을 재현

  1. 사용하여 가상 머신에서 전체 32 비트 환경, 예를 들어, 만들기 버추얼 같은 DAEPACK기존 바이너리에서, 또는 이러한 환경에서 다시 컴파일 여부, 거기에 행복 실행입니다. 소프트웨어의 작동 버전을 얻는 데 필요한만큼 오래된 오픈 소스 OS 및 컴파일러의 릴리스를 구할 수 있습니다.

  2. DAEPACK환경이 다른 소프트웨어에 적합한 호스트 시스템 또는 별도의 가상 시스템에서 출력을 가져 와서 계속 전송하십시오. 예를 들어, 이것은 최신 64 비트 OS 일 수 있으며 거기서 계속 작업합니다.

    VirtualBox 의 공유 폴더 기능을 사용하면 쉽게 사용할 수 있습니다.

다른 사람이 문제를 해결하도록 돕기 DAEPACK

귀하와 소프트웨어 제작자가이 문제를 해결할 시간이 없다고 말했지만 아무도 다른 사람의 도움을받을 수 없다고 말하지 않았습니다. 다음 옵션을 고려하십시오.

  • 일부 학부 MIT CS 학생들을 고용하여 32 비트 및 64 비트 문제를 해결하십시오. 예를 들어, 돈이나 피자 (또는 맥주, 합법적 인 음주 연령 인 경우)로 보상해야 할 수도 있습니다. 또는 귀하의 고문이이를 위해 파트 타임 학부생을 고용 할 수 있는지 물어보십시오 (자신의 자금이 부족한 경우 자금 문제 일 수 있음). 또는 부서의 연구 프로그래머에게 호의를 구하십시오.

  • 의 공개 소스 릴리스 로비 DAEPACK. 라이센스 상태가 불분명 한 것처럼 보이지만 MIT에는 잘 알려진 유명한 오픈 소스 라이센스 가 있습니다. 공개 라이센스로 배포하면 문제를 더 잘 파악하고 32 비트와 64 비트 문제를 해결하는 데 도움이 될 수 있습니다.

    부서, 법률, 행정 등에 따라 사무실을 박사 학위로 남겨둔 6 개월보다 오래 걸릴 수 있으므로 다른 대안을 추구하면서 일찍 시작하는 것이 좋습니다.

행운을 빕니다!


이 답변을 작성하는 동안 잠시 보낸 후 2012 년에 6 개월 기한을두고 귀하의 질문을 썼다는 것을 깨달았습니다. 미안합니다! 나는이 사건에서 당신이 무엇을했는지 궁금합니다.
Misha Brukman

박사 과정에서 나는 당신이 언급하지 않은 세 가지 접근법을 모두 성공하지 못했습니다. IIRC의 문제점은 버그가있는 코드를 생성한다는 것입니다. 그것을 컴파일하는 것은 (내가 일부를 현대화해야했기 때문에 엉덩이에 통증이 있지만) 실제로 내 문제는 가장 적었습니다. DAEPACK은 회사의 핵심 기술이기 때문에 오픈 소스로 출시되지 않을 것입니다. 또한 해당 회사 외부의 다른 사람들과 전 고문 실험실에서 문제를 해결하도록하는 것도 겁이 나며, MIT CS 학생들이 그 고마운 일을하고 싶을 것 같습니다.
Geoff Oxberry

@GeoffOxberry는 유감스럽게도, "불행히도"소위 "연구 품질"소프트웨어에서 너무 널리 퍼져 있습니다. 그럼에도 불구하고 인내하고 학위를 완료 한 것을 축하합니다!
Misha Brukman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.