Seperation Model Equation
Seperation Model Equation
Thesis
Master Chemical Engineering
Delft University of Technology
Wilma Hensen
October 2005
Engineering Solutions
J.W. Verwijs
Abstract
Within the Dow Chemical Company the strategy is to centre process flowsheet design
activities around the simulation tool Aspen Plus (from Aspen Tech Inc.). However, the
model library of Aspen Plus is limited in type and number of models of process unit
operations. Equation oriented modelling tools, such as gPROMS (from Process Systems
Enterprise Ltd.) or Aspen Custom Modeler ACM (from Aspen Tech Inc.), can be used
to develop custom models of process unit operations which are not available in the Aspen
Plus model library. For consistent flowsheet simulation and optimization it is required
that these custom models can be exported to and used within Aspen Plus, just like any
other model already available in the Aspen Plus model library.
Recently, interfaces based on the CAPE-OPEN standards - have been implemented in
the latest releases of the above mentioned process simulation tools. To test the status and
performance of the software interoperability, as well as to examine the custom model
performance in Aspen Plus, a model of a gas separation membrane unit is developed in
gPROMS and in ACM and exported for use in Aspen Plus.
This thesis describes the achievements made in the development of the custom membrane
model and its interfacing with Aspen Plus. Also, an improved method for model
initialisation is presented. Model initialisation is one of the principal obstacles for the
development of generic custom models, i.e. models which can run successfully
irrespective of the set of components, physical property method, or range of operating
conditions.
The main conclusions from this study are that several software features enhance the
development of generic and robust custom models in equation oriented modelling tools,
such as a hierarchical model structure, the usage of an external physical property package,
as well as the incorporation of a model initialisation structure (e.g. like the one proposed
in this thesis). Moreover, the current functionality and performance of the interfaces for
custom models between gPROMS and ACM on one side and Aspen Plus on the other
side are not sufficient to be used for industrial practice. They need to be improved
significantly by the software vendors.
Acknowledgements
During the last 8 months, from the beginning of February, I worked on my graduation
thesis eventuating in this report. The project was done in close collaboration with the
Process Systems Engineering section of Delft University of Technology and the
Engineering Solutions department of Dow Benelux B.V. at Terneuzen.
In the first place I would like to thank Jan Willem Verwijs for giving me the opportunity
to do my graduation project under his supervision. His experience, especially in process
modelling helped me to gain a better insight in this field. Also his advice on practical
issues for carrying out this project was very helpful. Furthermore I would like to
acknowledge Peter Verheijen for his guidance on the scientific part of my work.
During this project it was a pleasure to work with Elodie Sureau. Together we were able
to discover the exciting world of process modelling. I also would like to express my
gratitude to the following people for their assistance and collaboration in this project:
Philippe Hayot, Sorin Bildea, Deepa Rethinam and Emmanuel Lejeune.
Last but not least, my close colleagues at the Engineering Solutions department and my
family are gratefully acknowledged for supporting me during this project.
Wilma Hensen
Terneuzen, October 2005
Table of contents
Abstract ............................................................................................................................... 2
Acknowledgements.............................................................................................................. 3
Table of contents ................................................................................................................. 4
1
Introduction................................................................................................................. 6
1.1
Background and objectives ................................................................................. 6
1.2
Scope of this thesis .............................................................................................. 9
6.1
6.2
Conclusion ........................................................................................................ 53
Future research................................................................................................. 55
1 Introduction
This chapter gives a general introduction to the research performed in this thesis. After
presenting background information which led to the initialisation of this project, the
objectives are described. Next, the scope of this thesis is elaborated by describing the
research done.
simulations, due to the effort and engineering skills required to develop custom process
models. Also, equation oriented process modelling is a much more recent development
(last decade) than sequential modular flowsheet simulation, which has been in place now
for more than 20 years.
Sequential modular flowsheet simulator environments are widely used by many process
engineers, because of its ease of use and robustness to handle large scale process
simulation problems (large number of unit operations, process streams and chemical
components). However, sequential modular flowsheet simulators have its limitations as
well. One of the important limitations is the type and number of models of process unit
operations available in the model libraries. Most models in these libraries are models of
process unit operations using idealized hydrodynamics (like well-mixed) and
thermodynamic equilibrium between the fluid phases present in the process unit. Ratebased models, like multi-phase reactor models, membrane models, crystallizer models,
etc. are often lacking.
On the other hand, equation oriented process modelling tools offer the opportunity to
develop custom models of process unit operations, without the burden of putting an effort
on the numerical solution methods for the model equations. Therefore, it would be a good
idea to combine these two simulation environments. Equation oriented process modelling
tools can be used excellently to develop models of process unit operations which do not
exist or do not exist in the preferred level of detail in the model libraries of sequential
modular flowsheet simulators. After development, the custom model can then be used as
a user model block inside a sequential modular flowsheet simulator.
Besides the limitation of the type and number of models available in the model libraries
of sequential modular flowsheet simulators, several other reasons can be adduced for the
usage of custom models of process unit operations in flowsheet simulators.
Embedding of custom models in a sequential modular flowsheet simulator enhances
consistent process simulation. The current practice for simulating a unit operation present
in a process flowsheet, whose model do not exists in the model library is to use a shortcut
method to be able to mimic the mass and energy balances for this unit. In a complete
other software package the unit operation is simulated in more detail on basis of the
stream information obtained from the sequential modular flowsheet simulator. The
simulation of the process flowsheet and the unit operation in different software tools have
to run parallel and errors can easily be made. Not to mention the difference in calculation
of thermodynamic and physical properties in these tools.
Furthermore, during process development alternatives can quickly and precisely be
evaluated and optimized, if unit models with relevant level of detail are available in
sequential modular flowsheet simulators. Especially for new technology detailed unit
models are required to predict the process performance. (Academic) research groups can
often provide detailed models of process unit operations, which are developed in equation
oriented modelling tools.
The use of a custom model of process unit operation, developed in equation oriented
modelling tools, within a sequential modular flowsheet simulator, requires interfacing
between the different software programs. In the early nineties the idea was created by
academic institutions as well as by industry that an open interface for transferring data
between process simulation software of various origins would be favourable in order to
improve consistent modelling. Several CAPE-OPEN (Computer Aided Process
Engineering) projects were initiated to develop standards and prove the possibilities for
open interfaces to transfer models of process unit operations, thermodynamic and
physical property packages, and even numerical solvers, between the various process
simulation tools. This results finally in the establishment of CO-LaN. The CAPE-OPEN
Laboratories Network, CO-LaN, is a neutral and academic association supporting and
promoting the use of CAPE-OPEN standards [1]. As the major process simulation
software suppliers were involved in the CAPE-OPEN projects, implementation of CAPEOPEN standards in commercial software was straightforward. Presently, CAPE-OPEN
compliant versions of process simulation software are released. The first applications of
interfacing in process simulation are appearing.
The recent development and implementation of open interfaces for process simulation
tools resulted in the main objective of this thesis. The main objective is to:
Improve the ability to use custom models of process unit operations,
developed in equation oriented modelling tools, within a sequential
modular flowsheet simulator.
The focus is on rate-based distributed parameter custom models. The majority of process
unit operations not available in the model libraries of sequential modular flowsheet
simulators can be described more precisely by mathematical models containing variables
which are a function of the spatial position in the unit. As mentioned before, almost all
models in the sequential modular flowsheet simulators are thermodynamic equilibrium
based models. The combination of distributed parameter and rate-based characteristics is
expected to add (numerical) complexity to the custom model and its interfacing.
The existence of open interfaces for software interoperability is not the only criteria for
using a custom model within a sequential modular flowsheet simulation. For successful
implementation, the custom model also has to be applied just like any other model of a
process unit operation available in the libraries of sequential modular flowsheet
simulators. As like these models, the custom model needs to be able to handle:
any list and number of components,
any physical property method,
a large range of operation conditions, and
various equipment or design specifications.
As a consequence, a custom model of a process unit operation developed in equation
oriented modelling tools needs to be generic and robust. The interface functionalities
should also offer the possibility to future users to call this model from a library.
To refine the main objective several sub-objectives are defined, which are:
The development of a generic distributed parameter model of a gas
separation membrane unit:
To interface gPROMS and Aspen Plus, the CAPE-OPEN standards have been utilized.
For interfacing ACM and Aspen Plus, default Aspen Tech interfaces have been used.
Sequential modular
flowsheet simulator
Physical
property
package
Physical property
interface
2
B1
B2
Custom model
block
developed
in
Unit
equation oriented
model
modelling tools
interface
5
7
B3
Unit
model
interface
B4
Figure 1.1: Custom model block of a process unit operation in a sequential modular flowsheet
simulator
To study the main objective described above, a model of a gas separation membrane unit
has been developed in both gPROMS and ACM. A membrane unit has several modelling
characteristics (rate-based and distributed parameter), which makes it attractive to use as
a case study. Moreover, a model of a membrane module does not (yet) exists in the
Aspen Plus model library. Given the continuously increasing cost of oil and gas, the
separation / purification of gases at low capital and energy cost is becoming a major issue.
The same is valid for the increasing treatment requirements of process vent streams
before emitting them into the air. A membrane gas separation unit is a potential
technology for these applications. The availability of rigorous process models inside a
sequential modular flowsheet simulator will help to study the applicability of this
technology in certain cases.
After presenting in Chapter 2 the most important theory of gas separation membrane
processes, the development of the custom membrane model is described in detail in
Chapter 3. The developed custom model is also compared with experimental data and
existing simulations from literature.
Chapter 4 reported the current status of software interoperability obtained from
interfacing the developed custom membrane model with Aspen Plus. In this chapter also
work processes are developed to guide future users on interfacing:
a physical property package from Aspen Plus with gPROMS/ACM
a custom model of a process unit operation, developed in gPROMS/ACM, with
Aspen Plus
In Chapter 5 the key requirements for custom model performance in sequential modular
flowsheet simulations are further explained. Based on the current functionalities available
10
for unit model interfacing a new approach for custom model initialisation is proposed. A
potential solution on basis of the developed custom membrane model is presented.
Finally, in Chapter 6 conclusions are given for the research results obtained and possible
directions for future work are discussed.
11
Retentate
Membrane
Sweep
(optional)
Permeate
The membrane has the ability to transport one component more readily than others. The
transport rate of a component through a membrane is determined by its permeability in
the membrane and by the driving force across the membrane. The general relation for the
transport rate of component i trough a membrane is therefore given by:
J i = Qi
d (driving _ force )i Qi
= m (driving _ force )i
dz
= Qi (driving _ force )i
(2.1)
where Qi is the permeance, which is defined as the ratio of Qi , the permeability, to m , the
membrane thickness [2]. The driving force is a chemical or an electrical potential
difference across the membrane [3].
12
Large scale membrane gas separation processes emerged during the 1980s by the
development of synthetic polymeric membranes [4]. Gas separation is the separation of
gaseous fluids by using a pressure difference. Usually a sweep gas is not used, but the
permeate side of the membrane is maintained at a much lower pressure than the retentate
side. Membrane gas separation is an area in which currently considerable research is done,
and the number of applications is expanding rapidly. Major current applications of gas
separation membranes are the separation of hydrogen from nitrogen, argon and methane
in ammonia plants; the production of nitrogen from air; and the separation of carbon
dioxide from methane in natural gas operations [4]. Gas permeation must still compete
with classical separation operations like distillation at cryogenic conditions, absorption
and pressure-swing adsorption.
For process design of membrane gas separation units, there are three factors that
determine the performance of the system [5]:
The pressure ratio between the retentate and permeate side of the membrane. This
ratio is dependent on the operation conditions and on the configuration of the
retentate and permeate stream around the membrane. Section 2.2 describes the
different membrane modules used for gas separation.
The membrane selectivity, which is the ratio of the permeabilities of the different
components in the feed mixture. The membrane selectivity is determined by the
choice of the membrane material. In Section 2.3 an overview is given of the
various models used to estimate permeabilities from experimental data and to
describe the transport of components through the membrane.
The stage cut, a trade off between recovery and purity. The stage cut is defined by
the ratio of the permeate flowrate and the feed flowrate. At low stage cuts a
concentrated permeate stream is obtained, but the key component is only modest
removed from the feed stream. At high stage cuts almost complete removal of the
key component from the feed stream is obtained. However the permeate stream is
only slightly more enriched than the original feed stream, because the
concentration of the less permeable components increases. The stage cut can be
adapted during the design of a membrane system by varying the membrane area
or during its operation by changing the flowrate of the feed stream.
13
whereas the permeate flows radial toward the central collection pipe, see Figure 2.2. A
typical spiral-wound module is 0.1 to 0.3 meter in diameter and 3 meter long [2].
Figure 2.3: Hollow fibre membrane module where the feed is flowing through the fibres [4]
The packing density of a hollow fibre membrane module (500 9,000 m2/m3) is much
larger than of a spiral wound membrane module (200-800 m2/m3) [2]. As a consequence
14
the production costs of a hollow fibre membrane module is much less than the production
costs of an equivalent spiral wound module [4].
However, the hollow fibre membrane module also has several disadvantages [5]. The
membrane permeability in hollow fibre modules is often lower than in spiral wound
design. A reason is the difference in thickness of the active membrane layer (in spiral
wound modules 500 5000 and in hollow fibre design 0.1 1 m [2]). The transport
rate (Equation 2.1) is reverse proportional to the membrane thickness. This off-sets some
of the advantage that derives from the high packing density for hollow fibre design.
Besides, the pressure drop in the fibres can become seriously and the hollow fibre module
is more severe for plugging and fouling than the spiral wound module. The latter
disadvantage can be rejected, since for gaseous feed stream particulates and other
potential fouling materials can be completely and economically removed before it enters
the membrane module [4].
Today most of the gas separation membranes are formed into hollow fibre modules, with
perhaps fewer than 20% being formed into spiral wound modules [4]. Based on the need
to minimize production costs and thus also minimize the membrane area, it appears that
hollow fibre membrane modules will eventually dominate the gas separation field
completely. As a result, the model of a gas separation membrane unit, which has been
developed in this thesis, is a model of a hollow fibre membrane unit.
15
Table 2.1: Overview models to describe transport of components through a dense membrane
General relation: J i = Qi
Transport model
Solution-diffusion model [7]
d (driving _ force )i Qi
= m (driving _ force )i = Qi (driving _ force )i
dz
Characteristics
Phenomenological
model
Multi-component
system
Qi = Q i 0 e
Eai 1 1
R T T0
Driving force: gradient in chemical potential. For gas separation simplified to the
difference in partial pressure.
Ji =
Thermodynamics of irreversible
processes (TIP) [8]
Phenomenological
model
Multi-component
system
Qi
p i
Permeability: matrix with on the diagonal the permeability coefficients and on the
off-diagonal the cross term coefficients.
Driving force: gradient in chemical potential (or for gas separation gradient in
partial pressure). A flux of a component can be caused by any other driving force
in addition to its own conjugated force.
Theoretical model
Ternary system
(driving _
force )i = i , j (x j u i x i u j ) + i , M u i
As a result the fluxes are given implicitly. The component fraction is the fraction in
the membrane. Therefore also a correct solution model has to be used.
16
In literature there is not a clear consensus which is the best transport model to be used for
gas separation through dense membranes. For engineering science and process design,
phenomenological models are usually used to describe the transport of components
through the membrane. Theoretical models often require complex experiments to
determine the fundamental parameters, such as the friction coefficients in the MaxwellStefan equation. As a result, the Maxwell-Stefan equations are only used for binary or
ternary systems. The model of the membrane unit developed in this thesis has to be
applicable for multi-component systems. Since existing literature hardly provides cross
term coefficients for the TIP-equations, the solution-diffusion model has been applied to
describe the transport of components through the membrane. Besides, the solutiondiffusion model is widely accepted to predict transport of components through dense
membranes.
The transport rate of components through the membrane can also be influenced by other
effects, such as concentration polarisation. Concentration polarisation is the build-up or
depletion of species in the boundary layer or film close to the membrane due to mass
transfer resistance. However, for gas separation membrane processes concentration
polarisation is usually neglected. In Section 3.1 an explanation is given for this
assumption.
17
Table 2.2: Overview of mathematical models for gas separation membrane units in literature
Year & Author
Balance equations
Membrane characteristics
Physical properties
1986
C.Y. Pan
[10]
Viscosity calculation
is unknown.
1996
R. Rautenbach
et al.
[11]
Utilization of physical
property models and
data bases of Aspen
Plus is possible.
FORTRAN routine
incorporated in
Aspen Plus.
1999
S. Tessendorf
et al.
[12]
Unknown.
Implemented in
the equation
oriented
environment
OPTISIM.
Multiflash is used to
calculated the
properties used in the
balance equations
Model is not
interfaced.
No thermodynamic
and physical
properties are used in
the model equations.
Model developed
in HYSYS intrinsic
spreadsheet
functionality.
An Aspen Plus
physical property
package is used.
FORTRAN routine
incorporated in
Aspen Plus.
2001
J.I. Marriott
[13], [14], [15]
2002
R.A. Davis
[16]
2003
T. Brinkmann
et al.
[17]
2005
M.H.M.
Chowdhury et
al.
[18]
18
Model
interfacing
Model is not
interfaced.
In this thesis the custom model of a hollow fibre membrane module developed by
Marriott [13] is adapted. The model exists of three sub-models, two which describe the
flow on either side of the membrane and a third model which characterises the separative
properties of the membrane. For gas separation the flows on both sides of the membrane
were simulated by one-dimensional mass, momentum and energy balances along the
axial length of the membrane unit. Marriott used a physical property package from
Multiflash (from Infochem Computer Services Ltd.) to calculate the thermodynamic and
physical properties of the membrane unit.
The other models which have been developed for gas separation membrane units (Table
2.2) include many simplifications, usually in order to solve the model with an own
developed numerical algorithm. Since numerical methods are included in equations
oriented modelling tools to solve custom models, these simplifications are not needed
anymore. Marriott [13] developed the membrane model in gPROMS. The custom
membrane model described in this thesis has been developed in gPROMS as well as
ACM.
Other simplifications are made to calculate the thermodynamic and physical properties
for gas separation membrane units. If an external property package can be used,
assumptions, such as the ideal gas law, are also not needed anymore. Both Marriott [13]
and Brinkmann [17] used an external physical property package. For the custom model
developed in this thesis, a physical property package from Aspen Plus is used.
In addition, the custom membrane model developed in this thesis is exported to be used
in Aspen Plus. Rautenbach [11] and Chowdhury [18] created a custom membrane model
for implementation in an Aspen Plus simulation. However, their models are developed in
FORTRAN and needed a solution algorithm. Brinkmann [17] only mentioned that the
developed custom model can be exported to Aspen Plus, but it seems that the export
functionality was not tested.
19
20
Figure 3.1: Flow pattern in a hollow fibre membrane module (feed flows through the fibre side) [14]
The natural structure of the membrane unit in Figure 3.1 has been exploited for its
decomposition into sub-structures. The hollow fibre membrane unit is decomposed into
three sections; namely the flow through:
1. (all) fibres
2. shell side, and
3. the membrane.
Before developing the mathematical models for each sub-structure, several assumptions
are made to simplify the behaviour of the membrane unit. The assumptions are:
Considering each fibre individually is impossible and therefore the fibre bundle is
treated as a continuous radial symmetric porous medium. The fluid in the shell
side of the module flows around each fibre. Each fibre in the module has identical
specifications and the total flow through the fibres is distributed equally.
The flow of gaseous fluid through the shell side of the module is assumed to flow
parallel to the fibres. Cross current (radial) effects for the flow through the shell
side are not considered, because this makes the complete model of the gas
separation membrane unit much more complicated. The transport of components
through the membrane depends not only on the axial position, but also on the
radial position, and therefore every fibre must be considered separately depending
on its radial position in the module shell.
The pressure drop occurring at the flow entries and exits are neglected. The
pressure drops if known can easily be incorporated as parameters in the model.
It is assumed that there is no hold-up of gaseous material in the membrane itself;
the residence time compared to the flow through the fibres and shell side is very
small. Therefore the membrane can be considered as an interface between the
flows (permeate and retentate) on either side of the membrane.
21
22
The model also includes variables to calculate or specify the characteristics of a hollow
fibre membrane unit, such as the stage cut, pressure ratio and packing density.
Since the custom membrane model has to be fully embedded in an Aspen Plus flowsheet
simulation, the model makes use of an exported physical property package from Aspen
Plus to calculate thermodynamic and physical properties. The existence of physical
property interfaces between Aspen Plus and gPROMS/ACM makes this possible.
The sub-models for the flow through fibre, shell and membrane have to be connected to
present the complete model of a gas separation membrane unit. The main model contains
equations to connect the ports, defined within the sub-models, to each other. Via the port
connections information is passed on from one sub-model to another. The ports of the
sub-models describing the flow through fibre and shell side pass on the component
fractions, temperature and pressure (on every discretisation node) to the sub-model which
describe the transport of components through the membrane. This sub-model on its turn
calculates on basis of the information it gets the mass and energy fluxes through the
membrane and returns these values to the two sub-models for flow through fibre and shell
side, as shown in Figure 3.2.
Sweep
(optional)
Feed
Membrane
Flow Fibre
side
Retentate
J i, q
J i, q
Xi, P, T
Xi, P, T
Exported physical
property package
from Aspen Plus
Flow Shell
side
Permeate
Figure 3.2: The structural description of the developed custom membrane model for gas separation
One of the criteria for the performance of an exported custom model is that the model has
to be used for different equipment or design specifications in Aspen Plus. To be able to
choose an equipment or design specification in Aspen Plus, the option for the
specification should already be embedded in the custom model during its development in
the equation oriented modelling tools.
23
The developed custom membrane model includes several options for equipment and
design specifications; the user is able to make a choice on:
Feed side - The feed stream can enter on the shell side or on fibre side of the
hollow fibre membrane module. This option is embedded in the custom model by
connecting the feed stream to the port of the correct sub-model. This is schematic
shown in Figure 3.2, the feed stream can be connected to the port of the submodel describing the flow through the fibre side or to the port of the sub-model
describing the flow through the shell side. The sweep stream is then connected to
the other sub-model.
Mode of operation - The flow pattern in a hollow fibre module can be co-current
or counter-current. The direction of the sub-model for the flow through the shell
side can be inverted, as shown also in Figure 3.2. For counter-current operation,
the feed or sweep stream is connected to the port at the end of the shell sub-model.
Also the discretisation method for this sub-model has to be changed (see Section
3.2).
Usage of a sweep stream A sweep stream is usually not used for gas separation
processes. However, a sweep stream if present can easily be connected to the
custom model, as like the feed stream. If the sweep stream is not present, the
boundary conditions for the balance equations, which are otherwise given by the
sweep stream, have to be specified by the user (see Section 3.3).
Method of simulation To obtain a set of model equations which can be solved
(not under- or over-specified), values for variables and parameters have to be
specified. There are several options conceivable for the developed custom
membrane model. The most straightforward option is to assign values for the
variables describing the geometry of the unit (rating method). On basis of the
conditions of the feed (and sweep) stream and the geometry data, the outlet
conditions for the retentate and permeate stream can be calculated. However, the
geometry is not always known and for these situations the custom membrane
model can also be used (design method). A more detailed description of the rating
and design method is given in Section 3.3.
Type of membrane The type of membrane used in a hollow fibre module can be
symmetric or asymmetric. For both types the solution-diffusion theory can be
applied, however the definition of the driving force is a bit different (see Section
3.4).
24
methods (backward, forward and centred) and orthogonal collocation on finite elements
methods. The user has to specify the discretisation method (type, order and number of
discretisation intervals).
Marriott [13] preferred using the orthogonal collocation method in gPROMS to solve the
distributed membrane model. According to Marriott [13] the finite difference method is
less accurate than the orthogonal collocation on finite elements. However, for the model
of the gas separation membrane unit developed in this thesis, finite difference methods
are used to discretise the model variables. The orthogonal collocation method is not
applicable for solving the custom membrane model at large stage cuts. If more than
50% of the feed stream permeates through the membrane the model does not converge
anymore. This is not the case if a finite difference method is used. Besides, it is
recommended [19] to use finite difference methods for purely or strongly convective
systems. The balance equations for the sub-models describing the flow through the shell
side and fibres do not contain diffusive or dispersive terms, and can therefore be
considered as a convective system.
Generally for finite difference methods, one-sided finite differences should be used taken
opposite to the direction of the flow. For a set of model equations containing a
momentum balance, the pressure have to be discretised using one-sided finite differences
taken in the direction of the flow, while all the other variables are discretised using onesided finite differences opposite to the direction of the flow [19].
The developed custom model is solved for steady state applications and therefore all the
boundary conditions, including the pressure, can be given at the inlet of the flow model.
As a result, the pressure is discretised with the same finite difference method as for the
other variables.
For co-current operation, the flows through the fibres and shell side are both from left (z
= 0) to right (z = L), and the backward finite difference method is used. For countercurrent operation, the flow through the fibres is from left to right (backward difference
method), while the flow through the shell side is from right to left for which a forward
finite difference method has to be used.
The accuracy of the finite difference method can be enhanced by increasing the number
of discretisation intervals. To demonstrate this, the number of discretisation intervals for
the developed custom membrane model is increased. The accuracy can be defined by the
error in the total molar balance:
F feed
error % = 1
F
permeate + Fretentate
100%
(3.1)
The model used to calculate the error as a function of the number of discretisation
intervals is a counter-current membrane system (geometry and permeability data is given
in Section 3.4). In Table 3.1 the effect of the number of discretisation intervals on the
total molar balance error is given. As expected, the error is reduced if the number of
discretisation intervals is increased. However, by increasing the number of discretisation
intervals the model size is also increased. For a reasonable accuracy of the model, the
number of discretisation intervals is set to 50.
25
Table 3.1: Molar balance error as function of the number of discretisation intervals
Number of
discretisation
intervals
10
30
50
70
90
Feed stream
(10-5 kmol/hr)
8.00000
8.00000
8.00000
8.00000
8.00000
Retentate
(10-5 kmol/hr)
Permeate
(10-5 kmol/hr)
3.7272
3.7089
3.6918
3.6822
3.6761
4.4143
4.3584
4.3574
4.3570
4.3569
Error (%)
1.738
0.834
0.610
0.488
0.411
26
27
Figure 3.4: Model implementation: user interface Aspen Custom Modeler 2004.1/13.2
28
Table 3.2: Different variables specified for rating and design method
Rating method
Inner diameter of a fibre
Outer diameter of a fibre
Shell diameter of module
Number of fibres
Length of module
Design method
Packing density of module
Ratio of cross sectional area fibre and shell side
Membrane thickness
Membrane area
Constant to specify velocity of the feed stream
Since the membrane model is a rate-based model, the volume of the unit has to be known
for simulations. For the design method two extra variables are defined to predict the
volume of the unit, the ratio of cross sectional areas and a constant to specify the velocity
of the feed stream.
As described also in Appendix C, boundary conditions have to be given to solve the
custom membrane model. At the inlets of the sub-models describing the flow through
shell and fibre side the flowrate, pressure, temperature and component fractions have to
be specified. For the exported custom membrane model in Aspen Plus, these boundary
conditions are specified by the conditions of the feed and sweep stream connected to the
model. In equation oriented modelling tools, the Aspen Plus streams are imitated by
specifying values for the variables in the inlet ports of the custom model.
Not always a sweep stream is present, and the boundary conditions have to be specified
by the user. The boundary conditions for the temperature and component fraction of the
fictional sweep stream are set equal to the values of these variables in the feed stream.
The flowrate of the fictional sweep stream is set to a very small value, almost zero and
the pressure is defined by the operating conditions specified for the membrane unit.
After the specification of variables and boundary conditions a set of model equations for
a gas separation membrane unit is created which can be solved. This set cannot be solved
directly from the default values defined for the variables used, but several intermediate
modelling steps are required to approach the final result. This is more clearly described in
Chapter 5.
29
J i ,S =
Qi
(X
i,M
PF X i , S PS )
(3.2)
Instead of using the partial pressure of the permeate stream in the fibres, the component
fraction inside the membrane is multiplied by the pressure of the permeate stream. Pan
[10] has stated that the porous supporting layer of the membrane prevents mixing of local
permeate fluxes; the downstream concentration is independent of the bulk concentration
of the permeate stream. Operation conditions and permeance parameters are given in
Table 3.4. The Arrhenius equation for the temperature dependence of the permeability
coefficient presented in the custom model is left out of consideration for this comparison.
Since the geometry is known for this system, the rating method is used.
Table 3.3: Geometric parameters [10]
Number of fibres
20
298
15
69.64
80
0.5178
200
0.2469
21
0.1957
0.0396
11.23
284
2.95
-10
mol/m sPa)
2.84
7.70
Marriott [13] and Chowdhury [18] reported graphs showing the hydrogen purity in the
permeate stream as a function of the total product recovery (stage cut). To compare the
developed model with their graphs, the stage cut has been varied by changing the value of
the feed flowrate. In Appendix D the results obtained are given for the component
fractions in the permeate stream at different feed flowrates. Figure 3.5 and Figure 3.6
shows the stage cut versus the molar fraction of the components in the permeate stream.
There are small differences at large stage cuts between Chowdhurys [18] simulation and
the calculated results, see Figure 3.6. A reason for these small differences can be ascribed
to the accuracy of determining the results of the graphs Chowdhury [18] presented. The
graphs are scanned and with a software script tables are created from the graphs.
Summing up the scanned molar fractions of the components in the permeate stream
reported by Chowdhury gives a total fraction larger than 1.
Figure 3.5 also shows a small difference between Marriotts [13] simulation and the
simulation performed with the developed custom membrane model. This is probably due
to the difference in discretisation method Marriot [13] used for solving the set of model
equations, as described already in paragraph 3.2.1.
Despite the small difference, it can be concluded that the custom model of a gas
separation membrane unit, developed in this chapter, gives comparable results as the
custom models created by Marriott [13] and Chowdhury [18].
30
100
Experimental data cocurrent Pan
Experimental data countercurrent Pan
Simulation Marriott
Simulation Chowdhury
Calculated
96
92
88
84
80
76
30
35
40
45
50
55
60
65
Figure 3.5: Stage cut versus molar fraction H2 in the permeate stream
10
Simulation Chowdhury Ar
Simluation Chowdhury CH4
Simulation Chowdhury N2
Calculated Ar
Calculated CH4
Calculated N2
0
30
35
40
45
50
55
60
65
Figure 3.6: Stage cut versus the molar fraction of the other components in the permeate stream
In Figure 3.7 also the results for the simulation of a symmetric membrane are shown. For
an asymmetric membrane there is hardly any difference between co-current and countercurrent operation. For a symmetric membrane there is a difference, since the partial
31
pressure of the retentate side as well as of the permeate side are taken into account for
calculating the transport of components through the membrane. As expected, the fraction
of the key component (H2) in the permeate stream is larger for counter-current operation
mode than for co-current operation.
100
Calculated asymmetric
Calculated symmetric counter-current
Calculated symmetric co-current
96
92
88
84
80
76
30
35
40
45
50
55
60
65
Figure 3.7: Stage cut versus molar fraction H2 in permeate stream for symmetric and asymmetric
membrane
32
33
process. Furthermore, the advances made by research institutes and in-house specialities
cannot readily be embedded in process modelling environments.
In the early nineties the idea was created to combine process modelling components of
various origins in one process modelling environment for faster and consistent process
simulation. Two projects were initiated, partly funded by the European Community, and
required the collaboration of users (operating companies), software vendors and
academic institutions [20]:
CAPE-OPEN project (1997 - 1999): Software interoperability requires an agreed
set of interface standards. As a consequence, the objective of this project was to
develop open interface specifications enabling interoperability of process
simulation components, and to demonstrate their viability through working
prototypes.
Global CAPE-OPEN project (1999 - 2002): This project promoted the first
commercial releases of CAPE-OPEN compliant process modelling environments
and components.
The outcome of these two projects led among other things in 2001 to the establishment of
the Co-LaN organisation [21]. The Co-LaN organisation is an internationally recognised
user-driven organisation for testing and management of the CAPE-OPEN standards. The
Dow Chemical Company is also one of the members of Co-LaN.
Also major process simulation software suppliers were involved in the CAPE-OPEN
projects; therefore CAPE-OPEN (CO) compliant versions of simulation software were
released recently or will be released in the near future. The versions of Aspen Plus used
for this project (see section 4.2) are fully CO compliant. The current version of gPROMS
is CO compliant for thermodynamic and physical properties modelling components. The
Export to CAPE-OPEN functionality for developed custom models is not available in
this version. PSE provided gPROMS alpha version 3.0 for this project, which allows the
export of gPROMS models to CO compliant packages. In Figure 4.2 the work flow for
exporting custom models in gPROMS is shown.
Based on the release of CO compliant software packages, the first applications are
beginning to appear. The article by H. Pingen et al. [1] published earlier this year give a
short overview of industrial demonstrations on the functionality of the CAPE-OPEN
standards. An example related to this project is the development of a rate-based absorber
model by M. Pons in 2004 [23]. The absorber model is developed in gPROMS (alpha
34
version 3.0) using the Aspen Plus physical properties and afterwards it is used an
integrated unit operation in an Aspen Plus flowsheet.
35
Aspen Plus
Save As
BKP file
APPDF file
Properties
010101010
101010101
111100001
010110110
Modeler library
submodels
Procedures
APW file
declare
Your models
call
gpp.dll
"CH4"
"H2O"
ComponentList
Figure 4.3: Integration of physical property package from Aspen Plus in ACM [24]
Two functionalities are available in ACM to export a custom model for implementation
in Aspen Plus, namely flowsheet export and model export. The option in ACM for
flowsheet export was created in the past; at the time that the functionality of model export
didnt yet exist. An exported flowsheet embedded in Aspen Plus is less flexible than an
exported model. For an exported flowsheet it is impossible to change the list of
components, the physical property package and parameters. Therefore it is recommended
to use the functionality of model export to create an ACM user model in Aspen Plus [25].
In Aspen Plus numerical solvers are included to calculate the results of the exported
ACM model block. This is in contradiction to the gPROMS CAPE-OPEN user block (see
Figure 4.2), where the solver is included in the exported model package.
Several attempts have been made to use an ACM user block in Aspen Plus. The software
installation files of ACM contain an example of the VAM reactor. This example
simulates a gas phase tubular reactor which is part of a process for producing vinyl
acetate monomer (VAM) and shows the ability to use ACM to create custom models for
usage in Aspen Plus. Recently J.A. Jara [26] developed a custom model for a multitubular catalytic fixed-bed reactor in ACM and exported it into the flowsheet simulator.
Possible issues encountered during model interfacing are not reported.
36
Information exchange
To call a thermodynamic or physical property from the package, information needs to be
exchanged via the interface. In Figure 4.4 a schematic representation is given of the
physical property package interface, from a user point of view. The custom model has to
give information on the conditions (temperature, pressure and composition) of the phase
for which the property will be calculated. Together with this information, the user has to
include the state of the phase (gas, liquid or solid) and have to specify which property (or
procedure) is needed (see also the work processes for physical property interfacing in
37
Appendix E). As a result the physical property package returns the value of the
thermodynamic or physical property.
Equation
oriented
modelling tool
T, P, x
State of phase
Name of property
ACM: basis of property
(mass/molar)
Value of property
Aspen Plus
physical
property
package
In Table 4.1 the units are given of the variables which are exchanged between the custom
model and the physical property package. The property can be calculated on mass or
molar basis. For the CAPE-OPEN interface the properties are returned on molar basis. In
ACM the property is calculated on molar - or mass basis depending on the chosen
procedure name to call the property.
Table 4.1: Units defined for variables exchanged between model and physical property package
Temperature
Pressure
Component fraction
Basis of property
CAPE-OPEN interface
Kelvin
Pascal
mol/mol
molar
In both equation oriented modelling tools the component fraction is an array containing
the number of components. The order of the components in the array is important. The
CAPE-OPEN compliant physical property package linked to gPROMS expects to get the
components in the component fraction array in the same order as the order which is
defined in Aspen Plus when creating the package. In ACM, the order of the components
is the order of the components defined in the component list (normally alphabetical
order), which is not necessary the same as in Aspen Plus. The name of the components in
the component list of ACM is equal to the name entered for the components in Aspen
Plus when creating the property definition file.
38
energy balance. In ACM the reference state for enthalpy can be adapted (see ACM help
file on KBASE).
Port connection
In Aspen Plus model blocks are connected by streams representing the flow of mass or
energy. As like the other model blocks, Aspen Plus streams can be connected to the ports
of the custom model (see Figure 4.5 and Figure 4.6). The variables representing an Aspen
Plus material stream are in SI units. In Table 4.2 the units of these variables are given.
The ACM user block in Aspen Plus calculates in metric units (see also paragraph 3.2.2)
instead of in SI units, therefore the units of the variables in the port have to be converted,
which is done automatically. Also the CAPE-OPEN standards defined for unit model
interfacing are different from the base unit of measurements in Aspen Plus. The port
connection between Aspen Plus and the gPROMS CAPE-OPEN model block also
automatically converts the units into the units defined by the CAPE-OPEN standards and
vice versa.
For the custom model developed in gPROMS it is recommended to write the model
equations in the same units as defined by the CAPE-OPEN standards for unit model
interfacing. Software developers from Process System Enterprise Ltd. are creating an
option within the Export to CAPE-OPEN functionality, where the user can choose
between the basis (mass/molar) of the variables in the port of the custom model block
[27].
39
Aspen Plus
Definition PP
method
2
B1
B2
Definition no.
components
Input stream(s)
F, x, T, P, h
Design
specification
gPROMS
CAPE-OPEN
Output stream(s)
user block
7
B3
B4
F, x, T, P, h
Saved
variable set
gPROMS
solver routines
Aspen Plus, like other sequential modular flowsheet simulators, solves a flowsheet by
calculating for each model block the outlet conditions on basis of the information in the
feed stream(s). This applies also for the custom user block. Before exporting the custom
model, the model of the process unit operation in an equation oriented tool should be able
to solve with specified values for the variables defined in the input ports representing the
Aspen Plus stream. If differential balance equations are used in the custom model (as for
the custom membrane model), the boundary conditions are preferred to be defined by the
variables in the input ports.
In ACM it is possible to define a condition statement, which applies if a port is not
connected with a stream in Aspen Plus. For example, for the developed custom
membrane model this statement can be used to define the boundary conditions for the
fictional sweep stream, if such a stream is not connected to the user block.
Table 4.2: Units of variables in stream of Aspen Plus and port of custom model block
Flowrate
Temperature
Pressure
Specific volume
Specific enthalpy
Component fraction
CAPE-OPEN interface
mol/s
Kelvin
Pascal
*** Not exchanged ***
J/mol
mol/mol
40
Aspen Plus
Parameters
or variables
defined in
unit model
Physical
property
package
Design
specification
5
2
ACM
B1
7
B3
B2
Input stream(s)
F, x, T, P, h, V
user block
B4
Output stream(s)
F, x, T, P, h, V
Solver for
ACM block
Presolve VB
script
41
Besides, the solvers used in Aspen Plus to calculate the results for an ACM block (using
block decomposition) are far from optimal; the time required for the solve the exported
custom membrane model in Aspen plus is in the order of minutes.
Initialisation set
As mentioned in Section 3.3 the set of model equations created for the custom membrane
model cannot be solved in once, but several intermediate modelling steps are required to
approach the final results. To make it possible that also the exported model will converge
in Aspen Plus, an initialisation set is exported from ACM and gPROMS together with the
custom model. This initialisation set contains the values of all variables near the values of
the final result for a specific application.
In gPROMS a saved variable set is included in the exported model package as described
in the work process for unit model interfacing given in Appendix E.3. For the custom
membrane model developed in ACM a visual basic script (PreSolve) is created. This
PreSolve script in Aspen Plus runs just before the actual run solving the equations, and
set the values of all variables to the values defined in the script (see also the work process
for unit model interfacing in Appendix E.4).
As a consequence, the exported custom model can only be used for a very specific
application in Aspen Plus. This means also that the criterion given in Section 1.1, stating
that the exported custom model should be generic and robust, is not fulfilled. In Section
5.2 a possible solution for this problem is given.
Design specification
Variables and parameters defined in an ACM - or a gPROMS CAPE-OPEN - user block
can be connected to other parameters or variables of other model of process unit
operations in a sequential modular flowsheet simulator. A well-known example is the
design specification in Aspen Plus. For the developed plug flow model, it has been tested
to vary a variable of the user block by specifying an outlet condition. For an ACM user
block, all the variables which are originally defined in ACM can be chosen. For a
gPROMS CAPE-OPEN user block only those variables can be used which are defined as
a model attribute in the input parameter table. Currently it is only possible to included
variables in the model attribute table in gPROMS (alpha 3.0). In the final release also
parameters can be included in the model attribute table [27].
42
4.3.3 Conclusion
In the previous paragraphs several issues are reported, which were detected during the
development of the custom membrane model in equation oriented modelling tools and its
implementation as user model block in Aspen Plus. The most important issues
encountered are:
43
The exported custom membrane model can only be used for a specific application,
due to the fact that an initialisation set have to be included in the exported model
package to be able to converge the custom model in Aspen Plus.
Solvers in Aspen Plus for ACM user blocks are far from optimal (slow and not
robust). Besides it is arbitrary which solver to choose for which application.
Aspen Plus 2004.1/13.2 and gPROMS 2.3.6 and alpha 3.0 are not compatible (for
both physical property package and unit model interfacing).
Only one gPROMS CAPE-OPEN user model block can be embedded in an Aspen
Plus simulation.
Before starting with this project it was expected that a custom model of a process unit
operation developed in ACM can more readily be implemented in Aspen Plus, than a
custom model developed in gPROMS and exported as a CAPE-OPEN compatible model.
However, due to the results obtained in this section, it is difficult to compare the CAPEOPEN standards for interfacing with the Aspen Tech interfaces. Both interfaces have its
advantages and disadvantages, and they arent fully developed yet. As many issues for
software interoperability are encountered, it can be concluded that the software packages
arent ready yet for industrial application of unit model interfacing. The use of a physical
property packages from Aspen Plus in equation oriented modelling tools is better
developed and practical applicable.
44
45
Preferably, the custom models needed in a process flowsheet simulation can be used just
like the models which are available in the library of sequential modular flowsheet
simulators. Consequently, the exported custom model should be able to:
handle a wide range of process and feed conditions,
be used for different equipment and design specifications,
handle any number of components as well as different sets of components, and
handle any physical property method as available in the physical property
package used by the sequential modular flowsheet simulation software.
With other words, the custom model has to be generic, robust and proper initialisation
should be guaranteed for all cases. The use of an initialisation set based on a specific
(different) application - is not sufficient for this purpose.
Initialisation of a custom model over a broad range of operation conditions, as well as for
different applications, needs a structured approach. However, in open literature hardly
any information is found about the initialisation of custom models for process unit
operations. In some articles, issues mentioned are:
At the time of model development it is useful to be able to use parameters and
results of less detailed models. This will allow the use of consistent parameter
values and can simplify the initialisation of complex models [28].
The different versions of a model being built during a modelling project for
model initialisation, model refinement, or different application context need to be
documented together with their interrelationships [29].
Reasonable initial values are provided by hand or computed, in order to improve
initialisation and convergence of later simulation runs [30].
It seems that the initialisation of a custom model is more an engineering practice/art, than
that a systematic (academic) methodology is available.
A possible approach to initialise a custom model of a process unit operation properly is to
approach the final model step by step. These initialisation steps (or levels) have to be
chosen in such a way that the custom model can be applied for a larger range of
applications. By embedding the initialisation steps in the custom model itself, before
exporting it to a sequential modular flowsheet simulator, the future user of the exported
model will not be concerned with model initialisation. All is already taken care of by the
model developer. To shown this approach, an initialisation structure for the developed
custom membrane model is proposed and presented in the next section.
46
47
Level no.
Mass: Fi = Fin
in ACM:
Momentum: Pi = Pin
Energy: Ti = Tin
2
Fi
=0
z
ci
1 Fi
=
+ J i = 0
t
L z
Momentum: Pi = Pin
Ji,S =
Mass:
Q0i
(X
i, F
PF X i , S PS )
Ji,S =
Q0i
(X
i, F
PF X i , S PS )
Energy: Ti = Tin
3
ci
1 Fi
=
+ J i = 0
t
L z
M holdup
1 P 1 M flux
Momentum:
=
fv = 0
t
L z L z
Energy: Ti = Tin
As level 2
ci
1 Fi
=
+ J i = 0
t
L z
M holdup
1 P 1 M flux
Momentum:
=
fv = 0
t
L z L z
1 E
U
Energy:
=
+ q = 0
t
L z
As level 5
As level 2
Mass:
Mass:
Q0i
(X
i,M
PF X i , S PS )
J i, S =
Qi
(X
Q0i
(X
i, F
PF X i , M PS )
AS level 3
i, F
PF X i , S PS )
Qi
(X
i,M
PF X i , S PS )
48
Qi
(X
i,F
PF X i , M PS )
Change to
Co-current
Fibre
With
Asymmetric
8
Rating
3
3
3
3
2
3
Design
3
3
3
3
2
3
These tests demonstrate that the set of model equations cannot be solved if both pressure
and temperature profiles along the axial length of the membrane unit are taken into
account from the first initialisation level on.
For an asymmetric membrane the driving force for the transport of components through
the membrane is different than for symmetric membranes (equation 3.2). The fraction of
components inside the membrane material is included in this equation. The set of model
equations has difficulties to converge if no initial guess is given for this fraction. It is
chosen to use the transport equation of a symmetric membrane to initialise the simulation
of an asymmetric membrane.
It should be mentioned that for each test the number of discretisation intervals is
increased to examine if the critical initialisation level is indeed necessary to initialise the
set of model equation or can be left out due to a better accuracy of the numerical method.
Nevertheless, all the critical initialisation levels are still required even if the number of
discretisation intervals is increased.
Module size changes
For different applications the membrane area has to be adapted often. When the rating
method for simulation is used, the membrane area is dependent on various equipment
specifications, but can among other things be changed by adapting the length of the
module. In Table H.3 of Appendix H the results are given for the simulation (with the
49
rating method) of a membrane unit for which the length varies from very small to larger
values. If the length of the module is larger than 1.5 meters the model and its
initialisation structure are not able anymore to converge. Two reasons can be given for
this observation:
For ideal membrane systems, it is expected that the driving force for transport
through the membrane approaches zero if the length of the membrane area is
increased to infinity. However, the set of model equations do not reach
equilibrium for large systems, since a driving force for transport of component
through the membrane is always presented; the pressure drop of the permeate side
(inside fibres) decreases more than the pressure drop of the retentate side (shell
side). Increasing the length (or membrane area) causes that the pressure difference
between permeate side and retentate side will also increase and equilibrium is
never reached. Tests performed for a co-current system demonstrate this, see
Table H.4 in Appendix H. It is important to mention that hollow fibre membrane
units are commercial available till one meter.
However, for the counter-current systems tested (Table H.3 of Appendix H) such
a large pressure drop is not reached. So, another reason is more likely for the
failure in simulation of large membrane areas for counter-current systems. It is
believed that counter-current systems have difficulties to converge due to the way
of solving the set of model equations. It is tried to approach the final solution of
the simulation with very small steps for the transport of component through the
membrane, but even then the set of model equations cannot be solved. Increasing
the number of discretisation intervals helps, but if the length is increased
afterwards, the model fails again. An exact reason for this failure cannot be given,
however this proves that the proposed initialisation structure is not responsible for
the fact that the set of model equations cannot be solved for large membrane areas.
It seems that the maximum membrane area which can be simulated for the defined base
case is depended on the flowrate of the feed stream. To examine this dependence the
maximum membrane area is determined for different flowrates of the feed stream using
the design method. In Table 5.3 the results are given. It shows that the model is only
capable to converge if the stage cut is smaller than 70%. Based on the results obtained it
is recommended to use the developed custom membrane model for simulation of
membrane systems where the stage cut is smaller than 65 %.
Table 5.3: Maximum membrane area and stage cut for different flowrates of the feed stream
Flowrate
feed (mol/s)
0.028
0.139
0.208
0.278
0.247
0.417
Max. membrane
2
area (m )
2
10
15
21
26
31
Max. length
(m)
2.0
2.0
2.0
2.1
2.1
2.1
Max. stage
cut (%)
67.2
67.2
67.2
68.1
67.9
67.8
Operation changes
50
Pressure ratio
Component fraction
Temperature
1 (Feed = 70 bar,
Sweep = 69.5 bar)
0
275 K
Critical
initialisation
level
Upper bound
35 (Feed = 70 bar,
Sweep = 2 bar)
0.75
400 K
3
3
3
Critical
initialisation
level
2
3
3
It can be concluded from the test performed that the proposed initialisation structure can
be used to initialise the custom membrane model for a larger variety of specifications and
operating conditions than if the initialisation structure is not used.
51
Furthermore, it appears that the set of model equation cannot be used to simulate
membrane processes for which the stage cut is larger than 65%. More tests have to
determine the exact constraint of the stage cut and its dependence with other variables.
Also the reason for this constraint must be investigated.
52
6.1 Conclusion
Equation oriented process modelling tools (gPROMS and Aspen Custom Modeler) have
been used in this project to create a custom model of a gas separation membrane unit
operation. This custom model is exported and interfaced with the Aspen Plus flowsheet
simulator. The objective is that the custom membrane model can be used just like the
library models available in Aspen Plus: i..e they can be used for a variety of applications,
different components sets, any physical property method, and over a broad range of
operating conditions. Several conclusions can be drawn from the research performed:
Development of generic custom membrane model in gPROMS and ACM
The custom model for a gas separation membrane unit has been developed for a hollow
fibre membrane module. In gPROMS as well as in ACM the foundation has been laid for
a generic and robust custom membrane model in Aspen Plus, due to the following
software or model features:
Hierarchical model structure
The custom membrane model has been developed by connecting three submodels with each other. The sub-models represent the flow through shell side,
through fibre side and through the membrane. The flow through fibre and shell
side is assumed to be a plug flow described by one-dimensional balance equations.
The flow through the membrane is described by a transport equation using the
solution-diffusion theory.
This hierarchical model structure enhances the creation of several build-in
equipment and design specifications for which a user can chose the type of
application. Due to the hierarchical structure, the options for the flow pattern (coor counter-current), the side where the feed stream enters (shell or fibre side)
and the type of membrane (symmetric or asymmetric) are incorporated easily in
the custom membrane model by making use of selectors.
Usage external physical property package from Aspen Plus
To be able to choose any physical property method in Aspen Plus for the
calculation of thermodynamic and physical properties of the membrane unit, the
calls to a physical property package has been incorporated in the custom model
developed in the equation oriented modelling tools. The interface functionalities
for physical property packages made it practically possible to develop the custom
membrane model in gPROMS and ACM with an external package from Aspen
Plus.
Incorporated model initialisation structure
To be able to use the custom model for a broad range of operation conditions, as
well as for different applications, proper initialisation should be guaranteed for all
cases. The custom membrane model should be able to converge from the default
53
values defined for all the variables used. The language of equation oriented
modelling tools has been used to set up an automated initialisation structure for
the developed custom membrane model. This structure contains several
initialisation levels in which the complexity of the model is increased step by step.
The number of variables and equations however stays the same for each level.
Tests proved that the proposed initialisation structure for the developed custom
membrane model enables proper initialisation of the set of model equations for
different applications and a broad range of process conditions.
Interfacing and embedding of custom membrane model in Aspen Plus
The developed custom membrane model has been used to examine the software interface
functionalities and its performance in Aspen Plus.
Issues concerning the interface functionalities which were encountered during this project
are:
For gPROMS CAPE-OPEN user block
It is possible to incorporate only 1 gPROMS CAPE-OPEN user block
simultaneously in an Aspen Plus simulation, because of a limitation in the
software architecture of gPROMS (multiple processes can not run at the
same time)
Due to a different interpretation of the CAPE-OPEN standards, Aspen
Plus version 2004.1 and gPROMS version 2.3.6 or alpha 3.0 are
incompatible.
ACM user block
The numerical solver of ACM is not exported together with the set of
model equations, in contradiction to an exported gPROMS model package.
The solvers for an ACM user block are embedded in Aspen Plus. However
these solvers are not optimal; it is arbitrary which solver to choose for a
particular custom model, the solvers are very slow and not robust.
The implemented features described above for a generic custom membrane model are not
completely supported if the model is exported for use in Aspen Plus. The software
functionalities required to use the automated initialisation structure (Visual Basic script in
ACM and SCHEDULE section of PROCESS entity in gPROMS) are not supported by
the exported custom model in Aspen Plus. Therefore the values defined for the selector
of the initialisation structure must be adapted manually. Besides, for a gPROMS CAPEOPEN user block it is not possible to change values of selectors defined in a gPROMS
model, therefore the build-in options for equipment and design specification, and the
initialisation level cannot be changed in Aspen Plus.
Due to the issues encountered, it is clear that the software functionalities for unit model
interfacing, defined by CAPE-OPEN standards as well as by integrated Aspen Tech
standards, are still in its infancy. These functionalities are not sufficiently developed yet
to be used for large scale industrial practice.
54
55
56
Literature list
[1]
[2]
J.D. Seader, E.J. Henley, Separation process principles, Chapter 14, John Wiley &
Sons Inc, 1998
[3]
[4]
R.W. Baker, Future directions of membrane gas separation technology, Ind. Eng.
Chem. Res. Vol. 41, pp. 1393-1411, 2002
[5]
R.W. Baker, Membrane Technology and Applications, Second Edition, John Wiley &
Sons, Ltd., 2004
[6]
[7]
[8]
[9]
[10] C.Y. Pan, Gas separation by high-flux, asymmetric hollow-fiber membrane, AIChE
Journal, Vol. 32, No. 12, pp. 2020-2027, 1986
[13] J.I. Marriott, Detailed modelling and optimal design of membrane separation systems,
PhD Thesis, University of London, 2001
[16] R.A. Davis, Simple gas permeation and pervaporation membrane unit operation
models for process simulators, Chem. Eng. Technol., Vol. 25, No. 7, pp. 717 722,
2002
57
[18] M.H.M. Chowdhury, X. Fend, P. Douglas, E. Croiset, A new numerical approach for a
detailed mulitcomponent gas separation model and AspenPlus simulation, Chem. Eng.
Technol., Vol. 28, No. 7, pp. 773-782
[20] P.S. Banks, K.A. Irons, M.R. Woodman, Interoperability of process simulation
software, Oil & Gas Science and Technology Rev. IFP, Vol. 60, No. 4, pp. 607-616,
2005
[23] Presentation given by Michel Pons, Running a gPROMS reactive absorption model
inside Aspen Plus, PSE-User Meeting April 20-21, 2004
[24] DOW ACM/Reactions Toolkit, Training Manual, 2005 AspenTech, Aspen Technology,
Inc.
[30] B.A. Foss, B. Lohmann, W. Marquardt, A field study of the industrial modeling
process, J. Proc. Cont., Vol. 8, No. 5&6, pp. 325-338, 1998
58
Nomenclature
Across
m2
Amembrane
Membrane area
m2
ci
mol/m3
Dinner
Douter
Dshell
E
E ai
Energy flux
J/s
J/mol
Fi
mol/m2/s
Ffeed
mol/s
Fpermeate
mol/s
Ftotal
mol/m2/s
fv
Friction factor
Pa/m = kg/m2s2
J/mol
Ji
Frictional parameter
m2
Module length
Mflux
Momentum flux
kg/m2/sm/s
Mholdup
Momentum holdup
kg/m3m/s
Mweight
Molar weight
10-3 kg/mol
Number of fibres
pi
Pa or bar
Pressure
Pa or bar
Pfeed
Pa or bar
Psweep
Pa or bar
q
Qi
J/m2s
Permeability of component i
Various
Qi
Permeance of component i
Various
Qi 0
Various
Qi , j
Various
J/mol/K
Time
59
Temperature
T0
Standard temperature
Tretentate
ui or uj
Velocity of component i or j
m/s
Internal energy
J/m3
Velocity
m/s
Xi
mol/mol
Greek symbols
Geometric factor
1/m
Membrane thickness
Pressure ratio
Stage cut
unit
i, j
i ,M
Viscosity
Pas
mol/m3
Packing density
m2/m3
Ns/mol/m
Ns/mol/m
Subscripts
F
Fibre side
Component i
Component j
Inside membrane
Shell side
60
VF = Across , F L
(A.1)
VS = Across , S L
(A.2)
F =
Amembrane
N VF
(A.3)
S =
Amembrane
VS
(A.4)
Membrane characteristics
Stage-cut
F permeate
(A.5)
F feed
Pressure ratio
Pfeed
(A.6)
Psweep
Packing density
unit =
Amembrane
(Across,S + Across,F )L
(A.7)
61
Across , F N
(A.8)
Across.S
Friction factors
f v,F =
f v,S =
F vF
KF
S vS
KS
with K F =
2
Dinner
32
(A.9)
with K S = 1 10 11
(A.10)
1
2
Across , F = Dinner
4
(A.11)
1
1
2
2
Across , S = Dshell
N Douter
4
4
(A.12)
Amembrane = NDinner L
(A.13)
m = Douter Dinner
(A.14)
(A.15)
Dinner = 100 10 6
(A.16)
Douter = 1
(A.17)
Dshell = 1
(A.18)
62
A.2 Plug flow model for flow through fibre and shell side
Component balance
ci
1 Fi
=
+ J i
t
L z
z (0,1] or z [0,1)
(A.19)
where:
Ftotal = Fi
(A.20)
Fi = vci
(A.21)
Fi = X i Ftotal
(A.22)
= ci
(A.23)
= f (T , P, X i )
(A.24)
Momentum balance
M holdup
t
1 P 1 M flux
fv
L z L z
z (0,1] or z [0,1)
(A.25)
where:
M holdup = M weight v
(A.26)
(A.27)
= f (T , P, X i )
(A.28)
Energy balance
U
1 E
=
+ q
t
L z
z (0,1] or z [0,1)
(A.29)
where:
U = H P
(A.30)
63
E = Ftotal H
(A.31)
H = f (T , P, X i )
(A.32)
Boundary conditions
Ftotal ,in = Ftotal
or
or
X i ,in = X i
Pin = P z =0
or
Pin = P z =1
(A.31)
Tin = T
or
Tin = T
(A.32)
X i ,in = X i
z =0
z =0
z =0
z =1
64
z =1
z =1
(A.29)
(A.30)
Qi
(X
i,F
PF X i , S PS )
(A.33)
Feed = shell:
J i, S =
Feed = fibre:
J i, S =
Qi
(X
i, M
PF X i , S PS )
(A.34)
Qi
(X
i, F
PF X i , M PS )
(A.35)
m
m
where:
J i,F = J i,S
X i ,M =
(A.36)
Ji
Ji
(A.37)
Qi = Qi 0 e
E ai
1
1
R Tretentate T0
(A.38)
q S = J i, S H S
(A.39)
q F = J i , S H F
(A.40)
H S = f (Tretentate , PS , X i ,M )
(A.41)
H F = f (Tretentate , PF , X i , M )
(A.42)
where:
65
66
shell_diameter
AS length
# (Inner) shell diameter of membrane module [m]
no_of_fibers
AS no_type
# Number of fibers in membrane module [-]
membrane_area
AS area
# Total membrane area of module [m2]
membrane_thickness
AS length
# Membrane thickness [m]
#------------------------------------------------------------------------------------------------------------------------------------# *** Membrane characteristics ***
stage_cut
AS no_type
# Stage cut (flowrate permeate / flowrate feed)
pressure_ratio
AS no_type
# Pressure ratio (pressure feed / pressure sweep)
packing_density
AS no_type
# Packing density (membrane area / total volume) [m2/m3]
ratio_cross_area
AS no_type
# Ratio cross area fiber to shell side
#------------------------------------------------------------------------------------------------------------------------------------# *** Fricton constants ***
shell_fr_constant
AS no_type
# Friction parameter for shell side
fiber_fr_constant
AS no_type
# Friction parameter for fiber side
#------------------------------------------------------------------------------------------------------------------------------------# *** Auxiliary variable ***
feed_rho
AS molar_density
# Molar density of feed stream [mol/m3]
constant_velocity
AS no_type
# Constant for velocity of feed stream [m/s]
#=====================================================================================================================================
SELECTOR
run_mode
AS ( CoCurrent, CounterCurrent )
feed_side
AS ( Shell, Fiber )
sim_mode
AS ( Level_1, Level_2, Level_3, Level_4, Level_5 )
membr_type
AS ( Asymmetric , Symmetric )
method
AS ( Rating, Design )
#=====================================================================================================================================
SET
no_components
:= phys_prop.NumberOfComponents;
axial
:= [BFDM, 2, no_of_nodes];
#=====================================================================================================================================
TOPOLOGY
CASE feed_side OF
WHEN shell:
feed
= shell_side.input;
shell_side.output
= retentate;
sweep
= fiber_side.input;
fiber_side.output
= permeate;
WHEN fiber:
feed
= fiber_side.input;
fiber_side.output
= retentate;
sweep
= shell_side.input;
shell_side.output
= permeate;
END
fiber_side.info_transport
= membrane.fiber_info;
membrane.shell_info
= shell_side.info_transport;
#=====================================================================================================================================
67
EQUATION
# *** Geometric variables ***
# Volume fiber and shell side
fiber_side.volume = fiber_side.cross_area * length;
shell_side.volume = shell_side.cross_area * length;
# Geometric parameter B for fiber and shell side (ratio of membrane surface area to volume)
fiber_side.B = membrane_area / no_of_fibers / fiber_side.volume;
shell_side.B = membrane_area / shell_side.volume;
#------------------------------------------------------------------------------------------------------------------------------------# *** Membrane characteristics ***
stage_cut = permeate.mass_flowrate / feed.mass_flowrate;
pressure_ratio = feed.pressure / sweep.pressure;
(shell_side.cross_area + fiber_side.cross_area) * length * packing_density = membrane_area;
fiber_side.cross_area * no_of_fibers = shell_side.cross_area * ratio_cross_area;
#------------------------------------------------------------------------------------------------------------------------------------# *** Friction factors ***
fiber_fr_constant
= inner_diameter^2/32;
shell_fr_constant
= 1e-11;
FOR z:=0 TO 1 DO
fiber_side.fr_factor(z) * fiber_fr_constant = fiber_side.viscosity(z) * fiber_side.velocity(z);
shell_side.fr_factor(z) * shell_fr_constant = shell_side.viscosity(z) * shell_side.velocity(z);
END
#------------------------------------------------------------------------------------------------------------------------------------# *** Auxiliary equations to specify velocity for feed stream ***
feed_rho = phys_prop.VapourDensity(feed.temperature,feed.pressure,feed.mass_fraction);
CASE feed_side OF
WHEN fiber:
feed.mass_flowrate = feed_rho * constant_velocity * no_of_fibers * fiber_side.cross_area;
WHEN shell:
feed.mass_flowrate = feed_rho * constant_velocity * shell_side.cross_area;
END
#------------------------------------------------------------------------------------------------------------------------------------# *** Equations for rating or design method ***
CASE method OF
WHEN rating:
fiber_side.cross_area = 1/4 * pi * inner_diameter^2;
shell_side.cross_area = 1/4 * pi * shell_diameter^2 - no_of_fibers * 1/4 * pi * outer_diameter^2 ;
membrane_area
= no_of_fibers * pi * inner_diameter * length;
membrane_thickness = outer_diameter - inner_diameter;
WHEN design:
no_of_fibers
= 1;
inner_diameter
= 100e-6;
outer_diameter
= 1;
shell_diameter
= 1;
END
#-------------------------------------------------------------------------------------------------------------------------------------
68
69
shell_side.fraction_mol(,1) = shell_side.input.mass_fraction;
shell_side.temperature(1) = shell_side.input.temperature;
shell_side.pressure(1) = shell_side.input.pressure;
shell_side.spec_enth_mol(1) = shell_side.input.mass_specific_enthalpy;
# Port connections at z = 0
shell_side.output.mass_flowrate = - shell_side.flux_mol_total(0) * shell_side.cross_area;
shell_side.output.mass_fraction = shell_side.fraction_mol(,0);
shell_side.output.temperature = shell_side.temperature(0);
shell_side.output.mass_specific_enthalpy = shell_side.spec_enth_mol(0);
shell_side.output.pressure = shell_side.pressure(0);
END
#------------------------------------------------------------------------------------------------------------------------------------# *** Connection of variables ***
shell_side.length
= length;
fiber_side.length
= length;
membrane.membrane_thickness = membrane_thickness;
#=====================================================================================================================================
70
71
momentum_flux
AS DISTRIBUTION(axial)
OF momentum_flow
# Momentum flux [kgm/s2]
viscosity
AS DISTRIBUTION(axial)
OF viscosity
# Viscosity [Pa.s] = [kg/m/s]
fr_factor
AS DISTRIBUTION(axial)
OF no_type
# Friction factor [Pa/m = kg/m2/s2]
#------------------------------------------------------------------------------------------------------------------------------------# *** Variables for energy balance ***
temperature
AS DISTRIBUTION(axial)
OF temperature
# Temperature [K]
spec_enth_mol
AS DISTRIBUTION(axial)
OF molar_specific_enthalpy
# Molar specific enthalpy [J/mol]
energy_holdup
AS DISTRIBUTION(axial)
OF volume_energy
# Holdup of energy [J/m3]
energy_flux
AS DISTRIBUTION(axial)
OF energy_rate
# Energy flux [J/s]
energy_flux_membr
AS DISTRIBUTION(axial)
OF heat_flux
# Energy flux through membr [J/m2/s]
#------------------------------------------------------------------------------------------------------------------------------------# *** Auxiliary variables ***
mol_weight
AS DISTRIBUTION(no_components,axial)
OF molecular_weight
# Molecular weight of component i [kg/kmol]
mol_weight_mix
AS DISTRIBUTION(axial)
OF molecular_weight
# Molecular weight of mixture [kg/kmol]
#=====================================================================================================================================
SELECTOR
sim_mode
AS ( Level_1, Level_2, Level_3, Level_4, Level_5 )
#=====================================================================================================================================
EQUATION
# *** Balance equeations ***
FOR z:=0|+ TO 1 DO
(1/flow_scale) * flux_mol_total(z) = (1/flow_scale) * SIGMA(flux_mol(,z));
CASE sim_mode OF
WHEN level_1:
flux_mol(,z) = flux_mol(,0);
pressure(z) = pressure(0);
temperature(z) = temperature(0);
WHEN level_2:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
pressure(z) = pressure(0);
temperature(z) = temperature(0);
WHEN level_3:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
0 = - 1/length * PARTIAL(pressure(z),axial) - 1/length * PARTIAL(momentum_flux(z),axial) - fr_factor(z);
temperature(z) = temperature(0);
WHEN level_4:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
0 = - 1/length * PARTIAL(pressure(z),axial) - 1/length * PARTIAL(momentum_flux(z),axial) - fr_factor(z);
0 = - 1/length * PARTIAL(energy_flux(z),axial) + B * energy_flux_membr(z);
WHEN level_5:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
0 = - 1/length * PARTIAL(pressure(z),axial) - 1/length * PARTIAL(momentum_flux(z),axial) - fr_factor(z);
0 = - 1/length * PARTIAL(energy_flux(z),axial) + B * energy_flux_membr(z);
END
END
# ------------------------------------------------------------------------------------------------------------------------------------
72
73
74
momentum_flux
AS DISTRIBUTION(axial)
OF momentum_flow
# Momentum flux [kgm/s2]
viscosity
AS DISTRIBUTION(axial)
OF viscosity
# Viscosity [Pa.s] = [kg/m/s]
fr_factor
AS DISTRIBUTION(axial)
OF no_type
# Friction factor [Pa/m = kg/m2/s2]
#------------------------------------------------------------------------------------------------------------------------------------# *** Variables for energy balance ***
temperature
AS DISTRIBUTION(axial)
OF temperature
# Temperature [K]
spec_enth_mol
AS DISTRIBUTION(axial)
OF molar_specific_enthalpy
# Molar specific enthalpy [J/mol]
energy_holdup
AS DISTRIBUTION(axial)
OF volume_energy
# Holdup of energy [J/m3]
energy_flux
AS DISTRIBUTION(axial)
OF energy_rate
# Energy flux [J/s]
energy_flux_membr
AS DISTRIBUTION(axial)
OF heat_flux
# Energy flux through membr [J/m2/s]
#------------------------------------------------------------------------------------------------------------------------------------# *** Auxiliary variables ***
mol_weight
AS DISTRIBUTION(no_components,axial)
OF molecular_weight
# Molecular weight of component i [kg/kmol]
mol_weight_mix
AS DISTRIBUTION(axial)
OF molecular_weight
# Molecular weight of mixture [kg/kmol]
#=====================================================================================================================================
SELECTOR
sim_mode
AS ( Level_1, Level_2, Level_3, Level_4, Level_5 )
#=====================================================================================================================================
SET
axial := [FFDM, 2, no_of_nodes];
#=====================================================================================================================================
EQUATION
# *** Balance equeations ***
FOR z:=0| TO 1|- DO
(1/flow_scale) * flux_mol_total(z) = (1/flow_scale) * SIGMA(flux_mol(,z));
CASE sim_mode OF
WHEN level_1:
flux_mol(,z) = flux_mol(,1);
pressure(z) = pressure(1);
temperature(z) = temperature(1);
WHEN level_2:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
pressure(z) = pressure(1);
temperature(z) = temperature(1);
WHEN level_3:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
0 = - 1/length * PARTIAL(pressure(z),axial) - 1/length * PARTIAL(momentum_flux(z),axial) - fr_factor(z);
temperature(z) = temperature(1);
WHEN level_4:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
0 = - 1/length * PARTIAL(pressure(z),axial) - 1/length * PARTIAL(momentum_flux(z),axial) - fr_factor(z);
0 = - 1/length * PARTIAL(energy_flux(z),axial) + B * energy_flux_membr(z);
WHEN level_5:
0 = - 1/length * PARTIAL(flux_mol(,z),axial) + B * flux_mol_membr(,z);
0 = - 1/length * PARTIAL(pressure(z),axial) - 1/length * PARTIAL(momentum_flux(z),axial) - fr_factor(z);
0 = - 1/length * PARTIAL(energy_flux(z),axial) + B * energy_flux_membr(z);
75
END
END
# -----------------------------------------------------------------------------------------------------------------------------------# *** Auxiliary equations ***
FOR z:=0 TO 1 DO
(1/flow_scale) * flux_mol(,z) = (1/flow_scale) * velocity(z) * conc_mol(,z);
(1/flow_scale) * flux_mol(,z) = (1/flow_scale) * fraction_mol(,z) * flux_mol_total(z);
dens_mol(z) = SIGMA(conc_mol(,z));
(1/pressure_scale) * momentum_holdup(z) = (1/pressure_scale) * dens_mol(z) * mol_weight_mix(z) * 1e-3 * velocity(z);
(1/pressure_scale) * momentum_flux(z) = (1/pressure_scale) * flux_mol_total(z) * mol_weight_mix(z) * 1e-3 * velocity(z);
(1/energy_scale) * energy_holdup(z) = (1/energy_scale) * ( dens_mol(z) * spec_enth_mol(z) - pressure(z) );
(1/energy_scale) * energy_flux(z) = (1/energy_scale) * flux_mol_total(z) * spec_enth_mol(z);
END
# -----------------------------------------------------------------------------------------------------------------------------------# *** Call for physical properties ***
FOR z:=0 TO 1 DO
mol_weight(,z) = phys_prop.MolecularWeight();
mol_weight_mix(z) = SIGMA(mol_weight(,z) * fraction_mol(,z));
dens_mol(z) = phys_prop.VapourDensity(temperature(z),pressure(z),fraction_mol(,z));
viscosity(z) = phys_prop.VapourViscosity(temperature(z),pressure(z),fraction_mol(,z));
END
FOR z:=0 TO 1 DO
spec_enth_mol(z) = phys_prop.VapourEnthalpy(temperature(z),pressure(z),fraction_mol(,z));
END
#=====================================================================================================================================
76
77
EQUATION
FOR z:= 0 TO 1 DO
#------------------------------------------------------------------------------------------------------------------------------------# *** Component fractions in membrane ***
fraction_mol_membr(,z) * SIGMA ( ABS(shell_info.flux_mol_membr(,z)) ) = ABS (shell_info.flux_mol_membr(,z));
#------------------------------------------------------------------------------------------------------------------------------------# *** Enthalpy of mass flux through membrane and permeability (Arrhenius funtion) ***
CASE feed_side OF
WHEN shell:
(1/1e-14) * permeability(,z) = (1/1e-14) * permeability0 * exp( - activation_energy / R * ( 1 / shell_info.temperature(z) - 1 / temperature0 )) ;
spec_enth_mol_fiber(z) = phys_prop.VapourEnthalpy(shell_info.temperature(z),fiber_info.pressure(z),fraction_mol_membr(,z));
spec_enth_mol_shell(z) = phys_prop.VapourEnthalpy(shell_info.temperature(z),shell_info.pressure(z),fraction_mol_membr(,z));
WHEN fiber:
(1/1e-14) * permeability(,z) = (1/1e-14) * permeability0 * exp( - activation_energy / R * ( 1 / fiber_info.temperature(z) - 1 / temperature0 )) ;
spec_enth_mol_fiber(z) = phys_prop.VapourEnthalpy(fiber_info.temperature(z),fiber_info.pressure(z),fraction_mol_membr(,z));
spec_enth_mol_shell(z) = phys_prop.VapourEnthalpy(fiber_info.temperature(z),shell_info.pressure(z),fraction_mol_membr(,z));
END
#------------------------------------------------------------------------------------------------------------------------------------# *** Molar and energy flux through membrane: connection between two sides ***
(1/flow_scale) * fiber_info.flux_mol_membr(,z) = - (1/flow_scale) * shell_info.flux_mol_membr(,z);
#------------------------------------------------------------------------------------------------------------------------------------# *** Molar flux through membrane ***
CASE sim_mode OF
WHEN level_1:
shell_info.flux_mol_membr(,z) = 0;
WHEN level_2:
(1/flow_scale) * shell_info.flux_mol_membr(,z) = (1/flow_scale) * permeability0 / membrane_thickness * ( fiber_info.fraction_mol(,z) * fiber_info.pressure(z) - shell_info.fraction_mol(,z)
* shell_info.pressure(z));
WHEN level_3:
CASE membr_type OF
WHEN Symmetric:
(1/flow_scale) * shell_info.flux_mol_membr(,z) = (1/flow_scale) * permeability0 / membrane_thickness * ( fiber_info.fraction_mol(,z) * fiber_info.pressure(z) shell_info.fraction_mol(,z) * shell_info.pressure(z));
WHEN Asymmetric:
CASE feed_side OF
WHEN shell:
(1/flow_scale) * shell_info.flux_mol_membr(,z) = (1/flow_scale) * permeability0 / membrane_thickness * ( fraction_mol_membr(,z) * fiber_info.pressure(z) shell_info.fraction_mol(,z) * shell_info.pressure(z));
WHEN fiber:
(1/flow_scale) * shell_info.flux_mol_membr(,z) = (1/flow_scale) * permeability0 / membrane_thickness * ( fiber_info.fraction_mol(,z) * fiber_info.pressure(z) fraction_mol_membr(,z) * shell_info.pressure(z));
END
END
WHEN level_4:
CASE membr_type OF
WHEN Symmetric:
78
79
PROCESS entity
UNIT
MembraneUnit
AS MembraneUnit
SET
MembraneUnit.phys_prop := "CapeOpenThermo::(PS)ATCOProperties.COPropertySystem.1<CompMixt>";
ASSIGN
WITHIN MembraneUnit DO
Feed.mass_flowrate
Feed.mass_fraction
Feed.Temperature
Feed.Pressure
:= 0.1/3.6;
:= [0.50,0.25,0.20,0.05];
:= 298;
:= 70e5;
Sweep.mass_flowrate
Sweep.mass_fraction
Sweep.Temperature
Sweep.Pressure
:= 1e-10/3.6;
:= [0.50,0.25,0.20,0.05];
:= 298;
:= 10e5;
membrane.permeability0(1)
membrane.permeability0(2)
membrane.permeability0(3)
membrane.permeability0(4)
membrane.activation_energy(1)
membrane.activation_energy(2)
membrane.activation_energy(3)
membrane.activation_energy(4)
membrane.temperature0
:= 3.408e-12;
:= 3.54e-14;
:= 3.408e-14;
:= 9.24e-14;
:= 10000;
:= 10000;
:= 10000;
:= 10000;
:= 298.15;
# Rating method
#inner_diameter
#outer_diameter
#shell_diameter
#no_of_fibers
#length
# Design method
packing_density
ratio_cross_area
membrane_thickness
membrane_area
constant_velocity
END
:= 80e-6;
:= 200e-6;
:= 0.075;
:= 50000;
:= 0.5;
:= 4500;
:= 0.1;
:= 100e-6;
:= 2;
:= 0.05;
SELECTOR
80
MembraneUnit.method
MembraneUnit.run_mode
MembraneUnit.feed_side
MembraneUnit.membrane.feed_side
MembraneUnit.membrane.membr_type
MembraneUnit.shell_side.sim_mode
MembraneUnit.fiber_side.sim_mode
MembraneUnit.membrane.sim_mode
:= MembraneUnit.Design;
:= MembraneUnit.CounterCurrent;
:= MembraneUnit.shell;
:= MembraneUnit.membrane.shell;
:= MembraneUnit.membrane.symmetric;
:= MembraneUnit.Shell_side.level_1;
:= MembraneUnit.Fiber_side.level_1;
:= MembraneUnit.membrane.level_1;
SCHEDULE
SEQUENCE
SWITCH
MembraneUnit.shell_side.sim_mode := MembraneUnit.shell_side.level_2;
MembraneUnit.fiber_side.sim_mode := MembraneUnit.fiber_side.level_2;
MembraneUnit.membrane.sim_mode := MembraneUnit.membrane.level_2;
END
SWITCH
MembraneUnit.shell_side.sim_mode := MembraneUnit.shell_side.level_3;
MembraneUnit.fiber_side.sim_mode := MembraneUnit.fiber_side.level_3;
MembraneUnit.membrane.sim_mode := MembraneUnit.membrane.level_3;
END
SWITCH
MembraneUnit.shell_side.sim_mode := MembraneUnit.shell_side.level_4;
MembraneUnit.fiber_side.sim_mode := MembraneUnit.fiber_side.level_4;
MembraneUnit.membrane.sim_mode := MembraneUnit.membrane.level_4;
END
SWITCH
MembraneUnit.shell_side.sim_mode := MembraneUnit.shell_side.level_5;
MembraneUnit.fiber_side.sim_mode := MembraneUnit.fiber_side.level_5;
MembraneUnit.membrane.sim_mode := MembraneUnit.membrane.level_5;
END
END
81
82
membrane
as Transport;
fiber_side
as Plugflow;
shell_side
as Plugflow;
//==============================================================================================================================================
// VARIABLE DEFINITION
// *** Geometric variables ***
length
as length;
// Length of fibers [m]
inner_diameter
as length;
// Inner diameter of 1 fiber [m]
outer_diameter
as length;
// Outer diameter of 1 fiber [m]
shell_diameter
as length;
// (Inner) shell diameter of membrane module [m]
no_of_fibers
as notype;
// Number of fibers in membrane module [-]
membrane_area
as area;
// Total membrane area of module [m2]
membrane_thickness
as length;
// Membrane thickness [m]
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Membrane characteristics ***
stage_cut
as notype;
// Stage cut (flowrate permeate / flowrate feed)
pressure_ratio
as notype;
// Pressure ratio (pressure feed / pressure sweep) [m2/m3]
packing_density
as notype;
// Packing density (membrane area / total volume)
ratio_cross_area
as notype;
// Ratio cross area fiber to shell side
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Friction constants ***
shell_fr_constant
as notype;
// Friction parameter for shell side
fiber_fr_constant
as notype;
// Friction parameter for fiber side
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Auxiliary variables ***
sweep_rho
as dens_mol;
// Molar density of sweep stream [mol/m3]
feed_rho
as dens_mol;
// Molar density of feed stream [mol/m3]
constant_velocity
as notype;
// Constant for velocity of feed stream [m/s]
//==============================================================================================================================================
// EQUATIONS
// *** Topology: connection of the submodels ***
If feed_side == "Shell" then
LINK feed
AND shell_side.import;
LINK sweep
AND fiber_side.import;
LINK retentate
AND shell_side.export;
LINK permeate
AND fiber_side.export;
elseif feed_side == "Fiber" then
LINK feed
AND fiber_side.import;
LINK sweep
AND shell_side.import;
LINK retentate
AND fiber_side.export;
LINK permeate
AND shell_side.export;
Endif
CONNECT fiber_side.info_transport
CONNECT fiber_side.result_transport
CONNECT shell_side.info_transport
AND membrane.fiber_info;
AND membrane.fiber_result;
AND membrane.shell_info;
83
CONNECT shell_side.result_transport
AND membrane.shell_result;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Boundary conditions if sweep stream is not connected to membrane model block ***
If not sweep.isconnected then
sweep.F.spec
: fixed;
sweep.F.value
: 1e-10;
sweep.P.spec
: fixed;
sweep.P.value
: 11.23;
sweep.T.spec
: fixed;
sweep.T.value
: feed.T.value;
sweep.Z(componentlist).spec
: fixed;
sweep.Z(componentlist).value
: feed.F.value;
call(sweep.h) = pEnth_Mol_Vap (sweep.T,sweep.P,sweep.Z);
call(sweep_rho) = pDens_Mol_Vap (sweep.T,sweep.P,sweep.Z);
sweep.V * sweep_rho = 1;
Endif
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Equations for geometric variables ***
// Volume shell and fibre side
fiber_side.volume_ = fiber_side.cross_area * length;
shell_side.volume_ = shell_side.cross_area * length;
// Geometric parameter B (ratio of membrane surface area to volume)
fiber_side.B = membrane_area / no_of_fibers / fiber_side.volume_;
shell_side.B = membrane_area / shell_side.volume_;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Membrane characteristics ***
stage_cut = permeate.F / feed.F;
pressure_ratio = feed.P / sweep.P;
(shell_side.cross_area + fiber_side.cross_area) * length * packing_density = membrane_area;
fiber_side.cross_area * no_of_fibers = shell_side.cross_area * ratio_cross_area;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Fiction factors
fiber_fr_constant = inner_diameter^2 / 32;
shell_fr_constant = 1e-11;
For z in Nset do
fiber_side.fr_factor(z) * fiber_fr_constant = fiber_side.viscosity_(z) * cP_to_Pas * fiber_side.velocity_(z);
shell_side.fr_factor(z) * shell_fr_constant = shell_side.viscosity_(z) * cP_to_Pas * shell_side.velocity_(z);
Endfor
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Auxiliary equations to specify velocity for feed stream ***
call(feed_rho) = pDens_Mol_Vap (feed.T,feed.P,feed.Z);
If feed_side == "Fiber" then
feed.F = feed_rho * constant_velocity * hr_to_s * fiber_side.cross_area;
elseif feed_side == "Shell" then
feed.F = feed_rho * constant_velocity * hr_to_s * shell_side.cross_area;
Endif
84
: fixed;
: 4500;
: fixed;
: 0.1;
: fixed;
: 100e-6;
: fixed;
: 5;
: fixed;
: 0.05;
: fixed;
: 1;
: fixed;
: 100e-6;
: fixed;
: 1;
: fixed;
: 1;
Endif
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Connection between plug flow models and transport model***
For z in Nset do
// for fiber side:
fiber_side.fraction_mol(componentlist)(z) = fiber_side.info_transport.fraction_mol(componentlist)(z);
fiber_side.pressure_(z) = fiber_side.info_transport.pressure_(z);
85
fiber_side.temperature_(z) = fiber_side.info_transport.temperature_(z);
(1/flow_scale) * fiber_side.flux_mol_membr(componentlist)(z) = (1/flow_scale) * fiber_side.result_transport.flux_mol_membr(componentlist)(z);
(1/flow_scale) * fiber_side.energy_flux_membr(z) = (1/flow_scale) * fiber_side.result_transport.energy_flux_membr(z);
// for shell side:
shell_side.fraction_mol(componentlist)(z) = shell_side.info_transport.fraction_mol(componentlist)(z);
shell_side.pressure_(z) = shell_side.info_transport.pressure_(z);
shell_side.temperature_(z) = shell_side.info_transport.temperature_(z);
(1/flow_scale) * shell_side.flux_mol_membr(componentlist)(z) = (1/flow_scale) * shell_side.result_transport.flux_mol_membr(componentlist)(z);
(1/flow_scale) * shell_side.energy_flux_membr(z) = (1/flow_scale) * shell_side.result_transport.energy_flux_membr(z);
Endfor
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Connection between model ports and plug flow models ***
// for fiber side
fiber_side.axial.DiscretizationMethod : "BFD2" ;
fiber_side.axial.SpacingPreference: 1/no_of_nodes;
fiber_side.NsetMod : [axial.interior + axial.endnode];
// Port connections at z = 0
(1/flow_scale) * fiber_side.import.F = (1/flow_scale) * fiber_side.flux_mol_total.value(0) * fiber_side.cross_area * no_of_fibers ;
fiber_side.import.Z = fiber_side.fraction_mol.value(0);
fiber_side.import.T = fiber_side.temperature_.value(0);
fiber_side.import.P = fiber_side.pressure_.value(0);
fiber_side.import.h = fiber_side.spec_enth_mol.value(0);
fiber_side.import.V * fiber_side.dens_mol_.value(0) = 1;
// Port connections at z = 1
(1/flow_scale) * fiber_side.export.F = (1/flow_scale) * (fiber_side.import.F - no_of_fibers * (fiber_side.flux_mol_total.value(0) fiber_side.flux_mol_total.value(axial.endnode)) * fiber_side.cross_area);
fiber_side.export.Z = fiber_side.fraction_mol.value(axial.endnode);
fiber_side.export.T = fiber_side.temperature_.value(axial.endnode);
fiber_side.export.P = fiber_side.pressure_.value(axial.endnode);
fiber_side.export.h = fiber_side.spec_enth_mol.value(axial.endnode);
fiber_side.export.V * fiber_side.dens_mol_.value(axial.endnode) = 1;
// for shell side
If run_mode == "CoCurrent" then
shell_side.axial.DiscretizationMethod: "BFD2" ;
shell_side.axial.SpacingPreference: 1/no_of_nodes;
shell_side.NsetMod : [axial.interior + axial.endnode];
// Port connections at z = 0
(1/flow_scale) * shell_side.import.F = (1/flow_scale) * shell_side.flux_mol_total.value(0) * shell_side.cross_area;
shell_side.import.Z = shell_side.fraction_mol.value(0);
shell_side.import.T = shell_side.temperature_.value(0);
shell_side.import.P = shell_side.pressure_.value(0);
shell_side.import.h = shell_side.spec_enth_mol.value(0);
shell_side.import.V * shell_side.dens_mol_.value(0) = 1;
// Port connections at z = 1
(1/flow_scale) * shell_side.export.F = (1/flow_scale) * shell_side.flux_mol_total.value(axial.endnode) * shell_side.cross_area;
shell_side.export.Z = shell_side.fraction_mol.value(axial.endnode);
86
shell_side.export.T = shell_side.temperature_.value(axial.endnode);
shell_side.export.P = shell_side.pressure_.value(axial.endnode);
shell_side.export.h = shell_side.spec_enth_mol.value(axial.endnode);
shell_side.export.V * shell_side.dens_mol_.value(axial.endnode) = 1;
elseif run_mode == "Countercurrent" then
shell_side.axial.DiscretizationMethod: "FFD2" ;
shell_side.axial.SpacingPreference: 1/no_of_nodes;
shell_side.NsetMod : [0 + axial.interior];
// Port connections at z = 1
(1/flow_scale) * shell_side.import.F = - (1/flow_scale) * shell_side.flux_mol_total.value(axial.endnode) * shell_side.cross_area;
shell_side.import.Z = shell_side.fraction_mol.value(axial.endnode);
shell_side.import.T = shell_side.temperature_.value(axial.endnode);
shell_side.import.P = shell_side.pressure_.value(axial.endnode);
shell_side.import.h = shell_side.spec_enth_mol.value(axial.endnode);
shell_side.import.V * shell_side.dens_mol_.value(axial.endnode) = 1;
// Port connections at z = 0
(1/flow_scale) * shell_side.export.F = - (1/flow_scale) * shell_side.flux_mol_total.value(0) * shell_side.cross_area;
shell_side.export.Z = shell_side.fraction_mol.value(0);
shell_side.export.T = shell_side.temperature_.value(0);
shell_side.export.P = shell_side.pressure_.value(0);
shell_side.export.h = shell_side.spec_enth_mol.value(0);
shell_side.export.V * shell_side.dens_mol_.value(0) = 1;
Endif;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Connection of variables ***
shell_side.length = length;
fiber_side.length = length;
membrane.membrane_thickness = membrane_thickness;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------End
87
88
flux_mol(componentlist)
as Distribution1D (XDomain is axial)
of notype;
// Molar flux of component i [kmol/m2/hr]
flux_mol_total
as Distribution1D (XDomain is axial)
of notype;
// Molar flux [kmol/m2/hr]
fraction_mol(componentlist)
as Distribution1D (XDomain is axial)
of molefraction;
// Molefraction [kmol/kmol]
flux_mol_membr(componentlist)
as Distribution1D (XDomain is axial)
of notype;
// Molar flux component i through membr [kmol/m2/hr]
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Variables for momentum balance ***
pressure_
as Distribution1D (XDomain is axial)
of pressure;
// Pressure [bar]
velocity_
as Distribution1D (XDomain is axial)
of velocity_rev;
// Velocity [m/s]
dens_mol_
as Distribution1D (XDomain is axial)
of dens_mol;
// Molar density [kmol/m3]
momentum_holdup
as Distribution1D (XDomain is axial)
of notype (initial);
// Holdup of momentum [kg/m3*m/s]
momentum_flux
as Distribution1D (XDomain is axial)
of notype;
// Momentum flux [kg/m2/hr*m/s]
viscosity_
as Distribution1D (XDomain is axial)
of viscosity;
// Viscosity [0.001 * cP = Pa*s]
fr_factor
as Distribution1D (XDomain is axial)
of notype;
// Friction factor [Pa/m = kg/m2/s2]
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Variables for energy balance ***
temperature_
as Distribution1D (XDomain is axial)
of temperature;
// Temperature [C]
spec_enth_mol
as Distribution1D (XDomain is axial)
of enth_mol;
// Molar specific enthalpy [GJ/kmol]
energy_holdup
as Distribution1D (XDomain is axial)
of notype (initial);
// Holdup of energy [GJ/m3]
energy_flux
as Distribution1D (XDomain is axial)
of notype;
// Energy flux [GJ/m2/hr]
energy_flux_membr
as Distribution1D (XDomain is axial)
of notype;
// Energy flux through membr [GJ/m2/hr]
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Auxiliary variables ***
mol_weight_mix
as Distribution1D (XDomain is axial)
of molweight;
// Molecular weight of mixture [kg/kmol]
//==============================================================================================================================================
// EQUATIONS
// *** Balance equations ***
For z in NsetMod do
flux_mol_total(z) = SIGMA(flux_mol(Componentlist)(z));
If sim_mode == "level_1" then
flux_mol(componentlist)(z).ddx = 0;
pressure_(z) = import.P;
temperature_(z) = import.T;
elseif sim_mode == "level_2" then
(1/flow_scale) * $conc_mol(componentlist)(z) = (1/flow_scale) * (- 1/length * flux_mol(componentlist)(z).ddx + B * flux_mol_membr(componentlist)(z));
pressure_(z) = import.P;
temperature_(z) = import.T;
elseif sim_mode == "level_3" then
(1/flow_scale) * $conc_mol(componentlist)(z) = (1/flow_scale) * (- 1/length * flux_mol(componentlist)(z).ddx + B * flux_mol_membr(componentlist)(z));
$momentum_holdup(z) = - bar_to_Pa * hr_to_s * 1/length * pressure_(z).ddx - 1/length * momentum_flux(z).ddx - hr_to_s * fr_factor(z);
temperature_(z) = import.T;
elseif sim_mode == "level_4" then
(1/flow_scale) * $conc_mol(componentlist)(z) = (1/flow_scale) * (- 1/length * flux_mol(componentlist)(z).ddx + B * flux_mol_membr(componentlist)(z));
$momentum_holdup(z) = - bar_to_Pa * hr_to_s * 1/length * pressure_(z).ddx - 1/length * momentum_flux(z).ddx - hr_to_s * fr_factor(z);
$energy_holdup(z) = - 1/length * energy_flux(z).ddx + B * energy_flux_membr(z);
elseif sim_mode == "level_5" then
(1/flow_scale) * $conc_mol(componentlist)(z) = (1/flow_scale) * (- 1/length * flux_mol(componentlist)(z).ddx + B * flux_mol_membr(componentlist)(z));
89
90
91
// VARIABLE DEFINITION
// *** Geometric variables
membrane_thickness
as area;
// Membrane thickness [m]
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Variable for separative character of the membrane ***
permeability(componentlist)
as Distribution1D(XDomain is axial) of notype;
// Permeability
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Auxiliary variables
fraction_mol_membr(componentlist)
as Distribution1D(XDomain is axial) of molefraction; // Molar fraction of component i in membrane [kmol/kmol]
spec_enth_mol_fiber
as Distribution1D(XDomain is axial) of enth_mol;
// Specific molar enthalpy of flux trough membr [GJ/mol]
spec_enth_mol_shell
as Distribution1D(XDomain is axial) of enth_mol;
// Specific molar enthalpy of flux trough membr [GJ/mol]
//==============================================================================================================================================
// EQUATIONS
For z in 0 + axial.interior + axial.endnode do
// *** Component fractions in membrane and enthalpy of mass flux***
fraction_mol_membr(componentlist)(z) * SIGMA (ABS(shell_result.flux_mol_membr(componentlist)(z)) ) = ABS (shell_result.flux_mol_membr(componentlist)(z)) ;
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Permeability (Arrhenius funtion) ***
If feed_side == "Shell" then
(1/1e-14) * permeability(componentlist)(z) = (1/1e-14) * permeability0(componentlist) * exp ( - activation_energy(componentlist) / R * ( 1 /
(shell_info.temperature_(z) + 273.15) - 1 / (temperature0 + 273.15) ) );
call(spec_enth_mol_fiber(z)) = pEnth_Mol_Vap(shell_info.temperature_(z),fiber_info.pressure_(z),fraction_mol_membr(componentlist)(z));
call(spec_enth_mol_shell(z)) = pEnth_Mol_Vap(shell_info.temperature_(z),shell_info.pressure_(z),fraction_mol_membr(componentlist)(z));
elseif feed_side == "Fiber" then
(1/1e-14) * permeability(componentlist)(z) = (1/1e-14) * permeability0(componentlist) * exp ( - activation_energy(componentlist) / R * ( 1 /
(fiber_info.temperature_(z) + 273.15) - 1 / (temperature0 + 273.15) ) );
call(spec_enth_mol_fiber(z)) = pEnth_Mol_Vap(fiber_info.temperature_(z),fiber_info.pressure_(z),fraction_mol_membr(componentlist)(z));
call(spec_enth_mol_shell(z)) = pEnth_Mol_Vap(fiber_info.temperature_(z),shell_info.pressure_(z),fraction_mol_membr(componentlist)(z));
Endif
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Molar and energy flux through membrane: connection between two sides ***
(1/flow_scale) * Fiber_result.Flux_mol_membr(componentlist)(z) = - (1/flow_scale) * Shell_result.Flux_mol_membr(componentlist)(z);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------// *** Molar flux through membrane ***
If sim_mode == "Level_1" then
Shell_result.Flux_mol_membr(componentlist)(z) = 0;
elseif sim_mode == "Level_2" then
(1/flow_scale) * Shell_result.Flux_mol_membr(componentlist)(z) = (1/flow_scale) * 3600 * 1e-3 * permeability0(componentlist) / membrane_thickness *
1e5 * (fiber_info.fraction_mol(componentlist)(z) * fiber_info.pressure_(z) - shell_info.fraction_mol(componentlist)(z) * shell_info.pressure_(z));
elseif sim_mode == "Level_3" then
If membr_type == "Symmetric" then
(1/flow_scale) * Shell_result.Flux_mol_membr(componentlist)(z) = (1/flow_scale) * 3600 * 1e-3 * permeability0(componentlist) /
membrane_thickness * 1e5 * (fiber_info.fraction_mol(componentlist)(z) * fiber_info.pressure_(z) - shell_info.fraction_mol(componentlist)(z) *
shell_info.pressure_(z));
elseif membr_type == "Asymmetric" then
If feed_side == "Shell" then
92
93
Endfor
//==============================================================================================================================================
End
94
95
96
Permeate
(kmol/hr)
2.515E-05
2.991E-05
3.455E-05
3.907E-05
4.350E-05
4.783E-05
5.208E-05
6.030E-05
6.818E-05
7.568E-05
8.280E-05
8.951E-05
1.016E-04
1.120E-04
1.207E-04
1.281E-04
1.343E-04
Stage cut
(%)
62.88
59.82
57.58
55.82
54.38
53.15
52.08
50.26
48.70
47.31
46.00
44.76
42.35
40.00
37.74
35.59
33.59
H2
Permeate
(kmol/hr)
2.550E-05
3.047E-05
3.528E-05
3.994E-05
4.446E-05
4.886E-05
5.315E-05
6.140E-05
6.924E-05
7.669E-05
8.373E-05
9.037E-05
1.023E-04
1.126E-04
1.213E-04
1.286E-04
1.348E-04
Stage cut
(%)
63.74
60.95
58.81
57.06
55.58
54.29
53.15
51.16
49.46
47.93
46.52
45.18
42.64
40.22
37.91
35.73
33.70
H2
97
Permeate
(kmol/hr)
2.346E-05
2.774E-05
3.199E-05
3.622E-05
4.043E-05
4.462E-05
4.880E-05
5.708E-05
6.520E-05
7.304E-05
8.051E-05
8.756E-05
1.002E-04
1.109E-04
1.199E-04
1.275E-04
1.338E-04
Stage cut
(%)
58.65
55.49
53.32
51.74
50.54
49.58
48.80
47.57
46.57
45.65
44.73
43.78
41.75
39.62
37.48
35.40
33.45
H2
98
Aspen Plus 12.1.12 (Sept. 2005: not possible yet to use Aspen Plus version
12.1.13 and Aspen Plus 2004.1/13.2 because of a bug in software/interfaces)
gPROMS version 2.3 or alpha version 3.0
Open or create an *.bkp file in Aspen Plus (when no *.bkp file exists, the runtype
of the simulation can be set to Properties Plus in Data Browser / Setup /
Specifications / Global / Run Type Properties Plus).
2.
3.
Select File Save as or click on the save button in the toolbar of this window.
4.
Save the *.cota file in the same folder as you are going to store your gPROMS
project file.
5.
99
What to do in gPROMS?
Incorporation of *.cota file in project file:
1.
2.
In the EQUATION section of the MODEL entity of your gPROMS project you can set
up an equation to call for a physical property. As input for the physical property
calculation temperature (in Kelvin), pressure (in Pascal) and molar fraction (mol/mol) of
a phase have to be given. The property package returns its answer also on molar basis
(/mol).
For example, if you want to calculate the enthalpy of a liquid phase, in the EQUATION
section you should write:
enthalpy = phys_prop.LiquidEnthalpy (temperature, pressure, fraction_mol);
In Table E.1 a more comprehensive list is given of all the properties which can be called
using the CAPE-OPEN interface. Before the property name, the state of the system
should be given with the one of these words: Liquid, Vapour or Overall.
The number of components is not stated in this list but can also be called by using the
property name NumberOfComponents, like:
no_comp = phys_prop.NumberOfComponents;
The order of the components in the array defined for the molar fraction of the
system is of importance. The physical property package expects to get the
component in the molar fraction array in the same order as the order defined in
Aspen Plus when creating the package.
100
101
Aspen Plus 2004.1 version 13.2 (interface also possible with Aspen Plus version
12.1)
ACM 2004.1 version 13.2 (interface also possible with ACM version 12.1)
Open or create a *.bkp file in Aspen Plus (when no *.bkp file exists, the runtype
of the simulation can be set to Properties Plus in Data Browser / Setup /
Specifications / Global / Run Type Properties Plus).
2.
After running a simulation, save the *.bkp file, automatically is asked if also the
*.apw file has to be saved. Click Yes.
3.
Together with the *.bkp file and the *.apw file, an *.appdf file is saved in the
same directory. The files created by Aspen Plus should be located in the same
directory as you are going to save the ACM file.
4.
102
What to do in ACM?
Incorporation of *.appdf file in ACM model:
1.
2.
3.
4.
103
5.
The next window is displayed. Browse for the definition file (the *.appdf file) and
click OK.
6.
The former window appears again, check if the properties status is green. Click
OK.
104
7.
The next window is displayed. Select the components you want to use in the
ACM model and bring them to the right pane.
8.
To see or change the physical properties defined in the Default Component List,
select Edit Physical Properties. This window is displayed:
9.
Click twice OK and the physical property package for the Default Component
List in ACM is loaded successfully.
105
You can use procedure calls in models to use an external routine to make calculations.
The procedure must be defined in a procedure definition. For a lot of thermodynamic and
physical properties the procedures are already included in the library of Aspen Custom
Modeler.
1.
Select and expand Libraries and then Modeler from the Exploring-Simulation
pane All items.
2.
Select Procedures. In the content pane a list of all predefined procedures are given.
3.
By double click on one of the procedures a window will appear in which the
syntax is written for this particular procedure.
4.
In the text editor of the model the following line should be added:
CALL (OutputArgumentList) =
ProcedureName( InputArgumentList ) ComponentList;
Where:
ProcedureName = Name of the procedure to use
InputArgumentList = List of input variables in the same order as the
procedure definition
OutputArgumentList = List of output variables in the same order as the
procedure definition
ComponentList = Optional name of a component list that applies to this
individual call. The component and thermodynamic properties associated with
this component list are used in property calculation calls. A value is required
only when you want to override the default component list.
106
For example
Call (enthalpy) = pEnth_Mol_Vap (temperature, pressure, fraction_mol);
As input for the physical property calculation temperature (in Celsius), pressure
(in bar) and molar fraction (kmol/kmol) of a phase have to be given. The physical
property is returned on molar basis.
107
Aspen Plus 12.1.12 (Sept. 2005: not (yet) possible to use Aspen Plus 2004.1/13.2
because of a bug in the port connection)
gPROMS 3.0 (Sept. 2005: gPROMS 2.3.6 does not have the functionality to
export CAPE-OPEN models. Version 3.0 is an alpha version of gPROMS,
therefore the work process can be changed for the final release)
Prerequisite for exporting models from gPROMS: gPROMS version 3.0.0 and higher and
the licenses gSRE_4 and gSIM_4.
If other versions of gPROMS are installed on the same machine, to be sure that no
problems will occur:
Check if the environment variable GPROMSHOME is set to the installation
directory of the version you are going to use.
Check if the %GPROMSHOME%\bin directory is included in the PATH
environment variable.
Open Windows command prompt (Start Run cmd). Go (with cd command) to
installation directory\gPROMS\bin and type regsvr32 gPROMS_COUnit.dll. The
message DllRegisterServer in gPROMS_COUnit.dll succeeded is displayed.
Normally during the installation of gPROMS these things are automatically set correct.
Model requirements
A. Port definition (obligatory)
In order to link the gPROMS model within an Aspen Plus flowsheet simulation, the
streams used in the model must conform the standard CAPE-OPEN definition.
gPROMS is supplied with a CAPE-OPEN_Unit library (CAPE-OPEN_Unit.gPJ in the
directory PSE\gPROMS\ gOCAPEOPEN\examples) that contains a CAPE-OPEN
material connection type, named CO_material, see figure below. To make your model
CAPE-OPEN compliant, the connection type CO_material have to be used for defining
the input and output ports of the model you want to export. Streams from Aspen Plus can
be connected to this connection type.
The variables in the CO_material connection type/port are: flowrate [mol/s], fraction
[mol/mol], pressure [Pa], temperature [K], specific enthalpy [J/mol]. The order of the
variables defined in the connection type is not of importance. Note: the connection
variables are on molar basis, and not on mass basis, as the CO_material connection type
indicates! PSE is going to correct this for the final release of gPROMS version 3.0.
108
Variables in the connection type/port with direction input are automatically set as get
when the model is exported. Variables in the connection type/port with direction output
are automatically set as send.
This means that values of the variables in the input port do not have to be calculated by
the model, the model will receive these values from Aspen Plus. On the other hand the
values of the variables in the output port have to be calculated by the model.
B. Model specifications declared in PROCESS entity are not exported (obligatory)
The PROCESS section of the gPROMS project file is not exported; therefore you have to
write everything what you want to export in the MODEL section. This also counts for the
INITIALISE section. Initialisation of the model should be done in MODEL section
instead of in PROCESS section. (This works only for version 3.0.0 or higher.)
C. Table with model attributes for export (optional)
gPROMS version 3.0 allows to have parameters or variables in its interface with CAPEOPEN compliant process modelling environment. These parameters or variables can be
adapted (manually or with a design specification) within the CAPE-OPEN flowsheet
package (Aspen Plus). The gPROMS parameters or variables which are not defined in the
interface as CAPE-OPEN parameters are not accessible in Aspen Plus. Currently, only
gPROMS variables can be defined as CAPE-OPEN parameters. PSE is working on the
option to include also gPROMS parameters as CAPE-OPEN parameters in the interface.
The following steps should be taken in order to create a table with model attributes which
are available as CAPE-OPEN parameters in the interface:
1.
109
2.
Click Edit specification in the left upper corner. This window is displayed:
3.
Select the model attributes (variables, parameters, selectors) you want to export as
a table together with your model.
4.
Enter the lower and upper bound of the model attribute and its unit.
5.
Click Next and select the model attributes again to be included in the table.
110
Click Finish.
1.
In the Simulation activity window, when starting a run, deselect Release model
after execution.
2.
When the simulation is finished right click on the Execution output and select
Create save variable set. The variable set is saved in the folder of the case in
the project tree.
3.
Make a copy of this text file by right clicking on the name and paste it in the
Save variable set of the project entity in the project tree.
111
Export functionality
By exporting a model from gPROMS, which is CAPE-OPEN compatible, a *.gCO file is
created. Steps to take for creating a *.gCO file are:
1.
Select the model entity in the project tree for the model you want to export. For
models containing sub-models, select the main model entity.
2.
Go to the Tools menu on the task bar of the gPROMS user interface and select
Export to CAPE-OPEN. This window is displayed:
In the export directory field you can change the directory where the *.gCO file
will be saved.
In the unit name field the name of the model which is exported is automatically
displayed. Dont change this name!
If there are Saved variable sets created for the model, these can be exported
together with the model by selecting Include.
The exported file is encrypted in order to protect the model for unauthorised
changes being made to it. An encryption password has to be entered.
3.
Clicking on the Ports tap, shows this window below. In this window you can
choose how the connection is established. For usage in an Aspen Plus simulation
all the inlet variables have to set as Get and the outlet variables as Send.
112
4.
If you create a table with model attributes for exporting, the Parameter tab is also
available:
Dont enter Fixed values for the variables in this table. However, Default values
for the variables can be entered here.
5.
Click Export, and a *.gCO file is created containing the model and some
additional tasks in your project file.
113
2.
From the list of available libraries, select CAPE-OPEN and click OK.
3.
Select the CAPE-OPEN tab from the Model Library bar and drag the gO_CAPEOPEN block (gPROMS based CAPE-OPEN (1-0-0) Unit v.3.0.0) to the flowsheet.
114
4.
The next window will be displayed automatically (maybe hided in the taskbar of
Windows). Go to the directory containing the *.gCO file, select it, and click OK.
5.
Doubling clicking on the CAPE-OPEN block in the Aspen Plus flowsheet results
in the display of this window:
115
6.
7.
After running the simulation the results of the CAPE-OPEN block are displayed
among other things in the Ports tab of the gPROMS CAPE-OPEN Unit Object
block:
116
Prerequisite for exporting models from ACM: a C++ compiler has to be installed on your
computer! (Installation and running an exported model can be done without having a C++
compiler installed on your computer.)
In the help content of ACM (Using Aspen Custom Modeler Exporting models to
Aspen Plus and HYSYS) an extended description is given of how to export models for
usage in Aspen Plus. In this work process the highlights are summarized.
Model requirements
A. Port definition (obligatory)
Aspen Plus streams can only be connected to ports on exported models if the port types
used in the model contain particular variables. For a port to be connected to a material
stream in Aspen Plus it must contain at least the following variable definitions:
F as flow_mol (Description: Molar flow rate)
T as temperature (Description: Temperature)
P as pressure (Description: Pressure)
V as vol_mol (Description: Molar volume)
h as enth_mol (Description: Molar enthalpy)
z (componentlist) as molefraction (Description: Mole fractions)
This port type (MoleFractionPort) is already predefined in the Modeler library and it is
recommended to use this port type.
Variables in inlet ports are seen as fixed variables in Aspen Plus, whereas the variables in
the outlet ports are seen as free variables, which need to be calculated by the ACM model.
B. Specification of parameters and variables (optional)
Only default values and specifications of parameters and variables are exported. Values
of parameters or specifications (free/fixed/initial) of variables which are modified by the
user in the AllVariables table are not exported together with the model. By modifying the
specification and/or default value in the text editor of the model, these specification/
values are taken along with the model export to Aspen Plus.
C. Tables with model attributes for export (optional)
Your model may own tables that you have defined to display particular sets of variables
and parameters. These tables can be included in the exported model and displayed in
Aspen Plus. By default ACM will include all tables belonging to a model in the exported
117
package. Use the Model Package Properties dialogs (see Export functionality) to exclude
tables if necessary.
Aspen Plus distinguishes between input forms and results forms whereas ACM does not.
Use the Model Package Properties dialogs (see Export functionality) to specify whether a
form should be considered as an input form or a results form or both in Aspen Plus.
For creating new model tables, see the help content of ACM Create a new model table.
D. Visual Basic script for export - Initialisation (optional)
Your models Visual Basic scripts will be exported with a model and can be run in Aspen
Plus. Visual Basic scripts are primarily intended to help with model initialisation.
Scripts with the standard names: Presolve, Postsolve and Init will be run at specific
times during process in Aspen Plus.
The Presolve script runs immediately before solving an Aspen Plus flowsheet. In this
script starting values can be given to variables and parameters defined in the ACM model
block. An example of a Visual Basic script for initialisation of a custom model is given in
PlugFlowModel.acmf:
118
Export functionality
A. Setting Model Package Properties
Before exporting a model its properties can be modified by taking the following steps:
1.
Right click on the model you want to export in the Explorer window and select
the Model Package Properties menu item. This window is displayed:
In the Model Library Category field it is possible to enter the name of the tab
where you want the model to appear in Aspen Plus Model library (the standard
category is ACM Models).
In the Display name field enter the name of the exported model.
Select Next.
2.
you can control whether a port is accessible in the exported model and what its
prompt should be.
Select Next.
3.
119
you can control whether a form is included in the Model Package, whether it is an
input, results or input & results form.
Click Finish.
B. Export the model
1.
Right click on the model you want to export in the Explorer window and select
the Export menu item.
2.
Navigate to the directory where you want ACM to create the Unit Operation
Model. Select Save to export the model.
3.
When the Windows Installer Package for your model is complete Aspen Modeler
will ask automatically if you want to install the model.
120
If you select Yes, follow the install instructions to install the model. If you
select No you can install the model manually later or on a different computer.
Then, use the Windows Explorer to navigate to the directory where the *.mis is
saved and double click on it.
C. Installing the model
1.
The first window of the installation instruction looks as follows:
Select Next.
2.
121
you can change the directory where the model is installed. The path of the
directory isnt of importance.
Select Next.
3.
4.
122
From the list of available libraries, select ACM Models and click OK.
3.
Select the ACM Models tab in the Model Library bar and drag the exported ACM
model to the flowsheet.
As normal, streams can be connected to the ACM model block and parameters,
property method and other options inside the block can be modified. If you
exported tables together with the model, these can be displayed. In the block the
values of defined variables and parameters in ACM can be changed.
123
To solve the ACM block there are various solvers available in Aspen Plus. Select
in block options the most appropriate solver for the model you developed. The
letter D at the beginning of the name of the last three solvers stands for the ability
of the solver to handle models which require block decomposition to converge.
124
125
Rating
Counter-current
Shell
Without
Symmetric
4
H2,N2,CH4,Ar
Specifications
Length [m]
Inner diameter [m]
Outer diameter [m]
Shell diameter [m]
Number of fibres
0.5
8.00E-05
2.00E-04
0.075
50000
Peng Rob
340.8;3.54;3.408;9.24
1E4;1E4;1E4;1E4
298.15
50
Operation conditions
Feed flowrate [mol/s]
Feed composition [mol/mol]
Feed pressure [bar]
Feed temperature [K]
Sweep flowrate [mol/s]
Sweep composition [mol/mol]
Sweep pressure [bar]
Sweep temperature [K]
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
or
126
0.05
4500
0.10
5
1.00E-04
Base case
Operation mode
Feed side
Sweep stream
Membrane type
Components
Rating
Counter-current
Shell
Without
Symmetric
4
H2,N2,CH4,Ar
Rating
Co-current
Shell
Without
Symmetric
4
H2,N2,CH4,Ar
Rating
Counter-current
Fibre
Without
Symmetric
4
H2,N2,CH4,Ar
Rating
Counter-current
Shell
With
Symmetric
4
H2,N2,CH4,Ar
Rating
Counter-current
Shell
Without
Asymmetric
4
H2,N2,CH4,Ar
Rating
Counter-current
Shell
Without
Symmetric
8
H2,N2,CH4,Ar,O2,H2O,CO,CO2
0.5
8.00E-05
2.00E-04
0.075
50000
0.5
8.00E-05
2.00E-04
0.075
50000
0.5
8.00E-05
2.00E-04
0.075
50000
0.5
8.00E-05
2.00E-04
0.075
50000
0.5
8.00E-05
2.00E-04
0.075
50000
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24;1;1;1;1
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
Idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
0.0694
0;0;0;1
10
idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
0.2083
0.3;0.25;0.2;0.05;0.05;0.05;0.05;0.05
70
298
na
idem feed
10
idem feed
0.0967
0.046
0.483
0.388
0.083
6987582
300.7
0.1121
0.894
0.048
0.037
0.021
991716
299.9
53.81
0.1056
0.127
0.443
0.356
0.075
6986983
301.7
0.1028
0.883
0.052
0.040
0.025
977965
299.6
49.33
0.0967
0.046
0.483
0.388
0.083
6992973
300.8
0.1121
0.894
0.048
0.037
0.021
985340
299.9
53.82
0.0943
0.000
0.489
0.393
0.117
6988186
296.8
0.1835
0.568
0.032
0.025
0.375
948347
303.9
54.75
0.0989
0.067
0.473
0.380
0.081
6987276
300.9
0.1098
0.892
0.049
0.038
0.022
991397
299.8
52.70
0.1128
0.015 - 0.083
0.335 - 0.083
0.271 - 0.083
0.046 - 0.083
6950771
296.2
0.097
0.644 - 0.010
0.147 - 0.010
0.114 - 0.010
0.053 - 0.010
968238
301.1
46.78
127
0.5
8.00E-05
2.00E-04
0.075
50000
50
Base case
Operation mode
Feed side
Sweep stream
Membrane type
Components
Design
Counter-current
Shell
Without
Symmetric
4
H2,N2,CH4,Ar
Design
Co-current
Shell
Without
Symmetric
4
H2,N2,CH4,Ar
Design
Counter-current
Fibre
Without
Symmetric
4
H2,N2,CH4,Ar
Design
Counter-current
Shell
With
Symmetric
4
H2,N2,CH4,Ar
Design
Counter-current
Shell
Without
Asymmetric
4
H2,N2,CH4,Ar
Design
Counter-current
Shell
Without
Symmetric
8
H2,N2,CH4,Ar,O2,H2O,CO,CO2
0.05
4500
0.10
5
1.00E-04
0.05
4500
0.10
5
1.00E-04
0.50
4500
0.10
5
1.00E-04
0.05
4500
0.10
5
1.00E-04
0.05
4500
0.10
5
1.00E-04
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24
50
Peng Rob
340.8;3.54;3.408;9.24;1;1;1;1
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
0.0694
0;0;0;1
10
idem feed
0.2083
0.50;0.25;0.20;0.05
70
298
na
idem feed
10
idem feed
0.2083
0.3;0.25;0.2;0.05;0.05;0.05;0.05;0.05
70
298
na
idem feed
10
idem feed
0.0977
0.050
0.481
0.386
0.083
6967513
300.9
0.1110
0.898
0.046
0.035
0.020
987874
299.9
53.28
0.1063
0.127
0.442
0.355
0.075
6966058
301.6
0.1021
0.888
0.050
0.038
0.024
968230
299.6
48.99
0.0976
0.049
0.481
0.386
0.084
6989641
300.9
0.1111
0.898
0.046
0.036
0.020
961710
299.9
53.35
0.0947
8.429E-05
0.490
0.394
0.116
6969173
297.2
0.1830
0.569
0.031
0.024
0.376
923429
303.5
54.52
0.0999
0.071
0.470
0.378
0.081
6966760
300.8
0.1087
0.896
0.047
0.036
0.021
987467
299.8
52.20
0.1464
0.066 - 0.070
0.331 - 0.070
0.265 - 0.070
0.060 -0.070
6951888
302.3
0.0616
0.853 - 0.004
0.060 - 0.004
0.046 - 0.004
0.027 - 0.004
990405
300.1
29.58
128
0.05
4500
0.10
5
1.00E+00
51
0.01
0.13
0.05
0.63
0.5
6.28
1
12.57
1.3
16.34
1.5
18.85
0.1995
0.478
0.261
0.209
0.052
6999601.5
298.176
0.009
0.983
0.007
0.006
0.004
999979
298.1
4.3
3
0.1691
0.389
0.306
0.245
0.061
6998146
299.0
0.0392
0.979
0.009
0.007
0.005
999558
298.4
18.8
3
0.0967
0.046
0.483
0.388
0.083
6987582
300.7
0.1121
0.894
0.048
0.037
0.021
991716
299.9
53.8
3
0.0810
0.022
0.501
0.404
0.073
6978964
297.6
0.1289
0.807
0.089
0.069
0.035
982813
300.2
61.9
3
0.0733
0.026
0.502
0.406
0.065
6974427
295.5
0.1368
0.761
0.112
0.087
0.041
975624
300.3
65.7
3
0.0683
0.029
0.503
0.408
0.060
6971642
294.0
0.1419
0.733
0.125
0.098
0.045
969714
300.4
68.1
3
1.7
21.36
x
x
x
x
x
x
x
x
x
x
x
x
x
x
2
0.01
0.126
1.7
21.36
2.5
31.42
3
37.70
3.5
43.98
4
50.27
4.2
52.78
0.1995
0.479
0.261
0.209
0.052
6999602
298.2
0.009
0.983
0.007
0.006
0.004
999979
298.1
4.3
3
0.0675
0.089
0.476
0.388
0.047
6965780
301.8
0.141
0.697
0.141
0.110
0.051
873041
299.9
67.6
3
0.0446
0.069
0.493
0.407
0.030
6956709
302.0
0.164
0.617
0.184
0.144
0.055
766643
300.1
78.6
3
0.0324
0.058
0.502
0.418
0.022
6952864
300.3
0.176
0.582
0.204
0.160
0.055
681233
300.6
84.4
3
0.0296
0.049
0.507
0.424
0.020
6949423
290.2
0.179
0.575
0.207
0.163
0.055
582356
302.9
85.8
3
0.0256
0.038
0.514
0.432
0.017
6946412
283.2
0.183
0.565
0.213
0.168
0.055
457317
304.1
87.7
3
0.0233
0.032
0.517
0.436
0.015
6945388
281.5
0.185
0.559
0.216
0.170
0.054
393743
304.1
88.8
3
129
4.4
55.29
x
x
x
x
x
x
x
x
x
x
x
x
x
x
1.0
69.5
1.0
69
1.2
60
3.5
20
7.0
10
14.0
5
23.3
3
35.0
2
0.2083
0.500
0.250
0.200
0.050
6979689
298.0
0
0.501
0.250
0.200
0.050
6990001
297.8
0.0
3
0.2079
0.500
0.250
0.200
0.050
6979706
298.0
3.500E-04
0.507
0.246
0.197
0.050
6899991
298.0
0.2
3
0.2027
0.496
0.252
0.202
0.050
6979911
298.0
0.0046
0.581
0.206
0.163
0.050
5999858
298.0
2.2
3
0.1131
0.164
0.422
0.338
0.075
6985803
301.1
0.0950
0.898
0.046
0.036
0.020
1995750
299.3
45.6
3
0.0967
0.046
0.483
0.388
0.083
6987582
300.7
0.1121
0.894
0.048
0.037
0.021
991716
299.9
53.8
3
0.0921
0.012
0.501
0.403
0.084
6988211
301.2
0.1166
0.888
0.051
0.039
0.023
484244
300.2
56.0
3
0.0910
0.005
0.505
0.406
0.084
6988403
301.5
0.1176
0.884
0.052
0.040
0.024
273877
300.2
56.5
2
0.0905
0.003
0.507
0.407
0.083
6988487
301.9
0.1180
0.882
0.053
0.041
0.024
158969
300.3
56.6
2
0
0.75
0.2
0.05
0.001
0.749
0.2
0.05
0.005
0.745
0.2
0.05
0.05
0.7
0.2
0.05
0.2
0.55
0.2
0.05
0.4
0.35
0.2
0.05
0.5
0.25
0.2
0.05
0.75
0
0.2
0.05
0.1966
0.000
0.752
0.201
0.047
6977829
298.0
0.0117
0.000
0.716
0.185
0.099
997533
298.0
5.6
3
0.1965
0.0006
0.7513
0.2010
0.0470
6977836
298.0
0.0118
0.006
0.711
0.184
0.099
997520
298.0
5.7
3
0.1962
0.003
0.748
0.201
0.047
6977862
298.0
0.0121
0.032
0.691
0.180
0.097
997465
298.0
5.8
3
0.1913
0.027
0.719
0.206
0.048
6978244
298.1
0.0167
0.298
0.491
0.136
0.076
996765
298.0
8.0
3
0.1639
0.055
0.653
0.238
0.054
6980686
299.4
0.0441
0.734
0.171
0.060
0.035
994438
298.7
21.2
3
0.1195
0.053
0.557
0.320
0.070
6985124
301.0
0.0890
0.867
0.071
0.039
0.023
992373
299.6
42.7
3
0.0967
0.046
0.483
0.388
0.083
6987582
300.7
0.1121
0.894
0.048
0.037
0.021
991716
299.9
53.8
3
0.040
0.033
0.000
0.818
0.149
6994220
296.7
0.1692
0.923
0.000
0.051
0.026
991293
300.5
81.2
3
425
275
298
325
350
375
400
0.1036
0.075
0.467
0.375
0.084
6988396
280.1
0.1048
0.921
0.035
0.027
0.016
992607
277.0
50.3
3
0.0967
0.046
0.483
0.388
0.083
6987582
300.7
0.1121
0.894
0.048
0.037
0.021
991716
299.9
53.8
3
0.0898
0.028
0.494
0.398
0.080
6986600
325.9
0.1195
0.859
0.064
0.050
0.027
990472
326.8
57.4
3
0.0840
0.022
0.499
0.402
0.076
6985670
349.1
0.1258
0.825
0.081
0.062
0.032
989009
351.7
60.4
3
0.0783
0.023
0.501
0.405
0.071
6984718
372.2
0.1317
0.790
0.097
0.076
0.037
987061
376.6
63.2
3
0.0724
0.027
0.502
0.406
0.064
6983760
395.1
0.1378
0.755
0.114
0.089
0.042
984408
401.5
66.2
3
130
x
x
x
x
x
x
x
x
x
x
x
x
x
x
0.80
0
0.15
0.05
x
x
x
x
x
x
x
x
x
x
x
x
x
x