Как определить параметры массива большого размера с ограниченными строками продолжения?

У меня есть большой массив целочисленных параметров (6024 триплета, всего около 9000 элементов в массиве 3x6024) для размещения в модуле в качестве данных для других функций. Параметр определяется:

Integer, Parameter :: nj = 6024
Integer, Parameter :: abc(1:3,1:nj) = &
    & RESHAPE( (/ a1 , b1 , c1, &  !j = 1
                & a2 , b2 , c2, &  !j = 2
                !... like 6000 more lines ...
                & aj , bj , cj  /), &  !j = nj
                & SHAPE=(/3,nj/),ORDER=(/2,1/) )

Где aj, bj и cj — произвольные целочисленные константы.

Я предпочитаю такое форматирование (с использованием строк продолжения для объединения триплетов) для удобочитаемости, но для длинного массива оно вводит слишком много строк продолжения, чтобы соответствовать стандарту Фортрана (Fortran 2003 и новее допускают до 255 строк продолжения). Эти параметры не распределяются предсказуемым образом, поэтому неявный цикл для определения невозможен.

Я мог бы поместить больше троек в строку, но 4-байтовые целые числа занимают по 12 символов каждое (10 цифр, знак, запятая), а продолжение & оставляет место для 10 целых чисел в стандартной строке произвольной формы (132 символа). ). В 255 строках продолжения это устанавливает практический предел в ~2550 элементов (этого типа), которые могут быть перечислены для определения параметра массива.

Есть ли способ сделать определение этого параметра в коде, совместимом со стандартом Fortran 2008? Можно ли определить массив параметров в сегментах? например

Integer, Parameter :: nj = 6024
Integer, Parameter :: abc(1:3,1:nj)
Integer, Parameter :: abc(:,1)  = (/ a1 , b1 , c1 /) !j = 1
Integer, Parameter :: abc(:,2)  = (/ a2 , b2 , c2 /) !j = 2
                                  !... like 6000 more lines ...
Integer, Parameter :: abc(:,nj) = (/ aj , bj , cj /) !j = nj

person whit    schedule 20.07.2018    source источник
comment
Я просмотрел оба потенциально идентифицированных дубликата, и я не совсем удовлетворен. Предлагаемые ответы довольно специфичны для каждого случая. Меня больше интересует подход для произвольно длинного параметра произвольной формы.   -  person whit    schedule 20.07.2018
comment
Если вы можете объяснить (в своем вопросе), почему, например, собрать его в исходные управляемые куски - возможно, столбец за столбцом. не совсем соответствует вашим потребностям, то это поможет нам предложить альтернативный подход/повторно открыть этот.   -  person francescalus    schedule 20.07.2018
comment
Reshape принимает массив в качестве аргумента, и вы можете создать массив, комбинируя другие массивы, например arr = [arr1, arr2, arr3]. Вы связываете массив с каждой строкой измерений. Кроме того, оператор данных может определять массив фрагментами. Вы могли бы даже иметь отдельный файл данных только для этого.   -  person Rodrigo Rodrigues    schedule 20.07.2018
comment
Есть ли причина не читать его из файла? Лично я думаю, что это будет намного читабельнее, чем оператор параметра длиной в 6000 строк. Вставьте его в модуль с процедурой инициализации, добавьте защищенный атрибут для безопасности, и вы должны быть отсортированы.   -  person Ian Bush    schedule 22.07.2018