Как использовать ctypes Python для взаимодействия с параметризованными производными типами Fortran?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать ctypes Python для взаимодействия с параметризованными производными типами Fortran?

Сообщение Anonymous »

Я пытаюсь написать код Python для взаимодействия с написанным мной кодом Fortran, который использует параметризованные производные типы, однако мой код Python приводит к ошибкам сегментации.
Минимальное воспроизведение код Python, который я пытаюсь написать, выглядит следующим образом:

Код: Выделить всё

import ctypes
from pathlib import Path

class Derived(ctypes.Structure):
...

library = ctypes.CDLL(str(Path(__file__).parent / "test_lib.so"))

n = 4
c_n = ctypes.c_int(n)

Derived._fields_ = [
("n", ctypes.c_int),
("y", ctypes.c_double * n)
]

d = Derived()

library.test_derived(ctypes.byref(c_n), ctypes.byref(d))

print(d.y[:])
Где test_lib.so — это библиотека общих объектов, скомпилированная из следующего кода Фортрана:

Код: Выделить всё

module test_module
use iso_c_binding, only: c_double, c_int
implicit none

type, bind(c) :: Derived(n)
integer(c_int), len :: n
real(c_double), dimension(n) :: y
end type Derived

contains

subroutine test_derived(number, der) bind(c, name="test_derived")
integer(c_int), intent(in) :: number
type(Derived(n=number)), intent(out) :: der

der%y = 2.d0
write(*, *) "Fortran:", der%n, der%y
end subroutine test_derived

end module test_module

program main
use test_module
implicit none

integer, parameter :: n_points_1 = 5
integer, parameter :: n_points_2 = 6
type(Derived(n=n_points_1)) :: d1
type(Derived(n=n_points_2)) :: d2

call test_derived(n_points_1, d1)
call test_derived(n_points_2, d2)

end program
Я ожидаю вывода оператора записи Fortran и оператора печати Python при запуске сценария Python, но процесс завершается с кодом выхода 139 (прерван сигналом 11:SIGSEGV ) вместо этого, без какого-либо другого вывода. Когда я компилирую код Фортрана как исполняемый файл и запускаю его, он работает как положено. Я написал аналогичный код Python для взаимодействия с обычными производными типами Fortran, используя ctypes.Structure, но этот подход, похоже, не работает с параметризованными производными типами. Я что-то упускаю?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ived-types
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Java Generics: создание экземпляров массивов с параметризованными типами: незаконно?
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Ошибка импорта Fortran, связанная с fortran
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Как использовать Dapper с производными типами
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Как использовать Dapper с производными типами
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как использовать Dapper с производными типами
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»