Dear David and Yurko
Many thanks for your bug report!

Regards,
Eduardo

On 28/02/2008, at 16:26, Yurko Natanzon wrote:

Dear David,
Thank you very much for your report. I also confirm this bug for
SIESTA 2.0. SIESTA didn't calculate DOS and PDOS when I used standard
input from the manual, but with energies as integers:

%block ProjectedDensityOfStates
       -20  10  0.200  500  eV
%endblock ProjectedDensityOfStates

but when I followed your advice:
%block ProjectedDensityOfStates
       -20.00  10.00  0.200  500  eV
%endblock ProjectedDensityOfStates

It now works well!

On 28/02/2008, David Strubbe <[EMAIL PROTECTED]> wrote:
Hello developers,

There is a bug in the way SIESTA reads the ProjectedDensityOfStates block which can cause the number of energy points to be read incorrectly. The energy range and broadening are read as the first three values on the line, but the number of energy points is read as the first integer on the line. Therefore, if any other value of the line is written as an integer, then that will be incorrectly taken as the number of energy points. If this value happens to be negative a number of MPI errors are generated as the code attempts to deal with an array with a negative size, which is how I noticed this problem. The code should be changed to read the fourth value
on the line, not the first integer, so that it conforms to the
specifications in the manual.

Consider below the following pairs of FDF input and standard output showing what I mean. The first example is correct behavior; the rest are wrong. Also at the bottom is the section of code that reads and writes the values from the PDOS block, and I believe "nhist = integers(p,1)" is the line that
needs to be fixed.

David Strubbe
UC Berkeley

===============

%block ProjectedDensityOfStates
20.0 30.0 0.01 10 eV
%endblock ProjectedDensityOfStates

siesta: PDOS info:
siesta: e1, e2, sigma, nhist: 20.00 eV 30.00 eV 0.01 eV 10
---
%block ProjectedDensityOfStates
-30 -0 0.01 6000 eV
%endblock ProjectedDensityOfStates

siesta: PDOS info:
siesta: e1, e2, sigma, nhist: -30.00 eV 0.00 eV 0.01 eV -30
---
%block ProjectedDensityOfStates
-30 -20 0.01 100 eV
%endblock ProjectedDensityOfStates

siesta: PDOS info:
siesta: e1, e2, sigma, nhist: -30.00 eV -20.00 eV 0.01 eV -30
---
%block ProjectedDensityOfStates
-20 10 0.01 100 eV
%endblock ProjectedDensityOfStates

siesta: PDOS info:
siesta: e1, e2, sigma, nhist: -20.00 eV 10.00 eV 0.01 eV -20
---
%block ProjectedDensityOfStates
20 30 0.05 10 eV
%endblock ProjectedDensityOfStates

siesta: PDOS info:
siesta: e1, e2, sigma, nhist: 20.00 eV 30.00 eV 0.05 eV 20
---
%block ProjectedDensityOfStates
20 30 0.01 10 eV
%endblock ProjectedDensityOfStates

siesta: PDOS info:
siesta: e1, e2, sigma, nhist: 20.00 eV 30.00 eV 0.01 eV 20

============================

siesta.F:
C Find the desired energy range
       if (IOnode) then
         read(iu,'(a)') line
          p=>digest(line)
         if (nvalues(p).lt.3 .or. nnames(p).ne.1)
    $          call die("Wrong format in PDOS block")
         factor = fdf_convfac( names(p,1), 'Ry' )
         e1 = values(p,1) * factor
          e2 = values(p,2) * factor
         sigma = values(p,3) * factor
         nhist = integers(p,1)
         write(6,'(a)') 'siesta: PDOS info: '
         write(6,'(a,3(f8.2,a),2x,i5)')
     $           'siesta: e1, e2, sigma, nhist: ',
    $           e1/eV,' eV',e2/eV,' eV',sigma/eV,' eV', nhist
       endif



--
Yurko (aka Yuriy, Iurii, Jurij etc) Natanzon
PhD Student
Henryk Niewodniczan`ski Institute of Nuclear Physics
Polish Academy of Sciences
ul. Radzikowskiego 152,
31-342 Krako`w, Poland
Email: [EMAIL PROTECTED], [EMAIL PROTECTED]



Reply via email to