Compilar y correr un programa
El objetivo de esta guía es brindar un conocimiento básico
del idioma Fortran, en tan sólo unos pocos minutos.
Para ello, en lugar de seguir los métodos tradicionales
vamos a cortar camino, utilizando y modificando programas ya
escritos.
El primer ejemplo que vamos a usar es un programa muy simple,
llamado hello.f:
Program Hello
c..... First example
c..... Just say Hello and quit
print*, 'Hello world !!'
stop
end
|
Este es un programa escrito en lenguaje Fortran, y es entendible para
(algunos) humanos, pero no por la computadora.
Por lo tanto, debemos traducirselo a un lenguaje que ella pueda comprender.
Eso es lo que se llama compilación. Cada vez que se modifica el programa
Fortran original (el source code), se debe recompilarlo.
Vamos a tratar de correr ese programa.
Veamos primero en que consiste. La línea mas interesante es:
que obviamente, le dice a la computadora que escriba "Hello world !!" en
la pantalla..
La forma de compilar este programa es:
problemas> f77 hello.f -o hello.x
|
Después de lo cual, el compiler debería crearnos el
programa ejecutable hello.x. Si éste no existe,
entonces hicimos algo mal.
Ahora, corremos el programa:
problemas> ./hello.x
problemas> Hello world !!
|
Nota: Los programas de Fortran 77 empiezan a partir de la columna 7.
Toda línea que empieza con una c es un comentario.
Modifiquemos ahora el programa, y en lugar de imprimir el texto
en la pantalla, hagámoslo en un file llamado "hello.txt".
Program Hello
c..... Second example
c.... Say Hello, but now in an output file
c...... open output file
open (unit=10,file='hello.txt',status='new')
write(10,*) 'Hello world !!'
c...... close output file
close (unit=10)
stop
end
|
Si hicimos todo bien, deberá aparecer en nuestro directorio el
file hello.txt. Abrilo y fijate si está correcto.
Hagamos ahora algo un poquito mas útil.
Vamos a compilar y ejecutar un programa que calcula el seno de
una función.
El programa se llama
senocalc.f y es asi:
program sin_calc
c..... Calculation of sin(x) for a given x
print*,' Calculation of sin(x)'
c.... reading input
100 print*,' give the value of x (rad):'
read*,x
c..... calculation of sin(x)
y = sin(x)
print*,' x (rad) =:',x,' sin(x)=:',y
c..... finish
print*,' continue? ("no=0" "yes=1") '
read*,icont
if (icont.ne.0) go to 100
stop
end
|
Ejercicio: Modificar el programa de manera
que los datos iniciales estén dados en grados, en lugar de
radianes. (Si no sale, se puede ver una forma de hacerlo en
senocalc2.f)
Ejercicio: Agregar en la segunda línea
del programa la siguiente expresión:
Para que quede más claro el efecto que produce esta modificación,
se puede cambiar la línea
print*,' x (rad) =:',x,' sin(x)=:',y
|
por las dos líneas siguientes:
print150,x,y
150 format(2x,'x (rad) =:',f12.8,5x,'sin(x)=:',f12.8)
|
Ahora vamos a combinar todo lo que hicimos en una aplicación
más útil y general.
Crearemos un documento que constará de dos columnas: en la
primera vamos a poner diversos ángulos, y en la segunda el
seno de estos ángulos. El programa se llama
seno.f y es asi:
program table_sin
c....... This program prints two columns in file "tablesin.dat"
c X: "npoints" angles between 0 and 3*Pi
c Y: sin(X)
c....... variables declaration
implicit none !! this is another way to comment
integer i,npoints
real*8 x,y,Pi,dang
data npoints/50/
c...... output file
open (unit=15,file='tablesin.dat',status='unknown')
c...... calculation of Pi
Pi = 2.0d0*dasin(1.0d0)
c...... calculation of angular step
dang = 3.0d0*Pi/npoints
c...... table generation
x = -dang
do 100 i=1,npoints
x = x + dang
y = sin(x)
write(15,25) x,y
100 continue
25 format(5x,f10.3,3x,f14.4)
c..... close file
close (unit=15)
stop
end
|
De haber hecho todo bien, deberemos encontrar en nuestro directorio
un documento llamado "tablesin.dat" que consta de dos columnas.
Podemos graficar estos resultados, haciendo por ejemplo:
problemas> xmgrace tablesin.dat
|
Ahora estamos listos para graficar cualquier otro tipo de función.
Modifiquemos el programa usando una función, tal como
hicimos en el programa seno2.f.
Esto es, reemplacemos la línea
por la función
siendo func_sin(x) una función externa:
real*8 function func_sin(x)
func_sin = sin(x)
return
end
|
Graficá los resultados de este nuevo programa.
Los resultados estarán en el documento "tablesin2.dat".
Se pueden comparar con los resultados anteriores haciendo:
problemas> xmgrace tablesin.dat tablesin2.dat
|
Si hicimos todo bien, los resultados de seno2.f:
deberán estar mal !!
La solución a este problema se encuentra en el
programa seno3.f.
Compará el nuevo programa y notá la modificación.
Graficá los resultados nuevos (tablesin3.dat).
Lecturas Auxiliares Recomendadas:
Introduction to Fortran - A Reference Manual - Aleksandar Donev.
Introduction to programming in Fortran by Tim Chartier.
|