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

Reply via email to