TITLE  MULTI VESSEL BATCH DISTILLATION
#
# Plant consists of 3 column sections, 2 intermediate vessels,
# reboiler, total condenser and accumulator (trays are numbered
# from the top and down).
# Vapor bypassing the intermediate vessels
#
# There are 4 components. The lightest product is accumulated
# in the condenser, the second lightest in the upper vessel,
# the third lightest in the lower vessel and the heaviest in
# the reboiler.
#
# The mathematical model assumes constant relative volatility
# (relative to the heaviest component) and linear tray
# hydraulics. Separation is taking place in the vessels too.
#
# Control algorithm: 3 PI-controllers which control the
# temperature in the middle of the column sections.
# Manipulated variable is the liquid flow from the vessel
# above. Set points for the controllers are average boiling
# temperature between the two separated components
#
# The termination criterion is based on approach to steady
# state; max[xt(t)-xt(t-0.01)] in the condenser, vessels and
# reboiler.
#
# Two report forms: Multi_vessel and Summary.
#
#---------------------------------------------------------------
#
# Dummy variable XT in most models. Reason: Can not use derivative
# variable (xt) in input/output streams (use xo instead).
#
# Composition changes as separate variables in condenser,
# vessels and reboiler. Reason: Can not use arrays in connections.
#
#---------------------------------------------------------------
#
# Author: Bernd Wittgens, based on E. Sorensen
# Date: 10.10.95
#
****
OPTIONS

  ROUTINES  DAE
  EXECUTION
  PRINTLEVEL = 2        # level of output during solution
  TARGET     = terminal # device to which output is directed
  REL_TOL    = 1E-8     # relative tolerence
  ABS_TOL    = 1E-8     # absolute tolerence
  EVENT_TOL  = 1E-8     # event tolerance
  INTERVALS  = 100      # number of time steps for dynamic solution
  TIME_STEP  = 0.1      # length of time step for storing data
  DEBUG      = OFF      # switch for additional information
****
DECLARE

  TYPE
     FLOWRATE        =   10.0   :    0    :    50    Unit = "kmol/hr"
     MOLE_FRACTION   =    0.5   :    0    :     1    Unit = "-------"
     MOLAR_HOLDUP    =    3.0   :    0    :    25    Unit = "kmol"
     REFLUX_RATIO    =    1     :    0    :1.0E10    Unit = "-------"
     EQ_CONST        =    1     :   0.01  :   100    Unit = "-------"
     NOTYPE          =    1     : -100    :   250    Unit = "-------"
     TEMPERATURE     =    90    :   50    :   130    UNIT = "deg. C "

  STREAM  MAINSTREAM
      SET   NC = 4
      TYPE  FLOWRATE, MOLE_FRACTION(NC)

****
 MODEL CONDENSER  # Condenser model #

  SET  NC

  TYPE
    LO,VI,L_CNTR      AS  FLOWRATE
    XO,YI,XD,XT          AS  ARRAY(NC) OF MOLE_FRACTION
    HT,HC                AS  MOLAR_HOLDUP
    R                    AS  REFLUX_RATIO
    T                    AS  TEMPERATURE
    TB    AS  ARRAY(NC) OF TEMPERATURE
    SS_XT_1,SS_XT_2      AS  NOTYPE
    SS_XT_3,SS_XT_4      AS  NOTYPE
    MINUS                AS  NOTYPE

  STREAM
     INPUT  1   VI,YI
    OUTPUT  1   LO,XO
 CONNECTION 1   L_CNTR  # From controller #
 CONNECTION 2  SS_XT_1  # Approach to steady_state #
 CONNECTION 3  SS_XT_2  # Approach to steady_state #
 CONNECTION 4  SS_XT_3  # Approach to steady_state #
 CONNECTION 5  SS_XT_4  # Approach to steady_state #
 CONNECTION 6     T

 EQUATION

# Material balance #
                       $HT = VI - LO ;

       HC * $XT + XT * $HT = VI * YI - LO * XD ;

                        HT = HC ;

                        XT = XO = XD ;
# Reflux ratio #
                    R * VI = LO ;
# Controller #
                        LO = L_CNTR ;
# Temperature #
          T = Tb(1)*xt(1)+Tb(2)*xt(2)+Tb(3)*xt(3)+Tb(4)*xt(4);

# Steady state measure = xt(t)-xt(t-minus) #

           SS_XT_1 = XT(1) - (DELAY XT(1) BY MINUS) ;
           SS_XT_2 = XT(2) - (DELAY XT(2) BY MINUS) ;
           SS_XT_3 = XT(3) - (DELAY XT(3) BY MINUS) ;
           SS_XT_4 = XT(4) - (DELAY XT(4) BY MINUS) ;
