2003-01-20 05:58:50 +08:00
|
|
|
!
|
2008-09-01 22:17:12 +08:00
|
|
|
! Copyright (C) 2001-2008 Quantum-ESPRESSO group
|
2003-01-20 05:58:50 +08:00
|
|
|
! 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 .
|
|
|
|
!
|
|
|
|
!-----------------------------------------------------------------------
|
2004-07-09 23:50:50 +08:00
|
|
|
PROGRAM phonon
|
2003-01-20 05:58:50 +08:00
|
|
|
!-----------------------------------------------------------------------
|
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
! ... This is the main driver of the phonon program. It controls
|
|
|
|
! ... the initialization routines and the self-consistent cycle.
|
|
|
|
! ... At the end of the self-consistent run the dynamical matrix is
|
|
|
|
! ... computed. In the case q=0 the dielectric constant and the effective
|
|
|
|
! ... charges are computed.
|
|
|
|
!
|
|
|
|
USE kinds, ONLY : DP
|
2008-07-23 16:46:48 +08:00
|
|
|
USE io_global, ONLY : stdout, ionode
|
2008-10-23 15:04:43 +08:00
|
|
|
USE control_flags, ONLY : conv_ions, modenum, twfcollect
|
2008-09-19 04:27:46 +08:00
|
|
|
USE klist, ONLY : lgauss, nks
|
2008-09-06 01:11:25 +08:00
|
|
|
USE basis, ONLY : starting_wfc, starting_pot, startingconfig
|
2004-07-09 23:50:50 +08:00
|
|
|
USE force_mod, ONLY : force
|
2008-07-23 16:46:48 +08:00
|
|
|
USE io_files, ONLY : prefix, tmp_dir, nd_nmbr
|
2008-09-01 22:17:12 +08:00
|
|
|
USE input_parameters,ONLY : pseudo_dir
|
2004-07-09 23:50:50 +08:00
|
|
|
USE ions_base, ONLY : nat
|
2008-09-01 22:17:12 +08:00
|
|
|
USE symme, ONLY : nsym
|
2008-07-23 16:46:48 +08:00
|
|
|
USE start_k, ONLY : xk_start, wk_start, nks_start
|
2008-09-01 22:17:12 +08:00
|
|
|
USE noncollin_module,ONLY : noncolin
|
2008-09-02 00:37:50 +08:00
|
|
|
USE control_flags, ONLY : restart
|
2004-07-09 23:50:50 +08:00
|
|
|
USE qpoint, ONLY : xq, nksq
|
2008-07-23 16:46:48 +08:00
|
|
|
USE modes, ONLY : nirr
|
|
|
|
USE partial, ONLY : done_irr, comp_irr
|
|
|
|
USE disp, ONLY : nqs, x_q, done_iq
|
2006-07-26 23:02:37 +08:00
|
|
|
USE control_ph, ONLY : ldisp, lnscf, lgamma, lgamma_gamma, convt, &
|
2008-07-23 16:46:48 +08:00
|
|
|
epsil, trans, elph, zue, recover, rec_code, &
|
|
|
|
lnoloc, lrpa, done_bands, xml_not_of_pw, &
|
|
|
|
start_q,last_q,start_irr,last_irr,current_iq,&
|
2008-10-23 22:47:04 +08:00
|
|
|
reduce_io, all_done, where_rec, do_band
|
2006-03-30 17:43:38 +08:00
|
|
|
USE freq_ph
|
2004-07-09 23:50:50 +08:00
|
|
|
USE output, ONLY : fildyn, fildrho
|
|
|
|
USE global_version, ONLY : version_number
|
2005-03-05 01:46:02 +08:00
|
|
|
USE ramanm, ONLY : lraman, elop
|
2006-06-30 16:54:04 +08:00
|
|
|
USE check_stop, ONLY : check_stop_init
|
2008-07-23 16:46:48 +08:00
|
|
|
USE ph_restart, ONLY : ph_readfile, ph_writefile
|
|
|
|
USE save_ph, ONLY : save_ph_input_variables, &
|
|
|
|
restore_ph_input_variables, clean_input_variables
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
IMPLICIT NONE
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
INTEGER :: iq, iq_start, ierr, iu
|
|
|
|
INTEGER :: irr
|
2008-10-23 22:47:04 +08:00
|
|
|
LOGICAL :: exst
|
2004-07-09 23:50:50 +08:00
|
|
|
CHARACTER (LEN=9) :: code = 'PHONON'
|
2008-07-23 16:46:48 +08:00
|
|
|
CHARACTER (LEN=256) :: auxdyn
|
2006-02-02 01:56:16 +08:00
|
|
|
CHARACTER(LEN=6), EXTERNAL :: int_to_char
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2007-06-04 23:01:14 +08:00
|
|
|
#if defined __INTEL
|
|
|
|
! ... Intel compilers v .ge.8 allocate a lot of stack space
|
|
|
|
! ... Stack limit is often small, thus causing SIGSEGV and crash
|
|
|
|
CALL remove_stack_limit ( )
|
|
|
|
#endif
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
CALL init_clocks( .TRUE. )
|
|
|
|
!
|
|
|
|
CALL start_clock( 'PHONON' )
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
CALL startup( nd_nmbr, code, version_number )
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
WRITE( stdout, '(/5x,"Ultrasoft (Vanderbilt) Pseudopotentials")' )
|
|
|
|
!
|
|
|
|
! ... and begin with the initialization part
|
|
|
|
!
|
|
|
|
CALL phq_readin()
|
|
|
|
!
|
2006-06-30 16:54:04 +08:00
|
|
|
CALL check_stop_init()
|
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
! ... Checking the status of the calculation
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
IF (recover) THEN
|
|
|
|
CALL ph_readfile('init',ierr)
|
|
|
|
CALL check_restart_recover(iq_start,start_q,current_iq)
|
|
|
|
IF ( .NOT.(ldisp .OR. lnscf )) THEN
|
|
|
|
last_q=1
|
|
|
|
ELSEIF (ierr == 0) THEN
|
|
|
|
IF (last_q<1.OR.last_q>nqs) last_q=nqs
|
|
|
|
IF (ldisp) auxdyn = fildyn
|
|
|
|
ENDIF
|
|
|
|
IF (ierr /= 0) recover=.FALSE.
|
|
|
|
ELSE
|
|
|
|
ierr=1
|
|
|
|
ENDIF
|
2008-10-23 22:47:04 +08:00
|
|
|
!
|
|
|
|
CALL save_ph_input_variables()
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
IF (ierr /= 0) THEN
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
! recover file not found or not looked for
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
done_bands=.FALSE.
|
|
|
|
xml_not_of_pw=.FALSE.
|
|
|
|
iq_start=start_q
|
|
|
|
IF (ldisp) THEN
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
! ... Calculate the q-points for the dispersion
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
CALL q_points()
|
|
|
|
!
|
|
|
|
! ... Store the name of the matdyn file in auxdyn
|
|
|
|
!
|
|
|
|
auxdyn = fildyn
|
|
|
|
!
|
|
|
|
! ... do always a non-scf calculation
|
|
|
|
!
|
|
|
|
lnscf = .TRUE.
|
|
|
|
!
|
|
|
|
IF (last_q<1.or.last_q>nqs) last_q=nqs
|
|
|
|
!
|
|
|
|
ALLOCATE(done_iq(nqs))
|
|
|
|
done_iq=0
|
|
|
|
!
|
|
|
|
ELSE IF ( lnscf ) THEN
|
|
|
|
!
|
|
|
|
nqs = 1
|
|
|
|
last_q = 1
|
|
|
|
ALLOCATE(x_q(3,1))
|
2008-09-19 04:27:46 +08:00
|
|
|
x_q(:,1)=xq(:)
|
2008-07-23 16:46:48 +08:00
|
|
|
ALLOCATE(done_iq(1))
|
|
|
|
done_iq=0
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
ELSE
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
nqs = 1
|
|
|
|
last_q = 1
|
|
|
|
ALLOCATE(x_q(3,1))
|
|
|
|
x_q(:,1)=xq(:)
|
|
|
|
ALLOCATE(done_iq(1))
|
|
|
|
done_iq=0
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
END IF
|
|
|
|
END IF
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
IF (nks_start==0) CALL errore('phonon','wrong starting k',1)
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
IF ( lnscf ) CALL start_clock( 'PWSCF' )
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
DO iq = iq_start, last_q
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
IF (done_iq(iq)==1) CYCLE
|
|
|
|
!
|
|
|
|
current_iq=iq
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
IF ( ldisp ) THEN
|
|
|
|
!
|
|
|
|
! ... set the name for the output file
|
|
|
|
!
|
|
|
|
fildyn = TRIM( auxdyn ) // TRIM( int_to_char( iq ) )
|
|
|
|
!
|
|
|
|
! ... set the q point
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
|
|
|
xq(1:3) = x_q(1:3,iq)
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-09-19 04:27:46 +08:00
|
|
|
lgamma = ( xq(1) == 0.D0 .AND. xq(2) == 0.D0 .AND. xq(3) == 0.D0 )
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2007-09-13 20:42:51 +08:00
|
|
|
IF ( lgamma ) THEN
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2007-09-13 20:42:51 +08:00
|
|
|
IF ( .NOT. lgauss ) THEN
|
|
|
|
!
|
|
|
|
! ... in the case of an insulator at q=0 one has to calculate
|
|
|
|
! ... the dielectric constant and the Born eff. charges
|
|
|
|
!
|
|
|
|
epsil = .TRUE.
|
|
|
|
zue = .TRUE.
|
|
|
|
!
|
|
|
|
ELSE
|
|
|
|
!
|
|
|
|
epsil = .FALSE.
|
|
|
|
zue = .FALSE.
|
|
|
|
!
|
|
|
|
END IF
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2007-09-13 20:42:51 +08:00
|
|
|
ELSE
|
|
|
|
!
|
|
|
|
! ... for q != 0 no calculation of the dielectric tensor
|
|
|
|
! ... and Born eff. charges
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
epsil = .FALSE.
|
|
|
|
zue = .FALSE.
|
|
|
|
!
|
2007-09-13 20:42:51 +08:00
|
|
|
! ... non-scf calculation needed:
|
|
|
|
! ... reset the k-points to their starting values. Note that
|
|
|
|
! ... in LSDA case k-points are already doubled to account for
|
|
|
|
! ... spin polarization: restore the original number of k-points
|
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
END IF
|
2007-12-04 17:40:58 +08:00
|
|
|
ENDIF
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
! Save the current status of the run
|
|
|
|
!
|
|
|
|
CALL ph_writefile('init',0)
|
|
|
|
!
|
2007-12-03 16:40:15 +08:00
|
|
|
! ... In the case of q != 0, we make first a non selfconsistent run
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2008-10-23 22:47:04 +08:00
|
|
|
do_band=do_band.and.((start_irr /= 0).OR.(last_irr /= 0))
|
2008-09-02 00:37:50 +08:00
|
|
|
!
|
2008-09-12 00:05:30 +08:00
|
|
|
IF ( lnscf .AND.(.NOT.lgamma.OR.xml_not_of_pw.OR.modenum /= 0) &
|
2008-10-18 22:11:44 +08:00
|
|
|
.AND..NOT. done_bands) THEN
|
2007-12-04 17:40:58 +08:00
|
|
|
!
|
2008-09-19 04:27:46 +08:00
|
|
|
WRITE( stdout, '(/,5X,"Calculation of q = ",3F12.7)') xq
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
CALL clean_pw( .FALSE. )
|
|
|
|
!
|
2004-06-28 18:08:53 +08:00
|
|
|
CALL close_files()
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
! ... Setting the values for the nscf run
|
2003-01-20 05:58:50 +08:00
|
|
|
!
|
2006-04-25 01:32:08 +08:00
|
|
|
startingconfig = 'input'
|
2008-09-06 01:11:25 +08:00
|
|
|
starting_pot = 'file'
|
|
|
|
starting_wfc = 'atomic'
|
2008-07-23 16:46:48 +08:00
|
|
|
restart = recover
|
|
|
|
pseudo_dir= TRIM( tmp_dir ) // TRIM( prefix ) // '.save'
|
|
|
|
CALL restart_from_file()
|
|
|
|
conv_ions=.true.
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2006-12-19 17:42:52 +08:00
|
|
|
IF ( .NOT. ALLOCATED( force ) ) ALLOCATE( force( 3, nat ) )
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-09-19 04:27:46 +08:00
|
|
|
CALL setup_nscf (xq)
|
2004-06-28 18:08:53 +08:00
|
|
|
CALL init_run()
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-10-18 22:11:44 +08:00
|
|
|
IF (do_band) CALL electrons()
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-10-23 22:47:04 +08:00
|
|
|
IF (.NOT.reduce_io.and.do_band) THEN
|
|
|
|
twfcollect=.false.
|
|
|
|
CALL punch( 'all' )
|
2008-07-23 16:46:48 +08:00
|
|
|
done_bands=.TRUE.
|
|
|
|
xml_not_of_pw=.TRUE.
|
|
|
|
ENDIF
|
|
|
|
!
|
|
|
|
CALL seqopn( 4, 'restart', 'UNFORMATTED', exst )
|
|
|
|
CLOSE( UNIT = 4, STATUS = 'DELETE' )
|
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
CALL close_files()
|
|
|
|
!
|
|
|
|
END IF
|
|
|
|
!
|
2008-09-02 23:56:38 +08:00
|
|
|
! ... nksq is the number of k-points, NOT including k+q points
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
IF ( lgamma ) THEN
|
|
|
|
!
|
2004-06-28 18:08:53 +08:00
|
|
|
nksq = nks
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
ELSE
|
|
|
|
!
|
2004-06-28 18:08:53 +08:00
|
|
|
nksq = nks / 2
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
END IF
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
CALL ph_writefile('init',0)
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
! ... Calculation of the dispersion: do all modes
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
CALL allocate_phq()
|
2008-07-23 16:46:48 +08:00
|
|
|
!
|
|
|
|
! read the displacement patterns if available in the recover file
|
|
|
|
!
|
|
|
|
rec_code=0
|
|
|
|
IF (recover) CALL ph_readfile('data_u',ierr)
|
2004-07-09 23:50:50 +08:00
|
|
|
CALL phq_setup()
|
|
|
|
CALL phq_recover()
|
|
|
|
CALL phq_summary()
|
|
|
|
!
|
|
|
|
CALL openfilq()
|
|
|
|
!
|
|
|
|
CALL phq_init()
|
|
|
|
!
|
|
|
|
CALL print_clock( 'PHONON' )
|
|
|
|
!
|
2008-10-18 22:17:28 +08:00
|
|
|
IF ( trans .AND. (done_irr(0)==0.AND.comp_irr(0)==1) &
|
|
|
|
.AND..NOT.all_done ) CALL dynmat0()
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2008-10-23 22:47:04 +08:00
|
|
|
IF ( epsil .AND. rec_code <= 1 ) THEN
|
2006-03-30 17:43:38 +08:00
|
|
|
!
|
|
|
|
IF (fpol) THEN ! calculate freq. dependent polarizability
|
|
|
|
!
|
|
|
|
WRITE( stdout, '(/,5X,"Frequency Dependent Polarizability Calculation",/)' )
|
|
|
|
!
|
|
|
|
iu = nfs
|
|
|
|
!
|
|
|
|
freq_loop : DO WHILE ( iu .gt. 0)
|
|
|
|
!
|
|
|
|
CALL solve_e_fpol( fiu(iu) )
|
|
|
|
IF ( convt ) CALL polariz ( fiu(iu) )
|
|
|
|
iu = iu - 1
|
|
|
|
!
|
|
|
|
END DO freq_loop
|
|
|
|
!
|
|
|
|
WRITE( stdout, '(/,5X,"End of Frequency Dependent Polarizability Calculation")' )
|
|
|
|
!
|
|
|
|
ENDIF
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
2004-07-14 22:58:51 +08:00
|
|
|
WRITE( stdout, '(/,5X,"Electric Fields Calculation")' )
|
2006-03-30 17:43:38 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
CALL solve_e()
|
2006-03-30 17:43:38 +08:00
|
|
|
!
|
2004-07-14 22:58:51 +08:00
|
|
|
WRITE( stdout, '(/,5X,"End of electric fields calculation")' )
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
IF ( convt ) THEN
|
|
|
|
!
|
|
|
|
! ... calculate the dielectric tensor epsilon
|
|
|
|
!
|
|
|
|
CALL dielec()
|
|
|
|
!
|
|
|
|
! ... calculate the effective charges Z(E,Us) (E=scf,Us=bare)
|
|
|
|
!
|
2007-10-09 00:17:11 +08:00
|
|
|
IF (.NOT.(lrpa.OR.lnoloc)) CALL zstar_eu()
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
IF ( fildrho /= ' ' ) CALL punch_plot_e()
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
ELSE
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
CALL stop_ph( .FALSE. )
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
END IF
|
|
|
|
!
|
2007-02-08 21:07:07 +08:00
|
|
|
IF (( lraman .OR. elop ).AND..NOT.noncolin) CALL raman()
|
2005-04-21 01:27:14 +08:00
|
|
|
!
|
2008-10-23 22:47:04 +08:00
|
|
|
where_rec='after_diel'
|
|
|
|
rec_code=2
|
|
|
|
CALL ph_writefile('data',0)
|
2004-07-09 23:50:50 +08:00
|
|
|
END IF
|
|
|
|
!
|
|
|
|
IF ( trans ) THEN
|
|
|
|
!
|
|
|
|
CALL phqscf()
|
|
|
|
CALL dynmatrix()
|
|
|
|
!
|
|
|
|
IF ( fildrho /= ' ' ) CALL punch_plot_ph()
|
|
|
|
!
|
|
|
|
END IF
|
|
|
|
!
|
|
|
|
IF ( elph ) THEN
|
|
|
|
!
|
2007-02-08 21:07:07 +08:00
|
|
|
IF (noncolin) CALL errore('phonon','e-ph and noncolin not programed',1)
|
2004-07-09 23:50:50 +08:00
|
|
|
IF ( .NOT. trans ) THEN
|
|
|
|
!
|
|
|
|
CALL dvanqq()
|
|
|
|
CALL elphon()
|
2004-06-28 18:08:53 +08:00
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
END IF
|
|
|
|
!
|
|
|
|
CALL elphsum()
|
|
|
|
!
|
|
|
|
END IF
|
|
|
|
!
|
|
|
|
! ... cleanup of the variables
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
done_bands=.FALSE.
|
|
|
|
done_iq(iq)=1
|
|
|
|
DO irr=1,nirr
|
|
|
|
IF (done_irr(irr)==0) done_iq(iq)=0
|
|
|
|
ENDDO
|
2004-07-09 23:50:50 +08:00
|
|
|
CALL clean_pw( .FALSE. )
|
|
|
|
CALL deallocate_phq()
|
|
|
|
!
|
|
|
|
! ... Close the files
|
|
|
|
!
|
|
|
|
CALL close_phq( .TRUE. )
|
|
|
|
!
|
2008-07-23 16:46:48 +08:00
|
|
|
CALL restore_ph_input_variables()
|
|
|
|
!
|
2004-07-09 23:50:50 +08:00
|
|
|
END DO
|
2008-07-23 16:46:48 +08:00
|
|
|
|
|
|
|
CALL ph_writefile('init',0)
|
|
|
|
CALL clean_input_variables()
|
2004-07-09 23:50:50 +08:00
|
|
|
!
|
|
|
|
IF ( ALLOCATED( xk_start ) ) DEALLOCATE( xk_start )
|
|
|
|
IF ( ALLOCATED( wk_start ) ) DEALLOCATE( wk_start )
|
|
|
|
!
|
|
|
|
IF ( lnscf ) CALL print_clock_pw()
|
|
|
|
!
|
|
|
|
CALL stop_ph( .TRUE. )
|
|
|
|
!
|
|
|
|
STOP
|
|
|
|
!
|
|
|
|
END PROGRAM phonon
|