matriz allocatable subrutina
Publicado por Esteban (1 intervención) el 05/10/2013 23:53:15
Hola a todos, mi problema es el siguiente:
Tengo una subrutina que dentro de ella calcula (o llena) una matriz, y despues esa misma matriz la devuelve al programa principal, el problema es que al llamarla desde el programa principal me sale el error:
Dummy argument 'm_salida' of procedure 'sub2' at (1) has an attribute that requires an explicit interface for this procedure
sé que es porque en el programa principal la matriz no tiene una dimensión específica (puesto que la matriz es de dimensión variable dependiendo si se cumplen ciertas condiciones), como puedo conocer la dimensión de esa matriz en el programa principal para luego seguir ocupando esa misma matriz para cálculos posteriores?
Un ejemplo básico que arroja el mismo error seria el siguiente:
Espero puedan ayudarme porfavor
Muchas gracias!
Tengo una subrutina que dentro de ella calcula (o llena) una matriz, y despues esa misma matriz la devuelve al programa principal, el problema es que al llamarla desde el programa principal me sale el error:
Dummy argument 'm_salida' of procedure 'sub2' at (1) has an attribute that requires an explicit interface for this procedure
sé que es porque en el programa principal la matriz no tiene una dimensión específica (puesto que la matriz es de dimensión variable dependiendo si se cumplen ciertas condiciones), como puedo conocer la dimensión de esa matriz en el programa principal para luego seguir ocupando esa misma matriz para cálculos posteriores?
Un ejemplo básico que arroja el mismo error seria el siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
program pruebematriz1
implicit none
integer, allocatable, dimension(:) :: m_salida
call sub2(m_salida)
print*, m_salida
end program
subroutine sub2(m_salida)
implicit none
integer :: i,nto=4
integer, allocatable, intent(out),dimension(:) :: m_salida
allocate(m_salida(3))
m_salida=(/(-1*i,i=1,3)/)
if (nto>=3) then
deallocate(m_salida)
allocate(m_salida(4))
m_salida=(/(i,i=5,8)/) ! cambia la dimension si se cumple la condicion
end if
end subroutine
Espero puedan ayudarme porfavor
Muchas gracias!
Valora esta pregunta


0