派生类型声明中的错误:此上下文中 (1) 处的变量必须是常量

2023-12-01

我在模块中声明了一个派生类型,如下所示:

MODULE dmotifs
TYPE :: PRM
    INTEGER, PRIVATE :: nsp=4,nrx=8,maxprx=4
    REAL, PRIVATE :: cref=1e-6,tref=1
    REAL, DIMENSION(nrx,maxprx) :: k
    REAL :: input
END TYPE PRM

CONTAINS

SUBROUTINE unreg(y,param,r,s)

    TYPE(PRM), INTENT(IN) :: param
    REAL, DIMENSION(param%nsp), INTENT(IN) :: y
    INTEGER, DIMENSION(param%nsp,param%nrx), INTENT(OUT) :: s=0
    REAL, DIMENSION(param%nrx,1), INTENT(OUT) :: r=0
    REAL :: mOut, mCtrl, pOut, pCtrl
    mOut=y(ind_mOut)
    mCtrl=y(ind_mCtrl) 
    pOut=y(ind_pOut)
    pCtrl=y(ind_pCtrl)

    ! <some operations on "r" and "s">
    RETURN 

END SUBROUTINE unreg
END MODULE dmotifs

编译时我收到此错误:

Error: Variable 'nrx' at (1) in this context must be constant

“必须是常数”是什么意思?它在编译期间应该是不可变的,即像参数一样吗?

但还有另一个问题,我无法在派生类型中声明参数。如何处理这个错误?将这些对象从派生类型中移出并使它们成为参数是唯一的选择吗?

最重要的是我想了解为什么会发生这种情况。

我正在使用 gfortran 进行编译:gfortran -Wall -c "dmotifs.f90"


是的。在非参数化派生类型中声明显式形状数组需要常量表达式。你可以

  • make k allocatable,dimension(:,:)(和(取消)分配),或
  • make nrx and maxprx全局/模块常量(或立即替换它们)。

If your 编译器支持它, 您可以使用参数化派生类型:

  type :: PRM(nrx,maxprx)  ! parameterized derived type definition
    integer, len :: nrx
    integer, len :: maxprx
    real         :: k(nrx,maxprx) 
    ! ...
  end type PRM