****
MODEL PI_CONTROLLER   # Proportional controller

  SET CLIP = 1

  TYPE
    MEASURE, SET_POINT     AS  NOTYPE
    BIAS,GAIN, reset       AS  NOTYPE
    ERROR, I_error, eps    AS  NOTYPE
    CALC_VALUE,CONT        AS  NOTYPE
    CONTROL_ACTION         AS  NOTYPE
    MAX,MIN                AS  NOTYPE
    CNTR_FLAG,SET_FLOW     AS  NOTYPE

  STREAM
    CONNECTION 1 MEASURE
    CONNECTION 2 CONTROL_ACTION

  EQUATION

         ERROR = SET_POINT - MEASURE ;
     $I_error  = eps ;
    CALC_VALUE = BIAS + GAIN * (error + I_error/reset) ;

 # Clip if required #
    IF CLIP = 1 THEN
       IF CALC_VALUE > MAX THEN
          CONT = MAX
       ELSE IF CALC_VALUE < MIN THEN
               CONT = MIN
            ELSE
               CONT = CALC_VALUE
            ENDIF
       ENDIF
    ELSE
       CONT = CALC_VALUE
    ENDIF ;

    IF CNTR_FLAG = 1 THEN
       CONTROL_ACTION = CONT
    ELSE
       CONTROL_ACTION = SET_FLOW
    ENDIF ;

 # antiwindup
    IF < <calc_value <= min> OR <calc_value => max> > then
       eps = 0.0
    else
       eps = error
    endif;





****
MODEL P_CONTROLLER   # Proportional controller

  SET CLIP = 1

  TYPE
    MEASURE, SET_POINT   AS  NOTYPE
    BIAS,GAIN,ERROR      AS  NOTYPE
    CALC_VALUE,CONT      AS  NOTYPE
    CONTROL_ACTION       AS  NOTYPE
    MAX,MIN              AS  NOTYPE
    CNTR_FLAG,SET_FLOW   AS  NOTYPE

  STREAM
    CONNECTION 1 MEASURE
    CONNECTION 2 CONTROL_ACTION

  EQUATION

         ERROR = SET_POINT - MEASURE ;

    CALC_VALUE = BIAS + GAIN * ERROR ;

 # Clip if required #
    IF CLIP = 1 THEN
       IF CALC_VALUE > MAX THEN
          CONT = MAX
       ELSE IF CALC_VALUE < MIN THEN
               CONT = MIN
            ELSE
               CONT = CALC_VALUE
            ENDIF
       ENDIF
    ELSE
       CONT = CALC_VALUE
    ENDIF ;

    IF CNTR_FLAG = 1 THEN
       CONTROL_ACTION = CONT
    ELSE
       CONTROL_ACTION = SET_FLOW
    ENDIF ;
****

MODEL REBOILER    # Reboiler model #

  SET  NC

  TYPE
    LI,VO                AS  FLOWRATE
    XI,YO,XN,XT          AS  ARRAY(NC) OF MOLE_FRACTION
    HT,HN                AS  MOLAR_HOLDUP
    K                    AS  ARRAY(NC) OF EQ_CONST
    SS_XT_1,SS_XT_2      AS  NOTYPE
    SS_XT_3,SS_XT_4      AS  NOTYPE
    MINUS                AS  NOTYPE
    T                    AS  TEMPERATURE
    TB    AS  ARRAY(NC) OF TEMPERATURE

  STREAM
     INPUT  1  LI,XI
    OUTPUT  1  VO,YO
 CONNECTION 1  SS_XT_1  # Approach to steady_state #
 CONNECTION 2  SS_XT_2  # Approach to steady_state #
 CONNECTION 3  SS_XT_3  # Approach to steady_state #
 CONNECTION 4  SS_XT_4  # Approach to steady_state #
 CONNECTION 5     T


 EQUATION

# Material balance #

                       $HT = LI - VO ;

       HT * $XT + XT * $HT = LI * XI - VO * YO ;

                        HT = HN ;

                        XT = XN ;
# Phase equilibrium #

          YO(2:NC) * XN(1) = K(2:NC)/K(1) * XN(2:NC) * YO(1) ;

                 SIGMA(YO) = 1.0 ;

# Temperature #
          T = Tb(1)*xt(1)+Tb(2)*xt(2)+Tb(3)*xt(3)+Tb(4)*xt(4);

# Steady state measure = xt(t)-xt(t-minus) #

           SS_XT_1 = XT(1) - (DELAY XT(1) BY MINUS) ;
           SS_XT_2 = XT(2) - (DELAY XT(2) BY MINUS) ;
           SS_XT_3 = XT(3) - (DELAY XT(3) BY MINUS) ;
           SS_XT_4 = XT(4) - (DELAY XT(4) BY MINUS) ;
