Мне нужно отладить программу, которая включает в себя forall
блоков. Внутри них находятся подпрограммы или функции pure
. Для того, чтобы временно отключить pure
предикат я использую C препроцессор, как в следующий вопрос, поставленный мною:Gfortran: Обработать все блоки, как и блоки.
Gfortran: Treat pure functions as normal functions for debugging purposes?
Проблема теперь в том, что если подпрограммы или функции внутри forall
блока не pure
I получить компиляцию ошибок. Есть ли возможность лечения этих ошибок
Error: Reference to non-PURE function 'pvkp' at (1) inside a FORALL block
только как предупреждения или есть, может быть легко возможность использовать C препроцессор для поворота
forall (i=1:n)
...
end forall
в
do i=1,n
...
end do
Любые идеи оценили!
Учитывая, что 'forall' [не делает то, что он должен был делать] (http://stackoverflow.com/questions/4122099/do-fortran-95-constructs-such-as-where-forall-and -spread-general-result-in-fa/4141572 # 4141572) (а также [этот] (http://stackoverflow.com/questions/8602596/fortran-forall-restrictions)), почему бы просто не заменить все 'forall 'с' do' в любом случае? –
Я полностью понимаю концепцию 'forall'. Я считаю, что блоки 'forall' фактически улучшат скорость моей программы (после ее отладки). – Wauzl
Надеюсь, вы планируете * тестировать * свое утверждение и не бегать с ним исключительно на веру. В любом случае, вы можете проверить выход ассемблера, чтобы убедиться, что он действительно использует 'forall', а не просто преобразовывает его в' do ... enddo'. –