mirror of https://gitlab.com/QEF/q-e.git
Merged changes from upstream develop
This commit is contained in:
commit
f666d237e1
|
@ -23,8 +23,15 @@ include/c_defs.h
|
|||
install/config.log
|
||||
install/config.status
|
||||
install/configure.msg
|
||||
install/make-*
|
||||
install/configure-*
|
||||
install/uncompress-*
|
||||
test-suite/*/test.err.*
|
||||
test-suite/*/test.out.*
|
||||
*/results
|
||||
S3DE
|
||||
|
||||
D3Q
|
||||
W90
|
||||
archive/wannier90-*tgz
|
||||
wannier90-*
|
||||
tempdir
|
||||
|
|
|
@ -2013,13 +2013,16 @@ Nota Bene 1: For calwf = 5, wffort is not used. The
|
|||
}
|
||||
|
||||
label {
|
||||
Optional card, reads velocities (in atomic units) from standard input
|
||||
Optional card, reads velocities from standard input
|
||||
}
|
||||
|
||||
|
||||
message {
|
||||
when starting with ion_velocities="from_input" it is convenient
|
||||
to perform few steps (~5-10) with a smaller time step (0.5 a.u.)
|
||||
to perform few steps (~5-10) with a smaller time step (0.5 a.u.).
|
||||
The velocities must be expressed using the same length units
|
||||
indicated in the card ATOMIC_POSITIONS, divided by time
|
||||
in atomic units.
|
||||
}
|
||||
|
||||
syntax {
|
||||
|
|
|
@ -14,6 +14,7 @@ MODULE cg_module
|
|||
SAVE
|
||||
|
||||
logical :: tcg = .false. ! if true do conjugate gradient minimization for electrons
|
||||
integer :: nfi_firstcg = 0 ! number of the step of the first conjugate gradient step (the algoritm has to do different things)
|
||||
integer :: maxiter = 100 ! maximum number of iterations
|
||||
real(DP) :: conv_thr = 1.d-5 !energy treshold
|
||||
real(DP) :: passop =0.3d0 !small step for conjugate gradient
|
||||
|
@ -101,7 +102,10 @@ CONTAINS
|
|||
INTEGER :: nfi
|
||||
LOGICAL :: tfirst
|
||||
INTEGER :: i, ig
|
||||
if(.not. tfirst.and.(mod(nfi,10).ne.1)) then
|
||||
! if(.not. tfirst.and.(mod(nfi,10).ne.1)) then ! why mod(nfi,10).ne.1 ?
|
||||
! isn't this the condition that is satisfied only by the first step, when
|
||||
! tfirst=true ?
|
||||
if(.not. tfirst .and. nfi .ne. nfi_firstcg) then
|
||||
call DSWAP(2*ngw*n,c0,1,c0old,1)
|
||||
do i=1,n
|
||||
do ig=1,ngw
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
rhor, rhog, rhos, rhoc, ei1, ei2, ei3, sfac, fion, ema0bg, becdr, &
|
||||
lambdap, lambda, nlam, vpot, c0, cm, phi, dbec,l_cprestart )
|
||||
|
||||
!! please see https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.64.1045
|
||||
|
||||
use kinds, only: dp
|
||||
use control_flags, only: tpre, iverbosity, tfor, tprnfor
|
||||
|
||||
|
@ -158,6 +160,7 @@
|
|||
write(stdout,*) 'PERFORMING CONJUGATE GRADIENT MINIMIZATION OF EL. STATES'
|
||||
|
||||
!set tpa preconditioning
|
||||
!eq. 5.16 of https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.64.1045
|
||||
|
||||
call emass_precond_tpa( ema0bg, tpiba2, emass_cutoff )
|
||||
|
||||
|
|
|
@ -53,7 +53,17 @@
|
|||
! National Institute of Standards and Technology (NIST), Award No. 70NANB3H3065
|
||||
!
|
||||
!********************************************************************************
|
||||
|
||||
|
||||
!********************************************************************************
|
||||
! 04/2018
|
||||
! Implemented switch from CG to Verlet and from Verlet to CG.
|
||||
! The code automagically set the correct wfc velocity after the last CG step,
|
||||
! and inizialize again the mass of the electron mu(k) after the CG.
|
||||
! Note that CG modifies the array of the electron mass.
|
||||
!
|
||||
! Riccardo Bertossa, Federico Grasselli
|
||||
! (SISSA - via Bonomea, 265 - 34136 Trieste ITALY)
|
||||
!********************************************************************************
|
||||
|
||||
MODULE cp_autopilot
|
||||
!---------------------------------------------------------------------------
|
||||
|
@ -75,10 +85,13 @@ MODULE cp_autopilot
|
|||
USE autopilot, ONLY : current_nfi, pilot_p, pilot_unit, pause_p,auto_error, &
|
||||
& parse_mailbox, rule_isave, rule_iprint, rule_dt, rule_emass, &
|
||||
& rule_electron_dynamics, rule_electron_damping, rule_ion_dynamics, &
|
||||
& rule_ion_damping, rule_ion_temperature, rule_tempw
|
||||
& rule_ion_damping, rule_ion_temperature, rule_tempw, &
|
||||
& rule_electron_orthogonalization, rule_tprint
|
||||
USE autopilot, ONLY : event_index, event_step, event_isave, event_iprint, &
|
||||
& event_dt, event_emass, event_electron_dynamics, event_electron_damping, &
|
||||
& event_ion_dynamics, event_ion_damping, event_ion_temperature, event_tempw
|
||||
& event_ion_dynamics, event_ion_damping, event_ion_temperature, event_tempw, &
|
||||
& event_electron_orthogonalization, &
|
||||
& event_tprint
|
||||
|
||||
IMPLICIT NONE
|
||||
SAVE
|
||||
|
@ -86,9 +99,12 @@ MODULE cp_autopilot
|
|||
|
||||
PRIVATE
|
||||
PUBLIC :: pilot, employ_rules
|
||||
|
||||
LOGICAL, PRIVATE :: had_tcg_true = .false.
|
||||
LOGICAL, PRIVATE :: had_tens_true = .false.
|
||||
CONTAINS
|
||||
|
||||
|
||||
|
||||
|
||||
!-----------------------------------------------------------------------
|
||||
! EMPLOY_RULES
|
||||
|
@ -97,17 +113,33 @@ CONTAINS
|
|||
USE input_parameters, ONLY : dt, &
|
||||
& electron_dynamics, electron_damping, &
|
||||
& ion_dynamics, ion_damping, &
|
||||
& ion_temperature, fnosep, nhpcl, nhptyp, nhgrp, fnhscl, ndega, nat
|
||||
& ion_temperature, fnosep, nhpcl, nhptyp, nhgrp, fnhscl, ndega, nat, &
|
||||
& orthogonalization
|
||||
use ions_nose, ONLY: tempw
|
||||
USE control_flags, only: tsde, tsdp, tfor, tcp, tnosep, isave,iprint,&
|
||||
tconvthrs, tolp, &
|
||||
ekin_conv_thr, forc_conv_thr, etot_conv_thr
|
||||
ekin_conv_thr, forc_conv_thr, etot_conv_thr,&
|
||||
tortho, tfirst, tlast, tprint
|
||||
use wave_base, only: frice
|
||||
use ions_base, only: fricp
|
||||
USE ions_nose, ONLY: ions_nose_init
|
||||
USE io_global, ONLY: ionode, ionode_id
|
||||
USE time_step, ONLY : set_time_step
|
||||
USE cp_electronic_mass, ONLY: emass
|
||||
USE time_step, ONLY : set_time_step
|
||||
USE cp_electronic_mass, ONLY: emass, emass_cutoff, emass_precond
|
||||
USE cg_module, ONLY : tcg,allocate_cg,cg_info, &
|
||||
nfi_firstcg,c0old
|
||||
USE wavefunctions_module, ONLY : cm_bgrp
|
||||
USE ensemble_dft, ONLY : tens,allocate_ensemble_dft
|
||||
USE uspp, ONLY : nkb, nkbus
|
||||
USE electrons_base, ONLY : nspin, nbsp, nbspx, nudx
|
||||
USE gvecw, ONLY : ngw
|
||||
USE fft_base, ONLY : dffts
|
||||
USE cp_main_variables, ONLY : descla
|
||||
USE ions_base, ONLY : nat_ions_base => nat
|
||||
USE cell_base, ONLY : tpiba2
|
||||
USE cp_main_variables, ONLY : ema0bg
|
||||
USE gvecw, ONLY : g2kin, ngw
|
||||
|
||||
IMPLICIT NONE
|
||||
|
||||
!----------------------------------------
|
||||
|
@ -126,9 +158,16 @@ CONTAINS
|
|||
IF ( ionode ) write(*,'(4X,A,13X,I10)') 'Rule event: iprint', iprint
|
||||
endif
|
||||
|
||||
! TPRINT
|
||||
if (event_tprint(event_index)) then
|
||||
tprint = rule_tprint(event_index)
|
||||
IF ( ionode ) write(*,*) 'NUOVO Rule event: tprint', tprint
|
||||
endif
|
||||
|
||||
! DT
|
||||
if (event_dt(event_index)) then
|
||||
dt = rule_dt(event_index)
|
||||
CALL set_time_step( dt )
|
||||
CALL set_time_step( dt ) ! This will make the old velocities wrong!
|
||||
IF ( ionode ) write(*,'(4X,A,18X,F10.4)') 'Rule event: dt', dt
|
||||
endif
|
||||
|
||||
|
@ -139,6 +178,22 @@ CONTAINS
|
|||
!----------------------------------------
|
||||
! &ELECTRONS
|
||||
!----------------------------------------
|
||||
|
||||
|
||||
if (event_electron_orthogonalization(event_index)) then
|
||||
orthogonalization=rule_electron_orthogonalization(event_index)
|
||||
select case (orthogonalization)
|
||||
case ('ORTHO')
|
||||
tortho=.true.
|
||||
IF ( ionode ) write(*,*) 'Wow, setting tortho=.true. !'
|
||||
case ('GRAM-SCHMIDT')
|
||||
tortho=.false.
|
||||
IF ( ionode ) write(*,*) 'Wow, setting tortho=.false. ! (Ma cossa xe sta monada?)'
|
||||
case default
|
||||
call auto_error(' autopilot ',' unknown orthogonalization'//trim(orthogonalization) )
|
||||
end select
|
||||
|
||||
endif
|
||||
|
||||
! EMASS
|
||||
if (event_emass(event_index)) then
|
||||
|
@ -150,17 +205,49 @@ CONTAINS
|
|||
! electron_dynamics = 'sd' | 'verlet' | 'damp' | 'none'
|
||||
if (event_electron_dynamics(event_index)) then
|
||||
electron_dynamics= rule_electron_dynamics(event_index)
|
||||
frice = 0.d0
|
||||
frice = 0.d0
|
||||
! the cg algorithm uses cm for its internal purposes. The true cm is
|
||||
! c0old, so now I have to copy it into cm
|
||||
if ( tcg ) then
|
||||
cm_bgrp=c0old
|
||||
! tfirst=.true. !check if this is needed (I don't think so)
|
||||
! the conjugate gradient method modifies the electron mass mu(k),
|
||||
! by calling the routine
|
||||
! emass_precond_tpa( ema0bg, tpiba2, emass_cutoff )
|
||||
! so I call here the standard routine to set mu(k)
|
||||
CALL emass_precond( ema0bg, g2kin, ngw, tpiba2, emass_cutoff)
|
||||
|
||||
endif
|
||||
select case ( electron_dynamics )
|
||||
case ('SD')
|
||||
tsde = .true.
|
||||
tcg=.false.
|
||||
case ('VERLET')
|
||||
tsde = .false.
|
||||
tcg=.false.
|
||||
case ('DAMP')
|
||||
tsde = .false.
|
||||
frice = electron_damping
|
||||
tcg=.false.
|
||||
case ('NONE')
|
||||
tsde = .false.
|
||||
tcg=.false.
|
||||
case ('CG')
|
||||
IF ( ionode ) write(*,*) 'Wow, setting tcg=.true. at step '&
|
||||
,current_nfi,' ! (La ghe domandi a mia molie)'
|
||||
if (.not. tcg) then
|
||||
nfi_firstcg=current_nfi !the first step is different!
|
||||
end if
|
||||
if (.not. had_tcg_true) then
|
||||
had_tcg_true=.true.
|
||||
if (.not. had_tens_true) then
|
||||
CALL allocate_ensemble_dft( nkb, nbsp, ngw, nudx, nspin, nbspx, &
|
||||
dffts%nnr, nat_ions_base, descla )
|
||||
endif
|
||||
CALL allocate_cg( ngw, nbspx,nkbus )
|
||||
endif
|
||||
CALL cg_info()
|
||||
tcg = .true.
|
||||
case default
|
||||
call auto_error(' autopilot ',' unknown electron_dynamics '//trim(electron_dynamics) )
|
||||
end select
|
||||
|
@ -248,6 +335,12 @@ CONTAINS
|
|||
case ('NOSE')
|
||||
tnosep = .true.
|
||||
tcp = .false.
|
||||
if ( .not. event_tempw(event_index)) then
|
||||
IF ( ionode ) write(*,*) 'WARNING: missing tempw event (if undefined can make the code bananas) '
|
||||
end if
|
||||
if ( .not. tfor) then
|
||||
IF ( ionode ) write(*,*) 'WARNING: not doing Verlet on ions? (am I correct?)'
|
||||
end if
|
||||
case ('NOT_CONTROLLED')
|
||||
tnosep = .false.
|
||||
tcp = .false.
|
||||
|
@ -298,12 +391,22 @@ CONTAINS
|
|||
#if defined (__NAG)
|
||||
USE f90_unix_proc
|
||||
#endif
|
||||
USE ensemble_dft, ONLY : tens
|
||||
USE cg_module, ONLY : tcg
|
||||
USE control_flags , only : tprint
|
||||
|
||||
IMPLICIT NONE
|
||||
INTEGER :: nfi
|
||||
LOGICAL :: file_p
|
||||
CHARACTER (LEN=256) :: mbfile = "pilot.mb"
|
||||
|
||||
! The tcg control variable, that enables conjugate gradient electron
|
||||
! dynamics, allocates some arrays when used in the input file. So I check
|
||||
! if this variable is defined, and set had_tcg_true to true.
|
||||
|
||||
if (tcg) had_tcg_true = .true.
|
||||
if (tens) had_tens_true = .true.
|
||||
|
||||
! Dynamics Loop Started
|
||||
pilot_p = .TRUE.
|
||||
|
||||
|
@ -364,6 +467,9 @@ CONTAINS
|
|||
|
||||
end do pause_loop
|
||||
|
||||
|
||||
|
||||
|
||||
! Autopilot (Dynamic Rules) Implementation
|
||||
! When nfi has passed (is greater than
|
||||
! the next event, then employ rules
|
||||
|
@ -388,7 +494,44 @@ CONTAINS
|
|||
|
||||
enddo
|
||||
|
||||
! During the last step of electron conjugate gradient,
|
||||
! set tprint to .true. if next step has electron_dynamics = Verlet
|
||||
! This is needed to calculate wavefunctions at time t and (t - dt)
|
||||
if (need_tprint_true() ) then
|
||||
tprint = .true.
|
||||
if (ionode) then
|
||||
WRITE(*,*) '=================================================='
|
||||
WRITE(*,*) ' Setting tprint=.true. for this step (last of CG)'
|
||||
WRITE(*,*) '=================================================='
|
||||
endif
|
||||
endif
|
||||
|
||||
end subroutine pilot
|
||||
|
||||
function need_tprint_true()
|
||||
! Check if next step is a Verlet. In such case returns .true.
|
||||
! Used whenever tprint == .true. is needed, e.g. to let CG
|
||||
! calculate wavefunctions at time t and (t - dt) via projections
|
||||
! onto the occupied manifold.
|
||||
! This function has to be called after 'call employ_rules()'!
|
||||
USE cg_module, ONLY : tcg
|
||||
LOGICAL :: need_tprint_true
|
||||
INTEGER :: event_idx
|
||||
|
||||
need_tprint_true = .FALSE.
|
||||
event_idx = event_index
|
||||
do while ( event_idx .le. size(event_step) .and. (event_step(event_idx)==current_nfi+1) )
|
||||
|
||||
if ( tcg .and. event_electron_dynamics(event_idx) .and. &
|
||||
& (rule_electron_dynamics(event_idx)=='VERLET') ) then
|
||||
|
||||
need_tprint_true = .TRUE.
|
||||
|
||||
end if
|
||||
event_idx = event_idx + 1
|
||||
enddo
|
||||
RETURN
|
||||
end function need_tprint_true
|
||||
|
||||
END MODULE cp_autopilot
|
||||
|
||||
|
|
|
@ -333,8 +333,8 @@ MODULE cp_restart_new
|
|||
!-------------------------------------------------------------------------------
|
||||
! ... BAND STRUCTURE
|
||||
!-------------------------------------------------------------------------------
|
||||
CALL qexsd_init_total_energy(output_obj%total_energy,enthal, 0.0_dp, eht,&
|
||||
vave, exc, 0.0_dp, 0.0_dp, 0.0_dp)
|
||||
CALL qexsd_init_total_energy(output_obj%total_energy, ETOT = enthal , &
|
||||
EHART = eht, VTXC = vave, ETXC = exc )
|
||||
!-------------------------------------------------------------------------------
|
||||
! ... BAND STRUCTURE
|
||||
!-------------------------------------------------------------------------------
|
||||
|
|
|
@ -18,7 +18,9 @@ SUBROUTINE cprmain( tau_out, fion_out, etot_out )
|
|||
ndr, ndw, nomore, tsde, textfor, &
|
||||
tortho, tnosee, tnosep, trane, tranp, &
|
||||
tsdp, tcp, tcap, ampre, amprp, tnoseh, &
|
||||
tolp, ortho_eps, ortho_max
|
||||
tolp, ortho_eps, ortho_max, &
|
||||
tfirst, tlast !moved here to make
|
||||
!autopilot work
|
||||
USE core, ONLY : rhoc
|
||||
USE uspp_param, ONLY : nhm, nh, nvb, ish
|
||||
USE uspp, ONLY : nkb, vkb, becsum, deeq, okvan, nlcc_any
|
||||
|
@ -106,7 +108,7 @@ SUBROUTINE cprmain( tau_out, fion_out, etot_out )
|
|||
USE cp_autopilot, ONLY : pilot
|
||||
USE ions_nose, ONLY : ions_nose_allocate, ions_nose_shiftvar
|
||||
USE orthogonalize_base, ONLY : updatc
|
||||
USE control_flags, ONLY : force_pairing
|
||||
USE control_flags, ONLY : force_pairing, tprint
|
||||
USE mp, ONLY : mp_bcast, mp_sum
|
||||
USE mp_global, ONLY : root_bgrp, intra_bgrp_comm, np_ortho, &
|
||||
me_ortho, ortho_comm, &
|
||||
|
@ -128,8 +130,8 @@ SUBROUTINE cprmain( tau_out, fion_out, etot_out )
|
|||
!
|
||||
! ... control variables
|
||||
!
|
||||
LOGICAL :: tfirst, tlast, tstop, tconv
|
||||
LOGICAL :: tprint, tfile, tstdout
|
||||
LOGICAL :: tstop, tconv
|
||||
LOGICAL :: tfile, tstdout
|
||||
! logical variable used to control printout
|
||||
!
|
||||
! ... forces on ions
|
||||
|
@ -169,9 +171,9 @@ SUBROUTINE cprmain( tau_out, fion_out, etot_out )
|
|||
enow = 1.D9
|
||||
stress = 0.0D0
|
||||
thstress = 0.0D0
|
||||
!
|
||||
tfirst = .TRUE.
|
||||
tlast = .FALSE.
|
||||
! moved to control_flags.f90 (Modules)
|
||||
! tfirst = .TRUE.
|
||||
! tlast = .FALSE.
|
||||
nacc = 5
|
||||
!
|
||||
if (dft_is_meta()) then
|
||||
|
@ -213,7 +215,7 @@ SUBROUTINE cprmain( tau_out, fion_out, etot_out )
|
|||
dt2bye = dt2 / emass
|
||||
nfi = nfi + 1
|
||||
tlast = ( nfi == nomore ) .OR. tlast
|
||||
tprint = ( MOD( nfi, iprint ) == 0 ) .OR. tlast
|
||||
tprint = ( MOD( nfi, iprint ) == 0 ) .OR. tlast !this can be set to .true. also by cp_autopilot in 'call pilot(nfi)', to compute velocities of the wfc in the last step of CG
|
||||
tfile = ( MOD( nfi, iprint ) == 0 )
|
||||
tstdout = ( MOD( nfi, iprint_stdout ) == 0 ) .OR. tlast
|
||||
!
|
||||
|
@ -823,6 +825,8 @@ SUBROUTINE cprmain( tau_out, fion_out, etot_out )
|
|||
END IF
|
||||
!
|
||||
! ... now: cm=c(t) c0=c(t+dt)
|
||||
! ... and, if tcg == .true. :
|
||||
! ... c0old=c(t),c0=c(t+dt)
|
||||
!
|
||||
tfirst = .FALSE.
|
||||
!
|
||||
|
|
|
@ -90,7 +90,11 @@ chargedensity.o : smallbox_gvec.o
|
|||
chargedensity.o : smallbox_subs.o
|
||||
chargedensity.o : wannier_base.o
|
||||
cp_autopilot.o : ../../Modules/autopilot.o
|
||||
cp_autopilot.o : ../../Modules/cell_base.o
|
||||
cp_autopilot.o : ../../Modules/control_flags.o
|
||||
cp_autopilot.o : ../../Modules/electrons_base.o
|
||||
cp_autopilot.o : ../../Modules/fft_base.o
|
||||
cp_autopilot.o : ../../Modules/gvecw.o
|
||||
cp_autopilot.o : ../../Modules/input_parameters.o
|
||||
cp_autopilot.o : ../../Modules/io_global.o
|
||||
cp_autopilot.o : ../../Modules/ions_base.o
|
||||
|
@ -98,10 +102,15 @@ cp_autopilot.o : ../../Modules/kind.o
|
|||
cp_autopilot.o : ../../Modules/mp_world.o
|
||||
cp_autopilot.o : ../../Modules/parser.o
|
||||
cp_autopilot.o : ../../Modules/timestep.o
|
||||
cp_autopilot.o : ../../Modules/uspp.o
|
||||
cp_autopilot.o : ../../Modules/wave_base.o
|
||||
cp_autopilot.o : ../../Modules/wavefunctions.o
|
||||
cp_autopilot.o : ../../UtilXlib/mp.o
|
||||
cp_autopilot.o : cg.o
|
||||
cp_autopilot.o : cp_emass.o
|
||||
cp_autopilot.o : ensemble_dft.o
|
||||
cp_autopilot.o : ions_nose.o
|
||||
cp_autopilot.o : mainvar.o
|
||||
cp_emass.o : ../../Modules/control_flags.o
|
||||
cp_emass.o : ../../Modules/kind.o
|
||||
cp_interfaces.o : ../../LAXlib/la_types.o
|
||||
|
|
|
@ -135,7 +135,12 @@ SUBROUTINE from_restart( )
|
|||
!
|
||||
WRITE( stdout, 515 ) ampre
|
||||
!
|
||||
515 FORMAT( 3X,'Initial random displacement of el. coordinates',/ &
|
||||
515 FORMAT( 3X,'',/ &
|
||||
3X,'!======================================!',/ &
|
||||
3X,'!======RANDOMIZING WAVE FUNCTIONS======!',/ &
|
||||
3X,'!======================================!',/ &
|
||||
3X,'',/ &
|
||||
3X,'Initial random displacement of el. coordinates',/ &
|
||||
3X,'Amplitude = ',F10.6 )
|
||||
!
|
||||
CALL rande_base( c0_bgrp, ampre )
|
||||
|
|
|
@ -164,7 +164,7 @@ they don't like.
|
|||
|
||||
{\bf Important notice:} the development model of \qe\ has undergone
|
||||
significant changes after release 6.2.1. The development has moved to
|
||||
GitLab. the official GIT repository is visible at
|
||||
GitLab. The official git repository is visible at
|
||||
\texttt{git.quantum-espresso.org} and can be downloaded as follows:
|
||||
\begin{verbatim}
|
||||
git clone https://gitlab.com/QEF/q-e.git
|
||||
|
@ -210,19 +210,18 @@ localized to a small part of \qe, or they are quite independent anyway
|
|||
from the rest of \qe. In that case, you may just send a patch or the
|
||||
modified routine(s) to an expert developer who will review it and
|
||||
take the appropriate steps. The preferred path is however a ``merge request''
|
||||
on GitLab.
|
||||
on GitLab (see Sect.\ref{Sec:git}),
|
||||
|
||||
{\em Important:} keep your modified copy of the distribution aligned to GIT.
|
||||
Don't work for years, or even for months, without keeping an eye to what is
|
||||
going on in the GIT repository. This is especially true for projects that
|
||||
modify or use \qe\ code and routines. Update your copy frequently (using
|
||||
command \texttt{git pull}), verify if changes made meanwhile by other
|
||||
developers conflict with your changes. See Sect. \ref{SubSec:Conflicts}
|
||||
for hints on how to remove conflicts and on how to figure out what went wrong.
|
||||
{\em Important:} keep your modified copy of the distribution aligned to the
|
||||
repository. Don't work for years, or even for months, without keeping an eye
|
||||
to what is going on in the repository. This is especially true for projects
|
||||
that modify or use \qe\ code and routines. Update your copy frequently,
|
||||
verify if changes made meanwhile by other developers conflict with your
|
||||
changes.
|
||||
If your project just uses the \qe\ installation procedure and/or data files,
|
||||
it is less likely to run into problems, since major incompatible changes are
|
||||
quite rare. You may still need to verify from time to time that everything keeps
|
||||
working. though.
|
||||
working, though.
|
||||
|
||||
\subsection{Hints, Caveats, Do's and Dont's for developers}
|
||||
|
||||
|
@ -275,7 +274,7 @@ tabulators \^{}I.
|
|||
\item When you modify the program sources, run the
|
||||
\texttt{install/makedeps.sh} script or type \texttt{make depend}
|
||||
to update files \texttt{make.depend} in the various
|
||||
subdirectories. These files are under GIT as well;
|
||||
subdirectories. These files are under git as well;
|
||||
if modified they should be committed.
|
||||
\end{itemize}
|
||||
|
||||
|
@ -1979,61 +1978,105 @@ read\_namelists.f90 )
|
|||
\end{verbatim}
|
||||
\end{enumerate}
|
||||
|
||||
\section{Using SVN}
|
||||
\label{Sec:SVN}
|
||||
{\bf Notice}: since February 2018, \qe is maintained on GIT and no
|
||||
longer on SVN.
|
||||
|
||||
\subsection{Removing conflicts}
|
||||
\label{SubSec:Conflicts}
|
||||
When you update your working copy of the repository,
|
||||
you may encounter two types of conflicts:
|
||||
\begin{enumerate}
|
||||
\item Somebody else has changed the same lines that you have
|
||||
modified.
|
||||
\item Somebody else has changed something that has broken one
|
||||
or more functionalities of your modified version.
|
||||
\end{enumerate}
|
||||
Here we are concerned with kind 1. of conflicts, those that
|
||||
are noticed by SVN and produce, in addition to a message with
|
||||
a "C" in the first column before the conflicting file name:
|
||||
\begin{itemize}
|
||||
\item \texttt{conflicting-file} containing an attempted merge
|
||||
of your version with the SVN version, with conflicting sections
|
||||
indicated by
|
||||
\begin{verbatim}
|
||||
<<<<<<<
|
||||
(your version)
|
||||
=======
|
||||
(SVN version)
|
||||
>>>>>>>
|
||||
\end{verbatim}
|
||||
\item \texttt{conflicting-file.mine} containing your version
|
||||
\item two \texttt{conflicting-file.rXXXXX} containing the two most
|
||||
recent versions (\texttt{XXXXX} is the revision number) in SVN.
|
||||
\end{itemize}
|
||||
Look into the conflicting section(s): in most cases, conflicts are trivial
|
||||
(format changes, white spaces) or easily solved (the part of the code you
|
||||
were modifying has been moved to another place, or a variable has meanwhilke
|
||||
changed name, for instance). Edit \texttt{conflicting-file}, remove all other
|
||||
copies of \texttt{conflicting-file.*}, commit.
|
||||
|
||||
\section{Using git}
|
||||
\label{Sec:git}
|
||||
|
||||
GIT is a very populare versioning control system for collaborative development
|
||||
nowadays. The web is full of tutorials and guide about how to use it, covering
|
||||
simple novice concepts to master the most sophisticated functionalities. The
|
||||
following links contain an introduction to \texttt{git}:
|
||||
\begin{verbatim}
|
||||
https://git-scm.com/book/en/v2/Getting-Started-Git-Basics
|
||||
https://git-scm.com/course/svn.html
|
||||
\end{verbatim}
|
||||
Very quick guide to \texttt{git} commands for the impatient:
|
||||
The following notes cover the \qe-specific work organization, plus the
|
||||
essential git commands. Those interested in mastering git may consult
|
||||
one of the many available on-line guides and tutorials, e.g.,
|
||||
\verb|git-scm.com/book/en/v2|.
|
||||
|
||||
The git repository is hosted on GitLab: \verb|https://gitlab.com/QEF/q-e|.
|
||||
A mirror, automatically aligned every week, is available
|
||||
on GitHub: \verb|https://github.com/QEF/q-e|. To download the repository:
|
||||
\begin{quote}
|
||||
\verb|git clone https://gitlab.com/QEF/q-e.git| or\\
|
||||
\verb|git clone git@gitlab.com:QEF/q-e.git|
|
||||
\end{quote}
|
||||
Registration on GitLab is not needed, just useful. GitLab accepts a number
|
||||
of other accounts (Google, GitHub, ...) to sign in.
|
||||
|
||||
The repository contains a ``master''(default) and a ``develop'' branch,
|
||||
plus other branches for specific goals. The ``develop'' branch is
|
||||
where development goes on. The ``master'' branch is aligned to the
|
||||
``develop'' branch from time to time, when ``develop'' looks stable
|
||||
enough. No other changes are allowed in ``master'' except for serious
|
||||
bugs.
|
||||
|
||||
\subsection{Developing with git}
|
||||
|
||||
Development can proceed in different ways:
|
||||
\begin{enumerate}
|
||||
\item Via ``merge'' requests from a private repository
|
||||
\item Via ``merge'' requests from a branch
|
||||
\item Directly into the ``develop'' branch
|
||||
\end{enumerate}
|
||||
The first option is the recommended one. Register on GitLab and {\em save
|
||||
your public ssh keys} on your GitLab account. Then:
|
||||
\begin{itemize}
|
||||
\item
|
||||
\texttt{clone}: Initial download, makes a local copy of a (typically
|
||||
remote repository)
|
||||
\item {\em fork} the QEF/q-e project: point your browser to
|
||||
\verb|https://gitlab.com/QEF/q-e|, use the ``fork'' button
|
||||
\item {\em clone} your GitLab fork on your workstation, e.g.:\\
|
||||
\verb|git clone git@gitlab.com:<your-username>/q-e.git|
|
||||
\item {\em switch} to the ``develop'' branch of your fork
|
||||
(not strictly needed, just to keep the symmetry):
|
||||
\verb|git checkout --track origin/develop|
|
||||
\end{itemize}
|
||||
Once you have changed your local copy of the repository,
|
||||
you have to {\em commit} (save) those changes:
|
||||
\begin{quote}
|
||||
\verb|git add list-of-changed-or-added-files|\\
|
||||
\verb|git commit |
|
||||
\end{quote}
|
||||
then you can align the repository to the ``develop'' branch:
|
||||
\begin{quote}
|
||||
\verb|git pull git@gitlab.com:QEF/q-e.git develop|
|
||||
\end{quote}
|
||||
If a file is modified both locally and in the repository, a conflict
|
||||
will arise. You can use the \texttt{stash} to resolve the conflict:
|
||||
\begin{quote}
|
||||
\verb|git stash save | (save and remove modified files)\\
|
||||
\verb|git pull ... | (update files)\\
|
||||
\verb|git stash apply| (overwrite with locally modified files)
|
||||
\end{quote}
|
||||
Beware! you may need to manually merge files that have been modified both
|
||||
by you and in the repository.
|
||||
The stash can be cleared using \texttt{git stash clear}.
|
||||
|
||||
Note: it is good practice to use \verb|git fetch| before a pull,
|
||||
as in, e.g.:
|
||||
\begin{quote}
|
||||
\verb|git fetch git@gitlab.com:QEF/q-e.git develop|
|
||||
\end{quote}
|
||||
|
||||
You may repeat the procedure above, adding more commits to your local copy.
|
||||
Unlike in svn, you need to explicitly {\em push} (publish) them to the remote
|
||||
repository with
|
||||
\begin{verbatim}
|
||||
git push
|
||||
\end{verbatim}
|
||||
Your repository (more exactly, the ``develop'' branch of your repository)
|
||||
should now contain only the differences you want to apply to the ``develop''
|
||||
branch of the official repository. You can use the GitLab web interface to
|
||||
do a ``merge request'', that some other developer will review and approve
|
||||
(or not).
|
||||
|
||||
\subsection{Working directly into the develop branch}
|
||||
Only for people knowing what thay are doing (or ready to fix the mess in case
|
||||
they didn't know what they were doing):
|
||||
\begin{itemize}
|
||||
\item \verb|git clone git@gitlab.com:QEF/q-e.git| if not already done
|
||||
\item Ensure you switch to the ``develop'' branch:
|
||||
\verb|git checkout --track origin/develop|
|
||||
\item Work on it as in the previous subsection
|
||||
\item When you are ready, \verb|git push|
|
||||
\end{itemize}
|
||||
|
||||
\subsection{A few useful commands}
|
||||
\begin{itemize}
|
||||
\item \texttt{status}: information on the current state of the repository
|
||||
\item \texttt{diff}: difference between the local copy and the repository
|
||||
\item \texttt{fetch}:
|
||||
looks at the remote repository, signals if new files or conflicts are present
|
||||
in case the local copy is updated
|
||||
|
@ -2049,30 +2092,8 @@ Very quick guide to \texttt{git} commands for the impatient:
|
|||
to one or more remote repositories
|
||||
\item \texttt{merge} merges two branches (typically the local one and
|
||||
the remote one). A merge may be easy or complex, depending upon the type of
|
||||
conflicts. See:
|
||||
\texttt{https://help.github.com/articles/resolving-a-merge-conflict-from-the-command-line/}
|
||||
conflicts.
|
||||
\end{itemize}
|
||||
In order to align the local repository to the svn mirror (equivalent to
|
||||
\texttt{svn update}), it is a good idea to use \texttt{fetch} before
|
||||
\texttt{pull}. Then:
|
||||
\begin{quote}
|
||||
\texttt{git add}
|
||||
\texttt{git commit}
|
||||
\texttt{git merge}
|
||||
\end{quote}
|
||||
In order to save incomplete work and avoid local conflicts, one can use
|
||||
\texttt{stash}:
|
||||
\begin{quote}
|
||||
\texttt{git stash save} (save and remove modified files)\\
|
||||
\texttt{git pull} (update files)\\
|
||||
\texttt{git stash apply} (overwrite with locally modified files)
|
||||
\end{quote}
|
||||
The stash can be cleared using \texttt{git clear}. A few useful commands:
|
||||
\begin{quote}
|
||||
\texttt{git status}\\
|
||||
\texttt{git diff}
|
||||
\end{quote}
|
||||
|
||||
|
||||
\section{The \qe \, test-suite}
|
||||
\label{Sec:testfarm}
|
||||
|
|
|
@ -379,9 +379,15 @@ to all linear-response codes.
|
|||
To install \qe\ from source, you need first of all a minimal Unix
|
||||
environment: basically, a command shell (e.g.,
|
||||
bash or tcsh) and the utilities \make, \texttt{awk}, \texttt{sed}.
|
||||
MS-Windows users need to have Cygwin (a UNIX environment which
|
||||
runs under Windows) installed:
|
||||
see \texttt{http://www.cygwin.com/}. Note that the scripts contained
|
||||
MS-Windows users may enable the Windows Subsystem for Linux ( assuming they are using Windows 10)
|
||||
and install there a Linux distribution.
|
||||
They can alternatively use Mingw/MSYS following the instructions given
|
||||
at \texttt{https://gitlab.com/QEF/q-e/issues/21}
|
||||
Other option for MS-Windows users is to use Cygwin
|
||||
(a UNIX environment which runs under Windows):
|
||||
see \texttt{http://www.cygwin.com/}.
|
||||
|
||||
Note that the scripts contained
|
||||
in the distribution assume that the local language is set to the
|
||||
standard, i.e. "C"; other settings
|
||||
may break them. Use \texttt{export LC\_ALL=C} (sh/bash) or
|
||||
|
@ -542,16 +548,25 @@ Finally, \configure\ recognizes the following command-line options:\\
|
|||
\texttt{--enable-shared}& use shared libraries if available (default: yes;\\
|
||||
& "no" is implemented, untested, in only a few cases)\\
|
||||
\texttt{--enable-debug}& compile with debug flags (only for selected cases; default: no)\\
|
||||
\texttt{--disable-wrappers}& disable C to fortran wrapper check (default: enabled)\\
|
||||
\texttt{--enable-signals}& enable signal trapping (default: disabled)\\
|
||||
\end{tabular}\\
|
||||
\\
|
||||
and the following optional packages:\\
|
||||
\\
|
||||
\begin{tabular}{ll}
|
||||
\texttt{--with-internal-blas}& compile with internal BLAS (default: no)\\
|
||||
\texttt{--with-internal-lapack}& compile with internal LAPACK (default: no)\\
|
||||
\texttt{--with-scalapack=no}& do not use ScaLAPACK (default: yes)\\
|
||||
\texttt{--with-scalapack=intel}& use ScaLAPACK for Intel MPI (default:OpenMPI)\\
|
||||
\texttt{--with-scalapack}& (yes$|$no$|$intel) Use scalapack if available. \\&Set to \texttt{intel} to use Intel MPI and blacs. (default: USE openMPI)\\
|
||||
\texttt{--with-elpa-include}& Specify full path ELPA include and modules headers
|
||||
(default: no)\\
|
||||
\texttt{--with-elpa-lib}& Specify full path ELPA static or dynamic library
|
||||
(default: no)\\
|
||||
\texttt{--with-elpa-version}& Specify ELPA version, only year (2015 or 2016,
|
||||
default: 2016)\\
|
||||
\texttt{--with-hdf5}& (no $|$ \texttt{<path>}) Use HDF5, a valid \texttt{<path>} must be specified (default: no)\\
|
||||
\end{tabular}\\
|
||||
\\
|
||||
|
||||
If you want to modify the \configure\ script (advanced users only!),
|
||||
see the Developer Manual.
|
||||
|
||||
|
@ -593,6 +608,8 @@ routines are affected by the changed settings and how to force their recompilati
|
|||
A copy of the needed routines is provided with the distribution. However,
|
||||
when available, optimized vendor-specific libraries should be used: this
|
||||
often yields huge performance gains.
|
||||
\\
|
||||
|
||||
|
||||
\paragraph{BLAS and LAPACK}
|
||||
\qe\ can use any architecture-optimized BLAS and LAPACK replacements,
|
||||
|
@ -649,6 +666,24 @@ happen, especially on PC clusters, see Sec.\ref{SubSec:LinuxPCMPI}.
|
|||
{\em Note:} since v.6.1, MPI libraries implementing v.3 of the standard
|
||||
(notably, non-blocking broadcast and gather operations) are required.
|
||||
|
||||
\paragraph {HDF5}
|
||||
The HDF5 library (\texttt{https://www.hdfgroup.org/downloads/hdf5/}) can be used to perform binary I/O using the
|
||||
HDF5 format.
|
||||
|
||||
The user has to install this library. The library should be compiled with the configure options:
|
||||
\texttt{--enable-parallel}, {\texttt{--enable-fortran} and \texttt{--enable-fortran-2003}.
|
||||
|
||||
The path to the root dir of the library ( the one containing the bin, include and lib directories)
|
||||
has to be passed to the \qe{} configure script via the \texttt{--with-hdf5} option.
|
||||
|
||||
It is possible to use a library with disabled parallism,
|
||||
but one has to add manually the flag \texttt{-D\_\_HDF5\_SERIAL} to the \texttt{MANUAL\_DFLAGS} in the
|
||||
\texttt{make.inc} file.
|
||||
|
||||
The HDF5 packages provided by many LINUX distributions also work, but the configure script fails if
|
||||
includes and libraries are not placed under the same root directory.
|
||||
In this case the user should set manually these paths in the make.inc file.
|
||||
|
||||
|
||||
\paragraph{Other libraries}
|
||||
\qe\ can use the MASS vector math
|
||||
|
|
|
@ -35,12 +35,25 @@ def hasSOC(prefix):
|
|||
|
||||
return lSOC
|
||||
|
||||
# Check if the calculation was done in sequential
|
||||
def isSEQ(prefix):
|
||||
fname = '_ph0/'+str(prefix)+'.dvscf'
|
||||
if (os.path.isfile(fname)):
|
||||
lseq = True
|
||||
else:
|
||||
lseq = False
|
||||
|
||||
return lseq
|
||||
|
||||
# Enter the number of irr. q-points
|
||||
user_input = raw_input('Enter the prefix used for PH calculations (e.g. diam)\n')
|
||||
prefix = str(user_input)
|
||||
|
||||
# Test if SOC
|
||||
SOC = hasSOC(prefix)
|
||||
|
||||
# Test if seq. or parallel run
|
||||
SEQ = isSEQ(prefix)
|
||||
|
||||
if True: # this gets the nqpt from the outputfiles
|
||||
nqpt = get_nqpt(prefix)
|
||||
|
@ -59,24 +72,49 @@ os.system('mkdir save')
|
|||
for iqpt in np.arange(1,nqpt+1):
|
||||
label = str(iqpt)
|
||||
|
||||
# Case with SOC
|
||||
if SOC == 'true':
|
||||
os.system('cp '+prefix+'.dyn0 '+prefix+'.dyn0.xml')
|
||||
os.system('cp '+prefix+'.dyn'+str(iqpt)+'.xml save/'+prefix+'.dyn_q'+label+'.xml')
|
||||
if (iqpt == 1):
|
||||
os.system('cp _ph0/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||
os.system('cp '+prefix+'.fc.xml save/ifc.q2r.xml')
|
||||
else:
|
||||
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||
# Case without SOC
|
||||
if SOC == 'false':
|
||||
os.system('cp '+prefix+'.dyn'+str(iqpt)+' save/'+prefix+'.dyn_q'+label)
|
||||
if (iqpt == 1):
|
||||
os.system('cp _ph0/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||
os.system('cp '+prefix+'.fc save/ifc.q2r')
|
||||
else:
|
||||
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||
# Case calculation in seq.
|
||||
if SEQ:
|
||||
# Case with SOC
|
||||
if SOC == 'true':
|
||||
os.system('cp '+prefix+'.dyn0 '+prefix+'.dyn0.xml')
|
||||
os.system('cp '+prefix+'.dyn'+str(iqpt)+'.xml save/'+prefix+'.dyn_q'+label+'.xml')
|
||||
if (iqpt == 1):
|
||||
os.system('cp _ph0/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||
os.system('cp '+prefix+'.fc.xml save/ifc.q2r.xml')
|
||||
else:
|
||||
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||
# Case without SOC
|
||||
if SOC == 'false':
|
||||
os.system('cp '+prefix+'.dyn'+str(iqpt)+' save/'+prefix+'.dyn_q'+label)
|
||||
if (iqpt == 1):
|
||||
os.system('cp _ph0/'+prefix+'.dvscf save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||
os.system('cp '+prefix+'.fc save/ifc.q2r')
|
||||
else:
|
||||
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||
|
||||
else:
|
||||
# Case with SOC
|
||||
if SOC == 'true':
|
||||
os.system('cp '+prefix+'.dyn0 '+prefix+'.dyn0.xml')
|
||||
os.system('cp '+prefix+'.dyn'+str(iqpt)+'.xml save/'+prefix+'.dyn_q'+label+'.xml')
|
||||
if (iqpt == 1):
|
||||
os.system('cp _ph0/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||
os.system('cp '+prefix+'.fc.xml save/ifc.q2r.xml')
|
||||
else:
|
||||
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf* save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||
# Case without SOC
|
||||
if SOC == 'false':
|
||||
os.system('cp '+prefix+'.dyn'+str(iqpt)+' save/'+prefix+'.dyn_q'+label)
|
||||
if (iqpt == 1):
|
||||
os.system('cp _ph0/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('cp -r _ph0/'+prefix+'.phsave save/')
|
||||
os.system('cp '+prefix+'.fc save/ifc.q2r')
|
||||
else:
|
||||
os.system('cp _ph0/'+prefix+'.q_'+str(iqpt)+'/'+prefix+'.dvscf1 save/'+prefix+'.dvscf_q'+label)
|
||||
os.system('rm _ph0/'+prefix+'.q_'+str(iqpt)+'/*wfc*' )
|
||||
|
|
|
@ -8,10 +8,11 @@ include make.libs
|
|||
#
|
||||
|
||||
IFLAGS = -I../../include -I../../UtilXlib/
|
||||
MODFLAGS = -I../../iotk/src -I../../UtilXlib/ -I../../Modules -I../../KS_Solvers/CG -I../../KS_Solvers/Davidson \
|
||||
-I../../LAXlib -I../../FFTXlib -I../../PW/src -I../../LR_Modules -I../../PHonon/PH \
|
||||
-I../../PP/src/ -I. -I../../wannier90-2.1.0/src/obj/
|
||||
|
||||
MODFLAGS= $(BASEMOD_FLAGS) \
|
||||
$(MOD_FLAG)../../PW/src \
|
||||
$(MOD_FLAG)../../PHonon/PH \
|
||||
$(MOD_FLAG)../../LR_Modules \
|
||||
$(MOD_FLAG)../../wannier90-2.1.0/src/obj
|
||||
|
||||
#
|
||||
# The above is in alphabetical order except when order matter during compilation
|
||||
|
@ -49,6 +50,7 @@ epw_setup.o \
|
|||
epw_summary.o \
|
||||
fermiwindow.o \
|
||||
gmap_sym.o \
|
||||
indabs.o \
|
||||
io_dyn_mat2.o \
|
||||
kfold.o \
|
||||
kpointdivision.o \
|
||||
|
|
|
@ -47,7 +47,8 @@
|
|||
scattering, scattering_serta, scattering_0rta, &
|
||||
int_mob, scissor, carrier, ncarrier, iterative_bte, &
|
||||
restart, restart_freq, prtgkk, nel, meff, epsiHEG, &
|
||||
scatread, restart, restart_freq, restart_filq, lphase
|
||||
scatread, restart, restart_freq, restart_filq, &
|
||||
lphase, omegamin, omegamax, omegastep, n_r, lindabs
|
||||
USE elph2, ONLY : elph
|
||||
USE mp, ONLY : mp_bcast
|
||||
USE mp_world, ONLY : world_comm
|
||||
|
@ -131,6 +132,7 @@
|
|||
CALL mp_bcast (restart , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (prtgkk , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (lphase , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (lindabs , meta_ionode_id, world_comm)
|
||||
!
|
||||
! integers
|
||||
!
|
||||
|
@ -163,7 +165,7 @@
|
|||
CALL mp_bcast (scr_typ , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (bnd_cum , meta_ionode_id, world_comm)
|
||||
!
|
||||
! real*8
|
||||
! REAL*8
|
||||
!
|
||||
CALL mp_bcast (tr2_ph , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (amass , meta_ionode_id, world_comm)
|
||||
|
@ -196,6 +198,10 @@
|
|||
CALL mp_bcast (epsiHEG , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (fermi_diff , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (smear_rpa , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (omegamin , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (omegamax , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (omegastep , meta_ionode_id, world_comm)
|
||||
CALL mp_bcast (n_r , meta_ionode_id, world_comm)
|
||||
!
|
||||
! characters
|
||||
!
|
||||
|
|
|
@ -77,7 +77,9 @@
|
|||
inv_tau_allcb(:,:,:), &! Second scattering rate (for both)
|
||||
zi_allvb(:,:,:), &! Z-factor in scattering rate
|
||||
zi_allcb(:,:,:), &! Second Z-factor in scattering rate (for both VB and CB calculations)
|
||||
ifc(:,:,:,:,:,:,:) ! Interatomic force constant in real space
|
||||
ifc(:,:,:,:,:,:,:), &! Interatomic force constant in real space
|
||||
omegap(:), &! Photon energy for phonon-assisted absorption
|
||||
alpha_abs(:,:) ! Imaginary part of dielectric function for phonon-assisted absorption
|
||||
REAL(KIND=DP) :: &!
|
||||
efnew ! SP: Fermi level on the fine grid. Added globaly for efficiency reason
|
||||
INTEGER :: &!
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
scattering, nstemp, int_mob, scissor, carrier, &
|
||||
iterative_bte, longrange, scatread, nqf1, prtgkk, &
|
||||
nqf2, nqf3, mp_mesh_k, restart, ncarrier, plselfen, &
|
||||
specfun_pl
|
||||
specfun_pl, lindabs
|
||||
USE noncollin_module, ONLY : noncolin
|
||||
USE constants_epw, ONLY : ryd2ev, ryd2mev, one, two, eps2, zero, czero, &
|
||||
twopi, ci, kelvin2eV
|
||||
|
@ -1151,13 +1151,14 @@
|
|||
CALL count_kpoints(iq)
|
||||
ENDIF
|
||||
!
|
||||
! Conductivity ---------------------------------------------------------
|
||||
!IF (scattering) CALL scattering_rate_q( iq )
|
||||
IF (.NOT. scatread) THEN
|
||||
IF (scattering) THEN
|
||||
!
|
||||
! Indirect absorption ---------------------------------------------------------
|
||||
! If Indirect absortpion, keep unshifted values:
|
||||
IF ( lindabs .AND. .NOT. scattering ) etf_ks(:,:) = etf(:,:)
|
||||
!
|
||||
! Apply a scissor shift to CBM if required by user
|
||||
! The shift is apply to k and k+q
|
||||
!IF (scissor > 0.000001) THEN
|
||||
IF (ABS(scissor) > 0.000001) THEN
|
||||
IF ( noncolin ) THEN
|
||||
icbm = FLOOR(nelec/1.0d0) +1
|
||||
|
@ -1169,6 +1170,7 @@
|
|||
ikk = 2 * ik - 1
|
||||
ikq = ikk + 1
|
||||
DO ibnd = icbm, nbndsub
|
||||
!
|
||||
etf (ibnd, ikk) = etf (ibnd, ikk) + scissor
|
||||
etf (ibnd, ikq) = etf (ibnd, ikq) + scissor
|
||||
ENDDO
|
||||
|
@ -1177,105 +1179,111 @@
|
|||
WRITE(stdout, '(5x,"Applying a scissor shift of ",f9.5," eV to the conduction states")' ) scissor * ryd2ev
|
||||
ENDIF
|
||||
ENDIF
|
||||
!
|
||||
! If we want to compute intrinsic mobilities, call fermicarrier to
|
||||
! correctly positionned the ef0 level.
|
||||
! This is only done once for iq = 0
|
||||
IF ( iq == iq_restart ) THEN
|
||||
!
|
||||
DO itemp = 1, nstemp
|
||||
!
|
||||
! Indirect absorption
|
||||
IF ( lindabs .AND. .NOT. scattering ) CALL indabs(iq)
|
||||
!
|
||||
! Conductivity ---------------------------------------------------------
|
||||
IF (scattering) THEN
|
||||
!
|
||||
! If we want to compute intrinsic mobilities, call fermicarrier to
|
||||
! correctly positionned the ef0 level.
|
||||
! This is only done once for iq = 0
|
||||
IF ( iq == iq_restart ) THEN
|
||||
!
|
||||
etemp = transp_temp(itemp)
|
||||
WRITE(stdout, '(/5x,"Temperature ",f8.3," K")' ) etemp * ryd2ev / kelvin2eV
|
||||
!
|
||||
! Small gap semiconductor. Computes intrinsic mobility by placing
|
||||
! the Fermi level such that carrier density is equal for electron and holes
|
||||
IF (int_mob .AND. .NOT. carrier) THEN
|
||||
!
|
||||
ef0(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility Fermi level ",f10.6," eV")' ) ef0(itemp) * ryd2ev
|
||||
! We only compute 1 Fermi level so we do not need the other
|
||||
efcb(itemp) = 0
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
! Large bandgap semiconductor. Place the gap at the value ncarrier.
|
||||
! The user want both VB and CB mobilities.
|
||||
IF (int_mob .AND. carrier) THEN
|
||||
DO itemp = 1, nstemp
|
||||
!
|
||||
ncarrier = - ABS(ncarrier)
|
||||
ef0(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility VB Fermi level ",f10.6," eV")' ) ef0(itemp) * ryd2ev
|
||||
etemp = transp_temp(itemp)
|
||||
WRITE(stdout, '(/5x,"Temperature ",f8.3," K")' ) etemp * ryd2ev / kelvin2eV
|
||||
!
|
||||
ncarrier = ABS(ncarrier)
|
||||
efcb(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility CB Fermi level ",f10.6," eV")' ) efcb(itemp) * ryd2ev
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
! User decide the carrier concentration and choose to only look at VB or CB
|
||||
IF (.NOT. int_mob .AND. carrier) THEN
|
||||
! SP: Determination of the Fermi level for intrinsic or doped carrier
|
||||
! One also need to apply scissor before calling it.
|
||||
!
|
||||
ef0(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility Fermi level ",f10.6," eV")' ) ef0(itemp) * ryd2ev
|
||||
! We only compute 1 Fermi level so we do not need the other
|
||||
efcb(itemp) = 0
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
IF (.NOT. int_mob .AND. .NOT. carrier ) THEN
|
||||
IF ( efermi_read ) THEN
|
||||
! Small gap semiconductor. Computes intrinsic mobility by placing
|
||||
! the Fermi level such that carrier density is equal for electron and holes
|
||||
IF (int_mob .AND. .NOT. carrier) THEN
|
||||
!
|
||||
ef0(itemp) = fermi_energy
|
||||
!
|
||||
ELSE !SP: This is added for efficiency reason because the efermig routine is slow
|
||||
ef0(itemp) = efnew
|
||||
ef0(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility Fermi level ",f10.6," eV")' ) ef0(itemp) * ryd2ev
|
||||
! We only compute 1 Fermi level so we do not need the other
|
||||
efcb(itemp) = 0
|
||||
!
|
||||
ENDIF
|
||||
! We only compute 1 Fermi level so we do not need the other
|
||||
efcb(itemp) = 0
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
! Large bandgap semiconductor. Place the gap at the value ncarrier.
|
||||
! The user want both VB and CB mobilities.
|
||||
IF (int_mob .AND. carrier) THEN
|
||||
!
|
||||
ncarrier = - ABS(ncarrier)
|
||||
ef0(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility VB Fermi level ",f10.6," eV")' ) ef0(itemp) * ryd2ev
|
||||
!
|
||||
ncarrier = ABS(ncarrier)
|
||||
efcb(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility CB Fermi level ",f10.6," eV")' ) efcb(itemp) * ryd2ev
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
! User decide the carrier concentration and choose to only look at VB or CB
|
||||
IF (.NOT. int_mob .AND. carrier) THEN
|
||||
! SP: Determination of the Fermi level for intrinsic or doped carrier
|
||||
! One also need to apply scissor before calling it.
|
||||
!
|
||||
ef0(itemp) = fermicarrier( etemp )
|
||||
WRITE(stdout, '(5x,"Mobility Fermi level ",f10.6," eV")' ) ef0(itemp) * ryd2ev
|
||||
! We only compute 1 Fermi level so we do not need the other
|
||||
efcb(itemp) = 0
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
IF (.NOT. int_mob .AND. .NOT. carrier ) THEN
|
||||
IF ( efermi_read ) THEN
|
||||
!
|
||||
ef0(itemp) = fermi_energy
|
||||
!
|
||||
ELSE !SP: This is added for efficiency reason because the efermig routine is slow
|
||||
ef0(itemp) = efnew
|
||||
ENDIF
|
||||
! We only compute 1 Fermi level so we do not need the other
|
||||
efcb(itemp) = 0
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
ENDDO
|
||||
!
|
||||
!
|
||||
ENDDO
|
||||
!
|
||||
!
|
||||
ENDIF ! iq=0
|
||||
!
|
||||
IF ( iterative_bte) THEN
|
||||
! First iteration is just SERTA
|
||||
IF (iter == 1) THEN
|
||||
ENDIF ! iq=0
|
||||
!
|
||||
IF ( iterative_bte) THEN
|
||||
! First iteration is just SERTA
|
||||
IF (iter == 1) THEN
|
||||
!
|
||||
CALL scattering_rate_q( iq, ef0, efcb, first_cycle )
|
||||
!print*,'SUM(inv_tau_all) after ',SUM(inv_tau_all)
|
||||
!
|
||||
! Compute the SERTA mobility for the first iteration
|
||||
IF (iq == nqf) CALL transport_coeffs (ef0,efcb)
|
||||
IF (iq == nqf) iter = iter + 1
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
IF (int_mob .AND. carrier) THEN
|
||||
call errore('ephwann_shuffle','The iterative solution cannot be solved with int_mob AND carrier at the moment',1)
|
||||
ELSE
|
||||
CALL iterativebte(iter, iq, ef0(1), error_h, error_el, first_cycle, first_time)
|
||||
ENDIF
|
||||
!
|
||||
IF (iq == nqf) iter = iter + 1
|
||||
ENDIF
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
CALL scattering_rate_q( iq, ef0, efcb, first_cycle )
|
||||
!print*,'SUM(inv_tau_all) after ',SUM(inv_tau_all)
|
||||
!
|
||||
! Compute the SERTA mobility for the first iteration
|
||||
IF (iq == nqf) CALL transport_coeffs (ef0,efcb)
|
||||
IF (iq == nqf) iter = iter + 1
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
IF (int_mob .AND. carrier) THEN
|
||||
call errore('ephwann_shuffle','The iterative solution cannot be solved with int_mob AND carrier at the moment',1)
|
||||
ELSE
|
||||
CALL iterativebte(iter, iq, ef0(1), error_h, error_el, first_cycle, first_time)
|
||||
ENDIF
|
||||
!
|
||||
IF (iq == nqf) iter = iter + 1
|
||||
ENDIF
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
CALL scattering_rate_q( iq, ef0, efcb, first_cycle )
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
ENDIF ! scattering
|
||||
! --------------------------------------
|
||||
!
|
||||
CALL stop_clock ( 'ep-interp' )
|
||||
!
|
||||
ENDIF ! scattering
|
||||
! --------------------------------------
|
||||
!
|
||||
CALL stop_clock ( 'ep-interp' )
|
||||
!
|
||||
ENDIF ! scatread
|
||||
ENDDO ! end loop over q points
|
||||
!
|
||||
|
|
|
@ -57,7 +57,8 @@
|
|||
title, int_mob, scissor, iterative_bte, scattering, &
|
||||
ncarrier, carrier, scattering_serta, restart, restart_freq, &
|
||||
scattering_0rta, longrange, shortrange, scatread, &
|
||||
restart_filq, prtgkk, nel, meff, epsiHEG, lphase
|
||||
restart_filq, prtgkk, nel, meff, epsiHEG, lphase, &
|
||||
omegamin, omegamax, omegastep, n_r, lindabs
|
||||
USE elph2, ONLY : elph
|
||||
USE start_k, ONLY : nk1, nk2, nk3
|
||||
USE constants_epw, ONLY : ryd2mev, ryd2ev, ev2cmm1, kelvin2eV
|
||||
|
@ -122,7 +123,7 @@
|
|||
delta_approx, scattering, int_mob, scissor, ncarrier, carrier, &
|
||||
iterative_bte, scattering_serta, scattering_0rta, longrange, shortrange,&
|
||||
scatread, restart, restart_freq, restart_filq, prtgkk, nel, meff, &
|
||||
epsiHEG, lphase
|
||||
epsiHEG, lphase, omegamin, omegamax, omegastep, n_r, lindabs
|
||||
|
||||
! tphases, fildvscf0
|
||||
!
|
||||
|
@ -281,6 +282,12 @@
|
|||
! epsiHEG : Dielectric constant at zero doping
|
||||
! lphase : If .true., fix the gauge on the phonon eigenvectors and electronic eigenvectors - DS
|
||||
!
|
||||
! Added by Manos Kioupakis
|
||||
! omegamin : Photon energy minimum
|
||||
! omegamax : Photon energy maximum
|
||||
! omegastep : Photon energy step in evaluating phonon-assisted absorption spectra (in eV)
|
||||
! n_r : constant refractive index
|
||||
! lindabs : do phonon-assisted absorption
|
||||
nk1tmp = 0
|
||||
nk2tmp = 0
|
||||
nk3tmp = 0
|
||||
|
@ -465,6 +472,11 @@
|
|||
meff = 1.d0
|
||||
epsiHEG = 1.d0
|
||||
lphase = .false.
|
||||
omegamin = 0.d0 ! eV
|
||||
omegamax = 10.d0 ! eV
|
||||
omegastep = 1.d0 ! eV
|
||||
n_r = 1.d0
|
||||
lindabs = .false.
|
||||
!
|
||||
! reading the namelist inputepw
|
||||
!
|
||||
|
@ -647,6 +659,11 @@
|
|||
! scissor going from eV to Ryd
|
||||
scissor = scissor / ryd2ev
|
||||
!
|
||||
! Photon energies for indirect absorption from eV to Ryd
|
||||
omegamin = omegamin / ryd2ev
|
||||
omegamax = omegamax / ryd2ev
|
||||
omegastep = omegastep / ryd2ev
|
||||
|
||||
IF ( scattering ) THEN
|
||||
DO i = 1, ntempxx
|
||||
IF (temps(i) .gt. 0.d0) THEN
|
||||
|
|
|
@ -158,6 +158,16 @@
|
|||
!! difference between Fermi energy and band edge (in eV)
|
||||
REAL (KIND=DP) :: smear_rpa
|
||||
!! smearing for the calculation of the Lindhard function (in eV)
|
||||
!
|
||||
! Phonon-assisted absorption
|
||||
REAL (KIND=DP) :: omegamin
|
||||
!! Photon energy minimum (in eV)
|
||||
REAL (KIND=DP) :: omegamax
|
||||
!! Photon energy maximum (in eV)
|
||||
REAL (KIND=DP) :: omegastep
|
||||
!! Photon energy step (in eV)
|
||||
REAL (KIND=DP) :: n_r
|
||||
!! Refractive index
|
||||
!
|
||||
!LOGICAL :: tphases
|
||||
!! tphases: if .TRUE. set absolute reference for unitary gauge of the eigenvectors
|
||||
|
@ -236,6 +246,8 @@
|
|||
!! if .true. print the |g| vertex in [meV].
|
||||
LOGICAL :: lphase
|
||||
!! if .true. then fix the gauge when diagonalizing the interpolated dynamical matrix and electronic Hamiltonian.
|
||||
LOGICAL :: lindabs
|
||||
!! if .true., perform phonon-assisted absorption calculations
|
||||
!
|
||||
! Superconductivity
|
||||
LOGICAL :: ephwrite
|
||||
|
|
|
@ -0,0 +1,353 @@
|
|||
!
|
||||
! Copyright (C) 2010-2016 Samuel Ponce', Roxana Margine, Carla Verdi, Feliciano Giustino
|
||||
! Copyright (C) 2007-2009 Jesse Noffsinger, Brad Malone, Feliciano Giustino
|
||||
!
|
||||
! This file is distributed under the terms of the GNU General Public
|
||||
! License. See the file `LICENSE' in the root directory of the
|
||||
! present distribution, or http://www.gnu.org/copyleft.gpl.txt .
|
||||
!
|
||||
!-----------------------------------------------------------------------
|
||||
SUBROUTINE indabs(iq)
|
||||
!-----------------------------------------------------------------------
|
||||
!!
|
||||
!! Phonon assisted absorption
|
||||
!! 12/03/2018 E. Kioupakis: First implementation
|
||||
!! 08/04/2018 S. Ponce: Cleaning
|
||||
!!
|
||||
!-----------------------------------------------------------------------
|
||||
USE kinds, ONLY : DP
|
||||
USE io_global, ONLY : stdout
|
||||
USE io_epw, ONLY : iuindabs
|
||||
USE phcom, ONLY : nmodes
|
||||
USE epwcom, ONLY : nbndsub, lrepmatf, shortrange, &
|
||||
fsthick, eptemp, ngaussw, degaussw, &
|
||||
eps_acustic, efermi_read, fermi_energy,&
|
||||
restart, restart_freq, &
|
||||
omegamin, omegamax, omegastep, n_r, scissor
|
||||
USE pwcom, ONLY : ef !, nelec, isk
|
||||
USE elph2, ONLY : etf, ibndmin, ibndmax, nkqf, xqf, &
|
||||
nkf, epf17, wkf, nqtotf, wf, wqf, xkf, nkqtotf, &
|
||||
sigmar_all, sigmai_all, sigmai_mode, zi_all, efnew, &
|
||||
dmef, omegap, alpha_abs, vmef, etf_ks
|
||||
USE transportcom, ONLY : lower_bnd, upper_bnd
|
||||
USE control_flags, ONLY : iverbosity
|
||||
USE constants_epw, ONLY : ryd2mev, one, ryd2ev, two, zero, pi, ci, eps6, czero
|
||||
USE mp, ONLY : mp_barrier, mp_sum
|
||||
USE mp_global, ONLY : inter_pool_comm
|
||||
USE mp_world, ONLY : mpime
|
||||
USE io_global, ONLY : ionode_id
|
||||
USE cell_base, ONLY : omega
|
||||
!
|
||||
implicit none
|
||||
!
|
||||
INTEGER, INTENT(IN) :: iq
|
||||
!! Q-point index
|
||||
!
|
||||
! Local variables
|
||||
CHARACTER (len=256) :: nameF='indabs.dat'
|
||||
!! Name of the file
|
||||
!
|
||||
LOGICAL :: opnd
|
||||
!! Check whether the file is open.
|
||||
!
|
||||
INTEGER :: ios
|
||||
!! integer variable for I/O control
|
||||
INTEGER :: n
|
||||
!! Integer for the degenerate average over eigenstates
|
||||
INTEGER :: ik
|
||||
!! Counter on the k-point index
|
||||
INTEGER :: ikk
|
||||
!! k-point index
|
||||
INTEGER :: ikq
|
||||
!! q-point index
|
||||
INTEGER :: ibnd
|
||||
!! Counter on bands
|
||||
INTEGER :: jbnd
|
||||
!! Counter on bands
|
||||
INTEGER :: imode
|
||||
!! Counter on mode
|
||||
INTEGER :: nrec
|
||||
!! Record index for reading the e-f matrix
|
||||
INTEGER :: fermicount
|
||||
!! Number of states on the Fermi surface
|
||||
INTEGER :: nksqtotf
|
||||
!! Total number of k+q points
|
||||
INTEGER :: i
|
||||
!! Index for reading files
|
||||
INTEGER :: iw
|
||||
!! Index for frequency
|
||||
INTEGER :: nomega
|
||||
!! Number of points on the photon energy axis
|
||||
INTEGER :: mbnd
|
||||
!! Index for summation over intermediate bands
|
||||
INTEGER :: ipol
|
||||
!!-- polarization direction
|
||||
REAL(kind=DP) :: tmp
|
||||
!! Temporary variable to store real part of Sigma for the degenerate average
|
||||
REAL(kind=DP) :: tmp2
|
||||
!! Temporary variable to store imag part of Sigma for the degenerate average
|
||||
REAL(kind=DP) :: tmp3
|
||||
!! Temporary variable to store Z for the degenerate average
|
||||
REAL(kind=DP) :: ekk2
|
||||
!! Temporary variable to the eigenenergies for the degenerate average
|
||||
REAL(kind=DP) :: sigmar_tmp(ibndmax-ibndmin+1)
|
||||
!! Temporary array to store the real-part of Sigma
|
||||
REAL(kind=DP) :: sigmai_tmp(ibndmax-ibndmin+1)
|
||||
!! Temporary array to store the imag-part of Sigma
|
||||
REAL(kind=DP) :: zi_tmp(ibndmax-ibndmin+1)
|
||||
!! Temporary array to store the Z
|
||||
REAL(kind=DP) :: g2
|
||||
!! Electron-phonon matrix elements squared in Ry^2
|
||||
REAL(kind=DP) :: ekk
|
||||
!! Eigen energy on the fine grid relative to the Fermi level
|
||||
REAL(kind=DP) :: ekq
|
||||
!! Eigen energy of k+q on the fine grid relative to the Fermi level
|
||||
REAL(kind=DP) :: ekmk
|
||||
!! Eigen energy on the fine grid relative to the Fermi level for the intermediate band
|
||||
REAL(kind=DP) :: ekmq
|
||||
!! Eigen energy of k+q on the fine grid relative to the Fermi level for the intermediate band
|
||||
REAL(kind=DP) :: wq(nmodes), nqv(nmodes)
|
||||
!! Phonon frequencies and phonon occupations on the fine grid
|
||||
REAL(kind=DP) :: ef0
|
||||
!! Fermi energy level
|
||||
REAL(kind=DP) :: wgq
|
||||
!! Bose occupation factor $n_{q\nu}(T)$
|
||||
REAL(kind=DP) :: wgkk, wgkq
|
||||
!! Fermi-Dirac occupation factor $f_{nk+q}(T)$, $f_{nk}(T)$
|
||||
REAL(kind=DP) :: weighta, weighte
|
||||
!!- delta function for absorption, emission
|
||||
REAL(kind=DP) :: w0g1
|
||||
!! Dirac delta for the imaginary part of $\Sigma$
|
||||
REAL(kind=DP) :: w0g2
|
||||
!! Dirac delta for the imaginary part of $\Sigma$
|
||||
REAL(kind=DP) :: inv_wq
|
||||
!! $frac{1}{2\omega_{q\nu}}$ defined for efficiency reasons
|
||||
REAL(kind=DP) :: inv_eptemp0
|
||||
!! Inverse of temperature define for efficiency reasons
|
||||
REAL(kind=DP) :: g2_tmp
|
||||
!! If the phonon frequency is too small discart g
|
||||
REAL(kind=DP) :: inv_degaussw
|
||||
!! Inverse of the smearing for efficiency reasons
|
||||
REAL(KIND=DP) :: pfac
|
||||
!!-- Occupation prefactors
|
||||
REAL(KIND=DP) :: pface
|
||||
!!-- Occupation prefactors
|
||||
REAL(KIND=DP) :: cfac
|
||||
!!- Absorption prefactor
|
||||
REAL(kind=DP), EXTERNAL :: dos_ef
|
||||
!! Function to compute the Density of States at the Fermi level
|
||||
REAL(kind=DP), EXTERNAL :: wgauss
|
||||
!! Fermi-Dirac distribution function (when -99)
|
||||
REAL(kind=DP), EXTERNAL :: w0gauss
|
||||
!! This function computes the derivative of the Fermi-Dirac function
|
||||
!! It is therefore an approximation for a delta function
|
||||
REAL(kind=DP), PARAMETER :: eps2 = 0.01/ryd2mev
|
||||
!! Tolerence
|
||||
REAL(kind=DP), ALLOCATABLE :: xkf_all(:,:)
|
||||
!! Collect k-point coordinate from all pools in parallel case
|
||||
REAL(kind=DP), ALLOCATABLE :: etf_all(:,:)
|
||||
!! Collect eigenenergies from all pools in parallel case
|
||||
COMPLEX(KIND=DP) :: vkk(3,ibndmax-ibndmin+1,ibndmax-ibndmin+1)
|
||||
!!- Velocity matrix elements at k, k+q
|
||||
COMPLEX(KIND=DP) :: vkq(3,ibndmax-ibndmin+1,ibndmax-ibndmin+1)
|
||||
!!- Velocity matrix elements at k, k+q
|
||||
COMPLEX (KIND=DP) :: s1a(3), s1e(3), s2a(3), s2e(3)
|
||||
!! Transition probability function
|
||||
COMPLEX (KIND=DP) :: epf(ibndmax-ibndmin+1, ibndmax-ibndmin+1,nmodes)
|
||||
!! Generalized matrix elements for phonon-assisted absorption
|
||||
!
|
||||
! SP: Define the inverse so that we can efficiently multiply instead of
|
||||
! dividing
|
||||
!
|
||||
inv_eptemp0 = 1.0/eptemp
|
||||
inv_degaussw = 1.0/degaussw
|
||||
!
|
||||
nomega = INT((omegamax - omegamin)/omegastep) + 1
|
||||
!
|
||||
! 300 K
|
||||
! C = 4*pi^2*e^2 / (n_r c m_e^2) * 2 = 4 * pi^2 * 2 *2^2 *2 / (nr * 137*2) = 32/ (nr*137) = 2*1.15235180919/n_r
|
||||
!
|
||||
cfac = two*1.15235180919/n_r
|
||||
!
|
||||
IF (iq == 1) THEN
|
||||
WRITE(stdout,'(/5x,a)') repeat('=',67)
|
||||
WRITE(stdout,'(5x,"Phonon-assisted absorption")')
|
||||
WRITE(stdout,'(5x,a/)') repeat('=',67)
|
||||
!
|
||||
IF ( fsthick .lt. 1.d3 ) &
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||
'Temperature T = ',eptemp * ryd2ev, ' eV'
|
||||
!
|
||||
IF ( .not. ALLOCATED (omegap) ) ALLOCATE(omegap(nomega))
|
||||
IF ( .not. ALLOCATED (alpha_abs) ) ALLOCATE(alpha_abs(3,nomega))
|
||||
!
|
||||
alpha_abs = 0.d0
|
||||
DO iw = 1, nomega
|
||||
omegap(iw) = omegamin + (iw-1) * omegastep
|
||||
END DO
|
||||
END IF
|
||||
!
|
||||
! The total number of k points
|
||||
!
|
||||
nksqtotf = nkqtotf/2 ! odd-even for k,k+q
|
||||
!
|
||||
IF ( efermi_read ) THEN
|
||||
!
|
||||
ef0 = fermi_energy
|
||||
ELSE
|
||||
!
|
||||
ef0 = efnew
|
||||
ENDIF
|
||||
!
|
||||
DO ik = 1, nkf
|
||||
!
|
||||
ikk = 2 * ik - 1
|
||||
ikq = ikk + 1
|
||||
!
|
||||
DO imode = 1, nmodes
|
||||
!
|
||||
! the phonon frequency at this q and nu
|
||||
wq(imode) = wf (imode, iq)
|
||||
!
|
||||
epf(:,:,imode) = epf17(:, :, imode,ik)
|
||||
IF ( wq(imode) .gt. eps_acustic ) THEN
|
||||
nqv(imode) = wgauss( -wq(imode)/(eptemp), -99)
|
||||
nqv(imode) = nqv(imode) / ( one - two * nqv(imode) )
|
||||
END IF
|
||||
END DO
|
||||
!
|
||||
DO ibnd = 1, ibndmax-ibndmin+1
|
||||
DO jbnd = 1, ibndmax-ibndmin+1
|
||||
IF (ABS(scissor) > 0.000001 .AND. &
|
||||
ABS( etf_ks(ibndmin-1+ibnd,ikk)-etf_ks(ibndmin-1+jbnd,ikk)) > 0.000001 .AND. &
|
||||
ABS( etf_ks(ibndmin-1+ibnd,ikq)-etf_ks(ibndmin-1+jbnd,ikq)) > 0.000001 ) THEN
|
||||
vkk(:,ibnd,jbnd) = 2.0 * dmef (:, ibndmin-1+ibnd, ibndmin-1+jbnd, ikk) &
|
||||
*( etf(ibndmin-1+ibnd,ikk)-etf(ibndmin-1+jbnd,ikk))/( etf_ks(ibndmin-1+ibnd,ikk)-etf_ks(ibndmin-1+jbnd,ikk))
|
||||
vkq(:,ibnd,jbnd) = 2.0 * dmef (:, ibndmin-1+ibnd, ibndmin-1+jbnd, ikq) &
|
||||
*( etf(ibndmin-1+ibnd,ikq)-etf(ibndmin-1+jbnd,ikq))/( etf_ks(ibndmin-1+ibnd,ikq)-etf_ks(ibndmin-1+jbnd,ikq))
|
||||
ELSE
|
||||
vkk(:,ibnd,jbnd) = 2.0 * dmef (:, ibndmin-1+ibnd, ibndmin-1+jbnd, ikk)
|
||||
vkq(:,ibnd,jbnd) = 2.0 * dmef (:, ibndmin-1+ibnd, ibndmin-1+jbnd, ikq)
|
||||
END IF
|
||||
END DO
|
||||
END DO
|
||||
!
|
||||
DO ibnd = 1, ibndmax-ibndmin+1
|
||||
! the energy of the electron at k (relative to Ef)
|
||||
ekk = etf (ibndmin-1+ibnd, ikk) - ef0
|
||||
!
|
||||
IF ( abs(ekk) .lt. fsthick ) THEN
|
||||
!
|
||||
wgkk = wgauss( -ekk*inv_eptemp0, -99)
|
||||
!
|
||||
DO jbnd = 1, ibndmax-ibndmin+1
|
||||
!
|
||||
! The fermi occupation for k+q
|
||||
ekq = etf (ibndmin-1+jbnd, ikq) - ef0
|
||||
!
|
||||
IF ( abs(ekq) < fsthick .AND. ekq < ekk+wq(nmodes)+omegamax + 6.0*degaussw ) THEN
|
||||
!
|
||||
wgkq = wgauss ( -ekq*inv_eptemp0, -99)
|
||||
!
|
||||
IF ( ekq-ekk-wq(nmodes)-omegamax > 6.0*degaussw ) CYCLE
|
||||
IF ( ekq-ekk+wq(nmodes)-omegamin < 6.0*degaussw ) CYCLE
|
||||
!
|
||||
DO imode = 1, nmodes
|
||||
!
|
||||
IF ( wq(imode) > eps_acustic ) THEN
|
||||
!
|
||||
s1a = czero
|
||||
s1e = czero
|
||||
s2a = czero
|
||||
s2e = czero
|
||||
!
|
||||
DO mbnd = 1, ibndmax-ibndmin+1
|
||||
!
|
||||
! The energy of the electron at k (relative to Ef)
|
||||
ekmk = etf (ibndmin-1+mbnd, ikk) - ef0
|
||||
! The fermi occupation for k+q
|
||||
ekmq = etf (ibndmin-1+mbnd, ikq) - ef0
|
||||
!
|
||||
s1a(:) = s1a(:) + epf(mbnd, jbnd,imode) * 0.5 * vkk(:,ibnd, mbnd) / &
|
||||
( ekmk - ekq + wq(imode) + ci * degaussw )
|
||||
s1e(:) = s1e(:) + epf(mbnd, jbnd,imode) * 0.5 * vkk(:,ibnd, mbnd) / &
|
||||
( ekmk - ekq - wq(imode) + ci * degaussw )
|
||||
s2a(:) = s2a(:) + epf(ibnd, mbnd,imode) * 0.5 * vkq(:,mbnd, jbnd) / &
|
||||
( ekmq - ekk - wq(imode)+ ci * degaussw)
|
||||
s2e(:) = s2e(:) + epf(ibnd, mbnd,imode) * 0.5 * vkq(:,mbnd, jbnd) / &
|
||||
( ekmq - ekk + wq(imode)+ ci * degaussw)
|
||||
END DO
|
||||
!
|
||||
pfac = nqv(imode) * wgkk *(one- wgkq ) - (nqv(imode)+one)*(one-wgkk) * wgkq
|
||||
pface = (nqv(imode)+one) * wgkk *(one- wgkq ) - nqv(imode) *(one-wgkk) * wgkq
|
||||
!
|
||||
DO iw = 1, nomega
|
||||
!
|
||||
IF ( ABS(ekq-ekk-wq(imode)-omegap(iw)) > 6.0*degaussw .AND. &
|
||||
ABS(ekq-ekk+wq(imode)-omegap(iw)) > 6.0*degaussw) CYCLE
|
||||
!
|
||||
weighte = w0gauss( ( ekq - ekk - omegap(iw) + wq(imode)) / degaussw, 0) / degaussw
|
||||
weighta = w0gauss( ( ekq - ekk - omegap(iw) - wq(imode)) / degaussw, 0) / degaussw
|
||||
!
|
||||
DO ipol = 1, 3
|
||||
alpha_abs(ipol,iw) = alpha_abs(ipol,iw) + &
|
||||
(wkf(ikk)/2.0) * wqf(iq) * &
|
||||
cfac / omegap(iw) * pfac * weighta * abs( s1a(ipol) + s2a(ipol) )**2 / (2 * wq(imode) * omega )
|
||||
alpha_abs(ipol,iw) = alpha_abs(ipol,iw) + &
|
||||
(wkf(ikk)/2.0) * wqf(iq) * &
|
||||
cfac / omegap(iw) * pface * weighte * abs( s1e(ipol) + s2e(ipol) )**2 / (2 * wq(imode) * omega )
|
||||
END DO ! ipol
|
||||
!
|
||||
END DO ! iw
|
||||
!
|
||||
END IF ! if wq > acoustic
|
||||
!
|
||||
END DO ! imode
|
||||
!
|
||||
END IF ! endif ekq in fsthick
|
||||
!
|
||||
END DO ! jbnd
|
||||
!
|
||||
END IF ! endif ekk in fsthick
|
||||
!
|
||||
END DO ! ibnd
|
||||
!
|
||||
ENDDO ! ik
|
||||
!
|
||||
! The k points are distributed among pools: here we collect them
|
||||
!
|
||||
IF ( iq .eq. nqtotf ) THEN
|
||||
!
|
||||
#if defined(__MPI)
|
||||
!
|
||||
! Note that poolgather2 works with the doubled grid (k and k+q)
|
||||
!
|
||||
CALL mp_barrier(inter_pool_comm)
|
||||
CALL mp_sum( alpha_abs, inter_pool_comm )
|
||||
CALL mp_barrier(inter_pool_comm)
|
||||
!
|
||||
#endif
|
||||
!
|
||||
! Output to stdout
|
||||
WRITE(stdout,'(5x,a)')
|
||||
WRITE(stdout,'(5x,a)') 'Phonon-assisted absorption coefficient versus energy'
|
||||
WRITE(stdout,'(5x,a)') 'Photon energy (eV), absorption coefficient (cm-1) along x,y,z'
|
||||
DO iw = 1, nomega
|
||||
WRITE(stdout, '(5x,f15.6,3E22.14,a)') omegap(iw)*ryd2ev, (alpha_abs(ipol,iw)/0.529177E-8,ipol=1,3), ' (cm-1)'
|
||||
ENDDO
|
||||
!
|
||||
! Output to file
|
||||
OPEN(unit=iuindabs,file=nameF)
|
||||
WRITE(iuindabs,'(a)') '# Phonon-assisted absorption coefficient versus energy'
|
||||
WRITE(iuindabs,'(a)') '# Photon energy (eV), absorption coefficient (cm-1) along x,y,z'
|
||||
DO iw = 1, nomega
|
||||
!WRITE(iuindabs, '(4f12.7)') omegap(iw)*ryd2ev, (alpha_abs(ipol,iw)/0.529177E-8,ipol=1,3)
|
||||
WRITE(iuindabs, '(4E22.14)') omegap(iw)*ryd2ev, (alpha_abs(ipol,iw)/0.529177E-8,ipol=1,3)
|
||||
END DO
|
||||
CLOSE(iuindabs)
|
||||
END IF
|
||||
!
|
||||
!RETURN
|
||||
!
|
||||
END SUBROUTINE indabs
|
|
@ -31,7 +31,7 @@
|
|||
iufileig, iukmap, crystal, iunifc, iunimem, iunepmatwp2
|
||||
PUBLIC :: iuwinfil, iun_plot, iuukk, iuprojfil !, iummn
|
||||
PUBLIC :: iufilsigma, iufilseebeck, iufilkappael, iufilkappa, iufilscatt_rate,&
|
||||
iufilFi_all, iufilsigma_all, iufiltau_all
|
||||
iufilFi_all, iufilsigma_all, iufiltau_all, iuindabs
|
||||
!
|
||||
! Output of physically relevant quantities (60-100)
|
||||
!
|
||||
|
@ -70,7 +70,6 @@
|
|||
! Electrons + phonons [epmat_wanep]
|
||||
INTEGER :: iuwane = 98 ! Spatial decay of matrix elements in Wannier basis
|
||||
! [.epwane]
|
||||
|
||||
!
|
||||
! Output of quantity for restarting purposes (101-200)
|
||||
! Note that 100-102 are reserved Cray unit and cannot be used.
|
||||
|
@ -89,7 +88,6 @@
|
|||
! [.ikmap]
|
||||
! INTEGER :: iuetf = 113 ! Interpolated hamiltonian eigenvalues
|
||||
INTEGER :: iueig = 114 ! Temporary eig for interpolation
|
||||
|
||||
INTEGER :: iunepmatwp = 115 ! The unit with the e-ph matrix in Wannier-Wannier representation
|
||||
INTEGER :: iunepmatwe = 116 ! The unit with the e-ph matrix in Wannier-Bloch representation
|
||||
INTEGER :: iunkf = 117 ! The unit with the fine k-point mesh in crystal coord.
|
||||
|
@ -102,7 +100,6 @@
|
|||
INTEGER :: epwdata = 124 ! EPW data [epwdata.fmt]
|
||||
INTEGER :: iundmedata = 125 ! Dipole matrix in wannier basis [dmedata.fmt]
|
||||
INTEGER :: iunepmatwp2 = 126 ! Opening the epmatwp file
|
||||
|
||||
!
|
||||
! Output quantites related to Wannier (201-250)
|
||||
!
|
||||
|
@ -113,11 +110,9 @@
|
|||
INTEGER :: iun_plot = 203 ! UNK file (needed by Wannier90 for plotting the
|
||||
! real space Wannier functions)
|
||||
INTEGER :: iuukk = 204 ! Final ukk rotation matrix (the big U!)
|
||||
INTEGER :: iuprojfil = 205 ! Unit for projector [.projw90]
|
||||
|
||||
INTEGER :: iuprojfil = 205 ! Unit for projector [.projw90]
|
||||
!
|
||||
! Output quantites related to transport (251-300)
|
||||
|
||||
INTEGER :: iufilsigma = 251 ! Electrical conductivity
|
||||
INTEGER :: iufilseebeck = 252 ! Seebeck coefficient
|
||||
INTEGER :: iufilkappael = 253 ! Electronic contribution to thermal conductivity
|
||||
|
@ -127,4 +122,7 @@
|
|||
INTEGER :: iufilsigma_all = 257 ! Sigmar_all and Sigmai_all file to retart an interpolation
|
||||
INTEGER :: iufiltau_all = 258 ! inv_tau_all file to retart an interpolation
|
||||
!
|
||||
! Output quantities related to Indirect absorption (301-325)
|
||||
INTEGER :: iuindabs = 301 ! Indirect absorption data
|
||||
!
|
||||
END MODULE io_epw
|
||||
|
|
|
@ -75,15 +75,15 @@
|
|||
!
|
||||
!
|
||||
IF (iq.eq.1) then
|
||||
WRITE(stdout,'(/5x,a)') repeat('=',67)
|
||||
WRITE(stdout,'(5x,"Nesting Function in the double delta approx")')
|
||||
WRITE(stdout,'(5x,a/)') repeat('=',67)
|
||||
!
|
||||
IF ( fsthick.lt.1.d3 ) &
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||
'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
|
||||
WRITE(stdout,'(/5x,a)') repeat('=',67)
|
||||
WRITE(stdout,'(5x,"Nesting Function in the double delta approx")')
|
||||
WRITE(stdout,'(5x,a/)') repeat('=',67)
|
||||
!
|
||||
IF ( fsthick.lt.1.d3 ) &
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||
'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
|
||||
ENDIF
|
||||
!
|
||||
! SP: The Gamma function needs to be put to 0 for each q
|
||||
|
@ -150,7 +150,7 @@
|
|||
!
|
||||
weight = wkf (ikk) * w0g1 * w0g2
|
||||
!
|
||||
gamma = gamma + weight
|
||||
gamma = gamma + weight
|
||||
!
|
||||
ENDDO ! jbnd
|
||||
ENDDO ! ibnd
|
||||
|
@ -170,7 +170,7 @@
|
|||
!
|
||||
WRITE(stdout, 102) gamma
|
||||
WRITE(stdout,'(5x,a/)') repeat('-',67)
|
||||
CALL flush(6)
|
||||
!CALL FLUSH()
|
||||
!
|
||||
WRITE( stdout, '(/5x,a,i8,a,i8/)' ) &
|
||||
'Number of (k,k+q) pairs on the Fermi surface: ',fermicount, ' out of ', nkqtotf/2
|
||||
|
|
|
@ -144,16 +144,16 @@
|
|||
inv_degaussw = 1.0/degaussw
|
||||
!
|
||||
IF ( iq .eq. 1 ) THEN
|
||||
!
|
||||
WRITE(stdout,'(/5x,a)') repeat('=',67)
|
||||
WRITE(stdout,'(5x,"Electron (Imaginary) Self-Energy in the Migdal Approximation")')
|
||||
WRITE(stdout,'(5x,a/)') repeat('=',67)
|
||||
!
|
||||
IF ( fsthick .lt. 1.d3 ) &
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
|
||||
!
|
||||
!
|
||||
WRITE(stdout,'(/5x,a)') repeat('=',67)
|
||||
WRITE(stdout,'(5x,"Electron (Imaginary) Self-Energy in the Migdal Approximation")')
|
||||
WRITE(stdout,'(5x,a/)') repeat('=',67)
|
||||
!
|
||||
IF ( fsthick .lt. 1.d3 ) &
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) 'Fermi Surface thickness = ', fsthick * ryd2ev, ' eV'
|
||||
WRITE(stdout, '(/5x,a,f10.6,a)' ) &
|
||||
'Golden Rule strictly enforced with T = ',eptemp * ryd2ev, ' eV'
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
! Fermi level and corresponding DOS
|
||||
|
@ -228,15 +228,17 @@
|
|||
!
|
||||
! the phonon frequency and Bose occupation
|
||||
wq = wf (imode, iq)
|
||||
! SP: Define the inverse for efficiency
|
||||
inv_wq = 1.0/( two * wq )
|
||||
wgq = wgauss( -wq*inv_eptemp0, -99)
|
||||
wgq = wgq / ( one - two * wgq )
|
||||
!
|
||||
! SP: Avoid if statement in inner loops
|
||||
IF (wq .gt. eps_acustic) THEN
|
||||
! SP: Define the inverse for efficiency
|
||||
inv_wq = 1.0/( two * wq )
|
||||
wgq = wgauss( -wq*inv_eptemp0, -99)
|
||||
wgq = wgq / ( one - two * wgq )
|
||||
g2_tmp = 1.0
|
||||
ELSE
|
||||
inv_wq = 0.0
|
||||
wgq = 0.0
|
||||
g2_tmp = 0.0
|
||||
ENDIF
|
||||
!
|
||||
|
@ -261,7 +263,7 @@
|
|||
! number, in which case its square will be a negative number.
|
||||
g2 = REAL( (epf17 (jbnd, ibnd, imode, ik)**two)*inv_wq*g2_tmp )
|
||||
ELSE
|
||||
g2 = (abs(epf17 (jbnd, ibnd, imode, ik))**two)*inv_wq*g2_tmp
|
||||
g2 = (ABS(epf17 (jbnd, ibnd, imode, ik))**two)*inv_wq*g2_tmp
|
||||
ENDIF
|
||||
!
|
||||
! There is a sign error for wq in Eq. 9 of Comp. Phys. Comm. 181, 2140 (2010). - RM
|
||||
|
@ -622,121 +624,123 @@
|
|||
nksqtotf = nkqtotf/2 ! odd-even for k,k+q
|
||||
!
|
||||
IF ( ik .eq. 1 ) THEN
|
||||
IF ( .not. ALLOCATED (sigmar_all) ) ALLOCATE( sigmar_all(ibndmax-ibndmin+1, nksqtotf) )
|
||||
IF ( .not. ALLOCATED (sigmai_all) ) ALLOCATE( sigmai_all(ibndmax-ibndmin+1, nksqtotf) )
|
||||
IF ( .not. ALLOCATED (zi_all) ) ALLOCATE( zi_all(ibndmax-ibndmin+1, nksqtotf) )
|
||||
IF ( iverbosity == 3 ) THEN
|
||||
IF ( .not. ALLOCATED (sigmai_mode) ) ALLOCATE(sigmai_mode(ibndmax-ibndmin+1, nmodes, nksqtotf) )
|
||||
sigmai_mode(:,:,:) = zero
|
||||
ENDIF
|
||||
sigmar_all(:,:) = zero
|
||||
sigmai_all(:,:) = zero
|
||||
zi_all(:,:) = zero
|
||||
IF ( .not. ALLOCATED (sigmar_all) ) ALLOCATE( sigmar_all(ibndmax-ibndmin+1, nksqtotf) )
|
||||
IF ( .not. ALLOCATED (sigmai_all) ) ALLOCATE( sigmai_all(ibndmax-ibndmin+1, nksqtotf) )
|
||||
IF ( .not. ALLOCATED (zi_all) ) ALLOCATE( zi_all(ibndmax-ibndmin+1, nksqtotf) )
|
||||
IF ( iverbosity == 3 ) THEN
|
||||
IF ( .not. ALLOCATED (sigmai_mode) ) ALLOCATE(sigmai_mode(ibndmax-ibndmin+1, nmodes, nksqtotf) )
|
||||
sigmai_mode(:,:,:) = zero
|
||||
ENDIF
|
||||
sigmar_all(:,:) = zero
|
||||
sigmai_all(:,:) = zero
|
||||
zi_all(:,:) = zero
|
||||
ENDIF
|
||||
!
|
||||
! loop over all k points of the fine mesh
|
||||
!
|
||||
fermicount = 0
|
||||
DO iq = 1, nqf
|
||||
!
|
||||
ikq = 2 * iq
|
||||
ikk = ikq - 1
|
||||
!
|
||||
! here we must have ef, not ef0, to be consistent with ephwann_shuffle
|
||||
! (but in this case they are the same)
|
||||
!
|
||||
IF ( ( minval ( abs(etf (:, ikk) - ef) ) .lt. fsthick ) .and. &
|
||||
( minval ( abs(etf (:, ikq) - ef) ) .lt. fsthick ) ) THEN
|
||||
!
|
||||
ikq = 2 * iq
|
||||
ikk = ikq - 1
|
||||
!
|
||||
! here we must have ef, not ef0, to be consistent with ephwann_shuffle
|
||||
! (but in this case they are the same)
|
||||
!
|
||||
IF ( ( minval ( abs(etf (:, ikk) - ef) ) .lt. fsthick ) .and. &
|
||||
( minval ( abs(etf (:, ikq) - ef) ) .lt. fsthick ) ) THEN
|
||||
!
|
||||
fermicount = fermicount + 1
|
||||
DO imode = 1, nmodes
|
||||
!
|
||||
fermicount = fermicount + 1
|
||||
DO imode = 1, nmodes
|
||||
!
|
||||
! the phonon frequency and Bose occupation
|
||||
wq = wf (imode, iq)
|
||||
! SP: Define the inverse for efficiency
|
||||
inv_wq = 1.0/( two * wq )
|
||||
wgq = wgauss( -wq*inv_eptemp0, -99)
|
||||
wgq = wgq / ( one - two * wgq )
|
||||
!
|
||||
! SP: Avoid if statement in inner loops
|
||||
IF (wq .gt. eps_acustic) THEN
|
||||
g2_tmp = 1.0
|
||||
ELSE
|
||||
g2_tmp = 0.0
|
||||
ENDIF
|
||||
!
|
||||
DO ibnd = 1, ibndmax-ibndmin+1
|
||||
!
|
||||
! the energy of the electron at k (relative to Ef)
|
||||
ekk = etf (ibndmin-1+ibnd, ikk) - ef0
|
||||
!
|
||||
DO jbnd = 1, ibndmax-ibndmin+1
|
||||
!
|
||||
! the fermi occupation for k+q
|
||||
ekq = etf (ibndmin-1+jbnd, ikq) - ef0
|
||||
wgkq = wgauss( -ekq*inv_eptemp0, -99)
|
||||
!
|
||||
! here we take into account the zero-point sqrt(hbar/2M\omega)
|
||||
! with hbar = 1 and M already contained in the eigenmodes
|
||||
! g2 is Ry^2, wkf must already account for the spin factor
|
||||
!
|
||||
IF ( shortrange .AND. ( abs(xqf (1, iq))> eps2 .OR. abs(xqf (2, iq))> eps2 &
|
||||
.OR. abs(xqf (3, iq))> eps2 )) THEN
|
||||
! SP: The abs has to be removed. Indeed the epf17 can be a pure imaginary
|
||||
! number, in which case its square will be a negative number.
|
||||
g2 = REAL( (epf17 (jbnd, ibnd, imode, iq)**two)*inv_wq*g2_tmp )
|
||||
ELSE
|
||||
g2 = (abs(epf17 (jbnd, ibnd, imode, iq))**two)*inv_wq*g2_tmp
|
||||
ENDIF
|
||||
!
|
||||
! There is a sign error for wq in Eq. 9 of Comp. Phys. Comm. 181, 2140 (2010). - RM
|
||||
! The sign was corrected according to Eq. (7.282) page 489 from Mahan's book
|
||||
! (Many-Particle Physics, 3rd edition)
|
||||
!
|
||||
weight = wqf(iq) * real ( &
|
||||
( ( wgkq + wgq ) / ( ekk - ( ekq - wq ) - ci * degaussw ) + &
|
||||
( one - wgkq + wgq ) / ( ekk - ( ekq + wq ) - ci * degaussw ) ) )
|
||||
! ecutse needs to be defined if it's used
|
||||
!@ if ( abs(ekq-ekk) .gt. ecutse ) weight = 0.d0
|
||||
!
|
||||
sigmar_all(ibnd,ik) = sigmar_all(ibnd,ik) + g2 * weight
|
||||
!
|
||||
! Logical implementation
|
||||
! weight = wqf(iq) * aimag ( &
|
||||
! ( ( wgkq + wgq ) / ( ekk - ( ekq - wq ) - ci * degaussw ) + &
|
||||
! ( one - wgkq + wgq ) / ( ekk - ( ekq + wq ) - ci * degaussw ) ) )
|
||||
!@ if ( abs(ekq-ekk) .gt. ecutse ) weight = 0.d0
|
||||
! Delta implementation
|
||||
w0g1=w0gauss( (ekk-ekq+wq)/degaussw, 0) /degaussw
|
||||
w0g2=w0gauss( (ekk-ekq-wq)/degaussw, 0) /degaussw
|
||||
weight = pi * wqf(iq) * ( (wgkq+wgq)*w0g1 + (one-wgkq+wgq)*w0g2 )
|
||||
!
|
||||
sigmai_all(ibnd,ik) = sigmai_all(ibnd,ik) + g2 * weight
|
||||
!
|
||||
! Mode-resolved
|
||||
IF (iverbosity == 3) THEN
|
||||
sigmai_mode(ibnd,imode,ik) = sigmai_mode(ibnd,imode,ik) + g2 * weight
|
||||
ENDIF
|
||||
!
|
||||
! Z FACTOR: -\frac{\partial\Re\Sigma}{\partial\omega}
|
||||
!
|
||||
weight = wqf(iq) * &
|
||||
( ( wgkq + wgq ) * ( (ekk - ( ekq - wq ))**two - degaussw**two ) / &
|
||||
( (ekk - ( ekq - wq ))**two + degaussw**two )**two + &
|
||||
( one - wgkq + wgq ) * ( (ekk - ( ekq + wq ))**two - degaussw**two ) / &
|
||||
( (ekk - ( ekq + wq ))**two + degaussw**two )**two )
|
||||
!@ if ( abs(ekq-ekk) .gt. ecutse ) weight = 0.d0
|
||||
!
|
||||
zi_all(ibnd,ik) = zi_all(ibnd,ik) + g2 * weight
|
||||
!
|
||||
ENDDO !jbnd
|
||||
!
|
||||
ENDDO !ibnd
|
||||
!
|
||||
ENDDO !imode
|
||||
! the phonon frequency and Bose occupation
|
||||
wq = wf (imode, iq)
|
||||
!
|
||||
ENDIF ! endif fsthick
|
||||
!
|
||||
! SP: Avoid if statement in inner loops
|
||||
IF (wq .gt. eps_acustic) THEN
|
||||
! SP: Define the inverse for efficiency
|
||||
inv_wq = 1.0/( two * wq )
|
||||
wgq = wgauss( -wq*inv_eptemp0, -99)
|
||||
wgq = wgq / ( one - two * wgq )
|
||||
g2_tmp = 1.0
|
||||
ELSE
|
||||
inv_wq = 0.0
|
||||
wgq = 0.0
|
||||
g2_tmp = 0.0
|
||||
ENDIF
|
||||
!
|
||||
DO ibnd = 1, ibndmax-ibndmin+1
|
||||
!
|
||||
! the energy of the electron at k (relative to Ef)
|
||||
ekk = etf (ibndmin-1+ibnd, ikk) - ef0
|
||||
!
|
||||
DO jbnd = 1, ibndmax-ibndmin+1
|
||||
!
|
||||
! the fermi occupation for k+q
|
||||
ekq = etf (ibndmin-1+jbnd, ikq) - ef0
|
||||
wgkq = wgauss( -ekq*inv_eptemp0, -99)
|
||||
!
|
||||
! here we take into account the zero-point sqrt(hbar/2M\omega)
|
||||
! with hbar = 1 and M already contained in the eigenmodes
|
||||
! g2 is Ry^2, wkf must already account for the spin factor
|
||||
!
|
||||
IF ( shortrange .AND. ( abs(xqf (1, iq))> eps2 .OR. abs(xqf (2, iq))> eps2 &
|
||||
.OR. abs(xqf (3, iq))> eps2 )) THEN
|
||||
! SP: The abs has to be removed. Indeed the epf17 can be a pure imaginary
|
||||
! number, in which case its square will be a negative number.
|
||||
g2 = REAL( (epf17 (jbnd, ibnd, imode, iq)**two)*inv_wq*g2_tmp )
|
||||
ELSE
|
||||
g2 = (abs(epf17 (jbnd, ibnd, imode, iq))**two)*inv_wq*g2_tmp
|
||||
ENDIF
|
||||
!
|
||||
! There is a sign error for wq in Eq. 9 of Comp. Phys. Comm. 181, 2140 (2010). - RM
|
||||
! The sign was corrected according to Eq. (7.282) page 489 from Mahan's book
|
||||
! (Many-Particle Physics, 3rd edition)
|
||||
!
|
||||
weight = wqf(iq) * real ( &
|
||||
( ( wgkq + wgq ) / ( ekk - ( ekq - wq ) - ci * degaussw ) + &
|
||||
( one - wgkq + wgq ) / ( ekk - ( ekq + wq ) - ci * degaussw ) ) )
|
||||
! ecutse needs to be defined if it's used
|
||||
!@ if ( abs(ekq-ekk) .gt. ecutse ) weight = 0.d0
|
||||
!
|
||||
sigmar_all(ibnd,ik) = sigmar_all(ibnd,ik) + g2 * weight
|
||||
!
|
||||
! Logical implementation
|
||||
! weight = wqf(iq) * aimag ( &
|
||||
! ( ( wgkq + wgq ) / ( ekk - ( ekq - wq ) - ci * degaussw ) + &
|
||||
! ( one - wgkq + wgq ) / ( ekk - ( ekq + wq ) - ci * degaussw ) ) )
|
||||
!@ if ( abs(ekq-ekk) .gt. ecutse ) weight = 0.d0
|
||||
! Delta implementation
|
||||
w0g1=w0gauss( (ekk-ekq+wq)/degaussw, 0) /degaussw
|
||||
w0g2=w0gauss( (ekk-ekq-wq)/degaussw, 0) /degaussw
|
||||
weight = pi * wqf(iq) * ( (wgkq+wgq)*w0g1 + (one-wgkq+wgq)*w0g2 )
|
||||
!
|
||||
sigmai_all(ibnd,ik) = sigmai_all(ibnd,ik) + g2 * weight
|
||||
!
|
||||
! Mode-resolved
|
||||
IF (iverbosity == 3) THEN
|
||||
sigmai_mode(ibnd,imode,ik) = sigmai_mode(ibnd,imode,ik) + g2 * weight
|
||||
ENDIF
|
||||
!
|
||||
! Z FACTOR: -\frac{\partial\Re\Sigma}{\partial\omega}
|
||||
!
|
||||
weight = wqf(iq) * &
|
||||
( ( wgkq + wgq ) * ( (ekk - ( ekq - wq ))**two - degaussw**two ) / &
|
||||
( (ekk - ( ekq - wq ))**two + degaussw**two )**two + &
|
||||
( one - wgkq + wgq ) * ( (ekk - ( ekq + wq ))**two - degaussw**two ) / &
|
||||
( (ekk - ( ekq + wq ))**two + degaussw**two )**two )
|
||||
!@ if ( abs(ekq-ekk) .gt. ecutse ) weight = 0.d0
|
||||
!
|
||||
zi_all(ibnd,ik) = zi_all(ibnd,ik) + g2 * weight
|
||||
!
|
||||
ENDDO !jbnd
|
||||
!
|
||||
ENDDO !ibnd
|
||||
!
|
||||
ENDDO !imode
|
||||
!
|
||||
ENDIF ! endif fsthick
|
||||
!
|
||||
ENDDO ! end loop on q
|
||||
!
|
||||
! collect contributions from all pools (sum over k-points)
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
USE constants_epw, ONLY : ryd2mev, one, ryd2ev, two, zero, pi, ci, eps6
|
||||
USE mp, ONLY : mp_barrier, mp_sum
|
||||
USE mp_global, ONLY : inter_pool_comm
|
||||
use cell_base, ONLY : omega, alat
|
||||
use cell_base, ONLY : omega, alat, bg
|
||||
!
|
||||
implicit none
|
||||
!
|
||||
|
@ -68,6 +68,8 @@
|
|||
REAL(kind=DP), ALLOCATABLE :: xkf_all(:,:), etf_all(:,:)
|
||||
REAL(kind=DP) :: kF, vF, fermiHEG, qin, wpl0, eps0, deltaeps, qcut
|
||||
REAL(kind=DP) :: qsquared, qTF, dipole, rs, ekk1, degen
|
||||
REAL(kind=DP) :: q(3)
|
||||
!! The q-point in cartesian unit.
|
||||
!REAL(kind=DP) :: Nel, epsiHEG, meff, kF, vF, fermiHEG, qin, wpl0, eps0, deltaeps, qcut, qcut2, qsquared, qTF, dipole, rs, ekk1
|
||||
! loop over temperatures can be introduced
|
||||
!
|
||||
|
@ -141,7 +143,9 @@
|
|||
qTF = (6.d0*pi*nel/omega/degen/(fermiHEG/2.d0))**(1.d0/2.d0) ! [a.u.]
|
||||
wpl0 = sqrt(4.d0*pi*nel/omega/meff/epsiHEG) * 2.d0 ! [Ryd] multiplication by 2 converts from Ha to Ryd
|
||||
wq = wpl0 ! [Ryd]
|
||||
qsquared = (xqf(1,iq)**2 + xqf(2,iq)**2 + xqf(3,iq)**2)
|
||||
q(:) = xqf(:,iq)
|
||||
CALL cryst_to_cart (1, q, bg, 1)
|
||||
qsquared = (q(1)**2 + q(2)**2 + q(3)**2)
|
||||
qin = sqrt(qsquared)*tpiba_new
|
||||
qcut = wpl0 / vF / tpiba_new / 2.d0 ! 1/2 converts from Ryd to Ha
|
||||
!
|
||||
|
|
|
@ -38,22 +38,23 @@
|
|||
USE constants_epw, ONLY : ryd2mev, one, ryd2ev, two, zero, pi, ci
|
||||
USE mp, ONLY : mp_barrier, mp_sum
|
||||
USE mp_global, ONLY : me_pool, inter_pool_comm
|
||||
USE cell_base, ONLY : omega, alat
|
||||
USE cell_base, ONLY : omega, alat, bg
|
||||
!
|
||||
implicit none
|
||||
!
|
||||
real(kind=DP), external :: efermig, dos_ef, wgauss
|
||||
integer :: iw, ik, ikk, ikq, ibnd, jbnd, iq, fermicount
|
||||
real(kind=DP) :: g2, ekk, ekq, wq, ef0, wgq, wgkq, ww, dw, weight
|
||||
real(kind=DP) :: specfun_sum, esigmar0, tpiba_new
|
||||
real(kind=DP) :: fermi(nw_specfun)
|
||||
!
|
||||
! variables for collecting data from all pools in parallel case
|
||||
!
|
||||
integer :: iw, ik, ikk, ikq, ibnd, jbnd, iq, fermicount
|
||||
integer :: nksqtotf, lower_bnd, upper_bnd
|
||||
real(kind=DP), allocatable :: xkf_all(:,:) , etf_all(:,:)
|
||||
REAL(kind=DP), external :: efermig, dos_ef, wgauss
|
||||
REAL(kind=DP) :: g2, ekk, ekq, wq, ef0, wgq, wgkq, ww, dw, weight
|
||||
REAL(kind=DP) :: specfun_sum, esigmar0, tpiba_new
|
||||
REAL(kind=DP) :: fermi(nw_specfun)
|
||||
REAL(kind=DP), allocatable :: xkf_all(:,:) , etf_all(:,:)
|
||||
REAL(kind=DP) :: kF, vF, fermiHEG, qin, wpl0, eps0, deltaeps, qcut, &
|
||||
qsquared, qTF, dipole, rs, ekk1, degen
|
||||
REAL(kind=DP) :: q(3)
|
||||
!! The q-point in cartesian unit.
|
||||
!
|
||||
! loop over temperatures can be introduced
|
||||
!
|
||||
|
@ -119,19 +120,21 @@
|
|||
!nel = 0.01 ! this should be read from input - # of doping electrons
|
||||
!epsiHEG = 12.d0 ! this should be read from input - # dielectric constant at zero doping
|
||||
!meff = 0.25 ! this should be read from input - effective mass
|
||||
tpiba_new = 2.0d0 * pi / alat
|
||||
degen = 1.0d0
|
||||
rs = (3.d0/(4.d0*pi*nel/omega/degen))**(1.d0/3.d0)*meff*degen ! omega is the unit cell volume in Bohr^3
|
||||
tpiba_new= 2.0d0 * pi / alat
|
||||
degen = 1.0d0
|
||||
rs = (3.d0/(4.d0*pi*nel/omega/degen))**(1.d0/3.d0)*meff*degen ! omega is the unit cell volume in Bohr^3
|
||||
! rs = (3.d0/(4.d0*pi*nel/omega/degen))**(1.d0/3.d0)*meff*degen/epsiHEG ! omega is the unit cell volume in Bohr^3
|
||||
kF = (3.d0*pi**2*nel/omega/degen )**(1.d0/3.d0)
|
||||
kF = (3.d0*pi**2*nel/omega/degen )**(1.d0/3.d0)
|
||||
vF = 1.d0/meff * (3.d0*pi**2*nel/omega/degen)**(1.d0/3.d0)
|
||||
fermiHEG = 1.d0/(2.d0*meff) * (3.d0*pi**2*nel/omega/degen)**(2.d0/3.d0) * 2.d0 ! [Ryd] multiplication by 2 converts from Ha to Ry
|
||||
qTF = (6.d0*pi*nel/omega/degen/(fermiHEG/2.d0))**(1.d0/2.d0) ! [a.u.]
|
||||
wpl0 = sqrt(4.d0*pi*nel/omega/meff/epsiHEG) * 2.d0 ! [Ryd] multiplication by 2 converts from Ha to Ryd
|
||||
wq = wpl0 ! [Ryd]
|
||||
qsquared = (xqf(1,iq)**2 + xqf(2,iq)**2 + xqf(3,iq)**2)
|
||||
q(:) = xqf(:,iq)
|
||||
CALL cryst_to_cart (1, q, bg, 1)
|
||||
qsquared = (q(1)**2 + q(2)**2 + q(3)**2)
|
||||
qin = sqrt(qsquared)*tpiba_new
|
||||
qcut = wpl0 / vF / tpiba_new / 2.d0 ! 1/2 converts from Ryd to Ha
|
||||
qcut = wpl0 / vF / tpiba_new / 2.d0 ! 1/2 converts from Ryd to Ha
|
||||
!qcut = qcut / 2.d0 ! phenomenological Landau damping
|
||||
!
|
||||
! qcut2 = kF * ( sqrt( 1.d0 + wpl0 / fermiHEG) - 1.d0 ) / tpiba_new
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -6,11 +6,9 @@
|
|||
IFLAGS=-I../../include
|
||||
|
||||
# location of needed modules
|
||||
MODFLAGS= $(MOD_FLAG)../../iotk/src $(MOD_FLAG)../../Modules \
|
||||
$(MOD_FLAG)../../PHonon/Gamma/ $(MOD_FLAG)../../PHonon/PH/ \
|
||||
$(MOD_FLAG)../../PW/src $(MOD_FLAG)../../KS_Solvers/Davidson $(MOD_FLAG)../../KS_Solvers/CG \
|
||||
$(MOD_FLAG)../../FFTXlib $(MOD_FLAG)../../LAXlib $(MOD_FLAG)../../UtilXlib $(MOD_FLAG)../pw4gww \
|
||||
$(MOD_FLAG)../gww $(MOD_FLAG).
|
||||
MODFLAGS= $(BASEMOD_FLAGS) \
|
||||
$(MOD_FLAG)../../PW/src \
|
||||
$(MOD_FLAG)../pw4gww $(MOD_FLAG)../gww
|
||||
|
||||
BSEOBJS = \
|
||||
openfil_bse.o \
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
! burton s. garbow, kenneth e. hillstrom, jorge j. more
|
||||
!
|
||||
! **********
|
||||
integer maxfev,mode,mp5n,nfev,nprint,n_max_iter
|
||||
integer maxfev,mode,mp5n,nfev,nprint,n_max_iter,iflga
|
||||
double precision epsfcn,factor,ftol,gtol,xtol,zero
|
||||
info = 0
|
||||
!
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
! =========================================================
|
||||
!
|
||||
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
|
||||
INTEGER N, I,j,k,IT,NR
|
||||
DIMENSION X(N),W(N)
|
||||
HN=1.0D0/N
|
||||
DO 35 NR=1,N
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
! =========================================================
|
||||
!
|
||||
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
|
||||
INTEGER N, I,j,k,n0,NR
|
||||
DIMENSION X(N),W(N)
|
||||
N0=(N+1)/2
|
||||
DO 45 NR=1,N0
|
||||
|
|
|
@ -57,6 +57,7 @@ SUBROUTINE setup_nscf ( newgrid, xq, elph_mat )
|
|||
REAL (DP), ALLOCATABLE :: rtau (:,:,:)
|
||||
LOGICAL :: magnetic_sym, sym(48)
|
||||
LOGICAL :: skip_equivalence
|
||||
LOGICAL, EXTERNAL :: check_para_diag
|
||||
!
|
||||
IF ( .NOT. ALLOCATED( force ) ) ALLOCATE( force( 3, nat ) )
|
||||
!
|
||||
|
@ -72,11 +73,7 @@ SUBROUTINE setup_nscf ( newgrid, xq, elph_mat )
|
|||
max_cg_iter=20
|
||||
natomwfc = n_atom_wfc( nat, ityp, noncolin )
|
||||
!
|
||||
#if defined(__MPI)
|
||||
IF ( use_para_diag ) CALL check_para_diag( nbnd )
|
||||
#else
|
||||
use_para_diag = .FALSE.
|
||||
#endif
|
||||
use_para_diag = check_para_diag( nbnd )
|
||||
!
|
||||
! ... Symmetry and k-point section
|
||||
!
|
||||
|
|
|
@ -15,11 +15,13 @@ MODULE atom
|
|||
!
|
||||
SAVE
|
||||
!
|
||||
type(radial_grid_type), allocatable, target :: &
|
||||
rgrid(:) ! the information on atomic radial grids.
|
||||
! NB: some of the subsequent data are therefore redundant
|
||||
! and will be eliminated in due course asap
|
||||
INTEGER, ALLOCATABLE :: &
|
||||
msh(:) ! the point at rcut
|
||||
! the information on atomic radial grids
|
||||
type(radial_grid_type), allocatable, target :: rgrid(:)
|
||||
!
|
||||
! last grid point with r < rcut = 10 a.u. (currently set in read_pseudo)
|
||||
! used to perform integration of atomic functions going to 0 at large r
|
||||
! (e.g. Vloc(r)-Ze^2/r), cutting off numerical noise
|
||||
! FIXME: should be included in "rgrid"
|
||||
INTEGER, ALLOCATABLE :: msh(:)
|
||||
!
|
||||
END MODULE atom
|
||||
|
|
|
@ -98,12 +98,13 @@ MODULE autopilot
|
|||
! dynamically during the course of a simulation. There are many
|
||||
! parameters which govern a simulation, yet only these are allowed
|
||||
! to be changed using the event rule mechanism.
|
||||
! Each of these tables are ytped according to their variable
|
||||
! Each of these tables are typed according to their variable
|
||||
! and begin with event_
|
||||
|
||||
! &CONTROL
|
||||
INTEGER :: rule_isave(max_event_step)
|
||||
INTEGER :: rule_iprint(max_event_step)
|
||||
LOGICAL :: rule_tprint(max_event_step)
|
||||
REAL(DP) :: rule_dt(max_event_step)
|
||||
! &SYSTEM
|
||||
|
||||
|
@ -111,6 +112,7 @@ MODULE autopilot
|
|||
REAL(DP) :: rule_emass(max_event_step)
|
||||
CHARACTER(LEN=80) :: rule_electron_dynamics(max_event_step)
|
||||
REAL(DP) :: rule_electron_damping(max_event_step)
|
||||
CHARACTER(LEN=80) :: rule_electron_orthogonalization(max_event_step)
|
||||
|
||||
|
||||
! &IONS
|
||||
|
@ -131,6 +133,7 @@ MODULE autopilot
|
|||
! &CONTROL
|
||||
LOGICAL :: event_isave(max_event_step)
|
||||
LOGICAL :: event_iprint(max_event_step)
|
||||
LOGICAL :: event_tprint(max_event_step)
|
||||
LOGICAL :: event_dt(max_event_step)
|
||||
! &SYSTEM
|
||||
|
||||
|
@ -138,6 +141,7 @@ MODULE autopilot
|
|||
LOGICAL :: event_emass(max_event_step)
|
||||
LOGICAL :: event_electron_dynamics(max_event_step)
|
||||
LOGICAL :: event_electron_damping(max_event_step)
|
||||
LOGICAL :: event_electron_orthogonalization(max_event_step)
|
||||
|
||||
! &IONS
|
||||
LOGICAL :: event_ion_dynamics(max_event_step)
|
||||
|
@ -153,12 +157,18 @@ MODULE autopilot
|
|||
PRIVATE
|
||||
PUBLIC :: auto_check, init_autopilot, card_autopilot, add_rule, &
|
||||
& assign_rule, restart_p, max_event_step, event_index, event_step, rule_isave, &
|
||||
& rule_iprint, rule_dt, rule_emass, rule_electron_dynamics, rule_electron_damping, &
|
||||
& rule_iprint, &
|
||||
& rule_tprint, &
|
||||
& rule_dt, rule_emass, rule_electron_dynamics, rule_electron_damping, &
|
||||
& rule_ion_dynamics, rule_ion_damping, rule_ion_temperature, rule_tempw, &
|
||||
& event_isave, event_iprint, event_dt, event_emass, &
|
||||
& rule_electron_orthogonalization, &
|
||||
& event_isave, event_iprint, &
|
||||
& event_tprint, &
|
||||
& event_dt, event_emass, &
|
||||
& event_electron_dynamics, event_electron_damping, event_ion_dynamics, &
|
||||
& current_nfi, pilot_p, pilot_unit, pause_p,auto_error, parse_mailbox, &
|
||||
& event_ion_damping, event_ion_temperature, event_tempw
|
||||
& event_ion_damping, event_ion_temperature, event_tempw, &
|
||||
& event_electron_orthogonalization
|
||||
|
||||
CONTAINS
|
||||
|
||||
|
@ -271,12 +281,15 @@ CONTAINS
|
|||
! &CONTROL
|
||||
event_isave(:) = .false.
|
||||
event_iprint(:) = .false.
|
||||
event_tprint(:) = .false.
|
||||
event_dt(:) = .false.
|
||||
! &SYSTEM
|
||||
! &ELECTRONS
|
||||
event_emass(:) = .false.
|
||||
event_electron_dynamics(:) = .false.
|
||||
event_electron_damping(:) = .false.
|
||||
event_electron_orthogonalization(:) = .false.
|
||||
|
||||
|
||||
! &IONS
|
||||
event_ion_dynamics(:) = .false.
|
||||
|
@ -288,6 +301,7 @@ CONTAINS
|
|||
|
||||
rule_isave(:) = 0
|
||||
rule_iprint(:) = 0
|
||||
rule_tprint(:) = .FALSE.
|
||||
rule_dt(:) = 0.0_DP
|
||||
rule_emass(:) = 0.0_DP
|
||||
rule_electron_dynamics(:) = 'NONE'
|
||||
|
@ -656,6 +670,7 @@ CONTAINS
|
|||
CHARACTER(LEN=32) :: var
|
||||
CHARACTER(LEN=32) :: value
|
||||
INTEGER :: int_value
|
||||
LOGICAL :: logical_value
|
||||
REAL :: real_value
|
||||
REAL(DP) :: realDP_value
|
||||
LOGICAL :: assigned
|
||||
|
@ -682,6 +697,10 @@ CONTAINS
|
|||
read(value, *) int_value
|
||||
rule_iprint(event) = int_value
|
||||
event_iprint(event) = .true.
|
||||
ELSEIF ( matches( "TPRINT", var ) ) THEN
|
||||
read(value, *) logical_value
|
||||
rule_tprint(event) = logical_value
|
||||
event_tprint(event) = .true.
|
||||
ELSEIF ( matches( "DT", var ) ) THEN
|
||||
read(value, *) real_value
|
||||
rule_dt(event) = real_value
|
||||
|
@ -693,8 +712,9 @@ CONTAINS
|
|||
event_emass(event) = .true.
|
||||
ELSEIF ( matches( "ELECTRON_DYNAMICS", var ) ) THEN
|
||||
read(value, *) value
|
||||
if ((value .ne. 'SD') .and. (value .ne. 'VERLET') .and. (value .ne. 'DAMP') .and. (value .ne. 'NONE')) then
|
||||
call auto_error(' autopilot ',' unknown electron_dynamics '//trim(value) )
|
||||
if ((value .ne. 'SD') .and. (value .ne. 'VERLET') .and. (value .ne. 'DAMP') &
|
||||
.and. (value .ne. 'NONE') .and. (value .ne. 'CG') ) then
|
||||
call auto_error(' autopilot ',' unknown electron_dynamics '//trim(value) )
|
||||
assigned = .FALSE.
|
||||
go to 40
|
||||
endif
|
||||
|
@ -713,6 +733,15 @@ CONTAINS
|
|||
endif
|
||||
rule_ion_dynamics(event) = value
|
||||
event_ion_dynamics(event) = .true.
|
||||
ELSEIF ( matches( "ORTHOGONALIZATION", var) ) THEN
|
||||
read(value, *) value
|
||||
if ( (value .ne. 'ORTHO') .and. (value .ne. 'GRAM-SCHMIDT') ) then
|
||||
call auto_error(' autopilot ',' unknown orthogonalization '//trim(value) )
|
||||
assigned = .false.
|
||||
go to 40
|
||||
endif
|
||||
rule_electron_orthogonalization(event) = value
|
||||
event_electron_orthogonalization(event) = .true.
|
||||
ELSEIF ( matches( "ION_DAMPING", var ) ) THEN
|
||||
read(value, *) realDP_value
|
||||
rule_ion_damping(event) = realDP_value
|
||||
|
|
|
@ -38,7 +38,8 @@ MODULE control_flags
|
|||
timing, memchk, trane, dt_old, ampre, tranp, amprp, &
|
||||
tnosee, tnosep, tnoseh, tcp, tcap, &
|
||||
tconvthrs, tolp, convergence_criteria, tionstep, nstepe, &
|
||||
tscreen, gamma_only, force_pairing, lecrpa, tddfpt, smallmem
|
||||
tscreen, gamma_only, force_pairing, lecrpa, tddfpt, smallmem, &
|
||||
tfirst, tlast, tprint
|
||||
!
|
||||
PUBLIC :: fix_dependencies, check_flags
|
||||
PUBLIC :: tksw, trhor, thdyn, trhow
|
||||
|
@ -50,6 +51,12 @@ MODULE control_flags
|
|||
LOGICAL :: trhor = .FALSE. ! read rho from unit 47 (only cp, seldom used)
|
||||
LOGICAL :: trhow = .FALSE. ! CP code, write rho to restart dir
|
||||
LOGICAL :: tksw = .FALSE. ! CP: write Kohn-Sham states to restart dir
|
||||
LOGICAL :: tfirst = .TRUE. ! CP: true if first iteration after restart
|
||||
LOGICAL :: tlast = .FALSE. ! CP: true if last iteration before ending
|
||||
LOGICAL :: tprint = .FALSE. ! CP: set to true when calculation of time
|
||||
! derivatives of wave functions must be
|
||||
! computed via projection on occupied
|
||||
! manifold
|
||||
!
|
||||
LOGICAL :: tsde = .FALSE. ! electronic steepest descent
|
||||
LOGICAL :: tzeroe = .FALSE. ! set to zero the electronic velocities
|
||||
|
|
|
@ -63,7 +63,8 @@ MODULE io_base
|
|||
INTEGER :: igwx, npwx, npol, j
|
||||
INTEGER :: me_in_group, nproc_in_group, my_group
|
||||
INTEGER, ALLOCATABLE :: itmp(:,:)
|
||||
COMPLEX(DP), ALLOCATABLE :: wtmp(:)
|
||||
COMPLEX(DP), ALLOCATABLE, TARGET :: wtmp(:)
|
||||
COMPLEX(DP), POINTER :: wtmp2(:)
|
||||
!
|
||||
#if defined(__HDF5)
|
||||
TYPE (qeh5_file) :: h5file
|
||||
|
@ -136,8 +137,10 @@ MODULE io_base
|
|||
!
|
||||
IF ( ionode_in_group ) THEN
|
||||
ALLOCATE( wtmp( MAX( npol*igwx, 1 ) ) )
|
||||
IF ( npol == 2 ) wtmp2 => wtmp( igwx+1:2*igwx )
|
||||
ELSE
|
||||
ALLOCATE( wtmp( 1 ) )
|
||||
IF ( npol == 2 ) wtmp2 => wtmp( 1:1 )
|
||||
ENDIF
|
||||
wtmp = 0.0_DP
|
||||
!
|
||||
|
@ -156,10 +159,16 @@ MODULE io_base
|
|||
IF ( npol == 2 ) THEN
|
||||
!
|
||||
! Quick-and-dirty noncolinear case - mergewf should be modified
|
||||
! Collect into wtmp(1:igwx) the first set of plane waves components
|
||||
!
|
||||
CALL mergewf( wfc(1:npwx, j), wtmp(1:igwx), ngwl, igl,&
|
||||
CALL mergewf( wfc(1:npwx, j), wtmp , ngwl, igl,&
|
||||
me_in_group, nproc_in_group, root_in_group, intra_group_comm )
|
||||
CALL mergewf( wfc(npwx+1:2*npwx,j), wtmp(igwx+1:2*igwx), ngwl, igl,&
|
||||
!
|
||||
! Collect into wtmp(igwx+1:2*igwx) the second set of plane waves
|
||||
! components - pointer wtmp2 is used instead of wtmp(igwx+1:2*igwx)
|
||||
! in order to avoid a bogus out-of-bound error
|
||||
!
|
||||
CALL mergewf( wfc(npwx+1:2*npwx,j), wtmp2, ngwl, igl,&
|
||||
me_in_group, nproc_in_group, root_in_group, intra_group_comm )
|
||||
!
|
||||
ELSE
|
||||
|
@ -188,6 +197,7 @@ MODULE io_base
|
|||
#endif
|
||||
END IF
|
||||
!
|
||||
IF ( npol == 2 ) NULLIFY ( wtmp2 )
|
||||
DEALLOCATE( wtmp )
|
||||
!
|
||||
RETURN
|
||||
|
@ -230,8 +240,9 @@ MODULE io_base
|
|||
INTEGER, OPTIONAL, INTENT(OUT) :: ierr
|
||||
!
|
||||
INTEGER :: j
|
||||
COMPLEX(DP), ALLOCATABLE :: wtmp(:)
|
||||
INTEGER, ALLOCATABLE :: itmp(:,:)
|
||||
COMPLEX(DP), ALLOCATABLE, TARGET :: wtmp(:)
|
||||
COMPLEX(DP), POINTER :: wtmp2(:)
|
||||
INTEGER :: ierr_
|
||||
INTEGER :: igwx, igwx_, npwx, ik_, nbnd_
|
||||
INTEGER :: me_in_group, nproc_in_group
|
||||
|
@ -323,12 +334,14 @@ MODULE io_base
|
|||
!
|
||||
IF ( ionode_in_group ) THEN
|
||||
ALLOCATE( wtmp( npol*MAX( igwx_, igwx ) ) )
|
||||
IF ( npol == 2 ) wtmp2 => wtmp(igwx_+1:2*igwx_)
|
||||
#if defined (__HDF5)
|
||||
CALL qeh5_open_dataset( h5file, h5dset_wfc, ACTION = 'read', NAME = 'evc')
|
||||
CALL qeh5_set_space ( h5dset_wfc, wtmp(1), RANK = 1, DIMENSIONS = [npol*igwx_], MODE = 'm')
|
||||
#endif
|
||||
ELSE
|
||||
ALLOCATE( wtmp(1) )
|
||||
IF ( npol == 2 ) wtmp2 => wtmp( 1:1 )
|
||||
ENDIF
|
||||
nbnd = nbnd_
|
||||
DO j = 1, nbnd_
|
||||
|
@ -348,10 +361,19 @@ MODULE io_base
|
|||
END IF
|
||||
!
|
||||
IF ( npol == 2 ) THEN
|
||||
CALL splitwf( wfc(1:npwx, j), wtmp(1:igwx_ ), &
|
||||
!
|
||||
! Quick-and-dirty noncolinear case - mergewf should be modified
|
||||
! Collect into wtmp(1:igwx_) first set of plane wave components
|
||||
!
|
||||
CALL splitwf( wfc(1:npwx, j), wtmp , &
|
||||
ngwl, igl, me_in_group, nproc_in_group, root_in_group, &
|
||||
intra_group_comm )
|
||||
CALL splitwf( wfc(npwx+1:2*npwx,j), wtmp(igwx_+1:2*igwx_), &
|
||||
!
|
||||
! Collect into wtmp(igwx_+1:2*igwx_) the second set of plane wave
|
||||
! components - instead of wtmp(igwx_+1:2*igwx_), pointer wtmp2
|
||||
! is used, in order to prevent a bogus out-of-bound error
|
||||
!
|
||||
CALL splitwf( wfc(npwx+1:2*npwx,j), wtmp2, &
|
||||
ngwl, igl, me_in_group, nproc_in_group, root_in_group, &
|
||||
intra_group_comm )
|
||||
ELSE
|
||||
|
@ -372,6 +394,7 @@ MODULE io_base
|
|||
#endif
|
||||
END IF
|
||||
!
|
||||
IF ( npol == 2 ) NULLIFY ( wtmp2 )
|
||||
DEALLOCATE( wtmp )
|
||||
!
|
||||
RETURN
|
||||
|
|
|
@ -9,11 +9,11 @@
|
|||
MODULE mp_world
|
||||
!----------------------------------------------------------------------------
|
||||
!
|
||||
USE mp, ONLY : mp_barrier, mp_start, mp_end, mp_stop, mp_count_nodes
|
||||
USE mp, ONLY : mp_barrier, mp_start, mp_end, mp_stop, mp_count_nodes
|
||||
USE io_global, ONLY : meta_ionode_id, meta_ionode
|
||||
#if defined(__CUDA)
|
||||
use cudafor, ONLY : cudaSetDevice, cudaGetDeviceCount
|
||||
#endif
|
||||
USE io_global, ONLY : meta_ionode_id, meta_ionode
|
||||
!
|
||||
USE parallel_include
|
||||
!
|
||||
|
|
|
@ -11,14 +11,18 @@ MODULE qes_libs_module
|
|||
!
|
||||
! Written by Giovanni Borghi, A. Ferretti, ... (2015).
|
||||
!
|
||||
|
||||
USE kinds, ONLY: DP
|
||||
USE qes_types_module
|
||||
USE FoX_wxml
|
||||
USE FoX_wxml, ONLY: xmlf_t, xml_NewElement, xml_addAttribute, xml_addCharacters, xml_EndElement,&
|
||||
xml_addnewline
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, PARAMETER :: max_real_per_line=5
|
||||
CHARACTER(32) :: fmtstr
|
||||
!
|
||||
PRIVATE :: fmtstr
|
||||
PUBLIC
|
||||
PRIVATE :: fmtstr, DP
|
||||
PRIVATE :: xmlf_t, xml_NewElement, xml_addAttribute, xml_addCharacters, xml_EndElement, xml_addnewline
|
||||
!
|
||||
INTERFACE qes_init_matrix
|
||||
MODULE PROCEDURE qes_init_matrix_1, qes_init_matrix_2, qes_init_matrix_3
|
||||
|
@ -2038,10 +2042,13 @@ SUBROUTINE qes_reset_atomic_positions(obj)
|
|||
|
||||
obj%tagname = ""
|
||||
obj%lwrite = .FALSE.
|
||||
DO i = 1, SIZE(obj%atom)
|
||||
CALL qes_reset_atom(obj%atom(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%atom)) DEALLOCATE(obj%atom)
|
||||
IF (ALLOCATED (obj%atom)) THEN
|
||||
DO i = 1, SIZE(obj%atom)
|
||||
CALL qes_reset_atom(obj%atom(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%atom)
|
||||
END IF
|
||||
|
||||
|
||||
END SUBROUTINE qes_reset_atomic_positions
|
||||
|
||||
|
@ -2112,11 +2119,12 @@ SUBROUTINE qes_reset_wyckoff_positions(obj)
|
|||
|
||||
obj%tagname = ""
|
||||
obj%lwrite = .FALSE.
|
||||
DO i = 1, SIZE(obj%atom)
|
||||
CALL qes_reset_atom(obj%atom(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%atom)) DEALLOCATE(obj%atom)
|
||||
|
||||
IF (ALLOCATED(obj%atom)) THEN
|
||||
DO i = 1, SIZE(obj%atom)
|
||||
CALL qes_reset_atom(obj%atom(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%atom)
|
||||
END IF
|
||||
END SUBROUTINE qes_reset_wyckoff_positions
|
||||
|
||||
|
||||
|
@ -2453,52 +2461,66 @@ SUBROUTINE qes_reset_dftU(obj)
|
|||
obj%lda_plus_u_kind_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%Hubbard_U_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_U)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_U(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%Hubbard_U)) DEALLOCATE(obj%Hubbard_U)
|
||||
IF (ALLOCATED(obj%Hubbard_U)) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_U)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_U(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%Hubbard_U)
|
||||
END IF
|
||||
obj%Hubbard_U_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%Hubbard_J0_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_J0)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_J0(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%Hubbard_J0)) DEALLOCATE(obj%Hubbard_J0)
|
||||
IF (ALLOCATED(obj%Hubbard_J0)) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_J0)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_J0(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%Hubbard_J0)
|
||||
END IF
|
||||
obj%Hubbard_J0_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%Hubbard_alpha_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_alpha)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_alpha(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%Hubbard_alpha)) DEALLOCATE(obj%Hubbard_alpha)
|
||||
IF (ALLOCATED(obj%Hubbard_alpha)) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_alpha)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_alpha(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%Hubbard_alpha)
|
||||
END IF
|
||||
obj%Hubbard_alpha_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%Hubbard_beta_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_beta)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_beta(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%Hubbard_beta)) DEALLOCATE(obj%Hubbard_beta)
|
||||
IF (ALLOCATED(obj%Hubbard_beta)) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_beta)
|
||||
CALL qes_reset_HubbardCommon(obj%Hubbard_beta(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%Hubbard_beta)
|
||||
END IF
|
||||
obj%Hubbard_beta_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%Hubbard_J_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_J)
|
||||
CALL qes_reset_HubbardJ(obj%Hubbard_J(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%Hubbard_J)) DEALLOCATE(obj%Hubbard_J)
|
||||
IF (ALLOCATED(obj%Hubbard_J)) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_J)
|
||||
CALL qes_reset_HubbardJ(obj%Hubbard_J(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%Hubbard_J)
|
||||
END IF
|
||||
obj%Hubbard_J_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%starting_ns_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%starting_ns)
|
||||
CALL qes_reset_starting_ns(obj%starting_ns(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%starting_ns)) DEALLOCATE(obj%starting_ns)
|
||||
IF (ALLOCATED(obj%starting_ns)) THEN
|
||||
DO i = 1, SIZE(obj%starting_ns)
|
||||
CALL qes_reset_starting_ns(obj%starting_ns(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%starting_ns)
|
||||
END IF
|
||||
obj%starting_ns_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%Hubbard_ns_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_ns)
|
||||
CALL qes_reset_Hubbard_ns(obj%Hubbard_ns(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%Hubbard_ns)) DEALLOCATE(obj%Hubbard_ns)
|
||||
IF (ALLOCATED(obj%Hubbard_ns)) THEN
|
||||
DO i = 1, SIZE(obj%Hubbard_ns)
|
||||
CALL qes_reset_Hubbard_ns(obj%Hubbard_ns(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%Hubbard_ns)
|
||||
END IF
|
||||
obj%Hubbard_ns_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%U_projection_type_ispresent) THEN
|
||||
|
@ -2680,10 +2702,12 @@ SUBROUTINE qes_reset_vdW(obj)
|
|||
obj%xdm_a2_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%london_c6_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%london_c6)
|
||||
CALL qes_reset_HubbardCommon(obj%london_c6(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%london_c6)) DEALLOCATE(obj%london_c6)
|
||||
IF (ALLOCATED(obj%london_c6)) THEN
|
||||
DO i = 1, SIZE(obj%london_c6)
|
||||
CALL qes_reset_HubbardCommon(obj%london_c6(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%london_c6)
|
||||
END IF
|
||||
obj%london_c6_ispresent = .FALSE.
|
||||
ENDIF
|
||||
|
||||
|
@ -2871,10 +2895,12 @@ SUBROUTINE qes_reset_bands(obj)
|
|||
ENDIF
|
||||
CALL qes_reset_occupations(obj%occupations)
|
||||
IF(obj%inputOccupations_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%inputOccupations)
|
||||
CALL qes_reset_inputOccupations(obj%inputOccupations(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%inputOccupations)) DEALLOCATE(obj%inputOccupations)
|
||||
IF (ALLOCATED(obj%inputOccupations)) THEN
|
||||
DO i = 1, SIZE(obj%inputOccupations)
|
||||
CALL qes_reset_inputOccupations(obj%inputOccupations(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%inputOccupations)
|
||||
END IF
|
||||
obj%inputOccupations_ispresent = .FALSE.
|
||||
ENDIF
|
||||
|
||||
|
@ -3254,10 +3280,12 @@ SUBROUTINE qes_reset_k_points_IBZ(obj)
|
|||
obj%nk_ispresent = .FALSE.
|
||||
ENDIF
|
||||
IF(obj%k_point_ispresent) THEN
|
||||
DO i = 1, SIZE(obj%k_point)
|
||||
CALL qes_reset_k_point(obj%k_point(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%k_point)) DEALLOCATE(obj%k_point)
|
||||
IF (ALLOCATED(obj%k_point)) THEN
|
||||
DO i = 1, SIZE(obj%k_point)
|
||||
CALL qes_reset_k_point(obj%k_point(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%k_point)
|
||||
END IF
|
||||
obj%k_point_ispresent = .FALSE.
|
||||
ENDIF
|
||||
|
||||
|
@ -3819,6 +3847,88 @@ SUBROUTINE qes_reset_spin_constraints(obj)
|
|||
|
||||
END SUBROUTINE qes_reset_spin_constraints
|
||||
|
||||
SUBROUTINE qes_write_gate_settings(xp, obj)
|
||||
IMPLICIT NONE
|
||||
TYPE(xmlf_t) :: xp
|
||||
TYPE(gate_settings_type) :: obj
|
||||
!
|
||||
IF ( .NOT. obj%lwrite ) RETURN
|
||||
CALL xml_NewElement(xp,TRIM(obj%tagname))
|
||||
CALL xml_NewElement(xp,"use_gate")
|
||||
CALL xml_addCharacters(xp, obj%use_gate)
|
||||
CALL xml_endElement(xp,"use_gate")
|
||||
IF ( obj%zgate_ispresent ) THEN
|
||||
CALL xml_NewElement(xp, "zgate")
|
||||
CALL xml_addCharacters(xp, obj%zgate)
|
||||
CALL xml_EndElement(xp,"zgate")
|
||||
END IF
|
||||
IF ( obj%relaxz_ispresent) THEN
|
||||
CALL xml_NewElement(xp,"relaxz")
|
||||
CALL xml_addCharacters(xp, obj%relaxz)
|
||||
CALL xml_EndElement(xp, "relaxz")
|
||||
ENDIF
|
||||
IF ( obj%block_ispresent) THEN
|
||||
CALL xml_NewElement(xp,"block")
|
||||
CALL xml_addCharacters(xp, obj%block)
|
||||
CALL xml_EndElement(xp, "block")
|
||||
ENDIF
|
||||
IF ( obj%block_1_ispresent) THEN
|
||||
CALL xml_NewElement(xp,"block_1")
|
||||
CALL xml_addCharacters(xp, obj%block_1)
|
||||
CALL xml_EndElement(xp, "block_1")
|
||||
ENDIF
|
||||
IF ( obj%block_2_ispresent) THEN
|
||||
CALL xml_NewElement(xp,"block_2")
|
||||
CALL xml_addCharacters(xp, obj%block_2)
|
||||
CALL xml_EndElement(xp, "block_2")
|
||||
ENDIF
|
||||
IF ( obj%block_height_ispresent) THEN
|
||||
CALL xml_NewElement(xp,"block_height")
|
||||
CALL xml_addCharacters(xp, obj%block_height)
|
||||
CALL xml_EndElement(xp, "block_height")
|
||||
ENDIF
|
||||
CALL xml_endElement(xp, TRIM(obj%tagname))
|
||||
END SUBROUTINE qes_write_gate_settings
|
||||
|
||||
SUBROUTINE qes_init_gate_settings( obj, tagname, use_gate, zgate, relaxz, block, block_1, block_2, block_height )
|
||||
IMPLICIT NONE
|
||||
TYPE(gate_settings_type) :: obj
|
||||
CHARACTER(LEN=*) :: tagname
|
||||
LOGICAL :: use_gate
|
||||
REAL(DP),OPTIONAL :: zgate
|
||||
LOGICAL,OPTIONAL :: relaxz
|
||||
LOGICAL,OPTIONAL :: block
|
||||
REAL(DP),OPTIONAL :: block_1
|
||||
REAL(DP),OPTIONAL :: block_2
|
||||
REAL(DP),OPTIONAL :: block_height
|
||||
!
|
||||
obj%tagname = TRIM(tagname)
|
||||
obj%use_gate = use_gate
|
||||
obj%relaxz_ispresent = PRESENT(relaxz)
|
||||
IF( obj%relaxz_ispresent ) obj%relaxz = relaxz
|
||||
obj%zgate_ispresent = PRESENT(zgate)
|
||||
IF (obj%zgate_ispresent) obj%zgate = zgate
|
||||
obj%block_ispresent = PRESENT(block)
|
||||
IF( obj%block_ispresent) obj%block = block
|
||||
obj%block_1_ispresent = PRESENT(block_1)
|
||||
IF (obj%block_1_ispresent) obj%block_1 = block_1
|
||||
obj%block_2_ispresent = PRESENT(block_2)
|
||||
IF (obj%block_2_ispresent) obj%block_2 = block_2
|
||||
obj%block_height_ispresent = PRESENT(block_height)
|
||||
IF (obj%block_height_ispresent) obj%block_height = block_height
|
||||
!
|
||||
obj%lwrite = .TRUE.
|
||||
obj%lread =.TRUE.
|
||||
END SUBROUTINE qes_init_gate_settings
|
||||
|
||||
SUBROUTINE qes_reset_gate_settings(obj)
|
||||
IMPLICIT NONE
|
||||
TYPE(gate_settings_type) :: obj
|
||||
obj%tagname = ""
|
||||
obj%lwrite = .FALSE.
|
||||
obj%lread = .FALSE.
|
||||
END SUBROUTINE qes_reset_gate_settings
|
||||
|
||||
|
||||
SUBROUTINE qes_write_electric_field(xp, obj)
|
||||
IMPLICIT NONE
|
||||
|
@ -3883,6 +3993,7 @@ SUBROUTINE qes_write_electric_field(xp, obj)
|
|||
CALL xml_addCharacters(xp, obj%n_berry_cycles)
|
||||
CALL xml_EndElement(xp, 'n_berry_cycles')
|
||||
ENDIF
|
||||
IF ( obj%gate_correction_ispresent) CALL qes_write_gate_settings(xp, obj%gate_correction)
|
||||
!
|
||||
CALL xml_EndElement(xp, TRIM(obj%tagname))
|
||||
!
|
||||
|
@ -3896,7 +4007,7 @@ SUBROUTINE qes_init_electric_field(obj, tagname, electric_potential, &
|
|||
electric_field_amplitude_ispresent, electric_field_amplitude, &
|
||||
electric_field_vector_ispresent, electric_field_vector, &
|
||||
nk_per_string_ispresent, nk_per_string, &
|
||||
n_berry_cycles_ispresent, n_berry_cycles)
|
||||
n_berry_cycles_ispresent, n_berry_cycles, gate_settings)
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(electric_field_type) :: obj
|
||||
|
@ -3919,6 +4030,7 @@ SUBROUTINE qes_init_electric_field(obj, tagname, electric_potential, &
|
|||
INTEGER :: nk_per_string
|
||||
LOGICAL :: n_berry_cycles_ispresent
|
||||
INTEGER :: n_berry_cycles
|
||||
TYPE(gate_settings_type), OPTIONAL :: gate_settings
|
||||
|
||||
obj%tagname = TRIM(tagname)
|
||||
obj%lwrite = .TRUE.
|
||||
|
@ -3956,7 +4068,8 @@ SUBROUTINE qes_init_electric_field(obj, tagname, electric_potential, &
|
|||
IF(obj%n_berry_cycles_ispresent) THEN
|
||||
obj%n_berry_cycles = n_berry_cycles
|
||||
ENDIF
|
||||
|
||||
obj%gate_correction_ispresent = PRESENT( gate_settings)
|
||||
IF ( obj%gate_correction_ispresent ) obj%gate_correction = gate_settings
|
||||
END SUBROUTINE qes_init_electric_field
|
||||
|
||||
SUBROUTINE qes_reset_electric_field(obj)
|
||||
|
@ -3991,7 +4104,10 @@ SUBROUTINE qes_reset_electric_field(obj)
|
|||
IF(obj%n_berry_cycles_ispresent) THEN
|
||||
obj%n_berry_cycles_ispresent = .FALSE.
|
||||
ENDIF
|
||||
|
||||
IF (obj%gate_correction_ispresent) THEN
|
||||
obj%gate_correction_ispresent = .FALSE.
|
||||
CALL qes_reset_gate_settings(obj%gate_correction)
|
||||
END IF
|
||||
END SUBROUTINE qes_reset_electric_field
|
||||
|
||||
|
||||
|
@ -4745,75 +4861,73 @@ SUBROUTINE qes_write_total_energy(xp, obj)
|
|||
CALL xml_EndElement(xp, 'potentiostat_contr')
|
||||
ENDIF
|
||||
!
|
||||
IF (obj%gatefield_contr_ispresent) THEN
|
||||
CALL xml_NewElement(xp, 'gatefield_contr')
|
||||
CALL xml_addCharacters(xp, obj%gatefield_contr, fmt = 's16')
|
||||
CALL xml_EndElement(xp, 'gatefield_contr')
|
||||
END IF
|
||||
!
|
||||
CALL xml_EndElement(xp, TRIM(obj%tagname))
|
||||
!
|
||||
END SUBROUTINE qes_write_total_energy
|
||||
|
||||
SUBROUTINE qes_init_total_energy(obj, tagname, etot, eband_ispresent, eband, &
|
||||
ehart_ispresent, ehart, vtxc_ispresent, vtxc, etxc_ispresent, &
|
||||
etxc, ewald_ispresent, ewald, demet_ispresent, demet, &
|
||||
efieldcorr_ispresent, efieldcorr, &
|
||||
potentiostat_contr_ispresent, potentiostat_contr)
|
||||
SUBROUTINE qes_init_total_energy(obj, tagname, etot, eband, ehart, vtxc, etxc, ewald, demet, &
|
||||
efieldcorr, potentiostat_contr, gate_contribution)
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(total_energy_type) :: obj
|
||||
CHARACTER(len=*) :: tagname
|
||||
INTEGER :: i
|
||||
REAL(DP) :: etot
|
||||
LOGICAL :: eband_ispresent
|
||||
REAL(DP) :: eband
|
||||
LOGICAL :: ehart_ispresent
|
||||
REAL(DP) :: ehart
|
||||
LOGICAL :: vtxc_ispresent
|
||||
REAL(DP) :: vtxc
|
||||
LOGICAL :: etxc_ispresent
|
||||
REAL(DP) :: etxc
|
||||
LOGICAL :: ewald_ispresent
|
||||
REAL(DP) :: ewald
|
||||
LOGICAL :: demet_ispresent
|
||||
REAL(DP) :: demet
|
||||
LOGICAL :: efieldcorr_ispresent
|
||||
REAL(DP) :: efieldcorr
|
||||
LOGICAL :: potentiostat_contr_ispresent
|
||||
REAL(DP) :: potentiostat_contr
|
||||
|
||||
REAL(DP),OPTIONAL :: eband
|
||||
REAL(DP),OPTIONAL :: ehart
|
||||
REAL(DP),OPTIONAL :: vtxc
|
||||
REAL(DP),OPTIONAL :: etxc
|
||||
REAL(DP),OPTIONAL :: ewald
|
||||
REAL(DP),OPTIONAL :: demet
|
||||
REAL(DP),OPTIONAL :: efieldcorr
|
||||
REAL(DP),OPTIONAL :: potentiostat_contr
|
||||
REAL(DP),OPTIONAL :: gate_contribution
|
||||
!
|
||||
!
|
||||
obj%tagname = TRIM(tagname)
|
||||
obj%lwrite = .TRUE.
|
||||
obj%lread = .TRUE.
|
||||
obj%etot = etot
|
||||
obj%eband_ispresent = eband_ispresent
|
||||
obj%eband_ispresent = PRESENT(eband)
|
||||
IF(obj%eband_ispresent) THEN
|
||||
obj%eband = eband
|
||||
ENDIF
|
||||
obj%ehart_ispresent = ehart_ispresent
|
||||
obj%ehart_ispresent = PRESENT(ehart)
|
||||
IF(obj%ehart_ispresent) THEN
|
||||
obj%ehart = ehart
|
||||
ENDIF
|
||||
obj%vtxc_ispresent = vtxc_ispresent
|
||||
obj%vtxc_ispresent = PRESENT(vtxc)
|
||||
IF(obj%vtxc_ispresent) THEN
|
||||
obj%vtxc = vtxc
|
||||
ENDIF
|
||||
obj%etxc_ispresent = etxc_ispresent
|
||||
obj%etxc_ispresent = PRESENT(etxc)
|
||||
IF(obj%etxc_ispresent) THEN
|
||||
obj%etxc = etxc
|
||||
ENDIF
|
||||
obj%ewald_ispresent = ewald_ispresent
|
||||
obj%ewald_ispresent = PRESENT(ewald)
|
||||
IF(obj%ewald_ispresent) THEN
|
||||
obj%ewald = ewald
|
||||
ENDIF
|
||||
obj%demet_ispresent = demet_ispresent
|
||||
obj%demet_ispresent = PRESENT(demet)
|
||||
IF(obj%demet_ispresent) THEN
|
||||
obj%demet = demet
|
||||
ENDIF
|
||||
obj%efieldcorr_ispresent = efieldcorr_ispresent
|
||||
obj%efieldcorr_ispresent = PRESENT(efieldcorr)
|
||||
IF(obj%efieldcorr_ispresent) THEN
|
||||
obj%efieldcorr = efieldcorr
|
||||
ENDIF
|
||||
obj%potentiostat_contr_ispresent = potentiostat_contr_ispresent
|
||||
obj%potentiostat_contr_ispresent = PRESENT(potentiostat_contr)
|
||||
IF(obj%potentiostat_contr_ispresent) THEN
|
||||
obj%potentiostat_contr = potentiostat_contr
|
||||
ENDIF
|
||||
|
||||
obj%gatefield_contr_ispresent = PRESENT(gate_contribution)
|
||||
IF (obj%gatefield_contr_ispresent) obj%gatefield_contr=gate_contribution
|
||||
END SUBROUTINE qes_init_total_energy
|
||||
|
||||
SUBROUTINE qes_reset_total_energy(obj)
|
||||
|
@ -4970,11 +5084,12 @@ SUBROUTINE qes_reset_atomic_species(obj)
|
|||
|
||||
obj%tagname = ""
|
||||
obj%lwrite =.FALSE.
|
||||
|
||||
DO i = 1, SIZE(obj%species)
|
||||
CALL qes_reset_species(obj%species(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%species)) DEALLOCATE(obj%species)
|
||||
IF (ALLOCATED(obj%species)) THEN
|
||||
DO i = 1, SIZE(obj%species)
|
||||
CALL qes_reset_species(obj%species(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%species)
|
||||
END IF
|
||||
|
||||
END SUBROUTINE qes_reset_atomic_species
|
||||
|
||||
|
@ -5602,11 +5717,12 @@ SUBROUTINE qes_reset_atomic_constraints(obj)
|
|||
|
||||
obj%tagname = ""
|
||||
obj%lwrite = .FALSE.
|
||||
|
||||
DO i = 1, SIZE(obj%atomic_constraint)
|
||||
CALL qes_reset_atomic_constraint(obj%atomic_constraint(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%atomic_constraint)) DEALLOCATE(obj%atomic_constraint)
|
||||
IF (ALLOCATED(obj%atomic_constraint)) THEN
|
||||
DO i = 1, SIZE(obj%atomic_constraint)
|
||||
CALL qes_reset_atomic_constraint(obj%atomic_constraint(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%atomic_constraint)
|
||||
END IF
|
||||
|
||||
END SUBROUTINE qes_reset_atomic_constraints
|
||||
|
||||
|
@ -5683,15 +5799,19 @@ SUBROUTINE qes_reset_BerryPhaseOutput(obj)
|
|||
|
||||
CALL qes_reset_polarization(obj%totalPolarization)
|
||||
CALL qes_reset_phase(obj%totalPhase)
|
||||
DO i = 1, SIZE(obj%ionicPolarization)
|
||||
CALL qes_reset_ionicPolarization(obj%ionicPolarization(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%ionicPolarization)) DEALLOCATE(obj%ionicPolarization)
|
||||
DO i = 1, SIZE(obj%electronicPolarization)
|
||||
CALL qes_reset_electronicPolarization(obj%electronicPolarization(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%electronicPolarization)) &
|
||||
DEALLOCATE(obj%electronicPolarization)
|
||||
IF (ALLOCATED(obj%ionicPolarization)) THEN
|
||||
DO i = 1, SIZE(obj%ionicPolarization)
|
||||
CALL qes_reset_ionicPolarization(obj%ionicPolarization(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%ionicPolarization)
|
||||
END IF
|
||||
|
||||
IF (ALLOCATED(obj%electronicPolarization)) THEN
|
||||
DO i = 1, SIZE(obj%electronicPolarization)
|
||||
CALL qes_reset_electronicPolarization(obj%electronicPolarization(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%electronicPolarization)
|
||||
END IF
|
||||
|
||||
END SUBROUTINE qes_reset_BerryPhaseOutput
|
||||
|
||||
|
@ -5822,11 +5942,12 @@ SUBROUTINE qes_reset_symmetries(obj)
|
|||
|
||||
obj%tagname = ""
|
||||
obj%lwrite = .FALSE.
|
||||
|
||||
DO i = 1, SIZE(obj%symmetry)
|
||||
CALL qes_reset_symmetry(obj%symmetry(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%symmetry)) DEALLOCATE(obj%symmetry)
|
||||
IF (ALLOCATED(obj%symmetry)) THEN
|
||||
DO i = 1, SIZE(obj%symmetry)
|
||||
CALL qes_reset_symmetry(obj%symmetry(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%symmetry)
|
||||
END IF
|
||||
|
||||
END SUBROUTINE qes_reset_symmetries
|
||||
|
||||
|
@ -6038,10 +6159,12 @@ SUBROUTINE qes_reset_band_structure(obj)
|
|||
CALL qes_reset_smearing(obj%smearing)
|
||||
obj%smearing_ispresent = .FALSE.
|
||||
ENDIF
|
||||
DO i = 1, SIZE(obj%ks_energies)
|
||||
CALL qes_reset_ks_energies(obj%ks_energies(i))
|
||||
ENDDO
|
||||
IF (ALLOCATED(obj%ks_energies)) DEALLOCATE(obj%ks_energies)
|
||||
IF (ALLOCATED(obj%ks_energies)) THEN
|
||||
DO i = 1, SIZE(obj%ks_energies)
|
||||
CALL qes_reset_ks_energies(obj%ks_energies(i))
|
||||
ENDDO
|
||||
DEALLOCATE(obj%ks_energies)
|
||||
END IF
|
||||
|
||||
END SUBROUTINE qes_reset_band_structure
|
||||
|
||||
|
@ -6403,6 +6526,65 @@ SUBROUTINE qes_reset_step(obj)
|
|||
|
||||
END SUBROUTINE qes_reset_step
|
||||
|
||||
SUBROUTINE qes_write_gateInfo(xp, obj)
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(xmlf_t) :: xp
|
||||
TYPE (gateInfo_type) :: obj
|
||||
!
|
||||
INTEGER :: i
|
||||
!
|
||||
IF ( .NOT. obj%lwrite ) RETURN
|
||||
!
|
||||
CALL xml_NewElement( xp, TRIM(obj%tagname) )
|
||||
!
|
||||
CALL xml_NewElement( xp, "pot_prefactor")
|
||||
CALL xml_addCharacters( xp, obj%pot_prefactor, fmt='s16')
|
||||
CALL xml_endElement(xp, "pot_prefactor")
|
||||
!
|
||||
CALL xml_NewElement( xp, "gate_zpos")
|
||||
CALL xml_addCharacters( xp, obj%gate_zpos, fmt = 's16')
|
||||
CALL xml_EndElement(xp, "gate_zpos")
|
||||
!
|
||||
CALL xml_NewElement(xp, "gate_gate_term" )
|
||||
CALL xml_AddCharacters(xp, obj%gate_gate_term, fmt = 's16')
|
||||
CALL xml_endElement(xp, "gate_gate_term")
|
||||
!
|
||||
CALL xml_NewElement(xp, "gatefieldEnergy" )
|
||||
CALL xml_AddCharacters(xp, obj%gatefieldEnergy, fmt = 's16')
|
||||
CALL xml_endElement(xp, "gatefieldEnergy")
|
||||
!
|
||||
CALL xml_EndElement(xp, TRIM(obj%tagname))
|
||||
END SUBROUTINE qes_write_gateInfo
|
||||
|
||||
|
||||
SUBROUTINE qes_init_gateInfo(obj, tagname, pot_prefactor, gate_zpos, gate_gate_term, gatefieldEnergy)
|
||||
IMPLICIT NONE
|
||||
TYPE(gateInfo_type),INTENT(INOUT) :: obj
|
||||
CHARACTER(LEN=*),INTENT(IN) :: tagname
|
||||
REAL(DP),INTENT(IN) :: pot_prefactor
|
||||
REAL(DP),INTENT(IN) :: gate_zpos
|
||||
REAL(DP),INTENT(IN) :: gate_gate_term
|
||||
REAL(DP),INTENT(IN) :: gatefieldEnergy
|
||||
!
|
||||
obj%tagname = TRIM(tagname)
|
||||
obj%lwrite = .TRUE.
|
||||
obj%lread = .TRUE.
|
||||
obj%pot_prefactor = pot_prefactor
|
||||
obj%gate_zpos = gate_zpos
|
||||
obj%gate_gate_term = gate_gate_term
|
||||
obj%gatefieldEnergy = gatefieldEnergy
|
||||
END SUBROUTINE qes_init_gateInfo
|
||||
|
||||
|
||||
SUBROUTINE qes_reset_gateInfo(obj)
|
||||
IMPLICIT NONE
|
||||
TYPE(gateInfo_type),INTENT(OUT) :: obj
|
||||
obj%tagname= ""
|
||||
obj%lwrite = .FALSE.
|
||||
obj%lread = .FALSE.
|
||||
END SUBROUTINE qes_reset_gateInfo
|
||||
|
||||
|
||||
SUBROUTINE qes_write_outputElectricField(xp, obj)
|
||||
IMPLICIT NONE
|
||||
|
@ -6417,56 +6599,50 @@ SUBROUTINE qes_write_outputElectricField(xp, obj)
|
|||
|
||||
CALL xml_NewElement(xp, TRIM(obj%tagname))
|
||||
!
|
||||
IF(obj%BerryPhase_ispresent) THEN
|
||||
CALL qes_write_BerryPhaseOutput(xp, obj%BerryPhase)
|
||||
!
|
||||
ENDIF
|
||||
IF(obj%BerryPhase_ispresent) CALL qes_write_BerryPhaseOutput(xp, obj%BerryPhase)
|
||||
!
|
||||
IF(obj%finiteElectricFieldInfo_ispresent) THEN
|
||||
IF(obj%finiteElectricFieldInfo_ispresent) &
|
||||
CALL qes_write_finiteFieldOut(xp, obj%finiteElectricFieldInfo)
|
||||
!
|
||||
ENDIF
|
||||
!
|
||||
IF(obj%dipoleInfo_ispresent) THEN
|
||||
CALL qes_write_dipoleOutput(xp, obj%dipoleInfo)
|
||||
!
|
||||
ENDIF
|
||||
IF(obj%dipoleInfo_ispresent) CALL qes_write_dipoleOutput(xp, obj%dipoleInfo)
|
||||
|
||||
!
|
||||
IF (obj%gateInfo_ispresent) CALL qes_write_gateInfo(xp, obj%gateInfo)
|
||||
|
||||
!
|
||||
CALL xml_EndElement(xp, TRIM(obj%tagname))
|
||||
!
|
||||
END SUBROUTINE qes_write_outputElectricField
|
||||
|
||||
SUBROUTINE qes_init_outputElectricField(obj, tagname, BerryPhase_ispresent, BerryPhase, &
|
||||
finiteElectricFieldInfo_ispresent, finiteElectricFieldInfo, &
|
||||
dipoleInfo_ispresent, dipoleInfo)
|
||||
SUBROUTINE qes_init_outputElectricField(obj, tagname, BerryPhase, finiteElectricFieldInfo,&
|
||||
dipoleInfo, gateInfo)
|
||||
IMPLICIT NONE
|
||||
|
||||
TYPE(outputElectricField_type) :: obj
|
||||
CHARACTER(len=*) :: tagname
|
||||
INTEGER :: i
|
||||
LOGICAL :: BerryPhase_ispresent
|
||||
TYPE(BerryPhaseOutput_type) :: BerryPhase
|
||||
LOGICAL :: finiteElectricFieldInfo_ispresent
|
||||
TYPE(finiteFieldOut_type) :: finiteElectricFieldInfo
|
||||
LOGICAL :: dipoleInfo_ispresent
|
||||
TYPE(dipoleOutput_type) :: dipoleInfo
|
||||
TYPE(BerryPhaseOutput_type),OPTIONAL :: BerryPhase
|
||||
TYPE(finiteFieldOut_type),OPTIONAL :: finiteElectricFieldInfo
|
||||
TYPE(dipoleOutput_type),OPTIONAL :: dipoleInfo
|
||||
TYPE(gateInfo_type),OPTIONAL :: gateInfo
|
||||
|
||||
obj%tagname = TRIM(tagname)
|
||||
obj%lwrite = .TRUE.
|
||||
obj%lread = .TRUE.
|
||||
obj%BerryPhase_ispresent = BerryPhase_ispresent
|
||||
obj%BerryPhase_ispresent = PRESENT(BerryPhase)
|
||||
IF(obj%BerryPhase_ispresent) THEN
|
||||
obj%BerryPhase = BerryPhase
|
||||
ENDIF
|
||||
obj%finiteElectricFieldInfo_ispresent = finiteElectricFieldInfo_ispresent
|
||||
obj%finiteElectricFieldInfo_ispresent = PRESENT(finiteElectricFieldInfo)
|
||||
IF(obj%finiteElectricFieldInfo_ispresent) THEN
|
||||
obj%finiteElectricFieldInfo = finiteElectricFieldInfo
|
||||
ENDIF
|
||||
obj%dipoleInfo_ispresent = dipoleInfo_ispresent
|
||||
obj%dipoleInfo_ispresent = PRESENT(dipoleInfo)
|
||||
IF(obj%dipoleInfo_ispresent) THEN
|
||||
obj%dipoleInfo = dipoleInfo
|
||||
ENDIF
|
||||
|
||||
obj%gateInfo_ispresent = PRESENT(gateInfo)
|
||||
IF ( obj%gateInfo_ispresent) obj%gateInfo = gateInfo
|
||||
END SUBROUTINE qes_init_outputElectricField
|
||||
|
||||
SUBROUTINE qes_reset_outputElectricField(obj)
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
! or http://www.gnu.org/copyleft/gpl.txt .
|
||||
!
|
||||
MODULE qes_module
|
||||
|
||||
USE iotk_module
|
||||
USE qes_types_module
|
||||
USE qes_libs_module
|
||||
|
|
|
@ -71,6 +71,7 @@ MODULE qes_read_module
|
|||
MODULE PROCEDURE qes_read_ekin_functional
|
||||
MODULE PROCEDURE qes_read_spin_constraints
|
||||
MODULE PROCEDURE qes_read_electric_field
|
||||
MODULE PROCEDURE qes_read_gate_settings
|
||||
MODULE PROCEDURE qes_read_atomic_constraints
|
||||
MODULE PROCEDURE qes_read_atomic_constraint
|
||||
MODULE PROCEDURE qes_read_inputOccupations
|
||||
|
@ -82,6 +83,7 @@ MODULE qes_read_module
|
|||
MODULE PROCEDURE qes_read_ionicPolarization
|
||||
MODULE PROCEDURE qes_read_electronicPolarization
|
||||
MODULE PROCEDURE qes_read_phase
|
||||
MODULE PROCEDURE qes_read_gateInfo
|
||||
MODULE PROCEDURE qes_read_convergence_info
|
||||
MODULE PROCEDURE qes_read_scf_conv
|
||||
MODULE PROCEDURE qes_read_opt_conv
|
||||
|
@ -2147,6 +2149,26 @@ MODULE qes_read_module
|
|||
obj%wyckoff_positions_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "crystal_positions")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:atomic_structureType","crystal_positions: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:atomic_structureType","crystal_positions: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%crystal_positions_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL qes_read_atomic_positions(tmp_node, obj%crystal_positions, ierr )
|
||||
ELSE
|
||||
obj%crystal_positions_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "cell")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
|
@ -6408,6 +6430,26 @@ MODULE qes_read_module
|
|||
obj%dipole_correction_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "gate_correction")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:electric_fieldType","gate_correction: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:electric_fieldType","gate_correction: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%gate_correction_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL qes_read_gate_settings(tmp_node, obj%gate_correction, ierr )
|
||||
ELSE
|
||||
obj%gate_correction_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "electric_field_direction")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
|
@ -6610,6 +6652,220 @@ MODULE qes_read_module
|
|||
END SUBROUTINE qes_read_electric_field
|
||||
!
|
||||
!
|
||||
SUBROUTINE qes_read_gate_settings(xml_node, obj, ierr )
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
TYPE(Node), INTENT(IN), POINTER :: xml_node
|
||||
TYPE(gate_settings_type), INTENT(OUT) :: obj
|
||||
INTEGER, OPTIONAL, INTENT(OUT) :: ierr
|
||||
!
|
||||
TYPE(Node), POINTER :: tmp_node
|
||||
TYPE(NodeList), POINTER :: tmp_node_list
|
||||
INTEGER :: tmp_node_list_size, index, iostat_
|
||||
!
|
||||
obj%tagname = getTagName(xml_node)
|
||||
!
|
||||
!
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "use_gate")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size /= 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","use_gate: wrong number of occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gate_settingsType","use_gate: wrong number of occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
IF (ASSOCIATED(tmp_node))&
|
||||
CALL extractDataContent(tmp_node, obj%use_gate, IOSTAT = iostat_ )
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","error reading use_gate")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gate_settingsType","error reading use_gate",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "zgate")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","zgate: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gate_settingsType","zgate: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%zgate_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL extractDataContent(tmp_node, obj%zgate , IOSTAT = iostat_)
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","error reading zgate")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gate_settingsType","error reading zgate",10)
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
obj%zgate_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "relaxz")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","relaxz: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gate_settingsType","relaxz: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%relaxz_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL extractDataContent(tmp_node, obj%relaxz , IOSTAT = iostat_)
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","error reading relaxz")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gate_settingsType","error reading relaxz",10)
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
obj%relaxz_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "block")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","block: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gate_settingsType","block: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%block_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL extractDataContent(tmp_node, obj%block , IOSTAT = iostat_)
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","error reading block")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gate_settingsType","error reading block",10)
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
obj%block_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "block_1")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","block_1: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gate_settingsType","block_1: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%block_1_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL extractDataContent(tmp_node, obj%block_1 , IOSTAT = iostat_)
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","error reading block_1")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gate_settingsType","error reading block_1",10)
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
obj%block_1_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "block_2")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","block_2: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gate_settingsType","block_2: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%block_2_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL extractDataContent(tmp_node, obj%block_2 , IOSTAT = iostat_)
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","error reading block_2")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gate_settingsType","error reading block_2",10)
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
obj%block_2_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "block_height")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","block_height: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gate_settingsType","block_height: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%block_height_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL extractDataContent(tmp_node, obj%block_height , IOSTAT = iostat_)
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gate_settingsType","error reading block_height")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gate_settingsType","error reading block_height",10)
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
obj%block_height_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
!
|
||||
obj%lwrite = .TRUE.
|
||||
!
|
||||
END SUBROUTINE qes_read_gate_settings
|
||||
!
|
||||
!
|
||||
SUBROUTINE qes_read_atomic_constraints(xml_node, obj, ierr )
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -6927,6 +7183,26 @@ MODULE qes_read_module
|
|||
obj%dipoleInfo_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "gateInfo")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:outputElectricFieldType","gateInfo: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:outputElectricFieldType","gateInfo: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%gateInfo_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL qes_read_gateInfo(tmp_node, obj%gateInfo, ierr )
|
||||
ELSE
|
||||
obj%gateInfo_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
!
|
||||
obj%lwrite = .TRUE.
|
||||
!
|
||||
|
@ -7529,6 +7805,124 @@ MODULE qes_read_module
|
|||
END SUBROUTINE qes_read_phase
|
||||
!
|
||||
!
|
||||
SUBROUTINE qes_read_gateInfo(xml_node, obj, ierr )
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
TYPE(Node), INTENT(IN), POINTER :: xml_node
|
||||
TYPE(gateInfo_type), INTENT(OUT) :: obj
|
||||
INTEGER, OPTIONAL, INTENT(OUT) :: ierr
|
||||
!
|
||||
TYPE(Node), POINTER :: tmp_node
|
||||
TYPE(NodeList), POINTER :: tmp_node_list
|
||||
INTEGER :: tmp_node_list_size, index, iostat_
|
||||
!
|
||||
obj%tagname = getTagName(xml_node)
|
||||
!
|
||||
!
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "pot_prefactor")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size /= 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","pot_prefactor: wrong number of occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gateInfoType","pot_prefactor: wrong number of occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
IF (ASSOCIATED(tmp_node))&
|
||||
CALL extractDataContent(tmp_node, obj%pot_prefactor, IOSTAT = iostat_ )
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","error reading pot_prefactor")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gateInfoType","error reading pot_prefactor",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "gate_zpos")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size /= 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","gate_zpos: wrong number of occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gateInfoType","gate_zpos: wrong number of occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
IF (ASSOCIATED(tmp_node))&
|
||||
CALL extractDataContent(tmp_node, obj%gate_zpos, IOSTAT = iostat_ )
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","error reading gate_zpos")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gateInfoType","error reading gate_zpos",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "gate_gate_term")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size /= 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","gate_gate_term: wrong number of occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gateInfoType","gate_gate_term: wrong number of occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
IF (ASSOCIATED(tmp_node))&
|
||||
CALL extractDataContent(tmp_node, obj%gate_gate_term, IOSTAT = iostat_ )
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","error reading gate_gate_term")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gateInfoType","error reading gate_gate_term",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "gatefieldEnergy")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size /= 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","gatefieldEnergy: wrong number of occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:gateInfoType","gatefieldEnergy: wrong number of occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
IF (ASSOCIATED(tmp_node))&
|
||||
CALL extractDataContent(tmp_node, obj%gatefieldEnergy, IOSTAT = iostat_ )
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:gateInfoType","error reading gatefieldEnergy")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:gateInfoType","error reading gatefieldEnergy",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
!
|
||||
obj%lwrite = .TRUE.
|
||||
!
|
||||
END SUBROUTINE qes_read_gateInfo
|
||||
!
|
||||
!
|
||||
SUBROUTINE qes_read_convergence_info(xml_node, obj, ierr )
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -8611,6 +9005,34 @@ MODULE qes_read_module
|
|||
obj%potentiostat_contr_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
tmp_node_list => getElementsByTagname(xml_node, "gatefield_contr")
|
||||
tmp_node_list_size = getLength(tmp_node_list)
|
||||
!
|
||||
IF (tmp_node_list_size > 1) THEN
|
||||
IF (PRESENT(ierr) ) THEN
|
||||
CALL infomsg("qes_read:total_energyType","gatefield_contr: too many occurrences")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore("qes_read:total_energyType","gatefield_contr: too many occurrences",10)
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
IF (tmp_node_list_size>0) THEN
|
||||
obj%gatefield_contr_ispresent = .TRUE.
|
||||
tmp_node => item(tmp_node_list, 0)
|
||||
CALL extractDataContent(tmp_node, obj%gatefield_contr , IOSTAT = iostat_)
|
||||
IF ( iostat_ /= 0 ) THEN
|
||||
IF ( PRESENT (ierr ) ) THEN
|
||||
CALL infomsg("qes_read:total_energyType","error reading gatefield_contr")
|
||||
ierr = ierr + 1
|
||||
ELSE
|
||||
CALL errore ("qes_read:total_energyType","error reading gatefield_contr",10)
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
obj%gatefield_contr_ispresent = .FALSE.
|
||||
END IF
|
||||
!
|
||||
!
|
||||
obj%lwrite = .TRUE.
|
||||
!
|
||||
|
|
|
@ -16,6 +16,9 @@ MODULE qes_types_module
|
|||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
PUBLIC
|
||||
PRIVATE DP
|
||||
|
||||
TYPE :: xml_format_type
|
||||
!
|
||||
CHARACTER(len=100) :: tagname
|
||||
|
@ -754,31 +757,27 @@ MODULE qes_types_module
|
|||
!
|
||||
END TYPE spin_constraints_type
|
||||
!
|
||||
TYPE :: electric_field_type
|
||||
TYPE :: gate_settings_type
|
||||
!
|
||||
CHARACTER(len=100) :: tagname
|
||||
LOGICAL :: lwrite = .FALSE.
|
||||
LOGICAL :: lread = .FALSE.
|
||||
!
|
||||
CHARACTER(len=256) :: electric_potential
|
||||
LOGICAL :: dipole_correction_ispresent = .FALSE.
|
||||
LOGICAL :: dipole_correction
|
||||
LOGICAL :: electric_field_direction_ispresent = .FALSE.
|
||||
INTEGER :: electric_field_direction
|
||||
LOGICAL :: potential_max_position_ispresent = .FALSE.
|
||||
REAL(DP) :: potential_max_position
|
||||
LOGICAL :: potential_decrease_width_ispresent = .FALSE.
|
||||
REAL(DP) :: potential_decrease_width
|
||||
LOGICAL :: electric_field_amplitude_ispresent = .FALSE.
|
||||
REAL(DP) :: electric_field_amplitude
|
||||
LOGICAL :: electric_field_vector_ispresent = .FALSE.
|
||||
REAL(DP), DIMENSION(3) :: electric_field_vector
|
||||
LOGICAL :: nk_per_string_ispresent = .FALSE.
|
||||
INTEGER :: nk_per_string
|
||||
LOGICAL :: n_berry_cycles_ispresent = .FALSE.
|
||||
INTEGER :: n_berry_cycles
|
||||
LOGICAL :: use_gate
|
||||
LOGICAL :: zgate_ispresent = .FALSE.
|
||||
REAL(DP) :: zgate
|
||||
LOGICAL :: relaxz_ispresent = .FALSE.
|
||||
LOGICAL :: relaxz
|
||||
LOGICAL :: block_ispresent = .FALSE.
|
||||
LOGICAL :: block
|
||||
LOGICAL :: block_1_ispresent = .FALSE.
|
||||
REAL(DP) :: block_1
|
||||
LOGICAL :: block_2_ispresent = .FALSE.
|
||||
REAL(DP) :: block_2
|
||||
LOGICAL :: block_height_ispresent = .FALSE.
|
||||
REAL(DP) :: block_height
|
||||
!
|
||||
END TYPE electric_field_type
|
||||
END TYPE gate_settings_type
|
||||
!
|
||||
TYPE :: atomic_constraint_type
|
||||
!
|
||||
|
@ -856,6 +855,19 @@ MODULE qes_types_module
|
|||
!
|
||||
END TYPE electronicPolarization_type
|
||||
!
|
||||
TYPE :: gateInfo_type
|
||||
!
|
||||
CHARACTER(len=100) :: tagname
|
||||
LOGICAL :: lwrite = .FALSE.
|
||||
LOGICAL :: lread = .FALSE.
|
||||
!
|
||||
REAL(DP) :: pot_prefactor
|
||||
REAL(DP) :: gate_zpos
|
||||
REAL(DP) :: gate_gate_term
|
||||
REAL(DP) :: gatefieldEnergy
|
||||
!
|
||||
END TYPE gateInfo_type
|
||||
!
|
||||
TYPE :: scf_conv_type
|
||||
!
|
||||
CHARACTER(len=100) :: tagname
|
||||
|
@ -953,6 +965,8 @@ MODULE qes_types_module
|
|||
REAL(DP) :: efieldcorr
|
||||
LOGICAL :: potentiostat_contr_ispresent = .FALSE.
|
||||
REAL(DP) :: potentiostat_contr
|
||||
LOGICAL :: gatefield_contr_ispresent = .FALSE.
|
||||
REAL(DP) :: gatefield_contr
|
||||
!
|
||||
END TYPE total_energy_type
|
||||
!
|
||||
|
@ -998,6 +1012,8 @@ MODULE qes_types_module
|
|||
TYPE(atomic_positions_type) :: atomic_positions
|
||||
LOGICAL :: wyckoff_positions_ispresent = .FALSE.
|
||||
TYPE(wyckoff_positions_type) :: wyckoff_positions
|
||||
LOGICAL :: crystal_positions_ispresent = .FALSE.
|
||||
TYPE(atomic_positions_type) :: crystal_positions
|
||||
TYPE(cell_type) :: cell
|
||||
!
|
||||
END TYPE atomic_structure_type
|
||||
|
@ -1078,6 +1094,34 @@ MODULE qes_types_module
|
|||
!
|
||||
END TYPE boundary_conditions_type
|
||||
!
|
||||
TYPE :: electric_field_type
|
||||
!
|
||||
CHARACTER(len=100) :: tagname
|
||||
LOGICAL :: lwrite = .FALSE.
|
||||
LOGICAL :: lread = .FALSE.
|
||||
!
|
||||
CHARACTER(len=256) :: electric_potential
|
||||
LOGICAL :: dipole_correction_ispresent = .FALSE.
|
||||
LOGICAL :: dipole_correction
|
||||
LOGICAL :: gate_correction_ispresent = .FALSE.
|
||||
TYPE(gate_settings_type) :: gate_correction
|
||||
LOGICAL :: electric_field_direction_ispresent = .FALSE.
|
||||
INTEGER :: electric_field_direction
|
||||
LOGICAL :: potential_max_position_ispresent = .FALSE.
|
||||
REAL(DP) :: potential_max_position
|
||||
LOGICAL :: potential_decrease_width_ispresent = .FALSE.
|
||||
REAL(DP) :: potential_decrease_width
|
||||
LOGICAL :: electric_field_amplitude_ispresent = .FALSE.
|
||||
REAL(DP) :: electric_field_amplitude
|
||||
LOGICAL :: electric_field_vector_ispresent = .FALSE.
|
||||
REAL(DP), DIMENSION(3) :: electric_field_vector
|
||||
LOGICAL :: nk_per_string_ispresent = .FALSE.
|
||||
INTEGER :: nk_per_string
|
||||
LOGICAL :: n_berry_cycles_ispresent = .FALSE.
|
||||
INTEGER :: n_berry_cycles
|
||||
!
|
||||
END TYPE electric_field_type
|
||||
!
|
||||
TYPE :: atomic_constraints_type
|
||||
!
|
||||
CHARACTER(len=100) :: tagname
|
||||
|
@ -1236,6 +1280,8 @@ MODULE qes_types_module
|
|||
TYPE(finiteFieldOut_type) :: finiteElectricFieldInfo
|
||||
LOGICAL :: dipoleInfo_ispresent = .FALSE.
|
||||
TYPE(dipoleOutput_type) :: dipoleInfo
|
||||
LOGICAL :: gateInfo_ispresent = .FALSE.
|
||||
TYPE(gateInfo_type) :: gateInfo
|
||||
!
|
||||
END TYPE outputElectricField_type
|
||||
!
|
||||
|
@ -1272,4 +1318,5 @@ MODULE qes_types_module
|
|||
END TYPE output_type
|
||||
!
|
||||
!
|
||||
END MODULE qes_types_module
|
||||
END MODULE qes_types_module
|
||||
|
||||
|
|
|
@ -60,18 +60,17 @@ MODULE qexsd_module
|
|||
LOGICAL :: qexsd_use_large_indent = .FALSE.
|
||||
!
|
||||
!
|
||||
TYPE (input_type) :: qexsd_input_obj
|
||||
TYPE (general_info_type) :: general_info
|
||||
TYPE (parallel_info_type) :: parallel_info
|
||||
TYPE (berryPhaseOutput_type) :: qexsd_bp_obj
|
||||
TYPE (dipoleOutput_type ) :: qexsd_dipol_obj
|
||||
TYPE (k_points_IBZ_type) :: qexsd_start_k_obj
|
||||
TYPE (occupations_type) :: qexsd_occ_obj
|
||||
TYPE (smearing_type) :: qexsd_smear_obj
|
||||
TYPE ( step_type),ALLOCATABLE :: steps(:)
|
||||
INTEGER :: exit_status
|
||||
TYPE ( closed_type ) :: qexsd_closed_element
|
||||
INTEGER :: step_counter
|
||||
TYPE (input_type) :: qexsd_input_obj
|
||||
TYPE (general_info_type) :: general_info
|
||||
TYPE (parallel_info_type) :: parallel_info
|
||||
TYPE (berryPhaseOutput_type),TARGET :: qexsd_bp_obj
|
||||
TYPE (k_points_IBZ_type) :: qexsd_start_k_obj
|
||||
TYPE (occupations_type) :: qexsd_occ_obj
|
||||
TYPE (smearing_type) :: qexsd_smear_obj
|
||||
TYPE ( step_type),ALLOCATABLE :: steps(:)
|
||||
INTEGER :: exit_status
|
||||
TYPE ( closed_type ) :: qexsd_closed_element
|
||||
INTEGER :: step_counter
|
||||
!
|
||||
! end of declarations
|
||||
!
|
||||
|
@ -89,11 +88,11 @@ MODULE qexsd_module
|
|||
qexsd_init_magnetization, qexsd_init_band_structure, &
|
||||
qexsd_init_total_energy, qexsd_init_forces, qexsd_init_stress, &
|
||||
qexsd_init_dipole_info, qexsd_init_outputElectricField, &
|
||||
qexsd_init_outputPBC
|
||||
qexsd_init_outputPBC, qexsd_init_gate_info
|
||||
!
|
||||
PUBLIC :: qexsd_step_addstep, qexsd_set_status
|
||||
!
|
||||
PUBLIC :: qexsd_init_berryPhaseOutput, qexsd_bp_obj, qexsd_dipol_obj
|
||||
PUBLIC :: qexsd_init_berryPhaseOutput, qexsd_bp_obj
|
||||
CONTAINS
|
||||
!
|
||||
!-------------------------------------------
|
||||
|
@ -1102,56 +1101,27 @@ CONTAINS
|
|||
!
|
||||
!
|
||||
!---------------------------------------------------------------------------------------
|
||||
SUBROUTINE qexsd_init_total_energy(obj,etot,eband,ehart,vtxc,etxc,ewald,degauss,demet,electric_field_corr,&
|
||||
potentiostat_contr)
|
||||
SUBROUTINE qexsd_init_total_energy(obj, etot, eband, ehart, vtxc, etxc, &
|
||||
ewald, degauss, demet, electric_field_corr, potentiostat_contr, gate_contribution)
|
||||
!----------------------------------------------------------------------------------------
|
||||
!
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
TYPE (total_energy_type) :: obj
|
||||
REAL(DP),INTENT(IN) :: etot,eband,ehart,vtxc,etxc,ewald,demet
|
||||
REAL(DP),INTENT(IN) :: degauss
|
||||
REAL(DP),OPTIONAL,INTENT(IN) :: electric_field_corr
|
||||
REAL(DP),OPTIONAL,INTENT(IN) :: potentiostat_contr
|
||||
REAL(DP),INTENT(IN) :: etot, ehart,vtxc,etxc
|
||||
REAL(DP),OPTIONAL,INTENT(IN) :: ewald,demet, eband, degauss
|
||||
REAL(DP),OPTIONAL :: electric_field_corr
|
||||
REAL(DP),OPTIONAL :: potentiostat_contr
|
||||
REAL(DP),OPTIONAL :: gate_contribution
|
||||
!
|
||||
LOGICAL :: demet_ispresent
|
||||
CHARACTER(LEN=*),PARAMETER :: TAGNAME="total_energy"
|
||||
REAL(DP) :: etot_har,eband_har,vtxc_har,etxc_har,ewald_har,&
|
||||
demet_har,ehart_har,efield_corr, potst_contribution_har
|
||||
|
||||
etot_har = etot/e2
|
||||
eband_har = etot/e2
|
||||
vtxc_har = vtxc/e2
|
||||
etxc_har = etxc/e2
|
||||
ewald_har = ewald/e2
|
||||
ehart_har = ehart/e2
|
||||
IF (PRESENT(electric_field_corr)) THEN
|
||||
efield_corr=electric_field_corr/e2
|
||||
ELSE
|
||||
efield_corr=0.d0
|
||||
END IF
|
||||
IF (PRESENT ( potentiostat_contr ) ) THEN
|
||||
potst_contribution_har = potentiostat_contr/e2
|
||||
ELSE
|
||||
potst_contribution_har = 0.d0
|
||||
END IF
|
||||
|
||||
IF (degauss .GT. 0.D0) THEN
|
||||
demet_ispresent=.TRUE.
|
||||
demet_har=demet/e2
|
||||
ELSE
|
||||
demet_ispresent=.FALSE.
|
||||
demet_har=0.d0
|
||||
ENDIF
|
||||
|
||||
CALL qes_init_total_energy(obj,TAGNAME,etot_har,eband_ispresent=.TRUE.,eband=eband_har,&
|
||||
ehart_ispresent=.TRUE., ehart=ehart_har,vtxc_ispresent=.TRUE.,&
|
||||
vtxc=vtxc_har,etxc_ispresent=.TRUE., etxc=etxc_har,ewald_ispresent=.TRUE.,&
|
||||
ewald=ewald_har, demet_ispresent=demet_ispresent,demet=demet_har, &
|
||||
efieldcorr_ispresent=PRESENT(electric_field_corr), efieldcorr=efield_corr,&
|
||||
POTENTIOSTAT_CONTR_ISPRESENT = PRESENT(potentiostat_contr), &
|
||||
POTENTIOSTAT_CONTR = potst_contribution_har)
|
||||
!
|
||||
CALL qes_init_total_energy(obj,TAGNAME,etot, EBAND = eband , EHART = ehart, VTXC = vtxc,&
|
||||
ETXC = etxc , EWALD = ewald, DEMET = demet, &
|
||||
EFIELDCORR=electric_field_corr, POTENTIOSTAT_CONTR = potentiostat_contr, &
|
||||
GATE_CONTRIBUTION = gate_contribution )
|
||||
|
||||
END SUBROUTINE qexsd_init_total_energy
|
||||
!
|
||||
|
@ -1234,6 +1204,9 @@ CONTAINS
|
|||
!
|
||||
dipole_info%idir = edir
|
||||
fac=omega/fpi
|
||||
dipole_info%tagname = "dipoleInfo"
|
||||
dipole_info%lwrite = .TRUE.
|
||||
dipole_info%lread = .TRUE.
|
||||
CALL qes_init_scalarQuantity(dipole_info%ion_dipole,"ion_dipole" , units="Atomic Units", &
|
||||
scalarQuantity= ion_dipole*fac)
|
||||
CALL qes_init_scalarQuantity(dipole_info%elec_dipole,"elec_dipole" , units="Atomic Units",&
|
||||
|
@ -1249,12 +1222,12 @@ CONTAINS
|
|||
CALL qes_init_scalarQuantity(dipole_info%potentialAmp,"potentialAmp" , units="Atomic Units",&
|
||||
scalarQuantity= vamp)
|
||||
CALL qes_init_scalarQuantity(dipole_info%totalLength, "totalLength", units = "Bohr",&
|
||||
scalarQuantity = length )
|
||||
scalarQuantity = length )
|
||||
|
||||
END SUBROUTINE qexsd_init_dipole_info
|
||||
!---------------------------------------------------------------------------------------------
|
||||
SUBROUTINE qexsd_init_outputElectricField(obj, lelfield, tefield, ldipole, lberry, bp_obj, el_pol, &
|
||||
ion_pol, dipole_obj )
|
||||
ion_pol, dipole_obj , gateInfo)
|
||||
!---------------------------------------------------------------------------------------------
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -1265,6 +1238,7 @@ CONTAINS
|
|||
REAL(DP),OPTIONAL,DIMENSION(3),INTENT(IN) :: el_pol, ion_pol
|
||||
TYPE(berryPhaseOutput_type),OPTIONAL,INTENT(IN) :: bp_obj
|
||||
TYPE ( dipoleOutput_type ),OPTIONAL, INTENT(IN) :: dipole_obj
|
||||
TYPE ( gateInfo_type),OPTIONAL,INTENT(IN) :: gateInfo
|
||||
!
|
||||
CHARACTER(LEN=*),PARAMETER :: TAGNAME="electric_field"
|
||||
TYPE ( berryPhaseOutput_type ) :: bp_loc_obj
|
||||
|
@ -1274,7 +1248,6 @@ CONTAINS
|
|||
dipo_is = .FALSE.
|
||||
!
|
||||
|
||||
|
||||
IF (lberry .AND. PRESENT ( bp_obj)) THEN
|
||||
bp_is = .TRUE.
|
||||
bp_loc_obj = bp_obj
|
||||
|
@ -1287,35 +1260,38 @@ CONTAINS
|
|||
dipo_is = .TRUE.
|
||||
dip_loc_obj=dipole_obj
|
||||
END IF
|
||||
CALL qes_init_outputElectricField(obj, TAGNAME, BerryPhase_ispresent = bp_is, &
|
||||
BerryPhase = bp_loc_obj, &
|
||||
finiteElectricFieldInfo_ispresent = finfield_is, &
|
||||
finiteElectricFieldInfo = finiteField_obj, &
|
||||
dipoleInfo_ispresent = dipo_is, dipoleInfo = dip_loc_obj)
|
||||
IF (dipo_is) CALL qes_reset_dipoleOutput( dip_loc_obj )
|
||||
IF ( bp_is ) CALL qes_reset_berryPhaseOutput( bp_loc_obj )
|
||||
CALL qes_init_outputElectricField(obj, TAGNAME, BerryPhase = bp_obj, &
|
||||
finiteElectricFieldInfo = finiteField_obj, &
|
||||
dipoleInfo = dipole_obj, &
|
||||
GATEINFO = gateInfo )
|
||||
IF ( finfield_is) CALL qes_reset_finiteFieldOut( finiteField_obj)
|
||||
!
|
||||
END SUBROUTINE qexsd_init_outputElectricField
|
||||
!
|
||||
!----------------------------------------------------------------------------------------
|
||||
SUBROUTINE qexsd_step_addstep( i_step, max_steps, ntyp, atm, ityp, nat,&
|
||||
tau, alat, a1, a2, a3, etot, eband, ehart, vtxc, etxc,&
|
||||
ewald, degauss, demet, forces, stress, n_scf_steps, scf_error, potstat_contr, &
|
||||
fcp_force, fcp_tot_charge )
|
||||
SUBROUTINE qexsd_step_addstep(i_step, max_steps, ntyp, atm, ityp, nat, tau, alat, a1, a2, a3, &
|
||||
etot, eband, ehart, vtxc, etxc, ewald, degauss, demet, forces, &
|
||||
stress, n_scf_steps, scf_error, efieldcorr, potstat_contr, &
|
||||
fcp_force, fcp_tot_charge, gatefield_en)
|
||||
!-----------------------------------------------------------------------------------------
|
||||
!! This routing initializes le steps array containing up to max_steps elements of the step_type
|
||||
!! data structure. Each element contains structural and energetic info for m.d. trajectories and
|
||||
!! structural minimization paths. All quantities must be provided directly in Hartree atomic units.
|
||||
!! @Note updated on April 10th 2018 by Pietro Delugas
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER ,INTENT(IN) :: i_step, max_steps, ntyp, nat, n_scf_steps, ityp(:)
|
||||
REAL(DP),INTENT(IN) :: tau(3,nat), alat, a1(3), a2(3), a3(3), etot, eband, ehart, vtxc, &
|
||||
etxc, ewald, degauss, demet, scf_error, forces(3,nat), stress(3,3)
|
||||
REAL(DP),OPTIONAL,INTENT (IN) :: potstat_contr, fcp_force, fcp_tot_charge
|
||||
etxc, ewald, scf_error, forces(3,nat), stress(3,3)
|
||||
REAL(DP),OPTIONAL,INTENT(IN) :: degauss, demet, gatefield_en, efieldcorr
|
||||
REAL(DP),OPTIONAL,INTENT (IN) :: potstat_contr, fcp_force, fcp_tot_charge
|
||||
CHARACTER(LEN=*),INTENT(IN) :: atm(:)
|
||||
TYPE (step_type) :: step_obj
|
||||
TYPE ( scf_conv_type ) :: scf_conv_obj
|
||||
TYPE ( atomic_structure_type ) :: atomic_struct_obj
|
||||
TYPE ( total_energy_type ) :: tot_en_obj
|
||||
TYPE ( matrix_type ) :: mat_forces, mat_stress
|
||||
!
|
||||
!
|
||||
IF ( i_step .EQ. 1 ) THEN
|
||||
ALLOCATE (steps(max_steps))
|
||||
step_counter = 0
|
||||
|
@ -1335,12 +1311,8 @@ CONTAINS
|
|||
step_obj%atomic_structure=atomic_struct_obj
|
||||
CALL qes_reset_atomic_structure( atomic_struct_obj )
|
||||
!
|
||||
CALL qexsd_init_total_energy ( tot_en_obj, etot/e2, eband/e2, ehart/e2, vtxc/e2, etxc/e2, ewald/e2, degauss/e2, &
|
||||
demet/e2 )
|
||||
IF ( PRESENT ( potstat_contr )) THEN
|
||||
tot_en_obj%potentiostat_contr_ispresent = .TRUE.
|
||||
tot_en_obj%potentiostat_contr = potstat_contr/e2
|
||||
END IF
|
||||
CALL qexsd_init_total_energy (tot_en_obj, etot, eband, ehart, &
|
||||
vtxc, etxc, ewald, degauss, demet, efieldcorr, potstat_contr, gatefield_en)
|
||||
step_obj%total_energy=tot_en_obj
|
||||
CALL qes_reset_total_energy( tot_en_obj )
|
||||
!
|
||||
|
@ -1354,6 +1326,8 @@ CONTAINS
|
|||
IF ( PRESENT ( fcp_force ) ) THEN
|
||||
step_obj%FCP_force = fcp_force
|
||||
step_obj%FCP_force_ispresent = .TRUE.
|
||||
END IF
|
||||
IF (PRESENT( fcp_tot_charge)) THEN
|
||||
step_obj%FCP_tot_charge = fcp_tot_charge
|
||||
step_obj%FCP_tot_charge_ispresent = .TRUE.
|
||||
END IF
|
||||
|
@ -1388,7 +1362,6 @@ CONTAINS
|
|||
!
|
||||
REAL(DP),INTENT(IN) :: wstring(nstring)
|
||||
!
|
||||
#if !defined (__OLDXLM)
|
||||
CHARACTER(LEN=*),PARAMETER :: TAGNAME = "BerryPhase"
|
||||
TYPE ( polarization_type) :: tot_pol_obj
|
||||
!
|
||||
|
@ -1453,7 +1426,6 @@ CONTAINS
|
|||
CALL qes_reset_polarization(tot_pol_obj)
|
||||
CALL qes_reset_scalarQuantity(pol_val)
|
||||
CALL qes_reset_phase(tot_phase)
|
||||
#endif
|
||||
!
|
||||
END SUBROUTINE qexsd_init_berryPhaseOutput
|
||||
!
|
||||
|
@ -1463,9 +1435,6 @@ CONTAINS
|
|||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER :: status_int
|
||||
#if !defined(__OLDXML)
|
||||
!CALL qes_init_status( exit_status, "status", status_int)
|
||||
#endif
|
||||
END SUBROUTINE qexsd_set_status
|
||||
!
|
||||
!--------------------------------------------------------------------------------------------------
|
||||
|
@ -1480,19 +1449,33 @@ CONTAINS
|
|||
CALL qes_init_closed (qexsd_closed_element, "closed", date_string, time_string,&
|
||||
"")
|
||||
END SUBROUTINE qexsd_set_closed
|
||||
|
||||
!-------------------------------------------------------------------------
|
||||
!
|
||||
!-------------------------------------------
|
||||
! ... read subroutines
|
||||
!-------------------------------------------
|
||||
!
|
||||
|
||||
!-----------------------------------------------------------------------------------
|
||||
SUBROUTINE qexsd_init_gate_info(obj, tagname, gatefield_en, zgate_, nelec_, alat_, at_, bg_, zv_, ityp_)
|
||||
!--------------------------------------------------------------------------------
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : tpi
|
||||
!
|
||||
IMPLICIT NONE
|
||||
TYPE (gateInfo_type),INTENT(INOUT) :: obj;
|
||||
CHARACTER(LEN=*) :: tagname
|
||||
REAL(DP), INTENT(IN) :: gatefield_en, zgate_, alat_, at_(3,3), bg_(3,3), zv_(:), nelec_
|
||||
INTEGER,INTENT(IN) :: ityp_(:)
|
||||
!
|
||||
REAL(DP) :: bmod, area, ionic_charge, gateamp, gate_gate_term
|
||||
!
|
||||
bmod=SQRT(bg_(1,3)**2+bg_(2,3)**2+bg_(3,3)**2)
|
||||
ionic_charge = SUM( zv_(ityp_(:)) )
|
||||
area = ABS((at_(1,1)*at_(2,2)-at_(2,1)*at_(1,2))*alat_**2)
|
||||
gateamp = (-(nelec_-ionic_charge)/area*tpi)
|
||||
gate_gate_term = (- (nelec_-ionic_charge) * gateamp * (alat_/bmod) / 6.0)
|
||||
obj = gateInfo_type( TAGNAME = TRIM(tagname), lwrite = .TRUE., lread = .FALSE., POT_PREFACTOR = gateamp, &
|
||||
GATE_ZPOS = zgate_, GATE_GATE_TERM = gate_gate_term, GATEFIELDENERGY = gatefield_en)
|
||||
!
|
||||
END SUBROUTINE qexsd_init_gate_info
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
!
|
||||
END MODULE qexsd_module
|
||||
|
||||
!
|
||||
|
|
|
@ -26,7 +26,6 @@ MODULE qexsd_input
|
|||
!
|
||||
USE iotk_base, ONLY : iotk_indent, iotk_maxindent
|
||||
USE constants, ONLY : e2,bohr_radius_angs
|
||||
USE iotk_module
|
||||
USE qes_module
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -604,7 +603,7 @@ MODULE qexsd_input
|
|||
!
|
||||
!-------------------------------------------------------------------------------------------------
|
||||
SUBROUTINE qexsd_init_electric_field_input (obj,tefield,dipfield,lelfield,lberry,edir,gdir,emaxpos,eopreg,eamp, &
|
||||
efield,efield_cart,nberrycyc,nppstr)
|
||||
efield,efield_cart,nberrycyc,nppstr, gate, zgate, relaxz, block, block_1, block_2, block_height )
|
||||
!---------------------------------------------------------------------------------------------------
|
||||
!
|
||||
IMPLICIT NONE
|
||||
|
@ -615,6 +614,8 @@ MODULE qexsd_input
|
|||
REAL(DP),INTENT(IN),OPTIONAL :: emaxpos,eopreg,eamp
|
||||
REAL(DP),INTENT(IN),OPTIONAL :: efield
|
||||
REAL(DP),INTENT(IN),OPTIONAL,DIMENSION(3) :: efield_cart
|
||||
LOGICAL,INTENT(IN),OPTIONAL :: gate, block,relaxz
|
||||
REAL(DP),INTENT(IN),OPTIONAL :: zgate,block_1, block_2, block_height
|
||||
!
|
||||
CHARACTER(LEN=*),PARAMETER :: TAGNAME="electric_field",&
|
||||
SAWTOOTH="sawtooth_potential",&
|
||||
|
@ -627,7 +628,12 @@ MODULE qexsd_input
|
|||
LOGICAL :: dir_ispresent=.FALSE., amp_ispresent= .FALSE.,&
|
||||
nberrycyc_ispresent=.FALSE.,nppstr_ispresent=.FALSE., &
|
||||
electric_field_ispresent = .FALSE.
|
||||
LOGICAL :: gate_, block_
|
||||
REAL(DP) :: block_1_, block_2_, block_3_
|
||||
TYPE(gate_settings_type),TARGET :: gata_settings_obj
|
||||
TYPE(gate_settings_type),POINTER :: gata_settings_ptr
|
||||
!
|
||||
electric_potential = "none"
|
||||
IF (tefield) THEN
|
||||
electric_potential=SAWTOOTH
|
||||
emaxpos_loc=emaxpos
|
||||
|
@ -664,7 +670,11 @@ MODULE qexsd_input
|
|||
electric_field_direction = gdir
|
||||
END IF
|
||||
END IF
|
||||
|
||||
IF (PRESENT (gate)) THEN
|
||||
gata_settings_ptr => gata_settings_obj
|
||||
CALL qes_init_gate_settings(gata_settings_obj, "gate_settings", gate, zgate, relaxz,&
|
||||
block, block_1, block_2, block_height )
|
||||
END IF
|
||||
CALL qes_init_electric_field( obj, TAGNAME, electric_potential=electric_potential, &
|
||||
dipole_correction_ispresent=dipfield, dipole_correction = dipfield, &
|
||||
electric_field_direction_ispresent= dir_ispresent, &
|
||||
|
@ -676,7 +686,8 @@ MODULE qexsd_input
|
|||
electric_field_vector = efield_cart_loc, &
|
||||
electric_field_vector_ispresent= electric_field_ispresent, &
|
||||
n_berry_cycles_ispresent=nberrycyc_ispresent,n_berry_cycles=nberrycyc_loc,&
|
||||
nk_per_string_ispresent=nppstr_ispresent,nk_per_string=nppstr_loc )
|
||||
nk_per_string_ispresent=nppstr_ispresent,nk_per_string=nppstr_loc, &
|
||||
gate_settings = gata_settings_obj)
|
||||
END SUBROUTINE qexsd_init_electric_field_input
|
||||
!
|
||||
!----------------------------------------------------------------------------------------------------------
|
||||
|
|
|
@ -1984,21 +1984,28 @@ MODULE read_namelists_module
|
|||
INTEGER,INTENT(in) :: ios, unit_loc
|
||||
CHARACTER(LEN=*) :: nl_name
|
||||
CHARACTER(len=512) :: line
|
||||
INTEGER :: ios2
|
||||
!
|
||||
IF( ionode ) THEN
|
||||
!READ( unit_loc, control, iostat = ios )
|
||||
ios2=0
|
||||
IF (ios /=0) THEN
|
||||
BACKSPACE(unit_loc)
|
||||
READ(unit_loc,'(A512)') line
|
||||
END IF
|
||||
READ(unit_loc,'(A512)', iostat=ios2) line
|
||||
END IF
|
||||
END IF
|
||||
|
||||
CALL mp_bcast( ios2, ionode_id, intra_image_comm )
|
||||
IF( ios2 /= 0 ) THEN
|
||||
CALL errore( ' read_namelists ', ' could not find namelist &'//TRIM(nl_name), 2)
|
||||
ENDIF
|
||||
!
|
||||
CALL mp_bcast( ios, ionode_id, intra_image_comm )
|
||||
CALL mp_bcast( line, ionode_id, intra_image_comm )
|
||||
IF( ios /= 0 ) THEN
|
||||
CALL errore( ' read_namelists ', &
|
||||
' bad line in namelist &'//TRIM(nl_name)//&
|
||||
': "'//TRIM(line)//'" (error could be in the previous line)',&
|
||||
ABS(ios) )
|
||||
1 )
|
||||
END IF
|
||||
!
|
||||
END SUBROUTINE check_namelist_read
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
|
||||
This example shows how to use pw2wannier90.x in conjunction with
|
||||
Wannier90 (http://www.wannier.org) to obtain maximally-localised
|
||||
Wannier functions (MLWFs) for the valence bands of diamond.
|
||||
Wannier90 may be run in two modes, 'library' and 'standalone',
|
||||
and both of these are demonstrated.
|
||||
|
||||
The Wannier90 code and library (available for download from
|
||||
http://www.wannier.org under the GNU General Public License) are required.
|
||||
For operation in library mode, the pw2wannier90 post-processing code must
|
||||
be linked at compile time to the Wannier90 library. Instructions for
|
||||
compilation of Wannier90 can be found in the documentation that comes with
|
||||
the distribution.
|
||||
|
||||
The calculation proceeds as follows (for the meaning of the cited input
|
||||
variables see the bottom of this file)
|
||||
|
||||
1) make a self-consistent calculation for diamond (input=diamond.scf.in,
|
||||
output=diamond.scf.out). The number of computed bands is internally
|
||||
computed as half the number of electrons in the unit cell
|
||||
(4 in this case).
|
||||
|
||||
2) call open_grid to use symmetry to obtain the full grid of k-points
|
||||
from the reduced one. The same outdir is used, but the prefix is changed
|
||||
adding "_open" at the end. Note that you cannot chaneg the number of bands
|
||||
with this procedure. The code also print on output a list of the k-points
|
||||
in the opened grid, copy this list to the input file of wannier90, in the
|
||||
appropriate place
|
||||
|
||||
-- From here on, the calculation continues exactly like in the wannier90 example
|
||||
|
||||
3) STAND-ALONE MODE
|
||||
|
||||
(3a) run Wannier90 (input=wannier.sa.win, output=wannier.sa.wout) to
|
||||
generate a list of the required overlap elements between states at
|
||||
different k-points. This information is written to a file called
|
||||
diamond.sa.nnkp
|
||||
|
||||
(3b) run pw2wannier90 (input=diamond.pw2wan.sa.in,
|
||||
output=diamond.pw2wan.sa.out) to compute the overlap between Bloch
|
||||
states, the projections for the starting guess and the eigenvalue
|
||||
of each Bloch eigenstate (written to the diamond.sa.mmn,
|
||||
diamond.sa.amn and diamond.sa.eig files, respectively).
|
||||
|
||||
(3c) run Wannier90 (input=wannier.sa.win, output=wannier.sa.wout) to
|
||||
obtain the MLWF centres and spreads.
|
||||
|
||||
4) LIBRARY MODE
|
||||
|
||||
!! pw2wannier90.x has to be compiled with the -D__WANLIB and
|
||||
!! libwannier.a has to be linked
|
||||
|
||||
(4a) run pw2wannier90 in library mode to obtain the MLWF centres
|
||||
and spreads (input=diamond.lib.win, diamond.pw2wan.lib.in,
|
||||
output=diamond.lib.wout, diamond.pw2wan.lib.out).
|
||||
|
||||
N.B.
|
||||
|
||||
(i) The WAN_DIR variable in the run_example script must be set to the
|
||||
directory of the wannier90 executable.
|
||||
|
||||
(ii) Multiple CPUs: distribution of k-points (the -npool command line option)
|
||||
is not yet supported, only G-vectors.
|
||||
|
||||
(iii) To run in library mode, pw2wannier90 must be linked to the wannier
|
||||
library. To do so, compile the Wannier90 library, libwannier.a,
|
||||
following the instructions in the Wannier90 documentation (for the
|
||||
impatient, type 'make lib' in the Wannier90 root directory). Then make
|
||||
the following changes to the espresso make.sys file, and recompile
|
||||
pw2wannier90:
|
||||
|
||||
+ Add -D__WANLIB to the DFLAGS variable
|
||||
DFLAGS = -D__WANLIB ...
|
||||
|
||||
+ Add a new variable WANLIB to specify location of Wannier library
|
||||
WANLIB = -L/path/of/wannier/library -lwannier
|
||||
|
||||
+ Add $(WANLIB) to the LIBS variable
|
||||
LIBS = $(WANLIB) $(LAPACK_LIBS) $(BLAS_LIBS) ...
|
||||
|
||||
Input variables for pw2wannier90:
|
||||
|
||||
outdir : location of temporary output files
|
||||
prefix : pwscf filename prefix
|
||||
seedname : wannier90 input/output filename prefix
|
||||
wan_mode : 'standalone' or 'library' [1]
|
||||
write_mmn : (logical) compute M_mn matrix [1]
|
||||
write_amn : (logical) compute A_mn matrix [1]
|
||||
write_unk : (logical) write wavefunctions to file [1]
|
||||
wvfn_formatted : (logical) formatted or unformatted output for wavefunctions
|
||||
reduce_unk : (logical) output wavefunctions on a coarse grid to save memory
|
||||
spin_component : 'none', 'up' or 'down'
|
||||
|
||||
|
||||
Please report problems and suggestions to Stefano de Gironcoli
|
||||
(degironc@sissa.it), Arash Mostofi (mostofi@mit.edu) and
|
||||
Jonathan Yates (jry20@cam.ac.uk).
|
||||
|
||||
|
||||
[1] For more details see Wannier90 documentation at http://www.wannier.org
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
num_wann = 4
|
||||
num_iter = 20
|
||||
|
||||
begin atoms_frac
|
||||
C -0.2500 -0.250 -0.25000
|
||||
C 0.00000 0.0000 0.000000
|
||||
end atoms_frac
|
||||
|
||||
begin projections
|
||||
f=0.0,0.0,0.0:s
|
||||
f=0.0,0.0,0.5:s
|
||||
f=0.0,0.5,0.0:s
|
||||
f=0.5,0.0,0.0:s
|
||||
end projections
|
||||
|
||||
#begin unit_cell_cart
|
||||
#-1.613990 0.000000 1.613990
|
||||
# 0.000000 1.613990 1.613990
|
||||
#-1.613990 1.613990 0.000000
|
||||
#end unit_cell_cart
|
||||
|
||||
begin unit_cell_cart
|
||||
bohr
|
||||
-3.050 0.000 3.050
|
||||
0.000 3.050 3.050
|
||||
-3.050 3.050 0.000
|
||||
end_unit_cell_cart
|
||||
|
||||
mp_grid : 4 4 4
|
||||
|
||||
begin kpoints
|
||||
0.000000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.750000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
-0.750000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
-0.750000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 -0.750000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.750000000000000 0.0156250000
|
||||
0.500000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.750000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.750000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.750000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
end kpoints
|
|
@ -0,0 +1,4 @@
|
|||
&inputpp
|
||||
outdir = '/home/paulatto/espresso/tempdir/'
|
||||
prefix = 'di'
|
||||
/
|
|
@ -0,0 +1,186 @@
|
|||
|
||||
Program OPEN_GRID v.6.2 starts on 4Apr2018 at 13: 9:12
|
||||
|
||||
This program is part of the open-source Quantum ESPRESSO suite
|
||||
for quantum simulation of materials; please cite
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
|
||||
URL http://www.quantum-espresso.org",
|
||||
in publications or presentations arising from this work. More details at
|
||||
http://www.quantum-espresso.org/quote
|
||||
|
||||
Parallel version (MPI), running on 4 processors
|
||||
|
||||
MPI processes distributed on 1 nodes
|
||||
R & G space division: proc/nbgrp/npool/nimage = 4
|
||||
|
||||
Reading nscf_save data
|
||||
|
||||
Reading data from directory:
|
||||
/home/paulatto/espresso/tempdir/di.save/
|
||||
|
||||
IMPORTANT: XC functional enforced from input :
|
||||
Exchange-correlation = PZ ( 1 1 0 0 0 0)
|
||||
Any further DFT definition will be discarded
|
||||
Please, verify this is what you really want
|
||||
|
||||
|
||||
Parallelization info
|
||||
--------------------
|
||||
sticks: dense smooth PW G-vecs: dense smooth PW
|
||||
Min 49 49 18 477 477 102
|
||||
Max 50 50 19 481 481 104
|
||||
Sum 199 199 73 1917 1917 411
|
||||
|
||||
|
||||
EXX: setup a grid of 64 q-points centered on each k-point
|
||||
(k+q)-points:
|
||||
0.0000000 0.0000000 0.0000000 1 1
|
||||
-0.2500000 0.2500000 -0.2500000 2 1
|
||||
0.5000000 -0.5000000 0.5000000 3 1
|
||||
0.2500000 -0.2500000 0.2500000 2 -1
|
||||
0.2500000 0.2500000 0.2500000 2 3
|
||||
0.0000000 0.5000000 0.0000000 4 1
|
||||
0.7500000 -0.2500000 0.7500000 5 1
|
||||
0.5000000 0.0000000 0.5000000 6 1
|
||||
-0.5000000 -0.5000000 -0.5000000 3 3
|
||||
-0.7500000 -0.2500000 -0.7500000 5 3
|
||||
0.0000000 -1.0000000 0.0000000 7 1
|
||||
0.7500000 0.2500000 0.7500000 5 -3
|
||||
-0.2500000 -0.2500000 -0.2500000 2 -3
|
||||
-0.5000000 0.0000000 -0.5000000 6 -1
|
||||
-0.7500000 0.2500000 -0.7500000 5 -1
|
||||
0.0000000 -0.5000000 0.0000000 4 -1
|
||||
-0.2500000 -0.2500000 0.2500000 2 4
|
||||
-0.5000000 0.0000000 0.0000000 4 -9
|
||||
0.2500000 -0.7500000 0.7500000 5 10
|
||||
0.0000000 -0.5000000 0.5000000 6 10
|
||||
0.0000000 0.0000000 0.5000000 4 5
|
||||
-0.2500000 0.2500000 0.2500000 2 -2
|
||||
-0.5000000 0.5000000 0.0000000 6 7
|
||||
-0.7500000 0.7500000 -0.2500000 5 -8
|
||||
-0.7500000 -0.7500000 -0.2500000 5 6
|
||||
0.0000000 0.5000000 0.5000000 6 9
|
||||
0.7500000 -0.2500000 -0.7500000 5 -2
|
||||
-0.5000000 -1.0000000 0.0000000 8 1
|
||||
-0.5000000 -0.5000000 0.0000000 6 -5
|
||||
0.2500000 0.7500000 0.7500000 5 -12
|
||||
-1.0000000 0.0000000 -0.5000000 8 9
|
||||
0.7500000 0.2500000 -0.7500000 5 4
|
||||
0.5000000 0.5000000 -0.5000000 3 4
|
||||
0.2500000 0.7500000 -0.7500000 5 11
|
||||
-1.0000000 0.0000000 0.0000000 7 9
|
||||
-0.2500000 -0.7500000 0.7500000 5 -11
|
||||
0.7500000 0.7500000 -0.2500000 5 5
|
||||
-0.5000000 0.0000000 0.5000000 6 2
|
||||
0.2500000 -0.7500000 -0.7500000 5 -9
|
||||
0.0000000 -0.5000000 -1.0000000 8 5
|
||||
0.0000000 0.0000000 -1.0000000 7 5
|
||||
0.7500000 -0.7500000 -0.2500000 5 -7
|
||||
-0.5000000 0.5000000 0.5000000 3 2
|
||||
-0.7500000 0.7500000 0.2500000 5 7
|
||||
-0.7500000 -0.7500000 0.2500000 5 -5
|
||||
0.0000000 0.5000000 1.0000000 8 -5
|
||||
-0.2500000 0.7500000 0.7500000 5 9
|
||||
0.5000000 0.0000000 -0.5000000 6 -2
|
||||
0.2500000 0.2500000 -0.2500000 2 -4
|
||||
0.0000000 0.5000000 -0.5000000 6 -10
|
||||
-0.2500000 0.7500000 -0.7500000 5 -10
|
||||
0.5000000 0.0000000 0.0000000 4 9
|
||||
0.5000000 0.5000000 0.0000000 6 5
|
||||
-0.7500000 -0.2500000 0.7500000 5 -4
|
||||
1.0000000 0.0000000 0.5000000 8 -9
|
||||
-0.2500000 -0.7500000 -0.7500000 5 12
|
||||
0.7500000 0.7500000 0.2500000 5 -6
|
||||
0.5000000 1.0000000 0.0000000 8 -1
|
||||
-0.7500000 0.2500000 0.7500000 5 2
|
||||
0.0000000 -0.5000000 -0.5000000 6 -9
|
||||
0.0000000 0.0000000 -0.5000000 4 -5
|
||||
0.7500000 -0.7500000 0.2500000 5 8
|
||||
0.5000000 -0.5000000 0.0000000 6 -7
|
||||
0.2500000 -0.2500000 -0.2500000 2 2
|
||||
|
||||
EXX grid: 1917 G-vectors FFT dimensions: ( 18, 18, 18)
|
||||
|
||||
Writing output data file di_open.save
|
||||
Grid of q-points
|
||||
Dimensions: 4 4 4
|
||||
Shift: 0 0 0
|
||||
List to be put in the .win file of wannier90: (already in crystal/fractionary coordinates):
|
||||
0.000000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.750000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
-0.750000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
-0.750000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 -0.750000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.750000000000000 0.0156250000
|
||||
0.500000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.750000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.750000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.750000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
|
||||
OPEN_GRID : 0.11s CPU 0.12s WALL
|
||||
|
||||
|
||||
This run was terminated on: 13: 9:12 4Apr2018
|
||||
|
||||
=------------------------------------------------------------------------------=
|
||||
JOB DONE.
|
||||
=------------------------------------------------------------------------------=
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
mpirun noticed that process rank 3 with PID 13341 on node naquite exited on signal 6 (Aborted).
|
||||
--------------------------------------------------------------------------
|
|
@ -0,0 +1,10 @@
|
|||
&inputpp
|
||||
outdir = '/home/paulatto/espresso/tempdir/'
|
||||
prefix = 'di'
|
||||
seedname = 'diamond.lib'
|
||||
spin_component = 'none'
|
||||
write_mmn = .true.
|
||||
write_amn = .true.
|
||||
write_unk = .false.
|
||||
wan_mode = 'library'
|
||||
/
|
|
@ -0,0 +1,10 @@
|
|||
&inputpp
|
||||
outdir = '/home/paulatto/espresso/tempdir/'
|
||||
prefix = 'di_open'
|
||||
seedname = 'diamond.sa'
|
||||
spin_component = 'none'
|
||||
write_mmn = .true.
|
||||
write_amn = .true.
|
||||
write_unk = .false.
|
||||
wan_mode = 'standalone'
|
||||
/
|
|
@ -0,0 +1,129 @@
|
|||
|
||||
Program PW2WANNIER v.6.2 starts on 4Apr2018 at 13: 9:12
|
||||
|
||||
This program is part of the open-source Quantum ESPRESSO suite
|
||||
for quantum simulation of materials; please cite
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
|
||||
URL http://www.quantum-espresso.org",
|
||||
in publications or presentations arising from this work. More details at
|
||||
http://www.quantum-espresso.org/quote
|
||||
|
||||
Parallel version (MPI), running on 4 processors
|
||||
|
||||
MPI processes distributed on 1 nodes
|
||||
R & G space division: proc/nbgrp/npool/nimage = 4
|
||||
|
||||
Reading nscf_save data
|
||||
|
||||
Reading data from directory:
|
||||
/home/paulatto/espresso/tempdir/di_open.save/
|
||||
|
||||
IMPORTANT: XC functional enforced from input :
|
||||
Exchange-correlation = PZ ( 1 1 0 0 0 0)
|
||||
Any further DFT definition will be discarded
|
||||
Please, verify this is what you really want
|
||||
|
||||
|
||||
Parallelization info
|
||||
--------------------
|
||||
sticks: dense smooth PW G-vecs: dense smooth PW
|
||||
Min 49 49 18 477 477 102
|
||||
Max 50 50 19 481 481 104
|
||||
Sum 199 199 73 1917 1917 411
|
||||
|
||||
|
||||
Spin CASE ( default = unpolarized )
|
||||
|
||||
Wannier mode is: standalone
|
||||
|
||||
-----------------
|
||||
*** Reading nnkp
|
||||
-----------------
|
||||
|
||||
Checking info from wannier.nnkp file
|
||||
|
||||
- Real lattice is ok
|
||||
- Reciprocal lattice is ok
|
||||
- K-points are ok
|
||||
- Number of wannier functions is ok ( 4)
|
||||
- All guiding functions are given
|
||||
|
||||
Projections:
|
||||
0.000000 0.000000 0.000000 0 1 1 1.000000
|
||||
-0.250000 0.250000 0.000000 0 1 1 1.000000
|
||||
0.000000 0.250000 0.250000 0 1 1 1.000000
|
||||
-0.250000 0.000000 0.250000 0 1 1 1.000000
|
||||
|
||||
Reading data about k-point neighbours
|
||||
|
||||
All neighbours are found
|
||||
|
||||
Opening pp-files
|
||||
|
||||
|
||||
---------------
|
||||
*** Compute A
|
||||
---------------
|
||||
|
||||
AMN: iknum = 64
|
||||
1 2 3 4 5 6 7 8 9 10
|
||||
11 12 13 14 15 16 17 18 19 20
|
||||
21 22 23 24 25 26 27 28 29 30
|
||||
31 32 33 34 35 36 37 38 39 40
|
||||
41 42 43 44 45 46 47 48 49 50
|
||||
51 52 53 54 55 56 57 58 59 60
|
||||
61 62 63 64
|
||||
|
||||
AMN calculated
|
||||
|
||||
---------------
|
||||
*** Compute M
|
||||
---------------
|
||||
|
||||
MMN: iknum = 64
|
||||
1 2 3 4 5 6 7 8 9 10
|
||||
11 12 13 14 15 16 17 18 19 20
|
||||
21 22 23 24 25 26 27 28 29 30
|
||||
31 32 33 34 35 36 37 38 39 40
|
||||
41 42 43 44 45 46 47 48 49 50
|
||||
51 52 53 54 55 56 57 58 59 60
|
||||
61 62 63 64
|
||||
|
||||
MMN calculated
|
||||
|
||||
-----------------------------------
|
||||
*** Orbital terms are not computed
|
||||
-----------------------------------
|
||||
|
||||
----------------
|
||||
*** Write bands
|
||||
----------------
|
||||
|
||||
|
||||
-----------------------------
|
||||
*** Plot info is not printed
|
||||
-----------------------------
|
||||
|
||||
-----------------------------
|
||||
*** Parity info is not printed
|
||||
-----------------------------
|
||||
|
||||
------------
|
||||
*** Stop pp
|
||||
------------
|
||||
|
||||
|
||||
init_pw2wan : 0.08s CPU 0.08s WALL ( 1 calls)
|
||||
compute_amn : 0.52s CPU 0.55s WALL ( 1 calls)
|
||||
compute_mmn : 0.20s CPU 0.23s WALL ( 1 calls)
|
||||
|
||||
PW2WANNIER : 0.60s CPU 0.64s WALL
|
||||
|
||||
|
||||
This run was terminated on: 13: 9:13 4Apr2018
|
||||
|
||||
=------------------------------------------------------------------------------=
|
||||
JOB DONE.
|
||||
=------------------------------------------------------------------------------=
|
||||
|
|
@ -0,0 +1,256 @@
|
|||
1 1 -6.423483922914
|
||||
2 1 19.431947004888
|
||||
3 1 19.431947004888
|
||||
4 1 19.431947004888
|
||||
1 2 -4.363963335646
|
||||
2 2 11.195968848356
|
||||
3 2 17.124165239381
|
||||
4 2 17.124165239381
|
||||
1 3 1.355382312771
|
||||
2 3 2.092649596443
|
||||
3 3 15.836012188466
|
||||
4 3 15.836012188466
|
||||
1 4 -4.363963335646
|
||||
2 4 11.195968848356
|
||||
3 4 17.124165239381
|
||||
4 4 17.124165239381
|
||||
1 5 -4.363963335646
|
||||
2 5 11.195968848356
|
||||
3 5 17.124165239381
|
||||
4 5 17.124165239381
|
||||
1 6 -3.667555670081
|
||||
2 6 13.890234023788
|
||||
3 6 13.890234023788
|
||||
4 6 14.604442847876
|
||||
1 7 1.011586491263
|
||||
2 7 6.117322590781
|
||||
3 7 10.947910145051
|
||||
4 7 12.942360338164
|
||||
1 8 -0.984105169075
|
||||
2 8 8.995402960001
|
||||
3 8 9.481453737115
|
||||
4 8 15.432386871287
|
||||
1 9 1.355382312771
|
||||
2 9 2.092649596443
|
||||
3 9 15.836012188466
|
||||
4 9 15.836012188466
|
||||
1 10 1.011586491263
|
||||
2 10 6.117322590781
|
||||
3 10 10.947910145051
|
||||
4 10 12.942360338164
|
||||
1 11 4.270283060014
|
||||
2 11 4.270350331709
|
||||
3 11 11.066669689985
|
||||
4 11 11.066669689985
|
||||
1 12 1.011586491263
|
||||
2 12 6.117322590781
|
||||
3 12 10.947910145051
|
||||
4 12 12.942360338164
|
||||
1 13 -4.363963335646
|
||||
2 13 11.195968848356
|
||||
3 13 17.124165239381
|
||||
4 13 17.124165239381
|
||||
1 14 -0.984105169075
|
||||
2 14 8.995402960001
|
||||
3 14 9.481453737115
|
||||
4 14 15.432386871287
|
||||
1 15 1.011586491263
|
||||
2 15 6.117322590781
|
||||
3 15 10.947910145051
|
||||
4 15 12.942360338164
|
||||
1 16 -3.667555670081
|
||||
2 16 13.890234023788
|
||||
3 16 13.890234023788
|
||||
4 16 14.604442847876
|
||||
1 17 -4.363963335646
|
||||
2 17 11.195968848356
|
||||
3 17 17.124165239381
|
||||
4 17 17.124165239381
|
||||
1 18 -3.667555670081
|
||||
2 18 13.890234023788
|
||||
3 18 13.890234023788
|
||||
4 18 14.604442847876
|
||||
1 19 1.011586491263
|
||||
2 19 6.117322590781
|
||||
3 19 10.947910145051
|
||||
4 19 12.942360338164
|
||||
1 20 -0.984105169075
|
||||
2 20 8.995402960001
|
||||
3 20 9.481453737115
|
||||
4 20 15.432386871287
|
||||
1 21 -3.667555670081
|
||||
2 21 13.890234023788
|
||||
3 21 13.890234023788
|
||||
4 21 14.604442847876
|
||||
1 22 -4.363963335646
|
||||
2 22 11.195968848356
|
||||
3 22 17.124165239381
|
||||
4 22 17.124165239381
|
||||
1 23 -0.984105169075
|
||||
2 23 8.995402960001
|
||||
3 23 9.481453737115
|
||||
4 23 15.432386871287
|
||||
1 24 1.011586491263
|
||||
2 24 6.117322590781
|
||||
3 24 10.947910145051
|
||||
4 24 12.942360338164
|
||||
1 25 1.011586491263
|
||||
2 25 6.117322590781
|
||||
3 25 10.947910145051
|
||||
4 25 12.942360338164
|
||||
1 26 -0.984105169075
|
||||
2 26 8.995402960001
|
||||
3 26 9.481453737115
|
||||
4 26 15.432386871287
|
||||
1 27 1.011586491263
|
||||
2 27 6.117322590781
|
||||
3 27 10.947910145051
|
||||
4 27 12.942360338164
|
||||
1 28 5.730758423160
|
||||
2 28 5.730838557281
|
||||
3 28 7.962324188150
|
||||
4 28 7.962329102032
|
||||
1 29 -0.984105169075
|
||||
2 29 8.995402960001
|
||||
3 29 9.481453737115
|
||||
4 29 15.432386871287
|
||||
1 30 1.011586491263
|
||||
2 30 6.117322590781
|
||||
3 30 10.947910145051
|
||||
4 30 12.942360338164
|
||||
1 31 5.730758423160
|
||||
2 31 5.730838557281
|
||||
3 31 7.962324188150
|
||||
4 31 7.962329102032
|
||||
1 32 1.011586491263
|
||||
2 32 6.117322590781
|
||||
3 32 10.947910145051
|
||||
4 32 12.942360338164
|
||||
1 33 1.355382312771
|
||||
2 33 2.092649596443
|
||||
3 33 15.836012188466
|
||||
4 33 15.836012188466
|
||||
1 34 1.011586491263
|
||||
2 34 6.117322590781
|
||||
3 34 10.947910145051
|
||||
4 34 12.942360338164
|
||||
1 35 4.270283060014
|
||||
2 35 4.270350331709
|
||||
3 35 11.066669689985
|
||||
4 35 11.066669689985
|
||||
1 36 1.011586491263
|
||||
2 36 6.117322590781
|
||||
3 36 10.947910145051
|
||||
4 36 12.942360338164
|
||||
1 37 1.011586491263
|
||||
2 37 6.117322590781
|
||||
3 37 10.947910145051
|
||||
4 37 12.942360338164
|
||||
1 38 -0.984105169075
|
||||
2 38 8.995402960001
|
||||
3 38 9.481453737115
|
||||
4 38 15.432386871287
|
||||
1 39 1.011586491263
|
||||
2 39 6.117322590781
|
||||
3 39 10.947910145051
|
||||
4 39 12.942360338164
|
||||
1 40 5.730758423160
|
||||
2 40 5.730838557281
|
||||
3 40 7.962324188150
|
||||
4 40 7.962329102032
|
||||
1 41 4.270283060014
|
||||
2 41 4.270350331709
|
||||
3 41 11.066669689985
|
||||
4 41 11.066669689985
|
||||
1 42 1.011586491263
|
||||
2 42 6.117322590781
|
||||
3 42 10.947910145051
|
||||
4 42 12.942360338164
|
||||
1 43 1.355382312771
|
||||
2 43 2.092649596443
|
||||
3 43 15.836012188466
|
||||
4 43 15.836012188466
|
||||
1 44 1.011586491263
|
||||
2 44 6.117322590781
|
||||
3 44 10.947910145051
|
||||
4 44 12.942360338164
|
||||
1 45 1.011586491263
|
||||
2 45 6.117322590781
|
||||
3 45 10.947910145051
|
||||
4 45 12.942360338164
|
||||
1 46 5.730758423160
|
||||
2 46 5.730838557281
|
||||
3 46 7.962324188150
|
||||
4 46 7.962329102032
|
||||
1 47 1.011586491263
|
||||
2 47 6.117322590781
|
||||
3 47 10.947910145051
|
||||
4 47 12.942360338164
|
||||
1 48 -0.984105169075
|
||||
2 48 8.995402960001
|
||||
3 48 9.481453737115
|
||||
4 48 15.432386871287
|
||||
1 49 -4.363963335646
|
||||
2 49 11.195968848356
|
||||
3 49 17.124165239381
|
||||
4 49 17.124165239381
|
||||
1 50 -0.984105169075
|
||||
2 50 8.995402960001
|
||||
3 50 9.481453737115
|
||||
4 50 15.432386871287
|
||||
1 51 1.011586491263
|
||||
2 51 6.117322590781
|
||||
3 51 10.947910145051
|
||||
4 51 12.942360338164
|
||||
1 52 -3.667555670081
|
||||
2 52 13.890234023788
|
||||
3 52 13.890234023788
|
||||
4 52 14.604442847876
|
||||
1 53 -0.984105169075
|
||||
2 53 8.995402960001
|
||||
3 53 9.481453737115
|
||||
4 53 15.432386871287
|
||||
1 54 1.011586491263
|
||||
2 54 6.117322590781
|
||||
3 54 10.947910145051
|
||||
4 54 12.942360338164
|
||||
1 55 5.730758423160
|
||||
2 55 5.730838557281
|
||||
3 55 7.962324188150
|
||||
4 55 7.962329102032
|
||||
1 56 1.011586491263
|
||||
2 56 6.117322590781
|
||||
3 56 10.947910145051
|
||||
4 56 12.942360338164
|
||||
1 57 1.011586491263
|
||||
2 57 6.117322590781
|
||||
3 57 10.947910145051
|
||||
4 57 12.942360338164
|
||||
1 58 5.730758423160
|
||||
2 58 5.730838557281
|
||||
3 58 7.962324188150
|
||||
4 58 7.962329102032
|
||||
1 59 1.011586491263
|
||||
2 59 6.117322590781
|
||||
3 59 10.947910145051
|
||||
4 59 12.942360338164
|
||||
1 60 -0.984105169075
|
||||
2 60 8.995402960001
|
||||
3 60 9.481453737115
|
||||
4 60 15.432386871287
|
||||
1 61 -3.667555670081
|
||||
2 61 13.890234023788
|
||||
3 61 13.890234023788
|
||||
4 61 14.604442847876
|
||||
1 62 1.011586491263
|
||||
2 62 6.117322590781
|
||||
3 62 10.947910145051
|
||||
4 62 12.942360338164
|
||||
1 63 -0.984105169075
|
||||
2 63 8.995402960001
|
||||
3 63 9.481453737115
|
||||
4 63 15.432386871287
|
||||
1 64 -4.363963335646
|
||||
2 64 11.195968848356
|
||||
3 64 17.124165239381
|
||||
4 64 17.124165239381
|
|
@ -0,0 +1,615 @@
|
|||
File written on 4Apr2018 at 13:09:12
|
||||
|
||||
calc_only_A : F
|
||||
|
||||
begin real_lattice
|
||||
-1.6139905 0.0000000 1.6139905
|
||||
0.0000000 1.6139905 1.6139905
|
||||
-1.6139905 1.6139905 0.0000000
|
||||
end real_lattice
|
||||
|
||||
begin recip_lattice
|
||||
-1.9464753 -1.9464753 1.9464753
|
||||
1.9464753 1.9464753 1.9464753
|
||||
-1.9464753 1.9464753 -1.9464753
|
||||
end recip_lattice
|
||||
|
||||
begin kpoints
|
||||
64
|
||||
0.00000000 0.00000000 0.00000000
|
||||
0.00000000 0.00000000 0.25000000
|
||||
0.00000000 0.00000000 -0.50000000
|
||||
0.00000000 0.00000000 -0.25000000
|
||||
0.00000000 0.25000000 0.00000000
|
||||
0.00000000 0.25000000 0.25000000
|
||||
0.00000000 0.25000000 -0.50000000
|
||||
0.00000000 0.25000000 -0.25000000
|
||||
0.00000000 -0.50000000 0.00000000
|
||||
0.00000000 -0.50000000 0.25000000
|
||||
0.00000000 -0.50000000 -0.50000000
|
||||
0.00000000 0.50000000 -0.25000000
|
||||
0.00000000 -0.25000000 0.00000000
|
||||
0.00000000 -0.25000000 0.25000000
|
||||
0.00000000 -0.25000000 0.50000000
|
||||
0.00000000 -0.25000000 -0.25000000
|
||||
0.25000000 0.00000000 0.00000000
|
||||
0.25000000 0.00000000 0.25000000
|
||||
0.25000000 0.00000000 -0.50000000
|
||||
0.25000000 0.00000000 -0.25000000
|
||||
0.25000000 0.25000000 0.00000000
|
||||
0.25000000 0.25000000 0.25000000
|
||||
0.25000000 0.25000000 0.50000000
|
||||
0.25000000 0.25000000 0.75000000
|
||||
0.25000000 -0.50000000 0.00000000
|
||||
0.25000000 0.50000000 0.25000000
|
||||
-0.75000000 -0.50000000 -0.50000000
|
||||
0.25000000 -0.50000000 -0.25000000
|
||||
0.25000000 -0.25000000 0.00000000
|
||||
0.25000000 0.75000000 0.25000000
|
||||
0.25000000 -0.25000000 0.50000000
|
||||
-0.75000000 -0.25000000 -0.25000000
|
||||
-0.50000000 0.00000000 0.00000000
|
||||
-0.50000000 0.00000000 0.25000000
|
||||
0.50000000 0.00000000 0.50000000
|
||||
0.50000000 0.00000000 -0.25000000
|
||||
-0.50000000 0.25000000 0.00000000
|
||||
0.50000000 0.25000000 0.25000000
|
||||
-0.50000000 -0.75000000 -0.50000000
|
||||
-0.50000000 -0.75000000 -0.25000000
|
||||
-0.50000000 -0.50000000 0.00000000
|
||||
-0.50000000 -0.50000000 -0.75000000
|
||||
0.50000000 0.50000000 0.50000000
|
||||
0.50000000 0.50000000 0.75000000
|
||||
0.50000000 -0.25000000 0.00000000
|
||||
0.50000000 0.75000000 0.25000000
|
||||
0.50000000 0.75000000 0.50000000
|
||||
-0.50000000 -0.25000000 -0.25000000
|
||||
-0.25000000 0.00000000 0.00000000
|
||||
-0.25000000 0.00000000 0.25000000
|
||||
-0.25000000 0.00000000 0.50000000
|
||||
-0.25000000 0.00000000 -0.25000000
|
||||
-0.25000000 0.25000000 0.00000000
|
||||
0.75000000 0.25000000 0.25000000
|
||||
-0.25000000 0.25000000 -0.50000000
|
||||
-0.25000000 -0.75000000 -0.25000000
|
||||
-0.25000000 0.50000000 0.00000000
|
||||
-0.25000000 0.50000000 0.25000000
|
||||
0.75000000 0.50000000 0.50000000
|
||||
-0.25000000 -0.50000000 -0.25000000
|
||||
-0.25000000 -0.25000000 0.00000000
|
||||
-0.25000000 -0.25000000 -0.75000000
|
||||
-0.25000000 -0.25000000 -0.50000000
|
||||
-0.25000000 -0.25000000 -0.25000000
|
||||
end kpoints
|
||||
|
||||
begin projections
|
||||
4
|
||||
0.00000 0.00000 0.00000 0 1 1
|
||||
0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000 1.00
|
||||
0.00000 0.00000 0.50000 0 1 1
|
||||
0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000 1.00
|
||||
0.00000 0.50000 0.00000 0 1 1
|
||||
0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000 1.00
|
||||
0.50000 0.00000 0.00000 0 1 1
|
||||
0.0000000 0.0000000 1.0000000 1.0000000 0.0000000 0.0000000 1.00
|
||||
end projections
|
||||
|
||||
begin nnkpts
|
||||
8
|
||||
1 2 0 0 0
|
||||
1 4 0 0 0
|
||||
1 5 0 0 0
|
||||
1 13 0 0 0
|
||||
1 17 0 0 0
|
||||
1 22 0 0 0
|
||||
1 49 0 0 0
|
||||
1 64 0 0 0
|
||||
2 1 0 0 0
|
||||
2 6 0 0 0
|
||||
2 14 0 0 0
|
||||
2 18 0 0 0
|
||||
2 23 0 0 0
|
||||
2 50 0 0 0
|
||||
2 61 0 0 0
|
||||
2 3 0 0 1
|
||||
3 4 0 0 0
|
||||
3 7 0 0 0
|
||||
3 19 0 0 0
|
||||
3 62 0 0 0
|
||||
3 2 0 0 -1
|
||||
3 15 0 0 -1
|
||||
3 24 0 0 -1
|
||||
3 51 0 0 -1
|
||||
4 1 0 0 0
|
||||
4 3 0 0 0
|
||||
4 8 0 0 0
|
||||
4 16 0 0 0
|
||||
4 20 0 0 0
|
||||
4 21 0 0 0
|
||||
4 52 0 0 0
|
||||
4 63 0 0 0
|
||||
5 1 0 0 0
|
||||
5 6 0 0 0
|
||||
5 8 0 0 0
|
||||
5 21 0 0 0
|
||||
5 26 0 0 0
|
||||
5 52 0 0 0
|
||||
5 53 0 0 0
|
||||
5 9 0 1 0
|
||||
6 2 0 0 0
|
||||
6 5 0 0 0
|
||||
6 22 0 0 0
|
||||
6 49 0 0 0
|
||||
6 27 1 1 1
|
||||
6 10 0 1 0
|
||||
6 7 0 0 1
|
||||
6 54 -1 0 0
|
||||
7 3 0 0 0
|
||||
7 8 0 0 0
|
||||
7 55 0 0 0
|
||||
7 11 0 1 0
|
||||
7 28 0 1 0
|
||||
7 6 0 0 -1
|
||||
7 23 0 0 -1
|
||||
7 50 0 0 -1
|
||||
8 4 0 0 0
|
||||
8 5 0 0 0
|
||||
8 7 0 0 0
|
||||
8 12 0 0 0
|
||||
8 25 0 1 0
|
||||
8 56 0 1 0
|
||||
8 24 0 0 -1
|
||||
8 51 0 0 -1
|
||||
9 10 0 0 0
|
||||
9 13 0 0 0
|
||||
9 25 0 0 0
|
||||
9 56 0 0 0
|
||||
9 5 0 -1 0
|
||||
9 12 0 -1 0
|
||||
9 30 0 -1 0
|
||||
9 57 0 -1 0
|
||||
10 9 0 0 0
|
||||
10 14 0 0 0
|
||||
10 31 0 0 0
|
||||
10 11 0 0 1
|
||||
10 6 0 -1 0
|
||||
10 26 0 -1 0
|
||||
10 53 0 -1 0
|
||||
10 58 0 -1 0
|
||||
11 27 1 0 0
|
||||
11 32 1 0 0
|
||||
11 10 0 0 -1
|
||||
11 15 0 0 -1
|
||||
11 7 0 -1 0
|
||||
11 12 0 -1 0
|
||||
11 54 -1 -1 -1
|
||||
11 59 -1 -1 -1
|
||||
12 8 0 0 0
|
||||
12 55 0 0 0
|
||||
12 9 0 1 0
|
||||
12 11 0 1 0
|
||||
12 16 0 1 0
|
||||
12 28 0 1 0
|
||||
12 29 0 1 0
|
||||
12 60 0 1 0
|
||||
13 1 0 0 0
|
||||
13 9 0 0 0
|
||||
13 14 0 0 0
|
||||
13 16 0 0 0
|
||||
13 18 0 0 0
|
||||
13 29 0 0 0
|
||||
13 60 0 0 0
|
||||
13 61 0 0 0
|
||||
14 2 0 0 0
|
||||
14 10 0 0 0
|
||||
14 13 0 0 0
|
||||
14 15 0 0 0
|
||||
14 19 0 0 1
|
||||
14 62 0 0 1
|
||||
14 30 0 -1 0
|
||||
14 57 0 -1 0
|
||||
15 14 0 0 0
|
||||
15 31 0 0 0
|
||||
15 3 0 0 1
|
||||
15 11 0 0 1
|
||||
15 16 0 0 1
|
||||
15 20 0 0 1
|
||||
15 63 0 0 1
|
||||
15 58 0 -1 0
|
||||
16 4 0 0 0
|
||||
16 13 0 0 0
|
||||
16 17 0 0 0
|
||||
16 64 0 0 0
|
||||
16 32 1 0 0
|
||||
16 15 0 0 -1
|
||||
16 12 0 -1 0
|
||||
16 59 -1 -1 -1
|
||||
17 1 0 0 0
|
||||
17 16 0 0 0
|
||||
17 18 0 0 0
|
||||
17 20 0 0 0
|
||||
17 21 0 0 0
|
||||
17 29 0 0 0
|
||||
17 38 0 0 0
|
||||
17 33 1 0 0
|
||||
18 2 0 0 0
|
||||
18 13 0 0 0
|
||||
18 17 0 0 0
|
||||
18 22 0 0 0
|
||||
18 39 1 1 1
|
||||
18 34 1 0 0
|
||||
18 19 0 0 1
|
||||
18 30 0 -1 0
|
||||
19 3 0 0 0
|
||||
19 20 0 0 0
|
||||
19 14 0 0 -1
|
||||
19 18 0 0 -1
|
||||
19 23 0 0 -1
|
||||
19 31 0 0 -1
|
||||
19 35 0 0 -1
|
||||
19 40 1 1 0
|
||||
20 4 0 0 0
|
||||
20 17 0 0 0
|
||||
20 19 0 0 0
|
||||
20 36 0 0 0
|
||||
20 32 1 0 0
|
||||
20 37 1 0 0
|
||||
20 15 0 0 -1
|
||||
20 24 0 0 -1
|
||||
21 4 0 0 0
|
||||
21 5 0 0 0
|
||||
21 17 0 0 0
|
||||
21 22 0 0 0
|
||||
21 42 1 1 1
|
||||
21 37 1 0 0
|
||||
21 25 0 1 0
|
||||
21 24 0 0 -1
|
||||
22 1 0 0 0
|
||||
22 6 0 0 0
|
||||
22 18 0 0 0
|
||||
22 21 0 0 0
|
||||
22 23 0 0 0
|
||||
22 26 0 0 0
|
||||
22 38 0 0 0
|
||||
22 43 0 0 0
|
||||
23 2 0 0 0
|
||||
23 22 0 0 0
|
||||
23 24 0 0 0
|
||||
23 44 0 0 0
|
||||
23 27 1 1 1
|
||||
23 39 1 1 1
|
||||
23 7 0 0 1
|
||||
23 19 0 0 1
|
||||
24 23 0 0 0
|
||||
24 40 1 1 1
|
||||
24 41 1 1 1
|
||||
24 3 0 0 1
|
||||
24 8 0 0 1
|
||||
24 20 0 0 1
|
||||
24 21 0 0 1
|
||||
24 28 0 1 1
|
||||
25 9 0 0 0
|
||||
25 28 0 0 0
|
||||
25 29 0 0 0
|
||||
25 41 1 0 0
|
||||
25 8 0 -1 0
|
||||
25 21 0 -1 0
|
||||
25 26 0 -1 0
|
||||
25 46 0 -1 0
|
||||
26 5 0 0 0
|
||||
26 22 0 0 0
|
||||
26 30 0 0 0
|
||||
26 47 0 0 0
|
||||
26 27 1 1 1
|
||||
26 42 1 1 1
|
||||
26 10 0 1 0
|
||||
26 25 0 1 0
|
||||
27 48 0 0 0
|
||||
27 11 -1 0 0
|
||||
27 28 -1 0 0
|
||||
27 6 -1 -1 -1
|
||||
27 23 -1 -1 -1
|
||||
27 26 -1 -1 -1
|
||||
27 43 -1 -1 -1
|
||||
27 31 -1 0 -1
|
||||
28 25 0 0 0
|
||||
28 45 0 0 0
|
||||
28 27 1 0 0
|
||||
28 32 1 0 0
|
||||
28 7 0 -1 0
|
||||
28 12 0 -1 0
|
||||
28 24 0 -1 -1
|
||||
28 44 0 -1 -1
|
||||
29 13 0 0 0
|
||||
29 17 0 0 0
|
||||
29 25 0 0 0
|
||||
29 45 0 0 0
|
||||
29 32 1 0 0
|
||||
29 34 1 0 0
|
||||
29 12 0 -1 0
|
||||
29 30 0 -1 0
|
||||
30 26 0 0 0
|
||||
30 46 0 0 0
|
||||
30 9 0 1 0
|
||||
30 14 0 1 0
|
||||
30 18 0 1 0
|
||||
30 29 0 1 0
|
||||
30 31 0 1 0
|
||||
30 35 0 1 0
|
||||
31 10 0 0 0
|
||||
31 15 0 0 0
|
||||
31 19 0 0 1
|
||||
31 36 0 0 1
|
||||
31 30 0 -1 0
|
||||
31 47 0 -1 0
|
||||
31 27 1 0 1
|
||||
31 32 1 0 1
|
||||
32 33 0 0 0
|
||||
32 48 0 0 0
|
||||
32 11 -1 0 0
|
||||
32 16 -1 0 0
|
||||
32 20 -1 0 0
|
||||
32 28 -1 0 0
|
||||
32 29 -1 0 0
|
||||
32 31 -1 0 -1
|
||||
33 32 0 0 0
|
||||
33 34 0 0 0
|
||||
33 37 0 0 0
|
||||
33 49 0 0 0
|
||||
33 17 -1 0 0
|
||||
33 36 -1 0 0
|
||||
33 45 -1 0 0
|
||||
33 54 -1 0 0
|
||||
34 33 0 0 0
|
||||
34 50 0 0 0
|
||||
34 55 0 0 1
|
||||
34 18 -1 0 0
|
||||
34 29 -1 0 0
|
||||
34 35 -1 0 0
|
||||
34 38 -1 0 0
|
||||
34 46 -1 -1 0
|
||||
35 39 1 1 1
|
||||
35 56 1 1 1
|
||||
35 34 1 0 0
|
||||
35 51 1 0 0
|
||||
35 19 0 0 1
|
||||
35 36 0 0 1
|
||||
35 30 0 -1 0
|
||||
35 47 0 -1 0
|
||||
36 20 0 0 0
|
||||
36 33 1 0 0
|
||||
36 48 1 0 0
|
||||
36 52 1 0 0
|
||||
36 53 1 0 0
|
||||
36 31 0 0 -1
|
||||
36 35 0 0 -1
|
||||
36 40 1 1 0
|
||||
37 33 0 0 0
|
||||
37 53 0 0 0
|
||||
37 58 0 0 0
|
||||
37 40 0 1 0
|
||||
37 41 0 1 0
|
||||
37 20 -1 0 0
|
||||
37 21 -1 0 0
|
||||
37 38 -1 0 0
|
||||
38 17 0 0 0
|
||||
38 22 0 0 0
|
||||
38 54 0 0 0
|
||||
38 59 0 0 0
|
||||
38 39 1 1 1
|
||||
38 42 1 1 1
|
||||
38 34 1 0 0
|
||||
38 37 1 0 0
|
||||
39 40 0 0 0
|
||||
39 60 0 0 0
|
||||
39 55 0 -1 0
|
||||
39 18 -1 -1 -1
|
||||
39 23 -1 -1 -1
|
||||
39 35 -1 -1 -1
|
||||
39 38 -1 -1 -1
|
||||
39 43 -1 -1 -1
|
||||
40 39 0 0 0
|
||||
40 56 0 0 0
|
||||
40 37 0 -1 0
|
||||
40 57 0 -1 0
|
||||
40 24 -1 -1 -1
|
||||
40 44 -1 -1 -1
|
||||
40 19 -1 -1 0
|
||||
40 36 -1 -1 0
|
||||
41 42 0 0 1
|
||||
41 62 0 0 1
|
||||
41 37 0 -1 0
|
||||
41 57 0 -1 0
|
||||
41 25 -1 0 0
|
||||
41 45 -1 0 0
|
||||
41 24 -1 -1 -1
|
||||
41 44 -1 -1 -1
|
||||
42 63 0 0 0
|
||||
42 41 0 0 -1
|
||||
42 21 -1 -1 -1
|
||||
42 26 -1 -1 -1
|
||||
42 38 -1 -1 -1
|
||||
42 43 -1 -1 -1
|
||||
42 46 -1 -1 -1
|
||||
42 58 0 -1 -1
|
||||
43 22 0 0 0
|
||||
43 44 0 0 0
|
||||
43 47 0 0 0
|
||||
43 59 0 0 0
|
||||
43 27 1 1 1
|
||||
43 39 1 1 1
|
||||
43 42 1 1 1
|
||||
43 64 1 1 1
|
||||
44 23 0 0 0
|
||||
44 43 0 0 0
|
||||
44 40 1 1 1
|
||||
44 41 1 1 1
|
||||
44 48 1 1 1
|
||||
44 60 1 1 1
|
||||
44 61 1 1 1
|
||||
44 28 0 1 1
|
||||
45 28 0 0 0
|
||||
45 29 0 0 0
|
||||
45 33 1 0 0
|
||||
45 41 1 0 0
|
||||
45 48 1 0 0
|
||||
45 50 1 0 0
|
||||
45 61 1 0 0
|
||||
45 46 0 -1 0
|
||||
46 30 0 0 0
|
||||
46 47 0 0 0
|
||||
46 42 1 1 1
|
||||
46 62 1 1 1
|
||||
46 25 0 1 0
|
||||
46 45 0 1 0
|
||||
46 34 1 1 0
|
||||
46 51 1 1 0
|
||||
47 26 0 0 0
|
||||
47 43 0 0 0
|
||||
47 46 0 0 0
|
||||
47 48 1 1 1
|
||||
47 52 1 1 1
|
||||
47 63 1 1 1
|
||||
47 31 0 1 0
|
||||
47 35 0 1 0
|
||||
48 27 0 0 0
|
||||
48 32 0 0 0
|
||||
48 49 0 0 0
|
||||
48 64 0 0 0
|
||||
48 36 -1 0 0
|
||||
48 45 -1 0 0
|
||||
48 44 -1 -1 -1
|
||||
48 47 -1 -1 -1
|
||||
49 1 0 0 0
|
||||
49 6 0 0 0
|
||||
49 33 0 0 0
|
||||
49 48 0 0 0
|
||||
49 50 0 0 0
|
||||
49 52 0 0 0
|
||||
49 53 0 0 0
|
||||
49 61 0 0 0
|
||||
50 2 0 0 0
|
||||
50 34 0 0 0
|
||||
50 49 0 0 0
|
||||
50 51 0 0 0
|
||||
50 7 0 0 1
|
||||
50 62 0 0 1
|
||||
50 45 -1 0 0
|
||||
50 54 -1 0 0
|
||||
51 50 0 0 0
|
||||
51 3 0 0 1
|
||||
51 8 0 0 1
|
||||
51 52 0 0 1
|
||||
51 55 0 0 1
|
||||
51 63 0 0 1
|
||||
51 35 -1 0 0
|
||||
51 46 -1 -1 0
|
||||
52 4 0 0 0
|
||||
52 5 0 0 0
|
||||
52 49 0 0 0
|
||||
52 64 0 0 0
|
||||
52 56 0 1 0
|
||||
52 51 0 0 -1
|
||||
52 36 -1 0 0
|
||||
52 47 -1 -1 -1
|
||||
53 5 0 0 0
|
||||
53 37 0 0 0
|
||||
53 49 0 0 0
|
||||
53 57 0 0 0
|
||||
53 10 0 1 0
|
||||
53 56 0 1 0
|
||||
53 36 -1 0 0
|
||||
53 54 -1 0 0
|
||||
54 38 0 0 0
|
||||
54 11 1 1 1
|
||||
54 6 1 0 0
|
||||
54 33 1 0 0
|
||||
54 50 1 0 0
|
||||
54 53 1 0 0
|
||||
54 58 1 0 0
|
||||
54 55 1 0 1
|
||||
55 7 0 0 0
|
||||
55 12 0 0 0
|
||||
55 39 0 1 0
|
||||
55 56 0 1 0
|
||||
55 34 0 0 -1
|
||||
55 51 0 0 -1
|
||||
55 54 -1 0 -1
|
||||
55 59 -1 0 -1
|
||||
56 9 0 0 0
|
||||
56 40 0 0 0
|
||||
56 60 0 0 0
|
||||
56 8 0 -1 0
|
||||
56 52 0 -1 0
|
||||
56 53 0 -1 0
|
||||
56 55 0 -1 0
|
||||
56 35 -1 -1 -1
|
||||
57 53 0 0 0
|
||||
57 58 0 0 0
|
||||
57 9 0 1 0
|
||||
57 14 0 1 0
|
||||
57 40 0 1 0
|
||||
57 41 0 1 0
|
||||
57 60 0 1 0
|
||||
57 61 0 1 0
|
||||
58 37 0 0 0
|
||||
58 57 0 0 0
|
||||
58 10 0 1 0
|
||||
58 15 0 1 0
|
||||
58 54 -1 0 0
|
||||
58 59 -1 0 0
|
||||
58 42 0 1 1
|
||||
58 62 0 1 1
|
||||
59 38 0 0 0
|
||||
59 43 0 0 0
|
||||
59 11 1 1 1
|
||||
59 16 1 1 1
|
||||
59 60 1 1 1
|
||||
59 63 1 1 1
|
||||
59 58 1 0 0
|
||||
59 55 1 0 1
|
||||
60 13 0 0 0
|
||||
60 39 0 0 0
|
||||
60 56 0 0 0
|
||||
60 64 0 0 0
|
||||
60 12 0 -1 0
|
||||
60 57 0 -1 0
|
||||
60 44 -1 -1 -1
|
||||
60 59 -1 -1 -1
|
||||
61 2 0 0 0
|
||||
61 13 0 0 0
|
||||
61 49 0 0 0
|
||||
61 64 0 0 0
|
||||
61 62 0 0 1
|
||||
61 57 0 -1 0
|
||||
61 45 -1 0 0
|
||||
61 44 -1 -1 -1
|
||||
62 3 0 0 0
|
||||
62 63 0 0 0
|
||||
62 14 0 0 -1
|
||||
62 41 0 0 -1
|
||||
62 50 0 0 -1
|
||||
62 61 0 0 -1
|
||||
62 46 -1 -1 -1
|
||||
62 58 0 -1 -1
|
||||
63 4 0 0 0
|
||||
63 42 0 0 0
|
||||
63 62 0 0 0
|
||||
63 64 0 0 0
|
||||
63 15 0 0 -1
|
||||
63 51 0 0 -1
|
||||
63 47 -1 -1 -1
|
||||
63 59 -1 -1 -1
|
||||
64 1 0 0 0
|
||||
64 16 0 0 0
|
||||
64 48 0 0 0
|
||||
64 52 0 0 0
|
||||
64 60 0 0 0
|
||||
64 61 0 0 0
|
||||
64 63 0 0 0
|
||||
64 43 -1 -1 -1
|
||||
end nnkpts
|
||||
|
||||
begin exclude_bands
|
||||
0
|
||||
end exclude_bands
|
|
@ -0,0 +1,96 @@
|
|||
num_wann = 4
|
||||
num_iter = 20
|
||||
|
||||
begin atoms_frac
|
||||
C -0.2500 -0.250 -0.25000
|
||||
C 0.00000 0.0000 0.000000
|
||||
end atoms_frac
|
||||
|
||||
begin projections
|
||||
f=0.0,0.0,0.0:s
|
||||
f=0.0,0.0,0.5:s
|
||||
f=0.0,0.5,0.0:s
|
||||
f=0.5,0.0,0.0:s
|
||||
end projections
|
||||
|
||||
#begin unit_cell_cart
|
||||
#-1.613990 0.000000 1.613990
|
||||
# 0.000000 1.613990 1.613990
|
||||
#-1.613990 1.613990 0.000000
|
||||
#end unit_cell_cart
|
||||
|
||||
begin unit_cell_cart
|
||||
bohr
|
||||
-3.050 0.000 3.050
|
||||
0.000 3.050 3.050
|
||||
-3.050 3.050 0.000
|
||||
end_unit_cell_cart
|
||||
|
||||
mp_grid : 4 4 4
|
||||
|
||||
begin kpoints
|
||||
0.000000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.750000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
-0.750000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
-0.750000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 -0.750000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.750000000000000 0.0156250000
|
||||
0.500000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.750000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.750000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.750000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
end kpoints
|
|
@ -0,0 +1,495 @@
|
|||
|
||||
+---------------------------------------------------+
|
||||
| |
|
||||
| WANNIER90 |
|
||||
| |
|
||||
+---------------------------------------------------+
|
||||
| |
|
||||
| Welcome to the Maximally-Localized |
|
||||
| Generalized Wannier Functions code |
|
||||
| http://www.wannier.org |
|
||||
| |
|
||||
| Wannier90 v2.x Authors: |
|
||||
| Arash A. Mostofi (Imperial College London) |
|
||||
| Giovanni Pizzi (EPFL) |
|
||||
| Ivo Souza (Universidad del Pais Vasco) |
|
||||
| Jonathan R. Yates (University of Oxford) |
|
||||
| |
|
||||
| Wannier90 Contributors: |
|
||||
| Young-Su Lee (KIST, S. Korea) |
|
||||
| Matthew Shelley (Imperial College London) |
|
||||
| Nicolas Poilvert (Penn State University) |
|
||||
| Raffaello Bianco (Paris 6 and CNRS) |
|
||||
| Gabriele Sclauzero (ETH Zurich) |
|
||||
| David Strubbe (MIT, USA) |
|
||||
| Rei Sakuma (Lund University, Sweden) |
|
||||
| Yusuke Nomura (U. Tokyo, Japan) |
|
||||
| Takashi Koretsune (Riken, Japan) |
|
||||
| Yoshiro Nohara (ASMS Co. Ltd., Japan) |
|
||||
| Ryotaro Arita (Riken, Japan) |
|
||||
| Lorenzo Paulatto (UPMC Paris) |
|
||||
| Florian Thole (ETH Zurich) |
|
||||
| Pablo Garcia Fernandez (Unican, Spain) |
|
||||
| Dominik Gresch (ETH Zurich) |
|
||||
| Samuel Ponce (University of Oxford) |
|
||||
| Marco Gibertini (EPFL) |
|
||||
| Christian Stieger (ETHZ, CH) |
|
||||
| Stepan Tsirkin (Universidad del Pais Vasco) |
|
||||
| |
|
||||
| Wannier77 Authors: |
|
||||
| Nicola Marzari (EPFL) |
|
||||
| Ivo Souza (Universidad del Pais Vasco) |
|
||||
| David Vanderbilt (Rutgers University) |
|
||||
| |
|
||||
| Please cite |
|
||||
| |
|
||||
| [ref] "An updated version of Wannier90: |
|
||||
| A Tool for Obtaining Maximally Localised |
|
||||
| Wannier Functions", A. A. Mostofi, |
|
||||
| J. R. Yates, G. Pizzi, Y. S. Lee, |
|
||||
| I. Souza, D. Vanderbilt and N. Marzari, |
|
||||
| Comput. Phys. Commun. 185, 2309 (2014) |
|
||||
| http://dx.doi.org/10.1016/j.cpc.2014.05.003|
|
||||
| |
|
||||
| in any publications arising from the use of |
|
||||
| this code. For the method please cite |
|
||||
| |
|
||||
| [ref] "Maximally Localized Generalised Wannier |
|
||||
| Functions for Composite Energy Bands" |
|
||||
| N. Marzari and D. Vanderbilt |
|
||||
| Phys. Rev. B 56 12847 (1997) |
|
||||
| |
|
||||
| [ref] "Maximally Localized Wannier Functions |
|
||||
| for Entangled Energy Bands" |
|
||||
| I. Souza, N. Marzari and D. Vanderbilt |
|
||||
| Phys. Rev. B 65 035109 (2001) |
|
||||
| |
|
||||
| |
|
||||
| Copyright (c) 1996-2017 |
|
||||
| Arash A. Mostofi, Jonathan R. Yates, |
|
||||
| Young-Su Lee, Giovanni Pizzi, Ivo Souza, |
|
||||
| David Vanderbilt and Nicola Marzari |
|
||||
| |
|
||||
| Release: 2.1.0 13th January 2017 |
|
||||
| |
|
||||
| This program is free software; you can |
|
||||
| redistribute it and/or modify it under the terms |
|
||||
| of the GNU General Public License as published by |
|
||||
| the Free Software Foundation; either version 2 of |
|
||||
| the License, or (at your option) any later version|
|
||||
| |
|
||||
| This program is distributed in the hope that it |
|
||||
| will be useful, but WITHOUT ANY WARRANTY; without |
|
||||
| even the implied warranty of MERCHANTABILITY or |
|
||||
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||||
| General Public License for more details. |
|
||||
| |
|
||||
| You should have received a copy of the GNU General|
|
||||
| Public License along with this program; if not, |
|
||||
| write to the Free Software Foundation, Inc., |
|
||||
| 675 Mass Ave, Cambridge, MA 02139, USA. |
|
||||
| |
|
||||
+---------------------------------------------------+
|
||||
| Execution started on 4Apr2018 at 13:09:13 |
|
||||
+---------------------------------------------------+
|
||||
|
||||
******************************************************************************
|
||||
* -> Using CODATA 2006 constant values *
|
||||
* (http://physics.nist.gov/cuu/Constants/index.html) *
|
||||
* -> Using Bohr value from CODATA *
|
||||
******************************************************************************
|
||||
|
||||
|
||||
------
|
||||
SYSTEM
|
||||
------
|
||||
|
||||
Lattice Vectors (Ang)
|
||||
a_1 -1.613990 0.000000 1.613990
|
||||
a_2 0.000000 1.613990 1.613990
|
||||
a_3 -1.613990 1.613990 0.000000
|
||||
|
||||
Unit Cell Volume: 8.40878 (Ang^3)
|
||||
|
||||
Reciprocal-Space Vectors (Ang^-1)
|
||||
b_1 -1.946475 -1.946475 1.946475
|
||||
b_2 1.946475 1.946475 1.946475
|
||||
b_3 -1.946475 1.946475 -1.946475
|
||||
|
||||
*----------------------------------------------------------------------------*
|
||||
| Site Fractional Coordinate Cartesian Coordinate (Ang) |
|
||||
+----------------------------------------------------------------------------+
|
||||
| C 1 -0.25000 -0.25000 -0.25000 | 0.80700 -0.80700 -0.80700 |
|
||||
| C 2 0.00000 0.00000 0.00000 | 0.00000 0.00000 0.00000 |
|
||||
*----------------------------------------------------------------------------*
|
||||
|
||||
------------
|
||||
K-POINT GRID
|
||||
------------
|
||||
|
||||
Grid size = 4 x 4 x 4 Total points = 64
|
||||
|
||||
|
||||
*---------------------------------- MAIN ------------------------------------*
|
||||
| Number of Wannier Functions : 4 |
|
||||
| Number of input Bloch states : 4 |
|
||||
| Output verbosity (1=low, 5=high) : 1 |
|
||||
| Timing Level (1=low, 5=high) : 1 |
|
||||
| Optimisation (0=memory, 3=speed) : 3 |
|
||||
| Length Unit : Ang |
|
||||
| Post-processing setup (write *.nnkp) : F |
|
||||
| Using Gamma-only branch of algorithms : F |
|
||||
*----------------------------------------------------------------------------*
|
||||
*------------------------------- WANNIERISE ---------------------------------*
|
||||
| Total number of iterations : 20 |
|
||||
| Number of CG steps before reset : 5 |
|
||||
| Trial step length for line search : 2.000 |
|
||||
| Convergence tolerence : 0.100E-09 |
|
||||
| Convergence window : -1 |
|
||||
| Iterations between writing output : 1 |
|
||||
| Iterations between backing up to disk : 100 |
|
||||
| Write r^2_nm to file : F |
|
||||
| Write xyz WF centres to file : F |
|
||||
| Write on-site energies <0n|H|0n> to file : F |
|
||||
| Use guiding centre to control phases : F |
|
||||
| Use phases for initial projections : F |
|
||||
*----------------------------------------------------------------------------*
|
||||
Time to read parameters 0.003 (sec)
|
||||
|
||||
*---------------------------------- K-MESH ----------------------------------*
|
||||
+----------------------------------------------------------------------------+
|
||||
| Distance to Nearest-Neighbour Shells |
|
||||
| ------------------------------------ |
|
||||
| Shell Distance (Ang^-1) Multiplicity |
|
||||
| ----- ----------------- ------------ |
|
||||
| 1 0.842849 8 |
|
||||
| 2 0.973238 6 |
|
||||
| 3 1.376366 12 |
|
||||
| 4 1.613932 24 |
|
||||
| 5 1.685697 8 |
|
||||
| 6 1.946475 6 |
|
||||
| 7 2.121122 24 |
|
||||
| 8 2.176226 24 |
|
||||
| 9 2.383936 24 |
|
||||
| 10 2.528546 32 |
|
||||
| 11 2.752732 12 |
|
||||
| 12 2.878876 48 |
|
||||
+----------------------------------------------------------------------------+
|
||||
| The b-vectors are chosen automatically |
|
||||
| The following shells are used: 1 |
|
||||
+----------------------------------------------------------------------------+
|
||||
| Shell # Nearest-Neighbours |
|
||||
| ----- -------------------- |
|
||||
| 1 8 |
|
||||
+----------------------------------------------------------------------------+
|
||||
| Completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)] |
|
||||
+----------------------------------------------------------------------------+
|
||||
| b_k Vectors (Ang^-1) and Weights (Ang^2) |
|
||||
| ---------------------------------------- |
|
||||
| No. b_k(x) b_k(y) b_k(z) w_b |
|
||||
| --- -------------------------------- -------- |
|
||||
| 1 -0.486619 0.486619 -0.486619 0.527876 |
|
||||
| 2 0.486619 -0.486619 0.486619 0.527876 |
|
||||
| 3 0.486619 0.486619 0.486619 0.527876 |
|
||||
| 4 -0.486619 -0.486619 -0.486619 0.527876 |
|
||||
| 5 -0.486619 -0.486619 0.486619 0.527876 |
|
||||
| 6 -0.486619 0.486619 0.486619 0.527876 |
|
||||
| 7 0.486619 0.486619 -0.486619 0.527876 |
|
||||
| 8 0.486619 -0.486619 -0.486619 0.527876 |
|
||||
+----------------------------------------------------------------------------+
|
||||
| b_k Directions (Ang^-1) |
|
||||
| ----------------------- |
|
||||
| No. x y z |
|
||||
| --- -------------------------------- |
|
||||
| 1 -0.486619 0.486619 -0.486619 |
|
||||
| 2 0.486619 0.486619 0.486619 |
|
||||
| 3 -0.486619 -0.486619 0.486619 |
|
||||
| 4 -0.486619 0.486619 0.486619 |
|
||||
+----------------------------------------------------------------------------+
|
||||
|
||||
*============================================================================*
|
||||
| MEMORY ESTIMATE |
|
||||
| Maximum RAM allocated during each phase of the calculation |
|
||||
*============================================================================*
|
||||
| Wannierise: 0.42 Mb |
|
||||
| plot_wannier: 0.42 Mb |
|
||||
*----------------------------------------------------------------------------*
|
||||
|
||||
Starting a new Wannier90 calculation ...
|
||||
|
||||
Time to get kmesh 0.019 (sec)
|
||||
|
||||
Reading overlaps from diamond.sa.mmn : Created on 4Apr2018 at 13: 9:12
|
||||
|
||||
Reading projections from diamond.sa.amn : Created on 4Apr2018 at 13: 9:12
|
||||
|
||||
Time to read overlaps 0.007 (sec)
|
||||
|
||||
Writing checkpoint file diamond.sa.chk... done
|
||||
|
||||
|
||||
*------------------------------- WANNIERISE ---------------------------------*
|
||||
+--------------------------------------------------------------------+<-- CONV
|
||||
| Iter Delta Spread RMS Gradient Spread (Ang^2) Time |<-- CONV
|
||||
+--------------------------------------------------------------------+<-- CONV
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
Initial State
|
||||
WF centre and spread 1 ( 0.000027, -0.000027, -0.000027 ) 4.43725787
|
||||
WF centre and spread 2 ( -0.549747, 0.549747, -0.291910 ) 1.31867548
|
||||
WF centre and spread 3 ( 0.291910, 0.549747, 0.549747 ) 1.31867547
|
||||
WF centre and spread 4 ( -0.549747, -0.291910, 0.549747 ) 1.31867549
|
||||
Sum of centres and spreads ( -0.807557, 0.807557, 0.807557 ) 8.39328431
|
||||
|
||||
0 0.839E+01 0.0000000000 8.3932843051 0.03 <-- CONV
|
||||
O_D= 3.6665969 O_OD= 2.7705066 O_TOT= 8.3932843 <-- SPRD
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 1
|
||||
WF centre and spread 1 ( 0.204771, -0.204771, -0.204771 ) 3.53852648
|
||||
WF centre and spread 2 ( -0.505483, 0.505483, -0.286522 ) 1.72972542
|
||||
WF centre and spread 3 ( 0.286522, 0.505483, 0.505483 ) 1.72972542
|
||||
WF centre and spread 4 ( -0.505483, -0.286522, 0.505483 ) 1.72972542
|
||||
Sum of centres and spreads ( -0.519673, 0.519673, 0.519673 ) 8.72770275
|
||||
|
||||
1 0.334E+00 1.6284301958 8.7277027483 0.03 <-- CONV
|
||||
O_D= 3.0617576 O_OD= 3.7097644 O_TOT= 8.7277027 <-- SPRD
|
||||
Delta: O_D= -0.6048393E+00 O_OD= 0.9392578E+00 O_TOT= 0.3344184E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 2
|
||||
WF centre and spread 1 ( 0.125268, -0.125268, -0.125268 ) 2.97793820
|
||||
WF centre and spread 2 ( -0.511701, 0.511701, -0.286682 ) 1.69392132
|
||||
WF centre and spread 3 ( 0.286682, 0.511701, 0.511701 ) 1.69392132
|
||||
WF centre and spread 4 ( -0.511701, -0.286682, 0.511701 ) 1.69392130
|
||||
Sum of centres and spreads ( -0.611452, 0.611452, 0.611452 ) 8.05970214
|
||||
|
||||
2 -0.668E+00 3.5979292733 8.0597021373 0.04 <-- CONV
|
||||
O_D= 2.4134866 O_OD= 3.6900347 O_TOT= 8.0597021 <-- SPRD
|
||||
Delta: O_D= -0.6482709E+00 O_OD= -0.1972967E-01 O_TOT= -0.6680006E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 3
|
||||
WF centre and spread 1 ( 0.058824, -0.058824, -0.058824 ) 1.86261972
|
||||
WF centre and spread 2 ( -0.551526, 0.551526, -0.299851 ) 1.64892917
|
||||
WF centre and spread 3 ( 0.299851, 0.551526, 0.551526 ) 1.64892917
|
||||
WF centre and spread 4 ( -0.551526, -0.299851, 0.551526 ) 1.64892916
|
||||
Sum of centres and spreads ( -0.744378, 0.744378, 0.744378 ) 6.80940722
|
||||
|
||||
3 -0.125E+01 1.6002325940 6.8094072210 0.04 <-- CONV
|
||||
O_D= 1.3661405 O_OD= 3.4870859 O_TOT= 6.8094072 <-- SPRD
|
||||
Delta: O_D= -0.1047346E+01 O_OD= -0.2029488E+00 O_TOT= -0.1250295E+01 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 4
|
||||
WF centre and spread 1 ( 0.063939, -0.063939, -0.063939 ) 1.74756824
|
||||
WF centre and spread 2 ( -0.543452, 0.543452, -0.275798 ) 1.49135279
|
||||
WF centre and spread 3 ( 0.275798, 0.543452, 0.543452 ) 1.49135280
|
||||
WF centre and spread 4 ( -0.543452, -0.275798, 0.543452 ) 1.49135278
|
||||
Sum of centres and spreads ( -0.747167, 0.747167, 0.747167 ) 6.22162662
|
||||
|
||||
4 -0.588E+00 0.7356446104 6.2216266170 0.04 <-- CONV
|
||||
O_D= 1.0871024 O_OD= 3.1783434 O_TOT= 6.2216266 <-- SPRD
|
||||
Delta: O_D= -0.2790381E+00 O_OD= -0.3087425E+00 O_TOT= -0.5877806E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 5
|
||||
WF centre and spread 1 ( 0.085389, -0.085389, -0.085389 ) 1.87128276
|
||||
WF centre and spread 2 ( -0.520705, 0.520705, -0.269035 ) 1.34014245
|
||||
WF centre and spread 3 ( 0.269035, 0.520705, 0.520705 ) 1.34014245
|
||||
WF centre and spread 4 ( -0.520705, -0.269035, 0.520705 ) 1.34014246
|
||||
Sum of centres and spreads ( -0.686986, 0.686986, 0.686986 ) 5.89171012
|
||||
|
||||
5 -0.330E+00 0.4296324370 5.8917101189 0.04 <-- CONV
|
||||
O_D= 0.9390907 O_OD= 2.9964386 O_TOT= 5.8917101 <-- SPRD
|
||||
Delta: O_D= -0.1480116E+00 O_OD= -0.1819049E+00 O_TOT= -0.3299165E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 6
|
||||
WF centre and spread 1 ( 0.130287, -0.130287, -0.130287 ) 1.83711150
|
||||
WF centre and spread 2 ( -0.496854, 0.496854, -0.273601 ) 1.31405587
|
||||
WF centre and spread 3 ( 0.273601, 0.496854, 0.496854 ) 1.31405587
|
||||
WF centre and spread 4 ( -0.496854, -0.273601, 0.496854 ) 1.31405586
|
||||
Sum of centres and spreads ( -0.589820, 0.589820, 0.589820 ) 5.77927910
|
||||
|
||||
6 -0.112E+00 0.3604439505 5.7792791033 0.05 <-- CONV
|
||||
O_D= 0.8891853 O_OD= 2.9339131 O_TOT= 5.7792791 <-- SPRD
|
||||
Delta: O_D= -0.4990548E-01 O_OD= -0.6252553E-01 O_TOT= -0.1124310E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 7
|
||||
WF centre and spread 1 ( 0.162544, -0.162544, -0.162544 ) 1.85330454
|
||||
WF centre and spread 2 ( -0.475648, 0.475648, -0.273418 ) 1.27346604
|
||||
WF centre and spread 3 ( 0.273418, 0.475648, 0.475648 ) 1.27346603
|
||||
WF centre and spread 4 ( -0.475648, -0.273418, 0.475648 ) 1.27346605
|
||||
Sum of centres and spreads ( -0.515334, 0.515334, 0.515334 ) 5.67370266
|
||||
|
||||
7 -0.106E+00 0.4634553041 5.6737026622 0.05 <-- CONV
|
||||
O_D= 0.8373407 O_OD= 2.8801812 O_TOT= 5.6737027 <-- SPRD
|
||||
Delta: O_D= -0.5184457E-01 O_OD= -0.5373187E-01 O_TOT= -0.1055764E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 8
|
||||
WF centre and spread 1 ( 0.136896, -0.136896, -0.136896 ) 1.71875238
|
||||
WF centre and spread 2 ( -0.482512, 0.482512, -0.267594 ) 1.24218759
|
||||
WF centre and spread 3 ( 0.267594, 0.482512, 0.482512 ) 1.24218759
|
||||
WF centre and spread 4 ( -0.482512, -0.267594, 0.482512 ) 1.24218758
|
||||
Sum of centres and spreads ( -0.560534, 0.560534, 0.560534 ) 5.44531513
|
||||
|
||||
8 -0.228E+00 0.5491279535 5.4453151305 0.05 <-- CONV
|
||||
O_D= 0.6957122 O_OD= 2.7934222 O_TOT= 5.4453151 <-- SPRD
|
||||
Delta: O_D= -0.1416285E+00 O_OD= -0.8675903E-01 O_TOT= -0.2283875E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 9
|
||||
WF centre and spread 1 ( 0.173766, -0.173766, -0.173766 ) 1.50121927
|
||||
WF centre and spread 2 ( -0.473608, 0.473608, -0.286345 ) 1.24033583
|
||||
WF centre and spread 3 ( 0.286345, 0.473608, 0.473608 ) 1.24033583
|
||||
WF centre and spread 4 ( -0.473608, -0.286345, 0.473608 ) 1.24033581
|
||||
Sum of centres and spreads ( -0.487104, 0.487104, 0.487104 ) 5.22222674
|
||||
|
||||
9 -0.223E+00 0.3175369883 5.2222267438 0.05 <-- CONV
|
||||
O_D= 0.5793292 O_OD= 2.6867167 O_TOT= 5.2222267 <-- SPRD
|
||||
Delta: O_D= -0.1163830E+00 O_OD= -0.1067054E+00 O_TOT= -0.2230884E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 10
|
||||
WF centre and spread 1 ( 0.306890, -0.306890, -0.306890 ) 1.48423957
|
||||
WF centre and spread 2 ( -0.432484, 0.432484, -0.340683 ) 1.19338261
|
||||
WF centre and spread 3 ( 0.340683, 0.432484, 0.432484 ) 1.19338261
|
||||
WF centre and spread 4 ( -0.432484, -0.340683, 0.432484 ) 1.19338261
|
||||
Sum of centres and spreads ( -0.217393, 0.217393, 0.217393 ) 5.06438740
|
||||
|
||||
10 -0.158E+00 0.2586814386 5.0643873998 0.06 <-- CONV
|
||||
O_D= 0.5177640 O_OD= 2.5904427 O_TOT= 5.0643874 <-- SPRD
|
||||
Delta: O_D= -0.6156527E-01 O_OD= -0.9627407E-01 O_TOT= -0.1578393E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 11
|
||||
WF centre and spread 1 ( 0.285456, -0.285456, -0.285456 ) 1.24761006
|
||||
WF centre and spread 2 ( -0.439794, 0.439794, -0.340167 ) 1.17183857
|
||||
WF centre and spread 3 ( 0.340167, 0.439794, 0.439794 ) 1.17183858
|
||||
WF centre and spread 4 ( -0.439794, -0.340167, 0.439794 ) 1.17183854
|
||||
Sum of centres and spreads ( -0.253965, 0.253965, 0.253965 ) 4.76312575
|
||||
|
||||
11 -0.301E+00 0.5254724584 4.7631257481 0.06 <-- CONV
|
||||
O_D= 0.3013714 O_OD= 2.5055735 O_TOT= 4.7631257 <-- SPRD
|
||||
Delta: O_D= -0.2163925E+00 O_OD= -0.8486913E-01 O_TOT= -0.3012617E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 12
|
||||
WF centre and spread 1 ( 0.313069, -0.313069, -0.313069 ) 1.21013168
|
||||
WF centre and spread 2 ( -0.428441, 0.428441, -0.342864 ) 1.14377464
|
||||
WF centre and spread 3 ( 0.342864, 0.428441, 0.428441 ) 1.14377459
|
||||
WF centre and spread 4 ( -0.428441, -0.342864, 0.428441 ) 1.14377476
|
||||
Sum of centres and spreads ( -0.200949, 0.200949, 0.200949 ) 4.64145566
|
||||
|
||||
12 -0.122E+00 0.2526653626 4.6414556590 0.06 <-- CONV
|
||||
O_D= 0.2929037 O_OD= 2.3923712 O_TOT= 4.6414557 <-- SPRD
|
||||
Delta: O_D= -0.8467734E-02 O_OD= -0.1132024E+00 O_TOT= -0.1216701E+00 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 13
|
||||
WF centre and spread 1 ( 0.334945, -0.334945, -0.334945 ) 1.25302715
|
||||
WF centre and spread 2 ( -0.430096, 0.430096, -0.350949 ) 1.10595253
|
||||
WF centre and spread 3 ( 0.350949, 0.430096, 0.430096 ) 1.10595252
|
||||
WF centre and spread 4 ( -0.430096, -0.350949, 0.430096 ) 1.10595253
|
||||
Sum of centres and spreads ( -0.174298, 0.174298, 0.174298 ) 4.57088473
|
||||
|
||||
13 -0.706E-01 0.2178608261 4.5708847264 0.06 <-- CONV
|
||||
O_D= 0.2388816 O_OD= 2.3758223 O_TOT= 4.5708847 <-- SPRD
|
||||
Delta: O_D= -0.5402206E-01 O_OD= -0.1654887E-01 O_TOT= -0.7057093E-01 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 14
|
||||
WF centre and spread 1 ( 0.376035, -0.376035, -0.376035 ) 1.24459722
|
||||
WF centre and spread 2 ( -0.415792, 0.415792, -0.377852 ) 1.08127085
|
||||
WF centre and spread 3 ( 0.377852, 0.415792, 0.415792 ) 1.08127083
|
||||
WF centre and spread 4 ( -0.415792, -0.377852, 0.415792 ) 1.08127089
|
||||
Sum of centres and spreads ( -0.077697, 0.077697, 0.077697 ) 4.48840979
|
||||
|
||||
14 -0.825E-01 0.1635707296 4.4884097904 0.06 <-- CONV
|
||||
O_D= 0.1917575 O_OD= 2.3404715 O_TOT= 4.4884098 <-- SPRD
|
||||
Delta: O_D= -0.4712416E-01 O_OD= -0.3535077E-01 O_TOT= -0.8247494E-01 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 15
|
||||
WF centre and spread 1 ( 0.405496, -0.405496, -0.405496 ) 1.24436999
|
||||
WF centre and spread 2 ( -0.410944, 0.410944, -0.389076 ) 1.06502601
|
||||
WF centre and spread 3 ( 0.389076, 0.410944, 0.410944 ) 1.06502598
|
||||
WF centre and spread 4 ( -0.410944, -0.389076, 0.410944 ) 1.06502608
|
||||
Sum of centres and spreads ( -0.027316, 0.027316, 0.027316 ) 4.43944806
|
||||
|
||||
15 -0.490E-01 0.2125876456 4.4394480623 0.07 <-- CONV
|
||||
O_D= 0.1918637 O_OD= 2.2914036 O_TOT= 4.4394481 <-- SPRD
|
||||
Delta: O_D= 0.1061779E-03 O_OD= -0.4906791E-01 O_TOT= -0.4896173E-01 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 16
|
||||
WF centre and spread 1 ( 0.411086, -0.411086, -0.411086 ) 1.21833696
|
||||
WF centre and spread 2 ( -0.414395, 0.414395, -0.390957 ) 1.06559117
|
||||
WF centre and spread 3 ( 0.390957, 0.414395, 0.414395 ) 1.06559110
|
||||
WF centre and spread 4 ( -0.414395, -0.390957, 0.414395 ) 1.06559118
|
||||
Sum of centres and spreads ( -0.026746, 0.026746, 0.026746 ) 4.41511042
|
||||
|
||||
16 -0.243E-01 0.1345396535 4.4151104156 0.07 <-- CONV
|
||||
O_D= 0.1824862 O_OD= 2.2764434 O_TOT= 4.4151104 <-- SPRD
|
||||
Delta: O_D= -0.9377477E-02 O_OD= -0.1496017E-01 O_TOT= -0.2433765E-01 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 17
|
||||
WF centre and spread 1 ( 0.412512, -0.412511, -0.412512 ) 1.22174254
|
||||
WF centre and spread 2 ( -0.405708, 0.405708, -0.395452 ) 1.05941842
|
||||
WF centre and spread 3 ( 0.395452, 0.405708, 0.405708 ) 1.05941683
|
||||
WF centre and spread 4 ( -0.405708, -0.395452, 0.405708 ) 1.05941278
|
||||
Sum of centres and spreads ( -0.003452, 0.003452, 0.003452 ) 4.39999058
|
||||
|
||||
17 -0.151E-01 0.1429169251 4.3999905829 0.07 <-- CONV
|
||||
O_D= 0.1698923 O_OD= 2.2739175 O_TOT= 4.3999906 <-- SPRD
|
||||
Delta: O_D= -0.1259386E-01 O_OD= -0.2525972E-02 O_TOT= -0.1511983E-01 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 18
|
||||
WF centre and spread 1 ( 0.410959, -0.410959, -0.410959 ) 1.20464881
|
||||
WF centre and spread 2 ( -0.406461, 0.406467, -0.396806 ) 1.06311932
|
||||
WF centre and spread 3 ( 0.396808, 0.406468, 0.406460 ) 1.06293619
|
||||
WF centre and spread 4 ( -0.406465, -0.396815, 0.406463 ) 1.06245890
|
||||
Sum of centres and spreads ( -0.005159, 0.005160, 0.005158 ) 4.39316323
|
||||
|
||||
18 -0.683E-02 0.0894676660 4.3931632255 0.07 <-- CONV
|
||||
O_D= 0.1616994 O_OD= 2.2752831 O_TOT= 4.3931632 <-- SPRD
|
||||
Delta: O_D= -0.8192958E-02 O_OD= 0.1365601E-02 O_TOT= -0.6827357E-02 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 19
|
||||
WF centre and spread 1 ( 0.410961, -0.410965, -0.410959 ) 1.20380088
|
||||
WF centre and spread 2 ( -0.406752, 0.406754, -0.396628 ) 1.06143173
|
||||
WF centre and spread 3 ( 0.396628, 0.406754, 0.406752 ) 1.06143677
|
||||
WF centre and spread 4 ( -0.406753, -0.396627, 0.406752 ) 1.06145074
|
||||
Sum of centres and spreads ( -0.005917, 0.005916, 0.005917 ) 4.38812012
|
||||
|
||||
19 -0.504E-02 0.2489935220 4.3881201179 0.08 <-- CONV
|
||||
O_D= 0.1566784 O_OD= 2.2752609 O_TOT= 4.3881201 <-- SPRD
|
||||
Delta: O_D= -0.5020956E-02 O_OD= -0.2215130E-04 O_TOT= -0.5043108E-02 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Cycle: 20
|
||||
WF centre and spread 1 ( 0.411245, -0.411255, -0.411241 ) 1.18781228
|
||||
WF centre and spread 2 ( -0.411129, 0.411130, -0.393627 ) 1.06511399
|
||||
WF centre and spread 3 ( 0.393625, 0.411133, 0.411132 ) 1.06513174
|
||||
WF centre and spread 4 ( -0.411141, -0.393619, 0.411141 ) 1.06518839
|
||||
Sum of centres and spreads ( -0.017400, 0.017388, 0.017404 ) 4.38324640
|
||||
|
||||
20 -0.487E-02 0.0635725495 4.3832463969 0.08 <-- CONV
|
||||
O_D= 0.1521246 O_OD= 2.2749410 O_TOT= 4.3832464 <-- SPRD
|
||||
Delta: O_D= -0.4553768E-02 O_OD= -0.3199534E-03 O_TOT= -0.4873721E-02 <-- DLTA
|
||||
------------------------------------------------------------------------------
|
||||
Final State
|
||||
WF centre and spread 1 ( 0.411245, -0.411255, -0.411241 ) 1.18781228
|
||||
WF centre and spread 2 ( -0.411129, 0.411130, -0.393627 ) 1.06511399
|
||||
WF centre and spread 3 ( 0.393625, 0.411133, 0.411132 ) 1.06513174
|
||||
WF centre and spread 4 ( -0.411141, -0.393619, 0.411141 ) 1.06518839
|
||||
Sum of centres and spreads ( -0.017400, 0.017388, 0.017404 ) 4.38324640
|
||||
|
||||
Spreads (Ang^2) Omega I = 1.956180787
|
||||
================ Omega D = 0.152124643
|
||||
Omega OD = 2.274940966
|
||||
Final Spread (Ang^2) Omega Total = 4.383246397
|
||||
------------------------------------------------------------------------------
|
||||
Time for wannierise 0.048 (sec)
|
||||
|
||||
Writing checkpoint file diamond.sa.chk... done
|
||||
|
||||
Total Execution Time 0.078 (sec)
|
||||
|
||||
*===========================================================================*
|
||||
| TIMING INFORMATION |
|
||||
*===========================================================================*
|
||||
| Tag Ncalls Time (s)|
|
||||
|---------------------------------------------------------------------------|
|
||||
|kmesh: get : 1 0.019|
|
||||
|overlap: read : 1 0.007|
|
||||
|wann: main : 1 0.048|
|
||||
*---------------------------------------------------------------------------*
|
||||
|
||||
All done: wannier90 exiting
|
|
@ -0,0 +1,24 @@
|
|||
&control
|
||||
calculation = 'scf'
|
||||
restart_mode='from_scratch',
|
||||
prefix='di',
|
||||
pseudo_dir='/home/paulatto/espresso/pseudo',
|
||||
outdir='/home/paulatto/espresso/tempdir'
|
||||
/
|
||||
&system
|
||||
ibrav= 2, celldm(1) =6.1, nat= 2, ntyp= 1,
|
||||
ecutwfc =40.0,
|
||||
/
|
||||
&electrons
|
||||
diagonalization='david'
|
||||
mixing_mode = 'plain'
|
||||
mixing_beta = 0.7
|
||||
conv_thr = 1.0d-13
|
||||
/
|
||||
ATOMIC_SPECIES
|
||||
C 12.0 C.pz-vbc.UPF
|
||||
ATOMIC_POSITIONS {crystal}
|
||||
C -0.25 -0.25 -0.25
|
||||
C 0.0 0.0 0.0
|
||||
K_POINTS {automatic}
|
||||
4 4 4 0 0 0
|
|
@ -0,0 +1,307 @@
|
|||
|
||||
Program PWSCF v.6.2 starts on 4Apr2018 at 13: 9:11
|
||||
|
||||
This program is part of the open-source Quantum ESPRESSO suite
|
||||
for quantum simulation of materials; please cite
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
|
||||
URL http://www.quantum-espresso.org",
|
||||
in publications or presentations arising from this work. More details at
|
||||
http://www.quantum-espresso.org/quote
|
||||
|
||||
Parallel version (MPI), running on 4 processors
|
||||
|
||||
MPI processes distributed on 1 nodes
|
||||
R & G space division: proc/nbgrp/npool/nimage = 4
|
||||
Waiting for input...
|
||||
Reading input from standard input
|
||||
|
||||
Current dimensions of program PWSCF are:
|
||||
Max number of different atomic species (ntypx) = 10
|
||||
Max number of k-points (npk) = 40000
|
||||
Max angular momentum in pseudopotentials (lmaxx) = 3
|
||||
|
||||
Subspace diagonalization in iterative solution of the eigenvalue problem:
|
||||
a serial algorithm will be used
|
||||
|
||||
|
||||
Parallelization info
|
||||
--------------------
|
||||
sticks: dense smooth PW G-vecs: dense smooth PW
|
||||
Min 49 49 18 477 477 102
|
||||
Max 50 50 19 481 481 104
|
||||
Sum 199 199 73 1917 1917 411
|
||||
|
||||
|
||||
|
||||
bravais-lattice index = 2
|
||||
lattice parameter (alat) = 6.1000 a.u.
|
||||
unit-cell volume = 56.7452 (a.u.)^3
|
||||
number of atoms/cell = 2
|
||||
number of atomic types = 1
|
||||
number of electrons = 8.00
|
||||
number of Kohn-Sham states= 4
|
||||
kinetic-energy cutoff = 40.0000 Ry
|
||||
charge density cutoff = 160.0000 Ry
|
||||
convergence threshold = 1.0E-13
|
||||
mixing beta = 0.7000
|
||||
number of iterations used = 8 plain mixing
|
||||
Exchange-correlation = SLA PZ NOGX NOGC ( 1 1 0 0 0 0)
|
||||
|
||||
celldm(1)= 6.100000 celldm(2)= 0.000000 celldm(3)= 0.000000
|
||||
celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000
|
||||
|
||||
crystal axes: (cart. coord. in units of alat)
|
||||
a(1) = ( -0.500000 0.000000 0.500000 )
|
||||
a(2) = ( 0.000000 0.500000 0.500000 )
|
||||
a(3) = ( -0.500000 0.500000 0.000000 )
|
||||
|
||||
reciprocal axes: (cart. coord. in units 2 pi/alat)
|
||||
b(1) = ( -1.000000 -1.000000 1.000000 )
|
||||
b(2) = ( 1.000000 1.000000 1.000000 )
|
||||
b(3) = ( -1.000000 1.000000 -1.000000 )
|
||||
|
||||
|
||||
PseudoPot. # 1 for C read from file:
|
||||
/home/paulatto/espresso/pseudo/C.pz-vbc.UPF
|
||||
MD5 check sum: fba1ee73f85cf1e2c277927d28e132d1
|
||||
Pseudo is Norm-conserving, Zval = 4.0
|
||||
Generated by new atomic code, or converted to UPF format
|
||||
Using radial grid of 269 points, 1 beta functions with:
|
||||
l(1) = 0
|
||||
|
||||
atomic species valence mass pseudopotential
|
||||
C 4.00 12.00000 C ( 1.00)
|
||||
|
||||
24 Sym. Ops. (no inversion) found
|
||||
(note: 24 additional sym.ops. were found but ignored
|
||||
their fractional translations are incommensurate with FFT grid)
|
||||
|
||||
|
||||
Cartesian axes
|
||||
|
||||
site n. atom positions (alat units)
|
||||
1 C tau( 1) = ( 0.2500000 -0.2500000 -0.2500000 )
|
||||
2 C tau( 2) = ( 0.0000000 0.0000000 0.0000000 )
|
||||
|
||||
number of k points= 8
|
||||
cart. coord. in units 2pi/alat
|
||||
k( 1) = ( 0.0000000 0.0000000 0.0000000), wk = 0.0312500
|
||||
k( 2) = ( -0.2500000 0.2500000 -0.2500000), wk = 0.2500000
|
||||
k( 3) = ( 0.5000000 -0.5000000 0.5000000), wk = 0.1250000
|
||||
k( 4) = ( 0.0000000 0.5000000 0.0000000), wk = 0.1875000
|
||||
k( 5) = ( 0.7500000 -0.2500000 0.7500000), wk = 0.7500000
|
||||
k( 6) = ( 0.5000000 0.0000000 0.5000000), wk = 0.3750000
|
||||
k( 7) = ( 0.0000000 -1.0000000 0.0000000), wk = 0.0937500
|
||||
k( 8) = ( -0.5000000 -1.0000000 0.0000000), wk = 0.1875000
|
||||
|
||||
Dense grid: 1917 G-vectors FFT dimensions: ( 18, 18, 18)
|
||||
|
||||
Estimated max dynamical RAM per process > 0.40 MB
|
||||
|
||||
Estimated total dynamical RAM > 1.59 MB
|
||||
|
||||
Initial potential from superposition of free atoms
|
||||
|
||||
starting charge 7.99994, renormalised to 8.00000
|
||||
Starting wfc are 8 randomized atomic wfcs
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
Self-consistent Calculation
|
||||
|
||||
iteration # 1 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 1.00E-02, avg # of iterations = 2.0
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.55006813 Ry
|
||||
Harris-Foulkes estimate = -22.67182857 Ry
|
||||
estimated scf accuracy < 0.22234976 Ry
|
||||
|
||||
iteration # 2 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 2.78E-03, avg # of iterations = 1.9
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.56832257 Ry
|
||||
Harris-Foulkes estimate = -22.56950600 Ry
|
||||
estimated scf accuracy < 0.00321110 Ry
|
||||
|
||||
iteration # 3 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 4.01E-05, avg # of iterations = 2.1
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.56910458 Ry
|
||||
Harris-Foulkes estimate = -22.56911989 Ry
|
||||
estimated scf accuracy < 0.00007816 Ry
|
||||
|
||||
iteration # 4 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 9.77E-07, avg # of iterations = 2.2
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.56911888 Ry
|
||||
Harris-Foulkes estimate = -22.56912375 Ry
|
||||
estimated scf accuracy < 0.00000518 Ry
|
||||
|
||||
iteration # 5 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 6.48E-08, avg # of iterations = 2.1
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.56912003 Ry
|
||||
Harris-Foulkes estimate = -22.56912004 Ry
|
||||
estimated scf accuracy < 0.00000004 Ry
|
||||
|
||||
iteration # 6 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 4.94E-10, avg # of iterations = 2.9
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.56912005 Ry
|
||||
Harris-Foulkes estimate = -22.56912005 Ry
|
||||
estimated scf accuracy < 8.1E-10 Ry
|
||||
|
||||
iteration # 7 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 1.01E-11, avg # of iterations = 2.6
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.56912005 Ry
|
||||
Harris-Foulkes estimate = -22.56912005 Ry
|
||||
estimated scf accuracy < 1.3E-11 Ry
|
||||
|
||||
iteration # 8 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 1.66E-13, avg # of iterations = 2.2
|
||||
|
||||
total cpu time spent up to now is 0.1 secs
|
||||
|
||||
total energy = -22.56912005 Ry
|
||||
Harris-Foulkes estimate = -22.56912005 Ry
|
||||
estimated scf accuracy < 1.4E-12 Ry
|
||||
|
||||
iteration # 9 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 1.00E-13, avg # of iterations = 1.0
|
||||
|
||||
total cpu time spent up to now is 0.2 secs
|
||||
|
||||
total energy = -22.56912005 Ry
|
||||
Harris-Foulkes estimate = -22.56912005 Ry
|
||||
estimated scf accuracy < 1.2E-13 Ry
|
||||
|
||||
iteration # 10 ecut= 40.00 Ry beta= 0.70
|
||||
Davidson diagonalization with overlap
|
||||
ethr = 1.00E-13, avg # of iterations = 1.0
|
||||
|
||||
total cpu time spent up to now is 0.2 secs
|
||||
|
||||
End of self-consistent calculation
|
||||
|
||||
k = 0.0000 0.0000 0.0000 ( 259 PWs) bands (ev):
|
||||
|
||||
-6.4235 19.4319 19.4319 19.4319
|
||||
|
||||
k =-0.2500 0.2500-0.2500 ( 247 PWs) bands (ev):
|
||||
|
||||
-4.3640 11.1960 17.1242 17.1242
|
||||
|
||||
k = 0.5000-0.5000 0.5000 ( 242 PWs) bands (ev):
|
||||
|
||||
1.3554 2.0926 15.8360 15.8360
|
||||
|
||||
k = 0.0000 0.5000 0.0000 ( 234 PWs) bands (ev):
|
||||
|
||||
-3.6676 13.8902 13.8902 14.6044
|
||||
|
||||
k = 0.7500-0.2500 0.7500 ( 242 PWs) bands (ev):
|
||||
|
||||
1.0116 6.1173 10.9479 12.9424
|
||||
|
||||
k = 0.5000 0.0000 0.5000 ( 248 PWs) bands (ev):
|
||||
|
||||
-0.9841 8.9954 9.4815 15.4324
|
||||
|
||||
k = 0.0000-1.0000 0.0000 ( 230 PWs) bands (ev):
|
||||
|
||||
4.2703 4.2704 11.0667 11.0667
|
||||
|
||||
k =-0.5000-1.0000 0.0000 ( 252 PWs) bands (ev):
|
||||
|
||||
5.7308 5.7308 7.9623 7.9623
|
||||
|
||||
highest occupied level (ev): 19.4319
|
||||
|
||||
! total energy = -22.56912005 Ry
|
||||
Harris-Foulkes estimate = -22.56912005 Ry
|
||||
estimated scf accuracy < 5.4E-15 Ry
|
||||
|
||||
The total energy is the sum of the following terms:
|
||||
|
||||
one-electron contribution = 11.69320241 Ry
|
||||
hartree contribution = 1.58588477 Ry
|
||||
xc contribution = -7.58959449 Ry
|
||||
ewald contribution = -28.25861274 Ry
|
||||
|
||||
convergence has been achieved in 10 iterations
|
||||
|
||||
Writing output data file di.save
|
||||
|
||||
init_run : 0.01s CPU 0.01s WALL ( 1 calls)
|
||||
electrons : 0.08s CPU 0.11s WALL ( 1 calls)
|
||||
|
||||
Called by init_run:
|
||||
wfcinit : 0.01s CPU 0.01s WALL ( 1 calls)
|
||||
potinit : 0.00s CPU 0.00s WALL ( 1 calls)
|
||||
|
||||
Called by electrons:
|
||||
c_bands : 0.07s CPU 0.09s WALL ( 10 calls)
|
||||
sum_band : 0.01s CPU 0.01s WALL ( 10 calls)
|
||||
v_of_rho : 0.00s CPU 0.00s WALL ( 11 calls)
|
||||
mix_rho : 0.00s CPU 0.00s WALL ( 10 calls)
|
||||
|
||||
Called by c_bands:
|
||||
init_us_2 : 0.00s CPU 0.00s WALL ( 168 calls)
|
||||
cegterg : 0.07s CPU 0.09s WALL ( 80 calls)
|
||||
|
||||
Called by sum_band:
|
||||
|
||||
Called by *egterg:
|
||||
h_psi : 0.06s CPU 0.07s WALL ( 249 calls)
|
||||
g_psi : 0.00s CPU 0.00s WALL ( 161 calls)
|
||||
cdiaghg : 0.01s CPU 0.01s WALL ( 241 calls)
|
||||
|
||||
Called by h_psi:
|
||||
h_psi:pot : 0.06s CPU 0.07s WALL ( 249 calls)
|
||||
h_psi:calbec : 0.00s CPU 0.00s WALL ( 249 calls)
|
||||
vloc_psi : 0.05s CPU 0.07s WALL ( 249 calls)
|
||||
add_vuspsi : 0.00s CPU 0.00s WALL ( 249 calls)
|
||||
|
||||
General routines
|
||||
calbec : 0.00s CPU 0.00s WALL ( 249 calls)
|
||||
fft : 0.00s CPU 0.00s WALL ( 33 calls)
|
||||
ffts : 0.00s CPU 0.00s WALL ( 10 calls)
|
||||
fftw : 0.06s CPU 0.07s WALL ( 2142 calls)
|
||||
|
||||
Parallel routines
|
||||
fft_scatt_xy : 0.01s CPU 0.01s WALL ( 2185 calls)
|
||||
fft_scatt_yz : 0.02s CPU 0.02s WALL ( 2185 calls)
|
||||
|
||||
PWSCF : 0.14s CPU 0.18s WALL
|
||||
|
||||
|
||||
This run was terminated on: 13: 9:11 4Apr2018
|
||||
|
||||
=------------------------------------------------------------------------------=
|
||||
JOB DONE.
|
||||
=------------------------------------------------------------------------------=
|
|
@ -0,0 +1,64 @@
|
|||
0.000000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.000000000000000 0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.000000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.500000000000000 0.0156250000
|
||||
0.250000000000000 0.250000000000000 0.750000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
-0.750000000000000 -0.500000000000000 -0.500000000000000 0.0156250000
|
||||
0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.250000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.250000000000000 -0.250000000000000 0.500000000000000 0.0156250000
|
||||
-0.750000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.500000000000000 -0.500000000000000 -0.750000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
0.500000000000000 0.500000000000000 0.750000000000000 0.0156250000
|
||||
0.500000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.250000000000000 0.0156250000
|
||||
0.500000000000000 0.750000000000000 0.500000000000000 0.0156250000
|
||||
-0.500000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 0.000000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 0.000000000000000 0.0156250000
|
||||
0.750000000000000 0.250000000000000 0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.750000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 0.500000000000000 0.250000000000000 0.0156250000
|
||||
0.750000000000000 0.500000000000000 0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.500000000000000 -0.250000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 0.000000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.750000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.500000000000000 0.0156250000
|
||||
-0.250000000000000 -0.250000000000000 -0.250000000000000 0.0156250000
|
|
@ -0,0 +1,339 @@
|
|||
#!/bin/sh
|
||||
|
||||
# run from directory where this script is
|
||||
cd `echo $0 | sed 's/\(.*\)\/.*/\1/'` # extract pathname
|
||||
EXAMPLE_DIR=`pwd`
|
||||
|
||||
# Path for Wannier90
|
||||
WAN_DIR=../../../wannier90-1.2
|
||||
|
||||
# check whether echo has the -e option
|
||||
if test "`echo -e`" = "-e" ; then ECHO=echo ; else ECHO="echo -e" ; fi
|
||||
|
||||
$ECHO
|
||||
$ECHO "$EXAMPLE_DIR : starting"
|
||||
$ECHO
|
||||
$ECHO "This example shows how to use pw2wannier90.x in conjunction with"
|
||||
$ECHO "Wannier90 (http://www.wannier.org) to obtain maximally-localised"
|
||||
$ECHO "Wannier functions (MLWFs) for the valence bands of diamond."
|
||||
$ECHO "Wannier90 may be run in two modes, 'library' and 'standalone',"
|
||||
$ECHO "and both of these are demonstrated."
|
||||
$ECHO "for library mode pw2wannier90 has to be compile with -D__WANLIB flag,"
|
||||
$ECHO "libwannier.a has to be linked. Uncomment related lines below."
|
||||
|
||||
# set the needed environment variables
|
||||
. ../../../environment_variables
|
||||
|
||||
# required executables and pseudopotentials
|
||||
BIN_LIST="pw.x pw2wannier90.x open_grid.x wannier90.x"
|
||||
PSEUDO_LIST="C.pz-vbc.UPF"
|
||||
|
||||
$ECHO
|
||||
$ECHO " executables directory: $BIN_DIR"
|
||||
$ECHO " pseudo directory: $PSEUDO_DIR"
|
||||
$ECHO " temporary directory: $TMP_DIR"
|
||||
$ECHO " checking that needed directories and files exist...\c"
|
||||
|
||||
# check for directories
|
||||
for DIR in "$BIN_DIR" "$PSEUDO_DIR" ; do
|
||||
if test ! -d $DIR ; then
|
||||
$ECHO
|
||||
$ECHO "ERROR: $DIR not existent or not a directory"
|
||||
$ECHO "Aborting"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
for DIR in "$TMP_DIR" "$EXAMPLE_DIR/results" ; do
|
||||
if test ! -d $DIR ; then
|
||||
mkdir $DIR
|
||||
fi
|
||||
done
|
||||
cd $EXAMPLE_DIR/results
|
||||
|
||||
# check for executables
|
||||
for FILE in $BIN_LIST ; do
|
||||
if test ! -x $BIN_DIR/$FILE ; then
|
||||
$ECHO
|
||||
$ECHO "ERROR: $BIN_DIR/$FILE not existent or not executable"
|
||||
$ECHO "Aborting"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# check for pseudopotentials
|
||||
for FILE in $PSEUDO_LIST ; do
|
||||
if test ! -r $PSEUDO_DIR/$FILE ; then
|
||||
$ECHO
|
||||
$ECHO "Downloading $FILE to $PSEUDO_DIR...\c"
|
||||
$WGET $PSEUDO_DIR/$FILE $NETWORK_PSEUDO/$FILE 2> /dev/null
|
||||
fi
|
||||
if test $? != 0; then
|
||||
$ECHO
|
||||
$ECHO "ERROR: $PSEUDO_DIR/$FILE not existent or not readable"
|
||||
$ECHO "Aborting"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
$ECHO " done"
|
||||
|
||||
# how to run executables
|
||||
PW_COMMAND="$PARA_PREFIX $BIN_DIR/pw.x $PARA_POSTFIX"
|
||||
WAN_COMMAND="$BIN_DIR/wannier90.x"
|
||||
PW2WAN_COMMAND="$PARA_PREFIX $BIN_DIR/pw2wannier90.x $PARA_POSTFIX"
|
||||
OG_COMMAND="$PARA_PREFIX $BIN_DIR/open_grid.x $PARA_POSTFIX"
|
||||
$ECHO
|
||||
$ECHO " running pw.x as : $PW_COMMAND"
|
||||
$ECHO " running wannier90.x as : $WAN_COMMAND"
|
||||
$ECHO " running pw2wannier90.x as: $PW2WAN_COMMAND"
|
||||
$ECHO " running open_grid.x as: $OG_COMMAND"
|
||||
$ECHO
|
||||
|
||||
# self-consistent calculation for diamond
|
||||
cat > diamond.scf.in << EOF
|
||||
&control
|
||||
calculation = 'scf'
|
||||
restart_mode='from_scratch',
|
||||
prefix='di',
|
||||
pseudo_dir='$PSEUDO_DIR',
|
||||
outdir='$TMP_DIR'
|
||||
/
|
||||
&system
|
||||
ibrav= 2, celldm(1) =6.1, nat= 2, ntyp= 1,
|
||||
ecutwfc =40.0,
|
||||
/
|
||||
&electrons
|
||||
diagonalization='david'
|
||||
mixing_mode = 'plain'
|
||||
mixing_beta = 0.7
|
||||
conv_thr = 1.0d-13
|
||||
/
|
||||
ATOMIC_SPECIES
|
||||
C 12.0 C.pz-vbc.UPF
|
||||
ATOMIC_POSITIONS {crystal}
|
||||
C -0.25 -0.25 -0.25
|
||||
C 0.0 0.0 0.0
|
||||
K_POINTS {automatic}
|
||||
4 4 4 0 0 0
|
||||
EOF
|
||||
$ECHO " running the scf calculation for diamond...\c"
|
||||
$PW_COMMAND < diamond.scf.in > diamond.scf.out
|
||||
$ECHO " done"
|
||||
|
||||
# non-self-consistent calculation for diamond
|
||||
#cat > diamond.nscf.in << EOF
|
||||
# &control
|
||||
# calculation='nscf'
|
||||
# pseudo_dir='$PSEUDO_DIR',
|
||||
# outdir='$TMP_DIR',
|
||||
# prefix='di'
|
||||
# /
|
||||
# &system
|
||||
# ibrav= 2, celldm(1) =6.1, nat= 2, ntyp= 1,
|
||||
# ecutwfc =40.0, nbnd = 4,
|
||||
# /
|
||||
# &electrons
|
||||
# conv_thr = 1.0d-11
|
||||
# /
|
||||
#ATOMIC_SPECIES
|
||||
# C 12.0 C.pz-vbc.UPF
|
||||
#ATOMIC_POSITIONS {crystal}
|
||||
#C -0.25 -0.25 -0.25
|
||||
#C 0.0 0.0 0.0
|
||||
#K_POINTS {crystal}
|
||||
# 64
|
||||
#0.0000 0.0000 0.0000 0.0156250
|
||||
#0.0000 0.2500 0.0000 0.0156250
|
||||
#0.0000 0.5000 0.0000 0.0156250
|
||||
#0.0000 0.7500 0.0000 0.0156250
|
||||
#0.2500 0.0000 0.0000 0.0156250
|
||||
#0.2500 0.2500 0.0000 0.0156250
|
||||
#0.2500 0.5000 0.0000 0.0156250
|
||||
#0.2500 0.7500 0.0000 0.0156250
|
||||
#0.5000 0.0000 0.0000 0.0156250
|
||||
#0.5000 0.2500 0.0000 0.0156250
|
||||
#0.5000 0.5000 0.0000 0.0156250
|
||||
#0.5000 0.7500 0.0000 0.0156250
|
||||
#0.7500 0.0000 0.0000 0.0156250
|
||||
#0.7500 0.2500 0.0000 0.0156250
|
||||
#0.7500 0.5000 0.0000 0.0156250
|
||||
#0.7500 0.7500 0.0000 0.0156250
|
||||
#0.0000 0.0000 0.2500 0.0156250
|
||||
#0.0000 0.2500 0.2500 0.0156250
|
||||
#0.0000 0.5000 0.2500 0.0156250
|
||||
#0.0000 0.7500 0.2500 0.0156250
|
||||
#0.2500 0.0000 0.2500 0.0156250
|
||||
#0.2500 0.2500 0.2500 0.0156250
|
||||
#0.2500 0.5000 0.2500 0.0156250
|
||||
#0.2500 0.7500 0.2500 0.0156250
|
||||
#0.5000 0.0000 0.2500 0.0156250
|
||||
#0.5000 0.2500 0.2500 0.0156250
|
||||
#0.5000 0.5000 0.2500 0.0156250
|
||||
#0.5000 0.7500 0.2500 0.0156250
|
||||
#0.7500 0.0000 0.2500 0.0156250
|
||||
#0.7500 0.2500 0.2500 0.0156250
|
||||
#0.7500 0.5000 0.2500 0.0156250
|
||||
#0.7500 0.7500 0.2500 0.0156250
|
||||
#0.0000 0.0000 0.5000 0.0156250
|
||||
#0.0000 0.2500 0.5000 0.0156250
|
||||
#0.0000 0.5000 0.5000 0.0156250
|
||||
#0.0000 0.7500 0.5000 0.0156250
|
||||
#0.2500 0.0000 0.5000 0.0156250
|
||||
#0.2500 0.2500 0.5000 0.0156250
|
||||
#0.2500 0.5000 0.5000 0.0156250
|
||||
#0.2500 0.7500 0.5000 0.0156250
|
||||
#0.5000 0.0000 0.5000 0.0156250
|
||||
#0.5000 0.2500 0.5000 0.0156250
|
||||
#0.5000 0.5000 0.5000 0.0156250
|
||||
#0.5000 0.7500 0.5000 0.0156250
|
||||
#0.7500 0.0000 0.5000 0.0156250
|
||||
#0.7500 0.2500 0.5000 0.0156250
|
||||
#0.7500 0.5000 0.5000 0.0156250
|
||||
#0.7500 0.7500 0.5000 0.0156250
|
||||
#0.0000 0.0000 0.7500 0.0156250
|
||||
#0.0000 0.2500 0.7500 0.0156250
|
||||
#0.0000 0.5000 0.7500 0.0156250
|
||||
#0.0000 0.7500 0.7500 0.0156250
|
||||
#0.2500 0.0000 0.7500 0.0156250
|
||||
#0.2500 0.2500 0.7500 0.0156250
|
||||
#0.2500 0.5000 0.7500 0.0156250
|
||||
#0.2500 0.7500 0.7500 0.0156250
|
||||
#0.5000 0.0000 0.7500 0.0156250
|
||||
#0.5000 0.2500 0.7500 0.0156250
|
||||
#0.5000 0.5000 0.7500 0.0156250
|
||||
#0.5000 0.7500 0.7500 0.0156250
|
||||
#0.7500 0.0000 0.7500 0.0156250
|
||||
#0.7500 0.2500 0.7500 0.0156250
|
||||
#0.7500 0.5000 0.7500 0.0156250
|
||||
#0.7500 0.7500 0.7500 0.0156250
|
||||
#EOF
|
||||
#$ECHO " running the nscf calculation for diamond...\c"
|
||||
#$PW_COMMAND < diamond.nscf.in > diamond.nscf.out
|
||||
#$ECHO " done"
|
||||
|
||||
|
||||
# run pw2wannier90 to get overlap matrices
|
||||
cat > diamond.openg.sa.in << EOF
|
||||
&inputpp
|
||||
outdir = '$TMP_DIR/'
|
||||
prefix = 'di'
|
||||
/
|
||||
EOF
|
||||
$ECHO " running open_grid for diamond...\c"
|
||||
$OG_COMMAND < diamond.openg.sa.in > diamond.openg.sa.out
|
||||
$ECHO " done"
|
||||
|
||||
$ECHO " getting list of k-points from open_grid output...\c"
|
||||
grep -A64 List diamond.openg.sa.out|grep -v List > k_points.txt
|
||||
|
||||
|
||||
# Wannier90 to get nnkp
|
||||
cat > diamond.win << EOF
|
||||
num_wann = 4
|
||||
num_iter = 20
|
||||
|
||||
begin atoms_frac
|
||||
C -0.2500 -0.250 -0.25000
|
||||
C 0.00000 0.0000 0.000000
|
||||
end atoms_frac
|
||||
|
||||
begin projections
|
||||
f=0.0,0.0,0.0:s
|
||||
f=0.0,0.0,0.5:s
|
||||
f=0.0,0.5,0.0:s
|
||||
f=0.5,0.0,0.0:s
|
||||
end projections
|
||||
|
||||
#begin unit_cell_cart
|
||||
#-1.613990 0.000000 1.613990
|
||||
# 0.000000 1.613990 1.613990
|
||||
#-1.613990 1.613990 0.000000
|
||||
#end unit_cell_cart
|
||||
|
||||
begin unit_cell_cart
|
||||
bohr
|
||||
-3.050 0.000 3.050
|
||||
0.000 3.050 3.050
|
||||
-3.050 3.050 0.000
|
||||
end_unit_cell_cart
|
||||
|
||||
mp_grid : 4 4 4
|
||||
|
||||
begin kpoints
|
||||
$(cat k_points.txt)
|
||||
end kpoints
|
||||
EOF
|
||||
|
||||
# STANDALONE MODE
|
||||
$ECHO
|
||||
$ECHO " <== Stand-alone Mode ==>\c"
|
||||
$ECHO
|
||||
|
||||
mv diamond.win diamond.sa.win
|
||||
|
||||
# run wannier90 to get nnkp file
|
||||
$ECHO " running wannier90 -pp for diamond...\c"
|
||||
$WAN_COMMAND -pp diamond.sa
|
||||
$ECHO " done"
|
||||
|
||||
# run pw2wannier90 to get overlap matrices
|
||||
cat > diamond.pw2wan.sa.in << EOF
|
||||
&inputpp
|
||||
outdir = '$TMP_DIR/'
|
||||
prefix = 'di_open'
|
||||
seedname = 'diamond.sa'
|
||||
spin_component = 'none'
|
||||
write_mmn = .true.
|
||||
write_amn = .true.
|
||||
write_unk = .false.
|
||||
wan_mode = 'standalone'
|
||||
/
|
||||
EOF
|
||||
$ECHO " running pw2wannier90 in stand-alone mode for diamond...\c"
|
||||
$PW2WAN_COMMAND < diamond.pw2wan.sa.in > diamond.pw2wan.sa.out
|
||||
$ECHO " done"
|
||||
|
||||
# clean TMP_DIR
|
||||
#$ECHO " cleaning $TMP_DIR...\c"
|
||||
#rm -rf $TMP_DIR/pwscf*
|
||||
#$ECHO " done"
|
||||
|
||||
# run Wannier90 to obtain MLWFs
|
||||
$ECHO " running wannier90 for diamond...\c"
|
||||
$WAN_COMMAND diamond.sa
|
||||
$ECHO " done"
|
||||
|
||||
#########################################################
|
||||
# LIBRARY MODE
|
||||
########################################################
|
||||
#$ECHO
|
||||
#$ECHO " <== Library Mode ==> \c"
|
||||
#$ECHO
|
||||
|
||||
cp diamond.sa.win diamond.lib.win
|
||||
|
||||
# run pw2wannier90 to get overlap matrices
|
||||
cat > diamond.pw2wan.lib.in << EOF
|
||||
&inputpp
|
||||
outdir = '$TMP_DIR/'
|
||||
prefix = 'di'
|
||||
seedname = 'diamond.lib'
|
||||
spin_component = 'none'
|
||||
write_mmn = .true.
|
||||
write_amn = .true.
|
||||
write_unk = .false.
|
||||
wan_mode = 'library'
|
||||
/
|
||||
EOF
|
||||
#$ECHO " running pw2wannier90 in library mode for diamond...\c"
|
||||
#$PW2WAN_COMMAND < diamond.pw2wan.lib.in > diamond.pw2wan.lib.out
|
||||
#$ECHO " done"
|
||||
|
||||
############################################################
|
||||
|
||||
#clean TMP_DIR
|
||||
$ECHO
|
||||
$ECHO " cleaning $TMP_DIR...\c"
|
||||
rm -rf $TMP_DIR/di.*
|
||||
$ECHO
|
||||
$ECHO "$EXAMPLE_DIR : done"
|
||||
$ECHO
|
|
@ -167,7 +167,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
.FALSE. do not collect wavefunctions, leave them in temporary
|
||||
local files (one per processor). The resulting format
|
||||
is readable only on the same number of processors and
|
||||
with the same knd of paralleliztio used to write it.
|
||||
with the same kind of parallelization used to write it.
|
||||
|
||||
Note that this flag has no effect on reading, only on writing.
|
||||
}
|
||||
|
@ -235,7 +235,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
each processor (*.wfc{N}, *.igk{N}, etc.). Useful for
|
||||
machines without a parallel file system: set @ref wfcdir to
|
||||
a local file system, while @ref outdir should be a parallel
|
||||
or networkfile system, visible to all processors. Beware:
|
||||
or network file system, visible to all processors. Beware:
|
||||
in order to restart from interrupted runs, or to perform
|
||||
further calculations using the produced data files, you
|
||||
may need to copy files to @ref outdir. Works only for pw.x.
|
||||
|
@ -444,7 +444,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
see { zgate, relaxz, block, block_1, block_2, block_height }
|
||||
info {
|
||||
In the case of charged cells (@ref tot_charge .ne. 0) setting gate = .TRUE.
|
||||
represents the counter charge (i.e. -tot_charge) not by a homogenous
|
||||
represents the counter charge (i.e. -tot_charge) not by a homogeneous
|
||||
background charge but with a charged plate, which is placed at @ref zgate
|
||||
(see below). Details of the gate potential can be found in
|
||||
T. Brumme, M. Calandra, F. Mauri; PRB 89, 245406 (2014).
|
||||
|
@ -1161,7 +1161,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
info {
|
||||
Hubbard_alpha(i) is the perturbation (on atom i, in eV)
|
||||
used to compute U with the linear-response method of
|
||||
Cococcioni and de Gironcoli, PRB 71, 35105 (2005)
|
||||
Cococcioni and de Gironcoli, PRB 71, 035105 (2005)
|
||||
(only for @ref lda_plus_u_kind=0)
|
||||
}
|
||||
}
|
||||
|
@ -1170,7 +1170,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
info {
|
||||
Hubbard_beta(i) is the perturbation (on atom i, in eV)
|
||||
used to compute J0 with the linear-response method of
|
||||
Cococcioni and de Gironcoli, PRB 71, 35105 (2005)
|
||||
Cococcioni and de Gironcoli, PRB 71, 035105 (2005)
|
||||
(only for @ref lda_plus_u_kind=0). See also
|
||||
PRB 84, 115108 (2011).
|
||||
}
|
||||
|
@ -1457,7 +1457,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
|
||||
- Components of the total stress; sigma_xy, sigma_yz,
|
||||
sigma_zz, sigma_zy, and sigma_zx are meaningless
|
||||
bacause ESM stress routines calculate only
|
||||
because ESM stress routines calculate only
|
||||
components of stress; sigma_xx, sigma_xy, sigma_yx,
|
||||
and sigma_yy.
|
||||
|
||||
|
@ -1559,7 +1559,9 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
var vdw_corr -type CHARACTER {
|
||||
default { 'none' }
|
||||
see {
|
||||
london_s6, london_rcut, london_c6, london_rvdw, ts_vdw_econv_thr, ts_vdw_isolated, xdm_a1, xdm_a2
|
||||
london_s6, london_rcut, london_c6, london_rvdw,
|
||||
dftd3_s6, dftd3_rs6, dftd3_s18, dftd3_rs18, dftd3_alp
|
||||
ts_vdw_econv_thr, ts_vdw_isolated, xdm_a1, xdm_a2
|
||||
}
|
||||
options {
|
||||
info {
|
||||
|
@ -1572,6 +1574,12 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
S. Grimme, J. Comp. Chem. 27, 1787 (2006), doi:10.1002/jcc.20495
|
||||
V. Barone et al., J. Comp. Chem. 30, 934 (2009), doi:10.1002/jcc.21112
|
||||
}
|
||||
opt -val {'grimme-d3', 'Grimme-D3', 'DFT-D3', 'dft-d3' } {
|
||||
Semiempirical Grimme's DFT-D3. Optional variables:
|
||||
@ref dftd3_s6, @ref dftd3_rs6, @ref dftd3_s18, @ref dftd3_rs18, @ref dftd3_alp
|
||||
S. Grimme et al., J.Chem.Phys. 132, 154104 (2010)
|
||||
S. Grimme et al., J.Comput.Chem.32, 1456 (2011) (BJ damping)
|
||||
}
|
||||
|
||||
opt -val {'TS', 'ts', 'ts-vdw', 'ts-vdW', 'tkatchenko-scheffler'} {
|
||||
Tkatchenko-Scheffler dispersion corrections with first-principle derived
|
||||
|
@ -1589,7 +1597,8 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
info { Note that non-local functionals (eg vdw-DF) are NOT specified here but in @ref input_dft }
|
||||
}
|
||||
}
|
||||
|
||||
group {
|
||||
label { Parameters for DFT-D2. Defaults are good for PBE }
|
||||
var london -type LOGICAL {
|
||||
default { .FALSE. }
|
||||
status {
|
||||
|
@ -1627,7 +1636,43 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
cutoff radius (a.u.) for dispersion interactions
|
||||
}
|
||||
}
|
||||
var ts_vdw_econv_thr -type REAL {
|
||||
}
|
||||
group {
|
||||
label { Parameters for DFT-D3. Defaults are good for PBE }
|
||||
var dftd3_s6 -type REAL {
|
||||
default { 1.0 }
|
||||
info {
|
||||
global scaling parameter s_6
|
||||
}
|
||||
}
|
||||
var dftd3_rs6 -type REAL {
|
||||
default { 1.217 }
|
||||
info {
|
||||
parameter rs_6
|
||||
}
|
||||
}
|
||||
var dftd3_s18 -type REAL {
|
||||
default { 0.722 }
|
||||
info {
|
||||
parameter s_18
|
||||
}
|
||||
}
|
||||
var dftd3_rs18 -type REAL {
|
||||
default { 1.0 }
|
||||
info {
|
||||
parameter rs_18
|
||||
}
|
||||
}
|
||||
var dftd3_alp -type REAL {
|
||||
default { 14.0 }
|
||||
info {
|
||||
parameter alp6
|
||||
}
|
||||
}
|
||||
}
|
||||
group {
|
||||
label { Parameters for Tkatchenko-Scheffler }
|
||||
var ts_vdw_econv_thr -type REAL {
|
||||
default { 1.D-6 }
|
||||
info {
|
||||
Optional: controls the convergence of the vdW energy (and forces). The default value
|
||||
|
@ -1642,8 +1687,10 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
for an isolated (non-periodic) system.
|
||||
}
|
||||
}
|
||||
|
||||
var xdm -type LOGICAL {
|
||||
}
|
||||
group {
|
||||
label { Parameters for XDM }
|
||||
var xdm -type LOGICAL {
|
||||
default { .FALSE. }
|
||||
status {
|
||||
OBSOLESCENT, same as @ref vdw_corr='xdm'
|
||||
|
@ -1674,7 +1721,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
doi:10.1063/1.4705760
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
var space_group -type INTEGER {
|
||||
default { 0 }
|
||||
info {
|
||||
|
@ -1722,7 +1769,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
}
|
||||
|
||||
group {
|
||||
label { below variables are used only if @ref gate = .TRUE. }
|
||||
label { variables used only if @ref gate = .TRUE. }
|
||||
|
||||
var zgate -type REAL {
|
||||
default { 0.5 }
|
||||
|
@ -1822,7 +1869,7 @@ input_description -distribution {Quantum Espresso} -package PWscf -program pw.x
|
|||
|
||||
For non-self-consistent calculations, conv_thr is used
|
||||
to set the default value of the threshold (ethr) for
|
||||
iterative diagonalizazion: see @ref diago_thr_init
|
||||
iterative diagonalization: see @ref diago_thr_init
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,8 @@ CONTINUE
|
|||
!------------------------------------------------------------------------
|
||||
! START_GLOBAL_VARIABLES ( INTENT (IN) )
|
||||
!--------------------------------------------------------------------------
|
||||
USE kinds, ONLY: DP
|
||||
USE constants, ONLY: e2
|
||||
USE ions_base, ONLY: tau, nat, nsp, atm, ityp
|
||||
USE cell_base, ONLY: alat, at
|
||||
USE ener, ONLY: etot, eband, ehart, etxc, vtxc, ewld, demet, ef
|
||||
|
@ -27,6 +29,7 @@ USE klist, ONLY: degauss, tot_charge
|
|||
USE force_mod, ONLY: force, sigma
|
||||
USE control_flags,ONLY: nstep, n_scf_steps, scf_error
|
||||
USE fcp_variables,ONLY: fcp_mu, lfcpopt, lfcpdyn
|
||||
USE extfield, ONLY: gate, etotgatefield, tefield, etotefield
|
||||
!-----------------------------------------------------------------------------
|
||||
! END_GLOBAL_VARIABLES
|
||||
!-----------------------------------------------------------------------------
|
||||
|
@ -46,17 +49,46 @@ INTEGER,INTENT(IN) :: i_step
|
|||
!-------------------------------------------------------------------------------
|
||||
! END_INPUT_VARIABLES
|
||||
!--------------------------------------------------------------------------------
|
||||
!
|
||||
IF ( lfcpopt .OR. lfcpdyn ) THEN
|
||||
CALL qexsd_step_addstep ( i_step, nstep, nsp, atm, ityp, nat, alat*tau, alat, alat*at(:,1), &
|
||||
alat*at(:,2), alat*at(:,3), etot, eband, ehart, vtxc, etxc, ewld, &
|
||||
degauss, demet, force, sigma, n_scf_steps, scf_error, &
|
||||
POTSTAT_CONTR = (ef * tot_charge), FCP_FORCE = (fcp_mu-ef) , FCP_TOT_CHARGE = tot_charge)
|
||||
ELSE
|
||||
CALL qexsd_step_addstep ( i_step, nstep, nsp, atm, ityp, nat, alat*tau, alat, &
|
||||
alat*at(:,1), alat*at(:,2), alat*at(:,3), &
|
||||
etot, eband, ehart, vtxc, etxc, ewld, degauss, demet, &
|
||||
force, sigma, n_scf_steps, scf_error)
|
||||
END IF
|
||||
!
|
||||
REAL(DP),TARGET :: potstat_contr_tgt, fcp_force_tgt, fcp_tot_charge_tgt,&
|
||||
demet_tgt, degauss_tgt, gatefield_en_tgt, efield_corr_tgt
|
||||
|
||||
REAL(DP),POINTER :: potstat_contr_ptr, fcp_force_ptr, fcp_tot_charge_ptr,&
|
||||
demet_ptr, degauss_ptr, gatefield_en_ptr, efield_corr_ptr
|
||||
!
|
||||
NULLIFY(potstat_contr_ptr, fcp_force_ptr, fcp_tot_charge_ptr, demet_ptr, degauss_ptr, &
|
||||
gatefield_en_ptr, efield_corr_ptr)
|
||||
!
|
||||
IF ( degauss > 0.0d0 ) THEN
|
||||
degauss_tgt = degauss/e2
|
||||
demet_tgt = demet/e2
|
||||
degauss_ptr => degauss_tgt
|
||||
demet_ptr => demet_tgt
|
||||
END IF
|
||||
IF ( lfcpopt .OR. lfcpdyn ) THEN
|
||||
potstat_contr_tgt = ef * tot_charge / e2
|
||||
potstat_contr_ptr => potstat_contr_tgt
|
||||
!FIXME ( again shouldn't we use Hartree units for this ? )
|
||||
fcp_force_tgt = fcp_mu - ef
|
||||
fcp_force_ptr => fcp_force_tgt
|
||||
!
|
||||
fcp_tot_charge_tgt = tot_charge
|
||||
fcp_tot_charge_ptr => fcp_tot_charge_tgt
|
||||
!
|
||||
END IF
|
||||
IF ( gate ) THEN
|
||||
gatefield_en_tgt = etotgatefield/e2
|
||||
gatefield_en_ptr => gatefield_en_tgt
|
||||
END IF
|
||||
IF (tefield) THEN
|
||||
efield_corr_tgt = etotefield/e2
|
||||
efield_corr_ptr => efield_corr_tgt
|
||||
END IF
|
||||
CALL qexsd_step_addstep ( i_step, nstep, nsp, atm, ityp, nat, alat*tau, alat, alat*at(:,1), &
|
||||
alat*at(:,2), alat*at(:,3), etot/e2, eband/e2, ehart/e2, vtxc/e2, etxc/e2, &
|
||||
ewld/e2, degauss_ptr, demet_ptr, force/e2, sigma/e2, n_scf_steps, scf_error, &
|
||||
FCP_FORCE = fcp_force_ptr , FCP_TOT_CHARGE = fcp_tot_charge_ptr,&
|
||||
GATEFIELD_EN = gatefield_en_ptr)
|
||||
#endif
|
||||
!
|
||||
END SUBROUTINE add_qexsd_step
|
||||
|
|
|
@ -132,8 +132,8 @@ SUBROUTINE addusstress_g (sigmanlc)
|
|||
DO ih = 1, nh (nt)
|
||||
DO jh = ih, nh (nt)
|
||||
ijh = ijh + 1
|
||||
CALL dqvan2 (ngm_l, ih, jh, nt, qmod, qgm(1,ijh), ylmk0, &
|
||||
dylmk0, ipol)
|
||||
CALL dqvan2 (ih, jh, nt, ipol, ngm_l, g(1,ngm_s), qmod, &
|
||||
ylmk0, dylmk0, qgm(1,ijh))
|
||||
ENDDO
|
||||
ENDDO
|
||||
!
|
||||
|
|
|
@ -174,7 +174,8 @@ SUBROUTINE c_phase
|
|||
USE spin_orb, ONLY : lspinorb
|
||||
USE mp_bands, ONLY : intra_bgrp_comm, nproc_bgrp
|
||||
USE mp, ONLY : mp_sum
|
||||
USE qexsd_module, ONLY : qexsd_init_berryPhaseOutput, qexsd_bp_obj
|
||||
USE qes_libs_module, ONLY : qes_reset_berryPhaseOutput
|
||||
USE qexsd_module, ONLY : qexsd_init_berryPhaseOutput, qexsd_bp_obj
|
||||
! --- Avoid implicit definitions ---
|
||||
IMPLICIT NONE
|
||||
|
||||
|
@ -959,6 +960,7 @@ SUBROUTINE c_phase
|
|||
! Here we write all output information in a berry_phase_type variable to print
|
||||
! them in the XML output P.D. april 2016
|
||||
!------------------------------------------------------------------------------
|
||||
CALL qes_reset_berryPhaseOutput(qexsd_bp_obj )
|
||||
CALL qexsd_init_berryPhaseOutput(qexsd_bp_obj, gpar, gvec, nppstr, nkort, xk, pdl_ion, mod_ion, &
|
||||
pdl_ion_tot, mod_ion_tot, nstring, pdl_elec , mod_elec, wstring, &
|
||||
pdl_elec_up, mod_elec_up, pdl_elec_dw, mod_elec_dw, pdl_elec_tot,&
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
!
|
||||
! Copyright (C) 2001 PWSCF group
|
||||
! Copyright (C) 2001-2018 Quantum ESPRESSO Foundation
|
||||
! This file is distributed under the terms of the
|
||||
! GNU General Public License. See the file `License'
|
||||
! in the root directory of the present distribution,
|
||||
! or http://www.gnu.org/copyleft/gpl.txt .
|
||||
!
|
||||
!-----------------------------------------------------------------------
|
||||
subroutine dqvan2 (ngy, ih, jh, np, qmod, dqg, ylmk0, dylmk0, ipol)
|
||||
SUBROUTINE dqvan2 (ih, jh, np, ipol, ngy, g, qmod, ylmk0, dylmk0, dqg )
|
||||
!-----------------------------------------------------------------------
|
||||
!
|
||||
! This routine computes the derivatives of the fourier transform of
|
||||
|
@ -18,36 +18,30 @@ subroutine dqvan2 (ngy, ih, jh, np, qmod, dqg, ylmk0, dylmk0, ipol)
|
|||
! dq(g,i,j) = sum_lm (-i)^l ap(lm,i,j) *
|
||||
! ( yr_lm(g^) dqrad(g,l,i,j) + dyr_lm(g^) qrad(g,l,i,j))
|
||||
!
|
||||
! here the dummy variables
|
||||
!
|
||||
USE kinds, ONLY: DP
|
||||
USE gvect, ONLY: g
|
||||
USE us, ONLY: dq, qrad
|
||||
USE uspp_param, ONLY: lmaxq, nbetam
|
||||
USE uspp, ONLY: nlx, lpl, lpx, ap, indv, nhtol, nhtolm
|
||||
implicit none
|
||||
integer :: ngy, ih, jh, np, ipol
|
||||
! input: the number of G vectors to compute
|
||||
! input: the first index of Q
|
||||
! input: the second index of Q
|
||||
! input: the number of the pseudopotential
|
||||
! input: the polarization of the derivative
|
||||
|
||||
real(DP) :: ylmk0 (ngy, lmaxq * lmaxq), dylmk0 (ngy, lmaxq * lmaxq), &
|
||||
qmod (ngy)
|
||||
! the spherical harmonics
|
||||
! the spherical harmonics derivetives
|
||||
! input: moduli of the q+g vectors
|
||||
complex(DP) :: dqg (ngy)
|
||||
! output: the fourier transform of interest
|
||||
!
|
||||
! here the local variables
|
||||
IMPLICIT NONE
|
||||
INTEGER, INTENT(IN) :: ngy, ih, jh, np, ipol
|
||||
! ngy: the number of G vectors to compute
|
||||
! ih : first index of Q(ih,jh)
|
||||
! jh : second index of Q(ih,jh)
|
||||
! np : pseudopotential index
|
||||
! ipol:the polarization of the derivative
|
||||
REAL(DP), INTENT(IN) :: g(3,ngy), qmod (ngy), ylmk0 (ngy, lmaxq*lmaxq), &
|
||||
dylmk0 (ngy, lmaxq * lmaxq)
|
||||
! g: G vectors
|
||||
! qmod: moduli of q+G vectors
|
||||
! ylmk0: spherical harmonics
|
||||
! dylmk0: derivetives of spherical harmonics
|
||||
COMPLEX(DP), INTENT(OUT) :: dqg (ngy)
|
||||
! the fourier transform of interest
|
||||
!
|
||||
|
||||
complex(DP) :: sig
|
||||
COMPLEX(DP) :: sig
|
||||
! (-i)^L
|
||||
|
||||
integer :: nb, mb, ijv, ivl, jvl, ig, lp, l, lm, i0, i1, i2, i3
|
||||
INTEGER :: nb, mb, ijv, ivl, jvl, ig, lp, l, lm, i0, i1, i2, i3
|
||||
! the atomic index corresponding to ih
|
||||
! the atomic index corresponding to jh
|
||||
! combined index (nb,mb)
|
||||
|
@ -59,7 +53,7 @@ subroutine dqvan2 (ngy, ih, jh, np, qmod, dqg, ylmk0, dylmk0, ipol)
|
|||
! the possible LM's compatible with ih,j
|
||||
! counters for interpolation table
|
||||
|
||||
real(DP) :: sixth, dqi, qm, px, ux, vx, wx, uvx, pwx, work, work1, qm1
|
||||
REAL(DP) :: sixth, dqi, qm, px, ux, vx, wx, uvx, pwx, work, work1, qm1
|
||||
! 1 divided by six
|
||||
! 1 divided dq
|
||||
! qmod/dq
|
||||
|
@ -74,45 +68,45 @@ subroutine dqvan2 (ngy, ih, jh, np, qmod, dqg, ylmk0, dylmk0, ipol)
|
|||
dqi = 1 / dq
|
||||
nb = indv (ih, np)
|
||||
mb = indv (jh, np)
|
||||
if (nb.ge.mb) then
|
||||
IF (nb >= mb) THEN
|
||||
ijv = nb * (nb - 1) / 2 + mb
|
||||
else
|
||||
ELSE
|
||||
ijv = mb * (mb - 1) / 2 + nb
|
||||
endif
|
||||
ENDIF
|
||||
ivl = nhtolm (ih, np)
|
||||
jvl = nhtolm (jh, np)
|
||||
|
||||
if (nb > nbetam .OR. mb > nbetam) &
|
||||
call errore (' dqvan2 ', ' wrong dimensions (1)', MAX(nb,mb))
|
||||
if (ivl > nlx .OR. jvl > nlx) &
|
||||
call errore (' dqvan2 ', ' wrong dimensions (2)', MAX(ivl,jvl))
|
||||
IF (nb > nbetam .or. mb > nbetam) &
|
||||
CALL errore (' dqvan2 ', ' wrong dimensions (1)', max(nb,mb))
|
||||
IF (ivl > nlx .or. jvl > nlx) &
|
||||
CALL errore (' dqvan2 ', ' wrong dimensions (2)', max(ivl,jvl))
|
||||
|
||||
dqg(:) = (0.d0,0.d0)
|
||||
dqg(:) = (0.d0,0.d0)
|
||||
!
|
||||
! and make the sum over the non zero LM
|
||||
!
|
||||
do lm = 1, lpx (ivl, jvl)
|
||||
DO lm = 1, lpx (ivl, jvl)
|
||||
lp = lpl (ivl, jvl, lm)
|
||||
!
|
||||
! extraction of angular momentum l from lp:
|
||||
!
|
||||
if (lp.eq.1) then
|
||||
IF (lp==1) THEN
|
||||
l = 1
|
||||
elseif ( (lp.ge.2) .and. (lp.le.4) ) then
|
||||
ELSEIF ( (lp>=2) .and. (lp<=4) ) THEN
|
||||
l = 2
|
||||
elseif ( (lp.ge.5) .and. (lp.le.9) ) then
|
||||
ELSEIF ( (lp>=5) .and. (lp<=9) ) THEN
|
||||
l = 3
|
||||
elseif ( (lp.ge.10) .and. (lp.le.16) ) then
|
||||
ELSEIF ( (lp>=10) .and. (lp<=16) ) THEN
|
||||
l = 4
|
||||
elseif ( (lp.ge.17) .and. (lp.le.25) ) then
|
||||
ELSEIF ( (lp>=17) .and. (lp<=25) ) THEN
|
||||
l = 5
|
||||
elseif ( (lp.ge.26) .and. (lp.le.36) ) then
|
||||
ELSEIF ( (lp>=26) .and. (lp<=36) ) THEN
|
||||
l = 6
|
||||
elseif ( (lp.ge.37) .and. (lp.le.49) ) then
|
||||
ELSEIF ( (lp>=37) .and. (lp<=49) ) THEN
|
||||
l = 7
|
||||
else
|
||||
call errore (' dqvan2 ', ' lp.gt.49 ', lp)
|
||||
endif
|
||||
ELSE
|
||||
CALL errore (' dqvan2 ', ' lp.gt.49 ', lp)
|
||||
ENDIF
|
||||
|
||||
sig = (0.d0, -1.d0) ** (l - 1)
|
||||
sig = sig * ap (lp, ivl, jvl)
|
||||
|
@ -120,12 +114,12 @@ subroutine dqvan2 (ngy, ih, jh, np, qmod, dqg, ylmk0, dylmk0, ipol)
|
|||
qm1 = -1.0_dp ! any number smaller than qmod(1)
|
||||
!
|
||||
!$OMP PARALLEL DO DEFAULT(SHARED) PRIVATE(qm,px,ux,vx,wx,i0,i1,i2,i3,uvx,pwx,work,work1)
|
||||
do ig = 1, ngy
|
||||
DO ig = 1, ngy
|
||||
!
|
||||
! calculate quantites depending on the module of G only when needed
|
||||
!
|
||||
#if !defined(_OPENMP)
|
||||
IF ( ABS( qmod(ig) - qm1 ) > 1.0D-6 ) THEN
|
||||
IF ( abs( qmod(ig) - qm1 ) > 1.0D-6 ) THEN
|
||||
#endif
|
||||
qm = qmod (ig) * dqi
|
||||
px = qm - int (qm)
|
||||
|
@ -153,17 +147,17 @@ subroutine dqvan2 (ngy, ih, jh, np, qmod, dqg, ylmk0, dylmk0, ipol)
|
|||
|
||||
#if !defined(_OPENMP)
|
||||
qm1 = qmod(ig)
|
||||
END IF
|
||||
ENDIF
|
||||
#endif
|
||||
|
||||
dqg (ig) = dqg (ig) + sig * dylmk0 (ig, lp) * work
|
||||
if (qmod (ig) > 1.d-9) dqg (ig) = dqg (ig) + &
|
||||
IF (qmod (ig) > 1.d-9) dqg (ig) = dqg (ig) + &
|
||||
sig * ylmk0 (ig, lp) * work1 * g (ipol, ig) / qmod (ig)
|
||||
enddo
|
||||
ENDDO
|
||||
!$OMP END PARALLEL DO
|
||||
|
||||
enddo
|
||||
return
|
||||
ENDDO
|
||||
RETURN
|
||||
|
||||
end subroutine dqvan2
|
||||
END SUBROUTINE dqvan2
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ subroutine force_cc (forcecc)
|
|||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : tpi
|
||||
USE atom, ONLY : rgrid
|
||||
USE atom, ONLY : rgrid, msh
|
||||
USE uspp_param, ONLY : upf
|
||||
USE ions_base, ONLY : nat, ntyp => nsp, ityp, tau
|
||||
USE cell_base, ONLY : alat, omega, tpiba, tpiba2
|
||||
|
@ -89,7 +89,7 @@ subroutine force_cc (forcecc)
|
|||
do nt = 1, ntyp
|
||||
if ( upf(nt)%nlcc ) then
|
||||
|
||||
call drhoc (ngl, gl, omega, tpiba2, rgrid(nt)%mesh, rgrid(nt)%r,&
|
||||
call drhoc (ngl, gl, omega, tpiba2, msh(nt), rgrid(nt)%r,&
|
||||
rgrid(nt)%rab, upf(nt)%rho_atc, rhocg)
|
||||
do na = 1, nat
|
||||
if (nt.eq.ityp (na) ) then
|
||||
|
|
|
@ -364,7 +364,6 @@ divide_class_so.o : pwcom.o
|
|||
divide_et_impera.o : ../../Modules/kind.o
|
||||
divide_et_impera.o : ../../Modules/mp_pools.o
|
||||
dqvan2.o : ../../Modules/kind.o
|
||||
dqvan2.o : ../../Modules/recvec.o
|
||||
dqvan2.o : ../../Modules/uspp.o
|
||||
dqvan2.o : pwcom.o
|
||||
drhoc.o : ../../Modules/constants.o
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
! or http://www.gnu.org/copyleft/gpl.txt .
|
||||
!
|
||||
!----------------------------------------------------------------------------
|
||||
SUBROUTINE move_ions ( idone )
|
||||
SUBROUTINE move_ions ( idone, ions_status )
|
||||
!----------------------------------------------------------------------------
|
||||
!
|
||||
! ... Perform an ionic step, according to the requested scheme:
|
||||
|
@ -29,21 +29,14 @@ SUBROUTINE move_ions ( idone )
|
|||
fix_volume, fix_area
|
||||
USE cellmd, ONLY : omega_old, at_old, press, lmovecell, calc
|
||||
USE ions_base, ONLY : nat, ityp, zv, tau, if_pos
|
||||
USE fft_base, ONLY : dfftp
|
||||
USE fft_base, ONLY : dffts
|
||||
USE fft_types, ONLY : fft_type_allocate
|
||||
USE gvect, ONLY : gcutm
|
||||
USE gvecs, ONLY : gcutms
|
||||
USE symm_base, ONLY : checkallsym
|
||||
USE ener, ONLY : etot, ef
|
||||
USE force_mod, ONLY : force, sigma
|
||||
USE control_flags, ONLY : istep, nstep, upscale, lbfgs, &
|
||||
lconstrain, conv_ions, lmd, tr2
|
||||
USE basis, ONLY : starting_wfc, starting_pot
|
||||
lconstrain, lmd, tr2
|
||||
USE relax, ONLY : epse, epsf, epsp, starting_scf_threshold
|
||||
USE lsda_mod, ONLY : lsda, absmag
|
||||
USE mp_images, ONLY : intra_image_comm
|
||||
USE mp_bands, ONLY : intra_bgrp_comm, nyfft
|
||||
USE io_global, ONLY : ionode_id, ionode
|
||||
USE mp, ONLY : mp_bcast
|
||||
USE bfgs_module, ONLY : bfgs, terminate_bfgs
|
||||
|
@ -55,28 +48,24 @@ SUBROUTINE move_ions ( idone )
|
|||
USE fcp_variables, ONLY : lfcpopt, lfcpdyn, fcp_mu, &
|
||||
fcp_relax, fcp_relax_crit
|
||||
USE klist, ONLY : nelec
|
||||
USE dfunct, only : newd
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
INTEGER, INTENT(IN) :: idone
|
||||
INTEGER, INTENT(IN) :: idone
|
||||
!! idone: see run_pwscf
|
||||
INTEGER, INTENT(INOUT):: ions_status
|
||||
!! ions_status: see run_pwscf
|
||||
!
|
||||
LOGICAL, SAVE :: lcheck_mag = .TRUE., &
|
||||
restart_with_starting_magnetiz = .FALSE., &
|
||||
lcheck_cell= .TRUE., &
|
||||
final_cell_calculation=.FALSE.
|
||||
REAL(DP) :: energy_error, gradient_error, cell_error
|
||||
LOGICAL :: step_accepted, exst
|
||||
REAL(DP), ALLOCATABLE :: pos(:), grad(:)
|
||||
REAL(DP) :: h(3,3), fcell(3,3)=0.d0, epsp1
|
||||
INTEGER, ALLOCATABLE :: fixion(:)
|
||||
LOGICAL :: conv_fcp
|
||||
LOGICAL :: conv_fcp, conv_ions
|
||||
!
|
||||
! ... only one node does the calculation in the parallel case
|
||||
!
|
||||
IF ( ionode ) THEN
|
||||
!
|
||||
conv_ions = .FALSE.
|
||||
!
|
||||
! ... do the minimization / dynamics step
|
||||
!
|
||||
|
@ -90,13 +79,11 @@ SUBROUTINE move_ions ( idone )
|
|||
!
|
||||
END IF
|
||||
!
|
||||
! ... BFGS algorithm is used to minimize ionic configuration
|
||||
!
|
||||
bfgs_minimization : &
|
||||
IF ( lbfgs ) THEN
|
||||
!
|
||||
! ... the bfgs procedure is used
|
||||
!
|
||||
! ... BFGS algorithm is used to minimize ionic configuration
|
||||
!
|
||||
ALLOCATE( pos( 3*nat ), grad( 3*nat ), fixion( 3*nat ) )
|
||||
!
|
||||
h = at * alat
|
||||
|
@ -148,24 +135,47 @@ SUBROUTINE move_ions ( idone )
|
|||
!
|
||||
IF ( conv_ions ) THEN
|
||||
!
|
||||
IF ( ( lsda .AND. ( absmag < eps6 ) .AND. lcheck_mag ) ) THEN
|
||||
IF ( ions_status == 3 ) THEN
|
||||
!
|
||||
! ... lsda relaxation : a final configuration with zero
|
||||
! ... absolute magnetization has been found.
|
||||
! A check on this configuration is needed
|
||||
restart_with_starting_magnetiz = .true.
|
||||
!
|
||||
ELSE IF (lmovecell.and.lcheck_cell) THEN
|
||||
IF ( lsda .AND. absmag < eps6 ) THEN
|
||||
!
|
||||
! ... a final configuration with zero absolute magnetization
|
||||
! ... has been found - do check with nonzero magnetization
|
||||
!
|
||||
ions_status = 2
|
||||
!
|
||||
ELSE IF ( lmovecell ) THEN
|
||||
!
|
||||
! ... Variable-cell relaxation converged with starting cell
|
||||
! ... Do final calculation with G-vectors for relaxed cell
|
||||
!
|
||||
ions_status = 1
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
! ... Fixed-cell relaxation converged, prepare to exit
|
||||
!
|
||||
ions_status = 0
|
||||
!
|
||||
END IF
|
||||
!
|
||||
! After the cell relaxation we make a final calculation
|
||||
! with the correct g vectors corresponding to the relaxed
|
||||
! cell.
|
||||
ELSE IF ( ions_status == 2 ) THEN
|
||||
!
|
||||
final_cell_calculation=.TRUE.
|
||||
CALL terminate_bfgs ( etot, epse, epsf, epsp, lmovecell, &
|
||||
stdout, tmp_dir )
|
||||
! ... check with nonzero magnetization succeeded, see above
|
||||
!
|
||||
ELSE
|
||||
IF ( lmovecell ) THEN
|
||||
ions_status = 1
|
||||
ELSE
|
||||
ions_status = 0
|
||||
END IF
|
||||
!
|
||||
ELSE IF ( ions_status == 1 ) THEN
|
||||
!
|
||||
ions_status = 0
|
||||
!
|
||||
END IF
|
||||
!
|
||||
IF ( ions_status < 2 ) THEN
|
||||
!
|
||||
CALL terminate_bfgs ( etot, epse, epsf, epsp, lmovecell, &
|
||||
stdout, tmp_dir )
|
||||
|
@ -175,13 +185,13 @@ SUBROUTINE move_ions ( idone )
|
|||
! ... FCP output
|
||||
!
|
||||
IF ( lfcpopt ) THEN
|
||||
WRITE( stdout, '(/,5X, "FCP Optimisation : converged ", &
|
||||
& "( criteria force < ",ES8.1," )")') fcp_relax_crit
|
||||
WRITE( stdout, '(5X,"FCP Optimisation : tot_charge =",F12.6,/)') &
|
||||
SUM( zv(ityp(1:nat)) ) - nelec
|
||||
IF ( TRIM(fcp_relax) == 'mdiis' ) THEN
|
||||
CALL fcp_mdiis_end()
|
||||
END IF
|
||||
WRITE( stdout, '(/,5X, "FCP Optimisation : converged ", &
|
||||
& "( criteria force < ",ES8.1," )")') fcp_relax_crit
|
||||
WRITE( stdout, '(5X,"FCP Optimisation : tot_charge =",F12.6,/)') &
|
||||
SUM( zv(ityp(1:nat)) ) - nelec
|
||||
IF ( TRIM(fcp_relax) == 'mdiis' ) THEN
|
||||
CALL fcp_mdiis_end()
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
ELSE
|
||||
|
@ -205,13 +215,6 @@ SUBROUTINE move_ions ( idone )
|
|||
'(5X,"new conv_thr",T30,"= ",1PE18.1 ," Ry",/)' ) tr2
|
||||
END IF
|
||||
!
|
||||
! ... the logical flag lcheck_mag is set again to .TRUE. (needed if
|
||||
! ... a new configuration with zero absolute magnetization is
|
||||
! ... identified in the following steps of the relaxation)
|
||||
!
|
||||
lcheck_mag = .TRUE.
|
||||
IF (lmovecell) lcheck_cell = .TRUE.
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL output_tau( lmovecell, conv_ions )
|
||||
|
@ -220,9 +223,9 @@ SUBROUTINE move_ions ( idone )
|
|||
!
|
||||
END IF bfgs_minimization
|
||||
!
|
||||
! ... molecular dynamics schemes are used
|
||||
!
|
||||
IF ( lmd ) THEN
|
||||
!
|
||||
conv_ions = .FALSE.
|
||||
!
|
||||
! ... fixed-cell molecular dynamics algorithms first:
|
||||
! ... projected Verlet, Langevin, Verlet
|
||||
|
@ -307,6 +310,8 @@ SUBROUTINE move_ions ( idone )
|
|||
!
|
||||
END IF
|
||||
!
|
||||
IF ( conv_ions ) ions_status = 0
|
||||
!
|
||||
END IF
|
||||
!
|
||||
! ... before leaving check that the new positions still transform
|
||||
|
@ -315,73 +320,11 @@ SUBROUTINE move_ions ( idone )
|
|||
CALL checkallsym( nat, tau, ityp)
|
||||
!
|
||||
END IF
|
||||
|
||||
CALL mp_bcast(restart_with_starting_magnetiz,ionode_id,intra_image_comm)
|
||||
CALL mp_bcast(final_cell_calculation,ionode_id,intra_image_comm)
|
||||
!
|
||||
|
||||
CALL mp_bcast( ions_status, ionode_id, intra_image_comm )
|
||||
IF ( lfcpopt .or. lfcpdyn ) CALL mp_bcast(nelec,ionode_id,intra_image_comm)
|
||||
!
|
||||
IF ( final_cell_calculation ) THEN
|
||||
!
|
||||
! ... Variable-cell optimization: once convergence is achieved,
|
||||
! ... make a final calculation with G-vectors and plane waves
|
||||
! ... calculated for the final cell (may differ from the current
|
||||
! ... result, using G_vectors and PWs for the starting cell)
|
||||
!
|
||||
WRITE( UNIT = stdout, FMT = 9110 )
|
||||
WRITE( UNIT = stdout, FMT = 9120 )
|
||||
!
|
||||
! ... prepare for a new run, restarted from scratch, not from previous
|
||||
! ... data (dimensions and file lengths will be different in general)
|
||||
!
|
||||
! ... get magnetic moments from previous run before charge is deleted
|
||||
!
|
||||
CALL reset_starting_magnetization ( )
|
||||
!
|
||||
CALL clean_pw( .FALSE. )
|
||||
CALL close_files(.TRUE.)
|
||||
lmovecell=.FALSE.
|
||||
lcheck_cell=.FALSE.
|
||||
final_cell_calculation=.FALSE.
|
||||
lbfgs=.FALSE.
|
||||
lmd=.FALSE.
|
||||
lcheck_mag = .FALSE.
|
||||
restart_with_starting_magnetiz = .FALSE.
|
||||
if (trim(starting_wfc) == 'file') starting_wfc = 'atomic+random'
|
||||
starting_pot='atomic'
|
||||
! ... conv_ions is set to .FALSE. to perform a final scf cycle
|
||||
conv_ions = .FALSE.
|
||||
!
|
||||
! ... re-set and re-calculate FFT grid
|
||||
!
|
||||
dfftp%nr1=0; dfftp%nr2=0; dfftp%nr3=0
|
||||
CALL fft_type_allocate (dfftp, at, bg, gcutm, intra_bgrp_comm, nyfft=nyfft)
|
||||
dffts%nr1=0; dffts%nr2=0; dffts%nr3=0
|
||||
CALL fft_type_allocate (dffts, at, bg, gcutms,intra_bgrp_comm, nyfft=nyfft)
|
||||
!
|
||||
CALL init_run()
|
||||
!
|
||||
ELSE IF (restart_with_starting_magnetiz) THEN
|
||||
!
|
||||
! ... lsda optimization : a final configuration with zero
|
||||
! ... absolute magnetization has been found and we check
|
||||
! ... if it is really the minimum energy structure by
|
||||
! ... performing a new scf iteration without any "electronic" history
|
||||
!
|
||||
WRITE( UNIT = stdout, FMT = 9010 )
|
||||
WRITE( UNIT = stdout, FMT = 9020 )
|
||||
!
|
||||
lcheck_mag = .FALSE.
|
||||
restart_with_starting_magnetiz = .FALSE.
|
||||
! ... conv_ions is set to .FALSE. to perform a final scf cycle
|
||||
conv_ions = .FALSE.
|
||||
!
|
||||
! ... re-initialize the potential (no need to re-initialize wavefunctions)
|
||||
!
|
||||
CALL potinit()
|
||||
CALL newd()
|
||||
!!! CALL wfcinit()
|
||||
!
|
||||
END IF
|
||||
!
|
||||
! ... broadcast calculated quantities to all nodes
|
||||
!
|
||||
|
@ -389,7 +332,6 @@ SUBROUTINE move_ions ( idone )
|
|||
CALL mp_bcast( tau, ionode_id, intra_image_comm )
|
||||
CALL mp_bcast( force, ionode_id, intra_image_comm )
|
||||
CALL mp_bcast( tr2, ionode_id, intra_image_comm )
|
||||
CALL mp_bcast( conv_ions, ionode_id, intra_image_comm )
|
||||
!
|
||||
IF ( lmovecell ) THEN
|
||||
!
|
||||
|
@ -402,85 +344,5 @@ SUBROUTINE move_ions ( idone )
|
|||
END IF
|
||||
!
|
||||
RETURN
|
||||
|
||||
9010 FORMAT( /5X,'lsda relaxation : a final configuration with zero', &
|
||||
& /5X,' absolute magnetization has been found' )
|
||||
9020 FORMAT( /5X,'the program is checking if it is really ', &
|
||||
& 'the minimum energy structure', &
|
||||
& /5X,'by performing a new scf iteration ', &
|
||||
& 'without any "electronic" history' )
|
||||
!
|
||||
9110 FORMAT( /5X,'A final scf calculation at the relaxed structure.' )
|
||||
9120 FORMAT( 5X,'The G-vectors are recalculated for the final unit cell'/ &
|
||||
5X,'Results may differ from those at the preceding step.' )
|
||||
!
|
||||
END SUBROUTINE move_ions
|
||||
!
|
||||
SUBROUTINE reset_starting_magnetization ( )
|
||||
!
|
||||
! On input, the scf charge density is needed
|
||||
! On output, new values for starting_magnetization, angle1, angle2
|
||||
! estimated from atomic magnetic moments - to be used in last step
|
||||
!
|
||||
USE kinds, ONLY : dp
|
||||
USE constants, ONLY : pi
|
||||
USE ions_base, ONLY : nsp, ityp, nat
|
||||
USE lsda_mod, ONLY : nspin, starting_magnetization
|
||||
USE scf, ONLY : rho
|
||||
USE spin_orb, ONLY : domag
|
||||
USE noncollin_module, ONLY : noncolin, angle1, angle2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
INTEGER :: i, nt, iat
|
||||
REAL(dp):: norm_tot, norm_xy, theta, phi
|
||||
REAL (DP), ALLOCATABLE :: r_loc(:), m_loc(:,:)
|
||||
!
|
||||
IF ( (noncolin .AND. domag) .OR. nspin==2) THEN
|
||||
ALLOCATE ( r_loc(nat), m_loc(nspin-1,nat) )
|
||||
CALL get_locals(r_loc,m_loc,rho%of_r)
|
||||
ELSE
|
||||
RETURN
|
||||
END IF
|
||||
DO i = 1, nsp
|
||||
!
|
||||
starting_magnetization(i) = 0.0_DP
|
||||
angle1(i) = 0.0_DP
|
||||
angle2(i) = 0.0_DP
|
||||
nt = 0
|
||||
DO iat = 1, nat
|
||||
IF (ityp(iat) == i) THEN
|
||||
nt = nt + 1
|
||||
IF (noncolin) THEN
|
||||
norm_tot= sqrt(m_loc(1,iat)**2+m_loc(2,iat)**2+m_loc(3,iat)**2)
|
||||
norm_xy = sqrt(m_loc(1,iat)**2+m_loc(2,iat)**2)
|
||||
IF (norm_tot > 1.d-10) THEN
|
||||
theta = acos(m_loc(3,iat)/norm_tot)
|
||||
IF (norm_xy > 1.d-10) THEN
|
||||
phi = acos(m_loc(1,iat)/norm_xy)
|
||||
IF (m_loc(2,iat).lt.0.d0) phi = - phi
|
||||
ELSE
|
||||
phi = 2.d0*pi
|
||||
END IF
|
||||
ELSE
|
||||
theta = 2.d0*pi
|
||||
phi = 2.d0*pi
|
||||
END IF
|
||||
angle1(i) = angle1(i) + theta
|
||||
angle2(i) = angle2(i) + phi
|
||||
starting_magnetization(i) = starting_magnetization(i) + &
|
||||
norm_tot/r_loc(iat)
|
||||
ELSE
|
||||
starting_magnetization(i) = starting_magnetization(i) + &
|
||||
m_loc(1,iat)/r_loc(iat)
|
||||
END IF
|
||||
END IF
|
||||
END DO
|
||||
IF ( nt > 0 ) THEN
|
||||
starting_magnetization(i) = starting_magnetization(i) / DBLE(nt)
|
||||
angle1(i) = angle1(i) / DBLE(nt)
|
||||
angle2(i) = angle2(i) / DBLE(nt)
|
||||
END IF
|
||||
END DO
|
||||
DEALLOCATE ( r_loc, m_loc )
|
||||
|
||||
END SUBROUTINE reset_starting_magnetization
|
||||
|
|
|
@ -55,7 +55,8 @@
|
|||
lberry,nppstr,nberrycyc, &
|
||||
nconstr_inp, nc_fields, constr_type_inp, constr_target_inp, constr_inp, tconstr, &
|
||||
constr_tol_inp, constrained_magnetization, lambda, fixed_magnetization, input_dft, &
|
||||
tf_inp, ip_ibrav => ibrav
|
||||
tf_inp, ip_ibrav => ibrav, &
|
||||
gate, zgate, relaxz, block, block_1, block_2, block_height
|
||||
!
|
||||
USE fixed_occ, ONLY: f_inp
|
||||
|
||||
|
@ -91,8 +92,13 @@
|
|||
CHARACTER(len=20) :: dft_shortname
|
||||
CHARACTER(len=25) :: dft_longname
|
||||
CHARACTER(LEN=80) :: vdw_corr_
|
||||
LOGICAL,TARGET :: gate_tgt, block_tgt, relaxz_tgt
|
||||
LOGICAL,POINTER :: gate_ptr, block_ptr, relaxz_ptr
|
||||
REAL(DP),TARGET :: block_1_tgt, block_2_tgt, block_height_tgt, zgate_tgt
|
||||
REAL(DP),POINTER :: block_1_ptr, block_2_ptr, block_height_ptr, zgate_ptr
|
||||
!
|
||||
!
|
||||
NULLIFY (gate_ptr, block_ptr, relaxz_ptr, block_1_ptr, block_2_ptr, block_height_ptr, zgate_ptr)
|
||||
#if !defined(__OLDXML)
|
||||
obj%tagname=TRIM(obj_tagname)
|
||||
IF ( ABS(ip_ibrav) .GT. 0 ) THEN
|
||||
|
@ -332,10 +338,28 @@
|
|||
!-------------------------------------------------------------------------------------------------------------------------------
|
||||
! ELECTRIC FIELD
|
||||
!---------------------------------------------------------------------------------------------------------------------------
|
||||
IF (tefield .OR. lelfield .OR. lberry ) THEN
|
||||
IF (tefield .OR. lelfield .OR. lberry .or. gate ) THEN
|
||||
obj%electric_field_ispresent=.TRUE.
|
||||
CALL qexsd_init_electric_field_input(obj%electric_field, tefield, dipfield, lelfield, lberry, edir, gdir, &
|
||||
emaxpos, eopreg, eamp, efield, efield_cart, nberrycyc, nppstr )
|
||||
IF ( gate ) THEN
|
||||
gate_tgt = gate
|
||||
gate_ptr => gate_tgt
|
||||
zgate_tgt = zgate
|
||||
zgate_ptr => zgate_tgt
|
||||
block_tgt = block
|
||||
block_ptr => block_tgt
|
||||
block_1_tgt = block_1
|
||||
block_1_ptr => block_1_tgt
|
||||
block_2_tgt = block_2
|
||||
block_2_ptr => block_2_tgt
|
||||
block_height_tgt = block_height
|
||||
block_height_ptr => block_height_tgt
|
||||
relaxz_tgt = relaxz
|
||||
relaxz_ptr => relaxz_tgt
|
||||
END IF
|
||||
CALL qexsd_init_electric_field_input(obj%electric_field, tefield, dipfield, lelfield, lberry, &
|
||||
edir, gdir, emaxpos, eopreg, eamp, efield, efield_cart, nberrycyc, nppstr, &
|
||||
GATE = gate_ptr, ZGATE = zgate_ptr, RELAXZ = relaxz_ptr, BLOCK = block_ptr,&
|
||||
BLOCK_1 = block_1_ptr, BLOCK_2 = block_2_ptr, BLOCK_HEIGHT = block_height_ptr)
|
||||
ELSE
|
||||
obj%electric_field_ispresent=.FALSE.
|
||||
END IF
|
||||
|
|
|
@ -39,14 +39,15 @@ MODULE pw_restart
|
|||
qexml_read_bands_info, qexml_read_bands_pw, qexml_read_symmetry, &
|
||||
qexml_read_efield, qexml_read_para, qexml_read_exx, qexml_read_esm
|
||||
!
|
||||
USE xml_io_base, ONLY : rho_binary,read_wfc, write_wfc, create_directory
|
||||
USE xml_io_base, ONLY : rho_binary,read_wfc, write_wfc
|
||||
!
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE constants, ONLY : e2, PI
|
||||
!
|
||||
USE io_files, ONLY : tmp_dir, prefix, iunpun, xmlpun, delete_if_present, &
|
||||
qexml_version, qexml_version_init, pseudo_dir
|
||||
qexml_version, qexml_version_init, pseudo_dir, &
|
||||
create_directory
|
||||
!
|
||||
USE io_global, ONLY : ionode, ionode_id
|
||||
USE mp_images, ONLY : intra_image_comm
|
||||
|
|
|
@ -15,7 +15,8 @@ MODULE pw_restart_new
|
|||
! ... the wavefunction files are written / read by one processor per pool,
|
||||
! ... collected on / distributed to all other processors in pool
|
||||
!
|
||||
USE qes_module
|
||||
USE KINDS, ONLY: DP
|
||||
USE qes_module
|
||||
USE qexsd_module, ONLY: qexsd_init_schema, qexsd_openschema, qexsd_closeschema, &
|
||||
qexsd_init_convergence_info, qexsd_init_algorithmic_info, &
|
||||
qexsd_init_atomic_species, qexsd_init_atomic_structure, &
|
||||
|
@ -25,7 +26,7 @@ MODULE pw_restart_new
|
|||
qexsd_init_forces,qexsd_init_stress, qexsd_xf, &
|
||||
qexsd_init_outputElectricField, &
|
||||
qexsd_input_obj, qexsd_occ_obj, qexsd_smear_obj, &
|
||||
qexsd_init_outputPBC
|
||||
qexsd_init_outputPBC, qexsd_init_gate_info
|
||||
USE io_global, ONLY : ionode, ionode_id
|
||||
USE io_files, ONLY : iunpun, xmlpun_schema, prefix, tmp_dir
|
||||
!
|
||||
|
@ -55,7 +56,7 @@ MODULE pw_restart_new
|
|||
USE global_version, ONLY : version_number
|
||||
USE cell_base, ONLY : at, bg, alat, ibrav
|
||||
USE gvect, ONLY : ig_l2g
|
||||
USE ions_base, ONLY : nsp, ityp, atm, nat, tau
|
||||
USE ions_base, ONLY : nsp, ityp, atm, nat, tau, zv
|
||||
USE noncollin_module, ONLY : noncolin, npol
|
||||
USE io_files, ONLY : nwordwfc, iunwfc, psfile
|
||||
USE buffers, ONLY : get_buffer
|
||||
|
@ -94,7 +95,7 @@ MODULE pw_restart_new
|
|||
USE extfield, ONLY : tefield, dipfield, edir, etotefield, &
|
||||
emaxpos, eopreg, eamp, el_dipole, ion_dipole,&
|
||||
gate, zgate, relaxz, block, block_1,&
|
||||
block_2, block_height ! TB
|
||||
block_2, block_height, etotgatefield ! TB
|
||||
USE mp, ONLY : mp_sum
|
||||
USE mp_bands, ONLY : intra_bgrp_comm
|
||||
USE funct, ONLY : get_exx_fraction, dft_is_hybrid, &
|
||||
|
@ -109,12 +110,12 @@ MODULE pw_restart_new
|
|||
USE input_parameters, ONLY : verbosity, calculation, ion_dynamics, starting_ns_eigenvalue, &
|
||||
vdw_corr, london, k_points, assume_isolated, &
|
||||
input_parameters_occupations => occupations
|
||||
USE bp, ONLY : lelfield, lberry, bp_mod_el_pol => el_pol, bp_mod_ion_pol => ion_pol
|
||||
USE bp, ONLY : lelfield, lberry, el_pol, ion_pol
|
||||
!
|
||||
USE rap_point_group, ONLY : elem, nelem, name_class
|
||||
USE rap_point_group_so, ONLY : elem_so, nelem_so, name_class_so
|
||||
USE bfgs_module, ONLY : bfgs_get_n_iter
|
||||
USE qexsd_module, ONLY : qexsd_dipol_obj, qexsd_bp_obj, qexsd_start_k_obj
|
||||
USE qexsd_module, ONLY : qexsd_bp_obj, qexsd_start_k_obj
|
||||
USE qexsd_input, ONLY : qexsd_init_k_points_ibz, qexsd_init_occupations, qexsd_init_smearing
|
||||
USE fcp_variables, ONLY : lfcpopt, lfcpdyn, fcp_mu
|
||||
USE io_files, ONLY : pseudo_dir
|
||||
|
@ -133,9 +134,20 @@ MODULE pw_restart_new
|
|||
LOGICAL :: opt_conv_ispresent
|
||||
INTEGER :: n_opt_steps, n_scf_steps_, h_band
|
||||
REAL(DP) :: h_energy
|
||||
TYPE(gateInfo_type),TARGET :: gate_info_temp
|
||||
TYPE(gateInfo_type),POINTER :: gate_info_ptr => NULL()
|
||||
TYPE(dipoleOutput_type),TARGET :: dipol_obj
|
||||
TYPE(dipoleOutput_type),POINTER :: dipol_ptr => NULL()
|
||||
TYPE(BerryPhaseOutput_type), POINTER :: bp_obj_ptr => NULL()
|
||||
!
|
||||
!
|
||||
!
|
||||
TYPE(output_type) :: output
|
||||
|
||||
REAL(DP),POINTER :: degauss_, demet_, efield_corr, potstat_corr, &
|
||||
gatefield_corr, bp_el_pol(:), bp_ion_pol(:)
|
||||
REAL(DP),TARGET :: temp(20)
|
||||
INTEGER :: itemp = 1
|
||||
NULLIFY( degauss_, demet_, efield_corr, potstat_corr, gatefield_corr, bp_el_pol, bp_ion_pol)
|
||||
!
|
||||
! PW dimensions need to be properly computed
|
||||
! reducing across MPI tasks
|
||||
|
@ -371,22 +383,43 @@ MODULE pw_restart_new
|
|||
! ... TOTAL ENERGY
|
||||
!-------------------------------------------------------------------------------------------
|
||||
!
|
||||
IF (tefield) THEN
|
||||
CALL qexsd_init_total_energy(output%total_energy,etot,eband,ehart,vtxc,etxc, &
|
||||
ewld, degauss ,demet , etotefield )
|
||||
ELSE
|
||||
CALL qexsd_init_total_energy(output%total_energy,etot,eband,ehart,vtxc,etxc, &
|
||||
ewld,degauss,demet)
|
||||
IF ( degauss > 0.0d0 ) THEN
|
||||
!
|
||||
itemp = itemp + 1
|
||||
temp(itemp) = degauss/e2
|
||||
degauss_ => temp(itemp)
|
||||
!
|
||||
itemp = itemp+1
|
||||
temp(itemp) = demet/e2
|
||||
demet_ => temp(itemp)
|
||||
END IF
|
||||
IF ( tefield ) THEN
|
||||
itemp = itemp+1
|
||||
temp(itemp) = etotefield/e2
|
||||
efield_corr => temp(itemp)
|
||||
END IF
|
||||
IF (lfcpopt .OR. lfcpdyn ) THEN
|
||||
output%total_energy%potentiostat_contr_ispresent = .TRUE.
|
||||
output%total_energy%potentiostat_contr = ef * tot_charge/e2
|
||||
itemp = itemp +1
|
||||
temp(itemp) = ef * tot_charge/e2
|
||||
potstat_corr => temp(itemp)
|
||||
output%FCP_tot_charge_ispresent = .TRUE.
|
||||
output%FCP_tot_charge = tot_charge
|
||||
output%FCP_force_ispresent = .TRUE.
|
||||
!FIXME ( decide what units to use here )
|
||||
output%FCP_force = fcp_mu - ef
|
||||
END IF
|
||||
IF ( gate) THEN
|
||||
itemp = itemp + 1
|
||||
temp(itemp) = etotgatefield/e2
|
||||
gatefield_corr => temp(itemp)
|
||||
END IF
|
||||
CALL qexsd_init_total_energy(output%total_energy, etot/e2, eband/e2, ehart/e2, vtxc/e2, &
|
||||
etxc/e2, ewld/e2, degauss_, demet_, efield_corr, potstat_corr,&
|
||||
gatefield_corr)
|
||||
!
|
||||
NULLIFY(degauss_, demet_, efield_corr, potstat_corr, gatefield_corr)
|
||||
itemp = 0
|
||||
!
|
||||
!---------------------------------------------------------------------------------------------
|
||||
! ... FORCES
|
||||
!----------------------------------------------------------------------------------------------
|
||||
|
@ -412,25 +445,44 @@ MODULE pw_restart_new
|
|||
!-------------------------------------------------------------------------------------------------
|
||||
! ... ELECTRIC FIELD
|
||||
!-------------------------------------------------------------------------------------------------
|
||||
IF ( lelfield ) THEN
|
||||
output%electric_field_ispresent = .TRUE.
|
||||
CALL qexsd_init_outputElectricField(output%electric_field, lelfield, tefield, dipfield, &
|
||||
lberry, el_pol = bp_mod_el_pol, ion_pol = bp_mod_ion_pol)
|
||||
ELSE IF ( lberry ) THEN
|
||||
output%electric_field_ispresent = .TRUE.
|
||||
CALL qexsd_init_outputElectricField(output%electric_field, lelfield, tefield, dipfield, &
|
||||
lberry, bp_obj=qexsd_bp_obj)
|
||||
ELSE IF ( tefield .AND. dipfield ) THEN
|
||||
output%electric_field_ispresent = .TRUE.
|
||||
CALL qexsd_init_dipole_info(qexsd_dipol_obj, el_dipole, ion_dipole, edir, eamp, &
|
||||
emaxpos, eopreg )
|
||||
qexsd_dipol_obj%tagname = "dipoleInfo"
|
||||
output%electric_field_ispresent = ( gate .OR. lelfield .OR. lberry .OR. tefield )
|
||||
|
||||
CALL qexsd_init_outputElectricField(output%electric_field, lelfield, tefield, dipfield, &
|
||||
lberry, dipole_obj = qexsd_dipol_obj )
|
||||
ELSE
|
||||
output%electric_field_ispresent = .FALSE.
|
||||
IF ( gate ) THEN
|
||||
CALL qexsd_init_gate_info(gate_info_temp,"gateInfo", etotgatefield/e2, zgate, nelec, &
|
||||
alat, at, bg, zv, ityp)
|
||||
gate_info_ptr => gate_info_temp
|
||||
END IF
|
||||
IF ( lelfield ) THEN
|
||||
itemp=itemp+1
|
||||
temp(itemp:itemp+2) = el_pol
|
||||
bp_el_pol => temp(itemp:itemp+2)
|
||||
itemp = (itemp + 2) + 1
|
||||
temp(itemp:itemp+2) = ion_pol(1:3)
|
||||
bp_ion_pol => temp(itemp:itemp+2)
|
||||
itemp = itemp + 2
|
||||
END IF
|
||||
IF ( tefield .AND. dipfield) THEN
|
||||
CALL qexsd_init_dipole_info(dipol_obj, el_dipole, ion_dipole, edir, eamp, &
|
||||
emaxpos, eopreg )
|
||||
dipol_ptr => dipol_obj
|
||||
END IF
|
||||
IF ( lberry ) bp_obj_ptr => bp_obj_ptr
|
||||
CALL qexsd_init_outputElectricField(output%electric_field, lelfield, tefield, dipfield, &
|
||||
lberry, BP_OBJ = bp_obj_ptr, EL_POL = bp_el_pol, ION_POL = bp_ion_pol, &
|
||||
GATEINFO = gate_info_ptr, DIPOLE_OBJ = dipol_ptr)
|
||||
!
|
||||
temp = 0
|
||||
IF (ASSOCIATED(gate_info_ptr)) THEN
|
||||
CALL qes_reset_gateInfo(gate_info_ptr)
|
||||
NULLIFY(gate_info_ptr)
|
||||
ENDIF
|
||||
NULLIFY( bp_el_pol, bp_ion_pol)
|
||||
IF (ASSOCIATED (dipol_ptr) ) THEN
|
||||
CALL qes_reset_dipoleOutput(dipol_ptr)
|
||||
NULLIFY(dipol_ptr)
|
||||
ENDIF
|
||||
NULLIFY ( bp_obj_ptr)
|
||||
|
||||
!------------------------------------------------------------------------------------------------
|
||||
! ... ACTUAL WRITING
|
||||
!-------------------------------------------------------------------------------
|
||||
|
@ -1002,7 +1054,7 @@ MODULE pw_restart_new
|
|||
CALL readschema_outputPBC ( output_obj%boundary_conditions)
|
||||
END IF
|
||||
!
|
||||
IF ( lefield .AND. lvalid_input ) CALL readschema_efield ( input_obj%electric_field)
|
||||
IF ( lefield .AND. lvalid_input ) CALL readschema_efield ( input_obj%electric_field )
|
||||
!
|
||||
IF ( lexx .AND. output_obj%dft%hybrid_ispresent ) CALL readschema_exx ( output_obj%dft%hybrid )
|
||||
!
|
||||
|
@ -1264,7 +1316,8 @@ MODULE pw_restart_new
|
|||
SUBROUTINE readschema_efield( efield_obj )
|
||||
!---------------------------------------------------------------------------
|
||||
!
|
||||
USE extfield, ONLY : tefield, dipfield, edir, emaxpos, eopreg, eamp
|
||||
USE extfield, ONLY : tefield, dipfield, edir, emaxpos, eopreg, eamp, gate, zgate, &
|
||||
block, block_1, block_2, block_height, relaxz
|
||||
!
|
||||
IMPLICIT NONE
|
||||
!
|
||||
|
@ -1301,6 +1354,16 @@ MODULE pw_restart_new
|
|||
ELSE
|
||||
eamp = 1.d-3
|
||||
END IF
|
||||
IF (efield_obj%gate_correction_ispresent) THEN
|
||||
gate = efield_obj%gate_correction%use_gate
|
||||
IF (efield_obj%gate_correction%zgate_ispresent) zgate = efield_obj%gate_correction%zgate
|
||||
IF (efield_obj%gate_correction%relaxz_ispresent) relaxz = efield_obj%gate_correction%relaxz
|
||||
IF (efield_obj%gate_correction%block_ispresent) block = efield_obj%gate_correction%block
|
||||
IF (efield_obj%gate_correction%block_1_ispresent) block_1 = efield_obj%gate_correction%block_1
|
||||
IF (efield_obj%gate_correction%block_2_ispresent) block_2 = efield_obj%gate_correction%block_2
|
||||
IF (efield_obj%gate_correction%block_height_ispresent) &
|
||||
block_height = efield_obj%gate_correction%block_height
|
||||
END IF
|
||||
END IF
|
||||
!
|
||||
END SUBROUTINE readschema_efield
|
||||
|
|
|
@ -56,7 +56,12 @@ SUBROUTINE run_pwscf ( exit_status )
|
|||
LOGICAL, external :: matches
|
||||
!! checks if first string is contained in the second
|
||||
INTEGER :: idone
|
||||
! counter of electronic + ionic steps done in this run
|
||||
!! counter of electronic + ionic steps done in this run
|
||||
INTEGER :: ions_status = 3
|
||||
!! ions_status = 3 not yet converged
|
||||
!! ions_status = 2 converged, restart with nonzero magnetization
|
||||
!! ions_status = 1 converged, final step with current cell needed
|
||||
!! ions_status = 0 converged, exiting
|
||||
!
|
||||
exit_status = 0
|
||||
IF ( ionode ) WRITE( unit = stdout, FMT = 9010 ) ntypx, npk, lmaxx
|
||||
|
@ -177,7 +182,8 @@ SUBROUTINE run_pwscf ( exit_status )
|
|||
!
|
||||
! ... ionic step (for molecular dynamics or optimization)
|
||||
!
|
||||
CALL move_ions ( idone )
|
||||
CALL move_ions ( idone, ions_status )
|
||||
conv_ions = ( ions_status == 0 )
|
||||
!
|
||||
! ... then we save restart information for the new configuration
|
||||
!
|
||||
|
@ -206,14 +212,31 @@ SUBROUTINE run_pwscf ( exit_status )
|
|||
!
|
||||
IF ( lmd .OR. lbfgs ) THEN
|
||||
!
|
||||
! ... update the wavefunctions, charge density, potential
|
||||
! ... update_pot initializes structure factor array as well
|
||||
IF ( ions_status == 1 ) THEN
|
||||
!
|
||||
! ... final scf calculation with G-vectors for final cell
|
||||
!
|
||||
CALL reset_gvectors ( )
|
||||
!
|
||||
ELSE IF ( ions_status == 2 ) THEN
|
||||
!
|
||||
! ... check whether nonzero magnetization is real
|
||||
!
|
||||
CALL reset_magn ( )
|
||||
!
|
||||
ELSE
|
||||
!
|
||||
! ... update the wavefunctions, charge density, potential
|
||||
! ... update_pot initializes structure factor array as well
|
||||
!
|
||||
CALL update_pot()
|
||||
!
|
||||
! ... re-initialize atomic position-dependent quantities
|
||||
!
|
||||
CALL hinit1()
|
||||
!
|
||||
END IF
|
||||
!
|
||||
CALL update_pot()
|
||||
!
|
||||
! ... re-initialize atomic position-dependent quantities
|
||||
!
|
||||
CALL hinit1()
|
||||
!
|
||||
END IF
|
||||
! ... Reset convergence threshold of iterative diagonalization for
|
||||
|
@ -239,3 +262,153 @@ SUBROUTINE run_pwscf ( exit_status )
|
|||
& /,5X,'Max angular momentum in pseudopotentials (lmaxx) = ',i2)
|
||||
!
|
||||
END SUBROUTINE run_pwscf
|
||||
|
||||
SUBROUTINE reset_gvectors ( )
|
||||
!
|
||||
! ... Variable-cell optimization: once convergence is achieved,
|
||||
! ... make a final calculation with G-vectors and plane waves
|
||||
! ... calculated for the final cell (may differ from the current
|
||||
! ... result, using G_vectors and PWs for the starting cell)
|
||||
!
|
||||
USE io_global, ONLY : stdout
|
||||
USE cellmd, ONLY : lmovecell
|
||||
USE basis, ONLY : starting_wfc, starting_pot
|
||||
USE cell_base, ONLY : at, bg
|
||||
USE fft_base, ONLY : dfftp
|
||||
USE fft_base, ONLY : dffts
|
||||
USE fft_types, ONLY : fft_type_allocate
|
||||
USE gvect, ONLY : gcutm
|
||||
USE gvecs, ONLY : gcutms
|
||||
USE mp_bands, ONLY : intra_bgrp_comm, nyfft
|
||||
USE control_flags, ONLY : lbfgs, lmd
|
||||
IMPLICIT NONE
|
||||
!
|
||||
WRITE( UNIT = stdout, FMT = 9110 )
|
||||
WRITE( UNIT = stdout, FMT = 9120 )
|
||||
!
|
||||
! ... prepare for a new scf, restarted from scratch, not from previous
|
||||
! ... data (dimensions and file lengths will be different in general)
|
||||
!
|
||||
! ... get magnetic moments from previous run before charge is deleted
|
||||
!
|
||||
CALL reset_starting_magnetization ( )
|
||||
!
|
||||
CALL clean_pw( .FALSE. )
|
||||
CALL close_files(.TRUE.)
|
||||
lmovecell=.FALSE.
|
||||
lbfgs=.FALSE.
|
||||
lmd=.FALSE.
|
||||
if (trim(starting_wfc) == 'file') starting_wfc = 'atomic+random'
|
||||
starting_pot='atomic'
|
||||
!
|
||||
! ... re-set and re-calculate FFT grid
|
||||
!
|
||||
dfftp%nr1=0; dfftp%nr2=0; dfftp%nr3=0
|
||||
CALL fft_type_allocate (dfftp, at, bg, gcutm, intra_bgrp_comm, nyfft=nyfft)
|
||||
dffts%nr1=0; dffts%nr2=0; dffts%nr3=0
|
||||
CALL fft_type_allocate (dffts, at, bg, gcutms,intra_bgrp_comm, nyfft=nyfft)
|
||||
!
|
||||
CALL init_run()
|
||||
!
|
||||
9110 FORMAT( /5X,'A final scf calculation at the relaxed structure.' )
|
||||
9120 FORMAT( 5X,'The G-vectors are recalculated for the final unit cell'/ &
|
||||
5X,'Results may differ from those at the preceding step.' )
|
||||
!
|
||||
END SUBROUTINE reset_gvectors
|
||||
|
||||
SUBROUTINE reset_magn ( )
|
||||
!
|
||||
! ... lsda optimization : a final configuration with zero
|
||||
! ... absolute magnetization has been found and we check
|
||||
! ... if it is really the minimum energy structure by
|
||||
! ... performing a new scf iteration without any "electronic" history
|
||||
!
|
||||
USE io_global, ONLY : stdout
|
||||
USE dfunct, ONLY : newd
|
||||
IMPLICIT NONE
|
||||
!
|
||||
WRITE( UNIT = stdout, FMT = 9010 )
|
||||
WRITE( UNIT = stdout, FMT = 9020 )
|
||||
!
|
||||
! ... re-initialize the potential (no need to re-initialize wavefunctions)
|
||||
!
|
||||
CALL potinit()
|
||||
CALL newd()
|
||||
|
||||
9010 FORMAT( /5X,'lsda relaxation : a final configuration with zero', &
|
||||
& /5X,' absolute magnetization has been found' )
|
||||
9020 FORMAT( /5X,'the program is checking if it is really ', &
|
||||
& 'the minimum energy structure', &
|
||||
& /5X,'by performing a new scf iteration ', &
|
||||
& 'without any "electronic" history' )
|
||||
!
|
||||
END SUBROUTINE reset_magn
|
||||
!
|
||||
SUBROUTINE reset_starting_magnetization ( )
|
||||
!
|
||||
! On input, the scf charge density is needed
|
||||
! On output, new values for starting_magnetization, angle1, angle2
|
||||
! estimated from atomic magnetic moments - to be used in last step
|
||||
!
|
||||
USE kinds, ONLY : dp
|
||||
USE constants, ONLY : pi
|
||||
USE ions_base, ONLY : nsp, ityp, nat
|
||||
USE lsda_mod, ONLY : nspin, starting_magnetization
|
||||
USE scf, ONLY : rho
|
||||
USE spin_orb, ONLY : domag
|
||||
USE noncollin_module, ONLY : noncolin, angle1, angle2
|
||||
!
|
||||
IMPLICIT NONE
|
||||
INTEGER :: i, nt, iat
|
||||
REAL(dp):: norm_tot, norm_xy, theta, phi
|
||||
REAL (DP), ALLOCATABLE :: r_loc(:), m_loc(:,:)
|
||||
!
|
||||
IF ( (noncolin .AND. domag) .OR. nspin==2) THEN
|
||||
ALLOCATE ( r_loc(nat), m_loc(nspin-1,nat) )
|
||||
CALL get_locals(r_loc,m_loc,rho%of_r)
|
||||
ELSE
|
||||
RETURN
|
||||
END IF
|
||||
DO i = 1, nsp
|
||||
!
|
||||
starting_magnetization(i) = 0.0_DP
|
||||
angle1(i) = 0.0_DP
|
||||
angle2(i) = 0.0_DP
|
||||
nt = 0
|
||||
DO iat = 1, nat
|
||||
IF (ityp(iat) == i) THEN
|
||||
nt = nt + 1
|
||||
IF (noncolin) THEN
|
||||
norm_tot= sqrt(m_loc(1,iat)**2+m_loc(2,iat)**2+m_loc(3,iat)**2)
|
||||
norm_xy = sqrt(m_loc(1,iat)**2+m_loc(2,iat)**2)
|
||||
IF (norm_tot > 1.d-10) THEN
|
||||
theta = acos(m_loc(3,iat)/norm_tot)
|
||||
IF (norm_xy > 1.d-10) THEN
|
||||
phi = acos(m_loc(1,iat)/norm_xy)
|
||||
IF (m_loc(2,iat).lt.0.d0) phi = - phi
|
||||
ELSE
|
||||
phi = 2.d0*pi
|
||||
END IF
|
||||
ELSE
|
||||
theta = 2.d0*pi
|
||||
phi = 2.d0*pi
|
||||
END IF
|
||||
angle1(i) = angle1(i) + theta
|
||||
angle2(i) = angle2(i) + phi
|
||||
starting_magnetization(i) = starting_magnetization(i) + &
|
||||
norm_tot/r_loc(iat)
|
||||
ELSE
|
||||
starting_magnetization(i) = starting_magnetization(i) + &
|
||||
m_loc(1,iat)/r_loc(iat)
|
||||
END IF
|
||||
END IF
|
||||
END DO
|
||||
IF ( nt > 0 ) THEN
|
||||
starting_magnetization(i) = starting_magnetization(i) / DBLE(nt)
|
||||
angle1(i) = angle1(i) / DBLE(nt)
|
||||
angle2(i) = angle2(i) / DBLE(nt)
|
||||
END IF
|
||||
END DO
|
||||
DEALLOCATE ( r_loc, m_loc )
|
||||
|
||||
END SUBROUTINE reset_starting_magnetization
|
||||
|
|
|
@ -102,13 +102,13 @@ SUBROUTINE setup()
|
|||
REAL(DP) :: iocc, ionic_charge, one
|
||||
!
|
||||
LOGICAL, EXTERNAL :: check_para_diag
|
||||
!
|
||||
!
|
||||
#if !defined(__OLDXML)
|
||||
TYPE(output_type) :: output_obj
|
||||
TYPE(parallel_info_type) :: parinfo_obj
|
||||
TYPE(general_info_type) :: geninfo_obj
|
||||
#endif
|
||||
!
|
||||
!
|
||||
#if defined(__MPI)
|
||||
LOGICAL :: lpara = .true.
|
||||
#else
|
||||
|
@ -404,11 +404,7 @@ SUBROUTINE setup()
|
|||
nbndx = nbnd
|
||||
IF ( isolve == 0 ) nbndx = david * nbnd
|
||||
!
|
||||
#if defined(__MPI)
|
||||
use_para_diag = check_para_diag( nbnd )
|
||||
#else
|
||||
use_para_diag = .FALSE.
|
||||
#endif
|
||||
!
|
||||
! ... Set the units in real and reciprocal space
|
||||
!
|
||||
|
@ -684,10 +680,11 @@ LOGICAL FUNCTION check_para_diag( nbnd )
|
|||
LOGICAL, SAVE :: first = .TRUE.
|
||||
LOGICAL, SAVE :: saved_value = .FALSE.
|
||||
|
||||
IF( .NOT. first ) then
|
||||
#if defined(__MPI)
|
||||
IF( .NOT. first ) THEN
|
||||
check_para_diag = saved_value
|
||||
RETURN
|
||||
end if
|
||||
END IF
|
||||
first = .FALSE.
|
||||
!
|
||||
IF( np_ortho(1) > nbnd ) &
|
||||
|
@ -727,5 +724,8 @@ LOGICAL FUNCTION check_para_diag( nbnd )
|
|||
!
|
||||
END IF
|
||||
!
|
||||
#else
|
||||
check_para_diag = .FALSE.
|
||||
#endif
|
||||
RETURN
|
||||
END FUNCTION check_para_diag
|
||||
|
|
|
@ -11,7 +11,7 @@ subroutine stres_cc (sigmaxcc)
|
|||
!-----------------------------------------------------------------------
|
||||
!
|
||||
USE kinds, ONLY : DP
|
||||
USE atom, ONLY : rgrid
|
||||
USE atom, ONLY : rgrid, msh
|
||||
USE uspp_param, ONLY : upf
|
||||
USE ions_base, ONLY : ntyp => nsp
|
||||
USE cell_base, ONLY : alat, omega, tpiba, tpiba2
|
||||
|
@ -71,7 +71,7 @@ subroutine stres_cc (sigmaxcc)
|
|||
end if
|
||||
do nt = 1, ntyp
|
||||
if ( upf(nt)%nlcc ) then
|
||||
call drhoc (ngl, gl, omega, tpiba2, rgrid(nt)%mesh, rgrid(nt)%r, &
|
||||
call drhoc (ngl, gl, omega, tpiba2, msh(nt), rgrid(nt)%r, &
|
||||
rgrid(nt)%rab, upf(nt)%rho_atc, rhocg)
|
||||
! diagonal term
|
||||
if (gstart==2) sigmadiag = sigmadiag + &
|
||||
|
@ -81,7 +81,7 @@ subroutine stres_cc (sigmaxcc)
|
|||
strf (ng,nt) * rhocg (igtongl (ng) ) * fact
|
||||
enddo
|
||||
|
||||
call deriv_drhoc (ngl, gl, omega, tpiba2, rgrid(nt)%mesh, &
|
||||
call deriv_drhoc (ngl, gl, omega, tpiba2, msh(nt), &
|
||||
rgrid(nt)%r, rgrid(nt)%rab, upf(nt)%rho_atc, rhocg)
|
||||
! non diagonal term (g=0 contribution missing)
|
||||
do ng = gstart, ngm
|
||||
|
|
|
@ -80,9 +80,10 @@ SUBROUTINE lr_readin
|
|||
! Fine control of beta_gamma_z file
|
||||
CHARACTER(LEN=80) :: disk_io
|
||||
! Specify the amount of I/O activities
|
||||
CHARACTER(LEN=6) :: int_to_char
|
||||
INTEGER :: ios, iunout, ierr, ipol
|
||||
LOGICAL :: auto_rs
|
||||
CHARACTER(LEN=6) :: int_to_char
|
||||
LOGICAL, EXTERNAL :: check_para_diag
|
||||
!
|
||||
NAMELIST / lr_input / restart, restart_step ,lr_verbosity, prefix, outdir, &
|
||||
& test_case_no, wfcdir, disk_io, max_seconds
|
||||
|
@ -516,12 +517,7 @@ SUBROUTINE lr_readin
|
|||
!
|
||||
! Scalapack related stuff.
|
||||
!
|
||||
#if defined(__MPI)
|
||||
use_para_diag = .TRUE.
|
||||
CALL check_para_diag( nbnd )
|
||||
#else
|
||||
use_para_diag = .FALSE.
|
||||
#endif
|
||||
use_para_diag = check_para_diag( nbnd )
|
||||
!
|
||||
RETURN
|
||||
!
|
||||
|
|
|
@ -45,6 +45,7 @@ SUBROUTINE lr_setup_nscf ()
|
|||
IMPLICIT NONE
|
||||
!
|
||||
LOGICAL :: magnetic_sym
|
||||
LOGICAL, EXTERNAL :: check_para_diag
|
||||
!
|
||||
CALL start_clock( 'lr_setup_nscf' )
|
||||
!
|
||||
|
@ -62,11 +63,7 @@ SUBROUTINE lr_setup_nscf ()
|
|||
max_cg_iter = 20
|
||||
natomwfc = n_atom_wfc( nat, ityp, noncolin )
|
||||
!
|
||||
#if defined(__MPI)
|
||||
IF ( use_para_diag ) CALL check_para_diag( nbnd )
|
||||
#else
|
||||
use_para_diag = .FALSE.
|
||||
#endif
|
||||
use_para_diag = check_para_diag( nbnd )
|
||||
!
|
||||
! Symmetry section
|
||||
!
|
||||
|
|
|
@ -24,7 +24,7 @@ contains
|
|||
DIMENSION Q(100,100)
|
||||
DOUBLE PRECISION CG
|
||||
DOUBLE PRECISION AJ,BJ,CJ,AM,BM,CM
|
||||
INTEGER ZZ
|
||||
INTEGER ZZ,I,I2,IP,JA,JA2,JB,JB2,JC,JC2,K,K0,K1,LA,LB,LC,LD,LT,MA,MB,MC
|
||||
ZZ=MAX(2*AJ+1,2*BJ+1,2*CJ+1,AJ+BJ+CJ,AJ+AM,BJ+BM,CJ+CM)+2
|
||||
DO 2 I=1,ZZ
|
||||
Q(I,1)=1.D0
|
||||
|
@ -92,9 +92,10 @@ contains
|
|||
real(kind=DP) function cgc(l1,l2,l3,m1,m2)
|
||||
|
||||
implicit real(kind=dp) (a-h,o-z)
|
||||
|
||||
integer :: l1,l2,l3,m1,m2
|
||||
integer :: m3,i,nff,nmin,i1,id,inum,j,j0,jm,n,n1,nfac,nmax,ntemp,nu
|
||||
real(dp) :: ff
|
||||
integer, dimension(5):: nd, num
|
||||
|
||||
cgc = 0.d0
|
||||
|
||||
m3 = m1 + m2
|
||||
|
|
|
@ -0,0 +1,256 @@
|
|||
|
||||
``:oss/
|
||||
`.+s+. .+ys--yh+ `./ss+.
|
||||
-sh//yy+` +yy +yy -+h+-oyy
|
||||
-yh- .oyy/.-sh. .syo-.:sy- /yh
|
||||
`.-.` `yh+ -oyyyo. `/syys: oys `.`
|
||||
`/+ssys+-` `sh+ ` oys` .:osyo`
|
||||
-yh- ./syyooyo` .sys+/oyo--yh/
|
||||
`yy+ .-:-. `-/+/:` -sh-
|
||||
/yh. oys
|
||||
``..---hho---------` .---------..` `.-----.` -hd+---.
|
||||
`./osmNMMMMMMMMMMMMMMMs. +NNMMMMMMMMNNmh+. yNMMMMMNm- oNMMMMMNmo++:`
|
||||
+sy--/sdMMMhyyyyyyyNMMh- .oyNMMmyyyyyhNMMm+` -yMMMdyyo:` .oyyNMMNhs+syy`
|
||||
-yy/ /MMM+.`-+/``mMMy- `mMMh:`````.dMMN:` `MMMy-`-dhhy```mMMy:``+hs
|
||||
-yy+` /MMMo:-mMM+`-oo/. mMMh: `dMMN/` dMMm:`dMMMMy..MMMo-.+yo`
|
||||
.sys`/MMMMNNMMMs- mMMmyooooymMMNo: oMMM/sMMMMMM++MMN//oh:
|
||||
`sh+/MMMhyyMMMs- `-` mMMMMMMMMMNmy+-` -MMMhMMMsmMMmdMMd/yy+
|
||||
`-/+++oyy-/MMM+.`/hh/.`mNm:` mMMd+/////:-.` NMMMMMd/:NMMMMMy:/yyo/:.`
|
||||
+os+//:-..-oMMMo:--:::-/MMMo. .-mMMd+---` hMMMMN+. oMMMMMo. `-+osyso:`
|
||||
syo `mNMMMMMNNNNNNNNMMMo.oNNMMMMMNNNN:` +MMMMs:` dMMMN/` ``:syo
|
||||
/yh` :syyyyyyyyyyyyyyyy+.`+syyyyyyyyo:` .oyys:` .oyys:` +yh
|
||||
-yh- ```````````````` ````````` `` `` oys
|
||||
-+h/------------------------::::::::://////++++++++++++++++++++++///////::::/yd:
|
||||
shdddddddddddddddddddddddddddddhhhhhhhhyyyyyssssssssssssssssyyyyyyyhhhhhhhddddh`
|
||||
|
||||
S. Ponce, E. R. Margine, C. Verdi, and F. Giustino,
|
||||
Comput. Phys. Commun. 209, 116 (2016)
|
||||
|
||||
|
||||
Program EPW v.5.0.0 starts on 10Apr2018 at 12:43: 5
|
||||
|
||||
This program is part of the open-source Quantum ESPRESSO suite
|
||||
for quantum simulation of materials; please cite
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
|
||||
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
|
||||
URL http://www.quantum-espresso.org",
|
||||
in publications or presentations arising from this work. More details at
|
||||
http://www.quantum-espresso.org/quote
|
||||
|
||||
Parallel version (MPI), running on 4 processors
|
||||
|
||||
MPI processes distributed on 1 nodes
|
||||
K-points division: npool = 4
|
||||
|
||||
------------------------------------------------------------------------
|
||||
RESTART - RESTART - RESTART - RESTART
|
||||
Restart is done without reading PWSCF save file.
|
||||
Be aware that some consistency checks are therefore not done.
|
||||
------------------------------------------------------------------------
|
||||
|
||||
|
||||
--
|
||||
|
||||
bravais-lattice index = 0
|
||||
lattice parameter (a_0) = 0.0000 a.u.
|
||||
unit-cell volume = 0.0000 (a.u.)^3
|
||||
number of atoms/cell = 0
|
||||
number of atomic types = 0
|
||||
kinetic-energy cut-off = 0.0000 Ry
|
||||
charge density cut-off = 0.0000 Ry
|
||||
convergence threshold = 0.0E+00
|
||||
beta = 0.0000
|
||||
number of iterations used = 0
|
||||
Exchange-correlation = not set (-1 -1 -1 -1-1-1)
|
||||
|
||||
|
||||
celldm(1)= 0.00000 celldm(2)= 0.00000 celldm(3)= 0.00000
|
||||
celldm(4)= 0.00000 celldm(5)= 0.00000 celldm(6)= 0.00000
|
||||
|
||||
crystal axes: (cart. coord. in units of a_0)
|
||||
a(1) = ( 0.0000 0.0000 0.0000 )
|
||||
a(2) = ( 0.0000 0.0000 0.0000 )
|
||||
a(3) = ( 0.0000 0.0000 0.0000 )
|
||||
|
||||
reciprocal axes: (cart. coord. in units 2 pi/a_0)
|
||||
b(1) = ( 0.0000 0.0000 0.0000 )
|
||||
b(2) = ( 0.0000 0.0000 0.0000 )
|
||||
b(3) = ( 0.0000 0.0000 0.0000 )
|
||||
|
||||
|
||||
Atoms inside the unit cell:
|
||||
|
||||
Cartesian axes
|
||||
|
||||
site n. atom mass positions (a_0 units)
|
||||
|
||||
|
||||
No symmetry!
|
||||
|
||||
G cutoff = 0.0000 ( 0 G-vectors) FFT grid: ( 0, 0, 0)
|
||||
number of k points= 0
|
||||
cart. coord. in units 2pi/a_0
|
||||
EPW : 0.00s CPU 0.00s WALL
|
||||
|
||||
EPW : 0.00s CPU 0.00s WALL
|
||||
|
||||
No wavefunction gauge setting applied
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Using si.ukk from disk
|
||||
-------------------------------------------------------------------
|
||||
|
||||
|
||||
Using kmap and kgmap from disk
|
||||
|
||||
Do not need to read .epb files; read .fmt files
|
||||
|
||||
|
||||
band disentanglement is used: nbndsub = 16
|
||||
|
||||
Reading Hamiltonian, Dynamical matrix and EP vertex in Wann rep from file
|
||||
|
||||
|
||||
Reading interatomic force constants
|
||||
|
||||
IFC last -0.0032722
|
||||
Norm of the difference between old and new effective charges: 0.0000000
|
||||
Norm of the difference between old and new force-constants: 0.0000023
|
||||
Imposed crystal ASR
|
||||
|
||||
Finished reading ifcs
|
||||
|
||||
|
||||
Finished reading Wann rep data from file
|
||||
|
||||
===================================================================
|
||||
Memory usage: VmHWM = 14Mb
|
||||
VmPeak = 359Mb
|
||||
===================================================================
|
||||
|
||||
Using uniform q-mesh: 4 4 4
|
||||
Size of q point mesh for interpolation: 64
|
||||
Using uniform k-mesh: 8 8 8
|
||||
Size of k point mesh for interpolation: 1024
|
||||
Max number of k points per pool: 256
|
||||
|
||||
Fermi energy coarse grid = 0.000000 eV
|
||||
|
||||
===================================================================
|
||||
|
||||
Fermi energy is read from the input file: Ef = 6.800000 eV
|
||||
|
||||
===================================================================
|
||||
|
||||
ibndmin = 3 ebndmin = 0.209
|
||||
ibndmax = 16 ebndmax = 0.793
|
||||
|
||||
|
||||
Number of ep-matrix elements per pool : 150528 ~= 1.15 Mb (@ 8 bytes/ DP)
|
||||
Applying a scissor shift of 0.70000 eV to the conduction states
|
||||
|
||||
===================================================================
|
||||
Phonon-assisted absorption
|
||||
===================================================================
|
||||
|
||||
|
||||
Fermi Surface thickness = 4.000000 eV
|
||||
|
||||
Temperature T = 0.025852 eV
|
||||
Progression iq (fine) = 50/ 64
|
||||
|
||||
Phonon-assisted absorption coefficient versus energy
|
||||
Photon energy (eV), absorption coefficient (cm-1) along x,y,z
|
||||
0.050000 0.17077416095986E-09 0.17124010728431E-09 0.17673940085667E-09 (cm-1)
|
||||
0.100000 0.28769097040069E-09 0.28814985763419E-09 0.29713613584492E-09 (cm-1)
|
||||
0.150000 0.62044218212473E-09 0.62140875263981E-09 0.63987816572255E-09 (cm-1)
|
||||
0.200000 0.14634872674721E-08 0.14651357085749E-08 0.15079214927070E-08 (cm-1)
|
||||
0.250000 0.35874936488580E-08 0.35911103615029E-08 0.36947988895202E-08 (cm-1)
|
||||
0.300000 0.89742507401702E-08 0.89828196532160E-08 0.92389930797408E-08 (cm-1)
|
||||
0.350000 0.22642364356013E-07 0.22662440677225E-07 0.23301256628585E-07 (cm-1)
|
||||
0.400000 0.57183624153782E-07 0.57230610289201E-07 0.58823544619398E-07 (cm-1)
|
||||
0.450000 0.14388025498651E-06 0.14398775135581E-06 0.14794358734802E-06 (cm-1)
|
||||
0.500000 0.35947561690742E-06 0.35971535482451E-06 0.36946627952038E-06 (cm-1)
|
||||
0.550000 0.88970248641040E-06 0.89021738165693E-06 0.91401859658945E-06 (cm-1)
|
||||
0.600000 0.21776109481547E-05 0.21786631108503E-05 0.22360903411911E-05 (cm-1)
|
||||
0.650000 0.52638814372909E-05 0.52658838196850E-05 0.54026636519607E-05 (cm-1)
|
||||
0.700000 0.12553929803021E-04 0.12557325419047E-04 0.12878587259286E-04 (cm-1)
|
||||
0.750000 0.29515633760622E-04 0.29520162034435E-04 0.30263639808482E-04 (cm-1)
|
||||
0.800000 0.68366488504327E-04 0.68368487757177E-04 0.70062656083872E-04 (cm-1)
|
||||
0.850000 0.15592865114070E-03 0.15591274387130E-03 0.15971187683017E-03 (cm-1)
|
||||
0.900000 0.35003667901889E-03 0.34995255849511E-03 0.35833269987945E-03 (cm-1)
|
||||
0.950000 0.77312866686717E-03 0.77283053740850E-03 0.79100609531841E-03 (cm-1)
|
||||
1.000000 0.16796233109442E-02 0.16787199439513E-02 0.17174679080051E-02 (cm-1)
|
||||
1.050000 0.35882779714746E-02 0.35857772434541E-02 0.36669498552187E-02 (cm-1)
|
||||
1.100000 0.75367428494255E-02 0.75302405268913E-02 0.76972957859253E-02 (cm-1)
|
||||
1.150000 0.15560676366692E-01 0.15544567582608E-01 0.15882246563987E-01 (cm-1)
|
||||
1.200000 0.31575939182929E-01 0.31537599790994E-01 0.32207877415260E-01 (cm-1)
|
||||
1.250000 0.62967063847162E-01 0.62878941806619E-01 0.64185215459234E-01 (cm-1)
|
||||
1.300000 0.12338302104009E+00 0.12318673009522E+00 0.12568575762661E+00 (cm-1)
|
||||
1.350000 0.23754486462658E+00 0.23712009133192E+00 0.24181253824942E+00 (cm-1)
|
||||
1.400000 0.44931916319614E+00 0.44842456456748E+00 0.45707140245447E+00 (cm-1)
|
||||
1.450000 0.83495044456183E+00 0.83311437093546E+00 0.84874894657123E+00 (cm-1)
|
||||
1.500000 0.15242161121085E+01 0.15205400503724E+01 0.15482750997954E+01 (cm-1)
|
||||
1.550000 0.27333926248622E+01 0.27262072763334E+01 0.27744720315645E+01 (cm-1)
|
||||
1.600000 0.48152891689183E+01 0.48015691819957E+01 0.48839514685855E+01 (cm-1)
|
||||
1.650000 0.83331372165618E+01 0.83075328966652E+01 0.84454389448413E+01 (cm-1)
|
||||
1.700000 0.14166648427402E+02 0.14119929175122E+02 0.14346299453449E+02 (cm-1)
|
||||
1.750000 0.23659772387249E+02 0.23576397335135E+02 0.23940714249594E+02 (cm-1)
|
||||
1.800000 0.38820163299450E+02 0.38674604109248E+02 0.39249375352692E+02 (cm-1)
|
||||
1.850000 0.62579536961246E+02 0.62330887482333E+02 0.63219661098279E+02 (cm-1)
|
||||
1.900000 0.99121329293169E+02 0.98705668187244E+02 0.10005240472042E+03 (cm-1)
|
||||
1.950000 0.15427675480526E+03 0.15359671417934E+03 0.15559598497375E+03 (cm-1)
|
||||
2.000000 0.23598210900583E+03 0.23489319180581E+03 0.23780018110541E+03 (cm-1)
|
||||
2.050000 0.35477897225684E+03 0.35307241208494E+03 0.35721108818321E+03 (cm-1)
|
||||
2.100000 0.52432548012711E+03 0.52170791191210E+03 0.52747504733708E+03 (cm-1)
|
||||
2.150000 0.76187242083141E+03 0.75794338321151E+03 0.76580543586507E+03 (cm-1)
|
||||
2.200000 0.10886447848609E+04 0.10828741307167E+04 0.10933534806311E+04 (cm-1)
|
||||
2.250000 0.15300603123807E+04 0.15217689354331E+04 0.15354157746599E+04 (cm-1)
|
||||
2.300000 0.21157145352502E+04 0.21040633227201E+04 0.21214098039266E+04 (cm-1)
|
||||
2.350000 0.28790693239049E+04 0.28630627150098E+04 0.28845569465118E+04 (cm-1)
|
||||
2.400000 0.38568003708544E+04 0.38353120328693E+04 0.38612312755535E+04 (cm-1)
|
||||
2.450000 0.50877878619426E+04 0.50596164002896E+04 0.50899613851875E+04 (cm-1)
|
||||
2.500000 0.66117710629198E+04 0.65757329355247E+04 0.66101084505309E+04 (cm-1)
|
||||
2.550000 0.84677268427091E+04 0.84227913751199E+04 0.84602818758902E+04 (cm-1)
|
||||
2.600000 0.10692068076119E+05 0.10637535449570E+05 0.10676587987385E+05 (cm-1)
|
||||
2.650000 0.13316784181650E+05 0.13252501534948E+05 0.13290831197069E+05 (cm-1)
|
||||
2.700000 0.16367658062565E+05 0.16294261813363E+05 0.16328796518868E+05 (cm-1)
|
||||
2.750000 0.19862689716546E+05 0.19781854670889E+05 0.19808735974072E+05 (cm-1)
|
||||
2.800000 0.23810838788879E+05 0.23725507729702E+05 0.23740161812972E+05 (cm-1)
|
||||
2.850000 0.28211171830377E+05 0.28125734432535E+05 0.28123022525090E+05 (cm-1)
|
||||
2.900000 0.33052472384486E+05 0.32972860853343E+05 0.32947311024702E+05 (cm-1)
|
||||
2.950000 0.38313350189304E+05 0.38247022005210E+05 0.38193135168551E+05 (cm-1)
|
||||
3.000000 0.43962873533305E+05 0.43918659535248E+05 0.43831272454411E+05 (cm-1)
|
||||
===================================================================
|
||||
Memory usage: VmHWM = 29Mb
|
||||
VmPeak = 376Mb
|
||||
===================================================================
|
||||
|
||||
|
||||
Unfolding on the coarse grid
|
||||
elphon_wrap : 0.00s CPU 0.00s WALL ( 1 calls)
|
||||
|
||||
INITIALIZATION:
|
||||
|
||||
|
||||
|
||||
Electron-Phonon interpolation
|
||||
ephwann : 10.67s CPU 11.35s WALL ( 1 calls)
|
||||
ep-interp : 10.47s CPU 11.15s WALL ( 64 calls)
|
||||
|
||||
DynW2B : 0.00s CPU 0.00s WALL ( 64 calls)
|
||||
HamW2B : 2.53s CPU 2.75s WALL ( 16640 calls)
|
||||
ephW2Bp : 1.02s CPU 1.18s WALL ( 64 calls)
|
||||
|
||||
|
||||
Total program execution
|
||||
EPW : 10.67s CPU 11.35s WALL
|
||||
|
||||
|
||||
Please consider citing:
|
||||
S. Ponce, E. R. Margine, C. Verdi and F. Giustino, Comput. Phys. Commun. 209, 116 (2016)
|
||||
|
||||
In addition, if you used anisotropic Eliashberg superconductivity please cite:
|
||||
E. R. Margine and F. Giustino, Phys. Rev. B 87, 024505 (2013)
|
||||
if you used transport properties (scattering rates, mobility) please cite:
|
||||
S. Ponce, E. R. Margine and F. Giustino, Phys. Rev. B 97, 121201 (2018)
|
|
@ -0,0 +1,85 @@
|
|||
--
|
||||
&inputepw
|
||||
prefix = 'si'
|
||||
amass(1) = 28.0855
|
||||
outdir = './'
|
||||
|
||||
iverbosity = 0
|
||||
|
||||
elph = .true.
|
||||
kmaps = .true.
|
||||
epbwrite = .false.
|
||||
epbread = .false.
|
||||
epwwrite = .false.
|
||||
epwread = .true.
|
||||
|
||||
lindabs = .true.
|
||||
efermi_read = .true.
|
||||
fermi_energy = 6.8
|
||||
scissor = 0.7
|
||||
|
||||
omegamin = 0.05
|
||||
omegamax = 3.0
|
||||
omegastep = 0.05
|
||||
n_r = 3.4
|
||||
|
||||
lifc = .true.
|
||||
asr_typ = 'crystal'
|
||||
|
||||
etf_mem = 1
|
||||
|
||||
nbndsub = 16
|
||||
nbndskip = 0
|
||||
|
||||
wannierize = .false.
|
||||
num_iter = 1500
|
||||
iprint = 2
|
||||
dis_win_max = 18
|
||||
dis_froz_max= 8.5
|
||||
proj(1) = 'Si : sp3'
|
||||
wdata(1) = 'bands_plot = .true.'
|
||||
wdata(2) = 'begin kpoint_path'
|
||||
wdata(3) = 'L 0.50 0.00 0.00 G 0.00 0.00 0.00'
|
||||
wdata(4) = 'G 0.00 0.00 0.00 X 0.50 0.50 0.00'
|
||||
wdata(5) = 'end kpoint_path'
|
||||
wdata(6) = 'bands_plot_format = gnuplot'
|
||||
wdata(7) = 'guiding_centres = .true.'
|
||||
wdata(8) = 'dis_num_iter = 500'
|
||||
wdata(9) = 'num_print_cycles = 10'
|
||||
wdata(10) = 'dis_mix_ratio = 1.0'
|
||||
wdata(11) = 'conv_tol = 1E-9'
|
||||
wdata(12) = 'conv_window = 4'
|
||||
|
||||
|
||||
elecselfen = .false.
|
||||
phonselfen = .false.
|
||||
a2f = .false.
|
||||
|
||||
parallel_k = .true.
|
||||
parallel_q = .false.
|
||||
|
||||
fsthick = 4.0 ! eV
|
||||
eptemp = 300 ! K
|
||||
degaussw = 0.5 ! eV
|
||||
|
||||
dvscf_dir = './save/'
|
||||
|
||||
nkf1 = 8
|
||||
nkf2 = 8
|
||||
nkf3 = 8
|
||||
nqf1 = 4
|
||||
nqf2 = 4
|
||||
nqf3 = 4
|
||||
|
||||
nk1 = 4
|
||||
nk2 = 4
|
||||
nk3 = 4
|
||||
|
||||
nq1 = 2
|
||||
nq2 = 2
|
||||
nq3 = 2
|
||||
/
|
||||
3 cartesian
|
||||
0.000000000 0.000000000 0.000000000
|
||||
0.500000000 -0.500000000 0.500000000
|
||||
0.000000000 -1.000000000 0.000000000
|
File diff suppressed because it is too large
Load Diff
|
@ -68,6 +68,7 @@ density=`grep " x-axis" $fname | awk '{print $1; print $2; print $3}'`
|
|||
mobx=`grep " x-axis" $fname | awk '{print $4}'`
|
||||
mobav=`grep " avg" $fname | awk '{print $1}'`
|
||||
mobxZ=`grep " x-axis [Z]" $fname | awk '{print $1; print $2; print $3; print $4}'`
|
||||
indabs=`grep " (cm-1)" $fname | awk '{print $1; print $2; print $3; print $4}'`
|
||||
|
||||
if test "$efm" != ""; then
|
||||
echo efm
|
||||
|
@ -130,6 +131,11 @@ if test "$mobxZ" != ""; then
|
|||
for x in $mobxZ; do echo $x; done
|
||||
fi
|
||||
|
||||
if test "$indabs" != ""; then
|
||||
echo indabs
|
||||
for x in $indabs; do echo $x; done
|
||||
fi
|
||||
|
||||
if test "$qdir" != ""; then
|
||||
echo qdir
|
||||
for x in $qdir; do echo $x; done
|
||||
|
|
|
@ -84,7 +84,7 @@ inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('scf_epw.in', '1'), ('nscf_epw.i
|
|||
|
||||
[epw_mob/]
|
||||
program = EPW
|
||||
inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('q2r.in', '4'), ('scf.in', '1'), ('nscf.in', '1'), ('epw1.in', '3'), ('epw2.in', '3'), ('epw3.in', '3')
|
||||
inputs_args = ('scf.in', '1'), ('ph.in', '2'), ('q2r.in', '4'), ('scf.in', '1'), ('nscf.in', '1'), ('epw1.in', '3'), ('epw2.in', '3'), ('epw3.in', '3'), ('epw4.in', '3')
|
||||
|
||||
[tddfpt_CH4/]
|
||||
program = TDDFPT
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,37 @@
|
|||
&CONTROL
|
||||
calculation = "vc-relax"
|
||||
/
|
||||
&SYSTEM
|
||||
ibrav = 0 ,
|
||||
A = 3.70971016 ,
|
||||
nat = 2 ,
|
||||
ntyp = 1 ,
|
||||
ecutwfc = 25.0 ,
|
||||
nbnd = 9 ,
|
||||
occupations = 'smearing' ,
|
||||
smearing = 'mp' ,
|
||||
degauss = 0.005
|
||||
nspin = 2
|
||||
starting_magnetization(1) = 0.1
|
||||
/
|
||||
&ELECTRONS
|
||||
conv_thr = 1.0d-7
|
||||
/
|
||||
&IONS
|
||||
ion_dynamics = 'bfgs' ,
|
||||
/
|
||||
&CELL
|
||||
cell_dynamics = 'bfgs' ,
|
||||
press = 500.00
|
||||
/
|
||||
CELL_PARAMETERS alat
|
||||
0.58012956 0.00000000 0.81452422
|
||||
-0.29006459 0.50240689 0.81452422
|
||||
-0.29006459 -0.50240689 0.81452422
|
||||
ATOMIC_SPECIES
|
||||
As 74.90000 As.pz-bhs.UPF
|
||||
ATOMIC_POSITIONS crystal
|
||||
As 0.290010 0.290010 0.290010
|
||||
As -0.290010 -0.290010 -0.290010
|
||||
K_POINTS automatic
|
||||
4 4 4 1 1 1
|
|
@ -42,7 +42,7 @@ tolerance = ( (5.0e-5, 5.0e-3, 'e1'),
|
|||
(5.0e-2, 5.0e-3, 'born'),
|
||||
(5.0e-4, 5.0e-4, 'dos'),
|
||||
(1.5e-0, 5.0e-1, 'lambda'),
|
||||
(9.0e-2, 5.0e-3, 'lambda2'),
|
||||
(9.5e-2, 5.0e-3, 'lambda2'),
|
||||
(1.0e-6, 1.0e-6, 'qpt'),
|
||||
(2.0e+0, 2.0e-1, 'phfreq'))
|
||||
skip_program = grep
|
||||
|
@ -71,7 +71,7 @@ tolerance = ( (1.0e-6, 5.0e-3, 'e1'),
|
|||
(1.0 , 2.0e-1, 'rsig'), # epw_base3 on desktop 0.054364
|
||||
(1.5 , 5.0e-1, 'isig'),
|
||||
(5.0e-1, 1.0e-1, 'z1'), # epw_soc on desktop
|
||||
(1.0e-2, 5.0e-1, 'lam'), # epw_base3 on desktop 7e-06
|
||||
(1.0e-2, None , 'lam'), # epw_base3 on desktop 7e-06
|
||||
(1.0e-5, 1.0e-5, 'lambda'),
|
||||
(6.0e-1, None , 'lambda_tr'), #epw_trev on desktop -0.004794
|
||||
(1.0e-2, None , 'gamma'),
|
||||
|
@ -89,10 +89,11 @@ tolerance = ( (1.0e-6, 5.0e-3, 'e1'),
|
|||
(1.0e-4, 5.0e-4, 'bcsgap'),
|
||||
(1.0e-4, 5.0e-4, 'mobvb'),
|
||||
(1.0e-4, 5.0e-4, 'mobcb'),
|
||||
(1.0e-2, 1.0e-2, 'mobx'),
|
||||
(1.0e-2, 1.0e-2, 'mobav'),
|
||||
(1.0 , 1.0e-2, 'mobx'),
|
||||
(1.0 , 1.0e-2, 'mobav'),
|
||||
(1.0e+10, 1.0e+2, 'density'),
|
||||
(1.0e-2, 1.0e-2, 'mobxZ'))
|
||||
(1.0 , 1.0e-2, 'mobxZ'),
|
||||
(250.0 , None , 'indabs'))
|
||||
|
||||
skip_program = grep
|
||||
skip_args = 'not present in this version'
|
||||
|
|
|
@ -38,7 +38,7 @@ upf2casino.o : casino_pp.o
|
|||
upf2upf2.o : ../Modules/pseudo_types.o
|
||||
upf2upf2.o : ../Modules/radial_grids.o
|
||||
upf2upf2.o : ../Modules/read_upf_v1.o
|
||||
upf2upf2.o : ../Modules/write_upf_v2.o
|
||||
upf2upf2.o : ../Modules/write_upf.o
|
||||
vanderbilt.o : ../Modules/constants.o
|
||||
vanderbilt.o : write_upf.o
|
||||
virtual.o : ../Modules/funct.o
|
||||
|
|
Loading…
Reference in New Issue