<div dir="ltr">Dear WIEN2k community,<div><br></div><div><br></div><div>I have identified some issues in v.13 of the SRC_lapw0 code that prevented me from compiling a working Mac OS X version.  I am also submitting a solution.  The details are below my signature.  After the code edits, I can compile and run lapw0 correctly using the recommended compilation settings (no additional flags like -O0 or -fp-model strict). </div>
<div><br></div><div>The issue is somewhat sloppy code, legal in Fortran but vulnerable to compiler trip-ups, in the &quot;drho&quot; section of lapw0.  It is quite possible that these issues do not occur on Linux, as memory is managed differently on the different OS&#39;s (e.g. which variables go on stack or heap depending on their allocation).  Nevertheless it seems useful to report.  They occur for me with both gfortran and ifort, indicating it&#39;s not just Intel goofiness.  I would be grateful for feedback from the developers or the community.  I&#39;m happy to send source files - didn&#39;t include them now as I&#39;m not sure the mailing list accepts attachments.</div>
<div><br></div><div>Finally, are total energies expected to be identical between wien2k_12 and wien2k_13?  Or are small differences ~10^-4 or ~10^-5 normal?</div><div><br></div><div><br></div><div>Cheers,</div><div><br></div>
<div>Kevin Jorissen</div><div><br></div><div><br></div><div><br></div><div>Details:</div><div>OS X 10.9.4</div><div>ifort 14.0.1 or ifort 14.0.2 or gfortran 4.9.0</div><div><br></div><div>Test:</div><div>* Standard &quot;run_lapw&quot; for HOPG graphite.</div>
<div>* The test is passed if the calculation:  a/ does not crash ; b/ converges to approximately the same total energy (grep :ENE case.scf) as a wien2k-12 calculation (compiled with the same compiler as wien2k-13 and with &quot;safe&quot; options (no optimization)).  Initialization is done with that same wien2k-12 version, i.e. I test only the &quot;SCF&quot; programs.</div>
<div><br></div><div>Outcome:</div><div>* The test did not pass.  The wien2k-13 calculation fails almost always: A seclr4 error in lapw1 following NaN in the case.scf0 and case.output0, so the problem is in lapw0.  Case.scf0 points to the xcpot1 section.  <a href="http://wien2k.at">wien2k.at</a> reports updates to the &quot;drho&quot; in v.13.  The crash occurs in varying SCF iteration for each run, indicating an &quot;instability&quot;, i.e. numerical noise or memory issues.</div>
<div>* Trying different configurations didn&#39;t help.  E.g. &quot;safe&quot; compilation options (-O0 -fp-model strict ...) ; e.g. swapping ifort for gfortran ; trying different fftw libraries ...</div><div><br></div><div>
Solution (after tedious debugging ...):</div><div>Several small code changes in drho.f and dergl.f to correct array size issues.</div><div><br></div><div>DRHO.F</div><div>* The array &quot;r&quot; passed to dergl is size &quot;nrad&quot; (allocated elsewhere) while dergl expects an array of size &quot;n=jri(jatom)&quot;.  E.g. 881 vs. 781 for my test.</div>
<div>Solution (it could be done just by restricting call(...r(1:n)...) also):</div><div><p style="margin:0px;font-size:11px;font-family:Menlo">      <span style="color:rgb(187,44,162)">real</span>*<span style="color:rgb(39,42,216)">8</span> ::  rlocal(n)</p>
</div><div><br></div><div><p style="margin:0px;font-size:11px;font-family:Menlo">      rlocal(:)=<span style="color:rgb(39,42,216)">0.</span>d<span style="color:rgb(39,42,216)">0</span></p>
<p style="margin:0px;font-size:11px;font-family:Menlo">      <span style="color:rgb(187,44,162)">do</span> i=<span style="color:rgb(39,42,216)">1</span>,min(size(r),n)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">         rlocal(i) = r(i)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">      <span style="color:rgb(187,44,162)">enddo</span></p><p style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(0,132,0)">!        call dergl(n,r,c,g,even,g0)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(0,132,0)">!        call dergl(n,r,g,g2,.not.even,g0)</p><p style="margin:0px;font-size:11px;font-family:Menlo">        <span style="color:rgb(187,44,162)">call</span> dergl(n,rlocal,c,g,even,g<span style="color:rgb(39,42,216)">0</span>)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">


