Заполнение матричных элементов в блоках вместо последовательного заполнения всей матрицы в Fortran 90 - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть код 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 голосов
/ 02 мая 2019

Не уверен, что именно вы спрашиваете, но с описанием, которое вы дали, я думаю, что проще заполнить массив по столбцам. Что-то вроде

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
...