11 Module mod_dft_disp_wda
18 Public :: rhoi_disp_wd
19 Public :: a_disp_pcsaft
20 Public :: df_disp_drho_wda
30 SUBROUTINE rhoi_disp_wd ( discret, fa_psi, fa_psi_max, psi_j, rhop, rhoi_disp,user )
35 Use mod_dft
, Only: zp,dzp
38 #include <finclude/petscsys.h> 43 petscscalar :: rhop(ncomp,user%gxs:user%gxe)
44 INTEGER,
INTENT(IN) :: discret
45 INTEGER,
INTENT(IN) :: fa_psi(ncomp)
46 INTEGER,
INTENT(IN) :: fa_psi_max
48 REAL,
INTENT(IN) :: psi_j(ncomp)
50 REAL,
INTENT(OUT) :: rhoi_disp(user%gxs:user%gxe,ncomp)
52 INTEGER :: ii, jj, icomp, nn
54 REAL :: int1, zz1, xl, xh
55 REAL,
DIMENSION(700) :: y2, rx, ry1
62 DO ii = (user%xs-fa_psi_max),(user%xe+fa_psi_max)
64 zl = zp(ii) - psi_j(icomp)
65 zr = zp(ii) + psi_j(icomp)
66 DO jj = (ii-fa_psi(icomp)), (ii+fa_psi(icomp))
67 IF ( zp(jj+1) > (zl+zmin) )
THEN 79 ry1(nn) = rhop(icomp,jj) * (psi_j(icomp)*psi_j(icomp) - zz1*zz1)
82 IF ( zp(jj+1) > (zr-zmin) )
THEN 96 write(*,*)
'rhoi_disp_wd: bigger vectors rx, ry1, ry2, ... required!', nn
100 CALL spline ( rx(1:nn), ry1(1:nn), nn, 1.e30, 1.e30, y2(1:nn) )
101 CALL splint_integral ( rx(1:nn), ry1(1:nn), y2(1:nn), nn, xl, xh, int1 )
102 rhoi_disp(ii,icomp) = int1 * 0.75/psi_j(icomp)**3
104 if ( rhoi_disp(ii,icomp) < 0.0 )
then 105 rhoi_disp(ii,icomp) = 0.0
107 rhoi_disp(ii,icomp) = rhoi_disp(ii,icomp) + (ry1(jj)+ry1(jj-1))/2.0 *(rx(jj)-rx(jj-1))
110 if ( rhoi_disp(ii,icomp) < 0.0 ) rhoi_disp(ii,icomp) = rhop(icomp,ii)
115 END SUBROUTINE rhoi_disp_wd
129 SUBROUTINE a_disp_pcsaft( discret, fa_psi, fa_psi_max, rhoi_disp, rho_disp, adisp, mydisp, dadisp_dr,user )
139 #include <finclude/petscsys.h> 147 INTEGER,
INTENT(IN) :: discret
148 INTEGER,
INTENT(IN) :: fa_psi(ncomp)
149 INTEGER,
INTENT(IN) :: fa_psi_max
150 REAL,
INTENT(IN) :: rhoi_disp(user%gxs:user%gxe,ncomp)
151 REAL,
INTENT(OUT) :: rho_disp(user%gxs:user%gxe)
152 REAL,
INTENT(OUT) :: adisp(user%gxs:user%gxe)
153 REAL,
INTENT(OUT) :: mydisp(user%gxs:user%gxe,ncomp)
154 REAL,
INTENT(OUT) :: dadisp_dr(user%gxs:user%gxe,ncomp)
157 INTEGER :: icomp, jcomp, kcomp
158 REAL,
DIMENSION(ncomp) :: x_disp
159 REAL :: eta_disp, zms_disp
160 REAL,
DIMENSION(0:6) :: apar, bpar, apar_rk, bpar_rk
161 REAL :: m_mean, c1, i1, i2
162 REAL :: r2_ord1, r2_ord2
163 REAL :: eta_rk, m_mean_rk, zms2eta
164 REAL :: c1_m_mean, c1_eta, c1_rk
166 REAL :: r2_ord1_rk, r2_ord2_rk
167 REAL :: term1, term2, term3
169 REAL,
DIMENSION(np,nc) :: mydisp2
173 DO jj = (user%xs-fa_psi_max),(user%xe+fa_psi_max)
177 rho_disp(jj) = sum( rhoi_disp(jj,1:ncomp) )
180 x_disp(kcomp) = rhoi_disp(jj,kcomp) / rho_disp(jj)
181 m_mean = m_mean + x_disp(kcomp) * parame(kcomp,1)
183 eta_disp = eta_disp + rhoi_disp(jj,kcomp) * parame(kcomp,1) * dhs(kcomp)**3.
185 eta_disp = eta_disp * pi / 6.
186 zms_disp = 1. - eta_disp
187 if( zms_disp <= 0. )
write(*,
'(a56,i6,f12.5)')
'system too dense for disp contribution ( jj, eta_disp ):', jj, eta_disp
194 apar(m) = ap(m,1) + (1.-1./m_mean)*ap(m,2) + (1.-1./m_mean)*(1.-2./m_mean)*ap(m,3)
195 bpar(m) = bp(m,1) + (1.-1./m_mean)*bp(m,2) + (1.-1./m_mean)*(1.-2./m_mean)*bp(m,3)
196 i1 = i1 + apar(m) * eta_disp**m
197 i2 = i2 + bpar(m) * eta_disp**m
204 r2_ord1 = r2_ord1 + rhoi_disp(jj,kcomp)*rhoi_disp(jj,jcomp)*parame(kcomp,1) &
205 *parame(jcomp,1)*sig_ij(kcomp,jcomp)**3 * uij(kcomp,jcomp)/t
206 r2_ord2 = r2_ord2 + rhoi_disp(jj,kcomp)*rhoi_disp(jj,jcomp)*parame(kcomp,1) &
207 *parame(jcomp,1)*sig_ij(kcomp,jcomp)**3 * (uij(kcomp,jcomp)/t)**2
211 c1 = (1.-m_mean)*(20.*eta_disp-27.*eta_disp**2 +12.*eta_disp**3 -2.*eta_disp**4 )/(zms_disp*(2.-eta_disp))**2
212 c1 = 1. + m_mean*(8.*eta_disp-2.*eta_disp**2)/zms_disp**4 + c1
217 adisp(jj) = -2.*pi*i1*r2_ord1/rho_disp(jj) - pi*c1*m_mean*i2*r2_ord2/rho_disp(jj)
221 m_mean_rk = ( parame(icomp,1) - m_mean ) / rho_disp(jj)
224 apar_rk(m) = m_mean_rk/m_mean**2 * ( ap(m,2) + (3. - 4./m_mean) * ap(m,3) )
225 bpar_rk(m) = m_mean_rk/m_mean**2 * ( bp(m,2) + (3. - 4./m_mean) * bp(m,3) )
227 eta_rk = parame(icomp,1) * dhs(icomp)**3. * pi / 6.
228 i1_rk = apar_rk(0) + apar(1)*eta_rk + apar_rk(1)*eta_disp
229 i2_rk = bpar_rk(0) + bpar(1)*eta_rk + bpar_rk(1)*eta_disp
231 i1_rk = i1_rk + apar(m)*
REAL(m)*eta_disp**
REAL(m-1)*eta_rk + apar_rk(m)*eta_disp**
REAL(m)
232 i2_rk = i2_rk + bpar(m)*
REAL(m)*eta_disp**
REAL(m-1)*eta_rk + bpar_rk(m)*eta_disp**
REAL(m)
238 r2_ord1_rk = r2_ord1_rk + rhoi_disp(jj,kcomp) * parame(kcomp,1) * sig_ij(icomp,kcomp)**3 * uij(icomp,kcomp)/t
239 r2_ord2_rk = r2_ord2_rk + rhoi_disp(jj,kcomp) * parame(kcomp,1) * sig_ij(icomp,kcomp)**3 *(uij(icomp,kcomp)/t)**2
241 r2_ord1_rk = 2. * parame(icomp,1) * r2_ord1_rk
242 r2_ord2_rk = 2. * parame(icomp,1) * r2_ord2_rk
244 zms2eta = zms_disp * (2.-eta_disp)
245 c1_m_mean = ( 8.*eta_disp - 2.*eta_disp*eta_disp ) / zms_disp**4 &
246 - ( 20.*eta_disp - 27.*eta_disp*eta_disp + 12.*eta_disp**3 - 2.*eta_disp**4 ) / zms2eta**2
247 c1_eta = m_mean * ( 8. + 20.*eta_disp - 4.*eta_disp*eta_disp ) / zms_disp**5 &
248 + (1. - m_mean) * ( 40. - 48.*eta_disp + 12.*eta_disp*eta_disp + 2.*eta_disp**3 ) / zms2eta**3
249 c1_rk = - c1 * c1 * ( eta_rk * c1_eta + m_mean_rk * c1_m_mean )
253 term1 = - 2. * pi * ( i1 * r2_ord1_rk + r2_ord1 * i1_rk )
254 term2 = - pi * c1 * m_mean * ( i2 * r2_ord2_rk + r2_ord2 * i2_rk )
255 term3 = - pi * i2 * r2_ord2 * ( m_mean * c1_rk + c1 * m_mean_rk )
256 mydisp(jj,icomp) = term1 + term2 + term3
257 dadisp_dr(jj,icomp) = ( mydisp(jj,icomp) - adisp(jj) ) / rho_disp(jj)
274 if( rho_disp(jj) == 0. )
then 276 mydisp(jj,icomp) = 0.
277 dadisp_dr(jj,icomp) = 0.
284 END SUBROUTINE a_disp_pcsaft
296 SUBROUTINE df_disp_drho_wda( ii, WDA_var, fa_psi, psi_j, rhop, rhop_sum, &
297 rhoi_disp, rho_disp, adisp, mydisp, dadisp_dr, dF_drho_att,user )
301 Use mod_dft
, Only: zp
304 #include <finclude/petscsys.h> 309 petscscalar :: rhop(ncomp,user%gxs:user%gxe)
312 INTEGER,
INTENT(IN) :: ii, wda_var
313 INTEGER,
INTENT(IN) :: fa_psi(ncomp)
314 REAL,
INTENT(IN) :: psi_j(ncomp)
316 REAL,
INTENT(IN) :: adisp(user%gxs:user%gxe)
317 REAL,
INTENT(IN) :: mydisp(user%gxs:user%gxe,ncomp)
318 REAL,
INTENT(IN) :: rhop_sum(user%gxs:user%gxe)
319 REAL,
INTENT(IN) :: rhoi_disp(user%gxs:user%gxe,ncomp)
320 REAL,
INTENT(IN) :: rho_disp(user%gxs:user%gxe)
321 REAL,
INTENT(IN) :: dadisp_dr(user%gxs:user%gxe,ncomp)
322 REAL,
INTENT(OUT) :: df_drho_att(ncomp)
324 INTEGER :: jj, icomp, nn
326 REAL :: zmin, zl, zr, zz1, xl, xh
327 REAL,
DIMENSION(700) :: y2, hx, hy3
333 zl = zp(ii) - psi_j(icomp)
334 zr = zp(ii) + psi_j(icomp)
335 DO jj = (ii-fa_psi(icomp)), (ii+fa_psi(icomp))
336 IF ( zp(jj+1) > (zl+zmin) )
THEN 346 zz1 = zp(jj) - zp(ii)
348 if(wda_var == 1) hy3(nn) = mydisp(jj,icomp) * ( psi_j(icomp)*psi_j(icomp) - zz1**2 )
349 if(wda_var == 2) hy3(nn) = rhop_sum(jj) * dadisp_dr(jj,icomp) * ( psi_j(icomp)*psi_j(icomp) - zz1**2 )
352 IF ( zp(jj+1) > (zr-zmin) )
THEN 367 write(*,*)
'Surface Tension Code: dF_disp_wd_pcsaft: bigger vectors hx, hy3, ... required!', nn
371 CALL spline ( hx(1:nn), hy3(1:nn), nn, 1.e30, 1.e30, y2(1:nn) )
372 CALL splint_integral( hx(1:nn), hy3(1:nn), y2(1:nn), nn, xl, xh, int3 )
374 if(wda_var == 1) df_drho_att(icomp) = int3 * 0.75 / psi_j(icomp)**3.
375 if(wda_var == 2) df_drho_att(icomp) = int3 * 0.75 / psi_j(icomp)**3. + adisp(ii)
379 END SUBROUTINE df_disp_drho_wda
383 End Module mod_dft_disp_wda
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains constant...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...
In this module, the application context is defined.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW This module contains paramete...