时间数组在建模中超出范围?

2024-04-20

这些天我正在尝试使用新的气象数据(以 netcdf 格式而不是旧的 cray 格式给出)运行我的气候模型。模型编译顺利,但是当进行模拟时,模型在第一天运行良好,但在模拟的第二天就停止了,总是在同一时间步长,无论我使用哪个开始日期。错误是:

forrtl: strict (408): fort: (2): 数组 TIMEVALS 的下标 #1 的值为 141,该值大于上限 140。

所以我做了一些研究,浏览了我的源代码,看看 timevals 指的是什么样的数组,我发现它指的是这个具有时间维度的新气象数据,而这样的时间数组由 140 个元素组成。每个元素都是模型应该用于模拟的气象数据的特定日期和时间......所以我开始相信这是我的代码的问题,但我的同事已经能够在没有任何情况下运行模型问题,这对我来说很奇怪。他在 Makefile 中使用一些不同的设置编译了模型,我不知道这是否重要,我对 fortran 等还不是很熟悉。但是下面是使用这个 TIMEVALS 数组的代码部分:

           CASE(2)        ! nudging data is in netcdf-format

           cfile = str_filter(ndg_file_nc,yr,mo,dy,hr,mi,se,ndgblock)
           CALL message('   Adjust date using file: ',TRIM(cfile))

           IF (p_parallel_io) THEN
             INQUIRE(file=cfile,exist=found)
             IF (.NOT.found) &
                CALL finish('NudgingInit','Nudging data file not found.')
             ndgfile%format = NETCDF
             CALL IO_open (cfile, ndgfile, IO_READ)
             CALL IO_INQ_DIMID(ndgfile%file_id, 'time', ndimid)
             CALL IO_INQ_DIMLEN(ndgfile%file_id, ndimid, nts)
             CALL IO_INQ_VARID(ndgfile%file_id, 'time', nvarid)
             ALLOCATE (timevals(nts))
             CALL IO_GET_VAR_DOUBLE (ndgfile%file_id, nvarid, timevals)
             ihead_nc(1) = FLOOR(timevals(1))                          ! ihead_nc(1) is YYYYMMDD
             ihead_nc(2) = INT((timevals(1)-ihead_nc(1))*24._dp)       ! ihead_nc(2) is HH
             DEALLOCATE (timevals)
           ENDIF

           IF (p_parallel) CALL p_bcast(ihead_nc, p_io)
           CALL inp_convert_date(ihead_nc(1),ihead_nc(2)*10000, ndg_date0)

             IF (p_parallel_io) THEN
             ! skip first record and read second header
             ALLOCATE (timevals(nts))
             CALL IO_GET_VAR_DOUBLE (ndgfile%file_id, nvarid, timevals)
             ihead_nc(1) = FLOOR(timevals(2))                          ! ihead_nc(1) is YYYYMMDD
             ihead_nc(2) = INT((timevals(2)-ihead_nc(1))*24._dp)       ! ihead_nc(2) is HH
             DEALLOCATE (timevals)
             CALL IO_close(ndgfile)
           ENDIF

           IF (p_parallel) CALL p_bcast(ihead_nc, p_io)
           CALL inp_convert_date(ihead_nc(1),ihead_nc(2)*10000, ndg_date1)

ndg_file and ndg_date参考微推(气象数据) 你们知道什么可能会导致这个错误吗?


我现在有一些时间来详细阐述我之前的评论。 (请注意,我使用斜体表示您可能想阅读的术语。)

您报告的错误是运行时错误,而不是编译器在编译时能够看到的错误。如果您不明白两者之间的区别run-time(即当代码执行时)和编译时(即当编译器将您的源代码转换为可执行代码时)进行一些研究。此外,很明显,您(或某人)已指示编译器创建一个代码版本,用于检查数组元素访问是否在数组范围内。在测试新软件时,这是一个非常重要的安全功能,但是当代码执行时,一旦通过测试,就在没有进行此检查的情况下编译了如此多的代码,从而造成了性能损失。

我不知道您使用的是什么编译器,但请查看其文档以找到打开的选项数组边界检查在运行时。

