Код Fortran вылетает из простой строки освобождения - PullRequest
0 голосов
/ 07 июня 2019

Я изменяю программу с открытым исходным кодом, и она падает при определенных настройках, когда выполняет очень простую строку.Я не могу понять, почему эта строка может вызвать сбой программы.Строка имеет вид

IF (allocated(bec%k))  DEALLOCATE(bec%k)

Эта строка выполняется несколько раз перед сбоем, но после определенного момента для определенных настроек программы происходит сбой программы.Потому что% k всегда выделяется при выполнении этой строки.Компилятор gfortran.

Вывод терминала, который появляется в результате ошибки, говорит:

free(): invalid next size (normal)
Program received signal SIGABRT: Process abort signal.
Backtrace for this error:
#0  0x7f428db872da in ???
#1  0x7f428db86503 in ???
#2  0x7f428cfe4f1f in ???
#3  0x7f428cfe4e97 in ???
#4  0x7f428cfe6800 in ???
#5  0x7f428d02f896 in ???
#6  0x7f428d036909 in ???
#7  0x7f428d03e0ac in ???
#8  0x56366a04e2b6 in __becmod_MOD_deallocate_bec_type
    at /home/john/Desktop/q-e-qe-6.3/Modules/becmod.f90:401
#9  0x563669e734f4 in update_hamiltonian_
    at /home/john/Desktop/ce-tddft-6.3-another-copy/src/update_ham.f90:61
#10  0x563669e7ab70 in molecule_optical_absorption_
    at /home/john/Desktop/ce-tddft-6.3-another-copy/src/molecule_optical_absorption.f90:538
#11  0x563669e6e2c4 in tddft_main
    at /home/john/Desktop/ce-tddft-6.3-another-copy/src/tddft_main.f90:118
#12  0x563669e6de6e in main
    at /home/john/Desktop/ce-tddft-6.3-another-copy/src/tddft_main.f90:19

Я также получаю следующее сообщение об ошибке в файле вывода:

mpirun noticed that process rank 0 with PID 0 on node JohnUbuntu exited on signal 6 (Aborted).

Если вам интересно, вот подпрограмма, частью которой является линия, а также тип данных bec

!-----------------------------------------------------------------------
  SUBROUTINE deallocate_bec_type (bec)
    !-----------------------------------------------------------------------
    !
    USE mp, ONLY: mp_get_comm_null
    IMPLICIT NONE
    TYPE (bec_type) :: bec
    !
    bec%comm = mp_get_comm_null()
    bec%nbnd = 0
    !
    IF (allocated(bec%r))  DEALLOCATE(bec%r)
    IF (allocated(bec%nc)) DEALLOCATE(bec%nc)
    IF (allocated(bec%k))  DEALLOCATE(bec%k)
    !
    RETURN
    !
  END SUBROUTINE deallocate_bec_type


  TYPE bec_type
     REAL(DP),   ALLOCATABLE :: r(:,:)    ! appropriate for gammaonly
     COMPLEX(DP),ALLOCATABLE :: k(:,:)    ! appropriate for generic k
     COMPLEX(DP),ALLOCATABLE :: nc(:,:,:)   ! appropriate for noncolin
     INTEGER :: comm
     INTEGER :: nbnd
     INTEGER :: nproc
     INTEGER :: mype
     INTEGER :: nbnd_loc
     INTEGER :: ibnd_begin
  END TYPE bec_type

Любые предложения о том, что вызывает это или что делать, будут очень благодарны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...