MoDeNa  1.0
Software framework facilitating sequential multi-scale modelling
mod_ChemPot.F90
1 Module mod_chempot
2 
3 
4 
5 Implicit None
6 
7 
8 
9 private
10 
11 public :: chemical_potential
12 public :: pcsaft_const
13 REAL, public, allocatable :: chempot_tot(:)
14 REAL, public, allocatable :: chempot_res(:)
15 
16  contains
17 
18 
19 
20 
21 Subroutine chemical_potential
22 
24 Use eos_variables
25 Use parameters
26 USe eos_constants
27 
28 Integer :: k,i,j
29 REAL :: z0t,z1t,z2t,z3t
30 REAL :: z0,z1,z2,z3,zms
31 REAL :: z0_rk,z1_rk,z2_rk,z3_rk
32 REAL, allocatable :: mhs(:), mhc(:)
33 REAL, allocatable :: gij(:,:), gij_rk(:,:), dij_ab(:,:)
34 
35 !DISP HERE!!!
36 INTEGER :: m
37 REAL :: m_mean,i1,i2,i1_rk,i2_rk
38 REAL :: ord1_rk,ord2_rk
39 REAL :: c1_con,c2_con,c1_rk
40 REAL :: order1,order2
41 REAL :: apar(0:6),bpar(0:6)
42 REAL, allocatable :: m_rk(:),mdsp(:)
43 REAL, allocatable :: ap_rk(:,:),bp_rk(:,:)
44 
45 Allocate(mdsp(ncomp),m_rk(ncomp),ap_rk(ncomp,0:6),bp_rk(ncomp,0:6))
46 Allocate(sig_ij(ncomp,ncomp),uij(ncomp,ncomp))
47 
48 kij = 0.0
49 
50 
51 
52 Allocate(mhs(ncomp), mhc(ncomp), chempot_res(ncomp), chempot_tot(ncomp) )
53 Allocate(gij(ncomp,ncomp), gij_rk(ncomp,ncomp), dij_ab(ncomp,ncomp) )
54 
55 
56 !belege dichteunabhängige Parameter (z0z,z1t,z2t,z3t)
57 z0t = pi / 6.0 * sum( xx(1:ncomp) * mseg(1:ncomp) )
58 z1t = pi / 6.0 * sum( xx(1:ncomp) * mseg(1:ncomp) * dhs(1:ncomp) )
59 z2t = pi / 6.0 * sum( xx(1:ncomp) * mseg(1:ncomp) * dhs(1:ncomp)**2 )
60 z3t = pi / 6.0 * sum( xx(1:ncomp) * mseg(1:ncomp) * dhs(1:ncomp)**3 )
61 
62 
63 
64 ! --- Eq.(A.8) ---------------------------------------------------------
65 rho = eta / z3t !total number density [particles/A^3]
66 z0 = z0t * rho
67 z1 = z1t * rho
68 z2 = z2t * rho
69 z3 = z3t * rho
70 
71 zms = 1.0 - eta
72 
73 call pcsaft_const(ap,bp) !get PCSAFT constants
74 
75 DO k = 1, ncomp
76 
77  z0_rk = pi/6.0 * mseg(k)
78  z1_rk = pi/6.0 * mseg(k) * dhs(k)
79  z2_rk = pi/6.0 * mseg(k) * dhs(k)*dhs(k)
80  z3_rk = pi/6.0 * mseg(k) * dhs(k)**3
81 
82  ! --------------------------------------------------------------------
83  ! d(f)/d(x) : hard sphere contribution
84  ! --------------------------------------------------------------------
85  mhs(k) = 6.0/pi* ( 3.0*(z1_rk*z2+z1*z2_rk)/zms + 3.0*z1*z2*z3_rk/zms/zms &
86  + 3.0*z2*z2*z2_rk/z3/zms/zms + z2**3 *z3_rk*(3.0*z3-1.0)/z3/z3/zms**3 &
87  + ((3.0*z2*z2*z2_rk*z3-2.0*z2**3 *z3_rk)/z3**3 -z0_rk) *log(zms) &
88  + (z0-z2**3 /z3/z3)*z3_rk/zms )
89 
90 
91  ! --------------------------------------------------------------------
92  ! d(f)/d(x) : chain term
93  ! --------------------------------------------------------------------
94  DO i = 1, ncomp
95  DO j = 1, ncomp
96  dij_ab(i,j) = dhs(i)*dhs(j) / ( dhs(i) + dhs(j) )
97  END DO
98  END DO
99 
100  DO i = 1, ncomp
101  DO j = 1, ncomp
102  gij(i,j) = 1.0/zms + 3.0*dij_ab(i,j)*z2/zms/zms + 2.0*(dij_ab(i,j)*z2)**2 /zms**3
103  gij_rk(i,j) = z3_rk/zms/zms &
104  + 3.0*dij_ab(i,j)*(z2_rk+2.0*z2*z3_rk/zms)/zms/zms &
105  + dij_ab(i,j)**2 *z2/zms**3 *(4.0*z2_rk+6.0*z2*z3_rk/zms)
106  END DO
107  END DO
108 
109  mhc(k) = 0.0
110  DO i = 1, ncomp
111  mhc(k) = mhc(k) + xx(i)*rho * (1.0-mseg(i)) / gij(i,i) * gij_rk(i,i)
112  END DO
113  mhc(k) = mhc(k) + ( 1.0-mseg(k)) * log( gij(k,k) )
114 
115  ! --------------------------------------------------------------------
116  ! PC-SAFT: d(f)/d(x) : dispersion contribution
117  ! --------------------------------------------------------------------
118 
119  m_mean = z0t / (pi/6.0)
120  m_rk(k) = ( mseg(k) - m_mean ) / rho
121 
122 
123  DO m = 0, 6
124  apar(m) = ap(m,1) + (1.0-1.0/m_mean)*ap(m,2) &
125  + (1.0-1.0/m_mean)*(1.0-2.0/m_mean)*ap(m,3)
126  bpar(m) = bp(m,1) + (1.0-1.0/m_mean)*bp(m,2) &
127  + (1.0-1.0/m_mean)*(1.0-2.0/m_mean)*bp(m,3)
128 
129  ! --- derivatives of apar, bpar to rho_k ---------------------------
130  ap_rk(k,m) = m_rk(k)/m_mean**2 * ( ap(m,2) + (3.0 -4.0/m_mean) *ap(m,3) )
131  bp_rk(k,m) = m_rk(k)/m_mean**2 * ( bp(m,2) + (3.0 -4.0/m_mean) *bp(m,3) )
132  END DO
133 
134  i1 = 0.0
135  i2 = 0.0
136  i1_rk = 0.0
137  i2_rk = 0.0
138  DO m = 0, 6
139  i1 = i1 + apar(m)*eta**REAL(m)
140  i2 = i2 + bpar(m)*eta**REAL(m)
141  i1_rk = i1_rk + apar(m)*REAL(m)*eta**REAL(m-1)*z3_rk + ap_rk(k,m)*eta**REAL(m)
142  i2_rk = i2_rk + bpar(m)*REAL(m)*eta**REAL(m-1)*z3_rk + bp_rk(k,m)*eta**REAL(m)
143  END DO
144 
145  ord1_rk = 0.0
146  ord2_rk = 0.0
147  order1 = 0.0
148  order2 = 0.0
149  DO i = 1,ncomp
150  sig_ij(i,k) = 0.5 * ( dhs(i) + dhs(k) )
151  uij(i,k) = (1.0 - kij(i,k)) * sqrt( eps(i) * eps(k) )
152  order1 = order1 + xx(i)*xx(k)* mseg(i)*mseg(k)*sig_ij(i,k)**3 * uij(i,k)/t
153  order2 = order2 + xx(i)*xx(k)* mseg(i)*mseg(k)*sig_ij(i,k)**3 * (uij(i,k)/t)**2
154  ord1_rk = ord1_rk + 2.0*mseg(k)*rho*xx(i)*mseg(i)*sig_ij(i,k)**3 *uij(i,k)/t
155  ord2_rk = ord2_rk + 2.0*mseg(k)*rho*xx(i)*mseg(i)*sig_ij(i,k)**3 *(uij(i,k)/t)**2
156  END DO
157 
158 
159  c1_con= 1.0/ ( 1.0 + m_mean*(8.0*z3-2.0*z3*z3)/zms**4 &
160  + (1.0 - m_mean)*(20.0*z3-27.0*z3*z3 +12.0*z3**3 -2.0*z3**4 ) &
161  /(zms*(2.0-z3))**2 )
162  c2_con= - c1_con*c1_con *( m_mean*(-4.0*z3*z3+20.0*z3+8.0)/zms**5 &
163  + (1.0 - m_mean) *(2.0*z3**3 +12.0*z3*z3-48.0*z3+40.0) &
164  /(zms*(2.0-z3))**3 )
165  c1_rk= c2_con*z3_rk - c1_con*c1_con*m_rk(k) * ( (8.0*z3-2.0*z3*z3)/zms**4 &
166  - (-2.0*z3**4 +12.0*z3**3 -27.0*z3*z3+20.0*z3) / (zms*(2.0-z3))**2 )
167 
168  mdsp(k) = -2.0*pi* ( order1*rho*rho*i1_rk + ord1_rk*i1 ) &
169  - pi* c1_con*m_mean * ( order2*rho*rho*i2_rk + ord2_rk*i2 ) &
170  - pi* ( c1_con*m_rk(k) + c1_rk*m_mean ) * order2*rho*rho*i2
171 
172 
173 End Do
174 
175 !residual
176  chempot_res(1:ncomp) = mhs(1:ncomp) + mhc(1:ncomp) + mdsp(1:ncomp) ! /kT [-]
177 !total
178  chempot_tot(1:ncomp) = chempot_res(1:ncomp) + log( xx(1:ncomp)*rho ) ! /kT [-]
179 
180 write(*,*)'rhob',xx(1:ncomp)*rho
181 
182 End Subroutine chemical_potential
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 Subroutine pcsaft_const(ap,bp)
193 
194 Implicit None
195 
196 !passed
197 REAL, INTENT(OUT) :: ap(0:6,3)
198 REAL, INTENT(OUT) :: bp(0:6,3)
199 
200 ! --- dispersion term constants ----------------------------------------
201 ap(0,1) = 0.91056314451539
202 ap(0,2) = -0.30840169182720
203 ap(0,3) = -0.09061483509767
204 ap(1,1) = 0.63612814494991
205 ap(1,2) = 0.18605311591713
206 ap(1,3) = 0.45278428063920
207 ap(2,1) = 2.68613478913903
208 ap(2,2) = -2.50300472586548
209 ap(2,3) = 0.59627007280101
210 ap(3,1) = -26.5473624914884
211 ap(3,2) = 21.4197936296668
212 ap(3,3) = -1.72418291311787
213 ap(4,1) = 97.7592087835073
214 ap(4,2) = -65.2558853303492
215 ap(4,3) = -4.13021125311661
216 ap(5,1) = -159.591540865600
217 ap(5,2) = 83.3186804808856
218 ap(5,3) = 13.7766318697211
219 ap(6,1) = 91.2977740839123
220 ap(6,2) = -33.7469229297323
221 ap(6,3) = -8.67284703679646
222 
223 bp(0,1) = 0.72409469413165
224 bp(0,2) = -0.57554980753450
225 bp(0,3) = 0.09768831158356
226 bp(1,1) = 1.11913959304690 *2.0
227 bp(1,2) = 0.34975477607218 *2.0
228 bp(1,3) = -0.12787874908050 *2.0
229 bp(2,1) = -1.33419498282114 *3.0
230 bp(2,2) = 1.29752244631769 *3.0
231 bp(2,3) = -3.05195205099107 *3.0
232 bp(3,1) = -5.25089420371162 *4.0
233 bp(3,2) = -4.30386791194303 *4.0
234 bp(3,3) = 5.16051899359931 *4.0
235 bp(4,1) = 5.37112827253230 *5.0
236 bp(4,2) = 38.5344528930499 *5.0
237 bp(4,3) = -7.76088601041257 *5.0
238 bp(5,1) = 34.4252230677698 *6.0
239 bp(5,2) = -26.9710769414608 *6.0
240 bp(5,3) = 15.6044623461691 *6.0
241 bp(6,1) = -50.8003365888685 *7.0
242 bp(6,2) = -23.6010990650801 *7.0
243 bp(6,3) = -4.23812936930675 *7.0
244 
245 
246 End Subroutine pcsaft_const
247 
248 
249 
250 End Module mod_chempot
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains constant...
Definition: modules.f90:6
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
Definition: modules.f90:200
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
Definition: modules.f90:120
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
Definition: modules.f90:29