libxc_input Subroutine

public subroutine libxc_input(functional_name, dft_params, tddft_params, functional)

Uses

  • proc~~libxc_input~~UsesGraph proc~libxc_input libxc_input module~messages messages proc~libxc_input->module~messages module~types types proc~libxc_input->module~types comm_IOFILE comm_IOFILE module~messages->comm_IOFILE comm_PAR comm_PAR module~messages->comm_PAR module~io_constants io_constants module~messages->module~io_constants module~precision precision module~messages->module~precision iso_c_binding iso_c_binding module~types->iso_c_binding module~atomic_structure_m atomic_structure_m module~types->module~atomic_structure_m module~basis_tools basis_tools module~types->module~basis_tools module~functionals functionals module~types->module~functionals module~parallel parallel module~types->module~parallel module~types->module~precision tagarray tagarray module~types->tagarray module~atomic_structure_m->iso_c_binding module~basis_tools->module~atomic_structure_m module~basis_tools->module~io_constants module~basis_tools->module~parallel module~basis_tools->module~precision iso_fortran_env iso_fortran_env module~basis_tools->iso_fortran_env module~constants constants module~basis_tools->module~constants module~functionals->iso_c_binding module~functionals->module~precision xc_f03_lib_m xc_f03_lib_m module~functionals->xc_f03_lib_m module~parallel->iso_c_binding module~parallel->module~precision module~parallel->iso_fortran_env mpi mpi module~parallel->mpi module~precision->iso_fortran_env module~constants->module~precision

@brief setting up of using libxc functionals (Analog of INPGDFT) @detail @author Igor S. Gerasimov @date July, 2019 - Initial release - @date July, 2021 Using messages module Adding optional arguments @date Dec, 2022 Pass functional instead of using global @params functional_name (in) functional's name @param infos (inout) info datatype @param functional (inout) constructing functional

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: functional_name
type(dft_parameters), intent(inout) :: dft_params
type(tddft_parameters), intent(inout) :: tddft_params
type(functional_t), intent(inout) :: functional

Calls

proc~~libxc_input~~CallsGraph proc~libxc_input libxc_input interface~show_message show_message proc~libxc_input->interface~show_message none~add_functional functional_t%add_functional proc~libxc_input->none~add_functional none~can_calculate functional_t%can_calculate proc~libxc_input->none~can_calculate xc_f03_reference xc_f03_reference proc~libxc_input->xc_f03_reference xc_f03_reference_doi xc_f03_reference_doi proc~libxc_input->xc_f03_reference_doi xc_f03_version_string xc_f03_version_string proc~libxc_input->xc_f03_version_string none~add_functional->interface~show_message xc_f03_func_get_info xc_f03_func_get_info none~add_functional->xc_f03_func_get_info xc_f03_func_info_get_family xc_f03_func_info_get_family none~add_functional->xc_f03_func_info_get_family xc_f03_func_info_get_flags xc_f03_func_info_get_flags none~add_functional->xc_f03_func_info_get_flags xc_f03_func_info_get_kind xc_f03_func_info_get_kind none~add_functional->xc_f03_func_info_get_kind xc_f03_func_info_get_name xc_f03_func_info_get_name none~add_functional->xc_f03_func_info_get_name xc_f03_func_info_get_references xc_f03_func_info_get_references none~add_functional->xc_f03_func_info_get_references xc_f03_func_init xc_f03_func_init none~add_functional->xc_f03_func_init xc_f03_func_reference_get_doi xc_f03_func_reference_get_doi none~add_functional->xc_f03_func_reference_get_doi xc_f03_func_reference_get_ref xc_f03_func_reference_get_ref none~add_functional->xc_f03_func_reference_get_ref xc_f03_func_set_ext_params xc_f03_func_set_ext_params none~add_functional->xc_f03_func_set_ext_params xc_f03_hyb_cam_coef xc_f03_hyb_cam_coef none~add_functional->xc_f03_hyb_cam_coef xc_f03_hyb_exx_coef xc_f03_hyb_exx_coef none~add_functional->xc_f03_hyb_exx_coef

Called by

proc~~libxc_input~~CalledByGraph proc~libxc_input libxc_input proc~dft_initialize dft_initialize proc~dft_initialize->proc~libxc_input proc~hf_energy hf_energy proc~hf_energy->proc~dft_initialize proc~hf_gradient hf_gradient proc~hf_gradient->proc~dft_initialize proc~oqp_tdhf_z_vector oqp_tdhf_z_vector proc~oqp_tdhf_z_vector->proc~dft_initialize proc~tdhf_energy tdhf_energy proc~tdhf_energy->proc~dft_initialize proc~tdhf_gradient tdhf_gradient proc~tdhf_gradient->proc~dft_initialize proc~tdhf_energy_c tdhf_energy_C proc~tdhf_energy_c->proc~tdhf_energy proc~tdhf_gradient_c tdhf_gradient_C proc~tdhf_gradient_c->proc~tdhf_gradient proc~tdhf_z_vector_c tdhf_z_vector_C proc~tdhf_z_vector_c->proc~oqp_tdhf_z_vector

