Как обнулить все переменные при каждом вызове подпрограммы?

Есть ли простой способ инициировать группу переменных в подпрограммах Fortran? Что-то вроде DATA, но работает каждый раз при вызове подпрограммы. Или единственное решение — использовать x = 0.0 для всех переменных?


person Alexander Brow    schedule 11.11.2014    source источник


Ответы (2)


Да, чтобы установить значение переменной, используйте присваивание (=).

Вы можете создать производный тип и пользовательское назначение для упрощения синтаксиса.

person Vladimir F    schedule 11.11.2014

Мне также нужно было обнулить несколько переменных в начале подпрограммы, которую нужно было вызывать более одного раза. Я просто скопировал текст, используемый в объявлении переменных, в пустой новый файл в редакторе кода и использовал функцию «Найти и заменить», чтобы заменить все , на =0; или =0.0DE0; Вот пример:

Double precision AP(nPor), ACCor(nThr,4), ...

Замена всех (nPor), и (nThr,4), на =0.0D0;

AP=0.0D0; ACCor=0.0D0;

Затем все переменные были немедленно установлены в ноль. Мне только не удалось использовать подстановочные знаки, такие как (*),, чтобы сэкономить время на просмотр каждого типа аргументов, используемых в переменных.

Если этот поворот совсем не подходит, вы можете попытаться избежать атрибута SAVE в подпрограммах, как указано в Сохраняет ли fortran значение внутренних переменных через функцию и подпрограммы

person Giovane BLN    schedule 08.02.2015
comment
Извините, но я почти уверен, что вопрос был о методе автоматической инициации набора переменных, задаче, которую я назвал обнулением переменных. Таким образом, чтобы просто не печатать, например. =0 или (dim,dim)=0.0D0 для ВСЕХ переменных, я предложил способ написать все это быстро. @Александр - person Giovane BLN; 08.02.2015
comment
Хорошо, я отредактировал ваш ответ, чтобы было понятнее, что вы сделали. Обратите внимание, что вы можете просто использовать ACCor=0. Сложности с dim не нужны. - person Vladimir F; 08.02.2015
comment
Я очень ценю это и прошу вас любезно удалить свой голос против, так как мой ответ действительно помог, кроме того, что на этот раз он не был таким ясным. Спасибо - person Giovane BLN; 08.02.2015
comment
К сожалению, я не могу убрать отрицательный голос, потому что он не мой. - person Vladimir F; 08.02.2015