En esta sesión hemos modelado dinámicamente una columna de destilación de mezclas binarias trabajando en continuo. El programa empleado utiliza por primera vez en el curso variables en array, lo que permite generalizar ecuaciones de forma sencilla. Esto sugiere emplear la misma técnica para el caso de la destilación discontinua de la práctica anterior.
Puedes consultar la asistencia a esta sesión haciendo click aquí.
Suscribirse a:
Enviar comentarios (Atom)
Otro modo modo de poner las acuaciones de Array es expresando las derivadas de esta otra forma:
ResponderEliminarX'[1] =(V*Y[i+1]-(L+D)*X[i])/MD
X'[2..Fplate-1]=(L*(X[i-1]-X[i])+V*(Y[i+1]-Y[i]))/M
X'[Fplate]=(F*Xfeed+L*X[i-1]-L1*X[i]+V1*Y[i+1]-V*Y[i])/M
X'[Fplate+1..Nplates-1]=(L1*(X[i-1]-X[i])+V1*(Y[i+1]-Y[i]))/M
X'[Nplates]=(L1*X[i-1]-V1*Y[i]-W*X[i])/MR
Aqui os mando un modelo de una destilación continua con dos alimentaciones.
ResponderEliminar{MÉTODO NUMÉRICO}
METHOD RK4
STOPTIME=50
DT=0.01
{ÍNDICES = 2}
Nplates=20
F1plate=10
F2plate=6
{ECUACIONES = 8 + 2 * Nplates }
L1=L+Q*F1
V=V1+(1-Q)*F1
L2=L1+Q*F2
V1=V2+(1-Q)*F2
D=V/(R+1)
L=R*D
W=L2-V2
d/dt(X[1])=(V*Y[i+1]-(L+D)*X[i])/MD
d/dt(X[2..F1plate-1])=(L*(X[i-1]-X[i])+V*(Y[i+1]-Y[i]))/M
d/dt(X[F1plate])=(F1*X1feed+L*X[i-1]-L1*X[i]+V1*Y[i+1]-V*Y[i])/M
d/dt(X[F1plate+1..F2plate-1])=(L1*(X[i-1]-X[i])+V1*(Y[i+1]-Y[i]))/M
d/dt(X[F2plate])=(F2*X2feed+L1*X[i-1]-L2*X[i]+V2*Y[i+1]-V1*Y[i])/M
d/dt(X[Nplates])=(L2*X[i-1]-V2*Y[i]-W*X[i])/MR
Y[1..Nplates]=A*X[i]/(1+(A-1)*X[i])
XF1plate=X[F1plate]
XF2plate=X[F2plate]
Xbottoms=X[Nplates]
Xdist=X[1]
{VARIABLES = 22 + 2 * Nplates }
{GRADOS DE LIBERTAD = 12}
F1=1500
F2=800
Q=1
X1feed=0.7
X2feed=0.45
R=2.25
A=2.46
MD=200
MR=400
M=50
V1=1575
V2=500
{CONDICIONES INICIALES = Nplates}
INIT X[1..Nplates]=0
Os mando dos modelos de extracción liquido-liquido uno a contracorriente y otro en paralelo.
ResponderEliminarEXTRACCIÓN LIQUIDO-LIQUIDO A CONTRACORRIENTE.
{MÉTODO NUMÉRICO}
METHOD RK4
STOPTIME=5
DT=0.1
{ÍNDICES=1}
Nplates=10
{ECUACIONES = 4*Nplates}
d/dt(X[1])=(L*(X0-X[1])-Q[1])/VL
d/dt(X[2..Nplates-1])=(L*(X[i-1]-X[i])-Q[i])/VL
d/dt(X[Nplates])=(L*(X[Nplates-1]-X[Nplates])-Q[Nplates])/VL
d/dt(Y[1]) = (G*(Y[2]-Y[1])+Q[1]) /VG
d/dt(Y[2..Nplates-1])=(G*(Y[i+1]-Y[i])+Q[i])/VG
d/dt(Y[Nplates])=(G*(YE-Y[Nplates])+Q[i])/VG
Q[1..Nplates]=KLA*(X[i]-Xstar[i])*(VL+VG)
Xstar[1..Nplates]=Y[i]/M
{VARIABLES = 8+4*Nplates}
{GRADOS DE LIBERTAD = 8}
VL=10 {m3}
VG=10 {m3}
L=2 {m3/h}
G=4 {m3/h}
M=1.2 {-}
KLA= 3 {1/h}
YE=0
X0=1
{CONDICIONES INICIALES}
INIT X[1]=1
INIT Y[1]=0
EXTRACCIÓN LIQUIDO-LIQUIDO EN PARALELO
{MÉTODO NUMÉRICO}
METHOD RK4
STOPTIME=30
DT=0.1
{ÍNDICES=1}
Nplates=10
{ECUACIONES = 4*Nplates}
d/dt(X[1])=(L*(X0-X[1])-Q[1])/VL
d/dt(X[2..Nplates-1])=(L*(X[i-1]-X[i])-Q[i])/VL
d/dt(X[Nplates])=(L*(X[Nplates-1]-X[Nplates])-Q[Nplates])/VL
d/dt(Y[1]) = (G*(Y0-Y[1])+Q[1]) /VG
d/dt(Y[2..Nplates-1])=(G*(Y[i+1]-Y[i])+Q[i]) /VG
d/dt(Y[Nplates])=(G*(YE-Y[Nplates])+Q[i])/VG
Q[1..Nplates]=KLA*(X[i]-Xstar[i])*(VL+VG)
Xstar[1..Nplates]=Y[i]/M
{VARIABLES = 8+4*Nplates}
{GRADOS DE LIBERTAD = 8}
VL=10 {m3}
VG=10 {m3}
L=2 {m3/h}
G=4 {m3/h}
M=1.2 {-}
KLA= 3 {1/h}
Y0=0
X0=1
YE=0
{CONDICIONES INICIALES}
INIT X[1]=1
INIT Y[1]=0
Elisabeth, creo que en el caso de dos alimentaciones te falta la zona desde F2plate+1 hasta Nplates-1.
ResponderEliminarEn esta práctica de columna para destilación de mezclas binarias, se puede poner Y[2..Nplates] en vez de Y[1..Nplates] ya que en verdad Y[1] no tiene demasiado sentido, con lo cual tendríamos una ecuación menos y una variable menos.
ResponderEliminarComo yo tengo problemas con las condicionales he hecho una modificación en la práctica 4, primero he introducido una condicinal refiriendome al reflujo y luego he introducido otra condicional refiriendome a la fracción liquida en la alimentación aqui os dejo los dos modelos para que les echeis un vistazo.
ResponderEliminar{MÉTODO NUMÉRICO}
METHOD RK4
STOPTIME=50
DT=0.01
{ÍNDICES = 2}
Nplates=20
Fplate=6
{ECUACIONES = 8 + 2 * Nplates }
L1=L+Q*F
V=V1+(1-Q)*F
D=V/(R+1)
L=R*D
W=L1-V1
d/dt(X[1])=(V*Y[i+1]-(L+D)*X[i])/MD
d/dt(X[2..Fplate-1])=(L*(X[i-1]-X[i])+V*(Y[i+1]-Y[i]))/M
d/dt(X[Fplate])=(F*Xfeed+L*X[i-1]-L1*X[i]+V1*Y[i+1]-V*Y[i])/M
d/dt(X[Fplate+1..Nplates-1])=(L1*(X[i-1]-X[i])+V1*(Y[i+1]-Y[i]))/M
d/dt(X[Nplates])=(L1*X[i-1]-V1*Y[i]-W*X[i])/MR
Y[1..Nplates]=A*X[i]/(1+(A-1)*X[i])
XFplate=X[Fplate]
Xbottoms=X[Nplates]
Xdist=X[1]
R= IF TIME<10 THEN 1E10 ELSE
IF TIME<25 THEN R1 ELSE
IF TIME<50 THEN 1E10 ELSE R1
{VARIABLES = 17 + 2 * Nplates }
{GRADOS DE LIBERTAD = 9}
F=1000
Q=1
Xfeed=0.5
R1=2.25
A=2.46
MD=200
MR=400
M=50
V1=1575
{CONDICIONES INICIALES = Nplates}
INIT X[1..Nplates]=0
{MÉTODO NUMÉRICO}
METHOD RK4
STOPTIME=50
DT=0.01
{ÍNDICES = 2}
Nplates=20
Fplate=6
{ECUACIONES = 8 + 2 * Nplates }
L1=L+Q*F
V=V1+(1-Q)*F
D=V/(R+1)
L=R*D
W=L1-V1
d/dt(X[1])=(V*Y[i+1]-(L+D)*X[i])/MD
d/dt(X[2..Fplate-1])=(L*(X[i-1]-X[i])+V*(Y[i+1]-Y[i]))/M
d/dt(X[Fplate])=(F*Xfeed+L*X[i-1]-L1*X[i]+V1*Y[i+1]-V*Y[i])/M
d/dt(X[Fplate+1..Nplates-1])=(L1*(X[i-1]-X[i])+V1*(Y[i+1]-Y[i]))/M
d/dt(X[Nplates])=(L1*X[i-1]-V1*Y[i]-W*X[i])/MR
Y[1..Nplates]=A*X[i]/(1+(A-1)*X[i])
XFplate=X[Fplate]
Xbottoms=X[Nplates]
Xdist=X[1]
Q= IF TIME<10 THEN 0.5 ELSE
IF TIME<25 THEN Qmax ELSE
IF TIME<50 THEN 0.5 ELSE Qmax
{VARIABLES = 17 + 2 * Nplates }
{GRADOS DE LIBERTAD = 9}
F=1000
Qmax=1
Xfeed=0.5
R=2.25
A=2.46
MD=200
MR=400
M=50
V1=1575
{CONDICIONES INICIALES = Nplates}
INIT X[1..Nplates]=0
Esta es la práctica de destilación discontínua usando variables en array:
ResponderEliminarMETHOD RK4
STARTTIME = 0
STOPTIME=1000
DT = 0.01
Nplates=5
{Columna}
d/dt(x[2..Nplates-1])=(L*(x[i-1]-x[i])+V*(y[i+1]-y[i]))/Mn
y[2..Nplates] = A*x[i]/(1+(A-1)*x[i])
{Calderín}
d/dt(Mb)=L-V
d/dt(x[5])=(L*x[i-1]-V*y[i])/Mb
{Condensador}
D=V/(R+1)
L=V-D
d/dt(x[1])=(V*y[i+1]-x[i]*(L+D))/M0
R=IF TIME < TIME1 THEN 1E10 ELSE
IF TIME < TIME2 THEN R1 ELSE
IF TIME < TIME3 THEN 1E10 ELSE
{Unidad de acumulación}
d/dt(Md)=D
d/dt(Mdxd)=D*x[1]
xd=Mdxd/Md
M0=100
Mn=20
V=10
A=3.5
TIME1=250
TIME2=500
TIME3=750
R1=10
{Inicializamos las ecuaciones diferenciales}
INIT x[1..Nplates]=0.2
INIT Mb=2500
INIT Md = 1E-10
INIT Mdxd = 1E-10
Lo siento mucho, en la entrada anterior tenía un fallo.
ResponderEliminarEn el calderín consideré que Mb era constante, cuando no lo es. Para calcular x[5]' hay que despejarlo de la siguiente ecuación:
(Mb*x[5])'=Mb*x[5]'+Mb'*x[5]
Aquí está en modelo corregido:
METHOD RK4
STARTTIME = 0
STOPTIME=1000
DT = 0.01
Nplates=5
{Condensador}
D=V/(R+1)
L=V-D
d/dt(X[1])=(V*Y[i+1]-X[i]*(L+D))/M1
R= IF TIME < TIME1 THEN 1E10 ELSE
IF TIME < TIME2 THEN R1 ELSE
IF TIME < TIME3 THEN 1E10 ELSE R1
{Columna}
d/dt(X[2..Nplates-1])=(L*(X[i-1]-X[i])+V*(Y[i+1]-Y[i]))/M
Y[2..Nplates]=A*X[i]/(1+(A-1)*X[i])
{Calderín}
d/dt(MB)=L-V
d/dt(X[5])=(L*X[i-1]-V*Y[i]-(L-V)*X[i])/MB
{Depósito de destilado}
d/dt(MD)= D
d/dt(MDXD) = D*X[1]
XD = MDXD/MD
{GRADOS DE LIBERTAD = 8}
M1=100
M=20
V=10
A=3.5
TIME1=250
TIME2=500
TIME3=750
R1=10
{CONDICIONES INICIALES = 8}
INIT X[1..Nplates]=0.2
INIT MB=2500
INIT MD = 1E-10
INIT MDXD = 0
Y perdón de nuevo porque en vez de poner x[5] hay que poner x[Nplates]
ResponderEliminarSe me ha ocurrido usar la función optimize para ver cuál es el piso de alimentación óptimo en la práctica 4.
ResponderEliminarEn el menú de la función he selecionado la variable Fplate y he puesto lo siguiente:
mínimo=3
guess1=4
guess2=5
máximo=20
Y he minimizado la expresión 1-Xdist.