mirror of https://gitlab.com/QEF/q-e.git
138 lines
3.3 KiB
Fortran
138 lines
3.3 KiB
Fortran
!
|
|
! Copyright (C) 2001-2006 Quantum-ESPRESSO group
|
|
! This file is distributed under the terms of the
|
|
! GNU General Public License. See the file `License'
|
|
! in the root directory of the present distribution,
|
|
! or http://www.gnu.org/copyleft/gpl.txt .
|
|
!
|
|
!----------------------------------------------------------------------------
|
|
SUBROUTINE init_run()
|
|
!----------------------------------------------------------------------------
|
|
!
|
|
USE klist, ONLY : nkstot
|
|
USE wvfct, ONLY : nbnd, et, wg, btype
|
|
USE control_flags, ONLY : lmd,gamma_only
|
|
USE dynamics_module, ONLY : allocate_dyn_vars
|
|
USE paw_variables, ONLY : okpaw
|
|
USE paw_init, ONLY : paw_init_onecenter, allocate_paw_internals
|
|
#ifdef __PARA
|
|
USE paw_init, ONLY : paw_post_init
|
|
#endif
|
|
USE bp, ONLY : lberry, lelfield
|
|
USE gvect, ONLY : nrxx, nrx1, nrx2, nrx3, nr1, nr2, nr3, ecutwfc
|
|
! DCC
|
|
USE ee_mod, ONLY : do_comp, do_coarse
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
!
|
|
CALL start_clock( 'init_run' )
|
|
!
|
|
CALL setup()
|
|
!
|
|
! ... prepare index limits for allocations
|
|
CALL pre_init()
|
|
!
|
|
! ... allocate memory for G- and R-space fft arrays
|
|
!
|
|
CALL allocate_fft()
|
|
!
|
|
! ... generate reciprocal-lattice vectors and fft indices
|
|
!
|
|
CALL ggen()
|
|
!
|
|
CALL summary()
|
|
!
|
|
! ... allocate memory for all other arrays (potentials, wavefunctions etc)
|
|
!
|
|
CALL allocate_nlpot()
|
|
IF (okpaw) THEN
|
|
CALL allocate_paw_internals()
|
|
CALL paw_init_onecenter()
|
|
ENDIF
|
|
CALL allocate_locpot()
|
|
CALL allocate_wfc()
|
|
CALL allocate_bp_efield()
|
|
IF( lberry .or. lelfield) call bp_global_map()
|
|
! DCC
|
|
! ... Initializes EE variables
|
|
!
|
|
IF ( do_comp ) CALL init_ee(nrx1,nrx2,nrx3)
|
|
!
|
|
IF ( do_coarse ) THEN
|
|
CALL ggen_coarse()
|
|
CALL data_structure_coarse( gamma_only, nr1,nr2,nr3, ecutwfc )
|
|
END IF
|
|
|
|
CALL memory_report()
|
|
!
|
|
ALLOCATE( et( nbnd, nkstot ) , wg( nbnd, nkstot ), btype( nbnd, nkstot ) )
|
|
!
|
|
et(:,:) = 0.D0
|
|
wg(:,:) = 0.D0
|
|
!
|
|
btype(:,:) = 1
|
|
!
|
|
CALL openfil()
|
|
!
|
|
CALL hinit0()
|
|
!
|
|
CALL potinit()
|
|
!
|
|
CALL newd()
|
|
!
|
|
CALL wfcinit()
|
|
!
|
|
#ifdef __PARA
|
|
! Cleanup PAW arrays that are only used for init
|
|
IF (okpaw) CALL paw_post_init() ! only parallel!
|
|
#endif
|
|
!
|
|
IF ( lmd ) CALL allocate_dyn_vars()
|
|
!
|
|
CALL stop_clock( 'init_run' )
|
|
!
|
|
|
|
RETURN
|
|
!
|
|
END SUBROUTINE init_run
|
|
!
|
|
!----------------------------------------------------------------------------
|
|
SUBROUTINE pre_init()
|
|
!----------------------------------------------------------------------------
|
|
!
|
|
USE ions_base, ONLY : nat, nsp, ityp
|
|
USE uspp_param, ONLY : upf, lmaxkb, nh, nhm, nbetam
|
|
USE uspp, ONLY : nkb, nkbus
|
|
IMPLICIT NONE
|
|
INTEGER :: na, nt, nb
|
|
!
|
|
! calculate the number of beta functions for each atomic type
|
|
!
|
|
lmaxkb = - 1
|
|
do nt = 1, nsp
|
|
nh (nt) = 0
|
|
do nb = 1, upf(nt)%nbeta
|
|
nh (nt) = nh (nt) + 2 * upf(nt)%lll(nb) + 1
|
|
lmaxkb = max (lmaxkb, upf(nt)%lll(nb) )
|
|
enddo
|
|
enddo
|
|
!
|
|
! calculate the maximum number of beta functions
|
|
!
|
|
nhm = MAXVAL (nh (1:nsp))
|
|
nbetam = MAXVAL (upf(:)%nbeta)
|
|
!
|
|
! calculate the number of beta functions of the solid
|
|
!
|
|
nkb = 0
|
|
nkbus = 0
|
|
do na = 1, nat
|
|
nt = ityp(na)
|
|
nkb = nkb + nh (nt)
|
|
if (upf(nt)%tvanp) nkbus = nkbus + nh (nt)
|
|
enddo
|
|
|
|
|
|
END SUBROUTINE pre_init
|