MEXICO DF, DICIEMBRE 2015 ASESOR: DRA. NANCY P. MARTÍNEZ CRUZ PRESENTA: TIMOTEO DOMÍNGUEZ CASTELAZO INGENIERO QUÍMICO INDUSTRIAL QUE PARA OBTENER EL TÍTULO DE: T E S I S CONSTRUCCIÓN DEL MAPA DE CURVAS DE RESIDUO DE LA MEZCLA TERNARIA N-PROPANOL—AGUA— PROPILACETATO DEPARTAMENTO DE INGENIERÍA QUÍMICA ESCUELA SUPERIOR DE INGENIERÍA QUÍMICA E INDUSTRIAS EXTRACTIVAS INSTITUTO POLITÉCNICO NACIONAL
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
MEXICO DF, DICIEMBRE 2015
ASESOR: DRA. NANCY P. MARTÍNEZ CRUZ
PRESENTA:
TIMOTEO DOMÍNGUEZ CASTELAZO
INGENIERO QUÍMICO INDUSTRIAL
QUE PARA OBTENER EL TÍTULO DE:
T E S I S
CONSTRUCCIÓN DEL MAPA DE CURVAS DE RESIDUO
DE LA MEZCLA TERNARIA N-PROPANOL—AGUA—
PROPILACETATO
DEPARTAMENTO DE INGENIERÍA QUÍMICA
ESCUELA SUPERIOR DE INGENIERÍA QUÍMICA E INDUSTRIAS EXTRACTIVAS
INSTITUTO POLITÉCNICO NACIONAL
1
2
3
A Dios:
Por darme la vida, la inteligencia y todo lo demás.
A mis padres:
Por el apoyo incondicional que me dieron
A la Dra. Nancy P. Martínez Cruz:
Por dirigirme en esta Tesis, y por mostrarme el potencial que puedo tener
A los profesores sinodales:
Por las aportaciones que hicieron a este trabajo y por su paciencia.
4
Y vio Dios que la luz era buena; y separó Dios la luz de
III.1 Mapa de curvas de destilación……………………………………...23
III.2 Mapa aproximado de curvas de residuo…….…….……………….23
III.3 Mapa de curvas de residuo………………………………………….25
CONCLUSIONES Y RECOMENDACIONES
HEMEROGRAFÍA
ANEXOS
A. Código del programa para calcular el equilibrio L-L-V con el método de Newton-Raphson multivariable.
B. Código del programa para calcular curvas de residuo.
Nota: Las tablas presentes en este trabajo fueron realizadas en Microsoft Excel 2007® al igual que los diagramas de fase binarios. Los diagramas triangulares fueron realizados en ProSim Ternary Diagram® que puede ser adquirido de forma gratuita en: http://www.prosim.net/en/resources-downloads_7.php
iii
RESUMEN:
El presente trabajo tiene como propósito la construcción del mapa de curvas
residuo MCR, de una mezcla ternaria alcohol n-propílico, agua y propilacetato
producto de la reacción de esterificación:
CH3COOH+CH3(CH2)2OH àCH3COO(CH2)2CH3+H2O
en la que el ácido es el reactivo limitante y se ha llevado al agotamiento. El mapa
provee información para el diseño conceptual de la separación del acetato de
propilo de la mezcla.
El trabajo se ha desarrollado en tres capítulos:
En el primer capítulo se expone la teoría fundamental del contenido de este
trabajo: información acerca de las propiedades del acetato de propilo, los
fundamentos termodinámicos y una breve introducción a los mapas de curvas de
destilación y de residuo.
En el segundo capítulo se presenta la correlación de los parámetros de
interacción binarios de la ecuación del modelo de solución de Renon, para el
cálculo del coeficiente de actividad de las mezclas binarias y de la mezcla ternaria
propanol – agua – propilacetato ; los algoritmos necesarios para el cálculo de las
curvas de residuo y los diagramas de flujo de los programas para resolver el
equilibrio líquido-líquido-vapor.
En el tercer capítulo se muestran los mapas de curvas construidos y la
información referente a tipo de nodos, límites de destilación y azeótropos binarios
y ternario.
iv
INTRODUCCIÓN
La destilación es una de las formas más utilizadas para la separación de los
componentes de una mezcla, siendo los egipcios los primeros en aplicarla para la
obtención de esencias vegetales. Más tarde los alquimistas árabes la
perfeccionaron para obtener alcohol y otros líquidos purificados. En la actualidad
son muy pocos los procesos químicos que no incluyen alguna destilación, ya que
la mayoría de las reacciones ocurren en fase líquida. Recientemente se han
desarrollado técnicas para mejorar la separación de mezclas. Para el caso de la
destilación, el conjunto de variaciones se conocen por el nombre general de
“destilación asistida”
Agrupa las siguientes operaciones:
• Destilación con sal
• Destilación extractiva
• Destilación azeotrópica (homogénea y heterogénea)
• Destilación reactiva
Tanto las destilaciones extractiva, azeotrópica heterogénea y reactiva se llevan a
cabo siempre con al menos 3 componentes, que además suelen presentar casos
de complejidad (azeótropos); por ello es de utilidad conocer el comportamiento de
este tipo de mezclas desde el punto de vista termodinámico, lo que permite el uso
eficiente de estas técnicas.
Una de las herramientas que más utilidad tiene dentro del análisis termodinámico
de mezclas multicomponentes es el mapa de curvas de residuo, o MCR. Una
curva de residuo es la representación de una destilación de Rayleigh en la que
una mezcla se lleva a ebullición y el vapor producido es condensado con un
refrigerante y almacenado en otro recipiente.
v
CALOR
xi(t)
yi(t)
Baja Teb
MediaTeb
AltaTeb
Figura 0. Sistema experimental para obtener curvas de residuo y dirección de una curva de residuo de un
sistema sin azeótropos
Para sistemas complejos es muy común el uso de simuladores para construir los
MCR, sin embargo aún es necesario proporcionarles parámetros para que
reproduzcan adecuadamente el equilibrio líquido-vapor; además de que las
licencias para su uso suelen tener un costo muy elevado. Por esto último, uno de
los objetivos de este trabajo fue el generar programas de cómputo capaces de
calcular curvas de residuo. Adicional a esto, también se construyeron programas
para calcular el equilibrio líquido-líquido-vapor de mezclas ternarias y binarias, un
programa para calcular curvas de destilación, y el cálculo de coeficientes de
actividad de mezclas multicomponentes con la ecuación de Renon.
El sistema que se utilizó para este trabajo, es el resultado de la reacción de
esterificación del n-propanol con ácido acético, en el que este último se utiliza
como reactivo limitante y es llevado al agotamiento.
1
CAPÍTULO I.- GENERALIDADES
I.1 Características y usos del acetato de n-propilo
De los ésteres el acetato de n-propilo es de particular importancia debido a su
uso como sustituto del aroma natural de la pera, aunque no es producido en
grandes cantidades. Es un éster líquido incoloro; miscible en alcoholes, cetonas,
hidrocarburos y otros ésteres, sin embargo, es poco soluble en agua, se volatiliza
rápidamente en condiciones ambientales y es un producto poco higroscópico
Se usa como agente saborizante de alimentos y en perfumes, además como
solvente en la aplicación de lacas, adhesivos y plásticos.
I.1.1 Obtención industrial
Reacción de obtención:
CH3COOH+CH3(CH2)2OH àCH3COO(CH2)2CH3+H2O
A nivel industrial el acetato de n-propilo se obtiene como producto de la
esterificación de Fisher que consiste en el calentamiento de una mezcla de alcohol
y ácido acético, utilizando el n-propanol en exceso para aumentar el rendimiento.
El ácido sulfúrico es utilizado en bajas concentraciones como catalizador y
sustancia higroscópica que absorbe el agua formada en la reacción. La reacción
de esterificación es reversible, por lo que los reactivos no se convierten
completamente y el efluente del reactor es una mezcla de reactivos y productos
que deben ser purificados. La separación de los efluentes del reactor, en muchos
casos, se lleva a cabo por destilación. Una forma de facilitar la purificación del
acetato es utilizar al ácido acético como reactivo limitante y llevarlo al agotamiento,
obteniendo así la mezcla ternaria de la cual se estudia su comportamiento en el
equilibrio líquido vapor, para su posterior separación.
2
I.2 Representaciones gráficas de los procesos de destilación
I.2.1 Curvas de destilación
Matemáticamente hablando, el sistema de destilación más simple de analizar es
una serie de etapas de separación de equilibrio (FLASH). El proceso ocurre de la
siguiente manera: Un líquido de composición genera un vapor en equilibrio de
composición ; luego este vapor es condensado totalmente e introducido en otro
equipo en el que se genera un nuevo vapor. El proceso se repite hasta obtener la
composición deseada. Cuando se trabaja una mezcla ternaria, la gráfica de las
composiciones de los condensados es llamado “curva de destilación”, y el
conjunto de estas curvas genera un “mapa de curvas de destilación”.
I.2.2 Curvas de residuo
Una destilación por lotes consiste en la evaporación de una mezcla líquida en un
recipiente cuya salida es hacia un condensador total. Con el pasar del tiempo se
genera una serie de vapores ricos en el componente más volátil de la mezcla
original, mientras que el líquido del recipiente se va enriqueciendo del componente
más pesado. En una mezcla ternaria el graficar las composiciones de este último
líquido en distintos momentos de la destilación genera lo que se conoce como una
“curva de residuo”, y si se parte desde distintas composiciones iniciales se genera
un “mapa de curvas de residuo”.
I.2.3 Utilidad de los mapas de curvas de destilación y de residuo
Los mapas de curvas de destilación y de residuo proporcionan información crucial
para el diseño de procesos de separación que involucran el equilibrio líquido –
vapor. A través de ellas puede conocerse el comportamiento de una mezcla
durante la separación y también las composiciones de los productos a obtener.
Los mapas de curvas de residuo (MCR) han atraído el interés de las comunidades
académicas y de las de diseño de ingeniería conceptual. Además de ser útil como
una herramienta de síntesis de procesos, los MCR también pueden ser usados
3
para visualizar e investigar cuestiones del equilibrio líquido-líquido-vapor (ELLV)
que afectan el modelamiento de columnas de destilación y de extracción
líquido/líquido. [ELLV denota sistemas que contienen 2 fases líquidas y una fase
vapor en equilibrio]. Otras áreas de aplicación son para la solución de problemas
de columnas y análisis de control. La utilidad de los MCR recae en el hecho de
que los perfiles de composición de columnas de destilación continua se aproximan
a las trayectorias de la composición de las curvas de residuo. Este último hecho se
ejemplifica en la figura 1, en la que se muestra el mapa de curvas de residuo de
un sistema ideal (baja presión y naturaleza química de los componentes
semejante). Se aprecia que la dirección de las curvas es del compuesto más
volátil (metanol) al más pesado (n-propanol), y por ello mismo si se elige al
compuesto que se encuentra al final de las curvas, éste se obtendrá como residuo
en la destilación, mientras que si se pretende obtener al que está en el inicio, éste
se obtendrá en el destilado. El compuesto de volatilidad intermedia (etanol) no
puede obtenerse puro en una sola columna. Las líneas rectas muestran los
balances de materia posibles de estas dos selecciones.
Figura 1. Mapa de curvas de residuo del sistema metanol – etanol – n-propanol a
1 bar.
4
I.3 Fundamentos termodinámicos
I.3.1 Equilibrio líquido – vapor
Se reconoce al equilibrio como una condición estática donde no ocurren cambios
en las propiedades macroscópicas a lo largo del tiempo. En la práctica, sólo se
justifica esta suposición cuando no conduce a errores significativos.
Un sistema que consta de la fase líquida y la fase vapor en contacto estrecho, con
el tiempo alcanza un estado final en donde no existe tendencia para que suceda
algún cambio dentro del mismo. La temperatura, la presión y las composiciones de
fase logran valores que en adelante permanecen fijos. Se puede decir que el
sistema está ahora en equilibrio. A pesar de esto, a nivel microscópico las
condiciones no son estáticas. Las moléculas que se hallan en la fase líquida pasan
continuamente a la fase vapor y viceversa. De cualquier modo, la velocidad a la
que esto ocurre es, en promedio, igual en ambas direcciones por lo que el
equilibrio es una suposición válida. [1]
I.3.2 Ley de Raoult modificada
Una de las condiciones de equilibrio es la igualdad de fugacidades en todas las
fases presentes. De forma rigurosa para un sistema de un líquido con su vapor,
esta igualdad se expresa como:
Donde yi y xi son las fracciones mol del componente i en el vapor y líquido
respectivamente, es el coeficiente de fugacidad del componente i en el vapor, P
es la presión del sistema, es el coeficiente de actividad, Ps es la presión de
saturación, es el coeficiente de fugacidad de saturación del componente i en el
líquido y (PF)i es el factor de Poynting. Cuando el sistema se encuentra a
presiones bajas (hasta 1.1 bar) la fase vapor tiene un comportamiento cercano al
de un gas ideal, lo que reduce el miembro izquierdo de la expresión a simplemente
la presión parcial del componente i. Además de esto, para la mayoría de los
5
( )
( ) úúû
ù
êêë
é
÷÷ø
öççè
æ
++÷÷
ø
öççè
æ
+=
úúû
ù
êêë
é
÷÷ø
öççè
æ
++÷÷
ø
öççè
æ
+=
2
2121
2121
2
1212
1212
2
12
2
2112
1212
2
2121
2121
2
21
ln
ln
Gxx
G
Gxx
Gx
Gxx
G
Gxx
Gx
ttg
ttg
sistemas el factor de Poynting es muy cercano a la unidad en condiciones
normales, por lo que la igualdad de fugacidades se expresaría como:
la que es conocida como Ley de Raoult modificada [1].
I.3.3 Ecuación de Renon (NRTL)
La ecuación NRTL (Non Random Two Liquid) fue desarrollada por Renon y
Prausnitz para hacer uso del concepto de composición local, evitando al mismo
tiempo la incapacidad de la ecuación de Wilson para predecir la separación de
fases líquido-líquido. La ecuación resultante ha tenido bastante éxito en la
correlación de una amplia variedad de sistemas (útil para las mezclas altamente
no ideales y parcialmente miscibles).
El modelo para la derivación de la ecuación NRTL es una teoría representada por
dos moléculas, en las que el líquido tiene una estructura de moléculas del tipo 1 y
tipo 2 en una mezcla binaria (Figura 2), cada una de ellas rodeada de varias de las
mismas moléculas, con cada una de ellas rodeada a su vez de manera similar y
así sucesivamente.
Cada molécula 1 ó 2 está rodeada por moléculas de ambos tipos en proporciones
determinadas por la interacción de la energía libre de Gibbs ijg , lo cual se indica
en la Figura 2.
La energía de interacción de Gibbs entre moléculas se denota por ijg para 2,1=i
y 2,1=j ; donde el subíndice j se refiere a la molécula central, y la región de la
fracción mol que la rodea, ijx , se identifican de la misma manera.
Los coeficientes de actividad de una mezcla binaria se obtienen de:
………………1.3
………………1.4
6
Estas ecuaciones tienen 3 parámetros independientes que son 1212 ,ta , y 21t de
los cuales
( )RT
gg 2212
12
-=t y
( )RT
gg 1121
21
-=t
donde 11g y 22g son la energía de Gibbs de las sustancias puras; suponiendo
2112 gg = .
Además
( )121212 exp ta-=G y ( )211221 exp ta-=G
La ecuación para multicomponentes se expresa en términos de parámetros
binarios como se describe a continuación.
2T
c
T
ba
ijij
ijij ++=t ; T en K
( )ijijijG ta-= exp
úúúú
û
ù
êêêê
ë
é
÷÷÷÷
ø
ö
çççç
è
æ
-=
å
å
åå
å
=
=
==
=
n
k
kkj
n
k
kjkjk
ijn
k
kkj
ijj
n
k
kkj
n
j
jjiji
i
xG
Gx
xG
Gx
xG
xG
1
1
11
1ln
tt
t
g
Los parámetros ijt , jit y jiij aa = se requieren para cada par binario. Estos
parámetros pueden ser dependientes de la temperatura. Si ijt se representa
como una sola constante, se encontrarán mejores resultados sobre un intervalo de
temperatura si solamente se usa RTggb jjijij /)( -= y 0== ijij ca . El parámetro
ija no varía grandemente entre binario y binario, y es frecuente fijarlo en 0.3 para
sistemas L-V y de 0.2 para sistemas L-L. [2,3]
……………1.5 y 1.6
………………1.7 y 1.8
………………1.9
…………………1.10
…………………1.11
7
Figura 2. Dos arreglos de moléculas de acuerdo a la teoría de Scott de mezclas
líquidas binarias.[2]
8
CAPÍTULO II.- CONSTRUCCIÓN DE CURVAS DE RESIDUO
II.1 Correlación del coeficiente de actividad de las fases líquidas
II.1.1- Sistemas Binarios
Para el sistema agua – propanol – acetato de propilo se tienen las siguientes
mezclas binarias:
· agua – acetato de propilo
· n-propanol – agua
· n-propanol – acetato de propilo
De ellas se realizó el ajuste de los parámetros de interacción binarios (gi,j-gj,j)/R
pertenecientes a las ecuaciones 1.3 y 1.4 presentadas en el capítulo anterior. A
dilución infinita, las ecuaciones para el coeficiente de actividad se reducen a:
Que pueden resolverse de forma simultánea para obtener los parámetros de
interacción binaria a partir de datos experimentales. A continuación se presentan
los resultados de estos ajustes para cada una de las mezclas binarias antes
mencionadas.
9
II.1.1.1 Agua – acetato de propilo
Figura 3. Diagrama T vs x,y del sistema agua – acetato de n – propilo
Esta mezcla, presenta un comportamiento de dos fases líquidas, con un azeótropo
conocido como de bajo punto de ebullición. Para la construcción del diagrama de
la Figura 3 se construyó un programa adicional para el cálculo del equilibrio líquido
– líquido – vapor de una mezcla binaria.
80
85
90
95
100
105
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
T[°
C]
fracción mol de agua
Puntos de burbuja
calculados
Puntos de rocío
calculados
Puntos de burbuja
experimentales
Puntos de rocío
experimentales
10
Tabla 1. Correlación de datos para el sistema agua – acetato de n-propilo
DATOS EXPERIMENTALES DATOS CALCULADOS % ERROR
T[°C] x agua y agua T[°C] x agua y agua
101.56 0.0000 0.0000 101.46 0.0000 0.0000 0.1000
94.40 0.0343 0.2090 94.92 0.0343 0.2107 0.5200
89.90 0.0730 0.3550 90.00 0.0730 0.3391 0.1013
82.76 0.1900 0.5230 81.53 0.1900 0.4763 1.2309
82.76 0.9967 0.5230 81.53 0.9967 0.4947 1.2303
91.10 0.9984 0.7270 90.32 0.9984 0.7263 0.7800
95.40 0.9993 0.8650 34.26 0.9993 0.8594 1.1400
98.10 0.9997 0.9220 98.20 0.9997 0.9173 0.1001
100.00 1.0000 1.0000 100.00 1.0000 1.0000 0.0000
Los datos experimentales fueron tomados del DECHEMA pp. 304 [5]
Tabla 2. Parámetros de interacción binarios para la mezcla agua – acetato de
propilo
(gi,j – gj,j)/R DECHEMA CALCULADOS
1,2 1760.7 1760.3253
2,1 362.45 362.4451
11
II.1.1.2 Propanol – agua
Figura 4. Diagrama T vs x,y del sistema propanol – agua
Esta mezcla exhibe un azeótropo de bajo punto de ebullición.
A continuación se presenta la correlación de datos
86
88
90
92
94
96
98
100
102
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
T[°
C]
fracción mol de propanol
Puntos de burbuja
calculados
Puntos de rocío
calculados
Puntos de burbuja
experimentales
Puntos de rocío
experimentales
12
Tabla 3. Correlación de datos para el sistema propanol - agua
DATOS EXPERIMENTALES DATOS CALCULADOS %ERROR
T[°C] x propanol y propanol T[°C] x propanol y propanol
Y siguiendo el mismo procedimiento, se obtuvo el mapa de curvas de residuo que
se muestra en la Figura 13. Se puede apreciar que la topología de este mapa
coincide con el mapa de curvas de destilación, por lo que se puede considerar
como correcto.
30
Figura 13. Mapa de curvas de residuo del sistema propanol-agua-propilacetato a 760 mmHg
El MCR obtenido está formado por tres regiones de destilación delimitadas por los
azeótropos binarios (a), (b) y (c) y el azeótropo ternario heterogéneo de bajo punto
de ebullición (d). En las regiones I y II, las curvas se dirigen hacia los
componentes puros agua y acetato de propilo, comenzando desde el azeótropo
binario agua-propilacetato y pasando por el azeótropo ternario heterogéneo. En la
región III las curvas se dirigen hacia el componente puro n-propanol, partiendo
desde el azeótropo ternario heterogéneo.
31
Con base en el mapa construido, se observa que si la alimentación se encuentra
dentro de las regiones I y II, el residuo obtenido será uno de los componentes
puros mientras que el destilado será una mezcla heterogénea. Si por el contrario
se encuentra en la región central III es posible obtener al n-propanol como residuo,
mientras que en el destilado se obtendrá una mezcla ternaria. El punto del
azeótropo ternario heterogéneo mostrado se distingue por ser el punto de más
baja temperatura y es además el punto desde el cual se originan todas las curvas
de residuo.
32
CONCLUSIONES
· Con las herramientas de cómputo elaboradas es posible construir MCR’s
· El sistema estudiado se considera como complejo con un azeótropo
ternario heterogéneo de bajo punto de ebullición, lo que hace pensar que
para la separación es necesario un proceso de destilación y extracción
líquido-líquido más elaborado.
· Con respecto a la correlación de parámetros de interacción binarios, se
encontraron valores muy semejantes a los reportados en DECHEMA [5],
excepto para el sistema propanol–propilacetato, para el que los valores
encontrados en este trabajo producen un mejor ajuste que los reportados,
lo cual se ve reflejado en un menor valor de la diferencia absoluta
porcentual. Con respecto al ajuste para el sistema ternario, Walas [3]
menciona que los parámetros que reproducen el comportamiento de las
mezclas binarias en equilibrio líquido-vapor no necesariamente
reproducirán el comportamiento del equilibrio de las mezclas ternarias,
como es el caso del sistema de estudio de este trabajo.
· No se dispone de información experimental para cotejar los resultados
obtenidos. Sin embargo el mapa de curvas de residuo obtenido es un
avance en el estudio del comportamiento del equilibrio de la mezcla ternaria
propanol-agua-propilacetato.
33
RECOMENDACIONES
· Como continuación de este trabajo, se propone la construcción de un mapa
de curvas de residuo experimental, así como un mejor ajuste de los
parámetros de interacción para la mezcla ternaria.
34
HEMEROGRAFÍA
1. Smith, J., Van Ness, H., Abbott, M. (2007)Introducción a la termodinámica
en ingeniería química. México: Mc Graw Hill 2. Renon, H., Prausnitz, J. (1968) Local compositions in thermodynamic excess
functions for liquid mixtures [versión electrónica] AIChE Journal 14 (135-144) 3. Walas, S. (1985) Phase equilibria in chemical Engineering. Massachusetts:
Butterworth-Heinemann 4. Seader, J., Henley, E., Roper, D. (2011) Separation process principles :
chemical and biochemical operations. Hoboken: John Wiley & Sons 5. Gesellscaft für Chemische Technik und Biotechnologie (1987) Chemistry
data series. Frankfurt: DECHEMA 6. Milo D. Koretsky (2004) Engineering and chemical thermodynamics. New
Jersey: John Wiley & Sons 7. Doherty M., Malone, M., (2001) Conceptual design of distillation systems.
New York: Mc Graw Hill
35
ANEXO A. CÓDIGO DEL PROGRAMA PARA CALCULAR EL EQUILÍBRIO L-L-V CON EL MÉTODO DE NEWTON-RAPHSON MULTIVARIABLE.
Este programa fue codificado en Fortran 90 ®
program NRMNRTL implicit none REAL:: a(3,3),b(3,3),x(3),g(3,3),t(3,3),z(3),xo(3) REAL::mat(3,4) REAL::Ti,phs,er REAL,EXTERNAL::lng REAL,EXTERNAL::dg1x1,dg2x1,dg3x1,dg1x2,dg2x2,dg3x2 REAL,EXTERNAL::dgx1x1,dgx2x1,dgx3x1,dgx1x2,dgx2x2,dgx3x2 REAL,EXTERNAL::dgx1b,dgx2b,dgx3b INTEGER::i,j,k CHARACTER::S OPEN(UNIT=26, FILE="tieline.txt", STATUS="replace") OPEN(UNIT=25,FILE="datos.dat",STATUS="old",ACTION="read") do i=1,3 do j=1,3 if (i==j) then b(i,j)=0 else PRINT*, "b(",i,",",j,") " READ(25,*) b(i,j) end if call system ("cls") end do end do a=0 do i=1,3 do j=1,3 if (a(j,i)/=0) then a(i,j)=a(j,i) end if if (i/=j.and.a(i,j)==0) then PRINT*, "a(",i,",",j,")= " READ(25,*) a(i,j) end if end do end do call system ("cls") S="s" do WHILE(S=="S".or.S=="s") do i=1,3
36
PRINT*, "z(",i,")= " READ*, z(i) end do PRINT*, "Introduzca la temperatura en C" READ*, Ti do i=1,3 do j=1,3 t(i,j)=b(i,j)/(Ti+273.15) g(i,j)=EXP(-1.0*a(i,j)*t(i,j)) end do end do x=(/0.,1.,0./) phs=0.3 er=1 do i=1,3 xo(i)=((z(i)-phs*x(i))/(1.-phs)) end do k=0 do WHILE(er>=0.33.and.k<2000) call matriz(dg1x1,dg2x1,dg3x1,dg1x2,dg2x2,dg3x2,dgx1x1,& &dgx2x1,dgx3x1,dgx1x2,dgx2x2,dgx3x2,dgx1b,dgx2b,dgx3b,lng,mat,3,g,t,x,xo,z,phs) call avance(x,mat,3,phs) er=SQRT((mat(1,4)**2))+SQRT((mat(2,4)**2))+SQRT((mat(3,4)**2)) WRITE(26,50) k,"->","X=",x,"b=",phs,"e=",er WRITE(26,53) "f1= ",mat(1,4)," f2= ",mat(2,4)," f3= ",mat(3,4) k=k+1 end do call system("pause") call system("cls") 50 FORMAT(I5,A3,A3,3F7.4,A3,F7.4,A3,F7.4) 53 FORMAT(A4,F7.4,A5,F7.4,A5,F7.4) do i=1,3 PRINT'(A3,I2,A4,F7.4)', "X(",i,")= ",x(i) WRITE(26,51) "X(",i,")= ",x(i) end do 51 FORMAT (A3,I2,A4,F7.4) do i=1,3 PRINT'(A4,I2,A4,F7.4)', "X2(",i,")= ",((z(i)-phs*x(i))/(1.-phs)) end do PRINT'(A7,F7.4)',"beta= ",phs WRITE(26,52) "b=",phs 52 FORMAT (A7,F7.4) PRINT*, "¿Desea realizar otro calculo? S/N" READ*, S end do end program
37
function lng(g,t,n,x,r) implicit none REAL::lng integer ::n,r REAL::g(n,n),t(n,n),x(n) INTEGER::i,j,k,l,m REAL::s1,s2,s3,s4,s5 s1=0 s2=0 s3=0 do i=1,n s1=s1+(t(i,r)*g(i,r)*x(i)) end do do i=1,n s2=s2+(g(i,r)*x(i)) end do s5=0 do j=1,n s3=0 s4=0 do k=1,n s3=s3+(g(k,j)*x(k)) end do do l=1,n s4=s4+(x(l)*t(l,j)*g(l,j)) end do s5=s5+(((x(j)*g(r,j))/s3)*(t(r,j)-(s4/s3))) end do lng=(s1/s2)+s5 return end function lng function dg1x1(g,t,i,j,x) implicit none REAL::dg1x1 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x INTEGER::k REAL::A(28),B(7),C(7) A(1)=-t(3,1)*g(3,1) A(2)=(t(2,1)*g(2,1)-t(3,1)*g(3,1))*x(2)+t(3,1)*g(3,1) A(3)=1.-g(3,1) A(4)=(g(2,1)-g(3,1))*x(2)+g(3,1) A(5)=1 A(6)=0 A(7)=1.-g(3,1)
38
A(8)=(g(2,1)-g(3,1))*x(2)+g(3,1) A(9)=-t(3,1)*g(3,1) A(10)=(t(2,1)*g(2,1)-t(3,1)*g(3,1))*x(2)+t(3,1)*g(3,1) A(11)=1.-g(3,1) A(12)=(g(2,1)-g(3,1))*x(2)+g(3,1) A(13)=0 A(14)=g(1,2)*x(2) A(15)=g(1,2)-g(3,2) A(16)=(1.-g(3,2))*x(2)+g(3,2) A(17)=t(1,2)*g(1,2)-t(3,2)*g(3,2) A(18)=t(3,2)*g(3,2)-t(3,2)*g(3,2)*x(2) A(19)=g(1,2)-g(3,2) A(20)=(1.-g(3,2))*x(2)+g(3,2) A(21)=-g(1,3) A(22)=g(1,3)*(1-x(2)) A(23)=g(1,3)-1. A(24)=(g(2,3)-1.)*x(2)+1. A(25)=t(1,3)*g(1,3) A(26)=t(2,3)*g(2,3)*x(2) A(27)=g(1,3)-1. A(28)=(g(2,3)-1.)*x(2)+1. do k=1,7 B(k)=(A(4*k-3)*x(1)+A(4*k-2))/(A(4*k-1)*x(1)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(1)+A(4*k))**2) end do dg1x1=C(1)-B(2)*C(3)-B(3)*C(2)-B(4)*C(5)+(t(1,2)-B(5))*C(4)-B(6)*C(7)+(t(1,3)-B(7))*C(6) return end function function dg1x2(g,t,i,j,x) implicit none REAL::dg1x2 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(2,1)*g(2,1)-t(3,1)*g(3,1) A(2)=-t(3,1)*g(3,1)*x(1)+t(3,1)*g(3,1) A(3)=g(2,1)-g(3,1) A(4)=(1.-g(3,1))*x(1)+g(3,1) A(5)=0 A(6)=x(1) A(7)=g(2,1)-g(3,1) A(8)=(1.-g(3,1))*x(1)+g(3,1) A(9)=t(2,1)*g(2,1)-t(3,1)*g(3,1)
39
A(10)=-t(3,1)*g(3,1)*x(1)+t(3,1)*g(3,1) A(11)=g(2,1)-g(3,1) A(12)=(1.-g(3,1))*x(1)+g(3,1) A(13)=g(1,2) A(14)=0 A(15)=1.-g(3,2) A(16)=(g(1,2)-g(3,2))*x(1)+g(3,2) A(17)=t(3,2)*g(3,2)-t(3,2)*g(3,2) A(18)=t(1,2)*g(1,2)-t(3,2)*g(3,2)*x(1) A(19)=1.-g(3,2) A(20)=(g(1,2)-g(3,2))*x(1)+g(3,2) A(21)=-g(1,3) A(22)=g(1,3)*(1-x(1)) A(23)=g(2,3)-1. A(24)=(g(1,3)-1.)*x(1)+1. A(25)=t(2,3)*g(2,3) A(26)=t(1,3)*g(1,3)*x(1) A(27)=g(2,3)-1. A(28)=(g(1,3)-1.)*x(1)+1. do k=1,7 B(k)=(A(4*k-3)*x(2)+A(4*k-2))/(A(4*k-1)*x(2)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(2)+A(4*k))**2) end do dg1x2=C(1)-B(2)*C(3)-B(3)*C(2)-B(4)*C(5)+(t(1,2)-B(5))*C(4)-B(6)*C(7)+(t(1,3)-B(7))*C(6) return end function function dg2x1(g,t,i,j,x) implicit none REAL::dg2x1 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(1,2)*g(1,2)-t(3,2)*g(3,2) A(2)=-t(3,2)*g(3,2)*x(2)+t(3,2)*g(3,2) A(3)=g(1,2)-g(3,2) A(4)=(1.-g(3,2))*x(2)+g(3,2) A(5)=g(2,1) A(6)=0 A(7)=1.-g(3,1) A(8)=(g(2,1)-g(3,1))*x(2)+g(3,1) A(9)=-t(3,1)*g(3,1) A(10)=(t(2,1)*g(2,1)-t(3,1)*g(3,1))*x(2)+t(3,1)*g(3,1) A(11)=1.-g(3,1)
40
A(12)=(g(2,1)-g(3,1))*x(2)+g(3,1) A(13)=0 A(14)=x(2) A(15)=g(1,2)-g(3,2) A(16)=(1.-g(3,2))*x(2)+g(3,2) A(17)=t(1,2)*g(1,2)-t(3,2)*g(3,2) A(18)=t(3,2)*g(3,2)-t(3,2)*g(3,2)*x(2) A(19)=g(1,2)-g(3,2) A(20)=(1.-g(3,2))*x(2)+g(3,2) A(21)=-g(2,3) A(22)=g(2,3)*(1-x(2)) A(23)=g(1,3)-1. A(24)=(g(2,3)-1.)*x(2)+1. A(25)=t(1,3)*g(1,3) A(26)=t(2,3)*g(2,3)*x(2) A(27)=g(1,3)-1. A(28)=(g(2,3)-1.)*x(2)+1. do k=1,7 B(k)=(A(4*k-3)*x(1)+A(4*k-2))/(A(4*k-1)*x(1)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(1)+A(4*k))**2) end do dg2x1=C(1)-B(2)*C(3)+(t(2,1)-B(3))*C(2)-B(4)*C(5)-B(5)*C(4)-B(6)*C(7)+(t(2,3)-B(7))*C(6) return end function function dg2x2(g,t,i,j,x) implicit none REAL::dg2x2 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x INTEGER::k REAL::A(28),B(7),C(7) A(1)=-t(3,2)*g(3,2) A(2)=(t(1,2)*g(1,2)-t(3,2)*g(3,2))*x(1)+t(3,2)*g(3,2) A(3)=1.-g(3,2) A(4)=(g(1,2)-g(3,2))*x(1)+g(3,2) A(5)=0 A(6)=g(2,1)*x(1) A(7)=g(2,1)-g(3,1) A(8)=(1.-g(3,1))*x(1)+g(3,1) A(9)=t(2,1)*g(2,1)-t(3,1)*g(3,1) A(10)=-t(3,1)*g(3,1)*x(1)+t(3,1)*g(3,1) A(11)=g(2,1)-g(3,1) A(12)=(1.-g(3,1))*x(1)+g(3,1) A(13)=1
41
A(14)=0 A(15)=1.-g(3,2) A(16)=(g(1,2)-g(3,2))*x(1)+g(3,2) A(17)=t(3,2)*g(3,2)-t(3,2)*g(3,2) A(18)=t(1,2)*g(1,2)-t(3,2)*g(3,2)*x(1) A(19)=1.-g(3,2) A(20)=(g(1,2)-g(3,2))*x(1)+g(3,2) A(21)=-g(2,3) A(22)=g(2,3)*(1-x(1)) A(23)=g(2,3)-1. A(24)=(g(1,3)-1.)*x(1)+1. A(25)=t(2,3)*g(2,3) A(26)=t(1,3)*g(1,3)*x(1) A(27)=g(2,3)-1. A(28)=(g(1,3)-1.)*x(1)+1. do k=1,7 B(k)=(A(4*k-3)*x(2)+A(4*k-2))/(A(4*k-1)*x(2)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(2)+A(4*k))**2) end do dg2x2=C(1)-B(2)*C(3)+(t(2,1)-B(3))*C(2)-B(4)*C(5)-B(5)*C(4)-B(6)*C(7)+(t(2,3)-B(7))*C(6) return end function function dg3x1(g,t,i,j,x) implicit none REAL::dg3x1 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(1,3)*g(1,3) A(2)=t(2,3)*g(2,3)*x(2) A(3)=g(1,3)-1. A(4)=(g(2,3)-1.)*x(2)+1. A(5)=g(3,1) A(6)=0 A(7)=1.-g(3,1) A(8)=(g(2,1)-g(3,1))*x(2)+g(3,1) A(9)=-t(3,1)*g(3,1) A(10)=(t(2,1)*g(2,1)-t(3,1)*g(3,1))*x(2)+t(3,1)*g(3,1) A(11)=1.-g(3,1) A(12)=(g(2,1)-g(3,1))*x(2)+g(3,1) A(13)=0 A(14)=g(3,2)*x(2) A(15)=g(1,2)-g(3,2)
42
A(16)=(1.-g(3,2))*x(2)+g(3,2) A(17)=t(1,2)*g(1,2)-t(3,2)*g(3,2) A(18)=t(3,2)*g(3,2)-t(3,2)*g(3,2)*x(2) A(19)=g(1,2)-g(3,2) A(20)=(1.-g(3,2))*x(2)+g(3,2) A(21)=-1. A(22)=1.-x(2) A(23)=g(1,3)-1. A(24)=(g(2,3)-1.)*x(2)+1. A(25)=t(1,3)*g(1,3) A(26)=t(2,3)*g(2,3)*x(2) A(27)=g(1,3)-1. A(28)=(g(2,3)-1.)*x(2)+1. do k=1,7 B(k)=(A(4*k-3)*x(1)+A(4*k-2))/(A(4*k-1)*x(1)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(1)+A(4*k))**2) end do dg3x1=C(1)-B(2)*C(3)+(t(3,1)-B(3))*C(2)-B(4)*C(5)+(t(3,2)-B(5))*C(4)-B(6)*C(7)-B(7)*C(6) return end function function dg3x2(g,t,i,j,x) implicit none REAL::dg3x2 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(2,3)*g(2,3) A(2)=t(1,3)*g(1,3)*x(1) A(3)=g(2,3)-1. A(4)=(g(1,3)-1.)*x(1)+1. A(5)=0 A(6)=g(3,1)*x(1) A(7)=g(2,1)-g(3,1) A(8)=(1.-g(3,1))*x(1)+g(3,1) A(9)=t(2,1)*g(2,1)-t(3,1)*g(3,1) A(10)=-t(3,1)*g(3,1)*x(1)+t(3,1)*g(3,1) A(11)=g(2,1)-g(3,1) A(12)=(1.-g(3,1))*x(1)+g(3,1) A(13)=g(3,2) A(14)=0 A(15)=1.-g(3,2) A(16)=(g(1,2)-g(3,2))*x(1)+g(3,2) A(17)=t(3,2)*g(3,2)-t(3,2)*g(3,2)
43
A(18)=t(1,2)*g(1,2)-t(3,2)*g(3,2)*x(1) A(19)=1.-g(3,2) A(20)=(g(1,2)-g(3,2))*x(1)+g(3,2) A(21)=-1. A(22)=1.-x(1) A(23)=g(2,3)-1. A(24)=(g(1,3)-1.)*x(1)+1. A(25)=t(2,3)*g(2,3) A(26)=t(1,3)*g(1,3)*x(1) A(27)=g(2,3)-1. A(28)=(g(1,3)-1.)*x(1)+1. do k=1,7 B(k)=(A(4*k-3)*x(2)+A(4*k-2))/(A(4*k-1)*x(2)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(2)+A(4*k))**2) end do dg3x2=C(1)-B(2)*C(3)+(t(3,1)-B(3))*C(2)-B(4)*C(5)+(t(3,2)-B(5))*C(4)-B(6)*C(7)-B(7)*C(6) return end function function dgx1x1(g,t,i,j,x,z,phs) implicit none REAL::dgx1x1 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(3,1)*g(3,1)*phs A(2)=(-t(2,1)*g(2,1)+t(3,1)*g(3,1))*phs*x(2)+t(3,1)*g(3,1)*(1.-phs-z(2)-z(1))+t(2,1)*g(2,1)*z(2) A(3)=(-1.+g(3,1))*phs A(4)=(g(3,1)-g(2,1))*phs*x(2)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(5)=-phs A(6)=z(1) A(7)=(g(3,1)-1.)*phs A(8)=(-g(2,1)+g(3,1))*phs*x(2)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=t(3,1)*g(3,1)*phs A(10)=(-t(2,1)*g(2,1)+t(3,1)*g(3,1))*phs*x(2)+t(3,1)*g(3,1)*(1.-phs-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=(g(3,1)-1.)*phs A(12)=(-g(2,1)+g(3,1))*phs*x(2)+g(3,1)*(1.-phs-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=0 A(14)=g(1,2)*z(2)-g(1,2)*phs*x(2) A(15)=(-g(1,2)+g(3,2))*phs A(16)=(g(3,2)-1.)*phs*x(2)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1)
44
A(17)=(-t(1,2)*g(1,2)+t(3,2)*g(3,2))*phs A(18)=t(3,2)*g(3,2)*(1.-phs-z(1)-z(2))+t(3,2)*g(3,2)*phs*x(2)+t(1,2)*g(1,2)+z(1) A(19)=(-g(1,2)+g(3,2))*phs A(20)=(g(3,2)-1.)*phs*x(2)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=g(1,3)*phs A(22)=g(1,3)*x(2)*phs+g(1,3)*(1.-phs-z(1)-z(2)) A(23)=(1.-g(1,3))*phs A(24)=(1.-g(2,3))*phs*x(2)+1.-phs-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(1,3)*g(1,3)+phs A(26)=-t(2,3)*g(2,3)*x(2)*phs+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=(1.-g(1,3))*phs A(28)=(1.-g(2,3))*phs*x(2)+1.-z(1)-z(2)-phs+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*x(1)+A(4*k-2))/(A(4*k-1)*x(1)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(1)+A(4*k))**2) end do dgx1x1=C(1)-B(2)*C(3)-B(3)*C(2)-B(4)*C(5)+(t(1,2)-B(5))*C(4)-B(6)*C(7)+(t(1,3)-B(7))*C(6) return end function function dgx1x2(g,t,i,j,x,z,phs) implicit none REAL::dgx1x2 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=(t(3,1)*g(3,1)-t(2,1)*g(2,1))*phs A(2)=t(3,1)*g(3,1)*phs*x(1)+t(3,1)*g(3,1)*(1.-phs-z(2)-z(1))+t(2,1)*g(2,1)*z(2) A(3)=(g(3,1)-g(2,1))*phs A(4)=(-1.+g(3,1))*phs*x(1)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(5)=0 A(6)=z(1)-phs*x(1) A(7)=(-g(2,1)+g(3,1))*phs A(8)=(g(3,1)-1.)*phs*x(1)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=(-t(2,1)*g(2,1)+t(3,1)*g(3,1))*phs A(10)=t(3,1)*g(3,1)*phs*x(1)+t(3,1)*g(3,1)*(1.-phs-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=(-g(2,1)+g(3,1))*phs A(12)=(g(3,1)-1.)*phs*x(1)+g(3,1)*(1.-phs-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=-g(1,2)*phs A(14)=g(1,2)*z(2) A(15)=(g(3,2)-1.)*phs A(16)=(-g(1,2)+g(3,2))*phs*x(1)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=t(3,2)*g(3,2)*phs
45
A(18)=t(3,2)*g(3,2)*(1.-phs-z(1)-z(2))+(-t(1,2)*g(1,2)+t(3,2)*g(3,2))*phs*x(1)+t(1,2)*g(1,2)+z(1) A(19)=(g(3,2)-1.)*phs A(20)=(-g(1,2)+g(3,2))*phs*x(1)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=g(1,3)*phs A(22)=g(1,3)*x(1)*phs+g(1,3)*(1.-phs-z(1)-z(2)) A(23)=(1.-g(2,3))*phs A(24)=(1.-g(1,3))*phs*x(1)+1.-phs-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(2,3)*g(2,3)+phs A(26)=-t(1,3)*g(1,3)*x(1)*phs+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=(1.-g(2,3))*phs A(28)=(1.-g(1,3))*phs*x(1)+1.-z(1)-z(2)-phs+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*x(2)+A(4*k-2))/(A(4*k-1)*x(2)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(2)+A(4*k))**2) end do dgx1x2=C(1)-B(2)*C(3)-B(3)*C(2)-B(4)*C(5)+(t(1,2)-B(5))*C(4)-B(6)*C(7)+(t(1,3)-B(7))*C(6) return end function function dgx1b(g,t,i,j,x,z,phs) implicit none REAL::dgx1b INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(3,1)*g(3,1)*x(2)-t(2,1)*g(2,1)*x(2)+t(3,1)*g(3,1)*x(1)-t(3,1)*g(3,1) A(2)=t(3,1)*g(3,1)*(1.-z(2)-z(1))+t(2,1)*g(2,1)*z(2) A(3)=g(3,1)*x(2)-g(2,1)*x(2)+g(3,1)*x(1)-x(1)-g(3,1) A(4)=g(3,1)*(1.-z(2)-z(1))+g(2,1)*z(2)+z(1) A(5)=-x(1) A(6)=z(1) A(7)=g(3,1)*x(2)-g(2,1)*x(2)+g(3,1)*x(1)-x(1)-g(3,1) A(8)=g(3,1)*(1.-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=t(3,1)*g(3,1)*x(2)-t(2,1)*g(2,1)*x(2)+t(3,1)*g(3,1)*x(1)-t(3,1)*g(3,1) A(10)=t(3,1)*g(3,1)*(1.-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=g(3,1)*x(2)-g(2,1)*x(2)+g(3,1)*x(1)-x(1)-g(3,1) A(12)=g(3,1)*(1.-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=-g(1,2)*x(2) A(14)=g(1,2)*z(2) A(15)=g(3,2)*x(2)-x(2)+g(3,2)*x(1)-g(2,1)*x(1)-g(3,2) A(16)=g(3,2)*(1.-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=t(3,2)*g(3,2)*x(2)+t(3,2)*g(3,2)*x(1)-t(1,2)*g(1,2)*x(1)-t(3,2)*g(3,2)
46
A(18)=t(3,2)*g(3,2)*(1.-z(1)-z(2))+t(1,2)*g(1,2)+z(1) A(19)=g(3,2)*x(2)-x(2)+g(3,2)*x(1)-g(1,2)*x(1)-g(3,2) A(20)=g(3,2)*(1.-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=g(1,3)*x(2)+g(1,3)*x(1)-g(1,3) A(22)=g(1,3)*(1.-z(1)-z(2)) A(23)=x(2)-g(2,3)*x(2)+x(1)-g(1,3)*x(1)-1 A(24)=1.-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(2,3)*g(2,3)*x(2)-t(1,3)*g(1,3)*x(1) A(26)=t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=x(2)-g(2,3)*x(2)+x(1)-g(1,3)*x(1)-1 A(28)=1.-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*phs+A(4*k-2))/(A(4*k-1)*phs+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*phs+A(4*k))**2) end do dgx1b=C(1)-B(2)*C(3)-B(3)*C(2)-B(4)*C(5)+(t(1,2)-B(5))*C(4)-B(6)*C(7)+(t(1,3)-B(7))*C(6) return end function function dgx2x1(g,t,i,j,x,z,phs) implicit none REAL::dgx2x1 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=(t(3,2)*g(3,2)-t(1,2)*g(1,2))*phs A(2)=t(3,2)*g(3,2)*phs*x(2)+t(3,2)*g(3,2)*(1.-phs-z(2)-z(1))+t(1,2)*g(1,2)*z(1) A(3)=(g(3,2)-g(1,2))*phs A(4)=(g(3,2)-1.)*phs*x(2)+g(3,2)*(1.-phs-z(2)-z(1))+g(1,2)*z(1)+z(2) A(5)=-g(2,1)*phs A(6)=g(2,1)*z(1) A(7)=(g(3,1)-1.)*phs A(8)=(-g(2,1)+g(3,1))*phs*x(2)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=t(3,1)*g(3,1)*phs A(10)=(-t(2,1)*g(2,1)+t(3,1)*g(3,1))*phs*x(2)+t(3,1)*g(3,1)*(1.-phs-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=(g(3,1)-1.)*phs A(12)=(-g(2,1)+g(3,1))*phs*x(2)+g(3,1)*(1.-phs-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=0 A(14)=z(2)-phs*x(2) A(15)=(-g(1,2)+g(3,2))*phs A(16)=(g(3,2)-1.)*phs*x(2)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=(-t(1,2)*g(1,2)+t(3,2)*g(3,2))*phs
47
A(18)=t(3,2)*g(3,2)*(1.-phs-z(1)-z(2))+t(3,2)*g(3,2)*phs*x(2)+t(1,2)*g(1,2)+z(1) A(19)=(g(3,2)-g(1,2))*phs A(20)=(g(3,2)-1.)*phs*x(2)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=g(2,3)*phs A(22)=g(2,3)*x(2)*phs+g(2,3)*(1.-phs-z(1)-z(2)) A(23)=(1.-g(1,3))*phs A(24)=(1.-g(2,3))*phs*x(2)+1.-phs-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(1,3)*g(1,3)+phs A(26)=-t(2,3)*g(2,3)*x(2)*phs+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=(1.-g(1,3))*phs A(28)=(1.-g(2,3))*phs*x(2)+1.-z(1)-z(2)-phs+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*x(1)+A(4*k-2))/(A(4*k-1)*x(1)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(1)+A(4*k))**2) end do dgx2x1=C(1)-B(2)*C(3)+(t(2,1)-B(3))*C(2)-B(4)*C(5)-B(5)*C(4)-B(6)*C(7)+(t(2,3)-B(7))*C(6) return end function function dgx2x2(g,t,i,j,x,z,phs) implicit none REAL::dgx2x2 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(3,2)*g(3,2)*phs A(2)=(t(3,2)*g(3,2)-t(1,2)*g(1,2))*phs*x(1)+t(3,2)*g(3,2)*(1.-phs-z(2)-z(1))+t(1,2)*g(1,2)*z(1) A(3)=(g(3,2)-1.)*phs A(4)=(g(3,2)-g(1,2))*phs*x(1)+g(3,2)*(1.-phs-z(2)-z(1))+z(2)+g(1,2)*z(1) A(5)=0 A(6)=g(2,1)*z(1)-g(2,1)*phs*x(1) A(7)=(-g(2,1)+g(3,1))*phs A(8)=(g(3,1)-1.)*phs*x(1)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=(-t(2,1)*g(2,1)+t(3,1)*g(3,1))*phs A(10)=t(3,1)*g(3,1)*phs*x(1)+t(3,1)*g(3,1)*(1.-phs-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=(-g(2,1)+g(3,1))*phs A(12)=(g(3,1)-1.)*phs*x(1)+g(3,1)*(1.-phs-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=-phs A(14)=z(2) A(15)=(g(3,2)-1.)*phs A(16)=(-g(1,2)+g(3,2))*phs*x(1)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=t(3,2)*g(3,2)*phs
48
A(18)=t(3,2)*g(3,2)*(1.-phs-z(1)-z(2))+(-t(1,2)*g(1,2)+t(3,2)*g(3,2))*phs*x(1)+t(1,2)*g(1,2)+z(1) A(19)=(g(3,2)-1.)*phs A(20)=(-g(1,2)+g(3,2))*phs*x(1)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=g(2,3)*phs A(22)=g(2,3)*x(1)*phs+g(2,3)*(1.-phs-z(1)-z(2)) A(23)=(1.-g(2,3))*phs A(24)=(1.-g(1,3))*phs*x(1)+1.-phs-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(2,3)*g(2,3)+phs A(26)=-t(1,3)*g(1,3)*x(1)*phs+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=(1.-g(2,3))*phs A(28)=(1.-g(1,3))*phs*x(1)+1.-z(1)-z(2)-phs+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*x(2)+A(4*k-2))/(A(4*k-1)*x(2)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(2)+A(4*k))**2) end do dgx2x2=C(1)-B(2)*C(3)+(t(2,1)-B(3))*C(2)-B(4)*C(5)-B(5)*C(4)-B(6)*C(7)+(t(2,3)-B(7))*C(6) return end function function dgx2b(g,t,i,j,x,z,phs) implicit none REAL::dgx2b INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(3,2)*g(3,2)*x(2)-t(1,2)*g(1,2)*x(1)+t(3,2)*g(3,2)*x(1)-t(3,2)*g(3,2) A(2)=t(3,2)*g(3,2)*(1.-z(2)-z(1))+t(1,2)*g(1,2)*z(1) A(3)=g(3,2)*x(2)-g(1,2)*x(1)+g(3,2)*x(1)-x(2)-g(3,2) A(4)=g(3,2)*(1.-z(2)-z(1))+g(1,2)*z(1)+z(2) A(5)=-g(2,1)*x(1) A(6)=g(2,1)*z(1) A(7)=g(3,1)*x(2)-g(2,1)*x(2)+g(3,1)*x(1)-x(1)-g(3,1) A(8)=g(3,1)*(1.-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=t(3,1)*g(3,1)*x(2)-t(2,1)*g(2,1)*x(2)+t(3,1)*g(3,1)*x(1)-t(3,1)*g(3,1) A(10)=t(3,1)*g(3,1)*(1.-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=g(3,1)*x(2)-g(2,1)*x(2)+g(3,1)*x(1)-x(1)-g(3,1) A(12)=g(3,1)*(1.-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=-x(2) A(14)=z(2) A(15)=g(3,2)*x(2)-x(2)+g(3,2)*x(1)-g(2,1)*x(1)-g(3,2) A(16)=g(3,2)*(1.-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=t(3,2)*g(3,2)*x(2)+t(3,2)*g(3,2)*x(1)-t(1,2)*g(1,2)*x(1)-t(3,2)*g(3,2)
49
A(18)=t(3,2)*g(3,2)*(1.-z(1)-z(2))+t(1,2)*g(1,2)+z(1) A(19)=g(3,2)*x(2)-x(2)+g(3,2)*x(1)-g(1,2)*x(1)-g(3,2) A(20)=g(3,2)*(1.-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=g(2,3)*x(2)+g(2,3)*x(1)-g(2,3) A(22)=g(2,3)*(1.-z(1)-z(2)) A(23)=x(2)-g(2,3)*x(2)+x(1)-g(1,3)*x(1)-1 A(24)=1.-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(2,3)*g(2,3)*x(2)-t(1,3)*g(1,3)*x(1) A(26)=t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=x(2)-g(2,3)*x(2)+x(1)-g(1,3)*x(1)-1 A(28)=1.-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*phs+A(4*k-2))/(A(4*k-1)*phs+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*phs+A(4*k))**2) end do dgx2b=C(1)-B(2)*C(3)+(t(2,1)-B(3))*C(2)-B(4)*C(5)-B(5)*C(4)-B(6)*C(7)+(t(2,3)-B(7))*C(6) return end function function dgx3x1(g,t,i,j,x,z,phs) implicit none REAL::dgx3x1 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=t(1,3)*g(1,3)*phs A(2)=-t(2,3)*g(2,3)*phs*x(2)+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(3)=(1.-g(1,3))*phs A(4)=(1.-g(2,3))*phs*x(2)+(g(2,3)-1.)*z(2)+(g(1,3)-1.)*z(1)+1.-phs A(5)=-g(3,1)*phs A(6)=g(3,1)*z(1) A(7)=(g(3,1)-1.)*phs A(8)=(-g(2,1)+g(3,1))*phs*x(2)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=t(3,1)*g(3,1)*phs A(10)=(-t(2,1)*g(2,1)+t(3,1)*g(3,1))*phs*x(2)+t(3,1)*g(3,1)*(1.-phs-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=(g(3,1)-1.)*phs A(12)=(-g(2,1)+g(3,1))*phs*x(2)+g(3,1)*(1.-phs-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=0 A(14)=(z(2)-phs*x(2))*g(3,2) A(15)=(-g(1,2)+g(3,2))*phs A(16)=(g(3,2)-1.)*phs*x(2)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=(-t(1,2)*g(1,2)+t(3,2)*g(3,2))*phs
50
A(18)=t(3,2)*g(3,2)*(1.-phs-z(1)-z(2))+t(3,2)*g(3,2)*phs*x(2)+t(1,2)*g(1,2)+z(1) A(19)=(g(3,2)-g(1,2))*phs A(20)=(g(3,2)-1.)*phs*x(2)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=phs A(22)=x(2)*phs+(1.-phs-z(1)-z(2)) A(23)=(1.-g(1,3))*phs A(24)=(1.-g(2,3))*phs*x(2)+1.-phs-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(1,3)*g(1,3)+phs A(26)=-t(2,3)*g(2,3)*x(2)*phs+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=(1.-g(1,3))*phs A(28)=(1.-g(2,3))*phs*x(2)+1.-z(1)-z(2)-phs+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*x(1)+A(4*k-2))/(A(4*k-1)*x(1)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(1)+A(4*k))**2) end do dgx3x1=C(1)-B(2)*C(3)+(t(3,1)-B(3))*C(2)-B(4)*C(5)+(t(3,2)-B(5))*C(4)-B(6)*C(7)-B(7)*C(6) return end function function dgx3x2(g,t,i,j,x,z,phs) implicit none REAL::dgx3x2 INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=-t(2,3)*g(2,3)*phs A(2)=-t(1,3)*g(1,3)*phs*x(1)+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(3)=(1.-g(2,3))*phs A(4)=(1.-g(1,3))*phs*x(1)+(g(2,3)-1.)*z(2)+(g(1,3)-1.)*z(1)+1-phs A(5)=0 A(6)=g(3,1)*z(1)-g(3,1)*phs*x(1) A(7)=(-g(2,1)+g(3,1))*phs A(8)=(g(3,1)-1.)*phs*x(1)+g(3,1)*(1.-phs-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=(-t(2,1)*g(2,1)+t(3,1)*g(3,1))*phs A(10)=t(3,1)*g(3,1)*phs*x(1)+t(3,1)*g(3,1)*(1.-phs-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=(-g(2,1)+g(3,1))*phs A(12)=(g(3,1)-1.)*phs*x(1)+g(3,1)*(1.-phs-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=-phs*g(3,2) A(14)=z(2)*g(3,2) A(15)=(g(3,2)-1.)*phs A(16)=(-g(1,2)+g(3,2))*phs*x(1)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=t(3,2)*g(3,2)*phs
51
A(18)=t(3,2)*g(3,2)*(1.-phs-z(1)-z(2))+(-t(1,2)*g(1,2)+t(3,2)*g(3,2))*phs*x(1)+t(1,2)*g(1,2)+z(1) A(19)=(g(3,2)-1.)*phs A(20)=(-g(1,2)+g(3,2))*phs*x(1)+g(3,2)*(1.-phs-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=phs A(22)=x(1)*phs+(1.-phs-z(1)-z(2)) A(23)=(1.-g(2,3))*phs A(24)=(1.-g(1,3))*phs*x(1)+1.-phs-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(2,3)*g(2,3)+phs A(26)=-t(1,3)*g(1,3)*x(1)*phs+t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=(1.-g(2,3))*phs A(28)=(1.-g(1,3))*phs*x(1)+1.-z(1)-z(2)-phs+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*x(2)+A(4*k-2))/(A(4*k-1)*x(2)+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*x(2)+A(4*k))**2) end do dgx3x2=C(1)-B(2)*C(3)+(t(3,1)-B(3))*C(2)-B(4)*C(5)+(t(3,2)-B(5))*C(4)-B(6)*C(7)-B(7)*C(6) return end function function dgx3b(g,t,i,j,x,z,phs) implicit none REAL::dgx3b INTEGER::i,j REAL,DIMENSION(i,j)::g,t REAL,DIMENSION(i)::x,z REAL::phs INTEGER::k REAL::A(28),B(7),C(7) A(1)=-t(2,3)*g(2,3)*x(2)-t(1,3)*g(1,3)*x(1) A(2)=t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(3)=-g(2,3)*x(2)-g(1,3)*x(1)+x(1)+x(2)-1. A(4)=z(1)*(g(1,3)-1.)+z(2)*(g(2,3)-1.) A(5)=-g(3,1)*x(1) A(6)=g(3,1)*z(1) A(7)=g(3,1)*x(2)-g(2,1)*x(2)+g(3,1)*x(1)-x(1)-g(3,1) A(8)=g(3,1)*(1.-z(2)-z(1))+g(2,1)*z(2)+z(1) A(9)=t(3,1)*g(3,1)*x(2)-t(2,1)*g(2,1)*x(2)+t(3,1)*g(3,1)*x(1)-t(3,1)*g(3,1) A(10)=t(3,1)*g(3,1)*(1.-z(1)-z(2))+t(2,1)*g(2,1)*z(2) A(11)=g(3,1)*x(2)-g(2,1)*x(2)+g(3,1)*x(1)-x(1)-g(3,1) A(12)=g(3,1)*(1.-z(1)-z(2))+g(2,1)*z(2)+z(1) A(13)=-x(2)*g(3,2) A(14)=z(2)*g(3,2) A(15)=g(3,2)*x(2)-x(2)+g(3,2)*x(1)-g(2,1)*x(1)-g(3,2) A(16)=g(3,2)*(1.-z(1)-z(2))+z(2)+g(1,2)*z(1) A(17)=t(3,2)*g(3,2)*x(2)+t(3,2)*g(3,2)*x(1)-t(1,2)*g(1,2)*x(1)-t(3,2)*g(3,2)
52
A(18)=t(3,2)*g(3,2)*(1.-z(1)-z(2))+t(1,2)*g(1,2)+z(1) A(19)=g(3,2)*x(2)-x(2)+g(3,2)*x(1)-g(1,2)*x(1)-g(3,2) A(20)=g(3,2)*(1.-z(1)-z(2))+z(2)+g(1,2)*z(1) A(21)=x(2)+x(1)-1. A(22)=1.-z(1)-z(2) A(23)=x(2)-g(2,3)*x(2)+x(1)-g(1,3)*x(1)-1 A(24)=1.-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) A(25)=-t(2,3)*g(2,3)*x(2)-t(1,3)*g(1,3)*x(1) A(26)=t(2,3)*g(2,3)*z(2)+t(1,3)*g(1,3)*z(1) A(27)=x(2)-g(2,3)*x(2)+x(1)-g(1,3)*x(1)-1 A(28)=1.-z(1)-z(2)+g(2,3)*z(2)+g(1,3)*z(1) do k=1,7 B(k)=(A(4*k-3)*phs+A(4*k-2))/(A(4*k-1)*phs+A(4*k)) C(k)=(A(4*k-3)*A(4*k)-A(4*k-1)*A(4*k-2))/((A(4*k-1)*phs+A(4*k))**2) end do dgx3b=C(1)-B(2)*C(3)+(t(3,1)-B(3))*C(2)-B(4)*C(5)+(t(3,2)-B(5))*C(4)-B(6)*C(7)-B(7)*C(6) return end function subroutine matriz(f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,m,i,g,t,x,x2,z,b) implicit none REAL,EXTERNAL::f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22 REAL,INTENT(IN)::b REAL,DIMENSION(i,i),INTENT(IN)::g,t REAL,DIMENSION(i),INTENT(IN)::x,z,x2 INTEGER,INTENT(IN)::i REAL,DIMENSION(i,i+1),INTENT(OUT)::m m(1,1)=x(1)*EXP(f22(g,t,3,x,1))*f7(g,t,3,3,x)+EXP(f22(g,t,3,x,1))-(b/(1.-b))*EXP(f22(g,t,3,x2,1))& &-((z(1)-b*x(1))/(1.-b))*EXP(f22(g,t,3,x2,1))*f13(g,t,3,3,x,z,b) m(2,1)=x(2)*EXP(f22(g,t,3,x,2))*f8(g,t,3,3,x)-((z(2)-b*x(2))/(1.-b))*EXP(f22(g,t,3,x2,2))*f14(g,t,3,3,x,z,b) m(3,1)=x(3)*EXP(f22(g,t,3,x,3))*f9(g,t,3,3,x)-EXP(f22(g,t,3,x,3))-(b/(1.-b))*EXP(f22(g,t,3,x2,3))& &-((z(3)-b*x(3))/(1.-b))*EXP(f22(g,t,3,x2,3))*f15(g,t,3,3,x,z,b) m(1,2)=x(1)*EXP(f22(g,t,3,x,1))*f10(g,t,3,3,x)-((z(1)-b*x(1))/(1.-b))*EXP(f22(g,t,3,x2,1))*f16(g,t,3,3,x,z,b) m(2,2)=x(2)*EXP(f22(g,t,3,x,2))*f11(g,t,3,3,x)+EXP(f22(g,t,3,x,2))-(b/(1.-b))*EXP(f22(g,t,3,x2,2))& &-((z(2)-b*x(2))/(1.-b))*EXP(f22(g,t,3,x2,2))*f17(g,t,3,3,x,z,b) m(3,2)=x(3)*EXP(f22(g,t,3,x,3))*f12(g,t,3,3,x)-EXP(f22(g,t,3,x,3))-(b/(1.-b))*EXP(f22(g,t,3,x2,3))& &-((z(3)-b*x(3))/(1.-b))*EXP(f22(g,t,3,x2,3))*f18(g,t,3,3,x,z,b) m(1,3)=EXP(f22(g,t,3,x2,1))*((x(1)-z(1))/((b-1.)**2))+((z(1)-b*x(1))/(1.-b))*EXP(f22(g,t,3,x2,1))*f19(g,t,3,3,x,z,b)
53
m(2,3)=EXP(f22(g,t,3,x2,2))*((x(2)-z(2))/((b-1.)**2))+((z(2)-b*x(2))/(1.-b))*EXP(f22(g,t,3,x2,2))*f20(g,t,3,3,x,z,b) m(3,3)=EXP(f22(g,t,3,x2,3))*((x(3)-z(3))/((b-1.)**2))+((z(3)-b*x(3))/(1.-b))*EXP(f22(g,t,3,x2,3))*f21(g,t,3,3,x,z,b) m(1,4)=x(1)*EXP(f22(g,t,3,x,1))-((z(1)-b*x(1))/(1.-b))*EXP(f22(g,t,3,x2,1)) m(2,4)=x(2)*EXP(f22(g,t,3,x,2))-((z(2)-b*x(2))/(1.-b))*EXP(f22(g,t,3,x2,2)) m(3,4)=x(3)*EXP(f22(g,t,3,x,3))-((z(3)-b*x(3))/(1.-b))*EXP(f22(g,t,3,x2,3)) end subroutine subroutine determinante(m,i,a,b,c,d) implicit none INTEGER,INTENT(IN)::i REAL,INTENT(IN),DIMENSION(i,i+1)::m REAL,INTENT(OUT)::a,b,c,d a=m(1,4)*m(2,2)*m(3,3)+m(1,2)*m(2,3)*m(3,4)+m(1,3)*m(2,4)*m(3,2)-m(3,4)*m(2,2)*m(1,3)-m(3,2)*m(2,3)*m(1,4)& &-m(3,2)*m(2,4)*m(1,2) b=m(1,1)*m(2,4)*m(3,3)+m(1,4)*m(2,3)*m(3,1)+m(1,3)*m(2,1)*m(3,4)-m(3,1)*m(2,4)*m(1,3)-m(3,4)*m(2,3)*m(1,1)& &-m(3,4)*m(2,1)*m(1,4) c=m(1,1)*m(2,2)*m(3,4)+m(1,2)*m(2,4)*m(3,1)+m(1,4)*m(2,1)*m(3,2)-m(3,1)*m(2,2)*m(1,4)-m(3,2)*m(2,4)*m(1,1)& &-m(3,2)*m(2,1)*m(1,2) d=m(1,1)*m(2,2)*m(3,3)+m(1,2)*m(2,3)*m(3,1)+m(1,3)*m(2,1)*m(3,2)-m(3,1)*m(2,2)*m(1,3)-m(3,2)*m(2,3)*m(1,1)& &-m(3,2)*m(2,1)*m(1,2) end subroutine subroutine avance(x,m,i,b) implicit none INTEGER,INTENT(IN)::i REAL,INTENT(INOUT)::b REAL,INTENT(IN),DIMENSION(i,i+1)::m REAL,INTENT(INOUT),DIMENSION(i)::x REAL::xe(3) REAL::s(4) INTEGER::j EXTERNAL::determinante call determinante(m,3,s(1),s(2),s(3),s(4)) do j=1,2 xe(j)=x(j) x(j)=x(j)-s(j)/s(4) end do x(3)=1.-x(1)-x(2) xe(3)=b b=b-s(3)/s(4) end subroutine
54
ANEXO B. CÓDIGO DEL PROGRAMA PARA CALCULAR CURVAS DE RESIDUO.
Este programa fue codificado en Fortran 90 ®
function lng(g,t,n,x,r) implicit none REAL::lng integer ::n,r REAL::g(n,n),t(n,n),x(n) INTEGER::i,j,k,l,m REAL::s1,s2,s3,s4,s5 s1=0 s2=0 s3=0 do i=1,n s1=s1+(t(i,r)*g(i,r)*x(i)) end do do i=1,n s2=s2+(g(i,r)*x(i)) end do s5=0 do j=1,n s3=0 s4=0 do k=1,n s3=s3+(g(k,j)*x(k)) end do do l=1,n s4=s4+(x(l)*t(l,j)*g(l,j)) end do s5=s5+(((x(j)*g(r,j))/s3)*(t(r,j)-(s4/s3))) end do lng=(s1/s2)+s5 return end function lng function psat(a,b,c,t) REAL::psat,a,b,c,t psat=10**(a-b/(t+c)) return end function psat program MCR3 implicit none INTEGER:: i,j,k,n,u,r REAL::x(3),xo(3),z(3),Kd(3),y(3) REAL::b(3,3),a(3,3),g(3,3),t(3,3) REAL::k1(3),k2(3),k3(3),ps(3)
55
REAL::Ti,phs,P,er,lng,psat REAL::tx,th,fx,fh,erv,d CHARACTER(LEN=1)::S S='s' OPEN(UNIT=10, FILE="MCR3.csv", STATUS="replace") OPEN(UNIT=25,FILE="datos.dat",STATUS="old",ACTION="read") OPEN(UNIT=24,FILE="antoine.dat",STATUS="old",ACTION="read") do i=1,3 do j=1,3 if (i==j) then b(i,j)=0 else PRINT*, "b(",i,",",j,") " READ(25,*) b(i,j) end if call system ("cls") end do end do a=0 do i=1,3 do j=1,3 if (a(j,i)/=0) then a(i,j)=a(j,i) end if if (i/=j.and.a(i,j)==0) then PRINT*, "a(",i,",",j,")= " READ(25,*) a(i,j) end if end do end do call system('cls') do i=1,3 PRINT*, "A(",i,")" READ(24,*)k1(i) PRINT*, "B(",i,")" READ(24,*)k2(i) PRINT*, "C(",i,")" READ(24,*)k3(i) end do call system ("cls") PRINT*, "P[mmHg]= " READ*, P do WHILE(S=='s'.or.S=='S') PRINT*, " ¿Numero de puntos? " READ*, r print*, " ¿Incremento? " READ*, d
56
do i=1,3 PRINT*,"x(",i,")= " READ*, z(i) end do WRITE(10,*)"" WRITE(10,50)z(2),',',z(3),',',z(1) do k=1,r tx=70 erv=1 u=0 do WHILE(erv>=0.01.and.u<20) do i=1,3 ps(i)=psat(k1(i),k2(i),k3(i),tx) end do do i=1,3 do j=1,3 t(i,j)=b(i,j)/(tx+273.15) g(i,j)=EXP(-1.0*a(i,j)*t(i,j)) end do end do x=(/0.,1.,0./) phs=0.3 er=1 n=0 do i=1,3 xo(i)=(z(i)-phs*x(i))/(1.-phs) end do if (xo(1)<0.or.xo(2)<0.or.xo(3)<0) then call system('pause') call system ('cls') GO TO 100 else do WHILE(er>0.1.and.n<50) do i=1,3 Kd(i)=(EXP(lng(g,t,3,x,i)))/(EXP(lng(g,t,3,xo,i))) end do call beta(phs,Kd,3,z) do i=1,3 x(i)=(z(i)/(phs+Kd(i)*(1.-phs))) end do er=0 do i=1,3 er=er+SQRT((((EXP(lng(g,t,3,x,i)))*x(i)-(EXP(lng(g,t,3,xo,i)))*xo(i)))**2) end do er=SQRT((er)**2) n=n+1 end do
57
end if fx=0 do i=1,3 fx=fx+xo(i)*EXP(lng(g,t,3,xo,i))*ps(i) end do fx=fx-P th=1.0001*tx do i=1,3 ps(i)=psat(k1(i),k2(i),k3(i),th) end do do i=1,3 do j=1,3 t(i,j)=b(i,j)/(th+273.15) g(i,j)=EXP(-1.0*a(i,j)*t(i,j)) end do end do x=(/0.,1.,0./) phs=0.3 er=1 n=0 do i=1,3 xo(i)=(z(i)-phs*x(i))/(1.-phs) end do if (xo(1)<0.or.xo(2)<0.or.xo(3)<0) then xo=z x=xo else do WHILE(er>0.1.and.n<50) do i=1,3 Kd(i)=(EXP(lng(g,t,3,x,i)))/(EXP(lng(g,t,3,xo,i))) end do call beta(phs,Kd,3,z) do i=1,3 x(i)=(z(i)/(phs+Kd(i)*(1.-phs))) end do er=0 do i=1,3 er=er+SQRT((((EXP(lng(g,t,3,x,i)))*x(i)-(EXP(lng(g,t,3,xo,i)))*xo(i)))**2) end do er=SQRT((er)**2) n=n+1 end do end if fh=0 do i=1,3 fh=fh+xo(i)*EXP(lng(g,t,3,xo,i))*ps(i) end do
58
fh=fh-P erv=sqrt(fx**2) Ti=tx tx=tx-((0.0001*tx*fx)/(fh-fx)) u=u+1 end do do i=1,3 y(i)=xo(i)*EXP(lng(g,t,3,xo,i))*psat(k1(i),k2(i),k3(i),Ti)/P z(i)=z(i)+(z(i)-y(i))*d end do !Fin el ELLV WRITE(10,50)z(2),',',z(3),',',z(1) end do call system("pause") call system("cls") 50 FORMAT(8(F8.4,A1),F8.4) 100 PRINT*, "¿Desea realizar otro calculo? S/N" READ*, S end do end program subroutine beta(b,k,n,z) implicit none INTEGER::i,j INTEGER,INTENT(IN)::n REAL,INTENT(IN)::z(n),k(n) REAL,INTENT(INOUT)::b REAL::db,df,f,er er=1 j=0 do WHILE(er>0.01) f=0 do i=1,3 f=f+(z(i)/(b+k(i)*(1.-b))) end do f=f-1. db=1.0001*b df=0 do i=1,3 df=df+(z(i)/(db+k(i)*(1.-db))) end do df=df-1. er=SQRT(((0.0001*b*f)/(df-f))**2) b=b-(1.0)*((0.0001*b*f)/(df-f)) j=j+1 end do end subroutine
59
Los ojos de Jehová velan por la ciencia… Proverbios 22:12a