Merged changes from upstream develop

This commit is contained in:
Pietro Bonfa 2018-04-18 15:39:05 +02:00
commit f666d237e1
83 changed files with 52382 additions and 38854 deletions

9
.gitignore vendored
View File

@ -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

View File

@ -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 {

View File

@ -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

View File

@ -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 )

View File

@ -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

View File

@ -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
!-------------------------------------------------------------------------------

View File

@ -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.
!

View File

@ -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

View File

@ -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 )

View File

@ -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}

View File

@ -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

View File

@ -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*' )

View File

@ -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 \

View File

@ -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
!

View File

@ -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 :: &!

View File

@ -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
!

View File

@ -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

View File

@ -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

353
EPW/src/indabs.f90 Normal file
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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
!

View File

@ -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

View File

@ -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 \

View File

@ -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
!

View File

@ -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

View File

@ -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

View File

@ -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
!

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
!

View File

@ -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)

View File

@ -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

View File

@ -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.
!

View File

@ -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

View File

@ -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
!

View File

@ -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
!
!----------------------------------------------------------------------------------------------------------

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,4 @@
&inputpp
outdir = '/home/paulatto/espresso/tempdir/'
prefix = 'di'
/

View File

@ -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).
--------------------------------------------------------------------------

View File

@ -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'
/

View File

@ -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'
/

View File

@ -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.
=------------------------------------------------------------------------------=

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.
=------------------------------------------------------------------------------=

View File

@ -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

View File

@ -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

View File

@ -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
}
}

View File

@ -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

View File

@ -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
!

View File

@ -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,&

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
!

View File

@ -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
!

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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'

View File

@ -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