gpt4 book ai didi

arrays - 读取名单中的数组部分

转载 作者:行者123 更新时间:2023-12-02 09:23:26 25 4
gpt4 key购买 nike

考虑一个包含二维数组的名单。例如,以下程序从文件“input.dat”读取。

program test
use :: iso_fortran_env

implicit none

integer :: ierr, unit, i
real(kind=kind(0.0d0)), allocatable :: p(:, :)

namelist /VAR_p/ p

allocate(p(2,2))
open(newunit=unit, file='input.dat', status='old', iostat=ierr)
read(unit, nml=VAR_p, iostat=ierr)
close(unit)

do i = 1, size(p, 1)
write(output_unit, '(F4.2," ",F4.2)') p(i,1), p(i,2)
end do
end program test

可以在“input.dat”中提供数组 p 作为

! input.dat
&VAR_p
p(1,1) = 1.2
p(1,2) = 3.2
p(2,1) = 1.0
p(2,2) = 0.0
/

有了这个输入,程序就可以正常运行。尽管如此,我宁愿逐行提供数组 p 。类似的东西

! input.dat
&VAR_p
p(1,:) = (1.2, 3.2)
p(2,:) = (1.30, 0.0)
/

是否有语法可以实现这一点?

最佳答案

确实有一种语法可以在名单记录中指定数组部分。它接近所要求的形式,但不完全一样。

在名单记录中,项目 (1.30, 0.0) 指定一个复数值,而不是数组构造函数(这意味着泛化为 (1.3, 0.0, 1.2)不是有效值)。相反,您只需指定一个值列表:1.3, 0.0:

&VAR_p
p(1,:) = 1.2, 3.2
p(2,:) = 1.30, 0.0
/

有一些值得注意的限制:

  • 左侧指示符可以是数组部分,但不能是向量下标;
  • 右侧值的数量不得大于左侧数组元素的数量。

在第二种情况下,如果右侧的值少于左侧的元素,则就好像右侧填充了空值。

关于arrays - 读取名单中的数组部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645201/

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