****
MODEL STEADY_STATE  # Returns maximum change in composition over time interval #

  SET  NNC=16

  TYPE
    COND_SS_XT_1,COND_SS_XT_2  AS  NOTYPE
    COND_SS_XT_3,COND_SS_XT_4  AS  NOTYPE
    V_A_SS_XT_1,V_A_SS_XT_2    AS  NOTYPE
    V_A_SS_XT_3,V_A_SS_XT_4    AS  NOTYPE
    V_B_SS_XT_1,V_B_SS_XT_2    AS  NOTYPE
    V_B_SS_XT_3,V_B_SS_XT_4    AS  NOTYPE
    REB_SS_XT_1,REB_SS_XT_2    AS  NOTYPE
    REB_SS_XT_3,REB_SS_XT_4    AS  NOTYPE
    SS                         AS  ARRAY(NNC) OF NOTYPE
    MAX_SS                     AS  NOTYPE

  STREAM
   CONNECTION 1  COND_SS_XT_1  # From condenser #
   CONNECTION 2  COND_SS_XT_2
   CONNECTION 3  COND_SS_XT_3
   CONNECTION 4  COND_SS_XT_4
   CONNECTION 5  V_A_SS_XT_1   # From vessel_A #
   CONNECTION 6  V_A_SS_XT_2
   CONNECTION 7  V_A_SS_XT_3
   CONNECTION 8  V_A_SS_XT_4
   CONNECTION 9  V_B_SS_XT_1   # From vessel_B #
   CONNECTION 10 V_B_SS_XT_2
   CONNECTION 11 V_B_SS_XT_3
   CONNECTION 12 V_B_SS_XT_4
   CONNECTION 13 REB_SS_XT_1   # From reboiler #
   CONNECTION 14 REB_SS_XT_2
   CONNECTION 15 REB_SS_XT_3
   CONNECTION 16 REB_SS_XT_4

EQUATION

# All composition changes in an array #

   SS(1)  = COND_SS_XT_1 ; SS(2)  = COND_SS_XT_2 ;
   SS(3)  = COND_SS_XT_3 ; SS(4)  = COND_SS_XT_4 ;
   SS(5)  = V_A_SS_XT_1 ;  SS(6)  = V_A_SS_XT_2 ;
   SS(7)  = V_A_SS_XT_3 ;  SS(8)  = V_A_SS_XT_4 ;
   SS(9)  = V_B_SS_XT_1 ;  SS(10) = V_B_SS_XT_2 ;
   SS(11) = V_B_SS_XT_3 ;  SS(12) = V_B_SS_XT_4 ;
   SS(13) = REB_SS_XT_1 ;  SS(14) = REB_SS_XT_2 ;
   SS(15) = REB_SS_XT_1 ;  SS(16) = REB_SS_XT_2 ;

# Largest steady state deviation #

   MAX_SS = SMAX(SS) ;

****
MODEL TRAY   # Column tray model #

  SET NC

  TYPE
    LO_INIT,LI,VO,VI,LO    AS  FLOWRATE
    XI,XO,YO,YI,XT         AS  ARRAY(NC) OF MOLE_FRACTION
    X1,X2,X3,X4            AS  MOLE_FRACTION
    HI_INIT,HI,HT          AS  MOLAR_HOLDUP
    K                      AS  ARRAY(NC) OF EQ_CONST
    TAU                    AS  NOTYPE
    T                    AS  TEMPERATURE
    TB    AS  ARRAY(NC) OF TEMPERATURE


  STREAM
     INPUT  1   LI,XI
     INPUT  2   VI,YI
    OUTPUT  1   LO,XO
    OUTPUT  2   VO,YO
 CONNECTION 1   X1    # Composition of component 1 #
 CONNECTION 2   X2    # Composition of component 2 #
 CONNECTION 3   X3    # Composition of component 3 #
 CONNECTION 4   X4    # Composition of component 4 #
 CONNECTION 5    T


EQUATION

# Material balance #
                       $HT = LI + VI - LO - VO ;

       HT * $XT + XT * $HT = LI * XI + VI * YI - LO * XO - VO * YO ;

                        HT = HI ;

                        XT = XO ;

# Constant molar flows #

                        VI = VO ;
# Phase equilibrium #

          YO(2:NC) * XO(1) = K(2:NC)/K(1) * XO(2:NC) * YO(1) ;

                 SIGMA(YO) = 1.0 ;

# Temperature #
          T = Tb(1)*xt(1)+Tb(2)*xt(2)+Tb(3)*xt(3)+Tb(4)*xt(4);

# Tray hydraulics #

      (LO - LO_INIT) * TAU = HI - HI_INIT ;

                       TAU = 2/3 * HI/LO ;

# Measurements used by controllers #

                        X1 = XO(1) ;
                        X2 = XO(2) ;
                        X3 = XO(3) ;
                        X4 = XO(4) ;
****
MODEL VESSEL    # Intermediate storage vessel model #

  SET  NC

  TYPE
    LI,LO,L_CNTR   AS  FLOWRATE
    XI,XO,XT       AS  ARRAY(NC) OF MOLE_FRACTION
    HT,HI                AS  MOLAR_HOLDUP
    SS_XT_1,SS_XT_2      AS  NOTYPE
    SS_XT_3,SS_XT_4      AS  NOTYPE
    MINUS                AS  NOTYPE
    T                    AS  TEMPERATURE
    TB    AS  ARRAY(NC) OF TEMPERATURE


  STREAM
     INPUT  1  LI,XI
    OUTPUT  1  LO,XO
 CONNECTION 1  L_CNTR   # From controller #
 CONNECTION 2  SS_XT_1  # Approach to steady_state #
 CONNECTION 3  SS_XT_2  # Approach to steady_state #
 CONNECTION 4  SS_XT_3  # Approach to steady_state #
 CONNECTION 5  SS_XT_4  # Approach to steady_state #
 CONNECTION 6     T

 EQUATION

