subrutinas subprogramas intrinsecas funciones ejemplos arreglos arcoseno fortran gfortran

subprogramas - funciones intrinsecas fortran



¿Cómo pasar una función con múltiples argumentos a una subrutina que espera una función con un solo argumento? (1)

En Fortran 2008 puede pasar funciones internas como argumentos y gfortran lo admite.

subroutine calling() a0 = ... call treatfunction(wrapper, input=myinput, output=myoutput) contains real function wrapper(x) real, intent(in) :: x wrapper = fun(x,a0) end function end subroutine

Por cierto, me mantendría alejado de lo external , es malo, use bloques de interfaz.

Tengo una subrutina (ejemplo mínimo)

subroutine treatfunction(f,input,output) external, real::f real, intent(in):: input real, intent(out):: output output = f(input) + f(1.0) ! i.e. f has only one argument end subroutine

y una función con dos argumentos

real function fun(x,a) real,intent(in)::x,a

Ahora, por un tiempo determinado, en tiempo de ejecución, quiero pasarme la fun para treatfunction . Entonces, idealmente, me gustaría llamar algo así como

call treatfunction(fun(:,a=a0), input=myinput, output=myoutput)

¿Cuál es la forma más elegante de hacer esto con las características de Fortran2003 gfortran-5 ?

Por supuesto, podría insertar un argumento ficticio opcional a en la función treatfunction y llamar a f con f(x) o f(x,a) dependiendo del present(a) en el cuerpo de la subrutina. Pero cambiar la subrutina no es elegante.