projectors in USPPs. Hopefully this will allow one to study larger systems.
The modifications are done primarily keeping TDDFPT code in mind
(a branch of QE, you may see detailed explanation in qe-forge which I am trying
to keep tightly integrated). Please do not modify/beautify/make more elegant
the corresponding subroutines without prior notice, due to their dependencies.
I have tested that the current modifications do not alter the behaviour of pw.x
other than designed with a number of small tests in HG1.
Some Pointers:
-All the new subroutines reside in PW/realus.f90
-A new flag real_space in &electrons control the implementation
-tqr flag is treated seperately.
-The implementation works only for (serial) gamma point single point calculations.
ToDo:
-I have written K point and task groups implementations of most of the corresponding routines, but did not have time to implement.
-Parallelism issues are still to be checked.
-The discrepancy in total energy is <0.002 eV for cutoff of 55Ry/550Ry however,
there are some strange force components. I do not know how this will effect
a possible optimization scheme.
Other:
Trying the compile CVS version in HG1 of sissa, using the "default" compiler
sets, I encountered a very strange compiler bug. Please have a look at
Modules/read_cards.f90 for details. Remove the stupid workaround to your liking.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@5493 c92efa57-630b-4861-b058-cf58834340f0
Bugfix: PAW stress should work in parallel, even with pools
Bugfix: vc-bfgs should have a consistent convergence threshold (by SdG)
(its existence should be reported in INPUT_PW too!)
Note: I had to move some initialization from allocate_nlpot to a new function
pre_init that I've put in PW/setup.f90; it's called by setup and read_file
Note: the scf_mod part of PAW is now much better, becsum and rho%bec are NOT
the same any more (rho%bec is mixed and recollected among pools,
becsum is not).
LP
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4657 c92efa57-630b-4861-b058-cf58834340f0
array arguments of the mother sub. with explicit dimensions)
- task groups implemented for k points too.
- task groups implemented also in the loop over bands contained in sum_band
- task groups NOT YET implemented for non collinear spin and meta dft
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4587 c92efa57-630b-4861-b058-cf58834340f0
previous ones, might be useful the day such arrays will be distributed.
Allows calculation of overlap matrices as well. Requires properly dimensioned
arrays on input! old routines ccalbec, ccalbec_nc, pw_gemm are still there.
Also: minor bug in Berry phase fixed, I think (the various npw, npw0, npw1
were inconsistently used; electric field was not affected). Please check for
collateral damages.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4503 c92efa57-630b-4861-b058-cf58834340f0
for a bug, before I realized that there were two copies of "gamma_only",
I wasted two more hours to iuse a single value of "gamma_only" (the one
oin control_flags).
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4468 c92efa57-630b-4861-b058-cf58834340f0
This is the first step of code cleanup. Actually nothing should change.
rad_paw_routines -> paw_onecenter (2 functions went to paw_init)
grid_paw_variables -> paw_variables (with some additions from rad_paw_routines)
grid_paw_routines -> paw_init (merged with 2 init functions from rad_paw)
Probably there are a few random fixes around.
Next step: remove ndmx and ntpx.
LP
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4422 c92efa57-630b-4861-b058-cf58834340f0
zp, psd, dion, betar, jjj, qqq, qfunc, qfcoef, vloc_at, rinner,
nbeta, kkbeta, nqf, nqlc, lll, tvanp
have been replaced by the corresponding variables in structure 'upf'.
There shouldn't be any side effects, but who knows. There is still a
copy of the above variables that will be removed sooner or later.
Basically : variable([i,j,k,..,]n) => upf(n)%variable [(i,j,k,..)]
Note that upf%qfunc has for the time being three indices instead of two,
and that upf%kkbeta is the analogous of kkbeta and not what it used to be.
The logic of this operation will be clearer when it will be completed
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4308 c92efa57-630b-4861-b058-cf58834340f0
This means that a lot of routines have been modified and a few files have
been added. During the year several people have contributed to this code,
mainly Guido Fratesi, Ricardo Mazzarello, Stefano de Gironcoli, Andrea Dal
Corso and me (Lorenzo Paulatto).
A brief report of modified or added files follows, further down you will
find a loger report of modifications that was necessary to merge develop_PAW
branch with the current CVS version.
Current version is not 100% functional, but it doesn't brake anything else and
can be used to generate and test PAW pseudopotential.
*************************************
*** Brief report of modifications ***
*************************************
Modified files:
PW/clean_pw.f90
PW/electrons.f90
PW/print_clock_pw.f90
PW/hinit0.f90
PW/potinit.f90
PW/newd.f90
PW/summary.f90
PW/setup.f90
PW/read_pseudo.f90
PW/init_us_1.f90
PW/init_run.f90
PW/mix_rho.f90
atomic/atomic_paw.f90
atomic/write_paw_recon.f90
atomic/ld1_writeout.f90
atomic/write_resultsps.f90
atomic/ld1inc.f90
atomic/ld1_readin.f90
atomic/gener_pseudo.f90
atomic/parameters.f900
atomic/run_pseudo.f900
atomic/set_rho_core.f90
atomic/pseudovloc.f90
Modules/read_upf.f90
Modules/uspp.f90
Modules/pseudo_types.f90
Modules/parameters.f90
Added files:
PW/grid_paw_routines.f90
PW/rad_paw_routines.f90
Modules/grid_paw_variables.f90
Modules/read_paw.f90
Added files that will be removed:
PW/rad_paw_trash.f90
PW/paw_xc.f90
Examples:
examples/PAWexample contains a full test of PAW pseudopotential
for Oxygen. The test consist in these tasks:
- 2 norm conserving, 2 US and 4 PAW pseudopotentials are
generated and tested in ld1
- pw test for an isolated O atom at different cutoffs
- pw test for an O2 molecule at different O-O distance
please read examples/PAWexample/README for (a few) details.
NOTES:
1. new modifications to atomic_paw (and related) from ADC have been rolled
back, as they were breaking a lot of things, I will reintroduce them
later when I am sure that everything works properly.
2. the files PW/paw_xc.f90 and Modules/rad_paw_trash.f90 will be removed in
the next few weeks.
TODO:
1. use new ld1 XC code as much as possible, and remove legacy XC routines
from rad_paw_routines
2. full self-consistency with radial energies
3. make new Harris-Foulkes estimate paw-aware
4. provide some kind error estimate
5. FORCES and stress!! (require symmetrization of becsums)
6. cleanup
************************
*** merge of PW code ***
************************
Versions notation:
OLD=version from 2 years ago used as reference to generate the patches
NEW=CURRENT=current trunk version
PAW=current develop_PAW version
Note: pseudo-potential input and allocation routines changed
a lot in the last years, this is a diagram:
OLD:PW/readin ~~> PAW:PW/read_pseudo --> disappears
pops out --> PAW:PW/readin ~~> NEW:PW/read_pseudo
added files:
Modules/read_paw.f90 (contains module read_paw_module with subroutines
paw_io nullify_pseudo_paw, allocate_pseudo_paw and
deallocate_pseudo_paw previously in removed file
Modules/readpseudo.f90. Also contains module
paw_to_internal with subroutine set_pseudo_paw,
previously in upf_to_internal.f90)
PW/paw_xc.f90 (contains OLD=PAW xc and gcxc routines as adapting paw
grid code to use new routines was very error prone and
quite worthless, as it has to be removed anyway)
Conflicts reported by CVS during merge:
DONE */Makefiles (all replaced with new, redone by hand)
DONE flib/functionals.f90 (nothing to do)
DONE Modules/functionals.f90 (RNV == replaced with NEW version)
DONE Modules/atom.f90 (trivial: duped rgrid)
DONE Modules/autopilot.f90 (trivial)
DONE Modules/bfgs_module.f90 (RNV)
DONE Modules/cell_base.f90 (RNV)
DONE Modules/check_stop.f90 (RNV)
DONE Modules/constants.f90 (RNV)
DONE Modules/constraints_module.f90 (RNV)
DONE Modules/energies.f90 (RNV)
DONE Modules/input_parameters.f90 (RNV)
DONE Modules/ions_base.f90 (RNV, has 3 new subs)
DONE Modules/ions_nose.f90 (RNV)
DONE Modules/parameters.f90 (actually RNV)
DONE Modules/path_base.f90 (RNV)
DONE Modules/path_opt_routines.f90 (RNV)
DONE Modules/path_reparametrisation.f90 (RNV)
DONE Modules/path_variables.f90 (RNV)
DONE Modules/pseudo_types.f90 (cleaned double def of paw_t)
DONE Modules/read_cards.f90 (RNV)
DONE Modules/read_namelists.f90 (checked and RNV)
DONE Modules/uspp.f90 (trivial)
DONE Modules/xml_io_base.f90 (RNV)
DONE PW/read_pseudo.f90 (merged by hand with PAW PW/readin)
DONE PW/bp_calc_btq.f90 (trivial)
DONE PW/c_bands.f90 (actually RNV)
DONE PW/ccgdiagg.f90 (RNV)
DONE PW/cegterg.f90 (RNV)
DONE PW/cft3s.f90 (RNV)
DONE PW/cinitcgg.f90 (RNV)
DONE PW/c_phase_field.f90 (RNV)
DONE PW/divide_et_impera.f90 (nothing to do?)
DONE PW/exx.f90 (RNV)
DONE PW/hinit0.f90 (easy)
DONE PW/h_psi.f90 (RNV)
DONE PW/init_run.f90 (easy)
DONE PW/kpoint_grid.f90 (nothing to do?)
DONE PW/newd.f90 (required mod in newd_paw_grid, CHECK!!)
DONE PW/openfil.f90 (actually RNV)
DONE PW/paw.f90 (actually RNV)
DONE PW/punch.f90 (RNV)
DONE PW/pwscf.f90 (quite RNV)
DONE PW/set_kup_and_kdw.f90 (RNV)
DONE PW/setup.f90 (RNV + 2 line merged by hand)
DONE PW/sgama.f9 (actually RNV)
DONE PW/sgam_at_mag.f90 (actually RNV)
DONE PW/stop_run.f90 (actually RNV)
DONE PW/stres_gradcorr.f90 (actually RNV)
DONE PW/symrho_mag.f90 (nothing to do)
DONE PW/v_of_rho.f90 (RNV)
DONE PW/compute_fes_grads.f90 (RNV)
DONE PW/gradcorr.f90 (RNV)
DONE PW/input.f90 (RNV)
DONE PW/pw_restart.f90 (RNV)
DONE PW/read_ncpp.f90 (actually RNV)
DONE PW/summary.f90 (RNV + inserted new PP type)
DONE PW/wfcinit.f90 (RNV)
the hard ones:
DONE PW/electrons.f90 (adapted code to new syntaxes, a lot of cleanup, removed
some PAW junk that can be readded later, removed parts
that were applyed twice, or had been removed in trunk,
the rhog allocations and usage may need fixes)
DONE PW/mix_rho.f90 (merged tauk and paw additions, a bit of cleanup and smarter
variables names)
DONE PW/init_us_1.f90 (qtot redefined with "triangular" index nb,mb-->ijv)
modified for compiling:
Modules/io_files.f90 (depatched)
PW/pwcom.f90 (depatched)
Modules/parameters.f90 (temporary readded cp_lmax = lmaxx+1)
PW/newd.f90 (merge was wrong, redone mostly by hand)
PW/read_ncpp.f90 (depatched)
PW/read_pseudo (small fixes)
PW/sgam_at_mag.f90 (depatched)
PW/sgama.f90 (depatched)
PW/stres_gradcorr.f90 (depatched)
modified for running:
PW/clean_pw.f90 (added call to deallocate_paw_internals)
Modifications to PAW routines:
1. compute_onecenter_charges and compute_onecenter_charges modified to
comply with new structure of v_xc (in v_of_rho.f90), requiring new
g-space densities to be saved and computed --> using old xc routines
as this code will be removed.
2. qrad size has changed, prad and ptrad had to be changed accordingly.
3. several minor modifications to use new radial grid structure.
4. infomsg arguments changed, very funny bug followed.
5. added new routine deallocate_paw_internals, called by PW/clean_pw.f90
required to run pp.x with more than one q-point(and good programming
practice)
*************************
*** merge of LD1 code ***
*************************
2nd try: atomic code replaced with current version, then merge by hand
the files that are used by paw subsystem:
* atomic_paw.f90 (replaced with most recent version from develop_PAW
routine us2paw and paw2us taken from newer trunk
version, a lot of minor changes.)
* gener_pseudo.f90 (fixes)
* ld1inc.f90 (PAW variables added)
* ld1_readin.f90 (PAW variables added, I am not sure if lpaw should go
in input or inputp namelist)
* ld1_writeout.f90 (it was only necessary to add a few lines)
* pseudovloc.f90 (nothing to do)
* run_pseudo.f90 (almost nothing to do)
* set_rho_core.f90 (readded a few lines for lnc2paw)
* write_paw_recon.f90 (nothing to do)
* write_resultsps.f90 (nothing to do: trunk version is more
PAW-aware than PAW version)
Main problems were found in subroutines run_pseudo and gen_pseudo,
a little code had to be rewritten to comply with new variable names
and fix with merge.
TODO: fix atomic_paw routines to use minimal allocated arrays insetad
of ndmx sized ones; try to use the pawet as much as possible. Remove
test lines and other garbage. Find a fix for PAW2.
The first week of september Andrea Dal Corso uploaded a few modifications to
the atomic_paw routines. I had to rollback them as the structure of atomic_paw
has changed a lot and reimplementing them is probably easier and definitely
safer than fixing everything. I will do it soon, I swear!
LP
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@4257 c92efa57-630b-4861-b058-cf58834340f0
File buffers.f90 contains replacements - with different names and syntax -
for diropn (open_buffer) and davcio (get_buffer, save_buffer). If you have
better names, please go ahead. Works for a single buffer right now.
Pitfalls: nwordwfc is now defined as the number of complex words, no longer
of real words, but only in PW/, so mixing routines from PW with routines from
other codes may run into trouble (although I didn't see any side effect).
Restart may no longer work in some specific cases.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@3800 c92efa57-630b-4861-b058-cf58834340f0
angle1, angle2 and starting_magnetization are saved in the punch file.
The transformation of angle1 and angle2 to radiants is done in input.f90.
Clean_up of sum_band.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@3765 c92efa57-630b-4861-b058-cf58834340f0
and performed by a separate subroutine (weights).
More uniform behaviour of scf and non-scf case; some unneeded calls
(ppolreduce, sum_band) removed.
Subroutine punch minimized (should be removed)
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@3721 c92efa57-630b-4861-b058-cf58834340f0
as the usual two-index array evc(2*npwx,nbnd), no longer as a
different three-index array evc_nc(npwx,2,nbnd).
I am not really sure that this way is better than the previous
one: sometimes it is more convenient, sometimes it is less, but
I think that having the same array makes easier the transition
to a code that keeps everything in memory. Apologies to anybody
preferring three indices: anyway the physical memory layout
hasn't changed, so the transition from three-index to two-index
arrays shouldn't be a major problem
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@3572 c92efa57-630b-4861-b058-cf58834340f0
states. This bug (introduced at the end of May 2005) was responsible for
somehow wrong results in the case of calculations with many k-points.
Cleanup of diagonalization thresholds: wg_set variable removed and btype array
is now set in sum_band.
Added a logical input variable (diago_full_acc) to decide if the empty states
(defined as states with occupation < 1%) have to be converged at full accuracy
or not. Defaul is .FALSE. (I am not sure this is the best choice, comments
appreciated).
C.S.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@3040 c92efa57-630b-4861-b058-cf58834340f0
conversion to real => DBLE
(including real part of a complex number)
conversion to complex => CMPLX
complex conjugate => CONJG
imaginary part => AIMAG
All functions are uppercase.
CMPLX is preprocessed by f_defs.h and performs an explicit cast:
#define CMPLX(a,b) cmplx(a,b,kind=DP)
This implies that 1) f_defs.h must be included whenever a CMPLX is present,
2) CMPLX should stay in a single line, 3) DP must be defined.
All occurrences of real, float, dreal, dfloat, dconjg, dimag, dcmplx
removed - please do not reintroduce any of them.
Tested only with ifc7 and g95 - beware unintended side effects
Maybe not the best solution (explicit casts everywhere would be better)
but it can be easily changed with a script if the need arises.
The following code might be used to test for possible trouble:
program test_intrinsic
implicit none
integer, parameter :: dp = selected_real_kind(14,200)
real (kind=dp) :: a = 0.123456789012345_dp
real (kind=dp) :: b = 0.987654321098765_dp
complex (kind=dp) :: c = ( 0.123456789012345_dp, 0.987654321098765_dp)
print *, ' A = ', a
print *, ' DBLE(A)= ', DBLE(a)
print *, ' C = ', c
print *, 'CONJG(C)= ', CONJG(c)
print *, 'DBLE(c),AIMAG(C) = ', DBLE(c), AIMAG(c)
print *, 'CMPLX(A,B,kind=dp)= ', CMPLX( a, b, kind=dp)
end program test_intrinsic
Note that CMPLX and REAL without a cast yield single precision numbers on
ifc7 and g95 !!!
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@2133 c92efa57-630b-4861-b058-cf58834340f0
With i_cons = 3; A penalty functional is added to the
total energy to constrain each component of the
total magnetization.
(Only in noncolinear version)
With i_cons = 4; a fixed magnetic field is added to the
exchange and correlation magnetic field.
(Only in noncolinear version)
With i_cons = 5; Uses the two Fermi energies feature to fix the
magnetization as in the constrained-moment approach.
mcons(3,1) fix the value of the total magnetization.
(Only with nspin=2)
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@1720 c92efa57-630b-4861-b058-cf58834340f0
nelup and neldw variables can be read from input and used to set up
the occupations of spin up and spin down electrons separately.
It can be used with both metallic and fixed occupations.
In the former case two Fermi energies are defined, in the latter
nelup and neldw must be both integer.
In all cases nelec must also be explicitely defined and
nelup + neldw = nelec must hold.
Not fully tested, please report problems and complaints to SdG
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@1717 c92efa57-630b-4861-b058-cf58834340f0
The following variant of the DIIS Residual Minimization Method, based
on three steps, has been implemented :
1) At the first "scf" step of the first "ionic" step, the diagonalization
starts with an initialization procedure. Two (or more) sweeps on all
the bands are performed. A sweep consists in two (or more if required)
unconstrained trial steps (steepest descent steps) followed by a
subspace rotation. If convergence is not achieved in this phase a
final trial step is done.
In all the other cases the initialization procedure consists in a
subspace rotation followed by a trial step.
2) Diagonalization based on the DIIS algorithm is performed on the lowest
( nbnd - 2 ) bands. Orthogonalization of the eigenvectors is done at
each step. The possibility of orthogonalizing a given band only to
those inside an energy window is also implemented.
3) The topmost two bands are converged using a standard
conjugate-gradient procedure. This ensures that eventual holes
left by the DIIS algorithm can be identified and filled.
If two holes have been found this procedure is repeated on the
topmost two bands (previously optimized with the DIIS algorithm).
C.S.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@1014 c92efa57-630b-4861-b058-cf58834340f0
1) f_defs.h for definitions to be included in FORTRAN files ONLY
2) c_defs.h for definitions to be included in C files ONLY
C.S.
git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@1012 c92efa57-630b-4861-b058-cf58834340f0