# Material balance #
                       $HT = LI - LO  ;

       HT * $XT + XT * $HT = LI * XI - LO * XO ;

                        HT = HI ;

                        XT = XO ;

# Controller #

                        LO = L_CNTR ;

# Temperature #
          T = Tb(1)*xt(1)+Tb(2)*xt(2)+Tb(3)*xt(3)+Tb(4)*xt(4);

# Steady state measure = xt(t)-xt(t-minus) #

           SS_XT_1 = XT(1) - (DELAY XT(1) BY MINUS) ;
           SS_XT_2 = XT(2) - (DELAY XT(2) BY MINUS) ;
           SS_XT_3 = XT(3) - (DELAY XT(3) BY MINUS) ;
           SS_XT_4 = XT(4) - (DELAY XT(4) BY MINUS) ;
****
FLOWSHEET

# Liquid flows (top and down)..

   # reflux to column section A
  STREAM L1_FEED  OUTPUT 1 OF cond     IS INPUT 1 OF TRAY_A1

  STREAM L2_FEED  OUTPUT 1 OF TRAY_A1  IS INPUT 1 OF TRAY_A2
  STREAM L3_FEED  OUTPUT 1 OF TRAY_A2  IS INPUT 1 OF TRAY_A3
  STREAM L4_FEED  OUTPUT 1 OF TRAY_A3  IS INPUT 1 OF TRAY_A4
  STREAM L5_FEED  OUTPUT 1 OF TRAY_A4  IS INPUT 1 OF TRAY_A5
  STREAM L6_FEED  OUTPUT 1 OF TRAY_A5  IS INPUT 1 OF TRAY_A6
  STREAM L7_FEED OUTPUT 1 OF TRAY_A6  IS INPUT 1 OF TRAY_A7
  STREAM L8_FEED OUTPUT 1 OF TRAY_A7  IS INPUT 1 OF TRAY_A8
  STREAM L9_FEED  OUTPUT 1 OF TRAY_A8  IS INPUT 1 OF TRAY_A9
  STREAM L10_FEED  OUTPUT 1 OF TRAY_A9  IS INPUT 1 OF TRAY_A10
  STREAM L11_FEED OUTPUT 1 OF TRAY_A10  IS INPUT 1 OF TRAY_A11
  STREAM L12_FEED  OUTPUT 1 OF TRAY_A11  IS INPUT 1 OF VESSEL_A

  STREAM L13_FEED  OUTPUT 1 OF VESSEL_A IS INPUT 1 OF TRAY_B1
  STREAM L14_FEED  OUTPUT 1 OF TRAY_B1  IS INPUT 1 OF TRAY_B2
  STREAM L15_FEED  OUTPUT 1 OF TRAY_B2  IS INPUT 1 OF TRAY_B3
  STREAM L16_FEED OUTPUT 1 OF TRAY_B3  IS INPUT 1 OF TRAY_B4
  STREAM L17_FEED OUTPUT 1 OF TRAY_B4  IS INPUT 1 OF TRAY_B5
  STREAM L18_FEED  OUTPUT 1 OF TRAY_B5  IS INPUT 1 OF TRAY_B6
  STREAM L19_FEED OUTPUT 1 OF TRAY_B6  IS INPUT 1 OF TRAY_B7
  STREAM L20_FEED OUTPUT 1 OF TRAY_B7  IS INPUT 1 OF TRAY_B8
  STREAM L21_FEED OUTPUT 1 OF TRAY_B8  IS INPUT 1 OF TRAY_B9
  STREAM L22_FEED OUTPUT 1 OF TRAY_B9  IS INPUT 1 OF TRAY_B10
  STREAM L23_FEED OUTPUT 1 OF TRAY_B10  IS INPUT 1 OF TRAY_B11
  STREAM L24_FEED OUTPUT 1 OF TRAY_B11  IS INPUT 1 OF VESSEL_B

  STREAM L25_FEED OUTPUT 1 OF VESSEL_B IS INPUT 1 OF TRAY_C1
  STREAM L26_FEED OUTPUT 1 OF TRAY_C1  IS INPUT 1 OF TRAY_C2
  STREAM L27_FEED OUTPUT 1 OF TRAY_C2  IS INPUT 1 OF TRAY_C3
  STREAM L28_FEED OUTPUT 1 OF TRAY_C3  IS INPUT 1 OF TRAY_C4
  STREAM L29_FEED OUTPUT 1 OF TRAY_C4  IS INPUT 1 OF TRAY_C5
  STREAM L30_FEED OUTPUT 1 OF TRAY_C5  IS INPUT 1 OF TRAY_C6
  STREAM L31_FEED OUTPUT 1 OF TRAY_C6  IS INPUT 1 OF TRAY_C7
  STREAM L32_FEED OUTPUT 1 OF TRAY_C7  IS INPUT 1 OF TRAY_C8
  STREAM L33_FEED OUTPUT 1 OF TRAY_C8  IS INPUT 1 OF TRAY_C9
  STREAM L34_FEED OUTPUT 1 OF TRAY_C9  IS INPUT 1 OF TRAY_C10
  STREAM L35_FEED OUTPUT 1 OF TRAY_C10  IS INPUT 1 OF TRAY_C11

  STREAM L36_FEED OUTPUT 1 OF TRAY_C11  IS INPUT 1 OF REB

