Code: Select all
complex(dpc),allocatable :: pmat(:,:,:,:,:,:)
Next, it is allocated with
Code: Select all
ABI_ALLOCATE(pmat,(2,mband,mband,nkpt,3,nsppol))
and then passed to pmat2cart where the dummy variable is
Code: Select all
complex(dpc),intent(out) :: pmat(mband,mband,nkpt,3,nsppol)
which has a different rank. My suspicion is that the first index used to refer to the components of a complex variable when 'pmat' was declared real. The type has since been changed to complex but the first index has been incorrectly retained. Currently it seems that no actual results are influenced by this. If I correct the rank,
Code: Select all
--- optic.F90.bak 2015-05-16 00:19:28.576163138 +0300
+++ optic.F90 2015-05-16 00:19:48.436324755 +0300
@@ -136,7 +136,7 @@
real(dp),allocatable :: eig0tmp(:),eigen0(:),eigen11(:)
real(dp),allocatable :: eigen12(:),eigtmp(:)
real(dp),allocatable :: eigen13(:),occ(:),wtk(:)
- complex(dpc),allocatable :: pmat(:,:,:,:,:,:)
+ complex(dpc),allocatable :: pmat(:,:,:,:,:)
character(len=fnlen) :: filnam,filnam0,filnam1,filnam2,filnam3,filnam_out
! for the moment this is imposed by the format in linopt.f and nlinopt.f
character(len=256) :: fn_radix,tmp_radix
@@ -374,7 +374,7 @@
gprimd_trans = transpose(gprimd)
call sym2cart(gprimd_trans,nsym,rprimd,symrel,symcart)
- ABI_ALLOCATE(pmat,(2,mband,mband,nkpt,3,nsppol))
+ ABI_ALLOCATE(pmat,(mband,mband,nkpt,3,nsppol))
write(std_out,*) ' optic : Call pmat2cart'
call pmat2cart(eigen11,eigen12,eigen13,mband,nkpt,nsppol,pmat,rprimd)
and run the code with input files from the lesson on Optic, I get the same results as before.