Development of FORTRAN Subroutines
This section is optional and intended primarily for those users who wish to directly develop the FORTRAN subroutines used in this model and compile them as a dll file. Otherwise,
the user may used the provided ccsi.opt
and either the ccsi10.dll
or ccsi11.dll
file. In order to create the dll file, ensure that an Intel Fortran compiler
and Microsoft Visual Studio are installed in the machine. Open the Aspen application Set Compiler for V10 (or the application corresponding to the version of
Aspen Plus in use) to see the list of combinations compatible with V10 and V11, respectively; this is shown for both versions in Figure 1.
Figure 1. ‘Set Compiler’ applications for (A) Aspen Plus V10 and (B) Aspen Plus V11
As directed in the set compiler application, select an option for which the State is OK.
The provided dll files ccsi10.dll
and ccsi11.dll
were compiled with the respective FORTRAN compilers shown with the ‘OK’ status in Figure 1.
If all options are shown with the ERROR status, then one cannot proceed with the following steps until the appropriate software is installed.
To obtain the FORTRAN template .f
files distributed with Aspen Tech software, navigate to one of the following folders depending on the Aspen verson of interest:
C:\Program Files (x86)\AspenTech\Aspen Plus V10.0\Engine\User
C:\Program Files\AspenTech\Aspen Plus V11.0\Engine\User
Note
Templates for V10 (32-bit program) may be found in the Program Files (x86)
directory, while those for later versions (64-bit program) are found in the Program Files
directory.
The following subsections provide the details of the required updates to the template files.
Viscosity Model
For the liquid viscosity model, open the file mul2u2.f
. In the section of the code titled DECLARE ARGUMENTS
, add the following code for declaring additional variables. The existing code in
this section of the template should not be deleted, as it is needed to declare the major input and output variables of the subroutine.
INTEGER DMS_KCCIDC,I
INTEGER IH2O,IMEA,IMEACOO,ICO2,IMEAH,IHCO3
REAL*8 XX(100),SUM,DSUM,DPSUM
REAL*8 A,B,C,D,E,F,G
REAL*8 MUW,XCO2T,XMEAT,XH2OT,LDG,WTMEA,MUBLEND
In the BEGIN EXECUTABLE CODE
section, remove the template code that has been provided. Note that the final section of the template, which includes the definitions of the liquid viscosity (MUMX
),
its temperature derivative (DMUMX
), and its pressure derivative (DPMUMX
), should not be deleted. Insert the following code under BEGIN EXECUTABLE CODE
:
IH2O = DMS_KCCIDC('H2O')
IMEA = DMS_KCCIDC('MEA')
IMEACOO = DMS_KCCIDC('MEACOO-')
ICO2 = DMS_KCCIDC('CO2')
IMEAH = DMS_KCCIDC('MEA+')
IHCO3 = DMS_KCCIDC('HCO3-')
DO I=1,100
XX(I) = 0
END DO
DO I=1,N
IF (IDX(I). EQ. IH2O) XX(IH2O) = Z(I)
IF (IDX(I). EQ. IMEA) XX(IMEA) = Z(I)
IF (IDX(I). EQ. IMEACOO) XX(IMEACOO) = Z(I)
IF (IDX(I). EQ. ICO2) XX(ICO2) = Z(I)
IF (IDX(I). EQ. IMEAH) XX(IMEAH) =Z(I)
IF (IDX(I). EQ. IHCO3) XX(IHCO3) = Z(I)
END DO
A = MULU2A(1,IMEA)
B = MULU2A(2,IMEA)
C = MULU2A(3,IMEA)
D = MULU2A(4,IMEA)
E = MULU2A(5,IMEA)
F = MULU2A(1,IH2O)
G = MULU2A(2,IH2O)
MUW = 1.002
MUW=MUW*10**(1.3272*(293.15-T-0.001053*(T-293.15)**2)/(T-168.15))
XCO2T = XX(IMEACOO) + XX(IHCO3) + XX(ICO2)
XMEAT = XX(IMEACOO) + XX(IMEAH) + XX(IMEA)
XH2OT = XX(IHCO3) + XX(IH2O)
LDG = XCO2T/XMEAT
WTMEA = XMEAT*XMW(IMEA) + XH2OT*XMW(IH2O)
WTMEA = 100*((XMEAT*XMW(IMEA))/WTMEA)
MUBLEND=(A*WTMEA+B)*T+(C*WTMEA+D)
MUBLEND=MUBLEND*(LDG*(E*WTMEA+F*T+G)+1)*WTMEA
MUBLEND=DEXP(MUBLEND/T**2)
IF (XMEAT.EQ.0) THEN
SUM=MUI(IH2O)
ELSE IF (XH2OT.EQ.0) THEN
SUM=DEXP(-102.07+7992.1/T+13.724*LOG(T))/1000
ELSE
SUM=MUBLEND*MUW/1000
END IF
The existing RETURN
and END
statements at the end of the code must be retained. Ensure that the inserted code lines do not get commented.
Molar Volume Model
For the liquid molar volume model, the process is analogous to that used for the viscosity model. In the folder that contains the Fortran templates, select vl2u2.f
. The following code should be added to the
DECLARE ARGUMENTS
section without deleting the existing code:
INTEGER DMS_KCCIDC,I
INTEGER IH2O,IMEA,IMEACOO,ICO2,IMEAH,IHCO3
REAL*8 XX(100),SUM,DSUM,DPSUM
REAL*8 A,B,C,D,E
REAL*8 AM,BM,CM,AW,BW,CW
REAL*8 VH2O,VMEA
REAL*8 XCO2T,XMEAT,XH2OT,XTOT
In the section marked BEGIN EXECUTABLE CODE
, remove the template code and replace with the code given below. As with the viscosity model, avoid deleting the definitions of liquid molar volume (VMX
),
its temperature derivative (DVMX
), and its pressure derivative (DPVMX
).
IH2O = DMS_KCCIDC('H2O')
IMEACOO = DMS_KCCIDC('MEACOO-')
ICO2 = DMS_KCCIDC('CO2')
IMEAH = DMS_KCCIDC('MEA+')
IHCO3 = DMS_KCCIDC('HCO3-')
IMEA = DMS_KCCIDC('MEA')
DO I=1,100
XX(I) = 0
END DO
DO I=1,N
IF (IDX(I). EQ. IH2O) XX(IH2O) = Z(I)
IF (IDX(I). EQ. IMEA) XX(IMEA) = Z(I)
IF (IDX(I). EQ. IMEACOO) XX(IMEACOO) = Z(I)
IF (IDX(I). EQ. ICO2) XX(ICO2) = Z(I)
IF (IDX(I). EQ. IMEAH) XX(IMEAH) =Z(I)
IF (IDX(I). EQ. IHCO3) XX(IHCO3) = Z(I)
END DO
A = VL2U2A(1,IMEA)
B = VL2U2A(2,IMEA)
C = VL2U2A(3,IMEA)
D = VL2U2A(4,IMEA)
E = VL2U2A(5,IMEA)
AM=-0.000000535162
BM=-0.000451417
CM=1.19451
AW=-0.00000324839
BW=0.00165311
CW=0.793041
VH2O = XMW(IH2O)/(AW*T**2+BW*T+CW)
VMEA = XMW(IMEA)/(AM*T**2+BM*T+CM)
XCO2T = XX(IMEACOO) + XX(IHCO3) + XX(ICO2)
XMEAT = XX(IMEACOO) + XX(IMEAH) + XX(IMEA)
XH2OT = XX(IHCO3) + XX(IH2O)
XTOT = XCO2T+XMEAT+XH2OT
XCO2 = XCO2T/XTOT
XMEA = XMEAT/XTOT
XH2O = XH2OT/XTOT
SUM = XMEA*VMEA + XH2O*VH2O + XCO2*A + XMEA*XH2O*(B+C*XMEA)
SUM = SUM+XMEA*XCO2*(D+E*XMEA)
IF (XMEA.EQ.0) THEN
SUM=VI(IH2O)
ELSE IF (XH2O.EQ.0) THEN
SUM=VMEA/1000
ELSE
SUM=SUM/1000
END IF
DSUM=0D0
DPSUM=0D0
The existing RETURN
and END
statements at the end of the code must be retained.
Surface Tension Model
The process for creating the surface tension model is very similar to that used for the viscosity and molar volume models. In the folder containing the Fortran templates, select sig2u2.f
. The following
code should be added to the DECLARE ARGUMENTS
section without deleting the existing code:
INTEGER DMS_KCCIDC,I
INTEGER IH2O,IMEA,IMEACOO,ICO2,IMEAH,IHCO3
REAL*8 XX(100),SUM,DSUM,DPSUM
REAL*8 A,B,C,D,E,F,G,H,K,J
REAL*8 S1,S2,S3,S4,S5,S6
REAL*8 C1W,C1M,C2W,C2M,C3W,C3M,C4W,C4M,TCW,TCM
REAL*8 XMEAT,XCO2T,XH2OT
REAL*8 XMEA,XCO2,XH2O,LDG,WTMEA
REAL*8 FXNF,FXNG,SIGCO2,SIGH2O,SIGMEA
In the BEGIN EXECUTABLE CODE
section, remove the template code and replace with the code given below. The definitions of the liquid surface tension (STMX
) and its temperature and pressure
derivatives (DSTMX
and DPSTMX
) should be retained.
IH2O = DMS_KCCIDC('H2O')
IMEA = DMS_KCCIDC('MEA')
IMEACOO = DMS_KCCIDC('MEACOO-')
ICO2 = DMS_KCCIDC('CO2')
IMEAH = DMS_KCCIDC('MEA+')
IHCO3 = DMS_KCCIDC('HCO3-')
DO I=1,100
XX(I) = 0
END DO
DO I=1,N
IF (IDX(I). EQ. IH2O) XX(IH2O) = Z(I)
IF (IDX(I). EQ. IMEA) XX(IMEA) = Z(I)
IF (IDX(I). EQ. IMEACOO) XX(IMEACOO) = Z(I)
IF (IDX(I). EQ. ICO2) XX(ICO2) = Z(I)
IF (IDX(I). EQ. IMEAH) XX(IMEAH) =Z(I)
IF (IDX(I). EQ. IHCO3) XX(IHCO3) = Z(I)
END DO
A=SIGU2A(1,IMEA)
B=SIGU2A(2,IMEA)
C=SIGU2A(3,IMEA)
D=SIGU2A(4,IMEA)
E=SIGU2A(5,IMEA)
F=SIGU2A(1,IH2O)
G=SIGU2A(2,IH2O)
H=SIGU2A(3,IH2O)
K=SIGU2A(4,IH2O)
J=SIGU2A(5,IH2O)
S1=-5.987
S2=3.7699
S3=-0.43164
S4=0.018155
S5=-0.01207
S6=0.002119
C1W=0.18548
C1M=0.09945
C2W=2.717
C2M=1.067
C3W=-3.554
C3M=0
C4W=2.047
C4M=0
TCW=647.13
TCM=614.45
XCO2T=XX(IMEACOO)+XX(IHCO3)+XX(ICO2)
XMEAT=XX(IMEACOO)+XX(IMEAH)+XX(IMEA)
XH2OT=XX(IH2O)+XX(IHCO3)
WTMEA=(XMW(IMEA)*XMEAT)/(XMW(IMEA)*XMEAT+XMW(IH2O)*XH2OT)
LDG=XCO2T/XMEAT
XMEA=(1+LDG+(XMW(IMEA)/XMW(IH2O))*(1-WTMEA)/WTMEA)**(-1)
XCO2=XMEA*LDG
XH2O=1-XMEA-XCO2
FXNF=A+B*LDG+C*LDG**2+D*WTMEA+E*WTMEA**2
FXNG=F+G*LDG+H*LDG**2+K*WTMEA+J*WTMEA**2
SIGCO2=S1*WTMEA**2+S2*WTMEA+S3+T*(S4*WTMEA**2+S5*WTMEA+S6)
SIGH2O=C1W*(1-T/TCW)**(C2W+C3W*(T/TCW)+C4W*(T/TCW)**2)
SIGMEA=C1M*(1-T/TCM)**(C2M+C3M*(T/TCM)+C4M*(T/TCM)**2)
SUM=SIGH2O+(SIGCO2-SIGH2O)*FXNF*XCO2+(SIGMEA-SIGH2O)*FXNG*XMEA
IF (XMEAT.EQ.0) THEN
SUM=STI(IH2O)
ELSE IF (XH2OT.EQ.0) THEN
SUM=SIGMEA
ELSE
SUM=SUM
END IF
DSUM=0D0
DPSUM=0D0
The existing RETURN
and END
statements at the end of the code must be retained.
Diffusivity Model
Select the template dl0u.f
and add the following statement required for accessing component data stored in the labeled common DMS_PLEX
, to the end of the DECLARE VARIABLES USED IN DIMENSIONING
section:
#include "dms_plex.cmn"
Ensure that the other #include
statements are retained.
The following code should be added to the DECLARE ARGUMENTS
section of the subroutine without deleting the existing code:
INTEGER DMS_KCCIDC,DMS_IFCMNC,NBOPST(6),NAME(2)
INTEGER IH2O,IMEA,IMEACOO,ICO2,IMEAH,IHCO3,IN2,IO2
REAL*8 VISC,MUMX
REAL*8 E,MU0,THET,A,BB,C,R,HG,MUW
REAL*8 B(1)
EQUIVALENCE (B(1),IB(1))
INTEGER DFACT_IDX,EFACT_IDX
REAL*8 DFACTCO2,DFACTMEA,EFACT,CO2DW,CO2D,MEAD
Remove all code given in the BEGIN EXECUTABLE CODE
section, leaving only the final END
statement. Replace this code with the following:
IH2O = DMS_KCCIDC('H2O')
IMEA = DMS_KCCIDC('MEA')
IMEACOO = DMS_KCCIDC('MEACOO-')
ICO2 = DMS_KCCIDC('CO2')
IMEAH = DMS_KCCIDC('MEA+')
IHCO3 = DMS_KCCIDC('HCO3-')
IN2 = DMS_KCCIDC('N2')
IO2 = DMS_KCCIDC('O2')
CALL PPUTL_GOPSET(NBOPST,NAME)
CALL PPMON_VISCL (T, P, X, N, IDX, NBOPST, KDIAG, VISC, KER)
MUMX = VISC
E = 4.753D0
MU0 = 0.000024055D0
THET = 139.7D0
A = 0.000442D0
BB = 0.0009565D0
C = 0.0124D0
R = 0.008314D0
P = P / 100000D0
HG = A * P +((E - BB * P)/(R * (T - THET - C * P)))
MUW = (MU0 * EXP(HG))
DFACT_IDX = DMS_IFCMNC('DFACT1')
EFACT_IDX = DMS_IFCMNC('EFACT')
DFACTCO2 = B(DFACT_IDX+IDX(ICO2))
DFACTMEA = B(DFACT_IDX+IDX(IMEA))
EFACT = B(EFACT_IDX+IDX(ICO2))
CO2DW = 0.00000235D0*EXP(-2119D0/T)
CO2D = CO2DW * (MUW / MUMX)**(0.8D0)*((T/313.15)**(EFACT))
CO2D = CO2D * DFACTCO2
CO2D = ((DFACTCO2)**2)/DFACTMEA * (MUW/MUMX)**0.8
CO2D = CO2D*(T/313.15)**(EFACT)
MEAD = (1/((MUMX/MUW)**0.8D0))*((T/313.15)**(EFACT))
MEAD = MEAD * DFACTMEA
DO 200 I = 1, N
DO 100 J = 1, N
IF (I.EQ.J) THEN
QBIN(I,J) = 0D0
ELSE
QBIN(I,J) = MEAD
IF (I.EQ.ICO2)QBIN(I,J) = CO2D
IF (J.EQ.ICO2)QBIN(I,J) = CO2D
IF (I.EQ.IN2)QBIN(I,J) = CO2D
IF (J.EQ.IN2)QBIN(I,J) = CO2D
END IF
100 CONTINUE
200 CONTINUE
Reaction Kinetics Model
The template to be used for the reaction kinetics model is tiled usrknt.f
, which is designed specifically for use with the reaction kinetics
in rate-based columns (REACT-DIST type reaction). The following code should be placed at the end of the DECLARE VARIABLES USED IN DIMENSIONING
section, after the code lines
EQUIVALENCE (RMISS, USER_RUMISS)
and
EQUIVALENCE (IMISS, USER_IUMISS)
:
#include "dms_rglob.cmn"
#include "dms_lclist.cmn"
#include "pputl_ppglob.cmn"
#include "dms_ipoff3.cmn"
#include "dms_plex.cmn"
EQUIVALENCE(IB(1),B(1))
The following code should be placed in the DECLARE ARGUMENTS
section without deleting the existing code:
INTEGER I,K,FN,L_GAMMA,L_GAMUS,GAM,US,DMS_KFORMC,KPHI,KER
INTEGER DMS_ALIPOFF3,IHELGK
REAL*8 B(1)
REAL*8 N_H2O,N_CO2,N_MEA,N_MEAH,N_MEAC,N_HCO3
REAL*8 PHI(100),DPHI(100),GAMMA(100),COEFFCO2,COEFFMEA
REAL*8 ACCO2,ACMEA,ACH2O,ACMEAH,ACMEAC,ACHCO3,R,STOI(100),LNRKO
REAL*8 DUM,KEQ1,KEQ2,RXNRATES(100)
The following code should be placed in the BEGIN EXECUTABLE CODE
section:
FN(I) = I+LCLIST_LBLCLIST
L_GAMMA(I) = FN(GAM) + I
L_GAMUS(I) = FN(US) + I
N_H2O = DMS_KFORMC('H2O')
N_CO2 = DMS_KFORMC('CO2')
N_MEA = DMS_KFORMC('C2H7NO')
N_MEAH = DMS_KFORMC('C2H8NO+')
N_MEAC = DMS_KFORMC('C3H6NO3-')
N_HCO3 = DMS_KFORMC('HCO3-')
T = TLIQ
KPHI = 1
CALL PPMON_FUGLY(T,P,X,Y,NCOMP,IDX,NBOPST,KDIAG,KPHI,PHI,DPHI,KER)
GAM = DMS_ALIPOFF3(24)
DO I=1,NCOMP
GAMMA(I)=1.D0
IF (INT(1).EQ.1) GAMMA(I) = DEXP(B(L_GAMMA(I)))
END DO
US = DMS_ALIPOFF3(29)
COEFFCO2 = DEXP(B(L_GAMUS(N_CO2)))
COEFFMEA = DEXP(B(L_GAMUS(N_MEA)))
ACCO2 = COEFFCO2*X(N_CO2,1)
ACMEA = COEFFMEA*X(N_MEA,1)
ACH2O = GAMMA(N_H2O)*X(N_H2O,1)
ACMEAH = GAMMA(N_MEAH)*X(N_MEAH,1)
ACMEAC = GAMMA(N_MEAC)*X(N_MEAC,1)
ACHCO3 = GAMMA(N_HCO3)*X(N_HCO3,1)
R = PPGLOB_RGAS/1000
DO I=1,100
STOI(I) = 0D0
END DO
DO I=1,NCOMP
IF (IDX(I).EQ.N_MEA) STOI(I)=-2D0
IF (IDX(I).EQ.N_CO2) STOI(I)=-1D0
IF (IDX(I).EQ.N_MEAH) STOI(I)=1D0
IF (IDX(I).EQ.N_MEAC) STOI(I)=1D0
END DO
LNRKO = RGLOB_RMISS
CALL PPELC_ZKEQ(T,1,1,0,STOI,0D0,NCOMP,IDX,0,1,1,NBOPST,KDIAG,
2 LNRKO,P,IHELGK,DUM,0,0,0)
KEQ1 = DEXP(LNRKO)
DO I=1,100
STOI(I) = 0D0
END DO
DO I=1,NCOMP
IF (IDX(I).EQ.N_MEA) STOI(I)=-1D0
IF (IDX(I).EQ.N_CO2) STOI(I)=-1D0
IF (IDX(I).EQ.N_H2O) STOI(I)=-1D0
IF (IDX(I).EQ.N_MEAH) STOI(I)=1D0
IF (IDX(I).EQ.N_HCO3) STOI(I)=1D0
ENDDO
LNRKO = RGLOB_RMISS
CALL PPELC_ZKEQ(T,1,1,0,STOI,0D0,NCOMP,IDX,0,1,1,NBOPST,KDIAG,
2 LNRKO,P,IHELGK,DUM,0,0,0)
KEQ2 = DEXP(LNRKO)
RXNRATES(1)=REAL(1)*DEXP(-REAL(3)/R*(1/TLIQ-1/298.15))*
2 (ACMEA**2*ACCO2-ACMEAC*ACMEAH/KEQ1)
RXNRATES(2)=REAL(2)*DEXP(-REAL(4)/R*(1/TLIQ-1/298.15))*
2 (ACMEA*ACCO2-ACMEAH*ACHCO3/(KEQ2*ACH2O))
DO K=1,NRL(1)
RXNRATES(K) = RXNRATES(K)*HLDLIQ
RATEL(K) = RXNRATES(K)
END DO
DO I=1,NCOMP
RATES(I)=0.D0
END DO
DO K=1,NRL(1)
DO I=1,NCOMP
IF (DABS(STOIC(I,K)).GE.RGLOB_RMIN) RATES(I) = RATES(I) +
2 STOIC(I,K)*RXNRATES(K)
END DO
END DO
The existing RETURN
and END
statements at the end of the code must be retained.
Mass Transfer Model
The template to be used for the mass transfer model is usrmtrfc.f
. The following should be added to the section titled “Declare local variables
used in the user correlations”:
REAL*8 CL,CV,HYDDIAM,HOLDL
Here, only the code associated with mass transfer coefficients in packed columns will be replaced. This can be accomplished by deleting all code between the lines:
IF (COLTYP .EQ. 1) THEN
and
ELSE IF (COLTYP .EQ. 2) THEN
and replacing this code with:
CL=REAL(1)
CV=REAL(2)
HYDDIAM=4*VOIDFR/SPAREA
rhoLms = DENMXL*AVMWLI
uL = FRATEL / TWRARA / DENMXL
rhoVms = DENMXV*AVMWVA
uV = FRATEV/TWRARA/DENMXV
HOLDL = (12*VISCML*uL*SPAREA**2/(9.81*rhoLms))**0.3333333
IF (IPHASE.EQ.0) THEN
c LIQUID PHASE
EXPKD = 0.50
PREK = CL*(9.81*rhoLms/VISCML)**0.16666667*(1/HYDDIAM)**0.5
PREK = PREK*(uL/SPAREA)**0.333333333
PREK=PREK*TWRARA*HTPACK*AREAIF*DENMXL
ELSE
c VAPOR PHASE
PREK = CV*(SPAREA/HYDDIAM)**0.5
PREK = PREK*(VISCMV/rhoVms)**0.3333333333333
PREK = PREK*(uV*rhoVms/(VISCMV*SPAREA))**0.75
PREK = PREK/(VOIDFR-HOLDL)**0.5
PREK=PREK*TWRARA*HTPACK*AREAIF*DENMXV
EXPKD = 0.66666666667
Note
In earlier versions (up to and including 3.0) of the CCSI Steady State MEA model, the mass transfer coefficients were modeled using the built-in “Billet and Schultes (1993)” and the interfacial area (which is an input to the mass transfer coefficient calculation) with a user subroutine. However, it was determined that when modeling a rate-based column in Aspen Plus V10 with an in-built mass transfer coefficient and a user subroutine for interfacial area, the user-defined interfacial area correlation is overwritten by the in-built interfacial area correlation from the same source as the chosen mass transfer correlation. For this example, the interfacial area correlation associated with the selection “Billet and Schultes (1993)” was used in calculating interfacial area passed on to the mass transfer correlation despite the selection of “User” as the choice for interfacial area method. To fix this problem, the “User” method is used for both mass transfer coefficient and interfacial area methods in the new version of the CCSI Steady State MEA Model. The code for liquid and gas-phase mass transfer coefficients in the user subroutine is based on the equations given in Billet and Schultes, 1 in order to ensure consistency with the original model.
Interfacial Area Model
The template to be used for the interfacial area model is titled usrintfa.f
. The following code should be added to the section titled
“Declare local variables used in the user correlations”:
REAL*8 Aa,Bb
Remove the equations defining the variable dTemp
and replace with the following:
Aa = REAL(2)
Bb = REAL(3)
dTemp = Aa*((WeL*FrL**(-1/3))**Bb)
The existing RETURN
and END
statements at the end of the code must be retained.
Holdup Model
The template to be used for the liquid and vapor holdup in the RateSep
routine is titled usrhldup.f
. No additional variable names need to
be declared. Remove the code between the statements
IF (COLTYP .EQ. 1) THEN
and
ELSE IF (COLTYP .EQ. 2) THEN
Insert the following replacement code:
IF (USRCOR .EQ. 1) THEN
RHOL = AVMWLI*DENMXL
UL = FRATEL/DENMXL/TWRARA
HT=REAL(1)*(3.185966*(VISCML/RHOL)**0.3333*(UL))
+**REAL(2)
LHLDUP = HT * TWRARA * HTPACK
VHLDUP = (1D0 - HT - VOIDFR) * TWRARA * HTPACK
END IF
The existing RETURN
and END
statements at the end of the code must be retained.
Creation of dll
and opt
files
Once the updated Fortran subroutines are ready to be implemented in the Aspen Plus model, open the Customize Aspen Plus utility associated with
the Aspen Plus version of interest. Within the simulation window, navigate to the directory containing the updated .f
files. Enter the following line of code:
aspcomp *.f
This will create a separate .obj
file for all .f
file in the current directory. Alternatively, individual .obj
files can be created by executing the aspcomp
command for each .f
file. Once the .obj
files are created, enter the following code to create the file ccsi10.dll
in the current directory:
asplink ccsi10
The user may modify this command based on their preference for the dll
file name.
The dll
file is called within the ccsi.opt
file distributed with the model. The opt
file may be created as a text file by entering the name of the dll
file that it points to, and changing the file extension to opt
. The opt
file is specified within the Aspen model in order to access the Fortran subroutines.
For users who choose not to create the dll
file, a version is provided with the release notes in the GitHub repository.
References
- 1
Billet, R., Schultes, M., Predicting mass transfer in packed columns. Chem Eng Technol 1993, 16, 1-9.