Компилятор Fortran DVM
Руководство пользователя
* Октябрь 2009 *

Документация

- дата последнего обновления 17.11.09 -


Оглавление

1     Введение

2     Назначение компилятора

3     Вызов компилятора

4     Опции компилятора

5     Компиляция программы в режиме отладки

6     Сообщения компилятора


1       Введение

Данное руководство содержит инструкции по использованию компилятора Fortran DVM(FDVM) и является частью общего руководства пользователя DVM‑системы.

В руководстве приняты следующие условные обозначения для описания синтаксических конструкций.

::=       по определению

|           альтернатива

[x]       необязательный элемент

y-list   список элементов  y [ , y ] ...

2         Назначение компилятора

Язык Fortran DVM (FDVM) является расширением языка Фортран 95 для параллельного программирования в модели DVM. Расширение оформлено в виде специальных комментариев (директив), которые аннотируют последовательную программу на языке Фортран 95.

Компилятор транслирует исходную программу на языке FDVM в следующие выходные программы.

3         Вызов компилятора

Вызов компилятора осуществляется следующей командной строкой:

dvm  fdv  [ <опции> ]   <имя-файла>

где:

<опции>

-

указания о режимах компиляции. Если какое-либо указание отсутствует, то для него действует значение по умолчанию. Если две опции противоречат друг другу, то преимущество получает последняя из указанных в командной строке опций;

<имя-файла>

-

имя файла (без расширения), который содержит текст исходной программы на языке FDVM. Файл должен иметь расширение .fdv. Поиск входного файла производится только в текущей директории.

4         Опции компилятора

Ниже перечислены опции компилятора, жирным шрифтом выделены ключевые символы, а курсивом – параметры опций.

-o  file

Поместить выходную программу в файл file;

-s

Генерировать последовательную выходную программу;

-p

Генерировать параллельную выходную программу;

-v

Выдать сообщения о вызовах фаз компилятора, а также номер версии компилятора;

-w

Выдать все предупреждающие сообщения;

-Idir

Добавить директорию dir в список директорий, где осуществляется поиск include файлов.

-ffo

Использовать свободную форму записи для выходной фортран-программы.

-f90

Используется свободная форма записи фортран-программы во входном файле.

-r8

При генерации выходного кода, считать размер вещественного по умолчанию равным 8 байтам.

-i8

При генерации выходного кода, считать размер целого по умолчанию равным 8 байтам.

-bindk

Задает соответствие типов данных в компиляторах с языков Фортран и Си;

-ubufn

Увеличить размер буфера для генератора выходного кода до n Мбайт. Рекомендуется использовать для больших по объему программ.

-uf

Устанавливается режим, при котором генератор выходного кода вызывается поочередно для каждой программной единицы. Рекомендуется использовать для больших по объему программ.

-bufiosize

Установить размер буфера, используемого при выводе распределенного массива, равным size;

-dleveld[:fr-list]

Генерировать дополнительный код для отладки программы;

-elevele[:fr-list]

Генерировать дополнительный код для анализа производительности программы.

-dbifl

Задает уровень оптимизации кода для отладки программы; l равно 1 или 2; отладка производится только в «крайних» витках циклов.  

 Выходной файл. Имя выходного файла, в котором компилятор размещает сгенерированную программу, указывается с помощью опции

-o  file

где file представляет собой имя файла. Если опция не указана, то по умолчанию, выходной файл получает имя <имя-файла>.f. Выходной файл записывается в текущую директорию.

Тип генерируемой программы. Тип генерируемой программы задается следующими опциями:

-s - последовательная программа

–p

-

параллельная программа

По умолчанию генерируется параллельная программа.

Форма записи фортран-программы. Если во входном файле используется свободная форма записи фортран-программы, требуется задание опции -f90. Для задания свободной формы записи выходной фортран-программы следует указать опцию –ffo, по умолчанию генерируется фортран-программа в фиксированной форме записи.

Директории для include-файлов. Если в исходной программе имеются операторы INCLUDE и не все include-файлы размещены в текущей директории, то необходимо указать опцию

-Idir

где dir - это имя директории. Поиск include-файла начинается с директорий, указанных в командной строке в том порядке, как они там перечислены. Затем поиск производится в текущей директории.

Дополнительная информация. Для идентификации версии компилятора и выполнения фаз компиляции необходимо указать опцию

-v

а для получения всех предупреждающих сообщений задать опцию

-w

Соответствие типов данных. Соответствие типов данных в компиляторах с языков Си и Фортран для ЭВМ, на которой будет выполняться сгенерированная программа, указывается с помощью опции

-bindk

где k - это целое число, которое указывает номер таблицы соответствия.

 

k = 0:

 

 

Фортран

Си

Размер (в байтах)

 

integer

long  

4

 

real

float  

4

 

double precision

