exponenta event banner

Библиотеки API MATLAB Fortran

API-интерфейс Fortran Matrix и API-интерфейс Fortran MEX описывают функции, которые можно использовать в шлюзе, и вычислительные процедуры, которые взаимодействуют с программами MATLAB ® и данными в рабочей области MATLAB.

Чтобы использовать эти функции, включите fintrf заголовок, который объявляет точку входа и процедуры интерфейса. Файл находится в вашем matlabroot\extern\include папка. Поместите эту инструкцию в исходный файл:

#include "fintrf.h"

Библиотека матриц

Передача функций Fortran Matrix API mxArray, тип MATLAB, используемый для хранения массивов, в файлы MEX и из них. Примеры использования этих функций см. в разделе matlabroot/extern/examples/mx.

Библиотека MEX

Используйте функции API Fortran MEX для выполнения операций в среде MATLAB. Примеры использования этих функций см. в разделе matlabroot/extern/examples/mex.

В отличие от функций MATLAB, файловые функции MEX не имеют собственной переменной рабочей области. Функции файлов MEX работают в рабочей области вызывающего абонента. Чтобы вычислить строку, используйте mexEvalString. Чтобы получить и поместить переменные в рабочую область вызывающей стороны, используйте mexGetVariable и mexPutVariable функции.

Макросы препроцессора

Библиотеки Matrix и MEX используют макросы препроцессора MATLAB mwSize и mwIndex для межплатформенной гибкости. mwSize представляет значения размера, такие как размеры массива и количество элементов. mwIndex представляет значения индекса, например индексы в массивы.

MATLAB имеет дополнительный макрос препроцессора для файлов Fortran, mwPointer. MATLAB использует уникальный тип данных, mxArray. Поскольку в Fortran невозможно создать тип данных, MATLAB передает специальный идентификатор, созданный mwPointer макрос препроцессора в программу Fortran. Вот как вы получаете информацию о mxArray в собственном типе данных Fortran. Например, можно узнать размер mxArray, определите, является ли она строкой, и посмотрите на содержимое массива. Использовать mwPointer для создания независимого от платформы кода.

Препроцессор Fortran преобразует mwPointer кому integer*4 при создании двоичных MEX-файлов на 32-разрядных платформах и integer*8 при построении на 64-разрядных платформах.

Примечание

Объявление указателя неверным размером может привести к сбою программы.

Использование Fortran %val Конструкция

Фортран %val(arg) конструкция указывает, что аргумент, arg, передается по значению, а не по ссылке. Большинство, но не все компиляторы Fortran поддерживают %val конструкция.

Если компилятор не поддерживает %val скопируйте значения массива во временный истинный массив Fortran с помощью mxCopy* процедуры (например, mxCopyPtrToReal8).

%val Пример конструкции

Если компилятор поддерживает %val конструкция, вы можете использовать подпрограммы, которые указывают непосредственно на данные (то есть указатель, возвращаемый типизированными функциями доступа к данным, как mxGetDoubles или mxGetComplexDoubles). Вы можете использовать %val для передачи содержимого этого указателя в подпрограмму, где он объявляется как матрица двойной точности Фортрана.

Например, рассмотрим подпрограмму шлюза, которая вызывает ее вычислительную подпрограмму, yprimeоколо:

call yprime(%val(yp), %val(t), %val(y))

Если компилятор Fortran не поддерживает %val конструкция, вы бы заменили вызов вычислительной подпрограммы на:

C Copy array pointers to local arrays.
       call mxCopyPtrToReal8(t, tr, 1)
       call mxCopyPtrToReal8(y, yr, 4)
C
C Call the computational subroutine.
       call yprime(ypr, tr, yr)
C
C Copy local array to output array pointer.
       call mxCopyReal8ToPtr(ypr, yp, 4)

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

real*8 ypr(4), tr, yr(4)

Если вы используете mxCopyPtrToReal8 или любой другой mxCopy*, размер массивов, объявленных в подпрограмме шлюза Fortran, должен быть больше или равен размеру входов в MEX-файл, поступающий из MATLAB. В противном случае mxCopyPtrToReal8 работает неправильно.

См. также

| | | | |