mod_hirshfeld_vdw
Lines: 226 |
Visibility: private
Dispersion correction module based on method by Tkatchenko and Scheffler (PRL 102, 073005 (2009))
and implementation of Muhli et al. (PHYSICAL REVIEW B 104, 054106 (2021)).
author: Knut Nikolas Lausch
Dependencies
Uses
module~~mod_hirshfeld_vdw~~UsesGraph
module~mod_hirshfeld_vdw
mod_hirshfeld_vdw
module~mod_feature_map_neighborlist
mod_feature_map_neighborlist
module~mod_hirshfeld_vdw->module~mod_feature_map_neighborlist
module~mod_io
mod_io
module~mod_hirshfeld_vdw->module~mod_io
module~mod_mpi
mod_mpi
module~mod_hirshfeld_vdw->module~mod_mpi
module~mod_periodic_table
mod_periodic_table
module~mod_hirshfeld_vdw->module~mod_periodic_table
module~mod_precision
mod_precision
module~mod_hirshfeld_vdw->module~mod_precision
module~mod_throw
mod_throw
module~mod_hirshfeld_vdw->module~mod_throw
module~mod_feature_map_neighborlist->module~mod_io
module~mod_feature_map_neighborlist->module~mod_mpi
module~mod_feature_map_neighborlist->module~mod_precision
module~mod_feature_map_neighborlist->module~mod_throw
module~mod_abstract_cutoff_function
mod_abstract_cutoff_function
module~mod_feature_map_neighborlist->module~mod_abstract_cutoff_function
module~mod_constants
mod_constants
module~mod_feature_map_neighborlist->module~mod_constants
module~mod_neighborlist
mod_neighborlist
module~mod_feature_map_neighborlist->module~mod_neighborlist
module~mod_structures
mod_structures
module~mod_feature_map_neighborlist->module~mod_structures
module~mod_timer
mod_timer
module~mod_feature_map_neighborlist->module~mod_timer
module~mod_io->module~mod_precision
iso_fortran_env
iso_fortran_env
module~mod_io->iso_fortran_env
module~mod_optional_args
mod_optional_args
module~mod_io->module~mod_optional_args
module~mod_mpi->module~mod_precision
mpi_f08
mpi_f08
module~mod_mpi->mpi_f08
module~mod_periodic_table->module~mod_io
module~mod_periodic_table->module~mod_precision
module~mod_periodic_table->module~mod_throw
module~mod_array_helpers
mod_array_helpers
module~mod_periodic_table->module~mod_array_helpers
module~mod_periodic_table->module~mod_constants
iso_c_binding
iso_c_binding
module~mod_precision->iso_c_binding
module~mod_precision->iso_fortran_env
module~mod_throw->module~mod_io
module~mod_throw->module~mod_mpi
module~mod_throw->module~mod_precision
module~mod_throw->iso_c_binding
module~mod_throw->iso_fortran_env
module~mod_sort
mod_sort
module~mod_throw->module~mod_sort
module~mod_abstract_cutoff_function->module~mod_precision
module~mod_array_helpers->module~mod_precision
module~mod_array_helpers->module~mod_throw
module~mod_constants->module~mod_precision
module~mod_constants->iso_c_binding
module~mod_neighborlist->module~mod_io
module~mod_neighborlist->module~mod_mpi
module~mod_neighborlist->module~mod_precision
module~mod_neighborlist->module~mod_throw
module~mod_neighborlist->module~mod_structures
module~mod_dynamic_double_array
mod_dynamic_double_array
module~mod_neighborlist->module~mod_dynamic_double_array
module~mod_dynamic_int_array
mod_dynamic_int_array
module~mod_neighborlist->module~mod_dynamic_int_array
module~mod_neighbor_grid
mod_neighbor_grid
module~mod_neighborlist->module~mod_neighbor_grid
module~mod_neighborlist_helper
mod_neighborlist_helper
module~mod_neighborlist->module~mod_neighborlist_helper
module~mod_settings
mod_settings
module~mod_neighborlist->module~mod_settings
module~mod_sort->module~mod_precision
module~mod_structures->module~mod_mpi
module~mod_structures->module~mod_periodic_table
module~mod_structures->module~mod_precision
module~mod_structures->module~mod_throw
module~mod_structures->module~mod_array_helpers
module~mod_structures->module~mod_constants
module~mod_linalg
mod_linalg
module~mod_structures->module~mod_linalg
module~mod_structures_helper
mod_structures_helper
module~mod_structures->module~mod_structures_helper
module~mod_timer->module~mod_io
module~mod_timer->module~mod_precision
module~mod_timer->module~mod_throw
module~mod_timer->module~mod_optional_args
ieee_arithmetic
ieee_arithmetic
module~mod_timer->ieee_arithmetic
module~mod_dynamic_double_array->module~mod_precision
module~mod_dynamic_double_array->module~mod_throw
module~mod_linalg->module~mod_precision
module~mod_linalg->module~mod_throw
module~mod_linalg->module~mod_settings
module~cublas_wrapper
cublas_wrapper
module~mod_linalg->module~cublas_wrapper
module~mod_neighbor_grid->module~mod_mpi
module~mod_neighbor_grid->module~mod_precision
module~mod_neighbor_grid->module~mod_dynamic_int_array
module~mod_neighbor_grid->module~mod_neighborlist_helper
module~mod_neighbor_grid->module~mod_structures_helper
module~mod_neighborlist_helper->module~mod_mpi
module~mod_neighborlist_helper->module~mod_precision
module~mod_neighborlist_helper->module~mod_linalg
module~mod_settings->module~mod_io
module~mod_settings->module~mod_periodic_table
module~mod_settings->module~mod_precision
module~mod_settings->module~mod_throw
module~mod_settings->module~mod_constants
module~mod_cpu_vendor
mod_cpu_vendor
module~mod_settings->module~mod_cpu_vendor
module~mod_structures_helper->module~mod_precision
module~mod_structures_helper->module~mod_linalg
module~cublas_wrapper->iso_c_binding
module~cublas_wrapper->module~mod_settings
module~mod_cpu_vendor->iso_c_binding
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Used By
module~~mod_hirshfeld_vdw~~UsedByGraph
module~mod_hirshfeld_vdw
mod_hirshfeld_vdw
module~mod_initialize
mod_initialize
module~mod_initialize->module~mod_hirshfeld_vdw
module~mod_post_processing_vdw_hirshfeld_single_structure
mod_post_processing_vdw_hirshfeld_single_structure
module~mod_post_processing_vdw_hirshfeld_single_structure->module~mod_hirshfeld_vdw
module~mod_post_processing_wrapper_single_structure
mod_post_processing_wrapper_single_structure
module~mod_post_processing_wrapper_single_structure->module~mod_hirshfeld_vdw
module~mod_post_processing_wrapper_single_structure->module~mod_post_processing_vdw_hirshfeld_single_structure
module~mod_predict_all_chunks
mod_predict_all_chunks
module~mod_predict_all_chunks->module~mod_hirshfeld_vdw
module~mod_predict_multiple_structures
mod_predict_multiple_structures
module~mod_predict_all_chunks->module~mod_predict_multiple_structures
module~mod_predict_mode
mod_predict_mode
module~mod_predict_mode->module~mod_hirshfeld_vdw
module~mod_predict_mode->module~mod_initialize
module~mod_predict_mode->module~mod_predict_multiple_structures
module~mod_write_outfiles
mod_write_outfiles
module~mod_predict_mode->module~mod_write_outfiles
module~mod_predict_multiple_structures->module~mod_hirshfeld_vdw
module~mod_predict_multiple_structures->module~mod_post_processing_wrapper_single_structure
module~mod_predict_single_structure
mod_predict_single_structure
module~mod_predict_single_structure->module~mod_hirshfeld_vdw
module~mod_predict_single_structure->module~mod_post_processing_wrapper_single_structure
module~mod_runner_interface
mod_runner_interface
module~mod_runner_interface->module~mod_hirshfeld_vdw
module~mod_runner_interface_bindings
mod_runner_interface_bindings
module~mod_runner_interface_bindings->module~mod_hirshfeld_vdw
module~mod_runner_interface_bindings->module~mod_initialize
module~mod_runner_interface_bindings->module~mod_post_processing_vdw_hirshfeld_single_structure
module~mod_runner_interface_bindings->module~mod_runner_interface
program~runner
RuNNer
program~runner->module~mod_hirshfeld_vdw
program~runner->module~mod_initialize
program~runner->module~mod_predict_mode
module~mod_train_mode
mod_train_mode
program~runner->module~mod_train_mode
module~mod_feature_calc_interface
mod_feature_calc_interface
module~mod_feature_calc_interface->module~mod_runner_interface
module~mod_generic_interface
mod_generic_interface
module~mod_feature_calc_interface->module~mod_generic_interface
module~mod_generic_interface->module~mod_predict_single_structure
module~mod_generic_interface->module~mod_runner_interface
module~mod_lammps_interface
mod_lammps_interface
module~mod_lammps_interface->module~mod_runner_interface
module~mod_lammps_interface->module~mod_runner_interface_bindings
module~mod_output_files_and_cost
mod_output_files_and_cost
module~mod_output_files_and_cost->module~mod_predict_multiple_structures
module~mod_cost_calculator
mod_cost_calculator
module~mod_output_files_and_cost->module~mod_cost_calculator
module~mod_train_energy_multiple_structures
mod_train_energy_multiple_structures
module~mod_train_energy_multiple_structures->module~mod_initialize
module~mod_train_forces_multiple_structures
mod_train_forces_multiple_structures
module~mod_train_forces_multiple_structures->module~mod_initialize
module~mod_train_forces_multiple_structures->module~mod_train_energy_multiple_structures
module~mod_train_loop_4g_charges
mod_train_loop_4g_charges
module~mod_train_loop_4g_charges->module~mod_initialize
module~mod_train_loop_4g_charges->module~mod_cost_calculator
module~mod_output_files_and_cost_4g_charges
mod_output_files_and_cost_4g_charges
module~mod_train_loop_4g_charges->module~mod_output_files_and_cost_4g_charges
module~mod_train_loop_atomic_property
mod_train_loop_atomic_property
module~mod_train_loop_atomic_property->module~mod_initialize
module~mod_train_loop_atomic_property->module~mod_output_files_and_cost
module~mod_train_loop_atomic_property->module~mod_cost_calculator
module~mod_train_loop_short_range
mod_train_loop_short_range
module~mod_train_loop_short_range->module~mod_initialize
module~mod_train_loop_short_range->module~mod_output_files_and_cost
module~mod_train_loop_short_range->module~mod_train_energy_multiple_structures
module~mod_train_loop_short_range->module~mod_train_forces_multiple_structures
module~mod_train_loop_short_range->module~mod_cost_calculator
module~mod_output_files_and_cost_4g_short_range
mod_output_files_and_cost_4g_short_range
module~mod_train_loop_short_range->module~mod_output_files_and_cost_4g_short_range
module~mod_train_mode->module~mod_initialize
module~mod_train_mode->module~mod_predict_all_chunks
module~mod_train_mode->module~mod_train_loop_4g_charges
module~mod_train_mode->module~mod_train_loop_atomic_property
module~mod_train_mode->module~mod_train_loop_short_range
module~mod_write_outfiles_training
mod_write_outfiles_training
module~mod_train_mode->module~mod_write_outfiles_training
module~mod_write_outfiles->module~mod_initialize
module~mod_write_outfiles_training->module~mod_write_outfiles
module~mod_cost_calculator->module~mod_write_outfiles_training
module~mod_output_files_and_cost_4g_charges->module~mod_cost_calculator
module~mod_output_files_and_cost_4g_short_range->module~mod_cost_calculator
Nodes of different colours represent the following:
Graph Key
Module
Module
Submodule
Submodule
Subroutine
Subroutine
Function
Function
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a submodule to the (sub)module which it is
descended from. Dashed arrows point from a module or program unit to
modules which it uses.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Derived Types Summary
Procedures Summary
Derived Types Details
type HirshfeldVdwCalculator
Components
neighbor_list_idx :
integer
sr :
real (DP)– Functional dependent Fermi damping function parameter
damp_parm :
real (DP)– empirical parameter in Fermi damping function parameter
c6_ab_free_mat :
real (DP) (dim: (:,:))
hirshfeld_vdw_fcut_inner_cutoff :
real (DP)
hirshfeld_vdw_fcut_outer_cutoff :
real (DP)
hirshfeld_vdw_fcut_inner_buffer :
real (DP)
hirshfeld_vdw_fcut_outer_buffer :
real (DP)
element_index :
integer (dim: (MAX_ELEM_NUM))
energy :
real (DP)
force :
real (DP) (dim: (:,:))
d_energy_d_vol :
real (DP) (dim: (:))
d_energy_d_strain :
real (DP) (dim: (3,3))
Type-Bound Procedures
Name
Attributes
Binding
print
public
⇒ print_hirshfeld_vdw_calculator
close
public
⇒ close_hirshfeld_vdw_calculator
evaluate
public
⇒ evaluate_hirshfeld_vdw_calculator
Inherited By
type~~hirshfeldvdwcalculator~~InheritedByGraph
type~hirshfeldvdwcalculator
HirshfeldVdwCalculator
type~runnerinterface
RuNNerInterface
type~runnerinterface->type~hirshfeldvdwcalculator
vdw_calc
Nodes of different colours represent the following:
Graph Key
Type
Type
This Page's Entity
This Page's Entity
Solid arrows point from a derived type to the parent type which it
extends. Dashed arrows point from a derived type to the other
types it contains as a components, with a label listing the name(s) of
said component(s).
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Interface Details
interface HirshfeldVdwCalculator
Procedure Details
function constructor_hirshfeld_vdw_calculator
function constructor_hirshfeld_vdw_calculator ( & atomic_numbers, & neighbor_list_idx, & sr, & damp_parm, & hirshfeld_vdw_fcut_inner_cutoff, & hirshfeld_vdw_fcut_outer_cutoff, & hirshfeld_vdw_fcut_inner_buffer, & hirshfeld_vdw_fcut_outer_buffer &)
Arguments
atomic_numbers :
integer (dim: (:)) [in]
neighbor_list_idx :
integer [in]– Which neighbor list is used by this calculator in the list of
neighbor lists.
sr :
real (DP) [in]
damp_parm :
real (DP) [in]
hirshfeld_vdw_fcut_inner_cutoff :
real (DP) [in]
hirshfeld_vdw_fcut_outer_cutoff :
real (DP) [in]
hirshfeld_vdw_fcut_inner_buffer :
real (DP) [in]
hirshfeld_vdw_fcut_outer_buffer :
real (DP) [in]
Called By
proc~~constructor_hirshfeld_vdw_calculator~~CalledByGraph
proc~constructor_hirshfeld_vdw_calculator
mod_hirshfeld_vdw::constructor_hirshfeld_vdw_calculator
interface~hirshfeldvdwcalculator
mod_hirshfeld_vdw::HirshfeldVdwCalculator
interface~hirshfeldvdwcalculator->proc~constructor_hirshfeld_vdw_calculator
Nodes of different colours represent the following:
Graph Key
Subroutine
Subroutine
Function
Function
Interface
Interface
Type Bound Procedure
Type Bound Procedure
Unknown Procedure Type
Unknown Procedure Type
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
function get_c6_ab
function get_c6_ab ( & v_a, & v_b, & c6_ab_free &)
Implementation of c6_ab coefficient interpolation scheme used in Tkatchenko and Scheffler
dispersion model.
Arguments
v_a :
real (DP) [in]
v_b :
real (DP) [in]
c6_ab_free :
real (DP) [in]
Called By
Nodes of different colours represent the following:
Graph Key
Subroutine
Subroutine
Function
Function
Interface
Interface
Type Bound Procedure
Type Bound Procedure
Unknown Procedure Type
Unknown Procedure Type
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
function get_c6_ab_free
function get_c6_ab_free ( & atomic_number_a, & atomic_number_b &)
Implementation of c6_ab_free coefficient calculation from c6_aa and c6_bb reference values.
Used in Tkatchenko and Scheffler Dispersion model.
Arguments
atomic_number_a :
integer [in]
atomic_number_b :
integer [in]
Called By
Nodes of different colours represent the following:
Graph Key
Subroutine
Subroutine
Function
Function
Interface
Interface
Type Bound Procedure
Type Bound Procedure
Unknown Procedure Type
Unknown Procedure Type
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
subroutine print_hirshfeld_vdw_calculator
subroutine print_hirshfeld_vdw_calculator ( & self &)
Initialization of HirshfeldVdwCalculator
Arguments
subroutine close_hirshfeld_vdw_calculator
subroutine close_hirshfeld_vdw_calculator ( & self &)
Closing of HirshfeldVdwCalculator
Arguments
subroutine evaluate_hirshfeld_vdw_calculator
subroutine evaluate_hirshfeld_vdw_calculator ( & self, & num_atoms, & num_local_atoms, & atomic_numbers, & idx_list, & atom_offset_on_process, & xyz, & hirshfeld_volumes, & neighbor_lists, & calculate_forces, & calculate_d_energy_d_strain, & calculate_hirshfeld_gradient &)
Main Tkatchenko-Scheffler dispersion model calculation routine.
@TODO Change the sign in the calculations and not here
of hirshfeld volumes
this is the dc6_ab part of the chain rule
this is the df_damp part of the chain rule, which is dependent
on the hirshfeld volumes
Arguments
self :
class (HirshfeldVdwCalculator ) [inout]
num_atoms :
integer [in]
num_local_atoms :
integer [in]
atomic_numbers :
integer (dim: (num_atoms)) [in]
idx_list :
integer (dim: (num_local_atoms)) [in]– indices of atoms in structure for which vdW should be evaluated.
This is necessary for the LAMMPS interface where only local atoms need to be evaluated.
atom_offset_on_process :
integer [in]
xyz :
real (DP) (dim: (3,num_atoms)) [in]
hirshfeld_volumes :
real (DP) (dim: (num_atoms)) [in]
neighbor_lists :
type (FeatureMapNeighborList ) (dim: (:)) [in]
calculate_forces :
logical [in]
calculate_d_energy_d_strain :
logical [in]
calculate_hirshfeld_gradient :
logical [in]
Called By
Nodes of different colours represent the following:
Graph Key
Subroutine
Subroutine
Function
Function
Interface
Interface
Type Bound Procedure
Type Bound Procedure
Unknown Procedure Type
Unknown Procedure Type
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
subroutine fermi_damping_function
subroutine fermi_damping_function ( & an_a, & an_b, & hirshfeld_volume_a, & hirshfeld_volume_b, & ab_coord, & r_ab, & damp_parm, & sr, & f_damp, & df_damp, & df_damp_hirsh_grad, & calc_forces, & calc_hirsh_gradient &)
Implementation of Fermi damping function used in Tkatchenko and Scheffler
dispersion model.
of the hirshfeld volumes wrt positions.
These are often neglected in the TS model.
Arguments
an_a :
integer [in]– Atomic number of atom A.
an_b :
integer [in]– Atomic number of atom B.
hirshfeld_volume_a :
real (DP) [in]– Hirshfeld volume of atom A
hirshfeld_volume_b :
real (DP) [in]– Hirshfeld volume of atom B
ab_coord :
real (DP) (dim: (3)) [in]– Relative coordinates of B wrt A
r_ab :
real (DP) [in]
damp_parm :
real (DP) [in]
sr :
real (DP) [in]
f_damp :
real (DP) [inout]
df_damp :
real (DP) (dim: (3)) [out]
df_damp_hirsh_grad :
real (DP) [out]
calc_forces :
logical [in]
calc_hirsh_gradient :
logical [in]
Called By
Nodes of different colours represent the following:
Graph Key
Subroutine
Subroutine
Function
Function
Interface
Interface
Type Bound Procedure
Type Bound Procedure
Unknown Procedure Type
Unknown Procedure Type
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
subroutine calculate_c6_ab_free_matrix
subroutine calculate_c6_ab_free_matrix ( & atomic_numbers, & c6_ab_free_mat &)
Precalculation of c6_ab_free coefficient matrix to avoid recalculation for every atom pair.
Used in Tkatchenko-Scheffler dispersion model.
Arguments
atomic_numbers :
integer (dim: (:)) [in]
c6_ab_free_mat :
real (DP) (dim: (:,:)) [out]
Called By
Nodes of different colours represent the following:
Graph Key
Subroutine
Subroutine
Function
Function
Interface
Interface
Type Bound Procedure
Type Bound Procedure
Unknown Procedure Type
Unknown Procedure Type
Program
Program
This Page's Entity
This Page's Entity
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.