Есть ли встроенная функция для инициализации массивов нулями в Fortran?

Есть ли способ установить массив (вектор, матрицу или даже скаляр) равным нулю еще в Фортране? 2003/2008, похоже, выводят Фортран на очень современный уровень, и я должен задаться вопросом, включили ли они простой способ установить значения массива в ноль без необходимости делать

do i = 1,X

        do j = 1,Y

            A(i,j) = 0

        enddo

enddo

Где X — количество строк, а Y — количество столбцов в двумерной матрице. Это можно обобщить на любое количество измерений, но принцип тот же.

В Matlab это легко сделать с помощью функции zeros, т.е.

A = zeros(X,Y)

Современный Fortran, похоже, включает в свой репертуар многие вещи, которые людям нравятся в Matlab и других языках, поэтому мне просто любопытно, есть ли у них встроенная функция для этой простой и базовой задачи.

Или, может быть, в современном Фортране нет необходимости очищать ранее сохраненные значения в памяти путем инициализации массивов?

Я думаю, что более короткий путь состоял бы в том, чтобы просто пойти

real, dimension(X,Y)        :: A

A = A*0.0 ! Set all elements to zero by multiplying matrix by scalar value 0

Но вопрос о внутренностях остается в силе.


person Charlie Crown    schedule 16.04.2017    source источник
comment
Я думаю, что A = 0.0 сделает это.   -  person rici    schedule 16.04.2017
comment
@rici, ты прав. Это очень простое решение того, что я делал излишним.   -  person Charlie Crown    schedule 16.04.2017
comment
Вы нашли правильный ответ, но обратите внимание, что ваш метод умножения на ноль неверен - использование неинициализированной переменной в выражении никогда не будет правильным.   -  person Ian Bush    schedule 16.04.2017
comment
Кроме того, это можно обеспечить с помощью опций компилятора. Параметр -finit-local-zero указывает компилятору инициализировать локальные переменные INTEGER, REAL и COMPLEX нулем для gfortran.   -  person trblnc    schedule 17.04.2017
comment
Пожалуйста, не делайте этого, такое предположение делает ваш код нестандартным.   -  person Ian Bush    schedule 18.04.2017
comment
Да, мой предыдущий комментарий явно указывает на плохую практику, она существует, но ее не рекомендуется использовать, см. также. Интересно, есть ли какая-либо другая достаточно веская причина для использования этой опции, кроме отладки.   -  person trblnc    schedule 18.04.2017


Ответы (1)


Оказывается, ответ довольно прост.

A = 0.0 

или просто

A = 0

установит все элементы в вашем массиве на 0,0000...

(Перенесено из вопроса.)

person Community    schedule 16.04.2017
comment
Это работает для всех версий или Fortran, или это функция, которая была добавлена ​​​​в более новых версиях? - person swimfar; 11.02.2020
comment
@swimfar Начиная с Фортрана 90. - person Vladimir F; 11.02.2020
comment
@VladimirF это возможно? реальный размер (X, Y) :: A = 0? - person Herman Toothrot; 23.05.2020
comment
Это работает для любого реального? то есть могу ли я сделать: реальный размер (X, Y) :: A = 273,15? - person gram_schmidt; 05.10.2020