Академический Документы
Профессиональный Документы
Культура Документы
CUCEI
Alumno: Profesor:
Hugo Alexis Rorres Pasillas Federico Angel Velazquez Muñoz
13 de mayo de 2018
Índice
1. Introducción a Fortran 2
1.1. Elementos básicos del lenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2. Constantes y variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4. Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5. Cı́clos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.6. Condicionales (IF) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.7. Entrada y salida de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Pelota rebotando 5
3. Tiro parabólico 5
4. Derivación 6
4.1. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5. Integración 8
5.1. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
6. Ecuaciones Diferenciales 9
6.1. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7. Métodos de Runge-Kutta 11
7.1. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
8. Ecuación de difusión 12
8.1. Difusión de calor en 1D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
8.2. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
8.3. Difusión de calor en 2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
8.4. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9. Ecuación de onda 15
9.1. Aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
10.Códigos 17
10.1. Apéndice 1: Pelota rebotando . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10.2. Apéndice 2: Tiro parabólico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
10.3. Apéndice 3: Derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
10.4. Apéndice 4: Integración numérica . . . . . . . . . . . . . . . . . . . . . . . . . . 21
10.5. Apéndice 5: Ecuaciones diferenciales . . . . . . . . . . . . . . . . . . . . . . . . 22
10.6. Apéndice 6: Runge-Kutta de 2do orden . . . . . . . . . . . . . . . . . . . . . . 23
10.7. Apéndice 7: Difusión de calor en 1D . . . . . . . . . . . . . . . . . . . . . . . . 25
10.8. Apéndice 8: Difusión de calor en 2D . . . . . . . . . . . . . . . . . . . . . . . . 27
10.9. Apéndice 9: Ecuación de onda en 2D . . . . . . . . . . . . . . . . . . . . . . . . 29
1
1. Introducción a Fortran
Fortran(formula translator) es un lenguaje de programación de alto nivel de propósito
general, aunque utilizado principalmente para el cálculo numérico y el cómputo cientı́fico.
Fue creado a finales del año 1953 por John W. Backus como una alternativa al lenguaje
ensamblador, utilizado por la empresa IBM.
Después de su creación, aparecieron otras versiones, las cuales pretendı́an mejorar el len-
guaje, entre las que destacan Fortran II, Fortran 77 y fortran 95.
Los programas de fortran se pueden escribir en cualquier editor de texto, conocido como
código fuente, usando la extensión .f o .95.
Una vez escrito el programa, se debe compilar, es decir, se debe generar un archivo eje-
cutable a partir de este, mediante un compilador, el cual cambia el código por instrucciones
reconocibles por la computadora.
Nombre del programa. El código debe iniciar con la instrucción Program, seguido del
nombre del programa, y debe finalizar con la instrucción end program
Cuerpo del programa. Es la parte donde están las instrucciones que ejecutará la compu-
tadora.
Se pueden utilizar además subrutinas dentro de un programa, con el fin de reutilizar partes
de código que se deben ejecutar varias veces, con un propósito especı́fico.
Los programas de fortran se deben escribir en lı́neas de a lo más 132 caractéres, y deben
comenzar por 6 espacios en blanco, los cuales son ignorados al ejecutarse este.
2
Logical: solo pueden tener dos valores, verdadero (.true.) o falso (.false.)
Real: puede contener cualquier valor numérico, el cual se tratará como un número real
(con decimales).
1.3. Operaciones
Ya que Fortran está destinado al cómputo numérico, es importante conocer la forma de
realizar operaciones matemáticas con los datos, siempre que estos sean del tipo correcto, de
lo contrario dará un error al compilar. Los sı́mbolos para realizar dichas operaciones son:
+ Suma.
- Resta.
* Multiplicación.
/ División.
** Exponenciación.
1.4. Arreglos
Una forma muy común de guardar datos es mediante arreglos, que corresponden a por-
ciones de la memoria que pueden guardar más de un dato, cada uno identificado por ı́ndices.
Los arreglos se declaran de la misma manera que las variables, sin embargo, hay que poner
delante de esta el número de datos que contendrá (en 1 o dos componentes), por ejemplo:
real, dimension(3) :: v
real, dimension(4,5) :: m
Y para acceder a cada uno de los datos que contiene, se utilizarán los ı́ndices (1 o 2)
correspoendientes, de 1 hasta el valor máximo definido.
1.5. Cı́clos
Se utilizan los cı́clos cuando se requiere ejecutar un conjunto de instrucciones muchas
veces, y tiene una forma estándar dada por:
do i=inicio, fin, incremento
comando 1
comando 2
comando 3
...
end do
3
De esta manera, todos los comandos que están contenidos dentro de la lı́nea de do y la
de end do se ejecutarán varias veces. La primera vez la variable i tomará el valor de inicio,
y cada vez irá incrementando en incremento, hasta que sobrepase el valor de fin, donde se
detendrá el ciclo y se continuará con la ejecución de las instrucciones siguientes.
4
2. Pelota rebotando
Cuando soltamos una pelota a una cierta altura (o la lanzamos con una velocidad inicial
desde una algura h = 0), esta realizará un movimiento descrito por las ecuaciones de la caı́da
libre:
1
y = yo + voy t − gt2 (2.1)
2
De esta forma(Apéndice 1), podemos realizar la simulación de una pelota que es lanzada
desde el piso, y que cada vez que llega al piso nuevamente, esta rebota sin perder energı́a.
Figura 1: Pelota que rebota, después de ser lanzada con una velocidad vo
Como vemos en la figura (2), la pelota comienza con una altura h = 0, sin embargo, como
la velocidad es positiva, esta comienza a subir hasta que la velocidad se hace 0, y a partir de
entonces comienza a caer.
Al volver a llegar a la altura h = 0, invertimos la velocidad, de manera que esta comienza
a subir nuevamente.
3. Tiro parabólico
Uno de los temas de gran interés para la fı́sica, es el de describir el movimiento de un
objeto, cuyo movimiento es influenciado únicamente por la fuerza de la gravedad.
Podemos dividir el movimiento en sus dos componentes, una sobre el eje vertical, el cual se
describe mediante las ecuaciones de la caı́da libre, y otro para la velocidad horizontal, la cual
es constante, ya que no existe ninguna fuerza actuando en esta dirección. De esta manera, el
movimiento queda descrito por
5
1
y = yo + voy t − gt2 (3.1)
2
x = vox t (3.2)
Al realizar la simulación de unobjeto que es lanzado desde una altura yo con velocidades
vyo y vxo , vemos que la trayectoria que describe es (Apéndice 2):
Como vemos en la figura 3, el objeto comienza a una altura yo = 20, y a partir de entonces
comienza a subir debido a la velocidad inicial hasta que su velocidad se hace 0. A partir de
la figura, observamos que el objeto describe una trayectoria parabólica, razón por la cual se
le denomina tiro parabólico a este movimiento.
4. Derivación
Uno de los elementos más importantes dentro del cálculo es el concepto de la derivada,
la cual nos indica cómo cambia el valor de la función cuando cambia alguna(s) variable(s)
independiente(s).
Partiendo de la definición de la derivada de una función dada por:
f (xo + h) − f (xo )
f 0 (x) = lı́m (4.1)
h→0 h)
Podemos aproximar la derivada de una función en un punto, si tomamos la igualdad en
lugar del lı́mite. De esta forma, definimos dos derivadas:
Diferencias adelantadas:
6
f (xo + h) − f (xo )
f 0 (x) ≈ (4.2)
h
Diferencias atrasadas:
f (xo ) − f (xo − h)
f 0 (x) ≈ (4.3)
h
Ambas son buenas aproximaciones de la función, siempre que el intervalo h sea lo sufi-
cientemente pequeño; la primera nos indica el cambio de la función cuando la variable in-
dependiente aumenta, mientras que la segunda nos indica el cambio de la función cuando
la variable independiente disminuye. Esta claro que, conforme disminuyamos el intervalo h,
ambas derivadas se irán aproximando hasta la derivada real de la función en ese punto.
Sin embargo, para disminuir el error, se toma el promedio de las derivadas adelantada y
atrasada en ese punto, conocido como diferencias centradas:
4.1. Aplicación
Se utiliza el método para encontrar la derivada de una función, en este caso para f (x) =
sin(x) en el intervavalo [0, 2π]. (Apéndice 2)
La imgágen superior nos muestra la función f (x), mientras que la inferior nos muestra su
derivada. En los extremos se utilizan las derivadas atrasadas y adelantadas, mientras que en
todos los demás puntos se realizan las derivadas centradas. Se utiliza el método dos veces; en
la figura 3a vemos el resultado, utilizando 10 intervalos, mientras que en la figura 3b vemos
el mismo método, pero utilizado con 50 intervalos.
Como se puede apreciar en la figura 3, el método nos da buenas aproximaciones de la
derivada de una función, cuando utilizamos suficientes intervalos para realizar derivada.
7
5. Integración
Otro de los conceptos fundamentales del cálculo, es el de la integral, la cual nos da el área
bajo la curva de una función en un intervalo definido.
La integración numérica comprende un gran número de algoritmos que permiten calcular
el valor numérico de una integral definida, cada uno con sus respectivos errores.
El problema básico que se trata resolver es el de calcular una solución apoximada de la
integral
Z b
f (x)dx (5.1)
a
Uno de los métodos que nos permite tener el menor error, es el conocido como la regla de
Simpson, que consiste en dividir el intervalo en intervalos más pequeños, y encontrar el área
de estos intervalos, aproximándolos al área de una parábola que se ajuste a la función.
Al igual que con el método de los rectángulos, se realiza una mejor aproximación cuando
el intervalo se divide en un mayor número de puntos. Sin embargo, al utilizar parábolas en
lugar de rectángulos, la integral contiene un menor error que el método de los rectángulos,
aun cuando no se realicen demaciadas diviciones.
Realizando la interpolación de una parábola en cada intervalo, vemos que la integral está
dada por:
Z b
a+b
f (x)dx = f (a) + 4 + f (b) (5.2)
a 2
5.1. Aplicación
Como ejemplo, se realiza una integral fácilmente calculable, con el fin de comparar el
resultado.
8
En este caso, utilizamos la función f (x) = x sin(x) en el intervalo de 0 a 3 ∗ pi. Realizando
esta integral sabemos que la integral es
Z 3π
x sin(x) = 3π ≈ 9,42478
0
Utilizando el método de Simpson realizando 20 subdiviciones (Apéndice 3), de manera que
los intervalos tengan un valor de h = 3 ∗ π/20, el valor obtenido es de
Z 3π
x sin(x) ≈ 9,42494011
0
Como vemos, aun con relativamente pocos intervalos el valor obtenido numéricamente de
la integral se aproxima muy bien al valor real.
6. Ecuaciones Diferenciales
Un tema de gran interés tanto por la fı́sica como por muchas otras áreas es el de las ecua-
ciones diferenciales, ya que nos permite modelar sistemas mediante sus cambios. Sin embargo,
aunque se lleva ya mucho tiempo el estudio de este tipo de ecuaciones, muchas veces su reso-
lución analı́tica es demasiado complicada o incluso imposible hasta para los matemáticos más
experimentados. Es por ello que se han inventado muchos métodos de resolución mediante el
uso de las computadoras.
Uno de los métodos más utilizados, y que además nos sirve para una gran cantidad de
ecuaciones diferenciales con valor inicial, es el método de las diferencias finitas, el cual consiste
en reemplazar cada una de las derivadas que intervienen la ecuación por sus apoximaciones
numéricas. De esta manera, se obtiene una relación de recurencia que nos permite obtener
todos los valores a partir de las condiciones iniciales, aunque con un error que la gran mayorı́a
de veces puede ser despreciado.
Recordando la propia definición de la derivada, podemos utilizar la aproximación para la
derivada adelantada como sigue:
f (x + h) − f (x)
f (x) ≈ (6.1)
h
Además, si recordamos que la segunda derivada de una función es la derivada de su primera
derivada, entonces podemos escribir
f 0 (x + h) − f 0 (x)
f 00 (x) ≈ (6.2)
h
Donde las derivadas f 0 (x + h)yf 0 (x) las podemos sustituir a su vez por las aproximaciones
de la primera derivada.
Podemos encontrar aproximacines de las derivadas de orden superior, reemplazando cada
vez las derivadas de orden inferiores. Además, se pueden utilizar las derivadas centradas con
el fin de disminuir el error. El método de diferencias finitas consiste en reemplazar estas
aproximaciones en la ecuación diferencial y encontrar una relación de recurencia a partir de
esta ecuación.
9
6.1. Aplicación
Una de las ecuaciones más comunes dentro de la fı́sica, es la de la segunda ley de Nuewton,
la cual nos describe la cinemática de un cuerpo sometido a varias fuerzas. Podemos utilizar
esta ecuación para el caso en el que la única fuerza que actúa en un objeto es el de la gravedad,
de esta forma, la ecuación diferencial que nos resulta es
d2 y
= −g (6.3)
dt2
donde g es la constante de gravedad, y en la superficie de la Tierra tiene un valor aproximado
de g = 9,81m/s2
Si cambiamos la segunda derivada por su derivada centrada, tenemos
De esta manera, tenemos la ecuación de recurrencia, lo que nos permite obtener la apro-
ximación de la solución a la ecuación diferencial de segundo orden a partir de los dos valores
iniciales.
Como podemos ver en la fitura 5, la solución a esta ecuación por este método nos da una
buena idea acerca de cómo se comporta la función solución de la ecuación; sin embargo, se
puede ver también que la solución no es exacta, sino que lleva un error, el cual va aumentando
conforme se busquen valores más lejanos a las condiciones iniciales.
10
7. Métodos de Runge-Kutta
Dentro de los métodos numéricos para la resolución de ecuaciones diferenciales, los llama-
dos métodos de Runge-Kutta (RK) son, quizá, los más importantes, ya que logran obtener
una gran exactitud sin la necesidad de dividir en demasiados intervalos.
Existen muchos métodos distintos de Runge-Kutta para la resolución de ecuaciones dife-
renciale, sin embargo, todos tienen la forma general dada por:
φ = a1 k1 + a2 k2 + a3 k3 + · · · + an kn (7.2)
donde las a son algunas constantes y las k son
k1 = f (xi , yi ) (7.3)
k2 = f (xi + p1 h, yi + q11 k1 h)
k3 = f (xi + p2 h, yi + q21 k1 h + q22 k2 h)
..
.
kn = f (xi + pn−1 h, yi + q(n−1)1 k1 h + q(n−2)2 k2 h + . . . q(n−1)(n−1)kn−1 h)
donde las p y las q son algunas constantes. Una vez que se elige el orden del método de
Runge-Kutta a utilizar, las constantes a, q, y p se encuentran igualando las ecuaciones con
los primeros n términos de la serie de Taylor.
Eligiendo n = 2, el método de Runge-Kutta de segundo orden e igualando las k con los
términos de la serie de Taylor, se obtiene el sistema de ecuaciones
a1 = 1 − a2 (7.4)
1
p1 = q11 = (7.5)
2a2
De esta forma, podemos tener varios métodos de Runge-Kutta de segundo orden depen-
diendo del valor que usemos para a2 .
7.1. Aplicación
Podemos resolver la ecuación de la segunda ley de Newton para el caso de un objeto en el
campo gravitatorio de la Tierra. De esta forma, la ecuación diferencial resultante es
d2 y
= −g (7.6)
dt2
donde g es la constante gravitatoria, que tiene un valor de g = 9,81m/s2 cerca de la superficie
de la Tierra.
11
Sin embargo, ya que la ecuación anterior es de segundo orden, podemos cambiarla por el
sistema de ecuaciones siguiente:
dy
=V (7.7)
dt
dV
= −g
dt
y ası́ utilizar el método de Runge-Kutta dos veces; una para encontrar las velocidades en
función del tiempo, y la segunda para encontrar las posiciones en función del tiempo, las
cuales a su vez utilizan los resultados obtenidos de las velocidades.
Usando una velocidad inicial de 20m/s y una posición inicial de 10m, el resultado obtenido
por el método para esta ecuación diferencial es
8. Ecuación de difusión
Una de las aplicaciones principales de las ecuaciones derivadas parciales, es el de simular
procesos que ocurren a nuestro alrededor a través del tiempo.
12
La ecuación de difusión de calor, es una ecuación en derivadas parciales homogénea de
primer orden que nos describe cómo se conduce el calor a través de un medio. Dicha ecuación
queda escrita como
∂T
= c2 ∇2 T (8.1)
∂t
∂T ∂2T
= c2 2 (8.2)
∂t ∂x
sobre la región
0<x<L y 0<t<∞
bajo las condiciones de frontera e iniciales dadas por
T (0, t) = T1 (8.3)
T (L, t) = T2
T (x, 0) = To
∂T Ti+1,k − Ti.k
≈ (8.4)
∂t ∆t2
∂2T Ti+1,k − 2Ti,k + Ti−1,k
≈
∂x2 ∆x2
Finalmente, utilizando estas discretizaciones en la ecuación de difusión de calor unidimen-
sional y reorganizando, obtenemos la relación de recurrencia:
∆t
Ti,k+1 = Ti,k + c2 [Ti+1,k − 2Ti,k + Ti−1,k ] (8.5)
∆x2
8.2. Aplicación
Utilizamos la ecuación de difusión de calor para una varilla de longitud L = 1m, con las
condiciones siguientes (Apéndice 7):
T (0, t) = 20 (8.6)
T (L, t) = 0
T (x, 0) = 5
13
Figura 7: Distribución de la temperatura en una varilla a distintos tiempos.
es decir, una barra con temperatura inicial de 5o C, la cual se somente a una temperatura
de 20o C en un extremo y de 0o C en el otro. De esta forma, se obtiene la distribución de la
temperatura en la varilla en diferentes tiempo siguiente:
Como podemos observar en la figura 7, al inicio la temperatura es constante en toda la
varilla, con un cambio brusco en cada extremo. Sin embargo, al pasar alguń tiempo la variación
de la temperatura con la posición x es constante, como se esperarı́a debido a la experiencia.
∂T ∂2T ∂2T
= c2x 2 + c2y 2 (8.7)
∂t ∂x ∂y
En este caso, podemos sustituir nuevamente las discretizaciones de la temperatura, tal
como lo hicimos en el caso unidimensional, con lo que nos queda la discretización como:
∆t ∆t
Ti,j,k+1 = Ti,j,k + c2x 2
[Ti+1,j,k − 2Ti,j,k + Ti−1,j,k + c2y [Ti,j+1,k − 2Ti,j,k + Ti,j−1,k ] (8.8)
∆x ∆x2
8.4. Aplicación
En este caso, utilizamos la ecuación de difusión de calor bidimensional para simular una
placa sobre la que se transmite el calor, por lo que cambia la temperatura (Apéndice 8).
Como condiciones iniciales, se utiliza una placa a temperatura To = 0o C. Posteriormente,
se pone una fuente de calor rectangular sobre el centro de esta placa, la cual es constante
durante todo el tiempo, y como condiciones de frontera, se establece que la temperatura en
14
los bordes de la placa sea igual que en los puntos adyacentes de la discretización. Después de
algún tiempo, la distribución de la temperatura sobre la placa es:
9. Ecuación de onda
La ecuación de onda es otra de las ecuaciones diferenciales de gran interés fı́sico. Se trata
de una ecuación diferencial en derivadas parciales sineal de segundo grado, la cual describe la
propagación de alguna onda en un medio.
Es importanet en varios campos de la fı́sica, tales como la acústica, la óptica, la hidrologı́a,
etc. y está descrita de forma general por
∂2u
= c2 ∇2 u (9.1)
∂t2
donde u es alguna propiedad que se propaga por el espacio, y c es la velocidad de movimiento
de la onda.
Nuevamente, la onda puede viajar en 1, 2 o 3 dimensiones, por lo que la función depende
de las dimensiones espaciales de la onda y del tiempo.
Para el caso bidimensional, podemos utilizar las discretizaciones de las derivadas tal como
lo hicimos con la ecuación de difusión de calor. En este caso, la discretización de la onda nos
queda de la forma:
9.1. Aplicación
Como ejemplo, tomamos una onda sinuidal plana que se desplaza a lo largo del espacio
bidimensional, cuyo frente de onda es constante a lo largo de la recta x = cte (Apéndice 9).
15
Como condiciones de frontera, establecemos que la perturbación se realiza en la recta
x = 0, la cual varı́a con el tiempo en forma de onda sinuidal, mientras que en todas las
fronteras restantes, el valor de la perturbación tomará el valor que toma el punto adyacente.
Además, como condiciones iniciales, la perturbación en toda la región es cero.
Después de un tiempo t, la perturbación toma la forma siguiente.
Como podemos ver en la figura 9, la perturbación de la onda viaja a lo largo del eje y,
mientras que a lo largo de la recta x = cte, la perturbación es la misma. La perturbación viaja
en este caso en la dirección positiva, ya que utilizamos una velocidad de 0.1m/s, y una vez
que choca contra el otro extremo, la perturbación se regresa, interfiriendo con la onda que se
mueve en el sentido contrario.
16
10. Códigos
10.1. Apéndice 1: Pelota rebotando
1 PROGRAM CLibre
2
3 IMPLICIT NONE
4
5 INTEGER, PARAMETER : : n=100
6 REAL, PARAMETER : : g=−9.81
7 REAL, PARAMETER : : PI =3.141592
8 INTEGER : : i
9 REAL : : yo
10 REAL : : vo
11 REAL : : v horizontal
12 REAL : : t h e t a
13 REAL : : t t o t a l
14 REAL : : dt
15 REAL, DIMENSION( n ) : : x
16 REAL, DIMENSION( n ) : : y
17 REAL, DIMENSION( n ) : : v v e r t i c a l
18 REAL, DIMENSION( n ) : : t
19
20
21 WRITE( ∗ , ∗ ) ’ A l t u r a i n i c i a l (m) : ’
22 READ( ∗ , ∗ ) yo
23 WRITE( ∗ , ∗ ) ’ V e l o c i d a d i n i c i a l (m/ s ) : ’
24 READ( ∗ , ∗ ) vo
25 WRITE( ∗ , ∗ ) ’ Angulo i n i c i a l ’
26 READ( ∗ , ∗ ) t h e t a
27 t h e t a=t h e t a ∗ ( PI / 1 8 0 )
28
29 WRITE( ∗ , ∗ ) ’ I n t r o d u z c a e l tiempo t o t a l d e l r e c o r r i d o ’
30 READ( ∗ , ∗ ) t t o t a l
31
32 dt=t t o t a l /n
33 v h o r i z o n t a l=vo ∗ c o s ( t h e t a )
34 v v e r t i c a l ( 1 )=vo ∗SIN ( t h e t a )
35
36 OPEN( u n i t =100 , f i l e =’ d a t o s . dat ’ )
37 DO i =1 ,n
38
39 IF ( i ==1) THEN
40 t ( 1 ) =0
41 x ( 1 ) =0
42 y ( 1 )=yo
43 ELSE
44 t ( i )=t ( i −1)+dt
45 v v e r t i c a l ( i )=v v e r t i c a l ( i −1)+g ∗ dt
46
47 x ( i )=x ( i −1)+v h o r i z o n t a l ∗ dt
48 y ( i )=y ( i −1)+v v e r t i c a l ( i −1)∗ dt +(1/2) ∗ g ∗ dt ∗∗2
49 ENDIF
50
51 WRITE( 1 0 0 , 1 5 0 ) t ( i ) , x ( i ) , y ( i )
52 ENDDO
53
54 150 FORMAT( 3 f 8 . 2 )
55
56 CLOSE( 1 0 0 )
57 STOP
58
59 END PROGRAM
17
10.2. Apéndice 2: Tiro parabólico
1 PROGRAM CLibre
2
3 IMPLICIT NONE
4
5 INTEGER, PARAMETER : : n=100
6 REAL, PARAMETER : : g=−9.81
7 REAL, PARAMETER : : PI =3.141592
8 INTEGER : : i
9 REAL : : yo
10 REAL : : vo
11 REAL : : v horizontal
12 REAL : : t h e t a
13 REAL : : t t o t a l
14 REAL : : dt
15 REAL, DIMENSION( n ) : : x
16 REAL, DIMENSION( n ) : : y
17 REAL, DIMENSION( n ) : : v v e r t i c a l
18 REAL, DIMENSION( n ) : : t
19
20
21 WRITE( ∗ , ∗ ) ’ A l t u r a i n i c i a l (m) : ’
22 READ( ∗ , ∗ ) yo
23 WRITE( ∗ , ∗ ) ’ V e l o c i d a d i n i c i a l (m/ s ) : ’
24 READ( ∗ , ∗ ) vo
25 WRITE( ∗ , ∗ ) ’ Angulo i n i c i a l ’
26 READ( ∗ , ∗ ) t h e t a
27 t h e t a=t h e t a ∗ ( PI / 1 8 0 )
28
29 WRITE( ∗ , ∗ ) ’ I n t r o d u z c a e l tiempo t o t a l d e l r e c o r r i d o ’
30 READ( ∗ , ∗ ) t t o t a l
31
32 dt=t t o t a l /n
33 v h o r i z o n t a l=vo ∗ c o s ( t h e t a )
34 v v e r t i c a l ( 1 )=vo ∗SIN ( t h e t a )
35
36 OPEN( u n i t =100 , f i l e =’ d a t o s . dat ’ )
37 DO i =1 ,n
38
39 IF ( i ==1) THEN
40 t ( 1 ) =0
41 x ( 1 ) =0
42 y ( 1 )=yo
43 ELSE
44 t ( i )=t ( i −1)+dt
45 v v e r t i c a l ( i )=v v e r t i c a l ( i −1)+g ∗ dt
46
47 x ( i )=x ( i −1)+v h o r i z o n t a l ∗ dt
48 y ( i )=y ( i −1)+v v e r t i c a l ( i −1)∗ dt +(1/2) ∗ g ∗ dt ∗∗2
49 ENDIF
50
51 WRITE( 1 0 0 , 1 5 0 ) t ( i ) , x ( i ) , y ( i )
52 ENDDO
53
54 150 FORMAT( 3 f 8 . 2 )
55
56 CLOSE( 1 0 0 )
57 STOP
58
59 END PROGRAM
18
10.3. Apéndice 3: Derivadas
1 program d e r i v a d a
2
3
4
5 i n t e g e r , p a r a m e t e r : : d i =10
6 r e a l , p a r a m e t e r : : PI =3.1416
7 real : : a ,b
8 r e a l : : dx
9 integer : : i
10 r e a l , dimension ( di ) : : x
11 r e a l , dimension ( di ) : : y
12 r e a l , dimension ( di ) : : yder
13
14
15 a=0
16 b=2∗PI
17 dx=(b−a ) / d i
18
19 open ( u n i t =100 , f i l e =’ d a t s . dat ’ )
20
21 do i =1 , d i
22 i f ( i ==1) then
23 x ( i )=a
24 else
25 x ( i )=x ( i −1)+dx
26 endif
27
28 enddo
29
30 c a l l funcion (x , y)
31
32
33
34
35
36 call d e r i v a t t l ( x , y , dx , y d e r )
37
38
39 do i =1 , d i
40 w r i t e (100 ,200) x ( i ) , y ( i ) , yder ( i )
41 enddo
42
43 200 format (3 f 8 . 2 )
44 cl ose (100)
45
46 end program d e r i v a d a
47
48 c −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
49 subroutine funcion (x , y)
50
51
52 i n t e g e r , p a r a m e t e r : : d i =50
53 r e a l , dimension ( di ) : : x
54 r e a l , dimension ( di ) : : y
55
56 y = sin (x)
57
58
59
60 return
61 end
62
63 c −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
19
64
65 s u b r o u t i n e d e r i v a t t l ( x , y , dx , y d e r )
66
67
68 i n t e g e r , p a r a m e t e r : : d i = 50
69 integer : : i
70 r e a l : : dx
71
72 r e a l , dimension ( di ) : : x
73 r e a l , dimension ( di ) : : y
74 r e a l , dimension ( di ) : : yder
75
76
77 y d e r ( 1 ) =(y ( 2 )−y ( 1 ) ) /dx
78
79 do i =2 , di −1
80 y d e r ( i ) =(y ( i +1)−y ( i −1) ) / ( 2 ∗ dx )
81 enddo
82
83 y d e r ( d i ) =(y ( d i )−y ( di −1) ) /dx
84
85 return
86 end
20
10.4. Apéndice 4: Integración numérica
1 PROGRAM Simpson
2
3 IMPLICIT NONE
4
5 REAL, PARAMETER : : Pi = 3 . 1 4 1 5 9 2
6
7 REAL : : a,b
8 REAL : : Int , Intpar
9 REAL : : dx
10 REAL : : x1 , x2 , xm
11 REAL : : Fx1 , Fx2 , Fxm
12 INTEGER :: i ,n
13
14 a=0
15 b=3∗ p i
16
17 n=20
18 dx=(b−a ) /n
19
20
21 I n t =0
22
23 do i =1 ,n
24 x1=a+( i −1)∗dx
25 x2=x1+dx
26 xm= 0. 5∗( x1+x2 )
27
28 CALL f u n ( Fx1 , x1 )
29 CALL f u n ( Fx2 , x2 )
30 C a l l f u n (Fxm, xm)
31
32 I n t p a r = 1 / 6 . 0 ∗ dx ∗ ( Fx1+4∗Fxm+Fx2 )
33 I n t=I n t + I n t p a r
34 enddo
35
36 Write ( ∗ , ∗ ) I n t
37
38 END PROGRAM
39
40
41
42 SUBROUTINE f u n ( Fx , x )
43
44 REAL Fx , x
45 Fx = x∗ s i n ( x )
46
47 RETURN
48
49 END
21
10.5. Apéndice 5: Ecuaciones diferenciales
1 PROGRAM EDOsegundo
2
3 IMPLICIT NONE
4
5 INTEGER,PARAMETER : : n=50
6 REAL,PARAMETER : : g=−9.81
7 INTEGER : : i
8
9 REAL, DIMENSION( n ) : : y
10 REAL, DIMENSION( n ) : : t
11 REAL : : y1 , y2
12 REAL : : dt
13
14 OPEN( u n i t =100 , f i l e =’ d a t o s S . dat ’ )
15 y1=0
16 y2=3
17 dt =0.1
18 y ( 1 )=y1
19 y ( 2 )=y2
20
21 t ( 1 ) =0
22 t ( 2 )=t ( 1 )+dt
23
24 do i =1 ,n
25
26 IF ( i >2) THEN
27 y ( i ) =2∗y ( i −1)−y ( i −2)+g ∗ dt ∗∗2
28 t ( i )=t ( i −1)+dt
29 ENDIF
30
31 WRITE( 1 0 0 , 1 1 0 ) t ( i ) , y ( i )
32 ENDDO
33
34 110 FORMAT( 2 f 1 0 . 2 )
35 CLOSE( 1 0 0 )
36
37 END PROGRAM
22
10.6. Apéndice 6: Runge-Kutta de 2do orden
1 PROGRAM RungeKutta2
2
3 REAL : : Ti , Vi , Yi
4 INTEGER :: n, i
5 REAL : : dt
6 REAL : : V, Y
7
8 dt =0.1
9 n=50
10 Vi=20
11 V=Vi
12 Ti=0
13 Yi=10
14 Y=Yi
15
16 OPEN( u n i t =100 , f i l e =’ d a t o s . dat ’ )
17
18 WRITE( 1 0 0 , 1 5 0 ) Ti , V, Y
19
20 do i =1 ,n
21 Ti=Ti+dt
22 CALL RK2(V, Ti , Vi , dt )
23
24 CALL RK2V(Y, Ti , Yi , V, dt )
25
26 WRITE( 1 0 0 , 1 5 0 ) Ti , V, Y
27 Vi=V
28 Yi=Y
29
30 enddo
31
32 CLOSE( 1 0 0 )
33
34 150 FORMAT( 3 f 1 0 . 2 )
35
36
37 END PROGRAM
38
39
40 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
41 c−−−−−−−−−−−−−−−−−−−−−RUNGE KUTTA 2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
42 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
43 SUBROUTINE RK2( yf , x i , y i , h )
44
45 REAL :: h
46 REAL :: a2
47 REAL :: a1 , p1 , q11
48 REAL :: k1 , k2
49 REAL :: xi , y i
50 REAL :: xk2 , yk2
51
52
53 a2=1/2
54
55 a1=1−a2
56 p1 =1/(2∗ a2 )
57 q11=p1
58
59
60 CALL f u n c i o n ( k1 , x i , y i )
61
62 xk2=x i+p1 ∗h
63 yk2=y i+q11 ∗ k1 ∗h
23
64
65 CALL f u n c i o n ( k2 , xk2 , yk2 )
66
67 y f = y i + ( a1 ∗ k1 + a2 ∗ k2 ) ∗h
68
69 RETURN
70
71 END SUBROUTINE
72
73
74
75 SUBROUTINE RK2V( yf , x i , y i , Vo , h )
76
77 REAL :: h
78 REAL :: a2
79 REAL :: a1 , p1 , q11
80 REAL :: k1 , k2
81 REAL :: x i , y i , Vo
82 REAL :: xk2 , yk2
83
84
85 a2=1/2
86
87 a1=1−a2
88 p1 =1/(2∗ a2 )
89 q11=p1
90
91 k1=Vo
92 K2=Vo
93
94 y f = y i + ( a1 ∗ k1 + a2 ∗ k2 ) ∗h
95
96 RETURN
97
98 END SUBROUTINE
99
100 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
101 C−−−−−−−−−−−−−−−−−−FUNCION DE LA ODE−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
102 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
103
104 SUBROUTINE f u n c i o n ( fx , x , y )
105
106 REAL : : x , y
107 REAL : : f x
108
109 f x = −9.81
110
111 RETURN
112
113 END SUBROUTINE
114
115 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
116 c−−−−−−−−−−−−−−−−−−FUNCION: VELOCIDAD−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
117 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−!
118 SUBROUTINE v e l o c i d a d ( fx , Vo)
119
120 REAL : : Fx , Vo
121
122 Fx = Vo
123
124 RETURN
125
126 END SUBROUTINE
24
10.7. Apéndice 7: Difusión de calor en 1D
1 PROGRAM D i f u s i o n
2
3
4
5 REAL, PARAMETER : : dx =0.1
6 REAL, PARAMETER : : dt =0.2
7 REAL, PARAMETER : : L t o t =1 , Ttot=40
8 INTEGER, PARAMETER : : d i t=Ttot / dt
9 INTEGER, PARAMETER : : d i x=L t o t /dx
10 REAL : : t o
11 REAL : : t f
12 REAL, DIMENSION ( dix , d i t ) : : t
13 INTEGER i
14 INTEGER k
15 REAL : : c
16 real : : j
17
18 c−−−−−−−−−−−−−−CONDICIONES DEL SISTEMA−−−−−−−−c
19 c =0.08
20 t o =20
21 t f =0
22
23 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−c
24
25 OPEN( u n i t =100 , f i l e =’ d a t o s D i f u s i o n . dat ’ )
26
27 c−−−−−−−−−−−−−−−−−−CONDICIONES INICIALES−−−−−−c
28 T ( : , 1 ) =5
29 T( 1 , 1 )=t o
30 T( dix , 1 )=t f
31 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−c
32
33 c−−−−−SOLUCION A LA ECUACION DE DIFUSION−−−−−c
34 DO K=2 , d i t
35
36 DO i =1 , d i x
37
38 SELECT CASE( i )
39
40 CASE( 1 )
41 T( i , k )=t o
42 ! T( i , k )=T( i , k−1)∗ s i n ( r e a l ( k ) )
43 CASE ( d i x )
44 ! T( i , k )=T( i −1 ,k )
45 T( i , k )=t f
46
47
48 CASE DEFAULT
49
50
51 T( i , k )=t ( i , k−1)+(c ∗ ∗ 2 ) ∗ ( dt /dx ∗ ∗ 2 ) ∗
52 & (T( i +1 ,k−1)−2∗T( i , k−1)+T( i −1 ,k−1) )
53
54 END SELECT
55
56
57 ENDDO
58
59 ENDDO
60
61
62 c
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
25
c
63
64 WRITE( 1 0 0 , 1 5 0 ) T
65
66
67 CLOSE( 1 0 0 )
68 150 FORMAT( 1 0 f 1 0 . 2 )
69
70 END PROGRAM
26
10.8. Apéndice 8: Difusión de calor en 2D
1 PROGRAM D i f u s i o n 2 D
2
3
4 IMPLICIT NONE
5
6 REAL, PARAMETER : : PI =3.141592
7
8 REAL, PARAMETER :: dx =0.05
9 REAL, PARAMETER :: dy =0.05
10 REAL, PARAMETER :: dt =0.2
11 REAL, PARAMETER :: Xtot=2
12 REAL, PARAMETER :: Ytot=4
13 REAL, PARAMETER :: Ttot =300
14
15 REAL, PARAMETER : : Cf =0.055
16 REAL : : Cx , Cy
17 REAL : : Ca
18
19 INTEGER, PARAMETER : : d i x=Xtot /dx
20 INTEGER, PARAMETER : : d i y=Ytot /dy
21 INTEGER, PARAMETER : : d i t=Ttot / dt
22
23 REAL, DIMENSION( dix , d i y ) : : Ti
24 REAL, DIMENSION( dix , d i y ) : : Tf
25 REAL, DIMENSION( dix , d i y ) : : U,V
26
27 INTEGER : : i , j , k , l , uy
28 REAL : : Advx , Advy
29
30
31 INTEGER : : d a t o s
32 CHARACTER( l e n =19) : : nom
33
34 c−−−−−−−−−−−−−−−−−CALCULOS INICIALES−−−−−−−−C
35
36 Cx=(Cf ∗ ∗ 2 ) ∗ ( dt /dx ∗ ∗ 2 )
37 Cy=(Cf ∗ ∗ 2 ) ∗ ( dt /dy ∗ ∗ 2 )
38
39 Ca=0.10
40 c−−−−−−−−−−−−−CONDICIONES INICIALES−−−−−−−−−c
41 !!!!! Temperaturas T( x , y ) en toda l a p l a c a en e l tiemo t=0
42 U ( : , : ) =0
43 V ( : , : ) =0
44 Ti ( : , : ) = 0
45 DO l =35 ,45
46 ! Ti ( 1 , i ) =20
47 Ti ( 2 0 : 2 5 , l ) =20
48 ENDDO
49 ! Ti ( 1 , : ) =20
50 C−−−−−−−−−−−GUARDA CONDICIONES INICIALES−−−−C
51
52 d a t o s=1
53 CALL nombre ( d a t o s , nom)
54
55 OPEN( u n i t =100 , f i l e =nom)
56 WRITE( 1 0 0 , 1 5 0 ) Ti
57 CLOSE( 1 0 0 )
58
59 C−−−−−−APLICACION DE LA ECUACION DE DIFUSION−−−−−−−−C
60 tiempo :DO k=2 , d i t
61 ejeX :DO i =1 , d i x
62
63 SELECT CASE( i )
27
64 CASE( 1 )
65
66 Tf ( i , : ) =Ti ( 1 , : )
67 CASE( d i x )
68 Tf ( i , : ) =Ti ( i , : )
69 CASE DEFAULT
70
71 ejeY :DO j =1 , d i y
72
73 SELECTCASE( j )
74 CASE( 1 )
75 Tf ( i , j )=0
76 ! Tf ( i , j )=Ti ( i , j +1)
77 CASE( d i y )
78 Tf ( i , j )=0
79 ! f ( i , j )=Ti ( i , j −1)
80 CASE DEFAULT
81
82 V ( : , : ) =−c o s ( 2 ∗ PI ∗k / 1 5 0 0 )
83 !U ( : , : ) =c o s ( 2 ∗ PI ∗k / 6 0 0 )
84 Advx=u ( i , j ) ∗ ca ∗ ( Ti ( i +1 , j )−Ti ( i −1 , j ) )
85 Advy=V( i , j ) ∗ ca ∗ ( Ti ( i , j +1)−Ti ( i , j −1) )
86
87
88 Tf ( i , j )=Ti ( i , j )+Cx∗ ( Ti ( i +1 , j ) −2∗Ti ( i , j )+Ti ( i −1 , j ) ) +
89 & Cy∗ ( Ti ( i , j +1)−2∗Ti ( i , j )+Ti ( i , j −1) )
90 ENDSELECT
91
92 ENDDO ejeY
93 ! Tf ( : , 1 )=Tf ( : , 2 )
94 ! Tf ( : , d i y )=Tf ( : , diy −1)
95 ENDSELECT
96
97 ENDDO ejeX
98 !−−−−−−−−−−Guarda l o s d a t o s en un nuevo a r c h i v o −−−−−−−−−−−−−−−c
99
100 DO l =35 ,45
101 ! Ti ( 1 , i ) =20
102 Tf ( 2 0 : 2 5 , l ) =20
103 ENDDO
104 ! cambios :DO l =1 ,29
105
106 ! Tf ( 1 , l )=Tf ( 2 , l )
107 ! Tf (1 ,80 − l )=Tf (2 ,80 − l )
108 !ENDDO cambios
109
110 d a t o s=k
111 CALL nombre ( d a t o s , nom)
112 OPEN( u n i t =100 , f i l e =nom)
113 WRITE( 1 0 0 , 1 5 0 ) Tf
114 CLOSE( 1 0 0 )
115 Ti=Tf
116
117 ENDDO tiempo
118
119 150 format (40 f 7 . 2 )
120 END PROGRAM
121 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−c
122 C−−−−−−−−−−−−−−−−−−−−SUBROUTINE: Guardar d a t o s −−−−−−−−−−C
123 c−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−c
124
125
126 SUBROUTINE nombre ( i , nom)
127
128 INTEGER : : i
28
129 CHARACTER( l e n =4) : : i c h a r
130 CHARACTER( l e n =19) : : nom
131
132 200 format ( I4 . 4 )
133 WRITE( i c h a r , 2 0 0 ) i
134
135 nom=’ d a t o s / d a t o s ’ / / i c h a r // ’ . dat ’
136
137 END SUBROUTINE
29
10.9. Apéndice 9: Ecuación de onda en 2D
1 PROGRAM WaveEquation
2
3
4
5 REAL, PARAMETER : : PI = 3 . 1 4 1 5 9 2
6
7 REAL, PARAMETER :: dx = 1
8 REAL, PARAMETER :: dY = 1
9 REAL, PARAMETER :: dt = 0 . 1
10 REAL, PARAMETER :: Lx = 300
11 REAL, PARAMETER :: Ly = 50
12 REAL, PARAMETER :: T = 100
13
14 REAL : : Vx , Vy
15
16
17 INTEGER, PARAMETER : : PunX = Lx/dx
18 INTEGER, PARAMETER : : PunY = Ly/dY
19 INTEGER, PARAMETER : : Tk = T/ dt
20
21 REAL, DIMENSION(PunX , Puny ) : : Ho
22 REAL, DIMENSION(PunX , PunY) : : H1
23 REAL, DIMENSION(PunX , PunY) : : Hf
24
25 INTEGER : : i , j , k
26 REAL : : A1 , A2 , A3
27
28 CHARACTER ( 1 9 ) : : nom
29
30 Vx=10
31 Vy=10
32
33
34
35
36
37 !!−−−−−−−−−−−−−SOLUCION DE LA ECUACION DE ONDA−−−−−−−−−−−−−!!
38
39 DO k=1 , Tk
40 SELECT CASE( k )
41
42 CASE( 1 )
43 Ho ( : , : ) = 0
44
45 CALL nombre ( k , nom)
46 OPEN( u n i t =100 , f i l e =nom)
47 WRITE( 1 0 0 , 1 5 0 ) Ho
48 CLOSE( 1 0 0 )
49
50 CASE( 2 )
51 H1 ( : , : ) = 0
52 H1 ( 1 , : ) = s i n ( 2 ∗ PI ∗ ( k−1) / 1 0 0 )
53
54 CALL nombre ( k , nom)
55 OPEN( u n i t =100 , f i l e =nom)
56 WRITE( 1 0 0 , 1 5 0 ) H1
57 CLOSE( 1 0 0 )
58
59 CASE DEFAULT
60
61 DO i =1 , PunX
62
63 DO j =1 , PunY
30
64
65 SELECT CASE( i )
66
67 CASE( 1 )
68
69 ! IF ( k<=50) then
70 Hf ( i , j ) = s i n ( 2 ∗ PI ∗ ( k−1) / 1 0 0 )
71 ! else
72 ! Hf ( i , j ) = 0
73 ! endif
74 CASE(PunX)
75
76 Hf ( i , j ) = 0
77
78 CASE DEFAULT
79
80 SELECT CASE ( j )
81 CASE( 1 )
82 Hf ( i , j ) = H1( i , j +1)
83 CASE(PunY)
84 Hf ( i , j ) = H1( i , j −1)
85 CASE DEFAULT
86
87 A1=(Vx∗ dt /dx ) ∗ ∗ 2 ∗ (H1( i +1 , j ) ) −2∗H1( i , j )+H1( i −1 , j )
88 A2=(Vy∗ dt /dx ) ∗ ∗ 2 ∗ (H1( i , j +1)−2∗H1( i , j )+H1( i , j −1) )
89 A3=−Ho( i , j ) + 2∗H1( i , j )
90
91 Hf ( i , j )=A1+A2+A3
92
93
94
95 ENDSELECT
96
97 END SELECT
98
99 ENDDO
100
101 ENDDO
102
103 Hf (PunX , : ) =Hf (PunX− 1 , : )
104 Hf ( : , 1 )=Hf ( : , 2 )
105 Hf ( : , PunY)=Hf ( : , PunY−1)
106
107
108 CALL nombre ( k , nom)
109 OPEN( u n i t =100 , f i l e =nom)
110 WRITE( 1 0 0 , 1 5 0 ) Hf
111 CLOSE( 1 0 0 )
112
113
114 Ho=H1
115 H1=Hf
116
117
118
119
120 ENDSELECT
121
122 ENDDO
123
124
125 150 format (300 f 7 . 2 )
126
127 ENDPROGRAM
128
31
129
130
131
132
133
134 SUBROUTINE nombre ( i , nom)
135
136 INTEGER : : i
137 CHARACTER( l e n =4) : : i c h a r
138 CHARACTER( l e n =19) : : nom
139
140 200 format ( I4 . 4 )
141 WRITE( i c h a r , 2 0 0 ) i
142
143 nom=’ d a t o s / d a t o s ’ / / i c h a r // ’ . dat ’
144
145 END SUBROUTINE
32