Fortran I/O:指定大记录大小

2024-01-19

我正在尝试将一个数组写入文件,我以这种方式打开文件:

open(unit=20, FILE="output.txt", form='unformatted', access='direct', recl=sizeof(u))

Here, u是一个数组并且sizeof(u)是 2730025920,大约 2.5GB。 当我运行该程序时,出现错误Fortran runtime error: RECL parameter is non-positive in OPEN statement,我认为这意味着记录大小太大。

有办法处理这个问题吗?一种选择是在多个写入调用中写入数组,以便每次写入的记录大小小于 2.5GB。但我想知道是否可以在一次调用中写入整个数组。

Edit: u已被宣布为double precision u(5,0:408,0:408,0:407)该程序被编译为gfortran -O3 -fopenmp -mcmodel=medium test.f该程序中有一些 OpenMP 代码,但文件 I/O 是顺序的。

gfortran v 4.5.0,操作系统:64 位 AMD Opteron 上的 Opensuse 11.3

感谢您的帮助。


只要内存允许,您应该能够编写大数组。看起来你正在得到整数溢出sizeof功能。sizeof不是 Fortran 标准,我不建议使用它(编译器之间的实现可能有所不同)。相反,更好的做法是使用inquire语句获取记录长度。我能够用 ifort 重现你的问题,这个解决方案对我有用。您可以通过声明更高种类的变量来避免整数溢出:

integer(kind=8) :: reclen

inquire(iolength=reclen)u 

open(unit=20,file='output.txt',form='unformatted',&
     access='direct',recl=reclen)

编辑:经过一番调查,这似乎是一个 gfortran 问题。为整数设置更高的种类reclen解决了 ifort 和 pgf90 的问题,但没有解决 gfortran 的问题 - 我刚刚用版本 4.6.2 尝试过这个问题。虽然reclen有正确的正值,看起来recl是 gfortran 内部的 32 位有符号整数(感谢 @M.S.B. 指出了这一点)。 Fortran 运行时错误表明了这一点,而不是表明该值大于最大值。我怀疑这是操作系统问题。如果可能,尝试使用 ifort(免费用于非商业用途):英特尔非商业软件下载 http://software.intel.com/en-us/articles/non-commercial-software-download/.

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

Fortran I/O:指定大记录大小 的相关文章