(取自并调整自here.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

派生类型声明中的错误:此上下文中 (1) 处的变量必须是常量 的相关文章

  • 提高由整数商定义的变量的精度

    假设我有以下程序 program derp implicit none integer parameter ikind selected real kind 18 real kind ikind a 2 0 3 0 print a end
  • Fortran 中指数函数的 DEXP 或 EXP?

    我有两个非常简短的问题 1 我刚刚读到DEXP is the archaic的形式EXP 这是否意味着不应再使用它 我一直以为DEXP 双精度等于EXP 2 指数函数的范围是多少 它依赖于编译器吗 问题 1 在现代 Fortran 中 最好
  • 使用 Visual Studio 2013 和 Intel Fortran 编译混合 C++/C 代码

    我正在尝试编译一个简单的 C Fortran 混合程序 但存在链接问题 我使用的是Visual Studio 2013 Ultimate和Intel Visual Fortran Compiler XE 14 该程序非常简单 是从网上的某个
  • 使用 Fortran (CLFORTRAN) 在 OpenCL 中将两个选项作为参数传递

    当我的主机程序采用 C 语言时 我可以传递两个选项作为 OpenCL 函数的参数 例如 我可以通过两个 标志到clCreateBuffer像这样的函数 clCreateBuffer context CL MEM READ ONLY CL M
  • Fortran 读取混合文本和数字

    我正在使用 Fortran 90 读取包含以下格式数据的文件 number 125 var1 2 var2 1 var3 4 number 234 var1 3 var2 5 var3 1 我尝试了以下命令并且工作正常 read 2 tem
  • 编译错误:无法打开模块文件

    我有这个代码 PROGRAM xfit driver for routine fit USE nrtype USE nrutil USE nr USE ran state ONLY ran seed IMPLICIT NONE INTEGE
  • 从 Fortran 字符串中提取单个字符

    我需要一个程序将基数 a 转换为基数 b 其中基数 a 和 b 可以是从 2 到 36 我的想法是使用字符串作为数字 作为中介转换为基数 10 然后从基数 10 转换为基数 b 由于我是 Fortran 新手 我不太理解函数和子字符串 现在
  • FORTRAN 写()

    在开始之前 我必须先声明一下 我是 FORTRAN 的新手 我正在维护 1978 年的一段遗留代码 它的目的是从文件中读取一些数据值 处理这些值 然后将处理后的值输出到另一个文本文件 给出以下 FORTRAN 代码 INTEGER NM S
  • 如何调用模块中子程序内部的函数?

    我有一个包含子例程的模块 该子例程又包含一个函数 我说use themodule在我的主程序中 我可以call thesubroutine 但是如何访问子例程中包含的函数呢 代码如下所示 module useful integer para
  • 如何将mortran代码转换为fortran代码

    我有一些 Mortran 代码 来自 glmnet 我想阅读和编译 我知道在编译时 Mortran首先转换为Fortran 然后编译 如果有预处理器的话 如何安装 Mortran 预处理器 特别是 OS X 上的 Mortran3 我在以下
  • 有没有一种简单的方法来准备 Fortran 代码以进行并行调用

    我想使用 OpenMP 在 C 程序中并行求解多个大型 ODE 系统 由于某些原因 我需要使用 ODE 求解器 但我只能找到 Fortran 90 子例程 而且代码太大 无法简单地将其转换为 C 我知道 Fortran 广泛使用静态内存 因
  • gfortran 支持尾调用消除吗?

    我编写了这个小程序来测试 gfortran 是否执行尾调用消除 program tailrec implicit none print tailrecsum 5 0 contains recursive function tailrecsu
  • 如何格式化整数以仅具有所需的大小?

    我一直在尝试以下代码 program hello write i9 10 end program hello 并改变格式字符串 尝试使写入输出的字符串大小恰好满足表示整数所需的大小 但到目前为止我无法管理它 如何在 Fortran 中编写
  • forrt1:严重(170):程序异常 - 堆栈溢出

    并提前感谢您的帮助 我已经编译了一个程序 不是我编写的 它在 Mac 上运行得很好 但是当我尝试在 Windows 上执行该程序时 在程序开始执行后不久 我收到以下错误消息 forrt1 严重 170 程序异常 堆栈溢出 我不是 ifort
  • 指针的 Fortran 副本

    我有一个包含指针 p 的 var 类型 我需要将 var 复制到与 var 类型相同的另一个变量 var1 上 通过执行 var1 var 在引号中 因为我不知道这是否是正确的方法 请参见下文 在我的实现中 var 和 var1 被传递给一
  • MPI_Gather 在最基本的代码中给出了 seg 错误

    我正在开发一个更大的程序 但我在 MPI Gather 上遇到了困难 我编写了一个最小的示例代码 请参见下文 program test use MPI integer ierr rank size double precision allo
  • Fortran :: (1) 处 OPEN 语句中存在语法错误

    我试图通过 顽固测试 来测试我的密码算法 http stat fsu edu pub diehard http stat fsu edu pub diehard 我意识到我的输入文件必须是未格式化的直接访问文件 所以我尝试用 Fortran
  • 如何在fortran 90中生成[0,5]范围内的整数随机数?

    我对 Fortran 编程有点陌生 任何人都可以帮我解决问题吗 我在生成整数随机数时遇到问题 在 Fortran 随机数范围 0 5 中使用 random seed 和 rand 为了支持answer https stackoverflow
  • 分发编译后的 fortran 库和模块文件

    我有一个Fortran使用很多模块的库 我用ifortWindows 上的编译器 因此 我得到一个 lib图书馆的文件和 mod所用模块的文件 这有一个缺点 我还必须分发 mod文件 如果我想在另一个程序中使用编译的库 如何防止这种情况发生
  • FORTRAN:数据多态

    我试图隐藏真实数据类型和复杂数据类型之间的差异 在 FORTRAN 2003 中 我认为可能有一种方法可以做到这一点 目标是定义一个多态可分配数组 其类型可以在运行时决定 另外 还有一个子例程 它使用多态数组来做一些代数 相同的方程适用于真

随机推荐

  • swagger ui 中的隐藏字段

    我正在使用 swagger UI 2 0 23 版本 并使用 json 文件提供 api 我需要使用 swagger ui 将特定标头值发送到我的 api 但该字段不应在 ui 中可见 因为该值不应该被更改 因此 如何隐藏该字段以使其不显示
  • 正则表达式 - 在每个单词之前/之后添加一个字符

    Using 记事本 and replace函数 我尝试添加一个符号 or 在我列表中的每个单词之前 列表示例 blue car 红色汽车大 红色小车 绿色汽车大 绿色小车 我正在寻找以下结果 蓝色 汽车 红色 汽车 小 红色 汽车 大 et
  • PHP 的 MCRYPT_RIJNDAEL_256 CBC 的 Python 等效项

    我需要这个函数的 Python 实现 我想在 appengine 上使用它 我不太擅长Python 所以请帮忙 function encrypt data return base64 encode mcrypt encrypt MCRYPT
  • 如何通过改变CSS来实现这样的滚动div?

    This site左侧有一个滚动 div 当您滚动页面时 div 也会有节奏地滚动 并且图像的颜色也会发生变化 position fixed还不是全部都能做到 那什么是技术呢 EDIT position fixed我可以用它来将 div 固
  • 为什么 Spring Security 中永远不会触发事件 AbstractAuthenticationFailureEvent ?

    我使用 spring 4 0 2 RELEASE 和 spring security 3 2 5 RELEASE 我使用它是因为当我开始我的项目 spring security 4 0 0 时它位于快照中 我尝试过 spring 4 2 0
  • 如何按空格分割字符串

    我需要用空格分割字符串 为此我尝试过 str Hello I m your String String splited str split 但这似乎不起作用 你所拥有的应该有效 但是 如果提供的空间默认为 其他内容 您可以使用空白正则表达式
  • R:4D 绘图、x、y、z、颜色

    你能给我一个关于如何使用 rgl 在 x y 和 z 轴上绘制 3 个变量以及使用不同颜色绘制第四个变量的示例吗 thanks 您使用以下组合persp和颜色根据单独的功能 这是一些示例代码 Create a simple surface
  • Java 桌面应用程序的内存分析

    我的应用程序加载了大约的数据集 每次 85bm 至 100mb 应用程序的内存限制设置为 512mb 理论上来说 这已经足够了 然而 我发现 如果在应用程序的单次运行中 我打开和关闭数据集 5 次 总内存消耗会稳步增加 直到出现内存不足错误
  • 保存登录详细信息(首选项)android

    我有一个带有登录 注销功能的Android应用程序 登录表单包含用户名和密码以及登录按钮 我想在用户选中 记住我 复选框时保存用户名和密码 我的project java文件如下所示 public class project extends
  • REACT- DOM 突变警告含义

    违规 向 DOMNodeInserted 事件添加了同步 DOM 突变侦听器 考虑使用 MutationObserver 来使页面响应更快 关于此警告还有另一个问题 我已经在那里回答了解决该问题的方法 这不是这个问题的原因 对于那些想知道的
  • 如何与我的应用程序共享选定的文本?

    我想让我的应用程序出现在 UIActivityViewController 中以进行文本共享 例如邮件 iMessage Notes Gmail 等 例如 当用户点击所选文本并从任何应用程序中点击 共享 按钮 如附件中所示 时 我希望我的应
  • 占位符混合 SCSS/CSS

    我正在尝试为 sass 中的占位符创建一个混合 这是我创建的 mixin mixin placeholder css webkit input placeholder css moz placeholder css moz placehol
  • REGEX 查找特定子字符串(如果不是单词的一部分)

    我在简化我创建的正则表达式时遇到了麻烦 sept a zA Z sept a zA Z a zA Z sept sept a zA Z 该正则表达式必须找到子字符串sept 这不是任何单词的一部分 例如 september 当应该找到单词时
  • 如何在 Python 中将数组数组转换为多维数组?

    我有一个 NumPy 数组 长度为 X 所有数组都具有相同的长度 Y 但其类型为 对象 因此具有维度 X 我想将其 转换 为具有成员数组元素类型 float 的维度 X Y 数组 我能看到做到这一点的唯一方法是 手动 使用类似的东西 x f
  • 气氛/泽西岛双向对话

    我见过许多 Atmosphere 示例 包括 pub sub 我想做类似 pub sub 的事情 客户端订阅该客户端唯一的通道 服务器定期发布到该通道 只不过客户端也会将数据发送到服务器 客户端将发送数据以响应服务器发送的数据 以及在其他情
  • 如何以编程方式从 Android 中的 .vcf 文件导入或插入联系人?

    我创造 vcf使用以下代码保存 Android 中所有联系人的文件 public static void getVCF final String vfile POContactsRestore vcf Cursor phones mCont
  • Tomcat SSL:无法找到请求目标的有效证书路径

    我正在尝试访问应用程序中的网址 但收到此错误 1771426 http bio 8180 exec 15 ERROR gadget GadgetValidatorServlet wsdl exception WSInvokerExcepti
  • 禁用自动更正 UITextView

    有谁知道如何禁用 uitextview 中的自动更正编程 我有以下代码 但它不起作用 void setUpTextView self textView UITextView alloc initWithFrame self bounds s
  • order() 的结果应用于 data.frame 与 data.table 时有所不同

    如果我使用 我会得到不同的结果order in data frame and data table 例如 A lt data frame one c k two c 3 28 31 60 48 68 B lt as data table A
  • 派生类型声明中的错误:此上下文中 (1) 处的变量必须是常量

    我在模块中声明了一个派生类型 如下所示 MODULE dmotifs TYPE PRM INTEGER PRIVATE nsp 4 nrx 8 maxprx 4 REAL PRIVATE cref 1e 6 tref 1 REAL DIME