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