17 SUBROUTINE fugacity (ln_phi)
19 USE basic_variables, only: nc, np, eos, nphas, ncomp, xi, dense, densta, p_cal, &
20 z_cal, my_cal, rhoi_cal, f_res, gibbs, ensemble_flag
21 USE eos_variables, ONLY: phas, x, t, eta, eta_start, lnphi, fres, rho, pges, kbol
25 REAL,
INTENT(OUT) :: ln_phi(np,nc)
29 LOGICAL :: trivial_result
37 eta_start = densta(ph)
38 x(1:ncomp) = xi(ph,1:ncomp)
40 CALL check_eos_variables ( trivial_result )
41 IF ( trivial_result )
return 47 CALL phi_eos_interface
53 rhoi_cal(ph,1:ncomp) = rho * x(1:ncomp)
56 z_cal(ph) = pges / ( kbol*1.e30 * t * rho )
61 ln_phi(ph,1:ncomp) = lnphi(1:ncomp)
64 if ( ( x(i) * rho ) > 1.e-200 )
then 65 my_cal( ph, i ) = lnphi( i ) + log( x(i) * rho )
67 my_cal( ph, i ) = - 1.e200
70 if ( ensemble_flag ==
'tp' ) my_cal(ph,1:ncomp) = my_cal(ph,1:ncomp) + log(z_cal(ph))
75 gibbs(ph) = sum( x(1:ncomp) * lnphi(1:ncomp) )
76 f_res(ph) = fres * rho
78 if ( x(i) > 1.e-200 ) gibbs(ph) = gibbs(ph) + x(i) * log( x(i)*rho )
79 if ( x(i) > 1.e-200 ) f_res(ph) = f_res(ph) + x(i) * rho * ( log( x(i)*rho) - 1.0 )
81 if ( ensemble_flag ==
'tp' ) gibbs(ph) = gibbs(ph) + log( z_cal(ph) )
104 END SUBROUTINE fugacity
113 SUBROUTINE check_eos_variables ( trivial_result )
116 USE eos_variables, ONLY: x, eta, eta_start, lnphi, fres, rho, pges, kbol, z3t
121 LOGICAL,
INTENT(OUT) :: trivial_result
128 trivial_result = .false.
134 IF ( ensemble_flag /=
'tp' .AND. ensemble_flag /=
'tv' )
THEN 135 WRITE(*,*)
' FUGACITY: variable ensemble_flag is undefined ',ensemble_flag
143 IF ( eta_start /= eta_start )
THEN 144 WRITE(*,*)
' FUGACITY: density input is "not a number" !' 145 trivial_result = .true.
149 IF ( x(i) /= x(i) )
THEN 150 WRITE(*,*)
' FUGACITY: composition input x is "not a number" ! Species:',i
151 trivial_result = .true.
159 sum_x = sum( x(1:ncomp) )
160 IF ( sum_x /= 1.0 )
THEN 161 IF ( (sum_x - 1.0 ) < 1.e-4 .AND. (sum_x - 1.0 ) > -1.e-4 )
THEN 162 x( 1:ncomp ) = x( 1:ncomp ) / sum_x
171 sum_x = sum( x(1:ncomp) )
172 IF ( (sum_x - 1.0 ) > 1.e-8 .OR. (sum_x - 1.0 ) < -1.e-8 )
THEN 174 if ( sum( x(1:ncomp) ) < 0.2 ) x(1:ncomp) = x(1:ncomp) / sum( x(1:ncomp) )
178 IF ( minval( x(1:ncomp) ) < 0.0 )
THEN 179 WRITE(*,*)
' FUGACITY: mole fraction x is negative, of species', minloc(x(1:ncomp))
183 IF ( x(i) < 1.e-50 ) x(i) = 0.0
190 IF ( ensemble_flag ==
'tp' .AND. p < 1.e-100 )
THEN 191 WRITE(*,*)
' FUGACITY: PRESSURE TOO LOW', p
195 IF ( ensemble_flag ==
'tv' .AND. eta_start < 1.e-100 )
THEN 196 WRITE(*,*)
' FUGACITY: DENSITY TOO LOW', eta_start
198 trivial_result = .true.
205 IF ( trivial_result )
THEN 206 CALL perturbation_parameter
208 pges = kbol*1.e30 * t * rho
213 END SUBROUTINE check_eos_variables
222 subroutine p_eos_interface
230 ELSE IF (num == 1)
THEN 232 ELSE IF (num == 2)
THEN 235 write (*,*)
'p_eos_interface: define calculation option (num)' 238 end subroutine p_eos_interface
247 subroutine f_eos_interface
255 ELSE IF (num == 1)
THEN 257 ELSE IF (num == 2)
THEN 260 write (*,*)
'f_eos_interface: define calculation option (num)' 264 end subroutine f_eos_interface
273 subroutine phi_eos_interface
281 ELSE IF (num == 1)
THEN 283 ELSE IF (num == 2)
THEN 284 CALL phi_critical_renorm
286 write (*,*)
'phi_eos_interface: define calculation option (num)' 289 end subroutine phi_eos_interface
298 subroutine h_eos_interface
306 ELSE IF (num == 1)
THEN 308 ELSE IF (num == 2)
THEN 309 write (*,*)
'enthalpy_etc: incorporate H_EOS_RN' 313 write (*,*)
'phi_eos_interface: define calculation option (num)' 316 end subroutine h_eos_interface
339 USE eos_polar
, only: phi_polar
343 INTEGER :: i, j, k, ii, jj, kk, m
344 REAL :: z0, z1, z2, z3, z0_rk, z1_rk, z2_rk, z3_rk
345 REAL :: ome, ome2, ome3, m_mean
346 REAL,
DIMENSION(nc) :: mhs, mdsp, mhc, myres
349 REAL :: gij_rk(nc,nc)
353 REAL :: i1, i2, i1_rk, i2_rk
354 REAL :: ord1_rk, ord2_rk
355 REAL :: c1_con, c2_con, c1_rk
356 REAL,
DIMENSION(nc,0:6) :: ap_rk, bp_rk
359 REAL :: ass_s2, m_hbon(nc)
361 REAL :: fdd_rk, fqq_rk, fdq_rk
362 REAL,
DIMENSION(nc) :: my_dd, my_qq, my_dq
368 CALL perturbation_parameter
374 IF ( ensemble_flag ==
'tp' )
THEN 375 CALL density_iteration
376 ELSEIF ( ensemble_flag ==
'tv' )
THEN 383 IF ( rho /= rho )
write (*,*)
'PHI_EOS: error in density',eta, z3t
384 IF ( rho /= rho ) stop
390 m_mean = z0t / (pi/6.0)
398 zges = (p * 1.e-30) / (kbol*t*rho)
399 IF ( ensemble_flag ==
'tv' ) zges = (pges * 1.e-30) / (kbol*t*rho)
410 z0_rk = pi/6.0 * mseg(k)
411 z1_rk = z0_rk * dhs(k)
412 z2_rk = z1_rk * dhs(k)
413 z3_rk = z2_rk * dhs(k)
416 m_rk = ( mseg(k) - m_mean ) / rho
431 if ( z3**3 > 0.0 )
then 432 mhs(k) = 6.0/pi* ( 3.0*(z1_rk*z2+z1*z2_rk)/ome + 3.0*z1*z2*z3_rk/ome2 &
433 + 3.0*z2*z2*z2_rk/z3/ome2 + z2**3 *z3_rk*(3.0*z3-1.0)/z3/z3/ome3 &
434 + ((3.0*z2*z2*z2_rk*z3-2.0*z2**3 *z3_rk)/z3**3 -z0_rk) *log(ome) &
435 + (z0-z2**3 /z3/z3)*z3_rk/ome )
443 gij(i,j) = 1.0/ome + 3.0*dij_ab(i,j)*z2/ome2 + 2.0*(dij_ab(i,j)*z2)**2 /ome3
444 gij_rk(i,j) = z3_rk/ome2 &
445 + 3.0*dij_ab(i,j)*(z2_rk+2.0*z2*z3_rk/ome)/ome2 &
446 + dij_ab(i,j)**2 *z2/ome3 *(4.0*z2_rk+6.0*z2*z3_rk/ome)
452 mhc(k) = mhc(k) + x(i)*rho * (1.0-mseg(i)) / gij(i,i) * gij_rk(i,i)
454 mhc(k) = mhc(k) + ( 1.0-mseg(k)) * log( gij(k,k) )
463 ap_rk(k,m) = m_rk/m_mean**2 * ( ap(m,2) + (3.0 -4.0/m_mean) *ap(m,3) )
464 bp_rk(k,m) = m_rk/m_mean**2 * ( bp(m,2) + (3.0 -4.0/m_mean) *bp(m,3) )
473 i1 = i1 + apar(m) * z3_m
474 i2 = i2 + bpar(m) * z3_m
475 i1_rk = i1_rk + apar(m) *
REAL(m) * eta**(m-1) * z3_rk + ap_rk(k,m) * z3_m
476 i2_rk = i2_rk + bpar(m) *
REAL(m) * eta**(m-1) * z3_rk + bp_rk(k,m) * z3_m
482 ord1_rk = ord1_rk + 2.0*mseg(k)*rho*x(i)*mseg(i)*sig_ij(i,k)**3 *uij(i,k)/t
483 ord2_rk = ord2_rk + 2.0*mseg(k)*rho*x(i)*mseg(i)*sig_ij(i,k)**3 *(uij(i,k)/t)**2
486 c1_con= 1.0/ ( 1.0 + m_mean*(8.0*z3-2.0*z3*z3)/ome2/ome2 &
487 + (1.0 - m_mean)*(20.0*z3-27.0*z3*z3 +12.0*z3**3 -2.0*z3**4 ) &
489 c2_con= - c1_con*c1_con *( m_mean*(-4.0*z3*z3+20.0*z3+8.0)/ome2/ome3 &
490 + (1.0 - m_mean) *(2.0*z3**3 +12.0*z3*z3-48.0*z3+40.0) &
492 c1_rk= c2_con*z3_rk - c1_con*c1_con*m_rk * ( (8.0*z3-2.0*z3*z3)/ome2/ome2 &
493 - (-2.0*z3**4 +12.0*z3**3 -27.0*z3*z3+20.0*z3) / (ome*(2.0-z3))**2 )
495 mdsp(k) = -2.0*pi* ( order1*rho*rho*i1_rk + ord1_rk*i1 ) &
496 - pi* c1_con*m_mean * ( order2*rho*rho*i2_rk + ord2_rk*i2 ) &
497 - pi* ( c1_con*m_rk + c1_rk*m_mean ) * order2*rho*rho*i2
506 IF (nhb_typ(i) /= 0) assoc = .true.
511 DO kk = 1, nhb_typ(k)
512 ass_s2 = ass_s2 + nhb_no(k,kk) * log(mx(k,kk))
517 DO ii = 1, nhb_typ(i)
519 DO jj = 1, nhb_typ(j)
520 m_hbon(k) = m_hbon(k) - rho * rho / 2.0 * x(i) * x(j) * mx(i,ii) * mx(j,jj) &
521 * nhb_no(i,ii)*nhb_no(j,jj) *gij_rk(i,j) *ass_d(i,j,ii,jj)
533 CALL phi_polar ( k, z3_rk, fdd_rk, fqq_rk, fdq_rk )
542 myres(k) = mhs(k) +mhc(k) +mdsp(k) +m_hbon(k) +my_dd(k) +my_qq(k) +my_dq(k)
555 IF (ensemble_flag ==
'tp' ) lnphi(k) = myres(k) - log(zges)
556 IF (ensemble_flag ==
'tv' ) lnphi(k) = myres(k)
567 END SUBROUTINE phi_eos
581 SUBROUTINE dda_drhoi_drhoj_eos ( n_comp, rhoi, A_rr, Aig_rr )
589 integer,
intent(in) :: n_comp
590 real,
dimension(n_comp),
intent(in) :: rhoi
591 real,
dimension(n_comp,n_comp),
intent(out) :: a_rr
592 real,
dimension(n_comp,n_comp),
intent(out) :: aig_rr
595 integer :: i, j, k, l, m
596 integer :: n_dim, m_dim
597 integer :: ii, jj, ll, iii, jjj, kk, lll
598 real :: z0, z1, z2, z3
599 real,
allocatable,
dimension(:) :: z0_r, z1_r, z2_r, z3_r
601 real :: ome, ome2, ome3, pi_6
602 real :: ahs_rkrl, ahc_rkrl, adsp_rkrl
603 real,
allocatable,
dimension(:) :: m_r
604 real :: a_term, b_term, m_rkrl
605 real,
allocatable,
dimension(:,:,:) :: gij_r
606 real,
allocatable,
dimension(:,:,:,:) :: gij_rr
608 real,
allocatable,
dimension(:,:) :: q_xx, q_xr, q_xr_transpose, q_rr
609 real,
allocatable,
dimension(:,:) :: ahb_rr, a_polar_rr
612 real,
allocatable,
dimension(:,:) :: ap_r, bp_r
613 real,
dimension(0:6) :: ap_rkrl, bp_rkrl
615 real,
allocatable,
dimension(:) :: i1_r, i2_r
616 real :: i1_rkrl, i2_rkrl
617 real,
allocatable,
dimension(:) :: ord1_r, ord2_r
618 real :: ord1_rkrl, ord2_rkrl
619 real :: eta_m, aux_term_k
620 real :: c1_con, c2_con, c3_con, c2_dm
621 real,
allocatable,
dimension(:) :: c1_r
623 real :: chi_dm, chi_dmdeta
628 allocate( z0_r(ncomp), z1_r(ncomp), z2_r(ncomp), z3_r(ncomp) )
629 allocate( gij_r(ncomp,ncomp,ncomp) )
630 allocate( gij_rr(ncomp,ncomp,ncomp,ncomp) )
631 allocate( m_r(ncomp) )
632 allocate( ap_r(ncomp,0:6), bp_r(ncomp,0:6) )
633 allocate( i1_r(ncomp), i2_r(ncomp) )
634 allocate( ord1_r(ncomp), ord2_r(ncomp) )
635 allocate( c1_r(ncomp) )
636 allocate( a_polar_rr( ncomp, ncomp ) )
638 rho = sum( rhoi(1:ncomp) )
639 x(1:ncomp) = rhoi(1:ncomp) / rho
644 CALL perturbation_parameter
646 IF ( rho /= rho )
write (*,*)
'ddA_dhoi_drhoi_EOS: error in density',eta, z3t
647 IF ( rho /= rho ) stop
655 m_mean = z0t / (pi/6.0)
666 c1_con= 1.0/ ( 1.0 + m_mean*(8.0*z3-2.0*z3*z3)/ome2/ome2 &
667 + (1.0 - m_mean)*(20.0*z3-27.0*z3*z3 +12.0*z3**3 -2.0*z3**4 ) &
669 c2_con= - c1_con*c1_con *( m_mean*(-4.0*z3*z3+20.0*z3+8.0)/ome**5 &
670 + (1.0 - m_mean) *(2.0*z3**3 +12.0*z3*z3-48.0*z3+40.0) &
672 c3_con= 2.0 * c2_con*c2_con/c1_con - c1_con*c1_con &
673 *( m_mean*(-12.0*eta**2 +72.0*eta+60.0)/ome**6 &
675 *(-6.0*eta**4 -48.0*eta**3 +288.0*eta**2 &
676 -480.0*eta+264.0) /(ome*(2.0-eta))**4 )
677 chi_dm = (8.0*z3-2.0*z3*z3)/ome**4 &
678 - (-2.0*z3**4 +12.0*z3**3 -27.0*z3*z3+20.0*z3) / (ome*(2.0-z3))**2
679 chi_dmdeta = (-4.0*z3*z3+20.0*z3+8.0)/ome**5 &
680 - (2.0*z3**3 +12.0*z3*z3-48.0*z3+40.0) / (ome*(2.0-z3))**3
681 c2_dm = - 2.0*c2_con*c1_con*chi_dm - c1_con*c1_con*chi_dmdeta
685 z0_r(k) = pi_6 * mseg(k)
686 z1_r(k) = z0_r(k) * dhs(k)
687 z2_r(k) = z1_r(k) * dhs(k)
688 z3_r(k) = z2_r(k) * dhs(k)
692 gij(i,j) = 1.0/ome + 3.0*dij_ab(i,j)*z2/ome2 + 2.0*(dij_ab(i,j)*z2)**2 /ome3
693 gij_r(k,i,j) = z3_r(k)/ome2 &
694 + 3.0*dij_ab(i,j)*(z2_r(k)+2.0*z2*z3_r(k)/ome)/ome2 &
695 + dij_ab(i,j)**2 *z2/ome3 *(4.0*z2_r(k)+6.0*z2*z3_r(k)/ome)
699 m_r(k) = ( mseg(k) - m_mean ) / rho
702 a_term = ( ap(m,2) + (3.0 -4.0/m_mean) *ap(m,3) ) / m_mean/m_mean
703 b_term = ( bp(m,2) + (3.0 -4.0/m_mean) *bp(m,3) ) / m_mean/m_mean
704 ap_r(k,m) = m_r(k) * a_term
705 bp_r(k,m) = m_r(k) * b_term
714 i1 = i1 + apar(m) * eta_m
715 i2 = i2 + bpar(m) * eta_m
716 i1_r(k) = i1_r(k) + apar(m) *
real(m) * eta**(m-1) * z3_r(k) + ap_r(k,m) * eta_m
717 i2_r(k) = i2_r(k) + bpar(m) *
real(m) * eta**(m-1) * z3_r(k) + bp_r(k,m) * eta_m
723 aux_term_k = 2.0*mseg(k)*mseg(i)*sig_ij(i,k)**3 *uij(i,k)/t
724 ord1_r(k) = ord1_r(k) + rhoi(i) * aux_term_k
725 ord2_r(k) = ord2_r(k) + rhoi(i) * aux_term_k * uij(i,k)/t
728 c1_r(k)= c2_con*z3_r(k) - c1_con*c1_con * chi_dm * m_r(k)
736 gij_rr(k,l,i,j) = 2.0*z3_r(k)*z3_r(l)/ome3 &
737 + 6.0*dij_ab(i,j)*( z2_r(k)*z3_r(l)+z2_r(l)*z3_r(k)+3.0*z2*z3_r(k)*z3_r(l)/ome ) /ome3 &
738 +dij_ab(i,j)**2/ome3 *( 4.0*z2_r(k)*z2_r(l) + 12.0*z2*(z2_r(k)*z3_r(l)+z2_r(l)*z3_r(k))/ome &
739 + 24.0*z2*z2*z3_r(k)*z3_r(l)/ome2 )
757 if ( z3**4 > 0.0 )
then 758 ahs_rkrl = ( 3.0*(z1_r(k)*z2_r(l)+z1_r(l)*z2_r(k))/ome + 3.0*(z1_r(k)*z2+z1*z2_r(k))*z3_r(l)/ome2 &
759 + 3.0*(z1_r(l)*z2+z1*z2_r(l))*z3_r(k)/ome2 + 6.0*z1*z2*z3_r(k)*z3_r(l)/ome3 &
760 + 6.0*z2*z2_r(l)*z2_r(k)/z3/ome2 + 3.0*z2*z2*(z2_r(k)*z3_r(l)+z2_r(l)*z3_r(k))*(3.0*z3-1.0)/z3/z3/ome3 &
761 + 3.0*z2**3*z3_r(k)*z3_r(l) /z3/z3/ome3 &
762 + z2**3*z3_r(k)*z3_r(l)*(3.0*z3-1.0)*(5.0*z3-2.0)/z3**3/ome2/ome2 &
763 + ( 6.0*z2*z2*(z2_r(l)/z2*z2_r(k)*z3-z2_r(k)*z3_r(l)-z2_r(l)*z3_r(k)+z2*z3_r(k)*z3_r(l)/z3 )/z3**3 )*log(ome) &
764 + ( (2.0*z2*z3_r(k)-3.0*z2_r(k)*z3)*z2*z2/z3**3 + z0_r(k) )*z3_r(l)/ome &
765 + (z0_r(l)-z2*z2*(3.0*z2_r(l)*z3-2.0*z2*z3_r(l))/z3**3)*z3_r(k)/ome &
766 + (z0-z2**3/z3/z3)*z3_r(k)*z3_r(l)/ome2 ) / pi_6
778 ahc_rkrl = ahc_rkrl + rhoi(i) * (1.0-mseg(i)) / gij(i,i) &
779 * ( gij_rr(k,l,i,i) - gij_r(k,i,i)*gij_r(l,i,i)/gij(i,i) )
781 ahc_rkrl = ahc_rkrl + (1.0-mseg(k)) / gij(k,k) * gij_r(l,k,k) + (1.0-mseg(l)) / gij(l,l) * gij_r(k,l,l)
788 m_rkrl = ( 2.0*m_mean - mseg(k) - mseg(l) ) / rho/rho
792 a_term = ( ap(m,2) + (3.0 -4.0/m_mean) *ap(m,3) ) / m_mean/m_mean
793 b_term = ( bp(m,2) + (3.0 -4.0/m_mean) *bp(m,3) ) / m_mean/m_mean
794 ap_rkrl(m) = m_rkrl * a_term + 2.0/m_mean*m_r(k)*m_r(l)*( 2.0*ap(m,3)/m_mean**3 - a_term )
795 bp_rkrl(m) = m_rkrl * b_term + 2.0/m_mean*m_r(k)*m_r(l)*( 2.0*bp(m,3)/m_mean**3 - b_term )
802 i1_rkrl = i1_rkrl + ap_rkrl(m) * eta_m +
real(m) *(z3_r(k)*ap_r(l,m)+z3_r(l)*ap_r(k,m)) *eta**(m-1) &
803 +
real(m)*
real(m-1)*apar(m)*z3_r(k)*z3_r(l)*eta**(m-2)
804 i2_rkrl = i2_rkrl + bp_rkrl(m) * eta_m +
real(m) *(z3_r(k)*bp_r(l,m)+z3_r(l)*bp_r(k,m)) *eta**(m-1) &
805 +
real(m)*
real(m-1)*bpar(m)*z3_r(k)*z3_r(l)*eta**(m-2)
808 ord1_rkrl = 2.0*mseg(k)*mseg(l)*sig_ij(k,l)**3 *uij(k,l)/t
809 ord2_rkrl = 2.0*mseg(k)*mseg(l)*sig_ij(k,l)**3 * (uij(k,l)/t)**2
811 c1_rkrl = c3_con*z3_r(l)*z3_r(k) + c2_dm*m_r(l)*z3_r(k) &
812 - c1_con* ( 2.0*c1_r(l)*chi_dm*m_r(k) + c1_con*chi_dmdeta*z3_r(l)*m_r(k)+ c1_con*chi_dm*m_rkrl)
814 adsp_rkrl = -2.0*pi* ( ord1_rkrl*i1 +ord1_r(k)*i1_r(l)+ord1_r(l)*i1_r(k)+order1*rho*rho*i1_rkrl ) &
815 - pi* ( m_rkrl*c1_con + m_r(k)*c1_r(l)+m_r(l)*c1_r(k)+ m_mean*c1_rkrl ) * order2*rho*rho*i2 &
816 - pi* (m_r(k)*c1_con+m_mean*c1_r(k)) * ( ord2_r(l)*i2 + order2*rho*rho*i2_r(l) ) &
817 - pi* (m_r(l)*c1_con+m_mean*c1_r(l)) * ( ord2_r(k)*i2 + order2*rho*rho*i2_r(k) ) &
818 - pi* m_mean*c1_con * ( ord2_rkrl*i2 +ord2_r(k)*i2_r(l)+ord2_r(l)*i2_r(k)+order2*rho*rho*i2_rkrl)
825 a_rr(k,l) = ahs_rkrl + ahc_rkrl + adsp_rkrl
836 IF (nhb_typ(i) /= 0) assoc = .true.
842 DO ii = 1, nhb_typ(i)
849 allocate( q_xx( n_dim, n_dim ) )
850 allocate( q_xr( n_dim, m_dim ) )
851 allocate( q_xr_transpose( m_dim, n_dim ) )
852 allocate( q_rr( m_dim, m_dim ) )
853 allocate( ahb_rr( m_dim, m_dim ) )
858 DO ii = 1, nhb_typ(i)
862 DO jj = 1, nhb_typ(j)
864 q_xx(iii,jjj) = - rhoi(i) * rhoi(j) * gij(i,j) *ass_d(i,j,ii,jj)
865 if ( iii == jjj ) q_xx(iii,jjj) = q_xx(iii,jjj) - rhoi(i) / ( mx(i,ii) * nhb_no(i,ii) )**2 * nhb_no(i,ii)
874 DO ll = 1, nhb_typ(l)
878 do ii = 1, nhb_typ(i)
879 q_xr(lll,k) = q_xr(lll,k) - rhoi(l)*rhoi(i)*mx(i,ii)*nhb_no(i,ii) *gij_r(k,i,l) *ass_d(i,l,ii,ll)
882 do kk = 1, nhb_typ(k)
883 q_xr(lll,k) = q_xr(lll,k) - rhoi(l)* mx(k,kk)*nhb_no(k,kk) *gij(k,l) *ass_d(k,l,kk,ll)
885 q_xr_transpose(k,lll) = q_xr(lll,k)
894 DO ii = 1, nhb_typ(i)
895 DO ll = 1, nhb_typ(l)
896 q_rr(k,l) = q_rr(k,l) - rhoi(i) * mx(i,ii)*nhb_no(i,ii) &
897 * mx(l,ll)*nhb_no(l,ll) * gij_r(k,i,l) *ass_d(i,l,ii,ll)
899 DO kk = 1, nhb_typ(k)
900 q_rr(k,l) = q_rr(k,l) - rhoi(i) * mx(i,ii)*nhb_no(i,ii) &
901 * mx(k,kk)*nhb_no(k,kk) * gij_r(l,i,k) *ass_d(i,k,ii,kk)
910 DO kk = 1, nhb_typ(k)
911 DO ll = 1, nhb_typ(l)
912 q_rr(k,l) = q_rr(k,l) - mx(k,kk)*nhb_no(k,kk) * mx(l,ll)*nhb_no(l,ll) * gij(k,l) *ass_d(k,l,kk,ll)
916 DO ii = 1, nhb_typ(i)
918 DO jj = 1, nhb_typ(j)
919 q_rr(k,l) = q_rr(k,l) - 0.5 * rhoi(i) * rhoi(j) * mx(i,ii) * mx(j,jj) &
920 * nhb_no(i,ii)*nhb_no(j,jj) *gij_rr(k,l,i,j) *ass_d(i,j,ii,jj)
929 call matinv( n_dim, m_dim, q_xx, q_xr,
determinant )
931 ahb_rr = matmul( q_xr_transpose, q_xr )
932 ahb_rr = q_rr - ahb_rr
936 a_rr(k,l) = a_rr(k,l) + ahb_rr(k,l)
940 deallocate( q_xx, q_xr, q_xr_transpose, q_rr, ahb_rr )
947 CALL a_polar_drhoi_drhoj ( n_comp, a_polar_rr )
948 a_rr(:,:) = a_rr(:,:) + a_polar_rr(:,:)
955 aig_rr(k,k) = 1.0 / rhoi(k)
961 deallocate( ap_r, bp_r )
962 deallocate( i1_r, i2_r )
963 deallocate( ord1_r, ord2_r )
964 deallocate( a_polar_rr )
966 END SUBROUTINE dda_drhoi_drhoj_eos
983 USE eos_polar
, ONLY: p_polar
987 INTEGER :: i, j, ii, jj, m
988 INTEGER :: ass_cnt,max_eval
990 REAL :: z0, z1, z2, z3
991 REAL :: ome, ome2, ome3, ome4, ome5, z3_m
993 REAL :: zges, zgesdz, zgesd2, zgesd3
994 REAL :: zhs, zhsdz, zhsd2, zhsd3
995 REAL :: zhc, zhcdz, zhcd2, zhcd3
996 REAL,
DIMENSION(nc,nc) :: dgijdz, dgijd2, dgijd3, dgijd4
997 REAL :: zdsp, zdspdz, zdspd2, zdspd3
998 REAL :: c1_con, c2_con, c3_con, c4_con, c5_con
999 REAL :: i2, edi1dz, edi2dz, edi1d2, edi2d2
1000 REAL :: edi1d3, edi2d3, edi1d4, edi2d4
1001 REAL :: zhb, zhbdz, zhbd2, zhbd3
1002 REAL,
DIMENSION(nc,nc,nsite,nsite) :: delta, dq_dz, dq_d2, dq_d3, dq_d4
1003 REAL,
DIMENSION(nc,nsite) :: mx_itr, dmx_dz, ndmxdz, dmx_d2, ndmxd2
1004 REAL,
DIMENSION(nc,nsite) :: dmx_d3, ndmxd3, dmx_d4, ndmxd4
1005 REAL :: err_sum, sum0, sum1, sum2, sum3, sum4, attenu, tol
1006 REAL :: sum_d1, sum_d2, sum_d3, sum_d4
1007 REAL :: zdd, zddz, zddz2, zddz3
1008 REAL :: zqq, zqqz, zqqz2, zqqz3
1009 REAL :: zdq, zdqz, zdqz2, zdqz3
1022 m_mean = z0t/(pi/6.0)
1046 gij(i,j) = 1.0/ome + 3.0*dij_ab(i,j)*z2/ome2 + 2.0*(dij_ab(i,j)*z2)**2 /ome3
1047 dgijdz(i,j)= 1.0/ome2 + 3.0*dij_ab(i,j)*z2*(1.0+z3)/z3/ome3 &
1048 + (dij_ab(i,j)*z2/ome2)**2 *(4.0+2.0*z3)/z3
1049 dgijd2(i,j) = 2.0/ome3 + 6.0*dij_ab(i,j)*z2/z3/ome4 *(2.0+z3) &
1050 + (2.0*dij_ab(i,j)*z2/z3)**2 /ome5 *(1.0+4.0*z3+z3*z3)
1051 dgijd3(i,j) = 6.0/ome4 + 18.0*dij_ab(i,j)*z2/z3/ome5 *(3.0+z3) &
1052 + 12.0*(dij_ab(i,j)*z2/z3/ome3 )**2 *(3.0+6.0*z3+z3*z3)
1053 dgijd4(i,j) = 24.0/ome5 + 72.0*dij_ab(i,j)*z2/z3/ome**6 *(4.0+z3) &
1054 + 48.0*(dij_ab(i,j)*z2/z3)**2 /ome**7 *(6.0+8.0*z3+z3*z3)
1062 zhs = m_mean* ( z3/ome + 3.0*z1*z2/z0/ome2 + z2**3 /z0*(3.0-z3)/ome3 )
1063 zhsdz = m_mean*( 1.0/ome2 + 3.0*z1*z2/z0/z3*(1.0+z3)/ome3 &
1064 + 6.0*z2**3 /z0/z3/ome4 )
1065 zhsd2 = m_mean*( 2.0/ome3 + 6.0*z1*z2/z0/z3*(2.0+z3)/ome4 &
1066 + 6.0*z2**3 /z0/z3/z3*(1.0+3.0*z3)/ome5 )
1067 zhsd3 = m_mean*( 6.0/ome4 + 18.0*z1*z2/z0/z3*(3.0+z3)/ome5 &
1068 + 24.0*z2**3 /z0/z3/z3*(2.0+3.0*z3)/ome**6 )
1079 zhc = zhc + x(i)*(1.0-mseg(i))*eta/gij(i,i)* dgijdz(i,i)
1080 zhcdz = zhcdz + x(i)*(1.0-mseg(i)) *(-eta*(dgijdz(i,i)/gij(i,i))**2 &
1081 + dgijdz(i,i)/gij(i,i) + eta/gij(i,i)*dgijd2(i,i))
1082 zhcd2 = zhcd2 + x(i)*(1.0-mseg(i)) &
1083 *( 2.0*eta*(dgijdz(i,i)/gij(i,i))**3 &
1084 -2.0*(dgijdz(i,i)/gij(i,i))**2 &
1085 -3.0*eta/gij(i,i)**2 *dgijdz(i,i)*dgijd2(i,i) &
1086 +2.0/gij(i,i)*dgijd2(i,i) +eta/gij(i,i)*dgijd3(i,i) )
1087 zhcd3 = zhcd3 + x(i)*(1.0-mseg(i)) *( 6.0*(dgijdz(i,i)/gij(i,i))**3 &
1088 -6.0*eta*(dgijdz(i,i)/gij(i,i))**4 &
1089 +12.0*eta/gij(i,i)**3 *dgijdz(i,i)**2 *dgijd2(i,i) &
1090 -9.0/gij(i,i)**2 *dgijdz(i,i)*dgijd2(i,i) +3.0/gij(i,i)*dgijd3(i,i) &
1091 -3.0*eta*(dgijd2(i,i)/gij(i,i))**2 &
1092 -4.0*eta/gij(i,i)**2 *dgijdz(i,i)*dgijd3(i,i) &
1093 +eta/gij(i,i)*dgijd4(i,i) )
1111 i2 = i2 + bpar(m) * z3_m
1112 edi1dz= edi1dz + apar(m) *
REAL(m+1) * z3_m
1113 edi2dz= edi2dz + bpar(m) *
REAL(m+1) * z3_m
1114 edi1d2= edi1d2 + apar(m) *
REAL((m+1)*m) * z3**(m-1)
1115 edi2d2= edi2d2 + bpar(m) *
REAL((m+1)*m) * z3**(m-1)
1116 edi1d3= edi1d3 + apar(m) *
REAL((m+1)*m*(m-1)) * z3**(m-2)
1117 edi2d3= edi2d3 + bpar(m) *
REAL((m+1)*m*(m-1)) * z3**(m-2)
1118 edi1d4= edi1d4 + apar(m) *
REAL((m+1)*m*(m-1)*(m-2)) * z3**(m-3)
1119 edi2d4= edi2d4 + bpar(m) *
REAL((m+1)*m*(m-1)*(m-2)) * z3**(m-3)
1122 c1_con= 1.0/ ( 1.0 + m_mean*(8.0*eta-2.0*eta**2 )/ome4 &
1123 + (1.0 - m_mean)*(20.0*eta-27.0*eta**2 &
1124 + 12.0*eta**3 -2.0*eta**4 ) /(ome*(2.0-eta))**2 )
1125 c2_con= - c1_con*c1_con &
1126 *(m_mean*(-4.0*eta**2 +20.0*eta+8.0)/ome5 + (1.0 - m_mean) &
1127 *(2.0*eta**3 +12.0*eta**2 -48.0*eta+40.0) &
1128 /(ome*(2.0-eta))**3 )
1129 c3_con= 2.0 * c2_con*c2_con/c1_con - c1_con*c1_con &
1130 *( m_mean*(-12.0*eta**2 +72.0*eta+60.0)/ome**6 &
1132 *(-6.0*eta**4 -48.0*eta**3 +288.0*eta**2 &
1133 -480.0*eta+264.0) /(ome*(2.0-eta))**4 )
1134 c4_con= 6.0*c2_con*c3_con/c1_con -6.0*c2_con**3 /c1_con**2 &
1136 *( m_mean*(-48.0*eta**2 +336.0*eta+432.0)/ome**7 &
1138 *(24.0*eta**5 +240.0*eta**4 -1920.0*eta**3 &
1139 +4800.0*eta**2 -5280.0*eta+2208.0) /(ome*(2.0-eta))**5 )
1140 c5_con= 6.0*c3_con**2 /c1_con - 36.0*c2_con**2 /c1_con**2 *c3_con &
1141 + 8.0*c2_con/c1_con*c4_con+24.0*c2_con**4 /c1_con**3 &
1143 *( m_mean*(-240.0*eta**2 +1920.0*eta+3360.0)/ome**8 &
1145 *(-120.0*eta**6 -1440.0*eta**5 +14400.0*eta**4 &
1146 -48000.0*eta**3 +79200.0*eta**2 -66240.0*eta+22560.0) &
1147 /(ome*(2.0-eta))**6 )
1149 zdsp = - 2.0*pi*rho*edi1dz*order1 &
1150 - pi*rho*order2*m_mean*(c2_con*i2*eta + c1_con*edi2dz)
1151 zdspdz= zdsp/eta - 2.0*pi*rho*edi1d2*order1 &
1152 - pi*rho*order2*m_mean*(c3_con*i2*eta + 2.0*c2_con*edi2dz + c1_con*edi2d2)
1153 zdspd2= -2.0*zdsp/eta/eta +2.0*zdspdz/eta &
1154 - 2.0*pi*rho*edi1d3*order1 - pi*rho*order2*m_mean*(c4_con*i2*eta &
1155 + 3.0*c3_con*edi2dz +3.0*c2_con*edi2d2 +c1_con*edi2d3)
1156 zdspd3= 6.0*zdsp/eta**3 -6.0*zdspdz/eta/eta &
1157 + 3.0*zdspd2/eta - 2.0*pi*rho*edi1d4*order1 &
1158 - pi*rho*order2*m_mean*(c5_con*i2*eta &
1159 + 4.0*c4_con*edi2dz +6.0*c3_con*edi2d2 &
1160 + 4.0*c2_con*edi2d3 + c1_con*edi2d4)
1173 IF ( nhb_typ(i) /= 0 ) assoc = .true.
1178 DO ii = 1, nhb_typ(i)
1180 DO jj = 1, nhb_typ(j)
1181 delta(i,j,ii,jj) = gij(i,j) * ass_d(i,j,ii,jj)
1182 dq_dz(i,j,ii,jj) = dgijdz(i,j) * ass_d(i,j,ii,jj)
1183 dq_d2(i,j,ii,jj) = dgijd2(i,j) * ass_d(i,j,ii,jj)
1184 dq_d3(i,j,ii,jj) = dgijd3(i,j) * ass_d(i,j,ii,jj)
1185 dq_d4(i,j,ii,jj) = dgijd4(i,j) * ass_d(i,j,ii,jj)
1194 IF ( eta < 0.2 ) tol = 1.e-12
1195 IF ( eta < 0.01 ) tol = 1.e-13
1196 IF ( eta < 1.e-6) tol = 1.e-15
1201 DO ii = 1, nhb_typ(i)
1213 DO WHILE ( err_sum > tol .AND. ass_cnt <= max_eval)
1214 ass_cnt = ass_cnt + 1
1216 DO ii = 1, nhb_typ(i)
1223 DO jj = 1, nhb_typ(j)
1224 sum0 =sum0 +x(j)*nhb_no(j,jj)* mx(j,jj)* delta(i,j,ii,jj)
1225 sum1 =sum1 +x(j)*nhb_no(j,jj)*( mx(j,jj)* dq_dz(i,j,ii,jj) &
1226 + dmx_dz(j,jj)* delta(i,j,ii,jj))
1227 sum2 =sum2 +x(j)*nhb_no(j,jj)*( mx(j,jj)* dq_d2(i,j,ii,jj) &
1228 + 2.0*dmx_dz(j,jj)* dq_dz(i,j,ii,jj) &
1229 + dmx_d2(j,jj)* delta(i,j,ii,jj))
1230 sum3 =sum3 +x(j)*nhb_no(j,jj)*( mx(j,jj)* dq_d3(i,j,ii,jj) &
1231 + 3.0*dmx_dz(j,jj)* dq_d2(i,j,ii,jj) &
1232 + 3.0*dmx_d2(j,jj)* dq_dz(i,j,ii,jj) &
1233 + dmx_d3(j,jj)* delta(i,j,ii,jj))
1234 sum4 =sum4 + x(j)*nhb_no(j,jj)*( mx(j,jj)* dq_d4(i,j,ii,jj) &
1235 + 4.0*dmx_dz(j,jj)* dq_d3(i,j,ii,jj) &
1236 + 6.0*dmx_d2(j,jj)* dq_d2(i,j,ii,jj) &
1237 + 4.0*dmx_d3(j,jj)* dq_dz(i,j,ii,jj) &
1238 + dmx_d4(j,jj)* delta(i,j,ii,jj))
1241 mx_itr(i,ii)= 1.0 / (1.0 + sum0 * rho)
1242 ndmxdz(i,ii)= -(mx_itr(i,ii)*mx_itr(i,ii))* (sum0/z3t +sum1*rho)
1243 ndmxd2(i,ii)= + 2.0/mx_itr(i,ii)*ndmxdz(i,ii)*ndmxdz(i,ii) &
1244 - (mx_itr(i,ii)*mx_itr(i,ii)) * (2.0/z3t*sum1 + rho*sum2)
1245 ndmxd3(i,ii)= - 6.0/mx_itr(i,ii)**2 *ndmxdz(i,ii)**3 &
1246 + 6.0/mx_itr(i,ii)*ndmxdz(i,ii)*ndmxd2(i,ii) - mx_itr(i,ii)*mx_itr(i,ii) &
1247 * (3.0/z3t*sum2 + rho*sum3)
1248 ndmxd4(i,ii)= 24.0/mx_itr(i,ii)**3 *ndmxdz(i,ii)**4 &
1249 -36.0/mx_itr(i,ii)**2 *ndmxdz(i,ii)**2 *ndmxd2(i,ii) &
1250 +6.0/mx_itr(i,ii)*ndmxd2(i,ii)**2 &
1251 +8.0/mx_itr(i,ii)*ndmxdz(i,ii)*ndmxd3(i,ii) - mx_itr(i,ii)**2 &
1252 *(4.0/z3t*sum3 + rho*sum4)
1258 DO ii = 1, nhb_typ(i)
1259 err_sum = err_sum + abs(mx_itr(i,ii) - mx(i,ii)) &
1260 + abs(ndmxdz(i,ii) - dmx_dz(i,ii)) + abs(ndmxd2(i,ii) - dmx_d2(i,ii))
1261 mx(i,ii) = mx_itr(i,ii)*attenu + mx(i,ii) * (1.0-attenu)
1262 dmx_dz(i,ii) = ndmxdz(i,ii)*attenu + dmx_dz(i,ii) * (1.0-attenu)
1263 dmx_d2(i,ii) = ndmxd2(i,ii)*attenu + dmx_d2(i,ii) * (1.0-attenu)
1264 dmx_d3(i,ii) = ndmxd3(i,ii)*attenu + dmx_d3(i,ii) * (1.0-attenu)
1265 dmx_d4(i,ii) = ndmxd4(i,ii)*attenu + dmx_d4(i,ii) * (1.0-attenu)
1270 IF ( ass_cnt >= max_eval .AND. err_sum > sqrt(tol) )
THEN 1271 WRITE (*,
'(a,2G15.7)')
'P_EOS: Max_eval violated (mx) Err_Sum= ',err_sum,tol
1282 DO ii = 1, nhb_typ(i)
1283 sum_d1= sum_d1 +nhb_no(i,ii)* dmx_dz(i,ii)*(1.0/mx(i,ii)-0.5)
1284 sum_d2= sum_d2 +nhb_no(i,ii)*(dmx_d2(i,ii)*(1.0/mx(i,ii)-0.5) &
1285 -(dmx_dz(i,ii)/mx(i,ii))**2 )
1286 sum_d3= sum_d3 +nhb_no(i,ii)*(dmx_d3(i,ii)*(1.0/mx(i,ii)-0.5) &
1287 -3.0/mx(i,ii)**2 *dmx_dz(i,ii)*dmx_d2(i,ii) + 2.0*(dmx_dz(i,ii)/mx(i,ii))**3 )
1288 sum_d4= sum_d4 +nhb_no(i,ii)*(dmx_d4(i,ii)*(1.0/mx(i,ii)-0.5) &
1289 -4.0/mx(i,ii)**2 *dmx_dz(i,ii)*dmx_d3(i,ii) &
1290 + 12.0/mx(i,ii)**3 *dmx_dz(i,ii)**2 *dmx_d2(i,ii) &
1291 - 3.0/mx(i,ii)**2 *dmx_d2(i,ii)**2 - 6.0*(dmx_dz(i,ii)/mx(i,ii))**4 )
1293 zhb = zhb + x(i) * eta * sum_d1
1294 zhbdz = zhbdz + x(i) * eta * sum_d2
1295 zhbd2 = zhbd2 + x(i) * eta * sum_d3
1296 zhbd3 = zhbd3 + x(i) * eta * sum_d4
1298 zhbdz = zhbdz + zhb/eta
1299 zhbd2 = zhbd2 + 2.0/eta*zhbdz-2.0/eta**2 *zhb
1300 zhbd3 = zhbd3 - 6.0/eta**2 *zhbdz+3.0/eta*zhbd2 + 6.0/eta**3 *zhb
1307 CALL p_polar ( zdd, zddz, zddz2, zddz3, zqq, zqqz, zqqz2, zqqz3, zdq, zdqz, zdqz2, zdqz3 )
1314 zges = 1.0 + zhs + zhc + zdsp + zhb + zdd + zqq + zdq
1315 zgesdz = zhsdz + zhcdz + zdspdz + zhbdz + zddz + zqqz + zdqz
1316 zgesd2 = zhsd2 + zhcd2 + zdspd2 + zhbd2 + zddz2 +zqqz2+zdqz2
1317 zgesd3 = zhsd3 + zhcd3 + zdspd3 + zhbd3 + zddz3 +zqqz3+zdqz3
1319 pges = zges *rho *(kbol*t)/1.e-30
1320 pgesdz = ( zgesdz*rho + zges*rho/z3 )*(kbol*t)/1.e-30
1321 pgesd2 = ( zgesd2*rho + 2.0*zgesdz*rho/z3 )*(kbol*t)/1.e-30
1322 pgesd3 = ( zgesd3*rho + 3.0*zgesd2*rho/z3 )*(kbol*t)/1.e-30
1324 END SUBROUTINE p_eos
1341 USE eos_polar
, ONLY: f_polar
1345 INTEGER :: i, j, ii, jj, m
1346 REAL :: z0, z1, z2, z3
1347 REAL :: ome, ome2, ome3, m_mean
1348 REAL :: i1, i2, c1_con
1349 REAL :: fhs, fdsp, fhc
1352 INTEGER :: ass_cnt,max_eval
1353 REAL :: delta(nc,nc,nsite,nsite)
1354 REAL :: mx_itr(nc,nsite), err_sum, sum, attenu, tol, fhb
1355 REAL :: ass_s1, ass_s2
1357 REAL :: fdd, fqq, fdq
1365 IF ( rho /= rho )
write (*,*)
'F_EOS: error in density',eta, z3t
1371 m_mean = z0t / ( pi / 6.0 )
1391 gij(i,j) = 1.0/ome + 3.0*dij_ab(i,j)*z2/ome2 + 2.0*(dij_ab(i,j)*z2)**2 /ome3
1399 fhs= m_mean*( 3.0*z1*z2/ome + z2**3 /z3/ome2 + (z2**3 /z3/z3-z0)*log(ome) )/z0
1407 fhc = fhc + x(i) *(1.0- mseg(i)) *log(gij(i,i))
1418 i1 = i1 + apar(m) * eta**m
1419 i2 = i2 + bpar(m) * eta**m
1422 c1_con= 1.0/ ( 1.0 + m_mean*(8.0*eta-2.0*eta**2 )/ome**4 &
1423 + (1.0 - m_mean)*(20.0*eta-27.0*eta**2 + 12.0*eta**3 -2.0*eta**4 ) /(ome*(2.0-eta))**2 )
1425 fdsp = -2.0*pi * rho * i1 * order1 - pi * rho * c1_con * m_mean * i2 * order2
1435 IF (nhb_typ(i) /= 0) assoc = .true.
1440 DO ii = 1, nhb_typ(i)
1441 IF (mx(i,ii) == 0.0) mx(i,ii) = 1.0
1443 DO jj = 1, nhb_typ(j)
1444 delta(i,j,ii,jj) = gij(i,j) * ass_d(i,j,ii,jj)
1454 IF (eta < 0.2) tol = 1.e-12
1455 IF (eta < 0.01) tol = 1.e-13
1461 DO WHILE ( err_sum > tol .AND. ass_cnt <= max_eval )
1463 ass_cnt = ass_cnt + 1
1466 DO ii = 1, nhb_typ(i)
1469 DO jj = 1, nhb_typ(j)
1470 sum = sum + x(j)* mx(j,jj)*nhb_no(j,jj) *delta(i,j,ii,jj)
1474 mx_itr(i,ii) = 1.0 / (1.0 + sum * rho)
1481 DO ii = 1, nhb_typ(i)
1482 err_sum = err_sum + abs(mx_itr(i,ii) - mx(i,ii))
1483 mx(i,ii) = mx_itr(i,ii) * attenu + mx(i,ii) * (1.0 - attenu)
1489 IF ( err_sum /= err_sum )
write (*,*)
'F_EOS: association "not a number"',ass_cnt, rho, sum
1490 IF ( ass_cnt >= max_eval )
THEN 1491 WRITE(*,
'(a,2G15.7)')
'F_EOS: Max_eval violated (mx) Err_Sum = ',err_sum,tol
1499 DO ii = 1, nhb_typ(i)
1500 ass_s1 = ass_s1 + nhb_no(i,ii) * ( 1.0 - mx(i,ii) )
1501 ass_s2 = ass_s2 + nhb_no(i,ii) * log( mx(i,ii) )
1503 fhb = fhb + x(i) * ( ass_s2 + ass_s1 / 2.0 )
1512 CALL f_polar ( fdd, fqq, fdq )
1518 fres = fhs + fhc + fdsp + fhb + fdd + fqq + fdq
1522 END SUBROUTINE f_eos
1532 SUBROUTINE perturbation_parameter
1534 USE parameters, ONLY: pi, kbol, rgas, nav, tau
1540 INTEGER :: i, j, k, l, m, no
1541 LOGICAL :: assoc, qudpole, dipole
1543 REAL,
DIMENSION(nc) :: d00, u
1544 REAL,
DIMENSION(nc,nc,nsite,nsite) :: eps_hb
1545 REAL,
DIMENSION(nc,nc) :: kap_hb
1546 REAL :: eps_kij, k_kij
1554 mseg(i)= parame(i,1)
1555 dhs(i) = parame(i,2) * ( 1.0 - 0.12 * exp( -3.0 * parame(i,3) / t ) )
1556 d00(i) = parame(i,2)
1565 sig_ij(i,j) = 0.5 * ( d00(i) + d00(j) )
1566 uij(i,j) = ( 1.0 - kij(i,j) ) * ( u(i)*u(j) )**0.5
1574 z0t = pi / 6.0 * sum( x(1:ncomp) * mseg(1:ncomp) )
1575 z1t = pi / 6.0 * sum( x(1:ncomp) * mseg(1:ncomp) * dhs(1:ncomp) )
1576 z2t = pi / 6.0 * sum( x(1:ncomp) * mseg(1:ncomp) * dhs(1:ncomp)**2 )
1577 z3t = pi / 6.0 * sum( x(1:ncomp) * mseg(1:ncomp) * dhs(1:ncomp)**3 )
1579 m_mean = z0t / ( pi / 6.0 )
1583 dij_ab(i,j) = dhs(i)*dhs(j) / ( dhs(i) + dhs(j) )
1591 apar(m) = ap(m,1) + (1.0-1.0/m_mean)*ap(m,2) + (1.0-1.0/m_mean)*(1.0-2.0/m_mean)*ap(m,3)
1592 bpar(m) = bp(m,1) + (1.0-1.0/m_mean)*bp(m,2) + (1.0-1.0/m_mean)*(1.0-2.0/m_mean)*bp(m,3)
1603 order1 = order1 + x(i)*x(j)* mseg(i)*mseg(j)*sig_ij(i,j)**3 * uij(i,j)/t
1604 order2 = order2 + x(i)*x(j)* mseg(i)*mseg(j)*sig_ij(i,j)**3 * (uij(i,j)/t)**2
1616 IF (nint(parame(i,12)) /= 0) assoc = .true.
1617 IF (parame(i,7) /= 0.0) qudpole = .true.
1618 IF (parame(i,6) /= 0.0) dipole = .true.
1622 IF (qudpole)
CALL qq_const ( qqp2, qqp3, qqp4 )
1623 IF (dipole)
CALL dd_const ( ddp2, ddp3, ddp4 )
1624 IF (dipole .AND. qudpole)
CALL dq_const ( dqp2, dqp3, dqp4 )
1634 IF (nint(parame(i,12)) /= 0)
THEN 1635 nhb_typ(i) = nint(parame(i,12))
1636 kap_hb(i,i) = parame(i,13)
1638 DO j = 1, nhb_typ(i)
1639 DO k = 1, nhb_typ(i)
1640 eps_hb(i,i,j,k) = parame(i,(14+no))
1644 DO j = 1, nhb_typ(i)
1645 nhb_no(i,j) = parame(i,(14+no))
1653 eps_hb(i,i,k,l) = 0.0
1661 IF (i /= j .AND. (nhb_typ(i) /= 0 .AND. nhb_typ(j) /= 0))
THEN 1662 kap_hb(i,j)= (kap_hb(i,i)*kap_hb(j,j))**0.5 &
1663 *((parame(i,2)*parame(j,2))**3 )**0.5 &
1664 /(0.5*(parame(i,2)+parame(j,2)))**3
1665 kap_hb(i,j)= kap_hb(i,j)*(1.0-k_kij)
1666 DO k = 1, nhb_typ(i)
1667 DO l = 1, nhb_typ(j)
1669 eps_hb(i,j,k,l) = (eps_hb(i,i,k,l)+eps_hb(j,j,l,k))/2.0
1670 eps_hb(i,j,k,l) = eps_hb(i,j,k,l)*(1.0-eps_kij)
1677 IF (nhb_typ(1) == 3)
THEN 1679 eps_hb(1,2,3,1) = 0.5*(eps_hb(1,1,3,1)+eps_hb(2,2,1,2))
1680 eps_hb(2,1,1,3) = eps_hb(1,2,3,1)
1682 IF (nhb_typ(2) == 3)
THEN 1683 eps_hb(2,1,3,1) = 0.5*(eps_hb(2,2,3,1)+eps_hb(1,1,1,2))
1684 eps_hb(1,2,1,3) = eps_hb(2,1,3,1)
1688 DO k = 1, nhb_typ(i)
1690 DO l = 1, nhb_typ(j)
1691 ass_d(i,j,k,l) = kap_hb(i,j) *sig_ij(i,j)**3 *(exp(eps_hb(i,j,k,l)/t)-1.0)
1699 END SUBROUTINE perturbation_parameter
1710 SUBROUTINE density_iteration
1716 INTEGER :: i, start, max_i
1717 REAL :: eta_iteration
1718 REAL :: error, dydx, acc_i, delta_eta
1722 IF ( densav(phas) /= 0.0 .AND. eta_start == denold(phas) )
THEN 1723 denold(phas) = eta_start
1724 eta_start = densav(phas)
1726 denold(phas) = eta_start
1727 densav(phas) = eta_start
1733 density_error(:) = 0.0
1736 eta_iteration = eta_start
1746 CALL p_eos_interface
1748 error = (pges / p ) - 1.0
1753 IF ( pgesdz < 0.0 .AND. i < max_i )
THEN 1754 IF ( error > 0.0 .AND. pgesd2 > 0.0 )
THEN 1755 CALL pressure_spinodal
1757 error = (pges / p ) - 1.0
1758 IF ( ((pges/p ) -1.0) > 0.0 ) eta_iteration = 0.001
1759 IF ( ((pges/p ) -1.0) <=0.0 ) eta_iteration = eta_iteration * 1.1
1760 ELSE IF ( error < 0.0 .AND. pgesd2 < 0.0 )
THEN 1761 CALL pressure_spinodal
1763 error = (pges / p ) - 1.0
1764 IF ( ((pges/p ) -1.0) < 0.0 ) eta_iteration = 0.5
1765 IF ( ((pges/p ) -1.0) >=0.0 ) eta_iteration = eta_iteration * 0.9
1767 eta_iteration = (eta_iteration + eta_start) / 2.0
1768 IF (eta_iteration == eta_start) eta_iteration = eta_iteration + 0.2
1770 cycle iterate_density
1775 delta_eta = error/ dydx
1776 IF ( delta_eta > 0.05 ) delta_eta = 0.05
1777 IF ( delta_eta < -0.05 ) delta_eta = -0.05
1779 eta_iteration = eta_iteration - delta_eta
1781 IF (eta_iteration > 0.9) eta_iteration = 0.6
1782 IF (eta_iteration <= 0.0) eta_iteration = 1.e-16
1785 IF ( abs(error*p/pgesdz) < 1.e-12 ) start = 0
1786 IF ( abs(error) < acc_i ) start = 0
1787 IF ( i > max_i )
THEN 1789 density_error(phas) = abs( error )
1793 IF (start /= 1)
EXIT iterate_density
1795 END DO iterate_density
1799 IF ((eta > 0.3 .AND. densav(phas) > 0.3) .OR. &
1800 (eta < 0.1 .AND. densav(phas) < 0.1)) densav(phas) = eta
1802 END SUBROUTINE density_iteration
1813 SUBROUTINE pressure_spinodal
1820 REAL :: eta_iteration
1821 REAL :: error, acc_i, delta_eta
1828 eta_iteration = eta_start
1835 DO WHILE ( abs(error) > acc_i .AND. i < max_i )
1840 CALL p_eos_interface
1844 delta_eta = error/ pgesd2
1845 IF ( delta_eta > 0.02 ) delta_eta = 0.02
1846 IF ( delta_eta < -0.02 ) delta_eta = -0.02
1848 eta_iteration = eta_iteration - delta_eta
1851 IF (eta_iteration > 0.9) eta_iteration = 0.5
1852 IF (eta_iteration <= 0.0) eta_iteration = 1.e-16
1858 END SUBROUTINE pressure_spinodal
1872 REAL :: eta_0, dist, fact
1873 REAL :: fres1, fres2, fres3, fres4, fres5
1874 REAL :: df_dr, df_dr2, df_dr3, df_dr4
1878 IF (eta > 1.e-1)
THEN 1880 ELSE IF (eta <= 1.e-1 .AND. eta > 1.e-2)
THEN 1885 dist = eta * 5.e-4 * fact
1890 eta = eta_0 - 2.0*dist
1899 eta = eta_0 + 2.0*dist
1906 df_dr = (-fres4+8.0*fres3-8.0*fres2+fres1)/(12.0*dist)
1907 df_dr2 = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
1909 df_dr3 = (fres4-2.0*fres3+2.0*fres2-fres1) /(2.0*dist**3 )
1910 df_dr4 = (fres4-4.0*fres3+6.0*fres5-4.0*fres2+fres1) /(1.0*dist**4 )
1912 WRITE (*,*)
'f` = ',df_dr
1913 WRITE (*,*)
'f`` = ',df_dr2
1914 WRITE (*,*)
'f``` = ',df_dr3
1915 WRITE (*,*)
'f````= ',df_dr4,eta
1933 REAL :: eta_0, dist, fact
1934 REAL :: fres1, fres2, fres3, fres4, fres5
1935 REAL :: df_dr, df_dr2, df_dr3, df_dr4
1939 IF (eta > 1.e-1)
THEN 1941 ELSE IF (eta <= 1.e-1 .AND. eta > 1.e-2)
THEN 1946 dist = eta*5.e-4 *fact
1950 eta = eta_0 - 2.0*dist
1959 eta = eta_0 + 2.0*dist
1966 df_dr = (-fres4+8.0*fres3-8.0*fres2+fres1)/(12.0*dist)
1967 df_dr2 = (-fres4+16.0*fres3-3.d1*fres5+16.0*fres2-fres1) &
1969 df_dr3 = (fres4-2.0*fres3+2.0*fres2-fres1) /(2.0*dist**3 )
1970 df_dr4 = (fres4-4.0*fres3+6.0*fres5-4.0*fres2+fres1) /(1.0*dist**4 )
1972 WRITE (*,*)
'f` = ',df_dr
1973 WRITE (*,*)
'f`` = ',df_dr2
1974 WRITE (*,*)
'f``` = ',df_dr3
1975 WRITE (*,*)
'f````= ',df_dr4,eta
1976 WRITE (*,*)
'z = ',df_dr*eta
1977 WRITE (*,*)
'z` = ',df_dr2*eta + df_dr
1978 WRITE (*,*)
'z`` = ',df_dr3*eta + 2.0* df_dr2
1979 WRITE (*,*)
'z```= ',df_dr4*eta + 3.0* df_dr3 ,eta
1998 REAL,
DIMENSION(nc) :: grada, atilde2, atilde, xsav
2007 flsum = flsum + log(rho*x(k))
2011 atilde(k) = fres*rho+x(k)*rho*log(rho*x(k))
2018 x(i) = xsav(i) + 1.e-8
2022 flsum=flsum+ rho*x(k)*log(x(k))
2026 atilde2(k) = fres*rho+x(k)*rho*log(rho*x(k))
2030 grada(i) = (atilde2(i)-atilde(i) ) /1.e-8
2031 WRITE (*,*)
'grad',i,grada(i)
2035 END SUBROUTINE dfr_eos
double determinant(double **in_matrix, int n)
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains constant...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...