[Q-e-developers] calbec() hungs if # of MPI process > 1

Ilya Ryabinkin igryabinkin at gmail.com
Tue Nov 3 22:16:31 CET 2015


Dear Paolo:
theanks for the prompt reply.

This code snippet is a piece of a stand-alone module nacs.f90 I have
written. I attach it to the e-mail.

I call get_nacs() subroutine from subroutine verlet(), in particular,
past the line 229 of dynamics_module.f90, if the  matters.

> There isn't anything obviously wrong in your piece of code. Is it inside a
> modified version of pw.x, or is it stand-alone? in the latter case, there
> might be some missing initialization.

It sounds relevant. Indeed, in extrapolate_wfcs() the very first (as
well as the very last) line is

  CALL mp_barrier( intra_image_comm ) ! debug

I tried to add these lines to my get_nacs() as well, but it doesn't do
any good: code hungs immediately, without even going past mp_barrier()

--
Ilya


In the former case...it shouldn't
> happen. Anyway: try first of all to figure out where your code hangs.
> "calbec" is an interface to several different routines. Maybe it goes into
> the wrong one. It should just do a call to DGEMM or ZGEMM and a call to
> mp_sum (wrapper to mpi_reduce)
>
> Paolo
>
> On Tue, Nov 3, 2015 at 7:47 PM, Ilya Ryabinkin <igryabinkin at gmail.com>
> wrote:
>>
>> Dear colleagues:
>> I'm developing a code to calculate the non-adiabatic couplings using
>> finite-difference scheme. The problem I currently stumbled upon is the
>> following:
>>
>> I need to calculate the overlap matrix between MOs at t-dt and t,
>> gamma_only. What  I'm doing:
>>
>> Code is borrowed from update_pot.f90, subroutine extrapolate_wfcs(),
>> lines  595-600
>>
>>       ALLOCATE( evcold( npwx, nbnd ), aux( npwx, nbnd ) )
>>       !! Retreive old WF at t-dt from *.oldwfc file
>>       CALL davcio( evcold, 2*nwordwfc, iunoldwfc, 1, -1 )
>>       !! Get current WF at t
>>       aux = evc
>>       !
>>      ALLOCATE( S( nbnd, nbnd ), O( nbnd, nbnd ) )
>>       CALL calbec( npw, aux, evcold, S ) ! Get overlap S(t-dt, t)
>>       !
>>       O = ANINT( S )    ! O is a rounded S matrix to perform phase and
>>                                 ! ordering matching
>>       IF ( ANY( diag( O ) == 0.0_dp ) ) THEN
>>          ...
>>
>> Essentially, my code hungs at calbec() call if I ran it in parallell
>> with # of MPI process >1. gdb shows that processes are in a polling
>> loop, which means that they are wait for something. I'm baffled at
>> this point, as there is nothing they should wait for.
>>
>> What I am missing?
>>
>> Thanks for the help,
>> Ilya
>> _______________________________________________
>> Q-e-developers mailing list
>> Q-e-developers at qe-forge.org
>> http://qe-forge.org/mailman/listinfo/q-e-developers
>
>
>
>
> --
> Paolo Giannozzi, Dept. Chemistry&Physics&Environment,
> Univ. Udine, via delle Scienze 208, 33100 Udine, Italy
> Phone +39-0432-558216, fax +39-0432-558222
>
> _______________________________________________
> Q-e-developers mailing list
> Q-e-developers at qe-forge.org
> http://qe-forge.org/mailman/listinfo/q-e-developers
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nacs.f90
Type: text/x-fortran
Size: 11070 bytes
Desc: not available
URL: <http://lists.quantum-espresso.org/pipermail/developers/attachments/20151103/4fc34f7d/attachment.bin>


More information about the developers mailing list