Как мне создать модуль python из программы fortran с помощью f2py?

StackOverflow https://stackoverflow.com/questions/2462354

  •  20-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь прочитать некоторые smps-файлы с помощью python и нашел реализацию fortran, поэтому я подумал, что попробую f2py.Проблема в том, что у меня нет опыта работы с fortran.

Я успешно установил gfortran и f2py на свой Linux-сервер и запустил пример на странице w f2py, но у меня возникли некоторые проблемы с компиляцией и запуском большой программы.Есть два файла, один с оболочкой для чтения файлов и один со всей логикой.Кажется, они вызывают друг друга, но когда я компилирую и связываю или пробую f2py, я получаю ошибки, из-за которых они каким-то образом не могут найти друг друга:

f95 -c FILEWR~1.F
f95 -c SMPSREAD.F90 
f95 -o smpsread SMPSREAD.o FILEWR~1.o 

FILEWR~1.o In function `file_wrapper_'
FILEWR~1.F(.text+0x3d) undefined reference to `chopen_'
usrlibgcci486-linux-gnu4.4.1libgfortranbegin.a(fmain.o) In function `main'
(.text+0x27) undefined reference to `MAIN__'
collect2 ld returned 1 exit status  

Я также попытался изменить имя на FILE_WRAPPER.F но это не помогло.

С помощью f2py я обнаружил, что мне пришлось включить комментарий, чтобы заставить его принять свободный формат, и сохранил это как новый файл и попробовал:

f2py -c -m smpsread smpsread.f90

Я получаю много выходных данных и предупреждений, но ошибка, похоже, в этом:

getctype: No C-type found in "{'typespec': 'type', 'attrspec': ['allocatable'],  'typename': 'node', 'dimension': [':']}", assuming void.

В программу для чтения fortran 90 spms можно найти здесь.

Любая помощь или предложения приветствуются.

Это было полезно?

Решение

Я бы предложил вообще отказаться от бизнеса fortran.

http://myweb.dal.ca/gassmann/smps2.htm

Макет записи MPS описан здесь, и его относительно просто разобрать на Python.

http://myweb.dal.ca/gassmann/smps2.htm#CoreMPSline

В любом случае вам придется определить соответствующие классы Python (или namedtuples) для всех данных.

Я не думаю, что Fortran помогает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top