随机推荐

  • Java 8 DateTimeFormatters 常量在哪里定义?

    我正在看DateTimeFormatter https docs oracle com javase 8 docs api java time format DateTimeFormatter html类 我想知道常量在哪里 M EEE a
  • 包含或异或有什么区别?

    我一直在研究一些业务流程执行语言 BPEL 和相关的建模系统 BPMN 其中设计人员需要了解流程流的包容性和排他性网关 非常感谢您的帮助 假设适用相同的规则 对术语的一般解释就足够了 这是我试图理解的一些技术文本对马克的回应 对于连接两个活
  • 是否在数据库级别或服务器/实例级别启用了“CLR 集成”?

    我试图了解启用 CLR 是否在数据库级别或服务器级别 实例级别启用它 在线书籍根本不清楚 如果我使用此命令启用 CLR 会发生什么 它会在所有服务器上启用吗 sp configure clr enabled 1 GO RECONFIGURE
  • “结合更牢固”这句话是什么意思?

    我知道这可能是一个新手问题 但我试图理解这句话 来自一篇关于使用 EBNF 的元语言的论文 Logical and binds stronger than logical or 在此之前它说 Conditions are condition
  • 无法从 master 连接到 kubernetes pod:i/o 超时

    我配置了 1 个主节点和一个节点的 kubernetes 集群 运行主节点和节点的机器不在同一网络中 对于网络 我安装了 calico 并且所有 pod 都在运行 为了测试我使用的集群获取外壳示例 https kubernetes io d
  • 用 Java 写入文件

    我对 Java 很陌生 由于某种原因我无法写入文件 我的代码如下所示 FileWriter fstream try fstream new FileWriter fileLocation BufferedWriter out new Buf
  • 如何定期更新 Label 控件的值?

    我试图让标签显示一些文本 然后在一段时间后刷新自身并能够稍后重新显示其他内容 但目前我不知道如何使标签暂停 如果可能的话 到目前为止我的代码 foreach var x in mod labelWARNING Visible true la
  • 全屏纹理采样的最佳方式

    在片段着色器中采样全屏纹理的最佳方法是什么 例如延迟渲染器中的 g 缓冲区 或后处理着色器中的场景纹理 目前我使用以下两种方式 将屏幕尺寸作为统一值传递给着色器并计算 u v gl FragCoord vec2 texCoord gl Fr
  • 在 .each 循环中显示一个条目的模式 - Rails / Bootstrap

    我想要一个链接来打开一个模式 显示单击的对象 word title 显示在每个循环中 现在它会打开模式 但随后会为循环中的每个项目再次显示它 h1 Glossary of words h1 p Pagination at 25 p tabl
  • 如何将 CSV 或 JSON 导入到 firebase cloud firestore

    有没有办法像 Firebase 实时数据库一样将 CSV 或 JSON 导入到 firebase cloud firestore 通用解决方案 我发现许多脚本允许上传 JSON 但没有一个允许子集合 我上面的脚本处理任何级别的嵌套和子集合
  • 如何使用XNA加载文件夹中的所有文件?

    我想加载文件夹中的所有文件 内容 纹理 进入游戏使用Content Load 文件名 但是 我无法以这种方式 找到 位于 Content 内的文件 该程序而是查看 bin 调试 内容 纹理 但是当尝试使用 Content Load 加载 j
  • 模板类成员特化声明

    当我在模板类中专门化一个 静态 成员函数 常量时 我 对声明的去向感到困惑 这是我要做什么的一个例子 直接来自IBM 关于模板专业化的参考 http publib boulder ibm com infocenter comphelp v8
  • Koa 中的 Promise 错误处理

    如果我在 Koa 中做出承诺 它们可能会被拒绝 function fetch var deferred q defer Some async action which calls deferred reject return deferre
  • 如何让Android上的工具栏占据全宽?

    结果如下 https i stack imgur com VgbZT png https i stack imgur com VgbZT png 我希望它位于状态栏正下方且全宽 就像这样 https i stack imgur com FF
  • Internet Explorer 8 在哪里存储其故障转储?

    我正在对抗一个错误 该错误不会在我的计算机上重现 但每次都会在我客户的计算机上重复 我已经尝试了一切 现在我正在寻找 IE8 崩溃后留下的任何调试数据 或其他数据 谷歌和微软的搜索没有给我任何结果 Internet Explorer 8 在
  • npm 错误! npm install 时代码 EINTEGRITY

    当我尝试进行 npm install 时 出现此错误 npm ERR code EINTEGRITY npm ERR sha512 boQj1WFgQH3v4clhu3mTNfP vOBxorDlE8EKiMjUlLG3C4qAESnn9A
  • 将 div 定位到包含 div 的底部

    如何将 div 定位到包含 div 的底部 div class outside div class inside inside div div 此代码将文本 inside 放置在页面底部 outside width 200px height
  • aov 公式错误项:矛盾的例子

    我已经看到了 R 中受试者内设计的通用公式的两种基本方法aov R 随机 X 依赖 W 内 B 之间 Pure within X Error R W1 W2 or X W1 W2 Error R W1 W2 Mixed X B1 B2 Er
  • deep=True 在 pyyaml.Loader.construct_mapping 中做什么?

    在网上搜索自定义构造函数的用法时 我看到如下内容 def some constructor loader node value loader construct mapping node deep True return SomeClass
  • Fortran I/O:指定大记录大小

    我正在尝试将一个数组写入文件 我以这种方式打开文件 open unit 20 FILE output txt form unformatted access direct recl sizeof u Here u是一个数组并且sizeof