使用格式化 Fortran `write(6,*)` 输出时出现问题

发布于 2024-10-25 01:03:59 字数 970 浏览 1 评论 0原文

我目前正在将应用程序从 Fortran 移植到 C,并且需要输出一些变量来比较结果。我对 Fortran 非常陌生,虽然我理解代码并且现在已经移植了几千行,但我自己编写 Fortran 代码还是个菜鸟。
这段代码:

  write(6,'(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)') 'iHyd:',
 &     ih,'; dzdr: ',dzdr,'; tauray:', tauRay,'; zRay: ',
 &     zray,'; ampRay: ',realpart(aray),'+j*',
 &     imagpart(aray),'; qRay: ',qray,'; width :',w

编译得很好,但是运行时,程序退出时显示:

At line 296 of file calcpr.for (unit = 6, file = 'stdout')  
Fortran runtime error: Expected INTEGER for item 15 in formatted transfer, got REAL  
(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)  
   ^  
 q0:    1432.3944878270595     
 nArrayR:                   501 nArrayZ:                   201
iHyd:  1; dzdr: ************; tauray:************; zRay: ************; ampRay:          NaN+j*         NaN
; qRay: 

除了非常难看之外,它对我来说没有多大意义,因为 ìh 被声明为 integer*8 而不是真实的。

那么我该如何解决这个问题呢?

I'm currently porting an application from Fortran to C and need to output some variables to compare results. I'm very new to Fortran, and although i understand the code and have now ported several thousand lines, I'm a noob at writing Fortran code myself.
This code:

  write(6,'(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)') 'iHyd:',
 &     ih,'; dzdr: ',dzdr,'; tauray:', tauRay,'; zRay: ',
 &     zray,'; ampRay: ',realpart(aray),'+j*',
 &     imagpart(aray),'; qRay: ',qray,'; width :',w

Compiles fine, but when run, the program exits with:

At line 296 of file calcpr.for (unit = 6, file = 'stdout')  
Fortran runtime error: Expected INTEGER for item 15 in formatted transfer, got REAL  
(A,I3,A,E12.8,A,E12.8,A,E12.8,A,E12.8,A,E12.8)  
   ^  
 q0:    1432.3944878270595     
 nArrayR:                   501 nArrayZ:                   201
iHyd:  1; dzdr: ************; tauray:************; zRay: ************; ampRay:          NaN+j*         NaN
; qRay: 

Besides being really ugly, it doesn't make much sense to me, as ìh is declared as integer*8 and not as real.

So how can i solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

樱娆 2024-11-01 01:03:59

我在格式语句中计算了 6 个字符和变量规范,但您打印了其中 8 个。

编辑:

格式语句的更好用法是“(A,I3,7(A,E12.8))”

I'm counting 6 character&variable specifications in the format statement, but you're printing 8 of them.

edit:

a nicer use of the format statement would be '(A,I3,7(A,E12.8))'

如果要打印的内容多于格式语句中指定的内容,Fortran 将“回收”格式。如果写入语句给出了您不理解的结果,为了诊断问题,一次删除一个打印的内容可能会有所帮助,直到错误消失。

Fortran "recycles" the format if there are more things to be printed than specified in the format statement. If a write statement gives results you don't understand, to diagonose the problem it may be helpful to remove the things printed one at a time until the error goes away.

别念他 2024-11-01 01:03:59

它写着“第 15 项”,我认为它位于列表的末尾附近,而不是位于开头。很明显,“w”和“qray”都被打印为 REAL;其中之一是整数吗?然后您可能需要更改格式说明符。

It says "item 15", which I would take to be down near the end of your list, not ih at the beginning. It's clear that both "w" and "qray" are being printed as REAL; is either one of them an INTEGER? You may need to change the format specifier then.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文