double

8

 

character

char   

1

 

logical

long  

4

 

k = 1:

 

 

Фортран

Си

Размер (в байтах)

 

integer

int    

4

 

real

float  

4

 

double precision

double

8

 

character

char   

1

 

logical

int    

4

 

integer*8

long  

8

           

Соответствие типов определяется стандартными компиляторами с языков Си и Фортран для объектной ЭВМ. По умолчанию, считается k = 0.

5         Компиляция программы в режиме отладки

Для программ на языке FDVM предусмотрены два способа отладки:

Для каждого способа определено несколько уровней отладки.

Уровни функциональной отладки. Уровень функциональной отладки – это целое число от 0 до 4, оно определяет события в программе, о которых сообщается отладчику:

0 - нет событий,

1 - модификация распределенных массивов,

2 - модификация и использование распределенных массивов,

3 - модификация всех переменных,

4 - модификация и использование всех переменных.

Уровни отладки эффективности. Уровень отладки эффективности - это целое число от 0 до 4, которое определяет, какие участки программы рассматриваются в качестве  интервалов выполнения программы. Для каждого такого интервала можно получить характеристики эффективности.

0

-

нет интервалов,
1

-

параллельные циклы и охватывающие их последовательные циклы,
2

-

последовательности операторов, указанные в программе посредством директив INTERVAL и END INTERVAL,

3

-

объединение подмножеств 1 и 2,
4

-

все циклы и интервалы, заданные с помощью директив INTERVAL и END INTERVAL.

Последовательность операторов можно объявить интервалом с помощью директив:

CDVM$  INTERVAL  [<целочисленное-выражение>]

<последовательность-операторов>

CDVM$  END INTERVAL

Каждый интервал операторов должен удовлетворять условиям блока операторов:

Другими словами запрещены передачи управления извне внутрь интервала, и изнутри интервала - на оператор вне интервала.

Фрагменты программы. Программу можно разделить на отдельные отлаживаемые фрагменты. Каждый фрагмент определяется директивами

CDVM$  DEBUG  <номер-фрагмента> [( <параметр> )]

<фрагмент-операторов>

CDVM$  END DEBUG  <номер-фрагмента>

<номер-фрагмента>

::=

<целое-положительное-число>

<параметр>

::=

 D = levele

 

  | 

 E = leveld

 

  | 

 D = leveld , E = levele

где: 

параметр D  указывает максимально возможный уровень функциональной отладки,

параметр E  указывает максимально возможный уровень отладки эффективности,

leveld – целое число от 0 до 4,

levele – целое число от 0 до 4.

Фрагмент операторов должен удовлетворять условиям блока операторов.

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

Вся программа считается по умолчанию фрагментом с номером 0 и максимально допустимыми уровнями отладки  D = 4 , E = 4.

Пусть задана следующая структура фрагментов программной единицы:

               SUBROUTINE  SUB(…)

                        S1

CDVM$  DEBUG  1  (D = 4 , E = 1)

                        S2

CDVM$  DEBUG  2  (D = 1 , E = 3)

                        S3

CDVM$  END DEBUG  2

                        S4

CDVM$  END DEBUG  1

                        S5

               END

Эта структура определяет следующие максимально допустимые уровни отладки:

 

Множество операторов

Уровень отладки

 

{ S1, S5 }

D = 4 , E = 4

 

{ S2, S4 }

D = 3 , E = 1

 

{ S3 }

D = 1 , E = 3

 

Уровни отладки в опциях компилятора.

Уровень отладки для всей программы определяется опциями

-dleveld  - для функциональной отладки,

-elevele  - для отладки эффективности.

По умолчанию действуют опции –d0 и –e0.

Уровень отладки для отдельных фрагментов определяется опциями:

-dleveld [:fr-list]

-elevele [:fr-list]

где

fr         ::=  Lfr [ -  Hfr ]

Lfr       ::=  <номер-фрагмента>

Hfr      ::=  <номер-фрагмента>

Требуется, чтобы Lfr£Hfr.

fr-list это список, где каждый элемент списка представляет собой либо номер отдельного фрагмента, либо непрерывный диапазон номеров фрагментов. Пусть в директиве DEBUG определен для некоторого фрагмента уровень отладки равный m. Если для этого фрагмента в опциях компилятора задан уровень l, то фрагмент будет включен в отладку с уровнем  min( m , l ).

Пусть при компиляции программы указаны следующие опции отладки

-d2:1-2  -e2

Для подпрограммы SUB будут установлены следующие уровни отладки:

 

Множество    операторов

Уровень функциональной отладки

Уровень отладки эффективности

 

{ S1, S5 }

0

2

 

{ S2, S4 }

2

1

 

{ S3 }

1

2

Подробнее об отладке программы см. «Отладка DVM–программ. Руководство по использованию» и «Отладка эффективности DVM-программ. Руководство по использованию».

