You are on page 1of 3

Matrices y Fortran 90

Funciones intrnsecas en Fortran 90


En Fortran 77, las matrices se definen en tiempo de compilacin. Qu quiere
decir esto? Que el compilador necesita saber el tamao de las matrices y
stas no pueden cambiar a lo largo del programa:
program llenamatriz
!
!
!

Este programa llena algunas matrices


use matrices1
implicit none

!
!
!

Tamao mximo de las matrices


integer, parameter :: NSIZE = 10
real*8
b(NSIZE,1), d(NSIZE), dl(NSIZE-1), du(NSIZE-1)
real*8
a(NSIZE,NSIZE),h(NSIZE,NSIZE)
integer i,j,n,nrhs
n = 10
nrhs = 1

!
!
!
!
!
!

a contiene una matriz tridiagonal,


d, dl y du son las diagonales de a.
h es la matriz de Hilbert.
do i=1,n
d(i) = 2d0
a(i,i) = d(i)
b(i,1) = i*1d0
do j=1,n
h(i,j) = 1d0/(i+j-1)
end do
end do
do i=1,n-1
dl(i) = 1
a(i+1,i) = dl(i)
end do
do i=1,n-1
du(i) = 1
a(i,i+1) = dl(i)

end do
call imprime_matriz1(h(1:n,1:n),n)
end

Hay varios puntos a notar:


Este programa est hecho en fortran 90. En la lnea
use matrices
estamos incluyendo un mdulo. Los mdulos son estructuras de programacin al igual
que program, function o subroutine. Los mdulos pueden agrupar datos, rutinas o
ambas cosas. Siempre los incluimos antes de implicit none. Se pueden incluir uno o
ms mdulos, e incluso mdulos pueden incluir otros mdulos. El mdulo matrices est
aqu.
En la lnea
integer, parameter :: NSIZE = 10
estamos declarando y definiendo el valor de la 'variable' NSIZE. Esta forma de
declarar variables es nueva en Fortran 90. Bsicamente consta del tipo, y los atributos
(parameter es un atributo del tipo integer), seguido de un doble dos puntos y la declaracin
especfica de las variables.
Observen que NSIZE est declarado como parmetro. Esto quiere decir que no es posible
cambiar su valor. Por ejemplo, agreguen la lnea:
NSIZE = 4
en algn lugar del programa y ven qu pasa.
Las matrices y vectores
real*8
real*8

b(NSIZE,1), d(NSIZE), dl(NSIZE-1), du(NSIZE-1)


a(NSIZE,NSIZE)

tienen tamaos definidos por NSIZE. Esto quiere decir que, por ejemplo, la matriz a
tiene un tamao mximo de NSIZExNSIZE. Si por alguna razn necesito una matriz ms
grande, tengo que cambiar NSIZE y recompilar el cdigo. En Fortran 90 se pueden definir
los tamaos de las matrices en el momento de correr el programa. A este procedimiento se
lo denomina allocacin dinmica de memoria.

La subrutina imprime_matriz1 est definida en el mdulo matrices1.


Entonces no es necesario declararla como external, tal como hacamos antes con
funciones o rutinas que no estaban en el mismo archivo.

Funciones intrnsecas para el manejo de matrices


Fortran 90 tiene includas muchas funciones para manejar matrices, entre ellas matmul para
multiplicar matrices, transpose que calcula la matriz traspuesta, etc. Una lista de todas las
funciones intrnsecas de Fortran 90 est aqu o en este pdf.

You might also like