# Vapour flows (bottom and up)..

  STREAM V1_FEED  OUTPUT 1 OF REB      IS INPUT 2 OF TRAY_C11
  STREAM V2_FEED  OUTPUT 2 OF TRAY_C11  IS INPUT 2 OF TRAY_C10
  STREAM V3_FEED  OUTPUT 2 OF TRAY_C10  IS INPUT 2 OF TRAY_C9
  STREAM V4_FEED  OUTPUT 2 OF TRAY_C9  IS INPUT 2 OF TRAY_C8
  STREAM V5_FEED  OUTPUT 2 OF TRAY_C8  IS INPUT 2 OF TRAY_C7
  STREAM V6_FEED  OUTPUT 2 OF TRAY_C7  IS INPUT 2 OF TRAY_C6
  STREAM V7_FEED  OUTPUT 2 OF TRAY_C6  IS INPUT 2 OF TRAY_C5
  STREAM V8_FEED  OUTPUT 2 OF TRAY_C5  IS INPUT 2 OF TRAY_C4
  STREAM V9_FEED  OUTPUT 2 OF TRAY_C4  IS INPUT 2 OF TRAY_C3
  STREAM V10_FEED  OUTPUT 2 OF TRAY_C3  IS INPUT 2 OF TRAY_C2
  STREAM V11_FEED  OUTPUT 2 OF TRAY_C2  IS INPUT 2 OF TRAY_C1

  STREAM V12_FEED  OUTPUT 2 OF TRAY_C1  IS INPUT 2 OF TRAY_B11
  STREAM V13_FEED  OUTPUT 2 OF TRAY_B11  IS INPUT 2 OF TRAY_B10
  STREAM V14_FEED  OUTPUT 2 OF TRAY_B10   IS INPUT 2 OF TRAY_B9
  STREAM V15_FEED  OUTPUT 2 OF TRAY_B9  IS INPUT 2 OF TRAY_B8
  STREAM V16_FEED  OUTPUT 2 OF TRAY_B8  IS INPUT 2 OF TRAY_B7
  STREAM V17_FEED  OUTPUT 2 OF TRAY_B7   IS INPUT 2 OF TRAY_B6
  STREAM V18_FEED  OUTPUT 2 OF TRAY_B6  IS INPUT 2 OF TRAY_B5
  STREAM V19_FEED  OUTPUT 2 OF TRAY_B5  IS INPUT 2 OF TRAY_B4
  STREAM V20_FEED  OUTPUT 2 OF TRAY_B4  IS INPUT 2 OF TRAY_B3
  STREAM V21_FEED OUTPUT 2 OF TRAY_B3  IS INPUT 2 OF TRAY_B2
  STREAM V22_FEED OUTPUT 2 OF TRAY_B2  IS INPUT 2 OF TRAY_B1

  STREAM V23_FEED OUTPUT 2 OF TRAY_B1  IS INPUT 2 OF TRAY_A11
  STREAM V24_FEED  OUTPUT 2 OF TRAY_A11  IS INPUT 2 OF TRAY_A10
  STREAM V25_FEED  OUTPUT 2 OF TRAY_A10  IS INPUT 2 OF TRAY_A9
  STREAM V26_FEED  OUTPUT 2 OF TRAY_A9  IS INPUT 2 OF TRAY_A8
  STREAM V27_FEED  OUTPUT 2 OF TRAY_A8  IS INPUT 2 OF TRAY_A7
  STREAM V28_FEED  OUTPUT 2 OF TRAY_A7  IS INPUT 2 OF TRAY_A6
  STREAM V29_FEED  OUTPUT 2 OF TRAY_A6  IS INPUT 2 OF TRAY_A5
  STREAM V30_FEED OUTPUT 2 OF TRAY_A5  IS INPUT 2 OF TRAY_A4
  STREAM V31_FEED OUTPUT 2 OF TRAY_A4  IS INPUT 2 OF TRAY_A3
  STREAM V32_FEED OUTPUT 2 OF TRAY_A3  IS INPUT 2 OF TRAY_A2
  STREAM V33_FEED OUTPUT 2 OF TRAY_A2  IS INPUT 2 OF TRAY_A1
  STREAM V34_FEED OUTPUT 2 OF TRAY_A1  IS INPUT 1 OF COND

