1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
!-----------------------------------------------------------------------
program simple
!!-----------------------------------------------------------------------
!!
!! input: namelist "&inputsimple", with variables
!! prefix prefix of input files saved by program pwscf
!! outdir temporary directory where files resides
!!
use io_files, ONLY : prefix, tmp_dir
use io_files, ONLY : psfile, pseudo_dir
use io_global, ONLY : stdout, ionode, ionode_id
USE mp_global, ONLY: mp_startup
USE mp_pools, ONLY : kunit
use mp_world, ONLY: mpime, world_comm
USE environment, ONLY: environment_start
USE mp, ONLY : mp_bcast
use ldaU, ONLY : lda_plus_u
use scf, only : vrs, vltot, v, kedtau
USE fft_base, ONLY : dfftp
use pwcom, only : nspin
use uspp, ONLY : okvan
use realus, ONLY : generate_qpointlist
USE wannier_gw, ONLY : num_nbndv
USE gvect, ONLY : ngm
USE gvecs, ONLY : doublegrid
USE constants, ONLY : BOHR_RADIUS_SI
USE cell_base, ONLY : alat
USE input_simple, ONLY : num_val, num_cond, s_bands, deallocate_simple,s_product,&
&l_truncated_coulomb,truncation_radius, allocate_simple, &
&nkpoints,numpw,l_debug,n_debug,w_type,epsm,lambdam, &
&nonlocal_commutator , calc_mode, n_shrink
USE pwcom, ONLY : igk_k
!
IMPLICIT NONE
CHARACTER(len=9) :: code = 'SIMPLE'
INTEGER :: ios, kunittmp
CHARACTER(LEN=256), EXTERNAL :: trimcheck
CHARACTER(len=200) :: pp_file
LOGICAL :: uspp_spsi, ascii, single_file, raw
LOGICAL :: exst
INTEGER, EXTERNAL :: find_free_unit
CHARACTER(len=256) :: prefix_nc
INTEGER :: nglobals
LOGICAL :: l_dipols
CHARACTER(LEN=256) :: outdir
!
!
NAMELIST /inputsimple/ prefix,outdir,num_nbndv,num_val,num_cond,s_bands, &
& s_product,l_truncated_coulomb,truncation_radius,nkpoints,numpw,&
& l_debug,n_debug,w_type,epsm,lambdam, nonlocal_commutator,&
& calc_mode, n_shrink
!
CALL mp_startup ( )
CALL environment_start ( code )
!
CALL start_clock('simple')
!
n_shrink=1
prefix='export'
CALL get_environment_variable( 'ESPRESSO_TMPDIR', outdir )
IF ( TRIM( outdir ) == ' ' ) outdir = './'
IF ( ionode ) THEN
CALL input_from_file ( )
READ(5,inputsimple,IOSTAT=ios)
IF (ios /= 0) CALL errore ('SIMPLE', 'reading inputsimple namelist', ABS(ios) )
ENDIF
!
tmp_dir = trimcheck( outdir )
CALL mp_bcast( outdir, ionode_id, world_comm )
CALL mp_bcast( tmp_dir, ionode_id , world_comm )
CALL mp_bcast( prefix, ionode_id, world_comm )
CALL mp_bcast( num_nbndv, ionode_id , world_comm )
CALL mp_bcast(num_val, ionode_id, world_comm )
CALL mp_bcast(num_cond, ionode_id, world_comm )
CALL mp_bcast(s_bands, ionode_id, world_comm )
CALL mp_bcast(s_product, ionode_id, world_comm)
CALL mp_bcast(l_truncated_coulomb, ionode_id, world_comm)
CALL mp_bcast(truncation_radius, ionode_id, world_comm )
CALL mp_bcast(nkpoints, ionode_id, world_comm)
CALL mp_bcast(numpw, ionode_id, world_comm)
CALL mp_bcast(l_debug, ionode_id, world_comm)
CALL mp_bcast(n_debug, ionode_id, world_comm)
CALL mp_bcast(w_type, ionode_id, world_comm)
CALL mp_bcast(epsm, ionode_id, world_comm)
CALL mp_bcast(lambdam, ionode_id, world_comm)
CALL mp_bcast(nonlocal_commutator, ionode_id, world_comm)
CALL mp_bcast(calc_mode, ionode_id, world_comm)
CALL mp_bcast(n_shrink, ionode_id, world_comm)
!
IF (.not.l_truncated_coulomb .and. numpw/=0) numpw=numpw+1
!
CALL read_file
!
CALL openfile_school
!
#if defined __MPI
kunittmp = kunit
#else
kunittmp = 1
#endif
!
pp_file= ' '
uspp_spsi = .FALSE.
ascii = .FALSE.
single_file = .FALSE.
raw = .FALSE.
!
CALL read_export(pp_file,kunittmp,uspp_spsi, ascii, single_file, raw)
!
CALL summary()
!
CALL print_ks_energies()
!
IF (lda_plus_u) THEN
CALL init_ns()
ENDIF
!
CALL set_vrs(vrs, vltot, v%of_r, kedtau, v%kin_r, dfftp%nnr, nspin, doublegrid )
!
IF ( okvan) CALL generate_qpointlist()
!
CALL allocate_simple
!
CALL wfc_basis
!
IF (calc_mode==0) THEN ! BSE calculation
WRITE(stdout,*) '***********************************************************'
WRITE(stdout,*) 'Preparing for subsequent BSE calculation (for simple_bse.x)'
WRITE(stdout,*) '***********************************************************'
CALL product_basis
CALL v_product
CALL epe
ELSEIF(calc_mode==1) then ! IP calculation
WRITE(stdout,*) '*********************************************************'
WRITE(stdout,*) 'Preparing for subsequent IP calculation (for simple_ip.x)'
WRITE(stdout,*) '*********************************************************'
CALL khamiltonian
ENDIF
CALL deallocate_simple
!
CALL stop_clock('simple')
CALL print_clock('optimal_basis')
CALL print_clock('simple')
!
CALL stop_pp
STOP
!
END PROGRAM simple
|