Construcción de curvas de residuo C3OHH2OACC3
Transcript of Construcción de curvas de residuo C3OHH2OACC3
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
las tinieblas. Génesis 1:4
i
CONTENIDO GENERAL
RESUMEN……………………………………………………………………….iii INTRODUCCIÓN……………………………………………………………….iv
CAPÍTULO I. GENERALIDADES
I.1 Características y usos del acetato de n-propilo ……………………..1
I.1.1 Obtención industrial……………………………………………….1
I.2 Representaciones gráficas de los procesos de destilación..……….2
I.2.1 Curvas de destilación……………………………………………..2
I.2.2 Curvas de residuo…………………………………………………2
I.2.3 Utilidad de los mapas de curvas de destilación y de residuo 2
I.3 Fundamentos Termodinámicos………………………………………...4
I.3.1 Equilibrio líquido-vapor………………………….………………...4
I.3.2 Ley de Raoult modificada…………………………………………4
I.3.3 Ecuación de Renon……………………………………………….5
CAPÍTULO II. CONSTRUCCIÓN DE CURVAS DE RESIDUO
II.1 Correlación del coeficiente de actividad de las fases líquidas…....8
II.1.1 Sistemas binarios …..……………………………………………8
II.1.1.1 Agua-acetato de propilo……………………………….9
II.1.1.2 Propanol-agua…………………………………………10
II.1.1.3 Propanol-acetato de propilo………………………….11
II.1.2 Sistema ternario…………………………………………………12
II.2 Algoritmos matemáticos………………………………………………16
ii
II.2.1 Temperatura de burbuja con el método de Newton-Raphson………………………………………………………………...16
II.2.2 Equilibrio líquido-líquido con el método de Newton-Raphson multivariable……………………………………………………………16
II.2.3 Curva de residuo con el método de Euler……………………19
II.3 Construcción de programas computacionales……………………..20
II.3.1 Equilibrio líquido-líquido-vapor………………………………...20
II.3.2 Curva de residuo………………………………………………..21
CAPÍTULO III. RESULTADOS Y DISCUSIÓN
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
101.6 0 0 101.436996 0 0 0.16300
101.3 0.009 0.01 100.264 0.038461 0.071855 1.03826
100 0.057 0.1 99.283501 0.076923 0.133676 0.71757
99.5 0.07 0.119 98.459297 0.115385 0.187727 1.04396
98.2 0.149 0.225 97.763397 0.153846 0.23566 0.43676
97.8 0.17 0.246 97.1745 0.192308 0.27872 0.62675
97.25 0.21 0.29 96.675903 0.230769 0.317869 0.57515
96.3 0.285 0.365 96.254402 0.269231 0.353868 0.04952
96.1 0.32 0.395 95.8993 0.307692 0.387333 0.20122
95.7 0.357 0.4175 95.602303 0.346154 0.418775 0.09831
95 0.5 0.525 95.356598 0.384615 0.448629 0.38250
94.9 0.595 0.6 95.156799 0.423077 0.477274 0.33251
94.85 0.623 0.623 94.998802 0.461538 0.505049 0.24925
94.9 0.656 0.646 94.879601 0.5 0.532269 0.19413
94.95 0.687 0.668 94.797096 0.538462 0.559234 0.23932
94.9 0.697 0.675 94.750099 0.576923 0.586237 0.21158
95 0.722 0.693 94.738297 0.615385 0.61358 0.29353
95.2 0.763 0.727 94.762299 0.653846 0.641574 0.45912
95.3 0.784 0.745 94.823502 0.692308 0.67056 0.49092
95.3 0.795 0.752 94.9245 0.730769 0.700914 0.38436
95.3 0.798 0.755 95.069 0.769231 0.733063 0.23382
95.4 0.802 0.758 95.261597 0.807692 0.767506 0.13885
95.5 0.817 0.775 95.508598 0.846154 0.804831 0.04259
95.55 0.833 0.762 95.817902 0.884615 0.845752 0.28539
96.1 0.905 0.876 96.199402 0.923077 0.891143 0.10216
97 0.9825 0.972 96.665199 0.961538 0.942095 0.33679
97.2 1 1 97.230698 1 1 0.03070
13
Tabla 4. Parámetros de interacción binarios para la mezcla n-propanol – agua
(gi,j – gj,j)/R DECHEMA CALCULADOS
1,2 181.25 181.2351
2,1 930.6361 928.0729
II.1.1.3 Propanol – Acetato de propilo
Figura 5. Diagrama de equilibrio del sistema propanol – acetato de propilo
La mezcla exhibe un azeótropo de bajo punto de ebullición, con una sola fase
líquida. Para esta mezcla se obtuvieron parámetros que producen un mejor ajuste
de los puntos, distintos a los reportados en DECHEMA, por lo que además de los
parámetros se reporta con fines comparativos el porcentaje de diferencia absoluta
(%DA).
94
95
96
97
98
99
100
101
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
14
Tabla 5. Correlación de datos para el sistema propanol – acetato de propilo
DATOS EXPERIMENTALES DATOS CALCULADOS %ERROR
T[°C] x propanol y propanol T[°C] x propanol y propanol
100 0 0 100.017998 0 0 0.01800
89.3 0.05 0.3481 90.3069 0.052632 0.325631 1.00715
88.38 0.1 0.3759 88.539001 0.105263 0.38018 0.15915
88.1 0.15 0.3858 88.089302 0.157895 0.395788 0.01663
87.97 0.2 0.3922 87.913101 0.210526 0.403249 0.05891
87.81 0.25 0.3999 87.792198 0.263158 0.40987 0.02428
87.72 0.3 0.4065 87.687798 0.315789 0.417785 0.03760
87.65 0.35 0.4139 87.604301 0.368421 0.427669 0.05116
87.62 0.4 0.4202 87.555901 0.421053 0.439765 0.07025
87.62 0.45 0.4397 87.557503 0.473684 0.454234 0.06840
87.65 0.5 0.4499 87.6241 0.526316 0.4713 0.04268
87.77 0.55 0.4667 87.771599 0.578947 0.491331 0.03804
87.98 0.6 0.4878 88.018799 0.631579 0.514917 0.05690
88.31 0.65 0.5139 88.390602 0.684211 0.542982 0.09227
Tabla 6. Parámetros de interacción binarios para la mezcla n-propanol – acetato
de propilo
(gi,j – gj,j)/R DECHEMA CALCULADOS
1,2 531.132 %DA 170.9998 %DA
2,1 -217.9861 25.11 56.3613 21.28
II.1.2 Sistema ternario
Para el cálculo del coeficiente de actividad de mezclas multicomponentes con la
ecuación de Renon, son necesarios los parámetros de interacción para cada par
binario (ecuaciones 1.5 y 1.6). Utilizando los encontrados en la sección II.1.1, se
obtiene el diagrama de la Figura 6. Es posible observar la gran desviación que
genera este cálculo, por lo que es necesario ajustar dichos parámetros para
15
reproducir el comportamiento de la mezcla ternaria. En este trabajo, el ajuste se
realizó por incrementos y decrementos de los parámetros de la sección II.1.1,
dando como resultado los datos de la tabla 8. Con estos datos se obtuvieron los
valores de la tabla 7 y el diagrama de la figura 7; los cuales aunque no reproducen
por completo el comportamiento buscado sí proporcionan un mejor cálculo.
Figura 6. Datos experimentales vs. atos calculados del sistema agua – propanol –
acetato de propilo
16
Tabla 7. Correlación de datos para el sistema propanol(1) – agua(2) –
propilacetato(3)
FASE LÍQUIDA ORGÁNICA FASE VAPOR FASE LÍQUIDA ACUOSA
Pto.1 Experimental Calculado Experimental Calculado Experimental Calculado t (°C) 82.49 82.76 t (°C) 82.49 82.76 t (°C) 82.49 82.76
ox1 0.086 0.091
1y 0.059 0.072 ax1
0.0059 0.009
ox2 0.243 0.199
2y 0.515 0.517 ax2
0.9903 0.987
ox3 0.671 0.711
3y 0.426 0.414 ax3
0.0038 0.003
Pto. 2 t (°C) 82.46 82.5 t (°C) 82.46 82.5 t (°C) 82.46 82.5
ox1 0.154 0.168
1y 0.103 0.124 ax1
0.0113 0.019
ox2 0.306 0.24
2y 0.516 0.509 ax2
0.9847 0.978
ox3 0.540 0.592
3y 0.381 0.368 ax3
0.004 0.004
Pto. 3 t (°C) 82.63 82.59 t (°C) 82.63 82.59 t (°C) 82.63 82.59
ox1 0.207 0.233
1y 0.132 0.165 ax1
0.0175 0.028
ox2 0.368 0.286
2y 0.523 0.505 ax2
0.9784 0.968
ox3 0.425 0.481
3y 0.345 0.331 ax3
0.0041 0.004
Pto. 4 t (°C) 83.29 82.693 t (°C) 83.29 82.693 t (°C) 83.29 82.693
1Ox 0.254 0.284 1y 0.191 0.225
1ax 0.0306 0.049
2Ox 0.525 0.335 2y 0.525 0.505
2ax 0.9642 0.947
3Ox 0.221 0.381 3y 0.284 0.270
3ax 0.0052 0.005
Pto. 5 t(°C) 83.75 83.723 t(°C) 83.75 83.723 t(°C) 83.75 83.723
1Ox 0.237 0.347 1y 0.219 0.216
1ax 0.0402 0.033
2Ox 0.63 0.45 2y 0.529 0.254
2ax 0.9528 0.961
3Ox 0.133 0.203 3y 0.252 0.53
3ax 0.007 0.006
Pto. 6 t(°C) 84.08 84.031 t(°C) 84.08 84.031 t(°C) 84.08 84.031
1Ox 0.195 0.353 1y 0.232 0.23
1ax 0.0602 0.031
2Ox 0.724 0.488 2y 0.532 0.535
2ax 0.9267 0.959
3Ox 0.195 0.159 3y 0.236 0.235
3ax 0.0131 0.01
Datos experimentales tomados de DECHEMA, pp. 523
17
Figura 7. Corelación de datos para el sistema ternario n-propanol(1) – agua(2) –
propilacetato(3)
Tabla 8. Parámetros de interacción binarios de la mezcla n-propanol(1) – agua(2)
– acetato de propilo(3).
gi,j – gj,j BINARIOS SECCIÓN II.1.1 AJUSTADOS
1,2 181.2351 100
2,1 928.0729 1020
1,3 170.9998 250
3,1 56.3614 -60
2,3 1760.3253 1965
3,2 362.4451 480
18
II.2 Algoritmos matemáticos
II.2.1 Temperatura de burbuja con el método de Newton - Raphson
Para el cálculo del punto de burbuja se tiene como datos la composición de la fase
líquida y la presión del sistema. En estas condiciones, la ecuación 1.2 puede
reacomodarse a:
Donde y son funciones de la temperatura. Si se resta la presión a ambos
lados de la ecuación, se genera una expresión que puede resolverse con el
método numérico de Newton – Raphson. El procedimiento a seguir es:
1. Suponer una temperatura (T) para el punto de burbuja. Dicha temperatura
debe estar cercana a la solución, por lo que se recomienda utilizar una
temperatura intermedia entre los puntos de ebullición de los componentes
más volátil y más pesado.[6]
2. Calcular y a la temperatura supuesta
3. Evaluar la función objetivo con los valores calculados
4. Calcular y a 1.0001*T
5. Evaluar con estos nuevos valores la función objetivo
6. Si ,donde ε es el criterio de convergencia, el valor de la temperatura
actual es el del punto de burbuja, de lo contrario se debe calcular un
incremento para la siguiente iteración como:
7. Repetir a partir del punto 2 hasta la convergencia de la función objetivo.
II.2.2 Equilibrio líquido – líquido con el método de Newton – Raphson
multivariable
Al igual que el equilibrio líquido – vapor, el equilibrio líquido – líquido tiene como
condición la igualdad de fugacidades para ambas fases. Si la fugacidad de la fase
……………….2.1
19
líquida esta es la expresada en la ecuación 1.2, entonces la igualdad de
fugacidades está dada por:
Donde y * son las composiciones de cada fase líquida y es el coeficiente de
actividad de la respectiva fase. En estas circunstancias, las únicas variables a
encontrar son las composiciones de ambas fases. La ecuación 2.2 puede
reacomodarse, quedando de la siguiente forma:
Que puede resolverse con el método de Newton – Raphson multivariable. La
dificultad se encuentra en que para cualquier sistema de ecuaciones, se debe
contar con igual número de ecuaciones que incógnitas existan. Y para un sistema
de n componentes, se tienen n ecuaciones y 2n variables a conocer. Sin embargo,
esto puede simplificarse si se plantea el sistema como un separador en el que se
introduce una mezcla de composición zi la cual se separa en dos fases líquidas L1
y L2. Entonces, el balance de materia para cada componente queda como:
Ahora bien, si se divide toda la expresión entre L, y llamamos a la relación L1/L
como β ,la ecuación 2.4 puede escribirse como:
La ecuación 2.5 vincula ambas fases a través del coeficiente de separación β, Lo
que permite reducir el número de incógnitas a n+1. Por otro lado, si se utiliza la
igualdad: se reducen en una unidad, con lo que se llega a un
sistema con una única solución. Las ecuaciones a resolver son entonces:
………………………..2.2
……………………….2.3
…………………….2.4
……………………….2.5
20
El algoritmo de solución es el siguiente:
1. Se tiene como datos iniciales la composición global z, la temperatura
supuesta del sistema y la presión
2. Se propone una composición para una de las fases líquidas. Walas [4]
recomienda identificar el par que produce la inmiscibilidad y adjudicarle las
composiciones de 0.9 y 0.05, ya que en la mayoría de los sistemas suele
existir una fase con una composición semejante.
3. Se propone un coeficiente de separación β. La selección de éste dependerá
en gran manera del comportamiento de la mezcla, pero se sugiere que sea
entre 0.3 y 0.5
4. Se obtiene las derivadas parciales de cada una de las funciones a resolver
respecto a cada una de las variables involucradas, en este caso las
composiciones de la fase líquida menos la del último componente y el
coeficiente de separación.
5. Se evalúan tanto las funciones como las derivadas parciales con los datos
supuestos en los puntos 2 y 3
6. Se resuelve el siguiente sistema de ecuaciones:
21
Donde son los incrementos para la variable , y es la derivada
parcial de la función respecto a la variable .
7. Con los incrementos calculados, se le da un nuevo valor a las variables y se
repiten los pasos 4,5 y 6 hasta una convergencia apropiada.
Sin duda, la parte más complicada de este método es el cálculo de las derivadas
parciales. Sin embargo vale el esfuerzo al reducir los intentos para encontrar las
composiciones buscadas.
II.2.3 Curva de residuo con el método de Euler
El cambio en la composición del residuo de un sistema de destilación simple está
dado por:
Donde representa la masa total del residuo y es la composición de un vapor
en equilibrio con este residuo. Si se considera que el residuo decrece con el paso
del tiempo, y pueden combinarse en una sola variable [3,7], lo que convierte
a la ecuación 2.6 en:
La solución de la ecuación diferencial 2.7 puede obtenerse aplicando el método
numérico de Euler, siguiendo el siguiente procedimiento:
1. Elegir un punto de composición inicial de la fase líquida ( )
2. Elegir un número de puntos H a obtener
3. Elegir un tamaño del paso de integración tal que
4. Calcular, utilizando el método de punto de burbuja, la composición del
vapor en equilibrio ( ) con el punto inicial.
5. Calcular el siguiente valor de composición de líquido como:
………………2.6
………………2.7
22
6. Continuar hasta que h=H
El resultado de graficar las composiciones de líquido obtenidas es la curva de
residuo.
II.3 Construcción de programas computacionales
II.3.1 Equilibrio líquido – líquido – vapor
Como se vio en el punto anterior, para poder construir la curva de residuo es
necesario calcular la composición en equilibrio con el líquido a estudiar. Además,
si este líquido se encuentra en dos fases, también será necesario conocer la
composición de estas fases líquidas para poder calcular la composición del vapor.
La forma de optimizar estos cálculos es la construcción de un programa con
métodos anidados. El resultado de esto es el siguiente algoritmo:
1. Leer las constantes de la ecuación de Antoine y de la ecuación de Renon
desde un archivo
2. Solicitar al usuario la presión a la cual se realizará el cálculo, así como la
composición global de las fases líquidas
3. Fijar la temperatura inicial
4. Calcular las composiciones de las fases líquidas utilizando el algoritmo de
la sección II.2.2
5. Si a las condiciones actuales sólo existe una fase líquida, el paso anterior
proporcionará un valor de β negativo o mayor que 1. Si esto se presenta se
deberá usar la composición global de la fase líquida como valores para el
siguiente paso
6. La solución del punto 4 proporciona las composiciones de las fases
líquidas en equilibrio. Con estas composiciones se calcula la composición
de la fase vapor yi
7. Si la sumatoria de yi no es igual a la unidad, se calcula un incremento para
la temperatura con el método discutido en la sección II.2.1 y se repite el
cálculo a partir del paso 4 hasta llegar a la convergencia.
23
En este procedimiento, es posible notar que se requiere calcular dos veces la
composición de las fases líquidas (si las hay). Sin embargo, ya que no hay gran
diferencia entre las temperaturas, puede despreciarse la diferencia realizando el
cálculo una sola vez por cada iteración. El diagrama de flujo del procedimiento es
el mostrado en la figura 8.
Figura 8. Algoritmo para calcular el equilibrio L–L–V.
La aplicación de este algoritmo para una mezcla binaria se reduce a encontrar la
composición de las fases líquidas en equilibrio, a la presión del sistema, y luego
calcular el equilibrio líquido-vapor en los intervalos (0, ) y ( ,1) poniendo entre
ellos los puntos ( , ) y ( , ) donde y representan las composiciones de las
fases líquidas en equilibrio. Este procedimiento genera un diagrama de fases
como el de la Figura 3 que se muestra en la sección II.1.1.1.
II.3.2 Curva de residuo
El algoritmo es el siguiente:
1. Leer desde un archivo los parámetros de la ecuación de Antoine, así como
los de la ecuación de Renon.
24
2. Solicitar al usuario la presión(P) de trabajo, el número de puntos a
calcular(N) y el tamaño de paso o incremento(Δε)
3. Solicitar el punto inicial (x1,x2,x3)
4. Calcular el ELV o ELLV según sea el caso
5. Calcular el siguiente valor de xi como para los dos
primeros componentes
6. Calcular la composición del tercer componente por diferencia
7. Repetir los pasos 4,5 y 6 hasta que n=N
Con este algoritmo se genera el diagrama de flujo mostrado en la figura 9
Figura 9. Algoritmo para la construcción de curvas de residuo
Con este programa, se construyó el mapa de curvas de residuo del sistema
metanol – etanol – n-propanol que se muestra en la figura 1 de la sección I.2.3, al
igual que el mapa de curvas de residuo de la figura 13 y la curva de residuo de la
figura 12 del siguiente capítulo.
25
CAPÍTULO III.- RESULTADOS
III.1 Mapa de curvas de destilación
Para el sistema propanol-agua-propilacetato a 760 mmHg el mapa de curvas de destilación es el mostrado en la figura 10.
Figura 10. Mapa de curvas de destilación del sistema Propanol-agua-propilacetato.
III.2 Mapa aproximado de curvas de residuo
Doherty y Malone [7] proporcionan un procedimiento para construir un mapa
aproximado de curvas de residuo. Para ello se requieren las temperaturas de
ebullición de cada componente puro y las composiciones y temperaturas de los
26
azeótropos existentes. Para el sistema propanol-agua-propilacetato a 760 mmHg
esta información se presenta en las tablas 9 y 10.
Tabla 9. Temperaturas de ebullición de los componentes puros
COMPONENTE TEMPERATURA DE EBULLICIÓN [°C] n-Propanol 97.12
Agua 100 Acetato de propilo 101.56
Tabla 10. Azeótropos de la mezcla propanol-agua-propilacetato
COMPONENTES COMPOSICIÓN TEMPERATURA [°C]
PARES BINARIOS
n-Propanol(1) – Agua(2) 0.397,0.603 88.709
Agua(2) – Acetato de propilo(3) 0.521,0.479 82.703 n-Propanol(1) – Acetato de
propilo(3) 0.665,0.335 95.666
TERNARIO (1),(2),(3) 0.059,0.515,0.426 82.49
El mapa aproximado resultante se muestra en la figura 10, y la información del mapa se resume en la tabla 11.
Tabla 11. Información del mapa aproximado de curvas de residuo.
COMPONENTE(S) TEMPERATURA TIPO DE PUNTO n-Propanol(1) 97.12 Nodo Estable
Agua(2) 100 Nodo Estable Acetato de propilo(3) 101.56 Nodo Estable
1,2 88.709 Silla 2,3 82.703 Silla 1,3 95.666 Silla
1,2,3 82.49 Nodo Inestable
Los nodos estables corresponden a los componentes puros debido a que poseen
los más altos puntos de ebullición en las regiones de destilación a las que
pertenecen. El nodo inestable perteneciente al azeótropo ternario heterogéneo
27
debe su comportamiento a que tiene el más bajo punto de ebullición en el mapa.
Finalmente los puntos silla de los azeótropos binarios son los puntos de ebullición
intermedios, y además son los límites de las zonas de destilación.
Figura 11. Mapa aproximado de curvas de residuo del sistema Propanol – agua – propilacetato
III.3 Mapa de curvas de residuo.
Con el programa mencionado en la sección II.3.2 se calcularon 20 puntos de la
curva de residuo mostrada en la figura 12, y cuya información se presenta en la
tabla 12. La curva se construyó con un paso de integración de 0.1 hacia adelante y
de -0.1 hacia atrás.
28
Tabla 12. Resultados del cálculo de una curva de residuo
x(agua) x(propilacetato) x(propanol) y(agua) y(propilacetato) y(propanol) ε
0.4 0.3 0.3 0.5323 0.2883 0.1794 0
0.3868 0.3012 0.3121 0.5267 0.2862 0.1871 0.1
0.3728 0.3027 0.3246 0.5203 0.2844 0.1953 0.2
0.358 0.3045 0.3375 0.5132 0.2827 0.204 0.3
0.3425 0.3067 0.3508 0.5053 0.2814 0.2133 0.4
0.3262 0.3092 0.3646 0.4964 0.2804 0.2233 0.5
0.3092 0.3121 0.3787 0.4863 0.2797 0.2339 0.6
0.2915 0.3153 0.3932 0.4751 0.2795 0.2454 0.7
0.2731 0.3189 0.408 0.4625 0.2798 0.2577 0.8
0.2542 0.3228 0.423 0.4484 0.2806 0.2711 0.9
0.2348 0.327 0.4382 0.4325 0.2819 0.2855 1
0.215 0.3315 0.4535 0.4148 0.284 0.3012 1.1
0.195 0.3363 0.4687 0.3951 0.2867 0.3182 1.2
0.175 0.3412 0.4837 0.3733 0.2902 0.3365 1.3
0.1552 0.3464 0.4985 0.3492 0.2944 0.3563 1.4
0.1358 0.3515 0.5127 0.323 0.2995 0.3775 1.5
0.1171 0.3567 0.5262 0.2946 0.3054 0.3999 1.6
0.0993 0.3619 0.5388 0.2645 0.3121 0.4234 1.7
0.0828 0.3669 0.5504 0.2332 0.3193 0.4475 1.8
0.0677 0.3716 0.5607 0.2014 0.3269 0.4717 1.9
0.4 0.3 0.3 0.5323 0.2883 0.1794 0
0.4132 0.2988 0.2879 0.5376 0.2906 0.1718 -0.1
0.4257 0.298 0.2763 0.5423 0.293 0.1646 -0.2
0.4373 0.2975 0.2652 0.5465 0.2956 0.1578 -0.3
0.4483 0.2973 0.2544 0.5503 0.2983 0.1514 -0.4
0.4585 0.2974 0.2441 0.5537 0.3011 0.1453 -0.5
0.468 0.2978 0.2342 0.5567 0.3039 0.1394 -0.6
0.4769 0.2984 0.2247 0.5594 0.3068 0.1338 -0.7
0.4851 0.2992 0.2157 0.5619 0.3096 0.1285 -0.8
0.4928 0.3003 0.2069 0.5641 0.3125 0.1234 -0.9
0.4999 0.3015 0.1986 0.5661 0.3153 0.1185 -1
0.5065 0.3029 0.1906 0.568 0.3182 0.1139 -1.1
0.5127 0.3044 0.1829 0.5697 0.3209 0.1094 -1.2
0.5184 0.3061 0.1756 0.5713 0.3236 0.1051 -1.3
0.5237 0.3078 0.1685 0.5727 0.3263 0.101 -1.4
0.5286 0.3097 0.1618 0.5741 0.3289 0.097 -1.5
0.5331 0.3116 0.1553 0.5754 0.3314 0.0932 -1.6
0.5374 0.3136 0.1491 0.5766 0.3338 0.0896 -1.7
0.5413 0.3156 0.1431 0.5777 0.3362 0.0861 -1.8
0.5449 0.3176 0.1374 0.5788 0.3385 0.0827 -1.9
29
Figura 12. Ejemplo de una curva de residuo
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