1 MODULE eos_f_contributions
6 PUBLIC :: f_ideal_gas, f_hard_sphere, f_chain_tpt1, f_chain_tpt_d, &
7 f_chain_hu_liu, f_chain_hu_liu_rc, f_spt, f_disp_pcsaft, &
8 f_association, f_ion_dipole_tbh, f_ion_ion_primmsa, &
9 f_ion_ion_nonprimmsa, f_lc_mayersaupe, f_pert_theory
19 SUBROUTINE f_ideal_gas ( fid )
24 REAL,
INTENT(IN OUT) :: fid
27 REAL,
DIMENSION(nc) :: rhoi
37 fid = fid + x(i) * ( log(rhoi(i)) - 1.0 )
40 END SUBROUTINE f_ideal_gas
46 SUBROUTINE f_hard_sphere ( m_mean2, fhs )
51 REAL,
INTENT(IN) :: m_mean2
52 REAL,
INTENT(IN OUT) :: fhs
54 REAL :: z0, z1, z2, z3, zms
64 fhs= m_mean2*( 3.0*z1*z2/zms + z2**3 /z3/zms/zms + (z2**3 /z3/z3-z0)*log(zms) )/z0
67 END SUBROUTINE f_hard_sphere
73 SUBROUTINE f_chain_tpt1 ( fhc )
75 USE eos_variables, ONLY: nc, ncomp, mseg, x, z0t, z1t, z2t, z3t, &
79 REAL,
INTENT(OUT) :: fhc
82 REAL :: z0, z1, z2, z3, zms
94 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
100 fhc = fhc + x(i) *(1.0- mseg(i)) *log(gij(i,i))
103 END SUBROUTINE f_chain_tpt1
110 SUBROUTINE f_chain_tpt_d ( fhc )
112 USE eos_variables, ONLY: nc, ncomp, mseg, x, z0t, z1t, z2t, z3t, rho, eta, &
116 REAL,
INTENT(OUT) :: fhc
119 REAL,
DIMENSION(nc) :: gij_hd
120 REAL :: z0, z1, z2, z3, zms
132 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
137 gij_hd(i) = 1.0/(2.0*zms) + 3.0*dij_ab(i,i)*z2 / zms**2
142 IF ( mseg(i) >= 2.0 )
THEN 143 fhc = fhc - x(i) * ( mseg(i)/2.0 * log( gij(i,i) ) + ( mseg(i)/2.0 - 1.0 ) * log( gij_hd(i)) )
145 fhc = fhc + x(i) * ( 1.0 - mseg(i) ) * log( gij(i,i) )
149 END SUBROUTINE f_chain_tpt_d
156 SUBROUTINE f_chain_hu_liu ( fhc )
162 REAL,
INTENT(OUT) :: fhc
164 REAL :: a2, b2, c2, a3, b3, c3
165 REAL :: a20, b20, c20, a30, b30, c30
166 REAL :: sum1, sum2, am, bm, cm
172 sum1 = sum( x(1:ncomp)*(mseg(1:ncomp)-1.0) )
173 sum2 = sum( x(1:ncomp)/mseg(1:ncomp)*(mseg(1:ncomp)-1.0)*(mseg(1:ncomp)-2.0) )
181 a20 = - a2 + b2 - 3.0*c2
184 a30 = - a3 + b3 - 3.0*c3
187 am = (3.0 + a20) * sum1 + a30 * sum2
188 bm = (1.0 + b20) * sum1 + b30 * sum2
189 cm = (1.0 + c20) * sum1 + c30 * sum2
191 fhc = - ( (am*eta - bm) / (2.0*zms) + bm/2.0/zms**2 - cm *log(zms) )
194 END SUBROUTINE f_chain_hu_liu
200 SUBROUTINE f_chain_hu_liu_rc ( fhs, fhc )
206 REAL,
INTENT(IN) :: fhs
207 REAL,
INTENT(OUT) :: fhc
209 REAL :: a2, b2, c2, a3, b3, c3
210 REAL :: para1,para2,para3,para4
221 para2 = 0.299154629727814
222 para3 = 1.087271036653154
223 para4 = -0.708979110326831
224 a3 = para1 + para2*chir(1) + para3*chir(1)**2 + para4*chir(1)**3
225 b3 = 3.49695 - (3.49695 + 0.317719074806190)*chir(1)
226 c3 = 4.83207 - (4.83207 - 3.480163780334421)*chir(1)
228 alh = mseg(1)*(1.0 + ((mseg(1)-1.0)/mseg(1))*a2 + ((mseg(1)-1.0)/mseg(1))*((mseg(1)-2.0)/mseg(1))*a3 )
229 blh = mseg(1)*(1.0 + ((mseg(1)-1.0)/mseg(1))*b2 + ((mseg(1)-1.0)/mseg(1))*((mseg(1)-2.0)/mseg(1))*b3 )
230 clh = mseg(1)*(1.0 + ((mseg(1)-1.0)/mseg(1))*c2 + ((mseg(1)-1.0)/mseg(1))*((mseg(1)-2.0)/mseg(1))*c3 )
232 fhc = ((3.0 + alh - blh + 3.0*clh)*eta - (1.0 + alh + blh - clh)) / (2.0*(1.0-eta)) + &
233 (1.0 + alh + blh - clh) / ( 2.0*(1.0-eta)**2 ) + (clh - 1.0)*log(1.0-eta)
237 END SUBROUTINE f_chain_hu_liu_rc
247 SUBROUTINE f_spt ( fhs, fhc )
253 REAL,
INTENT(OUT) :: fhc
254 REAL,
INTENT(IN) :: fhs
256 real,
dimension(nc,nc) :: c0, c1, c2
259 REAL :: msegav,aexv_1,bexv_1,chirav,aexv_2,aexv_3
260 REAL :: bexv_2,vm,b2,a_spt,sm,psi_spt
261 REAL,
DIMENSION(nc,nc) :: b2iso
262 LOGICAL :: vex_williamson, vex_correlation
268 vex_williamson = .false.
269 vex_correlation = .true.
275 IF ( vex_williamson )
THEN 278 msegav = ( mseg(i) + mseg(j) ) / 2.0
279 c0(i,j) = (pi/6.0)*(11.0*msegav - 3.0)
280 c1(i,j) = (pi/6.0)*3.53390 *(mseg(i)-1.0) * (mseg(j)-1.0)
282 b2iso(i,j) = c0(i,j)/2.0 + (pi/8.0)*c1(i,j) + (1.0/3.0)*c2(i,j)
285 ELSEIF ( vex_correlation )
THEN 290 msegav = ( mseg(i) + mseg(j) ) / 2.0
291 chirav = ( chir(i) + chir(j) ) / 2.0
292 aexv_2 = -4.70 + 7.84/msegav
293 aexv_3 = 1.31 - 6.18/msegav
294 bexv_2 = -0.171 + 3.32/msegav
296 c0(i,j) = (pi/6.0)* ( (11.0*msegav - 3.0) + (mseg(i) - 1.0)* &
297 (mseg(j) -1.0)*( aexv_1*(1.0-chirav) + aexv_2*(1.0-chirav)**2 &
298 + aexv_3*(1.0-chirav)**3 ) )
299 c1(i,j) = (pi/6.0)*3.53390*(mseg(i) - 1.0)*(mseg(j) -1.0)*chirav**2
300 c2(i,j) = (pi/6.0)*(mseg(i) - 1.0)*(mseg(j) -1.0)*( bexv_1*(1.0-chirav) &
301 + bexv_2*(1.0-chirav)**2 )
302 b2iso(i,j) = c0(i,j)/2.0 + (pi/8.0)*c1(i,j) + (1.0/3.0)*c2(i,j)
306 write(*,*)
'no model for excluded volume defined' 314 vm = (pi/6.0) * mseg(1)
315 b2 = b2iso(1,1) / vm;
316 a_spt = (b2 - 1.0) / 3.0
318 psi_spt = (sm/(9.0*vm)) * (3.0*a_spt - (sm/(4.0*vm))*(1.0 - (mseg(1)-1.0)*(1.0/4.0) ) )
319 fhc = (psi_spt -1.0)*log(1.0-eta) + 3.0*a_spt*eta/(1.0-eta) + psi_spt*eta/( (1.0-eta)**2 )
329 SUBROUTINE f_disp_pcsaft ( fdsp )
331 USE eos_variables, ONLY: pi, rho, eta, z0t, apar, bpar, order1, order2
334 REAL,
INTENT(IN OUT) :: fdsp
337 REAL :: i1, i2, c1_con, z3, zms, m_mean
342 m_mean = z0t / ( pi / 6.0 )
347 i1 = i1 + apar(m) * z3**m
348 i2 = i2 + bpar(m) * z3**m
351 c1_con= 1.0/ ( 1.0 + m_mean*(8.0*z3-2.0*z3**2 )/zms**4 &
352 + (1.0-m_mean)*( 20.0*z3-27.0*z3**2 +12.0*z3**3 -2.0*z3**4 )/(zms*(2.0-z3))**2 )
354 fdsp = -2.0*pi*rho*i1*order1 - pi*rho*c1_con*m_mean*i2*order2
356 END SUBROUTINE f_disp_pcsaft
407 SUBROUTINE f_association ( eps_kij, k_kij, fhb )
409 USE eos_variables, ONLY: nc, nsite, ncomp, t, z0t, z1t, z2t, z3t, rho, eta, x, &
410 parame, sig_ij, dij_ab, gij, nhb_typ, mx, nhb_no
414 REAL,
INTENT(IN) :: eps_kij, k_kij
415 REAL,
INTENT(IN OUT) :: fhb
418 INTEGER :: i, j, k, l, no, ass_cnt, max_eval
419 REAL,
DIMENSION(nc,nc) :: kap_hb
420 REAL,
DIMENSION(nc,nc,nsite,nsite) :: eps_hb
421 REAL,
DIMENSION(nc,nc,nsite,nsite) :: delta
422 REAL,
DIMENSION(nc,nsite) :: mx_itr
423 REAL :: err_sum, sum0, attenu, tol, ass_s1, ass_s2
424 REAL :: z0, z1, z2, z3, zms
429 IF (nint(parame(i,12)) /= 0) assoc = .true.
442 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
448 IF ( nint(parame(i,12)) /= 0 )
THEN 449 nhb_typ(i) = nint( parame(i,12) )
450 kap_hb(i,i) = parame(i,13)
454 eps_hb(i,i,k,l) = parame(i,(14+no))
459 nhb_no(i,k) = parame(i,(14+no))
467 eps_hb(i,i,k,l) = 0.0
475 IF ( i /= j .AND. (nhb_typ(i) /= 0.AND.nhb_typ(j) /= 0) )
THEN 478 kap_hb(i,j) = (kap_hb(i,i)*kap_hb(j,j))**0.5 &
479 *((parame(i,2)*parame(j,2))**3 )**0.5 &
480 / (0.5*(parame(i,2)+parame(j,2)))**3
481 kap_hb(i,j)= kap_hb(i,j)*(1.0-k_kij)
484 IF ( k /= l .AND. nhb_typ(i) >= 2 .AND. nhb_typ(j) >= 2 )
THEN 485 eps_hb(i,j,k,l) = (eps_hb(i,i,k,l)+eps_hb(j,j,l,k))/2.0
487 eps_hb(i,j,k,l) = eps_hb(i,j,k,l)*(1.0-eps_kij)
488 ELSE IF ( nhb_typ(i) == 1 .AND. l > k )
THEN 489 eps_hb(i,j,k,l) = (eps_hb(i,i,k,k)+eps_hb(j,j,l,k))/2.0
490 eps_hb(j,i,l,k) = (eps_hb(i,i,k,k)+eps_hb(j,j,l,k))/2.0
491 eps_hb(i,j,k,l) = eps_hb(i,j,k,l)*(1.0-eps_kij)
492 eps_hb(j,i,l,k) = eps_hb(j,i,l,k)*(1.0-eps_kij)
504 IF ( parame(i,10) /= 0) kap_hb(i,i)=0.0
506 IF ( parame(i,10) /= 0 .AND. parame(j,10) /= 0 ) kap_hb(i,j) = 0.0
523 delta(i,j,k,l) =gij(i,j) *kap_hb(i,j) *(exp(eps_hb(i,j,k,l)/t) - 1.0) *sig_ij(i,j)**3
529 IF ( mx(i,k) == 0.0 ) mx(i,k) = 1.0
538 IF (eta < 0.2) tol = 1.e-11
539 IF (eta < 0.01) tol = 1.e-14
547 DO WHILE ( err_sum > tol .AND. ass_cnt <= max_eval )
549 ass_cnt = ass_cnt + 1
556 sum0 = sum0 + x(j) * mx(j,l) * nhb_no(j,l) * delta(i,j,k,l)
559 mx_itr(i,k) = 1.0 / (1.0 + sum0 * rho)
566 err_sum = err_sum + abs( mx_itr(i,k) - mx(i,k) )
567 mx(i,k) = mx_itr(i,k) * attenu + mx(i,k) * (1.0 - attenu)
568 IF ( mx(i,k) <= 0.0 ) mx(i,k) = 1.e-50
569 IF ( mx(i,k) > 1.0 ) mx(i,k) = 1.0
575 IF ( err_sum /= err_sum )
write (*,*)
'F_EOS: association NaN',ass_cnt, rho, sum0
576 IF ( err_sum /= err_sum )
read (*,*)
577 IF ( ass_cnt >= max_eval .AND. err_sum > sqrt(tol) )
THEN 578 WRITE(*,
'(a,2G15.7)')
'F_EOS: Max_eval violated (mx) Err_Sum = ',err_sum,tol
585 ass_s1 = ass_s1 + nhb_no(i,k) * ( 1.0 - mx(i,k) )
586 ass_s2 = ass_s2 + nhb_no(i,k) * log(mx(i,k))
588 fhb = fhb + x(i) * ( ass_s2 + ass_s1 / 2.0 )
593 END SUBROUTINE f_association
600 SUBROUTINE f_ion_dipole_tbh ( fhend )
602 USE eos_variables, ONLY: nc, pi, kbol, nav, ncomp, t, rho, eta, x, z0t, parame, uij, sig_ij
605 REAL,
INTENT(IN OUT) :: fhend
607 INTEGER :: i, dipole, ions
609 REAL :: fh32, fh2, fh52, fh3
610 REAL :: e_elem, eps_cc0, rho_sol, dielec
611 REAL :: polabil, ydd, kappa, x_dipol, x_ions
612 REAL,
DIMENSION(nc) :: my2dd, z_ii, e_cd, x_dd, x_ii
613 REAL :: sig_c, sig_d, sig_cd, r_s
614 REAL :: i0cc, i1cc, i2cc, icd, idd
615 REAL :: iccc, iccd, icdd, iddd
618 m_mean = z0t / ( pi / 6.0 )
623 e_elem = 1.602189246e-19
624 eps_cc0 = 8.854187818e-22
629 rho_sol = rho * 18.015 * 1.e27/ nav
630 rho_sol = rho_sol/1000.0
631 dielec = 1.0+(7.62571/(t/293.15))*rho_sol +(2.44e2/(t/293.15)-1.41e2 &
632 + 2.78e1*(t/293.15))*rho_sol**2 &
633 + (-9.63e1/(t/293.15)+4.18e1*(t/293.15) &
634 - 1.02e1*(t/293.15)**2 )*rho_sol**3 +(-4.52e1/(t/293.15)**2 &
635 + 8.46e1/(t/293.15)-3.59e1)*rho_sol**4
652 IF ( parame(i,6) /= 0.0 .AND. uij(i,i) /= 0.0 .AND. x(i) > 0.0 )
THEN 653 my2dd(i) = (parame(i,6))**2 *1.e-49 / (uij(i,i)*kbol*sig_ij(i,i)**3 *1.e-30)
659 z_ii(i) = parame(i,10)
660 IF ( z_ii(i) /= 0.0 .AND. uij(i,i) /= 0.0 .AND. x(i) > 0.0 )
THEN 661 e_cd(i) = ( parame(i,10)*e_elem* 1.e5 / sqrt(1.11265005) )**2 &
662 / ( uij(i,i)*kbol*sig_ij(i,i)*1.e-10 )
670 IF ( dipole == 1 .AND. ions == 1 )
THEN 678 ydd = ydd + x(i)*(parame(i,6))**2 *1.e-49/ (kbol*t*1.e-30)
679 kappa = kappa + x(i) &
680 *(parame(i,10)*e_elem* 1.e5/sqrt(1.11265005))**2 /(kbol*t*1.e-10)
681 IF (parame(i,10) /= 0.0)
THEN 682 x_ions = x_ions + x(i)
684 polabil = polabil + 4.0*pi*x(i)*rho*1.4573 *1.e-30 &
685 / (sig_ij(3,3)**3 *1.e-30)
687 IF (parame(i,6) /= 0.0) x_dipol= x_dipol+ x(i)
689 ydd = ydd * 4.0/9.0 * pi * rho
690 kappa = sqrt( 4.0 * pi * rho * kappa )
698 IF(parame(i,10) /= 0.0 .AND. x_ions /= 0.0) x_ii(i) = x(i)/x_ions
699 IF(parame(i,6) /= 0.0 .AND. x_dipol /= 0.0) x_dd(i) = x(i)/x_dipol
700 sig_c = sig_c + x_ii(i)*parame(i,2)
701 sig_d = sig_d + x_dd(i)*parame(i,2)
703 sig_cd = 0.5 * (sig_c + sig_d)
709 r_s = eta*6.0 / pi / m_mean
711 i0cc = - (1.0 + 0.97743 * r_s + 0.05257*r_s*r_s) &
712 /(1.0 + 1.43613 * r_s + 0.41580*r_s*r_s)
714 i1cc = - (10.0 - 2.0*r_s*pi/6.0 + r_s*r_s*pi/6.0*pi/6.0) &
715 /20.0/(1.0 + 2.0*r_s*pi/6.0)
719 i2cc = -0.33331+0.7418*r_s - 1.2047*r_s*r_s &
720 + 1.6139*r_s**3 - 1.5487*r_s**4 + 0.6626*r_s**5
722 icd = (1.0 + 0.79576 *r_s + 0.104556 *r_s*r_s) &
723 /(1.0 + 0.486704*r_s - 0.0222903*r_s*r_s)
724 idd = (1.0 + 0.18158*r_s - 0.11467*r_s*r_s) &
725 /3.0/(1.0 - 0.49303*r_s + 0.06293*r_s*r_s)
726 iccc= 3.0*(1.0 - 1.05560*r_s + 0.26591*r_s*r_s) &
727 /2.0/(1.0 + 0.53892*r_s - 0.94236*r_s*r_s)
728 iccd= 11.0*(1.0 + 2.25642 *r_s + 0.05679 *r_s*r_s) &
729 /6.0/(1.0 + 2.64178 *r_s + 0.79783 *r_s*r_s)
730 icdd= 0.94685*(1.0 + 2.97323 *r_s + 3.11931 *r_s*r_s) &
731 /(1.0 + 2.70186 *r_s + 1.22989 *r_s*r_s)
732 iddd= 5.0*(1.0 + 1.12754*r_s + 0.56192*r_s*r_s) &
733 /24.0/(1.0 - 0.05495*r_s + 0.13332*r_s*r_s)
735 IF ( sig_c <= 0.0 )
WRITE (*,*)
'error in Henderson ion term' 737 fh32= - kappa**3 /(12.0*pi*rho)
738 fh2 = - 3.0* kappa**2 * ydd*icd /(8.0*pi*rho) / sig_cd &
739 - kappa**4 *sig_c/(16.0*pi*rho)*i0cc
740 IF (sig_d /= 0.0) fh2 = fh2 - 27.0* ydd * ydd*idd &
741 /(8.0*pi*rho) / sig_d**3
742 fh52= (3.0*kappa**3 * ydd + kappa**5 *sig_c**2 *i1cc) &
744 fh3 = - kappa**6 * sig_c**3 /(8.0*pi*rho) *(i2cc-iccc/6.0) &
745 + kappa**4 * ydd *sig_c/(16.0*pi*rho) &
746 *( (6.0+5.0/3.0*sig_d/sig_c)*i0cc + 3.0*sig_d/sig_c*iccd ) &
747 + 3.0*kappa**2 * ydd*ydd /(8.0*pi*rho) / sig_cd &
748 *( (2.0-3.21555*sig_d/sig_cd)*icd +3.0*sig_d/sig_cd*icdd )
749 IF (sig_d /= 0.0) fh3 = fh3 + 27.0*ydd**3 &
750 /(16.0*pi*rho)/sig_d**3 *iddd
752 fhend = ( fh32 + (fh32*fh32*fh3-2.0*fh32*fh2*fh52+fh2**3 ) &
753 /(fh2*fh2-fh32*fh52) ) &
754 / ( 1.0 + (fh32*fh3-fh2*fh52) /(fh2*fh2-fh32*fh52) &
755 - (fh2*fh3-fh52*fh52) /(fh2*fh2-fh32*fh52) )
772 END SUBROUTINE f_ion_dipole_tbh
779 SUBROUTINE f_ion_ion_primmsa ( fcc )
781 USE eos_variables, ONLY: nc, pi, kbol, nav, ncomp, t, rho, x, parame, mx
784 REAL,
INTENT(IN OUT) :: fcc
786 INTEGER :: i, j, cc_it, ions
787 REAL :: e_elem, eps_cc0, rho_sol, dielec
789 REAL :: cc_sig1, cc_sig2, cc_sig3
790 REAL,
DIMENSION(nc) :: z_ii, x_ii, sigm_i, my2dd
791 REAL :: alpha_2, kappa, ii_par
792 REAL :: cc_omeg, p_n, q2_i, cc_q2, cc_gam
793 REAL :: cc_error(2), cc_delt
794 REAL :: rhs,
lambda, lam_s
798 e_elem = 1.602189246e-19
799 eps_cc0 = 8.854187818e-22
804 rho_sol = rho * 18.015 * 1.e27/ nav
805 rho_sol = rho_sol/1000.0
806 dielec = 1.0+(7.62571/(t/293.15))*rho_sol +(2.44e2/(t/293.15)-1.41e2 &
807 +2.78e1*(t/293.15))*rho_sol**2 &
808 +(-9.63e1/(t/293.15)+4.18e1*(t/293.15) &
809 -1.02e1*(t/293.15)**2 )*rho_sol**3 +(-4.52e1/(t/293.15)**2 &
810 +8.46e1/(t/293.15)-3.59e1)*rho_sol**4
840 z_ii(i) = parame(i,10)
841 IF (z_ii(i) /= 0.0)
THEN 842 sigm_i(i) = parame(i,2)
846 IF (z_ii(i) /= 0.0) ions = 1
847 IF (z_ii(i) /= 0.0) x_ions = x_ions + x(i)
850 IF (ions == 1 .AND. x_ions > 0.0)
THEN 856 IF (z_ii(i) /= 0.0)
THEN 857 x_ii(i) = x(i)/x_ions
861 cc_sig1 = cc_sig1 +x_ii(i)*sigm_i(i)
862 cc_sig2 = cc_sig2 +x_ii(i)*sigm_i(i)**2
863 cc_sig3 = cc_sig3 +x_ii(i)*sigm_i(i)**3
868 alpha_2 = e_elem**2 /eps_cc0 / dielec / kbol/t
871 kappa = kappa + x(i)*z_ii(i)*z_ii(i)*mx(i,1)
873 kappa = sqrt( rho * alpha_2 * kappa )
874 ii_par= kappa * cc_sig1
887 cc_delt = cc_delt + x(i)*mx(i,1)*rho*sigm_i(i)**3
889 cc_delt= 1.0 - pi/6.0*cc_delt
899 cc_omeg = cc_omeg +x(i)*mx(i,1)*sigm_i(i)**3 /(1.0+cc_gam*sigm_i(i))
901 cc_omeg = 1.0 + pi/2.0 / cc_delt * rho * cc_omeg
904 p_n = p_n + x(i)*mx(i,1)*rho / cc_omeg*sigm_i(i)*z_ii(i) / (1.0+cc_gam*sigm_i(i))
909 q2_i = q2_i + rho*x(i)*mx(i,1)*( (z_ii(i)-pi/2.0/cc_delt*sigm_i(i)**2 *p_n) &
910 /(1.0+cc_gam*sigm_i(i)) )**2
911 cc_q2 = cc_q2 + x(i)*mx(i,1)*rho*z_ii(i)**2 / (1.0+cc_gam*sigm_i(i))
913 q2_i = q2_i*alpha_2 / 4.0
915 cc_error(j) = cc_gam - sqrt(q2_i)
916 IF (j == 1) cc_gam = cc_gam*1.000001
917 IF (j == 2) cc_gam = cc_gam - cc_error(2)* (cc_gam-cc_gam/1.000001)/(cc_error(2)-cc_error(1))
919 IF ( j == 1 .AND. abs(cc_error(1)) > 1.e-15 )
GO TO 131
920 IF ( cc_it >= 10 )
THEN 921 WRITE (*,*)
' cc error' 924 IF ( j /= 1 )
GO TO 13
926 fcc= - alpha_2 / pi/4.0 /rho* (cc_gam*cc_q2 &
927 + pi/2.0/cc_delt *cc_omeg*p_n**2 ) + cc_gam**3 /pi/3.0/rho
935 my2dd(3) = (parame(3,6))**2 *1.e-19 /(kbol*t)
936 my2dd(3) = (1.84)**2 *1.e-19 /(kbol*t)
938 rhs = 12.0 * pi * rho * x(3) * my2dd(3)
941 lambda = (rhs/((lam_s+2.0)**2 ) + 16.0/((1.0+lam_s)**4 ) )**0.5
942 IF ( abs(lam_s-
lambda) > 1.e-10 )
THEN 943 lam_s = (
lambda + lam_s ) / 2.0
956 END SUBROUTINE f_ion_ion_primmsa
963 SUBROUTINE f_ion_ion_nonprimmsa ( fdd, fqq, fdq, fcc )
968 REAL,
INTENT(IN OUT) :: fdd, fqq, fdq, fcc
972 REAL,
DIMENSION(nc) :: x_export, msegm
976 IF ( sum( parame(1:ncomp,6) ) > 1.e-5 ) dipole = 1
978 IF ( dipole /= 0 )
THEN 989 write (*,*)
'why are individual contrib. A_CC,A_CD,A_DD not used' 993 END SUBROUTINE f_ion_ion_nonprimmsa
1000 SUBROUTINE f_lc_mayersaupe ( flc )
1002 USE eos_variables, ONLY: nc, pi, kbol, nav, ncomp, phas, t, rho, eta, &
1003 x, mseg, e_lc, s_lc, dhs
1006 REAL,
INTENT(IN OUT) :: flc
1009 INTEGER :: liq_crystal, count_lc, steps_lc
1010 REAL :: alpha_lc, tolerance, deltay
1011 REAL :: integrand1, integrand2, accel_lc
1012 REAL :: error_lc, u_term, sphase
1013 REAL,
DIMENSION(nc) :: z_lc, s_lc1, s_lc2, sumu
1014 REAL,
DIMENSION(nc,nc) :: u_lc, klc
1017 COMMON /stabil / stabil
1026 IF ( eta < 0.35 ) accel_lc = 1.3
1027 IF ( eta < 0.15 ) accel_lc = 1.0
1032 e_lc(i,j) = (e_lc(i,i)*e_lc(j,j))**0.5 *(1.0-klc(i,j))
1035 IF (e_lc(i,j) /= 0.0) liq_crystal = 1
1043 IF ( liq_crystal == 1 .AND. phas == 1 .AND. stabil == 0 )
THEN 1049 deltay = 1.0 /
REAL(steps_lc)
1055 u_lc(i,j) = 2.0/3.0*pi*mseg(i)*mseg(j) *(0.5*(dhs(i)+dhs(j)))**3 &
1056 *(e_lc(i,j)/t+s_lc(i,j))*rho
1070 IF (s_lc2(i) <= 0.3) s_lc1(i) = s_lc2(i)
1071 IF (s_lc2(i) > 0.3) s_lc1(i) = s_lc1(i) + (s_lc2(i)-s_lc1(i))*accel_lc
1074 count_lc = count_lc + 1
1083 sumu(i) = sumu(i) + x(j)*u_lc(i,j)*s_lc1(j)
1089 integrand1 = exp(-0.5*sumu(i))
1091 integrand2 = exp(0.5*sumu(i)*(3.0*(deltay*
REAL(k)) **2 -1.0))
1092 z_lc(i) = z_lc(i) + (integrand1 + integrand2)/2.0*deltay
1093 integrand1 = integrand2
1104 integrand1 = -1.0/z_lc(i)*0.5*exp(-0.5*sumu(i))
1106 integrand2 = 1.0/z_lc(i)*0.5*(3.0*(deltay*
REAL(k)) &
1107 **2 -1.0)*exp(0.5*sumu(i)*(3.0 *(deltay*
REAL(k))**2 -1.0))
1108 s_lc2(i) = s_lc2(i) + (integrand1 + integrand2)/2.0*deltay
1109 integrand1 = integrand2
1111 error_lc = error_lc + abs(s_lc2(i)-s_lc1(i))
1116 sphase = sphase + s_lc2(i)
1118 IF (sphase < 1.e-4)
THEN 1128 IF (error_lc > tolerance .AND. count_lc < 400)
GO TO 1
1131 IF (count_lc == 400)
WRITE (*,*)
'LC iteration not converg.' 1140 u_term = u_term + 0.5*x(i)*x(j)*s_lc2(i) *s_lc2(j)*u_lc(i,j)
1146 IF (z_lc(i) /= 0.0) flc = flc - x(i) * log(z_lc(i))
1154 END SUBROUTINE f_lc_mayersaupe
1161 SUBROUTINE f_pert_theory ( fdsp )
1163 USE eos_variables, ONLY: nc, pi, rho, eta, z0t, order1, order2
1168 REAL,
INTENT(IN OUT) :: fdsp
1171 REAL :: z3, zms, c1_con, m_mean
1177 IF (disp_term ==
'PT1')
THEN 1179 CALL f_dft ( i1, i2)
1182 fdsp = + ( - 2.0*pi*rho*i1*order1 )
1184 ELSEIF (disp_term ==
'PT2')
THEN 1186 CALL f_dft ( i1, i2)
1189 m_mean = z0t / ( pi / 6.0 )
1190 c1_con = 1.0/ ( 1.0 + m_mean*(8.0*z3-2.0*z3**2 )/zms**4 &
1191 + (1.0 - m_mean)*( 20.0*z3 -27.0*z3**2 +12.0*z3**3 -2.0*z3**4 ) &
1192 /(zms*(2.0-z3))**2 )
1193 fdsp = + ( - 2.0*pi*rho*i1*order1 - pi*rho*c1_con*m_mean*i2*order2 )
1195 ELSEIF (disp_term ==
'PT_MIX')
THEN 1197 CALL f_pert_theory_mix ( fdsp )
1199 ELSEIF (disp_term ==
'PT_MF')
THEN 1202 i1 = - ( - 8.0/9.0 - 4.0/9.0*(rc**-9 -3.0*rc**-3 ) - tau_cut/3.0*(rc**3 -1.0) )
1203 fdsp = + ( - 2.0*pi*rho*i1*order1 )
1204 write (*,*)
'caution: not thoroughly checked and tested' 1207 write (*,*)
'define the type of perturbation theory' 1214 END SUBROUTINE f_pert_theory
1216 END MODULE eos_f_contributions
double lambda
Latent heat of blowing agent, J/kg.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Module DFT_MODULE This module...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...