Ante algunas consultas que han tenido para pasar/utilizar un array a una subrutina, les comento lo siguiente:
1 - En introcomp-files hay un fuente de ejemplo donde se instancia un array dinámico y se pasa como argumento a una subrutina que implementa un swap entre elementos a modo de ejemplo, revisen eso. La forma de declarar el argumento pasado en la subrutina es refernciando la dimensión del vector de forma indefinida (o más bien heredada) con el ":" :
integer,dimension(:) :: vector
2 - Lo anterior no implica que tenga que usar array dinámico para resolver la entrega de ordenación de un vector. También se puede pasar el array y declararlo en la subrutina con una dimension indefinida (heredada del prog principal) usando ":"
3 - Otra alternativa es pasar el array y la dimension que lo define en el program principal ambos como args a una subrutina. En la sub, se declara en las var, el array la dimension como en el pro. principal.
Revsen este código de ejemplo.