mqc_method_xtb Module

Provides GFN1-xTB and GFN2-xTB methods via the tblite library, implementing the abstract method interface for energy and gradient calculations. XTB method implementation type


Uses

  • module~~mqc_method_xtb~~UsesGraph module~mqc_method_xtb mqc_method_xtb mctc_env mctc_env module~mqc_method_xtb->mctc_env mctc_io mctc_io module~mqc_method_xtb->mctc_io module~mqc_error mqc_error module~mqc_method_xtb->module~mqc_error module~mqc_method_base mqc_method_base module~mqc_method_xtb->module~mqc_method_base module~mqc_physical_fragment mqc_physical_fragment module~mqc_method_xtb->module~mqc_physical_fragment module~mqc_result_types mqc_result_types module~mqc_method_xtb->module~mqc_result_types pic_logger pic_logger module~mqc_method_xtb->pic_logger pic_timer pic_timer module~mqc_method_xtb->pic_timer pic_types pic_types module~mqc_method_xtb->pic_types tblite_container tblite_container module~mqc_method_xtb->tblite_container tblite_context_type tblite_context_type module~mqc_method_xtb->tblite_context_type tblite_solvation tblite_solvation module~mqc_method_xtb->tblite_solvation tblite_wavefunction tblite_wavefunction module~mqc_method_xtb->tblite_wavefunction tblite_xtb_calculator tblite_xtb_calculator module~mqc_method_xtb->tblite_xtb_calculator tblite_xtb_gfn1 tblite_xtb_gfn1 module~mqc_method_xtb->tblite_xtb_gfn1 tblite_xtb_gfn2 tblite_xtb_gfn2 module~mqc_method_xtb->tblite_xtb_gfn2 tblite_xtb_singlepoint tblite_xtb_singlepoint module~mqc_method_xtb->tblite_xtb_singlepoint module~mqc_method_base->module~mqc_physical_fragment module~mqc_method_base->module~mqc_result_types module~mqc_method_base->pic_types module~mqc_physical_fragment->module~mqc_error module~mqc_physical_fragment->pic_types module~mqc_cgto mqc_cgto module~mqc_physical_fragment->module~mqc_cgto module~mqc_elements mqc_elements module~mqc_physical_fragment->module~mqc_elements module~mqc_geometry mqc_geometry module~mqc_physical_fragment->module~mqc_geometry module~mqc_physical_constants mqc_physical_constants module~mqc_physical_fragment->module~mqc_physical_constants module~mqc_xyz_reader mqc_xyz_reader module~mqc_physical_fragment->module~mqc_xyz_reader module~mqc_result_types->module~mqc_error module~mqc_result_types->pic_types pic_mpi_lib pic_mpi_lib module~mqc_result_types->pic_mpi_lib module~mqc_cgto->pic_types module~mqc_elements->pic_types pic_ascii pic_ascii module~mqc_elements->pic_ascii module~mqc_geometry->pic_types module~mqc_physical_constants->pic_types module~mqc_xyz_reader->module~mqc_error module~mqc_xyz_reader->pic_types module~mqc_xyz_reader->module~mqc_geometry

Used by

  • module~~mqc_method_xtb~~UsedByGraph module~mqc_method_xtb mqc_method_xtb module~mqc_method_factory mqc_method_factory module~mqc_method_factory->module~mqc_method_xtb module~mqc_mbe_fragment_distribution_scheme mqc_mbe_fragment_distribution_scheme module~mqc_mbe_fragment_distribution_scheme->module~mqc_method_factory proc~hessian_coordinator hessian_coordinator proc~hessian_coordinator->module~mqc_method_factory proc~hessian_worker hessian_worker proc~hessian_worker->module~mqc_method_factory module~mpi_fragment_work_smod mpi_fragment_work_smod module~mpi_fragment_work_smod->module~mqc_mbe_fragment_distribution_scheme module~mqc_driver mqc_driver module~mqc_driver->module~mqc_mbe_fragment_distribution_scheme module~mqc_gmbe_fragment_distribution_scheme mqc_gmbe_fragment_distribution_scheme module~mqc_gmbe_fragment_distribution_scheme->module~mqc_mbe_fragment_distribution_scheme module~mqc_hessian_distribution_scheme mqc_hessian_distribution_scheme module~mqc_hessian_distribution_scheme->module~mqc_mbe_fragment_distribution_scheme module~mqc_serial_fragment_processor mqc_serial_fragment_processor module~mqc_serial_fragment_processor->module~mqc_mbe_fragment_distribution_scheme module~mqc_unfragmented_workflow mqc_unfragmented_workflow module~mqc_unfragmented_workflow->module~mqc_mbe_fragment_distribution_scheme proc~gmbe_run_distributed gmbe_context_t%gmbe_run_distributed proc~gmbe_run_distributed->module~mqc_mbe_fragment_distribution_scheme proc~gmbe_run_distributed->module~mqc_gmbe_fragment_distribution_scheme proc~mbe_run_distributed mbe_context_t%mbe_run_distributed proc~mbe_run_distributed->module~mqc_mbe_fragment_distribution_scheme proc~mbe_run_serial mbe_context_t%mbe_run_serial proc~mbe_run_serial->module~mqc_mbe_fragment_distribution_scheme proc~compute_energy_and_forces compute_energy_and_forces proc~compute_energy_and_forces->module~mqc_driver proc~gmbe_run_serial gmbe_context_t%gmbe_run_serial proc~gmbe_run_serial->module~mqc_gmbe_fragment_distribution_scheme program~main main program~main->module~mqc_driver

