! This file is part of dftd4. ! SPDX-Identifier: LGPL-3.0-or-later ! ! dftd4 is free software: you can redistribute it and/or modify it under ! the terms of the Lesser GNU General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! ! dftd4 is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! Lesser GNU General Public License for more details. ! ! You should have received a copy of the Lesser GNU General Public License ! along with dftd4. If not, see <https://www.gnu.org/licenses/>. module dftd4_param use dftd4_damping, only : damping_param use dftd4_damping_rational, only : rational_damping_param use dftd4_utils, only : lowercase use mctc_env, only : wp implicit none private public :: functional_group public :: get_rational_damping, get_functionals, get_functional_id public :: p_r2scan_3c enum, bind(C) enumerator :: p_invalid, & & p_hf, p_blyp, p_bpbe, p_bp, p_bpw, p_lb94, p_mpwlyp, p_mpwpw, & & p_olyp, p_opbe, p_pbe, p_rpbe, p_revpbe, p_pw86pbe, & & p_rpw86pbe, p_pw91, p_pwp, p_xlyp, p_b97, p_tpss, p_revtpss, & & p_scan, p_rscan, p_r2scan, p_b1lyp, p_b3lyp, p_bhlyp, p_b1p, & & p_b3p, p_b1pw, p_b3pw, p_o3lyp, p_revpbe0, p_revpbe38, & & p_pbe0, p_pwp1, p_pw1pw, p_mpw1pw, p_mpw1lyp, p_pw6b95, & & p_tpssh, p_tpss0, p_x3lyp, p_m06l, p_m06, p_b97d, & & p_wb97, p_wb97x_2008, p_b97m, p_wb97m, p_camb3lyp, p_lcblyp, & & p_lh07tsvwn, p_lh07ssvwn, p_lh12ctssirpw92, p_lh12ctssifpw92, & & p_lh14tcalpbe, p_lh20t, p_b2plyp, p_b2gpplyp, p_mpw2plyp, p_pwpb95, & & p_dsdblyp, p_dsdpbe, p_dsdpbeb95, p_dsdpbep86, p_dsdsvwn, & & p_dodblyp, p_dodpbe, p_dodpbeb95, p_dodpbep86, p_dodsvwn, & & p_pbe0_2, p_pbe0_dh, p_hsesol, p_dftb_3ob, p_dftb_mio, p_dftb_ob2, & & p_dftb_matsci, p_dftb_pbc, p_b1b95, p_pbesol, p_hse06, p_mpwb1k, & & p_hse03, p_revtpssh, p_mn12sx, p_glyp, p_mpw1b95, & & p_revpbe0dh, p_revtpss0, p_revdsdpbep86, p_revdsdpbe, & & p_revdsdblyp, p_revdodpbep86, p_am05, p_hse12, p_hse12s, & & p_r2scanh, p_r2scan0, p_r2scan50, p_r2scan_3c, p_camqtp01, & & p_lcwpbe, p_lcwpbeh, p_wb97x_rev, p_wb97m_rev, & & p_wb97x_3c, p_wr2scan, p_r2scan0_dh, p_r2scan_cidh, & & p_r2scan_qidh, p_r2scan0_2, p_pr2scan50, p_pr2scan69, & & p_kpr2scan50, p_wpr2scan50, p_wb97x, p_last end enum integer, parameter :: df_enum = kind(p_invalid) !> Group different spellings/names of functionals type functional_group character(len=:), allocatable :: names(:) end type functional_group !> Retrieve rational damping parameters from functional name or ID interface get_rational_damping module procedure :: get_rational_damping_name module procedure :: get_rational_damping_id end interface get_rational_damping contains !> Create a new group of functional names function new_funcgroup(input_names) result(group) !> List of spellings/names of the functional character(len=*), intent(in) :: input_names(:) !> Functional with possibly different spellings type(functional_group) :: group integer :: n, i, max_len n = size(input_names) ! Determine the length of the longest name max_len = 0 do i = 1, n max_len = max(max_len, len_trim(input_names(i))) end do ! Allocate based on the longest name's length allocate(character(len=max_len) :: group%names(n)) do i = 1, n group%names(i) = trim(input_names(i)) end do end function new_funcgroup !> Collect all supported functionals subroutine get_functionals(funcs) !DEC$ ATTRIBUTES DLLEXPORT :: get_functionals !> Collection of functionals with possibly different spellings/names type(functional_group), allocatable, intent(out) :: funcs(:) allocate(funcs(p_last - 1)) funcs(p_hf) = new_funcgroup([character(len=20) :: "hf"]) funcs(p_am05) = new_funcgroup([character(len=20) :: "am05"]) funcs(p_blyp) = new_funcgroup([character(len=20) :: "b-lyp", "blyp"]) funcs(p_bpbe) = new_funcgroup([character(len=20) :: "bpbe"]) funcs(p_bp) = new_funcgroup([character(len=20) :: "b-p", "bp86", "bp", "b-p86"]) funcs(p_bpw) = new_funcgroup([character(len=20) :: "bpw", "b-pw"]) funcs(p_lb94) = new_funcgroup([character(len=20) :: "lb94"]) funcs(p_mpwlyp) = new_funcgroup([character(len=20) :: "mpwlyp", "mpw-lyp"]) funcs(p_mpwpw) = new_funcgroup([character(len=20) :: "mpwpw", "mpw-pw", "mpwpw91"]) funcs(p_olyp) = new_funcgroup([character(len=20) :: "o-lyp", "olyp"]) funcs(p_opbe) = new_funcgroup([character(len=20) :: "opbe"]) funcs(p_pbe) = new_funcgroup([character(len=20) :: "pbe"]) funcs(p_rpbe) = new_funcgroup([character(len=20) :: "rpbe"]) funcs(p_revpbe) = new_funcgroup([character(len=20) :: "revpbe"]) funcs(p_pw86pbe) = new_funcgroup([character(len=20) :: "pw86pbe"]) funcs(p_rpw86pbe) = new_funcgroup([character(len=20) :: "rpw86pbe"]) funcs(p_pw91) = new_funcgroup([character(len=20) :: "pw91"]) funcs(p_pwp) = new_funcgroup([character(len=20) :: "pwp", "pw-p", "pw91p86"]) funcs(p_xlyp) = new_funcgroup([character(len=20) :: "x-lyp", "xlyp"]) funcs(p_b97) = new_funcgroup([character(len=20) :: "b97"]) funcs(p_tpss) = new_funcgroup([character(len=20) :: "tpss"]) funcs(p_revtpss) = new_funcgroup([character(len=20) :: "revtpss"]) funcs(p_scan) = new_funcgroup([character(len=20) :: "scan"]) funcs(p_rscan) = new_funcgroup([character(len=20) :: "rscan"]) funcs(p_r2scan) = new_funcgroup([character(len=20) :: "r2scan", "r²scan"]) funcs(p_r2scanh) = new_funcgroup([character(len=20) :: "r2scanh", "r²scanh"]) funcs(p_r2scan0) = new_funcgroup([character(len=20) :: "r2scan0", "r²scan0"]) funcs(p_r2scan50) = new_funcgroup([character(len=20) :: "r2scan50", "r²scan50"]) funcs(p_r2scan_3c) = new_funcgroup([character(len=20) :: "r2scan-3c", & & "r²scan-3c", "r2scan_3c", "r²scan_3c", "r2scan3c"]) funcs(p_wr2scan) = new_funcgroup([character(len=20) :: "wr2scan", "wr²scan"]) funcs(p_r2scan0_dh) = new_funcgroup([character(len=20) :: "r2scan0-dh", & & "r²scan0-dh", "r2scan0dh", "r²scan0dh"]) funcs(p_r2scan_cidh) = new_funcgroup([character(len=20) :: "r2scan-cidh", & & "r²scan-cidh", "r2scancidh", "r²scancidh"]) funcs(p_r2scan_qidh) = new_funcgroup([character(len=20) :: "r2scan-qidh", & & "r²scan-qidh", "r2scanqidh", "r²scanqidh"]) funcs(p_r2scan0_2) = new_funcgroup([character(len=20) :: "r2scan0-2", & & "r²scan0-2", "r2scan02", "r²scan02"]) funcs(p_pr2scan50) = new_funcgroup([character(len=20) :: "pr2scan50", & & "pr²scan50", "pr2scan50", "pr²scan50"]) funcs(p_pr2scan69) = new_funcgroup([character(len=20) :: "pr2scan69", & & "pr²scan69", "pr2scan69", "pr²scan69"]) funcs(p_kpr2scan50) = new_funcgroup([character(len=20) :: "kpr2scan50", & & "kpr²scan50", "kpr2scan50", "kpr²scan50"]) funcs(p_wpr2scan50) = new_funcgroup([character(len=20) :: "wpr2scan50", & & "wpr²scan50", "wpr2scan50", "wpr²scan50"]) funcs(p_b1lyp) = new_funcgroup([character(len=20) :: "b1lyp", "b1-lyp"]) funcs(p_b3lyp) = new_funcgroup([character(len=20) :: "b3-lyp", "b3lyp"]) funcs(p_bhlyp) = new_funcgroup([character(len=20) :: "bh-lyp", "bhlyp"]) funcs(p_b1p) = new_funcgroup([character(len=20) :: "b1p", "b1-p", "b1p86"]) funcs(p_b3p) = new_funcgroup([character(len=20) :: "b3p", "b3-p", "b3p86"]) funcs(p_b1pw) = new_funcgroup([character(len=20) :: "b1pw", "b1-pw", "b1pw91"]) funcs(p_b3pw) = new_funcgroup([character(len=20) :: "b3pw", "b3-pw", "b3pw91"]) funcs(p_o3lyp) = new_funcgroup([character(len=20) :: "o3-lyp", "o3lyp"]) funcs(p_revpbe0) = new_funcgroup([character(len=20) :: "revpbe0"]) funcs(p_revpbe38) = new_funcgroup([character(len=20) :: "revpbe38"]) funcs(p_pbe0) = new_funcgroup([character(len=20) :: "pbe0"]) funcs(p_pwp1) = new_funcgroup([character(len=20) :: "pwp1"]) funcs(p_pw1pw) = new_funcgroup([character(len=20) :: "pw1pw", "pw1-pw"]) funcs(p_mpw1pw) = new_funcgroup([character(len=20) :: "mpw1pw", "mpw1-pw", "mpw1pw91"]) funcs(p_mpw1lyp) = new_funcgroup([character(len=20) :: "mpw1lyp", "mpw1-lyp"]) funcs(p_pw6b95) = new_funcgroup([character(len=20) :: "pw6b95"]) funcs(p_tpssh) = new_funcgroup([character(len=20) :: "tpssh"]) funcs(p_tpss0) = new_funcgroup([character(len=20) :: "tpss0"]) funcs(p_x3lyp) = new_funcgroup([character(len=20) :: "x3-lyp", "x3lyp"]) funcs(p_m06) = new_funcgroup([character(len=20) :: "m06"]) funcs(p_m06l) = new_funcgroup([character(len=20) :: "m06l"]) funcs(p_mn12sx) = new_funcgroup([character(len=20) :: "mn12sx", "mn12-sx"]) funcs(p_b97d) = new_funcgroup([character(len=20) :: "b97d"]) funcs(p_lh07tsvwn) = new_funcgroup([character(len=20) :: "lh07tsvwn", "lh07t-svwn"]) funcs(p_lh07ssvwn) = new_funcgroup([character(len=20) :: "lh07ssvwn", "lh07s-svwn"]) funcs(p_lh12ctssirpw92) = new_funcgroup([character(len=20) :: "lh12ctssirpw92", "lh12ct-ssirpw92"]) funcs(p_lh12ctssifpw92) = new_funcgroup([character(len=20) :: "lh12ctssifpw92", "lh12ct-ssifpw92"]) funcs(p_lh14tcalpbe) = new_funcgroup([character(len=20) :: "lh14tcalpbe", "lh14t-calpbe"]) funcs(p_lh20t) = new_funcgroup([character(len=20) :: "lh20t"]) funcs(p_b2plyp) = new_funcgroup([character(len=20) :: "b2plyp", "b2-plyp"]) funcs(p_b2gpplyp) = new_funcgroup([character(len=20) :: "b2gpplyp", "b2gp-plyp"]) funcs(p_mpw2plyp) = new_funcgroup([character(len=20) :: "mpw2plyp"]) funcs(p_pwpb95) = new_funcgroup([character(len=20) :: "pwpb95"]) funcs(p_dsdblyp) = new_funcgroup([character(len=20) :: "dsdblyp", "dsd-blyp"]) funcs(p_dsdpbe) = new_funcgroup([character(len=20) :: "dsdpbe", "dsd-pbe"]) funcs(p_dsdpbeb95) = new_funcgroup([character(len=20) :: "dsdpbeb95", "dsd-pbeb95"]) funcs(p_dsdpbep86) = new_funcgroup([character(len=20) :: "dsdpbep86", "dsd-pbep86"]) funcs(p_dsdsvwn) = new_funcgroup([character(len=20) :: "dsdsvwn", "dsd-svwn"]) funcs(p_dodblyp) = new_funcgroup([character(len=20) :: "dodblyp", "dod-blyp"]) funcs(p_dodpbe) = new_funcgroup([character(len=20) :: "dodpbe", "dod-pbe"]) funcs(p_dodpbeb95) = new_funcgroup([character(len=20) :: "dodpbeb95", "dod-pbeb95"]) funcs(p_dodpbep86) = new_funcgroup([character(len=20) :: "dodpbep86", "dod-pbep86"]) funcs(p_dodsvwn) = new_funcgroup([character(len=20) :: "dodsvwn", "dod-svwn"]) funcs(p_pbe0_2) = new_funcgroup([character(len=20) :: "pbe02", "pbe0-2"]) funcs(p_pbe0_dh) = new_funcgroup([character(len=20) :: "pbe0dh", "pbe0-dh"]) funcs(p_dftb_3ob) = new_funcgroup([character(len=20) :: "dftb3", "dftb(3ob)"]) funcs(p_dftb_mio) = new_funcgroup([character(len=20) :: "dftb(mio)"]) funcs(p_dftb_pbc) = new_funcgroup([character(len=20) :: "dftb(pbc)"]) funcs(p_dftb_matsci) = new_funcgroup([character(len=20) :: "dftb(matsci)"]) funcs(p_dftb_ob2) = new_funcgroup([character(len=20) :: "lc-dftb", "dftb(ob2)"]) funcs(p_b1b95) = new_funcgroup([character(len=20) :: "b1b95"]) funcs(p_pbesol) = new_funcgroup([character(len=20) :: "pbesol"]) funcs(p_mpwb1k) = new_funcgroup([character(len=20) :: "mpwb1k"]) funcs(p_mpw1b95) = new_funcgroup([character(len=20) :: "mpw1b95"]) funcs(p_hse03) = new_funcgroup([character(len=20) :: "hse03"]) funcs(p_hse06) = new_funcgroup([character(len=20) :: "hse06"]) funcs(p_hse12) = new_funcgroup([character(len=20) :: "hse12"]) funcs(p_hse12s) = new_funcgroup([character(len=20) :: "hse12s"]) funcs(p_hsesol) = new_funcgroup([character(len=20) :: "hsesol"]) funcs(p_revtpssh) = new_funcgroup([character(len=20) :: "revtpssh"]) funcs(p_glyp) = new_funcgroup([character(len=20) :: "glyp", "g-lyp"]) funcs(p_revpbe0dh) = new_funcgroup([character(len=20) :: "revpbe0dh", "revpbe0-dh"]) funcs(p_revtpss0) = new_funcgroup([character(len=20) :: "revtpss0"]) funcs(p_revdsdpbep86) = new_funcgroup([character(len=20) :: "revdsd-pbep86", "revdsdpbep86"]) funcs(p_revdsdpbe) = new_funcgroup([character(len=20) :: "revdsd-pbe", "revdsd-pbepbe", "revdsdpbe", "revdsdpbepbe"]) funcs(p_revdsdblyp) = new_funcgroup([character(len=20) :: "revdsd-blyp", "revdsdblyp"]) funcs(p_revdodpbep86) = new_funcgroup([character(len=20) :: "revdod-pbep86", "revdodpbep86"]) funcs(p_b97m) = new_funcgroup([character(len=20) :: "b97m"]) funcs(p_wb97m) = new_funcgroup([character(len=20) :: "wb97m", "ωb97m", "omegab97m"]) funcs(p_wb97m_rev) = new_funcgroup([character(len=20) :: "wb97m-rev", & & "ωb97m-rev", "omegab97m-rev", "wb97m_rev", "ωb97m_rev", "omegab97m_rev"]) funcs(p_wb97) = new_funcgroup([character(len=20) :: "wb97", "ωb97", "omegab97"]) funcs(p_wb97x_2008) = new_funcgroup([character(len=20) :: "wb97x_2008", & & "ωb97x_2008", "omegab97x_2008", "wb97x-2008", "ωb97x-2008", & & "omegab97x-2008"]) funcs(p_wb97x) = new_funcgroup([character(len=20) :: "wb97x", "ωb97x", & & "omegab97x"]) funcs(p_wb97x_rev) = new_funcgroup([character(len=20) :: "wb97x-rev", & & "ωb97x-rev", "omegab97x-rev", "wb97x_rev", "ωb97x_rev", "omegab97x_rev"]) funcs(p_wb97x_3c) = new_funcgroup([character(len=20) :: "wb97x-3c", & & "ωb97x-3c", "omegab97x-3c", "wb97x_3c", "ωb97x_3c", "omegab97x_3c"]) funcs(p_camb3lyp) = new_funcgroup([character(len=20) :: "cam-b3lyp", "camb3lyp"]) funcs(p_camqtp01) = new_funcgroup([character(len=20) :: "cam-qtp01", & & "camqtp01", "camqtp(01)", "cam-qtp(01)"]) funcs(p_lcblyp) = new_funcgroup([character(len=20) :: "lc-blyp", "lcblyp"]) funcs(p_lcwpbe) = new_funcgroup([character(len=20) :: "lc-wpbe", & & "lcwpbe", "lc-ωpbe", "lcωpbe", "lc-omegapbe", "lcomegapbe"]) funcs(p_lcwpbeh) = new_funcgroup([character(len=20) :: "lc-wpbeh", & & "lcwpbeh", "lc-ωpbeh", "lcωpbeh", "lc-omegapbeh", "lcomegapbeh"]) end subroutine get_functionals !> Retrieve rational damping parameters from functional name subroutine get_rational_damping_name(functional, param, s9) !DEC$ ATTRIBUTES DLLEXPORT :: get_rational_damping_name !> Functional name for which to retrieve the damping parameters character(len=*), intent(in) :: functional !> Damping parameters for the functional class(damping_param), allocatable, intent(out) :: param !> Scaling factor for the three-body term real(wp), intent(in), optional :: s9 character(len=:), allocatable :: fname integer :: is, id is = index(functional, "/") if (is == 0) is = len_trim(functional) + 1 fname = lowercase(functional(:is-1)) id = get_functional_id(fname) call get_rational_damping_id(id, param, s9=s9) end subroutine get_rational_damping_name !> Retrieve rational damping parameters from functional ID subroutine get_rational_damping_id(id, param, s9) !DEC$ ATTRIBUTES DLLEXPORT :: get_rational_damping_id !> Functional ID for which to retrieve the damping parameters integer, intent(in) :: id !> Damping parameters for the functional class(damping_param), allocatable, intent(out) :: param !> Scaling factor for the three-body term real(wp), intent(in), optional :: s9 logical :: mbd mbd = .true. if (present(s9)) mbd = abs(s9) > epsilon(s9) if (mbd) then call get_d4eeq_bjatm_parameter(id, param, s9) if (.not.allocated(param)) then call get_d4eeq_bj_parameter(id, param, s9) end if else call get_d4eeq_bj_parameter(id, param, s9) if (.not.allocated(param)) then call get_d4eeq_bjatm_parameter(id, param, s9) end if end if end subroutine get_rational_damping_id subroutine get_d4eeq_bj_parameter(dfnum, param, s9) integer(df_enum), intent(in) :: dfnum class(damping_param), allocatable, intent(out) :: param real(wp), intent(in), optional :: s9 select case(dfnum) case(p_dftb_3ob) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=0.4727337_wp, a1=0.5467502_wp, a2=4.4955068_wp) case(p_dftb_matsci) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=2.7711819_wp, a1=0.4681712_wp, a2=5.2918629_wp) case(p_dftb_mio) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=1.1948145_wp, a1=0.6074567_wp, a2=4.9336133_wp) case(p_dftb_ob2) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=2.7611320_wp, a1=0.6037249_wp, a2=5.3900004_wp) case(p_dftb_pbc) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=1.7303734_wp, a1=0.5546548_wp, a2=4.7973454_wp) case default continue end select contains pure function dftd_param(s6, s8, a1, a2, alp) result(par) real(wp), intent(in) :: s8, a1, a2 real(wp), intent(in), optional :: s6, alp type(rational_damping_param) :: par real(wp) :: s6_, alp_, s9_ s6_ = 1.0_wp if (present(s6)) s6_ = s6 s9_ = 0.0_wp if (present(s9)) s9_ = s9 alp_ = 16.0_wp if (present(alp)) alp_ = alp par = rational_damping_param(& & s6=s6_, & & s8=s8, a1=a1, a2=a2, & & s9=s9_, & & alp=alp_) end function dftd_param end subroutine get_d4eeq_bj_parameter subroutine get_d4eeq_bjatm_parameter(dfnum, param, s9) integer(df_enum), intent(in) :: dfnum class(damping_param), allocatable, intent(out) :: param real(wp), intent(in), optional :: s9 select case(dfnum) case(p_b1b95) param = dftd_param ( & ! (SAW190107) & s6=1.0000_wp, s8=1.27701162_wp, a1=0.40554715_wp, a2=4.63323074_wp ) ! Fitset: MD= 0.22852 MAD= 0.35189 RMSD= 0.46982 case(p_b1lyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.98553711_wp, a1=0.39309040_wp, a2=4.55465145_wp ) ! Fitset: MD= -0.04797 MAD= 0.25597 RMSD= 0.38778 case(p_b1p) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=3.36115015_wp, a1=0.48665293_wp, a2=5.05219572_wp ) ! Fitset: MD= -0.01406 MAD= 0.27441 RMSD= 0.47328 case(p_b1pw) param = dftd_param ( & ! (SAW190107) & s6=1.0000_wp, s8=3.02227550_wp, a1=0.47396846_wp, a2=4.49845309_wp ) ! Fitset: MD= 0.10485 MAD= 0.32175 RMSD= 0.48508 case(p_b2gpplyp) param = dftd_param ( & ! (SAW190107) & s6=0.5600_wp, s8=0.94633372_wp, a1=0.42907301_wp, a2=5.18802602_wp ) ! Fitset: MD= -0.05248 MAD= 0.18110 RMSD= 0.27365 case(p_b2plyp) param = dftd_param ( & ! (SAW190103) & s6=0.6400_wp, s8=1.16888646_wp, a1=0.44154604_wp, a2=4.73114642_wp ) ! Fitset: MD= -0.03761 MAD= 0.18247 RMSD= 0.27109 case(p_b3lyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=2.02929367_wp, a1=0.40868035_wp, a2=4.53807137_wp ) ! Fitset: MD= -0.05892 MAD= 0.26117 RMSD= 0.40531 case(p_b3p) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=3.08822155_wp, a1=0.47324238_wp, a2=4.98682134_wp ) ! Fitset: MD= -0.02970 MAD= 0.26962 RMSD= 0.46761 case(p_b3pw) param = dftd_param ( & ! (SAW190107) & s6=1.0000_wp, s8=2.88364295_wp, a1=0.46990860_wp, a2=4.51641422_wp ) ! Fitset: MD= 0.06643 MAD= 0.29151 RMSD= 0.45541 case(p_b97) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.87854260_wp, a1=0.29319126_wp, a2=4.51647719_wp ) ! Fitset: MD= -0.13017 MAD= 0.24778 RMSD= 0.36116 case(p_bhlyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.65281646_wp, a1=0.27263660_wp, a2=5.48634586_wp ) ! Fitset: MD= -0.15832 MAD= 0.34132 RMSD= 0.57342 case(p_blyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=2.34076671_wp, a1=0.44488865_wp, a2=4.09330090_wp ) ! Fitset: MD= 0.04801 MAD= 0.28161 RMSD= 0.38321 case(p_bpbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=3.64405246_wp, a1=0.52905620_wp, a2=4.11311891_wp ) ! Fitset: MD= 0.19316 MAD= 0.41912 RMSD= 0.60452 case(p_bp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=3.35497927_wp, a1=0.43645861_wp, a2=4.92406854_wp ) ! Fitset: MD= 0.08252 MAD= 0.32681 RMSD= 0.47063 case(p_bpw) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=3.24571506_wp, a1=0.50050454_wp, a2=4.12346483_wp ) ! Fitset: MD= 0.20607 MAD= 0.41941 RMSD= 0.59589 case(p_camb3lyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.66041301_wp, a1=0.40267156_wp, a2=5.17432195_wp ) ! Fitset: MD= -0.19675 MAD= 0.34901 RMSD= 0.59087 case(p_camqtp01) param = dftd_param ( & ! (10.1021/acs.jctc.3c00717) & s6=1.0000_wp, s8=1.156_wp, a1=0.461_wp, a2=6.375_wp ) case(p_dodblyp) param = dftd_param ( & ! (SAW190103) & s6=0.4700_wp, s8=1.31146043_wp, a1=0.43407294_wp, a2=4.27914360_wp ) ! Fitset: MD= 0.03323 MAD= 0.13858 RMSD= 0.20861 case(p_dodpbeb95) param = dftd_param ( & ! (SAW190103) & s6=0.5600_wp, s8=0.01574635_wp, a1=0.43745720_wp, a2=3.69180763_wp ) ! Fitset: MD= 0.03704 MAD= 0.13343 RMSD= 0.18278 case(p_dodpbe) param = dftd_param ( & ! (SAW190103) & s6=0.4800_wp, s8=0.92051454_wp, a1=0.43037052_wp, a2=4.38067238_wp ) ! Fitset: MD= 0.01065 MAD= 0.13414 RMSD= 0.21424 case(p_dodpbep86) param = dftd_param ( & ! (SAW190103) & s6=0.4600_wp, s8=0.71405681_wp, a1=0.42408665_wp, a2=4.52884439_wp ) ! Fitset: MD= -0.03740 MAD= 0.12467 RMSD= 0.18127 case(p_dodsvwn) param = dftd_param ( & ! (SAW190103) & s6=0.4200_wp, s8=0.94500207_wp, a1=0.47449026_wp, a2=5.05316093_wp ) ! Fitset: MD= -0.07427 MAD= 0.16970 RMSD= 0.25286 case(p_dsdblyp) param = dftd_param ( & ! (SAW190103) & s6=0.5400_wp, s8=0.63018237_wp, a1=0.47591835_wp, a2=4.73713781_wp ) ! Fitset: MD= -0.01981 MAD= 0.14823 RMSD= 0.21530 case(p_dsdpbeb95) param = dftd_param ( & ! (SAW190103) & s6=0.5400_wp, s8=-0.14668670_wp, a1=0.46394587_wp, a2=3.64913860_wp ) ! Fitset: MD= 0.02996 MAD= 0.12414 RMSD= 0.16860 case(p_dsdpbe) param = dftd_param ( & ! (SAW190103) & s6=0.4500_wp, s8=0.70584116_wp, a1=0.45787085_wp, a2=4.44566742_wp ) ! Fitset: MD= 0.00866 MAD= 0.13406 RMSD= 0.21380 case(p_dsdpbep86) param = dftd_param ( & ! (SAW190103) & s6=0.4700_wp, s8=0.37586675_wp, a1=0.53698768_wp, a2=5.13022435_wp ) ! Fitset: MD= -0.05273 MAD= 0.14259 RMSD= 0.21271 case(p_dsdsvwn) param = dftd_param ( & ! (SAW190103) & s6=0.4100_wp, s8=0.72914436_wp, a1=0.51347412_wp, a2=5.11858541_wp ) ! Fitset: MD= -0.08974 MAD= 0.32285 RMSD= 0.43146 case(p_glyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=4.23798924_wp, a1=0.38426465_wp, a2=4.38412863_wp ) ! Fitset: MD= 0.63466 MAD= 0.89568 RMSD= 1.11309 case(p_hf) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.61679827_wp, a1=0.44959224_wp, a2=3.35743605_wp ) ! Fitset: MD= -0.02597 MAD= 0.34732 RMSD= 0.49719 case(p_lb94) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=2.59538499_wp, a1=0.42088944_wp, a2=3.28193223_wp ) ! Fitset: MD= 0.31701 MAD= 0.53196 RMSD= 0.74553 case(p_lcblyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.60344180_wp, a1=0.45769839_wp, a2=7.86924893_wp ) ! Fitset: MD= -0.39724 MAD= 0.72327 RMSD= 1.18218 case(p_lcwpbe) param = dftd_param ( & ! (10.1021/acs.jctc.3c00717) & s6=1.0000_wp, s8=1.170_wp, a1=0.378_wp, a2=4.816_wp ) case(p_lcwpbeh) param = dftd_param ( & ! (10.1021/acs.jctc.3c00717) & s6=1.0000_wp, s8=1.318_wp, a1=0.386_wp, a2=5.010_wp ) case(p_lh07ssvwn) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=3.16675531_wp, a1=0.35965552_wp, a2=4.31947614_wp ) ! Fitset: MD= 0.32224 MAD= 0.59006 RMSD= 0.86272 case(p_lh07tsvwn) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=2.09333001_wp, a1=0.35025189_wp, a2=4.34166515_wp ) ! Fitset: MD= 0.24243 MAD= 0.43497 RMSD= 0.61671 case(p_lh12ctssifpw92) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=2.68467610_wp, a1=0.34190416_wp, a2=3.91039666_wp ) ! Fitset: MD= 0.55106 MAD= 0.80783 RMSD= 1.11048 case(p_lh12ctssirpw92) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=2.48973402_wp, a1=0.34026075_wp, a2=3.96948081_wp ) ! Fitset: MD= 0.47785 MAD= 0.71188 RMSD= 0.98422 case(p_lh14tcalpbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.28130770_wp, a1=0.38822021_wp, a2=4.92501211_wp ) ! Fitset: MD= -0.02105 MAD= 0.22968 RMSD= 0.36045 case(p_lh20t) param = dftd_param ( & ! (10.1021/acs.jctc.0c00498) & s6=1.000_wp, s8=0.113_wp, a1=0.479_wp, a2=4.635_wp ) case(p_m06) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.16366729_wp, a1=0.53456413_wp, a2=6.06192174_wp ) ! Fitset: MD= 0.01788 MAD= 0.24914 RMSD= 0.38604 case(p_m06l) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.59493760_wp, a1=0.71422359_wp, a2=6.35314182_wp ) ! Fitset: MD= 0.08395 MAD= 0.24888 RMSD= 0.34879 case(p_mn12sx) param = dftd_param ( & ! (SAW211021) & s6=1.0000_wp, s8=0.85964873_wp, a1=0.62662681_wp, a2=5.62088906_wp ) ! Fitset: MD= 0.16131 MAD= 0.34142 RMSD= 0.47113 case(p_mpw1b95) param = dftd_param ( & ! (SAW190107) & s6=1.0000_wp, s8=0.50093024_wp, a1=0.41585097_wp, a2=4.99154869_wp ) ! Fitset: MD= 0.00585 MAD= 0.15695 RMSD= 0.21297 case(p_mpw1lyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.15591153_wp, a1=0.25603493_wp, a2=5.32083895_wp ) ! Fitset: MD= -0.26979 MAD= 0.41542 RMSD= 0.60678 case(p_mpw1pw) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.80841716_wp, a1=0.42961819_wp, a2=4.68892341_wp ) ! Fitset: MD= -0.08840 MAD= 0.26815 RMSD= 0.45231 case(p_mpw2plyp) param = dftd_param ( & ! (SAW190107) & s6=0.7500_wp, s8=0.45788846_wp, a1=0.42997704_wp, a2=5.07650682_wp ) ! Fitset: MD= -0.18921 MAD= 0.30115 RMSD= 0.44049 case(p_mpwb1k) param = dftd_param ( & ! (SAW190107) & s6=1.0000_wp, s8=0.57338313_wp, a1=0.44687975_wp, a2=5.21266777_wp ) ! Fitset: MD= -0.00870 MAD= 0.17226 RMSD= 0.23614 case(p_mpwlyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.25842942_wp, a1=0.25773894_wp, a2=5.02319542_wp ) ! Fitset: MD= -0.24426 MAD= 0.39145 RMSD= 0.54503 case(p_mpwpw) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.82596836_wp, a1=0.34526745_wp, a2=4.84620734_wp ) ! Fitset: MD= -0.06278 MAD= 0.27913 RMSD= 0.43988 case(p_o3lyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.75762508_wp, a1=0.10348980_wp, a2=6.16233282_wp ) ! Fitset: MD= -0.19268 MAD= 0.38577 RMSD= 0.62168 case(p_olyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=2.74836820_wp, a1=0.60184498_wp, a2=2.53292167_wp ) ! Fitset: MD= 0.12352 MAD= 0.37113 RMSD= 0.58291 case(p_opbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=3.06917417_wp, a1=0.68267534_wp, a2=2.22849018_wp ) ! Fitset: MD= 0.26699 MAD= 0.55308 RMSD= 0.85023 case(p_pbe0_2) param = dftd_param ( & ! (SAW190103) & s6=0.5000_wp, s8=0.64299082_wp, a1=0.76542115_wp, a2=5.78578675_wp ) ! Fitset: MD= -0.04260 MAD= 0.21186 RMSD= 0.34045 case(p_pbe0) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.20065498_wp, a1=0.40085597_wp, a2=5.02928789_wp ) ! Fitset: MD= -0.17892 MAD= 0.30557 RMSD= 0.51050 case(p_pbe0_dh) param = dftd_param ( & ! (SAW190103) & s6=0.8750_wp, s8=0.96811578_wp, a1=0.47592488_wp, a2=5.08622873_wp ) ! Fitset: MD= -0.13857 MAD= 0.27919 RMSD= 0.47256 case(p_pbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.95948085_wp, a1=0.38574991_wp, a2=4.80688534_wp ) ! Fitset: MD= -0.20544 MAD= 0.33635 RMSD= 0.51168 case(p_pbesol) param = dftd_param ( & ! (SAW211021) & s6=1.0000_wp, s8=1.71885698_wp, a1=0.47901421_wp, a2=5.96771589_wp ) ! Fitset: MD= -0.28899 MAD= 0.52215 RMSD= 0.93584 case(p_am05) param = dftd_param ( & ! (SAW211021) & s6=1.0000_wp, s8=1.71885838_wp, a1=0.47901431_wp, a2=5.96771581_wp ) ! Fitset: MD= -0.28899 MAD= 0.52215 RMSD= 0.93584 case(p_pw1pw) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.96850170_wp, a1=0.42427511_wp, a2=5.02060636_wp ) ! Fitset: MD= -0.27325 MAD= 0.42206 RMSD= 0.64119 case(p_pw6b95) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=-0.31926054_wp, a1=0.04142919_wp, a2=5.84655608_wp ) ! Fitset: MD= -0.04767 MAD= 0.14330 RMSD= 0.18958 case(p_pw86pbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.21362856_wp, a1=0.40510366_wp, a2=4.66737724_wp ) ! Fitset: MD= -0.11505 MAD= 0.24691 RMSD= 0.38101 case(p_pw91) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.77283111_wp, a1=0.39581542_wp, a2=4.93405761_wp ) ! Fitset: MD= -0.33019 MAD= 0.48611 RMSD= 0.68110 case(p_pwp1) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.60492565_wp, a1=0.46855837_wp, a2=5.76921413_wp ) ! Fitset: MD= -0.35321 MAD= 0.54026 RMSD= 0.86629 case(p_pwpb95) param = dftd_param ( & ! (SAW190103) & s6=0.8200_wp, s8=-0.34639127_wp, a1=0.41080636_wp, a2=3.83878274_wp ) ! Fitset: MD= 0.02143 MAD= 0.13040 RMSD= 0.17599 case(p_pwp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=0.32801227_wp, a1=0.35874687_wp, a2=6.05861168_wp ) ! Fitset: MD= -0.42482 MAD= 0.62607 RMSD= 0.91840 case(p_revpbe0) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.57185414_wp, a1=0.38705966_wp, a2=4.11028876_wp ) ! Fitset: MD= 0.02724 MAD= 0.21587 RMSD= 0.36040 case(p_revpbe0dh) param = dftd_param ( & ! (SAW190103) & s6=0.8750_wp, s8=1.24456037_wp, a1=0.36730560_wp, a2=4.71126482_wp ) ! Fitset: MD= -0.01089 MAD= 0.20910 RMSD= 0.33564 case(p_revpbe38) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.66597472_wp, a1=0.39476833_wp, a2=4.39026628_wp ) ! Fitset: MD= -0.01326 MAD= 0.22598 RMSD= 0.36210 case(p_revpbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.74676530_wp, a1=0.53634900_wp, a2=3.07261485_wp ) ! Fitset: MD= 0.05649 MAD= 0.25212 RMSD= 0.40863 case(p_revtpss0) param = dftd_param ( & ! (SAW190107) & s6=1.0000_wp, s8=1.54664499_wp, a1=0.45890964_wp, a2=4.78426405_wp ) ! Fitset: MD= -0.05298 MAD= 0.19965 RMSD= 0.32081 case(p_revtpss) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.53089454_wp, a1=0.44880597_wp, a2=4.64042317_wp ) ! Fitset: MD= -0.01904 MAD= 0.19568 RMSD= 0.29618 case(p_revtpssh) param = dftd_param ( & ! (SAW190107) & s6=1.0000_wp, s8=1.52740307_wp, a1=0.45161957_wp, a2=4.70779483_wp ) ! Fitset: MD= -0.03731 MAD= 0.19133 RMSD= 0.29091 case(p_rpbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.31183787_wp, a1=0.46169493_wp, a2=3.15711757_wp ) ! Fitset: MD= -0.07156 MAD= 0.26348 RMSD= 0.38671 case(p_rpw86pbe) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.12624034_wp, a1=0.38151218_wp, a2=4.75480472_wp ) ! Fitset: MD= -0.12740 MAD= 0.26294 RMSD= 0.40614 case(p_scan) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.46126056_wp, a1=0.62930855_wp, a2=6.31284039_wp ) ! Fitset: MD= -0.13170 MAD= 0.28640 RMSD= 0.51183 case(p_rscan) param = dftd_param ( & ! (10.1063/5.0041008) & s6=1.0000_wp, s8=0.87728975_wp, a1=0.49116966_wp, a2=5.75859346_wp ) case(p_r2scan) param = dftd_param ( & ! (10.1063/5.0041008) & s6=1.0000_wp, s8=0.60187490_wp, a1=0.51559235_wp, a2=5.77342911_wp ) case(p_r2scanh) param = dftd_param ( & ! (10.1063/5.0086040) & s6=1.0_wp, s8=0.8324_wp, a1=0.4944_wp, a2=5.9019_wp) case(p_r2scan0) param = dftd_param ( & ! (10.1063/5.0086040) & s6=1.0_wp, s8=0.8992_wp, a1=0.4778_wp, a2=5.8779_wp) case(p_r2scan50) param = dftd_param ( & ! (10.1063/5.0086040) & s6=1.0_wp, s8=1.0471_wp, a1=0.4574_wp, a2=5.8969_wp) case(p_r2scan_3c) param = dftd_param ( & ! (10.1063/5.0040021) & s6=1.0_wp, s8=0.00_wp, a1=0.42_wp, a2=5.65_wp) case(p_tpss0) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.62438102_wp, a1=0.40329022_wp, a2=4.80537871_wp ) ! Fitset: MD= -0.09569 MAD= 0.26733 RMSD= 0.44767 case(p_tpss) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.76596355_wp, a1=0.42822303_wp, a2=4.54257102_wp ) ! Fitset: MD= -0.09296 MAD= 0.27505 RMSD= 0.42537 case(p_tpssh) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.85897750_wp, a1=0.44286966_wp, a2=4.60230534_wp ) ! Fitset: MD= 0.02238 MAD= 0.16042 RMSD= 0.33519 case(p_b97d) param = dftd_param ( & ! (SAW201029) & s6=1.0000_wp, s8=1.69460052_wp, a1=0.28904684_wp, a2=4.13407323_wp ) ! Fitset: MD= -0.09858 MAD= 0.26757 RMSD= 0.42380 case(p_wb97) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=6.55792598_wp, a1=0.76666802_wp, a2=8.36027334_wp ) ! Fitset: MD= -0.12779 MAD= 0.36152 RMSD= 0.49991 case(p_wb97x_2008) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=-0.07519516_wp, a1=0.45094893_wp, a2=6.78425255_wp ) ! S22x5: MD= 0.05 MAD= 0.16 RMSD= 0.22 ! S66x8: MD= 0.06 MAD= 0.16 RMSD= 0.21 ! NCI10: MD= 0.08 MAD= 0.15 RMSD= 0.25 case(p_wb97x) param = dftd_param ( & ! (10.1002/jcc.26411) & s6=1.0000_wp, s8=0.5093_wp, a1=0.0662_wp, a2=5.4487_wp ) case(p_wb97x_rev) param = dftd_param ( & ! (10.1063/5.0133026) & s6=1.0000_wp, s8=0.4485_wp, a1=0.3306_wp, a2=4.279_wp ) case(p_wb97x_3c) param = dftd_param ( & ! (10.1063/5.0133026) & s6=1.0000_wp, s8=0.0_wp, a1=0.2464_wp, a2=4.737_wp ) case(p_b97m) param = dftd_param ( & ! (10.1002/jcc.26411) & s6=1.0000_wp, s8=0.6633_wp, a1=0.4288_wp, a2=3.9935_wp ) ! S22x5: MD= 0.03 MAD= 0.12 RMSD= 0.18 ! S66x8: MD= 0.09 MAD= 0.17 RMSD= 0.22 ! NCI10: MD= 0.09 MAD= 0.15 RMSD= 0.32 case(p_wb97m) param = dftd_param ( & ! (10.1002/jcc.26411) & s6=1.0000_wp, s8=0.7761_wp, a1=0.7514_wp, a2=2.7099_wp ) ! Fitset: MD= -0.20216 MAD= 0.34696 RMSD= 0.53641 case(p_wb97m_rev) param = dftd_param ( & ! (10.1021/acs.jctc.3c00717) & s6=1.0000_wp, s8=0.842_wp, a1=0.359_wp, a2=4.668_wp ) case(p_x3lyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.54701429_wp, a1=0.20318443_wp, a2=5.61852648_wp ) ! Fitset: MD= -0.15607 MAD= 0.31342 RMSD= 0.49546 case(p_xlyp) param = dftd_param ( & ! (SAW190103) & s6=1.0000_wp, s8=1.62972054_wp, a1=0.11268673_wp, a2=5.40786417_wp ) ! Fitset: MD= -0.03900 MAD= 0.27562 RMSD= 0.38491 case(p_revdsdpbep86) param = dftd_param ( & ! (WTMAD2) & s6=0.5132_wp, s8=0.00000000_wp, a1=0.44000000_wp, a2=3.60000000_wp ) case(p_revdsdpbe) param = dftd_param ( & ! (WTMAD2) & s6=0.6706_wp, s8=0.00000000_wp, a1=0.40000000_wp, a2=3.60000000_wp ) case(p_revdsdblyp) param = dftd_param ( & !(WTMAD2) & s6=0.6141_wp, s8=0.00000000_wp, a1=0.38000000_wp, a2=3.52000000_wp ) case(p_revdodpbep86) param = dftd_param ( & !(WTMAD2) & s6=0.5552_wp, s8=0.00000000_wp, a1=0.44000000_wp, a2=3.60000000_wp ) case(p_dftb_3ob) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=0.6635015_wp, a1=0.5523240_wp, a2=4.3537076_wp) case(p_dftb_matsci) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=3.3157614_wp, a1=0.4826330_wp, a2=5.3811976_wp) case(p_dftb_mio) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=1.2916225_wp, a1=0.5965326_wp, a2=4.8778602_wp) case(p_dftb_ob2) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=2.9692689_wp, a1=0.6068916_wp, a2=5.4476789_wp) case(p_dftb_pbc) param = dftd_param( & ! (SAW191202) & s6=1.0_wp, s8=2.1667394_wp, a1=0.5646391_wp, a2=4.9576353_wp) case(p_hse03) param = dftd_param( & ! (SAW211107) & s6=1.0_wp, s8=1.19812280_wp, a1=0.38662939_wp, a2=5.22925796_wp) case(p_hse06) param = dftd_param( & ! (SAW211107) & s6=1.0_wp, s8=1.19528249_wp, a1=0.38663183_wp, a2=5.19133469_wp) case(p_hse12) param = dftd_param( & ! (SAW211107) & s6=1.0_wp, s8=1.23500792_wp, a1=0.39226921_wp, a2=5.22036266_wp) case(p_hse12s) param = dftd_param( & ! (SAW211107) & s6=1.0_wp, s8=1.23767762_wp, a1=0.39989137_wp, a2=5.34809245_wp) case(p_hsesol) param = dftd_param( & ! (SAW211107) & s6=1.0_wp, s8=1.82207807_wp, a1=0.45646268_wp, a2=5.59662251_wp) case(p_wr2scan) ! (10.1063/5.0174988) param = dftd_param ( & & s6=1.0_wp, s8=1.0_wp, a1=0.3834_wp, a2=5.7889_wp) case(p_r2scan0_dh) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.9424_wp, s8=0.3856_wp, a1=0.4271_wp, a2=5.8565_wp) case(p_r2scan_cidh) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.8666_wp, s8=0.5336_wp, a1=0.4171_wp, a2=5.9125_wp) case(p_r2scan_qidh) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.7867_wp, s8=0.2955_wp, a1=0.4001_wp, a2=5.8300_wp) case(p_r2scan0_2) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.7386_wp, s8=0.0000_wp, a1=0.4030_wp, a2=5.5142_wp) case(p_pr2scan50) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.7964_wp, s8=0.3421_wp, a1=0.4663_wp, a2=5.7916_wp) case(p_pr2scan69) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.7167_wp, s8=0.0000_wp, a1=0.4644_wp, a2=5.2563_wp) case(p_kpr2scan50) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.8402_wp, s8=0.1212_wp, a1=0.4382_wp, a2=5.8232_wp) case(p_wpr2scan50) ! (10.1063/5.0174988) param = dftd_param ( & & s6=0.8143_wp, s8=0.3842_wp, a1=0.4135_wp, a2=5.8773_wp) case default continue end select contains pure function dftd_param(s6, s8, a1, a2, alp) result(par) real(wp), intent(in) :: s8, a1, a2 real(wp), intent(in), optional :: s6, alp type(rational_damping_param) :: par real(wp) :: s6_, alp_, s9_ s6_ = 1.0_wp if (present(s6)) s6_ = s6 s9_ = 1.0_wp if (present(s9)) s9_ = s9 alp_ = 16.0_wp if (present(alp)) alp_ = alp par = rational_damping_param(& & s6=s6_, & & s8=s8, a1=a1, a2=a2, & & s9=s9_, & & alp=alp_) end function dftd_param end subroutine get_d4eeq_bjatm_parameter !> Get the unique identifier for most functionals, returns none if !> the functional was not known at the time I implemented this mapping pure function get_functional_id(df) result(num) integer(df_enum) :: num character(len=*), intent(in) :: df select case(df) case default num = p_invalid case("hf") num = p_hf case("am05", "gga_x_am05:gga_c_am05") num = p_am05 case("b-lyp", "blyp", "gga_x_b88:gga_c_lyp") num = p_blyp case("bpbe", "gga_x_b88:gga_c_pbe") num = p_bpbe case("b-p", "bp86", "bp", "b-p86", "gga_x_b88:gga_c_p86") num = p_bp case("bpw", "b-pw", "gga_x_b88:gga_c_pw91") num = p_bpw case("lb94", "gga_x_lb") ! no gga_c_lb num = p_lb94 case("mpwlyp", "mpw-lyp", "gga_x_mpw91:gga_c_lyp") num = p_mpwlyp case("mpwpw", "mpw-pw", "mpwpw91", "gga_x_mpw91:gga_c_pw91") num = p_mpwpw case("o-lyp", "olyp", "gga_x_optx:gga_c_lyp") num = p_olyp case("opbe", "gga_x_optx:gga_c_pbe") num = p_opbe case("pbe", "gga_x_pbe:gga_c_pbe") num = p_pbe case("rpbe", "gga_x_rpbe:gga_c_pbe") num = p_rpbe case("revpbe", "gga_x_pbe_r:gga_c_pbe") num = p_revpbe case("pbesol", "gga_x_pbe_sol:gga_c_pbe_sol") num = p_pbesol case("pw86pbe", "gga_x_pw86:gga_c_pbe") num = p_pw86pbe case("rpw86pbe", "gga_x_rpw86:gga_c_pbe") num = p_rpw86pbe case("pw91", "gga_x_pw91:gga_c_pw91") num = p_pw91 case("pwp", "pw-p", "pw91p86", "gga_x_pw91:gga_c_p86") num = p_pwp case("x-lyp", "xlyp", "gga_xc_xlyp") num = p_xlyp case("b97", "hyb_gga_xc_b97") num = p_b97 case("b97d", "gga_xc_b97_d") num = p_b97d case("tpss", "mgga_c_tpss:mgga_x_tpss") num = p_tpss case("revtpss", "mgga_c_revtpss:mgga_x_revtpss") num = p_revtpss case("scan", "mgga_x_scan:mgga_c_scan") num = p_scan case("rscan", "mgga_x_rscan:mgga_c_rscan") num = p_rscan case("r2scan", "r²scan", "mgga_x_r2scan:mgga_c_r2scan") num = p_r2scan case("r2scanh", "r²scanh", "hyb_mgga_xc_r2scanh") num = p_r2scanh case("r2scan0", "r²scan0", "hyb_mgga_xc_r2scan0") num = p_r2scan0 case("r2scan50", "r²scan50", "hyb_mgga_xc_r2scan50") num = p_r2scan50 case("r2scan-3c", "r²scan-3c", "r2scan_3c", "r²scan_3c", "r2scan3c") num = p_r2scan_3c case("b1lyp", "b1-lyp", "hyb_gga_xc_b1lyp") num = p_b1lyp case("b3-lyp", "b3lyp", "hyb_gga_xc_b3lyp", "hyb_gga_xc_b3lyp3", "hyb_gga_xc_b3lyp5") num = p_b3lyp case("bh-lyp", "bhlyp", "hyb_gga_xc_bhandh", "hyb_gga_xc_bhandhlyp") num = p_bhlyp case("b1p", "b1-p", "b1p86") ! 0.75 b88 + 0.25 hf; p86 (nonloc) + pw81 (loc) num = p_b1p case("b3p", "b3-p", "b3p86", "hyb_gga_xc_b3p86", "hyb_gga_xc_b3p86_nwchem") num = p_b3p case("b1pw", "b1-pw", "b1pw91", "hyb_gga_xc_b1pw91") num = p_b1pw case("b3pw", "b3-pw", "b3pw91", "hyb_gga_xc_b3pw91") num = p_b3pw case("o3-lyp", "o3lyp", "hyb_gga_xc_o3lyp") num = p_o3lyp case("revpbe0") ! no libxc num = p_revpbe0 case("revpbe38") ! no libxc num = p_revpbe38 case("pbe0", "hyb_gga_xc_pbeh") num = p_pbe0 case("pwp1") ! no libxc num = p_pwp1 case("pw1pw", "pw1-pw") ! no libxc num = p_pw1pw case("mpw1pw", "mpw1-pw", "mpw1pw91", "hyb_gga_xc_mpw1pw") num = p_mpw1pw case("mpw1lyp", "mpw1-lyp", "hyb_gga_xc_mpw1lyp") num = p_mpw1lyp case("pw6b95", "hyb_mgga_xc_pw6b95") num = p_pw6b95 case("tpssh", "hyb_mgga_xc_tpssh") num = p_tpssh case("tpss0", "hyb_mgga_xc_tpss0") num = p_tpss0 case("x3-lyp", "x3lyp", "hyb_gga_xc_x3lyp") num = p_x3lyp case("m06", "mgga_x_m06:mgga_c_m06") num = p_m06 case("m06l", "mgga_x_m06_l:mgga_c_m06_l") num = p_m06l case("mn12sx", "mn12-sx", "mgga_c_mn12_sx:mgga_c_mn12_sx") num = p_mn12sx case("cam-b3lyp", "camb3lyp", "hyb_gga_xc_cam_b3lyp") num = p_camb3lyp case("cam-qtp01", "camqtp01", "camqtp(01)", "cam-qtp(01)", & & "hyb_gga_xc_cam_qtp_01") num = p_camqtp01 case("lc-blyp", "lcblyp", "hyb_gga_xc_lc_blyp") num = p_lcblyp case("lc-wpbe", "lcwpbe", "lc-ωpbe", "lcωpbe", "lc-omegapbe", "lcomegapbe", & & "hyb_gga_xc_lc_wpbe", "hyb_gga_xc_lc_wpbe08_whs", & & "hyb_gga_xc_lc_wpbe_whs", "hyb_gga_xc_lrc_wpbe") num = p_lcwpbe case("lc-wpbeh", "lcwpbeh", "lc-ωpbeh", "lcωpbeh", "lc-omegapbeh", & & "lcomegapbeh", "hyb_gga_xc_lc_wpbeh_whs", "hyb_gga_xc_lrc_wpbeh") num = p_lcwpbeh case("lh07tsvwn", "lh07t-svwn") ! no libxc num = p_lh07tsvwn case("lh07ssvwn", "lh07s-svwn") ! no libxc num = p_lh07ssvwn case("lh12ctssirpw92", "lh12ct-ssirpw92") ! no libxc num = p_lh12ctssirpw92 case("lh12ctssifpw92", "lh12ct-ssifpw92") ! no libxc num = p_lh12ctssifpw92 case("lh14tcalpbe", "lh14t-calpbe") ! no libxc num = p_lh14tcalpbe case("lh20t") ! no libxc num = p_lh20t case("b2plyp", "b2-plyp", "xc_hyb_gga_xc_b2plyp") ! only in code num = p_b2plyp case("b2gpplyp", "b2gp-plyp", "xc_hyb_gga_xc_b2gpplyp") ! only in code num = p_b2gpplyp case("mpw2plyp") ! no libxc num = p_mpw2plyp case("pwpb95") ! no libxc num = p_pwpb95 case("dsdblyp", "dsd-blyp") ! no libxc num = p_dsdblyp case("dsdpbe", "dsd-pbe") ! no libxc num = p_dsdpbe case("dsdpbeb95", "dsd-pbeb95") ! no libxc num = p_dsdpbeb95 case("dsdpbep86", "dsd-pbep86") ! no libxc num = p_dsdpbep86 case("dsdsvwn", "dsd-svwn") ! no libxc num = p_dsdsvwn case("dodblyp", "dod-blyp") ! no libxc num = p_dodblyp case("dodpbe", "dod-pbe") ! no libxc num = p_dodpbe case("dodpbeb95", "dod-pbeb95") ! no libxc num = p_dodpbeb95 case("dodpbep86", "dod-pbep86") ! no libxc num = p_dodpbep86 case("dodsvwn", "dod-svwn") ! no libxc num = p_dodsvwn case("pbe02", "pbe0-2") ! no libxc num = p_pbe0_2 case("pbe0dh", "pbe0-dh") ! no libxc num = p_pbe0_dh case("dftb3", "dftb(3ob)") ! no libxc num = p_dftb_3ob case("dftb(mio)") ! no libxc num = p_dftb_mio case("dftb(pbc)") ! no libxc num = p_dftb_pbc case("dftb(matsci)") ! no libxc num = p_dftb_matsci case("lc-dftb", "dftb(ob2)") ! no libxc num = p_dftb_ob2 case("b1b95", "hyb_mgga_xc_b88b95") num = p_b1b95 case("mpwb1k", "hyb_mgga_xc_mpwb1k") num = p_mpwb1k case("mpw1b95", "hyb_mgga_xc_mpw1b95") num = p_mpw1b95 case("hse03", "hyb_gga_xc_hse03") num = p_hse03 case("hse06", "hyb_gga_xc_hse06") num = p_hse06 case("hse12", "hyb_gga_xc_hse12") num = p_hse12 case("hse12s", "hyb_gga_xc_hse12s") num = p_hse12s case("hsesol", "hyb_gga_xc_hse_sol") num = p_hsesol case("glyp", "g-lyp", "gga_x_g96:gga_c_lyp") num = p_glyp case("revpbe0dh", "revpbe0-dh") ! no libxc num = p_revpbe0dh case("revtpssh", "hyb_mgga_xc_revtpssh") num = p_revtpssh case("revtpss0") ! no libxc num = p_revtpss0 case("revdsd-pbep86", "revdsdpbep86") ! no libxc num = p_revdsdpbep86 case("revdsd-pbe", "revdsd-pbepbe", "revdsdpbe", "revdsdpbepbe") ! no libxc num = p_revdsdpbe case("revdsd-blyp", "revdsdblyp") ! no libxc num = p_revdsdblyp case("revdod-pbep86", "revdodpbep86") ! no libxc num = p_revdodpbep86 case("b97m", "mgga_xc_b97m_v") num = p_b97m case("wb97m", "ωb97m", "omegab97m", "hyb_mgga_xc_wb97m_v") num = p_wb97m case("wb97m-rev", "ωb97m-rev", "omegab97m-rev", "wb97m_rev", "ωb97m_rev", & & "omegab97m_rev") ! D4 re-parametrization num = p_wb97m_rev case("wb97", "ωb97", "omegab97", "hyb_gga_xc_wb97") num = p_wb97 case("wb97x-2008", "ωb97x-2008", "omegab97x-2008", "hyb_gga_xc_wb97x", & & "wb97x_2008", "ωb97x_2008", "omegab97x_2008") num = p_wb97x_2008 case("wb97x", "ωb97x", "omegab97x", "hyb_gga_xc_wb97x_v") num = p_wb97x case("wb97x-rev", "ωb97x-rev", "omegab97x-rev", "wb97x_rev", "ωb97x_rev", & & "omegab97x_rev") ! D4 re-parametrization num = p_wb97x_rev case("wb97x-3c", "ωb97x-3c", "omegab97x-3c", "wb97x_3c", "ωb97x_3c", & & "omegab97x_3c") ! no libxc num = p_wb97x_3c case("wr2scan", "wr²scan") ! no libxc num = p_wr2scan case("r2scan0-dh", "r²scan0-dh", "r2scan0dh", "r²scan0dh") ! no libxc num = p_r2scan0_dh case("r2scan-cidh", "r²scan-cidh", "r2scancidh", "r²scancidh") ! no libxc num = p_r2scan_cidh case("r2scan-qidh", "r²scan-qidh", "r2scanqidh", "r²scanqidh") ! no libxc num = p_r2scan_qidh case("r2scan0-2", "r²scan0-2", "r2scan02", "r²scan02") ! no libxc num = p_r2scan0_2 case("pr2scan50", "pr²scan50") ! no libxc num = p_pr2scan50 case("pr2scan69", "pr²scan69") ! no libxc num = p_pr2scan69 case("kpr2scan50", "kpr²scan50") ! no libxc num = p_kpr2scan50 case("wpr2scan50", "wpr²scan50") ! no libxc num = p_wpr2scan50 end select end function get_functional_id end module dftd4_param