Трассировка выполнения функций Lib-DVM. «Включить» и «отключить» сбор трассы обращений к Lib-DVM можно с помощью директив отладки

CDVM$  TRACE  ON

CDVM$  TRACE  OFF

Оптимизация отладки. Опция -dbifl задает уровень оптимизации кода для отладки программы; l равно 1 или 2. Отладка будет производиться только в «крайних» витках циклов, кроме того, при l=2 с целью ускорения отладки  генерируются два тела для параллельных циклов. Рекомендуется использовать опцию при отладке больших программ.

6         Сообщения компилятора

Если компилятор обнаруживает в исходной программе ошибку, то он выдает сообщение следующего вида

<тип-сообщения> <номер-сообщения> on line <номер-строки> of <имя-файла> : <текст‑сообщения>

где:

<тип-сообщения>

- Warning

предупреждающее сообщение, не препятствующее генерации выходной программы.

 

- Error

ошибка, при которой невозможна генерация программы.

<номер-строки>

- целое число, которое указывает номер строки в файле <имя-файла>, при анализе которой обнаружена ошибка.

<текст-сообщения>

-текст сообщения на английском языке.

Ниже приведены номера ошибок, тексты сообщений и пояснения к ним.

000

Compiler bug
Сообщение говорит об ошибке компилятора, а не пользователя. Рекомендуется сообщить об ошибке разработчикам компилятора.

001

Unknown option option is ignored
Предупреждение. Неправильно заданная (в командной строке) опция игнорируется.

002

Invalid option argument arg is ignored
Предупреждение. Неправильно заданный (в командной строке) параметр опции игнорируется.

003

No source file specified
В командной строке не указано имя входного файла.

004

Illegal command line format
Неправильный формат командной строки. Все опции должны предшествовать имени входного файла.

005

Can't open file filename
В текущей директории нет входного файла или он защищен от чтения. Include-файл не найден или защищен от чтения.

006

Can't open file filename for write
Вероятно, пользователь не имеет прав на запись в текущую директорию.

007

Null program
Входной файл не содержит программу на языке FDVM.

008

Missing final end statement or unclosed construct
Оператор PROGRAM, SUBROUTINE, FUNCTION, или BLOCK DATA не имеет завершающего END или нет завершающего оператора ENDIF или ENDDO для конструкции IF THEN или DO, соответственно.

009

Illegal continuation card ignored
Строка продолжения несовместима с начальной строкой или последняя отсутствует. В этом случае, строка продолжения игнорируется, а компилятор пытается продолжить анализ оператора.

010

Unclassifiable statement
Вероятно, неверно задано ключевое слово оператора Фортран 77 или директивы FDVM.

011

Non digit in statement number field
Поле метки содержит не цифровой символ.

012

Unbalanced quotes; closing quote supplied
Нет закрывающего апострофа.

013

Unbalanced parentheses, statement skipped
Несоответствие открывающих и закрывающих скобок.

014

Syntax error
Ошибка синтаксиса оператора Фортран 77 или директивы FDVM.

015

Comment too long. Truncated to 160 characters
Предупреждение. Комментарий превышает 160 символов.

016

Inconsistent declaration of identifier identifier
Имя уже использовалось для другого объекта.

017

Inconsistent constant declaration identifier
Идентификатор PARAMETER уже использован для другого объекта.

018

Inconsistent array declaration of identifier identifier
Идентификатор массива уже описан другим способом.

019

Inconsistent function identifier
Идентификатор FUNCTION уже определен как другой глобальный объект или как локальный массив.

020

Inconsistent procedure identifier
Идентификатор EXTERNAL уже определен как другой глобальный объект.

021

Inconsistent subroutine identifier
Идентификатор SUBROUTINE уже определен как другой глобальный объект.

022

Inconsistent program declaration identifier
Идентификатор PROGRAM уже определен как COMMON, FUNCTION, или SUBROUTINE.

023

Inconsistent common declaration identifier
Идентификатор COMMON уже определен как FUNCTION, PROGRAM или SUBROUTINE.

024

Function has the same name as a common block identifier
Предупреждение. Идентификатор функции совпадает с идентификатором COMMON блока.

025

Common block has the same name as a function identifier
Предупреждение. Идентификатор COMMON блока совпадает с идентификатором функции.

026

Inconsistent operands to boolean operation
Несовместимость операндов логической операции

027

Inconsistent operands to arithmetic operation
Несовместимость операндов арифметической операции

028

Non-logical expression in IF statement
Не логическое выражение в операторе IF

029

Statement order error: declaration after DATA or function statement
Неверный порядок операторов: оператор спецификации после оператора DATA или описания операторной функции.

030

Declaration among executables
Неверный порядок операторов: оператор спецификации среди исполняемых операторов.

