首页 > 解决方案 > Fortran 90 函数

问题描述

在 Fortran 上,python 中使用的“i in range”的等效函数是什么(在 a 和 b 之间创建一个数字序列)?与“附加”相同(将传递的对象附加到现有列表中)

如何用一些不应该满的 boxex 创建一个数组?

谢谢!

标签: fortran

解决方案


“i in range”的等效函数

隐含的 do-loop 是您正在寻找的

(f(i), i=1, n)

与“追加”相同(将传递的 obj 追加到现有列表中)

python中可以动态增长的列表在fortran中没有直接比较。

正如@IanBush 指出的那样:有一种替代方法 using但请注意,它每次都会重新allocatable分配并复制整个数组

integer, allocatable :: arr(:)

arr = [1, 2]
arr = [arr, 3]

您可能想考虑实现自己的派生类型,它可以成倍增长。类似于c++ 中的 std::vector 的东西。

如何用一些不应该满的 boxex 创建一个数组?

评论给出的详细说明:

在这个网格中有一些不应该填充的黑框,我不知道该怎么做,还有一些带有两个数字的框,我也不知道怎么做。

您可以为此定义布尔数组(我假设您并不真正关心内存消耗)

program main
  implicit none

  integer              :: n, i, j
  integer, allocatable :: grid(:,:,:)
  logical, allocatable :: unused(:,:), double(:,:)

  n = 10
  allocate (grid(2,n,n))
  allocate (unused(n,n), source=.true.)
  allocate (double(n,n), source=.false.)

  ! set values
  unused(1, 2) = .false.

  do i = 1, n
    do j = 1, n
      if (unused(i,j)) cycle

      if (double(i,j)) then
        ! use values grid(1,i,j), grid(2,i,j)

      else
        ! only use value grid(1,i,j)
      end if
    end do
  end do
end program

推荐阅读