~nickpapior/siesta/trunk-kovalp

Viewing all changes in revision 175.

  • Committer: Alberto Garcia
  • Date: 2006-12-12 14:26:27 UTC
  • mfrom: (unknown (missing))
  • Revision ID: Arch-1:siesta@uam.es--2006%siesta-devel--reference--2.1--patch-12
Changes to support synthetic atoms (VCA)
Support for dealing with "synthetic atoms" has been added. Their basic
feature is that they cannot be assigned a true integer atomic number:

 - One could mix the pseudopotentials of two elements to generate
   an appropriate hybrid to be used in a "virtual crystal approximation".
   (See description of mixps program below)
   (Note that the ATOM program also allows the treatment of "atoms" with
    a fractional Z. This is an alternative choice for mixtures involving
    atoms which are contiguous in the periodic table.
    See Pseudo/atom/Tutorial/ON)

 - By mixing a true atom's pseudopotential with a "null" pseudopotential,
   a "partial occupation" can be simulated.

Comparatively minor changes were needed to have Siesta process correctly
synthetic species:

* Atomic numbers greater than 200 signal a synthetic atom. The symbol
  returned (in module periodic_table) is SX, where X is an integer from
  1 to 9. 
  In order to generate an appropriate "neutral atom" configuration, some
  extra information is needed about the "ground state" of the synthetic
  atom.  It is taken from a SyntheticAtoms block (read in basis_specs.f).
  For example:

         %block Chemical_Species_label
            1   201 ON-0.50000
         %endblock Chemical_Species_label
         %block SyntheticAtoms
         1               # Species index
         2 2 3 4         # n numbers for valence states  with l=0,1,2,3
         2.0 3.5 0.0 0.0 # occupations of valence states with l=0,1,2,3
         %endblock SyntheticAtoms

* Changes in data structures and helper functions to support synthetic
  species:

  New logical component "synthetic" in basis_types.f
  In atm_types, zval is now a real number.
  In atmfuncs, izvalfis has been renamed zvalfis, and now returns a real.
  (Same in old_atmfuncs, where the izvaltb array has been renamed zvaltb
   and now holds real numbers).
  Atm_transfer uses zvalfis.
  In basis_io, zval is now printed as a real number. Filename length enlarged
  to support long labels.

  Calculation of total number of "pseudoprotons" in atomlist. Printed
  in siesta, together with the total number of electrons.
  
  Electrostatic.f uses real instead of integer nuclear charges.
  Optical.F and ksv.F use now a real "total number of electrons"

* Pseudopotential module changes:

  - New routine read_ps_conf to crack the information about the configuration
    used to generate the pseudopotential (and used in atom to set the vps
    charge). Synthetic species do not have the appropriate text block in the
    .psf file, so the ability to process a new field ("gen_zval") has been
    added to read_pseudo_formatted (this extra field is optional and appears
    only in "synthetic" .psf files).

  - New routine write_pseudo_formatted added.

* Atom.f changes:

  - The code now in pseudopotential::read_ps_conf has been removed.
  - The species label and not the atomic number is now used for
    identification of the species.
  - Routine prinput now outputs a SyntheticAtoms block if needed.

* The output format in Outcoor.f has been changed to allow for long
  species labels. The label now comes last, and the atom number next
  to last. This could break non-supported user scripts.


A new program (mixps) has been written to mix pseudopotentials. It
takes as command-line arguments the names (actually labels) of the two
atoms involved (A and B), and the mixing parameter. Then it combines
the information in A.psf and B.psf and creates a new file AB-0.xxxxx.psf,
where 0.xxxxx is the mixing parameter (to five decimal places) specified.
It outputs also a SyntheticAtoms block suitable for use by Siesta, and
a MIXLABEL file which contains the final label used (useful for scripts).

This program is located in the top directory to ease compilation.

The new directory Util/VCA contains some documentation and the
Programs zerops.f and zerops_rel.f to generate "null
pseudopotentials".  The resulting pseudos can also be found in
Tests/Pseudos.


New tests:

oxyn:    Molecule made up of ON hybrids
partial: Molecule made up of O-Zero hybrids (a very artificial 
                                             partial occupation)

The 'partial' test introduces a new idiom for tests: the use of
a general script to perform more complicated operations. The handling
of paths is still very primitive.

NOTES:

- The basis set is generated by Siesta using the "mixed"
pseudopotential. There is no provision at this time to "mix" basis
sets, or in general to build a basis set using information about the
basis sets for the atoms involved in the mix. On the other hand, basis
sets for synthetic atoms can be optimized as usual.

- PseudoCore charges are mixed if they exist in the individual atoms'
pseudopotential files. This might lead to extra non-linearities in the
solid-state calculation.

- Once Siesta reads the new .psf file for the hybrid, it generates a
local-pseudopotential charge and a local pseudopotential from it. Note
that this means that the local pseudopotential is not a true mix of
the local pseudopotentials of the individual atoms.

- Once Siesta reads the "neutral-atom configuration" from the
SyntheticAtoms block, it generates the appropriate neutral-atom potential
using the local pseudopotential and the atomic charge density.

expand all expand all

Show diffs side-by-side

added added

removed removed

Lines of Context: