Introducción Básica de Fortran

Instructor: Darío Mitnik


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:

      print*,'Hello world !!'                                   

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:

       
real*8 x,y

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

		y = sin(x)                                   

por la función

		y = func_sin(x)                                   

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.