[Wien] mbj on Diamond

Kamil Klier kk04 at Lehigh.EDU
Wed Nov 10 23:55:15 CET 2010


Dear Prof. Blaha,

Your attached brj.j triggers the following error message after a crash  
in our CFN-BNL environment:

*******************************************************************************************************
LAPW0 END
forrtl: severe (174): SIGSEGV, segmentation fault occurred
Image              PC                Routine            Line        Source
lapw0              000000000040A79E  brj_                       37  brj.f
lapw0              000000000047338D  vxclm2_                   534  vxclm2.f
lapw0              000000000047B565  xcpot1_                   365  xcpot1.f
lapw0              00000000004393FA  MAIN__                   1696  lapw0.F
lapw0              0000000000403A1C  Unknown               Unknown  Unknown
libc.so.6          000000370E01D994  Unknown               Unknown  Unknown
lapw0              0000000000403929  Unknown               Unknown  Unknown
********************************************************************************************************

However, the file brj.j_current, which I am now attaching, does not  
crash in the same runs, although the covergence is very slow.

This prompts the questions:

Q1:  What's wrong with the attached brj.f_current ?

Q2:  For my curiosity, what does the parameter "ir" do ? [I have  
attempted to trace it in vxclm2.f,also attached, where it is  
referenced, but the calls to BRJ do not include ",ir" as you suggest]

The runs involved are 128 atom supercells of ZnO with various dopants.  
  The 'regular scf' converges well, the slow convergence occurs in the  
mBJ runs with option 28 in *in0 and 50 in *in0_grr, even though the  
PRATT option in *inm is used.

I believe I have the latest version of WIEN2k, 10.2.

Regards,

Kamil Klier

Quoting Peter Blaha <pblaha at theochem.tuwien.ac.at>:

