[QE-developers] TR: Bugs in cp.x from QE 7.2 affecting stresses calculated with US pseudos and CG
RABONE Jeremy
jeremy.rabone at get.omp.eu
Mon Oct 14 10:57:14 CEST 2024
Hello,
Any calculation I have run on the 3 clusters I use produced the error - a water molecule in vacuum using US pseudos and cg gives impossible stresses from the first step.
iii) Yes, the stress is correct after the changes.
i) The thing is there shouldn't be a problem, but it seems that the declared array sizes in cg_sub cause the compiler to rearrange the arrays anyway. You are correct, changing cg_sub to:
CHARACTER(LEN=80) :: uname
CHARACTER(LEN=6), EXTERNAL :: int_to_char
integer :: nfi, nlam
logical :: tfirst, tlast
complex(dp) :: eigr(:, :)
real(dp) :: bec(:, :)
real(dp) :: becdr(:, :, :)
integer :: irb(:, :)
complex(dp) :: eigrb(:, :)
real(dp) :: rhor(:, :)
real(dp) :: vpot(:, :)
complex(dp) :: rhog(:, :)
real(dp) :: rhos(:, :)
real(dp) :: rhoc(:)
complex(dp) :: ei1(:, :)
complex(dp) :: ei2(:, :)
complex(dp) :: ei3(:, :)
complex(dp) :: sfac(:, :)
real(dp) :: fion(:, :)
real(dp) :: ema0bg(:)
real(dp) :: lambdap(:, :, :)
real(dp) :: lambda(:, :, :)
complex(dp) :: c0(:, :)
complex(dp) :: c0_d(:, :)
complex(dp) :: cm(:, :)
complex(dp) :: phi(:, :)
complex(dp) :: phi_tmp(ngw, nbspx)
real(dp) :: dbec(:, :, :, :)
solved this part of the problem on one of the clusters I use. However, the sysadmins of the other 2 clusters I use don't want to make arbitrary changes without an official patch since there are other users of QE and, as the rest of the world is so apt to point out, I apparently don't have a clue. The introduction of random values is probably also solved by this since they only get mixed into the matrix by the rearrangement, but zeroing the array after allocation would have stopped the other half of WTF arising in the stress matrix.
ii) It probably isn't that important, but moving the call "if ( tstress ) CALL nlfh( stress, bec_bgrp, dbec, lambda, idesc )" to just after dbec is calculated "if ( tstress ) CALL caldbec_bgrp( eigr, cm_bgrp, dbec, idesc )" about 15 lines below seems like a good idea if only to avoid random crap in the stress matrix on the first pass.
Kind regards,
Jeremy
________________________________
De : Paolo Giannozzi <paolo.giannozzi at uniud.it>
Envoyé : samedi 12 octobre 2024 10:53
À : RABONE Jeremy
Cc : General discussion list for Quantum ESPRESSO developers
Objet : Re: [QE-developers] TR: Bugs in cp.x from QE 7.2 affecting stresses calculated with US pseudos and CG
Thank you for reporting.
i) nkb and nhsa are actually the same variable. Not sure what "nrcx" is,
but in any case, the called routine is in a module so one can just write
real(dp) :: dbec(:,:,:,:)
and stop worrying about the correctness of the
ii) almost no code is executed for CG calculations (tcg=.true.) in
from_scra.f90; for tcg=.false., the needed call is present, it seems to
me. What did you change exactly?
iii) Is stress working after your changes? can you provide a simple example?
Paolo
On 04/10/2024 09:41, RABONE Jeremy wrote:
>
> ------------------------------------------------------------------------
> *De :* RABONE Jeremy
> *Envoyé :* jeudi 3 octobre 2024 13:04
> *À :* users at lists.quantum-espresso.org
> *Objet :* Bugs in cp.x from QE 7.2 affecting stresses calculated with US
> pseudos and CG
>
> Hello,
>
> I have been getting some weird stress values in MD calculations using
> cp.x from QE 7.2 with ultrasoft pseudopotentials and after some
> rummaging I have found a couple of bugs:
>
> i) The dbec array gets inadvertantly altered through the call to
> cg_sub.f90 where is is assigned a different size "real(dp) :: dbec(nkb,
> nbspx, 3, 3)" than initially allocated in mainvar.f90
> "ALLOCATE( dbec( nhsa, 2*nrcx, 3, 3 ), STAT=ierr )". The upshot of this
> is that the values of dbec get jumbled and the resulting stress tensor
> is messed up (and physically nonsensical). Also, since dbec is not
> zeroed and the initially allocated size does not seem to correspond to
> the used size, this also has the effect of introducing random values
> into the stress tensor, although zeroing dbec after the allocation in
> mainvar.f90 fixes this.
>
> ii) In fromscra.f90 the constraints contribution to the stress is
> calculated "if ( tstress ) CALL nlfh( stress, bec_bgrp, dbec, lambda,
> idesc )" before the dbec array has been calculated "if ( tstress ) CALL
> caldbec_bgrp( eigr, cm_bgrp, dbec, idesc )".
>
>
> Kind regards,
>
> Jeremy
>
>
> ________________________________________________
> The Quantum ESPRESSO community stands by the Ukrainian people
> and expresses its concerns about the devastating effects that
> the Russian military offensive has on their country and on the
> free and peaceful scientific, cultural, and economic cooperation
> amongst peoples.
> _______________________________________________
> developers mailing list
> developers at lists.quantum-espresso.org
> https://lists.quantum-espresso.org/mailman/listinfo/developers
--
Paolo Giannozzi, Dip. Scienze Matematiche Informatiche e Fisiche,
Univ. Udine, via delle Scienze 206, 33100 Udine Italy, +39-0432-558216
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.quantum-espresso.org/pipermail/developers/attachments/20241014/21771ab9/attachment.html>
More information about the developers
mailing list