m_rdinput.f90

Go to the documentation of this file.
00001 module m_rdinput 
00002 implicit none
00003 private
00004 public::read_input
00005 !--
00006 !&param-wannier 
00007 integer,public::icell!0:gen,1:sc,2:fcc,3:bcc,4:hcp,5:ttr&ort,6:mon,7:tri,8:bct  
00008 integer,public::n_occ!Total number of considerd band in wannier calc 
00009 integer,public::N_wannier!Total number of considerd band in wannier calc 
00010 integer,public::nigs!TOTAL NUMBER OF INITIAL GUESS GAUSSIAN       
00011 integer,public::N_initial_guess!TOTAL NUMBER OF INITIAL GUESS GAUSSIAN       
00012 real(8),public::EPS_SPILLAGE!Threshold for spilage minimization 
00013 real(8),public::DAMP!damping in spilage minimization 
00014 real(8),public::EPS_SPREAD!Threshold for spread minimization 
00015 real(8),public::MAX_STEP_LENGTH!Step length in line search 
00016 real(8),public::Lower_energy_window!E_LOWER!LOWER BOUND OF ENERGY WINDOW (eV)
00017 real(8),public::E_LOWER!LOWER BOUND OF ENERGY WINDOW (eV)
00018 real(8),public::Upper_energy_window!E_UPPER!UPPER BOUND OF ENERGY WINDOW (eV)
00019 real(8),public::E_UPPER!UPPER BOUND OF ENERGY WINDOW (eV)
00020 logical,public::set_inner_window!flag for inner window 
00021 real(8),public::Upper_inner_window!Upper inner energy window for wannier calc (eV)
00022 real(8),public::E_UPPER_inner!Upper inner energy window for wannier calc (eV)
00023 real(8),public::Lower_inner_window!Lower inner energy window for wannier calc (eV)
00024 real(8),public::E_LOWER_inner!Lower inner energy window for wannier calc (eV)
00025 integer,public::flg_BMAT!0:BMAT=unit matrix, 1:BMAT from input 
00026 integer,public::flg_initial_guess_direc!0:use global coordinate, 1:use local coordinate  
00027 real(8),public::electron_number_wannier_space!electron number in wannier_space for density matrix 
00028 real(8),public::elec_num!electron number in wannier_space for density matrix 
00029 integer,public::flg_fermisurface!flag for fermisurface  
00030 logical,public::CALC_FERMISURFACE!flag for fermisurface  
00031 integer,public::flg_global_dos!flag for global dos 
00032 logical,public::CALC_GLOBAL_DOS!flag for global dos
00033 logical,public::flg_specify_energywindow!20191216 Jean Moree
00034 logical,public::flg_specify_bandindices!20191216 Jean Moree
00035 integer,public::bandindex_min!20191216 Jean Moree
00036 integer,public::bandindex_max!20191216 Jean Moree
00037 !hidden parameters 
00038 integer,public::flg_vis_bloch!flag for visualization  of Bloch function
00039 logical,public::CALC_REAL_SPACE_BLOCH!flag for visualization of Bloch function 
00040 logical,public::CALC_BLOCH_VIS_RANGE!flag to calculate visualization range of Bloch function 
00041 real(8),public::calc_k(3)!k points to be calculated 
00042 integer,public::reading_bmat_format!To specify bmat reading format  
00043 !
00044 !&param-interpolation   
00045 integer,public::N_sym_points!The number of k-point points in symmetry line
00046 integer,public::Ndiv!Separation between symmetry points  
00047 integer,public::reading_sk_format!20170709 
00048 !&param-visualization   
00049 integer,public::flg_vis_wannier!flag for visualization 
00050 logical,public::CALC_REAL_SPACE_WANNIER!flag for visualization 
00051 integer,public::N_write_wannier!Total number of visalization wannier calculation (manual mode)
00052 integer,public::ix_vis_min!x-range for visualization 
00053 integer,public::ix_vis_max!x-range for visualization 
00054 integer,public::iy_vis_min!y-range for visualization 
00055 integer,public::iy_vis_max!y-range for visualization 
00056 integer,public::iz_vis_min!z-range for visualization 
00057 integer,public::iz_vis_max!z-range for visualization 
00058 integer,public::xmin!x-range for visualization 
00059 integer,public::xmax!x-range for visualization 
00060 integer,public::ymin!y-range for visualization 
00061 integer,public::ymax!y-range for visualization 
00062 integer,public::zmin!z-range for visualization 
00063 integer,public::zmax!z-range for visualization
00064 integer,public::dense(3)! Dense k-grid for the Wnnier-interpolated FS
00065 !initial_guess 
00066 type initial_guess 
00067 !integer::i,j!20170406
00068 character(10)::orb!20170406
00069 real(8)::a,x,y,z 
00070 real(8)::lx(3)!20170914
00071 real(8)::ly(3)!20170914
00072 real(8)::lz(3)!20170914
00073 complex(8)::s_up(2)!20190210 Maxime Charlebois
00074 complex(8)::s_dn(2)!20190210 Maxime Charlebois
00075 end type initial_guess  
00076 type(initial_guess),public,allocatable::vec_ini(:) 
00077 !BMAT  
00078 real(8),public,allocatable::B_MAT(:,:)!B_MAT(nigs,n_occ)
00079 !symmetry line in BZ 
00080 real(8),public,allocatable::SK_sym_pts(:,:) 
00081 !wrt_list 
00082 integer,public,allocatable::wrt_list(:)!wrt_list(N_write_wannier) 
00083 !--
00084 namelist/param_wannier/icell,N_wannier,N_initial_guess,EPS_SPILLAGE,DAMP,EPS_SPREAD,MAX_STEP_LENGTH,&
00085 Lower_energy_window,Upper_energy_window,set_inner_window,Upper_inner_window,Lower_inner_window,flg_BMAT,&
00086 reading_bmat_format,flg_initial_guess_direc,flg_vis_bloch,calc_k,electron_number_wannier_space,&
00087 flg_fermisurface,flg_global_dos,&
00088 flg_specify_energywindow,flg_specify_bandindices,bandindex_min,bandindex_max!20191216 Jean Moree
00089 namelist/param_interpolation/N_sym_points,Ndiv,reading_sk_format,dense!20170709  
00090 namelist/param_visualization/flg_vis_wannier,N_write_wannier,& 
00091 ix_vis_min,ix_vis_max,iy_vis_min,iy_vis_max,iz_vis_min,iz_vis_max
00092 contains
00093 
00094 subroutine read_input
00095 integer::igs,ix,ik  
00096 !--
00097 !&param_wannier
00098 !--
00099 !default
00100 ICELL=0
00101 EPS_SPILLAGE=1.0d-4
00102 DAMP=0.1d0 
00103 EPS_SPREAD=1.0d-4
00104 MAX_STEP_LENGTH=4.0d0 
00105 SET_INNER_WINDOW=.FALSE.
00106 UPPER_INNER_WINDOW=0.0d0 
00107 LOWER_INNER_WINDOW=0.0d0 
00108 FLG_BMAT=0
00109 READING_BMAT_FORMAT=0
00110 FLG_INITIAL_GUESS_DIREC=0
00111 electron_number_wannier_space=0.0d0 
00112 flg_fermisurface=0 
00113 flg_global_dos=0 
00114 flg_vis_bloch=0
00115 CALC_BLOCH_VIS_RANGE=.FALSE.
00116 calc_k(:)=0.0d0
00117 flg_specify_energywindow=.true.!20191216 Jean Moree
00118 flg_specify_bandindices=.false.!20191216 Jean Moree
00119 bandindex_min=0!20191216 Jean Moree
00120 bandindex_max=0!20191216 Jean Moree
00121 !---
00122 !open(999,file='input.in')
00123 !read(999,nml=param_wannier)
00124 read(5,nml=param_wannier)
00125 !--
00126 n_occ=N_wannier 
00127 nigs=N_initial_guess 
00128 E_LOWER=Lower_energy_window
00129 E_UPPER=Upper_energy_window
00130 E_LOWER_inner=Lower_inner_window
00131 E_UPPER_inner=Upper_inner_window
00132 elec_num=electron_number_wannier_space 
00133 !
00134 !20191216 Jean Moree
00135 !
00136 if((flg_specify_energywindow.and.flg_specify_bandindices).or.(.not.flg_specify_energywindow.and..not.flg_specify_bandindices))then
00137    write(6,'(2a)')"###ERROR : ","flg_specify_energywindow and flg_specify_bandindices have the same values. One should be .true., the other .false."
00138    stop
00139 endif
00140 !if(flg_specify_bandindices.and.set_inner_window)then
00141 !    write(6,'(a)')"###ERROR : ","flg_specify_bandindices=true : not compatible with set_inner_window=.true. for now."
00142 !    stop
00143 !endif
00144 !
00145 !20191216 Jean Moree
00146 !
00147 !check ENERGY WINDOW
00148 if(flg_specify_energywindow.and.E_LOWER>=E_UPPER)then 
00149  write(6,'(a)')'wrong input: energy windows; stop'
00150  write(6,'(a)')'Lower_energy_window >= Upper_energy_window: WRONG'
00151  write(6,'(a,2f20.9)')'Lower_energy_window, Upper_energy_window',Lower_energy_window,Upper_energy_window
00152  stop
00153 endif
00154 !
00155 !20191216 Jean Moree
00156 !
00157 !check band indices
00158 if(flg_specify_bandindices)then
00159    if(bandindex_min==0.or.bandindex_min==0.or.bandindex_min>bandindex_max)then
00160       write(6,'(2a)')"###ERROR : ","flg_specify_bandindices=true, but bandindex_min/bandindex_max not specified correctly"
00161       stop
00162    endif
00163 endif
00164 !--
00165 !default set_inner_window==F
00166 !if(set_inner_window.eqv..true..and.E_UPPER_inner==0.0d0.and.E_LOWER_inner==0.0d0)then!20171212 
00167 !if(set_inner_window==.true..and.E_UPPER_inner==0.0d0.and.E_LOWER_inner==0.0d0)then!20180822 
00168 if(set_inner_window.and.E_UPPER_inner==0.0d0.and.E_LOWER_inner==0.0d0)then!20181009
00169  write(6,'(a)')'wrong input: inner energy windows; stop'
00170  write(6,'(a)')'Lower_inner_window = Upper_inner_window = 0.0d0: WRONG'
00171  write(6,'(a,2f20.9)')'Upper_inner_window,Lower_inner_window',Upper_inner_window,Lower_inner_window
00172  stop
00173 endif 
00174 !if(set_inner_window.eqv..true.)then!20171212 
00175 !if(set_inner_window==.true.)then!20180822 
00176 if(set_inner_window.and.flg_specify_energywindow)then!20181009 
00177  if(E_LOWER_inner>=E_UPPER_inner)then 
00178   write(6,'(a)')'wrong input: inner energy windows; stop'
00179   write(6,'(a)')'Lower_inner_window >= Upper_inner_window: WRONG'
00180   write(6,'(a,2f20.9)')'Lower_inner_window,Upper_inner_window',Lower_inner_window,Upper_inner_window
00181   stop
00182  endif 
00183  if(E_UPPER<=E_UPPER_inner)then 
00184   write(6,'(a)')'wrong input: inner energy windows; stop'
00185   write(6,'(a)')'Upper_energy_window <= Upper_inner_window: WRONG'
00186   write(6,'(a,2f20.9)')'Upper_energy_window,Upper_inner_window',Upper_energy_window,Upper_inner_window
00187   stop
00188  endif  
00189  if(E_LOWER>=E_LOWER_inner)then 
00190   write(6,'(a)')'wrong input: inner energy windows; stop'
00191   write(6,'(a)')'Lower_energy_window >= Lower_inner_window: WRONG'
00192   write(6,'(a,2f20.9)')'Lower_energy_window,Lower_inner_window',Lower_energy_window,Lower_inner_window
00193   stop
00194  endif 
00195 endif 
00196 !--
00197 !INITIAL GUESS
00198 allocate(vec_ini(nigs)) 
00199 !--
00200 if(flg_initial_guess_direc==0)then!default 20170914 
00201  write(6,*)'DIRECTION OF INITIAL GUESS IS REPRESENTED IN GLOBAL COORDINATE' 
00202  do igs=1,nigs
00203  !read(999,*)vec_ini(igs)
00204  !read(999,*)vec_ini(igs)%orb,vec_ini(igs)%a,vec_ini(igs)%x,vec_ini(igs)%y,vec_ini(igs)%z
00205   read(5,*)vec_ini(igs)%orb,vec_ini(igs)%a,vec_ini(igs)%x,vec_ini(igs)%y,vec_ini(igs)%z
00206  enddo 
00207  !
00208  !20190210 Maxime Charlebois
00209  !
00210  do igs=1,nigs 
00211   vec_ini(igs)%lx(:)=0.0d0  
00212   vec_ini(igs)%ly(:)=0.0d0  
00213   vec_ini(igs)%lz(:)=0.0d0  
00214   vec_ini(igs)%lx(1)=1.0d0  
00215   vec_ini(igs)%ly(2)=1.0d0  
00216   vec_ini(igs)%lz(3)=1.0d0  
00217 
00218   vec_ini(igs)%s_up(:)=0.0d0  
00219   vec_ini(igs)%s_dn(:)=0.0d0  
00220   vec_ini(igs)%s_up(1)=1.0d0  
00221   vec_ini(igs)%s_dn(2)=1.0d0  
00222  enddo 
00223 endif 
00224 !--
00225 if(flg_initial_guess_direc==1)then!20170914 
00226  write(6,'(a)')'DIRECTION OF INITIAL GUESS IS REPRESENTED IN LOCAL COORDINATE' 
00227  do igs=1,nigs
00228   !read(999,*)vec_ini(igs)
00229   !read(5,*)vec_ini(igs)
00230    read(5,*)vec_ini(igs)%orb,vec_ini(igs)%a,vec_ini(igs)%x,vec_ini(igs)%y,vec_ini(igs)%z,&
00231             vec_ini(igs)%lx,vec_ini(igs)%ly,vec_ini(igs)%lz
00232  enddo 
00233  do igs=1,nigs 
00234   vec_ini(igs)%s_up(:)=0.0d0  
00235   vec_ini(igs)%s_dn(:)=0.0d0  
00236   vec_ini(igs)%s_up(1)=1.0d0  
00237   vec_ini(igs)%s_dn(2)=1.0d0  
00238  enddo 
00239 endif 
00240 !--
00241 if(flg_initial_guess_direc==2)then 
00242  write(6,'(a)')'DIRECTION OF INITIAL GUESS IS REPRESENTED IN LOCAL COORDINATE'
00243  write(6,'(a)')'ROTATION OF THE SPIN QUANTIZATION AXIS' 
00244  do igs=1,nigs
00245   !read(999,*)vec_ini(igs)
00246   read(5,*)vec_ini(igs)
00247  enddo 
00248 endif 
00249 !--
00250 !B_MAT
00251 allocate(B_MAT(nigs,n_occ));B_MAT(:,:)=0.0D0 
00252 !default flg_BMAT==0
00253 if(flg_BMAT==0)then  
00254  write(6,*)'BMAT is 0'
00255  if(nigs/=n_occ)then 
00256   write(6,*)'wrong input: nigs/=n_occ'
00257   stop
00258  endif 
00259  do igs=1,nigs!=n_occ 
00260   B_MAT(igs,igs)=1.0d0 
00261  enddo 
00262 elseif(flg_BMAT==1)then 
00263  write(6,*)'BMAT from input.in'
00264  if(reading_bmat_format==0)then 
00265   write(6,*)'READING BMAT format=0: respack'
00266   do igs=1,nigs 
00267    !read(999,*)(B_MAT(igs,ix),ix=1,n_occ)
00268     read(5,*)(B_MAT(igs,ix),ix=1,n_occ)
00269   enddo
00270  endif 
00271  if(reading_bmat_format==1)then 
00272   write(6,*)'READING BMAT format=1: xtapp'
00273   do ix=1,n_occ 
00274    !read(999,*)(B_MAT(igs,ix),igs=1,nigs)
00275     read(5,*)(B_MAT(igs,ix),igs=1,nigs)
00276   enddo
00277  endif 
00278 endif 
00279 !--
00280 if(flg_vis_bloch==0) CALC_REAL_SPACE_BLOCH=.false.!default 
00281 if(flg_vis_bloch==1) CALC_REAL_SPACE_BLOCH=.true. 
00282 !--
00283 if(flg_fermisurface==0) CALC_FERMISURFACE=.false.!default 
00284 if(flg_fermisurface==1) CALC_FERMISURFACE=.true. 
00285 !--
00286 if(flg_global_dos==0) CALC_GLOBAL_DOS=.false.!default 
00287 if(flg_global_dos==1) CALC_GLOBAL_DOS=.true. 
00288 !--
00289 !
00290 !20191216 Kazuma Nakamura
00291 !
00292 !write(6,'(2a)')"###TEST : input : printing of param_wannier commented  (causes the log file to be binary)"
00293 write(6,param_wannier) 
00294 do igs=1,nigs 
00295  write(6,'(a3,x,4f8.4,9f8.4,8f8.4)') vec_ini(igs) 
00296 enddo 
00297 do igs=1,nigs 
00298  write(6,'(100f10.5)')(B_MAT(igs,ix),ix=1,n_occ)
00299 enddo
00300 write(6,*)
00301 !--
00302 !&param_interpolation
00303 !--
00304 !default
00305 Ndiv=40!Separation between symmetry points  
00306 dense(1:3) = 0
00307 !--
00308 !read(999,nml=param_interpolation)
00309 read(5,nml=param_interpolation)
00310 !k for band dispersion
00311 allocate(SK_sym_pts(3,N_sym_points))  
00312 if(reading_sk_format==0)then 
00313  write(6,*)'READING SK_sym_pts format=0: respack'
00314  do ik=1,N_sym_points 
00315   !read(999,*)(SK_sym_pts(ix,ik),ix=1,3) 
00316   read(5,*)(SK_sym_pts(ix,ik),ix=1,3) 
00317  enddo 
00318 endif 
00319 if(reading_sk_format==1)then 
00320  write(6,*)'READING SK_sym_pts format=1: xtapp'
00321  do ix=1,3 
00322   !read(999,*)(SK_sym_pts(ix,ik),ik=1,N_sym_points) 
00323   read(5,*)(SK_sym_pts(ix,ik),ik=1,N_sym_points) 
00324  enddo 
00325 endif 
00326 !--
00327 write(6,param_interpolation) 
00328 do ik=1,N_sym_points 
00329  write(6,'(3f10.5)')(SK_sym_pts(ix,ik),ix=1,3) 
00330 enddo 
00331 write(6,*) 
00332 !--
00333 !&param_visualization)
00334 !--
00335 !default
00336 ix_vis_min=-1
00337 ix_vis_max=1
00338 iy_vis_min=-1
00339 iy_vis_max=1
00340 iz_vis_min=-1
00341 iz_vis_max=1
00342 !--
00343 !read(999,nml=param_visualization)
00344 read(5,nml=param_visualization)
00345 !default
00346 if(flg_vis_wannier==0) CALC_REAL_SPACE_WANNIER=.false.!default 
00347 if(flg_vis_wannier==1) CALC_REAL_SPACE_WANNIER=.true. 
00348 !write vis wannier 
00349 if(N_write_wannier==0)then
00350  N_write_wannier=N_wannier 
00351  allocate(wrt_list(N_write_wannier)) 
00352  do ix=1,N_write_wannier 
00353   wrt_list(ix)=ix
00354  enddo 
00355 elseif(N_write_wannier/=0)then 
00356  allocate(wrt_list(N_write_wannier)) 
00357  !read(999,*)(wrt_list(ix),ix=1,N_write_wannier)
00358  read(5,*)(wrt_list(ix),ix=1,N_write_wannier)
00359 endif  
00360 xmin=ix_vis_min
00361 xmax=ix_vis_max
00362 ymin=iy_vis_min
00363 ymax=iy_vis_max
00364 zmin=iz_vis_min
00365 zmax=iz_vis_max
00366 !--
00367 write(6,param_visualization) 
00368 write(6,'(100i5)')(wrt_list(ix),ix=1,N_write_wannier) 
00369 write(6,*) 
00370 !--
00371 end subroutine
00372 end module

Generated on 17 Nov 2020 for respack by  doxygen 1.6.1