~nickpapior/siesta/trunk-kovalp

« back to all changes in this revision

Viewing changes to Tests/ag/ag.fdf

  • Committer: Alberto Garcia
  • Date: 2007-04-17 13:21:50 UTC
  • mfrom: (unknown (missing))
  • Revision ID: Arch-1:siesta@uam.es--2006%siesta-devel--reference--2.1--patch-52
New method for split-norm calculation
The method for generating multiple-zeta orbitals is based on fitting a
function of the form r^l (C_1*r^2 +C_2) at a certain point of the
initial (1st zeta) orbital.

The criterion spelled out in the Siesta JPC paper seems to imply that
the split-norm parameter refers to the norm of the tail of the initial
orbital (i.e., the region to the right of the fitting point). However,
the actual code in Siesta takes it to mean the norm of the tail *plus*
the norm of the parabolic function in the inner region. The reasons
are mostly historical, having to do with finding a "good enough, universal"
default value for the split-norm parameter. 

The problem with the "parabola+tail" method is that it does not always
work, and this is bad for an unsupervised method like the simplex. For
example, if the first-zeta orbital has a relatively large slope at or
near rc , the smallest parabola one can fit (for radii very close to
rc) has a significant norm, and there is a minimum value for the
split-norm parameter. Thus the method will not work if the user (or
simplex) requests a split-norm greater than this value, and Siesta
will stop.  This behavior is not uncommon.

On the other hand, the norm of the tail region is of course smooth and
covers monotonically the whole range 0-1. It has very low contrast
near rc, meaning that in order to fit a 2nd-zeta orbital with a 10%
reduction in rc, one might need to use "tail-split-norms" of 0.001 or
smaller.

New code for multiple split orbitals has been written to address these
issues, while at the same time maintaining backwards compatibility with
the old procedure. The code is controlled by the new fdf symbols:

* PAO.NewSplitCode

Enables a new, simpler way to match the multiple-zeta radii.

If an old-style (tail+parabola) calculation is being done, perform a
scan of the tail+parabola norm in the whole range of the 1st-zeta
orbital, and store that in split_table. The construction of the
2nd-zeta orbital involves simply scanning split_table to find the
appropriate place. Due to the idiosyncracies of the old algorithm,
the new one is not guaranteed to produce exactly the same results,
as it might settle on a neighboring grid point for the matching.

* PAO.SplitTailNorm

split_table is set to sqrt(1-norm(r)), to more closely match the
spirit of the JPC paper (the square root is introduced to make the
split norm values larger for 2nd-zeta radii in the vicinity of rc).

* PAO.FixSplitTable

The old-style split-table is fixed by applying a damping function that
takes it to zero at the 1st-zeta orbital radius. This option enables
PAO.NewSplitCode.


By default, all three symbols are .false., resulting in the use of the old
code. In this case, the program now stops if the requested split_norm
is smaller than the values on the table, and prints an explanation.

* New test: ag  (Original silver example exhibiting problems)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# System which gives problems with split
 
3
# To see them, uncomment the PAO.FixSplitTable directive
 
4
#
 
5
SystemName          Ag
 
6
SystemLabel         Ag
 
7
NumberOfAtoms       1
 
8
NumberOfSpecies     1
 
9
 
 
10
Reparametrize.Pseudos T       # Options for more accuracy
 
11
Restricted.Radial.Grid F
 
12
 
 
13
 
 
14
XC.functional    GGA
 
15
XC.authors       PBE
 
16
Meshcutoff 50 Ry
 
17
%block ChemicalSpeciesLabel
 
18
1  47 Ag
 
19
%endblock ChemicalSpeciesLabel
 
20
 
 
21
# Full template for Basis parameters
 
22
#
 
23
Basis.Pressure 0.02 GPa         # As in Anglada et al
 
24
 
 
25
PAO.FixSplitTable T
 
26
 
 
27
#PAO.SoftDefault    T           # Global soft-confinement options
 
28
#PAO.SoftPotential $Global_Vsoft Ry    
 
29
#PAO.SoftInnerRadius $Global_Soft_Radius
 
30
#
 
31
 
 
32
PAO.BasisType    split
 
33
%block PAO.Basis                                   # Define Basis set
 
34
Ag   3 0.0700000 
 
35
n=5   0   2   S 0.1500000 E 4.5000000 -0.9000000  
 
36
4.9700000 0.000000
 
37
1.00000   1.000000 
 
38
n=5   1   1  E 2.9200000 -0.5000000
 
39
5.0100000
 
40
1.00000   
 
41
n=4   2   2 S 0.1500000 E 4.9400000 -0.5000000
 
42
5.1200000 0.000000       
 
43
1.00000   1.000000  
 
44
%endblock PAO.Basis
 
45
 
 
46
LatticeConstant     4.09 Ang
 
47
%block LatticeVectors
 
48
0.500  0.500  0.000
 
49
0.500  0.000  0.500
 
50
0.000  0.500  0.500
 
51
%endblock LatticeVectors
 
52
 
 
53
%block AtomicCoordinatesAndAtomicSpecies
 
54
  0.000000 0.0000 0.0000  1
 
55
%endblock AtomicCoordinatesAndAtomicSpecies
 
56