There isn't really a way to write a Fortran statement such as
call character_variable_containing_subroutine_name
It goes against the grain of statically-typed compiled languages such as Fortran to provide that sort of facility.
Of course, if you had asked can I provide an input argument to a Fortran program which will, at run-time, determine the execution path the program takes then the answer is of course. I'll ignore any complications of your situation and suppose that you want to call one of sin, cos or tan.
First, capture the text of the argument to the program into a character variable:
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
You could make this more elaborate by using procedure pointers. For example, you might define:
pointer :: rp
interface
real function rp(inval)
real, intent(in) :: inval
end function rp
end interface
and then replace the first version of the select case construct by something like:
select case (user_choice)
case ('sin')
rp => sin
case ('cos')
rp => cos
case ('tan')
rp => tan
case default
... do whatever
end select
This might simplify later code. I guess it might also make it more complicated.
Note that I haven't tested any of these fragments, my syntax might be a little wonky.