6 PUBLIC :: f_numerical, phi_numerical, p_numerical, h_numerical
15 SUBROUTINE f_numerical
19 use eos_polar
, only: f_polar
21 disp_term, hb_term, lc_term, ii_term, id_term
22 USE eos_f_contributions
, ONLY:f_ideal_gas, f_hard_sphere, f_chain_tpt1, &
23 f_chain_tpt_d, f_chain_hu_liu, f_chain_hu_liu_rc, f_spt, &
24 f_disp_pcsaft, f_association, f_ion_dipole_tbh, f_ion_ion_primmsa, &
25 f_ion_ion_nonprimmsa, f_lc_mayersaupe, f_pert_theory
31 REAL :: fid, fhs, fdsp, fhc
32 REAL :: fhb, fdd, fqq, fdq
36 REAL :: eps_kij, k_kij
54 if ( eta < 1.e-100 )
return 57 CALL perturbation_parameter
68 order1 = order1 + x(i)*x(j)* mseg(i)*mseg(j) * sig_ij(i,j)**3 * uij(i,j)/t
69 order2 = order2 + x(i)*x(j)* mseg(i)*mseg(j) * sig_ij(i,j)**3 * (uij(i,j)/t)**2
74 order1 = order1 + x(i)*mseg(i)/t*( x(j)*mseg(j) &
76 * sig_ij(i,j)*(uij(i,i)*uij(j,j))**(1.0/6.0) )**3 *lij(i,j)
89 m_mean2 = m_mean2 + x(i)*x(j)*(mseg(i)+mseg(j))/2.0
99 IF ( ideal_gas ==
'yes' )
CALL f_ideal_gas ( fid )
103 IF ( hard_sphere ==
'CSBM' )
CALL f_hard_sphere ( m_mean2, fhs )
107 IF ( chain_term ==
'TPT1' )
CALL f_chain_tpt1 ( fhc )
108 IF ( chain_term ==
'TPT2' )
CALL f_chain_tpt_d ( fhc )
109 IF ( chain_term ==
'HuLiu' )
CALL f_chain_hu_liu ( fhc )
110 IF ( chain_term ==
'HuLiu_rc' )
CALL f_chain_hu_liu_rc ( fhs, fhc )
111 IF ( chain_term ==
'SPT' )
CALL f_spt ( fhs, fhc )
115 IF ( disp_term ==
'PC-SAFT')
CALL f_disp_pcsaft ( fdsp )
117 IF ( disp_term(1:2) ==
'PT')
CALL f_pert_theory ( fdsp )
121 IF ( hb_term ==
'TPT1_Chap')
CALL f_association( eps_kij, k_kij, fhb )
125 CALL f_polar ( fdd, fqq, fdq )
129 IF ( id_term ==
'TBH')
CALL f_ion_dipole_tbh ( fhend )
133 IF ( ii_term ==
'primMSA')
CALL f_ion_ion_primmsa ( fcc )
134 IF ( ii_term ==
'nprMSA')
CALL f_ion_ion_nonprimmsa ( fdd, fqq, fdq, fcc )
138 IF ( lc_term ==
'MSaupe')
CALL f_lc_mayersaupe ( flc )
153 fres = fid + fhs + fhc + fdsp + fhb + fdd + fqq + fdq + fcc + flc
157 END SUBROUTINE f_numerical
165 SUBROUTINE phi_numerical
174 REAL :: fres1, fres2, fres3, fres4, fres5
176 REAL :: delta_factor, delta_rho_thrash
177 REAL,
DIMENSION(nc) :: myres
178 REAL,
DIMENSION(nc) :: rhoi, rhoi_0
179 REAL :: tfr_1, tfr_2, tfr_3, tfr_4, tfr_5
187 IF (ensemble_flag ==
'tp')
THEN 188 CALL density_iteration
189 ELSEIF (ensemble_flag ==
'tv')
THEN 193 write (*,*)
'PHI_EOS: define ensemble, ensemble_flag == (tv) or (tp)' 201 zges = (p * 1.e-30) / (kbol*t*eta/z3t)
202 IF ( ensemble_flag ==
'tv' ) zges = (pges * 1.e-30) / (kbol*t*eta/z3t)
206 rhoi_0(1:ncomp) = x(1:ncomp) * eta/z3t
207 rhoi(1:ncomp) = rhoi_0(1:ncomp)
215 IF (sum(nhb_typ(1:ncomp)) /= 0) delta_rho = 1.e-3
216 delta_rho_thrash = 1.e-6
220 IF ( rhoi_0(k) > delta_rho_thrash )
THEN 221 delta_rho = delta_factor * rhoi_0(k)
223 delta_rho = delta_rho_thrash * delta_factor
226 rhoi(k) = rhoi_0(k) + delta_rho
227 eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
228 x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
229 rho = sum( rhoi(1:ncomp) )
234 rhoi(k) = rhoi_0(k) + 0.5 * delta_rho
235 eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
236 x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
237 rho = sum( rhoi(1:ncomp) )
244 IF ( rhoi_0(k) > delta_rho )
THEN 246 rhoi(k) = rhoi_0(k) - 0.5 * delta_rho
247 eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
248 x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
249 rho = sum( rhoi(1:ncomp) )
254 rhoi(k) = rhoi_0(k) - delta_rho
255 eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
256 x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
257 rho = sum( rhoi(1:ncomp) )
265 eta = pi/6.0 * sum( rhoi(1:ncomp)*mseg(1:ncomp)*dhs(1:ncomp)**3 )
266 x(1:ncomp) = rhoi(1:ncomp) / sum( rhoi(1:ncomp) )
267 rho = sum( rhoi(1:ncomp) )
272 IF ( rhoi_0(k) > delta_rho )
THEN 273 myres(k) = ( fres5 - 8.0*fres4 + 8.0*fres2 - fres1 ) / ( 6.0*delta_rho )
275 myres(k) = ( -3.0*fres3 + 4.0*fres2 - fres1 ) / delta_rho
292 IF (ensemble_flag ==
'tp') lnphi(k) = myres(k) - log(zges)
293 IF (ensemble_flag ==
'tv' .AND. eta >= 0.0) lnphi(k) = myres(k)
300 END SUBROUTINE phi_numerical
307 SUBROUTINE p_numerical
313 REAL :: dzetdv, eta_0, dist, fact
314 REAL :: fres1, fres2, fres3, fres4, fres5
315 REAL :: df_dr, df_drdr, pideal, dpiddz
316 REAL :: tfr_1, tfr_2, tfr_3, tfr_4, tfr_5
322 ELSE IF (eta <= 0.1 .AND. eta > 0.01)
THEN 327 dist = eta*3.e-3 *fact
331 eta = eta_0 - 2.0*dist
343 eta = eta_0 + 2.0*dist
369 df_dr = (-fres4+8.0*fres3-8.0*fres2+fres1) / (12.0*dist)
370 df_drdr = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
376 pges = (-fres4+8.0*fres3-8.0*fres2+fres1) &
377 /(12.0*dist) *dzetdv*(kbol*t)/1.e-30
379 dpiddz = 1.0/z3t*(kbol*t)/1.e-30
380 pgesdz = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
381 /(12.0*(dist**2 ))* dzetdv*(kbol*t)/1.e-30 &
382 + (-fres4+8.0*fres3-8.0*fres2+fres1) /(12.0*dist) * 2.0 *rho &
383 *(kbol*t)/1.e-30 + dpiddz
385 pgesd2 = (fres4-2.0*fres3+2.0*fres2-fres1) /(2.0*dist**3 ) &
386 * dzetdv*(kbol*t)/1.e-30 &
387 + (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) /(12.0*(dist**2 )) &
388 * 4.0 *rho *(kbol*t)/1.e-30 + (-fres4+8.0*fres3-8.0*fres2+fres1) &
389 /(12.0*dist) * 2.0 /z3t *(kbol*t)/1.e-30
390 pgesd3 = (fres4-4.0*fres3+6.0*fres5-4.0*fres2+fres1) /(dist**4 ) &
391 * dzetdv*(kbol*t)/1.e-30 + (fres4-2.0*fres3+2.0*fres2-fres1) &
392 /(2.0*dist**3 ) * 6.0 *rho *(kbol*t)/1.e-30 &
393 + (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
394 /(12.0*dist**2 )* 6.0 /z3t *(kbol*t)/1.e-30
397 pideal = rho * (kbol*t) / 1.e-30
402 END SUBROUTINE p_numerical
410 SUBROUTINE h_numerical
416 REAL :: dist, fact, rho_0
417 REAL :: fres1,fres2,fres3,fres4,fres5
418 REAL :: f_1, f_2, f_3, f_4
419 REAL :: cv_res, t_tmp, zges
420 REAL :: f_dt, f_dtdt, f_dr, f_drdr, f_drdt
424 CALL perturbation_parameter
429 dist = t * 100.e-5 * fact
434 CALL perturbation_parameter
439 CALL perturbation_parameter
444 CALL perturbation_parameter
449 CALL perturbation_parameter
454 CALL perturbation_parameter
460 zges = (p * 1.e-30)/(kbol*t*rho_0)
463 f_dt = (-fres4+8.0*fres3-8.0*fres2+fres1)/(12.0*dist)
464 f_dtdt = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) /(12.0*(dist**2 ))
466 s_res = (- f_dt -fres/t)*rgas*t + rgas * log(zges)
467 h_res = ( - t*f_dt + zges-1.0 ) * rgas*t
468 cv_res = -( t*f_dtdt + 2.0*f_dt ) * rgas*t
473 CALL perturbation_parameter
476 f_1 = pges/(eta*rho_0*(kbol*t)/1.e-30)
479 CALL perturbation_parameter
482 f_2 = pges/(eta*rho_0*(kbol*t)/1.e-30)
485 CALL perturbation_parameter
488 f_3 = pges/(eta*rho_0*(kbol*t)/1.e-30)
491 CALL perturbation_parameter
494 f_4 = pges/(eta*rho_0*(kbol*t)/1.e-30)
497 CALL perturbation_parameter
501 f_dr = pges / (eta*rho_0*(kbol*t)/1.e-30)
502 f_drdr = pgesdz/ (eta*rho_0*(kbol*t)/1.e-30) - f_dr*2.0/eta - 1.0/eta**2
504 f_drdt = ( - f_4 + 8.0*f_3 - 8.0*f_2 + f_1 ) / ( 12.0*dist )
506 cp_res = cv_res - rgas + rgas*( zges + eta*t*f_drdt)**2 / (1.0 + 2.0*eta*f_dr + eta**2 *f_drdr)
510 END SUBROUTINE h_numerical
512 END MODULE eos_numerical
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains constant...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Module DFT_MODULE This module...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...