757 SUBROUTINE get_gth_potential(potential, name, aliases, alpha_core_charge, &
758 alpha_ppl, ccore_charge, cerf_ppl, &
759 core_charge_radius, ppl_radius, ppnl_radius, &
760 lppnl, lprj_ppnl_max, nexp_ppl, nppnl, &
761 nprj_ppnl_max, z, zeff, zeff_correction, &
762 ppl_present, ppnl_present, soc_present, &
763 alpha_ppnl, cexp_ppl, elec_conf, nprj_ppnl, cprj, &
764 cprj_ppnl, vprj_ppnl, wprj_ppnl, hprj_ppnl, kprj_ppnl, &
765 lpot_present, nexp_lpot, alpha_lpot, nct_lpot, cval_lpot, &
766 lsd_present, nexp_lsd, alpha_lsd, nct_lsd, cval_lsd, &
767 nlcc_present, nexp_nlcc, alpha_nlcc, nct_nlcc, cval_nlcc, &
771 CHARACTER(LEN=default_string_length), &
772 INTENT(OUT),
OPTIONAL :: name, aliases
773 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: alpha_core_charge, alpha_ppl, &
774 ccore_charge, cerf_ppl, &
775 core_charge_radius, ppl_radius, &
777 INTEGER,
INTENT(OUT),
OPTIONAL :: lppnl, lprj_ppnl_max, nexp_ppl, nppnl, &
779 REAL(kind=
dp),
INTENT(OUT),
OPTIONAL :: zeff, zeff_correction
780 LOGICAL,
INTENT(OUT),
OPTIONAL :: ppl_present, ppnl_present, soc_present
781 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_ppnl, cexp_ppl
782 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf, nprj_ppnl
783 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cprj, cprj_ppnl, vprj_ppnl, wprj_ppnl
784 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
785 POINTER :: hprj_ppnl, kprj_ppnl
786 LOGICAL,
INTENT(OUT),
OPTIONAL :: lpot_present
787 INTEGER,
INTENT(OUT),
OPTIONAL :: nexp_lpot
788 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_lpot
789 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: nct_lpot
790 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cval_lpot
791 LOGICAL,
INTENT(OUT),
OPTIONAL :: lsd_present
792 INTEGER,
INTENT(OUT),
OPTIONAL :: nexp_lsd
793 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_lsd
794 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: nct_lsd
795 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cval_lsd
796 LOGICAL,
INTENT(OUT),
OPTIONAL :: nlcc_present
797 INTEGER,
INTENT(OUT),
OPTIONAL :: nexp_nlcc
798 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_nlcc
799 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: nct_nlcc
800 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cval_nlcc
801 LOGICAL,
INTENT(OUT),
OPTIONAL :: monovalent
803 IF (
PRESENT(name)) name = potential%name
804 IF (
PRESENT(aliases)) aliases = potential%aliases
805 IF (
PRESENT(alpha_core_charge))
THEN
806 alpha_core_charge = potential%alpha_core_charge
808 IF (
PRESENT(alpha_ppl)) alpha_ppl = potential%alpha_ppl
809 IF (
PRESENT(ccore_charge)) ccore_charge = potential%ccore_charge
810 IF (
PRESENT(cerf_ppl)) cerf_ppl = potential%cerf_ppl
811 IF (
PRESENT(core_charge_radius))
THEN
812 core_charge_radius = potential%core_charge_radius
814 IF (
PRESENT(ppl_radius)) ppl_radius = potential%ppl_radius
815 IF (
PRESENT(ppnl_radius)) ppnl_radius = potential%ppnl_radius
816 IF (
PRESENT(soc_present)) soc_present = potential%soc
817 IF (
PRESENT(lppnl)) lppnl = potential%lppnl
818 IF (
PRESENT(lprj_ppnl_max)) lprj_ppnl_max = potential%lprj_ppnl_max
819 IF (
PRESENT(nexp_ppl)) nexp_ppl = potential%nexp_ppl
820 IF (
PRESENT(nppnl)) nppnl = potential%nppnl
821 IF (
PRESENT(nprj_ppnl_max)) nprj_ppnl_max = potential%nprj_ppnl_max
822 IF (
PRESENT(z)) z = potential%z
823 IF (
PRESENT(zeff)) zeff = potential%zeff
824 IF (
PRESENT(zeff_correction)) zeff_correction = potential%zeff_correction
825 IF (
PRESENT(ppl_present)) ppl_present = (potential%nexp_ppl > 0)
826 IF (
PRESENT(ppnl_present)) ppnl_present = (potential%nppnl > 0)
827 IF (
PRESENT(alpha_ppnl)) alpha_ppnl => potential%alpha_ppnl
828 IF (
PRESENT(cexp_ppl)) cexp_ppl => potential%cexp_ppl
829 IF (
PRESENT(elec_conf)) elec_conf => potential%elec_conf
830 IF (
PRESENT(nprj_ppnl)) nprj_ppnl => potential%nprj_ppnl
831 IF (
PRESENT(cprj)) cprj => potential%cprj
832 IF (
PRESENT(cprj_ppnl)) cprj_ppnl => potential%cprj_ppnl
833 IF (
PRESENT(hprj_ppnl)) hprj_ppnl => potential%hprj_ppnl
834 IF (
PRESENT(kprj_ppnl)) kprj_ppnl => potential%kprj_ppnl
835 IF (
PRESENT(vprj_ppnl)) vprj_ppnl => potential%vprj_ppnl
836 IF (
PRESENT(wprj_ppnl)) wprj_ppnl => potential%wprj_ppnl
838 IF (
PRESENT(lpot_present)) lpot_present = potential%lpotextended
839 IF (
PRESENT(nexp_lpot)) nexp_lpot = potential%nexp_lpot
840 IF (
PRESENT(alpha_lpot)) alpha_lpot => potential%alpha_lpot
841 IF (
PRESENT(nct_lpot)) nct_lpot => potential%nct_lpot
842 IF (
PRESENT(cval_lpot)) cval_lpot => potential%cval_lpot
844 IF (
PRESENT(lsd_present)) lsd_present = potential%lsdpot
845 IF (
PRESENT(nexp_lsd)) nexp_lsd = potential%nexp_lsd
846 IF (
PRESENT(alpha_lsd)) alpha_lsd => potential%alpha_lsd
847 IF (
PRESENT(nct_lsd)) nct_lsd => potential%nct_lsd
848 IF (
PRESENT(cval_lsd)) cval_lsd => potential%cval_lsd
850 IF (
PRESENT(nlcc_present)) nlcc_present = potential%nlcc
851 IF (
PRESENT(nexp_nlcc)) nexp_nlcc = potential%nexp_nlcc
852 IF (
PRESENT(alpha_nlcc)) alpha_nlcc => potential%alpha_nlcc
853 IF (
PRESENT(nct_nlcc)) nct_nlcc => potential%nct_nlcc
854 IF (
PRESENT(cval_nlcc)) cval_nlcc => potential%cval_nlcc
856 IF (
PRESENT(monovalent)) monovalent = potential%monovalent
906 SUBROUTINE get_sgp_potential(potential, name, description, aliases, elec_conf, &
907 z, zeff, zeff_correction, alpha_core_charge, &
908 ccore_charge, core_charge_radius, &
909 ppl_radius, ppnl_radius, ppl_present, ppnl_present, ppsl_present, &
910 ecp_local, n_local, a_local, c_local, &
911 nloc, nrloc, aloc, bloc, &
912 ecp_semi_local, sl_lmax, npot, nrpot, apot, bpot, &
913 n_nonlocal, nppnl, lmax, is_nonlocal, a_nonlocal, h_nonlocal, c_nonlocal, &
914 cprj_ppnl, vprj_ppnl, has_nlcc, n_nlcc, a_nlcc, c_nlcc)
917 CHARACTER(LEN=default_string_length), &
918 INTENT(OUT),
OPTIONAL :: name
919 CHARACTER(LEN=default_string_length), &
920 DIMENSION(4),
INTENT(OUT),
OPTIONAL :: description
921 CHARACTER(LEN=default_string_length), &
922 INTENT(OUT),
OPTIONAL :: aliases
923 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf
924 INTEGER,
INTENT(OUT),
OPTIONAL :: z
925 REAL(KIND=
dp),
INTENT(OUT),
OPTIONAL :: zeff, zeff_correction, &
926 alpha_core_charge, ccore_charge, &
927 core_charge_radius, ppl_radius, &
929 LOGICAL,
INTENT(OUT),
OPTIONAL :: ppl_present, ppnl_present, ppsl_present, &
931 INTEGER,
INTENT(OUT),
OPTIONAL :: n_local
932 REAL(KIND=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_local, c_local
933 INTEGER,
INTENT(OUT),
OPTIONAL :: nloc
934 INTEGER,
DIMENSION(1:10),
INTENT(OUT),
OPTIONAL :: nrloc
935 REAL(dp),
DIMENSION(1:10),
INTENT(OUT),
OPTIONAL :: aloc, bloc
936 LOGICAL,
INTENT(OUT),
OPTIONAL :: ecp_semi_local
937 INTEGER,
INTENT(OUT),
OPTIONAL :: sl_lmax
938 INTEGER,
DIMENSION(0:10),
OPTIONAL :: npot
939 INTEGER,
DIMENSION(1:15, 0:10),
OPTIONAL :: nrpot
940 REAL(dp),
DIMENSION(1:15, 0:10),
OPTIONAL :: apot, bpot
941 INTEGER,
INTENT(OUT),
OPTIONAL :: n_nonlocal, nppnl, lmax
942 LOGICAL,
DIMENSION(0:5),
OPTIONAL :: is_nonlocal
943 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nonlocal
944 REAL(KIND=dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: h_nonlocal
945 REAL(KIND=dp),
DIMENSION(:, :, :),
OPTIONAL, &
946 POINTER :: c_nonlocal
947 REAL(KIND=dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cprj_ppnl
948 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: vprj_ppnl
949 LOGICAL,
INTENT(OUT),
OPTIONAL :: has_nlcc
950 INTEGER,
INTENT(OUT),
OPTIONAL :: n_nlcc
951 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nlcc, c_nlcc
953 IF (
PRESENT(name)) name = potential%name
954 IF (
PRESENT(aliases)) aliases = potential%aliases
955 IF (
PRESENT(description)) description = potential%description
957 IF (
PRESENT(elec_conf)) elec_conf => potential%elec_conf
959 IF (
PRESENT(z)) z = potential%z
960 IF (
PRESENT(zeff)) zeff = potential%zeff
961 IF (
PRESENT(zeff_correction)) zeff_correction = potential%zeff_correction
962 IF (
PRESENT(alpha_core_charge)) alpha_core_charge = potential%alpha_core_charge
963 IF (
PRESENT(ccore_charge)) ccore_charge = potential%ccore_charge
964 IF (
PRESENT(core_charge_radius)) core_charge_radius = potential%core_charge_radius
966 IF (
PRESENT(ppl_radius)) ppl_radius = potential%ppl_radius
967 IF (
PRESENT(ppnl_radius)) ppnl_radius = potential%ppnl_radius
968 IF (
PRESENT(ppl_present))
THEN
969 ppl_present = (potential%nloc > 0 .OR. potential%n_local > 0)
971 IF (
PRESENT(ppnl_present))
THEN
972 ppnl_present = any(potential%is_nonlocal)
974 IF (
PRESENT(ppsl_present))
THEN
975 ppsl_present = potential%ecp_semi_local
978 IF (
PRESENT(ecp_local)) ecp_local = potential%ecp_local
979 IF (
PRESENT(n_local)) n_local = potential%n_local
980 IF (
PRESENT(a_local)) a_local => potential%a_local
981 IF (
PRESENT(c_local)) c_local => potential%c_local
983 IF (
PRESENT(nloc)) nloc = potential%nloc
984 IF (
PRESENT(nrloc)) nrloc = potential%nrloc
985 IF (
PRESENT(aloc)) aloc = potential%aloc
986 IF (
PRESENT(bloc)) bloc = potential%bloc
988 IF (
PRESENT(ecp_semi_local)) ecp_semi_local = potential%ecp_semi_local
989 IF (
PRESENT(sl_lmax)) sl_lmax = potential%sl_lmax
990 IF (
PRESENT(npot)) npot = potential%npot
991 IF (
PRESENT(nrpot)) nrpot = potential%nrpot
992 IF (
PRESENT(apot)) apot = potential%apot
993 IF (
PRESENT(bpot)) bpot = potential%bpot
995 IF (
PRESENT(n_nonlocal)) n_nonlocal = potential%n_nonlocal
996 IF (
PRESENT(nppnl)) nppnl = potential%nppnl
997 IF (
PRESENT(lmax)) lmax = potential%lmax
998 IF (
PRESENT(is_nonlocal)) is_nonlocal(:) = potential%is_nonlocal(:)
999 IF (
PRESENT(a_nonlocal)) a_nonlocal => potential%a_nonlocal
1000 IF (
PRESENT(c_nonlocal)) c_nonlocal => potential%c_nonlocal
1001 IF (
PRESENT(h_nonlocal)) h_nonlocal => potential%h_nonlocal
1002 IF (
PRESENT(cprj_ppnl)) cprj_ppnl => potential%cprj_ppnl
1003 IF (
PRESENT(vprj_ppnl)) vprj_ppnl => potential%vprj_ppnl
1005 IF (
PRESENT(has_nlcc)) has_nlcc = potential%has_nlcc
1006 IF (
PRESENT(n_nlcc)) n_nlcc = potential%n_nlcc
1007 IF (
PRESENT(a_nlcc)) a_nlcc => potential%a_nlcc
1008 IF (
PRESENT(c_nlcc)) c_nlcc => potential%c_nlcc
1148 PURE SUBROUTINE init_all_potential(potential, itype, zeff, zeff_correction)
1151 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: itype
1152 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: zeff, zeff_correction
1156 IF (.NOT.
ASSOCIATED(potential))
RETURN
1158 IF (
PRESENT(zeff)) potential%zeff = zeff
1159 IF (
PRESENT(zeff_correction)) potential%zeff_correction = zeff_correction
1160 dz = potential%z - int(potential%zeff - potential%zeff_correction)
1164 potential%elec_conf(0) = potential%elec_conf(0) - 2
1166 potential%elec_conf(0) = potential%elec_conf(0) - 4
1167 potential%elec_conf(1) = potential%elec_conf(1) - 6
1169 potential%elec_conf(0) = potential%elec_conf(0) - 6
1170 potential%elec_conf(1) = potential%elec_conf(1) - 12
1172 potential%elec_conf(0) = potential%elec_conf(0) - 6
1173 potential%elec_conf(1) = potential%elec_conf(1) - 12
1174 potential%elec_conf(2) = potential%elec_conf(2) - 10
1176 potential%elec_conf(0) = potential%elec_conf(0) - 8
1177 potential%elec_conf(1) = potential%elec_conf(1) - 12
1178 potential%elec_conf(2) = potential%elec_conf(2) - 10
1180 potential%elec_conf(0) = potential%elec_conf(0) - 8
1181 potential%elec_conf(1) = potential%elec_conf(1) - 18
1182 potential%elec_conf(2) = potential%elec_conf(2) - 10
1184 potential%elec_conf(0) = potential%elec_conf(0) - 8
1185 potential%elec_conf(1) = potential%elec_conf(1) - 18
1186 potential%elec_conf(2) = potential%elec_conf(2) - 20
1188 potential%elec_conf(0) = potential%elec_conf(0) - 10
1189 potential%elec_conf(1) = potential%elec_conf(1) - 18
1190 potential%elec_conf(2) = potential%elec_conf(2) - 20
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) - 20
1196 potential%elec_conf(0) = potential%elec_conf(0) - 10
1197 potential%elec_conf(1) = potential%elec_conf(1) - 24
1198 potential%elec_conf(2) = potential%elec_conf(2) - 20
1199 potential%elec_conf(3) = potential%elec_conf(3) - 14
1201 potential%elec_conf(0) = potential%elec_conf(0) - 10
1202 potential%elec_conf(1) = potential%elec_conf(1) - 24
1203 potential%elec_conf(2) = potential%elec_conf(2) - 30
1204 potential%elec_conf(3) = potential%elec_conf(3) - 14
1206 potential%elec_conf(0) = potential%elec_conf(0) - 12
1207 potential%elec_conf(1) = potential%elec_conf(1) - 24
1208 potential%elec_conf(2) = potential%elec_conf(2) - 30
1209 potential%elec_conf(3) = potential%elec_conf(3) - 14
1211 potential%elec_conf(0) = potential%elec_conf(0) - 12
1212 potential%elec_conf(1) = potential%elec_conf(1) - 30
1213 potential%elec_conf(2) = potential%elec_conf(2) - 30
1214 potential%elec_conf(3) = potential%elec_conf(3) - 14
1216 potential%elec_conf(0) = potential%elec_conf(0) - 12
1217 potential%elec_conf(1) = potential%elec_conf(1) - 30
1218 potential%elec_conf(2) = potential%elec_conf(2) - 30
1219 potential%elec_conf(3) = potential%elec_conf(3) - 28
1222 IF (
PRESENT(itype))
THEN
1223 IF (itype ==
"BARE")
THEN
1224 potential%description(1) =
"Bare Coulomb Potential"
1226 potential%description(2) =
"Valence charge only"
1228 potential%description(2) =
"Full atomic charge"
1825 SUBROUTINE read_gth_potential(element_symbol, potential_name, potential, zeff_correction, &
1826 para_env, potential_file_name, potential_section, update_input, &
1827 monovalent, potential_found)
1829 CHARACTER(LEN=*),
INTENT(IN) :: element_symbol, potential_name
1831 REAL(KIND=
dp),
INTENT(IN) :: zeff_correction
1833 CHARACTER(len=default_path_length),
INTENT(IN) :: potential_file_name
1835 LOGICAL,
INTENT(IN) :: update_input
1836 LOGICAL,
INTENT(IN),
OPTIONAL :: monovalent
1837 LOGICAL,
INTENT(OUT),
OPTIONAL :: potential_found
1839 CHARACTER(LEN=240) :: line
1840 CHARACTER(LEN=242) :: line2
1841 CHARACTER(len=5*default_string_length) :: line_att
1842 CHARACTER(LEN=LEN(element_symbol)) :: symbol
1843 CHARACTER(LEN=LEN(element_symbol)+2) :: symbol2
1844 CHARACTER(LEN=LEN(potential_name)) :: apname
1845 CHARACTER(LEN=LEN(potential_name)+2) :: apname2
1846 INTEGER :: i, ic, ipot, irep, istr, j, l, lppnl, &
1847 lprj_ppnl_max, maxlppl, n, nppnl, &
1848 nprj_ppnl, nprj_ppnl_max, strlen1, &
1850 INTEGER,
DIMENSION(:),
POINTER :: elec_conf
1851 LOGICAL :: found, is_ok, match, read_from_input
1852 REAL(KIND=
dp) :: alpha, ci, r, rc2
1853 REAL(KIND=
dp),
DIMENSION(:),
POINTER :: tmp_vals
1854 REAL(KIND=
dp),
DIMENSION(:, :, :),
POINTER :: hprj_ppnl, kprj_ppnl
1862 NULLIFY (parser, tmp_vals)
1867 IF (
PRESENT(potential_found)) potential_found = .false.
1869 potential%monovalent = .false.
1870 IF (
PRESENT(monovalent)) potential%monovalent = monovalent
1872 potential%name = potential_name
1873 potential%aliases = potential_name
1874 read_from_input = .false.
1876 IF (.NOT. read_from_input)
THEN
1878 CALL parser_create(parser, potential_file_name, para_env=para_env)
1882 potential%lpotextended = .false.
1883 potential%nexp_lpot = 0
1884 potential%lsdpot = .false.
1885 potential%nexp_lsd = 0
1886 potential%nlcc = .false.
1887 potential%nexp_nlcc = 0
1891 apname = potential_name
1892 symbol = element_symbol
1895 IF (read_from_input)
THEN
1905 IF (read_from_input)
THEN
1911 line2 =
" "//line//
" "
1912 symbol2 =
" "//trim(symbol)//
" "
1913 apname2 =
" "//trim(apname)//
" "
1914 strlen1 = len_trim(symbol2) + 1
1915 strlen2 = len_trim(apname2) + 1
1916 i = index(line2, symbol2(:strlen1))
1917 j = index(line2, apname2(:strlen2))
1918 IF (i > 0 .AND. j > 0)
THEN
1920 i = i + 1 + index(line2(i + 1:),
" ")
1921 potential%aliases = line2(i:)
1929 IF (read_from_input)
THEN
1931 IF (.NOT. is_ok)
THEN
1932 CALL cp_abort(__location__, &
1933 "Error while reading GTH potential from input file")
1935 CALL val_get(val, c_val=line_att)
1936 READ (line_att, *) elec_conf(l)
1938 DO WHILE (len_trim(line_att) /= 0)
1941 READ (line_att, *) elec_conf(l)
1952 IF (update_input)
THEN
1953 WRITE (unit=line_att, fmt=
"(T8,*(1X,I0))") elec_conf(:)
1955 c_val=trim(line_att))
1960 IF (potential%monovalent)
THEN
1961 potential%elec_conf(0) = 1
1963 potential%elec_conf(:) = elec_conf(:)
1966 potential%zeff_correction = zeff_correction
1967 potential%zeff = real(sum(potential%elec_conf),
dp) + zeff_correction
1969 DEALLOCATE (elec_conf)
1973 IF (read_from_input)
THEN
1975 IF (.NOT. is_ok)
THEN
1976 CALL cp_abort(__location__, &
1977 "Error while reading GTH potential from input file")
1979 CALL val_get(val, c_val=line_att)
1980 READ (line_att, *) r
1985 istr = len_trim(line_att) + 1
1986 WRITE (unit=line_att(istr:), fmt=
"(T9,ES25.16E3)") r
1988 alpha = 1.0_dp/(2.0_dp*r**2)
1990 potential%alpha_core_charge = alpha
1991 potential%ccore_charge = potential%zeff*sqrt((alpha/
pi)**3)
1993 potential%alpha_ppl = alpha
1994 potential%cerf_ppl = potential%zeff*sqrt((alpha/
pi)**3)
1997 IF (read_from_input)
THEN
1998 READ (line_att, *) n
2002 istr = len_trim(line_att) + 1
2003 WRITE (unit=line_att(istr:), fmt=
"(1X,I0)") n
2005 potential%nexp_ppl = n
2009 IF (read_from_input)
THEN
2010 READ (line_att, *) ci
2014 istr = len_trim(line_att) + 1
2015 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") ci
2017 rc2 = (2.0_dp*potential%alpha_ppl)
2018 potential%cexp_ppl(i) = rc2**(i - 1)*ci
2021 IF (.NOT. read_from_input)
THEN
2023 IF (update_input)
THEN
2025 c_val=trim(line_att))
2029 IF (len_trim(line_att) /= 0)
THEN
2030 CALL cp_abort(__location__, &
2031 "Error while reading GTH potential from input file")
2040 IF (read_from_input)
THEN
2041 read_keywords_from_input:
DO
2044 CALL val_get(val, c_val=line_att)
2045 IF (index(line_att,
"LPOT") /= 0)
THEN
2046 potential%lpotextended = .true.
2048 READ (line_att, *) potential%nexp_lpot
2049 n = potential%nexp_lpot
2052 NULLIFY (potential%alpha_lpot, potential%nct_lpot, potential%cval_lpot)
2055 CALL reallocate(potential%cval_lpot, 1, 4, 1, n)
2056 DO ipot = 1, potential%nexp_lpot
2059 CALL val_get(val, c_val=line_att)
2060 READ (line_att, *) r
2061 potential%alpha_lpot(ipot) = 0.5_dp/(r*r)
2063 READ (line_att, *) potential%nct_lpot(ipot)
2065 DO ic = 1, potential%nct_lpot(ipot)
2066 READ (line_att, *) ci
2067 rc2 = (2._dp*potential%alpha_lpot(ipot))**(ic - 1)
2068 potential%cval_lpot(ic, ipot) = ci*rc2
2072 ELSE IF (index(line_att,
"NLCC") /= 0)
THEN
2073 potential%nlcc = .true.
2075 READ (line_att, *) potential%nexp_nlcc
2076 n = potential%nexp_nlcc
2077 NULLIFY (potential%alpha_nlcc, potential%nct_nlcc, potential%cval_nlcc)
2080 CALL reallocate(potential%cval_nlcc, 1, 4, 1, n)
2081 DO ipot = 1, potential%nexp_nlcc
2084 CALL val_get(val, c_val=line_att)
2085 READ (line_att, *) potential%alpha_nlcc(ipot)
2087 READ (line_att, *) potential%nct_nlcc(ipot)
2089 DO ic = 1, potential%nct_nlcc(ipot)
2090 READ (line_att, *) potential%cval_nlcc(ic, ipot)
2092 potential%cval_nlcc(ic, ipot) = potential%cval_nlcc(ic, ipot)/(4.0_dp*
pi)
2096 ELSE IF (index(line_att,
"LSD") /= 0)
THEN
2097 potential%lsdpot = .true.
2099 READ (line_att, *) potential%nexp_lsd
2100 n = potential%nexp_lsd
2101 NULLIFY (potential%alpha_lsd, potential%nct_lsd, potential%cval_lsd)
2104 CALL reallocate(potential%cval_lsd, 1, 4, 1, n)
2105 DO ipot = 1, potential%nexp_lsd
2108 CALL val_get(val, c_val=line_att)
2109 READ (line_att, *) r
2110 potential%alpha_lsd(ipot) = 0.5_dp/(r*r)
2112 READ (line_att, *) potential%nct_lsd(ipot)
2114 DO ic = 1, potential%nct_lsd(ipot)
2115 READ (line_att, *) ci
2116 rc2 = (2._dp*potential%alpha_lsd(ipot))**(ic - 1)
2117 potential%cval_lsd(ic, ipot) = ci*rc2
2122 EXIT read_keywords_from_input
2124 END DO read_keywords_from_input
2132 IF (index(line,
"LPOT") /= 0)
THEN
2134 potential%lpotextended = .true.
2136 n = potential%nexp_lpot
2137 NULLIFY (potential%alpha_lpot, potential%nct_lpot, potential%cval_lpot)
2140 CALL reallocate(potential%cval_lpot, 1, 4, 1, n)
2143 IF (update_input)
THEN
2144 WRITE (unit=line_att, fmt=
"(T9,A,1X,I0)")
"LPOT", n
2146 c_val=trim(line_att))
2148 DO ipot = 1, potential%nexp_lpot
2150 potential%alpha_lpot(ipot) = 0.5_dp/(r*r)
2152 CALL reallocate(tmp_vals, 1, potential%nct_lpot(ipot))
2153 DO ic = 1, potential%nct_lpot(ipot)
2156 rc2 = (2._dp*potential%alpha_lpot(ipot))**(ic - 1)
2157 potential%cval_lpot(ic, ipot) = ci*rc2
2161 IF (update_input)
THEN
2162 WRITE (unit=line_att, fmt=
"(T9,ES25.16E3,1X,I0,*(ES25.16E3))") &
2163 r, potential%nct_lpot(ipot), tmp_vals(1:potential%nct_lpot(ipot))
2165 c_val=trim(line_att))
2168 ELSE IF (index(line,
"NLCC") /= 0)
THEN
2170 potential%nlcc = .true.
2172 n = potential%nexp_nlcc
2173 NULLIFY (potential%alpha_nlcc, potential%nct_nlcc, potential%cval_nlcc)
2176 CALL reallocate(potential%cval_nlcc, 1, 4, 1, n)
2178 WRITE (unit=line_att, fmt=
"(T9,A,1X,I0)")
"NLCC", n
2181 c_val=trim(line_att))
2182 DO ipot = 1, potential%nexp_nlcc
2185 CALL reallocate(tmp_vals, 1, potential%nct_nlcc(ipot))
2186 DO ic = 1, potential%nct_nlcc(ipot)
2188 tmp_vals(ic) = potential%cval_nlcc(ic, ipot)
2190 potential%cval_nlcc(ic, ipot) = potential%cval_nlcc(ic, ipot)/(4.0_dp*
pi)
2194 IF (update_input)
THEN
2195 WRITE (unit=line_att, fmt=
"(T9,ES25.16E3,1X,I0,*(ES25.16E3))") &
2196 potential%alpha_nlcc(ipot), potential%nct_nlcc(ipot), &
2197 tmp_vals(1:potential%nct_nlcc(ipot))
2199 c_val=trim(line_att))
2202 ELSE IF (index(line,
"LSD") /= 0)
THEN
2204 potential%lsdpot = .true.
2206 n = potential%nexp_lsd
2207 NULLIFY (potential%alpha_lsd, potential%nct_lsd, potential%cval_lsd)
2210 CALL reallocate(potential%cval_lsd, 1, 4, 1, n)
2213 IF (update_input)
THEN
2214 WRITE (unit=line_att, fmt=
"(T9,A,1X,I0)")
"LSD", n
2216 c_val=trim(line_att))
2218 DO ipot = 1, potential%nexp_lsd
2220 potential%alpha_lsd(ipot) = 0.5_dp/(r*r)
2222 CALL reallocate(tmp_vals, 1, potential%nct_lsd(ipot))
2223 DO ic = 1, potential%nct_lsd(ipot)
2226 rc2 = (2._dp*potential%alpha_lsd(ipot))**(ic - 1)
2227 potential%cval_lsd(ic, ipot) = ci*rc2
2231 IF (update_input)
THEN
2232 WRITE (unit=line_att, fmt=
"(T9,ES25.16E3,1X,I0,*(ES25.16E3))") r, potential%nct_lsd(ipot), &
2233 tmp_vals(1:potential%nct_lsd(ipot))
2235 c_val=trim(line_att))
2239 CALL cp_abort(__location__, &
2240 "Syntax error for <"// &
2241 trim(element_symbol)// &
2242 "> in the atomic potential <"// &
2243 trim(potential_name)// &
2244 "> potential file <"// &
2245 trim(potential_file_name)//
">: "// &
2246 "Expected LPOT/NLCC/LSD keyword, got: <"// &
2251 CALL cp_abort(__location__, &
2252 "Syntax error for <"// &
2253 trim(element_symbol)// &
2254 "> in the atomic potential <"// &
2255 trim(potential_name)// &
2256 "> potential file <"// &
2257 trim(potential_file_name)//
">: "// &
2258 "Expected LPOT/NLCC/LSD keyword or INTEGER, got: <"// &
2261 END DO read_keywords
2265 IF (read_from_input)
THEN
2266 READ (line_att, *) n
2268 IF (index(line_att,
"SOC") /= 0)
THEN
2269 potential%soc = .true.
2276 IF (index(line,
"SOC") /= 0) potential%soc = .true.
2279 IF (update_input)
THEN
2280 IF (potential%soc)
THEN
2281 WRITE (unit=line_att, fmt=
"(T9,I0,2X,A)") n,
"SOC"
2283 WRITE (unit=line_att, fmt=
"(T9,I0)") n
2286 c_val=trim(line_att))
2289 potential%lppnl = n - 1
2292 potential%lprj_ppnl_max = n - 1
2293 potential%nprj_ppnl_max = 0
2297 lppnl = potential%lppnl
2298 nppnl = potential%nppnl
2302 NULLIFY (hprj_ppnl, kprj_ppnl)
2306 CALL reallocate(potential%alpha_ppnl, 0, lppnl)
2307 CALL reallocate(potential%nprj_ppnl, 0, lppnl)
2313 IF (read_from_input)
THEN
2315 IF (.NOT. is_ok)
THEN
2316 CALL cp_abort(__location__, &
2317 "Error while reading GTH potential from input file")
2319 CALL val_get(val, c_val=line_att)
2320 READ (line_att, *) r
2322 READ (line_att, *) nprj_ppnl
2328 istr = len_trim(line_att) + 1
2329 WRITE (unit=line_att(istr:), fmt=
"(T9,ES25.16E3,1X,I0)") r, nprj_ppnl
2331 IF (r == 0.0_dp .AND. nprj_ppnl /= 0)
THEN
2332 CALL cp_abort(__location__, &
2333 "An error was detected in the atomic potential <"// &
2334 trim(potential_name)// &
2335 "> potential file <"// &
2336 trim(potential_file_name)//
">")
2338 potential%alpha_ppnl(l) = 0.0_dp
2339 IF (r /= 0.0_dp .AND. n /= 0) potential%alpha_ppnl(l) = 1.0_dp/(2.0_dp*r**2)
2340 potential%nprj_ppnl(l) = nprj_ppnl
2341 nppnl = nppnl + nprj_ppnl*
nco(l)
2342 IF (nprj_ppnl > nprj_ppnl_max)
THEN
2343 nprj_ppnl_max = nprj_ppnl
2344 CALL reallocate(hprj_ppnl, 1, nprj_ppnl_max, &
2347 CALL reallocate(kprj_ppnl, 1, nprj_ppnl_max, &
2353 IF (read_from_input)
THEN
2354 READ (line_att, *) hprj_ppnl(i, i, l)
2358 istr = len_trim(line_att) + 1
2359 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") hprj_ppnl(i, i, l)
2362 IF (read_from_input)
THEN
2363 IF (len_trim(line_att) /= 0)
THEN
2364 CALL cp_abort(__location__, &
2365 "Error while reading GTH potential from input file")
2368 IF (.NOT. is_ok)
THEN
2369 CALL cp_abort(__location__, &
2370 "Error while reading GTH potential from input file")
2372 CALL val_get(val, c_val=line_att)
2373 READ (line_att, *) hprj_ppnl(i, i, l)
2376 IF (update_input)
THEN
2379 c_val=trim(line_att))
2383 istr = len_trim(line_att) + 1
2384 WRITE (unit=line_att(istr:), fmt=
"(T36,A,ES25.16E3)") &
2385 repeat(
" ", 25*(i - 1)), hprj_ppnl(i, i, l)
2388 DO j = i + 1, nprj_ppnl
2389 IF (read_from_input)
THEN
2390 READ (line_att, *) hprj_ppnl(i, j, l)
2394 istr = len_trim(line_att) + 1
2395 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") hprj_ppnl(i, j, l)
2399 IF (.NOT. read_from_input)
THEN
2400 IF (update_input)
THEN
2403 c_val=trim(line_att))
2407 IF (len_trim(line_att) /= 0)
THEN
2408 CALL cp_abort(__location__, &
2409 "Error while reading GTH potential from input file")
2412 IF (nprj_ppnl > 1)
THEN
2415 IF (potential%soc .AND. (l > 0))
THEN
2418 IF (read_from_input)
THEN
2419 IF (len_trim(line_att) /= 0)
THEN
2420 CALL cp_abort(__location__, &
2421 "Error while reading GTH potential from input file")
2424 IF (.NOT. is_ok)
THEN
2425 CALL cp_abort(__location__, &
2426 "Error while reading GTH potential from input file")
2428 CALL val_get(val, c_val=line_att)
2429 READ (line_att, *) kprj_ppnl(i, i, l)
2432 IF (i > 1 .AND. update_input)
THEN
2435 c_val=trim(line_att))
2439 istr = len_trim(line_att) + 1
2440 WRITE (unit=line_att(istr:), fmt=
"(T36,A,ES25.16E3)") &
2441 repeat(
" ", 25*(i - 1)), kprj_ppnl(i, i, l)
2443 DO j = i + 1, nprj_ppnl
2444 IF (read_from_input)
THEN
2445 READ (line_att, *) kprj_ppnl(i, j, l)
2449 istr = len_trim(line_att) + 1
2450 WRITE (unit=line_att(istr:), fmt=
"(ES25.16E3)") kprj_ppnl(i, j, l)
2454 IF (read_from_input)
THEN
2455 IF (len_trim(line_att) /= 0)
THEN
2456 CALL cp_abort(__location__, &
2457 "Error while reading GTH potential from input file")
2460 IF (update_input)
THEN
2463 c_val=trim(line_att))
2467 IF (nprj_ppnl > 1)
THEN
2471 lprj_ppnl_max = max(lprj_ppnl_max, l + 2*(nprj_ppnl - 1))
2474 potential%nppnl = nppnl
2477 potential%lprj_ppnl_max = lprj_ppnl_max
2478 potential%nprj_ppnl_max = nprj_ppnl_max
2479 CALL reallocate(potential%hprj_ppnl, 1, nprj_ppnl_max, &
2482 potential%hprj_ppnl(:, :, :) = hprj_ppnl(:, :, :)
2483 CALL reallocate(potential%kprj_ppnl, 1, nprj_ppnl_max, &
2486 potential%kprj_ppnl(:, :, :) = kprj_ppnl(:, :, :)
2489 CALL reallocate(potential%cprj_ppnl, 1, nprj_ppnl_max, 0, lppnl)
2490 CALL reallocate(potential%vprj_ppnl, 1, nppnl, 1, nppnl)
2491 CALL reallocate(potential%wprj_ppnl, 1, nppnl, 1, nppnl)
2493 DEALLOCATE (hprj_ppnl, kprj_ppnl)
2499 IF (
PRESENT(potential_found))
THEN
2504 CALL cp_abort(__location__, &
2505 "The requested atomic potential <"// &
2506 trim(potential_name)// &
2507 "> for element <"// &
2509 "> was not found in the potential file <"// &
2510 trim(potential_file_name)//
">")
2514 IF (
PRESENT(potential_found)) potential_found = .true.
2516 IF (.NOT. read_from_input)
THEN
2518 IF (match .AND. update_input)
THEN
2520 WRITE (unit=line_att, fmt=
"(T9,A)") &
2521 "# Potential name: "//trim(adjustl(apname2(:strlen2)))// &
2522 " for element symbol: "//trim(adjustl(symbol2(:strlen1)))
2524 c_val=trim(line_att))
2526 WRITE (unit=line_att, fmt=
"(T9,A)") &
2527 "# Potential read from the potential filename: "//trim(adjustl(potential_file_name))
2529 c_val=trim(line_att))
2535 IF (
ASSOCIATED(tmp_vals))
DEALLOCATE (tmp_vals)
2759 SUBROUTINE set_gth_potential(potential, name, alpha_core_charge, alpha_ppl, &
2760 ccore_charge, cerf_ppl, core_charge_radius, &
2761 ppl_radius, ppnl_radius, lppnl, lprj_ppnl_max, &
2762 nexp_ppl, nppnl, nprj_ppnl_max, z, zeff, zeff_correction, &
2763 alpha_ppnl, cexp_ppl, elec_conf, nprj_ppnl, cprj, cprj_ppnl, &
2764 vprj_ppnl, wprj_ppnl, hprj_ppnl, kprj_ppnl)
2767 CHARACTER(LEN=default_string_length),
INTENT(IN), &
2769 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: alpha_core_charge, alpha_ppl, &
2770 ccore_charge, cerf_ppl, &
2771 core_charge_radius, ppl_radius, &
2773 INTEGER,
INTENT(IN),
OPTIONAL :: lppnl, lprj_ppnl_max, nexp_ppl, nppnl, &
2775 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: zeff, zeff_correction
2776 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: alpha_ppnl, cexp_ppl
2777 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf, nprj_ppnl
2778 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: cprj, cprj_ppnl, vprj_ppnl, wprj_ppnl
2779 REAL(kind=
dp),
DIMENSION(:, :, :),
OPTIONAL, &
2780 POINTER :: hprj_ppnl, kprj_ppnl
2782 IF (
PRESENT(name)) potential%name = name
2783 IF (
PRESENT(alpha_core_charge))
THEN
2784 potential%alpha_core_charge = alpha_core_charge
2786 IF (
PRESENT(alpha_ppl)) potential%alpha_ppl = alpha_ppl
2787 IF (
PRESENT(ccore_charge)) potential%ccore_charge = ccore_charge
2788 IF (
PRESENT(cerf_ppl)) potential%cerf_ppl = cerf_ppl
2789 IF (
PRESENT(core_charge_radius))
THEN
2790 potential%core_charge_radius = core_charge_radius
2792 IF (
PRESENT(ppl_radius)) potential%ppl_radius = ppl_radius
2793 IF (
PRESENT(ppnl_radius)) potential%ppnl_radius = ppnl_radius
2794 IF (
PRESENT(lppnl)) potential%lppnl = lppnl
2795 IF (
PRESENT(lprj_ppnl_max)) potential%lprj_ppnl_max = lprj_ppnl_max
2796 IF (
PRESENT(nexp_ppl)) potential%nexp_ppl = nexp_ppl
2797 IF (
PRESENT(nppnl)) potential%nppnl = nppnl
2798 IF (
PRESENT(nprj_ppnl_max)) potential%nprj_ppnl_max = nprj_ppnl_max
2799 IF (
PRESENT(z)) potential%z = z
2800 IF (
PRESENT(zeff)) potential%zeff = zeff
2801 IF (
PRESENT(zeff_correction)) potential%zeff_correction = zeff_correction
2802 IF (
PRESENT(alpha_ppnl)) potential%alpha_ppnl => alpha_ppnl
2803 IF (
PRESENT(cexp_ppl)) potential%cexp_ppl => cexp_ppl
2804 IF (
PRESENT(elec_conf))
THEN
2805 IF (
ASSOCIATED(potential%elec_conf))
THEN
2806 DEALLOCATE (potential%elec_conf)
2808 ALLOCATE (potential%elec_conf(0:
SIZE(elec_conf) - 1))
2809 potential%elec_conf(:) = elec_conf(:)
2811 IF (
PRESENT(nprj_ppnl)) potential%nprj_ppnl => nprj_ppnl
2812 IF (
PRESENT(cprj)) potential%cprj => cprj
2813 IF (
PRESENT(cprj_ppnl)) potential%cprj_ppnl => cprj_ppnl
2814 IF (
PRESENT(hprj_ppnl)) potential%hprj_ppnl => hprj_ppnl
2815 IF (
PRESENT(kprj_ppnl)) potential%kprj_ppnl => kprj_ppnl
2816 IF (
PRESENT(vprj_ppnl)) potential%vprj_ppnl => vprj_ppnl
2817 IF (
PRESENT(wprj_ppnl)) potential%wprj_ppnl => wprj_ppnl
2862 SUBROUTINE set_sgp_potential(potential, name, description, aliases, elec_conf, &
2863 z, zeff, zeff_correction, alpha_core_charge, &
2864 ccore_charge, core_charge_radius, &
2865 ppl_radius, ppnl_radius, &
2866 ecp_local, n_local, a_local, c_local, &
2867 nloc, nrloc, aloc, bloc, &
2868 ecp_semi_local, sl_lmax, npot, nrpot, apot, bpot, &
2869 n_nonlocal, nppnl, lmax, is_nonlocal, a_nonlocal, h_nonlocal, c_nonlocal, &
2870 has_nlcc, n_nlcc, a_nlcc, c_nlcc)
2873 CHARACTER(LEN=default_string_length),
INTENT(IN), &
2875 CHARACTER(LEN=default_string_length), &
2876 DIMENSION(4),
INTENT(IN),
OPTIONAL :: description
2877 CHARACTER(LEN=default_string_length),
INTENT(IN), &
2879 INTEGER,
DIMENSION(:),
OPTIONAL,
POINTER :: elec_conf
2880 INTEGER,
INTENT(IN),
OPTIONAL :: z
2881 REAL(kind=
dp),
INTENT(IN),
OPTIONAL :: zeff, zeff_correction, &
2882 alpha_core_charge, ccore_charge, &
2883 core_charge_radius, ppl_radius, &
2885 LOGICAL,
INTENT(IN),
OPTIONAL :: ecp_local
2886 INTEGER,
INTENT(IN),
OPTIONAL :: n_local
2887 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_local, c_local
2888 INTEGER,
INTENT(IN),
OPTIONAL :: nloc
2889 INTEGER,
DIMENSION(1:10),
INTENT(IN),
OPTIONAL :: nrloc
2890 REAL(
dp),
DIMENSION(1:10),
INTENT(IN),
OPTIONAL :: aloc, bloc
2891 LOGICAL,
INTENT(IN),
OPTIONAL :: ecp_semi_local
2892 INTEGER,
INTENT(IN),
OPTIONAL :: sl_lmax
2893 INTEGER,
DIMENSION(0:10),
OPTIONAL :: npot
2894 INTEGER,
DIMENSION(1:15, 0:10),
OPTIONAL :: nrpot
2895 REAL(dp),
DIMENSION(1:15, 0:10),
OPTIONAL :: apot, bpot
2896 INTEGER,
INTENT(IN),
OPTIONAL :: n_nonlocal, nppnl, lmax
2897 LOGICAL,
DIMENSION(0:5),
INTENT(IN),
OPTIONAL :: is_nonlocal
2898 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nonlocal
2899 REAL(KIND=dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: h_nonlocal
2900 REAL(KIND=dp),
DIMENSION(:, :, :),
OPTIONAL, &
2901 POINTER :: c_nonlocal
2902 LOGICAL,
INTENT(IN),
OPTIONAL :: has_nlcc
2903 INTEGER,
INTENT(IN),
OPTIONAL :: n_nlcc
2904 REAL(KIND=dp),
DIMENSION(:),
OPTIONAL,
POINTER :: a_nlcc, c_nlcc
2906 IF (
PRESENT(name)) potential%name = name
2907 IF (
PRESENT(aliases)) potential%aliases = aliases
2908 IF (
PRESENT(description)) potential%description = description
2910 IF (
PRESENT(elec_conf))
THEN
2911 IF (
ASSOCIATED(potential%elec_conf))
THEN
2912 DEALLOCATE (potential%elec_conf)
2914 ALLOCATE (potential%elec_conf(0:
SIZE(elec_conf) - 1))
2915 potential%elec_conf(:) = elec_conf(:)
2918 IF (
PRESENT(z)) potential%z = z
2919 IF (
PRESENT(zeff)) potential%zeff = zeff
2920 IF (
PRESENT(zeff_correction)) potential%zeff_correction = zeff_correction
2921 IF (
PRESENT(alpha_core_charge)) potential%alpha_core_charge = alpha_core_charge
2922 IF (
PRESENT(ccore_charge)) potential%ccore_charge = ccore_charge
2923 IF (
PRESENT(core_charge_radius)) potential%core_charge_radius = core_charge_radius
2925 IF (
PRESENT(ppl_radius)) potential%ppl_radius = ppl_radius
2926 IF (
PRESENT(ppnl_radius)) potential%ppnl_radius = ppnl_radius
2928 IF (
PRESENT(ecp_local)) potential%ecp_local = ecp_local
2929 IF (
PRESENT(n_local)) potential%n_local = n_local
2930 IF (
PRESENT(a_local)) potential%a_local => a_local
2931 IF (
PRESENT(c_local)) potential%c_local => c_local
2933 IF (
PRESENT(nloc)) potential%nloc = nloc
2934 IF (
PRESENT(nrloc)) potential%nrloc = nrloc
2935 IF (
PRESENT(aloc)) potential%aloc = aloc
2936 IF (
PRESENT(bloc)) potential%bloc = bloc
2938 IF (
PRESENT(ecp_semi_local)) potential%ecp_semi_local = ecp_semi_local
2939 IF (
PRESENT(sl_lmax)) potential%sl_lmax = sl_lmax
2940 IF (
PRESENT(npot)) potential%npot = npot
2941 IF (
PRESENT(nrpot)) potential%nrpot = nrpot
2942 IF (
PRESENT(apot)) potential%apot = apot
2943 IF (
PRESENT(bpot)) potential%bpot = bpot
2945 IF (
PRESENT(n_nonlocal)) potential%n_nonlocal = n_nonlocal
2946 IF (
PRESENT(nppnl)) potential%nppnl = nppnl
2947 IF (
PRESENT(lmax)) potential%lmax = lmax
2948 IF (
PRESENT(is_nonlocal)) potential%is_nonlocal(:) = is_nonlocal(:)
2949 IF (
PRESENT(a_nonlocal)) potential%a_nonlocal => a_nonlocal
2950 IF (
PRESENT(c_nonlocal)) potential%c_nonlocal => c_nonlocal
2951 IF (
PRESENT(h_nonlocal)) potential%h_nonlocal => h_nonlocal
2953 IF (
PRESENT(has_nlcc)) potential%has_nlcc = has_nlcc
2954 IF (
PRESENT(n_nlcc)) potential%n_nlcc = n_nlcc
2955 IF (
PRESENT(a_nlcc)) potential%a_nlcc => a_nlcc
2956 IF (
PRESENT(c_nlcc)) potential%c_nlcc => c_nlcc
3214 SUBROUTINE copy_gth_potential(pot_in, pot_out)
3219 CALL allocate_gth_potential(pot_out)
3221 pot_out%name = pot_in%name
3222 pot_out%aliases = pot_in%aliases
3223 pot_out%alpha_core_charge = pot_in%alpha_core_charge
3224 pot_out%alpha_ppl = pot_in%alpha_ppl
3225 pot_out%ccore_charge = pot_in%ccore_charge
3226 pot_out%cerf_ppl = pot_in%cerf_ppl
3227 pot_out%zeff = pot_in%zeff
3228 pot_out%core_charge_radius = pot_in%core_charge_radius
3229 pot_out%ppl_radius = pot_in%ppl_radius
3230 pot_out%ppnl_radius = pot_in%ppnl_radius
3231 pot_out%zeff_correction = pot_in%zeff_correction
3232 pot_out%lppnl = pot_in%lppnl
3233 pot_out%lprj_ppnl_max = pot_in%lprj_ppnl_max
3234 pot_out%nexp_ppl = pot_in%nexp_ppl
3235 pot_out%nppnl = pot_in%nppnl
3236 pot_out%nprj_ppnl_max = pot_in%nprj_ppnl_max
3237 pot_out%z = pot_in%z
3238 pot_out%nlcc = pot_in%nlcc
3239 pot_out%nexp_nlcc = pot_in%nexp_nlcc
3240 pot_out%lsdpot = pot_in%lsdpot
3241 pot_out%nexp_lsd = pot_in%nexp_lsd
3242 pot_out%lpotextended = pot_in%lpotextended
3243 pot_out%nexp_lpot = pot_in%nexp_lpot
3245 IF (
ASSOCIATED(pot_in%alpha_ppnl))
THEN
3246 ALLOCATE (pot_out%alpha_ppnl(lbound(pot_in%alpha_ppnl, 1):ubound(pot_in%alpha_ppnl, 1)))
3247 pot_out%alpha_ppnl(:) = pot_in%alpha_ppnl(:)
3249 IF (
ASSOCIATED(pot_in%cexp_ppl))
THEN
3250 ALLOCATE (pot_out%cexp_ppl(lbound(pot_in%cexp_ppl, 1):ubound(pot_in%cexp_ppl, 1)))
3251 pot_out%cexp_ppl(:) = pot_in%cexp_ppl(:)
3253 IF (
ASSOCIATED(pot_in%elec_conf))
THEN
3254 ALLOCATE (pot_out%elec_conf(lbound(pot_in%elec_conf, 1):ubound(pot_in%elec_conf, 1)))
3255 pot_out%elec_conf(:) = pot_in%elec_conf(:)
3257 IF (
ASSOCIATED(pot_in%nprj_ppnl))
THEN
3258 ALLOCATE (pot_out%nprj_ppnl(lbound(pot_in%nprj_ppnl, 1):ubound(pot_in%nprj_ppnl, 1)))
3259 pot_out%nprj_ppnl(:) = pot_in%nprj_ppnl(:)
3261 IF (
ASSOCIATED(pot_in%cprj))
THEN
3262 ALLOCATE (pot_out%cprj(lbound(pot_in%cprj, 1):ubound(pot_in%cprj, 1), &
3263 lbound(pot_in%cprj, 2):ubound(pot_in%cprj, 2)))
3264 pot_out%cprj(:, :) = pot_in%cprj(:, :)
3266 IF (
ASSOCIATED(pot_in%cprj_ppnl))
THEN
3267 ALLOCATE (pot_out%cprj_ppnl(lbound(pot_in%cprj_ppnl, 1):ubound(pot_in%cprj_ppnl, 1), &
3268 lbound(pot_in%cprj_ppnl, 2):ubound(pot_in%cprj_ppnl, 2)))
3269 pot_out%cprj_ppnl(:, :) = pot_in%cprj_ppnl(:, :)
3271 IF (
ASSOCIATED(pot_in%hprj_ppnl))
THEN
3272 ALLOCATE (pot_out%hprj_ppnl(lbound(pot_in%hprj_ppnl, 1):ubound(pot_in%hprj_ppnl, 1), &
3273 lbound(pot_in%hprj_ppnl, 2):ubound(pot_in%hprj_ppnl, 2), &
3274 lbound(pot_in%hprj_ppnl, 3):ubound(pot_in%hprj_ppnl, 3)))
3275 pot_out%hprj_ppnl(:, :, :) = pot_in%hprj_ppnl(:, :, :)
3277 IF (
ASSOCIATED(pot_in%kprj_ppnl))
THEN
3278 ALLOCATE (pot_out%kprj_ppnl(lbound(pot_in%kprj_ppnl, 1):ubound(pot_in%kprj_ppnl, 1), &
3279 lbound(pot_in%kprj_ppnl, 2):ubound(pot_in%kprj_ppnl, 2), &
3280 lbound(pot_in%kprj_ppnl, 3):ubound(pot_in%kprj_ppnl, 3)))
3281 pot_out%kprj_ppnl(:, :, :) = pot_in%kprj_ppnl(:, :, :)
3283 IF (
ASSOCIATED(pot_in%vprj_ppnl))
THEN
3284 ALLOCATE (pot_out%vprj_ppnl(lbound(pot_in%vprj_ppnl, 1):ubound(pot_in%vprj_ppnl, 1), &
3285 lbound(pot_in%vprj_ppnl, 2):ubound(pot_in%vprj_ppnl, 2)))
3286 pot_out%vprj_ppnl(:, :) = pot_in%vprj_ppnl(:, :)
3288 IF (
ASSOCIATED(pot_in%wprj_ppnl))
THEN
3289 ALLOCATE (pot_out%wprj_ppnl(lbound(pot_in%wprj_ppnl, 1):ubound(pot_in%wprj_ppnl, 1), &
3290 lbound(pot_in%wprj_ppnl, 2):ubound(pot_in%wprj_ppnl, 2)))
3291 pot_out%wprj_ppnl(:, :) = pot_in%wprj_ppnl(:, :)
3293 IF (
ASSOCIATED(pot_in%alpha_nlcc))
THEN
3294 ALLOCATE (pot_out%alpha_nlcc(lbound(pot_in%alpha_nlcc, 1):ubound(pot_in%alpha_nlcc, 1)))
3295 pot_out%alpha_nlcc(:) = pot_in%alpha_nlcc(:)
3297 IF (
ASSOCIATED(pot_in%nct_nlcc))
THEN
3298 ALLOCATE (pot_out%nct_nlcc(lbound(pot_in%nct_nlcc, 1):ubound(pot_in%nct_nlcc, 1)))
3299 pot_out%nct_nlcc(:) = pot_in%nct_nlcc(:)
3301 IF (
ASSOCIATED(pot_in%cval_nlcc))
THEN
3302 ALLOCATE (pot_out%cval_nlcc(lbound(pot_in%cval_nlcc, 1):ubound(pot_in%cval_nlcc, 1), &
3303 lbound(pot_in%cval_nlcc, 2):ubound(pot_in%cval_nlcc, 2)))
3304 pot_out%cval_nlcc(:, :) = pot_in%cval_nlcc(:, :)
3306 IF (
ASSOCIATED(pot_in%alpha_lsd))
THEN
3307 ALLOCATE (pot_out%alpha_lsd(lbound(pot_in%alpha_lsd, 1):ubound(pot_in%alpha_lsd, 1)))
3308 pot_out%alpha_lsd(:) = pot_in%alpha_lsd(:)
3310 IF (
ASSOCIATED(pot_in%nct_lsd))
THEN
3311 ALLOCATE (pot_out%nct_lsd(lbound(pot_in%nct_lsd, 1):ubound(pot_in%nct_lsd, 1)))
3312 pot_out%nct_lsd(:) = pot_in%nct_lsd(:)
3314 IF (
ASSOCIATED(pot_in%cval_lsd))
THEN
3315 ALLOCATE (pot_out%cval_lsd(lbound(pot_in%cval_lsd, 1):ubound(pot_in%cval_lsd, 1), &
3316 lbound(pot_in%cval_lsd, 2):ubound(pot_in%cval_lsd, 2)))
3317 pot_out%cval_lsd(:, :) = pot_in%cval_lsd(:, :)
3319 IF (
ASSOCIATED(pot_in%alpha_lpot))
THEN
3320 ALLOCATE (pot_out%alpha_lpot(lbound(pot_in%alpha_lpot, 1):ubound(pot_in%alpha_lpot, 1)))
3321 pot_out%alpha_lpot(:) = pot_in%alpha_lpot(:)
3323 IF (
ASSOCIATED(pot_in%nct_lpot))
THEN
3324 ALLOCATE (pot_out%nct_lpot(lbound(pot_in%nct_lpot, 1):ubound(pot_in%nct_lpot, 1)))
3325 pot_out%nct_lpot(:) = pot_in%nct_lpot(:)
3327 IF (
ASSOCIATED(pot_in%cval_lpot))
THEN
3328 ALLOCATE (pot_out%cval_lpot(lbound(pot_in%cval_lpot, 1):ubound(pot_in%cval_lpot, 1), &
3329 lbound(pot_in%cval_lpot, 2):ubound(pot_in%cval_lpot, 2)))
3330 pot_out%cval_lpot(:, :) = pot_in%cval_lpot(:, :)
3342 SUBROUTINE copy_sgp_potential(pot_in, pot_out)
3347 CALL allocate_sgp_potential(pot_out)
3349 pot_out%name = pot_in%name
3350 pot_out%aliases = pot_in%aliases
3351 pot_out%z = pot_in%z
3352 pot_out%zeff = pot_in%zeff
3353 pot_out%zeff_correction = pot_in%zeff_correction
3354 pot_out%alpha_core_charge = pot_in%alpha_core_charge
3355 pot_out%ccore_charge = pot_in%ccore_charge
3356 pot_out%core_charge_radius = pot_in%core_charge_radius
3357 pot_out%ppl_radius = pot_in%ppl_radius
3358 pot_out%ppnl_radius = pot_in%ppnl_radius
3359 pot_out%ecp_local = pot_in%ecp_local
3360 pot_out%n_local = pot_in%n_local
3361 pot_out%nloc = pot_in%nloc
3362 pot_out%nrloc = pot_in%nrloc
3363 pot_out%aloc = pot_in%aloc
3364 pot_out%bloc = pot_in%bloc
3365 pot_out%ecp_semi_local = pot_in%ecp_semi_local
3366 pot_out%sl_lmax = pot_in%sl_lmax
3367 pot_out%npot = pot_in%npot
3368 pot_out%nrpot = pot_in%nrpot
3369 pot_out%apot = pot_in%apot
3370 pot_out%bpot = pot_in%bpot
3371 pot_out%n_nonlocal = pot_in%n_nonlocal
3372 pot_out%nppnl = pot_in%nppnl
3373 pot_out%lmax = pot_in%lmax
3374 pot_out%is_nonlocal = pot_in%is_nonlocal
3375 pot_out%has_nlcc = pot_in%has_nlcc
3376 pot_out%n_nlcc = pot_in%n_nlcc
3377 IF (
ALLOCATED(pot_in%upf_data))
THEN
3378 pot_out%upf_data = pot_in%upf_data
3379 pot_out%upf_projectors = pot_in%upf_projectors
3380 pot_out%upf_local = pot_in%upf_local
3383 IF (
ASSOCIATED(pot_in%elec_conf))
THEN
3384 ALLOCATE (pot_out%elec_conf(lbound(pot_in%elec_conf, 1):ubound(pot_in%elec_conf, 1)))
3385 pot_out%elec_conf(:) = pot_in%elec_conf(:)
3387 IF (
ASSOCIATED(pot_in%a_local))
THEN
3388 ALLOCATE (pot_out%a_local(lbound(pot_in%a_local, 1):ubound(pot_in%a_local, 1)))
3389 pot_out%a_local(:) = pot_in%a_local(:)
3391 IF (
ASSOCIATED(pot_in%c_local))
THEN
3392 ALLOCATE (pot_out%c_local(lbound(pot_in%c_local, 1):ubound(pot_in%c_local, 1)))
3393 pot_out%c_local(:) = pot_in%c_local(:)
3395 IF (
ASSOCIATED(pot_in%a_nonlocal))
THEN
3396 ALLOCATE (pot_out%a_nonlocal(lbound(pot_in%a_nonlocal, 1):ubound(pot_in%a_nonlocal, 1)))
3397 pot_out%a_nonlocal(:) = pot_in%a_nonlocal(:)
3399 IF (
ASSOCIATED(pot_in%h_nonlocal))
THEN
3400 ALLOCATE (pot_out%h_nonlocal(lbound(pot_in%h_nonlocal, 1):ubound(pot_in%h_nonlocal, 1), &
3401 lbound(pot_in%h_nonlocal, 2):ubound(pot_in%h_nonlocal, 2)))
3402 pot_out%h_nonlocal(:, :) = pot_in%h_nonlocal(:, :)
3404 IF (
ASSOCIATED(pot_in%c_nonlocal))
THEN
3405 ALLOCATE (pot_out%c_nonlocal(lbound(pot_in%c_nonlocal, 1):ubound(pot_in%c_nonlocal, 1), &
3406 lbound(pot_in%c_nonlocal, 2):ubound(pot_in%c_nonlocal, 2), &
3407 lbound(pot_in%c_nonlocal, 3):ubound(pot_in%c_nonlocal, 3)))
3408 pot_out%c_nonlocal(:, :, :) = pot_in%c_nonlocal(:, :, :)
3410 IF (
ASSOCIATED(pot_in%cprj_ppnl))
THEN
3411 ALLOCATE (pot_out%cprj_ppnl(lbound(pot_in%cprj_ppnl, 1):ubound(pot_in%cprj_ppnl, 1), &
3412 lbound(pot_in%cprj_ppnl, 2):ubound(pot_in%cprj_ppnl, 2)))
3413 pot_out%cprj_ppnl(:, :) = pot_in%cprj_ppnl(:, :)
3415 IF (
ASSOCIATED(pot_in%vprj_ppnl))
THEN
3416 ALLOCATE (pot_out%vprj_ppnl(lbound(pot_in%vprj_ppnl, 1):ubound(pot_in%vprj_ppnl, 1)))
3417 pot_out%vprj_ppnl(:) = pot_in%vprj_ppnl(:)
3419 IF (
ASSOCIATED(pot_in%a_nlcc))
THEN
3420 ALLOCATE (pot_out%a_nlcc(lbound(pot_in%a_nlcc, 1):ubound(pot_in%a_nlcc, 1)))
3421 pot_out%a_nlcc(:) = pot_in%a_nlcc(:)
3423 IF (
ASSOCIATED(pot_in%c_nlcc))
THEN
3424 ALLOCATE (pot_out%c_nlcc(lbound(pot_in%c_nlcc, 1):ubound(pot_in%c_nlcc, 1)))
3425 pot_out%c_nlcc(:) = pot_in%c_nlcc(:)