# Controlling composition 1 in Condenser..
  CONNECTION 1 OF CNTR_1 IS CONNECTION 5 OF TRAY_A6
  CONNECTION 2 OF CNTR_1 IS CONNECTION 1 OF COND

# Controlling composition 2 in Vessel A..
  CONNECTION 1 OF CNTR_2 IS CONNECTION 5 OF TRAY_B6
  CONNECTION 2 OF CNTR_2 IS CONNECTION 1 OF VESSEL_A

# Controlling composition 3 in Vessel B..
  CONNECTION 1 OF CNTR_3 IS CONNECTION 5 OF TRAY_C6
  CONNECTION 2 OF CNTR_3 IS CONNECTION 1 OF VESSEL_B

# Connections for composition change measure #
  CONNECTION 1  OF ST_STATE IS CONNECTION 2 OF COND
  CONNECTION 2  OF ST_STATE IS CONNECTION 3 OF COND
  CONNECTION 3  OF ST_STATE IS CONNECTION 4 OF COND
  CONNECTION 4  OF ST_STATE IS CONNECTION 5 OF COND
  CONNECTION 5  OF ST_STATE IS CONNECTION 2 OF VESSEL_A
  CONNECTION 6  OF ST_STATE IS CONNECTION 3 OF VESSEL_A
  CONNECTION 7  OF ST_STATE IS CONNECTION 4 OF VESSEL_A
  CONNECTION 8  OF ST_STATE IS CONNECTION 5 OF VESSEL_A
  CONNECTION 9  OF ST_STATE IS CONNECTION 2 OF VESSEL_B
  CONNECTION 10 OF ST_STATE IS CONNECTION 3 OF VESSEL_B
  CONNECTION 11 OF ST_STATE IS CONNECTION 4 OF VESSEL_B
  CONNECTION 12 OF ST_STATE IS CONNECTION 5 OF VESSEL_B
  CONNECTION 13 OF ST_STATE IS CONNECTION 1 OF REB
  CONNECTION 14 OF ST_STATE IS CONNECTION 2 OF REB
  CONNECTION 15 OF ST_STATE IS CONNECTION 3 OF REB
  CONNECTION 16 OF ST_STATE IS CONNECTION 4 OF REB
****
UNIT ACC      IS AN ACCUMULATOR
****
UNIT CNTR_1   IS A PI_CONTROLLER
****
UNIT CNTR_2   IS A PI_CONTROLLER
****
UNIT CNTR_3   IS A PI_CONTROLLER
****
UNIT COND     IS A CONDENSER
****
UNIT REB      IS A REBOILER
****
UNIT ST_STATE IS A STEADY_STATE
****
UNIT TRAY_A1  IS A TRAY
****
UNIT TRAY_A10  IS A TRAY
****
UNIT TRAY_A11  IS A TRAY
****
UNIT TRAY_A2  IS A TRAY
****
UNIT TRAY_A3  IS A TRAY
****
UNIT TRAY_A4  IS A TRAY
****
UNIT TRAY_A5  IS A TRAY
****
UNIT TRAY_A6  IS A TRAY
****
UNIT TRAY_A7  IS A TRAY
****
UNIT TRAY_A8  IS A TRAY
****
UNIT TRAY_A9  IS A TRAY
****
UNIT TRAY_B1  IS A TRAY
****
UNIT TRAY_B10  IS A TRAY
****
UNIT TRAY_B11  IS A TRAY
****
UNIT TRAY_B2  IS A TRAY
****
UNIT TRAY_B3  IS A TRAY
****
UNIT TRAY_B4  IS A TRAY
****
UNIT TRAY_B5  IS A TRAY
****
UNIT TRAY_B6  IS A TRAY
****
UNIT TRAY_B7  IS A TRAY
****
UNIT TRAY_B8  IS A TRAY
****
UNIT TRAY_B9  IS A TRAY
****
UNIT TRAY_C1  IS A TRAY
****
UNIT TRAY_C10  IS A TRAY
****
UNIT TRAY_C11  IS A TRAY
****
UNIT TRAY_C2  IS A TRAY
****
UNIT TRAY_C3  IS A TRAY
****
UNIT TRAY_C4  IS A TRAY
****
UNIT TRAY_C5  IS A TRAY
****
UNIT TRAY_C6  IS A TRAY
****
UNIT TRAY_C7  IS A TRAY
****
UNIT TRAY_C8  IS A TRAY
****
UNIT TRAY_C9  IS A TRAY
****
UNIT VESSEL_A IS A VESSEL
****
UNIT VESSEL_B IS A VESSEL
****
OPERATION

  SET
    WITHIN COND
       MINUS=0.1 , TB=<64.7,78.3,97.2,117.7>
    WITHIN CNTR_1
       SET_POINT=71.5, BIAS=10.0, GAIN=-.25, reset = 250, MIN=0.0, MAX=20.0,
       CNTR_FLAG=1, SET_FLOW=10.0
       # CNTR_FLAG = 1 for automatic

    WITHIN TRAY_A1                 #K=<10.2,4.5,2.3,1.0>
       LO_INIT=10.0, HI_INIT=0.01, K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A2
       LO_INIT=10.0, HI_INIT=0.01, K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A3
       LO_INIT=10.0, HI_INIT=0.01, K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A4
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A5
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A6
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A7
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A8
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A9
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A10
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_A11
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>

    WITHIN VESSEL_A
       MINUS=0.1
        TB =<64.7,78.3,97.2,117.7>
    WITHIN CNTR_2
       SET_POINT=87.75, BIAS=10.0, GAIN=-.25, reset = 250, MIN=0.0, MAX=20.0,
       CNTR_FLAG=1, SET_FLOW=10.0

    WITHIN TRAY_B1
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B2
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B3
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B4
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B5
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B6
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B7
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B8
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B9
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B10
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_B11
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>

    WITHIN VESSEL_B
       MINUS=0.1 , TB=<64.7,78.3,97.2,117.7>
    WITHIN CNTR_3
       SET_POINT=107.2, BIAS=10.0, GAIN=-.25, reset = 250, MIN=0.0, MAX=20.0,
       CNTR_FLAG=1, SET_FLOW=10.0

    WITHIN TRAY_C1
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C2
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C3
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C4
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C5
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C6
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C7
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C8
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C9
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C10
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>
    WITHIN TRAY_C11
       LO_INIT=10.0, HI_INIT=0.01,  K=<10.2,4.5,2.3,1.0>
        TB=<64.7,78.3,97.2,117.7>

    WITHIN REB
        K=<10.2,4.5,2.3,1.0>, MINUS=0.1, VO=10.0
        TB=<64.7,78.3,97.2,117.7>


