Возможно, вы сможете делать то, что хотите, если вы общаетесь с внутренними и POINTER-ключами KIND, но если вас интересует только подпись функций и подпрограмм, оставьте это в Fortran. Если определить
function calc8(arg1)
real(8), intent(in) :: arg1
...
и
function calc4(arg1)
real(4), intent(in) :: arg1
...
в модуле, и объявить интерфейс, как этот
interface calc
module procedure calc8
module procedure calc4
end interface
(Внимание, я не проверил синтаксис в деталях, что это ваш ответственность.)
то Fortran будет соответствовать вызову в правильной версии функции. Конечно, вам нужно написать обе версии функции, но это действительно способ Fortran 95 сделать это. Это может быть довольно утомительно, я обычно пишу родовую версию и запускаю сценарий sed, чтобы специализироваться на нем. Это немного клочья, но это работает.
Если код функции идентичен, кроме аргументов, я иногда пишу функцию для реального (8) (или что-то еще) и записываю версию для реального (4), которая вызывает реальную (8) версию завернутые в преобразования типов.
В Fortran 2003 есть улучшенные способы определения полиморфных и универсальных функций, но пока у меня пока нет головы.
Какой винтаж fortran? 77? 9й? 200x? –