From 869d4fe103c34ee451b74e596192be83ec332c26 Mon Sep 17 00:00:00 2001 From: ayakon Date: Fri, 7 Feb 2025 22:45:27 +0900 Subject: [PATCH 01/16] initial implementation of LDA+U --- src/H_matrix_module.f90 | 495 +++++++++++++++++++++++++++++++++- src/dimens_module.f90 | 61 ++++- src/energy_module.f90 | 39 ++- src/global_module.f90 | 5 + src/initial_read_module.f90 | 136 +++++++++- src/initialisation_module.f90 | 23 +- src/matrix_data_module.f90 | 14 +- src/mult_module.f90 | 301 ++++++++++++++++++++- 8 files changed, 1039 insertions(+), 35 deletions(-) diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index 2b8d8964e..8533c862d 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -86,6 +86,13 @@ module H_matrix_module integer, parameter :: max_locps_type = 5 logical :: flag_dump_locps(max_locps_type) +!!! 2024.05.29 nakata DFT+U + ! DFT+U + integer :: num_plusUproj + integer, dimension(:,:), allocatable :: info_plusUproj + logical, dimension(:), allocatable :: flag_plusUproj_atom + real*8, dimension(:,:), allocatable :: w_plusUproj_pao, half_w_plusUproj_pao +!!! nakata DFT+U end !!*** contains @@ -186,7 +193,8 @@ module H_matrix_module !! Add matK, matX dump !! 2021/07/19 15:46 dave !! Removed writing out of charge density - + !! 2024/05/20 18:30 nakata + !! Added matHplusUatomf, matEplusUatomf, matEplusU and get_plusU_matrix for DFT+U !! SOURCE !! subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & @@ -196,11 +204,13 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & use numbers use matrix_data, only: Hrange, Srange use mult_module, only: matNL, matKE, matH, matK, & + matHplusU, matEplusU, & ! 2024.05.20 nakata DFT+U matrix_scale, matrix_sum, & matrix_product, & matS, matX, matNAatomf, matNA, & matNLatomf, matKEatomf, & matHatomf, matXatomf, & + matHplusUatomf, matEplusUatomf, & ! 2024.05.20 nakata DFT+U AtomF_to_SF_transform, & allocate_temp_matrix, free_temp_matrix, & S_trans, matrix_product_trace @@ -217,6 +227,7 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & IPRINT_TIME_THRES1, & iprint_SC, & flag_perform_cDFT, & + flag_DFTplusU, & ! 2024.05.20 nakata DFT+U area_ops, nspin, nspin_SF, & spin_factor, blips, & flag_analytic_blip_int, & @@ -433,6 +444,25 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & ! end if !****lat>$ +!!! 2024.5.20 nakata DFT+U + if(flag_DFTplusU) then + call get_plusU_matrix + + if (iprint_ops > 4) then + if (nspin == 1) then + call dump_matrix("NHplusU_atomf", matHplusUatomf(1), inode) + else + call dump_matrix("NHplusU_up_atomf", matHplusUatomf(1), inode) + call dump_matrix("NHplusU_dn_atomf", matHplusUatomf(2), inode) + end if + end if + + ! add H(DFT+U) to Hatomf + do spin = 1, nspin + call matrix_sum(one, matHatomf(spin), one, matHplusUatomf(spin)) + enddo + end if +!!! nakata DFT+U end endif ! flag_build_Hatomf ! For PAO-based contracted SFs, atomic functions are PAOs @@ -455,6 +485,12 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & enddo do spin = 1, nspin if (flag_exx) call AtomF_to_SF_transform(matX(spin), matXatomf(spin), spin, Hrange) ! only to output EXX energy + !!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + call AtomF_to_SF_transform(matEplusU(spin), matEplusUatomf(spin), spin, Hrange) ! only to output DFT+U energy + if (iprint_ops > 4) call AtomF_to_SF_transform(matHplusU(spin), matHplusUatomf(spin), spin, Hrange) + endif + !!! nakata DFT+U end call AtomF_to_SF_transform(matH(spin), matHatomf(spin), spin, Hrange) ! total electronic Hamiltonian enddo endif @@ -481,6 +517,14 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & call dump_matrix("NKE_up", matKE(1), inode) call dump_matrix("NKE_dn", matKE(2), inode) end if + if (flag_DFTplusU) then ! 2024.05.20 nakata DFT+U + if (nspin == 1) then + call dump_matrix("NplusU", matHplusU(1), inode) + else + call dump_matrix("NplusU_up", matHplusU(1), inode) + call dump_matrix("NplusU_dn", matHplusU(2), inode) + end if + endif endif ! ! @@ -1938,4 +1982,453 @@ subroutine matrix_scale_diag(matAP, species, n_projectors, l_core, & end subroutine matrix_scale_diag !!*** +!!****f* H_matrix_module/get_plusU_matrix * +!! +!! NAME +!! get_plusU_matrix +!! +!! PURPOSE +!! +!! Getting matHplusUatomf and matEplusUatomf for DFT+U +!! +!! matHplusUatomf: H(DFT+U) = U/2 * (P-2PKP) +!! +!! matEplusUatomf: E(DFT+U) = U/2 * (PK-PKPK) +!! (construct (P-PKP) here, +!! and another K will be multiplied later in sub:get_energy) +!! +!! +!! K = density matrix in atomf +!! P = V * O * W +!! W = < proj(i,m) | pao(j,n) > +!! O = < proj(i,m') | proj(i,m) > +!! V = transpose of W +!! +!! At present, +!! projector functions are assumed to be one of the PAOs of projector atoms, +!! so OW = W. +!! +!! This subroutine is called in sub:get_H_matrix in H_matrix_module.f90. +!! +!! INPUTS +!! +!! USES +!! +!! AUTHOR +!! A.Nakata +!! CREATION DATE +!! 2023/05/01 +!! MODIFICATION HISTORY +!! +!! SOURCE +!! + subroutine get_plusU_matrix + + use datatypes + use numbers + use global_module, ONLY: nspin, id_glob, species_glob, atomf, & + iprint_ops, min_layer, IPRINT_TIME_THRES2 + use GenComms, ONLY: cq_abort, myid, inode, ionode + use group_module, ONLY: parts + use primary_module, ONLY: bundle + use cover_module, ONLY: BCS_parts + use matrix_data, ONLY: mat, halo, aSa_range, aHa_range, PKrange, & + pUa_range, aUp_range, pUp_range, aUa_range + use mult_module, ONLY: mult, allocate_temp_matrix, free_temp_matrix, & + matrix_product, matrix_scale, matrix_transpose, matrix_sum, & + matKatomf, matHplusUatomf, matEplusUatomf, & + aUa_trans, PK_trans, pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP + use timer_module + + implicit none + + ! Local variables + integer :: part, memb, neigh, ist, atom_num, atom_spec, iprim + integer :: gcspart, neigh_global_part, neigh_global_num, neigh_species + real(double) :: dx, dy, dz, r2 + type(cq_timer) :: tmr_l_tmp1 + integer :: spin + integer :: matW, matV, matOW, matPatomf, matPK, matPKP + + + call start_timer(tmr_l_tmp1,WITH_LEVEL) + if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in set_OW' + + ! prepare matrices + matW = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) + matV = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + ! assume OW = W +! matO = allocate_temp_matrix(pUp_range, 0) +! matOW = allocate_temp_matrix(pUa_range, 0) + matOW = matW +! + matPatomf = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) + matPK = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) + ! PKPrange = aHa_range + matPKP = allocate_temp_matrix(aHa_range, 0) +! matTemp = allocate_temp_matrix(aHa_range, 0) +! + if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,i5,A)') myid, ' Zeroing matW, V and OW' + call matrix_scale(zero,matW) + call matrix_scale(zero,matV) +! call matrix_scale(zero,matOW) + call matrix_scale(zero,matPatomf) + if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' Done Zeroing' + + ! make W and OW + iprim = 0 + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(iprint_ops + min_layer>=6.AND.myid==0) write(io_lun,fmt='(6x,"Processor, partition: ",2i7)') myid,part + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms + atom_num = bundle%nm_nodbeg(part)+memb-1 + iprim=iprim+1 + ! Atomic species + atom_spec = bundle%species(atom_num) + if(iprint_ops + min_layer>=6.AND.myid==0) write(io_lun,'(6x,"Processor, atom, spec: ",3i7)') myid,memb,atom_spec + ! If iprim is a DFT+U projector atom + if(flag_plusUproj_atom(atom_spec)) then + do neigh = 1, mat(part,aSa_range)%n_nab(memb) ! Loop over neighbours of atom + ist = mat(part,aSa_range)%i_acc(memb)+neigh-1 + ! Build the distances between atoms - needed for phases + gcspart = BCS_parts%icover_ibeg(mat(part,aSa_range)%i_part(ist))+mat(part,aSa_range)%i_seq(ist)-1 + ! We need to know the species of neighbour + neigh_global_part = BCS_parts%lab_cell(mat(part,aSa_range)%i_part(ist)) + neigh_global_num = id_glob(parts%icell_beg(neigh_global_part)+mat(part,aSa_range)%i_seq(ist)-1) + neigh_species = species_glob(neigh_global_num) + ! Now loop over PAOs + call loop_W(iprim,halo(aSa_range)%i_halo(gcspart),atom_spec,neigh_species,matW) + !! At present, + !! projector functions are assumed to be one of the PAOs of projector atoms, so OW = W. + !! Then skip the calculations of O + !call loop_O_onsite + end do ! neigh + endif ! projector + end do ! memb + end if ! nm_nodgroup > 0 + end do ! part + + ! make OW + ! call make_OW + ! OR + ! OW = matrix_product(matO, matV, matOW, mult(pOp_pWa_pOWa)) + ! for now, matOW = matW + + ! make V = transpose of W + call matrix_transpose(matW, matV) + + ! make P(atomf,atomf) = V(atomf,proj) * OW(proj,atomf) + call matrix_product(matV, matOW, matPatomf, mult(aVp_pOWa_aPa)) + + ! Later P will be changed from PAO-basis to SF-basis + !if (flag_do_SFtransform) then + ! do spin_SF = 1, nspin_SF + ! call AtomF_to_SF_transform(matP(spin_SF), matPatomf, spin_SF, Hrange) ! is it correct to be Hrange? + ! enddo + !endif + + ! H(DFT+U) = U/2 * (P-2PKP) + + do spin = 1, nspin + if (iprint_ops > 4 .and. nspin == 2) then + if (inode == ionode) write (io_lun, '(1x,"For spin = ",i1," :")') spin + end if + call matrix_scale(zero,matPK) + call matrix_scale(zero,matPKP) + + !!! K should be in atomf-basis + call matrix_product(matPatomf, matKatomf(spin), matPK, mult(P_K_PK)) + call matrix_product(matPK, matPatomf, matPKP, mult(PK_P_PKP)) + + ! E(DFT+U) = U/2 * (PK-PKPK), + ! construct (P-PKP) here, and another K will be multiplied later in sub:get_energy + call matrix_scale(zero,matEplusUatomf(spin)) +! call matrix_scale(zero,matTemp) +! call matrix_sum(zero, matTemp, one, matP) +! call matrix_sum(one, matTemp, -one, matPKP) +! call multiply_U(matTemp,matEplusU_atomf(spin),aUa_range) + call matrix_sum_multiply_U(1,matPatomf,matPKP,matEplusUatomf(spin),aHa_range) + ! H(DFT+U) = U/2 * (P-2PKP) + call matrix_scale(zero,matHplusUatomf(spin)) +! call matrix_scale(zero,matTemp) +! call matrix_sum(zero, matTemp, one, matPatomf) +! call matrix_sum(one, matTemp, -two, matPKP(ss)) +! call multiply_U(matTemp,matHplusUatomf(spin),aUa_range) + call matrix_sum_multiply_U(2,matEplusUatomf(spin),matPKP,matHplusUatomf(spin),aHa_range) + + ! OR + ! construct U + ! call matrix_product(matU, matHtemp(spin), matHplusU(spin), mult(???)) + ! + enddo + + call free_temp_matrix(matPKP) + call free_temp_matrix(matPK) + call free_temp_matrix(matPatomf) +! call free_temp_matrix(matOW) + call free_temp_matrix(matV) + call free_temp_matrix(matW) + + call stop_print_timer(tmr_l_tmp1,"get_plusU_matrix",IPRINT_TIME_THRES2) +! + return + end subroutine get_plusU_matrix +!!*** + +!!****f* H_matrix_module/loop_W +!! +!! NAME +!! loop_W +!! +!! PURPOSE +!! Set W = (Proj_atom_i, PAO_atom_j) +!! +!! At present, +!! projector functions are assumed to be one of the PAOs of projector atoms, +!! so OW = W. +!! +!! This subroutine is called in sub:set_OW. +!! +!! AUTHOR +!! A.Nakata +!! CREATION DATE +!! 2023/04/05 +!! MODIFICATION HISTORY +!! +!! SOURCE +!! + subroutine loop_W(iprim, j_in_halo, atom_spec, neigh_species, matW) + + use numbers + use mult_module, ONLY: matSatomf, return_matrix_value_pos, store_matrix_value_pos, matrix_pos + use pao_format + use species_module, ONLY: npao_species + + implicit none + + ! Passed variables + integer, intent(in) :: iprim, j_in_halo, atom_spec, neigh_species, matW + ! Local variables + integer :: wheremat + real(double) :: val_Satomf, val_W + integer :: npao_i, npao_j, pao_i, pao_j + + + npao_i = npao_species(atom_spec) + npao_j = npao_species(neigh_species) + + ! Loop over PAOs on i + do pao_i = 1, npao_i + if (w_plusUproj_pao(atom_spec,pao_i).ne.zero) then ! if pao_i is one of the U projectors of atom_i + ! Loop over PAOs on j + do pao_j = 1, npao_j + wheremat = matrix_pos(matSatomf,iprim,j_in_halo,pao_i,pao_j) + val_Satomf = return_matrix_value_pos(matSatomf,wheremat) + ! We assume the projector functions are simply chosen from PAOs, + ! so OW = W = + val_W = val_Satomf + call store_matrix_value_pos(matW, wheremat,val_W) + enddo ! pao_j + endif ! projetor or not + enddo ! pao_i +! + return + end subroutine loop_W +!!*** + +!!****f* H_matrix_module/multiply_U * +!! +!! NAME +!! multiply_U +!! +!! PURPOSE +!! Multiply U/2 values to (P-PKP) or (P-2PKP) matrix +!! +!! This subroutine is called in sub: +!! +!! INPUTS +!! matP = (P-PKP) or (P-2PKP) +!! matUP = U/2 ((P-PKP) or U/2 (P-2PKP) +!! aPa_range = range of (P-PKP) or (P-2PKP), should be equal to Hrange +!! +!! USES +!! +!! AUTHOR +!! A.Nakata +!! CREATION DATE +!! 2024/05/20 +!! MODIFICATION HISTORY +!! +!! SOURCE +!! + subroutine multiply_U(matP,matUP,aPa_range) + + use datatypes + use numbers + use GenComms, ONLY: cq_abort, myid + use global_module, ONLY: iprint_ops, min_layer + use primary_module, ONLY: bundle + use matrix_data, ONLY: mat + use mult_module, ONLY: mat_p + use pao_format + use timer_module + + implicit none + + ! Passed variables + integer :: matP, matUP, aPa_range + + ! Local variables + integer :: iprim, part, memb, atom_num, atom_spec, npao_i, loc, ipao + + + if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in multiply_U' + +! call start_timer(tmr_std_matrices) + + iprim = 0 + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atom i + iprim = iprim+1 + atom_num = bundle%nm_nodbeg(part)+memb-1 + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom, + ! considering U only for diagonal elements + if(flag_plusUproj_atom(atom_spec)) then + npao_i = mat(part,aPa_range)%ndimi(memb) ! number of PAOs of i + loc = (npao_i - 1) * npao_i + npao_i - 1 + mat(part,aPa_range)%onsite(memb) + if (loc > mat_p(matP)%length) & + call cq_abort("Overflow error in trace: ", loc, mat_p(matP)%length) + do ipao = 1, npao_i + loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aPa_range)%onsite(memb) ! diagonal element + mat_p(matUP)%matrix(loc) = half * w_plusUproj_pao(atom_spec,ipao) * mat_p(matP)%matrix(loc) + end do ! ipao + endif ! flag_plusUproj_atom + enddo ! memb + endif ! bundle + enddo ! part +! +! call stop_timer(tmr_std_matrices) +! + return + end subroutine multiply_U +!!*** + +!!****f* H_matrix_module/matrix_sum_multiply_U * +!! +!! NAME +!! mmatrix_sum_ultiply_U +!! +!! PURPOSE +!! perform calculations of U/2 * (P-PKP) ... calctype=1 +!! or +!! U/2(P-PKP) - U/2(PKP) = U/2 (P-2PKP) ... calctype=2 +!! +!! This subroutine is called in sub: +!! +!! INPUTS +!! matA = P ... calctype=1 +!! or +!! U/2(P-PKP) ... calctype=2 +!! matB = PKP +!! matC = U/2(P-PKP) ... calctype=1 +!! or +!! U/2(P-2PKP) ... calctype=2 +!! aCa_range = range of (P-PKP) or (P-2PKP), should be equal to Hrange +!! +!! USES +!! +!! AUTHOR +!! A.Nakata +!! CREATION DATE +!! 2024/05/20 +!! MODIFICATION HISTORY +!! +!! SOURCE +!! + subroutine matrix_sum_multiply_U(calctype,matA,matB,matC,aCa_range) + + use datatypes + use numbers + use GenComms, ONLY: cq_abort, myid + use global_module, ONLY: iprint_ops, min_layer + use primary_module, ONLY: bundle + use matrix_data, ONLY: mat + use mult_module, ONLY: mat_p + use pao_format + use timer_module + + implicit none + + ! Passed variables + integer :: calctype, matA, matB, matC, aCa_range + + ! Local variables + integer :: iprim, part, memb, atom_num, atom_spec, npao_i, loc, ipao + real(double) :: val + + + if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in matrix_sum_multiply_U' + +! call start_timer(tmr_std_matrices) + + iprim = 0 + + ! type 1: matA = P, matB = PKP, matC = U/2(P-PKP) + if (calctype.eq.1) then + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atom i + iprim = iprim+1 + atom_num = bundle%nm_nodbeg(part)+memb-1 + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom, + ! considering U only for diagonal elements + if(flag_plusUproj_atom(atom_spec)) then + npao_i = mat(part,aCa_range)%ndimi(memb) ! number of PAOs of i + loc = (npao_i - 1) * npao_i + npao_i - 1 + mat(part,aCa_range)%onsite(memb) + !if (loc > mat_p(matC)%length) & + ! call cq_abort("Overflow error in trace: ", loc, mat_p(matC)%length) + do ipao = 1, npao_i + loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) ! position of diagonal element + val = mat_p(matA)%matrix(loc) - mat_p(matB)%matrix(loc) ! P-PKP + mat_p(matC)%matrix(loc) = half_w_plusUproj_pao(atom_spec,ipao) * val ! U/2*(P-PKP) + end do ! ipao + endif ! flag_plusUproj_atom + enddo ! memb + endif ! bundle + enddo ! part + ! type 2: matA = U/2(P-PKP), matB = PKP, matC = U/2(P-PKP) - U/2(PKP) = U/2(P-2PKP) + else if (calctype.eq.2) then + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atom i + iprim = iprim+1 + atom_num = bundle%nm_nodbeg(part)+memb-1 + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom, + ! considering U only for diagonal elements + if(flag_plusUproj_atom(atom_spec)) then + npao_i = mat(part,aCa_range)%ndimi(memb) ! number of PAOs of i + loc = (npao_i - 1) * npao_i + npao_i - 1 + mat(part,aCa_range)%onsite(memb) + !if (loc > mat_p(matC)%length) & + ! call cq_abort("Overflow error in trace: ", loc, mat_p(matC)%length) + do ipao = 1, npao_i + loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) + mat_p(matC)%matrix(loc) = mat_p(matA)%matrix(loc) & ! U/2(P-PKP) + -half_w_plusUproj_pao(atom_spec,ipao) * mat_p(matB)%matrix(loc) ! -U/2(PKP) + end do ! ipao + endif ! flag_plusUproj_atom + enddo ! memb + endif ! bundle + enddo ! part + endif ! calctype +! +! call stop_timer(tmr_std_matrices) +! + return + end subroutine matrix_sum_multiply_U +!!*** + end module H_matrix_module diff --git a/src/dimens_module.f90 b/src/dimens_module.f90 index 467488d91..bec3b6384 100644 --- a/src/dimens_module.f90 +++ b/src/dimens_module.f90 @@ -42,6 +42,8 @@ !! Commented out some tricks used in MD & structure optimisation !! 2016/09/16 16:00 nakata !! Added variables for PAO-based matrices and multi-site SFs +!! 2024/05/28 17:00 nakata +!! Added variables (r_plusU and RadiusPlusUproj) for DFT+U !! SOURCE module dimens @@ -55,7 +57,7 @@ module dimens real(double) :: r_super_x, r_super_y, r_super_z, volume real(double) :: r_super_x_squared, r_super_y_squared, r_super_z_squared - real(double) :: r_s, r_h, r_c, r_nl, r_core_squared, r_dft_d2, r_exx, r_exxs + real(double) :: r_s, r_h, r_c, r_nl, r_core_squared, r_dft_d2, r_exx, r_exxs, r_plusU ! 2024.05.20 nakata DFT+U1 real(double) :: r_s_atomf, r_h_atomf, r_MS, r_LD real(double) :: grid_point_volume, one_over_grid_point_volume real(double) :: support_grid_volume @@ -67,6 +69,7 @@ module dimens real(double), allocatable, dimension(:) :: RadiusSupport, RadiusAtomf, & RadiusMS, RadiusLD, & + RadiusPlusUproj, & ! 2024.05.20 nakata DFT+U NonLocalFactor, InvSRange integer, allocatable, dimension(:) :: atomicnum @@ -161,6 +164,9 @@ module dimens !! flag_MDold was removed. !! 2019/12/02 15:17 dave !! Added checks to round RadiusAtomf and RadiusSupport to safe value (including grid points) +!! 2024/05/22 14:40 nakata +!! Introduced flag_DFTplusU +!! Added r_plusU, r_plusUproj, PKrange, pUa_range, aUp_range, pUp_range and aUa_range for DFT+U !! 2024/07/18 14:18 lionel !! Check consistency of Xrange wrt r_exx read from input !! SOURCE @@ -171,7 +177,8 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ use numbers use matrix_data use GenComms, only: cq_abort, cq_warn - use global_module, only: iprint_init, atomf, sf, flag_Multisite, flag_exx, flag_diagonalisation + use global_module, only: iprint_init, atomf, sf, flag_Multisite, flag_exx, flag_diagonalisation, & + flag_DFTplusU !!! 2024.05.20 nakata DFT+U use block_module, only: in_block_x, in_block_y, in_block_z, n_pts_in_block use pseudopotential_common, only: pseudo_type, OLDPS, SIESTA, ABINIT, flag_neutral_atom_projector @@ -187,7 +194,7 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ character(len=80) :: sub_name = "set_dimensions" type(cq_timer) :: backtrace_timer integer :: n, mx_matrices_tmp - real(double) :: r_core, r_t, rcutmax, max_grid + real(double) :: r_core, r_t, r_plusUproj, rcutmax, max_grid ! 2024.05.20 nakata DFT+U !****lat<$ call start_backtrace(t=backtrace_timer,who='set_dimensions',where=9,level=2) @@ -220,6 +227,21 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ else mx_matrices_tmp = 19 end if +!!! 2024.05.20 nakata DFT+U + if(flag_DFTplusU) then + PKrange = mx_matrices_tmp + 1 +! pUa_range = mx_matrices_tmp + 2 +! aUp_range = mx_matrices_tmp + 3 +! pUp_range = mx_matrices_tmp + 4 +! aUa_range = mx_matrices_tmp + 5 + pUa_range = aSa_range + aUp_range = aSa_range + pUp_range = aSa_range + aUa_range = aSa_range +! mx_matrices_tmp = mx_matrices_tmp + 5 + mx_matrices_tmp = mx_matrices_tmp + 1 + end if +!!! nakata DFT+U end else aSa_range = 20 aHa_range = 21 @@ -239,6 +261,21 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ else mx_matrices_tmp = 30 end if +!!! 2024.05.20 nakata DFT+U + if(flag_DFTplusU) then + PKrange = mx_matrices_tmp + 1 +! pUa_range = mx_matrices_tmp + 2 +! aUp_range = mx_matrices_tmp + 3 +! pUp_range = mx_matrices_tmp + 4 +! aUa_range = mx_matrices_tmp + 5 + pUa_range = aSa_range + aUp_range = aSa_range + pUp_range = aSa_range + aUa_range = aSa_range +! mx_matrices_tmp = mx_matrices_tmp + 5 ! = maximally 37 + mx_matrices_tmp = mx_matrices_tmp + 1 + end if +!!! nakata DFT+U end endif !n_my_grid_points = n_pts_in_block * n_blocks @@ -262,6 +299,7 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ r_h_atomf = zero r_MS = zero r_LD = zero + r_plusUproj = zero ! 2024.05.20 nakata DFT+U do n=1, n_species ! Round the atom function radius to the nearest multiple of the largest grid spacing ! (add one to account for displacement relative to grid point) @@ -274,6 +312,8 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ r_h_atomf = max(r_h_atomf,RadiusAtomf(n)) r_MS = max(r_MS,RadiusMS(n)) r_LD = max(r_LD,RadiusLD(n)) + ! r_plusUproj = max(r_plusUproj,RadiusPlusUproj(n)) ! 2024.05.20 nakata DFT+U + r_plusUproj = max(r_plusUproj,r_h_atomf) ! assumed to be the same as PAO radius at present ! 2024.05.20 nakata DFT+U end do if(non_local.and.(inode==ionode).and.iprint_init>0) then write(io_lun,2) r_core @@ -378,6 +418,21 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ mat_name(aNArange) = "aNA" mat_name(NAarange) = "NAa" end if +!!! 2024.05.20 nakata DFT+U +! Now all of pUa_range, pUp_range, aUp_range, aUp_range are set to be aSa_range + if (flag_DFTplusU) then + rcut(PKrange) = (r_plusU) +! rcut(pUa_range) = r_plusUproj + r_s_atomf ! for W +! rcut(pUp_range) = r_plusUproj + r_plusUproj ! for O +! rcut(aUp_range) = rcut(pUa_range) ! for V +! rcut(aUa_range) = rcut(aUa_range) ! for P + mat_name(PKrange) = "PK" +! mat_name(pUa_range) = "pUa" +! mat_name(aUp_range) = "aUp" +! mat_name(pUp_range) = "pUp" +! mat_name(aUa_range) = "aUa" + end if +!!! nakata DFT+U end rcutmax = zero do n=1,mx_matrices_tmp if(rcut(n)>rcutmax) then diff --git a/src/energy_module.f90 b/src/energy_module.f90 index 13868d082..441aee9e4 100644 --- a/src/energy_module.f90 +++ b/src/energy_module.f90 @@ -46,6 +46,8 @@ !! Remove check_DFT !! 2022/06/09 12:29 dave !! Moved disp_energy here from DFT-D2 module +!! 2024/05/21 00:00 nakata +!! Added plusU_energy for DFT+U !! SOURCE !! module energy @@ -74,6 +76,7 @@ module energy real(double) :: kinetic_energy real(double) :: cdft_energy real(double) :: exx_energy + real(double) :: plusU_energy ! 2024.05.20 nakata DFT+U real(double) :: x_energy real(double) :: disp_energy real(double) :: delta_E_hartree @@ -147,6 +150,8 @@ module energy !! 2021/07/28 10:55 dave !! Change behaviour to print Harris etc always, and DFT only if !! printDFT = T + !! 2024/05/21 00:00 nakata + !! Added DFT+U energy if flag_DFTplusU = T !! SOURCE !! subroutine get_energy(total_energy, printDFT, level) @@ -155,7 +160,7 @@ subroutine get_energy(total_energy, printDFT, level) use numbers use units use mult_module, only: matrix_product_trace, matH, & - matK, matKE, matNL, matX, matNA + matK, matKE, matNL, matX, matNA, matEplusU ! 2024.05.20 nakata DFT+U use GenComms, only: inode, ionode, cq_warn use global_module, only: iprint_gen, nspin, spin_factor, & flag_SpinDependentSF, & @@ -165,7 +170,8 @@ subroutine get_energy(total_energy, printDFT, level) flag_perform_cdft, & flag_vdWDFT, & flag_exx, exx_alpha, & - flag_neutral_atom, min_layer + flag_neutral_atom, min_layer, & + flag_DFTplusU ! 2024.05.20 nakata DFT+U use pseudopotential_common, only: core_correction, & flag_neutral_atom_projector use density_module, only: electron_number @@ -211,6 +217,7 @@ subroutine get_energy(total_energy, printDFT, level) kinetic_energy = zero if(flag_neutral_atom_projector) local_ps_energy = zero exx_energy = zero + plusU_energy = zero ! 2024.05.20 nakata DFT+U spin_SF = 1 do spin = 1, nspin if (flag_SpinDependentSF) spin_SF = spin @@ -225,6 +232,10 @@ subroutine get_energy(total_energy, printDFT, level) matrix_product_trace(matK(spin), matKE(spin_SF)) exx_energy = exx_energy - spin_factor * half * exx_alpha * & matrix_product_trace(matK(spin), matX(spin)) +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) plusU_energy = plusU_energy + spin_factor * & + matrix_product_trace(matK(spin), matEplusU(spin)) ! (P-PKP)K = K(P-KPKP) ?? correct? +!!! nakata DFT+U end do ! Find exx energy @@ -296,6 +307,11 @@ subroutine get_energy(total_energy, printDFT, level) en_conv*cdft_energy, en_units(energy_units) if (flag_dft_d2) write (io_lun,17) en_conv*disp_energy, en_units(energy_units) + !!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) write (io_lun,& + '(10x,"plusU Energy, 2Tr[K(P-PKP)] : ",f25.15," ",a2)')& + en_conv*plusU_energy, en_units(energy_units) + !!! nakata DFT+U end end if if (abs(entropy) >= RD_ERR) then @@ -356,6 +372,7 @@ subroutine get_energy(total_energy, printDFT, level) end if if (flag_perform_cdft) total_energy2 = total_energy2 + cdft_energy if (flag_dft_d2) total_energy2 = total_energy2 + disp_energy + if (flag_DFTplusU) total_energy2 = total_energy2 + plusU_energy ! 2024.05.20 nakata DFT+U if (inode == ionode .and. iprint_gen + min_layer>=2) then write(io_lun,13) en_conv*total_energy2, en_units(energy_units) @@ -451,6 +468,8 @@ end subroutine get_energy !! nkp must to be passed to avoid circular dependency !! 2023/01/10 18:44 lionel !! Secure ASE printing when using ordern + !! 2024/05/21 00:00 nakata + !! Added DFT+U energy if flag_DFTplusU = T !! SOURCE !! subroutine final_energy(nkp,level) @@ -462,7 +481,7 @@ subroutine final_energy(nkp,level) use mult_module, only: matrix_product_trace, matH, & matrix_product_trace_length, & matrix_trace, & - matK, matKE, matNL, matX, matS, matNA + matK, matKE, matNL, matX, matS, matNA, matEplusU ! 2024.05.20 nakata DFT+U use global_module, only: iprint_gen, nspin, spin_factor, & flag_SpinDependentSF, & @@ -473,6 +492,7 @@ subroutine final_energy(nkp,level) flag_vdWDFT, & flag_exx, exx_alpha, & flag_neutral_atom, min_layer, & + flag_DFTplusU, & ! 2024.05.20 nakata DFT+U flag_fix_spin_population, & io_ase, write_ase, ase_file, & flag_diagonalisation @@ -519,6 +539,7 @@ subroutine final_energy(nkp,level) kinetic_energy = zero if(flag_neutral_atom_projector) local_ps_energy = zero exx_energy = zero + plusU_energy = zero ! 2024.05.20 nakata DFT+U one_electron_energy = zero potential_energy = zero total_energy1 = zero @@ -543,6 +564,9 @@ subroutine final_energy(nkp,level) ! -alpha*Tr[K X] exx_energy = exx_energy & - spin_factor*half*exx_alpha*matrix_product_trace(matK(spin), matX(spin)) + ! U/2*Tr[K (P-PKP)] ! 2024.05.20 nakata DFT+U + plusU_energy = plusU_energy & + - spin_factor*matrix_product_trace(matK(spin), matEplusU(spin)) end do ! Find total pure DFT energy @@ -655,6 +679,8 @@ subroutine final_energy(nkp,level) write (io_lun,17) en_conv*disp_energy,en_units(energy_units) if (flag_perform_cdft) & write (io_lun,18) en_conv*cdft_energy,en_units(energy_units) + if (flag_DFTplusU) & ! 2024.05.20 nakata DFT+U + write (io_lun,181) en_conv*plusU_energy,en_units(energy_units) write (io_lun, 2) end if end if @@ -715,7 +741,8 @@ subroutine final_energy(nkp,level) local_ps_energy + & nl_energy + & kinetic_energy + & - screened_ion_interaction_energy + screened_ion_interaction_energy + & + plusU_energy ! 2024.05.20 nakata DFT+U else total_energy2 = hartree_energy_total_rho + & xc_energy + & @@ -724,7 +751,8 @@ subroutine final_energy(nkp,level) nl_energy + & kinetic_energy + & core_correction + & - ion_interaction_energy + ion_interaction_energy + & + plusU_energy ! 2024.05.20 nakata DFT+U end if if (flag_perform_cdft) total_energy2 = total_energy2 + cdft_energy if (flag_dft_d2) total_energy2 = total_energy2 + disp_energy @@ -870,6 +898,7 @@ subroutine final_energy(nkp,level) 16 format(6x,'| GS Energy with kT -> 0 = ',f25.15,' ',a2) 17 format(6x,'| Dispersion (DFT-D2) = ',f25.15,' ',a2) 18 format(6x,'| cDFT Energy as 2Tr[K.W] = ',f25.15,' ',a2) +181 format(6x,'| DFT+U Energy = ',f25.15,' ',a2) ! 2024.05.20 nakata DFT+U 19 format(6x,'| Number of e- spin up = ',f25.15) 20 format(6x,'| Number of e- spin down = ',f25.15) 21 format(6x,'| Spin pol. as (up - down) = ',f25.15) diff --git a/src/global_module.f90 b/src/global_module.f90 index 3b521481e..35f878024 100644 --- a/src/global_module.f90 +++ b/src/global_module.f90 @@ -159,6 +159,8 @@ !! Added ASE output unit !! 2023/01/12 17:11 dave !! Variables for polarisation calculation +!! 2024/05/29 17:40 nakata +!! Added DFT+U flag !! SOURCE !! module global_module @@ -424,5 +426,8 @@ module global_module integer :: i_pol_dir_st, i_pol_dir_end ! Either 1,1 or 1,3 integer, dimension(3) :: i_pol_dir ! Either n,0,0 or 1,2,3 + ! DFT+U + logical :: flag_DFTplusU + end module global_module !!*** diff --git a/src/initial_read_module.f90 b/src/initial_read_module.f90 index a040e71b8..845d73ca5 100644 --- a/src/initial_read_module.f90 +++ b/src/initial_read_module.f90 @@ -805,6 +805,8 @@ end subroutine read_and_write !! Added ASE output file setup ; default is F !! 2022/12/14 10:01 dave and tsuyoshi !! Update test for solution method (diagon vs ordern) following issue #47 + !! 2024/05/22 14:40 nakata + !! Added DFT+U related input and output !! 2024/12/03 lionel !! Added grid specification of EXX coarse/standard/fine !! TODO @@ -864,6 +866,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_write_DOS, flag_write_projected_DOS, & E_wf_min, E_wf_max, flag_wf_range_Ef, & mx_temp_matrices, flag_neutral_atom, flag_diagonalisation, & + flag_DFTplusU, & ! 2024.05.20 nakata DFT+U flag_SpinDependentSF, flag_Multisite, flag_LFD, flag_SFcoeffReuse, & flag_opt_cell, cell_constraint_flag, flag_variable_cell, & cell_en_tol, optcell_method, cell_stress_tol, & @@ -871,8 +874,12 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_atomic_stress, flag_heat_flux, flag_DumpMatrices, flag_calc_pol, flag_do_pol_calc, & i_pol_dir, i_pol_dir_st, i_pol_dir_end use dimens, only: GridCutoff, & - n_grid_x, n_grid_y, n_grid_z, r_c, & - RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, & +!!! 2024.05.20 nakata DFT+U +! n_grid_x, n_grid_y, n_grid_z, r_c, & +! RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, & + n_grid_x, n_grid_y, n_grid_z, r_c, r_plusU, & + RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, RadiusPlusUproj, & +!!! nakata DFT+U end NonLocalFactor, InvSRange, & min_blip_sp, flag_buffer_old, AtomMove_buffer, & r_dft_d2, r_exx, r_exxs @@ -881,7 +888,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& use species_module, only: species_label, charge, mass, n_species, & charge, charge_up, charge_dn, & ps_file, & - nsf_species, & + nsf_species, npao_species, & non_local_species, type_species, & species_file, species_from_files use GenComms, only: gcopy, my_barrier, cq_abort, inode, ionode, cq_warn @@ -910,7 +917,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& n_support_iterations, L_tolerance, & sc_tolerance, energy_tolerance, & expected_reduction - use pao_format, only: kcut, del_k + use pao_format use support_spec_format, only: flag_paos_atoms_in_cell, & read_option, symmetry_breaking, & support_pao_file, TestBasisGrads, & @@ -928,7 +935,9 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_MatrixFile_BinaryFormat_Dump_END, atom_output_threshold, flag_coords_xyz use group_module, only: part_method, HILBERT, PYTHON - use H_matrix_module, only: flag_write_locps, flag_dump_locps + use H_matrix_module, only: flag_write_locps, flag_dump_locps, & + num_plusUproj, info_plusUproj, & ! 2024.05.20 nakata DFT+U + flag_plusUproj_atom, w_plusUproj_pao, half_w_plusUproj_pao ! 2024.05.20 nakata DFT+U use pao_minimisation, only: InitStep_paomin use timer_module, only: time_threshold,lun_tmr, TimingOn, & TimersWriteOut, BackTraceOn @@ -1005,6 +1014,11 @@ subroutine read_input(start, start_L, titles, vary_mu,& character(len=5) :: ps_type !To find which pseudo we use character(len=8) :: tmp logical :: flag_ghost, find_species, test_ase +!!! 2024.05.20 nakata DFT+U + integer :: i_species, inum_plusUproj, prncpl, & + n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue, & + max_npao, z_temp, ipao, i_ang, i_zeta, i_m +!!! nakata DFT+U end ! spin polarisation logical :: flag_spin_polarisation @@ -1320,6 +1334,9 @@ subroutine read_input(start, start_L, titles, vary_mu,& else flag_neutral_atom_projector = .false. end if +!!! 2024.05.20 nakata DFT+U + flag_DFTplusU = fdf_boolean('DM.DFTplusU', .false.) +!!! nakata DFT+U end !!$ !!$ !!$ @@ -1410,6 +1427,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& RadiusLD(i) = zero NonLocalFactor(i) = zero InvSRange(i) = zero +! RadiusPlusUproj(i) = zero ! 2024.05.20 nakata DFT+U blip_info(i)%SupportGridSpacing = zero if(pseudo_type==SIESTA.OR.pseudo_type==ABINIT) non_local_species(i) = .true. ! This is new-style fdf_block @@ -1874,6 +1892,81 @@ subroutine read_input(start, start_L, titles, vary_mu,& end do end if end if +!!! 2024.05.20 nakata DFT+U +!!$ +!!$ +!!$ DFT+U (DFT plus U) +!!$ +!!$ + if (flag_DFTplusU) then + ! cutoff for PK matrix (PKrange) + r_plusU = fdf_double('DM.PK_range_DFTplusU', one ) ! range for PK in DFT+U calculation ! 2024.05.20 nakata DFT+U + + ! set w_plusUproj: U parameter values + max_npao = maxval(npao_species) + allocate(flag_plusUproj_atom(n_species)) + allocate(w_plusUproj_pao(n_species,max_npao)) + allocate(half_w_plusUproj_pao(n_species,max_npao)) + + flag_plusUproj_atom(:) =.false. + w_plusUproj_pao(:,:) = zero + half_w_plusUproj_pao(:,:) = zero + + if (fdf_block('DFTplusU')) then + num_plusUproj = 1 + block_end - block_start + if(inode==ionode) write(io_lun,*) 'num_plusUproj =',num_plusUproj ! nakata 2024 debug + allocate(info_plusUproj(num_plusUproj,5)) + do inum_plusUproj=1,num_plusUproj + z_plusUproj = 1 + read(unit=input_array(block_start+inum_plusUproj-1),fmt=*) & + i_species, n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue + info_plusUproj(inum_plusUproj,1) = i_species + info_plusUproj(inum_plusUproj,2) = n_plusUproj + info_plusUproj(inum_plusUproj,3) = l_plusUproj + info_plusUproj(inum_plusUproj,4) = z_plusUproj + info_plusUproj(inum_plusUproj,5) = plusUvalue + + flag_plusUproj_atom(i_species) = .true. + + ipao = 0 + do i_ang = 0, pao(i_species)%greatest_angmom + if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then + if (i_ang.eq.l_plusUproj) then + ! set U parameters for PAO with (n_plusUproj,l_plusUproj,z_plusUproj) + z_temp = 0 + do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom + prncpl = pao(i_species)%angmom(i_ang)%prncpl(i_zeta) + if (prncpl.ne.n_plusUproj) then + ipao = ipao + 2*i_ang + 1 + else if (prncpl.eq.n_plusUproj) then + z_temp = z_temp + 1 + if (z_temp.eq.z_plusUproj) then + do i_m = -i_ang,i_ang + ipao = ipao + 1 + w_plusUproj_pao(i_species,ipao) = plusUvalue + half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue + enddo ! m + else + ipao = ipao + 2*i_ang + 1 + endif + endif + enddo ! z + else + do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom + ipao = ipao + 2*i_ang + 1 + enddo + endif + endif + enddo ! anglar momentum + if (ipao.ne.npao_species(i_species)) & + call cq_abort("Error in counting PAOs when setting DFT+U parameters.") + enddo ! n_plusUproj + call fdf_endblock + else + call cq_abort("No DFTplusU parameter is given in the input file.") + endif + endif ! flag_DFTplusU +!!! nakata DFT+U end !!$ !!$ !!$ @@ -2565,11 +2658,13 @@ end subroutine check_compatibility !! - Added charge_up and charge_dn !! 2019/06/06 18:00 nakata !! - Added MSSF_nonminimal_species + !! 2024/05/28 17:00 nakata + !! - Added RadiusPlusUproj for DFT+U !! SOURCE !! subroutine allocate_species_vars - use dimens, only: RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, & + use dimens, only: RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, RadiusPlusUproj, & ! 2024.05.20 nakata DFT+U NonLocalFactor, InvSRange, atomicnum use memory_module, only: reg_alloc_mem, type_dbl use species_module, only: n_species, nsf_species, nlpf_species, npao_species, natomf_species, & @@ -2659,6 +2754,11 @@ subroutine allocate_species_vars allocate(MSSF_nonminimal_species(n_species),STAT=stat) if(stat/=0) call cq_abort("Error allocating MSSF_nonminimal_species in allocate_species_vars: ", n_species,stat) call reg_alloc_mem(area_general,n_species,type_dbl) +!!! 2024.05.20 nakata DFT+U +! allocate(RadiusPlusUproj(n_species),STAT=stat) +! if(stat/=0) call cq_abort("Error allocating RadiusPlusUproj, RadiusLD in allocate_species_vars: ",n_species,stat) +! call reg_alloc_mem(area_general,n_species,type_dbl) +!!! nakata DFT+U end ! call stop_timer(tmr_std_allocation) @@ -2721,7 +2821,7 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) use datatypes use units use dimens, only: r_super_x, r_super_y, r_super_z, & - n_grid_x, n_grid_y, n_grid_z, r_h, r_c, RadiusSupport + n_grid_x, n_grid_y, n_grid_z, r_h, r_c, RadiusSupport, r_plusU ! 2024.05.20 nakata DFT+U use block_module, only: in_block_x, in_block_y, in_block_z use species_module, only: n_species, species_label, mass, & charge, & @@ -2735,7 +2835,8 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) flag_Multisite, flag_diagonalisation, flag_neutral_atom, temp_ion, & flag_self_consistent, flag_vary_basis, iprint_init, flag_pcc_global, & nspin, flag_SpinDependentSF, flag_fix_spin_population, ne_spin_in_cell, flag_XLBOMD,& - ase_file + ase_file, flag_DFTplusU ! 2024.05.20 nakata DFT+U + use H_matrix_module, only: num_plusUproj, info_plusUproj ! 2024.05.20 nakata DFT+U use SelfCon, only: maxitersSC use GenComms, only: cq_abort use minimise, only: energy_tolerance, L_tolerance, & @@ -2962,6 +3063,25 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) write(io_lun,fmt='(10x,"Density Matrix range = ",f7.4,1x,a2)') & dist_conv*r_c, d_units(dist_units) +!!! 2024.05.20 nakata DFT+U + if(flag_DFTplusU) then + write(io_lun,fmt='(10x,"DFT+U calculation will be performed")') + write(io_lun,fmt='(10x,"DFT+U PK Matrix range = ",f7.4,1x,a2)') & + dist_conv*r_plusU, d_units(dist_units) + + write(io_lun,fmt='(/4x,"Number of DFT-U projectors: ",i2)') num_plusUproj + + write(io_lun,fmt='(4x,a40)') '----------------------------------------' + write(io_lun,fmt='(4x,a40)') "| species n l zeta U-value (Ha) |" + write(io_lun,fmt='(4x,a40)') '----------------------------------------' + do n=1, num_plusUproj + write(io_lun,fmt='(4x,"|",i2,2x,a5,2x,i1,2x,i1,3x,i1,4x,f9.3,5x,"|")') & + info_plusUproj(n,1), species_label(info_plusUproj(n,1)), & + info_plusUproj(n,2), info_plusUproj(n,3), info_plusUproj(n,4), info_plusUproj(n,5) + end do + endif +!!! nakata DFT+U end + return end subroutine write_info !!*** diff --git a/src/initialisation_module.f90 b/src/initialisation_module.f90 index 6ede3b9b9..b226ce8c2 100644 --- a/src/initialisation_module.f90 +++ b/src/initialisation_module.f90 @@ -112,7 +112,7 @@ module initialisation !! 2020/12/13 lionel !! Added EXX initialise and finalise !! 2022/06/09 08:35 dave - !! Changed name of D2 set-up routine, added only to module usep + !! Changed name of D2 set-up routine, added only to module use !! SOURCE !! subroutine initialise(vary_mu, fixed_potential, mu, total_energy) @@ -124,8 +124,7 @@ subroutine initialise(vary_mu, fixed_potential, mu, total_energy) flag_only_dispersion, flag_neutral_atom, & flag_atomic_stress, flag_heat_flux, & flag_full_stress, area_moveatoms, & - atomic_stress, non_atomic_stress, & - min_layer, flag_self_consistent + atomic_stress, non_atomic_stress, min_layer use GenComms, only: inode, ionode, my_barrier, end_comms, & cq_abort use initial_read, only: read_and_write @@ -136,7 +135,7 @@ subroutine initialise(vary_mu, fixed_potential, mu, total_energy) use cover_module, only: make_cs, D2_CS use dimens, only: r_dft_d2 use DFT_D2, only: set_para_D2, dispersion_D2 - use pseudo_tm_module, only: make_neutral_atom + use pseudo_tm_module, only: make_neutral_atom use angular_coeff_routines, only: set_fact use maxima_module, only: lmax_ps, lmax_pao use XC, only: init_xc @@ -1098,7 +1097,7 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & use logicals use mult_module, only: LNV_matrix_multiply, matL, matphi, & matT, T_trans, L_trans, LS_trans, & - SFcoeff_trans, matK, & + SFcoeff_trans, matK, matKatomf, & ! 2024.05.20 nakata DFT+U matrix_scale, matSFcoeff, matSFcoeff_tran, matrix_transpose use SelfCon, only: new_SC_potl use global_module, only: iprint_init, flag_self_consistent, & @@ -1111,7 +1110,7 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & flag_dissipation, & flag_propagateX, flag_propagateL, restart_X, & flag_out_wf, wf_self_con, & - flag_write_DOS, flag_neutral_atom, & + flag_write_DOS, flag_neutral_atom, flag_DFTplusU, & ! 2024.05.20 nakata DFT+U atomf, sf, flag_LFD, nspin_SF, flag_diagonalisation, & ne_in_cell, min_layer, flag_basis_set, PAOs use ion_electrostatic, only: ewald, screened_ion_interaction @@ -1155,7 +1154,7 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & integer :: nfile, symm real(double) :: electrons_tot real(double), dimension(nspin) :: electrons, energy_tmp - integer :: spin_SF + integer :: spin, spin_SF ! 2024.05.20 nakata DFT+U !H_trans is not prepared. If we need to symmetrise K, we need H_trans integer :: H_trans = 1 @@ -1283,6 +1282,16 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & write(io_lun, fmt='(4x,a)') trim(prefix)//' grabbed K matrix' !DEBUG call Report_UpdateMatrix("Kmat") end if +!!! 2024.05.20 nakata DFT+U + else + ! When Kmatrix is not read, the effect of DFT-U will be zero in the first SCF step. + ! From the second step, matKatomf is used to construct DFT+U matrices + if (flag_DFTplusU) then + do spin = 1, nspin + call matrix_scale(zero,matKatomf(spin)) + enddo + endif +!!! nakata DFT+U end end if ! XL-BOMD if (restart_X) then diff --git a/src/matrix_data_module.f90 b/src/matrix_data_module.f90 index aaa3f3507..eb901aabe 100644 --- a/src/matrix_data_module.f90 +++ b/src/matrix_data_module.f90 @@ -62,6 +62,8 @@ !! which are no longer used !! 2017/12/05 10:20 dave (with TM and NW (Mizuho)) !! Adding new matrix indices (aNA and NAa) for atom function - NA projectors +!! 2024/05/22 14:40 nakata +!! Adding new matrix indices (PK, pUa, aUp, pUp and aUa) for atom function - DFT+U !! SOURCE !! module matrix_data @@ -73,7 +75,8 @@ module matrix_data save ! This will need to change if the above parameters are changed - integer, parameter :: mx_matrices = 32 +! integer, parameter :: mx_matrices = 32 ! 2024.05.20 nakata DFT+U + integer, parameter :: mx_matrices = 37 ! Store ALL indices in a large array type(matrix), allocatable, dimension(:,:), target :: mat @@ -88,6 +91,7 @@ module matrix_data aSs_matind, aHs_matind, sSa_matind, sHa_matind, & SFcoeff_matind, SFcoeffTr_matind, LD_matind integer, dimension(:), pointer :: aNAmatind, NAamatind + integer, dimension(:), pointer :: aUa_matind, PKmatind !!! 2024.05.20 nakata DFT+U ! Parameters for the different matrix ranges integer, parameter :: Srange = 1 ! STS,TST,TS.TS @@ -127,6 +131,14 @@ module matrix_data integer :: aNArange ! 31 integer :: NAarange ! 32 +!!! 2024.05.20 nakata DFT+U + integer :: PKrange ! 33 + integer :: pUa_range ! 34 + integer :: aUp_range ! 35 + integer :: pUp_range ! 36 + integer :: aUa_range ! 37 +!!! nakata DFT+U end + integer :: max_range ! Indexes matrix with largest range type(blip_transfer) :: blip_trans diff --git a/src/mult_module.f90 b/src/mult_module.f90 index 784960228..1a6098e3b 100644 --- a/src/mult_module.f90 +++ b/src/mult_module.f90 @@ -100,6 +100,11 @@ !! Adding multiplications for NA projectors !! 2018/11/13 17:30 nakata !! Changed matS, matT, matTtran, matKE, matNL and matNA to be spin_SF dependent +!! 2024/05/29 18:30 nakata +!! Added matHplusU, matHplusUatomf, matEplusU, matEplusUatomf, +!! pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP, +!! aUa_trans, PK_trans, aUa_pairind, PK_pairind +!! for DFT+U !! SOURCE !! module mult_module @@ -158,8 +163,15 @@ module mult_module integer :: aLa_aHa_aLHa ! 34, type 1, for LFD , L(atomf,atomf) * H(atomf,atomf) = Local H(atomf,atomf) integer :: aNA_NAa_aHa ! type 1 for building H: H(atomf, napf) * H(napf, atomf) = H(atomf, atomf) integer :: aHa_aNA_aNA ! type 2 for gradients: aHa_NA_NA +!!! 2024.05.20 nakata DFT+U + integer :: pOp_pWa_pOWa ! 37 type1 , O(proj ,proj ) * W(proj ,atomf) = OW(proj ,atomf) + integer :: aVp_pOWa_aPa ! 38 type1 , V(atomf,proj ) *OW(proj ,atomf) = P(atomf,atomf) + integer :: P_K_PK ! 39 type1 or 2 , P(atomf,atomf) * K(atomf,atomf) = PK(atomf,atomf) + integer :: PK_P_PKP ! 40 type1 or 2 ,PK(atomf,atomf) * P(atomf,atomf) =PKP(atomf,atomf) +!!! nakata DFT+U end - integer(integ), parameter :: mx_mults = 36 +! integer(integ), parameter :: mx_mults = 36 + integer(integ), parameter :: mx_mults = 40 ! 2024.05.20 nakata DFT+U type(matrix_mult) :: mult(mx_mults) @@ -176,15 +188,19 @@ module mult_module integer :: SFcoeff_trans ! 10 integer :: aNA_trans ! 11 integer :: aNAa_trans ! 12 + integer :: aUa_trans ! 13 !!! 2024.05.20 nakata DFT+U + integer :: PK_trans ! 14 !!! 2024.05.20 nakata DFT+U - integer(integ), parameter :: mx_trans = 12 +! integer(integ), parameter :: mx_trans = 12 + integer(integ), parameter :: mx_trans = 14 !!! 2024.05.20 nakata DFT+U type(pair_data), allocatable, dimension(:,:) :: pairs integer, dimension(:), pointer :: Spairind, Lpairind, Tpairind, & APpairind, LSpairind, LHpairind, & LSLpairind, & aSs_pairind, aHs_pairind, SFcoeff_pairind, & - aNApairind, aNAapairind + aNApairind, aNAapairind, & ! 2024.05.20 nakata DFT+U + aUa_pairind, PK_pairind type(matrix_trans), dimension(mx_matrices), target :: ltrans type(trans_remote) :: gtrans(mx_trans) @@ -200,14 +216,16 @@ module mult_module ! spin dependent matrices integer, allocatable, dimension(:), public :: & matH, matL, matLS, matSL, matK, matphi, matM12, matM4, matU, & - matUT, matX, matSX + matUT, matX, matSX, & + matHplusU, matEplusU ! 2024.05.20 nakata DFT+U ! spin independent atomf-based matrices integer, public :: & matSatomf, matKEatomf, matNLatomf, matNAatomf ! spin dependent atomf-based matrices integer, allocatable, dimension(:), public :: & matHatomf, matKatomf, matXatomf, & - matSFcoeff, matSFcoeff_tran, matdSFcoeff, matdSFcoeff_e + matSFcoeff, matSFcoeff_tran, matdSFcoeff, matdSFcoeff_e, & + matHplusUatomf, matEplusUatomf ! 2024.05.20 nakata DFT+U ! matrices related to XLBOMD (for DMM, at present) integer, allocatable, dimension(:), public :: matXL, matXLvel ! (nspin) @@ -278,7 +296,7 @@ subroutine immi(parts, prim, gcs, myid, partial) use maxima_module, only: maxpartsproc, maxnabaprocs use GenComms, only: my_barrier, cq_abort use matrix_comms_module, only: find_neighbour_procs - use global_module, only: area_matrices, mx_temp_matrices, flag_LFD + use global_module, only: area_matrices, mx_temp_matrices, flag_LFD, flag_DFTplusU ! 2024.05.20 nakata DFT+U use memory_module, only: reg_alloc_mem, type_int use pseudopotential_common, ONLY: flag_neutral_atom_projector @@ -345,20 +363,46 @@ subroutine immi(parts, prim, gcs, myid, partial) aLa_aHa_aLHa = 34 aNA_NAa_aHa = 35 aHa_aNA_aNA = 36 +!!! 2024.05.20 nakata DFT+U + pOp_pWa_pOWa = 37 + aVp_pOWa_aPa = 38 + P_K_PK = 39 + PK_P_PKP = 40 +!!! nakata DFT+U end else aNA_NAa_aHa = 33 aHa_aNA_aNA = 34 +!!! 2024.05.20 nakata DFT+U + pOp_pWa_pOWa = 35 + aVp_pOWa_aPa = 36 + P_K_PK = 37 + PK_P_PKP = 38 +!!! nakata DFT+U end endif aSs_trans = 8 aHs_trans = 9 SFcoeff_trans = 10 aNA_trans = 11 aNAa_trans = 12 +!!! 2024.05.20 nakata DFT+U + aUa_trans = 13 + PK_trans = 14 +!!! nakata DFT+U end else aNA_NAa_aHa = 23 aHa_aNA_aNA = 24 +!!! 2024.05.20 nakata DFT+U + pOp_pWa_pOWa = 25 + aVp_pOWa_aPa = 26 + P_K_PK = 27 + PK_P_PKP = 28 +!!! nakata DFT+U end aNA_trans = 8 aNAa_trans = S_trans +!!! 2024.05.20 nakata DFT+U + aUa_trans = S_trans + PK_trans = 9 +!!! nakata DFT+U end endif mat%sf1_type = sf @@ -499,6 +543,17 @@ subroutine immi(parts, prim, gcs, myid, partial) NAamatind, rcut(NAarange), myid-1, halo(NAarange), & ltrans(NAarange)) end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + mat(1:prim%groups_on_node, PKrange)%sf1_type = atomf + mat(1:prim%groups_on_node, PKrange)%sf2_type = atomf + call matrix_ini(parts, prim, gcs, mat(1:prim%groups_on_node,PKrange), & + PKmatind, rcut(PKrange), myid-1, halo(PKrange), ltrans(PKrange)) + ! pUa_range = aUp_range = aUa_range = pUp_range = aSa_range, + ! and their indices (pUamatin etc.) are equal to Smatind, + ! so we set up only PKrange here. + endif +!!! nakata DFT+U end call associate_matrices call find_neighbour_procs(parts, halo(max_range)) call start_timer(tmr_std_allocation) @@ -559,6 +614,22 @@ subroutine immi(parts, prim, gcs, myid, partial) !aNAapairind = Spairind aNAa_trans = S_trans end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + ! for matP, aUa_range = aSa_range, then if atomf=sf, aUa_range = Srange + if (atomf.ne.sf) then + call trans_ini(parts, prim, gcs, mat(1:prim%groups_on_node,aUa_range), & + myid-1, halo(aUa_range), halo(aUa_range), ltrans(aUa_range), & + gtrans(aUa_trans), pairs(:,aUa_trans), aUa_pairind) + else + aUa_trans = S_trans + endif + ! for matPK + call trans_ini(parts, prim, gcs, mat(1:prim%groups_on_node,aUa_range), & + myid-1, halo(PKrange), halo(PKrange), ltrans(PKrange), & + gtrans(PK_trans), pairs(:,PK_trans), PK_pairind) + endif +!!! nakata DFT+U end ! Now initialise the matrix multiplications ! Somewhere, we need to set mult_type 1/2 - probably here ! @@ -1095,6 +1166,95 @@ subroutine immi(parts, prim, gcs, myid, partial) mult(aHa_aNA_aNA)%gcs => gcs call mult_ini(mult(aHa_aNA_aNA), NAamatind, myid-1, prim%n_prim, parts) end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + mult(pOp_pWa_pOWa)%mult_type = 1 + mult(pOp_pWa_pOWa)%amat => mat(1:prim%groups_on_node,pUp_range) + mult(pOp_pWa_pOWa)%bmat => mat(1:prim%groups_on_node,pUa_range) + mult(pOp_pWa_pOWa)%cmat => mat(1:prim%groups_on_node,pUa_range) + mult(pOp_pWa_pOWa)%ahalo => halo(pUp_range) + mult(pOp_pWa_pOWa)%chalo => halo(pUa_range) + mult(pOp_pWa_pOWa)%ltrans => ltrans(pUa_range) + !mult(pOp_pWa_pOWa)%bindex => pUa_matind + mult(pOp_pWa_pOWa)%parts => parts + mult(pOp_pWa_pOWa)%prim => prim + mult(pOp_pWa_pOWa)%gcs => gcs + call mult_ini(mult(pOp_pWa_pOWa), Smatind, myid-1, prim%n_prim, parts) ! pUa_matind = Smatind + + mult(aVp_pOWa_aPa)%mult_type = 1 + mult(aVp_pOWa_aPa)%amat => mat(1:prim%groups_on_node,aUp_range) + mult(aVp_pOWa_aPa)%bmat => mat(1:prim%groups_on_node,pUa_range) + mult(aVp_pOWa_aPa)%cmat => mat(1:prim%groups_on_node,aUa_range) + mult(aVp_pOWa_aPa)%ahalo => halo(aUp_range) + mult(aVp_pOWa_aPa)%chalo => halo(aUa_range) + mult(aVp_pOWa_aPa)%ltrans => ltrans(aUp_range) + !mult(aVp_pOWa_aPa)%bindex => pUa_matind + mult(aVp_pOWa_aPa)%parts => parts + mult(aVp_pOWa_aPa)%prim => prim + mult(aVp_pOWa_aPa)%gcs => gcs + call mult_ini(mult(aVp_pOWa_aPa), Smatind, myid-1, prim%n_prim, parts) ! pUa_matind = Smatind + + ! K should be in atomf + ra = rcut(aUa_range) + rc = rcut(PKrange) + if (rc >= ra) then + mult(P_K_PK)%mult_type = 1 + mult(P_K_PK)%amat => mat(1:prim%groups_on_node,aUa_range) + mult(P_K_PK)%bmat => mat(1:prim%groups_on_node,aHa_range) + mult(P_K_PK)%cmat => mat(1:prim%groups_on_node,PKrange) + mult(P_K_PK)%ahalo => halo(aUa_range) + mult(P_K_PK)%chalo => halo(PKrange) + mult(P_K_PK)%ltrans => ltrans(aUa_range) + !mult(P_K_PK)%bindex => aHa_matind + mult(P_K_PK)%parts => parts + mult(P_K_PK)%prim => prim + mult(P_K_PK)%gcs => gcs + call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) + else + mult(P_K_PK)%mult_type = 2 + mult(P_K_PK)%amat => mat(1:prim%groups_on_node,PKrange) + mult(P_K_PK)%bmat => mat(1:prim%groups_on_node,aHa_range) + mult(P_K_PK)%cmat => mat(1:prim%groups_on_node,aUa_range) + mult(P_K_PK)%ahalo => halo(PKrange) + mult(P_K_PK)%chalo => halo(aUa_range) + mult(P_K_PK)%ltrans => ltrans(PKrange) + !mult(P_K_PK)%bindex => aHa_matind + mult(P_K_PK)%parts => parts + mult(P_K_PK)%prim => prim + mult(P_K_PK)%gcs => gcs + call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) + endif + ra = rcut(PKrange) + rc = rcut(aHa_range) + if (rc >= ra) then + mult(PK_P_PKP)%mult_type = 1 + mult(PK_P_PKP)%amat => mat(1:prim%groups_on_node,PKrange) + mult(PK_P_PKP)%bmat => mat(1:prim%groups_on_node,aUa_range) + mult(PK_P_PKP)%cmat => mat(1:prim%groups_on_node,aHa_range) + mult(PK_P_PKP)%ahalo => halo(PKrange) + mult(PK_P_PKP)%chalo => halo(aHa_range) + mult(PK_P_PKP)%ltrans => ltrans(PKrange) + !mult(PK_P_PKP)%bindex => aUa_matind + mult(PK_P_PKP)%parts => parts + mult(PK_P_PKP)%prim => prim + mult(PK_P_PKP)%gcs => gcs + call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) + else + mult(PK_P_PKP)%mult_type = 2 + mult(PK_P_PKP)%amat => mat(1:prim%groups_on_node,aHa_range) + mult(PK_P_PKP)%bmat => mat(1:prim%groups_on_node,aUa_range) + mult(PK_P_PKP)%cmat => mat(1:prim%groups_on_node,PKrange) + mult(PK_P_PKP)%ahalo => halo(aHa_range) + mult(PK_P_PKP)%chalo => halo(PKrange) + mult(PK_P_PKP)%ltrans => ltrans(aHa_range) + !mult(PK_P_PKP)%bindex => aUa_matind + mult(PK_P_PKP)%parts => parts + mult(PK_P_PKP)%prim => prim + mult(PK_P_PKP)%gcs => gcs + call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) + endif + endif +!!! nakata DFT+U end !end if ! call stop_timer(tmr_std_matrices) @@ -1142,7 +1302,7 @@ end subroutine immi subroutine fmmi(prim) use basic_types - use global_module, only: iprint_mat, flag_LFD + use global_module, only: iprint_mat, flag_LFD, flag_DFTplusU ! 2024.05.20 nakata DFT+U use matrix_module, only: deallocate_comms_data use matrix_data use maxima_module, only: maxnabaprocs @@ -1308,6 +1468,26 @@ subroutine fmmi(prim) mult(aHa_aNA_aNA)%bindex,mult(aHa_aNA_aNA)%parts,mult(aHa_aNA_aNA)%prim, & mult(aHa_aNA_aNA)%gcs) end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + nullify(mult(pOp_pWa_pOWa)%amat,mult(pOp_pWa_pOWa)%bmat,mult(pOp_pWa_pOWa)%cmat, & + mult(pOp_pWa_pOWa)%ahalo,mult(pOp_pWa_pOWa)%chalo,mult(pOp_pWa_pOWa)%ltrans, & + mult(pOp_pWa_pOWa)%bindex,mult(pOp_pWa_pOWa)%parts,mult(pOp_pWa_pOWa)%prim, & + mult(pOp_pWa_pOWa)%gcs) + nullify(mult(aVp_pOWa_aPa)%amat,mult(aVp_pOWa_aPa)%bmat,mult(aVp_pOWa_aPa)%cmat, & + mult(aVp_pOWa_aPa)%ahalo,mult(aVp_pOWa_aPa)%chalo,mult(aVp_pOWa_aPa)%ltrans, & + mult(aVp_pOWa_aPa)%bindex,mult(aVp_pOWa_aPa)%parts,mult(aVp_pOWa_aPa)%prim, & + mult(aVp_pOWa_aPa)%gcs) + nullify(mult(P_K_PK)%amat,mult(P_K_PK)%bmat,mult(P_K_PK)%cmat, & + mult(P_K_PK)%ahalo,mult(P_K_PK)%chalo,mult(P_K_PK)%ltrans, & + mult(P_K_PK)%bindex,mult(P_K_PK)%parts,mult(P_K_PK)%prim, & + mult(P_K_PK)%gcs) + nullify(mult(PK_P_PKP)%amat,mult(PK_P_PKP)%bmat,mult(PK_P_PKP)%cmat, & + mult(PK_P_PKP)%ahalo,mult(PK_P_PKP)%chalo,mult(PK_P_PKP)%ltrans, & + mult(PK_P_PKP)%bindex,mult(PK_P_PKP)%parts,mult(PK_P_PKP)%prim, & + mult(PK_P_PKP)%gcs) + endif +!!! nakata DFT+U end ! Comms call deallocate_comms_data(mult(aHa_AP_AP)%comms) call deallocate_comms_data(mult(L_S_LS)%comms) @@ -1350,6 +1530,14 @@ subroutine fmmi(prim) call deallocate_comms_data(mult(aNA_NAa_aHa)%comms) call deallocate_comms_data(mult(aHa_aNA_aNA)%comms) end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + call deallocate_comms_data(mult(pOp_pWa_pOWa)%comms) + call deallocate_comms_data(mult(aVp_pOWa_aPa)%comms) + call deallocate_comms_data(mult(P_K_PK)%comms) + call deallocate_comms_data(mult(PK_P_PKP)%comms) + endif +!!! nakata DFT+U end do i=1,mx_trans do j = 1,gtrans(i)%n_rem_node!maxnabaprocs+1 !if(associated(pairs(j,i)%submat)) deallocate(pairs(j,i)%submat) @@ -1364,6 +1552,12 @@ subroutine fmmi(prim) deallocate(aNApairind) if(atomf.ne.sf) deallocate(aNAapairind) end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + deallocate(PK_pairind) + if(atomf.ne.sf) deallocate(aUa_pairind) + endif +!!! nakata DFT+U end call dissociate_matrices ! Matrices call end_ops(prim,Srange,Smatind,S_trans) @@ -1402,6 +1596,11 @@ subroutine fmmi(prim) call end_ops(prim,aNArange, aNAmatind,aNA_trans) call end_ops(prim,NAarange,NAamatind) end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + call end_ops(prim,PKrange,PKmatind,PK_trans) + endif +!!! nakata DFT+U end ! call stop_timer(tmr_std_matrices) deallocate(mat) return @@ -2040,6 +2239,8 @@ end subroutine end_ops !! Associating NA-projector matrices !! 2018/11/13 17:30 nakata !! Changed matS, matT, matTtran, matKE, matNL and matNA to be spin_SF dependent + !! 2024/05/20 20:00 nakata + !! Added lines for DFT+U !! 2024/09/11 14:00 lionel !! set trans_index(matX(spin) ) = S_trans !! SOURCE @@ -2052,7 +2253,7 @@ subroutine associate_matrices Xrange, SXrange, aSa_range, aHa_range, & SFcoeff_range, SFcoeffTr_range, & mat, aNArange, NAarange - use global_module, only: area_matrices, iprint_mat, nspin, nspin_SF + use global_module, only: area_matrices, iprint_mat, nspin, nspin_SF, flag_DFTplusU ! 2024.05.20 nakata DFT+U use memory_module, only: reg_alloc_mem, reg_dealloc_mem, type_dbl use GenComms, only: inode, ionode !%%! use matrix_data, only: data_S, data_H, data_L, data_T, data_Ttran, & @@ -2070,12 +2271,14 @@ subroutine associate_matrices if (.not. allocated_tags) then allocate(matH(nspin), matL(nspin), matLS(nspin), matSL(nspin), & matK(nspin), matphi(nspin), matM12(nspin), matM4(nspin), & - matU(nspin), matUT(nspin), matX(nspin), matSX(nspin), STAT=stat) + matU(nspin), matUT(nspin), matX(nspin), matSX(nspin), & + matHplusU(nspin), matEplusU(nspin), STAT=stat) ! 2024.05.20 nakata DFT+U if (stat /= 0) & call cq_abort('associate_matrices: failed to allocate spin & &depdendent matrix tags', nspin, stat) ! For atomf-based calculations - allocate(matHatomf(nspin), matKatomf(nspin), matXatomf(nspin), STAT=stat) + allocate(matHatomf(nspin), matKatomf(nspin), matXatomf(nspin), & + matHplusUatomf(nspin), matEplusUatomf(nspin), STAT=stat) ! 2024.05.20 nakata DFT+U if (stat /= 0) & call cq_abort('associate_matrices: failed to allocate spin & &depdendent ATOMF matrix tags', nspin, stat) @@ -2198,6 +2401,35 @@ subroutine associate_matrices matNAatomf = current_matrix end if end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + matHplusU(1) = current_matrix + 1 + matEplusU(1) = current_matrix + 2 + current_matrix = current_matrix + 2 + if (nspin == 2) then + matHplusU(2) = current_matrix + 1 + matEplusU(2) = current_matrix + 2 + current_matrix = current_matrix + 2 + endif + if (atomf.eq.sf) then + matHplusUatomf(1) = matHplusU(1) + matEplusUatomf(1) = matEplusU(1) + if (nspin == 2) then + matHplusUatomf(2) = matHplusU(2) + matEplusUatomf(2) = matEplusU(2) + endif + else + matHplusUatomf(1) = current_matrix + 1 + matEplusUatomf(1) = current_matrix + 2 + current_matrix = current_matrix + 2 + if (nspin == 2) then + matHplusUatomf(2) = current_matrix + 1 + matEplusUatomf(2) = current_matrix + 2 + current_matrix = current_matrix + 2 + endif + endif + endif +!!! nakata DFT+U end !%%!! Now associate pointers with correct arrays !%%! mat_p(matS )%matrix => data_S @@ -2269,6 +2501,19 @@ subroutine associate_matrices mat_p(matNAatomf )%sf1_type = atomf end if end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + do spin = 1, nspin + mat_p(matHplusU(spin))%sf1_type = sf + mat_p(matEplusU(spin))%sf1_type = sf + if (atomf.ne.sf) then + mat_p(matHplusUatomf(spin))%sf1_type = atomf + mat_p(matEplusUatomf(spin))%sf1_type = atomf + endif + enddo + endif +!!! nakata DFT+U end + ! Type for f2 mat_p(matAP )%sf2_type = nlpf mat_p(matPA )%sf2_type = atomf @@ -2319,6 +2564,18 @@ subroutine associate_matrices mat_p(matNAatomf )%sf2_type = atomf end if end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + do spin = 1, nspin + mat_p(matHplusU(spin))%sf2_type = sf + mat_p(matEplusU(spin))%sf2_type = sf + if (atomf.ne.sf) then + mat_p(matHplusUatomf(spin))%sf2_type = atomf + mat_p(matEplusUatomf(spin))%sf2_type = atomf + endif + enddo + endif +!!! nakata DFT+U end ! Set up index translation for ranges matrix_index(matAP ) = APrange matrix_index(matPA ) = PArange @@ -2369,6 +2626,18 @@ subroutine associate_matrices matrix_index(matNAatomf) = aHa_range end if end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + do spin = 1, nspin + matrix_index(matHplusU(spin)) = Hrange + matrix_index(matEplusU(spin)) = Hrange + if (atomf.ne.sf) then + matrix_index(matHplusUatomf(spin)) = aHa_range + matrix_index(matEplusUatomf(spin)) = aHa_range + endif + enddo + endif +!!! nakata DFT+U end ! Real lengths ! Length !%%! mat_p(matS )%length = nsf*nsf*mx_at_prim*mx_snab @@ -2472,6 +2741,18 @@ subroutine associate_matrices trans_index(matNAatomf) = aNAa_trans end if end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + do spin = 1, nspin + trans_index(matHplusU(spin)) = 0 + trans_index(matEplusU(spin)) = 0 + if (atomf.ne.sf) then + trans_index(matHplusUatomf(spin)) = 0 + trans_index(matEplusUatomf(spin)) = 0 + endif + enddo + endif +!!! nakata DFT+U end return end subroutine associate_matrices From 84a6276a7643f741add91eaf074c465fa599ba37 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Tue, 11 Feb 2025 14:09:11 +0000 Subject: [PATCH 02/16] Small tweaks for debugging --- src/initial_read_module.f90 | 134 ++++++++++++++++++++++++------------ 1 file changed, 91 insertions(+), 43 deletions(-) diff --git a/src/initial_read_module.f90 b/src/initial_read_module.f90 index 845d73ca5..f2fba275b 100644 --- a/src/initial_read_module.f90 +++ b/src/initial_read_module.f90 @@ -185,6 +185,7 @@ subroutine read_and_write(start, start_L, inode, ionode, & atomf, sf, paof, & flag_SpinDependentSF, nspin_SF, & flag_Multisite, & + flag_DFTplusU, & ! 2024.05.20 nakata DFT+U flag_cdft_atom, flag_local_excitation, & flag_diagonalisation, flag_vary_basis, & flag_MDcontinue, flag_SFcoeffReuse, & @@ -222,6 +223,9 @@ subroutine read_and_write(start, start_L, inode, ionode, & use md_control, only: md_position_file use pao_format use XC, only: flag_functional_type, flag_different_functional + use H_matrix_module, only: num_plusUproj, info_plusUproj, & ! 2024.05.20 nakata DFT+U + flag_plusUproj_atom, w_plusUproj_pao, half_w_plusUproj_pao ! 2024.05.20 nakata DFT+U + implicit none @@ -249,6 +253,11 @@ subroutine read_and_write(start, start_L, inode, ionode, & real(double) :: sum_elecN_spin real(double) :: charge_tmp + ! PlusU + integer :: inum_plusUproj, & + n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue, & + max_npao, z_temp, ipao, i_ang, i_zeta, i_m + !****lat<$ call start_backtrace(t=backtrace_timer,who='read_and_write',where=1,level=1) !****lat>$ @@ -500,6 +509,53 @@ subroutine read_and_write(start, start_L, inode, ionode, & write(io_lun,fmt='(6x,"Primitive atom functions are the pseudo-atomic orbitals"/)') endif end if + ! Find DFT+U projectors + if(flag_DFTplusU) then + ! set w_plusUproj: U parameter values + max_npao = maxval(npao_species) + allocate(w_plusUproj_pao(n_species,max_npao)) + allocate(half_w_plusUproj_pao(n_species,max_npao)) + + flag_plusUproj_atom(:) =.false. + w_plusUproj_pao(:,:) = zero + half_w_plusUproj_pao(:,:) = zero + + do inum_plusUproj=1,num_plusUproj + ipao = 0 + i_species = info_plusUproj(inum_plusUproj,1) + do i_ang = 0, pao(i_species)%greatest_angmom + if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then + if (i_ang.eq.l_plusUproj) then + ! set U parameters for PAO with (n_plusUproj,l_plusUproj,z_plusUproj) + z_temp = 0 + do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom + prncpl = pao(i_species)%angmom(i_ang)%prncpl(i_zeta) + if (prncpl.ne.n_plusUproj) then + ipao = ipao + 2*i_ang + 1 + else if (prncpl.eq.n_plusUproj) then + z_temp = z_temp + 1 + if (z_temp.eq.z_plusUproj) then + do i_m = -i_ang,i_ang + ipao = ipao + 1 + w_plusUproj_pao(i_species,ipao) = plusUvalue + half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue + enddo ! m + else + ipao = ipao + 2*i_ang + 1 + endif + endif + enddo ! z + else + do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom + ipao = ipao + 2*i_ang + 1 + enddo + endif + endif + enddo ! anglar momentum + if (ipao.ne.npao_species(i_species)) & + call cq_abort("Error in counting PAOs when setting DFT+U parameters.") + enddo ! n_plusUproj + end if ! ! ! @@ -1902,20 +1958,11 @@ subroutine read_input(start, start_L, titles, vary_mu,& ! cutoff for PK matrix (PKrange) r_plusU = fdf_double('DM.PK_range_DFTplusU', one ) ! range for PK in DFT+U calculation ! 2024.05.20 nakata DFT+U - ! set w_plusUproj: U parameter values - max_npao = maxval(npao_species) - allocate(flag_plusUproj_atom(n_species)) - allocate(w_plusUproj_pao(n_species,max_npao)) - allocate(half_w_plusUproj_pao(n_species,max_npao)) - - flag_plusUproj_atom(:) =.false. - w_plusUproj_pao(:,:) = zero - half_w_plusUproj_pao(:,:) = zero - if (fdf_block('DFTplusU')) then num_plusUproj = 1 + block_end - block_start if(inode==ionode) write(io_lun,*) 'num_plusUproj =',num_plusUproj ! nakata 2024 debug allocate(info_plusUproj(num_plusUproj,5)) + allocate(flag_plusUproj_atom(n_species)) do inum_plusUproj=1,num_plusUproj z_plusUproj = 1 read(unit=input_array(block_start+inum_plusUproj-1),fmt=*) & @@ -1928,38 +1975,38 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_plusUproj_atom(i_species) = .true. - ipao = 0 - do i_ang = 0, pao(i_species)%greatest_angmom - if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then - if (i_ang.eq.l_plusUproj) then - ! set U parameters for PAO with (n_plusUproj,l_plusUproj,z_plusUproj) - z_temp = 0 - do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom - prncpl = pao(i_species)%angmom(i_ang)%prncpl(i_zeta) - if (prncpl.ne.n_plusUproj) then - ipao = ipao + 2*i_ang + 1 - else if (prncpl.eq.n_plusUproj) then - z_temp = z_temp + 1 - if (z_temp.eq.z_plusUproj) then - do i_m = -i_ang,i_ang - ipao = ipao + 1 - w_plusUproj_pao(i_species,ipao) = plusUvalue - half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue - enddo ! m - else - ipao = ipao + 2*i_ang + 1 - endif - endif - enddo ! z - else - do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom - ipao = ipao + 2*i_ang + 1 - enddo - endif - endif - enddo ! anglar momentum - if (ipao.ne.npao_species(i_species)) & - call cq_abort("Error in counting PAOs when setting DFT+U parameters.") + !%%!ipao = 0 + !%%!do i_ang = 0, pao(i_species)%greatest_angmom + !%%! if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then + !%%! if (i_ang.eq.l_plusUproj) then + !%%! ! set U parameters for PAO with (n_plusUproj,l_plusUproj,z_plusUproj) + !%%! z_temp = 0 + !%%! do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom + !%%! prncpl = pao(i_species)%angmom(i_ang)%prncpl(i_zeta) + !%%! if (prncpl.ne.n_plusUproj) then + !%%! ipao = ipao + 2*i_ang + 1 + !%%! else if (prncpl.eq.n_plusUproj) then + !%%! z_temp = z_temp + 1 + !%%! if (z_temp.eq.z_plusUproj) then + !%%! do i_m = -i_ang,i_ang + !%%! ipao = ipao + 1 + !%%! w_plusUproj_pao(i_species,ipao) = plusUvalue + !%%! half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue + !%%! enddo ! m + !%%! else + !%%! ipao = ipao + 2*i_ang + 1 + !%%! endif + !%%! endif + !%%! enddo ! z + !%%! else + !%%! do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom + !%%! ipao = ipao + 2*i_ang + 1 + !%%! enddo + !%%! endif + !%%! endif + !%%!enddo ! anglar momentum + !%%!if (ipao.ne.npao_species(i_species)) & + !%%! call cq_abort("Error in counting PAOs when setting DFT+U parameters.") enddo ! n_plusUproj call fdf_endblock else @@ -3075,7 +3122,8 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) write(io_lun,fmt='(4x,a40)') "| species n l zeta U-value (Ha) |" write(io_lun,fmt='(4x,a40)') '----------------------------------------' do n=1, num_plusUproj - write(io_lun,fmt='(4x,"|",i2,2x,a5,2x,i1,2x,i1,3x,i1,4x,f9.3,5x,"|")') & + !write(io_lun,fmt='(4x,"|",i2,2x,a5,2x,i1,2x,i1,3x,i1,4x,f9.3,5x,"|")') & + write(io_lun,fmt='(4x,"|",i2,2x,a5,2x,i1,2x,i1,3x,i1,4x,i4,5x,"|")') & info_plusUproj(n,1), species_label(info_plusUproj(n,1)), & info_plusUproj(n,2), info_plusUproj(n,3), info_plusUproj(n,4), info_plusUproj(n,5) end do From c8a2fe2e631d60200e27be760874e50e90f7b9d8 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Thu, 20 Mar 2025 15:57:14 +0000 Subject: [PATCH 03/16] Further updates to DFT+U Added flags to remove building of U matrix before first diagonalisation --- src/H_matrix_module.f90 | 11 +++--- src/SelfCon_module.f90 | 5 ++- src/energy_module.f90 | 2 +- src/global_module.f90 | 2 +- src/initial_read_module.f90 | 68 +++++++++++------------------------ src/initialisation_module.f90 | 7 ++-- src/matrix_data_module.f90 | 2 +- src/mult_module.f90 | 26 +++++++++++--- 8 files changed, 59 insertions(+), 64 deletions(-) diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index 8533c862d..e986de240 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -69,6 +69,7 @@ !! module H_matrix_module + use datatypes use global_module, only: io_lun use timer_module, only: start_timer, stop_timer, stop_print_timer use timer_module, only: start_backtrace, stop_backtrace @@ -91,7 +92,8 @@ module H_matrix_module integer :: num_plusUproj integer, dimension(:,:), allocatable :: info_plusUproj logical, dimension(:), allocatable :: flag_plusUproj_atom - real*8, dimension(:,:), allocatable :: w_plusUproj_pao, half_w_plusUproj_pao + real(double), dimension(:), allocatable :: plusUvalue + real(double), dimension(:,:), allocatable :: w_plusUproj_pao, half_w_plusUproj_pao !!! nakata DFT+U end !!*** @@ -227,7 +229,7 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & IPRINT_TIME_THRES1, & iprint_SC, & flag_perform_cDFT, & - flag_DFTplusU, & ! 2024.05.20 nakata DFT+U + flag_DFTplusU, flag_first_diag, & ! 2024.05.20 nakata DFT+U area_ops, nspin, nspin_SF, & spin_factor, blips, & flag_analytic_blip_int, & @@ -445,7 +447,7 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & end if !****lat>$ !!! 2024.5.20 nakata DFT+U - if(flag_DFTplusU) then + if(flag_DFTplusU.and.(.not.flag_first_diag)) then call get_plusU_matrix if (iprint_ops > 4) then @@ -2050,7 +2052,6 @@ subroutine get_plusU_matrix integer :: spin integer :: matW, matV, matOW, matPatomf, matPK, matPKP - call start_timer(tmr_l_tmp1,WITH_LEVEL) if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in set_OW' @@ -2226,7 +2227,7 @@ subroutine loop_W(iprim, j_in_halo, atom_spec, neigh_species, matW) val_Satomf = return_matrix_value_pos(matSatomf,wheremat) ! We assume the projector functions are simply chosen from PAOs, ! so OW = W = - val_W = val_Satomf + val_W = val_Satomf call store_matrix_value_pos(matW, wheremat,val_W) enddo ! pao_j endif ! projetor or not diff --git a/src/SelfCon_module.f90 b/src/SelfCon_module.f90 index f78558a19..c55fee0f5 100644 --- a/src/SelfCon_module.f90 +++ b/src/SelfCon_module.f90 @@ -225,7 +225,6 @@ subroutine new_SC_potl(record, self_tol, reset_L, fixed_potential, & ! Build H matrix *with NL and KE* call get_H_matrix(.true., fixed_potential, electrons, density, & maxngrid, backtrace_level) - ! The H matrix build is already timed on its own, so I leave out ! of the SC preliminaries (open to discussion) call start_timer(tmr_l_tmp1,WITH_LEVEL) @@ -1640,7 +1639,7 @@ subroutine get_new_rho(record, reset_L, fixed_potential, vary_mu, & use DMMin, only: FindMinDM use global_module, only: iprint_SC, atomf, flag_perform_cDFT, ne_in_cell, & nspin, spin_factor, flag_diagonalisation, flag_LFD, flag_Multisite, & - ne_spin_in_cell, nspin, flag_fix_spin_population + ne_spin_in_cell, nspin, flag_fix_spin_population, flag_first_diag use H_matrix_module, only: get_H_matrix, get_output_energies use S_matrix_module, only: get_S_matrix !use DiagModule, only: diagon @@ -1723,6 +1722,7 @@ subroutine get_new_rho(record, reset_L, fixed_potential, vary_mu, & ! Find Hartree, XC and local PS (i.e. NA) energies with output density call get_output_energies(rhoout, size) call get_energy(total_energy, .true., backtrace_level) ! Output DFT energy + if(flag_first_diag) flag_first_diag = .false. !****lat<$ call stop_backtrace(t=backtrace_timer,who='get_new_rho',echo=.true.) @@ -1819,7 +1819,6 @@ subroutine get_atomic_charge() end do end do call gsum(charge, ni_in_cell, nspin) - ! output if (inode == ionode) then ! write (*, *) 'Writing charge on individual atoms...' diff --git a/src/energy_module.f90 b/src/energy_module.f90 index 441aee9e4..53b155d76 100644 --- a/src/energy_module.f90 +++ b/src/energy_module.f90 @@ -565,7 +565,7 @@ subroutine final_energy(nkp,level) exx_energy = exx_energy & - spin_factor*half*exx_alpha*matrix_product_trace(matK(spin), matX(spin)) ! U/2*Tr[K (P-PKP)] ! 2024.05.20 nakata DFT+U - plusU_energy = plusU_energy & + if(flag_DFTplusU) plusU_energy = plusU_energy & - spin_factor*matrix_product_trace(matK(spin), matEplusU(spin)) end do diff --git a/src/global_module.f90 b/src/global_module.f90 index 35f878024..e72082618 100644 --- a/src/global_module.f90 +++ b/src/global_module.f90 @@ -427,7 +427,7 @@ module global_module integer, dimension(3) :: i_pol_dir ! Either n,0,0 or 1,2,3 ! DFT+U - logical :: flag_DFTplusU + logical :: flag_DFTplusU, flag_first_diag end module global_module !!*** diff --git a/src/initial_read_module.f90 b/src/initial_read_module.f90 index f2fba275b..fe33a961a 100644 --- a/src/initial_read_module.f90 +++ b/src/initial_read_module.f90 @@ -223,7 +223,7 @@ subroutine read_and_write(start, start_L, inode, ionode, & use md_control, only: md_position_file use pao_format use XC, only: flag_functional_type, flag_different_functional - use H_matrix_module, only: num_plusUproj, info_plusUproj, & ! 2024.05.20 nakata DFT+U + use H_matrix_module, only: num_plusUproj, info_plusUproj, plusUvalue, & ! 2024.05.20 nakata DFT+U flag_plusUproj_atom, w_plusUproj_pao, half_w_plusUproj_pao ! 2024.05.20 nakata DFT+U @@ -255,7 +255,7 @@ subroutine read_and_write(start, start_L, inode, ionode, & ! PlusU integer :: inum_plusUproj, & - n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue, & + n_plusUproj, l_plusUproj, z_plusUproj, & max_npao, z_temp, ipao, i_ang, i_zeta, i_m !****lat<$ @@ -516,13 +516,17 @@ subroutine read_and_write(start, start_L, inode, ionode, & allocate(w_plusUproj_pao(n_species,max_npao)) allocate(half_w_plusUproj_pao(n_species,max_npao)) - flag_plusUproj_atom(:) =.false. + !flag_plusUproj_atom(:) =.false. w_plusUproj_pao(:,:) = zero half_w_plusUproj_pao(:,:) = zero do inum_plusUproj=1,num_plusUproj ipao = 0 i_species = info_plusUproj(inum_plusUproj,1) + l_plusUproj = info_plusUproj(inum_plusUproj,3) + n_plusUproj = info_plusUproj(inum_plusUproj,2) + z_plusUproj = info_plusUproj(inum_plusUproj,4) + !plusUvalue = real(info_plusUproj(inum_plusUproj,5),double) do i_ang = 0, pao(i_species)%greatest_angmom if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then if (i_ang.eq.l_plusUproj) then @@ -537,8 +541,8 @@ subroutine read_and_write(start, start_L, inode, ionode, & if (z_temp.eq.z_plusUproj) then do i_m = -i_ang,i_ang ipao = ipao + 1 - w_plusUproj_pao(i_species,ipao) = plusUvalue - half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue + w_plusUproj_pao(i_species,ipao) = plusUvalue(i_species) + half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue(i_species) enddo ! m else ipao = ipao + 2*i_ang + 1 @@ -922,7 +926,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_write_DOS, flag_write_projected_DOS, & E_wf_min, E_wf_max, flag_wf_range_Ef, & mx_temp_matrices, flag_neutral_atom, flag_diagonalisation, & - flag_DFTplusU, & ! 2024.05.20 nakata DFT+U + flag_DFTplusU, flag_first_diag, & ! 2024.05.20 nakata DFT+U flag_SpinDependentSF, flag_Multisite, flag_LFD, flag_SFcoeffReuse, & flag_opt_cell, cell_constraint_flag, flag_variable_cell, & cell_en_tol, optcell_method, cell_stress_tol, & @@ -992,7 +996,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& use group_module, only: part_method, HILBERT, PYTHON use H_matrix_module, only: flag_write_locps, flag_dump_locps, & - num_plusUproj, info_plusUproj, & ! 2024.05.20 nakata DFT+U + num_plusUproj, info_plusUproj, plusUvalue, & ! 2024.05.20 nakata DFT+U flag_plusUproj_atom, w_plusUproj_pao, half_w_plusUproj_pao ! 2024.05.20 nakata DFT+U use pao_minimisation, only: InitStep_paomin use timer_module, only: time_threshold,lun_tmr, TimingOn, & @@ -1072,7 +1076,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& logical :: flag_ghost, find_species, test_ase !!! 2024.05.20 nakata DFT+U integer :: i_species, inum_plusUproj, prncpl, & - n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue, & + n_plusUproj, l_plusUproj, z_plusUproj, & !plusUvalue, & max_npao, z_temp, ipao, i_ang, i_zeta, i_m !!! nakata DFT+U end @@ -1392,6 +1396,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& end if !!! 2024.05.20 nakata DFT+U flag_DFTplusU = fdf_boolean('DM.DFTplusU', .false.) + if(flag_DFTplusU) flag_first_diag = .true. !!! nakata DFT+U end !!$ !!$ @@ -1963,50 +1968,19 @@ subroutine read_input(start, start_L, titles, vary_mu,& if(inode==ionode) write(io_lun,*) 'num_plusUproj =',num_plusUproj ! nakata 2024 debug allocate(info_plusUproj(num_plusUproj,5)) allocate(flag_plusUproj_atom(n_species)) + allocate(plusUvalue(n_species)) + plusUvalue = zero + flag_plusUproj_atom(:) = .false. do inum_plusUproj=1,num_plusUproj z_plusUproj = 1 read(unit=input_array(block_start+inum_plusUproj-1),fmt=*) & - i_species, n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue + i_species, n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue(i_species) info_plusUproj(inum_plusUproj,1) = i_species info_plusUproj(inum_plusUproj,2) = n_plusUproj info_plusUproj(inum_plusUproj,3) = l_plusUproj info_plusUproj(inum_plusUproj,4) = z_plusUproj - info_plusUproj(inum_plusUproj,5) = plusUvalue - + info_plusUproj(inum_plusUproj,5) = 0 flag_plusUproj_atom(i_species) = .true. - - !%%!ipao = 0 - !%%!do i_ang = 0, pao(i_species)%greatest_angmom - !%%! if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then - !%%! if (i_ang.eq.l_plusUproj) then - !%%! ! set U parameters for PAO with (n_plusUproj,l_plusUproj,z_plusUproj) - !%%! z_temp = 0 - !%%! do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom - !%%! prncpl = pao(i_species)%angmom(i_ang)%prncpl(i_zeta) - !%%! if (prncpl.ne.n_plusUproj) then - !%%! ipao = ipao + 2*i_ang + 1 - !%%! else if (prncpl.eq.n_plusUproj) then - !%%! z_temp = z_temp + 1 - !%%! if (z_temp.eq.z_plusUproj) then - !%%! do i_m = -i_ang,i_ang - !%%! ipao = ipao + 1 - !%%! w_plusUproj_pao(i_species,ipao) = plusUvalue - !%%! half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue - !%%! enddo ! m - !%%! else - !%%! ipao = ipao + 2*i_ang + 1 - !%%! endif - !%%! endif - !%%! enddo ! z - !%%! else - !%%! do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom - !%%! ipao = ipao + 2*i_ang + 1 - !%%! enddo - !%%! endif - !%%! endif - !%%!enddo ! anglar momentum - !%%!if (ipao.ne.npao_species(i_species)) & - !%%! call cq_abort("Error in counting PAOs when setting DFT+U parameters.") enddo ! n_plusUproj call fdf_endblock else @@ -2883,7 +2857,7 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) flag_self_consistent, flag_vary_basis, iprint_init, flag_pcc_global, & nspin, flag_SpinDependentSF, flag_fix_spin_population, ne_spin_in_cell, flag_XLBOMD,& ase_file, flag_DFTplusU ! 2024.05.20 nakata DFT+U - use H_matrix_module, only: num_plusUproj, info_plusUproj ! 2024.05.20 nakata DFT+U + use H_matrix_module, only: num_plusUproj, info_plusUproj, plusUvalue ! 2024.05.20 nakata DFT+U use SelfCon, only: maxitersSC use GenComms, only: cq_abort use minimise, only: energy_tolerance, L_tolerance, & @@ -3123,9 +3097,9 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) write(io_lun,fmt='(4x,a40)') '----------------------------------------' do n=1, num_plusUproj !write(io_lun,fmt='(4x,"|",i2,2x,a5,2x,i1,2x,i1,3x,i1,4x,f9.3,5x,"|")') & - write(io_lun,fmt='(4x,"|",i2,2x,a5,2x,i1,2x,i1,3x,i1,4x,i4,5x,"|")') & + write(io_lun,fmt='(4x,"|",i2,2x,a5,4x,i1,2x,i1,2x,i1,4x,f5.3,5x,"|")') & info_plusUproj(n,1), species_label(info_plusUproj(n,1)), & - info_plusUproj(n,2), info_plusUproj(n,3), info_plusUproj(n,4), info_plusUproj(n,5) + info_plusUproj(n,2), info_plusUproj(n,3), info_plusUproj(n,4), plusUvalue(info_plusUproj(n,1))!info_plusUproj(n,5) end do endif !!! nakata DFT+U end diff --git a/src/initialisation_module.f90 b/src/initialisation_module.f90 index b226ce8c2..e85180847 100644 --- a/src/initialisation_module.f90 +++ b/src/initialisation_module.f90 @@ -1150,7 +1150,7 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & ! Local variables type(cq_timer) :: backtrace_timer integer :: backtrace_level - logical :: reset_L, record, rebuild_KE_NL + logical :: reset_L, record, rebuild_KE_NL, flag_orig_DFTU integer :: nfile, symm real(double) :: electrons_tot real(double), dimension(nspin) :: electrons, energy_tmp @@ -1178,7 +1178,9 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & !2020Jan07 tsuyoshi !index_MatrixFile is read from Conquest_input (default is 0) - MDinit_step = 0 + MDinit_step = 0 + flag_orig_DFTU = flag_DFTplusU + flag_DFTplusU = .false. if (flag_MDcontinue.or. & restart_DM.or. & @@ -1496,6 +1498,7 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & stop end if + flag_DFTplusU = flag_orig_DFTU !****lat<$ call stop_backtrace(t=backtrace_timer,who='initial_H',echo=.true.) !****lat>$ diff --git a/src/matrix_data_module.f90 b/src/matrix_data_module.f90 index eb901aabe..c005eed70 100644 --- a/src/matrix_data_module.f90 +++ b/src/matrix_data_module.f90 @@ -76,7 +76,7 @@ module matrix_data ! This will need to change if the above parameters are changed ! integer, parameter :: mx_matrices = 32 ! 2024.05.20 nakata DFT+U - integer, parameter :: mx_matrices = 37 + integer, parameter :: mx_matrices = 54 ! From 37... ! Store ALL indices in a large array type(matrix), allocatable, dimension(:,:), target :: mat diff --git a/src/mult_module.f90 b/src/mult_module.f90 index 1a6098e3b..9ff0d5608 100644 --- a/src/mult_module.f90 +++ b/src/mult_module.f90 @@ -1209,7 +1209,11 @@ subroutine immi(parts, prim, gcs, myid, partial) mult(P_K_PK)%parts => parts mult(P_K_PK)%prim => prim mult(P_K_PK)%gcs => gcs - call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) + if (atomf.ne.sf) then + call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) + else + call mult_ini(mult(P_K_PK), Hmatind, myid-1, prim%n_prim, parts) + end if else mult(P_K_PK)%mult_type = 2 mult(P_K_PK)%amat => mat(1:prim%groups_on_node,PKrange) @@ -1222,7 +1226,11 @@ subroutine immi(parts, prim, gcs, myid, partial) mult(P_K_PK)%parts => parts mult(P_K_PK)%prim => prim mult(P_K_PK)%gcs => gcs - call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) + if (atomf.ne.sf) then + call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) + else + call mult_ini(mult(P_K_PK), Hmatind, myid-1, prim%n_prim, parts) + end if endif ra = rcut(PKrange) rc = rcut(aHa_range) @@ -1238,7 +1246,12 @@ subroutine immi(parts, prim, gcs, myid, partial) mult(PK_P_PKP)%parts => parts mult(PK_P_PKP)%prim => prim mult(PK_P_PKP)%gcs => gcs - call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) + !call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) + if (atomf.ne.sf) then + call mult_ini(mult(PK_P_PKP), aSa_matind, myid-1, prim%n_prim, parts) + else + call mult_ini(mult(PK_P_PKP), Smatind, myid-1, prim%n_prim, parts) + end if else mult(PK_P_PKP)%mult_type = 2 mult(PK_P_PKP)%amat => mat(1:prim%groups_on_node,aHa_range) @@ -1251,7 +1264,12 @@ subroutine immi(parts, prim, gcs, myid, partial) mult(PK_P_PKP)%parts => parts mult(PK_P_PKP)%prim => prim mult(PK_P_PKP)%gcs => gcs - call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) + if (atomf.ne.sf) then + call mult_ini(mult(PK_P_PKP), aSa_matind, myid-1, prim%n_prim, parts) + else + call mult_ini(mult(PK_P_PKP), Smatind, myid-1, prim%n_prim, parts) + end if + !call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) endif endif !!! nakata DFT+U end From 109d5448da34474698404707db2035e731ddbae8 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Fri, 28 Mar 2025 14:03:58 +0000 Subject: [PATCH 04/16] Working implementation of DFT+U The energy correction for Harris-Foulkes is now implemented and the matrices are constructed relatively simply; this version now works for AFM NiO --- src/H_matrix_module.f90 | 146 +++++++++++++++++++++------------------- src/energy_module.f90 | 5 +- 2 files changed, 79 insertions(+), 72 deletions(-) diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index e986de240..8c150507f 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -448,7 +448,8 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & !****lat>$ !!! 2024.5.20 nakata DFT+U if(flag_DFTplusU.and.(.not.flag_first_diag)) then - call get_plusU_matrix + ! For KE, NL and PU matrices we only need rebuild when updating atom functions + call get_plusU_matrix(rebuild_KE_NL) if (iprint_ops > 4) then if (nspin == 1) then @@ -2024,7 +2025,7 @@ end subroutine matrix_scale_diag !! !! SOURCE !! - subroutine get_plusU_matrix + subroutine get_plusU_matrix(flag_rebuild) use datatypes use numbers @@ -2036,21 +2037,28 @@ subroutine get_plusU_matrix use cover_module, ONLY: BCS_parts use matrix_data, ONLY: mat, halo, aSa_range, aHa_range, PKrange, & pUa_range, aUp_range, pUp_range, aUa_range - use mult_module, ONLY: mult, allocate_temp_matrix, free_temp_matrix, & + use mult_module, ONLY: mult, mat_p, allocate_temp_matrix, free_temp_matrix, matrix_pos, return_matrix_value_pos, store_matrix_value_pos, & matrix_product, matrix_scale, matrix_transpose, matrix_sum, & - matKatomf, matHplusUatomf, matEplusUatomf, & - aUa_trans, PK_trans, pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP + matKatomf, matHplusUatomf, matEplusUatomf, matHatomf, matSatomf,& + aUa_trans, PK_trans, pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP, matrix_trace, matrix_product_trace + use species_module, ONLY: npao_species use timer_module + use pao_format + use energy, ONLY: delta_E_plusU implicit none + ! Passed variables + logical :: flag_rebuild ! To be used later if we decide to keep P and PU (and V and W?) + ! Local variables integer :: part, memb, neigh, ist, atom_num, atom_spec, iprim integer :: gcspart, neigh_global_part, neigh_global_num, neigh_species - real(double) :: dx, dy, dz, r2 + real(double) :: dx, dy, dz, r2, trace, fac, val_Satomf type(cq_timer) :: tmr_l_tmp1 - integer :: spin - integer :: matW, matV, matOW, matPatomf, matPK, matPKP + integer :: spin, ipao, loc, npao_i, jpao, npao_j, pao_i, pao_j, wheremat + integer :: matW, matV, matOW, matPatomf, matPU, matPK, matPKP, matUW + integer :: iU, l1, nacz1, m1 call start_timer(tmr_l_tmp1,WITH_LEVEL) if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in set_OW' @@ -2058,25 +2066,22 @@ subroutine get_plusU_matrix ! prepare matrices matW = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) matV = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) - ! assume OW = W -! matO = allocate_temp_matrix(pUp_range, 0) -! matOW = allocate_temp_matrix(pUa_range, 0) - matOW = matW + matUW = allocate_temp_matrix(pUa_range, 0) ! This is UW +! matOW = matW ! matPatomf = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) + matPU = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) matPK = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) ! PKPrange = aHa_range matPKP = allocate_temp_matrix(aHa_range, 0) -! matTemp = allocate_temp_matrix(aHa_range, 0) -! if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,i5,A)') myid, ' Zeroing matW, V and OW' call matrix_scale(zero,matW) call matrix_scale(zero,matV) -! call matrix_scale(zero,matOW) + call matrix_scale(zero,matUW) call matrix_scale(zero,matPatomf) if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' Done Zeroing' - ! make W and OW + ! make W and UW iprim = 0 do part = 1,bundle%groups_on_node ! Loop over primary set partitions if(iprint_ops + min_layer>=6.AND.myid==0) write(io_lun,fmt='(6x,"Processor, partition: ",2i7)') myid,part @@ -2089,6 +2094,7 @@ subroutine get_plusU_matrix if(iprint_ops + min_layer>=6.AND.myid==0) write(io_lun,'(6x,"Processor, atom, spec: ",3i7)') myid,memb,atom_spec ! If iprim is a DFT+U projector atom if(flag_plusUproj_atom(atom_spec)) then + npao_i = npao_species(atom_spec) do neigh = 1, mat(part,aSa_range)%n_nab(memb) ! Loop over neighbours of atom ist = mat(part,aSa_range)%i_acc(memb)+neigh-1 ! Build the distances between atoms - needed for phases @@ -2098,28 +2104,36 @@ subroutine get_plusU_matrix neigh_global_num = id_glob(parts%icell_beg(neigh_global_part)+mat(part,aSa_range)%i_seq(ist)-1) neigh_species = species_glob(neigh_global_num) ! Now loop over PAOs - call loop_W(iprim,halo(aSa_range)%i_halo(gcspart),atom_spec,neigh_species,matW) - !! At present, - !! projector functions are assumed to be one of the PAOs of projector atoms, so OW = W. - !! Then skip the calculations of O - !call loop_O_onsite + npao_j = npao_species(neigh_species) + ! Loop over PAOs on i + do pao_i = 1, npao_i + fac = half_w_plusUproj_pao(atom_spec,pao_i) + if (abs(fac)>RD_ERR) then ! if pao_i is one of the U projectors of atom_i + ! Loop over PAOs on j + do pao_j = 1, npao_j + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i,pao_j) + val_Satomf = return_matrix_value_pos(matSatomf,wheremat) + ! We assume the projector functions are simply chosen from PAOs, + ! so OW = W = + call store_matrix_value_pos(matW, wheremat,val_Satomf) + call store_matrix_value_pos(matUW, wheremat,val_Satomf*fac) + enddo ! pao_j + end if + enddo ! pao_i + !call loop_W(iprim,halo(aSa_range)%i_halo(gcspart),atom_spec,neigh_species,matW,matUW) end do ! neigh endif ! projector end do ! memb end if ! nm_nodgroup > 0 end do ! part - ! make OW - ! call make_OW - ! OR - ! OW = matrix_product(matO, matV, matOW, mult(pOp_pWa_pOWa)) - ! for now, matOW = matW - ! make V = transpose of W call matrix_transpose(matW, matV) - ! make P(atomf,atomf) = V(atomf,proj) * OW(proj,atomf) - call matrix_product(matV, matOW, matPatomf, mult(aVp_pOWa_aPa)) + ! make P(atomf,atomf) = V(atomf,proj) * OW(proj,atomf) and PU = V.UW + call matrix_product(matV, matW, matPatomf, mult(aVp_pOWa_aPa)) + ! Create PU, which is V.UW (include U here to allow different U for different atoms) + call matrix_product(matV, matUW, matPU, mult(aVp_pOWa_aPa)) ! Later P will be changed from PAO-basis to SF-basis !if (flag_do_SFtransform) then @@ -2129,44 +2143,31 @@ subroutine get_plusU_matrix !endif ! H(DFT+U) = U/2 * (P-2PKP) - + delta_E_plusU = zero do spin = 1, nspin - if (iprint_ops > 4 .and. nspin == 2) then - if (inode == ionode) write (io_lun, '(1x,"For spin = ",i1," :")') spin - end if call matrix_scale(zero,matPK) call matrix_scale(zero,matPKP) - !!! K should be in atomf-basis - call matrix_product(matPatomf, matKatomf(spin), matPK, mult(P_K_PK)) + ! Working in atomf basis, create (U/2).PKP + call matrix_product(matPU, matKatomf(spin), matPK, mult(P_K_PK)) call matrix_product(matPK, matPatomf, matPKP, mult(PK_P_PKP)) ! E(DFT+U) = U/2 * (PK-PKPK), - ! construct (P-PKP) here, and another K will be multiplied later in sub:get_energy - call matrix_scale(zero,matEplusUatomf(spin)) -! call matrix_scale(zero,matTemp) -! call matrix_sum(zero, matTemp, one, matP) -! call matrix_sum(one, matTemp, -one, matPKP) -! call multiply_U(matTemp,matEplusU_atomf(spin),aUa_range) - call matrix_sum_multiply_U(1,matPatomf,matPKP,matEplusUatomf(spin),aHa_range) + call matrix_sum(zero, matEplusUatomf(spin), one , matPU) + call matrix_sum(one, matEplusUatomf(spin), -one, matPKP) ! H(DFT+U) = U/2 * (P-2PKP) - call matrix_scale(zero,matHplusUatomf(spin)) -! call matrix_scale(zero,matTemp) -! call matrix_sum(zero, matTemp, one, matPatomf) -! call matrix_sum(one, matTemp, -two, matPKP(ss)) -! call multiply_U(matTemp,matHplusUatomf(spin),aUa_range) - call matrix_sum_multiply_U(2,matEplusUatomf(spin),matPKP,matHplusUatomf(spin),aHa_range) - - ! OR - ! construct U - ! call matrix_product(matU, matHtemp(spin), matHplusU(spin), mult(???)) - ! + call matrix_sum(zero, matHplusUatomf(spin), one , matPU) + call matrix_sum(one, matHplusUatomf(spin), -two, matPKP) + ! Double counting term + trace = matrix_product_trace(matPKP,matKatomf(spin)) + delta_E_plusU = delta_E_plusU + trace enddo call free_temp_matrix(matPKP) call free_temp_matrix(matPK) + call free_temp_matrix(matPU) call free_temp_matrix(matPatomf) -! call free_temp_matrix(matOW) + call free_temp_matrix(matUW) call free_temp_matrix(matV) call free_temp_matrix(matW) @@ -2198,29 +2199,29 @@ end subroutine get_plusU_matrix !! !! SOURCE !! - subroutine loop_W(iprim, j_in_halo, atom_spec, neigh_species, matW) + subroutine loop_W(iprim, j_in_halo, atom_spec, neigh_species, matW, matUW) use numbers - use mult_module, ONLY: matSatomf, return_matrix_value_pos, store_matrix_value_pos, matrix_pos + use mult_module, ONLY: matSatomf, return_matrix_value_pos, store_matrix_value_pos, matrix_pos, matKatomf use pao_format use species_module, ONLY: npao_species implicit none ! Passed variables - integer, intent(in) :: iprim, j_in_halo, atom_spec, neigh_species, matW + integer, intent(in) :: iprim, j_in_halo, atom_spec, neigh_species, matW, matUW ! Local variables integer :: wheremat - real(double) :: val_Satomf, val_W + real(double) :: val_Satomf, val_W, fac integer :: npao_i, npao_j, pao_i, pao_j npao_i = npao_species(atom_spec) npao_j = npao_species(neigh_species) - ! Loop over PAOs on i do pao_i = 1, npao_i - if (w_plusUproj_pao(atom_spec,pao_i).ne.zero) then ! if pao_i is one of the U projectors of atom_i + fac = half_w_plusUproj_pao(atom_spec,pao_i) + if (abs(fac)>RD_ERR) then ! if pao_i is one of the U projectors of atom_i ! Loop over PAOs on j do pao_j = 1, npao_j wheremat = matrix_pos(matSatomf,iprim,j_in_halo,pao_i,pao_j) @@ -2229,10 +2230,10 @@ subroutine loop_W(iprim, j_in_halo, atom_spec, neigh_species, matW) ! so OW = W = val_W = val_Satomf call store_matrix_value_pos(matW, wheremat,val_W) + call store_matrix_value_pos(matUW, wheremat,val_W*fac) enddo ! pao_j endif ! projetor or not enddo ! pao_i -! return end subroutine loop_W !!*** @@ -2366,7 +2367,7 @@ subroutine matrix_sum_multiply_U(calctype,matA,matB,matC,aCa_range) integer :: calctype, matA, matB, matC, aCa_range ! Local variables - integer :: iprim, part, memb, atom_num, atom_spec, npao_i, loc, ipao + integer :: iprim, part, memb, atom_num, atom_spec, npao_i, loc, ipao, jpao real(double) :: val @@ -2392,9 +2393,12 @@ subroutine matrix_sum_multiply_U(calctype,matA,matB,matC,aCa_range) !if (loc > mat_p(matC)%length) & ! call cq_abort("Overflow error in trace: ", loc, mat_p(matC)%length) do ipao = 1, npao_i - loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) ! position of diagonal element - val = mat_p(matA)%matrix(loc) - mat_p(matB)%matrix(loc) ! P-PKP - mat_p(matC)%matrix(loc) = half_w_plusUproj_pao(atom_spec,ipao) * val ! U/2*(P-PKP) + do jpao = 1,npao_i + !loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) ! position of diagonal element + loc = (ipao - 1) * npao_i + jpao - 1 + mat(part,aCa_range)%onsite(memb) + val = mat_p(matA)%matrix(loc) - mat_p(matB)%matrix(loc) ! P-PKP + mat_p(matC)%matrix(loc) = half_w_plusUproj_pao(atom_spec,ipao) * val ! U/2*(P-PKP) + end do end do ! ipao endif ! flag_plusUproj_atom enddo ! memb @@ -2412,13 +2416,13 @@ subroutine matrix_sum_multiply_U(calctype,matA,matB,matC,aCa_range) ! considering U only for diagonal elements if(flag_plusUproj_atom(atom_spec)) then npao_i = mat(part,aCa_range)%ndimi(memb) ! number of PAOs of i - loc = (npao_i - 1) * npao_i + npao_i - 1 + mat(part,aCa_range)%onsite(memb) - !if (loc > mat_p(matC)%length) & - ! call cq_abort("Overflow error in trace: ", loc, mat_p(matC)%length) do ipao = 1, npao_i - loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) - mat_p(matC)%matrix(loc) = mat_p(matA)%matrix(loc) & ! U/2(P-PKP) - -half_w_plusUproj_pao(atom_spec,ipao) * mat_p(matB)%matrix(loc) ! -U/2(PKP) + do jpao = 1,npao_i + !loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) + loc = (ipao - 1) * npao_i + jpao - 1 + mat(part,aCa_range)%onsite(memb) + mat_p(matC)%matrix(loc) = mat_p(matA)%matrix(loc) & ! U/2(P-PKP) + -half_w_plusUproj_pao(atom_spec,ipao) * mat_p(matB)%matrix(loc) ! -U/2(PKP) + end do end do ! ipao endif ! flag_plusUproj_atom enddo ! memb diff --git a/src/energy_module.f90 b/src/energy_module.f90 index 53b155d76..2f859a6ce 100644 --- a/src/energy_module.f90 +++ b/src/energy_module.f90 @@ -77,6 +77,7 @@ module energy real(double) :: cdft_energy real(double) :: exx_energy real(double) :: plusU_energy ! 2024.05.20 nakata DFT+U + real(double) :: delta_E_plusU ! 2025/03/27 dave real(double) :: x_energy real(double) :: disp_energy real(double) :: delta_E_hartree @@ -259,6 +260,7 @@ subroutine get_energy(total_energy, printDFT, level) total_energy = band_energy + delta_E_hartree + delta_E_xc + & ion_interaction_energy + core_correction end if + if (flag_DFTplusU) total_energy = total_energy + delta_E_plusU ! Add contribution from constrained (cDFT) if (flag_perform_cdft) total_energy = total_energy + cdft_energy @@ -566,7 +568,7 @@ subroutine final_energy(nkp,level) - spin_factor*half*exx_alpha*matrix_product_trace(matK(spin), matX(spin)) ! U/2*Tr[K (P-PKP)] ! 2024.05.20 nakata DFT+U if(flag_DFTplusU) plusU_energy = plusU_energy & - - spin_factor*matrix_product_trace(matK(spin), matEplusU(spin)) + + spin_factor*matrix_product_trace(matK(spin), matEplusU(spin)) end do ! Find total pure DFT energy @@ -585,6 +587,7 @@ subroutine final_energy(nkp,level) ion_interaction_energy + & core_correction end if + if (flag_DFTplusU) total_energy1 = total_energy1 + delta_E_plusU ! Add contribution from constrained (cDFT) if (flag_perform_cdft) total_energy1 = total_energy1 + cdft_energy From c48aea124ca5b1f0afbeffbc8bce8be8288fb9a5 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 11 Jun 2025 17:27:16 +0900 Subject: [PATCH 05/16] Initial formulation for force and stress This compiles and runs, but the calculated forces and stresses are zero (incorrectly!). There is some error or misunderstanding in the formulation of the forces which I will fix as soon as I can find it! --- src/force_module.f90 | 385 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 381 insertions(+), 4 deletions(-) diff --git a/src/force_module.f90 b/src/force_module.f90 index ef752c71b..9689ccad3 100644 --- a/src/force_module.f90 +++ b/src/force_module.f90 @@ -104,7 +104,7 @@ module force_module real(double), dimension(3,3), target :: stress real(double), dimension(3,3) :: SP_stress, KE_stress, NL_stress, & PP_stress, GPV_stress, XC_stress, & - nonSCF_stress, pcc_stress, NA_stress + nonSCF_stress, pcc_stress, NA_stress, PlusU_stress ! How much we mix input and output densities for the calculations of XC_GGA_stress ! during non-SCF simulations (defaults to half for averaging) @@ -256,7 +256,7 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & area_moveatoms, flag_pcc_global, & flag_perform_cdft, flag_dft_d2, & nspin, spin_factor, & - flag_analytic_blip_int, & + flag_analytic_blip_int, flag_DFTplusU, & flag_neutral_atom, flag_stress, & rcellx, rcelly, rcellz, flag_mix_L_SC_min, & flag_atomic_stress, non_atomic_stress, & @@ -303,7 +303,7 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & HF_NL_force, & KE_force, & nonSC_force, & - pcc_force, NA_force + pcc_force, NA_force, PlusU_force real(double), dimension(:), allocatable :: density_out_tot real(double), dimension(:,:), allocatable :: density_out character(len=1), dimension(3) :: comptstr = (/"x", "y", "z"/) @@ -346,6 +346,13 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & call reg_alloc_mem(area_moveatoms, 3 * ni_in_cell, type_dbl) cdft_force = zero end if + if(flag_DFTplusU) then + allocate(PlusU_force(3,ni_in_cell), STAT=stat) + if (stat /= 0) & + call cq_abort("Error allocating PlusU_force: ", ni_in_cell) + call reg_alloc_mem(area_moveatoms, 3 * ni_in_cell, type_dbl) + PlusU_force = zero + end if if(iprint_MD + min_layer>3) then allocate(s_pulay_for(3,ni_in_cell),phi_pulay_for(3,ni_in_cell)) s_pulay_for = zero @@ -381,6 +388,7 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & pcc_stress = zero nonSCF_stress = zero if(flag_neutral_atom_projector) NA_stress = zero + PlusU_stress = zero ! Probably wrong to call this GPV; it's really a jacobian term, from the change in the ! integration volume element for grid-based integrals ! Different definitions for non-SCF and SCF @@ -521,6 +529,7 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & call stop_print_timer(tmr_l_tmp1, "kinetic energy force", & IPRINT_TIME_THRES2) if(flag_neutral_atom_projector) call get_HNA_force(NA_force) + if(flag_DFTplusU) call get_DFT_plus_U_force(PlusU_force, ni_in_cell) max_force = zero max_atom = 0 max_compt = 0 @@ -607,6 +616,8 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & tot_force(j,i) = tot_force(j,i) + disp_force(j,i) if(flag_neutral_atom_projector) & tot_force(j,i) = tot_force(j,i) + NA_force(j,i) + if(flag_DFTplusU) & + tot_force(j,i) = tot_force(j,i) + PlusU_force(j,i) ! Zero force on fixed atoms if (.not. flag_move_atom(j,i)) then tot_force(j,i) = zero @@ -633,6 +644,9 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & write (io_lun, fmt='(4x,a,3f15.10)') trim(prefix)//" S pulay : ", & (for_conv*s_pulay_for(j,i),j=1,3) end if + if(flag_DFTplusU) & + write (io_lun, fmt='(4x,a,3f15.10)') trim(prefix)//" Force DFT+U : ", & + (for_conv*PlusU_force(j,i),j=1,3) write(io_lun, 104) trim(prefix),(for_conv * KE_force(j,i), j = 1, 3) if(flag_neutral_atom) then write(io_lun, 106) trim(prefix),(for_conv * screened_ion_force(j,i), j = 1, 3) @@ -700,7 +714,7 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & if (flag_neutral_atom_projector) then stress(dir1,dir2) = stress(dir1,dir2) + NA_stress(dir1,dir2) end if - + if(flag_DFTplusU) stress(dir1,dir2) = stress(dir1,dir2) + PlusU_stress(dir1,dir2) end do end do else @@ -713,6 +727,7 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & Hartree_stress(dir1,dir2) + loc_HF_stress(dir1,dir2) + & loc_G_stress(dir1,dir2) + pcc_stress(dir1,dir2) + & nonSCF_stress(dir1,dir2) + if(flag_DFTplusU) stress(dir1,dir2) = stress(dir1,dir2) + PlusU_stress(dir1,dir2) if (flag_atomic_stress) then ! non-atomic ion_interaction_stress added in ! ion_electrostatic_module - zamaan @@ -773,6 +788,7 @@ subroutine force(fixed_potential, vary_mu, n_cg_L_iterations, & call print_stress(trim(prefix)//" K.E. stress: ", KE_stress, 3) call print_stress(trim(prefix)//" S-Pulay stress: ", SP_stress, 3) call print_stress(trim(prefix)//" Phi-Pulay stress: ", PP_stress, 3) + if(flag_DFTplusU) call print_stress(trim(prefix)//" DFT+U stress: ", PlusU_stress, 3) call print_stress(trim(prefix)//" Local stress: ", loc_HF_stress, 3) call print_stress(trim(prefix)//" Local G stress: ", loc_G_stress, 3) call print_stress(trim(prefix)//" Non-local stress: ", NL_stress, 3) @@ -2422,6 +2438,367 @@ subroutine get_HF_non_local_force(HF_NL_force, what_force, n_atoms) end subroutine get_HF_non_local_force !!*** + subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) + + use datatypes + use numbers + use matrix_data, only: mat, halo, aSa_range, aHa_range, PKrange, & + pUa_range, aUp_range, pUp_range, aUa_range + use mult_module, only: mult, mat_p, allocate_temp_matrix, free_temp_matrix, matrix_pos, & + return_matrix_value_pos, store_matrix_value_pos, return_matrix_value, store_matrix_value, & + matrix_product, matrix_scale, matrix_transpose, matrix_sum, & + matKatomf, matHplusUatomf, matEplusUatomf, matHatomf, matSatomf,& + aUa_trans, PK_trans, pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP, matrix_trace, matrix_product_trace + use species_module, only: npao_species + use GenComms, only: gsum, cq_abort, inode, & + ionode, myid + use global_module, only: iprint_MD, flag_basis_set, & + blips, PAOs, atomf, & + nspin, spin_factor, & + id_glob, species_glob, & + flag_analytic_blip_int, & + ni_in_cell, flag_full_stress, & + flag_stress, flag_atomic_stress, & + area_moveatoms + use H_matrix_module, only: flag_plusUproj_atom, half_w_plusUproj_pao + ! TEMP + use build_PAO_matrices, only: assemble_deriv_2 + use group_module, only: parts + use primary_module, only: bundle + use cover_module, only: BCS_parts + + implicit none + + ! Passed variables + integer :: n_atoms + real(double), dimension(3,n_atoms) :: DFT_plus_U_force + + ! Local variables + + integer :: matV, matW, matUW, matPatomf, matPK, matKP, matKPa, matKPK, mat_tmp, matPKP + integer, dimension(nspin) :: matKb, matVK, matWK ! Stores K - 2KPK + integer, dimension(3) :: matdV, matdW, matdUW + integer, dimension(3,3) :: matdVr, matdWr + integer :: dir1, dir2, k, l, stat, dpseudofns, np, nn, i, i1, i2, & + spec, this_nsf, this_nlpf, ni, spin, atom_num, atom_spec, memb, neigh, & + npao_i, npao_j, pao_i, pao_j, part + integer :: iprim, gcspart, ist, nab, neigh_global_num, & + neigh_global_part, neigh_species, wheremat, isf, jsf + real(double) :: dx, dy, dz, thisdAP, fac, val_Satomf + real(double), dimension(3,3) :: PlusU_stress + real(double), dimension(:,:,:), allocatable :: NL_P_atomic, NL_HF_atomic + real(double), dimension(3) :: r_str + type(cq_timer) :: backtrace_timer + + call start_backtrace(t=backtrace_timer,who='get_DFT_plus_U_force',where=7,level=3,echo=.true.) + + ! Make P + matW = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) + matV = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + matUW = allocate_temp_matrix(pUa_range, 0) ! This is UW + matPatomf = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) + matPK = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) + matKPK = matPK ! Label only + matPKP = allocate_temp_matrix(aHa_range, 0) + matKP = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) + matKPa = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) + do spin = 1, nspin + matKb(spin) = allocate_temp_matrix(aHa_range, 0, atomf, atomf) + matWK(spin) = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) + matVK(spin) = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + end do + call matrix_scale(zero,matW) + call matrix_scale(zero,matV) + call matrix_scale(zero,matUW) + call matrix_scale(zero,matPatomf) + ! make W and UW + iprim = 0 + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms + atom_num = bundle%nm_nodbeg(part)+memb-1 + iprim=iprim+1 + ! Atomic species + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom + if(flag_plusUproj_atom(atom_spec)) then + npao_i = npao_species(atom_spec) + do neigh = 1, mat(part,aSa_range)%n_nab(memb) ! Loop over neighbours of atom + ist = mat(part,aSa_range)%i_acc(memb)+neigh-1 + ! Build the distances between atoms - needed for phases + gcspart = BCS_parts%icover_ibeg(mat(part,aSa_range)%i_part(ist))+mat(part,aSa_range)%i_seq(ist)-1 + ! We need to know the species of neighbour + neigh_global_part = BCS_parts%lab_cell(mat(part,aSa_range)%i_part(ist)) + neigh_global_num = id_glob(parts%icell_beg(neigh_global_part)+mat(part,aSa_range)%i_seq(ist)-1) + neigh_species = species_glob(neigh_global_num) + ! Now loop over PAOs + npao_j = npao_species(neigh_species) + ! Loop over PAOs on i + do pao_i = 1, npao_i + fac = half_w_plusUproj_pao(atom_spec,pao_i) + if (abs(fac)>RD_ERR) then ! if pao_i is one of the U projectors of atom_i + ! Loop over PAOs on j + do pao_j = 1, npao_j + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i,pao_j) + val_Satomf = return_matrix_value_pos(matSatomf,wheremat) + ! We assume the projector functions are simply chosen from PAOs, + ! so OW = W = + call store_matrix_value_pos(matW, wheremat,val_Satomf) + call store_matrix_value_pos(matUW, wheremat,val_Satomf*fac) + enddo ! pao_j + end if + enddo ! pao_i + end do ! neigh + endif ! projector + end do ! memb + end if ! nm_nodgroup > 0 + end do ! part + + ! make V = transpose of W + call matrix_transpose(matW, matV) + + ! make P(atomf,atomf) = V(atomf,proj) * OW(proj,atomf) and K - 2KPK + call matrix_product(matV, matW, matPatomf, mult(aVp_pOWa_aPa)) + do spin = 1, nspin + call matrix_scale(zero,matPK) + call matrix_product(matPatomf, matKatomf(spin), matPK, mult(P_K_PK)) + call matrix_transpose(matPK, matKP) + ! Test + !call matrix_product(matPK, matPatomf, matPKP, mult(PK_P_PKP)) + !write(*,*) 'Trace of PKP.K: ',matrix_product_trace(matPKP,matKatomf(spin)) + ! We will use PK in a moment + call matrix_scale(zero,matPK) + ! KPa is KP to range P + call matrix_sum(zero,matKPa,one,matKP) + ! KP.K calculated to range PK + call matrix_product(matKPa,matKatomf(spin), matKPK, mult(P_K_PK)) + ! Now build K - 2KPK + call matrix_sum(zero,matKb(spin),one,matKatomf(spin)) + call matrix_sum(one,matKb(spin),-two,matKPK) + !write(*,*) 'Trace of PKP.K: ',matrix_product_trace(matPKP,matKb(spin)) + end do + ! Assemble dV.UW + V.dUW (both Pulay terms) + ! Allocate matrices + mat_tmp = allocate_temp_matrix(aSa_range, 0, atomf, atomf) + do k = 1, 3 + matdW(k) = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) + matdV(k) = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + matdUW(k) = allocate_temp_matrix(pUa_range, 0) ! This is UW + if (flag_stress) then + !if (flag_full_stress) then + ! do l = 1,3 + ! matdAPr(k,l) = & + ! allocate_temp_matrix(APrange, AP_trans, atomf, nlpf) + ! matdPAr(k,l) = & + ! allocate_temp_matrix(PArange, AP_trans, nlpf, atomf) + ! end do + !else + matdWr(k,k) = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) + matdVr(k,k) = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + !end if + end if + end do + !if (flag_atomic_stress) then + ! allocate(NL_HF_atomic(3,3,ni_in_cell), STAT=stat) + ! if (stat /= 0) & + ! call cq_abort("Error allocating NL atomic stress: ", ni_in_cell) + ! allocate(NL_P_atomic(3,3,ni_in_cell), STAT=stat) + ! if (stat /= 0) & + ! call cq_abort("Error allocating NL atomic stress: ", ni_in_cell) + ! call reg_alloc_mem(area_moveatoms, 2*3*3*ni_in_cell, type_dbl) + !end if + DFT_plus_U_force = zero + PlusU_stress = zero + + ! First of all, find U (= (K - 2KPK).AP) + do spin = 1, nspin + ! W to P range (even though they are the same...) + call matrix_sum(zero,matPatomf,one,matW) + ! Scale W.(K - 2KPK) + call matrix_product(matPatomf, matKb(spin), matPK, mult(P_K_PK)) + ! Restrict range to V + call matrix_sum(zero,matVK(spin),one,matPK) ! Range V + call matrix_scale(minus_two * spin_factor, matVK(spin)) + ! Transpose + call matrix_transpose(matVK(spin), matWK(spin)) + end do + + ! to save memory we do each direction in turn... + do dir1 = 1, 3 + call matrix_scale(zero, matdW(dir1)) + call matrix_scale(zero, matdUW(dir1)) + call matrix_scale(zero, matdV(dir1)) + if (flag_stress) then + !if (flag_full_stress) then + ! do dir2 = 1, 3 + ! call matrix_scale(zero, matdAPr(dir1,dir2)) + ! call matrix_scale(zero, matdPAr(dir1,dir2)) + ! end do + !else + call matrix_scale(zero, matdWr(dir1,dir1)) + call matrix_scale(zero, matdVr(dir1,dir1)) + !end if + end if + ! Get dS and store in mat_tmp + call assemble_deriv_2(dir1, aSa_range, mat_tmp, 1) + ! Build dW and dUW + iprim = 0 + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms + atom_num = bundle%nm_nodbeg(part)+memb-1 + iprim=iprim+1 + ! Atomic species + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom + if(flag_plusUproj_atom(atom_spec)) then + npao_i = npao_species(atom_spec) + do neigh = 1, mat(part,aSa_range)%n_nab(memb) ! Loop over neighbours of atom + ist = mat(part,aSa_range)%i_acc(memb)+neigh-1 + ! Build the distances between atoms - needed for phases + gcspart = BCS_parts%icover_ibeg(mat(part,aSa_range)%i_part(ist))+mat(part,aSa_range)%i_seq(ist)-1 + ! We need to know the species of neighbour + neigh_global_part = BCS_parts%lab_cell(mat(part,aSa_range)%i_part(ist)) + neigh_global_num = id_glob(parts%icell_beg(neigh_global_part)+mat(part,aSa_range)%i_seq(ist)-1) + neigh_species = species_glob(neigh_global_num) + ! Now loop over PAOs + npao_j = npao_species(neigh_species) + ! Loop over PAOs on i + do pao_i = 1, npao_i + fac = half_w_plusUproj_pao(atom_spec,pao_i) + if (abs(fac)>RD_ERR) then ! if pao_i is one of the U projectors of atom_i + ! Loop over PAOs on j + do pao_j = 1, npao_j + ! Get location using Satomf indexing + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i,pao_j) + ! Now find value of dS + val_Satomf = return_matrix_value_pos(mat_tmp,wheremat) + ! We assume the projector functions are simply chosen from PAOs, + ! so OW = W = + call store_matrix_value_pos(matdW(dir1), wheremat,val_Satomf) + call store_matrix_value_pos(matdUW(dir1), wheremat,val_Satomf*fac) + enddo ! pao_j + end if + enddo ! pao_i + end do ! neigh + endif ! projector + end do ! memb + end if ! nm_nodgroup > 0 + end do ! part + call matrix_scale(-one, matdW(dir1)) + call matrix_scale(-one, matdUW(dir1)) + + ! make V = transpose of W + call matrix_transpose(matdW(dir1), matdV(dir1)) + call matrix_scale(-one, matdV(dir1)) + + ! Now scale dAP and dPA by R_{ji} for stress + ! 2014/08/06 11:45 Shereif + iprim = 0 + do np = 1, bundle%groups_on_node + if (bundle%nm_nodgroup(np) > 0) then + do ni = 1, bundle%nm_nodgroup(np) + iprim = iprim + 1 + do nab = 1, mat(np,aSa_range)%n_nab(ni) + ist = mat(np,aSa_range)%i_acc(ni) + nab - 1 + gcspart = BCS_parts%icover_ibeg(mat(np,aSa_range)%i_part(ist)) + mat(np,aSa_range)%i_seq(ist) - 1 + r_str(1)=BCS_parts%xcover(gcspart)-bundle%xprim(iprim) + r_str(2)=BCS_parts%ycover(gcspart)-bundle%yprim(iprim) + r_str(3)=BCS_parts%zcover(gcspart)-bundle%zprim(iprim) + do isf = 1, mat(np,aSa_range)%ndimj(ist) + do jsf = 1, mat(np,aSa_range)%ndimi(ni) + thisdAP = return_matrix_value(matdW(dir1), np, ni, iprim, nab, jsf, isf) + val_Satomf = return_matrix_value(mat_tmp, np, ni, iprim, nab, jsf, isf) + if (flag_stress) then + !if (flag_full_stress) then + ! do dir2=1,3 + ! call store_matrix_value(matdWr(dir1,dir2), np, ni, iprim, nab, jsf, isf, r_str(dir2)*thisdAP) + ! end do + !else + call store_matrix_value(matdWr(dir1,dir1), np, ni, iprim, nab, jsf, isf, r_str(dir1)*thisdAP) + !end if + end if + end do + end do + end do + end do + end if + end do + if (flag_stress) then + !if (flag_full_stress) then + ! do dir2=1,3 + ! call matrix_transpose(matdWr(dir1,dir2), matdVr(dir1,dir2)) + ! end do + !else + call matrix_transpose(matdWr(dir1,dir1), matdVr(dir1,dir1)) + !end if + end if + !call matrix_scale(-one, matdPAr(direction)) + end do ! dir1 + + do k = 1, 3 + do spin = 1, nspin + ! Note that matrix_diagonal accumulates HF_NL_force(k,:) + call matrix_diagonal(matdV(k), matVK(spin), DFT_plus_U_force(k,:), aUp_range, inode) + call matrix_diagonal(matdW(k), matWK(spin), DFT_plus_U_force(k,:), pUa_range, inode) + if (flag_stress) then + !if (flag_full_stress) then + ! do l = 1, 3 + ! if (flag_atomic_stress) then + ! call matrix_diagonal_stress(matdAPr(k,l), matU(spin), & + ! NL_P_stress(k,l), APrange, inode,atomic_stress(k,l,:)) + ! else + ! call matrix_diagonal_stress(matdAPr(k,l), matU(spin), & + ! NL_P_stress(k,l), APrange, inode) + ! end if + ! end do + !else + call matrix_diagonal_stress(matdVr(k,k), matVK(spin), PlusU_stress(k,k), aUp_range, inode) + call matrix_diagonal_stress(matdWr(k,k), matWK(spin), PlusU_stress(k,k), pUa_range, inode) + !end if + end if + end do ! spin + end do ! k + + call gsum(DFT_plus_U_force, 3, n_atoms) + do k = 3, 1, -1 + if (flag_stress) then + !if (flag_full_stress) then + ! do l = 3, 1, -1 + ! call free_temp_matrix(matdPAr(k,l)) + ! call free_temp_matrix(matdAPr(k,l)) + ! end do + !else + call free_temp_matrix(matdVr(k,k)) + call free_temp_matrix(matdWr(k,k)) + !end if + end if + call free_temp_matrix(matdUW(k)) + call free_temp_matrix(matdV(k)) + call free_temp_matrix(matdW(k)) + end do + call free_temp_matrix(mat_tmp) + do spin = nspin,1,-1 + call free_temp_matrix(matVK(spin)) + call free_temp_matrix(matWK(spin)) + call free_temp_matrix(matKb(spin)) + end do + call free_temp_matrix(matKPa) + call free_temp_matrix(matKP) + call free_temp_matrix(matPKP) + call free_temp_matrix(matPK) + call free_temp_matrix(matPatomf) + call free_temp_matrix(matUW) + call free_temp_matrix(matV) + call free_temp_matrix(matW) + + + call stop_backtrace(t=backtrace_timer,who='get_HF_non_local_force',echo=.true.) + + return + end subroutine get_DFT_plus_U_force + !!*** + ! ----------------------------------------------------------- ! Subroutine get_KE_force ! ----------------------------------------------------------- From be127e446a99172e29fdf033f2773cf46f587194 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Tue, 17 Jun 2025 11:59:04 +0100 Subject: [PATCH 06/16] Change DFT+U force implementation This is experimental for now (find dP and multiply by K-2KPK rather than following non-local force) --- src/force_module.f90 | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/force_module.f90 b/src/force_module.f90 index 9689ccad3..0e6c02251 100644 --- a/src/force_module.f90 +++ b/src/force_module.f90 @@ -2475,7 +2475,7 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) ! Local variables - integer :: matV, matW, matUW, matPatomf, matPK, matKP, matKPa, matKPK, mat_tmp, matPKP + integer :: matV, matW, matUW, matPatomf, matPK, matKP, matKPa, matKPK, mat_tmp, matPKP, matPatomf2 integer, dimension(nspin) :: matKb, matVK, matWK ! Stores K - 2KPK integer, dimension(3) :: matdV, matdW, matdUW integer, dimension(3,3) :: matdVr, matdWr @@ -2497,6 +2497,7 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) matV = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) matUW = allocate_temp_matrix(pUa_range, 0) ! This is UW matPatomf = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) + matPatomf2 = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) matPK = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) matKPK = matPK ! Label only matPKP = allocate_temp_matrix(aHa_range, 0) @@ -2613,7 +2614,7 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) ! First of all, find U (= (K - 2KPK).AP) do spin = 1, nspin ! W to P range (even though they are the same...) - call matrix_sum(zero,matPatomf,one,matW) + call matrix_sum(zero,matPatomf,one,matV) ! Scale W.(K - 2KPK) call matrix_product(matPatomf, matKb(spin), matPK, mult(P_K_PK)) ! Restrict range to V @@ -2737,10 +2738,15 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) end do ! dir1 do k = 1, 3 + ! make dP + call matrix_product(matdV(k), matUW, matPatomf, mult(aVp_pOWa_aPa)) + call matrix_product(matV, matdUW(k), matPatomf2, mult(aVp_pOWa_aPa)) do spin = 1, nspin ! Note that matrix_diagonal accumulates HF_NL_force(k,:) - call matrix_diagonal(matdV(k), matVK(spin), DFT_plus_U_force(k,:), aUp_range, inode) - call matrix_diagonal(matdW(k), matWK(spin), DFT_plus_U_force(k,:), pUa_range, inode) + !call matrix_diagonal(matdV(k), matWK(spin), DFT_plus_U_force(k,:), aUp_range, inode) + !call matrix_diagonal(matdW(k), matVK(spin), DFT_plus_U_force(k,:), pUa_range, inode) + call matrix_diagonal(matPatomf, matKb(spin), DFT_plus_U_force(k,:), aHa_range, inode) + call matrix_diagonal(matPatomf2, matKb(spin), DFT_plus_U_force(k,:), aHa_range, inode) if (flag_stress) then !if (flag_full_stress) then ! do l = 1, 3 @@ -2787,6 +2793,7 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) call free_temp_matrix(matKP) call free_temp_matrix(matPKP) call free_temp_matrix(matPK) + call free_temp_matrix(matPatomf2) call free_temp_matrix(matPatomf) call free_temp_matrix(matUW) call free_temp_matrix(matV) From 8f91c989907042184c74854977eec2a87e55fcf7 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 27 May 2026 09:57:04 +0100 Subject: [PATCH 07/16] Reworking of DFT+U Reworked the implementation of DFT+U Added test case --- src/H_matrix_module.f90 | 521 +- src/dimens_module.f90 | 61 +- src/energy_module.f90 | 15 +- src/force_module.f90 | 253 +- src/global_module.f90 | 1 + src/initial_read_module.f90 | 132 +- src/initialisation_module.f90 | 3 +- src/matrix_data_module.f90 | 9 - src/mult_module.f90 | 375 +- testsuite/test_009_DFT_plus_U/Conquest_input | 38 + testsuite/test_009_DFT_plus_U/Fe.ion | 6425 ++++++++++++++++++ testsuite/test_009_DFT_plus_U/bccFe.in | 6 + testsuite/test_check_output.py | 10 + 13 files changed, 6913 insertions(+), 936 deletions(-) create mode 100644 testsuite/test_009_DFT_plus_U/Conquest_input create mode 100644 testsuite/test_009_DFT_plus_U/Fe.ion create mode 100644 testsuite/test_009_DFT_plus_U/bccFe.in diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index 8886bcc27..d68b339c6 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -206,13 +206,12 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & use numbers use matrix_data, only: Hrange, Srange use mult_module, only: matNL, matKE, matH, matK, & - matHplusU, matEplusU, & ! 2024.05.20 nakata DFT+U matrix_scale, matrix_sum, & matrix_product, & matS, matX, matNAatomf, matNA, & matNLatomf, matKEatomf, & matHatomf, matXatomf, & - matHplusUatomf, matEplusUatomf, & ! 2024.05.20 nakata DFT+U + matHplusUatomf, & AtomF_to_SF_transform, & allocate_temp_matrix, free_temp_matrix, & S_trans, matrix_product_trace @@ -488,12 +487,6 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & enddo do spin = 1, nspin if (flag_exx) call AtomF_to_SF_transform(matX(spin), matXatomf(spin), spin, Hrange) ! only to output EXX energy - !!! 2024.05.20 nakata DFT+U - if (flag_DFTplusU) then - call AtomF_to_SF_transform(matEplusU(spin), matEplusUatomf(spin), spin, Hrange) ! only to output DFT+U energy - if (iprint_ops > 4) call AtomF_to_SF_transform(matHplusU(spin), matHplusUatomf(spin), spin, Hrange) - endif - !!! nakata DFT+U end call AtomF_to_SF_transform(matH(spin), matHatomf(spin), spin, Hrange) ! total electronic Hamiltonian enddo endif @@ -520,14 +513,6 @@ subroutine get_H_matrix(rebuild_KE_NL, fixed_potential, electrons, & call dump_matrix("NKE_up", matKE(1), inode) call dump_matrix("NKE_dn", matKE(2), inode) end if - if (flag_DFTplusU) then ! 2024.05.20 nakata DFT+U - if (nspin == 1) then - call dump_matrix("NplusU", matHplusU(1), inode) - else - call dump_matrix("NplusU_up", matHplusU(1), inode) - call dump_matrix("NplusU_dn", matHplusU(2), inode) - end if - endif endif ! ! @@ -2036,23 +2021,24 @@ subroutine get_plusU_matrix(flag_rebuild) use datatypes use numbers - use global_module, ONLY: nspin, id_glob, species_glob, atomf, & + use global_module, ONLY: nspin, id_glob, species_glob, atomf, occ_mat, & iprint_ops, min_layer, IPRINT_TIME_THRES2 - use GenComms, ONLY: cq_abort, myid, inode, ionode + use GenComms, ONLY: cq_abort, myid, inode, ionode, gsum use group_module, ONLY: parts use primary_module, ONLY: bundle use cover_module, ONLY: BCS_parts - use matrix_data, ONLY: mat, halo, aSa_range, aHa_range, PKrange, & - pUa_range, aUp_range, pUp_range, aUa_range - use mult_module, ONLY: mult, mat_p, allocate_temp_matrix, free_temp_matrix, matrix_pos, return_matrix_value_pos, store_matrix_value_pos, & + use matrix_data, ONLY: mat, halo, aSa_range, aHa_range + use mult_module, ONLY: mult, mat_p, allocate_temp_matrix, free_temp_matrix, matrix_pos, & + return_matrix_value, return_matrix_value_pos, store_matrix_value_pos, & matrix_product, matrix_scale, matrix_transpose, matrix_sum, & - matKatomf, matHplusUatomf, matEplusUatomf, matHatomf, matSatomf,& - aUa_trans, PK_trans, pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP, matrix_trace, matrix_product_trace + matKatomf, matHplusUatomf, matHatomf, matSatomf,& + aSa_trans, S_S_S, matrix_trace, matrix_product_trace use species_module, ONLY: npao_species use timer_module use pao_format - use energy, ONLY: delta_E_plusU - + use energy, ONLY: delta_E_plusU, plusU_energy + use units + implicit none ! Passed variables @@ -2061,47 +2047,132 @@ subroutine get_plusU_matrix(flag_rebuild) ! Local variables integer :: part, memb, neigh, ist, atom_num, atom_spec, iprim integer :: gcspart, neigh_global_part, neigh_global_num, neigh_species - real(double) :: dx, dy, dz, r2, trace, fac, val_Satomf + real(double) :: dx, dy, dz, r2, trace, fac, val_Satomf, energy_plus_U type(cq_timer) :: tmr_l_tmp1 - integer :: spin, ipao, loc, npao_i, jpao, npao_j, pao_i, pao_j, wheremat - integer :: matW, matV, matOW, matPatomf, matPU, matPK, matPKP, matUW, matPatomf2, matPKP2 - integer :: iU, l1, nacz1, m1 + integer :: spin, ipao, loc, npao_i, jpao, npao_j, pao_i, pao_j, pao_k, wheremat + integer :: matW, matV, matnUP, matUP, matUW + integer, dimension(2) :: matnUW, matSKS + integer :: iU, l1, nacz1, m1, n_U, l_U, z_U, m_U, m2, i_ang, i_zeta, z_temp, prncpl call start_timer(tmr_l_tmp1,WITH_LEVEL) if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in set_OW' - ! prepare matrices - matW = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) - matV = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) - matUW = allocate_temp_matrix(pUa_range, 0) ! This is UW -! matOW = matW -! - matPatomf = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) - matPatomf2 = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) - matPU = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) - matPK = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) - ! PKPrange = aHa_range - matPKP = allocate_temp_matrix(aHa_range, 0) - matPKP2 = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) - if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,i5,A)') myid, ' Zeroing matW, V and OW' + ! Use nUP as temporary storage in making SKS + matnUP = allocate_temp_matrix(aHa_range, aSa_trans, atomf, atomf) + do spin=1,nspin + matSKS(spin) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + end do + delta_E_plusU = zero + plusU_energy = zero + occ_mat = zero + ! Find SKS for both spin components + do spin=1,nspin + call matrix_product(matSatomf,matKatomf(spin),matnUP,mult(S_S_S)) ! S_S_S + call matrix_product(matnUP, matSatomf, matSKS(spin), mult(S_S_S)) ! SKS is now in P + end do + ! Make occupancy matrix + if(iprint_ops + min_layer>=1.AND.myid==0) write(io_lun,fmt='(4x,"Occupation matrix")') + trace = zero + iprim = 0 + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms + atom_num = bundle%nm_nodbeg(part)+memb-1 + iprim=iprim+1 + ! Atomic species + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom + if(flag_plusUproj_atom(atom_spec)) then + ! Calculate occupation matrix + n_U = info_plusUproj(atom_spec,1) + l_U = info_plusUproj(atom_spec,2) + z_U = info_plusUproj(atom_spec,3) + m_U = 2*l_U + 1 + pao_i = 0 + do i_ang= 0, pao(atom_spec)%greatest_angmom ! l + if(i_ang==l_U) then + z_temp = 0 ! Number of zeta functions for this n,l combination + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + prncpl = pao(atom_spec)%angmom(i_ang)%prncpl(i_zeta) + if (prncpl/=n_U) then + pao_i = pao_i + 2*i_ang + 1 + else if (prncpl==n_U) then + z_temp = z_temp + 1 + if(z_temp==z_U) then + do m1 = 1, m_U + do m2 = 1, m_U + do spin=1,nspin + val_Satomf = return_matrix_value(matSKS(spin),part,memb,iprim,1,pao_i+m2,pao_i+m1,1) + occ_mat(m2,m1,iprim,spin) = occ_mat(m2,m1,iprim,spin) + val_Satomf + end do + end do + end do + end if + pao_i = pao_i + 2*i_ang + 1 + end if + end do ! i_zeta + else + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + pao_i = pao_i + 2*i_ang + 1 + end do + end if ! i = l_U + end do + ! Output occupation numbers and find energy + if(iprint_ops + min_layer>=1.AND.myid==0) then + if(nspin==1) write(io_lun,fmt='(4x,"Atom: ",i7,8x,"Spin 1")') bundle%ig_prim(iprim) + if(nspin==2) write(io_lun,fmt='(4x,"Atom: ",i7,8x,"Spin 1",38x,"Spin 2")') bundle%ig_prim(iprim) + end if + do m1 = 1,m_U + if(iprint_ops + min_layer>=1.AND.myid==0) & + write(io_lun,fmt='(6x,5f8.3,4x,5f8.3)') occ_mat(1:m_U,m1,iprim,1:nspin) + do spin=1,nspin + trace = trace + occ_mat(m1,m1,iprim,spin) + plusU_energy = plusU_energy + half*plusUvalue(atom_spec)*occ_mat(m1,m1,iprim,spin) + do m2 = 1, m_U + plusU_energy = plusU_energy - half*plusUvalue(atom_spec)* & + occ_mat(m1,m2,iprim,spin)*occ_mat(m2,m1,iprim,spin) + end do + end do + end do + endif ! projector + end do ! memb + end if ! nm_nodgroup > 0 + end do ! part + !end do! spin + do spin=nspin,1,-1 + call free_temp_matrix(matSKS(spin)) + end do + matW = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matV = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matUW = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + do spin=1,nspin + matnUW(spin) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + end do + matUP = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) call matrix_scale(zero,matW) call matrix_scale(zero,matV) call matrix_scale(zero,matUW) - if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' Done Zeroing' - + do spin=1,nspin + call matrix_scale(zero,matnUW(spin)) + end do ! make W and UW + trace = zero iprim = 0 do part = 1,bundle%groups_on_node ! Loop over primary set partitions - if(iprint_ops + min_layer>=6.AND.myid==0) write(io_lun,fmt='(6x,"Processor, partition: ",2i7)') myid,part if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms atom_num = bundle%nm_nodbeg(part)+memb-1 iprim=iprim+1 ! Atomic species atom_spec = bundle%species(atom_num) - if(iprint_ops + min_layer>=6.AND.myid==0) write(io_lun,'(6x,"Processor, atom, spec: ",3i7)') myid,memb,atom_spec ! If iprim is a DFT+U projector atom if(flag_plusUproj_atom(atom_spec)) then + ! Calculate occupation matrix + n_U = info_plusUproj(atom_spec,1) + l_U = info_plusUproj(atom_spec,2) + z_U = info_plusUproj(atom_spec,3) + m_U = 2*l_U + 1 + ! Build W, UW and nUW npao_i = npao_species(atom_spec) do neigh = 1, mat(part,aSa_range)%n_nab(memb) ! Loop over neighbours of atom ist = mat(part,aSa_range)%i_acc(memb)+neigh-1 @@ -2114,18 +2185,35 @@ subroutine get_plusU_matrix(flag_rebuild) ! Now loop over PAOs npao_j = npao_species(neigh_species) ! Loop over PAOs on i - do pao_i = 1, npao_i - fac = half_w_plusUproj_pao(atom_spec,pao_i) - if (abs(fac)>RD_ERR) then ! if pao_i is one of the U projectors of atom_i - ! Loop over PAOs on j - do pao_j = 1, npao_j - wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i,pao_j) - val_Satomf = return_matrix_value_pos(matSatomf,wheremat) - ! We assume the projector functions are simply chosen from PAOs, - ! so OW = W = - call store_matrix_value_pos(matW, wheremat,val_Satomf) - call store_matrix_value_pos(matUW, wheremat,val_Satomf*fac) - enddo ! pao_j + pao_i=0 + do i_ang= 0, pao(atom_spec)%greatest_angmom ! l + if(i_ang==l_U) then + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + if(i_zeta==z_U) then + fac = half_w_plusUproj_pao(atom_spec,pao_i+1) + do m1 = 1, m_U + do pao_j = 1, npao_j + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m1,pao_j) + val_Satomf = return_matrix_value_pos(matSatomf,wheremat) + call store_matrix_value_pos(matW, wheremat,val_Satomf) + call store_matrix_value_pos(matUW, wheremat,val_Satomf*fac) + do m2 = 1, m_U + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m2,pao_j) + do spin=1,nspin + call store_matrix_value_pos(matnUW(spin), wheremat,val_Satomf*fac*occ_mat(m1,m2,iprim,spin)) + end do + end do + end do ! pao_j + end do + pao_i = pao_i + 2*i_ang + 1 + else + pao_i = pao_i + 2*i_ang + 1 + end if + enddo ! i_zeta + else + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + pao_i = pao_i + 2*i_ang + 1 + end do end if enddo ! pao_i end do ! neigh @@ -2133,52 +2221,36 @@ subroutine get_plusU_matrix(flag_rebuild) end do ! memb end if ! nm_nodgroup > 0 end do ! part - + !write(io_lun,*) 'Trace of n is ',trace ! make V = transpose of W call matrix_transpose(matW, matV) - ! make P(atomf,atomf) = V(atomf,proj) * OW(proj,atomf) and PU = V.UW - call matrix_product(matV, matW, matPatomf, mult(aVp_pOWa_aPa)) ! Create PU, which is V.UW (include U here to allow different U for different atoms) - call matrix_product(matV, matUW, matPU, mult(aVp_pOWa_aPa)) + call matrix_product(matV, matUW, matUP, mult(S_S_S))!S_S_S + ! Make nUP + do spin=1,nspin + ! Probably we need to zero rows of PK before doing this for safety + call matrix_product(matV, matnUW(spin), matnUP, mult(S_S_S))!S_S_S - ! Later P will be changed from PAO-basis to SF-basis - !if (flag_do_SFtransform) then - ! do spin_SF = 1, nspin_SF - ! call AtomF_to_SF_transform(matP(spin_SF), matPatomf, spin_SF, Hrange) ! is it correct to be Hrange? - ! enddo - !endif - - ! H(DFT+U) = U/2 * (P-2PKP) - delta_E_plusU = zero - do spin = 1, nspin - ! Working in atomf basis, create (U/2).PKP - call matrix_product(matPU, matKatomf(spin), matPK, mult(P_K_PK)) - call matrix_product(matPK, matPatomf, matPKP, mult(PK_P_PKP)) - ! Symmetrise PKP (PKP2 transposes, but PKP doesn't at the moment) - call matrix_sum(zero,matPKP2,one,matPKP) - call matrix_transpose(matPKP2,matPatomf2) - call matrix_sum(half,matPKP,half,matPatomf2) ! PKP now symmetric - - ! E(DFT+U) = Tr[U/2 * (PK-PKPK)] = Tr[K.matEplusU] - call matrix_sum(zero, matEplusUatomf(spin), one , matPU) - call matrix_sum(one, matEplusUatomf(spin), -one, matPKP) ! H(DFT+U) = U/2 * (P-2PKP) - call matrix_sum(zero, matHplusUatomf(spin), one , matPU) - call matrix_sum(one, matHplusUatomf(spin), -two, matPKP) + call matrix_sum(zero, matHplusUatomf(spin), one , matUP) + call matrix_sum(one, matHplusUatomf(spin), -two, matnUP) ! Double counting term - trace = matrix_product_trace(matPKP,matKatomf(spin)) - delta_E_plusU = delta_E_plusU + trace - enddo - call free_temp_matrix(matPKP2) - call free_temp_matrix(matPKP) - call free_temp_matrix(matPK) - call free_temp_matrix(matPU) - call free_temp_matrix(matPatomf2) - call free_temp_matrix(matPatomf) + trace = matrix_product_trace(matKatomf(spin),matnUP) + delta_E_plusU = delta_E_plusU + trace ! Includes gsum + enddo ! spin + call gsum(plusU_energy) + if (iprint_ops + min_layer >=1 .and. myid==0) write (io_lun,& + '(10x,"plusU Energy, 2Tr[0.5U(n - n^2)] : ",f25.15," ",a2)')& + en_conv*plusU_energy, en_units(energy_units) + call free_temp_matrix(matUP) + do spin=nspin,1,-1 + call free_temp_matrix(matnUW(spin)) + end do call free_temp_matrix(matUW) call free_temp_matrix(matV) call free_temp_matrix(matW) + call free_temp_matrix(matnUP) call stop_print_timer(tmr_l_tmp1,"get_plusU_matrix",IPRINT_TIME_THRES2) ! @@ -2186,263 +2258,4 @@ subroutine get_plusU_matrix(flag_rebuild) end subroutine get_plusU_matrix !!*** -!!****f* H_matrix_module/loop_W -!! -!! NAME -!! loop_W -!! -!! PURPOSE -!! Set W = (Proj_atom_i, PAO_atom_j) -!! -!! At present, -!! projector functions are assumed to be one of the PAOs of projector atoms, -!! so OW = W. -!! -!! This subroutine is called in sub:set_OW. -!! -!! AUTHOR -!! A.Nakata -!! CREATION DATE -!! 2023/04/05 -!! MODIFICATION HISTORY -!! -!! SOURCE -!! - subroutine loop_W(iprim, j_in_halo, atom_spec, neigh_species, matW, matUW) - - use numbers - use mult_module, ONLY: matSatomf, return_matrix_value_pos, store_matrix_value_pos, matrix_pos, matKatomf - use pao_format - use species_module, ONLY: npao_species - - implicit none - - ! Passed variables - integer, intent(in) :: iprim, j_in_halo, atom_spec, neigh_species, matW, matUW - ! Local variables - integer :: wheremat - real(double) :: val_Satomf, val_W, fac - integer :: npao_i, npao_j, pao_i, pao_j - - - npao_i = npao_species(atom_spec) - npao_j = npao_species(neigh_species) - ! Loop over PAOs on i - do pao_i = 1, npao_i - fac = half_w_plusUproj_pao(atom_spec,pao_i) - if (abs(fac)>RD_ERR) then ! if pao_i is one of the U projectors of atom_i - ! Loop over PAOs on j - do pao_j = 1, npao_j - wheremat = matrix_pos(matSatomf,iprim,j_in_halo,pao_i,pao_j) - val_Satomf = return_matrix_value_pos(matSatomf,wheremat) - ! We assume the projector functions are simply chosen from PAOs, - ! so OW = W = - val_W = val_Satomf - call store_matrix_value_pos(matW, wheremat,val_W) - call store_matrix_value_pos(matUW, wheremat,val_W*fac) - enddo ! pao_j - endif ! projetor or not - enddo ! pao_i - return - end subroutine loop_W -!!*** - -!!****f* H_matrix_module/multiply_U * -!! -!! NAME -!! multiply_U -!! -!! PURPOSE -!! Multiply U/2 values to (P-PKP) or (P-2PKP) matrix -!! -!! This subroutine is called in sub: -!! -!! INPUTS -!! matP = (P-PKP) or (P-2PKP) -!! matUP = U/2 ((P-PKP) or U/2 (P-2PKP) -!! aPa_range = range of (P-PKP) or (P-2PKP), should be equal to Hrange -!! -!! USES -!! -!! AUTHOR -!! A.Nakata -!! CREATION DATE -!! 2024/05/20 -!! MODIFICATION HISTORY -!! -!! SOURCE -!! - subroutine multiply_U(matP,matUP,aPa_range) - - use datatypes - use numbers - use GenComms, ONLY: cq_abort, myid - use global_module, ONLY: iprint_ops, min_layer - use primary_module, ONLY: bundle - use matrix_data, ONLY: mat - use mult_module, ONLY: mat_p - use pao_format - use timer_module - - implicit none - - ! Passed variables - integer :: matP, matUP, aPa_range - - ! Local variables - integer :: iprim, part, memb, atom_num, atom_spec, npao_i, loc, ipao - - - if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in multiply_U' - -! call start_timer(tmr_std_matrices) - - iprim = 0 - do part = 1,bundle%groups_on_node ! Loop over primary set partitions - if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition - do memb = 1,bundle%nm_nodgroup(part) ! Loop over atom i - iprim = iprim+1 - atom_num = bundle%nm_nodbeg(part)+memb-1 - atom_spec = bundle%species(atom_num) - ! If iprim is a DFT+U projector atom, - ! considering U only for diagonal elements - if(flag_plusUproj_atom(atom_spec)) then - npao_i = mat(part,aPa_range)%ndimi(memb) ! number of PAOs of i - loc = (npao_i - 1) * npao_i + npao_i - 1 + mat(part,aPa_range)%onsite(memb) - if (loc > mat_p(matP)%length) & - call cq_abort("Overflow error in trace: ", loc, mat_p(matP)%length) - do ipao = 1, npao_i - loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aPa_range)%onsite(memb) ! diagonal element - mat_p(matUP)%matrix(loc) = half * w_plusUproj_pao(atom_spec,ipao) * mat_p(matP)%matrix(loc) - end do ! ipao - endif ! flag_plusUproj_atom - enddo ! memb - endif ! bundle - enddo ! part -! -! call stop_timer(tmr_std_matrices) -! - return - end subroutine multiply_U -!!*** - -!!****f* H_matrix_module/matrix_sum_multiply_U * -!! -!! NAME -!! mmatrix_sum_ultiply_U -!! -!! PURPOSE -!! perform calculations of U/2 * (P-PKP) ... calctype=1 -!! or -!! U/2(P-PKP) - U/2(PKP) = U/2 (P-2PKP) ... calctype=2 -!! -!! This subroutine is called in sub: -!! -!! INPUTS -!! matA = P ... calctype=1 -!! or -!! U/2(P-PKP) ... calctype=2 -!! matB = PKP -!! matC = U/2(P-PKP) ... calctype=1 -!! or -!! U/2(P-2PKP) ... calctype=2 -!! aCa_range = range of (P-PKP) or (P-2PKP), should be equal to Hrange -!! -!! USES -!! -!! AUTHOR -!! A.Nakata -!! CREATION DATE -!! 2024/05/20 -!! MODIFICATION HISTORY -!! -!! SOURCE -!! - subroutine matrix_sum_multiply_U(calctype,matA,matB,matC,aCa_range) - - use datatypes - use numbers - use GenComms, ONLY: cq_abort, myid - use global_module, ONLY: iprint_ops, min_layer - use primary_module, ONLY: bundle - use matrix_data, ONLY: mat - use mult_module, ONLY: mat_p - use pao_format - use timer_module - - implicit none - - ! Passed variables - integer :: calctype, matA, matB, matC, aCa_range - - ! Local variables - integer :: iprim, part, memb, atom_num, atom_spec, npao_i, loc, ipao, jpao - real(double) :: val - - - if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in matrix_sum_multiply_U' - -! call start_timer(tmr_std_matrices) - - iprim = 0 - - ! type 1: matA = P, matB = PKP, matC = U/2(P-PKP) - if (calctype.eq.1) then - do part = 1,bundle%groups_on_node ! Loop over primary set partitions - if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition - do memb = 1,bundle%nm_nodgroup(part) ! Loop over atom i - iprim = iprim+1 - atom_num = bundle%nm_nodbeg(part)+memb-1 - atom_spec = bundle%species(atom_num) - ! If iprim is a DFT+U projector atom, - ! considering U only for diagonal elements - if(flag_plusUproj_atom(atom_spec)) then - npao_i = mat(part,aCa_range)%ndimi(memb) ! number of PAOs of i - loc = (npao_i - 1) * npao_i + npao_i - 1 + mat(part,aCa_range)%onsite(memb) - !if (loc > mat_p(matC)%length) & - ! call cq_abort("Overflow error in trace: ", loc, mat_p(matC)%length) - do ipao = 1, npao_i - do jpao = 1,npao_i - !loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) ! position of diagonal element - loc = (ipao - 1) * npao_i + jpao - 1 + mat(part,aCa_range)%onsite(memb) - val = mat_p(matA)%matrix(loc) - mat_p(matB)%matrix(loc) ! P-PKP - mat_p(matC)%matrix(loc) = half_w_plusUproj_pao(atom_spec,ipao) * val ! U/2*(P-PKP) - end do - end do ! ipao - endif ! flag_plusUproj_atom - enddo ! memb - endif ! bundle - enddo ! part - ! type 2: matA = U/2(P-PKP), matB = PKP, matC = U/2(P-PKP) - U/2(PKP) = U/2(P-2PKP) - else if (calctype.eq.2) then - do part = 1,bundle%groups_on_node ! Loop over primary set partitions - if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition - do memb = 1,bundle%nm_nodgroup(part) ! Loop over atom i - iprim = iprim+1 - atom_num = bundle%nm_nodbeg(part)+memb-1 - atom_spec = bundle%species(atom_num) - ! If iprim is a DFT+U projector atom, - ! considering U only for diagonal elements - if(flag_plusUproj_atom(atom_spec)) then - npao_i = mat(part,aCa_range)%ndimi(memb) ! number of PAOs of i - do ipao = 1, npao_i - do jpao = 1,npao_i - !loc = (ipao - 1) * npao_i + ipao - 1 + mat(part,aCa_range)%onsite(memb) - loc = (ipao - 1) * npao_i + jpao - 1 + mat(part,aCa_range)%onsite(memb) - mat_p(matC)%matrix(loc) = mat_p(matA)%matrix(loc) & ! U/2(P-PKP) - -half_w_plusUproj_pao(atom_spec,ipao) * mat_p(matB)%matrix(loc) ! -U/2(PKP) - end do - end do ! ipao - endif ! flag_plusUproj_atom - enddo ! memb - endif ! bundle - enddo ! part - endif ! calctype -! -! call stop_timer(tmr_std_matrices) -! - return - end subroutine matrix_sum_multiply_U -!!*** - end module H_matrix_module diff --git a/src/dimens_module.f90 b/src/dimens_module.f90 index 07ef77501..c2581467e 100644 --- a/src/dimens_module.f90 +++ b/src/dimens_module.f90 @@ -42,8 +42,6 @@ !! Commented out some tricks used in MD & structure optimisation !! 2016/09/16 16:00 nakata !! Added variables for PAO-based matrices and multi-site SFs -!! 2024/05/28 17:00 nakata -!! Added variables (r_plusU and RadiusPlusUproj) for DFT+U !! SOURCE module dimens @@ -57,7 +55,7 @@ module dimens real(double) :: r_super_x, r_super_y, r_super_z, volume real(double) :: r_super_x_squared, r_super_y_squared, r_super_z_squared - real(double) :: r_s, r_h, r_c, r_nl, r_core_squared, r_dft_d2, r_exx, r_exxs, r_plusU ! 2024.05.20 nakata DFT+U1 + real(double) :: r_s, r_h, r_c, r_nl, r_core_squared, r_dft_d2, r_exx, r_exxs real(double) :: r_s_atomf, r_h_atomf, r_MS, r_LD real(double) :: grid_point_volume, one_over_grid_point_volume real(double) :: support_grid_volume @@ -69,7 +67,6 @@ module dimens real(double), allocatable, dimension(:) :: RadiusSupport, RadiusAtomf, & RadiusMS, RadiusLD, & - RadiusPlusUproj, & ! 2024.05.20 nakata DFT+U NonLocalFactor, InvSRange integer, allocatable, dimension(:) :: atomicnum @@ -164,9 +161,6 @@ module dimens !! flag_MDold was removed. !! 2019/12/02 15:17 dave !! Added checks to round RadiusAtomf and RadiusSupport to safe value (including grid points) -!! 2024/05/22 14:40 nakata -!! Introduced flag_DFTplusU -!! Added r_plusU, r_plusUproj, PKrange, pUa_range, aUp_range, pUp_range and aUa_range for DFT+U !! 2024/07/18 14:18 lionel !! Check consistency of Xrange wrt r_exx read from input !! 2025/02/03 14:00 nakata @@ -179,8 +173,7 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ use numbers use matrix_data use GenComms, only: cq_abort, cq_warn - use global_module, only: iprint_init, atomf, sf, flag_Multisite, flag_exx, flag_diagonalisation, & - flag_DFTplusU !!! 2024.05.20 nakata DFT+U + use global_module, only: iprint_init, atomf, sf, flag_Multisite, flag_exx, flag_diagonalisation use block_module, only: in_block_x, in_block_y, in_block_z, n_pts_in_block use pseudopotential_common, only: pseudo_type, OLDPS, SIESTA, ABINIT, flag_neutral_atom_projector @@ -196,7 +189,7 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ character(len=80) :: sub_name = "set_dimensions" type(cq_timer) :: backtrace_timer integer :: n, mx_matrices_tmp - real(double) :: r_core, r_t, r_plusUproj, rcutmax, max_grid ! 2024.05.20 nakata DFT+U + real(double) :: r_core, r_t, rcutmax, max_grid ! 2024.05.20 nakata DFT+U !****lat<$ call start_backtrace(t=backtrace_timer,who='set_dimensions',where=9,level=2) @@ -229,21 +222,6 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ else mx_matrices_tmp = 19 end if -!!! 2024.05.20 nakata DFT+U - if(flag_DFTplusU) then - PKrange = mx_matrices_tmp + 1 -! pUa_range = mx_matrices_tmp + 2 -! aUp_range = mx_matrices_tmp + 3 -! pUp_range = mx_matrices_tmp + 4 -! aUa_range = mx_matrices_tmp + 5 - pUa_range = aSa_range - aUp_range = aSa_range - pUp_range = aSa_range - aUa_range = aSa_range -! mx_matrices_tmp = mx_matrices_tmp + 5 - mx_matrices_tmp = mx_matrices_tmp + 1 - end if -!!! nakata DFT+U end else aSa_range = 20 aHa_range = 21 @@ -263,21 +241,6 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ else mx_matrices_tmp = 30 end if -!!! 2024.05.20 nakata DFT+U - if(flag_DFTplusU) then - PKrange = mx_matrices_tmp + 1 -! pUa_range = mx_matrices_tmp + 2 -! aUp_range = mx_matrices_tmp + 3 -! pUp_range = mx_matrices_tmp + 4 -! aUa_range = mx_matrices_tmp + 5 - pUa_range = aSa_range - aUp_range = aSa_range - pUp_range = aSa_range - aUa_range = aSa_range -! mx_matrices_tmp = mx_matrices_tmp + 5 ! = maximally 37 - mx_matrices_tmp = mx_matrices_tmp + 1 - end if -!!! nakata DFT+U end aSs_in_sSs_range = mx_matrices_tmp + 1 mx_matrices_tmp = mx_matrices_tmp + 1 if (mx_matrices_tmp > mx_matrices) call cq_abort('ERROR : mx_matrices_tmp is larger than mx_matrices',mx_matrices_tmp) @@ -304,7 +267,6 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ r_h_atomf = zero r_MS = zero r_LD = zero - r_plusUproj = zero ! 2024.05.20 nakata DFT+U do n=1, n_species ! Round the atom function radius to the nearest multiple of the largest grid spacing ! (add one to account for displacement relative to grid point) @@ -317,8 +279,6 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ r_h_atomf = max(r_h_atomf,RadiusAtomf(n)) r_MS = max(r_MS,RadiusMS(n)) r_LD = max(r_LD,RadiusLD(n)) - ! r_plusUproj = max(r_plusUproj,RadiusPlusUproj(n)) ! 2024.05.20 nakata DFT+U - r_plusUproj = max(r_plusUproj,r_h_atomf) ! assumed to be the same as PAO radius at present ! 2024.05.20 nakata DFT+U end do if(non_local.and.(inode==ionode).and.iprint_init>0) then write(io_lun,2) r_core @@ -424,21 +384,6 @@ subroutine set_dimensions(inode, ionode,HNL_fac,non_local, n_species, non_local_ mat_name(aNArange) = "aNA" mat_name(NAarange) = "NAa" end if -!!! 2024.05.20 nakata DFT+U -! Now all of pUa_range, pUp_range, aUp_range, aUp_range are set to be aSa_range - if (flag_DFTplusU) then - rcut(PKrange) = (r_plusU) -! rcut(pUa_range) = r_plusUproj + r_s_atomf ! for W -! rcut(pUp_range) = r_plusUproj + r_plusUproj ! for O -! rcut(aUp_range) = rcut(pUa_range) ! for V -! rcut(aUa_range) = rcut(aUa_range) ! for P - mat_name(PKrange) = "PK" -! mat_name(pUa_range) = "pUa" -! mat_name(aUp_range) = "aUp" -! mat_name(pUp_range) = "pUp" -! mat_name(aUa_range) = "aUa" - end if -!!! nakata DFT+U end rcutmax = zero do n=1,mx_matrices_tmp if(rcut(n)>rcutmax) then diff --git a/src/energy_module.f90 b/src/energy_module.f90 index b682d444f..3d8a16261 100644 --- a/src/energy_module.f90 +++ b/src/energy_module.f90 @@ -165,7 +165,7 @@ subroutine get_energy(total_energy, printDFT, level) use numbers use units use mult_module, only: matrix_product_trace, matH, & - matK, matKE, matNL, matX, matNA, matEplusU ! 2024.05.20 nakata DFT+U + matK, matKE, matNL, matX, matNA use GenComms, only: inode, ionode, cq_warn use global_module, only: iprint_gen, nspin, spin_factor, & flag_SpinDependentSF, & @@ -223,7 +223,6 @@ subroutine get_energy(total_energy, printDFT, level) kinetic_energy = zero if(flag_neutral_atom_projector) local_ps_energy = zero exx_energy = zero - plusU_energy = zero ! 2024.05.20 nakata DFT+U spin_SF = 1 do spin = 1, nspin if (flag_SpinDependentSF) spin_SF = spin @@ -238,10 +237,6 @@ subroutine get_energy(total_energy, printDFT, level) matrix_product_trace(matK(spin), matKE(spin_SF)) exx_energy = exx_energy - spin_factor * half * exx_alpha * & matrix_product_trace(matK(spin), matX(spin)) -!!! 2024.05.20 nakata DFT+U - if (flag_DFTplusU) plusU_energy = plusU_energy + spin_factor * & - matrix_product_trace(matK(spin), matEplusU(spin)) ! (P-PKP)K = K(P-KPKP) ?? correct? -!!! nakata DFT+U end do ! Find exx energy @@ -328,7 +323,7 @@ subroutine get_energy(total_energy, printDFT, level) if (flag_dft_d2) write (io_lun,17) en_conv*disp_energy, en_units(energy_units) !!! 2024.05.20 nakata DFT+U if (flag_DFTplusU) write (io_lun,& - '(10x,"plusU Energy, 2Tr[K(P-PKP)] : ",f25.15," ",a2)')& + '(10x,"plusU Energy, 2Tr[0.5U(n - n^2)] : ",f25.15," ",a2)')& en_conv*plusU_energy, en_units(energy_units) !!! nakata DFT+U end if (flag_surface_dipole_correction) then @@ -522,7 +517,7 @@ subroutine final_energy(nkp,level) use mult_module, only: matrix_product_trace, matH, & matrix_product_trace_length, & matrix_trace, & - matK, matKE, matNL, matX, matS, matNA, matEplusU ! 2024.05.20 nakata DFT+U + matK, matKE, matNL, matX, matS, matNA use global_module, only: iprint_gen, nspin, spin_factor, & flag_SpinDependentSF, & @@ -580,7 +575,6 @@ subroutine final_energy(nkp,level) kinetic_energy = zero if(flag_neutral_atom_projector) local_ps_energy = zero exx_energy = zero - plusU_energy = zero ! 2024.05.20 nakata DFT+U one_electron_energy = zero potential_energy = zero total_energy1 = zero @@ -605,9 +599,6 @@ subroutine final_energy(nkp,level) ! -alpha*Tr[K X] exx_energy = exx_energy & - spin_factor*half*exx_alpha*matrix_product_trace(matK(spin), matX(spin)) - ! U/2*Tr[K (P-PKP)] ! 2024.05.20 nakata DFT+U - if(flag_DFTplusU) plusU_energy = plusU_energy & - + spin_factor*matrix_product_trace(matK(spin), matEplusU(spin)) end do ! Find total pure DFT energy diff --git a/src/force_module.f90 b/src/force_module.f90 index 7e7c9e21f..0f598a911 100644 --- a/src/force_module.f90 +++ b/src/force_module.f90 @@ -2468,13 +2468,11 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) use datatypes use numbers - use matrix_data, only: mat, halo, aSa_range, aHa_range, PKrange, & - pUa_range, aUp_range, pUp_range, aUa_range + use matrix_data, only: mat, halo, aSa_range, aHa_range use mult_module, only: mult, mat_p, allocate_temp_matrix, free_temp_matrix, matrix_pos, & return_matrix_value_pos, store_matrix_value_pos, return_matrix_value, store_matrix_value, & matrix_product, matrix_scale, matrix_transpose, matrix_sum, & - matKatomf, matHplusUatomf, matEplusUatomf, matHatomf, matSatomf,& - aUa_trans, PK_trans, pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP, matrix_trace, matrix_product_trace + matKatomf, matHplusUatomf, matHatomf, matSatomf, S_S_S, aSa_trans use species_module, only: npao_species use GenComms, only: gsum, cq_abort, inode, & ionode, myid @@ -2485,13 +2483,15 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) flag_analytic_blip_int, & ni_in_cell, flag_full_stress, & flag_stress, flag_atomic_stress, & - area_moveatoms - use H_matrix_module, only: flag_plusUproj_atom, half_w_plusUproj_pao + area_moveatoms, occ_mat + use H_matrix_module, only: flag_plusUproj_atom, half_w_plusUproj_pao, & + num_plusUproj, info_plusUproj ! TEMP use build_PAO_matrices, only: assemble_deriv_2 use group_module, only: parts use primary_module, only: bundle use cover_module, only: BCS_parts + use pao_format implicit none @@ -2501,127 +2501,47 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) ! Local variables - integer :: matV, matW, matPatomf, matPK, matKP, matKPK, mat_tmp, matPatomf2 - integer, dimension(nspin) :: matKb, matVK, matWK ! Stores K - 2KPK + integer :: matV, matW, mat_tmp, matnWK + integer, dimension(2) :: matnW + integer :: matVK, matWK ! Stores K - 2KPK integer, dimension(3) :: matdUV, matdUW integer, dimension(3,3) :: matdVr, matdWr integer :: dir1, dir2, k, l, stat, np, nn, i, i1, i2, & spec, this_nsf_nlpf, ni, spin, atom_num, atom_spec, memb, neigh, & npao_i, npao_j, pao_i, pao_j, part, atom integer :: iprim, gcspart, ist, nab, neigh_global_num, & - neigh_global_part, neigh_species, wheremat, isf, jsf + neigh_global_part, neigh_species, wheremat, isf, jsf, ipao real(double) :: dx, dy, dz, fac, val_Satomf real(double), dimension(3) :: r_str type(cq_timer) :: backtrace_timer + integer :: iU, l1, nacz1, m1, l_U, z_U, m_U, m2, i_ang, i_zeta, n_U, z_temp, prncpl call start_backtrace(t=backtrace_timer,who='get_DFT_plus_U_force',where=7,level=3,echo=.true.) ! Allocate matrices - do spin = 1, nspin - matKb(spin) = allocate_temp_matrix(aHa_range, 0, atomf, atomf) - matWK(spin) = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) - matVK(spin) = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + matWK = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matVK = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matW = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + do spin=1,nspin + matnW(spin) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) end do - matW = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) - matV = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) - matPatomf = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) - matPatomf2 = allocate_temp_matrix(aUa_range, aUa_trans, atomf, atomf) - matPK = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) - matKPK = allocate_temp_matrix(aHa_range, aUa_trans,atomf,atomf) - matKP = allocate_temp_matrix(PKrange, PK_trans, atomf, atomf) - call matrix_scale(zero,matW) - call matrix_scale(zero,matV) - ! make W and V - iprim = 0 - do part = 1,bundle%groups_on_node ! Loop over primary set partitions - if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition - do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms - atom_num = bundle%nm_nodbeg(part)+memb-1 - iprim=iprim+1 - ! Atomic species - atom_spec = bundle%species(atom_num) - ! If iprim is a DFT+U projector atom - if(flag_plusUproj_atom(atom_spec)) then - npao_i = npao_species(atom_spec) - do neigh = 1, mat(part,aSa_range)%n_nab(memb) ! Loop over neighbours of atom - ist = mat(part,aSa_range)%i_acc(memb)+neigh-1 - ! Build the distances between atoms - needed for phases - gcspart = BCS_parts%icover_ibeg(mat(part,aSa_range)%i_part(ist))+mat(part,aSa_range)%i_seq(ist)-1 - ! We need to know the species of neighbour - neigh_global_part = BCS_parts%lab_cell(mat(part,aSa_range)%i_part(ist)) - neigh_global_num = id_glob(parts%icell_beg(neigh_global_part)+mat(part,aSa_range)%i_seq(ist)-1) - neigh_species = species_glob(neigh_global_num) - ! Now loop over PAOs - npao_j = npao_species(neigh_species) - ! Loop over PAOs on i - do pao_i = 1, npao_i - fac = half_w_plusUproj_pao(atom_spec,pao_i) - if (abs(fac)>RD_ERR) then ! if pao_i is one of the U projectors of atom_i - ! Loop over PAOs on j - do pao_j = 1, npao_j - wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i,pao_j) - val_Satomf = return_matrix_value_pos(matSatomf,wheremat) - ! We assume the projector functions are simply chosen from PAOs, - ! so OW = W = - call store_matrix_value_pos(matW, wheremat,val_Satomf) - enddo ! pao_j - end if - enddo ! pao_i - end do ! neigh - endif ! projector - end do ! memb - end if ! nm_nodgroup > 0 - end do ! part - - ! make V = transpose of W - call matrix_transpose(matW, matV) - - ! make P(atomf,atomf) = V(atomf,proj) * OW(proj,atomf) and K - 2KPK - ! Once we have (K-2KPK) make W(K-2KPK) and (K-2KPK)V - call matrix_product(matV, matW, matPatomf, mult(aVp_pOWa_aPa)) - do spin = 1, nspin - ! PK then transposed to give KP - call matrix_product(matPatomf, matKatomf(spin), matPK, mult(P_K_PK)) - call matrix_transpose(matPK, matKP) - ! KP.K calculated to range P - call matrix_sum(zero,matPatomf2,one,matKatomf(spin)) - call matrix_product(matKP,matPatomf2, matKPK, mult(PK_P_PKP)) - ! Ensure KPK is symmetric - call matrix_transpose(matKPK,matPatomf2) - call matrix_sum(half,matKPK,half,matPatomf2) - ! Now build K - 2KPK and store in matKb - call matrix_sum(zero,matKb(spin),one,matKatomf(spin)) - call matrix_sum(one,matKb(spin),-two,matKPK) - ! Scale W.(K - 2KPK) not happy about ranges - call matrix_product(matW, matKb(spin), matWK(spin), mult(aVp_pOWa_aPa)) - ! Scale - call matrix_scale(minus_two * spin_factor, matWK(spin)) - ! Transpose to make (K - 2KPK).V - call matrix_transpose(matWK(spin), matVK(spin)) - end do - ! And free up matrices - call free_temp_matrix(matKP) - call free_temp_matrix(matKPK) - call free_temp_matrix(matPK) - call free_temp_matrix(matPatomf2) - call free_temp_matrix(matPatomf) - call free_temp_matrix(matV) - call free_temp_matrix(matW) + matnWK = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matV = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) ! Assemble dV.UW + V.dUW (both Pulay terms) ! Allocate matrices mat_tmp = allocate_temp_matrix(aSa_range, 0, atomf, atomf) do k = 1, 3 - matdUV(k) = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) - matdUW(k) = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) + matdUV(k) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matdUW(k) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) if (flag_stress) then if (flag_full_stress) then do l = 1,3 - matdWr(k,l) = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) - matdVr(k,l) = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + matdWr(k,l) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matdVr(k,l) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) end do else - matdWr(k,k) = allocate_temp_matrix(pUa_range, aUa_trans, atomf, atomf) - matdVr(k,k) = allocate_temp_matrix(aUp_range, aUa_trans, atomf, atomf) + matdWr(k,k) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + matdVr(k,k) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) end if end if end do @@ -2718,38 +2638,118 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) end if end if end do ! dir1 - - do k = 1, 3 - do spin = 1, nspin + ! Assemble DFT+U matrices and accumulate forces and stress + call matrix_scale(zero,matW) + call matrix_scale(zero,matV) + do spin=1,nspin + call matrix_scale(zero,matnW(spin)) + end do + ! make W and V + iprim = 0 + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms + atom_num = bundle%nm_nodbeg(part)+memb-1 + iprim=iprim+1 + ! Atomic species + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom + if(flag_plusUproj_atom(atom_spec)) then + ! Calculate occupation matrix + n_U = info_plusUproj(atom_spec,1) + l_U = info_plusUproj(atom_spec,2) + z_U = info_plusUproj(atom_spec,3) + m_U = 2*l_U + 1 + npao_i = npao_species(atom_spec) + do neigh = 1, mat(part,aSa_range)%n_nab(memb) ! Loop over neighbours of atom + ist = mat(part,aSa_range)%i_acc(memb)+neigh-1 + ! Build the distances between atoms - needed for phases + gcspart = BCS_parts%icover_ibeg(mat(part,aSa_range)%i_part(ist))+mat(part,aSa_range)%i_seq(ist)-1 + ! We need to know the species of neighbour + neigh_global_part = BCS_parts%lab_cell(mat(part,aSa_range)%i_part(ist)) + neigh_global_num = id_glob(parts%icell_beg(neigh_global_part)+mat(part,aSa_range)%i_seq(ist)-1) + neigh_species = species_glob(neigh_global_num) + ! Now loop over PAOs + npao_j = npao_species(neigh_species) + ! Loop over PAOs on i + pao_i=0 + do i_ang= 0, pao(atom_spec)%greatest_angmom ! l + if(i_ang==l_U) then + z_temp = 0 ! Number of zeta functions for this n,l combination + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + prncpl = pao(atom_spec)%angmom(i_ang)%prncpl(i_zeta) + if (prncpl/=n_U) then + pao_i = pao_i + 2*i_ang + 1 + else if (prncpl==n_U) then + z_temp = z_temp + 1 + if(z_temp==z_U) then + fac = half_w_plusUproj_pao(atom_spec,pao_i+1) + do m1 = 1, m_U + do pao_j = 1, npao_j + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m1,pao_j) + val_Satomf = return_matrix_value_pos(matSatomf,wheremat) + call store_matrix_value_pos(matW, wheremat,val_Satomf) + do m2 = 1, m_U + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m2,pao_j) + do spin=1,nspin + call store_matrix_value_pos(matnW(spin), wheremat,val_Satomf*occ_mat(m1,m2,iprim,spin)) + end do + end do + end do ! pao_j + end do + end if ! z_temp == z_U + pao_i = pao_i + 2*i_ang + 1 + end if + enddo ! i_zeta + else + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + pao_i = pao_i + 2*i_ang + 1 + end do + end if ! i = l_U + enddo ! pao_i + end do ! neigh + endif ! projector + end do ! memb + end if ! nm_nodgroup > 0 + end do ! part + do spin = 1, nspin + ! Make WK and nWK + call matrix_product(matW,matKatomf(spin),matWK,mult(S_S_S)) ! WK + call matrix_product(matnW(spin),matKatomf(spin),matnWK,mult(S_S_S)) ! nWK + call matrix_sum(one,matWK,-two,matnWK) + call matrix_scale(minus_two * spin_factor, matWK) + ! make V = transpose of W + call matrix_transpose(matWK, matVK) + do k = 1, 3 ! Form forces: we want dUV.WK and dUW.KV to make the force but we use WK with dUW ! (and VK with dUV) because matrix_diagonal effectively imposes a transpose - call matrix_diagonal(matWK(spin),matdUW(k),DFT_plus_U_force(k,:),aUp_range) - call matrix_diagonal(matVK(spin),matdUV(k),DFT_plus_U_force(k,:),pUa_range) + call matrix_diagonal(matWK,matdUW(k),DFT_plus_U_force(k,:),aSa_range) + call matrix_diagonal(matVK,matdUV(k),DFT_plus_U_force(k,:),aSa_range) if (flag_stress) then if (flag_full_stress) then do l = 1, 3 if (flag_atomic_stress) then - call matrix_diagonal_stress(matVK(spin), matdVr(k,l), PlusU_stress(k,l), & - aUp_range,atomic_stress(k,l,:)) - call matrix_diagonal_stress(matWK(spin), matdWr(k,l), PlusU_stress(k,l), & - pUa_range,atomic_stress(k,l,:)) + call matrix_diagonal_stress(matVK, matdVr(k,l), PlusU_stress(k,l), & + aSa_range,atomic_stress(k,l,:)) + call matrix_diagonal_stress(matWK, matdWr(k,l), PlusU_stress(k,l), & + aSa_range,atomic_stress(k,l,:)) else - call matrix_diagonal_stress(matVK(spin), matdVr(k,l), PlusU_stress(k,l), aUp_range) - call matrix_diagonal_stress(matWK(spin), matdWr(k,l), PlusU_stress(k,l), pUa_range) + call matrix_diagonal_stress(matVK, matdVr(k,l), PlusU_stress(k,l), aSa_range) + call matrix_diagonal_stress(matWK, matdWr(k,l), PlusU_stress(k,l), aSa_range) end if end do else - call matrix_diagonal_stress(matVK(spin), matdVr(k,k), PlusU_stress(k,k), aUp_range) - call matrix_diagonal_stress(matWK(spin), matdWr(k,k), PlusU_stress(k,k), pUa_range) + call matrix_diagonal_stress(matVK, matdVr(k,k), PlusU_stress(k,k), aSa_range) + call matrix_diagonal_stress(matWK, matdWr(k,k), PlusU_stress(k,k), aSa_range) end if end if - end do ! spin - end do ! k - + end do ! k + end do ! spin call gsum(DFT_plus_U_force, 3, n_atoms) call gsum(PlusU_stress,3,3) ! Same factor of half in NL stress; why? PlusU_stress = half*PlusU_stress + ! And free up matrices do k = 3, 1, -1 if (flag_stress) then if (flag_full_stress) then @@ -2766,13 +2766,14 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) call free_temp_matrix(matdUV(k)) end do call free_temp_matrix(mat_tmp) - do spin = nspin,1,-1 - call free_temp_matrix(matVK(spin)) - call free_temp_matrix(matWK(spin)) - call free_temp_matrix(matKb(spin)) + call free_temp_matrix(matV) + call free_temp_matrix(matnWK) + do spin=nspin,1,-1 + call free_temp_matrix(matnW(spin)) end do - - + call free_temp_matrix(matW) + call free_temp_matrix(matVK) + call free_temp_matrix(matWK) call stop_backtrace(t=backtrace_timer,who='get_DFT_plus_U_force',echo=.true.) return diff --git a/src/global_module.f90 b/src/global_module.f90 index 66e656bcd..0d9a82539 100644 --- a/src/global_module.f90 +++ b/src/global_module.f90 @@ -428,6 +428,7 @@ module global_module ! DFT+U logical :: flag_DFTplusU, flag_first_diag + real(double), dimension(:,:,:,:), allocatable :: occ_mat ! Occupation matrix by primary atom ! Density matrix Lagrange multiplier for correct electron number (needed for forces and stress) real(double), dimension(2) :: mu_DMM ! Allow for spin diff --git a/src/initial_read_module.f90 b/src/initial_read_module.f90 index 0e2cbfba0..6812122bc 100644 --- a/src/initial_read_module.f90 +++ b/src/initial_read_module.f90 @@ -520,44 +520,43 @@ subroutine read_and_write(start, start_L, inode, ionode, & w_plusUproj_pao(:,:) = zero half_w_plusUproj_pao(:,:) = zero - do inum_plusUproj=1,num_plusUproj + do i_species = 1, n_species ipao = 0 - i_species = info_plusUproj(inum_plusUproj,1) - l_plusUproj = info_plusUproj(inum_plusUproj,3) - n_plusUproj = info_plusUproj(inum_plusUproj,2) - z_plusUproj = info_plusUproj(inum_plusUproj,4) - !plusUvalue = real(info_plusUproj(inum_plusUproj,5),double) - do i_ang = 0, pao(i_species)%greatest_angmom - if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then - if (i_ang.eq.l_plusUproj) then - ! set U parameters for PAO with (n_plusUproj,l_plusUproj,z_plusUproj) - z_temp = 0 - do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom - prncpl = pao(i_species)%angmom(i_ang)%prncpl(i_zeta) - if (prncpl.ne.n_plusUproj) then - ipao = ipao + 2*i_ang + 1 - else if (prncpl.eq.n_plusUproj) then - z_temp = z_temp + 1 - if (z_temp.eq.z_plusUproj) then - do i_m = -i_ang,i_ang - ipao = ipao + 1 - w_plusUproj_pao(i_species,ipao) = plusUvalue(i_species) - half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue(i_species) - enddo ! m - else + n_plusUproj = info_plusUproj(i_species,1) + l_plusUproj = info_plusUproj(i_species,2) + z_plusUproj = info_plusUproj(i_species,3) + if(flag_plusUproj_atom(i_species)) then + do i_ang = 0, pao(i_species)%greatest_angmom + if(pao(i_species)%angmom(i_ang)%n_zeta_in_angmom>0) then + if (i_ang.eq.l_plusUproj) then + ! set U parameters for PAO with (n_plusUproj,l_plusUproj,z_plusUproj) + z_temp = 0 + do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom + prncpl = pao(i_species)%angmom(i_ang)%prncpl(i_zeta) + if (prncpl/=n_plusUproj) then ipao = ipao + 2*i_ang + 1 + else if (prncpl==n_plusUproj) then + z_temp = z_temp + 1 + ! This line below selects one zeta + if (z_temp==z_plusUproj) then + do i_m = -i_ang,i_ang + ipao = ipao + 1 + w_plusUproj_pao(i_species,ipao) = plusUvalue(i_species) + half_w_plusUproj_pao(i_species,ipao) = half * plusUvalue(i_species) + enddo ! m + else + ipao = ipao + 2*i_ang + 1 + endif endif - endif - enddo ! z - else - do i_zeta = 1, pao(i_species)%angmom(i_ang)%n_zeta_in_angmom - ipao = ipao + 2*i_ang + 1 - enddo + enddo ! z + else + ipao = ipao + pao(i_species)%angmom(i_ang)%n_zeta_in_angmom*(2*i_ang + 1) + endif endif - endif - enddo ! anglar momentum - if (ipao.ne.npao_species(i_species)) & - call cq_abort("Error in counting PAOs when setting DFT+U parameters.") + enddo ! anglar momentum + if (ipao.ne.npao_species(i_species)) & + call cq_abort("Error in counting PAOs when setting DFT+U parameters.") + end if ! flag_plusUproj enddo ! n_plusUproj end if ! @@ -938,12 +937,8 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_atomic_stress, flag_heat_flux, flag_DumpMatrices, flag_calc_pol, flag_do_pol_calc, & i_pol_dir, i_pol_dir_st, i_pol_dir_end use dimens, only: GridCutoff, & -!!! 2024.05.20 nakata DFT+U -! n_grid_x, n_grid_y, n_grid_z, r_c, & -! RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, & - n_grid_x, n_grid_y, n_grid_z, r_c, r_plusU, & - RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, RadiusPlusUproj, & -!!! nakata DFT+U end + n_grid_x, n_grid_y, n_grid_z, r_c, & + RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, & NonLocalFactor, InvSRange, & min_blip_sp, flag_buffer_old, AtomMove_buffer, & r_dft_d2, r_exx, r_exxs @@ -1403,6 +1398,11 @@ subroutine read_input(start, start_L, titles, vary_mu,& !!! 2024.05.20 nakata DFT+U flag_DFTplusU = fdf_boolean('DM.DFTplusU', .false.) if(flag_DFTplusU) flag_first_diag = .true. + if(flag_DFTplusU.and.flag_basis_set == blips) then + call cq_warn(sub_name,"DFT+U not available with blips: turning off DFT+U") + flag_DFTplusU = .false. + end if + !!! nakata DFT+U end !!$ !!$ @@ -1872,6 +1872,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_out_wf = .true. E_wf_min = fdf_double('IO.min_wf_E',-BIG) E_wf_max = fdf_double('IO.max_wf_E',BIG) + flag_wf_range_Ef = fdf_boolean('IO.WFRangeRelative',.true.) end if ! Possibly needed to decide if MSSF needs dealing with !flag_pDOS_angmom = fdf_boolean('IO.PDOS_Angmom',.false.) @@ -1986,13 +1987,11 @@ subroutine read_input(start, start_L, titles, vary_mu,& !!$ !!$ if (flag_DFTplusU) then - ! cutoff for PK matrix (PKrange) - r_plusU = fdf_double('DM.PK_range_DFTplusU', one ) ! range for PK in DFT+U calculation ! 2024.05.20 nakata DFT+U - if (fdf_block('DFTplusU')) then num_plusUproj = 1 + block_end - block_start - if(inode==ionode) write(io_lun,*) 'num_plusUproj =',num_plusUproj ! nakata 2024 debug - allocate(info_plusUproj(num_plusUproj,5)) + !if(inode==ionode) write(io_lun,*) 'num_plusUproj =',num_plusUproj ! nakata 2024 debug + !allocate(info_plusUproj(num_plusUproj,5)) + allocate(info_plusUproj(n_species,3)) allocate(flag_plusUproj_atom(n_species)) allocate(plusUvalue(n_species)) plusUvalue = zero @@ -2001,11 +2000,9 @@ subroutine read_input(start, start_L, titles, vary_mu,& z_plusUproj = 1 read(unit=input_array(block_start+inum_plusUproj-1),fmt=*) & i_species, n_plusUproj, l_plusUproj, z_plusUproj, plusUvalue(i_species) - info_plusUproj(inum_plusUproj,1) = i_species - info_plusUproj(inum_plusUproj,2) = n_plusUproj - info_plusUproj(inum_plusUproj,3) = l_plusUproj - info_plusUproj(inum_plusUproj,4) = z_plusUproj - info_plusUproj(inum_plusUproj,5) = 0 + info_plusUproj(i_species,1) = n_plusUproj + info_plusUproj(i_species,2) = l_plusUproj + info_plusUproj(i_species,3) = z_plusUproj flag_plusUproj_atom(i_species) = .true. enddo ! n_plusUproj call fdf_endblock @@ -2370,7 +2367,9 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_read_velocity = fdf_boolean('AtomMove.ReadVelocity',.false.) restart_DM = fdf_boolean('General.LoadDM', .false.) if(restart_DM) then - find_chdens = fdf_boolean('SC.MakeInitialChargeFromK',.true.) + find_chdens = fdf_boolean('SC.MakeInitialChargeFromK',.true.) + ! Allow DFT+U Hamiltonian with DM we have just loaded + if(flag_DFTplusU) flag_first_diag = .false. else find_chdens = fdf_boolean('SC.MakeInitialChargeFromK',.false.) endif @@ -2711,7 +2710,7 @@ end subroutine check_compatibility !! subroutine allocate_species_vars - use dimens, only: RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, RadiusPlusUproj, & ! 2024.05.20 nakata DFT+U + use dimens, only: RadiusSupport, RadiusAtomf, RadiusMS, RadiusLD, & NonLocalFactor, InvSRange, atomicnum use memory_module, only: reg_alloc_mem, type_dbl use species_module, only: n_species, nsf_species, nlpf_species, npao_species, natomf_species, & @@ -2801,11 +2800,6 @@ subroutine allocate_species_vars allocate(MSSF_nonminimal_species(n_species),STAT=stat) if(stat/=0) call cq_abort("Error allocating MSSF_nonminimal_species in allocate_species_vars: ", n_species,stat) call reg_alloc_mem(area_general,n_species,type_dbl) -!!! 2024.05.20 nakata DFT+U -! allocate(RadiusPlusUproj(n_species),STAT=stat) -! if(stat/=0) call cq_abort("Error allocating RadiusPlusUproj, RadiusLD in allocate_species_vars: ",n_species,stat) -! call reg_alloc_mem(area_general,n_species,type_dbl) -!!! nakata DFT+U end ! call stop_timer(tmr_std_allocation) @@ -2868,7 +2862,7 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) use datatypes use units use dimens, only: r_super_x, r_super_y, r_super_z, & - n_grid_x, n_grid_y, n_grid_z, r_h, r_c, RadiusSupport, r_plusU ! 2024.05.20 nakata DFT+U + n_grid_x, n_grid_y, n_grid_z, r_h, r_c, RadiusSupport use block_module, only: in_block_x, in_block_y, in_block_z use species_module, only: n_species, species_label, mass, & charge, & @@ -2883,7 +2877,7 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) flag_self_consistent, flag_vary_basis, iprint_init, flag_pcc_global, & nspin, flag_SpinDependentSF, flag_fix_spin_population, ne_spin_in_cell, flag_XLBOMD,& ase_file, flag_DFTplusU ! 2024.05.20 nakata DFT+U - use H_matrix_module, only: num_plusUproj, info_plusUproj, plusUvalue ! 2024.05.20 nakata DFT+U + use H_matrix_module, only: num_plusUproj, info_plusUproj, plusUvalue, flag_plusUproj_atom use SelfCon, only: maxitersSC use GenComms, only: cq_abort use minimise, only: energy_tolerance, L_tolerance, & @@ -3124,20 +3118,20 @@ subroutine write_info(titles, mu, vary_mu, HNL_fac, NODES) !!! 2024.05.20 nakata DFT+U if(flag_DFTplusU) then write(io_lun,fmt='(10x,"DFT+U calculation will be performed")') - write(io_lun,fmt='(10x,"DFT+U PK Matrix range = ",f7.4,1x,a2)') & - dist_conv*r_plusU, d_units(dist_units) write(io_lun,fmt='(/4x,"Number of DFT-U projectors: ",i2)') num_plusUproj - write(io_lun,fmt='(4x,a40)') '----------------------------------------' - write(io_lun,fmt='(4x,a40)') "| species n l zeta U-value (Ha) |" - write(io_lun,fmt='(4x,a40)') '----------------------------------------' - do n=1, num_plusUproj - !write(io_lun,fmt='(4x,"|",i2,2x,a5,2x,i1,2x,i1,3x,i1,4x,f9.3,5x,"|")') & - write(io_lun,fmt='(4x,"|",i2,2x,a5,4x,i1,2x,i1,2x,i1,4x,f5.3,5x,"|")') & - info_plusUproj(n,1), species_label(info_plusUproj(n,1)), & - info_plusUproj(n,2), info_plusUproj(n,3), info_plusUproj(n,4), plusUvalue(info_plusUproj(n,1))!info_plusUproj(n,5) + write(io_lun,fmt='(4x,a)') '---------------------------------' + write(io_lun,fmt='(4x,a)') '| species n l zeta U (Ha) |' + write(io_lun,fmt='(4x,a)') '---------------------------------' + do n=1, n_species + if(flag_plusUproj_atom(n)) then + write(io_lun,fmt='(4x,"|",i2,2x,a5,4x,i1,2x,i1,2x,i1,4x,f5.3,2x,"|")') & + n, species_label(n), & + info_plusUproj(n,1), info_plusUproj(n,2), info_plusUproj(n,3), plusUvalue(n) + end if end do + write(io_lun,fmt='(4x,a)') '---------------------------------' endif !!! nakata DFT+U end diff --git a/src/initialisation_module.f90 b/src/initialisation_module.f90 index 430a3732c..f2e970ed2 100644 --- a/src/initialisation_module.f90 +++ b/src/initialisation_module.f90 @@ -332,7 +332,7 @@ subroutine set_up(find_chdens,level) iprint_gen, flag_perform_cDFT, & nspin, min_layer, & glob2node, flag_XLBOMD, & - flag_neutral_atom, flag_diagonalisation + flag_neutral_atom, flag_diagonalisation, occ_mat use memory_module, only: reg_alloc_mem, reg_dealloc_mem, & type_dbl, type_int use group_module, only: parts @@ -488,6 +488,7 @@ subroutine set_up(find_chdens,level) if (inode == ionode .and. iprint_init > 2) & write (io_lun,fmt='(4x,a)') trim(prefix)//'Made covering set for matrix multiplications' + allocate(occ_mat(7,7,bundle%n_prim,nspin)) ! Create all of the indexing required to perform matrix multiplications ! at a later point. This routine also identifies all the density ! matrix range interactions and hamiltonian range interactions diff --git a/src/matrix_data_module.f90 b/src/matrix_data_module.f90 index c0ce55dfa..855319837 100644 --- a/src/matrix_data_module.f90 +++ b/src/matrix_data_module.f90 @@ -95,7 +95,6 @@ module matrix_data SFcoeff_matind, SFcoeffTr_matind, LD_matind, & aSs_in_sSs_matind integer, dimension(:), pointer :: aNAmatind, NAamatind - integer, dimension(:), pointer :: aUa_matind, PKmatind !!! 2024.05.20 nakata DFT+U ! Parameters for the different matrix ranges integer, parameter :: Srange = 1 ! STS,TST,TS.TS @@ -136,14 +135,6 @@ module matrix_data integer :: NAarange ! 32 integer :: aSs_in_sSs_range ! 33 for S(atomf,sf) but with the range of Srange (= r_sf + r_sf, not r_atomf + r_sf) -!!! 2024.05.20 nakata DFT+U - integer :: PKrange ! 33 - integer :: pUa_range ! 34 - integer :: aUp_range ! 35 - integer :: pUp_range ! 36 - integer :: aUa_range ! 37 -!!! nakata DFT+U end - integer :: max_range ! Indexes matrix with largest range type(blip_transfer) :: blip_trans diff --git a/src/mult_module.f90 b/src/mult_module.f90 index 872f6ed9b..4bfdd8e2d 100644 --- a/src/mult_module.f90 +++ b/src/mult_module.f90 @@ -100,11 +100,6 @@ !! Adding multiplications for NA projectors !! 2018/11/13 17:30 nakata !! Changed matS, matT, matTtran, matKE, matNL and matNA to be spin_SF dependent -!! 2024/05/29 18:30 nakata -!! Added matHplusU, matHplusUatomf, matEplusU, matEplusUatomf, -!! pOp_pWa_pOWa, aVp_pOWa_aPa, P_K_PK, PK_P_PKP, -!! aUa_trans, PK_trans, aUa_pairind, PK_pairind -!! for DFT+U !! SOURCE !! module mult_module @@ -161,17 +156,12 @@ module mult_module integer :: sHs_sHa_sCa ! 32, type 2 , H(sf ,sf ) * H(sf ,atomf) = C(sf ,atomf) integer :: aLa_aSa_aLSa ! 33, type 1, for LFD , L(atomf,atomf) * S(atomf,atomf) = Local S(atomf,atomf) integer :: aLa_aHa_aLHa ! 34, type 1, for LFD , L(atomf,atomf) * H(atomf,atomf) = Local H(atomf,atomf) - integer :: aNA_NAa_aHa ! type 1 for building H: H(atomf, napf) * H(napf, atomf) = H(atomf, atomf) - integer :: aHa_aNA_aNA ! type 2 for gradients: aHa_NA_NA -!!! 2024.05.20 nakata DFT+U - integer :: pOp_pWa_pOWa ! 37 type1 , O(proj ,proj ) * W(proj ,atomf) = OW(proj ,atomf) - integer :: aVp_pOWa_aPa ! 38 type1 , V(atomf,proj ) *OW(proj ,atomf) = P(atomf,atomf) - integer :: P_K_PK ! 39 type1 or 2 , P(atomf,atomf) * K(atomf,atomf) = PK(atomf,atomf) - integer :: PK_P_PKP ! 40 type1 or 2 ,PK(atomf,atomf) * P(atomf,atomf) =PKP(atomf,atomf) -!!! nakata DFT+U end + integer :: aNA_NAa_aHa ! type 1 for building H: H(atomf, napf) * H(napf, atomf) = H(atomf, atomf) + integer :: aHa_aNA_aNA ! type 2 for gradients: aHa_NA_NA +!!! DFT+U + integer :: S_S_S ! 37 type1 , S_K_S or S_S_S -! integer(integ), parameter :: mx_mults = 36 - integer(integ), parameter :: mx_mults = 40 ! 2024.05.20 nakata DFT+U + integer(integ), parameter :: mx_mults = 37 type(matrix_mult) :: mult(mx_mults) @@ -188,11 +178,10 @@ module mult_module integer :: SFcoeff_trans ! 10 integer :: aNA_trans ! 11 integer :: aNAa_trans ! 12 - integer :: aUa_trans ! 13 !!! 2024.05.20 nakata DFT+U - integer :: PK_trans ! 14 !!! 2024.05.20 nakata DFT+U + integer :: aSa_trans ! 13 !!! 2024.05.20 nakata DFT+U ! integer(integ), parameter :: mx_trans = 12 - integer(integ), parameter :: mx_trans = 14 !!! 2024.05.20 nakata DFT+U + integer(integ), parameter :: mx_trans = 13 !!! DFT+U type(pair_data), allocatable, dimension(:,:) :: pairs integer, dimension(:), pointer :: Spairind, Lpairind, Tpairind, & @@ -200,7 +189,7 @@ module mult_module LSLpairind, & aSs_pairind, aHs_pairind, SFcoeff_pairind, & aNApairind, aNAapairind, & ! 2024.05.20 nakata DFT+U - aUa_pairind, PK_pairind + aSa_pairind type(matrix_trans), dimension(mx_matrices), target :: ltrans type(trans_remote) :: gtrans(mx_trans) @@ -217,7 +206,7 @@ module mult_module integer, allocatable, dimension(:), public :: & matH, matL, matLS, matSL, matK, matphi, matM12, matM4, matU, & matUT, matX, matSX, & - matHplusU, matEplusU ! 2024.05.20 nakata DFT+U + matHplusU ! spin independent atomf-based matrices integer, public :: & matSatomf, matKEatomf, matNLatomf, matNAatomf @@ -225,7 +214,7 @@ module mult_module integer, allocatable, dimension(:), public :: & matHatomf, matKatomf, matXatomf, & matSFcoeff, matSFcoeff_tran, matdSFcoeff, matdSFcoeff_e, & - matHplusUatomf, matEplusUatomf ! 2024.05.20 nakata DFT+U + matHplusUatomf ! matrices related to XLBOMD (for DMM, at present) integer, allocatable, dimension(:), public :: matXL, matXLvel ! (nspin) @@ -365,46 +354,29 @@ subroutine immi(parts, prim, gcs, myid, partial) aLa_aHa_aLHa = 34 aNA_NAa_aHa = 35 aHa_aNA_aNA = 36 -!!! 2024.05.20 nakata DFT+U - pOp_pWa_pOWa = 37 - aVp_pOWa_aPa = 38 - P_K_PK = 39 - PK_P_PKP = 40 -!!! nakata DFT+U end +!!! DFT+U + S_S_S = 37 else aNA_NAa_aHa = 33 aHa_aNA_aNA = 34 -!!! 2024.05.20 nakata DFT+U - pOp_pWa_pOWa = 35 - aVp_pOWa_aPa = 36 - P_K_PK = 37 - PK_P_PKP = 38 -!!! nakata DFT+U end +!!! DFT+U + S_S_S = 35 endif aSs_trans = 8 aHs_trans = 9 SFcoeff_trans = 10 aNA_trans = 11 aNAa_trans = 12 -!!! 2024.05.20 nakata DFT+U - aUa_trans = 13 - PK_trans = 14 -!!! nakata DFT+U end + aSa_trans = 13 else aNA_NAa_aHa = 23 aHa_aNA_aNA = 24 -!!! 2024.05.20 nakata DFT+U - pOp_pWa_pOWa = 25 - aVp_pOWa_aPa = 26 - P_K_PK = 27 - PK_P_PKP = 28 -!!! nakata DFT+U end +!!! DFT+U + S_S_S = 25 aNA_trans = 8 aNAa_trans = S_trans -!!! 2024.05.20 nakata DFT+U - aUa_trans = S_trans - PK_trans = 9 -!!! nakata DFT+U end +!!! DFT+U + aSa_trans = S_trans endif mat%sf1_type = sf @@ -550,17 +522,6 @@ subroutine immi(parts, prim, gcs, myid, partial) NAamatind, rcut(NAarange), myid-1, halo(NAarange), & ltrans(NAarange)) end if -!!! 2024.05.20 nakata DFT+U - if (flag_DFTplusU) then - mat(1:prim%groups_on_node, PKrange)%sf1_type = atomf - mat(1:prim%groups_on_node, PKrange)%sf2_type = atomf - call matrix_ini(parts, prim, gcs, mat(1:prim%groups_on_node,PKrange), & - PKmatind, rcut(PKrange), myid-1, halo(PKrange), ltrans(PKrange)) - ! pUa_range = aUp_range = aUa_range = pUp_range = aSa_range, - ! and their indices (pUamatin etc.) are equal to Smatind, - ! so we set up only PKrange here. - endif -!!! nakata DFT+U end call associate_matrices call find_neighbour_procs(parts, halo(max_range)) call start_timer(tmr_std_allocation) @@ -621,22 +582,16 @@ subroutine immi(parts, prim, gcs, myid, partial) !aNAapairind = Spairind aNAa_trans = S_trans end if -!!! 2024.05.20 nakata DFT+U +!!! DFT+U if (flag_DFTplusU) then - ! for matP, aUa_range = aSa_range, then if atomf=sf, aUa_range = Srange if (atomf.ne.sf) then - call trans_ini(parts, prim, gcs, mat(1:prim%groups_on_node,aUa_range), & - myid-1, halo(aUa_range), halo(aUa_range), ltrans(aUa_range), & - gtrans(aUa_trans), pairs(:,aUa_trans), aUa_pairind) + call trans_ini(parts, prim, gcs, mat(1:prim%groups_on_node,aSa_range), & + myid-1, halo(aSa_range), halo(aSa_range), ltrans(aSa_range), & + gtrans(aSa_trans), pairs(:,aSa_trans), aSa_pairind) else - aUa_trans = S_trans + aSa_trans = S_trans endif - ! for matPK - call trans_ini(parts, prim, gcs, mat(1:prim%groups_on_node,aUa_range), & - myid-1, halo(PKrange), halo(PKrange), ltrans(PKrange), & - gtrans(PK_trans), pairs(:,PK_trans), PK_pairind) endif -!!! nakata DFT+U end ! Now initialise the matrix multiplications ! Somewhere, we need to set mult_type 1/2 - probably here ! @@ -1173,116 +1128,46 @@ subroutine immi(parts, prim, gcs, myid, partial) mult(aHa_aNA_aNA)%gcs => gcs call mult_ini(mult(aHa_aNA_aNA), NAamatind, myid-1, prim%n_prim, parts) end if -!!! 2024.05.20 nakata DFT+U +!!! DFT+U if (flag_DFTplusU) then - mult(pOp_pWa_pOWa)%mult_type = 1 - mult(pOp_pWa_pOWa)%amat => mat(1:prim%groups_on_node,pUp_range) - mult(pOp_pWa_pOWa)%bmat => mat(1:prim%groups_on_node,pUa_range) - mult(pOp_pWa_pOWa)%cmat => mat(1:prim%groups_on_node,pUa_range) - mult(pOp_pWa_pOWa)%ahalo => halo(pUp_range) - mult(pOp_pWa_pOWa)%chalo => halo(pUa_range) - mult(pOp_pWa_pOWa)%ltrans => ltrans(pUa_range) - !mult(pOp_pWa_pOWa)%bindex => pUa_matind - mult(pOp_pWa_pOWa)%parts => parts - mult(pOp_pWa_pOWa)%prim => prim - mult(pOp_pWa_pOWa)%gcs => gcs - call mult_ini(mult(pOp_pWa_pOWa), Smatind, myid-1, prim%n_prim, parts) ! pUa_matind = Smatind - - mult(aVp_pOWa_aPa)%mult_type = 1 - mult(aVp_pOWa_aPa)%amat => mat(1:prim%groups_on_node,aUp_range) - mult(aVp_pOWa_aPa)%bmat => mat(1:prim%groups_on_node,pUa_range) - mult(aVp_pOWa_aPa)%cmat => mat(1:prim%groups_on_node,aUa_range) - mult(aVp_pOWa_aPa)%ahalo => halo(aUp_range) - mult(aVp_pOWa_aPa)%chalo => halo(aUa_range) - mult(aVp_pOWa_aPa)%ltrans => ltrans(aUp_range) - !mult(aVp_pOWa_aPa)%bindex => pUa_matind - mult(aVp_pOWa_aPa)%parts => parts - mult(aVp_pOWa_aPa)%prim => prim - mult(aVp_pOWa_aPa)%gcs => gcs - call mult_ini(mult(aVp_pOWa_aPa), Smatind, myid-1, prim%n_prim, parts) ! pUa_matind = Smatind - - ! K should be in atomf - ra = rcut(aUa_range) - rc = rcut(PKrange) - if (rc >= ra) then - mult(P_K_PK)%mult_type = 1 - mult(P_K_PK)%amat => mat(1:prim%groups_on_node,aUa_range) - mult(P_K_PK)%bmat => mat(1:prim%groups_on_node,aHa_range) - mult(P_K_PK)%cmat => mat(1:prim%groups_on_node,PKrange) - mult(P_K_PK)%ahalo => halo(aUa_range) - mult(P_K_PK)%chalo => halo(PKrange) - mult(P_K_PK)%ltrans => ltrans(aUa_range) - !mult(P_K_PK)%bindex => aHa_matind - mult(P_K_PK)%parts => parts - mult(P_K_PK)%prim => prim - mult(P_K_PK)%gcs => gcs - if (atomf.ne.sf) then - call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) - else - call mult_ini(mult(P_K_PK), Hmatind, myid-1, prim%n_prim, parts) - end if - else - mult(P_K_PK)%mult_type = 2 - mult(P_K_PK)%amat => mat(1:prim%groups_on_node,PKrange) - mult(P_K_PK)%bmat => mat(1:prim%groups_on_node,aHa_range) - mult(P_K_PK)%cmat => mat(1:prim%groups_on_node,aUa_range) - mult(P_K_PK)%ahalo => halo(PKrange) - mult(P_K_PK)%chalo => halo(aUa_range) - mult(P_K_PK)%ltrans => ltrans(PKrange) - !mult(P_K_PK)%bindex => aHa_matind - mult(P_K_PK)%parts => parts - mult(P_K_PK)%prim => prim - mult(P_K_PK)%gcs => gcs - if (atomf.ne.sf) then - call mult_ini(mult(P_K_PK), aHa_matind, myid-1, prim%n_prim, parts) - else - call mult_ini(mult(P_K_PK), Hmatind, myid-1, prim%n_prim, parts) - end if - endif - ra = rcut(PKrange) - rc = rcut(aHa_range) + ra = rcut(aSa_range) + rc = rcut(aSa_range) if (rc >= ra) then - mult(PK_P_PKP)%mult_type = 1 - mult(PK_P_PKP)%amat => mat(1:prim%groups_on_node,PKrange) - mult(PK_P_PKP)%bmat => mat(1:prim%groups_on_node,aUa_range) - mult(PK_P_PKP)%cmat => mat(1:prim%groups_on_node,aHa_range) - mult(PK_P_PKP)%ahalo => halo(PKrange) - mult(PK_P_PKP)%chalo => halo(aHa_range) - mult(PK_P_PKP)%ltrans => ltrans(PKrange) - !mult(PK_P_PKP)%bindex => aUa_matind - mult(PK_P_PKP)%parts => parts - mult(PK_P_PKP)%prim => prim - mult(PK_P_PKP)%gcs => gcs - !call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) + mult(S_S_S)%mult_type = 1 + mult(S_S_S)%amat => mat(1:prim%groups_on_node,aSa_range) + mult(S_S_S)%bmat => mat(1:prim%groups_on_node,aSa_range) + mult(S_S_S)%cmat => mat(1:prim%groups_on_node,aSa_range) + mult(S_S_S)%ahalo => halo(aSa_range) + mult(S_S_S)%chalo => halo(aSa_range) + mult(S_S_S)%ltrans => ltrans(aSa_range) + !mult(S_S_S)%bindex => aHa_matind + mult(S_S_S)%parts => parts + mult(S_S_S)%prim => prim + mult(S_S_S)%gcs => gcs if (atomf.ne.sf) then - call mult_ini(mult(PK_P_PKP), aSa_matind, myid-1, prim%n_prim, parts) + call mult_ini(mult(S_S_S), aSa_matind, myid-1, prim%n_prim, parts) else - call mult_ini(mult(PK_P_PKP), Smatind, myid-1, prim%n_prim, parts) + call mult_ini(mult(S_S_S), Smatind, myid-1, prim%n_prim, parts) end if else - mult(PK_P_PKP)%mult_type = 2 - mult(PK_P_PKP)%amat => mat(1:prim%groups_on_node,aHa_range) - mult(PK_P_PKP)%bmat => mat(1:prim%groups_on_node,aUa_range) - mult(PK_P_PKP)%cmat => mat(1:prim%groups_on_node,PKrange) - mult(PK_P_PKP)%ahalo => halo(aHa_range) - mult(PK_P_PKP)%chalo => halo(PKrange) - mult(PK_P_PKP)%ltrans => ltrans(aHa_range) - !mult(PK_P_PKP)%bindex => aUa_matind - mult(PK_P_PKP)%parts => parts - mult(PK_P_PKP)%prim => prim - mult(PK_P_PKP)%gcs => gcs + mult(S_S_S)%mult_type = 2 + mult(S_S_S)%amat => mat(1:prim%groups_on_node,aSa_range) + mult(S_S_S)%bmat => mat(1:prim%groups_on_node,aSa_range) + mult(S_S_S)%cmat => mat(1:prim%groups_on_node,aSa_range) + mult(S_S_S)%ahalo => halo(aSa_range) + mult(S_S_S)%chalo => halo(aSa_range) + mult(S_S_S)%ltrans => ltrans(aSa_range) + !mult(S_S_S)%bindex => aHa_matind + mult(S_S_S)%parts => parts + mult(S_S_S)%prim => prim + mult(S_S_S)%gcs => gcs if (atomf.ne.sf) then - call mult_ini(mult(PK_P_PKP), aSa_matind, myid-1, prim%n_prim, parts) + call mult_ini(mult(S_S_S), aSa_matind, myid-1, prim%n_prim, parts) else - call mult_ini(mult(PK_P_PKP), Smatind, myid-1, prim%n_prim, parts) + call mult_ini(mult(S_S_S), Smatind, myid-1, prim%n_prim, parts) end if - !call mult_ini(mult(PK_P_PKP), aUa_matind, myid-1, prim%n_prim, parts) endif - endif -!!! nakata DFT+U end - !end if - ! call stop_timer(tmr_std_matrices) - + endif ! DFT+U return end subroutine immi !!*** @@ -1495,92 +1380,11 @@ subroutine fmmi(prim) end if !!! 2024.05.20 nakata DFT+U if (flag_DFTplusU) then - nullify(mult(pOp_pWa_pOWa)%amat,mult(pOp_pWa_pOWa)%bmat,mult(pOp_pWa_pOWa)%cmat, & - mult(pOp_pWa_pOWa)%ahalo,mult(pOp_pWa_pOWa)%chalo,mult(pOp_pWa_pOWa)%ltrans, & - mult(pOp_pWa_pOWa)%bindex,mult(pOp_pWa_pOWa)%parts,mult(pOp_pWa_pOWa)%prim, & - mult(pOp_pWa_pOWa)%gcs) - nullify(mult(aVp_pOWa_aPa)%amat,mult(aVp_pOWa_aPa)%bmat,mult(aVp_pOWa_aPa)%cmat, & - mult(aVp_pOWa_aPa)%ahalo,mult(aVp_pOWa_aPa)%chalo,mult(aVp_pOWa_aPa)%ltrans, & - mult(aVp_pOWa_aPa)%bindex,mult(aVp_pOWa_aPa)%parts,mult(aVp_pOWa_aPa)%prim, & - mult(aVp_pOWa_aPa)%gcs) - nullify(mult(P_K_PK)%amat,mult(P_K_PK)%bmat,mult(P_K_PK)%cmat, & - mult(P_K_PK)%ahalo,mult(P_K_PK)%chalo,mult(P_K_PK)%ltrans, & - mult(P_K_PK)%bindex,mult(P_K_PK)%parts,mult(P_K_PK)%prim, & - mult(P_K_PK)%gcs) - nullify(mult(PK_P_PKP)%amat,mult(PK_P_PKP)%bmat,mult(PK_P_PKP)%cmat, & - mult(PK_P_PKP)%ahalo,mult(PK_P_PKP)%chalo,mult(PK_P_PKP)%ltrans, & - mult(PK_P_PKP)%bindex,mult(PK_P_PKP)%parts,mult(PK_P_PKP)%prim, & - mult(PK_P_PKP)%gcs) - endif -!!! nakata DFT+U end - ! Comms - call deallocate_comms_data(mult(aHa_AP_AP)%comms) - call deallocate_comms_data(mult(L_S_LS)%comms) - call deallocate_comms_data(mult(L_H_LH)%comms) - call deallocate_comms_data(mult(T_S_TS)%comms) - !call deallocate_comms_data(mult(S_TS_S)%comms) - !call deallocate_comms_data(mult(S_LS_L)%comms) - call deallocate_comms_data(mult(SL_S_SLS)%comms) - call deallocate_comms_data(mult(LH_L_SLS)%comms) - call deallocate_comms_data(mult(LS_L_LSL)%comms) - call deallocate_comms_data(mult(HL_S_LSL)%comms) - call deallocate_comms_data(mult(HLS_LS_L)%comms) - !call deallocate_comms_data(mult(LSL_SL_L)%comms) - call deallocate_comms_data(mult(SLS_LS_L)%comms) - call deallocate_comms_data(mult(LHL_SL_S)%comms) - call deallocate_comms_data(mult(LSL_SL_H)%comms) - call deallocate_comms_data(mult(AP_PA_aHa)%comms) - call deallocate_comms_data(mult(TS_T_T)%comms) - call deallocate_comms_data(mult(TH_T_L)%comms) - call deallocate_comms_data(mult(T_H_TH)%comms) - call deallocate_comms_data(mult(T_L_TL)%comms) - call deallocate_comms_data(mult(TL_T_L)%comms) - if (atomf.ne.sf) then - call deallocate_comms_data(mult(aSa_sCaTr_aSs)%comms) - call deallocate_comms_data(mult(sCa_aSs_sSs)%comms) - call deallocate_comms_data(mult(aHa_sCaTr_aHs)%comms) - call deallocate_comms_data(mult(sCa_aHs_sHs)%comms) - call deallocate_comms_data(mult(sCaTr_sSs_aSs)%comms) - call deallocate_comms_data(mult(aSs_sCa_aSa)%comms) - call deallocate_comms_data(mult(sCaTr_sHs_aHs)%comms) - call deallocate_comms_data(mult(aHs_sCa_aHa)%comms) - call deallocate_comms_data(mult(sSs_sSa_sCa)%comms) - call deallocate_comms_data(mult(sHs_sHa_sCa)%comms) - if (flag_LFD) then - call deallocate_comms_data(mult(aLa_aSa_aLSa)%comms) - call deallocate_comms_data(mult(aLa_aHa_aLHa)%comms) - endif - endif - if( flag_neutral_atom_projector ) then - call deallocate_comms_data(mult(aNA_NAa_aHa)%comms) - call deallocate_comms_data(mult(aHa_aNA_aNA)%comms) - end if -!!! 2024.05.20 nakata DFT+U - if (flag_DFTplusU) then - call deallocate_comms_data(mult(pOp_pWa_pOWa)%comms) - call deallocate_comms_data(mult(aVp_pOWa_aPa)%comms) - call deallocate_comms_data(mult(P_K_PK)%comms) - call deallocate_comms_data(mult(PK_P_PKP)%comms) - endif -!!! nakata DFT+U end - do i=1,mx_trans - do j = 1,gtrans(i)%n_rem_node!maxnabaprocs+1 - !if(associated(pairs(j,i)%submat)) deallocate(pairs(j,i)%submat) - deallocate(pairs(j,i)%submat) - end do - end do - deallocate(pairs) - deallocate(Spairind, Lpairind, APpairind, LSpairind, LHpairind, & - LSLpairind, Tpairind) - if (atomf.ne.sf) deallocate(aSs_pairind, aHs_pairind, SFcoeff_pairind) - if(flag_neutral_atom_projector) then - deallocate(aNApairind) - if(atomf.ne.sf) deallocate(aNAapairind) - end if -!!! 2024.05.20 nakata DFT+U - if (flag_DFTplusU) then - deallocate(PK_pairind) - if(atomf.ne.sf) deallocate(aUa_pairind) + nullify(mult(S_S_S)%amat,mult(S_S_S)%bmat,mult(S_S_S)%cmat, & + mult(S_S_S)%ahalo,mult(S_S_S)%chalo,mult(S_S_S)%ltrans, & + mult(S_S_S)%bindex,mult(S_S_S)%parts,mult(S_S_S)%prim, & + mult(S_S_S)%gcs) + if(atomf.ne.sf) deallocate(aSa_pairind) endif !!! nakata DFT+U end call dissociate_matrices @@ -1622,11 +1426,6 @@ subroutine fmmi(prim) call end_ops(prim,aNArange, aNAmatind,aNA_trans) call end_ops(prim,NAarange,NAamatind) end if -!!! 2024.05.20 nakata DFT+U - if (flag_DFTplusU) then - call end_ops(prim,PKrange,PKmatind,PK_trans) - endif -!!! nakata DFT+U end ! call stop_timer(tmr_std_matrices) deallocate(mat) return @@ -2298,13 +2097,13 @@ subroutine associate_matrices allocate(matH(nspin), matL(nspin), matLS(nspin), matSL(nspin), & matK(nspin), matphi(nspin), matM12(nspin), matM4(nspin), & matU(nspin), matUT(nspin), matX(nspin), matSX(nspin), & - matHplusU(nspin), matEplusU(nspin), STAT=stat) ! 2024.05.20 nakata DFT+U + STAT=stat) ! 2024.05.20 nakata DFT+U if (stat /= 0) & call cq_abort('associate_matrices: failed to allocate spin & &depdendent matrix tags', nspin, stat) ! For atomf-based calculations allocate(matHatomf(nspin), matKatomf(nspin), matXatomf(nspin), & - matHplusUatomf(nspin), matEplusUatomf(nspin), STAT=stat) ! 2024.05.20 nakata DFT+U + matHplusUatomf(nspin), STAT=stat) ! 2024.05.20 nakata DFT+U if (stat /= 0) & call cq_abort('associate_matrices: failed to allocate spin & &depdendent ATOMF matrix tags', nspin, stat) @@ -2429,31 +2228,13 @@ subroutine associate_matrices end if !!! 2024.05.20 nakata DFT+U if (flag_DFTplusU) then - matHplusU(1) = current_matrix + 1 - matEplusU(1) = current_matrix + 2 - current_matrix = current_matrix + 2 - if (nspin == 2) then - matHplusU(2) = current_matrix + 1 - matEplusU(2) = current_matrix + 2 - current_matrix = current_matrix + 2 - endif - if (atomf.eq.sf) then - matHplusUatomf(1) = matHplusU(1) - matEplusUatomf(1) = matEplusU(1) - if (nspin == 2) then - matHplusUatomf(2) = matHplusU(2) - matEplusUatomf(2) = matEplusU(2) - endif - else matHplusUatomf(1) = current_matrix + 1 - matEplusUatomf(1) = current_matrix + 2 - current_matrix = current_matrix + 2 + current_matrix = current_matrix + 1 if (nspin == 2) then matHplusUatomf(2) = current_matrix + 1 - matEplusUatomf(2) = current_matrix + 2 - current_matrix = current_matrix + 2 + current_matrix = current_matrix + 1 endif - endif + !endif endif !!! nakata DFT+U end @@ -2530,12 +2311,7 @@ subroutine associate_matrices !!! 2024.05.20 nakata DFT+U if (flag_DFTplusU) then do spin = 1, nspin - mat_p(matHplusU(spin))%sf1_type = sf - mat_p(matEplusU(spin))%sf1_type = sf - if (atomf.ne.sf) then - mat_p(matHplusUatomf(spin))%sf1_type = atomf - mat_p(matEplusUatomf(spin))%sf1_type = atomf - endif + mat_p(matHplusUatomf(spin))%sf1_type = atomf enddo endif !!! nakata DFT+U end @@ -2593,12 +2369,7 @@ subroutine associate_matrices !!! 2024.05.20 nakata DFT+U if (flag_DFTplusU) then do spin = 1, nspin - mat_p(matHplusU(spin))%sf2_type = sf - mat_p(matEplusU(spin))%sf2_type = sf - if (atomf.ne.sf) then - mat_p(matHplusUatomf(spin))%sf2_type = atomf - mat_p(matEplusUatomf(spin))%sf2_type = atomf - endif + mat_p(matHplusUatomf(spin))%sf2_type = atomf enddo endif !!! nakata DFT+U end @@ -2655,12 +2426,7 @@ subroutine associate_matrices !!! 2024.05.20 nakata DFT+U if (flag_DFTplusU) then do spin = 1, nspin - matrix_index(matHplusU(spin)) = Hrange - matrix_index(matEplusU(spin)) = Hrange - if (atomf.ne.sf) then - matrix_index(matHplusUatomf(spin)) = aHa_range - matrix_index(matEplusUatomf(spin)) = aHa_range - endif + matrix_index(matHplusUatomf(spin)) = aHa_range enddo endif !!! nakata DFT+U end @@ -2770,12 +2536,7 @@ subroutine associate_matrices !!! 2024.05.20 nakata DFT+U if (flag_DFTplusU) then do spin = 1, nspin - trans_index(matHplusU(spin)) = 0 - trans_index(matEplusU(spin)) = 0 - if (atomf.ne.sf) then - trans_index(matHplusUatomf(spin)) = 0 - trans_index(matEplusUatomf(spin)) = 0 - endif + trans_index(matHplusUatomf(spin)) = 0 enddo endif !!! nakata DFT+U end diff --git a/testsuite/test_009_DFT_plus_U/Conquest_input b/testsuite/test_009_DFT_plus_U/Conquest_input new file mode 100644 index 000000000..707f4df83 --- /dev/null +++ b/testsuite/test_009_DFT_plus_U/Conquest_input @@ -0,0 +1,38 @@ +minE.SCTolerance 1e-6 +IO.AtomChargeOutput T +AtomMove.TypeOfRun static +minE.SelfConsistent T +IO.Coordinates ionpos.dat +IO.Iprint 1 +Grid.GridCutoff 100 +Diag.MPMesh T +Diag.GammaCentred T +Diag.MPMeshX 3 +Diag.MPMeshY 3 +Diag.MPMeshZ 3 +Diag.SmearingType 1 +Diag.MPOrder 5 +Diag.kT 0.010 + +SC.KerkerPreCondition T +SC.LinearMixingFactor 0.1 +SC.MaxIters 300 +Spin.SpinPolarised T +Spin.FixSpin F + +DM.DFTplusU T + +# Spec, n, l, zeta, U +%block DFTplusU +1 3 2 1 0.0772 +%endblock + +General.NumberOfSpecies 1 +%block ChemicalSpeciesLabel + 1 28.086 Fe +%endblock + +%block Fe +Atom.SpinNeUp 9 +Atom.SpinNeDn 7 +%endblock diff --git a/testsuite/test_009_DFT_plus_U/Fe.ion b/testsuite/test_009_DFT_plus_U/Fe.ion new file mode 100644 index 000000000..cbfb90d37 --- /dev/null +++ b/testsuite/test_009_DFT_plus_U/Fe.ion @@ -0,0 +1,6425 @@ + + + Git Branch: master; tag, hash: v1.5 + Date generated : 2026/04/28 at 13:39 + + + Pseudopotential type : ONCVPSP + Hamann code version : v3.3.1 + Hamann input file name: Fe.in (appended at end of file) + Core radii (bohr) : l=0 1.250 l=1 1.200 l=2 1.550 + 4 valence shells : 3s 3p 3d 4s + XC functional code : 000101 + XC description : GGA PBE96 + Includes partial core corrections + + +Fe basis set with GGA PBE96 functional +n = 3, l = 0, 1 zetas Semi-core + Radii: 2.78 +n = 3, l = 1, 1 zetas Semi-core + Radii: 3.13 +n = 3, l = 2, 2 zetas + Radii: 5.23 2.50 +n = 4, l = 0, 2 zetas + Radii: 8.63 4.53 +n = 4, l = 1, 1 zetas, perturbative polarisation shell + Radii: 8.63 + + + Fe pb nrl pcec + + +Fe # Element symbol +Fe # Label + 26.00 # Atomic number + 16.0000000000 # Valence charge + 55.8500000000 # Mass + 0.0000000000 # Self energy + 2 7 # Lmax for basis, no of orbitals + 2 6 # Lmax for projectors, no of proj +# PAOs:_______________ + 0 3 1 0 2.000000 #orbital l, n, z, is_polarized, population + 278 0.0100301479944450 2.7783509944612659 + 0.00000000000 2.16501360655 + 0.01003014799 2.16503384181 + 0.02006029599 2.16509394714 + 0.03009044398 2.16519212340 + 0.04012059198 2.16532537997 + 0.05015073997 2.16548954638 + 0.06018088797 2.16567928879 + 0.07021103596 2.16588813087 + 0.08024118396 2.16610847938 + 0.09027133195 2.16633165400 + 0.10030147994 2.16654792161 + 0.11033162794 2.16674653468 + 0.12036177593 2.16691577375 + 0.13039192393 2.16704299383 + 0.14042207192 2.16711467453 + 0.15045221992 2.16711647377 + 0.16048236791 2.16703328480 + 0.17051251591 2.16684929650 + 0.18054266390 2.16654805647 + 0.19057281189 2.16611253694 + 0.20060295989 2.16552520309 + 0.21063310788 2.16476808361 + 0.22066325588 2.16382284314 + 0.23069340387 2.16267085645 + 0.24072355187 2.16129328390 + 0.25075369986 2.15967114812 + 0.26078384786 2.15778541134 + 0.27081399585 2.15561705331 + 0.28084414384 2.15314714931 + 0.29087429184 2.15035694810 + 0.30090443983 2.14722794940 + 0.31093458783 2.14374198054 + 0.32096473582 2.13988127216 + 0.33099488382 2.13562853241 + 0.34102503181 2.13096701951 + 0.35105517981 2.12588061235 + 0.36108532780 2.12035387868 + 0.37111547579 2.11437214092 + 0.38114562379 2.10792153888 + 0.39117577178 2.10098908960 + 0.40120591978 2.09356274361 + 0.41123606777 2.08563143773 + 0.42126621577 2.07718514394 + 0.43129636376 2.06821491426 + 0.44132651176 2.05871292136 + 0.45135665975 2.04867249481 + 0.46138680774 2.03808815268 + 0.47141695574 2.02695562859 + 0.48144710373 2.01527189386 + 0.49147725173 2.00303517479 + 0.50150739972 1.99024496508 + 0.51153754772 1.97690203318 + 0.52156769571 1.96300842467 + 0.53159784371 1.94856745971 + 0.54162799170 1.93358372548 + 0.55165813969 1.91806306377 + 0.56168828769 1.90201255374 + 0.57171843568 1.88544049001 + 0.58174858368 1.86835635618 + 0.59177873167 1.85077079392 + 0.60180887967 1.83269556786 + 0.61183902766 1.81414352639 + 0.62186917566 1.79512855869 + 0.63189932365 1.77566554811 + 0.64192947164 1.75577032227 + 0.65195961964 1.73545960002 + 0.66198976763 1.71475093566 + 0.67201991563 1.69366266061 + 0.68205006362 1.67221382288 + 0.69208021162 1.65042412470 + 0.70211035961 1.62831385847 + 0.71214050761 1.60590384154 + 0.72217065560 1.58321534998 + 0.73220080359 1.56027005180 + 0.74223095159 1.53708993980 + 0.75226109958 1.51369726451 + 0.76229124758 1.49011446740 + 0.77232139557 1.46636411477 + 0.78235154357 1.44246883252 + 0.79238169156 1.41845124219 + 0.80241183956 1.39433389842 + 0.81244198755 1.37013922817 + 0.82247213554 1.34588947193 + 0.83250228354 1.32160662705 + 0.84253243153 1.29731239360 + 0.85256257953 1.27302812269 + 0.86259272752 1.24877476757 + 0.87262287552 1.22457283766 + 0.88265302351 1.20044235556 + 0.89268317151 1.17640281717 + 0.90271331950 1.15247315500 + 0.91274346749 1.12867170474 + 0.92277361549 1.10501617509 + 0.93280376348 1.08152362093 + 0.94283391148 1.05821041971 + 0.95286405947 1.03509225117 + 0.96289420747 1.01218408020 + 0.97292435546 0.98950014295 + 0.98295450346 0.96705393589 + 0.99298465145 0.94485820793 + 1.00301479944 0.92292495536 + 1.01304494744 0.90126541950 + 1.02307509543 0.87989008700 + 1.03310524343 0.85880869252 + 1.04313539142 0.83803022376 + 1.05316553942 0.81756292855 + 1.06319568741 0.79741432396 + 1.07322583541 0.77759120715 + 1.08325598340 0.75809966784 + 1.09328613139 0.73894510224 + 1.10331627939 0.72013222821 + 1.11334642738 0.70166510151 + 1.12337657538 0.68354713302 + 1.13340672337 0.66578110669 + 1.14343687137 0.64836919810 + 1.15346701936 0.63131299356 + 1.16349716736 0.61461350950 + 1.17352731535 0.59827121207 + 1.18355746334 0.58228603694 + 1.19358761134 0.56665740904 + 1.20361775933 0.55138426187 + 1.21364790733 0.53646505591 + 1.22367805532 0.52189780259 + 1.23370820332 0.50768008017 + 1.24373835131 0.49380904235 + 1.25376849931 0.48028145436 + 1.26379864730 0.46709372391 + 1.27382879529 0.45424183538 + 1.28385894329 0.44171941285 + 1.29388909128 0.42951916725 + 1.30391923928 0.41763445884 + 1.31394938727 0.40605850172 + 1.32397953527 0.39478457735 + 1.33400968326 0.38380601142 + 1.34403983126 0.37311619571 + 1.35406997925 0.36270859034 + 1.36410012724 0.35257672941 + 1.37413027524 0.34271422610 + 1.38416042323 0.33311477714 + 1.39419057123 0.32377216673 + 1.40422071922 0.31468026995 + 1.41425086722 0.30583305571 + 1.42428101521 0.29722458925 + 1.43431116321 0.28884903427 + 1.44434131120 0.28070065466 + 1.45437145919 0.27277381591 + 1.46440160719 0.26506298623 + 1.47443175518 0.25756273733 + 1.48446190318 0.25026774500 + 1.49449205117 0.24317278939 + 1.50452219917 0.23627275518 + 1.51455234716 0.22956263137 + 1.52458249516 0.22303751109 + 1.53461264315 0.21669259113 + 1.54464279114 0.21052317135 + 1.55467293914 0.20452465425 + 1.56470308713 0.19869254234 + 1.57473323513 0.19302243642 + 1.58476338312 0.18751004250 + 1.59479353112 0.18215117035 + 1.60482367911 0.17694171806 + 1.61485382711 0.17187767396 + 1.62488397510 0.16695512728 + 1.63491412309 0.16217026200 + 1.64494427109 0.15751935169 + 1.65497441908 0.15299876028 + 1.66500456708 0.14860494055 + 1.67503471507 0.14433443229 + 1.68506486307 0.14018386083 + 1.69509501106 0.13614993548 + 1.70512515906 0.13222944792 + 1.71515530705 0.12841927061 + 1.72518545504 0.12471635520 + 1.73521560304 0.12111773093 + 1.74524575103 0.11762050305 + 1.75527589903 0.11422185120 + 1.76530604702 0.11091902784 + 1.77533619502 0.10770935670 + 1.78536634301 0.10459023118 + 1.79539649101 0.10155911285 + 1.80542663900 0.09861352987 + 1.81545678699 0.09575107550 + 1.82548693499 0.09296940660 + 1.83551708298 0.09026624216 + 1.84554723098 0.08763936180 + 1.85557737897 0.08508660439 + 1.86560752697 0.08260586660 + 1.87563767496 0.08019510150 + 1.88566782296 0.07785231720 + 1.89569797095 0.07557557549 + 1.90572811894 0.07336299053 + 1.91575826694 0.07121272754 + 1.92578841493 0.06912300151 + 1.93581856293 0.06709207594 + 1.94584871092 0.06511826165 + 1.95587885892 0.06319991551 + 1.96590900691 0.06133543932 + 1.97593915491 0.05952327858 + 1.98596930290 0.05776192142 + 1.99599945089 0.05604989746 + 2.00602959889 0.05438577670 + 2.01605974688 0.05276816847 + 2.02608989488 0.05119572041 + 2.03612004287 0.04966711742 + 2.04615019087 0.04818108065 + 2.05618033886 0.04673636658 + 2.06621048686 0.04533176600 + 2.07624063485 0.04396610313 + 2.08627078284 0.04263823466 + 2.09630093084 0.04134704892 + 2.10633107883 0.04009146495 + 2.11636122683 0.03887043170 + 2.12639137482 0.03768292718 + 2.13642152282 0.03652795764 + 2.14645167081 0.03540455682 + 2.15648181881 0.03431178512 + 2.16651196680 0.03324872891 + 2.17654211479 0.03221449977 + 2.18657226279 0.03120823377 + 2.19660241078 0.03022909077 + 2.20663255878 0.02927625375 + 2.21666270677 0.02834892818 + 2.22669285477 0.02744634129 + 2.23672300276 0.02656774153 + 2.24675315076 0.02571239790 + 2.25678329875 0.02487959937 + 2.26681344674 0.02406865430 + 2.27684359474 0.02327888986 + 2.28687374273 0.02250965151 + 2.29690389073 0.02176030240 + 2.30693403872 0.02103022291 + 2.31696418672 0.02031881009 + 2.32699433471 0.01962547720 + 2.33702448271 0.01894965318 + 2.34705463070 0.01829078223 + 2.35708477869 0.01764832330 + 2.36711492669 0.01702174966 + 2.37714507468 0.01641054851 + 2.38717522268 0.01581422045 + 2.39720537067 0.01523227916 + 2.40723551867 0.01466425098 + 2.41726566666 0.01410967445 + 2.42729581466 0.01356810002 + 2.43732596265 0.01303908963 + 2.44735611064 0.01252221631 + 2.45738625864 0.01201706392 + 2.46741640663 0.01152322671 + 2.47744655463 0.01104030905 + 2.48747670262 0.01056792507 + 2.49750685062 0.01010569835 + 2.50753699861 0.00965326160 + 2.51756714661 0.00921025637 + 2.52759729460 0.00877633276 + 2.53762744259 0.00835114909 + 2.54765759059 0.00793437170 + 2.55768773858 0.00752567457 + 2.56771788658 0.00712473916 + 2.57774803457 0.00673125406 + 2.58777818257 0.00634491479 + 2.59780833056 0.00596542354 + 2.60783847856 0.00559248893 + 2.61786862655 0.00522582574 + 2.62789877454 0.00486515473 + 2.63792892254 0.00451020239 + 2.64795907053 0.00416070070 + 2.65798921853 0.00381638697 + 2.66801936652 0.00347700357 + 2.67804951452 0.00314229774 + 2.68807966251 0.00281202143 + 2.69810981051 0.00248593104 + 2.70813995850 0.00216378727 + 2.71817010649 0.00184535491 + 2.72820025449 0.00153040268 + 2.73823040248 0.00121870305 + 2.74826055048 0.00091003172 + 2.75829069847 0.00060416746 + 2.76832084647 0.00030089442 + 2.77835099446 0.00000000000 + 1 3 1 0 6.000000 #orbital l, n, z, is_polarized, population + 314 0.0100011029443181 3.1303452215715719 + 0.00000000000 6.40714844163 + 0.01000110294 6.40576503790 + 0.02000220589 6.40161672159 + 0.03000330883 6.39470919729 + 0.04000441178 6.38505195719 + 0.05000551472 6.37265826034 + 0.06000661767 6.35754510335 + 0.07000772061 6.33973318258 + 0.08000882355 6.31924684820 + 0.09000992650 6.29611405010 + 0.10001102944 6.27036627592 + 0.11001213239 6.24203848129 + 0.12001323533 6.21116901259 + 0.13001433828 6.17779952225 + 0.14001544122 6.14197487706 + 0.15001654416 6.10374305950 + 0.16001764711 6.06315506259 + 0.17001875005 6.02026477835 + 0.18001985300 5.97512888030 + 0.19002095594 5.92780670033 + 0.20002205889 5.87836010021 + 0.21002316183 5.82685333810 + 0.22002426477 5.77335293052 + 0.23002536772 5.71792751009 + 0.24002647066 5.66064767946 + 0.25002757361 5.60158586175 + 0.26002867655 5.54081614816 + 0.27002977950 5.47841414285 + 0.28003088244 5.41445680576 + 0.29003198539 5.34902229376 + 0.30003308833 5.28218980047 + 0.31003419127 5.21403939536 + 0.32003529422 5.14465186238 + 0.33003639716 5.07410853880 + 0.34003750011 5.00249115450 + 0.35003860305 4.92988167223 + 0.36003970600 4.85636212929 + 0.37004080894 4.78201448112 + 0.38004191188 4.70692044702 + 0.39004301483 4.63116135863 + 0.40004411777 4.55481801150 + 0.41004522072 4.47797052007 + 0.42004632366 4.40069817648 + 0.43004742661 4.32307931368 + 0.44004852955 4.24519117297 + 0.45004963249 4.16710977648 + 0.46005073544 4.08890980477 + 0.47005183838 4.01066447992 + 0.48005294133 3.93244545436 + 0.49005404427 3.85432270563 + 0.50005514722 3.77636443729 + 0.51005625016 3.69863698630 + 0.52005735310 3.62120473684 + 0.53005845605 3.54413004090 + 0.54005955899 3.46747314559 + 0.55006066194 3.39129212742 + 0.56006176488 3.31564283351 + 0.57006286783 3.24057882979 + 0.58006397077 3.16615135625 + 0.59006507371 3.09240928914 + 0.60006617666 3.01939911017 + 0.61006727960 2.94716488263 + 0.62006838255 2.87574823429 + 0.63006948549 2.80518834698 + 0.64007058844 2.73552195281 + 0.65007169138 2.66678333674 + 0.66007279432 2.59900434542 + 0.67007389727 2.53221440206 + 0.68007500021 2.46644052711 + 0.69007610316 2.40170736451 + 0.70007720610 2.33803721337 + 0.71007830905 2.27545006463 + 0.72007941199 2.21396364254 + 0.73008051494 2.15359345071 + 0.74008161788 2.09435282227 + 0.75008272082 2.03625297405 + 0.76008382377 1.97930306427 + 0.77008492671 1.92351025355 + 0.78008602966 1.86887976881 + 0.79008713260 1.81541496988 + 0.80008823555 1.76311741834 + 0.81008933849 1.71198694838 + 0.82009044143 1.66202173929 + 0.83009154438 1.61321838929 + 0.84009264732 1.56557199039 + 0.85009375027 1.51907620399 + 0.86009485321 1.47372333683 + 0.87009595616 1.42950441718 + 0.88009705910 1.38640927078 + 0.89009816204 1.34442659642 + 0.90009926499 1.30354404087 + 0.91010036793 1.26374827286 + 0.92010147088 1.22502505593 + 0.93010257382 1.18735931996 + 0.94010367677 1.15073523110 + 0.95010477971 1.11513626004 + 0.96010588265 1.08054524830 + 0.97010698560 1.04694447253 + 0.98010808854 1.01431570660 + 0.99010919149 0.98264028141 + 1.00011029443 0.95189914227 + 1.01011139738 0.92207290380 + 1.02011250032 0.89314190228 + 1.03011360326 0.86508624538 + 1.04011470621 0.83788585925 + 1.05011580915 0.81152053296 + 1.06011691210 0.78596996017 + 1.07011801504 0.76121377826 + 1.08011911799 0.73723160471 + 1.09012022093 0.71400307090 + 1.10012132387 0.69150785331 + 1.11012242682 0.66972570224 + 1.12012352976 0.64863646804 + 1.13012463271 0.62822012500 + 1.14012573565 0.60845679295 + 1.15012683860 0.58932675670 + 1.16012794154 0.57081048340 + 1.17012904449 0.55288863801 + 1.18013014743 0.53554209859 + 1.19013125037 0.51875196050 + 1.20013235332 0.50249956987 + 1.21013345626 0.48676641415 + 1.22013455921 0.47153508089 + 1.23013566215 0.45679001258 + 1.24013676510 0.44251578458 + 1.25013786804 0.42869742511 + 1.26013897098 0.41532043063 + 1.27014007393 0.40237072329 + 1.28014117687 0.38983464192 + 1.29014227982 0.37769893504 + 1.30014338276 0.36595075386 + 1.31014448571 0.35457764149 + 1.32014558865 0.34356752279 + 1.33014669159 0.33290869594 + 1.34014779454 0.32258982281 + 1.35014889748 0.31259991945 + 1.36015000043 0.30292834682 + 1.37015110337 0.29356480143 + 1.38015220632 0.28449930615 + 1.39015330926 0.27572220115 + 1.40015441220 0.26722413488 + 1.41015551515 0.25899605525 + 1.42015661809 0.25102920094 + 1.43015772104 0.24331509285 + 1.44015882398 0.23584552573 + 1.45015992693 0.22861256000 + 1.46016102987 0.22160851366 + 1.47016213281 0.21482595448 + 1.48016323576 0.20825769233 + 1.49016433870 0.20189677163 + 1.50016544165 0.19573646412 + 1.51016654459 0.18977026166 + 1.52016764754 0.18399186932 + 1.53016875048 0.17839519866 + 1.54016985342 0.17297436105 + 1.55017095637 0.16772366153 + 1.56017205931 0.16263759220 + 1.57017316226 0.15771082421 + 1.58017426520 0.15293820522 + 1.59017536815 0.14831475878 + 1.60017647109 0.14383567073 + 1.61017757404 0.13949627805 + 1.62017867698 0.13529207241 + 1.63017977992 0.13121869813 + 1.64018088287 0.12727194257 + 1.65018198581 0.12344773103 + 1.66018308876 0.11974212331 + 1.67018419170 0.11615130910 + 1.68018529465 0.11267160357 + 1.69018639759 0.10929944321 + 1.70018750053 0.10603138181 + 1.71018860348 0.10286408657 + 1.72018970642 0.09979433428 + 1.73019080937 0.09681900768 + 1.74019191231 0.09393509193 + 1.75019301526 0.09113967119 + 1.76019411820 0.08842992532 + 1.77019522114 0.08580312663 + 1.78019632409 0.08325663686 + 1.79019742703 0.08078790414 + 1.80019852998 0.07839446012 + 1.81019963292 0.07607391717 + 1.82020073587 0.07382396569 + 1.83020183881 0.07164237147 + 1.84020294175 0.06952697323 + 1.85020404470 0.06747568012 + 1.86020514764 0.06548646939 + 1.87020625059 0.06355738414 + 1.88020735353 0.06168653108 + 1.89020845648 0.05987207842 + 1.90020955942 0.05811225386 + 1.91021066236 0.05640534253 + 1.92021176531 0.05474968514 + 1.93021286825 0.05314367609 + 1.94021397120 0.05158576174 + 1.95021507414 0.05007443858 + 1.96021617709 0.04860825168 + 1.97021728003 0.04718579298 + 1.98021838297 0.04580569979 + 1.99021948592 0.04446665328 + 2.00022058886 0.04316737699 + 2.01022169181 0.04190663545 + 2.02022279475 0.04068323285 + 2.03022389770 0.03949601166 + 2.04022500064 0.03834385143 + 2.05022610359 0.03722566752 + 2.06022720653 0.03614040994 + 2.07022830947 0.03508706221 + 2.08022941242 0.03406464022 + 2.09023051536 0.03307219120 + 2.10023161831 0.03210879268 + 2.11023272125 0.03117355147 + 2.12023382420 0.03026560273 + 2.13023492714 0.02938410902 + 2.14023603008 0.02852825938 + 2.15023713303 0.02769726850 + 2.16023823597 0.02689037586 + 2.17023933892 0.02610684490 + 2.18024044186 0.02534596229 + 2.19024154481 0.02460703709 + 2.20024264775 0.02388940008 + 2.21024375069 0.02319240303 + 2.22024485364 0.02251541801 + 2.23024595658 0.02185783674 + 2.24024705953 0.02121906994 + 2.25024816247 0.02059854670 + 2.26024926542 0.01999571392 + 2.27025036836 0.01941003568 + 2.28025147130 0.01884099273 + 2.29025257425 0.01828808190 + 2.30025367719 0.01775081565 + 2.31025478014 0.01722872147 + 2.32025588308 0.01672134147 + 2.33025698603 0.01622823188 + 2.34025808897 0.01574896260 + 2.35025919191 0.01528311673 + 2.36026029486 0.01483029017 + 2.37026139780 0.01439009124 + 2.38026250075 0.01396214021 + 2.39026360369 0.01354606895 + 2.40026470664 0.01314152059 + 2.41026580958 0.01274814909 + 2.42026691252 0.01236561896 + 2.43026801547 0.01199360487 + 2.44026911841 0.01163179137 + 2.45027022136 0.01127987252 + 2.46027132430 0.01093755166 + 2.47027242725 0.01060454103 + 2.48027353019 0.01028056156 + 2.49027463314 0.00996534254 + 2.50027573608 0.00965862139 + 2.51027683902 0.00936014338 + 2.52027794197 0.00906966139 + 2.53027904491 0.00878693567 + 2.54028014786 0.00851173360 + 2.55028125080 0.00824382947 + 2.56028235375 0.00798300424 + 2.57028345669 0.00772904539 + 2.58028455963 0.00748174664 + 2.59028566258 0.00724090779 + 2.60028676552 0.00700633452 + 2.61028786847 0.00677783823 + 2.62028897141 0.00655523581 + 2.63029007436 0.00633834952 + 2.64029117730 0.00612700677 + 2.65029228024 0.00592104002 + 2.66029338319 0.00572028656 + 2.67029448613 0.00552458838 + 2.68029558908 0.00533379206 + 2.69029669202 0.00514774856 + 2.70029779497 0.00496631312 + 2.71029889791 0.00478934515 + 2.72030000085 0.00461670804 + 2.73030110380 0.00444826908 + 2.74030220674 0.00428389932 + 2.75030330969 0.00412347347 + 2.76030441263 0.00396686975 + 2.77030551558 0.00381396983 + 2.78030661852 0.00366465868 + 2.79030772146 0.00351882447 + 2.80030882441 0.00337635849 + 2.81030992735 0.00323715507 + 2.82031103030 0.00310111142 + 2.83031213324 0.00296812759 + 2.84031323619 0.00283810639 + 2.85031433913 0.00271095325 + 2.86031544207 0.00258657619 + 2.87031654502 0.00246488573 + 2.88031764796 0.00234579478 + 2.89031875091 0.00222921858 + 2.90031985385 0.00211507466 + 2.91032095680 0.00200328272 + 2.92032205974 0.00189376459 + 2.93032316269 0.00178644416 + 2.94032426563 0.00168124728 + 2.95032536857 0.00157810176 + 2.96032647152 0.00147693727 + 2.97032757446 0.00137768527 + 2.98032867741 0.00128027897 + 2.99032978035 0.00118465330 + 3.00033088330 0.00109074479 + 3.01033198624 0.00099849158 + 3.02033308918 0.00090783334 + 3.03033419213 0.00081871123 + 3.04033529507 0.00073106782 + 3.05033639802 0.00064484711 + 3.06033750096 0.00055999441 + 3.07033860391 0.00047645635 + 3.08033970685 0.00039418083 + 3.09034080979 0.00031311695 + 3.10034191274 0.00023321466 + 3.11034301568 0.00015442557 + 3.12034411863 0.00007670263 + 3.13034522157 0.00000000000 + 2 3 1 0 6.000000 #orbital l, n, z, is_polarized, population + 523 0.0100157567829269 5.2282250406878221 + 0.00000000000 8.49532077166 + 0.01001575678 8.49339572753 + 0.02003151357 8.48762304824 + 0.03004727035 8.47801049848 + 0.04006302713 8.46457097828 + 0.05007878391 8.44732250361 + 0.06009454070 8.42628817186 + 0.07011029748 8.40149611445 + 0.08012605426 8.37297943845 + 0.09014181105 8.34077615793 + 0.10015756783 8.30492911506 + 0.11017332461 8.26548589131 + 0.12018908140 8.22249870902 + 0.13020483818 8.17602432346 + 0.14022059496 8.12612390576 + 0.15023635174 8.07286291707 + 0.16025210853 8.01631097411 + 0.17026786531 7.95654170657 + 0.18028362209 7.89363260671 + 0.19029937888 7.82766487153 + 0.20031513566 7.75872323792 + 0.21033089244 7.68689581120 + 0.22034664922 7.61227388754 + 0.23036240601 7.53495177060 + 0.24037816279 7.45502658304 + 0.25039391957 7.37259807321 + 0.26040967636 7.28776841756 + 0.27042543314 7.20064201938 + 0.28044118992 7.11132530418 + 0.29045694670 7.01992651249 + 0.30047270349 6.92655549029 + 0.31048846027 6.83132347793 + 0.32050421705 6.73434289780 + 0.33051997384 6.63572714145 + 0.34053573062 6.53559035659 + 0.35055148740 6.43404723462 + 0.36056724419 6.33121279906 + 0.37058300097 6.22720219553 + 0.38059875775 6.12213048377 + 0.39061451453 6.01611243211 + 0.40063027132 5.90926231502 + 0.41064602810 5.80169371419 + 0.42066178488 5.69351932350 + 0.43067754167 5.58485075850 + 0.44069329845 5.47579837074 + 0.45070905523 5.36647106741 + 0.46072481201 5.25697613665 + 0.47074056880 5.14741907903 + 0.48075632558 5.03790344540 + 0.49077208236 4.92853068160 + 0.50078783915 4.81939998029 + 0.51080359593 4.71060814017 + 0.52081935271 4.60224943290 + 0.53083510950 4.49441547799 + 0.54085086628 4.38719512579 + 0.55086662306 4.28067434890 + 0.56088237984 4.17493614200 + 0.57089813663 4.07006043042 + 0.58091389341 3.96612398746 + 0.59092965019 3.86320036048 + 0.60094540698 3.76135980600 + 0.61096116376 3.66066923360 + 0.62097692054 3.56119215886 + 0.63099267732 3.46298866512 + 0.64100843411 3.36611537404 + 0.65102419089 3.27062542502 + 0.66103994767 3.17656846311 + 0.67105570446 3.08399063557 + 0.68107146124 2.99293459661 + 0.69108721802 2.90343952041 + 0.70110297480 2.81554112200 + 0.71111873159 2.72927168590 + 0.72113448837 2.64466010218 + 0.73115024515 2.56173190973 + 0.74116600194 2.48050934642 + 0.75118175872 2.40101140586 + 0.76119751550 2.32325390041 + 0.77121327229 2.24724953016 + 0.78122902907 2.17300795742 + 0.79124478585 2.10053588656 + 0.80126054263 2.02983714856 + 0.81127629942 1.96091279012 + 0.82129205620 1.89376116691 + 0.83130781298 1.82837804038 + 0.84132356977 1.76475667802 + 0.85133932655 1.70288795653 + 0.86135508333 1.64276046738 + 0.87137084011 1.58436062473 + 0.88138659690 1.52767277488 + 0.89140235368 1.47267930725 + 0.90141811046 1.41936076627 + 0.91143386725 1.36769596386 + 0.92144962403 1.31766209229 + 0.93146538081 1.26923483678 + 0.94148113760 1.22238848781 + 0.95149689438 1.17709605255 + 0.96151265116 1.13332936532 + 0.97152840794 1.09105919656 + 0.98154416473 1.05025536022 + 0.99155992151 1.01088681915 + 1.00157567829 0.97292178836 + 1.01159143508 0.93632783576 + 1.02160719186 0.90107198037 + 1.03162294864 0.86712078758 + 1.04163870542 0.83444046140 + 1.05165446221 0.80299693354 + 1.06167021899 0.77275594912 + 1.07168597577 0.74368314887 + 1.08170173256 0.71574414778 + 1.09171748934 0.68890461011 + 1.10173324612 0.66313032049 + 1.11174900290 0.63838725138 + 1.12176475969 0.61464162657 + 1.13178051647 0.59185998080 + 1.14179627325 0.57000921554 + 1.15181203004 0.54905665084 + 1.16182778682 0.52897007333 + 1.17184354360 0.50971778042 + 1.18185930039 0.49126862065 + 1.19187505717 0.47359203043 + 1.20189081395 0.45665806699 + 1.21190657073 0.44043743670 + 1.22192232752 0.42490152427 + 1.23193808430 0.41002241498 + 1.24195384108 0.39577290806 + 1.25196959787 0.38212653827 + 1.26198535465 0.36905758948 + 1.27200111143 0.35654110321 + 1.28201686821 0.34455288582 + 1.29203262500 0.33306951382 + 1.30204838178 0.32206833788 + 1.31206413856 0.31152748121 + 1.32207989535 0.30142583730 + 1.33209565213 0.29174306633 + 1.34211140891 0.28245958890 + 1.35212716570 0.27355657801 + 1.36214292248 0.26501594948 + 1.37215867926 0.25682035090 + 1.38217443604 0.24895314912 + 1.39219019283 0.24139841645 + 1.40220594961 0.23414091591 + 1.41222170639 0.22716608520 + 1.42223746318 0.22046002006 + 1.43225321996 0.21400945667 + 1.44226897674 0.20780175342 + 1.45228473352 0.20182487219 + 1.46230049031 0.19606735903 + 1.47231624709 0.19051832460 + 1.48233200387 0.18516742419 + 1.49234776066 0.18000483765 + 1.50236351744 0.17502124914 + 1.51237927422 0.17020782674 + 1.52239503100 0.16555620225 + 1.53241078779 0.16105845242 + 1.54242654457 0.15670707642 + 1.55244230135 0.15249497566 + 1.56245805814 0.14841542912 + 1.57247381492 0.14446198735 + 1.58248957170 0.14062925411 + 1.59250532849 0.13691328890 + 1.60252108527 0.13331026090 + 1.61253684205 0.12981615123 + 1.62255259883 0.12642722206 + 1.63256835562 0.12313988827 + 1.64258411240 0.11995069638 + 1.65259986918 0.11685632515 + 1.66261562597 0.11385357786 + 1.67263138275 0.11093937828 + 1.68264713953 0.10811076566 + 1.69266289631 0.10536488995 + 1.70267865310 0.10269900721 + 1.71269440988 0.10011047522 + 1.72271016666 0.09759674937 + 1.73272592345 0.09515537860 + 1.74274168023 0.09278400165 + 1.75275743701 0.09048034335 + 1.76277319380 0.08824221125 + 1.77278895058 0.08606749219 + 1.78280470736 0.08395414919 + 1.79282046414 0.08190021838 + 1.80283622093 0.07990380613 + 1.81285197771 0.07796308625 + 1.82286773449 0.07607629731 + 1.83288349128 0.07424174015 + 1.84289924806 0.07245777541 + 1.85291500484 0.07072282124 + 1.86293076162 0.06903535101 + 1.87294651841 0.06739389124 + 1.88296227519 0.06579701954 + 1.89297803197 0.06424336262 + 1.90299378876 0.06273159447 + 1.91300954554 0.06126043452 + 1.92302530232 0.05982864595 + 1.93304105910 0.05843503403 + 1.94305681589 0.05707844453 + 1.95307257267 0.05575776222 + 1.96308832945 0.05447190942 + 1.97310408624 0.05321984459 + 1.98311984302 0.05200056101 + 1.99313559980 0.05081308549 + 2.00315135659 0.04965647711 + 2.01316711337 0.04852982612 + 2.02318287015 0.04743225270 + 2.03319862693 0.04636290598 + 2.04321438372 0.04532096289 + 2.05323014050 0.04430562723 + 2.06324589728 0.04331612869 + 2.07326165407 0.04235172190 + 2.08327741085 0.04141168554 + 2.09329316763 0.04049532154 + 2.10330892441 0.03960195416 + 2.11332468120 0.03873092931 + 2.12334043798 0.03788161369 + 2.13335619476 0.03705339413 + 2.14337195155 0.03624567685 + 2.15338770833 0.03545788678 + 2.16340346511 0.03468946694 + 2.17341922190 0.03393987778 + 2.18343497868 0.03320859660 + 2.19345073546 0.03249511696 + 2.20346649224 0.03179894813 + 2.21348224903 0.03111961453 + 2.22349800581 0.03045665524 + 2.23351376259 0.02980962349 + 2.24352951938 0.02917808618 + 2.25354527616 0.02856162341 + 2.26356103294 0.02795982804 + 2.27357678972 0.02737230528 + 2.28359254651 0.02679867224 + 2.29360830329 0.02623855757 + 2.30362406007 0.02569160105 + 2.31363981686 0.02515745323 + 2.32365557364 0.02463577506 + 2.33367133042 0.02412623757 + 2.34368708720 0.02362852153 + 2.35370284399 0.02314231713 + 2.36371860077 0.02266732365 + 2.37373435755 0.02220324919 + 2.38375011434 0.02174981040 + 2.39376587112 0.02130673216 + 2.40378162790 0.02087374732 + 2.41379738469 0.02045059648 + 2.42381314147 0.02003702772 + 2.43382889825 0.01963279634 + 2.44384465503 0.01923766465 + 2.45386041182 0.01885140177 + 2.46387616860 0.01847378338 + 2.47389192538 0.01810459149 + 2.48390768217 0.01774361432 + 2.49392343895 0.01739064604 + 2.50393919573 0.01704548659 + 2.51395495251 0.01670794153 + 2.52397070930 0.01637782183 + 2.53398646608 0.01605494374 + 2.54400222286 0.01573912858 + 2.55401797965 0.01543020263 + 2.56403373643 0.01512799695 + 2.57404949321 0.01483234724 + 2.58406525000 0.01454309371 + 2.59408100678 0.01426008091 + 2.60409676356 0.01398315764 + 2.61411252034 0.01371217679 + 2.62412827713 0.01344699523 + 2.63414403391 0.01318747369 + 2.64415979069 0.01293347666 + 2.65417554748 0.01268487223 + 2.66419130426 0.01244153202 + 2.67420706104 0.01220333110 + 2.68422281782 0.01197014781 + 2.69423857461 0.01174186374 + 2.70425433139 0.01151836360 + 2.71427008817 0.01129953513 + 2.72428584496 0.01108526900 + 2.73430160174 0.01087545878 + 2.74431735852 0.01067000076 + 2.75433311530 0.01046879396 + 2.76434887209 0.01027174002 + 2.77436462887 0.01007874310 + 2.78438038565 0.00988970985 + 2.79439614244 0.00970454930 + 2.80441189922 0.00952317281 + 2.81442765600 0.00934549403 + 2.82444341279 0.00917142878 + 2.83445916957 0.00900089502 + 2.84447492635 0.00883381281 + 2.85449068313 0.00867010420 + 2.86450643992 0.00850969322 + 2.87452219670 0.00835250579 + 2.88453795348 0.00819846971 + 2.89455371027 0.00804751455 + 2.90456946705 0.00789957166 + 2.91458522383 0.00775457408 + 2.92460098061 0.00761245651 + 2.93461673740 0.00747315527 + 2.94463249418 0.00733660822 + 2.95464825096 0.00720275477 + 2.96466400775 0.00707153581 + 2.97467976453 0.00694289367 + 2.98469552131 0.00681677208 + 2.99471127810 0.00669311613 + 3.00472703488 0.00657187226 + 3.01474279166 0.00645298819 + 3.02475854844 0.00633641289 + 3.03477430523 0.00622209657 + 3.04479006201 0.00610999062 + 3.05480581879 0.00600004761 + 3.06482157558 0.00589222121 + 3.07483733236 0.00578646623 + 3.08485308914 0.00568273851 + 3.09486884592 0.00558099496 + 3.10488460271 0.00548119350 + 3.11490035949 0.00538329303 + 3.12491611627 0.00528725343 + 3.13493187306 0.00519303551 + 3.14494762984 0.00510060098 + 3.15496338662 0.00500991247 + 3.16497914340 0.00492093346 + 3.17499490019 0.00483362826 + 3.18501065697 0.00474796204 + 3.19502641375 0.00466390075 + 3.20504217054 0.00458141111 + 3.21505792732 0.00450046064 + 3.22507368410 0.00442101757 + 3.23508944089 0.00434305086 + 3.24510519767 0.00426653019 + 3.25512095445 0.00419142592 + 3.26513671123 0.00411770907 + 3.27515246802 0.00404535133 + 3.28516822480 0.00397432502 + 3.29518398158 0.00390460308 + 3.30519973837 0.00383615907 + 3.31521549515 0.00376896712 + 3.32523125193 0.00370300195 + 3.33524700871 0.00363823885 + 3.34526276550 0.00357465364 + 3.35527852228 0.00351222268 + 3.36529427906 0.00345092287 + 3.37531003585 0.00339073160 + 3.38532579263 0.00333162675 + 3.39534154941 0.00327358672 + 3.40535730620 0.00321659035 + 3.41537306298 0.00316061695 + 3.42538881976 0.00310564628 + 3.43540457654 0.00305165856 + 3.44542033333 0.00299863441 + 3.45543609011 0.00294655487 + 3.46545184689 0.00289540143 + 3.47546760368 0.00284515592 + 3.48548336046 0.00279580061 + 3.49549911724 0.00274731812 + 3.50551487402 0.00269969146 + 3.51553063081 0.00265290398 + 3.52554638759 0.00260693941 + 3.53556214437 0.00256178180 + 3.54557790116 0.00251741557 + 3.55559365794 0.00247382545 + 3.56560941472 0.00243099648 + 3.57562517150 0.00238891404 + 3.58564092829 0.00234756380 + 3.59565668507 0.00230693175 + 3.60567244185 0.00226700414 + 3.61568819864 0.00222776754 + 3.62570395542 0.00218920879 + 3.63571971220 0.00215131499 + 3.64573546899 0.00211407353 + 3.65575122577 0.00207747203 + 3.66576698255 0.00204149841 + 3.67578273933 0.00200614079 + 3.68579849612 0.00197138758 + 3.69581425290 0.00193722739 + 3.70583000968 0.00190364908 + 3.71584576647 0.00187064175 + 3.72586152325 0.00183819470 + 3.73587728003 0.00180629745 + 3.74589303681 0.00177493976 + 3.75590879360 0.00174411157 + 3.76592455038 0.00171380302 + 3.77594030716 0.00168400448 + 3.78595606395 0.00165470648 + 3.79597182073 0.00162589976 + 3.80598757751 0.00159757525 + 3.81600333430 0.00156972404 + 3.82601909108 0.00154233741 + 3.83603484786 0.00151540683 + 3.84605060464 0.00148892392 + 3.85606636143 0.00146288047 + 3.86608211821 0.00143726843 + 3.87609787499 0.00141207992 + 3.88611363178 0.00138730721 + 3.89612938856 0.00136294273 + 3.90614514534 0.00133897903 + 3.91616090212 0.00131540885 + 3.92617665891 0.00129222504 + 3.93619241569 0.00126942061 + 3.94620817247 0.00124698868 + 3.95622392926 0.00122492254 + 3.96623968604 0.00120321558 + 3.97625544282 0.00118186134 + 3.98627119960 0.00116085347 + 3.99628695639 0.00114018575 + 4.00630271317 0.00111985209 + 4.01631846995 0.00109984649 + 4.02633422674 0.00108016309 + 4.03634998352 0.00106079614 + 4.04636574030 0.00104173999 + 4.05638149709 0.00102298910 + 4.06639725387 0.00100453806 + 4.07641301065 0.00098638152 + 4.08642876743 0.00096851426 + 4.09644452422 0.00095093117 + 4.10646028100 0.00093362721 + 4.11647603778 0.00091659745 + 4.12649179457 0.00089983705 + 4.13650755135 0.00088334127 + 4.14652330813 0.00086710544 + 4.15653906491 0.00085112500 + 4.16655482170 0.00083539545 + 4.17657057848 0.00081991241 + 4.18658633526 0.00080467155 + 4.19660209205 0.00078966864 + 4.20661784883 0.00077489952 + 4.21663360561 0.00076036012 + 4.22664936240 0.00074604641 + 4.23666511918 0.00073195449 + 4.24668087596 0.00071808048 + 4.25669663274 0.00070442061 + 4.26671238953 0.00069097116 + 4.27672814631 0.00067772849 + 4.28674390309 0.00066468901 + 4.29675965988 0.00065184922 + 4.30677541666 0.00063920566 + 4.31679117344 0.00062675495 + 4.32680693022 0.00061449377 + 4.33682268701 0.00060241885 + 4.34683844379 0.00059052699 + 4.35685420057 0.00057881505 + 4.36686995736 0.00056727994 + 4.37688571414 0.00055591864 + 4.38690147092 0.00054472816 + 4.39691722770 0.00053370558 + 4.40693298449 0.00052284804 + 4.41694874127 0.00051215271 + 4.42696449805 0.00050161684 + 4.43698025484 0.00049123771 + 4.44699601162 0.00048101265 + 4.45701176840 0.00047093903 + 4.46702752519 0.00046101430 + 4.47704328197 0.00045123592 + 4.48705903875 0.00044160140 + 4.49707479553 0.00043210833 + 4.50709055232 0.00042275429 + 4.51710630910 0.00041353695 + 4.52712206588 0.00040445400 + 4.53713782267 0.00039550315 + 4.54715357945 0.00038668220 + 4.55716933623 0.00037798895 + 4.56718509301 0.00036942125 + 4.57720084980 0.00036097699 + 4.58721660658 0.00035265409 + 4.59723236336 0.00034445053 + 4.60724812015 0.00033636429 + 4.61726387693 0.00032839342 + 4.62727963371 0.00032053597 + 4.63729539050 0.00031279006 + 4.64731114728 0.00030515381 + 4.65732690406 0.00029762540 + 4.66734266084 0.00029020302 + 4.67735841763 0.00028288491 + 4.68737417441 0.00027566932 + 4.69738993119 0.00026855455 + 4.70740568798 0.00026153893 + 4.71742144476 0.00025462079 + 4.72743720154 0.00024779852 + 4.73745295832 0.00024107053 + 4.74746871511 0.00023443525 + 4.75748447189 0.00022789114 + 4.76750022867 0.00022143670 + 4.77751598546 0.00021507043 + 4.78753174224 0.00020879087 + 4.79754749902 0.00020259659 + 4.80756325580 0.00019648618 + 4.81757901259 0.00019045825 + 4.82759476937 0.00018451143 + 4.83761052615 0.00017864439 + 4.84762628294 0.00017285581 + 4.85764203972 0.00016714440 + 4.86765779650 0.00016150887 + 4.87767355329 0.00015594799 + 4.88768931007 0.00015046051 + 4.89770506685 0.00014504524 + 4.90772082363 0.00013970097 + 4.91773658042 0.00013442654 + 4.92775233720 0.00012922081 + 4.93776809398 0.00012408263 + 4.94778385077 0.00011901090 + 4.95779960755 0.00011400453 + 4.96781536433 0.00010906244 + 4.97783112111 0.00010418358 + 4.98784687790 0.00009936690 + 4.99786263468 0.00009461138 + 5.00787839146 0.00008991603 + 5.01789414825 0.00008527984 + 5.02790990503 0.00008070185 + 5.03792566181 0.00007618110 + 5.04794141860 0.00007171666 + 5.05795717538 0.00006730760 + 5.06797293216 0.00006295300 + 5.07798868894 0.00005865198 + 5.08800444573 0.00005440365 + 5.09802020251 0.00005020715 + 5.10803595929 0.00004606163 + 5.11805171608 0.00004196624 + 5.12806747286 0.00003792018 + 5.13808322964 0.00003392262 + 5.14809898642 0.00002997277 + 5.15811474321 0.00002606984 + 5.16813049999 0.00002221307 + 5.17814625677 0.00001840167 + 5.18816201356 0.00001463492 + 5.19817777034 0.00001091209 + 5.20819352712 0.00000723246 + 5.21820928390 0.00000359532 + 5.22822504069 0.00000000000 + 2 3 2 0 0.000000 #orbital l, n, z, is_polarized, population + 250 0.0100222019698047 2.4955282904813587 + 0.00000000000 9.85286375118 + 0.01002220197 9.85061295082 + 0.02004440394 9.84386342308 + 0.03006660591 9.83262426150 + 0.04008880788 9.81691057390 + 0.05011100985 9.79674345955 + 0.06013321182 9.77214996872 + 0.07015541379 9.74316304704 + 0.08017761576 9.70982146714 + 0.09019981773 9.67216974805 + 0.10022201970 9.63025806272 + 0.11024422167 9.58414213395 + 0.12026642364 9.53388311882 + 0.13028862561 9.47954748230 + 0.14031082758 9.42120685986 + 0.15033302955 9.35893790995 + 0.16035523152 9.29282215635 + 0.17037743349 9.22294582098 + 0.18039963546 9.14939964755 + 0.19042183743 9.07227871649 + 0.20044403940 8.99168225170 + 0.21046624137 8.90771341953 + 0.22048844334 8.82047912052 + 0.23051064531 8.73008977456 + 0.24053284728 8.63665909979 + 0.25055504925 8.54030388604 + 0.26057725121 8.44114376323 + 0.27059945318 8.33930096539 + 0.28062165515 8.23490009085 + 0.29064385712 8.12806785934 + 0.30066605909 8.01893286641 + 0.31068826106 7.90762533596 + 0.32071046303 7.79427687143 + 0.33073266500 7.67902020633 + 0.34075486697 7.56198895462 + 0.35077706894 7.44331736171 + 0.36079927091 7.32314005657 + 0.37082147288 7.20159180567 + 0.38084367485 7.07880726928 + 0.39086587682 6.95492076068 + 0.40088807879 6.83006600907 + 0.41091028076 6.70437592645 + 0.42093248273 6.57798237929 + 0.43095468470 6.45101596535 + 0.44097688667 6.32360579627 + 0.45099908864 6.19587928635 + 0.46102129061 6.06796194809 + 0.47104349258 5.93997719486 + 0.48106569455 5.81204615110 + 0.49108789652 5.68428747062 + 0.50111009849 5.55681716317 + 0.51113230046 5.42974842979 + 0.52115450243 5.30319150709 + 0.53117670440 5.17725352099 + 0.54119890637 5.05203834988 + 0.55122110834 4.92764649771 + 0.56124331031 4.80417497695 + 0.57126551228 4.68171720182 + 0.58128771425 4.56036289170 + 0.59130991622 4.44019798498 + 0.60133211819 4.32130456331 + 0.61135432016 4.20376078632 + 0.62137652213 4.08764083684 + 0.63139872410 3.97301487643 + 0.64142092607 3.85994901143 + 0.65144312804 3.74850526908 + 0.66146533001 3.63874158394 + 0.67148753198 3.53071179409 + 0.68150973395 3.42446564723 + 0.69153193592 3.32004881627 + 0.70155413789 3.21750292423 + 0.71157633986 3.11686557818 + 0.72159854183 3.01817041188 + 0.73162074380 2.92144713686 + 0.74164294577 2.82672160159 + 0.75166514774 2.73401585833 + 0.76168734971 2.64334823730 + 0.77170955167 2.55473342784 + 0.78173175364 2.46818256608 + 0.79175395561 2.38370332867 + 0.80177615758 2.30130003225 + 0.81179835955 2.22097373808 + 0.82182056152 2.14272236154 + 0.83184276349 2.06654078585 + 0.84186496546 1.99242097970 + 0.85188716743 1.92035211833 + 0.86190936940 1.85032070744 + 0.87193157137 1.78231070970 + 0.88195377334 1.71630367318 + 0.89197597531 1.65227886146 + 0.90199817728 1.59021338478 + 0.91202037925 1.53008233197 + 0.92204258122 1.47185890259 + 0.93206478319 1.41551453898 + 0.94208698516 1.36101905777 + 0.95210918713 1.30834078042 + 0.96213138910 1.25744666257 + 0.97215359107 1.20830242165 + 0.98217579304 1.16087266261 + 0.99219799501 1.11512100123 + 1.00222019698 1.07101018498 + 1.01224239895 1.02850221095 + 1.02226460092 0.98755844063 + 1.03228680289 0.94813971138 + 1.04230900486 0.91020644431 + 1.05233120683 0.87371874839 + 1.06235340880 0.83863652063 + 1.07237561077 0.80491954216 + 1.08239781274 0.77252757009 + 1.09242001471 0.74142042508 + 1.10244221668 0.71155807443 + 1.11246441865 0.68290071076 + 1.12248662062 0.65540882613 + 1.13250882259 0.62904328160 + 1.14253102456 0.60376537224 + 1.15255322653 0.57953688758 + 1.16257542850 0.55632016753 + 1.17259763047 0.53407815384 + 1.18261983244 0.51277443710 + 1.19264203441 0.49237329945 + 1.20266423638 0.47283975275 + 1.21268643835 0.45413957166 + 1.22270864032 0.43623932783 + 1.23273084229 0.41910641462 + 1.24275304426 0.40270906327 + 1.25277524623 0.38701636823 + 1.26279744820 0.37199830207 + 1.27281965017 0.35762572553 + 1.28284185213 0.34387039554 + 1.29286405410 0.33070497159 + 1.30288625607 0.31810301987 + 1.31290845804 0.30603901106 + 1.32293066001 0.29448831772 + 1.33295286198 0.28342720984 + 1.34297506395 0.27283284719 + 1.35299726592 0.26268326988 + 1.36301946789 0.25295738690 + 1.37304166986 0.24363496304 + 1.38306387183 0.23469660410 + 1.39308607380 0.22612374061 + 1.40310827577 0.21789861039 + 1.41313047774 0.21000423973 + 1.42315267971 0.20242442375 + 1.43317488168 0.19514370570 + 1.44319708365 0.18814735558 + 1.45321928562 0.18142134809 + 1.46324148759 0.17495233998 + 1.47326368956 0.16872764706 + 1.48328589153 0.16273522082 + 1.49330809350 0.15696362481 + 1.50333029547 0.15140201095 + 1.51335249744 0.14604009563 + 1.52337469941 0.14086813602 + 1.53339690138 0.13587690893 + 1.54341910335 0.13105767985 + 1.55344130532 0.12640219238 + 1.56346350729 0.12190261069 + 1.57348570926 0.11755143817 + 1.58350791123 0.11334255649 + 1.59353011320 0.10927146318 + 1.60355231517 0.10533361063 + 1.61357451714 0.10152431261 + 1.62359671911 0.09783923636 + 1.63361892108 0.09427419263 + 1.64364112305 0.09082515901 + 1.65366332502 0.08748826308 + 1.66368552699 0.08425977869 + 1.67370772896 0.08113612006 + 1.68372993093 0.07811383610 + 1.69375213290 0.07518960474 + 1.70377433487 0.07236022765 + 1.71379653684 0.06962262508 + 1.72381873881 0.06697383105 + 1.73384094078 0.06441098866 + 1.74386314275 0.06193134569 + 1.75388534472 0.05953225031 + 1.76390754669 0.05721114707 + 1.77392974866 0.05496557300 + 1.78395195063 0.05279315392 + 1.79397415260 0.05069160088 + 1.80399635456 0.04865870680 + 1.81401855653 0.04669234323 + 1.82404075850 0.04479045721 + 1.83406296047 0.04295106838 + 1.84408516244 0.04117226607 + 1.85410736441 0.03945220664 + 1.86412956638 0.03778911086 + 1.87415176835 0.03618126144 + 1.88417397032 0.03462700060 + 1.89419617229 0.03312472788 + 1.90421837426 0.03167289785 + 1.91424057623 0.03027001810 + 1.92426277820 0.02891464719 + 1.93428498017 0.02760539276 + 1.94430718214 0.02634090965 + 1.95432938411 0.02511989816 + 1.96435158608 0.02394110236 + 1.97437378805 0.02280330845 + 1.98439599002 0.02170534319 + 1.99441819199 0.02064607246 + 2.00444039396 0.01962439975 + 2.01446259593 0.01863926484 + 2.02448479790 0.01768964246 + 2.03450699987 0.01677454102 + 2.04452920184 0.01589300138 + 2.05455140381 0.01504409569 + 2.06457360578 0.01422692628 + 2.07459580775 0.01344062456 + 2.08461800972 0.01268434998 + 2.09464021169 0.01195728904 + 2.10466241366 0.01125865434 + 2.11468461563 0.01058768364 + 2.12470681760 0.00994363899 + 2.13472901957 0.00932580586 + 2.14475122154 0.00873349233 + 2.15477342351 0.00816602830 + 2.16479562548 0.00762276474 + 2.17481782745 0.00710307294 + 2.18484002942 0.00660634382 + 2.19486223139 0.00613198726 + 2.20488443336 0.00567943144 + 2.21490663533 0.00524812221 + 2.22492883730 0.00483752248 + 2.23495103927 0.00444711168 + 2.24497324124 0.00407638514 + 2.25499544321 0.00372485361 + 2.26501764518 0.00339204268 + 2.27503984715 0.00307749234 + 2.28506204912 0.00278075646 + 2.29508425109 0.00250140235 + 2.30510645306 0.00223901027 + 2.31512865502 0.00199317306 + 2.32515085699 0.00176349568 + 2.33517305896 0.00154959483 + 2.34519526093 0.00135109854 + 2.35521746290 0.00116764583 + 2.36523966487 0.00099888634 + 2.37526186684 0.00084447996 + 2.38528406881 0.00070409652 + 2.39530627078 0.00057741549 + 2.40532847275 0.00046412561 + 2.41535067472 0.00036392465 + 2.42537287669 0.00027651906 + 2.43539507866 0.00020162377 + 2.44541728063 0.00013896182 + 2.45543948260 0.00008826423 + 2.46546168457 0.00004926967 + 2.47548388654 0.00002172313 + 2.48550608851 0.00000537922 + 2.49552829048 0.00000000000 + 0 4 1 0 2.000000 #orbital l, n, z, is_polarized, population + 863 0.0100098721875452 8.6285098256639685 + 0.00000000000 -0.57667218118 + 0.01000987219 -0.57667432570 + 0.02001974438 -0.57668048161 + 0.03002961656 -0.57668981712 + 0.04003948875 -0.57670095010 + 0.05004936094 -0.57671195423 + 0.06005923313 -0.57672036767 + 0.07006910531 -0.57672320406 + 0.08007897750 -0.57671696589 + 0.09008884969 -0.57669766024 + 0.10009872188 -0.57666081656 + 0.11010859406 -0.57660150680 + 0.12011846625 -0.57651436735 + 0.13012833844 -0.57639362318 + 0.14013821063 -0.57623311355 + 0.15014808281 -0.57602631965 + 0.16015795500 -0.57576639371 + 0.17016782719 -0.57544618962 + 0.18017769938 -0.57505829484 + 0.19018757156 -0.57459506352 + 0.20019744375 -0.57404865061 + 0.21020731594 -0.57341104691 + 0.22021718813 -0.57267411474 + 0.23022706031 -0.57182962426 + 0.24023693250 -0.57086929016 + 0.25024680469 -0.56978480855 + 0.26025667688 -0.56856789395 + 0.27026654906 -0.56721031622 + 0.28027642125 -0.56570393717 + 0.29028629344 -0.56404074682 + 0.30029616563 -0.56221289904 + 0.31030603781 -0.56021274652 + 0.32031591000 -0.55803287482 + 0.33032578219 -0.55566613545 + 0.34033565438 -0.55310567774 + 0.35034552656 -0.55034497948 + 0.36035539875 -0.54737787613 + 0.37036527094 -0.54419858844 + 0.38037514313 -0.54080174855 + 0.39038501531 -0.53718242421 + 0.40039488750 -0.53333614127 + 0.41040475969 -0.52925890419 + 0.42041463188 -0.52494721459 + 0.43042450406 -0.52039808770 + 0.44043437625 -0.51560906674 + 0.45044424844 -0.51057823509 + 0.46045412063 -0.50530422636 + 0.47046399281 -0.49978623214 + 0.48047386500 -0.49402400757 + 0.49048373719 -0.48801787473 + 0.50049360938 -0.48176872370 + 0.51050348156 -0.47527801156 + 0.52051335375 -0.46854775907 + 0.53052322594 -0.46158054534 + 0.54053309813 -0.45437950035 + 0.55054297031 -0.44694829546 + 0.56055284250 -0.43929113195 + 0.57056271469 -0.43141272771 + 0.58057258688 -0.42331830205 + 0.59058245907 -0.41501355890 + 0.60059233125 -0.40650466830 + 0.61060220344 -0.39779824640 + 0.62061207563 -0.38890133409 + 0.63062194782 -0.37982137428 + 0.64063182000 -0.37056618803 + 0.65064169219 -0.36114394962 + 0.66065156438 -0.35156316067 + 0.67066143657 -0.34183262346 + 0.68067130875 -0.33196141356 + 0.69068118094 -0.32195885191 + 0.70069105313 -0.31183447646 + 0.71070092532 -0.30159801351 + 0.72071079750 -0.29125934887 + 0.73072066969 -0.28082849897 + 0.74073054188 -0.27031558202 + 0.75074041407 -0.25973078938 + 0.76075028625 -0.24908435719 + 0.77076015844 -0.23838653843 + 0.78077003063 -0.22764757550 + 0.79077990282 -0.21687767334 + 0.80078977500 -0.20608697335 + 0.81079964719 -0.19528552806 + 0.82080951938 -0.18448327659 + 0.83081939157 -0.17369002122 + 0.84082926375 -0.16291540480 + 0.85083913594 -0.15216888935 + 0.86084900813 -0.14145973574 + 0.87085888032 -0.13079698455 + 0.88086875250 -0.12018943812 + 0.89087862469 -0.10964564388 + 0.90088849688 -0.09917387892 + 0.91089836907 -0.08878213581 + 0.92090824125 -0.07847810981 + 0.93091811344 -0.06826918727 + 0.94092798563 -0.05816243538 + 0.95093785782 -0.04816459316 + 0.96094773000 -0.03828206379 + 0.97095760219 -0.02852090810 + 0.98096747438 -0.01888683933 + 0.99097734657 -0.00938521907 + 1.00098721875 -0.00002105433 + 1.01099709094 0.00920100424 + 1.02100696313 0.01827666313 + 1.03101683532 0.02720198561 + 1.04102670750 0.03597339056 + 1.05103657969 0.04458765021 + 1.06104645188 0.05304188712 + 1.07105632407 0.06133357034 + 1.08106619625 0.06946051076 + 1.09107606844 0.07742085577 + 1.10108594063 0.08521308332 + 1.11109581282 0.09283599531 + 1.12110568501 0.10028871052 + 1.13111555719 0.10757065698 + 1.14112542938 0.11468156393 + 1.15113530157 0.12162145341 + 1.16114517376 0.12839063144 + 1.17115504594 0.13498967901 + 1.18116491813 0.14141944267 + 1.19117479032 0.14768102505 + 1.20118466251 0.15377577506 + 1.21119453469 0.15970527761 + 1.22120440688 0.16547134463 + 1.23121427907 0.17107600512 + 1.24122415126 0.17652149184 + 1.25123402344 0.18181023550 + 1.26124389563 0.18694485149 + 1.27125376782 0.19192814454 + 1.28126364001 0.19676283148 + 1.29127351219 0.20145148293 + 1.30128338438 0.20599672425 + 1.31129325657 0.21040116840 + 1.32130312876 0.21466742034 + 1.33131300094 0.21879807471 + 1.34132287313 0.22279571380 + 1.35133274532 0.22666290454 + 1.36134261751 0.23040219625 + 1.37135248969 0.23401611853 + 1.38136236188 0.23750717927 + 1.39137223407 0.24087786299 + 1.40138210626 0.24413062925 + 1.41139197844 0.24726791126 + 1.42140185063 0.25029211465 + 1.43141172282 0.25320561637 + 1.44142159501 0.25601076371 + 1.45143146719 0.25870987344 + 1.46144133938 0.26130523111 + 1.47145121157 0.26379909039 + 1.48146108376 0.26619367254 + 1.49147095594 0.26849116597 + 1.50148082813 0.27069372586 + 1.51149070032 0.27280347388 + 1.52150057251 0.27482249796 + 1.53151044469 0.27675285219 + 1.54152031688 0.27859655662 + 1.55153018907 0.28035559767 + 1.56154006126 0.28203192689 + 1.57154993344 0.28362745797 + 1.58155980563 0.28514407492 + 1.59156967782 0.28658363889 + 1.60157955001 0.28794797089 + 1.61158942219 0.28923884546 + 1.62159929438 0.29045800871 + 1.63160916657 0.29160718055 + 1.64161903876 0.29268804630 + 1.65162891094 0.29370225775 + 1.66163878313 0.29465143517 + 1.67164865532 0.29553716709 + 1.68165852751 0.29636101067 + 1.69166839970 0.29712449204 + 1.70167827188 0.29782910664 + 1.71168814407 0.29847631965 + 1.72169801626 0.29906756634 + 1.73170788845 0.29960425245 + 1.74171776063 0.30008775464 + 1.75172763282 0.30051942086 + 1.76173750501 0.30090057077 + 1.77174737720 0.30123249616 + 1.78175724938 0.30151646138 + 1.79176712157 0.30175370373 + 1.80177699376 0.30194543394 + 1.81178686595 0.30209283657 + 1.82179673813 0.30219707043 + 1.83180661032 0.30225926902 + 1.84181648251 0.30228054100 + 1.85182635470 0.30226197057 + 1.86183622688 0.30220461794 + 1.87184609907 0.30210951974 + 1.88185597126 0.30197768947 + 1.89186584345 0.30181011793 + 1.90187571563 0.30160777365 + 1.91188558782 0.30137160330 + 1.92189546001 0.30110253215 + 1.93190533220 0.30080146446 + 1.94191520438 0.30046928393 + 1.95192507657 0.30010685411 + 1.96193494876 0.29971501879 + 1.97194482095 0.29929460245 + 1.98195469313 0.29884641065 + 1.99196456532 0.29837123042 + 2.00197443751 0.29786983067 + 2.01198430970 0.29734296260 + 2.02199418188 0.29679136006 + 2.03200405407 0.29621573996 + 2.04201392626 0.29561680261 + 2.05202379845 0.29499523213 + 2.06203367063 0.29435169682 + 2.07204354282 0.29368684946 + 2.08205341501 0.29300132776 + 2.09206328720 0.29229575460 + 2.10207315938 0.29157073846 + 2.11208303157 0.29082687371 + 2.12209290376 0.29006474096 + 2.13210277595 0.28928490735 + 2.14211264813 0.28848792689 + 2.15212252032 0.28767434077 + 2.16213239251 0.28684467766 + 2.17214226470 0.28599945398 + 2.18215213688 0.28513917422 + 2.19216200907 0.28426433120 + 2.20217188126 0.28337540635 + 2.21218175345 0.28247286999 + 2.22219162564 0.28155718158 + 2.23220149782 0.28062878997 + 2.24221137001 0.27968813366 + 2.25222124220 0.27873564104 + 2.26223111439 0.27777173063 + 2.27224098657 0.27679681129 + 2.28225085876 0.27581128247 + 2.29226073095 0.27481553442 + 2.30227060314 0.27380994841 + 2.31228047532 0.27279489691 + 2.32229034751 0.27177074383 + 2.33230021970 0.27073784471 + 2.34231009189 0.26969654687 + 2.35231996407 0.26864718965 + 2.36232983626 0.26759010459 + 2.37233970845 0.26652561555 + 2.38234958064 0.26545403895 + 2.39235945282 0.26437568390 + 2.40236932501 0.26329085240 + 2.41237919720 0.26219983944 + 2.42238906939 0.26110293321 + 2.43239894157 0.26000041524 + 2.44240881376 0.25889256053 + 2.45241868595 0.25777963771 + 2.46242855814 0.25666190919 + 2.47243843032 0.25553963127 + 2.48244830251 0.25441305430 + 2.49245817470 0.25328242278 + 2.50246804689 0.25214797554 + 2.51247791907 0.25100994581 + 2.52248779126 0.24986856135 + 2.53249766345 0.24872404462 + 2.54250753564 0.24757661282 + 2.55251740782 0.24642647806 + 2.56252728001 0.24527384744 + 2.57253715220 0.24411892319 + 2.58254702439 0.24296190272 + 2.59255689657 0.24180297877 + 2.60256676876 0.24064233950 + 2.61257664095 0.23948016857 + 2.62258651314 0.23831664527 + 2.63259638532 0.23715194458 + 2.64260625751 0.23598623726 + 2.65261612970 0.23481968997 + 2.66262600189 0.23365246535 + 2.67263587407 0.23248472206 + 2.68264574626 0.23131661492 + 2.69265561845 0.23014829498 + 2.70266549064 0.22897990958 + 2.71267536282 0.22781160243 + 2.72268523501 0.22664351369 + 2.73269510720 0.22547578007 + 2.74270497939 0.22430853486 + 2.75271485157 0.22314190804 + 2.76272472376 0.22197602632 + 2.77273459595 0.22081101322 + 2.78274446814 0.21964698914 + 2.79275434033 0.21848407142 + 2.80276421251 0.21732237442 + 2.81277408470 0.21616200954 + 2.82278395689 0.21500308534 + 2.83279382908 0.21384570755 + 2.84280370126 0.21268997917 + 2.85281357345 0.21153600047 + 2.86282344564 0.21038386912 + 2.87283331783 0.20923368018 + 2.88284319001 0.20808552620 + 2.89285306220 0.20693949724 + 2.90286293439 0.20579568093 + 2.91287280658 0.20465416256 + 2.92288267876 0.20351502505 + 2.93289255095 0.20237834907 + 2.94290242314 0.20124421305 + 2.95291229533 0.20011269324 + 2.96292216751 0.19898386377 + 2.97293203970 0.19785779664 + 2.98294191189 0.19673456182 + 2.99295178408 0.19561422729 + 3.00296165626 0.19449685904 + 3.01297152845 0.19338252114 + 3.02298140064 0.19227127578 + 3.03299127283 0.19116318330 + 3.04300114501 0.19005830225 + 3.05301101720 0.18895668939 + 3.06302088939 0.18785839975 + 3.07303076158 0.18676348668 + 3.08304063376 0.18567200184 + 3.09305050595 0.18458399530 + 3.10306037814 0.18349951550 + 3.11307025033 0.18241860935 + 3.12308012251 0.18134132221 + 3.13308999470 0.18026769796 + 3.14309986689 0.17919777901 + 3.15310973908 0.17813160633 + 3.16311961126 0.17706921950 + 3.17312948345 0.17601065671 + 3.18313935564 0.17495595482 + 3.19314922783 0.17390514935 + 3.20315910001 0.17285827455 + 3.21316897220 0.17181536339 + 3.22317884439 0.17077644762 + 3.23318871658 0.16974155776 + 3.24319858876 0.16871072315 + 3.25320846095 0.16768397198 + 3.26321833314 0.16666133127 + 3.27322820533 0.16564282698 + 3.28323807751 0.16462848392 + 3.29324794970 0.16361832587 + 3.30325782189 0.16261237557 + 3.31326769408 0.16161065470 + 3.32327756627 0.16061318396 + 3.33328743845 0.15961998309 + 3.34329731064 0.15863107082 + 3.35330718283 0.15764646499 + 3.36331705502 0.15666618249 + 3.37332692720 0.15569023932 + 3.38333679939 0.15471865059 + 3.39334667158 0.15375143055 + 3.40335654377 0.15278859261 + 3.41336641595 0.15183014934 + 3.42337628814 0.15087611252 + 3.43338616033 0.14992649312 + 3.44339603252 0.14898130134 + 3.45340590470 0.14804054662 + 3.46341577689 0.14710423766 + 3.47342564908 0.14617238243 + 3.48343552127 0.14524498818 + 3.49344539345 0.14432206149 + 3.50345526564 0.14340360822 + 3.51346513783 0.14248963360 + 3.52347501002 0.14158014219 + 3.53348488220 0.14067513790 + 3.54349475439 0.13977462404 + 3.55350462658 0.13887860330 + 3.56351449877 0.13798707776 + 3.57352437095 0.13710004893 + 3.58353424314 0.13621751775 + 3.59354411533 0.13533948459 + 3.60355398752 0.13446594927 + 3.61356385970 0.13359691110 + 3.62357373189 0.13273236885 + 3.63358360408 0.13187232077 + 3.64359347627 0.13101676463 + 3.65360334845 0.13016569769 + 3.66361322064 0.12931911676 + 3.67362309283 0.12847701817 + 3.68363296502 0.12763939778 + 3.69364283720 0.12680625103 + 3.70365270939 0.12597757291 + 3.71366258158 0.12515335799 + 3.72367245377 0.12433360042 + 3.73368232595 0.12351829396 + 3.74369219814 0.12270743196 + 3.75370207033 0.12190100738 + 3.76371194252 0.12109901282 + 3.77372181470 0.12030144050 + 3.78373168689 0.11950828228 + 3.79374155908 0.11871952969 + 3.80375143127 0.11793517388 + 3.81376130345 0.11715520571 + 3.82377117564 0.11637961569 + 3.83378104783 0.11560839402 + 3.84379092002 0.11484153058 + 3.85380079220 0.11407901498 + 3.86381066439 0.11332083650 + 3.87382053658 0.11256698416 + 3.88383040877 0.11181744669 + 3.89384028096 0.11107221257 + 3.90385015314 0.11033126999 + 3.91386002533 0.10959460690 + 3.92386989752 0.10886221099 + 3.93387976971 0.10813406973 + 3.94388964189 0.10741017033 + 3.95389951408 0.10669049979 + 3.96390938627 0.10597504488 + 3.97391925846 0.10526379215 + 3.98392913064 0.10455672795 + 3.99393900283 0.10385383842 + 4.00394887502 0.10315510952 + 4.01395874721 0.10246052700 + 4.02396861939 0.10177007642 + 4.03397849158 0.10108374319 + 4.04398836377 0.10040151252 + 4.05399823596 0.09972336947 + 4.06400810814 0.09904929892 + 4.07401798033 0.09837928562 + 4.08402785252 0.09771331414 + 4.09403772471 0.09705136892 + 4.10404759689 0.09639343426 + 4.11405746908 0.09573949432 + 4.12406734127 0.09508953312 + 4.13407721346 0.09444353458 + 4.14408708564 0.09380148248 + 4.15409695783 0.09316336048 + 4.16410683002 0.09252915214 + 4.17411670221 0.09189884091 + 4.18412657439 0.09127241014 + 4.19413644658 0.09064984307 + 4.20414631877 0.09003112285 + 4.21415619096 0.08941623256 + 4.22416606314 0.08880515517 + 4.23417593533 0.08819787358 + 4.24418580752 0.08759437062 + 4.25419567971 0.08699462902 + 4.26420555189 0.08639863148 + 4.27421542408 0.08580636059 + 4.28422529627 0.08521779892 + 4.29423516846 0.08463292896 + 4.30424504064 0.08405173315 + 4.31425491283 0.08347419387 + 4.32426478502 0.08290029346 + 4.33427465721 0.08233001423 + 4.34428452939 0.08176333842 + 4.35429440158 0.08120024825 + 4.36430427377 0.08064072591 + 4.37431414596 0.08008475355 + 4.38432401814 0.07953231330 + 4.39433389033 0.07898338725 + 4.40434376252 0.07843795748 + 4.41435363471 0.07789600604 + 4.42436350689 0.07735751499 + 4.43437337908 0.07682246634 + 4.44438325127 0.07629084212 + 4.45439312346 0.07576262433 + 4.46440299565 0.07523779497 + 4.47441286783 0.07471633605 + 4.48442274002 0.07419822956 + 4.49443261221 0.07368345750 + 4.50444248440 0.07317200188 + 4.51445235658 0.07266384472 + 4.52446222877 0.07215896802 + 4.53447210096 0.07165735383 + 4.54448197315 0.07115898418 + 4.55449184533 0.07066384114 + 4.56450171752 0.07017190678 + 4.57451158971 0.06968316320 + 4.58452146190 0.06919759252 + 4.59453133408 0.06871517688 + 4.60454120627 0.06823589845 + 4.61455107846 0.06775973941 + 4.62456095065 0.06728668200 + 4.63457082283 0.06681670846 + 4.64458069502 0.06634980108 + 4.65459056721 0.06588594218 + 4.66460043940 0.06542511412 + 4.67461031158 0.06496729928 + 4.68462018377 0.06451248010 + 4.69463005596 0.06406063904 + 4.70463992815 0.06361175863 + 4.71464980033 0.06316582141 + 4.72465967252 0.06272280999 + 4.73466954471 0.06228270701 + 4.74467941690 0.06184549516 + 4.75468928908 0.06141115719 + 4.76469916127 0.06097967589 + 4.77470903346 0.06055103409 + 4.78471890565 0.06012521469 + 4.79472877783 0.05970220063 + 4.80473865002 0.05928197492 + 4.81474852221 0.05886452061 + 4.82475839440 0.05844982081 + 4.83476826658 0.05803785870 + 4.84477813877 0.05762861748 + 4.85478801096 0.05722208046 + 4.86479788315 0.05681823098 + 4.87480775533 0.05641705243 + 4.88481762752 0.05601852830 + 4.89482749971 0.05562264210 + 4.90483737190 0.05522937744 + 4.91484724408 0.05483871796 + 4.92485711627 0.05445064738 + 4.93486698846 0.05406514951 + 4.94487686065 0.05368220817 + 4.95488673283 0.05330180731 + 4.96489660502 0.05292393089 + 4.97490647721 0.05254856297 + 4.98491634940 0.05217568767 + 4.99492622159 0.05180528919 + 5.00493609377 0.05143735177 + 5.01494596596 0.05107185976 + 5.02495583815 0.05070879755 + 5.03496571034 0.05034814960 + 5.04497558252 0.04998990047 + 5.05498545471 0.04963403475 + 5.06499532690 0.04928053714 + 5.07500519909 0.04892939239 + 5.08501507127 0.04858058532 + 5.09502494346 0.04823410084 + 5.10503481565 0.04788992393 + 5.11504468784 0.04754803962 + 5.12505456002 0.04720843304 + 5.13506443221 0.04687108939 + 5.14507430440 0.04653599392 + 5.15508417659 0.04620313199 + 5.16509404877 0.04587248901 + 5.17510392096 0.04554405047 + 5.18511379315 0.04521780194 + 5.19512366534 0.04489372905 + 5.20513353752 0.04457181753 + 5.21514340971 0.04425205316 + 5.22515328190 0.04393442181 + 5.23516315409 0.04361890942 + 5.24517302627 0.04330550200 + 5.25518289846 0.04299418565 + 5.26519277065 0.04268494653 + 5.27520264284 0.04237777088 + 5.28521251502 0.04207264502 + 5.29522238721 0.04176955534 + 5.30523225940 0.04146848831 + 5.31524213159 0.04116943047 + 5.32525200377 0.04087236843 + 5.33526187596 0.04057728890 + 5.34527174815 0.04028417863 + 5.35528162034 0.03999302447 + 5.36529149252 0.03970381334 + 5.37530136471 0.03941653222 + 5.38531123690 0.03913116818 + 5.39532110909 0.03884770837 + 5.40533098127 0.03856614000 + 5.41534085346 0.03828645036 + 5.42535072565 0.03800862681 + 5.43536059784 0.03773265678 + 5.44537047002 0.03745852779 + 5.45538034221 0.03718622743 + 5.46539021440 0.03691574335 + 5.47540008659 0.03664706328 + 5.48540995877 0.03638017502 + 5.49541983096 0.03611506645 + 5.50542970315 0.03585172553 + 5.51543957534 0.03559014026 + 5.52544944752 0.03533029875 + 5.53545931971 0.03507218917 + 5.54546919190 0.03481579973 + 5.55547906409 0.03456111877 + 5.56548893628 0.03430813464 + 5.57549880846 0.03405683582 + 5.58550868065 0.03380721080 + 5.59551855284 0.03355924820 + 5.60552842503 0.03331293666 + 5.61553829721 0.03306826492 + 5.62554816940 0.03282522178 + 5.63555804159 0.03258379611 + 5.64556791378 0.03234397685 + 5.65557778596 0.03210575300 + 5.66558765815 0.03186911365 + 5.67559753034 0.03163404793 + 5.68560740253 0.03140054506 + 5.69561727471 0.03116859431 + 5.70562714690 0.03093818503 + 5.71563701909 0.03070930664 + 5.72564689128 0.03048194861 + 5.73565676346 0.03025610050 + 5.74566663565 0.03003175190 + 5.75567650784 0.02980889251 + 5.76568638003 0.02958751206 + 5.77569625221 0.02936760035 + 5.78570612440 0.02914914727 + 5.79571599659 0.02893214275 + 5.80572586878 0.02871657678 + 5.81573574096 0.02850243943 + 5.82574561315 0.02828972083 + 5.83575548534 0.02807841117 + 5.84576535753 0.02786850070 + 5.85577522971 0.02765997973 + 5.86578510190 0.02745283865 + 5.87579497409 0.02724706788 + 5.88580484628 0.02704265794 + 5.89581471846 0.02683959937 + 5.90582459065 0.02663788281 + 5.91583446284 0.02643749892 + 5.92584433503 0.02623843846 + 5.93585420721 0.02604069222 + 5.94586407940 0.02584425105 + 5.95587395159 0.02564910589 + 5.96588382378 0.02545524771 + 5.97589369596 0.02526266753 + 5.98590356815 0.02507135646 + 5.99591344034 0.02488130564 + 6.00592331253 0.02469250628 + 6.01593318471 0.02450494964 + 6.02594305690 0.02431862705 + 6.03595292909 0.02413352987 + 6.04596280128 0.02394964954 + 6.05597267346 0.02376697756 + 6.06598254565 0.02358550545 + 6.07599241784 0.02340522481 + 6.08600229003 0.02322612731 + 6.09601216222 0.02304820463 + 6.10602203440 0.02287144855 + 6.11603190659 0.02269585086 + 6.12604177878 0.02252140344 + 6.13605165097 0.02234809821 + 6.14606152315 0.02217592712 + 6.15607139534 0.02200488221 + 6.16608126753 0.02183495555 + 6.17609113972 0.02166613925 + 6.18610101190 0.02149842551 + 6.19611088409 0.02133180653 + 6.20612075628 0.02116627460 + 6.21613062847 0.02100182204 + 6.22614050065 0.02083844122 + 6.23615037284 0.02067612458 + 6.24616024503 0.02051486459 + 6.25617011722 0.02035465376 + 6.26617998940 0.02019548466 + 6.27618986159 0.02003734992 + 6.28619973378 0.01988024220 + 6.29620960597 0.01972415422 + 6.30621947815 0.01956907872 + 6.31622935034 0.01941500853 + 6.32623922253 0.01926193649 + 6.33624909472 0.01910985550 + 6.34625896690 0.01895875850 + 6.35626883909 0.01880863850 + 6.36627871128 0.01865948851 + 6.37628858347 0.01851130162 + 6.38629845565 0.01836407095 + 6.39630832784 0.01821778968 + 6.40631820003 0.01807245101 + 6.41632807222 0.01792804821 + 6.42633794440 0.01778457456 + 6.43634781659 0.01764202341 + 6.44635768878 0.01750038815 + 6.45636756097 0.01735966221 + 6.46637743315 0.01721983904 + 6.47638730534 0.01708091216 + 6.48639717753 0.01694287513 + 6.49640704972 0.01680572154 + 6.50641692190 0.01666944502 + 6.51642679409 0.01653403925 + 6.52643666628 0.01639949793 + 6.53644653847 0.01626581484 + 6.54645641065 0.01613298375 + 6.55646628284 0.01600099851 + 6.56647615503 0.01586985299 + 6.57648602722 0.01573954110 + 6.58649589940 0.01561005680 + 6.59650577159 0.01548139406 + 6.60651564378 0.01535354693 + 6.61652551597 0.01522650946 + 6.62653538815 0.01510027576 + 6.63654526034 0.01497483996 + 6.64655513253 0.01485019625 + 6.65656500472 0.01472633884 + 6.66657487691 0.01460326198 + 6.67658474909 0.01448095996 + 6.68659462128 0.01435942709 + 6.69660449347 0.01423865774 + 6.70661436566 0.01411864631 + 6.71662423784 0.01399938721 + 6.72663411003 0.01388087492 + 6.73664398222 0.01376310393 + 6.74665385441 0.01364606878 + 6.75666372659 0.01352976403 + 6.76667359878 0.01341418428 + 6.77668347097 0.01329932418 + 6.78669334316 0.01318517839 + 6.79670321534 0.01307174161 + 6.80671308753 0.01295900857 + 6.81672295972 0.01284697405 + 6.82673283191 0.01273563285 + 6.83674270409 0.01262497979 + 6.84675257628 0.01251500974 + 6.85676244847 0.01240571761 + 6.86677232066 0.01229709830 + 6.87678219284 0.01218914680 + 6.88679206503 0.01208185809 + 6.89680193722 0.01197522718 + 6.90681180941 0.01186924913 + 6.91682168159 0.01176391903 + 6.92683155378 0.01165923199 + 6.93684142597 0.01155518315 + 6.94685129816 0.01145176769 + 6.95686117034 0.01134898080 + 6.96687104253 0.01124681773 + 6.97688091472 0.01114527372 + 6.98689078691 0.01104434408 + 6.99690065909 0.01094402412 + 7.00691053128 0.01084430919 + 7.01692040347 0.01074519466 + 7.02693027566 0.01064667595 + 7.03694014784 0.01054874848 + 7.04695002003 0.01045140771 + 7.05695989222 0.01035464914 + 7.06696976441 0.01025846827 + 7.07697963659 0.01016286065 + 7.08698950878 0.01006782185 + 7.09699938097 0.00997334747 + 7.10700925316 0.00987943312 + 7.11701912534 0.00978607446 + 7.12702899753 0.00969326716 + 7.13703886972 0.00960100693 + 7.14704874191 0.00950928948 + 7.15705861409 0.00941811058 + 7.16706848628 0.00932746601 + 7.17707835847 0.00923735155 + 7.18708823066 0.00914776306 + 7.19709810285 0.00905869637 + 7.20710797503 0.00897014737 + 7.21711784722 0.00888211196 + 7.22712771941 0.00879458607 + 7.23713759160 0.00870756564 + 7.24714746378 0.00862104666 + 7.25715733597 0.00853502513 + 7.26716720816 0.00844949706 + 7.27717708035 0.00836445850 + 7.28718695253 0.00827990553 + 7.29719682472 0.00819583424 + 7.30720669691 0.00811224073 + 7.31721656910 0.00802912116 + 7.32722644128 0.00794647168 + 7.33723631347 0.00786428848 + 7.34724618566 0.00778256776 + 7.35725605785 0.00770130575 + 7.36726593003 0.00762049870 + 7.37727580222 0.00754014289 + 7.38728567441 0.00746023461 + 7.39729554660 0.00738077017 + 7.40730541878 0.00730174591 + 7.41731529097 0.00722315818 + 7.42732516316 0.00714500338 + 7.43733503535 0.00706727789 + 7.44734490753 0.00698997814 + 7.45735477972 0.00691310057 + 7.46736465191 0.00683664164 + 7.47737452410 0.00676059783 + 7.48738439628 0.00668496565 + 7.49739426847 0.00660974161 + 7.50740414066 0.00653492226 + 7.51741401285 0.00646050416 + 7.52742388503 0.00638648389 + 7.53743375722 0.00631285805 + 7.54744362941 0.00623962326 + 7.55745350160 0.00616677616 + 7.56746337378 0.00609431341 + 7.57747324597 0.00602223168 + 7.58748311816 0.00595052766 + 7.59749299035 0.00587919808 + 7.60750286253 0.00580823966 + 7.61751273472 0.00573764916 + 7.62752260691 0.00566742333 + 7.63753247910 0.00559755898 + 7.64754235128 0.00552805290 + 7.65755222347 0.00545890191 + 7.66756209566 0.00539010285 + 7.67757196785 0.00532165258 + 7.68758184003 0.00525354798 + 7.69759171222 0.00518578592 + 7.70760158441 0.00511836334 + 7.71761145660 0.00505127714 + 7.72762132878 0.00498452426 + 7.73763120097 0.00491810168 + 7.74764107316 0.00485200636 + 7.75765094535 0.00478623529 + 7.76766081754 0.00472078548 + 7.77767068972 0.00465565396 + 7.78768056191 0.00459083776 + 7.79769043410 0.00452633394 + 7.80770030629 0.00446213957 + 7.81771017847 0.00439825174 + 7.82772005066 0.00433466755 + 7.83772992285 0.00427138411 + 7.84773979504 0.00420839856 + 7.85774966722 0.00414570805 + 7.86775953941 0.00408330975 + 7.87776941160 0.00402120081 + 7.88777928379 0.00395937846 + 7.89778915597 0.00389783987 + 7.90779902816 0.00383658229 + 7.91780890035 0.00377560295 + 7.92781877254 0.00371489909 + 7.93782864472 0.00365446798 + 7.94783851691 0.00359430690 + 7.95784838910 0.00353441314 + 7.96785826129 0.00347478401 + 7.97786813347 0.00341541683 + 7.98787800566 0.00335630893 + 7.99788787785 0.00329745765 + 8.00789775004 0.00323886037 + 8.01790762222 0.00318051445 + 8.02791749441 0.00312241729 + 8.03792736660 0.00306456627 + 8.04793723879 0.00300695881 + 8.05794711097 0.00294959235 + 8.06795698316 0.00289246431 + 8.07796685535 0.00283557214 + 8.08797672754 0.00277891332 + 8.09798659972 0.00272248532 + 8.10799647191 0.00266628562 + 8.11800634410 0.00261031173 + 8.12801621629 0.00255456116 + 8.13802608847 0.00249903143 + 8.14803596066 0.00244372007 + 8.15804583285 0.00238862465 + 8.16805570504 0.00233374271 + 8.17806557722 0.00227907183 + 8.18807544941 0.00222460958 + 8.19808532160 0.00217035357 + 8.20809519379 0.00211630141 + 8.21810506597 0.00206245069 + 8.22811493816 0.00200879906 + 8.23812481035 0.00195534415 + 8.24813468254 0.00190208361 + 8.25814455472 0.00184901510 + 8.26815442691 0.00179613629 + 8.27816429910 0.00174344486 + 8.28817417129 0.00169093851 + 8.29818404347 0.00163861493 + 8.30819391566 0.00158647183 + 8.31820378785 0.00153450695 + 8.32821366004 0.00148271800 + 8.33822353223 0.00143110274 + 8.34823340441 0.00137965892 + 8.35824327660 0.00132838429 + 8.36825314879 0.00127727663 + 8.37826302098 0.00122633373 + 8.38827289316 0.00117555336 + 8.39828276535 0.00112493333 + 8.40829263754 0.00107447146 + 8.41830250973 0.00102416555 + 8.42831238191 0.00097401344 + 8.43832225410 0.00092401297 + 8.44833212629 0.00087416197 + 8.45834199848 0.00082445830 + 8.46835187066 0.00077489983 + 8.47836174285 0.00072548443 + 8.48837161504 0.00067620998 + 8.49838148723 0.00062707437 + 8.50839135941 0.00057807549 + 8.51840123160 0.00052921125 + 8.52841110379 0.00048047956 + 8.53842097598 0.00043187830 + 8.54843084816 0.00038340544 + 8.55844072035 0.00033505893 + 8.56845059254 0.00028683672 + 8.57846046473 0.00023873676 + 8.58847033691 0.00019075702 + 8.59848020910 0.00014289548 + 8.60849008129 0.00009515014 + 8.61849995348 0.00004751897 + 8.62850982566 0.00000000000 + 0 4 2 0 0.000000 #orbital l, n, z, is_polarized, population + 454 0.0100020707166681 4.5309380346506680 + 0.00000000000 -1.83911548486 + 0.01000207072 -1.83911931920 + 0.02000414143 -1.83913015411 + 0.03000621215 -1.83914598810 + 0.04000828287 -1.83916349537 + 0.05001035358 -1.83917804062 + 0.06001242430 -1.83918369986 + 0.07001449502 -1.83917328684 + 0.08001656573 -1.83913838527 + 0.09001863645 -1.83906938641 + 0.10002070717 -1.83895553207 + 0.11002277788 -1.83878496272 + 0.12002484860 -1.83854477046 + 0.13002691932 -1.83822105672 + 0.14002899003 -1.83779899435 + 0.15003106075 -1.83726289385 + 0.16003313147 -1.83659627336 + 0.17003520218 -1.83578193224 + 0.18003727290 -1.83480202781 + 0.19003934362 -1.83363815489 + 0.20004141433 -1.83227142783 + 0.21004348505 -1.83068256468 + 0.22004555577 -1.82885197303 + 0.23004762648 -1.82675983726 + 0.24004969720 -1.82438620673 + 0.25005176792 -1.82171108451 + 0.26005383863 -1.81871451634 + 0.27005590935 -1.81537667933 + 0.28005798007 -1.81167797013 + 0.29006005078 -1.80759909203 + 0.30006212150 -1.80312114077 + 0.31006419222 -1.79822568860 + 0.32006626293 -1.79289486624 + 0.33006833365 -1.78711144244 + 0.34007040437 -1.78085890075 + 0.35007247508 -1.77412151319 + 0.36007454580 -1.76688441061 + 0.37007661652 -1.75913364926 + 0.38007868723 -1.75085627351 + 0.39008075795 -1.74204037440 + 0.40008282867 -1.73267514368 + 0.41008489938 -1.72275092337 + 0.42008697010 -1.71225925043 + 0.43008904082 -1.70119289653 + 0.44009111153 -1.68954590278 + 0.45009318225 -1.67731360920 + 0.46009525297 -1.66449267899 + 0.47009732368 -1.65108111748 + 0.48009939440 -1.63707828567 + 0.49010146512 -1.62248490852 + 0.50010353583 -1.60730307782 + 0.51010560655 -1.59153624981 + 0.52010767727 -1.57518923759 + 0.53010974798 -1.55826819835 + 0.54011181870 -1.54078061565 + 0.55011388942 -1.52273527681 + 0.56011596013 -1.50414224553 + 0.57011803085 -1.48501283004 + 0.58012010157 -1.46535954686 + 0.59012217228 -1.44519608047 + 0.60012424300 -1.42453723902 + 0.61012631372 -1.40339890646 + 0.62012838443 -1.38179799122 + 0.63013045515 -1.35975237174 + 0.64013252587 -1.33728083928 + 0.65013459658 -1.31440303799 + 0.66013666730 -1.29113940286 + 0.67013873802 -1.26751109566 + 0.68014080873 -1.24353993917 + 0.69014287945 -1.21924835013 + 0.70014495017 -1.19465927111 + 0.71014702088 -1.16979610162 + 0.72014909160 -1.14468262879 + 0.73015116232 -1.11934295788 + 0.74015323303 -1.09380144299 + 0.75015530375 -1.06808261809 + 0.76015737447 -1.04221112884 + 0.77015944518 -1.01621166533 + 0.78016151590 -0.99010889601 + 0.79016358662 -0.96392740311 + 0.80016565733 -0.93769161968 + 0.81016772805 -0.91142576858 + 0.82016979877 -0.88515380348 + 0.83017186948 -0.85889935218 + 0.84017394020 -0.83268566231 + 0.85017601092 -0.80653554961 + 0.86017808163 -0.78047134890 + 0.87018015235 -0.75451486788 + 0.88018222307 -0.72868734381 + 0.89018429378 -0.70300940318 + 0.90018636450 -0.67750102439 + 0.91018843522 -0.65218150355 + 0.92019050593 -0.62706942335 + 0.93019257665 -0.60218262506 + 0.94019464737 -0.57753818362 + 0.95019671808 -0.55315238582 + 0.96019878880 -0.52904071153 + 0.97020085952 -0.50521781792 + 0.98020293023 -0.48169752660 + 0.99020500095 -0.45849281365 + 1.00020707167 -0.43561580240 + 1.01020914238 -0.41307775888 + 1.02021121310 -0.39088908988 + 1.03021328382 -0.36905934343 + 1.04021535453 -0.34759721166 + 1.05021742525 -0.32651053586 + 1.06021949597 -0.30580631369 + 1.07022156668 -0.28549070824 + 1.08022363740 -0.26556905907 + 1.09022570812 -0.24604589487 + 1.10022777883 -0.22692494767 + 1.11022984955 -0.20820916857 + 1.12023192027 -0.18990074469 + 1.13023399098 -0.17200111739 + 1.14023606170 -0.15451100148 + 1.15023813242 -0.13743040543 + 1.16024020313 -0.12075865240 + 1.17024227385 -0.10449440202 + 1.18024434457 -0.08863567276 + 1.19024641528 -0.07317986487 + 1.20024848600 -0.05812378373 + 1.21025055672 -0.04346366457 + 1.22025262743 -0.02919519451 + 1.23025469815 -0.01531353553 + 1.24025676887 -0.00181335673 + 1.25025883958 0.01131115182 + 1.26026091030 0.02406624072 + 1.27026298102 0.03645863655 + 1.28026505173 0.04849493723 + 1.29026712245 0.06018133143 + 1.30026919317 0.07152413806 + 1.31027126388 0.08252965254 + 1.32027333460 0.09320414940 + 1.33027540532 0.10355387977 + 1.34027747603 0.11358506560 + 1.35027954675 0.12330389255 + 1.36028161747 0.13271650445 + 1.37028368818 0.14182899811 + 1.38028575890 0.15064741871 + 1.39028782962 0.15917775550 + 1.40028990033 0.16742593812 + 1.41029197105 0.17539783313 + 1.42029404177 0.18309924102 + 1.43029611248 0.19053589357 + 1.44029818320 0.19771345139 + 1.45030025392 0.20463750193 + 1.46030232463 0.21131355766 + 1.47030439535 0.21774705450 + 1.48030646607 0.22394335052 + 1.49030853678 0.22990772486 + 1.50031060750 0.23564537680 + 1.51031267822 0.24116142505 + 1.52031474893 0.24646090720 + 1.53031681965 0.25154877941 + 1.54031889037 0.25642991596 + 1.55032096108 0.26110911002 + 1.56032303180 0.26559107203 + 1.57032510252 0.26988042117 + 1.58032717323 0.27398170093 + 1.59032924395 0.27789940135 + 1.60033131467 0.28163792250 + 1.61033338538 0.28520154966 + 1.62033545610 0.28859449420 + 1.63033752682 0.29182090721 + 1.64033959753 0.29488485831 + 1.65034166825 0.29779033495 + 1.66034373897 0.30054124866 + 1.67034580968 0.30314143474 + 1.68034788040 0.30559465279 + 1.69034995112 0.30790458762 + 1.70035202183 0.31007485016 + 1.71035409255 0.31210897830 + 1.72035616327 0.31401043789 + 1.73035823398 0.31578262362 + 1.74036030470 0.31742886003 + 1.75036237542 0.31895240246 + 1.76036444613 0.32035643803 + 1.77036651685 0.32164408669 + 1.78036858757 0.32281840218 + 1.79037065828 0.32388237307 + 1.80037272900 0.32483892379 + 1.81037479972 0.32569091566 + 1.82037687043 0.32644114794 + 1.83037894115 0.32709235882 + 1.84038101187 0.32764722655 + 1.85038308258 0.32810837038 + 1.86038515330 0.32847835168 + 1.87038722402 0.32875967497 + 1.88038929473 0.32895478892 + 1.89039136545 0.32906608744 + 1.90039343617 0.32909591069 + 1.91039550688 0.32904654610 + 1.92039757760 0.32892022944 + 1.93039964832 0.32871914578 + 1.94040171903 0.32844543056 + 1.95040378975 0.32810117056 + 1.96040586047 0.32768840492 + 1.97040793118 0.32720912612 + 1.98041000190 0.32666528095 + 1.99041207262 0.32605877151 + 2.00041414333 0.32539145615 + 2.01041621405 0.32466515042 + 2.02041828477 0.32388162799 + 2.03042035548 0.32304262163 + 2.04042242620 0.32214982403 + 2.05042449692 0.32120488880 + 2.06042656763 0.32020943127 + 2.07042863835 0.31916502939 + 2.08043070907 0.31807322460 + 2.09043277978 0.31693552263 + 2.10043485050 0.31575339437 + 2.11043692122 0.31452827663 + 2.12043899193 0.31326157296 + 2.13044106265 0.31195465443 + 2.14044313337 0.31060886037 + 2.15044520408 0.30922549911 + 2.16044727480 0.30780584875 + 2.17044934552 0.30635115780 + 2.18045141623 0.30486264595 + 2.19045348695 0.30334150470 + 2.20045555767 0.30178889803 + 2.21045762838 0.30020596307 + 2.22045969910 0.29859381069 + 2.23046176982 0.29695352617 + 2.24046384053 0.29528616977 + 2.25046591125 0.29359277729 + 2.26046798197 0.29187436070 + 2.27047005268 0.29013190865 + 2.28047212340 0.28836638704 + 2.29047419412 0.28657873954 + 2.30047626483 0.28476988809 + 2.31047833555 0.28294073343 + 2.32048040627 0.28109215557 + 2.33048247698 0.27922501428 + 2.34048454770 0.27734014953 + 2.35048661842 0.27543838197 + 2.36048868913 0.27352051336 + 2.37049075985 0.27158732699 + 2.38049283057 0.26963958812 + 2.39049490128 0.26767804435 + 2.40049697200 0.26570342608 + 2.41049904272 0.26371644681 + 2.42050111343 0.26171780360 + 2.43050318415 0.25970817739 + 2.44050525487 0.25768823338 + 2.45050732558 0.25565862134 + 2.46050939630 0.25361997603 + 2.47051146702 0.25157291742 + 2.48051353773 0.24951805113 + 2.49051560845 0.24745596867 + 2.50051767917 0.24538724775 + 2.51051974988 0.24331245264 + 2.52052182060 0.24123213438 + 2.53052389132 0.23914683115 + 2.54052596203 0.23705706847 + 2.55052803275 0.23496335954 + 2.56053010347 0.23286620547 + 2.57053217418 0.23076609553 + 2.58053424490 0.22866350743 + 2.59053631562 0.22655890757 + 2.60053838633 0.22445275125 + 2.61054045705 0.22234548295 + 2.62054252777 0.22023753651 + 2.63054459848 0.21812933540 + 2.64054666920 0.21602129292 + 2.65054873992 0.21391381242 + 2.66055081063 0.21180728751 + 2.67055288135 0.20970210226 + 2.68055495207 0.20759863142 + 2.69055702278 0.20549724058 + 2.70055909350 0.20339828640 + 2.71056116422 0.20130211679 + 2.72056323493 0.19920907109 + 2.73056530565 0.19711948023 + 2.74056737637 0.19503366694 + 2.75056944708 0.19295194590 + 2.76057151780 0.19087462392 + 2.77057358852 0.18880200009 + 2.78057565923 0.18673436595 + 2.79057772995 0.18467200568 + 2.80057980067 0.18261519618 + 2.81058187138 0.18056420728 + 2.82058394210 0.17851930190 + 2.83058601282 0.17648073611 + 2.84058808353 0.17444875939 + 2.85059015425 0.17242361466 + 2.86059222497 0.17040553848 + 2.87059429568 0.16839476118 + 2.88059636640 0.16639150695 + 2.89059843712 0.16439599400 + 2.90060050783 0.16240843469 + 2.91060257855 0.16042903563 + 2.92060464927 0.15845799780 + 2.93060671998 0.15649551670 + 2.94060879070 0.15454178240 + 2.95061086142 0.15259697974 + 2.96061293213 0.15066128835 + 2.97061500285 0.14873488282 + 2.98061707357 0.14681793279 + 2.99061914428 0.14491060302 + 3.00062121500 0.14301305355 + 3.01062328572 0.14112543974 + 3.02062535643 0.13924791241 + 3.03062742715 0.13738061791 + 3.04062949787 0.13552369823 + 3.05063156858 0.13367729106 + 3.06063363930 0.13184152993 + 3.07063571002 0.13001654423 + 3.08063778073 0.12820245938 + 3.09063985145 0.12639939681 + 3.10064192217 0.12460747415 + 3.11064399288 0.12282680523 + 3.12064606360 0.12105750018 + 3.13064813432 0.11929966553 + 3.14065020503 0.11755340426 + 3.15065227575 0.11581881588 + 3.16065434647 0.11409599652 + 3.17065641718 0.11238503895 + 3.18065848790 0.11068603272 + 3.19066055862 0.10899906417 + 3.20066262933 0.10732421652 + 3.21066470005 0.10566156994 + 3.22066677077 0.10401120160 + 3.23066884148 0.10237318574 + 3.24067091220 0.10074759374 + 3.25067298292 0.09913449415 + 3.26067505363 0.09753395278 + 3.27067712435 0.09594603274 + 3.28067919507 0.09437079452 + 3.29068126578 0.09280829600 + 3.30068333650 0.09125859256 + 3.31068540722 0.08972173707 + 3.32068747793 0.08819778000 + 3.33068954865 0.08668676945 + 3.34069161937 0.08518875118 + 3.35069369008 0.08370376868 + 3.36069576080 0.08223186321 + 3.37069783152 0.08077307387 + 3.38069990223 0.07932743760 + 3.39070197295 0.07789498927 + 3.40070404367 0.07647576168 + 3.41070611438 0.07506978565 + 3.42070818510 0.07367709004 + 3.43071025582 0.07229770179 + 3.44071232653 0.07093164594 + 3.45071439725 0.06957894572 + 3.46071646797 0.06823962255 + 3.47071853868 0.06691369610 + 3.48072060940 0.06560118429 + 3.49072268012 0.06430210339 + 3.50072475083 0.06301646800 + 3.51072682155 0.06174429111 + 3.52072889227 0.06048558413 + 3.53073096298 0.05924035691 + 3.54073303370 0.05800861783 + 3.55073510442 0.05679037374 + 3.56073717513 0.05558563009 + 3.57073924585 0.05439439087 + 3.58074131657 0.05321665873 + 3.59074338728 0.05205243494 + 3.60074545800 0.05090171944 + 3.61074752872 0.04976451090 + 3.62074959943 0.04864080671 + 3.63075167015 0.04753060302 + 3.64075374087 0.04643389478 + 3.65075581158 0.04535067576 + 3.66075788230 0.04428093855 + 3.67075995302 0.04322467464 + 3.68076202373 0.04218187440 + 3.69076409445 0.04115252713 + 3.70076616517 0.04013662107 + 3.71076823588 0.03913414344 + 3.72077030660 0.03814508044 + 3.73077237732 0.03716941730 + 3.74077444803 0.03620713830 + 3.75077651875 0.03525822676 + 3.76077858947 0.03432266511 + 3.77078066018 0.03340043487 + 3.78078273090 0.03249151671 + 3.79078480162 0.03159589044 + 3.80078687233 0.03071353504 + 3.81078894305 0.02984442869 + 3.82079101377 0.02898854878 + 3.83079308448 0.02814587193 + 3.84079515520 0.02731637402 + 3.85079722592 0.02650003020 + 3.86079929663 0.02569681489 + 3.87080136735 0.02490670185 + 3.88080343807 0.02412966416 + 3.89080550878 0.02336567422 + 3.90080757950 0.02261470381 + 3.91080965022 0.02187672410 + 3.92081172093 0.02115170564 + 3.93081379165 0.02043961840 + 3.94081586237 0.01974043177 + 3.95081793308 0.01905411460 + 3.96082000380 0.01838063520 + 3.97082207452 0.01771996135 + 3.98082414523 0.01707206031 + 3.99082621595 0.01643689888 + 4.00082828667 0.01581444337 + 4.01083035738 0.01520465960 + 4.02083242810 0.01460751297 + 4.03083449882 0.01402296845 + 4.04083656953 0.01345099056 + 4.05083864025 0.01289154345 + 4.06084071097 0.01234459083 + 4.07084278168 0.01181009608 + 4.08084485240 0.01128802218 + 4.09084692312 0.01077833176 + 4.10084899383 0.01028098711 + 4.11085106455 0.00979595019 + 4.12085313527 0.00932318265 + 4.13085520598 0.00886264581 + 4.14085727670 0.00841430073 + 4.15085934742 0.00797810815 + 4.16086141813 0.00755402856 + 4.17086348885 0.00714202219 + 4.18086555957 0.00674204901 + 4.19086763028 0.00635406876 + 4.20086970100 0.00597804095 + 4.21087177172 0.00561392485 + 4.22087384243 0.00526167955 + 4.23087591315 0.00492126394 + 4.24087798387 0.00459263669 + 4.25088005458 0.00427575633 + 4.26088212530 0.00397058119 + 4.27088419602 0.00367706947 + 4.28088626673 0.00339517918 + 4.29088833745 0.00312486821 + 4.30089040817 0.00286609433 + 4.31089247888 0.00261881515 + 4.32089454960 0.00238298819 + 4.33089662032 0.00215857084 + 4.34089869103 0.00194552042 + 4.35090076175 0.00174379412 + 4.36090283247 0.00155334907 + 4.37090490318 0.00137414231 + 4.38090697390 0.00120613083 + 4.39090904462 0.00104927153 + 4.40091111533 0.00090352126 + 4.41091318605 0.00076883684 + 4.42091525677 0.00064517502 + 4.43091732748 0.00053249256 + 4.44091939820 0.00043074614 + 4.45092146892 0.00033989245 + 4.46092353963 0.00025988813 + 4.47092561035 0.00019068985 + 4.48092768107 0.00013225435 + 4.49092975178 0.00008453841 + 4.50093182250 0.00004749846 + 4.51093389322 0.00002109106 + 4.52093596393 0.00000527274 + 4.53093803465 0.00000000000 + 1 4 1 1 0.000000 #orbital l, n, z, is_polarized, population + 863 0.0100098721875452 8.6285098256639685 + 0.00000000000 -1.92559924459 + 0.01000987219 -1.91375641896 + 0.02001974438 -1.90483815662 + 0.03002961656 -1.89667938119 + 0.04003948875 -1.88845218318 + 0.05004936094 -1.87984131925 + 0.06005923313 -1.87069019492 + 0.07006910531 -1.86091068882 + 0.08007897750 -1.85045017632 + 0.09008884969 -1.83927681246 + 0.10009872188 -1.82737204863 + 0.11010859406 -1.81472645328 + 0.12011846625 -1.80133720448 + 0.13012833844 -1.78720649601 + 0.14013821063 -1.77234047412 + 0.15014808281 -1.75674849774 + 0.16015795500 -1.74044260397 + 0.17016782719 -1.72343710829 + 0.18017769938 -1.70574829561 + 0.19018757156 -1.68739417408 + 0.20019744375 -1.66839427332 + 0.21020731594 -1.64876947436 + 0.22021718813 -1.62854186289 + 0.23022706031 -1.60773459970 + 0.24023693250 -1.58637180413 + 0.25024680469 -1.56447844730 + 0.26025667688 -1.54208025305 + 0.27026654906 -1.51920360488 + 0.28027642125 -1.49587545772 + 0.29028629344 -1.47212325357 + 0.30029616563 -1.44797484056 + 0.31030603781 -1.42345839477 + 0.32031591000 -1.39860234459 + 0.33032578219 -1.37343529736 + 0.34033565438 -1.34798596822 + 0.35034552656 -1.32228311094 + 0.36035539875 -1.29635545078 + 0.37036527094 -1.27023161942 + 0.38037514313 -1.24394009187 + 0.39038501531 -1.21750912544 + 0.40039488750 -1.19096670089 + 0.41040475969 -1.16434046568 + 0.42041463188 -1.13765767960 + 0.43042450406 -1.11094516257 + 0.44043437625 -1.08422924502 + 0.45044424844 -1.05753572058 + 0.46045412063 -1.03088980142 + 0.47046399281 -1.00431607621 + 0.48047386500 -0.97783847064 + 0.49048373719 -0.95148021081 + 0.50049360938 -0.92526378930 + 0.51050348156 -0.89921093408 + 0.52051335375 -0.87334258027 + 0.53052322594 -0.84767884477 + 0.54053309813 -0.82223900373 + 0.55054297031 -0.79704147296 + 0.56055284250 -0.77210379116 + 0.57056271469 -0.74744260607 + 0.58057258688 -0.72307366339 + 0.59058245907 -0.69901179854 + 0.60059233125 -0.67527093117 + 0.61060220344 -0.65186406235 + 0.62061207563 -0.62880327442 + 0.63062194782 -0.60609973341 + 0.64063182000 -0.58376369392 + 0.65064169219 -0.56180450643 + 0.66065156438 -0.54023062692 + 0.67066143657 -0.51904962865 + 0.68067130875 -0.49826821613 + 0.69068118094 -0.47789224096 + 0.70069105313 -0.45792671966 + 0.71070092532 -0.43837585317 + 0.72071079750 -0.41924304797 + 0.73072066969 -0.40053093878 + 0.74073054188 -0.38224141254 + 0.75074041407 -0.36437563363 + 0.76075028625 -0.34693407027 + 0.77076015844 -0.32991652180 + 0.78077003063 -0.31332214680 + 0.79077990282 -0.29714949202 + 0.80078977500 -0.28139652174 + 0.81079964719 -0.26606064765 + 0.82080951938 -0.25113875910 + 0.83081939157 -0.23662725342 + 0.84082926375 -0.22252206647 + 0.85083913594 -0.20881870305 + 0.86084900813 -0.19551226723 + 0.87085888032 -0.18259749242 + 0.88086875250 -0.17006877114 + 0.89087862469 -0.15792018430 + 0.90088849688 -0.14614553006 + 0.91089836907 -0.13473835202 + 0.92090824125 -0.12369196680 + 0.93091811344 -0.11299949090 + 0.94092798563 -0.10265386679 + 0.95093785782 -0.09264788815 + 0.96094773000 -0.08297422428 + 0.97095760219 -0.07362544361 + 0.98096747438 -0.06459403626 + 0.99097734657 -0.05587243568 + 1.00098721875 -0.04745303936 + 1.01099709094 -0.03932822851 + 1.02100696313 -0.03149038686 + 1.03101683532 -0.02393191847 + 1.04102670750 -0.01664526458 + 1.05103657969 -0.00962291961 + 1.06104645188 -0.00285744618 + 1.07105632407 0.00365851069 + 1.08106619625 0.00993221020 + 1.09107606844 0.01597080320 + 1.10108594063 0.02178132045 + 1.11109581282 0.02737066148 + 1.12110568501 0.03274558418 + 1.13111555719 0.03791269505 + 1.14112542938 0.04287843998 + 1.15113530157 0.04764909557 + 1.16114517376 0.05223076099 + 1.17115504594 0.05662935019 + 1.18116491813 0.06085058500 + 1.19117479032 0.06489998626 + 1.20118466251 0.06878287255 + 1.21119453469 0.07250433345 + 1.22120440688 0.07606940771 + 1.23121427907 0.07948315523 + 1.24122415126 0.08275044600 + 1.25123402344 0.08587601673 + 1.26124389563 0.08886447054 + 1.27125376782 0.09172027732 + 1.28126364001 0.09444777594 + 1.29127351219 0.09705117750 + 1.30128338438 0.09953456866 + 1.31129325657 0.10190191408 + 1.32130312876 0.10415705929 + 1.33131300094 0.10630373378 + 1.34132287313 0.10834555386 + 1.35133274532 0.11028602557 + 1.36134261751 0.11212854750 + 1.37135248969 0.11387641370 + 1.38136236188 0.11553281642 + 1.39137223407 0.11710084897 + 1.40138210626 0.11858350838 + 1.41139197844 0.11998369814 + 1.42140185063 0.12130423083 + 1.43141172282 0.12254783073 + 1.44142159501 0.12371713635 + 1.45143146719 0.12481470294 + 1.46144133938 0.12584300492 + 1.47145121157 0.12680443830 + 1.48146108376 0.12770132298 + 1.49147095594 0.12853590506 + 1.50148082813 0.12931035903 + 1.51149070032 0.13002678997 + 1.52150057251 0.13068723563 + 1.53151044469 0.13129366856 + 1.54152031688 0.13184799800 + 1.55153018907 0.13235207211 + 1.56154006126 0.13280767923 + 1.57154993344 0.13321654834 + 1.58155980563 0.13358035462 + 1.59156967782 0.13390072428 + 1.60157955001 0.13417922813 + 1.61158942219 0.13441738012 + 1.62159929438 0.13461664733 + 1.63160916657 0.13477845246 + 1.64161903876 0.13490417120 + 1.65162891094 0.13499513408 + 1.66163878313 0.13505262864 + 1.67164865532 0.13507790060 + 1.68165852751 0.13507215513 + 1.69166839970 0.13503655816 + 1.70167827188 0.13497223760 + 1.71168814407 0.13488028458 + 1.72169801626 0.13476175456 + 1.73170788845 0.13461766851 + 1.74171776063 0.13444901400 + 1.75172763282 0.13425674622 + 1.76173750501 0.13404178905 + 1.77174737720 0.13380503603 + 1.78175724938 0.13354735134 + 1.79176712157 0.13326957072 + 1.80177699376 0.13297250239 + 1.81178686595 0.13265692790 + 1.82179673813 0.13232360302 + 1.83180661032 0.13197325854 + 1.84181648251 0.13160660106 + 1.85182635470 0.13122431377 + 1.86183622688 0.13082705723 + 1.87184609907 0.13041547004 + 1.88185597126 0.12999016960 + 1.89186584345 0.12955175274 + 1.90187571563 0.12910079645 + 1.91188558782 0.12863785845 + 1.92189546001 0.12816347784 + 1.93190533220 0.12767817572 + 1.94191520438 0.12718245576 + 1.95192507657 0.12667680476 + 1.96193494876 0.12616169319 + 1.97194482095 0.12563757577 + 1.98195469313 0.12510489192 + 1.99196456532 0.12456406629 + 2.00197443751 0.12401550926 + 2.01198430970 0.12345961738 + 2.02199418188 0.12289677383 + 2.03200405407 0.12232734886 + 2.04201392626 0.12175170024 + 2.05202379845 0.12117017361 + 2.06203367063 0.12058310296 + 2.07204354282 0.11999081093 + 2.08205341501 0.11939360926 + 2.09206328720 0.11879179909 + 2.10207315938 0.11818567135 + 2.11208303157 0.11757550706 + 2.12209290376 0.11696157771 + 2.13210277595 0.11634414551 + 2.14211264813 0.11572346374 + 2.15212252032 0.11509977704 + 2.16213239251 0.11447332168 + 2.17214226470 0.11384432582 + 2.18215213688 0.11321300984 + 2.19216200907 0.11257958651 + 2.20217188126 0.11194426132 + 2.21218175345 0.11130723266 + 2.22219162564 0.11066869206 + 2.23220149782 0.11002882446 + 2.24221137001 0.10938780838 + 2.25222124220 0.10874581611 + 2.26223111439 0.10810301400 + 2.27224098657 0.10745956254 + 2.28225085876 0.10681561664 + 2.29226073095 0.10617132576 + 2.30227060314 0.10552683410 + 2.31228047532 0.10488228079 + 2.32229034751 0.10423780001 + 2.33230021970 0.10359352117 + 2.34231009189 0.10294956909 + 2.35231996407 0.10230606409 + 2.36232983626 0.10166312218 + 2.37233970845 0.10102085518 + 2.38234958064 0.10037937084 + 2.39235945282 0.09973877301 + 2.40236932501 0.09909916170 + 2.41237919720 0.09846063326 + 2.42238906939 0.09782328047 + 2.43239894157 0.09718719264 + 2.44240881376 0.09655245574 + 2.45241868595 0.09591915250 + 2.46242855814 0.09528736251 + 2.47243843032 0.09465716229 + 2.48244830251 0.09402862546 + 2.49245817470 0.09340182272 + 2.50246804689 0.09277682207 + 2.51247791907 0.09215368876 + 2.52248779126 0.09153248549 + 2.53249766345 0.09091327242 + 2.54250753564 0.09029610726 + 2.55251740782 0.08968104538 + 2.56252728001 0.08906813983 + 2.57253715220 0.08845744146 + 2.58254702439 0.08784899894 + 2.59255689657 0.08724285888 + 2.60256676876 0.08663906584 + 2.61257664095 0.08603766244 + 2.62258651314 0.08543868939 + 2.63259638532 0.08484218557 + 2.64260625751 0.08424818804 + 2.65261612970 0.08365673218 + 2.66262600189 0.08306785164 + 2.67263587407 0.08248157848 + 2.68264574626 0.08189794317 + 2.69265561845 0.08131697465 + 2.70266549064 0.08073870039 + 2.71267536282 0.08016314642 + 2.72268523501 0.07959033738 + 2.73269510720 0.07902029656 + 2.74270497939 0.07845304593 + 2.75271485157 0.07788860623 + 2.76272472376 0.07732699693 + 2.77273459595 0.07676823635 + 2.78274446814 0.07621234164 + 2.79275434033 0.07565932883 + 2.80276421251 0.07510921288 + 2.81277408470 0.07456200769 + 2.82278395689 0.07401772615 + 2.83279382908 0.07347638017 + 2.84280370126 0.07293798072 + 2.85281357345 0.07240253781 + 2.86282344564 0.07187006060 + 2.87283331783 0.07134055736 + 2.88284319001 0.07081403552 + 2.89285306220 0.07029050171 + 2.90286293439 0.06976996177 + 2.91287280658 0.06925242078 + 2.92288267876 0.06873788309 + 2.93289255095 0.06822635232 + 2.94290242314 0.06771783141 + 2.95291229533 0.06721232264 + 2.96292216751 0.06670982764 + 2.97293203970 0.06621034740 + 2.98294191189 0.06571388233 + 2.99295178408 0.06522043225 + 3.00296165626 0.06472999639 + 3.01297152845 0.06424257345 + 3.02298140064 0.06375816162 + 3.03299127283 0.06327675855 + 3.04300114501 0.06279836140 + 3.05301101720 0.06232296687 + 3.06302088939 0.06185057595 + 3.07303076158 0.06138118057 + 3.08304063376 0.06091476904 + 3.09305050595 0.06045133312 + 3.10306037814 0.05999083127 + 3.11307025033 0.05953331805 + 3.12308012251 0.05907883042 + 3.13308999470 0.05862743142 + 3.14309986689 0.05817918870 + 3.15310973908 0.05773402453 + 3.16311961126 0.05729188738 + 3.17312948345 0.05685266407 + 3.18313935564 0.05641629487 + 3.19314922783 0.05598279793 + 3.20315910001 0.05555217019 + 3.21316897220 0.05512445347 + 3.22317884439 0.05469963555 + 3.23318871658 0.05427769751 + 3.24319858876 0.05385862908 + 3.25320846095 0.05344240922 + 3.26321833314 0.05302903282 + 3.27322820533 0.05261849072 + 3.28323807751 0.05221077246 + 3.29324794970 0.05180586739 + 3.30325782189 0.05140376468 + 3.31326769408 0.05100445330 + 3.32327756627 0.05060792205 + 3.33328743845 0.05021415957 + 3.34329731064 0.04982315433 + 3.35330718283 0.04943489464 + 3.36331705502 0.04904936868 + 3.37332692720 0.04866656447 + 3.38333679939 0.04828646991 + 3.39334667158 0.04790907277 + 3.40335654377 0.04753436069 + 3.41336641595 0.04716232120 + 3.42337628814 0.04679294171 + 3.43338616033 0.04642620955 + 3.44339603252 0.04606211192 + 3.45340590470 0.04570063594 + 3.46341577689 0.04534176865 + 3.47342564908 0.04498549698 + 3.48343552127 0.04463180781 + 3.49344539345 0.04428068793 + 3.50345526564 0.04393212405 + 3.51346513783 0.04358610283 + 3.52347501002 0.04324261087 + 3.53348488220 0.04290163470 + 3.54349475439 0.04256316079 + 3.55350462658 0.04222717559 + 3.56351449877 0.04189366548 + 3.57352437095 0.04156261680 + 3.58353424314 0.04123401586 + 3.59354411533 0.04090784893 + 3.60355398752 0.04058410225 + 3.61356385970 0.04026276201 + 3.62357373189 0.03994381442 + 3.63358360408 0.03962724563 + 3.64359347627 0.03931304178 + 3.65360334845 0.03900118900 + 3.66361322064 0.03869167340 + 3.67362309283 0.03838448108 + 3.68363296502 0.03807959814 + 3.69364283720 0.03777701066 + 3.70365270939 0.03747670472 + 3.71366258158 0.03717866642 + 3.72367245377 0.03688288183 + 3.73368232595 0.03658933705 + 3.74369219814 0.03629801816 + 3.75370207033 0.03600891128 + 3.76371194252 0.03572200252 + 3.77372181470 0.03543727800 + 3.78373168689 0.03515472387 + 3.79374155908 0.03487432628 + 3.80375143127 0.03459607141 + 3.81376130345 0.03431994545 + 3.82377117564 0.03404593463 + 3.83378104783 0.03377402517 + 3.84379092002 0.03350420336 + 3.85380079220 0.03323645547 + 3.86381066439 0.03297076784 + 3.87382053658 0.03270712682 + 3.88383040877 0.03244551878 + 3.89384028096 0.03218593014 + 3.90385015314 0.03192834735 + 3.91386002533 0.03167275689 + 3.92386989752 0.03141914529 + 3.93387976971 0.03116749910 + 3.94388964189 0.03091780493 + 3.95389951408 0.03067004941 + 3.96390938627 0.03042421922 + 3.97391925846 0.03018030108 + 3.98392913064 0.02993828176 + 3.99393900283 0.02969814807 + 4.00394887502 0.02945988687 + 4.01395874721 0.02922348506 + 4.02396861939 0.02898892959 + 4.03397849158 0.02875620745 + 4.04398836377 0.02852530571 + 4.05399823596 0.02829621145 + 4.06400810814 0.02806891182 + 4.07401798033 0.02784339403 + 4.08402785252 0.02761964533 + 4.09403772471 0.02739765302 + 4.10404759689 0.02717740447 + 4.11405746908 0.02695888708 + 4.12406734127 0.02674208834 + 4.13407721346 0.02652699577 + 4.14408708564 0.02631359695 + 4.15409695783 0.02610187951 + 4.16410683002 0.02589183116 + 4.17411670221 0.02568343965 + 4.18412657439 0.02547669280 + 4.19413644658 0.02527157847 + 4.20414631877 0.02506808460 + 4.21415619096 0.02486619918 + 4.22416606314 0.02466591027 + 4.23417593533 0.02446720597 + 4.24418580752 0.02427007447 + 4.25419567971 0.02407450399 + 4.26420555189 0.02388048283 + 4.27421542408 0.02368799937 + 4.28422529627 0.02349704201 + 4.29423516846 0.02330759924 + 4.30424504064 0.02311965961 + 4.31425491283 0.02293321174 + 4.32426478502 0.02274824429 + 4.33427465721 0.02256474601 + 4.34428452939 0.02238270570 + 4.35429440158 0.02220211222 + 4.36430427377 0.02202295451 + 4.37431414596 0.02184522157 + 4.38432401814 0.02166890244 + 4.39433389033 0.02149398627 + 4.40434376252 0.02132046223 + 4.41435363471 0.02114831959 + 4.42436350689 0.02097754766 + 4.43437337908 0.02080813583 + 4.44438325127 0.02064007355 + 4.45439312346 0.02047335033 + 4.46440299565 0.02030795575 + 4.47441286783 0.02014387947 + 4.48442274002 0.01998111119 + 4.49443261221 0.01981964069 + 4.50444248440 0.01965945781 + 4.51445235658 0.01950055246 + 4.52446222877 0.01934291461 + 4.53447210096 0.01918653431 + 4.54448197315 0.01903140164 + 4.55449184533 0.01887750679 + 4.56450171752 0.01872483998 + 4.57451158971 0.01857339152 + 4.58452146190 0.01842315176 + 4.59453133408 0.01827411114 + 4.60454120627 0.01812626015 + 4.61455107846 0.01797958934 + 4.62456095065 0.01783408934 + 4.63457082283 0.01768975083 + 4.64458069502 0.01754656457 + 4.65459056721 0.01740452137 + 4.66460043940 0.01726361210 + 4.67461031158 0.01712382771 + 4.68462018377 0.01698515921 + 4.69463005596 0.01684759767 + 4.70463992815 0.01671113421 + 4.71464980033 0.01657576003 + 4.72465967252 0.01644146640 + 4.73466954471 0.01630824462 + 4.74467941690 0.01617608610 + 4.75468928908 0.01604498226 + 4.76469916127 0.01591492462 + 4.77470903346 0.01578590475 + 4.78471890565 0.01565791428 + 4.79472877783 0.01553094491 + 4.80473865002 0.01540498838 + 4.81474852221 0.01528003651 + 4.82475839440 0.01515608117 + 4.83476826658 0.01503311430 + 4.84477813877 0.01491112791 + 4.85478801096 0.01479011403 + 4.86479788315 0.01467006479 + 4.87480775533 0.01455097236 + 4.88481762752 0.01443282897 + 4.89482749971 0.01431562692 + 4.90483737190 0.01419935856 + 4.91484724408 0.01408401629 + 4.92485711627 0.01396959258 + 4.93486698846 0.01385607996 + 4.94487686065 0.01374347101 + 4.95488673283 0.01363175837 + 4.96489660502 0.01352093473 + 4.97490647721 0.01341099285 + 4.98491634940 0.01330192552 + 4.99492622159 0.01319372563 + 5.00493609377 0.01308638608 + 5.01494596596 0.01297989985 + 5.02495583815 0.01287425998 + 5.03496571034 0.01276945954 + 5.04497558252 0.01266549168 + 5.05498545471 0.01256234958 + 5.06499532690 0.01246002650 + 5.07500519909 0.01235851573 + 5.08501507127 0.01225781063 + 5.09502494346 0.01215790461 + 5.10503481565 0.01205879111 + 5.11504468784 0.01196046365 + 5.12505456002 0.01186291580 + 5.13506443221 0.01176614117 + 5.14507430440 0.01167013341 + 5.15508417659 0.01157488625 + 5.16509404877 0.01148039346 + 5.17510392096 0.01138664884 + 5.18511379315 0.01129364626 + 5.19512366534 0.01120137965 + 5.20513353752 0.01110984295 + 5.21514340971 0.01101903020 + 5.22515328190 0.01092893544 + 5.23516315409 0.01083955279 + 5.24517302627 0.01075087641 + 5.25518289846 0.01066290050 + 5.26519277065 0.01057561931 + 5.27520264284 0.01048902715 + 5.28521251502 0.01040311835 + 5.29522238721 0.01031788732 + 5.30523225940 0.01023332849 + 5.31524213159 0.01014943634 + 5.32525200377 0.01006620540 + 5.33526187596 0.00998363024 + 5.34527174815 0.00990170549 + 5.35528162034 0.00982042581 + 5.36529149252 0.00973978590 + 5.37530136471 0.00965978051 + 5.38531123690 0.00958040443 + 5.39532110909 0.00950165251 + 5.40533098127 0.00942351962 + 5.41534085346 0.00934600068 + 5.42535072565 0.00926909066 + 5.43536059784 0.00919278456 + 5.44537047002 0.00911707743 + 5.45538034221 0.00904196435 + 5.46539021440 0.00896744045 + 5.47540008659 0.00889350091 + 5.48540995877 0.00882014092 + 5.49541983096 0.00874735574 + 5.50542970315 0.00867514066 + 5.51543957534 0.00860349100 + 5.52544944752 0.00853240213 + 5.53545931971 0.00846186945 + 5.54546919190 0.00839188841 + 5.55547906409 0.00832245449 + 5.56548893628 0.00825356321 + 5.57549880846 0.00818521011 + 5.58550868065 0.00811739080 + 5.59551855284 0.00805010090 + 5.60552842503 0.00798333609 + 5.61553829721 0.00791709205 + 5.62554816940 0.00785136454 + 5.63555804159 0.00778614931 + 5.64556791378 0.00772144220 + 5.65557778596 0.00765723903 + 5.66558765815 0.00759353568 + 5.67559753034 0.00753032807 + 5.68560740253 0.00746761215 + 5.69561727471 0.00740538390 + 5.70562714690 0.00734363932 + 5.71563701909 0.00728237448 + 5.72564689128 0.00722158544 + 5.73565676346 0.00716126833 + 5.74566663565 0.00710141929 + 5.75567650784 0.00704203450 + 5.76568638003 0.00698311017 + 5.77569625221 0.00692464254 + 5.78570612440 0.00686662789 + 5.79571599659 0.00680906251 + 5.80572586878 0.00675194274 + 5.81573574096 0.00669526496 + 5.82574561315 0.00663902556 + 5.83575548534 0.00658322095 + 5.84576535753 0.00652784761 + 5.85577522971 0.00647290201 + 5.86578510190 0.00641838067 + 5.87579497409 0.00636428014 + 5.88580484628 0.00631059698 + 5.89581471846 0.00625732780 + 5.90582459065 0.00620446923 + 5.91583446284 0.00615201793 + 5.92584433503 0.00609997058 + 5.93585420721 0.00604832390 + 5.94586407940 0.00599707462 + 5.95587395159 0.00594621952 + 5.96588382378 0.00589575539 + 5.97589369596 0.00584567905 + 5.98590356815 0.00579598735 + 5.99591344034 0.00574667716 + 6.00592331253 0.00569774539 + 6.01593318471 0.00564918896 + 6.02594305690 0.00560100481 + 6.03595292909 0.00555318993 + 6.04596280128 0.00550574133 + 6.05597267346 0.00545865601 + 6.06598254565 0.00541193105 + 6.07599241784 0.00536556350 + 6.08600229003 0.00531955048 + 6.09601216222 0.00527388910 + 6.10602203440 0.00522857652 + 6.11603190659 0.00518360990 + 6.12604177878 0.00513898644 + 6.13605165097 0.00509470336 + 6.14606152315 0.00505075790 + 6.15607139534 0.00500714731 + 6.16608126753 0.00496386890 + 6.17609113972 0.00492091995 + 6.18610101190 0.00487829782 + 6.19611088409 0.00483599984 + 6.20612075628 0.00479402340 + 6.21613062847 0.00475236588 + 6.22614050065 0.00471102471 + 6.23615037284 0.00466999733 + 6.24616024503 0.00462928118 + 6.25617011722 0.00458887377 + 6.26617998940 0.00454877257 + 6.27618986159 0.00450897513 + 6.28619973378 0.00446947897 + 6.29620960597 0.00443028166 + 6.30621947815 0.00439138079 + 6.31622935034 0.00435277395 + 6.32623922253 0.00431445876 + 6.33624909472 0.00427643287 + 6.34625896690 0.00423869393 + 6.35626883909 0.00420123963 + 6.36627871128 0.00416406766 + 6.37628858347 0.00412717573 + 6.38629845565 0.00409056160 + 6.39630832784 0.00405422299 + 6.40631820003 0.00401815770 + 6.41632807222 0.00398236351 + 6.42633794440 0.00394683822 + 6.43634781659 0.00391157966 + 6.44635768878 0.00387658568 + 6.45636756097 0.00384185413 + 6.46637743315 0.00380738290 + 6.47638730534 0.00377316988 + 6.48639717753 0.00373921298 + 6.49640704972 0.00370551013 + 6.50641692190 0.00367205927 + 6.51642679409 0.00363885837 + 6.52643666628 0.00360590541 + 6.53644653847 0.00357319838 + 6.54645641065 0.00354073530 + 6.55646628284 0.00350851418 + 6.56647615503 0.00347653308 + 6.57648602722 0.00344479005 + 6.58649589940 0.00341328316 + 6.59650577159 0.00338201051 + 6.60651564378 0.00335097020 + 6.61652551597 0.00332016035 + 6.62653538815 0.00328957910 + 6.63654526034 0.00325922459 + 6.64655513253 0.00322909500 + 6.65656500472 0.00319918849 + 6.66657487691 0.00316950327 + 6.67658474909 0.00314003755 + 6.68659462128 0.00311078954 + 6.69660449347 0.00308175748 + 6.70661436566 0.00305293963 + 6.71662423784 0.00302433424 + 6.72663411003 0.00299593961 + 6.73664398222 0.00296775401 + 6.74665385441 0.00293977576 + 6.75666372659 0.00291200318 + 6.76667359878 0.00288443459 + 6.77668347097 0.00285706835 + 6.78669334316 0.00282990281 + 6.79670321534 0.00280293635 + 6.80671308753 0.00277616735 + 6.81672295972 0.00274959420 + 6.82673283191 0.00272321533 + 6.83674270409 0.00269702914 + 6.84675257628 0.00267103408 + 6.85676244847 0.00264522859 + 6.86677232066 0.00261961114 + 6.87678219284 0.00259418019 + 6.88679206503 0.00256893423 + 6.89680193722 0.00254387175 + 6.90681180941 0.00251899127 + 6.91682168159 0.00249429130 + 6.92683155378 0.00246977037 + 6.93684142597 0.00244542703 + 6.94685129816 0.00242125983 + 6.95686117034 0.00239726733 + 6.96687104253 0.00237344812 + 6.97688091472 0.00234980077 + 6.98689078691 0.00232632389 + 6.99690065909 0.00230301608 + 7.00691053128 0.00227987598 + 7.01692040347 0.00225690220 + 7.02693027566 0.00223409339 + 7.03694014784 0.00221144821 + 7.04695002003 0.00218896531 + 7.05695989222 0.00216664337 + 7.06696976441 0.00214448107 + 7.07697963659 0.00212247711 + 7.08698950878 0.00210063019 + 7.09699938097 0.00207893902 + 7.10700925316 0.00205740233 + 7.11701912534 0.00203601885 + 7.12702899753 0.00201478733 + 7.13703886972 0.00199370652 + 7.14704874191 0.00197277518 + 7.15705861409 0.00195199209 + 7.16706848628 0.00193135602 + 7.17707835847 0.00191086577 + 7.18708823066 0.00189052014 + 7.19709810285 0.00187031794 + 7.20710797503 0.00185025798 + 7.21711784722 0.00183033911 + 7.22712771941 0.00181056014 + 7.23713759160 0.00179091994 + 7.24714746378 0.00177141736 + 7.25715733597 0.00175205125 + 7.26716720816 0.00173282049 + 7.27717708035 0.00171372397 + 7.28718695253 0.00169476057 + 7.29719682472 0.00167592919 + 7.30720669691 0.00165722874 + 7.31721656910 0.00163865813 + 7.32722644128 0.00162021629 + 7.33723631347 0.00160190215 + 7.34724618566 0.00158371465 + 7.35725605785 0.00156565273 + 7.36726593003 0.00154771536 + 7.37727580222 0.00152990149 + 7.38728567441 0.00151221009 + 7.39729554660 0.00149464016 + 7.40730541878 0.00147719067 + 7.41731529097 0.00145986062 + 7.42732516316 0.00144264902 + 7.43733503535 0.00142555486 + 7.44734490753 0.00140857718 + 7.45735477972 0.00139171499 + 7.46736465191 0.00137496734 + 7.47737452410 0.00135833325 + 7.48738439628 0.00134181177 + 7.49739426847 0.00132540197 + 7.50740414066 0.00130910290 + 7.51741401285 0.00129291363 + 7.52742388503 0.00127683324 + 7.53743375722 0.00126086081 + 7.54744362941 0.00124499542 + 7.55745350160 0.00122923618 + 7.56746337378 0.00121358219 + 7.57747324597 0.00119803256 + 7.58748311816 0.00118258641 + 7.59749299035 0.00116724285 + 7.60750286253 0.00115200102 + 7.61751273472 0.00113686006 + 7.62752260691 0.00112181911 + 7.63753247910 0.00110687731 + 7.64754235128 0.00109203383 + 7.65755222347 0.00107728782 + 7.66756209566 0.00106263846 + 7.67757196785 0.00104808492 + 7.68758184003 0.00103362638 + 7.69759171222 0.00101926202 + 7.70760158441 0.00100499104 + 7.71761145660 0.00099081264 + 7.72762132878 0.00097672603 + 7.73763120097 0.00096273041 + 7.74764107316 0.00094882500 + 7.75765094535 0.00093500903 + 7.76766081754 0.00092128171 + 7.77767068972 0.00090764230 + 7.78768056191 0.00089409002 + 7.79769043410 0.00088062412 + 7.80770030629 0.00086724386 + 7.81771017847 0.00085394848 + 7.82772005066 0.00084073725 + 7.83772992285 0.00082760945 + 7.84773979504 0.00081456434 + 7.85774966722 0.00080160119 + 7.86775953941 0.00078871930 + 7.87776941160 0.00077591796 + 7.88777928379 0.00076319645 + 7.89778915597 0.00075055408 + 7.90779902816 0.00073799015 + 7.91780890035 0.00072550396 + 7.92781877254 0.00071309485 + 7.93782864472 0.00070076212 + 7.94783851691 0.00068850510 + 7.95784838910 0.00067632312 + 7.96785826129 0.00066421552 + 7.97786813347 0.00065218163 + 7.98787800566 0.00064022079 + 7.99788787785 0.00062833237 + 8.00789775004 0.00061651571 + 8.01790762222 0.00060477016 + 8.02791749441 0.00059309510 + 8.03792736660 0.00058148989 + 8.04793723879 0.00056995391 + 8.05794711097 0.00055848652 + 8.06795698316 0.00054708712 + 8.07796685535 0.00053575509 + 8.08797672754 0.00052448982 + 8.09798659972 0.00051329070 + 8.10799647191 0.00050215713 + 8.11800634410 0.00049108852 + 8.12801621629 0.00048008428 + 8.13802608847 0.00046914381 + 8.14803596066 0.00045826654 + 8.15804583285 0.00044745188 + 8.16805570504 0.00043669926 + 8.17806557722 0.00042600812 + 8.18807544941 0.00041537787 + 8.19808532160 0.00040480796 + 8.20809519379 0.00039429783 + 8.21810506597 0.00038384693 + 8.22811493816 0.00037345471 + 8.23812481035 0.00036312061 + 8.24813468254 0.00035284410 + 8.25814455472 0.00034262463 + 8.26815442691 0.00033246167 + 8.27816429910 0.00032235470 + 8.28817417129 0.00031230317 + 8.29818404347 0.00030230658 + 8.30819391566 0.00029236439 + 8.31820378785 0.00028247610 + 8.32821366004 0.00027264118 + 8.33822353223 0.00026285913 + 8.34823340441 0.00025312945 + 8.35824327660 0.00024345163 + 8.36825314879 0.00023382517 + 8.37826302098 0.00022424959 + 8.38827289316 0.00021472438 + 8.39828276535 0.00020524906 + 8.40829263754 0.00019582314 + 8.41830250973 0.00018644615 + 8.42831238191 0.00017711760 + 8.43832225410 0.00016783703 + 8.44833212629 0.00015860396 + 8.45834199848 0.00014941792 + 8.46835187066 0.00014027844 + 8.47836174285 0.00013118508 + 8.48837161504 0.00012213736 + 8.49838148723 0.00011313484 + 8.50839135941 0.00010417706 + 8.51840123160 0.00009526357 + 8.52841110379 0.00008639393 + 8.53842097598 0.00007756768 + 8.54843084816 0.00006878439 + 8.55844072035 0.00006004364 + 8.56845059254 0.00005134498 + 8.57846046473 0.00004268799 + 8.58847033691 0.00003407224 + 8.59848020910 0.00002549731 + 8.60849008129 0.00001696279 + 8.61849995348 0.00000846825 + 8.62850982566 0.00000000000 +# KBs:_______________ + 0 1 20.3315769973999991 #kb l, n (seq), energy in Ry + 128 0.0100751164948473 1.2795397948456102 + 0.00000000000 9.50520356794 + 0.01007511649 9.50032670974 + 0.02015023299 9.48570598009 + 0.03022534948 9.46137226758 + 0.04030046598 9.42737676345 + 0.05037558247 9.38379096058 + 0.06045069897 9.33070651680 + 0.07052581546 9.26823503888 + 0.08060093196 9.19650784344 + 0.09067604845 9.11567565348 + 0.10075116495 9.02590826692 + 0.11082628144 8.92739416871 + 0.12090139794 8.82034010093 + 0.13097651443 8.70497059309 + 0.14105163093 8.58152744052 + 0.15112674742 8.45026914182 + 0.16120186392 8.31147028361 + 0.17127698041 8.16542091022 + 0.18135209691 8.01242581858 + 0.19142721340 7.85280381528 + 0.20150232990 7.68688697061 + 0.21157744639 7.51501976984 + 0.22165256289 7.33755828748 + 0.23172767938 7.15486928432 + 0.24180279588 6.96732928743 + 0.25187791237 6.77532363715 + 0.26195302887 6.57924549251 + 0.27202814536 6.37949482981 + 0.28210326186 6.17647738143 + 0.29217837835 5.97060358991 + 0.30225349485 5.76228751809 + 0.31232861134 5.55194574107 + 0.32240372784 5.33999624841 + 0.33247884433 5.12685730159 + 0.34255396082 4.91294631937 + 0.35262907732 4.69867873915 + 0.36270419381 4.48446688221 + 0.37277931031 4.27071883455 + 0.38285442680 4.05783732955 + 0.39292954330 3.84621864373 + 0.40300465979 3.63625150977 + 0.41307977629 3.42831606634 + 0.42315489278 3.22278280614 + 0.43323000928 3.02001157871 + 0.44330512577 2.82035061548 + 0.45338024227 2.62413559538 + 0.46345535876 2.43168875834 + 0.47353047526 2.24331804603 + 0.48360559175 2.05931631177 + 0.49368070825 1.87996057491 + 0.50375582474 1.70551132060 + 0.51383094124 1.53621187300 + 0.52390605773 1.37228781662 + 0.53398117423 1.21394648532 + 0.54405629072 1.06137651394 + 0.55413140722 0.91474745518 + 0.56420652371 0.77420946489 + 0.57428164021 0.63989305434 + 0.58435675670 0.51190891236 + 0.59443187320 0.39034779516 + 0.60450698969 0.27528048715 + 0.61458210619 0.16675782968 + 0.62465722268 0.06481081947 + 0.63473233918 -0.03054922641 + 0.64480745567 -0.11933043785 + 0.65488257217 -0.20156009392 + 0.66495768866 -0.27728426151 + 0.67503280515 -0.34656737192 + 0.68510792165 -0.40949173702 + 0.69518303814 -0.46615700940 + 0.70525815464 -0.51667958554 + 0.71533327113 -0.56119195853 + 0.72540838763 -0.59984201950 + 0.73548350412 -0.63279231361 + 0.74555862062 -0.66021925262 + 0.75563373711 -0.68231228630 + 0.76570885361 -0.69927303834 + 0.77578397010 -0.71131440670 + 0.78585908660 -0.71865963637 + 0.79593420309 -0.72154136315 + 0.80600931959 -0.72020063581 + 0.81608443608 -0.71488591788 + 0.82615955258 -0.70585207329 + 0.83623466907 -0.69335934008 + 0.84630978557 -0.67767229411 + 0.85638490206 -0.65905880685 + 0.86646001856 -0.63778900177 + 0.87653513505 -0.61413421038 + 0.88661025155 -0.58836593336 + 0.89668536804 -0.56075480743 + 0.90676048454 -0.53156958442 + 0.91683560103 -0.50107612162 + 0.92691071753 -0.46953638901 + 0.93698583402 -0.43720749501 + 0.94706095052 -0.40434073339 + 0.95713606701 -0.37118065394 + 0.96721118351 -0.33796415893 + 0.97728630000 -0.30491962784 + 0.98736141650 -0.27226607247 + 0.99743653299 -0.24021232369 + 1.00751164948 -0.20895625196 + 1.01758676598 -0.17868402327 + 1.02766188247 -0.14956939171 + 1.03773699897 -0.12177302942 + 1.04781211546 -0.09544189556 + 1.05788723196 -0.07070864488 + 1.06796234845 -0.04769107605 + 1.07803746495 -0.02649162091 + 1.08811258144 -0.00719688045 + 1.09818769794 0.01012281384 + 1.10826281443 0.02541383025 + 1.11833793093 0.03863925845 + 1.12841304742 0.04977516603 + 1.13848816392 0.05880719849 + 1.14856328041 0.06572866329 + 1.15863839691 0.07054097654 + 1.16871351340 0.07325310190 + 1.17878862990 0.07388127557 + 1.18886374639 0.07244869934 + 1.19893886289 0.06898523890 + 1.20901397938 0.06352712333 + 1.21908909588 0.05611664811 + 1.22916421237 0.04680188130 + 1.23923932887 0.03575869148 + 1.24931444536 0.02268215184 + 1.25938956186 0.00723125844 + 1.26946467835 -0.00456019388 + 1.27953979485 0.00000000000 + 0 2 2.9292301290000000 #kb l, n (seq), energy in Ry + 128 0.0100751164948473 1.2795397948456102 + 0.00000000000 -2.85468999460 + 0.01007511649 -2.85039253054 + 0.02015023299 -2.83751463469 + 0.03022534948 -2.81610024920 + 0.04030046598 -2.78622231385 + 0.05037558247 -2.74798250154 + 0.06045069897 -2.70151078999 + 0.07052581546 -2.64696489680 + 0.08060093196 -2.58452960504 + 0.09067604845 -2.51441597627 + 0.10075116495 -2.43686044804 + 0.11082628144 -2.35212383142 + 0.12090139794 -2.26049020326 + 0.13097651443 -2.16226571176 + 0.14105163093 -2.05777728310 + 0.15112674742 -1.94737125968 + 0.16120186392 -1.83141195464 + 0.17127698041 -1.71028014859 + 0.18135209691 -1.58437152017 + 0.19142721340 -1.45409503289 + 0.20150232990 -1.31987127846 + 0.21157744639 -1.18213078728 + 0.22165256289 -1.04131231498 + 0.23172767938 -0.89786111447 + 0.24180279588 -0.75222720172 + 0.25187791237 -0.60486362346 + 0.26195302887 -0.45622473704 + 0.27202814536 -0.30676451080 + 0.28210326186 -0.15693484942 + 0.29217837835 -0.00718396004 + 0.30225349485 0.14204524120 + 0.31232861134 0.29031667014 + 0.32240372784 0.43720255792 + 0.33247884433 0.58228486953 + 0.34255396082 0.72515665418 + 0.35262907732 0.86542331780 + 0.36270419381 1.00270381808 + 0.37277931031 1.13663177479 + 0.38285442680 1.26685649389 + 0.39292954330 1.39304390226 + 0.40300465979 1.51487739141 + 0.41307977629 1.63205856812 + 0.42315489278 1.74430791413 + 0.43323000928 1.85136535240 + 0.44330512577 1.95299072225 + 0.45338024227 2.04896416586 + 0.46345535876 2.13908642504 + 0.47353047526 2.22317905737 + 0.48360559175 2.30108456588 + 0.49368070825 2.37266645796 + 0.50375582474 2.43780922350 + 0.51383094124 2.49641825120 + 0.52390605773 2.54841967758 + 0.53398117423 2.59376017687 + 0.54405629072 2.63240670661 + 0.55413140722 2.66434618465 + 0.56420652371 2.68958514733 + 0.57428164021 2.70814935714 + 0.58435675670 2.72008337844 + 0.59443187320 2.72545012977 + 0.60450698969 2.72433040632 + 0.61458210619 2.71682239853 + 0.62465722268 2.70304117345 + 0.63473233918 2.68311816683 + 0.64480745567 2.65720064857 + 0.65488257217 2.62545119288 + 0.66495768866 2.58804714402 + 0.67503280515 2.54518006459 + 0.68510792165 2.49705519897 + 0.69518303814 2.44389092543 + 0.70525815464 2.38591819647 + 0.71533327113 2.32337999025 + 0.72540838763 2.25653074475 + 0.73548350412 2.18563578369 + 0.74555862062 2.11097073504 + 0.75563373711 2.03282092969 + 0.76570885361 1.95148079165 + 0.77578397010 1.86725319225 + 0.78585908660 1.78044879084 + 0.79593420309 1.69138534213 + 0.80600931959 1.60038697176 + 0.81608443608 1.50778340895 + 0.82615955258 1.41390918512 + 0.83623466907 1.31910278565 + 0.84630978557 1.22370575349 + 0.85638490206 1.12806174029 + 0.86646001856 1.03251551017 + 0.87653513505 0.93741188220 + 0.88661025155 0.84309462207 + 0.89668536804 0.74990527410 + 0.90676048454 0.65818193842 + 0.91683560103 0.56825799160 + 0.92691071753 0.48046075357 + 0.93698583402 0.39511010334 + 0.94706095052 0.31251704486 + 0.95713606701 0.23298222933 + 0.96721118351 0.15679443715 + 0.97728630000 0.08422902469 + 0.98736141650 0.01554634243 + 0.99743653299 -0.04900986885 + 1.00751164948 -0.10921409715 + 1.01758676598 -0.16486068580 + 1.02766188247 -0.21576545980 + 1.03773699897 -0.26176734311 + 1.04781211546 -0.30272995867 + 1.05788723196 -0.33854320292 + 1.06796234845 -0.36912478629 + 1.07803746495 -0.39442173089 + 1.08811258144 -0.41441179583 + 1.09818769794 -0.42910489931 + 1.10826281443 -0.43854457450 + 1.11833793093 -0.44280810202 + 1.12841304742 -0.44199378688 + 1.13848816392 -0.43621020099 + 1.14856328041 -0.42557088798 + 1.15863839691 -0.41019734300 + 1.16871351340 -0.39021835578 + 1.17878862990 -0.36577031820 + 1.18886374639 -0.33699734931 + 1.19893886289 -0.30405136858 + 1.20901397938 -0.26709209949 + 1.21908909588 -0.22628701016 + 1.22916421237 -0.18181118908 + 1.23923932887 -0.13426128628 + 1.24931444536 -0.08259572003 + 1.25938956186 -0.02564099992 + 1.26946467835 0.01620247242 + 1.27953979485 0.00000000000 + 1 1 3.2082599850000002 #kb l, n (seq), energy in Ry + 122 0.0100819926630310 1.2199211122267499 + 0.00000000000 36.31383289647 + 0.01008199266 36.28897893652 + 0.02016398533 36.21449879058 + 0.03024597799 36.09063555476 + 0.04032797065 35.91779336164 + 0.05040996332 35.69653541813 + 0.06049195598 35.42758138494 + 0.07057394864 35.11180406675 + 0.08065594130 34.75022538189 + 0.09073793397 34.34401167215 + 0.10081992663 33.89446839189 + 0.11090191929 33.40303413885 + 0.12098391196 32.87127409546 + 0.13106590462 32.30087295831 + 0.14114789728 31.69362731618 + 0.15122988995 31.05143759526 + 0.16131188261 30.37629954139 + 0.17139387527 29.67029537698 + 0.18147586793 28.93558457651 + 0.19155786060 28.17439441206 + 0.20163985326 27.38901020277 + 0.21172184592 26.58176553943 + 0.22180383859 25.75503216281 + 0.23188583125 24.91120995330 + 0.24196782391 24.05271690782 + 0.25204981658 23.18197899585 + 0.26213180924 22.30142028262 + 0.27221380190 21.41345310874 + 0.28229579456 20.52046846712 + 0.29237778723 19.62482662558 + 0.30245977989 18.72884805873 + 0.31254177255 17.83480467994 + 0.32262376522 16.94491147738 + 0.33270575788 16.06131851995 + 0.34278775054 15.18610346515 + 0.35286974321 14.32126449761 + 0.36295173587 13.46871381207 + 0.37303372853 12.63027162625 + 0.38311572120 11.80766077045 + 0.39319771386 11.00250179079 + 0.40327970652 10.21630876249 + 0.41336169918 9.45048559875 + 0.42344369185 8.70632303794 + 0.43352568451 7.98499624885 + 0.44360767717 7.28756301286 + 0.45368966984 6.61496257753 + 0.46377166250 5.96801508441 + 0.47385365516 5.34742159826 + 0.48393564783 4.75376473700 + 0.49401764049 4.18750985157 + 0.50409963315 3.64900675753 + 0.51418162581 3.13849198764 + 0.52426361848 2.65609155107 + 0.53434561114 2.20182414284 + 0.54442760380 1.77560480183 + 0.55450959647 1.37724896581 + 0.56459158913 1.00647689676 + 0.57467358179 0.66291843797 + 0.58475557446 0.34611806314 + 0.59483756712 0.05554018330 + 0.60491955978 -0.20942533121 + 0.61500155244 -0.44945745197 + 0.62508354511 -0.66529815539 + 0.63516553777 -0.85774648847 + 0.64524753043 -1.02765257443 + 0.65532952310 -1.17591159636 + 0.66541151576 -1.30345779757 + 0.67549350842 -1.41125853156 + 0.68557550109 -1.50030839630 + 0.69565749375 -1.57162348658 + 0.70573948641 -1.62623579278 + 0.71582147908 -1.66518777384 + 0.72590347174 -1.68952713284 + 0.73598546440 -1.70030181452 + 0.74606745706 -1.69855524884 + 0.75614944973 -1.68532185582 + 0.76623144239 -1.66162282944 + 0.77631343505 -1.62846220998 + 0.78639542772 -1.58682325734 + 0.79647742038 -1.53766513011 + 0.80655941304 -1.48191987450 + 0.81664140571 -1.42048972517 + 0.82672339837 -1.35424471658 + 0.83680539103 -1.28402059840 + 0.84688738369 -1.21061705226 + 0.85696937636 -1.13479619785 + 0.86705136902 -1.05728137847 + 0.87713336168 -0.97875621286 + 0.88721535435 -0.89986389908 + 0.89729734701 -0.82120675264 + 0.90737933967 -0.74334596212 + 0.91746133234 -0.66680154232 + 0.92754332500 -0.59205246510 + 0.93762531766 -0.51953694781 + 0.94770731032 -0.44965287594 + 0.95778930299 -0.38275834084 + 0.96787129565 -0.31917226838 + 0.97795328831 -0.25917511818 + 0.98803528098 -0.20300963199 + 0.99811727364 -0.15088160994 + 1.00819926630 -0.10296069491 + 1.01828125897 -0.05938114631 + 1.02836325163 -0.02024258456 + 1.03844524429 0.01438931029 + 1.04852723696 0.04448216110 + 1.05860922962 0.07003633140 + 1.06869122228 0.09108445075 + 1.07877321494 0.10769103839 + 1.08885520761 0.11995220321 + 1.09893720027 0.12799551668 + 1.10901919293 0.13198032508 + 1.11910118560 0.13209533266 + 1.12918317826 0.12853953028 + 1.13926517092 0.12150625720 + 1.14934716359 0.11117576252 + 1.15942915625 0.09771743345 + 1.16951114891 0.08128812945 + 1.17959314157 0.06214566596 + 1.18967513424 0.04019663239 + 1.19975712690 0.01437808700 + 1.20983911956 -0.00639142004 + 1.21992111223 0.00000000000 + 1 2 -0.9738507940000000 #kb l, n (seq), energy in Ry + 122 0.0100819926630310 1.2199211122267499 + 0.00000000000 -0.62871760520 + 0.01008199266 -0.62189933072 + 0.02016398533 -0.60147928284 + 0.03024597799 -0.56756166123 + 0.04032797065 -0.52031941277 + 0.05040996332 -0.45999318523 + 0.06049195598 -0.38688986343 + 0.07057394864 -0.30138070350 + 0.08065594130 -0.20389908125 + 0.09073793397 -0.09493786838 + 0.10081992663 0.02495354421 + 0.11090191929 0.15517255392 + 0.12098391196 0.29506696247 + 0.13106590462 0.44393887511 + 0.14114789728 0.60104885468 + 0.15122988995 0.76562030299 + 0.16131188261 0.93684403586 + 0.17139387527 1.11388302616 + 0.18147586793 1.29587727372 + 0.19155786060 1.48194877659 + 0.20163985326 1.67120656526 + 0.21172184592 1.86275176587 + 0.22180383859 2.05568265977 + 0.23188583125 2.24909970936 + 0.24196782391 2.44211050209 + 0.25204981658 2.63383460420 + 0.26213180924 2.82340827103 + 0.27221380190 3.00998899712 + 0.28229579456 3.19275986713 + 0.29237778723 3.37093369997 + 0.30245977989 3.54375693036 + 0.31254177255 3.71051324007 + 0.32262376522 3.87052688926 + 0.33270575788 4.02316574906 + 0.34278775054 4.16784400815 + 0.35286974321 4.30402455072 + 0.36295173587 4.43122098187 + 0.37303372853 4.54899930480 + 0.38311572120 4.65697924347 + 0.39319771386 4.75483519626 + 0.40327970652 4.84229683974 + 0.41336169918 4.91914937075 + 0.42344369185 4.98523340136 + 0.43352568451 5.04044450527 + 0.44360767717 5.08473244064 + 0.45368966984 5.11810004779 + 0.46377166250 5.14060184793 + 0.47385365516 5.15234234209 + 0.48393564783 5.15347407640 + 0.49401764049 5.14419539553 + 0.50409963315 5.12474804601 + 0.51418162581 5.09541452922 + 0.52426361848 5.05651526992 + 0.53434561114 5.00840567129 + 0.54442760380 4.95147299319 + 0.55450959647 4.88613317021 + 0.56459158913 4.81282751877 + 0.57467358179 4.73201940894 + 0.58475557446 4.64419091600 + 0.59483756712 4.54983944287 + 0.60491955978 4.44947440310 + 0.61500155244 4.34361392068 + 0.62508354511 4.23278161163 + 0.63516553777 4.11750345454 + 0.64524753043 3.99830475994 + 0.65532952310 3.87570729007 + 0.66541151576 3.75022649908 + 0.67549350842 3.62236894564 + 0.68557550109 3.49262987962 + 0.69565749375 3.36149100269 + 0.70573948641 3.22941843650 + 0.71582147908 3.09686088393 + 0.72590347174 2.96424799884 + 0.73598546440 2.83198897532 + 0.74606745706 2.70047133789 + 0.75614944973 2.57005996012 + 0.76623144239 2.44109629090 + 0.77631343505 2.31389778321 + 0.78639542772 2.18875754630 + 0.79647742038 2.06594418405 + 0.80655941304 1.94570182675 + 0.81664140571 1.82825035427 + 0.82672339837 1.71378578928 + 0.83680539103 1.60248085132 + 0.84688738369 1.49448566821 + 0.85696937636 1.38992862263 + 0.86705136902 1.28891732896 + 0.87713336168 1.19153971695 + 0.88721535435 1.09786522325 + 0.89729734701 1.00794606145 + 0.90737933967 0.92181856635 + 0.91746133234 0.83950459458 + 0.92754332500 0.76101296888 + 0.93762531766 0.68634095202 + 0.94770731032 0.61547573767 + 0.95778930299 0.54839594414 + 0.96787129565 0.48507310100 + 0.97795328831 0.42547311491 + 0.98803528098 0.36955770505 + 0.99811727364 0.31728579794 + 1.00819926630 0.26861487171 + 1.01828125897 0.22350224248 + 1.02836325163 0.18190628418 + 1.03844524429 0.14378757569 + 1.04852723696 0.10910996978 + 1.05860922962 0.07784157842 + 1.06869122228 0.04995567075 + 1.07877321494 0.02543148077 + 1.08885520761 0.00425490298 + 1.09893720027 -0.01358086383 + 1.10901919293 -0.02807460906 + 1.11910118560 -0.03921817686 + 1.12918317826 -0.04700779668 + 1.13926517092 -0.05145172251 + 1.14934716359 -0.05257228264 + 1.15942915625 -0.05040201008 + 1.16951114891 -0.04498289979 + 1.17959314157 -0.03644547001 + 1.18967513424 -0.02468800276 + 1.19975712690 -0.00893836611 + 1.20983911956 0.00450445421 + 1.21992111223 0.00000000000 + 2 1 -11.0158297231999995 #kb l, n (seq), energy in Ry + 159 0.0100379709731946 1.5859994137647522 + 0.00000000000 21.45795151573 + 0.01003797097 21.45363428080 + 0.02007594195 21.44067920230 + 0.03011391292 21.41907876680 + 0.04015188389 21.38882020654 + 0.05018985487 21.34988602116 + 0.06022782584 21.30225438995 + 0.07026579681 21.24589961150 + 0.08030376779 21.18079270767 + 0.09034173876 21.10690210986 + 0.10037970973 21.02419437900 + 0.11041768071 20.93263510882 + 0.12045565168 20.83218979180 + 0.13049362265 20.72282485076 + 0.14053159362 20.60450863479 + 0.15056956460 20.47721254887 + 0.16060753557 20.34091216972 + 0.17064550654 20.19558840892 + 0.18068347752 20.04122869765 + 0.19072144849 19.87782816015 + 0.20075941946 19.70539085705 + 0.21079739044 19.52393086504 + 0.22083536141 19.33347355480 + 0.23087333238 19.13405661548 + 0.24091130336 18.92573120760 + 0.25094927433 18.70856294102 + 0.26098724530 18.48263288959 + 0.27102521628 18.24803847433 + 0.28106318725 18.00489428089 + 0.29110115822 17.75333281271 + 0.30113912920 17.49350513344 + 0.31117710017 17.22558140070 + 0.32121507114 16.94975131426 + 0.33125304212 16.66622445481 + 0.34129101309 16.37523048754 + 0.35132898406 16.07701927072 + 0.36136695504 15.77186082679 + 0.37140492601 15.46004520419 + 0.38144289698 15.14188221688 + 0.39148086795 14.81770105011 + 0.40151883893 14.48784975674 + 0.41155680990 14.15269463643 + 0.42159478087 13.81261948349 + 0.43163275185 13.46802475135 + 0.44167072282 13.11932656215 + 0.45170869379 12.76695566519 + 0.46174666477 12.41135627949 + 0.47178463574 12.05298480702 + 0.48182260671 11.69230856386 + 0.49186057769 11.32980428240 + 0.50189854866 10.96595671151 + 0.51193651963 10.60125705271 + 0.52197449061 10.23620135269 + 0.53201246158 9.87128890675 + 0.54205043255 9.50702060528 + 0.55208840353 9.14389722258 + 0.56212637450 8.78241774652 + 0.57216434547 8.42307770669 + 0.58220231645 8.06636744707 + 0.59224028742 7.71277048996 + 0.60227825839 7.36276188103 + 0.61231622936 7.01680658801 + 0.62235420034 6.67535793585 + 0.63239217131 6.33885609712 + 0.64243014228 6.00772664263 + 0.65246811326 5.68237916107 + 0.66250608423 5.36320595332 + 0.67254405520 5.05058079585 + 0.68258202618 4.74485781861 + 0.69261999715 4.44637044675 + 0.70265796812 4.15543045249 + 0.71269593910 3.87232710690 + 0.72273391007 3.59732643449 + 0.73277188104 3.33067057037 + 0.74280985202 3.07257723847 + 0.75284782299 2.82323931830 + 0.76288579396 2.58282454108 + 0.77292376494 2.35147528133 + 0.78296173591 2.12930847292 + 0.79299970688 1.91641561961 + 0.80303767786 1.71286291040 + 0.81307564883 1.51869144973 + 0.82311361980 1.33391757791 + 0.83315159078 1.15853329008 + 0.84318956175 0.99250674734 + 0.85322753272 0.83578287533 + 0.86326550369 0.68828404478 + 0.87330347467 0.54991082977 + 0.88334144564 0.42054283676 + 0.89337941661 0.30003959876 + 0.90341738759 0.18824153020 + 0.91345535856 0.08497093319 + 0.92349332953 -0.00996694890 + 0.93353130051 -0.09678283782 + 0.94356927148 -0.17570229384 + 0.95360724245 -0.24696456226 + 0.96364521343 -0.31082139958 + 0.97368318440 -0.36753588614 + 0.98372115537 -0.41738123143 + 0.99375912635 -0.46063957847 + 1.00379709732 -0.49760081246 + 1.01383506829 -0.52856138118 + 1.02387303927 -0.55382313124 + 1.03391101024 -0.57369216588 + 1.04394898121 -0.58847772985 + 1.05398695219 -0.59849112566 + 1.06402492316 -0.60404466514 + 1.07406289413 -0.60545066149 + 1.08410086511 -0.60302046387 + 1.09413883608 -0.59706354111 + 1.10417680705 -0.58788660030 + 1.11421477802 -0.57579285285 + 1.12425274900 -0.56108036981 + 1.13429071997 -0.54404009480 + 1.14432869094 -0.52495412888 + 1.15436666192 -0.50409521048 + 1.16440463289 -0.48172607562 + 1.17444260386 -0.45809894126 + 1.18448057484 -0.43345507106 + 1.19451854581 -0.40802442679 + 1.20455651678 -0.38202539338 + 1.21459448776 -0.35566457454 + 1.22463245873 -0.32913665478 + 1.23467042970 -0.30262432034 + 1.24470840068 -0.27629823688 + 1.25474637165 -0.25031708069 + 1.26478434262 -0.22482761448 + 1.27482231360 -0.19996480779 + 1.28486028457 -0.17585199814 + 1.29489825554 -0.15260108548 + 1.30493622652 -0.13031275994 + 1.31497419749 -0.10907675951 + 1.32501216846 -0.08897215058 + 1.33505013943 -0.07006763304 + 1.34508811041 -0.05242186504 + 1.35512608138 -0.03608380282 + 1.36516405235 -0.02109305719 + 1.37520202333 -0.00748026077 + 1.38523999430 0.00473255531 + 1.39527796527 0.01553157500 + 1.40531593625 0.02491080764 + 1.41535390722 0.03287169233 + 1.42539187819 0.03942270005 + 1.43542984917 0.04457893616 + 1.44546782014 0.04836174087 + 1.45550579111 0.05079829403 + 1.46554376209 0.05192122060 + 1.47558173306 0.05176820083 + 1.48561970403 0.05038158533 + 1.49565767501 0.04780801460 + 1.50569564598 0.04409804653 + 1.51573361695 0.03930578875 + 1.52577158793 0.03348854039 + 1.53580955890 0.02679367405 + 1.54584752987 0.01909628557 + 1.55588550085 0.01008441770 + 1.56592347182 0.00098684329 + 1.57596144279 -0.00409514645 + 1.58599941376 0.00000000000 + 2 2 -4.0666956601999997 #kb l, n (seq), energy in Ry + 159 0.0100379709731946 1.5859994137647522 + 0.00000000000 -14.26435108865 + 0.01003797097 -14.25631117131 + 0.02007594195 -14.23220867617 + 0.03011391292 -14.19209664838 + 0.04015188389 -14.13606312024 + 0.05018985487 -14.06423102056 + 0.06022782584 -13.97675786059 + 0.07026579681 -13.87383529420 + 0.08030376779 -13.75568865029 + 0.09034173876 -13.62257632895 + 0.10037970973 -13.47478911644 + 0.11041768071 -13.31264944035 + 0.12045565168 -13.13651049728 + 0.13049362265 -12.94675532975 + 0.14053159362 -12.74379580477 + 0.15056956460 -12.52807151852 + 0.16060753557 -12.30004862966 + 0.17064550654 -12.06021858147 + 0.18068347752 -11.80909681199 + 0.19072144849 -11.54722133454 + 0.20075941946 -11.27515129232 + 0.21079739044 -10.99346543339 + 0.22083536141 -10.70276051335 + 0.23087333238 -10.40364968683 + 0.24091130336 -10.09676080070 + 0.25094927433 -9.78273467821 + 0.26098724530 -9.46222332360 + 0.27102521628 -9.13588814176 + 0.28106318725 -8.80439808443 + 0.29110115822 -8.46842780007 + 0.30113912920 -8.12865576443 + 0.31117710017 -7.78576238276 + 0.32121507114 -7.44042809776 + 0.33125304212 -7.09333151619 + 0.34129101309 -6.74514752287 + 0.35132898406 -6.39654541411 + 0.36136695504 -6.04818707239 + 0.37140492601 -5.70072514722 + 0.38144289698 -5.35480128704 + 0.39148086795 -5.01104442277 + 0.40151883893 -4.67006908348 + 0.41155680990 -4.33247378274 + 0.42159478087 -3.99883947080 + 0.43163275185 -3.66972804966 + 0.44167072282 -3.34568096845 + 0.45170869379 -3.02721790419 + 0.46174666477 -2.71483552707 + 0.47178463574 -2.40900635680 + 0.48182260671 -2.11017771897 + 0.49186057769 -1.81877080200 + 0.50189854866 -1.53517981609 + 0.51193651963 -1.25977126276 + 0.52197449061 -0.99288331140 + 0.53201246158 -0.73482528903 + 0.54205043255 -0.48587728154 + 0.55208840353 -0.24628984894 + 0.56212637450 -0.01628385396 + 0.57216434547 0.20394959721 + 0.58220231645 0.41424910246 + 0.59224028742 0.61448280159 + 0.60227825839 0.80454810743 + 0.61231622936 0.98437133285 + 0.62235420034 1.15390721509 + 0.63239217131 1.31313834699 + 0.64243014228 1.46207451369 + 0.65246811326 1.60075194170 + 0.66250608423 1.72923246997 + 0.67254405520 1.84760263883 + 0.68258202618 1.95597271658 + 0.69261999715 2.05447565510 + 0.70265796812 2.14326599626 + 0.71269593910 2.22251872070 + 0.72273391007 2.29242805995 + 0.73277188104 2.35320626921 + 0.74280985202 2.40508237141 + 0.75284782299 2.44830088092 + 0.76288579396 2.48312051099 + 0.77292376494 2.50981287295 + 0.78296173591 2.52866117418 + 0.79299970688 2.53995892751 + 0.80303767786 2.54400865787 + 0.81307564883 2.54112063951 + 0.82311361980 2.53161165590 + 0.83315159078 2.51580377850 + 0.84318956175 2.49402318709 + 0.85322753272 2.46659902515 + 0.86326550369 2.43386230328 + 0.87330347467 2.39614483523 + 0.88334144564 2.35377824258 + 0.89337941661 2.30709299049 + 0.90341738759 2.25641749342 + 0.91345535856 2.20207727583 + 0.92349332953 2.14439418037 + 0.93353130051 2.08368564500 + 0.94356927148 2.02026404064 + 0.95360724245 1.95443606065 + 0.96364521343 1.88650217574 + 0.97368318440 1.81675615253 + 0.98372115537 1.74548461932 + 0.99375912635 1.67296669963 + 1.00379709732 1.59947369601 + 1.01383506829 1.52526883331 + 1.02387303927 1.45060704910 + 1.03391101024 1.37573483581 + 1.04394898121 1.30089013520 + 1.05398695219 1.22630227254 + 1.06402492316 1.15219193934 + 1.07406289413 1.07877121135 + 1.08410086511 1.00624360561 + 1.09413883608 0.93480418222 + 1.10417680705 0.86463962974 + 1.11421477802 0.79592866490 + 1.12425274900 0.72883943510 + 1.13429071997 0.66352601507 + 1.14432869094 0.60012617565 + 1.15436666192 0.53876278838 + 1.16440463289 0.47954450920 + 1.17444260386 0.42256653077 + 1.18448057484 0.36791130270 + 1.19451854581 0.31564924215 + 1.20455651678 0.26583941062 + 1.21459448776 0.21853016192 + 1.22463245873 0.17375976201 + 1.23467042970 0.13155697873 + 1.24470840068 0.09194164276 + 1.25474637165 0.05492518056 + 1.26478434262 0.02051111909 + 1.27482231360 -0.01130443652 + 1.28486028457 -0.04053235164 + 1.29489825554 -0.06719003543 + 1.30493622652 -0.09130103797 + 1.31497419749 -0.11289467051 + 1.32501216846 -0.13200564563 + 1.33505013943 -0.14867373767 + 1.34508811041 -0.16294346154 + 1.35512608138 -0.17486376685 + 1.36516405235 -0.18448774841 + 1.37520202333 -0.19187236965 + 1.38523999430 -0.19707819771 + 1.39527796527 -0.20016915057 + 1.40531593625 -0.20121225188 + 1.41535390722 -0.20027739534 + 1.42539187819 -0.19743711560 + 1.43542984917 -0.19276636443 + 1.44546782014 -0.18634229357 + 1.45550579111 -0.17824403982 + 1.46554376209 -0.16855251515 + 1.47558173306 -0.15735019886 + 1.48561970403 -0.14472093231 + 1.49565767501 -0.13074971604 + 1.50569564598 -0.11552250811 + 1.51573361695 -0.09912602450 + 1.52577158793 -0.08164754096 + 1.53580955890 -0.06335907212 + 1.54584752987 -0.04395204437 + 1.55588550085 -0.02271794069 + 1.56592347182 -0.00220058699 + 1.57596144279 0.00898822108 + 1.58599941376 0.00000000000 +# Vna:_______________ + 863 0.01000987219 8.62850982566 # npts, delta, cutoff + 0.00000000000 -11.27569223570 + 0.01000987219 -11.27413826054 + 0.02001974438 -11.26947761573 + 0.03002961656 -11.26171424247 + 0.04003948875 -11.25085465502 + 0.05004936094 -11.23690787662 + 0.06005923313 -11.21988535039 + 0.07006910531 -11.19980082934 + 0.08007897750 -11.17667024955 + 0.09008884969 -11.15051159175 + 0.10009872188 -11.12134473535 + 0.11010859406 -11.08919130877 + 0.12011846625 -11.05407454286 + 0.13012833844 -11.01601912858 + 0.14013821063 -10.97505108470 + 0.15014808281 -10.93119763810 + 0.16015795500 -10.88448711930 + 0.17016782719 -10.83494887423 + 0.18017769938 -10.78261319599 + 0.19018757156 -10.72751127422 + 0.20019744375 -10.66967516446 + 0.21020731594 -10.60913777670 + 0.22021718813 -10.54593288218 + 0.23022706031 -10.48009513681 + 0.24023693250 -10.41166012132 + 0.25024680469 -10.34066439543 + 0.26025667688 -10.26714556439 + 0.27026654906 -10.19114235664 + 0.28027642125 -10.11269470994 + 0.29028629344 -10.03184386516 + 0.30029616563 -9.94863246429 + 0.31030603781 -9.86310465167 + 0.32031591000 -9.77530617626 + 0.33032578219 -9.68528449322 + 0.34033565438 -9.59308886191 + 0.35034552656 -9.49877043952 + 0.36035539875 -9.40238236839 + 0.37036527094 -9.30397985439 + 0.38037514313 -9.20362023570 + 0.39038501531 -9.10136303982 + 0.40039488750 -8.99727002814 + 0.41040475969 -8.89140522648 + 0.42041463188 -8.78383494084 + 0.43042450406 -8.67462775822 + 0.44043437625 -8.56385453099 + 0.45044424844 -8.45158834716 + 0.46045412063 -8.33790448393 + 0.47046399281 -8.22288034831 + 0.48047386500 -8.10659540254 + 0.49048373719 -7.98913107877 + 0.50049360938 -7.87057068143 + 0.51050348156 -7.75099928054 + 0.52051335375 -7.63050359749 + 0.53052322594 -7.50917188332 + 0.54053309813 -7.38709379231 + 0.55054297031 -7.26436025211 + 0.56055284250 -7.14106332998 + 0.57056271469 -7.01729609780 + 0.58057258688 -6.89315249453 + 0.59058245907 -6.76872718772 + 0.60059233125 -6.64411543276 + 0.61060220344 -6.51941293079 + 0.62061207563 -6.39471568292 + 0.63062194782 -6.27011984230 + 0.64063182000 -6.14572156094 + 0.65064169219 -6.02161683267 + 0.66065156438 -5.89790133019 + 0.67066143657 -5.77467023663 + 0.68067130875 -5.65201807019 + 0.69068118094 -5.53003850407 + 0.70069105313 -5.40882417906 + 0.71070092532 -5.28846651251 + 0.72071079750 -5.16905550173 + 0.73072066969 -5.05067952502 + 0.74073054188 -4.93342514074 + 0.75074041407 -4.81737688510 + 0.76075028625 -4.70261707200 + 0.77076015844 -4.58922559413 + 0.78077003063 -4.47727972893 + 0.79077990282 -4.36685394806 + 0.80078977500 -4.25801973420 + 0.81079964719 -4.15084540369 + 0.82080951938 -4.04539593701 + 0.83081939157 -3.94173281690 + 0.84082926375 -3.83991387471 + 0.85083913594 -3.73999314466 + 0.86084900813 -3.64202072571 + 0.87085888032 -3.54604265202 + 0.88086875250 -3.45210077005 + 0.89087862469 -3.36023262301 + 0.90088849688 -3.27047134220 + 0.91089836907 -3.18284554494 + 0.92090824125 -3.09737923889 + 0.93091811344 -3.01409173227 + 0.94092798563 -2.93299755047 + 0.95093785782 -2.85410635903 + 0.96094773000 -2.77742289253 + 0.97095760219 -2.70294689004 + 0.98096747438 -2.63067303716 + 0.99097734657 -2.56059091479 + 1.00098721875 -2.49268495405 + 1.01099709094 -2.42693439814 + 1.02100696313 -2.36331327030 + 1.03101683532 -2.30179034715 + 1.04102670750 -2.24232913752 + 1.05103657969 -2.18488786430 + 1.06104645188 -2.12941944917 + 1.07105632407 -2.07587149814 + 1.08106619625 -2.02418628536 + 1.09107606844 -1.97430074121 + 1.10108594063 -1.92614643163 + 1.11109581282 -1.87964933064 + 1.12110568501 -1.83473124526 + 1.13111555719 -1.79131416033 + 1.14112542938 -1.74932366721 + 1.15113530157 -1.70868939619 + 1.16114517376 -1.66934450746 + 1.17115504594 -1.63122608859 + 1.18116491813 -1.59427277870 + 1.19117479032 -1.55842862333 + 1.20118466251 -1.52364952611 + 1.21119453469 -1.48993648565 + 1.22120440688 -1.45726815607 + 1.23121427907 -1.42556820357 + 1.24122415126 -1.39475827510 + 1.25123402344 -1.36478961506 + 1.26124389563 -1.33564420914 + 1.27125376782 -1.30726614278 + 1.28126364001 -1.27961912733 + 1.29127351219 -1.25269182297 + 1.30128338438 -1.22646839816 + 1.31129325657 -1.20092481879 + 1.32130312876 -1.17602640325 + 1.33131300094 -1.15175011875 + 1.34132287313 -1.12807476582 + 1.35133274532 -1.10497766095 + 1.36134261751 -1.08243799407 + 1.37135248969 -1.06043593623 + 1.38136236188 -1.03895250029 + 1.39137223407 -1.01796954531 + 1.40138210626 -0.99746972554 + 1.41139197844 -0.97743645654 + 1.42140185063 -0.95785388931 + 1.43141172282 -0.93870689299 + 1.44142159501 -0.91998104277 + 1.45143146719 -0.90166261011 + 1.46144133938 -0.88373855767 + 1.47145121157 -0.86619653071 + 1.48146108376 -0.84902485118 + 1.49147095594 -0.83221250631 + 1.50148082813 -0.81574904631 + 1.51149070032 -0.79962499733 + 1.52150057251 -0.78383283761 + 1.53151044469 -0.76835787660 + 1.54152031688 -0.75318928482 + 1.55153018907 -0.73832657714 + 1.56154006126 -0.72381286137 + 1.57154993344 -0.70981499298 + 1.58155980563 -0.69643100335 + 1.59156967782 -0.68354701363 + 1.60157955001 -0.67102062285 + 1.61158942219 -0.65872725409 + 1.62159929438 -0.64662429826 + 1.63160916657 -0.63478850685 + 1.64161903876 -0.62324204690 + 1.65162891094 -0.61194593037 + 1.66163878313 -0.60088818735 + 1.67164865532 -0.59006808275 + 1.68165852751 -0.57947889184 + 1.69166839970 -0.56911344819 + 1.70167827188 -0.55896540885 + 1.71168814407 -0.54902869028 + 1.72169801626 -0.53929743194 + 1.73170788845 -0.52976601064 + 1.74171776063 -0.52042903631 + 1.75172763282 -0.51128134610 + 1.76173750501 -0.50231799774 + 1.77174737720 -0.49353426188 + 1.78175724938 -0.48492561302 + 1.79176712157 -0.47648771986 + 1.80177699376 -0.46821643445 + 1.81178686595 -0.46010778061 + 1.82179673813 -0.45215794203 + 1.83180661032 -0.44436324906 + 1.84181648251 -0.43672016700 + 1.85182635470 -0.42922528201 + 1.86183622688 -0.42187529048 + 1.87184609907 -0.41466698536 + 1.88185597126 -0.40759724683 + 1.89186584345 -0.40066303094 + 1.90187571563 -0.39386136136 + 1.91188558782 -0.38718932164 + 1.92189546001 -0.38064404873 + 1.93190533220 -0.37422272840 + 1.94191520438 -0.36792259173 + 1.95192507657 -0.36174091271 + 1.96193494876 -0.35567500825 + 1.97194482095 -0.34972223756 + 1.98195469313 -0.34388000449 + 1.99196456532 -0.33814575944 + 2.00197443751 -0.33251700179 + 2.01198430970 -0.32699128474 + 2.02199418188 -0.32156621680 + 2.03200405407 -0.31623946768 + 2.04201392626 -0.31100877062 + 2.05202379845 -0.30587192490 + 2.06203367063 -0.30082679845 + 2.07204354282 -0.29587132110 + 2.08205341501 -0.29100353513 + 2.09206328720 -0.28622152350 + 2.10207315938 -0.28152347235 + 2.11208303157 -0.27690765837 + 2.12209290376 -0.27237268132 + 2.13210277595 -0.26791550944 + 2.14211264813 -0.26353257095 + 2.15212252032 -0.25922229990 + 2.16213239251 -0.25498635169 + 2.17214226470 -0.25082854989 + 2.18215213688 -0.24674649315 + 2.19216200907 -0.24273663436 + 2.20217188126 -0.23879506340 + 2.21218175345 -0.23492084460 + 2.22219162564 -0.23111317105 + 2.23220149782 -0.22737076237 + 2.24221137001 -0.22369227112 + 2.25222124220 -0.22007652844 + 2.26223111439 -0.21652235184 + 2.27224098657 -0.21302854881 + 2.28225085876 -0.20959394381 + 2.29226073095 -0.20621743713 + 2.30227060314 -0.20289793922 + 2.31228047532 -0.19963438309 + 2.32229034751 -0.19642572460 + 2.33230021970 -0.19327094361 + 2.34231009189 -0.19016904260 + 2.35231996407 -0.18711904601 + 2.36232983626 -0.18411999965 + 2.37233970845 -0.18117097014 + 2.38234958064 -0.17827104431 + 2.39235945282 -0.17541932863 + 2.40236932501 -0.17261494869 + 2.41237919720 -0.16985704867 + 2.42238906939 -0.16714479091 + 2.43239894157 -0.16447735538 + 2.44240881376 -0.16185393928 + 2.45241868595 -0.15927375648 + 2.46242855814 -0.15673603715 + 2.47243843032 -0.15424002732 + 2.48244830251 -0.15178498849 + 2.49245817470 -0.14937019727 + 2.50246804689 -0.14699494495 + 2.51247791907 -0.14465853715 + 2.52248779126 -0.14236029346 + 2.53249766345 -0.14009954710 + 2.54250753564 -0.13787564457 + 2.55251740782 -0.13568794536 + 2.56252728001 -0.13353582157 + 2.57253715220 -0.13141865770 + 2.58254702439 -0.12933585026 + 2.59255689657 -0.12728680754 + 2.60256676876 -0.12527094932 + 2.61257664095 -0.12328770658 + 2.62258651314 -0.12133652129 + 2.63259638532 -0.11941684611 + 2.64260625751 -0.11752814416 + 2.65261612970 -0.11566988876 + 2.66262600189 -0.11384156323 + 2.67263587407 -0.11204266065 + 2.68264574626 -0.11027268363 + 2.69265561845 -0.10853114410 + 2.70266549064 -0.10681756313 + 2.71267536282 -0.10513147071 + 2.72268523501 -0.10347240554 + 2.73269510720 -0.10183991485 + 2.74270497939 -0.10023355424 + 2.75271485157 -0.09865288743 + 2.76272472376 -0.09709748618 + 2.77273459595 -0.09556693004 + 2.78274446814 -0.09406080625 + 2.79275434033 -0.09257870950 + 2.80276421251 -0.09112024180 + 2.81277408470 -0.08968501233 + 2.82278395689 -0.08827263727 + 2.83279382908 -0.08688273967 + 2.84280370126 -0.08551494925 + 2.85281357345 -0.08416890234 + 2.86282344564 -0.08284424170 + 2.87283331783 -0.08154061646 + 2.88284319001 -0.08025768190 + 2.89285306220 -0.07899509938 + 2.90286293439 -0.07775253618 + 2.91287280658 -0.07652966544 + 2.92288267876 -0.07532616596 + 2.93289255095 -0.07414172218 + 2.94290242314 -0.07297602404 + 2.95291229533 -0.07182876683 + 2.96292216751 -0.07069965117 + 2.97293203970 -0.06958838280 + 2.98294191189 -0.06849467259 + 2.99295178408 -0.06741823635 + 3.00296165626 -0.06635879481 + 3.01297152845 -0.06531607346 + 3.02298140064 -0.06428980250 + 3.03299127283 -0.06327971675 + 3.04300114501 -0.06228555556 + 3.05301101720 -0.06130706273 + 3.06302088939 -0.06034398642 + 3.07303076158 -0.05939607907 + 3.08304063376 -0.05846309731 + 3.09305050595 -0.05754480190 + 3.10306037814 -0.05664095762 + 3.11307025033 -0.05575133326 + 3.12308012251 -0.05487570154 + 3.13308999470 -0.05401383895 + 3.14309986689 -0.05316552578 + 3.15310973908 -0.05233054592 + 3.16311961126 -0.05150868685 + 3.17312948345 -0.05069973961 + 3.18313935564 -0.04990349864 + 3.19314922783 -0.04911976175 + 3.20315910001 -0.04834833007 + 3.21316897220 -0.04758900794 + 3.22317884439 -0.04684160298 + 3.23318871658 -0.04610592592 + 3.24319858876 -0.04538179060 + 3.25320846095 -0.04466901390 + 3.26321833314 -0.04396741567 + 3.27322820533 -0.04327681871 + 3.28323807751 -0.04259704870 + 3.29324794970 -0.04192793414 + 3.30325782189 -0.04126930634 + 3.31326769408 -0.04062099936 + 3.32327756627 -0.03998284992 + 3.33328743845 -0.03935469743 + 3.34329731064 -0.03873638385 + 3.35330718283 -0.03812775370 + 3.36331705502 -0.03752865404 + 3.37332692720 -0.03693893435 + 3.38333679939 -0.03635844660 + 3.39334667158 -0.03578704510 + 3.40335654377 -0.03522458653 + 3.41336641595 -0.03467092990 + 3.42337628814 -0.03412593645 + 3.43338616033 -0.03358946967 + 3.44339603252 -0.03306139524 + 3.45340590470 -0.03254158100 + 3.46341577689 -0.03202989691 + 3.47342564908 -0.03152621498 + 3.48343552127 -0.03103040931 + 3.49344539345 -0.03054235597 + 3.50345526564 -0.03006193306 + 3.51346513783 -0.02958902061 + 3.52347501002 -0.02912350058 + 3.53348488220 -0.02866525681 + 3.54349475439 -0.02821417499 + 3.55350462658 -0.02777014263 + 3.56351449877 -0.02733304905 + 3.57352437095 -0.02690278530 + 3.58353424314 -0.02647924419 + 3.59354411533 -0.02606232022 + 3.60355398752 -0.02565190958 + 3.61356385970 -0.02524791010 + 3.62357373189 -0.02485022123 + 3.63358360408 -0.02445874404 + 3.64359347627 -0.02407338116 + 3.65360334845 -0.02369403675 + 3.66361322064 -0.02332061654 + 3.67362309283 -0.02295302771 + 3.68363296502 -0.02259117890 + 3.69364283720 -0.02223498023 + 3.70365270939 -0.02188434320 + 3.71366258158 -0.02153918075 + 3.72367245377 -0.02119940718 + 3.73368232595 -0.02086493816 + 3.74369219814 -0.02053569069 + 3.75370207033 -0.02021158310 + 3.76371194252 -0.01989253496 + 3.77372181470 -0.01957846715 + 3.78373168689 -0.01926930177 + 3.79374155908 -0.01896496216 + 3.80375143127 -0.01866537287 + 3.81376130345 -0.01837045964 + 3.82377117564 -0.01808014938 + 3.83378104783 -0.01779437018 + 3.84379092002 -0.01751305123 + 3.85380079220 -0.01723612284 + 3.86381066439 -0.01696351642 + 3.87382053658 -0.01669516445 + 3.88383040877 -0.01643100048 + 3.89384028096 -0.01617095910 + 3.90385015314 -0.01591497594 + 3.91386002533 -0.01566298764 + 3.92386989752 -0.01541493183 + 3.93387976971 -0.01517074713 + 3.94388964189 -0.01493037311 + 3.95389951408 -0.01469375030 + 3.96390938627 -0.01446082015 + 3.97391925846 -0.01423152505 + 3.98392913064 -0.01400580824 + 3.99393900283 -0.01378361393 + 4.00394887502 -0.01356488715 + 4.01395874721 -0.01334957382 + 4.02396861939 -0.01313762070 + 4.03397849158 -0.01292897538 + 4.04398836377 -0.01272358628 + 4.05399823596 -0.01252140261 + 4.06400810814 -0.01232237439 + 4.07401798033 -0.01212645241 + 4.08402785252 -0.01193358824 + 4.09403772471 -0.01174373421 + 4.10404759689 -0.01155684339 + 4.11405746908 -0.01137286960 + 4.12406734127 -0.01119176737 + 4.13407721346 -0.01101349195 + 4.14408708564 -0.01083799927 + 4.15409695783 -0.01066524597 + 4.16410683002 -0.01049518937 + 4.17411670221 -0.01032778743 + 4.18412657439 -0.01016299880 + 4.19413644658 -0.01000078274 + 4.20414631877 -0.00984109919 + 4.21415619096 -0.00968390868 + 4.22416606314 -0.00952917238 + 4.23417593533 -0.00937685205 + 4.24418580752 -0.00922691005 + 4.25419567971 -0.00907930935 + 4.26420555189 -0.00893401348 + 4.27421542408 -0.00879098654 + 4.28422529627 -0.00865019321 + 4.29423516846 -0.00851159868 + 4.30424504064 -0.00837516872 + 4.31425491283 -0.00824086962 + 4.32426478502 -0.00810866819 + 4.33427465721 -0.00797853177 + 4.34428452939 -0.00785042820 + 4.35429440158 -0.00772432584 + 4.36430427377 -0.00760019353 + 4.37431414596 -0.00747800060 + 4.38432401814 -0.00735771685 + 4.39433389033 -0.00723931257 + 4.40434376252 -0.00712275850 + 4.41435363471 -0.00700802584 + 4.42436350689 -0.00689508623 + 4.43437337908 -0.00678391177 + 4.44438325127 -0.00667447498 + 4.45439312346 -0.00656674882 + 4.46440299565 -0.00646070667 + 4.47441286783 -0.00635632233 + 4.48442274002 -0.00625356999 + 4.49443261221 -0.00615242427 + 4.50444248440 -0.00605286015 + 4.51445235658 -0.00595485305 + 4.52446222877 -0.00585837871 + 4.53447210096 -0.00576341331 + 4.54448197315 -0.00566993336 + 4.55449184533 -0.00557791575 + 4.56450171752 -0.00548733774 + 4.57451158971 -0.00539817695 + 4.58452146190 -0.00531041133 + 4.59453133408 -0.00522401920 + 4.60454120627 -0.00513897919 + 4.61455107846 -0.00505527027 + 4.62456095065 -0.00497287175 + 4.63457082283 -0.00489176326 + 4.64458069502 -0.00481192473 + 4.65459056721 -0.00473333641 + 4.66460043940 -0.00465597890 + 4.67461031158 -0.00457983304 + 4.68462018377 -0.00450488003 + 4.69463005596 -0.00443110132 + 4.70463992815 -0.00435847867 + 4.71464980033 -0.00428699413 + 4.72465967252 -0.00421663002 + 4.73466954471 -0.00414736893 + 4.74467941690 -0.00407919373 + 4.75468928908 -0.00401208756 + 4.76469916127 -0.00394603381 + 4.77470903346 -0.00388101617 + 4.78471890565 -0.00381701854 + 4.79472877783 -0.00375402510 + 4.80473865002 -0.00369202028 + 4.81474852221 -0.00363098874 + 4.82475839440 -0.00357091539 + 4.83476826658 -0.00351178538 + 4.84477813877 -0.00345358407 + 4.85478801096 -0.00339629708 + 4.86479788315 -0.00333991024 + 4.87480775533 -0.00328440960 + 4.88481762752 -0.00322978144 + 4.89482749971 -0.00317601224 + 4.90483737190 -0.00312308871 + 4.91484724408 -0.00307099777 + 4.92485711627 -0.00301972653 + 4.93486698846 -0.00296926230 + 4.94487686065 -0.00291959262 + 4.95488673283 -0.00287070520 + 4.96489660502 -0.00282258797 + 4.97490647721 -0.00277522903 + 4.98491634940 -0.00272861669 + 4.99492622159 -0.00268273941 + 5.00493609377 -0.00263758588 + 5.01494596596 -0.00259314492 + 5.02495583815 -0.00254940555 + 5.03496571034 -0.00250635697 + 5.04497558252 -0.00246398853 + 5.05498545471 -0.00242228978 + 5.06499532690 -0.00238125040 + 5.07500519909 -0.00234086027 + 5.08501507127 -0.00230110941 + 5.09502494346 -0.00226198801 + 5.10503481565 -0.00222348642 + 5.11504468784 -0.00218559512 + 5.12505456002 -0.00214830477 + 5.13506443221 -0.00211160617 + 5.14507430440 -0.00207549027 + 5.15508417659 -0.00203994816 + 5.16509404877 -0.00200497109 + 5.17510392096 -0.00197055041 + 5.18511379315 -0.00193667765 + 5.19512366534 -0.00190334447 + 5.20513353752 -0.00187054266 + 5.21514340971 -0.00183826414 + 5.22515328190 -0.00180650095 + 5.23516315409 -0.00177524529 + 5.24517302627 -0.00174448942 + 5.25518289846 -0.00171422578 + 5.26519277065 -0.00168444689 + 5.27520264284 -0.00165514540 + 5.28521251502 -0.00162631405 + 5.29522238721 -0.00159794573 + 5.30523225940 -0.00157003342 + 5.31524213159 -0.00154257017 + 5.32525200377 -0.00151554916 + 5.33526187596 -0.00148896364 + 5.34527174815 -0.00146280701 + 5.35528162034 -0.00143707271 + 5.36529149252 -0.00141175428 + 5.37530136471 -0.00138684542 + 5.38531123690 -0.00136233987 + 5.39532110909 -0.00133823149 + 5.40533098127 -0.00131451423 + 5.41534085346 -0.00129118210 + 5.42535072565 -0.00126822924 + 5.43536059784 -0.00124564985 + 5.44537047002 -0.00122343821 + 5.45538034221 -0.00120158871 + 5.46539021440 -0.00118009579 + 5.47540008659 -0.00115895401 + 5.48540995877 -0.00113815797 + 5.49541983096 -0.00111770236 + 5.50542970315 -0.00109758199 + 5.51543957534 -0.00107779170 + 5.52544944752 -0.00105832643 + 5.53545931971 -0.00103918119 + 5.54546919190 -0.00102035107 + 5.55547906409 -0.00100183122 + 5.56548893628 -0.00098361689 + 5.57549880846 -0.00096570336 + 5.58550868065 -0.00094808600 + 5.59551855284 -0.00093076025 + 5.60552842503 -0.00091372161 + 5.61553829721 -0.00089696566 + 5.62554816940 -0.00088048803 + 5.63555804159 -0.00086428442 + 5.64556791378 -0.00084835060 + 5.65557778596 -0.00083268239 + 5.66558765815 -0.00081727570 + 5.67559753034 -0.00080212648 + 5.68560740253 -0.00078723073 + 5.69561727471 -0.00077258453 + 5.70562714690 -0.00075818401 + 5.71563701909 -0.00074402536 + 5.72564689128 -0.00073010483 + 5.73565676346 -0.00071641870 + 5.74566663565 -0.00070296334 + 5.75567650784 -0.00068973515 + 5.76568638003 -0.00067673060 + 5.77569625221 -0.00066394621 + 5.78570612440 -0.00065137853 + 5.79571599659 -0.00063902420 + 5.80572586878 -0.00062687987 + 5.81573574096 -0.00061494228 + 5.82574561315 -0.00060320819 + 5.83575548534 -0.00059167441 + 5.84576535753 -0.00058033781 + 5.85577522971 -0.00056919530 + 5.86578510190 -0.00055824384 + 5.87579497409 -0.00054748042 + 5.88580484628 -0.00053690210 + 5.89581471846 -0.00052650596 + 5.90582459065 -0.00051628913 + 5.91583446284 -0.00050624880 + 5.92584433503 -0.00049638219 + 5.93585420721 -0.00048668654 + 5.94586407940 -0.00047715917 + 5.95587395159 -0.00046779741 + 5.96588382378 -0.00045859865 + 5.97589369596 -0.00044956031 + 5.98590356815 -0.00044067984 + 5.99591344034 -0.00043195475 + 6.00592331253 -0.00042338256 + 6.01593318471 -0.00041496085 + 6.02594305690 -0.00040668723 + 6.03595292909 -0.00039855934 + 6.04596280128 -0.00039057486 + 6.05597267346 -0.00038273151 + 6.06598254565 -0.00037502702 + 6.07599241784 -0.00036745919 + 6.08600229003 -0.00036002583 + 6.09601216222 -0.00035272479 + 6.10602203440 -0.00034555394 + 6.11603190659 -0.00033851121 + 6.12604177878 -0.00033159452 + 6.13605165097 -0.00032480187 + 6.14606152315 -0.00031813125 + 6.15607139534 -0.00031158069 + 6.16608126753 -0.00030514827 + 6.17609113972 -0.00029883207 + 6.18610101190 -0.00029263021 + 6.19611088409 -0.00028654085 + 6.20612075628 -0.00028056217 + 6.21613062847 -0.00027469236 + 6.22614050065 -0.00026892967 + 6.23615037284 -0.00026327235 + 6.24616024503 -0.00025771868 + 6.25617011722 -0.00025226699 + 6.26617998940 -0.00024691561 + 6.27618986159 -0.00024166289 + 6.28619973378 -0.00023650723 + 6.29620960597 -0.00023144704 + 6.30621947815 -0.00022648074 + 6.31622935034 -0.00022160681 + 6.32623922253 -0.00021682372 + 6.33624909472 -0.00021212997 + 6.34625896690 -0.00020752409 + 6.35626883909 -0.00020300464 + 6.36627871128 -0.00019857019 + 6.37628858347 -0.00019421932 + 6.38629845565 -0.00018995066 + 6.39630832784 -0.00018576284 + 6.40631820003 -0.00018165452 + 6.41632807222 -0.00017762437 + 6.42633794440 -0.00017367110 + 6.43634781659 -0.00016979342 + 6.44635768878 -0.00016599006 + 6.45636756097 -0.00016225979 + 6.46637743315 -0.00015860137 + 6.47638730534 -0.00015501360 + 6.48639717753 -0.00015149530 + 6.49640704972 -0.00014804528 + 6.50641692190 -0.00014466241 + 6.51642679409 -0.00014134554 + 6.52643666628 -0.00013809356 + 6.53644653847 -0.00013490536 + 6.54645641065 -0.00013177987 + 6.55646628284 -0.00012871601 + 6.56647615503 -0.00012571275 + 6.57648602722 -0.00012276903 + 6.58649589940 -0.00011988385 + 6.59650577159 -0.00011705620 + 6.60651564378 -0.00011428510 + 6.61652551597 -0.00011156957 + 6.62653538815 -0.00010890866 + 6.63654526034 -0.00010630142 + 6.64655513253 -0.00010374693 + 6.65656500472 -0.00010124427 + 6.66657487691 -0.00009879255 + 6.67658474909 -0.00009639087 + 6.68659462128 -0.00009403837 + 6.69660449347 -0.00009173419 + 6.70661436566 -0.00008947748 + 6.71662423784 -0.00008726741 + 6.72663411003 -0.00008510316 + 6.73664398222 -0.00008298392 + 6.74665385441 -0.00008090890 + 6.75666372659 -0.00007887731 + 6.76667359878 -0.00007688839 + 6.77668347097 -0.00007494139 + 6.78669334316 -0.00007303554 + 6.79670321534 -0.00007117013 + 6.80671308753 -0.00006934442 + 6.81672295972 -0.00006755770 + 6.82673283191 -0.00006580928 + 6.83674270409 -0.00006409846 + 6.84675257628 -0.00006242458 + 6.85676244847 -0.00006078695 + 6.86677232066 -0.00005918492 + 6.87678219284 -0.00005761784 + 6.88679206503 -0.00005608508 + 6.89680193722 -0.00005458601 + 6.90681180941 -0.00005312002 + 6.91682168159 -0.00005168649 + 6.92683155378 -0.00005028483 + 6.93684142597 -0.00004891445 + 6.94685129816 -0.00004757477 + 6.95686117034 -0.00004626523 + 6.96687104253 -0.00004498526 + 6.97688091472 -0.00004373431 + 6.98689078691 -0.00004251184 + 6.99690065909 -0.00004131732 + 7.00691053128 -0.00004015021 + 7.01692040347 -0.00003901000 + 7.02693027566 -0.00003789617 + 7.03694014784 -0.00003680824 + 7.04695002003 -0.00003574570 + 7.05695989222 -0.00003470806 + 7.06696976441 -0.00003369485 + 7.07697963659 -0.00003270560 + 7.08698950878 -0.00003173985 + 7.09699938097 -0.00003079714 + 7.10700925316 -0.00002987703 + 7.11701912534 -0.00002897907 + 7.12702899753 -0.00002810284 + 7.13703886972 -0.00002724790 + 7.14704874191 -0.00002641384 + 7.15705861409 -0.00002560024 + 7.16706848628 -0.00002480670 + 7.17707835847 -0.00002403283 + 7.18708823066 -0.00002327822 + 7.19709810285 -0.00002254249 + 7.20710797503 -0.00002182526 + 7.21711784722 -0.00002112617 + 7.22712771941 -0.00002044484 + 7.23713759160 -0.00001978091 + 7.24714746378 -0.00001913402 + 7.25715733597 -0.00001850383 + 7.26716720816 -0.00001788999 + 7.27717708035 -0.00001729216 + 7.28718695253 -0.00001671001 + 7.29719682472 -0.00001614322 + 7.30720669691 -0.00001559146 + 7.31721656910 -0.00001505441 + 7.32722644128 -0.00001453177 + 7.33723631347 -0.00001402322 + 7.34724618566 -0.00001352848 + 7.35725605785 -0.00001304724 + 7.36726593003 -0.00001257921 + 7.37727580222 -0.00001212411 + 7.38728567441 -0.00001168166 + 7.39729554660 -0.00001125158 + 7.40730541878 -0.00001083360 + 7.41731529097 -0.00001042746 + 7.42732516316 -0.00001003289 + 7.43733503535 -0.00000964964 + 7.44734490753 -0.00000927745 + 7.45735477972 -0.00000891607 + 7.46736465191 -0.00000856526 + 7.47737452410 -0.00000822479 + 7.48738439628 -0.00000789440 + 7.49739426847 -0.00000757388 + 7.50740414066 -0.00000726298 + 7.51741401285 -0.00000696150 + 7.52742388503 -0.00000666921 + 7.53743375722 -0.00000638589 + 7.54744362941 -0.00000611134 + 7.55745350160 -0.00000584534 + 7.56746337378 -0.00000558768 + 7.57747324597 -0.00000533818 + 7.58748311816 -0.00000509662 + 7.59749299035 -0.00000486282 + 7.60750286253 -0.00000463659 + 7.61751273472 -0.00000441774 + 7.62752260691 -0.00000420608 + 7.63753247910 -0.00000400145 + 7.64754235128 -0.00000380365 + 7.65755222347 -0.00000361252 + 7.66756209566 -0.00000342789 + 7.67757196785 -0.00000324959 + 7.68758184003 -0.00000307745 + 7.69759171222 -0.00000291132 + 7.70760158441 -0.00000275104 + 7.71761145660 -0.00000259645 + 7.72762132878 -0.00000244740 + 7.73763120097 -0.00000230373 + 7.74764107316 -0.00000216532 + 7.75765094535 -0.00000203200 + 7.76766081754 -0.00000190364 + 7.77767068972 -0.00000178010 + 7.78768056191 -0.00000166124 + 7.79769043410 -0.00000154694 + 7.80770030629 -0.00000143707 + 7.81771017847 -0.00000133149 + 7.82772005066 -0.00000123008 + 7.83772992285 -0.00000113273 + 7.84773979504 -0.00000103930 + 7.85774966722 -0.00000094969 + 7.86775953941 -0.00000086378 + 7.87776941160 -0.00000078146 + 7.88777928379 -0.00000070261 + 7.89778915597 -0.00000062713 + 7.90779902816 -0.00000055491 + 7.91780890035 -0.00000048585 + 7.92781877254 -0.00000041985 + 7.93782864472 -0.00000035681 + 7.94783851691 -0.00000029663 + 7.95784838910 -0.00000023921 + 7.96785826129 -0.00000018447 + 7.97786813347 -0.00000013231 + 7.98787800566 -0.00000008265 + 7.99788787785 -0.00000003539 + 8.00789775004 0.00000000955 + 8.01790762222 0.00000005224 + 8.02791749441 0.00000009278 + 8.03792736660 0.00000013124 + 8.04793723879 0.00000016770 + 8.05794711097 0.00000020223 + 8.06795698316 0.00000023491 + 8.07796685535 0.00000026580 + 8.08797672754 0.00000029499 + 8.09798659972 0.00000032253 + 8.10799647191 0.00000034849 + 8.11800634410 0.00000037294 + 8.12801621629 0.00000039595 + 8.13802608847 0.00000041756 + 8.14803596066 0.00000043785 + 8.15804583285 0.00000045687 + 8.16805570504 0.00000047467 + 8.17806557722 0.00000049132 + 8.18807544941 0.00000050686 + 8.19808532160 0.00000052135 + 8.20809519379 0.00000053484 + 8.21810506597 0.00000054737 + 8.22811493816 0.00000055900 + 8.23812481035 0.00000056977 + 8.24813468254 0.00000057972 + 8.25814455472 0.00000058891 + 8.26815442691 0.00000059736 + 8.27816429910 0.00000060512 + 8.28817417129 0.00000061224 + 8.29818404347 0.00000061874 + 8.30819391566 0.00000062466 + 8.31820378785 0.00000063004 + 8.32821366004 0.00000063492 + 8.33822353223 0.00000063932 + 8.34823340441 0.00000064327 + 8.35824327660 0.00000064682 + 8.36825314879 0.00000064998 + 8.37826302098 0.00000065278 + 8.38827289316 0.00000065526 + 8.39828276535 0.00000065743 + 8.40829263754 0.00000065932 + 8.41830250973 0.00000066096 + 8.42831238191 0.00000066237 + 8.43832225410 0.00000066356 + 8.44833212629 0.00000066456 + 8.45834199848 0.00000066539 + 8.46835187066 0.00000066606 + 8.47836174285 0.00000066659 + 8.48837161504 0.00000066700 + 8.49838148723 0.00000066729 + 8.50839135941 0.00000066749 + 8.51840123160 0.00000066760 + 8.52841110379 0.00000066763 + 8.53842097598 0.00000066760 + 8.54843084816 0.00000066751 + 8.55844072035 0.00000066738 + 8.56845059254 0.00000066720 + 8.57846046473 0.00000066699 + 8.58847033691 0.00000066675 + 8.59848020910 0.00000066648 + 8.60849008129 0.00000066619 + 8.61849995348 0.00000066588 + 8.62850982566 0.00000000000 +# Vlocal:_______________________ + 863 0.01000987219 8.62850982566 # npts, delta, cutoff + 0.00000000000 -29.69025740177 + 0.01000987219 -29.68853564378 + 0.02001974438 -29.68337015679 + 0.03002961656 -29.67476040721 + 0.04003948875 -29.66270547082 + 0.05004936094 -29.64720399783 + 0.06005923313 -29.62825416452 + 0.07006910531 -29.60585361552 + 0.08007897750 -29.57999940051 + 0.09008884969 -29.55068791066 + 0.10009872188 -29.51791481837 + 0.11010859406 -29.48167502428 + 0.12011846625 -29.44196261778 + 0.13012833844 -29.39877085211 + 0.14013821063 -29.35209213939 + 0.15014808281 -29.30191806774 + 0.16015795500 -29.24823944299 + 0.17016782719 -29.19104635506 + 0.18017769938 -29.13032827273 + 0.19018757156 -29.06607416368 + 0.20019744375 -28.99827264152 + 0.21020731594 -28.92691213853 + 0.22021718813 -28.85198110251 + 0.23022706031 -28.77346821521 + 0.24023693250 -28.69136263189 + 0.25024680469 -28.60565423845 + 0.26025667688 -28.51633392360 + 0.27026654906 -28.42339386395 + 0.28027642125 -28.32682781862 + 0.29028629344 -28.22663143138 + 0.30029616563 -28.12280253623 + 0.31030603781 -28.01534146423 + 0.32031591000 -27.90425134850 + 0.33032578219 -27.78953842476 + 0.34033565438 -27.67121232343 + 0.35034552656 -27.54928635162 + 0.36035539875 -27.42377776208 + 0.37036527094 -27.29470800556 + 0.38037514313 -27.16210296502 + 0.39038501531 -27.02599316868 + 0.40039488750 -26.88641398035 + 0.41040475969 -26.74340576488 + 0.42041463188 -26.59701402690 + 0.43042450406 -26.44728952249 + 0.44043437625 -26.29428834134 + 0.45044424844 -26.13807196142 + 0.46045412063 -25.97870727306 + 0.47046399281 -25.81626657592 + 0.48047386500 -25.65082754625 + 0.49048373719 -25.48247317880 + 0.50049360938 -25.31129170172 + 0.51050348156 -25.13737646766 + 0.52051335375 -24.96082582274 + 0.53052322594 -24.78174295364 + 0.54053309813 -24.60023571588 + 0.55054297031 -24.41641644478 + 0.56055284250 -24.23040174933 + 0.57056271469 -24.04231229199 + 0.58057258688 -23.85227255383 + 0.59058245907 -23.66041058712 + 0.60059233125 -23.46685775500 + 0.61060220344 -23.27174845981 + 0.62061207563 -23.07521985868 + 0.63062194782 -22.87741156865 + 0.64063182000 -22.67846535939 + 0.65064169219 -22.47852483568 + 0.66065156438 -22.27773510862 + 0.67066143657 -22.07624245709 + 0.68067130875 -21.87419397885 + 0.69068118094 -21.67173723467 + 0.70069105313 -21.46901988370 + 0.71070092532 -21.26618931488 + 0.72071079750 -21.06339227334 + 0.73072066969 -20.86077448581 + 0.74073054188 -20.65848028655 + 0.75074041407 -20.45665224512 + 0.76075028625 -20.25543080011 + 0.77076015844 -20.05495389899 + 0.78077003063 -19.85535664802 + 0.79077990282 -19.65677097183 + 0.80078977500 -19.45932528680 + 0.81079964719 -19.26314418730 + 0.82080951938 -19.06834814739 + 0.83081939157 -18.87505323787 + 0.84082926375 -18.68337085972 + 0.85083913594 -18.49340749392 + 0.86084900813 -18.30526446726 + 0.87085888032 -18.11903773559 + 0.88086875250 -17.93481768217 + 0.89087862469 -17.75268893224 + 0.90088849688 -17.57273018303 + 0.91089836907 -17.39501404880 + 0.92090824125 -17.21960692070 + 0.93091811344 -17.04656884061 + 0.94092798563 -16.87595338922 + 0.95093785782 -16.70780758815 + 0.96094773000 -16.54217181513 + 0.97095760219 -16.37907973287 + 0.98096747438 -16.21855823090 + 0.99097734657 -16.06062738045 + 1.00098721875 -15.90530040129 + 1.01099709094 -15.75258364074 + 1.02100696313 -15.60247656399 + 1.03101683532 -15.45497175414 + 1.04102670750 -15.31005492207 + 1.05103657969 -15.16770492283 + 1.06104645188 -15.02789377847 + 1.07105632407 -14.89058670442 + 1.08106619625 -14.75574213678 + 1.09107606844 -14.62331176599 + 1.10108594063 -14.49324056362 + 1.11109581282 -14.36546660373 + 1.12110568501 -14.23992253780 + 1.13111555719 -14.11653999040 + 1.14112542938 -13.99525303932 + 1.15113530157 -13.87599869956 + 1.16114517376 -13.75871646610 + 1.17115504594 -13.64334876280 + 1.18116491813 -13.52983861770 + 1.19117479032 -13.41813356837 + 1.20118466251 -13.30819216336 + 1.21119453469 -13.20001724789 + 1.22120440688 -13.09358857217 + 1.23121427907 -12.98883019387 + 1.24122415126 -12.88566349011 + 1.25123402344 -12.78403881678 + 1.26124389563 -12.68393669315 + 1.27125376782 -12.58529919989 + 1.28126364001 -12.48808754320 + 1.29127351219 -12.39228741443 + 1.30128338438 -12.29787958511 + 1.31129325657 -12.20483622971 + 1.32130312876 -12.11311851299 + 1.33131300094 -12.02269891695 + 1.34132287313 -11.93355145437 + 1.35133274532 -11.84564837910 + 1.36134261751 -11.75896356966 + 1.37135248969 -11.67347166166 + 1.38136236188 -11.58914793181 + 1.39137223407 -11.50596832435 + 1.40138210626 -11.42390942071 + 1.41139197844 -11.34294842508 + 1.42140185063 -11.26306315691 + 1.43141172282 -11.18423205063 + 1.44142159501 -11.10643415960 + 1.45143146719 -11.02964916134 + 1.46144133938 -10.95385736634 + 1.47145121157 -10.87903972248 + 1.48146108376 -10.80517782119 + 1.49147095594 -10.73225389724 + 1.50148082813 -10.66025073675 + 1.51149070032 -10.58915209980 + 1.52150057251 -10.51894370538 + 1.53151044469 -10.44960411859 + 1.54152031688 -10.38111578806 + 1.55153018907 -10.31347153593 + 1.56154006126 -10.24670781282 + 1.57154993344 -10.18098485810 + 1.58155980563 -10.11639413332 + 1.59156967782 -10.05281524058 + 1.60157955001 -9.99009931266 + 1.61158942219 -9.92811536161 + 1.62159929438 -9.86681442485 + 1.63160916657 -9.80626695984 + 1.64161903876 -9.74648890082 + 1.65162891094 -9.68743508977 + 1.66163878313 -9.62908745100 + 1.67164865532 -9.57143920908 + 1.68165852751 -9.51447766538 + 1.69166839970 -9.45818974704 + 1.70167827188 -9.40256327284 + 1.71168814407 -9.34758638983 + 1.72169801626 -9.29324753740 + 1.73170788845 -9.23953546215 + 1.74171776063 -9.18643921385 + 1.75172763282 -9.13394813988 + 1.76173750501 -9.08205187862 + 1.77174737720 -9.03074035189 + 1.78175724938 -8.98000375583 + 1.79176712157 -8.92983255115 + 1.80177699376 -8.88021745208 + 1.81178686595 -8.83114941462 + 1.82179673813 -8.78261962425 + 1.83180661032 -8.73461948247 + 1.84181648251 -8.68714059463 + 1.85182635470 -8.64017475544 + 1.86183622688 -8.59371393787 + 1.87184609907 -8.54775027892 + 1.88185597126 -8.50227606976 + 1.89186584345 -8.45728374384 + 1.90187571563 -8.41276586794 + 1.91188558782 -8.36871513390 + 1.92189546001 -8.32512435138 + 1.93190533220 -8.28198644270 + 1.94191520438 -8.23929443858 + 1.95192507657 -8.19704147504 + 1.96193494876 -8.15522079273 + 1.97194482095 -8.11382573550 + 1.98195469313 -8.07284975206 + 1.99196456532 -8.03228639711 + 2.00197443751 -7.99212933304 + 2.01198430970 -7.95237233393 + 2.02199418188 -7.91300928636 + 2.03200405407 -7.87403419447 + 2.04201392626 -7.83544118153 + 2.05202379845 -7.79722449168 + 2.06203367063 -7.75937849176 + 2.07204354282 -7.72189766376 + 2.08205341501 -7.68477665466 + 2.09206328720 -7.64801020380 + 2.10207315938 -7.61159320468 + 2.11208303157 -7.57552069152 + 2.12209290376 -7.53978807107 + 2.13210277595 -7.50438916720 + 2.14211264813 -7.46931731172 + 2.15212252032 -7.43456788940 + 2.16213239251 -7.40013955283 + 2.17214226470 -7.36603316849 + 2.18215213688 -7.33224342286 + 2.19216200907 -7.29876390096 + 2.20217188126 -7.26558786837 + 2.21218175345 -7.23271160793 + 2.22219162564 -7.20013157340 + 2.23220149782 -7.16784378654 + 2.24221137001 -7.13584424282 + 2.25222124220 -7.10412915643 + 2.26223111439 -7.07269476736 + 2.27224098657 -7.04153734438 + 2.28225085876 -7.01065321139 + 2.29226073095 -6.98003880564 + 2.30227060314 -6.94969061143 + 2.31228047532 -6.91960517188 + 2.32229034751 -6.88977908864 + 2.33230021970 -6.86020902241 + 2.34231009189 -6.83089169098 + 2.35231996407 -6.80182386801 + 2.36232983626 -6.77300238183 + 2.37233970845 -6.74442411434 + 2.38234958064 -6.71608599983 + 2.39235945282 -6.68798502391 + 2.40236932501 -6.66011822238 + 2.41237919720 -6.63248268026 + 2.42238906939 -6.60507553073 + 2.43239894157 -6.57789395423 + 2.44240881376 -6.55093517739 + 2.45241868595 -6.52419647212 + 2.46242855814 -6.49767515467 + 2.47243843032 -6.47136858474 + 2.48244830251 -6.44527416461 + 2.49245817470 -6.41938933832 + 2.50246804689 -6.39371159082 + 2.51247791907 -6.36823844709 + 2.52248779126 -6.34296747144 + 2.53249766345 -6.31789626664 + 2.54250753564 -6.29302247325 + 2.55251740782 -6.26834376883 + 2.56252728001 -6.24385786722 + 2.57253715220 -6.21956251783 + 2.58254702439 -6.19545550498 + 2.59255689657 -6.17153464719 + 2.60256676876 -6.14779779654 + 2.61257664095 -6.12424283805 + 2.62258651314 -6.10086768900 + 2.63259638532 -6.07767029836 + 2.64260625751 -6.05464864619 + 2.65261612970 -6.03180074301 + 2.66262600189 -6.00912462927 + 2.67263587407 -5.98661837477 + 2.68264574626 -5.96428007813 + 2.69265561845 -5.94210786620 + 2.70266549064 -5.92009989365 + 2.71267536282 -5.89825434233 + 2.72268523501 -5.87656942086 + 2.73269510720 -5.85504336409 + 2.74270497939 -5.83367443263 + 2.75271485157 -5.81246091241 + 2.76272472376 -5.79140111417 + 2.77273459595 -5.77049337308 + 2.78274446814 -5.74973604822 + 2.79275434033 -5.72912752224 + 2.80276421251 -5.70866620087 + 2.81277408470 -5.68835051254 + 2.82278395689 -5.66817890797 + 2.83279382908 -5.64814985977 + 2.84280370126 -5.62826186207 + 2.85281357345 -5.60851343013 + 2.86282344564 -5.58890309996 + 2.87283331783 -5.56942942802 + 2.88284319001 -5.55009099080 + 2.89285306220 -5.53088638447 + 2.90286293439 -5.51181422460 + 2.91287280658 -5.49287314574 + 2.92288267876 -5.47406180115 + 2.93289255095 -5.45537886251 + 2.94290242314 -5.43682301955 + 2.95291229533 -5.41839297978 + 2.96292216751 -5.40008746817 + 2.97293203970 -5.38190522686 + 2.98294191189 -5.36384501488 + 2.99295178408 -5.34590560787 + 3.00296165626 -5.32808579776 + 3.01297152845 -5.31038439257 + 3.02298140064 -5.29280021607 + 3.03299127283 -5.27533210758 + 3.04300114501 -5.25797892169 + 3.05301101720 -5.24073952804 + 3.06302088939 -5.22361281100 + 3.07303076158 -5.20659766952 + 3.08304063376 -5.18969301680 + 3.09305050595 -5.17289778015 + 3.10306037814 -5.15621090068 + 3.11307025033 -5.13963133314 + 3.12308012251 -5.12315804569 + 3.13308999470 -5.10679001968 + 3.14309986689 -5.09052624940 + 3.15310973908 -5.07436574196 + 3.16311961126 -5.05830751701 + 3.17312948345 -5.04235060660 + 3.18313935564 -5.02649405491 + 3.19314922783 -5.01073691814 + 3.20315910001 -4.99507826427 + 3.21316897220 -4.97951717289 + 3.22317884439 -4.96405273502 + 3.23318871658 -4.94868405296 + 3.24319858876 -4.93341024008 + 3.25320846095 -4.91823042067 + 3.26321833314 -4.90314372974 + 3.27322820533 -4.88814931290 + 3.28323807751 -4.87324632619 + 3.29324794970 -4.85843393588 + 3.30325782189 -4.84371131838 + 3.31326769408 -4.82907766004 + 3.32327756627 -4.81453215701 + 3.33328743845 -4.80007401512 + 3.34329731064 -4.78570244968 + 3.35330718283 -4.77141668537 + 3.36331705502 -4.75721595610 + 3.37332692720 -4.74309950486 + 3.38333679939 -4.72906658363 + 3.39334667158 -4.71511645321 + 3.40335654377 -4.70124838308 + 3.41336641595 -4.68746165131 + 3.42337628814 -4.67375554441 + 3.43338616033 -4.66012935721 + 3.44339603252 -4.64658239273 + 3.45340590470 -4.63311396210 + 3.46341577689 -4.61972338437 + 3.47342564908 -4.60640998646 + 3.48343552127 -4.59317310302 + 3.49344539345 -4.58001207631 + 3.50345526564 -4.56692625614 + 3.51346513783 -4.55391499972 + 3.52347501002 -4.54097767156 + 3.53348488220 -4.52811364339 + 3.54349475439 -4.51532229403 + 3.55350462658 -4.50260300928 + 3.56351449877 -4.48995518186 + 3.57352437095 -4.47737821128 + 3.58353424314 -4.46487150378 + 3.59354411533 -4.45243447218 + 3.60355398752 -4.44006653585 + 3.61356385970 -4.42776712059 + 3.62357373189 -4.41553565853 + 3.63358360408 -4.40337158808 + 3.64359347627 -4.39127435381 + 3.65360334845 -4.37924340640 + 3.66361322064 -4.36727820252 + 3.67362309283 -4.35537820474 + 3.68363296502 -4.34354288150 + 3.69364283720 -4.33177170698 + 3.70365270939 -4.32006416103 + 3.71366258158 -4.30841972915 + 3.72367245377 -4.29683790234 + 3.73368232595 -4.28531817709 + 3.74369219814 -4.27386005525 + 3.75370207033 -4.26246304402 + 3.76371194252 -4.25112665580 + 3.77372181470 -4.23985040818 + 3.78373168689 -4.22863382384 + 3.79374155908 -4.21747643050 + 3.80375143127 -4.20637776086 + 3.81376130345 -4.19533735253 + 3.82377117564 -4.18435474797 + 3.83378104783 -4.17342949440 + 3.84379092002 -4.16256114378 + 3.85380079220 -4.15174925269 + 3.86381066439 -4.14099338234 + 3.87382053658 -4.13029309845 + 3.88383040877 -4.11964797121 + 3.89384028096 -4.10905757525 + 3.90385015314 -4.09852148956 + 3.91386002533 -4.08803929744 + 3.92386989752 -4.07761058643 + 3.93387976971 -4.06723494829 + 3.94388964189 -4.05691197890 + 3.95389951408 -4.04664127825 + 3.96390938627 -4.03642245035 + 3.97391925846 -4.02625510322 + 3.98392913064 -4.01613884879 + 3.99393900283 -4.00607330290 + 4.00394887502 -3.99605808526 + 4.01395874721 -3.98609281933 + 4.02396861939 -3.97617713234 + 4.03397849158 -3.96631065522 + 4.04398836377 -3.95649302255 + 4.05399823596 -3.94672387250 + 4.06400810814 -3.93700284683 + 4.07401798033 -3.92732959080 + 4.08402785252 -3.91770375316 + 4.09403772471 -3.90812498610 + 4.10404759689 -3.89859294519 + 4.11405746908 -3.88910728936 + 4.12406734127 -3.87966768087 + 4.13407721346 -3.87027378521 + 4.14408708564 -3.86092527115 + 4.15409695783 -3.85162181060 + 4.16410683002 -3.84236307867 + 4.17411670221 -3.83314875356 + 4.18412657439 -3.82397851655 + 4.19413644658 -3.81485205197 + 4.20414631877 -3.80576904717 + 4.21415619096 -3.79672919244 + 4.22416606314 -3.78773218101 + 4.23417593533 -3.77877770905 + 4.24418580752 -3.76986547555 + 4.25419567971 -3.76099518235 + 4.26420555189 -3.75216653411 + 4.27421542408 -3.74337923824 + 4.28422529627 -3.73463300487 + 4.29423516846 -3.72592754686 + 4.30424504064 -3.71726257971 + 4.31425491283 -3.70863782158 + 4.32426478502 -3.70005299324 + 4.33427465721 -3.69150781802 + 4.34428452939 -3.68300202183 + 4.35429440158 -3.67453533309 + 4.36430427377 -3.66610748269 + 4.37431414596 -3.65771820401 + 4.38432401814 -3.64936723286 + 4.39433389033 -3.64105430745 + 4.40434376252 -3.63277916837 + 4.41435363471 -3.62454155857 + 4.42436350689 -3.61634122332 + 4.43437337908 -3.60817791019 + 4.44438325127 -3.60005136902 + 4.45439312346 -3.59196135191 + 4.46440299565 -3.58390761318 + 4.47441286783 -3.57588990935 + 4.48442274002 -3.56790799910 + 4.49443261221 -3.55996164328 + 4.50444248440 -3.55205060486 + 4.51445235658 -3.54417464889 + 4.52446222877 -3.53633354253 + 4.53447210096 -3.52852705497 + 4.54448197315 -3.52075495745 + 4.55449184533 -3.51301702321 + 4.56450171752 -3.50531302750 + 4.57451158971 -3.49764274753 + 4.58452146190 -3.49000596243 + 4.59453133408 -3.48240245331 + 4.60454120627 -3.47483200312 + 4.61455107846 -3.46729439673 + 4.62456095065 -3.45978942087 + 4.63457082283 -3.45231686409 + 4.64458069502 -3.44487651679 + 4.65459056721 -3.43746817114 + 4.66460043940 -3.43009162114 + 4.67461031158 -3.42274666251 + 4.68462018377 -3.41543309276 + 4.69463005596 -3.40815071109 + 4.70463992815 -3.40089931844 + 4.71464980033 -3.39367871741 + 4.72465967252 -3.38648871229 + 4.73466954471 -3.37932910903 + 4.74467941690 -3.37219971518 + 4.75468928908 -3.36510033996 + 4.76469916127 -3.35803079416 + 4.77470903346 -3.35099089018 + 4.78471890565 -3.34398044196 + 4.79472877783 -3.33699926504 + 4.80473865002 -3.33004717646 + 4.81474852221 -3.32312399479 + 4.82475839440 -3.31622954012 + 4.83476826658 -3.30936363400 + 4.84477813877 -3.30252609949 + 4.85478801096 -3.29571676109 + 4.86479788315 -3.28893544473 + 4.87480775533 -3.28218197780 + 4.88481762752 -3.27545618909 + 4.89482749971 -3.26875790877 + 4.90483737190 -3.26208696845 + 4.91484724408 -3.25544320104 + 4.92485711627 -3.24882644088 + 4.93486698846 -3.24223652359 + 4.94487686065 -3.23567328618 + 4.95488673283 -3.22913656693 + 4.96489660502 -3.22262620546 + 4.97490647721 -3.21614204267 + 4.98491634940 -3.20968392073 + 4.99492622159 -3.20325168308 + 5.00493609377 -3.19684517442 + 5.01494596596 -3.19046424068 + 5.02495583815 -3.18410872900 + 5.03496571034 -3.17777848778 + 5.04497558252 -3.17147336657 + 5.05498545471 -3.16519321615 + 5.06499532690 -3.15893788846 + 5.07500519909 -3.15270723663 + 5.08501507127 -3.14650111492 + 5.09502494346 -3.14031937876 + 5.10503481565 -3.13416188471 + 5.11504468784 -3.12802849042 + 5.12505456002 -3.12191905470 + 5.13506443221 -3.11583343743 + 5.14507430440 -3.10977149960 + 5.15508417659 -3.10373310326 + 5.16509404877 -3.09771811155 + 5.17510392096 -3.09172638865 + 5.18511379315 -3.08575779981 + 5.19512366534 -3.07981221129 + 5.20513353752 -3.07388949039 + 5.21514340971 -3.06798950544 + 5.22515328190 -3.06211212578 + 5.23516315409 -3.05625722171 + 5.24517302627 -3.05042466456 + 5.25518289846 -3.04461432665 + 5.26519277065 -3.03882608124 + 5.27520264284 -3.03305980257 + 5.28521251502 -3.02731536583 + 5.29522238721 -3.02159264715 + 5.30523225940 -3.01589152361 + 5.31524213159 -3.01021187320 + 5.32525200377 -3.00455357481 + 5.33526187596 -2.99891650827 + 5.34527174815 -2.99330055430 + 5.35528162034 -2.98770559450 + 5.36529149252 -2.98213151136 + 5.37530136471 -2.97657818825 + 5.38531123690 -2.97104550941 + 5.39532110909 -2.96553335994 + 5.40533098127 -2.96004162579 + 5.41534085346 -2.95457019375 + 5.42535072565 -2.94911895146 + 5.43536059784 -2.94368778736 + 5.44537047002 -2.93827659073 + 5.45538034221 -2.93288525165 + 5.46539021440 -2.92751366102 + 5.47540008659 -2.92216171052 + 5.48540995877 -2.91682929263 + 5.49541983096 -2.91151630059 + 5.50542970315 -2.90622262847 + 5.51543957534 -2.90094817107 + 5.52544944752 -2.89569282397 + 5.53545931971 -2.89045648348 + 5.54546919190 -2.88523904670 + 5.55547906409 -2.88004041145 + 5.56548893628 -2.87486047627 + 5.57549880846 -2.86969914044 + 5.58550868065 -2.86455630398 + 5.59551855284 -2.85943186759 + 5.60552842503 -2.85432573271 + 5.61553829721 -2.84923780147 + 5.62554816940 -2.84416797668 + 5.63555804159 -2.83911616187 + 5.64556791378 -2.83408226124 + 5.65557778596 -2.82906617967 + 5.66558765815 -2.82406782272 + 5.67559753034 -2.81908709660 + 5.68560740253 -2.81412390820 + 5.69561727471 -2.80917816505 + 5.70562714690 -2.80424977534 + 5.71563701909 -2.79933864789 + 5.72564689128 -2.79444469215 + 5.73565676346 -2.78956781824 + 5.74566663565 -2.78470793687 + 5.75567650784 -2.77986495938 + 5.76568638003 -2.77503879773 + 5.77569625221 -2.77022936449 + 5.78570612440 -2.76543657284 + 5.79571599659 -2.76066033656 + 5.80572586878 -2.75590057000 + 5.81573574096 -2.75115718814 + 5.82574561315 -2.74643010652 + 5.83575548534 -2.74171924125 + 5.84576535753 -2.73702450904 + 5.85577522971 -2.73234582716 + 5.86578510190 -2.72768311343 + 5.87579497409 -2.72303628626 + 5.88580484628 -2.71840526457 + 5.89581471846 -2.71378996788 + 5.90582459065 -2.70919031622 + 5.91583446284 -2.70460623018 + 5.92584433503 -2.70003763088 + 5.93585420721 -2.69548443997 + 5.94586407940 -2.69094657964 + 5.95587395159 -2.68642397258 + 5.96588382378 -2.68191654202 + 5.97589369596 -2.67742421170 + 5.98590356815 -2.67294690586 + 5.99591344034 -2.66848454926 + 6.00592331253 -2.66403706714 + 6.01593318471 -2.65960438527 + 6.02594305690 -2.65518642989 + 6.03595292909 -2.65078312774 + 6.04596280128 -2.64639440602 + 6.05597267346 -2.64202019245 + 6.06598254565 -2.63766041520 + 6.07599241784 -2.63331500292 + 6.08600229003 -2.62898388475 + 6.09601216222 -2.62466699025 + 6.10602203440 -2.62036424949 + 6.11603190659 -2.61607559296 + 6.12604177878 -2.61180095164 + 6.13605165097 -2.60754025692 + 6.14606152315 -2.60329344067 + 6.15607139534 -2.59906043519 + 6.16608126753 -2.59484117322 + 6.17609113972 -2.59063558794 + 6.18610101190 -2.58644361294 + 6.19611088409 -2.58226518228 + 6.20612075628 -2.57810023042 + 6.21613062847 -2.57394869224 + 6.22614050065 -2.56981050305 + 6.23615037284 -2.56568559856 + 6.24616024503 -2.56157391492 + 6.25617011722 -2.55747538865 + 6.26617998940 -2.55338995672 + 6.27618986159 -2.54931755646 + 6.28619973378 -2.54525812562 + 6.29620960597 -2.54121160235 + 6.30621947815 -2.53717792519 + 6.31622935034 -2.53315703305 + 6.32623922253 -2.52914886526 + 6.33624909472 -2.52515336149 + 6.34625896690 -2.52117046184 + 6.35626883909 -2.51720010676 + 6.36627871128 -2.51324223707 + 6.37628858347 -2.50929679398 + 6.38629845565 -2.50536371905 + 6.39630832784 -2.50144295422 + 6.40631820003 -2.49753444178 + 6.41632807222 -2.49363812440 + 6.42633794440 -2.48975394508 + 6.43634781659 -2.48588184720 + 6.44635768878 -2.48202177448 + 6.45636756097 -2.47817367099 + 6.46637743315 -2.47433748114 + 6.47638730534 -2.47051314969 + 6.48639717753 -2.46670062174 + 6.49640704972 -2.46289984274 + 6.50641692190 -2.45911075845 + 6.51642679409 -2.45533331499 + 6.52643666628 -2.45156745879 + 6.53644653847 -2.44781313662 + 6.54645641065 -2.44407029557 + 6.55646628284 -2.44033888306 + 6.56647615503 -2.43661884682 + 6.57648602722 -2.43291013491 + 6.58649589940 -2.42921269570 + 6.59650577159 -2.42552647787 + 6.60651564378 -2.42185143042 + 6.61652551597 -2.41818750264 + 6.62653538815 -2.41453464416 + 6.63654526034 -2.41089280488 + 6.64655513253 -2.40726193501 + 6.65656500472 -2.40364198508 + 6.66657487691 -2.40003290590 + 6.67658474909 -2.39643464857 + 6.68659462128 -2.39284716448 + 6.69660449347 -2.38927040534 + 6.70661436566 -2.38570432312 + 6.71662423784 -2.38214887008 + 6.72663411003 -2.37860399876 + 6.73664398222 -2.37506966201 + 6.74665385441 -2.37154581294 + 6.75666372659 -2.36803240492 + 6.76667359878 -2.36452939163 + 6.77668347097 -2.36103672700 + 6.78669334316 -2.35755436525 + 6.79670321534 -2.35408226084 + 6.80671308753 -2.35062036854 + 6.81672295972 -2.34716864335 + 6.82673283191 -2.34372704055 + 6.83674270409 -2.34029551568 + 6.84675257628 -2.33687402453 + 6.85676244847 -2.33346252317 + 6.86677232066 -2.33006096791 + 6.87678219284 -2.32666931532 + 6.88679206503 -2.32328752221 + 6.89680193722 -2.31991554565 + 6.90681180941 -2.31655334298 + 6.91682168159 -2.31320087174 + 6.92683155378 -2.30985808977 + 6.93684142597 -2.30652495510 + 6.94685129816 -2.30320142605 + 6.95686117034 -2.29988746114 + 6.96687104253 -2.29658301915 + 6.97688091472 -2.29328805910 + 6.98689078691 -2.29000254024 + 6.99690065909 -2.28672642203 + 7.00691053128 -2.28345966420 + 7.01692040347 -2.28020222669 + 7.02693027566 -2.27695406966 + 7.03694014784 -2.27371515351 + 7.04695002003 -2.27048543886 + 7.05695989222 -2.26726488655 + 7.06696976441 -2.26405345766 + 7.07697963659 -2.26085111346 + 7.08698950878 -2.25765781547 + 7.09699938097 -2.25447352540 + 7.10700925316 -2.25129820520 + 7.11701912534 -2.24813181702 + 7.12702899753 -2.24497432323 + 7.13703886972 -2.24182568639 + 7.14704874191 -2.23868586930 + 7.15705861409 -2.23555483495 + 7.16706848628 -2.23243254654 + 7.17707835847 -2.22931896748 + 7.18708823066 -2.22621406138 + 7.19709810285 -2.22311779205 + 7.20710797503 -2.22003012351 + 7.21711784722 -2.21695101997 + 7.22712771941 -2.21388044583 + 7.23713759160 -2.21081836572 + 7.24714746378 -2.20776474442 + 7.25715733597 -2.20471954695 + 7.26716720816 -2.20168273849 + 7.27717708035 -2.19865428442 + 7.28718695253 -2.19563415031 + 7.29719682472 -2.19262230194 + 7.30720669691 -2.18961870523 + 7.31721656910 -2.18662332634 + 7.32722644128 -2.18363613158 + 7.33723631347 -2.18065708745 + 7.34724618566 -2.17768616064 + 7.35725605785 -2.17472331803 + 7.36726593003 -2.17176852665 + 7.37727580222 -2.16882175375 + 7.38728567441 -2.16588296671 + 7.39729554660 -2.16295213312 + 7.40730541878 -2.16002922075 + 7.41731529097 -2.15711419751 + 7.42732516316 -2.15420703152 + 7.43733503535 -2.15130769104 + 7.44734490753 -2.14841614453 + 7.45735477972 -2.14553236059 + 7.46736465191 -2.14265630801 + 7.47737452410 -2.13978795575 + 7.48738439628 -2.13692727291 + 7.49739426847 -2.13407422877 + 7.50740414066 -2.13122879279 + 7.51741401285 -2.12839093457 + 7.52742388503 -2.12556062388 + 7.53743375722 -2.12273783066 + 7.54744362941 -2.11992252498 + 7.55745350160 -2.11711467709 + 7.56746337378 -2.11431425742 + 7.57747324597 -2.11152123650 + 7.58748311816 -2.10873558507 + 7.59749299035 -2.10595727399 + 7.60750286253 -2.10318627429 + 7.61751273472 -2.10042255715 + 7.62752260691 -2.09766609389 + 7.63753247910 -2.09491685599 + 7.64754235128 -2.09217481509 + 7.65755222347 -2.08943994296 + 7.66756209566 -2.08671221151 + 7.67757196785 -2.08399159284 + 7.68758184003 -2.08127805913 + 7.69759171222 -2.07857158277 + 7.70760158441 -2.07587213625 + 7.71761145660 -2.07317969222 + 7.72762132878 -2.07049422346 + 7.73763120097 -2.06781570291 + 7.74764107316 -2.06514410363 + 7.75765094535 -2.06247939883 + 7.76766081754 -2.05982156186 + 7.77767068972 -2.05717056620 + 7.78768056191 -2.05452638546 + 7.79769043410 -2.05188899341 + 7.80770030629 -2.04925836394 + 7.81771017847 -2.04663447106 + 7.82772005066 -2.04401728894 + 7.83772992285 -2.04140679185 + 7.84773979504 -2.03880295424 + 7.85774966722 -2.03620575063 + 7.86775953941 -2.03361515572 + 7.87776941160 -2.03103114430 + 7.88777928379 -2.02845369132 + 7.89778915597 -2.02588277184 + 7.90779902816 -2.02331836105 + 7.91780890035 -2.02076043426 + 7.92781877254 -2.01820896691 + 7.93782864472 -2.01566393456 + 7.94783851691 -2.01312531290 + 7.95784838910 -2.01059307774 + 7.96785826129 -2.00806720502 + 7.97786813347 -2.00554767077 + 7.98787800566 -2.00303445117 + 7.99788787785 -2.00052752251 + 8.00789775004 -1.99802686120 + 8.01790762222 -1.99553244377 + 8.02791749441 -1.99304424686 + 8.03792736660 -1.99056224722 + 8.04793723879 -1.98808642174 + 8.05794711097 -1.98561674741 + 8.06795698316 -1.98315320133 + 8.07796685535 -1.98069576071 + 8.08797672754 -1.97824440290 + 8.09798659972 -1.97579910532 + 8.10799647191 -1.97335984555 + 8.11800634410 -1.97092660123 + 8.12801621629 -1.96849935016 + 8.13802608847 -1.96607807020 + 8.14803596066 -1.96366273936 + 8.15804583285 -1.96125333574 + 8.16805570504 -1.95884983755 + 8.17806557722 -1.95645222309 + 8.18807544941 -1.95406047080 + 8.19808532160 -1.95167455919 + 8.20809519379 -1.94929446691 + 8.21810506597 -1.94692017268 + 8.22811493816 -1.94455165535 + 8.23812481035 -1.94218889386 + 8.24813468254 -1.93983186724 + 8.25814455472 -1.93748055466 + 8.26815442691 -1.93513493534 + 8.27816429910 -1.93279498865 + 8.28817417129 -1.93046069403 + 8.29818404347 -1.92813203102 + 8.30819391566 -1.92580897927 + 8.31820378785 -1.92349151852 + 8.32821366004 -1.92117962862 + 8.33822353223 -1.91887328949 + 8.34823340441 -1.91657248118 + 8.35824327660 -1.91427718381 + 8.36825314879 -1.91198737760 + 8.37826302098 -1.90970304287 + 8.38827289316 -1.90742416004 + 8.39828276535 -1.90515070960 + 8.40829263754 -1.90288267217 + 8.41830250973 -1.90062002842 + 8.42831238191 -1.89836275914 + 8.43832225410 -1.89611084520 + 8.44833212629 -1.89386426757 + 8.45834199848 -1.89162300731 + 8.46835187066 -1.88938704555 + 8.47836174285 -1.88715636353 + 8.48837161504 -1.88493094257 + 8.49838148723 -1.88271076408 + 8.50839135941 -1.88049580956 + 8.51840123160 -1.87828606059 + 8.52841110379 -1.87608149884 + 8.53842097598 -1.87388210608 + 8.54843084816 -1.87168786414 + 8.55844072035 -1.86949875494 + 8.56845059254 -1.86731476051 + 8.57846046473 -1.86513586293 + 8.58847033691 -1.86296204438 + 8.59848020910 -1.86079328713 + 8.60849008129 -1.85862957352 + 8.61849995348 -1.85647088597 + 8.62850982566 -1.85431787450 +# Core:__________________________ + 217 0.01001250155 2.16270033518 # npts, delta, cutoff + 0.00000000000 8.98356073319 + 0.01001250155 8.97803226026 + 0.02002500310 8.96146641038 + 0.03003750466 8.93392026605 + 0.04005000621 8.89548884279 + 0.05006250776 8.84630446360 + 0.06007500931 8.78653602544 + 0.07008751086 8.71638810440 + 0.08010001241 8.63609984585 + 0.09011251397 8.54594368683 + 0.10012501552 8.44622391714 + 0.11013751707 8.33727507007 + 0.12015001862 8.21946014263 + 0.13016252017 8.09316872140 + 0.14017502172 7.95881493868 + 0.15018752328 7.81683533688 + 0.16020002483 7.66768665812 + 0.17021252638 7.51184350883 + 0.18022502793 7.34979598857 + 0.19023752948 7.18204726139 + 0.20025003104 7.00911109274 + 0.21026253259 6.83150936683 + 0.22027503414 6.64976960321 + 0.23028753569 6.46442248696 + 0.24030003724 6.27599942921 + 0.25031253879 6.08503016708 + 0.26032504035 5.89204042684 + 0.27033754190 5.69754965324 + 0.28035004345 5.50206882878 + 0.29036254500 5.30609838721 + 0.30037504655 5.11012623314 + 0.31038754810 4.91462588155 + 0.32040004966 4.72005472393 + 0.33041255121 4.52685242732 + 0.34042505276 4.33543947645 + 0.35043755431 4.14621586271 + 0.36045005586 3.95955992201 + 0.37046255741 3.77582733151 + 0.38047505897 3.59535025789 + 0.39048756052 3.41843666568 + 0.40050006207 3.24536978159 + 0.41051256362 3.07640771477 + 0.42052506517 2.91178322690 + 0.43053756673 2.75170365686 + 0.44055006828 2.59635098232 + 0.45056256983 2.44588202718 + 0.46057507138 2.30042879802 + 0.47058757293 2.16009894559 + 0.48060007448 2.02497634607 + 0.49061257604 1.89512179070 + 0.50062507759 1.77057377484 + 0.51063757914 1.65134938125 + 0.52065008069 1.53744524136 + 0.53066258224 1.42883857331 + 0.54067508379 1.32548827387 + 0.55068758535 1.22733607540 + 0.56070008690 1.13430772767 + 0.57071258845 1.04631422947 + 0.58072509000 0.96325306894 + 0.59073759155 0.88500948553 + 0.60075009311 0.81145773128 + 0.61076259466 0.74246233021 + 0.62077509621 0.67787932354 + 0.63078759776 0.61755749439 + 0.64080009931 0.56133956522 + 0.65081260086 0.50906336009 + 0.66082510242 0.46056292702 + 0.67083760397 0.41566961420 + 0.68085010552 0.37421309556 + 0.69086260707 0.33602234153 + 0.70087510862 0.30092653137 + 0.71088761017 0.26875590496 + 0.72090011173 0.23934255035 + 0.73091261328 0.21252112757 + 0.74092511483 0.18812952560 + 0.75093761638 0.16600945371 + 0.76095011793 0.14600696664 + 0.77096261949 0.12797292402 + 0.78097512104 0.11176338614 + 0.79098762259 0.09723994663 + 0.80100012414 0.08427000449 + 0.81101262569 0.07272697801 + 0.82102512724 0.06249046313 + 0.83103762880 0.05344633874 + 0.84105013035 0.04548682277 + 0.85106263190 0.03851048213 + 0.86107513345 0.03242219988 + 0.87108763500 0.02713310342 + 0.88110013655 0.02256045737 + 0.89111263811 0.01862752474 + 0.90112513966 0.01526340006 + 0.91113764121 0.01240281827 + 0.92115014276 0.00998594282 + 0.93116264431 0.00795813640 + 0.94117514587 0.00626971775 + 0.95118764742 0.00487570762 + 0.96120014897 0.00373556706 + 0.97121265052 0.00281293070 + 0.98122515207 0.00207533770 + 0.99123765362 0.00149396291 + 1.00125015518 0.00104335030 + 1.01126265673 0.00070115079 + 1.02127515828 0.00044786613 + 1.03128765983 0.00026660047 + 1.04130016138 0.00014282092 + 1.05131266293 0.00006412828 + 1.06132516449 0.00002003879 + 1.07133766604 0.00000177769 + 1.08135016759 0.00000208506 + 1.09136266914 0.00001503437 + 1.10137517069 0.00003586397 + 1.11138767224 0.00006082143 + 1.12140017380 0.00008702085 + 1.13141267535 0.00011231272 + 1.14142517690 0.00013516630 + 1.15143767845 0.00015456376 + 1.16145018000 0.00016990585 + 1.17146268156 0.00018092857 + 1.18147518311 0.00018763003 + 1.19148768466 0.00019020701 + 1.20150018621 0.00018900045 + 1.21151268776 0.00018444940 + 1.22152518931 0.00017705234 + 1.23153769087 0.00016733544 + 1.24155019242 0.00015582719 + 1.25156269397 0.00014303834 + 1.26157519552 0.00012944669 + 1.27158769707 0.00011548639 + 1.28160019862 0.00010154058 + 1.29161270018 0.00008793726 + 1.30162520173 0.00007494784 + 1.31163770328 0.00006278762 + 1.32165020483 0.00005161802 + 1.33166270638 0.00004155019 + 1.34167520794 0.00003264940 + 1.35168770949 0.00002494016 + 1.36170021104 0.00001841181 + 1.37171271259 0.00001302399 + 1.38172521414 0.00000871240 + 1.39173771569 0.00000539409 + 1.40175021725 0.00000297265 + 1.41176271880 0.00000134284 + 1.42177522035 0.00000039486 + 1.43178772190 0.00000001803 + 1.44180022345 0.00000010398 + 1.45181272500 0.00000054928 + 1.46182522656 0.00000125754 + 1.47183772811 0.00000214104 + 1.48185022966 0.00000312182 + 1.49186273121 0.00000413236 + 1.50187523276 0.00000511595 + 1.51188773432 0.00000602654 + 1.52190023587 0.00000682856 + 1.53191273742 0.00000749617 + 1.54192523897 0.00000801268 + 1.55193774052 0.00000836951 + 1.56195024207 0.00000856530 + 1.57196274363 0.00000860476 + 1.58197524518 0.00000849768 + 1.59198774673 0.00000825781 + 1.60200024828 0.00000790185 + 1.61201274983 0.00000744852 + 1.62202525138 0.00000691760 + 1.63203775294 0.00000632922 + 1.64205025449 0.00000570313 + 1.65206275604 0.00000505810 + 1.66207525759 0.00000441151 + 1.67208775914 0.00000377889 + 1.68210026070 0.00000317374 + 1.69211276225 0.00000260733 + 1.70212526380 0.00000208860 + 1.71213776535 0.00000162419 + 1.72215026690 0.00000121851 + 1.73216276845 0.00000087385 + 1.74217527001 0.00000059057 + 1.75218777156 0.00000036729 + 1.76220027311 0.00000020118 + 1.77221277466 0.00000008812 + 1.78222527621 0.00000002306 + 1.79223777776 0.00000000020 + 1.80225027932 0.00000001329 + 1.81226278087 0.00000005584 + 1.82227528242 0.00000012132 + 1.83228778397 0.00000020336 + 1.84230028552 0.00000029595 + 1.85231278707 0.00000039353 + 1.86232528863 0.00000049108 + 1.87233779018 0.00000058427 + 1.88235029173 0.00000066946 + 1.89236279328 0.00000074372 + 1.90237529483 0.00000080486 + 1.91238779639 0.00000085140 + 1.92240029794 0.00000088251 + 1.93241279949 0.00000089800 + 1.94242530104 0.00000089821 + 1.95243780259 0.00000088398 + 1.96245030414 0.00000085654 + 1.97246280570 0.00000081743 + 1.98247530725 0.00000076843 + 1.99248780880 0.00000071146 + 2.00250031035 0.00000064855 + 2.01251281190 0.00000058169 + 2.02252531345 0.00000051286 + 2.03253781501 0.00000044389 + 2.04255031656 0.00000037648 + 2.05256281811 0.00000031213 + 2.06257531966 0.00000025210 + 2.07258782121 0.00000019744 + 2.08260032277 0.00000014895 + 2.09261282432 0.00000010716 + 2.10262532587 0.00000007240 + 2.11263782742 0.00000004475 + 2.12265032897 0.00000002407 + 2.13266283052 0.00000001007 + 2.14267533208 0.00000000237 + 2.15268783363 -0.00000000027 + 2.16270033518 0.00000000000 + +# ATOM AND REFERENCE CONFIGURATION +# atsym z nc nv iexc psfile +Fe 26.00 3 4 4 upf +# +# n l f energy (Ha) +1 0 2.00 +2 0 2.00 +2 1 6.00 +3 0 2.00 +3 1 6.00 +3 2 6.00 +4 0 2.00 +# +# PSEUDOPOTENTIAL AND OPTIMIZATION +# lmax +2 +# +# l, rc, ep, ncon, nbas, qcut +0 1.25000 -3.45509 3 7 9.40000 +1 1.20000 -2.20653 3 7 9.40000 +2 1.55000 -0.27580 3 7 9.40000 +# +# LOCAL POTENTIAL +# lloc, lpopt, rc(5), dvloc0 +4 5 1.10000 0.00000 +# +# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs +# l, nproj, debl +0 2 3.26061 +1 2 2.15783 +2 2 0.80000 +# +# MODEL CORE CHARGE +# icmod, fcfact, rcfact +3 3.00000 1.70000 +# +# LOG DERIVATIVE ANALYSIS +# epsh1, epsh2, depsh +-24.00 12.00 0.02 +# +# OUTPUT GRID +# rlmax, drl +6.00 0.01 + diff --git a/testsuite/test_009_DFT_plus_U/bccFe.in b/testsuite/test_009_DFT_plus_U/bccFe.in new file mode 100644 index 000000000..11c0e1e0b --- /dev/null +++ b/testsuite/test_009_DFT_plus_U/bccFe.in @@ -0,0 +1,6 @@ +5.365 0.000 0.000 +0.000 5.365 0.000 +0.000 0.000 5.365 +2 +0.0 0.0 0.0 1 T T T +0.5 0.5 0.5 1 T T T diff --git a/testsuite/test_check_output.py b/testsuite/test_check_output.py index 7ce939c4a..3279b25d8 100644 --- a/testsuite/test_check_output.py +++ b/testsuite/test_check_output.py @@ -139,3 +139,13 @@ def test_008(self, key, testsuite_directory): path = os.path.join(testsuite_directory, "test_008_surface_dipole") res = results(path, key) np.testing.assert_allclose(res[0], res[1], rtol = precision(key), verbose = True) + + @pytest.mark.parametrize("key", ['Harris-Foulkes energy', + 'Max force', + 'Force residual', + 'Total stress']) + def test_009(self, key, testsuite_directory): + + path = os.path.join(testsuite_directory, "test_009_DFT_plus_U") + res = results(path, key) + np.testing.assert_allclose(res[0], res[1], rtol = precision(key), verbose = True) From d5fff5c7574547bad57ca5b8f684d39f162db8cc Mon Sep 17 00:00:00 2001 From: Dave Bowler Date: Wed, 27 May 2026 11:26:53 +0100 Subject: [PATCH 08/16] Bug fix Left old flag flag_write_DOS in use statement; fixed. --- src/initialisation_module.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/initialisation_module.f90 b/src/initialisation_module.f90 index 737bac58f..522891a68 100644 --- a/src/initialisation_module.f90 +++ b/src/initialisation_module.f90 @@ -1112,7 +1112,7 @@ subroutine initial_H(start, start_L, find_chdens, fixed_potential, & flag_dissipation, & flag_propagateX, flag_propagateL, restart_X, & flag_out_wf, wf_self_con, & - flag_write_DOS, flag_neutral_atom, flag_DFTplusU, & ! 2024.05.20 nakata DFT+U + flag_neutral_atom, flag_DFTplusU, & ! 2024.05.20 nakata DFT+U atomf, sf, flag_LFD, nspin_SF, flag_diagonalisation, & ne_in_cell, min_layer, flag_basis_set, PAOs use ion_electrostatic, only: ewald, screened_ion_interaction From e03f34e9c814c3450c3d72cfb1f1f192a00638e3 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 27 May 2026 13:01:01 +0100 Subject: [PATCH 09/16] Update DFT+U test case --- testsuite/test_009_DFT_plus_U/Conquest_input | 4 +- .../test_009_DFT_plus_U/Conquest_out.ref | 596 ++++++++++++++++++ testsuite/test_009_DFT_plus_U/bccFe.in | 2 +- 3 files changed, 599 insertions(+), 3 deletions(-) create mode 100644 testsuite/test_009_DFT_plus_U/Conquest_out.ref diff --git a/testsuite/test_009_DFT_plus_U/Conquest_input b/testsuite/test_009_DFT_plus_U/Conquest_input index 707f4df83..1ea83b768 100644 --- a/testsuite/test_009_DFT_plus_U/Conquest_input +++ b/testsuite/test_009_DFT_plus_U/Conquest_input @@ -2,7 +2,7 @@ minE.SCTolerance 1e-6 IO.AtomChargeOutput T AtomMove.TypeOfRun static minE.SelfConsistent T -IO.Coordinates ionpos.dat +IO.Coordinates bccFe.in IO.Iprint 1 Grid.GridCutoff 100 Diag.MPMesh T @@ -15,7 +15,7 @@ Diag.MPOrder 5 Diag.kT 0.010 SC.KerkerPreCondition T -SC.LinearMixingFactor 0.1 +SC.LinearMixingFactor 0.6 SC.MaxIters 300 Spin.SpinPolarised T Spin.FixSpin F diff --git a/testsuite/test_009_DFT_plus_U/Conquest_out.ref b/testsuite/test_009_DFT_plus_U/Conquest_out.ref new file mode 100644 index 000000000..1cc389936 --- /dev/null +++ b/testsuite/test_009_DFT_plus_U/Conquest_out.ref @@ -0,0 +1,596 @@ + ________________________________________________________________________ + + CONQUEST + + Concurrent Order N QUantum Electronic STructure + ________________________________________________________________________ + + Conquest lead developers: + D.R.Bowler (UCL, NIMS), T.Miyazaki (NIMS), A.Nakata (NIMS), + L. Truflandier (U. Bordeaux) + + Developers: + M.Arita (NIMS), J.S.Baker (UCL), V.Brazdova (UCL), R.Choudhury (UCL), + S.Y.Mujahed (UCL), J.T.Poulton (UCL), Z.Raza (NIMS), A.Sena (UCL), + U.Terranova (UCL), L.Tong (UCL), A.Torralba (NIMS) + + Early development: + I.J.Bush (STFC), C.M.Goringe (Keele), E.H.Hernandez (Keele) + + Original inspiration and project oversight: + M.J.Gillan (Keele, UCL) + ________________________________________________________________________ + + Simulation cell dimensions: 5.3650 a0 x 5.3650 a0 x 5.3650 a0 + + Simulation cell volume: 154.4220 a0**3 + + Atomic coordinates (a0) + Atom X Y Z Species + 1 0.0268 0.0000 0.0000 1 + 2 2.6825 2.6825 2.6825 1 + + Monkhorst-Pack mesh: 3 x 3 x 3 gamma-centred + + This calculation includes non-local pseudopotentials, + with a maximum core radius of 8.62850983 + + This job was run on 2026/05/27 at 12:51 +0100 + Code was compiled on 2026/05/27 at 11:29 +0100 + Version comment: Git Branch: f-DFT-plus-U; tag, hash: v1.5-20-gd5fff5c7 + + Job title: + Job to be run: static calculation + + Ground state search: + Support functions represented with PAO basis + 1:1 PAO to SF mapping + Spin-polarised electrons; population difference free + Solving for the K matrix using diagonalisation + Using order 5 Methfessel-Paxton smearing + + Integration grid size: 32 x 32 x 32 + + Integration grid spacing: 0.168 a0 x 0.168 a0 x 0.168 a0 + + Number of species: 1 + -------------------------------------------------------- + | # mass (au) Charge (e) SF Rad (a0) NSF Label | + -------------------------------------------------------- + | 1 28.086 16.000 8.886 19 Fe | + -------------------------------------------------------- + SCF tolerance: 0.00000100 + SCF iterations: 300 + + The calculation will be performed on 1 process + + The calculation will be performed on 1 thread + + Using the default matrix multiplication kernel + DFT+U calculation will be performed + + Number of DFT-U projectors: 1 + --------------------------------- + | species n l zeta U (Ha) | + --------------------------------- + | 1 Fe 3 2 1 0.077 | + --------------------------------- + + The functional used will be GGA PBE96 + + set_atom_dens: In set_atomic_density, electrons (spin=1): 18.000000000000 + set_atom_dens: In set_atomic_density, electrons (spin=2): 14.000000000000 + PulayMixSC: Starting Pulay mixing, A_up = 0.600 A_dn = 0.600 + PulayMixSC: Spin populations are to be relaxed. + PulayMixSC: with Kerker preconditioning, q0 = 0.100 + Harris-Foulkes Energy : -250.660746678002226 Ha + Free Energy (E-TS) : -250.660769371128538 Ha + PulayMixSC: Pulay iteration 1 residual: 0.70128E-02 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.880 -0.000 0.000 -0.000 0.000 0.562 -0.000 -0.000 0.000 0.000 + -0.000 0.880 0.000 -0.000 -0.000 -0.000 0.562 -0.000 0.000 -0.000 + 0.000 -0.000 0.957 0.000 -0.000 -0.000 -0.000 0.408 0.000 -0.000 + -0.000 -0.000 0.000 0.880 0.000 0.000 0.000 0.000 0.562 -0.000 + 0.000 -0.000 -0.000 0.000 0.957 0.000 -0.000 -0.000 -0.000 0.408 + Atom: 2 Spin 1 Spin 2 + 0.880 0.000 -0.000 0.000 0.000 0.562 -0.000 0.000 0.000 0.000 + 0.000 0.880 0.000 -0.000 -0.000 -0.000 0.562 -0.000 0.000 0.000 + -0.000 0.000 0.957 -0.000 0.000 0.000 -0.000 0.408 0.000 -0.000 + 0.000 -0.000 -0.000 0.880 0.000 0.000 0.000 0.000 0.562 -0.000 + -0.000 -0.000 0.000 0.000 0.957 0.000 0.000 -0.000 -0.000 0.408 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.125135445492084 Ha + Harris-Foulkes Energy : -250.548886617246865 Ha + Free Energy (E-TS) : -250.549293714231879 Ha + PulayMixSC: Pulay iteration 2 residual: 0.51943E-02 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.927 0.000 0.000 -0.000 0.000 0.567 0.000 -0.000 -0.000 0.000 + 0.000 0.927 -0.000 0.000 0.000 0.000 0.568 -0.000 -0.000 -0.000 + 0.000 -0.000 0.980 0.000 -0.000 -0.000 -0.000 0.369 0.000 0.000 + -0.000 0.000 0.000 0.927 0.000 -0.000 -0.000 0.000 0.567 -0.000 + 0.000 0.000 -0.000 0.000 0.980 0.000 -0.000 0.000 -0.000 0.369 + Atom: 2 Spin 1 Spin 2 + 0.927 0.000 -0.000 -0.000 -0.000 0.567 0.000 -0.000 -0.000 0.000 + 0.000 0.927 0.000 -0.000 -0.000 0.000 0.568 -0.000 -0.000 0.000 + -0.000 0.000 0.980 -0.000 0.000 -0.000 -0.000 0.369 0.000 -0.000 + -0.000 -0.000 -0.000 0.927 -0.000 -0.000 -0.000 0.000 0.567 0.000 + -0.000 -0.000 0.000 -0.000 0.980 0.000 0.000 -0.000 0.000 0.369 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.111595724476780 Ha + Harris-Foulkes Energy : -250.551012991120501 Ha + Free Energy (E-TS) : -250.551429121238272 Ha + PulayMixSC: Pulay iteration 3 residual: 0.37267E-02 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.940 -0.000 0.000 0.000 0.000 0.539 0.000 -0.000 -0.000 0.000 + -0.000 0.940 -0.000 0.000 0.000 0.000 0.541 -0.000 -0.000 0.000 + 0.000 -0.000 0.976 -0.000 -0.000 -0.000 -0.000 0.351 -0.000 0.000 + 0.000 0.000 -0.000 0.940 -0.000 -0.000 -0.000 -0.000 0.539 -0.000 + 0.000 0.000 -0.000 -0.000 0.976 0.000 0.000 0.000 -0.000 0.351 + Atom: 2 Spin 1 Spin 2 + 0.940 -0.000 0.000 0.000 -0.000 0.538 0.000 -0.000 -0.000 0.000 + -0.000 0.940 -0.000 0.000 0.000 0.000 0.541 -0.000 0.000 0.000 + 0.000 -0.000 0.976 0.000 0.000 -0.000 -0.000 0.351 0.000 0.000 + 0.000 0.000 0.000 0.940 0.000 -0.000 0.000 0.000 0.538 0.000 + -0.000 0.000 0.000 0.000 0.976 0.000 0.000 0.000 0.000 0.351 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.109374532669696 Ha + Harris-Foulkes Energy : -250.559853062431500 Ha + Free Energy (E-TS) : -250.559787891013599 Ha + PulayMixSC: Pulay iteration 4 residual: 0.29756E-02 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.970 -0.000 -0.000 0.000 0.000 0.504 0.000 -0.000 -0.000 0.000 + -0.000 0.970 0.000 0.000 0.000 0.000 0.507 -0.000 -0.000 0.000 + -0.000 0.000 0.979 -0.000 -0.000 -0.000 -0.000 0.345 -0.000 0.000 + 0.000 0.000 -0.000 0.970 -0.000 -0.000 -0.000 -0.000 0.504 -0.000 + 0.000 0.000 -0.000 -0.000 0.979 0.000 0.000 0.000 -0.000 0.345 + Atom: 2 Spin 1 Spin 2 + 0.970 0.000 -0.000 0.000 -0.000 0.506 0.000 0.000 -0.000 0.000 + 0.000 0.970 -0.000 0.000 -0.000 0.000 0.510 -0.000 -0.000 0.000 + -0.000 -0.000 0.980 -0.000 -0.000 0.000 -0.000 0.348 0.000 0.000 + 0.000 0.000 -0.000 0.970 0.000 -0.000 -0.000 0.000 0.506 0.000 + -0.000 -0.000 -0.000 0.000 0.980 0.000 0.000 0.000 0.000 0.348 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.102785260393017 Ha + Harris-Foulkes Energy : -250.564432238296661 Ha + Free Energy (E-TS) : -250.564595155875196 Ha + PulayMixSC: Pulay iteration 5 residual: 0.17580E-02 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.975 -0.000 0.000 -0.000 0.000 0.515 -0.000 0.000 -0.000 0.000 + -0.000 0.975 0.000 -0.000 0.000 -0.000 0.521 0.000 -0.000 0.000 + -0.000 0.000 0.983 0.000 -0.000 0.000 0.000 0.371 0.000 0.000 + -0.000 -0.000 0.000 0.975 0.000 -0.000 -0.000 0.000 0.515 -0.000 + 0.000 0.000 -0.000 0.000 0.983 0.000 0.000 0.000 -0.000 0.371 + Atom: 2 Spin 1 Spin 2 + 0.972 0.000 -0.000 0.000 -0.000 0.473 0.000 -0.000 -0.000 0.000 + 0.000 0.972 -0.000 0.000 -0.000 0.000 0.477 -0.000 -0.000 0.000 + -0.000 -0.000 0.979 -0.000 -0.000 -0.000 -0.000 0.328 0.000 -0.000 + 0.000 0.000 -0.000 0.972 0.000 -0.000 -0.000 0.000 0.473 0.000 + -0.000 -0.000 -0.000 0.000 0.979 0.000 0.000 -0.000 0.000 0.328 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101644231338846 Ha + Harris-Foulkes Energy : -250.566197624606986 Ha + Free Energy (E-TS) : -250.566324669847376 Ha + PulayMixSC: Pulay iteration 6 residual: 0.24475E-02 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.970 -0.000 0.000 -0.000 0.000 0.456 0.000 0.000 -0.000 0.000 + -0.000 0.970 -0.000 0.000 0.000 0.000 0.461 -0.000 -0.000 0.000 + 0.000 -0.000 0.977 -0.000 -0.000 0.000 -0.000 0.313 0.000 0.000 + -0.000 0.000 -0.000 0.970 0.000 -0.000 -0.000 0.000 0.456 0.000 + 0.000 0.000 -0.000 0.000 0.977 0.000 0.000 0.000 0.000 0.313 + Atom: 2 Spin 1 Spin 2 + 0.977 0.000 -0.000 0.000 0.000 0.528 0.000 -0.000 -0.000 0.000 + -0.000 0.977 -0.000 -0.000 0.000 0.000 0.536 -0.000 -0.000 0.000 + -0.000 -0.000 0.985 0.000 -0.000 -0.000 -0.000 0.383 0.000 0.000 + 0.000 -0.000 0.000 0.977 0.000 -0.000 -0.000 0.000 0.528 0.000 + 0.000 0.000 -0.000 0.000 0.985 0.000 0.000 0.000 0.000 0.383 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101264638876763 Ha + Harris-Foulkes Energy : -250.564186792639561 Ha + Free Energy (E-TS) : -250.564284573001856 Ha + PulayMixSC: Pulay iteration 7 residual: 0.74102E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 -0.000 0.000 0.480 0.000 0.000 -0.000 0.000 + -0.000 0.974 0.000 0.000 0.000 0.000 0.488 0.000 0.000 0.000 + -0.000 0.000 0.981 0.000 -0.000 0.000 0.000 0.331 -0.000 0.000 + -0.000 0.000 0.000 0.974 0.000 -0.000 0.000 -0.000 0.480 0.000 + 0.000 0.000 -0.000 0.000 0.981 0.000 0.000 0.000 0.000 0.331 + Atom: 2 Spin 1 Spin 2 + 0.974 -0.000 0.000 0.000 -0.000 0.504 0.000 -0.000 -0.000 0.000 + -0.000 0.973 0.000 -0.000 0.000 0.000 0.514 -0.000 -0.000 0.000 + 0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.359 0.000 0.000 + 0.000 -0.000 0.000 0.974 -0.000 -0.000 -0.000 0.000 0.504 0.000 + -0.000 0.000 -0.000 -0.000 0.981 0.000 0.000 0.000 0.000 0.359 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101513793895217 Ha + Harris-Foulkes Energy : -250.564487885947869 Ha + Free Energy (E-TS) : -250.564587123774857 Ha + PulayMixSC: Pulay iteration 8 residual: 0.13604E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 -0.000 -0.000 0.000 0.492 -0.000 0.000 -0.000 0.000 + 0.000 0.974 0.000 0.000 -0.000 -0.000 0.503 -0.000 0.000 0.000 + -0.000 0.000 0.982 -0.000 -0.000 0.000 -0.000 0.342 -0.000 0.000 + -0.000 0.000 0.000 0.974 0.000 -0.000 0.000 -0.000 0.492 -0.000 + 0.000 -0.000 -0.000 0.000 0.982 0.000 0.000 0.000 -0.000 0.342 + Atom: 2 Spin 1 Spin 2 + 0.973 -0.000 0.000 0.000 0.000 0.492 -0.000 -0.000 -0.000 0.000 + -0.000 0.973 0.000 -0.000 0.000 -0.000 0.504 -0.000 -0.000 0.000 + 0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.346 0.000 -0.000 + 0.000 -0.000 0.000 0.973 -0.000 -0.000 -0.000 0.000 0.492 0.000 + 0.000 0.000 -0.000 -0.000 0.981 0.000 0.000 -0.000 0.000 0.346 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101538879614273 Ha + Harris-Foulkes Energy : -250.564550586191814 Ha + Free Energy (E-TS) : -250.564658989442449 Ha + PulayMixSC: Pulay iteration 9 residual: 0.25808E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 0.000 0.000 0.494 0.000 0.000 -0.000 0.000 + -0.000 0.974 0.000 -0.000 0.000 0.000 0.509 -0.000 -0.000 0.000 + -0.000 0.000 0.982 -0.000 -0.000 0.000 -0.000 0.346 -0.000 0.000 + 0.000 -0.000 0.000 0.974 -0.000 -0.000 -0.000 -0.000 0.494 -0.000 + 0.000 0.000 -0.000 -0.000 0.982 0.000 0.000 0.000 -0.000 0.346 + Atom: 2 Spin 1 Spin 2 + 0.973 0.000 0.000 0.000 -0.000 0.488 0.000 0.000 -0.000 0.000 + -0.000 0.973 0.000 -0.000 -0.000 0.000 0.503 -0.000 -0.000 0.000 + 0.000 0.000 0.981 0.000 -0.000 0.000 -0.000 0.341 -0.000 -0.000 + 0.000 -0.000 0.000 0.973 0.000 -0.000 -0.000 -0.000 0.488 0.000 + -0.000 -0.000 -0.000 0.000 0.981 0.000 0.000 -0.000 0.000 0.341 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101461059203675 Ha + Harris-Foulkes Energy : -250.564557491609321 Ha + Free Energy (E-TS) : -250.564659692716958 Ha + PulayMixSC: Pulay iteration 10 residual: 0.26244E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 0.000 0.000 0.494 -0.000 0.000 -0.000 0.000 + 0.000 0.974 0.000 0.000 -0.000 -0.000 0.512 -0.000 -0.000 0.000 + -0.000 0.000 0.982 -0.000 -0.000 0.000 -0.000 0.347 -0.000 0.000 + 0.000 0.000 -0.000 0.974 -0.000 -0.000 -0.000 -0.000 0.494 -0.000 + 0.000 -0.000 -0.000 -0.000 0.982 0.000 0.000 0.000 -0.000 0.346 + Atom: 2 Spin 1 Spin 2 + 0.973 0.000 0.000 -0.000 -0.000 0.487 -0.000 -0.000 -0.000 0.000 + 0.000 0.973 -0.000 0.000 0.000 -0.000 0.504 -0.000 -0.000 0.000 + 0.000 -0.000 0.981 0.000 -0.000 -0.000 -0.000 0.340 -0.000 0.000 + -0.000 0.000 0.000 0.973 -0.000 -0.000 -0.000 -0.000 0.487 0.000 + -0.000 0.000 -0.000 -0.000 0.981 0.000 0.000 0.000 0.000 0.340 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101446523595009 Ha + Harris-Foulkes Energy : -250.564553637237339 Ha + Free Energy (E-TS) : -250.564648487349388 Ha + PulayMixSC: Pulay iteration 11 residual: 0.14693E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 0.000 0.000 -0.000 0.490 0.000 -0.000 -0.000 0.000 + -0.000 0.973 0.000 0.000 0.000 0.000 0.513 -0.000 0.000 0.000 + 0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.345 -0.000 0.000 + 0.000 0.000 0.000 0.974 0.000 -0.000 0.000 -0.000 0.490 -0.000 + -0.000 0.000 -0.000 0.000 0.982 0.000 0.000 0.000 -0.000 0.345 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 0.000 0.487 0.000 -0.000 -0.000 0.000 + 0.000 0.973 -0.000 -0.000 0.000 0.000 0.509 -0.000 0.000 0.000 + 0.000 -0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.341 -0.000 0.000 + 0.000 -0.000 -0.000 0.974 -0.000 -0.000 0.000 -0.000 0.487 0.000 + 0.000 0.000 -0.000 -0.000 0.981 0.000 0.000 0.000 0.000 0.341 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101432903560538 Ha + Harris-Foulkes Energy : -250.564564374106624 Ha + Free Energy (E-TS) : -250.564652393260275 Ha + PulayMixSC: Pulay iteration 12 residual: 0.15375E-03 + PulayMixSC: Pulay iteration is reset !! at 12 th iteration + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 -0.000 0.000 -0.000 0.488 -0.000 -0.000 -0.000 0.000 + 0.000 0.973 -0.000 0.000 0.000 -0.000 0.516 -0.000 0.000 0.000 + -0.000 -0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.344 -0.000 0.000 + 0.000 0.000 -0.000 0.974 0.000 -0.000 0.000 -0.000 0.488 -0.000 + -0.000 0.000 -0.000 0.000 0.982 0.000 0.000 0.000 -0.000 0.344 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 -0.000 0.000 0.486 -0.000 -0.000 -0.000 0.000 + 0.000 0.973 -0.000 -0.000 0.000 -0.000 0.513 -0.000 0.000 0.000 + 0.000 -0.000 0.981 0.000 -0.000 -0.000 -0.000 0.342 -0.000 0.000 + -0.000 -0.000 0.000 0.974 -0.000 -0.000 0.000 -0.000 0.486 0.000 + 0.000 0.000 -0.000 -0.000 0.981 0.000 0.000 0.000 0.000 0.342 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101420490513743 Ha + Harris-Foulkes Energy : -250.564576193971163 Ha + Free Energy (E-TS) : -250.564655869950485 Ha + PulayMixSC: Pulay iteration 13 residual: 0.18361E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 0.000 -0.000 0.000 0.485 -0.000 -0.000 -0.000 0.000 + -0.000 0.973 0.000 0.000 0.000 -0.000 0.518 -0.000 0.000 -0.000 + 0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.343 0.000 0.000 + -0.000 0.000 0.000 0.974 -0.000 -0.000 0.000 0.000 0.485 0.000 + 0.000 0.000 -0.000 -0.000 0.981 0.000 -0.000 0.000 0.000 0.343 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 0.000 0.485 -0.000 -0.000 -0.000 0.000 + 0.000 0.973 0.000 -0.000 -0.000 -0.000 0.519 -0.000 0.000 0.000 + 0.000 0.000 0.982 0.000 -0.000 -0.000 -0.000 0.343 -0.000 0.000 + 0.000 -0.000 0.000 0.974 0.000 -0.000 0.000 -0.000 0.485 0.000 + 0.000 -0.000 -0.000 0.000 0.982 0.000 0.000 0.000 0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101389020960175 Ha + Harris-Foulkes Energy : -250.564610497860031 Ha + Free Energy (E-TS) : -250.564677252163733 Ha + PulayMixSC: Pulay iteration 14 residual: 0.27774E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 0.000 0.000 0.480 -0.000 0.000 -0.000 0.000 + -0.000 0.973 0.000 0.000 0.000 -0.000 0.519 -0.000 0.000 0.000 + -0.000 0.000 0.981 0.000 -0.000 0.000 -0.000 0.340 0.000 0.000 + 0.000 0.000 0.000 0.974 0.000 -0.000 0.000 0.000 0.480 0.000 + 0.000 0.000 -0.000 0.000 0.981 0.000 0.000 0.000 0.000 0.339 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 -0.000 0.486 -0.000 -0.000 -0.000 0.000 + 0.000 0.974 0.000 0.000 -0.000 -0.000 0.527 -0.000 0.000 0.000 + 0.000 0.000 0.982 -0.000 -0.000 -0.000 -0.000 0.347 -0.000 0.000 + 0.000 0.000 -0.000 0.974 -0.000 -0.000 0.000 -0.000 0.486 -0.000 + -0.000 -0.000 -0.000 -0.000 0.982 0.000 0.000 0.000 -0.000 0.346 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101359642689537 Ha + Harris-Foulkes Energy : -250.564613294535661 Ha + Free Energy (E-TS) : -250.564663741508753 Ha + PulayMixSC: Pulay iteration 15 residual: 0.23625E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 0.000 -0.000 0.000 0.480 -0.000 0.000 -0.000 0.000 + 0.000 0.973 -0.000 0.000 0.000 -0.000 0.528 -0.000 0.000 0.000 + 0.000 -0.000 0.982 -0.000 -0.000 0.000 -0.000 0.343 -0.000 0.000 + -0.000 0.000 -0.000 0.974 0.000 -0.000 0.000 -0.000 0.480 -0.000 + 0.000 0.000 -0.000 0.000 0.982 0.000 0.000 0.000 -0.000 0.342 + Atom: 2 Spin 1 Spin 2 + 0.974 -0.000 0.000 0.000 0.000 0.480 -0.000 -0.000 -0.000 0.000 + -0.000 0.973 0.000 0.000 -0.000 -0.000 0.528 -0.000 0.000 0.000 + 0.000 0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.344 -0.000 0.000 + 0.000 0.000 -0.000 0.974 0.000 -0.000 0.000 -0.000 0.480 0.000 + 0.000 -0.000 -0.000 0.000 0.981 0.000 0.000 0.000 0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101332864181612 Ha + Harris-Foulkes Energy : -250.564624879629918 Ha + Free Energy (E-TS) : -250.564665075095917 Ha + PulayMixSC: Pulay iteration 16 residual: 0.55253E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.973 -0.000 0.000 -0.000 0.000 0.477 -0.000 0.000 0.000 0.000 + -0.000 0.973 -0.000 0.000 0.000 -0.000 0.528 -0.000 0.000 0.000 + 0.000 -0.000 0.981 0.000 -0.000 0.000 -0.000 0.342 0.000 0.001 + -0.000 0.000 0.000 0.973 -0.000 0.000 0.000 0.000 0.477 -0.000 + 0.000 0.000 -0.000 -0.000 0.981 0.000 0.000 0.001 -0.000 0.340 + Atom: 2 Spin 1 Spin 2 + 0.974 -0.000 0.000 0.000 0.000 0.481 -0.000 -0.000 -0.000 0.000 + -0.000 0.974 -0.000 0.000 -0.000 -0.000 0.533 -0.000 0.000 0.000 + 0.000 -0.000 0.982 0.000 -0.000 -0.000 -0.000 0.346 -0.000 0.001 + 0.000 0.000 0.000 0.974 -0.000 -0.000 0.000 -0.000 0.481 0.000 + 0.000 -0.000 -0.000 -0.000 0.982 0.000 0.000 0.001 0.000 0.344 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101296555089969 Ha + Harris-Foulkes Energy : -250.564662584541196 Ha + Free Energy (E-TS) : -250.564680007691237 Ha + PulayMixSC: Pulay iteration 17 residual: 0.30432E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 -0.000 0.000 0.476 -0.000 0.000 0.000 0.000 + 0.000 0.973 -0.000 0.000 0.000 -0.000 0.536 -0.000 0.000 0.000 + -0.000 -0.000 0.981 -0.000 -0.000 0.000 -0.000 0.343 0.000 0.001 + -0.000 0.000 -0.000 0.974 -0.000 0.000 0.000 0.000 0.476 -0.000 + 0.000 0.000 -0.000 -0.000 0.982 0.000 0.000 0.001 -0.000 0.342 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 -0.000 0.477 -0.000 -0.000 -0.000 0.000 + 0.000 0.973 -0.000 -0.000 -0.000 -0.000 0.537 -0.000 0.000 0.000 + 0.000 -0.000 0.981 0.000 -0.000 -0.000 -0.000 0.344 -0.000 0.001 + 0.000 -0.000 0.000 0.974 -0.000 -0.000 0.000 -0.000 0.477 0.000 + -0.000 -0.000 -0.000 -0.000 0.981 0.000 0.000 0.001 0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101260332283841 Ha + Harris-Foulkes Energy : -250.564691842050536 Ha + Free Energy (E-TS) : -250.564690839580180 Ha + PulayMixSC: Pulay iteration 18 residual: 0.33502E-03 + PulayMixSC: Pulay iteration is reset !! at 18 th iteration + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 -0.000 0.474 -0.000 -0.000 0.000 0.000 + 0.000 0.973 0.000 -0.000 0.000 -0.000 0.541 0.000 0.000 -0.000 + 0.000 0.000 0.981 -0.000 -0.000 -0.000 0.000 0.343 0.000 0.001 + 0.000 -0.000 -0.000 0.974 -0.000 0.000 0.000 0.000 0.474 -0.000 + -0.000 0.000 -0.000 -0.000 0.982 0.000 -0.000 0.001 -0.000 0.342 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 0.000 0.474 -0.000 -0.000 0.000 0.000 + 0.000 0.973 -0.000 -0.000 0.000 -0.000 0.542 -0.000 0.000 0.000 + 0.000 -0.000 0.981 0.000 -0.000 -0.000 -0.000 0.343 -0.000 0.001 + 0.000 -0.000 0.000 0.974 -0.000 0.000 0.000 -0.000 0.474 0.000 + 0.000 0.000 -0.000 0.000 0.982 0.000 0.000 0.001 0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101206455715620 Ha + Harris-Foulkes Energy : -250.564709662469738 Ha + Free Energy (E-TS) : -250.564702394810524 Ha + PulayMixSC: Pulay iteration 19 residual: 0.54815E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 -0.000 -0.000 -0.000 0.476 -0.000 -0.000 0.000 0.000 + 0.000 0.974 0.000 0.000 -0.000 -0.000 0.548 0.000 0.000 0.000 + -0.000 0.000 0.982 -0.000 -0.000 -0.000 0.000 0.347 -0.000 0.001 + -0.000 0.000 -0.000 0.974 -0.000 0.000 0.000 -0.000 0.476 -0.000 + -0.000 -0.000 -0.000 -0.000 0.982 0.000 0.000 0.001 -0.000 0.345 + Atom: 2 Spin 1 Spin 2 + 0.973 0.000 -0.000 0.000 0.000 0.470 -0.000 -0.000 0.000 0.000 + -0.000 0.973 0.000 -0.000 0.000 -0.000 0.540 -0.000 0.000 0.000 + -0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.340 0.000 0.001 + 0.000 -0.000 0.000 0.973 -0.000 0.000 0.000 0.000 0.470 0.000 + 0.000 0.000 -0.000 -0.000 0.981 0.000 0.000 0.001 0.000 0.339 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101177187234737 Ha + Harris-Foulkes Energy : -250.564840533671145 Ha + Free Energy (E-TS) : -250.564828507960300 Ha + PulayMixSC: Pulay iteration 20 residual: 0.64854E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.975 0.000 -0.000 -0.000 -0.000 0.480 -0.000 -0.000 -0.000 0.000 + 0.000 0.973 0.000 0.000 0.000 -0.000 0.560 -0.000 0.000 0.000 + -0.000 0.000 0.982 -0.000 -0.000 -0.000 -0.000 0.353 0.000 0.000 + -0.000 0.000 -0.000 0.975 0.000 -0.000 0.000 0.000 0.480 -0.000 + -0.000 0.000 -0.000 0.000 0.982 0.000 0.000 0.000 -0.000 0.353 + Atom: 2 Spin 1 Spin 2 + 0.973 0.000 -0.000 0.000 0.000 0.462 -0.000 -0.000 -0.000 0.000 + 0.000 0.972 -0.000 -0.000 -0.000 -0.000 0.534 -0.000 0.000 0.000 + -0.000 -0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.333 -0.000 0.000 + 0.000 -0.000 -0.000 0.973 -0.000 -0.000 0.000 -0.000 0.462 0.000 + 0.000 -0.000 -0.000 -0.000 0.981 0.000 0.000 0.000 0.000 0.333 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101110238997349 Ha + Harris-Foulkes Energy : -250.564688747622398 Ha + Free Energy (E-TS) : -250.564683023903541 Ha + PulayMixSC: Pulay iteration 21 residual: 0.17735E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 -0.000 0.000 0.470 -0.000 -0.000 0.000 0.000 + -0.000 0.972 -0.000 0.000 0.000 -0.000 0.550 -0.000 0.000 0.000 + -0.000 -0.000 0.981 0.000 -0.000 -0.000 -0.000 0.343 -0.000 -0.000 + -0.000 -0.000 0.000 0.974 0.000 0.000 0.000 -0.000 0.470 -0.000 + 0.000 0.000 -0.000 0.000 0.981 0.000 0.000 -0.000 -0.000 0.343 + Atom: 2 Spin 1 Spin 2 + 0.975 0.000 0.000 0.000 0.000 0.471 -0.000 -0.000 -0.000 -0.000 + 0.000 0.973 -0.000 0.000 0.000 -0.000 0.549 -0.000 0.000 -0.000 + 0.000 -0.000 0.982 0.000 -0.000 -0.000 -0.000 0.343 -0.000 0.000 + 0.000 0.000 0.000 0.975 -0.000 -0.000 0.000 -0.000 0.471 -0.000 + 0.000 0.000 -0.000 -0.000 0.982 -0.000 -0.000 0.000 -0.000 0.342 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101115051219236 Ha + Harris-Foulkes Energy : -250.564739101988096 Ha + Free Energy (E-TS) : -250.564754794168010 Ha + PulayMixSC: Pulay iteration 22 residual: 0.43761E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 -0.000 -0.000 0.000 0.465 -0.000 -0.000 -0.000 0.000 + 0.000 0.971 0.000 -0.000 -0.000 -0.000 0.544 -0.000 0.000 0.000 + -0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.337 -0.000 -0.001 + -0.000 -0.000 0.000 0.974 0.000 -0.000 0.000 -0.000 0.465 -0.000 + 0.000 -0.000 -0.000 0.000 0.981 0.000 0.000 -0.001 -0.000 0.338 + Atom: 2 Spin 1 Spin 2 + 0.975 0.000 -0.000 -0.000 0.000 0.474 -0.000 -0.000 0.000 0.000 + 0.000 0.973 0.000 -0.000 0.000 -0.000 0.556 -0.000 0.000 0.000 + -0.000 0.000 0.982 0.000 -0.000 -0.000 -0.000 0.347 -0.000 -0.000 + -0.000 -0.000 0.000 0.975 -0.000 0.000 0.000 -0.000 0.474 -0.000 + 0.000 0.000 -0.000 -0.000 0.982 0.000 0.000 -0.000 -0.000 0.348 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101105603982791 Ha + Harris-Foulkes Energy : -250.564714815934082 Ha + Free Energy (E-TS) : -250.564738100673566 Ha + PulayMixSC: Pulay iteration 23 residual: 0.40628E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 0.000 -0.000 0.000 0.465 -0.000 -0.000 -0.000 0.000 + 0.000 0.972 0.000 0.000 -0.000 -0.000 0.543 0.000 0.000 -0.000 + 0.000 0.000 0.981 0.000 -0.000 -0.000 0.000 0.337 -0.000 -0.001 + -0.000 0.000 0.000 0.974 -0.000 -0.000 0.000 -0.000 0.465 -0.000 + 0.000 -0.000 -0.000 -0.000 0.981 0.000 -0.000 -0.001 -0.000 0.338 + Atom: 2 Spin 1 Spin 2 + 0.975 0.000 0.000 -0.000 0.000 0.474 -0.000 -0.000 0.000 0.000 + 0.000 0.973 -0.000 -0.000 -0.000 -0.000 0.557 0.000 0.000 -0.000 + 0.000 -0.000 0.982 0.000 -0.000 -0.000 0.000 0.348 -0.000 -0.001 + -0.000 -0.000 0.000 0.975 -0.000 0.000 0.000 -0.000 0.474 0.000 + 0.000 -0.000 -0.000 -0.000 0.982 0.000 -0.000 -0.001 0.000 0.348 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101110698557738 Ha + Harris-Foulkes Energy : -250.564699842788855 Ha + Free Energy (E-TS) : -250.564713783877721 Ha + PulayMixSC: Pulay iteration 24 residual: 0.17242E-03 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 -0.000 -0.000 -0.000 0.468 -0.000 -0.000 -0.000 0.000 + 0.000 0.972 -0.000 0.000 -0.000 -0.000 0.546 0.000 0.000 -0.000 + -0.000 -0.000 0.981 0.000 -0.000 -0.000 0.000 0.340 0.000 -0.000 + -0.000 0.000 0.000 0.974 -0.000 -0.000 0.000 0.000 0.468 -0.000 + -0.000 -0.000 -0.000 -0.000 0.981 0.000 -0.000 -0.000 -0.000 0.340 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 0.000 0.472 -0.000 -0.000 0.000 0.000 + 0.000 0.972 -0.000 -0.000 0.000 -0.000 0.554 0.000 0.000 0.000 + 0.000 -0.000 0.981 -0.000 -0.000 -0.000 0.000 0.345 -0.000 -0.000 + 0.000 -0.000 -0.000 0.974 -0.000 0.000 0.000 -0.000 0.472 -0.000 + 0.000 0.000 -0.000 -0.000 0.982 0.000 0.000 -0.000 -0.000 0.346 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101112270030461 Ha + Harris-Foulkes Energy : -250.564701293529708 Ha + Free Energy (E-TS) : -250.564714647018008 Ha + PulayMixSC: Pulay iteration 25 residual: 0.44649E-04 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 -0.000 -0.000 0.000 0.470 -0.000 -0.000 -0.000 0.000 + 0.000 0.973 -0.000 0.000 -0.000 -0.000 0.550 0.000 0.000 -0.000 + -0.000 -0.000 0.981 0.000 -0.000 -0.000 0.000 0.343 0.000 -0.000 + -0.000 0.000 0.000 0.974 -0.000 -0.000 0.000 0.000 0.470 -0.000 + 0.000 -0.000 -0.000 -0.000 0.982 0.000 -0.000 -0.000 -0.000 0.343 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 -0.000 0.470 0.000 -0.000 0.000 0.000 + 0.000 0.972 -0.000 -0.000 -0.000 0.000 0.550 -0.000 0.000 0.000 + -0.000 -0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.343 -0.000 -0.000 + 0.000 -0.000 -0.000 0.974 -0.000 0.000 0.000 -0.000 0.470 -0.000 + -0.000 -0.000 -0.000 -0.000 0.981 0.000 0.000 -0.000 -0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101117835001630 Ha + Harris-Foulkes Energy : -250.564702280037068 Ha + Free Energy (E-TS) : -250.564717173644823 Ha + PulayMixSC: Pulay iteration 26 residual: 0.28205E-04 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 0.000 0.470 -0.000 -0.000 0.000 0.000 + 0.000 0.972 -0.000 -0.000 0.000 -0.000 0.550 0.000 0.000 -0.000 + 0.000 -0.000 0.981 -0.000 -0.000 -0.000 0.000 0.343 -0.000 -0.000 + 0.000 -0.000 0.000 0.974 0.000 0.000 0.000 -0.000 0.470 0.000 + 0.000 0.000 -0.000 0.000 0.982 0.000 -0.000 -0.000 0.000 0.343 + Atom: 2 Spin 1 Spin 2 + 0.974 -0.000 0.000 -0.000 0.000 0.469 -0.000 -0.000 0.000 0.000 + -0.000 0.972 0.000 -0.000 0.000 -0.000 0.550 -0.000 0.000 0.000 + 0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.342 -0.000 -0.000 + -0.000 0.000 0.000 0.974 -0.000 0.000 0.000 -0.000 0.469 -0.000 + 0.000 0.000 -0.000 -0.000 0.982 0.000 0.000 -0.000 -0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101115612969528 Ha + Harris-Foulkes Energy : -250.564701776407560 Ha + Free Energy (E-TS) : -250.564716909006592 Ha + PulayMixSC: Pulay iteration 27 residual: 0.16181E-04 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 0.000 -0.000 0.470 -0.000 -0.000 0.000 0.000 + -0.000 0.972 -0.000 0.000 0.000 -0.000 0.550 -0.000 0.000 0.000 + -0.000 -0.000 0.981 0.000 -0.000 -0.000 -0.000 0.343 -0.000 -0.000 + 0.000 0.000 0.000 0.974 -0.000 0.000 0.000 -0.000 0.470 -0.000 + -0.000 0.000 -0.000 -0.000 0.982 0.000 0.000 -0.000 -0.000 0.343 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 -0.000 0.000 0.470 -0.000 -0.000 0.000 0.000 + 0.000 0.972 0.000 -0.000 0.000 -0.000 0.550 -0.000 0.000 0.000 + 0.000 0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.342 -0.000 -0.000 + -0.000 -0.000 -0.000 0.974 0.000 0.000 0.000 -0.000 0.470 -0.000 + 0.000 0.000 -0.000 0.000 0.982 0.000 0.000 -0.000 -0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101114635481823 Ha + Harris-Foulkes Energy : -250.564701596787074 Ha + Free Energy (E-TS) : -250.564716711610856 Ha + PulayMixSC: Pulay iteration 28 residual: 0.73039E-05 + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 -0.000 -0.000 -0.000 0.470 0.000 -0.000 -0.000 0.000 + -0.000 0.972 0.000 0.000 0.000 0.000 0.550 -0.000 0.000 0.000 + -0.000 0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.343 0.000 -0.000 + -0.000 0.000 -0.000 0.974 -0.000 -0.000 0.000 0.000 0.470 -0.000 + 0.000 0.000 -0.000 -0.000 0.982 0.000 0.000 -0.000 -0.000 0.343 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 0.000 0.000 0.000 0.470 -0.000 -0.000 -0.000 0.000 + 0.000 0.972 0.000 -0.000 -0.000 -0.000 0.550 -0.000 0.000 0.000 + 0.000 0.000 0.981 0.000 -0.000 -0.000 -0.000 0.342 -0.000 -0.000 + 0.000 -0.000 -0.000 0.974 -0.000 -0.000 0.000 -0.000 0.470 0.000 + 0.000 -0.000 -0.000 -0.000 0.982 0.000 0.000 -0.000 0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101114555883787 Ha + Harris-Foulkes Energy : -250.564701704734119 Ha + Free Energy (E-TS) : -250.564716790769410 Ha + PulayMixSC: Pulay iteration 29 residual: 0.85697E-06 + PulayMixSC: Reached SCF tolerance of 0.85697E-06 after 29 iterations + | Number of electrons (u/d)= 18.703646 13.296378 + | GS Energy with kT -> 0 = -250.564714635621499 Ha + | Free Energy as E-TS = -250.564716790769410 Ha + |* Harris-Foulkes energy = -250.564701704734119 Ha + |* DFT total energy = -250.564701772704609 Ha + + force: Forces on atoms (Ha/a0) + force: Atom X Y Z + force: 1 -0.0021500525 -0.0000000000 -0.0000000000 + force: 2 0.0028072180 -0.0000000000 -0.0000000000 + + force: Maximum force : 0.00280722(Ha/a0) on atom 2 in x direction + force: Force Residual: 0.00250032 Ha/a0 + force: Total stress: -13.14995536 -17.85694703 -17.85694703 GPa + force: Average pressure: 16.28794981 GPa + + get_E_and_F: Change in energy during last step of electronic optimisation: -0.10795E-06 + + BIBLIOGRAPHY: Please consider citing the following references in the conquest.bib file + + CONQUEST: Bowler2002pt, Miyazaki2004, Nakata2020 + Basis: Bowler2019 + DM: Bowler:2006xr + Pseudopotentials: Hamann2013, Bowler2019 + XC functional: Perdew1996 + + Max total mem use is 1138.987 MB + + Total run time was: 202.557 seconds diff --git a/testsuite/test_009_DFT_plus_U/bccFe.in b/testsuite/test_009_DFT_plus_U/bccFe.in index 11c0e1e0b..c7e999a89 100644 --- a/testsuite/test_009_DFT_plus_U/bccFe.in +++ b/testsuite/test_009_DFT_plus_U/bccFe.in @@ -2,5 +2,5 @@ 0.000 5.365 0.000 0.000 0.000 5.365 2 -0.0 0.0 0.0 1 T T T +0.005 0.0 0.0 1 T T T 0.5 0.5 0.5 1 T T T From 3e7fc96e00526e02e2483e2be27e8d5e3799801d Mon Sep 17 00:00:00 2001 From: David Bowler Date: Fri, 29 May 2026 08:43:50 +0100 Subject: [PATCH 10/16] Fixing bug with atom movement I somehow deleted large parts of fmmi - now restored --- src/H_matrix_module.f90 | 2 +- src/mult_module.f90 | 72 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index d68b339c6..2e470a1f1 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -2047,7 +2047,7 @@ subroutine get_plusU_matrix(flag_rebuild) ! Local variables integer :: part, memb, neigh, ist, atom_num, atom_spec, iprim integer :: gcspart, neigh_global_part, neigh_global_num, neigh_species - real(double) :: dx, dy, dz, r2, trace, fac, val_Satomf, energy_plus_U + real(double) :: dx, dy, dz, r2, trace, fac, val_Satomf type(cq_timer) :: tmr_l_tmp1 integer :: spin, ipao, loc, npao_i, jpao, npao_j, pao_i, pao_j, pao_k, wheremat integer :: matW, matV, matnUP, matUP, matUW diff --git a/src/mult_module.f90 b/src/mult_module.f90 index 4bfdd8e2d..a75104ab3 100644 --- a/src/mult_module.f90 +++ b/src/mult_module.f90 @@ -1386,6 +1386,72 @@ subroutine fmmi(prim) mult(S_S_S)%gcs) if(atomf.ne.sf) deallocate(aSa_pairind) endif +!!! nakata DFT+U end + ! Comms + call deallocate_comms_data(mult(aHa_AP_AP)%comms) + call deallocate_comms_data(mult(L_S_LS)%comms) + call deallocate_comms_data(mult(L_H_LH)%comms) + call deallocate_comms_data(mult(T_S_TS)%comms) + !call deallocate_comms_data(mult(S_TS_S)%comms) + !call deallocate_comms_data(mult(S_LS_L)%comms) + call deallocate_comms_data(mult(SL_S_SLS)%comms) + call deallocate_comms_data(mult(LH_L_SLS)%comms) + call deallocate_comms_data(mult(LS_L_LSL)%comms) + call deallocate_comms_data(mult(HL_S_LSL)%comms) + call deallocate_comms_data(mult(HLS_LS_L)%comms) + !call deallocate_comms_data(mult(LSL_SL_L)%comms) + call deallocate_comms_data(mult(SLS_LS_L)%comms) + call deallocate_comms_data(mult(LHL_SL_S)%comms) + call deallocate_comms_data(mult(LSL_SL_H)%comms) + call deallocate_comms_data(mult(AP_PA_aHa)%comms) + call deallocate_comms_data(mult(TS_T_T)%comms) + call deallocate_comms_data(mult(TH_T_L)%comms) + call deallocate_comms_data(mult(T_H_TH)%comms) + call deallocate_comms_data(mult(T_L_TL)%comms) + call deallocate_comms_data(mult(TL_T_L)%comms) + if (atomf.ne.sf) then + call deallocate_comms_data(mult(aSa_sCaTr_aSs)%comms) + call deallocate_comms_data(mult(sCa_aSs_sSs)%comms) + call deallocate_comms_data(mult(aHa_sCaTr_aHs)%comms) + call deallocate_comms_data(mult(sCa_aHs_sHs)%comms) + call deallocate_comms_data(mult(sCaTr_sSs_aSs)%comms) + call deallocate_comms_data(mult(aSs_sCa_aSa)%comms) + call deallocate_comms_data(mult(sCaTr_sHs_aHs)%comms) + call deallocate_comms_data(mult(aHs_sCa_aHa)%comms) + call deallocate_comms_data(mult(sSs_sSa_sCa)%comms) + call deallocate_comms_data(mult(sHs_sHa_sCa)%comms) + if (flag_LFD) then + call deallocate_comms_data(mult(aLa_aSa_aLSa)%comms) + call deallocate_comms_data(mult(aLa_aHa_aLHa)%comms) + endif + endif + if( flag_neutral_atom_projector ) then + call deallocate_comms_data(mult(aNA_NAa_aHa)%comms) + call deallocate_comms_data(mult(aHa_aNA_aNA)%comms) + end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + call deallocate_comms_data(mult(S_S_S)%comms) + endif +!!! nakata DFT+U end + do i=1,mx_trans + do j = 1,gtrans(i)%n_rem_node!maxnabaprocs+1 + !if(associated(pairs(j,i)%submat)) deallocate(pairs(j,i)%submat) + deallocate(pairs(j,i)%submat) + end do + end do + deallocate(pairs) + deallocate(Spairind, Lpairind, APpairind, LSpairind, LHpairind, & + LSLpairind, Tpairind) + if (atomf.ne.sf) deallocate(aSs_pairind, aHs_pairind, SFcoeff_pairind) + if(flag_neutral_atom_projector) then + deallocate(aNApairind) + if(atomf.ne.sf) deallocate(aNAapairind) + end if +!!! 2024.05.20 nakata DFT+U + if (flag_DFTplusU) then + if(atomf.ne.sf) deallocate(aSa_pairind) + endif !!! nakata DFT+U end call dissociate_matrices ! Matrices @@ -1409,7 +1475,11 @@ subroutine fmmi(prim) call end_ops(prim,SXrange,SXmatind) call end_ops(prim,Xrange,Xmatind) if (atomf.ne.sf) then - call end_ops(prim,aSa_range,aSa_matind) + if(flag_DFTplusU) then + call end_ops(prim,aSa_range,aSa_matind,aSa_trans) + else + call end_ops(prim,aSa_range,aSa_matind) + end if call end_ops(prim,aHa_range,aHa_matind) call end_ops(prim,STr_range,STr_matind) call end_ops(prim,HTr_range,HTr_matind) From cd7ee0aacc8e8f43b3c1815bdd4cd85165fe41c7 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 17 Jun 2026 14:27:37 +0100 Subject: [PATCH 11/16] Tidying and documentation for DFT+U Moved calculation of occupation matrix to new subroutine. Added documentation. --- docs/groundstate.rst | 32 ++ docs/references.bib | 14 + src/H_matrix_module.f90 | 327 +++++++++++------- src/force_module.f90 | 4 +- src/global_module.f90 | 5 +- src/initial_read_module.f90 | 3 +- src/initialisation_module.f90 | 4 +- src/minimise.f90 | 7 +- .../test_009_DFT_plus_U/Conquest_out.ref | 32 +- 9 files changed, 278 insertions(+), 150 deletions(-) diff --git a/docs/groundstate.rst b/docs/groundstate.rst index 3a09a85ef..354f8db46 100644 --- a/docs/groundstate.rst +++ b/docs/groundstate.rst @@ -393,6 +393,38 @@ cell (or some important length scale in your system). Go to :ref:`top `. +.. _gs_func_hubbard_U: + +Hubbard U and XC Functionals +---------------------------- + +CONQUEST now supports the DFT+U formalism, as described by :cite:`g-Cococcioni:2005aa`. +The relevant input tags are: + +:: + + DM.DFTplusU T + DM.WriteOccMat T (default) + + # Species, n, l, zeta, U (Ha) + %block DFTplusU + 1 3 2 1 0.0772 + %endblock + +The ``DFTplusU`` block specifies the projectors onto the correlated subspace (at present +these must be PAOs) and requires one line per species. The block specifies n, l, zeta +and the value of U (in Hartrees). We strongly recommend that PAOs created with +equal energies are used (in the PAO generation, add ``Atom.Cutoffs energy`` to the +atom block), and that the largest radius zeta function (i.e. zeta=1) is used. Careful +testing is needed for the projectors and an appropriate value of U (we note that when using +the same pseudopotentials, CONQUEST and QuantumEspresso calculations agree very well). + +The exchange-correlation (XC) functional is (almost always) set by the ion files +used to specify the elements (and generated by the :ref:`PAO generation ` tool). +It is possible to run a calculation using a different XC functional to the ion +files by setting ``General.DifferentFunctional T`` and ``General.FunctionalType `` which +is documented in the :ref:`General ` section of the input tags documentation. + .. _gs_suppfunc: Support functions diff --git a/docs/references.bib b/docs/references.bib index 606a2df95..e39ca8fa1 100644 --- a/docs/references.bib +++ b/docs/references.bib @@ -708,4 +708,18 @@ @article{Neugebauer1992 pages = {16067--16080}, year = {1992}, doi = {10.1103/PhysRevB.46.16067} +} +@article{Cococcioni:2005aa, + title = {Linear response approach to the calculation of the effective interaction parameters in the $\mathrm{LDA}+\mathrm{U}$ method}, + author = {Cococcioni, Matteo and de Gironcoli, Stefano}, + journal = {Phys. Rev. B}, + volume = {71}, + issue = {3}, + pages = {035105}, + numpages = {16}, + year = {2005}, + month = {Jan}, + publisher = {American Physical Society}, + doi = {10.1103/PhysRevB.71.035105}, + url = {https://link.aps.org/doi/10.1103/PhysRevB.71.035105} } \ No newline at end of file diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index 2e470a1f1..eeaf76551 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -1984,24 +1984,16 @@ end subroutine matrix_scale_diag !! !! PURPOSE !! -!! Getting matHplusUatomf and matEplusUatomf for DFT+U +!! Getting matHplusUatomf !! -!! matHplusUatomf: H(DFT+U) = U/2 * (P-2PKP) +!! matHplusUatomf: H(DFT+U) = U/2 * (P-2nP) !! -!! matEplusUatomf: E(DFT+U) = U/2 * (PK-PKPK) -!! (construct (P-PKP) here, -!! and another K will be multiplied later in sub:get_energy) -!! -!! -!! K = density matrix in atomf -!! P = V * O * W +!! P = V * W !! W = < proj(i,m) | pao(j,n) > -!! O = < proj(i,m') | proj(i,m) > !! V = transpose of W +!! n = occupation matrix !! -!! At present, -!! projector functions are assumed to be one of the PAOs of projector atoms, -!! so OW = W. +!! At present, projector functions are assumed to be one of the PAOs of projector atoms !! !! This subroutine is called in sub:get_H_matrix in H_matrix_module.f90. !! @@ -2014,7 +2006,8 @@ end subroutine matrix_scale_diag !! CREATION DATE !! 2023/05/01 !! MODIFICATION HISTORY -!! +!! 2026/06/16 dave +!! Reworking to use Conquest implementation of DFT+U !! SOURCE !! subroutine get_plusU_matrix(flag_rebuild) @@ -2028,14 +2021,14 @@ subroutine get_plusU_matrix(flag_rebuild) use primary_module, ONLY: bundle use cover_module, ONLY: BCS_parts use matrix_data, ONLY: mat, halo, aSa_range, aHa_range - use mult_module, ONLY: mult, mat_p, allocate_temp_matrix, free_temp_matrix, matrix_pos, & - return_matrix_value, return_matrix_value_pos, store_matrix_value_pos, & + use mult_module, ONLY: mult, allocate_temp_matrix, free_temp_matrix, matrix_pos, & + return_matrix_value_pos, store_matrix_value_pos, & matrix_product, matrix_scale, matrix_transpose, matrix_sum, & - matKatomf, matHplusUatomf, matHatomf, matSatomf,& - aSa_trans, S_S_S, matrix_trace, matrix_product_trace + matKatomf, matHplusUatomf, matSatomf,& + aSa_trans, S_S_S, matrix_product_trace use species_module, ONLY: npao_species use timer_module - use pao_format + use pao_format, ONLY: pao use energy, ONLY: delta_E_plusU, plusU_energy use units @@ -2055,93 +2048,10 @@ subroutine get_plusU_matrix(flag_rebuild) integer :: iU, l1, nacz1, m1, n_U, l_U, z_U, m_U, m2, i_ang, i_zeta, z_temp, prncpl call start_timer(tmr_l_tmp1,WITH_LEVEL) - if(iprint_ops + min_layer>=5.AND.myid==0) write(io_lun,'(6x,A)') ' We are in set_OW' - - ! Use nUP as temporary storage in making SKS - matnUP = allocate_temp_matrix(aHa_range, aSa_trans, atomf, atomf) - do spin=1,nspin - matSKS(spin) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) - end do delta_E_plusU = zero - plusU_energy = zero - occ_mat = zero - ! Find SKS for both spin components - do spin=1,nspin - call matrix_product(matSatomf,matKatomf(spin),matnUP,mult(S_S_S)) ! S_S_S - call matrix_product(matnUP, matSatomf, matSKS(spin), mult(S_S_S)) ! SKS is now in P - end do - ! Make occupancy matrix - if(iprint_ops + min_layer>=1.AND.myid==0) write(io_lun,fmt='(4x,"Occupation matrix")') - trace = zero - iprim = 0 - do part = 1,bundle%groups_on_node ! Loop over primary set partitions - if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition - do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms - atom_num = bundle%nm_nodbeg(part)+memb-1 - iprim=iprim+1 - ! Atomic species - atom_spec = bundle%species(atom_num) - ! If iprim is a DFT+U projector atom - if(flag_plusUproj_atom(atom_spec)) then - ! Calculate occupation matrix - n_U = info_plusUproj(atom_spec,1) - l_U = info_plusUproj(atom_spec,2) - z_U = info_plusUproj(atom_spec,3) - m_U = 2*l_U + 1 - pao_i = 0 - do i_ang= 0, pao(atom_spec)%greatest_angmom ! l - if(i_ang==l_U) then - z_temp = 0 ! Number of zeta functions for this n,l combination - do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom - prncpl = pao(atom_spec)%angmom(i_ang)%prncpl(i_zeta) - if (prncpl/=n_U) then - pao_i = pao_i + 2*i_ang + 1 - else if (prncpl==n_U) then - z_temp = z_temp + 1 - if(z_temp==z_U) then - do m1 = 1, m_U - do m2 = 1, m_U - do spin=1,nspin - val_Satomf = return_matrix_value(matSKS(spin),part,memb,iprim,1,pao_i+m2,pao_i+m1,1) - occ_mat(m2,m1,iprim,spin) = occ_mat(m2,m1,iprim,spin) + val_Satomf - end do - end do - end do - end if - pao_i = pao_i + 2*i_ang + 1 - end if - end do ! i_zeta - else - do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom - pao_i = pao_i + 2*i_ang + 1 - end do - end if ! i = l_U - end do - ! Output occupation numbers and find energy - if(iprint_ops + min_layer>=1.AND.myid==0) then - if(nspin==1) write(io_lun,fmt='(4x,"Atom: ",i7,8x,"Spin 1")') bundle%ig_prim(iprim) - if(nspin==2) write(io_lun,fmt='(4x,"Atom: ",i7,8x,"Spin 1",38x,"Spin 2")') bundle%ig_prim(iprim) - end if - do m1 = 1,m_U - if(iprint_ops + min_layer>=1.AND.myid==0) & - write(io_lun,fmt='(6x,5f8.3,4x,5f8.3)') occ_mat(1:m_U,m1,iprim,1:nspin) - do spin=1,nspin - trace = trace + occ_mat(m1,m1,iprim,spin) - plusU_energy = plusU_energy + half*plusUvalue(atom_spec)*occ_mat(m1,m1,iprim,spin) - do m2 = 1, m_U - plusU_energy = plusU_energy - half*plusUvalue(atom_spec)* & - occ_mat(m1,m2,iprim,spin)*occ_mat(m2,m1,iprim,spin) - end do - end do - end do - endif ! projector - end do ! memb - end if ! nm_nodgroup > 0 - end do ! part - !end do! spin - do spin=nspin,1,-1 - call free_temp_matrix(matSKS(spin)) - end do + ! Get occupation matrix + call get_occ_matrix() + ! Allocate matrices matW = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) matV = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) matUW = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) @@ -2156,7 +2066,6 @@ subroutine get_plusU_matrix(flag_rebuild) call matrix_scale(zero,matnUW(spin)) end do ! make W and UW - trace = zero iprim = 0 do part = 1,bundle%groups_on_node ! Loop over primary set partitions if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition @@ -2188,61 +2097,67 @@ subroutine get_plusU_matrix(flag_rebuild) pao_i=0 do i_ang= 0, pao(atom_spec)%greatest_angmom ! l if(i_ang==l_U) then + z_temp = 0 ! Number of zeta functions for this n,l combination do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom - if(i_zeta==z_U) then - fac = half_w_plusUproj_pao(atom_spec,pao_i+1) - do m1 = 1, m_U - do pao_j = 1, npao_j - wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m1,pao_j) - val_Satomf = return_matrix_value_pos(matSatomf,wheremat) - call store_matrix_value_pos(matW, wheremat,val_Satomf) - call store_matrix_value_pos(matUW, wheremat,val_Satomf*fac) - do m2 = 1, m_U - wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m2,pao_j) - do spin=1,nspin - call store_matrix_value_pos(matnUW(spin), wheremat,val_Satomf*fac*occ_mat(m1,m2,iprim,spin)) - end do - end do - end do ! pao_j - end do + prncpl = pao(atom_spec)%angmom(i_ang)%prncpl(i_zeta) + if (prncpl/=n_U) then pao_i = pao_i + 2*i_ang + 1 - else + else if (prncpl==n_U) then + z_temp = z_temp + 1 + if(z_temp==z_U) then + fac = half_w_plusUproj_pao(atom_spec,pao_i+1) + do m1 = 1, m_U + do pao_j = 1, npao_j + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m1,pao_j) + val_Satomf = return_matrix_value_pos(matSatomf,wheremat) + call store_matrix_value_pos(matW, wheremat,val_Satomf) + call store_matrix_value_pos(matUW, wheremat,val_Satomf*fac) + do m2 = 1, m_U + wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m2,pao_j) + do spin=1,nspin + call store_matrix_value_pos(matnUW(spin), wheremat,val_Satomf*fac*occ_mat(m1,m2,iprim,spin)) + end do + end do + end do ! pao_j + end do + end if ! z_temp pao_i = pao_i + 2*i_ang + 1 - end if + end if ! prncpl enddo ! i_zeta else do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom pao_i = pao_i + 2*i_ang + 1 end do end if - enddo ! pao_i + enddo ! i_ang end do ! neigh endif ! projector end do ! memb end if ! nm_nodgroup > 0 end do ! part - !write(io_lun,*) 'Trace of n is ',trace ! make V = transpose of W call matrix_transpose(matW, matV) ! Create PU, which is V.UW (include U here to allow different U for different atoms) call matrix_product(matV, matUW, matUP, mult(S_S_S))!S_S_S + matnUP = allocate_temp_matrix(aHa_range, aSa_trans, atomf, atomf) ! Make nUP do spin=1,nspin ! Probably we need to zero rows of PK before doing this for safety call matrix_product(matV, matnUW(spin), matnUP, mult(S_S_S))!S_S_S - ! H(DFT+U) = U/2 * (P-2PKP) + ! H(DFT+U) = U/2 * (P-2nP) call matrix_sum(zero, matHplusUatomf(spin), one , matUP) call matrix_sum(one, matHplusUatomf(spin), -two, matnUP) ! Double counting term trace = matrix_product_trace(matKatomf(spin),matnUP) delta_E_plusU = delta_E_plusU + trace ! Includes gsum enddo ! spin - call gsum(plusU_energy) - if (iprint_ops + min_layer >=1 .and. myid==0) write (io_lun,& - '(10x,"plusU Energy, 2Tr[0.5U(n - n^2)] : ",f25.15," ",a2)')& - en_conv*plusU_energy, en_units(energy_units) + call free_temp_matrix(matnUP) + !call gsum(plusU_energy) + !if (iprint_ops + min_layer >=1 .and. myid==0) write (io_lun,& + ! '(10x,"plusU Energy, 2Tr[0.5U(n - n^2)] : ",f25.15," ",a2)')& + ! en_conv*plusU_energy, en_units(energy_units) call free_temp_matrix(matUP) do spin=nspin,1,-1 call free_temp_matrix(matnUW(spin)) @@ -2250,7 +2165,6 @@ subroutine get_plusU_matrix(flag_rebuild) call free_temp_matrix(matUW) call free_temp_matrix(matV) call free_temp_matrix(matW) - call free_temp_matrix(matnUP) call stop_print_timer(tmr_l_tmp1,"get_plusU_matrix",IPRINT_TIME_THRES2) ! @@ -2258,4 +2172,153 @@ subroutine get_plusU_matrix(flag_rebuild) end subroutine get_plusU_matrix !!*** +!!****f* H_matrix_module/get_occ_matrix * +!! +!! NAME +!! get_occ_matrix +!! +!! PURPOSE +!! +!! Calculates the occupation matrix for sites where U will be applied +!! +!! Projector functions are assumed to be one of the PAOs of projector atoms +!! +!! INPUTS +!! +!! USES +!! +!! AUTHOR +!! D.R.Bowler +!! CREATION DATE +!! 2026/06/15 +!! MODIFICATION HISTORY +!! +!! SOURCE +!! + subroutine get_occ_matrix + + use datatypes + use numbers + use global_module, ONLY: nspin, occ_mat, occ_mat_glob, flag_write_occ_mat, & + atomf, iprint_ops, min_layer, flag_first_diag, ni_in_cell, id_glob, species_glob + use energy, ONLY: plusU_energy + use GenComms, ONLY: cq_abort, myid, inode, ionode, gsum + use primary_module, ONLY: bundle + use matrix_data, ONLY: aSa_range + use mult_module, ONLY: mult, allocate_temp_matrix, free_temp_matrix, & + return_matrix_value, matrix_product, matKatomf, matSatomf, aSa_trans, S_S_S + use pao_format, ONLY: pao + use species_module, ONLY: species + use units + + implicit none + + integer :: matSK, spin, iprim, part, memb, atom_num, atom_spec, n_U, l_U, z_U, m_U + integer :: pao_i, i_ang, z_temp, i_zeta, prncpl, m1, m2, i_atom, glob_atom + integer, dimension(2) :: matSKS + real(double) :: val_Satomf + + matSK = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + do spin=1,nspin + matSKS(spin) = allocate_temp_matrix(aSa_range, aSa_trans, atomf, atomf) + end do + plusU_energy = zero + occ_mat = zero + if(flag_write_occ_mat) occ_mat_glob = zero + ! Find SKS for both spin components + do spin=1,nspin + call matrix_product(matSatomf,matKatomf(spin),matSK,mult(S_S_S)) ! S_S_S + call matrix_product(matSK, matSatomf, matSKS(spin), mult(S_S_S)) ! SKS is now in P + end do + ! Make occupancy matrix + iprim = 0 + do part = 1,bundle%groups_on_node ! Loop over primary set partitions + if(bundle%nm_nodgroup(part)>0) then ! If there are atoms in partition + do memb = 1,bundle%nm_nodgroup(part) ! Loop over atoms + atom_num = bundle%nm_nodbeg(part)+memb-1 + iprim=iprim+1 + ! Atomic species + atom_spec = bundle%species(atom_num) + ! If iprim is a DFT+U projector atom + if(flag_plusUproj_atom(atom_spec)) then + ! Calculate occupation matrix + n_U = info_plusUproj(atom_spec,1) + l_U = info_plusUproj(atom_spec,2) + z_U = info_plusUproj(atom_spec,3) + m_U = 2*l_U + 1 + pao_i = 0 + do i_ang= 0, pao(atom_spec)%greatest_angmom ! l + if(i_ang==l_U) then + z_temp = 0 ! Number of zeta functions for this n,l combination + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + prncpl = pao(atom_spec)%angmom(i_ang)%prncpl(i_zeta) + if (prncpl/=n_U) then + pao_i = pao_i + 2*i_ang + 1 + else if (prncpl==n_U) then + z_temp = z_temp + 1 + if(z_temp==z_U) then + do m1 = 1, m_U + do m2 = 1, m_U + do spin=1,nspin + val_Satomf = return_matrix_value(matSKS(spin),part,memb,iprim,1,pao_i+m2,pao_i+m1,1) + occ_mat(m2,m1,iprim,spin) = val_Satomf + if(flag_write_occ_mat) occ_mat_glob(m2,m1,bundle%ig_prim(iprim),spin) = val_Satomf + end do + end do + end do + end if ! z_temp + pao_i = pao_i + 2*i_ang + 1 + end if ! prncpl + end do ! i_zeta + else + do i_zeta = 1, pao(atom_spec)%angmom(i_ang)%n_zeta_in_angmom + pao_i = pao_i + 2*i_ang + 1 + end do + end if ! i_ang = l_U + end do ! i_ang + ! Find energy (occupation matrix output in get_occ_mat + do m1 = 1,m_U + do spin=1,nspin + plusU_energy = plusU_energy + half*plusUvalue(atom_spec)*occ_mat(m1,m1,iprim,spin) + do m2 = 1, m_U + plusU_energy = plusU_energy - half*plusUvalue(atom_spec)* & + occ_mat(m1,m2,iprim,spin)*occ_mat(m2,m1,iprim,spin) + end do + end do + end do + endif ! projector + end do ! memb + end if ! nm_nodgroup > 0 + end do ! part + call gsum(plusU_energy) + ! Write out matrix + if(flag_write_occ_mat) then + ! Collect occupation matrix from all processes + call gsum(occ_mat_glob,7,7,ni_in_cell,nspin) + ! Output only on I/O process + if(myid==0) then + write(io_lun,fmt='(4x,"Occupation matrix")') + do i_atom = 1, ni_in_cell + atom_spec = species_glob(i_atom) + if(flag_plusUproj_atom(atom_spec)) then + if(nspin==1) write(io_lun,fmt='(4x,"Atom: ",i7,8x,"Spin 1")') i_atom + if(nspin==2) write(io_lun,fmt='(4x,"Atom: ",i7,8x,"Spin 1",38x,"Spin 2")') i_atom + m_U = 2*info_plusUproj(atom_spec,2) + 1 + do m1 = 1,m_U + write(io_lun,fmt='(6x,5f8.3,4x,5f8.3)') occ_mat_glob(1:m_U,m1,i_atom,1:nspin) + end do + end if + end do ! i_atom = ni_in_cell + end if + end if ! write_occ_mat + if (iprint_ops + min_layer >=1 .and. myid==0) write (io_lun,& + '(10x,"plusU Energy, 2Tr[0.5U(n - n^2)] : ",f25.15," ",a2)')& + en_conv*plusU_energy, en_units(energy_units) + do spin=nspin,1,-1 + call free_temp_matrix(matSKS(spin)) + end do + call free_temp_matrix(matSK) + return + end subroutine get_occ_matrix +!!*** end module H_matrix_module diff --git a/src/force_module.f90 b/src/force_module.f90 index 0f598a911..beb0399fb 100644 --- a/src/force_module.f90 +++ b/src/force_module.f90 @@ -2598,10 +2598,8 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) do pao_j = 1, npao_j ! Get location using Satomf indexing wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i,pao_j) - ! Now find value of dS + ! Now find value of dS and scale by U val_Satomf = return_matrix_value_pos(mat_tmp,wheremat) - ! We assume the projector functions are simply chosen from PAOs, - ! so OW = W = call store_matrix_value_pos(matdUW(dir1), wheremat,val_Satomf*fac) if (flag_stress) then if (flag_full_stress) then diff --git a/src/global_module.f90 b/src/global_module.f90 index 3b39dd2f3..11166751a 100644 --- a/src/global_module.f90 +++ b/src/global_module.f90 @@ -427,8 +427,9 @@ module global_module integer, dimension(3) :: i_pol_dir ! Either n,0,0 or 1,2,3 ! DFT+U - logical :: flag_DFTplusU, flag_first_diag - real(double), dimension(:,:,:,:), allocatable :: occ_mat ! Occupation matrix by primary atom + logical :: flag_DFTplusU, flag_first_diag, flag_write_occ_mat + real(double), dimension(:,:,:,:), allocatable :: occ_mat ! Occupation matrix (m,m,primary atom, spin) + real(double), dimension(:,:,:,:), allocatable :: occ_mat_glob ! Occupation matrix (m,m,global atom, spin) ! Density matrix Lagrange multiplier for correct electron number (needed for forces and stress) real(double), dimension(2) :: mu_DMM ! Allow for spin diff --git a/src/initial_read_module.f90 b/src/initial_read_module.f90 index d0f09e272..aab12b861 100644 --- a/src/initial_read_module.f90 +++ b/src/initial_read_module.f90 @@ -929,7 +929,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_write_projected_DOS, & E_wf_min, E_wf_max, flag_wf_range_Ef, & mx_temp_matrices, flag_neutral_atom, flag_diagonalisation, & - flag_DFTplusU, flag_first_diag, & ! 2024.05.20 nakata DFT+U + flag_DFTplusU, flag_first_diag, flag_write_occ_mat, & flag_SpinDependentSF, flag_Multisite, flag_LFD, flag_SFcoeffReuse, & flag_opt_cell, cell_constraint_flag, flag_variable_cell, & cell_en_tol, optcell_method, cell_stress_tol, & @@ -1981,6 +1981,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& !!$ !!$ if (flag_DFTplusU) then + flag_write_occ_mat = fdf_boolean('DM.WriteOccMat',.true.) if (fdf_block('DFTplusU')) then num_plusUproj = 1 + block_end - block_start !if(inode==ionode) write(io_lun,*) 'num_plusUproj =',num_plusUproj ! nakata 2024 debug diff --git a/src/initialisation_module.f90 b/src/initialisation_module.f90 index 522891a68..66223a825 100644 --- a/src/initialisation_module.f90 +++ b/src/initialisation_module.f90 @@ -334,7 +334,8 @@ subroutine set_up(find_chdens,level) iprint_gen, flag_perform_cDFT, & nspin, min_layer, & glob2node, flag_XLBOMD, & - flag_neutral_atom, flag_diagonalisation, occ_mat + flag_neutral_atom, flag_diagonalisation, & + flag_write_occ_mat, occ_mat, occ_mat_glob use memory_module, only: reg_alloc_mem, reg_dealloc_mem, & type_dbl, type_int use group_module, only: parts @@ -490,6 +491,7 @@ subroutine set_up(find_chdens,level) write (io_lun,fmt='(4x,a)') trim(prefix)//'Made covering set for matrix multiplications' allocate(occ_mat(7,7,bundle%n_prim,nspin)) + if(flag_write_occ_mat) allocate(occ_mat_glob(7,7,ni_in_cell,nspin)) ! Create all of the indexing required to perform matrix multiplications ! at a later point. This routine also identifies all the density ! matrix range interactions and hamiltonian range interactions diff --git a/src/minimise.f90 b/src/minimise.f90 index aaaa613d0..d119869c6 100644 --- a/src/minimise.f90 +++ b/src/minimise.f90 @@ -154,7 +154,8 @@ subroutine get_E_and_F(fixed_potential, vary_mu, total_energy, & flag_multisite, iprint_minE, & io_lun, flag_out_wf, wf_self_con, flag_write_projected_DOS, & flag_diagonalisation, nspin, flag_LFD, min_layer, & - flag_DM_converged, write_ase, flag_calc_pol, flag_Becke_weights + flag_DM_converged, write_ase, flag_calc_pol, flag_Becke_weights, & + flag_DFTplusU use energy, only: get_energy, xc_energy, final_energy use GenComms, only: cq_abort, inode, ionode, cq_warn use blip_minimisation, only: vary_support, dE_blip @@ -167,7 +168,7 @@ subroutine get_E_and_F(fixed_potential, vary_mu, total_energy, & use units use io_module, only: return_prefix use DiagModule, only: nkp - use H_matrix_module, only: flag_write_locps, locps_output, get_H_matrix + use H_matrix_module, only: flag_write_locps, locps_output, get_H_matrix, get_occ_matrix use maxima_module, only: maxngrid use polarisation, only: get_polarisation @@ -369,6 +370,8 @@ subroutine get_E_and_F(fixed_potential, vary_mu, total_energy, & end if end if + ! Get occupation matrix for output density matrix + if(flag_DFTplusU) call get_occ_matrix !****lat<$ call final_energy(nkp,backtrace_level) !****lat>$ diff --git a/testsuite/test_009_DFT_plus_U/Conquest_out.ref b/testsuite/test_009_DFT_plus_U/Conquest_out.ref index 1cc389936..06ff1b40a 100644 --- a/testsuite/test_009_DFT_plus_U/Conquest_out.ref +++ b/testsuite/test_009_DFT_plus_U/Conquest_out.ref @@ -35,9 +35,9 @@ This calculation includes non-local pseudopotentials, with a maximum core radius of 8.62850983 - This job was run on 2026/05/27 at 12:51 +0100 - Code was compiled on 2026/05/27 at 11:29 +0100 - Version comment: Git Branch: f-DFT-plus-U; tag, hash: v1.5-20-gd5fff5c7 + This job was run on 2026/06/17 at 13:52 +0100 + Code was compiled on 2026/06/17 at 13:51 +0100 + Version comment: Git Branch: f-DFT-plus-U; tag, hash: v1.5-22-g3e7fc96e Job title: Job to be run: static calculation @@ -565,21 +565,35 @@ Free Energy (E-TS) : -250.564716790769410 Ha PulayMixSC: Pulay iteration 29 residual: 0.85697E-06 PulayMixSC: Reached SCF tolerance of 0.85697E-06 after 29 iterations + Occupation matrix + Atom: 1 Spin 1 Spin 2 + 0.974 -0.000 0.000 -0.000 0.000 0.470 -0.000 -0.000 -0.000 0.000 + -0.000 0.972 -0.000 0.000 -0.000 -0.000 0.550 -0.000 0.000 0.000 + 0.000 -0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.343 -0.000 -0.000 + -0.000 0.000 -0.000 0.974 0.000 -0.000 0.000 -0.000 0.470 -0.000 + 0.000 -0.000 -0.000 0.000 0.982 0.000 0.000 -0.000 -0.000 0.343 + Atom: 2 Spin 1 Spin 2 + 0.974 0.000 -0.000 -0.000 0.000 0.470 -0.000 -0.000 -0.000 0.000 + 0.000 0.972 -0.000 0.000 -0.000 -0.000 0.550 -0.000 0.000 0.000 + -0.000 -0.000 0.981 -0.000 -0.000 -0.000 -0.000 0.343 -0.000 -0.000 + 0.000 0.000 -0.000 0.974 0.000 -0.000 0.000 -0.000 0.470 0.000 + 0.000 -0.000 -0.000 0.000 0.982 0.000 0.000 -0.000 0.000 0.343 + plusU Energy, 2Tr[0.5U(n - n^2)] : 0.101114620388248 Ha | Number of electrons (u/d)= 18.703646 13.296378 | GS Energy with kT -> 0 = -250.564714635621499 Ha | Free Energy as E-TS = -250.564716790769410 Ha |* Harris-Foulkes energy = -250.564701704734119 Ha - |* DFT total energy = -250.564701772704609 Ha + |* DFT total energy = -250.564701708200147 Ha force: Forces on atoms (Ha/a0) force: Atom X Y Z - force: 1 -0.0021500525 -0.0000000000 -0.0000000000 - force: 2 0.0028072180 -0.0000000000 -0.0000000000 + force: 1 -0.0021500528 -0.0000000000 -0.0000000000 + force: 2 0.0028072182 -0.0000000000 -0.0000000000 force: Maximum force : 0.00280722(Ha/a0) on atom 2 in x direction force: Force Residual: 0.00250032 Ha/a0 - force: Total stress: -13.14995536 -17.85694703 -17.85694703 GPa - force: Average pressure: 16.28794981 GPa + force: Total stress: -13.14995272 -17.85694357 -17.85694357 GPa + force: Average pressure: 16.28794662 GPa get_E_and_F: Change in energy during last step of electronic optimisation: -0.10795E-06 @@ -593,4 +607,4 @@ Max total mem use is 1138.987 MB - Total run time was: 202.557 seconds + Total run time was: 225.800 seconds From 9dc39d5fb4858ade446fe6f54519cf812abdff02 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 17 Jun 2026 15:52:51 +0100 Subject: [PATCH 12/16] Small tweaks to DFT+U Removing trailing space and tidying matrix numbers --- src/initial_read_module.f90 | 13 +++++-------- src/matrix_data_module.f90 | 5 +---- src/mult_module.f90 | 3 +-- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/initial_read_module.f90 b/src/initial_read_module.f90 index aab12b861..2a2a77396 100644 --- a/src/initial_read_module.f90 +++ b/src/initial_read_module.f90 @@ -1867,13 +1867,10 @@ subroutine read_input(start, start_L, titles, vary_mu,& flag_write_projected_DOS = fdf_boolean('IO.write_proj_DOS',.false.) if(flag_write_projected_DOS) then if(flag_diagonalisation) then - flag_write_projected_DOS = fdf_boolean('IO.write_proj_DOS',.false.) - if(flag_write_projected_DOS) then - flag_out_wf = .true. - E_wf_min = fdf_double('IO.min_wf_E',-BIG) - E_wf_max = fdf_double('IO.max_wf_E',BIG) - flag_wf_range_Ef = fdf_boolean('IO.WFRangeRelative',.true.) - end if + flag_out_wf = .true. + E_wf_min = fdf_double('IO.min_wf_E',-BIG) + E_wf_max = fdf_double('IO.max_wf_E',BIG) + flag_wf_range_Ef = fdf_boolean('IO.WFRangeRelative',.true.) else flag_write_projected_DOS = .false. if(inode==ionode) write(io_lun,'(2x,"Setting IO.write_proj_DOS F as solving O(N)")') @@ -1998,7 +1995,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& info_plusUproj(i_species,1) = n_plusUproj info_plusUproj(i_species,2) = l_plusUproj info_plusUproj(i_species,3) = z_plusUproj - flag_plusUproj_atom(i_species) = .true. + flag_plusUproj_atom(i_species) = .true. enddo ! n_plusUproj call fdf_endblock else diff --git a/src/matrix_data_module.f90 b/src/matrix_data_module.f90 index 855319837..6d48e2ca6 100644 --- a/src/matrix_data_module.f90 +++ b/src/matrix_data_module.f90 @@ -62,8 +62,6 @@ !! which are no longer used !! 2017/12/05 10:20 dave (with TM and NW (Mizuho)) !! Adding new matrix indices (aNA and NAa) for atom function - NA projectors -!! 2024/05/22 14:40 nakata -!! Adding new matrix indices (PK, pUa, aUp, pUp and aUa) for atom function - DFT+U !! 2025/02/06 14:30 nakata !! aSs_in_sSs_range and aSs_in_sSs_matind were added !! and mx_matrices was changed from 32 to 33 for pDOS with MSSFs @@ -78,8 +76,7 @@ module matrix_data save ! This will need to change if the above parameters are changed -! integer, parameter :: mx_matrices = 32 ! 2024.05.20 nakata DFT+U - integer, parameter :: mx_matrices = 54 ! From 37... + integer, parameter :: mx_matrices = 33 ! Store ALL indices in a large array type(matrix), allocatable, dimension(:,:), target :: mat diff --git a/src/mult_module.f90 b/src/mult_module.f90 index a75104ab3..bfe70418b 100644 --- a/src/mult_module.f90 +++ b/src/mult_module.f90 @@ -180,7 +180,6 @@ module mult_module integer :: aNAa_trans ! 12 integer :: aSa_trans ! 13 !!! 2024.05.20 nakata DFT+U -! integer(integ), parameter :: mx_trans = 12 integer(integ), parameter :: mx_trans = 13 !!! DFT+U type(pair_data), allocatable, dimension(:,:) :: pairs @@ -588,7 +587,7 @@ subroutine immi(parts, prim, gcs, myid, partial) call trans_ini(parts, prim, gcs, mat(1:prim%groups_on_node,aSa_range), & myid-1, halo(aSa_range), halo(aSa_range), ltrans(aSa_range), & gtrans(aSa_trans), pairs(:,aSa_trans), aSa_pairind) - else + else aSa_trans = S_trans endif endif From 663ef13ff5e8148f2f2810778764169353d2b725 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 17 Jun 2026 16:00:23 +0100 Subject: [PATCH 13/16] Fix line length problem GitHub CI flagged a line over 132 characters --- src/H_matrix_module.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index eeaf76551..b340ff2d9 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -2115,7 +2115,8 @@ subroutine get_plusU_matrix(flag_rebuild) do m2 = 1, m_U wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m2,pao_j) do spin=1,nspin - call store_matrix_value_pos(matnUW(spin), wheremat,val_Satomf*fac*occ_mat(m1,m2,iprim,spin)) + call store_matrix_value_pos(matnUW(spin), wheremat, & + val_Satomf*fac*occ_mat(m1,m2,iprim,spin)) end do end do end do ! pao_j From 8dd4c94d5172d297f9abcdf2cf2479265f9c3b64 Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 17 Jun 2026 16:07:31 +0100 Subject: [PATCH 14/16] Another line length issue --- src/force_module.f90 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/force_module.f90 b/src/force_module.f90 index beb0399fb..3f8c0afae 100644 --- a/src/force_module.f90 +++ b/src/force_module.f90 @@ -2690,7 +2690,8 @@ subroutine get_DFT_plus_U_force(DFT_plus_U_force, n_atoms) do m2 = 1, m_U wheremat = matrix_pos(matSatomf,iprim,halo(aSa_range)%i_halo(gcspart),pao_i+m2,pao_j) do spin=1,nspin - call store_matrix_value_pos(matnW(spin), wheremat,val_Satomf*occ_mat(m1,m2,iprim,spin)) + call store_matrix_value_pos(matnW(spin), wheremat, & + val_Satomf*occ_mat(m1,m2,iprim,spin)) end do end do end do ! pao_j From 13410d202b35a8241a73e073198e39eda017689f Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 17 Jun 2026 16:44:28 +0100 Subject: [PATCH 15/16] Add test009 to GitHub yaml makefile --- .github/workflows/makefile.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/makefile.yml b/.github/workflows/makefile.yml index 187d84955..83ac187c3 100644 --- a/.github/workflows/makefile.yml +++ b/.github/workflows/makefile.yml @@ -148,6 +148,12 @@ jobs: mpirun -np ${{matrix.np}} ../../bin/Conquest cat Conquest_out + - name: Run test 009 + working-directory: ${{github.workspace}}/testsuite/test_009_DFT_plus_U + run: | + mpirun -np ${{matrix.np}} ../../bin/Conquest + cat Conquest_out + - name: Check test results working-directory: ${{github.workspace}}/testsuite run: pytest test_check_output.py From 33c3c25bcd9db038405b6306053b401b4409f4da Mon Sep 17 00:00:00 2001 From: David Bowler Date: Wed, 1 Jul 2026 11:52:03 +0100 Subject: [PATCH 16/16] Fixing missing spin factor I forgot to add the spin_factor in the DFT+U energy which meant that non-spin-polarised calculations had the wrong energy. --- src/H_matrix_module.f90 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/H_matrix_module.f90 b/src/H_matrix_module.f90 index b340ff2d9..675eb8c82 100644 --- a/src/H_matrix_module.f90 +++ b/src/H_matrix_module.f90 @@ -2015,7 +2015,7 @@ subroutine get_plusU_matrix(flag_rebuild) use datatypes use numbers use global_module, ONLY: nspin, id_glob, species_glob, atomf, occ_mat, & - iprint_ops, min_layer, IPRINT_TIME_THRES2 + iprint_ops, min_layer, IPRINT_TIME_THRES2, spin_factor use GenComms, ONLY: cq_abort, myid, inode, ionode, gsum use group_module, ONLY: parts use primary_module, ONLY: bundle @@ -2151,7 +2151,7 @@ subroutine get_plusU_matrix(flag_rebuild) call matrix_sum(zero, matHplusUatomf(spin), one , matUP) call matrix_sum(one, matHplusUatomf(spin), -two, matnUP) ! Double counting term - trace = matrix_product_trace(matKatomf(spin),matnUP) + trace = spin_factor*matrix_product_trace(matKatomf(spin),matnUP) delta_E_plusU = delta_E_plusU + trace ! Includes gsum enddo ! spin call free_temp_matrix(matnUP) @@ -2200,7 +2200,7 @@ subroutine get_occ_matrix use datatypes use numbers - use global_module, ONLY: nspin, occ_mat, occ_mat_glob, flag_write_occ_mat, & + use global_module, ONLY: nspin, spin_factor, occ_mat, occ_mat_glob, flag_write_occ_mat, & atomf, iprint_ops, min_layer, flag_first_diag, ni_in_cell, id_glob, species_glob use energy, ONLY: plusU_energy use GenComms, ONLY: cq_abort, myid, inode, ionode, gsum @@ -2292,6 +2292,7 @@ subroutine get_occ_matrix end if ! nm_nodgroup > 0 end do ! part call gsum(plusU_energy) + plusU_energy = plusU_energy*spin_factor ! Write out matrix if(flag_write_occ_mat) then ! Collect occupation matrix from all processes