748 SUBROUTINE get_gth_potential(potential, name, aliases, alpha_core_charge, &
749 alpha_ppl, ccore_charge, cerf_ppl, &
750 core_charge_radius, ppl_radius, ppnl_radius, &
751 lppnl, lprj_ppnl_max, nexp_ppl, nppnl, &
752 nprj_ppnl_max, z, zeff, zeff_correction, &
753 ppl_present, ppnl_present, soc_present, &
754 alpha_ppnl, cexp_ppl, elec_conf, nprj_ppnl, cprj, &
755 cprj_ppnl, vprj_ppnl, wprj_ppnl, hprj_ppnl, kprj_ppnl, &
756 lpot_present, nexp_lpot, alpha_lpot, nct_lpot, cval_lpot, &
757 lsd_present, nexp_lsd, alpha_lsd, nct_lsd, cval_lsd, &
758 nlcc_present, nexp_nlcc, alpha_nlcc, nct_nlcc, cval_nlcc, &
762 CHARACTER(LEN=default_string_length), &
763 INTENT(OUT),
OPTIONAL :: name, aliases
764 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: alpha_core_charge, alpha_ppl, &
765 ccore_charge, cerf_ppl, &
766 core_charge_radius, ppl_radius, &
768 INTEGER,
INTENT(OUT),
OPTIONAL :: lppnl, lprj_ppnl_max, nexp_ppl, nppnl, &
770 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: zeff, zeff_correction
771 LOGICAL,
INTENT(OUT),
OPTIONAL :: ppl_present, ppnl_present, soc_present
772 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_ppnl, cexp_ppl
773 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf, nprj_ppnl
774 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cprj, cprj_ppnl, vprj_ppnl, wprj_ppnl
775 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
776 POINTER :: hprj_ppnl, kprj_ppnl
777 LOGICAL,
INTENT(OUT),
OPTIONAL :: lpot_present
778 INTEGER,
INTENT(OUT),
OPTIONAL :: nexp_lpot
779 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_lpot
780 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: nct_lpot
781 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cval_lpot
782 LOGICAL,
INTENT(OUT),
OPTIONAL :: lsd_present
783 INTEGER,
INTENT(OUT),
OPTIONAL :: nexp_lsd
784 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_lsd
785 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: nct_lsd
786 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cval_lsd
787 LOGICAL,
INTENT(OUT),
OPTIONAL :: nlcc_present
788 INTEGER,
INTENT(OUT),
OPTIONAL :: nexp_nlcc
789 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_nlcc
790 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: nct_nlcc
791 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cval_nlcc
792 LOGICAL,
INTENT(OUT),
OPTIONAL :: monovalent
794 IF (
PRESENT(name)) name = potential%name
795 IF (
PRESENT(aliases)) aliases = potential%aliases
796 IF (
PRESENT(alpha_core_charge))
THEN
797 alpha_core_charge = potential%alpha_core_charge
799 IF (
PRESENT(alpha_ppl)) alpha_ppl = potential%alpha_ppl
800 IF (
PRESENT(ccore_charge)) ccore_charge = potential%ccore_charge
801 IF (
PRESENT(cerf_ppl)) cerf_ppl = potential%cerf_ppl
802 IF (
PRESENT(core_charge_radius))
THEN
803 core_charge_radius = potential%core_charge_radius
805 IF (
PRESENT(ppl_radius)) ppl_radius = potential%ppl_radius
806 IF (
PRESENT(ppnl_radius)) ppnl_radius = potential%ppnl_radius
807 IF (
PRESENT(soc_present)) soc_present = potential%soc
808 IF (
PRESENT(lppnl)) lppnl = potential%lppnl
809 IF (
PRESENT(lprj_ppnl_max)) lprj_ppnl_max = potential%lprj_ppnl_max
810 IF (
PRESENT(nexp_ppl)) nexp_ppl = potential%nexp_ppl
811 IF (
PRESENT(nppnl)) nppnl = potential%nppnl
812 IF (
PRESENT(nprj_ppnl_max)) nprj_ppnl_max = potential%nprj_ppnl_max
813 IF (
PRESENT(z)) z = potential%z
814 IF (
PRESENT(zeff)) zeff = potential%zeff
815 IF (
PRESENT(zeff_correction)) zeff_correction = potential%zeff_correction
816 IF (
PRESENT(ppl_present)) ppl_present = (potential%nexp_ppl > 0)
817 IF (
PRESENT(ppnl_present)) ppnl_present = (potential%nppnl > 0)
818 IF (
PRESENT(alpha_ppnl)) alpha_ppnl => potential%alpha_ppnl
819 IF (
PRESENT(cexp_ppl)) cexp_ppl => potential%cexp_ppl
820 IF (
PRESENT(elec_conf)) elec_conf => potential%elec_conf
821 IF (
PRESENT(nprj_ppnl)) nprj_ppnl => potential%nprj_ppnl
822 IF (
PRESENT(cprj)) cprj => potential%cprj
823 IF (
PRESENT(cprj_ppnl)) cprj_ppnl => potential%cprj_ppnl
824 IF (
PRESENT(hprj_ppnl)) hprj_ppnl => potential%hprj_ppnl
825 IF (
PRESENT(kprj_ppnl)) kprj_ppnl => potential%kprj_ppnl
826 IF (
PRESENT(vprj_ppnl)) vprj_ppnl => potential%vprj_ppnl
827 IF (
PRESENT(wprj_ppnl)) wprj_ppnl => potential%wprj_ppnl
829 IF (
PRESENT(lpot_present)) lpot_present = potential%lpotextended
830 IF (
PRESENT(nexp_lpot)) nexp_lpot = potential%nexp_lpot
831 IF (
PRESENT(alpha_lpot)) alpha_lpot => potential%alpha_lpot
832 IF (
PRESENT(nct_lpot)) nct_lpot => potential%nct_lpot
833 IF (
PRESENT(cval_lpot)) cval_lpot => potential%cval_lpot
835 IF (
PRESENT(lsd_present)) lsd_present = potential%lsdpot
836 IF (
PRESENT(nexp_lsd)) nexp_lsd = potential%nexp_lsd
837 IF (
PRESENT(alpha_lsd)) alpha_lsd => potential%alpha_lsd
838 IF (
PRESENT(nct_lsd)) nct_lsd => potential%nct_lsd
839 IF (
PRESENT(cval_lsd)) cval_lsd => potential%cval_lsd
841 IF (
PRESENT(nlcc_present)) nlcc_present = potential%nlcc
842 IF (
PRESENT(nexp_nlcc)) nexp_nlcc = potential%nexp_nlcc
843 IF (
PRESENT(alpha_nlcc)) alpha_nlcc => potential%alpha_nlcc
844 IF (
PRESENT(nct_nlcc)) nct_nlcc => potential%nct_nlcc
845 IF (
PRESENT(cval_nlcc)) cval_nlcc => potential%cval_nlcc
847 IF (
PRESENT(monovalent)) monovalent = potential%monovalent
897 SUBROUTINE get_sgp_potential(potential, name, description, aliases, elec_conf, &
898 z, zeff, zeff_correction, alpha_core_charge, &
899 ccore_charge, core_charge_radius, &
900 ppl_radius, ppnl_radius, ppl_present, ppnl_present, ppsl_present, &
901 ecp_local, n_local, a_local, c_local, &
902 nloc, nrloc, aloc, bloc, &
903 ecp_semi_local, sl_lmax, npot, nrpot, apot, bpot, &
904 n_nonlocal, nppnl, lmax, is_nonlocal, a_nonlocal, h_nonlocal, c_nonlocal, &
905 cprj_ppnl, vprj_ppnl, has_nlcc, n_nlcc, a_nlcc, c_nlcc)
908 CHARACTER(LEN=default_string_length), &
909 INTENT(OUT),
OPTIONAL :: name
910 CHARACTER(LEN=default_string_length), &
911 DIMENSION(4),
INTENT(OUT),
OPTIONAL :: description
912 CHARACTER(LEN=default_string_length), &
913 INTENT(OUT),
OPTIONAL :: aliases
914 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf
915 INTEGER,
INTENT(OUT),
OPTIONAL :: z
916 REAL(KIND=
dp),
INTENT(OUT),
OPTIONAL :: zeff, zeff_correction, &
917 alpha_core_charge, ccore_charge, &
918 core_charge_radius, ppl_radius, &
920 LOGICAL,
INTENT(OUT),
OPTIONAL :: ppl_present, ppnl_present, ppsl_present, &
922 INTEGER,
INTENT(OUT),
OPTIONAL :: n_local
923 REAL(KIND=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_local, c_local
924 INTEGER,
INTENT(OUT),
OPTIONAL :: nloc
925 INTEGER,
DIMENSION(1:10),
INTENT(OUT),
OPTIONAL :: nrloc
926 REAL(dp),
DIMENSION(1:10),
INTENT(OUT),
OPTIONAL :: aloc, bloc
927 LOGICAL,
INTENT(OUT),
OPTIONAL :: ecp_semi_local
928 INTEGER,
INTENT(OUT),
OPTIONAL :: sl_lmax
929 INTEGER,
DIMENSION(0:10),
OPTIONAL :: npot
930 INTEGER,
DIMENSION(1:15, 0:10),
OPTIONAL :: nrpot
931 REAL(dp),
DIMENSION(1:15, 0:10),
OPTIONAL :: apot, bpot
932 INTEGER,
INTENT(OUT),
OPTIONAL :: n_nonlocal, nppnl, lmax
933 LOGICAL,
DIMENSION(0:5),
OPTIONAL :: is_nonlocal
934 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nonlocal
935 REAL(KIND=dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: h_nonlocal
936 REAL(KIND=dp),
DIMENSION(:, :, :),
OPTIONAL, &
937 POINTER :: c_nonlocal
938 REAL(KIND=dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cprj_ppnl
939 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: vprj_ppnl
940 LOGICAL,
INTENT(OUT),
OPTIONAL :: has_nlcc
941 INTEGER,
INTENT(OUT),
OPTIONAL :: n_nlcc
942 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nlcc, c_nlcc
944 IF (
PRESENT(name)) name = potential%name
945 IF (
PRESENT(aliases)) aliases = potential%aliases
946 IF (
PRESENT(description)) description = potential%description
948 IF (
PRESENT(elec_conf)) elec_conf => potential%elec_conf
950 IF (
PRESENT(z)) z = potential%z
951 IF (
PRESENT(zeff)) zeff = potential%zeff
952 IF (
PRESENT(zeff_correction)) zeff_correction = potential%zeff_correction
953 IF (
PRESENT(alpha_core_charge)) alpha_core_charge = potential%alpha_core_charge
954 IF (
PRESENT(ccore_charge)) ccore_charge = potential%ccore_charge
955 IF (
PRESENT(core_charge_radius)) core_charge_radius = potential%core_charge_radius
957 IF (
PRESENT(ppl_radius)) ppl_radius = potential%ppl_radius
958 IF (
PRESENT(ppnl_radius)) ppnl_radius = potential%ppnl_radius
959 IF (
PRESENT(ppl_present))
THEN
960 ppl_present = (potential%nloc > 0 .OR. potential%n_local > 0)
962 IF (
PRESENT(ppnl_present))
THEN
963 ppnl_present = any(potential%is_nonlocal)
965 IF (
PRESENT(ppsl_present))
THEN
966 ppsl_present = potential%ecp_semi_local
969 IF (
PRESENT(ecp_local)) ecp_local = potential%ecp_local
970 IF (
PRESENT(n_local)) n_local = potential%n_local
971 IF (
PRESENT(a_local)) a_local => potential%a_local
972 IF (
PRESENT(c_local)) c_local => potential%c_local
974 IF (
PRESENT(nloc)) nloc = potential%nloc
975 IF (
PRESENT(nrloc)) nrloc = potential%nrloc
976 IF (
PRESENT(aloc)) aloc = potential%aloc
977 IF (
PRESENT(bloc)) bloc = potential%bloc
979 IF (
PRESENT(ecp_semi_local)) ecp_semi_local = potential%ecp_semi_local
980 IF (
PRESENT(sl_lmax)) sl_lmax = potential%sl_lmax
981 IF (
PRESENT(npot)) npot = potential%npot
982 IF (
PRESENT(nrpot)) nrpot = potential%nrpot
983 IF (
PRESENT(apot)) apot = potential%apot
984 IF (
PRESENT(bpot)) bpot = potential%bpot
986 IF (
PRESENT(n_nonlocal)) n_nonlocal = potential%n_nonlocal
987 IF (
PRESENT(nppnl)) nppnl = potential%nppnl
988 IF (
PRESENT(lmax)) lmax = potential%lmax
989 IF (
PRESENT(is_nonlocal)) is_nonlocal(:) = potential%is_nonlocal(:)
990 IF (
PRESENT(a_nonlocal)) a_nonlocal => potential%a_nonlocal
991 IF (
PRESENT(c_nonlocal)) c_nonlocal => potential%c_nonlocal
992 IF (
PRESENT(h_nonlocal)) h_nonlocal => potential%h_nonlocal
993 IF (
PRESENT(cprj_ppnl)) cprj_ppnl => potential%cprj_ppnl
994 IF (
PRESENT(vprj_ppnl)) vprj_ppnl => potential%vprj_ppnl
996 IF (
PRESENT(has_nlcc)) has_nlcc = potential%has_nlcc
997 IF (
PRESENT(n_nlcc)) n_nlcc = potential%n_nlcc
998 IF (
PRESENT(a_nlcc)) a_nlcc => potential%a_nlcc
999 IF (
PRESENT(c_nlcc)) c_nlcc => potential%c_nlcc
1139 PURE SUBROUTINE init_all_potential(potential, itype, zeff, zeff_correction)
1142 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: itype
1143 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: zeff, zeff_correction
1147 IF (.NOT.
ASSOCIATED(potential))
RETURN
1149 IF (
PRESENT(zeff)) potential%zeff = zeff
1150 IF (
PRESENT(zeff_correction)) potential%zeff_correction = zeff_correction
1151 dz = potential%z - int(potential%zeff - potential%zeff_correction)
1155 potential%elec_conf(0) = potential%elec_conf(0) - 2
1157 potential%elec_conf(0) = potential%elec_conf(0) - 4
1158 potential%elec_conf(1) = potential%elec_conf(1) - 6
1160 potential%elec_conf(0) = potential%elec_conf(0) - 6
1161 potential%elec_conf(1) = potential%elec_conf(1) - 12
1163 potential%elec_conf(0) = potential%elec_conf(0) - 6
1164 potential%elec_conf(1) = potential%elec_conf(1) - 12
1165 potential%elec_conf(2) = potential%elec_conf(2) - 10
1167 potential%elec_conf(0) = potential%elec_conf(0) - 8
1168 potential%elec_conf(1) = potential%elec_conf(1) - 12
1169 potential%elec_conf(2) = potential%elec_conf(2) - 10
1171 potential%elec_conf(0) = potential%elec_conf(0) - 8
1172 potential%elec_conf(1) = potential%elec_conf(1) - 18
1173 potential%elec_conf(2) = potential%elec_conf(2) - 10
1175 potential%elec_conf(0) = potential%elec_conf(0) - 8
1176 potential%elec_conf(1) = potential%elec_conf(1) - 18
1177 potential%elec_conf(2) = potential%elec_conf(2) - 20
1179 potential%elec_conf(0) = potential%elec_conf(0) - 10
1180 potential%elec_conf(1) = potential%elec_conf(1) - 18
1181 potential%elec_conf(2) = potential%elec_conf(2) - 20
1183 potential%elec_conf(0) = potential%elec_conf(0) - 10
1184 potential%elec_conf(1) = potential%elec_conf(1) - 24
1185 potential%elec_conf(2) = potential%elec_conf(2) - 20
1187 potential%elec_conf(0) = potential%elec_conf(0) - 10
1188 potential%elec_conf(1) = potential%elec_conf(1) - 24
1189 potential%elec_conf(2) = potential%elec_conf(2) - 20
1190 potential%elec_conf(3) = potential%elec_conf(3) - 14
1192 potential%elec_conf(0) = potential%elec_conf(0) - 10
1193 potential%elec_conf(1) = potential%elec_conf(1) - 24
1194 potential%elec_conf(2) = potential%elec_conf(2) - 30
1195 potential%elec_conf(3) = potential%elec_conf(3) - 14
1197 potential%elec_conf(0) = potential%elec_conf(0) - 12
1198 potential%elec_conf(1) = potential%elec_conf(1) - 24
1199 potential%elec_conf(2) = potential%elec_conf(2) - 30
1200 potential%elec_conf(3) = potential%elec_conf(3) - 14
1202 potential%elec_conf(0) = potential%elec_conf(0) - 12
1203 potential%elec_conf(1) = potential%elec_conf(1) - 30
1204 potential%elec_conf(2) = potential%elec_conf(2) - 30
1205 potential%elec_conf(3) = potential%elec_conf(3) - 14
1207 potential%elec_conf(0) = potential%elec_conf(0) - 12
1208 potential%elec_conf(1) = potential%elec_conf(1) - 30
1209 potential%elec_conf(2) = potential%elec_conf(2) - 30
1210 potential%elec_conf(3) = potential%elec_conf(3) - 28
1213 IF (
PRESENT(itype))
THEN
1214 IF (itype ==
"BARE")
THEN
1215 potential%description(1) =
"Bare Coulomb Potential"
1217 potential%description(2) =
"Valence charge only"
1219 potential%description(2) =
"Full atomic charge"
1803 SUBROUTINE read_gth_potential(element_symbol, potential_name, potential, zeff_correction, &
1804 para_env, potential_file_name, potential_section, update_input, &
1805 monovalent, potential_found)
1807 CHARACTER(LEN=*),
INTENT(IN) :: element_symbol, potential_name
1809 REAL(KIND=
dp),
INTENT(IN) :: zeff_correction
1811 CHARACTER(len=default_path_length),
INTENT(IN) :: potential_file_name
1813 LOGICAL,
INTENT(IN) :: update_input
1814 LOGICAL,
INTENT(IN),
OPTIONAL :: monovalent
1815 LOGICAL,
INTENT(OUT),
OPTIONAL :: potential_found
1817 CHARACTER(LEN=240) :: line
1818 CHARACTER(LEN=242) :: line2
1819 CHARACTER(len=5*default_string_length) :: line_att
1820 CHARACTER(LEN=LEN(element_symbol)) :: symbol
1821 CHARACTER(LEN=LEN(element_symbol)+2) :: symbol2
1822 CHARACTER(LEN=LEN(potential_name)) :: apname
1823 CHARACTER(LEN=LEN(potential_name)+2) :: apname2
1824 INTEGER :: i, ic, ipot, irep, istr, j, l, lppnl, &
1825 lprj_ppnl_max, maxlppl, n, nppnl, &
1826 nprj_ppnl, nprj_ppnl_max, strlen1, &
1828 INTEGER,
DIMENSION(:),
POINTER :: elec_conf
1829 LOGICAL :: found, is_ok, match, read_from_input
1830 REAL(KIND=
dp) :: alpha, ci, r, rc2
1831 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: tmp_vals
1832 REAL(KIND=
dp),
DIMENSION(:, :, :),
POINTER :: hprj_ppnl, kprj_ppnl
1840 NULLIFY (parser, tmp_vals)
1845 IF (
PRESENT(potential_found)) potential_found = .false.
1847 potential%monovalent = .false.
1848 IF (
PRESENT(monovalent)) potential%monovalent = monovalent
1850 potential%name = potential_name
1851 potential%aliases = potential_name
1852 read_from_input = .false.
1854 IF (.NOT. read_from_input)
THEN
1856 CALL parser_create(parser, potential_file_name, para_env=para_env)
1860 potential%lpotextended = .false.
1861 potential%nexp_lpot = 0
1862 potential%lsdpot = .false.
1863 potential%nexp_lsd = 0
1864 potential%nlcc = .false.
1865 potential%nexp_nlcc = 0
1869 apname = potential_name
1870 symbol = element_symbol
1873 IF (read_from_input)
THEN
1883 IF (read_from_input)
THEN
1889 line2 =
" "//line//
" "
1890 symbol2 =
" "//trim(symbol)//
" "
1891 apname2 =
" "//trim(apname)//
" "
1892 strlen1 = len_trim(symbol2) + 1
1893 strlen2 = len_trim(apname2) + 1
1894 i = index(line2, symbol2(:strlen1))
1895 j = index(line2, apname2(:strlen2))
1896 IF (i > 0 .AND. j > 0)
THEN
1898 i = i + 1 + index(line2(i + 1:),
" ")
1899 potential%aliases = line2(i:)
1907 IF (read_from_input)
THEN
1909 IF (.NOT. is_ok)
THEN
1910 CALL cp_abort(__location__, &
1911 "Error while reading GTH potential from input file")
1913 CALL val_get(val, c_val=line_att)
1914 READ (line_att, *) elec_conf(l)
1916 DO WHILE (len_trim(line_att) /= 0)
1919 READ (line_att, *) elec_conf(l)
1930 IF (update_input)
THEN
1931 WRITE (unit=line_att, fmt=
"(T8,*(1X,I0))") elec_conf(:)
1933 c_val=trim(line_att))
1938 IF (potential%monovalent)
THEN
1939 potential%elec_conf(0) = 1
1941 potential%elec_conf(:) = elec_conf(:)
1944 potential%zeff_correction = zeff_correction
1945 potential%zeff = real(sum(potential%elec_conf),
dp) + zeff_correction
1947 DEALLOCATE (elec_conf)
1951 IF (read_from_input)
THEN
1953 IF (.NOT. is_ok)
THEN
1954 CALL cp_abort(__location__, &
1955 "Error while reading GTH potential from input file")
1957 CALL val_get(val, c_val=line_att)
1958 READ (line_att, *) r
1963 istr = len_trim(line_att) + 1
1964 WRITE (unit=line_att(istr:), fmt=
"(T9,ES25.16E3)") r
1966 alpha = 1.0_dp/(2.0_dp*r**2)
1968 potential%alpha_core_charge = alpha
1969 potential%ccore_charge = potential%zeff*sqrt((alpha/
pi)**3)
1971 potential%alpha_ppl = alpha
1972 potential%cerf_ppl = potential%zeff*sqrt((alpha/
pi)**3)
1975 IF (read_from_input)
THEN
1976 READ (line_att, *) n
1980 istr = len_trim(line_att) + 1
1981 WRITE (unit=line_att(istr:), fmt=
"(1X,I0)") n
1983 potential%nexp_ppl = n
1987 IF (read_from_input)
THEN
1988 READ (line_att, *) ci
1992 istr = len_trim(line_att) + 1
1993 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") ci
1995 rc2 = (2.0_dp*potential%alpha_ppl)
1996 potential%cexp_ppl(i) = rc2**(i - 1)*ci
1999 IF (.NOT. read_from_input)
THEN
2001 IF (update_input)
THEN
2003 c_val=trim(line_att))
2007 IF (len_trim(line_att) /= 0)
THEN
2008 CALL cp_abort(__location__, &
2009 "Error while reading GTH potential from input file")
2018 IF (read_from_input)
THEN
2019 read_keywords_from_input:
DO
2022 CALL val_get(val, c_val=line_att)
2023 IF (index(line_att,
"LPOT") /= 0)
THEN
2024 potential%lpotextended = .true.
2026 READ (line_att, *) potential%nexp_lpot
2027 n = potential%nexp_lpot
2030 NULLIFY (potential%alpha_lpot, potential%nct_lpot, potential%cval_lpot)
2033 CALL reallocate(potential%cval_lpot, 1, 4, 1, n)
2034 DO ipot = 1, potential%nexp_lpot
2037 CALL val_get(val, c_val=line_att)
2038 READ (line_att, *) r
2039 potential%alpha_lpot(ipot) = 0.5_dp/(r*r)
2041 READ (line_att, *) potential%nct_lpot(ipot)
2043 DO ic = 1, potential%nct_lpot(ipot)
2044 READ (line_att, *) ci
2045 rc2 = (2._dp*potential%alpha_lpot(ipot))**(ic - 1)
2046 potential%cval_lpot(ic, ipot) = ci*rc2
2050 ELSE IF (index(line_att,
"NLCC") /= 0)
THEN
2051 potential%nlcc = .true.
2053 READ (line_att, *) potential%nexp_nlcc
2054 n = potential%nexp_nlcc
2055 NULLIFY (potential%alpha_nlcc, potential%nct_nlcc, potential%cval_nlcc)
2058 CALL reallocate(potential%cval_nlcc, 1, 4, 1, n)
2059 DO ipot = 1, potential%nexp_nlcc
2062 CALL val_get(val, c_val=line_att)
2063 READ (line_att, *) potential%alpha_nlcc(ipot)
2065 READ (line_att, *) potential%nct_nlcc(ipot)
2067 DO ic = 1, potential%nct_nlcc(ipot)
2068 READ (line_att, *) potential%cval_nlcc(ic, ipot)
2070 potential%cval_nlcc(ic, ipot) = potential%cval_nlcc(ic, ipot)/(4.0_dp*
pi)
2074 ELSE IF (index(line_att,
"LSD") /= 0)
THEN
2075 potential%lsdpot = .true.
2077 READ (line_att, *) potential%nexp_lsd
2078 n = potential%nexp_lsd
2079 NULLIFY (potential%alpha_lsd, potential%nct_lsd, potential%cval_lsd)
2082 CALL reallocate(potential%cval_lsd, 1, 4, 1, n)
2083 DO ipot = 1, potential%nexp_lsd
2086 CALL val_get(val, c_val=line_att)
2087 READ (line_att, *) r
2088 potential%alpha_lsd(ipot) = 0.5_dp/(r*r)
2090 READ (line_att, *) potential%nct_lsd(ipot)
2092 DO ic = 1, potential%nct_lsd(ipot)
2093 READ (line_att, *) ci
2094 rc2 = (2._dp*potential%alpha_lsd(ipot))**(ic - 1)
2095 potential%cval_lsd(ic, ipot) = ci*rc2
2100 EXIT read_keywords_from_input
2102 END DO read_keywords_from_input
2110 IF (index(line,
"LPOT") /= 0)
THEN
2112 potential%lpotextended = .true.
2114 n = potential%nexp_lpot
2115 NULLIFY (potential%alpha_lpot, potential%nct_lpot, potential%cval_lpot)
2118 CALL reallocate(potential%cval_lpot, 1, 4, 1, n)
2121 IF (update_input)
THEN
2122 WRITE (unit=line_att, fmt=
"(T9,A,1X,I0)")
"LPOT", n
2124 c_val=trim(line_att))
2126 DO ipot = 1, potential%nexp_lpot
2128 potential%alpha_lpot(ipot) = 0.5_dp/(r*r)
2130 CALL reallocate(tmp_vals, 1, potential%nct_lpot(ipot))
2131 DO ic = 1, potential%nct_lpot(ipot)
2134 rc2 = (2._dp*potential%alpha_lpot(ipot))**(ic - 1)
2135 potential%cval_lpot(ic, ipot) = ci*rc2
2139 IF (update_input)
THEN
2140 WRITE (unit=line_att, fmt=
"(T9,ES25.16E3,1X,I0,*(ES25.16E3))") &
2141 r, potential%nct_lpot(ipot), tmp_vals(1:potential%nct_lpot(ipot))
2143 c_val=trim(line_att))
2146 ELSE IF (index(line,
"NLCC") /= 0)
THEN
2148 potential%nlcc = .true.
2150 n = potential%nexp_nlcc
2151 NULLIFY (potential%alpha_nlcc, potential%nct_nlcc, potential%cval_nlcc)
2154 CALL reallocate(potential%cval_nlcc, 1, 4, 1, n)
2156 WRITE (unit=line_att, fmt=
"(T9,A,1X,I0)")
"NLCC", n
2159 c_val=trim(line_att))
2160 DO ipot = 1, potential%nexp_nlcc
2163 CALL reallocate(tmp_vals, 1, potential%nct_nlcc(ipot))
2164 DO ic = 1, potential%nct_nlcc(ipot)
2166 tmp_vals(ic) = potential%cval_nlcc(ic, ipot)
2168 potential%cval_nlcc(ic, ipot) = potential%cval_nlcc(ic, ipot)/(4.0_dp*
pi)
2172 IF (update_input)
THEN
2173 WRITE (unit=line_att, fmt=
"(T9,ES25.16E3,1X,I0,*(ES25.16E3))") &
2174 potential%alpha_nlcc(ipot), potential%nct_nlcc(ipot), &
2175 tmp_vals(1:potential%nct_nlcc(ipot))
2177 c_val=trim(line_att))
2180 ELSE IF (index(line,
"LSD") /= 0)
THEN
2182 potential%lsdpot = .true.
2184 n = potential%nexp_lsd
2185 NULLIFY (potential%alpha_lsd, potential%nct_lsd, potential%cval_lsd)
2188 CALL reallocate(potential%cval_lsd, 1, 4, 1, n)
2191 IF (update_input)
THEN
2192 WRITE (unit=line_att, fmt=
"(T9,A,1X,I0)")
"LSD", n
2194 c_val=trim(line_att))
2196 DO ipot = 1, potential%nexp_lsd
2198 potential%alpha_lsd(ipot) = 0.5_dp/(r*r)
2200 CALL reallocate(tmp_vals, 1, potential%nct_lsd(ipot))
2201 DO ic = 1, potential%nct_lsd(ipot)
2204 rc2 = (2._dp*potential%alpha_lsd(ipot))**(ic - 1)
2205 potential%cval_lsd(ic, ipot) = ci*rc2
2209 IF (update_input)
THEN
2210 WRITE (unit=line_att, fmt=
"(T9,ES25.16E3,1X,I0,*(ES25.16E3))") r, potential%nct_lsd(ipot), &
2211 tmp_vals(1:potential%nct_lsd(ipot))
2213 c_val=trim(line_att))
2217 CALL cp_abort(__location__, &
2218 "Syntax error for <"// &
2219 trim(element_symbol)// &
2220 "> in the atomic potential <"// &
2221 trim(potential_name)// &
2222 "> potential file <"// &
2223 trim(potential_file_name)//
">: "// &
2224 "Expected LPOT/NLCC/LSD keyword, got: <"// &
2229 CALL cp_abort(__location__, &
2230 "Syntax error for <"// &
2231 trim(element_symbol)// &
2232 "> in the atomic potential <"// &
2233 trim(potential_name)// &
2234 "> potential file <"// &
2235 trim(potential_file_name)//
">: "// &
2236 "Expected LPOT/NLCC/LSD keyword or INTEGER, got: <"// &
2239 END DO read_keywords
2243 IF (read_from_input)
THEN
2244 READ (line_att, *) n
2246 IF (index(line_att,
"SOC") /= 0)
THEN
2247 potential%soc = .true.
2254 IF (index(line,
"SOC") /= 0) potential%soc = .true.
2257 IF (update_input)
THEN
2258 IF (potential%soc)
THEN
2259 WRITE (unit=line_att, fmt=
"(T9,I0,2X,A)") n,
"SOC"
2261 WRITE (unit=line_att, fmt=
"(T9,I0)") n
2264 c_val=trim(line_att))
2267 potential%lppnl = n - 1
2270 potential%lprj_ppnl_max = n - 1
2271 potential%nprj_ppnl_max = 0
2275 lppnl = potential%lppnl
2276 nppnl = potential%nppnl
2280 NULLIFY (hprj_ppnl, kprj_ppnl)
2284 CALL reallocate(potential%alpha_ppnl, 0, lppnl)
2285 CALL reallocate(potential%nprj_ppnl, 0, lppnl)
2291 IF (read_from_input)
THEN
2293 IF (.NOT. is_ok)
THEN
2294 CALL cp_abort(__location__, &
2295 "Error while reading GTH potential from input file")
2297 CALL val_get(val, c_val=line_att)
2298 READ (line_att, *) r
2300 READ (line_att, *) nprj_ppnl
2306 istr = len_trim(line_att) + 1
2307 WRITE (unit=line_att(istr:), fmt=
"(T9,ES25.16E3,1X,I0)") r, nprj_ppnl
2309 IF (r == 0.0_dp .AND. nprj_ppnl /= 0)
THEN
2310 CALL cp_abort(__location__, &
2311 "An error was detected in the atomic potential <"// &
2312 trim(potential_name)// &
2313 "> potential file <"// &
2314 trim(potential_file_name)//
">")
2316 potential%alpha_ppnl(l) = 0.0_dp
2317 IF (r /= 0.0_dp .AND. n /= 0) potential%alpha_ppnl(l) = 1.0_dp/(2.0_dp*r**2)
2318 potential%nprj_ppnl(l) = nprj_ppnl
2319 nppnl = nppnl + nprj_ppnl*
nco(l)
2320 IF (nprj_ppnl > nprj_ppnl_max)
THEN
2321 nprj_ppnl_max = nprj_ppnl
2322 CALL reallocate(hprj_ppnl, 1, nprj_ppnl_max, &
2325 CALL reallocate(kprj_ppnl, 1, nprj_ppnl_max, &
2331 IF (read_from_input)
THEN
2332 READ (line_att, *) hprj_ppnl(i, i, l)
2336 istr = len_trim(line_att) + 1
2337 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") hprj_ppnl(i, i, l)
2340 IF (read_from_input)
THEN
2341 IF (len_trim(line_att) /= 0)
THEN
2342 CALL cp_abort(__location__, &
2343 "Error while reading GTH potential from input file")
2346 IF (.NOT. is_ok)
THEN
2347 CALL cp_abort(__location__, &
2348 "Error while reading GTH potential from input file")
2350 CALL val_get(val, c_val=line_att)
2351 READ (line_att, *) hprj_ppnl(i, i, l)
2354 IF (update_input)
THEN
2357 c_val=trim(line_att))
2361 istr = len_trim(line_att) + 1
2362 WRITE (unit=line_att(istr:), fmt=
"(T36,A,ES25.16E3)") &
2363 repeat(
" ", 25*(i - 1)), hprj_ppnl(i, i, l)
2366 DO j = i + 1, nprj_ppnl
2367 IF (read_from_input)
THEN
2368 READ (line_att, *) hprj_ppnl(i, j, l)
2372 istr = len_trim(line_att) + 1
2373 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") hprj_ppnl(i, j, l)
2377 IF (.NOT. read_from_input)
THEN
2378 IF (update_input)
THEN
2381 c_val=trim(line_att))
2385 IF (len_trim(line_att) /= 0)
THEN
2386 CALL cp_abort(__location__, &
2387 "Error while reading GTH potential from input file")
2390 IF (nprj_ppnl > 1)
THEN
2393 IF (potential%soc .AND. (l > 0))
THEN
2396 IF (read_from_input)
THEN
2397 IF (len_trim(line_att) /= 0)
THEN
2398 CALL cp_abort(__location__, &
2399 "Error while reading GTH potential from input file")
2402 IF (.NOT. is_ok)
THEN
2403 CALL cp_abort(__location__, &
2404 "Error while reading GTH potential from input file")
2406 CALL val_get(val, c_val=line_att)
2407 READ (line_att, *) kprj_ppnl(i, i, l)
2410 IF (i > 1 .AND. update_input)
THEN
2413 c_val=trim(line_att))
2417 istr = len_trim(line_att) + 1
2418 WRITE (unit=line_att(istr:), fmt=
"(T36,A,ES25.16E3)") &
2419 repeat(
" ", 25*(i - 1)), kprj_ppnl(i, i, l)
2421 DO j = i + 1, nprj_ppnl
2422 IF (read_from_input)
THEN
2423 READ (line_att, *) kprj_ppnl(i, j, l)
2427 istr = len_trim(line_att) + 1
2428 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") kprj_ppnl(i, j, l)
2432 IF (read_from_input)
THEN
2433 IF (len_trim(line_att) /= 0)
THEN
2434 CALL cp_abort(__location__, &
2435 "Error while reading GTH potential from input file")
2438 IF (update_input)
THEN
2441 c_val=trim(line_att))
2445 IF (nprj_ppnl > 1)
THEN
2449 lprj_ppnl_max = max(lprj_ppnl_max, l + 2*(nprj_ppnl - 1))
2452 potential%nppnl = nppnl
2455 potential%lprj_ppnl_max = lprj_ppnl_max
2456 potential%nprj_ppnl_max = nprj_ppnl_max
2457 CALL reallocate(potential%hprj_ppnl, 1, nprj_ppnl_max, &
2460 potential%hprj_ppnl(:, :, :) = hprj_ppnl(:, :, :)
2461 CALL reallocate(potential%kprj_ppnl, 1, nprj_ppnl_max, &
2464 potential%kprj_ppnl(:, :, :) = kprj_ppnl(:, :, :)
2467 CALL reallocate(potential%cprj_ppnl, 1, nprj_ppnl_max, 0, lppnl)
2468 CALL reallocate(potential%vprj_ppnl, 1, nppnl, 1, nppnl)
2469 CALL reallocate(potential%wprj_ppnl, 1, nppnl, 1, nppnl)
2471 DEALLOCATE (hprj_ppnl, kprj_ppnl)
2477 IF (
PRESENT(potential_found))
THEN
2482 CALL cp_abort(__location__, &
2483 "The requested atomic potential <"// &
2484 trim(potential_name)// &
2485 "> for element <"// &
2487 "> was not found in the potential file <"// &
2488 trim(potential_file_name)//
">")
2492 IF (
PRESENT(potential_found)) potential_found = .true.
2494 IF (.NOT. read_from_input)
THEN
2496 IF (match .AND. update_input)
THEN
2498 WRITE (unit=line_att, fmt=
"(T9,A)") &
2499 "# Potential name: "//trim(adjustl(apname2(:strlen2)))// &
2500 " for element symbol: "//trim(adjustl(symbol2(:strlen1)))
2502 c_val=trim(line_att))
2504 WRITE (unit=line_att, fmt=
"(T9,A)") &
2505 "# Potential read from the potential filename: "//trim(adjustl(potential_file_name))
2507 c_val=trim(line_att))
2513 IF (
ASSOCIATED(tmp_vals))
DEALLOCATE (tmp_vals)
2737 SUBROUTINE set_gth_potential(potential, name, alpha_core_charge, alpha_ppl, &
2738 ccore_charge, cerf_ppl, core_charge_radius, &
2739 ppl_radius, ppnl_radius, lppnl, lprj_ppnl_max, &
2740 nexp_ppl, nppnl, nprj_ppnl_max, z, zeff, zeff_correction, &
2741 alpha_ppnl, cexp_ppl, elec_conf, nprj_ppnl, cprj, cprj_ppnl, &
2742 vprj_ppnl, wprj_ppnl, hprj_ppnl, kprj_ppnl)
2745 CHARACTER(LEN=default_string_length),
INTENT(IN), &
2747 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: alpha_core_charge, alpha_ppl, &
2748 ccore_charge, cerf_ppl, &
2749 core_charge_radius, ppl_radius, &
2751 INTEGER,
INTENT(IN),
OPTIONAL :: lppnl, lprj_ppnl_max, nexp_ppl, nppnl, &
2753 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: zeff, zeff_correction
2754 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_ppnl, cexp_ppl
2755 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf, nprj_ppnl
2756 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cprj, cprj_ppnl, vprj_ppnl, wprj_ppnl
2757 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
2758 POINTER :: hprj_ppnl, kprj_ppnl
2760 IF (
PRESENT(name)) potential%name = name
2761 IF (
PRESENT(alpha_core_charge))
THEN
2762 potential%alpha_core_charge = alpha_core_charge
2764 IF (
PRESENT(alpha_ppl)) potential%alpha_ppl = alpha_ppl
2765 IF (
PRESENT(ccore_charge)) potential%ccore_charge = ccore_charge
2766 IF (
PRESENT(cerf_ppl)) potential%cerf_ppl = cerf_ppl
2767 IF (
PRESENT(core_charge_radius))
THEN
2768 potential%core_charge_radius = core_charge_radius
2770 IF (
PRESENT(ppl_radius)) potential%ppl_radius = ppl_radius
2771 IF (
PRESENT(ppnl_radius)) potential%ppnl_radius = ppnl_radius
2772 IF (
PRESENT(lppnl)) potential%lppnl = lppnl
2773 IF (
PRESENT(lprj_ppnl_max)) potential%lprj_ppnl_max = lprj_ppnl_max
2774 IF (
PRESENT(nexp_ppl)) potential%nexp_ppl = nexp_ppl
2775 IF (
PRESENT(nppnl)) potential%nppnl = nppnl
2776 IF (
PRESENT(nprj_ppnl_max)) potential%nprj_ppnl_max = nprj_ppnl_max
2777 IF (
PRESENT(z)) potential%z = z
2778 IF (
PRESENT(zeff)) potential%zeff = zeff
2779 IF (
PRESENT(zeff_correction)) potential%zeff_correction = zeff_correction
2780 IF (
PRESENT(alpha_ppnl)) potential%alpha_ppnl => alpha_ppnl
2781 IF (
PRESENT(cexp_ppl)) potential%cexp_ppl => cexp_ppl
2782 IF (
PRESENT(elec_conf))
THEN
2783 IF (
ASSOCIATED(potential%elec_conf))
THEN
2784 DEALLOCATE (potential%elec_conf)
2786 ALLOCATE (potential%elec_conf(0:
SIZE(elec_conf) - 1))
2787 potential%elec_conf(:) = elec_conf(:)
2789 IF (
PRESENT(nprj_ppnl)) potential%nprj_ppnl => nprj_ppnl
2790 IF (
PRESENT(cprj)) potential%cprj => cprj
2791 IF (
PRESENT(cprj_ppnl)) potential%cprj_ppnl => cprj_ppnl
2792 IF (
PRESENT(hprj_ppnl)) potential%hprj_ppnl => hprj_ppnl
2793 IF (
PRESENT(kprj_ppnl)) potential%kprj_ppnl => kprj_ppnl
2794 IF (
PRESENT(vprj_ppnl)) potential%vprj_ppnl => vprj_ppnl
2795 IF (
PRESENT(wprj_ppnl)) potential%wprj_ppnl => wprj_ppnl
2840 SUBROUTINE set_sgp_potential(potential, name, description, aliases, elec_conf, &
2841 z, zeff, zeff_correction, alpha_core_charge, &
2842 ccore_charge, core_charge_radius, &
2843 ppl_radius, ppnl_radius, &
2844 ecp_local, n_local, a_local, c_local, &
2845 nloc, nrloc, aloc, bloc, &
2846 ecp_semi_local, sl_lmax, npot, nrpot, apot, bpot, &
2847 n_nonlocal, nppnl, lmax, is_nonlocal, a_nonlocal, h_nonlocal, c_nonlocal, &
2848 has_nlcc, n_nlcc, a_nlcc, c_nlcc)
2851 CHARACTER(LEN=default_string_length),
INTENT(IN), &
2853 CHARACTER(LEN=default_string_length), &
2854 DIMENSION(4),
INTENT(IN),
OPTIONAL :: description
2855 CHARACTER(LEN=default_string_length),
INTENT(IN), &
2857 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf
2858 INTEGER,
INTENT(IN),
OPTIONAL :: z
2859 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: zeff, zeff_correction, &
2860 alpha_core_charge, ccore_charge, &
2861 core_charge_radius, ppl_radius, &
2863 LOGICAL,
INTENT(IN),
OPTIONAL :: ecp_local
2864 INTEGER,
INTENT(IN),
OPTIONAL :: n_local
2865 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_local, c_local
2866 INTEGER,
INTENT(IN),
OPTIONAL :: nloc
2867 INTEGER,
DIMENSION(1:10),
INTENT(IN),
OPTIONAL :: nrloc
2868 REAL(
dp),
DIMENSION(1:10),
INTENT(IN),
OPTIONAL :: aloc, bloc
2869 LOGICAL,
INTENT(IN),
OPTIONAL :: ecp_semi_local
2870 INTEGER,
INTENT(IN),
OPTIONAL :: sl_lmax
2871 INTEGER,
DIMENSION(0:10),
OPTIONAL :: npot
2872 INTEGER,
DIMENSION(1:15, 0:10),
OPTIONAL :: nrpot
2873 REAL(dp),
DIMENSION(1:15, 0:10),
OPTIONAL :: apot, bpot
2874 INTEGER,
INTENT(IN),
OPTIONAL :: n_nonlocal, nppnl, lmax
2875 LOGICAL,
DIMENSION(0:5),
INTENT(IN),
OPTIONAL :: is_nonlocal
2876 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nonlocal
2877 REAL(KIND=dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: h_nonlocal
2878 REAL(KIND=dp),
DIMENSION(:, :, :),
OPTIONAL, &
2879 POINTER :: c_nonlocal
2880 LOGICAL,
INTENT(IN),
OPTIONAL :: has_nlcc
2881 INTEGER,
INTENT(IN),
OPTIONAL :: n_nlcc
2882 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nlcc, c_nlcc
2884 IF (
PRESENT(name)) potential%name = name
2885 IF (
PRESENT(aliases)) potential%aliases = aliases
2886 IF (
PRESENT(description)) potential%description = description
2888 IF (
PRESENT(elec_conf))
THEN
2889 IF (
ASSOCIATED(potential%elec_conf))
THEN
2890 DEALLOCATE (potential%elec_conf)
2892 ALLOCATE (potential%elec_conf(0:
SIZE(elec_conf) - 1))
2893 potential%elec_conf(:) = elec_conf(:)
2896 IF (
PRESENT(z)) potential%z = z
2897 IF (
PRESENT(zeff)) potential%zeff = zeff
2898 IF (
PRESENT(zeff_correction)) potential%zeff_correction = zeff_correction
2899 IF (
PRESENT(alpha_core_charge)) potential%alpha_core_charge = alpha_core_charge
2900 IF (
PRESENT(ccore_charge)) potential%ccore_charge = ccore_charge
2901 IF (
PRESENT(core_charge_radius)) potential%core_charge_radius = core_charge_radius
2903 IF (
PRESENT(ppl_radius)) potential%ppl_radius = ppl_radius
2904 IF (
PRESENT(ppnl_radius)) potential%ppnl_radius = ppnl_radius
2906 IF (
PRESENT(ecp_local)) potential%ecp_local = ecp_local
2907 IF (
PRESENT(n_local)) potential%n_local = n_local
2908 IF (
PRESENT(a_local)) potential%a_local => a_local
2909 IF (
PRESENT(c_local)) potential%c_local => c_local
2911 IF (
PRESENT(nloc)) potential%nloc = nloc
2912 IF (
PRESENT(nrloc)) potential%nrloc = nrloc
2913 IF (
PRESENT(aloc)) potential%aloc = aloc
2914 IF (
PRESENT(bloc)) potential%bloc = bloc
2916 IF (
PRESENT(ecp_semi_local)) potential%ecp_semi_local = ecp_semi_local
2917 IF (
PRESENT(sl_lmax)) potential%sl_lmax = sl_lmax
2918 IF (
PRESENT(npot)) potential%npot = npot
2919 IF (
PRESENT(nrpot)) potential%nrpot = nrpot
2920 IF (
PRESENT(apot)) potential%apot = apot
2921 IF (
PRESENT(bpot)) potential%bpot = bpot
2923 IF (
PRESENT(n_nonlocal)) potential%n_nonlocal = n_nonlocal
2924 IF (
PRESENT(nppnl)) potential%nppnl = nppnl
2925 IF (
PRESENT(lmax)) potential%lmax = lmax
2926 IF (
PRESENT(is_nonlocal)) potential%is_nonlocal(:) = is_nonlocal(:)
2927 IF (
PRESENT(a_nonlocal)) potential%a_nonlocal => a_nonlocal
2928 IF (
PRESENT(c_nonlocal)) potential%c_nonlocal => c_nonlocal
2929 IF (
PRESENT(h_nonlocal)) potential%h_nonlocal => h_nonlocal
2931 IF (
PRESENT(has_nlcc)) potential%has_nlcc = has_nlcc
2932 IF (
PRESENT(n_nlcc)) potential%n_nlcc = n_nlcc
2933 IF (
PRESENT(a_nlcc)) potential%a_nlcc => a_nlcc
2934 IF (
PRESENT(c_nlcc)) potential%c_nlcc => c_nlcc
3185 SUBROUTINE copy_gth_potential(pot_in, pot_out)
3190 CALL allocate_gth_potential(pot_out)
3192 pot_out%name = pot_in%name
3193 pot_out%aliases = pot_in%aliases
3194 pot_out%alpha_core_charge = pot_in%alpha_core_charge
3195 pot_out%alpha_ppl = pot_in%alpha_ppl
3196 pot_out%ccore_charge = pot_in%ccore_charge
3197 pot_out%cerf_ppl = pot_in%cerf_ppl
3198 pot_out%zeff = pot_in%zeff
3199 pot_out%core_charge_radius = pot_in%core_charge_radius
3200 pot_out%ppl_radius = pot_in%ppl_radius
3201 pot_out%ppnl_radius = pot_in%ppnl_radius
3202 pot_out%zeff_correction = pot_in%zeff_correction
3203 pot_out%lppnl = pot_in%lppnl
3204 pot_out%lprj_ppnl_max = pot_in%lprj_ppnl_max
3205 pot_out%nexp_ppl = pot_in%nexp_ppl
3206 pot_out%nppnl = pot_in%nppnl
3207 pot_out%nprj_ppnl_max = pot_in%nprj_ppnl_max
3208 pot_out%z = pot_in%z
3209 pot_out%nlcc = pot_in%nlcc
3210 pot_out%nexp_nlcc = pot_in%nexp_nlcc
3211 pot_out%lsdpot = pot_in%lsdpot
3212 pot_out%nexp_lsd = pot_in%nexp_lsd
3213 pot_out%lpotextended = pot_in%lpotextended
3214 pot_out%nexp_lpot = pot_in%nexp_lpot
3216 IF (
ASSOCIATED(pot_in%alpha_ppnl))
THEN
3217 ALLOCATE (pot_out%alpha_ppnl(lbound(pot_in%alpha_ppnl, 1):ubound(pot_in%alpha_ppnl, 1)))
3218 pot_out%alpha_ppnl(:) = pot_in%alpha_ppnl(:)
3220 IF (
ASSOCIATED(pot_in%cexp_ppl))
THEN
3221 ALLOCATE (pot_out%cexp_ppl(lbound(pot_in%cexp_ppl, 1):ubound(pot_in%cexp_ppl, 1)))
3222 pot_out%cexp_ppl(:) = pot_in%cexp_ppl(:)
3224 IF (
ASSOCIATED(pot_in%elec_conf))
THEN
3225 ALLOCATE (pot_out%elec_conf(lbound(pot_in%elec_conf, 1):ubound(pot_in%elec_conf, 1)))
3226 pot_out%elec_conf(:) = pot_in%elec_conf(:)
3228 IF (
ASSOCIATED(pot_in%nprj_ppnl))
THEN
3229 ALLOCATE (pot_out%nprj_ppnl(lbound(pot_in%nprj_ppnl, 1):ubound(pot_in%nprj_ppnl, 1)))
3230 pot_out%nprj_ppnl(:) = pot_in%nprj_ppnl(:)
3232 IF (
ASSOCIATED(pot_in%cprj))
THEN
3233 ALLOCATE (pot_out%cprj(lbound(pot_in%cprj, 1):ubound(pot_in%cprj, 1), &
3234 lbound(pot_in%cprj, 2):ubound(pot_in%cprj, 2)))
3235 pot_out%cprj(:, :) = pot_in%cprj(:, :)
3237 IF (
ASSOCIATED(pot_in%cprj_ppnl))
THEN
3238 ALLOCATE (pot_out%cprj_ppnl(lbound(pot_in%cprj_ppnl, 1):ubound(pot_in%cprj_ppnl, 1), &
3239 lbound(pot_in%cprj_ppnl, 2):ubound(pot_in%cprj_ppnl, 2)))
3240 pot_out%cprj_ppnl(:, :) = pot_in%cprj_ppnl(:, :)
3242 IF (
ASSOCIATED(pot_in%hprj_ppnl))
THEN
3243 ALLOCATE (pot_out%hprj_ppnl(lbound(pot_in%hprj_ppnl, 1):ubound(pot_in%hprj_ppnl, 1), &
3244 lbound(pot_in%hprj_ppnl, 2):ubound(pot_in%hprj_ppnl, 2), &
3245 lbound(pot_in%hprj_ppnl, 3):ubound(pot_in%hprj_ppnl, 3)))
3246 pot_out%hprj_ppnl(:, :, :) = pot_in%hprj_ppnl(:, :, :)
3248 IF (
ASSOCIATED(pot_in%kprj_ppnl))
THEN
3249 ALLOCATE (pot_out%kprj_ppnl(lbound(pot_in%kprj_ppnl, 1):ubound(pot_in%kprj_ppnl, 1), &
3250 lbound(pot_in%kprj_ppnl, 2):ubound(pot_in%kprj_ppnl, 2), &
3251 lbound(pot_in%kprj_ppnl, 3):ubound(pot_in%kprj_ppnl, 3)))
3252 pot_out%kprj_ppnl(:, :, :) = pot_in%kprj_ppnl(:, :, :)
3254 IF (
ASSOCIATED(pot_in%vprj_ppnl))
THEN
3255 ALLOCATE (pot_out%vprj_ppnl(lbound(pot_in%vprj_ppnl, 1):ubound(pot_in%vprj_ppnl, 1), &
3256 lbound(pot_in%vprj_ppnl, 2):ubound(pot_in%vprj_ppnl, 2)))
3257 pot_out%vprj_ppnl(:, :) = pot_in%vprj_ppnl(:, :)
3259 IF (
ASSOCIATED(pot_in%wprj_ppnl))
THEN
3260 ALLOCATE (pot_out%wprj_ppnl(lbound(pot_in%wprj_ppnl, 1):ubound(pot_in%wprj_ppnl, 1), &
3261 lbound(pot_in%wprj_ppnl, 2):ubound(pot_in%wprj_ppnl, 2)))
3262 pot_out%wprj_ppnl(:, :) = pot_in%wprj_ppnl(:, :)
3264 IF (
ASSOCIATED(pot_in%alpha_nlcc))
THEN
3265 ALLOCATE (pot_out%alpha_nlcc(lbound(pot_in%alpha_nlcc, 1):ubound(pot_in%alpha_nlcc, 1)))
3266 pot_out%alpha_nlcc(:) = pot_in%alpha_nlcc(:)
3268 IF (
ASSOCIATED(pot_in%nct_nlcc))
THEN
3269 ALLOCATE (pot_out%nct_nlcc(lbound(pot_in%nct_nlcc, 1):ubound(pot_in%nct_nlcc, 1)))
3270 pot_out%nct_nlcc(:) = pot_in%nct_nlcc(:)
3272 IF (
ASSOCIATED(pot_in%cval_nlcc))
THEN
3273 ALLOCATE (pot_out%cval_nlcc(lbound(pot_in%cval_nlcc, 1):ubound(pot_in%cval_nlcc, 1), &
3274 lbound(pot_in%cval_nlcc, 2):ubound(pot_in%cval_nlcc, 2)))
3275 pot_out%cval_nlcc(:, :) = pot_in%cval_nlcc(:, :)
3277 IF (
ASSOCIATED(pot_in%alpha_lsd))
THEN
3278 ALLOCATE (pot_out%alpha_lsd(lbound(pot_in%alpha_lsd, 1):ubound(pot_in%alpha_lsd, 1)))
3279 pot_out%alpha_lsd(:) = pot_in%alpha_lsd(:)
3281 IF (
ASSOCIATED(pot_in%nct_lsd))
THEN
3282 ALLOCATE (pot_out%nct_lsd(lbound(pot_in%nct_lsd, 1):ubound(pot_in%nct_lsd, 1)))
3283 pot_out%nct_lsd(:) = pot_in%nct_lsd(:)
3285 IF (
ASSOCIATED(pot_in%cval_lsd))
THEN
3286 ALLOCATE (pot_out%cval_lsd(lbound(pot_in%cval_lsd, 1):ubound(pot_in%cval_lsd, 1), &
3287 lbound(pot_in%cval_lsd, 2):ubound(pot_in%cval_lsd, 2)))
3288 pot_out%cval_lsd(:, :) = pot_in%cval_lsd(:, :)
3290 IF (
ASSOCIATED(pot_in%alpha_lpot))
THEN
3291 ALLOCATE (pot_out%alpha_lpot(lbound(pot_in%alpha_lpot, 1):ubound(pot_in%alpha_lpot, 1)))
3292 pot_out%alpha_lpot(:) = pot_in%alpha_lpot(:)
3294 IF (
ASSOCIATED(pot_in%nct_lpot))
THEN
3295 ALLOCATE (pot_out%nct_lpot(lbound(pot_in%nct_lpot, 1):ubound(pot_in%nct_lpot, 1)))
3296 pot_out%nct_lpot(:) = pot_in%nct_lpot(:)
3298 IF (
ASSOCIATED(pot_in%cval_lpot))
THEN
3299 ALLOCATE (pot_out%cval_lpot(lbound(pot_in%cval_lpot, 1):ubound(pot_in%cval_lpot, 1), &
3300 lbound(pot_in%cval_lpot, 2):ubound(pot_in%cval_lpot, 2)))
3301 pot_out%cval_lpot(:, :) = pot_in%cval_lpot(:, :)
3313 SUBROUTINE copy_sgp_potential(pot_in, pot_out)
3318 CALL allocate_sgp_potential(pot_out)
3320 pot_out%name = pot_in%name
3321 pot_out%aliases = pot_in%aliases
3322 pot_out%z = pot_in%z
3323 pot_out%zeff = pot_in%zeff
3324 pot_out%zeff_correction = pot_in%zeff_correction
3325 pot_out%alpha_core_charge = pot_in%alpha_core_charge
3326 pot_out%ccore_charge = pot_in%ccore_charge
3327 pot_out%core_charge_radius = pot_in%core_charge_radius
3328 pot_out%ppl_radius = pot_in%ppl_radius
3329 pot_out%ppnl_radius = pot_in%ppnl_radius
3330 pot_out%ecp_local = pot_in%ecp_local
3331 pot_out%n_local = pot_in%n_local
3332 pot_out%nloc = pot_in%nloc
3333 pot_out%nrloc = pot_in%nrloc
3334 pot_out%aloc = pot_in%aloc
3335 pot_out%bloc = pot_in%bloc
3336 pot_out%ecp_semi_local = pot_in%ecp_semi_local
3337 pot_out%sl_lmax = pot_in%sl_lmax
3338 pot_out%npot = pot_in%npot
3339 pot_out%nrpot = pot_in%nrpot
3340 pot_out%apot = pot_in%apot
3341 pot_out%bpot = pot_in%bpot
3342 pot_out%n_nonlocal = pot_in%n_nonlocal
3343 pot_out%nppnl = pot_in%nppnl
3344 pot_out%lmax = pot_in%lmax
3345 pot_out%is_nonlocal = pot_in%is_nonlocal
3346 pot_out%has_nlcc = pot_in%has_nlcc
3347 pot_out%n_nlcc = pot_in%n_nlcc
3349 IF (
ASSOCIATED(pot_in%elec_conf))
THEN
3350 ALLOCATE (pot_out%elec_conf(lbound(pot_in%elec_conf, 1):ubound(pot_in%elec_conf, 1)))
3351 pot_out%elec_conf(:) = pot_in%elec_conf(:)
3353 IF (
ASSOCIATED(pot_in%a_local))
THEN
3354 ALLOCATE (pot_out%a_local(lbound(pot_in%a_local, 1):ubound(pot_in%a_local, 1)))
3355 pot_out%a_local(:) = pot_in%a_local(:)
3357 IF (
ASSOCIATED(pot_in%c_local))
THEN
3358 ALLOCATE (pot_out%c_local(lbound(pot_in%c_local, 1):ubound(pot_in%c_local, 1)))
3359 pot_out%c_local(:) = pot_in%c_local(:)
3361 IF (
ASSOCIATED(pot_in%a_nonlocal))
THEN
3362 ALLOCATE (pot_out%a_nonlocal(lbound(pot_in%a_nonlocal, 1):ubound(pot_in%a_nonlocal, 1)))
3363 pot_out%a_nonlocal(:) = pot_in%a_nonlocal(:)
3365 IF (
ASSOCIATED(pot_in%h_nonlocal))
THEN
3366 ALLOCATE (pot_out%h_nonlocal(lbound(pot_in%h_nonlocal, 1):ubound(pot_in%h_nonlocal, 1), &
3367 lbound(pot_in%h_nonlocal, 2):ubound(pot_in%h_nonlocal, 2)))
3368 pot_out%h_nonlocal(:, :) = pot_in%h_nonlocal(:, :)
3370 IF (
ASSOCIATED(pot_in%c_nonlocal))
THEN
3371 ALLOCATE (pot_out%c_nonlocal(lbound(pot_in%c_nonlocal, 1):ubound(pot_in%c_nonlocal, 1), &
3372 lbound(pot_in%c_nonlocal, 2):ubound(pot_in%c_nonlocal, 2), &
3373 lbound(pot_in%c_nonlocal, 3):ubound(pot_in%c_nonlocal, 3)))
3374 pot_out%c_nonlocal(:, :, :) = pot_in%c_nonlocal(:, :, :)
3376 IF (
ASSOCIATED(pot_in%cprj_ppnl))
THEN
3377 ALLOCATE (pot_out%cprj_ppnl(lbound(pot_in%cprj_ppnl, 1):ubound(pot_in%cprj_ppnl, 1), &
3378 lbound(pot_in%cprj_ppnl, 2):ubound(pot_in%cprj_ppnl, 2)))
3379 pot_out%cprj_ppnl(:, :) = pot_in%cprj_ppnl(:, :)
3381 IF (
ASSOCIATED(pot_in%vprj_ppnl))
THEN
3382 ALLOCATE (pot_out%vprj_ppnl(lbound(pot_in%vprj_ppnl, 1):ubound(pot_in%vprj_ppnl, 1)))
3383 pot_out%vprj_ppnl(:) = pot_in%vprj_ppnl(:)
3385 IF (
ASSOCIATED(pot_in%a_nlcc))
THEN
3386 ALLOCATE (pot_out%a_nlcc(lbound(pot_in%a_nlcc, 1):ubound(pot_in%a_nlcc, 1)))
3387 pot_out%a_nlcc(:) = pot_in%a_nlcc(:)
3389 IF (
ASSOCIATED(pot_in%c_nlcc))
THEN
3390 ALLOCATE (pot_out%c_nlcc(lbound(pot_in%c_nlcc, 1):ubound(pot_in%c_nlcc, 1)))
3391 pot_out%c_nlcc(:) = pot_in%c_nlcc(:)