Массивы в Fortran хранятся по столбцам. a(i,j) и a(i+1,j) в памяти соседи. a(i,j+1) отстоит на целый столбец. Значит, цикл, который идёт по памяти подряд, держит j снаружи, а i внутри.
Напишите наоборот, как в C, и ответ всё равно будет верным. Просто код будет шагать по памяти через длину столбца. Компиляторы умеют переставлять циклы, если могут доказать, что это безопасно. Не рассчитывайте на это.
С сечениями то же правило. a(:,j) непрерывно. a(i,:) нет, и передача его в процедуру, у которой фиктивный аргумент явной формы (explicit-shape) или предполагаемого размера (assumed-size), может потребовать копирования туда и обратно. Фиктивный аргумент предполагаемой формы, объявленный как (:), принимает сечение с шагом как есть.
Выражения над целыми массивами вроде b = 2.0 * a оставляют порядок компилятору. Пользуйтесь ими, когда операция поэлементная.
Сначала представление. Иногда один раз сделанная транспонированная копия дешевле хитрого обхода, повторённого много раз.