On Fri, 2015-01-09 at 10:17 +0100, TRINITE Virginie wrote:
> Is it possible to have more that one orbital by atoms
> corrected by the U?
it is, but it requires some work. This issue has already been
mentioned by other people. A few days ago I started to think
how to reorganize things and wrote a few notes (attached).
This may give you an idea of what is needed. DFT+U+V also
solves the problem, but it requires more extensive changes
Paolo
--
Paolo Giannozzi, Dept. Chemistry&Physics&Environment,
Univ. Udine, via delle Scienze 208, 33100 Udine, Italy
Phone +39-0432-558216, fax +39-0432-558222
*** Changes needed to have more than one U per atom ***
** Present status **
Read from input:
hubbard_l(ntyp) = l value for U wavefunctions on atom type ntyp
hubbard_U(ntyp) = U value, as above
hubbard_X(ntyp), X = J, J0, alpha, beta, as above
Computed in init_lda_plus_u, called by setup:
is_hubbard(ntyp)= flag for hubbard U types of atoms
nwfcU = number of U wavefunctions (2l+1 wfcs for all U atoms)
oatwfc (nat) = position of the manifold in atomic wavefunctions (swfcatom)
offsetU(nat) = position of the manifold in DFT+U wavefunctions (wfcU)
Computed in orthoUwfc, called in wfcinit:
wfcU(npw,nwfcU), copied from swfcatom(npw,nwfcatom) using offsetU and oatwfc
Computed during the calculation:
proj(nwfcU,nbnd) = <\phi(nwfcU)|\psi(nbnd)>, projectors on U atomic states
Contribution of each atom in proj( offsetU(na)+1 : offsetU(na)+2l+1, : )
v%ns(2l+1,2l+1,spin,nat) = hubbard potential for atom nat
rho%ns(2l+1,2l+1,spin,nat) = same for charge
Do loops:
do nt=1,ntyp
if (is_hubbard(nt)) then
do na=1,nat
if (na==ityp(na)) then
l = hubbard_l(nt)
m1=oatwfc(na)
m2=offset(na)
...
end if
end do
end if
end do
*** Tentative new logic: ***
Input format: for each atomic species, something like
U(3D)=4.0 J(4F)=1.0 ...
Data must be copied to fixed-dimension (nthubx) arrays:
hubbard_el(nthubx) = label of U manifold
hubbard_sp(nthubx) = atomic species of U manifold
hubbard_U (nthubx) = value of hubbard U
hubbard_X (nthubx) = same for hubbard X = J, J0, alpha, beta, ...
(alternatively: structure hubbard_t) with
nthubx = max number of types of U manifolds (10 or so)
nthubU = actual number of types of U manifolds
New variables:
nhubU = total number of U manifolds (not wavefunctions)
hubbard(nhubU): structure containing, for each hubbard manifold nhubU,
%atom = index of atom
%nthub = index of type of hubbard manifold
(alternatively: replicate all data from hubbard_*)
%offset= starting position in wfcU manifold
%oatwfc= starting position in wfcatom manifold
These are computed in init_lda_plus_u, called by setup, together with
nwfcU = number of U wavefunctions (2l+1 wfcs for each U manifold)
Computed in orthoUwfc, called in wfcinit:
wfcU(npw,nwfcU) copied from swfcatom(npw,nwfcatom) using %offset and %oatwfc
Computed during the calculation:
proj(nwfcU,nbnd) = <\phi(nwfcU)|\psi(nbnd)>, projectors on U atomic states
Contribution of each atom in proj( offset+1:offset+2l+1,:) (see below)
v%ns(2l+1,2l+1,spin,nhubU) = hubbard potential for manifold nhubU
rho%ns(2l+1,2l+1,spin,nhubU) = same for charge
Do loops become:
do nhub=1,nhubU
na = hubbard(nhub)%atom
oatwfc= hubbard(nhub)%oatwfc
offset= hubbard(nhub)%offset
nthub = hubbard(nhub)%nthub
l = hubbard_l(nthub)
U = hubbard_U(nthub)
X = hubbard_X(nthub) ! X = J, J0, alpha, beta, ...
end do
_______________________________________________
Pw_forum mailing list
[email protected]
http://pwscf.org/mailman/listinfo/pw_forum