martes, 1 de abril de 2008

CUARTA SESIÓN DE PRÁCTICAS

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í.

10 comentarios:

  1. Otro modo modo de poner las acuaciones de Array es expresando las derivadas de esta otra forma:
    X'[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

    ResponderEliminar
  2. Aqui os mando un modelo de una destilación continua con dos alimentaciones.

    {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

    ResponderEliminar
  3. Os mando dos modelos de extracción liquido-liquido uno a contracorriente y otro en paralelo.

    EXTRACCIÓ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

    ResponderEliminar
  4. Elisabeth, creo que en el caso de dos alimentaciones te falta la zona desde F2plate+1 hasta Nplates-1.

    ResponderEliminar
  5. En 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.

    ResponderEliminar
  6. Como 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.

    {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

    ResponderEliminar
  7. Esta es la práctica de destilación discontínua usando variables en array:
    METHOD 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

    ResponderEliminar
  8. Lo siento mucho, en la entrada anterior tenía un fallo.
    En 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

    ResponderEliminar
  9. Anónimo2/7/08, 0:00

    Y perdón de nuevo porque en vez de poner x[5] hay que poner x[Nplates]

    ResponderEliminar
  10. Se me ha ocurrido usar la función optimize para ver cuál es el piso de alimentación óptimo en la práctica 4.
    En 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.

    ResponderEliminar