# base case XT=<0.25,0.25,0.25,0.25>,
# XT=<0.25,0.23,0.27,0.25>,
# XT=<0.3,0.1,0.4,0.2>
  INITIAL
    WITHIN COND
        XT=<0.3,0.1,0.4,0.2>, HT=2.5

    within cntr_1
       I_error = 0.0

    WITHIN TRAY_A1
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A2
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A3
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A4
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A5
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A6
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A7
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A8
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A9
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A10
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_A11
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2


    WITHIN VESSEL_A
        XT=<0.3,0.1,0.4,0.2>, HT=2.5

    within cntr_2
       I_error = 0.0

    WITHIN TRAY_B1
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B2
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B3
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B4
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B5
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B6
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B7
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B8
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B9
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B10
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_B11
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2


    WITHIN VESSEL_B
        XT=<0.3,0.1,0.4,0.2>, HT=2.5

    within cntr_3
       I_error = 0.0

    WITHIN TRAY_C1
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C2
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C3
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C4
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C5
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C6
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C7
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C8
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C9
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C10
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2
    WITHIN TRAY_C11
        XT=<0.3,0.1,0.4,0.2>, HT=1.0E-2


    WITHIN REB
        XT=<0.3,0.1,0.4,0.2>, HT = 2.5
                                 #HT =10.0-33*1.0E-2 - 3*2.5
                                 #       account for tray holdup when
     #       start from empty column





****
CONDITIONS
   IF ST_STATE.MAX_SS < 1.0E-6

 Then Stop 1000  ST_STATE.MAX_SS

Code
 1000 FORMAT (1H,'Steady state reached! Maximum deviation=',G14.5)
$Endcode  # has to be in the first column!!
****
REPORT MULTI_VESSEL

FIELDS
LOWLIMIT = 1.0E-6
ZERO = 1.0E-8

DECIMALS = 1
&6  = CNTR_1.SET_POINT ;
&7  = CNTR_1.MEASURE ;
&8  = CNTR_1.GAIN ;
&13 = CNTR_2.SET_POINT ;
&14 = CNTR_2.MEASURE ;
&15 = CNTR_2.GAIN ;
&20 = CNTR_3.SET_POINT ;
&21 = CNTR_3.MEASURE ;
&22 = CNTR_3.GAIN ;

DECIMALS = 2
&1  = T ;
&2  = TRAY_A1.VO ;
&5  = COND.LO ;
&9  = TRAY_A11.LO ;
&12 = VESSEL_A.LO ;
&16 = TRAY_B11.LO ;
&19 = VESSEL_B.LO ;
&23 = TRAY_C11.LO ;
&25 = REB.VO ;

DECIMALS = 3
&3  = COND.HT ;
&4  = COND.XT(1) ;
&10 = VESSEL_A.HT ;
&11 = VESSEL_A.XT(2) ;
&17 = VESSEL_B.HT ;
&18 = VESSEL_B.XT(3) ;
&24 = REB.HT ;
&26 = REB.XT(4) ;

