Описание тега fortran-iso-c-binding

Стандартная совместимость Fortran с C состоит из атрибута `BIND(C)`, который включает соглашения о вызовах C и изменяет имена символов, и модуля ISO_C_BINDING, который обеспечивает доступ к именованным константам, которые представляют параметры типа вида представлений данных, совместимых с типами C, производный тип C_PTR, соответствующий любому типу указателя данных C, производный тип C_FUNPTR, соответствующий любому типу указателя функции C, и четыре процедуры.
2 ответа

Отрицательная индексация массива и размещение в памяти (указание)

В Фортране вы можете объявить массив с любым подходящим (целочисленным) диапазоном, например: real* 8 array(-10:10) Я считаю, что fortran при передаче по ссылке всегда будет передавать массив (1) в качестве ссылки, но я не уверен. Я использую указат…
15 авг '11 в 14:01
1 ответ

Fortran передает структуру C между двумя функциями C

У меня есть приложение на Фортране, которое требуется для вызова двух подпрограмм Си. Один для загрузки файла и один для запуска расчета файла около 200 раз. Я понимаю, что C DLL не может "сохранить" загруженную структуру в статической переменной дл…
17 мар '17 в 14:06
1 ответ

Проблемы с ISO_C_BINDING и OpenMP

У меня есть Fortran программа, которая распараллелена с использованием OpenMP. Основная функция вызывает функцию Фортрана, которая содержит определение системы с обыкновенными дифференциальными уравнениями. Это работает нормально, когда разделены на…
08 ноя '13 в 21:32
2 ответа

MATLAB mex c + Fortran Ошибка

Я пытаюсь изменить проект, составленный из файлов, написанных на c и fortran. Чтобы упростить процесс, я создал следующие простые функции: mysum.f SUBROUTINE mysum(a,b) REAL :: a,b,r r = a+b WRITE(*,*) r END SUBROUTINE mysum и test.c #include <me…
13 сен '13 в 17:11
2 ответа

Доступ к переменным модуля Fortran из C++

В настоящее время я работаю над проектом, который требует интеграции кода Fortran в C++. В модуле fortran объявлено множество переменных и массивов. Я могу получить доступ к типам integer,float и double из c, объявив переменную ac как extern double …
1 ответ

Ошибка сегментации при вызове C из Фортрана

Я пытаюсь вызвать функцию в C из Fortran.Я не очень хорошо понимаю, как перевести указатель C на типы Fortran.Может быть, это источник ошибки сегментации.Ниже мой код. Является ли мой интерфейс Fortran правильным?Использует ли моя программа на Фортр…
25 фев '14 в 20:37
2 ответа

Как получить доступ к динамически размещаемым массивам Fortran в C

Мой главный вопрос: почему массивы делают такие странные вещи, и есть ли какой-нибудь способ сделать следующее "чистым" способом? У меня в настоящее время есть программа C foo.c взаимодействие с программой на Фортране bar.f90 с помощью dlopen/dlsym …
3 ответа

Функция FORTRAN, возвращающая массив, вызывает segfault (вызов из C++)

В основном, вот моя проблема. Я вызываю чужие функции FORTRAN из моего кода C++, и это доставляет мне головную боль. Некоторый код: function c_error_message() character(len = 255) :: c_error_message errmsg(1:9) = 'ERROR MSG' return end Это функция Ф…
2 ответа

DCT сложных массивов с FFTW в Фортране: как указать на массив мнимой части?

Я пишу псевдоспектральный код CFD на Фортране, который, по сути, является шаговым шагом по уравнениям Навье-Стокса в плоском слое. В моем случае это действительно трехмерный код, но проблему можно хорошо понять в 2d, поэтому я буду придерживаться эт…
10 май '18 в 20:05
3 ответа

Как передать массивы строк из C и Fortran в Fortran?

Я пытаюсь передать массив строк из C в подпрограмму Fortran, а также из Fortran в ту же подпрограмму Fortran. Мне удалось успешно передать одиночные строки (то есть одномерные массивы символов) из C и Fortran. Тем не менее, у меня проблемы с массива…
13 дек '12 в 22:20
1 ответ

