gpt4 book ai didi

arrays - 具有显式 double 的 Fortran 数组

转载 作者:行者123 更新时间:2023-12-01 09:53:11 24 4
gpt4 key购买 nike

首先,我想说我对 Fortran 77 的经验很少。

我发现 this code 存在精度问题.它对 igrf12syn 子例程中的所有变量使用隐式 double (a-h,o-z) 定义。

但是,在尝试调试此代码时,我注意到大多数值在某些时候会失去精度,因此在静态定义末尾使用终止符 D0 可以解决此问题。

但是我如何定义我的维度变量 gh 上的值是明确的 double 值?我尝试在数据声明中的静态值末尾添加 D0,但出现编译器错误。

编辑:

Compiler error after adding the "d0" to the end of a value.

请注意,将“d0”添加到代码中数组外的其他值时不会发生此错误。

igrf.f:527.10:

data g0/ -31543.d0,-2298., 5922., -677., 2905.,-1061., 924., 1121
1
Error: DATA statement at (1) has more variables than values

TL/DR; Fortran 代码存在精度问题,我需要将 D0 添加到代码中静态定义值的末尾。但是,当将 D0 添加到数组中的值时,出现编译错误。

最佳答案

你的问题是由于固定格式 Fortran 的限制,它只允许一行中的 72 个字符。例如,查看 g0 在源代码中的处理方式:

      dimension gh(3451),g0(120) !... more declarations cut from this
c
data g0/ -31543.,-2298., 5922., -677., 2905.,-1061., 924., 1121., 1900
1 1022.,-1469., -330., 1256., 3., 572., 523., 876., 1900
2 628., 195., 660., -69., -361., -210., 134., -75., 1900
3 -184., 328., -210., 264., 53., 5., -33., -86., 1900
4 -124., -16., 3., 63., 61., -9., -11., 83., 1900
5 -217., 2., -58., -35., 59., 36., -90., -69., 1900
6 70., -55., -45., 0., -13., 34., -10., -41., 1900
7 -1., -21., 28., 18., -12., 6., -22., 11., 1900
8 8., 8., -4., -14., -9., 7., 1., -13., 1900
9 2., 5., -9., 16., 5., -5., 8., -18., 1900
a 8., 10., -20., 1., 14., -11., 5., 12., 1900
b -3., 1., -2., -2., 8., 2., 10., -1., 1900
c -2., -1., 2., -3., -4., 2., 2., 1., 1900
d -5., 2., -2., 6., 6., -4., 4., 0., 1900
e 0., -2., 2., 4., 2., 0., 0., -6./ 1900
!23456789012345678901234567890123456789012345678901234567890123456789012XXXXX
! 1 2 3 4 5 6 7 XXXXX

这里有两点需要注意。值 1900 不是数组的一部分。第 72 个字符是最后一个逗号,这些剩余数字将被截断。其次,当您将 D0 添加到这些数字时,您将最后一个实际值推到第 72 列之后,然后在此处将其截断,现在您的值比变量少。

要解决此问题,您可以使用编译器选项增加固定形式的行长度,但您需要确保尾随值(例如 1900)仍被截断。或者,您可以用更多的续行重组数据声明,以使其全部符合 72 列的限制。无论您选择做什么,都需要确保 1900 个值超出列限制或将其全部删除。

关于arrays - 具有显式 double 的 Fortran 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33919236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com