mqc_finite_differences Module

Provides utilities for generating perturbed geometries and computing numerical derivatives via finite differences (gradients, Hessians, etc.) Generate forward/backward displacements Container for displaced geometry Compute Hessian from gradient differences Compute dipole derivatives from dipole differences Copy and displace geometry Re-export for backward compatibility


Uses

  • module~~mqc_finite_differences~~UsesGraph module~mqc_finite_differences mqc_finite_differences module~mqc_calculation_defaults mqc_calculation_defaults module~mqc_finite_differences->module~mqc_calculation_defaults module~mqc_physical_fragment mqc_physical_fragment module~mqc_finite_differences->module~mqc_physical_fragment pic_types pic_types module~mqc_finite_differences->pic_types module~mqc_calculation_defaults->pic_types 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_error mqc_error module~mqc_physical_fragment->module~mqc_error 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_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->pic_types module~mqc_xyz_reader->module~mqc_error module~mqc_xyz_reader->module~mqc_geometry

Used by

  • module~~mqc_finite_differences~~UsedByGraph module~mqc_finite_differences mqc_finite_differences proc~hessian_coordinator hessian_coordinator proc~hessian_coordinator->module~mqc_finite_differences proc~hessian_worker hessian_worker proc~hessian_worker->module~mqc_finite_differences proc~xtb_calc_hessian xtb_method_t%xtb_calc_hessian proc~xtb_calc_hessian->module~mqc_finite_differences

Derived Types

type, public ::  displaced_geometry_t

Container for a single displaced geometry

Components

Type Visibility Attributes Name Initial
integer, public :: atom_index

Which atom was displaced (1-based)

integer, public :: coordinate

Which coordinate was displaced (1=x, 2=y, 3=z)

integer, public :: direction

+1 for forward, -1 for backward

real(kind=dp), public :: displacement

Displacement magnitude in Bohr

type(physical_fragment_t), public :: geometry

The displaced geometry

Type-Bound Procedures

procedure, public :: destroy => displaced_geometry_destroy

Subroutines

public subroutine copy_and_displace_geometry(reference_geom, atom_idx, coord_idx, displacement, displaced_geom)

Create a copy of reference geometry with one coordinate displaced

Read more…

Arguments

Type IntentOptional Attributes Name
type(physical_fragment_t), intent(in) :: reference_geom
integer, intent(in) :: atom_idx
integer, intent(in) :: coord_idx
real(kind=dp), intent(in) :: displacement
type(physical_fragment_t), intent(out) :: displaced_geom

public subroutine finite_diff_dipole_derivatives(n_atoms, forward_dipoles, backward_dipoles, displacement, dipole_derivatives)

Compute dipole moment derivatives via central finite differences

Read more…

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: n_atoms
real(kind=dp), intent(in) :: forward_dipoles(:,:)

(3*n_atoms, 3)

real(kind=dp), intent(in) :: backward_dipoles(:,:)

(3*n_atoms, 3)

real(kind=dp), intent(in) :: displacement
real(kind=dp), intent(out), allocatable :: dipole_derivatives(:,:)

(3, 3*n_atoms)

public subroutine finite_diff_hessian_from_gradients(reference_geom, forward_gradients, backward_gradients, displacement, hessian)

Compute Hessian matrix from finite differences of gradients

Read more…

Arguments

Type IntentOptional Attributes Name
type(physical_fragment_t), intent(in) :: reference_geom
real(kind=dp), intent(in) :: forward_gradients(:,:,:)

(n_displacements, 3, n_atoms)

real(kind=dp), intent(in) :: backward_gradients(:,:,:)

(n_displacements, 3, n_atoms)

real(kind=dp), intent(in) :: displacement
real(kind=dp), intent(out), allocatable :: hessian(:,:)

(3n_atoms, 3n_atoms)

public subroutine generate_perturbed_geometries(reference_geom, displacement, forward_geoms, backward_geoms)

Generate all forward and backward displaced geometries for finite difference calculations

Read more…

Arguments

Type IntentOptional Attributes Name
type(physical_fragment_t), intent(in) :: reference_geom
real(kind=dp), intent(in) :: displacement
type(displaced_geometry_t), intent(out), allocatable :: forward_geoms(:)
type(displaced_geometry_t), intent(out), allocatable :: backward_geoms(:)

private subroutine displaced_geometry_destroy(this)

Clean up memory for displaced geometry

Arguments

Type IntentOptional Attributes Name
class(displaced_geometry_t), intent(inout) :: this