Fortran:你能解释一下这个格式化字符串吗?

时间:2014-03-12 11:29:09

标签: formatting fortran fortran95

我有一个需要修改的Fortran程序,所以我正在阅读它并尝试理解。您能否解释一下以下语句中的格式化字符串的含义:

write(*,'(1p,(5x,3(1x,g20.10)))') x(jr,1:ncols)

2 个答案:

答案 0 :(得分:5)

http://www.fortran.com/F77_std/rjcnf0001-sh-13.html

很简单,你每行写三个通用(g)格式浮点数。每个浮点数的总字段宽度为20个字符,小数点右侧有10个位置。大幅度数字呈指数形式。

1x只是添加空格(也可以通过增加字段宽度来完成,即g21.10,因为数字是右对齐的。5x增加了一个空格每行开头有5个空格。

这里有点棘手的事情是导致1p这是一个比例因素。它使得由以下g格式生成的所有指数形式数的尾数乘以10,并且指数相应地改变,即取代默认值,

    g17.10  ->  b0.1234567890E+12

你得到:

  1p,g17.10  -> b1.2345678900E+11

b表示输出中的空白。请务必为字段宽度计数-留出空间......

为了在比例大于1的情况下完整性,小数位数减少(保持总精度),即

  3p,g17.10  -> b123.45678900E+09  ! note only 8 digits after the decimal

这是1p比默认值更精确的数字,但你不再获得。负标度会降低您的精确度,保留10位数字:

    -7p,g17.10  ->  b0.0000000123E+19

我应该补充一点,p比例因子编辑描述符在输入时执行完全不同的。阅读文档...

答案 1 :(得分:2)

我想稍微补充乔治的答案。不幸的是,这是Fortran非常讨厌(IMO)的一部分。通常,请记住,只要输入/输出列表中仍有值,就会自动重复Fortran格式规范,因此不必为每个要处理的值提供格式。

比例因子

在输出中, k P 之后的所有浮点值都乘以10 k 。包含指数( E )的字段的指数减去 k ,除非使用 EN (工程)或修复指数格式ES (科学)描述符。缩放不适用于 G 编辑,除非值应用 E 编辑。因此,(1P,G20.10)(1P,F20.10)之间存在差异。

组合

n ()这样的格式在继续之前重复括号 n 中的描述符。