diff --git a/.gitignore b/.gitignore index 761dad5b..f5e7fae2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,116 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +tmp_dyn* + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ build/ -files.txt -install.log +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Dev +.vscode +.history/ + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# dotenv +.env + +# virtualenv +.venv +venv/ +ENV/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +*~ +.DS_Store +.idea +submit_test/ +# Autogenerated API docs +docs/* +tox.ini diff --git a/FModules/eff_charge_interp.f90 b/FModules/eff_charge_interp.f90 index 7d001c66..8b6631c1 100644 --- a/FModules/eff_charge_interp.f90 +++ b/FModules/eff_charge_interp.f90 @@ -45,39 +45,39 @@ subroutine rgd_blk (nr1,nr2,nr3,nat,dyn,q,tau,epsil,zeu,bg,omega,alat,loto_2d,si alph= 1.0d0 geg = gmax*alph*4.0d0 - ! print *, "" - ! print *, "[RGD_BLK] Q = ", q - ! print *, "[RGD_BLK] NAT:", nat - ! print *, "[RGD_BLK] OMEGA:", omega - ! print *, "[RGD_BLK] ZEU:" - ! do i = 1, nat - ! do j = 1, 3 - ! print *, zeu(:, j, i) - ! enddo - ! end do - ! print *, "[RGD_BLK] ALAT:", alat - ! print *, "[RGD_BLK] BG:" - ! do i = 1, 3 - ! print *, bg(:, i) - ! end do - ! print *, "[RGD_BLK] TAU:" - ! do i = 1, nat - ! print *, tau(:, i) - ! end do - - ! print *, "[RGD_BLK] EPSIL:" - ! do i = 1, 3 - ! print *, epsil(:, i) - ! end do + !print *, "" + !print *, "[RGD_BLK] Q = ", q + !print *, "[RGD_BLK] NAT:", nat + !print *, "[RGD_BLK] OMEGA:", omega + !print *, "[RGD_BLK] ZEU:" + !do i = 1, nat + ! do j = 1, 3 + ! print *, zeu(:, j, i) + ! enddo + !end do + !print *, "[RGD_BLK] ALAT:", alat + !print *, "[RGD_BLK] BG:" + !do i = 1, 3 + ! print *, bg(:, i) + !end do + !print *, "[RGD_BLK] TAU:" + !do i = 1, nat + ! print *, tau(:, i) + !end do + + !print *, "[RGD_BLK] EPSIL:" + !do i = 1, 3 + ! print *, epsil(:, i) + !end do - ! print *, "[RGD_BLK] DYN:" - ! do na = 1, nat - ! do nb = 1, nat - ! do i = 1, 3 - ! print *, dyn(:, i, na, nb) - ! end do - ! end do - ! end do + !print *, "[RGD_BLK] DYN:" + !do na = 1, nat + ! do nb = 1, nat + ! do i = 1, 3 + ! print *, dyn(:, i, na, nb) + ! end do + ! end do + !end do ! Silicon alat_new = 10.0d0 @@ -249,6 +249,255 @@ subroutine rgd_blk (nr1,nr2,nr3,nat,dyn,q,tau,epsil,zeu,bg,omega,alat,loto_2d,si end subroutine rgd_blk +subroutine rgd_blk_diff_phase_conv (nr1,nr2,nr3,nat,dyn,q,tau,epsil,zeu,bg,omega,alat,loto_2d,sign) + !----------------------------------------------------------------------- + ! compute the rigid-ion (long-range) term for q + ! The long-range term used here, to be added to or subtracted from the + ! dynamical matrices, is exactly the same of the formula introduced in: + ! X. Gonze et al, PRB 50. 13035 (1994) . Only the G-space term is + ! implemented: the Ewald parameter alpha must be large enough to + ! have negligible r-space contribution + ! + use kinds, only: dp + use constants, only: pi,tpi, fpi, e2 + implicit none + integer :: nr1, nr2, nr3 ! FFT grid + integer :: nat ! number of atoms + complex(DP) :: dyn(3,3,nat,nat) ! dynamical matrix + real(DP) & + q(3), &! q-vector + tau(3,nat), &! atomic positions + epsil(3,3), &! dielectric constant tensor + zeu(3,3,nat), &! effective charges tensor + at(3,3), &! direct lattice basis vectors + bg(3,3), &! reciprocal lattice basis vectors + omega, &! unit cell volume + alat, &! cell dimension units + sign ! sign=+/-1.0 ==> add/subtract rigid-ion term + logical :: loto_2d ! 2D LOTO correction + ! + ! local variables + ! + real(DP):: geg, gp2, r ! , For 2d loto: gp2, r + integer :: na,nb, i,j, m1, m2, m3 + integer :: nr1x, nr2x, nr3x + real(DP) :: alph, fac,g1,g2,g3, facgd, arg, gmax, alat_new + real(DP) :: zag(3),zbg(3),zcg(3), fnat(3), reff(2,2) + real :: time1, time2 + complex(dp) :: facg + ! + ! alph is the Ewald parameter, geg is an estimate of G^2 + ! such that the G-space sum is convergent for that alph + ! very rough estimate: geg/4/alph > gmax = 14 + ! (exp (-14) = 10^-6) + ! + call cpu_time(time1) + gmax= 14.d0 + alph= 1.0d0 + geg = gmax*alph*4.0d0 + + !print *, "" + !print *, "[RGD_BLK] Q = ", q + !print *, "[RGD_BLK] NAT:", nat + !print *, "[RGD_BLK] OMEGA:", omega + !print *, "[RGD_BLK] ZEU:" + !do i = 1, nat + ! do j = 1, 3 + ! print *, zeu(:, j, i) + ! enddo + !end do + !print *, "[RGD_BLK] ALAT:", alat + !print *, "[RGD_BLK] BG:" + !do i = 1, 3 + ! print *, bg(:, i) + !end do + !print *, "[RGD_BLK] TAU:" + !do i = 1, nat + ! print *, tau(:, i) + !end do + + !print *, "[RGD_BLK] EPSIL:" + !do i = 1, 3 + ! print *, epsil(:, i) + !end do + + !print *, "[RGD_BLK] DYN:" + !do na = 1, nat + ! do nb = 1, nat + ! do i = 1, 3 + ! print *, dyn(:, i, na, nb) + ! end do + ! end do + !end do + + ! Silicon + alat_new = 10.0d0 + + + ! Estimate of nr1x,nr2x,nr3x generating all vectors up to G^2 < geg + ! Only for dimensions where periodicity is present, e.g. if nr1=1 + ! and nr2=1, then the G-vectors run along nr3 only. + ! (useful if system is in vacuum, e.g. 1D or 2D) + ! + if (nr1 == 1) then + nr1x=0 + else + nr1x = int ( sqrt (geg) / & + (sqrt (bg (1, 1) **2 + bg (2, 1) **2 + bg (3, 1) **2) )) + 1 + endif + if (nr2 == 1) then + nr2x=0 + else + nr2x = int ( sqrt (geg) / & + ( sqrt (bg (1, 2) **2 + bg (2, 2) **2 + bg (3, 2) **2) )) + 1 + endif + if (nr3 == 1) then + nr3x=0 + else + nr3x = int ( sqrt (geg) / & + (sqrt (bg (1, 3) **2 + bg (2, 3) **2 + bg (3, 3) **2) )) + 1 + endif + ! + + !print *, "[RGD_BLK] integration grid:", nr1x, nr2x, nr3x + if (abs(sign) /= 1.0_DP) & + call errore ('rgd_blk',' wrong value for sign ',1) + ! + IF (loto_2d) THEN + fac = sign*e2*fpi/omega*0.5d0*alat/bg(3,3) + reff=0.0d0 + DO i=1,2 + DO j=1,2 + reff(i,j)=epsil(i,j)*0.5d0*tpi/bg(3,3) ! (eps)*c/2 in 2pi/a units + ENDDO + ENDDO + DO i=1,2 + reff(i,i)=reff(i,i)-0.5d0*tpi/bg(3,3) ! (-1)*c/2 in 2pi/a units + ENDDO + ELSE + fac = sign*e2*fpi/omega + ENDIF + do m1 = -nr1x,nr1x + do m2 = -nr2x,nr2x + do m3 = -nr3x,nr3x + ! + g1 = m1*bg(1,1) + m2*bg(1,2) + m3*bg(1,3) + g2 = m1*bg(2,1) + m2*bg(2,2) + m3*bg(2,3) + g3 = m1*bg(3,1) + m2*bg(3,2) + m3*bg(3,3) + ! + IF (loto_2d) THEN + geg = g1**2 + g2**2 + g3**2 + r=0.0d0 + gp2=g1**2+g2**2 + IF (gp2>1.0d-8) THEN + r=g1*reff(1,1)*g1+g1*reff(1,2)*g2+g2*reff(2,1)*g1+g2*reff(2,2)*g2 + r=r/gp2 + ENDIF + ELSE + geg = (g1*(epsil(1,1)*g1+epsil(1,2)*g2+epsil(1,3)*g3)+ & + g2*(epsil(2,1)*g1+epsil(2,2)*g2+epsil(2,3)*g3)+ & + g3*(epsil(3,1)*g1+epsil(3,2)*g2+epsil(3,3)*g3)) + ENDIF + ! + if (geg > 0.0_DP .and. geg/alph/4.0_DP < gmax ) then + ! + IF (loto_2d) THEN + facgd = fac*exp(-geg/alph/4.0d0)/SQRT(geg)/(1.0+r*SQRT(geg)) + ELSE + facgd = fac*exp(-geg/alph/4.0d0)/geg + ENDIF + ! + do na = 1,nat + zag(:)=g1*zeu(1,:,na)+g2*zeu(2,:,na)+g3*zeu(3,:,na) + fnat(:) = 0.d0 + do nb = 1,nat + arg = -2.d0*pi* (g1 * (tau(1,na)-tau(1,nb))+ & + g2 * (tau(2,na)-tau(2,nb))+ & + g3 * (tau(3,na)-tau(3,nb))) + zcg(:) = g1*zeu(1,:,nb) + g2*zeu(2,:,nb) + g3*zeu(3,:,nb) + fnat(:) = fnat(:) + zcg(:)*cos(arg) + end do + do j=1,3 + do i=1,3 + dyn(i,j,na,na) = dyn(i,j,na,na) - facgd * & + zag(i) * fnat(j) + end do + end do + end do + end if + ! + g1 = g1 +q(1) + g2 = g2 +q(2) + g3 = g3 +q(3) + ! + IF (loto_2d) THEN + geg = g1**2+g2**2+g3**2 + r=0.0d0 + gp2=g1**2+g2**2 + IF (gp2>1.0d-8) THEN + r=g1*reff(1,1)*g1+g1*reff(1,2)*g2+g2*reff(2,1)*g1+g2*reff(2,2)*g2 + r=r/gp2 + ENDIF + ELSE + geg = (g1*(epsil(1,1)*g1+epsil(1,2)*g2+epsil(1,3)*g3)+ & + g2*(epsil(2,1)*g1+epsil(2,2)*g2+epsil(2,3)*g3)+ & + g3*(epsil(3,1)*g1+epsil(3,2)*g2+epsil(3,3)*g3)) + ENDIF + ! + if (geg > 0.0_DP .and. geg/alph/4.0_DP < gmax ) then + ! + IF (loto_2d) THEN + facgd = fac*exp(-geg/alph/4.0d0)/SQRT(geg)/(1.0+r*SQRT(geg)) + ELSE + facgd = fac*exp(-geg/alph/4.0d0)/geg + ENDIF + ! + do nb = 1,nat + zbg(:)=g1*zeu(1,:,nb)+g2*zeu(2,:,nb)+g3*zeu(3,:,nb) + do na = 1,nat + zag(:)=g1*zeu(1,:,na)+g2*zeu(2,:,na)+g3*zeu(3,:,na) + arg = -2.d0*pi* ((g1 - q(1)) * (tau(1,na)-tau(1,nb))+ & + (g2 - q(2)) * (tau(2,na)-tau(2,nb))+ & + (g3 - q(3)) * (tau(3,na)-tau(3,nb))) + ! + facg = facgd * CMPLX(cos(arg),sin(arg),kind=DP) + do j=1,3 + do i=1,3 + dyn(i,j,na,nb) = dyn(i,j,na,nb) + facg * & + zag(i) * zbg(j) + end do + end do + end do + end do + end if + end do + end do + end do + +! call cpu_time(time2) +! print *, "Elapsed time in rgd_blk: ", time2 - time1 + + +! print *, "" +! print *, "[RGD_BLK] DYN FINAL:" +! do na = 1, nat +! do nb = 1, nat +! do i = 1, 3 +! print *, dyn(:, i, na, nb) +! end do +! end do +! end do + +! print *, "" +! print *, "" +! print *, "----------------------------------------------------" + + + + ! + return + ! + end subroutine rgd_blk_diff_phase_conv ! subroutine rgd_blk (nr1,nr2,nr3,nat,dyn,q,tau,epsil,zeu,bg,omega,alat,loto_2d,sign) ! !----------------------------------------------------------------------- @@ -598,4 +847,4 @@ SUBROUTINE trasl( phid, phiq, nq, nr1, nr2, nr3, nat, m1, m2, m3 ) ! RETURN END SUBROUTINE trasl - \ No newline at end of file + diff --git a/FModules/get_equivalent_atoms.f90 b/FModules/get_equivalent_atoms.f90 index fe5796a3..e2b6c749 100644 --- a/FModules/get_equivalent_atoms.f90 +++ b/FModules/get_equivalent_atoms.f90 @@ -7,24 +7,121 @@ subroutine get_equivalent_atoms(coords1, coords2, unit_cell, ityp1, ityp2, eq_at integer, dimension(nat), intent(out) :: eq_atoms integer :: nat - integer :: i, j + integer :: i, j, eq_found, j_aux double precision :: min_dist, tmp_dist - double precision, dimension(3) :: dist + double precision, dimension(3) :: aux_vect + double precision, dimension(nat) :: total_dist + + ! Variables for get_closest_atoms + integer :: nx, ny, nz, mynx, myny, mynz + integer, parameter :: far = 2 + logical :: found + + ! Set all the atoms as not equivalent + eq_atoms(:) = -1 + + ! This subroutine could use get_closest_vector + ! However, we mix it here to invert the loops + ! And exploit a most likely scenario that the + ! Replica of the atoms is on the same cell + ! This is a huge speedup + + eq_found = 0 do i = 1, nat - min_dist = 1000000.d0 - do j = 1, nat - ! Exclude different type of atoms - if ( ityp1(i) .ne. ityp2(j) ) continue - call get_closest_vector(unit_cell, coords1(i, :) - coords2(j, :), dist) - tmp_dist = sum(dist**2) - - if (tmp_dist .lt. min_dist) then - min_dist = tmp_dist - eq_atoms(i) = j - 1 ! - 1 is for Fortan to python correspondance - end if + total_dist(:) = 100000.d0 + + !print *, "ATOM: ", i, " of ", nat + found = .false. + + ! Decide what cell to probe the distance + do mynx = -far, far + ! Reorder the loop to start with 0 + ! which is the most probable value (exit early if found) + if (mynx .le. 0) then + nx = mynx + far + else + nx = -mynx + endif + do myny = -far, far + if (myny .le. 0) then + ny = myny + far + else + ny = -myny + endif + do mynz = -far, far + if (mynz .le. 0) then + nz = mynz + far + else + nz = -mynz + endif + + !print *, "Checking cell: ", nx, ny, nz + + ! Now we have the cell, we can loop over the atoms + do j_aux = i, nat + i -1 + ! Warp the loop over j to start with i + ! Which is the most probable value (and the most efficient loop) + j = j_aux + if (j .gt. nat) then + j = j - nat + end if + + ! Jump if the atom is already found + if (total_dist(j) .lt. 1.d-6) continue + + + ! Exclude different type of atoms + if ( ityp1(i) .ne. ityp2(j) ) continue + !call get_closest_vector(unit_cell, coords1(i, :) - coords2(j, :), dist) + + ! Unwrap the get_closest_vector subroutine here + aux_vect(:) = coords1(i, :) - coords2(j, :) + if (nx .ne. 0) then + aux_vect(:) = aux_vect(:) + nx * unit_cell(1, :) + end if + if (ny .ne. 0) then + aux_vect(:) = aux_vect(:) + ny * unit_cell(2, :) + end if + if (nz .ne. 0) then + aux_vect(:) = aux_vect(:) + nz * unit_cell(3, :) + end if + + tmp_dist = sum(aux_vect**2) + + !print *, "Checking atom ", j, " of ", nat, "old_dist: ", & + ! total_dist(j), " new_dist: ", tmp_dist, "current: ", eq_atoms(i) + + if (tmp_dist .lt. total_dist(j)) then + total_dist(j) = tmp_dist + end if + if (tmp_dist .lt. 1.d-6) then + eq_found = eq_found + 1 + eq_atoms(i) = j - 1 ! - 1 is for Fortan to python correspondance + + ! Early exit if all the atoms are found + if (eq_found .eq. nat) then + !print *, "Everything found" + !print *, eq_atoms + return + end if + found = .true. + exit + end if + enddo + if (found) exit + enddo + if (found) exit + enddo + if (found) exit enddo - enddo + + ! Check if the atom is not found + if (.not. found .or. eq_atoms(i) .eq. -1) then + ! Pick the index of the minimum value of total_dist + eq_atoms(i) = minloc(total_dist, dim=1) - 1 + end if + enddo end subroutine get_equivalent_atoms @@ -36,16 +133,34 @@ subroutine get_closest_vector(unit_cell, v_dist, new_v_dist) double precision, dimension(3), intent(in) :: v_dist double precision, dimension(3), intent(out) :: new_v_dist - integer :: nx, ny, nz + integer :: nx, ny, nz, mynx, myny, mynz integer, parameter :: far = 2 double precision, dimension(3) :: aux_vect double precision :: min_dist, dist min_dist = sum(v_dist(:) ** 2) new_v_dist(:) = v_dist(:) - do nx = -far, far - do ny = -far, far - do nz = -far, far + do mynx = -far, far + ! Reorder the loop to start with 0 + ! which is the most probable value (exit early if found) + if (mynx .le. 0) then + nx = mynx + far + else + nx = -mynx + endif + + do myny = -far, far + if (myny .le. 0) then + ny = myny + far + else + ny = -myny + endif + do mynz = -far, far + if (mynz .le. 0) then + nz = mynz + far + else + nz = -mynz + endif ! Define the new vector aux_vect(:) = v_dist(:) aux_vect(:) = aux_vect(:) + nx * unit_cell(1, :) @@ -57,6 +172,10 @@ subroutine get_closest_vector(unit_cell, v_dist, new_v_dist) min_dist = dist new_v_dist(:) = aux_vect(:) end if + + if (dist .lt. 1.d-6) then + return + end if enddo enddo enddo @@ -199,6 +318,7 @@ end subroutine fix_coords_in_unit_cell subroutine matinv3(A, B) implicit none + double precision, intent(in) :: A(3,3) !! Matrix double precision, intent(out) :: B(3,3) !! Inverse matrix double precision :: detinv diff --git a/FModules/get_lf.f90 b/FModules/get_lf.f90 new file mode 100644 index 00000000..9a36fcf7 --- /dev/null +++ b/FModules/get_lf.f90 @@ -0,0 +1,1688 @@ +module get_lf + + contains + + subroutine calculate_lineshapes(irrqgrid, qgrid, weights, scatt_events, fc2, r2_2, & + fc3, r3_2, r3_3, rprim, pos, masses, smear, smear_id, T, gaussian, & + classical, energies, ne, nirrqpt, nat, nfc2, nfc3, n_events, lineshapes) + + use omp_lib + use third_order_cond + + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nirrqpt, nat, nfc2, nfc3, ne, n_events + integer, intent(in) :: weights(n_events), scatt_events(nirrqpt) + real(kind=DP), intent(in) :: irrqgrid(3, nirrqpt) + real(kind=DP), intent(in) :: qgrid(3, n_events) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: rprim(3, 3) + real(kind=DP), intent(in) :: pos(3, nat) + real(kind=DP), intent(in) :: masses(nat), energies(ne) + real(kind=DP), intent(in) :: smear(3*nat, nirrqpt), smear_id(3*nat, nirrqpt) + real(kind=DP), intent(in) :: T + logical, intent(in) :: gaussian, classical + real(kind=DP), dimension(nirrqpt, 3*nat, ne), intent(out) :: lineshapes + + integer :: iqpt, i, jqpt, tot_qpt, prev_events, nthreads + real(kind=DP), dimension(3) :: qpt + real(kind=DP), dimension(3,3) :: kprim + real(kind=DP), dimension(3*nat) :: w2_q, w_q +! real(kind=DP), dimension(ne, 3*nat) :: lineshape + real(kind=DP), allocatable, dimension(:, :) :: lineshape + complex(kind=DP), allocatable, dimension(:, :) :: self_energy +! complex(kind=DP), dimension(ne, 3*nat) :: self_energy + complex(kind=DP), dimension(3*nat,3*nat) :: pols_q, d2_q + real(kind=DP), allocatable, dimension(:,:) :: curr_grid + integer, allocatable, dimension(:) :: curr_w + logical :: is_q_gamma, w_neg_freqs, parallelize + + + lineshapes(:,:,:) = 0.0_DP + kprim = transpose(inv(rprim)) + nthreads = omp_get_max_threads() + print*, 'Maximum number of threads available: ', nthreads + + parallelize = .True. + if(nirrqpt <= nthreads) then + parallelize = .False. + endif +! print*, 'Got parallelize' + + !$OMP PARALLEL DO IF(parallelize) DEFAULT(NONE) & + !$OMP PRIVATE(iqpt, w_neg_freqs, qpt, w2_q, pols_q, d2_q, is_q_gamma, self_energy, & + !$OMP curr_grid, w_q, curr_w, prev_events, tot_qpt, lineshape) & + !$OMP SHARED(nirrqpt, nfc2, nat, fc2, r2_2, masses, kprim, scatt_events, & + !$OMP nfc3, ne, fc3, r3_2, r3_3, pos, smear, T, energies, parallelize, smear_id, lineshapes, & + !$OMP irrqgrid, qgrid, weights, gaussian, classical) + do iqpt = 1, nirrqpt + allocate(lineshape(ne, 3*nat), self_energy(ne, 3*nat)) +! print*, iqpt + w_neg_freqs = .False. + print*, 'Calculating ', iqpt, ' point in the irreducible zone out of ', nirrqpt, '!' + lineshape(:,:) = 0.0_DP + qpt = irrqgrid(:, iqpt) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, qpt, w2_q, pols_q, d2_q) + call check_if_gamma(nat, qpt, kprim, w2_q, is_q_gamma) + + if(any(w2_q < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix!' + w_neg_freqs = .True. + endif +! print*, 'Interpolate frequency' + if(.not. w_neg_freqs) then + w_q = sqrt(w2_q) + self_energy(:,:) = complex(0.0_DP, 0.0_DP) + allocate(curr_grid(3, scatt_events(iqpt))) + allocate(curr_w(scatt_events(iqpt))) + if(iqpt > 1) then + prev_events = sum(scatt_events(1:iqpt-1)) + else + prev_events = 0 + endif + do jqpt = 1, scatt_events(iqpt) + curr_grid(:,jqpt) = qgrid(:,prev_events + jqpt) + curr_w(jqpt) = weights(prev_events + jqpt) + enddo +! print*, 'Got grids' + call calculate_self_energy_P(w_q, qpt, pols_q, is_q_gamma, scatt_events(iqpt), nat, nfc2, & + nfc3, ne, curr_grid, curr_w, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, masses, smear(:,iqpt), T, & + energies, .not. parallelize, gaussian, classical, self_energy) + deallocate(curr_grid) + tot_qpt = sum(curr_w) + deallocate(curr_w) + self_energy = self_energy/dble(tot_qpt) + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in self_energy' + endif + if(gaussian) then + call calculate_real_part_via_Kramers_Kronig(ne, 3*nat, self_energy, energies, w_q) + !call hilbert_transform_via_FFT(ne, 3*nat, self_energy) + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in Kramers Kronig' + endif + endif + + call compute_spectralf_diag_single(smear_id(:, iqpt), energies, w_q, self_energy, nat, ne, lineshape) + !call calculate_spectral_function(energies, w_q, self_energy, nat, ne, lineshape) + !call calculate_correlation_function(energies, w_q, self_energy, nat, ne, lineshape) + + do i = 1, 3*nat + if(w_q(i) .ne. 0.0_DP) then + lineshapes(iqpt, i, :) = lineshape(:,i) + else + lineshapes(iqpt, i, :) = 0.0_DP + endif + enddo + else + lineshapes(iqpt,:,:) = 0.0_DP + endif + deallocate(lineshape, self_energy) + + enddo + !$OMP END PARALLEL DO + + + end subroutine calculate_lineshapes + + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_lineshapes_mode_mixing(irrqgrid, qgrid, weights, scatt_events, fc2, r2_2, & + fc3, r3_2, r3_3, rprim, pos, masses, smear, smear_id, T, gaussian, & + classical, energies, ne, nirrqpt, nat, nfc2, nfc3, n_events, lineshapes) + + use omp_lib + use third_order_cond + + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nirrqpt, nat, nfc2, nfc3, ne, n_events + integer, intent(in) :: weights(n_events), scatt_events(nirrqpt) + real(kind=DP), intent(in) :: irrqgrid(3, nirrqpt) + real(kind=DP), intent(in) :: qgrid(3, n_events) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: rprim(3, 3) + real(kind=DP), intent(in) :: pos(3, nat) + real(kind=DP), intent(in) :: masses(nat), energies(ne) + real(kind=DP), intent(in) :: smear(3*nat, nirrqpt), smear_id(3*nat, nirrqpt) + real(kind=DP), intent(in) :: T + logical, intent(in) :: gaussian, classical + complex(kind=DP), dimension(nirrqpt, 3*nat, 3*nat, ne), intent(out) :: lineshapes + + integer :: iqpt, i, ie, jqpt, tot_qpt, prev_events, nthreads, iband, jband + integer :: iband1, jband1 + real(kind=DP), dimension(3) :: qpt + real(kind=DP), dimension(3,3) :: kprim + real(kind=DP), dimension(3*nat) :: w2_q, w_q +! real(kind=DP), dimension(ne, 3*nat) :: lineshape + complex(kind=DP), allocatable, dimension(:,:,:) :: lineshape + complex(kind=DP), allocatable, dimension(:, :, :) :: self_energy +! complex(kind=DP), dimension(ne, 3*nat) :: self_energy + complex(kind=DP), dimension(3*nat,3*nat) :: pols_q, d2_q + real(kind=DP), allocatable, dimension(:,:) :: curr_grid + integer, allocatable, dimension(:) :: curr_w + logical :: is_q_gamma, w_neg_freqs, parallelize + + ! Get non-diagonal lineshapes but in mode basis + + lineshapes(:,:,:,:) = complex(0.0_DP, 0.0_DP) + kprim = transpose(inv(rprim)) + nthreads = omp_get_max_threads() + print*, 'Maximum number of threads available: ', nthreads + + parallelize = .True. + if(nirrqpt <= nthreads) then + parallelize = .False. + endif +! print*, 'Got parallelize' + + !$OMP PARALLEL DO IF(parallelize) DEFAULT(NONE) & + !$OMP PRIVATE(iqpt, w_neg_freqs, qpt, w2_q, pols_q, is_q_gamma, self_energy, & + !$OMP curr_grid, w_q, curr_w, prev_events, tot_qpt, d2_q, lineshape) & + !$OMP SHARED(nirrqpt, nfc2, nat, fc2, r2_2, masses, kprim, scatt_events, & + !$OMP nfc3, ne, fc3, r3_2, r3_3, pos, smear, T, energies, parallelize, smear_id, lineshapes, & + !$OMP irrqgrid, qgrid, weights, gaussian, classical) + do iqpt = 1, nirrqpt + allocate(lineshape(3*nat, 3*nat, ne), self_energy(ne, 3*nat, 3*nat)) +! print*, iqpt + w_neg_freqs = .False. + print*, 'Calculating ', iqpt, ' point in the irreducible zone out of ', nirrqpt, '!' + lineshape(:,:,:) = 0.0_DP + qpt = irrqgrid(:, iqpt) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, qpt, w2_q, pols_q, d2_q) + call check_if_gamma(nat, qpt, kprim, w2_q, is_q_gamma) + + if(any(w2_q < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix!' + w_neg_freqs = .True. + endif +! print*, 'Interpolate frequency' + if(.not. w_neg_freqs) then + w_q = sqrt(w2_q) + self_energy(:,:,:) = complex(0.0_DP, 0.0_DP) + allocate(curr_grid(3, scatt_events(iqpt))) + allocate(curr_w(scatt_events(iqpt))) + if(iqpt > 1) then + prev_events = sum(scatt_events(1:iqpt-1)) + else + prev_events = 0 + endif + do jqpt = 1, scatt_events(iqpt) + curr_grid(:,jqpt) = qgrid(:,prev_events + jqpt) + curr_w(jqpt) = weights(prev_events + jqpt) + enddo + call calculate_self_energy_full(w_q, qpt, pols_q, is_q_gamma, scatt_events(iqpt), nat, nfc2, & + nfc3, ne, curr_grid, curr_w, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, masses, smear(:,iqpt), T, & + energies, .not. parallelize, gaussian, classical, self_energy) + deallocate(curr_grid) + tot_qpt = sum(curr_w) + deallocate(curr_w) + self_energy = self_energy/dble(tot_qpt) + if(gaussian) then + call calculate_real_part_via_Kramers_Kronig_2d(ne, 3*nat, self_energy, energies, w_q) + !call hilbert_transform_via_FFT(ne, 3*nat, self_energy) ! not much better + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in Kramers Kronig' + endif + endif + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in self_energy' + endif + + call calculate_spectral_function_mode_mixing(energies, smear_id(:, iqpt), & + w_q,self_energy,is_q_gamma,lineshape,masses,nat,ne) + + lineshape = lineshape*2.0_DP + lineshapes(iqpt, :, :, :) = lineshape + ! projected them to Cartesian coordinates. Leave it for debugging + !do iband = 1, 3*nat + ! do jband = 1, 3*nat + ! do iband1 = 1, 3*nat + ! do jband1 = 1, 3*nat + ! lineshapes(iqpt, jband, iband, :) = lineshapes(iqpt, jband, iband, :) + & + ! lineshape(jband1,iband1,:)*pols_q(jband,jband1)*conjg(pols_q(iband,iband1)) + ! enddo + ! enddo + ! enddo + !enddo + else + lineshapes(iqpt,:,:,:) = complex(0.0_DP, 0.0_DP) + endif + deallocate(lineshape, self_energy) + + enddo + !$OMP END PARALLEL DO + + + end subroutine calculate_lineshapes_mode_mixing + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_lineshapes_cartesian(irrqgrid, qgrid, weights, scatt_events, fc2, r2_2, & + fc3, r3_2, r3_3, rprim, pos, masses, smear, smear_id, T, gaussian, & + classical, energies, ne, nirrqpt, nat, nfc2, nfc3, n_events, lineshapes) + + use omp_lib + use third_order_cond + + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nirrqpt, nat, nfc2, nfc3, ne, n_events + integer, intent(in) :: weights(n_events), scatt_events(nirrqpt) + real(kind=DP), intent(in) :: irrqgrid(3, nirrqpt) + real(kind=DP), intent(in) :: qgrid(3, n_events) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: rprim(3, 3) + real(kind=DP), intent(in) :: pos(3, nat) + real(kind=DP), intent(in) :: masses(nat), energies(ne) + real(kind=DP), intent(in) :: smear(3*nat, nirrqpt), smear_id(3*nat, nirrqpt) + real(kind=DP), intent(in) :: T + logical, intent(in) :: gaussian, classical + complex(kind=DP), dimension(nirrqpt, 3*nat, 3*nat, ne), intent(out) :: lineshapes + + integer :: iqpt, i, ie, jqpt, tot_qpt, prev_events, nthreads, iband, jband + integer :: iband1, jband1 + real(kind=DP), dimension(3) :: qpt + real(kind=DP), dimension(3,3) :: kprim + real(kind=DP), dimension(3*nat) :: w2_q, w_q +! real(kind=DP), dimension(ne, 3*nat) :: lineshape + complex(kind=DP), allocatable, dimension(:,:,:) :: lineshape + complex(kind=DP), allocatable, dimension(:, :, :) :: self_energy, self_energy_cart +! complex(kind=DP), dimension(ne, 3*nat) :: self_energy + complex(kind=DP), dimension(3*nat,3*nat) :: pols_q, d2_q + real(kind=DP), allocatable, dimension(:,:) :: curr_grid + integer, allocatable, dimension(:) :: curr_w + logical :: is_q_gamma, w_neg_freqs, parallelize + + + lineshapes(:,:,:,:) = 0.0_DP + kprim = transpose(inv(rprim)) + nthreads = omp_get_max_threads() + print*, 'Maximum number of threads available: ', nthreads + + parallelize = .True. + if(nirrqpt <= nthreads) then + parallelize = .False. + endif +! print*, 'Got parallelize' + + !$OMP PARALLEL DO IF(parallelize) DEFAULT(NONE) & + !$OMP PRIVATE(iqpt, w_neg_freqs, qpt, w2_q, pols_q, is_q_gamma, self_energy, & + !$OMP curr_grid, w_q, curr_w, prev_events, tot_qpt, self_energy_cart, d2_q, lineshape) & + !$OMP SHARED(nirrqpt, nfc2, nat, fc2, r2_2, masses, kprim, scatt_events, & + !$OMP nfc3, ne, fc3, r3_2, r3_3, pos, smear, T, energies, parallelize, smear_id, lineshapes, & + !$OMP irrqgrid, qgrid, weights, gaussian, classical) + do iqpt = 1, nirrqpt + allocate(lineshape(3*nat, 3*nat, ne), self_energy(ne, 3*nat, 3*nat), self_energy_cart(ne, 3*nat, 3*nat)) +! print*, iqpt + w_neg_freqs = .False. + print*, 'Calculating ', iqpt, ' point in the irreducible zone out of ', nirrqpt, '!' + lineshape(:,:,:) = 0.0_DP + qpt = irrqgrid(:, iqpt) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, qpt, w2_q, pols_q, d2_q) + call check_if_gamma(nat, qpt, kprim, w2_q, is_q_gamma) + + if(any(w2_q < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix!' + w_neg_freqs = .True. + endif +! print*, 'Interpolate frequency' + if(.not. w_neg_freqs) then + w_q = sqrt(w2_q) + self_energy(:,:,:) = complex(0.0_DP, 0.0_DP) + self_energy_cart(:,:,:) = complex(0.0_DP, 0.0_DP) + allocate(curr_grid(3, scatt_events(iqpt))) + allocate(curr_w(scatt_events(iqpt))) + if(iqpt > 1) then + prev_events = sum(scatt_events(1:iqpt-1)) + else + prev_events = 0 + endif + do jqpt = 1, scatt_events(iqpt) + curr_grid(:,jqpt) = qgrid(:,prev_events + jqpt) + curr_w(jqpt) = weights(prev_events + jqpt) + enddo +! print*, 'Got grids' + call calculate_self_energy_full(w_q, qpt, pols_q, is_q_gamma, scatt_events(iqpt), nat, nfc2, & + nfc3, ne, curr_grid, curr_w, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, masses, smear(:,iqpt), T, & + energies, .not. parallelize, gaussian, classical, self_energy) + deallocate(curr_grid) + tot_qpt = sum(curr_w) + deallocate(curr_w) + self_energy = self_energy/dble(tot_qpt) + if(gaussian) then + call calculate_real_part_via_Kramers_Kronig_2d(ne, 3*nat, self_energy, energies, w_q) + !call hilbert_transform_via_FFT(ne, 3*nat, self_energy) + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in Kramers Kronig' + endif + endif + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in self_energy' + endif + do iband = 1, 3*nat + do jband = 1, 3*nat + do iband1 = 1, 3*nat + do jband1 = 1, 3*nat + self_energy_cart(:, jband, iband) = self_energy_cart(:, jband, iband) + & + self_energy(:,jband1,iband1)*pols_q(jband,jband1)*conjg(pols_q(iband,iband1)) + enddo + enddo + enddo + enddo + + call calculate_spectral_function_cartesian(energies, smear_id(:, iqpt), & + d2_q,self_energy_cart,is_q_gamma,lineshape,masses,nat,ne) + + lineshapes(iqpt, :, :, :) = lineshape*2.0_DP + else + lineshapes(iqpt,:,:,:) = 0.0_DP + endif + deallocate(lineshape, self_energy, self_energy_cart) + + enddo + !$OMP END PARALLEL DO + + + end subroutine calculate_lineshapes_cartesian + + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_lifetimes_selfconsistently(irrqgrid, qgrid, weights, scatt_events, fc2, r2_2, & + fc3, r3_2, r3_3, rprim, pos, masses, smear, smear_id, T, gaussian, & + classical, energies, ne, nirrqpt, nat, nfc2, nfc3, n_events, selfengs) + + use omp_lib + use third_order_cond + + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nirrqpt, nat, nfc2, nfc3, ne, n_events + integer, intent(in) :: weights(n_events), scatt_events(nirrqpt) + real(kind=DP), intent(in) :: irrqgrid(3, nirrqpt) + real(kind=DP), intent(in) :: qgrid(3, n_events) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: rprim(3, 3) + real(kind=DP), intent(in) :: pos(3, nat) + real(kind=DP), intent(in) :: masses(nat), energies(ne) + real(kind=DP), intent(in) :: smear(3*nat, nirrqpt), smear_id(3*nat, nirrqpt) + real(kind=DP), intent(in) :: T + logical, intent(in) :: gaussian, classical + complex(kind=DP), dimension(nirrqpt, 3*nat), intent(out) :: selfengs + + integer :: iqpt, i, jqpt, tot_qpt, prev_events, nthreads + real(kind=DP), dimension(3) :: qpt + real(kind=DP), dimension(3,3) :: kprim + real(kind=DP), dimension(3*nat) :: w2_q, w_q, tau, omega + complex(kind=DP), allocatable, dimension(:, :) :: self_energy + complex(kind=DP), dimension(3*nat,3*nat) :: pols_q, d2_q + real(kind=DP), allocatable, dimension(:,:) :: curr_grid + integer, allocatable, dimension(:) :: curr_w + logical :: is_q_gamma, w_neg_freqs, parallelize + + + selfengs(:,:) = complex(0.0_DP,0.0_DP) + kprim = transpose(inv(rprim)) + nthreads = omp_get_max_threads() + print*, 'Maximum number of threads available: ', nthreads + + parallelize = .True. + if(nirrqpt <= nthreads) then + parallelize = .False. + endif +! print*, 'Got parallelize' + + !$OMP PARALLEL DO IF(parallelize) DEFAULT(NONE) & + !$OMP PRIVATE(iqpt, w_neg_freqs, qpt, w2_q, pols_q, d2_q, is_q_gamma, self_energy, & + !$OMP curr_grid, w_q, curr_w, prev_events, tot_qpt, tau, omega) & + !$OMP SHARED(nirrqpt, nfc2, nat, fc2, r2_2, masses, kprim, scatt_events, & + !$OMP nfc3, ne, fc3, r3_2, r3_3, pos, smear, T, energies, parallelize, smear_id, selfengs, & + !$OMP irrqgrid, qgrid, weights, gaussian, classical) + do iqpt = 1, nirrqpt + allocate(self_energy(ne, 3*nat)) +! print*, iqpt + w_neg_freqs = .False. + print*, 'Calculating ', iqpt, ' point in the irreducible zone out of ', nirrqpt, '!' + qpt = irrqgrid(:, iqpt) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, qpt, w2_q, pols_q, d2_q) + call check_if_gamma(nat, qpt, kprim, w2_q, is_q_gamma) + + if(any(w2_q < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix!' + w_neg_freqs = .True. + endif +! print*, 'Interpolate frequency' + if(.not. w_neg_freqs) then + w_q = sqrt(w2_q) + self_energy(:,:) = complex(0.0_DP, 0.0_DP) + allocate(curr_grid(3, scatt_events(iqpt))) + allocate(curr_w(scatt_events(iqpt))) + if(iqpt > 1) then + prev_events = sum(scatt_events(1:iqpt-1)) + else + prev_events = 0 + endif + do jqpt = 1, scatt_events(iqpt) + curr_grid(:,jqpt) = qgrid(:,prev_events + jqpt) + curr_w(jqpt) = weights(prev_events + jqpt) + enddo +! print*, 'Got grids' + call calculate_self_energy_P(w_q, qpt, pols_q, is_q_gamma, scatt_events(iqpt), nat, nfc2, & + nfc3, ne, curr_grid, curr_w, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, masses, smear(:,iqpt), T, & + energies, .not. parallelize, gaussian, classical, self_energy) + deallocate(curr_grid) + tot_qpt = sum(curr_w) + deallocate(curr_w) + self_energy = self_energy/dble(tot_qpt) + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in self_energy' + endif + if(gaussian) then + call calculate_real_part_via_Kramers_Kronig(ne, 3*nat, self_energy, energies, w_q) + if(any(self_energy .ne. self_energy)) then + print*, 'NaN in Kramers Kronig' + endif + endif + tau(:) = 0.0_DP + omega(:) = 0.0_DP + call solve_selfconsistent_equation(ne, 3*nat, w_q, self_energy, energies, tau, omega) + + do i = 1, 3*nat + if(w_q(i) .ne. 0.0_DP) then + selfengs(iqpt, i) = complex(omega(i), tau(i)) + else + selfengs(iqpt, i) = complex(0.0_DP, 0.0_DP) + endif + enddo + else + selfengs(iqpt, :) = complex(0.0_DP, 0.0_DP) + endif + deallocate(self_energy) + + enddo + !$OMP END PARALLEL DO + + end subroutine calculate_lifetimes_selfconsistently + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine solve_selfconsistent_equation(ne, nband, w_q, self_energy, energies, tau, omega) + + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nband, ne + real(kind=DP), intent(in) :: w_q(nband), energies(ne) + complex(kind=DP), intent(in) :: self_energy(ne, nband) + real(kind=DP), intent(inout) :: tau(nband), omega(nband) + + integer :: iband, ie, ie0 + real(kind=DP) :: curr_freq, prev_freq, d_freq, den, rew, imw + + den = energies(2) - energies(1) + do iband = 1, nband + if(w_q(iband) > 0.0_DP) then + curr_freq = w_q(iband) + d_freq = curr_freq + do while(d_freq > den) + prev_freq = curr_freq + do ie = 2, ne + if(curr_freq - energies(ie) < 0.0_DP .and. curr_freq - energies(ie-1) > 0.0_DP) then + ie0 = ie + EXIT + endif + enddo + rew = dble(self_energy(ie0-1, iband)) + (curr_freq - energies(ie-1))*& + (dble(self_energy(ie0,iband)) - dble(self_energy(ie0-1, iband)))/den + if(w_q(iband)**2 + rew > 0.0_DP) then + curr_freq = sqrt(w_q(iband)**2 + rew) + else + curr_freq = 0.0_DP + EXIT + endif + d_freq = curr_freq - prev_freq + if(curr_freq .ne. curr_freq) then + print*, 'NaN in selfconsistent procedure!' + print*, ie0, self_energy(ie0-1, iband), self_energy(ie0, iband), rew, w_q(iband)**2 + STOP + endif + enddo + omega(iband) = curr_freq + if(curr_freq > 0.0_DP) then + do ie = 2, ne + if(omega(iband) - energies(ie) < 0.0_DP .and. omega(iband) - energies(ie-1) > 0.0_DP) then + ie0 = ie + EXIT + endif + enddo + imw = aimag(self_energy(ie0-1, iband)) + (omega(iband) - energies(ie-1))*& + (aimag(self_energy(ie0,iband)) - aimag(self_energy(ie0-1, iband)))/den + tau(iband) = imw/2.0_DP/w_q(iband) + else + omega(iband) = 0.0_DP + tau(iband) = 0.0_DP + endif + else + omega(iband) = 0.0_DP + tau(iband) = 0.0_DP + endif + enddo + + end subroutine solve_selfconsistent_equation + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_correlation_function(energies, w_q, self_energy, nat, ne, lineshape) + + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nat, ne + real(kind=DP), intent(in) :: w_q(3*nat), energies(ne) + complex(kind=DP), intent(in) :: self_energy(ne, 3*nat) + real(kind=DP), intent(inout) :: lineshape(ne, 3*nat) + + integer :: iband, ie + real(kind = DP) :: a, b + + lineshape(:,:) = 0.0_DP + do iband = 1, 3*nat + if(w_q(iband) .gt. 0.0_DP) then + do ie = 2, ne + a = (energies(ie)**2 - dble(self_energy(ie, iband)) - w_q(iband)**2) + b = aimag(self_energy(ie, iband)) + if(a .ne. 0.0_DP .and. b .ne. 0.0_DP) then + lineshape(ie, iband) = -aimag(self_energy(ie, iband))/(a**2+b**2) + endif + enddo + lineshape(:, iband) = lineshape(:, iband)*w_q(iband)/PI + endif + enddo + + end subroutine calculate_correlation_function + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_lifetimes_perturbative(irrqgrid, qgrid, weights, scatt_events, fc2, r2_2, & + fc3, r3_2, r3_3, rprim, pos, masses, smear, T, gaussian, & + classical, nirrqpt, nat, nfc2, nfc3, n_events, self_energies) + + use omp_lib + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nirrqpt, nat, nfc2, nfc3, n_events + integer, intent(in) :: weights(n_events), scatt_events(nirrqpt) + real(kind=DP), intent(in) :: irrqgrid(3, nirrqpt) + real(kind=DP), intent(in) :: qgrid(3, n_events) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: rprim(3, 3) + real(kind=DP), intent(in) :: pos(3, nat) + real(kind=DP), intent(in) :: masses(nat) + real(kind=DP), intent(in) :: smear(3*nat, nirrqpt) + real(kind=DP), intent(in) :: T + logical, intent(in) :: gaussian, classical + complex(kind=DP), dimension(nirrqpt, 3*nat), intent(out) :: self_energies + + integer :: iqpt, i, tot_qpt, jqpt, prev_events, nthreads + real(kind=DP), dimension(3) :: qpt + real(kind=DP), dimension(3,3) :: kprim + real(kind=DP), dimension(3*nat) :: w2_q, w_q + complex(kind=DP), dimension(3*nat, 3*nat) :: self_energy +! complex(kind=DP), allocatable, dimension(:,:) :: self_energy + complex(kind=DP), dimension(3*nat,3*nat) :: pols_q, d2_q + real(kind=DP), allocatable, dimension(:,:) :: curr_grid + integer, allocatable, dimension(:) :: curr_w + logical :: is_q_gamma, w_neg_freqs, parallelize + + self_energies(:,:) = 0.0_DP + kprim = transpose(inv(rprim)) + print*, 'Calculating phonon lifetimes in perturbative regime!' + + nthreads = omp_get_max_threads() + print*, 'Maximum number of threads available: ', nthreads + + parallelize = .True. + if(nirrqpt <= nthreads) then + parallelize = .False. + endif + + !$OMP PARALLEL DO IF(parallelize) & + !$OMP DEFAULT(SHARED) & + !$OMP PRIVATE(iqpt, w_neg_freqs, qpt, w2_q, pols_q, d2_q, is_q_gamma, self_energy, & + !$OMP curr_grid, w_q, curr_w, prev_events, tot_qpt) + do iqpt = 1, nirrqpt + + w_neg_freqs = .False. + print*, 'Calculating ', iqpt, ' point in the irreducible zone out of ', nirrqpt, '!' + qpt = irrqgrid(:, iqpt) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, qpt, w2_q, pols_q, d2_q) + call check_if_gamma(nat, qpt, kprim, w2_q, is_q_gamma) + if(any(w2_q < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!' + w_neg_freqs = .True. + endif + + if(.not. w_neg_freqs) then + w_q = sqrt(w2_q) + self_energy(:,:) = complex(0.0_DP, 0.0_DP) + allocate(curr_grid(3, scatt_events(iqpt))) + allocate(curr_w(scatt_events(iqpt))) + if(iqpt > 1) then + prev_events = sum(scatt_events(1:iqpt-1)) + else + prev_events = 0 + endif + do jqpt = 1, scatt_events(iqpt) + curr_grid(:,jqpt) = qgrid(:,prev_events + jqpt) + curr_w(jqpt) = weights(prev_events + jqpt) + enddo + call calculate_self_energy_P(w_q, qpt, pols_q, is_q_gamma, scatt_events(iqpt), nat, nfc2, & + nfc3, 3*nat, curr_grid, curr_w, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, masses, & + smear(:,iqpt), T, w_q, .not. parallelize, gaussian, classical, self_energy) + + deallocate(curr_grid) + tot_qpt = sum(curr_w) + deallocate(curr_w) + self_energy = self_energy/dble(tot_qpt) + + do i = 1, 3*nat + if(w_q(i) .ne. 0.0_DP) then + self_energies(iqpt, i) = self_energy(i,i)/2.0_DP/w_q(i) + else + self_energies(iqpt, i) = complex(0.0_DP, 0.0_DP) + endif + enddo + else + self_energies(iqpt, :) = complex(0.0_DP, 0.0_DP) + endif + + enddo + !$OMP END PARALLEL DO + + + end subroutine calculate_lifetimes_perturbative + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_lifetimes(irrqgrid, qgrid, weights, scatt_events, fc2, r2_2, & + fc3, r3_2, r3_3, rprim, pos, masses, smear, T, gaussian, classical, nirrqpt, & + nat, nfc2, nfc3, n_events, self_energies) + + use omp_lib + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nirrqpt, nat, nfc2, nfc3, n_events + integer, intent(in) :: weights(n_events), scatt_events(nirrqpt) + real(kind=DP), intent(in) :: irrqgrid(3, nirrqpt) + real(kind=DP), intent(in) :: qgrid(3, n_events) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: rprim(3, 3) + real(kind=DP), intent(in) :: pos(3, nat) + real(kind=DP), intent(in) :: masses(nat) + real(kind=DP), intent(in) :: smear(3*nat, nirrqpt) + real(kind=DP), intent(in) :: T + logical, intent(in) :: gaussian, classical + complex(kind=DP), dimension(nirrqpt, 3*nat), intent(out) :: self_energies + + integer :: iqpt, i, prev_events, jqpt, tot_qpt, nthreads + real(kind=DP) :: start_time, curr_time + real(kind=DP), dimension(3) :: qpt + real(kind=DP), dimension(3,3) :: kprim + real(kind=DP), dimension(3*nat) :: w2_q, w_q + complex(kind=DP), dimension(3*nat) :: self_energy + complex(kind=DP), dimension(3*nat,3*nat) :: pols_q, d2_q + real(kind=DP), allocatable, dimension(:,:) :: curr_grid + integer, allocatable, dimension(:) :: curr_w + logical :: is_q_gamma, w_neg_freqs, parallelize + + call cpu_time(start_time) + self_energies(:,:) = complex(0.0_DP, 0.0_DP) + kprim = transpose(inv(rprim)) + print*, 'Calculating phonon lifetimes in Lorentzian regime!' + + nthreads = omp_get_max_threads() + print*, 'Maximum number of threads available: ', nthreads + + parallelize = .True. + if(nirrqpt <= nthreads) then + parallelize = .False. + endif + + !$OMP PARALLEL DO IF(parallelize) & + !$OMP DEFAULT(SHARED) & + !$OMP PRIVATE(iqpt, w_neg_freqs, qpt, w2_q, pols_q, d2_q, is_q_gamma, self_energy, & + !$OMP curr_grid, w_q, curr_w, prev_events, tot_qpt) + do iqpt = 1, nirrqpt + + w_neg_freqs = .False. + print*, 'Calculating ', iqpt, ' point in the irreducible zone out of ', nirrqpt, '!' + !call cpu_time(curr_time) + !print*, 'Since start: ', curr_time - start_time, ' seconds!' + qpt = irrqgrid(:, iqpt) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, qpt, w2_q, pols_q, d2_q) + call check_if_gamma(nat, qpt, kprim, w2_q, is_q_gamma) + ! print*, 'Got frequencies' + if(any(w2_q < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!' + w_neg_freqs = .True. + endif + + if(.not. w_neg_freqs) then + w_q = sqrt(w2_q) + self_energy(:) = complex(0.0_DP, 0.0_DP) + allocate(curr_grid(3, scatt_events(iqpt))) + allocate(curr_w(scatt_events(iqpt))) + if(iqpt > 1) then + prev_events = sum(scatt_events(1:iqpt-1)) + else + prev_events = 0 + endif + do jqpt = 1, scatt_events(iqpt) + curr_grid(:,jqpt) = qgrid(:,prev_events + jqpt) + curr_w(jqpt) = weights(prev_events + jqpt) + enddo + call calculate_self_energy_LA(w_q, qpt, pols_q, is_q_gamma, scatt_events(iqpt), nat, nfc2, nfc3, curr_grid, & + curr_w, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, & + masses, smear(:,iqpt), T, .not. parallelize, gaussian, classical, self_energy) + + deallocate(curr_grid) + tot_qpt = sum(curr_w) + deallocate(curr_w) + self_energy = self_energy/dble(tot_qpt) + else + self_energy(:) = complex(0.0_DP, 0.0_DP) + endif + + do i = 1, 3*nat + if(w_q(i) .ne. 0.0_DP) then + self_energies(iqpt, i) = sqrt(w_q(i)**2 + self_energy(i)) + else + self_energies(iqpt, i) = complex(0.0_DP, 0.0_DP) + endif + enddo + + enddo + !$OMP END PARALLEL DO + + + end subroutine calculate_lifetimes + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_self_energy_LA(w_q, qpt, pols_q, is_q_gamma, nqpt, nat, nfc2, nfc3, & + qgrid, weights, fc2, fc3, & + r2_2, r3_2, r3_3, pos, kprim, masses, smear, T, parallelize, gaussian, classical, self_energy) + + use omp_lib + use third_order_cond + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nqpt, nat, nfc2, nfc3 + integer, intent(in) :: weights(nqpt) + real(kind=DP), intent(in) :: w_q(3*nat), qpt(3), qgrid(3,nqpt) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat), kprim(3,3) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2), pos(3, nat) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: masses(nat) + real(kind=DP), intent(in) :: smear(3*nat) + real(kind=DP), intent(in) :: T + complex(kind=DP), intent(in) :: pols_q(3*nat,3*nat) + logical, intent(in) :: is_q_gamma, parallelize, gaussian, classical + complex(kind=DP), intent(out) :: self_energy(3*nat) + + integer :: jqpt, iat, jat, kat, i, j, k, i1, j1, k1 + real(kind=DP), dimension(3) :: kpt, mkpt, mkpt_r + real(kind=DP), dimension(3*nat) :: w2_k, w2_mk_mq + real(kind=DP), dimension(3*nat) :: w_k, w_mk_mq + real(kind=DP), allocatable, dimension(:,:,:) :: mass_array + real(kind=DP), dimension(3*nat, 3) :: freqs_array + real(kind=DP), dimension(3, 3) :: ikprim + complex(kind=DP), dimension(3*nat) :: selfnrg + complex(kind=DP), dimension(3*nat,3*nat) :: pols_k, pols_mk_mq, pols_k2, pols_mk_mq2 +! complex(kind=DP), dimension(3*nat, 3*nat, 3*nat) :: ifc3, d3, d3_pols + complex(kind=DP), allocatable, dimension(:, :, :) :: ifc3, d3, d3_pols, intermediate + logical :: is_k_gamma, is_mk_mq_gamma, is_k_neg, is_mk_mq_neg + logical, dimension(3) :: if_gammas + + ikprim = inv(kprim) + self_energy = complex(0.0_DP, 0.0_DP) + allocate(mass_array(3*nat, 3*nat, 3*nat)) + do iat = 1, nat + do jat = 1, nat + do kat = 1, nat + mass_array(3*(kat - 1) + 1:3*kat, 3*(jat - 1) + 1:3*jat, 3*(iat - 1) + 1:3*iat) = & + 1.0_DP/sqrt(masses(iat)*masses(jat)*masses(kat)) + enddo + enddo + enddo + + ! print*, 'Calculating self-energy!' + !$OMP PARALLEL DO IF(parallelize) DEFAULT(NONE) & + !$OMP PRIVATE(i,j,k,i1,j1,k1, jqpt, ifc3, d3, d3_pols, kpt, mkpt, mkpt_r, is_k_gamma, is_mk_mq_gamma, w2_k, w2_mk_mq, & + !$OMP w_k, w_mk_mq, pols_k, pols_mk_mq, pols_k2, pols_mk_mq2, iat, jat, kat, freqs_array, if_gammas, & + !$OMP is_k_neg, is_mk_mq_neg, selfnrg, intermediate) & + !$OMP SHARED(nqpt, nat, fc3, r3_2, r3_3, pos, nfc2, nfc3, masses, fc2, smear, T, weights, qgrid, qpt, kprim, is_q_gamma, & + !$OMP r2_2, w_q, pols_q, mass_array, gaussian, classical, ikprim) & + !$OMP REDUCTION(+:self_energy) + do jqpt = 1, nqpt +! print*, jqpt + allocate(ifc3(3*nat, 3*nat, 3*nat), d3(3*nat, 3*nat, 3*nat), d3_pols(3*nat, 3*nat, 3*nat)) + allocate(intermediate(3*nat, 3*nat, 3*nat)) + is_k_neg = .False. + is_mk_mq_neg = .False. + ifc3(:,:,:) = complex(0.0_DP, 0.0_DP) + d3(:,:,:) = complex(0.0_DP, 0.0_DP) + d3_pols(:,:,:) = complex(0.0_DP, 0.0_DP) + + kpt = qgrid(:, jqpt) + mkpt = -1.0_DP*qpt - kpt + do i = 1, 3 + mkpt_r(i) = dot_product(mkpt, ikprim(:,i)) + if(mkpt_r(i) > 0.50_DP) then + mkpt_r(i) = mkpt_r(i) - 1.0_DP + else if(mkpt_r(i) < -0.50_DP) then + mkpt_r(i) = mkpt_r(i) + 1.0_DP + endif + enddo + do i = 1, 3 + mkpt(i) = dot_product(mkpt_r, kprim(:,i)) + enddo + call interpol_v2(fc3, r3_2, r3_3,pos, kpt, mkpt, ifc3, nfc3, nat) + ! call interpol_v3(fc3, pos, r3_2, r3_3, qpt, kpt, mkpt, ifc3, nfc3, nat) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, kpt, w2_k, pols_k, pols_k2) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, mkpt, w2_mk_mq, pols_mk_mq, pols_mk_mq2) + + call check_if_gamma(nat, kpt, kprim, w2_k, is_k_gamma) + call check_if_gamma(nat, mkpt, kprim, w2_mk_mq, is_mk_mq_gamma) + if(any(w2_k < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!' + is_k_neg = .True. + endif + if(any(w2_mk_mq < 0.0_DP)) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!' + is_mk_mq_neg = .True. + endif + + if(.not. is_k_neg .and. .not. is_mk_mq_neg) then + w_k = sqrt(w2_k) + w_mk_mq = sqrt(w2_mk_mq) + + d3 = ifc3*mass_array + + !do i = 1, 3*nat + !do i1 = 1, 3*nat + ! d3_pols(:,:,i) = d3_pols(:,:,i) + & + ! matmul(matmul(transpose(pols_q), d3(:,:,i1)), pols_k)*pols_mk_mq(i1,i) + !enddo + !enddo + intermediate = complex(0.0_DP, 0.0_DP) + do i=1,3*nat + intermediate(:,:,i) = matmul(matmul(transpose(pols_q), d3(:,:,i)), pols_k) + enddo + + do i1=1,3*nat + d3_pols(:,i1,:) = matmul(intermediate(:,i1,:), pols_mk_mq) + enddo + + freqs_array(:, 1) = w_q + freqs_array(:, 2) = w_k + freqs_array(:, 3) = w_mk_mq + + if_gammas(1) = is_q_gamma + if_gammas(2) = is_k_gamma + if_gammas(3) = is_mk_mq_gamma + + selfnrg = complex(0.0_DP,0.0_DP) + call compute_perturb_selfnrg_single(smear,T, & + freqs_array, if_gammas, d3_pols, 3*nat, gaussian, classical, selfnrg) + self_energy = self_energy + selfnrg*dble(weights(jqpt)) + endif + deallocate(ifc3, d3, d3_pols, intermediate) + enddo + !$OMP END PARALLEL DO + + end subroutine calculate_self_energy_LA + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_self_energy_P(w_q, qpt, pols_q, is_q_gamma, nqpt, nat, nfc2, nfc3, ne, qgrid, & + weights, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, masses, smear, T, energies, & + parallelize, gaussian, classical, self_energy) + + use omp_lib + use third_order_cond + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nqpt, nat, nfc2, nfc3, ne + integer, intent(in) :: weights(nqpt) + real(kind=DP), intent(in) :: w_q(3*nat), qpt(3), qgrid(3,nqpt) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat), kprim(3,3) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2), pos(3, nat) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: masses(nat) + real(kind=DP), intent(in) :: smear(3*nat), energies(ne) + real(kind=DP), intent(in) :: T + complex(kind=DP), intent(in) :: pols_q(3*nat,3*nat) + logical, intent(in) :: is_q_gamma, parallelize, gaussian, classical + complex(kind=DP), intent(out) :: self_energy(ne, 3*nat) + + integer :: jqpt, iat, jat, kat, i, j, k, i1, j1, k1 +! real(kind=DP), dimension(3) :: kpt, mkpt +! real(kind=DP), dimension(3*nat) :: w2_k, w2_mk_mq +! real(kind=DP), dimension(3*nat) :: w_k, w_mk_mq + real(kind=DP), allocatable, dimension(:) :: kpt, mkpt, w2_k, w2_mk_mq, w_k, w_mk_mq +! real(kind=DP), dimension(3*nat, 3) :: freqs_array + real(kind=DP), allocatable, dimension(:, :) :: freqs_array + real(kind=DP), allocatable, dimension(:, :, :) :: mass_array + !complex(kind=DP), dimension(ne, 3*nat) :: selfnrg + complex(kind=DP), allocatable, dimension(:, :) :: selfnrg + complex(kind=DP), allocatable,dimension(:,:) :: pols_k, pols_mk_mq, pols_k2, pols_mk_mq2 + complex(kind=DP), allocatable, dimension(:, :, :) :: ifc3, d3, d3_pols, intermediate + logical :: is_k_gamma, is_mk_mq_gamma, is_k_neg, is_mk_mq_neg + logical, dimension(3) :: if_gammas + + +! allocate(self_energy(ne, 3*nat)) + self_energy = complex(0.0_DP, 0.0_DP) +! allocate(mass_array(3*nat, 3*nat, 3*nat)) +! do iat = 1, nat +! do jat = 1, nat +! do kat = 1, nat +! mass_array(3*(kat - 1) + 1:3*kat, 3*(jat - 1) + 1:3*jat, 3*(iat - 1) + 1:3*iat) = & +! 1.0_DP/sqrt(masses(iat)*masses(jat)*masses(kat)) +! enddo +! enddo +! enddo + +! print*, 'Starting with self energy!' + !$OMP PARALLEL DO IF(parallelize) & + !$OMP DEFAULT(NONE) & + !$OMP PRIVATE(jqpt, ifc3, d3, d3_pols, kpt, mkpt, w2_k, pols_k, pols_k2, w2_mk_mq, pols_mk_mq, pols_mk_mq2,& + !$OMP is_k_gamma, is_mk_mq_gamma, intermediate, & + !$OMP is_k_neg, is_mk_mq_neg, w_k, w_mk_mq, i,j,k,i1,j1,k1,iat,jat,kat, freqs_array, if_gammas, selfnrg) & + !$OMP SHARED(nqpt, qgrid, fc3, r3_2, r3_3, pos, qpt, nfc3, nat, nfc2, fc2, r2_2, masses, is_q_gamma, smear, & + !$OMP T, energies, ne, w_q, pols_q,weights, kprim, gaussian, classical) & + !$OMP REDUCTION(+:self_energy) + do jqpt = 1, nqpt +! print*, jqpt + allocate(ifc3(3*nat, 3*nat, 3*nat), d3(3*nat, 3*nat, 3*nat), d3_pols(3*nat, 3*nat, 3*nat)) + allocate(intermediate(3*nat, 3*nat, 3*nat)) + allocate(selfnrg(ne, 3*nat)) + allocate(pols_k(3*nat,3*nat), pols_mk_mq(3*nat,3*nat)) + allocate(pols_k2(3*nat,3*nat), pols_mk_mq2(3*nat,3*nat)) + allocate(kpt(3), mkpt(3)) + allocate(w2_k(3*nat), w2_mk_mq(3*nat), w_k(3*nat), w_mk_mq(3*nat)) + allocate(freqs_array(3*nat, 3)) + is_k_neg = .False. + is_mk_mq_neg = .False. + ifc3(:,:,:) = complex(0.0_DP, 0.0_DP) + d3(:,:,:) = complex(0.0_DP, 0.0_DP) + d3_pols(:,:,:) = complex(0.0_DP, 0.0_DP) + + kpt = qgrid(:, jqpt) + mkpt = -1.0_DP*qpt - kpt + call interpol_v2(fc3, r3_2, r3_3, pos, kpt, mkpt, ifc3, nfc3, nat) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, kpt, w2_k, pols_k, pols_k2) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, mkpt, w2_mk_mq, pols_mk_mq, pols_mk_mq2) + + call check_if_gamma(nat, kpt, kprim, w2_k, is_k_gamma) + call check_if_gamma(nat, mkpt, kprim, w2_mk_mq, is_mk_mq_gamma) + if(any(w2_k < 0.0_DP) .and. .not. is_k_gamma) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!', is_k_gamma + print*, kpt + print*, vec_dot_mat(qpt, inv(kprim)) + print*, vec_dot_mat(kpt, inv(kprim)) + print*, vec_dot_mat(mkpt, inv(kprim)) + print*, kprim + print*, w2_k + is_k_neg = .True. + endif + if(any(w2_mk_mq < 0.0_DP) .and. .not. is_mk_mq_gamma) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!', is_mk_mq_gamma, 'mk_mq_gamma' + print*, mkpt + print*, vec_dot_mat(qpt, inv(kprim)) + print*, vec_dot_mat(kpt, inv(kprim)) + print*, vec_dot_mat(mkpt, inv(kprim)) + print*, kprim + print*, w2_mk_mq + is_mk_mq_neg = .True. + endif +! print*, 'Calculated frequencies! ' + if(.not. is_k_neg .and. .not. is_mk_mq_neg) then + w_k = sqrt(w2_k) + w_mk_mq = sqrt(w2_mk_mq) + + do iat = 1, nat + do i = 1, 3 + do jat = 1, nat + do j = 1, 3 + do kat = 1, nat + do k = 1, 3 + d3(k + 3*(kat - 1), j + 3*(jat - 1), i + 3*(iat - 1)) = & + ifc3(k + 3*(kat - 1), j + 3*(jat - 1), i + 3*(iat - 1))& + /sqrt(masses(iat)*masses(jat)*masses(kat)) + enddo + enddo + enddo + enddo + enddo + enddo + + !do i = 1, 3*nat + !do i1 = 1, 3*nat + ! d3_pols(:,:,i) = d3_pols(:,:,i) + & + ! matmul(matmul(transpose(pols_q), d3(:,:,i1)), pols_k)*pols_mk_mq(i1,i) + !enddo + !enddo + + intermediate = complex(0.0_DP, 0.0_DP) + do i=1,3*nat + intermediate(:,:,i) = matmul(matmul(transpose(pols_q), d3(:,:,i)), pols_k) + enddo + + do i1=1,3*nat + d3_pols(:,i1,:) = matmul(intermediate(:,i1,:), pols_mk_mq) + enddo + +! print*, 'Got d3pols' + + freqs_array(:, 1) = w_q + freqs_array(:, 2) = w_k + freqs_array(:, 3) = w_mk_mq + + if_gammas(1) = is_q_gamma + if_gammas(2) = is_k_gamma + if_gammas(3) = is_mk_mq_gamma + + selfnrg = complex(0.0_DP,0.0_DP) + call compute_diag_dynamic_bubble_single(energies, smear, T, freqs_array, if_gammas, & + d3_pols, ne, 3*nat, gaussian, classical, selfnrg) +! print*, 'Got selfnrg!' + self_energy = self_energy + selfnrg*dble(weights(jqpt)) + if(any(self_energy .ne. self_energy)) then + print*, 'NaN for jqpt', jqpt + endif + deallocate(ifc3, d3, d3_pols, selfnrg) + deallocate(pols_k, pols_mk_mq, intermediate) + deallocate(pols_k2, pols_mk_mq2) + deallocate(kpt, mkpt) + deallocate(w2_k, w2_mk_mq, w_k, w_mk_mq) + deallocate(freqs_array) + else + deallocate(ifc3, d3, d3_pols, selfnrg) + deallocate(pols_k, pols_mk_mq) + deallocate(pols_k2, pols_mk_mq2) + deallocate(kpt, mkpt) + deallocate(w2_k, w2_mk_mq, w_k, w_mk_mq) + deallocate(freqs_array) + endif + enddo + !$OMP END PARALLEL DO +! print*, 'Finished with self energy!' + end subroutine calculate_self_energy_P + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_self_energy_full(w_q, qpt, pols_q, is_q_gamma, nqpt, nat, nfc2, nfc3, ne, qgrid, & + weights, fc2, fc3, r2_2, r3_2, r3_3, pos, kprim, masses, smear, T, energies, & + parallelize, gaussian, classical, self_energy) + + use omp_lib + use third_order_cond + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nqpt, nat, nfc2, nfc3, ne + integer, intent(in) :: weights(nqpt) + real(kind=DP), intent(in) :: w_q(3*nat), qpt(3), qgrid(3,nqpt) + real(kind=DP), intent(in) :: fc2(nfc2, 3*nat, 3*nat), kprim(3,3) + real(kind=DP), intent(in) :: fc3(nfc3, 3*nat, 3*nat, 3*nat) + real(kind=DP), intent(in) :: r2_2(3, nfc2), pos(3, nat) + real(kind=DP), intent(in) :: r3_2(3, nfc3), r3_3(3, nfc3) + real(kind=DP), intent(in) :: masses(nat) + real(kind=DP), intent(in) :: smear(3*nat), energies(ne) + real(kind=DP), intent(in) :: T + complex(kind=DP), intent(in) :: pols_q(3*nat,3*nat) + logical, intent(in) :: is_q_gamma, parallelize, gaussian, classical + complex(kind=DP), intent(out) :: self_energy(ne, 3*nat, 3*nat) + + integer :: jqpt, iat, jat, kat, i, j, k, i1, j1, k1 + real(kind=DP), allocatable, dimension(:) :: kpt, mkpt, w2_k, w2_mk_mq, w_k, w_mk_mq + real(kind=DP), allocatable, dimension(:, :) :: freqs_array + real(kind=DP), allocatable, dimension(:, :, :) :: mass_array + complex(kind=DP), allocatable, dimension(:, :, :) :: selfnrg + complex(kind=DP), allocatable,dimension(:,:) :: pols_k, pols_mk_mq, pols_k2, pols_mk_mq2 + complex(kind=DP), allocatable, dimension(:, :, :) :: ifc3, d3, d3_pols, intermediate + logical :: is_k_gamma, is_mk_mq_gamma, is_k_neg, is_mk_mq_neg + logical, dimension(3) :: if_gammas + + !print*, 'Initialize self energy!' + self_energy(:,:,:) = complex(0.0_DP, 0.0_DP) + !print*, 'Initialized self energy!' + !$OMP PARALLEL DO IF(parallelize) & + !$OMP DEFAULT(NONE) & + !$OMP PRIVATE(jqpt, ifc3, d3, d3_pols, kpt, mkpt, w2_k, pols_k, pols_k2, w2_mk_mq, pols_mk_mq, pols_mk_mq2,& + !$OMP is_k_gamma, is_mk_mq_gamma, intermediate, & + !$OMP is_k_neg, is_mk_mq_neg, w_k, w_mk_mq, i,j,k,i1,j1,k1,iat,jat,kat, freqs_array, if_gammas, selfnrg) & + !$OMP SHARED(nqpt, qgrid, fc3, r3_2, r3_3, pos, qpt, nfc3, nat, nfc2, fc2, r2_2, masses, is_q_gamma, smear, & + !$OMP T, energies, ne, w_q, pols_q,weights, kprim, gaussian, classical) & + !$OMP REDUCTION(+:self_energy) + do jqpt = 1, nqpt + !print*, jqpt + allocate(intermediate(3*nat, 3*nat, 3*nat)) + allocate(ifc3(3*nat, 3*nat, 3*nat), d3(3*nat, 3*nat, 3*nat), d3_pols(3*nat, 3*nat, 3*nat)) + allocate(selfnrg(ne, 3*nat, 3*nat)) + allocate(pols_k(3*nat,3*nat), pols_mk_mq(3*nat,3*nat)) + allocate(pols_k2(3*nat,3*nat), pols_mk_mq2(3*nat,3*nat)) + allocate(kpt(3), mkpt(3)) + allocate(w2_k(3*nat), w2_mk_mq(3*nat), w_k(3*nat), w_mk_mq(3*nat)) + allocate(freqs_array(3*nat, 3)) + is_k_neg = .False. + is_mk_mq_neg = .False. + ifc3(:,:,:) = complex(0.0_DP, 0.0_DP) + d3(:,:,:) = complex(0.0_DP, 0.0_DP) + d3_pols(:,:,:) = complex(0.0_DP, 0.0_DP) + + kpt = qgrid(:, jqpt) + mkpt = -1.0_DP*qpt - kpt + call interpol_v2(fc3, r3_2, r3_3, pos, kpt, mkpt, ifc3, nfc3, nat) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, kpt, w2_k, pols_k, pols_k2) + call interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, mkpt, w2_mk_mq, pols_mk_mq, pols_mk_mq2) + + call check_if_gamma(nat, kpt, kprim, w2_k, is_k_gamma) + call check_if_gamma(nat, mkpt, kprim, w2_mk_mq, is_mk_mq_gamma) + if(any(w2_k < 0.0_DP) .and. .not. is_k_gamma) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!', is_k_gamma + print*, kpt + print*, vec_dot_mat(qpt, inv(kprim)) + print*, vec_dot_mat(kpt, inv(kprim)) + print*, vec_dot_mat(mkpt, inv(kprim)) + print*, kprim + print*, w2_k + is_k_neg = .True. + endif + if(any(w2_mk_mq < 0.0_DP) .and. .not. is_mk_mq_gamma) then + print*, 'Negative eigenvalue of dynamical matrix! Exit!', is_mk_mq_gamma, 'mk_mq_gamma' + print*, mkpt + print*, vec_dot_mat(qpt, inv(kprim)) + print*, vec_dot_mat(kpt, inv(kprim)) + print*, vec_dot_mat(mkpt, inv(kprim)) + print*, kprim + print*, w2_mk_mq + is_mk_mq_neg = .True. + endif +! print*, 'Calculated frequencies! ' + if(.not. is_k_neg .and. .not. is_mk_mq_neg) then + w_k = sqrt(w2_k) + w_mk_mq = sqrt(w2_mk_mq) + + do iat = 1, nat + do i = 1, 3 + do jat = 1, nat + do j = 1, 3 + do kat = 1, nat + do k = 1, 3 + d3(k + 3*(kat - 1), j + 3*(jat - 1), i + 3*(iat - 1)) = & + ifc3(k + 3*(kat - 1), j + 3*(jat - 1), i + 3*(iat - 1))& + /sqrt(masses(iat)*masses(jat)*masses(kat)) + enddo + enddo + enddo + enddo + enddo + enddo + + !do i = 1, 3*nat + !do i1 = 1, 3*nat + ! d3_pols(:,:,i) = d3_pols(:,:,i) + & + ! matmul(matmul(transpose(pols_q), d3(:,:,i1)), pols_k)*pols_mk_mq(i1,i) + !enddo + !enddo + intermediate = complex(0.0_DP, 0.0_DP) + do i=1,3*nat + intermediate(:,:,i) = matmul(matmul(transpose(pols_q), d3(:,:,i)), pols_k) + enddo + + do i1=1,3*nat + d3_pols(:,i1,:) = matmul(intermediate(:,i1,:), pols_mk_mq) + enddo + + freqs_array(:, 1) = w_q + freqs_array(:, 2) = w_k + freqs_array(:, 3) = w_mk_mq + + if_gammas(1) = is_q_gamma + if_gammas(2) = is_k_gamma + if_gammas(3) = is_mk_mq_gamma + + selfnrg = complex(0.0_DP,0.0_DP) + call compute_full_dynamic_bubble_single(energies, smear, T, freqs_array, if_gammas, & + d3_pols, ne, 3*nat, gaussian, classical, selfnrg) +! print*, 'Got selfnrg!' + self_energy = self_energy + selfnrg*dble(weights(jqpt)) + if(any(self_energy .ne. self_energy)) then + print*, 'NaN for jqpt', jqpt + endif + deallocate(intermediate) + deallocate(ifc3, d3, d3_pols, selfnrg) + deallocate(pols_k, pols_mk_mq) + deallocate(pols_k2, pols_mk_mq2) + deallocate(kpt, mkpt) + deallocate(w2_k, w2_mk_mq, w_k, w_mk_mq) + deallocate(freqs_array) + else + deallocate(ifc3, d3, d3_pols, selfnrg) + deallocate(pols_k, pols_mk_mq) + deallocate(pols_k2, pols_mk_mq2) + deallocate(kpt, mkpt) + deallocate(w2_k, w2_mk_mq, w_k, w_mk_mq) + deallocate(freqs_array) + endif + enddo + !$OMP END PARALLEL DO +! print*, 'Finished with self energy!' + end subroutine calculate_self_energy_full + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine check_if_gamma(nat, q, kprim, w2_q, is_gamma) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nat + real(kind=DP), dimension(3), intent(in) :: q + real(kind=DP), intent(in) :: kprim(3,3) + + real(kind=DP), dimension(3*nat), intent(inout) :: w2_q + logical, intent(out) :: is_gamma + + integer :: iat, i1, j1, k1 + real(kind=DP) :: ikprim(3,3), red_q(3) + + ikprim = inv(kprim) + is_gamma = .FALSE. + if(all(abs(q) < 1.0d-6)) then + is_gamma = .TRUE. + do iat = 1, 3 + w2_q(iat) = 0.0_DP + enddo + else + red_q(:) = vec_dot_mat(q, ikprim) + !do iat = 1, 3 + ! red_q = red_q + q(iat)*ikprim(iat, :) + !enddo + do iat = 1, 3 + red_q(iat) = red_q(iat) - dble(NINT(red_q(iat))) + enddo + if(all(abs(red_q) < 2.0d-3)) then + is_gamma = .TRUE. + do iat = 1, 3 + w2_q(iat) = 0.0_DP + enddo + endif + endif + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + function vec_dot_mat(v1, m1) result (v2) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + real(kind=DP),intent(in) :: m1(:,:), v1(:) + real(kind=DP) :: v2(size(v1)) + + integer :: i + + v2 = 0.0_DP + do i = 1, 3 + v2 = v2 + v1(i)*m1(i,:) + enddo + + end function vec_dot_mat + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_real_part_via_Kramers_Kronig(ne, nband, self_energy, energies, freq) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: ne, nband + real(kind=DP), intent(in) :: energies(ne), freq(nband) + complex(kind=DP), intent(inout) :: self_energy(ne, nband) + + integer :: iband, i, j + real(kind=DP) :: diff, suma, rse, correction + real(kind=DP), dimension(ne) :: im_part + + do iband = 1, nband + !im_part = self_energy(:,iband)/freq(iband)/2.0_DP + do i = 1, ne + rse = 0.0_DP + do j = 1, ne + if(i .ne. j) then + diff = 1.0_DP/(energies(j) - energies(i)) + suma = 1.0_DP/(energies(j) + energies(i)) + rse = rse + aimag(self_energy(j, iband))*(diff - suma)*(energies(2) - energies(1))/PI + else + suma = 1.0_DP/(energies(j) + energies(i)) + rse = rse - aimag(self_energy(j, iband))*suma*(energies(2) - energies(1))/PI + endif + enddo + if(i > 1 .and. i < ne) then + correction = (aimag(self_energy(i+1, iband)) - aimag(self_energy(i-1, iband)))/2.0_DP + else + correction = 0.0_DP + endif + self_energy(i, iband) = complex(rse + correction, aimag(self_energy(i, iband))) + enddo + enddo + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_real_part_via_Kramers_Kronig_2d(ne, nband, self_energy, energies, freq) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: ne, nband + real(kind=DP), intent(in) :: energies(ne), freq(nband) + complex(kind=DP), intent(inout) :: self_energy(ne, nband, nband) + + integer :: iband, jband, i, j + real(kind=DP) :: diff, suma, rse, correction + + do iband = 1, nband + do jband = 1, nband + do i = 1, ne + rse = 0.0_DP + do j = 1, ne + if(i .ne. j) then + diff = 1.0_DP/(energies(j) - energies(i)) + suma = 1.0_DP/(energies(j) + energies(i)) + rse = rse + aimag(self_energy(j, iband, jband))*(diff - suma)*(energies(2) - energies(1))/PI + else + suma = 1.0_DP/(energies(j) + energies(i)) + rse = rse - aimag(self_energy(j, iband, jband))*suma*(energies(2) - energies(1))/PI + endif + enddo + if(i > 1 .and. i < ne) then + correction = (aimag(self_energy(i+1, iband, jband)) - aimag(self_energy(i-1, iband, jband)))/2.0_DP + else + correction = 0.0_DP + endif + self_energy(i, iband, jband) = complex(rse + correction, aimag(self_energy(i, iband, jband))) + enddo + enddo + enddo + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine hilbert_transform_via_FFT(ne, nband, self_energy) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: ne, nband + complex(kind=DP), intent(inout) :: self_energy(ne, nband) + + integer :: iband, ie + real(kind=DP) :: dummy(2*ne + 1) + + dummy = 0.0_DP + do iband = 1, nband + dummy(ne + 2:2*ne + 1) = aimag(self_energy(:,iband)) + dummy(1:ne) = -aimag(self_energy(:,iband)) + call ht(dummy, 2*ne + 1) + do ie = 1, ne + self_energy(ie,iband) = complex(dummy(ie), aimag(self_energy(ie,iband))) + enddo + enddo + + + end subroutine hilbert_transform_via_FFT + + subroutine ht(x,n) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + complex(kind=DP), parameter :: CI = (0.0_DP, 1.0_DP) + integer, intent(in) :: n + real(kind=DP), intent(inout) :: x(n) + + complex(kind=DP), allocatable, dimension(:) :: C + integer :: npt,imid + + ! pad x to a power of 2 + + npt = 2**(INT(LOG10(dble(n))/0.30104)+1) + + allocate(C(npt)) + C=cmplx(0.0_DP,0.0_DP, kind=DP) + C(1:n)=cmplx(x(1:n),0.0_DP, kind=DP) + + call CFFT(C,npt,1) + C=C/dble(npt) + + imid = npt / 2 + C(1:imid-1) = -CI * C(1:imid-1) + C(imid) = 0.0_DP + C(imid+1:npt) = CI * C(imid+1:npt) ! neg. spectrum (i) + + ! inverse Fourier transform + call CFFT(C,npt,-1) + + ! output + x(1:n)=dble(C(1:n)) + + deallocate(C) + + end subroutine ht + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine CFFT(x,n,isig) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: n, isig + complex(kind=DP), intent(inout) :: x(n) + integer :: i1, i2a, i2b, i3, i3rev, ip1, ip2, isig1 + real(kind=DP) :: theta, sinth + complex(kind=DP) :: temp, w, wstp + + isig1 = -isig + i3rev = 1 + + DO i3 = 1, n + IF ( i3 < i3rev ) THEN + temp = x(i3) + x(i3) = x(i3rev) + x(i3rev) = temp + ENDIF + ip1 = n / 2 + DO WHILE ( i3rev > ip1 ) + IF ( ip1 <= 1 ) EXIT + i3rev = i3rev - ip1 + ip1 = ip1 / 2 + END DO + i3rev = i3rev + ip1 + END DO + + ip1 = 1 + + DO WHILE (ip1 < n) + ip2 = ip1 * 2 + theta = 2.0_DP*pi/ dble(isig1*ip2) + sinth = sin( theta / 2.0_DP) + wstp = complex(-2.0_DP*sinth*sinth, SIN(theta)) + w = 1.0_DP + + DO i1 = 1, ip1 + DO i3 = i1, n, ip2 + i2a = i3 + i2b = i2a + ip1 + temp = w*x(i2b) + x(i2b) = x(i2a) - temp + x(i2a) = x(i2a) + temp + END DO + w = w*wstp+w + END DO + ip1 = ip2 + END DO + + RETURN + END SUBROUTINE CFFT + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + function inv(A) result(Ainv) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + real(kind=DP),intent(in) :: A(:,:) + real(kind=DP) :: Ainv(size(A,1),size(A,2)) + real(kind=DP) :: work(size(A,1)) ! work array for LAPACK + integer :: n,info,ipiv(size(A,1)) ! pivot indices + + ! Store A in Ainv to prevent it from being overwritten by LAPACK + Ainv = A + n = size(A,1) + ! DGETRF computes an LU factorization of a general M-by-N matrix A + ! using partial pivoting with row interchanges. + call DGETRF(n,n,Ainv,n,ipiv,info) + if (info.ne.0) stop 'Matrix is numerically singular!' + ! DGETRI computes the inverse of a matrix using the LU factorization + ! computed by DGETRF. + call DGETRI(n,Ainv,n,ipiv,work,n,info) + if (info.ne.0) stop 'Matrix inversion failed!' + end function inv + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine interpolate_fc2(nfc2, nat, fc2, r2_2, masses, pos, q, w2_q, pols_q, pols_q1) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + integer, intent(in) :: nfc2, nat + real(kind=DP), dimension(nfc2, 3*nat, 3*nat), intent(in) :: fc2 + real(kind=DP), dimension(3, nfc2), intent(in) :: r2_2 + real(kind=DP), dimension(3, nat), intent(in) :: pos + real(kind=DP), dimension(nat), intent(in) :: masses + real(kind=DP), dimension(3), intent(in) :: q + + real(kind=DP), dimension(3*nat), intent(out) :: w2_q + complex(kind=DP), dimension(3*nat, 3*nat), intent(out) :: pols_q, pols_q1 + + integer :: ir, iat, jat, INFO, LWORK, i, j + real(kind=DP), dimension(3) :: ruc + complex(kind=DP), dimension(6*nat + 1) :: WORK + real(kind=DP), dimension(9*nat - 2) :: RWORK + real(kind=DP) :: phase + + + pols_q1 = complex(0.0_DP,0.0_DP) + + do ir = 1, nfc2 + do iat = 1, nat + do jat = 1, nat + !ruc = pos(:,jat) - pos(:,iat) - r2_2(:,ir) + ! Have to keep this phase convention to be consistent with Fourier transform of the 3rd order force constants! + ruc = r2_2(:,ir) + phase = dot_product(ruc, q)*2.0_DP*PI + pols_q1(3*(jat - 1) + 1:3*jat, 3*(iat - 1) + 1:3*iat) = pols_q1(3*(jat - 1) + 1:3*jat, 3*(iat - 1) + 1:3*iat) & + + fc2(ir,3*(jat - 1) + 1:3*jat, 3*(iat - 1) + 1:3*iat)*exp(complex(0.0_DP, phase)) + enddo + enddo + enddo + + do iat = 1, nat + do i = 1, 3 + do jat = 1, nat + do j = 1, 3 + pols_q1(j + 3*(jat - 1),i + 3*(iat - 1)) = pols_q1(j + 3*(jat - 1),i + 3*(iat - 1))/sqrt(masses(iat)*masses(jat)) + enddo + enddo + enddo + enddo + + pols_q = (pols_q1 + conjg(transpose(pols_q1)))/2.0_DP + pols_q1 = (pols_q1 + conjg(transpose(pols_q1)))/2.0_DP + LWORK = -1 + call zheev('V', 'L', 3*nat, pols_q, 3*nat, w2_q, WORK, LWORK, RWORK, INFO) + LWORK = MIN( size(WORK), INT( WORK( 1 ) ) ) + call zheev('V', 'L', 3*nat, pols_q, 3*nat, w2_q, WORK, LWORK, RWORK, INFO) + end subroutine + +end module get_lf diff --git a/FModules/get_scattering_q_grid.f90 b/FModules/get_scattering_q_grid.f90 new file mode 100644 index 00000000..1f51c20c --- /dev/null +++ b/FModules/get_scattering_q_grid.f90 @@ -0,0 +1,152 @@ + + module scattering_grids + + contains + + subroutine get_scattering_q_grid(rotations, irrqgrid, qgrid, scatt_qgrid, & + nirrqpt, nqpt, scatt_nqpt, nsym, scattering_grid, scattering_weights) + + implicit none + + integer, parameter :: DP = selected_real_kind(14,200) + + integer, intent(in) :: nirrqpt, nqpt, nsym, scatt_nqpt + real(kind=DP), intent(in) :: rotations(nsym,3,3) + real(kind=DP), intent(in) :: irrqgrid(nirrqpt, 3), qgrid(nqpt, 3), scatt_qgrid(scatt_nqpt, 3) + + real(kind=DP), intent(out) :: scattering_grid(nirrqpt, scatt_nqpt, 3) + integer, intent(out) :: scattering_weights(nirrqpt, scatt_nqpt) + + integer :: iqpt, jqpt, isym, jsym, isg, nsg, ilist, lenlist, tot_events + integer :: sg_ind(nsym) + real(kind=DP) :: q1(3), q2(3), q3(3), q21(3), q31(3) + logical :: in_list + + scattering_grid(:,:,:) = 0.0_DP + scattering_weights(:,:) = 0 + + do iqpt = 1, nirrqpt + q1 = irrqgrid(iqpt, :) + + !sg_ind(:) = 0 + !isg = 0 + !do isym = 1, nsym + ! if(same_vector(q1, matmul(rotations(isym,:,:), q1))) then + ! isg = isg + 1 + ! sg_ind(isg) = isym + ! endif + !enddo + !nsg = isg + !print*, 'Size of the small group of ', iqpt, ' q point is ', nsg + + lenlist = 0 + do jqpt = 1, scatt_nqpt + q2 = scatt_qgrid(jqpt, :) + q3 = -1.0_DP*q1 - q2 + in_list = .False. + + do ilist = 1, lenlist + if(.not. in_list) then + q21 = scattering_grid(iqpt, ilist, :) + q31 = -1.0_DP*q1 - q21 + if(same_vector(q21, q3) .and. same_vector(q31, q2)) then + in_list = .True. + scattering_weights(iqpt, ilist) = scattering_weights(iqpt, ilist) + 1 + EXIT + ! else + ! do isym = 1, nsg + ! jsym = sg_ind(isym) + ! if(same_vector(matmul(rotations(jsym,:,:), q2), q21) .and. & + ! same_vector(matmul(rotations(jsym,:,:), q3), q31)) then + ! in_list = .True. + ! scattering_weights(iqpt, ilist) = scattering_weights(iqpt, ilist) + 1 + ! EXIT + !else if(same_vector(q2, matmul(rotations(jsym,:,:), q31)) .and. & + !same_vector(q3, matmul(rotations(jsym,:,:), q21))) then + ! in_list = .True. + ! scattering_weights(iqpt, ilist) = scattering_weights(iqpt, ilist) + 1 + ! EXIT + ! endif + ! enddo + endif + endif + enddo + + if(.not. in_list) then + lenlist = lenlist + 1 + scattering_grid(iqpt, lenlist, :) = q2 + scattering_weights(iqpt, lenlist) = scattering_weights(iqpt, lenlist) + 1 + endif + + enddo + !print*, 'Final number of scattering events: ', lenlist + !tot_events = 0 + !do ilist = 1, lenlist + ! tot_events = tot_events + scattering_weights(iqpt,ilist) + !enddo + !print*, 'Total number of scattering events: ', tot_events, scatt_nqpt + enddo + + end subroutine get_scattering_q_grid + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + logical function same_vector(v1, v2) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + + real(kind=DP), intent(in) :: v1(3), v2(3) + + integer :: i, j, k + real(kind=DP) :: v3(3) + logical :: same + same = .False. + if(all(abs(v1 - v2) < 1.0d-6)) then + same = .True. + else + do i = -1, 1 + if(.not. same) then + do j = -1, 1 + if(.not. same) then + do k = -1, 1 + v3 = v2 + (/dble(i), dble(j), dble(k)/) + if(all(abs(v1 - v3) < 1.0d-6)) then + same = .True. + EXIT + endif + enddo + endif + enddo + endif + enddo + endif + same_vector = same + return + + end function + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + logical function same_vector_nopbc(v1, v2) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + + real(kind=DP), intent(in) :: v1(3), v2(3) + + integer :: i, j, k + real(kind=DP) :: v3(3) + logical :: same + + same = .False. + if(all(abs(v1 - v2) < 1.0d-6)) then + same = .True. + endif + + same_vector_nopbc = same + return + + end function + +end module diff --git a/FModules/third_order_cond.f90 b/FModules/third_order_cond.f90 new file mode 100644 index 00000000..96ccae23 --- /dev/null +++ b/FModules/third_order_cond.f90 @@ -0,0 +1,765 @@ +module third_order_cond + + contains + + subroutine interpol_v2(fc,R2,R3,pos,q2,q3,fc_interp,n_blocks,nat) + IMPLICIT NONE + ! + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + INTEGER, intent(IN) :: nat, n_blocks + REAL(DP), intent(IN) :: R2(3,n_blocks),R3(3,n_blocks),pos(3,nat) + REAL(DP),INTENT(in) :: fc(n_blocks,3*nat,3*nat,3*nat) + REAL(DP),INTENT(in) :: q2(3), q3(3) + COMPLEX(DP),INTENT(out) :: fc_interp(3*nat, 3*nat, 3*nat) + ! + REAL(DP), parameter :: tpi=3.14159265358979323846_DP*2.0_DP + REAL(DP) :: arg, arg1 + COMPLEX(DP) :: phase, phase1 + INTEGER :: i_block, a,b,c + ! + fc_interp = cmplx(0._dp, 0._dp, kind=DP) + ! + + DO i_block = 1, n_blocks + arg = tpi*(dot_product(q2, R2(:,i_block)) + dot_product(q3, R3(:,i_block))) + phase = exp(cmplx(0.0_DP, arg,kind=DP)) + + fc_interp = fc_interp + phase*fc(i_block,:,:,:) + ! + END DO + + end subroutine interpol_v2 + + subroutine interpol_v3(fc,pos,R2,R3,q1,q2,q3,fc_interp,n_blocks,nat) + IMPLICIT NONE + ! + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + INTEGER, intent(IN) :: nat, n_blocks + REAL(DP), intent(IN) :: R2(3,n_blocks),R3(3,n_blocks), pos(3,nat) + REAL(DP),INTENT(in) :: fc(n_blocks,3*nat,3*nat,3*nat) + REAL(DP),INTENT(in) :: q2(3), q3(3), q1(3) + COMPLEX(DP),INTENT(out) :: fc_interp(3*nat, 3*nat, 3*nat) + ! + REAL(DP), parameter :: tpi=3.14159265358979323846_DP*2.0_DP + REAL(DP) :: arg, arg2 + COMPLEX(DP) :: phase, extra_phase + INTEGER :: i_block, a,b,c, at1, at2, at3 + ! + fc_interp = (0._dp, 0._dp) + ! + + DO i_block = 1, n_blocks + arg = tpi * SUM(q2(:)*R2(:,i_block) + q3(:)*R3(:,i_block)) + ! + DO c = 1,3*nat + DO b = 1,3*nat + DO a = 1,3*nat + at1 = ceiling(dble(a)/3.0_DP) + at2 = ceiling(dble(b)/3.0_DP) + at3 = ceiling(dble(c)/3.0_DP) + arg2 = tpi * (dot_product(pos(:,at1), q1) + dot_product(pos(:,at2), q2) + dot_product(pos(:,at3), q3)) + phase = CMPLX(Cos(arg2 + arg),Sin(arg2 + arg), kind=DP) + fc_interp(a,b,c) = fc_interp(a,b,c) + phase*fc(i_block,a,b,c) + ENDDO + ENDDO + ENDDO + ! + END DO + + end subroutine interpol_v3 + + subroutine compute_full_dynamic_bubble_single(energies,sigma,T,freq,is_gamma,D3,ne,n_mod, gaussian, & + classical, bubble) + + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + ! + complex(kind=DP), dimension(ne,n_mod,n_mod),intent(OUT) :: bubble + ! + integer, intent(IN) :: ne + real(kind=DP), intent(IN) :: energies(ne) + real(kind=DP), intent(IN) :: sigma(n_mod) + real(kind=DP), intent(IN) :: T + real(kind=DP), intent(IN) :: freq(n_mod,3) + logical , intent(IN) :: gaussian + logical , intent(IN) :: is_gamma(3) + logical , intent(IN) :: classical + complex(kind=DP), dimension(n_mod,n_mod,n_mod), intent(IN) :: D3 + integer, intent(IN) :: n_mod + ! + real(kind=DP) :: q2(n_mod,3),q3(n_mod,3), curr_sigma + complex(kind=DP) :: Lambda_23(ne) + integer :: i, rho2, rho3, nu,mu + logical, parameter :: static_limit = .false. + + q2(:,1)=freq(:,2) + q3(:,1)=freq(:,3) + + q2(:,2)=0.0_dp + q3(:,2)=0.0_dp + do i = 1, n_mod + if (.not. is_gamma(2) .or. i > 3) q2(i,2)=1.0_dp/freq(i,2) + if (.not. is_gamma(3) .or. i > 3) q3(i,2)=1.0_dp/freq(i,3) + end do + + if(classical) then + call eq_freq(T, n_mod, freq(:,2), q2(:,3)) + call eq_freq(T, n_mod, freq(:,3), q3(:,3)) + else + call bose_freq(T, n_mod, freq(:,2), q2(:,3)) + call bose_freq(T, n_mod, freq(:,3), q3(:,3)) + endif + ! + bubble=cmplx(0.0_dp,0.0_dp,kind=DP) + ! + DO rho3=1,n_mod + DO rho2=1,n_mod + ! + curr_sigma = (sigma(rho2) + sigma(rho3))/2.0_DP + call Lambda_dynamic_single(ne,energies,curr_sigma,T,static_limit,q2(rho2,:),q3(rho3,:), gaussian, Lambda_23) + ! + DO nu = 1,n_mod + DO mu = 1,n_mod + bubble(:,mu,nu) = bubble(:,mu,nu) + & + CONJG(D3(mu,rho2,rho3))*Lambda_23(:)*D3(nu,rho2,rho3) + END DO + END DO + ! + END DO + END DO + end subroutine compute_full_dynamic_bubble_single + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine compute_diag_dynamic_bubble_single(energies,sigma,T,freq,is_gamma,D3,ne,n_mod, gaussian, & + classical, bubble) + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + complex(kind=DP), dimension(ne, n_mod),intent(OUT) :: bubble + + real(kind=DP), intent(IN) :: energies(ne) + real(kind=DP), intent(IN) :: sigma(n_mod) + real(kind=DP), intent(IN) :: T + real(kind=DP), intent(IN) :: freq(n_mod,3) + logical , intent(IN) :: is_gamma(3), gaussian, classical + complex(kind=DP), dimension(n_mod,n_mod,n_mod), intent(IN) :: D3 + integer, intent(IN) :: n_mod, ne + + real(kind=DP) :: q2(n_mod,3),q3(n_mod,3) + complex(kind=DP) :: Lambda_23(ne) + integer :: i, rho2, rho3, nu,mu + logical, parameter :: static_limit = .false. + + q2(:,1)=freq(:,2) + q3(:,1)=freq(:,3) + + q2(:,2)=0.0_dp + q3(:,2)=0.0_dp + do i = 1, n_mod + if (.not. is_gamma(2) .or. i > 3) q2(i,2)=1.0_dp/freq(i,2) + if (.not. is_gamma(3) .or. i > 3) q3(i,2)=1.0_dp/freq(i,3) + end do + + if(classical) then + call eq_freq(T, n_mod, freq(:,2), q2(:,3)) + call eq_freq(T, n_mod, freq(:,3), q3(:,3)) + else + call bose_freq(T, n_mod, freq(:,2), q2(:,3)) + call bose_freq(T, n_mod, freq(:,3), q3(:,3)) + endif + + bubble=CMPLX(0.0_dp,0.0_dp, kind=DP) + + DO rho3=1,n_mod + DO rho2=1,n_mod + ! + ! call Lambda_dynamic_single(ne,n_mod,energies,sigma,T,static_limit,q2(rho2,:),q3(rho3,:),Lambda_23) + ! + DO mu = 1,n_mod + ! + call Lambda_dynamic_single(ne,energies,sigma(mu),T,static_limit,q2(rho2,:),q3(rho3,:), gaussian, Lambda_23) + ! + ! + bubble(:,mu) = bubble(:,mu) + & + CONJG(D3(mu,rho2,rho3))*Lambda_23*D3(mu,rho2,rho3) + ! + if(any(bubble(:,mu) .ne. bubble(:,mu))) then + if(any(D3 .ne. D3)) then + print*, 'Its D3' + else + print*, 'Its Lambda_23' + endif + STOP + endif + END DO + ! + END DO + END DO + ! + end subroutine compute_diag_dynamic_bubble_single + + subroutine compute_perturb_selfnrg_single(sigma,T,freq,is_gamma,D3,n_mod, gaussian, classical, selfnrg) + + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + complex(kind=DP), dimension(n_mod),intent(OUT) :: selfnrg + + real(kind=DP), intent(IN) :: sigma(n_mod) + real(kind=DP), intent(IN) :: T + real(kind=DP), intent(IN) :: freq(n_mod,3) + logical , intent(IN) :: is_gamma(3), gaussian, classical + complex(kind=DP), dimension(n_mod,n_mod,n_mod), intent(IN) :: D3 + integer, intent(IN) :: n_mod + + real(kind=DP) :: q2(n_mod,3),q3(n_mod,3) + complex(kind=DP) :: Lambda_23_freq + integer :: i, rho2, rho3, nu,mu + + q2(:,1)=freq(:,2) + q3(:,1)=freq(:,3) + + q2(:,2)=0.0_dp + q3(:,2)=0.0_dp + do i = 1, n_mod + if (.not. is_gamma(2) .or. i > 3) q2(i,2)=1.0_dp/freq(i,2) + if (.not. is_gamma(3) .or. i > 3) q3(i,2)=1.0_dp/freq(i,3) + end do + + if(classical) then + call eq_freq(T, n_mod, freq(:,2), q2(:,3)) + call eq_freq(T, n_mod, freq(:,3), q3(:,3)) + else + call bose_freq(T, n_mod, freq(:,2), q2(:,3)) + call bose_freq(T, n_mod, freq(:,3), q3(:,3)) + endif + + + selfnrg=CMPLX(0.0_dp,0.0_dp,kind=DP) + + DO mu = 1,n_mod + DO rho3=1,n_mod + DO rho2=1,n_mod + !if(abs(freq(mu, 1)**2 - (q2(rho2,1) + q3(rho3,1)**2)) < (3.0_DP*sigma(mu))**2 .or. & + ! abs(freq(mu, 1)**2 - (q2(rho2,1) - q3(rho3,1)**2)) < (3.0_DP*sigma(mu))**2) then + + call Lambda_dynamic_value_single(n_mod,freq(mu,1),sigma(mu),T,q2(rho2,:),q3(rho3,:), gaussian, Lambda_23_freq) + ! + + selfnrg(mu) = selfnrg(mu) + CONJG(D3(mu,rho2,rho3))*Lambda_23_freq*D3(mu,rho2,rho3) + ! + !endif + END DO + END DO + END DO + ! + end subroutine compute_perturb_selfnrg_single + + subroutine compute_spectralf_diag_single(sigma,ener,d2_freq,selfnrg,nat,ne,spectralf) + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + real(kind=dp),parameter :: pi = 3.141592653589793_dp + ! + real(kind=dp), intent(in) :: ener(ne) + real(kind=dp), intent(in) :: sigma(3*nat) + integer, intent(in) :: ne,nat + real(kind=dp), intent(in) :: d2_freq(3*nat) + complex(kind=dp), intent(in) :: selfnrg(ne,3*nat) + ! + real(kind=dp), intent(out) :: spectralf(ne,3*nat) + ! + integer :: nat3,mu,ie + real(kind=dp) :: a,b,denom,num + ! + nat3=3*nat + spectralf=0.0_dp + ! + DO mu = 1,nat3 + DO ie = 1, ne + + a = ener(ie)**2-sigma(mu)**2-d2_freq(mu)**2-DBLE(selfnrg(ie,mu)) + b = 2*sigma(mu)*ener(ie)-DIMAG(selfnrg(ie,mu)) + + num = ener(ie)*b + denom = (a**2+b**2)*pi + ! + IF(ABS(denom)/=0._dp)THEN + spectralf(ie,mu) = num / denom + ELSE + spectralf(ie,mu) = 0._dp + ENDIF + ENDDO + ENDDO + ! + end subroutine compute_spectralf_diag_single + + subroutine Lambda_dynamic_single(ne,energies,sigma,T,static_limit,w_q2,w_q3,gaussian,Lambda_out) + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + complex(kind=DP), intent(out) :: Lambda_out(ne) + integer, intent(in) :: ne + logical, intent(in) :: static_limit, gaussian + real(kind=DP), intent(in) :: energies(ne), sigma + real(kind=DP), intent(in) :: T,w_q2(3),w_q3(3) + real(kind=DP) :: w2,w3,n2,n3,w2m1,w3m1 + real(kind=DP) :: bose_P, bose_M, omega_P, omega_P2 ,& + omega_M,omega_M2, re_p, im_p, re_p1, im_p1 + complex(kind=DP) :: reg, ctm_P, ctm_M, ctm(ne) + integer :: ie + ! + w2=w_q2(1) + w3=w_q3(1) + w2m1=w_q2(2) + w3m1=w_q3(2) + n2=w_q2(3) + n3=w_q3(3) + ! + bose_P = 1.0_DP + n2 + n3 + omega_P = w3+w2 + omega_P2 = (omega_P)**2 + ! + bose_M = n3-n2 + omega_M = w3-w2 + omega_M2 = (omega_M)**2 + ! + IF(static_limit) THEN ! sigma and energy do not count + ! + IF(ABS(omega_P)>0._dp)THEN + ctm_P = bose_P /omega_P + ELSE + ctm_P = 0._dp + ENDIF + ! + IF(ABS(omega_M)>1.e-5_dp)THEN + ctm_M = bose_M /omega_M + ELSE + IF(T>0._dp.and.ABS(omega_P)>0._dp)THEN + ctm_M = df_bose(0.5_dp * omega_P, T) + ELSE + ctm_M = 0._dp + ENDIF + ENDIF + ! + ctm = ctm_P - ctm_M + ELSE + IF(gaussian) then + DO ie = 1,ne + im_p = bose_P *gaussian_function(energies(ie) - omega_P, sigma) + if(energies(ie) - omega_P .ne. 0.0_DP) then + re_p = bose_P/(energies(ie) - omega_P) + + else + re_p = 0.0_DP + endif + ctm_P = CMPLX(re_p, im_p, kind=DP) + im_p = bose_M *gaussian_function(energies(ie) + omega_M, sigma) + im_p1 = bose_M *gaussian_function(energies(ie) - omega_M, sigma) + if(energies(ie) + omega_M .ne. 0.0_DP) then + re_p = bose_M/(energies(ie) + omega_M) + else + re_p = 0.0_DP + endif + if(energies(ie) - omega_M .ne. 0.0_DP) then + re_p1 = bose_M/(energies(ie) - omega_M) + else + re_p1 = 0.0_DP + endif + ctm_M = CMPLX(re_p, im_p, kind=DP) - CMPLX(re_p1, im_p1, kind=DP) + ctm(ie) = ctm_P + ctm_M + ENDDO + ELSE + DO ie = 1,ne + reg = CMPLX(energies(ie), sigma, kind=DP)**2 + ctm_P = bose_P *omega_P/(omega_P2-reg) + ctm_M = bose_M *omega_M/(omega_M2-reg) + ctm(ie) = ctm_P - ctm_M + END DO + ENDIF + END IF + ! + IF(gaussian) then + !lambda_out=-ctm/16.0_DP*sqrt(w2m1*w3m1) + lambda_out=-ctm * w2m1*w3m1/8.0_dp + ELSE + lambda_out=-ctm * w2m1*w3m1/4.0_dp + ENDIF + ! + end subroutine Lambda_dynamic_single + + subroutine Lambda_dynamic_value_single(n_mod,value,sigma,T,w_q2,w_q3,gaussian,Lambda_out) + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + complex(kind=DP), intent(out) :: Lambda_out + integer, intent(in) :: n_mod + logical, intent(in) :: gaussian + real(kind=DP), intent(in) :: sigma, value + real(kind=DP), intent(in) :: T,w_q2(3),w_q3(3) + real(kind=DP) :: w2,w3,n2,n3,w2m1,w3m1 + real(kind=DP) :: bose_P, bose_M, omega_P, omega_P2 ,& + omega_M,omega_M2, re_p, im_p, re_p1, im_p1 + complex(kind=DP) :: reg, ctm_P, ctm_M, ctm + integer :: ie, isigma,mu + ! + w2=w_q2(1) + w3=w_q3(1) + w2m1=w_q2(2) + w3m1=w_q3(2) + n2=w_q2(3) + n3=w_q3(3) + ! + bose_P = 1.0_DP + n2 + n3 + omega_P = w3+w2 + omega_P2 = (omega_P)**2 + ! + bose_M = n3-n2 + omega_M = w3-w2 + omega_M2 = (omega_M)**2 + ! + if(gaussian) then + im_p = bose_P *gaussian_function(value - omega_P, sigma) + if(omega_P2-value**2 .ne. 0.0_DP) then + re_p = bose_P/(value - omega_P) + else + re_p = 0.0_DP + endif + ctm_P = CMPLX(re_p, im_p, kind=DP) + + im_p = bose_M *gaussian_function(value + omega_M, sigma) + im_p1 = bose_M *gaussian_function(value - omega_M, sigma) + if(value + omega_M .ne. 0.0_DP) then + re_p = bose_M/(value + omega_M) + else + re_p = 0.0_DP + endif + if(value - omega_M .ne. 0.0_DP) then + re_p1 = bose_M/(value - omega_M) + else + re_p1 = 0.0_DP + endif + ctm_M = CMPLX(re_p, im_p, kind=DP) - CMPLX(re_p1, im_p1, kind=DP) + else + reg = CMPLX(value, sigma, kind=DP)**2 + ctm_P = bose_P *omega_P/(omega_P2-reg) + ctm_M = bose_M *omega_M/(omega_M2-reg) + endif + ! + IF(gaussian) then + ctm = ctm_P + ctm_M + lambda_out=-ctm/8.0_DP* w2m1*w3m1 + !lambda_out=-ctm * w2m1*w3m1/4.0_dp + ELSE + ctm = ctm_P - ctm_M + lambda_out=-ctm * w2m1*w3m1/4.0_dp + ENDIF + ! + end subroutine Lambda_dynamic_value_single + + subroutine calculate_spectral_function(ener, d2_freq, selfnrg, nat, ne, spectralf) + + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + real(kind=dp),parameter :: pi = 3.141592653589793_dp + ! + real(kind=dp), intent(in) :: ener(ne) + integer, intent(in) :: ne,nat + real(kind=dp), intent(in) :: d2_freq(3*nat) + complex(kind=dp), intent(in) :: selfnrg(ne,3*nat) + ! + real(kind=dp), intent(out) :: spectralf(ne,3*nat) + ! + integer :: nat3,mu,ie, iband + real(kind=dp) :: a,b + complex(kind=dp), dimension(ne, 3*nat) :: zq + + do iband = 1, 3*nat + zq(:,iband) = sqrt(d2_freq(iband)**2 + selfnrg(:,iband)) + do ie = 1, ne + a = 0.0_DP + b = 0.0_DP + if(((ener(ie) - dble(zq(ie, iband)))**2 + aimag(zq(ie,iband))**2) .ne. 0.0_DP) then + a = -1.0_DP*aimag(zq(ie,iband))/((ener(ie) - dble(zq(ie, iband)))**2 + aimag(zq(ie,iband))**2) + endif + if(((ener(ie) + dble(zq(ie, iband)))**2 + aimag(zq(ie,iband))**2) .ne. 0.0_DP) then + b = aimag(zq(ie,iband))/((ener(ie) + dble(zq(ie, iband)))**2 + aimag(zq(ie,iband))**2) + endif + spectralf(ie, iband) = (a + b)/2.0_DP/pi + enddo + enddo + + end subroutine calculate_spectral_function + + subroutine calculate_spectral_function_mode_mixing(ener,smear,wq,Pi,notransl,spectralf,mass,nat,ne) + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + real(kind=dp),parameter :: twopi = 6.283185307179586_dp + ! + real(kind=dp), intent(in) :: mass(nat), ener(ne), smear(3*nat) + integer, intent(in) :: ne,nat + real(kind=dp), intent(in) :: wq(3*nat) + complex(kind=dp), intent(in) :: Pi(ne,3*nat,3*nat) + logical, intent(in) :: notransl + ! + complex(kind=dp), intent(out) :: spectralf(3*nat, 3*nat, ne) + ! + integer :: nat3,n,m,ie + complex(kind=dp) :: G(3*nat,3*nat) + complex(kind=dp) :: fact + + nat3=3*nat + + spectralf=complex(0.0_DP, 0.0_DP) + ! + + DO ie = 1,ne + G=cmplx(0.0_dp,0.0_dp,kind=DP) + FORALL (m=1:nat3, n=1:nat3) + G(n,m) = -Pi(ie,n,m) + END FORALL + DO n=1,nat3 + G(n,n)=G(n,n)+(ener(ie) + complex(0.0_DP,smear(n)))**2 - wq(n)**2 + ENDDO + G = cinv(G) + IF ( notransl ) THEN + CALL eliminate_transl(G,mass,nat) + END IF + do n = 1, nat3 + do m = 1, nat3 + !spectralf(m,n,ie)=spectralf(m,n,ie)-2.0_DP*DIMAG(G(m,n))*ener(ie)/twopi + !spectralf(m,n,ie)=spectralf(m,n,ie)-DIMAG(G(m,n) - conjg(G(n,m)))*ener(ie)/twopi + spectralf(m,n,ie)=spectralf(m,n,ie)+complex(0.0_DP, 1.0_DP)*(G(m,n) - conjg(G(n,m)))*ener(ie)/twopi + enddo + enddo + ENDDO + if(all(spectralf == complex(0.0_DP, 0.0_DP))) then + print*, 'All of the spectralf is 0!' + endif + end subroutine calculate_spectral_function_mode_mixing + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine calculate_spectral_function_cartesian(ener,smear,d2,Pi,notransl,spectralf,mass,nat,ne) + implicit none + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + real(kind=dp),parameter :: twopi = 6.283185307179586_dp + ! + real(kind=dp), intent(in) :: mass(nat), ener(ne), smear(3*nat) + integer, intent(in) :: ne,nat + complex(kind=dp), intent(in) :: d2(3*nat,3*nat) + complex(kind=dp), intent(in) :: Pi(ne,3*nat,3*nat) + logical, intent(in) :: notransl + ! + complex(kind=dp), intent(out) :: spectralf(3*nat, 3*nat, ne) + ! + integer :: nat3,n,m,ie + complex(kind=dp) :: G(3*nat,3*nat) + complex(kind=dp) :: fact + + nat3=3*nat + + spectralf=0.0_dp + ! + + DO ie = 1,ne + G=cmplx(0.0_dp,0.0_dp,kind=DP) + FORALL (m=1:nat3, n=1:nat3) + G(n,m) = -Pi(ie,n,m) + END FORALL + G=G-d2 + DO n=1,nat3 + G(n,n)=G(n,n)+(ener(ie) + complex(0.0_DP,smear(n)))**2 + ENDDO + G = cinv(G) + IF ( notransl ) THEN + CALL eliminate_transl(G,mass,nat) + END IF + do n = 1, nat3 + do m = 1, nat3 + spectralf(m,n,ie)=spectralf(m,n,ie)+complex(0.0_DP, 1.0_DP)*(G(m,n) - conjg(G(n,m)))*ener(ie)/twopi + enddo + enddo + ENDDO + + end subroutine calculate_spectral_function_cartesian +! +! ======================== accessory routines ======================================== +! + SUBROUTINE bose_freq(T, n_mod, freq, bose) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + ! + REAL(DP),INTENT(out) :: bose(n_mod) + ! + REAL(DP),INTENT(in) :: T + INTEGER,INTENT(in) :: n_mod + REAL(DP),INTENT(in) :: freq(n_mod) + ! + IF(T==0._dp)THEN + bose = 0._dp + RETURN + ENDIF + ! + WHERE (freq > 0._dp) + bose = f_bose(freq, T) + ELSEWHERE + bose = 0._dp + ENDWHERE + ! + END SUBROUTINE bose_freq + ! + SUBROUTINE eq_freq(T, n_mod, freq, bose) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + REAL(DP), parameter :: K_BOLTZMANN_RY= 1.3806504E-23_DP /(4.35974394E-18_DP/2) !K_BOLTZMANN_SI / (HARTREE_SI/2) + ! + REAL(DP),INTENT(out) :: bose(n_mod) + ! + REAL(DP),INTENT(in) :: T + INTEGER,INTENT(in) :: n_mod + REAL(DP),INTENT(in) :: freq(n_mod) + ! + IF(T==0._dp)THEN + bose = 0._dp + RETURN + ENDIF + ! + WHERE (freq > 0._dp) + bose = (T*K_BOLTZMANN_RY)/freq + ELSEWHERE + bose = 0._dp + ENDWHERE + ! + END SUBROUTINE eq_freq +! + ELEMENTAL FUNCTION f_bose(freq,T) ! bose (freq,T) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + REAL(DP), parameter :: K_BOLTZMANN_RY= 1.3806504E-23_DP /(4.35974394E-18_DP/2) !K_BOLTZMANN_SI / (HARTREE_SI/2) + ! + REAL(DP) :: f_bose + ! + REAL(DP),INTENT(in) :: freq,T + ! + REAL(DP) :: Tm1 + ! + Tm1 = 1/(T*K_BOLTZMANN_RY) + f_bose = 1 / (EXP(freq*Tm1) - 1) + ! + END FUNCTION f_bose +! + FUNCTION df_bose(freq,T) ! d bose(freq,T)/d freq + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + REAL(DP), parameter :: K_BOLTZMANN_RY= 1.3806504E-23_DP /(4.35974394E-18_DP/2) !K_BOLTZMANN_SI / (HARTREE_SI/2) + ! + REAL(DP) :: df_bose + ! + REAL(DP),INTENT(in) :: freq,T + ! + REAL(KIND=DP) :: expf,Tm1 + ! + Tm1 = 1/(T*K_BOLTZMANN_RY) + expf = EXP(freq*Tm1) + df_bose = -Tm1 * expf / (expf-1)**2 + ! + END FUNCTION df_bose + + FUNCTION gaussian_function(x,sigma) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + REAL(DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875_DP + ! + REAL(DP) :: gaussian_function + REAL(DP), intent(in) :: x, sigma + + gaussian_function = exp(-0.5_DP*(x/sigma)**2)/sqrt(2.0_DP/PI)/sigma ! multiplied with pi + + END FUNCTION + + SUBROUTINE eliminate_transl(A,mass,nat) + ! + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + INTEGER, intent(in) :: nat + COMPLEX(DP), intent(inout) :: A(3*nat,3*nat) + real(kind=dp), intent(in) :: mass(nat) + + COMPLEX(DP) :: QAUX(3,3,nat,nat) + COMPLEX(DP) :: Q(nat*3,nat*3) + REAL(DP) :: Mtot,mi,mj + INTEGER :: i,j,alpha,beta + ! + ! DEFINE Q=1-P, P is TRANSLATION PROJECTOR + QAUX=(0.0_DP,0.0_DP) + ! build -P + Mtot=SUM(mass) + DO i=1,nat + DO j=1,nat + mj=mass(j) + mi=mass(i) + DO alpha=1,3 + QAUX(alpha,alpha,i,j)=-(1.0_dp,0.0_dp)*SQRT(mi*mj)/Mtot + END DO + END DO + END DO + ! build Q + DO i=1,nat + DO alpha=1,3 + QAUX(alpha,alpha,i,i)=1.0_dp+QAUX(alpha,alpha,i,i) + END DO + END DO + ! + DO j=1, nat + DO i=1, nat + DO alpha=1,3 + DO beta=1,3 + Q(3*(i-1)+alpha,3*(j-1)+beta)=QAUX(alpha,beta,i,j) + END DO + END DO + END DO + END DO + ! PROJECT + A=matmul(A,Q) + ! + END SUBROUTINE eliminate_transl + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + function cinv(A) result(Ainv) + + implicit none + integer, parameter :: DP = selected_real_kind(14,200) + real(kind=DP), parameter :: PI = 3.141592653589793115997963468544185161590576171875 + + complex(kind=DP),intent(in) :: A(:,:) + complex(kind=DP) :: Ainv(size(A,1),size(A,2)) + complex(kind=DP), allocatable :: work(:) ! work array for LAPACK + integer :: n,info,ipiv(size(A,1)), lda, lwork, nb ! pivot indices + INTEGER,EXTERNAL :: ILAENV + + ! Store A in Ainv to prevent it from being overwritten by LAPACK + Ainv = A + n = size(A,1) + lda = n + ! + nb = ILAENV( 1, 'ZHEEV', 'U', n, -1, -1, -1 ) + lwork=n*nb + ALLOCATE(work(lwork)) + ! + ! ZGETRF computes an LU factorization of a general M-by-N matrix A + ! using partial pivoting with row interchanges. + CALL ZGETRF(n, n, Ainv, lda, ipiv, info) + if (info.ne.0) stop 'Matrix is numerically singular!' + ! ZGETRI computes the inverse of a matrix using the LU factorization + ! computed by zGETRF. + CALL ZGETRI(n, Ainv, lda, ipiv, work, lwork, info) + if (info.ne.0) stop 'Matrix inversion failed!' + + !call ZGETRF(n,n,Ainv,n,ipiv,info) + !if (info.ne.0) stop 'Matrix is numerically singular!' + ! ZGETRI computes the inverse of a matrix using the LU factorization + ! computed by zGETRF. + !call ZGETRI(n,Ainv,n,ipiv,work,n,info) + !if (info.ne.0) stop 'Matrix inversion failed!' + end function cinv + +end module diff --git a/FModules/third_order_cond_centering.f90 b/FModules/third_order_cond_centering.f90 new file mode 100644 index 00000000..c92bb001 --- /dev/null +++ b/FModules/third_order_cond_centering.f90 @@ -0,0 +1,725 @@ +module third_order_cond_centering + + contains + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine check_permutation_symmetry(tensor, r_vector2, r_vector3, n_R, natom, perm) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: n_R, natom + real(kind=DP), intent(in) :: tensor(n_R, 3*natom, 3*natom, 3*natom) + real(kind=DP), intent(in) :: r_vector2(n_R, 3), r_vector3(n_R, 3) + logical, intent(out) :: perm + + integer :: i, j, k, ipair, jpair, npairs, unfound + integer :: pairs(n_R, 2) + real(kind=DP) :: rvec12(3), rvec13(3), rvec22(3), rvec23(3) + real(kind=DP) :: tol, tscale + logical :: got(n_R) + + tol = 1.0_DP/10.0_DP**6 + perm = .True. + got = .False. + npairs = 0 + + tscale = 0.0_DP + do i = 1, n_R + do j = 1, 3*natom + if(norma2(tensor(i,j,:,:)) > tscale) then + tscale = norma2(tensor(i,j,:,:)) + endif + enddo + enddo + + do i = 1, n_R + if(.not. got(i)) then + rvec12 = r_vector2(i,:) + rvec13 = r_vector3(i,:) + if(norm(rvec12 - rvec13) < tol) then + npairs = npairs + 1 + got(i) = .True. + pairs(npairs, :) = i + else + do j = 1, n_R + if(.not. got(j)) then + rvec22 = r_vector2(j,:) + rvec23 = r_vector3(j,:) + if(norm(rvec12 - rvec23) < tol .and. norm(rvec13 - rvec22) < tol) then + npairs = npairs + 1 + got(i) = .True. + got(j) = .True. + pairs(npairs, 1) = i + pairs(npairs, 2) = j + endif + endif + enddo + endif + endif + enddo + + if(.not. all(got)) then + print*, 'Could not find all the pairs!' + perm = .False. + unfound = 0 + do i = 1, n_R + if(.not. got(i)) then + unfound = unfound + 1 + !print*, r_vector2(i,:), r_vector3(i,:) + endif + enddo + print*, dble(unfound)/dble(n_R)*100.0, ' percentage of triplets without a pair!' + else + do i = 1, npairs + if(perm) then + ipair = pairs(i, 1) + jpair = pairs(i, 2) + do j = 1, 3*natom + if(norma2(tensor(ipair, j,:,:) - transpose(tensor(jpair, j,:,:))) > & + tol*tol*tscale) then + print*, 'Permutation symmetry not satisfied!' + print*, norma2(tensor(ipair, j,:,:) - transpose(tensor(jpair, j,:,:))) + print*, norma2(tensor(ipair,j,:,:)) + print*, tensor(ipair,j,:,:) + print*, tensor(jpair,j,:,:) + perm = .False. + EXIT + endif + enddo + endif + enddo + endif + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine apply_permutation_symmetry(tensor, r_vector2, r_vector3, new_tensor, n_R, natom) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: n_R, natom + real(kind=DP), intent(in) :: tensor(n_R, 3*natom, 3*natom, 3*natom) + real(kind=DP), intent(in) :: r_vector2(n_R, 3), r_vector3(n_R, 3) + real(kind=DP), intent(out) :: new_tensor(n_R, 3*natom, 3*natom, 3*natom) + + integer :: i, j, k, ipair, jpair, npairs, unfound + integer :: pairs(n_R, 2) + real(kind=DP) :: rvec12(3), rvec13(3), rvec22(3), rvec23(3) + real(kind=DP) :: tol, tscale + logical :: got(n_R) + + tol = 1.0_DP/10.0_DP**6 + got = .False. + npairs = 0 + + tscale = 0.0_DP + new_tensor(:,:,:,:) = tensor(:,:,:,:) + do i = 1, n_R + do j = 1, 3*natom + if(norma2(tensor(i,j,:,:)) > tscale) then + tscale = norma2(tensor(i,j,:,:)) + endif + enddo + enddo + + do i = 1, n_R + if(.not. got(i)) then + rvec12 = r_vector2(i,:) + rvec13 = r_vector3(i,:) + if(norm(rvec12 - rvec13) < tol) then + npairs = npairs + 1 + got(i) = .True. + pairs(npairs, :) = i + else + do j = 1, n_R + if(.not. got(j)) then + rvec22 = r_vector2(j,:) + rvec23 = r_vector3(j,:) + if(norm(rvec12 - rvec23) < tol .and. norm(rvec13 - rvec22) < tol) then + npairs = npairs + 1 + got(i) = .True. + got(j) = .True. + pairs(npairs, 1) = i + pairs(npairs, 2) = j + endif + endif + enddo + endif + endif + enddo + + if(.not. all(got)) then + print*, 'Could not find all the pairs!' + unfound = 0 + do i = 1, n_R + if(.not. got(i)) then + unfound = unfound + 1 + !print*, r_vector2(i,:), r_vector3(i,:) + endif + enddo + print*, dble(unfound)/dble(n_R)*100.0, ' percentage of triplets without a pair!' + else + do i = 1, npairs + ipair = pairs(i, 1) + jpair = pairs(i, 2) + do j = 1, 3*natom + !if(norma2(tensor(ipair, j,:,:) - transpose(tensor(jpair, j,:,:))) > & + ! tol*tol*tscale) then + new_tensor(ipair, j,:,:) = & + (tensor(ipair, j,:,:) + transpose(tensor(jpair, j,:,:)))/2.0_DP + new_tensor(jpair, j,:,:) = transpose(new_tensor(ipair, j,:,:)) + ! endif + enddo + enddo + endif + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine apply_permutation_symmetry_local(tensor, r_vector2, r_vector3, n_R, natom) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: n_R, natom + real(kind=DP), intent(inout) :: tensor(n_R, 3*natom, 3*natom, 3*natom) + real(kind=DP), intent(in) :: r_vector2(n_R, 3), r_vector3(n_R, 3) + + integer :: i, j, k, ipair, jpair, npairs, unfound + integer :: pairs(n_R, 2) + real(kind=DP) :: rvec12(3), rvec13(3), rvec22(3), rvec23(3) + real(kind=DP) :: tol, tscale + logical :: got(n_R) + + tol = 1.0_DP/10.0_DP**6 + got = .False. + npairs = 0 + + tscale = 0.0_DP + do i = 1, n_R + do j = 1, 3*natom + if(norma2(tensor(i,j,:,:)) > tscale) then + tscale = norma2(tensor(i,j,:,:)) + endif + enddo + enddo + + do i = 1, n_R + if(.not. got(i)) then + rvec12 = r_vector2(i,:) + rvec13 = r_vector3(i,:) + if(norm(rvec12 - rvec13) < tol) then + npairs = npairs + 1 + got(i) = .True. + pairs(npairs, :) = i + else + do j = 1, n_R + if(.not. got(j)) then + rvec22 = r_vector2(j,:) + rvec23 = r_vector3(j,:) + if(norm(rvec12 - rvec23) < tol .and. norm(rvec13 - rvec22) < tol) then + npairs = npairs + 1 + got(i) = .True. + got(j) = .True. + pairs(npairs, 1) = i + pairs(npairs, 2) = j + endif + endif + enddo + endif + endif + enddo + + if(.not. all(got)) then + print*, 'Could not find all the pairs!' + unfound = 0 + do i = 1, n_R + if(.not. got(i)) then + unfound = unfound + 1 + !print*, r_vector2(i,:), r_vector3(i,:) + endif + enddo + print*, dble(unfound)/dble(n_R)*100.0, ' percentage of triplets without a pair!' + else + do i = 1, npairs + ipair = pairs(i, 1) + jpair = pairs(i, 2) + do j = 1, 3*natom + !if(norma2(tensor(ipair, j,:,:) - transpose(tensor(jpair, j,:,:))) > & + ! tol*tol*tscale) then + tensor(ipair, j,:,:) = & + (tensor(ipair, j,:,:) + transpose(tensor(jpair, j,:,:)))/2.0_DP + tensor(jpair, j,:,:) = transpose(tensor(ipair, j,:,:)) + ! endif + enddo + enddo + endif + + end subroutine + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine number_of_triplets(tensor, rvec2, rvec3, tot_trip, itrip, natom, n_R) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: n_R, natom + real(kind=DP), dimension(natom*natom*natom, n_R*81, 3, 3, 3), intent(in) :: tensor + real(kind=DP), dimension(natom*natom*natom, n_R*81, 3), intent(in) :: rvec2,rvec3 + integer, dimension(natom*natom*natom), intent(in) :: tot_trip + + real(kind=DP), dimension(natom*natom*natom*n_R*81, 3) :: f_rvec2, f_rvec3 + integer, intent(out) :: itrip + + integer :: iat, jat, kat, index1, i, j, index0 + real(kind=DP) :: tol + logical :: found + + tol = 1.0_DP/10.0_DP**6 + + index0 = 1 + do i = 2, natom*natom*natom + if(tot_trip(i) > tot_trip(index0)) then + index0 = i + endif + enddo + + f_rvec2 = 0.0_DP + f_rvec3 = 0.0_DP + itrip = 0 + do iat = 1, natom + do jat = 1, natom + do kat = 1, natom + index1 = kat + natom*(jat-1) + natom**2*(iat-1) + if(index1 .eq. index0) then + do i = 1, tot_trip(index0) + itrip = i + f_rvec2(itrip, :) = rvec2(index0, i, :) + f_rvec3(itrip, :) = rvec3(index0, i, :) + enddo + endif + enddo + enddo + enddo + do iat = 1, natom + do jat = 1, natom + do kat = 1, natom + index1 = kat + natom*(jat-1) + natom**2*(iat-1) + if(index0 .ne. index1) then + do i = 1, tot_trip(index1) + found = .False. + do j = 1, itrip + if(norm(rvec2(index1, i, :) - f_rvec2(j, :)) < tol .and. & + norm(rvec3(index1, i, :) - f_rvec3(j, :)) < tol) then + found = .True. + EXIT + endif + enddo + if(.not. found) then + itrip = itrip + 1 + f_rvec2(itrip, :) = rvec2(index1, i, :) + f_rvec3(itrip, :) = rvec3(index1, i, :) + endif + enddo + endif + enddo + enddo + enddo + + print*, 'Expect ', itrip, ' triplets!' + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine find_triplets(tensor, r_vector2, r_vector3, rsup, irsup, pos, help_tensor, help_rvec2, help_rvec3, & + tot_trip, far, n_R, natom) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: n_R, natom, far + real(kind=DP), intent(in) :: tensor(n_R, 3*natom, 3*natom, 3*natom) + real(kind=DP), intent(in) :: r_vector2(n_R, 3), r_vector3(n_R, 3) + real(kind=DP), intent(in) :: rsup(3,3), irsup(3,3), pos(natom, 3) + + real(kind=DP), dimension(natom*natom*natom, n_R*81, 3, 3, 3), intent(out) :: help_tensor + real(kind=DP), dimension(natom*natom*natom, n_R*81, 3), intent(out) :: help_rvec2, help_rvec3 + integer, dimension(natom*natom*natom), intent(out) :: tot_trip + + integer :: i, iat, jat, kat, index1, i1, j1, k1, curr_trip(2) + integer :: itrip, ntrip, index2 + real(kind=DP) :: rvec1(3), rvec2(3), xvec1(3), xvec2(3) + real(kind=DP) :: rvec21(3), rvec22(3), xvec21(3), xvec22(3) + real(kind=DP) :: new_rvec2(27,3), new_rvec3(27,3) + real(kind=DP) :: size1, size2, tol + + tol = 1.0_DP/10.0_DP**6 + + print*, 'Finding triplets ...' + do iat = 1, natom + do jat = 1, natom + do kat = 1, natom + index1 = kat + natom*(jat-1) + natom**2*(iat-1) + tot_trip(index1) = 0 + do i = 1, n_R + curr_trip = 0 + rvec1 = r_vector2(i,:) + pos(jat,:) - pos(iat,:) + rvec2 = r_vector3(i,:) + pos(kat,:) - pos(iat,:) + size1 = norm(rvec1) + size2 = norm(rvec2) + xvec1 = dot(rvec1, irsup) + xvec2 = dot(rvec2, irsup) + new_rvec2 = 0.0_DP + new_rvec3 = 0.0_DP + !curr_trip = curr_trip + 1 + !new_rvec2(curr_trip(1),:) = r_vector2(i,:) + !new_rvec3(curr_trip(2),:) = r_vector3(i,:) + do i1 = -far, far + do j1 = -far, far + do k1 = -far, far + xvec21 = xvec1 + (/i1, j1, k1/) + rvec21 = dot(xvec21, rsup) + if(abs(norm(rvec21) - size1) < tol) then + curr_trip(1) = curr_trip(1) + 1 + rvec21 = r_vector2(i,:) + xvec21 = dot(rvec21, irsup) + xvec21 = xvec21 + (/i1, j1, k1/) + rvec21 = dot(xvec21, rsup) + new_rvec2(curr_trip(1),:) = rvec21 + else if(norm(rvec21) < size1) then + !rvec1 = rvec21 + size1 = norm(rvec21) + !xvec1 = dot(rvec1, irsup) + new_rvec2 = 0.0_DP + curr_trip(1) = 1 + rvec21 = r_vector2(i,:) + xvec21 = dot(rvec21, irsup) + xvec21 = xvec21 + (/i1, j1, k1/) + rvec21 = dot(xvec21, rsup) + new_rvec2(curr_trip(1),:) = rvec21 + endif + xvec22 = xvec2 + (/i1, j1, k1/) + rvec22 = dot(xvec22, rsup) + if(abs(norm(rvec22) - size2) < tol) then + curr_trip(2) = curr_trip(2) + 1 + rvec22 = r_vector3(i,:) + xvec22 = dot(rvec22, irsup) + xvec22 = xvec22 + (/i1, j1, k1/) + rvec22 = dot(xvec22, rsup) + new_rvec3(curr_trip(2),:) = rvec22 + else if(norm(rvec22) < size2) then + rvec2 = rvec22 + size2 = norm(rvec22) + !xvec2 = dot(rvec2, irsup) + new_rvec3 = 0.0_DP + curr_trip(2) = 1 + rvec22 = r_vector3(i,:) + xvec22 = dot(rvec22, irsup) + xvec22 = xvec22 + (/i1, j1, k1/) + rvec22 = dot(xvec22, rsup) + new_rvec3(curr_trip(2),:) = rvec22 + endif + enddo + enddo + enddo + do i1 = 1, curr_trip(1) + do j1 = 1, curr_trip(2) + tot_trip(index1) = tot_trip(index1) + 1 + !index2 = j1 + curr_trip(2)*(i1-1) + help_rvec2(index1, tot_trip(index1),:) = new_rvec2(i1,:) + help_rvec3(index1, tot_trip(index1),:) = new_rvec3(j1,:) + help_tensor(index1, tot_trip(index1), :, :, :) = & + tensor(i, 3*(iat-1)+1:3*iat, 3*(jat-1)+1:3*jat, 3*(kat-1)+1:3*kat)& + /dble(curr_trip(1)*curr_trip(2)) + enddo + enddo + !tot_trip(index1) = tot_trip(index1) + curr_trip(1)*curr_trip(2) + !print*, index1, dble(i)/dble(n_R), tot_trip(index1) + enddo + enddo + enddo + enddo + + !print*, shape(help_tensor) + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine distribute_fc3(tensor, rvec2, rvec3, tot_trip, f_tensor, f_rvec2, f_rvec3, itrip, ntrip, natom, n_R) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: ntrip, n_R, natom + real(kind=DP), dimension(natom*natom*natom, n_R*81, 3, 3, 3), intent(in) :: tensor + real(kind=DP), dimension(natom*natom*natom, n_R*81, 3), intent(in) :: rvec2,rvec3 + integer, dimension(natom*natom*natom), intent(in) :: tot_trip + + real(kind=DP), dimension(ntrip, 3*natom, 3*natom, 3*natom), intent(out) :: f_tensor + real(kind=DP), dimension(ntrip, 3), intent(out) :: f_rvec2, f_rvec3 + integer, intent(out) :: itrip + + integer :: iat, jat, kat, index1, i, j, index0 + real(kind=DP) :: tol + logical :: found + + tol = 1.0_DP/10.0_DP**6 + + print*, 'Distributing force constants ... ' + + index0 = 1 + do i = 2, natom*natom*natom + if(tot_trip(i) > tot_trip(index0)) then + index0 = i + endif + enddo + + f_rvec2 = 0.0_DP + f_rvec3 = 0.0_DP + f_tensor = 0.0_DP + itrip = 0 + do iat = 1, natom + do jat = 1, natom + do kat = 1, natom + index1 = kat + natom*(jat-1) + natom**2*(iat-1) + if(index1 .eq. index0) then + do i = 1, tot_trip(index0) + itrip = i + f_rvec2(itrip, :) = rvec2(index0, i, :) + f_rvec3(itrip, :) = rvec3(index0, i, :) + f_tensor(itrip, 3*(iat-1)+1:3*iat, 3*(jat-1)+1:3*jat, 3*(kat-1)+1:3*kat) = & + tensor(index0, i,:,:,:) + enddo + endif + enddo + enddo + enddo + do iat = 1, natom + do jat = 1, natom + do kat = 1, natom + index1 = kat + natom*(jat-1) + natom**2*(iat-1) + if(index0 .ne. index1) then + do i = 1, tot_trip(index1) + found = .False. + do j = 1, itrip + if(norm(rvec2(index1, i, :) - f_rvec2(j, :)) < tol .and. & + norm(rvec3(index1, i, :) - f_rvec3(j, :)) < tol) then + found = .True. + f_tensor(j, 3*(iat-1)+1:3*iat, 3*(jat-1)+1:3*jat, 3*(kat-1)+1:3*kat) = & + tensor(index1, i,:,:,:) + EXIT + endif + enddo + if(.not. found) then + itrip = itrip + 1 + f_rvec2(itrip, :) = rvec2(index1, i, :) + f_rvec3(itrip, :) = rvec3(index1, i, :) + f_tensor(itrip, 3*(iat-1)+1:3*iat, 3*(jat-1)+1:3*jat, 3*(kat-1)+1:3*kat) = & + tensor(index1, i,:,:,:) + endif + !endif + enddo + endif + enddo + enddo + enddo + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine apply_asr(tensor, r_vector2, r_vector3, new_tensor, n_R, natom) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: n_R, natom + real(kind=DP), intent(in) :: tensor(n_R, 3*natom, 3*natom, 3*natom) + real(kind=DP), intent(in) :: r_vector2(n_R, 3), r_vector3(n_R, 3) + real(kind=DP), intent(out) :: new_tensor(n_R, 3*natom, 3*natom, 3*natom) + + integer :: i_r, j_r, iat, jat, kat, list(n_R, n_R), tot_r, step + real(kind=DP) :: aux_tensor(3, 3, 3) + real(kind=DP), dimension(n_R,3) :: unique_rvec3 + real(kind=DP) :: tol, norma, tot_norma, norm_sum + + tol = 1.0_DP/10.0_DP**6 + tot_norma = 1000.0_DP + call find_unique_rvec(r_vector3, unique_rvec3, list, n_R, tot_r) + new_tensor = tensor + step = 0 + do while(tot_norma > tol) + step = step + 1 + do i_r = 1, tot_r + do iat = 1, natom + do jat = 1, natom + aux_tensor = 0.0_DP + norm_sum = 0.0_DP + do j_r = 1, list(i_r, 1) + do kat = 1, natom + aux_tensor = aux_tensor + & + new_tensor(list(i_r, j_r + 1), 3*(iat-1) + 1:3*iat, 3*(jat-1) + 1:3*jat, 3*(kat-1) + 1:3*kat) + norm_sum = norm_sum + & + norma3(new_tensor(list(i_r, j_r + 1), 3*(iat-1) + 1:3*iat, 3*(jat-1) + 1:3*jat, 3*(kat-1) + 1:3*kat)) + enddo + enddo + do j_r = 1, list(i_r, 1) + do kat = 1, natom + if(norma3(aux_tensor) .gt. 0.0_DP) then + new_tensor(list(i_r, j_r + 1), 3*(iat-1) + 1:3*iat, 3*(jat-1) + 1:3*jat,3*(kat-1) + 1:3*kat) = & + new_tensor(list(i_r, j_r + 1), 3*(iat-1) + 1:3*iat, 3*(jat-1) + 1:3*jat,3*(kat-1) + 1:3*kat) & + - aux_tensor*& + norma3(new_tensor(list(i_r, j_r + 1), 3*(iat-1) + 1:3*iat, 3*(jat-1) + 1:3*jat,3*(kat-1) +1:3*kat))& + /norm_sum + endif + enddo + enddo + enddo + enddo + enddo + call apply_permutation_symmetry_local(new_tensor, r_vector2, r_vector3, n_R, natom) + tot_norma = 0.0_DP + do i_r = 1, tot_r + do iat = 1, natom + do jat = 1, natom + norma = 0.0_DP + aux_tensor = 0.0_DP + do j_r = 1, list(i_r, 1) + do kat = 1, natom + aux_tensor = aux_tensor + & + new_tensor(list(i_r, j_r + 1), 3*(iat-1) + 1:3*iat, 3*(jat-1) + 1:3*jat,3*(kat-1) + 1:3*kat) + enddo + enddo + norma = norma3(aux_tensor) + tot_norma = tot_norma + norma + enddo + enddo + enddo + print*, 'ASR sum on step ', step, ':', tot_norma + enddo + + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + subroutine find_unique_rvec(r_vec3, u_rvec3, list, n_R, tot_r) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + integer, intent(in) :: n_R + real(kind=DP), intent(in) :: r_vec3(n_R, 3) + real(kind=DP), dimension(n_R,3), intent(out) :: u_rvec3 + integer, intent(out) :: list(n_R, n_R), tot_r + + integer :: i_r, j_r + real(kind=DP) :: aux_vec3(n_R, 3) + real(kind=DP) :: tol + logical :: found + + + tol = 1.0_DP/10.0_DP**6 + aux_vec3 = 0.0_DP + list(:,:) = 0 + tot_r = 0 + do i_r = 1, n_R + found = .False. + do j_r = 1, tot_r + if(norm(r_vec3(i_r,:) - aux_vec3(j_r, :)) < tol) then + found = .True. + list(j_r, 1) = list(j_r, 1) + 1 + list(j_r, list(j_r, 1) + 1) = i_r + EXIT + endif + enddo + if(.not. found) then + tot_r = tot_r + 1 + aux_vec3(tot_r, :) = r_vec3(i_r,:) + list(tot_r, 1) = list(tot_r, 1) + 1 + list(tot_r, list(tot_r, 1) + 1) = i_r + endif + enddo + + if(sum(list(1:tot_r,1)) .ne. n_R) then + print*, 'Total number of triplets do not agree with sum of multiplicities for third vector!' + STOP + endif + + u_rvec3(:,:) = aux_vec3(:,:) + + end subroutine + + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + function norm(r) result (d) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + real(kind = DP), intent(in) :: r(3) + real(kind = DP) :: d + + d = sqrt(dot_product(r,r)) + + end function norm + + function norma2(m) result (d) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + real(kind=DP), intent(in) :: m(:,:) + + real(kind=DP) :: d + integer :: i, j, shapem(2) + + shapem = shape(m) + d = 0.0_DP + do i = 1, shapem(2) + do j = 1, shapem(1) + d = d + m(j,i)**2 + enddo + enddo + d = sqrt(d) + + end function + + function norma3(m) result (d) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + real(kind=DP), intent(in) :: m(:,:,:) + + real(kind=DP) :: d + integer :: i, j, k, shapem(3) + + shapem = shape(m) + d = 0.0_DP + do k = 1, shapem(3) + do i = 1, shapem(2) + do j = 1, shapem(1) + d = d + m(j,i,k)**2 + enddo + enddo + enddo + d = sqrt(d) + + end function + + function dot(v,m) result (v1) + IMPLICIT NONE + INTEGER, PARAMETER :: DP = selected_real_kind(14,200) + + real(kind=DP), intent(in) :: v(3), m(3,3) + + real(kind=DP) :: v1(3) + integer :: i + + v1 = 0.0_DP + do i = 1, 3 + v1(:) = v1(:) + v(i)*m(i,:) + enddo + + end function + +end module diff --git a/FModules/third_order_dynbubble.f90 b/FModules/third_order_dynbubble.f90 index 191ba1a3..b2677c4e 100644 --- a/FModules/third_order_dynbubble.f90 +++ b/FModules/third_order_dynbubble.f90 @@ -205,7 +205,6 @@ subroutine compute_diag_dynamic_bubble(ne,energies,nsig,sigma,T,freq,is_gamma,D3 end subroutine compute_diag_dynamic_bubble ! ! -! subroutine compute_perturb_selfnrg(nsig,sigma,T,freq,is_gamma,D3,n_mod,selfnrg) implicit none INTEGER, PARAMETER :: DP = selected_real_kind(14,200) @@ -513,6 +512,7 @@ subroutine Lambda_dynamic_value(n_mod,value,nsigma,sigma,T,w_q2,w_q3,Lambda_out) ! end subroutine Lambda_dynamic_value ! +! ! ======================== accessory routines ======================================== ! SUBROUTINE bose_freq(T, n_mod, freq, bose) diff --git a/FModules/third_order_interpol.f90 b/FModules/third_order_interpol.f90 index 3ce37d63..f9b61a7e 100644 --- a/FModules/third_order_interpol.f90 +++ b/FModules/third_order_interpol.f90 @@ -35,4 +35,4 @@ subroutine interpol(fc,R2,R3,q2,q3,fc_interp,n_blocks,nat) END DO end subroutine interpol ! -end module third_order_interpol \ No newline at end of file +end module third_order_interpol diff --git a/README.md b/README.md index a043f924..e5e7910c 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,8 @@ pip install CellConstructor ``` In this way you will not install the last developing version. + NOTE: diff --git a/UserGuide/conf.py b/UserGuide/conf.py index 24825d24..7cb41cd9 100644 --- a/UserGuide/conf.py +++ b/UserGuide/conf.py @@ -27,7 +27,7 @@ # The short X.Y version version = u'' # The full version, including alpha/beta/rc tags -release = u'1.0' +release = u'1.2' # -- General configuration --------------------------------------------------- diff --git a/build-linux.sh b/build-linux.sh new file mode 100644 index 00000000..b1f9b800 --- /dev/null +++ b/build-linux.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env sh + + +docker run --rm \ + -v $(pwd):/io \ + -e PLAT=manylinux2014_x86_64 \ + quay.io/pypa/manylinux2014_x86_64 \ + /io/build-wheels.sh diff --git a/build-wheels.sh b/build-wheels.sh new file mode 100755 index 00000000..b2d09155 --- /dev/null +++ b/build-wheels.sh @@ -0,0 +1,31 @@ +#!/bin/bash +set -e -u -x + +function repair_wheel { + wheel="$1" + if ! auditwheel show "$wheel"; then + echo "Skipping non-platform wheel $wheel" + elif echo "$wheel" | grep -q manylinux; then + echo "Skipping wheel $wheel" + else + auditwheel repair "$wheel" --plat "$PLAT" -w /io/dist/ + fi +} + + +# Install a system package required by our library +yum install -y atlas-devel lapack-devel blas-devel libjpeg-devel + +mkdir -p /io/dist/ + +# Compile wheels (only python >= 3.5) +for PYBIN in /opt/python/cp3*/bin; do + "${PYBIN}/pip" install -r /io/requirements.txt + cd /io; "${PYBIN}/python" setup.py build + "${PYBIN}/pip" wheel /io/ --no-deps -w /io/dist/ +done + +# Bundle external shared libraries into the wheels +for whl in /io/dist/*.whl; do + repair_wheel "$whl" +done diff --git a/cellconstructor/ForceTensor.py b/cellconstructor/ForceTensor.py index d9b9995a..97f9aea9 100644 --- a/cellconstructor/ForceTensor.py +++ b/cellconstructor/ForceTensor.py @@ -769,7 +769,7 @@ def Interpolate(self, q2, asr = False, verbose = False, asr_range = None, q_dire # If effective charges are present, then add the nonanalitic part if self.effective_charges is not None: - dynq = np.zeros((3,3,self.nat, self.nat), dtype = np.complex, order = "F") + dynq = np.zeros((3,3,self.nat, self.nat), dtype = np.complex128, order = "F") for i in range(self.nat): for j in range(self.nat): dynq[:,:, i, j] = final_fc[3*i : 3*i+3, 3*j:3*j+3] @@ -1127,9 +1127,15 @@ class Tensor3(): This class defines the 3rank tensors, like 3rd force constants. """ - def __init__(self, unitcell_structure, supercell_structure, supercell_size): + def __init__(self, unitcell_structure=None, supercell_structure=None, supercell_size=None,dyn=None): #GenericTensor.__init__(self, *args, **kwargs) + if dyn != None: + unitcell_structure=dyn.structure + supercell_size=dyn.GetSupercell() + supercell_structure=dyn.structure.generate_supercell(supercell_size) + + n_sup = np.prod(supercell_size) nat = unitcell_structure.N_atoms @@ -1144,7 +1150,7 @@ def __init__(self, unitcell_structure, supercell_structure, supercell_size): self.supercell_size = supercell_size - # Cartesian lattice vectors + # Cartesian lattice vectors (in Angstrom) self.r_vector2 = np.zeros((3, n_R), dtype = np.double, order = "F") self.r_vector3 = np.zeros((3, n_R), dtype = np.double, order = "F") @@ -1376,7 +1382,16 @@ def WriteOnFile(self,fname,file_format='Phonopy'): Save the tensor on a file. - The file format is the same as phono3py or D3Q + The file format is the same as phono3py or D3Q. + The unit of measures are those in which the tensor is stored. + If readed from the result of get_free_energy_hessian, they are in Ry/Bohr^3. + + To convert the units to eV/A^3 (used in phono3py, for example), you need to change them as: + >>> my_tensor3.tensor *= CC.Units.RY_TO_EV / CC.Units.BOHR_TO_ANGSTROM**3 + >>> my_tensor3.WriteOnFile("FORCE_CONSTANTS_3RD", file_format="phonopy") + + However, remember to change back in Ry/Bohr^3 if you want to further process this tensor within Cellconstructor + (For example to compute ) Parameters ---------- @@ -1405,9 +1420,10 @@ def WriteOnFile(self,fname,file_format='Phonopy'): for nat1 in range(self.nat): for nat2 in range(self.nat): for nat3 in range(self.nat): + f.write("\n") f.write("{:d}\n".format(i_block)) - f.write("{:16.8e} {:16.8e} {:16.8e}\n".format(*list(self.r_vector2[:, r_block]))) - f.write("{:16.8e} {:16.8e} {:16.8e}\n".format(*list(self.r_vector3[:, r_block]))) + f.write("{:16.8f} {:16.8f} {:16.8f}\n".format(*list(self.r_vector2[:, r_block]))) + f.write("{:16.8f} {:16.8f} {:16.8f}\n".format(*list(self.r_vector3[:, r_block]))) f.write("{:>6d} {:>6d} {:>6d}\n".format(nat1+1, nat2+1, nat3+1)) i_block += 1 # @@ -1415,7 +1431,7 @@ def WriteOnFile(self,fname,file_format='Phonopy'): z = xyz % 3 y = (xyz %9)//3 x = xyz // 9 - f.write("{:>2d} {:>2d} {:>2d} {:>20.10e}\n".format(x+1,y+1,z+1, self.tensor[r_block, 3*nat1 + x, 3*nat2 + y, 3*nat3 + z])) + f.write("{:>2d} {:>2d} {:>2d} {:>20.10f}\n".format(x+1,y+1,z+1, self.tensor[r_block, 3*nat1 + x, 3*nat2 + y, 3*nat3 + z])) elif file_format.upper() == 'D3Q': diff --git a/cellconstructor/Manipulate.py b/cellconstructor/Manipulate.py index 65ff231a..d2153ed6 100644 --- a/cellconstructor/Manipulate.py +++ b/cellconstructor/Manipulate.py @@ -241,22 +241,25 @@ def save_scf_trajectory(fname, trajectory): fp.write(text) fp.write("\n") +def GenerateXYZVideoOfVibrations(*args, **kwargs): + """ + Deprecated. look generate_vibration_video instead. + """ + return generate_vibration_video(*args, **kwargs) -def GenerateXYZVideoOfVibrations(dynmat, filename, mode_id, amplitude, dt, N_t, supercell=(1,1,1), w_pols = None): +def generate_vibration_video(dynmat, filename, mode_id, amplitude, dt, N_t, supercell=(1,1,1), w_pols = None): """ XYZ VIDEO ========= This function save in the filename the XYZ video of the vibration along the chosen mode. - - NOTE: this functionality is supported only at gamma. - Parameters ---------- filename : str Path of the filename in which you want to save the video. It is written in the xyz format, so it is recommanded to use the .xyz extension. + if 'None', then only return the video without saving into a file mode_id : int The number of the mode. Modes are numbered by their frequencies increasing, starting from imaginary (unstable) ones (if any). @@ -267,10 +270,13 @@ def GenerateXYZVideoOfVibrations(dynmat, filename, mode_id, amplitude, dt, N_t, N_t : int The total number of frames. supercell : list of 3 ints - The dimension of the supercell to be shown + Deprecated. It will be ignored. w_pols : (frequencies, polarizaitons) The result of the dyagonalization of the dynamical matrix. + Results + ------- + video : list of CC.Structure.Structure """ # Define the conversion between the frequency in Ry and femptoseconds @@ -280,19 +286,22 @@ def GenerateXYZVideoOfVibrations(dynmat, filename, mode_id, amplitude, dt, N_t, if w_pols is not None: ws, polvects = w_pols else: - ws, polvects = dynmat.DyagDinQ(0) + ws, polvects = dynmat.DiagonalizeSupercell() + + my_supercell = dynmat.GetSupercell() + superstruct = dynmat.structure.generate_supercell(my_supercell) # Extract the good one w = ws[mode_id] - _m_ = np.tile(dynmat.structure.get_masses_array(), (3,1)).T.ravel() + _m_ = np.tile(superstruct.get_masses_array(), (3,1)).T.ravel() polv = polvects[:, mode_id] / np.sqrt(_m_) polv /= np.linalg.norm(polv) # Get the basis structure - basis = dynmat.structure.generate_supercell(supercell) + basis = superstruct # Reproduce the polarization vectors along the number of supercells - polv = np.tile(polv, np.prod(supercell)) + polv = polvects[:, mode_id] video_list = [] times = [] diff --git a/cellconstructor/Methods.py b/cellconstructor/Methods.py index 56c90824..ec02c724 100644 --- a/cellconstructor/Methods.py +++ b/cellconstructor/Methods.py @@ -14,13 +14,37 @@ import numpy as np import sys, os import symph +import scipy, scipy.optimize + + +import cellconstructor as CC +import cellconstructor.Structure as Structure +import cellconstructor.ForceTensor +import cellconstructor.Phonons as Phonons +import cellconstructor.Methods as Methods +import cellconstructor.symmetries as symmetries +import cellconstructor.Spectral +from cellconstructor.Units import * import warnings +__PHONOPY=False +try: + import phonopy + import phono3py + from phono3py.phonon3.fc3 import set_permutation_symmetry_compact_fc3, set_permutation_symmetry_fc3, set_translational_invariance_compact_fc3, set_translational_invariance_fc3, cutoff_fc3_by_zero, distribute_fc3 + from phono3py.phonon3.dataset import get_displacements_and_forces_fc3 + from phonopy.harmonic.force_constants import compact_fc_to_full_fc + __PHONOPY=True +except: + __PHONOPY=False + #from . import Structure BOHR_TO_ANGSTROM = 0.529177249 __EPSILON__ = 1e-6 +EV_TO_J = 1.602176634e-19 +AU = 1.66053906660e-27 __all__ = ["covariant_coordinates", "from_dynmat_to_spectrum", @@ -1017,56 +1041,58 @@ def read_namelist(line_list): inside_namespace = False namespace.clear() continue - - # First of all split for quotes - value = None - new_list_trial = line.split('"') - if len(new_list_trial) == 3: - value = '"' + new_list_trial[1] + '"' - else: - new_list_trial = line.split("'") + + if inside_namespace: + + # First of all split for quotes + value = None + new_list_trial = line.split('"') if len(new_list_trial) == 3: value = '"' + new_list_trial[1] + '"' - - # Get the name of the variable - new_list = line.split("=") - - if len(new_list) != 2 and value is None: - raise IOError("Error, I do not understand the line %s" % line) - elif len(new_list) < 2: - raise IOError("Error, I do not understand the line %s" % line) + else: + new_list_trial = line.split("'") + if len(new_list_trial) == 3: + value = '"' + new_list_trial[1] + '"' - variable = new_list[0].strip().lower() - if value is None: - value = new_list[1].strip() - - # Remove ending comma and otehr tailoring space - if value[-1] == ",": - value = value[:-1].strip() - - - # Convert fortran bool - if value.lower() == ".true.": - value = True - elif value.lower() == ".false.": - value = False - elif '"' == value[0]: # Get a string content - # If it is a string cancel the " or ' or , - value = value.replace("\"", "") - elif "'" == value[0]: - value = value.replace("'", "") - elif value.count(" ") >= 1: - value = [float(item) for item in value.split()] - else: - # Check if it is a number - try: - value = float(value.lower().replace("d", "e")) - except: - pass - if inside_namespace: - namespace[variable] = value - else: - total_dict[variable] = value + # Get the name of the variable + new_list = line.split("=") + + if len(new_list) != 2 and value is None: + raise IOError("Error, I do not understand the line %s" % line) + elif len(new_list) < 2: + raise IOError("Error, I do not understand the line %s" % line) + + variable = new_list[0].strip().lower() + if value is None: + value = new_list[1].strip() + + # Remove ending comma and otehr tailoring space + if value[-1] == ",": + value = value[:-1].strip() + + + # Convert fortran bool + if value.lower() == ".true.": + value = True + elif value.lower() == ".false.": + value = False + elif '"' == value[0]: # Get a string content + # If it is a string cancel the " or ' or , + value = value.replace("\"", "") + elif "'" == value[0]: + value = value.replace("'", "") + elif value.count(" ") >= 1: + value = [float(item) for item in value.split()] + else: + # Check if it is a number + try: + value = float(value.lower().replace("d", "e")) + except: + pass + if inside_namespace: + namespace[variable] = value + else: + total_dict[variable] = value # The file has been analyzed if inside_namespace: @@ -1818,3 +1844,397 @@ def get_bandpath(unit_cell, path_string, special_points, n_points = 1000): q_path[i-1, :] = path_points[index, :] + counter * dq * q_versor return q_path, (xaxis, xticks, xlabels) + + + +# A function to check whether a vector is part of a space vector +# Identified by a span of non orthogonal vectors +def get_generic_covariant_coefficients(v, space, thr = 0.05): + """ + Check whether a vector is part of a space spanned by a set of vectors. + Even if the space is a contains less element than the total dimension + + Parameters + ---------- + v : ndarray(size = (d,)) + The vector to check + space : ndarray(size = (n_vectors, d)) + The space spanned by the vectors + thr : float + The threshold to consider a vector as part of the space + + Results + ------- + Return the coefficients of the space that minimize the distance + between the vector and the space spanned by the vectors. + Returns None if the solution is not found. + """ + if len(space) == 0: + return None + + space = np.array(space, dtype = np.double) + x_start = space.dot(v) + + if np.linalg.norm(v - x_start.dot(space)) < thr: + return x_start + + if space.shape[0] == space.shape[1]: + x = np.linalg.solve(space, v) + return x + + # Solve the minimization problem + def function_to_minimize(x): + res = v - x.dot(space) + return res.dot(res) + + def gradient(x): + return -2*(v - x.dot(space)).dot(space.T) + + # Solve the minimization problem + res = scipy.optimize.minimize(function_to_minimize, + x_start, + jac = gradient, + method = "BFGS", + options = {'disp' : False}) + + # Check if the solution is correct + if res.success: + if np.linalg.norm(res.x.dot(space) - v) > thr: + return None + return res.x + else: + print("NO SUCCESS") + raise ValueError("Error, the minimization problem was not solved correctly") + return None + +# Check if two vectors are same if we account for periodic boundary conditions +def same_vectors(vec1, vec2, cell): + rvec1 = np.dot(vec1, cell) + rvec2 = np.dot(vec2, cell) + if(np.linalg.norm(rvec1 - rvec2) < 1.0-6): + return True + else: + same = False + for ix in range(-1,2): + if(not same): + for iy in range(-1,2): + if(not same): + for iz in range(-1,2): + rvec3 = rvec2 + np.array([ix,iy,iz]) + if(np.linalg.norm(rvec1 - rvec3) < 1.0-6): + same = True + break + return same + +# Rewrite phonopy force constants to a format identical to CC.ForceTensor one +# Better use sscha_phonons_from_phonopy ! +def phonopy_fc2_to_tensor2(fc2, phonon): + if(not __PHONOPY): + raise RuntimeError('Phonopy and phono3py are needed for this routine!') + s2u = phonon.supercell.s2u_map.copy() + u2s = phonon.supercell.u2s_map.copy() + nat_uc = len(u2s) + nat = len(s2u) + if(nat%nat_uc == 0): + nuc = np.int(np.round(float(nat)/float(nat_uc))) + else: + print('Number of unit cell could not be determined from the number of atoms!', nat, nat_uc) + if(len(fc2) == nat_uc): + indices = np.arange(nat_uc) + elif(len(fc2) == nat): + indices = u2s.copy() + else: + raise RuntimeError('Unexpected number of pairs in second order force constants! ', len(fc2)) + ind_s = np.zeros_like(s2u) + for iat in range(nat): + for jat in range(nat_uc): + if(s2u[iat] == u2s[jat]): + ind_s[iat] = jat + vecs = phonon.supercell.scaled_positions - phonon.supercell.scaled_positions[0] + for iat in range(nat): + for ix in range(3): + if(vecs[iat][ix] < -1.0e-3): + vecs[iat][ix] += 1.0 + elif(vecs[iat][ix] > 0.999): + vecs[iat][ix] -= 1.0 + + vecs = np.round(vecs, 5) + rvec = vecs[0:nuc] + invcell = np.linalg.inv(phonon.primitive.cell) + ind_u = np.zeros_like(s2u) + for iat in range(nat): + found = False + lvec = vecs[iat] - vecs[s2u[iat]] + for ix in range(3): + if(lvec[ix] < -1.0e-3): + lvec[ix] += 1.0 + elif(lvec[ix] > 0.999): + lvec[ix] -= 1.0 + for iuc in range(nuc): + if(np.linalg.norm(lvec - rvec[iuc]) < 1.0e-4): + ind_u[iat] = iuc + found = True + break + if(not found): + print('Could not find the unit cell of atom: ', iat) + print(lvec) + sscha_fc2 = np.zeros((nuc, 3*nat_uc, 3*nat_uc)) + for iat in range(nat_uc): + for jat in range(nat): + iuc = ind_u[jat] + sscha_fc2[iuc, 3*iat:3*(iat+1), 3*ind_s[jat]:3*(ind_s[jat] + 1)] = fc2[indices[iat]][jat] + rvec = np.dot(rvec, phonon.supercell.cell) + + return sscha_fc2, rvec + +# Generate CC.Structure from PhonopyAtoms +def get_sscha_structure_from_phonopy(phatoms): + + if(not __PHONOPY): + raise RuntimeError('Phonopy and phono3py are needed for this routine!') + sscha_structure = Structure.Structure(nat = len(phatoms.positions)) + sscha_structure.coords = phatoms.positions + sscha_structure.N_atoms = len(phatoms.positions) + sscha_structure.atoms = phatoms.symbols + sscha_structure.unit_cell = phatoms.cell + sscha_structure.has_unit_cell = True + for iat in range(sscha_structure.N_atoms): + sscha_structure.masses[sscha_structure.atoms[iat]] = phatoms.masses[iat]/MASS_RY_TO_UMA + + return sscha_structure + +# Get Cellconstructor.Phonons from Phonopy object +def sscha_phonons_from_phonopy(phonon): + + """ + Get Phonons object from phonopy object. + + """ + + if(not __PHONOPY): + raise RuntimeError('Phonopy and phono3py are needed for this routine!') + sscha_structure = get_sscha_structure_from_phonopy(phonon.primitive) # get structure + sscha_supercell = get_sscha_structure_from_phonopy(phonon.supercell) + + nat_uc = sscha_structure.N_atoms + nat_sc = sscha_supercell.N_atoms + + q_grid = symmetries.GetQGrid(sscha_structure.unit_cell, np.diag(phonon.supercell_matrix)) + gamma_index = np.argmin(np.sum(np.array(q_grid)**2, axis = 1)) + q_grid[gamma_index] = q_grid[0].copy() + q_grid[0] = np.zeros(3, dtype = np.double) + dyn = Phonons.Phonons(sscha_structure, len(q_grid)) + dyn.q_tot = q_grid + + if(len(phonon.force_constants) == nat_sc): + fc2 = phonon.force_constants.copy()/RY_TO_EV*BOHR_TO_ANGSTROM**2 + elif(len(phonon.force_constants) == nat_uc): + fc2 = compact_fc_to_full_fc(phonon, phonon.force_constants) + fc2 *= BOHR_TO_ANGSTROM**2/RY_TO_EV + else: + raise RuntimeError('Number of force constants does not match expected phonopy formats! ') + + sscha_fc2 = np.zeros( (3*nat_sc, 3*nat_sc), dtype = np.double) + for iat in range(nat_sc): + for jat in range(nat_sc): + sscha_fc2[3*iat:3*(iat+1), 3*jat:3*(jat+1)] = fc2[iat, jat] + + dynq = Phonons.GetDynQFromFCSupercell(sscha_fc2, np.array(dyn.q_tot), sscha_structure, sscha_supercell) + dyn.dynmats = dynq + dyn.AdjustQStar() + + return dyn + +def compact_fc3_to_full_fc3_phonopy(tc): + + """ + + Convert from compact to full format of phono3py 3rd force constants + + """ + + dymmy_fc3 = tc.fc3.copy() + tc.generate_displacements() + supercells = tc.supercells_with_displacements + #fcart_dummy = [] + #for isup in range(len(supercells)): + # fcart_dummy.append(np.zeros_like(supercells[isup].scaled_positions)) + #tc.forces = fcart_dummy + #disps, _ = get_displacements_and_forces_fc3(tc.dataset) + first_disp_atoms = np.unique([x["number"] for x in tc.dataset["first_atoms"]]) + s2p_map = tc.primitive.s2p_map + p2s_map = tc.primitive.p2s_map + p2p_map = tc.primitive.p2p_map + s2compact = np.arange(len(s2p_map), dtype=int) + for i in first_disp_atoms: + assert i in p2s_map + #target_atoms = [i for i in p2s_map if i not in first_disp_atoms] + rotations = tc.symmetry.symmetry_operations["rotations"] + permutations = tc.symmetry.atomic_permutations + shape = list(np.shape(tc.fc3)) + shape[0] = shape[1] + tc.fc3 = np.zeros(shape, dtype = float) + for iat in range(len(dymmy_fc3)): + tc.fc3[p2s_map[iat]] = dymmy_fc3[iat] + target_atoms = np.arange(len(s2p_map), dtype=int).tolist() + for i in range(len(p2s_map)): + target_atoms.remove(p2s_map[i]) + distribute_fc3(tc.fc3, p2s_map, target_atoms, tc.supercell.cell.T, rotations, permutations, s2compact, verbose=True) + +def phonopy_fc3_to_tensor3(tc, apply_symmetries = True): + + """ + Get 3rd order force constants in SSCHA format from phono3py object. + + tc : Phono3py object which contains 3rd order force constants + + """ + + if(not __PHONOPY): + raise RuntimeError('Phonopy and phono3py are needed for this routine!') + unitcell = get_sscha_structure_from_phonopy(tc.primitive) + supercell = get_sscha_structure_from_phonopy(tc.supercell) + uc_nat = unitcell.N_atoms + sc_nat = supercell.N_atoms + if(uc_nat in tc.fc3.shape[0:3]): + print('Compact forceconstants.') + compact_fc3_to_full_fc3_phonopy(tc) + + supercell_matrix = (np.diag(tc.supercell_matrix).astype(int)).tolist() + supercell_structure = unitcell.generate_supercell(supercell_matrix) + atom_mapping = np.zeros(len(supercell.coords), dtype=int) + already_there = [False for x in range(len(supercell.coords))] + for iat in range(len(supercell.coords)): + found_atom = False + for jat in range(len(supercell.coords)): + if(np.linalg.norm(supercell.coords[iat] - supercell_structure.coords[jat]) < 1.0e-5 and not already_there[jat]): + atom_mapping[iat] = jat + found_atom = True + already_there[jat] = True + break + elif(np.linalg.norm(supercell.coords[iat] - supercell_structure.coords[jat]) < 1.0e-5 and already_there[jat]): + raise RuntimeError('Already matched this atom!') + if(not found_atom): + print('Could not find ' + str(iat + 1) + ' atom in the structure!') + if(not np.all(already_there)): + raise RuntimeError('Did not match all atoms...') + tensor3 = CC.ForceTensor.Tensor3(unitcell, supercell_structure, supercell_matrix) + aux_tensor = np.zeros((3*sc_nat, 3*sc_nat, 3*sc_nat)) + for iat in range(sc_nat): + iat1 = atom_mapping[iat] + for jat in range(sc_nat): + jat1 = atom_mapping[jat] + for kat in range(sc_nat): + kat1 = atom_mapping[kat] + for i in range(3): + for j in range(3): + for k in range(3): + aux_tensor[iat1*3+i, jat1*3+j, kat1*3+k] = tc.fc3[iat,jat,kat,i,j,k] + d3 = np.asfortranarray(aux_tensor) + if(apply_symmetries): + qe_sym = CC.symmetries.QE_Symmetry(supercell_structure) + qe_sym.SetupFromSPGLIB() + qe_sym.ApplySymmetryToTensor3(d3) + d3 *= BOHR_TO_ANGSTROM**3/RY_TO_EV + tensor3.SetupFromTensor(d3) + np.save("d3_realspace_sym.npy", d3) + + print('Translated phonopy 3rd order force constants.') + return tensor3 + + +def tensor2_to_phonopy_fc2(SSCHA_tensor, phonon): + + """ + + Generate 2nd order forceconstants in phono3py format from SSCHA ForceTensor2 object. + + SSCHA_tensor : SSCHA Tensor2 object + phonon : Phonopy object that provides structure and additional routines (should have the same supercell as the one used in generating SSCHA tensor) + + """ + + if(not __PHONOPY): + raise RuntimeError('Phonopy and phono3py are needed for this routine!') + SSCHA_force_constants = np.array(SSCHA_tensor.tensor.copy()) + red_vecs_SSCHA = np.round(SSCHA_tensor.x_r_vector2.copy().astype(float), 4) + red_vecs_phonopy = np.round(np.dot(phonon.supercell.positions, np.linalg.inv(phonon.primitive.cell)), 4) + dims = np.diag(phonon.supercell_matrix) + nuc = np.prod(dims) + if(nuc != np.shape(red_vecs_SSCHA)[1]): + print('Phonopy and SSCHA have different number of unit cells!') + print('Make sure you do not center() SSCHA tensor before attempting this conversion!') + raise RuntimeError('Non-conforming shapes of matrices!') + nat = len(phonon.primitive.positions) + s2u = phonon.supercell.s2u_map.copy() + primitive_cell_position = red_vecs_phonopy[s2u] + for iat in range(len(red_vecs_phonopy)): + red_vecs_phonopy[iat] = red_vecs_phonopy[iat] - primitive_cell_position[iat] + for i in range(3): + if(red_vecs_phonopy[iat][i] >= dims[i]): + red_vecs_phonopy[iat][i] = red_vecs_phonopy[iat][i] - dims[i] + elif(red_vecs_phonopy[iat][i] < 0.0): + red_vecs_phonopy[iat][i] = red_vecs_phonopy[iat][i] + dims[i] + unit_cell_order = np.zeros(np.shape(red_vecs_SSCHA)[1], dtype = int) + for iuc in range(np.shape(red_vecs_SSCHA)[1]): + for iat in range(nuc): + if(np.linalg.norm(red_vecs_SSCHA[:,iuc] - red_vecs_phonopy[iat]) < 1.0e-4): + unit_cell_order[iuc] = iat + phonopy_tensor = np.zeros((nat,nuc*nat,3,3)) + for iuc in range(nuc): + for iat in range(nat): + for jat in range(nat): + phonopy_tensor[iat][jat*nuc + unit_cell_order[iuc]] = SSCHA_force_constants[iuc,3*iat:3*(iat+1),3*jat:3*(jat+1)] + return phonopy_tensor*RY_TO_EV/BOHR_TO_ANGSTROM**2 + +def tensor3_to_phonopy_fc3(SSCHA_tensor, phonon): + + """ + + Generate 3rd order forceconstants in phono3py format from SSCHA ForceTensor3 object. + + SSCHA_tensor : SSCHA Tensor3 object + phonon : Phonopy object that provides structure and additional routines (should have the same supercell as the one used in generating SSCHA tensor) + + """ + + if(not __PHONOPY): + raise RuntimeError('Phonopy and phono3py are needed for this routine!') + + SSCHA_force_constants = np.array(SSCHA_tensor.tensor.copy()) + red_vecs_SSCHA_1 = np.round(SSCHA_tensor.x_r_vector2.copy().astype(float), 4) + red_vecs_SSCHA_2 = np.round(SSCHA_tensor.x_r_vector3.copy().astype(float), 4) + red_vecs_phonopy = np.round(np.dot(phonon.supercell.positions, np.linalg.inv(phonon.primitive.cell)), 4) + dims = np.diag(phonon.supercell_matrix) + nuc = np.prod(dims) + if(nuc**2 != np.shape(red_vecs_SSCHA_1)[1]): + print('Phonopy and SSCHA have different number of unit cells!') + print('Make sure you do not center() SSCHA tensor before attempting this conversion!') + raise RuntimeError('Non-conforming shapes of matrices!') + nat = len(phonon.primitive.positions) + s2u = phonon.supercell.s2u_map.copy() + primitive_cell_position = red_vecs_phonopy[s2u] + for iat in range(len(red_vecs_phonopy)): + red_vecs_phonopy[iat] = red_vecs_phonopy[iat] - primitive_cell_position[iat] + for i in range(3): + if(red_vecs_phonopy[iat][i] >= dims[i]): + red_vecs_phonopy[iat][i] = red_vecs_phonopy[iat][i] - dims[i] + elif(red_vecs_phonopy[iat][i] < 0.0): + red_vecs_phonopy[iat][i] = red_vecs_phonopy[iat][i] + dims[i] + unit_cell_order_1 = np.zeros(np.shape(red_vecs_SSCHA_1)[1], dtype = int) + unit_cell_order_2 = np.zeros(np.shape(red_vecs_SSCHA_2)[1], dtype = int) + for iuc in range(np.shape(red_vecs_SSCHA_1)[1]): + for iat in range(nuc): + if(np.linalg.norm(red_vecs_SSCHA_1[:,iuc] - red_vecs_phonopy[iat]) < 1.0e-4): + unit_cell_order_1[iuc] = iat + for iuc in range(np.shape(red_vecs_SSCHA_2)[1]): + for iat in range(nuc): + if(np.linalg.norm(red_vecs_SSCHA_2[:,iuc] - red_vecs_phonopy[iat]) < 1.0e-4): + unit_cell_order_2[iuc] = iat + phonopy_tensor = np.zeros((nat,nuc*nat,nuc*nat,3,3,3)) + for iuc in range(nuc**2): + for iat in range(nat): + for jat in range(nat): + for kat in range(nat): + phonopy_tensor[iat][jat*nuc + unit_cell_order_1[iuc]][kat*nuc + unit_cell_order_2[iuc]] = SSCHA_force_constants[iuc,3*iat:3*(iat+1),3*jat:3*(jat+1), 3*kat:3*(kat+1)] + return phonopy_tensor*RY_TO_EV/BOHR_TO_ANGSTROM**3 diff --git a/cellconstructor/Phonons.py b/cellconstructor/Phonons.py index 5ef8d8e4..b84928da 100644 --- a/cellconstructor/Phonons.py +++ b/cellconstructor/Phonons.py @@ -45,6 +45,12 @@ except: __SPGLIB__ = False +try: + import ase, ase.io + __ASE__ = True +except: + __ASE__ = False + __EPSILON__ = 1e-5 __EPSILON_W__ = 3e-9 @@ -1239,7 +1245,7 @@ def save_qe(self, filename, full_name = False): fp.write("( %10.6f%10.6f %10.6f%10.6f %10.6f%10.6f )\n" % (np.real(atomic_disp[3*i, mu]), np.imag(atomic_disp[3*i,mu]), np.real(atomic_disp[3*i+1, mu]), np.imag(atomic_disp[3*i+1,mu]), - np.real(atomic_disp[3*i+2, mu]), np.imag(atomic_disp[3*i+1,mu]))) + np.real(atomic_disp[3*i+2, mu]), np.imag(atomic_disp[3*i+2,mu]))) fp.write("*" * 75 + "\n") fp.close() @@ -1248,14 +1254,16 @@ def save_phononpy(self, *args, **kwargs): warnings.warn("[DEPRECATION WARNING] save_phononpy is deprecated: use save_phonopy instead.") self.save_phonopy(*args, **kwargs) - def save_phonopy(self, path = ".", supercell_size = None): + def save_phonopy(self, path = ".", supercell_size = None, units_ev_ang2 = True, + write_poscar = True, write_unitcell = False): """ EXPORT THE DYN IN THE PHONONPY FORMAT ===================================== This tool export the dynamical matrix into the PHONONPY plain text format. - We save them in Ry/bohr^2, as the quantum espresso format. Please, remember - this when using Phononpy for the conversion factors. + If units_ev_ang2 is True (default) the dynamical matrix is written in eV/A^2 + Otherwise we use the Ry/bohr^2, as the quantum espresso format. + Please, remember this when using Phononpy for the conversion factors. It will create a file called FORCE_CONSTANTS, one called unitcell.in with the info on the structure @@ -1267,6 +1275,14 @@ def save_phonopy(self, path = ".", supercell_size = None): supercell_size : list of 3 The supercell that defines the dynamical matrix, note phononpy works in the supercell. If none, it is inferred from the q points + units_ev_ang2 : bool + If True (default) convert the units in eV / A^2 + write_poscar : bool + If True produce also the POSCAR file with the structure + for phonopy. + It requires ASE to be installed. + write_unitcell : bool + If true, produce a unitcell.in for phonopy. """ @@ -1285,8 +1301,12 @@ def save_phonopy(self, path = ".", supercell_size = None): lines.append("%d %d\n" % (nat_sc, nat_sc)) for i in range(nat_sc): for j in range(nat_sc): - lines.append("%4d\t%4d\n" % (i, j)) - mat = np.real(superdyn.dynmats[0][3*i : 3*i+ 3, 3*j: 3*j+3]) + lines.append("%4d\t%4d\n" % (i+1, j+1)) + mat = np.copy(np.real(superdyn.dynmats[0][3*i : 3*i+ 3, 3*j: 3*j+3])) + + if units_ev_ang2: + mat *= RY_TO_EV / BOHR_TO_ANGSTROM**2 + lines.append("%16.8f %16.8f %16.8f\n" % (mat[0,0], mat[0,1], mat[0,2])) lines.append("%16.8f %16.8f %16.8f\n" % (mat[1,0], mat[1,1], mat[1,2])) lines.append("%16.8f %16.8f %16.8f\n" % (mat[2,0], mat[2,1], mat[2,2])) @@ -1297,38 +1317,46 @@ def save_phonopy(self, path = ".", supercell_size = None): f.close() # Produce the unit cell - lines = [] - lines.append("&system\n") - lines.append("ibrav = 0\n") - lines.append("celldm(1) = 1.889726125836928\n") - lines.append("nat = %d\n" % self.structure.N_atoms) - - typs = self.structure.masses.keys() - lines.append("ntyp = %d\n" % len(typs)) - lines.append("&end\n") - - # Write the atomic species - lines.append("ATOMIC_SPECIES\n") - for i in typs: - m = self.structure.masses[i] - lines.append("%s %16.8f XXX\n" % (i, m / 911.444243096)) - - # Write the unit cell - lines.append("CELL_PARAMETERS alat\n") - for i in range(3): - uc_v = self.structure.unit_cell[i, :] #* 1.889726125836928 - lines.append("%16.8f %16.8f %16.8f\n" % (uc_v[0], uc_v[1], uc_v[2])) + if write_unitcell: + lines = [] + lines.append("&system\n") + lines.append("ibrav = 0\n") + lines.append("celldm(1) = 1.889726125836928\n") + lines.append("nat = %d\n" % self.structure.N_atoms) + + typs = self.structure.masses.keys() + lines.append("ntyp = %d\n" % len(typs)) + lines.append("&end\n") + + # Write the atomic species + lines.append("ATOMIC_SPECIES\n") + for i in typs: + m = self.structure.masses[i] + lines.append("%s %16.8f XXX\n" % (i, m / 911.444243096)) + + # Write the unit cell + lines.append("CELL_PARAMETERS alat\n") + for i in range(3): + uc_v = self.structure.unit_cell[i, :] #* 1.889726125836928 + lines.append("%16.8f %16.8f %16.8f\n" % (uc_v[0], uc_v[1], uc_v[2])) - lines.append("ATOMIC_POSITIONS crystal\n") - for i in range(nat): - atm = self.structure.atoms[i] - cov_vect = Methods.covariant_coordinates(self.structure.unit_cell, self.structure.coords[i, :]) - lines.append("%s %16.8f %16.8f %16.8f\n" % (atm, cov_vect[0], cov_vect[1], cov_vect[2])) + lines.append("ATOMIC_POSITIONS crystal\n") + for i in range(nat): + atm = self.structure.atoms[i] + cov_vect = Methods.covariant_coordinates(self.structure.unit_cell, self.structure.coords[i, :]) + lines.append("%s %16.8f %16.8f %16.8f\n" % (atm, cov_vect[0], cov_vect[1], cov_vect[2])) - f = open(os.path.join(path, "unitcell.in"), "w") - f.writelines(lines) - f.close() + f = open(os.path.join(path, "unitcell.in"), "w") + f.writelines(lines) + f.close() + + # Write also the POSCAR file + if write_poscar: + if __ASE__: + ase.io.write("POSCAR", self.structure.get_ase_atoms(), direct=True) + else: + raise ImportError("Error, you must have ase installed to save the POSCAR file.") def load_phonopy(self, yaml_filename = "phonopy.yaml", fc_filename = None): """ @@ -1339,6 +1367,8 @@ def load_phonopy(self, yaml_filename = "phonopy.yaml", fc_filename = None): It needs two files: the file with the structure information, and the file with the force constant matrix. + TODO: Test properly, possible bugs. + Parameters ---------- yaml_filename : string @@ -1347,6 +1377,7 @@ def load_phonopy(self, yaml_filename = "phonopy.yaml", fc_filename = None): Path to the FORCE_CONSTANTS file. If None, a file called FORCE_CONSTANTS in the same directory as phonopy.yaml will be looked for. """ + warnings.warn("This subroutine is not tested yet, use it with care.") unit_cell = np.zeros((3,3), dtype = np.double) supercell = np.zeros(3, dtype = np.intc) @@ -3489,15 +3520,17 @@ def ForceSymmetries(self, syms, irt = None, apply_sum_rule = True): if not self.raman_tensor is None: qe_sym.ApplySymmetryToRamanTensor(self.raman_tensor) - def DiagonalizeSupercell(self, verbose = False, lo_to_split = None): + def DiagonalizeSupercell(self, verbose = False, lo_to_split = None, return_qmodes = False, timer=None): r""" - DYAGONALIZE THE DYNAMICAL MATRIX IN THE SUPERCELL + DIAGONALIZE THE DYNAMICAL MATRIX IN THE SUPERCELL ================================================= - This method dyagonalizes the dynamical matrix using the supercell approach. + This method diagonalizes the dynamical matrix in q space + returning frequencies and polarization vectors in the supercell, + without computing the force constant in real space. + + This exploits the block theorem to reduce the size of the dynamical matrix. - In this way we simply generate the polarization vector in the supercell - using those in the unit cell. This is performed using the following equation: @@ -3511,16 +3544,22 @@ def DiagonalizeSupercell(self, verbose = False, lo_to_split = None): Parameters ---------- - lo_to_split : string or ndarray + - lo_to_split : string or ndarray Could be a string with random, or a ndarray indicating the direction on which the LO-TO splitting is computed. If None it is neglected. If LO-TO is specified but no effective charges are present, then a warning is print and it is ignored. + - return_qmodes : bool + If true, frequencies and polarizations in q space are returned. Results ------- - w_mu : ndarray( size = (n_modes), dtype = np.double) + - w_mu : ndarray( size = (n_modes), dtype = np.double) Frequencies in the supercell - e_mu : ndarray( size = (3*Nat_sc, n_modes), dtype = np.double, order = "F") + - e_mu : ndarray( size = (3*Nat_sc, n_modes), dtype = np.double, order = "F") Polarization vectors in the supercell + - w_q : ndarray( size = (3*Nat, nq), dtype = np.double, order = "F") + Frequencies in the q space (only if return_qmodes is True) + - e_q : ndarray( size = (3*Nat, 3*Nat, nq), dtype = np.complex128, order = "F") + Polarization vectors in the q space (only if return_qmodes is True) """ supercell_size = len(self.q_tot) @@ -3535,6 +3574,11 @@ def DiagonalizeSupercell(self, verbose = False, lo_to_split = None): w_array = np.zeros( nmodes, dtype = np.double) e_pols_sc = np.zeros( (nmodes, nmodes), dtype = np.double, order = "F") + nq = len(self.q_tot) + w_q = np.zeros((3*nat, nq), dtype = np.double, order = "F") + pols_q = np.zeros((3*nat, 3*nat, nq), dtype = np.complex128, order = "F") + + # Get the structure in the supercell super_structure = self.structure.generate_supercell(self.GetSupercell()) @@ -3571,6 +3615,16 @@ def DiagonalizeSupercell(self, verbose = False, lo_to_split = None): break if skip_this_q: + # Check if we must return anyway the polarization in q space + if return_qmodes: + # TODO: We could replace this by exploiting the symmetries + if timer is not None: + wq, eq = timer.execute_timed_function(self.DyagDinQ, iq) + else: + wq, eq = self.DyagDinQ(iq) + + w_q[:, iq] = wq + pols_q[:, :, iq] = eq continue @@ -3608,10 +3662,18 @@ def DiagonalizeSupercell(self, verbose = False, lo_to_split = None): wq = np.sqrt(np.abs(wq2)) * np.sign(wq2) else: # Diagonalize the matrix in the given q point - wq, eq = self.DyagDinQ(iq) + if timer is not None: + wq, eq = timer.execute_timed_function(self.DyagDinQ, iq) + else: + wq, eq = self.DyagDinQ(iq) + + # Store the frequencies and the polarization vectors + w_q[:, iq] = wq + pols_q[:, :, iq] = eq # Iterate over the frequencies of the given q point nm_q = i_mu + t1 = time.time() for i_qnu, w_qnu in enumerate(wq): tilde_e_qnu = eq[:, i_qnu] @@ -3733,6 +3795,10 @@ def DiagonalizeSupercell(self, verbose = False, lo_to_split = None): # e_pols_sc[:, i_mu] = evec_2 / np.sqrt(norm2) # i_mu += 1 + t2 = time.time() + if timer is not None: + timer.add_timer("Manipulate polarization vectors", t2 - t1) + # Print how many vectors have been extracted if verbose: print("The {} / {} q point produced {} nodes".format(iq, len(self.q_tot), i_mu - nm_q)) @@ -3749,6 +3815,8 @@ def DiagonalizeSupercell(self, verbose = False, lo_to_split = None): # Get the check for the polarization vector normalization assert np.max(np.abs(np.einsum("ab, ab->b", e_pols_sc, e_pols_sc) - 1)) < __EPSILON__ + if return_qmodes: + return w_array, e_pols_sc, w_q, pols_q return w_array, e_pols_sc @@ -4433,13 +4501,14 @@ def get_dyn_from_ase_phonons(ase_ph, adjust_qstar = True): -def compute_phonons_finite_displacements(structure, ase_calculator, epsilon = 0.05, supercell = (1,1,1), progress = -1, progress_bar = False): +def compute_phonons_finite_displacements(structure, ase_calculator, epsilon = 0.05, + supercell = (1,1,1), progress = -1, progress_bar = False, + use_symmetries = True, debug=False): """ COMPUTE THE FORCE CONSTANT MATRIX ================================= Use finite displacements to compute the force constant matrix. - (Works only at Gamma) Parameters ---------- @@ -4453,13 +4522,21 @@ def compute_phonons_finite_displacements(structure, ase_calculator, epsilon = 0. If positive, prints the status each tot structures progress_bar : bool If True, overwrite the progress line each structure + use_symmetries : bool + If True, use the symmetries to reduce the number of calculations. + More details in the method 'compute_phonons_finite_displacements_sym'. + It requires the SPGLIB library. Results ------- phonons : CC.Phonons.Phonons() The dynamical matrix """ - + if use_symmetries: + if not __SPGLIB__: + raise ImportError("SPGLIB is not installed. Cannot use symmetries. Rerun this subroutine with use_symmetries = False") + return compute_phonons_finite_displacements_sym(structure, ase_calculator, epsilon, + supercell, progress, progress_bar, debug=debug) if np.prod(supercell) > 1: super_structure = structure.generate_supercell(supercell) @@ -4518,7 +4595,6 @@ def compute_force(indices): fc_tmp = np.zeros((nat3, nat3), dtype = np.double) fc_tmp[3*i+j,:] -= forces.ravel() - #print("FORCE ({}) = ".format(3*i+j), forces) return fc_tmp #atm = s.get_ase_atoms() #atm.set_calculator(ase_calculator) @@ -4544,9 +4620,13 @@ def compute_force(indices): print() print("Done.") + #np.savetxt("GoodFC.dat", fc, fmt="%10.6f") + # Impose hermitianity fc = .5 * (fc + fc.T) / epsilon + + # Convert to the correct units final_dyn.dynmats[0] = fc / RY_TO_EV * BOHR_TO_ANGSTROM**2 @@ -4564,3 +4644,265 @@ def compute_force(indices): final_dyn = correct_dyn return final_dyn + + + +def compute_phonons_finite_displacements_sym(structure, ase_calculator, epsilon=0.05, + supercell=(1,1,1), + progress=-1, + progress_bar=False, + debug=False, + timer=None): + """ + COMPUTE THE FORCE CONSTANT MATRIX EXPLOITING SYMMETRIES + ======================================================= + + Use finite displacements to compute the force constant matrix. + This subroutine exploits the symmetries of the structure to + reduce the number of calculations. + + The algorithm is the following: + 1. Generate the supercell + 2. Generate each possible atomic displacement + 3. Check whether the displacement can be obtained as a linear combination + of the displacements already computed (including their symmetry equivalents) + 4. If not, add it to the list of independent displacements + 5. Compute the force on each independent displaced structure + 6. Compute the symmetry equivalent force on each displacement. + 7. Define the matrix of change basis, between all possible Cartesian displacements + and the independent ones + their symmetry equivalents + 8. Compute the force constant matrix as the matrix product of the inverse change of basis + and the matrix of forces. + + TODO: This algorithm neglects the ASR, therefore, sometimes, there are 3 more independent + displacements whose computation could be avoided. + + + Parameters + ---------- + structure : CC.Structure.Structure + The structure on the parameters + ase_calculator : ase.calculators.calculator + The ase calculator to compute energy and forces + epsilon : double + The finite displacement + progress : int + If positive, prints the status each tot structures + progress_bar : bool + If True, overwrite the progress line each structure + debug : bool + If True, prints debugging information + + Results + ------- + phonons : CC.Phonons.Phonons() + The dynamical matrix + """ + #raise NotImplementedError("This subroutine is not working yet") + + super_structure = structure.generate_supercell(supercell) + final_dyn = Phonons(super_structure) + + nat3 = 3 * super_structure.N_atoms + fc = np.zeros( (nat3, nat3), dtype = np.double) + + # Enable the parallel calculation + ase_calculator.directory = "calc_{}".format(Settings.get_rank()) + ase_calculator.set_label("label_{}".format(Settings.get_rank())) + + + #atm = structure.get_ase_atoms() + #atm.set_calculator(ase_calculator) + fc[:,:] = np.zeros((nat3, nat3), np.double) + if progress > 0 or debug: + print() + print("Computing phonons with finite differences.") + + #print("DEBUG:", debug) + # Use spglib to get all the symmetry operations + symm = spglib.get_symmetry(super_structure.get_ase_atoms()) + symm = symmetries.GetSymmetriesFromSPGLIB(symm) + n_syms = len(symm) + + # Get irt from the symmetries (atomic corrispondance after the application of symmetry) + if debug: + print("Getting symmetry equivalent atoms") + + if timer is not None: + irts = timer.execute_timed_function(symmetries.get_symmetry_equivalent_atoms, symm, super_structure) + else: + irts = symmetries.get_symmetry_equivalent_atoms(symm, super_structure, timer=timer) + #irts = [] + #for i, s in enumerate(symm): + # if timer is not None: + # irt = timer.execute_timed_function(symmetries.GetIRT, super_structure, s, timer=timer) + # else: + # irt = symmetries.GetIRT(super_structure, s, timer=timer) + # irts.append(irt) + + # Build the symmetry inequivalent displacements + # This is the basis that we will use to compute the force constant matrix + # Doing this in parallel is not possible, because the displacements are not independent + # Therefore, we need to compute all the displacements in a single process + if timer is not None: + generators, list_of_calculations, displacements = timer.execute_timed_function(symmetries.get_force_constants_generators, symm, irts, super_structure) + else: + generators, list_of_calculations, displacements = symmetries.get_force_constants_generators(symm, irts, super_structure) + + print("Number of symmetry inequivalent displacements:", len(list_of_calculations)) + if debug: + print("Saving the generators and displacements") + np.save("generators.npy", generators) + np.save("displacements.npy", displacements) + + assert len(displacements) == nat3, "The number of displacements is not correct. Something went wrong." + + def compute_force(indices): + i, j = indices + #Settings.all_print("Computing indices:", i, j) + + if progress > 0: + if (3*i + j) % progress == 0: + if progress_bar and Settings.am_i_the_master(): + sys.stdout.write("\rProgress {:4.1f} % ... ".format(100 * (3*i + j + 1) / nat3)) + sys.stdout.flush() + else: + Settings.all_print("Finite displacement of structure {} / {}".format(3*i + j + 1, nat3)) + + + + s = super_structure.copy() + + + s.coords[i, j] += epsilon + + + ase_calculator.set_label("disp_{}".format(3*i + j)) + ase_calculator.directory = "disp_{}".format(3*i + j) + energy, forces = calculators.get_energy_forces(ase_calculator, s) + fc_tmp = np.zeros((nat3, nat3), dtype = np.double) + fc_tmp[3*i+j,:] -= forces.ravel() + + return fc_tmp + #atm = s.get_ase_atoms() + #atm.set_calculator(ase_calculator) + fc[3*i + j, :] -= forces.ravel() + + if timer is not None: + fc = timer.execute_timed_function(Settings.GoParallel, compute_force, list_of_calculations, reduce_op='+') + else: + fc = Settings.GoParallel(compute_force, list_of_calculations, reduce_op='+') + + #if Settings.am_i_the_master(): + # np.savetxt("FC_before_subtraction.dat", fc) + + energy = None + forces = None + if Settings.am_i_the_master(): + energy, forces = calculators.get_energy_forces(ase_calculator, super_structure) + fc[:,:] += np.tile(forces.ravel(), (nat3, 1)) + Settings.barrier() + fc = Settings.broadcast(fc) + + # Now we can generate all the symmetry equivalent forces + + # Define the force constant matrix in the basis of the auxiliary vectors + fc_aux_basis = np.zeros((nat3, nat3), dtype = np.double) + + # Compute the auxiliary force basis + # This could exploit parallelization to speedup the calculation + for index, gen in enumerate(generators): + # Get the symmetry operation + current_sym = symm[gen["sym_index"]] + current_irt = irts[gen["sym_index"]] + + i = gen["atom_index"] + j = gen["direction"] + force = fc[3*i + j, :].reshape((super_structure.N_atoms, 3)) + + # Apply the symmetry to the force + if timer is not None: + force_sym = timer.execute_timed_function(symmetries.ApplySymmetryToVector,current_sym, force, super_structure.unit_cell, current_irt) + else: + force_sym = symmetries.ApplySymmetryToVector(current_sym, force, super_structure.unit_cell, current_irt) + + fc_aux_basis[index, :] = force_sym.ravel() + + + # We can now compute the force constants in the basis of the displacements + # counter_index = -1 + # for i in range(super_structure.N_atoms): + # if counter_index +1 == nat3: + # break + # for j in range(3): + # if counter_index +1 == nat3: + # break + # disp = np.zeros((super_structure.N_atoms, 3), dtype=np.double) + # disp[i, j] += 1 + # if (i, j) in list_of_calculations: + # # Generate the basis + # force = fc[3*i + j, :].reshape((super_structure.N_atoms, 3)) + + # # Generate the symmetry equivalent displacements + # if timer is not None: + # disp_sym = timer.execute_timed_function(symmetries.ApplySymmetriesToVector,symm, disp, super_structure.unit_cell, irts) + # force_sym = timer.execute_timed_function(symmetries.ApplySymmetriesToVector,symm, force, super_structure.unit_cell, irts) + # else: + # disp_sym = symmetries.ApplySymmetriesToVector(symm, disp, super_structure.unit_cell, irts) + # force_sym = symmetries.ApplySymmetriesToVector(symm, force, super_structure.unit_cell, irts) + + # # Check wether to add or not the newly generated displacements to the space + # for i_sym in range(n_syms): + # v = disp_sym[i_sym, :, :] + # if timer is not None: + # coeffs = timer.execute_timed_function(Methods.get_generic_covariant_coefficients, v.ravel(), disp_basis) + # else: + # coeffs = Methods.get_generic_covariant_coefficients(v.ravel(), disp_basis) + + # if coeffs is None: + # disp_basis.append(v.ravel()) + # counter_index += 1 + # fc_aux_basis[counter_index, :] = force_sym[i_sym, :, :].ravel() + + #np.savetxt("OriginalFC.dat", fc, fmt="%10.6f") + #np.savetxt("FC_aux_basis.dat", fc_aux_basis, fmt="%10.6f") + + # Transform back the force constant in the real space + metric_tensor = np.array(displacements) + inv_metric_tensor = np.linalg.inv(metric_tensor) + fc = inv_metric_tensor.dot(fc_aux_basis)#.dot(inv_metric_tensor.T) + #np.savetxt("NewFC.dat", fc, fmt="%10.6f") + #np.savetxt("MetricTensor.dat", metric_tensor, fmt="%10.6f") + #np.savetxt("InvMetricTensor.dat", inv_metric_tensor, fmt="%10.6f") + + #if Settings.am_i_the_master(): + # np.savetxt("FC_after_subtraction.dat", fc) + + if progress > 0: + print() + print("Done.") + + # Impose hermitianity + fc = .5 * (fc + fc.T) / epsilon + + # Convert to the correct units + final_dyn.dynmats[0] = fc / RY_TO_EV * BOHR_TO_ANGSTROM**2 + + + # Now we have the dynamical matrix in the supercell, get the dynamical matrix in the correct unit cell + if np.prod(supercell) > 1: + correct_dyn = Phonons(structure, nqirr = np.prod(supercell)) + q_tot = symmetries.GetQGrid(structure.unit_cell, supercell) + if timer is not None: + dynq = timer.execute_timed_function(GetDynQFromFCSupercell, + final_dyn.dynmats[0], np.array(q_tot), structure, super_structure) + else: + dynq = GetDynQFromFCSupercell(final_dyn.dynmats[0], np.array(q_tot), structure, super_structure) + for iq, q in enumerate(q_tot): + correct_dyn.dynmats[iq] = dynq[iq, :,:] + correct_dyn.q_tot[iq] = q + + correct_dyn.AdjustQStar() + final_dyn = correct_dyn + + return final_dyn diff --git a/cellconstructor/Settings.py b/cellconstructor/Settings.py index 5d3f8aee..7119bafb 100644 --- a/cellconstructor/Settings.py +++ b/cellconstructor/Settings.py @@ -3,6 +3,10 @@ This file keeps in mind common settings that needs to be initialized once. """ import numpy as np +import time +import inspect +import sys + # The parallelization setup __PARALLEL_TYPE__ = "serial" @@ -153,14 +157,52 @@ def GetNProc(): return mpi4py.MPI.COMM_WORLD.Get_size() return __NPROC__ + +def split_configurations(n_configs): + """ + Return the range of configurations that each process must be compute. + The argument returned can directly go in the GoParallel function. + + Parameters + ---------- + n_configs : int + The total number of configurations to be computed + + Returns + ------- + list_of_inputs : list + A list of tuples (start, end) that specify the range of configurations + """ + + nproc = GetNProc() + list_of_inputs = [] + index = 0 + for i in range(nproc): + start_config = index + index += n_configs // nproc + if i < n_configs % nproc: + index += 1 + end_config = index + + list_of_inputs.append( (start_config, end_config) ) + + return list_of_inputs + -def GoParallel(function, list_of_inputs, reduce_op = None): +def GoParallel(function, list_of_inputs, reduce_op = None, timer=None): """ GO PARALLEL =========== Perform a parallel evaluation of the provided function with the spawned - list of inputs, and returns a list of output + list of inputs, and returns a list of output. + + Note, this subroutine will not speedup the reduction, + the good speedup is obtained not with a large number of inputs, + but with a large execution time of the function on each element. + + Therefore, the cost to apply the function on a element of list_of_inputs + must be greather than the cost of the reduction (otherwise no gain is obtained). Parameters ---------- @@ -183,6 +225,7 @@ def GoParallel(function, list_of_inputs, reduce_op = None): raise NotImplementedError("Error, reduction '{}' not implemented.".format(reduce_op)) # Here we create the poll manually + t1 = time.time() n_proc = GetNProc() rank = get_rank() @@ -190,28 +233,70 @@ def GoParallel(function, list_of_inputs, reduce_op = None): list_of_inputs = broadcast(list_of_inputs) # Prepare the work for the current processor - # TODO: Use a generator - computing_list = [] - for i in range(rank, len(list_of_inputs), n_proc): - computing_list.append(list_of_inputs[i]) + # Define the range of the list to be computed by the current processor + n_elements = len(list_of_inputs) + n_per_proc = int(n_elements / n_proc) + n_left = n_elements - n_per_proc * n_proc + if rank < n_left: + start = rank * (n_per_proc + 1) + end = start + n_per_proc + 1 + else: + start = rank * n_per_proc + n_left + end = start + n_per_proc + + computing_list = list_of_inputs[start:end] + t2 = time.time() + + if timer is not None: + timer.add_timer("broadcast", t2 - t1) + + # old version + #computing_list = [] + #for i in range(rank, len(list_of_inputs), n_proc): + # computing_list.append(list_of_inputs[i]) + + #print("Rank {} is computing {} elements".format(rank, len(computing_list))) #all_print("Computing:", computing_list) + + kwargs = {} + # Check if function accepts a timer + cmp_timer = None + + major_version = sys.version_info.major + minor_version = sys.version_info.minor + if major_version == 2: + func = inspect.getargspec + if major_version == 3: + func = inspect.getfullargspec + + if "timer" in func(function).args and timer is not None: + cmp_timer = timer.spawn_child() + kwargs["timer"] = cmp_timer # Perform the reduction if reduce_op == "+": result = 0 for x in computing_list: - result += function(x) - + result += function(x, **kwargs) elif reduce_op == "*": result = 1 for x in computing_list: - result *= function(x) + result *= function(x, **kwargs) + else: + result = [] + for x in computing_list: + result.append(function(x, **kwargs)) + + t3 = time.time() + + if timer is not None: + timer.add_timer("compute", t3 - t2, timer=cmp_timer) # If a reduction must be done, return - if not reduce_op is None: + if reduce_op is not None: if __PARALLEL_TYPE__ == "mpi4py": comm = mpi4py.MPI.COMM_WORLD results = comm.allgather(result) @@ -230,14 +315,35 @@ def GoParallel(function, list_of_inputs, reduce_op = None): elif reduce_op == "*": for i in range(1,len(results)): result*= results[i] + + t4 = time.time() + if timer is not None: + timer.add_timer("reduce", t4 - t3) #np.savetxt("result_{}_total.dat".format(rank), result) return result - else: - raise NotImplementedError("Error, for now parallelization with MPI implemented only with reduction") + else: + # Gather the results + if __PARALLEL_TYPE__ == "mpi4py": + comm = mpi4py.MPI.COMM_WORLD + results = comm.allgather(result) + + t4 = time.time() + if timer is not None: + timer.add_timer("collect", t4 - t3) + # Flatten the list + result = [item for sublist in results for item in sublist] + + return result else: - raise NotImplementedError("Something went wrong: {}".format(__PARALLEL_TYPE__)) + raise ValueError("Something wrong with the MPI initialization, parallel type is {}".format(__PARALLEL_TYPE__)) + + + + + + #raise NotImplementedError("Something went wrong: {}".format(__PARALLEL_TYPE__)) #elif __PARALLEL_TYPE__ == "mp": #p = mp.Pool(__NPROC__) diff --git a/cellconstructor/Spectral.py b/cellconstructor/Spectral.py index 99493a88..2304c4a2 100644 --- a/cellconstructor/Spectral.py +++ b/cellconstructor/Spectral.py @@ -1,8 +1,8 @@ from __future__ import print_function from __future__ import division -import cellconstructor.Phonons as Phonons -import cellconstructor.Methods as Methods +import cellconstructor.Phonons as Phonons +import cellconstructor.Methods as Methods import cellconstructor.symmetries as symmetries import numpy as np @@ -15,16 +15,17 @@ import cellconstructor as CC import cellconstructor.symmetries import cellconstructor.Settings -import cellconstructor.Methods as Methods +import cellconstructor.Methods as Methods import time -from cellconstructor.Settings import ParallelPrint as print +from cellconstructor.Settings import ParallelPrint as print +from multiprocessing import Pool, freeze_support """ -In this module we compute the Spectral function +In this module we compute the Spectral function using the interpolation on the third order force constant matrix """ @@ -34,11 +35,11 @@ def get_static_bubble(tensor2, tensor3, k_grid, q, T , verbose = False): """ COMPUTE THE STATIC BUBBLE ========================= - + This function computes the static bubble for a given dynamical matrix, the third order force constant tensor by using the Fourier interpolation - - + + Parameters ---------- tensor2 : ForceTensor.Tensor2() @@ -53,7 +54,7 @@ def get_static_bubble(tensor2, tensor3, k_grid, q, T , verbose = False): The tempearture of the calculation (default 0 K) verbose : bool If true print debugging and timing info - + Results ------- dynq : ndarray( size = (3*nat, 3*nat), dtype = np.complex128) @@ -61,28 +62,28 @@ def get_static_bubble(tensor2, tensor3, k_grid, q, T , verbose = False): """ structure = tensor2.unitcell_structure - - # Get the integration points + + # Get the integration points k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) - - + + # Get the phi2 in q phi2_q = tensor2.Interpolate(q, asr = False) # dynamical matrix in q - m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() mm_mat = np.sqrt(np.outer(m, m)) mm_inv_mat = 1 / mm_mat # d2_q = phi2_q * mm_inv_mat - + # Diagonalize the dynamical matrix in q w2_q, pols_q = np.linalg.eigh(d2_q) - + # Check if the q point is gamma is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) - + if is_q_gamma: w2_q[0:3]=0.0 if not (w2_q >= 0.0).all(): @@ -90,36 +91,36 @@ def get_static_bubble(tensor2, tensor3, k_grid, q, T , verbose = False): print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') print('Cannot continue with SSCHA negative frequencies') exit() - w_q=np.sqrt(w2_q) - + w_q=np.sqrt(w2_q) + # Allocate the memory for the bubble n_mod=3*structure.N_atoms tmp_bubble = np.zeros((n_mod, n_mod), dtype = np.complex128, order = "F") - + def compute_k(k): - + # phi3 in q, k, -q-k - t1 = time.time() + t1 = time.time() phi3=tensor3.Interpolate(k,-q-k, asr = False) t2 = time.time() - + # phi2 in k - phi2_k = tensor2.Interpolate(k, asr = False) + phi2_k = tensor2.Interpolate(k, asr = False) # phi2 in -q-k phi2_mq_mk = tensor2.Interpolate(-q-k, asr = False) t3 = time.time() - + # dynamical matrices (divide by the masses) d2_k = phi2_k * mm_inv_mat d2_mq_mk = phi2_mq_mk * mm_inv_mat - + # Diagonalize the dynamical matrices w2_k, pols_k = np.linalg.eigh(d2_k) w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) - + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) @@ -131,7 +132,7 @@ def compute_k(k): print('Cannot continue with SSCHA negative frequencies') exit() w_k=np.sqrt(w2_k) - + if is_mq_mk_gamma: w2_mq_mk[0:3]=0.0 if not (w2_mq_mk >= 0.0).all(): @@ -140,7 +141,7 @@ def compute_k(k): print('Cannot continue with SSCHA negative frequencies') exit() w_mq_mk=np.sqrt(w2_mq_mk) - + # Dividing the phi3 by the sqare root of masses d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) @@ -149,44 +150,44 @@ def compute_k(k): d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) d3_pols = np.einsum("ibc, bj -> ijc", d3_pols, pols_k) d3_pols = np.einsum("ijc, ck -> ijk", d3_pols, pols_mq_mk) - + t4 = time.time() - + # Fortran duty ==== tmp_bubble = thirdorder.third_order_bubble.compute_static_bubble(T,np.array([w_q,w_k,w_mq_mk]).T, np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), d3_pols, - n_mod=n_mod) - + n_mod=n_mod) + t5 = time.time() - + if verbose: print("Time to interpolate the third order: {} s".format(t2 - t1)) print("Time to interpolate the second order: {} s".format(t3 - t2)) print("Time to transform the tensors: {} s".format(t4 - t3)) print("Time to compute the bubble: {} s".format(t5 - t4)) - + return tmp_bubble - - + + CC.Settings.SetupParallel() tmp_bubble = CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") # divide by the N_k factor - tmp_bubble /= len(k_points) - # bubble in cartesian + tmp_bubble /= len(k_points) + # bubble in cartesian #d_bubble = np.einsum("ab, ia, jb -> ij", tmp_bubble, pols_q, np.conj(pols_q)) - + d_bubble = np.einsum("ij, ai -> aj", tmp_bubble, pols_q) d_bubble = np.einsum("aj, bj -> ab", d_bubble, np.conj(pols_q)) # add to the SSCHA dynamical matrix in q - d2_final_q = d2_q + d_bubble + d2_final_q = d2_q + d_bubble # and mutiply by the masses ( -> FC) phi2_final_q = d2_final_q * mm_mat - + return phi2_final_q, w_q - + def get_static_correction(dyn, tensor3, k_grid, list_of_q_points, T): """ Get the dyn + static bubble correction for the list of q points @@ -197,7 +198,7 @@ def get_static_correction(dyn, tensor3, k_grid, list_of_q_points, T): tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) tensor2.SetupFromPhonons(dyn) tensor2.Center() - + for iq, q in enumerate(list_of_q_points): dynq[iq, :, :] = get_static_bubble(tensor2, tensor3, k_grid, np.array(q),T)[0] @@ -215,7 +216,7 @@ def get_static_correction_interpolated(dyn, tensor3, T, new_supercell, k_grid): tensor3 : Tensor3() The third order force constant matrix T : float - The temperature + The temperature new_supercell : list(len = 3) The new supercell on which you want to interpolate the results k_grid : list(len = 3) @@ -232,7 +233,7 @@ def get_static_correction_interpolated(dyn, tensor3, T, new_supercell, k_grid): q_tot = symmetries.GetQGrid(dyn.structure.unit_cell, new_supercell) # Prepare the q points for the new dynamical matrix - new_dyn.q_tot = q_tot + new_dyn.q_tot = q_tot # For now we fill all the q point in the same star (we will adjust them later) new_dyn.q_stars = [ [x.copy() for x in q_tot] ] @@ -240,102 +241,104 @@ def get_static_correction_interpolated(dyn, tensor3, T, new_supercell, k_grid): dynq = get_static_correction(dyn, tensor3, k_grid, q_tot, T) # Add all the new computed dynamical matrix - for iq in range(len(q_tot)): + new_dyn.dynmats[0] = dynq[0, :, :] + for iq in range(1,len(q_tot)): new_dyn.dynmats.append(dynq[iq, :, :]) + # Adjust the dynamical matrix q points and the stars new_dyn.AdjustQStar() return new_dyn -def get_static_correction_along_path(dyn, - tensor3, +def get_static_correction_along_path(dyn, + tensor3, k_grid, T=0, - q_path=[0.0,0.0,0.0], + q_path=[0.0,0.0,0.0], q_path_file=None, - print_path = True, + print_path = True, filename_st="v2+d3static_freq.dat", print_dyn = False, name_dyn = "sscha_plus_odd_dyn", d3_scale_factor = None, tensor2 = None): """ - Get the dyn + static bubble correction along a given path and prints the SSCHA and the + Get the dyn + static bubble correction along a given path and prints the SSCHA and the corrected frequencies in the file filename_st (path length in 2pi/Angstrom, SSCHA frequencies (cm-1), SSCHA+static odd correction frequencies (cm-1)). If print_dyn = True, the dyn+static bubble dynamical matrices are printed in QE format. - + Parameters ---------- - + dyn : Phonons() The harmonic / SSCHA dynamical matrix tensor3 : Tensor3() The third order force constant matrix k_grid : list(len = 3) The integration grid on the Brillouin zone - + Optional -------- - + T : float - The temperature + The temperature (default: 0 K) q_path : list of triplets Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, - where the caculation is performed - (defualt: [0.0,0.0,0.0]) + where the caculation is performed + (default: [0.0,0.0,0.0]) q_path_file : string - Name of the file where the q_path can be read. + Name of the file where the q_path can be read. Format: column of triples, q points in 2pi/Angstrom If the name of the file is present, it has the - priority over the q_path value + priority over the q_path value (default: None) print_path : logical - If True (and the path is composed of more then one q-point), + If True (and the path is composed of more then one q-point), a file 'path_len.dat' is printed. - Format: column of 4 values, coordinates of + Format: column of 4 values, coordinates of the q-point and path length (in 2pi/Angstrom) . - (default: True) - filename_st : string - File where the result is written. - Format: length of the path (in 2pi/Alat), + (default: True) + filename_st : string + File where the result is written. + Format: length of the path (in 2pi/Alat), SSCHA freq (cm-1),SSCHA+static bubble freq. (cm-1) - (default: "v2+d3static_freq.dat") - print_dyn : logical + (default: "v2+d3static_freq.dat") + print_dyn : logical If True, the dyn+odd dynamical matrices are printed for the q-points of the path (in QE format) - (default: False) + (default: False) name_dyn : string Prefix of the name of the dyn+odd dynamical matrix printed name: prefix#q(progressive_number) (default: "sscha_plus_odd_dyn") - d3_scale_factor : float + d3_scale_factor : float If present, the 3rd order FC is multiplied by this factor (e.g. it can be used to make tests about the perturbative limit) (default: None) tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) - If present, this 2nd order FC overwrites the one + If present, this 2nd order FC overwrites the one obtained from dyn. - (default: None) - + (default: None) + """ - - print(" ") - print(" ====================================" ) - print(" Bubble static correction " ) + + print(" ") print(" ====================================" ) - print(" ") + print(" Bubble static correction " ) + print(" ====================================" ) + print(" ") print(" T= {:>5.1f} K".format(T)) - print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) - print(" ") - - if ( tensor2 == None ): + print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) + print(" ") + + if ( tensor2 == None ): # Prepare the tensor2 tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) tensor2.SetupFromPhonons(dyn) - tensor2.Center() + tensor2.Center() # Scale the FC3 =========================================================================== if d3_scale_factor != None : @@ -343,103 +346,307 @@ def get_static_correction_along_path(dyn, print(" d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) print(" ") tensor3.tensor=tensor3.tensor*d3_scale_factor - # ================================== q-PATH =============================================== + # ================================== q-PATH =============================================== if q_path_file == None: q_path=np.array(q_path) else: print(" ") print(" q_path read from "+q_path_file) - print(" ") + print(" ") q_path=np.loadtxt(q_path_file) - if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) # Get the length of the q path - x_length = np.zeros(len(q_path)) + x_length = np.zeros(len(q_path)) q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) x_length[1:] = q_tot x_length=np.cumsum(x_length) - x_length_exp=np.expand_dims(x_length,axis=0) + x_length_exp=np.expand_dims(x_length,axis=0) # print the path q-points and length if print_path and (q_path.shape[0] > 1) : fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] - result=np.hstack((q_path,x_length_exp.T)) + result=np.hstack((q_path,x_length_exp.T)) np.savetxt('path_len.dat',result,fmt=fmt_txt) print(" ") print(" Path printed in path_len.dat ") - print(" ") - # ========================================================================================== - + print(" ") + # ========================================================================================== + # Mass matrix m = np.tile(dyn.structure.get_masses_array(), (3,1)).T.ravel() mm_mat = np.sqrt(np.outer(m, m)) - + # Allocate frequencies array nat=dyn.structure.N_atoms n_mod=3 * nat frequencies = np.zeros((len(q_path), n_mod), dtype = np.float64 ) # SSCHA+odd freq v2_wq = np.zeros( (len(q_path), n_mod), dtype = np.float64 ) # pure SSCHA freq - + # =============== core calculation =========================================== if print_dyn: print(" ") print(" dyn+odd dynamical matrices printed in "+name_dyn+"#q") - print(" ") + print(" ") for iq, q in enumerate(q_path): - dynq, v2_wq[iq,:] = get_static_bubble(tensor2=tensor2, tensor3=tensor3, - k_grid=k_grid, q=np.array(q), + dynq, v2_wq[iq,:] = get_static_bubble(tensor2=tensor2, tensor3=tensor3, + k_grid=k_grid, q=np.array(q), T=T, verbose = False) w2, pol = np.linalg.eigh(dynq / mm_mat) frequencies[iq,:] = np.sign(w2)*np.sqrt(np.abs(w2)) - - if print_dyn: + + if print_dyn: Methods.save_qe(dyn,q,dynq,frequencies[iq,:],pol,fname=name_dyn+str(iq+1)) - # ============================================================================ + # ============================================================================ # === print result ================================== frequencies *= CC.Units.RY_TO_CM v2_wq *= CC.Units.RY_TO_CM - result=np.hstack((x_length_exp.T,v2_wq,frequencies)) + result=np.hstack((x_length_exp.T,v2_wq,frequencies)) + fmt_txt='%10.6f\t\t'+n_mod*'%11.7f\t'+'\t'+n_mod*'%11.7f\t' + + print(" ") + print(" Results printed in "+filename_st) + print(" ") + head=("------------------------------------------------------------------------" + "\nlen (2pi/Angstrom), sscha freq (cm-1), sscha + static bubble freq (cm-1)" + "\n------------------------------------------------------------------------") + + np.savetxt(filename_st,result,fmt=fmt_txt,header=head) + # ================================================================================== + +def get_static_correction_along_path_multiprocessing(dyn, + tensor3, + k_grid, + T=0, + q_path=[0.0,0.0,0.0], + q_path_file=None, + print_path = True, + filename_st="v2+d3static_freq.dat", + print_dyn = False, + name_dyn = "sscha_plus_odd_dyn", + d3_scale_factor = None, + tensor2 = None, processes = None): + """ + Get the dyn + static bubble correction along a given path and prints the SSCHA and the + corrected frequencies in the file filename_st (path length in 2pi/Angstrom, SSCHA frequencies (cm-1), + SSCHA+static odd correction frequencies (cm-1)). + If print_dyn = True, the dyn+static bubble dynamical matrices are printed in QE format. + + Parameters + ---------- + + dyn : Phonons() + The harmonic / SSCHA dynamical matrix + tensor3 : Tensor3() + The third order force constant matrix + k_grid : list(len = 3) + The integration grid on the Brillouin zone + + Optional + -------- + + T : float + The temperature + (default: 0 K) + q_path : list of triplets + Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, + where the caculation is performed + (default: [0.0,0.0,0.0]) + q_path_file : string + Name of the file where the q_path can be read. + Format: column of triples, q points in 2pi/Angstrom + If the name of the file is present, it has the + priority over the q_path value + (default: None) + print_path : logical + If True (and the path is composed of more then one q-point), + a file 'path_len.dat' is printed. + Format: column of 4 values, coordinates of + the q-point and path length (in 2pi/Angstrom) . + (default: True) + filename_st : string + File where the result is written. + Format: length of the path (in 2pi/Alat), + SSCHA freq (cm-1),SSCHA+static bubble freq. (cm-1) + (default: "v2+d3static_freq.dat") + print_dyn : logical + If True, the dyn+odd dynamical matrices are printed + for the q-points of the path (in QE format) + (default: False) + name_dyn : string + Prefix of the name of the dyn+odd dynamical matrix printed + name: prefix#q(progressive_number) + (default: "sscha_plus_odd_dyn") + d3_scale_factor : float + If present, the 3rd order FC is multiplied by this factor + (e.g. it can be used to make tests about the perturbative limit) + (default: None) + tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) + If present, this 2nd order FC overwrites the one + obtained from dyn. + (default: None) + processes : integer + Number of maximum processes (cpu) to be used during the calculation. + If 'None' then the number returned by os.cpu_count() is used. + (default: None) + """ + + print(" ") + print(" ====================================" ) + print(" Bubble static correction " ) + print(" ====================================" ) + print(" ") + print(" T= {:>5.1f} K".format(T)) + print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) + print(" ") + + if ( tensor2 == None ): + # Prepare the tensor2 + tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) + tensor2.SetupFromPhonons(dyn) + tensor2.Center() + + # Scale the FC3 =========================================================================== + if d3_scale_factor != None : + print(" ") + print(" d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) + print(" ") + tensor3.tensor=tensor3.tensor*d3_scale_factor + # ================================== q-PATH =============================================== + if q_path_file == None: + q_path=np.array(q_path) + else: + print(" ") + print(" q_path read from "+q_path_file) + print(" ") + q_path=np.loadtxt(q_path_file) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + # Get the length of the q path + x_length = np.zeros(len(q_path)) + q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) + x_length[1:] = q_tot + x_length=np.cumsum(x_length) + x_length_exp=np.expand_dims(x_length,axis=0) + # print the path q-points and length + if print_path and (q_path.shape[0] > 1) : + fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] + result=np.hstack((q_path,x_length_exp.T)) + np.savetxt('path_len.dat',result,fmt=fmt_txt) + print(" ") + print(" Path printed in path_len.dat ") + print(" ") + # ========================================================================================== + + # Mass matrix + m = np.tile(dyn.structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + + # Allocate frequencies array + nat=dyn.structure.N_atoms + n_mod=3 * nat + frequencies = np.zeros((len(q_path), n_mod), dtype = np.float64 ) # SSCHA+odd freq + v2_wq = np.zeros( (len(q_path), n_mod), dtype = np.float64 ) # pure SSCHA freq + + # =============== core calculation =========================================== + if print_dyn: + print(" ") + print(" dyn+odd dynamical matrices printed in "+name_dyn+"#q") + print(" ") + + #for iq, q in enumerate(q_path): + # dynq, v2_wq[iq,:] = get_static_bubble(tensor2=tensor2, tensor3=tensor3, + # k_grid=k_grid, q=np.array(q), + # T=T, verbose = False) + # + # w2, pol = np.linalg.eigh(dynq / mm_mat) + # frequencies[iq,:] = np.sign(w2)*np.sqrt(np.abs(w2)) + # + # if print_dyn: + # Methods.save_qe(dyn,q,dynq,frequencies[iq,:],pol,fname=name_dyn+str(iq+1)) + iq_list = [] + q_list = [] + for iq, q in enumerate(q_path): + iq_list.append(iq) #yes I know this is stupid, is just range(len(q_path)) + q_list.append(q) + lengthT = x_length_exp.T + result = [] + parameters = zip(iq_list, q_list,itertools.repeat(tensor2),itertools.repeat(tensor3), + itertools.repeat(k_grid),itertools.repeat(T),itertools.repeat(dyn), + itertools.repeat(mm_mat),itertools.repeat(name_dyn), + itertools.repeat(frequencies),itertools.repeat(v2_wq), + itertools.repeat(print_dyn),itertools.repeat(lengthT)) + + freeze_support() #for windows users + # with Pool() as plwork: # test 6 cores with Pool(6)************ + # v2_wq[:,:],frequencies[:,:] = plwork.starmap(multiprocessing_work1,parameters) + plwork = Pool(processes) + #v2_wq, frequencies = plwork.starmap(multiprocessing_work_static_correction_along_path,parameters) + result = plwork.starmap(multiprocessing_work_static_correction_along_path,parameters) + plwork.close() #remember to close all your pools or they keep using memory/space. + plwork.join() + # ============================================================================ + + # === print result ================================== + # frequencies *= CC.Units.RY_TO_CM + # v2_wq *= CC.Units.RY_TO_CM + # result=np.hstack((x_length_exp.T,v2_wq,frequencies)) fmt_txt='%10.6f\t\t'+n_mod*'%11.7f\t'+'\t'+n_mod*'%11.7f\t' - + print(" ") print(" Results printed in "+filename_st) print(" ") head=("------------------------------------------------------------------------" - "\nlen (2pi/Angstrom), sscha freq (cm-1), sscha + static bubble freq (cm-1)" + "\nlen (2pi/Angstrom), sscha freq (cm-1), sscha + static bubble freq (cm-1)" "\n------------------------------------------------------------------------") - - np.savetxt(filename_st,result,fmt=fmt_txt,header=head) - # ================================================================================== + + np.savetxt(filename_st,result,fmt=fmt_txt,header=head) + # ================================================================================== + +def multiprocessing_work_static_correction_along_path(iq,q,tensor2,tensor3,k_grid,T, + dyn,mm_mat,name_dyn,frequencies,v2_wq,print_dyn,lengthT): + print("iq=",iq) + dynq, v2_wq[iq,:] = get_static_bubble(tensor2=tensor2, tensor3=tensor3, + k_grid=k_grid, q=np.array(q), + T=T, verbose = False) + + w2, pol = np.linalg.eigh(dynq / mm_mat) + frequencies[iq,:] = np.sign(w2)*np.sqrt(np.abs(w2)) + if print_dyn: + Methods.save_qe(dyn,q,dynq,frequencies[iq,:],pol,fname=name_dyn+str(iq+1)) + frequencies[iq,:] *= CC.Units.RY_TO_CM + v2_wq[iq,:] *= CC.Units.RY_TO_CM + result = np.hstack((lengthT,v2_wq,frequencies)) + return result[iq,:] + + - - # ========================= FULL DYNAMIC ========================= -def get_full_dynamic_bubble(tensor2, tensor3, k_grid, q, +def get_full_dynamic_bubble(tensor2, tensor3, k_grid, q, smear_id, smear, energies, T, - static_limit, + static_limit, notransl, diag_approx, verbose = False ): - + """ COMPUTE THE FULL DYNAMIC BUBBLE ========================= - + This function computes the dynamic bubble for a given dynamical matrix, the third order force constant tensor by using the Fourier interpolation - - + + Parameters ---------- tensor2 : ForceTensor.Tensor2() @@ -456,36 +663,36 @@ def get_full_dynamic_bubble(tensor2, tensor3, k_grid, q, If true, impose the acoustic sum rule during the Fourier transform verbose : bool If true print debugging and timing info - + Results ------- dynq : ndarray( size = (3*nat, 3*nat), dtype = np.complex128) The bubble matrix at the specified q point (only bubble). """ - + structure = tensor2.unitcell_structure - - # Get the integration points + + # Get the integration points k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) - - + + # Get the phi2 in q phi2_q = tensor2.Interpolate(q, asr = False) # dynamical matrix in q - m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() mm_mat = np.sqrt(np.outer(m, m)) mm_inv_mat = 1 / mm_mat # d2_q = phi2_q * mm_inv_mat - + # Diagonalize the dynamical matrix in q w2_q, pols_q = np.linalg.eigh(d2_q) - + # Check if the q point is gamma is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) - + if is_q_gamma: w2_q[0:3]=0.0 if not (w2_q >= 0.0).all(): @@ -493,40 +700,40 @@ def get_full_dynamic_bubble(tensor2, tensor3, k_grid, q, print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') print('Cannot continue with SSCHA negative frequencies') exit() - w_q=np.sqrt(w2_q) - + w_q=np.sqrt(w2_q) + # Allocate the memory for the bubble ne=energies.shape[0] nsm=smear.shape[0] tmp_bubble = np.zeros((ne,nsm,3*structure.N_atoms, 3*structure.N_atoms), dtype = np.complex128, order = "F") - + def compute_k(k): # phi3 in q, k, -q - k - t1 = time.time() + t1 = time.time() phi3=tensor3.Interpolate(k,-q-k, asr = False) t2 = time.time() # phi2 in k - phi2_k = tensor2.Interpolate(k, asr = False) + phi2_k = tensor2.Interpolate(k, asr = False) # phi2 in -q-k phi2_mq_mk = tensor2.Interpolate(-q -k, asr = False) t3 = time.time() - + # dynamical matrices (divide by the masses) d2_k = phi2_k * mm_inv_mat d2_mq_mk = phi2_mq_mk * mm_inv_mat - + # Diagonalize the dynamical matrices w2_k, pols_k = np.linalg.eigh(d2_k) w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) - - + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) - + if is_k_gamma: w2_k[0:3]=0.0 if not (w2_k >= 0.0).all(): @@ -544,7 +751,7 @@ def compute_k(k): print('Cannot continue with SSCHA negative frequencies') exit() w_mq_mk=np.sqrt(w2_mq_mk) - + # Dividing the phi3 by the sqare root of masses d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) @@ -553,26 +760,26 @@ def compute_k(k): d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) - + t4 = time.time() - + # Fortran duty ==== tmp_bubble = thirdorder.third_order_bubble.compute_dynamic_bubble(energies,smear,static_limit,T, np.array([w_q,w_k,w_mq_mk]).T, np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), - d3_pols,diag_approx,ne,nsm,n_mod=3*structure.N_atoms) - + d3_pols,diag_approx,ne,nsm,n_mod=3*structure.N_atoms) + t5 = time.time() - + if verbose: print("Time to interpolate the third order: {} s".format(t2 - t1)) print("Time to interpolate the second order: {} s".format(t3 - t2)) print("Time to transform the tensors: {} s".format(t4 - t3)) print("Time to compute the bubble: {} s".format(t5 - t4)) - + return tmp_bubble - - + + CC.Settings.SetupParallel() d_bubble_mod = CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") # divide by the N_k factor @@ -586,86 +793,86 @@ def compute_k(k): print(" ") print(" The acoustic pick in Gamma is discarded ") print(" ") - # - # + # + # spectral_func=thirdorder.third_order_bubble.compute_spectralf(smear_id, energies, d2_q, d_bubble_cart, no_gamma_pick, structure.get_masses_array(), - structure.N_atoms,ne,nsm) - + structure.N_atoms,ne,nsm) + return spectral_func -def get_full_dynamic_correction_along_path(dyn, - tensor3, - k_grid, +def get_full_dynamic_correction_along_path(dyn, + tensor3, + k_grid, e1, de, e0, - sm1, sm0, - sm1_id, sm0_id, + sm1=1.0, sm0=1.0, + sm1_id=None, sm0_id=None, nsm=1, T=0, - q_path=[0.0,0.0,0.0], + q_path=[0.0,0.0,0.0], q_path_file=None, - print_path = True, - static_limit = False, - notransl = True, - diag_approx = False, + print_path = True, + static_limit = False, + notransl = True, + diag_approx = False, filename_sp='full_spectral_func', d3_scale_factor=None, tensor2 = None): - + """ Get the spectral function for a list of energies, and several q along a given path. The calculations are performed for several values of smearings to calculate the self-energy and the Green function. The resuls is printed in the file filename_sp_[id_smear]_[smear].dat (path length in 2pi/Angstrom, energies (cm-1), spectral function (1/cm-1)). - + Parameters ---------- - + dyn : Phonons() The harmonic / SSCHA dynamical matrix tensor3 : Tensor3() The third order force constant matrix k_grid : list(len = 3) - The integration grid on the Brillouin zone + The integration grid on the Brillouin zone e1, de ,e0: float The list of energies considered (cm-1), from e0 to e1, with interval de - sm0, sm1 : float - Minimum and maximum value of the smearing (cm-1) to compute the self-energy - sm0_id, sm1_id : float - Minimum and maximum value of the smearing (cm-1) for the term of the Green function - proportional to the identity + sm0, sm1 : float + Minimum and maximum value of the smearing (cm-1) to compute the self-energy + sm0_id, sm1_id : float + Minimum and maximum value of the smearing (cm-1) for the term of the Green function + proportional to the identity Optional -------- nsm : integer - Number of smearings to consider + Number of smearings to consider (default = 1) T : float - The temperature + The temperature (default: 0 K) q_path : list of triplets Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, - where the caculation is performed - (defualt: [0.0,0.0,0.0]) + where the caculation is performed + (default: [0.0,0.0,0.0]) q_path_file : string - Name of the file where the q_path can be read. + Name of the file where the q_path can be read. Format: column of triples, q points in 2pi/Angstrom If the name of the file is present, it has the - priority over the q_path value + priority over the q_path value (default: None) print_path : logical - If True (and the path is composed of more then one q-point), + If True (and the path is composed of more then one q-point), a file 'path_len.dat' is printed. - Format: column of 4 values, coordinates of + Format: column of 4 values, coordinates of the q-point and path length (in 2pi/Angstrom) . - (default: True) + (default: True) static limit : logical If True the self-energy is evaluated at E=0. The spectral function is given by delta peaks in correspondence @@ -677,183 +884,570 @@ def get_full_dynamic_correction_along_path(dyn, (defaul = True) diag approx : logical If True, the off-diagonal terms of the slef-energy are discarded - (the same result can be obtained in a cheaper way by using the + (the same result can be obtained in a cheaper way by using the corresponding function) (default : False) - filename_sp : string - filename_sp_[id_smear]_[smear].dat - is the file where the result is written. - Format: length of the path (in 2pi/Alat), + filename_sp : string + filename_sp_[smear].dat + is the file where the result is written. + Format: length of the path (in 2pi/Alat), energy (cm-1),spectral function (1/cm-1) - (default: "full_spectral_func") - d3_scale_factor : float + (default: "full_spectral_func") + d3_scale_factor : float If present, the 3rd order FC is multiplied by this factor (e.g. it can be used to make tests about the perturbative limit) (default: None) tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) - If present, this 2nd order FC overwrites the one + If present, this 2nd order FC overwrites the one obtained from dyn. - (default: None) - + (default: None) + """ - - print(" ") - print(" ===========================================" ) - print(" Bubble full dynamic correction " ) + + print(" ") + print(" ===========================================" ) + print(" Bubble full dynamic correction " ) print(" ===========================================" ) - print(" ") + print(" ") print(" T= {:>5.1f} K".format(T)) - print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) + print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) if static_limit : print(" ") print(" - The static limit is considered - ") print(" ") + else: + print(" ") + print(" Smearing values: ") + print(" ") + for sm in np.linspace(sm0,sm1,nsm): + print(" sm= {:>6.2f} cm-1".format(sm)) + print(" ") if diag_approx : print(" ") print(" - The off-diagonal terms of the self-energy are discarded - ") - print(" ") - - + print(" ") + + if ( tensor2 == None ): - + # Prepare the tensor2 tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) tensor2.SetupFromPhonons(dyn) - tensor2.Center() - + tensor2.Center() + # Scale the FC3 =========================================================================== if d3_scale_factor != None : print(" ") print("d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) print(" ") tensor3.tensor=tensor3.tensor*d3_scale_factor - # ================================== q-PATH =============================================== + # ================================== q-PATH =============================================== if q_path_file == None: q_path=np.array(q_path) else: print(" ") print(" q_path read from "+q_path_file) - print(" ") + print(" ") q_path=np.loadtxt(q_path_file) - if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) # Get the length of the q path - x_length = np.zeros(len(q_path)) + x_length = np.zeros(len(q_path)) q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) x_length[1:] = q_tot x_length=np.cumsum(x_length) - x_length_exp=np.expand_dims(x_length,axis=0) + x_length_exp=np.expand_dims(x_length,axis=0) # print the path q-points and length if print_path and (q_path.shape[0] > 1) : fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] - result=np.hstack((q_path,x_length_exp.T)) + result=np.hstack((q_path,x_length_exp.T)) np.savetxt('path_len.dat',result,fmt=fmt_txt) print(" ") print(" Path printed in path_len.dat ") - print(" ") - # ========================================================================================== - - # ======================= Energy & Smearing ========================================== + print(" ") + # ========================================================================================== + + # ======================= Energy & Smearing ========================================== # energy in input is in cm-1 # smearing in input is in cm-1 # converto to Ry - + if sm1_id != None and sm0_id != None: + for sm in np.linspace(sm0_id,sm1_id,nsm): + print(" sm_id= {:>6.2f} cm-1".format(sm)) + else: + sm1_id=de*2.0 + sm0_id=de*2.0 # list of energies energies=np.arange(e0,e1,de)/CC.Units.RY_TO_CM ne=energies.shape[0] # list of smearing - if nsm == 1 : + if nsm == 1 : sm1=sm0 sm1_id=sm0_id smear=np.linspace(sm0,sm1,nsm)/CC.Units.RY_TO_CM smear_id=np.linspace(sm0_id,sm1_id,nsm)/CC.Units.RY_TO_CM - # ========================================================================================== - # + # ========================================================================================== + # # spectralf = np.zeros( (ne, nsm), dtype = np.float64 ) # - smear_cm = smear * CC.Units.RY_TO_CM - smear_id_cm = smear_id * CC.Units.RY_TO_CM - energies_cm = energies * CC.Units.RY_TO_CM + smear_cm = smear * CC.Units.RY_TO_CM + smear_id_cm = smear_id * CC.Units.RY_TO_CM + energies_cm = energies * CC.Units.RY_TO_CM for iq, q in enumerate(q_path): spectralf[:, :] = get_full_dynamic_bubble(tensor2, tensor3, k_grid, np.array(q), - smear_id, smear, energies, T, - static_limit, notransl , - diag_approx, verbose=False ) - + smear_id, smear, energies, T, + static_limit, notransl , + diag_approx, verbose=False ) + # convert from 1/Ry to 1/cm-1 spectralf /= CC.Units.RY_TO_CM - - # ================================================================================== - + # ================================================================================== + # # print the result - for ism in range(nsm): - # - name="{:5.2f}".format(smear_id_cm[ism]).strip()+"_"+"{:6.1f}".format(smear_cm[ism]).strip() + # + if static_limit : # - filename_new=filename_sp+'_'+name+'.dat' + filename_new=filename_sp+'_static.dat' if iq == 0: with open(filename_new,'w') as f: f.write(" # ------------------------------------------------------------- \n") f.write(" # len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1) \n") f.write(" # ------------------------------------------------------------- \n") for ie, ene in enumerate(energies_cm): - f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,0])) f.write("\n") else: with open(filename_new,'a') as f: for ie, ene in enumerate(energies_cm): - f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,0])) f.write("\n") - - - - print(" ") - print(" Results printed in "+filename_sp+'_[id_smear]_[smear].dat') - print(" ") - - - - - - - -# ========================= DIAGONAL SELF-ENERGY DYNAMIC CORRECTION ========================= - -def get_diag_dynamic_bubble(tensor2, - tensor3, - k_grid, - q, - smear_id, - smear, + # + else: + # + for ism in range(nsm): + # + #name="{:5.2f}".format(smear_id_cm[ism]).strip()+"_"+"{:6.1f}".format(smear_cm[ism]).strip() + name="{:6.1f}".format(smear_cm[ism]).strip() + # + filename_new=filename_sp+'_'+name+'.dat' + if iq == 0: + with open(filename_new,'w') as f: + f.write(" # ------------------------------------------------------------- \n") + f.write(" # len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1) \n") + f.write(" # ------------------------------------------------------------- \n") + for ie, ene in enumerate(energies_cm): + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + f.write("\n") + else: + with open(filename_new,'a') as f: + for ie, ene in enumerate(energies_cm): + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + f.write("\n") + + + if static_limit : + print(" ") + print(" Results printed in "+filename_sp+'_static.dat') + print(" ") + else: + print(" ") + print(" Results printed in "+filename_sp+'_[smear].dat') + print(" ") + + + + + + print(" ") + print(" Results printed in "+filename_sp+'_[id_smear]_[smear].dat') + print(" ") + + + +def get_full_dynamic_correction_along_path_multiprocessing(dyn, + tensor3, + k_grid, + e1, de, e0, + sm1=1.0, sm0=1.0, + sm1_id=None, sm0_id=None, + nsm=1, + T=0, + q_path=[0.0,0.0,0.0], + q_path_file=None, + print_path = True, + static_limit = False, + notransl = True, + diag_approx = False, + filename_sp='full_spectral_func', + d3_scale_factor=None, + tensor2 = None, processes = None): + + """ + Get the spectral function for a list of energies, and several q along a given path. + The calculations are performed for several values of smearings to calculate the self-energy + and the Green function. The resuls is printed in the file + filename_sp_[id_smear]_[smear].dat (path length in 2pi/Angstrom, energies (cm-1), + spectral function (1/cm-1)). + + Parameters + ---------- + + dyn : Phonons() + The harmonic / SSCHA dynamical matrix + tensor3 : Tensor3() + The third order force constant matrix + k_grid : list(len = 3) + The integration grid on the Brillouin zone + e1, de ,e0: float + The list of energies considered (cm-1), from e0 to e1, with interval de + sm0, sm1 : float + Minimum and maximum value of the smearing (cm-1) to compute the self-energy + sm0_id, sm1_id : float + Minimum and maximum value of the smearing (cm-1) for the term of the Green function + proportional to the identity + + Optional + -------- + + nsm : integer + Number of smearings to consider + (default = 1) + T : float + The temperature + (default: 0 K) + q_path : list of triplets + Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, + where the caculation is performed + (default: [0.0,0.0,0.0]) + q_path_file : string + Name of the file where the q_path can be read. + Format: column of triples, q points in 2pi/Angstrom + If the name of the file is present, it has the + priority over the q_path value + (default: None) + print_path : logical + If True (and the path is composed of more then one q-point), + a file 'path_len.dat' is printed. + Format: column of 4 values, coordinates of + the q-point and path length (in 2pi/Angstrom) . + (default: True) + static limit : logical + If True the self-energy is evaluated at E=0. + The spectral function is given by delta peaks in correspondence + of the frequencies of the sscha + static bubble correction + (default : False) + notransl : logical + If True, the contribution to the spectral function given by the acoustic + phonons in Gamma is discarded. + (defaul = True) + diag approx : logical + If True, the off-diagonal terms of the slef-energy are discarded + (the same result can be obtained in a cheaper way by using the + corresponding function) + (default : False) + filename_sp : string + filename_sp_[id_smear].dat + is the file where the result is written. + Format: length of the path (in 2pi/Alat), + energy (cm-1),spectral function (1/cm-1) + (default: "full_spectral_func") + d3_scale_factor : float + If present, the 3rd order FC is multiplied by this factor + (e.g. it can be used to make tests about the perturbative limit) + (default: None) + tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) + If present, this 2nd order FC overwrites the one + obtained from dyn. + (default: None) + processes : integer + Number of maximum processes (cpu) to be used during the calculation. + If 'None' then the number returned by os.cpu_count() is used. + (default: None) + """ + def output_file_sort_function(filename_data, smear_id_cm, smear_cm, nsm): + for ism in range(nsm): + #name = "{:5.2f}".format(smear_id_cm[ism]).strip()+"_"+"{:6.1f}".format(smear_cm[ism]).strip() + #filename_data = filename_sp+'_'+name+'.dat' + f = open(filename_data, 'r') + head1 = f.readline() + head2 = f.readline() + head3 = f.readline() + data = np.loadtxt(f) + f.close() + head = head1[1:]+head2[1:]+head3[1:] + X = data[:,0] + Y = data[:,1] + Z = data[:,2] + x = [X[i] for i in np.lexsort((Y,X))] + y = [Y[i] for i in np.lexsort((Y,X))] + z = [Z[i] for i in np.lexsort((Y,X))] + # f = open('plot_energies_'+filename_data, 'w') + # np.savetxt(f,np.c_[x,y,z]) + # f.close() + # data = data[data[:,2].argsort()] # First sort doesn't need to be stable. + # data = data[data[:,1].argsort(kind='mergesort')] + # data = data[data[:,0].argsort(kind='mergesort')] + f = open("Sorted_"+filename_data, 'w') + #np.savetxt(f,data, header=head[:-1]) + np.savetxt(f,np.c_[x,y,z], header=head[:-1]) + f.close() + pass + + print(" ") + print(" ===========================================" ) + print(" Bubble full dynamic correction " ) + print(" ===========================================" ) + print(" ") + print(" T= {:>5.1f} K".format(T)) + print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) + if static_limit : + print(" ") + print(" - The static limit is considered - ") + print(" ") + else: + print(" ") + print(" Smearing values: ") + print(" ") + for sm in np.linspace(sm0,sm1,nsm): + print(" sm= {:>6.2f} cm-1".format(sm)) + print(" ") + if diag_approx : + print(" ") + print(" - The off-diagonal terms of the self-energy are discarded - ") + print(" ") + + + if ( tensor2 == None ): + + # Prepare the tensor2 + tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) + tensor2.SetupFromPhonons(dyn) + tensor2.Center() + + # Scale the FC3 =========================================================================== + if d3_scale_factor != None : + print(" ") + print("d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) + print(" ") + tensor3.tensor=tensor3.tensor*d3_scale_factor + # ================================== q-PATH =============================================== + if q_path_file == None: + q_path=np.array(q_path) + else: + print(" ") + print(" q_path read from "+q_path_file) + print(" ") + q_path=np.loadtxt(q_path_file) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + # Get the length of the q path + x_length = np.zeros(len(q_path)) + q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) + x_length[1:] = q_tot + x_length=np.cumsum(x_length) + x_length_exp=np.expand_dims(x_length,axis=0) + # print the path q-points and length + if print_path and (q_path.shape[0] > 1) : + fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] + result=np.hstack((q_path,x_length_exp.T)) + np.savetxt('path_len.dat',result,fmt=fmt_txt) + print(" ") + print(" Path printed in path_len.dat ") + print(" ") + # ========================================================================================== + + # ======================= Energy & Smearing ========================================== + # energy in input is in cm-1 + # smearing in input is in cm-1 + # converto to Ry + if sm1_id != None and sm0_id != None: + for sm in np.linspace(sm0_id,sm1_id,nsm): + print(" sm_id= {:>6.2f} cm-1".format(sm)) + else: + sm1_id=de*2.0 + sm0_id=de*2.0 + # list of energies + energies=np.arange(e0,e1,de)/CC.Units.RY_TO_CM + ne=energies.shape[0] + # list of smearing + if nsm == 1 : + sm1=sm0 + sm1_id=sm0_id + smear=np.linspace(sm0,sm1,nsm)/CC.Units.RY_TO_CM + smear_id=np.linspace(sm0_id,sm1_id,nsm)/CC.Units.RY_TO_CM + # ========================================================================================== + # + # + spectralf = np.zeros( (ne, nsm), dtype = np.float64 ) + # + smear_cm = smear * CC.Units.RY_TO_CM + smear_id_cm = smear_id * CC.Units.RY_TO_CM + energies_cm = energies * CC.Units.RY_TO_CM + iq_list = [] + q_list = [] + for iq, q in enumerate(q_path): + iq_list.append(iq) #yes I know this is stupid, is just range(len(q_path)) + q_list.append(q) + # spectralf[:, :] = get_full_dynamic_bubble(tensor2, tensor3, k_grid, np.array(q), + # smear_id, smear, energies, T, + # static_limit, notransl , + # diag_approx, verbose=False ) + # + # # convert from 1/Ry to 1/cm-1 + # spectralf /= CC.Units.RY_TO_CM + # + # + # # ================================================================================== + # + # # print the result + # for ism in range(nsm): + # # + # name="{:5.2f}".format(smear_id_cm[ism]).strip()+"_"+"{:6.1f}".format(smear_cm[ism]).strip() + # # + # filename_new=filename_sp+'_'+name+'.dat' + # if iq == 0: + # with open(filename_new,'w') as f: + # f.write(" # ------------------------------------------------------------- \n") + # f.write(" # len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1) \n") + # f.write(" # ------------------------------------------------------------- \n") + # for ie, ene in enumerate(energies_cm): + # f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + # f.write("\n") + # else: + # with open(filename_new,'a') as f: + # for ie, ene in enumerate(energies_cm): + # f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + # f.write("\n") + freeze_support() #for windows users + parameters = zip(iq_list, q_list,itertools.repeat(tensor2),itertools.repeat(tensor3), + itertools.repeat(k_grid),itertools.repeat(smear_id), itertools.repeat(smear), + itertools.repeat(energies), itertools.repeat(energies_cm), itertools.repeat(T), + itertools.repeat(static_limit), itertools.repeat(notransl), + itertools.repeat(diag_approx),itertools.repeat(nsm), itertools.repeat(smear_id_cm), + itertools.repeat(smear_cm),itertools.repeat(filename_sp), itertools.repeat(x_length)) + plwork = Pool(processes) + plwork.starmap(work_full_dynamic_correction_along_path_multiprocessing,parameters) + plwork.close() #remember to close all your pools or they keep using memory/space. + plwork.join() + + + if static_limit : + print(" ") + print(" Results printed in "+filename_sp+'_static.dat') + print(" ") + filename_new=filename_sp+'_static.dat' + output_file_sort_function(filename_new, smear_id_cm, smear_cm, nsm) + else: + print(" ") + print(" Results printed in "+filename_sp+'_[smear].dat') + print(" ") + for ism in range(nsm): + name="{:6.1f}".format(smear_cm[ism]).strip() + filename_new=filename_sp+'_'+name+'.dat' + output_file_sort_function(filename_new, smear_id_cm, smear_cm, nsm) + + + + +def work_full_dynamic_correction_along_path_multiprocessing(iq,q,tensor2,tensor3,k_grid,smear_id, smear, + energies, energies_cm, T,static_limit, notransl , + diag_approx,nsm,smear_id_cm,smear_cm,filename_sp , + x_length): + print("iq=",iq) + + spectralf = np.zeros( (energies.shape[0], nsm), dtype = np.float64 ) + spectralf[:, :] = get_full_dynamic_bubble(tensor2, tensor3, k_grid, np.array(q), + smear_id, smear, energies, T, + static_limit, notransl , + diag_approx, verbose=False ) + + # convert from 1/Ry to 1/cm-1 + spectralf /= CC.Units.RY_TO_CM + + + # ================================================================================== + # print the result + # + if static_limit : + # + filename_new=filename_sp+'_static.dat' + if iq == 0: + with open(filename_new,'w') as f: + f.write(" # ------------------------------------------------------------- \n") + f.write(" # len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1) \n") + f.write(" # ------------------------------------------------------------- \n") + for ie, ene in enumerate(energies_cm): + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,0])) + f.write("\n") + else: + with open(filename_new,'a') as f: + for ie, ene in enumerate(energies_cm): + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,0])) + f.write("\n") + # + else: + # + for ism in range(nsm): + # + #name="{:5.2f}".format(smear_id_cm[ism]).strip()+"_"+"{:6.1f}".format(smear_cm[ism]).strip() + name="{:6.1f}".format(smear_cm[ism]).strip() + # + filename_new=filename_sp+'_'+name+'.dat' + if iq == 0: + with open(filename_new,'w') as f: + f.write(" # ------------------------------------------------------------- \n") + f.write(" # len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1) \n") + f.write(" # ------------------------------------------------------------- \n") + for ie, ene in enumerate(energies_cm): + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + f.write("\n") + else: + with open(filename_new,'a') as f: + for ie, ene in enumerate(energies_cm): + f.write("{:>10.6f}\t{:>11.7f}\t{:>11.7f}\n".format(x_length[iq],ene,spectralf[ie,ism])) + f.write("\n") + return 0 + + + + + +# ========================= DIAGONAL SELF-ENERGY DYNAMIC CORRECTION ========================= + +def get_diag_dynamic_bubble(tensor2, + tensor3, + k_grid, + q, + smear_id, + smear, energies, T, verbose = False ): - - + + structure = tensor2.unitcell_structure - - # Get the integration points + + # Get the integration points k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) - - + + # Get the phi2 in q phi2_q = tensor2.Interpolate(q, asr = False) # dynamical matrix in q - m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() mm_mat = np.sqrt(np.outer(m, m)) mm_inv_mat = 1 / mm_mat # d2_q = phi2_q * mm_inv_mat - + # Diagonalize the dynamical matrix in q w2_q, pols_q = np.linalg.eigh(d2_q) - + # Check if the q point is gamma is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) - + if is_q_gamma: w2_q[0:3]=0.0 if not (w2_q >= 0.0).all(): @@ -861,8 +1455,8 @@ def get_diag_dynamic_bubble(tensor2, print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') print('Cannot continue with SSCHA negative frequencies') exit() - w_q=np.sqrt(w2_q) - + w_q=np.sqrt(w2_q) + # Allocate the memory for the bubble ne=energies.shape[0] nsm=smear.shape[0] @@ -871,32 +1465,32 @@ def get_diag_dynamic_bubble(tensor2, tmp_bubble = np.zeros((ne,nsm,n_mod), dtype = np.complex128, order = "F") - + def compute_k(k): # phi3 in q, k, -q - k - t1 = time.time() + t1 = time.time() phi3=tensor3.Interpolate(k,-q-k, asr = False) t2 = time.time() # phi2 in k - phi2_k = tensor2.Interpolate(k, asr = False) + phi2_k = tensor2.Interpolate(k, asr = False) # phi2 in -q-k phi2_mq_mk = tensor2.Interpolate(-q -k, asr = False) t3 = time.time() - + # dynamical matrices (divide by the masses) d2_k = phi2_k * mm_inv_mat d2_mq_mk = phi2_mq_mk * mm_inv_mat - + # Diagonalize the dynamical matrices w2_k, pols_k = np.linalg.eigh(d2_k) w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) - - + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) - + if is_k_gamma: w2_k[0:3]=0.0 if not (w2_k >= 0.0).all(): @@ -914,7 +1508,7 @@ def compute_k(k): print('Cannot continue with SSCHA negative frequencies') exit() w_mq_mk=np.sqrt(w2_mq_mk) - + # Dividing the phi3 by the sqare root of masses d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) @@ -923,40 +1517,40 @@ def compute_k(k): d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) - + t4 = time.time() - - + + # Fortran duty ==== - + # tmp_bubble = thirdorder.third_order_bubble.compute_diag_dynamic_bubble(energies,smear,T, np.array([w_q,w_k,w_mq_mk]).T, np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), - d3_pols,ne,nsm,n_mod=n_mod) + d3_pols,ne,nsm,n_mod=n_mod) t5 = time.time() - + if verbose: print("Time to interpolate the third order: {} s".format(t2 - t1)) print("Time to interpolate the second order: {} s".format(t3 - t2)) print("Time to transform the tensors: {} s".format(t4 - t3)) print("Time to compute the bubble: {} s".format(t5 - t4)) - - return tmp_bubble - + + return tmp_bubble + CC.Settings.SetupParallel() d_bubble_mod =CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") - + # divide by the N_k factor d_bubble_mod /= len(k_points) # (ne,nsmear,n_mod) # - np.savetxt("db_new",d_bubble_mod[:,-1,-1]) + # np.savetxt("db_new",d_bubble_mod[:,-1,-1]) # spectralf=thirdorder.third_order_bubble.compute_spectralf_diag(smear_id,energies,w_q, d_bubble_mod, - nat,ne,nsm) + nat,ne,nsm) # (ne, n_mod, nsmear) w2_q_ext=w2_q[None,None,...] @@ -964,19 +1558,19 @@ def compute_k(k): w_q_ext=w_q[None,None,...] z_pert=w_q_ext+np.divide(d_bubble_mod, 2*w_q_ext, out=np.zeros_like(d_bubble_mod), where=w_q_ext!=0) - + return spectralf, z, z_pert, w_q -def get_diag_dynamic_correction_along_path(dyn, tensor3, - k_grid, +def get_diag_dynamic_correction_along_path(dyn, tensor3, + k_grid, e1, de, e0, sm1, sm0, sm1_id=None, sm0_id=None, nsm=1, q_path=[0.0,0.0,0.0], - q_path_file=None, - print_path = True, + q_path_file=None, + print_path = True, T=0.0, filename_sp = 'spectral_func', filename_z = None, @@ -984,10 +1578,10 @@ def get_diag_dynamic_correction_along_path(dyn, tensor3, filename_shift_lw = 'v2_freq_shift_hwhm', self_consist = False, iterative=False, - numiter=200, + numiter=200, d3_scale_factor=None, - tensor2 = None): - + tensor2 = None): + """ Get the spectral function for a list of energies, and several q along a given path, @@ -1001,126 +1595,126 @@ def get_diag_dynamic_correction_along_path(dyn, tensor3, (one optional). 1. One shot, evaluating the Z function in the SSCHA frequency value.2. Perturbative, evaluating the perturbative correction. 3. (optional) solving the self-consistent relation (details in [PRB 97 214101 (A21)]). The corresponding Lorenzian spectral functions are then printed. - + Parameters ---------- - + dyn : Phonons() The harmonic / SSCHA dynamical matrix tensor3 : Tensor3() The third order force constant matrix k_grid : list(len = 3) - The integration grid on the Brillouin zone + The integration grid on the Brillouin zone e1, de ,e0: float The list of energies considered (cm-1), from e0 to e1, with interval de - sm0, sm1 : float - Minimum and maximum value of the smearing (cm-1) to compute the self-energy - + sm0, sm1 : float + Minimum and maximum value of the smearing (cm-1) to compute the self-energy + Optional -------- nsm : integer - Number of smearings to consider + Number of smearings to consider (default = 1) T : float - The temperature + The temperature (default: 0 K) - sm0_id, sm1_id : float - Minimum and maximum value of the smearing (cm-1) for the term of the Green function + sm0_id, sm1_id : float + Minimum and maximum value of the smearing (cm-1) for the term of the Green function proportional to the identity. If not present, it is sm0_id = sm1_id = 2.0 * de (default: None) q_path : list of triplets Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, - where the caculation is performed - (defualt: [0.0,0.0,0.0]) + where the caculation is performed + (default: [0.0,0.0,0.0]) q_path_file : string - Name of the file where the q_path can be read. + Name of the file where the q_path can be read. Format: column of triples, q points in 2pi/Angstrom If the name of the file is present, it has the - priority over the q_path value + priority over the q_path value (default: None) print_path : logical - If True (and the path is composed of more then one q-point), + If True (and the path is composed of more then one q-point), a file 'path_len.dat' is printed. - Format: column of 4 values, coordinates of + Format: column of 4 values, coordinates of the q-point and path length (in 2pi/Angstrom) . - (default: True) - filename_sp : string + (default: True) + filename_sp : string filename_sp_[smear].dat - is the file where the spectral function is written. - Format: length of the path (in 2pi/Alat), + is the file where the spectral function is written. + Format: length of the path (in 2pi/Alat), energy (cm-1),spectral function (1/cm-1), single mode contributions to spectral function (1/cm-1) - (default: "spectral_func") - filename_z : string + (default: "spectral_func") + filename_z : string if present, the file filename_z_[smear].dat with the z function is written - Format: length of the path (in 2pi/Alat), + Format: length of the path (in 2pi/Alat), energy (cm-1), z function (cm-1), (default: None) - filename_shift_lw : string + filename_shift_lw : string filename_shift_lw_[method]_[smear].dat is the file where len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) - are printed. [method] are "one shot", "perturb" and "self-consist" + are printed. [method] are "one shot", "perturb" and "self-consist" (the last one optional) (default: "v2_freq_shift_hwhm") - filename_freq_dyn : string + filename_freq_dyn : string filename_freq_dyn_[method]_[smear].dat is the file where len (2pi/Angstrom), freq (cm-1) (sorted in ascending order), corresponding HWHM (cm-1) - are printed. [method] are "one shot", "perturb" and "self-consist" + are printed. [method] are "one shot", "perturb" and "self-consist" (the last one optional) - (default: "freq_dynamic") + (default: "freq_dynamic") self_consist : Logical - If True, the dynamical frequency is found solving the self-consistent + If True, the dynamical frequency is found solving the self-consistent relation [PRB 97 214101 (A21)] (default: False) iterative : Logical If True, the self-consistent relation is found iteratively - (default: False) + (default: False) numiter : integer - Number of maximum steps to find the self-consistency iteratively + Number of maximum steps to find the self-consistency iteratively (default : 200) - d3_scale_factor : float + d3_scale_factor : float If present, the 3rd order FC is multiplied by this factor (e.g. it can be used to make tests about the perturbative limit) (default: None) tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) - If present, this 2nd order FC overwrites the one + If present, this 2nd order FC overwrites the one obtained from dyn. - (default: None) - + (default: None) + """ - - print(" ") - print(" ===========================================" ) - print(" Bubble diagonal dynamic correction " ) + + print(" ") + print(" ===========================================" ) + print(" Bubble diagonal dynamic correction " ) print(" ===========================================" ) - print(" ") + print(" ") print(" T= {:>5.1f} K".format(T)) - print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) + print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) print(" ") print(" Smearing values: ") for sm in np.linspace(sm0,sm1,nsm): - print(" sm= {:>6.2f} cm-1".format(sm)) - print(" ") - print(" ===========================================" ) - print(" " ) + print(" sm= {:>6.2f} cm-1".format(sm)) + print(" ") + print(" ===========================================" ) + print(" " ) if sm1_id != None and sm0_id != None: for sm in np.linspace(sm0_id,sm1_id,nsm): - print(" sm_id= {:>6.2f} cm-1".format(sm)) + print(" sm_id= {:>6.2f} cm-1".format(sm)) else: sm1_id=de*2.0 sm0_id=de*2.0 - + if ( tensor2 == None ): - + # Prepare the tensor2 tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) tensor2.SetupFromPhonons(dyn) @@ -1135,62 +1729,62 @@ def get_diag_dynamic_correction_along_path(dyn, tensor3, print("d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) print(" ") tensor3.tensor=tensor3.tensor*d3_scale_factor - # ================================== q-PATH =============================================== + # ================================== q-PATH =============================================== if q_path_file == None: q_path=np.array(q_path) else: print(" ") print(" q_path read from "+q_path_file) - print(" ") + print(" ") q_path=np.loadtxt(q_path_file) - if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) # Get the length of the q path - x_length = np.zeros(len(q_path)) + x_length = np.zeros(len(q_path)) q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) x_length[1:] = q_tot x_length=np.cumsum(x_length) - x_length_exp=np.expand_dims(x_length,axis=0) + x_length_exp=np.expand_dims(x_length,axis=0) # print the path q-points and length if print_path and (q_path.shape[0] > 1) : fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] - result=np.hstack((q_path,x_length_exp.T)) + result=np.hstack((q_path,x_length_exp.T)) np.savetxt('path_len.dat',result,fmt=fmt_txt) print(" ") print(" Path printed in path_len.dat ") - print(" ") - # ======================= Energy & Smearing ========================================== + print(" ") + # ======================= Energy & Smearing ========================================== # # energy in input is in cm-1 # smearing in input is in cm-1 # converto to Ry - + # list of energies energies=np.arange(e0,e1,de)/CC.Units.RY_TO_CM ne=energies.shape[0] # list of smearing - if nsm == 1 : + if nsm == 1 : sm1=sm0 sm1_id=sm0_id smear=np.linspace(sm0,sm1,nsm)/CC.Units.RY_TO_CM smear_id=np.linspace(sm0_id,sm1_id,nsm)/CC.Units.RY_TO_CM - # - # ========================================================================================== # - + # ========================================================================================== + # + def Lorenz(x,x0,G): return G/((x-x0)**2+G**2)/np.pi/2.0 def findne(val,e0,de): #return int( round( ((val-e0)/de)+1 ) ) - return int(round( (val-e0)/de ) ) + return int(round( (val-e0)/de ) ) # print(" ") #print(" Spectral function, in diagonal approximation, printed in "+filename_sp+"_[smear_id]_[smear].dat") - print(" Spectral function, in diagonal approximation, printed in "+filename_sp+"_[smear].dat") + print(" Spectral function, in diagonal approximation, printed in "+filename_sp+"_[smear].dat") print(" ") if filename_z != None: print(" ") print(" Z function [PRB 97 214101 (A21)], printed in "+filename_z+"_[smear].dat") - print(" ") + print(" ") print(" ========================================= ") print(" Frequncies shifts and widths calculations ") @@ -1198,44 +1792,44 @@ def findne(val,e0,de): print(" ") print(" Frequencies shifts and linewidths computed with perturbative approximation and one-shot calculation in: ") print(" ") - #print(" "+filename_shift_lw +"_perturb_[smear_id]_[smear].dat") - #print(" "+filename_shift_lw +"_one_shot_[smear_id]_[smear].dat") - print(" "+filename_shift_lw +"_perturb_[smear].dat") - print(" "+filename_shift_lw +"_one_shot_[smear].dat") + #print(" "+filename_shift_lw +"_perturb_[smear_id]_[smear].dat") + #print(" "+filename_shift_lw +"_one_shot_[smear_id]_[smear].dat") + print(" "+filename_shift_lw +"_perturb_[smear].dat") + print(" "+filename_shift_lw +"_one_shot_[smear].dat") print(" ") print(" ") - print(" Dynamical frequencies sorted, with HWHM: ") + print(" Dynamical frequencies sorted, with HWHM: ") print(" ") - #print(" "+filename_freq_dyn +"_perturb_[smear_id]_[smear].dat") - #print(" "+filename_freq_dyn +"_one_shot_[smear_id]_[smear].dat") - print(" "+filename_freq_dyn +"_perturb_[smear].dat") - print(" "+filename_freq_dyn +"_one_shot_[smear].dat") + #print(" "+filename_freq_dyn +"_perturb_[smear_id]_[smear].dat") + #print(" "+filename_freq_dyn +"_one_shot_[smear_id]_[smear].dat") + print(" "+filename_freq_dyn +"_perturb_[smear].dat") + print(" "+filename_freq_dyn +"_one_shot_[smear].dat") print(" ") print(" ") print(" Relative spectral functions in Lorentzian approximation: ") print(" ") - #print(" "+filename_sp+"_lorentz_perturb_[smear_id]_[smear].dat") - #print(" "+filename_sp+"_one_shot_[smear_id]_[smear].dat") - print(" "+filename_sp+"_lorentz_perturb_[smear].dat") - print(" "+filename_sp+"_one_shot_[smear].dat") + #print(" "+filename_sp+"_lorentz_perturb_[smear_id]_[smear].dat") + #print(" "+filename_sp+"_one_shot_[smear_id]_[smear].dat") + print(" "+filename_sp+"_lorentz_perturb_[smear].dat") + print(" "+filename_sp+"_one_shot_[smear].dat") print(" ") if self_consist: print(" ************************************************ ") print(" Self-consistent search for dynamical frequencies ") print(" ************************************************ ") print(" ") - print(" Results printed in: ") + print(" Results printed in: ") print(" ") - #print(" "+filename_shift_lw +"_[smear_id]_[smear].dat") - print(" "+filename_shift_lw +"_self-consist_[smear].dat") - print(" ") + #print(" "+filename_shift_lw +"_[smear_id]_[smear].dat") + print(" "+filename_shift_lw +"_self-consist_[smear].dat") print(" ") - #print(" "+filename_freq_dyn +"_[smear_id]_[smear].dat") - print(" "+filename_freq_dyn +"_self-consist_[smear].dat") print(" ") + #print(" "+filename_freq_dyn +"_[smear_id]_[smear].dat") + print(" "+filename_freq_dyn +"_self-consist_[smear].dat") print(" ") - #print(" "+filename_sp+"_lorentz_[smear_id]_[smear].dat") - print(" "+filename_sp+"_lorentz_self-consist_[smear].dat") + print(" ") + #print(" "+filename_sp+"_lorentz_[smear_id]_[smear].dat") + print(" "+filename_sp+"_lorentz_self-consist_[smear].dat") print(" ") print(" ") # convert from Ry to cm-1 @@ -1245,31 +1839,31 @@ def findne(val,e0,de): n_mod=3*dyn.structure.N_atoms # - spectralf = np.zeros( (ne,n_mod,nsm), dtype=np.float64 ) - z = np.zeros( (ne,nsm,n_mod) , dtype=np.complex128 ) - z_pert = np.zeros( (ne,nsm,n_mod), dtype = np.complex128 ) - wq = np.zeros( n_mod, dtype = np.float64 ) + spectralf = np.zeros( (ne,n_mod,nsm), dtype=np.float64 ) + z = np.zeros( (ne,nsm,n_mod) , dtype=np.complex128 ) + z_pert = np.zeros( (ne,nsm,n_mod), dtype = np.complex128 ) + wq = np.zeros( n_mod, dtype = np.float64 ) # - + for iq, q in enumerate(q_path): spectralf, z , z_pert, wq = get_diag_dynamic_bubble(tensor2, tensor3, k_grid, np.array(q), smear_id, smear, energies, - T, verbose=False ) - - + T, verbose=False ) + + # z *= CC.Units.RY_TO_CM z_pert *= CC.Units.RY_TO_CM wq *= CC.Units.RY_TO_CM # convert from 1/Ry to 1/cm-1 - spectralf /= CC.Units.RY_TO_CM - - - - - + spectralf /= CC.Units.RY_TO_CM + + + + + for ism in range(nsm): # # pre-name for writing data @@ -1284,21 +1878,21 @@ def findne(val,e0,de): # ======= filename_new=filename_sp+'_'+name+'.dat' fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" - + if iq == 0: with open(filename_new,'w') as f: f.write("# ---------------------------------------------------------------------------------------------------------\n") f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1)\n") f.write("# ---------------------------------------------------------------------------------------------------------\n") for ie, ene in enumerate(energies_cm): - out=spectralf[ie,:,ism] - f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + out=spectralf[ie,:,ism] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) f.write("\n") else: with open(filename_new,'a') as f: for ie, ene in enumerate(energies_cm): - out=spectralf[ie,:,ism] - f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + out=spectralf[ie,:,ism] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) f.write("\n") # ======= # z func @@ -1306,30 +1900,30 @@ def findne(val,e0,de): if filename_z != None: filename_new=filename_z+'_'+name+'.dat' fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod)+"\n" - + if iq == 0: with open(filename_new,'w') as f: f.write("# ---------------------------------------------------- \n") - f.write("# len (2pi/Angstrom), energy (cm-1), z function (cm-1) \n") - f.write("# ---------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), energy (cm-1), z function (cm-1) \n") + f.write("# ---------------------------------------------------- \n") for ie, ene in enumerate(energies_cm): - out=z[ie,ism,:] - f.write(fmt.format(x_length[iq],ene,*out)) + out=z[ie,ism,:] + f.write(fmt.format(x_length[iq],ene,*out)) else: with open(filename_new,'a') as f: for ie, ene in enumerate(energies_cm): out=z[ie,ism,:] f.write(fmt.format(x_length[iq],ene,*out)) - + # ====================================== # compute frequency shift and linewidth # ====================================== - + if self_consist: - res=np.zeros((n_mod,2),dtype=np.float64) # self-consist shifted freq and linewidth - res_os=np.zeros((n_mod,2),dtype=np.float64) # one-shot shifted freq and linewidth - res_pert=np.zeros((n_mod,2),dtype=np.float64) # perturbative shifted freq and linewidth - + res=np.zeros((n_mod,2),dtype=np.float64) # self-consist shifted freq and linewidth + res_os=np.zeros((n_mod,2),dtype=np.float64) # one-shot shifted freq and linewidth + res_pert=np.zeros((n_mod,2),dtype=np.float64) # perturbative shifted freq and linewidth + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q_path[iq]) for ifreq in range(n_mod): done=False @@ -1339,14 +1933,14 @@ def findne(val,e0,de): freqoldold=freqold for i in range(numiter): x=findne(freqold,e0,de) - if i==0: xtriv=x + if i==0: xtriv=x freqshifted=np.real(z[x-1,ism,ifreq]) # Re(z) is the shifted freq if abs(freqshifted-freqold)< 2*de: done=True break - else: + else: freqoldold=freqold - freqold=freqshifted + freqold=freqshifted # else: xtriv=findne(wq[ifreq],e0,de) @@ -1354,67 +1948,67 @@ def findne(val,e0,de): diff=np.infty for x in range(ne): value=np.real(z[x,ism,ifreq])-energies_cm[x] - if( abs(value ) < 2*de) : + if( abs(value ) < 2*de) : if ( 1.0 < abs(energies_cm[x]) or ( is_q_gamma and ifreq < 3 ) ): done=True if ( abs( energies_cm[x]-osval ) < diff ): diff=abs( energies_cm[x]-osval ) - freqshifted=energies_cm[x] - - - # - if done: + freqshifted=energies_cm[x] + + # - res[ifreq,0]=freqshifted + if done: + # + res[ifreq,0]=freqshifted x=findne(freqshifted,e0,de) res[ifreq,1]=-np.imag(z[x-1,ism,ifreq]) # else: - # + # print(" Self-consistency for the {:5d}-th mode of the {:5d}-th q-point not reached. " "One-shot approx. value used".format(ifreq+1,iq+1)) res[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) - res[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) - # - res_os[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) - res_os[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) + res[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) # - res_pert[ifreq,0]=np.real(z_pert[xtriv-1,ism,ifreq]) + res_os[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) + res_os[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) + # + res_pert[ifreq,0]=np.real(z_pert[xtriv-1,ism,ifreq]) res_pert[ifreq,1]=-np.imag(z_pert[xtriv-1,ism,ifreq]) else: - res_os=np.zeros((n_mod,2),dtype=np.float64) # one-shot shifted freq and linewidth - res_pert=np.zeros((n_mod,2),dtype=np.float64) # perturbative shifted freq and linewidth - - for ifreq in range(n_mod): + res_os=np.zeros((n_mod,2),dtype=np.float64) # one-shot shifted freq and linewidth + res_pert=np.zeros((n_mod,2),dtype=np.float64) # perturbative shifted freq and linewidth + + for ifreq in range(n_mod): xtriv=findne(wq[ifreq],e0,de) # - res_os[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) - res_os[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) + res_os[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) + res_os[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) # - res_pert[ifreq,0]=np.real(z_pert[xtriv-1,ism,ifreq]) - res_pert[ifreq,1]=-np.imag(z_pert[xtriv-1,ism,ifreq]) - - - - + res_pert[ifreq,0]=np.real(z_pert[xtriv-1,ism,ifreq]) + res_pert[ifreq,1]=-np.imag(z_pert[xtriv-1,ism,ifreq]) + + + + # ======================= # v2_freq, shift, hwhm - # ======================= + # ======================= if self_consist: filename_new=filename_shift_lw+'_self-consist_'+name+'.dat' fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" if iq == 0: with open(filename_new,'w') as f: f.write("# ----------------------------------------------------------------- \n") - f.write("# len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) \n") - f.write("# ----------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) \n") + f.write("# ----------------------------------------------------------------- \n") out=np.concatenate((wq[:],res[:,0]-wq[:], res[:,1])) f.write(fmt.format(x_length[iq],*out)) else: with open(filename_new,'a') as f: out=np.concatenate((wq[:],res[:,0]-wq[:], res[:,1])) f.write(fmt.format(x_length[iq],*out)) - + filename_new=filename_shift_lw+'_one_shot_'+name+'.dat' fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" if iq == 0: @@ -1444,10 +2038,10 @@ def findne(val,e0,de): f.write(fmt.format(x_length[iq],*out)) # ================================================ # freq sorted, hwhm && Lorenztian spectral func - # ================================================ - + # ================================================ + if self_consist: - + wq_shifted=res[:,0] hwhm=res[:,1] @@ -1456,9 +2050,9 @@ def findne(val,e0,de): wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) #wq_shifted_sorted_plus= wq_shifted_sorted+hwhm_sorted - #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted + #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted # - # freq, freq + # freq, freq # filename_new=filename_freq_dyn+'_self-consist_'+name+'.dat' fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" @@ -1466,29 +2060,29 @@ def findne(val,e0,de): with open(filename_new,'w') as f: f.write("# ------------------------------------------------------------ \n") f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") - f.write("# ------------------------------------------------------------ \n") + f.write("# ------------------------------------------------------------ \n") #out=np.concatenate((wq_shifted_sorted, #wq_shifted_sorted_plus, #wq_shifted_sorted_minus)) out=np.concatenate((wq_shifted_sorted, - hwhm_sorted)) + hwhm_sorted)) f.write(fmt.format(x_length[iq],*out)) else: with open(filename_new,'a') as f: out=np.concatenate((wq_shifted_sorted, - hwhm_sorted)) + hwhm_sorted)) f.write(fmt.format(x_length[iq],*out)) - # - # Lorenztian spectral func + # + # Lorenztian spectral func # filename_new=filename_sp+'_lorentz_self-consist_'+name+'.dat' fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" if iq == 0: with open(filename_new,'w') as f: f.write("# ---------------------------------------------------------------------------------------------------------\n") - f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1)\n") - f.write("# ---------------------------------------------------------------------------------------------------------\n") - Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1)\n") + f.write("# ---------------------------------------------------------------------------------------------------------\n") + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) for ifreq in range(n_mod): Lor_spectralf[:,ifreq]=Lorenz(energies_cm, wq_shifted_sorted[ifreq], @@ -1499,7 +2093,7 @@ def findne(val,e0,de): f.write("\n") else: with open(filename_new,'a') as f: - Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) for ifreq in range(n_mod): Lor_spectralf[:,ifreq]=Lorenz(energies_cm, wq_shifted_sorted[ifreq], @@ -1511,160 +2105,1227 @@ def findne(val,e0,de): # wq_shifted=res_os[:,0] hwhm=res_os[:,1] - + + sortidx=np.argsort(wq_shifted,axis=0) + + wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) + hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) + #wq_shifted_sorted_plus= wq_shifted_sorted+hwhm_sorted + #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted + # + # freq, freq +/- hwhm + # + filename_new=filename_freq_dyn+'_one_shot_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ------------------------------------------------------------ \n") + f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") + f.write("# ------------------------------------------------------------ \n") + #out=np.concatenate((wq_shifted_sorted, + #wq_shifted_sorted_plus, + # wq_shifted_sorted_minus)) + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + # + # Lorentzian spectral func + # + filename_new=filename_sp+'_lorentz_one_shot_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# --------------------------------------------------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1) \n") + f.write("# --------------------------------------------------------------------------------------------------------- \n") + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + else: + with open(filename_new,'a') as f: + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + + # + wq_shifted=res_pert[:,0] + hwhm=res_pert[:,1] + sortidx=np.argsort(wq_shifted,axis=0) wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) #wq_shifted_sorted_plus= wq_shifted_sorted+hwhm_sorted - #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted + #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted # # freq, freq +/- hwhm # - filename_new=filename_freq_dyn+'_one_shot_'+name+'.dat' - fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" + filename_new=filename_freq_dyn+'_perturb_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ------------------------------------------------------------ \n") + f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") + f.write("# ------------------------------------------------------------ \n") + #out=np.concatenate((wq_shifted_sorted, + #wq_shifted_sorted_plus, + #wq_shifted_sorted_minus)) + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + # + # Lorenztian spectral func + # + filename_new=filename_sp+'_lorentz_perturb_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# --------------------------------------------------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1) \n") + f.write("# --------------------------------------------------------------------------------------------------------- \n") + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + else: + with open(filename_new,'a') as f: + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + # + +def get_diag_dynamic_correction_along_path_multiprocessing(dyn, tensor3, + k_grid, + e1, de, e0, + sm1, sm0, + sm1_id=None, sm0_id=None, + nsm=1, + q_path=[0.0,0.0,0.0], + q_path_file=None, + print_path = True, + T=0.0, + filename_sp = 'spectral_func', + filename_z = None, + filename_freq_dyn = 'freq_dynamic', + filename_shift_lw = 'v2_freq_shift_hwhm', + self_consist = False, + iterative=False, + numiter=200, + d3_scale_factor=None, + tensor2 = None, processes = None): + + + """ + Get the spectral function for a list of energies, and several q along a given path, + in the diagonal approximation (off-diagonal terms of the self-energies are discarded). + The calculations are performed for several values of smearings to calculate the self-energy + and the Green function. The resuls is printed in the file + filename_sp_[id_smear]_[smear].dat (path length in 2pi/Angstrom, energies (cm-1), + spectral function (1/cm-1), mode components of the spectral function (1/cm-1) ). + The Z function [PRB 97 214101 (A20)] is also printed in filename_z_[id_smear]_[smear].dat. + The frequency shift (with respect to the SSCHA frequency) and linewidth are computed in three ways + (one optional). 1. One shot, evaluating the Z function in the SSCHA frequency value.2. Perturbative, + evaluating the perturbative correction. 3. (optional) solving the self-consistent relation (details + in [PRB 97 214101 (A21)]). The corresponding Lorenzian spectral functions are then printed. + + Parameters + ---------- + + dyn : Phonons() + The harmonic / SSCHA dynamical matrix + tensor3 : Tensor3() + The third order force constant matrix + k_grid : list(len = 3) + The integration grid on the Brillouin zone + e1, de ,e0: float + The list of energies considered (cm-1), from e0 to e1, with interval de + sm0, sm1 : float + Minimum and maximum value of the smearing (cm-1) to compute the self-energy + + Optional + -------- + + nsm : integer + Number of smearings to consider + (default = 1) + T : float + The temperature + (default: 0 K) + sm0_id, sm1_id : float + Minimum and maximum value of the smearing (cm-1) for the term of the Green function + proportional to the identity. If not present, it is sm0_id = sm1_id = 2.0 * de + (default: None) + q_path : list of triplets + Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, + where the caculation is performed + (default: [0.0,0.0,0.0]) + q_path_file : string + Name of the file where the q_path can be read. + Format: column of triples, q points in 2pi/Angstrom + If the name of the file is present, it has the + priority over the q_path value + (default: None) + print_path : logical + If True (and the path is composed of more then one q-point), + a file 'path_len.dat' is printed. + Format: column of 4 values, coordinates of + the q-point and path length (in 2pi/Angstrom) . + (default: True) + filename_sp : string + filename_sp_[smear].dat + is the file where the spectral function is written. + Format: length of the path (in 2pi/Alat), + energy (cm-1),spectral function (1/cm-1), + single mode contributions to spectral function (1/cm-1) + (default: "spectral_func") + filename_z : string + if present, the file + filename_z_[smear].dat + with the z function is written + Format: length of the path (in 2pi/Alat), + energy (cm-1), z function (cm-1), + (default: None) + filename_shift_lw : string + filename_shift_lw_[method]_[smear].dat + is the file where + len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) + are printed. [method] are "one shot", "perturb" and "self-consist" + (the last one optional) + (default: "v2_freq_shift_hwhm") + filename_freq_dyn : string + filename_freq_dyn_[method]_[smear].dat + is the file where + len (2pi/Angstrom), freq (cm-1) (sorted in ascending order), corresponding HWHM (cm-1) + are printed. [method] are "one shot", "perturb" and "self-consist" + (the last one optional) + (default: "freq_dynamic") + self_consist : Logical + If True, the dynamical frequency is found solving the self-consistent + relation [PRB 97 214101 (A21)] + (default: False) + iterative : Logical + If True, the self-consistent relation is found iteratively + (default: False) + numiter : integer + Number of maximum steps to find the self-consistency iteratively + (default : 200) + d3_scale_factor : float + If present, the 3rd order FC is multiplied by this factor + (e.g. it can be used to make tests about the perturbative limit) + (default: None) + tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) + If present, this 2nd order FC overwrites the one + obtained from dyn. + (default: None) + processes : integer + Number of maximum processes (cpu) to be used during the calculation. + If 'None' then the number returned by os.cpu_count() is used. + (default: None) + + """ + + def output_file_sort_function(filename_sp, smear_cm, nsm): + for ism in range(nsm): + name = "{:6.2f}".format(smear_cm[ism]).strip() + filename_data = filename_sp+'_'+name+'.dat' + f = open(filename_data, 'r') + head1 = f.readline() + head2 = f.readline() + head3 = f.readline() + data = np.loadtxt(f) + f.close() + head = head1[1:]+head2[1:]+head3[1:] + # X = data[:,0] + # Y = data[:,1] + # Z = data[:,2] + # x = [X[i] for i in np.lexsort((Y,X))] + # y = [Y[i] for i in np.lexsort((Y,X))] + # z = [Z[i] for i in np.lexsort((Y,X))] + # f = open('plot_energies_'+filename_data, 'w') + # np.savetxt(f,np.c_[x,y,z]) + # f.close() + data = data[data[:,2].argsort()] # First sort doesn't need to be stable. + data = data[data[:,1].argsort(kind='mergesort')] + data = data[data[:,0].argsort(kind='mergesort')] + f = open("Sorted_"+filename_data, 'w') + np.savetxt(f,data, header=head[:-1]) + pass + + print(" ") + print(" ===========================================" ) + print(" Bubble diagonal dynamic correction " ) + print(" ===========================================" ) + print(" ") + print(" T= {:>5.1f} K".format(T)) + print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) + print(" ") + print(" Smearing values: ") + for sm in np.linspace(sm0,sm1,nsm): + print(" sm= {:>6.2f} cm-1".format(sm)) + print(" ") + print(" ===========================================" ) + print(" " ) + + + if sm1_id != None and sm0_id != None: + for sm in np.linspace(sm0_id,sm1_id,nsm): + print(" sm_id= {:>6.2f} cm-1".format(sm)) + else: + sm1_id=de*2.0 + sm0_id=de*2.0 + + if ( tensor2 == None ): + + # Prepare the tensor2 + tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) + tensor2.SetupFromPhonons(dyn) + tensor2.Center() + # structure = tensor2.unitcell_structure + + + + # Scale the FC3 =========================================================================== + if d3_scale_factor != None : + print(" ") + print("d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) + print(" ") + tensor3.tensor=tensor3.tensor*d3_scale_factor + # ================================== q-PATH =============================================== + if q_path_file == None: + q_path=np.array(q_path) + else: + print(" ") + print(" q_path read from "+q_path_file) + print(" ") + q_path=np.loadtxt(q_path_file) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + # Get the length of the q path + x_length = np.zeros(len(q_path)) + q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) + x_length[1:] = q_tot + x_length=np.cumsum(x_length) + x_length_exp=np.expand_dims(x_length,axis=0) + # print the path q-points and length + if print_path and (q_path.shape[0] > 1) : + fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] + result=np.hstack((q_path,x_length_exp.T)) + np.savetxt('path_len.dat',result,fmt=fmt_txt) + print(" ") + print(" Path printed in path_len.dat ") + print(" ") + # ======================= Energy & Smearing ========================================== + # + # energy in input is in cm-1 + # smearing in input is in cm-1 + # converto to Ry + + # list of energies + energies=np.arange(e0,e1,de)/CC.Units.RY_TO_CM + ne=energies.shape[0] + # list of smearing + if nsm == 1 : + sm1=sm0 + sm1_id=sm0_id + smear=np.linspace(sm0,sm1,nsm)/CC.Units.RY_TO_CM + smear_id=np.linspace(sm0_id,sm1_id,nsm)/CC.Units.RY_TO_CM + # + # ========================================================================================== + # + + + # + print(" ") + #print(" Spectral function, in diagonal approximation, printed in "+filename_sp+"_[smear_id]_[smear].dat") + print(" Spectral function, in diagonal approximation, printed in "+filename_sp+"_[smear].dat") + print(" ") + if filename_z != None: + print(" ") + print(" Z function [PRB 97 214101 (A21)], printed in "+filename_z+"_[smear].dat") + print(" ") + + print(" ========================================= ") + print(" Frequncies shifts and widths calculations ") + print(" ========================================= ") + print(" ") + print(" Frequencies shifts and linewidths computed with perturbative approximation and one-shot calculation in: ") + print(" ") + #print(" "+filename_shift_lw +"_perturb_[smear_id]_[smear].dat") + #print(" "+filename_shift_lw +"_one_shot_[smear_id]_[smear].dat") + print(" "+filename_shift_lw +"_perturb_[smear].dat") + print(" "+filename_shift_lw +"_one_shot_[smear].dat") + print(" ") + print(" ") + print(" Dynamical frequencies sorted, with HWHM: ") + print(" ") + #print(" "+filename_freq_dyn +"_perturb_[smear_id]_[smear].dat") + #print(" "+filename_freq_dyn +"_one_shot_[smear_id]_[smear].dat") + print(" "+filename_freq_dyn +"_perturb_[smear].dat") + print(" "+filename_freq_dyn +"_one_shot_[smear].dat") + print(" ") + print(" ") + print(" Relative spectral functions in Lorentzian approximation: ") + print(" ") + #print(" "+filename_sp+"_lorentz_perturb_[smear_id]_[smear].dat") + #print(" "+filename_sp+"_one_shot_[smear_id]_[smear].dat") + print(" "+filename_sp+"_lorentz_perturb_[smear].dat") + print(" "+filename_sp+"_one_shot_[smear].dat") + print(" ") + if self_consist: + print(" ************************************************ ") + print(" Self-consistent search for dynamical frequencies ") + print(" ************************************************ ") + print(" ") + print(" Results printed in: ") + print(" ") + #print(" "+filename_shift_lw +"_[smear_id]_[smear].dat") + print(" "+filename_shift_lw +"_self-consist_[smear].dat") + print(" ") + print(" ") + #print(" "+filename_freq_dyn +"_[smear_id]_[smear].dat") + print(" "+filename_freq_dyn +"_self-consist_[smear].dat") + print(" ") + print(" ") + #print(" "+filename_sp+"_lorentz_[smear_id]_[smear].dat") + print(" "+filename_sp+"_lorentz_self-consist_[smear].dat") + print(" ") + print(" ") + # convert from Ry to cm-1 + smear_cm = smear * CC.Units.RY_TO_CM + smear_id_cm = smear_id * CC.Units.RY_TO_CM + energies_cm = energies * CC.Units.RY_TO_CM + + n_mod=3*dyn.structure.N_atoms + # + spectralf = np.zeros( (ne,n_mod,nsm), dtype=np.float64 ) + z = np.zeros( (ne,nsm,n_mod) , dtype=np.complex128 ) + z_pert = np.zeros( (ne,nsm,n_mod), dtype = np.complex128 ) + wq = np.zeros( n_mod, dtype = np.float64 ) + # + iq_list = [] + q_list = [] + for iq, q in enumerate(q_path): + iq_list.append(iq) #yes I know this is stupid, is just range(len(q_path)) + q_list.append(q) + parameters = zip(iq_list, q_list,itertools.repeat(tensor2),itertools.repeat(tensor3), + itertools.repeat(k_grid),itertools.repeat(smear_id),itertools.repeat(smear_id_cm), + itertools.repeat(smear), itertools.repeat(smear_cm), itertools.repeat(energies), + itertools.repeat(T),itertools.repeat(nsm),itertools.repeat(filename_sp), + itertools.repeat(n_mod),itertools.repeat(energies_cm), + itertools.repeat(x_length),itertools.repeat(e0),itertools.repeat(de), + itertools.repeat(ne),itertools.repeat(filename_z),itertools.repeat(self_consist), + itertools.repeat(q_path),itertools.repeat(iterative),itertools.repeat(numiter), + itertools.repeat(filename_shift_lw),itertools.repeat(filename_freq_dyn)) + + freeze_support() #for windows users + plwork = Pool(processes) + plwork.starmap(multiprocessing_work_diag_dynamic_correction_along_path,parameters) + plwork.close() #remember to close all your pools or they keep using memory/space. + plwork.join() + output_file_sort_function(filename_sp, smear_cm, nsm) + +def multiprocessing_work_diag_dynamic_correction_along_path(iq,q,tensor2,tensor3,k_grid, + smear_id, smear_id_cm, smear, smear_cm, energies, + T,nsm,filename_sp,n_mod,energies_cm, + x_length,e0,de,ne,filename_z,self_consist, + q_path,iterative,numiter,filename_shift_lw, + filename_freq_dyn): + def Lorenz(x,x0,G): + return G/((x-x0)**2+G**2)/np.pi/2.0 + def findne(val,e0,de): + #return int( round( ((val-e0)/de)+1 ) ) + return int(round( (val-e0)/de ) ) + + print("iq=",iq) + spectralf, z , z_pert, wq = get_diag_dynamic_bubble(tensor2, tensor3, + k_grid, np.array(q), + smear_id, smear, energies, + T, verbose=False ) + # + z *= CC.Units.RY_TO_CM + z_pert *= CC.Units.RY_TO_CM + wq *= CC.Units.RY_TO_CM + # convert from 1/Ry to 1/cm-1 + spectralf /= CC.Units.RY_TO_CM + for ism in range(nsm): + # + # pre-name for writing data + # + #name="{:5.2f}".format(smear_id_cm[ism]).strip()+"_"+"{:6.1f}".format(smear_cm[ism]).strip()# + name="{:6.2f}".format(smear_cm[ism]).strip() + # + # write spectral and z function + # + # ======= + # spectral func + # ======= + filename_new=filename_sp+'_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" + + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ---------------------------------------------------------------------------------------------------------\n") + f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1)\n") + f.write("# ---------------------------------------------------------------------------------------------------------\n") + for ie, ene in enumerate(energies_cm): + out=spectralf[ie,:,ism] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + else: + with open(filename_new,'a') as f: + for ie, ene in enumerate(energies_cm): + out=spectralf[ie,:,ism] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + # ======= + # z func + # ======= + if filename_z != None: + filename_new=filename_z+'_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod)+"\n" + + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ---------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), energy (cm-1), z function (cm-1) \n") + f.write("# ---------------------------------------------------- \n") + for ie, ene in enumerate(energies_cm): + out=z[ie,ism,:] + f.write(fmt.format(x_length[iq],ene,*out)) + else: + with open(filename_new,'a') as f: + for ie, ene in enumerate(energies_cm): + out=z[ie,ism,:] + f.write(fmt.format(x_length[iq],ene,*out)) + + # ====================================== + # compute frequency shift and linewidth + # ====================================== + + if self_consist: + res=np.zeros((n_mod,2),dtype=np.float64) # self-consist shifted freq and linewidth + res_os=np.zeros((n_mod,2),dtype=np.float64) # one-shot shifted freq and linewidth + res_pert=np.zeros((n_mod,2),dtype=np.float64) # perturbative shifted freq and linewidth + + structure = tensor2.unitcell_structure + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q_path[iq]) + for ifreq in range(n_mod): + done=False + if iterative : + # + freqold=wq[ifreq] + freqoldold=freqold + for i in range(numiter): + x=findne(freqold,e0,de) + if i==0: xtriv=x + freqshifted=np.real(z[x-1,ism,ifreq]) # Re(z) is the shifted freq + if abs(freqshifted-freqold)< 2*de: + done=True + break + else: + freqoldold=freqold + freqold=freqshifted + # + else: + xtriv=findne(wq[ifreq],e0,de) + osval=np.real(z[xtriv-1,ism,ifreq]) + diff=np.infty + for x in range(ne): + value=np.real(z[x,ism,ifreq])-energies_cm[x] + if( abs(value ) < 2*de) : + if ( 1.0 < abs(energies_cm[x]) or ( is_q_gamma and ifreq < 3 ) ): + done=True + if ( abs( energies_cm[x]-osval ) < diff ): + diff=abs( energies_cm[x]-osval ) + freqshifted=energies_cm[x] + + + # + if done: + # + res[ifreq,0]=freqshifted + x=findne(freqshifted,e0,de) + res[ifreq,1]=-np.imag(z[x-1,ism,ifreq]) + # + else: + # + print(" Self-consistency for the {:5d}-th mode of the {:5d}-th q-point not reached. " + "One-shot approx. value used".format(ifreq+1,iq+1)) + res[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) + res[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) + # + res_os[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) + res_os[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) + # + res_pert[ifreq,0]=np.real(z_pert[xtriv-1,ism,ifreq]) + res_pert[ifreq,1]=-np.imag(z_pert[xtriv-1,ism,ifreq]) + else: + res_os=np.zeros((n_mod,2),dtype=np.float64) # one-shot shifted freq and linewidth + res_pert=np.zeros((n_mod,2),dtype=np.float64) # perturbative shifted freq and linewidth + + for ifreq in range(n_mod): + xtriv=findne(wq[ifreq],e0,de) + # + res_os[ifreq,0]=np.real(z[xtriv-1,ism,ifreq]) + res_os[ifreq,1]=-np.imag(z[xtriv-1,ism,ifreq]) + # + res_pert[ifreq,0]=np.real(z_pert[xtriv-1,ism,ifreq]) + res_pert[ifreq,1]=-np.imag(z_pert[xtriv-1,ism,ifreq]) + + + + + # ======================= + # v2_freq, shift, hwhm + # ======================= + if self_consist: + filename_new=filename_shift_lw+'_self-consist_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ----------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) \n") + f.write("# ----------------------------------------------------------------- \n") + out=np.concatenate((wq[:],res[:,0]-wq[:], res[:,1])) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq[:],res[:,0]-wq[:], res[:,1])) + f.write(fmt.format(x_length[iq],*out)) + + filename_new=filename_shift_lw+'_one_shot_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ----------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) \n") + f.write("# ----------------------------------------------------------------- \n") + out=np.concatenate((wq[:],res_os[:,0]-wq[:], res_os[:,1])) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq[:],res_os[:,0]-wq[:], res_os[:,1])) + f.write(fmt.format(x_length[iq],*out)) + # + filename_new=filename_shift_lw+'_perturb_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ----------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) \n") + f.write("# ----------------------------------------------------------------- \n") + out=np.concatenate((wq[:],res_pert[:,0]-wq[:], res_pert[:,1])) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq[:],res_pert[:,0]-wq[:], res_pert[:,1])) + f.write(fmt.format(x_length[iq],*out)) + # ================================================ + # freq sorted, hwhm && Lorenztian spectral func + # ================================================ + + if self_consist: + + wq_shifted=res[:,0] + hwhm=res[:,1] + + sortidx=np.argsort(wq_shifted,axis=0) + + wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) + hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) + #wq_shifted_sorted_plus= wq_shifted_sorted+hwhm_sorted + #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted + # + # freq, freq + # + filename_new=filename_freq_dyn+'_self-consist_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ------------------------------------------------------------ \n") + f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") + f.write("# ------------------------------------------------------------ \n") + #out=np.concatenate((wq_shifted_sorted, + #wq_shifted_sorted_plus, + #wq_shifted_sorted_minus)) + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + # + # Lorenztian spectral func + # + filename_new=filename_sp+'_lorentz_self-consist_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ---------------------------------------------------------------------------------------------------------\n") + f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1)\n") + f.write("# ---------------------------------------------------------------------------------------------------------\n") + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + else: + with open(filename_new,'a') as f: + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + # + wq_shifted=res_os[:,0] + hwhm=res_os[:,1] + + sortidx=np.argsort(wq_shifted,axis=0) + + wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) + hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) + #wq_shifted_sorted_plus= wq_shifted_sorted+hwhm_sorted + #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted + # + # freq, freq +/- hwhm + # + filename_new=filename_freq_dyn+'_one_shot_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ------------------------------------------------------------ \n") + f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") + f.write("# ------------------------------------------------------------ \n") + #out=np.concatenate((wq_shifted_sorted, + #wq_shifted_sorted_plus, + # wq_shifted_sorted_minus)) + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + # + # Lorentzian spectral func + # + filename_new=filename_sp+'_lorentz_one_shot_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# --------------------------------------------------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1) \n") + f.write("# --------------------------------------------------------------------------------------------------------- \n") + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + else: + with open(filename_new,'a') as f: + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + + # + wq_shifted=res_pert[:,0] + hwhm=res_pert[:,1] + + sortidx=np.argsort(wq_shifted,axis=0) + + wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) + hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) + #wq_shifted_sorted_plus= wq_shifted_sorted+hwhm_sorted + #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted + # + # freq, freq +/- hwhm + # + filename_new=filename_freq_dyn+'_perturb_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ------------------------------------------------------------ \n") + f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") + f.write("# ------------------------------------------------------------ \n") + #out=np.concatenate((wq_shifted_sorted, + #wq_shifted_sorted_plus, + #wq_shifted_sorted_minus)) + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq_shifted_sorted, + hwhm_sorted)) + f.write(fmt.format(x_length[iq],*out)) + # + # Lorenztian spectral func + # + filename_new=filename_sp+'_lorentz_perturb_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# --------------------------------------------------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1) \n") + f.write("# --------------------------------------------------------------------------------------------------------- \n") + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + else: + with open(filename_new,'a') as f: + Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) + for ifreq in range(n_mod): + Lor_spectralf[:,ifreq]=Lorenz(energies_cm, + wq_shifted_sorted[ifreq], + hwhm_sorted[ifreq]+smear_id_cm[ism]) + for ie, ene in enumerate(energies_cm): + out=Lor_spectralf[ie,:] + f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) + f.write("\n") + # + return 0 + + # ===== PERTURBATIVE CORRECTION TO SSCHA FREQUENCY (SHIFT and LINEWIDTH) ===================== + +def get_perturb_dynamic_selfnrg(tensor2, tensor3, + k_grid, q, + smear, + T, + verbose= False): + + structure = tensor2.unitcell_structure + + # Get the integration points + k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) + + + # Get the phi2 in q + phi2_q = tensor2.Interpolate(q, asr = False) + + # dynamical matrix in q + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1 / mm_mat + # + d2_q = phi2_q * mm_inv_mat + + # Diagonalize the dynamical matrix in q + w2_q, pols_q = np.linalg.eigh(d2_q) + + # Check if the q point is gamma + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) + + if is_q_gamma: + w2_q[0:3]=0.0 + if not (w2_q >= 0.0).all(): + print('q= ',q, ' (2pi/A)') + print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_q=np.sqrt(w2_q) + + def compute_k(k): + # phi3 in q, k, -q - k + t1 = time.time() + phi3=tensor3.Interpolate(k,-q-k, asr = False) + t2 = time.time() + # phi2 in k + phi2_k = tensor2.Interpolate(k, asr = False) + + # phi2 in -q-k + phi2_mq_mk = tensor2.Interpolate(-q -k, asr = False) + + t3 = time.time() + + # dynamical matrices (divide by the masses) + d2_k = phi2_k * mm_inv_mat + d2_mq_mk = phi2_mq_mk * mm_inv_mat + + # Diagonalize the dynamical matrices + w2_k, pols_k = np.linalg.eigh(d2_k) + w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) + + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) + is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) + + if is_k_gamma: + w2_k[0:3]=0.0 + if not (w2_k >= 0.0).all(): + print('k= ',k, ' (2pi/A)') + print('w(k)= ',np.sign(w2_k)*np.sqrt(np.abs(w2_k))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_k=np.sqrt(w2_k) + + if is_mq_mk_gamma: + w2_mq_mk[0:3]=0.0 + if not (w2_mq_mk >= 0.0).all(): + print('-q-k= ',-q-k, ' (2pi/A)') + print('w(-q-k)= ',np.sign(w2_mq_mk)*np.sqrt(np.abs(w2_mq_mk))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_mq_mk=np.sqrt(w2_mq_mk) + + # Dividing the phi3 by the sqare root of masses + d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) + + # d3 in mode components + # d3_pols = np.einsum("abc, ai, bj, ck -> ijk", d3, pols_mq, pols_k, pols_q_mk) + d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) + d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) + d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) + + t4 = time.time() + + + nsm=smear.shape[0] + n_mod=3*structure.N_atoms + + # Fortran duty ==== + + selfnrg = np.zeros ( (n_mod,nsm ), dtype= np.complex128, order="F") + + selfnrg = thirdorder.third_order_bubble.compute_perturb_selfnrg(smear,T, + np.array([w_q,w_k,w_mq_mk]).T, + np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), + d3_pols,nsm,n_mod) + + t5 = time.time() + + if verbose: + print("Time to interpolate the third order: {} s".format(t2 - t1)) + print("Time to interpolate the second order: {} s".format(t3 - t2)) + print("Time to transform the tensors: {} s".format(t4 - t3)) + print("Time to compute the bubble: {} s".format(t5 - t4)) + + return selfnrg + + CC.Settings.SetupParallel() + + selfnrg =CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") + + # divide by the N_k factor + selfnrg /= len(k_points) # (n_mod,nsigma) + + w_q_ext=w_q[...,None] + + shift=np.divide(selfnrg.real, 2*w_q_ext, out=np.zeros_like(selfnrg.real), where=w_q_ext!=0) + hwhm=np.divide(-selfnrg.imag, 2*w_q_ext, out=np.zeros_like(selfnrg.imag), where=w_q_ext!=0) + + return w_q, shift,hwhm + + + +def get_perturb_dynamic_correction_along_path(dyn, tensor3, + k_grid, + sm1, sm0, + nsm=1, + q_path=[0.0,0.0,0.0], + q_path_file=None, + print_path = True, + T=0, + filename_shift_lw = 'v2_freq_shift_hwhm', + filename_freq_dyn = 'freq_dynamic', + d3_scale_factor=None, + tensor2= None): + + + """ + The frequency shift (with respect to the SSCHA frequency) and linewidth are computed with the perturbative + formula with respect to the SSCHA frequency. + + Parameters + ---------- + + dyn : Phonons() + The harmonic / SSCHA dynamical matrix + tensor3 : Tensor3() + The third order force constant matrix + k_grid : list(len = 3) + The integration grid on the Brillouin zone + sm0, sm1 : float + Minimum and maximum value of the smearing (cm-1) to compute the self-energy + + Optional + -------- + + nsm : integer + Number of smearings to consider + (default = 1) + T : float + The temperature + (default: 0 K) + q_path : list of triplets + Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, + where the caculation is performed + (default: [0.0,0.0,0.0]) + q_path_file : string + Name of the file where the q_path can be read. + Format: column of triples, q points in 2pi/Angstrom + If the name of the file is present, it has the + priority over the q_path value + (default: None) + print_path : logical + If True (and the path is composed of more then one q-point), + a file 'path_len.dat' is printed. + Format: column of 4 values, coordinates of + the q-point and path length (in 2pi/Angstrom) . + (default: True) + filename_shift_lw : string + filename_shift_lw_[id_smear]_[smear].dat + is the file where + len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) + are printed. + (default: "v2_freq_shit_hwhm") + filename_freq_dyn : string + filename_freq_dyn_[id_smear]_[smear].dat + is the file where + len (2pi/Angstrom), freq (cm-1) (sorted in ascending order), HWHM (cm-1) + are printed. + (default: "freq_dynamic") + d3_scale_factor : float + If present, the 3rd order FC is multiplied by this factor + (e.g. it can be used to make tests about the perturbative limit) + (default: None) + tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) + If present, this 2nd order FC overwrites the one + obtained from dyn. + (default: None) + + """ + + + + print(" ") + print(" ===========================================" ) + print(" Bubble perturbative dynamic correction " ) + print(" ===========================================" ) + print(" ") + print(" T= {:>5.1f} K".format(T)) + print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) + print(" ") + print(" Smearing values: ") + for sm in np.linspace(sm0,sm1,nsm): + print(" sm= {:>6.2f} cm-1".format(sm)) + print(" ") + print(" ===========================================" ) + print(" " ) + + if ( tensor2 == None ): + + # Prepare the tensor2 + tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) + tensor2.SetupFromPhonons(dyn) + tensor2.Center() + + # Scale the FC3 =========================================================================== + if d3_scale_factor != None : + print(" ") + print("d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) + print(" ") + tensor3.tensor=tensor3.tensor*d3_scale_factor + # ================================== q-PATH =============================================== + if q_path_file == None: + q_path=np.array(q_path) + else: + print(" ") + print(" q_path read from "+q_path_file) + print(" ") + q_path=np.loadtxt(q_path_file) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + # Get the length of the q path + x_length = np.zeros(len(q_path)) + q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) + x_length[1:] = q_tot + x_length=np.cumsum(x_length) + x_length_exp=np.expand_dims(x_length,axis=0) + # print the path q-points and length + if print_path and (q_path.shape[0] > 1) : + fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] + result=np.hstack((q_path,x_length_exp.T)) + np.savetxt('path_len.dat',result,fmt=fmt_txt) + print(" ") + print(" Path printed in path_len.dat ") + print(" ") + # ======================= Smearing ========================================== + # smearing in input is in cm-1 + # converto to Ry + # list of smearing + # + if nsm == 1 : + sm1=sm0 + smear=np.linspace(sm0,sm1,nsm)/CC.Units.RY_TO_CM + # ======================== Calculation ========================================== + n_mod=3*dyn.structure.N_atoms + shift = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear + hwhm = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear + wq = np.zeros( ( n_mod), dtype = np.float64 ) # q-point,mode + # + smear_cm = smear * CC.Units.RY_TO_CM + for iq, q in enumerate(q_path): + wq[:],shift[:,:], hwhm[:,:] = get_perturb_dynamic_selfnrg(tensor2, tensor3, + k_grid, np.array(q), + smear, T, + verbose=False ) + + # print results + wq*=CC.Units.RY_TO_CM + shift*=CC.Units.RY_TO_CM + hwhm*=CC.Units.RY_TO_CM + # + #==================== SORTING =============================== + wq_shifted=wq[...,None]+shift + + sortidx=np.argsort(wq_shifted,axis=0) + + wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) + hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) + #=============== Print Results =============================== + + # + for ism in range(nsm): + # + name="{:6.2f}".format(smear_cm[ism]).strip() + # + # v2 freq, corresponding shift & hwhm + # + filename_new=filename_shift_lw+'_'+name+'.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" if iq == 0: with open(filename_new,'w') as f: - f.write("# ------------------------------------------------------------ \n") - f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") - f.write("# ------------------------------------------------------------ \n") - #out=np.concatenate((wq_shifted_sorted, - #wq_shifted_sorted_plus, - # wq_shifted_sorted_minus)) - out=np.concatenate((wq_shifted_sorted, - hwhm_sorted)) + f.write("# --------------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), sscha freq (cm-1), freq shift (cm-1), hwhm (cm-1) \n") + f.write("# --------------------------------------------------------------------- \n") + out=np.concatenate((wq[:],shift[:,ism], + hwhm[:,ism])) f.write(fmt.format(x_length[iq],*out)) else: with open(filename_new,'a') as f: - out=np.concatenate((wq_shifted_sorted, - hwhm_sorted)) + out=np.concatenate((wq[:],shift[:,ism], + hwhm[:,ism])) f.write(fmt.format(x_length[iq],*out)) - # - # Lorentzian spectral func # - filename_new=filename_sp+'_lorentz_one_shot_'+name+'.dat' - fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" - if iq == 0: - with open(filename_new,'w') as f: - f.write("# --------------------------------------------------------------------------------------------------------- \n") - f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1) \n") - f.write("# --------------------------------------------------------------------------------------------------------- \n") - Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) - for ifreq in range(n_mod): - Lor_spectralf[:,ifreq]=Lorenz(energies_cm, - wq_shifted_sorted[ifreq], - hwhm_sorted[ifreq]+smear_id_cm[ism]) - for ie, ene in enumerate(energies_cm): - out=Lor_spectralf[ie,:] - f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) - f.write("\n") - else: - with open(filename_new,'a') as f: - Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) - for ifreq in range(n_mod): - Lor_spectralf[:,ifreq]=Lorenz(energies_cm, - wq_shifted_sorted[ifreq], - hwhm_sorted[ifreq]+smear_id_cm[ism]) - for ie, ene in enumerate(energies_cm): - out=Lor_spectralf[ie,:] - f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) - f.write("\n") - - # - wq_shifted=res_pert[:,0] - hwhm=res_pert[:,1] - - sortidx=np.argsort(wq_shifted,axis=0) - - wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) - hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) - #wq_shifted_sorted_plus= wq_shifted_sorted+hwhm_sorted - #wq_shifted_sorted_minus= wq_shifted_sorted-hwhm_sorted + name="{:6.1f}".format(smear_cm[ism]).strip() # - # freq, freq +/- hwhm + # shifted freq sorted, corresponding hwhm # - filename_new=filename_freq_dyn+'_perturb_'+name+'.dat' + filename_new=filename_freq_dyn+'_'+name+'.dat' fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" if iq == 0: with open(filename_new,'w') as f: - f.write("# ------------------------------------------------------------ \n") - f.write("# len (2pi/Angstrom), SSCHA+shift (sorted) (cm-1), HWHM (cm-1) \n") - f.write("# ------------------------------------------------------------ \n") - #out=np.concatenate((wq_shifted_sorted, - #wq_shifted_sorted_plus, - #wq_shifted_sorted_minus)) - out=np.concatenate((wq_shifted_sorted, - hwhm_sorted)) + f.write("# ----------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), sscha+shift freq (sorted) (cm-1), hwhm (cm-1) \n") + f.write("# ----------------------------------------------------------------- \n") + out=np.concatenate((wq_shifted_sorted[:,ism], + hwhm_sorted[:,ism])) f.write(fmt.format(x_length[iq],*out)) else: with open(filename_new,'a') as f: - out=np.concatenate((wq_shifted_sorted, - hwhm_sorted)) + out=np.concatenate((wq_shifted_sorted[:,ism], + hwhm_sorted[:,ism])) f.write(fmt.format(x_length[iq],*out)) - # - # Lorenztian spectral func - # - filename_new=filename_sp+'_lorentz_perturb_'+name+'.dat' - fmt="{:>10.6f}\t"+"\t{:>11.3f}"+"\t{:>11.7f}"*(n_mod+1)+"\n" - if iq == 0: - with open(filename_new,'w') as f: - f.write("# --------------------------------------------------------------------------------------------------------- \n") - f.write("# len (2pi/Angstrom), energy (cm-1), spectral function (1/cm-1), spectral function mode components (1/cm-1) \n") - f.write("# --------------------------------------------------------------------------------------------------------- \n") - Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) - for ifreq in range(n_mod): - Lor_spectralf[:,ifreq]=Lorenz(energies_cm, - wq_shifted_sorted[ifreq], - hwhm_sorted[ifreq]+smear_id_cm[ism]) - for ie, ene in enumerate(energies_cm): - out=Lor_spectralf[ie,:] - f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) - f.write("\n") - else: - with open(filename_new,'a') as f: - Lor_spectralf=np.zeros((ne,n_mod),dtype=np.float64) - for ifreq in range(n_mod): - Lor_spectralf[:,ifreq]=Lorenz(energies_cm, - wq_shifted_sorted[ifreq], - hwhm_sorted[ifreq]+smear_id_cm[ism]) - for ie, ene in enumerate(energies_cm): - out=Lor_spectralf[ie,:] - f.write(fmt.format(x_length[iq],ene,np.sum(out),*out)) - f.write("\n") - # - - - - # ===== PERTURBATIVE CORRECTION TO SSCHA FREQUENCY (SHIFT and LINEWIDTH) ===================== - -def get_perturb_dynamic_selfnrg(tensor2, tensor3, - k_grid, q, + + + print(" ") + print(" Results printed in "+filename_shift_lw+'_'+'[smear].dat') + print(" ") + print(" ") + print(" Results printed in "+filename_freq_dyn+'_'+'[smear].dat') + print(" ") + + + + # ===== ONE-SHOT & PERTURBATIVE CORRECTION TO SSCHA FREQUENCY (SHIFT and LINEWIDTH) ===================== + + +def get_os_perturb_dynamic_selfnrg(tensor2, tensor3, + k_grid, q, smear, T, verbose= False): - + structure = tensor2.unitcell_structure - - # Get the integration points + + # Get the integration points k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) - - + + # Get the phi2 in q phi2_q = tensor2.Interpolate(q, asr = False) # dynamical matrix in q - m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() mm_mat = np.sqrt(np.outer(m, m)) mm_inv_mat = 1 / mm_mat # d2_q = phi2_q * mm_inv_mat - + # Diagonalize the dynamical matrix in q w2_q, pols_q = np.linalg.eigh(d2_q) - + # Check if the q point is gamma is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) - + if is_q_gamma: w2_q[0:3]=0.0 if not (w2_q >= 0.0).all(): @@ -1672,33 +3333,33 @@ def get_perturb_dynamic_selfnrg(tensor2, tensor3, print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') print('Cannot continue with SSCHA negative frequencies') exit() - w_q=np.sqrt(w2_q) - + w_q=np.sqrt(w2_q) + def compute_k(k): # phi3 in q, k, -q - k - t1 = time.time() + t1 = time.time() phi3=tensor3.Interpolate(k,-q-k, asr = False) t2 = time.time() # phi2 in k - phi2_k = tensor2.Interpolate(k, asr = False) + phi2_k = tensor2.Interpolate(k, asr = False) # phi2 in -q-k phi2_mq_mk = tensor2.Interpolate(-q -k, asr = False) t3 = time.time() - + # dynamical matrices (divide by the masses) d2_k = phi2_k * mm_inv_mat d2_mq_mk = phi2_mq_mk * mm_inv_mat - + # Diagonalize the dynamical matrices w2_k, pols_k = np.linalg.eigh(d2_k) w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) - - + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) - + if is_k_gamma: w2_k[0:3]=0.0 if not (w2_k >= 0.0).all(): @@ -1716,7 +3377,7 @@ def compute_k(k): print('Cannot continue with SSCHA negative frequencies') exit() w_mq_mk=np.sqrt(w2_mq_mk) - + # Dividing the phi3 by the sqare root of masses d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) @@ -1725,146 +3386,156 @@ def compute_k(k): d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) - + t4 = time.time() - - + + nsm=smear.shape[0] - n_mod=3*structure.N_atoms + n_mod=3*structure.N_atoms + # Fortran duty ==== - + + selfnrg = np.zeros ( (n_mod,nsm ), dtype= np.complex128, order="F") + selfnrg = thirdorder.third_order_bubble.compute_perturb_selfnrg(smear,T, np.array([w_q,w_k,w_mq_mk]).T, np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), - d3_pols,nsm,n_mod) + d3_pols,nsm,n_mod) t5 = time.time() - + if verbose: print("Time to interpolate the third order: {} s".format(t2 - t1)) print("Time to interpolate the second order: {} s".format(t3 - t2)) print("Time to transform the tensors: {} s".format(t4 - t3)) print("Time to compute the bubble: {} s".format(t5 - t4)) - - return selfnrg - + + return selfnrg + CC.Settings.SetupParallel() selfnrg =CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") # divide by the N_k factor selfnrg /= len(k_points) # (n_mod,nsigma) - + w_q_ext=w_q[...,None] - - shift=np.divide(selfnrg.real, 2*w_q_ext, out=np.zeros_like(selfnrg.real), where=w_q_ext!=0) - hwhm=np.divide(-selfnrg.imag, 2*w_q_ext, out=np.zeros_like(selfnrg.imag), where=w_q_ext!=0) + w2_q_ext=w2_q[...,None] - return w_q, shift,hwhm - - - -def get_perturb_dynamic_correction_along_path(dyn, tensor3, - k_grid, + z_os=np.sqrt(selfnrg + w2_q_ext) # (A20) PHYSICAL REVIEW B 97, 214101 (2018) + shift_os=z_os.real-w_q_ext + hwhm_os=-z_os.imag + + z_pert=np.divide(selfnrg, 2*w_q_ext, out=np.zeros_like(selfnrg), where=w_q_ext!=0) # -w_q_ext + shift_pert=z_pert.real + hwhm_pert=-z_pert.imag + + return w_q, shift_pert, hwhm_pert, shift_os, hwhm_os + + + +def get_os_perturb_dynamic_correction_along_path(dyn, tensor3, + k_grid, sm1, sm0, nsm=1, q_path=[0.0,0.0,0.0], q_path_file=None, print_path = True, - T=0, - filename_shift_lw = 'v2_freq_shift_hwhm', - filename_freq_dyn = 'freq_dynamic', + T=0, + filename_shift_lw = 'v2_freq_shift_hwhm', + filename_freq_dyn = 'freq_dynamic', d3_scale_factor=None, - tensor2= None): + tensor2= None): """ - The frequency shift (with respect to the SSCHA frequency) and linewidth are computed with the perturbative - formula with respect to the SSCHA frequency. - + The frequency shift (with respect to the SSCHA frequency) and linewidth are computed with + the one-shot and the perturbative formula with respect to the SSCHA frequency. + Parameters ---------- - + dyn : Phonons() The harmonic / SSCHA dynamical matrix tensor3 : Tensor3() The third order force constant matrix k_grid : list(len = 3) - The integration grid on the Brillouin zone - sm0, sm1 : float - Minimum and maximum value of the smearing (cm-1) to compute the self-energy + The integration grid on the Brillouin zone + sm0, sm1 : float + Minimum and maximum value of the smearing (cm-1) to compute the self-energy Optional -------- nsm : integer - Number of smearings to consider + Number of smearings to consider (default = 1) T : float - The temperature + The temperature (default: 0 K) q_path : list of triplets Path of the q-points of the Brillouin Zone, in 2pi/Anstrom units, - where the caculation is performed - (defualt: [0.0,0.0,0.0]) + where the caculation is performed + (default: [0.0,0.0,0.0]) q_path_file : string - Name of the file where the q_path can be read. + Name of the file where the q_path can be read. Format: column of triples, q points in 2pi/Angstrom If the name of the file is present, it has the - priority over the q_path value + priority over the q_path value (default: None) print_path : logical - If True (and the path is composed of more then one q-point), + If True (and the path is composed of more then one q-point), a file 'path_len.dat' is printed. - Format: column of 4 values, coordinates of + Format: column of 4 values, coordinates of the q-point and path length (in 2pi/Angstrom) . - (default: True) - filename_shift_lw : string + (default: True) + filename_shift_lw : string filename_shift_lw_[id_smear]_[smear].dat is the file where len (2pi/Angstrom), SSCHA freq (cm-1), shift (cm-1) , HWHM (cm-1) are printed. (default: "v2_freq_shit_hwhm") - filename_freq_dyn : string + filename_freq_dyn : string filename_freq_dyn_[id_smear]_[smear].dat is the file where len (2pi/Angstrom), freq (cm-1) (sorted in ascending order), HWHM (cm-1) - are printed. - (default: "freq_dynamic") - d3_scale_factor : float + are printed. + (default: "freq_dynamic") + d3_scale_factor : float If present, the 3rd order FC is multiplied by this factor (e.g. it can be used to make tests about the perturbative limit) (default: None) tensor2 : ndarray( size = (3*nat, 3*nat), dtype = np.float) - If present, this 2nd order FC overwrites the one + If present, this 2nd order FC overwrites the one obtained from dyn. - (default: None) - + (default: None) + """ - print(" ") - print(" ===========================================" ) - print(" Bubble perturbative dynamic correction " ) + print(" ") + print(" ===========================================" ) + print(" Bubble perturbative dynamic correction " ) print(" ===========================================" ) - print(" ") + print(" ") print(" T= {:>5.1f} K".format(T)) print(" k grid= {} x {} x {} ".format(*tuple(k_grid))) print(" ") print(" Smearing values: ") + print(" ") for sm in np.linspace(sm0,sm1,nsm): - print(" sm= {:>6.2f} cm-1".format(sm)) - print(" ") - print(" ===========================================" ) - print(" " ) + print(" sm= {:>6.2f} cm-1".format(sm)) + print(" ") + print(" ===========================================" ) + print(" " ) if ( tensor2 == None ): - + # Prepare the tensor2 tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) tensor2.SetupFromPhonons(dyn) - tensor2.Center() + tensor2.Center() # Scale the FC3 =========================================================================== if d3_scale_factor != None : @@ -1872,64 +3543,74 @@ def get_perturb_dynamic_correction_along_path(dyn, tensor3, print("d3 scaling : d3 -> d3 x {:>7.3f}".format(d3_scale_factor)) print(" ") tensor3.tensor=tensor3.tensor*d3_scale_factor - # ================================== q-PATH =============================================== + # ================================== q-PATH =============================================== if q_path_file == None: q_path=np.array(q_path) else: print(" ") print(" q_path read from "+q_path_file) - print(" ") + print(" ") q_path=np.loadtxt(q_path_file) - if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) + if len(q_path.shape) == 1 : q_path=np.expand_dims(q_path,axis=0) # Get the length of the q path - x_length = np.zeros(len(q_path)) + x_length = np.zeros(len(q_path)) q_tot = np.sqrt(np.sum(np.diff(np.array(q_path), axis = 0)**2, axis = 1)) x_length[1:] = q_tot x_length=np.cumsum(x_length) - x_length_exp=np.expand_dims(x_length,axis=0) + x_length_exp=np.expand_dims(x_length,axis=0) # print the path q-points and length if print_path and (q_path.shape[0] > 1) : fmt_txt=['%11.7f\t','%11.7f\t','%11.7f\t\t','%10.6f\t'] - result=np.hstack((q_path,x_length_exp.T)) + result=np.hstack((q_path,x_length_exp.T)) np.savetxt('path_len.dat',result,fmt=fmt_txt) print(" ") print(" Path printed in path_len.dat ") - print(" ") - # ======================= Smearing ========================================== + print(" ") + # ======================= Smearing ========================================== # smearing in input is in cm-1 # converto to Ry # list of smearing # - if nsm == 1 : + if nsm == 1 : sm1=sm0 smear=np.linspace(sm0,sm1,nsm)/CC.Units.RY_TO_CM - # ======================== Calculation ========================================== + # ======================== Calculation ========================================== n_mod=3*dyn.structure.N_atoms - shift = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear - hwhm = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear - wq = np.zeros( ( n_mod), dtype = np.float64 ) # q-point,mode + shift_pert = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear + hwhm_pert = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear + shift_os = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear + hwhm_os = np.zeros( ( n_mod, nsm), dtype = np.float64 ) # q-point,mode,smear + wq = np.zeros( ( n_mod), dtype = np.float64 ) # q-point,mode # smear_cm = smear * CC.Units.RY_TO_CM - for iq, q in enumerate(q_path): - wq[:],shift[:,:], hwhm[:,:] = get_perturb_dynamic_selfnrg(tensor2, tensor3, - k_grid, np.array(q), - smear, T, - verbose=False ) - + + for iq, q in enumerate(q_path): + wq[:],shift_pert[:,:], hwhm_pert[:,:],shift_os[:,:], hwhm_os[:,:] = get_os_perturb_dynamic_selfnrg(tensor2, + tensor3, + k_grid, + np.array(q), + smear, T, + verbose=False ) + # print results wq*=CC.Units.RY_TO_CM - shift*=CC.Units.RY_TO_CM - hwhm*=CC.Units.RY_TO_CM + shift_os*=CC.Units.RY_TO_CM + hwhm_os*=CC.Units.RY_TO_CM + shift_pert*=CC.Units.RY_TO_CM + hwhm_pert*=CC.Units.RY_TO_CM # #==================== SORTING =============================== - wq_shifted=wq[...,None]+shift - - sortidx=np.argsort(wq_shifted,axis=0) - - wq_shifted_sorted=np.take_along_axis(wq_shifted, sortidx, 0) - hwhm_sorted=np.take_along_axis(hwhm, sortidx, 0) - #=============== Print Results =============================== - + wq_os_shifted=wq[...,None]+shift_os + sortidx_os=np.argsort(wq_os_shifted,axis=0) + wq_os_shifted_sorted=np.take_along_axis(wq_os_shifted, sortidx_os, 0) + hwhm_os_sorted=np.take_along_axis(hwhm_os, sortidx_os, 0) + + wq_pert_shifted=wq[...,None]+shift_pert + sortidx_pert=np.argsort(wq_pert_shifted,axis=0) + wq_pert_shifted_sorted=np.take_along_axis(wq_pert_shifted, sortidx_pert, 0) + hwhm_pert_sorted=np.take_along_axis(hwhm_pert, sortidx_pert, 0) + #=============== Print Results =============================== + # one shot # for ism in range(nsm): # @@ -1937,48 +3618,269 @@ def get_perturb_dynamic_correction_along_path(dyn, tensor3, # # v2 freq, corresponding shift & hwhm # - filename_new=filename_shift_lw+'_'+name+'.dat' + filename_new=filename_shift_lw+'_'+name+'.os.dat' fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" if iq == 0: with open(filename_new,'w') as f: f.write("# --------------------------------------------------------------------- \n") f.write("# len (2pi/Angstrom), sscha freq (cm-1), freq shift (cm-1), hwhm (cm-1) \n") - f.write("# --------------------------------------------------------------------- \n") - out=np.concatenate((wq[:],shift[:,ism], - hwhm[:,ism])) + f.write("# --------------------------------------------------------------------- \n") + out=np.concatenate((wq[:],shift_os[:,ism], + hwhm_os[:,ism])) f.write(fmt.format(x_length[iq],*out)) else: with open(filename_new,'a') as f: - out=np.concatenate((wq[:],shift[:,ism], - hwhm[:,ism])) + out=np.concatenate((wq[:],shift_os[:,ism], + hwhm_os[:,ism])) f.write(fmt.format(x_length[iq],*out)) # name="{:6.1f}".format(smear_cm[ism]).strip() # - # shifted freq sorted, corresponding hwhm + # shifted freq sorted, corresponding hwhm # - filename_new=filename_freq_dyn+'_'+name+'.dat' + filename_new=filename_freq_dyn+'_'+name+'.os.dat' fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" if iq == 0: with open(filename_new,'w') as f: f.write("# ----------------------------------------------------------------- \n") - f.write("# len (2pi/Angstrom), sscha+shift freq (sorted) (cm-1), hwhm (cm-1) \n") + f.write("# len (2pi/Angstrom), sscha+shift freq (sorted) (cm-1), hwhm (cm-1) \n") f.write("# ----------------------------------------------------------------- \n") - out=np.concatenate((wq_shifted_sorted[:,ism], - hwhm_sorted[:,ism])) + out=np.concatenate((wq_os_shifted_sorted[:,ism], + hwhm_os_sorted[:,ism])) f.write(fmt.format(x_length[iq],*out)) else: with open(filename_new,'a') as f: - out=np.concatenate((wq_shifted_sorted[:,ism], - hwhm_sorted[:,ism])) + out=np.concatenate((wq_os_shifted_sorted[:,ism], + hwhm_os_sorted[:,ism])) + f.write(fmt.format(x_length[iq],*out)) + # + # perturb + # + for ism in range(nsm): + # + name="{:6.2f}".format(smear_cm[ism]).strip() + # + # v2 freq, corresponding shift & hwhm + # + filename_new=filename_shift_lw+'_'+name+'.pert.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(3*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# --------------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), sscha freq (cm-1), freq shift (cm-1), hwhm (cm-1) \n") + f.write("# --------------------------------------------------------------------- \n") + out=np.concatenate((wq[:],shift_pert[:,ism], + hwhm_pert[:,ism])) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq[:],shift_pert[:,ism], + hwhm_pert[:,ism])) + f.write(fmt.format(x_length[iq],*out)) + # + name="{:6.1f}".format(smear_cm[ism]).strip() + # + # shifted freq sorted, corresponding hwhm + # + filename_new=filename_freq_dyn+'_'+name+'.pert.dat' + fmt="{:>10.6f}\t"+"\t{:>11.7f}"*(2*n_mod)+"\n" + if iq == 0: + with open(filename_new,'w') as f: + f.write("# ----------------------------------------------------------------- \n") + f.write("# len (2pi/Angstrom), sscha+shift freq (sorted) (cm-1), hwhm (cm-1) \n") + f.write("# ----------------------------------------------------------------- \n") + out=np.concatenate((wq_pert_shifted_sorted[:,ism], + hwhm_pert_sorted[:,ism])) + f.write(fmt.format(x_length[iq],*out)) + else: + with open(filename_new,'a') as f: + out=np.concatenate((wq_pert_shifted_sorted[:,ism], + hwhm_pert_sorted[:,ism])) f.write(fmt.format(x_length[iq],*out)) - + + + print(" ") - print(" Results printed in "+filename_shift_lw+'_'+'[smear].dat') - print(" ") + print(" Results printed in "+filename_shift_lw+'_'+'[smear].os/pert.dat') print(" ") - print(" Results printed in "+filename_freq_dyn+'_'+'[smear].dat') - print(" ") + print(" ") + print(" Results printed in "+filename_freq_dyn+'_'+'[smear].os/pert.dat') + print(" ") + + +#------------------------------------------------------------------------------- +def get_dielectric_function(dyn, k_grid, T, e0 ,e1, de, ie, ismear + , sm0, sm0_id + , diag_approx=False, nsm=1, static_limit=False): #skeleton function for TESTING... +# ( tensor3,omega,N,nu,q, d_bubble_cart, ener, epsilon_inf,atom_a, atom_b, ne,frequency,dielectric_tensor,tensor2,effective_charges,energies,spectralf,N,Big_omega) + + """ + Input data: + epsilon_inf = dielctric constant of vacuum ---> Phonon.Phonon.dielectric_tensor(3x3) + a = atom a -> M(a) mass of atom a ---> tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn_gemnerate_supwercell(dyn.GetSupercell()),dyn_GetSupercell()); tensor2.SetupFromPhonons(dyn); tensor2.center() ---> structure = tensor2.unitcell_structure ---> structure.get_masses_array() + b = atom b -> Z(b) atomic number of atom b + q : ndarray(size = 3) = The q point at which compute the bubble. <-- this id Gamma so (0,0,0) or np.zeros(3) + tensor3 : Tensor3() = The third order force constant matrix + k_grid : list(len = 3) = The integration grid on the Brillouin zone + T : Temperature + ener : energies + nsm : integer = Number of smearings to consider (default = 1) + e1, de ,e0: float = The list of energies considered (cm-1), from e0 to e1, with interval de + sm0_id, sm1_id : float = Minimum and maximum value of the smearing (cm-1) for the term of the Green function proportional to the identity + ie, ismear = index of energies and smear, not needed? for ie in range(np.arange(e0,e1,de).shape[0]); for ismear in range(np.arange(sm0_id,sm1_id).shape[0]) + --------- + Z() = Born effective charge ---> Phonon.Phonon.effective_charges() + M() = Atomic masses + e() = polarization vector + omega_nu = resonant frequency + Big_omega = Unit cell Volume + Output: + epsilon = Dielectric function (SI) + """ + #electric_charge = 4.803e-10 #Fr (CGS) + electric_charge = 1.602176462e-19 #C (SI) + q = np.zeros(3) + twopi = 2*np.pi + # Prepare the tensor2 and obtain masses + tensor2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) + tensor2.SetupFromPhonons(dyn) + tensor2.Center() + + tensor3 = CC.ForceTensor.Tensor3(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) + structure = tensor2.unitcell_structure + alat=tensor2.unitcell_structure.unit_cell + # a,b,c volume calculation + # d = np.cross(b,c) + # proj_a = (np.dot(a,d)/np.sqrt(sum(d**2))**2)*d + # Volume = np.linalg.norm(a)*np.linalg.norm(d) + Big_omega = np.abs(np.linalg.det(alat)) # The unit cell volume is the determinant of the matrix defined by the unit cell vectors + M =structure.get_masses_array() + #prepare the dielctric tensor of vacuum and effective charges + Fonon = Phonons.Phonons(dyn.structure) #('harmonic_dyn', NQIRR) + epsilon_inf = Fonon.dielectric_tensor #(3,3) + Z = Fonon.effective_charges #(Natoms, pol electric field, atomic coords) = (nat, 3, 3) + # ======================= Energy & Smearing ========================================== + # energy in input is in cm-1 + # smearing in input is in cm-1 + # converto to Ry + + # list of energies + energies=np.arange(e0,e1,de)/CC.Units.RY_TO_CM + ne=energies.shape[0] + # list of smearing + if nsm == 1 : + sm1=sm0 + sm1_id=sm0_id + smear=np.linspace(sm0,sm1,nsm)/CC.Units.RY_TO_CM + smear_id=np.linspace(sm0_id,sm1_id,nsm)/CC.Units.RY_TO_CM + # ========================================================================================== + #---------------------------------------------------------------- + def compute_k(k): + # phi3 in q, k, -q - k + t1 = time.time() + phi3=tensor3.Interpolate(k,-q-k, asr = False) + t2 = time.time() + # phi2 in k + phi2_k = tensor2.Interpolate(k, asr = False) + + # phi2 in -q-k + phi2_mq_mk = tensor2.Interpolate(-q -k, asr = False) + + t3 = time.time() + + # dynamical matrices (divide by the masses) + d2_k = phi2_k * mm_inv_mat + d2_mq_mk = phi2_mq_mk * mm_inv_mat + + # Diagonalize the dynamical matrices + w2_k, pols_k = np.linalg.eigh(d2_k) + w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) + + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) + is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) + + if is_k_gamma: + w2_k[0:3]=0.0 + if not (w2_k >= 0.0).all(): + print('k= ',k, ' (2pi/A)') + print('w(k)= ',np.sign(w2_k)*np.sqrt(np.abs(w2_k))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_k=np.sqrt(w2_k) + + if is_mq_mk_gamma: + w2_mq_mk[0:3]=0.0 + if not (w2_mq_mk >= 0.0).all(): + print('-q-k= ',-q-k, ' (2pi/A)') + print('w(-q-k)= ',np.sign(w2_mq_mk)*np.sqrt(np.abs(w2_mq_mk))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_mq_mk=np.sqrt(w2_mq_mk) + w_q=np.sqrt(w2_q) + # Dividing the phi3 by the sqare root of masses + d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) + + # d3 in mode components + #d3_pols = np.einsum("abc, ai, bj, ck -> ijk", d3, pols_mq, pols_k, pols_q_mk) + d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) + d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) + d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) + + t4 = time.time() + + # Fortran duty ==== + # Check if the q point is gamma + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) + tmp_bubble = thirdorder.third_order_bubble.compute_dynamic_bubble(energies,smear,static_limit,T, + np.array([w_q,w_k,w_mq_mk]).T, + np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), + d3_pols,diag_approx,ne,nsm,n_mod=3*structure.N_atoms) + + t5 = time.time() + + return tmp_bubble + CC.Settings.SetupParallel() + + # Get the integration points + k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) + # dynamical matrix in q + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1 / mm_mat + # Get the phi2 in q + phi2_q = tensor2.Interpolate(q, asr = False) + d2_q = phi2_q * mm_inv_mat + # Diagonalize the dynamical matrix in q + w2_q, pols_q = np.linalg.eigh(d2_q) + d_bubble_mod = CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") + # divide by the N_k factor + d_bubble_mod /= len(k_points) # (ne,nsmear,3nat,3nat) + # the self-energy bubble in cartesian coord, divided by the sqare root of masses + d_bubble_cart = np.einsum("pqab, ia, jb -> pqij", d_bubble_mod, pols_q, np.conj(pols_q)) + #---------------------------------------------------------------- + epsilon = np.zeros((ne,3,3), dtype = np.double) #np.zeros((3,3)) + response1 = -(dyn.structure.N_atoms/Big_omega) * electric_charge**2 + response2 = np.zeros((ne,3,3), dtype = np.double) #init the response2 value + response_function = np.zeros((ne,3,3), dtype = np.double) #init the response_function value + temp = np.zeros((ne,3,3), dtype = np.double) + for ie in range(ne): #<-- The dispersion function is now in energies instead of frequencies. + for dielectric_read in range(3): + for a in range(dyn.structure.N_atoms): + for b in range(dyn.structure.N_atoms): + # for i in range(3): + # for j in range(3): + #temp = ((Z[a,:,:]*Z[b,:,:])/np.sqrt(M[a]*M[b]))*G(a,b,omega,nu,mu) #<-- Usar 'd_bubble_cart' => G(n,m)=-d_bubble_cart(ie,ismear,a,b) + # temp = ((Z[a,i,j]*Z[b,i,j])/np.sqrt(M[a]*M[b]))*(2*d_bubble_cart(ie,ismear,a,b)*ener(ie)/twopi) #<-- Hay que hacer el cálculo en Gamma + temp[ie,ismear,dielectric_read,:] = ((Z[a,dielectric_read,:]*Z[b,dielectric_read,:])/np.sqrt(M[a]*M[b]))*(2*d_bubble_cart(ie,ismear,a,b)*energies(ie)/twopi) #<-- Hay que hacer el cálculo en Gamma + response2 += temp + response_function = response1*response2 + + # epsilon[dielectric_read,:]=epsilon_inf[dielectric_read,:]+4*np.pi*response_function[dielectric_read,:] #<-- epsilon(ne,nsmear,3,3) ?? + epsilon=epsilon_inf+4*np.pi*response_function #<-- epsilon(ne,nsmear,3,3) ; epsilon_inf(3,3)?? + + refractive_index = np.sqrt(epsilon) #Cauchy Dispersion formula '**If mu=1** then n=sqrt(epsilon)' + return epsilon #, refractive_index diff --git a/cellconstructor/Structure.py b/cellconstructor/Structure.py index 6ee8663a..bf2f7340 100644 --- a/cellconstructor/Structure.py +++ b/cellconstructor/Structure.py @@ -33,7 +33,7 @@ import symph import warnings - +import difflib @@ -343,6 +343,18 @@ def read_scf(self, filename, alat=1, read_string = False, read_espresso = False) read_atoms = True if read_espresso: read_atoms = False + + # Get the alat from the input file + espresso_dict = Methods.read_namelist(lines) + if "system" in espresso_dict: + if "alat" in espresso_dict["system"]: + alat = espresso_dict["system"]["alat"]*BOHR_TO_ANGSTROM + elif "celldm(1)" in espresso_dict["system"]: + alat = espresso_dict["system"]["celldm(1)"]*BOHR_TO_ANGSTROM + + if "ibrav" in espresso_dict["system"]: + assert espresso_dict["system"]["ibrav"] == 0, "ibrav != 0 not supported yet" + cell_present = False read_crystal = False @@ -983,7 +995,8 @@ def get_equivalent_atoms(self, target_structure, return_distances = False, debug #print "Max distance:", np.max(effective_distances) - assert all(eq_atm == equiv_atoms) + assert all(np.array(eq_atm) == np.array(equiv_atoms)) + eq_atm = equiv_atoms if return_distances: return equiv_atoms, effective_distances diff --git a/cellconstructor/ThermalConductivity.py b/cellconstructor/ThermalConductivity.py new file mode 100644 index 00000000..280aa0e3 --- /dev/null +++ b/cellconstructor/ThermalConductivity.py @@ -0,0 +1,4052 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- + +from __future__ import print_function +from __future__ import division + +import numpy as np +import os, sys +import scipy, scipy.optimize +from scipy import integrate + +# Import the Fortran Code +import symph +import thirdorder +import itertools +import thermal_conductivity + +import cellconstructor as CC +import cellconstructor.Phonons as Phonons +import cellconstructor.Methods as Methods +import cellconstructor.symmetries as symmetries +import cellconstructor.Spectral +from cellconstructor.Units import A_TO_BOHR, BOHR_TO_ANGSTROM, RY_TO_CM, ELECTRON_MASS_UMA, MASS_RY_TO_UMA, HBAR, K_B, RY_TO_EV +import spglib +from scipy import stats +import warnings + +import time + +__SEEKPATH__ = False +try: + import seekpath + __SEEKPATH__ = True +except: + __SEEKPATH__ = False + +try: + from mpi4py import MPI + __MPI__ = True +except: + __MPI__ = False + +try: + import spglib + __SPGLIB__ = True +except: + __SPGLIB__ = False + +__EPSILON__ = 1e-5 +__EPSILON_W__ = 3e-9 +HBAR_JS = 1.054571817e-34 +HPLANCK = HBAR_JS*2.0*np.pi +RY_TO_J = 2.1798741e-18 +HBAR_RY = HBAR_JS/RY_TO_J +AU = 1.66053906660e-27 +EV_TO_J = 1.602176634e-19 +RY_TO_THZ = RY_TO_CM/0.0299792458 +SSCHA_TO_THZ = np.sqrt(RY_TO_J/AU/MASS_RY_TO_UMA)/BOHR_TO_ANGSTROM/100.0/2.0/np.pi +SSCHA_TO_MS = np.sqrt(RY_TO_J/AU/MASS_RY_TO_UMA)/BOHR_TO_ANGSTROM +KB = 1.380649e-23 +STR_FMT = '<15' + +# Abundance of isotopes in nature taken from https://www.chem.ualberta.ca/~massspec/atomic_mass_abund.pdf +natural_isotopes = {\ + 'H' :[[0.9999, 1.0078], [0.0001, 2.0141]],\ + 'He':[[1.0000, 4.0026]],\ + 'Li':[[0.0759, 6.0151], [0.9241, 7.0160]],\ + 'Be':[[1.0000, 9.0122]],\ + 'B' :[[0.1990, 10.0129], [0.8010, 11.0093]],\ + 'C' :[[0.9893, 12.0000], [0.0107, 13.0033]],\ + 'N' :[[0.9963, 14.0030], [0.0037, 15.0001]],\ + 'O' :[[0.9976, 15.9949], [0.0003, 16.9991], [0.0021, 17.9991]],\ + 'F' :[[1.0000, 18.9984]],\ + 'Ne':[[0.9048, 19.9924], [0.0027, 20.9938], [0.0925, 21.9913]],\ + 'Na':[[1.0000, 22.9898]],\ + 'Mg':[[0.7899, 23.9850], [0.1000, 24.9858], [0.1101, 25.9825]],\ + 'Al':[[1.0000, 26.9815]],\ + 'Si':[[0.9223, 27.9769], [0.0468, 28.9764], [0.0309, 29.9737]],\ + 'P' :[[1.0000, 30.9737]],\ + 'S' :[[0.9493, 31.9720], [0.0076, 32.9714], [0.0429, 33.9679], [0.0002, 35.9671]],\ + 'Cl':[[0.7578, 34.9688], [0.2422, 36.9659]],\ + 'Ar':[[0.0034, 35.9675], [0.0006, 37.9627], [0.9960, 39.9624]],\ + 'K' :[[0.9326, 38.9637], [0.0001, 39.9640], [0.0672, 40.9618]],\ + 'Ca':[[0.9694, 39.9626], [0.0065, 41.9586], [0.0209, 43.9555], [0.0001, 42.9588], [0.0001, 47.9525]],\ + 'Sc':[[1.0000, 44.9559]],\ + 'Ti':[[0.0825, 45.9526], [0.0744, 46.9518], [0.7372, 47.9479], [0.0541, 48.9479], [0.0518, 49.9448]],\ + 'Va':[[0.0025, 49.9472], [0.9975, 50.9440]],\ + 'Cr':[[0.0435, 49.9460], [0.8379, 51.9405], [0.0950, 52.9406], [0.0236, 53.9389]],\ + 'Mn':[[1.0000, 54.9380]],\ + 'Fe':[[0.0585, 53.9396], [0.9175, 55.9349], [0.0212, 56.9354], [0.0028, 57.9332]],\ + 'Co':[[1.0000, 58.9332]],\ + 'Ni':[[0.6808, 57.9353], [0.2622, 59.9308], [0.0114, 60.9311], [0.0363, 61.9283], [0.0093, 63.9279]],\ + 'Cu':[[0.6917, 62.9296], [0.3083, 64.9278]],\ + 'Zn':[[0.4863, 63.9291], [0.2790, 65.9260], [0.0410, 66.9271], [0.1875, 67.9248], [0.0062, 69.9253]],\ + 'Ga':[[0.6011, 68.9256], [0.3989, 70.9247]],\ + 'Ge':[[0.2084, 69.9242], [0.2754, 71.9220], [0.0773, 72.9234], [0.3628, 73.9211], [0.0761, 75.9214]],\ + 'As':[[1.0000, 74.9216]],\ + 'Se':[[0.0089, 73.9224], [0.0937, 75.9192], [0.0763, 76.9199], [0.2377, 77.9173], [0.4961, 79.9165], [0.0873, 81.9167]],\ + 'Br':[[0.5069, 78.9183], [0.4931, 80.9163]],\ + 'Kr':[[0.0035, 77.9204], [0.0228, 79.9164], [0.1158, 81.9135], [0.1149, 82.9141], [0.5700, 83.9115], [0.1730, 85.9106]],\ + 'Rb':[[0.7217, 84.9118], [0.2783, 86.9092]],\ + 'Sr':[[0.0056, 83.9134], [0.0986, 85.9093], [0.0700, 86.9089], [0.8258, 87.9056]],\ + 'Y' :[[1.0000, 88.9058]],\ + 'Zr':[[0.5145, 89.9047], [0.1122, 90.9056], [0.1715, 91.9050], [0.1738, 93.9063], [0.0280, 95.9083]],\ + 'Nb':[[1.0000, 92.9064]],\ + 'Mo':[[0.1484, 91.9068], [0.0925, 93.9050], [0.1592, 94.9058], [0.1668, 95.9046], [0.0955, 96.9060], [0.2413, 97.9054], [0.0963, 99.9075]],\ + 'Tc':[[1.0000, 97.9072]],\ + 'Ru':[[0.0554, 95.9076], [0.0187, 97.9053], [0.1276, 98.9059], [0.1260, 99.9042], [0.1706, 100.9056], [0.3155, 101.9043], [0.1862, 103.9054]],\ + 'Rh':[[1.0000, 102.9055]],\ + 'Pd':[[0.0102, 101.9056], [0.1114, 103.9040], [0.2233, 104.9051], [0.2733, 105.9035], [0.2646, 107.9040], [0.1172, 109.9052]],\ + 'Ag':[[0.5184, 106.9051], [0.4816, 108.9048]],\ + 'Cd':[[0.0125, 105.9066], [0.0089, 107.9042], [0.1249, 109.9030], [0.1280, 110.9042], [0.2413, 111.9028], [0.1222, 112.9044], [0.2873, 113.9033], [0.0749, 115.9048]],\ + 'In':[[0.0429, 112.9041], [0.9571, 114.9039]],\ + 'Sn':[[0.0097, 111.9048], [0.0066, 113.9028], [0.0034, 114.9033], [0.1454, 115.9017], [0.0768, 116.9029], [0.2422, 117.9016], [0.0859, 118.9033], [0.3258, 119.9022], [0.0463, 121.9034], [0.0579, 123.9053]],\ + 'Sb':[[0.5721, 120.9038], [0.4279, 122.9042]],\ + 'Te':[[0.0009, 119.9040], [0.0255, 121.9030], [0.0089, 122.9042], [0.0474, 123.9028], [0.0707, 124.9044], [0.1884, 125.9033], [0.3174, 127.9045], [0.3408, 129.9062]],\ + 'I' :[[1.0000, 126.9045]],\ + 'Xe':[[0.0009,123.905896], [0.0009,125.904269], [0.0192, 127.903530], [0.2644,128.904779], [0.0408,129.903508], [0.2118,130.905082], [0.2689,131.904154], [0.1044,133.905395], [0.0887,135.907220]],\ + 'Cs':[[1.0000,132.905447]],\ + 'Ba':[[0.00106,129.906310], [0.00101,131.905056], [0.02417,133.904503], [0.06592,134.905683], [0.07854,135.904570], [0.11232,136.905821], [0.71698,137.905241]],\ + 'La':[[0.00090,137.907107], [0.99910,138.906348]],\ + 'Ce':[[0.00185,135.907144], [0.00251,137.905986], [0.88450,139.905434], [0.11114,141.909240]],\ + 'Pr':[[1.0000,140.907648]],\ + 'Nd':[[0.272,141.907719], [0.122,142.909810], [0.238,143.910083], [0.083,144.912569], [0.172,145.913112], [0.057,147.916889], [0.056,149.920887]],\ + 'Pm':[[1.000,144.912744]],\ + 'Sm':[[0.0307,143.911995], [0.1499,146.914893], [0.1124,147.914818], [0.1382,148.917180], [0.0738,149.917271], [0.2675,151.919728], [0.2275,153.922205]],\ + 'Eu':[[0.4781,150.919846], [0.5219,152.921226]],\ + 'Gd':[[0.0020,151.919788], [0.0218,153.920862], [0.1480,154.922619], [0.2047,155.922120], [0.1565,156.923957], [0.2484,157.924101], [0.2186,159.927051]],\ + 'Tb':[[1.0000,158.925343]],\ + 'Dy':[[0.0006,155.924278], [0.0010,157.924405], [0.0234,159.925194], [0.1891,160.926930], [0.2551,161.926795], [0.2490,162.928728], [0.2818,163.929171]],\ + 'Ho':[[1.0000,164.930319]],\ + 'Er':[[0.0014,161.928775], [0.0161,163.929197], [0.3361,165.930290], [0.2293,166.932045], [0.2678,167.932368], [0.1493,169.935460]],\ + 'Tm':[[1.0000,168.934211]],\ + 'Yb':[[0.0013,167.933894], [0.0304,169.934759], [0.1428,170.936322], [0.2183,171.936378], [0.1613,172.938207], [0.3183,173.938858], [0.1276,175.942568]],\ + 'Lu':[[0.9741,174.940768], [0.0259,175.942682]],\ + 'Hf':[[0.0016,173.940040], [0.0526,175.941402], [0.1860,176.943220], [0.2728,177.943698], [0.1362,178.945815], [0.3508,179.946549]],\ + 'Ta':[[0.00012,179.947466], [0.99988,180.947996]],\ + 'W' :[[0.0012,179.946706], [0.2650,181.948206], [0.1431,182.950224], [0.3064,183.950933], [0.2843,185.954362]],\ + 'Re':[[0.3740,184.952956], [0.6260,186.955751]],\ + 'Os':[[0.0002,183.952491], [0.0159,185.953838], [0.0196,186.955748], [0.1324,187.955836], [0.1615,188.958145], [0.2626,189.958445], [0.4078,191.961479]],\ + 'Ir':[[0.373,190.960591], [0.627,192.962924]],\ + 'Pt':[[0.00014,189.959930], [0.00782,191.961035], [0.32967,193.962664], [0.33832,194.964774], [0.25242,195.964935], [0.07163,197.967876]],\ + 'Au':[[1.0000,196.966552]],\ + 'Hg':[[0.0015,195.965815], [0.0997,197.966752], [0.1687,198.968262], [0.2310,199.968309], [0.1318,200.970285], [0.2986,201.970626], [0.0687,203.973476]],\ + 'Tl':[[0.29524,202.972329], [0.70476, 204.974412]],\ + 'Pb':[[0.014,203.973029],[0.241,205.974449], [0.221,206.975881], [0.524,207.976636]],\ + 'Bi':[[1.0000,208.980383]],} +# This should be continued! + +def get_spglib_cell(dyn): + + """ + + Get spglib cell from Cellconstructor.Phonons() + + """ + + pos = np.dot(dyn.structure.coords, np.linalg.inv(dyn.structure.unit_cell)) + numbers = [0 for x in range(len(pos))] + symbols_unique = np.unique(dyn.structure.atoms) + for iat in range(len(dyn.structure.atoms)): + for jat in range(len(symbols_unique)): + if(dyn.structure.atoms[iat] == symbols_unique[jat]): + numbers[iat] = jat + return (dyn.structure.unit_cell, pos, numbers) + + ######################################################################################################################################## + +def check_if_rotation(rot, thr): + + """ + + Check if rot matrix is rotation + + """ + + if(np.abs(np.linalg.det(rot)) - 1.0 > thr): + print('Magnitude of the determinant of the rotation matrix larger than 1.0! Should not happen!') + print(np.abs(np.linalg.det(rot))) + try: + if(np.any(np.linalg.inv(rot) - rot.T > 1.0e-4)): + print('Transpose and inverse of rotation matrix are not the same! Should not happen!') + print(np.linalg.inv(rot)) + print(rot.T) + print(rot) + raise RuntimeError('Not a rotation!') + except: + print('Something wrong when trying to calculate inverse of rotation matrix. Possibly singular!') + print(rot) + raise RuntimeError('Exit!') + + ####################################################################################################################################### + +def gaussian(x, x0, sigma): + + """ + + Definition of gaussian function + + x0 - location + sigma - square root of variance + + """ + + return np.exp(-0.5*(x-x0)**2/sigma**2)/np.sqrt(2.0*np.pi)/sigma + + #################################################################################################################################### + +def heat_capacity(freqs, temperature, hbar1, kb1, cp_mode = 'quantum'): + + """ + + Calculate mode heat capacity + + freqs - frequency of the phonon mode + temperature - temperature at which to calculate heat capacity + hbar1 - reduced Planck's constant in appropriate units + kb1 - Boltzmann constant in appropriate units + mode - how to treat phonon populations, quantum - bose einstein, classical - kbT/hbar\omega + + """ + if(cp_mode == 'quantum'): + if(freqs > 0.0): + x1 = np.exp(hbar1*freqs/kb1/temperature) + return (hbar1*freqs)**2*x1/kb1/temperature**2/(x1-1.0)**2 + else: + return 0.0 + elif(cp_mode == 'classical'): + return kb1 + + #################################################################################################################################### + +def bose_einstein(freqs, temperature, hbar1, kb1, cp_mode = 'quantum'): + + if(cp_mode == 'quantum'): + if(freqs > 0.0): + x1 = np.exp(hbar1*freqs/kb1/temperature) + return 1.0/(x1-1.0) + else: + return 0.0 + elif(cp_mode == 'classical'): + return kb1/temperature + + ##################################################################################################################################### + +def same_vector(vec1, vec2, cell): + + """ + + Check if two vectors are the same. PBC rules apply + + vec1, vec2 - two vectors to compare + cell - lattice vectors for which PBC must hold + + """ + + + invcell = np.linalg.inv(cell) + rvec1 = np.dot(vec1, invcell) + rvec1 -= np.rint(rvec1) + rvec2 = np.dot(vec2, invcell) + rvec2 -= np.rint(rvec2) + res = False + + if(np.linalg.norm(rvec1 - rvec2) < 1.0e-4): + res = True + + if(not res): + for i in range(-1, 2): + if(not res): + for j in range(-1, 2): + if(not res): + for k in range(-1, 2): + rvec21 = rvec2 + np.array([float(i), float(j), float(k)]) + if(np.linalg.norm(rvec1 - rvec21) < 1.0e-4): + res = True + break + return res + +###################################################################################################################################### + +def check_degeneracy(x, tol): + + """ + + Simple check if there are degenerate phonon modes for a given k - point. + + x - frequencies at the given k - point + tol - tolerance to be satisfied + + """ + + x1 = x.copy() + x1 = x1.tolist() + degs = [] + for i in range(len(x1)): + if(not any(i in sl for sl in degs)): + curr_degs = [] + curr_degs.append(i) + for j in range(i+1, len(x1)): + if(np.abs(x1[i]-x1[j]) < tol): + curr_degs.append(j) + degs.append(curr_degs) + return degs + +def get_kpoints_in_path(path, nkpts, kprim): + segments = path['path'] + coords = path['point_coords'] + tot_length = 0.0 + for i in range(len(segments)): + qpt1 = coords[segments[i][1]] + qpt2 = coords[segments[i][0]] + qpt1 = np.dot(qpt1, kprim) + qpt2 = np.dot(qpt2, kprim) + tot_length += np.linalg.norm(qpt1 - qpt2) + dl = tot_length/float(nkpts) + distance = [] + kpoints = [] + for i in range(len(segments)): + qpt1 = coords[segments[i][1]] + qpt2 = coords[segments[i][0]] + qpt1 = np.dot(qpt1, kprim) + qpt2 = np.dot(qpt2, kprim) + length = np.linalg.norm(qpt1 - qpt2) + kpoints.append(qpt2) + if(i == 0): + distance.append(0.0) + else: + distance.append(distance[-1]) + start_dist = distance[-1] + nkpts1 = int(np.floor(length/dl)) + for j in range(nkpts1): + newqpt = qpt2 + (qpt1 - qpt2)/float(nkpts1)*float(j + 1) + kpoints.append(newqpt) + distance.append(start_dist + np.linalg.norm(qpt1 - qpt2)/float(nkpts1)*float(j + 1)) + distance = np.array(distance) + print('k-point path taken: ') + for i in range(len(segments)): + print(segments[i], end = ' -> ') + print('') + distance /= distance[-1] + return kpoints, distance, segments + + +def centering_fc3(tensor3, check_for_symmetries = True, Far = 1): + rprim = tensor3.unitcell_structure.unit_cell.copy() + irprim = np.linalg.inv(rprim) + rsup = tensor3.supercell_structure.unit_cell.copy() + irsup = np.linalg.inv(rsup) + positions = tensor3.unitcell_structure.coords.copy() + xpos = np.dot(positions, np.linalg.inv(rprim)) + natom = len(xpos) + symbols = tensor3.unitcell_structure.atoms + unique_symbols = np.unique(symbols) + unique_numbers = np.arange(len(unique_symbols), dtype=int) + 1 + numbers = np.zeros(len(symbols)) + for iat in range(len(symbols)): + for jat in range(len(unique_symbols)): + if(symbols[iat] == unique_symbols[jat]): + numbers[iat] = unique_numbers[jat] + cell = (rprim, xpos, numbers) + if(tensor3.n_R == tensor3.n_sup**2): + print('ForceTensor most likely not previously centered! ') + if(check_for_symmetries): + permutation = thermal_conductivity.third_order_cond_centering.check_permutation_symmetry(tensor3.tensor, tensor3.r_vector2.T, tensor3.r_vector3.T, tensor3.n_R, natom) + if(not permutation): + print('Permutation symmetry not satisfied. Forcing symmetry! ') + fc3 = thermal_conductivity.third_order_cond_centering.apply_permutation_symmetry(tensor3.tensor, tensor3.r_vector2.T, tensor3.r_vector3.T, tensor3.n_R, natom) + tensor3.tensor = fc3 + permutation = thermal_conductivity.third_order_cond_centering.check_permutation_symmetry(tensor3.tensor, tensor3.r_vector2.T, tensor3.r_vector3.T, tensor3.n_R, natom) + else: + permutation = True + if(permutation): + print('Permutation symmetry satisfied. Centering ...') + hfc3, hr_vector2, hr_vector3, tot_trip = thermal_conductivity.third_order_cond_centering.find_triplets(tensor3.tensor, tensor3.r_vector2.T, tensor3.r_vector3.T, rsup, irsup, positions, Far, tensor3.n_R, natom) + hfc3 = np.asfortranarray(hfc3) + hr_vector3 = np.asfortranarray(hr_vector3) + hr_vector2 = np.asfortranarray(hr_vector2) + maxtrip = thermal_conductivity.third_order_cond_centering.number_of_triplets(hfc3, hr_vector2, hr_vector3, tot_trip, natom, tensor3.n_R) + fc3, r_vector2, r_vector3, ntrip = thermal_conductivity.third_order_cond_centering.distribute_fc3(hfc3, hr_vector2, hr_vector3, tot_trip, maxtrip, natom, tensor3.n_R) + print('Final number of triplets: ', ntrip) + tensor3.n_R = ntrip + tensor3.r_vector2 = r_vector2[0:ntrip,:].T + tensor3.r_vector3 = r_vector3[0:ntrip,:].T + tensor3.x_r_vector2 = np.zeros_like(tensor3.r_vector2) + tensor3.x_r_vector3 = np.zeros_like(tensor3.r_vector3) + tensor3.tensor = fc3[0:ntrip] + tensor3.x_r_vector2 = np.rint(np.dot(r_vector2[0:ntrip,:], irprim), dtype=float).T + tensor3.x_r_vector3 = np.rint(np.dot(r_vector3[0:ntrip,:], irprim), dtype=float).T + #write_fc3(tensor3) + if(check_for_symmetries): + permutation = thermal_conductivity.third_order_cond_centering.check_permutation_symmetry(tensor3.tensor, tensor3.r_vector2.T, tensor3.r_vector3.T, tensor3.n_R, natom) + if(not permutation): + print('After centering tensor does not satisfy permutation symmetry!') + return tensor3 + else: + raise RuntimeError('Permutation symmetry not satisfied again. Aborting ...') + +def apply_asr(tensor3, tol = 1.0e-10): + + print('Applying ASR!') + natom = tensor3.unitcell_structure.N_atoms + + fc3 = thermal_conductivity.third_order_cond_centering.apply_asr(tensor3.tensor, tensor3.r_vector2.T, tensor3.r_vector3.T, tensor3.n_R, natom) + tensor3.tensor = fc3 + permutation = thermal_conductivity.third_order_cond_centering.check_permutation_symmetry(tensor3.tensor, tensor3.r_vector2.T, tensor3.r_vector3.T, tensor3.n_R, natom) + if(not permutation): + print('After ASR tensor does not satisfy permutation symmetry!') + + return tensor3 + +def write_fc3(tensor3): + natom = len(tensor3.unitcell_structure.coords) + with open('fc3.dat', 'w+') as outfile: + for i in range(tensor3.n_R): + outfile.write('Triplet: '+ str(i+1) + '\n') + for j in range(3): + outfile.write(3*' ' + format(tensor3.r_vector2[j,i], '.8f')) + outfile.write('\n') + for j in range(3): + outfile.write(3*' ' + format(tensor3.r_vector3[j,i], '.8f')) + outfile.write('\n') + for iat in range(natom): + for j in range(3): + outfile.write('Coordinate '+ str(1+j + 3*iat) + '\n') + for jat in range(natom): + for j1 in range(3): + for kat in range(natom): + for k1 in range(3): + outfile.write(3*' ' + format(tensor3.tensor[i,3*iat+j,3*jat+j1,3*kat+k1], '.8f')) + outfile.write('\n') + +def find_q_mq_pairs(kpoints): + + pairs = [] + found = [False for x in range(len(kpoints))] + for iqpt in range(len(kpoints)): + if(not found[iqpt]): + kpt = kpoints[iqpt] + for jqpt in range(len(kpoints)): + if(not found[jqpt] and not found[iqpt] and iqpt != jqpt): + kpt1 = kpoints[jqpt] + if(np.linalg.norm(kpt + kpt1) < 1.0e-6): + found[iqpt] = True + found[jqpt] = True + pairs.append([iqpt, jqpt]) + break + return pairs + +def apply_permutation_symmetry(tensor3, pairs): + for ipair in range(len(pairs)): + if(pairs[ipair][0] != pairs[ipair][1]): + ip = pairs[ipair][0] + jp = pairs[ipair][1] + for i in range(3*tensor3.nat): + for iat in range(tensor3.nat): + for jat in range(tensor3.nat): + tensor3.tensor[ip,i,3*iat:3*(iat + 1), 3*jat:3*(jat+1)] = (tensor3.tensor[ip,i,3*iat:3*(iat + 1), 3*jat:3*(jat+1)] + tensor3.tensor[jp,i,3*jat:3*(jat + 1), 3*iat:3*(iat+1)].T)/2.0 + tensor3.tensor[jp,i,3*jat:3*(jat + 1), 3*iat:3*(iat+1)] = tensor3.tensor[ip,i,3*iat:3*(iat + 1), 3*jat:3*(jat+1)].T + +def find_minimum_vector(v1, m): + rv1 = np.dot(v1, np.linalg.inv(m)) + rv2 = rv1 - np.rint(rv1) + return np.dot(rv2, m) + +def rotate_eigenvectors(ddm, eigs): + + _, eigvecs = np.linalg.eigh(np.dot(eigs.conj().T, np.dot(ddm, eigs))) + rot_eigvecs = np.dot(eigvecs, eigs) + + return rot_eigvecs + +def load_thermal_conductivity(filename = 'tc.pkl'): + + import pickle + + infile = open(filename, 'rb') + tc = pickle.load(infile) + infile.close() + return tc + +def get_mapping_of_q_points(star, points, rotations): + + mapping = [] + for istar in range(len(star)): + star_mapping = [] + iqpt1 = star[istar][0] + qpt1 = points[iqpt1] + for iqpt in range(len(star[istar])): + found = False + qpt_mapping = [] + iqpt2 = star[istar][iqpt] + qpt2 = points[iqpt2] + if(np.linalg.norm(qpt2 + qpt1 - np.rint(qpt2 + qpt1)) < 1.0e-6): + qpt_mapping.append((-1, True)) + found = True + else: + for irot in range(len(rotations)): + qpt21 = np.dot(rotations[irot].T, qpt1) + diffq = qpt21 - qpt2 + addq = qpt21 + qpt2 + if(np.linalg.norm(diffq - np.rint(diffq)) < 1.0e-6): + qpt_mapping.append((irot, False)) + found = True + elif(np.linalg.norm(addq - np.rint(addq)) < 1.0e-6): + qpt_mapping.append((irot, True)) + found = True + if(found): + star_mapping.append(qpt_mapping) + else: + print('QPT1: ', qpt1) + print('QPT2: ', qpt2) + raise RuntimeError('Could not find any mapping between qpoints!') + mapping.append(star_mapping) + + return mapping + +def construct_symmetry_matrix(rotation, translation, qvec, pos, atom_map, cell): + matrix = np.zeros((len(pos)*3, len(pos)*3), dtype=complex) + rx1 = [] + for iat in range(len(pos)): + for jat in range(len(pos)): + if(jat == atom_map[iat]): + r = np.zeros_like(pos[iat]) + phase = 0.0 + r = pos[iat] - np.dot(rotation, pos[jat]) - translation + rx = np.dot(r, np.linalg.inv(cell)) + rx1.append(rx) + if(np.linalg.norm(rx - np.rint(rx))>1.0e-6): + print(rotation) + print(translation) + print(pos[iat], pos[jat]) + print(atom_map) + print(rx) + raise RuntimeError('The atom is translated different than the translation vector!') + #else: + # print(rx) + #phase = np.dot(qvec, r)*2.0*np.pi + phase = -1.0*np.dot(qvec, r)*2.0*np.pi + #matrix[3*jat:3*(jat+1), 3*iat:3*(iat+1)] = rotation*np.exp(complex(0.0, phase)) + matrix[3*iat:3*(iat+1), 3*jat:3*(jat+1)] = rotation*np.exp(complex(0.0, phase)) + try: + imatrix = np.linalg.inv(matrix) + #print('Gamma is invertible!') + if(not np.linalg.norm(imatrix - matrix.conj().T)/np.linalg.norm(matrix) < 1.0e-5): + raise RuntimeError('The transformation matrix is not unitary!') + except: + print(np.matmul(matrix, matrix.conj().T)) + raise RuntimeError('Gamma is not invertible!') + return matrix#, rx1, np.exp(complex(0.0, phase)), phase, qvec, np.dot(qvec, r) + + +class ThermalConductivity: + + def __init__(self, dyn, tensor3, kpoint_grid = 2, scattering_grid = None, smearing_scale = 1.0, smearing_type = 'adaptive', cp_mode = 'quantum', group_velocity_mode = 'analytical', off_diag = False, phase_conv = 'smooth'): + + """ + + This class contains necesary routines to calculate lattice thermal conductivity using SSCHA auxiliary 2nd and 3rd order force constants. + + Parameters: + + Necesary: + + dyn : SSCHA dynamical matrix object + tensor3 : SSCHA 3rd order force constants + + kpoint_grid : Initializes the grid for Brillouin zone integration. It is used in the calculation of lattice thermal conductivity and + the calculation of the phonon lifetimes. Default is 2. + scattering_grid : Grid size for the Brilouin integration in determining the phonon lifetimes. Default is to be the same as kpoint_grid + smearing_scale : Scale for the smearing constant if adaptive smearing is used. Default value is 2.0 + smearing_type : Type of smearing used. Could be constant (same for all phonon modes) or adaptive (scaled by the phonon group velocity and the q point density). + cp_mode : Flag determining how phonon occupation factors are calculated (quantum/classical), default is quantum + group_velocity_mode : How to calculate group velocities. 'analytical', 'finite_difference', 'wigner' + off_diag : Boolean parameter for the calculation of the off-diagonal elements of group velocity. + phase_conv : Phase convention for Fourier interpolation. Smooth (wrt atomic positions) or step (wrt to lattice vectors) + + """ + + self.dyn = dyn + self.fc3 = tensor3 + if(isinstance(kpoint_grid, int)): + self.kpoint_grid = np.array([kpoint_grid for x in range(3)]) + else: + self.kpoint_grid = np.array(kpoint_grid).astype(int) + if(scattering_grid is not None): + if(isinstance(scattering_grid, int)): + self.scattering_grid = np.array([scattering_grid for x in range(3)]) + else: + self.scattering_grid = np.array(scattering_grid).astype(int) + else: + self.scattering_grid = self.kpoint_grid.copy() + if(smearing_scale == None): + smearing_scale = 1.0 + self.smearing_scale = smearing_scale + self.unitcell = self.dyn.structure.unit_cell + #print('Primitive cell: ') + #print(self.unitcell) + self.supercell = self.dyn.structure.generate_supercell(dyn.GetSupercell()).unit_cell + #print('Supercell: ') + #print(self.supercell) + self.phase_conv = phase_conv + self.smearing_type = smearing_type + self.cp_mode = cp_mode + self.off_diag = off_diag + self.volume = self.dyn.structure.get_volume() + + self.reciprocal_lattice = np.linalg.inv(self.unitcell).T + self.force_constants = [] + self.ruc = [] + self.set_force_constants(dyn) + self.nuc = len(self.ruc) + + self.symmetry = symmetries.QE_Symmetry(self.dyn.structure) + self.symmetry.SetupQPoint() + self.nsyms = self.symmetry.QE_nsym + syms = np.array(self.symmetry.QE_s.copy()).transpose(2,0,1) + + self.set_kpoints_spglib() + self.nband = 3*self.dyn.structure.N_atoms + self.delta_omega = 0.0 + + self.group_velocity_mode = group_velocity_mode + self.freqs = np.zeros((self.nkpt, self.nband)) + self.gruneisen = np.zeros((self.nkpt, self.nband)) + self.eigvecs = np.zeros((self.nkpt, self.nband, self.nband), dtype=complex) + self.dynmats = np.zeros((self.nkpt, self.nband, self.nband), dtype=complex) + if(self.off_diag): + self.gvels = np.zeros((self.nkpt, self.nband, self.nband, 3), dtype = complex) + else: + self.gvels = np.zeros((self.nkpt, self.nband, 3)) + self.ddms = np.zeros((self.nkpt, self.nband, self.nband, 3), dtype = complex) + self.sigmas = np.zeros_like(self.freqs) + # Lifetimes, frequency shifts, lineshapes, heat_capacities and thermal conductivities are stored in dictionaries + # Dictionary key is the temperature at which property is calculated on + self.lifetimes = {} + self.freqs_shifts = {} + self.lineshapes = {} + self.cp = {} + self.kappa = {} + self.got_scattering_rates_isotopes = False + + ################################################################################################################### + + def save_pickle(self, filename = 'tc.pkl'): + + import pickle + + with open(filename, 'wb') as outfile: + pickle.dump(self, outfile) + + ################################################################################################################################### + + def set_kpoints_spglib(self): + + cell = get_spglib_cell(self.dyn) + mapping, grid = spglib.get_ir_reciprocal_mesh(self.kpoint_grid, cell, is_shift=[0, 0, 0]) + symmetry_dataset = spglib.get_symmetry_dataset(cell, symprec=1e-5, angle_tolerance=-1.0, hall_number=0) + rotations = symmetry_dataset['rotations'] + translations = symmetry_dataset['translations'] + print('Spacegroup: ' + symmetry_dataset['international'] + str(symmetry_dataset['number'])) + self.atom_map = np.zeros((len(rotations), len(cell[1])), dtype=int) + + nrot = len(rotations) + for irot in range(nrot): + found = [False for jat in range(len(cell[1]))] + new_pos = np.einsum('ij,jk->ik', cell[1], rotations[irot].T) + translations[irot] + for iat in range(len(cell[1])): + for jat in range(len(cell[1])): + diff = cell[1][jat] - new_pos[iat] + if(np.linalg.norm(diff - np.rint(diff)) < 1.0e-5): + self.atom_map[irot, iat] = jat + if(not found[iat]): + found[iat] = True + else: + print('Again found mapping to this atom!') + if(not all(found)): + raise RuntimeError('Could not find atom mapping for spacegroup symmetry: ' + str(irot + 1)) + + self.irr_k_points = np.array(grid[np.unique(mapping)] / np.array(self.kpoint_grid, dtype=float)) + self.irr_k_points = np.dot(self.irr_k_points, self.reciprocal_lattice) + self.qpoints = grid / np.array(self.kpoint_grid, dtype=float) + self.k_points = np.dot(self.qpoints, self.reciprocal_lattice) + self.rotations = np.array(rotations).copy() + self.translations = np.array(translations).copy() + + self.qstar = [] + for i in np.unique(mapping): + curr_star = [] + for j, j_map in enumerate(mapping): + if(i == j_map): + curr_star.append(j) + self.qstar.append(curr_star) + + self.little_group = [[] for x in range(len(self.k_points))] + for istar in self.qstar: + for iqpt in istar: + curr_little_group = [] + for irot, rot in enumerate(rotations): + qpt1 = np.dot(rot.T, self.qpoints[iqpt]) + diffq = qpt1 - self.qpoints[iqpt] + diffq -= np.rint(diffq) + if(np.linalg.norm(diffq) < 1.0e-6): + curr_little_group.append(irot) + self.little_group[iqpt].extend(curr_little_group) + #if(len(istar) * len(self.little_group[iqpt]) != len(rotations)): + # raise RuntimeError('Number of symmetry operation wrong!', len(istar), len(self.little_group[iqpt]), len(rotations)) + + mapping1, grid1 = spglib.get_ir_reciprocal_mesh(self.scattering_grid, cell, is_shift=[0, 0, 0]) + self.scattering_qpoints = np.array(grid1 / np.array(self.scattering_grid, dtype=float)) + self.scattering_k_points = np.dot(self.scattering_qpoints, self.reciprocal_lattice) + self.nkpt = np.shape(self.k_points)[0] + self.scattering_nkpt = np.shape(self.scattering_k_points)[0] + self.nirrkpt = np.shape(self.irr_k_points)[0] + self.weights = np.zeros(self.nirrkpt, dtype = int) + for iqpt in range(self.nirrkpt): + self.weights[iqpt] = len(self.qstar[iqpt]) + self.set_up_scattering_grids = False + + ################################################################################################################################### + + def set_scattering_grids(self): + + """ + + Setup scattering grids for each k - point. Only permutation symmetry is found to be stable. Python version - very slow. + + """ + + start_time = time.time() + cell = get_spglib_cell(self.dyn) + tot_r = spglib.get_symmetry_dataset(cell)['rotations'] + nsym = len(tot_r) + + scatt_grids = [] + weights = [] + for iqpt in range(self.nirrkpt): + curr_grid = [] + curr_w = [] + rot_q = [] + q1 = self.qpoints[self.qstar[iqpt][0]] + for isym in range(nsym): + if(same_vector(q1, np.dot(tot_r[isym], q1), np.eye(3))): + rot_q.append(tot_r[isym]) + curr_nsym = len(rot_q) + print('Small group of ' + str(iqpt) + '. q point is ' + str(curr_nsym) + ' size!') + for jqpt in range(self.nkpt): + q2 = self.qpoints[jqpt] + q3 = -1.0*q1 - q2 + pair_found = False + for i in range(len(curr_grid)): + if(not pair_found): + if(same_vector(q3, curr_grid[i][0], np.eye(3)) and same_vector(q2, curr_grid[i][1], np.eye(3))): + pair_found = True + curr_w[i] += 1 + break + else: + for isym in range(curr_nsym): + if(same_vector(q3, np.dot(rot_q[isym], curr_grid[i][0]), np.eye(3)) and\ + same_vector(q2, np.dot(rot_q[isym], curr_grid[i][1]), np.eye(3))): + pair_found = True + curr_w[i] += 1 + break + elif(same_vector(q3, np.dot(rot_q[isym], curr_grid[i][1]), np.eye(3)) and\ + same_vector(q2, np.dot(rot_q[isym], curr_grid[i][0]), np.eye(3))): + pair_found = True + curr_w[i] += 1 + break + if(not pair_found): + curr_grid.append([q2, q3]) + curr_w.append(1) + scatt_grids.append(curr_grid) + weights.append(curr_w) + self.scattering_grids = [] + self.scattering_weights = [] + for iqpt in range(self.nirrkpt): + if(sum(weights[iqpt]) != self.nkpt): + print('WARNING! Sum of weights for ' + str(iqpt) + '. q point does not match total number of q points!') + print(sum(weights[iqpt]), self.nkpt) + curr_grid = np.array(scatt_grids[iqpt]) + self.scattering_grids.append(np.dot(curr_grid[:,0,:], self.reciprocal_lattice)) + self.scattering_weights.append(weights[iqpt]) + print('Number of scattering events for ' + str(iqpt + 1) + '. q point in irr zone is ' + str(len(self.scattering_grids[iqpt])) + '!') + self.set_up_scattering_grids = True + print('Set up scattering grids in ' + format(time.time() - start_time, '.1f') + ' seconds.') + + ################################################################################################################################### + + def set_scattering_grids_fortran(self): + + """ + + Setup scattering grids by calling fortran routine. Much faster. + + """ + + start_time = time.time() + cell = get_spglib_cell(self.dyn) + tot_r = spglib.get_symmetry_dataset(cell)['rotations'] + tot_t = spglib.get_symmetry_dataset(cell)['translations'] + rotations = [] + for i in range(len(tot_r)): + if(np.all(tot_t[i] < 1.0e-6)): + rotations.append(tot_r[i]) + rotations = np.asfortranarray(rotations) + nsym = len(rotations) + + irrgrid = [] + for iqpt in range(self.nirrkpt): + irrgrid.append(self.qpoints[self.qstar[iqpt][0]]) + irrgrid = np.asfortranarray(irrgrid) + (scattering_grid, scattering_weight) = thermal_conductivity.scattering_grids.get_scattering_q_grid(rotations, irrgrid, self.qpoints, \ + self.scattering_qpoints, self.nirrkpt, self.nkpt, self.scattering_nkpt, nsym) + self.scattering_grids = [] + self.scattering_weights = [] + for iqpt in range(self.nirrkpt): + curr_grid = [] + curr_w = [] + for jqpt in range(self.scattering_nkpt): + if(scattering_weight[iqpt][jqpt] > 0): + curr_grid.append(np.dot(scattering_grid[iqpt][jqpt], self.reciprocal_lattice)) + curr_w.append(scattering_weight[iqpt][jqpt]) + else: + break + self.scattering_grids.append(curr_grid) + self.scattering_weights.append(curr_w) + if(sum(curr_w) != self.scattering_nkpt): + print('WARNING! Sum of weights for ' + str(iqpt + 1) + '. q point does not match total number of q points!') + print(sum(curr_w), self.scattering_nkpt) + print('Number of scattering events for ' + str(iqpt + 1) + '. q point in irr zone is ' + str(len(self.scattering_grids[iqpt])) + '!') + self.set_up_scattering_grids = True + print('Set up scattering grids in ' + format(time.time() - start_time, '.1f') + ' seconds.') + + ################################################################################################################################### + + def set_scattering_grids_simple(self): + + """ + + Set scattering grids to be all points in the Brillouin zone. + + """ + + self.scattering_grids = [] + self.scattering_weights = [] + start_time = time.time() + for iqpt in range(self.nirrkpt): + self.scattering_grids.append(self.scattering_k_points) + self.scattering_weights.append(np.ones(self.scattering_nkpt)) + if(sum(self.scattering_weights[-1]) != self.scattering_nkpt): + print('WARNING! Sum of weights for ' + str(iqpt + 1) + '. q point does not match total number of q points!') + print(sum(self.scattering_weights[-1]), self.nkpt) + print('Number of scattering events for ' + str(iqpt + 1) + '. q point in irr zone is ' + str(len(self.scattering_grids[iqpt])) + '!') + self.set_up_scattering_grids = True + print('Set up scattering grids in ' + format(time.time() - start_time, '.1f') + ' seconds.') + + + #################################################################################################################################### + + def set_force_constants(self, dyn): + + """ + Translates the SSCHA second order tensor in a local version which is used for calculation of harmonic properties. + + dyn : Cellconstructor.Phonons() object + """ + + dyn.Symmetrize() + self.fc2 = CC.ForceTensor.Tensor2(dyn.structure, dyn.structure.generate_supercell(dyn.GetSupercell()), dyn.GetSupercell()) + self.fc2.SetupFromPhonons(self.dyn) + self.fc2.Center() + self.fc2.Apply_ASR() + + self.force_constants = self.fc2.tensor.copy() + self.ruc = self.fc2.r_vector2.T + invcell = np.linalg.inv(self.supercell) + + + ################################################################################################################################### + + def setup_smearings(self, smearing_value = 0.00005): + + """ + Sets up smearing factor for each phonon mode. + + if type == adaptive : smearing for each phonon mode is unique and depends on the group velocity of the mode and the k point density. + For modes with zero velocity, take value 10 times smaller than the average smearing. + if type == constant : smearing is same for all of the modes + + smearing_value : value of the smearing in case type == "constant" + + """ + + if(self.smearing_type == 'adaptive'): + if(np.all(self.freqs == 0.0) or np.all(self.gvels == 0.0)): + print('Harmonic properties are all zero! Try reruning the harmonic calculation! ') + if(np.all(self.freqs == 0.0)): + print('It is frequencies!') + if(np.all(self.gvels == 0.0)): + print('It is group velocities!') + delta_q = 0.0 + for i in range(len(self.reciprocal_lattice)): + if(np.linalg.norm(self.reciprocal_lattice[i]/float(self.kpoint_grid[i])) > delta_q): + delta_q = np.linalg.norm(self.reciprocal_lattice[i]/float(self.kpoint_grid[i])) + + for ikpt in range(self.nkpt): + for iband in range(self.nband): + delta_v = np.linalg.norm(self.gvels[ikpt,iband]) + if(delta_v > 0.0): + self.sigmas[ikpt][iband] = delta_v*delta_q*self.smearing_scale + else: + self.sigmas[ikpt][iband] = 0.0 + min_smear = np.amax(self.sigmas)/10.0 # We can't have smearing zero for modes with 0 group velocity, so we set it to this number! + self.sigmas[self.sigmas < min_smear] = min_smear + if(np.all(self.sigmas == 0.0)): + raise RuntimeError('All smearing values are zero!') + elif(self.smearing_type == 'constant'): + self.sigmas[:,:] = smearing_value + + ################################################################################################################################## + + def what_temperatures(self): + + """ + Routine to print which temperatures have already been calculated. + + """ + + print('Heat capacities are calculated for: ') + print(self.cp.keys()) + print('Phonon lifetimes are calculated for: ') + print(self.lifetimes.keys()) + print('Phonon lineshapes are calculated for: ') + print(self.lineshapes.keys()) + + ################################################################################################################################### + + def get_spectral_kappa(self, temperature, ne = 100, prefered = 'lineshape'): + + """ + Routine to calculate frequency resolved lattice thermal conductivity $\kappa (\omega)$ + ne : number of frequency points in case we calculate spectral kappa from phonon lifetimes (in case of lineshapes we use energies defined for the calculation of lineshapes) + prefered : in case both lifetimes and lineshapes are calculated defines which method to use to calculate spectral kappa + """ + + if(not self.off_diag): + temp_key = format(temperature, '.1f') + if(temp_key in self.lifetimes.keys() and temp_key in self.lineshapes.keys()): + if(prefered == 'lineshape'): + print('Both lineshapes and lifetimes are calculated. Calculating spectral kappa from lineshapes!') + spec_kappa = self.calc_spectral_kappa_gk_diag(self, temperature) + else: + print('Both lineshapes and lifetimes are calculated. Calculating spectral kappa from lifetimes!') + spec_kappa = self.calc_spectral_kappa_srta_diag(self, temperature, ne) + elif(temp_key in self.lifetimes.keys()): + spec_kappa = self.calc_spectral_kappa_srta_diag(self, temperature, ne) + elif(temp_key in self.lineshapes.keys()): + spec_kappa = self.calc_spectral_kappa_gk_diag(self, temperature) + else: + print('You have not calculated phonon lifetimes or lineshapes for this temperature. Can not calculate spectral kappa!') + spec_kappa = (np.zeros(ne), np.zeros(ne)) + else: + print('Calculation with offdiagonal elements have been initialized. Not possible to calculate spectral kappa! ') + spec_kappa = (np.zeros(ne), np.zeros(ne)) + + return spec_kappa + + ################################################################################################################################### + + def calc_spectral_kappa_gk_diag(self, temperature): + + """ + Calculate spectral kappa from lineshapes. + + temperature : temperature at which to calculate spectral kappa. Lineshapes should already been calculated. + """ + + ls_key = format(temperature, '.1f') + spec_kappa = np.zeros((3,3,self.lineshapes[ls_key].shape[-1])) + spec_kappa_off = np.zeros((3,3,self.lineshapes[ls_key].shape[-1])) + energies = np.arange(spec_kappa.shape[-1], dtype=float)*self.delta_omega + self.delta_omega + exponents_plus = np.exp(energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + integrands_plus = self.lineshapes[ls_key]**2*exponents_plus/(exponents_plus - 1.0)**2 + exponents_minus = np.exp(-1.0*energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + integrands_minus = self.lineshapes[ls_key]**2*exponents_minus/(exponents_minus - 1.0)**2 + integrands = (integrands_plus + integrands_minus) + + for istar in self.qstar: + for iqpt in istar: + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + if(self.off_diag): + for jband in range(self.nband): + if(self.freqs[iqpt, jband] != 0.0): + if(self.group_velocity_mode != 'wigner'): + vel_fact = 1.0 + else: + vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + if(iband == jband): + gvel = np.zeros_like(self.gvels[iqpt, iband, iband]) + gvel_sum = np.zeros((3,3), dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*SSCHA_TO_MS**2/float(len(self.rotations)) + spec_kappa += np.einsum('ij,k->ijk',gvel_sum,integrands[iqpt, iband])*self.freqs[iqpt, iband]**2 + else: + integrands_plus1 = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_plus/(exponents_plus - 1.0)**2 + integrands_minus1 = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_minus/(exponents_minus - 1.0)**2 + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + gvel_sum = np.zeros((3,3), dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real/vel_fact**2/float(len(self.rotations)) + spec_kappa_off += np.einsum('ij,k->ijk',gvel_sum,integrands_plus1 + integrands_minus1)*self.freqs[iqpt,iband]*self.freqs[iqpt,jband]*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/2.0 + else: + gvel = np.zeros_like(self.gvels[iqpt, iband]) + gvel_sum = np.zeros((3,3), dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*SSCHA_TO_MS**2/float(len(self.rotations)) + spec_kappa += np.einsum('ij,k->ijk',gvel_sum,integrands[iqpt, iband])*self.freqs[iqpt, iband]**2 + for ie in range(np.shape(spec_kappa)[-1]): + spec_kappa[:,:,ie] += spec_kappa[:,:,ie].T + spec_kappa[:,:,ie] /= 2.0 + spec_kappa_off[:,:,ie] += spec_kappa_off[:,:,ie].T + spec_kappa_off[:,:,ie] /= 2.0 + + spec_kappa = spec_kappa*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi*(SSCHA_TO_THZ*2.0*np.pi)*1.0e12/2.0 + spec_kappa_off = spec_kappa_off*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + tot_kappa = np.sum(spec_kappa + spec_kappa_off, axis = len(spec_kappa) - 1)*self.delta_omega + print('Total kappa is: ', np.diag(tot_kappa)) + + return energies*SSCHA_TO_THZ, spec_kappa/SSCHA_TO_THZ, spec_kappa_off/SSCHA_TO_THZ + + ################################################################################################################################## + + def calc_spectral_kappa_srta_diag(self, temperature, ne): + + """ + Calculate spectral kappa from lifetimes. + + temperature : temperature at which spectral kappa should be calculated. + ne : number of frequency points for spectal kappa to be calculated on. + + """ + + key = format(temperature, '.1f') + delta_en = np.amax(self.freqs)/float(ne) + energies = np.arange(ne, dtype=float)*delta_en + delta_en + spec_kappa = np.zeros((3,3,ne)) + for ien in range(ne): + for iqpt in range(self.nkpt): + for iband in range(self.nband): + weight = gaussian(energies[ien], self.freqs[iqpt, iband], self.sigmas[iqpt, iband]) + if(self.off_diag): + gvel = np.zeros_like(self.gvels[iqpt, iband, iband]) + gvel_sum = np.zeros((3,3), dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real/float(len(self.rotations)) + spec_kappa[:,:,ien] += self.cp[key][iqpt,iband]*gvel_sum*self.lifetimes[key][iqpt][iband]*weight + else: + gvel = np.zeros_like(self.gvels[iqpt, iband]) + gvel_sum = np.zeros((3,3), dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real/float(len(self.rotations)) + spec_kappa[:,:,ien] += self.cp[key][iqpt,iband]*gvel_sum*self.lifetimes[key][iqpt][iband]*weight + spec_kappa = spec_kappa*SSCHA_TO_MS**2/self.volume/float(self.nkpt)*1.0e30#*(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + tot_kappa = np.sum(spec_kappa, axis = len(spec_kappa) - 1)*delta_en + print('Total kappa is: ', np.diag(tot_kappa)) + + return energies*SSCHA_TO_THZ, spec_kappa/SSCHA_TO_THZ + + #################################################################################################################################### + + def calculate_kappa(self, temperatures = [300.0], write_lifetimes = True, mode = 'SRTA', offdiag_mode = 'wigner', gauss_smearing = False, lf_method = 'fortran-LA', isotope_scattering = False, isotopes = None, \ + write_lineshapes=False, ne = 2000, mode_mixing = False, kappa_filename = 'Thermal_conductivity'): + + """ + Main function that calculates lattice thermal conductivity. + + temperatures : list of temperatures to be calculated in K. Warning: Code does not recognize difference in temperatures smaller than 0.1 K. + write_lifetimes : Boolean parameter for writing lifetimes as they are being calculated. + mode : Method to calculate lattice thermal conductivity: + SRTA : Single relaxation time approximation (NOT selfconsistent solution) solution of Boltzmann transport equation + GK : Green-Kubo method (npj Computational Materials volume 7, Article number: 57 (2021)) + offdiag_mode : How to treat the off diagonal terms. 'gk' - Isaeva et al. Nat. Comm., 'wigner' - Simoncelli et al. Nature + gauss_smearing : If true will use the Gaussian function to satisfy energy conservation insted of Lorentzian + lf_method : In case of mode == SRTA, specifies the way to calculate lifetimes. See method in get_lifetimes function. + write_lineshapes : Boolean parameter to write phonon lineshapes as they are being calculated. + ne : Number of frequency points to calculate phonon lineshapes on in case of GK. \ + Number of frequency points to solve self-consistent equation on in case of SRTA. \ + Less anharmonic materials and lower temperatures will need more points (in case of GK). + mode_mixing : Calculate full self energy matrix + kappa_filename : Name of the file to write the results to. + """ + + start_time = time.time() + ntemp = len(temperatures) + if(ntemp == 0): + print('The temperature is not specified!') + return 1 + + kappa_file = open(kappa_filename, 'w+') + tot_kappa = [] + if(not self.off_diag): + kappa_file.write('# ' + format('Temperature (K)', STR_FMT)) + kappa_file.write(' ' + format('Kappa xx (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa yy (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa zz (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa xy (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa yz (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa zx (W/mK)', STR_FMT)) + kappa_file.write('\n') + else: + kappa_file.write('# ' + format('Temperature (K)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_diag xx (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_diag yy (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_diag zz (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_diag xy (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_diag yz (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_diag zx (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_offdiag xx (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_offdiag yy (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_offdiag zz (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_offdiag xy (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_offdiag yz (W/mK)', STR_FMT)) + kappa_file.write(' ' + format('Kappa_offdiag zx (W/mK)', STR_FMT)) + kappa_file.write('\n') + + for itemp in range(ntemp): + tc_key = format(temperatures[itemp], '.1f') + if(mode == 'SRTA'): + if(not self.off_diag): + kappa = self.calculate_kappa_srta_diag(temperatures[itemp], ne, write_lifetimes, gauss_smearing = gauss_smearing, isotope_scattering=isotope_scattering, isotopes= isotopes, lf_method = lf_method) + kappa = kappa/self.volume/float(self.nkpt)*1.0e30 + kappa_file.write(3*' ' + format(temperatures[itemp], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa[icart][icart], '.12e')) + kappa_file.write(3*' ' + format(kappa[0][1], '.12e')) + kappa_file.write(3*' ' + format(kappa[1][2], '.12e')) + kappa_file.write(3*' ' + format(kappa[2][0], '.12e')) + kappa_file.write('\n') + self.kappa[tc_key] = kappa + else: + if(offdiag_mode == 'isaeva'): + kappa_diag, kappa_nondiag = self.calculate_kappa_srta_offdiag_isaeva(temperatures[itemp], ne, write_lifetimes, gauss_smearing = gauss_smearing, isotope_scattering=isotope_scattering, isotopes=isotopes, lf_method = lf_method) + elif(offdiag_mode == 'wigner'): + kappa_diag, kappa_nondiag = self.calculate_kappa_srta_offdiag(temperatures[itemp], ne, write_lifetimes, gauss_smearing = gauss_smearing, isotope_scattering=isotope_scattering, isotopes=isotopes, lf_method = lf_method) + kappa_diag = kappa_diag/self.volume/float(self.nkpt)*1.0e30 + kappa_nondiag = kappa_nondiag/self.volume/float(self.nkpt)*1.0e30 + kappa_file.write(3*' ' + format(temperatures[itemp], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa_diag[icart][icart], '.12e')) + kappa_file.write(3*' ' + format(kappa_diag[0][1], '.12e')) + kappa_file.write(3*' ' + format(kappa_diag[1][2], '.12e')) + kappa_file.write(3*' ' + format(kappa_diag[2][0], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa_nondiag[icart][icart], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[0][1], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[1][2], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[2][0], '.12e')) + kappa_file.write('\n') + self.kappa[tc_key] = kappa_diag + kappa_nondiag + elif(mode == 'GK' and not mode_mixing): + self.delta_omega = np.amax(self.freqs)*2.0/float(ne) + energies = np.arange(ne, dtype=float)*self.delta_omega + self.delta_omega + if(not self.off_diag): + kappa = self.calculate_kappa_gk_diag(temperatures[itemp], write_lineshapes, energies, gauss_smearing = gauss_smearing) + kappa_file.write(3*' ' + format(temperatures[itemp], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa[icart][icart], '.12e')) + kappa_file.write(3*' ' + format(kappa[0][1], '.12e')) + kappa_file.write(3*' ' + format(kappa[1][2], '.12e')) + kappa_file.write(3*' ' + format(kappa[2][0], '.12e')) + kappa_file.write('\n') + self.kappa[tc_key] = kappa + else: + kappa_diag, kappa_nondiag = self.calculate_kappa_gk_offdiag(temperatures[itemp], write_lineshapes, energies, gauss_smearing = gauss_smearing) + kappa_file.write(3*' ' + format(temperatures[itemp], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa_diag[icart][icart], '.12e')) + kappa_file.write(3*' ' + format(kappa_diag[0][1], '.12e')) + kappa_file.write(3*' ' + format(kappa_diag[1][2], '.12e')) + kappa_file.write(3*' ' + format(kappa_diag[2][0], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa_nondiag[icart][icart], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[0][1], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[1][2], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[2][0], '.12e')) + kappa_file.write('\n') + self.kappa[tc_key] = kappa_diag + kappa_nondiag + elif(mode == 'GK' and mode_mixing): + self.delta_omega = np.amax(self.freqs)*2.0/float(ne) + energies = np.arange(ne, dtype=float)*self.delta_omega + self.delta_omega + if(self.off_diag): + kappa = self.calculate_kappa_gk_offdiag_mode_mixing(temperatures[itemp], write_lineshapes, energies, gauss_smearing = gauss_smearing) + kappa_file.write(3*' ' + format(temperatures[itemp], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa[icart][icart], '.12e')) + kappa_file.write(3*' ' + format(kappa[0][1], '.12e')) + kappa_file.write(3*' ' + format(kappa[1][2], '.12e')) + kappa_file.write(3*' ' + format(kappa[2][0], '.12e')) + kappa_file.write('\n') + self.kappa[tc_key] = kappa + elif(mode == 'AC'): + self.delta_omega = np.amax(self.freqs)*2.0/float(ne) + energies = np.arange(ne, dtype=float)*self.delta_omega + self.delta_omega + if(self.off_diag): + kappa, kappa_nondiag, im_kappa, im_kappa_nondiag = self.calculate_kappa_gk_AC(temperatures[itemp], write_lineshapes, energies, gauss_smearing = gauss_smearing) + kappa_file.write(3*' ' + format(temperatures[itemp], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa[icart][icart][0], '.12e')) + kappa_file.write(3*' ' + format(kappa[0][1][0], '.12e')) + kappa_file.write(3*' ' + format(kappa[1][2][0], '.12e')) + kappa_file.write(3*' ' + format(kappa[2][0][0], '.12e')) + for icart in range(3): + kappa_file.write(3*' ' + format(kappa_nondiag[icart][icart][0], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[0][1][0], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[1][2][0], '.12e')) + kappa_file.write(3*' ' + format(kappa_nondiag[2][0][0], '.12e')) + kappa_file.write('\n') + self.kappa[tc_key] = kappa + with open('AC_thermal_conductivity_' + format(temperatures[itemp], '.1f'), 'w+') as outfile: + outfile.write('# Temperature = ' + format(temperatures[itemp], '.1f') + '\n') + for ien in range(np.shape(kappa)[-1]): + if(ien == 0): + outfile.write(3*' ' + format(0.0, '.12e')) + else: + outfile.write(3*' ' + format(energies[ien - 1]*SSCHA_TO_THZ, '.12e')) + for icart in range(3): + outfile.write(3*' ' + format(kappa[icart][icart][ien], '.12e')) + outfile.write(3*' ' + format(kappa[0][1][ien], '.12e')) + outfile.write(3*' ' + format(kappa[1][2][ien], '.12e')) + outfile.write(3*' ' + format(kappa[2][0][ien], '.12e')) + for icart in range(3): + outfile.write(3*' ' + format(kappa_nondiag[icart][icart][ien], '.12e')) + outfile.write(3*' ' + format(kappa_nondiag[0][1][ien], '.12e')) + outfile.write(3*' ' + format(kappa_nondiag[1][2][ien], '.12e')) + outfile.write(3*' ' + format(kappa_nondiag[2][0][ien], '.12e')) + for icart in range(3): + outfile.write(3*' ' + format(im_kappa[icart][icart][ien], '.12e')) + outfile.write(3*' ' + format(im_kappa[0][1][ien], '.12e')) + outfile.write(3*' ' + format(im_kappa[1][2][ien], '.12e')) + outfile.write(3*' ' + format(im_kappa[2][0][ien], '.12e')) + for icart in range(3): + outfile.write(3*' ' + format(im_kappa_nondiag[icart][icart][ien], '.12e')) + outfile.write(3*' ' + format(im_kappa_nondiag[0][1][ien], '.12e')) + outfile.write(3*' ' + format(im_kappa_nondiag[1][2][ien], '.12e')) + outfile.write(3*' ' + format(im_kappa_nondiag[2][0][ien], '.12e')) + outfile.write('\n') + else: + print('Can not recognize this method of calculating kappa! ') + print(mode) + kappa_file.close() + return 1 + + kappa_file.close() + print('Calculated lattice thermal conductivity in ', time.time() - start_time, ' seconds!') + + ################################################################################################################################## + + def calculate_kappa_gk_diag(self, temperature, write_lineshapes, energies, gauss_smearing = False): + + """ + + Calculation of lattice thermal conductivity using Green-Kubo method if only diagonal group velocities are available. + + temperature : temperature at which kappa should be calculated. + write_lineshapes : Boolean noting should we write phonon lineshapes on a file + energies : frequency points at which phonon lineshapes should be calculated + + """ + + ls_key = format(temperature, '.1f') + if(ls_key in self.lineshapes.keys()): + print('Lineshapes for this temperature have already been calculated. Continuing ...') + else: + self.get_lineshapes(temperature, write_lineshapes, energies, method = 'fortran', gauss_smearing = gauss_smearing) + exponents = np.exp(energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + #integrands_plus = self.lineshapes[ls_key]**2*energies**2*exponents/(exponents - 1.0)**2 + integrands_plus = self.lineshapes[ls_key]**2*exponents/(exponents - 1.0)**2 + exponents = np.exp(-1.0*energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + #integrands_minus = self.lineshapes[ls_key]**2*energies**2*exponents/(exponents - 1.0)**2 + integrands_minus = self.lineshapes[ls_key]**2*exponents/(exponents - 1.0)**2 +# print(integrands_plus.shape) + #integrals = (np.sum(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.sum(integrands_minus, axis = len(integrands_plus.shape) - 1))*self.delta_omega*(SSCHA_TO_THZ*2.0*np.pi)*1.0e12/2.0 + integrals = (np.trapz(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.trapz(integrands_minus, axis = len(integrands_minus.shape) - 1))*self.delta_omega*(SSCHA_TO_THZ*2.0*np.pi)*1.0e12/2.0 + #integrals = (integrate.simps(integrands_plus, axis = len(integrands_plus.shape) - 1) + integrate.simps(integrands_minus, axis = len(integrands_minus.shape) - 1))*self.delta_omega*(SSCHA_TO_THZ*2.0*np.pi)*1.0e12/2.0 + #kappa = np.einsum('ijk,ijl,ij,ij,ij->kl', self.gvels.conj(), self.gvels, integrals, self.freqs, self.freqs).real*SSCHA_TO_MS**2#(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + kappa = np.zeros((3,3)) + for istar in self.qstar: + for iqpt in istar: + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + gvel = np.zeros_like(self.gvels[iqpt, iband]) + gvel_sum = np.zeros_like(kappa, dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*SSCHA_TO_MS**2/float(len(self.rotations)) + kappa += gvel_sum*integrals[iqpt][iband]*self.freqs[iqpt][iband]**2 + + kappa += kappa.T + kappa = kappa/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + + return kappa + + ################################################################################################################################## + + def calculate_kappa_gk_offdiag_mode_mixing(self, temperature, write_lineshapes, energies, gauss_smearing = False): + + """ + Calculation of lattice thermal conductivity using Green-Kubo method if both diagonal and off-diagonal group velocities are available. + + temperature : temperature at which kappa should be calculated. + write_lineshapes : Boolean noting should we write phonon lineshapes on a file + energies : frequency points at which phonon lineshapes should be calculated + + """ + + ls_key = format(temperature, '.1f') + if(ls_key in self.lineshapes.keys()): + print('Lineshapes for this temperature have already been calculated. Continuing ...') + else: + self.get_lineshapes(temperature, write_lineshapes, energies, method = 'fortran', gauss_smearing = gauss_smearing, mode_mixing = 'mode_mixing') + exponents_plus = np.exp(energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + exponents_minus = np.exp(-1.0*energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + + kappa_diag = np.zeros((3,3), dtype = complex) + kappa_nondiag = np.zeros((3,3), dtype = complex) + for istar in self.qstar: + for iqpt in istar: + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + for jband in range(self.nband): + if(self.freqs[iqpt, jband] != 0.0): + for kband in range(self.nband): + if(self.freqs[iqpt, kband] != 0.0): + for lband in range(self.nband): + if(self.freqs[iqpt, lband] != 0.0): + if(self.group_velocity_mode != 'wigner'): + vel_fact = 1.0 + else: + vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + #if(iband == jband and iband == kband and kband == lband): + integrals = 0.0 + integrands1_plus = self.lineshapes[ls_key][iqpt, iband, lband]*np.conj(self.lineshapes[ls_key][iqpt, jband, kband])*exponents_plus/(exponents_plus - 1.0)**2 + integrands1_minus = self.lineshapes[ls_key][iqpt, iband, lband]*np.conj(self.lineshapes[ls_key][iqpt, jband, kband])*exponents_minus/(exponents_minus - 1.0)**2 + integrands2_plus = self.lineshapes[ls_key][iqpt, iband, kband]*np.conj(self.lineshapes[ls_key][iqpt, jband, lband])*exponents_plus/(exponents_plus - 1.0)**2 + integrands2_minus = self.lineshapes[ls_key][iqpt, iband, kband]*np.conj(self.lineshapes[ls_key][iqpt, jband, lband])*exponents_minus/(exponents_minus - 1.0)**2 + integrals = (np.sum(integrands1_plus, axis = len(integrands1_plus.shape) - 1) + np.sum(integrands1_minus, axis = len(integrands1_minus.shape) - 1)).real*self.delta_omega + integrals += (np.sum(integrands2_plus, axis = len(integrands2_plus.shape) - 1) + np.sum(integrands2_minus, axis = len(integrands2_minus.shape) - 1)).real*self.delta_omega + #if(np.abs(integrals.imag/integrals.real) > 1.0e-3 and np.abs(integrals.imag) > 1.0e-3): + # raise RuntimeError('Large imaginary part in integrals of spectral functions!', integrals) + gvel1 = np.zeros_like(self.gvels[iqpt, iband, jband]) + gvel2 = np.zeros_like(self.gvels[iqpt, kband, lband]) + gvel_sum = np.zeros_like(kappa_diag, dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel1 = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel2 = np.dot(rot_q, self.gvels[iqpt, kband, lband]) + gvel_sum += np.outer(gvel1.conj(), gvel2) + gvel_sum = gvel_sum.real/vel_fact**2/float(len(self.rotations)) + if(iband == jband and iband == kband and kband == lband): + kappa_diag += integrals*np.sqrt(self.freqs[iqpt,iband]*self.freqs[iqpt, kband]*self.freqs[iqpt,jband]*self.freqs[iqpt, lband])*\ + gvel_sum*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/4.0 + else: + kappa_nondiag += integrals*np.sqrt(self.freqs[iqpt,iband]*self.freqs[iqpt, kband]*self.freqs[iqpt,jband]*self.freqs[iqpt, lband])*\ + gvel_sum*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/4.0 + + kappa_diag += kappa_diag.T + kappa_diag = kappa_diag/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + kappa_nondiag += kappa_nondiag.T + kappa_nondiag = kappa_nondiag/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + print(kappa_diag, kappa_nondiag) + return kappa_diag.real + kappa_nondiag.real + + ################################################################################################################################# + + def calculate_kappa_gk_offdiag(self, temperature, write_lineshapes, energies, gauss_smearing = False): + + """ + Calculation of lattice thermal conductivity using Green-Kubo method if both diagonal and off-diagonal group velocities are available. + + temperature : temperature at which kappa should be calculated. + write_lineshapes : Boolean noting should we write phonon lineshapes on a file + energies : frequency points at which phonon lineshapes should be calculated + + """ + + ls_key = format(temperature, '.1f') + if(ls_key in self.lineshapes.keys()): + print('Lineshapes for this temperature have already been calculated. Continuing ...') + else: + self.get_lineshapes(temperature, write_lineshapes, energies, method = 'fortran', gauss_smearing = gauss_smearing) + #kappa_diag = np.zeros((3,3)) + exponents_plus = np.exp(energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + #integrands_plus = self.lineshapes[ls_key]**2*energies**2*exponents_plus/(exponents_plus - 1.0)**2 + #integrands_plus = self.lineshapes[ls_key]**2*exponents_plus/(exponents_plus - 1.0)**2 + exponents_minus = np.exp(-1.0*energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + #integrands_minus = self.lineshapes[ls_key]**2*energies**2*exponents_minus/(exponents_minus - 1.0)**2 + #integrands_minus = self.lineshapes[ls_key]**2*exponents_minus/(exponents_minus - 1.0)**2 + #integrals = (np.sum(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.sum(integrands_minus, axis = len(integrands_plus.shape) - 1))*self.delta_omega*(SSCHA_TO_THZ)*1.0e12/2.0*2.0*np.pi + #kappa_diag = np.einsum('ijjk,ijjl,ij,ij,ij->kl', self.gvels.conj(), self.gvels, integrals, self.freqs, self.freqs).real*SSCHA_TO_MS**2#(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + #kappa_diag += kappa_diag.T + #kappa_diag = kappa_diag/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + + #kappa_nondiag = np.zeros_like(kappa_diag) + #for iqpt in range(self.nkpt): + # for iband in range(self.nband-1): + # if(self.freqs[iqpt, iband] != 0.0): + # for jband in range(iband, self.nband): + # if(iband != jband and self.freqs[iqpt, jband] != 0.0): + # if(self.group_velocity_mode == 'wigner'): + # vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + # else: + # vel_fact = 1.0 + # integrands_plus = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_plus/(exponents_plus - 1.0)**2 + # integrands_minus = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_minus/(exponents_minus - 1.0)**2 + # integrals = (np.sum(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.sum(integrands_minus, axis = len(integrands_plus.shape) - 1))*self.delta_omega*(SSCHA_TO_THZ*2.0*np.pi)*1.0e12/4.0 + # kappa_nondiag += integrals*(self.freqs[iqpt, iband]**2 + self.freqs[iqpt, jband]**2)**2/self.freqs[iqpt][jband]/self.freqs[iqpt][iband]*\ + # np.outer(self.gvels[iqpt, iband, jband].conj(), self.gvels[iqpt, jband, iband]).real/vel_fact**2\ + # *SSCHA_TO_MS**2#(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + + kappa_diag = np.zeros((3,3)) + kappa_nondiag = np.zeros_like(kappa_diag) + for istar in self.qstar: + for iqpt in istar: + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + for jband in range(self.nband): + if(self.group_velocity_mode != 'wigner'): + vel_fact = 1.0 + else: + vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + if(self.freqs[iqpt, jband] != 0.0 and iband != jband): + integrands_plus = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_plus/(exponents_plus - 1.0)**2 + integrands_minus = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_minus/(exponents_minus - 1.0)**2 + integrals = (np.sum(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.sum(integrands_minus, axis = len(integrands_plus.shape) - 1))*self.delta_omega + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + gvel_sum = np.zeros_like(kappa_diag, dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real/vel_fact**2/float(len(self.rotations)) + #kappa_nondiag += integrals*self.freqs[iqpt,iband]**2*(self.freqs[iqpt, iband]**2 + self.freqs[iqpt, jband]**2)/self.freqs[iqpt][jband]/self.freqs[iqpt][iband]*\ + # gvel_sum*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/4.0 + kappa_nondiag += integrals*self.freqs[iqpt,iband]*self.freqs[iqpt,jband]*gvel_sum*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/2.0 + elif(self.freqs[iqpt, jband] != 0.0 and iband == jband): + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + gvel_sum = np.zeros_like(kappa_diag, dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*vel_fact**2/float(len(self.rotations)) + integrands_plus = self.lineshapes[ls_key][iqpt, iband]**2*exponents_plus/(exponents_plus - 1.0)**2 + integrands_minus = self.lineshapes[ls_key][iqpt, iband]**2*exponents_minus/(exponents_minus - 1.0)**2 + integrals = (np.sum(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.sum(integrands_minus, axis = len(integrands_plus.shape) - 1))*self.delta_omega + kappa_diag += gvel_sum*integrals*self.freqs[iqpt][iband]**2*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/2.0 + # Factor of 1/2 comes from the fact that we multiplied the lineshapes with 2.0 after we calculated them! + + kappa_diag += kappa_diag.T + kappa_diag = kappa_diag/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + + kappa_nondiag += kappa_nondiag.T + kappa_nondiag = kappa_nondiag/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + + return kappa_diag, kappa_nondiag + + ################################################################################################################################# + + def calculate_kappa_gk_AC(self, temperature, write_lineshapes, energies, gauss_smearing = False): + + """ + Calculation of lattice thermal conductivity using Green-Kubo method if both diagonal and off-diagonal group velocities are available. + + temperature : temperature at which kappa should be calculated. + write_lineshapes : Boolean noting should we write phonon lineshapes on a file + energies : frequency points at which phonon lineshapes should be calculated + + """ + + ls_key = format(temperature, '.1f') + if(ls_key in self.lineshapes.keys()): + print('Lineshapes for this temperature have already been calculated. Continuing ...') + else: + self.get_lineshapes(temperature, write_lineshapes, energies, method = 'fortran', gauss_smearing = gauss_smearing) + + ne = len(energies) + exponents_plus = np.exp(energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + exponents_minus = np.exp(-1.0*energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + x = energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature + scale = (np.exp(x) - 1.0)/x + scale = np.insert(scale, 0, 1.0) + + kappa_diag = np.zeros((3,3, ne + 1)) + kappa_diag1 = np.zeros((3,3)) + kappa_nondiag = np.zeros_like(kappa_diag) + for istar in self.qstar: + for iqpt in istar: + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + for jband in range(self.nband): + if(self.group_velocity_mode != 'wigner'): + vel_fact = 1.0 + else: + vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + if(self.freqs[iqpt, jband] != 0.0 and iband != jband): + i1 = np.append(np.append(np.flip(self.lineshapes[ls_key][iqpt, jband]*exponents_minus/(exponents_minus - 1.0)), np.zeros(1, dtype=float)), self.lineshapes[ls_key][iqpt, jband]*exponents_plus/(exponents_plus - 1.0)) + i2 = np.append(np.append(np.flip(self.lineshapes[ls_key][iqpt, iband]/(exponents_minus - 1.0)), np.zeros(1, dtype=float)), self.lineshapes[ls_key][iqpt, iband]/(exponents_plus - 1.0)) + integrals = np.correlate(i2, i1, mode = 'full')[len(i1) - 1:len(i1) + ne ]*self.delta_omega + i3 = np.append(np.append(np.flip(energies), np.zeros(1, dtype=float)), energies) + i4 = np.divide(i2, i3, out=np.zeros_like(i2), where=i3!=0.0) + integrals += np.append(np.zeros(1, dtype=float), energies)*np.correlate(i2, i1, mode = 'full')[len(i1) - 1:len(i1) + ne ]*self.delta_omega*0.5 + #if(np.abs(np.sum(i1*i2)*self.delta_omega - integrals[0]) > np.abs(np.sum(i1*i2)*self.delta_omega)*1.0e-6): + # print(np.sum(i1*i2)*self.delta_omega, integrals[0]) + # raise RuntimeError() + #integrands_plus = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_plus/(exponents_plus - 1.0)**2 + #integrands_minus = self.lineshapes[ls_key][iqpt, iband]*self.lineshapes[ls_key][iqpt, jband]*exponents_minus/(exponents_minus - 1.0)**2 + #integrals1 = (np.sum(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.sum(integrands_minus, axis = len(integrands_plus.shape) - 1))*self.delta_omega + #if(np.abs(integrals1 - integrals[0]) > np.abs(np.sum(i1*i2)*self.delta_omega)*1.0e-6): + # print(integrals1, integrals[0]) + # raise RuntimeError() + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + gvel_sum = np.zeros_like(kappa_diag[:,:,0], dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*vel_fact**2/float(len(self.rotations)) + #kappa_nondiag += integrals*self.freqs[iqpt,iband]*self.freqs[iqpt,jband]*gvel_sum*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/2.0 + kappa_nondiag += np.einsum('ij,k->ijk', gvel_sum, integrals)*self.freqs[iqpt,iband]*self.freqs[iqpt,jband]*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/2.0 + elif(self.freqs[iqpt, jband] != 0.0 and iband == jband): + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + gvel_sum = np.zeros_like(kappa_diag[:,:,0], dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*vel_fact**2/float(len(self.rotations)) + i1 = np.append(np.append(np.flip(self.lineshapes[ls_key][iqpt, iband]*exponents_minus/(exponents_minus - 1.0)), np.zeros(1, dtype=float)), self.lineshapes[ls_key][iqpt, iband]*exponents_plus/(exponents_plus - 1.0)) + i2 = np.append(np.append(np.flip(self.lineshapes[ls_key][iqpt, iband]/(exponents_minus - 1.0)), np.zeros(1, dtype=float)), self.lineshapes[ls_key][iqpt, iband]/(exponents_plus - 1.0)) + integrals = np.correlate(i2, i1, mode = 'full')[len(i1)-1:len(i1) + ne]*self.delta_omega + i3 = np.append(np.append(np.flip(energies), np.zeros(1, dtype=float)), energies) + i4 = np.divide(i2, i3, out=np.zeros_like(i2), where=i3!=0.0) + integrals += np.append(np.zeros(1, dtype=float), energies)*np.correlate(i2, i1, mode = 'full')[len(i1) - 1:len(i1) + ne ]*self.delta_omega*0.5 + #integrands_plus = self.lineshapes[ls_key][iqpt, iband]**2*exponents_plus/(exponents_plus - 1.0)**2 + #integrands_minus = self.lineshapes[ls_key][iqpt, iband]**2*exponents_minus/(exponents_minus - 1.0)**2 + #integrals1 = (np.sum(integrands_plus, axis = len(integrands_plus.shape) - 1) + np.sum(integrands_minus, axis = len(integrands_plus.shape) - 1))*self.delta_omega + #if(np.abs(integrals1 - integrals[0]) > np.abs(integrals1)*1.0e-6): + # print(integrals1, integrals[0]) + # raise RuntimeError('1389') + #kappa_diag1 += gvel_sum*integrals1*self.freqs[iqpt][iband]**2*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/2.0 + kappa_diag += np.einsum('ij,k->ijk', gvel_sum, integrals)*self.freqs[iqpt][iband]**2*SSCHA_TO_MS**2*(SSCHA_TO_THZ)*1.0e12*2.0*np.pi/2.0 + #if(np.any(np.abs(kappa_diag[:,:,0] - kappa_diag1) > np.abs(kappa_diag1)*1.0e-6)): + # print(kappa_diag1, kappa_diag[:,:,0]) + # raise RuntimeError('1394') + # Here freqs[iqpt,iband] is squared instead of power of 4 because imag self-energy in SSCHA is defined as 2*freqs[iqpt,iband]*Gamma[iqpt, iband] + # Factor of 1/2 comes from the fact that we multiplied the lineshapes with 2.0 after we calculated them! + for ie in range(np.shape(kappa_diag)[-1]): + kappa_diag[:,:,ie] += kappa_diag[:,:,ie].T + kappa_diag = kappa_diag/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + + for ie in range(np.shape(kappa_nondiag)[-1]): + kappa_nondiag[:,:,ie] += kappa_nondiag[:,:,ie].T + kappa_nondiag = kappa_nondiag/2.0*HBAR_JS**2/KB/temperature**2/self.volume/float(self.nkpt)*1.0e30*np.pi + + for i in range(3): + for j in range(3): + kappa_diag[i,j] *= scale + kappa_nondiag[i,j] *= scale + + from scipy.signal import hilbert + im_kappa_diag = np.zeros_like(kappa_diag) + im_kappa_nondiag = np.zeros_like(kappa_nondiag) + for i in range(3): + for j in range(3): + im_kappa_diag[i,j] = hilbert(kappa_diag[i,j]).imag + im_kappa_nondiag[i,j] = hilbert(kappa_nondiag[i,j]).imag + + + return kappa_diag, kappa_nondiag, im_kappa_diag, im_kappa_nondiag + + ################################################################################################################################# + + def get_self_energy_at_q(self, iqpt, temperature, energies, mode_mixing = 'no', gauss_smearing = False, write_self_energy = False): + + if(self.delta_omega == 0.0 and energies is not None): + self.delta_omega = energies[1] - energies[0] + + if(not self.set_up_scattering_grids): + self.set_scattering_grids_simple() + + is_q_gamma = CC.Methods.is_gamma(self.fc2.unitcell_structure.unit_cell, self.k_points[iqpt]) + + if(mode_mixing == 'mode_mixing'): + self_energy = thermal_conductivity.get_lf.calculate_self_energy_full(self.freqs[iqpt], self.k_points[iqpt], self.eigvecs[iqpt], is_q_gamma, \ + self.scattering_grids[iqpt].T, self.scattering_weights[iqpt], self.fc2.tensor, self.fc3.tensor, self.fc2.r_vector2, self.fc3.r_vector2, \ + self.fc3.r_vector3, self.dyn.structure.coords.T, self.reciprocal_lattice, self.dyn.structure.get_masses_array(), self.sigmas[iqpt], \ + temperature, energies, True, gauss_smearing, False, len(self.scattering_grids[iqpt]), self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), len(energies)) + elif(mode_mixing == 'no'): + self_energy = thermal_conductivity.get_lf.calculate_self_energy_p(self.freqs[iqpt], self.k_points[iqpt], self.eigvecs[iqpt], is_q_gamma, \ + self.scattering_grids[iqpt].T, self.scattering_weights[iqpt], self.fc2.tensor, self.fc3.tensor, self.fc2.r_vector2, self.fc3.r_vector2, \ + self.fc3.r_vector3, self.dyn.structure.coords.T, self.reciprocal_lattice, self.dyn.structure.get_masses_array(), self.sigmas[iqpt], \ + temperature, energies, True, gauss_smearing, False, len(self.scattering_grids[iqpt]), self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), len(energies)) + else: + raise RuntimeError('The chosen option for mode_mixing(' + mode_mixing + ') does not exist!') + if(gauss_smearing): + from scipy.signal import hilbert + real_part = hilbert(self_energy.imag) + self_energy.real = -1.0*real_part.imag + + self_energy /= float(self.nkpt) + if(write_self_energy): + with open('Self_energy_' + str(iqpt + 1), 'w+') as outfile: + outfile.write('# ' + format('Energy (THz)', STR_FMT)) + for iband in range(self.nband): + if(mode_mixing == 'mode_mixing'): + for jband in range(self.nband): + outfile.write(' ' + format('Self energy ' + str(iband) + ' - ' + str(jband) + ' (THz)', STR_FMT)) + else: + outfile.write(' ' + format('Self energy ' + str(iband) +' (THz)', STR_FMT)) + outfile.write('\n') + for ie in range(len(energies)): + outfile.write(3*' ' + format(energies[ie]*SSCHA_TO_THZ, '.12e')) + for iband in range(self.nband): + if(mode_mixing == 'mode_mixing'): + for jband in range(self.nband): + outfile.write(3*' ' + format(self_energy[ie, iband, jband].real*SSCHA_TO_THZ**2, '.12e') + ' ' + format(self_energy[ie, iband, jband].imag*SSCHA_TO_THZ**2, '.12e')) + else: + outfile.write(3*' ' + format(self_energy[ie, iband].real*SSCHA_TO_THZ**2, '.12e') + ' ' + format(self_energy[ie, iband].imag*SSCHA_TO_THZ**2, '.12e')) + outfile.write('\n') + + return self_energy + + ################################################################################################################################# + + def get_lineshapes(self, temperature, write_lineshapes, energies, method = 'fortran', mode_mixing = 'no', gauss_smearing = False): + + """ + Calculate phonon lineshapes in full Brillouin zone. + + temperature : temperature to calculate lineshapes on. + write_lineshapes : Boolean parameter to write phonon lineshapes as they are being calculated. + energies : the list of frequencies for which lineshapes are calculated. + method : practically only determines how many times fortran routines are called. "fortran" should be much faster. + mode_mixing : Calculate full self-energy matrix ("mode_mixing" gives it in mode basis, "cartesian" gives it in cartesian basis) + gauss_smearing : are we using Gaussian smearing as approximation for energy conservation + """ + + start_time = time.time() + if(self.delta_omega == 0.0 and energies is not None): + self.delta_omega = energies[1] - energies[0] + ls_key = format(temperature, '.1f') + + #if(mode_mixing != 'no'): + # print('WARNING! mode_mixing approach has been selected. Calculation of kappa in GK will not be possible!') + + if(method == 'python'): + + lineshapes = np.zeros((self.nkpt, self.nband, len(energies))) + for ikpt in range(self.nirrkpt): + jkpt = self.qstar[ikpt][0] + print('Calculating lineshapes: ' + format(float(ikpt)/float(self.nirrkpt)*100.0, '.2f') + ' %') + curr_ls = self.get_diag_dynamic_bubble(self.kpoint_grid, self.k_points[jkpt], self.sigmas[jkpt], energies, temperature) + print('Normalization of lineshapes (should be 0.5): ') + print(np.sum(curr_ls, axis=1)*energies[0]) + if(CC.Methods.is_gamma(self.dyn.structure.unit_cell, self.k_points[jkpt])): + for iband in range(self.nband): + if(self.freqs[jkpt, iband] < np.amax(self.freqs[jkpt])*1.0e-6): + curr_ls[iband] = 0.0 + + if(write_lineshapes): + filename = 'Lineshape_irrkpt_' + str(jkpt) + '_T_' + format(temperature, '.1f') + self.write_lineshape(filename, curr_ls, jkpt, energies) + + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + lineshapes[jqpt,:] = curr_ls*2.0 + print('Shape of lineshapes', lineshapes.shape) + self.lineshapes[ls_key] = lineshapes + + elif(method == 'fortran'): + + if(mode_mixing != 'no'): + lineshapes = np.zeros((self.nkpt, self.nband, self.nband, len(energies)), dtype=complex) + else: + lineshapes = np.zeros((self.nkpt, self.nband, len(energies))) + if(not self.set_up_scattering_grids): + self.set_scattering_grids_simple() + + irrqgrid = np.zeros((3, self.nirrkpt)) + scattering_events = np.zeros(self.nirrkpt, dtype=int) + sigmas = np.zeros((self.nirrkpt, self.nband)) + for ikpt in range(self.nirrkpt): + irrqgrid[:,ikpt] = self.k_points[self.qstar[ikpt][0]].copy() + scattering_events[ikpt] = len(self.scattering_grids[ikpt]) + sigmas[ikpt] = self.sigmas[self.qstar[ikpt][0]] + irrqgrid = np.asfortranarray(irrqgrid) + + scattering_grids = [] + weights = [] + for ikpt in range(self.nirrkpt): + for jkpt in range(len(self.scattering_grids[ikpt])): + scattering_grids.append(self.scattering_grids[ikpt][jkpt]) + weights.append(self.scattering_weights[ikpt][jkpt]) + num_scattering_events = len(scattering_grids) + if(sum(scattering_events) != num_scattering_events): + print('Difference in number of scattering events!') + if(sum(weights) != self.scattering_nkpt*self.nirrkpt): + print('Unexpected number of weights!') + scattering_grids = np.asfortranarray(scattering_grids).T + weights = np.asfortranarray(weights) + + classical = False + if(self.cp_mode == 'classical'): + classical = True + + if(mode_mixing == 'mode_mixing'): + curr_ls = thermal_conductivity.get_lf.calculate_lineshapes_mode_mixing(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, self.fc3.r_vector3, \ + self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(),\ + sigmas.T, np.zeros_like(sigmas.T, dtype=float), temperature, gauss_smearing, classical, energies, len(energies), self.nirrkpt, \ + self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + elif(mode_mixing == 'cartesian'): + curr_ls = thermal_conductivity.get_lf.calculate_lineshapes_cartesian(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, self.fc3.r_vector3, \ + self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(),\ + sigmas.T, np.zeros_like(sigmas.T, dtype=float), temperature, gauss_smearing, classical, energies, len(energies), self.nirrkpt, \ + self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + elif(mode_mixing == 'no'): + curr_ls = thermal_conductivity.get_lf.calculate_lineshapes(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, self.fc3.r_vector3, \ + self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(),\ + sigmas.T, np.zeros_like(sigmas.T, dtype=float), temperature, gauss_smearing, classical, energies, len(energies), self.nirrkpt, \ + self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + else: + print('Selected mode_mixing approach: ', mode_mixing) + raise RuntimeError('Do not recognize the selected mode_mixing approach!') + scaled_positions = np.dot(self.dyn.structure.coords, np.linalg.inv(self.unitcell)) + rotations, translations = self.get_sg_in_cartesian() + mapping = get_mapping_of_q_points(self.qstar, self.qpoints, self.rotations) + for ikpt in range(self.nirrkpt): + jkpt = self.qstar[ikpt][0] + if(mode_mixing == 'no'): + if(CC.Methods.is_gamma(self.dyn.structure.unit_cell, self.k_points[jkpt])): + for iband in range(self.nband): + if(self.freqs[jkpt, iband] < np.amax(self.freqs[jkpt])*1.0e-6): + curr_ls[ikpt, iband] = 0.0 + + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + found = False + if(mode_mixing != 'no'): + #for iband in range(self.nband): + # for jband in range(self.nband): + # curr_ls[ikpt, iband,jband,:] = curr_ls[ikpt, iband,jband,:]/np.sum(curr_ls[ikpt,iband,jband,:])/(energies[1]-energies[0]) # Forcing the normalization. Not sure if the best option! + if(iqpt == 0): + lineshapes[jqpt,:,:,:] = curr_ls[ikpt,:,:,:] + found = True + else: + qpt1 = self.qpoints[self.qstar[ikpt][0]] + qpt2 = self.qpoints[jqpt] + if(np.linalg.norm(qpt2 + qpt1 - np.rint(qpt2 + qpt1)) < 1.0e-6): + lineshapes[jqpt,:,:,:] = curr_ls[ikpt,:,:,:].conj() + found = True + else: + irot = mapping[ikpt][iqpt][0][0] + atom_map = self.atom_map[irot] + qpt21 = np.dot(self.rotations[irot].T, qpt1) + kpt21 = np.dot(qpt21, self.reciprocal_lattice) + gamma = construct_symmetry_matrix(rotations[irot], translations[irot], kpt21, self.dyn.structure.coords, atom_map, self.unitcell) + lineshapes[jqpt,:,:,:] = np.einsum('ij,jkl,km->iml', gamma, curr_ls[ikpt,:,:,:], gamma.conj().T) + if(mapping[ikpt][iqpt][0][1]): + lineshapes[jqpt,:,:,:] = lineshapes[jqpt,:,:,:].conj() + #tot_const_diag = 0.0 + #tot_const_nondiag = 0.0 + #for iband in range(len(lineshapes[jqpt])): + # tot_const_diag += np.sum(lineshapes[jqpt][iband][iband]).real*(energies[2] - energies[1]) + # for jband in range(len(lineshapes[jqpt][iband])): + # print('Normalization constant (' + str(iband + 1) + ',' + str(jband + 1)+ '): ', np.sum(lineshapes[jqpt][iband][jband]).real*(energies[2] - energies[1])) + # tot_const_nondiag += np.sum(lineshapes[jqpt][iband][jband]).real*(energies[2] - energies[1]) + #print('Normalization constant diagonal: ', tot_const_diag) + #print('Normalization constant all elements: ', tot_const_diag) + else: + lineshapes[jqpt,:,:] = curr_ls[ikpt,:,:]*2.0 + if(write_lineshapes): + filename = 'Lineshape_irrkpt_' + str(jkpt) + '_T_' + format(temperature, '.1f') + self.write_lineshape(filename, lineshapes[jkpt], jkpt, energies, mode_mixing) + print('Shape of lineshapes', lineshapes.shape) + self.lineshapes[ls_key] = lineshapes + + print('Calculated SSCHA lineshapes in: ', time.time() - start_time) + + ################################################################################################################################# + + def get_lifetimes_selfconsistently(self, temperature, ne, gauss_smearing = False): + + """ + Calculate phonon lifetimes in full Brillouin zone self-consistently. + + temperature : temperature to calculate lineshapes on. + write_lifetimes : Boolean parameter to write phonon lifetimes as they are being calculated. + energies : the list of frequencies for which lineshapes are calculated. + gauss_smearing : are we using Gaussian smearing as approximation for energy conservation + """ + + start_time = time.time() + if(self.delta_omega == 0.0 and not 'energies' in locals()): + self.delta_omega = np.amax(self.freqs)*2.0/float(ne) + energies = np.arange(ne, dtype=float)*self.delta_omega + self.delta_omega + elif(self.delta_omega != 0.0 and not 'energies' in locals()): + energies = np.arange(ne, dtype=float)*self.delta_omega + self.delta_omega + elif(self.delta_omega == 0.0 and energies is not None): + self.delta_omega = energies[1] - energies[0] + lf_key = format(temperature, '.1f') + + lifetimes = np.zeros((self.nkpt, self.nband)) + shifts = np.zeros_like(lifetimes) + if(not self.set_up_scattering_grids): + self.set_scattering_grids_fortran() + + irrqgrid = np.zeros((3, self.nirrkpt)) + scattering_events = np.zeros(self.nirrkpt, dtype=int) + sigmas = np.zeros((self.nirrkpt, self.nband)) + for ikpt in range(self.nirrkpt): + irrqgrid[:,ikpt] = self.k_points[self.qstar[ikpt][0]].copy() + scattering_events[ikpt] = len(self.scattering_grids[ikpt]) + sigmas[ikpt] = self.sigmas[self.qstar[ikpt][0]] + irrqgrid = np.asfortranarray(irrqgrid) + + scattering_grids = [] + weights = [] + for ikpt in range(self.nirrkpt): + for jkpt in range(len(self.scattering_grids[ikpt])): + scattering_grids.append(self.scattering_grids[ikpt][jkpt]) + weights.append(self.scattering_weights[ikpt][jkpt]) + num_scattering_events = len(scattering_grids) + if(sum(scattering_events) != num_scattering_events): + print('Difference in number of scattering events!') + if(sum(weights) != self.scattering_nkpt*self.nirrkpt): + print('Unexpected number of weights!') + scattering_grids = np.asfortranarray(scattering_grids).T + weights = np.asfortranarray(weights) + + classical = False + if(self.cp_mode == 'classical'): + classical = True + + selfengs = thermal_conductivity.get_lf.calculate_lifetimes_selfconsistently(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, self.fc3.r_vector3, \ + self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(),\ + sigmas.T, np.zeros_like(sigmas.T, dtype=float), temperature, gauss_smearing, classical, energies, len(energies), self.nirrkpt, \ + self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + + for ikpt in range(self.nirrkpt): + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + lifetimes[jqpt,:] = -1.0*np.divide(np.ones_like(selfengs[ikpt].imag, dtype=float), selfengs[ikpt].imag, out=np.zeros_like(selfengs[ikpt].imag), where=selfengs[ikpt].imag!=0.0)/2.0 + shifts[jqpt,:] = selfengs[ikpt].real + + self.lifetimes[lf_key] = lifetimes/(SSCHA_TO_THZ*2.0*np.pi*1.0e12) + self.freqs_shifts[lf_key] = shifts + + print('Calculated SSCHA lifetimes in: ', time.time() - start_time) + + ################################################################################################################################## + + def get_lineshapes_along_the_line(self, temperature, ne = 1000, filename = 'spectral_function_along_path', gauss_smearing = True, mode_mixing = 'no', kpoints = None, start_nkpts = 100, smear = None): + + """ + Calculate phonon lineshapes for specific k-points. + + temperature : temperature to calculate lineshapes on. + ne : Number of frequency points for the lineshapes + gauss_smearing : are we using Gaussian smearing as approximation for energy conservation + mode_mixing : If true will calculate full phonon spectral function + kpoints : the list of kpoints in reduced coordinates to calculate lineshapes for. + If not provided generate them using seekpath + start_nkpts : Number of k points along the path. Will differ from the final number of points! + smear : Smearing used for energy conservation. + + """ + + if(not __SEEKPATH__ and kpoints is None): + raise RuntimeError('To automatically generated a line in reciprocal space one need seekpath. First do "pip install seekpath"!') + + start_time = time.time() + + tics = [] + distances = [] + segments = [] + if(kpoints is None): + rat = np.dot(self.dyn.structure.coords, np.linalg.inv(self.dyn.structure.unit_cell)) + sym = np.unique(self.dyn.structure.atoms) + nt = np.zeros(len(rat)) + for i in range(len(rat)): + for j in range(len(sym)): + if(self.dyn.structure.atoms[i] == sym[j]): + nt[i] = j + 1 + break + path = seekpath.getpaths.get_path((self.dyn.structure.unit_cell, rat, nt)) + kpoints, distances, segments = get_kpoints_in_path(path, start_nkpts, self.reciprocal_lattice) + for i in range(len(distances)): + if(i == 0): + tics.append(distances[0]) + elif(np.abs(distances[i] - distances[i-1]) < 1.0e-12): + tics.append(distances[i]) + tics.append(distances[-1]) + if(len(tics) - 1 != len(segments)): + print('Number of tics and segments does not match! Weird!') + print(len(tics), len(segments) + 1) + kpoints = np.array(kpoints) + else: + kpoints = np.array(kpoints)#np.dot(kpoints, self.reciprocal_lattice) + distances = np.zeros(len(kpoints), dtype=float) + for ikpt in range(1, len(kpoints)): + distances[ikpt] = distances[ikpt - 1] + np.linalg.norm(kpoints[ikpt] - kpoints[ikpt - 1]) + if(len(distances) > 1): + distances /= distances[-1] + nkpts = len(kpoints) + freqs = np.zeros((nkpts, self.nband)) + for ikpt in range(nkpts): + freqs[ikpt], _, _ = self.get_frequency_at_q(kpoints[ikpt]) + + maxfreq = np.amax(freqs)*2.1 + energies = (np.arange(ne, dtype=float) + 1.0)/float(ne)*maxfreq + + if(mode_mixing != 'no'): + lineshapes = np.zeros((nkpts, self.nband, self.nband, ne), dtype = complex) + else: + lineshapes = np.zeros((nkpts, self.nband, ne)) + + irrqgrid = kpoints.T + scattering_events = np.zeros(nkpts, dtype=int) + if(smear is None): + # One has to provide smearing. Otherwise we are using the largest smearing from the full Brillouin zone! + sigmas = np.zeros((nkpts, self.nband)) + sigmas[:,:] = np.amax(self.sigmas) + else: + if(nkpts > 1): + if(np.shape(smear) == np.shape(freqs)): + sigmas = smear + else: + print(np.shape(smear), np.shape(freqs)) + raise RuntimeError('Smearing array does not match shape of the kpoints!') + else: + if(len(smear) == len(freqs[0])): + sigmas = smear + else: + raise RuntimeError('Smearing array does not match shape of the kpoints!') + for ikpt in range(nkpts): + scattering_events[ikpt] = len(self.scattering_qpoints) + irrqgrid = np.asfortranarray(irrqgrid) + + scattering_grids = [] + weights = [] + for ikpt in range(nkpts): + for jkpt in range(len(self.scattering_qpoints)): + scattering_grids.append(self.scattering_k_points[jkpt]) + weights.append(1) + num_scattering_events = len(scattering_grids) + if(sum(scattering_events) != num_scattering_events): + print('Difference in number of scattering events!') + print(sum(scattering_events), num_scattering_events) + if(sum(weights) != self.scattering_nkpt*nkpts): + print('Unexpected number of weights!') + print(sum(weights), self.scattering_nkpt*nkpts) + scattering_grids = np.asfortranarray(scattering_grids).T + weights = np.asfortranarray(weights) + + classical = False + if(self.cp_mode == 'classical'): + classical = True + + if(mode_mixing == 'mode_mixing'): + curr_ls = thermal_conductivity.get_lf.calculate_lineshapes_mode_mixing(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, self.fc3.r_vector3, \ + self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(),\ + sigmas.T, np.zeros_like(sigmas.T, dtype=float), temperature, gauss_smearing, classical, energies, len(energies), nkpts, \ + self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + elif(mode_mixing == 'cartesian'): + curr_ls = thermal_conductivity.get_lf.calculate_lineshapes_cartesian(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, self.fc3.r_vector3, \ + self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(),\ + sigmas.T, np.zeros_like(sigmas.T, dtype=float), temperature, gauss_smearing, classical, energies, len(energies), nkpts, \ + self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + elif(mode_mixing == 'no'): + curr_ls = thermal_conductivity.get_lf.calculate_lineshapes(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, self.fc3.r_vector3, \ + self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(),\ + sigmas.T, np.zeros_like(sigmas.T, dtype=float), temperature, gauss_smearing, classical, energies, len(energies), nkpts, \ + self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + else: + raise RuntimeError('Unknown mode_mixing method! ') + + for ikpt in range(nkpts): + if(mode_mixing == 'no'): + if(CC.Methods.is_gamma(self.dyn.structure.unit_cell, kpoints[ikpt])): + for iband in range(self.nband): + if(freqs[ikpt, iband] < np.amax(freqs[ikpt])*1.0e-6): + curr_ls[ikpt, iband] = 0.0 + if(mode_mixing != 'no'): + lineshapes[ikpt,:,:,:] = curr_ls[ikpt,:,:,:]*2.0 + tot_const_diag = 0.0 + tot_const_nondiag = 0.0 + for iband in range(len(lineshapes[ikpt])): + tot_const_diag += np.sum(lineshapes[ikpt][iband][iband]).real*(energies[2] - energies[1]) + for jband in range(len(lineshapes[ikpt][iband])): + #print('Normalization constant (' + str(iband + 1) + ',' + str(jband + 1)+ '): ', np.sum(lineshapes[ikpt][iband][jband])*(energies[2] - energies[1])) + tot_const_nondiag += np.sum(lineshapes[ikpt][iband][jband]).real*(energies[2] - energies[1]) + print('Normalization constant diagonal: ', tot_const_diag) + print('Normalization constant all elements: ', tot_const_diag) + else: + lineshapes[ikpt,:,:] = curr_ls[ikpt,:,:]*2.0 + for iband in range(len(lineshapes[ikpt])): + print('Normalization constant: ', np.sum(lineshapes[ikpt][iband])*(energies[2] - energies[1])) + + with open('Qpoints_along_line', 'w+') as outfile: + for ikpt in range(nkpts): + qpt = np.dot(kpoints[ikpt], np.linalg.inv(self.reciprocal_lattice)) + for i in range(3): + outfile.write(3*' ' + format(qpt[i], '.12f')) + outfile.write('\n') + + with open(filename, 'w+') as outfile: + if(len(tics) > 0 and len(segments) > 0): + outfile.write('# Path and tics: \n') + outfile.write('# ' + segments[0][0] + ' ' + format(tics[0], '.8f')) + for i in range(len(segments) - 1): + if(segments[i][1] == segments[i + 1][0]): + outfile.write(' ' + segments[i][1] + ' ' + format(tics[i+1], '.8f')) + else: + outfile.write(' ' + segments[i][1] + ' | ' + segments[i+1][0] + ' ' + format(tics[i+1], '.8f')) + outfile.write(' ' + segments[len(segments)-1][1] + ' ' + format(tics[len(segments)], '.8f') + '\n') + outfile.write('# normalized distance energy (THz) lineshape (1/THz) \n') + else: + outfile.write('# User defined kpoint line ... \n') + for ikpt in range(nkpts): + for ie in range(ne): + outfile.write(' ' + format(distances[ikpt], '.12e')) + outfile.write(' ' + format(energies[ie]*SSCHA_TO_THZ, '.12e')) + diag = complex(0.0,0.0) + for iband in range(self.nband): + if(mode_mixing != 'no'): + for jband in range(self.nband): + outfile.write(' ' + format(lineshapes[ikpt,iband, jband, ie].real/SSCHA_TO_THZ, '.12e')) + outfile.write(' ' + format(lineshapes[ikpt,iband, jband, ie].imag/SSCHA_TO_THZ, '.12e')) + if(iband == jband): + diag += lineshapes[ikpt,iband, jband, ie] + else: + outfile.write(' ' + format(lineshapes[ikpt,iband,ie]/SSCHA_TO_THZ, '.12e')) + if(mode_mixing != 'no'): + outfile.write(3*' ' + format(np.sum(lineshapes[ikpt, :, :, ie]).real/SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(np.sum(lineshapes[ikpt, :, :, ie]).imag/SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(diag.real/SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(diag.imag/SSCHA_TO_THZ, '.12e')) + else: + outfile.write(3*' ' + format(np.sum(lineshapes[ikpt, :, ie])/SSCHA_TO_THZ, '.12e')) + outfile.write('\n') + outfile.write('\n') + + with open(filename + '_phonons', 'w+') as outfile: + if(len(tics) > 0 and len(segments) > 0): + outfile.write('# Path and tics: \n') + outfile.write('# ' + segments[0][0] + ' ' + format(tics[0], '.8f')) + for i in range(len(segments) - 1): + if(segments[i][1] == segments[i + 1][0]): + outfile.write(' ' + segments[i][1] + ' ' + format(tics[i+1], '.8f')) + else: + outfile.write(' ' + segments[i][1] + ' | ' + segments[i+1][0] + ' ' + format(tics[i+1], '.8f')) + outfile.write(' ' + segments[-1][1] + ' ' + format(tics[-1], '.8f') + '\n') + else: + outfile.write('# User defined kpoints ... \n') + outfile.write('# normalized distance frequency (THz) \n') + for ikpt in range(nkpts): + outfile.write(' ' + format(distances[ikpt], '.12e')) + for iband in range(self.nband): + outfile.write(' ' + format(freqs[ikpt,iband]*SSCHA_TO_THZ, '.12e')) + outfile.write('\n') + + print('Calculated SSCHA lineshapes in: ', time.time() - start_time) + return energies, lineshapes + + ################################################################################################################################## + def write_lineshape(self, filename, curr_ls, jkpt, energies, mode_mixing): + + """ + + Function to write phonon lineshapes onto a file. + + filename : title of the file at which lineshape is to be written. + curr_ls : lineshape to be written + jkpt : the index of the k point for which lineshapes are to be written + energies : frequencies at which lineshapes have been calculated + mode_mixing : Defines the shape of input curr_ls. if true curr_ls = (nband, nband, ne) + + """ + + with open(filename, 'w+') as outfile: + outfile.write('# SSCHA frequencies (THz) \n') + outfile.write('#' + 15*' ') + for iband in range(self.nband): + outfile.write(3*' ' + format(self.freqs[jkpt, iband]*SSCHA_TO_THZ, '.12e')) + outfile.write('\n') + outfile.write('# ' + format('Omega (THz)', STR_FMT)) + outfile.write(' ' + format('Spectral function (1/THz)', STR_FMT)) + outfile.write('\n') + for ien in range(len(energies)): + diag_lineshape = complex(0.0, 0.0) + outfile.write(3*' ' + format(energies[ien]*SSCHA_TO_THZ, '.12e')) + for iband in range(self.nband): + if(mode_mixing != 'no'): + for jband in range(self.nband): + outfile.write(3*' ' + format(curr_ls[iband, jband, ien].real/SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(curr_ls[iband, jband, ien].imag/SSCHA_TO_THZ, '.12e')) + if(iband == jband): + diag_lineshape += curr_ls[iband, iband, ien] + else: + outfile.write(3*' ' + format(curr_ls[iband, ien]/SSCHA_TO_THZ, '.12e')) + if(mode_mixing != 'no'): + outfile.write(3*' ' + format(np.sum(curr_ls[:, :, ien]).real/SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(np.sum(curr_ls[:, :, ien]).imag/SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(diag_lineshape.real/SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(diag_lineshape.imag/SSCHA_TO_THZ, '.12e')) + else: + outfile.write(3*' ' + format(np.sum(curr_ls[:, ien])/SSCHA_TO_THZ, '.12e')) + outfile.write('\n') + + ################################################################################################################################## + + def get_heat_capacity(self, temperature, shifted = False): + + """ + Calculate phonon mode heat capacity at temperature. + + shifted :: Boolean to tell us whether we shift frequencies by the real part of the self-energy! + + """ + + cp_key = format(temperature, '.1f') + if(shifted): + freqs = self.freqs + self.freqs_shifts[cp_key] + else: + freqs = self.freqs.copy() + cp = np.zeros_like(self.freqs) + for ikpt in range(self.nkpt): + for iband in range(self.nband): + cp[ikpt, iband] = heat_capacity(freqs[ikpt, iband]*SSCHA_TO_THZ*1.0e12, temperature, HPLANCK, KB, cp_mode = self.cp_mode) + self.cp[cp_key] = cp + + + ################################################################################################################################## + + def calculate_kappa_srta_diag(self, temperature, ne, write_lifetimes, gauss_smearing = False, isotope_scattering = False, isotopes = None, lf_method = 'fortran-LA'): + + """ + Calculate lattice thermal conductivity using single relaxation time approximation at temperature. Calculates only including diagonal term. + + """ + + lf_key = format(temperature, '.1f') + cp_key = format(temperature, '.1f') + if(lf_key in self.lifetimes.keys()): + print('Lifetimes for this temperature have already been calculated. Continuing ...') + else: + print('Calculating phonon lifetimes for ' + format(temperature, '.1f') + ' K temperature!') + self.get_lifetimes(temperature, ne, gauss_smearing = gauss_smearing, isotope_scattering = isotope_scattering, isotopes = isotopes, method = lf_method) + if(cp_key in self.cp.keys()): + print('Phonon mode heat capacities for this temperature have already been calculated. Continuing ...') + else: + print('Calculating phonon mode heat capacities for ' + format(temperature, '.1f') + ' K temperature!') + if(lf_method == 'SC'): + self.get_heat_capacity(temperature) + else: + self.get_heat_capacity(temperature) + + if(write_lifetimes): + self.write_transport_properties_to_file(temperature, isotope_scattering) + + kappa = np.zeros((3,3)) + for istar in self.qstar: + for iqpt in istar: + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + gvel = np.zeros_like(self.gvels[iqpt, iband]) + gvel_sum = np.zeros_like(kappa, dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real/float(len(self.rotations)) + kappa += self.cp[cp_key][iqpt][iband]*gvel_sum*self.lifetimes[lf_key][iqpt][iband] + kappa += kappa.T + kappa = kappa/2.0*SSCHA_TO_MS**2 + + return kappa + + ################################################################################################################################## + + def calculate_kappa_srta_offdiag(self, temperature, ne, write_lifetimes, gauss_smearing = False, isotope_scattering = False, isotopes = None, lf_method = 'fortran-LA'): + + """ + Calculates both diagonal and off diagonal contribution to the lattice thermal conductivity (Nature Physics volume 15, pages 809–813 (2019)). + Quite slow! + + """ + + lf_key = format(temperature, '.1f') + cp_key = format(temperature, '.1f') + if(lf_key in self.lifetimes.keys()): + print('Lifetimes for this temperature have already been calculated. Continuing ...') + else: + self.get_lifetimes(temperature, ne, gauss_smearing = gauss_smearing, isotope_scattering = isotope_scattering, isotopes = isotopes, method = lf_method) + if(cp_key in self.cp.keys()): + print('Phonon mode heat capacities for this temperature have already been calculated. Continuing ...') + else: + if(lf_method == 'SC'): + self.get_heat_capacity(temperature) + else: + self.get_heat_capacity(temperature) + scatt_rates = np.divide(np.ones_like(self.lifetimes[lf_key], dtype=float), self.lifetimes[lf_key], out=np.zeros_like(self.lifetimes[lf_key]), where=self.lifetimes[lf_key]!=0.0)/(SSCHA_TO_THZ*1.0e12*2.0*np.pi) + if(write_lifetimes): + self.write_transport_properties_to_file(temperature, isotope_scattering) + + kappa_diag = np.zeros((3,3)) + kappa_nondiag = np.zeros_like(kappa_diag) + for istar in self.qstar: + for iqpt in istar: + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0 and scatt_rates[iqpt, iband] != 0.0): + for jband in range(self.nband): + #if(self.freqs[iqpt, jband] != 0.0 and np.abs(self.freqs[iqpt, jband] - self.freqs[iqpt, iband]) > 1.0e-4/SSCHA_TO_THZ and iband != jband): + if(self.freqs[iqpt, jband] != 0.0 and scatt_rates[iqpt, jband] != 0.0 and iband != jband): + if(self.group_velocity_mode == 'wigner'): + vel_fact = 1.0 + else: + vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + gvel_sum = np.zeros_like(kappa_diag, dtype=complex) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*vel_fact**2 + a1 = (self.freqs[iqpt, jband] + self.freqs[iqpt, iband])/4.0 + a2 = self.cp[cp_key][iqpt, iband]/self.freqs[iqpt, iband] + self.cp[cp_key][iqpt, jband]/self.freqs[iqpt, jband] + a3 = 0.5*(scatt_rates[iqpt, iband] + scatt_rates[iqpt, jband]) + a4 = ((self.freqs[iqpt,iband] - self.freqs[iqpt,jband]))**2 + (scatt_rates[iqpt, iband] + scatt_rates[iqpt, jband])**2/4.0 + kappa_nondiag += a1*a2*a3/a4*gvel_sum/2.0/np.pi/float(len(self.rotations))#*float(len(istar)) + elif(self.freqs[iqpt, jband] != 0.0 and iband == jband): + if(self.group_velocity_mode == 'wigner'): + vel_fact = 1.0 + else: + vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + gvel_sum = np.zeros_like(kappa_diag, dtype=complex) + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real*vel_fact**2 + a1 = (self.freqs[iqpt, jband] + self.freqs[iqpt, iband])/4.0 + a2 = self.cp[cp_key][iqpt, iband]/self.freqs[iqpt, iband] + self.cp[cp_key][iqpt, jband]/self.freqs[iqpt, jband] + a3 = 0.5*(scatt_rates[iqpt, iband] + scatt_rates[iqpt, jband]) + a4 = (self.freqs[iqpt,iband] - self.freqs[iqpt,jband])**2 + (scatt_rates[iqpt, iband] + scatt_rates[iqpt, jband])**2/4.0 + kappa_diag += a1*a2*a3/a4*gvel_sum/2.0/np.pi/float(len(self.rotations))#*float(len(istar)) + + kappa_diag = kappa_diag/SSCHA_TO_THZ/1.0e12 + kappa_nondiag = kappa_nondiag/SSCHA_TO_THZ/1.0e12 + + kappa_diag += kappa_diag.T + kappa_nondiag += kappa_nondiag.T + kappa_diag = kappa_diag/2.0*SSCHA_TO_MS**2#*(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + kappa_nondiag = kappa_nondiag/2.0*SSCHA_TO_MS**2#(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + + + return kappa_diag, kappa_nondiag + + ################################################################################################################################################################################ + + def calculate_kappa_srta_offdiag_isaeva(self, temperature, ne, write_lifetimes, gauss_smearing = False, isotope_scattering = False, isotopes = None, lf_method = 'fortran-LA'): + + """ + Calculates both diagonal and off diagonal contribution to the lattice thermal conductivity (Nature Communications volume 10, Article number: 3853 (2019)). + Quite slow! + + """ + + lf_key = format(temperature, '.1f') + cp_key = format(temperature, '.1f') + if(lf_key in self.lifetimes.keys()): + print('Lifetimes for this temperature have already been calculated. Continuing ...') + else: + self.get_lifetimes(temperature, ne, gauss_smearing = gauss_smearing, isotope_scattering = isotope_scattering, isotopes = isotopes, method = lf_method) + if(cp_key in self.cp.keys()): + print('Phonon mode heat capacities for this temperature have already been calculated. Continuing ...') + else: + self.get_heat_capacity(temperature) + scatt_rates = np.divide(np.ones_like(self.lifetimes[lf_key], dtype=float), self.lifetimes[lf_key], out=np.zeros_like(self.lifetimes[lf_key]), where=self.lifetimes[lf_key]!=0.0)/(SSCHA_TO_THZ*2.0*np.pi*1.0e12)/2.0 + if(write_lifetimes): + self.write_transport_properties_to_file(temperature, isotope_scattering) + #kappa_diag = np.einsum('ij,ijjk,ijjl,ij->kl',self.cp[cp_key],self.gvels.conj(),self.gvels,self.lifetimes[lf_key]).real + + pops = np.zeros_like(self.freqs) + for iqpt in range(self.nkpt): + for iband in range(self.nband): + pops[iqpt, iband] = bose_einstein(self.freqs[iqpt, iband]*SSCHA_TO_THZ*1.0e12, temperature, HPLANCK, KB, cp_mode = self.cp_mode) + + kappa_diag = np.zeros((3,3)) + kappa_nondiag = np.zeros_like(kappa_diag) + for iqpt in range(self.nkpt): + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + for jband in range(self.nband): + if(self.group_velocity_mode == 'wigner'): + vel_fact = 2.0*np.sqrt(self.freqs[iqpt, jband]*self.freqs[iqpt, iband])/(self.freqs[iqpt, jband] + self.freqs[iqpt, iband]) # as per Eq.34 in Caldarelli et al + else: + vel_fact = 1.0 + if(self.freqs[iqpt, jband] != 0.0 and self.freqs[iqpt, jband] - self.freqs[iqpt, iband] != 0.0 and iband != jband): + gvel_sum = np.zeros_like(kappa_diag, dtype=complex) + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real/vel_fact**2/float(len(self.rotations)) + kappa_nondiag += self.freqs[iqpt, iband]*self.freqs[iqpt, jband]*(pops[iqpt, iband] - pops[iqpt, jband])/(self.freqs[iqpt, jband] - self.freqs[iqpt, iband])*\ + gvel_sum*(scatt_rates[iqpt, iband] + scatt_rates[iqpt, jband])/\ + ((self.freqs[iqpt,iband] - self.freqs[iqpt,jband])**2 + (scatt_rates[iqpt, iband] + scatt_rates[iqpt, jband])**2) + elif(self.freqs[iqpt, jband] != 0.0 and iband == jband): + gvel_sum = np.zeros_like(kappa_diag, dtype=complex) + gvel = np.zeros_like(self.gvels[iqpt, iband, jband]) + for r in self.rotations: + rot_q = np.dot(self.reciprocal_lattice.T, np.dot(r.T, np.linalg.inv(self.reciprocal_lattice.T))) + gvel = np.dot(rot_q, self.gvels[iqpt, iband, jband]) + gvel_sum += np.outer(gvel.conj(), gvel) + gvel_sum = gvel_sum.real/vel_fact**2/float(len(self.rotations)) + kappa_diag += self.cp[cp_key][iqpt][iband]*gvel_sum*self.lifetimes[lf_key][iqpt][iband] + + kappa_nondiag = kappa_nondiag*HPLANCK/temperature/2.0/np.pi + + kappa_diag += kappa_diag.T + kappa_nondiag += kappa_nondiag.T + kappa_diag = kappa_diag/2.0*SSCHA_TO_MS**2#*(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + kappa_nondiag = kappa_nondiag/2.0*SSCHA_TO_MS**2#(SSCHA_TO_THZ*100.0*2.0*np.pi)**2 + + return kappa_diag, kappa_nondiag + + #################################################################################################################################### + + def get_frequencies(self): + + """ + Get frequencies on a grid which is used for Brillouin zone integration (in THz). + + """ + + return self.freqs*SSCHA_TO_THZ + + #################################################################################################################################### + + def get_scattering_rates_isotope(self, isotopes = None): + + """ + + Still not implemented! + + """ + + start_time = time.time() + self.scattering_rates_isotope = np.zeros((self.nkpt, self.nband)) + if(isotopes is None): + isotopes = [] + for i in range(len(self.dyn.structure.atoms)): + isotopes.append(natural_isotopes[self.dyn.structure.atoms[i]]) + for i in range(len(isotopes)): + tot_w = 0.0 + for j in range(len(isotopes[i])): + tot_w += isotopes[i][j][0] + if(abs(tot_w - 1.0) > 1.0e-3): + print('Sum of the isotopes percentages is not one!') + + av_mass = np.zeros(len(isotopes)) + for i in range(len(isotopes)): + for j in range(len(isotopes[i])): + av_mass[i] += isotopes[i][j][0]*isotopes[i][j][1] + print('Average mass of the ' + self.dyn.structure.atoms[i] + ' is ' + format(av_mass[i], '.4f') + '.') + + g_factor = np.zeros(len(isotopes)) + for i in range(len(isotopes)): + for j in range(len(isotopes[i])): + g_factor[i] += isotopes[i][j][0]*(1.0 - isotopes[i][j][1]/av_mass[i])**2 + print('G factor of ' + self.dyn.structure.atoms[i] + ' is ' + format(g_factor[i], '.4f') + '.') + + for ikpt in range(self.nirrkpt): + jkpt = self.qstar[ikpt][0] + curr_scatt_rate = self.get_scattering_rates_isotope_at_q(jkpt, g_factor, av_mass) + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + self.scattering_rates_isotope[jqpt,:] = curr_scatt_rate + + self.got_scattering_rates_isotopes = True + print('Calculated scattering rates due to the isotope scattering in ' + format(time.time() - start_time, '.2e'), ' seconds!') + + #################################################################################################################################### + + def get_scattering_rates_isotope_at_q(self, iqpt, g_factor, av_mass): + + scatt_rate = np.zeros(self.nband) + for iband in range(self.nband): + for jqpt in range(self.nkpt): + for jband in range(self.nband): + factor = 0.0 + for iat in range(len(self.dyn.structure.atoms)): + factor += g_factor[iat]*np.dot(self.eigvecs[iqpt,3*iat:3*(iat+1),iband].conj(), self.eigvecs[jqpt,3*iat:3*(iat+1),jband])**2 + scatt_rate[iband] += gaussian(self.freqs[iqpt,iband], self.freqs[jqpt,jband], self.sigmas[iqpt, iband])*factor + if(np.isnan(scatt_rate[iband])): + print(gaussian(self.freqs[iqpt,iband], self.freqs[jqpt,jband], self.sigmas[iqpt, iband]), factor) + print(g_factor[iat]) + raise RuntimeError('NAN!') + scatt_rate[iband] = np.pi*scatt_rate[iband]/2.0/float(self.nkpt)*self.freqs[iqpt, iband]**2 + return scatt_rate + + #################################################################################################################################### + + def get_lifetimes(self, temperature, ne, gauss_smearing = False, isotope_scattering = True, isotopes = None, method = 'fortran-LA'): + + """ + Get phonon lifetimes in the full Brillouin zone at temperature. + + ne : Number of frequencies used in self-consistent solution. + gauss_smearing : If true will use the Gaussian function to satisfy conservation laws, instead Lorentzian (only fortran) + isotope_scattering : If true will calculate the scattering rates due to isotope concentration + isotopes : The relative concentration and masses of isotopes + method : Method by which phonon lifetimes are to be calculated. + fortran/python : practically means only how many times fortran routine is being called. "fortran" much faster. + LA/P : Approximation used for the lifetimes. + LA means one shot approximation defined in J. Phys.: Condens. Matter 33 363001 . Default value. + P means perturbative approximation. The one used by most other codes! + SC : Solve for lifetimes and frequency shifts self-consistently! + """ + + if(not self.set_up_scattering_grids): + #if(gauss_smearing): + # self.set_scattering_grids_simple() + #else: + self.set_scattering_grids_fortran() + + if(isotope_scattering and not self.got_scattering_rates_isotopes): + self.get_scattering_rates_isotope(isotopes) + + start_time = time.time() + lf_key = format(temperature, '.1f') + print('Calculating lifetimes at: ' + lf_key + ' K.') + + if(method == 'python-LA'): + + lifetimes = np.zeros((self.nkpt, self.nband)) + shifts = np.zeros((self.nkpt, self.nband)) + for ikpt in range(self.nirrkpt): + jkpt = self.qstar[ikpt][0] + print('Calculating lifetimes: ' + format(float(ikpt)/float(self.nirrkpt)*100.0, '.2f') + ' %') + curr_freq, curr_shift, curr_lw = self.get_lifetimes_at_q(self.kpoint_grid, self.k_points[jkpt], self.sigmas[jkpt], temperature) + curr_lf = np.divide(np.ones_like(curr_lw, dtype=float), curr_lw, out=np.zeros_like(curr_lw), where=curr_lw!=0.0)/2.0 + if(CC.Methods.is_gamma(self.dyn.structure.unit_cell, self.k_points[jkpt])): + for iband in range(self.nband): + if(self.freqs[jkpt, iband] < np.amax(self.freqs[jkpt])*1.0e-6): + curr_lf[iband] = 0.0 + curr_shift[iband] = 0.0 + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + lifetimes[jqpt,:] = curr_lf + shifts[jqpt,:] = curr_shift + print('Shape of lifetimes', lifetimes.shape) + self.lifetimes[lf_key] = lifetimes/(SSCHA_TO_THZ*2.0*np.pi*1.0e12) + self.freqs_shifts[lf_key] = shifts + + elif(method == 'python-P'): + + lifetimes = np.zeros((self.nkpt, self.nband)) + shifts = np.zeros((self.nkpt, self.nband)) + for ikpt in range(self.nirrkpt): + jkpt = self.qstar[ikpt][0] + print('Calculating lifetimes: ' + format(float(ikpt)/float(self.nirrkpt)*100.0, '.2f') + ' %') + selfnrg = np.diag(self.get_just_diag_dynamic_bubble(self.kpoint_grid, self.k_points[jkpt], self.sigmas[jkpt], self.freqs[jkpt], temperature)) + curr_lf = -1.0*np.divide(selfnrg.imag, self.freqs[jkpt], out=np.zeros_like(self.freqs[jkpt]), where=self.freqs[jkpt]!=0.0)/2.0 + curr_shifts = selfnrg.real + if(CC.Methods.is_gamma(self.dyn.structure.unit_cell, self.k_points[jkpt])): + for iband in range(self.nband): + if(self.freqs[jkpt, iband] < np.amax(self.freqs[jkpt])*1.0e-6): + curr_lf[iband] = 0.0 + curr_shifts[iband] = 0.0 + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + lifetimes[jqpt,:] = np.divide(np.ones_like(curr_lf, dtype=float), curr_lf, out=np.zeros_like(curr_lf), where=curr_lf!=0.0)/2.0 + shifts[jqpt,:] = curr_shifts + print('Shape of lifetimes', lifetimes.shape) + self.lifetimes[lf_key] = lifetimes/(SSCHA_TO_THZ*2.0*np.pi*1.0e12) + self.freqs_shifts[lf_key] = shifts + + elif(method == 'fortran-LA'): + + print('Calculating lifetimes in fortran, lorentzian approximation!') + irrqgrid = np.zeros((3, self.nirrkpt)) + scattering_events = np.zeros(self.nirrkpt, dtype=int) + sigmas = np.zeros((self.nirrkpt, self.nband)) + for ikpt in range(self.nirrkpt): + irrqgrid[:,ikpt] = self.k_points[self.qstar[ikpt][0]].copy() + scattering_events[ikpt] = len(self.scattering_grids[ikpt]) + sigmas[ikpt] = self.sigmas[self.qstar[ikpt][0]] + irrqgrid = np.asfortranarray(irrqgrid) + lifetimes = np.zeros((self.nkpt, self.nband)) + shifts = np.zeros((self.nkpt, self.nband)) + + scattering_grids = [] + weights = [] + for ikpt in range(self.nirrkpt): + for jkpt in range(len(self.scattering_grids[ikpt])): + scattering_grids.append(self.scattering_grids[ikpt][jkpt]) + weights.append(self.scattering_weights[ikpt][jkpt]) + num_scattering_events = len(scattering_grids) + if(sum(scattering_events) != num_scattering_events): + print('Difference in number of scattering events!') + if(sum(weights) != self.nkpt*self.nirrkpt): + print('Unexpected number of weights!') + scattering_grids = np.asfortranarray(scattering_grids).T + weights = np.asfortranarray(weights) + + classical = False + if(self.cp_mode == 'classical'): + classical = True + + selfengs = thermal_conductivity.get_lf.calculate_lifetimes(irrqgrid, scattering_grids, weights, scattering_events, \ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, \ + self.fc3.r_vector3, self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(), sigmas.T, temperature, \ + gauss_smearing, classical, self.nirrkpt, self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor),\ + num_scattering_events) + + for ikpt in range(self.nirrkpt): + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + lifetimes[jqpt,:] = -1.0*np.divide(np.ones_like(selfengs[ikpt].imag, dtype=float), selfengs[ikpt].imag, out=np.zeros_like(selfengs[ikpt].imag), where=selfengs[ikpt].imag!=0.0)/2.0 + shifts[jqpt, :] = selfengs[ikpt].real + self.lifetimes[lf_key] = lifetimes/(SSCHA_TO_THZ*2.0*np.pi*1.0e12) + self.freqs_shifts[lf_key] = shifts + + elif(method == 'fortran-P'): + + print('Calculating lifetimes in fortran, perturbative approximation!') + irrqgrid = np.zeros((3, self.nirrkpt)) + scattering_events = np.zeros(self.nirrkpt, dtype=int) + sigmas = np.zeros((self.nirrkpt, self.nband)) + for ikpt in range(self.nirrkpt): + irrqgrid[:,ikpt] = self.k_points[self.qstar[ikpt][0]].copy() + scattering_events[ikpt] = len(self.scattering_grids[ikpt]) + sigmas[ikpt] = self.sigmas[self.qstar[ikpt][0]] + irrqgrid = np.asfortranarray(irrqgrid) + lifetimes = np.zeros((self.nkpt, self.nband)) + shifts = np.zeros((self.nkpt, self.nband)) + + scattering_grids = [] + weights = [] + for ikpt in range(self.nirrkpt): + for jkpt in range(len(self.scattering_grids[ikpt])): + scattering_grids.append(self.scattering_grids[ikpt][jkpt]) + weights.append(self.scattering_weights[ikpt][jkpt]) + num_scattering_events = len(scattering_grids) + if(sum(scattering_events) != num_scattering_events): + print('Difference in number of scattering events!') + if(sum(weights) != self.nkpt*self.nirrkpt): + print('Unexpected number of weights!') + scattering_grids = np.asfortranarray(scattering_grids).T + weights = np.asfortranarray(weights) + + classical = False + if(self.cp_mode == 'classical'): + classical = True + + selfengs = thermal_conductivity.get_lf.calculate_lifetimes_perturbative(irrqgrid, scattering_grids, weights, scattering_events,\ + self.fc2.tensor, self.fc2.r_vector2, self.fc3.tensor, self.fc3.r_vector2, \ + self.fc3.r_vector3, self.unitcell, self.dyn.structure.coords.T, self.dyn.structure.get_masses_array(), sigmas.T, temperature, \ + gauss_smearing, classical, self.nirrkpt, self.dyn.structure.N_atoms, len(self.fc2.tensor), len(self.fc3.tensor), num_scattering_events) + + for ikpt in range(self.nirrkpt): + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + lifetimes[jqpt,:] = -1.0*np.divide(np.ones_like(selfengs[ikpt].imag, dtype=float), selfengs[ikpt].imag, out=np.zeros_like(selfengs[ikpt].imag), where=selfengs[ikpt].imag!=0.0)/2.0 + shifts[jqpt,:] = selfengs[ikpt].real + + self.lifetimes[lf_key] = lifetimes/(SSCHA_TO_THZ*2.0*np.pi*1.0e12) + self.freqs_shifts[lf_key] = shifts + + elif(method == 'SC'): + self.get_lifetimes_selfconsistently(temperature, ne, gauss_smearing = gauss_smearing) + + else: + print('Unrecognized method! Exit!') + raise RuntimeError('No such method for calculating phonon lifetimes!') + + print('Calculated SSCHA lifetimes in: ', time.time() - start_time) + + ################################################################################################################################### + + def set_lifetimes(self, temperatures, lifetimes, freqs_shifts): + + for temperature in temperatures: + lf_key = format(temperature, '.1f') + if(lf_key in self.lifetimes.keys()): + print('WARNING! This will overwrite the previously set lifetimes!') + self.lifetimes[lf_key] = lifetimes + self.freqs_shifts[lf_key] = freqs_shifts + + + #################################################################################################################################### + + def setup_harmonic_properties(self, smearing_value = 0.00005, symmetrize = True): + + """ + + Sets up harmonic properties (calculates frequencies, group velocities and smearing parameters.) + + smearing_value : Value of the smearing in case smearing_method == "constant" + """ + + for ikpt, kpt in enumerate(self.k_points): + self.freqs[ikpt], self.eigvecs[ikpt], self.dynmats[ikpt] = self.get_frequency_at_q(kpt) + if(self.group_velocity_mode == 'wigner'): + self.gvels[ikpt], self.ddms[ikpt] = self.get_group_velocity_wigner(kpt) + elif(self.group_velocity_mode == 'analytical'): + self.gvels[ikpt], self.ddms[ikpt] = self.get_group_velocity(kpt, self.freqs[ikpt], self.eigvecs[ikpt]) + elif(self.group_velocity_mode == 'finite_difference'): + self.gvels[ikpt], self.ddms[ikpt] = self.get_group_velocity_finite_difference(kpt, self.freqs[ikpt], self.eigvecs[ikpt]) + else: + raise RuntimeError('Can not recognize the group_velocity_mode!') + if(symmetrize): + self.gvels[ikpt] = self.symmetrize_group_velocity_by_index(self.gvels[ikpt], ikpt) + + #if(symmetrize): + # self.symmetrize_group_velocities_over_star() + #self.check_group_velocities() + #self.check_frequencies() + #self.check_dynamical_matrices() + self.setup_smearings(smearing_value) + print('Harmonic properties are set up!') + + ################################################################################################################################# + + def symmetrize_eigenvectors(self): + + pairs = find_q_mq_pairs(self.k_points) + print('Found ' + str(len(pairs)) + ' q, -q pairs!') + for ipair in range(len(pairs)): + if(np.any(np.abs(self.eigvecs[pairs[0]] - self.eigvecs[pairs[1]].conj()) > 1.0e-6)): + print('Eigenvector symmetry not satisfied!') + self.eigvecs[pairs[0]] = (self.eigvecs[pairs[0]] + self.eigvecs[pairs[1]].conj())/2.0 + self.eigvecs[pairs[1]] = self.eigvecs[pairs[0]].conj() + + ################################################################################################################################# + + def get_sg_in_cartesian(self): + + rotations = np.zeros_like(self.rotations, dtype=float) + translations = np.zeros_like(self.translations, dtype=float) + for irot in range(len(rotations)): + rotations[irot] = np.matmul(self.reciprocal_lattice.T, np.matmul(self.rotations[irot].T, np.linalg.inv(self.reciprocal_lattice.T))) + translations = np.dot(self.translations, self.unitcell) + + return rotations, translations + + ################################################################################################################################# + + def check_dynamical_matrices(self): + + rotations, translations = self.get_sg_in_cartesian() + #for irot in range(len(rotations)): + # print('SG' + str(irot + 1)) + # print(rotations[irot]) + # print(translations[irot]) + # print(tc.atom_map[irot]) + mapping = get_mapping_of_q_points(self.qstar, self.qpoints, self.rotations) + for istar in range(len(self.qstar)): + iqpt1 = self.qstar[istar][0] + qpt1 = self.qpoints[iqpt1] + kpt1 = self.k_points[iqpt1] + dyn1 = self.dynmats[iqpt1].copy() + for iqpt in range(1, len(self.qstar[istar])): + iqpt2 = self.qstar[istar][iqpt] + qpt2 = self.qpoints[iqpt2] + kpt2 = self.k_points[iqpt2] + dyn2 = self.dynmats[iqpt2].copy() + for imap in range(len(mapping[istar][iqpt])): + irot = mapping[istar][iqpt][imap][0] + atom_map = self.atom_map[irot] + conjugate = mapping[istar][iqpt][imap][1] + qpt21 = np.dot(self.rotations[irot].T, qpt1) + kpt22 = np.dot(rotations[irot], kpt1) + kpt21 = np.dot(self.reciprocal_lattice.T, qpt21) + if(np.linalg.norm(kpt21 - kpt22) > 1.0e-6): + print(np.linalg.norm(kpt21 - kpt22)) + print('Rotation in cartesian and reduced coordinates gives different results!') + diffq = qpt21 - qpt2 + addq = qpt21 + qpt2 + if(irot == -1): + dyn21 = dyn1.conj() + if(np.any(np.abs(dyn21 - dyn2)/np.amax(np.abs(dyn2)) > 1.0e-2)): + print('Some differences between rotated and original dynamical matrices!') + print(np.abs(dyn21 - dyn2)/np.amax(np.abs(dyn2)) > 1.0e-2) + print(qpt1, qpt2) + for iband in range(len(dyn1)): + print(dyn2[iband]) + print(dyn21[iband]) + print(dyn2[iband] - dyn21[iband]) + print('') + #raise RuntimeError('Mapping dynamical matrices from q to -q did not work!') + else: + if(np.linalg.norm(diffq - np.rint(diffq)) < 1.0e-6 and not conjugate): + gamma = construct_symmetry_matrix(rotations[irot], translations[irot], kpt21, self.dyn.structure.coords, atom_map, self.unitcell) + dyn21 = np.matmul(gamma, np.matmul(dyn1, gamma.conj().T)) + if(np.any(np.abs(dyn21 - dyn2)/np.amax(np.abs(dyn2)) > 1.0e-2)): + print('Some differences between rotated and original dynamical matrices!') + print(rotations[irot]) + print(np.abs(dyn21 - dyn2)/np.amax(np.abs(dyn2)) > 1.0e-2) + print(qpt1, qpt2) + for iband in range(len(dyn1)): + print(dyn2[iband]) + print(dyn21[iband]) + print(dyn2[iband] - dyn21[iband]) + print('') + #raise RuntimeError('Mapping dynamical matrices from q to q star did not work!') + elif(np.linalg.norm(addq - np.rint(addq)) < 1.0e-6 and conjugate): + gamma = construct_symmetry_matrix(rotations[irot], translations[irot], kpt21, self.dyn.structure.coords, atom_map, self.unitcell) + dyn21 = np.matmul(gamma, np.matmul(dyn1, gamma.conj().T)) + dyn21 = dyn21.conj() + if(np.any(np.abs(dyn21 - dyn2)/np.amax(np.abs(dyn2)) > 1.0e-2)): + print('Some differences between rotated and original dynamical matrices!') + print(rotations[irot]) + print(np.abs(dyn21 - dyn2)/np.amax(np.abs(dyn2)) > 1.0e-2) + print(qpt1, qpt2) + for iband in range(len(dyn1)): + print(dyn2[iband]) + print(dyn21[iband]) + print(dyn2[iband] - dyn21[iband]) + print('') + #raise RuntimeError('Mapping dynamical matrices from q to q star through -q did not work!') + else: + raise RuntimeError('The mapping was wrong! This rotation does not give expected q point!') + + print('Dynamical matrices satisfy symmetries!') + + ################################################################################################################################# + + def check_frequencies(self): + + """ + + Routine to check whether the frequencies in q star are all the same + + """ + + for istar in range(self.nirrkpt): + freqs0 = self.freqs[self.qstar[istar][0]] + for jqpt in range(1, len(self.qstar[istar])): + freqs1 = self.freqs[self.qstar[istar][jqpt]] + if(np.any(np.abs(freqs0 - freqs1) > 1.0e-6*np.amax(freqs0))): + print('WARNING! Frequencies in star not the same. ', istar, jqpt) + print(freqs0) + print(freqs1) + + ################################################################################################################################# + + def check_group_velocities(self): + + """ + + Check if group velocities in q star are all related by symmetry operation ! + + """ + + for istar in self.qstar: + q0 = self.qpoints[istar[0]] + vel0 = self.gvels[istar[0]].copy() + for iqpt in istar: + found_rot = False + q1 = self.qpoints[iqpt] + for irot in range(len(self.rotations)): + q2 = np.dot(self.rotations[irot].T, q1) + diffq = q2 - q0 + diffq -= np.rint(diffq) + if(np.linalg.norm(diffq) < 1.0e-6): + #rotation = np.dot(self.reciprocal_lattice.T, np.dot(np.linalg.inv(self.rotations[irot].T), np.linalg.inv(self.reciprocal_lattice.T))) + rotation = np.dot(self.reciprocal_lattice.T, np.dot(self.rotations[irot].T, np.linalg.inv(self.reciprocal_lattice.T))) + found_rot = True + break + if(found_rot): + if(self.off_diag): + vel1 = np.einsum('ij,klj->kli', rotation, self.gvels[iqpt]) + else: + vel1 = np.einsum('ij,kj->ki', rotation, self.gvels[iqpt]) + if(np.any(np.abs(vel0 - vel1) > 1.0e-4)): + print('Velocities in star not agreeing!', istar, iqpt) + print(vel0[np.where(vel0 - vel1 > 1.0e-4)]) + print(vel1[np.where(vel0 - vel1 > 1.0e-4)]) + else: + print('Could not find rotation between vectors in star! ', self.qpoints[iqpt], self.qpoints[istar[0]]) + + ################################################################################################################################# + + def get_group_velocity(self, q, freqs, eigvecs): + + """ + Calculate group velocity. Using analytical formula. + + q : wave vector in real space (without 2pi factor) + freqs : frequencies for this wave vector + eigvecs : eigenvectors for this wave vector + + """ + + uc_positions = self.dyn.structure.coords.copy() + + is_q_gamma = CC.Methods.is_gamma(self.fc2.unitcell_structure.unit_cell, q) + if(self.off_diag): + gvel = np.zeros((self.nband, self.nband, 3), dtype = complex) + else: + gvel = np.zeros((self.nband, 3), dtype = complex) + m = np.tile(self.dyn.structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1.0 / mm_mat + + degs = check_degeneracy(freqs, np.amax(freqs)*1.0e-8) + + ddynmat = [] + for icart in range(3): + auxfc = np.zeros_like(self.force_constants[0], dtype = complex) + for iuc in range(len(self.force_constants)): + for iat in range(len(uc_positions)): + for jat in range(len(uc_positions)): + ruc = -self.ruc[iuc] + uc_positions[iat] - uc_positions[jat] + phase = np.dot(ruc, q)*2.0*np.pi + auxfc[3*iat:3*(iat+1),3*jat:3*(jat+1)] += complex(0.0,1.0)*ruc[icart]*self.force_constants[iuc,3*iat:3*(iat+1),3*jat:3*(jat+1)]*np.exp(1j*phase) + ddynmat.append(auxfc * mm_inv_mat) + ddynmat[-1] += ddynmat[-1].conj().T + ddynmat[-1] /= 2.0 + if(icart == 0): + dirdynmat = ddynmat.copy() + + new_eigvecs = np.zeros_like(eigvecs) + for deg in degs: + _, eigvecs1 = np.linalg.eigh(np.dot(eigvecs[:,deg].T.conj(), np.dot(np.sum(ddynmat,axis=0)/3.0, eigvecs[:,deg]))) + new_eigvecs[:,deg] = np.dot(eigvecs[:,deg], eigvecs1) + + ddynmat = np.array(ddynmat) + tmp_gvel = [] + freqs_matrix = np.einsum('i,j->ij', freqs, freqs) + freqs_matrix = np.divide(np.ones_like(freqs_matrix), freqs_matrix, out=np.zeros_like(freqs_matrix), where=freqs_matrix!=0.0) + for icart in range(3): + tmp_gvel.append(np.dot(new_eigvecs.T.conj(), np.dot(ddynmat[icart], new_eigvecs))/2.0*np.sqrt(freqs_matrix)) + tmp_gvel = np.array(tmp_gvel).transpose((1,2,0)) + + if(not self.off_diag): + gvel = np.einsum('iij->ij', tmp_gvel) + else: + for i in range(3): + gvel[:,:,i] = (tmp_gvel[:,:,i].conj().T + tmp_gvel[:,:,i])/2.0 + + if(np.any(np.isnan(tmp_gvel))): + raise RuntimeError('NaN is group velocity matrix!') + + return gvel, ddynmat.transpose((1,2,0)) + + ################################################################################################################################# + + def get_group_velocity_wigner(self, q): + + """ + + Calculate group velocities following definition in "Wigner formulation of thermal transport in solids" Simoncelli et al. + + """ + + + is_q_gamma = CC.Methods.is_gamma(self.fc2.unitcell_structure.unit_cell, q) + if(self.off_diag): + tmp_gvel = np.zeros((self.nband, self.nband, 3)) + gvel = np.zeros((self.nband, self.nband, 3)) + else: + tmp_gvel = np.zeros((self.nband, 3)) + gvel = np.zeros((self.nband, 3)) + + dynmat0 = self.get_dynamical_matrix(q) + eigvals, eigvecs = np.linalg.eigh(dynmat0) + + degs = check_degeneracy(eigvals, np.amax(eigvals)*1.0e-8) + ddynmat = [] + for icart in range(3): + dq = np.zeros_like(q) + dq[icart] = np.sum(np.amax(np.linalg.norm(self.reciprocal_lattice[:,:], axis = 1)))/100000.0 + q1 = q + dq + dynmat1 = self.get_dynamical_matrix(q1) + sqrt_dynmat1 = self.sqrt_dynamical_matrix(is_q_gamma, dynmat1) + q2 = q - dq + dynmat2 = self.get_dynamical_matrix(q2) + sqrt_dynmat2 = self.sqrt_dynamical_matrix(is_q_gamma, dynmat2) + ddynmat.append((sqrt_dynmat1 - sqrt_dynmat2)/np.linalg.norm(dq)/2.0/2.0/np.pi) + if(icart == 0): + dirdynmat = ddynmat[0].copy() + + #rot_eigvecs = np.zeros_like(eigvecs) + #for ideg, deg in enumerate(degs): + # rot_eigvecs[deg, :] = rotate_eigenvectors(dirdynmat, eigvecs[deg, :]) + tmp_gvel = [] + for icart in range(3): + tmp_gvel.append(np.dot(eigvecs.T.conj(), np.dot(ddynmat[icart], eigvecs))) + tmp_gvel = np.array(tmp_gvel).transpose((1,2,0)) + + if(not self.off_diag): + gvel = np.einsum('iij->ij', tmp_gvel).real + else: + gvel = np.zeros_like(tmp_gvel) + for i in range(3): + gvel[:,:,i] = (tmp_gvel[:,:,i].conj().T + tmp_gvel[:,:,i])/2.0 + + return gvel, np.array(ddynmat).transpose((1,2,0)) + + ################################################################################################################################## + + def sqrt_dynamical_matrix(self, flag_gamma, dm): + + eigvals, eigvecs = np.linalg.eigh(dm) + eigvals = eigvals.real + freqs = np.sign(eigvals) * np.sqrt(abs(eigvals)) + + if flag_gamma: + freqs[0] = 0.0 + eigvecs[:, 0] = 0.0 + freqs[1] = 0.0 + eigvecs[:, 1] = 0.0 + freqs[2] = 0.0 + eigvecs[:, 2] = 0.0 + if any(f < 0.0 for f in freqs): + print("ERROR: negative frequency=", freqs) + + omega_matrix = np.sqrt(np.matmul(eigvecs.T.conj(), np.matmul(dm, eigvecs))) + omega_matrix = np.diag(np.diag(omega_matrix)) + sqrt_dm = np.matmul(eigvecs, np.matmul(omega_matrix, eigvecs.T.conj())) + + return sqrt_dm + + ################################################################################################################################## + + def get_group_velocity_finite_difference(self, q, freqs, eigvecs): + + """ + Calculate group velocity. Using analytical formula. + + q : wave vector in real space (without 2pi factor) + freqs : frequencies for this wave vector + eigvecs : eigenvectors for this wave vector + + """ + + is_q_gamma = CC.Methods.is_gamma(self.fc2.unitcell_structure.unit_cell, q) + if(self.off_diag): + tmp_gvel = np.zeros((self.nband, self.nband, 3)) + gvel = np.zeros((self.nband, self.nband, 3)) + else: + tmp_gvel = np.zeros((self.nband, 3)) + gvel = np.zeros((self.nband, 3)) + + degs = check_degeneracy(freqs, np.amax(freqs)*1.0e-8) + + ddynmat = [] + for icart in range(3): + dynmat0 = self.get_dynamical_matrix(q) + dq = np.zeros_like(q) + dq[icart] = np.sum(np.linalg.norm(self.reciprocal_lattice[:,icart]))/1000.0 + q1 = q + dq + dynmat1 = self.get_dynamical_matrix(q1) + q2 = q - dq + dynmat2 = self.get_dynamical_matrix(q2) + ddynmat.append((dynmat1 - dynmat2)/np.linalg.norm(dq)/2.0/2.0/np.pi) + if(icart == 0): + dirdynmat = ddynmat[0].copy() + ddynmat = np.array(ddynmat) + + new_eigvecs = np.zeros_like(eigvecs) + for deg in degs: + _, eigvecs1 = np.linalg.eigh(np.dot(eigvecs[:,deg].T.conj(), np.dot(np.sum(ddynmat,axis=0)/3.0, eigvecs[:,deg]))) + new_eigvecs[:,deg] = np.dot(eigvecs[:,deg], eigvecs1) + + tmp_gvel = [] + freqs_matrix = np.einsum('i,j->ij', freqs, freqs) + freqs_matrix = np.divide(np.ones_like(freqs_matrix), freqs_matrix, out=np.zeros_like(freqs_matrix), where=freqs_matrix!=0.0) + for icart in range(3): + tmp_gvel.append(np.dot(new_eigvecs.T.conj(), np.dot(ddynmat[icart], new_eigvecs))/2.0*np.sqrt(freqs_matrix)) + tmp_gvel = np.array(tmp_gvel).transpose((1,2,0)) + + if(not self.off_diag): + gvel = np.einsum('iij->ij', tmp_gvel).real + else: + gvel = np.zeros_like(tmp_gvel) + for i in range(3): + gvel[:,:,i] = (tmp_gvel[:,:,i].conj().T + tmp_gvel[:,:,i])/2.0 + + return gvel, np.array(ddynmat).transpose((1,2,0)) + + ################################################################################################################################## + + def symmetrize_group_velocity(self, vels, q): + + """ + + Symmetrize group velocites according to the little group of wave vector. + + vels : group velocities at this wave vector + q : wave vector in question! + + """ + + if(self.off_diag): + for i in range(3): + vels[:,:,i] = (vels[:,:,i] + vels[:,:,i].T)/2.0 + + qred = np.dot(q, np.linalg.inv(self.reciprocal_lattice)) + qred -= np.rint(qred) + cell = get_spglib_cell(self.dyn) + tot_r = spglib.get_symmetry_dataset(cell)['rotations'] + nsym = len(tot_r) + for i in range(self.nsyms): + tot_r[i] = tot_r[i].T + + rot_q = [] + for i in range(nsym): + diff = qred- np.dot(tot_r[i,:,:], qred) + diff -= np.rint(diff) + if (np.all(np.abs(diff) < 1.0e-6)): + rot_q.append(tot_r[i,:,:]) + if(len(rot_q) > 0): + print('Size of the small group is: ', len(rot_q)) + rot_vels = np.zeros_like(vels) + for i in range(len(rot_q)): + #rot_q[i] = np.dot(self.reciprocal_lattice.T, np.dot(np.linalg.inv(rot_q[i]), np.linalg.inv(self.reciprocal_lattice.T))) + rot_q[i] = np.dot(self.reciprocal_lattice.T, np.dot(rot_q[i], np.linalg.inv(self.reciprocal_lattice.T))) + if(self.off_diag): + rot_vels += np.einsum('ij,klj->kli', rot_q[i], vels) + else: + rot_vels += np.einsum('ij,kj->ki', rot_q[i], vels) + rot_vels /= float(len(rot_q)) + else: + rot_vels = vels.copy() + + if(self.off_diag): + for i in range(3): + rot_vels[:,:,i] = (rot_vels[:,:,i] + rot_vels[:,:,i].T)/2.0 + + return rot_vels + + ################################################################################################################################ + + def symmetrize_group_velocity_by_index(self, vels, iqpt): + + """ + + Symmetrize group velocites according to the little group of wave vector. + + vels : group velocities at this wave vector + iqpt : index of the wave vector in question! + + """ + + rot_q = self.rotations[self.little_group[iqpt]].copy() + + if(self.off_diag): + for i in range(3): + vels[:,:,i] = (vels[:,:,i] + vels[:,:,i].T)/2.0 + + rot_vels = np.zeros_like(vels) + for rot in rot_q: + #rot_c = np.dot(self.reciprocal_lattice.T, np.dot(np.linalg.inv(rot.T), np.linalg.inv(self.reciprocal_lattice.T))) + rot_c = np.dot(self.reciprocal_lattice.T, np.dot(rot.T, np.linalg.inv(self.reciprocal_lattice.T))) + if(self.off_diag): + rot_vels += np.einsum('ij,klj->kli', rot_c, vels) + else: + rot_vels += np.einsum('ij,kj->ki', rot_c, vels) + rot_vels /= float(len(rot_q)) + + if(self.off_diag): + for i in range(3): + rot_vels[:,:,i] = (rot_vels[:,:,i] + rot_vels[:,:,i].T)/2.0 + + return rot_vels + + ################################################################################################################################# + + def symmetrize_group_velocities_over_star(self): + + for istar in self.qstar: + q0 = self.qpoints[istar[0]] + vel0 = np.zeros_like(self.gvels[istar[0]]) + rotations = [] + for iqpt in istar: + found_rot = False + q1 = self.qpoints[iqpt] + for irot in range(len(self.rotations)): + q2 = np.dot(self.rotations[irot].T, q1) + diffq = q2 - q0 + diffq -= np.rint(diffq) + if(np.linalg.norm(diffq) < 1.0e-6): + #rotation = np.dot(self.reciprocal_lattice.T, np.dot(np.linalg.inv(self.rotations[irot].T), np.linalg.inv(self.reciprocal_lattice.T))) + rotation = np.dot(self.reciprocal_lattice.T, np.dot(self.rotations[irot].T, np.linalg.inv(self.reciprocal_lattice.T))) + found_rot = True + break + if(found_rot): + rotations.append(rotation) + if(self.off_diag): + vel1 = np.einsum('ij,klj->kli', rotation, self.gvels[iqpt]) + else: + vel1 = np.einsum('ij,kj->ki', rotation, self.gvels[iqpt]) + vel0 += vel1 + else: + print('Could not find rotation between vectors in star! ') + print(q0) + print(q1) + if(len(rotations) != len(istar)): + print('Number of rotations does not match number of q points in the star: ', len(rotations), len(istar)) + vel0 = vel0/float(len(rotations)) + for irot, jqpt in enumerate(istar): + if(self.off_diag): + self.gvels[jqpt] = np.einsum('ij,klj->kli', np.linalg.inv(rotations[irot]), vel0) + else: + self.gvels[jqpt] = np.einsum('ij,kj->ki', np.linalg.inv(rotations[irot]), vel0) + + + ################################################################################################################################# + + def get_frequency_at_q(self, q): + + """ + + Get phonon frequencies and eigenvectors at wave vector q. + + q: wave vector in real space (no 2pi factor) + + """ + + dynmat = self.get_dynamical_matrix(q) + w2_q, pols_q = np.linalg.eigh(dynmat) + is_q_gamma = CC.Methods.is_gamma(self.fc2.unitcell_structure.unit_cell, q) + if(is_q_gamma): + for iband in range(self.nband): + if(w2_q[iband] < np.amax(w2_q)*1.0e-6): + w2_q[iband] = 0.0 + #if(np.any(w2_q < 0.0)): + # print('At q: ') + # print(q) + # print(w2_q) + # raise RuntimeError('SSCHA frequency imaginary. Stopping now.') + #else: + w_q = np.sqrt(w2_q) + + return w_q, pols_q, dynmat + + ################################################################################################################################### + + def get_dynamical_matrix(self, q, q_direct = None, lo_to_splitting = True): + + """ + + Get dynamical matrix at wave vector. + + q : wave vector in cartesian coordinates without 2pi factor + + """ + + + + uc_positions = self.dyn.structure.coords.copy() + m = np.tile(self.dyn.structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1.0 / mm_mat + dynmat = np.zeros_like(self.force_constants[0], dtype = complex) + for ir in range(len(self.ruc)): + if(self.phase_conv == 'smooth'): + for iat in range(len(uc_positions)): + for jat in range(len(uc_positions)): + r = -1.0*self.ruc[ir] + uc_positions[iat] - uc_positions[jat] + phase = np.dot(r, q)*2.0*np.pi + dynmat[3*iat:3*(iat+1),3*jat:3*(jat+1)] += self.force_constants[ir,3*iat:3*(iat+1),3*jat:3*(jat+1)]*np.exp(1j*phase) + elif(self.phase_conv == 'step'): + r = -1.0*self.ruc[ir] + phase = np.dot(r, q)*2.0*np.pi + dynmat += self.force_constants[ir]*np.exp(1j*phase) + else: + raise RuntimeError('Can not recognize phase convention!') + + #dynmat = dynmat#*mm_inv_mat + #dynmat = (dynmat + dynmat.conj().T)/2.0 + + if self.fc2.effective_charges is not None: + self.add_long_range(dynmat, q, q_direct, lo_to_splitting) + + dynmat = dynmat*mm_inv_mat + dynmat = (dynmat + dynmat.conj().T)/2.0 + + return dynmat + + #################################################################################################################################### + + def add_long_range(self, dynmat, q, q_direct, lo_to_splitting): + + """ + + Add long-range dipole-dipole dispersion to short-range force constant (dynmat) at wave vector (q (2.0*pi/A)). + + """ + + dynq = np.zeros((3,3,self.fc2.nat, self.fc2.nat), dtype = np.complex128, order = "F") + for i in range(self.fc2.nat): + for j in range(self.fc2.nat): + dynq[:,:, i, j] = dynmat[3*i : 3*i+3, 3*j:3*j+3] + + # Add the nonanalitic part back + QE_q = q * self.fc2.QE_alat / A_TO_BOHR + symph.rgd_blk_diff_phase_conv(0, 0, 0, dynq, QE_q, self.fc2.QE_tau, self.fc2.dielectric_tensor, self.fc2.QE_zeu, self.fc2.QE_bg, self.fc2.QE_omega, self.fc2.QE_alat, 0, +1.0, self.fc2.nat) + + # Check if the vector is gamma + if np.max(np.abs(q)) < 1e-12: + q_vect = np.zeros(3, dtype = np.double) + compute_nonanal = lo_to_splitting + if q_direct is not None: + # the - to take into account the difference between QE convension and our + if np.linalg.norm(q_direct) < 1e-8: + compute_nonanal = False + else: + q_vect[:] = -q_direct / np.sqrt(q_direct.dot(q_direct)) + else: + q_vect[:] = np.random.normal(size = 3) + q_vect /= np.sqrt(q_vect.dot(q_vect)) + + # Apply the nonanal contribution at gamma + if compute_nonanal: + QE_itau = np.arange(self.fc2.nat) + 1 + symph.nonanal(QE_itau, self.fc2.dielectric_tensor, q_vect, self.fc2.QE_zeu, self.fc2.QE_omega, dynq, self.fc2.nat, self.fc2.nat) + + # Copy in the final fc the result + for i in range(self.fc2.nat): + for j in range(self.fc2.nat): + dynmat[3*i : 3*i+3, 3*j:3*j+3] = dynq[:,:, i, j] + + #################################################################################################################################### + + def get_dos(self, de = 0.1): + + """ + Calculate phonon DOS using gaussian smearing. + + de : the distance between two frequency points is sampling of DOS (in THz) + + """ + + de = de /(np.sqrt(RY_TO_J/AU/MASS_RY_TO_UMA)/BOHR_TO_ANGSTROM/100.0/2.0/np.pi) + if(np.all(self.freqs == 0)): + print('All frequencies are zero. Make sure that the harmonic properties are initialized!') + else: + frequencies = self.freqs.flatten() + smearing = self.sigmas.flatten() + nsamples = int(np.amax(self.freqs)*1.1/de) + samples = np.arange(nsamples).astype(float)*de + deltas = np.zeros((nsamples, len(frequencies))) + for i in range(nsamples): + for j in range(len(frequencies)): + if(frequencies[j] > 0.0): + deltas[i,j] = gaussian(frequencies[j], samples[i], smearing[j]) + dos = np.sum(deltas, axis = 1) + + dos = dos/float(len(self.freqs)) + + return samples*SSCHA_TO_THZ, dos/SSCHA_TO_THZ + + ######################################################################################################################################## + + def get_dos_from_lineshapes(self, temperature, de = 0.1): + + """ + Calculates phonon DOS from lineshapes at temperature. + + temperature : temperature in K. + de : sampling spacing of energies after convolution (in THz) + + """ + + de = de/SSCHA_TO_THZ + key = format(temperature, '.1f') + if(key in self.lineshapes.keys()): + ne = self.lineshapes[key].shape[-1] + energies = np.arange(ne, dtype=float)*self.delta_omega + self.delta_omega + dos = np.sum(np.sum(self.lineshapes[key], axis = 0), axis = 0) + dos = dos/float(self.nkpt) + print('Total DOS is (should be number of bands): ', np.sum(dos)*self.delta_omega) + else: + print('Lineshapes not calculated for this temperature! Can not calculate DOS! ') + dos = 0 + energies = 0 + + ne = int(np.amax(energies)/de) + energies_smoothed = np.arange(ne, dtype=float)*de + de + dos_smoothed = np.zeros(ne, dtype=float) + for ien in range(ne): + for jen in range(len(dos)): + dos_smoothed[ien] += gaussian(energies_smoothed[ien], energies[jen], de/2.0)*dos[jen] + int_dos = np.sum(dos_smoothed)*de + dos_smoothed = dos_smoothed/int_dos*np.sum(dos)*self.delta_omega + + return energies*SSCHA_TO_THZ, dos/SSCHA_TO_THZ, energies_smoothed*SSCHA_TO_THZ, dos_smoothed/SSCHA_TO_THZ + + ######################################################################################################################################## + + def get_mean_square_displacement_from_lineshapes(self, temperature = 300.0): + + """ + Calculates mean square displacement factor from phonon lineshapes. () + + temperature : temperature in K. + + """ + + key = format(temperature, '.1f') + if(key in self.lineshapes.keys()): + ne = self.lineshapes[key].shape[-1] + energies = np.arange(ne, dtype=float)*self.delta_omega + self.delta_omega + exponents_plus = np.exp(energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + exponents_minus = np.exp(-1.0*energies*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) + msd = np.sum(self.lineshapes[key]*(1.0/(exponents_plus - 1.0) - 1.0/(exponents_minus - 1.0)), axis = len(self.lineshapes[key].shape) - 1)*self.delta_omega + with open('Phonon_MSD_from_lineshapes', 'w+') as outfile: + outfile.write('# ' + format('Frequency (THz)', STR_FMT)) + outfile.write(' ' + format('MSD anharmonic', STR_FMT)) + outfile.write(' ' + format('MSD harmonic', STR_FMT)) + outfile.write('\n') + for iqpt in range(self.nkpt): + for iband in range(self.nband): + if(self.freqs[iqpt, iband] != 0.0): + outfile.write(3*' ' + format(self.freqs[iqpt][iband]*SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(msd[iqpt][iband], '.12e')) + outfile.write(3*' ' + format(2.0/(np.exp(self.freqs[iqpt][iband]*SSCHA_TO_THZ*1.0e12*HPLANCK/KB/temperature) - 1.0) + 1.0, '.12e')) + outfile.write('\n') + else: + print('Lineshapes not calculated for this temperature! Can not calculate mean square displacements! ') + dos = 0 + energies = 0 + + #################################################################################################################################### + + def write_harmonic_properties_to_file(self, filename = 'Phonon_harmonic_properties'): + + """ + Write harmonic properties (frequency, group velocity, smearing parameters) from second order SSCHA tensor to file. + + """ + + with open(filename, 'w+') as outfile: + outfile.write('# ' + format('Frequencies (THz)', STR_FMT)) + outfile.write(' ' + format('Group velocity x (m/s)', STR_FMT)) + outfile.write(' ' + format('Group velocity y (m/s)', STR_FMT)) + outfile.write(' ' + format('Group velocity z (m/s)', STR_FMT)) + outfile.write(' ' + format('Smearing par (THz)', STR_FMT)) + outfile.write('\n') + for ikpt in range(self.nkpt): + for iband in range(self.nband): + outfile.write(3*' ' + format(self.freqs[ikpt][iband]*SSCHA_TO_THZ, '.12e')) + for icart in range(3): + if(self.off_diag): + outfile.write(3*' ' + format(self.gvels[ikpt][iband,iband][icart]*SSCHA_TO_MS, '.12e')) + else: + outfile.write(3*' ' + format(self.gvels[ikpt][iband][icart]*SSCHA_TO_MS, '.12e')) + outfile.write(3*' ' + format(self.sigmas[ikpt][iband]*SSCHA_TO_THZ, '.12e')) + outfile.write('\n') + + ###################################################################################################################################### + + def write_transport_properties_to_file(self, temperature, isotope_scattering, filename = 'Phonon_transport_properties_'): + """ + Write transport properties (frequencies, lifetimes, heat capacities) from SSCHA tensors to file. + + """ + + lf_key = format(temperature, '.1f') + if(lf_key in self.lifetimes.keys()): + with open(filename + lf_key, 'w+') as outfile: + outfile.write('# ' + format('Frequency (THz)', STR_FMT)) + outfile.write(' ' + format('Lifetime (ps)', STR_FMT)) + outfile.write(' ' + format('Freq. shift (THz)', STR_FMT)) + if(isotope_scattering): + outfile.write(' ' + format('Isotope scatt. rate (THz)', STR_FMT)) + outfile.write(' ' + format('Mode heat capacity (J/K)', STR_FMT)) + outfile.write('\n') + for iqpt in range(self.nkpt): + for iband in range(self.nband): + outfile.write(3*' ' + format(self.freqs[iqpt, iband]*SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(self.lifetimes[lf_key][iqpt, iband]*1.0e12, '.12e')) + outfile.write(3*' ' + format(self.freqs_shifts[lf_key][iqpt, iband]*SSCHA_TO_THZ, '.12e')) + if(isotope_scattering): + outfile.write(3*' ' + format(self.scattering_rates_isotope[iqpt, iband]*SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(self.cp[lf_key][iqpt, iband], '.12e')) + outfile.write('\n') + else: + print('Lifetimes have not been calculated for this temperature! ') + ##################################################################################################################################### + + def get_lifetimes_at_q(self, k_grid, q, smear, T): + + """ + + Get lifetime at a specific wave vector q. Will also give phonon shift. + + k_grid : k_grid to sum scattering events over + q : wave vector in question + smear : smearing factors for this wave vectors (dimension = (nband)) + T : temperature in K + + """ + + + structure = self.fc2.unitcell_structure + + # Get the integration points + k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) + + + # Get the phi2 in q + phi2_q = self.fc2.Interpolate(q, asr = False) + + # dynamical matrix in q + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1 / mm_mat + # + d2_q = phi2_q * mm_inv_mat + + # Diagonalize the dynamical matrix in q + w2_q, pols_q = np.linalg.eigh(d2_q) + + # Check if the q point is gamma + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) + + if is_q_gamma: + w2_q[0:3]=0.0 + if not (w2_q >= 0.0).all(): + print('q= ',q, ' (2pi/A)') + print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_q=np.sqrt(w2_q) + + def compute_k(k): + # phi3 in q, k, -q - k + phi3=self.fc3.Interpolate(k,-q-k, asr = False) + #print(phi3) + # phi2 in k + phi2_k = self.fc2.Interpolate(k, asr = False) + + # phi2 in -q-k + phi2_mq_mk = self.fc2.Interpolate(-q -k, asr = False) + + # dynamical matrices (divide by the masses) + d2_k = phi2_k * mm_inv_mat + d2_mq_mk = phi2_mq_mk * mm_inv_mat + + # Diagonalize the dynamical matrices + w2_k, pols_k = np.linalg.eigh(d2_k) + w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) + + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) + is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) + + if is_k_gamma: + w2_k[0:3]=0.0 + if not (w2_k >= 0.0).all(): + print('k= ',k, ' (2pi/A)') + print('w(k)= ',np.sign(w2_k)*np.sqrt(np.abs(w2_k))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_k=np.sqrt(w2_k) + + if is_mq_mk_gamma: + w2_mq_mk[0:3]=0.0 + if not (w2_mq_mk >= 0.0).all(): + print('-q-k= ',-q-k, ' (2pi/A)') + print('w(-q-k)= ',np.sign(w2_mq_mk)*np.sqrt(np.abs(w2_mq_mk))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_mq_mk=np.sqrt(w2_mq_mk) + + # Dividing the phi3 by the sqare root of masses + d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) + #print(d3) + # d3 in mode components + #d3_pols = np.einsum("abc, ai, bj, ck -> ijk", d3, pols_q, pols_k, pols_mq_mk) + d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) + d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) + d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) + #print(d3_pols) + + n_mod=3*structure.N_atoms + # Fortran duty ==== + + selfnrg = thermal_conductivity.third_order_cond.compute_perturb_selfnrg_single(smear,T, + np.array([w_q,w_k,w_mq_mk]).T, + np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), + d3_pols,n_mod) + return selfnrg + + CC.Settings.SetupParallel() + + selfnrg =CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") + # divide by the N_k factor + selfnrg /= len(k_points) # (n_mod,nsigma) + + #w_q_ext=w_q[...,None] + + shift=np.divide(selfnrg.real, 2*w_q, out=np.zeros_like(selfnrg.real), where=w_q!=0) + hwhm=np.divide(-selfnrg.imag, 2*w_q, out=np.zeros_like(selfnrg.imag), where=w_q!=0) + + return w_q, shift,hwhm + + ###################################################################################################################################### + + def get_diag_dynamic_bubble(self, k_grid, q, smear, energies, T): + + """ + Get lineshape at a specific wave vector q. + + k_grid : k_grid to sum scattering events over + q : wave vector in question + smear : smearing factors for this wave vectors (dimension = (nband)) + T : temperature in K + + """ + + structure = self.fc2.unitcell_structure + + # Get the integration points + k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) + + + # Get the phi2 in q + phi2_q = self.fc2.Interpolate(q, asr = False) + # dynamical matrix in q + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1 / mm_mat + # + d2_q = phi2_q * mm_inv_mat + + # Diagonalize the dynamical matrix in q + w2_q, pols_q = np.linalg.eigh(d2_q) + + # Check if the q point is gamma + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) + + if is_q_gamma: + w2_q[0:3]=0.0 + if not (w2_q >= 0.0).all(): + print('q= ',q, ' (2pi/A)') + print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_q=np.sqrt(w2_q) + + # Allocate the memory for the bubble + ne=energies.shape[0] + nat=structure.N_atoms + tmp_bubble = np.zeros((ne,self.nband), dtype = np.complex128, order = "F") + + def compute_k(k): + # phi3 in q, k, -q - k + phi3=self.fc3.Interpolate(k,-q-k, asr = False) + # phi2 in k + phi2_k = self.fc2.Interpolate(k, asr = False) + + # phi2 in -q-k + phi2_mq_mk = self.fc2.Interpolate(-q -k, asr = False) + + # dynamical matrices (divide by the masses) + d2_k = phi2_k * mm_inv_mat + d2_mq_mk = phi2_mq_mk * mm_inv_mat + + # Diagonalize the dynamical matrices + w2_k, pols_k = np.linalg.eigh(d2_k) + w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) + + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) + is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) + + if is_k_gamma: + w2_k[0:3]=0.0 + if not (w2_k >= 0.0).all(): + print('k= ',k, ' (2pi/A)') + print('w(k)= ',np.sign(w2_k)*np.sqrt(np.abs(w2_k))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_k=np.sqrt(w2_k) + + if is_mq_mk_gamma: + w2_mq_mk[0:3]=0.0 + if not (w2_mq_mk >= 0.0).all(): + print('-q-k= ',-q-k, ' (2pi/A)') + print('w(-q-k)= ',np.sign(w2_mq_mk)*np.sqrt(np.abs(w2_mq_mk))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_mq_mk=np.sqrt(w2_mq_mk) + + # Dividing the phi3 by the sqare root of masses + d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) + + # d3 in mode components + #d3_pols = np.einsum("abc, ai, bj, ck -> ijk", d3, pols_mq, pols_k, pols_q_mk) + d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) + d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) + d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) + + # Fortran duty ==== + + # + tmp_bubble = thermal_conductivity.third_order_cond.compute_diag_dynamic_bubble_single(energies,smear,T, + np.array([w_q,w_k,w_mq_mk]).T, + np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), + d3_pols,ne,n_mod=self.nband) + + return tmp_bubble + + CC.Settings.SetupParallel() + + d_bubble_mod =CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") + + # divide by the N_k factor + d_bubble_mod /= len(k_points) # (ne,nsmear,n_mod) + # + spectralf=thermal_conductivity.third_order_cond.compute_spectralf_diag_single(np.zeros_like(w_q),energies,w_q, + d_bubble_mod, + nat,ne) + + + return spectralf.T + + ###################################################################################################################################### + + def get_just_diag_dynamic_bubble(self, k_grid, q, smear, energies, T): + + """ + Get lineshape at a specific wave vector q. + + k_grid : k_grid to sum scattering events over + q : wave vector in question + smear : smearing factors for this wave vectors (dimension = (nband)) + T : temperature in K + + """ + + structure = self.fc2.unitcell_structure + + # Get the integration points + k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) + + + # Get the phi2 in q + phi2_q = self.fc2.Interpolate(q, asr = False) + # dynamical matrix in q + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1 / mm_mat + # + d2_q = phi2_q * mm_inv_mat + + # Diagonalize the dynamical matrix in q + w2_q, pols_q = np.linalg.eigh(d2_q) + + # Check if the q point is gamma + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) + + if is_q_gamma: + w2_q[0:3]=0.0 + if not (w2_q >= 0.0).all(): + print('q= ',q, ' (2pi/A)') + print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_q=np.sqrt(w2_q) + + # Allocate the memory for the bubble + ne=energies.shape[0] + nat=structure.N_atoms + tmp_bubble = np.zeros((ne,self.nband), dtype = np.complex128, order = "F") + + def compute_k(k): + # phi3 in q, k, -q - k + phi3=self.fc3.Interpolate(k,-q-k, asr = False) + # phi2 in k + phi2_k = self.fc2.Interpolate(k, asr = False) + + # phi2 in -q-k + phi2_mq_mk = self.fc2.Interpolate(-q -k, asr = False) + + # dynamical matrices (divide by the masses) + d2_k = phi2_k * mm_inv_mat + d2_mq_mk = phi2_mq_mk * mm_inv_mat + + # Diagonalize the dynamical matrices + w2_k, pols_k = np.linalg.eigh(d2_k) + w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) + + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) + is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) + + if is_k_gamma: + w2_k[0:3]=0.0 + if not (w2_k >= 0.0).all(): + print('k= ',k, ' (2pi/A)') + print('w(k)= ',np.sign(w2_k)*np.sqrt(np.abs(w2_k))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_k=np.sqrt(w2_k) + + if is_mq_mk_gamma: + w2_mq_mk[0:3]=0.0 + if not (w2_mq_mk >= 0.0).all(): + print('-q-k= ',-q-k, ' (2pi/A)') + print('w(-q-k)= ',np.sign(w2_mq_mk)*np.sqrt(np.abs(w2_mq_mk))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_mq_mk=np.sqrt(w2_mq_mk) + + # Dividing the phi3 by the sqare root of masses + d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) + + # d3 in mode components + #d3_pols = np.einsum("abc, ai, bj, ck -> ijk", d3, pols_mq, pols_k, pols_q_mk) + d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) + d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) + d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) + + # Fortran duty ==== + + # + tmp_bubble = thermal_conductivity.third_order_cond.compute_diag_dynamic_bubble_single(energies,smear,T, + np.array([w_q,w_k,w_mq_mk]).T, + np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), + d3_pols,ne,n_mod=self.nband) + + return tmp_bubble + + CC.Settings.SetupParallel() + + d_bubble_mod =CC.Settings.GoParallel(compute_k, k_points, reduce_op = "+") + + # divide by the N_k factor + d_bubble_mod /= len(k_points) # (ne,nsmear,n_mod) + # + return d_bubble_mod.T + + ##################################################################################################################################### + + def get_lifetimes_at_q_smaller_grid(self, k_grid, weights, q, smear, T): + + """ + + Get lifetime at a specific wave vector q calculated on a smaller grid. Will also give phonon shift. + k_grid : k_grid to sum scattering events over + q : wave vector in question + smear : smearing factors for this wave vectors (dimension = (nband)) + T : temperature in K + + """ + + + structure = self.fc2.unitcell_structure + + # Get the integration points + #k_points = CC.symmetries.GetQGrid(structure.unit_cell, k_grid) + + + # Get the phi2 in q + phi2_q = self.fc2.Interpolate(q, asr = False) + + # dynamical matrix in q + m = np.tile(structure.get_masses_array(), (3,1)).T.ravel() + mm_mat = np.sqrt(np.outer(m, m)) + mm_inv_mat = 1 / mm_mat + # + d2_q = phi2_q * mm_inv_mat + + # Diagonalize the dynamical matrix in q + w2_q, pols_q = np.linalg.eigh(d2_q) + + # Check if the q point is gamma + is_q_gamma = CC.Methods.is_gamma(structure.unit_cell, q) + + if is_q_gamma: + w2_q[0:3]=0.0 + if not (w2_q >= 0.0).all(): + print('q= ',q, ' (2pi/A)') + print('w(q)= ',np.sign(w2_q)*np.sqrt(np.abs(w2_q))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_q=np.sqrt(w2_q) + + def compute_k(inputs): + k = inputs[0] + weight = inputs[1] + # phi3 in q, k, -q - k + phi3=self.fc3.Interpolate(k,-q-k, asr = False) + #print(phi3) + # phi2 in k + phi2_k = self.fc2.Interpolate(k, asr = False) + + # phi2 in -q-k + phi2_mq_mk = self.fc2.Interpolate(-q -k, asr = False) + + # dynamical matrices (divide by the masses) + d2_k = phi2_k * mm_inv_mat + d2_mq_mk = phi2_mq_mk * mm_inv_mat + + # Diagonalize the dynamical matrices + w2_k, pols_k = np.linalg.eigh(d2_k) + w2_mq_mk, pols_mq_mk = np.linalg.eigh(d2_mq_mk) + + + is_k_gamma = CC.Methods.is_gamma(structure.unit_cell, k) + is_mq_mk_gamma = CC.Methods.is_gamma(structure.unit_cell, -q-k) + + if is_k_gamma: + w2_k[0:3]=0.0 + if not (w2_k >= 0.0).all(): + print('k= ',k, ' (2pi/A)') + print('w(k)= ',np.sign(w2_k)*np.sqrt(np.abs(w2_k))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_k=np.sqrt(w2_k) + + if is_mq_mk_gamma: + w2_mq_mk[0:3]=0.0 + if not (w2_mq_mk >= 0.0).all(): + print('-q-k= ',-q-k, ' (2pi/A)') + print('w(-q-k)= ',np.sign(w2_mq_mk)*np.sqrt(np.abs(w2_mq_mk))*CC.Units.RY_TO_CM,' (cm-1)') + print('Cannot continue with SSCHA negative frequencies') + exit() + w_mq_mk=np.sqrt(w2_mq_mk) + + # Dividing the phi3 by the sqare root of masses + d3 = np.einsum("abc, a, b, c -> abc", phi3, 1/np.sqrt(m), 1/np.sqrt(m), 1/np.sqrt(m)) + #print(d3) + # d3 in mode components + #d3_pols = np.einsum("abc, ai, bj, ck -> ijk", d3, pols_q, pols_k, pols_mq_mk) + d3_pols = np.einsum("abc, ai -> ibc", d3, pols_q) + d3_pols = np.einsum("abc, bi -> aic", d3_pols, pols_k) + d3_pols = np.einsum("abc, ci -> abi", d3_pols, pols_mq_mk) + #print(d3_pols) + + n_mod=3*structure.N_atoms + # Fortran duty ==== + + selfnrg = thermal_conductivity.third_order_cond.compute_perturb_selfnrg_single(smear,T, + np.array([w_q,w_k,w_mq_mk]).T, + np.array([is_q_gamma,is_k_gamma,is_mq_mk_gamma]), + d3_pols,n_mod) + return selfnrg*float(weight) + + CC.Settings.SetupParallel() + + input_list = [] + for i in range(len(weights)): + input_list.append([k_grid[i], weights[i]]) + selfnrg =CC.Settings.GoParallel(compute_k, input_list, reduce_op = "+") + # divide by the N_k factor + selfnrg /= float(sum(weights)) # (n_mod,nsigma) + + #w_q_ext=w_q[...,None] + + shift=np.divide(selfnrg.real, 2*w_q, out=np.zeros_like(selfnrg.real), where=w_q!=0) + hwhm=np.divide(-selfnrg.imag, 2*w_q, out=np.zeros_like(selfnrg.imag), where=w_q!=0) + + return w_q, shift,hwhm + + ###################################################################################################################################### + + def calculate_mode_gruneisen_at_q(self, q): + + """ + + Calculate Gruneisen parameter for specific q-point! + + + q : Q point in cartesian coordinates + + + """ + + uc_positions = self.dyn.structure.coords.copy() + natom = len(uc_positions) + masses = self.dyn.structure.get_masses_array() + m1 = np.zeros(3*natom, dtype = float) + for iat in range(natom): + m1[3*iat:3*iat + 3] = masses[iat] + + dynmat = self.get_dynamical_matrix(q) + w2_q, pols_q = np.linalg.eigh(dynmat) + w_q = np.sqrt(np.abs(w2_q))*np.sign(w2_q) + gruneisens = np.zeros_like(w_q) + + for iband in range(len(w_q)): + gruneisen = 0.0 + 1j*0.0 + for iuc in range(len(self.fc3.r_vector2[0])): + for iat in range(natom): + for jat in range(natom): + r = -1.0*self.fc3.r_vector2[:,iuc] + uc_positions[iat] - uc_positions[jat] + phase_factor = np.exp(complex(0.0, 2.0*np.pi*np.dot(q, r))) + eig1 = pols_q[3*iat:3*iat + 3, iband].conj().copy()/np.sqrt(masses[iat]) + eig2 = pols_q[3*jat:3*jat + 3, iband].copy()/np.sqrt(masses[jat]) + for kat in range(natom): + gruneisen += np.einsum('ijk, i, j, k', self.fc3.tensor[iuc,3*iat:3*(iat + 1),3*jat:3*(jat + 1),3*kat:3*(kat + 1)], eig1, + eig2, self.fc3.r_vector3[:,iuc] + uc_positions[kat])*phase_factor + if(w_q[iband] > 0.0): + gruneisens[iband] = -1.0*gruneisen.real/w2_q[iband]/6.0/BOHR_TO_ANGSTROM + else: + print('Negative frequency in calculation of Gruneisen parameter for q point: ', q) + print(format(w_q[iband]*SSCHA_TO_THZ, '.3f')) + gruneisens[iband] = 0.0 + return gruneisens + + #######################################################################################################################################' + + def calculate_mode_gruneisen_mesh(self): + + """ + + Calculate Gruneisen parameter on a grid. Using equation from 10.1103/PhysRevLett.79.1885 ! + + """ + + print('Calculating Gruneisen parameters ...') + uc_positions = self.dyn.structure.coords.copy() + natom = len(uc_positions) + masses = self.dyn.structure.get_masses_array() + for ikpt in range(self.nirrkpt): + ikpt0 = self.qstar[ikpt][0] + for iband in range(self.nband): + gruneisen = 0.0 + 0.0j + for iuc in range(len(self.fc3.r_vector2[0])): + for iat in range(natom): + for jat in range(natom): + r = -1.0*self.fc3.r_vector2[:,iuc] + uc_positions[iat] - uc_positions[jat] + phase_factor = np.exp(complex(0.0, 2.0*np.pi*np.dot(self.k_points[ikpt0], r))) + eig1 = self.eigvecs[ikpt0,3*iat:3*iat + 3, iband].conj().copy()/np.sqrt(masses[iat]) + eig2 = self.eigvecs[ikpt0,3*jat:3*jat + 3, iband].copy()/np.sqrt(masses[jat]) + for kat in range(natom): + gruneisen += np.einsum('ijk, i, j, k', self.fc3.tensor[iuc,3*iat:3*(iat + 1),3*jat:3*(jat + 1),3*kat:3*(kat + 1)], eig1, + eig2, self.fc3.r_vector3[:,iuc] + uc_positions[kat])*phase_factor + if(self.freqs[ikpt0, iband] > 0.0): + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + self.gruneisen[jqpt][iband] = -1.0*gruneisen.real/self.freqs[jqpt, iband]**2/6.0/BOHR_TO_ANGSTROM + else: + for iqpt in range(len(self.qstar[ikpt])): + jqpt = self.qstar[ikpt][iqpt] + self.gruneisen[jqpt][iband] = 0.0 + + with open('Gruneisen_parameter', 'w+') as outfile: + outfile.write('# ' + format('Frequencies (THz)', STR_FMT)) + outfile.write(' ' + format('Gruneisen_parameter', STR_FMT)) + outfile.write('\n') + for ikpt in range(self.nkpt): + for iband in range(self.nband): + outfile.write(3*' ' + format(self.freqs[ikpt][iband]*SSCHA_TO_THZ, '.12e')) + outfile.write(3*' ' + format(self.gruneisen[ikpt][iband], '.12e')) + outfile.write('\n') + + ############################################################################################################################################## + + def calculate_thermal_expansion_quasiharmonic(self, temperatures, bulk): + + """ + + Calculate thermal expansion assuming quasiharmonic approximation. Should work well only for cubic materials with no free internal degrees of freedom. + + temperatures : List of temperatures for which to calculate thermal expansion. + bulk : Bulk modulus of the material (GPa). + + """ + + te = np.zeros(len(temperatures)) + volume = np.zeros(len(temperatures)) + for itemp in range(len(temperatures)): + cp_key = format(temperatures[itemp], '.1f') + if(cp_key in self.cp.keys()): + print('Phonon mode heat capacities for this temperature have already been calculated. Continuing ...') + else: + self.get_heat_capacity(temperatures[itemp]) + te[itemp] = np.einsum('ij,ij', self.cp[cp_key], self.gruneisen)/float(self.nkpt)/self.volume/bulk*1.0e21 + volume[itemp] = self.volume*(1.0 + np.sum(te[:itemp])*(temperatures[1] - temperatures[0])) + + with open('Thermal_expansion', 'w+') as outfile: + outfile.write('# ' + format('Temperature (K)', STR_FMT)) + outfile.write(' ' + format('Thermal expansion (1/K)', STR_FMT)) + outfile.write(' ' + format('Volume (A^3)', STR_FMT)) + outfile.write('\n') + for itemp in range(len(temperatures)): + outfile.write(3*' ' + format(temperatures[itemp], '.12e')) + outfile.write(3*' ' + format(te[itemp], '.12e')) + outfile.write(3*' ' + format(volume[itemp], '.12e')) + outfile.write('\n') + + ################################################################################################################################################ + + def calculate_vibrational_part_of_bulk_modulus(self, temperatures): + + bulk = np.zeros(len(temperatures)) + + for itemp in range(len(temperatures)): + pops = np.zeros_like(self.freqs) + for iqpt in range(len(pops)): + for iband in range(len(pops[iqpt])): + pops[iqpt,iband] = bose_einstein(self.freqs[iqpt,iband]*SSCHA_TO_THZ*1.0e12, temperatures[itemp], HPLANCK, KB, cp_mode = self.cp_mode) + exponents = HPLANCK*self.freqs*SSCHA_TO_THZ*1.0e12/KB/temperatures[itemp] + term = np.einsum('ij,ij,ij,ij,ij', self.freqs, exponents, self.gruneisen**2, pops**2,np.exp(exponents)) + bulk[itemp] = -1.0*term*SSCHA_TO_THZ*1.0e12*HPLANCK/self.volume*1.0e21/float(self.nkpt) + + with open('Quasiharmonic_bulk_modulus', 'w+') as outfile: + outfile.write('# ' + format('Temperature (K)', STR_FMT)) + outfile.write(' ' + format('Bulk modulus (GPa)', STR_FMT)) + outfile.write('\n') + for itemp in range(len(temperatures)): + outfile.write(3*' ' + format(temperatures[itemp], '.12e')) + outfile.write(3*' ' + format(bulk[itemp], '.12e')) + outfile.write('\n') diff --git a/cellconstructor/Timer.py b/cellconstructor/Timer.py index ceeb9e06..c0fbccc4 100644 --- a/cellconstructor/Timer.py +++ b/cellconstructor/Timer.py @@ -1,10 +1,46 @@ import time import numpy as np +import cellconstructor as CC, cellconstructor.Settings +from cellconstructor.Settings import ParallelPrint as print +import inspect +import json + + +# Recursively transform a class into a dictionary +def to_dict(obj): + if isinstance(obj, dict): + return {k: to_dict(v) for k, v in obj.items()} + elif hasattr(obj, '__dict__'): + return to_dict(obj.__dict__) + elif isinstance(obj, list): + return [to_dict(elem) for elem in obj] + else: + return obj + +# Recursively transform a dictionary into the timer object +def to_timer(dict): + if "timed_subroutines" in dict: + for name in dict["timed_subroutines"]: + if dict["timed_subroutines"][name]["timer"] is not None: + dict["timed_subroutines"][name]["timer"] = to_timer(dict["timed_subroutines"][name]["timer"]) + + timer = Timer() + timer.__dict__.update(dict) + return timer + return dict -class Timer: +def load_json(filename): + """ + Load a timer object from a json file + """ + with open(filename, "r") as f: + my_dyct = json.load(f) + return to_timer(my_dyct) + - def __init__(self, active = False, print_each = None): +class Timer: + def __init__(self, active=False, print_each=None, level=0): """ This class is used to time functions over several repeats @@ -15,13 +51,18 @@ def __init__(self, active = False, print_each = None): print_each: float Each time a subroutine overrun the following value in seconds print its status. By default None, do not print unless specific requested. + level: int + The level of subtimers. + If 0, This is the principal timer, + if 1, this is a subtimer of the principal timer, etc. """ self.active = active + self.level = level self.timed_subroutines = {} self.print_each = print_each - def add_timer(self, name, value): + def add_timer(self, name, value, timer=None): """ Add a timer to the specific value """ @@ -29,7 +70,7 @@ def add_timer(self, name, value): self.timed_subroutines[name]["time"] += value self.timed_subroutines[name]["counts"] += 1 else: - self.timed_subroutines[name] = {"counts": 1, "time" : value} + self.timed_subroutines[name] = {"counts": 1, "time" : value, "timer" : timer} if self.print_each is not None: #print (self.timed_subroutines[name]["time"]) @@ -41,51 +82,111 @@ def add_timer(self, name, value): self.timed_subroutines[name]["time"] = 0 self.timed_subroutines[name]["counts"] = 0 - def execute_timed_function(self, function, *args, **kwargs): + def spawn_child(self): + """Spawn a child timer.""" + return Timer(active=self.active, print_each=self.print_each, level=self.level+1) + + def execute_timed_function(self, function, *args, override_name="", **kwargs): """ Execute the function with the given arguments and keyword arguments and time it. This method returns whatever is returned by the function """ if self.active: t1 = time.time() - ret = function(*args, **kwargs) + + # Check if the function accept the "timer" keyword argument + new_timer = None + func_name = override_name + isfunction = inspect.isfunction(function) or inspect.ismethod(function) + if isfunction: + if not func_name: + func_name = function.__name__ + + sig = inspect.signature(function) + tparam = sig.parameters.get("timer") + if tparam is not None and not "timer" in kwargs: + if func_name in self.timed_subroutines: + new_timer = self.timed_subroutines[func_name]["timer"] + else: + new_timer = self.spawn_child() + ret = function(*args, timer=new_timer,**kwargs) + else: + ret = function(*args, **kwargs) + else: + assert callable(function), "The function argument must be a function or a callable object, got: {}".format(type(function)) + ret = function(*args, **kwargs) + if not func_name: + func_name = function.__class__.__name__ t2 = time.time() - self.add_timer(function.__name__, t2-t1) + + self.add_timer(func_name, t2-t1, new_timer) return ret else: return function(*args, **kwargs) + def save_json(self, filename): + """ + Save the timing data to a file in json format + """ + # save all the dictionary of this function as a json file + with open(filename, "w") as f: + my_dyct = to_dict(self) + json.dump(my_dyct, f, indent=4) - - def print_report(self): + def print_report(self, master_level=0, is_master=False, verbosity_limit=0.05): """ - Print the report on timing for each function. + Print the report on timing for each timer and subtimer contained. + + Parameters + ---------- + master_level: int + The level of the master timer. This is used to print the correct indentation. + is_master: bool + If True, ignore the master_level keyword and assume this timer is the master. + This is equivalent to setting master_level = self.level + verbosity_limit: float + The minimum percentage of time occupied by each function above which the function is printed. + This is used to avoid printing too many functions that are not relevant. + Put 0 to print all functions. """ + if is_master: + master_level = self.level + + level = self.level - master_level + + prefix = " "*4*level - print("") - print("") - print(" /----------------\ ") - print(" | TIMER REPORT | ") - print(" \----------------/ ") - print() + if level == 0: + print("\n\n" + "="*24 + "\n" + " "*6 + "TIMER REPORT" + " "*6 + "\n" + "="*24 + "\n") + print("Threshold for printing: {:d} %".format(int(verbosity_limit*100))) + print() + + total_time = sum([self.timed_subroutines[name]["time"] for name in self.timed_subroutines]) for name in self.timed_subroutines: tt = self.timed_subroutines[name]["time"] + if tt / total_time < verbosity_limit: + continue hours = int(tt) // 3600 tt -= hours * 3600 minutes = int(tt) // 60 tt -= minutes * 60 - print("Function: {}".format(name)) - print("N = {} calls took: {} hours; {} minutes; {:.2f} seconds".format(self.timed_subroutines[name]["counts"], hours, minutes, tt)) - print("Average of {} s per call".format(self.timed_subroutines[name]["time"] / self.timed_subroutines[name]["counts"])) + print("{}Function: {}".format(prefix, name)) + print("{}N = {} calls took: {} hours; {} minutes; {:.2f} seconds".format(prefix, self.timed_subroutines[name]["counts"], hours, minutes, tt)) + print("{}Average of {} s per call".format(prefix, self.timed_subroutines[name]["time"] / self.timed_subroutines[name]["counts"])) + if self.timed_subroutines[name]["timer"] is not None: + print("{}Subroutine report:".format(prefix)) + self.timed_subroutines[name]["timer"].print_report(master_level=master_level, verbosity_limit=verbosity_limit) + print() - print() - print(" END OF TIMER REPORT ") - print("---------------------") - print() + if level == 0: + print() + print(" END OF TIMER REPORT ") + print("=====================") + print() - \ No newline at end of file + \ No newline at end of file diff --git a/cellconstructor/Units.py b/cellconstructor/Units.py index 91d2a766..88ee548f 100644 --- a/cellconstructor/Units.py +++ b/cellconstructor/Units.py @@ -21,6 +21,7 @@ HBAR = np.float64(0.06465415105180661) K_B = np.float64(8.617330337217213e-05) RY_TO_EV = np.float64(13.605693012183622) +HA_TO_EV = 2 * RY_TO_EV RY_PER_BOHR3_TO_GPA = 14710.513242194795 RY_PER_BOHR3_TO_EV_PER_A3 = 91.81576765360094 RY_TO_KELVIN = RY_TO_EV / K_B diff --git a/cellconstructor/calculators.py b/cellconstructor/calculators.py index 6aba1fc7..b8a16f8d 100644 --- a/cellconstructor/calculators.py +++ b/cellconstructor/calculators.py @@ -52,10 +52,14 @@ def get_energy_forces(calculator, structure): if isinstance(calculator, ase.calculators.calculator.Calculator): atm = structure.get_ase_atoms() atm.set_calculator(calculator) + energy = atm.get_total_energy() + if isinstance(energy, np.ndarray): energy = energy[0] - return energy, atm.get_forces() + + forces = atm.get_forces() + return energy, forces elif isinstance(calculator, Calculator): calculator.calculate(structure) return calculator.results["energy"], calculator.results["forces"] @@ -226,6 +230,8 @@ def write_input(self, structure): ATOMIC_SPECIES """ for atm in typs: + if not atm in self.pseudopotentials: + raise ValueError(f"Error, the key {atm} is not a valid atom specified in the pseudopotentials: {list(self.pseudopotentials)}") scf_text += "{} {} {}\n".format(atm, self.masses[atm], self.pseudopotentials[atm]) if isinstance(self.kpts, str): diff --git a/cellconstructor/symmetries.py b/cellconstructor/symmetries.py index 946b1d9d..85ea7662 100644 --- a/cellconstructor/symmetries.py +++ b/cellconstructor/symmetries.py @@ -20,6 +20,7 @@ from cellconstructor.Units import * import cellconstructor.Timer as Timer from cellconstructor.Settings import ParallelPrint as print +import cellconstructor.Settings as Settings # Load the fortran symmetry QE module import symph @@ -73,7 +74,10 @@ def __init__(self, structure, threshold = 1e-5): # raise ValueError("Error, symmetry operation can be initialize only if the structure has a unit cell") self.structure = structure - self.threshold = np.float64(threshold) + + # Max dimension + max_dimension = np.max(self.structure.unit_cell.ravel()) + self.threshold = np.float64(threshold / max_dimension) # Setup the threshold symph.symm_base.set_accep_threshold(self.threshold) @@ -89,7 +93,7 @@ def __init__(self, structure, threshold = 1e-5): self.QE_ft = np.zeros( (3, 48), dtype = np.float64, order = "F") - self.QE_minus_q = np.bool( False ) + self.QE_minus_q = False self.QE_irotmq = np.intc(0) self.QE_nsymq = np.intc( 0 ) self.QE_nsym = np.intc(0) @@ -853,7 +857,6 @@ def SymmetrizeFCQ(self, fcq, q_stars, verbose = False, asr = "simple"): The list of q points divided by stars, the fcq must follow the order of the q points in the q_stars array """ - nqirr = len(q_stars) nq = np.sum([len(x) for x in q_stars]) @@ -1902,7 +1905,7 @@ def GetIRT(structure, symmetry, timer = Timer.Timer(), debug = False): new_struct.apply_symmetry(symmetry, True) irt = np.array(new_struct.get_equivalent_atoms(n_struct_2), dtype =np.intc) else: - timer.execute_timed_function(new_struct.apply_symmetry, symmetry, True, timer = timer) + timer.execute_timed_function(new_struct.apply_symmetry, symmetry, True) irt = np.array( timer.execute_timed_function(new_struct.get_equivalent_atoms, n_struct_2), dtype =np.intc) return irt @@ -1938,15 +1941,13 @@ def ApplySymmetryToVector(symmetry, vector, unit_cell, irt): nat, dumb = np.shape(vector) work = np.zeros( (nat, 3)) sym = symmetry[:, :3] - - for i in range(nat): - # Pass to crystalline coordinates - v1 = Methods.covariant_coordinates(unit_cell, vector[i, :]) - # Apply the symmetry - w1 = sym.dot(v1) - # Return in cartesian coordinates - work[irt[i], :] = np.einsum("ab,a", unit_cell, w1) - + + v1 = Methods.covariant_coordinates(unit_cell, vector) + w1 = sym.dot(v1.T).T + + # Return in cartesian coordinates + work[irt[:], :] = w1.dot(unit_cell)# unit_cell.T.dot(w1) #np.einsum("ab,a", unit_cell, w1) + return work def ApplySymmetriesToVector(symmetries, vector, unit_cell, irts): @@ -2069,6 +2070,9 @@ def GetQGrid(unit_cell, supercell_size, enforce_gamma_first = True): This method gives back a list of q points given the reciprocal lattice vectors and the supercell size. + + The q points are returned in 2pi / a units. + Where a is the unit of measure of the unit_cell (usually Angstrom). Parameters ---------- @@ -3025,4 +3029,166 @@ def GetSymmetryMatrix(sym, structure, crystal = False): i_irt = irt[i] sym_mat[3 * i_irt : 3*i_irt+3, 3*i : 3*i+ 3] = sym_cryst - return sym_mat \ No newline at end of file + return sym_mat + + +def get_symmetry_equivalent_atoms(symmetries, structure, parallel=True, timer=None): + """ + GET THE SYMMETRY EQUIVALENT ATOMS + ================================= + + This subroutine returns the list of the 'irt' variable, + which is the index of the atom in the original structure + equivalent to that of the structure after the symmetry operation is applied. + + new_coords[irt[i], :] = S coords[i, :] + + This subroutine exploits MPI parallelization. + + Parameters + ---------- + symmetries : list of ndarray(size = (3, 4)) + The array of the symmetries + structure : CC.Structure.Structure() + The structure on which the symmetries are applied + + Results + ------- + irts : list of ndarray(size = (structure.N_atoms, ), dtype = np.intc) + The list of the irt array for each symmetry + """ + + if not parallel: + irts = [] + for i, s in enumerate(symmetries): + if timer is not None: + irt = timer.execute_timed_function(GetIRT, structure, s) + else: + irt = GetIRT(structure, s, timer=timer) + irts.append(irt) + else: + def function(s, timer=None): + return GetIRT(structure, s, timer=timer) + + if timer is not None: + irts = timer.execute_timed_function(Settings.GoParallel, function, symmetries) + else: + irts = Settings.GoParallel(function, symmetries) + + + return irts + + +def get_force_constants_generators(symmetries, irts, structure, timer=None): + """ + GET FORCE CONSTANTS GENERATORS + ============================== + + Compute a minimal basis for the force constants matrix. + It is very useful for the compression of the force constants matrix, + and to reduce the number of independent displacements that need to be calculated. + + If it is for a supercell dynamical matrix, symmetries and structure must match the supercell. + Note, the basis of the generators is not orthonormal by default. + + It returns both generators and the basis. + Each generator contain the atom index, the cartesian direction and the symmetry index. + The corresponding row of the basis is transformed displacement vector according to the symmetry. + This allow to transform the force constants from the original basis to a more compact one. + + This function is not parallelized and runs only on the master core. + + + Parameters + ---------- + symmetries : list of ndarray(size = (3, 4)) + The array of the symmetries + irts : list of ndarray(size = (structure.N_atoms, ), dtype = np.intc) + The list of the irt array for each symmetry + structure : CC.Structure.Structure() + The structure on which the symmetries are applied + + Results + ------- + generators : list of dict (size = 3*structure.N_atoms) + List of generators. + Each generator is a dictionary with the following keys: + 'sym_index' : int + The index of the symmtry associated to the generator + 'atom_index' : int + The index of the atom associated to the generator + 'direction' : int (0, 1, 2) + The cartesian direction associated to the generator + independent_displacements : list + List of the independent displacements that identify the generators. + basis : ndarray(size = (3*structure.N_atoms, 3*structure.N_atoms), dtype = np.double) + The basis matrix of the generators. + """ + displacements = [] + generators = [] + list_of_calculations = [] + n_syms = len(symmetries) + nat3 = structure.N_atoms * 3 + + if Settings.am_i_the_master(): + for i in range(structure.N_atoms): + for j in range(3): + # Generate the displacement + disp = np.zeros((structure.N_atoms, 3), dtype=np.double) + disp[i, j] += 1 + + #if debug: + # print("Simulating displacement", i, j) + + # Check if the displacement can be decomposed in those already computed + if timer is not None: + coefficients = timer.execute_timed_function(Methods.get_generic_covariant_coefficients, disp.ravel(), displacements) + else: + coefficients = Methods.get_generic_covariant_coefficients(disp.ravel(), displacements) + + #if debug: + # print("The decomposition is:", coefficients) + if coefficients is None: + # The displacement needs to be computed + list_of_calculations.append((i,j)) + + + # Generate the symmetry equivalent displacements + if timer is not None: + disp_sym = timer.execute_timed_function(ApplySymmetriesToVector, symmetries, disp, structure.unit_cell, irts) + else: + disp_sym = ApplySymmetriesToVector(symmetries, disp, structure.unit_cell, irts) + + + # Check wether to add or not the newly generated displacements to the space + for i_sym in range(n_syms): + v = disp_sym[i_sym, :, :] + #if debug: + # print("The symmetry {} gives a vector v = {}".format(i_sym, v)) + if timer is not None: + coeffs = timer.execute_timed_function(Methods.get_generic_covariant_coefficients, v.ravel(), displacements) + else: + coeffs = Methods.get_generic_covariant_coefficients(v.ravel(), displacements) + #if debug: + # print("Is new?", coeffs is None) + if coeffs is None: + displacements.append(v.ravel()) + generators.append({"sym_index": i_sym, "atom_index": i, "direction": j}) + assert len(displacements) <= nat3, "The number of displacements is not correct. Something went wrong." + if len(displacements) == nat3: + break + + # Early exit + if len(displacements) == nat3: + break + + # Early exit + if len(displacements) == nat3: + break + + # Broadcast the displacements to all the processes + displacements = Settings.broadcast(displacements) + list_of_calculations = Settings.broadcast(list_of_calculations) + generators = Settings.broadcast(generators) + + return generators, list_of_calculations, displacements \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 39182bbc..922ee4a0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,4 @@ setuptools numpy scipy ase -spglib +spglib<=2.2 diff --git a/setup.py b/setup.py index d0dc98a7..87ab7b5e 100644 --- a/setup.py +++ b/setup.py @@ -45,6 +45,17 @@ extra_f90_compile_args = ["-cpp"] ) +cond_ext = Extension(name = "thermal_conductivity", + sources = ["FModules/get_scattering_q_grid.f90", + "FModules/third_order_cond.f90", + "FModules/third_order_cond_centering.f90", + "FModules/get_lf.f90"], + libraries= ["lapack", "blas"], + #extra_f90_compile_args = ["-cpp", "-fcheck=all", "-fopenmp", "-lgomp"], + extra_f90_compile_args = ["-cpp", "-O2", "-fopenmp", "-lgomp"], + extra_link_args = ["-fopenmp"] + ) + # The C module extension actually depeds on the python version @@ -61,7 +72,7 @@ setup( name = "CellConstructor", - version = "1.2", + version = "1.4.0", description = "Python utilities that is interfaced with ASE for atomic crystal analysis", author = "Lorenzo Monacelli", url = "https://github.com/mesonepigreco/CellConstructor", @@ -71,7 +82,7 @@ license = "MIT", include_package_data = True, scripts = ["scripts/symmetrize_dynmat.py", "scripts/cellconstructor_test.py", "scripts/view_scf_atoms.py"], - ext_modules = [symph_ext, cc_modules_ext, thirdorder_ext, secondorder_ext] + ext_modules = [symph_ext, cc_modules_ext, thirdorder_ext, secondorder_ext, cond_ext] ) def readme(): diff --git a/tests/TestEffChargeInterp/test_eff_interpol.py b/tests/TestEffChargeInterp/test_eff_interpol.py index 15ae3aaa..730c93f1 100644 --- a/tests/TestEffChargeInterp/test_eff_interpol.py +++ b/tests/TestEffChargeInterp/test_eff_interpol.py @@ -8,7 +8,7 @@ import numpy as np import pytest -def test_eff_charge_signle_q(): +def test_eff_charge_single_q(): total_path = os.path.dirname(os.path.abspath(__file__)) os.chdir(total_path) diff --git a/tests/TestFiniteDisplacementPhonons/test_au_phonons.py b/tests/TestFiniteDisplacementPhonons/test_au_phonons.py new file mode 100644 index 00000000..342e1ce0 --- /dev/null +++ b/tests/TestFiniteDisplacementPhonons/test_au_phonons.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import cellconstructor as CC +import cellconstructor.Phonons +import cellconstructor.Structure + +import ase, ase.build +import ase.calculators.emt + +import numpy as np +import pytest + + +@pytest.mark.parametrize("supercell", [(2,2,2), (3,3,3)]) +def test_phonons_finite_displacements(supercell, debug=False): + """Test the phonons using finite displacements""" + timer = CC.Timer.Timer(active=True) + + # Build a MgO structure using ASE + atoms = ase.build.bulk('Cu', 'fcc', a=3.6) + + # Convert to cellconstructor + struct = CC.Structure.Structure() + struct.generate_from_ase_atoms(atoms) + + my_struct = struct.generate_supercell((2,2,2)) + my_struct.unit_cell[0, :] = struct.unit_cell[1, :] + struct.unit_cell[2, :] + my_struct.unit_cell[1, :] = struct.unit_cell[0, :] + struct.unit_cell[2, :] + my_struct.unit_cell[2, :] = struct.unit_cell[0, :] + struct.unit_cell[1, :] + my_struct.fix_coords_in_unit_cell(delete_copies=True) + + struct = my_struct + + # Generate the EMT calculator for ASE + calc = ase.calculators.emt.EMT() + + # Get the dynamical matrix using finite displacements + dyn = CC.Phonons.compute_phonons_finite_displacements(struct, calc, + supercell=supercell, use_symmetries=False) + + # Compute the dynamical matrix using the symmetrized + dyn2 = CC.Phonons.compute_phonons_finite_displacements_sym(struct, calc, + supercell=supercell, + debug=True, + timer=timer) + + w_good, pol_good = dyn.DiagonalizeSupercell() + w_bad, pol_bad = dyn2.DiagonalizeSupercell() + + dyn.Symmetrize(use_spglib = True) + dyn2.Symmetrize(use_spglib = True) + + if debug: + print("\n".join(["{:3}) {:10.5f} {:10.5f} cm-1".format(i, + w_good[i] * CC.Units.RY_TO_CM, + w_bad[i] * CC.Units.RY_TO_CM) + for i in range(len(w_good))])) + + if timer is not None: + timer.print_report() + + # Check that the two are equal + for iq, dyn in enumerate(dyn.dynmats): + assert np.allclose(dyn, dyn2.dynmats[iq], atol=1e-3) + + +if __name__ == "__main__": + test_phonons_finite_displacements((6,6,6), debug=True) diff --git a/tests/TestImposeSymmetries/test_eqivalent_atoms.py b/tests/TestImposeSymmetries/test_eqivalent_atoms.py new file mode 100644 index 00000000..b2e87ad9 --- /dev/null +++ b/tests/TestImposeSymmetries/test_eqivalent_atoms.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +import sys, os +import pytest +import numpy as np + +import cellconstructor as CC +import cellconstructor.Structure + + + +def test_equivalent_atoms(debug=False): + # Set a seed for reproducibility + np.random.seed(0) + + struct = CC.Structure.Structure(2) + struct.coords[1, :] = 0.5 + struct.has_unit_cell = True + struct.unit_cell = np.eye(3) + + new_struct = struct.generate_supercell((3,3,3)) + reference = new_struct.copy() + new_struct.coords[:,:] += np.random.normal(0, 0.1, new_struct.coords.shape) + + # Shuffle the rows of new_struct.coords + irt = np.random.permutation(new_struct.coords.shape[0]) + new_struct.coords = new_struct.coords[irt, :] + + irt_code = new_struct.get_equivalent_atoms(reference) + irt_debug = new_struct.get_equivalent_atoms(reference, + debug=True) + + if debug: + print("IRT:", irt) + print("IRT_CODE:", irt_code) + print("IRT_DEBUG:", irt_debug) + + assert np.all(np.array(irt_code) == np.array(irt_debug)), "Pristine structure wrong atom assignment" + new_struct.coords[:,:] += np.random.normal(0, 0.1, new_struct.coords.shape) + + irt_code = reference.get_equivalent_atoms(new_struct) + irt_debug = reference.get_equivalent_atoms(new_struct, + debug=True) + assert np.all(np.array(irt_code) == np.array(irt_debug)), "Noised structure wrong atom assignment" + + + + +if __name__ == "__main__": + test_equivalent_atoms(debug=True) diff --git a/tests/TestImposeSymmetries/test_impose_symmetries.py b/tests/TestImposeSymmetries/test_impose_symmetries.py index 696f7088..4ea67d84 100644 --- a/tests/TestImposeSymmetries/test_impose_symmetries.py +++ b/tests/TestImposeSymmetries/test_impose_symmetries.py @@ -51,3 +51,7 @@ def test_impose_symmetry(): print ("New space group with high threshold:", s_group_after) assert s_group_after == GROUP + + +if __name__ == "__main__": + test_impose_symmetry() diff --git a/tests/TestStrainConfiguration/strained_dyn b/tests/TestStrainConfiguration/strained_dyn index 21741a90..b214f5d6 100644 --- a/tests/TestStrainConfiguration/strained_dyn +++ b/tests/TestStrainConfiguration/strained_dyn @@ -8,700 +8,700 @@ Basis vectors 1 'O ' 14582.1964298742277606 2 'H ' 918.8360549359653078 1 1 0.5839302648000000 0.3319937777999998 0.1132488480000000 - 2 2 0.5839302648000000 0.3320150535600000 0.3843247011600000 + 2 2 0.5839302648000000 0.3320150535599999 0.3843247011600000 3 2 0.5839302648000000 0.0732959209200000 0.0332384636400000 - 4 1 1.1678605296000000 0.6712271367599999 1.7829483982799998 - 5 2 1.3852049017199992 0.5385565359600000 1.8752979972000001 - 6 2 0.9505161586799996 0.5385565359600000 1.8752979972000001 - 7 1 1.1678605296000000 0.6823894577999998 1.0673640780000000 - 8 2 1.1678605296000000 0.6823681820400000 1.3384399323599998 - 9 2 1.1678605296000000 0.9410873158799999 0.9873536936399999 + 4 1 1.1678605296000000 0.6712271367599996 1.7829483982799998 + 5 2 1.3852049017199992 0.5385565359599997 1.8752979972000001 + 6 2 0.9505161586799996 0.5385565359599997 1.8752979972000001 + 7 1 1.1678605296000000 0.6823894577999996 1.0673640780000000 + 8 2 1.1678605296000000 0.6823681820399999 1.3384399323599998 + 9 2 1.1678605296000000 0.9410873158799996 0.9873536936399999 10 1 0.5839302648000000 0.3431560988400000 0.8288331670799999 - 11 2 0.3665858938799999 0.4758266996400000 0.9211827659999999 - 12 2 0.8012746369199997 0.4758266996400000 0.9211827659999999 + 11 2 0.3665858938799999 0.4758266996399999 0.9211827659999999 + 12 2 0.8012746369199997 0.4758266996399998 0.9211827659999999 Dynamical Matrix in cartesian axes q = ( 0.000000000000 0.000000000000 0.000000000000 ) 1 1 - 0.0723775009917376 0.0000000000000000 0.0000000000000012 0.0000000000000000 0.0000000000000011 0.0000000000000000 - 0.0000000000000012 0.0000000000000000 0.3831399905936577 0.0000000000000000 0.0800072256509283 0.0000000000000000 - 0.0000000000000011 0.0000000000000000 0.0800072256509283 0.0000000000000000 0.4293434337307471 0.0000000000000000 + 0.0723775009917382 0.0000000000000000 0.0000000000000022 0.0000000000000000 0.0000000000000005 0.0000000000000000 + 0.0000000000000022 0.0000000000000000 0.3831399905936563 0.0000000000000000 0.0800072256509442 0.0000000000000000 + 0.0000000000000005 0.0000000000000000 0.0800072256509442 0.0000000000000000 0.4293434337307424 0.0000000000000000 1 2 - -0.0251057439413784 0.0000000000000000 -0.0000000000000002 0.0000000000000000 -0.0000000000000005 0.0000000000000000 - 0.0000000000000008 0.0000000000000000 -0.0569567699834675 0.0000000000000000 -0.0058150573711706 0.0000000000000000 - 0.0000000000000004 0.0000000000000000 0.0222771411146704 0.0000000000000000 -0.2988598772525898 0.0000000000000000 + -0.0251057439413781 0.0000000000000000 -0.0000000000000002 0.0000000000000000 0.0000000000000004 0.0000000000000000 + 0.0000000000000014 0.0000000000000000 -0.0569567699834664 0.0000000000000000 -0.0058150573711854 0.0000000000000000 + 0.0000000000000007 0.0000000000000000 0.0222771411146679 0.0000000000000000 -0.2988598772525804 0.0000000000000000 1 3 - -0.0289738345959187 0.0000000000000000 -0.0000000000000013 0.0000000000000000 -0.0000000000000006 0.0000000000000000 - 0.0000000000000003 0.0000000000000000 -0.2820802915433023 0.0000000000000000 -0.0527306161696206 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 -0.0884826303559269 0.0000000000000000 -0.0739447334126166 0.0000000000000000 + -0.0289738345959188 0.0000000000000000 -0.0000000000000023 0.0000000000000000 -0.0000000000000009 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 -0.2820802915432987 0.0000000000000000 -0.0527306161696205 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 -0.0884826303559405 0.0000000000000000 -0.0739447334126184 0.0000000000000000 1 4 - -0.0373686571560767 0.0000000000000000 0.0000000000000010 0.0000000000000000 -0.0000000000000005 0.0000000000000000 - -0.0000000000000286 0.0000000000000000 -0.0336428001202010 0.0000000000000000 -0.0041894809945674 0.0000000000000000 - -0.0000000000000139 0.0000000000000000 -0.0044397818519523 0.0000000000000000 0.0041303780996508 0.0000000000000000 + -0.0373686571560764 0.0000000000000000 0.0000000000000003 0.0000000000000000 -0.0000000000000005 0.0000000000000000 + -0.0000000000000286 0.0000000000000000 -0.0336428001201919 0.0000000000000000 -0.0041894809945731 0.0000000000000000 + -0.0000000000000102 0.0000000000000000 -0.0044397818519251 0.0000000000000000 0.0041303780996330 0.0000000000000000 1 5 - 0.0079739154089291 0.0000000000000000 -0.0168418597307733 0.0000000000000000 0.0106690755761893 0.0000000000000000 - -0.0100652146645601 0.0000000000000000 -0.0099918936929156 0.0000000000000000 -0.0069122209428977 0.0000000000000000 - -0.0036706343437405 0.0000000000000000 -0.0005259246072782 0.0000000000000000 -0.0156150191112111 0.0000000000000000 + 0.0079739154089291 0.0000000000000000 -0.0168418597307733 0.0000000000000000 0.0106690755761898 0.0000000000000000 + -0.0100652146645572 0.0000000000000000 -0.0099918936929198 0.0000000000000000 -0.0069122209428951 0.0000000000000000 + -0.0036706343437175 0.0000000000000000 -0.0005259246072903 0.0000000000000000 -0.0156150191112033 0.0000000000000000 1 6 - 0.0079739154089278 0.0000000000000000 0.0168418597307725 0.0000000000000000 -0.0106690755761886 0.0000000000000000 - 0.0100652146645852 0.0000000000000000 -0.0099918936929004 0.0000000000000000 -0.0069122209429071 0.0000000000000000 - 0.0036706343437532 0.0000000000000000 -0.0005259246072706 0.0000000000000000 -0.0156150191112160 0.0000000000000000 + 0.0079739154089280 0.0000000000000000 0.0168418597307731 0.0000000000000000 -0.0106690755761890 0.0000000000000000 + 0.0100652146645834 0.0000000000000000 -0.0099918936929039 0.0000000000000000 -0.0069122209429046 0.0000000000000000 + 0.0036706343437260 0.0000000000000000 -0.0005259246072847 0.0000000000000000 -0.0156150191112065 0.0000000000000000 1 7 - 0.0015706027157735 0.0000000000000000 0.0000000000000015 0.0000000000000000 0.0000000000000000 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 0.0058994142114998 0.0000000000000000 0.0129555088579347 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 -0.0129555088579457 0.0000000000000000 -0.0025061456783193 0.0000000000000000 + 0.0015706027157740 0.0000000000000000 0.0000000000000017 0.0000000000000000 -0.0000000000000004 0.0000000000000000 + 0.0000000000000018 0.0000000000000000 0.0058994142115024 0.0000000000000000 0.0129555088579572 0.0000000000000000 + 0.0000000000000003 0.0000000000000000 -0.0129555088579213 0.0000000000000000 -0.0025061456783196 0.0000000000000000 1 8 - -0.0018152750012300 0.0000000000000000 -0.0000000000000004 0.0000000000000000 -0.0000000000000006 0.0000000000000000 - 0.0000000000000007 0.0000000000000000 0.0012476417535556 0.0000000000000000 -0.0078942408875751 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 -0.0002039213450288 0.0000000000000000 0.0145769254785634 0.0000000000000000 + -0.0018152750012301 0.0000000000000000 -0.0000000000000003 0.0000000000000000 -0.0000000000000003 0.0000000000000000 + 0.0000000000000011 0.0000000000000000 0.0012476417535551 0.0000000000000000 -0.0078942408875953 0.0000000000000000 + 0.0000000000000005 0.0000000000000000 -0.0002039213450278 0.0000000000000000 0.0145769254785557 0.0000000000000000 1 9 - -0.0016399265604469 0.0000000000000000 -0.0000000000000011 0.0000000000000000 0.0000000000000004 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 -0.0035091911501685 0.0000000000000000 -0.0021722504817067 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 0.0074822204968758 0.0000000000000000 0.0003426041600637 0.0000000000000000 + -0.0016399265604469 0.0000000000000000 -0.0000000000000015 0.0000000000000000 0.0000000000000006 0.0000000000000000 + -0.0000000000000005 0.0000000000000000 -0.0035091911501695 0.0000000000000000 -0.0021722504817071 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 0.0074822204968551 0.0000000000000000 0.0003426041600707 0.0000000000000000 1 10 - 0.0078082955673484 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 - -0.0000000000000126 0.0000000000000000 0.0119074076296553 0.0000000000000000 -0.0034942738523579 0.0000000000000000 - -0.0000000000000024 0.0000000000000000 0.0044778895271319 0.0000000000000000 -0.0367974389514135 0.0000000000000000 + 0.0078082955673473 0.0000000000000000 0.0000000000000003 0.0000000000000000 0.0000000000000008 0.0000000000000000 + -0.0000000000000142 0.0000000000000000 0.0119074076296482 0.0000000000000000 -0.0034942738523642 0.0000000000000000 + -0.0000000000000075 0.0000000000000000 0.0044778895271162 0.0000000000000000 -0.0367974389514215 0.0000000000000000 1 11 - -0.0014003952261869 0.0000000000000000 0.0002449744821628 0.0000000000000000 -0.0015206472447128 0.0000000000000000 - -0.0091891495399388 0.0000000000000000 -0.0030108060126908 0.0000000000000000 -0.0014211831836475 0.0000000000000000 - -0.0007217572183772 0.0000000000000000 -0.0035553985811578 0.0000000000000000 -0.0025275585661347 0.0000000000000000 + -0.0014003952261856 0.0000000000000000 0.0002449744821623 0.0000000000000000 -0.0015206472447132 0.0000000000000000 + -0.0091891495399405 0.0000000000000000 -0.0030108060126859 0.0000000000000000 -0.0014211831836441 0.0000000000000000 + -0.0007217572183923 0.0000000000000000 -0.0035553985811516 0.0000000000000000 -0.0025275585661300 0.0000000000000000 1 12 - -0.0014003952261867 0.0000000000000000 -0.0002449744821631 0.0000000000000000 0.0015206472447128 0.0000000000000000 - 0.0091891495399492 0.0000000000000000 -0.0030108060126839 0.0000000000000000 -0.0014211831836433 0.0000000000000000 - 0.0007217572183790 0.0000000000000000 -0.0035553985811565 0.0000000000000000 -0.0025275585661339 0.0000000000000000 + -0.0014003952261866 0.0000000000000000 -0.0002449744821628 0.0000000000000000 0.0015206472447123 0.0000000000000000 + 0.0091891495399536 0.0000000000000000 -0.0030108060126772 0.0000000000000000 -0.0014211831836398 0.0000000000000000 + 0.0007217572183988 0.0000000000000000 -0.0035553985811472 0.0000000000000000 -0.0025275585661280 0.0000000000000000 2 1 - -0.0251057439413784 0.0000000000000000 0.0000000000000008 0.0000000000000000 0.0000000000000004 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 -0.0569567699834675 0.0000000000000000 0.0222771411146704 0.0000000000000000 - -0.0000000000000005 0.0000000000000000 -0.0058150573711706 0.0000000000000000 -0.2988598772525898 0.0000000000000000 + -0.0251057439413781 0.0000000000000000 0.0000000000000014 0.0000000000000000 0.0000000000000007 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 -0.0569567699834664 0.0000000000000000 0.0222771411146679 0.0000000000000000 + 0.0000000000000004 0.0000000000000000 -0.0058150573711854 0.0000000000000000 -0.2988598772525804 0.0000000000000000 2 2 - 0.0352255604087121 0.0000000000000000 -0.0000000000000000 0.0000000000000000 -0.0000000000000001 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 0.0577498980966769 0.0000000000000000 0.0004642893512920 0.0000000000000000 - -0.0000000000000001 0.0000000000000000 0.0004642893512920 0.0000000000000000 0.2960907478396980 0.0000000000000000 + 0.0352255604087117 0.0000000000000000 -0.0000000000000005 0.0000000000000000 0.0000000000000001 0.0000000000000000 + -0.0000000000000005 0.0000000000000000 0.0577498980966749 0.0000000000000000 0.0004642893512930 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 0.0004642893512930 0.0000000000000000 0.2960907478396839 0.0000000000000000 2 3 - 0.0037861455182865 0.0000000000000000 -0.0000000000000009 0.0000000000000000 -0.0000000000000002 0.0000000000000000 - 0.0000000000000003 0.0000000000000000 0.0103751426308782 0.0000000000000000 -0.0282119025677913 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 -0.0049287602283752 0.0000000000000000 -0.0033792838522546 0.0000000000000000 + 0.0037861455182863 0.0000000000000000 -0.0000000000000008 0.0000000000000000 -0.0000000000000006 0.0000000000000000 + 0.0000000000000005 0.0000000000000000 0.0103751426308777 0.0000000000000000 -0.0282119025677893 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 -0.0049287602283609 0.0000000000000000 -0.0033792838522509 0.0000000000000000 2 4 - -0.0149643881777200 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000005 0.0000000000000000 - 0.0000000000000012 0.0000000000000000 -0.0085647327830297 0.0000000000000000 0.0044261389355767 0.0000000000000000 - 0.0000000000000029 0.0000000000000000 0.0009466269410053 0.0000000000000000 0.0064890897647952 0.0000000000000000 + -0.0149643881777202 0.0000000000000000 0.0000000000000009 0.0000000000000000 0.0000000000000001 0.0000000000000000 + 0.0000000000000015 0.0000000000000000 -0.0085647327830326 0.0000000000000000 0.0044261389355785 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 0.0009466269409777 0.0000000000000000 0.0064890897648130 0.0000000000000000 2 5 - 0.0053960771921636 0.0000000000000000 -0.0027777266316761 0.0000000000000000 -0.0010754919735287 0.0000000000000000 - -0.0041883714492639 0.0000000000000000 0.0037383917967293 0.0000000000000000 -0.0001605357525129 0.0000000000000000 - 0.0052382113260865 0.0000000000000000 0.0007249474944334 0.0000000000000000 -0.0008206821613043 0.0000000000000000 + 0.0053960771921638 0.0000000000000000 -0.0027777266316768 0.0000000000000000 -0.0010754919735292 0.0000000000000000 + -0.0041883714492636 0.0000000000000000 0.0037383917967311 0.0000000000000000 -0.0001605357525139 0.0000000000000000 + 0.0052382113260669 0.0000000000000000 0.0007249474944464 0.0000000000000000 -0.0008206821613128 0.0000000000000000 2 6 - 0.0053960771921633 0.0000000000000000 0.0027777266316760 0.0000000000000000 0.0010754919735292 0.0000000000000000 - 0.0041883714492627 0.0000000000000000 0.0037383917967289 0.0000000000000000 -0.0001605357525125 0.0000000000000000 - -0.0052382113260896 0.0000000000000000 0.0007249474944314 0.0000000000000000 -0.0008206821613030 0.0000000000000000 + 0.0053960771921632 0.0000000000000000 0.0027777266316757 0.0000000000000000 0.0010754919735288 0.0000000000000000 + 0.0041883714492620 0.0000000000000000 0.0037383917967307 0.0000000000000000 -0.0001605357525136 0.0000000000000000 + -0.0052382113260666 0.0000000000000000 0.0007249474944465 0.0000000000000000 -0.0008206821613128 0.0000000000000000 2 7 - -0.0018152750012298 0.0000000000000000 0.0000000000000004 0.0000000000000000 0.0000000000000002 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 0.0012476417535541 0.0000000000000000 0.0002039213450280 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 0.0078942408875844 0.0000000000000000 0.0145769254785603 0.0000000000000000 + -0.0018152750012297 0.0000000000000000 0.0000000000000015 0.0000000000000000 -0.0000000000000004 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 0.0012476417535541 0.0000000000000000 0.0002039213450285 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0078942408875622 0.0000000000000000 0.0145769254785676 0.0000000000000000 2 8 - 0.0036353210827943 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000002 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 -0.0001181663659072 0.0000000000000000 -0.0026161584162164 0.0000000000000000 - -0.0000000000000001 0.0000000000000000 0.0026161584162165 0.0000000000000000 -0.0221544638345921 0.0000000000000000 + 0.0036353210827943 0.0000000000000000 -0.0000000000000005 0.0000000000000000 -0.0000000000000002 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 -0.0001181663659071 0.0000000000000000 -0.0026161584162165 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 0.0026161584162162 0.0000000000000000 -0.0221544638345921 0.0000000000000000 2 9 - -0.0006990068039687 0.0000000000000000 -0.0000000000000006 0.0000000000000000 0.0000000000000001 0.0000000000000000 - -0.0000000000000004 0.0000000000000000 0.0007453998223717 0.0000000000000000 0.0020862975258863 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 0.0005005588825958 0.0000000000000000 -0.0034474484778370 0.0000000000000000 + -0.0006990068039689 0.0000000000000000 -0.0000000000000008 0.0000000000000000 0.0000000000000005 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 0.0007453998223721 0.0000000000000000 0.0020862975258867 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0005005588826157 0.0000000000000000 -0.0034474484778429 0.0000000000000000 2 10 - -0.0158629633765103 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000004 0.0000000000000000 - 0.0000000000000007 0.0000000000000000 -0.0142572303934455 0.0000000000000000 0.0025026894102758 0.0000000000000000 - -0.0000000000000012 0.0000000000000000 -0.0110402408679752 0.0000000000000000 0.0060798140623873 0.0000000000000000 + -0.0158629633765104 0.0000000000000000 0.0000000000000010 0.0000000000000000 -0.0000000000000003 0.0000000000000000 + 0.0000000000000013 0.0000000000000000 -0.0142572303934417 0.0000000000000000 0.0025026894102780 0.0000000000000000 + 0.0000000000000027 0.0000000000000000 -0.0110402408679579 0.0000000000000000 0.0060798140623969 0.0000000000000000 2 11 - 0.0025040980237169 0.0000000000000000 -0.0023164619816241 0.0000000000000000 0.0038518265447296 0.0000000000000000 - 0.0006119532508384 0.0000000000000000 0.0011510144726841 0.0000000000000000 -0.0004056725610947 0.0000000000000000 - -0.0017406728581262 0.0000000000000000 0.0039561444256966 0.0000000000000000 0.0031229275970287 0.0000000000000000 + 0.0025040980237171 0.0000000000000000 -0.0023164619816247 0.0000000000000000 0.0038518265447299 0.0000000000000000 + 0.0006119532508363 0.0000000000000000 0.0011510144726823 0.0000000000000000 -0.0004056725610963 0.0000000000000000 + -0.0017406728581138 0.0000000000000000 0.0039561444256889 0.0000000000000000 0.0031229275970233 0.0000000000000000 2 12 - 0.0025040980237166 0.0000000000000000 0.0023164619816241 0.0000000000000000 -0.0038518265447301 0.0000000000000000 - -0.0006119532508387 0.0000000000000000 0.0011510144726835 0.0000000000000000 -0.0004056725610949 0.0000000000000000 - 0.0017406728581268 0.0000000000000000 0.0039561444256971 0.0000000000000000 0.0031229275970290 0.0000000000000000 + 0.0025040980237165 0.0000000000000000 0.0023164619816236 0.0000000000000000 -0.0038518265447295 0.0000000000000000 + -0.0006119532508372 0.0000000000000000 0.0011510144726808 0.0000000000000000 -0.0004056725610962 0.0000000000000000 + 0.0017406728581117 0.0000000000000000 0.0039561444256877 0.0000000000000000 0.0031229275970226 0.0000000000000000 3 1 - -0.0289738345959187 0.0000000000000000 0.0000000000000003 0.0000000000000000 0.0000000000000002 0.0000000000000000 - -0.0000000000000013 0.0000000000000000 -0.2820802915433023 0.0000000000000000 -0.0884826303559269 0.0000000000000000 - -0.0000000000000006 0.0000000000000000 -0.0527306161696206 0.0000000000000000 -0.0739447334126166 0.0000000000000000 + -0.0289738345959188 0.0000000000000000 0.0000000000000001 0.0000000000000000 -0.0000000000000002 0.0000000000000000 + -0.0000000000000023 0.0000000000000000 -0.2820802915432987 0.0000000000000000 -0.0884826303559405 0.0000000000000000 + -0.0000000000000009 0.0000000000000000 -0.0527306161696205 0.0000000000000000 -0.0739447334126184 0.0000000000000000 3 2 - 0.0037861455182865 0.0000000000000000 0.0000000000000003 0.0000000000000000 -0.0000000000000000 0.0000000000000000 - -0.0000000000000009 0.0000000000000000 0.0103751426308782 0.0000000000000000 -0.0049287602283752 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 -0.0282119025677913 0.0000000000000000 -0.0033792838522546 0.0000000000000000 + 0.0037861455182863 0.0000000000000000 0.0000000000000005 0.0000000000000000 0.0000000000000001 0.0000000000000000 + -0.0000000000000008 0.0000000000000000 0.0103751426308777 0.0000000000000000 -0.0049287602283609 0.0000000000000000 + -0.0000000000000006 0.0000000000000000 -0.0282119025677893 0.0000000000000000 -0.0033792838522508 0.0000000000000000 3 3 - 0.0365782981378754 0.0000000000000000 -0.0000000000000004 0.0000000000000000 0.0000000000000001 0.0000000000000000 - -0.0000000000000004 0.0000000000000000 0.2729248902175021 0.0000000000000000 0.0713458205553453 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 0.0713458205553453 0.0000000000000000 0.0798291225288888 0.0000000000000000 + 0.0365782981378752 0.0000000000000000 -0.0000000000000006 0.0000000000000000 0.0000000000000004 0.0000000000000000 + -0.0000000000000006 0.0000000000000000 0.2729248902174951 0.0000000000000000 0.0713458205553433 0.0000000000000000 + 0.0000000000000004 0.0000000000000000 0.0713458205553433 0.0000000000000000 0.0798291225288855 0.0000000000000000 3 4 - -0.0193793176120040 0.0000000000000000 0.0000000000000001 0.0000000000000000 0.0000000000000001 0.0000000000000000 - 0.0000000000000280 0.0000000000000000 0.0128264092257559 0.0000000000000000 0.0093892601393072 0.0000000000000000 - 0.0000000000000081 0.0000000000000000 0.0108019320579830 0.0000000000000000 -0.0127958810116058 0.0000000000000000 + -0.0193793176120044 0.0000000000000000 -0.0000000000000001 0.0000000000000000 -0.0000000000000001 0.0000000000000000 + 0.0000000000000266 0.0000000000000000 0.0128264092257487 0.0000000000000000 0.0093892601393103 0.0000000000000000 + 0.0000000000000070 0.0000000000000000 0.0108019320579831 0.0000000000000000 -0.0127958810116061 0.0000000000000000 3 5 - 0.0043670482201909 0.0000000000000000 0.0062527546419648 0.0000000000000000 0.0032245610064168 0.0000000000000000 - 0.0073649825438563 0.0000000000000000 -0.0050060184798341 0.0000000000000000 0.0046134194019383 0.0000000000000000 - 0.0069798143243277 0.0000000000000000 -0.0003322634792029 0.0000000000000000 0.0072531804468943 0.0000000000000000 + 0.0043670482201910 0.0000000000000000 0.0062527546419649 0.0000000000000000 0.0032245610064167 0.0000000000000000 + 0.0073649825438522 0.0000000000000000 -0.0050060184798319 0.0000000000000000 0.0046134194019365 0.0000000000000000 + 0.0069798143243257 0.0000000000000000 -0.0003322634792040 0.0000000000000000 0.0072531804468949 0.0000000000000000 3 6 - 0.0043670482201907 0.0000000000000000 -0.0062527546419651 0.0000000000000000 -0.0032245610064170 0.0000000000000000 - -0.0073649825438808 0.0000000000000000 -0.0050060184798494 0.0000000000000000 0.0046134194019475 0.0000000000000000 - -0.0069798143243349 0.0000000000000000 -0.0003322634792069 0.0000000000000000 0.0072531804468972 0.0000000000000000 + 0.0043670482201909 0.0000000000000000 -0.0062527546419650 0.0000000000000000 -0.0032245610064168 0.0000000000000000 + -0.0073649825438765 0.0000000000000000 -0.0050060184798469 0.0000000000000000 0.0046134194019458 0.0000000000000000 + -0.0069798143243323 0.0000000000000000 -0.0003322634792076 0.0000000000000000 0.0072531804468974 0.0000000000000000 3 7 - -0.0016399265604472 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000002 0.0000000000000000 - -0.0000000000000004 0.0000000000000000 -0.0035091911501692 0.0000000000000000 -0.0074822204968671 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 0.0021722504817084 0.0000000000000000 0.0003426041600671 0.0000000000000000 + -0.0016399265604476 0.0000000000000000 -0.0000000000000003 0.0000000000000000 0.0000000000000003 0.0000000000000000 + -0.0000000000000017 0.0000000000000000 -0.0035091911501715 0.0000000000000000 -0.0074822204968866 0.0000000000000000 + -0.0000000000000003 0.0000000000000000 0.0021722504817081 0.0000000000000000 0.0003426041600611 0.0000000000000000 3 8 - -0.0006990068039681 0.0000000000000000 0.0000000000000002 0.0000000000000000 -0.0000000000000001 0.0000000000000000 - -0.0000000000000006 0.0000000000000000 0.0007453998223712 0.0000000000000000 -0.0005005588826037 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0020862975258867 0.0000000000000000 -0.0034474484778391 0.0000000000000000 + -0.0006990068039681 0.0000000000000000 0.0000000000000006 0.0000000000000000 0.0000000000000000 0.0000000000000000 + -0.0000000000000006 0.0000000000000000 0.0007453998223712 0.0000000000000000 -0.0005005588825857 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 -0.0020862975258869 0.0000000000000000 -0.0034474484778340 0.0000000000000000 3 9 - 0.0025844652016199 0.0000000000000000 -0.0000000000000001 0.0000000000000000 -0.0000000000000002 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 -0.0002706095090059 0.0000000000000000 0.0025129031626719 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 -0.0025129031626724 0.0000000000000000 -0.0015754786010475 0.0000000000000000 + 0.0025844652016201 0.0000000000000000 -0.0000000000000002 0.0000000000000000 -0.0000000000000005 0.0000000000000000 + 0.0000000000000003 0.0000000000000000 -0.0002706095090055 0.0000000000000000 0.0025129031626716 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 -0.0025129031626730 0.0000000000000000 -0.0015754786010477 0.0000000000000000 3 10 - -0.0001599946965688 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000002 0.0000000000000000 - 0.0000000000000126 0.0000000000000000 0.0004054668963131 0.0000000000000000 0.0101430343307470 0.0000000000000000 - 0.0000000000000033 0.0000000000000000 0.0081775121522256 0.0000000000000000 0.0079899884223510 0.0000000000000000 + -0.0001599946965690 0.0000000000000000 -0.0000000000000002 0.0000000000000000 0.0000000000000001 0.0000000000000000 + 0.0000000000000122 0.0000000000000000 0.0004054668963175 0.0000000000000000 0.0101430343307511 0.0000000000000000 + 0.0000000000000024 0.0000000000000000 0.0081775121522231 0.0000000000000000 0.0079899884223499 0.0000000000000000 3 11 - -0.0004154624427381 0.0000000000000000 0.0012439381262111 0.0000000000000000 0.0022873936225506 0.0000000000000000 - 0.0127928624961743 0.0000000000000000 -0.0007025897616770 0.0000000000000000 -0.0006118410528849 0.0000000000000000 - 0.0050585024151193 0.0000000000000000 -0.0031456369018490 0.0000000000000000 -0.0037626256179484 0.0000000000000000 + -0.0004154624427382 0.0000000000000000 0.0012439381262114 0.0000000000000000 0.0022873936225502 0.0000000000000000 + 0.0127928624961779 0.0000000000000000 -0.0007025897616806 0.0000000000000000 -0.0006118410528870 0.0000000000000000 + 0.0050585024151234 0.0000000000000000 -0.0031456369018480 0.0000000000000000 -0.0037626256179479 0.0000000000000000 3 12 - -0.0004154624427380 0.0000000000000000 -0.0012439381262113 0.0000000000000000 -0.0022873936225503 0.0000000000000000 - -0.0127928624961850 0.0000000000000000 -0.0007025897616837 0.0000000000000000 -0.0006118410528889 0.0000000000000000 - -0.0050585024151219 0.0000000000000000 -0.0031456369018512 0.0000000000000000 -0.0037626256179495 0.0000000000000000 + -0.0004154624427381 0.0000000000000000 -0.0012439381262112 0.0000000000000000 -0.0022873936225503 0.0000000000000000 + -0.0127928624961893 0.0000000000000000 -0.0007025897616875 0.0000000000000000 -0.0006118410528913 0.0000000000000000 + -0.0050585024151255 0.0000000000000000 -0.0031456369018501 0.0000000000000000 -0.0037626256179483 0.0000000000000000 4 1 - -0.0373686571560767 0.0000000000000000 -0.0000000000000286 0.0000000000000000 -0.0000000000000139 0.0000000000000000 - 0.0000000000000010 0.0000000000000000 -0.0336428001202010 0.0000000000000000 -0.0044397818519523 0.0000000000000000 - -0.0000000000000005 0.0000000000000000 -0.0041894809945674 0.0000000000000000 0.0041303780996508 0.0000000000000000 + -0.0373686571560764 0.0000000000000000 -0.0000000000000286 0.0000000000000000 -0.0000000000000102 0.0000000000000000 + 0.0000000000000003 0.0000000000000000 -0.0336428001201919 0.0000000000000000 -0.0044397818519250 0.0000000000000000 + -0.0000000000000005 0.0000000000000000 -0.0041894809945731 0.0000000000000000 0.0041303780996330 0.0000000000000000 4 2 - -0.0149643881777200 0.0000000000000000 0.0000000000000012 0.0000000000000000 0.0000000000000029 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0085647327830297 0.0000000000000000 0.0009466269410053 0.0000000000000000 - -0.0000000000000005 0.0000000000000000 0.0044261389355767 0.0000000000000000 0.0064890897647952 0.0000000000000000 + -0.0149643881777202 0.0000000000000000 0.0000000000000015 0.0000000000000000 -0.0000000000000001 0.0000000000000000 + 0.0000000000000009 0.0000000000000000 -0.0085647327830326 0.0000000000000000 0.0009466269409777 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 0.0044261389355785 0.0000000000000000 0.0064890897648130 0.0000000000000000 4 3 - -0.0193793176120040 0.0000000000000000 0.0000000000000280 0.0000000000000000 0.0000000000000081 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 0.0128264092257559 0.0000000000000000 0.0108019320579829 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 0.0093892601393072 0.0000000000000000 -0.0127958810116058 0.0000000000000000 + -0.0193793176120044 0.0000000000000000 0.0000000000000266 0.0000000000000000 0.0000000000000070 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 0.0128264092257487 0.0000000000000000 0.0108019320579831 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 0.0093892601393103 0.0000000000000000 -0.0127958810116061 0.0000000000000000 4 4 - 0.4834443802760264 0.0000000000000000 -0.0000000000000079 0.0000000000000000 0.0000000000000079 0.0000000000000000 - -0.0000000000000079 0.0000000000000000 0.2588422264936566 0.0000000000000000 -0.1308110718530649 0.0000000000000000 - 0.0000000000000079 0.0000000000000000 -0.1308110718530649 0.0000000000000000 0.1639030178691331 0.0000000000000000 + 0.4834443802760313 0.0000000000000000 -0.0000000000000151 0.0000000000000000 0.0000000000000127 0.0000000000000000 + -0.0000000000000151 0.0000000000000000 0.2588422264936643 0.0000000000000000 -0.1308110718530739 0.0000000000000000 + 0.0000000000000127 0.0000000000000000 -0.1308110718530739 0.0000000000000000 0.1639030178691405 0.0000000000000000 4 5 - -0.2042620382021383 0.0000000000000000 0.1111612914471844 0.0000000000000000 -0.0678004081048838 0.0000000000000000 - 0.0961493426419493 0.0000000000000000 -0.1150790588758495 0.0000000000000000 0.0626077946132185 0.0000000000000000 - -0.0680988033808465 0.0000000000000000 0.0633030715249478 0.0000000000000000 -0.0673384314526813 0.0000000000000000 + -0.2042620382021453 0.0000000000000000 0.1111612914471889 0.0000000000000000 -0.0678004081048872 0.0000000000000000 + 0.0961493426419503 0.0000000000000000 -0.1150790588758579 0.0000000000000000 0.0626077946132240 0.0000000000000000 + -0.0680988033808483 0.0000000000000000 0.0633030715249540 0.0000000000000000 -0.0673384314526861 0.0000000000000000 4 6 - -0.2042620382021234 0.0000000000000000 -0.1111612914471742 0.0000000000000000 0.0678004081048784 0.0000000000000000 - -0.0961493426419422 0.0000000000000000 -0.1150790588758454 0.0000000000000000 0.0626077946132157 0.0000000000000000 - 0.0680988033808391 0.0000000000000000 0.0633030715249432 0.0000000000000000 -0.0673384314526784 0.0000000000000000 + -0.2042620382021206 0.0000000000000000 -0.1111612914471719 0.0000000000000000 0.0678004081048771 0.0000000000000000 + -0.0961493426419374 0.0000000000000000 -0.1150790588758499 0.0000000000000000 0.0626077946132197 0.0000000000000000 + 0.0680988033808369 0.0000000000000000 0.0633030715249479 0.0000000000000000 -0.0673384314526813 0.0000000000000000 4 7 - 0.0078082955673489 0.0000000000000000 -0.0000000000000115 0.0000000000000000 -0.0000000000000069 0.0000000000000000 - 0.0000000000000004 0.0000000000000000 0.0119074076296530 0.0000000000000000 -0.0044778895271359 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 0.0034942738523609 0.0000000000000000 -0.0367974389514110 0.0000000000000000 + 0.0078082955673491 0.0000000000000000 -0.0000000000000237 0.0000000000000000 0.0000000000000040 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 0.0119074076296579 0.0000000000000000 -0.0044778895271479 0.0000000000000000 + 0.0000000000000002 0.0000000000000000 0.0034942738523560 0.0000000000000000 -0.0367974389514042 0.0000000000000000 4 8 - -0.0158629633765114 0.0000000000000000 0.0000000000000011 0.0000000000000000 0.0000000000000100 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 -0.0142572303934383 0.0000000000000000 0.0110402408679705 0.0000000000000000 - -0.0000000000000003 0.0000000000000000 -0.0025026894102802 0.0000000000000000 0.0060798140623905 0.0000000000000000 + -0.0158629633765108 0.0000000000000000 0.0000000000000015 0.0000000000000000 0.0000000000000036 0.0000000000000000 + 0.0000000000000008 0.0000000000000000 -0.0142572303934423 0.0000000000000000 0.0110402408679840 0.0000000000000000 + 0.0000000000000002 0.0000000000000000 -0.0025026894102776 0.0000000000000000 0.0060798140623830 0.0000000000000000 4 9 - -0.0001599946965684 0.0000000000000000 0.0000000000000112 0.0000000000000000 -0.0000000000000023 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 0.0004054668963109 0.0000000000000000 -0.0081775121522167 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 -0.0101430343307466 0.0000000000000000 0.0079899884223457 0.0000000000000000 + -0.0001599946965685 0.0000000000000000 0.0000000000000221 0.0000000000000000 -0.0000000000000054 0.0000000000000000 + -0.0000000000000004 0.0000000000000000 0.0004054668963060 0.0000000000000000 -0.0081775121522190 0.0000000000000000 + -0.0000000000000005 0.0000000000000000 -0.0101430343307417 0.0000000000000000 0.0079899884223466 0.0000000000000000 4 10 - 0.0039008143595911 0.0000000000000000 -0.0000000000000069 0.0000000000000000 -0.0000000000000047 0.0000000000000000 - -0.0000000000000040 0.0000000000000000 -0.0008485805837897 0.0000000000000000 -0.0030686652718400 0.0000000000000000 - 0.0000000000000046 0.0000000000000000 0.0030686652718395 0.0000000000000000 -0.0082838582595769 0.0000000000000000 + 0.0039008143595904 0.0000000000000000 -0.0000000000000146 0.0000000000000000 -0.0000000000000108 0.0000000000000000 + -0.0000000000000099 0.0000000000000000 -0.0008485805837914 0.0000000000000000 -0.0030686652718407 0.0000000000000000 + 0.0000000000000064 0.0000000000000000 0.0030686652718396 0.0000000000000000 -0.0082838582595772 0.0000000000000000 4 11 - 0.0005529569781357 0.0000000000000000 0.0006881224323731 0.0000000000000000 0.0009938270035010 0.0000000000000000 - -0.0004060563613263 0.0000000000000000 0.0017449768597133 0.0000000000000000 0.0014852637978340 0.0000000000000000 - -0.0028171359308497 0.0000000000000000 0.0003308975272964 0.0000000000000000 0.0019808748951326 0.0000000000000000 + 0.0005529569781304 0.0000000000000000 0.0006881224323763 0.0000000000000000 0.0009938270035030 0.0000000000000000 + -0.0004060563613253 0.0000000000000000 0.0017449768597123 0.0000000000000000 0.0014852637978338 0.0000000000000000 + -0.0028171359308512 0.0000000000000000 0.0003308975272968 0.0000000000000000 0.0019808748951335 0.0000000000000000 4 12 - 0.0005529569781457 0.0000000000000000 -0.0006881224323643 0.0000000000000000 -0.0009938270034956 0.0000000000000000 - 0.0004060563613303 0.0000000000000000 0.0017449768597157 0.0000000000000000 0.0014852637978359 0.0000000000000000 - 0.0028171359308457 0.0000000000000000 0.0003308975272937 0.0000000000000000 0.0019808748951316 0.0000000000000000 + 0.0005529569781524 0.0000000000000000 -0.0006881224323601 0.0000000000000000 -0.0009938270034932 0.0000000000000000 + 0.0004060563613336 0.0000000000000000 0.0017449768597178 0.0000000000000000 0.0014852637978365 0.0000000000000000 + 0.0028171359308458 0.0000000000000000 0.0003308975272940 0.0000000000000000 0.0019808748951309 0.0000000000000000 5 1 - 0.0079739154089291 0.0000000000000000 -0.0100652146645601 0.0000000000000000 -0.0036706343437405 0.0000000000000000 - -0.0168418597307733 0.0000000000000000 -0.0099918936929156 0.0000000000000000 -0.0005259246072782 0.0000000000000000 - 0.0106690755761893 0.0000000000000000 -0.0069122209428977 0.0000000000000000 -0.0156150191112111 0.0000000000000000 + 0.0079739154089291 0.0000000000000000 -0.0100652146645572 0.0000000000000000 -0.0036706343437175 0.0000000000000000 + -0.0168418597307733 0.0000000000000000 -0.0099918936929198 0.0000000000000000 -0.0005259246072903 0.0000000000000000 + 0.0106690755761898 0.0000000000000000 -0.0069122209428951 0.0000000000000000 -0.0156150191112033 0.0000000000000000 5 2 - 0.0053960771921636 0.0000000000000000 -0.0041883714492639 0.0000000000000000 0.0052382113260865 0.0000000000000000 - -0.0027777266316761 0.0000000000000000 0.0037383917967293 0.0000000000000000 0.0007249474944334 0.0000000000000000 - -0.0010754919735287 0.0000000000000000 -0.0001605357525129 0.0000000000000000 -0.0008206821613043 0.0000000000000000 + 0.0053960771921638 0.0000000000000000 -0.0041883714492636 0.0000000000000000 0.0052382113260669 0.0000000000000000 + -0.0027777266316768 0.0000000000000000 0.0037383917967311 0.0000000000000000 0.0007249474944464 0.0000000000000000 + -0.0010754919735292 0.0000000000000000 -0.0001605357525139 0.0000000000000000 -0.0008206821613128 0.0000000000000000 5 3 - 0.0043670482201909 0.0000000000000000 0.0073649825438563 0.0000000000000000 0.0069798143243277 0.0000000000000000 - 0.0062527546419648 0.0000000000000000 -0.0050060184798341 0.0000000000000000 -0.0003322634792029 0.0000000000000000 - 0.0032245610064168 0.0000000000000000 0.0046134194019383 0.0000000000000000 0.0072531804468943 0.0000000000000000 + 0.0043670482201910 0.0000000000000000 0.0073649825438522 0.0000000000000000 0.0069798143243256 0.0000000000000000 + 0.0062527546419649 0.0000000000000000 -0.0050060184798319 0.0000000000000000 -0.0003322634792040 0.0000000000000000 + 0.0032245610064167 0.0000000000000000 0.0046134194019365 0.0000000000000000 0.0072531804468949 0.0000000000000000 5 4 - -0.2042620382021383 0.0000000000000000 0.0961493426419494 0.0000000000000000 -0.0680988033808465 0.0000000000000000 - 0.1111612914471844 0.0000000000000000 -0.1150790588758495 0.0000000000000000 0.0633030715249478 0.0000000000000000 - -0.0678004081048838 0.0000000000000000 0.0626077946132185 0.0000000000000000 -0.0673384314526813 0.0000000000000000 + -0.2042620382021453 0.0000000000000000 0.0961493426419503 0.0000000000000000 -0.0680988033808483 0.0000000000000000 + 0.1111612914471889 0.0000000000000000 -0.1150790588758579 0.0000000000000000 0.0633030715249540 0.0000000000000000 + -0.0678004081048872 0.0000000000000000 0.0626077946132240 0.0000000000000000 -0.0673384314526861 0.0000000000000000 5 5 - 0.2174594979186394 0.0000000000000000 -0.0954682304260302 0.0000000000000000 0.0600636707989616 0.0000000000000000 - -0.0954682304260302 0.0000000000000000 0.1104252604741451 0.0000000000000000 -0.0503426131734419 0.0000000000000000 - 0.0600636707989616 0.0000000000000000 -0.0503426131734419 0.0000000000000000 0.0677190190410538 0.0000000000000000 + 0.2174594979186494 0.0000000000000000 -0.0954682304260330 0.0000000000000000 0.0600636707989632 0.0000000000000000 + -0.0954682304260330 0.0000000000000000 0.1104252604741517 0.0000000000000000 -0.0503426131734460 0.0000000000000000 + 0.0600636707989632 0.0000000000000000 -0.0503426131734460 0.0000000000000000 0.0677190190410574 0.0000000000000000 5 6 - -0.0299583471230310 0.0000000000000000 0.0025306649736077 0.0000000000000000 0.0001964280885671 0.0000000000000000 - -0.0025306649736082 0.0000000000000000 0.0189330240079785 0.0000000000000000 -0.0130002466230914 0.0000000000000000 - -0.0001964280885671 0.0000000000000000 -0.0130002466230916 0.0000000000000000 0.0113735279572468 0.0000000000000000 + -0.0299583471230355 0.0000000000000000 0.0025306649736081 0.0000000000000000 0.0001964280885663 0.0000000000000000 + -0.0025306649736090 0.0000000000000000 0.0189330240079822 0.0000000000000000 -0.0130002466230939 0.0000000000000000 + -0.0001964280885659 0.0000000000000000 -0.0130002466230941 0.0000000000000000 0.0113735279572486 0.0000000000000000 5 7 - -0.0014003952261869 0.0000000000000000 -0.0091891495399319 0.0000000000000000 0.0007217572183878 0.0000000000000000 - 0.0002449744821623 0.0000000000000000 -0.0030108060126887 0.0000000000000000 0.0035553985811579 0.0000000000000000 - 0.0015206472447121 0.0000000000000000 0.0014211831836463 0.0000000000000000 -0.0025275585661353 0.0000000000000000 + -0.0014003952261869 0.0000000000000000 -0.0091891495399260 0.0000000000000000 0.0007217572183691 0.0000000000000000 + 0.0002449744821623 0.0000000000000000 -0.0030108060126953 0.0000000000000000 0.0035553985811666 0.0000000000000000 + 0.0015206472447121 0.0000000000000000 0.0014211831836503 0.0000000000000000 -0.0025275585661406 0.0000000000000000 5 8 - 0.0025040980237175 0.0000000000000000 0.0006119532508337 0.0000000000000000 0.0017406728581180 0.0000000000000000 - -0.0023164619816242 0.0000000000000000 0.0011510144726799 0.0000000000000000 -0.0039561444256917 0.0000000000000000 - -0.0038518265447292 0.0000000000000000 0.0004056725610973 0.0000000000000000 0.0031229275970255 0.0000000000000000 + 0.0025040980237174 0.0000000000000000 0.0006119532508353 0.0000000000000000 0.0017406728581313 0.0000000000000000 + -0.0023164619816243 0.0000000000000000 0.0011510144726821 0.0000000000000000 -0.0039561444256999 0.0000000000000000 + -0.0038518265447297 0.0000000000000000 0.0004056725610958 0.0000000000000000 0.0031229275970312 0.0000000000000000 5 9 - -0.0004154624427382 0.0000000000000000 0.0127928624961715 0.0000000000000000 -0.0050585024151236 0.0000000000000000 - 0.0012439381262114 0.0000000000000000 -0.0007025897616760 0.0000000000000000 0.0031456369018445 0.0000000000000000 - -0.0022873936225500 0.0000000000000000 0.0006118410528842 0.0000000000000000 -0.0037626256179448 0.0000000000000000 + -0.0004154624427382 0.0000000000000000 0.0127928624961631 0.0000000000000000 -0.0050585024151183 0.0000000000000000 + 0.0012439381262119 0.0000000000000000 -0.0007025897616701 0.0000000000000000 0.0031456369018450 0.0000000000000000 + -0.0022873936225496 0.0000000000000000 0.0006118410528804 0.0000000000000000 -0.0037626256179454 0.0000000000000000 5 10 - 0.0005529569781371 0.0000000000000000 -0.0004060563613260 0.0000000000000000 0.0028171359308499 0.0000000000000000 - 0.0006881224323712 0.0000000000000000 0.0017449768597137 0.0000000000000000 -0.0003308975272955 0.0000000000000000 - -0.0009938270035004 0.0000000000000000 -0.0014852637978338 0.0000000000000000 0.0019808748951325 0.0000000000000000 + 0.0005529569781323 0.0000000000000000 -0.0004060563613220 0.0000000000000000 0.0028171359308531 0.0000000000000000 + 0.0006881224323740 0.0000000000000000 0.0017449768597118 0.0000000000000000 -0.0003308975272971 0.0000000000000000 + -0.0009938270035019 0.0000000000000000 -0.0014852637978332 0.0000000000000000 0.0019808748951340 0.0000000000000000 5 11 - -0.0001947154534039 0.0000000000000000 0.0001055444019321 0.0000000000000000 -0.0008285855530545 0.0000000000000000 - 0.0001055444019315 0.0000000000000000 -0.0022624521874624 0.0000000000000000 -0.0020902638812466 0.0000000000000000 - 0.0008285855530545 0.0000000000000000 0.0020902638812464 0.0000000000000000 0.0008479800149229 0.0000000000000000 + -0.0001947154533988 0.0000000000000000 0.0001055444019280 0.0000000000000000 -0.0008285855530568 0.0000000000000000 + 0.0001055444019293 0.0000000000000000 -0.0022624521874604 0.0000000000000000 -0.0020902638812461 0.0000000000000000 + 0.0008285855530561 0.0000000000000000 0.0020902638812458 0.0000000000000000 0.0008479800149217 0.0000000000000000 5 12 - -0.0020226399972410 0.0000000000000000 -0.0002383182140790 0.0000000000000000 -0.0001011648438942 0.0000000000000000 - 0.0002383182140790 0.0000000000000000 0.0000601515309643 0.0000000000000000 -0.0001507007232539 0.0000000000000000 - -0.0001011648438937 0.0000000000000000 0.0001507007232530 0.0000000000000000 -0.0022331838997254 0.0000000000000000 + -0.0020226399972423 0.0000000000000000 -0.0002383182140809 0.0000000000000000 -0.0001011648438950 0.0000000000000000 + 0.0002383182140792 0.0000000000000000 0.0000601515309647 0.0000000000000000 -0.0001507007232532 0.0000000000000000 + -0.0001011648438940 0.0000000000000000 0.0001507007232529 0.0000000000000000 -0.0022331838997255 0.0000000000000000 6 1 - 0.0079739154089278 0.0000000000000000 0.0100652146645852 0.0000000000000000 0.0036706343437532 0.0000000000000000 - 0.0168418597307725 0.0000000000000000 -0.0099918936929004 0.0000000000000000 -0.0005259246072706 0.0000000000000000 - -0.0106690755761886 0.0000000000000000 -0.0069122209429071 0.0000000000000000 -0.0156150191112160 0.0000000000000000 + 0.0079739154089280 0.0000000000000000 0.0100652146645834 0.0000000000000000 0.0036706343437260 0.0000000000000000 + 0.0168418597307731 0.0000000000000000 -0.0099918936929039 0.0000000000000000 -0.0005259246072847 0.0000000000000000 + -0.0106690755761890 0.0000000000000000 -0.0069122209429046 0.0000000000000000 -0.0156150191112065 0.0000000000000000 6 2 - 0.0053960771921633 0.0000000000000000 0.0041883714492627 0.0000000000000000 -0.0052382113260896 0.0000000000000000 - 0.0027777266316760 0.0000000000000000 0.0037383917967289 0.0000000000000000 0.0007249474944314 0.0000000000000000 - 0.0010754919735292 0.0000000000000000 -0.0001605357525125 0.0000000000000000 -0.0008206821613030 0.0000000000000000 + 0.0053960771921632 0.0000000000000000 0.0041883714492620 0.0000000000000000 -0.0052382113260667 0.0000000000000000 + 0.0027777266316757 0.0000000000000000 0.0037383917967307 0.0000000000000000 0.0007249474944465 0.0000000000000000 + 0.0010754919735288 0.0000000000000000 -0.0001605357525136 0.0000000000000000 -0.0008206821613128 0.0000000000000000 6 3 - 0.0043670482201907 0.0000000000000000 -0.0073649825438808 0.0000000000000000 -0.0069798143243349 0.0000000000000000 - -0.0062527546419651 0.0000000000000000 -0.0050060184798494 0.0000000000000000 -0.0003322634792069 0.0000000000000000 - -0.0032245610064170 0.0000000000000000 0.0046134194019475 0.0000000000000000 0.0072531804468972 0.0000000000000000 + 0.0043670482201909 0.0000000000000000 -0.0073649825438765 0.0000000000000000 -0.0069798143243323 0.0000000000000000 + -0.0062527546419650 0.0000000000000000 -0.0050060184798469 0.0000000000000000 -0.0003322634792076 0.0000000000000000 + -0.0032245610064168 0.0000000000000000 0.0046134194019458 0.0000000000000000 0.0072531804468974 0.0000000000000000 6 4 - -0.2042620382021234 0.0000000000000000 -0.0961493426419422 0.0000000000000000 0.0680988033808391 0.0000000000000000 - -0.1111612914471742 0.0000000000000000 -0.1150790588758454 0.0000000000000000 0.0633030715249432 0.0000000000000000 - 0.0678004081048784 0.0000000000000000 0.0626077946132157 0.0000000000000000 -0.0673384314526784 0.0000000000000000 + -0.2042620382021206 0.0000000000000000 -0.0961493426419375 0.0000000000000000 0.0680988033808369 0.0000000000000000 + -0.1111612914471719 0.0000000000000000 -0.1150790588758499 0.0000000000000000 0.0633030715249479 0.0000000000000000 + 0.0678004081048771 0.0000000000000000 0.0626077946132197 0.0000000000000000 -0.0673384314526813 0.0000000000000000 6 5 - -0.0299583471230310 0.0000000000000000 -0.0025306649736082 0.0000000000000000 -0.0001964280885671 0.0000000000000000 - 0.0025306649736077 0.0000000000000000 0.0189330240079785 0.0000000000000000 -0.0130002466230916 0.0000000000000000 - 0.0001964280885671 0.0000000000000000 -0.0130002466230914 0.0000000000000000 0.0113735279572468 0.0000000000000000 + -0.0299583471230355 0.0000000000000000 -0.0025306649736090 0.0000000000000000 -0.0001964280885659 0.0000000000000000 + 0.0025306649736081 0.0000000000000000 0.0189330240079822 0.0000000000000000 -0.0130002466230941 0.0000000000000000 + 0.0001964280885663 0.0000000000000000 -0.0130002466230939 0.0000000000000000 0.0113735279572486 0.0000000000000000 6 6 - 0.2174594979186258 0.0000000000000000 0.0954682304260214 0.0000000000000000 -0.0600636707989565 0.0000000000000000 - 0.0954682304260214 0.0000000000000000 0.1104252604741395 0.0000000000000000 -0.0503426131734387 0.0000000000000000 - -0.0600636707989565 0.0000000000000000 -0.0503426131734387 0.0000000000000000 0.0677190190410517 0.0000000000000000 + 0.2174594979186281 0.0000000000000000 0.0954682304260193 0.0000000000000000 -0.0600636707989546 0.0000000000000000 + 0.0954682304260193 0.0000000000000000 0.1104252604741423 0.0000000000000000 -0.0503426131734415 0.0000000000000000 + -0.0600636707989546 0.0000000000000000 -0.0503426131734415 0.0000000000000000 0.0677190190410532 0.0000000000000000 6 7 - -0.0014003952261872 0.0000000000000000 0.0091891495399424 0.0000000000000000 -0.0007217572183815 0.0000000000000000 - -0.0002449744821630 0.0000000000000000 -0.0030108060126824 0.0000000000000000 0.0035553985811619 0.0000000000000000 - -0.0015206472447121 0.0000000000000000 0.0014211831836421 0.0000000000000000 -0.0025275585661374 0.0000000000000000 + -0.0014003952261872 0.0000000000000000 0.0091891495399473 0.0000000000000000 -0.0007217572183726 0.0000000000000000 + -0.0002449744821625 0.0000000000000000 -0.0030108060126823 0.0000000000000000 0.0035553985811644 0.0000000000000000 + -0.0015206472447122 0.0000000000000000 0.0014211831836428 0.0000000000000000 -0.0025275585661396 0.0000000000000000 6 8 - 0.0025040980237171 0.0000000000000000 -0.0006119532508350 0.0000000000000000 -0.0017406728581269 0.0000000000000000 - 0.0023164619816239 0.0000000000000000 0.0011510144726796 0.0000000000000000 -0.0039561444256971 0.0000000000000000 - 0.0038518265447294 0.0000000000000000 0.0004056725610981 0.0000000000000000 0.0031229275970289 0.0000000000000000 + 0.0025040980237168 0.0000000000000000 -0.0006119532508368 0.0000000000000000 -0.0017406728581345 0.0000000000000000 + 0.0023164619816233 0.0000000000000000 0.0011510144726817 0.0000000000000000 -0.0039561444257019 0.0000000000000000 + 0.0038518265447292 0.0000000000000000 0.0004056725610963 0.0000000000000000 0.0031229275970324 0.0000000000000000 6 9 - -0.0004154624427381 0.0000000000000000 -0.0127928624961816 0.0000000000000000 0.0050585024151258 0.0000000000000000 - -0.0012439381262112 0.0000000000000000 -0.0007025897616824 0.0000000000000000 0.0031456369018455 0.0000000000000000 - 0.0022873936225501 0.0000000000000000 0.0006118410528878 0.0000000000000000 -0.0037626256179458 0.0000000000000000 + -0.0004154624427381 0.0000000000000000 -0.0127928624961828 0.0000000000000000 0.0050585024151235 0.0000000000000000 + -0.0012439381262112 0.0000000000000000 -0.0007025897616823 0.0000000000000000 0.0031456369018476 0.0000000000000000 + 0.0022873936225505 0.0000000000000000 0.0006118410528877 0.0000000000000000 -0.0037626256179473 0.0000000000000000 6 10 - 0.0005529569781434 0.0000000000000000 0.0004060563613320 0.0000000000000000 -0.0028171359308457 0.0000000000000000 - -0.0006881224323659 0.0000000000000000 0.0017449768597174 0.0000000000000000 -0.0003308975272932 0.0000000000000000 - 0.0009938270034969 0.0000000000000000 -0.0014852637978362 0.0000000000000000 0.0019808748951314 0.0000000000000000 + 0.0005529569781476 0.0000000000000000 0.0004060563613346 0.0000000000000000 -0.0028171359308436 0.0000000000000000 + -0.0006881224323638 0.0000000000000000 0.0017449768597203 0.0000000000000000 -0.0003308975272921 0.0000000000000000 + 0.0009938270034952 0.0000000000000000 -0.0014852637978375 0.0000000000000000 0.0019808748951298 0.0000000000000000 6 11 - -0.0020226399972398 0.0000000000000000 0.0002383182140770 0.0000000000000000 0.0001011648438929 0.0000000000000000 - -0.0002383182140790 0.0000000000000000 0.0000601515309634 0.0000000000000000 -0.0001507007232538 0.0000000000000000 - 0.0001011648438936 0.0000000000000000 0.0001507007232535 0.0000000000000000 -0.0022331838997249 0.0000000000000000 + -0.0020226399972393 0.0000000000000000 0.0002383182140778 0.0000000000000000 0.0001011648438931 0.0000000000000000 + -0.0002383182140776 0.0000000000000000 0.0000601515309627 0.0000000000000000 -0.0001507007232540 0.0000000000000000 + 0.0001011648438931 0.0000000000000000 0.0001507007232537 0.0000000000000000 -0.0022331838997248 0.0000000000000000 6 12 - -0.0001947154534107 0.0000000000000000 -0.0001055444019376 0.0000000000000000 0.0008285855530511 0.0000000000000000 - -0.0001055444019365 0.0000000000000000 -0.0022624521874664 0.0000000000000000 -0.0020902638812491 0.0000000000000000 - -0.0008285855530515 0.0000000000000000 0.0020902638812491 0.0000000000000000 0.0008479800149237 0.0000000000000000 + -0.0001947154534146 0.0000000000000000 -0.0001055444019387 0.0000000000000000 0.0008285855530500 0.0000000000000000 + -0.0001055444019394 0.0000000000000000 -0.0022624521874681 0.0000000000000000 -0.0020902638812495 0.0000000000000000 + -0.0008285855530497 0.0000000000000000 0.0020902638812496 0.0000000000000000 0.0008479800149252 0.0000000000000000 7 1 - 0.0015706027157735 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000002 0.0000000000000000 - 0.0000000000000015 0.0000000000000000 0.0058994142114998 0.0000000000000000 -0.0129555088579457 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 0.0129555088579347 0.0000000000000000 -0.0025061456783193 0.0000000000000000 + 0.0015706027157740 0.0000000000000000 0.0000000000000018 0.0000000000000000 0.0000000000000003 0.0000000000000000 + 0.0000000000000017 0.0000000000000000 0.0058994142115024 0.0000000000000000 -0.0129555088579213 0.0000000000000000 + -0.0000000000000004 0.0000000000000000 0.0129555088579572 0.0000000000000000 -0.0025061456783196 0.0000000000000000 7 2 - -0.0018152750012298 0.0000000000000000 0.0000000000000002 0.0000000000000000 -0.0000000000000002 0.0000000000000000 - 0.0000000000000004 0.0000000000000000 0.0012476417535541 0.0000000000000000 0.0078942408875844 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 0.0002039213450280 0.0000000000000000 0.0145769254785603 0.0000000000000000 + -0.0018152750012297 0.0000000000000000 0.0000000000000001 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000015 0.0000000000000000 0.0012476417535541 0.0000000000000000 0.0078942408875622 0.0000000000000000 + -0.0000000000000004 0.0000000000000000 0.0002039213450285 0.0000000000000000 0.0145769254785676 0.0000000000000000 7 3 - -0.0016399265604472 0.0000000000000000 -0.0000000000000004 0.0000000000000000 0.0000000000000000 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0035091911501692 0.0000000000000000 0.0021722504817084 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 -0.0074822204968671 0.0000000000000000 0.0003426041600671 0.0000000000000000 + -0.0016399265604476 0.0000000000000000 -0.0000000000000017 0.0000000000000000 -0.0000000000000003 0.0000000000000000 + -0.0000000000000003 0.0000000000000000 -0.0035091911501715 0.0000000000000000 0.0021722504817081 0.0000000000000000 + 0.0000000000000003 0.0000000000000000 -0.0074822204968866 0.0000000000000000 0.0003426041600610 0.0000000000000000 7 4 - 0.0078082955673489 0.0000000000000000 0.0000000000000004 0.0000000000000000 -0.0000000000000000 0.0000000000000000 - -0.0000000000000115 0.0000000000000000 0.0119074076296531 0.0000000000000000 0.0034942738523609 0.0000000000000000 - -0.0000000000000069 0.0000000000000000 -0.0044778895271359 0.0000000000000000 -0.0367974389514110 0.0000000000000000 + 0.0078082955673491 0.0000000000000000 0.0000000000000001 0.0000000000000000 0.0000000000000002 0.0000000000000000 + -0.0000000000000237 0.0000000000000000 0.0119074076296579 0.0000000000000000 0.0034942738523560 0.0000000000000000 + 0.0000000000000040 0.0000000000000000 -0.0044778895271479 0.0000000000000000 -0.0367974389514042 0.0000000000000000 7 5 -0.0014003952261869 0.0000000000000000 0.0002449744821623 0.0000000000000000 0.0015206472447121 0.0000000000000000 - -0.0091891495399319 0.0000000000000000 -0.0030108060126887 0.0000000000000000 0.0014211831836463 0.0000000000000000 - 0.0007217572183878 0.0000000000000000 0.0035553985811579 0.0000000000000000 -0.0025275585661353 0.0000000000000000 + -0.0091891495399260 0.0000000000000000 -0.0030108060126953 0.0000000000000000 0.0014211831836503 0.0000000000000000 + 0.0007217572183691 0.0000000000000000 0.0035553985811666 0.0000000000000000 -0.0025275585661406 0.0000000000000000 7 6 - -0.0014003952261872 0.0000000000000000 -0.0002449744821630 0.0000000000000000 -0.0015206472447121 0.0000000000000000 - 0.0091891495399424 0.0000000000000000 -0.0030108060126824 0.0000000000000000 0.0014211831836421 0.0000000000000000 - -0.0007217572183815 0.0000000000000000 0.0035553985811619 0.0000000000000000 -0.0025275585661374 0.0000000000000000 + -0.0014003952261872 0.0000000000000000 -0.0002449744821625 0.0000000000000000 -0.0015206472447122 0.0000000000000000 + 0.0091891495399473 0.0000000000000000 -0.0030108060126823 0.0000000000000000 0.0014211831836428 0.0000000000000000 + -0.0007217572183726 0.0000000000000000 0.0035553985811644 0.0000000000000000 -0.0025275585661396 0.0000000000000000 7 7 - 0.0723775009917354 0.0000000000000000 0.0000000000000017 0.0000000000000000 -0.0000000000000008 0.0000000000000000 - 0.0000000000000017 0.0000000000000000 0.3831399905936650 0.0000000000000000 -0.0800072256509562 0.0000000000000000 - -0.0000000000000008 0.0000000000000000 -0.0800072256509561 0.0000000000000000 0.4293434337307559 0.0000000000000000 + 0.0723775009917353 0.0000000000000000 0.0000000000000017 0.0000000000000000 0.0000000000000001 0.0000000000000000 + 0.0000000000000017 0.0000000000000000 0.3831399905936725 0.0000000000000000 -0.0800072256509389 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 -0.0800072256509389 0.0000000000000000 0.4293434337307639 0.0000000000000000 7 8 - -0.0251057439413770 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000001 0.0000000000000000 - 0.0000000000000004 0.0000000000000000 -0.0569567699834656 0.0000000000000000 0.0058150573711929 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 -0.0222771411146667 0.0000000000000000 -0.2988598772525917 0.0000000000000000 + -0.0251057439413772 0.0000000000000000 0.0000000000000002 0.0000000000000000 -0.0000000000000006 0.0000000000000000 + 0.0000000000000010 0.0000000000000000 -0.0569567699834674 0.0000000000000000 0.0058150573711754 0.0000000000000000 + -0.0000000000000003 0.0000000000000000 -0.0222771411146699 0.0000000000000000 -0.2988598772526024 0.0000000000000000 7 9 - -0.0289738345959169 0.0000000000000000 -0.0000000000000017 0.0000000000000000 0.0000000000000003 0.0000000000000000 - 0.0000000000000003 0.0000000000000000 -0.2820802915433090 0.0000000000000000 0.0527306161696252 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 0.0884826303559516 0.0000000000000000 -0.0739447334126206 0.0000000000000000 + -0.0289738345959176 0.0000000000000000 -0.0000000000000017 0.0000000000000000 0.0000000000000002 0.0000000000000000 + -0.0000000000000000 0.0000000000000000 -0.2820802915433160 0.0000000000000000 0.0527306161696258 0.0000000000000000 + 0.0000000000000002 0.0000000000000000 0.0884826303559368 0.0000000000000000 -0.0739447334126192 0.0000000000000000 7 10 - -0.0373686571560732 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 - -0.0000000000000186 0.0000000000000000 -0.0336428001201821 0.0000000000000000 0.0041894809945818 0.0000000000000000 - 0.0000000000000077 0.0000000000000000 0.0044397818519375 0.0000000000000000 0.0041303780996381 0.0000000000000000 + -0.0373686571560752 0.0000000000000000 0.0000000000000004 0.0000000000000000 0.0000000000000001 0.0000000000000000 + -0.0000000000000241 0.0000000000000000 -0.0336428001201923 0.0000000000000000 0.0041894809945740 0.0000000000000000 + -0.0000000000000006 0.0000000000000000 0.0044397818519694 0.0000000000000000 0.0041303780996612 0.0000000000000000 7 11 - 0.0079739154089269 0.0000000000000000 -0.0168418597307712 0.0000000000000000 -0.0106690755761884 0.0000000000000000 - -0.0100652146645579 0.0000000000000000 -0.0099918936929241 0.0000000000000000 0.0069122209428926 0.0000000000000000 - 0.0036706343437231 0.0000000000000000 0.0005259246072841 0.0000000000000000 -0.0156150191112076 0.0000000000000000 + 0.0079739154089276 0.0000000000000000 -0.0168418597307721 0.0000000000000000 -0.0106690755761884 0.0000000000000000 + -0.0100652146645597 0.0000000000000000 -0.0099918936929203 0.0000000000000000 0.0069122209428955 0.0000000000000000 + 0.0036706343437562 0.0000000000000000 0.0005259246072660 0.0000000000000000 -0.0156150191112198 0.0000000000000000 7 12 - 0.0079739154089269 0.0000000000000000 0.0168418597307710 0.0000000000000000 0.0106690755761885 0.0000000000000000 - 0.0100652146645751 0.0000000000000000 -0.0099918936929136 0.0000000000000000 0.0069122209428992 0.0000000000000000 - -0.0036706343437302 0.0000000000000000 0.0005259246072797 0.0000000000000000 -0.0156150191112103 0.0000000000000000 + 0.0079739154089274 0.0000000000000000 0.0168418597307716 0.0000000000000000 0.0106690755761887 0.0000000000000000 + 0.0100652146645812 0.0000000000000000 -0.0099918936929064 0.0000000000000000 0.0069122209429034 0.0000000000000000 + -0.0036706343437553 0.0000000000000000 0.0005259246072660 0.0000000000000000 -0.0156150191112191 0.0000000000000000 8 1 - -0.0018152750012300 0.0000000000000000 0.0000000000000007 0.0000000000000000 0.0000000000000001 0.0000000000000000 - -0.0000000000000004 0.0000000000000000 0.0012476417535556 0.0000000000000000 -0.0002039213450288 0.0000000000000000 - -0.0000000000000006 0.0000000000000000 -0.0078942408875751 0.0000000000000000 0.0145769254785633 0.0000000000000000 + -0.0018152750012301 0.0000000000000000 0.0000000000000011 0.0000000000000000 0.0000000000000005 0.0000000000000000 + -0.0000000000000003 0.0000000000000000 0.0012476417535551 0.0000000000000000 -0.0002039213450278 0.0000000000000000 + -0.0000000000000003 0.0000000000000000 -0.0078942408875953 0.0000000000000000 0.0145769254785557 0.0000000000000000 8 2 - 0.0036353210827943 0.0000000000000000 -0.0000000000000000 0.0000000000000000 -0.0000000000000001 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0001181663659072 0.0000000000000000 0.0026161584162165 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 -0.0026161584162164 0.0000000000000000 -0.0221544638345921 0.0000000000000000 + 0.0036353210827943 0.0000000000000000 -0.0000000000000002 0.0000000000000000 -0.0000000000000001 0.0000000000000000 + -0.0000000000000005 0.0000000000000000 -0.0001181663659071 0.0000000000000000 0.0026161584162162 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 -0.0026161584162165 0.0000000000000000 -0.0221544638345921 0.0000000000000000 8 3 - -0.0006990068039681 0.0000000000000000 -0.0000000000000006 0.0000000000000000 0.0000000000000000 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 0.0007453998223712 0.0000000000000000 -0.0020862975258867 0.0000000000000000 - -0.0000000000000001 0.0000000000000000 -0.0005005588826037 0.0000000000000000 -0.0034474484778391 0.0000000000000000 + -0.0006990068039681 0.0000000000000000 -0.0000000000000006 0.0000000000000000 -0.0000000000000002 0.0000000000000000 + 0.0000000000000006 0.0000000000000000 0.0007453998223712 0.0000000000000000 -0.0020862975258869 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 -0.0005005588825857 0.0000000000000000 -0.0034474484778340 0.0000000000000000 8 4 - -0.0158629633765114 0.0000000000000000 0.0000000000000002 0.0000000000000000 -0.0000000000000003 0.0000000000000000 - 0.0000000000000011 0.0000000000000000 -0.0142572303934383 0.0000000000000000 -0.0025026894102802 0.0000000000000000 - 0.0000000000000100 0.0000000000000000 0.0110402408679705 0.0000000000000000 0.0060798140623905 0.0000000000000000 + -0.0158629633765108 0.0000000000000000 0.0000000000000008 0.0000000000000000 0.0000000000000002 0.0000000000000000 + 0.0000000000000015 0.0000000000000000 -0.0142572303934423 0.0000000000000000 -0.0025026894102776 0.0000000000000000 + 0.0000000000000036 0.0000000000000000 0.0110402408679840 0.0000000000000000 0.0060798140623830 0.0000000000000000 8 5 - 0.0025040980237175 0.0000000000000000 -0.0023164619816242 0.0000000000000000 -0.0038518265447292 0.0000000000000000 - 0.0006119532508337 0.0000000000000000 0.0011510144726799 0.0000000000000000 0.0004056725610974 0.0000000000000000 - 0.0017406728581180 0.0000000000000000 -0.0039561444256917 0.0000000000000000 0.0031229275970255 0.0000000000000000 + 0.0025040980237174 0.0000000000000000 -0.0023164619816243 0.0000000000000000 -0.0038518265447297 0.0000000000000000 + 0.0006119532508353 0.0000000000000000 0.0011510144726821 0.0000000000000000 0.0004056725610958 0.0000000000000000 + 0.0017406728581313 0.0000000000000000 -0.0039561444256999 0.0000000000000000 0.0031229275970312 0.0000000000000000 8 6 - 0.0025040980237171 0.0000000000000000 0.0023164619816239 0.0000000000000000 0.0038518265447294 0.0000000000000000 - -0.0006119532508350 0.0000000000000000 0.0011510144726796 0.0000000000000000 0.0004056725610981 0.0000000000000000 - -0.0017406728581269 0.0000000000000000 -0.0039561444256971 0.0000000000000000 0.0031229275970289 0.0000000000000000 + 0.0025040980237168 0.0000000000000000 0.0023164619816233 0.0000000000000000 0.0038518265447292 0.0000000000000000 + -0.0006119532508368 0.0000000000000000 0.0011510144726817 0.0000000000000000 0.0004056725610963 0.0000000000000000 + -0.0017406728581345 0.0000000000000000 -0.0039561444257019 0.0000000000000000 0.0031229275970324 0.0000000000000000 8 7 - -0.0251057439413770 0.0000000000000000 0.0000000000000004 0.0000000000000000 0.0000000000000001 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0569567699834656 0.0000000000000000 -0.0222771411146667 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 0.0058150573711929 0.0000000000000000 -0.2988598772525917 0.0000000000000000 + -0.0251057439413772 0.0000000000000000 0.0000000000000010 0.0000000000000000 -0.0000000000000003 0.0000000000000000 + 0.0000000000000002 0.0000000000000000 -0.0569567699834674 0.0000000000000000 -0.0222771411146699 0.0000000000000000 + -0.0000000000000006 0.0000000000000000 0.0058150573711754 0.0000000000000000 -0.2988598772526024 0.0000000000000000 8 8 - 0.0352255604087112 0.0000000000000000 0.0000000000000002 0.0000000000000000 -0.0000000000000001 0.0000000000000000 - 0.0000000000000002 0.0000000000000000 0.0577498980966732 0.0000000000000000 -0.0004642893512926 0.0000000000000000 - -0.0000000000000001 0.0000000000000000 -0.0004642893512926 0.0000000000000000 0.2960907478396921 0.0000000000000000 + 0.0352255604087111 0.0000000000000000 -0.0000000000000002 0.0000000000000000 -0.0000000000000002 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 0.0577498980966751 0.0000000000000000 -0.0004642893512908 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 -0.0004642893512908 0.0000000000000000 0.2960907478397074 0.0000000000000000 8 9 - 0.0037861455182854 0.0000000000000000 -0.0000000000000007 0.0000000000000000 -0.0000000000000000 0.0000000000000000 - -0.0000000000000003 0.0000000000000000 0.0103751426308780 0.0000000000000000 0.0282119025677871 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 0.0049287602283540 0.0000000000000000 -0.0033792838522482 0.0000000000000000 + 0.0037861455182857 0.0000000000000000 -0.0000000000000006 0.0000000000000000 0.0000000000000003 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 0.0103751426308787 0.0000000000000000 0.0282119025677891 0.0000000000000000 + -0.0000000000000000 0.0000000000000000 0.0049287602283704 0.0000000000000000 -0.0033792838522521 0.0000000000000000 8 10 - -0.0149643881777181 0.0000000000000000 0.0000000000000001 0.0000000000000000 0.0000000000000004 0.0000000000000000 - 0.0000000000000009 0.0000000000000000 -0.0085647327830345 0.0000000000000000 -0.0044261389355795 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0009466269409891 0.0000000000000000 0.0064890897648070 0.0000000000000000 + -0.0149643881777181 0.0000000000000000 0.0000000000000008 0.0000000000000000 -0.0000000000000003 0.0000000000000000 + 0.0000000000000013 0.0000000000000000 -0.0085647327830320 0.0000000000000000 -0.0044261389355782 0.0000000000000000 + 0.0000000000000073 0.0000000000000000 -0.0009466269410211 0.0000000000000000 0.0064890897647847 0.0000000000000000 8 11 - 0.0053960771921628 0.0000000000000000 -0.0027777266316762 0.0000000000000000 0.0010754919735292 0.0000000000000000 - -0.0041883714492618 0.0000000000000000 0.0037383917967328 0.0000000000000000 0.0001605357525146 0.0000000000000000 - -0.0052382113260756 0.0000000000000000 -0.0007249474944408 0.0000000000000000 -0.0008206821613089 0.0000000000000000 + 0.0053960771921630 0.0000000000000000 -0.0027777266316766 0.0000000000000000 0.0010754919735295 0.0000000000000000 + -0.0041883714492626 0.0000000000000000 0.0037383917967315 0.0000000000000000 0.0001605357525135 0.0000000000000000 + -0.0052382113261045 0.0000000000000000 -0.0007249474944220 0.0000000000000000 -0.0008206821612969 0.0000000000000000 8 12 - 0.0053960771921625 0.0000000000000000 0.0027777266316761 0.0000000000000000 -0.0010754919735296 0.0000000000000000 - 0.0041883714492611 0.0000000000000000 0.0037383917967320 0.0000000000000000 0.0001605357525145 0.0000000000000000 - 0.0052382113260758 0.0000000000000000 -0.0007249474944407 0.0000000000000000 -0.0008206821613088 0.0000000000000000 + 0.0053960771921624 0.0000000000000000 0.0027777266316756 0.0000000000000000 -0.0010754919735290 0.0000000000000000 + 0.0041883714492617 0.0000000000000000 0.0037383917967301 0.0000000000000000 0.0001605357525137 0.0000000000000000 + 0.0052382113260979 0.0000000000000000 -0.0007249474944262 0.0000000000000000 -0.0008206821612993 0.0000000000000000 9 1 - -0.0016399265604469 0.0000000000000000 0.0000000000000002 0.0000000000000000 0.0000000000000000 0.0000000000000000 - -0.0000000000000011 0.0000000000000000 -0.0035091911501684 0.0000000000000000 0.0074822204968758 0.0000000000000000 - 0.0000000000000004 0.0000000000000000 -0.0021722504817067 0.0000000000000000 0.0003426041600637 0.0000000000000000 + -0.0016399265604469 0.0000000000000000 -0.0000000000000005 0.0000000000000000 -0.0000000000000002 0.0000000000000000 + -0.0000000000000015 0.0000000000000000 -0.0035091911501695 0.0000000000000000 0.0074822204968551 0.0000000000000000 + 0.0000000000000006 0.0000000000000000 -0.0021722504817071 0.0000000000000000 0.0003426041600707 0.0000000000000000 9 2 - -0.0006990068039687 0.0000000000000000 -0.0000000000000004 0.0000000000000000 0.0000000000000001 0.0000000000000000 - -0.0000000000000006 0.0000000000000000 0.0007453998223717 0.0000000000000000 0.0005005588825958 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 0.0020862975258863 0.0000000000000000 -0.0034474484778370 0.0000000000000000 + -0.0006990068039689 0.0000000000000000 -0.0000000000000001 0.0000000000000000 0.0000000000000000 0.0000000000000000 + -0.0000000000000008 0.0000000000000000 0.0007453998223721 0.0000000000000000 0.0005005588826157 0.0000000000000000 + 0.0000000000000005 0.0000000000000000 0.0020862975258867 0.0000000000000000 -0.0034474484778429 0.0000000000000000 9 3 - 0.0025844652016199 0.0000000000000000 0.0000000000000002 0.0000000000000000 -0.0000000000000002 0.0000000000000000 - -0.0000000000000001 0.0000000000000000 -0.0002706095090059 0.0000000000000000 -0.0025129031626724 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 0.0025129031626719 0.0000000000000000 -0.0015754786010475 0.0000000000000000 + 0.0025844652016201 0.0000000000000000 0.0000000000000003 0.0000000000000000 -0.0000000000000001 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 -0.0002706095090055 0.0000000000000000 -0.0025129031626730 0.0000000000000000 + -0.0000000000000005 0.0000000000000000 0.0025129031626716 0.0000000000000000 -0.0015754786010477 0.0000000000000000 9 4 - -0.0001599946965684 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 - 0.0000000000000112 0.0000000000000000 0.0004054668963109 0.0000000000000000 -0.0101430343307466 0.0000000000000000 - -0.0000000000000023 0.0000000000000000 -0.0081775121522167 0.0000000000000000 0.0079899884223457 0.0000000000000000 + -0.0001599946965685 0.0000000000000000 -0.0000000000000004 0.0000000000000000 -0.0000000000000005 0.0000000000000000 + 0.0000000000000221 0.0000000000000000 0.0004054668963060 0.0000000000000000 -0.0101430343307417 0.0000000000000000 + -0.0000000000000054 0.0000000000000000 -0.0081775121522190 0.0000000000000000 0.0079899884223466 0.0000000000000000 9 5 - -0.0004154624427382 0.0000000000000000 0.0012439381262114 0.0000000000000000 -0.0022873936225500 0.0000000000000000 - 0.0127928624961715 0.0000000000000000 -0.0007025897616760 0.0000000000000000 0.0006118410528842 0.0000000000000000 - -0.0050585024151236 0.0000000000000000 0.0031456369018445 0.0000000000000000 -0.0037626256179448 0.0000000000000000 + -0.0004154624427382 0.0000000000000000 0.0012439381262119 0.0000000000000000 -0.0022873936225496 0.0000000000000000 + 0.0127928624961631 0.0000000000000000 -0.0007025897616701 0.0000000000000000 0.0006118410528804 0.0000000000000000 + -0.0050585024151183 0.0000000000000000 0.0031456369018450 0.0000000000000000 -0.0037626256179454 0.0000000000000000 9 6 - -0.0004154624427381 0.0000000000000000 -0.0012439381262112 0.0000000000000000 0.0022873936225501 0.0000000000000000 - -0.0127928624961816 0.0000000000000000 -0.0007025897616824 0.0000000000000000 0.0006118410528878 0.0000000000000000 - 0.0050585024151258 0.0000000000000000 0.0031456369018455 0.0000000000000000 -0.0037626256179458 0.0000000000000000 + -0.0004154624427381 0.0000000000000000 -0.0012439381262112 0.0000000000000000 0.0022873936225505 0.0000000000000000 + -0.0127928624961828 0.0000000000000000 -0.0007025897616823 0.0000000000000000 0.0006118410528877 0.0000000000000000 + 0.0050585024151235 0.0000000000000000 0.0031456369018476 0.0000000000000000 -0.0037626256179473 0.0000000000000000 9 7 - -0.0289738345959169 0.0000000000000000 0.0000000000000003 0.0000000000000000 -0.0000000000000002 0.0000000000000000 - -0.0000000000000017 0.0000000000000000 -0.2820802915433090 0.0000000000000000 0.0884826303559516 0.0000000000000000 - 0.0000000000000003 0.0000000000000000 0.0527306161696252 0.0000000000000000 -0.0739447334126206 0.0000000000000000 + -0.0289738345959176 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000002 0.0000000000000000 + -0.0000000000000017 0.0000000000000000 -0.2820802915433160 0.0000000000000000 0.0884826303559368 0.0000000000000000 + 0.0000000000000002 0.0000000000000000 0.0527306161696258 0.0000000000000000 -0.0739447334126193 0.0000000000000000 9 8 - 0.0037861455182854 0.0000000000000000 -0.0000000000000003 0.0000000000000000 0.0000000000000000 0.0000000000000000 - -0.0000000000000007 0.0000000000000000 0.0103751426308780 0.0000000000000000 0.0049287602283540 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 0.0282119025677871 0.0000000000000000 -0.0033792838522482 0.0000000000000000 + 0.0037861455182857 0.0000000000000000 -0.0000000000000001 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0000000000000006 0.0000000000000000 0.0103751426308787 0.0000000000000000 0.0049287602283704 0.0000000000000000 + 0.0000000000000003 0.0000000000000000 0.0282119025677891 0.0000000000000000 -0.0033792838522521 0.0000000000000000 9 9 - 0.0365782981378739 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000003 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 0.2729248902175075 0.0000000000000000 -0.0713458205553473 0.0000000000000000 - 0.0000000000000003 0.0000000000000000 -0.0713458205553473 0.0000000000000000 0.0798291225288844 0.0000000000000000 + 0.0365782981378745 0.0000000000000000 -0.0000000000000001 0.0000000000000000 0.0000000000000002 0.0000000000000000 + -0.0000000000000001 0.0000000000000000 0.2729248902175154 0.0000000000000000 -0.0713458205553494 0.0000000000000000 + 0.0000000000000002 0.0000000000000000 -0.0713458205553494 0.0000000000000000 0.0798291225288877 0.0000000000000000 9 10 - -0.0193793176120026 0.0000000000000000 0.0000000000000001 0.0000000000000000 -0.0000000000000001 0.0000000000000000 - 0.0000000000000181 0.0000000000000000 0.0128264092257446 0.0000000000000000 -0.0093892601393168 0.0000000000000000 - -0.0000000000000052 0.0000000000000000 -0.0108019320579839 0.0000000000000000 -0.0127958810116054 0.0000000000000000 + -0.0193793176120025 0.0000000000000000 -0.0000000000000005 0.0000000000000000 0.0000000000000006 0.0000000000000000 + 0.0000000000000224 0.0000000000000000 0.0128264092257506 0.0000000000000000 -0.0093892601393123 0.0000000000000000 + -0.0000000000000060 0.0000000000000000 -0.0108019320579835 0.0000000000000000 -0.0127958810116057 0.0000000000000000 9 11 - 0.0043670482201903 0.0000000000000000 0.0062527546419648 0.0000000000000000 -0.0032245610064170 0.0000000000000000 - 0.0073649825438516 0.0000000000000000 -0.0050060184798300 0.0000000000000000 -0.0046134194019357 0.0000000000000000 - -0.0069798143243239 0.0000000000000000 0.0003322634792043 0.0000000000000000 0.0072531804468956 0.0000000000000000 + 0.0043670482201904 0.0000000000000000 0.0062527546419655 0.0000000000000000 -0.0032245610064176 0.0000000000000000 + 0.0073649825438538 0.0000000000000000 -0.0050060184798319 0.0000000000000000 -0.0046134194019368 0.0000000000000000 + -0.0069798143243258 0.0000000000000000 0.0003322634792033 0.0000000000000000 0.0072531804468954 0.0000000000000000 9 12 - 0.0043670482201904 0.0000000000000000 -0.0062527546419647 0.0000000000000000 0.0032245610064169 0.0000000000000000 - -0.0073649825438683 0.0000000000000000 -0.0050060184798403 0.0000000000000000 -0.0046134194019421 0.0000000000000000 - 0.0069798143243285 0.0000000000000000 0.0003322634792074 0.0000000000000000 0.0072531804468972 0.0000000000000000 + 0.0043670482201904 0.0000000000000000 -0.0062527546419647 0.0000000000000000 0.0032245610064166 0.0000000000000000 + -0.0073649825438740 0.0000000000000000 -0.0050060184798441 0.0000000000000000 -0.0046134194019448 0.0000000000000000 + 0.0069798143243311 0.0000000000000000 0.0003322634792073 0.0000000000000000 0.0072531804468969 0.0000000000000000 10 1 - 0.0078082955673484 0.0000000000000000 -0.0000000000000126 0.0000000000000000 -0.0000000000000024 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 0.0119074076296553 0.0000000000000000 0.0044778895271319 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0034942738523579 0.0000000000000000 -0.0367974389514135 0.0000000000000000 + 0.0078082955673473 0.0000000000000000 -0.0000000000000142 0.0000000000000000 -0.0000000000000075 0.0000000000000000 + 0.0000000000000003 0.0000000000000000 0.0119074076296482 0.0000000000000000 0.0044778895271162 0.0000000000000000 + 0.0000000000000008 0.0000000000000000 -0.0034942738523642 0.0000000000000000 -0.0367974389514215 0.0000000000000000 10 2 - -0.0158629633765103 0.0000000000000000 0.0000000000000007 0.0000000000000000 -0.0000000000000012 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0142572303934455 0.0000000000000000 -0.0110402408679752 0.0000000000000000 - 0.0000000000000004 0.0000000000000000 0.0025026894102758 0.0000000000000000 0.0060798140623873 0.0000000000000000 + -0.0158629633765104 0.0000000000000000 0.0000000000000013 0.0000000000000000 0.0000000000000027 0.0000000000000000 + 0.0000000000000010 0.0000000000000000 -0.0142572303934417 0.0000000000000000 -0.0110402408679579 0.0000000000000000 + -0.0000000000000003 0.0000000000000000 0.0025026894102780 0.0000000000000000 0.0060798140623969 0.0000000000000000 10 3 - -0.0001599946965688 0.0000000000000000 0.0000000000000126 0.0000000000000000 0.0000000000000033 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 0.0004054668963131 0.0000000000000000 0.0081775121522256 0.0000000000000000 - -0.0000000000000002 0.0000000000000000 0.0101430343307470 0.0000000000000000 0.0079899884223510 0.0000000000000000 + -0.0001599946965690 0.0000000000000000 0.0000000000000122 0.0000000000000000 0.0000000000000024 0.0000000000000000 + -0.0000000000000002 0.0000000000000000 0.0004054668963175 0.0000000000000000 0.0081775121522231 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 0.0101430343307511 0.0000000000000000 0.0079899884223499 0.0000000000000000 10 4 - 0.0039008143595910 0.0000000000000000 -0.0000000000000040 0.0000000000000000 0.0000000000000046 0.0000000000000000 - -0.0000000000000069 0.0000000000000000 -0.0008485805837897 0.0000000000000000 0.0030686652718395 0.0000000000000000 - -0.0000000000000047 0.0000000000000000 -0.0030686652718400 0.0000000000000000 -0.0082838582595769 0.0000000000000000 + 0.0039008143595903 0.0000000000000000 -0.0000000000000099 0.0000000000000000 0.0000000000000064 0.0000000000000000 + -0.0000000000000146 0.0000000000000000 -0.0008485805837914 0.0000000000000000 0.0030686652718396 0.0000000000000000 + -0.0000000000000108 0.0000000000000000 -0.0030686652718407 0.0000000000000000 -0.0082838582595772 0.0000000000000000 10 5 - 0.0005529569781371 0.0000000000000000 0.0006881224323712 0.0000000000000000 -0.0009938270035004 0.0000000000000000 - -0.0004060563613260 0.0000000000000000 0.0017449768597137 0.0000000000000000 -0.0014852637978338 0.0000000000000000 - 0.0028171359308498 0.0000000000000000 -0.0003308975272955 0.0000000000000000 0.0019808748951325 0.0000000000000000 + 0.0005529569781323 0.0000000000000000 0.0006881224323740 0.0000000000000000 -0.0009938270035019 0.0000000000000000 + -0.0004060563613220 0.0000000000000000 0.0017449768597118 0.0000000000000000 -0.0014852637978332 0.0000000000000000 + 0.0028171359308531 0.0000000000000000 -0.0003308975272971 0.0000000000000000 0.0019808748951340 0.0000000000000000 10 6 - 0.0005529569781434 0.0000000000000000 -0.0006881224323659 0.0000000000000000 0.0009938270034969 0.0000000000000000 - 0.0004060563613320 0.0000000000000000 0.0017449768597174 0.0000000000000000 -0.0014852637978362 0.0000000000000000 - -0.0028171359308457 0.0000000000000000 -0.0003308975272932 0.0000000000000000 0.0019808748951314 0.0000000000000000 + 0.0005529569781476 0.0000000000000000 -0.0006881224323638 0.0000000000000000 0.0009938270034952 0.0000000000000000 + 0.0004060563613346 0.0000000000000000 0.0017449768597203 0.0000000000000000 -0.0014852637978375 0.0000000000000000 + -0.0028171359308436 0.0000000000000000 -0.0003308975272921 0.0000000000000000 0.0019808748951298 0.0000000000000000 10 7 - -0.0373686571560732 0.0000000000000000 -0.0000000000000186 0.0000000000000000 0.0000000000000077 0.0000000000000000 - 0.0000000000000000 0.0000000000000000 -0.0336428001201821 0.0000000000000000 0.0044397818519375 0.0000000000000000 - -0.0000000000000000 0.0000000000000000 0.0041894809945818 0.0000000000000000 0.0041303780996381 0.0000000000000000 + -0.0373686571560752 0.0000000000000000 -0.0000000000000241 0.0000000000000000 -0.0000000000000006 0.0000000000000000 + 0.0000000000000004 0.0000000000000000 -0.0336428001201923 0.0000000000000000 0.0044397818519694 0.0000000000000000 + 0.0000000000000001 0.0000000000000000 0.0041894809945740 0.0000000000000000 0.0041303780996612 0.0000000000000000 10 8 - -0.0149643881777181 0.0000000000000000 0.0000000000000009 0.0000000000000000 0.0000000000000000 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 -0.0085647327830345 0.0000000000000000 -0.0009466269409891 0.0000000000000000 - 0.0000000000000004 0.0000000000000000 -0.0044261389355795 0.0000000000000000 0.0064890897648070 0.0000000000000000 + -0.0149643881777181 0.0000000000000000 0.0000000000000013 0.0000000000000000 0.0000000000000073 0.0000000000000000 + 0.0000000000000008 0.0000000000000000 -0.0085647327830320 0.0000000000000000 -0.0009466269410211 0.0000000000000000 + -0.0000000000000003 0.0000000000000000 -0.0044261389355782 0.0000000000000000 0.0064890897647847 0.0000000000000000 10 9 - -0.0193793176120026 0.0000000000000000 0.0000000000000181 0.0000000000000000 -0.0000000000000052 0.0000000000000000 - 0.0000000000000001 0.0000000000000000 0.0128264092257446 0.0000000000000000 -0.0108019320579839 0.0000000000000000 - -0.0000000000000001 0.0000000000000000 -0.0093892601393168 0.0000000000000000 -0.0127958810116054 0.0000000000000000 + -0.0193793176120025 0.0000000000000000 0.0000000000000224 0.0000000000000000 -0.0000000000000060 0.0000000000000000 + -0.0000000000000005 0.0000000000000000 0.0128264092257506 0.0000000000000000 -0.0108019320579835 0.0000000000000000 + 0.0000000000000006 0.0000000000000000 -0.0093892601393123 0.0000000000000000 -0.0127958810116057 0.0000000000000000 10 10 - 0.4834443802759677 0.0000000000000000 -0.0000000000000068 0.0000000000000000 -0.0000000000000052 0.0000000000000000 - -0.0000000000000068 0.0000000000000000 0.2588422264936718 0.0000000000000000 0.1308110718530766 0.0000000000000000 - -0.0000000000000052 0.0000000000000000 0.1308110718530766 0.0000000000000000 0.1639030178691418 0.0000000000000000 + 0.4834443802759665 0.0000000000000000 -0.0000000000000097 0.0000000000000000 -0.0000000000000083 0.0000000000000000 + -0.0000000000000097 0.0000000000000000 0.2588422264936571 0.0000000000000000 0.1308110718530663 0.0000000000000000 + -0.0000000000000083 0.0000000000000000 0.1308110718530663 0.0000000000000000 0.1639030178691341 0.0000000000000000 10 11 - -0.2042620382021103 0.0000000000000000 0.1111612914471679 0.0000000000000000 0.0678004081048736 0.0000000000000000 - 0.0961493426419422 0.0000000000000000 -0.1150790588758586 0.0000000000000000 -0.0626077946132254 0.0000000000000000 - 0.0680988033808412 0.0000000000000000 -0.0633030715249542 0.0000000000000000 -0.0673384314526858 0.0000000000000000 + -0.2042620382021126 0.0000000000000000 0.1111612914471689 0.0000000000000000 0.0678004081048748 0.0000000000000000 + 0.0961493426419430 0.0000000000000000 -0.1150790588758516 0.0000000000000000 -0.0626077946132198 0.0000000000000000 + 0.0680988033808423 0.0000000000000000 -0.0633030715249490 0.0000000000000000 -0.0673384314526829 0.0000000000000000 10 12 - -0.2042620382020978 0.0000000000000000 -0.1111612914471592 0.0000000000000000 -0.0678004081048687 0.0000000000000000 - -0.0961493426419367 0.0000000000000000 -0.1150790588758556 0.0000000000000000 -0.0626077946132231 0.0000000000000000 - -0.0680988033808369 0.0000000000000000 -0.0633030715249510 0.0000000000000000 -0.0673384314526842 0.0000000000000000 + -0.2042620382020968 0.0000000000000000 -0.1111612914471585 0.0000000000000000 -0.0678004081048683 0.0000000000000000 + -0.0961493426419348 0.0000000000000000 -0.1150790588758463 0.0000000000000000 -0.0626077946132173 0.0000000000000000 + -0.0680988033808351 0.0000000000000000 -0.0633030715249450 0.0000000000000000 -0.0673384314526796 0.0000000000000000 11 1 - -0.0014003952261869 0.0000000000000000 -0.0091891495399388 0.0000000000000000 -0.0007217572183772 0.0000000000000000 - 0.0002449744821628 0.0000000000000000 -0.0030108060126908 0.0000000000000000 -0.0035553985811578 0.0000000000000000 - -0.0015206472447128 0.0000000000000000 -0.0014211831836475 0.0000000000000000 -0.0025275585661347 0.0000000000000000 + -0.0014003952261856 0.0000000000000000 -0.0091891495399406 0.0000000000000000 -0.0007217572183924 0.0000000000000000 + 0.0002449744821623 0.0000000000000000 -0.0030108060126859 0.0000000000000000 -0.0035553985811516 0.0000000000000000 + -0.0015206472447132 0.0000000000000000 -0.0014211831836441 0.0000000000000000 -0.0025275585661300 0.0000000000000000 11 2 - 0.0025040980237169 0.0000000000000000 0.0006119532508384 0.0000000000000000 -0.0017406728581262 0.0000000000000000 - -0.0023164619816241 0.0000000000000000 0.0011510144726841 0.0000000000000000 0.0039561444256966 0.0000000000000000 - 0.0038518265447296 0.0000000000000000 -0.0004056725610947 0.0000000000000000 0.0031229275970287 0.0000000000000000 + 0.0025040980237171 0.0000000000000000 0.0006119532508363 0.0000000000000000 -0.0017406728581138 0.0000000000000000 + -0.0023164619816247 0.0000000000000000 0.0011510144726823 0.0000000000000000 0.0039561444256889 0.0000000000000000 + 0.0038518265447299 0.0000000000000000 -0.0004056725610963 0.0000000000000000 0.0031229275970233 0.0000000000000000 11 3 - -0.0004154624427381 0.0000000000000000 0.0127928624961743 0.0000000000000000 0.0050585024151193 0.0000000000000000 - 0.0012439381262111 0.0000000000000000 -0.0007025897616770 0.0000000000000000 -0.0031456369018490 0.0000000000000000 - 0.0022873936225506 0.0000000000000000 -0.0006118410528849 0.0000000000000000 -0.0037626256179484 0.0000000000000000 + -0.0004154624427382 0.0000000000000000 0.0127928624961779 0.0000000000000000 0.0050585024151234 0.0000000000000000 + 0.0012439381262114 0.0000000000000000 -0.0007025897616806 0.0000000000000000 -0.0031456369018480 0.0000000000000000 + 0.0022873936225502 0.0000000000000000 -0.0006118410528870 0.0000000000000000 -0.0037626256179479 0.0000000000000000 11 4 - 0.0005529569781357 0.0000000000000000 -0.0004060563613263 0.0000000000000000 -0.0028171359308497 0.0000000000000000 - 0.0006881224323731 0.0000000000000000 0.0017449768597133 0.0000000000000000 0.0003308975272964 0.0000000000000000 - 0.0009938270035010 0.0000000000000000 0.0014852637978340 0.0000000000000000 0.0019808748951326 0.0000000000000000 + 0.0005529569781305 0.0000000000000000 -0.0004060563613253 0.0000000000000000 -0.0028171359308512 0.0000000000000000 + 0.0006881224323763 0.0000000000000000 0.0017449768597123 0.0000000000000000 0.0003308975272968 0.0000000000000000 + 0.0009938270035030 0.0000000000000000 0.0014852637978338 0.0000000000000000 0.0019808748951335 0.0000000000000000 11 5 - -0.0001947154534039 0.0000000000000000 0.0001055444019315 0.0000000000000000 0.0008285855530545 0.0000000000000000 - 0.0001055444019321 0.0000000000000000 -0.0022624521874624 0.0000000000000000 0.0020902638812464 0.0000000000000000 - -0.0008285855530545 0.0000000000000000 -0.0020902638812466 0.0000000000000000 0.0008479800149229 0.0000000000000000 + -0.0001947154533988 0.0000000000000000 0.0001055444019293 0.0000000000000000 0.0008285855530561 0.0000000000000000 + 0.0001055444019280 0.0000000000000000 -0.0022624521874604 0.0000000000000000 0.0020902638812458 0.0000000000000000 + -0.0008285855530568 0.0000000000000000 -0.0020902638812461 0.0000000000000000 0.0008479800149217 0.0000000000000000 11 6 - -0.0020226399972398 0.0000000000000000 -0.0002383182140790 0.0000000000000000 0.0001011648438936 0.0000000000000000 - 0.0002383182140770 0.0000000000000000 0.0000601515309634 0.0000000000000000 0.0001507007232535 0.0000000000000000 - 0.0001011648438928 0.0000000000000000 -0.0001507007232538 0.0000000000000000 -0.0022331838997249 0.0000000000000000 + -0.0020226399972393 0.0000000000000000 -0.0002383182140776 0.0000000000000000 0.0001011648438931 0.0000000000000000 + 0.0002383182140778 0.0000000000000000 0.0000601515309627 0.0000000000000000 0.0001507007232537 0.0000000000000000 + 0.0001011648438931 0.0000000000000000 -0.0001507007232540 0.0000000000000000 -0.0022331838997248 0.0000000000000000 11 7 - 0.0079739154089269 0.0000000000000000 -0.0100652146645579 0.0000000000000000 0.0036706343437231 0.0000000000000000 - -0.0168418597307712 0.0000000000000000 -0.0099918936929241 0.0000000000000000 0.0005259246072841 0.0000000000000000 - -0.0106690755761884 0.0000000000000000 0.0069122209428926 0.0000000000000000 -0.0156150191112076 0.0000000000000000 + 0.0079739154089276 0.0000000000000000 -0.0100652146645597 0.0000000000000000 0.0036706343437562 0.0000000000000000 + -0.0168418597307721 0.0000000000000000 -0.0099918936929203 0.0000000000000000 0.0005259246072660 0.0000000000000000 + -0.0106690755761884 0.0000000000000000 0.0069122209428955 0.0000000000000000 -0.0156150191112198 0.0000000000000000 11 8 - 0.0053960771921628 0.0000000000000000 -0.0041883714492618 0.0000000000000000 -0.0052382113260756 0.0000000000000000 - -0.0027777266316762 0.0000000000000000 0.0037383917967328 0.0000000000000000 -0.0007249474944408 0.0000000000000000 - 0.0010754919735292 0.0000000000000000 0.0001605357525146 0.0000000000000000 -0.0008206821613089 0.0000000000000000 + 0.0053960771921630 0.0000000000000000 -0.0041883714492626 0.0000000000000000 -0.0052382113261045 0.0000000000000000 + -0.0027777266316766 0.0000000000000000 0.0037383917967315 0.0000000000000000 -0.0007249474944220 0.0000000000000000 + 0.0010754919735295 0.0000000000000000 0.0001605357525135 0.0000000000000000 -0.0008206821612969 0.0000000000000000 11 9 - 0.0043670482201903 0.0000000000000000 0.0073649825438516 0.0000000000000000 -0.0069798143243239 0.0000000000000000 - 0.0062527546419648 0.0000000000000000 -0.0050060184798300 0.0000000000000000 0.0003322634792043 0.0000000000000000 - -0.0032245610064170 0.0000000000000000 -0.0046134194019357 0.0000000000000000 0.0072531804468956 0.0000000000000000 + 0.0043670482201904 0.0000000000000000 0.0073649825438538 0.0000000000000000 -0.0069798143243258 0.0000000000000000 + 0.0062527546419655 0.0000000000000000 -0.0050060184798319 0.0000000000000000 0.0003322634792033 0.0000000000000000 + -0.0032245610064176 0.0000000000000000 -0.0046134194019368 0.0000000000000000 0.0072531804468954 0.0000000000000000 11 10 - -0.2042620382021102 0.0000000000000000 0.0961493426419422 0.0000000000000000 0.0680988033808412 0.0000000000000000 - 0.1111612914471679 0.0000000000000000 -0.1150790588758586 0.0000000000000000 -0.0633030715249542 0.0000000000000000 - 0.0678004081048736 0.0000000000000000 -0.0626077946132254 0.0000000000000000 -0.0673384314526858 0.0000000000000000 + -0.2042620382021126 0.0000000000000000 0.0961493426419430 0.0000000000000000 0.0680988033808423 0.0000000000000000 + 0.1111612914471689 0.0000000000000000 -0.1150790588758516 0.0000000000000000 -0.0633030715249490 0.0000000000000000 + 0.0678004081048748 0.0000000000000000 -0.0626077946132198 0.0000000000000000 -0.0673384314526829 0.0000000000000000 11 11 - 0.2174594979186331 0.0000000000000000 -0.0954682304260189 0.0000000000000000 -0.0600636707989537 0.0000000000000000 - -0.0954682304260189 0.0000000000000000 0.1104252604741452 0.0000000000000000 0.0503426131734432 0.0000000000000000 - -0.0600636707989537 0.0000000000000000 0.0503426131734432 0.0000000000000000 0.0677190190410552 0.0000000000000000 + 0.2174594979186290 0.0000000000000000 -0.0954682304260202 0.0000000000000000 -0.0600636707989551 0.0000000000000000 + -0.0954682304260201 0.0000000000000000 0.1104252604741420 0.0000000000000000 0.0503426131734401 0.0000000000000000 + -0.0600636707989551 0.0000000000000000 0.0503426131734401 0.0000000000000000 0.0677190190410538 0.0000000000000000 11 12 - -0.0299583471230510 0.0000000000000000 0.0025306649736035 0.0000000000000000 -0.0001964280885689 0.0000000000000000 - -0.0025306649736040 0.0000000000000000 0.0189330240079888 0.0000000000000000 0.0130002466230982 0.0000000000000000 - 0.0001964280885690 0.0000000000000000 0.0130002466230981 0.0000000000000000 0.0113735279572512 0.0000000000000000 + -0.0299583471230438 0.0000000000000000 0.0025306649736038 0.0000000000000000 -0.0001964280885691 0.0000000000000000 + -0.0025306649736042 0.0000000000000000 0.0189330240079841 0.0000000000000000 0.0130002466230951 0.0000000000000000 + 0.0001964280885689 0.0000000000000000 0.0130002466230950 0.0000000000000000 0.0113735279572490 0.0000000000000000 12 1 - -0.0014003952261867 0.0000000000000000 0.0091891495399492 0.0000000000000000 0.0007217572183790 0.0000000000000000 - -0.0002449744821631 0.0000000000000000 -0.0030108060126839 0.0000000000000000 -0.0035553985811565 0.0000000000000000 - 0.0015206472447128 0.0000000000000000 -0.0014211831836433 0.0000000000000000 -0.0025275585661339 0.0000000000000000 + -0.0014003952261866 0.0000000000000000 0.0091891495399536 0.0000000000000000 0.0007217572183988 0.0000000000000000 + -0.0002449744821628 0.0000000000000000 -0.0030108060126772 0.0000000000000000 -0.0035553985811472 0.0000000000000000 + 0.0015206472447123 0.0000000000000000 -0.0014211831836398 0.0000000000000000 -0.0025275585661280 0.0000000000000000 12 2 - 0.0025040980237166 0.0000000000000000 -0.0006119532508387 0.0000000000000000 0.0017406728581268 0.0000000000000000 - 0.0023164619816241 0.0000000000000000 0.0011510144726835 0.0000000000000000 0.0039561444256971 0.0000000000000000 - -0.0038518265447301 0.0000000000000000 -0.0004056725610949 0.0000000000000000 0.0031229275970290 0.0000000000000000 + 0.0025040980237165 0.0000000000000000 -0.0006119532508372 0.0000000000000000 0.0017406728581117 0.0000000000000000 + 0.0023164619816236 0.0000000000000000 0.0011510144726808 0.0000000000000000 0.0039561444256877 0.0000000000000000 + -0.0038518265447295 0.0000000000000000 -0.0004056725610962 0.0000000000000000 0.0031229275970226 0.0000000000000000 12 3 - -0.0004154624427380 0.0000000000000000 -0.0127928624961850 0.0000000000000000 -0.0050585024151219 0.0000000000000000 - -0.0012439381262113 0.0000000000000000 -0.0007025897616837 0.0000000000000000 -0.0031456369018512 0.0000000000000000 - -0.0022873936225503 0.0000000000000000 -0.0006118410528889 0.0000000000000000 -0.0037626256179495 0.0000000000000000 + -0.0004154624427381 0.0000000000000000 -0.0127928624961893 0.0000000000000000 -0.0050585024151255 0.0000000000000000 + -0.0012439381262112 0.0000000000000000 -0.0007025897616875 0.0000000000000000 -0.0031456369018501 0.0000000000000000 + -0.0022873936225502 0.0000000000000000 -0.0006118410528913 0.0000000000000000 -0.0037626256179483 0.0000000000000000 12 4 - 0.0005529569781457 0.0000000000000000 0.0004060563613303 0.0000000000000000 0.0028171359308457 0.0000000000000000 - -0.0006881224323643 0.0000000000000000 0.0017449768597157 0.0000000000000000 0.0003308975272936 0.0000000000000000 - -0.0009938270034956 0.0000000000000000 0.0014852637978359 0.0000000000000000 0.0019808748951316 0.0000000000000000 + 0.0005529569781524 0.0000000000000000 0.0004060563613336 0.0000000000000000 0.0028171359308458 0.0000000000000000 + -0.0006881224323601 0.0000000000000000 0.0017449768597178 0.0000000000000000 0.0003308975272940 0.0000000000000000 + -0.0009938270034931 0.0000000000000000 0.0014852637978365 0.0000000000000000 0.0019808748951309 0.0000000000000000 12 5 - -0.0020226399972410 0.0000000000000000 0.0002383182140790 0.0000000000000000 -0.0001011648438937 0.0000000000000000 - -0.0002383182140790 0.0000000000000000 0.0000601515309643 0.0000000000000000 0.0001507007232530 0.0000000000000000 - -0.0001011648438942 0.0000000000000000 -0.0001507007232539 0.0000000000000000 -0.0022331838997254 0.0000000000000000 + -0.0020226399972424 0.0000000000000000 0.0002383182140792 0.0000000000000000 -0.0001011648438940 0.0000000000000000 + -0.0002383182140810 0.0000000000000000 0.0000601515309647 0.0000000000000000 0.0001507007232529 0.0000000000000000 + -0.0001011648438950 0.0000000000000000 -0.0001507007232532 0.0000000000000000 -0.0022331838997255 0.0000000000000000 12 6 - -0.0001947154534107 0.0000000000000000 -0.0001055444019365 0.0000000000000000 -0.0008285855530515 0.0000000000000000 - -0.0001055444019376 0.0000000000000000 -0.0022624521874664 0.0000000000000000 0.0020902638812491 0.0000000000000000 - 0.0008285855530511 0.0000000000000000 -0.0020902638812490 0.0000000000000000 0.0008479800149237 0.0000000000000000 + -0.0001947154534146 0.0000000000000000 -0.0001055444019394 0.0000000000000000 -0.0008285855530497 0.0000000000000000 + -0.0001055444019387 0.0000000000000000 -0.0022624521874681 0.0000000000000000 0.0020902638812496 0.0000000000000000 + 0.0008285855530500 0.0000000000000000 -0.0020902638812495 0.0000000000000000 0.0008479800149252 0.0000000000000000 12 7 - 0.0079739154089269 0.0000000000000000 0.0100652146645751 0.0000000000000000 -0.0036706343437302 0.0000000000000000 - 0.0168418597307710 0.0000000000000000 -0.0099918936929136 0.0000000000000000 0.0005259246072797 0.0000000000000000 - 0.0106690755761885 0.0000000000000000 0.0069122209428992 0.0000000000000000 -0.0156150191112103 0.0000000000000000 + 0.0079739154089274 0.0000000000000000 0.0100652146645812 0.0000000000000000 -0.0036706343437553 0.0000000000000000 + 0.0168418597307716 0.0000000000000000 -0.0099918936929064 0.0000000000000000 0.0005259246072660 0.0000000000000000 + 0.0106690755761887 0.0000000000000000 0.0069122209429034 0.0000000000000000 -0.0156150191112191 0.0000000000000000 12 8 - 0.0053960771921625 0.0000000000000000 0.0041883714492611 0.0000000000000000 0.0052382113260758 0.0000000000000000 - 0.0027777266316761 0.0000000000000000 0.0037383917967320 0.0000000000000000 -0.0007249474944407 0.0000000000000000 - -0.0010754919735296 0.0000000000000000 0.0001605357525145 0.0000000000000000 -0.0008206821613088 0.0000000000000000 + 0.0053960771921624 0.0000000000000000 0.0041883714492617 0.0000000000000000 0.0052382113260979 0.0000000000000000 + 0.0027777266316756 0.0000000000000000 0.0037383917967301 0.0000000000000000 -0.0007249474944262 0.0000000000000000 + -0.0010754919735290 0.0000000000000000 0.0001605357525137 0.0000000000000000 -0.0008206821612993 0.0000000000000000 12 9 - 0.0043670482201904 0.0000000000000000 -0.0073649825438683 0.0000000000000000 0.0069798143243285 0.0000000000000000 - -0.0062527546419647 0.0000000000000000 -0.0050060184798403 0.0000000000000000 0.0003322634792074 0.0000000000000000 - 0.0032245610064169 0.0000000000000000 -0.0046134194019421 0.0000000000000000 0.0072531804468972 0.0000000000000000 + 0.0043670482201904 0.0000000000000000 -0.0073649825438740 0.0000000000000000 0.0069798143243311 0.0000000000000000 + -0.0062527546419647 0.0000000000000000 -0.0050060184798441 0.0000000000000000 0.0003322634792073 0.0000000000000000 + 0.0032245610064166 0.0000000000000000 -0.0046134194019448 0.0000000000000000 0.0072531804468969 0.0000000000000000 12 10 - -0.2042620382020978 0.0000000000000000 -0.0961493426419367 0.0000000000000000 -0.0680988033808369 0.0000000000000000 - -0.1111612914471592 0.0000000000000000 -0.1150790588758556 0.0000000000000000 -0.0633030715249510 0.0000000000000000 - -0.0678004081048687 0.0000000000000000 -0.0626077946132231 0.0000000000000000 -0.0673384314526842 0.0000000000000000 + -0.2042620382020968 0.0000000000000000 -0.0961493426419348 0.0000000000000000 -0.0680988033808351 0.0000000000000000 + -0.1111612914471585 0.0000000000000000 -0.1150790588758463 0.0000000000000000 -0.0633030715249450 0.0000000000000000 + -0.0678004081048683 0.0000000000000000 -0.0626077946132173 0.0000000000000000 -0.0673384314526796 0.0000000000000000 12 11 - -0.0299583471230510 0.0000000000000000 -0.0025306649736040 0.0000000000000000 0.0001964280885690 0.0000000000000000 - 0.0025306649736035 0.0000000000000000 0.0189330240079888 0.0000000000000000 0.0130002466230981 0.0000000000000000 - -0.0001964280885689 0.0000000000000000 0.0130002466230982 0.0000000000000000 0.0113735279572512 0.0000000000000000 + -0.0299583471230438 0.0000000000000000 -0.0025306649736042 0.0000000000000000 0.0001964280885689 0.0000000000000000 + 0.0025306649736039 0.0000000000000000 0.0189330240079841 0.0000000000000000 0.0130002466230950 0.0000000000000000 + -0.0001964280885691 0.0000000000000000 0.0130002466230951 0.0000000000000000 0.0113735279572490 0.0000000000000000 12 12 - 0.2174594979186231 0.0000000000000000 0.0954682304260121 0.0000000000000000 0.0600636707989498 0.0000000000000000 - 0.0954682304260121 0.0000000000000000 0.1104252604741411 0.0000000000000000 0.0503426131734401 0.0000000000000000 - 0.0600636707989498 0.0000000000000000 0.0503426131734401 0.0000000000000000 0.0677190190410539 0.0000000000000000 + 0.2174594979186159 0.0000000000000000 0.0954682304260116 0.0000000000000000 0.0600636707989499 0.0000000000000000 + 0.0954682304260116 0.0000000000000000 0.1104252604741362 0.0000000000000000 0.0503426131734372 0.0000000000000000 + 0.0600636707989499 0.0000000000000000 0.0503426131734372 0.0000000000000000 0.0677190190410512 0.0000000000000000 Diagonalizing the dynamical matrix q = ( 0.000000000000 0.000000000000 0.000000000000 ) *************************************************************************** - freq ( 1) = -0.00000069 [THz] = -0.00002302 [cm-1] -( -0.000000 0.000000 -0.040715 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040714 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040715 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040715 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040715 0.000000 0.285789 0.000000 ) -( -0.000000 0.000000 -0.040715 0.000000 0.285789 0.000000 ) -( -0.000000 0.000000 -0.040714 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040714 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040714 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040714 0.000000 0.285790 0.000000 ) -( -0.000000 0.000000 -0.040714 0.000000 0.285789 0.000000 ) -( -0.000000 0.000000 -0.040714 0.000000 0.285789 0.000000 ) - freq ( 2) = -0.00000037 [THz] = -0.00001228 [cm-1] -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) -( -0.000001 0.000000 0.285790 0.000000 0.040714 0.000000 ) - freq ( 3) = 0.00000052 [THz] = 0.00001738 [cm-1] -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) -( -0.288675 0.000000 -0.000001 0.000000 -0.000000 0.000000 ) + freq ( 1) = 0.00000038 [THz] = 0.00001279 [cm-1] +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) +( 0.288675 0.000000 -0.000004 0.000000 0.000017 0.000000 ) + freq ( 2) = 0.00000058 [THz] = 0.00001938 [cm-1] +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000009 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197300 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197299 0.000000 ) +( 0.000008 0.000000 -0.210728 0.000000 -0.197299 0.000000 ) + freq ( 3) = 0.00000083 [THz] = 0.00002771 [cm-1] +( -0.000015 0.000000 -0.197300 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197300 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197300 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197300 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197300 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197300 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197299 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197299 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197299 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197299 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197299 0.000000 0.210728 0.000000 ) +( -0.000015 0.000000 -0.197299 0.000000 0.210728 0.000000 ) freq ( 4) = 1.74178330 [THz] = 58.09962873 [cm-1] -( -0.000000 0.000000 0.300463 0.000000 -0.002787 0.000000 ) -( -0.000000 0.000000 0.166848 0.000000 0.011440 0.000000 ) -( -0.000000 0.000000 0.312940 0.000000 -0.065663 0.000000 ) -( -0.000000 0.000000 0.298008 0.000000 0.002144 0.000000 ) +( 0.000000 0.000000 0.300463 0.000000 -0.002787 0.000000 ) +( 0.000000 0.000000 0.166848 0.000000 0.011440 0.000000 ) +( 0.000000 0.000000 0.312940 0.000000 -0.065663 0.000000 ) +( 0.000000 0.000000 0.298008 0.000000 0.002144 0.000000 ) ( 0.003070 0.000000 0.307078 0.000000 0.032220 0.000000 ) ( -0.003070 0.000000 0.307078 0.000000 0.032220 0.000000 ) -( 0.000000 0.000000 -0.300463 0.000000 -0.002787 0.000000 ) -( 0.000000 0.000000 -0.166848 0.000000 0.011440 0.000000 ) -( 0.000000 0.000000 -0.312940 0.000000 -0.065663 0.000000 ) -( 0.000000 0.000000 -0.298008 0.000000 0.002144 0.000000 ) +( -0.000000 0.000000 -0.300463 0.000000 -0.002787 0.000000 ) +( -0.000000 0.000000 -0.166848 0.000000 0.011440 0.000000 ) +( -0.000000 0.000000 -0.312940 0.000000 -0.065663 0.000000 ) +( -0.000000 0.000000 -0.298008 0.000000 0.002144 0.000000 ) ( -0.003070 0.000000 -0.307078 0.000000 0.032220 0.000000 ) ( 0.003070 0.000000 -0.307078 0.000000 0.032220 0.000000 ) freq ( 5) = 1.75809446 [THz] = 58.64371051 [cm-1] -( 0.305440 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.126386 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.338635 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.290653 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.301191 0.000000 -0.017342 0.000000 -0.069092 0.000000 ) -( 0.301191 0.000000 0.017342 0.000000 0.069092 0.000000 ) -( -0.305440 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.126386 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.338635 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.290653 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.301191 0.000000 0.017342 0.000000 -0.069092 0.000000 ) -( -0.301191 0.000000 -0.017342 0.000000 0.069092 0.000000 ) +( -0.305440 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.126386 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.338635 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.290653 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.301191 0.000000 0.017342 0.000000 0.069092 0.000000 ) +( -0.301191 0.000000 -0.017342 0.000000 -0.069092 0.000000 ) +( 0.305440 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.126386 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.338635 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.290653 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.301191 0.000000 -0.017342 0.000000 0.069092 0.000000 ) +( 0.301191 0.000000 0.017342 0.000000 -0.069092 0.000000 ) freq ( 6) = 4.65916041 [THz] = 155.41284058 [cm-1] -( 0.000000 0.000000 0.025422 0.000000 0.354333 0.000000 ) +( -0.000000 0.000000 0.025422 0.000000 0.354333 0.000000 ) ( -0.000000 0.000000 -0.043691 0.000000 0.347361 0.000000 ) -( 0.000000 0.000000 0.098244 0.000000 0.227269 0.000000 ) +( -0.000000 0.000000 0.098244 0.000000 0.227269 0.000000 ) ( 0.000000 0.000000 -0.034198 0.000000 -0.348248 0.000000 ) ( -0.044152 0.000000 0.042358 0.000000 -0.173202 0.000000 ) ( 0.044152 0.000000 0.042358 0.000000 -0.173202 0.000000 ) -( -0.000000 0.000000 0.025422 0.000000 -0.354333 0.000000 ) -( -0.000000 0.000000 -0.043691 0.000000 -0.347361 0.000000 ) -( -0.000000 0.000000 0.098244 0.000000 -0.227269 0.000000 ) +( 0.000000 0.000000 0.025422 0.000000 -0.354333 0.000000 ) +( 0.000000 0.000000 -0.043691 0.000000 -0.347361 0.000000 ) +( 0.000000 0.000000 0.098244 0.000000 -0.227269 0.000000 ) ( -0.000000 0.000000 -0.034198 0.000000 0.348248 0.000000 ) ( -0.044152 0.000000 0.042358 0.000000 0.173202 0.000000 ) ( 0.044152 0.000000 0.042358 0.000000 0.173202 0.000000 ) freq ( 7) = 6.03591072 [THz] = 201.33628095 [cm-1] -( -0.305036 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.315550 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.136548 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.302481 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.296555 0.000000 -0.062886 0.000000 0.081985 0.000000 ) -( 0.296555 0.000000 0.062886 0.000000 -0.081985 0.000000 ) ( 0.305036 0.000000 0.000000 0.000000 -0.000000 0.000000 ) ( 0.315550 0.000000 0.000000 0.000000 -0.000000 0.000000 ) ( 0.136548 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.302481 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.296555 0.000000 0.062886 0.000000 0.081985 0.000000 ) -( -0.296555 0.000000 -0.062886 0.000000 -0.081985 0.000000 ) +( -0.302481 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.296555 0.000000 0.062886 0.000000 -0.081985 0.000000 ) +( -0.296555 0.000000 -0.062886 0.000000 0.081985 0.000000 ) +( -0.305036 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.315550 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.136548 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.302481 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.296555 0.000000 -0.062886 0.000000 -0.081985 0.000000 ) +( 0.296555 0.000000 0.062886 0.000000 0.081985 0.000000 ) freq ( 8) = 6.15949351 [THz] = 205.45855860 [cm-1] -( -0.000000 0.000000 0.203150 0.000000 0.219537 0.000000 ) -( -0.000000 0.000000 0.278164 0.000000 0.273652 0.000000 ) -( -0.000000 0.000000 0.239679 0.000000 0.256163 0.000000 ) -( 0.000000 0.000000 -0.209804 0.000000 -0.243059 0.000000 ) +( 0.000000 0.000000 0.203150 0.000000 0.219537 0.000000 ) +( 0.000000 0.000000 0.278164 0.000000 0.273652 0.000000 ) +( 0.000000 0.000000 0.239679 0.000000 0.256163 0.000000 ) +( -0.000000 0.000000 -0.209804 0.000000 -0.243059 0.000000 ) ( 0.003505 0.000000 -0.099600 0.000000 -0.078252 0.000000 ) ( -0.003505 0.000000 -0.099600 0.000000 -0.078252 0.000000 ) ( 0.000000 0.000000 -0.203150 0.000000 0.219537 0.000000 ) @@ -711,49 +711,49 @@ Basis vectors ( -0.003505 0.000000 0.099600 0.000000 -0.078252 0.000000 ) ( 0.003505 0.000000 0.099600 0.000000 -0.078252 0.000000 ) freq ( 9) = 6.29096533 [THz] = 209.84398575 [cm-1] -( 0.358540 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.113174 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.133490 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.336051 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.301790 0.000000 0.122269 0.000000 -0.088986 0.000000 ) -( -0.301790 0.000000 -0.122269 0.000000 0.088986 0.000000 ) -( 0.358540 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.113174 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.133490 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.336051 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.301790 0.000000 0.122269 0.000000 0.088986 0.000000 ) -( -0.301790 0.000000 -0.122269 0.000000 -0.088986 0.000000 ) +( -0.358540 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.113174 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.133490 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.336051 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.301790 0.000000 -0.122269 0.000000 0.088986 0.000000 ) +( 0.301790 0.000000 0.122269 0.000000 -0.088986 0.000000 ) +( -0.358540 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.113174 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.133490 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.336051 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.301790 0.000000 -0.122269 0.000000 -0.088986 0.000000 ) +( 0.301790 0.000000 0.122269 0.000000 0.088986 0.000000 ) freq ( 10) = 6.49240646 [THz] = 216.56333753 [cm-1] -( 0.000000 0.000000 0.011726 0.000000 0.284473 0.000000 ) -( 0.000000 0.000000 -0.002760 0.000000 0.290652 0.000000 ) -( 0.000000 0.000000 0.028179 0.000000 0.250498 0.000000 ) -( -0.000000 0.000000 -0.012114 0.000000 0.301639 0.000000 ) -( 0.000750 0.000000 -0.009626 0.000000 0.299657 0.000000 ) -( -0.000750 0.000000 -0.009626 0.000000 0.299657 0.000000 ) -( 0.000000 0.000000 0.011726 0.000000 -0.284473 0.000000 ) -( 0.000000 0.000000 -0.002760 0.000000 -0.290652 0.000000 ) -( 0.000000 0.000000 0.028179 0.000000 -0.250498 0.000000 ) -( -0.000000 0.000000 -0.012114 0.000000 -0.301639 0.000000 ) -( 0.000750 0.000000 -0.009626 0.000000 -0.299657 0.000000 ) -( -0.000750 0.000000 -0.009626 0.000000 -0.299657 0.000000 ) +( -0.000000 0.000000 -0.011726 0.000000 -0.284473 0.000000 ) +( -0.000000 0.000000 0.002760 0.000000 -0.290652 0.000000 ) +( -0.000000 0.000000 -0.028179 0.000000 -0.250498 0.000000 ) +( 0.000000 0.000000 0.012114 0.000000 -0.301639 0.000000 ) +( -0.000750 0.000000 0.009626 0.000000 -0.299657 0.000000 ) +( 0.000750 0.000000 0.009626 0.000000 -0.299657 0.000000 ) +( -0.000000 0.000000 -0.011726 0.000000 0.284473 0.000000 ) +( 0.000000 0.000000 0.002760 0.000000 0.290652 0.000000 ) +( -0.000000 0.000000 -0.028179 0.000000 0.250498 0.000000 ) +( 0.000000 0.000000 0.012114 0.000000 0.301639 0.000000 ) +( -0.000750 0.000000 0.009626 0.000000 0.299657 0.000000 ) +( 0.000750 0.000000 0.009626 0.000000 0.299657 0.000000 ) freq ( 11) = 8.28300944 [THz] = 276.29141531 [cm-1] -( 0.000000 0.000000 -0.338439 0.000000 0.044008 0.000000 ) +( -0.000000 0.000000 -0.338439 0.000000 0.044008 0.000000 ) ( 0.000000 0.000000 -0.194825 0.000000 0.047214 0.000000 ) -( 0.000000 0.000000 -0.343457 0.000000 0.016680 0.000000 ) -( -0.000000 0.000000 0.345335 0.000000 -0.006237 0.000000 ) +( -0.000000 0.000000 -0.343457 0.000000 0.016680 0.000000 ) +( 0.000000 0.000000 0.345335 0.000000 -0.006237 0.000000 ) ( -0.039099 0.000000 0.214419 0.000000 -0.073458 0.000000 ) ( 0.039099 0.000000 0.214419 0.000000 -0.073458 0.000000 ) -( 0.000000 0.000000 -0.338439 0.000000 -0.044008 0.000000 ) +( -0.000000 0.000000 -0.338439 0.000000 -0.044008 0.000000 ) ( -0.000000 0.000000 -0.194825 0.000000 -0.047214 0.000000 ) -( 0.000000 0.000000 -0.343457 0.000000 -0.016680 0.000000 ) +( -0.000000 0.000000 -0.343457 0.000000 -0.016680 0.000000 ) ( 0.000000 0.000000 0.345335 0.000000 0.006237 0.000000 ) ( -0.039099 0.000000 0.214419 0.000000 0.073458 0.000000 ) ( 0.039099 0.000000 0.214419 0.000000 0.073458 0.000000 ) freq ( 12) = 8.43189918 [THz] = 281.25784182 [cm-1] -( 0.000000 0.000000 -0.229760 0.000000 0.213402 0.000000 ) +( -0.000000 0.000000 -0.229760 0.000000 0.213402 0.000000 ) ( -0.000000 0.000000 -0.281970 0.000000 0.221619 0.000000 ) -( -0.000000 0.000000 -0.166741 0.000000 0.115050 0.000000 ) -( -0.000000 0.000000 0.236152 0.000000 -0.212913 0.000000 ) +( 0.000000 0.000000 -0.166741 0.000000 0.115050 0.000000 ) +( 0.000000 0.000000 0.236152 0.000000 -0.212913 0.000000 ) ( -0.055501 0.000000 0.180876 0.000000 -0.172216 0.000000 ) ( 0.055501 0.000000 0.180876 0.000000 -0.172216 0.000000 ) ( -0.000000 0.000000 0.229760 0.000000 0.213402 0.000000 ) @@ -763,189 +763,189 @@ Basis vectors ( 0.055501 0.000000 -0.180876 0.000000 -0.172216 0.000000 ) ( -0.055501 0.000000 -0.180876 0.000000 -0.172216 0.000000 ) freq ( 13) = 15.52715504 [THz] = 517.93006796 [cm-1] -( -0.003319 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.136710 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.394334 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( 0.009417 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.177193 0.000000 -0.356157 0.000000 -0.067900 0.000000 ) -( -0.177193 0.000000 0.356157 0.000000 0.067900 0.000000 ) -( -0.003319 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.136710 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.394334 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.009417 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.177193 0.000000 -0.356157 0.000000 0.067900 0.000000 ) -( -0.177193 0.000000 0.356157 0.000000 -0.067900 0.000000 ) +( 0.003319 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.136710 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.394334 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.009417 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.177193 0.000000 0.356157 0.000000 0.067900 0.000000 ) +( 0.177193 0.000000 -0.356157 0.000000 -0.067900 0.000000 ) +( 0.003319 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.136710 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.394334 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.009417 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.177193 0.000000 0.356157 0.000000 -0.067900 0.000000 ) +( 0.177193 0.000000 -0.356157 0.000000 0.067900 0.000000 ) freq ( 14) = 15.77685603 [THz] = 526.25919529 [cm-1] -( -0.000000 0.000000 0.006657 0.000000 0.008034 0.000000 ) -( -0.000000 0.000000 -0.432968 0.000000 0.015983 0.000000 ) -( 0.000000 0.000000 0.143749 0.000000 -0.426045 0.000000 ) -( -0.000000 0.000000 -0.004900 0.000000 -0.011633 0.000000 ) -( 0.003036 0.000000 0.130661 0.000000 0.194518 0.000000 ) -( -0.003036 0.000000 0.130661 0.000000 0.194518 0.000000 ) -( 0.000000 0.000000 0.006657 0.000000 -0.008034 0.000000 ) -( 0.000000 0.000000 -0.432968 0.000000 -0.015983 0.000000 ) -( -0.000000 0.000000 0.143749 0.000000 0.426045 0.000000 ) -( 0.000000 0.000000 -0.004900 0.000000 0.011633 0.000000 ) -( 0.003036 0.000000 0.130661 0.000000 -0.194518 0.000000 ) -( -0.003036 0.000000 0.130661 0.000000 -0.194518 0.000000 ) +( 0.000000 0.000000 -0.006657 0.000000 -0.008034 0.000000 ) +( 0.000000 0.000000 0.432968 0.000000 -0.015983 0.000000 ) +( -0.000000 0.000000 -0.143749 0.000000 0.426045 0.000000 ) +( 0.000000 0.000000 0.004900 0.000000 0.011633 0.000000 ) +( -0.003036 0.000000 -0.130661 0.000000 -0.194518 0.000000 ) +( 0.003036 0.000000 -0.130661 0.000000 -0.194518 0.000000 ) +( -0.000000 0.000000 -0.006657 0.000000 0.008034 0.000000 ) +( -0.000000 0.000000 0.432968 0.000000 0.015983 0.000000 ) +( 0.000000 0.000000 -0.143749 0.000000 -0.426045 0.000000 ) +( -0.000000 0.000000 0.004900 0.000000 -0.011633 0.000000 ) +( -0.003036 0.000000 -0.130661 0.000000 0.194518 0.000000 ) +( 0.003036 0.000000 -0.130661 0.000000 0.194518 0.000000 ) freq ( 15) = 15.80580280 [THz] = 527.22475550 [cm-1] -( 0.020053 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.114237 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.468968 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.000805 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.127463 0.000000 0.299100 0.000000 0.166134 0.000000 ) -( 0.127463 0.000000 -0.299100 0.000000 -0.166134 0.000000 ) -( -0.020053 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.114237 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.468968 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.000805 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.127463 0.000000 -0.299100 0.000000 0.166134 0.000000 ) -( -0.127463 0.000000 0.299100 0.000000 -0.166134 0.000000 ) +( -0.020053 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.114237 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.468968 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.000805 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.127463 0.000000 -0.299100 0.000000 -0.166134 0.000000 ) +( -0.127463 0.000000 0.299100 0.000000 0.166134 0.000000 ) +( 0.020053 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.114237 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.468968 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.000805 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.127463 0.000000 0.299100 0.000000 -0.166134 0.000000 ) +( 0.127463 0.000000 -0.299100 0.000000 0.166134 0.000000 ) freq ( 16) = 16.34770861 [THz] = 545.30078498 [cm-1] -( -0.007401 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.375543 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.009605 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( 0.005927 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.180873 0.000000 -0.047434 0.000000 0.380036 0.000000 ) -( -0.180873 0.000000 0.047434 0.000000 -0.380036 0.000000 ) -( -0.007401 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( 0.375543 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.009605 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.005927 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.180873 0.000000 -0.047434 0.000000 -0.380036 0.000000 ) -( -0.180873 0.000000 0.047434 0.000000 0.380036 0.000000 ) +( 0.007401 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.375543 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.009605 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.005927 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.180873 0.000000 0.047434 0.000000 -0.380036 0.000000 ) +( 0.180873 0.000000 -0.047434 0.000000 0.380036 0.000000 ) +( 0.007401 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.375543 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.009605 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.005927 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.180873 0.000000 0.047434 0.000000 0.380036 0.000000 ) +( 0.180873 0.000000 -0.047434 0.000000 -0.380036 0.000000 ) freq ( 17) = 17.38212592 [THz] = 579.80522742 [cm-1] -( -0.000000 0.000000 0.006663 0.000000 0.018085 0.000000 ) -( 0.000000 0.000000 -0.408134 0.000000 0.010473 0.000000 ) +( 0.000000 0.000000 0.006663 0.000000 0.018085 0.000000 ) +( -0.000000 0.000000 -0.408134 0.000000 0.010473 0.000000 ) ( 0.000000 0.000000 0.163504 0.000000 -0.439667 0.000000 ) ( -0.000000 0.000000 -0.029278 0.000000 -0.015379 0.000000 ) ( 0.012424 0.000000 0.135857 0.000000 0.193118 0.000000 ) ( -0.012424 0.000000 0.135857 0.000000 0.193118 0.000000 ) -( 0.000000 0.000000 -0.006663 0.000000 0.018085 0.000000 ) +( -0.000000 0.000000 -0.006663 0.000000 0.018085 0.000000 ) ( 0.000000 0.000000 0.408134 0.000000 0.010473 0.000000 ) ( -0.000000 0.000000 -0.163504 0.000000 -0.439667 0.000000 ) ( 0.000000 0.000000 0.029278 0.000000 -0.015379 0.000000 ) ( -0.012424 0.000000 -0.135857 0.000000 0.193118 0.000000 ) ( 0.012424 0.000000 -0.135857 0.000000 0.193118 0.000000 ) freq ( 18) = 18.97560951 [THz] = 632.95811128 [cm-1] -( 0.026207 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.643317 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.123298 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.015257 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.010889 0.000000 0.123336 0.000000 0.140286 0.000000 ) -( 0.010889 0.000000 -0.123336 0.000000 -0.140286 0.000000 ) -( -0.026207 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( 0.643317 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.123298 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.015257 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.010889 0.000000 -0.123336 0.000000 0.140286 0.000000 ) -( -0.010889 0.000000 0.123336 0.000000 -0.140286 0.000000 ) +( -0.026207 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.643317 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.123298 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.015257 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.010889 0.000000 -0.123336 0.000000 -0.140286 0.000000 ) +( -0.010889 0.000000 0.123336 0.000000 0.140286 0.000000 ) +( 0.026207 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.643317 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.123298 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.015257 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.010889 0.000000 0.123336 0.000000 -0.140286 0.000000 ) +( 0.010889 0.000000 -0.123336 0.000000 0.140286 0.000000 ) freq ( 19) = 21.12523228 [THz] = 704.66179829 [cm-1] -( -0.013094 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.085920 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.044091 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.028235 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.234005 0.000000 0.179515 0.000000 -0.397327 0.000000 ) -( 0.234005 0.000000 -0.179515 0.000000 0.397327 0.000000 ) -( 0.013094 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.085920 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.044091 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.028235 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.234005 0.000000 -0.179515 0.000000 -0.397327 0.000000 ) -( -0.234005 0.000000 0.179515 0.000000 0.397327 0.000000 ) +( 0.013094 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.085920 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.044091 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.028235 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.234005 0.000000 -0.179515 0.000000 0.397327 0.000000 ) +( -0.234005 0.000000 0.179515 0.000000 -0.397327 0.000000 ) +( -0.013094 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.085920 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.044091 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.028235 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.234005 0.000000 0.179515 0.000000 0.397327 0.000000 ) +( 0.234005 0.000000 -0.179515 0.000000 -0.397327 0.000000 ) freq ( 20) = 21.48012875 [THz] = 716.49986854 [cm-1] -( -0.000000 0.000000 0.023138 0.000000 0.023077 0.000000 ) -( -0.000000 0.000000 -0.258260 0.000000 0.021831 0.000000 ) -( 0.000000 0.000000 0.110150 0.000000 -0.197757 0.000000 ) -( -0.000000 0.000000 0.012521 0.000000 0.033285 0.000000 ) -( -0.004254 0.000000 -0.246024 0.000000 -0.359277 0.000000 ) -( 0.004254 0.000000 -0.246024 0.000000 -0.359277 0.000000 ) -( 0.000000 0.000000 -0.023138 0.000000 0.023077 0.000000 ) -( 0.000000 0.000000 0.258260 0.000000 0.021831 0.000000 ) -( -0.000000 0.000000 -0.110150 0.000000 -0.197757 0.000000 ) -( 0.000000 0.000000 -0.012521 0.000000 0.033285 0.000000 ) -( 0.004254 0.000000 0.246024 0.000000 -0.359277 0.000000 ) -( -0.004254 0.000000 0.246024 0.000000 -0.359277 0.000000 ) +( 0.000000 0.000000 -0.023138 0.000000 -0.023077 0.000000 ) +( 0.000000 0.000000 0.258260 0.000000 -0.021831 0.000000 ) +( 0.000000 0.000000 -0.110150 0.000000 0.197757 0.000000 ) +( 0.000000 0.000000 -0.012521 0.000000 -0.033285 0.000000 ) +( 0.004254 0.000000 0.246024 0.000000 0.359277 0.000000 ) +( -0.004254 0.000000 0.246024 0.000000 0.359277 0.000000 ) +( -0.000000 0.000000 0.023138 0.000000 -0.023077 0.000000 ) +( -0.000000 0.000000 -0.258260 0.000000 -0.021831 0.000000 ) +( 0.000000 0.000000 0.110150 0.000000 0.197757 0.000000 ) +( -0.000000 0.000000 0.012521 0.000000 -0.033285 0.000000 ) +( -0.004254 0.000000 -0.246024 0.000000 0.359277 0.000000 ) +( 0.004254 0.000000 -0.246024 0.000000 0.359277 0.000000 ) freq ( 21) = 23.22408051 [THz] = 774.67182954 [cm-1] -( 0.005428 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.451089 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.300552 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.000234 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.034054 0.000000 0.186115 0.000000 0.259385 0.000000 ) -( 0.034054 0.000000 -0.186115 0.000000 -0.259385 0.000000 ) -( 0.005428 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.451089 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.300552 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.000234 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( 0.034054 0.000000 0.186115 0.000000 -0.259385 0.000000 ) -( 0.034054 0.000000 -0.186115 0.000000 0.259385 0.000000 ) +( -0.005428 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.451089 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.300552 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.000234 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.034054 0.000000 -0.186115 0.000000 -0.259385 0.000000 ) +( -0.034054 0.000000 0.186115 0.000000 0.259385 0.000000 ) +( -0.005428 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.451089 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.300552 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.000234 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.034054 0.000000 -0.186115 0.000000 0.259385 0.000000 ) +( -0.034054 0.000000 0.186115 0.000000 -0.259385 0.000000 ) freq ( 22) = 23.36210667 [THz] = 779.27588592 [cm-1] -( 0.000000 0.000000 0.018519 0.000000 0.017965 0.000000 ) -( -0.000000 0.000000 -0.267387 0.000000 0.025126 0.000000 ) -( 0.000000 0.000000 0.103166 0.000000 -0.181808 0.000000 ) -( -0.000000 0.000000 0.024217 0.000000 0.033709 0.000000 ) +( -0.000000 0.000000 0.018519 0.000000 0.017965 0.000000 ) +( 0.000000 0.000000 -0.267387 0.000000 0.025126 0.000000 ) +( -0.000000 0.000000 0.103166 0.000000 -0.181808 0.000000 ) +( 0.000000 0.000000 0.024217 0.000000 0.033709 0.000000 ) ( -0.013518 0.000000 -0.257005 0.000000 -0.353071 0.000000 ) ( 0.013518 0.000000 -0.257005 0.000000 -0.353071 0.000000 ) -( 0.000000 0.000000 0.018519 0.000000 -0.017965 0.000000 ) -( -0.000000 0.000000 -0.267387 0.000000 -0.025126 0.000000 ) -( 0.000000 0.000000 0.103166 0.000000 0.181808 0.000000 ) -( 0.000000 0.000000 0.024217 0.000000 -0.033709 0.000000 ) +( -0.000000 0.000000 0.018519 0.000000 -0.017965 0.000000 ) +( 0.000000 0.000000 -0.267387 0.000000 -0.025126 0.000000 ) +( -0.000000 0.000000 0.103166 0.000000 0.181808 0.000000 ) +( -0.000000 0.000000 0.024217 0.000000 -0.033709 0.000000 ) ( -0.013518 0.000000 -0.257005 0.000000 0.353071 0.000000 ) ( 0.013518 0.000000 -0.257005 0.000000 0.353071 0.000000 ) freq ( 23) = 23.82111353 [THz] = 794.58670445 [cm-1] -( -0.033391 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.247417 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.503562 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.010494 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.066182 0.000000 0.245304 0.000000 0.165645 0.000000 ) -( 0.066182 0.000000 -0.245304 0.000000 -0.165645 0.000000 ) -( 0.033391 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.247417 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.503562 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.010494 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.066182 0.000000 -0.245304 0.000000 0.165645 0.000000 ) -( -0.066182 0.000000 0.245304 0.000000 -0.165645 0.000000 ) +( 0.033391 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.247417 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( -0.503562 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.010494 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.066182 0.000000 -0.245304 0.000000 -0.165645 0.000000 ) +( -0.066182 0.000000 0.245304 0.000000 0.165645 0.000000 ) +( -0.033391 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.247417 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.503562 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.010494 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.066182 0.000000 0.245304 0.000000 -0.165645 0.000000 ) +( 0.066182 0.000000 -0.245304 0.000000 0.165645 0.000000 ) freq ( 24) = 24.61305360 [THz] = 821.00297787 [cm-1] -( 0.042660 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.359994 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.505918 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.025499 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.107892 0.000000 -0.176896 0.000000 0.114270 0.000000 ) -( -0.107892 0.000000 0.176896 0.000000 -0.114270 0.000000 ) -( 0.042660 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.359994 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.505918 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.025499 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.107892 0.000000 -0.176896 0.000000 -0.114270 0.000000 ) -( -0.107892 0.000000 0.176896 0.000000 0.114270 0.000000 ) +( -0.042660 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.359994 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.505918 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.025499 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( 0.107892 0.000000 0.176896 0.000000 -0.114270 0.000000 ) +( 0.107892 0.000000 -0.176896 0.000000 0.114270 0.000000 ) +( -0.042660 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.359994 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.505918 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.025499 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.107892 0.000000 0.176896 0.000000 0.114270 0.000000 ) +( 0.107892 0.000000 -0.176896 0.000000 -0.114270 0.000000 ) freq ( 25) = 32.09428546 [THz] = 1070.54997601 [cm-1] -( 0.000000 0.000000 -0.035654 0.000000 0.024948 0.000000 ) -( -0.000000 0.000000 0.496236 0.000000 0.024837 0.000000 ) -( 0.000000 0.000000 0.120098 0.000000 -0.436907 0.000000 ) -( 0.000000 0.000000 -0.003481 0.000000 0.011802 0.000000 ) -( 0.103578 0.000000 0.069539 0.000000 -0.085583 0.000000 ) -( -0.103578 0.000000 0.069539 0.000000 -0.085583 0.000000 ) -( 0.000000 0.000000 0.035654 0.000000 0.024948 0.000000 ) -( -0.000000 0.000000 -0.496236 0.000000 0.024837 0.000000 ) -( -0.000000 0.000000 -0.120098 0.000000 -0.436907 0.000000 ) -( 0.000000 0.000000 0.003481 0.000000 0.011802 0.000000 ) -( -0.103578 0.000000 -0.069539 0.000000 -0.085583 0.000000 ) -( 0.103578 0.000000 -0.069539 0.000000 -0.085583 0.000000 ) +( -0.000000 0.000000 0.035654 0.000000 -0.024948 0.000000 ) +( 0.000000 0.000000 -0.496236 0.000000 -0.024837 0.000000 ) +( 0.000000 0.000000 -0.120098 0.000000 0.436907 0.000000 ) +( -0.000000 0.000000 0.003481 0.000000 -0.011802 0.000000 ) +( -0.103578 0.000000 -0.069539 0.000000 0.085583 0.000000 ) +( 0.103578 0.000000 -0.069539 0.000000 0.085583 0.000000 ) +( 0.000000 0.000000 -0.035654 0.000000 -0.024948 0.000000 ) +( 0.000000 0.000000 0.496236 0.000000 -0.024837 0.000000 ) +( -0.000000 0.000000 0.120098 0.000000 0.436907 0.000000 ) +( 0.000000 0.000000 -0.003481 0.000000 -0.011802 0.000000 ) +( 0.103578 0.000000 0.069539 0.000000 0.085583 0.000000 ) +( -0.103578 0.000000 0.069539 0.000000 0.085583 0.000000 ) freq ( 26) = 32.55854203 [THz] = 1086.03590588 [cm-1] -( 0.000000 0.000000 0.018983 0.000000 -0.012227 0.000000 ) -( -0.000000 0.000000 -0.363991 0.000000 -0.035919 0.000000 ) -( -0.000000 0.000000 -0.103721 0.000000 0.347526 0.000000 ) -( -0.000000 0.000000 -0.019621 0.000000 0.013682 0.000000 ) -( 0.195361 0.000000 0.238916 0.000000 -0.146819 0.000000 ) -( -0.195361 0.000000 0.238916 0.000000 -0.146819 0.000000 ) -( -0.000000 0.000000 0.018983 0.000000 0.012227 0.000000 ) -( 0.000000 0.000000 -0.363991 0.000000 0.035919 0.000000 ) -( 0.000000 0.000000 -0.103721 0.000000 -0.347526 0.000000 ) -( -0.000000 0.000000 -0.019621 0.000000 -0.013682 0.000000 ) -( 0.195361 0.000000 0.238916 0.000000 0.146819 0.000000 ) -( -0.195361 0.000000 0.238916 0.000000 0.146819 0.000000 ) +( -0.000000 0.000000 -0.018983 0.000000 0.012227 0.000000 ) +( 0.000000 0.000000 0.363991 0.000000 0.035919 0.000000 ) +( -0.000000 0.000000 0.103721 0.000000 -0.347526 0.000000 ) +( 0.000000 0.000000 0.019621 0.000000 -0.013682 0.000000 ) +( -0.195361 0.000000 -0.238916 0.000000 0.146819 0.000000 ) +( 0.195361 0.000000 -0.238916 0.000000 0.146819 0.000000 ) +( -0.000000 0.000000 -0.018983 0.000000 -0.012227 0.000000 ) +( 0.000000 0.000000 0.363991 0.000000 -0.035919 0.000000 ) +( 0.000000 0.000000 0.103721 0.000000 0.347526 0.000000 ) +( -0.000000 0.000000 0.019621 0.000000 0.013682 0.000000 ) +( -0.195361 0.000000 -0.238916 0.000000 -0.146819 0.000000 ) +( 0.195361 0.000000 -0.238916 0.000000 -0.146819 0.000000 ) freq ( 27) = 34.33677276 [THz] = 1145.35128984 [cm-1] -( 0.000000 0.000000 0.023259 0.000000 -0.023011 0.000000 ) +( -0.000000 0.000000 0.023259 0.000000 -0.023011 0.000000 ) ( 0.000000 0.000000 -0.324249 0.000000 -0.005773 0.000000 ) ( -0.000000 0.000000 -0.058810 0.000000 0.349293 0.000000 ) ( 0.000000 0.000000 0.025988 0.000000 -0.019028 0.000000 ) @@ -958,120 +958,120 @@ Basis vectors ( -0.248952 0.000000 -0.199255 0.000000 -0.178743 0.000000 ) ( 0.248952 0.000000 -0.199255 0.000000 -0.178743 0.000000 ) freq ( 28) = 34.43427982 [THz] = 1148.60377497 [cm-1] -( 0.000000 0.000000 -0.002777 0.000000 0.003396 0.000000 ) +( -0.000000 0.000000 -0.002777 0.000000 0.003396 0.000000 ) ( 0.000000 0.000000 0.136805 0.000000 0.007772 0.000000 ) ( -0.000000 0.000000 0.017157 0.000000 -0.165743 0.000000 ) ( -0.000000 0.000000 0.031764 0.000000 -0.019397 0.000000 ) ( -0.301891 0.000000 -0.304091 0.000000 0.205956 0.000000 ) ( 0.301891 0.000000 -0.304091 0.000000 0.205956 0.000000 ) -( 0.000000 0.000000 0.002777 0.000000 0.003396 0.000000 ) +( -0.000000 0.000000 0.002777 0.000000 0.003396 0.000000 ) ( -0.000000 0.000000 -0.136805 0.000000 0.007772 0.000000 ) -( -0.000000 0.000000 -0.017157 0.000000 -0.165743 0.000000 ) -( 0.000000 0.000000 -0.031764 0.000000 -0.019397 0.000000 ) +( 0.000000 0.000000 -0.017157 0.000000 -0.165743 0.000000 ) +( -0.000000 0.000000 -0.031764 0.000000 -0.019397 0.000000 ) ( 0.301891 0.000000 0.304091 0.000000 0.205956 0.000000 ) ( -0.301891 0.000000 0.304091 0.000000 0.205956 0.000000 ) freq ( 29) = 58.49309377 [THz] = 1951.11931058 [cm-1] -( 0.000000 0.000000 -0.000385 0.000000 -0.044914 0.000000 ) -( 0.000000 0.000000 -0.004574 0.000000 0.685508 0.000000 ) -( 0.000000 0.000000 -0.037283 0.000000 -0.020274 0.000000 ) -( -0.000000 0.000000 -0.006725 0.000000 0.007763 0.000000 ) -( -0.088782 0.000000 0.061276 0.000000 -0.037816 0.000000 ) -( 0.088782 0.000000 0.061276 0.000000 -0.037816 0.000000 ) -( 0.000000 0.000000 0.000385 0.000000 -0.044914 0.000000 ) -( 0.000000 0.000000 0.004574 0.000000 0.685508 0.000000 ) -( -0.000000 0.000000 0.037283 0.000000 -0.020274 0.000000 ) -( -0.000000 0.000000 0.006725 0.000000 0.007763 0.000000 ) -( 0.088782 0.000000 -0.061276 0.000000 -0.037816 0.000000 ) -( -0.088782 0.000000 -0.061276 0.000000 -0.037816 0.000000 ) +( -0.000000 0.000000 0.000385 0.000000 0.044914 0.000000 ) +( -0.000000 0.000000 0.004574 0.000000 -0.685508 0.000000 ) +( 0.000000 0.000000 0.037283 0.000000 0.020274 0.000000 ) +( 0.000000 0.000000 0.006725 0.000000 -0.007763 0.000000 ) +( 0.088782 0.000000 -0.061276 0.000000 0.037816 0.000000 ) +( -0.088782 0.000000 -0.061276 0.000000 0.037816 0.000000 ) +( -0.000000 0.000000 -0.000385 0.000000 0.044914 0.000000 ) +( -0.000000 0.000000 -0.004574 0.000000 -0.685508 0.000000 ) +( -0.000000 0.000000 -0.037283 0.000000 0.020274 0.000000 ) +( 0.000000 0.000000 -0.006725 0.000000 -0.007763 0.000000 ) +( -0.088782 0.000000 0.061276 0.000000 0.037816 0.000000 ) +( 0.088782 0.000000 0.061276 0.000000 0.037816 0.000000 ) freq ( 30) = 58.64595875 [THz] = 1956.21833687 [cm-1] -( -0.000000 0.000000 0.038621 0.000000 0.009281 0.000000 ) -( -0.000000 0.000000 -0.029768 0.000000 0.049879 0.000000 ) -( -0.000000 0.000000 -0.559468 0.000000 -0.148460 0.000000 ) -( 0.000000 0.000000 0.018040 0.000000 -0.013870 0.000000 ) -( 0.216880 0.000000 -0.154994 0.000000 0.093183 0.000000 ) -( -0.216880 0.000000 -0.154994 0.000000 0.093183 0.000000 ) -( -0.000000 0.000000 0.038621 0.000000 -0.009281 0.000000 ) -( -0.000000 0.000000 -0.029768 0.000000 -0.049879 0.000000 ) -( -0.000000 0.000000 -0.559468 0.000000 0.148460 0.000000 ) -( 0.000000 0.000000 0.018040 0.000000 0.013870 0.000000 ) -( 0.216880 0.000000 -0.154994 0.000000 -0.093183 0.000000 ) -( -0.216880 0.000000 -0.154994 0.000000 -0.093183 0.000000 ) +( 0.000000 0.000000 -0.038621 0.000000 -0.009281 0.000000 ) +( 0.000000 0.000000 0.029768 0.000000 -0.049879 0.000000 ) +( 0.000000 0.000000 0.559468 0.000000 0.148460 0.000000 ) +( -0.000000 0.000000 -0.018040 0.000000 0.013870 0.000000 ) +( -0.216880 0.000000 0.154994 0.000000 -0.093183 0.000000 ) +( 0.216880 0.000000 0.154994 0.000000 -0.093183 0.000000 ) +( 0.000000 0.000000 -0.038621 0.000000 0.009281 0.000000 ) +( 0.000000 0.000000 0.029768 0.000000 0.049879 0.000000 ) +( 0.000000 0.000000 0.559468 0.000000 -0.148460 0.000000 ) +( -0.000000 0.000000 -0.018040 0.000000 -0.013870 0.000000 ) +( -0.216880 0.000000 0.154994 0.000000 0.093183 0.000000 ) +( 0.216880 0.000000 0.154994 0.000000 0.093183 0.000000 ) freq ( 31) = 59.18441210 [THz] = 1974.17920491 [cm-1] -( 0.003846 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.035138 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.003416 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( -0.057236 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.404376 0.000000 -0.247281 0.000000 0.151866 0.000000 ) -( 0.404376 0.000000 0.247281 0.000000 -0.151866 0.000000 ) -( 0.003846 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( 0.035138 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.003416 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.057236 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.404376 0.000000 -0.247281 0.000000 -0.151866 0.000000 ) -( 0.404376 0.000000 0.247281 0.000000 0.151866 0.000000 ) +( -0.003846 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.035138 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.003416 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( 0.057236 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.404376 0.000000 0.247281 0.000000 -0.151866 0.000000 ) +( -0.404376 0.000000 -0.247281 0.000000 0.151866 0.000000 ) +( -0.003846 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.035138 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.003416 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.057236 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.404376 0.000000 0.247281 0.000000 0.151866 0.000000 ) +( -0.404376 0.000000 -0.247281 0.000000 -0.151866 0.000000 ) freq ( 32) = 59.64579843 [THz] = 1989.56939401 [cm-1] +( 0.004387 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.012328 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.015191 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) +( -0.055912 0.000000 0.000000 0.000000 -0.000000 0.000000 ) +( 0.402838 0.000000 -0.249120 0.000000 0.154587 0.000000 ) +( 0.402838 0.000000 0.249120 0.000000 -0.154587 0.000000 ) ( -0.004387 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.012328 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( -0.015191 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.055912 0.000000 -0.000000 0.000000 0.000000 0.000000 ) -( -0.402838 0.000000 0.249120 0.000000 -0.154587 0.000000 ) -( -0.402838 0.000000 -0.249120 0.000000 0.154587 0.000000 ) -( 0.004387 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.012328 0.000000 0.000000 0.000000 0.000000 0.000000 ) -( 0.015191 0.000000 0.000000 0.000000 -0.000000 0.000000 ) -( -0.055912 0.000000 -0.000000 0.000000 -0.000000 0.000000 ) -( 0.402838 0.000000 -0.249120 0.000000 -0.154587 0.000000 ) -( 0.402838 0.000000 0.249120 0.000000 0.154587 0.000000 ) +( -0.012328 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( -0.015191 0.000000 -0.000000 0.000000 0.000000 0.000000 ) +( 0.055912 0.000000 0.000000 0.000000 0.000000 0.000000 ) +( -0.402838 0.000000 0.249120 0.000000 0.154587 0.000000 ) +( -0.402838 0.000000 -0.249120 0.000000 -0.154587 0.000000 ) freq ( 33) = 61.28050278 [THz] = 2044.09725399 [cm-1] -( 0.000000 0.000000 0.043022 0.000000 0.019555 0.000000 ) -( 0.000000 0.000000 -0.011017 0.000000 -0.020659 0.000000 ) -( 0.000000 0.000000 -0.669201 0.000000 -0.219427 0.000000 ) -( -0.000000 0.000000 -0.002372 0.000000 -0.002514 0.000000 ) -( 0.017848 0.000000 0.008103 0.000000 -0.015175 0.000000 ) -( -0.017848 0.000000 0.008103 0.000000 -0.015175 0.000000 ) -( -0.000000 0.000000 -0.043022 0.000000 0.019555 0.000000 ) -( -0.000000 0.000000 0.011017 0.000000 -0.020659 0.000000 ) -( -0.000000 0.000000 0.669201 0.000000 -0.219427 0.000000 ) -( 0.000000 0.000000 0.002372 0.000000 -0.002514 0.000000 ) -( -0.017848 0.000000 -0.008103 0.000000 -0.015175 0.000000 ) -( 0.017848 0.000000 -0.008103 0.000000 -0.015175 0.000000 ) +( -0.000000 0.000000 -0.043022 0.000000 -0.019555 0.000000 ) +( -0.000000 0.000000 0.011017 0.000000 0.020659 0.000000 ) +( -0.000000 0.000000 0.669201 0.000000 0.219427 0.000000 ) +( 0.000000 0.000000 0.002372 0.000000 0.002514 0.000000 ) +( -0.017848 0.000000 -0.008103 0.000000 0.015175 0.000000 ) +( 0.017848 0.000000 -0.008103 0.000000 0.015175 0.000000 ) +( 0.000000 0.000000 0.043022 0.000000 -0.019555 0.000000 ) +( 0.000000 0.000000 -0.011017 0.000000 0.020659 0.000000 ) +( 0.000000 0.000000 -0.669201 0.000000 0.219427 0.000000 ) +( -0.000000 0.000000 -0.002372 0.000000 0.002514 0.000000 ) +( 0.017848 0.000000 0.008103 0.000000 0.015175 0.000000 ) +( -0.017848 0.000000 0.008103 0.000000 0.015175 0.000000 ) freq ( 34) = 63.16500883 [THz] = 2106.95760040 [cm-1] -( 0.000000 0.000000 -0.001416 0.000000 -0.045005 0.000000 ) +( -0.000000 0.000000 -0.001416 0.000000 -0.045005 0.000000 ) ( 0.000000 0.000000 0.005022 0.000000 0.703766 0.000000 ) -( 0.000000 0.000000 0.015560 0.000000 0.013643 0.000000 ) -( -0.000000 0.000000 -0.003291 0.000000 0.001095 0.000000 ) +( -0.000000 0.000000 0.015560 0.000000 0.013643 0.000000 ) +( 0.000000 0.000000 -0.003291 0.000000 0.001095 0.000000 ) ( -0.009116 0.000000 0.027061 0.000000 -0.017171 0.000000 ) ( 0.009116 0.000000 0.027061 0.000000 -0.017171 0.000000 ) -( -0.000000 0.000000 -0.001416 0.000000 0.045005 0.000000 ) -( -0.000000 0.000000 0.005022 0.000000 -0.703766 0.000000 ) -( -0.000000 0.000000 0.015560 0.000000 -0.013643 0.000000 ) -( 0.000000 0.000000 -0.003291 0.000000 -0.001095 0.000000 ) +( 0.000000 0.000000 -0.001416 0.000000 0.045005 0.000000 ) +( 0.000000 0.000000 0.005022 0.000000 -0.703766 0.000000 ) +( 0.000000 0.000000 0.015560 0.000000 -0.013643 0.000000 ) +( -0.000000 0.000000 -0.003291 0.000000 -0.001095 0.000000 ) ( -0.009116 0.000000 0.027061 0.000000 0.017171 0.000000 ) ( 0.009116 0.000000 0.027061 0.000000 0.017171 0.000000 ) freq ( 35) = 63.58360137 [THz] = 2120.92034271 [cm-1] -( -0.000000 0.000000 0.000415 0.000000 0.010914 0.000000 ) -( 0.000000 0.000000 0.020599 0.000000 -0.158729 0.000000 ) -( -0.000000 0.000000 0.004820 0.000000 -0.005043 0.000000 ) -( 0.000000 0.000000 -0.030334 0.000000 0.019763 0.000000 ) -( -0.387563 0.000000 0.245256 0.000000 -0.161541 0.000000 ) -( 0.387563 0.000000 0.245256 0.000000 -0.161541 0.000000 ) -( 0.000000 0.000000 -0.000415 0.000000 0.010914 0.000000 ) -( 0.000000 0.000000 -0.020599 0.000000 -0.158729 0.000000 ) -( 0.000000 0.000000 -0.004820 0.000000 -0.005043 0.000000 ) -( -0.000000 0.000000 0.030334 0.000000 0.019763 0.000000 ) -( 0.387563 0.000000 -0.245256 0.000000 -0.161541 0.000000 ) -( -0.387563 0.000000 -0.245256 0.000000 -0.161541 0.000000 ) +( 0.000000 0.000000 -0.000415 0.000000 -0.010914 0.000000 ) +( -0.000000 0.000000 -0.020599 0.000000 0.158729 0.000000 ) +( 0.000000 0.000000 -0.004820 0.000000 0.005043 0.000000 ) +( -0.000000 0.000000 0.030334 0.000000 -0.019763 0.000000 ) +( 0.387563 0.000000 -0.245256 0.000000 0.161541 0.000000 ) +( -0.387563 0.000000 -0.245256 0.000000 0.161541 0.000000 ) +( -0.000000 0.000000 0.000415 0.000000 -0.010914 0.000000 ) +( -0.000000 0.000000 0.020599 0.000000 0.158729 0.000000 ) +( -0.000000 0.000000 0.004820 0.000000 0.005043 0.000000 ) +( 0.000000 0.000000 -0.030334 0.000000 -0.019763 0.000000 ) +( -0.387563 0.000000 0.245256 0.000000 0.161541 0.000000 ) +( 0.387563 0.000000 0.245256 0.000000 0.161541 0.000000 ) freq ( 36) = 65.67178765 [THz] = 2190.57472950 [cm-1] -( 0.000000 0.000000 0.022668 0.000000 0.009602 0.000000 ) -( 0.000000 0.000000 0.012953 0.000000 -0.011116 0.000000 ) +( -0.000000 0.000000 0.022668 0.000000 0.009602 0.000000 ) +( -0.000000 0.000000 0.012953 0.000000 -0.011116 0.000000 ) ( 0.000000 0.000000 -0.369990 0.000000 -0.144128 0.000000 ) -( -0.000000 0.000000 -0.024431 0.000000 0.017416 0.000000 ) +( 0.000000 0.000000 -0.024431 0.000000 0.017416 0.000000 ) ( -0.338616 0.000000 0.192504 0.000000 -0.136199 0.000000 ) ( 0.338616 0.000000 0.192504 0.000000 -0.136199 0.000000 ) ( 0.000000 0.000000 0.022668 0.000000 -0.009602 0.000000 ) -( 0.000000 0.000000 0.012953 0.000000 0.011116 0.000000 ) +( -0.000000 0.000000 0.012953 0.000000 0.011116 0.000000 ) ( 0.000000 0.000000 -0.369990 0.000000 0.144128 0.000000 ) -( -0.000000 0.000000 -0.024431 0.000000 -0.017416 0.000000 ) +( 0.000000 0.000000 -0.024431 0.000000 -0.017416 0.000000 ) ( -0.338616 0.000000 0.192504 0.000000 0.136199 0.000000 ) ( 0.338616 0.000000 0.192504 0.000000 0.136199 0.000000 ) *************************************************************************** diff --git a/tests/TestSupercellDiagonalizeQ/test_diagonalize_supercell_q.py b/tests/TestSupercellDiagonalizeQ/test_diagonalize_supercell_q.py new file mode 100644 index 00000000..3a429d72 --- /dev/null +++ b/tests/TestSupercellDiagonalizeQ/test_diagonalize_supercell_q.py @@ -0,0 +1,49 @@ +import sys, os +import numpy as np +import cellconstructor as CC, cellconstructor.Phonons +import ase, ase.calculators, ase.calculators.emt + +def test_diagonalize_supercell_q(verbose = False): + # Fix the seed to assure reproducibility + np.random.seed(0) + + # Set the current working directory + total_path = os.path.dirname(os.path.abspath(__file__)) + os.chdir(total_path) + + supercell = (4, 4, 4) + # Load gold but build a crazy dynamical matrix just to test a low symmetry group + # R3m (without inversion) + struct = CC.Structure.Structure(2) + a_param = 4 + struct.unit_cell = np.eye(3) * a_param + struct.atoms[0] = "Au" + struct.atoms[1] = "Ag" + struct.coords[1, :] = np.ones(3) * a_param / 2 + 0.2 + struct.build_masses() + + calculator = ase.calculators.emt.EMT() + + # Get a dynamical matrix + dynmat = CC.Phonons.compute_phonons_finite_displacements( + struct, + calculator, + supercell = supercell) + + dynmat.AdjustQStar() + dynmat.Symmetrize() + dynmat.ForcePositiveDefinite() + + # Now test the polarization and frequency diagonalization + w, pols, wq, pq = dynmat.DiagonalizeSupercell(return_qmodes = True) + + nq = len(dynmat.q_tot) + for i in range(nq): + w_test, p_test = dynmat.DyagDinQ(i) + + assert np.allclose(wq[:, i], w_test) + assert np.allclose(pq[:, :, i], p_test) + + +if __name__ == "__main__": + test_diagonalize_supercell_q(verbose = True) \ No newline at end of file diff --git a/tests/TestSymmetriesSupercell/test_symmetries_supercell.py b/tests/TestSymmetriesSupercell/test_symmetries_supercell.py index 5bcc2671..7844a783 100644 --- a/tests/TestSymmetriesSupercell/test_symmetries_supercell.py +++ b/tests/TestSymmetriesSupercell/test_symmetries_supercell.py @@ -37,7 +37,7 @@ def test_symmetries_supercell(FILDYN, NQIRR): after_sym = fc_dynmat_start.copy() - qe_sym.SymmetrizeFCQ(after_sym, np.array(dynmat.q_stars), verbose = True) + qe_sym.SymmetrizeFCQ(after_sym, dynmat.q_stars, verbose = True) for i,q in enumerate(dynmat.q_tot): dynmat.dynmats[i] = after_sym[i,:,:] diff --git a/tests/TestTC/Phonon_harmonic_properties b/tests/TestTC/Phonon_harmonic_properties new file mode 100644 index 00000000..20a9d83c --- /dev/null +++ b/tests/TestTC/Phonon_harmonic_properties @@ -0,0 +1,3001 @@ +# Frequencies (THz) Group velocity x (m/s) Group velocity y (m/s) Group velocity z (m/s) Smearing par (THz) + 0.000000000000e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 1.845525421268e-08 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.262913027725e-08 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 1.392251140991e+00 -1.826703349744e+03+0.000000000000e+00j 1.826703349744e+03+0.000000000000e+00j 1.826703349744e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140997e+00 -1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227945e+00 -4.091794716320e+03+0.000000000000e+00j 4.091794716320e+03+0.000000000000e+00j 4.091794716320e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340515e+00 -1.595448846499e+03+0.000000000000e+00j 1.595448846499e+03+0.000000000000e+00j 1.595448846499e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 -1.595448846495e+03+0.000000000000e+00j 1.595448846495e+03+0.000000000000e+00j 1.595448846495e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234885e+00 -3.544786741862e+03+0.000000000000e+00j 3.544786741862e+03+0.000000000000e+00j 3.544786741862e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175694e+00 -1.195877589778e+03+0.000000000000e+00j 1.195877589778e+03+0.000000000000e+00j 1.195877589778e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175695e+00 -1.195877589768e+03+0.000000000000e+00j 1.195877589768e+03+0.000000000000e+00j 1.195877589768e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501171e+00 -2.632351875672e+03+0.000000000000e+00j 2.632351875672e+03+0.000000000000e+00j 2.632351875672e+03+0.000000000000e+00j 1.000000000000e-01 + 4.408824939127e+00 -6.440774382714e+02+0.000000000000e+00j 6.440774382714e+02+0.000000000000e+00j 6.440774382714e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939133e+00 -6.440774382617e+02+0.000000000000e+00j 6.440774382617e+02+0.000000000000e+00j 6.440774382617e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103762e+00 -1.407846987107e+03+0.000000000000e+00j 1.407846987107e+03+0.000000000000e+00j 1.407846987107e+03+0.000000000000e+00j 1.000000000000e-01 + 4.650851100236e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.650851100245e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 1.033872196188e+01 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.408824939127e+00 6.440774382626e+02+0.000000000000e+00j -6.440774382626e+02+0.000000000000e+00j -6.440774382626e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939133e+00 6.440774382705e+02+0.000000000000e+00j -6.440774382705e+02+0.000000000000e+00j -6.440774382705e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103762e+00 1.407846987107e+03+0.000000000000e+00j -1.407846987107e+03+0.000000000000e+00j -1.407846987107e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175694e+00 1.195877589769e+03+0.000000000000e+00j -1.195877589769e+03+0.000000000000e+00j -1.195877589769e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175695e+00 1.195877589778e+03+0.000000000000e+00j -1.195877589778e+03+0.000000000000e+00j -1.195877589778e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501171e+00 2.632351875672e+03+0.000000000000e+00j -2.632351875672e+03+0.000000000000e+00j -2.632351875672e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340515e+00 1.595448846499e+03+0.000000000000e+00j -1.595448846499e+03+0.000000000000e+00j -1.595448846499e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 1.595448846495e+03+0.000000000000e+00j -1.595448846495e+03+0.000000000000e+00j -1.595448846495e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234885e+00 3.544786741862e+03+0.000000000000e+00j -3.544786741862e+03+0.000000000000e+00j -3.544786741862e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140991e+00 1.826703349756e+03+0.000000000000e+00j -1.826703349756e+03+0.000000000000e+00j -1.826703349756e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140997e+00 1.826703349736e+03+0.000000000000e+00j -1.826703349736e+03+0.000000000000e+00j -1.826703349736e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227945e+00 4.091794716320e+03+0.000000000000e+00j -4.091794716320e+03+0.000000000000e+00j -4.091794716320e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140991e+00 1.826703349744e+03+0.000000000000e+00j -1.826703349744e+03+0.000000000000e+00j 1.826703349744e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140997e+00 1.826703349749e+03+0.000000000000e+00j -1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227945e+00 4.091794716320e+03+0.000000000000e+00j -4.091794716320e+03+0.000000000000e+00j 4.091794716320e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678772e+00 -8.278577344925e-14+0.000000000000e+00j -7.579653920088e-13+0.000000000000e+00j 3.766177783513e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678779e+00 -8.278577344950e-14+0.000000000000e+00j -7.579653920113e-13+0.000000000000e+00j 3.766177783525e+03+0.000000000000e+00j 1.000000000000e-01 + 3.287661494877e+00 -1.394563859870e-13+0.000000000000e+00j -1.276827042489e-12+0.000000000000e+00j 6.344297103151e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 -1.906161083910e+02+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j 3.621818540516e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 -4.960658211669e+02+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j 3.298148639035e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 -2.410990334891e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j 4.812325680570e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 -3.541150241882e+02+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j 3.270970228804e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -4.336803003413e+02+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j 2.570858259195e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 -2.466222371689e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j 3.141814155967e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 -1.089702533912e+02+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j 1.693883617056e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 3.331454318583e+01+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j 2.983841276862e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.792515640354e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j 1.492388034645e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 3.449549636351e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j 7.484369549273e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 7.252539022866e+02+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j 2.663991119437e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192902e+02+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j -7.537749369760e+01+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 8.326275941955e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j -1.095902598229e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 1.515634023277e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j 2.246901195615e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 6.390435888751e+02+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j -1.373374188791e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 1.287469747220e+03+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j -6.948254471676e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 2.218454428379e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j 1.725508655138e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 2.011916748813e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j -2.139081422557e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 1.677827869087e+03+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j -8.010663469828e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 2.675742073398e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j 1.061468362370e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 3.295829288952e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j -1.982424451087e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828351e+00 1.952274616241e+03+0.000000000000e+00j -1.952274616241e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 2.737268289311e+00 2.793069604589e+03+0.000000000000e+00j -2.793069604589e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.816726887354e+00 4.353221992372e+03+0.000000000000e+00j -4.353221992372e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 2.672119340515e+00 1.595448846499e+03+0.000000000000e+00j -1.595448846499e+03+0.000000000000e+00j 1.595448846499e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 1.595448846495e+03+0.000000000000e+00j -1.595448846495e+03+0.000000000000e+00j 1.595448846495e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234885e+00 3.544786741862e+03+0.000000000000e+00j -3.544786741862e+03+0.000000000000e+00j 3.544786741862e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 1.906161083910e+02+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j 3.621818540516e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 4.960658211669e+02+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j 3.298148639035e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 2.410990334891e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j 4.812325680570e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995347e+00 -7.381782677592e-14+0.000000000000e+00j -6.758571633540e-13+0.000000000000e+00j 3.358198488067e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995357e+00 -7.381782677541e-14+0.000000000000e+00j -6.758571633497e-13+0.000000000000e+00j 3.358198488046e+03+0.000000000000e+00j 1.000000000000e-01 + 6.148719801041e+00 -1.125284788005e-13+0.000000000000e+00j -1.030282003691e-12+0.000000000000e+00j 5.119264327847e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 -6.887815763756e+01+0.000000000000e+00j 6.887815763756e+01+0.000000000000e+00j 2.849906817858e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 -2.907876485096e+02+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j 3.298255165072e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 -1.173822321981e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 3.703285199892e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 1.611704542809e+02+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j 2.058840261207e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 -2.103459518153e+02+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j 3.440855856631e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 -1.305283557963e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j 1.749125406728e+03+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 5.511984988225e+02+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j 1.170914963950e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 4.701433168759e+02+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j 3.520407372805e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 -9.131359997239e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j -1.570279330060e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 9.813960230291e+02+0.000000000000e+00j -9.813960230291e+02+0.000000000000e+00j 3.903028684481e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 1.439610072415e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j 3.181897710267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 -1.539717814991e+02+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j -1.483189426179e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 1.362258017177e+03+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j -6.848654362207e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 2.277392898273e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j 1.978995825490e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 9.309665228201e+02+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j -1.522129397376e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118281e+00 1.629999833653e+03+0.000000000000e+00j -1.629999833653e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.470989580362e+00 2.668739100354e+03+0.000000000000e+00j -2.668739100354e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.166402741046e+00 2.239677814266e+03+0.000000000000e+00j -2.239677814266e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 1.677827869087e+03+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j 8.010663469828e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 2.675742073398e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j -1.061468362370e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 3.295829288952e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j 1.982424451087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175694e+00 1.195877589778e+03+0.000000000000e+00j -1.195877589778e+03+0.000000000000e+00j 1.195877589778e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175695e+00 1.195877589768e+03+0.000000000000e+00j -1.195877589768e+03+0.000000000000e+00j 1.195877589768e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501171e+00 2.632351875672e+03+0.000000000000e+00j -2.632351875672e+03+0.000000000000e+00j 2.632351875672e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 3.541150241882e+02+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j 3.270970228804e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 4.336803003413e+02+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j 2.570858259195e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 2.466222371689e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j 3.141814155967e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 6.887815763756e+01+0.000000000000e+00j -6.887815763756e+01+0.000000000000e+00j 2.849906817858e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 2.907876485096e+02+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j 3.298255165072e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 1.173822321981e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 3.703285199892e+03+0.000000000000e+00j 1.000000000000e-01 + 5.162878828392e+00 -5.659317535623e-14+0.000000000000e+00j -5.181526554207e-13+0.000000000000e+00j 2.574596465599e+03+0.000000000000e+00j 1.000000000000e-01 + 5.162878828401e+00 -5.659317535594e-14+0.000000000000e+00j -5.181526554196e-13+0.000000000000e+00j 2.574596465595e+03+0.000000000000e+00j 1.000000000000e-01 + 8.281247231959e+00 -7.609702299079e-14+0.000000000000e+00j -6.967249016205e-13+0.000000000000e+00j 3.461886087898e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 1.955720814232e+02+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j 1.931571181618e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 -8.360286832812e+02+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j 2.327628679175e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 -1.902976282779e+02+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j 2.153754821740e+03+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 5.453827687707e+02+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j 1.132852811783e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 -9.798348926358e+02+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j 2.474222927441e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 2.890782382811e+01+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j 3.169800657838e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 9.221540938131e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j 4.132400085451e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 1.118741331148e+02+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j 2.947829831354e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 -4.932098470685e+00+0.000000000000e+00j 4.932098470685e+00+0.000000000000e+00j -1.739754380415e+03+0.000000000000e+00j 1.000000000000e-01 + 5.217363486844e+00 1.218893138247e+03+0.000000000000e+00j -1.218893138247e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 7.854999616714e+00 2.067573412721e+03+0.000000000000e+00j -2.067573412721e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.063866630527e+00 -4.039473572554e+02+0.000000000000e+00j 4.039473572554e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 1.362258017177e+03+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j 6.848654362206e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 2.277392898273e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j -1.978995825490e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 9.309665228201e+02+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j 1.522129397376e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 1.287469747220e+03+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j 6.948254471676e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 2.218454428379e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j -1.725508655138e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 2.011916748813e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j 2.139081422557e+03+0.000000000000e+00j 1.000000000000e-01 + 4.408824939127e+00 6.440774382714e+02+0.000000000000e+00j -6.440774382714e+02+0.000000000000e+00j 6.440774382714e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939133e+00 6.440774382617e+02+0.000000000000e+00j -6.440774382617e+02+0.000000000000e+00j 6.440774382617e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103762e+00 1.407846987107e+03+0.000000000000e+00j -1.407846987107e+03+0.000000000000e+00j 1.407846987107e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 1.089702533912e+02+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j 1.693883617056e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 -3.331454318583e+01+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j 2.983841276862e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.792515640354e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j 1.492388034645e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 -1.611704542809e+02+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j 2.058840261207e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 2.103459518153e+02+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j 3.440855856631e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 1.305283557963e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j 1.749125406728e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 -1.955720814232e+02+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j 1.931571181618e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 8.360286832812e+02+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j 2.327628679175e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 1.902976282779e+02+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j 2.153754821740e+03+0.000000000000e+00j 1.000000000000e-01 + 6.162247816937e+00 -3.097729547215e-14+0.000000000000e+00j -2.836202034201e-13+0.000000000000e+00j 1.409251821174e+03+0.000000000000e+00j 1.000000000000e-01 + 6.162247816944e+00 -3.097729547222e-14+0.000000000000e+00j -2.836202034204e-13+0.000000000000e+00j 1.409251821176e+03+0.000000000000e+00j 1.000000000000e-01 + 9.558851750691e+00 -3.751576875914e-14+0.000000000000e+00j -3.434847944191e-13+0.000000000000e+00j 1.706706949096e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 3.350650599558e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j 6.851091907668e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 -1.317747768132e+03+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j 8.546200435528e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 4.550013552696e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j 6.775000304813e+02+0.000000000000e+00j 1.000000000000e-01 + 6.171043712422e+00 6.817503300498e+02+0.000000000000e+00j -6.817503300498e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 7.739218566863e+00 -1.880020318403e+03+0.000000000000e+00j 1.880020318403e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.436766280855e+00 1.091389803066e+03+0.000000000000e+00j -1.091389803066e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 9.221540938131e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j -4.132400085451e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 1.118741331148e+02+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j -2.947829831354e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 -4.932098470682e+00+0.000000000000e+00j 4.932098470682e+00+0.000000000000e+00j 1.739754380415e+03+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 9.813960230292e+02+0.000000000000e+00j -9.813960230292e+02+0.000000000000e+00j -3.903028684481e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 1.439610072415e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j -3.181897710267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 -1.539717814991e+02+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j 1.483189426179e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 8.326275941955e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j 1.095902598229e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 1.515634023277e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j -2.246901195615e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 6.390435888751e+02+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j 1.373374188791e+03+0.000000000000e+00j 1.000000000000e-01 + 4.650851100236e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.650851100245e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 1.033872196188e+01 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 -3.449549636351e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j 7.484369549273e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 -7.252539022866e+02+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j 2.663991119437e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192902e+02+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j -7.537749369760e+01+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 -5.511984988225e+02+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j 1.170914963950e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 -4.701433168759e+02+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j 3.520407372805e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 9.131359997239e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j -1.570279330060e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 -5.453827687707e+02+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j 1.132852811783e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 9.798348926358e+02+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j 2.474222927441e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 -2.890782382811e+01+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j 3.169800657838e+02+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 -3.350650599558e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j 6.851091907668e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 1.317747768132e+03+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j 8.546200435528e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 -4.550013552696e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j 6.775000304813e+02+0.000000000000e+00j 1.000000000000e-01 + 6.516302870694e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.516302870699e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.979040851872e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 3.350650599558e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j -6.851091907668e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 -1.317747768132e+03+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j -8.546200435528e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 4.550013552696e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j -6.775000304813e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 5.453827687707e+02+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j -1.132852811783e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 -9.798348926358e+02+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j -2.474222927441e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 2.890782382811e+01+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j -3.169800657838e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 5.511984988225e+02+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j -1.170914963950e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 4.701433168759e+02+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j -3.520407372805e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 -9.131359997239e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.570279330060e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 3.449549636351e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j -7.484369549273e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 7.252539022866e+02+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j -2.663991119437e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192902e+02+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j 7.537749369760e+01+0.000000000000e+00j 1.000000000000e-01 + 4.408824939127e+00 -6.440774382626e+02+0.000000000000e+00j 6.440774382626e+02+0.000000000000e+00j -6.440774382626e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939133e+00 -6.440774382705e+02+0.000000000000e+00j 6.440774382705e+02+0.000000000000e+00j -6.440774382705e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103762e+00 -1.407846987107e+03+0.000000000000e+00j 1.407846987107e+03+0.000000000000e+00j -1.407846987107e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 -8.326275941955e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j -1.095902598229e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 -1.515634023277e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j 2.246901195615e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 -6.390435888751e+02+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j -1.373374188791e+03+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 -9.813960230292e+02+0.000000000000e+00j 9.813960230292e+02+0.000000000000e+00j 3.903028684481e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 -1.439610072415e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j 3.181897710267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 1.539717814991e+02+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j -1.483189426179e+03+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 -9.221540938131e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j 4.132400085451e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 -1.118741331148e+02+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j 2.947829831354e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 4.932098470682e+00+0.000000000000e+00j -4.932098470682e+00+0.000000000000e+00j -1.739754380415e+03+0.000000000000e+00j 1.000000000000e-01 + 6.171043712422e+00 -6.817503300498e+02+0.000000000000e+00j 6.817503300498e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 7.739218566863e+00 1.880020318403e+03+0.000000000000e+00j -1.880020318403e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.436766280855e+00 -1.091389803066e+03+0.000000000000e+00j 1.091389803066e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 -3.350650599558e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j -6.851091907668e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 1.317747768132e+03+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j -8.546200435528e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 -4.550013552696e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j -6.775000304813e+02+0.000000000000e+00j 1.000000000000e-01 + 6.162247816937e+00 3.097729547226e-14+0.000000000000e+00j 2.836202034206e-13+0.000000000000e+00j -1.409251821178e+03+0.000000000000e+00j 1.000000000000e-01 + 6.162247816944e+00 3.097729547195e-14+0.000000000000e+00j 2.836202034195e-13+0.000000000000e+00j -1.409251821172e+03+0.000000000000e+00j 1.000000000000e-01 + 9.558851750691e+00 3.751576875914e-14+0.000000000000e+00j 3.434847944191e-13+0.000000000000e+00j -1.706706949096e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 1.955720814232e+02+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j -1.931571181618e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 -8.360286832812e+02+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j -2.327628679175e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 -1.902976282779e+02+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j -2.153754821740e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 1.611704542809e+02+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j -2.058840261207e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 -2.103459518153e+02+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j -3.440855856631e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 -1.305283557963e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j -1.749125406728e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 -1.089702533912e+02+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j -1.693883617056e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 3.331454318583e+01+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j -2.983841276862e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.792515640354e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j -1.492388034645e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175694e+00 -1.195877589769e+03+0.000000000000e+00j 1.195877589769e+03+0.000000000000e+00j -1.195877589769e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175695e+00 -1.195877589778e+03+0.000000000000e+00j 1.195877589778e+03+0.000000000000e+00j -1.195877589778e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501171e+00 -2.632351875672e+03+0.000000000000e+00j 2.632351875672e+03+0.000000000000e+00j -2.632351875672e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 -1.287469747220e+03+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j -6.948254471676e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 -2.218454428379e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j 1.725508655138e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 -2.011916748813e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j -2.139081422557e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 -1.362258017177e+03+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j -6.848654362206e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 -2.277392898273e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j 1.978995825490e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 -9.309665228201e+02+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j -1.522129397376e+03+0.000000000000e+00j 1.000000000000e-01 + 5.217363486844e+00 -1.218893138247e+03+0.000000000000e+00j 1.218893138247e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 7.854999616714e+00 -2.067573412721e+03+0.000000000000e+00j 2.067573412721e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.063866630527e+00 4.039473572554e+02+0.000000000000e+00j -4.039473572554e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 -9.221540938131e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j -4.132400085451e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 -1.118741331148e+02+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j -2.947829831354e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 4.932098470685e+00+0.000000000000e+00j -4.932098470685e+00+0.000000000000e+00j 1.739754380415e+03+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 -5.453827687707e+02+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j -1.132852811783e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 9.798348926358e+02+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j -2.474222927441e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 -2.890782382811e+01+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j -3.169800657838e+02+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 -1.955720814232e+02+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j -1.931571181618e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 8.360286832812e+02+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j -2.327628679175e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 1.902976282779e+02+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j -2.153754821740e+03+0.000000000000e+00j 1.000000000000e-01 + 5.162878828392e+00 5.659317535601e-14+0.000000000000e+00j 5.181526554206e-13+0.000000000000e+00j -2.574596465600e+03+0.000000000000e+00j 1.000000000000e-01 + 5.162878828401e+00 5.659317535593e-14+0.000000000000e+00j 5.181526554197e-13+0.000000000000e+00j -2.574596465595e+03+0.000000000000e+00j 1.000000000000e-01 + 8.281247231959e+00 7.609702299079e-14+0.000000000000e+00j 6.967249016205e-13+0.000000000000e+00j -3.461886087898e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 -6.887815763756e+01+0.000000000000e+00j 6.887815763756e+01+0.000000000000e+00j -2.849906817858e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 -2.907876485096e+02+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j -3.298255165072e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 -1.173822321981e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j -3.703285199892e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 -3.541150241882e+02+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j -3.270970228804e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -4.336803003413e+02+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j -2.570858259195e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 -2.466222371689e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j -3.141814155967e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340515e+00 -1.595448846499e+03+0.000000000000e+00j 1.595448846499e+03+0.000000000000e+00j -1.595448846499e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 -1.595448846495e+03+0.000000000000e+00j 1.595448846495e+03+0.000000000000e+00j -1.595448846495e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234885e+00 -3.544786741862e+03+0.000000000000e+00j 3.544786741862e+03+0.000000000000e+00j -3.544786741862e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 -1.677827869087e+03+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j -8.010663469828e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 -2.675742073398e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j 1.061468362370e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 -3.295829288952e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j -1.982424451087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118281e+00 -1.629999833653e+03+0.000000000000e+00j 1.629999833653e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.470989580362e+00 -2.668739100354e+03+0.000000000000e+00j 2.668739100354e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.166402741046e+00 -2.239677814266e+03+0.000000000000e+00j 2.239677814266e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 -1.362258017177e+03+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j 6.848654362207e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 -2.277392898273e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j -1.978995825490e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 -9.309665228201e+02+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j 1.522129397376e+03+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 -9.813960230291e+02+0.000000000000e+00j 9.813960230291e+02+0.000000000000e+00j -3.903028684481e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 -1.439610072415e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j -3.181897710267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 1.539717814991e+02+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j 1.483189426179e+03+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 -5.511984988225e+02+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j -1.170914963950e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 -4.701433168759e+02+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j -3.520407372805e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 9.131359997239e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 1.570279330060e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 -1.611704542809e+02+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j -2.058840261207e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 2.103459518153e+02+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j -3.440855856631e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 1.305283557963e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j -1.749125406728e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 6.887815763756e+01+0.000000000000e+00j -6.887815763756e+01+0.000000000000e+00j -2.849906817858e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 2.907876485096e+02+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j -3.298255165072e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 1.173822321981e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j -3.703285199892e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995347e+00 7.381782677571e-14+0.000000000000e+00j 6.758571633516e-13+0.000000000000e+00j -3.358198488056e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995357e+00 7.381782677566e-14+0.000000000000e+00j 6.758571633521e-13+0.000000000000e+00j -3.358198488058e+03+0.000000000000e+00j 1.000000000000e-01 + 6.148719801041e+00 1.125284788005e-13+0.000000000000e+00j 1.030282003691e-12+0.000000000000e+00j -5.119264327847e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 -1.906161083910e+02+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j -3.621818540516e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 -4.960658211669e+02+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j -3.298148639035e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 -2.410990334891e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j -4.812325680570e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140991e+00 -1.826703349756e+03+0.000000000000e+00j 1.826703349756e+03+0.000000000000e+00j -1.826703349756e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140997e+00 -1.826703349736e+03+0.000000000000e+00j 1.826703349736e+03+0.000000000000e+00j -1.826703349736e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227945e+00 -4.091794716320e+03+0.000000000000e+00j 4.091794716320e+03+0.000000000000e+00j -4.091794716320e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828351e+00 -1.952274616241e+03+0.000000000000e+00j 1.952274616241e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 2.737268289311e+00 -2.793069604589e+03+0.000000000000e+00j 2.793069604589e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.816726887354e+00 -4.353221992372e+03+0.000000000000e+00j 4.353221992372e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 -1.677827869087e+03+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j 8.010663469828e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 -2.675742073398e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j -1.061468362370e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 -3.295829288952e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j 1.982424451087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 -1.287469747220e+03+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j 6.948254471676e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 -2.218454428379e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j -1.725508655138e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 -2.011916748813e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j 2.139081422557e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 -8.326275941955e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j 1.095902598229e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 -1.515634023277e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j -2.246901195615e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 -6.390435888751e+02+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j 1.373374188791e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 -3.449549636351e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j -7.484369549273e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 -7.252539022866e+02+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j -2.663991119437e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192902e+02+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j 7.537749369760e+01+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 1.089702533912e+02+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j -1.693883617056e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 -3.331454318583e+01+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j -2.983841276862e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.792515640354e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j -1.492388034645e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 3.541150241882e+02+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j -3.270970228804e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 4.336803003413e+02+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j -2.570858259195e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 2.466222371689e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j -3.141814155967e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 1.906161083910e+02+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j -3.621818540516e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 4.960658211669e+02+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j -3.298148639035e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 2.410990334891e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j -4.812325680570e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678772e+00 8.278577344986e-14+0.000000000000e+00j 7.579653920141e-13+0.000000000000e+00j -3.766177783539e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678779e+00 8.278577344884e-14+0.000000000000e+00j 7.579653920062e-13+0.000000000000e+00j -3.766177783499e+03+0.000000000000e+00j 1.000000000000e-01 + 3.287661494877e+00 1.394563859870e-13+0.000000000000e+00j 1.276827042489e-12+0.000000000000e+00j -6.344297103151e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140991e+00 1.826703349744e+03+0.000000000000e+00j 1.826703349744e+03+0.000000000000e+00j -1.826703349744e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140997e+00 1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j -1.826703349749e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227945e+00 4.091794716320e+03+0.000000000000e+00j 4.091794716320e+03+0.000000000000e+00j -4.091794716320e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678772e+00 -8.278577344925e-14+0.000000000000e+00j 3.766177783513e+03+0.000000000000e+00j 8.278577344905e-14+0.000000000000e+00j 1.000000000000e-01 + 1.902801678779e+00 -8.278577344945e-14+0.000000000000e+00j 3.766177783525e+03+0.000000000000e+00j 8.278577344940e-14+0.000000000000e+00j 1.000000000000e-01 + 3.287661494877e+00 -1.394563859887e-13+0.000000000000e+00j 6.344297103151e+03+0.000000000000e+00j 1.394563859879e-13+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 -1.906161083910e+02+0.000000000000e+00j 3.621818540516e+03+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 -4.960658211669e+02+0.000000000000e+00j 3.298148639035e+03+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 -2.410990334891e+03+0.000000000000e+00j 4.812325680570e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 -3.541150241882e+02+0.000000000000e+00j 3.270970228804e+03+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -4.336803003413e+02+0.000000000000e+00j 2.570858259195e+03+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 -2.466222371689e+03+0.000000000000e+00j 3.141814155967e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 -1.089702533912e+02+0.000000000000e+00j 1.693883617056e+03+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 3.331454318583e+01+0.000000000000e+00j 2.983841276862e+03+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.792515640354e+03+0.000000000000e+00j 1.492388034645e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 3.449549636351e+02+0.000000000000e+00j 7.484369549273e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 7.252539022866e+02+0.000000000000e+00j 2.663991119437e+03+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192902e+02+0.000000000000e+00j -7.537749369760e+01+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 8.326275941955e+02+0.000000000000e+00j -1.095902598229e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 1.515634023277e+03+0.000000000000e+00j 2.246901195615e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 6.390435888751e+02+0.000000000000e+00j -1.373374188791e+03+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 1.287469747220e+03+0.000000000000e+00j -6.948254471676e+02+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 2.218454428379e+03+0.000000000000e+00j 1.725508655138e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 2.011916748813e+03+0.000000000000e+00j -2.139081422557e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 1.677827869087e+03+0.000000000000e+00j -8.010663469828e+02+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 2.675742073398e+03+0.000000000000e+00j 1.061468362370e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 3.295829288952e+03+0.000000000000e+00j -1.982424451087e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828351e+00 1.952274616241e+03+0.000000000000e+00j 3.511634154721e-13+0.000000000000e+00j -1.952274616241e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289311e+00 2.793069604589e+03+0.000000000000e+00j 5.024005607816e-13+0.000000000000e+00j -2.793069604589e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887354e+00 4.353221992372e+03+0.000000000000e+00j 7.830313883266e-13+0.000000000000e+00j -4.353221992372e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678772e+00 3.766177783513e+03+0.000000000000e+00j -7.829406600853e-14+0.000000000000e+00j 8.278577344925e-14+0.000000000000e+00j 1.000000000000e-01 + 1.902801678779e+00 3.766177783525e+03+0.000000000000e+00j -7.829406600891e-14+0.000000000000e+00j 8.278577344945e-14+0.000000000000e+00j 1.000000000000e-01 + 3.287661494877e+00 6.344297103151e+03+0.000000000000e+00j -1.318899013062e-13+0.000000000000e+00j 1.394563859887e-13+0.000000000000e+00j 1.000000000000e-01 + 1.392251140995e+00 1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140995e+00 1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j 1.826703349749e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227957e+00 4.091794716334e+03+0.000000000000e+00j 4.091794716334e+03+0.000000000000e+00j 4.091794716334e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828350e+00 -8.582118183317e-14+0.000000000000e+00j 1.952274616239e+03+0.000000000000e+00j 1.952274616239e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289319e+00 -1.227821805465e-13+0.000000000000e+00j 2.793069604590e+03+0.000000000000e+00j 2.793069604590e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887363e+00 -1.913658319664e-13+0.000000000000e+00j 4.353221992374e+03+0.000000000000e+00j 4.353221992374e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422196e+00 -8.010663469824e+02+0.000000000000e+00j 1.677827869086e+03+0.000000000000e+00j 1.677827869086e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719796e+00 1.061468362377e+03+0.000000000000e+00j 2.675742073388e+03+0.000000000000e+00j 2.675742073388e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523474e+00 -1.982424451074e+03+0.000000000000e+00j 3.295829288950e+03+0.000000000000e+00j 3.295829288950e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953784e+00 -6.948254471798e+02+0.000000000000e+00j 1.287469747221e+03+0.000000000000e+00j 1.287469747221e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351289e+00 1.725508655145e+03+0.000000000000e+00j 2.218454428366e+03+0.000000000000e+00j 2.218454428366e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594722e+00 -2.139081422556e+03+0.000000000000e+00j 2.011916748810e+03+0.000000000000e+00j 2.011916748810e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844972e+00 -1.095902598382e+02+0.000000000000e+00j 8.326275941940e+02+0.000000000000e+00j 8.326275941940e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649676e+00 2.246901195613e+03+0.000000000000e+00j 1.515634023269e+03+0.000000000000e+00j 1.515634023269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751927e+00 -1.373374188795e+03+0.000000000000e+00j 6.390435888739e+02+0.000000000000e+00j 6.390435888739e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181326e+00 7.484369549179e+02+0.000000000000e+00j 3.449549636286e+02+0.000000000000e+00j 3.449549636286e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658484e+00 2.663991119428e+03+0.000000000000e+00j 7.252539022881e+02+0.000000000000e+00j 7.252539022881e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -7.537749370039e+01+0.000000000000e+00j -6.906934192903e+02+0.000000000000e+00j -6.906934192903e+02+0.000000000000e+00j 1.000000000000e-01 + 4.588935700616e+00 1.693883617055e+03+0.000000000000e+00j -1.089702534022e+02+0.000000000000e+00j -1.089702534022e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605921e+00 2.983841276854e+03+0.000000000000e+00j 3.331454319420e+01+0.000000000000e+00j 3.331454319420e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.492388034645e+03+0.000000000000e+00j -1.792515640355e+03+0.000000000000e+00j -1.792515640355e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311364e+00 3.270970228804e+03+0.000000000000e+00j -3.541150241791e+02+0.000000000000e+00j -3.541150241791e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453628e+00 2.570858259196e+03+0.000000000000e+00j -4.336803003526e+02+0.000000000000e+00j -4.336803003526e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593150e+00 3.141814155966e+03+0.000000000000e+00j -2.466222371691e+03+0.000000000000e+00j -2.466222371691e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 3.621818540528e+03+0.000000000000e+00j -1.906161083809e+02+0.000000000000e+00j -1.906161083809e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219261e+00 3.298148639030e+03+0.000000000000e+00j -4.960658211723e+02+0.000000000000e+00j -4.960658211723e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578736e+00 4.812325680568e+03+0.000000000000e+00j -2.410990334894e+03+0.000000000000e+00j -2.410990334894e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 3.621818540516e+03+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 3.298148639035e+03+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 4.812325680570e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828350e+00 1.952274616239e+03+0.000000000000e+00j -4.323340486481e-13+0.000000000000e+00j 1.952274616239e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289319e+00 2.793069604590e+03+0.000000000000e+00j -6.185293197299e-13+0.000000000000e+00j 2.793069604590e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887363e+00 4.353221992374e+03+0.000000000000e+00j -9.640273314895e-13+0.000000000000e+00j 4.353221992374e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 1.906161083847e+02+0.000000000000e+00j 1.906161083847e+02+0.000000000000e+00j 3.621818540520e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219265e+00 4.960658211791e+02+0.000000000000e+00j 4.960658211791e+02+0.000000000000e+00j 3.298148639026e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578749e+00 2.410990334911e+03+0.000000000000e+00j 2.410990334911e+03+0.000000000000e+00j 4.812325680560e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 -6.764357585006e-14+0.000000000000e+00j -2.477472180376e+02+0.000000000000e+00j 3.326019148224e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 -1.129703471491e-13+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j 3.069970706092e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 -1.411070412072e-13+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j 3.909325828783e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 -4.048846605891e+02+0.000000000000e+00j -1.167708252139e+02+0.000000000000e+00j 2.855339344599e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 1.271754473744e+03+0.000000000000e+00j 2.133281238353e+03+0.000000000000e+00j 2.754226153072e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 -1.439197506310e+03+0.000000000000e+00j 1.815457579590e+03+0.000000000000e+00j 2.292540364986e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.473510677568e+01+0.000000000000e+00j -1.347963952067e+02+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531749e+00 2.100426273078e+03+0.000000000000e+00j 1.383957859722e+03+0.000000000000e+00j 2.537027100001e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 -1.600399579641e+03+0.000000000000e+00j 9.430387165091e+02+0.000000000000e+00j 5.951882676219e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 1.029630366773e+03+0.000000000000e+00j -2.274024116701e-13+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 2.417747879248e+03+0.000000000000e+00j -5.339796846459e-13+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 -8.075401156421e+02+0.000000000000e+00j 1.783519365238e-13+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.107875696041e+03+0.000000000000e+00j 1.347963952064e+02+0.000000000000e+00j 2.473510678253e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 2.537027099992e+03+0.000000000000e+00j -1.383957859744e+03+0.000000000000e+00j 2.100426273090e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 5.951882676210e+02+0.000000000000e+00j -9.430387165139e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 2.855339344597e+03+0.000000000000e+00j 1.167708252121e+02+0.000000000000e+00j -4.048846605795e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.754226153082e+03+0.000000000000e+00j -2.133281238364e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 2.292540364990e+03+0.000000000000e+00j -1.815457579598e+03+0.000000000000e+00j -1.439197506316e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 3.326019148229e+03+0.000000000000e+00j 2.477472180394e+02+0.000000000000e+00j 7.855630556088e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 3.069970706102e+03+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j 2.197456241457e-14+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 3.909325828790e+03+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j 3.073291132662e-14+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 3.270970228804e+03+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 2.570858259195e+03+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 3.141814155967e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422196e+00 1.677827869086e+03+0.000000000000e+00j -8.010663469824e+02+0.000000000000e+00j 1.677827869086e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719796e+00 2.675742073388e+03+0.000000000000e+00j 1.061468362377e+03+0.000000000000e+00j 2.675742073388e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523474e+00 3.295829288950e+03+0.000000000000e+00j -1.982424451074e+03+0.000000000000e+00j 3.295829288950e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 -2.477472180376e+02+0.000000000000e+00j -6.602848560321e-13+0.000000000000e+00j 3.326019148224e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 2.070280719288e+03+0.000000000000e+00j -6.572462202677e-13+0.000000000000e+00j 3.069970706092e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 2.511191789093e+03+0.000000000000e+00j -8.343416179370e-13+0.000000000000e+00j 3.909325828783e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257151e+00 6.887815764670e+01+0.000000000000e+00j 6.887815764670e+01+0.000000000000e+00j 2.849906817857e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924455e+00 2.907876484991e+02+0.000000000000e+00j 2.907876484991e+02+0.000000000000e+00j 3.298255165069e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452509e+00 1.173822321991e+03+0.000000000000e+00j 1.173822321991e+03+0.000000000000e+00j 3.703285199880e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 -5.505005122289e-14+0.000000000000e+00j -3.958756311590e+02+0.000000000000e+00j 2.901107133229e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -9.283214440852e-14+0.000000000000e+00j 1.768140685530e+03+0.000000000000e+00j 2.455785279109e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 -7.602781419221e-14+0.000000000000e+00j 9.018856377877e+02+0.000000000000e+00j 2.557589353128e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 4.109790152335e+02+0.000000000000e+00j -2.235944633189e+02+0.000000000000e+00j 2.297162805675e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 3.866751154283e+02+0.000000000000e+00j 1.651408145566e+03+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -7.231958063081e+02+0.000000000000e+00j 3.249726472726e+02+0.000000000000e+00j 8.193662174822e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.436326007856e+03+0.000000000000e+00j -7.962977582707e+00+0.000000000000e+00j 1.222381804899e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 9.408488419744e+02+0.000000000000e+00j 2.209454667211e+02+0.000000000000e+00j 2.773373845643e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 -9.265906162360e+02+0.000000000000e+00j 5.737601261161e+01+0.000000000000e+00j -9.858366119327e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 2.228955124167e+03+0.000000000000e+00j 1.368428955981e+01+0.000000000000e+00j 3.405516824254e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 1.737759702183e+03+0.000000000000e+00j -1.664544017651e+03+0.000000000000e+00j 2.155507627743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 -4.074490724557e+02+0.000000000000e+00j 8.232383415304e+01+0.000000000000e+00j -1.487864010830e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 2.658278854984e+03+0.000000000000e+00j -5.517436734322e+01+0.000000000000e+00j 5.721982093269e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 2.244897517883e+03+0.000000000000e+00j -2.407984538050e+03+0.000000000000e+00j -3.584877262922e-15+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 9.608585950775e+02+0.000000000000e+00j -6.727877776973e+02+0.000000000000e+00j 6.332193219660e-15+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 2.855339344604e+03+0.000000000000e+00j 1.167708252163e+02+0.000000000000e+00j 4.048846605874e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.754226153081e+03+0.000000000000e+00j -2.133281238368e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 2.292540364991e+03+0.000000000000e+00j -1.815457579596e+03+0.000000000000e+00j 1.439197506317e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 1.693883617056e+03+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 2.983841276862e+03+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.492388034645e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953784e+00 1.287469747221e+03+0.000000000000e+00j -6.948254471798e+02+0.000000000000e+00j 1.287469747221e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351289e+00 2.218454428366e+03+0.000000000000e+00j 1.725508655145e+03+0.000000000000e+00j 2.218454428366e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594722e+00 2.011916748810e+03+0.000000000000e+00j -2.139081422556e+03+0.000000000000e+00j 2.011916748810e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 -1.167708252139e+02+0.000000000000e+00j -4.048846605891e+02+0.000000000000e+00j 2.855339344599e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.133281238353e+03+0.000000000000e+00j 1.271754473744e+03+0.000000000000e+00j 2.754226153072e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 1.815457579590e+03+0.000000000000e+00j -1.439197506310e+03+0.000000000000e+00j 2.292540364986e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 -3.958756311590e+02+0.000000000000e+00j -5.721934915843e-13+0.000000000000e+00j 2.901107133229e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 1.768140685530e+03+0.000000000000e+00j -5.280852999344e-13+0.000000000000e+00j 2.455785279109e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 9.018856377877e+02+0.000000000000e+00j -5.304448515487e-13+0.000000000000e+00j 2.557589353128e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080837e+00 -1.955720814199e+02+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j 1.931571181621e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842362e+00 8.360286832695e+02+0.000000000000e+00j 8.360286832695e+02+0.000000000000e+00j 2.327628679170e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225690e+00 1.902976282771e+02+0.000000000000e+00j 1.902976282771e+02+0.000000000000e+00j 2.153754821733e+03+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 -4.126833802048e-14+0.000000000000e+00j 1.389460562279e+02+0.000000000000e+00j 1.738978129235e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 -6.562410480023e-14+0.000000000000e+00j 1.627322748356e+03+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -1.484688488775e-14+0.000000000000e+00j -4.535788174358e+02+0.000000000000e+00j 1.129334593094e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 1.565824031920e+03+0.000000000000e+00j 3.405764006341e+02+0.000000000000e+00j 8.165966244897e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.466859757966e+03+0.000000000000e+00j 1.674226432372e+03+0.000000000000e+00j 1.224827992553e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 2.837982416341e+02+0.000000000000e+00j -1.176647268022e+03+0.000000000000e+00j -1.160191764820e+02+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 2.114543049917e+03+0.000000000000e+00j 1.994915061823e+02+0.000000000000e+00j 5.086566580890e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 -1.516378160774e+03+0.000000000000e+00j 1.407377764407e+03+0.000000000000e+00j -2.395978798105e-15+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 1.161560904470e+03+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j -1.726362502259e-14+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 2.228955124173e+03+0.000000000000e+00j 1.368428956505e+01+0.000000000000e+00j -3.405516824120e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 1.737759702187e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j -2.155507627736e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 -4.074490724537e+02+0.000000000000e+00j 8.232383415397e+01+0.000000000000e+00j 1.487864010833e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 2.107875696050e+03+0.000000000000e+00j 1.347963952090e+02+0.000000000000e+00j -2.473510678724e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 2.537027100000e+03+0.000000000000e+00j -1.383957859743e+03+0.000000000000e+00j -2.100426273080e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 5.951882676235e+02+0.000000000000e+00j -9.430387165133e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 7.484369549273e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 2.663991119437e+03+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -7.537749369759e+01+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844972e+00 8.326275941940e+02+0.000000000000e+00j -1.095902598382e+02+0.000000000000e+00j 8.326275941940e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649676e+00 1.515634023269e+03+0.000000000000e+00j 2.246901195613e+03+0.000000000000e+00j 1.515634023269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751927e+00 6.390435888739e+02+0.000000000000e+00j -1.373374188795e+03+0.000000000000e+00j 6.390435888739e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -1.347963952067e+02+0.000000000000e+00j 2.473510677568e+01+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531748e+00 1.383957859722e+03+0.000000000000e+00j 2.100426273078e+03+0.000000000000e+00j 2.537027100001e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 9.430387165091e+02+0.000000000000e+00j -1.600399579641e+03+0.000000000000e+00j 5.951882676219e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 -2.235944633189e+02+0.000000000000e+00j 4.109790152335e+02+0.000000000000e+00j 2.297162805675e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 1.651408145566e+03+0.000000000000e+00j 3.866751154283e+02+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 3.249726472726e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j 8.193662174822e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 1.389460562279e+02+0.000000000000e+00j -3.508051118168e-13+0.000000000000e+00j 1.738978129235e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 1.627322748356e+03+0.000000000000e+00j -3.056264820608e-13+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -4.535788174358e+02+0.000000000000e+00j -2.165161525830e-13+0.000000000000e+00j 1.129334593094e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 -3.350650599564e+02+0.000000000000e+00j -3.350650599564e+02+0.000000000000e+00j 6.851091907693e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093595e+00 1.317747768119e+03+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j 8.546200435520e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 -4.550013552749e+02+0.000000000000e+00j -4.550013552749e+02+0.000000000000e+00j 6.775000304802e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 -1.105082526647e-14+0.000000000000e+00j 5.027358068558e+02+0.000000000000e+00j 1.105082526709e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 -3.479796022509e-14+0.000000000000e+00j 1.583065534720e+03+0.000000000000e+00j 3.479796022530e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 2.341025136739e-14+0.000000000000e+00j -1.065003863972e+03+0.000000000000e+00j -2.341025136719e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 1.565824031920e+03+0.000000000000e+00j 3.405764006383e+02+0.000000000000e+00j -8.165966244787e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.466859757964e+03+0.000000000000e+00j 1.674226432375e+03+0.000000000000e+00j -1.224827992550e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 2.837982416353e+02+0.000000000000e+00j -1.176647268019e+03+0.000000000000e+00j 1.160191764851e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 1.436326007861e+03+0.000000000000e+00j -7.962977576046e+00+0.000000000000e+00j -1.222381804894e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 9.408488419796e+02+0.000000000000e+00j 2.209454667325e+02+0.000000000000e+00j -2.773373845637e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 -9.265906162319e+02+0.000000000000e+00j 5.737601261443e+01+0.000000000000e+00j 9.858366119346e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236690e+00 1.029630366785e+03+0.000000000000e+00j 1.845929892106e-13+0.000000000000e+00j -1.029630366785e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845308e+00 2.417747879247e+03+0.000000000000e+00j 4.334558522989e-13+0.000000000000e+00j -2.417747879247e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592376e+00 -8.075401156400e+02+0.000000000000e+00j -1.447764641197e-13+0.000000000000e+00j 8.075401156400e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 -1.095902598229e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 2.246901195615e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 -1.373374188791e+03+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181326e+00 3.449549636286e+02+0.000000000000e+00j 7.484369549179e+02+0.000000000000e+00j 3.449549636286e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658484e+00 7.252539022881e+02+0.000000000000e+00j 2.663991119428e+03+0.000000000000e+00j 7.252539022881e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192903e+02+0.000000000000e+00j -7.537749370039e+01+0.000000000000e+00j -6.906934192903e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 -4.465139540329e-14+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 -1.048490992744e-13+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 3.502013360440e-14+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -7.962977582710e+00+0.000000000000e+00j 1.436326007856e+03+0.000000000000e+00j 1.222381804899e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.209454667211e+02+0.000000000000e+00j 9.408488419744e+02+0.000000000000e+00j 2.773373845643e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 5.737601261161e+01+0.000000000000e+00j -9.265906162360e+02+0.000000000000e+00j -9.858366119327e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 3.405764006341e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j 8.165966244897e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.674226432372e+03+0.000000000000e+00j -1.466859757966e+03+0.000000000000e+00j 1.224827992553e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 -1.176647268022e+03+0.000000000000e+00j 2.837982416341e+02+0.000000000000e+00j -1.160191764820e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 5.027358068558e+02+0.000000000000e+00j -1.045124067564e-14+0.000000000000e+00j 1.105082526729e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 1.583065534720e+03+0.000000000000e+00j -3.290992741036e-14+0.000000000000e+00j 3.479796022550e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 -1.065003863972e+03+0.000000000000e+00j 2.214008143469e-14+0.000000000000e+00j -2.341025136714e-14+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 -3.350650599560e+02+0.000000000000e+00j -3.350650599560e+02+0.000000000000e+00j -6.851091907684e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093596e+00 1.317747768119e+03+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j -8.546200435459e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 -4.550013552737e+02+0.000000000000e+00j -4.550013552737e+02+0.000000000000e+00j -6.775000304810e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 3.515988675151e-14+0.000000000000e+00j 1.389460562305e+02+0.000000000000e+00j -1.738978129230e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 -5.917484640916e-15+0.000000000000e+00j 1.627322748360e+03+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 3.478745879567e-14+0.000000000000e+00j -4.535788174314e+02+0.000000000000e+00j -1.129334593096e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 4.109790152323e+02+0.000000000000e+00j -2.235944633154e+02+0.000000000000e+00j -2.297162805673e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 3.866751154334e+02+0.000000000000e+00j 1.651408145580e+03+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 -7.231958063081e+02+0.000000000000e+00j 3.249726472798e+02+0.000000000000e+00j -8.193662174838e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 2.473510678724e+01+0.000000000000e+00j -1.347963952090e+02+0.000000000000e+00j -2.107875696050e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 2.100426273080e+03+0.000000000000e+00j 1.383957859743e+03+0.000000000000e+00j -2.537027100000e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 -1.600399579637e+03+0.000000000000e+00j 9.430387165133e+02+0.000000000000e+00j -5.951882676235e+02+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 -6.948254471676e+02+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 1.725508655138e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 -2.139081422557e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700616e+00 -1.089702534022e+02+0.000000000000e+00j 1.693883617055e+03+0.000000000000e+00j -1.089702534022e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605921e+00 3.331454319421e+01+0.000000000000e+00j 2.983841276854e+03+0.000000000000e+00j 3.331454319421e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.792515640355e+03+0.000000000000e+00j 1.492388034645e+03+0.000000000000e+00j -1.792515640355e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 1.347963952064e+02+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j 2.473510678253e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 -1.383957859744e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j 2.100426273090e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -9.430387165139e+02+0.000000000000e+00j 5.951882676209e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 1.368428955981e+01+0.000000000000e+00j 2.228955124167e+03+0.000000000000e+00j 3.405516824254e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 -1.664544017651e+03+0.000000000000e+00j 1.737759702183e+03+0.000000000000e+00j 2.155507627743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 8.232383415304e+01+0.000000000000e+00j -4.074490724557e+02+0.000000000000e+00j -1.487864010830e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 1.994915061823e+02+0.000000000000e+00j 2.114543049917e+03+0.000000000000e+00j 5.086566580890e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 1.407377764407e+03+0.000000000000e+00j -1.516378160774e+03+0.000000000000e+00j -2.395978798105e-15+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 -1.946935955182e+03+0.000000000000e+00j 1.161560904470e+03+0.000000000000e+00j -1.726362502259e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 3.405764006383e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j -8.165966244787e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.674226432375e+03+0.000000000000e+00j -1.466859757964e+03+0.000000000000e+00j -1.224827992550e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 -1.176647268019e+03+0.000000000000e+00j 2.837982416353e+02+0.000000000000e+00j 1.160191764851e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 1.389460562305e+02+0.000000000000e+00j 3.450280867670e-13+0.000000000000e+00j -1.738978129230e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 1.627322748360e+03+0.000000000000e+00j 2.379665244063e-13+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -4.535788174314e+02+0.000000000000e+00j 2.353748108371e-13+0.000000000000e+00j -1.129334593096e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080838e+00 -1.955720814199e+02+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j -1.931571181623e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842365e+00 8.360286832711e+02+0.000000000000e+00j 8.360286832711e+02+0.000000000000e+00j -2.327628679167e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225688e+00 1.902976282757e+02+0.000000000000e+00j 1.902976282757e+02+0.000000000000e+00j -2.153754821741e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 7.245383415741e-14+0.000000000000e+00j -3.958756311563e+02+0.000000000000e+00j -2.901107133228e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 1.509981065686e-14+0.000000000000e+00j 1.768140685534e+03+0.000000000000e+00j -2.455785279116e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 3.637843788649e-14+0.000000000000e+00j 9.018856377917e+02+0.000000000000e+00j -2.557589353136e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 -4.048846605874e+02+0.000000000000e+00j -1.167708252163e+02+0.000000000000e+00j -2.855339344604e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 1.271754473743e+03+0.000000000000e+00j 2.133281238368e+03+0.000000000000e+00j -2.754226153081e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.439197506317e+03+0.000000000000e+00j 1.815457579596e+03+0.000000000000e+00j -2.292540364991e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 -8.010663469828e+02+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 1.061468362370e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 -1.982424451087e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311364e+00 -3.541150241790e+02+0.000000000000e+00j 3.270970228804e+03+0.000000000000e+00j -3.541150241790e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453628e+00 -4.336803003525e+02+0.000000000000e+00j 2.570858259196e+03+0.000000000000e+00j -4.336803003525e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593150e+00 -2.466222371691e+03+0.000000000000e+00j 3.141814155966e+03+0.000000000000e+00j -2.466222371691e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 1.167708252121e+02+0.000000000000e+00j 2.855339344597e+03+0.000000000000e+00j -4.048846605795e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.133281238364e+03+0.000000000000e+00j 2.754226153082e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.815457579598e+03+0.000000000000e+00j 2.292540364990e+03+0.000000000000e+00j -1.439197506316e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 -5.517436734322e+01+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j 5.721982093269e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 -2.407984538050e+03+0.000000000000e+00j 2.244897517883e+03+0.000000000000e+00j -3.584877262922e-15+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 -6.727877776973e+02+0.000000000000e+00j 9.608585950775e+02+0.000000000000e+00j 6.332193219660e-15+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 1.368428956505e+01+0.000000000000e+00j 2.228955124173e+03+0.000000000000e+00j -3.405516824120e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 -1.664544017648e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j -2.155507627736e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 8.232383415397e+01+0.000000000000e+00j -4.074490724538e+02+0.000000000000e+00j 1.487864010833e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 -7.962977576050e+00+0.000000000000e+00j 1.436326007861e+03+0.000000000000e+00j -1.222381804894e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 2.209454667325e+02+0.000000000000e+00j 9.408488419795e+02+0.000000000000e+00j -2.773373845637e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 5.737601261443e+01+0.000000000000e+00j -9.265906162319e+02+0.000000000000e+00j 9.858366119346e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 -2.235944633154e+02+0.000000000000e+00j 4.109790152323e+02+0.000000000000e+00j -2.297162805673e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 1.651408145580e+03+0.000000000000e+00j 3.866751154334e+02+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 3.249726472798e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j -8.193662174838e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 -3.958756311563e+02+0.000000000000e+00j 5.886529975209e-13+0.000000000000e+00j -2.901107133228e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 1.768140685534e+03+0.000000000000e+00j 4.545704891635e-13+0.000000000000e+00j -2.455785279116e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 9.018856377917e+02+0.000000000000e+00j 4.929467313251e-13+0.000000000000e+00j -2.557589353136e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257150e+00 6.887815764371e+01+0.000000000000e+00j 6.887815764371e+01+0.000000000000e+00j -2.849906817861e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924458e+00 2.907876484989e+02+0.000000000000e+00j 2.907876484989e+02+0.000000000000e+00j -3.298255165074e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452502e+00 1.173822321981e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j -3.703285199893e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 7.853522581700e-14+0.000000000000e+00j -2.477472180394e+02+0.000000000000e+00j -3.326019148229e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 2.195510546186e-14+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j -3.069970706102e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 3.070813468415e-14+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j -3.909325828790e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828351e+00 -6.186592350803e-18+0.000000000000e+00j 1.952274616241e+03+0.000000000000e+00j -1.952274616241e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289311e+00 -8.851000216431e-18+0.000000000000e+00j 2.793069604589e+03+0.000000000000e+00j -2.793069604589e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887354e+00 -1.379499054850e-17+0.000000000000e+00j 4.353221992372e+03+0.000000000000e+00j -4.353221992372e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 -1.906161083809e+02+0.000000000000e+00j 3.621818540528e+03+0.000000000000e+00j -1.906161083809e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219261e+00 -4.960658211723e+02+0.000000000000e+00j 3.298148639030e+03+0.000000000000e+00j -4.960658211723e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578736e+00 -2.410990334894e+03+0.000000000000e+00j 4.812325680568e+03+0.000000000000e+00j -2.410990334894e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 2.477472180394e+02+0.000000000000e+00j 3.326019148229e+03+0.000000000000e+00j 7.855630556088e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 -2.070280719288e+03+0.000000000000e+00j 3.069970706102e+03+0.000000000000e+00j 2.197456241457e-14+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 -2.511191789093e+03+0.000000000000e+00j 3.909325828790e+03+0.000000000000e+00j 3.073291132662e-14+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 1.167708252163e+02+0.000000000000e+00j 2.855339344604e+03+0.000000000000e+00j 4.048846605874e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.133281238368e+03+0.000000000000e+00j 2.754226153081e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.815457579596e+03+0.000000000000e+00j 2.292540364991e+03+0.000000000000e+00j 1.439197506317e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 1.347963952090e+02+0.000000000000e+00j 2.107875696050e+03+0.000000000000e+00j -2.473510678724e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 -1.383957859743e+03+0.000000000000e+00j 2.537027100000e+03+0.000000000000e+00j -2.100426273080e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 -9.430387165133e+02+0.000000000000e+00j 5.951882676234e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 5.164686236690e+00 -6.139909804282e-16+0.000000000000e+00j 1.029630366785e+03+0.000000000000e+00j -1.029630366785e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845308e+00 -1.441755642311e-15+0.000000000000e+00j 2.417747879247e+03+0.000000000000e+00j -2.417747879247e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592376e+00 4.815537335840e-16+0.000000000000e+00j -8.075401156400e+02+0.000000000000e+00j 8.075401156400e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 -1.347963952090e+02+0.000000000000e+00j 2.473510678723e+01+0.000000000000e+00j -2.107875696050e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 1.383957859743e+03+0.000000000000e+00j 2.100426273080e+03+0.000000000000e+00j -2.537027100000e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 9.430387165133e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j -5.951882676234e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 -1.167708252163e+02+0.000000000000e+00j -4.048846605874e+02+0.000000000000e+00j -2.855339344604e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.133281238368e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j -2.754226153081e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.815457579596e+03+0.000000000000e+00j -1.439197506317e+03+0.000000000000e+00j -2.292540364991e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 -2.477472180394e+02+0.000000000000e+00j 6.705855577827e-13+0.000000000000e+00j -3.326019148229e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 2.070280719288e+03+0.000000000000e+00j 5.711691922540e-13+0.000000000000e+00j -3.069970706102e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 2.511191789093e+03+0.000000000000e+00j 7.299326245236e-13+0.000000000000e+00j -3.909325828790e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 1.906161083809e+02+0.000000000000e+00j 1.906161083809e+02+0.000000000000e+00j -3.621818540528e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219261e+00 4.960658211723e+02+0.000000000000e+00j 4.960658211723e+02+0.000000000000e+00j -3.298148639030e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578736e+00 2.410990334894e+03+0.000000000000e+00j 2.410990334894e+03+0.000000000000e+00j -4.812325680568e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340515e+00 1.595448846499e+03+0.000000000000e+00j 1.595448846499e+03+0.000000000000e+00j -1.595448846499e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 1.595448846495e+03+0.000000000000e+00j 1.595448846495e+03+0.000000000000e+00j -1.595448846495e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234885e+00 3.544786741862e+03+0.000000000000e+00j 3.544786741862e+03+0.000000000000e+00j -3.544786741862e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 1.906161083910e+02+0.000000000000e+00j 3.621818540516e+03+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 4.960658211669e+02+0.000000000000e+00j 3.298148639035e+03+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 2.410990334891e+03+0.000000000000e+00j 4.812325680570e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995347e+00 -7.381782677602e-14+0.000000000000e+00j 3.358198488067e+03+0.000000000000e+00j 7.381782677612e-14+0.000000000000e+00j 1.000000000000e-01 + 3.678827995357e+00 -7.381782677556e-14+0.000000000000e+00j 3.358198488046e+03+0.000000000000e+00j 7.381782677541e-14+0.000000000000e+00j 1.000000000000e-01 + 6.148719801041e+00 -1.125284788007e-13+0.000000000000e+00j 5.119264327847e+03+0.000000000000e+00j 1.125284788001e-13+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 -6.887815763756e+01+0.000000000000e+00j 2.849906817858e+03+0.000000000000e+00j 6.887815763756e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 -2.907876485096e+02+0.000000000000e+00j 3.298255165072e+03+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 -1.173822321981e+03+0.000000000000e+00j 3.703285199892e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 1.611704542809e+02+0.000000000000e+00j 2.058840261207e+03+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 -2.103459518153e+02+0.000000000000e+00j 3.440855856631e+03+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 -1.305283557963e+03+0.000000000000e+00j 1.749125406728e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 5.511984988225e+02+0.000000000000e+00j 1.170914963950e+03+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 4.701433168759e+02+0.000000000000e+00j 3.520407372805e+03+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 -9.131359997239e+02+0.000000000000e+00j -1.570279330060e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 9.813960230292e+02+0.000000000000e+00j 3.903028684481e+02+0.000000000000e+00j -9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 1.439610072415e+03+0.000000000000e+00j 3.181897710267e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 -1.539717814991e+02+0.000000000000e+00j -1.483189426179e+03+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 1.362258017177e+03+0.000000000000e+00j -6.848654362207e+01+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 2.277392898273e+03+0.000000000000e+00j 1.978995825490e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 9.309665228201e+02+0.000000000000e+00j -1.522129397376e+03+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 3.800968118281e+00 1.629999833653e+03+0.000000000000e+00j 2.931945659913e-13+0.000000000000e+00j -1.629999833653e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580362e+00 2.668739100354e+03+0.000000000000e+00j 4.800367375001e-13+0.000000000000e+00j -2.668739100354e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741046e+00 2.239677814266e+03+0.000000000000e+00j 4.028597740666e-13+0.000000000000e+00j -2.239677814266e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 1.677827869087e+03+0.000000000000e+00j 8.010663469828e+02+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 2.675742073398e+03+0.000000000000e+00j -1.061468362370e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 3.295829288952e+03+0.000000000000e+00j 1.982424451087e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 3.621818540516e+03+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 3.298148639035e+03+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 4.812325680570e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828350e+00 1.952274616239e+03+0.000000000000e+00j 1.952274616239e+03+0.000000000000e+00j 8.582736842465e-14+0.000000000000e+00j 1.000000000000e-01 + 2.737268289319e+00 2.793069604590e+03+0.000000000000e+00j 2.793069604590e+03+0.000000000000e+00j 1.227910315474e-13+0.000000000000e+00j 1.000000000000e-01 + 4.816726887363e+00 4.353221992374e+03+0.000000000000e+00j 4.353221992374e+03+0.000000000000e+00j 1.913796269578e-13+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 1.906161083847e+02+0.000000000000e+00j 3.621818540520e+03+0.000000000000e+00j 1.906161083847e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219265e+00 4.960658211791e+02+0.000000000000e+00j 3.298148639026e+03+0.000000000000e+00j 4.960658211791e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578749e+00 2.410990334911e+03+0.000000000000e+00j 4.812325680560e+03+0.000000000000e+00j 2.410990334911e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 -6.766622577425e-14+0.000000000000e+00j 3.326019148224e+03+0.000000000000e+00j -2.477472180376e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 -1.129766830150e-13+0.000000000000e+00j 3.069970706092e+03+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 -1.411159023437e-13+0.000000000000e+00j 3.909325828783e+03+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 -4.048846605891e+02+0.000000000000e+00j 2.855339344599e+03+0.000000000000e+00j -1.167708252139e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 1.271754473744e+03+0.000000000000e+00j 2.754226153072e+03+0.000000000000e+00j 2.133281238353e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 -1.439197506310e+03+0.000000000000e+00j 2.292540364986e+03+0.000000000000e+00j 1.815457579590e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.473510677568e+01+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j -1.347963952067e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531749e+00 2.100426273078e+03+0.000000000000e+00j 2.537027100001e+03+0.000000000000e+00j 1.383957859722e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 -1.600399579641e+03+0.000000000000e+00j 5.951882676219e+02+0.000000000000e+00j 9.430387165091e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 1.029630366773e+03+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 4.526538638363e-14+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 2.417747879248e+03+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 1.062908549185e-13+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 -8.075401156421e+02+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j -3.550168733787e-14+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.107875696041e+03+0.000000000000e+00j 2.473510678252e+01+0.000000000000e+00j 1.347963952064e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 2.537027099992e+03+0.000000000000e+00j 2.100426273090e+03+0.000000000000e+00j -1.383957859744e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 5.951882676210e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j -9.430387165139e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 2.855339344597e+03+0.000000000000e+00j -4.048846605795e+02+0.000000000000e+00j 1.167708252121e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.754226153082e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j -2.133281238364e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 2.292540364990e+03+0.000000000000e+00j -1.439197506316e+03+0.000000000000e+00j -1.815457579598e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 3.326019148229e+03+0.000000000000e+00j -1.187104038179e-13+0.000000000000e+00j 2.477472180394e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 3.069970706102e+03+0.000000000000e+00j 3.503793619804e-13+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 3.909325828790e+03+0.000000000000e+00j 4.211431183806e-13+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995347e+00 3.358198488067e+03+0.000000000000e+00j -6.981269318878e-14+0.000000000000e+00j 7.381782677602e-14+0.000000000000e+00j 1.000000000000e-01 + 3.678827995357e+00 3.358198488046e+03+0.000000000000e+00j -6.981269318847e-14+0.000000000000e+00j 7.381782677551e-14+0.000000000000e+00j 1.000000000000e-01 + 6.148719801041e+00 5.119264327847e+03+0.000000000000e+00j -1.064230214927e-13+0.000000000000e+00j 1.125284788005e-13+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 3.621818540520e+03+0.000000000000e+00j 1.906161083847e+02+0.000000000000e+00j 1.906161083847e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219265e+00 3.298148639026e+03+0.000000000000e+00j 4.960658211791e+02+0.000000000000e+00j 4.960658211791e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578749e+00 4.812325680560e+03+0.000000000000e+00j 2.410990334911e+03+0.000000000000e+00j 2.410990334911e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 1.595448846500e+03+0.000000000000e+00j 1.595448846500e+03+0.000000000000e+00j 1.595448846500e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 1.595448846500e+03+0.000000000000e+00j 1.595448846500e+03+0.000000000000e+00j 1.595448846500e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234903e+00 3.544786741863e+03+0.000000000000e+00j 3.544786741863e+03+0.000000000000e+00j 3.544786741863e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422199e+00 8.010663469957e+02+0.000000000000e+00j 1.677827869084e+03+0.000000000000e+00j 1.677827869084e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719795e+00 -1.061468362371e+03+0.000000000000e+00j 2.675742073394e+03+0.000000000000e+00j 2.675742073394e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523485e+00 1.982424451106e+03+0.000000000000e+00j 3.295829288942e+03+0.000000000000e+00j 3.295829288942e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118278e+00 -7.165411615119e-14+0.000000000000e+00j 1.629999833649e+03+0.000000000000e+00j 1.629999833649e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580363e+00 -1.173166631837e-13+0.000000000000e+00j 2.668739100343e+03+0.000000000000e+00j 2.668739100343e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741049e+00 -9.845530713205e-14+0.000000000000e+00j 2.239677814254e+03+0.000000000000e+00j 2.239677814254e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909401e+00 -6.848654362995e+01+0.000000000000e+00j 1.362258017175e+03+0.000000000000e+00j 1.362258017175e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834561e+00 1.978995825498e+03+0.000000000000e+00j 2.277392898260e+03+0.000000000000e+00j 2.277392898260e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902965e+00 -1.522129397379e+03+0.000000000000e+00j 9.309665228146e+02+0.000000000000e+00j 9.309665228146e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368607e+00 3.903028684352e+02+0.000000000000e+00j 9.813960230264e+02+0.000000000000e+00j 9.813960230264e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870169e+00 3.181897710263e+03+0.000000000000e+00j 1.439610072411e+03+0.000000000000e+00j 1.439610072411e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609831e+00 -1.483189426185e+03+0.000000000000e+00j -1.539717814987e+02+0.000000000000e+00j -1.539717814987e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 1.170914963942e+03+0.000000000000e+00j 5.511984988163e+02+0.000000000000e+00j 5.511984988163e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215531e+00 3.520407372794e+03+0.000000000000e+00j 4.701433168860e+02+0.000000000000e+00j 4.701433168860e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385185e+00 -1.570279330093e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614181e+00 2.058840261207e+03+0.000000000000e+00j 1.611704542722e+02+0.000000000000e+00j 1.611704542722e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627748e+00 3.440855856625e+03+0.000000000000e+00j -2.103459517991e+02+0.000000000000e+00j -2.103459517991e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550816e+00 1.749125406727e+03+0.000000000000e+00j -1.305283557965e+03+0.000000000000e+00j -1.305283557965e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257150e+00 2.849906817861e+03+0.000000000000e+00j -6.887815764371e+01+0.000000000000e+00j -6.887815764371e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924458e+00 3.298255165074e+03+0.000000000000e+00j -2.907876484989e+02+0.000000000000e+00j -2.907876484989e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452502e+00 3.703285199893e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 2.849906817858e+03+0.000000000000e+00j -6.887815763756e+01+0.000000000000e+00j 6.887815763756e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 3.298255165072e+03+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 3.703285199892e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 3.326019148224e+03+0.000000000000e+00j -1.957704712401e-14+0.000000000000e+00j -2.477472180376e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 3.069970706092e+03+0.000000000000e+00j -4.780209673019e-13+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 3.909325828783e+03+0.000000000000e+00j -5.836829835087e-13+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422199e+00 1.677827869084e+03+0.000000000000e+00j 8.010663469957e+02+0.000000000000e+00j 1.677827869084e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719795e+00 2.675742073394e+03+0.000000000000e+00j -1.061468362371e+03+0.000000000000e+00j 2.675742073394e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523485e+00 3.295829288942e+03+0.000000000000e+00j 1.982424451106e+03+0.000000000000e+00j 3.295829288942e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311366e+00 3.541150241892e+02+0.000000000000e+00j 3.541150241892e+02+0.000000000000e+00j 3.270970228798e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 4.336803003555e+02+0.000000000000e+00j 4.336803003555e+02+0.000000000000e+00j 2.570858259189e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593164e+00 2.466222371692e+03+0.000000000000e+00j 2.466222371692e+03+0.000000000000e+00j 3.141814155950e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 4.048846605956e+02+0.000000000000e+00j -1.167708252118e+02+0.000000000000e+00j 2.855339344593e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 -1.271754473739e+03+0.000000000000e+00j 2.133281238363e+03+0.000000000000e+00j 2.754226153073e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 1.439197506327e+03+0.000000000000e+00j 1.815457579586e+03+0.000000000000e+00j 2.292540364973e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 -5.962859034522e-14+0.000000000000e+00j 5.517436734186e+01+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 -1.022625265083e-13+0.000000000000e+00j 2.407984538040e+03+0.000000000000e+00j 2.244897517877e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 -3.590370693328e-14+0.000000000000e+00j 6.727877776834e+02+0.000000000000e+00j 9.608585950688e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 3.405516824148e+02+0.000000000000e+00j -1.368428956439e+01+0.000000000000e+00j 2.228955124172e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 2.155507627740e+03+0.000000000000e+00j 1.664544017633e+03+0.000000000000e+00j 1.737759702190e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 -1.487864010841e+03+0.000000000000e+00j -8.232383415556e+01+0.000000000000e+00j -4.074490724521e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.222381804895e+03+0.000000000000e+00j 7.962977578280e+00+0.000000000000e+00j 1.436326007860e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 2.773373845625e+03+0.000000000000e+00j -2.209454667356e+02+0.000000000000e+00j 9.408488419984e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 -9.858366119372e+02+0.000000000000e+00j -5.737601261432e+01+0.000000000000e+00j -9.265906162296e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 2.297162805671e+03+0.000000000000e+00j 2.235944633121e+02+0.000000000000e+00j 4.109790152451e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 2.349960447270e+03+0.000000000000e+00j -1.651408145570e+03+0.000000000000e+00j 3.866751154420e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 8.193662174821e+02+0.000000000000e+00j -3.249726472808e+02+0.000000000000e+00j -7.231958063048e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 2.901107133228e+03+0.000000000000e+00j 3.958756311563e+02+0.000000000000e+00j 7.247222087635e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 2.455785279116e+03+0.000000000000e+00j -1.768140685534e+03+0.000000000000e+00j 1.511537500763e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 2.557589353136e+03+0.000000000000e+00j -9.018856377917e+02+0.000000000000e+00j 3.639464745298e-14+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 2.058840261207e+03+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 3.440855856631e+03+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 1.749125406728e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 2.855339344599e+03+0.000000000000e+00j -4.048846605891e+02+0.000000000000e+00j -1.167708252139e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.754226153072e+03+0.000000000000e+00j 1.271754473744e+03+0.000000000000e+00j 2.133281238353e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 2.292540364986e+03+0.000000000000e+00j -1.439197506310e+03+0.000000000000e+00j 1.815457579590e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118278e+00 1.629999833649e+03+0.000000000000e+00j -3.609658300711e-13+0.000000000000e+00j 1.629999833649e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580363e+00 2.668739100343e+03+0.000000000000e+00j -5.909961490252e-13+0.000000000000e+00j 2.668739100343e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741049e+00 2.239677814254e+03+0.000000000000e+00j -4.959799041839e-13+0.000000000000e+00j 2.239677814254e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 -1.167708252118e+02+0.000000000000e+00j 4.048846605956e+02+0.000000000000e+00j 2.855339344593e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 2.133281238363e+03+0.000000000000e+00j -1.271754473739e+03+0.000000000000e+00j 2.754226153073e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 1.815457579586e+03+0.000000000000e+00j 1.439197506327e+03+0.000000000000e+00j 2.292540364973e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614182e+00 -1.611704542705e+02+0.000000000000e+00j -1.611704542705e+02+0.000000000000e+00j 2.058840261201e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627747e+00 2.103459518126e+02+0.000000000000e+00j 2.103459518126e+02+0.000000000000e+00j 3.440855856623e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550821e+00 1.305283557962e+03+0.000000000000e+00j 1.305283557962e+03+0.000000000000e+00j 1.749125406708e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 -4.109790152351e+02+0.000000000000e+00j -2.235944633120e+02+0.000000000000e+00j 2.297162805672e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 -3.866751154302e+02+0.000000000000e+00j 1.651408145573e+03+0.000000000000e+00j 2.349960447269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 7.231958063040e+02+0.000000000000e+00j 3.249726472674e+02+0.000000000000e+00j 8.193662174715e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 -4.707944915710e-14+0.000000000000e+00j -1.937303341824e+02+0.000000000000e+00j 2.336191913904e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 -7.722889357983e-14+0.000000000000e+00j 2.256075560900e+03+0.000000000000e+00j 1.257665397688e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 2.479616510532e-14+0.000000000000e+00j -8.541533926821e+02+0.000000000000e+00j -2.739789173907e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 1.391753177029e+03+0.000000000000e+00j -3.073802396661e-13+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 1.140089543169e+03+0.000000000000e+00j -2.517982375066e-13+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 -1.212226534588e+03+0.000000000000e+00j 2.677302907453e-13+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 2.336191913897e+03+0.000000000000e+00j 1.937303341826e+02+0.000000000000e+00j 5.561117454149e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 1.257665397683e+03+0.000000000000e+00j -2.256075560905e+03+0.000000000000e+00j -2.194643013012e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 -2.739789173931e+02+0.000000000000e+00j 8.541533926711e+02+0.000000000000e+00j 1.275303382656e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 2.297162805673e+03+0.000000000000e+00j 2.235944633154e+02+0.000000000000e+00j -4.109790152323e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 2.349960447274e+03+0.000000000000e+00j -1.651408145580e+03+0.000000000000e+00j -3.866751154334e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 8.193662174838e+02+0.000000000000e+00j -3.249726472798e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 1.170914963950e+03+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 3.520407372805e+03+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 -1.570279330060e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.107875696041e+03+0.000000000000e+00j 2.473510677568e+01+0.000000000000e+00j -1.347963952068e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531748e+00 2.537027100001e+03+0.000000000000e+00j 2.100426273078e+03+0.000000000000e+00j 1.383957859722e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 5.951882676219e+02+0.000000000000e+00j -1.600399579641e+03+0.000000000000e+00j 9.430387165091e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909401e+00 1.362258017175e+03+0.000000000000e+00j -6.848654362996e+01+0.000000000000e+00j 1.362258017175e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834561e+00 2.277392898260e+03+0.000000000000e+00j 1.978995825498e+03+0.000000000000e+00j 2.277392898260e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902965e+00 9.309665228146e+02+0.000000000000e+00j -1.522129397379e+03+0.000000000000e+00j 9.309665228146e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 5.517436734186e+01+0.000000000000e+00j -5.329877015703e-13+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 2.407984538040e+03+0.000000000000e+00j -4.991946203969e-13+0.000000000000e+00j 2.244897517877e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 6.727877776834e+02+0.000000000000e+00j -2.062249677019e-13+0.000000000000e+00j 9.608585950688e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 -2.235944633120e+02+0.000000000000e+00j -4.109790152351e+02+0.000000000000e+00j 2.297162805672e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 1.651408145573e+03+0.000000000000e+00j -3.866751154302e+02+0.000000000000e+00j 2.349960447269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 3.249726472674e+02+0.000000000000e+00j 7.231958063040e+02+0.000000000000e+00j 8.193662174715e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015343e+00 -5.453827687681e+02+0.000000000000e+00j -5.453827687681e+02+0.000000000000e+00j 1.132852811781e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 9.798348926316e+02+0.000000000000e+00j 9.798348926316e+02+0.000000000000e+00j 2.474222927435e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806791e+00 -2.890782383714e+01+0.000000000000e+00j -2.890782383714e+01+0.000000000000e+00j 3.169800657750e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 -1.565824031930e+03+0.000000000000e+00j 3.405764006429e+02+0.000000000000e+00j 8.165966244859e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.466859757958e+03+0.000000000000e+00j 1.674226432371e+03+0.000000000000e+00j 1.224827992548e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 -2.837982416495e+02+0.000000000000e+00j -1.176647268028e+03+0.000000000000e+00j -1.160191764816e+02+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 -6.603071664823e-15+0.000000000000e+00j 3.003939055115e+02+0.000000000000e+00j 6.603071664823e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 -4.844139311901e-14+0.000000000000e+00j 2.203746984141e+03+0.000000000000e+00j 4.844139311901e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 4.182442897778e-14+0.000000000000e+00j -1.902721067418e+03+0.000000000000e+00j -4.182442897819e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258316e+00 1.391753177018e+03+0.000000000000e+00j 2.495146680563e-13+0.000000000000e+00j -1.391753177018e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726734e+00 1.140089543166e+03+0.000000000000e+00j 2.043962022971e-13+0.000000000000e+00j -1.140089543166e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070240e+00 -1.212226534592e+03+0.000000000000e+00j -2.173289821661e-13+0.000000000000e+00j 1.212226534592e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 1.222381804894e+03+0.000000000000e+00j 7.962977576043e+00+0.000000000000e+00j -1.436326007861e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 2.773373845637e+03+0.000000000000e+00j -2.209454667325e+02+0.000000000000e+00j -9.408488419795e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 -9.858366119346e+02+0.000000000000e+00j -5.737601261443e+01+0.000000000000e+00j 9.265906162319e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 3.903028684481e+02+0.000000000000e+00j 9.813960230292e+02+0.000000000000e+00j -9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 3.181897710267e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 -1.483189426179e+03+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 1.029630366773e+03+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 4.526538638363e-14+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 2.417747879248e+03+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 1.062908549185e-13+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 -8.075401156421e+02+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j -3.550168733787e-14+0.000000000000e+00j 1.000000000000e-01 + 5.120703368607e+00 9.813960230264e+02+0.000000000000e+00j 3.903028684352e+02+0.000000000000e+00j 9.813960230264e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870169e+00 1.439610072411e+03+0.000000000000e+00j 3.181897710263e+03+0.000000000000e+00j 1.439610072411e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609831e+00 -1.539717814987e+02+0.000000000000e+00j -1.483189426185e+03+0.000000000000e+00j -1.539717814987e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509313e+00 -1.368428956439e+01+0.000000000000e+00j 3.405516824148e+02+0.000000000000e+00j 2.228955124172e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 1.664544017633e+03+0.000000000000e+00j 2.155507627740e+03+0.000000000000e+00j 1.737759702190e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 -8.232383415556e+01+0.000000000000e+00j -1.487864010841e+03+0.000000000000e+00j -4.074490724521e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 -1.937303341824e+02+0.000000000000e+00j -4.633734936205e-13+0.000000000000e+00j 2.336191913904e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 2.256075560900e+03+0.000000000000e+00j -2.985215235111e-13+0.000000000000e+00j 1.257665397688e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 -8.541533926821e+02+0.000000000000e+00j 7.257161023991e-14+0.000000000000e+00j -2.739789173907e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 3.405764006429e+02+0.000000000000e+00j -1.565824031930e+03+0.000000000000e+00j 8.165966244859e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.674226432371e+03+0.000000000000e+00j 1.466859757958e+03+0.000000000000e+00j 1.224827992548e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 -1.176647268028e+03+0.000000000000e+00j -2.837982416495e+02+0.000000000000e+00j -1.160191764816e+02+0.000000000000e+00j 1.000000000000e-01 + 6.171043712417e+00 -6.817503300509e+02+0.000000000000e+00j -6.817503300509e+02+0.000000000000e+00j -2.997162195563e-14+0.000000000000e+00j 1.000000000000e-01 + 7.739218566858e+00 1.880020318391e+03+0.000000000000e+00j 1.880020318391e+03+0.000000000000e+00j 8.265087051369e-14+0.000000000000e+00j 1.000000000000e-01 + 9.436766280851e+00 -1.091389803073e+03+0.000000000000e+00j -1.091389803073e+03+0.000000000000e+00j -4.798050128053e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 -1.565824031931e+03+0.000000000000e+00j 3.405764006424e+02+0.000000000000e+00j -8.165966244843e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.466859757945e+03+0.000000000000e+00j 1.674226432366e+03+0.000000000000e+00j -1.224827992545e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 -2.837982416423e+02+0.000000000000e+00j -1.176647268018e+03+0.000000000000e+00j 1.160191764878e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 5.559636815412e-14+0.000000000000e+00j -1.937303341826e+02+0.000000000000e+00j -2.336191913897e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 -2.195440099959e-14+0.000000000000e+00j 2.256075560905e+03+0.000000000000e+00j -1.257665397683e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 1.275477025879e-14+0.000000000000e+00j -8.541533926711e+02+0.000000000000e+00j 2.739789173931e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 3.405516824120e+02+0.000000000000e+00j -1.368428956505e+01+0.000000000000e+00j -2.228955124173e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 2.155507627736e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 -1.487864010833e+03+0.000000000000e+00j -8.232383415397e+01+0.000000000000e+00j 4.074490724537e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 -6.848654362207e+01+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 1.978995825490e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 -1.522129397376e+03+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.473510678253e+01+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j 1.347963952064e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 2.100426273090e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j -1.383957859744e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -1.600399579637e+03+0.000000000000e+00j 5.951882676209e+02+0.000000000000e+00j -9.430387165139e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 5.511984988163e+02+0.000000000000e+00j 1.170914963942e+03+0.000000000000e+00j 5.511984988163e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215531e+00 4.701433168860e+02+0.000000000000e+00j 3.520407372794e+03+0.000000000000e+00j 4.701433168860e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385185e+00 -9.131359997239e+02+0.000000000000e+00j -1.570279330093e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 7.962977578282e+00+0.000000000000e+00j 1.222381804895e+03+0.000000000000e+00j 1.436326007860e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 -2.209454667356e+02+0.000000000000e+00j 2.773373845625e+03+0.000000000000e+00j 9.408488419985e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 -5.737601261432e+01+0.000000000000e+00j -9.858366119372e+02+0.000000000000e+00j -9.265906162296e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 -6.035536967110e-14+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 -4.944161577763e-14+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 5.256993971911e-14+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 3.003939055115e+02+0.000000000000e+00j -6.244808826969e-15+0.000000000000e+00j 6.603071665027e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 2.203746984141e+03+0.000000000000e+00j -4.581310861134e-14+0.000000000000e+00j 4.844139311942e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 -1.902721067418e+03+0.000000000000e+00j 3.955516107147e-14+0.000000000000e+00j -4.182442897778e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 3.405764006424e+02+0.000000000000e+00j -1.565824031931e+03+0.000000000000e+00j -8.165966244843e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.674226432366e+03+0.000000000000e+00j 1.466859757945e+03+0.000000000000e+00j -1.224827992545e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 -1.176647268018e+03+0.000000000000e+00j -2.837982416423e+02+0.000000000000e+00j 1.160191764878e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015344e+00 -5.453827687685e+02+0.000000000000e+00j -5.453827687685e+02+0.000000000000e+00j -1.132852811782e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 9.798348926173e+02+0.000000000000e+00j 9.798348926173e+02+0.000000000000e+00j -2.474222927432e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806792e+00 -2.890782382813e+01+0.000000000000e+00j -2.890782382813e+01+0.000000000000e+00j -3.169800657809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 -4.109790152451e+02+0.000000000000e+00j -2.235944633121e+02+0.000000000000e+00j -2.297162805671e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -3.866751154420e+02+0.000000000000e+00j 1.651408145570e+03+0.000000000000e+00j -2.349960447270e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 7.231958063048e+02+0.000000000000e+00j 3.249726472808e+02+0.000000000000e+00j -8.193662174821e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 5.720297321478e-14+0.000000000000e+00j 5.517436734322e+01+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 -3.599105041853e-15+0.000000000000e+00j 2.407984538050e+03+0.000000000000e+00j -2.244897517883e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 6.326103461314e-15+0.000000000000e+00j 6.727877776973e+02+0.000000000000e+00j -9.608585950775e+02+0.000000000000e+00j 1.000000000000e-01 + 3.800968118281e+00 -5.165330952277e-18+0.000000000000e+00j 1.629999833653e+03+0.000000000000e+00j -1.629999833653e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580362e+00 -8.457007414379e-18+0.000000000000e+00j 2.668739100354e+03+0.000000000000e+00j -2.668739100354e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741046e+00 -7.097348661245e-18+0.000000000000e+00j 2.239677814266e+03+0.000000000000e+00j -2.239677814266e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 -4.048846605795e+02+0.000000000000e+00j 2.855339344597e+03+0.000000000000e+00j 1.167708252121e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 1.271754473743e+03+0.000000000000e+00j 2.754226153082e+03+0.000000000000e+00j -2.133281238364e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.439197506316e+03+0.000000000000e+00j 2.292540364990e+03+0.000000000000e+00j -1.815457579598e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614181e+00 1.611704542722e+02+0.000000000000e+00j 2.058840261207e+03+0.000000000000e+00j 1.611704542722e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627748e+00 -2.103459517990e+02+0.000000000000e+00j 3.440855856625e+03+0.000000000000e+00j -2.103459517990e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550816e+00 -1.305283557965e+03+0.000000000000e+00j 1.749125406727e+03+0.000000000000e+00j -1.305283557965e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 2.235944633121e+02+0.000000000000e+00j 2.297162805671e+03+0.000000000000e+00j 4.109790152452e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -1.651408145570e+03+0.000000000000e+00j 2.349960447270e+03+0.000000000000e+00j 3.866751154420e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -3.249726472808e+02+0.000000000000e+00j 8.193662174821e+02+0.000000000000e+00j -7.231958063048e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 1.937303341826e+02+0.000000000000e+00j 2.336191913897e+03+0.000000000000e+00j 5.561117454149e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 -2.256075560905e+03+0.000000000000e+00j 1.257665397683e+03+0.000000000000e+00j -2.194643013012e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 8.541533926711e+02+0.000000000000e+00j -2.739789173931e+02+0.000000000000e+00j 1.275303382656e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258316e+00 -8.299326877272e-16+0.000000000000e+00j 1.391753177018e+03+0.000000000000e+00j -1.391753177018e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726734e+00 -6.798601896037e-16+0.000000000000e+00j 1.140089543166e+03+0.000000000000e+00j -1.140089543166e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070240e+00 7.228770464487e-16+0.000000000000e+00j -1.212226534592e+03+0.000000000000e+00j 1.212226534592e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 -1.937303341826e+02+0.000000000000e+00j 4.714283101705e-13+0.000000000000e+00j -2.336191913897e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 2.256075560905e+03+0.000000000000e+00j 2.047196166226e-13+0.000000000000e+00j -1.257665397683e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 -8.541533926711e+02+0.000000000000e+00j -3.705807585546e-14+0.000000000000e+00j 2.739789173931e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 -2.235944633121e+02+0.000000000000e+00j -4.109790152451e+02+0.000000000000e+00j -2.297162805671e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 1.651408145570e+03+0.000000000000e+00j -3.866751154420e+02+0.000000000000e+00j -2.349960447270e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 3.249726472808e+02+0.000000000000e+00j 7.231958063048e+02+0.000000000000e+00j -8.193662174821e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614181e+00 -1.611704542722e+02+0.000000000000e+00j -1.611704542722e+02+0.000000000000e+00j -2.058840261207e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627748e+00 2.103459517990e+02+0.000000000000e+00j 2.103459517990e+02+0.000000000000e+00j -3.440855856625e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550816e+00 1.305283557965e+03+0.000000000000e+00j 1.305283557965e+03+0.000000000000e+00j -1.749125406727e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 4.048846605795e+02+0.000000000000e+00j -1.167708252121e+02+0.000000000000e+00j -2.855339344597e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -1.271754473743e+03+0.000000000000e+00j 2.133281238364e+03+0.000000000000e+00j -2.754226153082e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.439197506316e+03+0.000000000000e+00j 1.815457579598e+03+0.000000000000e+00j -2.292540364990e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 8.010663469828e+02+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 -1.061468362370e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 1.982424451087e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 -7.855473538139e-14+0.000000000000e+00j 3.326019148229e+03+0.000000000000e+00j 2.477472180394e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 -2.198768350179e-14+0.000000000000e+00j 3.069970706102e+03+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 -3.074882683382e-14+0.000000000000e+00j 3.909325828790e+03+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257150e+00 -6.887815764371e+01+0.000000000000e+00j 2.849906817861e+03+0.000000000000e+00j -6.887815764371e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924458e+00 -2.907876484989e+02+0.000000000000e+00j 3.298255165074e+03+0.000000000000e+00j -2.907876484989e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452502e+00 -1.173822321981e+03+0.000000000000e+00j 3.703285199893e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 3.958756311563e+02+0.000000000000e+00j 2.901107133228e+03+0.000000000000e+00j 7.247222087635e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -1.768140685534e+03+0.000000000000e+00j 2.455785279116e+03+0.000000000000e+00j 1.511537500763e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 -9.018856377917e+02+0.000000000000e+00j 2.557589353136e+03+0.000000000000e+00j 3.639464745298e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 2.235944633154e+02+0.000000000000e+00j 2.297162805673e+03+0.000000000000e+00j -4.109790152323e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -1.651408145580e+03+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j -3.866751154334e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 -3.249726472798e+02+0.000000000000e+00j 8.193662174838e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 7.962977576046e+00+0.000000000000e+00j 1.222381804894e+03+0.000000000000e+00j -1.436326007861e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 -2.209454667325e+02+0.000000000000e+00j 2.773373845637e+03+0.000000000000e+00j -9.408488419795e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 -5.737601261443e+01+0.000000000000e+00j -9.858366119346e+02+0.000000000000e+00j 9.265906162319e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 -1.368428956506e+01+0.000000000000e+00j 3.405516824120e+02+0.000000000000e+00j -2.228955124173e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 1.664544017648e+03+0.000000000000e+00j 2.155507627736e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 -8.232383415397e+01+0.000000000000e+00j -1.487864010833e+03+0.000000000000e+00j 4.074490724537e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 5.517436734321e+01+0.000000000000e+00j 5.306936911409e-13+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 2.407984538050e+03+0.000000000000e+00j 3.990767230459e-13+0.000000000000e+00j -2.244897517883e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 6.727877776973e+02+0.000000000000e+00j 1.782521561667e-13+0.000000000000e+00j -9.608585950775e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 -1.167708252122e+02+0.000000000000e+00j 4.048846605795e+02+0.000000000000e+00j -2.855339344597e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.133281238364e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j -2.754226153082e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.815457579598e+03+0.000000000000e+00j 1.439197506316e+03+0.000000000000e+00j -2.292540364990e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311364e+00 3.541150241790e+02+0.000000000000e+00j 3.541150241790e+02+0.000000000000e+00j -3.270970228804e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453628e+00 4.336803003525e+02+0.000000000000e+00j 4.336803003525e+02+0.000000000000e+00j -2.570858259196e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593150e+00 2.466222371691e+03+0.000000000000e+00j 2.466222371691e+03+0.000000000000e+00j -3.141814155966e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175694e+00 1.195877589778e+03+0.000000000000e+00j 1.195877589778e+03+0.000000000000e+00j -1.195877589778e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175695e+00 1.195877589768e+03+0.000000000000e+00j 1.195877589768e+03+0.000000000000e+00j -1.195877589768e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501171e+00 2.632351875672e+03+0.000000000000e+00j 2.632351875672e+03+0.000000000000e+00j -2.632351875672e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 3.541150241882e+02+0.000000000000e+00j 3.270970228804e+03+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 4.336803003413e+02+0.000000000000e+00j 2.570858259195e+03+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 2.466222371689e+03+0.000000000000e+00j 3.141814155967e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 6.887815763755e+01+0.000000000000e+00j 2.849906817858e+03+0.000000000000e+00j -6.887815763755e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 2.907876485096e+02+0.000000000000e+00j 3.298255165072e+03+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 1.173822321981e+03+0.000000000000e+00j 3.703285199892e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 5.162878828392e+00 -5.659317535582e-14+0.000000000000e+00j 2.574596465599e+03+0.000000000000e+00j 5.659317535603e-14+0.000000000000e+00j 1.000000000000e-01 + 5.162878828401e+00 -5.659317535593e-14+0.000000000000e+00j 2.574596465595e+03+0.000000000000e+00j 5.659317535590e-14+0.000000000000e+00j 1.000000000000e-01 + 8.281247231959e+00 -7.609702299110e-14+0.000000000000e+00j 3.461886087898e+03+0.000000000000e+00j 7.609702299089e-14+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 1.955720814232e+02+0.000000000000e+00j 1.931571181618e+03+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 -8.360286832812e+02+0.000000000000e+00j 2.327628679175e+03+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 -1.902976282779e+02+0.000000000000e+00j 2.153754821739e+03+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 5.453827687707e+02+0.000000000000e+00j 1.132852811783e+03+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 -9.798348926358e+02+0.000000000000e+00j 2.474222927441e+03+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 2.890782382811e+01+0.000000000000e+00j 3.169800657838e+02+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 9.221540938131e+02+0.000000000000e+00j 4.132400085451e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 1.118741331148e+02+0.000000000000e+00j 2.947829831354e+03+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 -4.932098470677e+00+0.000000000000e+00j -1.739754380415e+03+0.000000000000e+00j 4.932098470677e+00+0.000000000000e+00j 1.000000000000e-01 + 5.217363486844e+00 1.218893138247e+03+0.000000000000e+00j 2.192471663369e-13+0.000000000000e+00j -1.218893138247e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616714e+00 2.067573412721e+03+0.000000000000e+00j 3.719026694865e-13+0.000000000000e+00j -2.067573412721e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630527e+00 -4.039473572554e+02+0.000000000000e+00j -7.265962096967e-14+0.000000000000e+00j 4.039473572554e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 1.362258017177e+03+0.000000000000e+00j 6.848654362207e+01+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 2.277392898273e+03+0.000000000000e+00j -1.978995825490e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 9.309665228201e+02+0.000000000000e+00j 1.522129397376e+03+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 1.287469747220e+03+0.000000000000e+00j 6.948254471676e+02+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 2.218454428379e+03+0.000000000000e+00j -1.725508655138e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 2.011916748813e+03+0.000000000000e+00j 2.139081422557e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 3.270970228804e+03+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 2.570858259195e+03+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 3.141814155967e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422196e+00 1.677827869086e+03+0.000000000000e+00j 1.677827869086e+03+0.000000000000e+00j -8.010663469824e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719796e+00 2.675742073388e+03+0.000000000000e+00j 2.675742073388e+03+0.000000000000e+00j 1.061468362377e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523474e+00 3.295829288950e+03+0.000000000000e+00j 3.295829288950e+03+0.000000000000e+00j -1.982424451074e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 -2.477472180376e+02+0.000000000000e+00j 3.326019148224e+03+0.000000000000e+00j 6.766465559394e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 2.070280719288e+03+0.000000000000e+00j 3.069970706092e+03+0.000000000000e+00j 1.129898041029e-13+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 2.511191789093e+03+0.000000000000e+00j 3.909325828783e+03+0.000000000000e+00j 1.411318178507e-13+0.000000000000e+00j 1.000000000000e-01 + 4.486945257151e+00 6.887815764670e+01+0.000000000000e+00j 2.849906817857e+03+0.000000000000e+00j 6.887815764670e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924455e+00 2.907876484991e+02+0.000000000000e+00j 3.298255165069e+03+0.000000000000e+00j 2.907876484991e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452509e+00 1.173822321991e+03+0.000000000000e+00j 3.703285199880e+03+0.000000000000e+00j 1.173822321991e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 -5.507094693915e-14+0.000000000000e+00j 2.901107133229e+03+0.000000000000e+00j -3.958756311590e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -9.283650258301e-14+0.000000000000e+00j 2.455785279109e+03+0.000000000000e+00j 1.768140685530e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 -7.603830776159e-14+0.000000000000e+00j 2.557589353128e+03+0.000000000000e+00j 9.018856377877e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 4.109790152335e+02+0.000000000000e+00j 2.297162805675e+03+0.000000000000e+00j -2.235944633189e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 3.866751154283e+02+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j 1.651408145566e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -7.231958063081e+02+0.000000000000e+00j 8.193662174822e+02+0.000000000000e+00j 3.249726472726e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.436326007856e+03+0.000000000000e+00j 1.222381804899e+03+0.000000000000e+00j -7.962977582707e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 9.408488419744e+02+0.000000000000e+00j 2.773373845643e+03+0.000000000000e+00j 2.209454667211e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 -9.265906162360e+02+0.000000000000e+00j -9.858366119327e+02+0.000000000000e+00j 5.737601261161e+01+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 2.228955124167e+03+0.000000000000e+00j 3.405516824254e+02+0.000000000000e+00j 1.368428955981e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 1.737759702183e+03+0.000000000000e+00j 2.155507627743e+03+0.000000000000e+00j -1.664544017651e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 -4.074490724557e+02+0.000000000000e+00j -1.487864010830e+03+0.000000000000e+00j 8.232383415304e+01+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 2.658278854984e+03+0.000000000000e+00j -4.422353879147e-14+0.000000000000e+00j -5.517436734322e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 2.244897517883e+03+0.000000000000e+00j 4.350958449511e-13+0.000000000000e+00j -2.407984538050e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 9.608585950775e+02+0.000000000000e+00j 1.146293253740e-13+0.000000000000e+00j -6.727877776973e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 2.855339344604e+03+0.000000000000e+00j 4.048846605874e+02+0.000000000000e+00j 1.167708252163e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.754226153081e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j -2.133281238368e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 2.292540364991e+03+0.000000000000e+00j 1.439197506317e+03+0.000000000000e+00j -1.815457579596e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 2.849906817858e+03+0.000000000000e+00j 6.887815763756e+01+0.000000000000e+00j -6.887815763756e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 3.298255165072e+03+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 3.703285199892e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 3.326019148224e+03+0.000000000000e+00j -2.477472180376e+02+0.000000000000e+00j 6.766465559394e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 3.069970706092e+03+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j 1.129898041029e-13+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 3.909325828783e+03+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j 1.411318178507e-13+0.000000000000e+00j 1.000000000000e-01 + 3.051886422199e+00 1.677827869084e+03+0.000000000000e+00j 1.677827869084e+03+0.000000000000e+00j 8.010663469957e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719795e+00 2.675742073394e+03+0.000000000000e+00j 2.675742073394e+03+0.000000000000e+00j -1.061468362371e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523485e+00 3.295829288942e+03+0.000000000000e+00j 3.295829288942e+03+0.000000000000e+00j 1.982424451106e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311366e+00 3.541150241892e+02+0.000000000000e+00j 3.270970228798e+03+0.000000000000e+00j 3.541150241892e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 4.336803003555e+02+0.000000000000e+00j 2.570858259189e+03+0.000000000000e+00j 4.336803003555e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593164e+00 2.466222371692e+03+0.000000000000e+00j 3.141814155950e+03+0.000000000000e+00j 2.466222371692e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 4.048846605956e+02+0.000000000000e+00j 2.855339344593e+03+0.000000000000e+00j -1.167708252118e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 -1.271754473739e+03+0.000000000000e+00j 2.754226153073e+03+0.000000000000e+00j 2.133281238363e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 1.439197506327e+03+0.000000000000e+00j 2.292540364973e+03+0.000000000000e+00j 1.815457579586e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 -5.964508837937e-14+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j 5.517436734186e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 -1.022614928906e-13+0.000000000000e+00j 2.244897517877e+03+0.000000000000e+00j 2.407984538040e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 -3.590553267715e-14+0.000000000000e+00j 9.608585950688e+02+0.000000000000e+00j 6.727877776834e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 3.405516824148e+02+0.000000000000e+00j 2.228955124172e+03+0.000000000000e+00j -1.368428956439e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 2.155507627740e+03+0.000000000000e+00j 1.737759702190e+03+0.000000000000e+00j 1.664544017633e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 -1.487864010841e+03+0.000000000000e+00j -4.074490724521e+02+0.000000000000e+00j -8.232383415556e+01+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.222381804895e+03+0.000000000000e+00j 1.436326007860e+03+0.000000000000e+00j 7.962977578284e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 2.773373845625e+03+0.000000000000e+00j 9.408488419984e+02+0.000000000000e+00j -2.209454667356e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 -9.858366119372e+02+0.000000000000e+00j -9.265906162296e+02+0.000000000000e+00j -5.737601261432e+01+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 2.297162805671e+03+0.000000000000e+00j 4.109790152451e+02+0.000000000000e+00j 2.235944633121e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 2.349960447270e+03+0.000000000000e+00j 3.866751154420e+02+0.000000000000e+00j -1.651408145570e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 8.193662174821e+02+0.000000000000e+00j -7.231958063048e+02+0.000000000000e+00j -3.249726472808e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 2.901107133228e+03+0.000000000000e+00j -1.395130085044e-13+0.000000000000e+00j 3.958756311563e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 2.455785279116e+03+0.000000000000e+00j 3.026984737295e-13+0.000000000000e+00j -1.768140685534e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 2.557589353136e+03+0.000000000000e+00j 1.272708246782e-13+0.000000000000e+00j -9.018856377917e+02+0.000000000000e+00j 1.000000000000e-01 + 5.162878828392e+00 2.574596465599e+03+0.000000000000e+00j -5.352259962500e-14+0.000000000000e+00j 5.659317535582e-14+0.000000000000e+00j 1.000000000000e-01 + 5.162878828401e+00 2.574596465595e+03+0.000000000000e+00j -5.352259962481e-14+0.000000000000e+00j 5.659317535593e-14+0.000000000000e+00j 1.000000000000e-01 + 8.281247231959e+00 3.461886087898e+03+0.000000000000e+00j -7.196822706245e-14+0.000000000000e+00j 7.609702299110e-14+0.000000000000e+00j 1.000000000000e-01 + 4.486945257151e+00 2.849906817857e+03+0.000000000000e+00j 6.887815764670e+01+0.000000000000e+00j 6.887815764670e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924455e+00 3.298255165069e+03+0.000000000000e+00j 2.907876484991e+02+0.000000000000e+00j 2.907876484991e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452509e+00 3.703285199880e+03+0.000000000000e+00j 1.173822321991e+03+0.000000000000e+00j 1.173822321991e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311366e+00 3.270970228798e+03+0.000000000000e+00j 3.541150241892e+02+0.000000000000e+00j 3.541150241892e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 2.570858259189e+03+0.000000000000e+00j 4.336803003555e+02+0.000000000000e+00j 4.336803003555e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593164e+00 3.141814155950e+03+0.000000000000e+00j 2.466222371692e+03+0.000000000000e+00j 2.466222371692e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175701e+00 1.195877589777e+03+0.000000000000e+00j 1.195877589777e+03+0.000000000000e+00j 1.195877589777e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175701e+00 1.195877589777e+03+0.000000000000e+00j 1.195877589777e+03+0.000000000000e+00j 1.195877589777e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501187e+00 2.632351875665e+03+0.000000000000e+00j 2.632351875665e+03+0.000000000000e+00j 2.632351875665e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953789e+00 6.948254471858e+02+0.000000000000e+00j 1.287469747217e+03+0.000000000000e+00j 1.287469747217e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351294e+00 -1.725508655129e+03+0.000000000000e+00j 2.218454428373e+03+0.000000000000e+00j 2.218454428373e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594732e+00 2.139081422565e+03+0.000000000000e+00j 2.011916748796e+03+0.000000000000e+00j 2.011916748796e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909403e+00 6.848654363584e+01+0.000000000000e+00j 1.362258017173e+03+0.000000000000e+00j 1.362258017173e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834566e+00 -1.978995825481e+03+0.000000000000e+00j 2.277392898267e+03+0.000000000000e+00j 2.277392898267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902966e+00 1.522129397386e+03+0.000000000000e+00j 9.309665228030e+02+0.000000000000e+00j 9.309665228030e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217363486838e+00 -5.358203645235e-14+0.000000000000e+00j 1.218893138245e+03+0.000000000000e+00j 1.218893138245e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616706e+00 -9.088966907112e-14+0.000000000000e+00j 2.067573412718e+03+0.000000000000e+00j 2.067573412718e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630519e+00 1.775735816788e-14+0.000000000000e+00j -4.039473572620e+02+0.000000000000e+00j -4.039473572620e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 4.132400085402e+02+0.000000000000e+00j 9.221540938127e+02+0.000000000000e+00j 9.221540938127e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253359e+00 2.947829831349e+03+0.000000000000e+00j 1.118741331224e+02+0.000000000000e+00j 1.118741331224e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744000e+00 -1.739754380418e+03+0.000000000000e+00j -4.932098469478e+00+0.000000000000e+00j -4.932098469478e+00+0.000000000000e+00j 1.000000000000e-01 + 5.886471015344e+00 1.132852811782e+03+0.000000000000e+00j 5.453827687685e+02+0.000000000000e+00j 5.453827687685e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 2.474222927432e+03+0.000000000000e+00j -9.798348926173e+02+0.000000000000e+00j -9.798348926173e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806792e+00 3.169800657809e+02+0.000000000000e+00j 2.890782382813e+01+0.000000000000e+00j 2.890782382813e+01+0.000000000000e+00j 1.000000000000e-01 + 5.686212080838e+00 1.931571181623e+03+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842365e+00 2.327628679167e+03+0.000000000000e+00j -8.360286832711e+02+0.000000000000e+00j -8.360286832711e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225688e+00 2.153754821741e+03+0.000000000000e+00j -1.902976282757e+02+0.000000000000e+00j -1.902976282757e+02+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 1.931571181618e+03+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 2.327628679175e+03+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 2.153754821740e+03+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 2.901107133229e+03+0.000000000000e+00j 1.889232278849e-14+0.000000000000e+00j -3.958756311590e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 2.455785279109e+03+0.000000000000e+00j -4.048038048095e-13+0.000000000000e+00j 1.768140685530e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 2.557589353128e+03+0.000000000000e+00j -2.336089112722e-13+0.000000000000e+00j 9.018856377877e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 2.855339344593e+03+0.000000000000e+00j 4.048846605956e+02+0.000000000000e+00j -1.167708252118e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 2.754226153073e+03+0.000000000000e+00j -1.271754473739e+03+0.000000000000e+00j 2.133281238363e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 2.292540364973e+03+0.000000000000e+00j 1.439197506327e+03+0.000000000000e+00j 1.815457579586e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953789e+00 1.287469747217e+03+0.000000000000e+00j 6.948254471858e+02+0.000000000000e+00j 1.287469747217e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351294e+00 2.218454428373e+03+0.000000000000e+00j -1.725508655129e+03+0.000000000000e+00j 2.218454428373e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594732e+00 2.011916748796e+03+0.000000000000e+00j 2.139081422565e+03+0.000000000000e+00j 2.011916748796e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700620e+00 1.089702534039e+02+0.000000000000e+00j 1.089702534039e+02+0.000000000000e+00j 1.693883617047e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605928e+00 -3.331454318132e+01+0.000000000000e+00j -3.331454318132e+01+0.000000000000e+00j 2.983841276852e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072674e+00 1.792515640352e+03+0.000000000000e+00j 1.792515640352e+03+0.000000000000e+00j 1.492388034624e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 -2.473510677022e+01+0.000000000000e+00j -1.347963952060e+02+0.000000000000e+00j 2.107875696037e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 -2.100426273073e+03+0.000000000000e+00j 1.383957859739e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 1.600399579646e+03+0.000000000000e+00j 9.430387165019e+02+0.000000000000e+00j 5.951882676022e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -3.405516824124e+02+0.000000000000e+00j -1.368428956543e+01+0.000000000000e+00j 2.228955124171e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 -2.155507627730e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 1.487864010835e+03+0.000000000000e+00j -8.232383416614e+01+0.000000000000e+00j -4.074490724641e+02+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 -4.208206821108e-14+0.000000000000e+00j -1.994915061874e+02+0.000000000000e+00j 2.114543049926e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 6.425857051679e-14+0.000000000000e+00j -1.407377764408e+03+0.000000000000e+00j -1.516378160767e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 -6.832167937031e-14+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j 1.161560904478e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 8.165966244843e+02+0.000000000000e+00j -3.405764006424e+02+0.000000000000e+00j 1.565824031931e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.224827992545e+03+0.000000000000e+00j -1.674226432366e+03+0.000000000000e+00j -1.466859757945e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 -1.160191764878e+02+0.000000000000e+00j 1.176647268018e+03+0.000000000000e+00j 2.837982416423e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 1.738978129230e+03+0.000000000000e+00j -1.389460562305e+02+0.000000000000e+00j 3.517090809638e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 1.358509986833e+03+0.000000000000e+00j -1.627322748360e+03+0.000000000000e+00j -5.908874633701e-15+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 1.129334593096e+03+0.000000000000e+00j 4.535788174314e+02+0.000000000000e+00j 3.479461632554e-14+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 1.132852811783e+03+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 2.474222927441e+03+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 3.169800657838e+02+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 2.297162805675e+03+0.000000000000e+00j 4.109790152335e+02+0.000000000000e+00j -2.235944633189e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 2.349960447274e+03+0.000000000000e+00j 3.866751154283e+02+0.000000000000e+00j 1.651408145566e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 8.193662174822e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j 3.249726472726e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 2.658278854984e+03+0.000000000000e+00j -6.630096222960e-14+0.000000000000e+00j 5.517436734185e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 2.244897517877e+03+0.000000000000e+00j -5.284329971235e-13+0.000000000000e+00j 2.407984538040e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 9.608585950688e+02+0.000000000000e+00j -1.545793917739e-13+0.000000000000e+00j 6.727877776834e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909403e+00 1.362258017173e+03+0.000000000000e+00j 6.848654363585e+01+0.000000000000e+00j 1.362258017173e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834566e+00 2.277392898267e+03+0.000000000000e+00j -1.978995825481e+03+0.000000000000e+00j 2.277392898267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902966e+00 9.309665228030e+02+0.000000000000e+00j 1.522129397386e+03+0.000000000000e+00j 9.309665228030e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 -1.347963952060e+02+0.000000000000e+00j -2.473510677021e+01+0.000000000000e+00j 2.107875696037e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 1.383957859739e+03+0.000000000000e+00j -2.100426273073e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 9.430387165019e+02+0.000000000000e+00j 1.600399579646e+03+0.000000000000e+00j 5.951882676022e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 -5.511984988142e+02+0.000000000000e+00j -5.511984988142e+02+0.000000000000e+00j 1.170914963937e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215538e+00 -4.701433168732e+02+0.000000000000e+00j -4.701433168732e+02+0.000000000000e+00j 3.520407372796e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385183e+00 9.131359997229e+02+0.000000000000e+00j 9.131359997229e+02+0.000000000000e+00j -1.570279330276e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.436326007859e+03+0.000000000000e+00j -7.962977575716e+00+0.000000000000e+00j 1.222381804892e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -9.408488419780e+02+0.000000000000e+00j 2.209454667337e+02+0.000000000000e+00j 2.773373845634e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 9.265906162318e+02+0.000000000000e+00j 5.737601260710e+01+0.000000000000e+00j -9.858366119468e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258313e+00 -1.391753177029e+03+0.000000000000e+00j -2.495146680582e-13+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726731e+00 -1.140089543169e+03+0.000000000000e+00j -2.043962022977e-13+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070229e+00 1.212226534583e+03+0.000000000000e+00j 2.173289821645e-13+0.000000000000e+00j -1.212226534583e+03+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 6.603071665027e-15+0.000000000000e+00j -3.003939055115e+02+0.000000000000e+00j -6.603071664925e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 4.844139311901e-14+0.000000000000e+00j -2.203746984141e+03+0.000000000000e+00j -4.844139311983e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 -4.182442897778e-14+0.000000000000e+00j 1.902721067418e+03+0.000000000000e+00j 4.182442897737e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 8.165966244787e+02+0.000000000000e+00j -3.405764006383e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.224827992550e+03+0.000000000000e+00j -1.674226432375e+03+0.000000000000e+00j 1.466859757964e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 -1.160191764851e+02+0.000000000000e+00j 1.176647268019e+03+0.000000000000e+00j -2.837982416353e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 4.132400085451e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 2.947829831354e+03+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 -1.739754380415e+03+0.000000000000e+00j -4.932098470680e+00+0.000000000000e+00j 4.932098470680e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.222381804899e+03+0.000000000000e+00j 1.436326007856e+03+0.000000000000e+00j -7.962977582709e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.773373845643e+03+0.000000000000e+00j 9.408488419744e+02+0.000000000000e+00j 2.209454667211e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 -9.858366119327e+02+0.000000000000e+00j -9.265906162360e+02+0.000000000000e+00j 5.737601261161e+01+0.000000000000e+00j 1.000000000000e-01 + 5.505235509313e+00 2.228955124172e+03+0.000000000000e+00j 3.405516824148e+02+0.000000000000e+00j -1.368428956439e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 1.737759702190e+03+0.000000000000e+00j 2.155507627740e+03+0.000000000000e+00j 1.664544017633e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 -4.074490724521e+02+0.000000000000e+00j -1.487864010841e+03+0.000000000000e+00j -8.232383415556e+01+0.000000000000e+00j 1.000000000000e-01 + 5.217363486838e+00 1.218893138245e+03+0.000000000000e+00j -2.699256554091e-13+0.000000000000e+00j 1.218893138245e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616706e+00 2.067573412718e+03+0.000000000000e+00j -4.578671345525e-13+0.000000000000e+00j 2.067573412718e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630519e+00 -4.039473572620e+02+0.000000000000e+00j 8.945472883516e-14+0.000000000000e+00j -4.039473572620e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -1.368428956542e+01+0.000000000000e+00j -3.405516824124e+02+0.000000000000e+00j 2.228955124171e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 1.664544017648e+03+0.000000000000e+00j -2.155507627730e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 -8.232383416614e+01+0.000000000000e+00j 1.487864010835e+03+0.000000000000e+00j -4.074490724641e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -7.962977575724e+00+0.000000000000e+00j -1.436326007859e+03+0.000000000000e+00j 1.222381804892e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.209454667337e+02+0.000000000000e+00j -9.408488419780e+02+0.000000000000e+00j 2.773373845634e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 5.737601260710e+01+0.000000000000e+00j 9.265906162318e+02+0.000000000000e+00j -9.858366119468e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 -9.221540938118e+02+0.000000000000e+00j -9.221540938118e+02+0.000000000000e+00j 4.132400085402e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253368e+00 -1.118741331111e+02+0.000000000000e+00j -1.118741331111e+02+0.000000000000e+00j 2.947829831351e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710743991e+00 4.932098463223e+00+0.000000000000e+00j 4.932098463223e+00+0.000000000000e+00j -1.739754380424e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 -2.114543049926e+03+0.000000000000e+00j 1.994915061874e+02+0.000000000000e+00j -4.209546982558e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 1.516378160767e+03+0.000000000000e+00j 1.407377764408e+03+0.000000000000e+00j 6.426818105996e-14+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 -1.161560904478e+03+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j -6.832904117004e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 -1.391753177029e+03+0.000000000000e+00j 3.073802396661e-13+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 -1.140089543169e+03+0.000000000000e+00j 2.517982375066e-13+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 1.212226534588e+03+0.000000000000e+00j -2.677302907453e-13+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 5.085226419478e-14+0.000000000000e+00j -1.994915061823e+02+0.000000000000e+00j -2.114543049917e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 -2.386368251168e-15+0.000000000000e+00j -1.407377764407e+03+0.000000000000e+00j 1.516378160774e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 -1.727098679786e-14+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j -1.161560904470e+03+0.000000000000e+00j 1.000000000000e-01 + 5.217363486844e+00 -3.862568771178e-18+0.000000000000e+00j 1.218893138247e+03+0.000000000000e+00j -1.218893138247e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616714e+00 -6.551964438533e-18+0.000000000000e+00j 2.067573412721e+03+0.000000000000e+00j -2.067573412721e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630527e+00 1.280074846913e-18+0.000000000000e+00j -4.039473572554e+02+0.000000000000e+00j 4.039473572554e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 3.405516824254e+02+0.000000000000e+00j 2.228955124167e+03+0.000000000000e+00j 1.368428955981e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 2.155507627743e+03+0.000000000000e+00j 1.737759702183e+03+0.000000000000e+00j -1.664544017651e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 -1.487864010830e+03+0.000000000000e+00j -4.074490724557e+02+0.000000000000e+00j 8.232383415304e+01+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.436326007860e+03+0.000000000000e+00j 1.222381804895e+03+0.000000000000e+00j 7.962977578282e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 9.408488419985e+02+0.000000000000e+00j 2.773373845625e+03+0.000000000000e+00j -2.209454667356e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 -9.265906162296e+02+0.000000000000e+00j -9.858366119372e+02+0.000000000000e+00j -5.737601261432e+01+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 9.221540938127e+02+0.000000000000e+00j 4.132400085402e+02+0.000000000000e+00j 9.221540938127e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253359e+00 1.118741331224e+02+0.000000000000e+00j 2.947829831349e+03+0.000000000000e+00j 1.118741331224e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744000e+00 -4.932098469481e+00+0.000000000000e+00j -1.739754380418e+03+0.000000000000e+00j -4.932098469481e+00+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 -1.994915061874e+02+0.000000000000e+00j -4.189085341701e-13+0.000000000000e+00j 2.114543049926e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 -1.407377764408e+03+0.000000000000e+00j 3.326387214441e-13+0.000000000000e+00j -1.516378160767e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 1.946935955182e+03+0.000000000000e+00j -2.728673184233e-13+0.000000000000e+00j 1.161560904478e+03+0.000000000000e+00j 1.000000000000e-01 + 6.499026258313e+00 8.299326877334e-16+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726731e+00 6.798601896056e-16+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070229e+00 -7.228770464433e-16+0.000000000000e+00j 1.212226534583e+03+0.000000000000e+00j -1.212226534583e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 1.994915061874e+02+0.000000000000e+00j -2.114543049926e+03+0.000000000000e+00j -4.209546982558e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 1.407377764408e+03+0.000000000000e+00j 1.516378160767e+03+0.000000000000e+00j 6.426818105996e-14+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 -1.946935955182e+03+0.000000000000e+00j -1.161560904478e+03+0.000000000000e+00j -6.832904117004e-14+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 -9.221540938127e+02+0.000000000000e+00j -9.221540938127e+02+0.000000000000e+00j -4.132400085402e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253359e+00 -1.118741331224e+02+0.000000000000e+00j -1.118741331224e+02+0.000000000000e+00j -2.947829831349e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710744000e+00 4.932098469482e+00+0.000000000000e+00j 4.932098469482e+00+0.000000000000e+00j 1.739754380418e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.436326007860e+03+0.000000000000e+00j -7.962977578278e+00+0.000000000000e+00j -1.222381804895e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 -9.408488419985e+02+0.000000000000e+00j 2.209454667356e+02+0.000000000000e+00j -2.773373845625e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 9.265906162296e+02+0.000000000000e+00j 5.737601261432e+01+0.000000000000e+00j 9.858366119372e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 -3.405516824254e+02+0.000000000000e+00j -1.368428955981e+01+0.000000000000e+00j -2.228955124167e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 -2.155507627743e+03+0.000000000000e+00j 1.664544017651e+03+0.000000000000e+00j -1.737759702183e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 1.487864010830e+03+0.000000000000e+00j -8.232383415304e+01+0.000000000000e+00j 4.074490724557e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 6.848654362207e+01+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 -1.978995825490e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 1.522129397376e+03+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 -5.722017061889e-14+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j -5.517436734321e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 3.569615866223e-15+0.000000000000e+00j 2.244897517883e+03+0.000000000000e+00j -2.407984538050e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 -6.336457234320e-15+0.000000000000e+00j 9.608585950775e+02+0.000000000000e+00j -6.727877776973e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 4.109790152451e+02+0.000000000000e+00j 2.297162805671e+03+0.000000000000e+00j 2.235944633121e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 3.866751154420e+02+0.000000000000e+00j 2.349960447270e+03+0.000000000000e+00j -1.651408145570e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -7.231958063048e+02+0.000000000000e+00j 8.193662174821e+02+0.000000000000e+00j -3.249726472808e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015344e+00 5.453827687685e+02+0.000000000000e+00j 1.132852811782e+03+0.000000000000e+00j 5.453827687685e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 -9.798348926173e+02+0.000000000000e+00j 2.474222927432e+03+0.000000000000e+00j -9.798348926173e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806792e+00 2.890782382813e+01+0.000000000000e+00j 3.169800657809e+02+0.000000000000e+00j 2.890782382813e+01+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 -3.405764006424e+02+0.000000000000e+00j 8.165966244843e+02+0.000000000000e+00j 1.565824031931e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.674226432366e+03+0.000000000000e+00j 1.224827992545e+03+0.000000000000e+00j -1.466859757945e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 1.176647268018e+03+0.000000000000e+00j -1.160191764878e+02+0.000000000000e+00j 2.837982416423e+02+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 -3.003939055115e+02+0.000000000000e+00j 6.244808827275e-15+0.000000000000e+00j -6.603071664823e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 -2.203746984141e+03+0.000000000000e+00j 4.581310861114e-14+0.000000000000e+00j -4.844139311901e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 1.902721067418e+03+0.000000000000e+00j -3.955516107126e-14+0.000000000000e+00j 4.182442897778e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 6.035536967115e-14+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 4.944161577763e-14+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 -5.256993971890e-14+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -7.962977578283e+00+0.000000000000e+00j -1.436326007860e+03+0.000000000000e+00j -1.222381804895e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 2.209454667356e+02+0.000000000000e+00j -9.408488419984e+02+0.000000000000e+00j -2.773373845625e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 5.737601261432e+01+0.000000000000e+00j 9.265906162296e+02+0.000000000000e+00j 9.858366119372e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 -5.511984988163e+02+0.000000000000e+00j -5.511984988163e+02+0.000000000000e+00j -1.170914963942e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215531e+00 -4.701433168860e+02+0.000000000000e+00j -4.701433168860e+02+0.000000000000e+00j -3.520407372794e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385185e+00 9.131359997239e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.570279330093e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.473510678253e+01+0.000000000000e+00j -1.347963952064e+02+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 -2.100426273090e+03+0.000000000000e+00j 1.383957859744e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 1.600399579637e+03+0.000000000000e+00j 9.430387165139e+02+0.000000000000e+00j -5.951882676210e+02+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 6.948254471676e+02+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 -1.725508655138e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 2.139081422557e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 4.048846605874e+02+0.000000000000e+00j 2.855339344604e+03+0.000000000000e+00j 1.167708252163e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -1.271754473743e+03+0.000000000000e+00j 2.754226153081e+03+0.000000000000e+00j -2.133281238368e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.439197506317e+03+0.000000000000e+00j 2.292540364991e+03+0.000000000000e+00j -1.815457579596e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 -7.246971188759e-14+0.000000000000e+00j 2.901107133228e+03+0.000000000000e+00j 3.958756311563e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -1.512658118036e-14+0.000000000000e+00j 2.455785279116e+03+0.000000000000e+00j -1.768140685534e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 -3.640036345111e-14+0.000000000000e+00j 2.557589353136e+03+0.000000000000e+00j -9.018856377917e+02+0.000000000000e+00j 1.000000000000e-01 + 5.686212080838e+00 1.955720814199e+02+0.000000000000e+00j 1.931571181623e+03+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842365e+00 -8.360286832711e+02+0.000000000000e+00j 2.327628679167e+03+0.000000000000e+00j -8.360286832711e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225688e+00 -1.902976282757e+02+0.000000000000e+00j 2.153754821741e+03+0.000000000000e+00j -1.902976282757e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 -1.389460562305e+02+0.000000000000e+00j 1.738978129230e+03+0.000000000000e+00j 3.517090809638e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 -1.627322748360e+03+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j -5.908874633701e-15+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 4.535788174314e+02+0.000000000000e+00j 1.129334593096e+03+0.000000000000e+00j 3.479461632554e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 -3.405764006383e+02+0.000000000000e+00j 8.165966244787e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.674226432375e+03+0.000000000000e+00j 1.224827992550e+03+0.000000000000e+00j 1.466859757964e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 1.176647268019e+03+0.000000000000e+00j -1.160191764851e+02+0.000000000000e+00j -2.837982416353e+02+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 -1.994915061823e+02+0.000000000000e+00j 4.272028856579e-13+0.000000000000e+00j -2.114543049917e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 -1.407377764407e+03+0.000000000000e+00j -2.741235190650e-13+0.000000000000e+00j 1.516378160774e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 1.946935955182e+03+0.000000000000e+00j 1.919186532488e-13+0.000000000000e+00j -1.161560904470e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 -1.368428955981e+01+0.000000000000e+00j -3.405516824254e+02+0.000000000000e+00j -2.228955124167e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 1.664544017651e+03+0.000000000000e+00j -2.155507627743e+03+0.000000000000e+00j -1.737759702183e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 -8.232383415304e+01+0.000000000000e+00j 1.487864010830e+03+0.000000000000e+00j 4.074490724557e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -1.347963952064e+02+0.000000000000e+00j -2.473510678252e+01+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 1.383957859744e+03+0.000000000000e+00j -2.100426273090e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 9.430387165139e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j -5.951882676210e+02+0.000000000000e+00j 1.000000000000e-01 + 4.588935700616e+00 1.089702534022e+02+0.000000000000e+00j 1.089702534022e+02+0.000000000000e+00j -1.693883617055e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605921e+00 -3.331454319420e+01+0.000000000000e+00j -3.331454319420e+01+0.000000000000e+00j -2.983841276854e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.792515640355e+03+0.000000000000e+00j 1.792515640355e+03+0.000000000000e+00j -1.492388034645e+03+0.000000000000e+00j 1.000000000000e-01 + 4.408824939127e+00 6.440774382714e+02+0.000000000000e+00j 6.440774382714e+02+0.000000000000e+00j -6.440774382714e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939133e+00 6.440774382617e+02+0.000000000000e+00j 6.440774382617e+02+0.000000000000e+00j -6.440774382617e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103762e+00 1.407846987107e+03+0.000000000000e+00j 1.407846987107e+03+0.000000000000e+00j -1.407846987107e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 1.089702533912e+02+0.000000000000e+00j 1.693883617056e+03+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 -3.331454318583e+01+0.000000000000e+00j 2.983841276862e+03+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.792515640354e+03+0.000000000000e+00j 1.492388034645e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 -1.611704542809e+02+0.000000000000e+00j 2.058840261207e+03+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 2.103459518153e+02+0.000000000000e+00j 3.440855856631e+03+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 1.305283557963e+03+0.000000000000e+00j 1.749125406728e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 -1.955720814232e+02+0.000000000000e+00j 1.931571181618e+03+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 8.360286832812e+02+0.000000000000e+00j 2.327628679175e+03+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 1.902976282779e+02+0.000000000000e+00j 2.153754821739e+03+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 6.162247816937e+00 -3.097729547195e-14+0.000000000000e+00j 1.409251821174e+03+0.000000000000e+00j 3.097729547225e-14+0.000000000000e+00j 1.000000000000e-01 + 6.162247816944e+00 -3.097729547222e-14+0.000000000000e+00j 1.409251821176e+03+0.000000000000e+00j 3.097729547223e-14+0.000000000000e+00j 1.000000000000e-01 + 9.558851750691e+00 -3.751576875907e-14+0.000000000000e+00j 1.706706949096e+03+0.000000000000e+00j 3.751576875904e-14+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 3.350650599558e+02+0.000000000000e+00j 6.851091907668e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 -1.317747768132e+03+0.000000000000e+00j 8.546200435528e+02+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 4.550013552696e+02+0.000000000000e+00j 6.775000304813e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 6.171043712422e+00 6.817503300498e+02+0.000000000000e+00j 1.226291487929e-13+0.000000000000e+00j -6.817503300498e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566863e+00 -1.880020318403e+03+0.000000000000e+00j -3.381667469706e-13+0.000000000000e+00j 1.880020318403e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280855e+00 1.091389803066e+03+0.000000000000e+00j 1.963126333089e-13+0.000000000000e+00j -1.091389803066e+03+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 9.221540938131e+02+0.000000000000e+00j -4.132400085451e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 1.118741331148e+02+0.000000000000e+00j -2.947829831354e+03+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 -4.932098470679e+00+0.000000000000e+00j 1.739754380415e+03+0.000000000000e+00j 4.932098470679e+00+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 9.813960230292e+02+0.000000000000e+00j -3.903028684481e+02+0.000000000000e+00j -9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 1.439610072415e+03+0.000000000000e+00j -3.181897710267e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 -1.539717814991e+02+0.000000000000e+00j 1.483189426179e+03+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 8.326275941955e+02+0.000000000000e+00j 1.095902598229e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 1.515634023277e+03+0.000000000000e+00j -2.246901195615e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 6.390435888751e+02+0.000000000000e+00j 1.373374188791e+03+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 1.693883617056e+03+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 2.983841276862e+03+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.492388034645e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953784e+00 1.287469747221e+03+0.000000000000e+00j 1.287469747221e+03+0.000000000000e+00j -6.948254471798e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351289e+00 2.218454428366e+03+0.000000000000e+00j 2.218454428366e+03+0.000000000000e+00j 1.725508655145e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594722e+00 2.011916748810e+03+0.000000000000e+00j 2.011916748810e+03+0.000000000000e+00j -2.139081422556e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 -1.167708252139e+02+0.000000000000e+00j 2.855339344599e+03+0.000000000000e+00j -4.048846605891e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.133281238353e+03+0.000000000000e+00j 2.754226153072e+03+0.000000000000e+00j 1.271754473744e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 1.815457579590e+03+0.000000000000e+00j 2.292540364986e+03+0.000000000000e+00j -1.439197506310e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 -3.958756311590e+02+0.000000000000e+00j 2.901107133229e+03+0.000000000000e+00j 5.506843794693e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 1.768140685530e+03+0.000000000000e+00j 2.455785279109e+03+0.000000000000e+00j 9.284770875828e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 9.018856377877e+02+0.000000000000e+00j 2.557589353128e+03+0.000000000000e+00j 7.604402375890e-14+0.000000000000e+00j 1.000000000000e-01 + 5.686212080837e+00 -1.955720814199e+02+0.000000000000e+00j 1.931571181621e+03+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842362e+00 8.360286832695e+02+0.000000000000e+00j 2.327628679170e+03+0.000000000000e+00j 8.360286832695e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225690e+00 1.902976282771e+02+0.000000000000e+00j 2.153754821733e+03+0.000000000000e+00j 1.902976282771e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 -4.127847875246e-14+0.000000000000e+00j 1.738978129235e+03+0.000000000000e+00j 1.389460562279e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 -6.562240111066e-14+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j 1.627322748356e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -1.485691712351e-14+0.000000000000e+00j 1.129334593094e+03+0.000000000000e+00j -4.535788174358e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 1.565824031920e+03+0.000000000000e+00j 8.165966244897e+02+0.000000000000e+00j 3.405764006341e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.466859757966e+03+0.000000000000e+00j 1.224827992553e+03+0.000000000000e+00j 1.674226432372e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 2.837982416341e+02+0.000000000000e+00j -1.160191764820e+02+0.000000000000e+00j -1.176647268022e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 2.114543049917e+03+0.000000000000e+00j -8.387085082777e-14+0.000000000000e+00j 1.994915061823e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 -1.516378160774e+03+0.000000000000e+00j -2.500498769047e-13+0.000000000000e+00j 1.407377764407e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 1.161560904470e+03+0.000000000000e+00j 3.653752512289e-13+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 2.228955124173e+03+0.000000000000e+00j -3.405516824120e+02+0.000000000000e+00j 1.368428956506e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 1.737759702187e+03+0.000000000000e+00j -2.155507627736e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 -4.074490724537e+02+0.000000000000e+00j 1.487864010833e+03+0.000000000000e+00j 8.232383415397e+01+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 2.107875696050e+03+0.000000000000e+00j -2.473510678724e+01+0.000000000000e+00j 1.347963952090e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 2.537027100000e+03+0.000000000000e+00j -2.100426273080e+03+0.000000000000e+00j -1.383957859743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 5.951882676235e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j -9.430387165133e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 2.058840261207e+03+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 3.440855856631e+03+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 1.749125406728e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 2.855339344599e+03+0.000000000000e+00j -1.167708252139e+02+0.000000000000e+00j -4.048846605891e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.754226153072e+03+0.000000000000e+00j 2.133281238353e+03+0.000000000000e+00j 1.271754473744e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 2.292540364986e+03+0.000000000000e+00j 1.815457579590e+03+0.000000000000e+00j -1.439197506310e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118278e+00 1.629999833649e+03+0.000000000000e+00j 1.629999833649e+03+0.000000000000e+00j 7.165928148162e-14+0.000000000000e+00j 1.000000000000e-01 + 5.470989580363e+00 2.668739100343e+03+0.000000000000e+00j 2.668739100343e+03+0.000000000000e+00j 1.173251201912e-13+0.000000000000e+00j 1.000000000000e-01 + 8.166402741049e+00 2.239677814254e+03+0.000000000000e+00j 2.239677814254e+03+0.000000000000e+00j 9.846240447617e-14+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 -1.167708252118e+02+0.000000000000e+00j 2.855339344593e+03+0.000000000000e+00j 4.048846605956e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 2.133281238363e+03+0.000000000000e+00j 2.754226153073e+03+0.000000000000e+00j -1.271754473739e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 1.815457579586e+03+0.000000000000e+00j 2.292540364973e+03+0.000000000000e+00j 1.439197506327e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614182e+00 -1.611704542705e+02+0.000000000000e+00j 2.058840261201e+03+0.000000000000e+00j -1.611704542705e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627747e+00 2.103459518126e+02+0.000000000000e+00j 3.440855856623e+03+0.000000000000e+00j 2.103459518126e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550821e+00 1.305283557962e+03+0.000000000000e+00j 1.749125406708e+03+0.000000000000e+00j 1.305283557962e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 -4.109790152351e+02+0.000000000000e+00j 2.297162805672e+03+0.000000000000e+00j -2.235944633120e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 -3.866751154302e+02+0.000000000000e+00j 2.349960447269e+03+0.000000000000e+00j 1.651408145573e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 7.231958063040e+02+0.000000000000e+00j 8.193662174715e+02+0.000000000000e+00j 3.249726472674e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 -4.709548337438e-14+0.000000000000e+00j 2.336191913904e+03+0.000000000000e+00j -1.937303341824e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 -7.722256582591e-14+0.000000000000e+00j 1.257665397688e+03+0.000000000000e+00j 2.256075560900e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 2.479248805700e-14+0.000000000000e+00j -2.739789173907e+02+0.000000000000e+00j -8.541533926821e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 1.391753177029e+03+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 6.118530235880e-14+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 1.140089543169e+03+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 5.012147596807e-14+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 -1.212226534588e+03+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j -5.329281676556e-14+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 2.336191913897e+03+0.000000000000e+00j -8.732601479631e-14+0.000000000000e+00j 1.937303341826e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 1.257665397683e+03+0.000000000000e+00j 4.252267872340e-13+0.000000000000e+00j -2.256075560905e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 -2.739789173931e+02+0.000000000000e+00j -1.651944237380e-13+0.000000000000e+00j 8.541533926711e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 2.297162805673e+03+0.000000000000e+00j -4.109790152323e+02+0.000000000000e+00j 2.235944633154e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 2.349960447274e+03+0.000000000000e+00j -3.866751154334e+02+0.000000000000e+00j -1.651408145580e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 8.193662174838e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j -3.249726472798e+02+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 1.931571181618e+03+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 2.327628679175e+03+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 2.153754821740e+03+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 2.901107133229e+03+0.000000000000e+00j -3.958756311590e+02+0.000000000000e+00j 5.506843794693e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 2.455785279109e+03+0.000000000000e+00j 1.768140685530e+03+0.000000000000e+00j 9.284770875828e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 2.557589353128e+03+0.000000000000e+00j 9.018856377877e+02+0.000000000000e+00j 7.604402375890e-14+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 2.855339344593e+03+0.000000000000e+00j -1.167708252118e+02+0.000000000000e+00j 4.048846605956e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 2.754226153073e+03+0.000000000000e+00j 2.133281238363e+03+0.000000000000e+00j -1.271754473739e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 2.292540364973e+03+0.000000000000e+00j 1.815457579586e+03+0.000000000000e+00j 1.439197506327e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953789e+00 1.287469747217e+03+0.000000000000e+00j 1.287469747217e+03+0.000000000000e+00j 6.948254471858e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351294e+00 2.218454428373e+03+0.000000000000e+00j 2.218454428373e+03+0.000000000000e+00j -1.725508655129e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594732e+00 2.011916748796e+03+0.000000000000e+00j 2.011916748796e+03+0.000000000000e+00j 2.139081422565e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700620e+00 1.089702534039e+02+0.000000000000e+00j 1.693883617047e+03+0.000000000000e+00j 1.089702534039e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605928e+00 -3.331454318132e+01+0.000000000000e+00j 2.983841276852e+03+0.000000000000e+00j -3.331454318132e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072674e+00 1.792515640352e+03+0.000000000000e+00j 1.492388034624e+03+0.000000000000e+00j 1.792515640352e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 -2.473510677022e+01+0.000000000000e+00j 2.107875696037e+03+0.000000000000e+00j -1.347963952060e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 -2.100426273073e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j 1.383957859739e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 1.600399579646e+03+0.000000000000e+00j 5.951882676022e+02+0.000000000000e+00j 9.430387165019e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -3.405516824124e+02+0.000000000000e+00j 2.228955124171e+03+0.000000000000e+00j -1.368428956542e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 -2.155507627730e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 1.487864010835e+03+0.000000000000e+00j -4.074490724641e+02+0.000000000000e+00j -8.232383416614e+01+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 -4.209673416884e-14+0.000000000000e+00j 2.114543049926e+03+0.000000000000e+00j -1.994915061874e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 6.425926131698e-14+0.000000000000e+00j -1.516378160767e+03+0.000000000000e+00j -1.407377764408e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 -6.831670181286e-14+0.000000000000e+00j 1.161560904478e+03+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 8.165966244843e+02+0.000000000000e+00j 1.565824031931e+03+0.000000000000e+00j -3.405764006424e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.224827992545e+03+0.000000000000e+00j -1.466859757945e+03+0.000000000000e+00j -1.674226432366e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 -1.160191764878e+02+0.000000000000e+00j 2.837982416423e+02+0.000000000000e+00j 1.176647268018e+03+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 1.738978129230e+03+0.000000000000e+00j -8.352275633580e-15+0.000000000000e+00j -1.389460562305e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 1.358509986833e+03+0.000000000000e+00j 2.973360537346e-13+0.000000000000e+00j -1.627322748360e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 1.129334593096e+03+0.000000000000e+00j -1.142247528847e-13+0.000000000000e+00j 4.535788174314e+02+0.000000000000e+00j 1.000000000000e-01 + 6.162247816937e+00 1.409251821174e+03+0.000000000000e+00j -2.929656045223e-14+0.000000000000e+00j 3.097729547205e-14+0.000000000000e+00j 1.000000000000e-01 + 6.162247816944e+00 1.409251821176e+03+0.000000000000e+00j -2.929656045263e-14+0.000000000000e+00j 3.097729547222e-14+0.000000000000e+00j 1.000000000000e-01 + 9.558851750691e+00 1.706706949096e+03+0.000000000000e+00j -3.548027581567e-14+0.000000000000e+00j 3.751576875909e-14+0.000000000000e+00j 1.000000000000e-01 + 5.686212080837e+00 1.931571181621e+03+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842362e+00 2.327628679170e+03+0.000000000000e+00j 8.360286832695e+02+0.000000000000e+00j 8.360286832695e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225690e+00 2.153754821733e+03+0.000000000000e+00j 1.902976282771e+02+0.000000000000e+00j 1.902976282771e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614182e+00 2.058840261201e+03+0.000000000000e+00j -1.611704542705e+02+0.000000000000e+00j -1.611704542705e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627747e+00 3.440855856623e+03+0.000000000000e+00j 2.103459518126e+02+0.000000000000e+00j 2.103459518126e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550821e+00 1.749125406708e+03+0.000000000000e+00j 1.305283557962e+03+0.000000000000e+00j 1.305283557962e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700620e+00 1.693883617047e+03+0.000000000000e+00j 1.089702534039e+02+0.000000000000e+00j 1.089702534039e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605928e+00 2.983841276852e+03+0.000000000000e+00j -3.331454318132e+01+0.000000000000e+00j -3.331454318132e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072674e+00 1.492388034624e+03+0.000000000000e+00j 1.792515640352e+03+0.000000000000e+00j 1.792515640352e+03+0.000000000000e+00j 1.000000000000e-01 + 4.408824939138e+00 6.440774382689e+02+0.000000000000e+00j 6.440774382689e+02+0.000000000000e+00j 6.440774382689e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939138e+00 6.440774382689e+02+0.000000000000e+00j 6.440774382689e+02+0.000000000000e+00j 6.440774382689e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103772e+00 1.407846987100e+03+0.000000000000e+00j 1.407846987100e+03+0.000000000000e+00j 1.407846987100e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844976e+00 1.095902598418e+02+0.000000000000e+00j 8.326275941904e+02+0.000000000000e+00j 8.326275941904e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649688e+00 -2.246901195603e+03+0.000000000000e+00j 1.515634023272e+03+0.000000000000e+00j 1.515634023272e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751932e+00 1.373374188802e+03+0.000000000000e+00j 6.390435888622e+02+0.000000000000e+00j 6.390435888622e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368609e+00 -3.903028684318e+02+0.000000000000e+00j 9.813960230235e+02+0.000000000000e+00j 9.813960230235e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870179e+00 -3.181897710259e+03+0.000000000000e+00j 1.439610072412e+03+0.000000000000e+00j 1.439610072412e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609828e+00 1.483189426196e+03+0.000000000000e+00j -1.539717815092e+02+0.000000000000e+00j -1.539717815092e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 -4.132400085402e+02+0.000000000000e+00j 9.221540938118e+02+0.000000000000e+00j 9.221540938118e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253368e+00 -2.947829831351e+03+0.000000000000e+00j 1.118741331111e+02+0.000000000000e+00j 1.118741331111e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710743991e+00 1.739754380424e+03+0.000000000000e+00j -4.932098463212e+00+0.000000000000e+00j -4.932098463212e+00+0.000000000000e+00j 1.000000000000e-01 + 6.171043712417e+00 -2.996946154672e-14+0.000000000000e+00j 6.817503300509e+02+0.000000000000e+00j 6.817503300509e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566858e+00 8.264491288887e-14+0.000000000000e+00j -1.880020318391e+03+0.000000000000e+00j -1.880020318391e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280851e+00 -4.797704275929e-14+0.000000000000e+00j 1.091389803073e+03+0.000000000000e+00j 1.091389803073e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 6.851091907684e+02+0.000000000000e+00j 3.350650599560e+02+0.000000000000e+00j 3.350650599560e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093596e+00 8.546200435459e+02+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 6.775000304810e+02+0.000000000000e+00j 4.550013552737e+02+0.000000000000e+00j 4.550013552737e+02+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 6.851091907668e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 8.546200435528e+02+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 6.775000304813e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 1.738978129235e+03+0.000000000000e+00j -6.395002991878e-14+0.000000000000e+00j 1.389460562279e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 1.358509986833e+03+0.000000000000e+00j -3.538194577033e-13+0.000000000000e+00j 1.627322748356e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 1.129334593094e+03+0.000000000000e+00j 6.726988125714e-14+0.000000000000e+00j -4.535788174358e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 2.297162805672e+03+0.000000000000e+00j -4.109790152351e+02+0.000000000000e+00j -2.235944633120e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 2.349960447269e+03+0.000000000000e+00j -3.866751154302e+02+0.000000000000e+00j 1.651408145573e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 8.193662174715e+02+0.000000000000e+00j 7.231958063040e+02+0.000000000000e+00j 3.249726472674e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 2.107875696037e+03+0.000000000000e+00j -2.473510677021e+01+0.000000000000e+00j -1.347963952060e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 2.537027099992e+03+0.000000000000e+00j -2.100426273073e+03+0.000000000000e+00j 1.383957859739e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 5.951882676022e+02+0.000000000000e+00j 1.600399579646e+03+0.000000000000e+00j 9.430387165019e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844976e+00 8.326275941904e+02+0.000000000000e+00j 1.095902598418e+02+0.000000000000e+00j 8.326275941904e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649688e+00 1.515634023272e+03+0.000000000000e+00j -2.246901195603e+03+0.000000000000e+00j 1.515634023272e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751932e+00 6.390435888622e+02+0.000000000000e+00j 1.373374188802e+03+0.000000000000e+00j 6.390435888622e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181330e+00 -3.449549636261e+02+0.000000000000e+00j -3.449549636261e+02+0.000000000000e+00j 7.484369549129e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658496e+00 -7.252539022813e+02+0.000000000000e+00j -7.252539022813e+02+0.000000000000e+00j 2.663991119425e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192940e+02+0.000000000000e+00j 6.906934192940e+02+0.000000000000e+00j -7.537749371539e+01+0.000000000000e+00j 1.000000000000e-01 + 5.164686236689e+00 -1.029630366767e+03+0.000000000000e+00j -1.845929892073e-13+0.000000000000e+00j 1.029630366767e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845307e+00 -2.417747879241e+03+0.000000000000e+00j -4.334558522978e-13+0.000000000000e+00j 2.417747879241e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592373e+00 8.075401156560e+02+0.000000000000e+00j 1.447764641226e-13+0.000000000000e+00j -8.075401156560e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.222381804892e+03+0.000000000000e+00j 7.962977575720e+00+0.000000000000e+00j 1.436326007859e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.773373845634e+03+0.000000000000e+00j -2.209454667337e+02+0.000000000000e+00j 9.408488419780e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 9.858366119468e+02+0.000000000000e+00j -5.737601260710e+01+0.000000000000e+00j -9.265906162318e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 -8.165966244859e+02+0.000000000000e+00j -3.405764006429e+02+0.000000000000e+00j 1.565824031930e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.224827992548e+03+0.000000000000e+00j -1.674226432371e+03+0.000000000000e+00j -1.466859757958e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 1.160191764816e+02+0.000000000000e+00j 1.176647268028e+03+0.000000000000e+00j 2.837982416495e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 1.105082526729e-14+0.000000000000e+00j -5.027358068558e+02+0.000000000000e+00j -1.105082526810e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 3.479796022550e-14+0.000000000000e+00j -1.583065534720e+03+0.000000000000e+00j -3.479796022469e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 -2.341025136709e-14+0.000000000000e+00j 1.065003863972e+03+0.000000000000e+00j 2.341025136698e-14+0.000000000000e+00j 1.000000000000e-01 + 6.171043712422e+00 -2.160408859439e-18+0.000000000000e+00j 6.817503300498e+02+0.000000000000e+00j -6.817503300498e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566863e+00 5.957624621233e-18+0.000000000000e+00j -1.880020318403e+03+0.000000000000e+00j 1.880020318403e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280855e+00 -3.458521537439e-18+0.000000000000e+00j 1.091389803066e+03+0.000000000000e+00j -1.091389803066e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 8.165966244897e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j 3.405764006341e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.224827992553e+03+0.000000000000e+00j -1.466859757966e+03+0.000000000000e+00j 1.674226432372e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 -1.160191764820e+02+0.000000000000e+00j 2.837982416341e+02+0.000000000000e+00j -1.176647268022e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 2.336191913904e+03+0.000000000000e+00j -9.806927103340e-15+0.000000000000e+00j -1.937303341824e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 1.257665397688e+03+0.000000000000e+00j -4.775173286376e-13+0.000000000000e+00j 2.256075560900e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 -2.739789173907e+02+0.000000000000e+00j 1.765857731010e-13+0.000000000000e+00j -8.541533926821e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 2.228955124171e+03+0.000000000000e+00j -3.405516824124e+02+0.000000000000e+00j -1.368428956543e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 1.737759702187e+03+0.000000000000e+00j -2.155507627730e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 -4.074490724641e+02+0.000000000000e+00j 1.487864010835e+03+0.000000000000e+00j -8.232383416614e+01+0.000000000000e+00j 1.000000000000e-01 + 5.120703368609e+00 9.813960230235e+02+0.000000000000e+00j -3.903028684318e+02+0.000000000000e+00j 9.813960230235e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870179e+00 1.439610072412e+03+0.000000000000e+00j -3.181897710259e+03+0.000000000000e+00j 1.439610072412e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609828e+00 -1.539717815092e+02+0.000000000000e+00j 1.483189426196e+03+0.000000000000e+00j -1.539717815092e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236689e+00 6.139909804174e-16+0.000000000000e+00j -1.029630366767e+03+0.000000000000e+00j 1.029630366767e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845307e+00 1.441755642307e-15+0.000000000000e+00j -2.417747879241e+03+0.000000000000e+00j 2.417747879241e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592373e+00 -4.815537335936e-16+0.000000000000e+00j 8.075401156560e+02+0.000000000000e+00j -8.075401156560e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368609e+00 -9.813960230235e+02+0.000000000000e+00j -9.813960230235e+02+0.000000000000e+00j 3.903028684318e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870179e+00 -1.439610072412e+03+0.000000000000e+00j -1.439610072412e+03+0.000000000000e+00j 3.181897710259e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609828e+00 1.539717815092e+02+0.000000000000e+00j 1.539717815092e+02+0.000000000000e+00j -1.483189426196e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -2.228955124171e+03+0.000000000000e+00j 1.368428956543e+01+0.000000000000e+00j 3.405516824124e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 -1.737759702187e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j 2.155507627730e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 4.074490724641e+02+0.000000000000e+00j 8.232383416614e+01+0.000000000000e+00j -1.487864010835e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 -2.336191913904e+03+0.000000000000e+00j 1.937303341824e+02+0.000000000000e+00j -4.709425554437e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 -1.257665397688e+03+0.000000000000e+00j -2.256075560900e+03+0.000000000000e+00j -7.723686444910e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 2.739789173907e+02+0.000000000000e+00j 8.541533926821e+02+0.000000000000e+00j 2.479790153572e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 -8.165966244897e+02+0.000000000000e+00j -3.405764006341e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.224827992553e+03+0.000000000000e+00j -1.674226432372e+03+0.000000000000e+00j 1.466859757966e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 1.160191764820e+02+0.000000000000e+00j 1.176647268022e+03+0.000000000000e+00j -2.837982416341e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 -4.132400085451e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 -2.947829831354e+03+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 1.739754380415e+03+0.000000000000e+00j -4.932098470682e+00+0.000000000000e+00j 4.932098470682e+00+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 -5.086440146715e-14+0.000000000000e+00j 2.114543049917e+03+0.000000000000e+00j 1.994915061823e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 2.404898519274e-15+0.000000000000e+00j -1.516378160774e+03+0.000000000000e+00j 1.407377764407e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 1.725128567274e-14+0.000000000000e+00j 1.161560904470e+03+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 1.391753177029e+03+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 6.118530235880e-14+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 1.140089543169e+03+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 5.012147596807e-14+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 -1.212226534588e+03+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j -5.329281676556e-14+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 2.114543049926e+03+0.000000000000e+00j -4.046492772342e-15+0.000000000000e+00j -1.994915061874e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 -1.516378160767e+03+0.000000000000e+00j 3.130970396574e-13+0.000000000000e+00j -1.407377764408e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 1.161560904478e+03+0.000000000000e+00j -4.136700112417e-13+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 9.221540938119e+02+0.000000000000e+00j -4.132400085402e+02+0.000000000000e+00j 9.221540938119e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253368e+00 1.118741331111e+02+0.000000000000e+00j -2.947829831351e+03+0.000000000000e+00j 1.118741331111e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710743991e+00 -4.932098463216e+00+0.000000000000e+00j 1.739754380424e+03+0.000000000000e+00j -4.932098463216e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 7.962977575725e+00+0.000000000000e+00j -1.222381804892e+03+0.000000000000e+00j 1.436326007859e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.209454667337e+02+0.000000000000e+00j -2.773373845634e+03+0.000000000000e+00j 9.408488419780e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 -5.737601260710e+01+0.000000000000e+00j 9.858366119468e+02+0.000000000000e+00j -9.265906162318e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 1.368428956542e+01+0.000000000000e+00j -2.228955124171e+03+0.000000000000e+00j 3.405516824124e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 -1.664544017648e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j 2.155507627730e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 8.232383416614e+01+0.000000000000e+00j 4.074490724641e+02+0.000000000000e+00j -1.487864010835e+03+0.000000000000e+00j 1.000000000000e-01 + 5.217363486838e+00 -1.218893138245e+03+0.000000000000e+00j -1.218893138245e+03+0.000000000000e+00j -5.358589902119e-14+0.000000000000e+00j 1.000000000000e-01 + 7.854999616706e+00 -2.067573412718e+03+0.000000000000e+00j -2.067573412718e+03+0.000000000000e+00j -9.089622103384e-14+0.000000000000e+00j 1.000000000000e-01 + 9.063866630519e+00 4.039473572620e+02+0.000000000000e+00j 4.039473572620e+02+0.000000000000e+00j 1.775863823788e-14+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -2.228955124172e+03+0.000000000000e+00j 1.368428956439e+01+0.000000000000e+00j -3.405516824148e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 -1.737759702190e+03+0.000000000000e+00j -1.664544017633e+03+0.000000000000e+00j -2.155507627740e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 4.074490724521e+02+0.000000000000e+00j 8.232383415556e+01+0.000000000000e+00j 1.487864010841e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.222381804899e+03+0.000000000000e+00j 7.962977582706e+00+0.000000000000e+00j -1.436326007856e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.773373845643e+03+0.000000000000e+00j -2.209454667211e+02+0.000000000000e+00j -9.408488419744e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 9.858366119327e+02+0.000000000000e+00j -5.737601261161e+01+0.000000000000e+00j 9.265906162360e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 -3.903028684481e+02+0.000000000000e+00j 9.813960230292e+02+0.000000000000e+00j -9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 -3.181897710267e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 1.483189426179e+03+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 -3.405516824120e+02+0.000000000000e+00j 2.228955124173e+03+0.000000000000e+00j 1.368428956506e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 -2.155507627736e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 1.487864010833e+03+0.000000000000e+00j -4.074490724538e+02+0.000000000000e+00j 8.232383415397e+01+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 -5.560994671281e-14+0.000000000000e+00j 2.336191913897e+03+0.000000000000e+00j 1.937303341826e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 2.193213150591e-14+0.000000000000e+00j 1.257665397683e+03+0.000000000000e+00j -2.256075560905e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 -1.274762034804e-14+0.000000000000e+00j -2.739789173931e+02+0.000000000000e+00j 8.541533926711e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 1.565824031931e+03+0.000000000000e+00j 8.165966244843e+02+0.000000000000e+00j -3.405764006424e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.466859757945e+03+0.000000000000e+00j 1.224827992545e+03+0.000000000000e+00j -1.674226432366e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 2.837982416423e+02+0.000000000000e+00j -1.160191764878e+02+0.000000000000e+00j 1.176647268018e+03+0.000000000000e+00j 1.000000000000e-01 + 6.171043712417e+00 6.817503300509e+02+0.000000000000e+00j -1.509746005538e-13+0.000000000000e+00j 6.817503300509e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566858e+00 -1.880020318391e+03+0.000000000000e+00j 4.163332294696e-13+0.000000000000e+00j -1.880020318391e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280851e+00 1.091389803073e+03+0.000000000000e+00j -2.416898566889e-13+0.000000000000e+00j 1.091389803073e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 -3.405764006429e+02+0.000000000000e+00j -8.165966244859e+02+0.000000000000e+00j 1.565824031930e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.674226432371e+03+0.000000000000e+00j -1.224827992548e+03+0.000000000000e+00j -1.466859757958e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 1.176647268028e+03+0.000000000000e+00j 1.160191764816e+02+0.000000000000e+00j 2.837982416495e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 1.937303341824e+02+0.000000000000e+00j -2.336191913904e+03+0.000000000000e+00j -4.709425554437e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 -2.256075560900e+03+0.000000000000e+00j -1.257665397688e+03+0.000000000000e+00j -7.723686444910e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 8.541533926821e+02+0.000000000000e+00j 2.739789173907e+02+0.000000000000e+00j 2.479790153572e-14+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 1.368428956438e+01+0.000000000000e+00j -2.228955124172e+03+0.000000000000e+00j -3.405516824148e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 -1.664544017633e+03+0.000000000000e+00j -1.737759702190e+03+0.000000000000e+00j -2.155507627740e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 8.232383415556e+01+0.000000000000e+00j 4.074490724521e+02+0.000000000000e+00j 1.487864010841e+03+0.000000000000e+00j 1.000000000000e-01 + 5.120703368607e+00 -9.813960230264e+02+0.000000000000e+00j -9.813960230264e+02+0.000000000000e+00j -3.903028684352e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870169e+00 -1.439610072411e+03+0.000000000000e+00j -1.439610072411e+03+0.000000000000e+00j -3.181897710263e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609831e+00 1.539717814987e+02+0.000000000000e+00j 1.539717814987e+02+0.000000000000e+00j 1.483189426185e+03+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 -1.029630366773e+03+0.000000000000e+00j 2.274024116701e-13+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 -2.417747879248e+03+0.000000000000e+00j 5.339796846459e-13+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 8.075401156421e+02+0.000000000000e+00j -1.783519365236e-13+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 1.095902598229e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 -2.246901195615e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 1.373374188791e+03+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 -2.473510678724e+01+0.000000000000e+00j 2.107875696050e+03+0.000000000000e+00j 1.347963952090e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 -2.100426273080e+03+0.000000000000e+00j 2.537027100000e+03+0.000000000000e+00j -1.383957859743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 1.600399579637e+03+0.000000000000e+00j 5.951882676234e+02+0.000000000000e+00j -9.430387165133e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 -4.109790152323e+02+0.000000000000e+00j 2.297162805673e+03+0.000000000000e+00j 2.235944633154e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -3.866751154334e+02+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j -1.651408145580e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 7.231958063081e+02+0.000000000000e+00j 8.193662174838e+02+0.000000000000e+00j -3.249726472798e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 -3.517178871334e-14+0.000000000000e+00j 1.738978129230e+03+0.000000000000e+00j -1.389460562305e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 5.898560940771e-15+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j -1.627322748360e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -3.479174162067e-14+0.000000000000e+00j 1.129334593096e+03+0.000000000000e+00j 4.535788174314e+02+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 3.350650599560e+02+0.000000000000e+00j 6.851091907684e+02+0.000000000000e+00j 3.350650599560e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093596e+00 -1.317747768119e+03+0.000000000000e+00j 8.546200435459e+02+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 4.550013552737e+02+0.000000000000e+00j 6.775000304810e+02+0.000000000000e+00j 4.550013552737e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 -5.027358068558e+02+0.000000000000e+00j 1.045124067706e-14+0.000000000000e+00j -1.105082526647e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 -1.583065534720e+03+0.000000000000e+00j 3.290992741067e-14+0.000000000000e+00j -3.479796022509e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 1.065003863972e+03+0.000000000000e+00j -2.214008143490e-14+0.000000000000e+00j 2.341025136739e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 -3.405764006341e+02+0.000000000000e+00j -8.165966244897e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.674226432372e+03+0.000000000000e+00j -1.224827992553e+03+0.000000000000e+00j 1.466859757966e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 1.176647268022e+03+0.000000000000e+00j 1.160191764820e+02+0.000000000000e+00j -2.837982416341e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 7.962977582707e+00+0.000000000000e+00j -1.222381804899e+03+0.000000000000e+00j -1.436326007856e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.209454667211e+02+0.000000000000e+00j -2.773373845643e+03+0.000000000000e+00j -9.408488419744e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 -5.737601261161e+01+0.000000000000e+00j 9.858366119327e+02+0.000000000000e+00j 9.265906162360e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 4.465139540329e-14+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 1.048490992744e-13+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 -3.502013360440e-14+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181326e+00 -3.449549636286e+02+0.000000000000e+00j -3.449549636286e+02+0.000000000000e+00j -7.484369549179e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658484e+00 -7.252539022881e+02+0.000000000000e+00j -7.252539022881e+02+0.000000000000e+00j -2.663991119428e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192903e+02+0.000000000000e+00j 6.906934192903e+02+0.000000000000e+00j 7.537749370039e+01+0.000000000000e+00j 1.000000000000e-01 + 4.650851100236e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.650851100245e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 1.033872196188e+01 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 -3.449549636351e+02+0.000000000000e+00j 7.484369549273e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 -7.252539022866e+02+0.000000000000e+00j 2.663991119437e+03+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192902e+02+0.000000000000e+00j -7.537749369760e+01+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 -5.511984988225e+02+0.000000000000e+00j 1.170914963950e+03+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 -4.701433168759e+02+0.000000000000e+00j 3.520407372805e+03+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 9.131359997239e+02+0.000000000000e+00j -1.570279330060e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 -5.453827687707e+02+0.000000000000e+00j 1.132852811783e+03+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 9.798348926358e+02+0.000000000000e+00j 2.474222927441e+03+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 -2.890782382811e+01+0.000000000000e+00j 3.169800657838e+02+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 -3.350650599558e+02+0.000000000000e+00j 6.851091907668e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 1.317747768132e+03+0.000000000000e+00j 8.546200435528e+02+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 -4.550013552696e+02+0.000000000000e+00j 6.775000304813e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 6.516302870694e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.516302870699e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.979040851872e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 3.350650599558e+02+0.000000000000e+00j -6.851091907668e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 -1.317747768132e+03+0.000000000000e+00j -8.546200435528e+02+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 4.550013552696e+02+0.000000000000e+00j -6.775000304813e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 5.453827687707e+02+0.000000000000e+00j -1.132852811783e+03+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 -9.798348926358e+02+0.000000000000e+00j -2.474222927441e+03+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 2.890782382811e+01+0.000000000000e+00j -3.169800657838e+02+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 5.511984988225e+02+0.000000000000e+00j -1.170914963950e+03+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 4.701433168759e+02+0.000000000000e+00j -3.520407372805e+03+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 -9.131359997239e+02+0.000000000000e+00j 1.570279330060e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 3.449549636351e+02+0.000000000000e+00j -7.484369549273e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 7.252539022866e+02+0.000000000000e+00j -2.663991119437e+03+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192902e+02+0.000000000000e+00j 7.537749369760e+01+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 7.484369549273e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 2.663991119437e+03+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -7.537749369760e+01+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844972e+00 8.326275941940e+02+0.000000000000e+00j 8.326275941940e+02+0.000000000000e+00j -1.095902598382e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649676e+00 1.515634023269e+03+0.000000000000e+00j 1.515634023269e+03+0.000000000000e+00j 2.246901195613e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751927e+00 6.390435888739e+02+0.000000000000e+00j 6.390435888739e+02+0.000000000000e+00j -1.373374188795e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -1.347963952067e+02+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j 2.473510677569e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531748e+00 1.383957859722e+03+0.000000000000e+00j 2.537027100001e+03+0.000000000000e+00j 2.100426273078e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 9.430387165091e+02+0.000000000000e+00j 5.951882676219e+02+0.000000000000e+00j -1.600399579641e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 -2.235944633189e+02+0.000000000000e+00j 2.297162805675e+03+0.000000000000e+00j 4.109790152335e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 1.651408145566e+03+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j 3.866751154283e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 3.249726472726e+02+0.000000000000e+00j 8.193662174822e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 1.389460562279e+02+0.000000000000e+00j 1.738978129235e+03+0.000000000000e+00j 4.127935937023e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 1.627322748356e+03+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j 6.563271480564e-14+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -4.535788174358e+02+0.000000000000e+00j 1.129334593094e+03+0.000000000000e+00j 1.485404241843e-14+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 -3.350650599564e+02+0.000000000000e+00j 6.851091907693e+02+0.000000000000e+00j -3.350650599564e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093595e+00 1.317747768119e+03+0.000000000000e+00j 8.546200435520e+02+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 -4.550013552749e+02+0.000000000000e+00j 6.775000304802e+02+0.000000000000e+00j -4.550013552749e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 -1.105082526729e-14+0.000000000000e+00j -1.011785329383e-13+0.000000000000e+00j 5.027358068558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 -3.479796022550e-14+0.000000000000e+00j -3.186012338166e-13+0.000000000000e+00j 1.583065534720e+03+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 2.341025136698e-14+0.000000000000e+00j 2.143382807844e-13+0.000000000000e+00j -1.065003863972e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 1.565824031920e+03+0.000000000000e+00j -8.165966244787e+02+0.000000000000e+00j 3.405764006383e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.466859757964e+03+0.000000000000e+00j -1.224827992550e+03+0.000000000000e+00j 1.674226432375e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 2.837982416353e+02+0.000000000000e+00j 1.160191764851e+02+0.000000000000e+00j -1.176647268019e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 1.436326007861e+03+0.000000000000e+00j -1.222381804894e+03+0.000000000000e+00j -7.962977576047e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 9.408488419796e+02+0.000000000000e+00j -2.773373845637e+03+0.000000000000e+00j 2.209454667325e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 -9.265906162319e+02+0.000000000000e+00j 9.858366119346e+02+0.000000000000e+00j 5.737601261443e+01+0.000000000000e+00j 1.000000000000e-01 + 5.164686236690e+00 1.029630366785e+03+0.000000000000e+00j -1.029630366785e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.235121845308e+00 2.417747879247e+03+0.000000000000e+00j -2.417747879247e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.937237592376e+00 -8.075401156400e+02+0.000000000000e+00j 8.075401156400e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 1.170914963950e+03+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 3.520407372805e+03+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 -1.570279330060e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.107875696041e+03+0.000000000000e+00j -1.347963952067e+02+0.000000000000e+00j 2.473510677569e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531749e+00 2.537027100001e+03+0.000000000000e+00j 1.383957859722e+03+0.000000000000e+00j 2.100426273078e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 5.951882676219e+02+0.000000000000e+00j 9.430387165091e+02+0.000000000000e+00j -1.600399579641e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909401e+00 1.362258017175e+03+0.000000000000e+00j 1.362258017175e+03+0.000000000000e+00j -6.848654362995e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834561e+00 2.277392898260e+03+0.000000000000e+00j 2.277392898260e+03+0.000000000000e+00j 1.978995825498e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902965e+00 9.309665228146e+02+0.000000000000e+00j 9.309665228146e+02+0.000000000000e+00j -1.522129397379e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 5.517436734186e+01+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j 5.964543806476e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 2.407984538040e+03+0.000000000000e+00j 2.244897517877e+03+0.000000000000e+00j 1.022767542874e-13+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 6.727877776834e+02+0.000000000000e+00j 9.608585950688e+02+0.000000000000e+00j 3.590979669168e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 -2.235944633120e+02+0.000000000000e+00j 2.297162805672e+03+0.000000000000e+00j -4.109790152351e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 1.651408145573e+03+0.000000000000e+00j 2.349960447269e+03+0.000000000000e+00j -3.866751154302e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 3.249726472674e+02+0.000000000000e+00j 8.193662174715e+02+0.000000000000e+00j 7.231958063040e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015343e+00 -5.453827687681e+02+0.000000000000e+00j 1.132852811781e+03+0.000000000000e+00j -5.453827687681e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 9.798348926316e+02+0.000000000000e+00j 2.474222927435e+03+0.000000000000e+00j 9.798348926316e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806791e+00 -2.890782383714e+01+0.000000000000e+00j 3.169800657750e+02+0.000000000000e+00j -2.890782383714e+01+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 -1.565824031930e+03+0.000000000000e+00j 8.165966244859e+02+0.000000000000e+00j 3.405764006429e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.466859757958e+03+0.000000000000e+00j 1.224827992548e+03+0.000000000000e+00j 1.674226432371e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 -2.837982416495e+02+0.000000000000e+00j -1.160191764816e+02+0.000000000000e+00j -1.176647268028e+03+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 -6.603071664874e-15+0.000000000000e+00j -6.045603724411e-14+0.000000000000e+00j 3.003939055115e+02+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 -4.844139311983e-14+0.000000000000e+00j -4.435170198378e-13+0.000000000000e+00j 2.203746984141e+03+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 4.182442897798e-14+0.000000000000e+00j 3.829337866263e-13+0.000000000000e+00j -1.902721067418e+03+0.000000000000e+00j 1.000000000000e-01 + 6.499026258316e+00 1.391753177018e+03+0.000000000000e+00j -1.391753177018e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.172018726734e+00 1.140089543166e+03+0.000000000000e+00j -1.140089543166e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.841630070240e+00 -1.212226534592e+03+0.000000000000e+00j 1.212226534592e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 1.222381804894e+03+0.000000000000e+00j -1.436326007861e+03+0.000000000000e+00j 7.962977576049e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 2.773373845637e+03+0.000000000000e+00j -9.408488419795e+02+0.000000000000e+00j -2.209454667325e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 -9.858366119346e+02+0.000000000000e+00j 9.265906162319e+02+0.000000000000e+00j -5.737601261443e+01+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 1.132852811783e+03+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 2.474222927441e+03+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 3.169800657838e+02+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 2.297162805675e+03+0.000000000000e+00j -2.235944633189e+02+0.000000000000e+00j 4.109790152335e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 2.349960447274e+03+0.000000000000e+00j 1.651408145566e+03+0.000000000000e+00j 3.866751154283e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 8.193662174822e+02+0.000000000000e+00j 3.249726472726e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 2.658278854984e+03+0.000000000000e+00j 5.517436734186e+01+0.000000000000e+00j 5.964543806476e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 2.244897517877e+03+0.000000000000e+00j 2.407984538040e+03+0.000000000000e+00j 1.022767542874e-13+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 9.608585950688e+02+0.000000000000e+00j 6.727877776834e+02+0.000000000000e+00j 3.590979669168e-14+0.000000000000e+00j 1.000000000000e-01 + 4.568615909403e+00 1.362258017173e+03+0.000000000000e+00j 1.362258017173e+03+0.000000000000e+00j 6.848654363584e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834566e+00 2.277392898267e+03+0.000000000000e+00j 2.277392898267e+03+0.000000000000e+00j -1.978995825481e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902966e+00 9.309665228030e+02+0.000000000000e+00j 9.309665228030e+02+0.000000000000e+00j 1.522129397386e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 -1.347963952060e+02+0.000000000000e+00j 2.107875696037e+03+0.000000000000e+00j -2.473510677022e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 1.383957859739e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j -2.100426273073e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 9.430387165019e+02+0.000000000000e+00j 5.951882676022e+02+0.000000000000e+00j 1.600399579646e+03+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 -5.511984988142e+02+0.000000000000e+00j 1.170914963937e+03+0.000000000000e+00j -5.511984988142e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215538e+00 -4.701433168732e+02+0.000000000000e+00j 3.520407372796e+03+0.000000000000e+00j -4.701433168732e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385183e+00 9.131359997229e+02+0.000000000000e+00j -1.570279330276e+02+0.000000000000e+00j 9.131359997229e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.436326007859e+03+0.000000000000e+00j 1.222381804892e+03+0.000000000000e+00j -7.962977575720e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -9.408488419780e+02+0.000000000000e+00j 2.773373845634e+03+0.000000000000e+00j 2.209454667337e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 9.265906162318e+02+0.000000000000e+00j -9.858366119468e+02+0.000000000000e+00j 5.737601260710e+01+0.000000000000e+00j 1.000000000000e-01 + 6.499026258313e+00 -1.391753177029e+03+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.172018726731e+00 -1.140089543169e+03+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.841630070229e+00 1.212226534583e+03+0.000000000000e+00j -1.212226534583e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 6.603071664925e-15+0.000000000000e+00j 6.045603724411e-14+0.000000000000e+00j -3.003939055115e+02+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 4.844139311942e-14+0.000000000000e+00j 4.435170198374e-13+0.000000000000e+00j -2.203746984141e+03+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 -4.182442897798e-14+0.000000000000e+00j -3.829337866263e-13+0.000000000000e+00j 1.902721067418e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 8.165966244787e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j -3.405764006383e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.224827992550e+03+0.000000000000e+00j 1.466859757964e+03+0.000000000000e+00j -1.674226432375e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 -1.160191764851e+02+0.000000000000e+00j -2.837982416352e+02+0.000000000000e+00j 1.176647268019e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 6.851091907668e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 8.546200435528e+02+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 6.775000304813e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 1.738978129235e+03+0.000000000000e+00j 1.389460562279e+02+0.000000000000e+00j 4.127935937023e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 1.358509986833e+03+0.000000000000e+00j 1.627322748356e+03+0.000000000000e+00j 6.563271480564e-14+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 1.129334593094e+03+0.000000000000e+00j -4.535788174358e+02+0.000000000000e+00j 1.485404241843e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 2.297162805672e+03+0.000000000000e+00j -2.235944633120e+02+0.000000000000e+00j -4.109790152351e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 2.349960447269e+03+0.000000000000e+00j 1.651408145573e+03+0.000000000000e+00j -3.866751154302e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 8.193662174715e+02+0.000000000000e+00j 3.249726472674e+02+0.000000000000e+00j 7.231958063040e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 2.107875696037e+03+0.000000000000e+00j -1.347963952060e+02+0.000000000000e+00j -2.473510677022e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 2.537027099992e+03+0.000000000000e+00j 1.383957859739e+03+0.000000000000e+00j -2.100426273073e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 5.951882676022e+02+0.000000000000e+00j 9.430387165019e+02+0.000000000000e+00j 1.600399579646e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844976e+00 8.326275941904e+02+0.000000000000e+00j 8.326275941904e+02+0.000000000000e+00j 1.095902598418e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649688e+00 1.515634023272e+03+0.000000000000e+00j 1.515634023272e+03+0.000000000000e+00j -2.246901195603e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751932e+00 6.390435888622e+02+0.000000000000e+00j 6.390435888622e+02+0.000000000000e+00j 1.373374188802e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835801181330e+00 -3.449549636261e+02+0.000000000000e+00j 7.484369549129e+02+0.000000000000e+00j -3.449549636261e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658496e+00 -7.252539022813e+02+0.000000000000e+00j 2.663991119425e+03+0.000000000000e+00j -7.252539022813e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192940e+02+0.000000000000e+00j -7.537749371540e+01+0.000000000000e+00j 6.906934192940e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236689e+00 -1.029630366767e+03+0.000000000000e+00j 1.029630366767e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.235121845307e+00 -2.417747879241e+03+0.000000000000e+00j 2.417747879241e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.937237592373e+00 8.075401156560e+02+0.000000000000e+00j -8.075401156560e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.222381804892e+03+0.000000000000e+00j 1.436326007859e+03+0.000000000000e+00j 7.962977575724e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.773373845634e+03+0.000000000000e+00j 9.408488419780e+02+0.000000000000e+00j -2.209454667337e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 9.858366119468e+02+0.000000000000e+00j -9.265906162318e+02+0.000000000000e+00j -5.737601260710e+01+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 -8.165966244859e+02+0.000000000000e+00j 1.565824031930e+03+0.000000000000e+00j -3.405764006429e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.224827992548e+03+0.000000000000e+00j -1.466859757958e+03+0.000000000000e+00j -1.674226432371e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 1.160191764816e+02+0.000000000000e+00j 2.837982416495e+02+0.000000000000e+00j 1.176647268028e+03+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 1.105082526729e-14+0.000000000000e+00j 1.011785329388e-13+0.000000000000e+00j -5.027358068558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 3.479796022540e-14+0.000000000000e+00j 3.186012338166e-13+0.000000000000e+00j -1.583065534720e+03+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 -2.341025136711e-14+0.000000000000e+00j -2.143382807843e-13+0.000000000000e+00j 1.065003863972e+03+0.000000000000e+00j 1.000000000000e-01 + 6.516302870694e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.516302870699e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.979040851872e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 6.851091907693e+02+0.000000000000e+00j -3.350650599564e+02+0.000000000000e+00j -3.350650599564e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093595e+00 8.546200435520e+02+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 6.775000304802e+02+0.000000000000e+00j -4.550013552749e+02+0.000000000000e+00j -4.550013552749e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015343e+00 1.132852811781e+03+0.000000000000e+00j -5.453827687681e+02+0.000000000000e+00j -5.453827687681e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 2.474222927435e+03+0.000000000000e+00j 9.798348926316e+02+0.000000000000e+00j 9.798348926316e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806791e+00 3.169800657750e+02+0.000000000000e+00j -2.890782383714e+01+0.000000000000e+00j -2.890782383714e+01+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 1.170914963937e+03+0.000000000000e+00j -5.511984988142e+02+0.000000000000e+00j -5.511984988142e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215538e+00 3.520407372796e+03+0.000000000000e+00j -4.701433168732e+02+0.000000000000e+00j -4.701433168732e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385183e+00 -1.570279330276e+02+0.000000000000e+00j 9.131359997229e+02+0.000000000000e+00j 9.131359997229e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181330e+00 7.484369549129e+02+0.000000000000e+00j -3.449549636261e+02+0.000000000000e+00j -3.449549636261e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658496e+00 2.663991119425e+03+0.000000000000e+00j -7.252539022813e+02+0.000000000000e+00j -7.252539022813e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -7.537749371539e+01+0.000000000000e+00j 6.906934192940e+02+0.000000000000e+00j 6.906934192940e+02+0.000000000000e+00j 1.000000000000e-01 + 4.650851100250e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.650851100250e+00 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 1.033872196189e+01 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.835801181330e+00 -7.484369549129e+02+0.000000000000e+00j 3.449549636261e+02+0.000000000000e+00j 3.449549636261e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658496e+00 -2.663991119425e+03+0.000000000000e+00j 7.252539022813e+02+0.000000000000e+00j 7.252539022813e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 7.537749371539e+01+0.000000000000e+00j -6.906934192940e+02+0.000000000000e+00j -6.906934192940e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 -1.170914963937e+03+0.000000000000e+00j 5.511984988142e+02+0.000000000000e+00j 5.511984988142e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215538e+00 -3.520407372796e+03+0.000000000000e+00j 4.701433168732e+02+0.000000000000e+00j 4.701433168732e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385183e+00 1.570279330276e+02+0.000000000000e+00j -9.131359997229e+02+0.000000000000e+00j -9.131359997229e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015343e+00 -1.132852811781e+03+0.000000000000e+00j 5.453827687681e+02+0.000000000000e+00j 5.453827687681e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 -2.474222927435e+03+0.000000000000e+00j -9.798348926316e+02+0.000000000000e+00j -9.798348926316e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806791e+00 -3.169800657750e+02+0.000000000000e+00j 2.890782383714e+01+0.000000000000e+00j 2.890782383714e+01+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 -6.851091907693e+02+0.000000000000e+00j 3.350650599564e+02+0.000000000000e+00j 3.350650599564e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093595e+00 -8.546200435520e+02+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 -6.775000304802e+02+0.000000000000e+00j 4.550013552749e+02+0.000000000000e+00j 4.550013552749e+02+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 -6.851091907668e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 -8.546200435528e+02+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 -6.775000304813e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 -1.105082526729e-14+0.000000000000e+00j -1.011785329388e-13+0.000000000000e+00j 5.027358068558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 -3.479796022540e-14+0.000000000000e+00j -3.186012338166e-13+0.000000000000e+00j 1.583065534720e+03+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 2.341025136711e-14+0.000000000000e+00j 2.143382807843e-13+0.000000000000e+00j -1.065003863972e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 8.165966244859e+02+0.000000000000e+00j -1.565824031930e+03+0.000000000000e+00j 3.405764006429e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.224827992548e+03+0.000000000000e+00j 1.466859757958e+03+0.000000000000e+00j 1.674226432371e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 -1.160191764816e+02+0.000000000000e+00j -2.837982416495e+02+0.000000000000e+00j -1.176647268028e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.222381804892e+03+0.000000000000e+00j -1.436326007859e+03+0.000000000000e+00j -7.962977575725e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.773373845634e+03+0.000000000000e+00j -9.408488419780e+02+0.000000000000e+00j 2.209454667337e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 -9.858366119468e+02+0.000000000000e+00j 9.265906162318e+02+0.000000000000e+00j 5.737601260710e+01+0.000000000000e+00j 1.000000000000e-01 + 5.164686236689e+00 1.029630366767e+03+0.000000000000e+00j -1.029630366767e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.235121845307e+00 2.417747879241e+03+0.000000000000e+00j -2.417747879241e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.937237592373e+00 -8.075401156560e+02+0.000000000000e+00j 8.075401156560e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 4.835801181330e+00 3.449549636261e+02+0.000000000000e+00j -7.484369549129e+02+0.000000000000e+00j 3.449549636261e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658496e+00 7.252539022813e+02+0.000000000000e+00j -2.663991119425e+03+0.000000000000e+00j 7.252539022813e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192940e+02+0.000000000000e+00j 7.537749371540e+01+0.000000000000e+00j -6.906934192940e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844976e+00 -8.326275941904e+02+0.000000000000e+00j -8.326275941904e+02+0.000000000000e+00j -1.095902598418e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649688e+00 -1.515634023272e+03+0.000000000000e+00j -1.515634023272e+03+0.000000000000e+00j 2.246901195603e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751932e+00 -6.390435888622e+02+0.000000000000e+00j -6.390435888622e+02+0.000000000000e+00j -1.373374188802e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 -2.107875696037e+03+0.000000000000e+00j 1.347963952060e+02+0.000000000000e+00j 2.473510677022e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 -2.537027099992e+03+0.000000000000e+00j -1.383957859739e+03+0.000000000000e+00j 2.100426273073e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -5.951882676022e+02+0.000000000000e+00j -9.430387165019e+02+0.000000000000e+00j -1.600399579646e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 -2.297162805672e+03+0.000000000000e+00j 2.235944633120e+02+0.000000000000e+00j 4.109790152351e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 -2.349960447269e+03+0.000000000000e+00j -1.651408145573e+03+0.000000000000e+00j 3.866751154302e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 -8.193662174715e+02+0.000000000000e+00j -3.249726472674e+02+0.000000000000e+00j -7.231958063040e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 -1.738978129235e+03+0.000000000000e+00j -1.389460562279e+02+0.000000000000e+00j -4.127935937023e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 -1.358509986833e+03+0.000000000000e+00j -1.627322748356e+03+0.000000000000e+00j -6.563271480564e-14+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -1.129334593094e+03+0.000000000000e+00j 4.535788174358e+02+0.000000000000e+00j -1.485404241843e-14+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 -1.132852811783e+03+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 -2.474222927441e+03+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 -3.169800657838e+02+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 -8.165966244787e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j 3.405764006383e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.224827992550e+03+0.000000000000e+00j -1.466859757964e+03+0.000000000000e+00j 1.674226432375e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 1.160191764851e+02+0.000000000000e+00j 2.837982416352e+02+0.000000000000e+00j -1.176647268019e+03+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 -6.603071664925e-15+0.000000000000e+00j -6.045603724411e-14+0.000000000000e+00j 3.003939055115e+02+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 -4.844139311942e-14+0.000000000000e+00j -4.435170198374e-13+0.000000000000e+00j 2.203746984141e+03+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 4.182442897798e-14+0.000000000000e+00j 3.829337866263e-13+0.000000000000e+00j -1.902721067418e+03+0.000000000000e+00j 1.000000000000e-01 + 6.499026258313e+00 1.391753177029e+03+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.172018726731e+00 1.140089543169e+03+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.841630070229e+00 -1.212226534583e+03+0.000000000000e+00j 1.212226534583e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.436326007859e+03+0.000000000000e+00j -1.222381804892e+03+0.000000000000e+00j 7.962977575720e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 9.408488419780e+02+0.000000000000e+00j -2.773373845634e+03+0.000000000000e+00j -2.209454667337e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 -9.265906162318e+02+0.000000000000e+00j 9.858366119468e+02+0.000000000000e+00j -5.737601260710e+01+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 5.511984988142e+02+0.000000000000e+00j -1.170914963937e+03+0.000000000000e+00j 5.511984988142e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215538e+00 4.701433168732e+02+0.000000000000e+00j -3.520407372796e+03+0.000000000000e+00j 4.701433168732e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385183e+00 -9.131359997229e+02+0.000000000000e+00j 1.570279330276e+02+0.000000000000e+00j -9.131359997229e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 1.347963952060e+02+0.000000000000e+00j -2.107875696037e+03+0.000000000000e+00j 2.473510677022e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 -1.383957859739e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j 2.100426273073e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -9.430387165019e+02+0.000000000000e+00j -5.951882676022e+02+0.000000000000e+00j -1.600399579646e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909403e+00 -1.362258017173e+03+0.000000000000e+00j -1.362258017173e+03+0.000000000000e+00j -6.848654363584e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834566e+00 -2.277392898267e+03+0.000000000000e+00j -2.277392898267e+03+0.000000000000e+00j 1.978995825481e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902966e+00 -9.309665228030e+02+0.000000000000e+00j -9.309665228030e+02+0.000000000000e+00j -1.522129397386e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 -2.658278854984e+03+0.000000000000e+00j -5.517436734186e+01+0.000000000000e+00j -5.964543806476e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 -2.244897517877e+03+0.000000000000e+00j -2.407984538040e+03+0.000000000000e+00j -1.022767542874e-13+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 -9.608585950688e+02+0.000000000000e+00j -6.727877776834e+02+0.000000000000e+00j -3.590979669168e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 -2.297162805675e+03+0.000000000000e+00j 2.235944633189e+02+0.000000000000e+00j -4.109790152335e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 -2.349960447274e+03+0.000000000000e+00j -1.651408145566e+03+0.000000000000e+00j -3.866751154283e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -8.193662174822e+02+0.000000000000e+00j -3.249726472726e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 -1.170914963950e+03+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 -3.520407372805e+03+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 1.570279330060e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 -1.222381804894e+03+0.000000000000e+00j 1.436326007861e+03+0.000000000000e+00j -7.962977576048e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 -2.773373845637e+03+0.000000000000e+00j 9.408488419795e+02+0.000000000000e+00j 2.209454667325e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 9.858366119346e+02+0.000000000000e+00j -9.265906162319e+02+0.000000000000e+00j 5.737601261443e+01+0.000000000000e+00j 1.000000000000e-01 + 6.499026258316e+00 -1.391753177018e+03+0.000000000000e+00j 1.391753177018e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.172018726734e+00 -1.140089543166e+03+0.000000000000e+00j 1.140089543166e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 8.841630070240e+00 1.212226534592e+03+0.000000000000e+00j -1.212226534592e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 6.603071664874e-15+0.000000000000e+00j 6.045603724411e-14+0.000000000000e+00j -3.003939055115e+02+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 4.844139311983e-14+0.000000000000e+00j 4.435170198378e-13+0.000000000000e+00j -2.203746984141e+03+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 -4.182442897798e-14+0.000000000000e+00j -3.829337866263e-13+0.000000000000e+00j 1.902721067418e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 1.565824031930e+03+0.000000000000e+00j -8.165966244859e+02+0.000000000000e+00j -3.405764006429e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.466859757958e+03+0.000000000000e+00j -1.224827992548e+03+0.000000000000e+00j -1.674226432371e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 2.837982416495e+02+0.000000000000e+00j 1.160191764816e+02+0.000000000000e+00j 1.176647268028e+03+0.000000000000e+00j 1.000000000000e-01 + 5.886471015343e+00 5.453827687681e+02+0.000000000000e+00j -1.132852811781e+03+0.000000000000e+00j 5.453827687681e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 -9.798348926316e+02+0.000000000000e+00j -2.474222927435e+03+0.000000000000e+00j -9.798348926316e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806791e+00 2.890782383714e+01+0.000000000000e+00j -3.169800657750e+02+0.000000000000e+00j 2.890782383714e+01+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 2.235944633120e+02+0.000000000000e+00j -2.297162805672e+03+0.000000000000e+00j 4.109790152351e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 -1.651408145573e+03+0.000000000000e+00j -2.349960447269e+03+0.000000000000e+00j 3.866751154302e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 -3.249726472674e+02+0.000000000000e+00j -8.193662174715e+02+0.000000000000e+00j -7.231958063040e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 -5.517436734186e+01+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j -5.964543806476e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 -2.407984538040e+03+0.000000000000e+00j -2.244897517877e+03+0.000000000000e+00j -1.022767542874e-13+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 -6.727877776834e+02+0.000000000000e+00j -9.608585950688e+02+0.000000000000e+00j -3.590979669168e-14+0.000000000000e+00j 1.000000000000e-01 + 4.568615909401e+00 -1.362258017175e+03+0.000000000000e+00j -1.362258017175e+03+0.000000000000e+00j 6.848654362995e+01+0.000000000000e+00j 1.000000000000e-01 + 6.464678834561e+00 -2.277392898260e+03+0.000000000000e+00j -2.277392898260e+03+0.000000000000e+00j -1.978995825498e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902965e+00 -9.309665228146e+02+0.000000000000e+00j -9.309665228146e+02+0.000000000000e+00j 1.522129397379e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.107875696041e+03+0.000000000000e+00j 1.347963952067e+02+0.000000000000e+00j -2.473510677569e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531748e+00 -2.537027100001e+03+0.000000000000e+00j -1.383957859722e+03+0.000000000000e+00j -2.100426273078e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 -5.951882676219e+02+0.000000000000e+00j -9.430387165091e+02+0.000000000000e+00j 1.600399579641e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 -7.484369549273e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 -2.663991119437e+03+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 7.537749369760e+01+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236690e+00 -1.029630366785e+03+0.000000000000e+00j 1.029630366785e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 6.235121845308e+00 -2.417747879247e+03+0.000000000000e+00j 2.417747879247e+03+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 9.937237592376e+00 8.075401156400e+02+0.000000000000e+00j -8.075401156400e+02+0.000000000000e+00j 0.000000000000e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 -1.436326007861e+03+0.000000000000e+00j 1.222381804894e+03+0.000000000000e+00j 7.962977576049e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 -9.408488419796e+02+0.000000000000e+00j 2.773373845637e+03+0.000000000000e+00j -2.209454667325e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 9.265906162319e+02+0.000000000000e+00j -9.858366119346e+02+0.000000000000e+00j -5.737601261443e+01+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 -1.565824031920e+03+0.000000000000e+00j 8.165966244787e+02+0.000000000000e+00j -3.405764006383e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.466859757964e+03+0.000000000000e+00j 1.224827992550e+03+0.000000000000e+00j -1.674226432375e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 -2.837982416353e+02+0.000000000000e+00j -1.160191764851e+02+0.000000000000e+00j 1.176647268019e+03+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 1.105082526729e-14+0.000000000000e+00j 1.011785329383e-13+0.000000000000e+00j -5.027358068558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 3.479796022550e-14+0.000000000000e+00j 3.186012338166e-13+0.000000000000e+00j -1.583065534720e+03+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 -2.341025136698e-14+0.000000000000e+00j -2.143382807844e-13+0.000000000000e+00j 1.065003863972e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 3.350650599564e+02+0.000000000000e+00j -6.851091907693e+02+0.000000000000e+00j 3.350650599564e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093595e+00 -1.317747768119e+03+0.000000000000e+00j -8.546200435520e+02+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 4.550013552749e+02+0.000000000000e+00j -6.775000304802e+02+0.000000000000e+00j 4.550013552749e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 -1.389460562279e+02+0.000000000000e+00j -1.738978129235e+03+0.000000000000e+00j -4.127935937023e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 -1.627322748356e+03+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j -6.563271480564e-14+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 4.535788174358e+02+0.000000000000e+00j -1.129334593094e+03+0.000000000000e+00j -1.485404241843e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 2.235944633189e+02+0.000000000000e+00j -2.297162805675e+03+0.000000000000e+00j -4.109790152335e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 -1.651408145566e+03+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j -3.866751154283e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -3.249726472726e+02+0.000000000000e+00j -8.193662174822e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 1.347963952067e+02+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j -2.473510677569e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531748e+00 -1.383957859722e+03+0.000000000000e+00j -2.537027100001e+03+0.000000000000e+00j -2.100426273078e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 -9.430387165091e+02+0.000000000000e+00j -5.951882676219e+02+0.000000000000e+00j 1.600399579641e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844972e+00 -8.326275941940e+02+0.000000000000e+00j -8.326275941940e+02+0.000000000000e+00j 1.095902598382e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649676e+00 -1.515634023269e+03+0.000000000000e+00j -1.515634023269e+03+0.000000000000e+00j -2.246901195613e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751927e+00 -6.390435888739e+02+0.000000000000e+00j -6.390435888739e+02+0.000000000000e+00j 1.373374188795e+03+0.000000000000e+00j 1.000000000000e-01 + 4.408824939127e+00 -6.440774382626e+02+0.000000000000e+00j -6.440774382626e+02+0.000000000000e+00j 6.440774382626e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939133e+00 -6.440774382705e+02+0.000000000000e+00j -6.440774382705e+02+0.000000000000e+00j 6.440774382705e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103762e+00 -1.407846987107e+03+0.000000000000e+00j -1.407846987107e+03+0.000000000000e+00j 1.407846987107e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 -8.326275941955e+02+0.000000000000e+00j -1.095902598229e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 -1.515634023277e+03+0.000000000000e+00j 2.246901195615e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 -6.390435888751e+02+0.000000000000e+00j -1.373374188791e+03+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 -9.813960230292e+02+0.000000000000e+00j 3.903028684481e+02+0.000000000000e+00j 9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 -1.439610072415e+03+0.000000000000e+00j 3.181897710267e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 1.539717814991e+02+0.000000000000e+00j -1.483189426179e+03+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 -9.221540938131e+02+0.000000000000e+00j 4.132400085451e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 -1.118741331148e+02+0.000000000000e+00j 2.947829831354e+03+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 4.932098470679e+00+0.000000000000e+00j -1.739754380415e+03+0.000000000000e+00j -4.932098470679e+00+0.000000000000e+00j 1.000000000000e-01 + 6.171043712422e+00 -6.817503300498e+02+0.000000000000e+00j -1.226291487929e-13+0.000000000000e+00j 6.817503300498e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566863e+00 1.880020318403e+03+0.000000000000e+00j 3.381667469706e-13+0.000000000000e+00j -1.880020318403e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280855e+00 -1.091389803066e+03+0.000000000000e+00j -1.963126333089e-13+0.000000000000e+00j 1.091389803066e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 -3.350650599558e+02+0.000000000000e+00j -6.851091907668e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 1.317747768132e+03+0.000000000000e+00j -8.546200435528e+02+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 -4.550013552696e+02+0.000000000000e+00j -6.775000304813e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 6.162247816937e+00 3.097729547225e-14+0.000000000000e+00j -1.409251821178e+03+0.000000000000e+00j -3.097729547227e-14+0.000000000000e+00j 1.000000000000e-01 + 6.162247816944e+00 3.097729547185e-14+0.000000000000e+00j -1.409251821172e+03+0.000000000000e+00j -3.097729547205e-14+0.000000000000e+00j 1.000000000000e-01 + 9.558851750691e+00 3.751576875907e-14+0.000000000000e+00j -1.706706949096e+03+0.000000000000e+00j -3.751576875904e-14+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 1.955720814232e+02+0.000000000000e+00j -1.931571181618e+03+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 -8.360286832812e+02+0.000000000000e+00j -2.327628679175e+03+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 -1.902976282779e+02+0.000000000000e+00j -2.153754821739e+03+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 1.611704542809e+02+0.000000000000e+00j -2.058840261207e+03+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 -2.103459518153e+02+0.000000000000e+00j -3.440855856631e+03+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 -1.305283557963e+03+0.000000000000e+00j -1.749125406728e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 -1.089702533912e+02+0.000000000000e+00j -1.693883617056e+03+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 3.331454318583e+01+0.000000000000e+00j -2.983841276862e+03+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.792515640354e+03+0.000000000000e+00j -1.492388034645e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 -1.095902598229e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 2.246901195615e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 -1.373374188791e+03+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181326e+00 3.449549636286e+02+0.000000000000e+00j 3.449549636286e+02+0.000000000000e+00j 7.484369549179e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658484e+00 7.252539022881e+02+0.000000000000e+00j 7.252539022881e+02+0.000000000000e+00j 2.663991119428e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192903e+02+0.000000000000e+00j -6.906934192903e+02+0.000000000000e+00j -7.537749370039e+01+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 -4.465139540329e-14+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 -1.048490992744e-13+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 3.502013360440e-14+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -7.962977582707e+00+0.000000000000e+00j 1.222381804899e+03+0.000000000000e+00j 1.436326007856e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.209454667211e+02+0.000000000000e+00j 2.773373845643e+03+0.000000000000e+00j 9.408488419744e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 5.737601261161e+01+0.000000000000e+00j -9.858366119327e+02+0.000000000000e+00j -9.265906162360e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 3.405764006341e+02+0.000000000000e+00j 8.165966244897e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.674226432372e+03+0.000000000000e+00j 1.224827992553e+03+0.000000000000e+00j -1.466859757966e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 -1.176647268022e+03+0.000000000000e+00j -1.160191764820e+02+0.000000000000e+00j 2.837982416341e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 5.027358068558e+02+0.000000000000e+00j -1.045124067686e-14+0.000000000000e+00j 1.105082526647e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 1.583065534720e+03+0.000000000000e+00j -3.290992741067e-14+0.000000000000e+00j 3.479796022509e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 -1.065003863972e+03+0.000000000000e+00j 2.214008143490e-14+0.000000000000e+00j -2.341025136739e-14+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 -3.350650599560e+02+0.000000000000e+00j -6.851091907684e+02+0.000000000000e+00j -3.350650599560e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093596e+00 1.317747768119e+03+0.000000000000e+00j -8.546200435459e+02+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 -4.550013552737e+02+0.000000000000e+00j -6.775000304810e+02+0.000000000000e+00j -4.550013552737e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 3.517178871334e-14+0.000000000000e+00j -1.738978129230e+03+0.000000000000e+00j 1.389460562305e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 -5.898560940771e-15+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j 1.627322748360e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 3.479174162067e-14+0.000000000000e+00j -1.129334593096e+03+0.000000000000e+00j -4.535788174314e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 4.109790152323e+02+0.000000000000e+00j -2.297162805673e+03+0.000000000000e+00j -2.235944633154e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 3.866751154334e+02+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j 1.651408145580e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 -7.231958063081e+02+0.000000000000e+00j -8.193662174838e+02+0.000000000000e+00j 3.249726472798e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 2.473510678724e+01+0.000000000000e+00j -2.107875696050e+03+0.000000000000e+00j -1.347963952090e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 2.100426273080e+03+0.000000000000e+00j -2.537027100000e+03+0.000000000000e+00j 1.383957859743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 -1.600399579637e+03+0.000000000000e+00j -5.951882676234e+02+0.000000000000e+00j 9.430387165133e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 3.903028684481e+02+0.000000000000e+00j -9.813960230292e+02+0.000000000000e+00j 9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 3.181897710267e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 -1.483189426179e+03+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 1.029630366773e+03+0.000000000000e+00j -2.274024116701e-13+0.000000000000e+00j 1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 2.417747879248e+03+0.000000000000e+00j -5.339796846459e-13+0.000000000000e+00j 2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 -8.075401156421e+02+0.000000000000e+00j 1.783519365236e-13+0.000000000000e+00j -8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368607e+00 9.813960230264e+02+0.000000000000e+00j 9.813960230264e+02+0.000000000000e+00j 3.903028684352e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870169e+00 1.439610072411e+03+0.000000000000e+00j 1.439610072411e+03+0.000000000000e+00j 3.181897710263e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609831e+00 -1.539717814987e+02+0.000000000000e+00j -1.539717814987e+02+0.000000000000e+00j -1.483189426185e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -1.368428956438e+01+0.000000000000e+00j 2.228955124172e+03+0.000000000000e+00j 3.405516824148e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 1.664544017633e+03+0.000000000000e+00j 1.737759702190e+03+0.000000000000e+00j 2.155507627740e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 -8.232383415556e+01+0.000000000000e+00j -4.074490724521e+02+0.000000000000e+00j -1.487864010841e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 -1.937303341824e+02+0.000000000000e+00j 2.336191913904e+03+0.000000000000e+00j 4.709425554437e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 2.256075560900e+03+0.000000000000e+00j 1.257665397688e+03+0.000000000000e+00j 7.723686444910e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 -8.541533926821e+02+0.000000000000e+00j -2.739789173907e+02+0.000000000000e+00j -2.479790153572e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 3.405764006429e+02+0.000000000000e+00j 8.165966244859e+02+0.000000000000e+00j -1.565824031930e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.674226432371e+03+0.000000000000e+00j 1.224827992548e+03+0.000000000000e+00j 1.466859757958e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 -1.176647268028e+03+0.000000000000e+00j -1.160191764816e+02+0.000000000000e+00j -2.837982416495e+02+0.000000000000e+00j 1.000000000000e-01 + 6.171043712417e+00 -6.817503300509e+02+0.000000000000e+00j 1.509746005538e-13+0.000000000000e+00j -6.817503300509e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566858e+00 1.880020318391e+03+0.000000000000e+00j -4.163332294696e-13+0.000000000000e+00j 1.880020318391e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280851e+00 -1.091389803073e+03+0.000000000000e+00j 2.416898566889e-13+0.000000000000e+00j -1.091389803073e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 -1.565824031931e+03+0.000000000000e+00j -8.165966244843e+02+0.000000000000e+00j 3.405764006424e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.466859757945e+03+0.000000000000e+00j -1.224827992545e+03+0.000000000000e+00j 1.674226432366e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 -2.837982416423e+02+0.000000000000e+00j 1.160191764878e+02+0.000000000000e+00j -1.176647268018e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 5.560994671281e-14+0.000000000000e+00j -2.336191913897e+03+0.000000000000e+00j -1.937303341826e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 -2.193213150591e-14+0.000000000000e+00j -1.257665397683e+03+0.000000000000e+00j 2.256075560905e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 1.274762034804e-14+0.000000000000e+00j 2.739789173931e+02+0.000000000000e+00j -8.541533926711e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 3.405516824120e+02+0.000000000000e+00j -2.228955124173e+03+0.000000000000e+00j -1.368428956506e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 2.155507627736e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 -1.487864010833e+03+0.000000000000e+00j 4.074490724538e+02+0.000000000000e+00j -8.232383415397e+01+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 4.132400085451e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 2.947829831354e+03+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 -1.739754380415e+03+0.000000000000e+00j 4.932098470682e+00+0.000000000000e+00j -4.932098470682e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.222381804899e+03+0.000000000000e+00j -7.962977582706e+00+0.000000000000e+00j 1.436326007856e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.773373845643e+03+0.000000000000e+00j 2.209454667211e+02+0.000000000000e+00j 9.408488419744e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 -9.858366119327e+02+0.000000000000e+00j 5.737601261161e+01+0.000000000000e+00j -9.265906162360e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 2.228955124172e+03+0.000000000000e+00j -1.368428956439e+01+0.000000000000e+00j 3.405516824148e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 1.737759702190e+03+0.000000000000e+00j 1.664544017633e+03+0.000000000000e+00j 2.155507627740e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 -4.074490724521e+02+0.000000000000e+00j -8.232383415556e+01+0.000000000000e+00j -1.487864010841e+03+0.000000000000e+00j 1.000000000000e-01 + 5.217363486838e+00 1.218893138245e+03+0.000000000000e+00j 1.218893138245e+03+0.000000000000e+00j 5.358589902119e-14+0.000000000000e+00j 1.000000000000e-01 + 7.854999616706e+00 2.067573412718e+03+0.000000000000e+00j 2.067573412718e+03+0.000000000000e+00j 9.089622103384e-14+0.000000000000e+00j 1.000000000000e-01 + 9.063866630519e+00 -4.039473572620e+02+0.000000000000e+00j -4.039473572620e+02+0.000000000000e+00j -1.775863823788e-14+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -1.368428956542e+01+0.000000000000e+00j 2.228955124171e+03+0.000000000000e+00j -3.405516824124e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 1.664544017648e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j -2.155507627730e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 -8.232383416614e+01+0.000000000000e+00j -4.074490724641e+02+0.000000000000e+00j 1.487864010835e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -7.962977575723e+00+0.000000000000e+00j 1.222381804892e+03+0.000000000000e+00j -1.436326007859e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.209454667337e+02+0.000000000000e+00j 2.773373845634e+03+0.000000000000e+00j -9.408488419780e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 5.737601260710e+01+0.000000000000e+00j -9.858366119468e+02+0.000000000000e+00j 9.265906162318e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 -9.221540938119e+02+0.000000000000e+00j 4.132400085402e+02+0.000000000000e+00j -9.221540938119e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253368e+00 -1.118741331111e+02+0.000000000000e+00j 2.947829831351e+03+0.000000000000e+00j -1.118741331111e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710743991e+00 4.932098463216e+00+0.000000000000e+00j -1.739754380424e+03+0.000000000000e+00j 4.932098463216e+00+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 -2.114543049926e+03+0.000000000000e+00j 4.046492772342e-15+0.000000000000e+00j 1.994915061874e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 1.516378160767e+03+0.000000000000e+00j -3.130970396574e-13+0.000000000000e+00j 1.407377764408e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 -1.161560904478e+03+0.000000000000e+00j 4.136700112417e-13+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 -1.391753177029e+03+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j -6.118530235880e-14+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 -1.140089543169e+03+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j -5.012147596807e-14+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 1.212226534588e+03+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 5.329281676556e-14+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 5.086440146715e-14+0.000000000000e+00j -2.114543049917e+03+0.000000000000e+00j -1.994915061823e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 -2.404898519274e-15+0.000000000000e+00j 1.516378160774e+03+0.000000000000e+00j -1.407377764407e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 -1.725128567274e-14+0.000000000000e+00j -1.161560904470e+03+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 6.171043712422e+00 2.160408859439e-18+0.000000000000e+00j -6.817503300498e+02+0.000000000000e+00j 6.817503300498e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566863e+00 -5.957624621233e-18+0.000000000000e+00j 1.880020318403e+03+0.000000000000e+00j -1.880020318403e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280855e+00 3.458521537439e-18+0.000000000000e+00j -1.091389803066e+03+0.000000000000e+00j 1.091389803066e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 8.165966244897e+02+0.000000000000e+00j 3.405764006341e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.224827992553e+03+0.000000000000e+00j 1.674226432372e+03+0.000000000000e+00j -1.466859757966e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 -1.160191764820e+02+0.000000000000e+00j -1.176647268022e+03+0.000000000000e+00j 2.837982416341e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 2.336191913904e+03+0.000000000000e+00j -1.937303341824e+02+0.000000000000e+00j 4.709425554437e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 1.257665397688e+03+0.000000000000e+00j 2.256075560900e+03+0.000000000000e+00j 7.723686444910e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 -2.739789173907e+02+0.000000000000e+00j -8.541533926821e+02+0.000000000000e+00j -2.479790153572e-14+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 2.228955124171e+03+0.000000000000e+00j -1.368428956543e+01+0.000000000000e+00j -3.405516824124e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 1.737759702187e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j -2.155507627730e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 -4.074490724641e+02+0.000000000000e+00j -8.232383416614e+01+0.000000000000e+00j 1.487864010835e+03+0.000000000000e+00j 1.000000000000e-01 + 5.120703368609e+00 9.813960230235e+02+0.000000000000e+00j 9.813960230235e+02+0.000000000000e+00j -3.903028684318e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870179e+00 1.439610072412e+03+0.000000000000e+00j 1.439610072412e+03+0.000000000000e+00j -3.181897710259e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609828e+00 -1.539717815092e+02+0.000000000000e+00j -1.539717815092e+02+0.000000000000e+00j 1.483189426196e+03+0.000000000000e+00j 1.000000000000e-01 + 5.164686236689e+00 -6.139909804174e-16+0.000000000000e+00j 1.029630366767e+03+0.000000000000e+00j -1.029630366767e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845307e+00 -1.441755642307e-15+0.000000000000e+00j 2.417747879241e+03+0.000000000000e+00j -2.417747879241e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592373e+00 4.815537335936e-16+0.000000000000e+00j -8.075401156560e+02+0.000000000000e+00j 8.075401156560e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368609e+00 -9.813960230235e+02+0.000000000000e+00j 3.903028684318e+02+0.000000000000e+00j -9.813960230235e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870179e+00 -1.439610072412e+03+0.000000000000e+00j 3.181897710259e+03+0.000000000000e+00j -1.439610072412e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609828e+00 1.539717815092e+02+0.000000000000e+00j -1.483189426196e+03+0.000000000000e+00j 1.539717815092e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -2.228955124171e+03+0.000000000000e+00j 3.405516824124e+02+0.000000000000e+00j 1.368428956543e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 -1.737759702187e+03+0.000000000000e+00j 2.155507627730e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 4.074490724641e+02+0.000000000000e+00j -1.487864010835e+03+0.000000000000e+00j 8.232383416614e+01+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 -2.336191913904e+03+0.000000000000e+00j 9.806927103340e-15+0.000000000000e+00j 1.937303341824e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 -1.257665397688e+03+0.000000000000e+00j 4.775173286376e-13+0.000000000000e+00j -2.256075560900e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 2.739789173907e+02+0.000000000000e+00j -1.765857731010e-13+0.000000000000e+00j 8.541533926821e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 -8.165966244897e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j -3.405764006341e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.224827992553e+03+0.000000000000e+00j 1.466859757966e+03+0.000000000000e+00j -1.674226432372e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 1.160191764820e+02+0.000000000000e+00j -2.837982416341e+02+0.000000000000e+00j 1.176647268022e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112450e+00 -6.851091907668e+02+0.000000000000e+00j -3.350650599558e+02+0.000000000000e+00j 3.350650599558e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093594e+00 -8.546200435528e+02+0.000000000000e+00j 1.317747768132e+03+0.000000000000e+00j -1.317747768132e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721147e+00 -6.775000304813e+02+0.000000000000e+00j -4.550013552696e+02+0.000000000000e+00j 4.550013552696e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 -1.105082526729e-14+0.000000000000e+00j 5.027358068558e+02+0.000000000000e+00j 1.105082526810e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 -3.479796022550e-14+0.000000000000e+00j 1.583065534720e+03+0.000000000000e+00j 3.479796022469e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 2.341025136709e-14+0.000000000000e+00j -1.065003863972e+03+0.000000000000e+00j -2.341025136698e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 8.165966244859e+02+0.000000000000e+00j 3.405764006429e+02+0.000000000000e+00j -1.565824031930e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.224827992548e+03+0.000000000000e+00j 1.674226432371e+03+0.000000000000e+00j 1.466859757958e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 -1.160191764816e+02+0.000000000000e+00j -1.176647268028e+03+0.000000000000e+00j -2.837982416495e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.222381804892e+03+0.000000000000e+00j -7.962977575721e+00+0.000000000000e+00j -1.436326007859e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 2.773373845634e+03+0.000000000000e+00j 2.209454667337e+02+0.000000000000e+00j -9.408488419780e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 -9.858366119468e+02+0.000000000000e+00j 5.737601260710e+01+0.000000000000e+00j 9.265906162318e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236689e+00 1.029630366767e+03+0.000000000000e+00j 1.845929892073e-13+0.000000000000e+00j -1.029630366767e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845307e+00 2.417747879241e+03+0.000000000000e+00j 4.334558522978e-13+0.000000000000e+00j -2.417747879241e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592373e+00 -8.075401156560e+02+0.000000000000e+00j -1.447764641226e-13+0.000000000000e+00j 8.075401156560e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181330e+00 3.449549636261e+02+0.000000000000e+00j 3.449549636261e+02+0.000000000000e+00j -7.484369549129e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658496e+00 7.252539022813e+02+0.000000000000e+00j 7.252539022813e+02+0.000000000000e+00j -2.663991119425e+03+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 -6.906934192940e+02+0.000000000000e+00j -6.906934192940e+02+0.000000000000e+00j 7.537749371539e+01+0.000000000000e+00j 1.000000000000e-01 + 4.619612844976e+00 -8.326275941904e+02+0.000000000000e+00j -1.095902598418e+02+0.000000000000e+00j -8.326275941904e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649688e+00 -1.515634023272e+03+0.000000000000e+00j 2.246901195603e+03+0.000000000000e+00j -1.515634023272e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751932e+00 -6.390435888622e+02+0.000000000000e+00j -1.373374188802e+03+0.000000000000e+00j -6.390435888622e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 -2.107875696037e+03+0.000000000000e+00j 2.473510677021e+01+0.000000000000e+00j 1.347963952060e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 -2.537027099992e+03+0.000000000000e+00j 2.100426273073e+03+0.000000000000e+00j -1.383957859739e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -5.951882676022e+02+0.000000000000e+00j -1.600399579646e+03+0.000000000000e+00j -9.430387165019e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 -2.297162805672e+03+0.000000000000e+00j 4.109790152351e+02+0.000000000000e+00j 2.235944633120e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 -2.349960447269e+03+0.000000000000e+00j 3.866751154302e+02+0.000000000000e+00j -1.651408145573e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 -8.193662174715e+02+0.000000000000e+00j -7.231958063040e+02+0.000000000000e+00j -3.249726472674e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 -1.738978129235e+03+0.000000000000e+00j 6.395002991878e-14+0.000000000000e+00j -1.389460562279e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 -1.358509986833e+03+0.000000000000e+00j 3.538194577033e-13+0.000000000000e+00j -1.627322748356e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -1.129334593094e+03+0.000000000000e+00j -6.726988125714e-14+0.000000000000e+00j 4.535788174358e+02+0.000000000000e+00j 1.000000000000e-01 + 6.162247816937e+00 -1.409251821178e+03+0.000000000000e+00j 2.929656045266e-14+0.000000000000e+00j -3.097729547225e-14+0.000000000000e+00j 1.000000000000e-01 + 6.162247816944e+00 -1.409251821172e+03+0.000000000000e+00j 2.929656045223e-14+0.000000000000e+00j -3.097729547185e-14+0.000000000000e+00j 1.000000000000e-01 + 9.558851750691e+00 -1.706706949096e+03+0.000000000000e+00j 3.548027581567e-14+0.000000000000e+00j -3.751576875909e-14+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 -6.851091907684e+02+0.000000000000e+00j -3.350650599560e+02+0.000000000000e+00j -3.350650599560e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093596e+00 -8.546200435459e+02+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j 1.317747768119e+03+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 -6.775000304810e+02+0.000000000000e+00j -4.550013552737e+02+0.000000000000e+00j -4.550013552737e+02+0.000000000000e+00j 1.000000000000e-01 + 6.171043712417e+00 2.996946154672e-14+0.000000000000e+00j -6.817503300509e+02+0.000000000000e+00j -6.817503300509e+02+0.000000000000e+00j 1.000000000000e-01 + 7.739218566858e+00 -8.264491288887e-14+0.000000000000e+00j 1.880020318391e+03+0.000000000000e+00j 1.880020318391e+03+0.000000000000e+00j 1.000000000000e-01 + 9.436766280851e+00 4.797704275929e-14+0.000000000000e+00j -1.091389803073e+03+0.000000000000e+00j -1.091389803073e+03+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 4.132400085402e+02+0.000000000000e+00j -9.221540938118e+02+0.000000000000e+00j -9.221540938118e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253368e+00 2.947829831351e+03+0.000000000000e+00j -1.118741331111e+02+0.000000000000e+00j -1.118741331111e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710743991e+00 -1.739754380424e+03+0.000000000000e+00j 4.932098463212e+00+0.000000000000e+00j 4.932098463212e+00+0.000000000000e+00j 1.000000000000e-01 + 5.120703368609e+00 3.903028684318e+02+0.000000000000e+00j -9.813960230235e+02+0.000000000000e+00j -9.813960230235e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870179e+00 3.181897710259e+03+0.000000000000e+00j -1.439610072412e+03+0.000000000000e+00j -1.439610072412e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609828e+00 -1.483189426196e+03+0.000000000000e+00j 1.539717815092e+02+0.000000000000e+00j 1.539717815092e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844976e+00 -1.095902598418e+02+0.000000000000e+00j -8.326275941904e+02+0.000000000000e+00j -8.326275941904e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649688e+00 2.246901195603e+03+0.000000000000e+00j -1.515634023272e+03+0.000000000000e+00j -1.515634023272e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751932e+00 -1.373374188802e+03+0.000000000000e+00j -6.390435888622e+02+0.000000000000e+00j -6.390435888622e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939138e+00 -6.440774382689e+02+0.000000000000e+00j -6.440774382689e+02+0.000000000000e+00j -6.440774382689e+02+0.000000000000e+00j 1.000000000000e-01 + 4.408824939138e+00 -6.440774382689e+02+0.000000000000e+00j -6.440774382689e+02+0.000000000000e+00j -6.440774382689e+02+0.000000000000e+00j 1.000000000000e-01 + 9.810366103772e+00 -1.407846987100e+03+0.000000000000e+00j -1.407846987100e+03+0.000000000000e+00j -1.407846987100e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700620e+00 -1.693883617047e+03+0.000000000000e+00j -1.089702534039e+02+0.000000000000e+00j -1.089702534039e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605928e+00 -2.983841276852e+03+0.000000000000e+00j 3.331454318132e+01+0.000000000000e+00j 3.331454318132e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072674e+00 -1.492388034624e+03+0.000000000000e+00j -1.792515640352e+03+0.000000000000e+00j -1.792515640352e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614182e+00 -2.058840261201e+03+0.000000000000e+00j 1.611704542705e+02+0.000000000000e+00j 1.611704542705e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627747e+00 -3.440855856623e+03+0.000000000000e+00j -2.103459518126e+02+0.000000000000e+00j -2.103459518126e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550821e+00 -1.749125406708e+03+0.000000000000e+00j -1.305283557962e+03+0.000000000000e+00j -1.305283557962e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080837e+00 -1.931571181621e+03+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842362e+00 -2.327628679170e+03+0.000000000000e+00j -8.360286832695e+02+0.000000000000e+00j -8.360286832695e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225690e+00 -2.153754821733e+03+0.000000000000e+00j -1.902976282771e+02+0.000000000000e+00j -1.902976282771e+02+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 -1.931571181618e+03+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 -2.327628679175e+03+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 -2.153754821740e+03+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 -1.738978129230e+03+0.000000000000e+00j 8.352275633580e-15+0.000000000000e+00j 1.389460562305e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 -1.358509986833e+03+0.000000000000e+00j -2.973360537346e-13+0.000000000000e+00j 1.627322748360e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -1.129334593096e+03+0.000000000000e+00j 1.142247528847e-13+0.000000000000e+00j -4.535788174314e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 -8.165966244843e+02+0.000000000000e+00j -1.565824031931e+03+0.000000000000e+00j 3.405764006424e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.224827992545e+03+0.000000000000e+00j 1.466859757945e+03+0.000000000000e+00j 1.674226432366e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 1.160191764878e+02+0.000000000000e+00j -2.837982416423e+02+0.000000000000e+00j -1.176647268018e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 4.209673416884e-14+0.000000000000e+00j -2.114543049926e+03+0.000000000000e+00j 1.994915061874e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 -6.425926131698e-14+0.000000000000e+00j 1.516378160767e+03+0.000000000000e+00j 1.407377764408e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 6.831670181286e-14+0.000000000000e+00j -1.161560904478e+03+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 3.405516824124e+02+0.000000000000e+00j -2.228955124171e+03+0.000000000000e+00j 1.368428956542e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 2.155507627730e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 -1.487864010835e+03+0.000000000000e+00j 4.074490724641e+02+0.000000000000e+00j 8.232383416614e+01+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 2.473510677022e+01+0.000000000000e+00j -2.107875696037e+03+0.000000000000e+00j 1.347963952060e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 2.100426273073e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j -1.383957859739e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -1.600399579646e+03+0.000000000000e+00j -5.951882676022e+02+0.000000000000e+00j -9.430387165019e+02+0.000000000000e+00j 1.000000000000e-01 + 4.588935700620e+00 -1.089702534039e+02+0.000000000000e+00j -1.693883617047e+03+0.000000000000e+00j -1.089702534039e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605928e+00 3.331454318132e+01+0.000000000000e+00j -2.983841276852e+03+0.000000000000e+00j 3.331454318132e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072674e+00 -1.792515640352e+03+0.000000000000e+00j -1.492388034624e+03+0.000000000000e+00j -1.792515640352e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953789e+00 -1.287469747217e+03+0.000000000000e+00j -1.287469747217e+03+0.000000000000e+00j -6.948254471858e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351294e+00 -2.218454428373e+03+0.000000000000e+00j -2.218454428373e+03+0.000000000000e+00j 1.725508655129e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594732e+00 -2.011916748796e+03+0.000000000000e+00j -2.011916748796e+03+0.000000000000e+00j -2.139081422565e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 -2.855339344593e+03+0.000000000000e+00j 1.167708252118e+02+0.000000000000e+00j -4.048846605956e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 -2.754226153073e+03+0.000000000000e+00j -2.133281238363e+03+0.000000000000e+00j 1.271754473739e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 -2.292540364973e+03+0.000000000000e+00j -1.815457579586e+03+0.000000000000e+00j -1.439197506327e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 -2.901107133229e+03+0.000000000000e+00j 3.958756311590e+02+0.000000000000e+00j -5.506843794693e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -2.455785279109e+03+0.000000000000e+00j -1.768140685530e+03+0.000000000000e+00j -9.284770875828e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 -2.557589353128e+03+0.000000000000e+00j -9.018856377877e+02+0.000000000000e+00j -7.604402375890e-14+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 -2.058840261207e+03+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 -3.440855856631e+03+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 -1.749125406728e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 -2.297162805673e+03+0.000000000000e+00j 4.109790152323e+02+0.000000000000e+00j -2.235944633154e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -2.349960447274e+03+0.000000000000e+00j 3.866751154334e+02+0.000000000000e+00j 1.651408145580e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 -8.193662174838e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j 3.249726472798e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 -2.336191913897e+03+0.000000000000e+00j 8.732601479631e-14+0.000000000000e+00j -1.937303341826e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 -1.257665397683e+03+0.000000000000e+00j -4.252267872340e-13+0.000000000000e+00j 2.256075560905e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 2.739789173931e+02+0.000000000000e+00j 1.651944237380e-13+0.000000000000e+00j -8.541533926711e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 -1.391753177029e+03+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j -6.118530235880e-14+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 -1.140089543169e+03+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j -5.012147596807e-14+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 1.212226534588e+03+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 5.329281676556e-14+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 4.709548337438e-14+0.000000000000e+00j -2.336191913904e+03+0.000000000000e+00j 1.937303341824e+02+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 7.722256582591e-14+0.000000000000e+00j -1.257665397688e+03+0.000000000000e+00j -2.256075560900e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 -2.479248805700e-14+0.000000000000e+00j 2.739789173907e+02+0.000000000000e+00j 8.541533926821e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 4.109790152351e+02+0.000000000000e+00j -2.297162805672e+03+0.000000000000e+00j 2.235944633120e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 3.866751154302e+02+0.000000000000e+00j -2.349960447269e+03+0.000000000000e+00j -1.651408145573e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 -7.231958063040e+02+0.000000000000e+00j -8.193662174715e+02+0.000000000000e+00j -3.249726472674e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614182e+00 1.611704542705e+02+0.000000000000e+00j -2.058840261201e+03+0.000000000000e+00j 1.611704542705e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627747e+00 -2.103459518126e+02+0.000000000000e+00j -3.440855856623e+03+0.000000000000e+00j -2.103459518126e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550821e+00 -1.305283557962e+03+0.000000000000e+00j -1.749125406708e+03+0.000000000000e+00j -1.305283557962e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 1.167708252118e+02+0.000000000000e+00j -2.855339344593e+03+0.000000000000e+00j -4.048846605956e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 -2.133281238363e+03+0.000000000000e+00j -2.754226153073e+03+0.000000000000e+00j 1.271754473739e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 -1.815457579586e+03+0.000000000000e+00j -2.292540364973e+03+0.000000000000e+00j -1.439197506327e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118278e+00 -1.629999833649e+03+0.000000000000e+00j -1.629999833649e+03+0.000000000000e+00j -7.165928148162e-14+0.000000000000e+00j 1.000000000000e-01 + 5.470989580363e+00 -2.668739100343e+03+0.000000000000e+00j -2.668739100343e+03+0.000000000000e+00j -1.173251201912e-13+0.000000000000e+00j 1.000000000000e-01 + 8.166402741049e+00 -2.239677814254e+03+0.000000000000e+00j -2.239677814254e+03+0.000000000000e+00j -9.846240447617e-14+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 -2.855339344599e+03+0.000000000000e+00j 1.167708252139e+02+0.000000000000e+00j 4.048846605891e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.754226153072e+03+0.000000000000e+00j -2.133281238353e+03+0.000000000000e+00j -1.271754473744e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 -2.292540364986e+03+0.000000000000e+00j -1.815457579590e+03+0.000000000000e+00j 1.439197506310e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 -1.693883617056e+03+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 -2.983841276862e+03+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.492388034645e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 -2.107875696050e+03+0.000000000000e+00j 2.473510678724e+01+0.000000000000e+00j -1.347963952090e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 -2.537027100000e+03+0.000000000000e+00j 2.100426273080e+03+0.000000000000e+00j 1.383957859743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 -5.951882676235e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j 9.430387165133e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 -2.228955124173e+03+0.000000000000e+00j 3.405516824120e+02+0.000000000000e+00j -1.368428956506e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 -1.737759702187e+03+0.000000000000e+00j 2.155507627736e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 4.074490724537e+02+0.000000000000e+00j -1.487864010833e+03+0.000000000000e+00j -8.232383415397e+01+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 -2.114543049917e+03+0.000000000000e+00j 8.387085082777e-14+0.000000000000e+00j -1.994915061823e+02+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 1.516378160774e+03+0.000000000000e+00j 2.500498769047e-13+0.000000000000e+00j -1.407377764407e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 -1.161560904470e+03+0.000000000000e+00j -3.653752512289e-13+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 -1.565824031920e+03+0.000000000000e+00j -8.165966244897e+02+0.000000000000e+00j -3.405764006341e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.466859757966e+03+0.000000000000e+00j -1.224827992553e+03+0.000000000000e+00j -1.674226432372e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 -2.837982416341e+02+0.000000000000e+00j 1.160191764820e+02+0.000000000000e+00j 1.176647268022e+03+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 4.127847875246e-14+0.000000000000e+00j -1.738978129235e+03+0.000000000000e+00j -1.389460562279e+02+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 6.562240111066e-14+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j -1.627322748356e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 1.485691712351e-14+0.000000000000e+00j -1.129334593094e+03+0.000000000000e+00j 4.535788174358e+02+0.000000000000e+00j 1.000000000000e-01 + 5.686212080837e+00 1.955720814199e+02+0.000000000000e+00j -1.931571181621e+03+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842362e+00 -8.360286832695e+02+0.000000000000e+00j -2.327628679170e+03+0.000000000000e+00j -8.360286832695e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225690e+00 -1.902976282771e+02+0.000000000000e+00j -2.153754821733e+03+0.000000000000e+00j -1.902976282771e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 3.958756311590e+02+0.000000000000e+00j -2.901107133229e+03+0.000000000000e+00j -5.506843794693e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -1.768140685530e+03+0.000000000000e+00j -2.455785279109e+03+0.000000000000e+00j -9.284770875828e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 -9.018856377877e+02+0.000000000000e+00j -2.557589353128e+03+0.000000000000e+00j -7.604402375890e-14+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 1.167708252139e+02+0.000000000000e+00j -2.855339344599e+03+0.000000000000e+00j 4.048846605891e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.133281238353e+03+0.000000000000e+00j -2.754226153072e+03+0.000000000000e+00j -1.271754473744e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 -1.815457579590e+03+0.000000000000e+00j -2.292540364986e+03+0.000000000000e+00j 1.439197506310e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953784e+00 -1.287469747221e+03+0.000000000000e+00j -1.287469747221e+03+0.000000000000e+00j 6.948254471798e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835069351289e+00 -2.218454428366e+03+0.000000000000e+00j -2.218454428366e+03+0.000000000000e+00j -1.725508655145e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594722e+00 -2.011916748810e+03+0.000000000000e+00j -2.011916748810e+03+0.000000000000e+00j 2.139081422556e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175694e+00 -1.195877589769e+03+0.000000000000e+00j -1.195877589769e+03+0.000000000000e+00j 1.195877589769e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175695e+00 -1.195877589778e+03+0.000000000000e+00j -1.195877589778e+03+0.000000000000e+00j 1.195877589778e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501171e+00 -2.632351875672e+03+0.000000000000e+00j -2.632351875672e+03+0.000000000000e+00j 2.632351875672e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 -1.287469747220e+03+0.000000000000e+00j -6.948254471676e+02+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 -2.218454428379e+03+0.000000000000e+00j 1.725508655138e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 -2.011916748813e+03+0.000000000000e+00j -2.139081422557e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 -1.362258017177e+03+0.000000000000e+00j -6.848654362207e+01+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 -2.277392898273e+03+0.000000000000e+00j 1.978995825490e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 -9.309665228201e+02+0.000000000000e+00j -1.522129397376e+03+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217363486844e+00 -1.218893138247e+03+0.000000000000e+00j -2.192471663369e-13+0.000000000000e+00j 1.218893138247e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616714e+00 -2.067573412721e+03+0.000000000000e+00j -3.719026694865e-13+0.000000000000e+00j 2.067573412721e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630527e+00 4.039473572554e+02+0.000000000000e+00j 7.265962096967e-14+0.000000000000e+00j -4.039473572554e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 -9.221540938131e+02+0.000000000000e+00j -4.132400085451e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 -1.118741331148e+02+0.000000000000e+00j -2.947829831354e+03+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 4.932098470677e+00+0.000000000000e+00j 1.739754380415e+03+0.000000000000e+00j -4.932098470677e+00+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 -5.453827687707e+02+0.000000000000e+00j -1.132852811783e+03+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 9.798348926358e+02+0.000000000000e+00j -2.474222927441e+03+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 -2.890782382811e+01+0.000000000000e+00j -3.169800657838e+02+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 -1.955720814232e+02+0.000000000000e+00j -1.931571181618e+03+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 8.360286832812e+02+0.000000000000e+00j -2.327628679175e+03+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 1.902976282779e+02+0.000000000000e+00j -2.153754821739e+03+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 5.162878828392e+00 5.659317535603e-14+0.000000000000e+00j -2.574596465600e+03+0.000000000000e+00j -5.659317535600e-14+0.000000000000e+00j 1.000000000000e-01 + 5.162878828401e+00 5.659317535582e-14+0.000000000000e+00j -2.574596465595e+03+0.000000000000e+00j -5.659317535603e-14+0.000000000000e+00j 1.000000000000e-01 + 8.281247231959e+00 7.609702299110e-14+0.000000000000e+00j -3.461886087898e+03+0.000000000000e+00j -7.609702299089e-14+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 -6.887815763755e+01+0.000000000000e+00j -2.849906817858e+03+0.000000000000e+00j 6.887815763755e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 -2.907876485096e+02+0.000000000000e+00j -3.298255165072e+03+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 -1.173822321981e+03+0.000000000000e+00j -3.703285199892e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 -3.541150241882e+02+0.000000000000e+00j -3.270970228804e+03+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -4.336803003413e+02+0.000000000000e+00j -2.570858259195e+03+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 -2.466222371689e+03+0.000000000000e+00j -3.141814155967e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 -6.948254471676e+02+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 1.725508655138e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 -2.139081422557e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700616e+00 -1.089702534022e+02+0.000000000000e+00j -1.089702534022e+02+0.000000000000e+00j 1.693883617055e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605921e+00 3.331454319420e+01+0.000000000000e+00j 3.331454319420e+01+0.000000000000e+00j 2.983841276854e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.792515640355e+03+0.000000000000e+00j -1.792515640355e+03+0.000000000000e+00j 1.492388034645e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 1.347963952064e+02+0.000000000000e+00j 2.473510678252e+01+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 -1.383957859744e+03+0.000000000000e+00j 2.100426273090e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -9.430387165139e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j 5.951882676210e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 1.368428955981e+01+0.000000000000e+00j 3.405516824254e+02+0.000000000000e+00j 2.228955124167e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 -1.664544017651e+03+0.000000000000e+00j 2.155507627743e+03+0.000000000000e+00j 1.737759702183e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 8.232383415304e+01+0.000000000000e+00j -1.487864010830e+03+0.000000000000e+00j -4.074490724557e+02+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 1.994915061823e+02+0.000000000000e+00j -4.272028856579e-13+0.000000000000e+00j 2.114543049917e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 1.407377764407e+03+0.000000000000e+00j 2.741235190650e-13+0.000000000000e+00j -1.516378160774e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 -1.946935955182e+03+0.000000000000e+00j -1.919186532488e-13+0.000000000000e+00j 1.161560904470e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 3.405764006383e+02+0.000000000000e+00j -8.165966244787e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.674226432375e+03+0.000000000000e+00j -1.224827992550e+03+0.000000000000e+00j -1.466859757964e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 -1.176647268019e+03+0.000000000000e+00j 1.160191764851e+02+0.000000000000e+00j 2.837982416353e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 1.389460562305e+02+0.000000000000e+00j -1.738978129230e+03+0.000000000000e+00j -3.517090809638e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 1.627322748360e+03+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j 5.908874633701e-15+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -4.535788174314e+02+0.000000000000e+00j -1.129334593096e+03+0.000000000000e+00j -3.479461632554e-14+0.000000000000e+00j 1.000000000000e-01 + 5.686212080838e+00 -1.955720814199e+02+0.000000000000e+00j -1.931571181623e+03+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842365e+00 8.360286832711e+02+0.000000000000e+00j -2.327628679167e+03+0.000000000000e+00j 8.360286832711e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225688e+00 1.902976282757e+02+0.000000000000e+00j -2.153754821741e+03+0.000000000000e+00j 1.902976282757e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 7.246971188759e-14+0.000000000000e+00j -2.901107133228e+03+0.000000000000e+00j -3.958756311563e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 1.512658118036e-14+0.000000000000e+00j -2.455785279116e+03+0.000000000000e+00j 1.768140685534e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 3.640036345111e-14+0.000000000000e+00j -2.557589353136e+03+0.000000000000e+00j 9.018856377917e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 -4.048846605874e+02+0.000000000000e+00j -2.855339344604e+03+0.000000000000e+00j -1.167708252163e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 1.271754473743e+03+0.000000000000e+00j -2.754226153081e+03+0.000000000000e+00j 2.133281238368e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.439197506317e+03+0.000000000000e+00j -2.292540364991e+03+0.000000000000e+00j 1.815457579596e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 -6.848654362207e+01+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 1.978995825490e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 -1.522129397376e+03+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 2.473510678253e+01+0.000000000000e+00j 1.347963952064e+02+0.000000000000e+00j 2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 2.100426273090e+03+0.000000000000e+00j -1.383957859744e+03+0.000000000000e+00j 2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -1.600399579637e+03+0.000000000000e+00j -9.430387165139e+02+0.000000000000e+00j 5.951882676210e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 5.511984988163e+02+0.000000000000e+00j 5.511984988163e+02+0.000000000000e+00j 1.170914963942e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215531e+00 4.701433168860e+02+0.000000000000e+00j 4.701433168860e+02+0.000000000000e+00j 3.520407372794e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385185e+00 -9.131359997239e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j -1.570279330093e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 7.962977578283e+00+0.000000000000e+00j 1.436326007860e+03+0.000000000000e+00j 1.222381804895e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 -2.209454667356e+02+0.000000000000e+00j 9.408488419984e+02+0.000000000000e+00j 2.773373845625e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 -5.737601261432e+01+0.000000000000e+00j -9.265906162296e+02+0.000000000000e+00j -9.858366119372e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 -6.035536967115e-14+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 -4.944161577763e-14+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 5.256993971890e-14+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 3.003939055115e+02+0.000000000000e+00j -6.244808827071e-15+0.000000000000e+00j 6.603071664823e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 2.203746984141e+03+0.000000000000e+00j -4.581310861073e-14+0.000000000000e+00j 4.844139311901e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 -1.902721067418e+03+0.000000000000e+00j 3.955516107126e-14+0.000000000000e+00j -4.182442897778e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 3.405764006424e+02+0.000000000000e+00j -8.165966244843e+02+0.000000000000e+00j -1.565824031931e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 1.674226432366e+03+0.000000000000e+00j -1.224827992545e+03+0.000000000000e+00j 1.466859757945e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 -1.176647268018e+03+0.000000000000e+00j 1.160191764878e+02+0.000000000000e+00j -2.837982416423e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015344e+00 -5.453827687685e+02+0.000000000000e+00j -1.132852811782e+03+0.000000000000e+00j -5.453827687685e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 9.798348926173e+02+0.000000000000e+00j -2.474222927432e+03+0.000000000000e+00j 9.798348926173e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806792e+00 -2.890782382813e+01+0.000000000000e+00j -3.169800657809e+02+0.000000000000e+00j -2.890782382813e+01+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 -4.109790152451e+02+0.000000000000e+00j -2.297162805671e+03+0.000000000000e+00j -2.235944633121e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -3.866751154420e+02+0.000000000000e+00j -2.349960447270e+03+0.000000000000e+00j 1.651408145570e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 7.231958063048e+02+0.000000000000e+00j -8.193662174821e+02+0.000000000000e+00j 3.249726472808e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 5.722017061889e-14+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j 5.517436734321e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 -3.569615866223e-15+0.000000000000e+00j -2.244897517883e+03+0.000000000000e+00j 2.407984538050e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 6.336457234320e-15+0.000000000000e+00j -9.608585950775e+02+0.000000000000e+00j 6.727877776973e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217363486844e+00 3.862568771178e-18+0.000000000000e+00j -1.218893138247e+03+0.000000000000e+00j 1.218893138247e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616714e+00 6.551964438533e-18+0.000000000000e+00j -2.067573412721e+03+0.000000000000e+00j 2.067573412721e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630527e+00 -1.280074846913e-18+0.000000000000e+00j 4.039473572554e+02+0.000000000000e+00j -4.039473572554e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 3.405516824254e+02+0.000000000000e+00j 1.368428955981e+01+0.000000000000e+00j 2.228955124167e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 2.155507627743e+03+0.000000000000e+00j -1.664544017651e+03+0.000000000000e+00j 1.737759702183e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 -1.487864010830e+03+0.000000000000e+00j 8.232383415304e+01+0.000000000000e+00j -4.074490724557e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.436326007860e+03+0.000000000000e+00j 7.962977578278e+00+0.000000000000e+00j 1.222381804895e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 9.408488419985e+02+0.000000000000e+00j -2.209454667356e+02+0.000000000000e+00j 2.773373845625e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 -9.265906162296e+02+0.000000000000e+00j -5.737601261432e+01+0.000000000000e+00j -9.858366119372e+02+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 9.221540938127e+02+0.000000000000e+00j 9.221540938127e+02+0.000000000000e+00j 4.132400085402e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253359e+00 1.118741331224e+02+0.000000000000e+00j 1.118741331224e+02+0.000000000000e+00j 2.947829831349e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710744000e+00 -4.932098469482e+00+0.000000000000e+00j -4.932098469482e+00+0.000000000000e+00j -1.739754380418e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 -1.994915061874e+02+0.000000000000e+00j 2.114543049926e+03+0.000000000000e+00j 4.209546982558e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 -1.407377764408e+03+0.000000000000e+00j -1.516378160767e+03+0.000000000000e+00j -6.426818105996e-14+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 1.946935955182e+03+0.000000000000e+00j 1.161560904478e+03+0.000000000000e+00j 6.832904117004e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258313e+00 -8.299326877334e-16+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726731e+00 -6.798601896060e-16+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070229e+00 7.228770464433e-16+0.000000000000e+00j -1.212226534583e+03+0.000000000000e+00j 1.212226534583e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 1.994915061874e+02+0.000000000000e+00j 4.189085341701e-13+0.000000000000e+00j -2.114543049926e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 1.407377764408e+03+0.000000000000e+00j -3.326387214441e-13+0.000000000000e+00j 1.516378160767e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 -1.946935955182e+03+0.000000000000e+00j 2.728673184233e-13+0.000000000000e+00j -1.161560904478e+03+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 -9.221540938127e+02+0.000000000000e+00j -4.132400085402e+02+0.000000000000e+00j -9.221540938127e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253359e+00 -1.118741331224e+02+0.000000000000e+00j -2.947829831349e+03+0.000000000000e+00j -1.118741331224e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744000e+00 4.932098469481e+00+0.000000000000e+00j 1.739754380418e+03+0.000000000000e+00j 4.932098469481e+00+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.436326007860e+03+0.000000000000e+00j -1.222381804895e+03+0.000000000000e+00j -7.962977578282e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 -9.408488419985e+02+0.000000000000e+00j -2.773373845625e+03+0.000000000000e+00j 2.209454667356e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 9.265906162296e+02+0.000000000000e+00j 9.858366119372e+02+0.000000000000e+00j 5.737601261432e+01+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 -3.405516824254e+02+0.000000000000e+00j -2.228955124167e+03+0.000000000000e+00j -1.368428955981e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 -2.155507627743e+03+0.000000000000e+00j -1.737759702183e+03+0.000000000000e+00j 1.664544017651e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 1.487864010830e+03+0.000000000000e+00j 4.074490724557e+02+0.000000000000e+00j -8.232383415304e+01+0.000000000000e+00j 1.000000000000e-01 + 5.709250455334e+00 -4.132400085451e+02+0.000000000000e+00j -9.221540938131e+02+0.000000000000e+00j 9.221540938131e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253372e+00 -2.947829831354e+03+0.000000000000e+00j -1.118741331148e+02+0.000000000000e+00j 1.118741331148e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744002e+00 1.739754380415e+03+0.000000000000e+00j 4.932098470680e+00+0.000000000000e+00j -4.932098470680e+00+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 -5.085226419478e-14+0.000000000000e+00j 1.994915061823e+02+0.000000000000e+00j 2.114543049917e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 2.386368251168e-15+0.000000000000e+00j 1.407377764407e+03+0.000000000000e+00j -1.516378160774e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 1.727098679786e-14+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j 1.161560904470e+03+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 1.391753177029e+03+0.000000000000e+00j -3.073802396661e-13+0.000000000000e+00j 1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 1.140089543169e+03+0.000000000000e+00j -2.517982375066e-13+0.000000000000e+00j 1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 -1.212226534588e+03+0.000000000000e+00j 2.677302907453e-13+0.000000000000e+00j -1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 2.114543049926e+03+0.000000000000e+00j -1.994915061874e+02+0.000000000000e+00j 4.209546982558e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 -1.516378160767e+03+0.000000000000e+00j -1.407377764408e+03+0.000000000000e+00j -6.426818105996e-14+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 1.161560904478e+03+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j 6.832904117004e-14+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 9.221540938118e+02+0.000000000000e+00j 9.221540938118e+02+0.000000000000e+00j -4.132400085402e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253368e+00 1.118741331111e+02+0.000000000000e+00j 1.118741331111e+02+0.000000000000e+00j -2.947829831351e+03+0.000000000000e+00j 1.000000000000e-01 + 9.207710743991e+00 -4.932098463223e+00+0.000000000000e+00j -4.932098463223e+00+0.000000000000e+00j 1.739754380424e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 7.962977575726e+00+0.000000000000e+00j 1.436326007859e+03+0.000000000000e+00j -1.222381804892e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.209454667337e+02+0.000000000000e+00j 9.408488419780e+02+0.000000000000e+00j -2.773373845634e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 -5.737601260710e+01+0.000000000000e+00j -9.265906162318e+02+0.000000000000e+00j 9.858366119468e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 1.368428956542e+01+0.000000000000e+00j 3.405516824124e+02+0.000000000000e+00j -2.228955124171e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 -1.664544017648e+03+0.000000000000e+00j 2.155507627730e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 8.232383416614e+01+0.000000000000e+00j -1.487864010835e+03+0.000000000000e+00j 4.074490724641e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217363486838e+00 -1.218893138245e+03+0.000000000000e+00j 2.699256554091e-13+0.000000000000e+00j -1.218893138245e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616706e+00 -2.067573412718e+03+0.000000000000e+00j 4.578671345525e-13+0.000000000000e+00j -2.067573412718e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630519e+00 4.039473572620e+02+0.000000000000e+00j -8.945472883516e-14+0.000000000000e+00j 4.039473572620e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509313e+00 -2.228955124172e+03+0.000000000000e+00j -3.405516824148e+02+0.000000000000e+00j 1.368428956439e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 -1.737759702190e+03+0.000000000000e+00j -2.155507627740e+03+0.000000000000e+00j -1.664544017633e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 4.074490724521e+02+0.000000000000e+00j 1.487864010841e+03+0.000000000000e+00j 8.232383415556e+01+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.222381804899e+03+0.000000000000e+00j -1.436326007856e+03+0.000000000000e+00j 7.962977582709e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.773373845643e+03+0.000000000000e+00j -9.408488419744e+02+0.000000000000e+00j -2.209454667211e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 9.858366119327e+02+0.000000000000e+00j 9.265906162360e+02+0.000000000000e+00j -5.737601261161e+01+0.000000000000e+00j 1.000000000000e-01 + 5.886471015349e+00 -1.132852811783e+03+0.000000000000e+00j -5.453827687707e+02+0.000000000000e+00j 5.453827687707e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100413e+00 -2.474222927441e+03+0.000000000000e+00j 9.798348926358e+02+0.000000000000e+00j -9.798348926358e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806795e+00 -3.169800657838e+02+0.000000000000e+00j -2.890782382811e+01+0.000000000000e+00j 2.890782382811e+01+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 -8.165966244787e+02+0.000000000000e+00j 3.405764006383e+02+0.000000000000e+00j 1.565824031920e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.224827992550e+03+0.000000000000e+00j 1.674226432375e+03+0.000000000000e+00j -1.466859757964e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 1.160191764851e+02+0.000000000000e+00j -1.176647268019e+03+0.000000000000e+00j 2.837982416353e+02+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 -6.603071665027e-15+0.000000000000e+00j 3.003939055115e+02+0.000000000000e+00j 6.603071664925e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 -4.844139311901e-14+0.000000000000e+00j 2.203746984141e+03+0.000000000000e+00j 4.844139311983e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 4.182442897778e-14+0.000000000000e+00j -1.902721067418e+03+0.000000000000e+00j -4.182442897737e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258313e+00 1.391753177029e+03+0.000000000000e+00j 2.495146680582e-13+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726731e+00 1.140089543169e+03+0.000000000000e+00j 2.043962022977e-13+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070229e+00 -1.212226534583e+03+0.000000000000e+00j -2.173289821645e-13+0.000000000000e+00j 1.212226534583e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 1.436326007859e+03+0.000000000000e+00j 7.962977575719e+00+0.000000000000e+00j -1.222381804892e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 9.408488419780e+02+0.000000000000e+00j -2.209454667337e+02+0.000000000000e+00j -2.773373845634e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717085e+00 -9.265906162318e+02+0.000000000000e+00j -5.737601260710e+01+0.000000000000e+00j 9.858366119468e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 5.511984988142e+02+0.000000000000e+00j 5.511984988142e+02+0.000000000000e+00j -1.170914963937e+03+0.000000000000e+00j 1.000000000000e-01 + 6.365132215538e+00 4.701433168732e+02+0.000000000000e+00j 4.701433168732e+02+0.000000000000e+00j -3.520407372796e+03+0.000000000000e+00j 1.000000000000e-01 + 9.690018385183e+00 -9.131359997229e+02+0.000000000000e+00j -9.131359997229e+02+0.000000000000e+00j 1.570279330276e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 1.347963952060e+02+0.000000000000e+00j 2.473510677021e+01+0.000000000000e+00j -2.107875696037e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 -1.383957859739e+03+0.000000000000e+00j 2.100426273073e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -9.430387165019e+02+0.000000000000e+00j -1.600399579646e+03+0.000000000000e+00j -5.951882676022e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909403e+00 -1.362258017173e+03+0.000000000000e+00j -6.848654363585e+01+0.000000000000e+00j -1.362258017173e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834566e+00 -2.277392898267e+03+0.000000000000e+00j 1.978995825481e+03+0.000000000000e+00j -2.277392898267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902966e+00 -9.309665228030e+02+0.000000000000e+00j -1.522129397386e+03+0.000000000000e+00j -9.309665228030e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 -2.658278854984e+03+0.000000000000e+00j 6.630096222960e-14+0.000000000000e+00j -5.517436734186e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 -2.244897517877e+03+0.000000000000e+00j 5.284329971235e-13+0.000000000000e+00j -2.407984538040e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 -9.608585950688e+02+0.000000000000e+00j 1.545793917739e-13+0.000000000000e+00j -6.727877776834e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 -2.297162805675e+03+0.000000000000e+00j -4.109790152335e+02+0.000000000000e+00j 2.235944633189e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 -2.349960447274e+03+0.000000000000e+00j -3.866751154283e+02+0.000000000000e+00j -1.651408145566e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -8.193662174822e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j -3.249726472726e+02+0.000000000000e+00j 1.000000000000e-01 + 5.686212080845e+00 -1.931571181618e+03+0.000000000000e+00j -1.955720814232e+02+0.000000000000e+00j 1.955720814232e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842358e+00 -2.327628679175e+03+0.000000000000e+00j 8.360286832812e+02+0.000000000000e+00j -8.360286832812e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225689e+00 -2.153754821740e+03+0.000000000000e+00j 1.902976282779e+02+0.000000000000e+00j -1.902976282779e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 -1.738978129230e+03+0.000000000000e+00j 1.389460562305e+02+0.000000000000e+00j -3.517090809638e-14+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 -1.358509986833e+03+0.000000000000e+00j 1.627322748360e+03+0.000000000000e+00j 5.908874633701e-15+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -1.129334593096e+03+0.000000000000e+00j -4.535788174314e+02+0.000000000000e+00j -3.479461632554e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 -8.165966244843e+02+0.000000000000e+00j 3.405764006424e+02+0.000000000000e+00j -1.565824031931e+03+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.224827992545e+03+0.000000000000e+00j 1.674226432366e+03+0.000000000000e+00j 1.466859757945e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 1.160191764878e+02+0.000000000000e+00j -1.176647268018e+03+0.000000000000e+00j -2.837982416423e+02+0.000000000000e+00j 1.000000000000e-01 + 6.079617217142e+00 4.208206821108e-14+0.000000000000e+00j 1.994915061874e+02+0.000000000000e+00j -2.114543049926e+03+0.000000000000e+00j 1.000000000000e-01 + 8.569509964613e+00 -6.425857051679e-14+0.000000000000e+00j 1.407377764408e+03+0.000000000000e+00j 1.516378160767e+03+0.000000000000e+00j 1.000000000000e-01 + 8.669948656652e+00 6.832167937031e-14+0.000000000000e+00j -1.946935955182e+03+0.000000000000e+00j -1.161560904478e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 3.405516824124e+02+0.000000000000e+00j 1.368428956543e+01+0.000000000000e+00j -2.228955124171e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473519e+00 2.155507627730e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208912e+00 -1.487864010835e+03+0.000000000000e+00j 8.232383416614e+01+0.000000000000e+00j 4.074490724641e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457920e+00 2.473510677022e+01+0.000000000000e+00j 1.347963952060e+02+0.000000000000e+00j -2.107875696037e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531753e+00 2.100426273073e+03+0.000000000000e+00j -1.383957859739e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -1.600399579646e+03+0.000000000000e+00j -9.430387165019e+02+0.000000000000e+00j -5.951882676022e+02+0.000000000000e+00j 1.000000000000e-01 + 4.588935700620e+00 -1.089702534039e+02+0.000000000000e+00j -1.089702534039e+02+0.000000000000e+00j -1.693883617047e+03+0.000000000000e+00j 1.000000000000e-01 + 4.696452605928e+00 3.331454318132e+01+0.000000000000e+00j 3.331454318132e+01+0.000000000000e+00j -2.983841276852e+03+0.000000000000e+00j 1.000000000000e-01 + 9.352183072674e+00 -1.792515640352e+03+0.000000000000e+00j -1.792515640352e+03+0.000000000000e+00j -1.492388034624e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953789e+00 -1.287469747217e+03+0.000000000000e+00j -6.948254471858e+02+0.000000000000e+00j -1.287469747217e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351294e+00 -2.218454428373e+03+0.000000000000e+00j 1.725508655129e+03+0.000000000000e+00j -2.218454428373e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594732e+00 -2.011916748796e+03+0.000000000000e+00j -2.139081422565e+03+0.000000000000e+00j -2.011916748796e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 -2.855339344593e+03+0.000000000000e+00j -4.048846605956e+02+0.000000000000e+00j 1.167708252118e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 -2.754226153073e+03+0.000000000000e+00j 1.271754473739e+03+0.000000000000e+00j -2.133281238363e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 -2.292540364973e+03+0.000000000000e+00j -1.439197506327e+03+0.000000000000e+00j -1.815457579586e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 -2.901107133229e+03+0.000000000000e+00j -1.889232278849e-14+0.000000000000e+00j 3.958756311590e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -2.455785279109e+03+0.000000000000e+00j 4.048038048095e-13+0.000000000000e+00j -1.768140685530e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 -2.557589353128e+03+0.000000000000e+00j 2.336089112722e-13+0.000000000000e+00j -9.018856377877e+02+0.000000000000e+00j 1.000000000000e-01 + 5.162878828392e+00 -2.574596465600e+03+0.000000000000e+00j 5.352259962490e-14+0.000000000000e+00j -5.659317535603e-14+0.000000000000e+00j 1.000000000000e-01 + 5.162878828401e+00 -2.574596465595e+03+0.000000000000e+00j 5.352259962479e-14+0.000000000000e+00j -5.659317535582e-14+0.000000000000e+00j 1.000000000000e-01 + 8.281247231959e+00 -3.461886087898e+03+0.000000000000e+00j 7.196822706245e-14+0.000000000000e+00j -7.609702299110e-14+0.000000000000e+00j 1.000000000000e-01 + 5.686212080838e+00 -1.931571181623e+03+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j -1.955720814199e+02+0.000000000000e+00j 1.000000000000e-01 + 5.974862842365e+00 -2.327628679167e+03+0.000000000000e+00j 8.360286832711e+02+0.000000000000e+00j 8.360286832711e+02+0.000000000000e+00j 1.000000000000e-01 + 9.067284225688e+00 -2.153754821741e+03+0.000000000000e+00j 1.902976282757e+02+0.000000000000e+00j 1.902976282757e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015344e+00 -1.132852811782e+03+0.000000000000e+00j -5.453827687685e+02+0.000000000000e+00j -5.453827687685e+02+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 -2.474222927432e+03+0.000000000000e+00j 9.798348926173e+02+0.000000000000e+00j 9.798348926173e+02+0.000000000000e+00j 1.000000000000e-01 + 9.426230806792e+00 -3.169800657809e+02+0.000000000000e+00j -2.890782382813e+01+0.000000000000e+00j -2.890782382813e+01+0.000000000000e+00j 1.000000000000e-01 + 5.709250455328e+00 -4.132400085402e+02+0.000000000000e+00j -9.221540938127e+02+0.000000000000e+00j -9.221540938127e+02+0.000000000000e+00j 1.000000000000e-01 + 8.001028253359e+00 -2.947829831349e+03+0.000000000000e+00j -1.118741331224e+02+0.000000000000e+00j -1.118741331224e+02+0.000000000000e+00j 1.000000000000e-01 + 9.207710744000e+00 1.739754380418e+03+0.000000000000e+00j 4.932098469478e+00+0.000000000000e+00j 4.932098469478e+00+0.000000000000e+00j 1.000000000000e-01 + 5.217363486838e+00 5.358203645235e-14+0.000000000000e+00j -1.218893138245e+03+0.000000000000e+00j -1.218893138245e+03+0.000000000000e+00j 1.000000000000e-01 + 7.854999616706e+00 9.088966907112e-14+0.000000000000e+00j -2.067573412718e+03+0.000000000000e+00j -2.067573412718e+03+0.000000000000e+00j 1.000000000000e-01 + 9.063866630519e+00 -1.775735816788e-14+0.000000000000e+00j 4.039473572620e+02+0.000000000000e+00j 4.039473572620e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909403e+00 -6.848654363584e+01+0.000000000000e+00j -1.362258017173e+03+0.000000000000e+00j -1.362258017173e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834566e+00 1.978995825481e+03+0.000000000000e+00j -2.277392898267e+03+0.000000000000e+00j -2.277392898267e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902966e+00 -1.522129397386e+03+0.000000000000e+00j -9.309665228030e+02+0.000000000000e+00j -9.309665228030e+02+0.000000000000e+00j 1.000000000000e-01 + 3.985925953789e+00 -6.948254471858e+02+0.000000000000e+00j -1.287469747217e+03+0.000000000000e+00j -1.287469747217e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351294e+00 1.725508655129e+03+0.000000000000e+00j -2.218454428373e+03+0.000000000000e+00j -2.218454428373e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594732e+00 -2.139081422565e+03+0.000000000000e+00j -2.011916748796e+03+0.000000000000e+00j -2.011916748796e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175701e+00 -1.195877589777e+03+0.000000000000e+00j -1.195877589777e+03+0.000000000000e+00j -1.195877589777e+03+0.000000000000e+00j 1.000000000000e-01 + 3.718116175701e+00 -1.195877589777e+03+0.000000000000e+00j -1.195877589777e+03+0.000000000000e+00j -1.195877589777e+03+0.000000000000e+00j 1.000000000000e-01 + 8.295231501187e+00 -2.632351875665e+03+0.000000000000e+00j -2.632351875665e+03+0.000000000000e+00j -2.632351875665e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311366e+00 -3.270970228798e+03+0.000000000000e+00j -3.541150241892e+02+0.000000000000e+00j -3.541150241892e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -2.570858259189e+03+0.000000000000e+00j -4.336803003555e+02+0.000000000000e+00j -4.336803003555e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593164e+00 -3.141814155950e+03+0.000000000000e+00j -2.466222371692e+03+0.000000000000e+00j -2.466222371692e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257151e+00 -2.849906817857e+03+0.000000000000e+00j -6.887815764670e+01+0.000000000000e+00j -6.887815764670e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924455e+00 -3.298255165069e+03+0.000000000000e+00j -2.907876484991e+02+0.000000000000e+00j -2.907876484991e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452509e+00 -3.703285199880e+03+0.000000000000e+00j -1.173822321991e+03+0.000000000000e+00j -1.173822321991e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 -2.849906817858e+03+0.000000000000e+00j -6.887815763756e+01+0.000000000000e+00j 6.887815763756e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 -3.298255165072e+03+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 -3.703285199892e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 -2.901107133228e+03+0.000000000000e+00j 1.395130085044e-13+0.000000000000e+00j -3.958756311563e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -2.455785279116e+03+0.000000000000e+00j -3.026984737295e-13+0.000000000000e+00j 1.768140685534e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 -2.557589353136e+03+0.000000000000e+00j -1.272708246782e-13+0.000000000000e+00j 9.018856377917e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 -2.297162805671e+03+0.000000000000e+00j -4.109790152451e+02+0.000000000000e+00j -2.235944633121e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -2.349960447270e+03+0.000000000000e+00j -3.866751154420e+02+0.000000000000e+00j 1.651408145570e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -8.193662174821e+02+0.000000000000e+00j 7.231958063048e+02+0.000000000000e+00j 3.249726472808e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.222381804895e+03+0.000000000000e+00j -1.436326007860e+03+0.000000000000e+00j -7.962977578284e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 -2.773373845625e+03+0.000000000000e+00j -9.408488419984e+02+0.000000000000e+00j 2.209454667356e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 9.858366119372e+02+0.000000000000e+00j 9.265906162296e+02+0.000000000000e+00j 5.737601261432e+01+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -3.405516824148e+02+0.000000000000e+00j -2.228955124172e+03+0.000000000000e+00j 1.368428956439e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 -2.155507627740e+03+0.000000000000e+00j -1.737759702190e+03+0.000000000000e+00j -1.664544017633e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 1.487864010841e+03+0.000000000000e+00j 4.074490724521e+02+0.000000000000e+00j 8.232383415556e+01+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 5.964508837937e-14+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j -5.517436734186e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 1.022614928906e-13+0.000000000000e+00j -2.244897517877e+03+0.000000000000e+00j -2.407984538040e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 3.590553267715e-14+0.000000000000e+00j -9.608585950688e+02+0.000000000000e+00j -6.727877776834e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 -4.048846605956e+02+0.000000000000e+00j -2.855339344593e+03+0.000000000000e+00j 1.167708252118e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 1.271754473739e+03+0.000000000000e+00j -2.754226153073e+03+0.000000000000e+00j -2.133281238363e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 -1.439197506327e+03+0.000000000000e+00j -2.292540364973e+03+0.000000000000e+00j -1.815457579586e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311366e+00 -3.541150241892e+02+0.000000000000e+00j -3.270970228798e+03+0.000000000000e+00j -3.541150241892e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -4.336803003555e+02+0.000000000000e+00j -2.570858259189e+03+0.000000000000e+00j -4.336803003555e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593164e+00 -2.466222371692e+03+0.000000000000e+00j -3.141814155950e+03+0.000000000000e+00j -2.466222371692e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422199e+00 -1.677827869084e+03+0.000000000000e+00j -1.677827869084e+03+0.000000000000e+00j -8.010663469957e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719795e+00 -2.675742073394e+03+0.000000000000e+00j -2.675742073394e+03+0.000000000000e+00j 1.061468362371e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523485e+00 -3.295829288942e+03+0.000000000000e+00j -3.295829288942e+03+0.000000000000e+00j -1.982424451106e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 -3.326019148224e+03+0.000000000000e+00j 2.477472180376e+02+0.000000000000e+00j -6.766465559394e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 -3.069970706092e+03+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j -1.129898041029e-13+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 -3.909325828783e+03+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j -1.411318178507e-13+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 -3.270970228804e+03+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -2.570858259195e+03+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 -3.141814155967e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 -2.855339344604e+03+0.000000000000e+00j -4.048846605874e+02+0.000000000000e+00j -1.167708252163e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.754226153081e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j 2.133281238368e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -2.292540364991e+03+0.000000000000e+00j -1.439197506317e+03+0.000000000000e+00j 1.815457579596e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 -2.658278854984e+03+0.000000000000e+00j 4.422353879147e-14+0.000000000000e+00j 5.517436734322e+01+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 -2.244897517883e+03+0.000000000000e+00j -4.350958449511e-13+0.000000000000e+00j 2.407984538050e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 -9.608585950775e+02+0.000000000000e+00j -1.146293253740e-13+0.000000000000e+00j 6.727877776973e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 -2.228955124167e+03+0.000000000000e+00j -3.405516824254e+02+0.000000000000e+00j -1.368428955981e+01+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 -1.737759702183e+03+0.000000000000e+00j -2.155507627743e+03+0.000000000000e+00j 1.664544017651e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 4.074490724557e+02+0.000000000000e+00j 1.487864010830e+03+0.000000000000e+00j -8.232383415304e+01+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.436326007856e+03+0.000000000000e+00j -1.222381804899e+03+0.000000000000e+00j 7.962977582707e+00+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -9.408488419744e+02+0.000000000000e+00j -2.773373845643e+03+0.000000000000e+00j -2.209454667211e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 9.265906162360e+02+0.000000000000e+00j 9.858366119327e+02+0.000000000000e+00j -5.737601261161e+01+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 -4.109790152335e+02+0.000000000000e+00j -2.297162805675e+03+0.000000000000e+00j 2.235944633189e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 -3.866751154283e+02+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j -1.651408145566e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 7.231958063081e+02+0.000000000000e+00j -8.193662174822e+02+0.000000000000e+00j -3.249726472726e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 5.507094693915e-14+0.000000000000e+00j -2.901107133229e+03+0.000000000000e+00j 3.958756311590e+02+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 9.283650258301e-14+0.000000000000e+00j -2.455785279109e+03+0.000000000000e+00j -1.768140685530e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 7.603830776159e-14+0.000000000000e+00j -2.557589353128e+03+0.000000000000e+00j -9.018856377877e+02+0.000000000000e+00j 1.000000000000e-01 + 4.486945257151e+00 -6.887815764670e+01+0.000000000000e+00j -2.849906817857e+03+0.000000000000e+00j -6.887815764670e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924455e+00 -2.907876484991e+02+0.000000000000e+00j -3.298255165069e+03+0.000000000000e+00j -2.907876484991e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452509e+00 -1.173822321991e+03+0.000000000000e+00j -3.703285199880e+03+0.000000000000e+00j -1.173822321991e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 2.477472180376e+02+0.000000000000e+00j -3.326019148224e+03+0.000000000000e+00j -6.766465559394e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 -2.070280719288e+03+0.000000000000e+00j -3.069970706092e+03+0.000000000000e+00j -1.129898041029e-13+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 -2.511191789093e+03+0.000000000000e+00j -3.909325828783e+03+0.000000000000e+00j -1.411318178507e-13+0.000000000000e+00j 1.000000000000e-01 + 3.051886422196e+00 -1.677827869086e+03+0.000000000000e+00j -1.677827869086e+03+0.000000000000e+00j 8.010663469824e+02+0.000000000000e+00j 1.000000000000e-01 + 3.960715719796e+00 -2.675742073388e+03+0.000000000000e+00j -2.675742073388e+03+0.000000000000e+00j -1.061468362377e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523474e+00 -3.295829288950e+03+0.000000000000e+00j -3.295829288950e+03+0.000000000000e+00j 1.982424451074e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340515e+00 -1.595448846499e+03+0.000000000000e+00j -1.595448846499e+03+0.000000000000e+00j 1.595448846499e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 -1.595448846495e+03+0.000000000000e+00j -1.595448846495e+03+0.000000000000e+00j 1.595448846495e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234885e+00 -3.544786741862e+03+0.000000000000e+00j -3.544786741862e+03+0.000000000000e+00j 3.544786741862e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 -1.677827869087e+03+0.000000000000e+00j -8.010663469828e+02+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 -2.675742073398e+03+0.000000000000e+00j 1.061468362370e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 -3.295829288952e+03+0.000000000000e+00j -1.982424451087e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118281e+00 -1.629999833653e+03+0.000000000000e+00j -2.931945659913e-13+0.000000000000e+00j 1.629999833653e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580362e+00 -2.668739100354e+03+0.000000000000e+00j -4.800367375001e-13+0.000000000000e+00j 2.668739100354e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741046e+00 -2.239677814266e+03+0.000000000000e+00j -4.028597740666e-13+0.000000000000e+00j 2.239677814266e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 -1.362258017177e+03+0.000000000000e+00j 6.848654362207e+01+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 -2.277392898273e+03+0.000000000000e+00j -1.978995825490e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 -9.309665228201e+02+0.000000000000e+00j 1.522129397376e+03+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 -9.813960230292e+02+0.000000000000e+00j -3.903028684481e+02+0.000000000000e+00j 9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 -1.439610072415e+03+0.000000000000e+00j -3.181897710267e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 1.539717814991e+02+0.000000000000e+00j 1.483189426179e+03+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 -5.511984988225e+02+0.000000000000e+00j -1.170914963950e+03+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 -4.701433168759e+02+0.000000000000e+00j -3.520407372805e+03+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 9.131359997239e+02+0.000000000000e+00j 1.570279330060e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 -1.611704542809e+02+0.000000000000e+00j -2.058840261207e+03+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 2.103459518153e+02+0.000000000000e+00j -3.440855856631e+03+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 1.305283557963e+03+0.000000000000e+00j -1.749125406728e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 6.887815763756e+01+0.000000000000e+00j -2.849906817858e+03+0.000000000000e+00j -6.887815763756e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 2.907876485096e+02+0.000000000000e+00j -3.298255165072e+03+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 1.173822321981e+03+0.000000000000e+00j -3.703285199892e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995347e+00 7.381782677561e-14+0.000000000000e+00j -3.358198488056e+03+0.000000000000e+00j -7.381782677551e-14+0.000000000000e+00j 1.000000000000e-01 + 3.678827995357e+00 7.381782677561e-14+0.000000000000e+00j -3.358198488058e+03+0.000000000000e+00j -7.381782677571e-14+0.000000000000e+00j 1.000000000000e-01 + 6.148719801041e+00 1.125284788007e-13+0.000000000000e+00j -5.119264327847e+03+0.000000000000e+00j -1.125284788001e-13+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 -1.906161083910e+02+0.000000000000e+00j -3.621818540516e+03+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 -4.960658211669e+02+0.000000000000e+00j -3.298148639035e+03+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 -2.410990334891e+03+0.000000000000e+00j -4.812325680570e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 -8.010663469828e+02+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 1.061468362370e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 -1.982424451087e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311364e+00 -3.541150241790e+02+0.000000000000e+00j -3.541150241790e+02+0.000000000000e+00j 3.270970228804e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453628e+00 -4.336803003525e+02+0.000000000000e+00j -4.336803003525e+02+0.000000000000e+00j 2.570858259196e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593150e+00 -2.466222371691e+03+0.000000000000e+00j -2.466222371691e+03+0.000000000000e+00j 3.141814155966e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 1.167708252122e+02+0.000000000000e+00j -4.048846605795e+02+0.000000000000e+00j 2.855339344597e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.133281238364e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j 2.754226153082e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.815457579598e+03+0.000000000000e+00j -1.439197506316e+03+0.000000000000e+00j 2.292540364990e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 -5.517436734321e+01+0.000000000000e+00j -5.306936911409e-13+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 -2.407984538050e+03+0.000000000000e+00j -3.990767230459e-13+0.000000000000e+00j 2.244897517883e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 -6.727877776973e+02+0.000000000000e+00j -1.782521561667e-13+0.000000000000e+00j 9.608585950775e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 1.368428956506e+01+0.000000000000e+00j -3.405516824120e+02+0.000000000000e+00j 2.228955124173e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 -1.664544017648e+03+0.000000000000e+00j -2.155507627736e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 8.232383415397e+01+0.000000000000e+00j 1.487864010833e+03+0.000000000000e+00j -4.074490724537e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 -7.962977576045e+00+0.000000000000e+00j -1.222381804894e+03+0.000000000000e+00j 1.436326007861e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 2.209454667325e+02+0.000000000000e+00j -2.773373845637e+03+0.000000000000e+00j 9.408488419795e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 5.737601261443e+01+0.000000000000e+00j 9.858366119346e+02+0.000000000000e+00j -9.265906162319e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 -2.235944633154e+02+0.000000000000e+00j -2.297162805673e+03+0.000000000000e+00j 4.109790152323e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 1.651408145580e+03+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j 3.866751154334e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 3.249726472798e+02+0.000000000000e+00j -8.193662174838e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 -3.958756311563e+02+0.000000000000e+00j -2.901107133228e+03+0.000000000000e+00j -7.247222087635e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 1.768140685534e+03+0.000000000000e+00j -2.455785279116e+03+0.000000000000e+00j -1.511537500763e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 9.018856377917e+02+0.000000000000e+00j -2.557589353136e+03+0.000000000000e+00j -3.639464745298e-14+0.000000000000e+00j 1.000000000000e-01 + 4.486945257150e+00 6.887815764371e+01+0.000000000000e+00j -2.849906817861e+03+0.000000000000e+00j 6.887815764371e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924458e+00 2.907876484989e+02+0.000000000000e+00j -3.298255165074e+03+0.000000000000e+00j 2.907876484989e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452502e+00 1.173822321981e+03+0.000000000000e+00j -3.703285199893e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 7.855473538139e-14+0.000000000000e+00j -3.326019148229e+03+0.000000000000e+00j -2.477472180394e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 2.198768350179e-14+0.000000000000e+00j -3.069970706102e+03+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 3.074882683382e-14+0.000000000000e+00j -3.909325828790e+03+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118281e+00 5.165330952277e-18+0.000000000000e+00j -1.629999833653e+03+0.000000000000e+00j 1.629999833653e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580362e+00 8.457007414379e-18+0.000000000000e+00j -2.668739100354e+03+0.000000000000e+00j 2.668739100354e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741046e+00 7.097348661245e-18+0.000000000000e+00j -2.239677814266e+03+0.000000000000e+00j 2.239677814266e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 -4.048846605795e+02+0.000000000000e+00j 1.167708252121e+02+0.000000000000e+00j 2.855339344597e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 1.271754473743e+03+0.000000000000e+00j -2.133281238364e+03+0.000000000000e+00j 2.754226153082e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.439197506316e+03+0.000000000000e+00j -1.815457579598e+03+0.000000000000e+00j 2.292540364990e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614181e+00 1.611704542722e+02+0.000000000000e+00j 1.611704542722e+02+0.000000000000e+00j 2.058840261207e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627748e+00 -2.103459517990e+02+0.000000000000e+00j -2.103459517990e+02+0.000000000000e+00j 3.440855856625e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550816e+00 -1.305283557965e+03+0.000000000000e+00j -1.305283557965e+03+0.000000000000e+00j 1.749125406727e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 2.235944633121e+02+0.000000000000e+00j 4.109790152451e+02+0.000000000000e+00j 2.297162805671e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -1.651408145570e+03+0.000000000000e+00j 3.866751154420e+02+0.000000000000e+00j 2.349960447270e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -3.249726472808e+02+0.000000000000e+00j -7.231958063048e+02+0.000000000000e+00j 8.193662174821e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 1.937303341826e+02+0.000000000000e+00j -4.714283101705e-13+0.000000000000e+00j 2.336191913897e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 -2.256075560905e+03+0.000000000000e+00j -2.047196166226e-13+0.000000000000e+00j 1.257665397683e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 8.541533926711e+02+0.000000000000e+00j 3.705807585546e-14+0.000000000000e+00j -2.739789173931e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258316e+00 8.299326877272e-16+0.000000000000e+00j -1.391753177018e+03+0.000000000000e+00j 1.391753177018e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726734e+00 6.798601896036e-16+0.000000000000e+00j -1.140089543166e+03+0.000000000000e+00j 1.140089543166e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070240e+00 -7.228770464483e-16+0.000000000000e+00j 1.212226534592e+03+0.000000000000e+00j -1.212226534592e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 -1.937303341826e+02+0.000000000000e+00j -2.336191913897e+03+0.000000000000e+00j -5.561117454149e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 2.256075560905e+03+0.000000000000e+00j -1.257665397683e+03+0.000000000000e+00j 2.194643013012e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 -8.541533926711e+02+0.000000000000e+00j 2.739789173931e+02+0.000000000000e+00j -1.275303382656e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 -2.235944633121e+02+0.000000000000e+00j -2.297162805671e+03+0.000000000000e+00j -4.109790152452e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 1.651408145570e+03+0.000000000000e+00j -2.349960447270e+03+0.000000000000e+00j -3.866751154420e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 3.249726472808e+02+0.000000000000e+00j -8.193662174821e+02+0.000000000000e+00j 7.231958063048e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614181e+00 -1.611704542722e+02+0.000000000000e+00j -2.058840261207e+03+0.000000000000e+00j -1.611704542722e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627748e+00 2.103459517990e+02+0.000000000000e+00j -3.440855856625e+03+0.000000000000e+00j 2.103459517990e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550816e+00 1.305283557965e+03+0.000000000000e+00j -1.749125406727e+03+0.000000000000e+00j 1.305283557965e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 4.048846605795e+02+0.000000000000e+00j -2.855339344597e+03+0.000000000000e+00j -1.167708252121e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -1.271754473743e+03+0.000000000000e+00j -2.754226153082e+03+0.000000000000e+00j 2.133281238364e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.439197506316e+03+0.000000000000e+00j -2.292540364990e+03+0.000000000000e+00j 1.815457579598e+03+0.000000000000e+00j 1.000000000000e-01 + 4.568615909405e+00 6.848654362207e+01+0.000000000000e+00j -1.362258017177e+03+0.000000000000e+00j 1.362258017177e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834567e+00 -1.978995825490e+03+0.000000000000e+00j -2.277392898273e+03+0.000000000000e+00j 2.277392898273e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902968e+00 1.522129397376e+03+0.000000000000e+00j -9.309665228201e+02+0.000000000000e+00j 9.309665228201e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 -5.720297321478e-14+0.000000000000e+00j -5.517436734322e+01+0.000000000000e+00j 2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 3.599105041853e-15+0.000000000000e+00j -2.407984538050e+03+0.000000000000e+00j 2.244897517883e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 -6.326103461314e-15+0.000000000000e+00j -6.727877776973e+02+0.000000000000e+00j 9.608585950775e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 4.109790152451e+02+0.000000000000e+00j 2.235944633121e+02+0.000000000000e+00j 2.297162805671e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 3.866751154420e+02+0.000000000000e+00j -1.651408145570e+03+0.000000000000e+00j 2.349960447270e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -7.231958063048e+02+0.000000000000e+00j -3.249726472808e+02+0.000000000000e+00j 8.193662174821e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015344e+00 5.453827687685e+02+0.000000000000e+00j 5.453827687685e+02+0.000000000000e+00j 1.132852811782e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 -9.798348926173e+02+0.000000000000e+00j -9.798348926173e+02+0.000000000000e+00j 2.474222927432e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806792e+00 2.890782382813e+01+0.000000000000e+00j 2.890782382813e+01+0.000000000000e+00j 3.169800657809e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 -3.405764006424e+02+0.000000000000e+00j 1.565824031931e+03+0.000000000000e+00j 8.165966244843e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.674226432366e+03+0.000000000000e+00j -1.466859757945e+03+0.000000000000e+00j 1.224827992545e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 1.176647268018e+03+0.000000000000e+00j 2.837982416423e+02+0.000000000000e+00j -1.160191764878e+02+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 -3.003939055115e+02+0.000000000000e+00j 6.244808826969e-15+0.000000000000e+00j -6.603071665027e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 -2.203746984141e+03+0.000000000000e+00j 4.581310861053e-14+0.000000000000e+00j -4.844139311942e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 1.902721067418e+03+0.000000000000e+00j -3.955516107106e-14+0.000000000000e+00j 4.182442897778e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 6.035536967110e-14+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 4.944161577763e-14+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 -5.256993971911e-14+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -7.962977578282e+00+0.000000000000e+00j -1.222381804895e+03+0.000000000000e+00j -1.436326007860e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 2.209454667356e+02+0.000000000000e+00j -2.773373845625e+03+0.000000000000e+00j -9.408488419985e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 5.737601261432e+01+0.000000000000e+00j 9.858366119372e+02+0.000000000000e+00j 9.265906162296e+02+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 -5.511984988163e+02+0.000000000000e+00j -1.170914963942e+03+0.000000000000e+00j -5.511984988163e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215531e+00 -4.701433168860e+02+0.000000000000e+00j -3.520407372794e+03+0.000000000000e+00j -4.701433168860e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385185e+00 9.131359997239e+02+0.000000000000e+00j 1.570279330093e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.473510678253e+01+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j -1.347963952064e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 -2.100426273090e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j 1.383957859744e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 1.600399579637e+03+0.000000000000e+00j -5.951882676209e+02+0.000000000000e+00j 9.430387165139e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368610e+00 -3.903028684481e+02+0.000000000000e+00j -9.813960230292e+02+0.000000000000e+00j 9.813960230292e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870180e+00 -3.181897710267e+03+0.000000000000e+00j -1.439610072415e+03+0.000000000000e+00j 1.439610072415e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609834e+00 1.483189426179e+03+0.000000000000e+00j 1.539717814991e+02+0.000000000000e+00j -1.539717814991e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 -3.405516824120e+02+0.000000000000e+00j 1.368428956505e+01+0.000000000000e+00j 2.228955124173e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 -2.155507627736e+03+0.000000000000e+00j -1.664544017648e+03+0.000000000000e+00j 1.737759702187e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 1.487864010833e+03+0.000000000000e+00j 8.232383415397e+01+0.000000000000e+00j -4.074490724537e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 -5.559636815412e-14+0.000000000000e+00j 1.937303341826e+02+0.000000000000e+00j 2.336191913897e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 2.195440099959e-14+0.000000000000e+00j -2.256075560905e+03+0.000000000000e+00j 1.257665397683e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 -1.275477025879e-14+0.000000000000e+00j 8.541533926711e+02+0.000000000000e+00j -2.739789173931e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079852e+00 1.565824031931e+03+0.000000000000e+00j -3.405764006424e+02+0.000000000000e+00j 8.165966244843e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.466859757945e+03+0.000000000000e+00j -1.674226432366e+03+0.000000000000e+00j 1.224827992545e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159588e+00 2.837982416423e+02+0.000000000000e+00j 1.176647268018e+03+0.000000000000e+00j -1.160191764878e+02+0.000000000000e+00j 1.000000000000e-01 + 6.171043712417e+00 6.817503300509e+02+0.000000000000e+00j 6.817503300509e+02+0.000000000000e+00j 2.997162195563e-14+0.000000000000e+00j 1.000000000000e-01 + 7.739218566858e+00 -1.880020318391e+03+0.000000000000e+00j -1.880020318391e+03+0.000000000000e+00j -8.265087051369e-14+0.000000000000e+00j 1.000000000000e-01 + 9.436766280851e+00 1.091389803073e+03+0.000000000000e+00j 1.091389803073e+03+0.000000000000e+00j 4.798050128053e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 -3.405764006429e+02+0.000000000000e+00j 1.565824031930e+03+0.000000000000e+00j -8.165966244859e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.674226432371e+03+0.000000000000e+00j -1.466859757958e+03+0.000000000000e+00j -1.224827992548e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 1.176647268028e+03+0.000000000000e+00j 2.837982416495e+02+0.000000000000e+00j 1.160191764816e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 1.937303341824e+02+0.000000000000e+00j 4.633734936205e-13+0.000000000000e+00j -2.336191913904e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 -2.256075560900e+03+0.000000000000e+00j 2.985215235111e-13+0.000000000000e+00j -1.257665397688e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 8.541533926821e+02+0.000000000000e+00j -7.257161023991e-14+0.000000000000e+00j 2.739789173907e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509313e+00 1.368428956439e+01+0.000000000000e+00j -3.405516824148e+02+0.000000000000e+00j -2.228955124172e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 -1.664544017633e+03+0.000000000000e+00j -2.155507627740e+03+0.000000000000e+00j -1.737759702190e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 8.232383415556e+01+0.000000000000e+00j 1.487864010841e+03+0.000000000000e+00j 4.074490724521e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368607e+00 -9.813960230264e+02+0.000000000000e+00j -3.903028684352e+02+0.000000000000e+00j -9.813960230264e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870169e+00 -1.439610072411e+03+0.000000000000e+00j -3.181897710263e+03+0.000000000000e+00j -1.439610072411e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609831e+00 1.539717814987e+02+0.000000000000e+00j 1.483189426185e+03+0.000000000000e+00j 1.539717814987e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 -1.029630366773e+03+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j -4.526538638363e-14+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 -2.417747879248e+03+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j -1.062908549185e-13+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 8.075401156421e+02+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 3.550168733787e-14+0.000000000000e+00j 1.000000000000e-01 + 5.311606608475e+00 -1.170914963950e+03+0.000000000000e+00j -5.511984988225e+02+0.000000000000e+00j 5.511984988225e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215539e+00 -3.520407372805e+03+0.000000000000e+00j -4.701433168759e+02+0.000000000000e+00j 4.701433168759e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385186e+00 1.570279330060e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j -9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 -1.222381804894e+03+0.000000000000e+00j -7.962977576046e+00+0.000000000000e+00j 1.436326007861e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 -2.773373845637e+03+0.000000000000e+00j 2.209454667325e+02+0.000000000000e+00j 9.408488419796e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 9.858366119346e+02+0.000000000000e+00j 5.737601261443e+01+0.000000000000e+00j -9.265906162319e+02+0.000000000000e+00j 1.000000000000e-01 + 6.499026258316e+00 -1.391753177018e+03+0.000000000000e+00j -2.495146680563e-13+0.000000000000e+00j 1.391753177018e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726734e+00 -1.140089543166e+03+0.000000000000e+00j -2.043962022971e-13+0.000000000000e+00j 1.140089543166e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070240e+00 1.212226534592e+03+0.000000000000e+00j 2.173289821661e-13+0.000000000000e+00j -1.212226534592e+03+0.000000000000e+00j 1.000000000000e-01 + 6.890402489845e+00 6.603071664823e-15+0.000000000000e+00j -3.003939055115e+02+0.000000000000e+00j -6.603071664823e-15+0.000000000000e+00j 1.000000000000e-01 + 7.916625655708e+00 4.844139311901e-14+0.000000000000e+00j -2.203746984141e+03+0.000000000000e+00j -4.844139311901e-14+0.000000000000e+00j 1.000000000000e-01 + 8.962350133777e+00 -4.182442897778e-14+0.000000000000e+00j 1.902721067418e+03+0.000000000000e+00j 4.182442897819e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079851e+00 1.565824031930e+03+0.000000000000e+00j -3.405764006429e+02+0.000000000000e+00j -8.165966244859e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569860e+00 -1.466859757958e+03+0.000000000000e+00j -1.674226432371e+03+0.000000000000e+00j -1.224827992548e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159585e+00 2.837982416495e+02+0.000000000000e+00j 1.176647268028e+03+0.000000000000e+00j 1.160191764816e+02+0.000000000000e+00j 1.000000000000e-01 + 5.886471015343e+00 5.453827687681e+02+0.000000000000e+00j 5.453827687681e+02+0.000000000000e+00j -1.132852811781e+03+0.000000000000e+00j 1.000000000000e-01 + 7.052421100410e+00 -9.798348926316e+02+0.000000000000e+00j -9.798348926316e+02+0.000000000000e+00j -2.474222927435e+03+0.000000000000e+00j 1.000000000000e-01 + 9.426230806791e+00 2.890782383714e+01+0.000000000000e+00j 2.890782383714e+01+0.000000000000e+00j -3.169800657750e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 2.235944633120e+02+0.000000000000e+00j 4.109790152351e+02+0.000000000000e+00j -2.297162805672e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 -1.651408145573e+03+0.000000000000e+00j 3.866751154302e+02+0.000000000000e+00j -2.349960447269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 -3.249726472674e+02+0.000000000000e+00j -7.231958063040e+02+0.000000000000e+00j -8.193662174715e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 -5.517436734186e+01+0.000000000000e+00j 5.329877015703e-13+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 -2.407984538040e+03+0.000000000000e+00j 4.991946203969e-13+0.000000000000e+00j -2.244897517877e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 -6.727877776834e+02+0.000000000000e+00j 2.062249677019e-13+0.000000000000e+00j -9.608585950688e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909401e+00 -1.362258017175e+03+0.000000000000e+00j 6.848654362996e+01+0.000000000000e+00j -1.362258017175e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834561e+00 -2.277392898260e+03+0.000000000000e+00j -1.978995825498e+03+0.000000000000e+00j -2.277392898260e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902965e+00 -9.309665228146e+02+0.000000000000e+00j 1.522129397379e+03+0.000000000000e+00j -9.309665228146e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.107875696041e+03+0.000000000000e+00j -2.473510677568e+01+0.000000000000e+00j 1.347963952067e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531748e+00 -2.537027100001e+03+0.000000000000e+00j -2.100426273078e+03+0.000000000000e+00j -1.383957859722e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 -5.951882676219e+02+0.000000000000e+00j 1.600399579641e+03+0.000000000000e+00j -9.430387165091e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614186e+00 -2.058840261207e+03+0.000000000000e+00j -1.611704542809e+02+0.000000000000e+00j 1.611704542809e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627746e+00 -3.440855856631e+03+0.000000000000e+00j 2.103459518153e+02+0.000000000000e+00j -2.103459518153e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550817e+00 -1.749125406728e+03+0.000000000000e+00j 1.305283557963e+03+0.000000000000e+00j -1.305283557963e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 -2.297162805673e+03+0.000000000000e+00j -2.235944633154e+02+0.000000000000e+00j 4.109790152323e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -2.349960447274e+03+0.000000000000e+00j 1.651408145580e+03+0.000000000000e+00j 3.866751154334e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 -8.193662174838e+02+0.000000000000e+00j 3.249726472798e+02+0.000000000000e+00j -7.231958063081e+02+0.000000000000e+00j 1.000000000000e-01 + 6.212085631664e+00 -2.336191913897e+03+0.000000000000e+00j -1.937303341826e+02+0.000000000000e+00j -5.561117454149e-14+0.000000000000e+00j 1.000000000000e-01 + 7.599956891666e+00 -1.257665397683e+03+0.000000000000e+00j 2.256075560905e+03+0.000000000000e+00j 2.194643013012e-14+0.000000000000e+00j 1.000000000000e-01 + 9.121468823386e+00 2.739789173931e+02+0.000000000000e+00j -8.541533926711e+02+0.000000000000e+00j -1.275303382656e-14+0.000000000000e+00j 1.000000000000e-01 + 6.499026258312e+00 -1.391753177029e+03+0.000000000000e+00j 3.073802396661e-13+0.000000000000e+00j -1.391753177029e+03+0.000000000000e+00j 1.000000000000e-01 + 8.172018726729e+00 -1.140089543169e+03+0.000000000000e+00j 2.517982375066e-13+0.000000000000e+00j -1.140089543169e+03+0.000000000000e+00j 1.000000000000e-01 + 8.841630070238e+00 1.212226534588e+03+0.000000000000e+00j -2.677302907453e-13+0.000000000000e+00j 1.212226534588e+03+0.000000000000e+00j 1.000000000000e-01 + 6.212085631661e+00 4.707944915710e-14+0.000000000000e+00j 1.937303341824e+02+0.000000000000e+00j -2.336191913904e+03+0.000000000000e+00j 1.000000000000e-01 + 7.599956891662e+00 7.722889357983e-14+0.000000000000e+00j -2.256075560900e+03+0.000000000000e+00j -1.257665397688e+03+0.000000000000e+00j 1.000000000000e-01 + 9.121468823381e+00 -2.479616510532e-14+0.000000000000e+00j 8.541533926821e+02+0.000000000000e+00j 2.739789173907e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568940e+00 4.109790152351e+02+0.000000000000e+00j 2.235944633120e+02+0.000000000000e+00j -2.297162805672e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401500e+00 3.866751154302e+02+0.000000000000e+00j -1.651408145573e+03+0.000000000000e+00j -2.349960447269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089456e+00 -7.231958063040e+02+0.000000000000e+00j -3.249726472674e+02+0.000000000000e+00j -8.193662174715e+02+0.000000000000e+00j 1.000000000000e-01 + 5.084439614182e+00 1.611704542705e+02+0.000000000000e+00j 1.611704542705e+02+0.000000000000e+00j -2.058840261201e+03+0.000000000000e+00j 1.000000000000e-01 + 5.544261627747e+00 -2.103459518126e+02+0.000000000000e+00j -2.103459518126e+02+0.000000000000e+00j -3.440855856623e+03+0.000000000000e+00j 1.000000000000e-01 + 8.933106550821e+00 -1.305283557962e+03+0.000000000000e+00j -1.305283557962e+03+0.000000000000e+00j -1.749125406708e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 1.167708252118e+02+0.000000000000e+00j -4.048846605956e+02+0.000000000000e+00j -2.855339344593e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 -2.133281238363e+03+0.000000000000e+00j 1.271754473739e+03+0.000000000000e+00j -2.754226153073e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 -1.815457579586e+03+0.000000000000e+00j -1.439197506327e+03+0.000000000000e+00j -2.292540364973e+03+0.000000000000e+00j 1.000000000000e-01 + 3.800968118278e+00 -1.629999833649e+03+0.000000000000e+00j 3.609658300711e-13+0.000000000000e+00j -1.629999833649e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580363e+00 -2.668739100343e+03+0.000000000000e+00j 5.909961490252e-13+0.000000000000e+00j -2.668739100343e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741049e+00 -2.239677814254e+03+0.000000000000e+00j 4.959799041839e-13+0.000000000000e+00j -2.239677814254e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 -2.855339344599e+03+0.000000000000e+00j 4.048846605891e+02+0.000000000000e+00j 1.167708252139e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.754226153072e+03+0.000000000000e+00j -1.271754473744e+03+0.000000000000e+00j -2.133281238353e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 -2.292540364986e+03+0.000000000000e+00j 1.439197506310e+03+0.000000000000e+00j -1.815457579590e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257159e+00 -2.849906817858e+03+0.000000000000e+00j 6.887815763756e+01+0.000000000000e+00j -6.887815763756e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924449e+00 -3.298255165072e+03+0.000000000000e+00j 2.907876485096e+02+0.000000000000e+00j -2.907876485096e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452504e+00 -3.703285199892e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 -2.901107133228e+03+0.000000000000e+00j -3.958756311563e+02+0.000000000000e+00j -7.247222087635e-14+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -2.455785279116e+03+0.000000000000e+00j 1.768140685534e+03+0.000000000000e+00j -1.511537500763e-14+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 -2.557589353136e+03+0.000000000000e+00j 9.018856377917e+02+0.000000000000e+00j -3.639464745298e-14+0.000000000000e+00j 1.000000000000e-01 + 5.593783568942e+00 -2.297162805671e+03+0.000000000000e+00j -2.235944633121e+02+0.000000000000e+00j -4.109790152451e+02+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -2.349960447270e+03+0.000000000000e+00j 1.651408145570e+03+0.000000000000e+00j -3.866751154420e+02+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -8.193662174821e+02+0.000000000000e+00j 3.249726472808e+02+0.000000000000e+00j 7.231958063048e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.222381804895e+03+0.000000000000e+00j -7.962977578280e+00+0.000000000000e+00j -1.436326007860e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881312e+00 -2.773373845625e+03+0.000000000000e+00j 2.209454667356e+02+0.000000000000e+00j -9.408488419984e+02+0.000000000000e+00j 1.000000000000e-01 + 9.439946717092e+00 9.858366119372e+02+0.000000000000e+00j 5.737601261432e+01+0.000000000000e+00j 9.265906162296e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509314e+00 -3.405516824148e+02+0.000000000000e+00j 1.368428956439e+01+0.000000000000e+00j -2.228955124172e+03+0.000000000000e+00j 1.000000000000e-01 + 7.475852473513e+00 -2.155507627740e+03+0.000000000000e+00j -1.664544017633e+03+0.000000000000e+00j -1.737759702190e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208917e+00 1.487864010841e+03+0.000000000000e+00j 8.232383415556e+01+0.000000000000e+00j 4.074490724521e+02+0.000000000000e+00j 1.000000000000e-01 + 4.916570700371e+00 5.962859034522e-14+0.000000000000e+00j -5.517436734186e+01+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j 1.000000000000e-01 + 6.716886976964e+00 1.022625265083e-13+0.000000000000e+00j -2.407984538040e+03+0.000000000000e+00j -2.244897517877e+03+0.000000000000e+00j 1.000000000000e-01 + 8.977333823242e+00 3.590370693328e-14+0.000000000000e+00j -6.727877776834e+02+0.000000000000e+00j -9.608585950688e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052921e+00 -4.048846605956e+02+0.000000000000e+00j 1.167708252118e+02+0.000000000000e+00j -2.855339344593e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049382e+00 1.271754473739e+03+0.000000000000e+00j -2.133281238363e+03+0.000000000000e+00j -2.754226153073e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104507e+00 -1.439197506327e+03+0.000000000000e+00j -1.815457579586e+03+0.000000000000e+00j -2.292540364973e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311366e+00 -3.541150241892e+02+0.000000000000e+00j -3.541150241892e+02+0.000000000000e+00j -3.270970228798e+03+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -4.336803003555e+02+0.000000000000e+00j -4.336803003555e+02+0.000000000000e+00j -2.570858259189e+03+0.000000000000e+00j 1.000000000000e-01 + 7.704051593164e+00 -2.466222371692e+03+0.000000000000e+00j -2.466222371692e+03+0.000000000000e+00j -3.141814155950e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422199e+00 -1.677827869084e+03+0.000000000000e+00j -8.010663469957e+02+0.000000000000e+00j -1.677827869084e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719795e+00 -2.675742073394e+03+0.000000000000e+00j 1.061468362371e+03+0.000000000000e+00j -2.675742073394e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523485e+00 -3.295829288942e+03+0.000000000000e+00j -1.982424451106e+03+0.000000000000e+00j -3.295829288942e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 -3.326019148224e+03+0.000000000000e+00j 1.957704712401e-14+0.000000000000e+00j 2.477472180376e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 -3.069970706092e+03+0.000000000000e+00j 4.780209673019e-13+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 -3.909325828783e+03+0.000000000000e+00j 5.836829835087e-13+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 3.678827995347e+00 -3.358198488056e+03+0.000000000000e+00j 6.981269318858e-14+0.000000000000e+00j -7.381782677561e-14+0.000000000000e+00j 1.000000000000e-01 + 3.678827995357e+00 -3.358198488058e+03+0.000000000000e+00j 6.981269318858e-14+0.000000000000e+00j -7.381782677561e-14+0.000000000000e+00j 1.000000000000e-01 + 6.148719801041e+00 -5.119264327847e+03+0.000000000000e+00j 1.064230214927e-13+0.000000000000e+00j -1.125284788005e-13+0.000000000000e+00j 1.000000000000e-01 + 4.486945257150e+00 -2.849906817861e+03+0.000000000000e+00j 6.887815764371e+01+0.000000000000e+00j 6.887815764371e+01+0.000000000000e+00j 1.000000000000e-01 + 4.560899924458e+00 -3.298255165074e+03+0.000000000000e+00j 2.907876484989e+02+0.000000000000e+00j 2.907876484989e+02+0.000000000000e+00j 1.000000000000e-01 + 7.614210452502e+00 -3.703285199893e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 1.173822321981e+03+0.000000000000e+00j 1.000000000000e-01 + 5.084439614181e+00 -2.058840261207e+03+0.000000000000e+00j -1.611704542722e+02+0.000000000000e+00j -1.611704542722e+02+0.000000000000e+00j 1.000000000000e-01 + 5.544261627748e+00 -3.440855856625e+03+0.000000000000e+00j 2.103459517991e+02+0.000000000000e+00j 2.103459517991e+02+0.000000000000e+00j 1.000000000000e-01 + 8.933106550816e+00 -1.749125406727e+03+0.000000000000e+00j 1.305283557965e+03+0.000000000000e+00j 1.305283557965e+03+0.000000000000e+00j 1.000000000000e-01 + 5.311606608474e+00 -1.170914963942e+03+0.000000000000e+00j -5.511984988163e+02+0.000000000000e+00j -5.511984988163e+02+0.000000000000e+00j 1.000000000000e-01 + 6.365132215531e+00 -3.520407372794e+03+0.000000000000e+00j -4.701433168860e+02+0.000000000000e+00j -4.701433168860e+02+0.000000000000e+00j 1.000000000000e-01 + 9.690018385185e+00 1.570279330093e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 9.131359997239e+02+0.000000000000e+00j 1.000000000000e-01 + 5.120703368607e+00 -3.903028684352e+02+0.000000000000e+00j -9.813960230264e+02+0.000000000000e+00j -9.813960230264e+02+0.000000000000e+00j 1.000000000000e-01 + 6.738373870169e+00 -3.181897710263e+03+0.000000000000e+00j -1.439610072411e+03+0.000000000000e+00j -1.439610072411e+03+0.000000000000e+00j 1.000000000000e-01 + 9.746050609831e+00 1.483189426185e+03+0.000000000000e+00j 1.539717814987e+02+0.000000000000e+00j 1.539717814987e+02+0.000000000000e+00j 1.000000000000e-01 + 4.568615909401e+00 6.848654362995e+01+0.000000000000e+00j -1.362258017175e+03+0.000000000000e+00j -1.362258017175e+03+0.000000000000e+00j 1.000000000000e-01 + 6.464678834561e+00 -1.978995825498e+03+0.000000000000e+00j -2.277392898260e+03+0.000000000000e+00j -2.277392898260e+03+0.000000000000e+00j 1.000000000000e-01 + 9.161700902965e+00 1.522129397379e+03+0.000000000000e+00j -9.309665228146e+02+0.000000000000e+00j -9.309665228146e+02+0.000000000000e+00j 1.000000000000e-01 + 3.800968118278e+00 7.165411615119e-14+0.000000000000e+00j -1.629999833649e+03+0.000000000000e+00j -1.629999833649e+03+0.000000000000e+00j 1.000000000000e-01 + 5.470989580363e+00 1.173166631837e-13+0.000000000000e+00j -2.668739100343e+03+0.000000000000e+00j -2.668739100343e+03+0.000000000000e+00j 1.000000000000e-01 + 8.166402741049e+00 9.845530713205e-14+0.000000000000e+00j -2.239677814254e+03+0.000000000000e+00j -2.239677814254e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422199e+00 -8.010663469957e+02+0.000000000000e+00j -1.677827869084e+03+0.000000000000e+00j -1.677827869084e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719795e+00 1.061468362371e+03+0.000000000000e+00j -2.675742073394e+03+0.000000000000e+00j -2.675742073394e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523485e+00 -1.982424451106e+03+0.000000000000e+00j -3.295829288942e+03+0.000000000000e+00j -3.295829288942e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 -1.595448846500e+03+0.000000000000e+00j -1.595448846500e+03+0.000000000000e+00j -1.595448846500e+03+0.000000000000e+00j 1.000000000000e-01 + 2.672119340521e+00 -1.595448846500e+03+0.000000000000e+00j -1.595448846500e+03+0.000000000000e+00j -1.595448846500e+03+0.000000000000e+00j 1.000000000000e-01 + 5.981663234903e+00 -3.544786741863e+03+0.000000000000e+00j -3.544786741863e+03+0.000000000000e+00j -3.544786741863e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 -3.621818540520e+03+0.000000000000e+00j -1.906161083847e+02+0.000000000000e+00j -1.906161083847e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219265e+00 -3.298148639026e+03+0.000000000000e+00j -4.960658211791e+02+0.000000000000e+00j -4.960658211791e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578749e+00 -4.812325680560e+03+0.000000000000e+00j -2.410990334911e+03+0.000000000000e+00j -2.410990334911e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 -3.621818540516e+03+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 -3.298148639035e+03+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 -4.812325680570e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 -3.326019148229e+03+0.000000000000e+00j 1.187104038179e-13+0.000000000000e+00j -2.477472180394e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 -3.069970706102e+03+0.000000000000e+00j -3.503793619804e-13+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 -3.909325828790e+03+0.000000000000e+00j -4.211431183806e-13+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 -2.855339344597e+03+0.000000000000e+00j 4.048846605795e+02+0.000000000000e+00j -1.167708252121e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.754226153082e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j 2.133281238364e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -2.292540364990e+03+0.000000000000e+00j 1.439197506316e+03+0.000000000000e+00j 1.815457579598e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.107875696041e+03+0.000000000000e+00j -2.473510678252e+01+0.000000000000e+00j -1.347963952064e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 -2.537027099992e+03+0.000000000000e+00j -2.100426273090e+03+0.000000000000e+00j 1.383957859744e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -5.951882676210e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j 9.430387165139e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 -1.029630366773e+03+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j -4.526538638363e-14+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 -2.417747879248e+03+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j -1.062908549185e-13+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 8.075401156421e+02+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 3.550168733787e-14+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.473510677569e+01+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j 1.347963952067e+02+0.000000000000e+00j 1.000000000000e-01 + 6.010566531749e+00 -2.100426273078e+03+0.000000000000e+00j -2.537027100001e+03+0.000000000000e+00j -1.383957859722e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 1.600399579641e+03+0.000000000000e+00j -5.951882676219e+02+0.000000000000e+00j -9.430387165091e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 4.048846605891e+02+0.000000000000e+00j -2.855339344599e+03+0.000000000000e+00j 1.167708252139e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -1.271754473744e+03+0.000000000000e+00j -2.754226153072e+03+0.000000000000e+00j -2.133281238353e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 1.439197506310e+03+0.000000000000e+00j -2.292540364986e+03+0.000000000000e+00j -1.815457579590e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 6.766622577425e-14+0.000000000000e+00j -3.326019148224e+03+0.000000000000e+00j 2.477472180376e+02+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 1.129766830150e-13+0.000000000000e+00j -3.069970706092e+03+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 1.411159023437e-13+0.000000000000e+00j -3.909325828783e+03+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 -1.906161083847e+02+0.000000000000e+00j -3.621818540520e+03+0.000000000000e+00j -1.906161083847e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219265e+00 -4.960658211791e+02+0.000000000000e+00j -3.298148639026e+03+0.000000000000e+00j -4.960658211791e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578749e+00 -2.410990334911e+03+0.000000000000e+00j -4.812325680560e+03+0.000000000000e+00j -2.410990334911e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828350e+00 -1.952274616239e+03+0.000000000000e+00j -1.952274616239e+03+0.000000000000e+00j -8.582736842465e-14+0.000000000000e+00j 1.000000000000e-01 + 2.737268289319e+00 -2.793069604590e+03+0.000000000000e+00j -2.793069604590e+03+0.000000000000e+00j -1.227910315474e-13+0.000000000000e+00j 1.000000000000e-01 + 4.816726887363e+00 -4.353221992374e+03+0.000000000000e+00j -4.353221992374e+03+0.000000000000e+00j -1.913796269578e-13+0.000000000000e+00j 1.000000000000e-01 + 1.392251140991e+00 -1.826703349756e+03+0.000000000000e+00j -1.826703349756e+03+0.000000000000e+00j 1.826703349756e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140997e+00 -1.826703349736e+03+0.000000000000e+00j -1.826703349736e+03+0.000000000000e+00j 1.826703349736e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227945e+00 -4.091794716320e+03+0.000000000000e+00j -4.091794716320e+03+0.000000000000e+00j 4.091794716320e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828351e+00 -1.952274616241e+03+0.000000000000e+00j -3.511634154721e-13+0.000000000000e+00j 1.952274616241e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289311e+00 -2.793069604589e+03+0.000000000000e+00j -5.024005607816e-13+0.000000000000e+00j 2.793069604589e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887354e+00 -4.353221992372e+03+0.000000000000e+00j -7.830313883266e-13+0.000000000000e+00j 4.353221992372e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 -1.677827869087e+03+0.000000000000e+00j 8.010663469828e+02+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 -2.675742073398e+03+0.000000000000e+00j -1.061468362370e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 -3.295829288952e+03+0.000000000000e+00j 1.982424451087e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 -1.287469747220e+03+0.000000000000e+00j 6.948254471676e+02+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 -2.218454428379e+03+0.000000000000e+00j -1.725508655138e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 -2.011916748813e+03+0.000000000000e+00j 2.139081422557e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 -8.326275941955e+02+0.000000000000e+00j 1.095902598229e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 -1.515634023277e+03+0.000000000000e+00j -2.246901195615e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 -6.390435888751e+02+0.000000000000e+00j 1.373374188791e+03+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 -3.449549636351e+02+0.000000000000e+00j -7.484369549273e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 -7.252539022866e+02+0.000000000000e+00j -2.663991119437e+03+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192902e+02+0.000000000000e+00j 7.537749369760e+01+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 1.089702533912e+02+0.000000000000e+00j -1.693883617056e+03+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 -3.331454318583e+01+0.000000000000e+00j -2.983841276862e+03+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.792515640354e+03+0.000000000000e+00j -1.492388034645e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 3.541150241882e+02+0.000000000000e+00j -3.270970228804e+03+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 4.336803003413e+02+0.000000000000e+00j -2.570858259195e+03+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 2.466222371689e+03+0.000000000000e+00j -3.141814155967e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 1.906161083910e+02+0.000000000000e+00j -3.621818540516e+03+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 4.960658211669e+02+0.000000000000e+00j -3.298148639035e+03+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 2.410990334891e+03+0.000000000000e+00j -4.812325680570e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678772e+00 8.278577344986e-14+0.000000000000e+00j -3.766177783539e+03+0.000000000000e+00j -8.278577344981e-14+0.000000000000e+00j 1.000000000000e-01 + 1.902801678779e+00 8.278577344894e-14+0.000000000000e+00j -3.766177783499e+03+0.000000000000e+00j -8.278577344884e-14+0.000000000000e+00j 1.000000000000e-01 + 3.287661494877e+00 1.394563859887e-13+0.000000000000e+00j -6.344297103151e+03+0.000000000000e+00j -1.394563859879e-13+0.000000000000e+00j 1.000000000000e-01 + 2.019196828351e+00 6.186592350803e-18+0.000000000000e+00j -1.952274616241e+03+0.000000000000e+00j 1.952274616241e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289311e+00 8.851000216431e-18+0.000000000000e+00j -2.793069604589e+03+0.000000000000e+00j 2.793069604589e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887354e+00 1.379499054850e-17+0.000000000000e+00j -4.353221992372e+03+0.000000000000e+00j 4.353221992372e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 -1.906161083809e+02+0.000000000000e+00j -1.906161083809e+02+0.000000000000e+00j 3.621818540528e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219261e+00 -4.960658211723e+02+0.000000000000e+00j -4.960658211723e+02+0.000000000000e+00j 3.298148639030e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578736e+00 -2.410990334894e+03+0.000000000000e+00j -2.410990334894e+03+0.000000000000e+00j 4.812325680568e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 2.477472180394e+02+0.000000000000e+00j -6.705855577827e-13+0.000000000000e+00j 3.326019148229e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 -2.070280719288e+03+0.000000000000e+00j -5.711691922540e-13+0.000000000000e+00j 3.069970706102e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 -2.511191789093e+03+0.000000000000e+00j -7.299326245236e-13+0.000000000000e+00j 3.909325828790e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 1.167708252163e+02+0.000000000000e+00j 4.048846605874e+02+0.000000000000e+00j 2.855339344604e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.133281238368e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j 2.754226153081e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -1.815457579596e+03+0.000000000000e+00j 1.439197506317e+03+0.000000000000e+00j 2.292540364991e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 1.347963952090e+02+0.000000000000e+00j -2.473510678723e+01+0.000000000000e+00j 2.107875696050e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 -1.383957859743e+03+0.000000000000e+00j -2.100426273080e+03+0.000000000000e+00j 2.537027100000e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 -9.430387165133e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j 5.951882676234e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236690e+00 6.139909804280e-16+0.000000000000e+00j -1.029630366785e+03+0.000000000000e+00j 1.029630366785e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845308e+00 1.441755642311e-15+0.000000000000e+00j -2.417747879247e+03+0.000000000000e+00j 2.417747879247e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592376e+00 -4.815537335841e-16+0.000000000000e+00j 8.075401156400e+02+0.000000000000e+00j -8.075401156400e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 -1.347963952090e+02+0.000000000000e+00j -2.107875696050e+03+0.000000000000e+00j 2.473510678724e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 1.383957859743e+03+0.000000000000e+00j -2.537027100000e+03+0.000000000000e+00j 2.100426273080e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 9.430387165133e+02+0.000000000000e+00j -5.951882676234e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 -1.167708252163e+02+0.000000000000e+00j -2.855339344604e+03+0.000000000000e+00j -4.048846605874e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.133281238368e+03+0.000000000000e+00j -2.754226153081e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.815457579596e+03+0.000000000000e+00j -2.292540364991e+03+0.000000000000e+00j -1.439197506317e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 -2.477472180394e+02+0.000000000000e+00j -3.326019148229e+03+0.000000000000e+00j -7.855630556088e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 2.070280719288e+03+0.000000000000e+00j -3.069970706102e+03+0.000000000000e+00j -2.197456241457e-14+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 2.511191789093e+03+0.000000000000e+00j -3.909325828790e+03+0.000000000000e+00j -3.073291132662e-14+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 1.906161083809e+02+0.000000000000e+00j -3.621818540528e+03+0.000000000000e+00j 1.906161083809e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219261e+00 4.960658211723e+02+0.000000000000e+00j -3.298148639030e+03+0.000000000000e+00j 4.960658211723e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578736e+00 2.410990334894e+03+0.000000000000e+00j -4.812325680568e+03+0.000000000000e+00j 2.410990334894e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422198e+00 8.010663469828e+02+0.000000000000e+00j -1.677827869087e+03+0.000000000000e+00j 1.677827869087e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719790e+00 -1.061468362370e+03+0.000000000000e+00j -2.675742073398e+03+0.000000000000e+00j 2.675742073398e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523471e+00 1.982424451087e+03+0.000000000000e+00j -3.295829288952e+03+0.000000000000e+00j 3.295829288952e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 -7.853522581700e-14+0.000000000000e+00j 2.477472180394e+02+0.000000000000e+00j 3.326019148229e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 -2.195510546186e-14+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j 3.069970706102e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 -3.070813468415e-14+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j 3.909325828790e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257150e+00 -6.887815764371e+01+0.000000000000e+00j -6.887815764371e+01+0.000000000000e+00j 2.849906817861e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924458e+00 -2.907876484989e+02+0.000000000000e+00j -2.907876484989e+02+0.000000000000e+00j 3.298255165074e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452502e+00 -1.173822321981e+03+0.000000000000e+00j -1.173822321981e+03+0.000000000000e+00j 3.703285199893e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 3.958756311563e+02+0.000000000000e+00j -5.886529975209e-13+0.000000000000e+00j 2.901107133228e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -1.768140685534e+03+0.000000000000e+00j -4.545704891635e-13+0.000000000000e+00j 2.455785279116e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 -9.018856377917e+02+0.000000000000e+00j -4.929467313251e-13+0.000000000000e+00j 2.557589353136e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 2.235944633154e+02+0.000000000000e+00j -4.109790152323e+02+0.000000000000e+00j 2.297162805673e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -1.651408145580e+03+0.000000000000e+00j -3.866751154334e+02+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 -3.249726472798e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j 8.193662174838e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 7.962977576050e+00+0.000000000000e+00j -1.436326007861e+03+0.000000000000e+00j 1.222381804894e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 -2.209454667325e+02+0.000000000000e+00j -9.408488419795e+02+0.000000000000e+00j 2.773373845637e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 -5.737601261443e+01+0.000000000000e+00j 9.265906162319e+02+0.000000000000e+00j -9.858366119346e+02+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 -1.368428956505e+01+0.000000000000e+00j -2.228955124173e+03+0.000000000000e+00j 3.405516824120e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 1.664544017648e+03+0.000000000000e+00j -1.737759702187e+03+0.000000000000e+00j 2.155507627736e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 -8.232383415397e+01+0.000000000000e+00j 4.074490724538e+02+0.000000000000e+00j -1.487864010833e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 5.517436734322e+01+0.000000000000e+00j -2.658278854984e+03+0.000000000000e+00j -5.721982093269e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 2.407984538050e+03+0.000000000000e+00j -2.244897517883e+03+0.000000000000e+00j 3.584877262922e-15+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 6.727877776973e+02+0.000000000000e+00j -9.608585950775e+02+0.000000000000e+00j -6.332193219660e-15+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 -1.167708252121e+02+0.000000000000e+00j -2.855339344597e+03+0.000000000000e+00j 4.048846605795e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 2.133281238364e+03+0.000000000000e+00j -2.754226153082e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.815457579598e+03+0.000000000000e+00j -2.292540364990e+03+0.000000000000e+00j 1.439197506316e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311364e+00 3.541150241790e+02+0.000000000000e+00j -3.270970228804e+03+0.000000000000e+00j 3.541150241790e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453628e+00 4.336803003525e+02+0.000000000000e+00j -2.570858259196e+03+0.000000000000e+00j 4.336803003525e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593150e+00 2.466222371691e+03+0.000000000000e+00j -3.141814155966e+03+0.000000000000e+00j 2.466222371691e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953785e+00 6.948254471676e+02+0.000000000000e+00j -1.287469747220e+03+0.000000000000e+00j 1.287469747220e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351291e+00 -1.725508655138e+03+0.000000000000e+00j -2.218454428379e+03+0.000000000000e+00j 2.218454428379e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594723e+00 2.139081422557e+03+0.000000000000e+00j -2.011916748813e+03+0.000000000000e+00j 2.011916748813e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 4.048846605874e+02+0.000000000000e+00j 1.167708252163e+02+0.000000000000e+00j 2.855339344604e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -1.271754473743e+03+0.000000000000e+00j -2.133281238368e+03+0.000000000000e+00j 2.754226153081e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 1.439197506317e+03+0.000000000000e+00j -1.815457579596e+03+0.000000000000e+00j 2.292540364991e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608592e+00 -7.245383415741e-14+0.000000000000e+00j 3.958756311563e+02+0.000000000000e+00j 2.901107133228e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -1.509981065686e-14+0.000000000000e+00j -1.768140685534e+03+0.000000000000e+00j 2.455785279116e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271327e+00 -3.637843788649e-14+0.000000000000e+00j -9.018856377917e+02+0.000000000000e+00j 2.557589353136e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080838e+00 1.955720814199e+02+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j 1.931571181623e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842365e+00 -8.360286832711e+02+0.000000000000e+00j -8.360286832711e+02+0.000000000000e+00j 2.327628679167e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225688e+00 -1.902976282757e+02+0.000000000000e+00j -1.902976282757e+02+0.000000000000e+00j 2.153754821741e+03+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 -1.389460562305e+02+0.000000000000e+00j -3.450280867670e-13+0.000000000000e+00j 1.738978129230e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 -1.627322748360e+03+0.000000000000e+00j -2.379665244063e-13+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 4.535788174314e+02+0.000000000000e+00j -2.353748108371e-13+0.000000000000e+00j 1.129334593096e+03+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 -3.405764006383e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j 8.165966244787e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.674226432375e+03+0.000000000000e+00j 1.466859757964e+03+0.000000000000e+00j 1.224827992550e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 1.176647268019e+03+0.000000000000e+00j -2.837982416352e+02+0.000000000000e+00j -1.160191764851e+02+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 -1.994915061823e+02+0.000000000000e+00j -2.114543049917e+03+0.000000000000e+00j -5.086566580890e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 -1.407377764407e+03+0.000000000000e+00j 1.516378160774e+03+0.000000000000e+00j 2.395978798105e-15+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 1.946935955182e+03+0.000000000000e+00j -1.161560904470e+03+0.000000000000e+00j 1.726362502259e-14+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 -1.368428955981e+01+0.000000000000e+00j -2.228955124167e+03+0.000000000000e+00j -3.405516824254e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 1.664544017651e+03+0.000000000000e+00j -1.737759702183e+03+0.000000000000e+00j -2.155507627743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 -8.232383415304e+01+0.000000000000e+00j 4.074490724557e+02+0.000000000000e+00j 1.487864010830e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -1.347963952064e+02+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j -2.473510678253e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 1.383957859744e+03+0.000000000000e+00j -2.537027099992e+03+0.000000000000e+00j -2.100426273090e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 9.430387165139e+02+0.000000000000e+00j -5.951882676209e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700616e+00 1.089702534022e+02+0.000000000000e+00j -1.693883617055e+03+0.000000000000e+00j 1.089702534022e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605921e+00 -3.331454319421e+01+0.000000000000e+00j -2.983841276854e+03+0.000000000000e+00j -3.331454319421e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 1.792515640355e+03+0.000000000000e+00j -1.492388034645e+03+0.000000000000e+00j 1.792515640355e+03+0.000000000000e+00j 1.000000000000e-01 + 4.619612844970e+00 1.095902598229e+02+0.000000000000e+00j -8.326275941955e+02+0.000000000000e+00j 8.326275941955e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649684e+00 -2.246901195615e+03+0.000000000000e+00j -1.515634023277e+03+0.000000000000e+00j 1.515634023277e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751928e+00 1.373374188791e+03+0.000000000000e+00j -6.390435888751e+02+0.000000000000e+00j 6.390435888751e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 -2.473510678724e+01+0.000000000000e+00j 1.347963952090e+02+0.000000000000e+00j 2.107875696050e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 -2.100426273080e+03+0.000000000000e+00j -1.383957859743e+03+0.000000000000e+00j 2.537027100000e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 1.600399579637e+03+0.000000000000e+00j -9.430387165133e+02+0.000000000000e+00j 5.951882676235e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568947e+00 -4.109790152323e+02+0.000000000000e+00j 2.235944633154e+02+0.000000000000e+00j 2.297162805673e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401502e+00 -3.866751154334e+02+0.000000000000e+00j -1.651408145580e+03+0.000000000000e+00j 2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089458e+00 7.231958063081e+02+0.000000000000e+00j -3.249726472798e+02+0.000000000000e+00j 8.193662174838e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112493e+00 -3.515988675151e-14+0.000000000000e+00j -1.389460562305e+02+0.000000000000e+00j 1.738978129230e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457192e+00 5.917484640916e-15+0.000000000000e+00j -1.627322748360e+03+0.000000000000e+00j 1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 -3.478745879567e-14+0.000000000000e+00j 4.535788174314e+02+0.000000000000e+00j 1.129334593096e+03+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 3.350650599560e+02+0.000000000000e+00j 3.350650599560e+02+0.000000000000e+00j 6.851091907684e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093596e+00 -1.317747768119e+03+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j 8.546200435459e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 4.550013552737e+02+0.000000000000e+00j 4.550013552737e+02+0.000000000000e+00j 6.775000304810e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 -5.027358068558e+02+0.000000000000e+00j 1.045124067564e-14+0.000000000000e+00j -1.105082526729e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 -1.583065534720e+03+0.000000000000e+00j 3.290992741036e-14+0.000000000000e+00j -3.479796022550e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 1.065003863972e+03+0.000000000000e+00j -2.214008143469e-14+0.000000000000e+00j 2.341025136714e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 -3.405764006341e+02+0.000000000000e+00j -1.565824031920e+03+0.000000000000e+00j -8.165966244897e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 -1.674226432372e+03+0.000000000000e+00j 1.466859757966e+03+0.000000000000e+00j -1.224827992553e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 1.176647268022e+03+0.000000000000e+00j -2.837982416341e+02+0.000000000000e+00j 1.160191764820e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 7.962977582710e+00+0.000000000000e+00j -1.436326007856e+03+0.000000000000e+00j -1.222381804899e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -2.209454667211e+02+0.000000000000e+00j -9.408488419744e+02+0.000000000000e+00j -2.773373845643e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 -5.737601261161e+01+0.000000000000e+00j 9.265906162360e+02+0.000000000000e+00j 9.858366119327e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 4.465139540329e-14+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 1.048490992744e-13+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 -3.502013360440e-14+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181326e+00 -3.449549636286e+02+0.000000000000e+00j -7.484369549179e+02+0.000000000000e+00j -3.449549636286e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658484e+00 -7.252539022881e+02+0.000000000000e+00j -2.663991119428e+03+0.000000000000e+00j -7.252539022881e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 6.906934192903e+02+0.000000000000e+00j 7.537749370039e+01+0.000000000000e+00j 6.906934192903e+02+0.000000000000e+00j 1.000000000000e-01 + 4.835801181322e+00 -7.484369549273e+02+0.000000000000e+00j -3.449549636351e+02+0.000000000000e+00j 3.449549636351e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658492e+00 -2.663991119437e+03+0.000000000000e+00j -7.252539022866e+02+0.000000000000e+00j 7.252539022866e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 7.537749369760e+01+0.000000000000e+00j 6.906934192902e+02+0.000000000000e+00j -6.906934192902e+02+0.000000000000e+00j 1.000000000000e-01 + 5.164686236690e+00 -1.029630366785e+03+0.000000000000e+00j -1.845929892106e-13+0.000000000000e+00j 1.029630366785e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845308e+00 -2.417747879247e+03+0.000000000000e+00j -4.334558522989e-13+0.000000000000e+00j 2.417747879247e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592376e+00 8.075401156400e+02+0.000000000000e+00j 1.447764641197e-13+0.000000000000e+00j -8.075401156400e+02+0.000000000000e+00j 1.000000000000e-01 + 5.776586016531e+00 -1.436326007861e+03+0.000000000000e+00j 7.962977576044e+00+0.000000000000e+00j 1.222381804894e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881320e+00 -9.408488419796e+02+0.000000000000e+00j -2.209454667325e+02+0.000000000000e+00j 2.773373845637e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717094e+00 9.265906162319e+02+0.000000000000e+00j -5.737601261443e+01+0.000000000000e+00j -9.858366119346e+02+0.000000000000e+00j 1.000000000000e-01 + 6.381725079856e+00 -1.565824031920e+03+0.000000000000e+00j -3.405764006383e+02+0.000000000000e+00j 8.165966244787e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.466859757964e+03+0.000000000000e+00j -1.674226432375e+03+0.000000000000e+00j 1.224827992550e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159590e+00 -2.837982416353e+02+0.000000000000e+00j 1.176647268019e+03+0.000000000000e+00j -1.160191764851e+02+0.000000000000e+00j 1.000000000000e-01 + 6.661676365684e+00 1.105082526647e-14+0.000000000000e+00j -5.027358068558e+02+0.000000000000e+00j -1.105082526709e-14+0.000000000000e+00j 1.000000000000e-01 + 6.935318059578e+00 3.479796022509e-14+0.000000000000e+00j -1.583065534720e+03+0.000000000000e+00j -3.479796022530e-14+0.000000000000e+00j 1.000000000000e-01 + 9.711278049034e+00 -2.341025136739e-14+0.000000000000e+00j 1.065003863972e+03+0.000000000000e+00j 2.341025136719e-14+0.000000000000e+00j 1.000000000000e-01 + 6.343362112445e+00 3.350650599564e+02+0.000000000000e+00j 3.350650599564e+02+0.000000000000e+00j -6.851091907693e+02+0.000000000000e+00j 1.000000000000e-01 + 6.779752093595e+00 -1.317747768119e+03+0.000000000000e+00j -1.317747768119e+03+0.000000000000e+00j -8.546200435520e+02+0.000000000000e+00j 1.000000000000e-01 + 9.759752721146e+00 4.550013552749e+02+0.000000000000e+00j 4.550013552749e+02+0.000000000000e+00j -6.775000304802e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 -1.389460562279e+02+0.000000000000e+00j 3.508051118168e-13+0.000000000000e+00j -1.738978129235e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 -1.627322748356e+03+0.000000000000e+00j 3.056264820608e-13+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 4.535788174358e+02+0.000000000000e+00j 2.165161525830e-13+0.000000000000e+00j -1.129334593094e+03+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 2.235944633189e+02+0.000000000000e+00j -4.109790152335e+02+0.000000000000e+00j -2.297162805675e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 -1.651408145566e+03+0.000000000000e+00j -3.866751154283e+02+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 -3.249726472726e+02+0.000000000000e+00j 7.231958063081e+02+0.000000000000e+00j -8.193662174822e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 1.347963952067e+02+0.000000000000e+00j -2.473510677568e+01+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531748e+00 -1.383957859722e+03+0.000000000000e+00j -2.100426273078e+03+0.000000000000e+00j -2.537027100001e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 -9.430387165091e+02+0.000000000000e+00j 1.600399579641e+03+0.000000000000e+00j -5.951882676219e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844972e+00 -8.326275941940e+02+0.000000000000e+00j 1.095902598382e+02+0.000000000000e+00j -8.326275941940e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649676e+00 -1.515634023269e+03+0.000000000000e+00j -2.246901195613e+03+0.000000000000e+00j -1.515634023269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751927e+00 -6.390435888739e+02+0.000000000000e+00j 1.373374188795e+03+0.000000000000e+00j -6.390435888739e+02+0.000000000000e+00j 1.000000000000e-01 + 4.588935700615e+00 -1.693883617056e+03+0.000000000000e+00j 1.089702533912e+02+0.000000000000e+00j -1.089702533912e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605924e+00 -2.983841276862e+03+0.000000000000e+00j -3.331454318583e+01+0.000000000000e+00j 3.331454318583e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.492388034645e+03+0.000000000000e+00j 1.792515640354e+03+0.000000000000e+00j -1.792515640354e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457922e+00 -2.107875696050e+03+0.000000000000e+00j -1.347963952090e+02+0.000000000000e+00j 2.473510678724e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531754e+00 -2.537027100000e+03+0.000000000000e+00j 1.383957859743e+03+0.000000000000e+00j 2.100426273080e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778910e+00 -5.951882676235e+02+0.000000000000e+00j 9.430387165133e+02+0.000000000000e+00j -1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 5.505235509320e+00 -2.228955124173e+03+0.000000000000e+00j -1.368428956505e+01+0.000000000000e+00j 3.405516824120e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473523e+00 -1.737759702187e+03+0.000000000000e+00j 1.664544017648e+03+0.000000000000e+00j 2.155507627736e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208921e+00 4.074490724537e+02+0.000000000000e+00j -8.232383415397e+01+0.000000000000e+00j -1.487864010833e+03+0.000000000000e+00j 1.000000000000e-01 + 6.079617217146e+00 -2.114543049917e+03+0.000000000000e+00j -1.994915061823e+02+0.000000000000e+00j -5.086566580890e-14+0.000000000000e+00j 1.000000000000e-01 + 8.569509964621e+00 1.516378160774e+03+0.000000000000e+00j -1.407377764407e+03+0.000000000000e+00j 2.395978798105e-15+0.000000000000e+00j 1.000000000000e-01 + 8.669948656658e+00 -1.161560904470e+03+0.000000000000e+00j 1.946935955182e+03+0.000000000000e+00j 1.726362502259e-14+0.000000000000e+00j 1.000000000000e-01 + 6.381725079853e+00 -1.565824031920e+03+0.000000000000e+00j -3.405764006341e+02+0.000000000000e+00j -8.165966244897e+02+0.000000000000e+00j 1.000000000000e-01 + 7.553679569864e+00 1.466859757966e+03+0.000000000000e+00j -1.674226432372e+03+0.000000000000e+00j -1.224827992553e+03+0.000000000000e+00j 1.000000000000e-01 + 9.339036159589e+00 -2.837982416341e+02+0.000000000000e+00j 1.176647268022e+03+0.000000000000e+00j 1.160191764820e+02+0.000000000000e+00j 1.000000000000e-01 + 6.215455112490e+00 4.126833802048e-14+0.000000000000e+00j -1.389460562279e+02+0.000000000000e+00j -1.738978129235e+03+0.000000000000e+00j 1.000000000000e-01 + 6.593639457191e+00 6.562410480023e-14+0.000000000000e+00j -1.627322748356e+03+0.000000000000e+00j -1.358509986833e+03+0.000000000000e+00j 1.000000000000e-01 + 9.443121586714e+00 1.484688488775e-14+0.000000000000e+00j 4.535788174358e+02+0.000000000000e+00j -1.129334593094e+03+0.000000000000e+00j 1.000000000000e-01 + 5.686212080837e+00 1.955720814199e+02+0.000000000000e+00j 1.955720814199e+02+0.000000000000e+00j -1.931571181621e+03+0.000000000000e+00j 1.000000000000e-01 + 5.974862842362e+00 -8.360286832695e+02+0.000000000000e+00j -8.360286832695e+02+0.000000000000e+00j -2.327628679170e+03+0.000000000000e+00j 1.000000000000e-01 + 9.067284225690e+00 -1.902976282771e+02+0.000000000000e+00j -1.902976282771e+02+0.000000000000e+00j -2.153754821733e+03+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 3.958756311590e+02+0.000000000000e+00j 5.721934915843e-13+0.000000000000e+00j -2.901107133229e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 -1.768140685530e+03+0.000000000000e+00j 5.280852999344e-13+0.000000000000e+00j -2.455785279109e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 -9.018856377877e+02+0.000000000000e+00j 5.304448515487e-13+0.000000000000e+00j -2.557589353128e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 1.167708252139e+02+0.000000000000e+00j 4.048846605891e+02+0.000000000000e+00j -2.855339344599e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.133281238353e+03+0.000000000000e+00j -1.271754473744e+03+0.000000000000e+00j -2.754226153072e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 -1.815457579590e+03+0.000000000000e+00j 1.439197506310e+03+0.000000000000e+00j -2.292540364986e+03+0.000000000000e+00j 1.000000000000e-01 + 3.985925953784e+00 -1.287469747221e+03+0.000000000000e+00j 6.948254471798e+02+0.000000000000e+00j -1.287469747221e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351289e+00 -2.218454428366e+03+0.000000000000e+00j -1.725508655145e+03+0.000000000000e+00j -2.218454428366e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594722e+00 -2.011916748810e+03+0.000000000000e+00j 2.139081422556e+03+0.000000000000e+00j -2.011916748810e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311362e+00 -3.270970228804e+03+0.000000000000e+00j 3.541150241882e+02+0.000000000000e+00j -3.541150241882e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453633e+00 -2.570858259195e+03+0.000000000000e+00j 4.336803003413e+02+0.000000000000e+00j -4.336803003413e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593151e+00 -3.141814155967e+03+0.000000000000e+00j 2.466222371689e+03+0.000000000000e+00j -2.466222371689e+03+0.000000000000e+00j 1.000000000000e-01 + 4.263904052925e+00 -2.855339344604e+03+0.000000000000e+00j -1.167708252163e+02+0.000000000000e+00j -4.048846605874e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.754226153081e+03+0.000000000000e+00j 2.133281238368e+03+0.000000000000e+00j 1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -2.292540364991e+03+0.000000000000e+00j 1.815457579596e+03+0.000000000000e+00j -1.439197506317e+03+0.000000000000e+00j 1.000000000000e-01 + 4.916570700375e+00 -2.658278854984e+03+0.000000000000e+00j 5.517436734322e+01+0.000000000000e+00j -5.721982093269e-14+0.000000000000e+00j 1.000000000000e-01 + 6.716886976968e+00 -2.244897517883e+03+0.000000000000e+00j 2.407984538050e+03+0.000000000000e+00j 3.584877262922e-15+0.000000000000e+00j 1.000000000000e-01 + 8.977333823245e+00 -9.608585950775e+02+0.000000000000e+00j 6.727877776973e+02+0.000000000000e+00j -6.332193219660e-15+0.000000000000e+00j 1.000000000000e-01 + 5.505235509316e+00 -2.228955124167e+03+0.000000000000e+00j -1.368428955981e+01+0.000000000000e+00j -3.405516824254e+02+0.000000000000e+00j 1.000000000000e-01 + 7.475852473522e+00 -1.737759702183e+03+0.000000000000e+00j 1.664544017651e+03+0.000000000000e+00j -2.155507627743e+03+0.000000000000e+00j 1.000000000000e-01 + 9.291419208920e+00 4.074490724557e+02+0.000000000000e+00j -8.232383415304e+01+0.000000000000e+00j 1.487864010830e+03+0.000000000000e+00j 1.000000000000e-01 + 5.776586016524e+00 -1.436326007856e+03+0.000000000000e+00j 7.962977582707e+00+0.000000000000e+00j -1.222381804899e+03+0.000000000000e+00j 1.000000000000e-01 + 7.343815881317e+00 -9.408488419744e+02+0.000000000000e+00j -2.209454667211e+02+0.000000000000e+00j -2.773373845643e+03+0.000000000000e+00j 1.000000000000e-01 + 9.439946717093e+00 9.265906162360e+02+0.000000000000e+00j -5.737601261161e+01+0.000000000000e+00j 9.858366119327e+02+0.000000000000e+00j 1.000000000000e-01 + 5.593783568941e+00 -4.109790152335e+02+0.000000000000e+00j 2.235944633189e+02+0.000000000000e+00j -2.297162805675e+03+0.000000000000e+00j 1.000000000000e-01 + 6.610436401501e+00 -3.866751154283e+02+0.000000000000e+00j -1.651408145566e+03+0.000000000000e+00j -2.349960447274e+03+0.000000000000e+00j 1.000000000000e-01 + 9.215542089457e+00 7.231958063081e+02+0.000000000000e+00j -3.249726472726e+02+0.000000000000e+00j -8.193662174822e+02+0.000000000000e+00j 1.000000000000e-01 + 5.039750608588e+00 5.505005122289e-14+0.000000000000e+00j 3.958756311590e+02+0.000000000000e+00j -2.901107133229e+03+0.000000000000e+00j 1.000000000000e-01 + 5.634657072972e+00 9.283214440852e-14+0.000000000000e+00j -1.768140685530e+03+0.000000000000e+00j -2.455785279109e+03+0.000000000000e+00j 1.000000000000e-01 + 8.540004271330e+00 7.602781419221e-14+0.000000000000e+00j -9.018856377877e+02+0.000000000000e+00j -2.557589353128e+03+0.000000000000e+00j 1.000000000000e-01 + 4.486945257151e+00 -6.887815764670e+01+0.000000000000e+00j -6.887815764670e+01+0.000000000000e+00j -2.849906817857e+03+0.000000000000e+00j 1.000000000000e-01 + 4.560899924455e+00 -2.907876484991e+02+0.000000000000e+00j -2.907876484991e+02+0.000000000000e+00j -3.298255165069e+03+0.000000000000e+00j 1.000000000000e-01 + 7.614210452509e+00 -1.173822321991e+03+0.000000000000e+00j -1.173822321991e+03+0.000000000000e+00j -3.703285199880e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 2.477472180376e+02+0.000000000000e+00j 6.602848560321e-13+0.000000000000e+00j -3.326019148224e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 -2.070280719288e+03+0.000000000000e+00j 6.572462202677e-13+0.000000000000e+00j -3.069970706092e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 -2.511191789093e+03+0.000000000000e+00j 8.343416179370e-13+0.000000000000e+00j -3.909325828783e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422196e+00 -1.677827869086e+03+0.000000000000e+00j 8.010663469824e+02+0.000000000000e+00j -1.677827869086e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719796e+00 -2.675742073388e+03+0.000000000000e+00j -1.061468362377e+03+0.000000000000e+00j -2.675742073388e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523474e+00 -3.295829288950e+03+0.000000000000e+00j 1.982424451074e+03+0.000000000000e+00j -3.295829288950e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564471e+00 -3.621818540516e+03+0.000000000000e+00j 1.906161083910e+02+0.000000000000e+00j -1.906161083910e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219270e+00 -3.298148639035e+03+0.000000000000e+00j 4.960658211669e+02+0.000000000000e+00j -4.960658211669e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578738e+00 -4.812325680570e+03+0.000000000000e+00j 2.410990334891e+03+0.000000000000e+00j -2.410990334891e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404215e+00 -3.326019148229e+03+0.000000000000e+00j -2.477472180394e+02+0.000000000000e+00j -7.855630556088e-14+0.000000000000e+00j 1.000000000000e-01 + 4.243219049921e+00 -3.069970706102e+03+0.000000000000e+00j 2.070280719288e+03+0.000000000000e+00j -2.197456241457e-14+0.000000000000e+00j 1.000000000000e-01 + 6.923490615381e+00 -3.909325828790e+03+0.000000000000e+00j 2.511191789093e+03+0.000000000000e+00j -3.073291132662e-14+0.000000000000e+00j 1.000000000000e-01 + 4.263904052922e+00 -2.855339344597e+03+0.000000000000e+00j -1.167708252121e+02+0.000000000000e+00j 4.048846605795e+02+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -2.754226153082e+03+0.000000000000e+00j 2.133281238364e+03+0.000000000000e+00j -1.271754473743e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104501e+00 -2.292540364990e+03+0.000000000000e+00j 1.815457579598e+03+0.000000000000e+00j 1.439197506316e+03+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.107875696041e+03+0.000000000000e+00j -1.347963952064e+02+0.000000000000e+00j -2.473510678253e+01+0.000000000000e+00j 1.000000000000e-01 + 6.010566531751e+00 -2.537027099992e+03+0.000000000000e+00j 1.383957859744e+03+0.000000000000e+00j -2.100426273090e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778909e+00 -5.951882676210e+02+0.000000000000e+00j 9.430387165139e+02+0.000000000000e+00j 1.600399579637e+03+0.000000000000e+00j 1.000000000000e-01 + 5.164686236686e+00 -1.029630366773e+03+0.000000000000e+00j 2.274024116701e-13+0.000000000000e+00j -1.029630366773e+03+0.000000000000e+00j 1.000000000000e-01 + 6.235121845301e+00 -2.417747879248e+03+0.000000000000e+00j 5.339796846459e-13+0.000000000000e+00j -2.417747879248e+03+0.000000000000e+00j 1.000000000000e-01 + 9.937237592375e+00 8.075401156421e+02+0.000000000000e+00j -1.783519365238e-13+0.000000000000e+00j 8.075401156421e+02+0.000000000000e+00j 1.000000000000e-01 + 4.914890457917e+00 -2.473510677568e+01+0.000000000000e+00j 1.347963952067e+02+0.000000000000e+00j -2.107875696041e+03+0.000000000000e+00j 1.000000000000e-01 + 6.010566531749e+00 -2.100426273078e+03+0.000000000000e+00j -1.383957859722e+03+0.000000000000e+00j -2.537027100001e+03+0.000000000000e+00j 1.000000000000e-01 + 9.541620778908e+00 1.600399579641e+03+0.000000000000e+00j -9.430387165091e+02+0.000000000000e+00j -5.951882676219e+02+0.000000000000e+00j 1.000000000000e-01 + 4.263904052919e+00 4.048846605891e+02+0.000000000000e+00j 1.167708252139e+02+0.000000000000e+00j -2.855339344599e+03+0.000000000000e+00j 1.000000000000e-01 + 5.335903049381e+00 -1.271754473744e+03+0.000000000000e+00j -2.133281238353e+03+0.000000000000e+00j -2.754226153072e+03+0.000000000000e+00j 1.000000000000e-01 + 8.444634104502e+00 1.439197506310e+03+0.000000000000e+00j -1.815457579590e+03+0.000000000000e+00j -2.292540364986e+03+0.000000000000e+00j 1.000000000000e-01 + 3.463865404212e+00 6.764357585006e-14+0.000000000000e+00j 2.477472180376e+02+0.000000000000e+00j -3.326019148224e+03+0.000000000000e+00j 1.000000000000e-01 + 4.243219049925e+00 1.129703471491e-13+0.000000000000e+00j -2.070280719288e+03+0.000000000000e+00j -3.069970706092e+03+0.000000000000e+00j 1.000000000000e-01 + 6.923490615388e+00 1.411070412072e-13+0.000000000000e+00j -2.511191789093e+03+0.000000000000e+00j -3.909325828783e+03+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 -1.906161083847e+02+0.000000000000e+00j -1.906161083847e+02+0.000000000000e+00j -3.621818540520e+03+0.000000000000e+00j 1.000000000000e-01 + 2.943192219265e+00 -4.960658211791e+02+0.000000000000e+00j -4.960658211791e+02+0.000000000000e+00j -3.298148639026e+03+0.000000000000e+00j 1.000000000000e-01 + 5.473356578749e+00 -2.410990334911e+03+0.000000000000e+00j -2.410990334911e+03+0.000000000000e+00j -4.812325680560e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828350e+00 -1.952274616239e+03+0.000000000000e+00j 4.323340486481e-13+0.000000000000e+00j -1.952274616239e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289319e+00 -2.793069604590e+03+0.000000000000e+00j 6.185293197299e-13+0.000000000000e+00j -2.793069604590e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887363e+00 -4.353221992374e+03+0.000000000000e+00j 9.640273314895e-13+0.000000000000e+00j -4.353221992374e+03+0.000000000000e+00j 1.000000000000e-01 + 1.902801678772e+00 -3.766177783539e+03+0.000000000000e+00j 7.829406600922e-14+0.000000000000e+00j -8.278577344986e-14+0.000000000000e+00j 1.000000000000e-01 + 1.902801678779e+00 -3.766177783499e+03+0.000000000000e+00j 7.829406600812e-14+0.000000000000e+00j -8.278577344905e-14+0.000000000000e+00j 1.000000000000e-01 + 3.287661494877e+00 -6.344297103151e+03+0.000000000000e+00j 1.318899013062e-13+0.000000000000e+00j -1.394563859887e-13+0.000000000000e+00j 1.000000000000e-01 + 2.813289564476e+00 -3.621818540528e+03+0.000000000000e+00j 1.906161083809e+02+0.000000000000e+00j 1.906161083809e+02+0.000000000000e+00j 1.000000000000e-01 + 2.943192219261e+00 -3.298148639030e+03+0.000000000000e+00j 4.960658211723e+02+0.000000000000e+00j 4.960658211723e+02+0.000000000000e+00j 1.000000000000e-01 + 5.473356578736e+00 -4.812325680568e+03+0.000000000000e+00j 2.410990334894e+03+0.000000000000e+00j 2.410990334894e+03+0.000000000000e+00j 1.000000000000e-01 + 3.826767311364e+00 -3.270970228804e+03+0.000000000000e+00j 3.541150241791e+02+0.000000000000e+00j 3.541150241791e+02+0.000000000000e+00j 1.000000000000e-01 + 3.917080453628e+00 -2.570858259196e+03+0.000000000000e+00j 4.336803003526e+02+0.000000000000e+00j 4.336803003526e+02+0.000000000000e+00j 1.000000000000e-01 + 7.704051593150e+00 -3.141814155966e+03+0.000000000000e+00j 2.466222371691e+03+0.000000000000e+00j 2.466222371691e+03+0.000000000000e+00j 1.000000000000e-01 + 4.588935700616e+00 -1.693883617055e+03+0.000000000000e+00j 1.089702534022e+02+0.000000000000e+00j 1.089702534022e+02+0.000000000000e+00j 1.000000000000e-01 + 4.696452605921e+00 -2.983841276854e+03+0.000000000000e+00j -3.331454319420e+01+0.000000000000e+00j -3.331454319420e+01+0.000000000000e+00j 1.000000000000e-01 + 9.352183072665e+00 -1.492388034645e+03+0.000000000000e+00j 1.792515640355e+03+0.000000000000e+00j 1.792515640355e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835801181326e+00 -7.484369549179e+02+0.000000000000e+00j -3.449549636286e+02+0.000000000000e+00j -3.449549636286e+02+0.000000000000e+00j 1.000000000000e-01 + 5.217046658484e+00 -2.663991119428e+03+0.000000000000e+00j -7.252539022881e+02+0.000000000000e+00j -7.252539022881e+02+0.000000000000e+00j 1.000000000000e-01 + 1.015180741472e+01 7.537749370039e+01+0.000000000000e+00j 6.906934192903e+02+0.000000000000e+00j 6.906934192903e+02+0.000000000000e+00j 1.000000000000e-01 + 4.619612844972e+00 1.095902598382e+02+0.000000000000e+00j -8.326275941940e+02+0.000000000000e+00j -8.326275941940e+02+0.000000000000e+00j 1.000000000000e-01 + 5.272390649676e+00 -2.246901195613e+03+0.000000000000e+00j -1.515634023269e+03+0.000000000000e+00j -1.515634023269e+03+0.000000000000e+00j 1.000000000000e-01 + 9.982760751927e+00 1.373374188795e+03+0.000000000000e+00j -6.390435888739e+02+0.000000000000e+00j -6.390435888739e+02+0.000000000000e+00j 1.000000000000e-01 + 3.985925953784e+00 6.948254471798e+02+0.000000000000e+00j -1.287469747221e+03+0.000000000000e+00j -1.287469747221e+03+0.000000000000e+00j 1.000000000000e-01 + 4.835069351289e+00 -1.725508655145e+03+0.000000000000e+00j -2.218454428366e+03+0.000000000000e+00j -2.218454428366e+03+0.000000000000e+00j 1.000000000000e-01 + 8.876999594722e+00 2.139081422556e+03+0.000000000000e+00j -2.011916748810e+03+0.000000000000e+00j -2.011916748810e+03+0.000000000000e+00j 1.000000000000e-01 + 3.051886422196e+00 8.010663469824e+02+0.000000000000e+00j -1.677827869086e+03+0.000000000000e+00j -1.677827869086e+03+0.000000000000e+00j 1.000000000000e-01 + 3.960715719796e+00 -1.061468362377e+03+0.000000000000e+00j -2.675742073388e+03+0.000000000000e+00j -2.675742073388e+03+0.000000000000e+00j 1.000000000000e-01 + 7.023931523474e+00 1.982424451074e+03+0.000000000000e+00j -3.295829288950e+03+0.000000000000e+00j -3.295829288950e+03+0.000000000000e+00j 1.000000000000e-01 + 2.019196828350e+00 8.582118183317e-14+0.000000000000e+00j -1.952274616239e+03+0.000000000000e+00j -1.952274616239e+03+0.000000000000e+00j 1.000000000000e-01 + 2.737268289319e+00 1.227821805465e-13+0.000000000000e+00j -2.793069604590e+03+0.000000000000e+00j -2.793069604590e+03+0.000000000000e+00j 1.000000000000e-01 + 4.816726887363e+00 1.913658319664e-13+0.000000000000e+00j -4.353221992374e+03+0.000000000000e+00j -4.353221992374e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140995e+00 -1.826703349749e+03+0.000000000000e+00j -1.826703349749e+03+0.000000000000e+00j -1.826703349749e+03+0.000000000000e+00j 1.000000000000e-01 + 1.392251140995e+00 -1.826703349749e+03+0.000000000000e+00j -1.826703349749e+03+0.000000000000e+00j -1.826703349749e+03+0.000000000000e+00j 1.000000000000e-01 + 3.125400227957e+00 -4.091794716334e+03+0.000000000000e+00j -4.091794716334e+03+0.000000000000e+00j -4.091794716334e+03+0.000000000000e+00j 1.000000000000e-01 diff --git a/tests/TestTC/d3_realspace_sym.npy b/tests/TestTC/d3_realspace_sym.npy new file mode 100644 index 00000000..1a7ff029 Binary files /dev/null and b/tests/TestTC/d3_realspace_sym.npy differ diff --git a/tests/TestTC/final_dyn1 b/tests/TestTC/final_dyn1 new file mode 100644 index 00000000..acdc5eb7 --- /dev/null +++ b/tests/TestTC/final_dyn1 @@ -0,0 +1,31 @@ +Dynamical matrix file +File generated with the CellConstructor by Lorenzo Monacelli +1 1 0 1.8897259890000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 +Basis vectors + -0.0000000000000000 2.0214847552276387 2.0214847552276392 + 2.0214847552276387 0.0000000000000000 2.0214847552276387 + 2.0214847552276387 2.0214847552276387 0.0000000000000001 + 1 'Al ' 24592.1687534073353163 + 1 1 0.0000000000000000 0.0000000000000000 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.000000000000 0.000000000000 0.000000000000 ) + + 1 1 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 + + Diagonalizing the dynamical matrix + + q = ( 0.000000000000 0.000000000000 0.000000000000 ) + +*************************************************************************** + freq ( 1) = 0.00000000 [THz] = 0.00000000 [cm-1] +( 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ) + freq ( 2) = 0.00000000 [THz] = 0.00000000 [cm-1] +( 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 ) + freq ( 3) = 0.00000000 [THz] = 0.00000000 [cm-1] +( 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 ) +*************************************************************************** diff --git a/tests/TestTC/final_dyn2 b/tests/TestTC/final_dyn2 new file mode 100644 index 00000000..6526e2df --- /dev/null +++ b/tests/TestTC/final_dyn2 @@ -0,0 +1,130 @@ +Dynamical matrix file +File generated with the CellConstructor by Lorenzo Monacelli +1 1 0 1.8897259890000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 +Basis vectors + -0.0000000000000000 2.0214847552276387 2.0214847552276392 + 2.0214847552276387 0.0000000000000000 2.0214847552276387 + 2.0214847552276387 2.0214847552276387 0.0000000000000001 + 1 'Al ' 24592.1687534073353163 + 1 1 0.0000000000000000 0.0000000000000000 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.164895299097 0.164895299097 0.000000000000 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 0.0525314579783002 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0525314579783003 0.0000000000000000 0.1236150042280424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1637332718535142 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.164895299097 -0.164895299097 0.000000000000 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 0.0525314579783002 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0525314579783003 0.0000000000000000 0.1236150042280424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1637332718535142 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.164895299097 0.164895299097 -0.000000000000 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 -0.0525314579783003 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0525314579783002 0.0000000000000000 0.1236150042280424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1637332718535142 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.164895299097 -0.164895299097 -0.000000000000 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 -0.0525314579783003 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0525314579783002 0.0000000000000000 0.1236150042280424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1637332718535142 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.000000000000 -0.164895299097 0.164895299097 ) + + 1 1 + 0.1637332718535142 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.1236150042280424 0.0000000000000000 -0.0525314579783003 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 -0.0525314579783003 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.000000000000 -0.164895299097 -0.164895299097 ) + + 1 1 + 0.1637332718535142 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.1236150042280423 0.0000000000000000 0.0525314579783002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0525314579783002 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.000000000000 0.164895299097 -0.164895299097 ) + + 1 1 + 0.1637332718535142 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.1236150042280424 0.0000000000000000 -0.0525314579783003 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 -0.0525314579783003 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.000000000000 0.164895299097 0.164895299097 ) + + 1 1 + 0.1637332718535142 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.1236150042280423 0.0000000000000000 0.0525314579783002 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.0525314579783002 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.164895299097 -0.000000000000 0.164895299097 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0525314579783003 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.1637332718535141 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0525314579783003 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.164895299097 0.000000000000 -0.164895299097 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0525314579783002 0.0000000000000000 + -0.0000000000000000 0.0000000000000000 0.1637332718535141 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0525314579783003 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.164895299097 0.000000000000 -0.164895299097 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 0.0000000000000000 0.0000000000000000 -0.0525314579783003 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 0.1637332718535141 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0525314579783003 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.164895299097 -0.000000000000 0.164895299097 ) + + 1 1 + 0.1236150042280424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0525314579783002 0.0000000000000000 + -0.0000000000000000 0.0000000000000000 0.1637332718535141 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0525314579783003 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1236150042280424 0.0000000000000000 + + Diagonalizing the dynamical matrix + + q = ( 0.164895299097 0.164895299097 0.000000000000 ) + +*************************************************************************** + freq ( 1) = 5.59321356 [THz] = 186.56949550 [cm-1] +( 0.707107 0.000000 -0.707107 0.000000 -0.000000 0.000000 ) + freq ( 2) = 8.48878100 [THz] = 283.15521482 [cm-1] +( -0.000000 0.000000 -0.000000 0.000000 -1.000000 0.000000 ) + freq ( 3) = 8.80468497 [THz] = 293.69263565 [cm-1] +( 0.707107 0.000000 0.707107 0.000000 -0.000000 0.000000 ) +*************************************************************************** diff --git a/tests/TestTC/final_dyn3 b/tests/TestTC/final_dyn3 new file mode 100644 index 00000000..2354e31a --- /dev/null +++ b/tests/TestTC/final_dyn3 @@ -0,0 +1,76 @@ +Dynamical matrix file +File generated with the CellConstructor by Lorenzo Monacelli +1 1 0 1.8897259890000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 +Basis vectors + -0.0000000000000000 2.0214847552276387 2.0214847552276392 + 2.0214847552276387 0.0000000000000000 2.0214847552276387 + 2.0214847552276387 2.0214847552276387 0.0000000000000001 + 1 'Al ' 24592.1687534073353163 + 1 1 0.0000000000000000 0.0000000000000000 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.000000000000 -0.000000000000 0.164895299097 ) + + 1 1 + 0.0702206082320731 0.0000000000000000 -0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 + 0.0000000000000000 -0.0000000000000000 0.0702206082320731 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 + -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.1761114605793424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.000000000000 0.000000000000 -0.164895299097 ) + + 1 1 + 0.0702206082320731 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0000000000000000 -0.0000000000000000 0.0702206082320731 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 + -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.1761114605793424 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.164895299097 0.000000000000 -0.000000000000 ) + + 1 1 + 0.1761114605793424 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 + -0.0000000000000000 -0.0000000000000000 0.0702206082320731 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 + -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0702206082320731 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.164895299097 0.000000000000 0.000000000000 ) + + 1 1 + 0.1761114605793424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 + 0.0000000000000000 -0.0000000000000000 0.0702206082320731 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 + -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0000000000000000 0.0702206082320731 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.000000000000 0.164895299097 -0.000000000000 ) + + 1 1 + 0.0702206082320731 0.0000000000000000 -0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 + -0.0000000000000000 0.0000000000000000 0.1761114605793424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + 0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0702206082320731 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.000000000000 -0.164895299097 0.000000000000 ) + + 1 1 + 0.0702206082320731 0.0000000000000000 -0.0000000000000000 0.0000000000000000 -0.0000000000000000 -0.0000000000000000 + 0.0000000000000000 -0.0000000000000000 0.1761114605793424 0.0000000000000000 -0.0000000000000000 0.0000000000000000 + -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 -0.0000000000000000 0.0702206082320731 0.0000000000000000 + + Diagonalizing the dynamical matrix + + q = ( -0.000000000000 -0.000000000000 0.164895299097 ) + +*************************************************************************** + freq ( 1) = 5.55915973 [THz] = 185.43358201 [cm-1] +( 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 ) + freq ( 2) = 5.55915973 [THz] = 185.43358201 [cm-1] +( 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 ) + freq ( 3) = 8.80381015 [THz] = 293.66345473 [cm-1] +( 0.000000 0.000000 0.000000 0.000000 -1.000000 -0.000000 ) +*************************************************************************** diff --git a/tests/TestTC/final_dyn4 b/tests/TestTC/final_dyn4 new file mode 100644 index 00000000..86c6d336 --- /dev/null +++ b/tests/TestTC/final_dyn4 @@ -0,0 +1,94 @@ +Dynamical matrix file +File generated with the CellConstructor by Lorenzo Monacelli +1 1 0 1.8897259890000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 0.0000000000000000 +Basis vectors + -0.0000000000000000 2.0214847552276387 2.0214847552276392 + 2.0214847552276387 0.0000000000000000 2.0214847552276387 + 2.0214847552276387 2.0214847552276387 0.0000000000000001 + 1 'Al ' 24592.1687534073353163 + 1 1 0.0000000000000000 0.0000000000000000 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.082447649549 0.082447649549 0.082447649549 ) + + 1 1 + 0.0841529519773247 0.0000000000000000 0.0479186966612433 0.0000000000000000 0.0479186966612433 -0.0000000000000000 + 0.0479186966612433 -0.0000000000000000 0.0841529519773246 0.0000000000000000 0.0479186966612433 0.0000000000000000 + 0.0479186966612433 0.0000000000000000 0.0479186966612433 -0.0000000000000000 0.0841529519773247 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.082447649549 -0.082447649549 0.082447649549 ) + + 1 1 + 0.0841529519773247 0.0000000000000000 0.0479186966612434 -0.0000000000000000 -0.0479186966612434 0.0000000000000000 + 0.0479186966612434 0.0000000000000000 0.0841529519773247 -0.0000000000000000 -0.0479186966612434 -0.0000000000000000 + -0.0479186966612434 -0.0000000000000000 -0.0479186966612434 0.0000000000000000 0.0841529519773247 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.082447649549 0.082447649549 -0.082447649549 ) + + 1 1 + 0.0841529519773247 0.0000000000000000 -0.0479186966612434 -0.0000000000000000 0.0479186966612434 -0.0000000000000000 + -0.0479186966612434 -0.0000000000000000 0.0841529519773247 -0.0000000000000000 -0.0479186966612434 -0.0000000000000000 + 0.0479186966612434 0.0000000000000000 -0.0479186966612434 -0.0000000000000000 0.0841529519773247 0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.082447649549 -0.082447649549 -0.082447649549 ) + + 1 1 + 0.0841529519773247 -0.0000000000000000 -0.0479186966612433 -0.0000000000000000 -0.0479186966612434 -0.0000000000000000 + -0.0479186966612433 -0.0000000000000000 0.0841529519773247 -0.0000000000000000 0.0479186966612433 0.0000000000000000 + -0.0479186966612434 0.0000000000000000 0.0479186966612433 0.0000000000000000 0.0841529519773247 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.082447649549 0.082447649549 -0.082447649549 ) + + 1 1 + 0.0841529519773247 -0.0000000000000000 0.0479186966612434 0.0000000000000000 -0.0479186966612434 -0.0000000000000000 + 0.0479186966612434 -0.0000000000000000 0.0841529519773247 0.0000000000000000 -0.0479186966612434 0.0000000000000000 + -0.0479186966612434 0.0000000000000000 -0.0479186966612434 -0.0000000000000000 0.0841529519773247 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.082447649549 -0.082447649549 -0.082447649549 ) + + 1 1 + 0.0841529519773247 0.0000000000000000 0.0479186966612433 -0.0000000000000000 0.0479186966612433 0.0000000000000000 + 0.0479186966612433 0.0000000000000000 0.0841529519773246 0.0000000000000000 0.0479186966612433 -0.0000000000000000 + 0.0479186966612433 -0.0000000000000000 0.0479186966612433 0.0000000000000000 0.0841529519773247 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( 0.082447649549 -0.082447649549 0.082447649549 ) + + 1 1 + 0.0841529519773247 -0.0000000000000000 -0.0479186966612434 -0.0000000000000000 0.0479186966612434 0.0000000000000000 + -0.0479186966612434 -0.0000000000000000 0.0841529519773247 -0.0000000000000000 -0.0479186966612434 -0.0000000000000000 + 0.0479186966612434 0.0000000000000000 -0.0479186966612434 0.0000000000000000 0.0841529519773247 -0.0000000000000000 + + Dynamical Matrix in cartesian axes + + q = ( -0.082447649549 0.082447649549 0.082447649549 ) + + 1 1 + 0.0841529519773247 -0.0000000000000000 -0.0479186966612433 -0.0000000000000000 -0.0479186966612434 -0.0000000000000000 + -0.0479186966612433 -0.0000000000000000 0.0841529519773247 0.0000000000000000 0.0479186966612433 -0.0000000000000000 + -0.0479186966612434 -0.0000000000000000 0.0479186966612433 0.0000000000000000 0.0841529519773247 0.0000000000000000 + + Diagonalizing the dynamical matrix + + q = ( 0.082447649549 0.082447649549 0.082447649549 ) + +*************************************************************************** + freq ( 1) = 3.99334222 [THz] = 133.20353924 [cm-1] +( 0.728382 0.000000 -0.683713 0.000000 -0.044669 -0.000000 ) + freq ( 2) = 3.99334222 [THz] = 133.20353924 [cm-1] +( -0.368952 0.000000 -0.446322 0.000000 0.815274 -0.000000 ) + freq ( 3) = 8.90023481 [THz] = 296.87983451 [cm-1] +( 0.577350 0.000000 0.577350 0.000000 0.577350 0.000000 ) +*************************************************************************** diff --git a/tests/TestTC/standard.pkl b/tests/TestTC/standard.pkl new file mode 100644 index 00000000..32278e0e Binary files /dev/null and b/tests/TestTC/standard.pkl differ diff --git a/tests/TestTC/test_tc.py b/tests/TestTC/test_tc.py new file mode 100644 index 00000000..9e794010 --- /dev/null +++ b/tests/TestTC/test_tc.py @@ -0,0 +1,56 @@ +from __future__ import print_function +from __future__ import division + +import numpy as np +import cellconstructor as CC +import cellconstructor.Phonons +import cellconstructor.ForceTensor +import cellconstructor.ThermalConductivity +import sys, os +import time + +def test_tc(): + total_path = os.path.dirname(os.path.abspath(__file__)) + os.chdir(total_path) + + dyn_prefix = 'final_dyn' + nqirr = 4 + + SSCHA_TO_MS = cellconstructor.ThermalConductivity.SSCHA_TO_MS + RY_TO_THZ = cellconstructor.ThermalConductivity.SSCHA_TO_THZ + dyn = CC.Phonons.Phonons(dyn_prefix, nqirr) + + supercell = dyn.GetSupercell() + + fc3 = CC.ForceTensor.Tensor3(dyn.structure, + dyn.structure.generate_supercell(supercell), supercell) + + d3 = np.load("d3_realspace_sym.npy")*2.0 + fc3.SetupFromTensor(d3) + fc3 = CC.ThermalConductivity.centering_fc3(fc3) + + mesh = [10,10,10] + smear = 0.1/RY_TO_THZ + + tc = CC.ThermalConductivity.ThermalConductivity(dyn, fc3, + kpoint_grid = mesh, scattering_grid = mesh, smearing_scale = None, + smearing_type = 'constant', cp_mode = 'quantum', off_diag = True) + + temperatures = np.linspace(200,1200,6,dtype=float) + start_time = time.time() + tc.setup_harmonic_properties(smear) + tc.write_harmonic_properties_to_file() + + tc.calculate_kappa(mode = 'SRTA', temperatures = temperatures, + write_lifetimes = True, gauss_smearing = True, offdiag_mode = 'wigner', + kappa_filename = 'Thermal_conductivity_SRTA', lf_method = 'fortran-P') + + tc1 = CC.ThermalConductivity.load_thermal_conductivity('standard.pkl') + keys = list(tc.kappa.keys()) + keys1 = list(tc.kappa.keys()) + for key in keys: + for key1 in keys1: + if(key == key1): + np.testing.assert_allclose(tc.kappa[key], tc1.kappa[key1], atol = 1.0e-6) +if __name__ == "__main__": + test_tc()