Попробуйте изменить порядок ваших циклов при выполнении матричных операций, например, если у вас есть что-то подобное в C:
for (i = 0; i < M; ++i) // for each row
{
for (j = 0; j < N; ++j) // for each col
{
// matrix operations on e.g. A[i][j]
}
}
затем в Фортране вы хотите, чтобы цикл j (столбец) использовался как внешний цикл, а цикл i (строка) - как внутренний цикл.
Альтернативный подход, который позволяет достичь того же, состоит в том, чтобы сохранить циклы такими, какие они есть, но изменить определение массива, например, если в С это A[x][y][z][t]
, то в ФОРТРАНЕ сделайте его A[t][z][y][x]
, предполагая, что t
- самый быстро меняющийся индекс цикла, а x
- самый медленный.