DECIMALS = 2
&27 = REB.K(1) ;
&28 = REB.K(2) ;
&29 = REB.K(3) ;
&30 = REB.K(4) ;

DISPLAY
********************************************************************
*      MULTI VESSEL BATCH DISTILLATION         TIME = %%%%%%%% hr  *
********************************************************************
*                                                                  *
*         FLOW = %%%%% KMOL/HR    /----------------\               *
*                   --------------| HT = %%%%% KMOL| CONDENSER     *
*                  /|\            | XT = %%%%%     |               *
*                   |             \----------------/               *
*                   |                      | FLOW = %%%%% KMOL/HR  *
*              ------------               \|/                      *
*              |          |----------------                        *
*              | TRAYS_A  |      /|\                               *
*              |          |      | | X_S = %%%%%                   *
*              |          |-------|  X_M = %%%%%                   *
*              ------------          KP  = %%%%                    *
*                /|\   |                                           *
*                 |    |  FLOW = %%%%% KMOL/HR                     *
*                 |   \|/                                          *
*           /-----------------\                                    *
*           | HT = %%%%% KMOL |                                    *
*           | XT = %%%%%      |  VESSEL_A                          *
*           \-----------------/                                    *
*                /|\   | FLOW = %%%%% KMOL/HR                      *
*                 |    |----------                                 *
*                 |   \|/       /|\                                *
*              ------------     | |  X_S = %%%%%                   *
*              |          |      |   X_M = %%%%%                   *
*              | TRAYS_B  |-------   KP  = %%%%                    *
*              |          |                                        *
*              |          |                                        *
*              ------------                                        *
*                /|\   |                                           *
*                 |    |  FLOW = %%%%% KMOL/HR                     *
*                 |   \|/                                          *
*           /-----------------\                                    *
*           | HT = %%%%% KMOL |                                    *
*           | XT = %%%%%      |  VESSEL_B                          *
*           \-----------------/                                    *
*                /|\   | FLOW = %%%%% KMOL/HR                      *
*                 |    |----------                                 *
*                 |   \|/       /|\                                *
*              ------------     | |  X_S = %%%%%                   *
*              |          |      |   X_M = %%%%%                   *
*              | TRAYS_C  |-------   KP  = %%%%                    *
*              |          |                                        *
*              |          |                                        *
*              ------------                                        *
*                /|\   |                                           *
*                 |    |  FLOW = %%%%% KMOL/HR                     *
*                 |   \|/                                          *
*           /-----------------\  REBOILER                          *
*           |                 |_______\                            *
*           | HT = %%%%% KMOL |       / VAPOUR = %%%%%  KMOL/HR    *
*           | XT = %%%%%      |/_______                            *
*           |                 |\                                   *
*           \-----------------/                                    *
*                                                                  *
*  4 COMPONENT MIXTURE - K = %%%%%, %%%%%, %%%%%, %%%%%            *
*                                                                  *
********************************************************************
****
REPORT SUMMARY

FIELDS
LOWLIMIT = 1.0E-6
ZERO = 1.0E-8
DECIMALS = 2
&1 Left = T ;
DECIMALS = 3
&2 Left = COND.HT ;
&3 Left = VESSEL_A.HT ;
&4 Left = VESSEL_B.HT ;
&5 Left = REB.HT ;
DECIMALS = 4
&6 Left = COND.XT(1) ;
&7 Left = VESSEL_A.XT(1) ;
&8 Left = VESSEL_B.XT(1) ;
&9 Left = REB.XT(1) ;
&10 Left = COND.XT(2) ;
&11 Left = VESSEL_A.XT(2) ;
&12 Left = VESSEL_B.XT(2) ;
&13 Left = REB.XT(2) ;
&14 Left = COND.XT(3) ;
&15 Left = VESSEL_A.XT(3) ;
&16 Left = VESSEL_B.XT(3) ;
&17 Left = REB.XT(3) ;
&18 Left = COND.XT(4) ;
&19 Left = VESSEL_A.XT(4) ;
&20 Left = VESSEL_B.XT(4) ;
&21 Left = REB.XT(4) ;

DISPLAY
********************************************************************
* SUMMARY  MULTI VESSEL BATCH DISTILLATION     TIME = %%%%%% hr    *
********************************************************************
*                                                                  *
*          CONDENSER:     VESSEL_A:      VESSEL_B:      REBOILER:  *
*                                                                  *
* HT(KMOL)  %%%%%          %%%%%          %%%%%          %%%%%     *
*                                                                  *
* XT(1)     %%%%%%%%       %%%%%%%%       %%%%%%%%       %%%%%%%%  *
* XT(2)     %%%%%%%%       %%%%%%%%       %%%%%%%%       %%%%%%%%  *
* XT(3)     %%%%%%%%       %%%%%%%%       %%%%%%%%       %%%%%%%%  *
* XT(4)     %%%%%%%%       %%%%%%%%       %%%%%%%%       %%%%%%%%  *
*                                                                  *
********************************************************************
****