031

ELSEIF out of place
Нарушено правило вложенности конструкций. Оператору ELSEIF невозможно сопоставить оператор IF-THEN.

032

ELSE out of place
Нарушено правило вложенности конструкций. Оператору ELSE невозможно сопоставить оператор IF-THEN.

033

Misplaced PROGRAM statement
Оператор PROGRAM расположен не на своем месте.

034

Misplaced SUBROUTINE statement
Оператор SUBROUTINE расположен не на своем месте.

035

Misplaced ENTRY statement
Оператор ENTRY расположен не на своем месте.

036

Statement cannot be reached
Предупреждение. Оператор никогда не будет выполнен.

037

IMPLICIT item must be single letter
В операторе IMPLICIT единицей спецификации должна быть буква.

038

Label out of range
Метка вне диапазона 1¸99999.

039

Label already that of a format
Метка совпадает с ранее описанной меткой оператора FORMAT.

040

Label label already defined
Повторное определение метки.

041

Non character entity identifier has length specification
Спецификация количества байтов при идентификаторе (например, CH*6) разрешена только в операторе CHARACTER.

042

No dimensions in DIMENSION statement
В операторе DIMENSION отсутствует спецификация измерений.

043

Too many dimensions
Количество измерений массива больше 7.

044

can't subscript identifier
Индексируется объект, не являющийся массивом.

045

can't take substring of identifier
Ссылка на подстроку не символьного объекта.

046

No backward DO loops
Метка цикла определена до оператора DO.

047

Symbolic constant not allowed as DO variable
Управляющей переменной цикла не может быть именованная символьная константа.

048

Must go to assigned variable
В операторе GO TO по предписанию должна быть указана переменная, получившая значение при помощи оператора ASSIGN.

049

Missing DVM directive prefix
Отсутствует префикс CDVM$ или *DVM$ перед DVM директивой.

050

Explicit shape specification is required
Требуется спецификация явной конфигурации в операторах PROCESSORS и TEMPLATE.

051

Distribution format list is omitted

Нет списка форматов распределения в директиве DISTRIBUTE.

052

Unexpected END statement read

Нарушена структура фортран-программы.

053

Illegal use of PROCESSORS name  identifier
Идентификатор массива процессоров можно использовать только в операторах DISTRIBUTE, REDISTRIBUTE и MAP.

054

A distributee may not have the ALIGN attribute: identifier
Массив уже имеет атрибут ALIGN.

055

Distribution format BLOCK(n) is not permitted in FDVM
Формат распределения BLOCK(n) не поддерживается в FDVM.

056

Illegal shadow width specification
Неверная спецификация размера теневых граней.

057

An alignee may not have the DISTRIBUTE attribute: identifier
Массив уже имеет атрибут DISTRIBUTE.

058

The alignee identifier  isn't an array
Объект, специфицированный директивой ALIGN, не является массивом.

059

'identifier' hasn't the DYNAMIC attribute
Указанный массив не имеет атрибута DYNAMIC.

060

'identifier' hasn't the ALIGN attribute
Указанный массив не имеет атрибута ALIGN.

061

The align-target identifier  isn't declared as array
Объект, указанный в директиве ALIGN в качестве базы выравнивания, не является массивом.

062

The align-dummy identifier  isn't a scalar integer variable
Идентификатор измерения (align-dummy), используемый в директиве ALIGN, должен быть скалярной целой переменной.

063

Illegal combination of attributes
Недопустимое сочетание атрибутов.

064

'identifier' has the DISTRIBUTE and ALIGN attribute
Указанный идентификатор имеет несовместимые атрибуты DISTRIBUTE и ALIGN.

065

No shape specification
Отсутствует спецификация измерений.

066

'identifier' isn't array
Указанный идентификатор не описан как массив.

067

'identifier' is not processor array
Требуется идентификатор массива процессоров.

068

'identifier' is not remote group name
Указанный идентификатор не имеет атрибута REMOTE_GROUP.

069

'identifier' is not declared as reduction group
Указанный идентификатор не имеет атрибута REDUCTION_GROUP.

070

Illegal reduction operation name
Неверно задано имя редукционной операции.

071

Illegal use of task array name identifier
Недопустимое использование идентификатора массива задач. Ссылка на массив задач может появиться только в директивах TASK_REGION, ON, REDISTRIBUTE,  MAP и в директиве параллельного цикла задач.

072

'identifier' isn't distributed array
Требуется массив с атрибутом DISTRIBUTE, ALIGN или INHERIT.

073

Multiple declaration of identifier 'identifier'
Повторное описание идентификатора.

074

'identifier' isn't declared as group
Требуется переменная с атрибутом REMOTE_GROUP.

075

No dimensions in TASK directive
В операторе TASK отсутствует спецификация измерений.

076

