Мне нужен скрипт для рекурсии по структуре каталогов, извлечения чисел из файлов в каталогах, а затем выполнения вычислений по этим числам Я использую Python в качестве основного языка для сценария, но хотел использовать Fortran для численных расчетов. (Мне удобнее работать с Фортраном, и это лучший инструмент для численной работы)
Я пытаюсь использовать f2py, но получаю странные ошибки. f2py жалуется на мои объявления переменных, пытается изменить символ (*) на целое и добавить! на мои имена переменных, когда у меня есть комментарий сразу после объявления переменной.
Подпрограмма слишком длинна для размещения здесь, но принимает два аргумента: имя входного файла и имя выходного файла. Он открывает входной файл, читает числа, обрабатывает их, а затем записывает в выходной файл. Я намереваюсь использовать скрипт Python для записи числового файла в каждом каталоге и вызова для него подпрограммы Fortran.
Я могу попытаться опубликовать меньший пример с теми же проблемами, но есть ли какие-нибудь общие проблемы с f2py? Я использую gfortran v4.6.1, python v3.2.2 и f2py v2.
РЕДАКТИРОВАТЬ: Вот небольшой пример с теми же ошибками:
itimes-s.f (файл, содержащий подпрограмму для использования с python):
module its
contains
subroutine itimes(infile,outfile)
implicit none
! Constants
integer, parameter :: dp = selected_real_kind(15)
! Subroutine Inputs
character(*), intent(in) :: infile ! input file name
character(*), intent(in) :: outfile ! output file name
! Internal variables
real(dp) :: num ! number to read from file
integer :: inu ! input unit number
integer :: outu ! output unit number
integer :: ios ! IOSTAT for file read
inu = 11
outu = 22
open(inu,file=infile,action='read')
open(outu,file=outfile,action='write',access='append')
do
read(inu,*,IOSTAT=ios) num
if (ios < 0) exit
write(outu,*) num**2
end do
end subroutine itimes
end module its
itests.f (программа драйвера Fortran):
program itests
use its
character(5) :: outfile
character(5) :: infile
outfile = 'b.txt'
infile = 'a.txt'
call itimes(infile, outfile)
end program itests
a.txt:
1
2
3
4
5
6
7
8
9
10.2
b.txt после компиляции и запуска ites и itimes с использованием только gfortran:
1.0000000000000000
4.0000000000000000
9.0000000000000000
16.000000000000000
25.000000000000000
36.000000000000000
49.000000000000000
64.000000000000000
81.000000000000000
104.03999999999999
Запуск f2py с использованием f2py.py -c -m its itimes-s.f
приводит к многочисленным ошибкам. (не опубликовано из-за длинны, но если кто-то захочет, я могу опубликовать их)