【发布时间】:2023-02-03 15:45:19
【问题描述】:
我的一部分代码在正在考虑的模块中定义了常量。这就是我所说的:
real(RealExt), parameter :: grav_acc = 9.80665
real(RealExt), parameter :: r_gas_dry = 287.026
real(RealExt), parameter :: cp_air_dry = 1.005e+03
real(RealExt), parameter :: pi = 4.0*atan(1.0)
real(RealExt), parameter :: seconds_per_day = 8.6400e+04
我基本上是在尝试包装这个 fortran 代码,并使用 cffi 将它与 python 连接起来,这样当我在 python 中提供输入时,fortran 代码会接收它并根据需要执行操作。对我来说问题不在于 cffi,而在于参数的概念。
RealExt 类型定义如下:
INTEGER, PARAMETER :: RealExt=SELECTED_REAL_KIND(15, 307)
这些常量在一个子程序中;我的目标是将这些常量的值(如重力、行星的旋转速率等)发送到该子例程,并将它们作为稍后计算的常量处理。但是,据我在此站点上阅读的内容,参数属性需要在运行时知道这些值。所以,我不能只是做
subroutine runes(g, rd, cp_rd, sec_per_day)
implicit none
real(RealExt), intent(in) :: g, rd, cp_rd, pi_, sec_per_day
real(RealExt), parameter :: grav_acc = g
real(RealExt), parameter :: r_gas_dry = rd
real(RealExt), parameter :: cp_air_dry = cp_rd
real(RealExt), parameter :: pi = pi_
real(RealExt), parameter :: seconds_per_day = sec_per_day
.
.
.
有解决方法吗?我能以某种方式将传递给子例程的值声明为常量吗?
P.S:如果我需要澄清我的一些疑问,如果不够清楚,请告诉我。
【问题讨论】:
标签: parameters fortran cffi