</p><p style="margin:0px;font-size:11px;font-family:Menlo">        <span style="color:rgb(187,44,162)">call</span> dergl(n,rlocal,g,g<span style="color:rgb(39,42,216)">2</span>,<span style="color:rgb(187,44,162)">.not.</span>even,g<span style="color:rgb(39,42,216)">0</span>)</p>
</div><div><br></div><div>DERGL.F</div><div>* In calls to Fornberg, the array &quot;A(0:Ninp)&quot; is made with a larger array &quot;RW(I)&quot;.  Solution: replace with appropriate subarray of size Ninp+1:</div><div><p style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(0,132,0)">
!                call  Fornberg(Ninp,Minp,RW(J),RW(J-N1),D)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">                <span style="color:rgb(187,44,162)">call</span>  Fornberg(Ninp,Minp,RW(J),RW(J-N<span style="color:rgb(39,42,216)">1</span>:J-N<span style="color:rgb(39,42,216)">1</span>+Ninp),D)</p>
</div><div><br></div><div><p style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(0,132,0)">!                call  Fornberg(Ninp,Minp,R(J),R(JL),D)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">                <span style="color:rgb(187,44,162)">call</span>  Fornberg(Ninp,Minp,R(J),R(JL:JL+Ninp),D)</p><p style="margin:0px;font-size:11px;font-family:Menlo"><br>
</p></div><div><p style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(0,132,0)">!      call  Fornberg(Ninp,Minp,0.0D0,RW(-N1),D)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">      <span style="color:rgb(187,44,162)">call</span>  Fornberg(Ninp,Minp,<span style="color:rgb(39,42,216)">0.0</span>D<span style="color:rgb(39,42,216)">0</span>,RW(-N<span style="color:rgb(39,42,216)">1</span>:-N<span style="color:rgb(39,42,216)">1</span>+Ninp),D)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo"><br></p></div><div>* In subroutine dergl_spline, rw is not initialized correctly for the &quot;even&quot; case: the lower point rw(-n+1) is uninitialized and could be anything.  Solution:</div>
<div><p style="margin:0px;font-size:11px;font-family:Menlo">       <span style="color:rgb(187,44,162)">else</span></p>
<p style="margin:0px;font-size:11px;font-family:Menlo">                <span style="color:rgb(187,44,162)">do</span> J=<span style="color:rgb(39,42,216)">1</span>,n<span style="color:rgb(39,42,216)">-1</span></p>
<p style="margin:0px;font-size:11px;font-family:Menlo">                        rw(-J<span style="color:rgb(39,42,216)">+1</span>)=-r(j)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">                        w<span style="color:rgb(39,42,216)">1</span>(-J<span style="color:rgb(39,42,216)">+1</span>)= f(J)</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">                <span style="color:rgb(187,44,162)">enddo</span></p>
<p style="margin:0px;font-size:11px;font-family:Menlo">                rw(-n<span style="color:rgb(39,42,216)">+1</span>)=-r(n) ! initialize this field!</p>
<p style="margin:0px;font-size:11px;font-family:Menlo;color:rgb(0,132,0)"><span style="color:rgb(0,0,0)">                w</span><span style="color:rgb(39,42,216)">1</span><span style="color:rgb(0,0,0)">(-n</span><span style="color:rgb(39,42,216)">+1</span><span style="color:rgb(0,0,0)">)=f(n)  </span>! Technically this is redundant (see w1=0 above).</p>

<p style="margin:0px;font-size:11px;font-family:Menlo">        <span style="color:rgb(187,44,162)">endif</span></p></div><div><span style="color:rgb(187,44,162)"><br></span></div><div><br></div><div>PS xcpot1.f has some unrelated issue with sigmamaxup and irsigmaup, which gets used without being initialized or something like that.  I don&#39;t remember the details now, and it doesn&#39;t seem to hinder the program, but it popped up during a runtime check at some point - I believe it was triggered by a WRITE statement containing r(irsigmaup) when irsigmaup can be uninitialized.</div>
<div><br></div><div><br></div><div><br></div><div>TEST SCRIPT:</div><div><br></div><div><p style="margin:0px;font-size:11px;font-family:Menlo">~/science/graphite13-opt-test% more ../MyWienTest </p>
<p style="margin:0px;font-size:11px;font-family:Menlo">#!/bin/tcsh -f</p>
<p style="margin:0px;font-size:11px;font-family:Menlo;min-height:13px"><br></p>
<p style="margin:0px;font-size:11px;font-family:Menlo">echo Running test in `pwd`</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">echo WIENROOT is $WIENROOT</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">rm -f *scf* *clm* *broy* *tmp* *vec* *def *error :log</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">x dstart -d</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">~/science/wien2k-12-noopt/dstart dstart.def</p>
<p style="margin:0px;font-size:11px;font-family:Menlo">run -ec 0.000001</p>
<p style="margin:0px;font-size:11px;font-family:Menlo;min-height:13px"><br></p>
<p style="margin:0px;font-size:11px;font-family:Menlo">exit 0</p>
<p style="margin:0px;font-size:11px;font-family:Menlo;min-height:13px"><br></p></div><div><br></div></div>