Derived Types

type, public, extends(qc_method_t) ::  xtb_method_t

Extended Tight-Binding (xTB) method implementation

Read more…

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: accuracy = 0.01_wp

Numerical accuracy parameter

integer, public :: cpcm_nang = 110

Number of angular points for CPCM cavity

real(kind=wp), public :: cpcm_rscale = 1.0_wp

Radii scaling for CPCM cavity

real(kind=wp), public :: dielectric = -1.0_wp

Direct dielectric constant (-1 = use solvent lookup)

real(kind=wp), public :: kt = 300.0_wp*3.166808578545117e-06_wp

Electronic temperature (300 K)

character(len=:), public, allocatable :: solvation_model

“alpb” (default), “gbsa”, or “cpcm”

character(len=:), public, allocatable :: solvent

Solvent name: “water”, “ethanol”, etc.

logical, public :: use_cds = .true.

Include non-polar CDS terms (not for CPCM)

logical, public :: use_shift = .true.

Include solution state shift (not for CPCM)

character(len=:), public, allocatable :: variant

XTB variant: “gfn1” or “gfn2”

logical, public :: verbose = .false.

Print calculation details

Type-Bound Procedures

procedure, public :: calc_energy => xtb_calc_energy

Energy-only calculation

procedure, public :: calc_gradient => xtb_calc_gradient

Energy + gradient calculation

procedure, public :: calc_hessian => xtb_calc_hessian

Placeholder for Hessian calculation


Functions

private pure function get_solvent_dielectric(solvent_name) result(eps)

Get dielectric constant for a named solvent

Read more…

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: solvent_name

Return Value real(kind=wp)


Subroutines

private subroutine add_solvation_to_calc(calc, mol, solvent, solvation_model, method, use_cds, use_shift, dielectric, cpcm_nang, cpcm_rscale, error)

Add implicit solvation model to XTB calculator

Read more…

Arguments

Type IntentOptional Attributes Name
type(xtb_calculator), intent(inout) :: calc
type(structure_type), intent(in) :: mol
character(len=*), intent(in) :: solvent

Solvent name (can be empty if dielectric > 0)

character(len=*), intent(in) :: solvation_model

“alpb”, “gbsa”, or “cpcm”

character(len=*), intent(in) :: method

“gfn1” or “gfn2”

logical, intent(in) :: use_cds
logical, intent(in) :: use_shift
real(kind=wp), intent(in) :: dielectric

Direct dielectric constant (-1 = use solvent lookup)

integer, intent(in) :: cpcm_nang

Angular grid points for CPCM

real(kind=wp), intent(in) :: cpcm_rscale

Radii scaling for CPCM

type(error_type), intent(out), allocatable :: error

private subroutine xtb_calc_energy(this, fragment, result)

Calculate electronic energy using Extended Tight-Binding (xTB) method

Arguments

Type IntentOptional Attributes Name
class(xtb_method_t), intent(in) :: this
type(physical_fragment_t), intent(in) :: fragment
type(calculation_result_t), intent(out) :: result

private subroutine xtb_calc_gradient(this, fragment, result)

Calculate energy gradient using Extended Tight-Binding (xTB) method

Arguments

Type IntentOptional Attributes Name
class(xtb_method_t), intent(in) :: this
type(physical_fragment_t), intent(in) :: fragment
type(calculation_result_t), intent(out) :: result

private subroutine xtb_calc_hessian(this, fragment, result)

Calculate Hessian using finite differences of gradients

Read more…

Arguments

Type IntentOptional Attributes Name
class(xtb_method_t), intent(in) :: this
type(physical_fragment_t), intent(in) :: fragment
type(calculation_result_t), intent(out) :: result