Почему мои фортрановые функции не экспортируются при использовании атрибута BIND(C, NAME="name")

Я привык использовать следующий синтаксис subroutine CalcA(A,N) !DEC$ ATTRIBUTES DLLEXPORT :: CALCA !DEC$ ATTRIBUTES ALIAS:'CalcA' :: CalcA IMPLICIT NONE ... end subroutine CalcA которая производит экспортированную функцию в.dll Так что теперь я пыт…
2 ответа

fortran77, iso_c_binding и строка c

Я пытаюсь вызвать некоторый код Fortran77 из C, но я не нашел правильного способа передачи массива C char. SUBROUTINE My_F_Code (c_message) BIND(C, NAME='my_f_code') USE ISO_C_BINDING IMPLICIT NONE CHARACTER*(C_CHAR) c_message CHARACTER*(256) f_mess…
20 дек '16 в 16:43
2 ответа

Преобразование из void в MPI_Aint

У меня возникли проблемы с преобразованием некоторой переменной из void* в MPI_Aint. Вот некоторая часть кода: C: void myfunc_(MPI_Aint *out_ptr, ...) ... void *ptr = mmap(...) ... *out_ptr = (MPI_Aint) ptr; Fortran : #ifdef DOUBLE_PREC integer, par…
2 ответа

Вызов METIS API(написанный на языке C) в программе на фортране

В течение 2 недель я изо всех сил пытался вызвать одну из библиотек METIS, написанную на C, из моего кода на фортране. И, к сожалению, это не кажется счастливым концом без вашей помощи. Я нашел несколько постов о прямом звонке и использовании интерф…
06 фев '13 в 13:31
1 ответ

Ошибка сегментации С и Фортран

------ main.c --------- #include <stdio.h> #include <stdlib.h> #include <dlfcn.h> #include <string.h> int main() { char* lib_name = "./a.out"; int array[5] = {1,2,3,4,5}; int size_a = sizeof(array)/sizeof(int); void* handle =…
15 авг '11 в 16:26
1 ответ

Ошибка: символьный аргумент 'a' в (1) должен иметь длину 1, потому что процедура BIND(C)

subroutine func01( a ) bind(C,name="func01") implicit none character(len=30), dimension(3) , intent(in) :: a print * print *, "char length = ", len(a(1)), len(a(2)), len(a(3)) print *, "raw a(1) : [", a(1), "]" print *, "raw a(2) : [", a(2), "]" pri…
30 сен '15 в 17:01
1 ответ

Передача массива Фортрана через ISO_C_BINDING

Я пытаюсь получить базу кода Fortran для вызова библиотеки C с помощью ISO_C_BINDING, но у меня проблемы с передачей массива Fortran. Я создал простой пример, который иллюстрирует мою проблему. main.f90 program main use iso_c_binding implicit none i…
21 май '14 в 21:26
2 ответа

Смешанное программирование на Фортране и С

Я студент-теоретик физики, работаю в области космологии. В ходе моего исследования я использовал довольно большую библиотеку кодов Фортрана, и я использовал C для своих нужд программирования. Мне удалось связать две программы в многочисленных тестов…
12 окт '11 в 17:06
1 ответ

Отладка Фортрана, смешанного с C++/CLI

У меня есть решение (VS 2015) с консольным приложением Fortran (проект Intel Fortran) и библиотекой C++/CLI. Я звоню в библиотеку C++ через Fortran C-bindings. Пример функции на стороне C++: extern "C" __declspec(dllexport) void PrintInteger(const i…
1 ответ

Как подготовить модуль Fortran из заголовочного файла C?

У меня есть этот чистый C-файл с 6 функциями, которые я хочу сделать доступными для программистов на Фортране: http://tinyfiledialogs.sourceforge.net/ Может ли C на Фортран "Импорт" работать? Должен ли я просто подготовить что-то вроде заголовочного…
07 июн '16 в 07:52