首页 > 解决方案 > 如何定义具有有限续行的大尺寸数组参数?

问题描述

我有一个大型整数参数数组(6024 个三元组,在 3x6024 数组中总共有 ~9000 个元素)放置在一个模块中作为其他函数的数据。参数定义:

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/) )

其中ajbjcj是任意整数常量。

为了可读性,我更喜欢这种格式(使用连续行将三元组保持在一起),但对于长数组,它引入了太多的连续行以符合标准 Fortran(Fortran 2003 和更高版本允许多达 255 个连续行)。这些参数不可预测地分布,因此定义的隐含循环不是一种选择。

我可以在一行中放置更多的三元组,但 4 字节整数每个占用 12 个字符(10 个数字、符号、逗号),延续&在符合标准的自由格式行(132 个字符)上为 10 个整数留出空间. 在 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

标签: arraysfortranfortran2008

解决方案


推荐阅读