00001 PROGRAM MAIN
00002
00003 use m_rdinput
00004 use fft_3d
00005 include "config_w3d.h"
00006 call read_input
00007
00008
00009 OPEN(117,FILE='./dir-wfn/dat.bandcalc')
00010 rewind(117)
00011 read(117,*) Ecut_for_psi
00012 read(117,*) FermiEnergy
00013 read(117,*) Etot
00014 write(6,*)'Ecut_for_psi=',Ecut_for_psi
00015 write(6,*)'FermiEnergy=',FermiEnergy
00016 write(6,*)'Etot=',Etot
00017
00018
00019 OPEN(105,FILE='./dir-wfn/dat.lattice')
00020 REWIND(105)
00021 READ(105,*) a1(1),a1(2),a1(3)
00022 READ(105,*) a2(1),a2(2),a2(3)
00023 READ(105,*) a3(1),a3(2),a3(3)
00024 write(6,*)'FINISH REDING a1,a2,a3'
00025 CLOSE(105)
00026 call OUTER_PRODUCT(a2(1),a3(1),b1(1))
00027 VOLUME=a1(1)*b1(1)+a1(2)*b1(2)+a1(3)*b1(3)
00028 b1(:)=b1(:)*tpi/VOLUME
00029 call OUTER_PRODUCT(a3(1),a1(1),b2(1))
00030 b2(:)=b2(:)*tpi/VOLUME
00031 call OUTER_PRODUCT(a1(1),a2(1),b3(1))
00032 b3(:)=b3(:)*tpi/VOLUME
00033 write(6,*)
00034 write(6,*)'======================'
00035 write(6,*)'CHECK OF (A_VEC*B_VEC)'
00036 write(6,*)'======================'
00037 write(6,*)
00038 write(6,*)'a1*b1=',b1(1)*a1(1)+b1(2)*a1(2)+b1(3)*a1(3)
00039 write(6,*)'a2*b2=',b2(1)*a2(1)+b2(2)*a2(2)+b2(3)*a2(3)
00040 write(6,*)'a3*b3=',b3(1)*a3(1)+b3(2)*a3(2)+b3(3)*a3(3)
00041 write(6,*)'VOLUME OF UNIT CELL=',VOLUME
00042
00043
00044 OPEN(100,FILE='./dir-wfn/dat.symmetry')
00045 rewind(100)
00046 read(100,*) nsymq
00047 read(100,*) nnp
00048 allocate(rg(3,3,nsymq));rg=0
00049 allocate(pg(3,nsymq));pg=0
00050 allocate(rginv(3,3,nsymq));rginv(:,:,:)=0.0d0
00051 do iop=1,nsymq
00052 read(100,*)((rg(i,j,iop),i=1,3),j=1,3)
00053 read(100,*)(pg(i,iop),i=1,3)
00054 enddo
00055 CLOSE(100)
00056 rginv=rg
00057 do iop=1,nsymq
00058 call invmat(3,rginv(1,1,iop))
00059 enddo
00060 write(6,*)'finish rg'
00061
00062 do iop=1,nsymq
00063 write(6,*) iop
00064 do i=1,3
00065 write(6,'(3I5,1x,3F15.10)')
00066 + (rg(i,j,iop),j=1,3),(rginv(i,j,iop),j=1,3)
00067 enddo
00068 enddo
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 OPEN(101,FILE='./dir-wfn/dat.sample-k')
00083 rewind(101)
00084 read(101,*) Nk_irr
00085 allocate(SKI(3,Nk_irr));SKI(:,:)=0.0D0
00086 do ik=1,Nk_irr
00087 read(101,*)(SKI(i,IK),i=1,3)
00088 enddo
00089 close(101)
00090 write(6,*)'finish ski'
00091
00092
00093
00094
00095
00096
00097
00098 OPEN(132,FILE='./dir-wfn/dat.nkm')
00099 allocate(NGI(Nk_irr));NGI(:)=0
00100
00101 rewind(132)
00102 do ik=1,Nk_irr
00103 read(132,*) NGI(ik)
00104 enddo
00105 close(132)
00106 NTG=maxval(abs(NGI(:)))
00107
00108 write(6,'(a10,i10)')'NTG=',NTG
00109
00110
00111
00112 OPEN(104,FILE='./dir-wfn/dat.kg')
00113 rewind(104)
00114 allocate(KGI(3,NTG,Nk_irr));KGI(:,:,:)=0
00115 do ik=1,Nk_irr
00116 read(104,*) NG_for_psi
00117 NGI(IK)=NG_for_psi
00118 do ig=1,NG_for_psi
00119 read(104,*)(KGI(i,ig,ik),i=1,3)
00120 enddo
00121 enddo
00122 close(104)
00123 write(6,*)'finish kgi'
00124
00125 allocate(LKGI(NTG,Nk_irr));LKGI=0.0d0
00126 do ik=1,Nk_irr
00127 do ig=1,NGI(ik)
00128 ktmp(1)=(SKI(1,ik)+dble(KGI(1,ig,ik)))*b1(1)
00129 + +(SKI(2,ik)+dble(KGI(2,ig,ik)))*b2(1)
00130 + +(SKI(3,ik)+dble(KGI(3,ig,ik)))*b3(1)
00131
00132 ktmp(2)=(SKI(1,ik)+dble(KGI(1,ig,ik)))*b1(2)
00133 + +(SKI(2,ik)+dble(KGI(2,ig,ik)))*b2(2)
00134 + +(SKI(3,ik)+dble(KGI(3,ig,ik)))*b3(2)
00135
00136 ktmp(3)=(SKI(1,ik)+dble(KGI(1,ig,ik)))*b1(3)
00137 + +(SKI(2,ik)+dble(KGI(2,ig,ik)))*b2(3)
00138 + +(SKI(3,ik)+dble(KGI(3,ig,ik)))*b3(3)
00139 LKGI(ig,ik)=ktmp(1)**2+ktmp(2)**2+ktmp(3)**2
00140 enddo
00141 write(6,*) maxval(LKGI(:,ik))
00142 enddo
00143 write(6,*)
00144 write(6,*) maxval(LKGI(:,:))
00145 Ecut_for_psi=maxval(LKGI(:,:))+1.0d-8
00146 write(6,*)'Ecut_for_psi=',Ecut_for_psi
00147
00148 L1=maxval(abs(KGI(1,:,:)))+1;write(6,*)'L1=',L1
00149 L2=maxval(abs(KGI(2,:,:)))+1;write(6,*)'L2=',L2
00150 L3=maxval(abs(KGI(3,:,:)))+1;write(6,*)'L3=',L3
00151 allocate(packing(-L1:L1,-L2:L2,-L3:L3,Nk_irr))
00152 packing(:,:,:,:)=0
00153 do ik=1,Nk_irr
00154 do ig=1,NGI(ik)
00155 i1=KGI(1,ig,ik);j1=KGI(2,ig,ik);k1=KGI(3,ig,ik)
00156 packing(i1,j1,k1,ik)=ig
00157 enddo
00158 enddo
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169 htmp=dsqrt(dot_product(a1,a1))
00170 h1(:)=a1(:)/htmp
00171 htmp=dsqrt(dot_product(a2,a2))
00172 h2(:)=a2(:)/htmp
00173 htmp=dsqrt(dot_product(a3,a3))
00174 h3(:)=a3(:)/htmp
00175 d1=abs(dot_product(b1,h1))
00176 d2=abs(dot_product(b2,h2))
00177 d3=abs(dot_product(b3,h3))
00178 qwf=2.0d0*dsqrt(Ecut_for_psi)
00179
00180
00181
00182
00183
00184 nwx2=algn235(int(qwf/d1)+1)
00185 nwy2=algn235(int(qwf/d2)+1)
00186 nwz2=algn235(int(qwf/d3)+1)
00187
00188 nfft1=nwx2+1
00189 nfft2=nwy2+1
00190 nfft3=nwz2+1
00191 Nl123=nfft1*nfft2*nfft3
00192 write(6,*)'nwx2=',nwx2
00193 write(6,*)'nwy2=',nwy2
00194 write(6,*)'nwz2=',nwz2
00195 write(6,*)'nfft1=',nfft1
00196 write(6,*)'nfft2=',nfft2
00197 write(6,*)'nfft3=',nfft3
00198 write(6,*)'NL123=',Nl123
00199 call fft3_init(nwx2,nwy2,nwz2,nfft1,nfft2,nfft3,fs)
00200
00201
00202 call est_NTK(Nk_irr,Nsymq,SKI(1,1),rg(1,1,1),NTK)
00203 write(6,*)'Estimated NTK=',NTK
00204
00205
00206 allocate(SK0(3,NTK));SK0(:,:)=0.0d0
00207 allocate(numirr(NTK));numirr(:)=0
00208 allocate(numrot(NTK));numrot(:)=0
00209 allocate(trs(NTK));trs(:)=0
00210 allocate(RW(3,NTK));RW(:,:)=0
00211
00212
00213
00214
00215
00216
00217
00218 jk=0
00219 do ik=1,Nk_irr
00220 do iop=1,Nsymq
00221
00222 ktmp(:)=0.0d0;RWtmp(:)=0
00223 ktmp(1)=rg(1,1,iop)*SKI(1,ik)
00224 + +rg(1,2,iop)*SKI(2,ik)
00225 + +rg(1,3,iop)*SKI(3,ik)
00226 ktmp(2)=rg(2,1,iop)*SKI(1,ik)
00227 + +rg(2,2,iop)*SKI(2,ik)
00228 + +rg(2,3,iop)*SKI(3,ik)
00229 ktmp(3)=rg(3,1,iop)*SKI(1,ik)
00230 + +rg(3,2,iop)*SKI(2,ik)
00231 + +rg(3,3,iop)*SKI(3,ik)
00232 call kcheck(ktmp(1),RWtmp(1))
00233 do iik=1,jk
00234 if(abs(SK0(1,iik)-ktmp(1))<1.0d-4.and.
00235 + abs(SK0(2,iik)-ktmp(2))<1.0d-4.and.
00236 + abs(SK0(3,iik)-ktmp(3))<1.0d-4)goto 1000
00237 enddo
00238 jk=jk+1
00239 SK0(:,jk)=ktmp(:)
00240 numirr(jk)=ik;numrot(jk)=iop;trs(jk)=1;RW(:,jk)=RWtmp(:)
00241
00242 1000 ktmp(:)=0.0d0;RWtmp(:)=0
00243 ktmp(1)=rg(1,1,iop)*SKI(1,ik)
00244 + +rg(1,2,iop)*SKI(2,ik)
00245 + +rg(1,3,iop)*SKI(3,ik)
00246 ktmp(2)=rg(2,1,iop)*SKI(1,ik)
00247 + +rg(2,2,iop)*SKI(2,ik)
00248 + +rg(2,3,iop)*SKI(3,ik)
00249 ktmp(3)=rg(3,1,iop)*SKI(1,ik)
00250 + +rg(3,2,iop)*SKI(2,ik)
00251 + +rg(3,3,iop)*SKI(3,ik)
00252 call kcheck_trs(ktmp(1),RWtmp(1))
00253 do iik=1,jk
00254 if(abs(SK0(1,iik)-(-ktmp(1)))<1.0d-4.and.
00255 + abs(SK0(2,iik)-(-ktmp(2)))<1.0d-4.and.
00256 + abs(SK0(3,iik)-(-ktmp(3)))<1.0d-4)goto 2000
00257 enddo
00258 jk=jk+1
00259 SK0(:,jk)=-ktmp(:)
00260 numirr(jk)=ik;numrot(jk)=iop;trs(jk)=-1;RW(:,jk)=RWtmp(:)
00261 2000 enddo
00262 enddo
00263
00264 if(NTK/=jk)then
00265 write(6,*)'ERROR;STOP;NTK should be jk'
00266 write(6,*)'NTK=',NTK,'jk=',jk;STOP
00267 endif
00268
00269 write(6,*)
00270 write(6,*)'====='
00271 write(6,*)' SK0 '
00272 write(6,*)'====='
00273 write(6,*)
00274 do ik=1,NTK
00275 write(6,'(I5,3F12.5)') ik,SK0(:,ik)
00276 enddo
00277
00278 call est_nkbi(NTK,SK0(1,1),nkb1,nkb2,nkb3)
00279 write(6,*)
00280 write(6,'(a24,4i10)')'nkb1,nkb2,nkb3,NTK=',nkb1,nkb2,nkb3,NTK
00281 Na1=nkb1/2;Na2=nkb2/2;Na3=nkb3/2
00282 write(6,'(a24,3i10)')'Na1,Na2,Na3=',Na1,Na2,Na3
00283
00284
00285 allocate(KGtmp(3,NTG));KGtmp(:,:)=0
00286 allocate(KG0(3,NTG,NTK));KG0(:,:,:)=0
00287 allocate(NG0(NTK));NG0(:)=0
00288
00289
00290
00291
00292
00293
00294 do jk=1,NTK
00295 if(trs(jk)==1)then
00296 ik=numirr(jk);iop=numrot(jk)
00297 ktmp(1)=rg(1,1,iop)*SKI(1,ik)
00298 + +rg(1,2,iop)*SKI(2,ik)
00299 + +rg(1,3,iop)*SKI(3,ik)+dble(RW(1,jk))
00300 ktmp(2)=rg(2,1,iop)*SKI(1,ik)
00301 + +rg(2,2,iop)*SKI(2,ik)
00302 + +rg(2,3,iop)*SKI(3,ik)+dble(RW(2,jk))
00303 ktmp(3)=rg(3,1,iop)*SKI(1,ik)
00304 + +rg(3,2,iop)*SKI(2,ik)
00305 + +rg(3,3,iop)*SKI(3,ik)+dble(RW(3,jk))
00306 call make_KG0(NTG,b1(1),b2(1),b3(1),Ecut_for_psi,
00307 + ktmp(1),ktmp(2),ktmp(3),KG0(1,1,jk),NG_for_psi)
00308 if(NG_for_psi/=NGI(ik))then
00309 write(6,*)'ERROR;STOP;NG_for_psi should be NGI(ik)'
00310 write(6,*)'NG_for_psi=',NG_for_psi,'NGI(ik)=',NGI(ik);STOP
00311 endif
00312 NG0(jk)=NG_for_psi
00313 elseif(trs(jk)==-1)then
00314 ik=numirr(jk); iop=numrot(jk)
00315 ktmp(1)=rg(1,1,iop)*SKI(1,ik)
00316 + +rg(1,2,iop)*SKI(2,ik)
00317 + +rg(1,3,iop)*SKI(3,ik)+dble(RW(1,jk))
00318 ktmp(2)=rg(2,1,iop)*SKI(1,ik)
00319 + +rg(2,2,iop)*SKI(2,ik)
00320 + +rg(2,3,iop)*SKI(3,ik)+dble(RW(2,jk))
00321 ktmp(3)=rg(3,1,iop)*SKI(1,ik)
00322 + +rg(3,2,iop)*SKI(2,ik)
00323 + +rg(3,3,iop)*SKI(3,ik)+dble(RW(3,jk))
00324 KGtmp(:,:)=0
00325 call make_KG0(NTG,b1(1),b2(1),b3(1),Ecut_for_psi,
00326 + ktmp(1),ktmp(2),ktmp(3),KGtmp(1,1),NG_for_psi)
00327 if(NG_for_psi/=NGI(ik))then
00328 write(6,*)'ERROR;STOP;NG_for_psi should be NGI(ik)'
00329 write(6,*)'NG_for_psi=',NG_for_psi,'NGI(ik)=',NGI(ik);STOP
00330 endif
00331 NG0(jk)=NG_for_psi
00332 KG0(:,:,jk)=-KGtmp(:,:)
00333 endif
00334 enddo
00335
00336 write(6,*)
00337 write(6,*)'====='
00338 write(6,*)' NG0 '
00339 write(6,*)'====='
00340 write(6,*)
00341 do ik=1,NTK
00342 write(6,'(1I10)') NG0(ik)
00343 enddo
00344
00345
00346 OPEN(113,FILE='./dir-wan/dat.wan',FORM='unformatted')
00347 REWIND(113)
00348 read(113) NWF
00349 allocate(C0(NTG,NWF,NTK));C0(:,:,:)=0.0D0
00350 do ik=1,NTK
00351 read(113)((C0(ig,iw,ik),ig=1,NG0(ik)),iw=1,NWF)
00352
00353
00354
00355
00356
00357
00358 enddo
00359 write(6,*)'FINISH REDING C0'
00360 CLOSE(113)
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375 OPEN(134,FILE='./dir-wan/dat.wan-center')
00376 allocate(coord(3,NWF));coord(:,:)=0.0d0
00377 rewind(134)
00378 read(134,'(a)') dum_char
00379 read(134,'(a)') dum_char
00380 do iw=1,NWF
00381 read(134,*)(coord(i,iw),i=1,3)
00382 enddo
00383
00384
00385
00386
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 OPEN(300,FILE='./dir-eps/dat.chi_cutoff')
00412 read(300,*) Ecut_for_eps
00413
00414
00415 OPEN(135,FILE='./dir-eps/dat.wgrid')
00416 rewind(135)
00417 read(135,*) Num_freq_grid
00418 ne=Num_freq_grid
00419 allocate(em(ne));em(:)=0.0d0
00420 do ie=1,ne
00421
00422 read(135,'(2f15.10)') em(ie)
00423 enddo
00424
00425
00426
00427 Nq_irr=Nk_irr
00428 allocate(SQI(3,Nq_irr));SQI(:,:)=0.0D0
00429 ierr=CHDIR("./dir-eps")
00430 do iq=1,Nq_irr
00431 write(dirname,"('q',i3.3)")iq
00432 ierr=CHDIR(dirname)
00433 inquire(file='dat.log.400',exist=file_e)
00434 if(file_e)then
00435 write(6,*)'dat.log.400 exists in ',trim(dirname)
00436 else
00437 write(6,*)'error: no dat.log.400 in ',trim(dirname)
00438 endif
00439 OPEN(301,FILE='dat.sq')
00440 rewind(301)
00441 inquire(file='dat.sq',exist=file_e)
00442 if(file_e)then
00443 read(301,*)(SQI(i,iq),i=1,3)
00444 else
00445 write(6,*)'error: no dat.sq in',trim(dirname)
00446 endif
00447 close(301)
00448 ierr=CHDIR("..")
00449 enddo
00450 ierr=CHDIR("..")
00451 call system('pwd')
00452
00453
00454 NTQ=NTK
00455 allocate(SQ(3,NTQ));SQ(:,:)=0.0d0
00456 allocate(numirrq(NTQ));numirrq(:)=0
00457 allocate(numrotq(NTQ));numrotq(:)=0
00458 allocate(trsq(NTQ));trsq(:)=0
00459 allocate(RWq(3,NTQ));RWq(:,:)=0
00460
00461 do iq=1,Nq_irr
00462 SQ(:,iq)=SQI(:,iq)
00463 numirrq(iq)=iq;numrotq(iq)=1;trsq(iq)=1;RWq(1:3,iq)=0
00464 enddo
00465 jk=Nq_irr
00466 do iq=1,Nq_irr
00467 do iop=1,Nsymq
00468
00469 ktmp(:)=0.0d0;RWtmp(:)=0
00470 ktmp(1)=rg(1,1,iop)*SQI(1,iq)
00471 + +rg(1,2,iop)*SQI(2,iq)
00472 + +rg(1,3,iop)*SQI(3,iq)
00473 ktmp(2)=rg(2,1,iop)*SQI(1,iq)
00474 + +rg(2,2,iop)*SQI(2,iq)
00475 + +rg(2,3,iop)*SQI(3,iq)
00476 ktmp(3)=rg(3,1,iop)*SQI(1,iq)
00477 + +rg(3,2,iop)*SQI(2,iq)
00478 + +rg(3,3,iop)*SQI(3,iq)
00479 call kcheck(ktmp(1),RWtmp(1))
00480 do iik=1,jk
00481 if(abs(SQ(1,iik)-ktmp(1))<1.0d-4.and.
00482 + abs(SQ(2,iik)-ktmp(2))<1.0d-4.and.
00483 + abs(SQ(3,iik)-ktmp(3))<1.0d-4)goto 1100
00484 enddo
00485 jk=jk+1
00486 SQ(:,jk)=ktmp(:)
00487 numirrq(jk)=iq;numrotq(jk)=iop;trsq(jk)=1;RWq(:,jk)=RWtmp(:)
00488
00489 1100 ktmp(:)=0.0d0;RWtmp(:)=0
00490 ktmp(1)=rg(1,1,iop)*SQI(1,iq)
00491 + +rg(1,2,iop)*SQI(2,iq)
00492 + +rg(1,3,iop)*SQI(3,iq)
00493 ktmp(2)=rg(2,1,iop)*SQI(1,iq)
00494 + +rg(2,2,iop)*SQI(2,iq)
00495 + +rg(2,3,iop)*SQI(3,iq)
00496 ktmp(3)=rg(3,1,iop)*SQI(1,iq)
00497 + +rg(3,2,iop)*SQI(2,iq)
00498 + +rg(3,3,iop)*SQI(3,iq)
00499 call kcheck_trs(ktmp(1),RWtmp(1))
00500 do iik=1,jk
00501 if(abs(SQ(1,iik)-(-ktmp(1)))<1.0d-4.and.
00502 + abs(SQ(2,iik)-(-ktmp(2)))<1.0d-4.and.
00503 + abs(SQ(3,iik)-(-ktmp(3)))<1.0d-4)goto 2100
00504 enddo
00505 jk=jk+1
00506 SQ(:,jk)=-ktmp(:)
00507 numirrq(jk)=iq;numrotq(jk)=iop;trsq(jk)=-1;RWq(:,jk)=RWtmp(:)
00508 2100 enddo
00509 enddo
00510
00511 if(NTQ/=jk)then
00512 write(6,*)'ERROR;STOP;NTQ should be jk'
00513 write(6,*)'NTQ=',NTQ,'jk=',jk;STOP
00514 endif
00515
00516 write(6,*)
00517 write(6,*)'============'
00518 write(6,*)' SQ and SK0 '
00519 write(6,*)'============'
00520 write(6,*)
00521 do iq=1,NTQ
00522 ik=iq
00523 write(6,'(I5,3F10.5,2x,3F10.5)') iq,SQ(:,iq),SK0(:,ik)
00524 enddo
00525 write(6,*)
00526
00527
00528
00529
00530
00531
00532
00533
00534 allocate(LG0(3,NTG,NTQ));LG0(:,:,:)=0
00535 allocate(NGQ_eps(NTQ));NGQ_eps(:)=0
00536 allocate(NGQ_psi(NTQ));NGQ_psi(:)=0
00537
00538 do iq=1,Nq_irr
00539 q1=SQI(1,iq);q2=SQI(2,iq);q3=SQI(3,iq)
00540 call make_LG0(NTG,b1(1),b2(1),b3(1),Ecut_for_eps,
00541 + Ecut_for_psi,q1,q2,q3,LG0(1,1,iq),NG_for_eps,NG_for_psi)
00542 NGQ_eps(iq)=NG_for_eps;NGQ_psi(iq)=NG_for_psi
00543 write(6,'(i8,3f10.5,a8,i8,a8,i10)')
00544 + iq,q1,q2,q3,'NGeps',NG_for_eps,'NGpsi',NG_for_psi
00545 enddo
00546 do iq=Nq_irr+1,NTQ
00547 if(trsq(iq)==1)then
00548 iqir=numirrq(iq);iop=numrotq(iq)
00549 q1=rg(1,1,iop)*SQI(1,iqir)
00550 + +rg(1,2,iop)*SQI(2,iqir)
00551 + +rg(1,3,iop)*SQI(3,iqir)+dble(RWq(1,iq))
00552 q2=rg(2,1,iop)*SQI(1,iqir)
00553 + +rg(2,2,iop)*SQI(2,iqir)
00554 + +rg(2,3,iop)*SQI(3,iqir)+dble(RWq(2,iq))
00555 q3=rg(3,1,iop)*SQI(1,iqir)
00556 + +rg(3,2,iop)*SQI(2,iqir)
00557 + +rg(3,3,iop)*SQI(3,iqir)+dble(RWq(3,iq))
00558 call make_LG0(NTG,b1(1),b2(1),b3(1),Ecut_for_eps,
00559 + Ecut_for_psi,q1,q2,q3,LG0(1,1,iq),NG_for_eps,NG_for_psi)
00560 NGQ_eps(iq)=NG_for_eps;NGQ_psi(iq)=NG_for_psi
00561 write(6,'(i8,3f10.5,a8,i8,a8,i10)')
00562 + iq,q1,q2,q3,'NGeps',NG_for_eps,'NGpsi',NG_for_psi
00563 elseif(trsq(iq)==-1)then
00564 iqir=numirrq(iq);iop=numrotq(iq)
00565 q1=rg(1,1,iop)*SQI(1,iqir)
00566 + +rg(1,2,iop)*SQI(2,iqir)
00567 + +rg(1,3,iop)*SQI(3,iqir)+dble(RWq(1,iq))
00568 q2=rg(2,1,iop)*SQI(1,iqir)
00569 + +rg(2,2,iop)*SQI(2,iqir)
00570 + +rg(2,3,iop)*SQI(3,iqir)+dble(RWq(2,iq))
00571 q3=rg(3,1,iop)*SQI(1,iqir)
00572 + +rg(3,2,iop)*SQI(2,iqir)
00573 + +rg(3,3,iop)*SQI(3,iqir)+dble(RWq(3,iq))
00574 KGtmp(:,:)=0
00575 call make_LG0(NTG,b1(1),b2(1),b3(1),Ecut_for_eps,
00576 + Ecut_for_psi,q1,q2,q3,KGtmp(1,1),NG_for_eps,NG_for_psi)
00577 NGQ_eps(iq)=NG_for_eps;NGQ_psi(iq)=NG_for_psi
00578 write(6,'(i8,3f10.5,a8,i8,a8,i10)')
00579 + iq,q1,q2,q3,'NGeps',NG_for_eps,'NGpsi',NG_for_psi
00580 LG0(:,:,iq)=-KGtmp(:,:)
00581 endif
00582 enddo
00583
00584 Lq1=maxval(abs(LG0(1,:,:)))+1;write(6,*)'Lq1=',Lq1
00585 Lq2=maxval(abs(LG0(2,:,:)))+1;write(6,*)'Lq2=',Lq2
00586 Lq3=maxval(abs(LG0(3,:,:)))+1;write(6,*)'Lq3=',Lq3
00587 allocate(packingq(-Lq1:Lq1,-Lq2:Lq2,-Lq3:Lq3,Nq_irr))
00588 packingq(:,:,:,:)=0
00589 do iq=1,Nq_irr
00590 do ig=1,NGQ_eps(iq)
00591 i1=LG0(1,ig,iq);j1=LG0(2,ig,iq);k1=LG0(3,ig,iq)
00592 packingq(i1,j1,k1,iq)=ig
00593 write(6,'(a,5i10)')'iq,ig,i1,j1,k1',iq,ig,i1,j1,k1
00594 enddo
00595 enddo
00596
00597 write(6,*)
00598 do iq=1,NTQ
00599 write(6,'(i5,3f15.10,6i5)')iq,(SQ(i1,iq),i1=1,3),
00600 + numirrq(iq),numrotq(iq),trsq(iq),(RWq(j1,iq),j1=1,3)
00601 enddo
00602
00603 NTGQ=maxval(NGQ_eps(:))
00604 write(6,*)'NTGQ=',NTGQ
00605
00606
00607 allocate(epstmp(NTGQ,NTGQ,ne));epstmp(:,:,:)=0.0D0
00608 allocate(epstmpgm(NTGQ,NTGQ,ne,3));epstmpgm(:,:,:,:)=0.0D0
00609 allocate(epsirr(NTGQ,NTGQ,ne,Nq_irr));epsirr(:,:,:,:)=0.0D0
00610
00611 ierr=CHDIR("./dir-eps")
00612 call system('pwd')
00613 do iq=1,Nq_irr
00614 if(abs(SKI(1,iq))<1.0d-5.and.abs(SKI(2,iq))<1.0d-5.and.
00615 + abs(SKI(3,iq))<1.0d-5)then
00616 write(dirname,"('q',i3.3)")iq
00617 iqgm=iq
00618 ierr=CHDIR(dirname)
00619 do ix=1,3
00620 file_num=600+(ix-1)
00621 write(filename,'("dat.epsqw.",i3.3)')file_num
00622 open(file_num,file=filename,form='unformatted')
00623 write(6,'(a10,a15,a5,a10)')
00624 + 'read: ',trim(filename),'in ',trim(dirname)
00625 rewind(file_num)
00626 NG_for_eps=NGQ_eps(iq)
00627 read(file_num)(((epstmpgm(ig,jg,ie,ix),ig=1,NG_for_eps)
00628 + ,jg=1,NG_for_eps),ie=1,ne)
00629 enddo
00630 epsirr(:,:,:,iq)
00631 + =(epstmpgm(:,:,:,1)+epstmpgm(:,:,:,2)+epstmpgm(:,:,:,3))/3.0d0
00632 else
00633 write(dirname,"('q',i3.3)")iq
00634 ierr=CHDIR(dirname)
00635 file_num=600
00636 write(filename,'("dat.epsqw.",i3.3)')file_num
00637 open(file_num,file=filename,form='unformatted')
00638 write(6,'(a10,a15,a5,a10)')
00639 + 'read: ',trim(filename),'in ',trim(dirname)
00640 rewind(file_num)
00641 NG_for_eps=NGQ_eps(iq)
00642 read(file_num)(((epstmp(ig,jg,ie),ig=1,NG_for_eps)
00643 + ,jg=1,NG_for_eps),ie=1,ne)
00644 epsirr(:,:,:,iq)=epstmp(:,:,:)
00645 endif
00646 ierr=CHDIR("..")
00647 enddo
00648 ierr=CHDIR("..")
00649 call system('pwd')
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659 WRITE(6,*)
00660 WRITE(6,*)'====================================='
00661 WRITE(6,*)'=== INTERACTION CALCULATION START ==='
00662 WRITE(6,*)'====================================='
00663 WRITE(6,*)
00664
00665
00666 allocate(rho(NTG,NWF,NTQ));rho(:,:,:)=0.0D0
00667 do iq=1,NTQ
00668 q1=SQ(1,iq);q2=SQ(2,iq);q3=SQ(3,iq)
00669 if(q1.ne.0.0d0.or.q2.ne.0.0d0.or.q3.ne.0.0d0) then
00670 NG_for_eps=NGQ_eps(iq)
00671 NG_for_psi=NGQ_psi(iq)
00672 allocate(length_qg(NG_for_psi));length_qg(:)=0.0D0
00673 do igL=1,NG_for_psi
00674 igL1=LG0(1,igL,iq)
00675 igL2=LG0(2,igL,iq)
00676 igL3=LG0(3,igL,iq)
00677 qgL(:)=(q1+dble(igL1))*b1(:)
00678 + +(q2+dble(igL2))*b2(:)
00679 + +(q3+dble(igL3))*b3(:)
00680 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
00681 qgL1=dsqrt(qgL2)
00682 length_qg(igL)=qgL1
00683 enddo
00684
00685
00686 allocate(prho(NTG,NWF));prho(:,:)=0.0D0
00687 allocate(fftwk(Nl123*2));fftwk(:)=0.0d0
00688 allocate(wfunc(Nl123*2));wfunc(:)=0.0d0
00689 allocate(rho_tmp(NG_for_psi));rho_tmp(:)=0.0D0
00690 allocate(C0_K(NTG));C0_K(:)=0.0d0
00691 allocate(C0_KQ(NTG));C0_KQ(:)=0.0d0
00692
00693 do ik=1,NTK
00694 do iw=1,NWF
00695 shift_G(:)=0
00696 call search_kq(NTK,SK0(1,1),q1,q2,q3,ik,ikq,shift_G(1))
00697 C0_K(:)=C0(:,iw,ik)
00698 C0_KQ(:)=C0(:,iw,ikq)
00699 rho_tmp(:)=0.0D0
00700 call calc_InterStateMatrix(NTK,NTG,NG0(1),KG0(1,1,1),
00701 + C0_K(1),C0_KQ(1),ik,ikq,nwx2,nwy2,nwz2,
00702 + nfft1,nfft2,Nl123,wfunc(1),fftwk(1),fs,
00703 + LG0(1,1,iq),NG_for_psi,shift_G(1),rho_tmp(1))
00704 do igL=1,NG_for_psi
00705 prho(igL,iw)=prho(igL,iw)+rho_tmp(igL)
00706 enddo
00707 enddo
00708 enddo
00709
00710
00711 rho(:,:,iq)=rho(:,:,iq)+prho(:,:)
00712
00713 deallocate(prho,fftwk,wfunc,rho_tmp,C0_K,C0_KQ)
00714
00715 do iw=1,NWF
00716 do igL=1,NG_for_psi
00717 rho(igL,iw,iq)=rho(igL,iw,iq)/length_qg(igL)
00718 enddo
00719 enddo
00720 deallocate(length_qg)
00721 write(6,'(a10,x,2i5)')'FINISH iq',iq
00722
00723
00724 elseif(q1==0.0d0.and.q2==0.0d0.and.q3==0.0d0)then
00725 write(6,'(a,x,3f10.5)')'q1,q2,q3',q1,q2,q3
00726 NG_for_eps=NGQ_eps(iq);NG_for_psi=NGQ_psi(iq)
00727 allocate(length_qg(NG_for_psi));length_qg(:)=0.0d0
00728 do igL=1,NG_for_psi
00729 igL1=LG0(1,igL,iq)
00730 igL2=LG0(2,igL,iq)
00731 igL3=LG0(3,igL,iq)
00732 if(igL1==0.and.igL2==0.and.igL3==0)then
00733 NoG0=igL
00734 else
00735 qgL(:)=(q1+dble(igL1))*b1(:)
00736 + +(q2+dble(igL2))*b2(:)
00737 + +(q3+dble(igL3))*b3(:)
00738 qgL2=qgL(1)**2+qgL(2)**2+qgL(3)**2
00739 qgL1=dsqrt(qgL2)
00740 length_qg(igL)=qgL1
00741 endif
00742 enddo
00743
00744
00745 allocate(prho(NTG,NWF));prho(:,:)=0.0D0
00746 allocate(fftwk(Nl123*2));fftwk(:)=0.0d0
00747 allocate(wfunc(Nl123*2));wfunc(:)=0.0d0
00748 allocate(rho_tmp(NG_for_psi));rho_tmp(:)=0.0D0
00749 allocate(C0_K(NTG));C0_K(:)=0.0d0
00750 allocate(C0_KQ(NTG));C0_KQ(:)=0.0d0
00751
00752 do ik=1,NTK
00753 do iw=1,NWF
00754 ikq=ik
00755 shift_G(:)=0
00756 C0_K(:)=C0(:,iw,ik)
00757 C0_KQ(:)=C0(:,iw,ikq)
00758 rho_tmp(:)=0.0D0
00759 call calc_InterStateMatrix(NTK,NTG,NG0(1),KG0(1,1,1),
00760 + C0_K(1),C0_KQ(1),ik,ikq,nwx2,nwy2,nwz2,
00761 + nfft1,nfft2,Nl123,wfunc(1),fftwk(1),fs,
00762 + LG0(1,1,iq),NG_for_psi,shift_G(1),rho_tmp(1))
00763 rho_tmp(NoG0)=0.0d0
00764 do igL=1,NG_for_psi
00765 prho(igL,iw)=prho(igL,iw)+rho_tmp(igL)
00766 enddo
00767 enddo
00768 enddo
00769
00770
00771 rho(:,:,iq)=rho(:,:,iq)+prho(:,:)
00772
00773 deallocate(prho,fftwk,wfunc,rho_tmp,C0_K,C0_KQ)
00774
00775 do iw=1,NWF
00776 do igL=1,NG_for_psi
00777 if(igL/=NoG0)then
00778 rho(igL,iw,iq)=rho(igL,iw,iq)/length_qg(igL)
00779 endif
00780 enddo
00781 enddo
00782 deallocate(length_qg)
00783 write(6,'(a10,x,2i5)')'FINISH iq',iq
00784 endif
00785 enddo
00786 rho(:,:,:)=rho(:,:,:)/dble(NTK)
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801 write(6,*)'HybertsenLouie'
00802 write(6,*)'NoG0=',NoG0
00803 write(6,*)'iqgm=',iqgm
00804 qsz=(6.0D0*(pi**2)/dble(NTQ)/dble(VOLUME))**(1.0D0/3.0D0)
00805 write(6,*)'qsz=',qsz
00806 write(6,*)'2*qsz/pi=',(2.0d0/pi)*qsz
00807 chead=(2.0D0/pi)*qsz
00808 write(6,*)'chead(HL) in eV=',chead*au
00809 allocate(cheadw(ne));cheadw(:)=0.0d0
00810 do iw=1,ne
00811 cheadw(iw)=(2.0D0/pi)*epsirr(NoG0,NoG0,iw,iqgm)*qsz
00812 write(6,*)'cheadw(HL) in eV=',cheadw(iw)*au
00813 write(6,*)'1/eps=',epsirr(NoG0,NoG0,iw,Nq_irr)
00814 enddo
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852 allocate(func(NWF,NWF,NTQ));func(:,:,:)=0.0D0
00853 do iq=1,NTQ
00854 do iw=1,NWF
00855 do jw=1,NWF
00856 SUM_CMPX=0.0D0
00857 do igL=1,NGQ_psi(iq)
00858 SUM_CMPX
00859 + =SUM_CMPX
00860 + +rho(igL,iw,iq)
00861 + *CONJG(rho(igL,jw,iq))
00862 enddo
00863 func(iw,jw,iq)=SUM_CMPX
00864 enddo
00865 enddo
00866 write(6,'(a,x,i5)')'FINISH iq',iq
00867 enddo
00868 allocate(funcw(NWF,NWF,ne,NTQ));funcw(:,:,:,:)=0.0D0
00869 do iq=1,NTQ
00870 allocate(epsmk(NTGQ,NTGQ,ne))
00871 allocate(packtmp(-Lq1:Lq1,-Lq2:Lq2,-Lq3:Lq3))
00872 epsmk(:,:,:)=0.0d0
00873 iqir=numirrq(iq)
00874 iop=numrotq(iq)
00875 packtmp(:,:,:)=packingq(:,:,:,iqir)
00876 call make_eps(NTG,NTGQ,ne,trsq(iq),NGQ_eps(iq),LG0(1,1,iq),
00877 + RWq(1,iq),rginv(1,1,iop),pg(1,iop),nnp,Lq1,Lq2,Lq3,
00878 + packtmp(-Lq1,-Lq2,-Lq3),epsirr(1,1,1,iqir),epsmk(1,1,1))
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904 do ie=1,ne
00905 do iw=1,NWF
00906 do jw=1,NWF
00907 SUM_CMPX=0.0D0
00908 do igL=1,NGQ_eps(iq)
00909 do jgL=1,NGQ_eps(iq)
00910 SUM_CMPX
00911 + =SUM_CMPX
00912 + +rho(igL,iw,iq)
00913 + *epsmk(igL,jgL,ie)
00914 + *CONJG(rho(jgL,jw,iq))
00915 enddo
00916 enddo
00917 do igL=NGQ_eps(iq)+1,NGQ_psi(iq)
00918 SUM_CMPX
00919 + =SUM_CMPX
00920 + +rho(igL,iw,iq)
00921 + *CONJG(rho(igL,jw,iq))
00922 enddo
00923 funcw(iw,jw,ie,iq)=SUM_CMPX
00924 enddo
00925 enddo
00926 enddo
00927
00928
00929 deallocate(epsmk,packtmp)
00930 write(6,'(a,x,i5)')'FINISH iq',iq
00931 enddo
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961 allocate(V_MAT(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3))
00962 V_MAT(:,:,:,:,:)=0.0D0
00963 do ia1=-Na1,Na1
00964 do ia2=-Na2,Na2
00965 do ia3=-Na3,Na3
00966 do iw=1,NWF
00967 do jw=1,NWF
00968 SUM_CMPX=0.0D0
00969 do iq=1,NTQ
00970 q1=SQ(1,iq);q2=SQ(2,iq);q3=SQ(3,iq)
00971 phase=tpi*(q1*dble(ia1)+q2*dble(ia2)+q3*dble(ia3))
00972 pf=exp(-ci*phase)
00973 SUM_CMPX=SUM_CMPX+func(iw,jw,iq)*pf
00974 enddo
00975 V_MAT(iw,jw,ia1,ia2,ia3)
00976 + =2.0D0*tpi*SUM_CMPX/VOLUME/DBLE(NTQ)+chead
00977 enddo
00978 enddo
00979 enddo
00980 enddo
00981 enddo
00982 allocate(W_MAT(NWF,NWF,-Na1:Na1,-Na2:Na2,-Na3:Na3,ne))
00983 W_MAT(:,:,:,:,:,:)=0.0D0
00984 do ie=1,ne
00985 do ia1=-Na1,Na1
00986 do ia2=-Na2,Na2
00987 do ia3=-Na3,Na3
00988 do iw=1,NWF
00989 do jw=1,NWF
00990 SUM_CMPX=0.0D0
00991 do iq=1,NTQ
00992 q1=SQ(1,iq);q2=SQ(2,iq);q3=SQ(3,iq)
00993 phase=tpi*(q1*dble(ia1)+q2*dble(ia2)+q3*dble(ia3))
00994 pf=exp(-ci*phase)
00995 SUM_CMPX=SUM_CMPX+funcw(iw,jw,ie,iq)*pf
00996 enddo
00997 W_MAT(iw,jw,ia1,ia2,ia3,ie)
00998 + =2.0D0*tpi*SUM_CMPX/VOLUME/DBLE(NTQ)+cheadw(ie)
00999 enddo
01000 enddo
01001 enddo
01002 enddo
01003 enddo
01004 enddo
01005
01006
01007 write(6,*)'# '
01008 write(6,*)'#-----'
01009 write(6,*)'#V_MAT'
01010 write(6,*)'#-----'
01011 write(6,*)'# '
01012 do ia1=-Na1,Na1
01013 do ia2=-Na2,Na2
01014 do ia3=-Na3,Na3
01015 write(6,*) ia1,ia2,ia3
01016 do iw=1,NWF
01017 write(6,'(100F12.5)')(DBLE(V_MAT(iw,jw,ia1,ia2,ia3)*au),
01018 + jw=1,NWF)
01019 enddo
01020 write(6,*)
01021 enddo
01022 enddo
01023 enddo
01024
01025
01026 call system('rm -rf dir-intW')
01027 call system('mkdir dir-intW')
01028 ierr=CHDIR("./dir-intW")
01029 call system("pwd")
01030 OPEN(200,FILE='dat.Vmat')
01031 rewind(200)
01032 write(200,'(a)')'#Bare Coulomb: V'
01033 write(200,'(a)')'#1:R1, 2:R2, 3:R3 (lattice vector)'
01034 write(200,'(a)')'#1:i, 2:j, 3:Re(V_ij) [eV], 4:Im(V_ij) [eV]'
01035 do ia1=-Na1,Na1
01036 do ia2=-Na2,Na2
01037 do ia3=-Na3,Na3
01038 write(200,*) ia1,ia2,ia3
01039 do iw=1,NWF
01040 do jw=1,NWF
01041 write(200,'(i5,i5,2f20.10)')
01042 + iw,jw,V_MAT(iw,jw,ia1,ia2,ia3)*au
01043 enddo
01044 enddo
01045 write(200,*)
01046 enddo
01047 enddo
01048 enddo
01049 close(200)
01050
01051
01052
01053 ie=calc_ifreq
01054 write(6,*)'# '
01055 write(6,*)'#-------------------------'
01056 write(6,*)'# W_MAT(omega=calc_ifreq) '
01057 write(6,*)'#-------------------------'
01058 write(6,*)'# '
01059 do ia1=-Na1,Na1
01060 do ia2=-Na2,Na2
01061 do ia3=-Na3,Na3
01062 write(6,*) ia1,ia2,ia3
01063 do iw=1,NWF
01064 write(6,'(100F12.5)')(DBLE(W_MAT(iw,jw,ia1,ia2,ia3,ie)*au),
01065 + jw=1,NWF)
01066 enddo
01067 write(6,*)
01068 enddo
01069 enddo
01070 enddo
01071
01072
01073 ie=calc_ifreq
01074 OPEN(201,FILE='dat.Wmat')
01075 rewind(201)
01076 write(201,'(a)')'#Screened Coulomb: W at omega=calc_ifreq'
01077 write(201,'(a)')'#1:R1, 2:R2, 3:R3 (lattice vector)'
01078 write(201,'(a)')'#1:i, 2:j, 3:Re(W_ij) [eV], 4:Im(W_ij) [eV]'
01079 do ia1=-Na1,Na1
01080 do ia2=-Na2,Na2
01081 do ia3=-Na3,Na3
01082 write(201,*) ia1,ia2,ia3
01083 do iw=1,NWF
01084 do jw=1,NWF
01085 write(201,'(i5,i5,2f20.10)')
01086 + iw,jw,W_MAT(iw,jw,ia1,ia2,ia3,ie)*au
01087 enddo
01088 enddo
01089 write(201,*)
01090 enddo
01091 enddo
01092 enddo
01093 close(201)
01094
01095
01096 do iw=1,NWF
01097 write(filename,'("dat.VvsR.",i3.3)') iw
01098 file_num=1000+(iw-1)
01099 OPEN(file_num,FILE=filename)
01100 rewind(file_num)
01101 write(file_num,'(a)')'#R dependence of bare Coulomb'
01102 write(file_num,'(a)')
01103 + '#1:R [AA], 2:Re[V(R)] [eV], 3:Im[V(R)] [eV]'
01104 do ia1=-Na1,Na1
01105 do ia2=-Na2,Na2
01106 do ia3=-Na3,Na3
01107 do jw=1,NWF
01108 rij(:)=dble(ia1)*a1(:)+dble(ia2)*a2(:)+dble(ia3)*a3(:)
01109 + +(coord(:,jw)-coord(:,iw))
01110 rij2=rij(1)**2+rij(2)**2+rij(3)**2
01111 rij1=dsqrt(rij2)
01112 write(file_num,'(3F12.5)')
01113 + rij1*bohr,V_MAT(iw,jw,ia1,ia2,ia3)*au
01114 enddo
01115 enddo
01116 enddo
01117 enddo
01118 close(file_num)
01119 enddo
01120
01121
01122 ie=calc_ifreq
01123 do iw=1,NWF
01124 write(filename,'("dat.WvsR.",i3.3)') iw
01125 file_num=2000+(iw-1)
01126 OPEN(file_num,FILE=filename)
01127 rewind(file_num)
01128 write(file_num,'(a)')
01129 + '#R dependence of screened Coulomb at omega=calc_ifreq'
01130 write(file_num,'(a)')
01131 + '#1:R [AA], 2:Re[W(R)] [eV], 3:Im[W(R)] [eV]'
01132 do ia1=-Na1,Na1
01133 do ia2=-Na2,Na2
01134 do ia3=-Na3,Na3
01135 do jw=1,NWF
01136 rij(:)=dble(ia1)*a1(:)+dble(ia2)*a2(:)+dble(ia3)*a3(:)
01137 + +(coord(:,jw)-coord(:,iw))
01138 rij2=rij(1)**2+rij(2)**2+rij(3)**2
01139 rij1=dsqrt(rij2)
01140 write(file_num,'(3F12.5)')
01141 + rij1*bohr,W_MAT(iw,jw,ia1,ia2,ia3,ie)*au
01142 enddo
01143 enddo
01144 enddo
01145 enddo
01146 close(file_num)
01147 enddo
01148
01149
01150 do iw=1,NWF
01151 do jw=iw,NWF
01152 write(filename,'("dat.UvsE.",i3.3,"-",i3.3)') iw,jw
01153 file_num=3000+(iw-1)*NWF+(jw-1)
01154 OPEN(file_num,FILE=filename)
01155 rewind(file_num)
01156 write(file_num,'(a)')
01157 + '#Omega dependence of onsite Coulomb'
01158 write(file_num,'(a)')
01159 + '#1:Re(w) [eV], 2:Im(w) [eV], 3:Re[U(w)] [eV], 4:Im[U(w)] [eV]'
01160 do ie=1,ne
01161 write(file_num,'(4F12.5)') em(ie)*au,W_MAT(iw,jw,0,0,0,ie)*au
01162 enddo
01163 close(file_num)
01164 enddo
01165 enddo
01166 ierr=CHDIR("..")
01167 call system("pwd")
01168
01169
01170 ierr=CHDIR("./dir-model")
01171 call system("pwd")
01172 ie=calc_ifreq
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184 allocate(WEIGHT_R(-Na1:Na1,-Na2:Na2,-Na3:Na3)); WEIGHT_R=1.0d0
01185 SUM_REAL=0.0d0
01186 do ia1=-Na1,Na1
01187 do ia2=-Na2,Na2
01188 do ia3=-Na3,Na3
01189 if(abs(ia1)==Na1.and.mod(nkb1,2)==0.and.Na1/=0)
01190 + WEIGHT_R(ia1,ia2,ia3)=WEIGHT_R(ia1,ia2,ia3)*0.5d0
01191 if(abs(ia2)==Na2.and.mod(nkb2,2)==0.and.Na2/=0)
01192 + WEIGHT_R(ia1,ia2,ia3)=WEIGHT_R(ia1,ia2,ia3)*0.5d0
01193 if(abs(ia3)==Na3.and.mod(nkb3,2)==0.and.Na3/=0)
01194 + WEIGHT_R(ia1,ia2,ia3)=WEIGHT_R(ia1,ia2,ia3)*0.5d0
01195 SUM_REAL=SUM_REAL+WEIGHT_R(ia1,ia2,ia3)
01196 enddo
01197 enddo
01198 enddo
01199 write(6,'(a20,f15.8,i8)')'SUM_WEIGHT,NTK',SUM_REAL,NTK
01200 if(abs(SUM_REAL-dble(NTK))>1.0d-6)then
01201 stop 'SUM_WEIGHT/=NTK'
01202 endif
01203
01204 call wrt_model(Na1,Na2,Na3,NWF,W_MAT(1,1,-Na1,-Na2,-Na3,ie),
01205 + WEIGHT_R(-Na1,-Na2,-Na3))
01206
01207 ierr=CHDIR("..")
01208 call system("pwd")
01209
01210 deallocate(C0,epsirr)
01211
01212 STOP
01213 END