错误消息非常明确——在代码中的某个时刻,它尝试访问只有 140 个元素的数组的第 141 个元素。我们无法告诉您这是如何发生的,即使我们看到了您的整个代码,也可能无法告诉您。当加载的数据不符合程序员的期望时,这种事情经常发生。当程序员制作时也经常发生这种情况差一编写循环时出错。我们可能会通过查看您的整个代码来发现这一点,但您比我们处于更有利的位置。

你写

但我的同事能够毫无问题地运行该模型,这对我来说很奇怪。他在 Makefile 中使用一些不同的设置编译了模型,我不知道这是否重要,

嗯,是的,这很重要,非常重要。如果您编写的代码访问具有 140 个元素的数组的元素 141,则 Fortran 与许多其他编译语言一样,将很乐意访问内存中元素 140 之后的下一个位置。通常,您不知道程序正在干扰哪些数据。如果幸运的话,内存中的下一个位置位于操作系统分配给程序的地址空间之外,操作系统会立即停止程序并报告分段错误。

如果你运气不好,程序会继续愉快地读取和写入元素 141,无论它是什么。

我推测您的同事尚未对其代码版本实现数组边界检查。是否告诉他他的代码(很可能)被破坏了,这取决于你。

那么你该怎么办呢?你debug该程序。您可以通过多种方式执行此操作,其中最简单的方法是(在我看来)插入一些write语句在代码中的关键点打印出变量值,以测试您对它们可能、可以或实际采用的值的假设。更困难,但在未来解决问题方面值得付出最初的努力,那就是在一个人的控制下运行代码debugger。有几个很好的调试器可用于所有主要平台上的 Fortran 程序。

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

时间数组在建模中超出范围? 的相关文章

  • 如何检查 Json 数组是否包含特定值?

    如何检查 Json 数组是否包含特定值 这是我加载数据的代码 dynamic d JObject Parse number 1000 str string array 1 2 3 4 5 6 Console WriteLine d numb
  • Laravel 集合到数组

    我有两个模型 Post and Comment 许多评论属于一个帖子 我正在尝试以数组形式访问与帖子相关的所有评论 我有以下内容 它提供了一个集合 comments collection post gt comments gt get 我该
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • C# 可以扩展数组吗?

    我习惯向 IEnumerable 等外部类添加方法 但是我们可以在 C 中扩展数组吗 我计划向数组添加一个方法 将其转换为 IEnumerable 即使它是多维的 不相关如何在 C 中扩展数组 https stackoverflow com
  • C# LINQ 方法确定数组是否是另一个数组的子集(包括重复项)?

    考虑两个数组 int a1 new int 1 1 1 2 3 4 5 6 7 8 9 10 10 int a2 new int 1 3 4 7 5 10 1 我希望能够确定 a2 是否是 a1 的子集 考虑重复项目的数量 换句话说 如果a
  • 获取嵌套数组 JS 中对象的所有父对象

    我在使用 vuejs 的项目上遇到问题 我有一个像这样的嵌套对象数组 Data data id 1 parent id null title First folder children id 3 parent id 1 title Firs
  • 在 Lucene.NET 中索引 Json 对象数组

    我正在努力将任意 json 对象放入 Lucene NET 索引中 给定的对象可能如下所示 name Tony age 40 address street Weakroad number 10 floor 2 door Left skill
  • 匹配数组中的对象并合并

    UPDATE 我有一个名为的对象数组cars包含 li 标签 其中包含有关汽车的属性数据 例如价格 汽车类型等 我的目标是 如果这些汽车符合某些标准 则将它们合并到一个列表中 要求 快速性能 保持相同的汽车数组结构 Main Goal Ma
  • 使用 for 循环 Python 为数组赋值

    我正在尝试将字符串的值分配给不同的数组索引 但我收到一个名为 列表分配超出范围 的错误 uuidVal distVal uuidArray distArray for i in range len returnedList for beac
  • char* argv[] 在 c/c++ 中如何工作? [复制]

    这个问题在这里已经有答案了 我知道它用于使用命令行中的参数 但我没有得到声明 字符 argv 它是否意味着指向 char 数组的指针 如果是的话为什么没有大小 如果不是动态数组 就不需要有大小吗 我做了一些研究 发现有人说它会衰减为 cha
  • Java中char数组的默认值是多少?

    如果我像这样分配字符数组 char buffer new char 26 它分配的默认值是什么 我尝试打印它 但它只是一个空字符 System out println this is what is inside gt buffer 1 t
  • Firestore 更新后仅获取文档一次

    我有一个 tableView 它从 Firestore 集合中获取所有文档 并且我只想在用户刷新 tableView 后将最后一个文档添加到 Firestore 时获取一次 然后我想删除侦听器 以便当用户刷新 tableView 时仅获取文
  • 调整巨大数组的大小

    我正在我的应用程序中处理巨大的数组 需要调整它们的大小 假设您有一个 2Gb 的阵列 并且想要将其大小调整为 3Gb 有没有办法在暂时不需要 5Gb 的情况下调整它的大小 例如 给定一个 1Gb 堆 使用 Xmx1G flag public
  • 创建动态多维对象/数组

    我正在尝试使用 JS 创建一个多维数组 以便我可以通过 Ajax 调用 PHP 来发布一些数据 这可能很简单 但我对 JS 的了解很少关于这个具体的事情 这是带有代码的 JSFiddle http jsfiddle net k5Q3p 我想
  • 关于 ArrayList[] x 的 Java 问题

    我一直对 ArrayList 数组有这个问题 也许你能帮忙 declare in class private ArrayList
  • 如何获得n个具有不同元素数量的数组的所有可能组合?

    我有一些在编程时未知的数组数量 也许是 3 或 4 或 7 每个数组都有一些元素 即 a 1 2 3 4 b 6 7 5 2 1 c 22 4 6 8 4 8 5 4 d e f g 我想通过从每个数组中采样一个数字来获得所有可能的组合 例
  • 确定数组的大小(如果传递给函数)

    如果将数组传递给另一个函数 未传递大小 是否可以确定数组的大小 数组的初始化类似于 int array XXX 我知道不可能执行 sizeof 因为它会返回指针的大小 我问的原因是因为我需要在传递数组的另一个函数内运行 for 循环 我尝试
  • 删除近排序数组中未排序/离群元素

    给定一个像这样的数组 15 14 12 3 10 4 2 1 我如何确定哪些元素乱序并删除它们 在本例中为数字 3 我不想对列表进行排序 而是检测异常值并将其删除 另一个例子 13 12 4 9 8 6 7 3 2 我希望能够删除 4 和
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p

