Compartir Arreglos asignables

Tengo algunos arreglos asignables que necesito compartir entre algunas subrutinas. Normalmente solo los pasaría como argumentos o tal vez escribiera todo en un Módulo, pero me temo que esto no es posible en mi situación.

Solo escribo algunas subrutinas propias y uso las subrutinas proporcionadas y descritas por un FEM-Solver. Así que no puedo alterar los argumentos de estas subrutinas o envolverlos en un Módulo.

Por lo que sé, tampoco es posible crear bloques comunes con una matriz de tamaño desconocido en el momento de la compilación.

¿Hay algo más para pasar mis matrices?

Actualizar:
En este momento mi entorno de programa se ve así:

Tengo una subrutina, proporcionada por el programa FEM, que se llama después de cada incremento, esto llama a varias de mis subrutinas donde calculo algunos valores para cada nodo o para un subconjunto de ellos.

Para mostrar estos valores en la post-simulación, tengo que pasarlos a otra subrutina. Esta subrutina es llamada por el solucionador de FEM para cada nodo al final del incremento. Así que cambiar mi código a esta subrutina produciría una gran cantidad de sobrecarga.

Mi idea es calcular los valores una vez, almacenar los valores en una matriz y pasar esta matriz a la segunda subrutina, donde se escribirán en la base de datos del cálculo.

Actualizar
Algunos pseudocódigo:
Supuesto del comportamiento del programa:

 Program FEM-solver
     *magic* 
     call ENDINC(ar1,ar2)
     *something* 
     do NodeID=1,Sum_Of_Nodes
        do valueID=1,Sum_Of_User_Computed_Values !(defined in preprocessing)
           call nodeval(NodeID,valueID,Value,ar3,...,arN)
        end do
     end do
     *voodoo* 
 end program FEM-solver    

Escrito y trabajando:

Subroutine ENDINC(ar1,ar2)
  *Computation of some node values*
  *Calling of own Subroutines, which compute more values*
  *Writing an array with results values for some/each node(s)*
   nodersltArr(NodeID,rslt)=*some Value*
end Subroutine ENDINC

Necesario, escribir los valores computados en la base de datos de la solución Node:

Subroutine nodeval(NodeID,valueID,Value,ar3,...,arN)  
  *called for each NodeID and valueID*
   value=noderslArr(NodeID,valueID)
end subroutine nodeval

Respuestas a la pregunta(3)

Su respuesta a la pregunta