Source Code

  subroutine libxc_input(functional_name, dft_params, tddft_params, functional)
    use messages, only: show_message, WITH_ABORT
    use types, only: dft_parameters, tddft_parameters

    character(len=*), intent(in) :: functional_name
    type(dft_parameters), intent(inout) :: dft_params
    type(tddft_parameters), intent(inout) :: tddft_params
    type(functional_t), intent(inout) :: functional

    ! Functional names
    character(len=:), allocatable :: funcname

    ! LibXC strings
    character(len=1024) :: LibXC_DOI, LibXC_reference, LibXC_version

    real(kind=fp) :: HFEX, MP2
    real(kind=fp) :: chf, c2opp, c2same
    HFEX = 0.0_fp
    chf = 0.0_fp
    c2opp = 0.0_fp
    c2same = 0.0_fp

    call xc_f03_reference(LibXC_reference)
    call xc_f03_reference_doi(LibXC_DOI)
    call xc_f03_version_string(LibXC_version)

    call show_message(" ") !empty line
    call show_message(" The LibXC "//trim(LibXC_version)//" version is used.")
    call show_message(" "//trim(LibXC_reference))
    call show_message(" The libXC interfaces are described in the following article:")
    call show_message(" Igor S. Gerasimov, Federico Zahariev, Sarom S. Leang, Anton Tesliuk, Mark S. Gordon, Michael G. Medvedev,")
    call show_message(" Introducing LibXC into GAMESS (US),")
    call show_message(" Mendeleev Commun., 2021, 31, 302–305")
    call show_message(" ") !empty line
    call show_message(" The information about selected functionals:")

    funcname = functional_name
    select case (funcname)
    case ("HFEX")
      HFEX = 1.00_fp
    case ("SLATER")
      call functional%add_functional(XC_LDA_X, 1.00_fp) !SLATER_X
    case ("TETER")
      call functional%add_functional(XC_LDA_XC_TETER93, 1.00_fp) !TETER93_XC
    case ("KSDT")
      call functional%add_functional(XC_LDA_XC_KSDT, 1.00_fp) !KSDT_XC
    case ("CORRKSDT")
      call functional%add_functional(XC_LDA_XC_CORRKSDT, 1.00_fp)
    case ("GDSMFB")
      call functional%add_functional(XC_LDA_XC_GDSMFB, 1.00_fp) !GDSMFB_XC
    case ("ZLP-20")
      call functional%add_functional(XC_LDA_XC_ZLP, 1.00_fp) !ZLP_XC (LDA)
    case ("PBE", "PBEPBE")
      call functional%add_functional(XC_GGA_X_PBE, 1.00_fp) !PBE_X
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp) !PBE_C
    case ("REVPBE")
      call functional%add_functional(XC_GGA_X_PBE_R, 1.00_fp) !PBE_R_X
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp) !PBE_C
    case ("RPBE")
      call functional%add_functional(XC_GGA_X_RPBE, 1.00_fp) !RPBE_X
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp) !PBE_C
    case ("PW91")
      call functional%add_functional(XC_GGA_X_PW91, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PW91, 1.00_fp)
    case ("AM05")
      call functional%add_functional(XC_GGA_X_AM05, 1.00_fp)
      call functional%add_functional(XC_GGA_C_AM05, 1.00_fp)
    case ("PBESOL")
      call functional%add_functional(XC_GGA_X_PBE_SOL, 1.00_fp) !PBEsol_X
      call functional%add_functional(XC_GGA_C_PBE_SOL, 1.00_fp) !PBEsol_C
    case ("WC")
      call functional%add_functional(XC_GGA_X_WC, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("CHACHIYO")
      call functional%add_functional(XC_GGA_X_CHACHIYO, 1.00_fp)
      call functional%add_functional(XC_GGA_C_CHACHIYO, 1.00_fp)
    case ("BLYP")
      call functional%add_functional(XC_GGA_X_B88, 1.00_fp)
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp)
    case ("OLYP")
      call functional%add_functional(XC_GGA_X_OPTX, 1.00_fp)
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp)
    case ("XLYP")
      call functional%add_functional(XC_GGA_XC_XLYP, 1.00_fp)
    case ("KT1")
      call functional%add_functional(XC_GGA_XC_KT1, 1.00_fp)
    case ("KT2")
      call functional%add_functional(XC_GGA_XC_KT2, 1.00_fp)
    case ("KT3")
      call functional%add_functional(XC_GGA_XC_KT3, 1.00_fp)
    case ("TH1")
      call functional%add_functional(XC_GGA_XC_TH1, 1.00_fp)
    case ("TH2")
      call functional%add_functional(XC_GGA_XC_TH2, 1.00_fp)
    case ("TH3")
      call functional%add_functional(XC_GGA_XC_TH3, 1.00_fp)
    case ("TH4")
      call functional%add_functional(XC_GGA_XC_TH4, 1.00_fp)
    case ("HCTH93")
      call functional%add_functional(XC_GGA_XC_HCTH_93, 1.00_fp)
    case ("HCTH120")
      call functional%add_functional(XC_GGA_XC_HCTH_120, 1.00_fp)
    case ("HCTH147")
      call functional%add_functional(XC_GGA_XC_HCTH_147, 1.00_fp)
    case ("HCTH407")
      call functional%add_functional(XC_GGA_XC_HCTH_407, 1.00_fp)
    case ("HCTH407+", "HCTH407P")
      call functional%add_functional(XC_GGA_XC_HCTH_407P, 1.00_fp)
    case ("HCTH-A")
      call functional%add_functional(XC_GGA_X_HCTH_A, 1.00_fp)
      call functional%add_functional(XC_GGA_C_HCTH_A, 1.00_fp)
    case ("HCTH-P14")
      call functional%add_functional(XC_GGA_XC_HCTH_P14, 1.00_fp)
    case ("HCTH-P76")
      call functional%add_functional(XC_GGA_XC_HCTH_P76, 1.00_fp)
    case ("PBE1W")
      call functional%add_functional(XC_GGA_XC_PBE1W, 1.00_fp)
    case ("MPWLYP1W")
      call functional%add_functional(XC_GGA_XC_MPWLYP1W, 1.00_fp)
    case ("PBELYP1W")
      call functional%add_functional(XC_GGA_XC_PBELYP1W, 1.00_fp)
    case ("GAM")
      call functional%add_functional(XC_GGA_X_GAM, 1.00_fp)
      call functional%add_functional(XC_GGA_C_GAM, 1.00_fp)
    case ("MOHLYP")
      call functional%add_functional(XC_GGA_XC_MOHLYP, 1.00_fp)
    case ("MOHLYP-2", "MOHLYP2")
      call functional%add_functional(XC_GGA_XC_MOHLYP2, 1.00_fp)
    case ("SOGGA11")
      call functional%add_functional(XC_GGA_X_SOGGA11, 1.00_fp)
      call functional%add_functional(XC_GGA_C_SOGGA11, 1.00_fp)
    case ("N12")
      call functional%add_functional(XC_GGA_C_N12, 1.00_fp)
      call functional%add_functional(XC_GGA_X_N12, 1.00_fp)
    case ("HLE16")
      call functional%add_functional(XC_GGA_XC_HLE16, 1.00_fp)
    case ("EDF1")
      call functional%add_functional(XC_GGA_XC_EDF1, 1.00_fp)
    case ("LB07")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_LB07, 1.00_fp,&
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, omega=dft_params%cam_mu)
    case ("NCAP")
      call functional%add_functional(XC_GGA_XC_NCAP, 1.00_fp)
    case ("HTBS")
      call functional%add_functional(XC_GGA_X_HTBS, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("PKZB")
      call functional%add_functional(XC_MGGA_X_PKZB, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_PKZB, 1.00_fp)
    case ("TPSS")
      call functional%add_functional(XC_MGGA_X_TPSS, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_TPSS, 1.00_fp)
    case ("REVTPSS")
      call functional%add_functional(XC_MGGA_X_REVTPSS, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_REVTPSS, 1.00_fp)
    case ("MODTPSS")
      call functional%add_functional(XC_MGGA_X_MODTPSS, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_TPSS, 1.00_fp)
    case ("TPSSLOC", "TPSS-LOC")
      call functional%add_functional(XC_MGGA_X_TPSS, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_TPSSLOC, 1.00_fp)
    case ("RTPSS")
      call functional%add_functional(XC_MGGA_X_RTPSS, 1.00_fp)
      call functional%add_functional(XC_GGA_C_REGTPSS, 1.00_fp)
    case ("REGTPSS")
      call functional%add_functional(XC_MGGA_X_REGTPSS, 1.00_fp)
      call functional%add_functional(XC_GGA_C_REGTPSS, 1.00_fp)
    case ("MVS")
      call functional%add_functional(XC_MGGA_X_MVS, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MVSB")
      call functional%add_functional(XC_MGGA_X_MVSB, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MVSB*", "MVSBS")
      call functional%add_functional(XC_MGGA_X_MVSBS, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MS0")
      call functional%add_functional(XC_MGGA_X_MS0, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MS1")
      call functional%add_functional(XC_MGGA_X_MS1, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MS2")
      call functional%add_functional(XC_MGGA_X_MS2, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MS2B")
      call functional%add_functional(XC_MGGA_X_MS2B, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MS2B*", "MS2BS")
      call functional%add_functional(XC_MGGA_X_MS2BS, 1.00_fp)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("SCAN")
      call functional%add_functional(XC_MGGA_X_SCAN, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_SCAN, 1.00_fp)
    case ("RSCAN", "REGSCAN")
      call functional%add_functional(XC_MGGA_X_RSCAN, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_RSCAN, 1.00_fp)
    case ("RPPSCAN", "R++SCAN")
      call functional%add_functional(XC_MGGA_X_RPPSCAN, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_RPPSCAN, 1.00_fp)
    case ("R2SCAN")
      call functional%add_functional(XC_MGGA_X_R2SCAN, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_R2SCAN, 1.00_fp)
    case ("R2SCAN01")
      call functional%add_functional(XC_MGGA_X_R2SCAN01, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_R2SCAN01, 1.00_fp)
    case ("R4SCAN")
      call functional%add_functional(XC_MGGA_X_R4SCAN, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_R2SCAN, 1.00_fp)
    case ("REVSCAN")
      call functional%add_functional(XC_MGGA_X_REVSCAN, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_REVSCAN, 1.00_fp)
    case ("TASK")
      call functional%add_functional(XC_MGGA_X_TASK, 1.00_fp)
      call functional%add_functional(XC_LDA_C_PW, 1.00_fp)
    case ("TM")
      call functional%add_functional(XC_MGGA_X_TM, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_TM, 1.00_fp)
    case ("REVTM")
      call functional%add_functional(XC_MGGA_X_REVTM, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_REVTM, 1.00_fp)
    case ("REGTM")
      call functional%add_functional(XC_MGGA_X_REGTM, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_TM, 1.00_fp)
    case ("RREGTM")
      call functional%add_functional(XC_MGGA_X_REGTM, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_RREGTM, 1.00_fp)
    case ("MGGAC")
      call functional%add_functional(XC_MGGA_X_MGGAC, 1.00_fp)
      call functional%add_functional(XC_GGA_C_MGGAC, 1.00_fp)
    case ("RMGGAC")
      call functional%add_functional(XC_MGGA_X_MGGAC, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_RMGGAC, 1.00_fp)
    case ("TAUHCTH", "THCTH")
      call functional%add_functional(XC_MGGA_X_TAU_HCTH, 1.00_fp)
      call functional%add_functional(XC_GGA_C_TAU_HCTH, 1.00_fp)
    case ("VSXC")
      call functional%add_functional(XC_MGGA_X_GVT4, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_VSXC, 1.00_fp)
    case ("TPSSLYP1W")
      call functional%add_functional(XC_MGGA_XC_TPSSLYP1W, 1.00_fp)
    case ("M06-L", "M06L")
      call functional%add_functional(XC_MGGA_X_M06_L, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_M06_L, 1.00_fp)
    case ("REVM06-L", "REVM06L")
      call functional%add_functional(XC_MGGA_X_REVM06_L, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_REVM06_L, 1.00_fp)
    case ("M11-L", "M11L")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_MGGA_X_M11_L, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
      call functional%add_functional(XC_MGGA_C_M11_L, 1.00_fp)
    case ("MN12-L", "MN12L")
      call functional%add_functional(XC_MGGA_X_MN12_L, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_MN12_L, 1.00_fp)
    case ("MN15-L", "MN15L")
      call functional%add_functional(XC_MGGA_X_MN15_L, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_MN15_L, 1.00_fp)
    case ("HLE17")
      call functional%add_functional(XC_MGGA_XC_HLE17, 1.00_fp)
    case ("HLTA")
      call functional%add_functional(XC_MGGA_X_HLTA, 1.00_fp)
      call functional%add_functional(XC_MGGA_C_HLTAPW, 1.00_fp)
    case ("LDA0")
      call functional%add_functional(XC_HYB_LDA_XC_LDA0, 1.00_fp, hfex=HFEX) !LDA0_hXC
    case ("CAM-LDA0") ! The energy of He in 3-21G basis set looks OK (-2.8529482409)
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_LDA_XC_CAM_LDA0, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu) !CAM-LDA0_hXC
    case ("APF")
      call functional%add_functional(XC_HYB_GGA_XC_APF, 1.00_fp, hfex=HFEX)
    case ("B1WC")
      call functional%add_functional(XC_HYB_GGA_XC_B1WC, 1.00_fp, hfex=HFEX)
    case ("PBE0", "PBE-25", "PBE1PBE")
      call functional%add_functional(XC_HYB_GGA_XC_PBEH, 1.00_fp, hfex=HFEX)
    case ("PBE-33")
      call functional%add_functional(XC_HYB_GGA_XC_PBE0_13, 1.00_fp, hfex=HFEX)
    case ("PBE-38", "PBE-3/8")
      call functional%add_functional(XC_HYB_GGA_XC_PBE38, 1.00_fp, hfex=HFEX)
    case ("PBE-50")
      call functional%add_functional(XC_HYB_GGA_XC_PBE50, 1.00_fp, hfex=HFEX)
    case ("PBE-2X")
      call functional%add_functional(XC_HYB_GGA_XC_PBE_2X, 1.00_fp, hfex=HFEX)
    case ("PBE-3X")
      HFEX = 0.84_fp
      call functional%add_functional(XC_GGA_X_PBE, 0.16_fp) !PBE_X
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp) !PBE_C
    case ("BHH")
      call functional%add_functional(XC_HYB_GGA_XC_BHANDH, 1.00_fp, hfex=HFEX)
    case ("B1PW91")
      call functional%add_functional(XC_HYB_GGA_XC_B1PW91, 1.00_fp, hfex=HFEX)
    case ("B3PW91")
      call functional%add_functional(XC_HYB_GGA_XC_B3PW91, 1.00_fp, hfex=HFEX)
    case ("BLYP35")
      call functional%add_functional(XC_HYB_GGA_XC_BLYP35, 1.00_fp, hfex=HFEX)
    case ("B1LYP")
      call functional%add_functional(XC_HYB_GGA_XC_B1LYP, 1.00_fp, hfex=HFEX)
    case ("BHHLYP")
      call functional%add_functional(XC_HYB_GGA_XC_BHANDHLYP, 1.00_fp, hfex=HFEX)
    case ("STG1X")
      call functional%add_functional(XC_HYB_GGA_XC_BHANDHLYP, 1.00_fp, hfex=HFEX) 
      hfex=0.85
      tddft_params%spc_coco = 0.5_fp
      tddft_params%spc_ovov = 0.5_fp
      tddft_params%spc_coov = 0.5_fp
      write(*,fmt='(a)') "STG1X = B(0.15)HF(0.85)-LYP functional"
      write(*,fmt='(3a)') "[3] Y. Horbatenko, S. Lee, M. Filatov, and C. H. Choi, ", &
            "J. Phys. Chem. A, 123, 7991-8000 (2019); ", &
            "DOI: 10.1021/acs.jpca.9b07556"
    case ("B3LYP")
      call show_message("B3LYP functional has different meanings,")
      call show_message("so that it can not be run using LibXC interface.")
      call show_message("For running B3LYP, choose one of them:")
      call show_message(" - B3LYPV1R with  VWN RPA LDA correlation part (default for Gaussian)")
      call show_message(" - B3LYPV3  with  VWN_3   LDA correlation part")
      call show_message(" - B3LYPV5  with  VWN_5   LDA correlation part (default for GAMESS-US)")
      call show_message(ABORTING, WITH_ABORT)
    case ("B3LYPV1R")
      call functional%add_functional(XC_HYB_GGA_XC_B3LYP, 1.00_fp, hfex=HFEX)
    case ("B3LYPV3")
      call functional%add_functional(XC_HYB_GGA_XC_B3LYP3, 1.00_fp, hfex=HFEX)
    case ("B3LYPV5", "B3LYP5")
      call functional%add_functional(XC_HYB_GGA_XC_B3LYP5, 1.00_fp, hfex=HFEX)
    case ("O3LYP")
      call functional%add_functional(XC_HYB_GGA_XC_O3LYP, 1.00_fp, hfex=HFEX)
    case ("X3LYP")
      call functional%add_functional(XC_HYB_GGA_XC_X3LYP, 1.00_fp, hfex=HFEX)
    case ("REVB3LYP")
      call functional%add_functional(XC_HYB_GGA_XC_REVB3LYP, 1.00_fp, hfex=HFEX)
    case ("B3LYP*", "B3LYPS")
      call functional%add_functional(XC_HYB_GGA_XC_B3LYPs, 1.00_fp, hfex=HFEX)
    case ("B50LYP", "B5050LYP")
      call functional%add_functional(XC_HYB_GGA_XC_B5050LYP, 1.00_fp, hfex=HFEX)
    case ("KMLYP")
      call functional%add_functional(XC_HYB_GGA_XC_KMLYP, 1.00_fp, hfex=HFEX)
    case ("CASE21")
      call functional%add_functional(XC_HYB_GGA_XC_CASE21, 1.00_fp, hfex=HFEX)
    case ("B97-1P")
      call functional%add_functional(XC_HYB_GGA_XC_B97_1p, 1.00_fp, hfex=HFEX)
    case ("B97")
      call functional%add_functional(XC_HYB_GGA_XC_B97, 1.00_fp, hfex=HFEX)
    case ("B97-1")
      call functional%add_functional(XC_HYB_GGA_XC_B97_1, 1.00_fp, hfex=HFEX)
    case ("B97-2")
      call functional%add_functional(XC_HYB_GGA_XC_B97_2, 1.00_fp, hfex=HFEX)
    case ("B97-3")
      call functional%add_functional(XC_HYB_GGA_XC_B97_3, 1.00_fp, hfex=HFEX)
    case ("B97-K")
      call functional%add_functional(XC_HYB_GGA_XC_B97_K, 1.00_fp, hfex=HFEX)
    case ("MPWLYP1M")
      call functional%add_functional(XC_HYB_GGA_XC_MPWLYP1M, 1.00_fp, hfex=HFEX)
    case ("MPW1K")
      call functional%add_functional(XC_HYB_GGA_XC_MPW1K, 1.00_fp, hfex=HFEX)
    case ("MPW1PBE")
      call functional%add_functional(XC_HYB_GGA_XC_MPW1PBE, 1.00_fp, hfex=HFEX)
    case ("MPW1PW", "MPW1PW91")
      call functional%add_functional(XC_HYB_GGA_XC_MPW1PW, 1.00_fp, hfex=HFEX)
    case ("MPW1LYP")
      call functional%add_functional(XC_HYB_GGA_XC_MPW1LYP, 1.00_fp, hfex=HFEX)
    case ("MPW3PW", "MPW3PW91")
      call functional%add_functional(XC_HYB_GGA_XC_MPW3PW, 1.00_fp, hfex=HFEX)
    case ("MPW3LYP")
      call functional%add_functional(XC_HYB_GGA_XC_MPW3LYP, 1.00_fp, hfex=HFEX)
    case ("SOGGA11-X", "SOGGA11X")
      call functional%add_functional(XC_HYB_GGA_X_SOGGA11_X, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_GGA_C_SOGGA11_X, 1.00_fp)
    case ("QTP17")
      call functional%add_functional(XC_HYB_GGA_XC_QTP17, 1.00_fp, hfex=HFEX)
    case ("EDF2")
      call functional%add_functional(XC_HYB_GGA_XC_EDF2, 1.00_fp, hfex=HFEX)
    case ("HPBEINT")
      call functional%add_functional(XC_HYB_GGA_XC_HPBEINT, 1.00_fp, hfex=HFEX)
    case ("CAP0")
      call functional%add_functional(XC_HYB_GGA_XC_CAP0, 1.00_fp, hfex=HFEX)
    case ("WC04")
      call functional%add_functional(XC_HYB_GGA_XC_WC04, 1.00_fp, hfex=HFEX)
    case ("WP04")
      call functional%add_functional(XC_HYB_GGA_XC_WP04, 1.00_fp, hfex=HFEX)
    case ("WB97")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_WB97, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("WB97X")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_WB97X, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("WB97X-D")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_WB97X_D, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("HSE03")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_HSE03, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("HSE06")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_HSE06, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("HSE12")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_HSE12, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("HSE12-S")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_HSE12S, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("HSESOL")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_HSE_SOL, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("MCAM-B3LYP", "MCAMB3LYP")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_MCAM_B3LYP, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("CAM-B3LYP", "CAMB3LYP")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_CAM_B3LYP, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("CAMH-B3LYP", "CAMHB3LYP")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_CAMH_B3LYP, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("DTCAM-TUNE", "CDTCAMTUNE")  ! Use to tune HF exchange in DFT and TDDFT
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
            external_parameters=(/ dft_params%cam_alpha+dft_params%cam_beta, &
                                  -dft_params%cam_beta, &
                                   dft_params%cam_mu, &
                                   0.81_fp  /), &
            alpha=dft_params%cam_alpha, &
            beta=dft_params%cam_beta, &
            omega=dft_params%cam_mu)
      write(*,fmt='(3a)') "[2] W. Park, A. Lashkaripour, K. Komarov, S. Lee, M. Huix-Rotllant, ", &
            "and C. H. Choi, J. Chem. Theory Comput., 20(13), 5679-5694 (2024); ", &
            "DOI: 10.1021/acs.jctc.4c00640"
    case ("DTCAM-VAEE", "DTCAMVAEE")  ! see doi.org/10.1021/acs.jctc.4c00640
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
            external_parameters=(/ 0.30_fp,  0.20_fp, 0.33_fp, 0.81_fp  /), &
            alpha=dft_params%cam_alpha, & ! = 0.50
            beta=dft_params%cam_beta, &   ! =-0.20
            omega=dft_params%cam_mu)      ! = 0.33
      tddft_params%cam_alpha = 0.5_fp
      tddft_params%cam_beta = -0.1_fp
      tddft_params%cam_mu = dft_params%cam_mu
      tddft_params%spc_coco = 0.5_fp
      tddft_params%spc_ovov = 0.5_fp
      tddft_params%spc_coov = 0.5_fp
      write(*,fmt='(3a)') "[2] W. Park, A. Lashkaripour, K. Komarov, S. Lee, M. Huix-Rotllant, ", &
            "and C. H. Choi, J. Chem. Theory Comput., 20(13), 5679-5694 (2024); ", &
            "DOI: 10.1021/acs.jctc.4c00640"
    case ("DTCAM-XIV", "DTCAMXIV")  ! see doi.org/10.1021/acs.jctc.4c00640
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
            external_parameters=(/ 0.30_fp,  0.29_fp, 0.33_fp, 0.81_fp  /), &
            alpha=dft_params%cam_alpha, & ! = 0.59
            beta=dft_params%cam_beta, &   ! =-0.29
            omega=dft_params%cam_mu)      ! = 0.33
      tddft_params%cam_alpha = 0.50_fp
      tddft_params%cam_alpha = 0.10_fp
      tddft_params%cam_beta = 0.90_fp
      tddft_params%cam_mu = dft_params%cam_mu
      tddft_params%spc_coco = 0.50_fp
      tddft_params%spc_ovov = 0.50_fp
      tddft_params%spc_coov = 0.50_fp
      write(*,fmt='(3a)') "[2] W. Park, A. Lashkaripour, K. Komarov, S. Lee, M. Huix-Rotllant, ", &
            "and C. H. Choi, J. Chem. Theory Comput., 20(13), 5679-5694 (2024); ", &
            "DOI: 10.1021/acs.jctc.4c00640"
    case ("DTCAM-XI", "DTCAMXI")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
            external_parameters=(/ 1.02_fp, -0.52_fp, 0.33_fp, 0.81_fp  /), &
            alpha=dft_params%cam_alpha, & ! = 0.50
            beta=dft_params%cam_beta, &   ! = 0.52
            omega=dft_params%cam_mu)      ! = 0.33
      tddft_params%cam_alpha = 0.395_fp
      tddft_params%cam_beta = 0.425_fp
      tddft_params%cam_mu = dft_params%cam_mu
      tddft_params%spc_coco = 0.50_fp
      tddft_params%spc_ovov = 0.50_fp
      tddft_params%spc_coov = 0.50_fp
      write(*,fmt='(3a)') "[2] W. Park, A. Lashkaripour, K. Komarov, S. Lee, M. Huix-Rotllant, ", &
            "and C. H. Choi, J. Chem. Theory Comput., ??, ?? (2024); ", &
            "DOI: 10.1021/acs.jctc.4c00640"
    case ("DTCAM-AEE", "DTCAMAEE")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
            external_parameters=(/ 0.48_fp, -0.29_fp, 0.33_fp, 0.81_fp  /), &
            alpha=dft_params%cam_alpha, & ! = 0.19
            beta=dft_params%cam_beta, &   ! = 0.29
            omega=dft_params%cam_mu)      ! = 0.33
      tddft_params%cam_alpha = 0.15_fp
      tddft_params%cam_beta = 0.95_fp
      tddft_params%cam_mu = dft_params%cam_mu
      tddft_params%spc_coco = 0.50_fp
      tddft_params%spc_ovov = 0.50_fp
      tddft_params%spc_coov = 0.50_fp
      write(*,fmt='(3a)') "[2] K. Komarov, W. Park, S. Lee, M. Huix-Rotllant, ", &
            "and C. H. Choi, J. Chem. Theory Comput., 19, 7671-7684 (2023); ", &
            "DOI: 10.1021/acs.jctc.3c00884"
    case ("DTCAM-VEE", "DTCAMVEE")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
            external_parameters=(/ 0.48_fp, -0.29_fp, 0.33_fp, 0.81_fp  /), &
            alpha=dft_params%cam_alpha, & ! = 0.19
            beta=dft_params%cam_beta, &   ! = 0.29
            omega=dft_params%cam_mu)      ! = 0.33
      tddft_params%cam_alpha = 0.48_fp
      tddft_params%cam_beta =  0.00_fp
      tddft_params%cam_mu = dft_params%cam_mu
      tddft_params%spc_coco = 0.50_fp
      tddft_params%spc_ovov = 0.50_fp
      tddft_params%spc_coov = 0.50_fp
      write(*,fmt='(3a)') "[2] K. Komarov, W. Park, S. Lee, M. Huix-Rotllant, ", &
            "and C. H. Choi, J. Chem. Theory Comput., 19, 7671-7684 (2023); ", &
            "DOI: 10.1021/acs.jctc.3c00884"
    case ("DTCAM-STG", "DTCAMSTG")  
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
            external_parameters=(/ 0.24_fp,  0.24_fp, 0.33_fp, 0.81_fp  /), &
            alpha=dft_params%cam_alpha, & ! = 0.48
            beta=dft_params%cam_beta, &   ! =-0.24
            omega=dft_params%cam_mu)      ! = 0.33
      tddft_params%cam_alpha = 0.71_fp
      tddft_params%cam_beta = -0.1_fp
      tddft_params%cam_mu = dft_params%cam_mu
      tddft_params%spc_coco = 0.5_fp
      tddft_params%spc_ovov = 0.5_fp
      tddft_params%spc_coov = 0.5_fp
      write(*,fmt='(3a)') "[2] W. Park, A. Lashkaripour, K. Komarov, S. Lee, M. Huix-Rotllant, ", &
            "and C. H. Choi, J. Chem. Theory Comput., 20(13), 5679-5694 (2024); ", &
            "DOI: 10.1021/acs.jctc.4c00640"
    case ("RCAM-B3LYP", "RCAMB3LYP")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_RCAM_B3LYP, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("TUNCAM-B3LYP", "TUNEDCAM-B3LYP")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_TUNED_CAM_B3LYP, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("CAM-QTP00", "CAMQTP00", "CAM-QTP(00)", "CAM-QTP-00")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_CAM_QTP_00, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("CAM-QTP01", "CAMQTP01", "CAM-QTP(01)", "CAM-QTP-01")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_CAM_QTP_01, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("CAM-QTP02", "CAMQTP02", "CAM-QTP(02)", "CAM-QTP-02")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_CAM_QTP_02, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("CAM-PBEH") ! The energy of He in 3-21G basis set looks OK (-2.8610170571)
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_CAM_PBEH, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("LRC-WPBEH")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_LRC_WPBEH, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("LRC-WPBE")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_LRC_WPBE, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("LC-WPBE", "LCWPBE")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_LC_WPBE, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("WHPBE0")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_WHPBE0, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("N12-SX", "N12SX")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_X_N12_SX, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
      call functional%add_functional(XC_GGA_C_N12_SX, 1.00_fp)
    case ("LC-QTP")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_LC_QTP, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("LC-BLYP")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_GGA_XC_LC_BLYP, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
    case ("TPSSH")
      call functional%add_functional(XC_HYB_MGGA_XC_TPSSH, 1.00_fp, hfex=HFEX)
    case ("TPSS0")
      call functional%add_functional(XC_HYB_MGGA_XC_TPSS0, 1.00_fp, hfex=HFEX)
    case ("REVTPSSH")
      call functional%add_functional(XC_HYB_MGGA_XC_REVTPSSH, 1.00_fp, hfex=HFEX)
    case ("MS2H")
      call functional%add_functional(XC_HYB_MGGA_X_MS2H, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("MVSH")
      call functional%add_functional(XC_HYB_MGGA_X_MVSH, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp)
    case ("SCAN0")
      call functional%add_functional(XC_HYB_MGGA_X_SCAN0, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_SCAN, 1.00_fp)
    case ("REVSCAN0")
      call functional%add_functional(XC_HYB_MGGA_X_REVSCAN0, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_REVSCAN, 1.00_fp)
    case ("HYBTAUHCTH", "HYBTHCTH", "HYB-THCTH", "HYB-TAUHCTH", "THCTHHYB", "TAUHCTHHYB")
      call functional%add_functional(XC_HYB_MGGA_X_TAU_HCTH, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_GGA_C_HYB_TAU_HCTH, 1.00_fp)
    case ("BMK")
      call functional%add_functional(XC_HYB_MGGA_X_BMK, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_GGA_C_BMK, 1.00_fp)
    case ("DLDF")
      call functional%add_functional(XC_HYB_MGGA_X_DLDF, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_DLDF, 1.00_fp)
    case ("M05")
      call functional%add_functional(XC_HYB_MGGA_X_M05, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_M05, 1.00_fp)
    case ("M05-2X", "M052X")
      call functional%add_functional(XC_HYB_MGGA_X_M05_2X, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_M05_2X, 1.00_fp)
    case ("M06")
      call functional%add_functional(XC_HYB_MGGA_X_M06, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_M06, 1.00_fp)
    case ("REVM06")
      call functional%add_functional(XC_HYB_MGGA_X_REVM06, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_REVM06, 1.00_fp)
    case ("M06-2X", "M062X")
      call functional%add_functional(XC_HYB_MGGA_X_M06_2X, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_M06_2X, 1.00_fp)
    case ("M06-HF", "M06HF")
      call functional%add_functional(XC_HYB_MGGA_X_M06_HF, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_M06_HF, 1.00_fp)
    case ("M08-SO")
      call functional%add_functional(XC_HYB_MGGA_X_M08_SO, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_M08_SO, 1.00_fp)
    case ("M08-HX")
      call functional%add_functional(XC_HYB_MGGA_X_M08_HX, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_M08_HX, 1.00_fp)
    case ("MN15")
      call functional%add_functional(XC_HYB_MGGA_X_MN15, 1.00_fp, hfex=HFEX)
      call functional%add_functional(XC_MGGA_C_MN15, 1.00_fp)
    case ("PW86BC95", "PW86B95")
      call functional%add_functional(XC_HYB_MGGA_XC_PW86B95, 1.00_fp, hfex=HFEX)
    case ("BB1K")
      call functional%add_functional(XC_HYB_MGGA_XC_BB1K, 1.00_fp, hfex=HFEX)
    case ("MPW1BC95", "MPW1B95")
      call functional%add_functional(XC_HYB_MGGA_XC_MPW1B95, 1.00_fp, hfex=HFEX)
    case ("MPW1B1K")
      call functional%add_functional(XC_HYB_MGGA_XC_MPWB1K, 1.00_fp, hfex=HFEX)
    case ("PW6BC95", "PW6B95")
      call functional%add_functional(XC_HYB_MGGA_XC_PW6B95, 1.00_fp, hfex=HFEX)
    case ("PWB6K")
      call functional%add_functional(XC_HYB_MGGA_XC_PWB6K, 1.00_fp, hfex=HFEX)
    case ("MPW1KCIS")
      call functional%add_functional(XC_HYB_MGGA_XC_MPW1KCIS, 1.00_fp, hfex=HFEX)
    case ("MPWKCIS1K")
      call functional%add_functional(XC_HYB_MGGA_XC_MPWKCIS1K, 1.00_fp, hfex=HFEX)
    case ("B0KCIS")
      call functional%add_functional(XC_HYB_MGGA_XC_B0KCIS, 1.00_fp, hfex=HFEX)
    case ("PBE1KCIS")
      call functional%add_functional(XC_HYB_MGGA_XC_PBE1KCIS, 1.00_fp, hfex=HFEX)
    case ("TPSS1KCIS")
      call functional%add_functional(XC_HYB_MGGA_XC_TPSS1KCIS, 1.00_fp, hfex=HFEX)
    case ("X1BC95", "X1B95")
      call functional%add_functional(XC_HYB_MGGA_XC_X1B95, 1.00_fp, hfex=HFEX)
    case ("XB1K")
      call functional%add_functional(XC_HYB_MGGA_XC_XB1K, 1.00_fp, hfex=HFEX)
    case ("B88BC95", "BBC95", "B88B95", "BB95")
      call functional%add_functional(XC_HYB_MGGA_XC_B88B95, 1.00_fp, hfex=HFEX)
    case ("B86BC95", "B86B95")
      call functional%add_functional(XC_HYB_MGGA_XC_B86B95, 1.00_fp, hfex=HFEX)
    case ("M06-SX", "M06SX")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_MGGA_X_M06_SX, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
      call functional%add_functional(XC_MGGA_C_M06_SX, 1.00_fp)
    case ("M11")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_MGGA_X_M11, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
      call functional%add_functional(XC_MGGA_C_M11, 1.00_fp)
    case ("REVM11")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_MGGA_X_REVM11, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
      call functional%add_functional(XC_MGGA_C_REVM11, 1.00_fp)
    case ("MN12-SX", "MN12SX")
      dft_params%cam_flag = .true.
      call functional%add_functional(XC_HYB_MGGA_X_MN12_SX, 1.00_fp, &
              alpha=dft_params%cam_alpha, &
              beta=dft_params%cam_beta, &
              omega=dft_params%cam_mu)
      call functional%add_functional(XC_MGGA_C_MN12_SX, 1.00_fp)
    case ("PBE0-DH")
      dft_params%dh_flag = .true.
      HFEX = 0.5_fp
      MP2 = 0.128_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_PBE, 1.00_fp-HFEX)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp-MP2)
    case ("TPSS0-DH")
      dft_params%dh_flag = .true.
      HFEX = 0.5_fp
      MP2 = 0.128_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_MGGA_X_TPSS, 1.00_fp-HFEX)
      call functional%add_functional(XC_MGGA_C_TPSS, 1.00_fp-MP2)
    case ("SCAN0-DH")
      dft_params%dh_flag = .true.
      HFEX = 0.5_fp
      MP2 = 0.128_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_MGGA_X_SCAN, 1.00_fp-HFEX)
      call functional%add_functional(XC_MGGA_C_SCAN, 1.00_fp-MP2)
    case ("PBE-QIDH")
      dft_params%dh_flag = .true.
      HFEX = 0.693391_fp
      MP2 = 0.128_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_PBE, 1.00_fp-HFEX)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp-MP2)
    case ("TPSS-QIDH")
      dft_params%dh_flag = .true.
      HFEX = 0.693391_fp
      MP2 = 0.128_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_MGGA_X_TPSS, 1.00_fp-HFEX)
      call functional%add_functional(XC_MGGA_C_TPSS, 1.00_fp-MP2)
    case ("SCAN-QIDH")
      dft_params%dh_flag = .true.
      HFEX = 0.693391_fp
      MP2 = 0.128_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_MGGA_X_SCAN, 1.00_fp-HFEX)
      call functional%add_functional(XC_MGGA_C_SCAN, 1.00_fp-MP2)
    case ("PBE0-2")
      dft_params%dh_flag = .true.
      HFEX = 0.793701_fp
      MP2 = 0.5_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_PBE, 1.00_fp-HFEX)
      call functional%add_functional(XC_GGA_C_PBE, 1.00_fp-MP2)
    case ("TPSS0-2")
      dft_params%dh_flag = .true.
      HFEX = 0.793701_fp
      MP2 = 0.5_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_MGGA_X_TPSS, 1.00_fp-HFEX)
      call functional%add_functional(XC_MGGA_C_TPSS, 1.00_fp-MP2)
    case ("SCAN0-2")
      dft_params%dh_flag = .true.
      HFEX = 0.793701_fp
      MP2 = 0.5_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_MGGA_X_SCAN, 1.00_fp-HFEX)
      call functional%add_functional(XC_MGGA_C_SCAN, 1.00_fp-MP2)
    case ("B2-PLYP", "B2PLYP")
      dft_params%dh_flag = .true.
      HFEX = 0.53_fp
      MP2 = 0.27_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_B88, 1.00_fp-HFEX) !Becke88
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp-MP2) !Lee-Yang-Parr
    case ("B2GP-PLYP", "B2GPPLYP")
      dft_params%dh_flag = .true.
      HFEX = 0.65_fp
      MP2 = 0.36_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_B88, 1.00_fp-HFEX) !Becke88
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp-MP2) !Lee-Yang-Parr
    case ("B2T-PLYP", "B2TPLYP")
      dft_params%dh_flag = .true.
      HFEX = 0.60_fp
      MP2 = 0.31_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_B88, 1.00_fp-HFEX) !Becke88
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp-MP2) !Lee-Yang-Parr
    case ("B2K-PLYP", "B2KPLYP")
      dft_params%dh_flag = .true.
      HFEX = 0.42_fp
      MP2 = 0.72_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_B88, 1.00_fp-HFEX) !Becke88
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp-MP2) !Lee-Yang-Parr
    case ("MPW2-PLYP", "MPW2PLYP")
      dft_params%dh_flag = .true.
      HFEX = 0.53_fp
      MP2 = 0.27_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_MPW91, 1.00_fp-HFEX) !mPW91
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp-MP2) !Lee-Yang-Parr
    case ("MPWK-PLYP", "MPWKPLYP")
      dft_params%dh_flag = .true.
      HFEX = 0.42_fp
      MP2 = 0.72_fp
      chf = HFEX
      c2same = MP2
      c2opp = MP2
      call functional%add_functional(XC_GGA_X_MPW91, 1.00_fp-HFEX) !mPW91
      call functional%add_functional(XC_GGA_C_LYP, 1.00_fp-MP2) !Lee-Yang-Parr
    case default
      !It will be good, if someone write procedure for parsing of functional names, like PBE-1-PBE or PBE-0 or S+PBE-3-LYP+VWN-RPA
      call show_message("Unrecognized functional name: "//funcname)
      call show_message("Please, check the documentation about this functional or")
      call show_message(" implement it to LibXC [https://gitlab.com/libxc/libxc],")
      call show_message("   and, then, to OQP-LibXC interface")
      call show_message(ABORTING, WITH_ABORT)
    end select
    ! No one of functionals was not selected
    if (.not. functional%can_calculate() .and. funcname /= "HFEX") then
      call show_message("No one functional was not selected!")
      call show_message("Please, check the input!")
      call show_message(ABORTING, WITH_ABORT)
    end if
    dft_params%HFScale = HFEX
    dft_params%MP2SS_Scale = c2opp
    dft_params%MP2OS_Scale = c2same
    ! Print information about non-local part of functionals
    call show_message(" ")
    if (.not. dft_params%cam_flag) then
      call show_message("(A,ES16.8E2)", "The global hybrid part:                ", dft_params%HFScale)
    else
      call show_message("CAM-corrected functional is called")
      call show_message("Yanai's notation of CAM parameters is used")
      call show_message("(A,ES16.8E2)", "The global hybrid part:                ", dft_params%cam_alpha)
      call show_message("(A,ES16.8E2)", "Additional long-range hybrid part:     ", dft_params%cam_beta)
      call show_message("(A,ES16.8E2)", "Range-saparated factor:                ", dft_params%cam_mu)
    end if
    if (dft_params%dh_flag) then
      call show_message(" ")
      call show_message("Double-hybrid functional is called")
      call show_message("(A,ES16.8E2)", "Same-spin MP2 correlation factor:      ", dft_params%MP2SS_Scale)
      call show_message("(A,ES16.8E2)", "Opposite-spin MP2 correlation factor:  ", dft_params%MP2OS_Scale)
    end if
    call show_message(" ")
  end subroutine libxc_input