> Hi,
> No, use the attached one.
>
> Note: it has one more parameter (ir), thus the calling in vxclm2.f
> should also be modified and   ",ir"   should be added to all calls.
>
> Best regards
>
> Am 06.11.2010 14:59, schrieb Kamil Klier:
>> Dear Prof. Blaha,
>>
>> Is the brj.f file referred to in this e-mail (attached as  
>> brj.f_new) one that should replace any previous brj.f files (for  
>> example, attached as brj.f_old)?
>>
>> Regards,
>>
>> Kamil Klier
>>
>> Quoting Peter Blaha <pblaha at theochem.tuwien.ac.at>:
>>
>>> Hi,
>>> After I got the struct file, I could verify the problem.
>>>
>>> As expected, it is again in the SRC_lapw0/brj.f subroutine,
>>> where one has to find the root of a function.
>>>
>>> For strange densities this is numerically non-trivial.
>>>
>>> The problem at the nucleus of heavy elements was solved before, but
>>> here is the problem in the interstitial, when rho is very small and
>>> also grad-rho, tau and laplace-rho are sufficiently small.
>>>
>>> Then the required functions are "nearly" zero (lt. 10^-6) for a range
>>> of x=10-30; but using x=30 produces a V-xc potential of -100 Ry,
>>> which is the reason for your "Eigenvalues below zero".
>>>
>>> When such problems occur again, please check also case.output0.
>>> The Fourier coefficients of Vxc must "converge", i.e. (0 0 0) should be
>>> order one, while (0 0 30) should be order 10^-5 .
>>>
>>> The attached subroutine brj.f should fix these problems (at least  
>>> your case converges
>>> smoothly).
>>>
>>> Dear All,
>>>
>>>
>>>
>>> We are performing the mbj calculations for a carbon based  
>>> compound. According to the usersguide there are three SCF cycles  
>>> for mbj calculations: first a regular calculations
>>> within LDA/GGA (we use the PBE-GGA here), second one more cycle  
>>> run_lapw ?NI ?i 1 , and third the mbj run after changing the  
>>> potential energy functional indxc=28 in case.in0 and
>>> index=50 in case.in0_grr.
>>>
>>> Here we call the regular SCF cycles C1.scf, second one-more SCF  
>>> cycle as C2.scf, and the third the mbj as cycle C3.scf.
>>>
>>> The first regular cycle and the second run_lapw ?NI ?i 1 are  
>>> converged smoothly. However, the third mbj cycle is stopped at  
>>> lapw2 in its second iteration.
>>>
>>> We analyzed the problem to find the source of the error. The  
>>> result is given below, where the C2.scf line refers to the last  
>>> :ITE of the second one more SCF cycle, and the
>>> C3.scf refers to the first :ITE of the third mbj run:
>>>
>>>
>>>
>>> C2.scf::NTO033: TOTAL CHARGE IN SPHERE 1 = 3.9781366
>>>
>>> C3.scf::NTO033: TOTAL CHARGE IN SPHERE 1 = 2.4250427
>>>
>>>
>>>
>>> C2.scf::CTO033: TOTAL CHARGE IN SPHERE 1 = 3.9781254
>>>
>>> C3.scf::CTO033: TOTAL CHARGE IN SPHERE 1 = 3.9470631
>>>
>>>
>>>
>>> C2.scf::DIS : CHARGE DISTANCE ( 0.0000355 for atom 33 spin 1) 0.0000136
>>>
>>> C3.scf::DIS : CHARGE DISTANCE ( 1.8978668 for atom 25 spin 1) 1.5016586
>>>
>>>
>>>
>>> C2.scf::NEC01: NUCLEAR AND ELECTRONIC CHARGE 366.00000 365.98257 1.00005
>>>
>>> C3.scf::NEC01: NUCLEAR AND ELECTRONIC CHARGE 366.00000 365.98171 1.00005
>>>
>>>
>>>
>>> C2.scf::FER : F E R M I - ENERGY(TETRAH.M.)= 0.21390
>>>
>>> C3.scf::FER : F E R M I - ENERGY(TETRAH.M.)= -1.44751
>>>
>>>
>>>
>>> The result clearly shows that there is a jump in :NTO, :DIS, and  
>>> :FER (But in :CTO) after changing the functional to index=28.
>>>
>>>
>>>
>>> --
>>>
>>> P.Blaha
>>> --------------------------------------------------------------------------
>>> Peter BLAHA, Inst.f. Materials Chemistry, TU Vienna, A-1060 Vienna
>>> Phone: +43-1-58801-15671 FAX: +43-1-58801-15698
>>> Email: blaha at theochem.tuwien.ac.at WWW: http://info.tuwien.ac.at/theochem/
>>> --------------------------------------------------------------------------
>>>
>>
>>
>>
>> ----------------------------------------------------------------
>> This message was sent using IMP, the Internet Messaging Program.
>>
>>
>>
>> _______________________________________________
>> Wien mailing list
>> Wien at zeus.theochem.tuwien.ac.at
>> http://zeus.theochem.tuwien.ac.at/mailman/listinfo/wien
>
> -- 
>
>                                       P.Blaha
> --------------------------------------------------------------------------
> Peter BLAHA, Inst.f. Materials Chemistry, TU Vienna, A-1060 Vienna
> Phone: +43-1-58801-15671             FAX: +43-1-58801-15698
> Email: blaha at theochem.tuwien.ac.at    WWW: http://info.tuwien.ac.at/theochem/
> --------------------------------------------------------------------------
>



----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

-------------- next part --------------
      SUBROUTINE BRJ(RHO,GRHO,G2RHO,TAU,VXBRJ)
!A. D. Becke and M. R. Roussel, Phys. Rev. A 39, 3761 (1989).
!A. D. Becke and E. R. Johnson, J. Chem. Phys. 124, 221101 (2006).

      USE xcparam

      IMPLICIT REAL*8(A-H,O-Z)

      SAVE X
      DATA X/0D0/
      PI = 4D0*DATAN(1D0)

      IF (RHO .GT. 1D-18) THEN

         TOL = 1D-4
         F = 10D0*TOL
         NLOOP = 0
         X1 = 0D0
         X2 = 0D0

tauw = 0.125d0*grho*grho*2.d0/rho
if(tau.lt.tauw) then
   tau_falsch=tau
   tau=tauw
endif
         D = TAU - 0.25D0*GRHO**2D0/RHO

         Q = (1D0/6D0)*(G2RHO - 2D0*0.8D0*D)
if(tau.eq.tauw .and. q.lt.-1.d9) then
q1=q
!print*,'rho,x,q,tau,grho,g2rho',rho,x,q1,tau,grho,g2rho,'tf=',tau_falsch
   q=-1.d9

