포트란의 옥트리 코드


10

나는 과학 컴퓨팅을 처음 사용합니다. Octree의 Fortran (바람직하게는 f90) 구현을 찾고 있습니다.

내 문제는 모든 상자에 N 개의 입자 (또는 라플라스 방정식과 같은 방정식을 해결하기 위해 적분 방정식 방법으로 연결할 수있는 밀도 값을 알고있는 소스)가 없을 때까지 도메인을 나누는 Octree이 필요합니다.

내가 찾을 수 있었던 것은 이 C ++ 구현 이었습니다. 사용할 수있는 기존 포트란 라이브러리가 있는지 알고 싶습니다.

또한 계산 상자에 빠른 적분 방정식 방법을 쉽게 적용 할 수 있도록 Fortran에서 Octree 구현에 대한 좋은 종이 권장 사항을 알게 될 것입니다!


BoxLib을 사용해보십시오. 매뉴얼에 따르면 순수한 포트란 90 버전이 있습니다. ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

답변:


9

Octrees에 대한 경험이 없지만 Fortran에서 사용하고 싶은 멋진 C ++ 라이브러리가있을 때마다 간단한 C 드라이버를 작성합니다. 일반적으로 정확히 필요한 것을 수행하는 몇 가지 C 함수입니다. 그런 다음 iso_c_binding 모듈을 사용하여 Fortran에서 호출합니다. 이것은 잘 테스트 된 라이브러리를 주변의 커뮤니티와 재사용한다는 큰 이점이 있습니다.

iso_c_binding 사용법에 대한 정보는 다음과 같습니다.

http://fortran90.org/src/best-practices.html#interfacing-with-c

이 특정 정보는 C에서 Fortran을 호출하기위한 것입니다. 업데이트해야한다는 것을 알 수 있습니다. 다음은 Fortran에서 C ++ 라이브러리를 호출하는 코드입니다. 첫 번째 링크는 간단한 C 드라이버이고 두 번째 링크는 Fortran 인터페이스이며 다른 Fortran 서브 루틴처럼 호출합니다.

https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp

https://github.com/certik/hfsolver/blob/master/src/qc.f90


6

Fortran을 사용하는 데 매우 익숙한 것 같습니다. Octrees는 효율적으로 구현 될 때 다소 복잡한 데이터 구조이므로 C / C ++와 같이이를 지원하는 프로그래밍 언어에 더 적합합니다. C / C ++에는 사용할 수있는 여러 가지 고품질 구현이 있습니다.


답변 주셔서 감사합니다! 그러나 내가 사용해야 할 빠른 통합 방법은 Fortran으로 작성되었습니다. Fortran에서 Octree 코드를 작성하는 것도 당연합니다.
rivendell

어떤 빠른 통합 방법? 그것들은 대부분 높은 수준의 언어로 싸여 있으며, 특히 octree를 감 쌉니다. . .
meawoppl

C와 비교하여 (현대) Fortran에서 효율적인 octree 구현에 대한 지원이 무엇입니까? 내가 아는 유일한 단점은 부호없는 정수가 누락되어 비트 연산을 명시 적으로 작성해야한다는 것입니다.
Jannis Teunissen

@JannisTeunissen-Fortran 200x에 복잡한 데이터 구조를 만들 수있는 방법이 아니라 얼마나 쉬운 지에 대한 것이 아닙니다. C ++, 예컨대 가지고 std::map, std::multimap, std::vector, std::sort, 및 기타 등등, 기본 데이터 타입의 모든 일반적 avaiable이다 독립된 저장된다. 오늘날 Fortran에서도이 모든 작업을 수행 할 수 있다는 주장은 없지만 기본 데이터 구조가 아닌 애플리케이션에서 실제로 작업하는 데 생산적으로 사용할 수있는 작업에는 며칠과 몇 주가 소요됩니다.
Wolfgang Bangerth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.