在fortran中定义长参数向量的简洁方法

时间:2014-09-12 15:35:18

标签: variables vector fortran definition

嗯,我现在遇到了这个问题。我有一组(巨大的)参数,我想在矢量中组织。

当然,我可以这样做:

real, dimension(64)          :: CONST

CONST(1) = 2.4
CONST(2) = 1.4
...
CONST(n) = CONST(1)*CONST(14)**CONST(7)
...
CONST(64) = ABS(CONST(18))

(注意,一些常量与其他常量有关)。

但在这种情况下,我不会在变量中拥有parameter属性,我想拥有。

我能想到的另一个选择是使用属性parameter,在这种情况下,我可以在变量定义期间将值赋给向量。类似的东西:

real, parameter, dimension(64) :: CONST =[2.4 , 1.4       , &
                                                ...       , &
                                                1.5412356 , &
                                                ...       , &
                                                342.5]

但是,与一些巨大的同行:

  • 由于在变量定义期间存在大量行,因此代码变得难以阅读。
  • 我无法将常量定义为其他常量的函数。

所以,

  • 在Fortran中使用属性parameter定义长向量有一种巧妙的方法(如在第一个代码中那样)
  • (我认为不是这样)有一种方法可以在我定义变量后更改变量的属性吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:7)

参数的问题仅在于您无法定义依赖于自身的常量数组。但您可以定义基本数量,然后定义整个数组,包括派生数量,如下所示:

program foo
implicit none

real, dimension(2), parameter :: basic = [2.4, 1.4]
real, dimension(4), parameter :: all = [basic(1), basic(2),           &   
                                        basic(1)*basic(2)**basic(1),  &
                                        abs(basic(1))]

print *, basic
print *, all

end program foo

事实上,如果你想这样做,你也可以命名基本数量:

program foo
implicit none

real, parameter :: height = 2.4, bodymass = 1.4
real, dimension(4), parameter :: all = [height, bodymass,     &   
                                        height*bodymass**2,  &
                                        abs(height)]

print *, height, bodymass
print *, all

end program foo

我无法想象高度是你需要取绝对值的那种东西,但你明白我的观点。