Большинство реализаций Фортрана не имеют стандартного способа манипулировать указателями функций или указателями процедур.Тем не менее, Fortran 2003 и более поздние есть что-то.(См. Стр. 6 из this .)
В данной ситуации это будет работать довольно хорошо:
function func1 (p1, p2, etc)
... as you have it already
end
function func2 (p1, p2, etc)
... as you have it already
end
function funcselect (a, p1, p2, etc)
if (a < 0) then
x = func1 (p1, p2, etc)
else
x = func2 (p1, p2, etc)
endif
end
Затем просто позвоните funcselect
дополнительный параметр вместо того, что вы бы сделали с loop_func
.