From d69078cdc6c53944a3d8d6eaf1ddc955caaed1d3 Mon Sep 17 00:00:00 2001 From: Juerg Hutter Date: Thu, 14 Aug 2025 15:46:53 +0200 Subject: [PATCH] Activate handling of GTH-SOC PP in Sirius (#4363) Enable SOC in Sirius calculations using GTH PP format. Updates Atom code conversion of GTH SOC enabled PP to UPF format. Basic tests pass, but extended testing and cross validation still needed. --- src/atom_energy.F | 120 +++++++++++++++++++--- src/atom_kind_orbitals.F | 17 ++- src/atom_operators.F | 3 + src/atom_output.F | 32 ++++++ src/atom_types.F | 42 ++++++++ src/sirius_interface.F | 59 ++++++++--- src/subsys/external_potential_types.F | 6 +- tests/ATOM/regtest-pseudo/Au.inp | 44 ++++++++ tests/ATOM/regtest-pseudo/TEST_FILES.toml | 1 + tests/SIRIUS/regtest-1/Au_GTH_SOC.inp | 66 ++++++++++++ tests/SIRIUS/regtest-1/TEST_FILES.toml | 2 + 11 files changed, 363 insertions(+), 29 deletions(-) create mode 100644 tests/ATOM/regtest-pseudo/Au.inp create mode 100644 tests/SIRIUS/regtest-1/Au_GTH_SOC.inp diff --git a/src/atom_energy.F b/src/atom_energy.F index b2ed683e6b..a6c626b244 100644 --- a/src/atom_energy.F +++ b/src/atom_energy.F @@ -612,10 +612,10 @@ CONTAINS INTEGER, INTENT(IN) :: iw CHARACTER(LEN=default_string_length) :: string - INTEGER :: i, ibeta, j, k, l, lmax, nbeta, nr, & - nwfc, nwfn - LOGICAL :: up - REAL(KIND=dp) :: pf, rl, rmax + INTEGER :: i, ibeta, ii, j, k, kk, l, lmax, n0, & + nbeta, nr, nwfc, nwfn + LOGICAL :: soc, up + REAL(KIND=dp) :: pf, rl, rlp, rmax, vnlm, vnlp REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: beta, corden, dens, ef, locpot, rp REAL(KIND=dp), ALLOCATABLE, DIMENSION(:, :) :: dij TYPE(atom_gthpot_type), POINTER :: pot @@ -624,6 +624,7 @@ CONTAINS IF (atom%potential%ppot_type /= gth_pseudo) RETURN pot => atom%potential%gth_pot CPASSERT(.NOT. pot%lsdpot) + soc = pot%soc WRITE (iw, '(A)') '' @@ -645,7 +646,11 @@ CONTAINS WRITE (iw, '(T8,A)') 'is_ultrasoft="F"' WRITE (iw, '(T8,A)') 'is_paw="F"' WRITE (iw, '(T8,A)') 'is_coulomb="F"' - WRITE (iw, '(T8,A)') 'has_so="F"' + IF (soc) THEN + WRITE (iw, '(T8,A)') 'has_so="T"' + ELSE + WRITE (iw, '(T8,A)') 'has_so="F"' + END IF WRITE (iw, '(T8,A)') 'has_wfc="F"' WRITE (iw, '(T8,A)') 'has_gipaw="F"' WRITE (iw, '(T8,A)') 'paw_as_gipaw="F"' @@ -675,7 +680,11 @@ CONTAINS nwfc = SUM(atom%state%maxn_occ) CALL compose(string, "number_of_wfc", ival=nwfc) WRITE (iw, '(T8,A)') TRIM(string) - nbeta = SUM(pot%nl) + IF (soc) THEN + nbeta = pot%nl(0) + 2*SUM(pot%nl(1:)) + ELSE + nbeta = SUM(pot%nl) + END IF CALL compose(string, "number_of_proj", ival=nbeta) WRITE (iw, '(T8,A)') TRIM(string)//'/>' @@ -760,6 +769,8 @@ CONTAINS j = l + 2*i - 1 pf = SQRT(2._dp)/(pf*SQRT(gamma1(j))) beta(:) = pf*rp**(l + 2*i - 2)*ef + beta(:) = beta*rp + ! ibeta = ibeta + 1 CALL compose(string, "' - beta(:) = beta*rp IF (up) THEN WRITE (iw, '(T12,4ES25.12E3)') (2._dp*beta(j), j=1, nr) ELSE @@ -777,18 +787,60 @@ CONTAINS END IF CALL compose(string, "' + IF (up) THEN + WRITE (iw, '(T12,4ES25.12E3)') (2._dp*beta(j), j=1, nr) + ELSE + WRITE (iw, '(T12,4ES25.12E3)') (2._dp*beta(j), j=nr, 1, -1) + END IF + CALL compose(string, "' WRITE (iw, '(T12,4ES25.12E3)') ((0.5_dp*dij(i, j), j=1, nbeta), i=1, nbeta) @@ -846,6 +898,48 @@ CONTAINS WRITE (iw, '(T4,A)') '' DEALLOCATE (dens) + ! PP SOC information + IF (soc) THEN + WRITE (iw, '(T4,A)') '' +! RELWFC not available +! + ibeta = 0 + DO l = 0, lmat + IF (pot%nl(l) == 0) CYCLE + DO i = 1, pot%nl(l) + ibeta = ibeta + 1 + CALL compose(string, "' + IF (l > 0) THEN + ibeta = ibeta + 1 + CALL compose(string, "' + END IF + END DO + END DO + WRITE (iw, '(T4,A)') '' + END IF + WRITE (iw, '(A)') '' END SUBROUTINE atom_write_upf diff --git a/src/atom_kind_orbitals.F b/src/atom_kind_orbitals.F index 9231df0a3e..1c7ad63e4f 100644 --- a/src/atom_kind_orbitals.F +++ b/src/atom_kind_orbitals.F @@ -1104,11 +1104,12 @@ CONTAINS nexp_nlcc INTEGER, DIMENSION(:), POINTER :: nct_lpot, nct_lsd, nct_nlcc, nppnl, & ppeconf - LOGICAL :: lpot_present, lsd_present, nlcc_present + LOGICAL :: lpot_present, lsd_present, nlcc_present, & + soc_present REAL(KIND=dp) :: ac, zeff REAL(KIND=dp), DIMENSION(:), POINTER :: alpha_lpot, alpha_lsd, alpha_nlcc, ap, ce REAL(KIND=dp), DIMENSION(:, :), POINTER :: cval_lpot, cval_lsd, cval_nlcc - REAL(KIND=dp), DIMENSION(:, :, :), POINTER :: hp + REAL(KIND=dp), DIMENSION(:, :, :), POINTER :: hp, kp CALL get_potential(gth_potential, & zeff=zeff, & @@ -1119,6 +1120,7 @@ CONTAINS lppnl=lm, & nprj_ppnl=nppnl, & alpha_ppnl=ap, & + kprj_ppnl=kp, & hprj_ppnl=hp) gth_atompot%zion = zeff @@ -1187,6 +1189,17 @@ CONTAINS gth_atompot%hnl(1:n, 1:n, l) = hp(1:n, 1:n, l) END DO + ! SOC + CALL get_potential(gth_potential, soc_present=soc_present) + gth_atompot%soc = soc_present + gth_atompot%knl = 0.0_dp + IF (soc_present) THEN + DO l = 1, lm + n = nppnl(l) + gth_atompot%knl(1:n, 1:n, l) = kp(1:n, 1:n, l) + END DO + END IF + IF (nlcc_present) THEN CALL get_potential(gth_potential, & nexp_nlcc=nexp_nlcc, & diff --git a/src/atom_operators.F b/src/atom_operators.F index b1b08d59f1..45d7d1309d 100644 --- a/src/atom_operators.F +++ b/src/atom_operators.F @@ -376,6 +376,9 @@ CONTAINS CALL sg_nuclear(integrals%core(1:n, 1:n, l), l, basis%am(1:n, l), basis%am(1:n, l)) END DO CASE (gth_pseudo) + IF (potential%gth_pot%soc) THEN + CPWARN("Atom code: GTH SOC is ignored") + END IF alpha = 1._dp/potential%gth_pot%rc/SQRT(2._dp) DO l = 0, lmat n = integrals%n(l) diff --git a/src/atom_output.F b/src/atom_output.F index 62c486e49f..bcf24846c1 100644 --- a/src/atom_output.F +++ b/src/atom_output.F @@ -688,6 +688,22 @@ CONTAINS END DO END IF END DO + IF (potential%gth_pot%soc) THEN + WRITE (iw, '(T10,A)') " Spin-orbit coupling parameters " + DO l = 1, lmat + IF (potential%gth_pot%nl(l) > 0) THEN + WRITE (iw, '(T10,A,T76,I5)') " Angular momentum ", l + WRITE (iw, '(T10,A,T66,F15.6)') " Rcnl ", potential%gth_pot%rcnl(l) + WRITE (iw, '(T10,A,T76,I5)') " Nl ", potential%gth_pot%nl(l) + WRITE (pline, '(5F12.6)') (potential%gth_pot%knl(1, j, l), j=1, potential%gth_pot%nl(l)) + WRITE (iw, '(T10,A,T21,A60)') " Hnl ", ADJUSTR(pline) + DO i = 2, potential%gth_pot%nl(l) + WRITE (pline, '(T21,5F12.6)') (potential%gth_pot%knl(i, j, l), j=i, potential%gth_pot%nl(l)) + WRITE (iw, '(T21,A60)') ADJUSTR(pline) + END DO + END IF + END DO + END IF CASE (upf_pseudo) WRITE (iw, '(/," ",29("*"),A,29("*"))') " UPF Pseudopotential " DO k = 1, potential%upf_pot%maxinfo @@ -803,6 +819,22 @@ CONTAINS END DO END SELECT END DO + IF (gthpot%soc) THEN + DO i = 1, n - 1 + WRITE (iw, '(T29,5F20.14)') (gthpot%hnl(1, k, i), k=1, gthpot%nl(i)) + SELECT CASE (gthpot%nl(i)) + CASE (2) + WRITE (iw, '(T49,F20.14)') gthpot%knl(2, 2, i) + CASE (3) + WRITE (iw, '(T49,2F20.14)') gthpot%knl(2, 2, i), gthpot%knl(2, 3, i) + WRITE (iw, '(T69,F20.14)') gthpot%knl(3, 3, i) + CASE DEFAULT + DO j = 2, gthpot%nl(i) + WRITE (iw, '(T29,5F20.14)') (gthpot%knl(j, k, i), k=j, gthpot%nl(i)) + END DO + END SELECT + END DO + END IF IF (.NOT. PRESENT(iunit)) CALL close_file(unit_number=iw) END SUBROUTINE atom_write_pseudo_param diff --git a/src/atom_types.F b/src/atom_types.F index c69fabf6ed..d83a43ac0b 100644 --- a/src/atom_types.F +++ b/src/atom_types.F @@ -106,6 +106,9 @@ MODULE atom_types INTEGER, DIMENSION(0:lmat) :: nl = 0 REAL(dp), DIMENSION(0:lmat) :: rcnl = 0.0_dp REAL(dp), DIMENSION(4, 4, 0:lmat) :: hnl = 0.0_dp + ! SOC + LOGICAL :: soc = .FALSE. + REAL(dp), DIMENSION(4, 4, 0:lmat) :: knl = 0.0_dp ! type extensions ! NLCC LOGICAL :: nlcc = .FALSE. @@ -2569,6 +2572,8 @@ CONTAINS potential%nl = 0 potential%rcnl = 0._dp potential%hnl = 0._dp + potential%soc = .FALSE. + potential%knl = 0._dp potential%lpotextended = .FALSE. potential%lsdpot = .FALSE. @@ -2675,6 +2680,7 @@ CONTAINS ! Read the parameters for the non-local part of the GTH pseudopotential (ppnl) READ (line_att, *) nlmax CALL remove_word(line_att) + IF (INDEX(line_att, "SOC") /= 0) potential%soc = .TRUE. IF (nlmax > 0) THEN ! Load the parameter for nlmax non-local projectors DO l = 0, nlmax - 1 @@ -2703,6 +2709,29 @@ CONTAINS CALL remove_word(line_att) END DO END DO + IF (potential%soc .AND. l /= 0) THEN + is_ok = cp_sll_val_next(list, val) + CPASSERT(is_ok) + CALL val_get(val, c_val=line_att) + DO i = 1, potential%nl(l) + IF (i == 1) THEN + READ (line_att, *) potential%knl(1, 1, l) + CALL remove_word(line_att) + ELSE + CPASSERT(LEN_TRIM(line_att) == 0) + is_ok = cp_sll_val_next(list, val) + CPASSERT(is_ok) + CALL val_get(val, c_val=line_att) + READ (line_att, *) potential%knl(i, i, l) + CALL remove_word(line_att) + END IF + DO j = i + 1, potential%nl(l) + READ (line_att, *) potential%knl(i, j, l) + potential%knl(j, i, l) = potential%knl(i, j, l) + CALL remove_word(line_att) + END DO + END DO + END IF CPASSERT(LEN_TRIM(line_att) == 0) END DO END IF @@ -2797,6 +2826,10 @@ CONTAINS ! Read the parameters for the non-local part of the GTH pseudopotential (ppnl) CALL parser_get_object(parser, nlmax) IF (nlmax > 0) THEN + IF (parser_test_next_token(parser) == "STR") THEN + CALL parser_get_object(parser, line) + IF (INDEX(LINE, "SOC") /= 0) potential%soc = .TRUE. + END IF ! Load the parameter for n non-local projectors DO l = 0, nlmax - 1 CALL parser_get_object(parser, potential%rcnl(l), newline=.TRUE.) @@ -2812,6 +2845,15 @@ CONTAINS potential%hnl(j, i, l) = potential%hnl(i, j, l) END DO END DO + IF (potential%soc .AND. l /= 0) THEN + DO i = 1, potential%nl(l) + CALL parser_get_object(parser, potential%knl(i, i, l), newline=.TRUE.) + DO j = i + 1, potential%nl(l) + CALL parser_get_object(parser, potential%knl(i, j, l)) + potential%knl(j, i, l) = potential%knl(i, j, l) + END DO + END DO + END IF END DO END IF EXIT search_loop diff --git a/src/sirius_interface.F b/src/sirius_interface.F index b495004e3e..120998477f 100644 --- a/src/sirius_interface.F +++ b/src/sirius_interface.F @@ -130,8 +130,8 @@ CONTAINS CHARACTER(len=2) :: element_symbol CHARACTER(len=default_string_length) :: label - INTEGER :: i, iatom, ibeta, ifun, ikind, iwf, j, l, & - n, natom, nbeta, nkind, nmesh, & + INTEGER :: i, ii, jj, iatom, ibeta, ifun, ikind, iwf, j, l, & + n, ns, natom, nbeta, nbs, nkind, nmesh, & num_mag_dims, sirius_mpi_comm, vdw_func, nu, lu, output_unit INTEGER, DIMENSION(:), POINTER :: mpi_grid_dims INTEGER(KIND=C_INT), DIMENSION(3) :: k_grid, k_shift @@ -143,7 +143,7 @@ CONTAINS REAL(KIND=C_DOUBLE), DIMENSION(3) :: a1, a2, a3, v1, v2 REAL(KIND=dp) :: al, angle1, angle2, cval, focc, & magnetization, mass, pf, rl, zeff, alpha_u, beta_u, & - J0_u, J_u, U_u, occ_u, u_minus_J + J0_u, J_u, U_u, occ_u, u_minus_J, vnlp, vnlm REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: beta, corden, ef, fe, locpot, rc, rp REAL(KIND=dp), DIMENSION(3) :: vr, vs, j_t REAL(KIND=dp), DIMENSION(:), POINTER :: density @@ -343,7 +343,7 @@ CONTAINS zn=NINT(zeff + 0.001d0), & symbol=element_symbol, & mass=REAL(mass/massunit, KIND=C_DOUBLE), & - spin_orbit=.FALSE.) + spin_orbit=gth_potential%soc) ! ALLOCATE (gth_atompot) CALL gth_potential_conversion(gth_potential, gth_atompot) @@ -351,6 +351,7 @@ CONTAINS fun(1:nmesh) = rp(1:nmesh) CALL sirius_set_atom_type_radial_grid(sctx, label, nmesh, fun(1)) ! set beta-projectors +! GTH SOC uses the same projectors, SIRIUS can use the same or different projectors for l+1/2, l-1/2 (l > 0 l+1/2 l < 0 l-/2 ) ALLOCATE (ef(nmesh), beta(nmesh)) ibeta = 0 DO l = 0, 3 @@ -367,21 +368,55 @@ CONTAINS fun(1:nmesh) = beta(1:nmesh)*rp(1:nmesh) CALL sirius_add_atom_type_radial_function(sctx, label, & "beta", fun(1), nmesh, l=l) + ! we double the number of beta projectors for SO and l>0 + IF (gth_atompot%soc .AND. l /= 0) THEN + CALL sirius_add_atom_type_radial_function(sctx, label, & + "beta", fun(1), nmesh, l=-l) + END IF END DO END DO DEALLOCATE (ef, beta) nbeta = ibeta ! nonlocal PP matrix elements - ALLOCATE (dion(nbeta, nbeta)) + IF (gth_atompot%soc) THEN + nbs = 2*nbeta - gth_atompot%nl(0) + ALLOCATE (dion(nbs, nbs)) + ELSE + ALLOCATE (dion(nbeta, nbeta)) + END IF dion = 0.0_dp - DO l = 0, 3 - IF (gth_atompot%nl(l) == 0) CYCLE - ibeta = SUM(gth_atompot%nl(0:l - 1)) + 1 - i = ibeta + gth_atompot%nl(l) - 1 - dion(ibeta:i, ibeta:i) = gth_atompot%hnl(1:gth_atompot%nl(l), 1:gth_atompot%nl(l), l) - END DO - CALL sirius_set_atom_type_dion(sctx, label, nbeta, dion(1, 1)) + IF (gth_atompot%soc) THEN + ns = gth_atompot%nl(0) + IF (ns /= 0) THEN + dion(1:ns, 1:ns) = gth_atompot%hnl(1:ns, 1:ns, 0) + END IF + DO l = 1, 3 + IF (gth_atompot%nl(l) == 0) CYCLE + DO i = 1, gth_atompot%nl(l) + ii = ns + 2*SUM(gth_atompot%nl(1:l - 1)) + ii = ii + 2*(i - 1) + 1 + DO j = 1, gth_atompot%nl(l) + jj = ns + 2*SUM(gth_atompot%nl(1:l - 1)) + jj = jj + 2*(j - 1) + 1 + vnlp = gth_atompot%hnl(i, j, l) + 0.5_dp*l*gth_atompot%knl(i, j, l) + vnlm = gth_atompot%hnl(i, j, l) - 0.5_dp*(l + 1)*gth_atompot%knl(i, j, l) + dion(ii, jj) = vnlp + dion(ii + 1, jj + 1) = vnlm + END DO + END DO + END DO + CALL sirius_set_atom_type_dion(sctx, label, nbs, dion(1, 1)) + ELSE + DO l = 0, 3 + IF (gth_atompot%nl(l) == 0) CYCLE + ibeta = SUM(gth_atompot%nl(0:l - 1)) + 1 + i = ibeta + gth_atompot%nl(l) - 1 + dion(ibeta:i, ibeta:i) = gth_atompot%hnl(1:gth_atompot%nl(l), 1:gth_atompot%nl(l), l) + END DO + CALL sirius_set_atom_type_dion(sctx, label, nbeta, dion(1, 1)) + END IF + DEALLOCATE (dion) ! set non-linear core correction diff --git a/src/subsys/external_potential_types.F b/src/subsys/external_potential_types.F index 8660fbfea0..83617bb5e0 100644 --- a/src/subsys/external_potential_types.F +++ b/src/subsys/external_potential_types.F @@ -682,6 +682,7 @@ CONTAINS !> \param zeff_correction ... !> \param ppl_present ... !> \param ppnl_present ... +!> \param soc_present ... !> \param alpha_ppnl ... !> \param cexp_ppl ... !> \param elec_conf ... @@ -716,7 +717,7 @@ CONTAINS core_charge_radius, ppl_radius, ppnl_radius, & lppnl, lprj_ppnl_max, nexp_ppl, nppnl, & nprj_ppnl_max, z, zeff, zeff_correction, & - ppl_present, ppnl_present, & + ppl_present, ppnl_present, soc_present, & alpha_ppnl, cexp_ppl, elec_conf, nprj_ppnl, cprj, & cprj_ppnl, vprj_ppnl, wprj_ppnl, hprj_ppnl, kprj_ppnl, & lpot_present, nexp_lpot, alpha_lpot, nct_lpot, cval_lpot, & @@ -733,7 +734,7 @@ CONTAINS INTEGER, INTENT(OUT), OPTIONAL :: lppnl, lprj_ppnl_max, nexp_ppl, nppnl, & nprj_ppnl_max, z REAL(KIND=dp), INTENT(OUT), OPTIONAL :: zeff, zeff_correction - LOGICAL, INTENT(OUT), OPTIONAL :: ppl_present, ppnl_present + LOGICAL, INTENT(OUT), OPTIONAL :: ppl_present, ppnl_present, soc_present REAL(KIND=dp), DIMENSION(:), OPTIONAL, POINTER :: alpha_ppnl, cexp_ppl INTEGER, DIMENSION(:), OPTIONAL, POINTER :: elec_conf, nprj_ppnl REAL(KIND=dp), DIMENSION(:, :), OPTIONAL, POINTER :: cprj, cprj_ppnl, vprj_ppnl, wprj_ppnl @@ -766,6 +767,7 @@ CONTAINS core_charge_radius = potential%core_charge_radius IF (PRESENT(ppl_radius)) ppl_radius = potential%ppl_radius IF (PRESENT(ppnl_radius)) ppnl_radius = potential%ppnl_radius + IF (PRESENT(soc_present)) soc_present = potential%soc IF (PRESENT(lppnl)) lppnl = potential%lppnl IF (PRESENT(lprj_ppnl_max)) lprj_ppnl_max = potential%lprj_ppnl_max IF (PRESENT(nexp_ppl)) nexp_ppl = potential%nexp_ppl diff --git a/tests/ATOM/regtest-pseudo/Au.inp b/tests/ATOM/regtest-pseudo/Au.inp new file mode 100644 index 0000000000..615a02a326 --- /dev/null +++ b/tests/ATOM/regtest-pseudo/Au.inp @@ -0,0 +1,44 @@ +&GLOBAL + PROGRAM_NAME ATOM +&END GLOBAL + +&ATOM + CORE [Kr] 4d10 4f14 + ELECTRON_CONFIGURATION CORE 5s2 5p6 5d9 6s2 + ELEMENT Au + MAX_ANGULAR_MOMENTUM 3 + RUN_TYPE ENERGY + &METHOD + METHOD_TYPE KOHN-SHAM + &XC + &XC_FUNCTIONAL PBE + &END XC_FUNCTIONAL + &END XC + &END METHOD + &POTENTIAL + PSEUDO_TYPE GTH + >H_POTENTIAL + 3 6 10 + 0.49000000 2 9.07322639 -0.34013367 + 3 SOC + 0.28803780 3 -5.90182040 26.42537412 -15.50837777 + -59.33938963 40.04245923 + -31.78271670 + 0.35586747 3 -7.08858659 8.19796427 0.00000000 + -9.69996213 0.00000000 + 0.00000000 + 0.62807493 1.81668773 -1.65141098 + -4.89888134 3.90795165 + -2.77740200 + 0.33386175 2 -8.82572349 9.56535285 + -10.84609065 + 0.18880114 0.03175114 + -0.03600240 + &END GTH_POTENTIAL + &END POTENTIAL + &PRINT + &UPF_FILE + FILENAME ./Au_HGH_q19 + &END UPF_FILE + &END PRINT +&END ATOM diff --git a/tests/ATOM/regtest-pseudo/TEST_FILES.toml b/tests/ATOM/regtest-pseudo/TEST_FILES.toml index f495a74153..cab59403de 100644 --- a/tests/ATOM/regtest-pseudo/TEST_FILES.toml +++ b/tests/ATOM/regtest-pseudo/TEST_FILES.toml @@ -22,4 +22,5 @@ "C_grb.inp" = [{matcher="M035", tol=1e-12, ref=-5.360945665362}] "C_grb2.inp" = [{matcher="M035", tol=1e-12, ref=-5.360945665362}] "Li_NLCC.inp" = [{matcher="M061", tol=1e-12, ref=0.5527955347}] +"Au.inp" = [{matcher="M035", tol=1e-10, ref=-136.583322713061}] #EOF diff --git a/tests/SIRIUS/regtest-1/Au_GTH_SOC.inp b/tests/SIRIUS/regtest-1/Au_GTH_SOC.inp new file mode 100644 index 0000000000..bf547a81ac --- /dev/null +++ b/tests/SIRIUS/regtest-1/Au_GTH_SOC.inp @@ -0,0 +1,66 @@ +&GLOBAL + PRINT_LEVEL MEDIUM + PROJECT Gold + RUN_TYPE ENERGY +&END GLOBAL + +&FORCE_EVAL + METHOD SIRIUS + &DFT + POTENTIAL_FILE_NAME GTH_SOC_POTENTIALS + &XC + &XC_FUNCTIONAL + &LDA_C_PZ + &END LDA_C_PZ + &LDA_X + &END LDA_X + &END XC_FUNCTIONAL + &END XC + &END DFT + &PW_DFT + &CONTROL + CYCLIC_BLOCK_SIZE 32 + GEN_EVP_SOLVER_NAME lapack + PROCESSING_UNIT cpu + STD_EVP_SOLVER_NAME lapack + VERBOSITY 1 + &END CONTROL + &ITERATIVE_SOLVER + CONVERGE_BY_ENERGY 1 + ENERGY_TOLERANCE 1e-5 + NUM_STEPS 20 + SUBSPACE_SIZE 4 + TYPE davidson + &END ITERATIVE_SOLVER + &MIXER + BETA 0.6 + MAX_HISTORY 8 + TYPE broyden2 + &END MIXER + &PARAMETERS + ELECTRONIC_STRUCTURE_METHOD pseudopotential + GK_CUTOFF 6.0 + NGRIDK 2 2 2 + NUM_DFT_ITER 100 + NUM_MAG_DIMS 3 + PW_CUTOFF 20.00 + SMEARING_WIDTH 0.01 + SO_CORRECTION true + USE_SYMMETRY false + &END PARAMETERS + &END PW_DFT + &SUBSYS + &CELL + A [bohr] -3.85500000000000000000 0.0 3.85500000000000000000 + B [bohr] 0.0 3.85500000000000000000 3.85500000000000000000 + C [bohr] -3.85500000000000000000 3.85500000000000000000 0.0 + &END CELL + &COORD + SCALED + Au 0.0 0.0 0.0 + &END COORD + &KIND Au + POTENTIAL GTH-PADE-q19 + &END KIND + &END SUBSYS +&END FORCE_EVAL diff --git a/tests/SIRIUS/regtest-1/TEST_FILES.toml b/tests/SIRIUS/regtest-1/TEST_FILES.toml index b447828763..0abc9b368b 100644 --- a/tests/SIRIUS/regtest-1/TEST_FILES.toml +++ b/tests/SIRIUS/regtest-1/TEST_FILES.toml @@ -17,4 +17,6 @@ "LiF.inp" = [{matcher="M085", tol=1.0E-5, ref=-36.658529490345153}] "N2.inp" = [{matcher="M085", tol=1.0E-9, ref=-16.572137677057988}] "Fe-upf.inp" = [{matcher="M085", tol=1.0E-5, ref=-322.37407840130044}] +"Au_GTH.inp" = [{matcher="M085", tol=1.0E-5, ref=-33.157343398225969}] +"Au_GTH_SOC.inp" = [{matcher="M085", tol=1.0E-5, ref=-135.58863815223782}] #EOF