【问题标题】:Neat way to define a long parameter vector in fortran在 fortran 中定义长参数向量的巧妙方法
【发布时间】:2014-11-06 20:16:56
【问题描述】:

好吧,我现在遇到了这个问题。我有一组(大量)参数,我想将它们组织成一个向量。

当然,我可以这样做:

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 定义长向量?
  • (我想它不是)一旦我定义了变量的值,有没有办法改变它的属性?

感谢您的宝贵时间。

【问题讨论】:

  • 如果您有一些可以通过循环计算的常数,您可能会考虑使用隐式循环,例如 CONST = [ (i,i=1,64) ]...
  • 好主意,但它们是一些生理参数,甚至无法通过循环计算。
  • 顺便说一句:您可以定义依赖于其他常量的常量!
  • 你可以在续行后面写评论...1.5412356 , & ! This constant is very important.
  • @AlexanderVogt - 是的,但这并不取决于它本身。 Alfonso:您可以先定义“基本”参数,然后定义完整数组,两者都作为参数。

标签: variables vector fortran definition


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 2016-04-19
    • 2014-02-24
    • 1970-01-01
    • 2017-01-07
    • 2021-03-05
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多