endif
   10    DO WHILE (DABS(F) .GE. TOL)

            F = X*DEXP(-2D0*X/3D0)*Q - &
                (2D0/3D0)*PI**(2D0/3D0)*(X-2D0)*RHO**(5D0/3D0)

            DF = (1D0-(2D0/3D0)*X)*DEXP(-2D0*X/3D0)*Q - &
                 (2D0/3D0)*PI**(2D0/3D0)*RHO**(5D0/3D0)

            IF (DABS(DF) .GT. 1D-18) THEN

               X = X - F/DF

            ELSE

               X = X - F/SIGN(1D-18,DF)

            ENDIF
!print*,'f,df,x,nloop', f,df,x,nloop

            IF ((NLOOP .GE. 400) .OR. (DABS(X) .GE. 1D10) .OR. (DABS(F) .GE. 1D10)) THEN
               X = X1
               X1 = X1 + 1D0
               F = 10D0*TOL
               NLOOP = 0
               GOTO 10

            ENDIF

            NLOOP = NLOOP + 1

         ENDDO

         IF (X .LT. 0D0) THEN

            X = X2
            X2 = X2 + 1D0
            F = 10D0*TOL
            NLOOP = 0
            GOTO 10

         ENDIF

         B = (X**3D0*DEXP(-X)/(8D0*PI*RHO))**(1D0/3D0)

         IF (B .GT. 1D-18) THEN

            VXBRJ = -(1D0 - DEXP(-X) - 0.5D0*X*DEXP(-X))/B

            IF (TAU .GE. 0D0) THEN

              VXBRJ = XCCONST*VXBRJ + (3D0*XCCONST-2D0)*DSQRT(5D0/12D0)/PI*DSQRT(TAU/RHO)

            ELSE

              VXBRJ = XCCONST*VXBRJ - (3D0*XCCONST-2D0)*DSQRT(5D0/12D0)/PI*DSQRT(ABS(TAU/RHO))

            ENDIF

         ELSE

            VXBRJ = 0D0

         ENDIF

      ELSE

         VXBRJ = 0D0

      ENDIF

      RETURN

      END
-------------- next part --------------
! potential option 28: modified Becke-Johnson for the exchange potential and
!                      LDA for the correlation potential.
!                      LDA for the exchange-correlation energy functional.
!
      else IF (IGRAD .EQ. 28) THEN

      GDGGu=GXU*GGXU+GYU*GGYU+GZU*GGZU
      GDGGd=GXD*GGXD+GYD*GGYD+GZD*GGZD
      T=SQRT((GXU+GXD)**2+(GYU+GYD)**2+(GZU+GZD)**2)
      call pbe2(fu,gmagu,gdggu,g2u,fd,gmagd,gdggd,g2d, &
                 t,gdggt,1,1, &
             exupls,exdnls,vxupls,vxdnls,eclsd,vcupls,vcdnls, &
             exuppw,exdnpw,vxuppw,vxdnpw,ecpw,vcuppw,vcdnpw, &
             exuppb,exdnpb,vxuppb,vxdnpb,ecpbe,vcuppb,vcdnpb)

      exu=2.d0*(exupls + eclsd)
      exd=2.d0*(exdnls + eclsd)

      tauup=(tauup+2.d0*g2u*0.25d0-vxuold*fu)*0.5d0
      taudn=(taudn+2.d0*g2d*0.25d0-vxdold*fd)*0.5d0

      XCCONST = XCA + XCB*GRR**XCP

      CALL BRJ(FU,GMAGU,G2U,2D0*TAUUP,VXBRJU)
      VXU = 2D0*(VXBRJU + VCUPLS)

      CALL BRJ(FD,GMAGD,G2D,2D0*TAUDN,VXBRJD)
      VXD = 2D0*(VXBRJD + VCDNLS)

!      if(ir.ne.index.and.ir.gt.770.and.ir.lt.777) then
!      write(6,'(i11,6e13.5)') ir, vxmix,grr,xcconst,fu,vxuold,vxu
!      endif
!      index=ir

      VXU = vxmix*VXU + (1.d0-vxmix)*VXUOLD
      VXD = vxmix*VXD + (1.d0-vxmix)*VXDOLD

      if(fu.lt.tlev) then
          exu=2.d0*(exupls+eclsd)
          vxu=2.d0*(vxupls+vcupls)
      endif
      if(fd.lt.tlev) then
          exd=2.d0*(exdnls+eclsd)
          vxd=2.d0*(vxdnls+vcdnls)
      endif

      RETURN


More information about the Wien mailing list