[Wien] lapw2c run-time error (with suggested code correction)

Peter Blaha pblaha at theochem.tuwien.ac.at
Mon Feb 18 07:56:51 CET 2008


Thanks for this report. I've found this problem too and it will be fixed 
in the next release.

Michal Wierzbicki schrieb:
> lapw2c crashed during an SCF calculation of BaC crystal in the wurtzite
> structure with an 'illegal instruction' message. I am using the followig 
> software:
> 
> Wien2k 08.1
> Intel Fortran 9.1.052
> Intel MKL 9.0
> 
> I recompiled SRC_lapw2/* with the following compiler options
> 
> FOPT =  -FR -mp1 -w -prec_div -pc80 -O0 -traceback -check -debug
> 
> Then I got the following error message:
> 
> forrtl: severe (408): fort: (2): Subscript #1 of the array EB has value 63
> which is greater than the upper bound of 62
> Image              PC        Routine            Line        Source
> lapw2c             08127BAE  eweigh_                   648  fermi_tmp_.F
> 
> It seems that error is at line 648 in fermi.F file. There is a logical .and.
> in the do-while loop condition there.
> If the first condition "(nn+ndeg).le.nnn" is false optimizing compiler
> may decide to not evaluate the rest.
> However if it does then the second condition requires the element
> eb(nn+ndeg,kk,jspin1) of an array which is out of bound.
> I think the solution is to split the logical .and. and evaluate the rest
> inside the do-loop, with the conditional exit out of the loop.
> 
> ******************* patch begins *****************************************
> 
> --- fermi.F.orig        2008-02-09 23:07:58.000000000 +0100
> +++ fermi.F     2008-02-09 23:34:17.000000000 +0100
> @@ -644,8 +645,8 @@
>           wecp=weight(nn+(jspin1-1)*nnn,kk)
>   !
>   ! check degeneracy
> -        do while((nn+ndeg).le.nnn.and. &
> -                 abs(eb(nn+ndeg,kk,jspin1)-eb(nn,kk,jspin1)).lt.abs(cordeg))
> +        do while((nn+ndeg).le.nnn)
> +         if(abs(eb(nn+ndeg,kk,jspin1)-eb(nn,kk,jspin1)).lt.abs(cordeg)) exit
>             if(abs(weight(nn+ndeg+(jspin1-1)*nnn,kk)     &
>                   -weight(nn+(jspin1-1)*nnn,kk)).ge.1e-6) ifcp=1
>             wecp=wecp+weight((nn+ndeg)+(jspin1-1)*nnn,kk)
> 
> ******************** patch ends ******************************************
> With regards,
> 
> Michal Wierzbicki
> Faculty of Physics
> Warsaw University of Technology
> Koszykowa 75 00-662 Warszawa
> Poland
> _______________________________________________
> Wien mailing list
> Wien at zeus.theochem.tuwien.ac.at
> http://zeus.theochem.tuwien.ac.at/mailman/listinfo/wien


More information about the Wien mailing list