На самом деле нет способа написать оператор Fortran, такой как
call character_variable_containing_subroutine_name
Такие возможности идут вразрез со статически типизированными компилируемыми языками, такими как Fortran.
Конечно, если бы вы спросили могу ли я предоставить входной аргумент программе на Фортране, который во время выполнения определит путь выполнения программы, тогда ответ будет конечно эм>. Я проигнорирую любые осложнения вашей ситуации и предположу, что вы хотите позвонить одному из sin
, cos
или tan
.
Сначала запишите текст аргумента программы в символьную переменную:
character(len=*) :: user_choice
...
call get_command_argument(1,user_choice)
...
select case (user_choice)
case ('sin')
... do stuff with sin
case ('cos')
... do stuff with cos
case ('tan')
... do stuff with tan
case default
... do whatever
end select
Вы можете сделать это более сложным, используя указатели процедур. Например, вы можете определить:
pointer :: rp
interface
real function rp(inval)
real, intent(in) :: inval
end function rp
end interface
а затем замените первую версию конструкции select case
чем-то вроде:
select case (user_choice)
case ('sin')
rp => sin
case ('cos')
rp => cos
case ('tan')
rp => tan
case default
... do whatever
end select
Это может упростить последующий код. Я думаю, это также может сделать его более сложным.
Обратите внимание, что я не тестировал ни один из этих фрагментов, мой синтаксис может быть немного шатким.
person
High Performance Mark
schedule
11.01.2013