--- matdyn.f90.ORIGINAL 2011-05-18 01:34:30.000000000 +0530 +++ matdyn.f90 2012-03-15 14:40:15.000000000 +0530 @@ -134,8 +134,11 @@ CHARACTER(LEN=9) :: symm_type LOGICAL :: dos, has_zstar COMPLEX(DP), ALLOCATABLE :: dyn(:,:,:,:), dyn_blk(:,:,:,:) - COMPLEX(DP), ALLOCATABLE :: z(:,:) - REAL(DP), ALLOCATABLE:: tau(:,:), q(:,:), w2(:,:), freq(:,:) + COMPLEX(DP), ALLOCATABLE :: z(:,:), tmp_z(:,:), last_z(:,:) + REAL(DP), ALLOCATABLE :: abs_similarity(:,:) + INTEGER :: location(1) + LOGICAL, ALLOCATABLE :: mask(:) + REAL(DP), ALLOCATABLE:: tau(:,:), q(:,:), w2(:,:), tmp_w2(:), freq(:,:) INTEGER, ALLOCATABLE:: tetra(:,:), ityp(:), itau_blk(:) REAL(DP) :: omega,alat, &! cell parameters and volume at_blk(3,3), bg_blk(3,3), &! original cell @@ -408,7 +411,7 @@ END IF ALLOCATE ( dyn(3,3,nat,nat), dyn_blk(3,3,nat_blk,nat_blk) ) - ALLOCATE ( z(3*nat,3*nat), w2(3*nat,nq) ) + ALLOCATE ( z(3*nat,3*nat), tmp_z(3*nat,3*nat), w2(3*nat,nq), tmp_w2(3*nat), abs_similarity(3*nat,3*nat), mask(3*nat) ) if(la2F.and.ionode) open(300,file='dyna2F',status='unknown') IF (xmlifc) CALL set_sym(ibrav, nat, tau, ityp, nspin_mag, m_loc, & @@ -482,6 +485,22 @@ DEALLOCATE(name_rap_mode) ENDIF + if (.not.allocated(last_z)) then + allocate(last_z(3*nat,3*nat)) + else + abs_similarity = abs(matmul(conjg(transpose(z)),last_z)) + mask(:) = .true. + do na=1,3*nat + location = maxloc( abs_similarity(:,na), mask(:) ) + mask(location(1)) = .false. + tmp_w2(na) = w2(location(1),n) + tmp_z(:,na) = z(:,location(1)) + end do + w2(:,n) = tmp_w2(:) + z(:,:) = tmp_z(:,:) + end if + last_z(:,:) = z(:,:) + if(la2F.and.ionode) then write(300,*) n do na=1,3*nat @@ -558,7 +577,7 @@ END DO IF (ionode) CLOSE(unit=2) END IF !dos - DEALLOCATE (z, w2, dyn, dyn_blk) + DEALLOCATE (z, tmp_z, last_z, w2, tmp_w2, abs_similarity, mask, dyn, dyn_blk) ! ! for a2F !