在块中填充矩阵元素,而不是在Fortran 90中顺序填充整个矩阵

时间:2019-04-30 20:03:44

标签: matrix multidimensional-array fortran partitioning gfortran

我有一个Fortran 90代码,它填充矩阵元素,这些矩阵元素表示源点和观察点之间的相互作用。

我想要的是将矩阵填充为子块,而不是将矩阵填充为一个完整的矩阵。

假设我有

  • 元素/补丁总数:N = 2
  • 正交数的总数是:quad = 3
  • 矩阵大小=((2 * 3)*(2 * 3))= 36`

这是填充整个矩阵的方式

do q=1, N
    do p=1, N
        do j=1, quad
            do i=1,quad

但是,我希望填充块而不是顺序填充矩阵。

像这个例子

example

我将上面的示例分为4个块,以便它填充第一个块,然后移至第二个块,依此类推。括号中的对表示补丁号

那怎么办?

1 个答案:

答案 0 :(得分:0)

不确定您要问的是什么,但是根据您给出的描述,我认为按列填充数组会更容易。像

program arrayfill
  implicit none
  integer, parameter :: n = 6
  integer :: m(n, n), i
  ! Fill matrix m column-wise
  m(:, 1) = 11
  m(:(n/2), 2) = 11
  m((n/2+1):, 2) = 12
  m(:, 3) = 12
  m(:, 4) = 21
  m(:(n/2), 5) = 21
  m((n/2+1):, 5) = 22
  m(:, 6) = 22

  do i = 1, n
     print *, m(i, :)
  end do
end program arrayfill