Illegal rank of 'identifier'
Число измерений у массива задач больше 1.

077

'identifier' is not task array
Требуется массив задач.

078

Illegal interval number
В директиве INTERVAL номер интервала должен быть задан выражением целого типа.

079

Template 'identifier' is in COMMON
Идентификатор TEMPLATE не может быть описан как элемент COMMON блока.

080

Template may not be a dummy argument: identifier
Идентификатор c атрибутом TEMPLATE не может быть формальным аргументом.

081

ENTRY among specification statements
Предупреждение. Оператор ENTRY среди операторов спецификации.

082

Duplicate aligning of the array 'identifier'
Повторное выравнивание указанного массива.

083

POINTER 'identifier' is not integer variable
Идентификатор с атрибутом POINTER должен иметь тип INTEGER.

084

POINTER may not have SAVE attribute: identifier
Идентификатор с атрибутом POINTER не может иметь атрибут SAVE.

085

POINTER 'identifier' is not distributed object
Идентификатор с атрибутом POINTER должен иметь атрибут DISTRIBUTE или ALIGN.

086

Object 'identifier' has neither TEMPLATE nor PROCESSORS attribute
В объединенной директиве спецификации с атрибутом DIMENSION может быть описан только объект TEMPLATE или PROCESSORS.

087

Illegal shape specification in DIMENSION attribute
В объединенной директиве спецификации с атрибутом DIMENSION встретился недопустимый описатель массива.

088

Length of shadow-edge-list is not equal to the rank of array 'identifier'
Число указанных теневых граней не равно числу измерений массива.

089

attribute  attribute appears more than once in the combined-directive
Указанный атрибут упоминается более одного раза в объединенной директиве спецификации.

090

The number of BLOCK/GENBLOCK elements of dist-format-list is greater than the rank of PROCESSORS 'identifier'
Количество форматов BLOCK и GENBLOCK не равно количеству измерений массива процессоров.

091

Missing HEAP declaration
Отсутствует описание пула динамической памяти HEAP.

092

Alignment tree root 'identifier' is not distributed
Корень дерева выравнивний массива не имеет атрибута DISTRIBUTE.

093

PAUSE statement is not permitted in FDVM
Оператор PAUSE запрещен в FDVM

094

Illegal statement in the range of parallel loop
Недопустимый оператор в теле параллельного цикла.

095

Only a value of ALLOCATE function or other POINTER may be assigned to a POINTER
Переменной POINTER можно присвоить только значение другой переменной POINTER или значение функции ALLOCATE.

096

Nested PARALLEL directives are not permitted
Вложенные параллельные циклы не допускаются.

097

PARALLEL directive must be followed by DO statement
Директива PARALLEL должна предшествовать оператору DO.

098

The directive is inside the range of PARALLEL loop
В теле параллельного цикла не должно быть директив FDVM.

099

Misplaced REMOTE_ACCESS directive
Директива REMOTE_ACCESS находится не на своем месте.

100

Nested TASK_REGION are not permitted
Запрещена вложенность конструкций TASK_REGION.

101

Statement is outside of on-block
Оператор внутри TASK_REGION не входит ни в один ON–блок.

102

No matching TASK_REGION
Для директивы END TASK_REGION нет соответствующей директивы TASK_REGION.

103

Misplaced directive
Директива не на своем месте. Область задач или ON –блок не является блоком операторов.

104

Nested ON-blocks are not permitted
Запрещена вложенность ON –блоков.

105

ON directive is outside of the task region
Директива ON вне области задач.

106

No matching ON directive
Для директивы END ON нет соответствующей директивы ON.

107

Parallel-task-loop directive is outside of the task region
Параллельный цикл задач вне области задач.

108

Missing END TASK_REGION directive
Нет завершающего оператора для конструкции TASK_REGION.

109

Missing END ON directive
Нет завершающего оператора для ON-блока.

110

Rank of  array identifier  is not equal to the length of the dist‑format-list
Число измерений массива не равно числу указанных форматов.

111

Saved object may not have the DYNAMIC attribute: identifier
Массив имеет несовместимые атрибуты DYNAMIC и SAVE.

112

Object in COMMON  may not have the DYNAMIC attribute: identifier
Массив имеет несовместимые атрибуты DYNAMIC и COMMON.

113

'identifier' hasn't the DYNAMIC attribute
Массив должен иметь атрибут DYNAMIC.

114

'identifier' does not appear in DISTRIBUTE/INHERIT directive
Массив должен иметь атрибут DISTRIBUTE или INHERIT.

116

Template 'identifier' appears as an alignee
Шаблон не может иметь атрибут ALIGN.

117

Dummy argument 'identifier' is aligned with local array
Формальный аргумент не может быть выровнен на локальный массив.

118

