Средства разработки приложений

         

Отображение типов данных языка Java в типы данных языка Fortran


Основные типы языка Java и соответствующие им типы языка Fortran представлены в таблице 1. Данные для таблиц взяты из литературы [] и [].

Таблица 1. Отображение примитивных типов языка Java в типы языка Fortran.

Тип данных языка Java Требуемый объем памяти Тип данных языка Fortran
Int 4 байт INTEGER
Short 2 байт INTEGER*2
Long 8 байт INTEGER*8
Byte 1 байт CHARACTER
Float 4 байт REAL
Double 8 байт DOUBLE PRECISION
Char 2 байт CHARACTER
Boolean 1 байт LOGICAL*1

Массив языка Java можно отобразить на такое представление данных языка Fortran как массив. Отображение массива языка Java на массив языка Fortran можно сделать через прямой буфер, средства работы с которым предоставлены в пакете "java.nio".

Данные в Fortran-программах могут быть представлены в виде констант или имен переменных (или идентификаторов).

Основные типы языка Fortran и соответствующие им типы языка Java представлены в таблице 2. Данные для таблиц взяты из литературы [] и []

Таблица 2. Отображение примитивных типов языка Fortran в типы языка Java.

Тип данных языка Fortran Требуемый объем памяти Тип данных языка Java
INTEGER*2 2 байт short
INTEGER
INTEGER*4
4 байт
4 байт
int
int
REAL
REAL*4
DOUBLE PRECISION
REAL*8
REAL*16
4 байт
4 байт
8 байт
8 байт
16 байт
float
float
double
double
double double
COMPLEX
COMPLEX*8
COMPLEX*16
COMPLEX*32
8 байт
8 байт
16 байт
32 байт
float float
float float
double double
double double double double
LOGICAL*1
LOGICAL
LOGICAL*4
1 байт
4 байт
4 байт
byte
int
int
CHARACTER
CHARACTER*L
1 байт
L байт
byte
string

Для отображения данных, определенных в общем блоке, в окружении Java следует использовать прямой байт буфер. Такое отображение легко организовать, потому что общий блок представляет собой некоторую область памяти, хранящую неоднородные данные. Прямой байт буфер, доступный в Java окружении также представляет собой область памяти, которая может хранить неоднородные данные.

Для каждого как именованного, так и неименованного общего блока можно использовать по одному буферу.

В языке Fortran массивом называется упорядоченная последовательность данных, занимающая непрерывную область памяти, к которой можно обращаться по имени [].
Массивы характеризуются типом значений их элементов и граничными парами - диапазоном индексов по каждому измерению. Несмотря на то, что Fortran массивы могут быть как одномерными, так и многомерными, в памяти они располагаются как одномерный массив. Причем элементы многомерного массива располагаются в памяти таким образом, что значение первого индексного выражения возрастает быстрее второго, значение второго - быстрее третьего и т. д. []. Следовательно, приведенный индекс многомерного массива можно рассчитать по ниже приведенной формуле, а именно: пусть имеется многомерный массив arr[N, M, K], тогда приведенный индекс элемента arr[i, j, k] рассчитывается следующим образом: (i-1)+(j-1)*N+(k-1)*N*M Массив языка Fortran следует отображать на прямой байт буфер, доступный в Java среде. Такое представление выгодно, потому что многомерный Fortran-массив в памяти располагается как одномерный массив. Для получения данных из прямого буфера соответствующих элементу многомерного Fortran-массива в Java окружении реализуется специальный класс. Многомерный массив не может иметь больше 7 измерений [], то всегда можно автоматически получить данные из прямого буфера, соответствующие элементу многомерного Fortran-массива в Java окружении. При этом следует обойтись без транспонирования самого Fortran-массива. Для ссылки на элемент массива задается индексированная переменная; на массив в целом ссылаются по его имени. Начиная со стандарта Fortran 90, в языке есть возможность непосредственно работать с частями массива - вырезками и сечениями. Вырезка из массива представляет собой подмассив вида <имя_массива>(< нижняя граница - верхняя граница), Элементы вырезки из массива могут быть взяты с шагом, отличным от единицы. В этом случае вырезка по соответствующему измерению задается уже не граничной парой, а триплетом. <имя_массива>(< нижняя граница - верхняя граница, шаг >,…) Если по какому-то измерению опущены обе границы, то говорят о сечении массива. Вырезку из массива можно также задать с помощью векторного индекса[]. Для отображения вырезки или сечения массива на объекты Java среды также можно использовать байт буфер.Такое отображение можно выполнить следующим образом. Весь массив отображается на буфер, а дальше в Java среде организуется специальный класс, содержащий методы получения и записи элементов вырезки и сечения массива посредством пересчета с учетом шага. Таким образом, любой массив языка Fortran можно отобразить на прямой байтовый буфер языка Java. Если массив размещен на общем блоке, он автоматически отобразится в Java окружение при отображении общего блока. Если массив определен посредством использования оператора DIMENSION, то для него надо создать прямой буфер, расположенный на том участке памяти, который компилятор языка Fortran выделил для хранения данного массива. Что касается вырезки и сечения массивов, так это представление данных можно отобразить через указатели на соответствующие элементы.

Содержание раздела