diff --git a/src/input_cp2k_xc.F b/src/input_cp2k_xc.F index a4960aa419..910545240b 100644 --- a/src/input_cp2k_xc.F +++ b/src/input_cp2k_xc.F @@ -995,10 +995,10 @@ CONTAINS CALL keyword_release(keyword) CALL keyword_create(keyword, __LOCATION__, name="REFERENCE_FUNCTIONAL", & description="Use parameters for this specific density functional. "// & + "For available DFT-D4 functionals and parameters see: "// & + ". "// & "For available D3 and D3(BJ) parameters see: "// & - ". "// & - "For the defintion of D4 parameters see: "// & - ".", & + ".", & usage="REFERENCE_FUNCTIONAL ", & type_of_var=char_t) CALL section_add_keyword(subsection, keyword) diff --git a/src/qs_dispersion_d4.F b/src/qs_dispersion_d4.F index de0250f32f..dcf321e4f0 100644 --- a/src/qs_dispersion_d4.F +++ b/src/qs_dispersion_d4.F @@ -258,6 +258,9 @@ CONTAINS IF (dispersion_env%ref_functional == "none") THEN CALL get_rational_damping("pbe", param, s9=0.0_dp) + IF (.NOT. ALLOCATED(param)) THEN + CPABORT("D4: Failed to get rational damping parameters for default functional") + END IF SELECT TYPE (param) TYPE is (rational_damping_param) param%s6 = dispersion_env%s6 @@ -268,6 +271,9 @@ CONTAINS END SELECT ELSE CALL get_rational_damping(dispersion_env%ref_functional, param, s9=dispersion_env%s9) + IF (.NOT. ALLOCATED(param)) THEN + CPABORT("D4: Unknown reference functional '"//TRIM(dispersion_env%ref_functional)//"'") + END IF SELECT TYPE (param) TYPE is (rational_damping_param) dispersion_env%s6 = param%s6 diff --git a/src/qs_dispersion_utils.F b/src/qs_dispersion_utils.F index 72c75d9108..24a1fa41fc 100644 --- a/src/qs_dispersion_utils.F +++ b/src/qs_dispersion_utils.F @@ -166,6 +166,7 @@ CONTAINS dispersion_env%s6 = 0._dp dispersion_env%sr6 = 0._dp dispersion_env%s8 = 0._dp + dispersion_env%s9 = 0._dp dispersion_env%a1 = 0._dp dispersion_env%a2 = 0._dp dispersion_env%eps_cn = 0._dp @@ -175,7 +176,7 @@ CONTAINS IF (.NOT. explicit) THEN CALL section_vals_val_get(pp_section, "REFERENCE_FUNCTIONAL", explicit=exfun) IF (.NOT. exfun) THEN - CPABORT("D4 vdW REFERENCE_FUNCTIONAL or D4_SCALING expected") + CPABORT("Missing REFERENCE_FUNCTIONAL or D4_SCALING for D4") ELSE CALL section_vals_val_get(vdw_section, & "PAIR_POTENTIAL%REFERENCE_FUNCTIONAL", & @@ -190,6 +191,9 @@ CONTAINS dispersion_env%sr6 = 0.0_dp dispersion_env%ref_functional = "none" END IF + IF (TRIM(ADJUSTL(dispersion_env%ref_functional)) == "none") THEN + CPABORT("Missing REFERENCE_FUNCTIONAL or D4_SCALING for D4") + END IF CALL section_vals_val_get(pp_section, "EPS_CN", r_val=dispersion_env%eps_cn) CALL section_vals_val_get(pp_section, "D4_REFERENCE_CODE", & l_val=dispersion_env%d4_reference_code)