Aligned array 'identifier' is in COMMON but align-target is not
Массив с атрибутом COMMON может быть выровнен только на массив с атрибутом COMMON.

119

Aligned array 'identifier' has SAVE attribute but align-target has not
Массив с атрибутом SAVE может быть выровнен только на массив с атрибутом SAVE.

120

'identifier' does not appear in ALIGN and INHERIT directive
Массив должен иметь атрибут ALIGN или INHERIT.

121

'identifier' is a duplicate dummy argument
Одинаковые формальные аргументы в заголовке подпрограммы (функции).

122

Descriptor array error
Неверно задан аргумент функции ALLOCATE – дескриптор динамического массива.

123

Rank of pointer identifier  is not equal to the length of the dist‑format-list
Количество измерений динамического массива не совпадает с количеством заданных форматов.

124

Array 'identifier' may not be allocated
Указанный динамический массив не может быть размещен.

125

Array 'identifier'  may not be aligned
Указанный массив не может быть выровнен.

126

Illegal aligning of 'identifier'
Неправильное задание выравниваний массивов (циклическая цепочка выравниваний).

127

Distributed object 'identifier' is not array
Атрибут DISTRIBUTE, ALIGN или INHERIT может иметь только массив.

128

Rank of aligned array  identifier isn't equal to the length of align-source-list
Длина списка идентификаторов измерений в директиве ALIGN/REALIGN не совпадает с числом измерений указанного массива.

129

GEN_BLOCK and WGT_BLOCK in format-list
В списке форматов директивы DISTRIBUTE/REDISTRIBUTE указан и формат GEN_BLOCK, и формат WGT_BLOCK.

130

Wrong align-subscript expression
Нелинейное выражение выравнивания. Выражения выравнивания, операндом которого является идентификатор измерения I, должно иметь вид:  a*I + b, где  a, b – константа, переменная или выражение, заключенное в скобки.

132

Rank of align-target 'identifier' isn't equal to the length of align-subscript-list
Число индексов базы выравнивания не равно числу измерений по описанию.

133

More one occurenсe of do-variable 'identifier' in iteration-align-subscript-list
Повторное использование указанной переменной цикла в списке индексов базы выравнивания в директиве PARALLEL.

134

More one occurence of align-dummy 'identifierin align subscript list
Повторное использование указанного идентификатора измерения в списке индексов базы выравнивания.

135

More one occurence of a do-variable in do-variable-use expression
Повторное использование указанной переменной цикла в выражении выравнивания.

136

More one occurence of an align-dummy in align-subscript expression
Повторное использование указанного идентификатора измерения в выражении выравнивания.

137

Illegal group name use: 'identifier'
Недопустимое использование идентификатора группы.

138

Illegal POINTER reference: 'identifier'
Недопустимое использование переменной с атрибутом POINTER.

139

Owner-computes rule
Предупреждение. Оператор выполняется по правилу собственных вычислений.

140

Wrong number of subscripts specified for identifier
Число индексов не равно числу измерений массива по описанию.

141

Illegal type of 'identifier'
В данном контексте требуется идентификатор определенного типа.

142

Low shadow width of  'identifier' is greater than the corresponding one specified in SHADOW directive
Размер левой теневой грани больше чем в директиве SHADOW.

143

High shadow width of  'identifier' is greater than the corresponding one specified in SHADOW directive
Размер правой теневой грани больше чем в директиве SHADOW.

144

Low shadow width of  'identifier' is greater than 1
Размер левой теневой грани больше 1.

145

High shadow width of 'identifier' is greater than 1
Размер правой теневой грани больше 1.

146

NEW_VALUE directive must be followed by REDISTRIBUTE or REALIGN directive
Директива NEW_VALUE должна предшествовать директиве REDISTRIBUTE или REALIGN.

147

Illegal operand list of MAXLOC/MINLOC
Неверный список операндов редукционной операции MAXLOC/MINLOC.

148

'identifier' is distributed array
Не допускается использование массива с атрибутом DISTRIBUTE, ALIGN или INHERIT.

149

Wrong operand of MAXLOC/MINLOC: identifier
Второй операнд редукционной операции MAXLOC/MINLOC должен быть одномерным массивом или скалярной переменной целого типа.

150

Ilegal clause
В параллельном цикле задач допускается только спецификация NEW.

151

Wrong reduction variable 'identifier'
В качестве редукционной переменной можно использовать только одномерный массив или скалярную переменную.

152

Wrong type of reduction variable 'identifier'
Неверный тип редукционной переменной.

153

Double NEW clause
Повторная спецификация NEW.

154

Double REDUCTION clause
Повторная спецификация REDUCTION.

155

Double SHADOW_RENEW clause
Повторная спецификация SHADOW_RENEW.

156

Double REMOTE_ACCESS clause
Повторная спецификация REMOTE_ACCESS.

157

