00001 PROGRAM GW
00002
00003 use mpi
00004 use fft_3d
00005 use m_rd_input
00006 use m_rd_dat_wfn
00007 use m_rd_dat_wan
00008 use m_rd_dat_eps
00009 include "config.h"
00010
00011
00012
00013 comm=MPI_COMM_WORLD
00014 call MPI_INIT(ierr)
00015 call MPI_COMM_RANK(comm,myrank,ierr)
00016 call MPI_COMM_SIZE(comm,nproc,ierr)
00017 write(6,'(a10,i10,a10,i10)')'myrank=',myrank,'nproc=',nproc
00018
00019 call MPI_BARRIER(comm,ierr)
00020 start_time=MPI_Wtime()
00021
00022
00023
00024 if(myrank.eq.0)then
00025 call read_input
00026 gw_grid_separation=gw_grid_separation/au
00027 endif
00028 call MPI_BARRIER(comm,ierr)
00029
00030 call MPI_Bcast(gw_grid_separation,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00031 call MPI_Bcast(Rc_range_spacing,1,MPI_INTEGER,0,comm,ierr)
00032 call MPI_Bcast(Ncalc,1,MPI_INTEGER,0,comm,ierr)
00033 call MPI_Bcast(calc_SC,1,MPI_LOGICAL,0,comm,ierr)
00034
00035 call MPI_Bcast(N_sym_points,1,MPI_INTEGER,0,comm,ierr)
00036 call MPI_Bcast(Ndiv,1,MPI_INTEGER,0,comm,ierr)
00037 call MPI_Bcast(reading_sk_format,1,MPI_INTEGER,0,comm,ierr)
00038 call MPI_BARRIER(comm,ierr)
00039
00040 if(myrank/=0) allocate(dense(3))
00041 if(myrank/=0) allocate(SK_sym_pts(3,N_sym_points))
00042 call MPI_Bcast(dense,3,MPI_INTEGER,0,comm,ierr)
00043 call MPI_Bcast(SK_sym_pts,3*N_sym_points,MPI_DOUBLE_PRECISION,0,comm,ierr)
00044 call MPI_BARRIER(comm,ierr)
00045
00046
00047
00048 if(myrank.eq.0)then
00049 call rd_dat_symmetry
00050 call rd_dat_bandcalc
00051 call rd_dat_lattice
00052 call rd_dat_sample_k
00053 call rd_dat_nkm
00054 call rd_dat_kg
00055 call rd_dat_eigenvalue
00056 call rd_dat_wavefunction
00057 endif
00058 call MPI_BARRIER(comm,ierr)
00059
00060
00061
00062 call MPI_Bcast(nsymq,1,MPI_INTEGER,0,comm,ierr)
00063 call MPI_Bcast(nnp,1,MPI_INTEGER,0,comm,ierr)
00064
00065
00066
00067 call MPI_Bcast(Ecut_for_psi,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00068 call MPI_Bcast(FermiEnergy,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00069 call MPI_Bcast(Etot,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00070
00071
00072
00073 call MPI_Bcast(a1,3,MPI_DOUBLE_PRECISION,0,comm,ierr)
00074 call MPI_Bcast(a2,3,MPI_DOUBLE_PRECISION,0,comm,ierr)
00075 call MPI_Bcast(a3,3,MPI_DOUBLE_PRECISION,0,comm,ierr)
00076 call MPI_Bcast(b1,3,MPI_DOUBLE_PRECISION,0,comm,ierr)
00077 call MPI_Bcast(b2,3,MPI_DOUBLE_PRECISION,0,comm,ierr)
00078 call MPI_Bcast(b3,3,MPI_DOUBLE_PRECISION,0,comm,ierr)
00079 call MPI_Bcast(VOLUME,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00080 call MPI_Bcast(a,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00081 call MPI_Bcast(b,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00082 call MPI_Bcast(c,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00083 call MPI_Bcast(alp,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00084 call MPI_Bcast(bet,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00085 call MPI_Bcast(gmm,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00086
00087
00088
00089 call MPI_Bcast(Nk_irr,1,MPI_INTEGER,0,comm,ierr)
00090 call MPI_Bcast(NTK,1,MPI_INTEGER,0,comm,ierr)
00091 call MPI_Bcast(nkb1,1,MPI_INTEGER,0,comm,ierr)
00092 call MPI_Bcast(nkb2,1,MPI_INTEGER,0,comm,ierr)
00093 call MPI_Bcast(nkb3,1,MPI_INTEGER,0,comm,ierr)
00094 call MPI_Bcast(Na1,1,MPI_INTEGER,0,comm,ierr)
00095 call MPI_Bcast(Na2,1,MPI_INTEGER,0,comm,ierr)
00096 call MPI_Bcast(Na3,1,MPI_INTEGER,0,comm,ierr)
00097
00098
00099
00100 call MPI_Bcast(L1,1,MPI_INTEGER,0,comm,ierr)
00101 call MPI_Bcast(L2,1,MPI_INTEGER,0,comm,ierr)
00102 call MPI_Bcast(L3,1,MPI_INTEGER,0,comm,ierr)
00103
00104
00105
00106 call MPI_Bcast(nwx2,1,MPI_INTEGER,0,comm,ierr)
00107 call MPI_Bcast(nwy2,1,MPI_INTEGER,0,comm,ierr)
00108 call MPI_Bcast(nwz2,1,MPI_INTEGER,0,comm,ierr)
00109
00110
00111
00112 call MPI_Bcast(NTG,1,MPI_INTEGER,0,comm,ierr)
00113
00114
00115
00116 call MPI_Bcast(NTB,1,MPI_INTEGER,0,comm,ierr)
00117
00118
00119
00120 call MPI_Bcast(ncomp,1,MPI_INTEGER,0,comm,ierr)
00121 call MPI_BARRIER(comm,ierr)
00122
00123 if(myrank/=0) allocate(rg(3,3,nsymq))
00124 if(myrank/=0) allocate(pg(3,nsymq))
00125 if(myrank/=0) allocate(rginv(3,3,nsymq))
00126 if(myrank/=0) allocate(SKI(3,Nk_irr))
00127 if(myrank/=0) allocate(SK0(3,NTK))
00128 if(myrank/=0) allocate(numirr(NTK))
00129 if(myrank/=0) allocate(numrot(NTK))
00130 if(myrank/=0) allocate(trs(NTK))
00131 if(myrank/=0) allocate(RW(3,NTK))
00132 if(myrank/=0) allocate(numMK(Nk_irr))
00133 if(myrank/=0) allocate(NGI(Nk_irr))
00134 if(myrank/=0) allocate(NG0(NTK))
00135 if(myrank/=0) allocate(KGI(3,NTG,Nk_irr))
00136 if(myrank/=0) allocate(KG0(3,NTG,NTK))
00137 if(myrank/=0) allocate(packing(-L1:L1,-L2:L2,-L3:L3,Nk_irr))
00138 if(myrank/=0) allocate(E_EIGI(NTB,Nk_irr))
00139 if(myrank/=0) allocate(CIR(NTG,NTB,Nk_irr))
00140 call MPI_BARRIER(comm,ierr)
00141
00142
00143
00144
00145 mem_size=dble(NTG*NTB*Nk_irr)*8.0d0/1024.0d0/1024.0d0/1024.0d0
00146
00147 if(myrank.eq.0)then
00148 write(6,'(a35,f20.15)')'mem size CIR (GB)',mem_size
00149 endif
00150
00151 call MPI_Bcast(rg,3*3*nsymq,MPI_INTEGER,0,comm,ierr)
00152 call MPI_Bcast(pg,3*nsymq,MPI_INTEGER,0,comm,ierr)
00153 call MPI_Bcast(rginv,3*3*nsymq,MPI_DOUBLE_PRECISION,0,comm,ierr)
00154 call MPI_Bcast(SKI,3*Nk_irr,MPI_DOUBLE_PRECISION,0,comm,ierr)
00155 call MPI_Bcast(SK0,3*NTK,MPI_DOUBLE_PRECISION,0,comm,ierr)
00156 call MPI_Bcast(numirr,NTK,MPI_INTEGER,0,comm,ierr)
00157 call MPI_Bcast(numrot,NTK,MPI_INTEGER,0,comm,ierr)
00158 call MPI_Bcast(trs,NTK,MPI_INTEGER,0,comm,ierr)
00159 call MPI_Bcast(RW,3*NTK,MPI_INTEGER,0,comm,ierr)
00160 call MPI_Bcast(numMK,Nk_irr,MPI_INTEGER,0,comm,ierr)
00161 call MPI_Bcast(NGI,Nk_irr,MPI_INTEGER,0,comm,ierr)
00162 call MPI_Bcast(NG0,NTK,MPI_INTEGER,0,comm,ierr)
00163 call MPI_Bcast(KGI,3*NTG*Nk_irr,MPI_INTEGER,0,comm,ierr)
00164 call MPI_Bcast(KG0,3*NTG*NTK,MPI_INTEGER,0,comm,ierr)
00165 call MPI_Bcast(packing(-L1,-L2,-L3,1),(2*L1+1)*(2*L2+1)*(2*L3+1)*Nk_irr,MPI_INTEGER,0,comm,ierr)
00166 call MPI_Bcast(E_EIGI,NTB*Nk_irr,MPI_DOUBLE_PRECISION,0,comm,ierr)
00167
00168
00169
00170
00171 call MPI_Bcast(CIR,NTG*NTB*Nk_irr,MPI_COMPLEX,0,comm,ierr)
00172
00173 call MPI_BARRIER(comm,ierr)
00174
00175
00176
00177 if(myrank.eq.0)then
00178 call rd_dat_ns_nb
00179 call rd_dat_umat
00180 call rd_dat_wan
00181 call rd_dat_hmatr
00182 endif
00183 call MPI_BARRIER(comm,ierr)
00184
00185
00186
00187 call MPI_Bcast(Mb,1,MPI_INTEGER,0,comm,ierr)
00188 call MPI_Bcast(Mt,1,MPI_INTEGER,0,comm,ierr)
00189
00190
00191
00192 call MPI_Bcast(NWF,1,MPI_INTEGER,0,comm,ierr)
00193 call MPI_BARRIER(comm,ierr)
00194
00195 if(myrank/=0) allocate(Ns(NTK))
00196 if(myrank/=0) allocate(Nb(NTK))
00197 if(myrank/=0) allocate(Nt(NTK))
00198 if(myrank/=0) allocate(UNT(Mb,NWF,NTK))
00199 if(myrank/=0) allocate(C0_WN(NTG,NWF,NTK))
00200 if(myrank/=0) allocate(H_MAT_R(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3))
00201 call MPI_BARRIER(comm,ierr)
00202
00203 call MPI_Bcast(Ns,NTK,MPI_INTEGER,0,comm,ierr)
00204 call MPI_Bcast(Nb,NTK,MPI_INTEGER,0,comm,ierr)
00205 call MPI_Bcast(Nt,NTK,MPI_INTEGER,0,comm,ierr)
00206 call MPI_Bcast(UNT,Mb*NWF*NTK,MPI_DOUBLE_COMPLEX,0,comm,ierr)
00207 call MPI_Bcast(C0_WN,NTG*NWF*NTK,MPI_DOUBLE_COMPLEX,0,comm,ierr)
00208 call MPI_Bcast(H_MAT_R(1,1,-Na1,-Na2,-Na3),NWF*NWF*(2*Na1+1)*(2*Na2+1)*(2*Na3+1),MPI_DOUBLE_COMPLEX,0,comm,ierr)
00209 call MPI_BARRIER(comm,ierr)
00210
00211
00212
00213 if(myrank.eq.0)then
00214 call rd_dat_chi_cutoff
00215 call rd_dat_ttrhdrn
00216 call rd_dat_wgrid
00217 call rd_dat_sq
00218 call rd_dat_eps
00219
00220
00221
00222 do iq=1,Nq_irr
00223 NG_for_eps=NGQ_eps(iq)
00224 do ie=1,ne
00225 do igL=1,NG_for_eps
00226 epsirr(igL,igL,ie,iq)=epsirr(igL,igL,ie,iq)-1.0d0
00227 enddo
00228 enddo
00229 enddo
00230
00231 endif
00232
00233
00234
00235 call MPI_Bcast(Ecut_for_eps,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00236
00237
00238
00239 call MPI_Bcast(idlt,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00240 call MPI_Bcast(dmna,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00241 call MPI_Bcast(dmnr,1,MPI_DOUBLE_PRECISION,0,comm,ierr)
00242
00243
00244
00245 call MPI_Bcast(Num_freq_grid,1,MPI_INTEGER,0,comm,ierr)
00246 call MPI_Bcast(ne,1,MPI_INTEGER,0,comm,ierr)
00247
00248
00249
00250 call MPI_Bcast(Nq_irr,1,MPI_INTEGER,0,comm,ierr)
00251 call MPI_Bcast(NTQ,1,MPI_INTEGER,0,comm,ierr)
00252 call MPI_Bcast(NTGQ,1,MPI_INTEGER,0,comm,ierr)
00253 call MPI_Bcast(Lq1,1,MPI_INTEGER,0,comm,ierr)
00254 call MPI_Bcast(Lq2,1,MPI_INTEGER,0,comm,ierr)
00255 call MPI_Bcast(Lq3,1,MPI_INTEGER,0,comm,ierr)
00256 call MPI_BARRIER(comm,ierr)
00257
00258 if(myrank/=0) allocate(em(ne))
00259 if(myrank/=0) allocate(pole_of_chi(ne))
00260 if(myrank/=0) allocate(mat_b(ne,ne))
00261 if(myrank/=0) allocate(SQI(3,Nq_irr))
00262 if(myrank/=0) allocate(SQ(3,NTQ))
00263 if(myrank/=0) allocate(numirrq(NTQ))
00264 if(myrank/=0) allocate(numrotq(NTQ))
00265 if(myrank/=0) allocate(trsq(NTQ))
00266 if(myrank/=0) allocate(RWq(3,NTQ))
00267 if(myrank/=0) allocate(LG0(3,NTG,NTQ))
00268 if(myrank/=0) allocate(NGQ_eps(NTQ))
00269 if(myrank/=0) allocate(NGQ_psi(NTQ))
00270 if(myrank/=0) allocate(packingq(-Lq1:Lq1,-Lq2:Lq2,-Lq3:Lq3,Nq_irr))
00271 if(myrank/=0) allocate(epsirr(NTGQ,NTGQ,ne,Nq_irr))
00272 call MPI_BARRIER(comm,ierr)
00273
00274 mem_size=dble(NTGQ*NTGQ*ne*Nq_irr)*8.0d0/1024.0d0/1024.0d0/1024.0d0
00275 if(myrank.eq.0)then
00276 write(6,'(a35,f20.15)')'mem size epsirr (GB)',mem_size
00277 endif
00278
00279 call MPI_Bcast(em,ne,MPI_DOUBLE_COMPLEX,0,comm,ierr)
00280 call MPI_Bcast(pole_of_chi,ne,MPI_DOUBLE_COMPLEX,0,comm,ierr)
00281 call MPI_Bcast(mat_b,ne*ne,MPI_DOUBLE_COMPLEX,0,comm,ierr)
00282 call MPI_Bcast(SQI,3*Nq_irr,MPI_DOUBLE_PRECISION,0,comm,ierr)
00283 call MPI_Bcast(SQ,3*NTQ,MPI_DOUBLE_PRECISION,0,comm,ierr)
00284 call MPI_Bcast(numirrq,NTQ,MPI_INTEGER,0,comm,ierr)
00285 call MPI_Bcast(numrotq,NTQ,MPI_INTEGER,0,comm,ierr)
00286 call MPI_Bcast(trsq,NTQ,MPI_INTEGER,0,comm,ierr)
00287 call MPI_Bcast(RWq,3*NTQ,MPI_INTEGER,0,comm,ierr)
00288 call MPI_Bcast(LG0,3*NTG*NTQ,MPI_INTEGER,0,comm,ierr)
00289 call MPI_Bcast(NGQ_eps,NTQ,MPI_INTEGER,0,comm,ierr)
00290 call MPI_Bcast(NGQ_psi,NTQ,MPI_INTEGER,0,comm,ierr)
00291 call MPI_Bcast(packingq(-Lq1,-Lq2,-Lq3,1),(2*Lq1+1)*(2*Lq2+1)*(2*Lq3+1)*Nq_irr,MPI_INTEGER,0,comm,ierr)
00292 call MPI_Bcast(epsirr,NTGQ*NTGQ*ne*Nq_irr,MPI_COMPLEX,0,comm,ierr)
00293 call MPI_BARRIER(comm,ierr)
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316 avec_length(1)=dsqrt(a1(1)**2+a1(2)**2+a1(3)**2)
00317 avec_length(2)=dsqrt(a2(1)**2+a2(2)**2+a2(3)**2)
00318 avec_length(3)=dsqrt(a3(1)**2+a3(2)**2+a3(3)**2)
00319 Rc=Rc_range_spacing*maxval(avec_length)
00320
00321
00322
00323 if(Ncalc.eq.0) Ncalc=NTB
00324
00325 if(myrank.eq.0)then
00326 write(6,*)
00327 write(6,'(a40,x,i10)')'Ncalc (considered bands in self-energy)=',Ncalc
00328 write(6,'(a40,x,f15.10)')'idlt (eV)=',idlt*au
00329 write(6,'(a40,x,f15.10)')'Rc (AA)=',Rc*bohr
00330 endif
00331
00332
00333
00334 allocate(fbk(NTB,NTK));fbk(:,:)=0.0d0
00335 do ik=1,NTK
00336 ikir=numirr(ik)
00337 do ib=1,NTB
00338 FACTOR=(FermiEnergy-E_EIGI(ib,ikir))/idlt
00339 fbk(ib,ik)=atan(FACTOR)/pi+0.5d0
00340 enddo
00341 enddo
00342 SUM_REAL=0.0d0
00343 do ik=1,NTK
00344 ikir=numirr(ik)
00345 do ib=1,NTB
00346 SUM_REAL=SUM_REAL+fbk(ib,ik)
00347 en=(E_EIGI(ib,ikir)-FermiEnergy)*au
00348 enddo
00349 enddo
00350 if(myrank.eq.0)then
00351 write(6,*)
00352 write(6,'(a40,x,f15.7)')'Nele=',2.0d0*SUM_REAL/dble(NTK)
00353 endif
00354
00355
00356
00357 if(gw_grid_separation<idlt) gw_grid_separation=idlt
00358
00359 if(myrank.eq.0)then
00360 bandmin=minval(E_EIGI(1+minval(Ns),:))
00361 bandmax=maxval(E_EIGI(minval(Nb)+minval(Ns),:))
00362 diff_band_energy=bandmax-bandmin
00363 chiqw_grd_size=dble(em(ne))
00364 emax=bandmax+diff_band_energy
00365 emin=bandmin-diff_band_energy
00366 ecmax=bandmax+diff_band_energy+chiqw_grd_size
00367 ecmin=bandmin-diff_band_energy-chiqw_grd_size
00368
00369 call estimate_nsgm(ecmin,emin,emax,ecmax,gw_grid_separation,nproc,nsgm)
00370 allocate(sgmw(nsgm));sgmw=0.0d0
00371 call make_sgmw(ecmin,emin,emax,gw_grid_separation,nsgm,sgmw(1))
00372
00373 write(6,*)
00374 write(6,'(a40,x,i10)')'number of chiqw_grd =',Num_freq_grid
00375 write(6,'(a40,x,f15.7)')'bandmax (eV)=',bandmax*au
00376 write(6,'(a40,x,f15.7)')'bandmin (eV)=',bandmin*au
00377 write(6,'(a40,x,f15.7)')'diff_band_energy (eV)=',diff_band_energy*au
00378 write(6,'(a40,x,f15.7)')'chiqw_grd_range (eV)=',chiqw_grd_size*au
00379 write(6,*)
00380 write(6,'(a40,x,i10)')'number of gw_grd =',nsgm
00381 write(6,'(a40,x,f15.7)')'emax (eV)=',emax*au
00382 write(6,'(a40,x,f15.7)')'emin (eV)=',emin*au
00383 write(6,'(a40,x,f15.7)')'ecmax (eV)=',ecmax*au
00384 write(6,'(a40,x,f15.7)')'ecmin (eV)=',ecmin*au
00385 write(6,'(a40,x,f15.7)')'gw_grid_separation (eV)=',gw_grid_separation*au
00386 write(6,*)
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411 endif
00412
00413 call MPI_Bcast(nsgm,1,MPI_INTEGER,0,comm,ierr)
00414 call MPI_BARRIER(comm,ierr)
00415 if(myrank/=0) allocate(sgmw(nsgm))
00416 call MPI_BARRIER(comm,ierr)
00417 call MPI_Bcast(sgmw,nsgm,MPI_DOUBLE_PRECISION,0,comm,ierr)
00418 call MPI_BARRIER(comm,ierr)
00419
00420
00421
00422 if(myrank.eq.0)then
00423 call system('mkdir -p dir-gw')
00424 ierr=CHDIR("./dir-gw")
00425 call system('pwd')
00426
00427
00428
00429 OPEN(136,FILE='./dat.gwgrid')
00430 rewind(136)
00431 write(136,*) nsgm
00432 do ie=1,nsgm
00433 write(136,'(f20.10)') sgmw(ie)
00434 enddo
00435 ierr=CHDIR("..")
00436 call system('pwd')
00437 endif
00438 flush(6)
00439
00440
00441
00442 pnq=NTQ/nproc
00443 if(mod(NTQ,nproc).ne.0) then
00444 nbufq=pnq+1
00445 else
00446 nbufq=pnq
00447 end if
00448 if(myrank.lt.mod(NTQ,nproc)) then
00449 pnq=pnq+1
00450 bnq=pnq*myrank+1
00451 enq=bnq+pnq-1
00452 else
00453 bnq=(pnq+1)*mod(NTQ,nproc)+pnq*(myrank-mod(NTQ,nproc))+1
00454 enq=bnq+pnq-1
00455 end if
00456
00457
00458
00459
00460
00461 if(calc_sc)then
00462
00463
00464
00465
00466 if(myrank.eq.0)then
00467 write(6,*)'## SC calc start ##'
00468 write(6,*)
00469 endif
00470
00471
00472
00473 nfft1=nwx2+1; nfft2=nwy2+1; nfft3=nwz2+1; Nl123=nfft1*nfft2*nfft3
00474 call fft3_init(nwx2,nwy2,nwz2,nfft1,nfft2,nfft3,fs)
00475
00476 allocate(pSC(nsgm,Mb,Mb,Nk_irr)); pSC(:,:,:,:)=0.0d0
00477 do iq=1,pnq
00478
00479 q1=SQ(1,bnq+iq-1);q2=SQ(2,bnq+iq-1);q3=SQ(3,bnq+iq-1)
00480
00481
00482
00483 if(q1/=0.0d0.or.q2/=0.0d0.or.q3/=0.0d0)then
00484 NG_for_eps=NGQ_eps(bnq+iq-1)
00485 allocate(length_qg(NG_for_eps)); length_qg=0.0D0
00486 allocate(atten_factor(NG_for_eps)); atten_factor=0.0D0
00487 allocate(epsmk(NTGQ,NTGQ,ne)); epsmk=0.0d0
00488 iqir=numirrq(bnq+iq-1)
00489 iop=numrotq(bnq+iq-1)
00490
00491 call make_eps(NTG,NTGQ,ne,trsq(bnq+iq-1),NGQ_eps(bnq+iq-1),LG0(1,1,bnq+iq-1),RWq(1,bnq+iq-1),&
00492 rginv(1,1,iop),pg(1,iop),nnp,Lq1,Lq2,Lq3,packingq(-Lq1,-Lq2,-Lq3,iqir),epsirr(1,1,1,iqir),&
00493 epsmk(1,1,1))
00494
00495 length_qg(:)=0.0d0
00496 atten_factor(:)=0.0d0
00497 do igL=1,NG_for_eps
00498 igL1=LG0(1,igL,bnq+iq-1)
00499 igL2=LG0(2,igL,bnq+iq-1)
00500 igL3=LG0(3,igL,bnq+iq-1)
00501 qgL(:)=(q1+dble(igL1))*b1(:)+(q2+dble(igL2))*b2(:)+(q3+dble(igL3))*b3(:)
00502 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
00503 qgL1=dsqrt(qgL2)
00504 length_qg(igL)=qgL1
00505 atten_factor(igL)=dsqrt(1.0d0-dcos(qgL1*Rc))
00506 enddo
00507
00508
00509
00510 allocate(rho(NG_for_eps,Mb,Nk_irr));rho=0.0d0
00511 allocate(fftwk(Nl123*2));fftwk=0.0d0
00512 allocate(wfunc(Nl123*2));wfunc=0.0d0
00513 allocate(rho_tmp(NG_for_eps));rho_tmp=0.0d0
00514 allocate(pSComp(nsgm,Mb,Mb,Nk_irr)); pSComp=0.0d0
00515 allocate(C0_K(NTG));C0_K=0.0d0
00516 allocate(C0_KmQ(NTG));C0_KmQ=0.0d0
00517 allocate(vecf(ne));vecf=0.0d0
00518 allocate(veca(ne));veca=0.0d0
00519
00520 do ib=1,Ncalc
00521 if(myrank.eq.0) write(6,*)'ib=',ib
00522
00523 rho(:,:,:)=0.0D0
00524
00525 do ikir=1,Nk_irr
00526
00527 ik=numMK(ikir)
00528 iop=numrot(ik)
00529
00530 do jb=1,Nb(ik)
00531
00532 call make_C0_for_given_band(NTG,trs(ik),NG0(ik),KG0(1,1,ik),RW(1,ik),rginv(1,1,iop),pg(1,iop),nnp,&
00533 L1,L2,L3,packing(-L1,-L2,-L3,ikir),CIR(1,jb+Ns(ik),ikir),C0_K(1))
00534
00535 shift_G(:)=0
00536 call search_kq(NTK,SK0(1,1),-q1,-q2,-q3,ik,ikq,shift_G(1))
00537 shift_G(:)=-shift_G(:)
00538
00539 ikqir=numirr(ikq)
00540 ikqop=numrot(ikq)
00541
00542 call make_C0_for_given_band(NTG,trs(ikq),NG0(ikq),KG0(1,1,ikq),RW(1,ikq),rginv(1,1,ikqop),pg(1,ikqop),nnp,&
00543 L1,L2,L3,packing(-L1,-L2,-L3,ikqir),CIR(1,ib,ikqir),C0_KmQ(1))
00544
00545 call calc_InterStateMatrix(NTK,NTG,NG0(1),KG0(1,1,1),C0_KmQ(1),C0_K(1),ikq,ik,nwx2,nwy2,nwz2,&
00546 nfft1,nfft2,Nl123,wfunc(1),fftwk(1),fs,LG0(1,1,bnq+iq-1),NG_for_eps,shift_G(1),rho_tmp(1))
00547
00548 rho(:,jb,ikir)=rho_tmp(:)
00549
00550 enddo
00551 enddo
00552
00553 do ikir=1,Nk_irr
00554
00555 ik=numMK(ikir)
00556
00557 shift_G(:)=0
00558 call search_kq(NTK,SK0(1,1),-q1,-q2,-q3,ik,ikq,shift_G(1))
00559
00560 do jb=1,Nb(ik)
00561 do kb=1,Nb(ik)
00562 vecf=0.0d0
00563 do ie=1,ne
00564 SUM_CMPX=0.0d0
00565 do igL=1,NG_for_eps
00566 do jgL=1,NG_for_eps
00567
00568 SUM_CMPX=SUM_CMPX+rho(igL,jb,ikir)/length_qg(igL)*atten_factor(igL)*epsmk(igL,jgL,ie)&
00569 *CONJG(rho(jgL,kb,ikir))/length_qg(jgL)*atten_factor(jgL)
00570
00571 enddo
00572 enddo
00573 vecf(ie)=2.0d0*tpi*SUM_CMPX/dble(NTQ)/VOLUME
00574 enddo
00575
00576 veca=0.0d0
00577 do je=1,ne
00578 SUM_CMPX=0.0d0
00579 do ie=1,ne
00580 SUM_CMPX=SUM_CMPX+mat_b(je,ie)*vecf(ie)
00581 enddo
00582 veca(je)=SUM_CMPX
00583 enddo
00584
00585 do ie=1,nsgm
00586 delta=sgmw(ie)
00587
00588 ikqir=numirr(ikq)
00589 de=delta-E_EIGI(ib,ikqir)
00590
00591 if(E_EIGI(ib,ikqir)>FermiEnergy)then
00592 sgn=1.0d0
00593 else
00594 sgn=-1.0d0
00595 endif
00596
00597 do je=1,ne
00598
00599 dnm=de-(pole_of_chi(je)-ci*idlt)*sgn
00600
00601 pSComp(ie,jb,kb,ikir)=pSComp(ie,jb,kb,ikir)+veca(je)/dnm
00602
00603 enddo
00604 enddo
00605 enddo
00606 enddo
00607 enddo
00608 enddo
00609
00610
00611 pSC=pSC+pSComp
00612
00613 deallocate(fftwk,wfunc,rho_tmp,rho,pSComp,C0_K,C0_KmQ,vecf,veca)
00614
00615 if(myrank.eq.0) write(6,*)'FINISH iq',iq
00616 deallocate(length_qg,atten_factor,epsmk)
00617
00618 elseif(q1==0.0d0.and.q2==0.0d0.and.q3==0.0d0) then
00619
00620
00621
00622 NG_for_eps=NGQ_eps(bnq+iq-1)
00623 allocate(length_qg(NG_for_eps));length_qg=0.0d0
00624 allocate(atten_factor(NG_for_eps));atten_factor=0.0d0
00625 allocate(rho(NG_for_eps,Mb,Nk_irr));rho=0.0d0
00626 allocate(epsmk(NTGQ,NTGQ,ne));epsmk(:,:,:)=0.0d0
00627 iqir=numirrq(bnq+iq-1)
00628 iop=numrotq(bnq+iq-1)
00629
00630 call make_eps(NTG,NTGQ,ne,trsq(bnq+iq-1),NGQ_eps(bnq+iq-1),LG0(1,1,bnq+iq-1),RWq(1,bnq+iq-1),&
00631 rginv(1,1,iop),pg(1,iop),nnp,Lq1,Lq2,Lq3,packingq(-Lq1,-Lq2,-Lq3,iqir),epsirr(1,1,1,iqir),&
00632 epsmk(1,1,1))
00633
00634 length_qg(:)=0.0D0
00635 do igL=1,NG_for_eps
00636 igL1=LG0(1,igL,bnq+iq-1)
00637 igL2=LG0(2,igL,bnq+iq-1)
00638 igL3=LG0(3,igL,bnq+iq-1)
00639 if(igL1==0.and.igL2==0.and.igL3==0)then
00640 No_G_0=igL
00641
00642 length_qg(igL)=1.0d0
00643 atten_factor(igL)=0.0d0
00644 else
00645 qgL(:)=(q1+dble(igL1))*b1(:)+(q2+dble(igL2))*b2(:)+(q3+dble(igL3))*b3(:)
00646 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
00647 qgL1=dsqrt(qgL2)
00648 length_qg(igL)=qgL1
00649 atten_factor(igL)=dsqrt(1.0d0-dcos(qgL1*Rc))
00650 endif
00651 enddo
00652
00653 do ib=1,Ncalc
00654 if(myrank.eq.0) write(6,*)'ib=',ib
00655 rho(:,:,:)=0.0D0
00656
00657 allocate(fftwk(Nl123*2));fftwk=0.0d0
00658 allocate(wfunc(Nl123*2));wfunc=0.0d0
00659 allocate(rho_tmp(NG_for_eps));rho_tmp=0.0d0
00660 allocate(C0_K(NTG));C0_K=0.0d0
00661 allocate(C0_KmQ(NTG));C0_KmQ=0.0d0
00662
00663 do ikir=1,Nk_irr
00664
00665 ik=numMK(ikir)
00666 iop=numrot(ik)
00667
00668 do jb=1,Nb(ik)
00669
00670 call make_C0_for_given_band(NTG,trs(ik),NG0(ik),KG0(1,1,ik),RW(1,ik),rginv(1,1,iop),pg(1,iop),nnp,&
00671 L1,L2,L3,packing(-L1,-L2,-L3,ikir),CIR(1,jb+Ns(ik),ikir),C0_K(1))
00672
00673 shift_G(:)=0
00674 ikq=ik
00675
00676 ikqir=numirr(ikq)
00677 ikqop=numrot(ikq)
00678
00679 call make_C0_for_given_band(NTG,trs(ikq),NG0(ikq),KG0(1,1,ikq),RW(1,ikq),rginv(1,1,ikqop),pg(1,ikqop),nnp,&
00680 L1,L2,L3,packing(-L1,-L2,-L3,ikqir),CIR(1,ib,ikqir),C0_KmQ(1))
00681
00682 call calc_InterStateMatrix(NTK,NTG,NG0(1),KG0(1,1,1),C0_KmQ(1),C0_K(1),ikq,ik,nwx2,nwy2,nwz2,&
00683 nfft1,nfft2,Nl123,wfunc(1),fftwk(1),fs,LG0(1,1,bnq+iq-1),NG_for_eps,shift_G(1),rho_tmp(1))
00684
00685 rho(:,jb,ikir)=rho_tmp(:)
00686
00687 enddo
00688 enddo
00689
00690 deallocate(fftwk,wfunc,rho_tmp,C0_K,C0_KmQ)
00691
00692
00693
00694 allocate(vecf(ne));vecf=0.0d0
00695 allocate(veca(ne));veca=0.0d0
00696
00697 do ikir=1,Nk_irr
00698
00699 ik=numMK(ikir)
00700
00701 do jb=1,Nb(ik)
00702 do kb=1,Nb(ik)
00703 vecf=0.0d0
00704 do ie=1,ne
00705 SUM_CMPX=0.0d0
00706 do igL=1,NG_for_eps
00707
00708 do jgL=1,NG_for_eps
00709
00710
00711 SUM_CMPX=SUM_CMPX+rho(igL,jb,ikir)/length_qg(igL)*atten_factor(igL)*epsmk(igL,jgL,ie)&
00712 *CONJG(rho(jgL,kb,ikir))/length_qg(jgL)*atten_factor(jgL)
00713
00714 enddo
00715 enddo
00716 vecf(ie)=2.0d0*tpi*SUM_CMPX/VOLUME/dble(NTQ)
00717 enddo
00718 veca=0.0d0
00719 do je=1,ne
00720 SUM_CMPX=0.0d0
00721 do ie=1,ne
00722 SUM_CMPX=SUM_CMPX+mat_b(je,ie)*vecf(ie)
00723 enddo
00724 veca(je)=SUM_CMPX
00725 enddo
00726 do ie=1,nsgm
00727 ikq=ik
00728 delta=sgmw(ie)
00729
00730 ikqir=numirr(ikq)
00731 de=delta-E_EIGI(ib,ikqir)
00732
00733 if(E_EIGI(ib,ikqir)>FermiEnergy)then
00734 sgn=1.0d0
00735 else
00736 sgn=-1.0d0
00737 endif
00738
00739 do je=1,ne
00740 dnm=de-(pole_of_chi(je)-ci*idlt)*sgn
00741
00742 pSC(ie,jb,kb,ikir)=pSC(ie,jb,kb,ikir)+veca(je)/dnm
00743
00744 enddo
00745 enddo
00746 enddo
00747 enddo
00748 enddo
00749
00750 deallocate(vecf,veca)
00751
00752 enddo
00753 deallocate(length_qg,atten_factor,rho,epsmk)
00754
00755
00756
00757
00758
00759 chead=(tpi/dble(NTQ)/VOLUME)*Rc*Rc
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775 allocate(vecf(ne));vecf=0.0d0
00776 allocate(veca(ne));veca=0.0d0
00777 do ikir=1,Nk_irr
00778
00779 ik=numMK(ikir)
00780
00781 do jb=1,Nb(ik)
00782
00783 vecf=0.0d0
00784 do ie=1,ne
00785 vecf(ie)=epsirr(No_G_0,No_G_0,ie,bnq+iq-1)
00786 enddo
00787
00788 veca=0.0d0
00789 do je=1,ne
00790 SUM_CMPX=0.0d0
00791 do ie=1,ne
00792 SUM_CMPX=SUM_CMPX+mat_b(je,ie)*vecf(ie)
00793 enddo
00794 veca(je)=SUM_CMPX
00795 enddo
00796
00797 do ie=1,nsgm
00798 delta=sgmw(ie)
00799
00800 de=delta-E_EIGI(jb+Ns(ik),ikir)
00801
00802 if(E_EIGI(jb+Ns(ik),ikir)>FermiEnergy)then
00803 sgn=1.0d0
00804 else
00805 sgn=-1.0d0
00806 endif
00807 do je=1,ne
00808 dnm=de-(pole_of_chi(je)-ci*idlt)*sgn
00809
00810 pSC(ie,jb,jb,ikir)=pSC(ie,jb,jb,ikir)+veca(je)/dnm*chead
00811
00812 enddo
00813 enddo
00814 enddo
00815 enddo
00816 deallocate(vecf,veca)
00817 if(myrank.eq.0) write(6,*)'FINISH iq',iq
00818 endif
00819 enddo
00820 call MPI_BARRIER(comm,ierr)
00821
00822 allocate(SCirr(nsgm,Mb,Mb,Nk_irr)); SCirr(:,:,:,:)=0.0d0
00823
00824
00825
00826
00827 mem_size=dble(nsgm*Mb*Mb*Nk_irr)*8.0d0/1024.0d0/1024.0d0/1024.0d0
00828 if(myrank.eq.0)then
00829 write(6,'(a35,f20.15)')'mem size pSC or SCirr (GB)',mem_size
00830 endif
00831
00832 call MPI_REDUCE(pSC,SCirr,nsgm*Mb*Mb*Nk_irr,MPI_COMPLEX,MPI_SUM,0,comm,ierr)
00833 call MPI_BARRIER(comm,ierr)
00834
00835 call MPI_Bcast(SCirr,nsgm*Mb*Mb*Nk_irr,MPI_COMPLEX,0,comm,ierr)
00836 call MPI_BARRIER(comm,ierr)
00837
00838
00839
00840 pnw=nsgm/nproc
00841 if(mod(nsgm,nproc).ne.0) then
00842 nbufw=pnw+1
00843 else
00844 nbufw=pnw
00845 end if
00846 if(myrank.lt.mod(nsgm,nproc)) then
00847 pnw=pnw+1
00848 bnw=pnw*myrank+1
00849 enw=bnw+pnw-1
00850 else
00851 bnw=(pnw+1)*mod(nsgm,nproc)+pnw*(myrank-mod(nsgm,nproc))+1
00852 enw=bnw+pnw-1
00853 end if
00854
00855
00856 allocate(SC(pnw,Mb,Mb,NTK)); SC=0.0d0
00857
00858
00859
00860
00861
00862
00863 do ik=1,NTK
00864 ikir=numirr(ik)
00865 if(trs(ik)==1)then
00866 do ie=1,pnw
00867 do ib=1,Nb(ik)
00868 do jb=1,Nb(ik)
00869 SC(ie,ib,jb,ik)=SCirr(bnw+ie-1,ib,jb,ikir)
00870 enddo
00871 enddo
00872 enddo
00873 elseif(trs(ik)==-1)then
00874 do ie=1,pnw
00875 do ib=1,Nb(ik)
00876 do jb=1,Nb(ik)
00877 SC(ie,ib,jb,ik)=SCirr(bnw+ie-1,jb,ib,ikir)
00878 enddo
00879 enddo
00880 enddo
00881 endif
00882 enddo
00883 deallocate(pSC)
00884
00885 allocate(pf(NTK,-Na1:Na1,-Na2:Na2,-Na3:Na3)); pf=0.0d0
00886 do ik=1,NTK
00887 do ia3=-Na3,Na3
00888 do ia2=-Na2,Na2
00889 do ia1=-Na1,Na1
00890 phase=tpi*(SK0(1,ik)*dble(ia1)+SK0(2,ik)*dble(ia2)+SK0(3,ik)*dble(ia3))
00891 pf(ik,ia1,ia2,ia3)=exp(-ci*phase)
00892 enddo
00893 enddo
00894 enddo
00895 enddo
00896
00897
00898
00899 if(myrank.eq.0)then
00900 write(6,*)
00901 write(6,*)'start SCR'
00902 write(6,*)
00903 endif
00904
00905 allocate(pSCR(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3,pnw)); pSCR=0.0d0
00906
00907
00908
00909 do ie=1,pnw
00910 do ia1=-Na1,Na1
00911 do ia2=-Na2,Na2
00912 do ia3=-Na3,Na3
00913 do iw=1,NWF
00914 do jw=1,NWF
00915 SUM_CMPX=0.0D0
00916
00917 psum=0.0d0
00918
00919 do ik=1,NTK
00920 do jb=1,Nb(ik)
00921 do kb=1,Nb(ik)
00922 psum=psum+CONJG(UNT(jb,iw,ik))*SC(ie,jb,kb,ik)*UNT(kb,jw,ik)*pf(ik,ia1,ia2,ia3)
00923 enddo
00924 enddo
00925 enddo
00926
00927
00928 SUM_CMPX=SUM_CMPX+psum
00929
00930
00931 pSCR(iw,jw,ia1,ia2,ia3,ie)=SUM_CMPX/DBLE(NTK)
00932 enddo
00933 enddo
00934 enddo
00935 enddo
00936 enddo
00937
00938
00939 write(6,*)'FINISH ie myrank',ie,myrank
00940 enddo
00941
00942
00943
00944 if(.false.)then
00945 do ie=1,pnw
00946 do ia1=-Na1,Na1
00947 do ia2=-Na2,Na2
00948 do ia3=-Na3,Na3
00949 do iw=1,NWF
00950 do jw=1,NWF
00951 SUM_CMPX=0.0D0
00952
00953 psum=0.0d0
00954
00955 do ik=1,NTK
00956 do jb=1,Nb(ik)
00957 psum=psum+CONJG(UNT(jb,iw,ik))*SC(ie,jb,jb,ik)*UNT(jb,jw,ik)*pf(ik,ia1,ia2,ia3)
00958 enddo
00959 enddo
00960
00961
00962 SUM_CMPX=SUM_CMPX+psum
00963
00964
00965 pSCR(iw,jw,ia1,ia2,ia3,ie)=SUM_CMPX/DBLE(NTK)
00966 enddo
00967 enddo
00968 enddo
00969 enddo
00970 enddo
00971
00972 if(myrank.eq.0) write(6,*)'FINISH ie',ie
00973 enddo
00974 endif
00975
00976 deallocate(SC,pf)
00977 call MPI_BARRIER(comm,ierr)
00978
00979
00980
00981
00982 if(myrank.eq.0)then
00983 allocate(MAT_SC_R(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3,nsgm)); MAT_SC_R=0.0d0
00984 endif
00985
00986
00987 mem_size=dble(pnw*NWF*NWF*(2*Na1+1)*(2*Na2+1)*(2*Na3+1))*8.0d0/1024.0d0/1024.0d0/1024.0d0
00988 if(myrank.eq.0)then
00989 write(6,'(a35,f20.15)')'mem size pSCR (GB)',mem_size
00990 endif
00991
00992
00993 call MPI_Gather(pSCR,pnw*NWF*NWF*(2*Na1+1)*(2*Na2+1)*(2*Na3+1),MPI_COMPLEX,&
00994 MAT_SC_R,pnw*NWF*NWF*(2*Na1+1)*(2*Na2+1)*(2*Na3+1),MPI_COMPLEX,0,comm,ierr)
00995
00996
00997 if(myrank.eq.0)then
00998
00999 write(6,*)'finish MAT_SC_R'
01000 endif
01001
01002 else
01003 write(6,*)'skip SC calc.'
01004 if(myrank.eq.0)then
01005 allocate(MAT_SC_R(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3,nsgm)); MAT_SC_R=0.0d0
01006 endif
01007 endif
01008
01009
01010
01011
01012
01013 if(calc_sc)then
01014 if(myrank.eq.0)then
01015 ierr=CHDIR("./dir-gw")
01016 call system('pwd')
01017
01018
01019
01020 OPEN(156,FILE='./dat.energy_vs_sc')
01021 rewind(156)
01022 do ikir=1,Nk_irr
01023 ik=numMK(ikir)
01024 do jb=1,Nb(ik)
01025 min_diff=1.0d0
01026 do ie=1,nsgm
01027 en=abs(sgmw(ie)-E_EIGI(jb+Ns(ik),ikir))
01028 if(en<min_diff)then
01029 min_diff=en
01030 min_ie=ie
01031 endif
01032 enddo
01033 en=E_EIGI(jb+Ns(ik),ikir)-FermiEnergy
01034 write(156,'(3F20.10)') en*au,SCirr(min_ie,jb,jb,ikir)*au
01035 enddo
01036 enddo
01037 close(156)
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050
01051
01052
01053
01054
01055 ierr=CHDIR("..")
01056 call system('pwd')
01057 endif
01058 endif
01059
01060 deallocate(SCirr)
01061
01062
01063
01064
01065
01066
01067
01068 if(myrank.eq.0)then
01069 write(6,*)'## SX calc start ##'
01070 write(6,*)
01071 endif
01072
01073
01074
01075 nfft1=nwx2+1; nfft2=nwy2+1; nfft3=nwz2+1; Nl123=nfft1*nfft2*nfft3
01076 call fft3_init(nwx2,nwy2,nwz2,nfft1,nfft2,nfft3,fs)
01077
01078 allocate(SXirr(Mb,Mb,Nk_irr));SXirr(:,:,:)=0.0d0
01079 allocate(pSX(Mb,Mb,Nk_irr));pSX(:,:,:)=0.0d0
01080 do iq=1,pnq
01081
01082 q1=SQ(1,bnq+iq-1); q2=SQ(2,bnq+iq-1); q3=SQ(3,bnq+iq-1)
01083
01084
01085
01086 if(q1/=0.0d0.or.q2/=0.0d0.or.q3/=0.0d0)then
01087 NG_for_psi=NGQ_psi(bnq+iq-1)
01088 allocate(atten_factor(NG_for_psi));atten_factor(:)=0.0D0
01089 allocate(length_qg(NG_for_psi));length_qg(:)=0.0D0
01090 allocate(rho(NG_for_psi,Mb,Nk_irr))
01091 do igL=1,NG_for_psi
01092 igL1=LG0(1,igL,bnq+iq-1)
01093 igL2=LG0(2,igL,bnq+iq-1)
01094 igL3=LG0(3,igL,bnq+iq-1)
01095 qgL(:)=(q1+dble(igL1))*b1(:)+(q2+dble(igL2))*b2(:)+(q3+dble(igL3))*b3(:)
01096 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
01097 qgL1=dsqrt(qgL2)
01098 length_qg(igL)=qgL1
01099 atten_factor(igL)=1.0d0-dcos(qgL1*Rc)
01100 enddo
01101 do ib=1,Ncalc
01102 rho(:,:,:)=0.0D0
01103
01104 allocate(fftwk(Nl123*2));fftwk=0.0d0
01105 allocate(wfunc(Nl123*2));wfunc=0.0d0
01106 allocate(rho_tmp(NG_for_psi));rho_tmp=0.0d0
01107 allocate(C0_K(NTG));C0_K=0.0d0
01108 allocate(C0_KmQ(NTG));C0_KmQ=0.0d0
01109
01110 do ikir=1,Nk_irr
01111
01112 ik=numMK(ikir)
01113 iop=numrot(ik)
01114
01115 do jb=1,Nb(ik)
01116
01117 call make_C0_for_given_band(NTG,trs(ik),NG0(ik),KG0(1,1,ik),RW(1,ik),rginv(1,1,iop),pg(1,iop),nnp,&
01118 L1,L2,L3,packing(-L1,-L2,-L3,ikir),CIR(1,jb+Ns(ik),ikir),C0_K(1))
01119
01120 shift_G(:)=0
01121 call search_kq(NTK,SK0(1,1),-q1,-q2,-q3,ik,ikq,shift_G(1))
01122 shift_G(:)=-shift_G(:)
01123
01124 ikqir=numirr(ikq)
01125 ikqop=numrot(ikq)
01126
01127 call make_C0_for_given_band(NTG,trs(ikq),NG0(ikq),KG0(1,1,ikq),RW(1,ikq),rginv(1,1,ikqop),pg(1,ikqop),nnp,&
01128 L1,L2,L3,packing(-L1,-L2,-L3,ikqir),CIR(1,ib,ikqir),C0_KmQ(1))
01129
01130
01131 call calc_InterStateMatrix(NTK,NTG,NG0(1),KG0(1,1,1),C0_KmQ(1),C0_K(1),ikq,ik,nwx2,nwy2,nwz2,&
01132 nfft1,nfft2,Nl123,wfunc(1),fftwk(1),fs,LG0(1,1,bnq+iq-1),NG_for_psi,shift_G(1),rho_tmp(1))
01133
01134 rho(:,jb,ikir)=rho_tmp(:)
01135
01136 enddo
01137 enddo
01138
01139 deallocate(fftwk,wfunc,rho_tmp,C0_K,C0_KmQ)
01140
01141
01142
01143 do ikir=1,Nk_irr
01144
01145 ik=numMK(ikir)
01146
01147 shift_G(:)=0
01148 call search_kq(NTK,SK0(1,1),-q1,-q2,-q3,ik,ikq,shift_G(1))
01149
01150 do jb=1,Nb(ik)
01151 do kb=1,Nb(ik)
01152 SUM_CMPX=0.0d0
01153 do igL=1,NG_for_psi
01154
01155 SUM_CMPX=SUM_CMPX+fbk(ib,ikq)*rho(igL,jb,ikir)&
01156 *CONJG(rho(igL,kb,ikir))/((length_qg(igL))**2)*atten_factor(igL)
01157
01158 enddo
01159
01160 pSX(jb,kb,ikir)=pSX(jb,kb,ikir)+SUM_CMPX
01161
01162 enddo
01163 enddo
01164 enddo
01165
01166
01167 enddo
01168
01169 if(myrank.eq.0) write(6,*)'FINISH iq',iq
01170 deallocate(length_qg,atten_factor,rho)
01171 elseif(q1==0.0d0.and.q2==0.0d0.and.q3==0.0d0)then
01172
01173
01174
01175
01176 NG_for_psi=NGQ_psi(bnq+iq-1)
01177 allocate(length_qg(NG_for_psi));length_qg(:)=0.0D0
01178 allocate(atten_factor(NG_for_psi));atten_factor(:)=0.0D0
01179 allocate(rho(NG_for_psi,Mb,Nk_irr))
01180 do igL=1,NG_for_psi
01181 igL1=LG0(1,igL,bnq+iq-1)
01182 igL2=LG0(2,igL,bnq+iq-1)
01183 igL3=LG0(3,igL,bnq+iq-1)
01184 if(igL1==0.and.igL2==0.and.igL3==0)then
01185 No_G_0=igL
01186
01187 length_qg(igL)=1.0d0
01188 atten_factor(igL)=0.0d0
01189 else
01190 qgL(:)=(q1+dble(igL1))*b1(:)+(q2+dble(igL2))*b2(:)+(q3+dble(igL3))*b3(:)
01191 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
01192 qgL1=dsqrt(qgL2)
01193 length_qg(igL)=qgL1
01194 atten_factor(igL)=1.0d0-dcos(qgL1*Rc)
01195 endif
01196 enddo
01197 do ib=1,Ncalc
01198 rho(:,:,:)=0.0D0
01199
01200 allocate(fftwk(Nl123*2));fftwk=0.0d0
01201 allocate(wfunc(Nl123*2));wfunc=0.0d0
01202 allocate(rho_tmp(NG_for_psi));rho_tmp=0.0d0
01203 allocate(C0_K(NTG));C0_K=0.0d0
01204 allocate(C0_KmQ(NTG));C0_KmQ=0.0d0
01205
01206 do ikir=1,Nk_irr
01207
01208 ik=numMK(ikir)
01209 iop=numrot(ik)
01210
01211 do jb=1,Nb(ik)
01212
01213 call make_C0_for_given_band(NTG,trs(ik),NG0(ik),KG0(1,1,ik),RW(1,ik),rginv(1,1,iop),pg(1,iop),nnp,&
01214 L1,L2,L3,packing(-L1,-L2,-L3,ikir),CIR(1,jb+Ns(ik),ikir),C0_K(1))
01215
01216 shift_G(:)=0
01217 ikq=ik
01218
01219 ikqir=numirr(ikq)
01220 ikqop=numrot(ikq)
01221
01222 call make_C0_for_given_band(NTG,trs(ikq),NG0(ikq),KG0(1,1,ikq),RW(1,ikq),rginv(1,1,ikqop),pg(1,ikqop),nnp,&
01223 L1,L2,L3,packing(-L1,-L2,-L3,ikqir),CIR(1,ib,ikqir),C0_KmQ(1))
01224
01225 call calc_InterStateMatrix(NTK,NTG,NG0(1),KG0(1,1,1),C0_KmQ(1),C0_K(1),ikq,ik,nwx2,nwy2,nwz2,&
01226 nfft1,nfft2,Nl123,wfunc(1),fftwk(1),fs,LG0(1,1,bnq+iq-1),NG_for_psi,shift_G(1),rho_tmp(1))
01227
01228 rho(:,jb,ikir)=rho_tmp(:)
01229
01230 enddo
01231 enddo
01232
01233 deallocate(fftwk,wfunc,rho_tmp,C0_K,C0_KmQ)
01234
01235
01236
01237 do ikir=1,Nk_irr
01238
01239 ik=numMK(ikir)
01240
01241 ikq=ik
01242
01243 do jb=1,Nb(ik)
01244 do kb=1,Nb(ik)
01245 SUM_CMPX=0.0d0
01246 do igL=1,NG_for_psi
01247
01248
01249 SUM_CMPX=SUM_CMPX+fbk(ib,ikq)*rho(igL,jb,ikir)*CONJG(rho(igL,kb,ikir))/((length_qg(igL))**2)*atten_factor(igL)
01250
01251
01252 enddo
01253
01254 pSX(jb,kb,ikir)=pSX(jb,kb,ikir)+SUM_CMPX
01255
01256 enddo
01257 enddo
01258 enddo
01259
01260
01261 enddo
01262
01263
01264 write(6,*)'FINISH iq myrank',iq,myrank
01265 deallocate(length_qg,atten_factor,rho)
01266 endif
01267 enddo
01268
01269 call MPI_BARRIER(comm,ierr)
01270
01271 call MPI_REDUCE(pSX,SXirr,Mb*Mb*Nk_irr,MPI_DOUBLE_COMPLEX,MPI_SUM,0,comm,ierr)
01272
01273 if(myrank.eq.0)then
01274 SXirr(:,:,:)=2.0d0*tpi*SXirr(:,:,:)/dble(NTQ)/VOLUME
01275
01276
01277
01278
01279
01280 chead=(tpi/dble(NTQ)/VOLUME)*Rc*Rc
01281
01282
01283
01284
01285
01286
01287 write(6,*)'correction_head=',chead
01288
01289 allocate(SX_DIV(Mb,Mb,Nk_irr));SX_DIV(:,:,:)=0.0d0
01290 do ikir=1,Nk_irr
01291 ik=numMK(ikir)
01292 do jb=1,Nb(ik)
01293 SX_DIV(jb,jb,ikir)=fbk(jb+Ns(ik),ik)*chead
01294 enddo
01295 enddo
01296 SXirr=SXirr+SX_DIV
01297
01298
01299
01300 allocate(SX(Mb,Mb,NTK));SX(:,:,:)=0.0d0
01301 do ik=1,NTK
01302 ikir=numirr(ik)
01303 if(trs(ik)==1) then
01304 SX(:,:,ik)=SXirr(:,:,ikir)
01305 elseif(trs(ik)==-1) then
01306 do ib=1,Nb(ik)
01307 do jb=1,Nb(ik)
01308 SX(ib,jb,ik)=SXirr(jb,ib,ikir)
01309 enddo
01310 enddo
01311 endif
01312 enddo
01313
01314 allocate(pf(-Na1:Na1,-Na2:Na2,-Na3:Na3,NTK));pf=0.0d0
01315 do ik=1,NTK
01316 do ia3=-Na3,Na3
01317 do ia2=-Na2,Na2
01318 do ia1=-Na1,Na1
01319 phase=tpi*(SK0(1,ik)*dble(ia1)+SK0(2,ik)*dble(ia2)+SK0(3,ik)*dble(ia3))
01320 pf(ia1,ia2,ia3,ik)=exp(-ci*phase)
01321 enddo
01322 enddo
01323 enddo
01324 enddo
01325 write(6,*)'#finish make pf'
01326
01327 allocate(MAT_SX_R(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3));MAT_SX_R(:,:,:,:,:)=0.0d0
01328 do ia3=-Na3,Na3
01329 do ia2=-Na2,Na2
01330 do ia1=-Na1,Na1
01331 do iw=1,NWF
01332 do jw=1,NWF
01333 SUM_CMPX=0.0D0
01334 if(.true.)then
01335 do ik=1,NTK
01336 do ib=1,Nb(ik)
01337 do jb=1,Nb(ik)
01338 SUM_CMPX=SUM_CMPX+CONJG(UNT(ib,iw,ik))*SX(ib,jb,ik)*UNT(jb,jw,ik)*pf(ia1,ia2,ia3,ik)
01339 enddo
01340 enddo
01341 enddo
01342 else
01343 do ik=1,NTK
01344 do ib=1,Nb(ik)
01345 SUM_CMPX=SUM_CMPX+CONJG(UNT(ib,iw,ik))*SX(ib,ib,ik)*UNT(ib,jw,ik)*pf(ia1,ia2,ia3,ik)
01346 enddo
01347 enddo
01348 endif
01349 MAT_SX_R(iw,jw,ia1,ia2,ia3)=SUM_CMPX/DBLE(NTK)
01350 enddo
01351 enddo
01352 enddo
01353 enddo
01354 enddo
01355 deallocate(SX,pf)
01356 write(6,*)'finish MAT_SX_R'
01357
01358
01359
01360 write(6,*)
01361 write(6,*)'================'
01362 write(6,*)' MAT_SX_R in eV '
01363 write(6,*)'================'
01364 write(6,*)
01365 do ia1=-Na1,Na1
01366 do ia2=-Na2,Na2
01367 do ia3=-Na3,Na3
01368 write(6,*) ia1,ia2,ia3
01369 do iw=1,NWF
01370 write(6,'(300F15.8)')(dble(MAT_SX_R(iw,jw,ia1,ia2,ia3)*au),jw=1,NWF)
01371 enddo
01372 write(6,*)
01373 enddo
01374 enddo
01375 enddo
01376
01377 endif
01378
01379
01380
01381
01382
01383 if(myrank.eq.0)then
01384 ierr=CHDIR("./dir-gw")
01385 call system('pwd')
01386
01387
01388
01389 OPEN(154,FILE='./dat.energy_vs_sx')
01390 rewind(154)
01391 do ikir=1,Nk_irr
01392 ik=numMK(ikir)
01393 do jb=1,Nb(ik)
01394 en=(E_EIGI(jb+Ns(ik),ikir)-FermiEnergy)*au
01395 write(154,'(3F20.10)') en,SXirr(jb,jb,ikir)*au
01396 enddo
01397 enddo
01398 close(154)
01399
01400 deallocate(SXirr)
01401
01402
01403
01404 OPEN(155,FILE='./dat.sx_mat_r')
01405 rewind(155)
01406 write(155,'(a)')'#sx_mat_r'
01407 write(155,'(a)')'#1:R1, 2:R2, 3:R3 (lattice vector)'
01408 write(155,'(a)')'#1:i, 2:j, 3:Re(Sx_ij) [eV], 4:Im(Sx_ij) [eV]'
01409 do ia1=-Na1,Na1
01410 do ia2=-Na2,Na2
01411 do ia3=-Na3,Na3
01412 write(155,*) ia1,ia2,ia3
01413 do iw=1,NWF
01414 do jw=1,NWF
01415 write(155,'(i5,i5,2f20.10)') iw,jw,MAT_SX_R(iw,jw,ia1,ia2,ia3)*au
01416 enddo
01417 enddo
01418 write(155,*)
01419 enddo
01420 enddo
01421 enddo
01422 close(155)
01423 ierr=CHDIR("..")
01424 call system('pwd')
01425 endif
01426
01427
01428
01429
01430
01431 if(myrank.eq.0)then
01432
01433
01434
01435 write(6,*)'## Vxc calc start ##'
01436 write(6,*)
01437
01438
01439
01440
01441 OPEN(151,FILE='./dat.vxc',FORM='unformatted')
01442 REWIND(151)
01443 read(151) header
01444 read(151) aa,nsnd
01445 if(nsnd>1)then
01446 write(6,*)'nspin*ndens>1; the program not supported; then stop'
01447 stop
01448 endif
01449 read(151) nrx2,nry2,nrz2; write(6,*)'nrx2,nry2,nrz2=',nrx2,nry2,nrz2
01450 allocate(vxcr(nrx2,nry2,nrz2));vxcr(:,:,:)=0.0d0
01451 read(151) vxcr(:,:,:)
01452 close(151)
01453 write(6,*)'FINISH REDING VXCR'
01454
01455
01456
01457 nfft1=nrx2+1; nfft2=nry2+1; nfft3=nrz2+1; Nl123=nfft1*nfft2*nfft3
01458 call fft3_init(nrx2,nry2,nrz2,nfft1,nfft2,nfft3,fs)
01459 allocate(fftwk(Nl123*2),stat=err)
01460 allocate(wfunc(Nl123*2),stat=err)
01461
01462 allocate(VXCirr(Mb,Mb,Nk_irr));VXCirr(:,:,:)=0.0d0
01463 allocate(MAT_VXC(Mb,Mb));MAT_VXC=0.0d0
01464 do ikir=1,Nk_irr
01465 ik=numMK(ikir)
01466 MAT_VXC(:,:)=0.0d0
01467 call calc_MAT_VXC(Nk_irr,Mb,NTG,NGI(1),KGI(1,1,1),vxcr(1,1,1),CIR(1,1+Ns(ik),ikir),ikir,&
01468 nrx2,nry2,nrz2,nfft1,nfft2,Nl123,wfunc(1),fftwk(1),fs,MAT_VXC(1,1))
01469 VXCirr(:,:,ikir)=MAT_VXC(:,:)
01470 write(6,*)'ikir=',ikir
01471 enddo
01472 deallocate(MAT_VXC,vxcr)
01473
01474 allocate(VXC(Mb,Mb,NTK));VXC(:,:,:)=0.0d0
01475 do ik=1,NTK
01476
01477 ikir=numirr(ik)
01478
01479 if(trs(ik)==1)then
01480 VXC(:,:,ik)=VXCirr(:,:,ikir)
01481 elseif(trs(ik)==-1)then
01482 do ib=1,Nb(ik)
01483 do jb=1,Nb(ik)
01484 VXC(ib,jb,ik)=VXCirr(jb,ib,ikir)
01485 enddo
01486 enddo
01487 endif
01488 enddo
01489 write(6,*)'#finish make VXC'
01490
01491 allocate(pf(-Na1:Na1,-Na2:Na2,-Na3:Na3,NTK));pf=0.0d0
01492 do ik=1,NTK
01493 do ia3=-Na3,Na3
01494 do ia2=-Na2,Na2
01495 do ia1=-Na1,Na1
01496 phase=tpi*(SK0(1,ik)*dble(ia1)+SK0(2,ik)*dble(ia2)+SK0(3,ik)*dble(ia3))
01497 pf(ia1,ia2,ia3,ik)=exp(-ci*phase)
01498 enddo
01499 enddo
01500 enddo
01501 enddo
01502 write(6,*)'#finish make pf'
01503
01504 allocate(MAT_VXC_R(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3));MAT_VXC_R(:,:,:,:,:)=0.0d0
01505 do ia3=-Na3,Na3
01506 do ia2=-Na2,Na2
01507 do ia1=-Na1,Na1
01508 do iw=1,NWF
01509 do jw=1,NWF
01510 SUM_CMPX=0.0D0
01511 if(.true.)then
01512 do ik=1,NTK
01513 do ib=1,Nb(ik)
01514 do jb=1,Nb(ik)
01515 SUM_CMPX=SUM_CMPX+CONJG(UNT(ib,iw,ik))*VXC(ib,jb,ik)*UNT(jb,jw,ik)*pf(ia1,ia2,ia3,ik)
01516 enddo
01517 enddo
01518 enddo
01519 else
01520 do ik=1,NTK
01521 do ib=1,Nb(ik)
01522 SUM_CMPX=SUM_CMPX+CONJG(UNT(ib,iw,ik))*VXC(ib,ib,ik)*UNT(ib,jw,ik)*pf(ia1,ia2,ia3,ik)
01523 enddo
01524 enddo
01525 endif
01526 MAT_VXC_R(iw,jw,ia1,ia2,ia3)=SUM_CMPX/DBLE(NTK)
01527 enddo
01528 enddo
01529 enddo
01530 enddo
01531 enddo
01532 deallocate(VXC,pf)
01533
01534 write(6,*)
01535 write(6,*)'================='
01536 write(6,*)' MAT_VXC_R in eV '
01537 write(6,*)'================='
01538 write(6,*)
01539 do ia1=-Na1,Na1
01540 do ia2=-Na2,Na2
01541 do ia3=-Na3,Na3
01542 write(6,*) ia1,ia2,ia3
01543 do iw=1,NWF
01544 write(6,'(300F15.8)')(dble(MAT_VXC_R(iw,jw,ia1,ia2,ia3)*au),jw=1,NWF)
01545 enddo
01546 write(6,*)
01547 enddo
01548 enddo
01549 enddo
01550 write(6,*)'finish MAT_VXC_R'
01551
01552
01553
01554 endif
01555
01556
01557
01558
01559
01560 if(myrank.eq.0)then
01561 ierr=CHDIR("./dir-gw")
01562 call system('pwd')
01563
01564
01565
01566 OPEN(152,FILE='./dat.energy_vs_vxc')
01567 rewind(152)
01568 do ikir=1,Nk_irr
01569 ik=numMK(ikir)
01570 do jb=1,Nb(ik)
01571 en=(E_EIGI(jb+Ns(ik),ikir)-FermiEnergy)*au
01572 write(152,'(3f20.10)') en,VXCirr(jb,jb,ikir)*au
01573 enddo
01574 enddo
01575 close(152)
01576
01577 deallocate(VXCirr)
01578
01579
01580
01581 OPEN(153,FILE='./dat.vxc_mat_r')
01582 rewind(153)
01583 write(153,'(a)')'#vxc_mat_r'
01584 write(153,'(a)')'#1:R1, 2:R2, 3:R3 (lattice vector)'
01585 write(153,'(a)')'#1:i, 2:j, 3:Re(vxc_ij) [eV], 4:Im(vxc_ij) [eV]'
01586 do ia1=-Na1,Na1
01587 do ia2=-Na2,Na2
01588 do ia3=-Na3,Na3
01589 write(153,*) ia1,ia2,ia3
01590 do iw=1,NWF
01591 do jw=1,NWF
01592 write(153,'(i5,i5,2f20.10)') iw,jw,MAT_VXC_R(iw,jw,ia1,ia2,ia3)*au
01593 enddo
01594 enddo
01595 write(153,*)
01596 enddo
01597 enddo
01598 enddo
01599 close(153)
01600 ierr=CHDIR("..")
01601 call system('pwd')
01602 endif
01603
01604
01605
01606
01607
01608 if(myrank.eq.0)then
01609 write(6,'(a)')'## gw-dos calc start ##'
01610 allocate(ksdos(nsgm)); ksdos=0.0d0
01611 allocate(gwdos(nsgm)); gwdos=0.0d0
01612 allocate(gw_sigma_dos(nsgm)); gw_sigma_dos=0.0d0
01613
01614 call calc_ksdos(NWF,NTK,nsgm,Na1,Na2,Na3,nkb1,nkb2,nkb3,idlt,dmna,dmnr,FermiEnergy,a1(1),a2(1),a3(1),&
01615 b1(1),b2(1),b3(1),sgmw(1),SK0(1,1),H_MAT_R(1,1,-Na1,-Na2,-Na3),ksdos(1))
01616
01617 call calc_gwdos(NWF,NTK,nsgm,Na1,Na2,Na3,nkb1,nkb2,nkb3,idlt,dmna,dmnr,FermiEnergy,a1(1),a2(1),a3(1),&
01618 b1(1),b2(1),b3(1),sgmw(1),SK0(1,1),H_MAT_R(1,1,-Na1,-Na2,-Na3),MAT_VXC_R(1,1,-Na1,-Na2,-Na3),&
01619 MAT_SX_R(1,1,-Na1,-Na2,-Na3),MAT_SC_R(1,1,-Na1,-Na2,-Na3,1),shift_value,gwdos(1),gw_sigma_dos(1))
01620
01621 write(6,'(a)')'finish gw-dos calc'
01622 endif
01623
01624
01625
01626
01627
01628 if(myrank.eq.0)then
01629 ierr=CHDIR("./dir-gw")
01630 call system('pwd')
01631
01632
01633
01634 OPEN(159,FILE='./dat.gwdos')
01635 rewind(159)
01636 do ie=1,nsgm
01637 write(159,'(2f20.10)') sgmw(ie)*au,gwdos(ie)
01638 enddo
01639 close(159)
01640
01641
01642
01643 OPEN(160,FILE='./dat.ksdos')
01644 rewind(160)
01645 do ie=1,nsgm
01646 write(160,'(2f20.10)') sgmw(ie)*au,ksdos(ie)
01647 enddo
01648 close(160)
01649
01650
01651
01652 OPEN(170,FILE='./dat.gw_sigma_dos')
01653 rewind(170)
01654 do ie=1,nsgm
01655 write(170,'(3f20.10)') sgmw(ie)*au,gw_sigma_dos(ie)
01656 enddo
01657 close(170)
01658
01659 ierr=CHDIR("..")
01660 call system('pwd')
01661 endif
01662
01663
01664
01665
01666
01667 if(myrank.eq.0)then
01668 write(6,'(a)')'## gw-akw calc start ##'
01669 NSK_BAND_DISP=Ndiv*(N_sym_points-1)+1
01670 allocate(SK_BAND_DISP(3,NSK_BAND_DISP)); SK_BAND_DISP(:,:)=0.0d0
01671 call makekpts(Ndiv,N_sym_points,NSK_BAND_DISP,SK_sym_pts(1,1),SK_BAND_DISP(1,1))
01672
01673
01674
01675
01676 allocate(kdata(NSK_BAND_DISP)); kdata=0.0d0
01677 allocate(EKS(NWF,NSK_BAND_DISP)); EKS=0.0d0
01678 call calc_band_disp(Ndiv,N_sym_points,NTK,NSK_BAND_DISP,Na1,Na2,Na3,NWF,SK_BAND_DISP(1,1),&
01679 H_MAT_R(1,1,-Na1,-Na2,-Na3),nkb1,nkb2,nkb3,a1(1),a2(1),a3(1),b1(1),b2(1),b3(1),kdata,EKS(1,1))
01680
01681 allocate(gwakw(NSK_BAND_DISP,nsgm)); gwakw=0.0d0
01682 allocate(gw_sigma_kw(NSK_BAND_DISP,nsgm)); gw_sigma_kw=0.0d0
01683 call calc_gwakw(NWF,NTK,nsgm,Na1,Na2,Na3,nkb1,nkb2,nkb3,NSK_BAND_DISP,idlt,shift_value,&
01684 SK_BAND_DISP(1,1),a1(1),a2(1),a3(1),sgmw(1),H_MAT_R(1,1,-Na1,-Na2,-Na3),MAT_VXC_R(1,1,-Na1,-Na2,-Na3),&
01685 MAT_SX_R(1,1,-Na1,-Na2,-Na3),MAT_SC_R(1,1,-Na1,-Na2,-Na3,1),gwakw(1,1),gw_sigma_kw(1,1))
01686
01687 write(6,'(a)')'finish gw-akw calc'
01688 endif
01689
01690
01691
01692
01693
01694 if(myrank.eq.0)then
01695 ierr=CHDIR("./dir-gw")
01696 call system('pwd')
01697
01698
01699
01700 OPEN(114,FILE='./dat.iband')
01701 write(114,'(a)')'#Wannier interpolaed band'
01702 write(114,'(a)')'#1:k, 2:Energy [eV]'
01703 REVERSE=.TRUE.
01704 do ib=1,NWF
01705 if(REVERSE)then
01706 do ik=1,NSK_BAND_DISP
01707 write(114,'(2f20.10)') kdata(ik),EKS(ib,ik)*au
01708 enddo
01709 REVERSE=.FALSE.
01710 else
01711 do ik=NSK_BAND_DISP,1,-1
01712 write(114,'(2f20.10)') kdata(ik),EKS(ib,ik)*au
01713 enddo
01714 REVERSE=.TRUE.
01715 endif
01716 enddo
01717 close(114)
01718
01719
01720
01721 OPEN(161,FILE='./dat.gwakw')
01722 rewind(161)
01723 do ie=1,nsgm
01724 do ik=1,NSK_BAND_DISP
01725 if(gwakw(ik,ie)>=500.0d0) gwakw(ik,ie)=500.0d0
01726 write(161,'(3f20.10)') kdata(ik),sgmw(ie)*au,gwakw(ik,ie)
01727 enddo
01728 write(161,*)
01729 enddo
01730 close(161)
01731
01732
01733
01734 OPEN(171,FILE='./dat.gw_sigma_kw')
01735 rewind(171)
01736 do ie=1,nsgm
01737 do ik=1,NSK_BAND_DISP
01738 write(171,'(3f20.10)') kdata(ik),sgmw(ie)*au,gw_sigma_kw(ik,ie)
01739 enddo
01740 write(171,*)
01741 enddo
01742 close(171)
01743
01744 ierr=CHDIR("..")
01745 call system('pwd')
01746 endif
01747
01748
01749
01750
01751
01752 call MPI_BARRIER(comm,ierr)
01753 end_time=MPI_Wtime()
01754 diff_time=end_time-start_time
01755 if(myrank.eq.0) then
01756 call system('pwd')
01757 write(6,*)'#TOTAL TIME=',diff_time
01758 endif
01759
01760 call MPI_FINALIZE(ierr)
01761 STOP
01762 END