Changeset 2910
- Timestamp:
- 05/14/07 15:48:34 (3 years ago)
- Location:
- trunk/src
- Files:
-
- 6 modified
-
em_resp.F90 (modified) (1 diff)
-
em_resp_calc_inc.F90 (modified) (1 diff)
-
math.F90 (modified) (2 diffs)
-
phonons_lr.F90 (modified) (1 diff)
-
sternheimer_inc.F90 (modified) (9 diffs)
-
vdW.F90 (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/em_resp.F90
r2908 r2910 246 246 call zsternheimer_solve(sh, sys, h, em_vars%lr(dir, :, ifactor), 2 , & 247 247 em_vars%freq_factor(ifactor)*em_vars%omega(iomega) + M_zI * em_vars%eta, & 248 sys%gr%m%x(:, dir),RESTART_DIR,&248 RESTART_DIR,& 249 249 em_rho_tag(em_vars%freq_factor(ifactor)*em_vars%omega(iomega), dir),& 250 em_wfs_tag(dir, ifactor), have_restart_rho=(ierr==0)) 250 em_wfs_tag(dir, ifactor), have_restart_rho=(ierr==0),& 251 vext = sys%gr%m%x(:, dir)) 251 252 else 252 253 call dsternheimer_solve(sh, sys, h, em_vars%lr(dir, :, ifactor), 2 , & 253 254 em_vars%freq_factor(ifactor)*em_vars%omega(iomega), & 254 sys%gr%m%x(:, dir),RESTART_DIR,&255 RESTART_DIR,& 255 256 em_rho_tag(em_vars%freq_factor(ifactor)*em_vars%omega(iomega), dir),& 256 em_wfs_tag(dir, ifactor), have_restart_rho=(ierr==0)) 257 em_wfs_tag(dir, ifactor), have_restart_rho=(ierr==0), & 258 vext = sys%gr%m%x(:, dir)) 257 259 end if 258 260 -
trunk/src/em_resp_calc_inc.F90
r2806 r2910 329 329 do idir = 1, ndim 330 330 do idim = 1, sys%st%d%dim 331 332 call X(sternheimer_calc_hvar)(sh, sys, h, lr(idir, :, ifreq), 2, sys%gr%m%x(:, idir), & 333 hvar(:, :, :, idim, idir, ifreq)) 331 332 do isigma = 1, 2 333 do ispin = 1, sys%st%d%nspin 334 hvar(1:np, ispin, isigma, idim, idir, ifreq) = sys%gr%m%x(1:np, idir) 335 end do 336 end do 337 338 call X(sternheimer_calc_hvar)(sh, sys, h, lr(idir, :, ifreq), 2, hvar(:, :, :, idim, idir, ifreq)) 334 339 335 340 end do !idim -
trunk/src/math.F90
r2903 r2910 59 59 set_app_threshold, & 60 60 operator(.app.), & 61 math_xor, & 61 62 ddelta 62 63 … … 750 751 end function ddelta 751 752 753 logical function math_xor(a, b) 754 logical, intent(in) :: a 755 logical, intent(in) :: b 756 757 math_xor = ( a .or. b ) 758 if ( a .and. b ) math_xor = .false. 759 760 end function math_xor 761 752 762 #include "undef.F90" 753 763 #include "complex.F90" -
trunk/src/phonons_lr.F90
r2908 r2910 120 120 do idir = 1, sys%NDIM 121 121 122 call dsternheimer_solve(sh, sys, h, lr, 1, M_ZERO, dv(1:sys%NP, idir, iatom), &123 RESTART_DIR, phn_rho_tag(iatom, idir), phn_wfs_tag(iatom, idir))122 call dsternheimer_solve(sh, sys, h, lr, 1, M_ZERO, RESTART_DIR, phn_rho_tag(iatom, idir), phn_wfs_tag(iatom, idir), & 123 vext= dv(1:sys%NP, idir, iatom)) 124 124 125 125 do jatom = 1, sys%geo%natoms -
trunk/src/sternheimer_inc.F90
r2781 r2910 26 26 27 27 subroutine X(sternheimer_solve)(& 28 this, sys, h, lr, nsigma, omega, vext,&28 this, sys, h, lr, nsigma, omega, & 29 29 restart_dir, rho_tag, wfs_tag, & 30 have_restart_rho )30 have_restart_rho, vext, vext_psi) 31 31 type(sternheimer_t), intent(inout) :: this 32 32 type(system_t), target, intent(inout) :: sys … … 35 35 integer, intent(in) :: nsigma 36 36 R_TYPE, intent(in) :: omega 37 FLOAT, intent(in) :: vext(:)38 37 character(len=*), intent(in) :: restart_dir 39 38 character(len=*), intent(in) :: rho_tag 40 39 character(len=*), intent(in) :: wfs_tag 40 FLOAT, optional, intent(in) :: vext(:) 41 R_TYPE, optional, intent(in) :: vext_psi(:,:,:,:) 41 42 logical, optional, intent(in) :: have_restart_rho 42 43 … … 61 62 62 63 ASSERT( nsigma==1 .or. nsigma ==2 ) 63 64 ASSERT( math_xor(present(vext), present(vext_psi)) ) 65 64 66 m => sys%gr%m 65 67 st => sys%st … … 106 108 dl_rhoin(1:m%np, 1:st%d%nspin, 1) = lr(1)%X(dl_rho)(1:m%np, 1:st%d%nspin) 107 109 108 call X(sternheimer_calc_hvar)(this, sys, h, lr, nsigma, vext, hvar) 110 do sigma = 1, nsigma 111 do ik = 1, st%d%nspin 112 if(present(vext)) then 113 hvar(1:m%np, ik, sigma) = vext(1:m%np) 114 else 115 hvar(1:m%np, ik, sigma) = M_ZERO 116 end if 117 end do 118 end do 119 120 call X(sternheimer_calc_hvar)(this, sys, h, lr, nsigma, hvar) 109 121 110 122 do ik = 1, st%d%nspin … … 116 128 !calculate the RHS of the Sternheimer eq 117 129 Y(1:m%np, 1, sigma) = -hvar(1:m%np, ik, sigma)*st%X(psi)(1:m%np, 1, ist, ik) 130 131 if(present(vext_psi)) then 132 Y(1:m%np, 1, sigma) = Y(1:m%np, 1, sigma) - vext_psi(1:m%np, 1, ist, ik) 133 end if 118 134 119 135 !and project it into the unoccupied states … … 236 252 end subroutine X(sternheimer_solve) 237 253 238 subroutine X(sternheimer_calc_hvar)(this, sys, h, lr, nsigma, vext,hvar)254 subroutine X(sternheimer_calc_hvar)(this, sys, h, lr, nsigma, hvar) 239 255 type(sternheimer_t), intent(inout) :: this 240 256 type(system_t), target, intent(inout) :: sys … … 242 258 type(lr_t), intent(inout) :: lr(:) 243 259 integer, intent(in) :: nsigma 244 FLOAT, intent(in) :: vext(:)245 260 R_TYPE, intent(out) :: hvar(:,:,:) 246 261 … … 268 283 do ik = 1, sys%st%d%nspin 269 284 270 !* Vext271 hvar(1:np, ik, 1) = vext(1:np)272 273 285 !* hartree 274 if (this%add_hartree) hvar(1:np, ik, 1) = hvar(1:np, ik, 1) & 275 + hartree(1:np) 286 if (this%add_hartree) hvar(1:np, ik, 1) = hvar(1:np, ik, 1) + hartree(1:np) 276 287 277 288 !* fxc … … 279 290 if(.not. this%oep_kernel) then 280 291 do ik2 = 1, sys%st%d%nspin 281 hvar(1:np, ik, 1) = hvar(1:np, ik, 1) + & 282 this%fxc(1:np, ik, ik2)*lr(1)%X(dl_rho)(1:np, ik2) 292 hvar(1:np, ik, 1) = hvar(1:np, ik, 1) + this%fxc(1:np, ik, ik2)*lr(1)%X(dl_rho)(1:np, ik2) 283 293 end do 284 294 else -
trunk/src/vdW.F90
r2799 r2910 243 243 call write_info(1) 244 244 245 call zsternheimer_solve(sh, sys, h, lr(dir, :), 1, omega, sys%gr%m%x(:,dir),&246 RESTART_DIR, em_rho_tag(real(omega),dir), em_wfs_tag(dir,1) )245 call zsternheimer_solve(sh, sys, h, lr(dir, :), 1, omega, & 246 RESTART_DIR, em_rho_tag(real(omega),dir), em_wfs_tag(dir,1), vext=sys%gr%m%x(:,dir)) 247 247 end do 248 248