Double ACROSS clause
Повторная спецификация ACROSS.

158

Length of do-variable list in PARALLEL directive is greater than the number of nested DO statements
Количество переменных цикла, указанных в директиве PARALLEL, превышает количество операторов DO тесно-гнездового цикла.

159

Illegal do-variable-list in PARALLEL directive
Переменные цикла, указанные в директиве PARALLEL, не соответствуют переменным тесно-гнездового цикла.

160

Wrong iteration-align-subscript in PARALLEL
Нелинейное выражение выравнивания в директиве PARALLEL. Выражения выравнивания, операндом которого является переменная цикла I, должно иметь вид:  a*I + b, где  a, b – константа, переменная или выражение, заключенное в скобки.

161

Rank of array 'identifier' isn't equal to the length of iteration-align-subscript-list
Число индексов базы выравнивания в директиве PARALLEL не равно числу измерений массива по описанию.

162

Assumed-size array: identifier
Формальный аргумент – массив неопределенного размера не может использоваться ни как элемент ввода-вывода, ни как удаленная переменная в директиве REMOTE_ACCESS. В этих случаях размер массива должен быть известен.

163

Reverse is not supported
Выравнивание по убыванию индексов (реверс) запрещено.

164

Wrong regular subscript expression
Не регулярное индексное выражение в директиве REMOTE_ACCESS.

165

Length of remote-subscript-list is not equal to the rank of remote variable
Число индексов удаленной ссылки не соответствует числу измерений массива.

166

HEAP limit is exceeded
Неверная работа с указателями динамических массивов. Сообщение выдается во время выполнения программы.

167

Illegal template reference: 'identifier'
Идентификатор с атрибутом TEMPLATE может использоваться только в директивах ALIGN, REALIGN и PARALLEL.

168

Illegal variable in new-clause: identifier
Указанная переменная не может быть указана в спецификации NEW.

169

ENTRY of program unit distributed arrays are in
Предупреждение. Оператор ENTRY в процедуре, где используются распределенные массивы.

170

Name 'identifier' too long, truncated to 29
Предупреждение. Слишком длинное имя укорачивается до 29 символов.

171

No subscripts: identifier
В ссылке на массив отсутствуют индексы.

172

POINTER 'identifier' in left part of assign statement has DISTRIBUTE or ALIGN attribute
Указатель на массив в левой части оператора присваивания не должен иметь атрибутов DISTRIBUTE и ALIGN.

173

Pointers are of different rank
Указатели на массивы с разным числом измерений.

174

Pointers are of different type
Указатели на массивы с разным типом данных.

175

Wrong number of subscripts specified for 'identifier'
Указано неверное число индексов в ссылке на элемент массива.

176

'identifier' hasn't PROCESSORS/TASK attribute
Идентификатор должен иметь атрибут PROCESSORS или TASK.

177

Associated actual arguments must be aligned
Предупреждение. Фактические аргументы должны быть выровнены.

178

Illegal type of do-variable 'identifier'
Недопустимый тип переменной цикла.

179

Wrong dependence length of distributed array 'identifier'
Длина зависимости, заданная в спецификации ACROSS для указанного массива, не является целой константой.

180

Wrong dependence length list of distributed array 'identifier'
Число длин зависимостей, заданных в спецификации ACROSS для указанного массива, не совпадает с числом его измерений.

181

Illegal fragment number
Номер фрагмента в директиве DEBUG/ENDDEBUG должен быть целой константой без знака.

182

Unmatched directive
Для директивы END DEBUG не обнаружено соответствующей директивы DEBUG.

183

Buffer limit is exceeded
Количество удаленных ссылок (буферов) для одного массива не может быть больше 5.

184

Illegal I/O statement in the range of parallel loop
Недопустимый оператор ввода-вывода в теле параллельного цикла.

185

Illegal elements in control list
Неверные элементы в списке управляющей информации оператора ввода-вывода.

186

END= and ERR= specifiers are illegal in FDVM
Спецификаторы END= and ERR= запрещены в FDVM

187

IOSTAT= specifier is illegal in I/O of distributed array
Использование спецификатора IOSTAT= при вводе-выводе распределенного массива запрещено.

189

Invalid format specification
Указано неверное значение спецификатора FMT = .

190

Illegal I/O list
Недопустимый список ввода-вывода. FDVM накладывает ограничения на ввод-вывод распределенных массивов. Либо список ввода-вывода состоит из одного идентификатора распределенного массива, либо он не включает ссылок на распределенные массивы.

191

I/O of distributed array controlled by format specification or NAMELIST is not supported in FDVM
Для ввода-вывода распределенного массива по формату допускается только формат, заданный «*».

192

Illegal I/O list item: identifier
В списке ввода-вывода – ссылка на элемент распределенного массива. В FDVM разрешается вводить-выводить распределенный массив только целиком.

