### File Name : ### ### Author : ### Date : 09-Feb-2003 ### Time : 19:9:5 ### ### Remarks : Online,IPOPT 1.7,BDF,Ncoll=2,NINT=60,TF=18000 read "E:\\occ\\ocoma\\doptlib_v6.txt"; initialize(); PRINTLEVEL := 1; SCALING := false; ONLINE_MODE := true; SOLVER_VERSION := 1.7; ODE_MODE := 'BDF'; NINT := 60; NCOLL := 2; LINVAR_MODE := false; LINEQ_MODE := false; FLEXIBOUND_MODE:= false; FORTRAN_LOOPS := false; Digits := 16; precision := double; FLEXITIME_MODE := false; ### Section Break 1 ### ################ # File contains initials and objective values from the 'Plateau' # time = 50000 s, ti = 250 ########################################### # Stream property data # # Data taken from Table 2, Downs & Vogel # ########################################### # Vapor heat capacity [kJ kg-1 C-1] cp_vap_A := 14.6; cp_vap_B := 2.04; cp_vap_C := 1.05; cp_vap_D := 1.85; cp_vap_E := 1.87; cp_vap_F := 2.02; cp_vap_G := 0.712; cp_vap_H := 0.628; # Liquid heat capacity [kJ kg-1 C-1] cp_liq_A := 0; # A-C not condensable cp_liq_B := 0; cp_liq_C := 0; cp_liq_D := 7.66; cp_liq_E := 4.17; cp_liq_F := 4.45; cp_liq_G := 2.55; cp_liq_H := 2.45; # Heat of vaporization [kJ kg-1] H_vap_A := 0; H_vap_B := 0; H_vap_C := 0; H_vap_D := 202; H_vap_E := 372; H_vap_F := 372; H_vap_G := 523; H_vap_H := 486; ######################## # Constants # ######################## # Reference Temperature Tref := 273.15; RkJ := 8.31451e0; Rkcal := 1.987e0; # Cooling water cp_cw := 4.18e0; # Reaction stochiometric data mue[1,1] := -1; mue[1,2] := -1; mue[1,3] := -1/3; mue[2,1] := 0; mue[2,2] := 0; mue[2,3] := 0; mue[3,1] := -1; mue[3,2] := -1; mue[3,3] := 0; mue[4,1] := -1; mue[4,2] := 0; mue[4,3] := -1; mue[5,1] := 0; mue[5,2] := -1; mue[5,3] := -1/3; mue[6,1] := 0; mue[6,2] := 0; mue[6,3] := 1; mue[7,1] := 1; mue[7,2] := 0; mue[7,3] := 0; mue[8,1] := 0; mue[8,2] := 1; mue[8,3] := 0; # Antione Constants A_D := 20.81e0; B_D := -1444e0; C_D := 259.0e0; A_E := 21.24e0; B_E := -2114e0; C_E := 265.5e0; A_F := 21.24e0; B_F := -2144e0; C_F := 265.5e0; A_G := 21.32e0; B_G := -2748e0; C_G := 232.9e0; A_H := 22.10e0; B_H := -3318e0; C_H := 249.6e0; # Flow rate constants Mi[1] := 2; Mi[2] := 25.4; Mi[3] := 28; Mi[4] := 32; Mi[5] := 46; Mi[6] := 48; Mi[7] := 62; Mi[8] := 76; # Feed streams # # Temperatures # Tabel 1 - Downs and Vogel stream_1_T := 45 + Tref; # 318.15 K stream_2_T := 45 + Tref; stream_3_T := 45 + Tref; stream_4_T := 45 + Tref; # Composition of Feed Stream A stream_1_conc_A := 0.99990; stream_1_conc_B := 0.00010; stream_1_conc_C := 0.00000; stream_1_conc_D := 0.00000; stream_1_conc_E := 0.00000; stream_1_conc_F := 0.00000; stream_1_conc_G := 0.00000; stream_1_conc_H := 0.00000; # Composition of Feed Stream D stream_2_conc_A := 0.00000; stream_2_conc_B := 0.00010; stream_2_conc_C := 0.00000; stream_2_conc_D := 0.99990; stream_2_conc_E := 0.00000; stream_2_conc_F := 0.00000; stream_2_conc_G := 0.00000; stream_2_conc_H := 0.00000; # Composition of Feed Stream E stream_3_conc_A := 0.00000; stream_3_conc_B := 0.00000; stream_3_conc_C := 0.00000; stream_3_conc_D := 0.00000; stream_3_conc_E := 0.99990; stream_3_conc_F := 0.00010; stream_3_conc_G := 0.00000; stream_3_conc_H := 0.00000; # Composition of Feed Stream C stream_4_conc_A := 0.48500; stream_4_conc_B := 0.00500; stream_4_conc_C := 0.51000; stream_4_conc_D := 0.00000; stream_4_conc_E := 0.00000; stream_4_conc_F := 0.00000; stream_4_conc_G := 0.00000; stream_4_conc_H := 0.00000; stream_1_cp := stream_1_conc_A * cp_vap_A + stream_1_conc_B * cp_vap_B + stream_1_conc_C * cp_vap_C + stream_1_conc_D * cp_vap_D + stream_1_conc_E * cp_vap_E + stream_1_conc_F * cp_vap_F + stream_1_conc_G * cp_vap_G + stream_1_conc_H * cp_vap_H; stream_2_cp := stream_2_conc_A * cp_vap_A + stream_2_conc_B * cp_vap_B + stream_2_conc_C * cp_vap_C + stream_2_conc_D * cp_vap_D + stream_2_conc_E * cp_vap_E + stream_2_conc_F * cp_vap_F + stream_2_conc_G * cp_vap_G + stream_2_conc_H * cp_vap_H; stream_3_cp := stream_3_conc_A * cp_vap_A + stream_3_conc_B * cp_vap_B + stream_3_conc_C * cp_vap_C + stream_3_conc_D * cp_vap_D + stream_3_conc_E * cp_vap_E + stream_3_conc_F * cp_vap_F + stream_3_conc_G * cp_vap_G + stream_3_conc_H * cp_vap_H; stream_4_cp := stream_4_conc_A * cp_vap_A + stream_4_conc_B * cp_vap_B + stream_4_conc_C * cp_vap_C + stream_4_conc_D * cp_vap_D + stream_4_conc_E * cp_vap_E + stream_4_conc_F * cp_vap_F + stream_4_conc_G * cp_vap_G + stream_4_conc_H * cp_vap_H; ##################################################################### ######################### # # # Mixing Unit # # # ######################### # Mixing zone constants Vm := 141.53e0; # Volume mixing zone # Base case initial values - 151.7272279 (Calculated by Temp, press, Vm and eq. 5.46 set_initial(mixing_zone_NA, 48.83796012 ); set_initial(mixing_zone_NB, 13.49310238 ); set_initial(mixing_zone_NC, 40.03019454 ); set_initial(mixing_zone_ND, 10.44186782 ); set_initial(mixing_zone_NE, 28.48830431 ); set_initial(mixing_zone_NF, 2.514120166); set_initial(mixing_zone_NG, 5.403006586); set_initial(mixing_zone_NH, 2.517154711); # Molar Balance for components A-H (5.44) add_deq( DOT(mixing_zone_NA) = stream_1_flow * stream_1_conc_A + stream_2_flow * stream_2_conc_A + stream_3_flow * stream_3_conc_A + stream_5_flow * stream_5_conc_A + stream_8_flow * stream_8_conc_A - stream_6_flow * stream_6_conc_A, mixing_zone_NA); add_deq( DOT(mixing_zone_NB) = stream_1_flow * stream_1_conc_B + stream_2_flow * stream_2_conc_B + stream_3_flow * stream_3_conc_B + stream_5_flow * stream_5_conc_B + stream_8_flow * stream_8_conc_B - stream_6_flow * stream_6_conc_B, mixing_zone_NB); add_deq( DOT(mixing_zone_NC) = stream_1_flow * stream_1_conc_C + stream_2_flow * stream_2_conc_C + stream_3_flow * stream_3_conc_C + stream_5_flow * stream_5_conc_C + stream_8_flow * stream_8_conc_C - stream_6_flow * stream_6_conc_C, mixing_zone_NC); add_deq( DOT(mixing_zone_ND) = stream_1_flow * stream_1_conc_D + stream_2_flow * stream_2_conc_D + stream_3_flow * stream_3_conc_D + stream_5_flow * stream_5_conc_D + stream_8_flow * stream_8_conc_D - stream_6_flow * stream_6_conc_D, mixing_zone_ND); add_deq( DOT(mixing_zone_NE) = stream_1_flow * stream_1_conc_E + stream_2_flow * stream_2_conc_E + stream_3_flow * stream_3_conc_E + stream_5_flow * stream_5_conc_E + stream_8_flow * stream_8_conc_E - stream_6_flow * stream_6_conc_E, mixing_zone_NE); add_deq( DOT(mixing_zone_NF) = stream_1_flow * stream_1_conc_F + stream_2_flow * stream_2_conc_F + stream_3_flow * stream_3_conc_F + stream_5_flow * stream_5_conc_F + stream_8_flow * stream_8_conc_F - stream_6_flow * stream_6_conc_F, mixing_zone_NF); add_deq( DOT(mixing_zone_NG) = stream_1_flow * stream_1_conc_G + stream_2_flow * stream_2_conc_G + stream_3_flow * stream_3_conc_G + stream_5_flow * stream_5_conc_G + stream_8_flow * stream_8_conc_G - stream_6_flow * stream_6_conc_G, mixing_zone_NG); add_deq( DOT(mixing_zone_NH) = stream_1_flow * stream_1_conc_H + stream_2_flow * stream_2_conc_H + stream_3_flow * stream_3_conc_H + stream_5_flow * stream_5_conc_G + stream_8_flow * stream_8_conc_H - stream_6_flow * stream_6_conc_H, mixing_zone_NH); # Energy balance for the mixing zone (5.45) add_aeq( mixing_zone_Ncp = mixing_zone_NA * cp_vap_A + mixing_zone_NB * cp_vap_B + mixing_zone_NC * cp_vap_C + mixing_zone_ND * cp_vap_D + mixing_zone_NE * cp_vap_E + mixing_zone_NF * cp_vap_F + mixing_zone_NG * cp_vap_G + mixing_zone_NH * cp_vap_H); # Stream 5 add_aeq( stream_5_cp = stream_5_conc_A * cp_vap_A + stream_5_conc_B * cp_vap_B + stream_5_conc_C * cp_vap_C + stream_5_conc_D * cp_vap_D + stream_5_conc_E * cp_vap_E + stream_5_conc_F * cp_vap_F + stream_5_conc_G * cp_vap_G + stream_5_conc_H * cp_vap_H); # Stream 8 add_aeq( stream_8_cp = stream_8_conc_A * cp_vap_A + stream_8_conc_B * cp_vap_B + stream_8_conc_C * cp_vap_C + stream_8_conc_D * cp_vap_D + stream_8_conc_E * cp_vap_E + stream_8_conc_F * cp_vap_F + stream_8_conc_G * cp_vap_G + stream_8_conc_H * cp_vap_H); # parts of right hand side of equation 5.45 add_aeq(mix_enth_1 = stream_1_flow * stream_1_cp * (stream_1_T - Tm) ); add_aeq(mix_enth_2 = stream_2_flow * stream_2_cp * (stream_2_T - Tm) ); add_aeq(mix_enth_3 = stream_3_flow * stream_3_cp * (stream_3_T - Tm) ); add_aeq(mix_enth_5 = stream_5_flow * stream_5_cp * (Tstr - Tm) ); add_aeq(mix_enth_8 = stream_8_flow * stream_8_cp * (stream_8_T - Tm) ); # Right hand side of equation 5.45 add_aeq(mix_rhs * mixing_zone_Ncp = mix_enth_1 + mix_enth_2 + mix_enth_3 + mix_enth_5 + mix_enth_8); # Temperature in the mixing xone add_deq( DOT(Tm) = mix_rhs, Tm); # From Table 1 set_initial(Tm, 359.25); # Eq. 5.46 - Pressure in the mixing zone add_aeq( mixing_zone_N = mixing_zone_NA + mixing_zone_NB + mixing_zone_NC + mixing_zone_ND + mixing_zone_NE + mixing_zone_NF + mixing_zone_NG + mixing_zone_NH); add_aeq(pm_MPa = mixing_zone_N * (RkJ * Tm / Vm) / 1000); # Eq. 5.47 add_aeq(stream_6_conc_A * mixing_zone_N = mixing_zone_NA); add_aeq(stream_6_conc_B * mixing_zone_N = mixing_zone_NB); add_aeq(stream_6_conc_C * mixing_zone_N = mixing_zone_NC); add_aeq(stream_6_conc_D * mixing_zone_N = mixing_zone_ND); add_aeq(stream_6_conc_E * mixing_zone_N = mixing_zone_NE); add_aeq(stream_6_conc_F * mixing_zone_N = mixing_zone_NF); add_aeq(stream_6_conc_G * mixing_zone_N = mixing_zone_NG); add_aeq(stream_6_conc_H * mixing_zone_N = mixing_zone_NH); ############################################################### ################################# # # # Reactor # # # ################################# # Reactor constants kAr := 129.4e0; # Volume Reactor Vr := 36.8117791e0; # Densities rho_liq_reactor := 9.337145754e0; # Eq 5.1 - Base case initial values - Taken from TE_20_10.cmp (Andreas Waechter) set_initial(reactor_NA, 0.520462483681871e+01); set_initial(reactor_NB, 0.228951164244119e+01); set_initial(reactor_NC, 0.465082827002657e+01); set_initial(reactor_ND, 0.115341662452407e+00); set_initial(reactor_NE, 0.744601110373549e+01); set_initial(reactor_NF, 0.114649137635668e+01); set_initial(reactor_NG, 0.560529035378437e+02); set_initial(reactor_NH, 0.598256416887065e+02); add_aeq(reactor_conv_rate_A = mue[1,1] * reactor_R1 + mue[1,2] * reactor_R2 + mue[1,3] * reactor_R3); add_aeq(reactor_conv_rate_B = mue[2,1] * reactor_R1 + mue[2,2] * reactor_R2 + mue[2,3] * reactor_R3); add_aeq(reactor_conv_rate_C = mue[3,1] * reactor_R1 + mue[3,2] * reactor_R2 + mue[3,3] * reactor_R3); add_aeq(reactor_conv_rate_D = mue[4,1] * reactor_R1 + mue[4,2] * reactor_R2 + mue[4,3] * reactor_R3); add_aeq(reactor_conv_rate_E = mue[5,1] * reactor_R1 + mue[5,2] * reactor_R2 + mue[5,3] * reactor_R3); add_aeq(reactor_conv_rate_F = mue[6,1] * reactor_R1 + mue[6,2] * reactor_R2 + mue[6,3] * reactor_R3); add_aeq(reactor_conv_rate_G = mue[7,1] * reactor_R1 + mue[7,2] * reactor_R2 + mue[7,3] * reactor_R3); add_aeq(reactor_conv_rate_H = mue[8,1] * reactor_R1 + mue[8,2] * reactor_R2 + mue[8,3] * reactor_R3); add_deq( DOT(reactor_NA) = stream_6_flow * stream_6_conc_A - stream_7_flow * stream_7_conc_A + reactor_conv_rate_A, reactor_NA); add_deq( DOT(reactor_NB) = stream_6_flow * stream_6_conc_B - stream_7_flow * stream_7_conc_B + reactor_conv_rate_B, reactor_NB); add_deq( DOT(reactor_NC) = stream_6_flow * stream_6_conc_C - stream_7_flow * stream_7_conc_C + reactor_conv_rate_C, reactor_NC); add_deq( DOT(reactor_ND) = stream_6_flow * stream_6_conc_D - stream_7_flow * stream_7_conc_D + reactor_conv_rate_D, reactor_ND); add_deq( DOT(reactor_NE) = stream_6_flow * stream_6_conc_E - stream_7_flow * stream_7_conc_E + reactor_conv_rate_E, reactor_NE); add_deq( DOT(reactor_NF) = stream_6_flow * stream_6_conc_F - stream_7_flow * stream_7_conc_F + reactor_conv_rate_F, reactor_NF); add_deq( DOT(reactor_NG) = stream_6_flow * stream_6_conc_G - stream_7_flow * stream_7_conc_G + reactor_conv_rate_G, reactor_NG); add_deq( DOT(reactor_NH) = stream_6_flow * stream_6_conc_H - stream_7_flow * stream_7_conc_H + reactor_conv_rate_H, reactor_NH); # Eq. 5.2 add_aeq( reactor_Ncp = reactor_NA * cp_vap_A + reactor_NB * cp_vap_B + reactor_NC * cp_vap_C + reactor_ND * cp_liq_D + reactor_NE * cp_liq_E + reactor_NF * cp_liq_F + reactor_NG * cp_liq_G + reactor_NH * cp_liq_H); # Stream 6 add_aeq( stream_6_cp = stream_6_conc_A * cp_vap_A + stream_6_conc_B * cp_vap_B + stream_6_conc_C * cp_vap_C + stream_6_conc_D * cp_vap_D + stream_6_conc_E * cp_vap_E + stream_6_conc_F * cp_vap_F + stream_6_conc_G * cp_vap_G + stream_6_conc_H * cp_vap_H); add_aeq(reactor_rhs * reactor_Ncp = (1/1000) * stream_6_flow * stream_6_cp * (Tm - Tr) - Qr - reactor_exoth_heat); add_deq( DOT(Tr) = reactor_rhs, Tr); # From Table 1 set_initial(Tr, 393.55); # Eq. 5.6 alpha_1 := 1.0399157e0; alpha_2 := 1.011373129e0; alpha_3 := 1; add_aeq( reactor_R1 = alpha_1 * Vr_vap * exp(44.06 - (42600/(Rkcal * Tr)) ) * ((p_A_r*1000)^1.080) * ((p_C_r*1000)^0.311) * ((p_D_r*1000)^0.874) / 3600); # Eq. 5.7 add_aeq( reactor_R2 = alpha_2 * Vr_vap * exp(10.27 - (19500/(Rkcal * Tr)) ) * ((p_A_r*1000)^1.150) * ((p_C_r*1000)^0.370) * ((p_E_r*1000)^1.000) / 3600); # Eq. 5.8 add_aeq( reactor_R3 = alpha_3 * Vr_vap * exp(59.50 - (59500/(Rkcal * Tr)) ) * (p_A_r*1000) * ( 0.77 * (p_D_r*1000) + (p_E_r*1000)) / 3600); # Eq. 5.9 add_aeq(reactor_exoth_heat = reactor_R1 * delt_Hr_1 + reactor_R2 * delt_Hr_2 + reactor_R3 * delt_Hr_3); add_aeq(delt_Hr_1 = (mue[1,1] * H_A + mue[3,1] * H_C + mue[4,1] * H_D + mue[7,1] * H_G - 136033.04e0) / 1000); add_aeq(delt_Hr_2 = (mue[1,2] * H_A + mue[3,2] * H_C + mue[5,2] * H_E + mue[8,2] * H_H - 93337.9616e0) / 1000); add_aeq(delt_Hr_3 = (mue[1,3] * H_A + mue[4,3] * H_D + mue[5,3] * H_E + mue[6,3] * H_F + 0) / 1000); # Eq. 5.10 add_aeq(H_A = cp_vap_A * (Tr - Tref) ); add_aeq(H_B = cp_vap_B * (Tr - Tref) ); add_aeq(H_C = cp_vap_C * (Tr - Tref) ); add_aeq(H_D = cp_vap_D * (Tr - Tref) ); add_aeq(H_E = cp_vap_E * (Tr - Tref) ); add_aeq(H_F = cp_vap_F * (Tr - Tref) ); add_aeq(H_G = cp_vap_G * (Tr - Tref) ); add_aeq(H_H = cp_vap_H * (Tr - Tref) ); # Eq. 5.11 add_aeq(p_A_r * Vr_vap = reactor_NA * RkJ * Tr / 1000); add_aeq(p_B_r * Vr_vap = reactor_NB * RkJ * Tr / 1000); add_aeq(p_C_r * Vr_vap = reactor_NC * RkJ * Tr / 1000); # Eq. 5.12 add_aeq(pr_sat_D = 1e-3 * exp(A_D + (B_D / (C_D + Tr - Tref) ) ) / 1000); add_aeq(pr_sat_E = 1e-3 * exp(A_E + (B_E / (C_E + Tr - Tref) ) ) / 1000); add_aeq(pr_sat_F = 1e-3 * exp(A_F + (B_F / (C_F + Tr - Tref) ) ) / 1000); add_aeq(pr_sat_G = 1e-3 * exp(A_G + (B_G / (C_G + Tr - Tref) ) ) / 1000); add_aeq(pr_sat_H = 1e-3 * exp(A_H + (B_H / (C_H + Tr - Tref) ) ) / 1000); # Eq. 5.13 gamma_D_r := 0.996011e0; gamma_E_r := 1; gamma_F_r := 1.078e0; gamma_G_r := 0.999e0; gamma_H_r := 0.999e0; add_aeq(p_D_r = gamma_D_r * reactor_x_D * pr_sat_D); add_aeq(p_E_r = gamma_E_r * reactor_x_E * pr_sat_E); add_aeq(p_F_r = gamma_F_r * reactor_x_F * pr_sat_F); add_aeq(p_G_r = gamma_G_r * reactor_x_G * pr_sat_G); add_aeq(p_H_r = gamma_H_r * reactor_x_H * pr_sat_H); # Eq. 5.14 add_aeq(pr_MPa = p_A_r + p_B_r + p_C_r + p_D_r + p_E_r + p_F_r + p_G_r + p_H_r); # Eq. 5.15 add_aeq(stream_7_conc_A * pr_MPa = p_A_r); add_aeq(stream_7_conc_B * pr_MPa = p_B_r); add_aeq(stream_7_conc_C * pr_MPa = p_C_r); add_aeq(stream_7_conc_D * pr_MPa = p_D_r); add_aeq(stream_7_conc_E * pr_MPa = p_E_r); add_aeq(stream_7_conc_F * pr_MPa = p_F_r); add_aeq(stream_7_conc_G * pr_MPa = p_G_r); add_aeq(stream_7_conc_H * pr_MPa = p_H_r); # Eq. 5.17 (A, B, C not condensable) reactor_x_A := 0.0; reactor_x_B := 0.0; reactor_x_C := 0.0; # Eq. 5.16 add_aeq(reactor_x_D * (reactor_ND + reactor_NE + reactor_NF + reactor_NG + reactor_NH) = reactor_ND); add_aeq(reactor_x_E * (reactor_ND + reactor_NE + reactor_NF + reactor_NG + reactor_NH) = reactor_NE); add_aeq(reactor_x_F * (reactor_ND + reactor_NE + reactor_NF + reactor_NG + reactor_NH) = reactor_NF); add_aeq(reactor_x_G * (reactor_ND + reactor_NE + reactor_NF + reactor_NG + reactor_NH) = reactor_NG); add_aeq(reactor_x_H * (reactor_ND + reactor_NE + reactor_NF + reactor_NG + reactor_NH) = reactor_NH); # Eq. 5.18 add_aeq(Vr_liq = (reactor_ND + reactor_NE + reactor_NF + reactor_NG + reactor_NH) / rho_liq_reactor ); # Equation 5.19 add_aeq( Vr_vap = Vr - Vr_liq); # --- Heat Exchanger ------------------ # Heat exchange with cooling water T_CWSr_in := 0.308000000000000e+03; # Assumption - from measurement data # T_CWSr_out := 0.367599000000000e+03; # Preparation for delt_T_log add_aeq(delt_T1_reactor = Tr - T_CWSr_in); add_aeq(delt_T2_reactor = Tr - T_CWSr_out); # add_aeq( (delt_T1_reactor/(delt_T2_reactor+0.000000001))^delt_T_log = exp(delt_T1_reactor - delt_T2_reactor) ); add_aeq( delt_T_log = (delt_T1_reactor - delt_T2_reactor)/(ln(delt_T1_reactor/(delt_T2_reactor))) ); # Eq. 5.22 add_aeq( Qr = reactor_m_CWS * cp_cw * (T_CWSr_out - T_CWSr_in) / 1000); # MW # Delt T log try UA := 127.6; add_aeq( Qr = UA * (delt_T_log) / 1000); # MW # Eq. 5.24 - Flow rates add_aeq( (press_m_r_diff)^2 = pm_MPa - pr_MPa); add_aeq(stream_6_flow = 0.8333711713 * press_m_r_diff); # Eq. 5.25 - assumption base case add_aeq( press_r_s_diff^2 = pr_MPa - ps_MPa); add_aeq(stream_7_flow = 1.53546206685993 * press_r_s_diff); ################################################################################### ################################# # # # Separator # # # ################################# # Density rho_liq_stripper := 8.6496e0; # Eq 5.26 - Base case initial values - Taken from TE_20_10.cmp (Andreas Waechter) set_initial(separator_NA, 0.274979760720663e+02); set_initial(separator_NB, 0.120963446339331e+02); set_initial(separator_NC, 0.245720622755470e+02); set_initial(separator_ND, 0.836049078688156e-01); set_initial(separator_NE, 0.586405721828844e+01); set_initial(separator_NF, 0.901124942834656e+00); set_initial(separator_NG, 0.241376638377975e+02); set_initial(separator_NH, 0.197525541355506e+02); add_deq( DOT(separator_NA) = stream_7_flow * stream_7_conc_A - (stream_8_flow + stream_9_flow) * stream_8_conc_A - stream_10_flow * separator_x_A, separator_NA); add_deq( DOT(separator_NB) = stream_7_flow * stream_7_conc_B - (stream_8_flow + stream_9_flow) * stream_8_conc_B - stream_10_flow * separator_x_B, separator_NB); add_deq( DOT(separator_NC) = stream_7_flow * stream_7_conc_C - (stream_8_flow + stream_9_flow) * stream_8_conc_C - stream_10_flow * separator_x_C, separator_NC); add_deq( DOT(separator_ND) = stream_7_flow * stream_7_conc_D - (stream_8_flow + stream_9_flow) * stream_8_conc_D - stream_10_flow * separator_x_D, separator_ND); add_deq( DOT(separator_NE) = stream_7_flow * stream_7_conc_E - (stream_8_flow + stream_9_flow) * stream_8_conc_E - stream_10_flow * separator_x_E, separator_NE); add_deq( DOT(separator_NF) = stream_7_flow * stream_7_conc_F - (stream_8_flow + stream_9_flow) * stream_8_conc_F - stream_10_flow * separator_x_F, separator_NF); add_deq( DOT(separator_NG) = stream_7_flow * stream_7_conc_G - (stream_8_flow + stream_9_flow) * stream_8_conc_G - stream_10_flow * separator_x_G, separator_NG); add_deq( DOT(separator_NH) = stream_7_flow * stream_7_conc_H - (stream_8_flow + stream_9_flow) * stream_8_conc_H - stream_10_flow * separator_x_H, separator_NH); # Eq. 5.27 add_aeq( separator_Ncp = separator_NA * cp_vap_A + separator_NB * cp_vap_B + separator_NC * cp_vap_C + separator_ND * cp_liq_D + separator_NE * cp_liq_E + separator_NF * cp_liq_F + separator_NG * cp_liq_G + separator_NH * cp_liq_H ); # Stream 7 add_aeq( stream_7_cp = stream_7_conc_A * cp_vap_A + stream_7_conc_B * cp_vap_B + stream_7_conc_C * cp_vap_C + stream_7_conc_D * cp_vap_D + stream_7_conc_E * cp_vap_E + stream_7_conc_F * cp_vap_F + stream_7_conc_G * cp_vap_G + stream_7_conc_H * cp_vap_H ); add_aeq(separator_rhs * separator_Ncp = (1/1000) * stream_7_flow * stream_7_cp * (Tr - Ts) + HoVs - Qs); add_deq( DOT(Ts) = separator_rhs, Ts); # Table 1 set_initial(Ts, 353.25); # Eq. 5.28 add_aeq(p_A_s * Vs_vap = separator_NA * RkJ * Ts / 1000); add_aeq(p_B_s * Vs_vap = separator_NB * RkJ * Ts / 1000); add_aeq(p_C_s * Vs_vap = separator_NC * RkJ * Ts / 1000); # Eq. 5.29 add_aeq(ps_sat_D = 1e-3 * exp(A_D + (B_D / (C_D + Ts - Tref) ) ) / 1000); add_aeq(ps_sat_E = 1e-3 * exp(A_E + (B_E / (C_E + Ts - Tref) ) ) / 1000); add_aeq(ps_sat_F = 1e-3 * exp(A_F + (B_F / (C_F + Ts - Tref) ) ) / 1000); add_aeq(ps_sat_G = 1e-3 * exp(A_G + (B_G / (C_G + Ts - Tref) ) ) / 1000); add_aeq(ps_sat_H = 1e-3 * exp(A_H + (B_H / (C_H + Ts - Tref) ) ) / 1000); gamma_D_s := 1.001383e0; gamma_E_s := 1.001383e0; gamma_F_s := 1.091383e0; gamma_G_s := 1.001383e0; gamma_H_s := 0.992188e0; add_aeq(p_D_s = gamma_D_s * separator_x_D * ps_sat_D); add_aeq(p_E_s = gamma_E_s * separator_x_E * ps_sat_E); add_aeq(p_F_s = gamma_F_s * separator_x_F * ps_sat_F); add_aeq(p_G_s = gamma_G_s * separator_x_G * ps_sat_G); add_aeq(p_H_s = gamma_H_s * separator_x_H * ps_sat_H); # Eq. 5.30 add_aeq(ps_MPa = p_A_s + p_B_s + p_C_s + p_D_s + p_E_s + p_F_s + p_G_s + p_H_s); # Eq. 5.31 add_aeq(stream_8_conc_A * ps_MPa = p_A_s); add_aeq(stream_8_conc_B * ps_MPa = p_B_s); add_aeq(stream_8_conc_C * ps_MPa = p_C_s); add_aeq(stream_8_conc_D * ps_MPa = p_D_s); add_aeq(stream_8_conc_E * ps_MPa = p_E_s); add_aeq(stream_8_conc_F * ps_MPa = p_F_s); add_aeq(stream_8_conc_G * ps_MPa = p_G_s); add_aeq(stream_8_conc_H * ps_MPa = p_H_s); # Eq. 5.32 add_aeq(separator_x_D * (separator_ND + separator_NE + separator_NF + separator_NG + separator_NH) = separator_ND); add_aeq(separator_x_E * (separator_ND + separator_NE + separator_NF + separator_NG + separator_NH) = separator_NE); add_aeq(separator_x_F * (separator_ND + separator_NE + separator_NF + separator_NG + separator_NH) = separator_NF); add_aeq(separator_x_G * (separator_ND + separator_NE + separator_NF + separator_NG + separator_NH) = separator_NG); add_aeq(separator_x_H * (separator_ND + separator_NE + separator_NF + separator_NG + separator_NH) = separator_NH); # Eq. 5.32 (A, B, C not condensable) separator_x_A := 0.0; separator_x_B := 0.0; separator_x_C := 0.0; # Eq. 5.34 rho_liq_separator := 10.29397546e0; add_aeq(Vs_liq = (separator_ND + separator_NE + separator_NF + separator_NG + separator_NH) / rho_liq_separator ); # Equation 5.19 Vs := 99.1e0; add_aeq( Vs_vap = Vs - Vs_liq); # Molecular weight M_A := 2.0; M_B := 25.4; M_C := 28.0; M_D := 32.0; M_E := 46.0; M_F := 48.0; M_G := 62.0; M_H := 76.0; # Eq. 5.37 add_aeq(HoVs = (separator_x_D * stream_10_flow * M_D * H_vap_D + separator_x_E * stream_10_flow * M_E * H_vap_E + separator_x_F * stream_10_flow * M_F * H_vap_F + separator_x_G * stream_10_flow * M_G * H_vap_G + separator_x_H * stream_10_flow * M_H * H_vap_H) / 1000); # Heat exchange with cooling water T_CWSs_in := 0.313000000000000e+03; # Assumption - from measurement data # T_CWSs_out := 350.447; # Eq. 5.38 add_aeq( Qs = separator_m_CWS * cp_cw * (T_CWSs_out - T_CWSs_in) / 1000); # MW # Preparation for delt_T_log add_aeq(delt_T1_separator = Ts - T_CWSs_in); add_aeq(delt_T2_separator = Ts - T_CWSs_out); add_aeq( delt_T_log_sep = (delt_T1_separator - delt_T2_separator)/(ln(delt_T1_separator/(delt_T2_separator))) ); UA_sep := 152.7; add_aeq( Qs = UA_sep * (delt_T_log_sep) / 1000); # MW ################################# # # # Purge # # # ################################# # Introduced as independent variable instead of valve position define_control(stream_9_flow); stream_9_conc_A := stream_8_conc_A; stream_9_conc_B := stream_8_conc_B; stream_9_conc_C := stream_8_conc_C; stream_9_conc_D := stream_8_conc_D; stream_9_conc_E := stream_8_conc_E; stream_9_conc_F := stream_8_conc_F; stream_9_conc_G := stream_8_conc_G; stream_9_conc_H := stream_8_conc_H; ################################# # # # Compressor # # # ################################# # Instead of compressor recycle valve define_control(stream_8_flow); s_kap := .7166374645; add_aeq(stream_8_T = Ts * (pm_MPa / ps_MPa)^( (1 - s_kap) / s_kap )); ################################# # # # Stripper # # # ################################# # Density rho_liq_stripper := 8.6496e0; # Eq 5.48 # Base case initial values - accumulation of A-f is neglected set_initial(stripper_NG, 0.203813521021438e+02); set_initial(stripper_NH, 0.173130910905421e+02); add_aeq(dNstr_G = (1 - phi_G) * (separator_x_G * stream_10_flow + stream_4_conc_G * stream_4_flow) - stream_11_conc_G * stream_11_flow); add_aeq(dNstr_H = (1 - phi_H) * (separator_x_H * stream_10_flow + stream_4_conc_H * stream_4_flow) - stream_11_conc_H * stream_11_flow); add_deq( DOT(stripper_NG) = dNstr_G, stripper_NG); add_deq( DOT(stripper_NH) = dNstr_H, stripper_NH); # Stream 10 add_aeq( stream_10_cp = separator_x_A * cp_liq_A + separator_x_B * cp_liq_B + separator_x_C * cp_liq_C + separator_x_D * cp_liq_D + separator_x_E * cp_liq_E + separator_x_F * cp_liq_F + separator_x_G * cp_liq_G + separator_x_H * cp_liq_H); # Eq. 5.27 add_aeq( stripper_Ncp = stripper_NG * cp_liq_G + stripper_NH * cp_liq_H); add_aeq(stripper_rhs * stripper_Ncp = (1/1000) * stream_10_flow * stream_10_cp * (Ts - Tstr) + (1/1000) * stream_4_flow * stream_4_cp * (stream_4_T - Tstr) - HoVstr + Qstr); add_deq( DOT(Tstr) = stripper_rhs, Tstr); set_initial(Tstr, 338.85); # Eq. 5.22 - Split factors phi_A := 1; phi_B := 1; phi_C := 1; PC[1] := 3.51e-7; PC[6] := -0.00011e0; PC[11] := 0.011351e0; PC[16] := 0.548012e0; PC[2] := 3.69e-7; PC[7] := -0.0001e0; PC[12] := 0.010197e0; PC[17] := 0.620794e0; PC[3] := 3.69e-7; PC[8] := -0.0001e0; PC[13] := 0.010049e0; PC[18] := 0.628854e0; PC[4] := 1.84e-9; PC[9] := 1.37e-5; PC[14] := 0.000217e0; PC[19] := 0.001393e0; PC[5] := 8.32e-8; PC[10] := -7.64e-6; PC[15] := 0.000976e0; PC[20] := -0.01568e0; add_aeq(phi_D = PC[1] * (Tstr - Tref)^3 + PC[6] * (Tstr - Tref)^2 + PC[11] * (Tstr - Tref) + PC[16] ); add_aeq(phi_E = PC[2] * (Tstr - Tref)^3 + PC[7] * (Tstr - Tref)^2 + PC[12] * (Tstr - Tref) + PC[17] ); add_aeq(phi_F = PC[3] * (Tstr - Tref)^3 + PC[8] * (Tstr - Tref)^2 + PC[13] * (Tstr - Tref) + PC[18] ); add_aeq(phi_G = PC[4] * (Tstr - Tref)^3 + PC[9] * (Tstr - Tref)^2 + PC[14] * (Tstr - Tref) + PC[19] ); add_aeq(phi_H = PC[5] * (Tstr - Tref)^3 + PC[10] * (Tstr - Tref)^2 + PC[15] * (Tstr - Tref) + PC[20] ); # Eq. 5.54 add_aeq( stream_5_flow = stream_10_flow + stream_4_flow - stream_11_flow - (dNstr_G + dNstr_H)); # Eq. 5.55 add_aeq( stream_5_conc_A * stream_5_flow = phi_A * (stream_4_conc_A * stream_4_flow + separator_x_A * stream_10_flow) ); add_aeq( stream_5_conc_B * stream_5_flow = phi_B * (stream_4_conc_B * stream_4_flow + separator_x_B * stream_10_flow) ); add_aeq( stream_5_conc_C * stream_5_flow = phi_C * (stream_4_conc_C * stream_4_flow + separator_x_C * stream_10_flow) ); add_aeq( stream_5_conc_D * stream_5_flow = phi_D * (stream_4_conc_D * stream_4_flow + separator_x_D * stream_10_flow) ); add_aeq( stream_5_conc_E * stream_5_flow = phi_E * (stream_4_conc_E * stream_4_flow + separator_x_E * stream_10_flow) ); add_aeq( stream_5_conc_F * stream_5_flow = phi_F * (stream_4_conc_F * stream_4_flow + separator_x_F * stream_10_flow) ); add_aeq( stream_5_conc_G * stream_5_flow = phi_G * (stream_4_conc_G * stream_4_flow + separator_x_G * stream_10_flow) ); add_aeq( stream_5_conc_H * stream_5_flow = phi_H * (stream_4_conc_H * stream_4_flow + separator_x_H * stream_10_flow) ); # Eq. 5.56 stream_11_conc_A := 0; stream_11_conc_B := 0; stream_11_conc_C := 0; # Conc D - F add_aeq( stream_11_conc_D * stream_11_flow = stream_4_conc_D * stream_4_flow + separator_x_D * stream_10_flow - stream_5_conc_D * stream_5_flow ); add_aeq( stream_11_conc_E * stream_11_flow = stream_4_conc_E * stream_4_flow + separator_x_E * stream_10_flow - stream_5_conc_E * stream_5_flow ); add_aeq( stream_11_conc_F * stream_11_flow = stream_4_conc_F * stream_4_flow + separator_x_F * stream_10_flow - stream_5_conc_F * stream_5_flow ); # Eq. 5.57 # Conc G, H add_aeq( stream_11_conc_G * (stripper_NG + stripper_NH) = (1 - stream_11_conc_D - stream_11_conc_E - stream_11_conc_F) * stripper_NG); add_aeq( stream_11_conc_H * (stripper_NG + stripper_NH) = (1 - stream_11_conc_D - stream_11_conc_E - stream_11_conc_F) * stripper_NH); add_aeq(Vstr_liq * (stream_11_conc_G + stream_11_conc_H) = (stripper_NG + stripper_NH) / rho_liq_stripper ); add_aeq(HoVstr = ( (stream_5_conc_D * stream_5_flow - stream_4_conc_D * stream_4_flow) * M_D * H_vap_D + (stream_5_conc_E * stream_5_flow - stream_4_conc_E * stream_4_flow) * M_E * H_vap_E + (stream_5_conc_F * stream_5_flow - stream_4_conc_F * stream_4_flow) * M_F * H_vap_F + (stream_5_conc_G * stream_5_flow - stream_4_conc_G * stream_4_flow) * M_G * H_vap_G + (stream_5_conc_H * stream_5_flow - stream_4_conc_H * stream_4_flow) * M_H * H_vap_H) / 1000); # Eq. 5.58 add_aeq( Qstr = 2.258717 * stripper_m_CWS ); # MW ########################################################################### # Table 4-1 Process manipulated variables # Bounds on the control variables add_bound(stream_1_flow, 0, dummy); add_bound(stream_2_flow, 0, dummy); add_bound(stream_3_flow, 0, dummy); add_bound(stream_4_flow, 0, dummy); add_bound(stream_8_flow, 0, 1.4924); add_bound(stream_9_flow, 0, 0.0122); add_bound(stream_10_flow, 0, dummy); add_bound(stream_11_flow, 0, dummy); add_bound(stripper_m_CWS, 0, 0.1348); add_bound(reactor_m_CWS, 0, 63.08333333333334); ############################################## # Table 6 Process operating constraints # Reactor pressure add_bound(pr_MPa, dummy, 2.895); # Reactor level [m3] add_bound(Vr_liq, 11.8, 21.3); # Reactor temperature [K] add_bound(Tr, dummy, 423.15); # Separator liquid level [m3] add_bound(Vs_liq, 3.3, 9); # Stripper liquid level [m3] add_bound(Vstr_liq, 3.5, 6.6); ############################################### # For IPOPT BD and Make_start_from_Sim define_control(stream_1_flow); define_control(stream_2_flow); define_control(stream_3_flow); define_control(stream_4_flow); define_control(stream_10_flow); define_control(stream_11_flow); define_control(reactor_m_CWS ); define_control(separator_m_CWS); # Instead of Stripper steam valve define_control(stripper_m_CWS); ### Section Break 2 ### # Output Horizon is one hour T_FINAL := 18000; # Base Case Objective objective( ( 393.55 - Tr )^2 / 393.55 + ( 353.25 - Ts )^2 / 353.25 + ( 338.85 - Tstr )^2 / 338.85 + ( 0.13823 - stream_8_conc_B )^2 / 0.13823 + ( 0.53724 - stream_11_conc_G )^2 / 0.53724 + ( 0.43828 - stream_11_conc_H )^2 / 0.43828 + ( 2.805 - pr_MPa )^2 / 2.805 + 0.1 * ((11.2 / 3600) - stream_1_flow )^2 / (11.2 / 3600) + 0.1 * ((114.5 / 3600) - stream_2_flow )^2 / (114.5 / 3600) + 0.1 * ((98 / 3600) - stream_3_flow )^2 / (98 / 3600) + 0.1 * ((417.5 / 3600) - stream_4_flow )^2 / (417.5 / 3600) + 0.1 * ((1201.5 / 3600) - stream_8_flow )^2 / (1201.5 / 3600) + 0.1 * ((15.1 / 3600) - stream_9_flow )^2 / (15.1 / 3600) + 0.1 * ((259.5 / 3600) - stream_10_flow)^2 / (259.5 / 3600) + 0.1 * ((211.3 / 3600) - stream_11_flow)^2 / (211.3 / 3600) + 0.1 * ( 25.931035 - reactor_m_CWS )^2 / 25.931035 + 0.1 * ( 13.7163233333333 - separator_m_CWS )^2 / 13.7163233333333 + 0.1 * ( 0.063975 - stripper_m_CWS )^2 / 0.063975 , discrete); ocoma();