随机推荐

  • 仅当 gradle 中另一个任务不是最新时才运行任务

    我想在 Gradle 中进行功能测试时自动添加 serverRun 任务 因此我添加了一个依赖项 funcTestTask dependsOn serverRun 无论 funcTestTask 是否运行 任务都会运行 compile se
  • 如何使用敏感数据运行 cron 作业?

    I read 在哪里可以设置 crontab 将使用的环境变量 https stackoverflow com questions 2229825 where can i set environment variables that cro
  • 如何正确使用CGPathApply

    我尝试使用 CGPathApply 迭代 CGPathRef 对象中的每个 CGPathElement 主要是编写一种自定义方法来保存 CGPath 数据 问题是 每次调用 CGPathApply 时 我的程序都会崩溃 根本没有任何信息 我
  • WebLogic Server 10.3.6 中的 JPA 2.0

    我需要使用 JPA 2 0 带有 EclipseLink 实现 问题是我还需要在实现 Java EE 5 规范的 WebLogic 10 3 6 服务器中部署此应用程序 因此不需要支持 JPA 2 我知道有可用于在此版本中添加对 JPA 2
  • 参数列表中的 void_t 可以工作,但不能作为返回类型

    cppreference 上有一个关于使用别名的示例 这个例子失败是因为int没有会员foo template
  • 使用 Apache2 的 NodeJS 应用程序有时会返回 503 服务器不可用

    风景 我有一个乌班图18 04DigitalOcean 中的服务器具有以下规格 1 vCPUs 1GB and 25GB磁盘 在这个服务器 我们称之为 API SERVER 中 我使用 PHP 和 NodeJS 在由 apache 管理的代
  • 何时处置?

    我对所有有关 IDispose 和 使用 语句的讨论感到困惑 我想知道是否有人可以告诉我在下面的测试示例中是否需要使用 using 语句或 IDispose 的某种实现 public class Main MyFile myFile new
  • resharper 单元测试继承

    有人有 Resharper 单元测试层次结构的策略吗 我通常使用 TestDriven Net 和 Resharper 的测试运行器以及 NUnit 测试 TestDriven 对所有事情都很棒 但很快就会从批量运行 可能是数千个 中找到一
  • WordPress 博客文章未显示 Facebook 预览图像

    我有一篇博客文章here http gingerslist com blog 62 smiles and understanding 2 当我在 Facebook 上分享此内容时 预览图像不显示 我尝试过重新抓取Facebook 开发者工具
  • 使用 SQLAlchemy 批量更新插入 [重复]

    这个问题在这里已经有答案了 我正在使用 SQLAlchemy 1 1 0b 将大量数据批量插入到 PostgreSQL 中 并且遇到了重复的键错误 from sqlalchemy import from sqlalchemy orm imp
  • 何时应使用以下各项:Amazon EC2、Google App Engine、Microsoft Azure 和 Salesforce.com? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是在非常普遍的意义上问这个问题 无论是从云提供商还是云消费者的角度来看 此外 问题不针对任何特定类型的应用程序 实际上 目的是了解哪种类型的应
  • 在 iPhone 中的应用程序中评价我在 iTunes 中的应用程序

    我必须在我的应用程序中提供一个链接 用户点击它就会将我带到应用程序的 itunes Appstore 页面 用户可以在其中对应用程序进行评分 我认为其他应用程序尝试访问设备中的Appstore应用程序并在itunes中传递该应用程序的相应u
  • PowerShell 5 中的写入主机与写入信息

    众所周知 Write Host是邪恶的 在PowerShell 5 Write Information被添加并被考虑替换Write Host 但是 说实话 哪个更好呢 Write Host是邪恶的 因为它不使用管道 因此输入消息无法被重用
  • 如何使用Android KeyStore安全存储任意字符串?

    我希望能够在 Android KeyStore 中安全地存储一些敏感字符串 我从服务器获取字符串 但我有一个用例需要我保留它们 KeyStore 只允许从与分配给我的应用程序相同的 UID 进行访问 并且它将使用设备主密码对数据进行加密 因
  • R Shiny Memory Leak - 有关如何查找的建议?

    我正在寻找有关如何识别 R 闪亮程序中内存泄漏的一般想法 我正在努力确定泄漏的确切位置 因此很难重新创建 而且我的代码已经超过 1000 行 我确信它与观察和观察事件有关 但我无法准确指出它 我实际上很喜欢 bborgeser 在这里提出的
  • 如何根据iOS上的touchMove事件在屏幕上绘制动态矩形

    矩形将被视为两个点 第一个点将是 touchBegan 点 在 touchMove 上将是第二个点 矩形将根据用户手指的移动动态绘制 就像当您单击桌面并移动桌面时 鼠标您将获得动态矩形 Thanks 好的 这是你如何绘制矩形的方法touch
  • 如何展平嵌套的Python字典?

    我正在尝试展平嵌套字典 dict1 Bob shepherd 4 6 3 collie 23 3 45 poodle 2 0 6 Sarah shepherd 1 2 3 collie 3 31 4 poodle 21 5 6 Ann sh
  • 尽管确实存在,但“不存在具有给定标识符的行”

    我正在使用 Hibernate 并得到 线程 main 中的异常 org hibernate ObjectNotFoundException 不存在具有给定标识符的行 271 这个错误的奇怪之处在于 具有给定 id 的对象存在于数据库中 我
  • 子进程超时失败

    我想在子进程上使用超时 from subprocess32 import check output output check output sleep 30 shell True timeout 1 不幸的是 虽然这会引发超时错误 但它会在
  • 时间数组在建模中超出范围?

    这些天我正在尝试使用新的气象数据 以 netcdf 格式而不是旧的 cray 格式给出 运行我的气候模型 模型编译顺利 但是当进行模拟时 模型在第一天运行良好 但在模拟的第二天就停止了 总是在同一时间步长 无论我使用哪个开始日期 错误是 f