193

Array shape declaration error: identifier
Ошибка в описании измерений массивов.

194

Can't calculate array length: identifier
Неизвестен размер массива.

195

Cant find the corresponding MAP directive
Не обнаружено соответствующей директивы MAP.

196

Incorrect call of ALLOCATE function
Неверный список аргументов при вызове функции ALLOCATE.

197

Cant use pointers in HPF1
FDVM-программа, которая содержит POINTER переменные, не  конвертируется в HPF1.

222

Cant find a descriptor for POINTER
Отсутствует описание дескриптора динамического массива.

250

Illegal nesting INDEPENDENT directive
Вложенные  циклы INDEPENDENT не удовлетворяют условию тесно-гнездового цикла

251

More one occurrеnce of do-variable 'identifier' in subscript list
Повторное использование указанной переменной цикла в списке индексов переменной в левой части оператора присваивания, расположенного в теле цикла INDEPENDENT.

252

More one occurrеnce of a do-variable in subscript expression
Повторное использование переменной цикла в индексном выражении переменной в левой части оператора присваивания, расположенного в теле цикла INDEPENDENT.

254

No target for independent loop
Не найдена база выравнивания для цикла INDEPENDENT.

255

Reduction statement inside the range of INDEPENDENT loop, 'identifier' is reduction variable
Обнаружен редукционный оператор в теле цикла INDEPENDENT.

262

Wrong argument list of ALLOCATE function call
Неверный список фактических аргументов при вызове функции ALLOCATE

263

Shape specification is not permitted
Не разрешена спецификация конфигурации массива

264

Illegal array in SHADOW_COMPUTE clause: identifier
Недопустимое использование массива с именем identifier в спецификации SHADOW_COMPUTE 

288

Non-logical expression in FORALL statement
Требуется логическое выражение в операторе FORALL

292

Rank of array 'identifier' is not equal the length of
allocation-specification-list

Число индексов массива в операторе ALLOCATE не равно рангу массива по описанию.

293

No allocaton specifications for  identifier
Отсутствует спецификация размера для динамически размещаемого массива в операторе ALLOCATE

294

Can't calulate structure sizeidentifier
Размер структуры (объем памяти) не может быть определен на этапе компиляции.

295

Assumed-shape or deffered-shape array:  identifier
Число элементов массива неизвестно на этапе компиляции.

296

Double CONSISTENT clause
Повторная спецификация CONSISTENT

297

Both arrays are not distributed
В операторе копирования массивов один из массивов должен быть распределенным.

298

Double STAGE clause
Повторная спецификация STAGE

299

PARALLEL loop is not one-dimensional loop
Параллельный цикл со спецификацией INDIRECT_ACCESS должен быть одномерным.

300

Invalid source file identifier
Неверно задано имя входного файла.

301

Double INDIRECT_ACCESS clause
Повторная спецификация INDIRECT_ACCESS

302

Length of indirect-subscript-list is not equal to the rank of
remote variable
Число индексов в ссылке INDIRECT_ACCESS не равно рангу удаленной переменной по описанию.

303

Illegal debug parameter
Неверное задание уровня отладки в директиве DEBUG.

304

Internal procedures cannot contain procedures
Внутренняя процедура не может включать в себя другие процедуры.

308

Unknown module identifier
Предупреждение. Неизвестное имя модуля.

309

Unknown identifier identifier
Неизвестный идентификатор в конструкции POINT TO оператора USE

311

Can't take component of identifier
Отсутствует компонента структуры с указанным именем.

312

Illegal distributee: identifier
Объект данных не может использоваться в качестве распределяемого объекта в директиве DISTRIBUTE

318

Inconsistent struct declaration of identifier %s
Идентификатор структуры уже описан другим способом

319

Undefined type identifier
Отсутствует объявление производного типа с указанным идентификатором.

330

No blank after label
Отсутствует пробел после метки.

331

Inconsistent module declaration identifier
Идентификатор модуля уже описан другим способом.

334

Output file has the same name as source file
Имя выходного файла совпадает с именем входного.

335

Illegal distributed array reference: identifier
Секция распределенного массива или распределенный массив целиком используется в выражении над массивами.

336

DISTRIBUTE or ALIGN attribute of component name dictates POINTER attribute

Если компонент производного типа не является указателем на массив, он не может иметь ни атрибут DISTRIBUTE, ни атрибут ALIGN.

337

Only a distribute-directive of kind DISTRIBUTE:: is permitted in a derived type definition

Для описания компонентов производного типа можно использовать только директиву DISTRIBUTE вида:

DISTRIBUTE:: список-идентификаторов

338

Only a ALIGN-directive of kind ALIGN:: is permitted in a derived type definition

Для описания компонентов производного типа можно использовать только директиву ALIGN вида:

ALIGN:: список-идентификаторов