mod_evaluate_electrostatics_3g_single_structure
Lines: 52 |
Visibility: private
Routines for third-generation (3G) model predictions.
author: Alexander Knoll
Calculate all contributions to the 3G electrostatic energies, forces, and
lattice strain arising from environment-dependent charges.
This routine calculates
$$$
\frac{\partial E_{\mathrm{elec}}}{\partial Q}
\frac{\partial Q}{\partial G}$
\frac{\partial G}{\partial R}$
$$$
for a third generation (3G) potential.
Please see the docstring of evaluate_electrostatics_3g_part_1 for
a more detailed explanations of the math.
Dependencies
Uses
module~~mod_evaluate_electrostatics_3g_single_structure~~UsesGraph
module~mod_evaluate_electrostatics_3g_single_structure
mod_evaluate_electrostatics_3g_single_structure
module~mod_abstract_electrostatics
mod_abstract_electrostatics
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_abstract_electrostatics
module~mod_chain_features
mod_chain_features
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_chain_features
module~mod_feature_calculator
mod_feature_calculator
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_feature_calculator
module~mod_feature_map_neighborlist
mod_feature_map_neighborlist
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_feature_map_neighborlist
module~mod_mpi
mod_mpi
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_mpi
module~mod_precision
mod_precision
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_precision
module~mod_throw
mod_throw
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_throw
module~mod_timer
mod_timer
module~mod_evaluate_electrostatics_3g_single_structure->module~mod_timer
module~mod_abstract_electrostatics->module~mod_precision
module~mod_structures
mod_structures
module~mod_abstract_electrostatics->module~mod_structures
module~mod_chain_features->module~mod_feature_calculator
module~mod_chain_features->module~mod_feature_map_neighborlist
module~mod_chain_features->module~mod_precision
module~mod_feature_calculator->module~mod_feature_map_neighborlist
module~mod_feature_calculator->module~mod_mpi
module~mod_feature_calculator->module~mod_precision
module~mod_feature_calculator->module~mod_throw
module~mod_feature_calculator->module~mod_timer
module~mod_angular_symmetry_function_3
mod_angular_symmetry_function_3
module~mod_feature_calculator->module~mod_angular_symmetry_function_3
module~mod_angular_symmetry_function_8
mod_angular_symmetry_function_8
module~mod_feature_calculator->module~mod_angular_symmetry_function_8
module~mod_angular_symmetry_function_9
mod_angular_symmetry_function_9
module~mod_feature_calculator->module~mod_angular_symmetry_function_9
module~mod_array_helpers
mod_array_helpers
module~mod_feature_calculator->module~mod_array_helpers
module~mod_atomic_descriptor
mod_atomic_descriptor
module~mod_feature_calculator->module~mod_atomic_descriptor
module~mod_cutoff_function
mod_cutoff_function
module~mod_feature_calculator->module~mod_cutoff_function
module~mod_data_container
mod_data_container
module~mod_feature_calculator->module~mod_data_container
module~mod_element
mod_element
module~mod_feature_calculator->module~mod_element
module~mod_extrapolation_warning
mod_extrapolation_warning
module~mod_feature_calculator->module~mod_extrapolation_warning
module~mod_feature_map
mod_feature_map
module~mod_feature_calculator->module~mod_feature_map
module~mod_io
mod_io
module~mod_feature_calculator->module~mod_io
module~mod_optional_args
mod_optional_args
module~mod_feature_calculator->module~mod_optional_args
module~mod_overlap_matrix
mod_overlap_matrix
module~mod_feature_calculator->module~mod_overlap_matrix
module~mod_path
mod_path
module~mod_feature_calculator->module~mod_path
module~mod_periodic_table
mod_periodic_table
module~mod_feature_calculator->module~mod_periodic_table
module~mod_radial_symmetry_function_1
mod_radial_symmetry_function_1
module~mod_feature_calculator->module~mod_radial_symmetry_function_1
module~mod_radial_symmetry_function_2
mod_radial_symmetry_function_2
module~mod_feature_calculator->module~mod_radial_symmetry_function_2
module~mod_set_integer
mod_set_integer
module~mod_feature_calculator->module~mod_set_integer
module~mod_settings
mod_settings
module~mod_feature_calculator->module~mod_settings
module~mod_feature_calculator->module~mod_structures
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_feature_map_neighborlist->module~mod_timer
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_feature_map_neighborlist->module~mod_io
module~mod_neighborlist
mod_neighborlist
module~mod_feature_map_neighborlist->module~mod_neighborlist
module~mod_feature_map_neighborlist->module~mod_structures
module~mod_mpi->module~mod_precision
mpi_f08
mpi_f08
module~mod_mpi->mpi_f08
iso_c_binding
iso_c_binding
module~mod_precision->iso_c_binding
iso_fortran_env
iso_fortran_env
module~mod_precision->iso_fortran_env
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_throw->module~mod_io
module~mod_sort
mod_sort
module~mod_throw->module~mod_sort
module~mod_timer->module~mod_precision
module~mod_timer->module~mod_throw
ieee_arithmetic
ieee_arithmetic
module~mod_timer->ieee_arithmetic
module~mod_timer->module~mod_io
module~mod_timer->module~mod_optional_args
module~mod_abstract_cutoff_function->module~mod_precision
module~mod_angular_symmetry_function_3->module~mod_feature_map_neighborlist
module~mod_angular_symmetry_function_3->module~mod_precision
module~mod_angular_symmetry_function_3->module~mod_throw
module~mod_angular_symmetry_function_3->module~mod_constants
module~mod_angular_symmetry_function_3->module~mod_cutoff_function
module~mod_angular_symmetry_function_3->module~mod_feature_map
module~mod_angular_symmetry_function_3->module~mod_periodic_table
module~mod_angular_symmetry_function_3->module~mod_structures
module~mod_abstract_angular_symmetry_function
mod_abstract_angular_symmetry_function
module~mod_angular_symmetry_function_3->module~mod_abstract_angular_symmetry_function
module~mod_abstract_symmetry_function
mod_abstract_symmetry_function
module~mod_angular_symmetry_function_3->module~mod_abstract_symmetry_function
module~mod_fastmath
mod_fastmath
module~mod_angular_symmetry_function_3->module~mod_fastmath
module~mod_hash
mod_hash
module~mod_angular_symmetry_function_3->module~mod_hash
module~mod_angular_symmetry_function_8->module~mod_feature_map_neighborlist
module~mod_angular_symmetry_function_8->module~mod_precision
module~mod_angular_symmetry_function_8->module~mod_throw
module~mod_angular_symmetry_function_8->module~mod_constants
module~mod_angular_symmetry_function_8->module~mod_cutoff_function
module~mod_angular_symmetry_function_8->module~mod_feature_map
module~mod_angular_symmetry_function_8->module~mod_periodic_table
module~mod_angular_symmetry_function_8->module~mod_structures
module~mod_angular_symmetry_function_8->module~mod_abstract_angular_symmetry_function
module~mod_angular_symmetry_function_8->module~mod_abstract_symmetry_function
module~mod_angular_symmetry_function_8->module~mod_hash
module~mod_angular_symmetry_function_9->module~mod_feature_map_neighborlist
module~mod_angular_symmetry_function_9->module~mod_precision
module~mod_angular_symmetry_function_9->module~mod_throw
module~mod_angular_symmetry_function_9->module~mod_constants
module~mod_angular_symmetry_function_9->module~mod_cutoff_function
module~mod_angular_symmetry_function_9->module~mod_feature_map
module~mod_angular_symmetry_function_9->module~mod_periodic_table
module~mod_angular_symmetry_function_9->module~mod_structures
module~mod_angular_symmetry_function_9->module~mod_abstract_angular_symmetry_function
module~mod_angular_symmetry_function_9->module~mod_abstract_symmetry_function
module~mod_angular_symmetry_function_9->module~mod_fastmath
module~mod_angular_symmetry_function_9->module~mod_hash
module~mod_array_helpers->module~mod_precision
module~mod_array_helpers->module~mod_throw
module~mod_atomic_descriptor->module~mod_precision
module~mod_atomic_descriptor->module~mod_element
module~mod_atomic_descriptor->module~mod_structures
module~mod_constants->module~mod_precision
module~mod_constants->iso_c_binding
module~mod_cutoff_function->module~mod_precision
module~mod_cutoff_function->module~mod_throw
module~mod_cutoff_function->module~mod_abstract_cutoff_function
module~mod_cutoff_function->module~mod_io
module~mod_cutoff_function_cosine
mod_cutoff_function_cosine
module~mod_cutoff_function->module~mod_cutoff_function_cosine
module~mod_cutoff_function_hard
mod_cutoff_function_hard
module~mod_cutoff_function->module~mod_cutoff_function_hard
module~mod_cutoff_function_hypertangent
mod_cutoff_function_hypertangent
module~mod_cutoff_function->module~mod_cutoff_function_hypertangent
module~mod_cutoff_function_hypertangent_approx
mod_cutoff_function_hypertangent_approx
module~mod_cutoff_function->module~mod_cutoff_function_hypertangent_approx
module~mod_cutoff_function_null
mod_cutoff_function_null
module~mod_cutoff_function->module~mod_cutoff_function_null
module~mod_cutoff_function_polynomial
mod_cutoff_function_polynomial
module~mod_cutoff_function->module~mod_cutoff_function_polynomial
module~mod_cutoff_function_vdw
mod_cutoff_function_vdw
module~mod_cutoff_function->module~mod_cutoff_function_vdw
module~mod_data_container->module~mod_precision
module~mod_data_container->module~mod_throw
module~mod_data_container->module~mod_io
module~mod_element->module~mod_mpi
module~mod_element->module~mod_precision
module~mod_element->module~mod_throw
module~mod_element->module~mod_angular_symmetry_function_3
module~mod_element->module~mod_angular_symmetry_function_9
module~mod_element->module~mod_constants
module~mod_element->module~mod_cutoff_function
module~mod_element->module~mod_feature_map
module~mod_element->module~mod_io
module~mod_element->module~mod_optional_args
module~mod_element->module~mod_periodic_table
module~mod_element->module~mod_radial_symmetry_function_2
module~mod_element->module~mod_set_integer
module~mod_arrays_init
mod_arrays_init
module~mod_element->module~mod_arrays_init
module~mod_decorations
mod_decorations
module~mod_element->module~mod_decorations
module~mod_dubious_feature_map_handler
mod_dubious_feature_map_handler
module~mod_element->module~mod_dubious_feature_map_handler
module~mod_element->module~mod_hash
module~mod_set_character
mod_set_character
module~mod_element->module~mod_set_character
module~mod_extrapolation_warning->module~mod_precision
module~mod_extrapolation_warning->module~mod_throw
module~mod_extrapolation_warning->iso_c_binding
module~mod_extrapolation_warning->module~mod_periodic_table
module~mod_abstract_warning
mod_abstract_warning
module~mod_extrapolation_warning->module~mod_abstract_warning
module~mod_feature_map->module~mod_feature_map_neighborlist
module~mod_feature_map->module~mod_precision
module~mod_feature_map->module~mod_throw
module~mod_feature_map->module~mod_cutoff_function
module~mod_feature_map->module~mod_io
module~mod_feature_map->module~mod_structures
module~mod_feature_map->module~mod_hash
module~mod_sanitize
mod_sanitize
module~mod_feature_map->module~mod_sanitize
module~mod_io->module~mod_precision
module~mod_io->iso_fortran_env
module~mod_io->module~mod_optional_args
module~mod_neighborlist->module~mod_mpi
module~mod_neighborlist->module~mod_precision
module~mod_neighborlist->module~mod_throw
module~mod_neighborlist->module~mod_io
module~mod_neighborlist->module~mod_settings
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_overlap_matrix->module~mod_feature_map_neighborlist
module~mod_overlap_matrix->module~mod_precision
module~mod_overlap_matrix->module~mod_cutoff_function
module~mod_overlap_matrix->module~mod_feature_map
module~mod_overlap_matrix->module~mod_structures
module~mod_path->module~mod_io
module~mod_periodic_table->module~mod_precision
module~mod_periodic_table->module~mod_throw
module~mod_periodic_table->module~mod_array_helpers
module~mod_periodic_table->module~mod_constants
module~mod_periodic_table->module~mod_io
module~mod_radial_symmetry_function_1->module~mod_feature_map_neighborlist
module~mod_radial_symmetry_function_1->module~mod_precision
module~mod_radial_symmetry_function_1->module~mod_throw
module~mod_radial_symmetry_function_1->module~mod_cutoff_function
module~mod_radial_symmetry_function_1->module~mod_feature_map
module~mod_radial_symmetry_function_1->module~mod_io
module~mod_radial_symmetry_function_1->module~mod_periodic_table
module~mod_radial_symmetry_function_1->module~mod_structures
module~mod_abstract_radial_symmetry_function
mod_abstract_radial_symmetry_function
module~mod_radial_symmetry_function_1->module~mod_abstract_radial_symmetry_function
module~mod_radial_symmetry_function_1->module~mod_hash
module~mod_radial_symmetry_function_2->module~mod_feature_map_neighborlist
module~mod_radial_symmetry_function_2->module~mod_precision
module~mod_radial_symmetry_function_2->module~mod_throw
module~mod_radial_symmetry_function_2->module~mod_cutoff_function
module~mod_radial_symmetry_function_2->module~mod_feature_map
module~mod_radial_symmetry_function_2->module~mod_periodic_table
module~mod_radial_symmetry_function_2->module~mod_structures
module~mod_radial_symmetry_function_2->module~mod_abstract_radial_symmetry_function
module~mod_radial_symmetry_function_2->module~mod_abstract_symmetry_function
module~mod_radial_symmetry_function_2->module~mod_hash
module~mod_set_integer->module~mod_throw
module~mod_settings->module~mod_precision
module~mod_settings->module~mod_throw
module~mod_settings->module~mod_constants
module~mod_settings->module~mod_io
module~mod_settings->module~mod_periodic_table
module~mod_cpu_vendor
mod_cpu_vendor
module~mod_settings->module~mod_cpu_vendor
module~mod_sort->module~mod_precision
module~mod_structures->module~mod_mpi
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_structures->module~mod_periodic_table
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_abstract_angular_symmetry_function->module~mod_feature_map_neighborlist
module~mod_abstract_angular_symmetry_function->module~mod_precision
module~mod_abstract_angular_symmetry_function->module~mod_periodic_table
module~mod_abstract_angular_symmetry_function->module~mod_structures
module~mod_abstract_angular_symmetry_function->module~mod_abstract_symmetry_function
module~mod_abstract_radial_symmetry_function->module~mod_feature_map_neighborlist
module~mod_abstract_radial_symmetry_function->module~mod_precision
module~mod_abstract_radial_symmetry_function->module~mod_structures
module~mod_abstract_radial_symmetry_function->module~mod_abstract_symmetry_function
module~mod_abstract_symmetry_function->module~mod_feature_map_neighborlist
module~mod_abstract_symmetry_function->module~mod_precision
module~mod_abstract_symmetry_function->module~mod_throw
module~mod_abstract_symmetry_function->module~mod_feature_map
module~mod_abstract_symmetry_function->module~mod_io
module~mod_abstract_symmetry_function->module~mod_structures
module~mod_electric_field_prefactor
mod_electric_field_prefactor
module~mod_abstract_symmetry_function->module~mod_electric_field_prefactor
module~mod_spin_prefactor
mod_spin_prefactor
module~mod_abstract_symmetry_function->module~mod_spin_prefactor
module~mod_arrays_init->module~mod_precision
module~mod_cpu_vendor->iso_c_binding
module~mod_cutoff_function_cosine->module~mod_precision
module~mod_cutoff_function_cosine->module~mod_abstract_cutoff_function
module~mod_cutoff_function_cosine->module~mod_constants
module~mod_cutoff_function_hard->module~mod_precision
module~mod_cutoff_function_hard->module~mod_abstract_cutoff_function
module~mod_cutoff_function_hypertangent->module~mod_precision
module~mod_cutoff_function_hypertangent->module~mod_abstract_cutoff_function
module~mod_cutoff_function_hypertangent_approx->module~mod_precision
module~mod_cutoff_function_hypertangent_approx->module~mod_abstract_cutoff_function
module~mod_cutoff_function_null->module~mod_precision
module~mod_cutoff_function_null->module~mod_throw
module~mod_cutoff_function_null->module~mod_abstract_cutoff_function
module~mod_cutoff_function_polynomial->module~mod_precision
module~mod_cutoff_function_polynomial->module~mod_abstract_cutoff_function
module~mod_cutoff_function_polynomial->module~mod_fastmath
module~mod_cutoff_function_vdw->module~mod_precision
module~mod_cutoff_function_vdw->module~mod_abstract_cutoff_function
module~mod_decorations->module~mod_precision
module~mod_decorations->module~mod_throw
module~mod_decorations->module~mod_io
module~mod_dubious_feature_map_handler->module~mod_precision
module~mod_dubious_feature_map_handler->module~mod_throw
module~mod_dubious_feature_map_handler->module~mod_io
module~mod_dubious_feature_map_handler->module~mod_decorations
module~mod_dubious_feature_map_handler->module~mod_dynamic_double_array
module~mod_dubious_feature_map_handler->module~mod_dynamic_int_array
module~mod_dynamic_line_array
mod_dynamic_line_array
module~mod_dubious_feature_map_handler->module~mod_dynamic_line_array
module~mod_dynamic_double_array->module~mod_precision
module~mod_dynamic_double_array->module~mod_throw
module~mod_fastmath->module~mod_precision
module~mod_hash->module~mod_precision
module~mod_hash->module~mod_io
module~mod_hash->module~mod_periodic_table
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_sanitize->module~mod_throw
module~mod_set_character->module~mod_throw
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_electric_field_prefactor->module~mod_feature_map_neighborlist
module~mod_electric_field_prefactor->module~mod_precision
module~mod_electric_field_prefactor->module~mod_settings
module~mod_spin_prefactor->module~mod_feature_map_neighborlist
module~mod_spin_prefactor->module~mod_precision
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_evaluate_electrostatics_3g_single_structure~~UsedByGraph
module~mod_evaluate_electrostatics_3g_single_structure
mod_evaluate_electrostatics_3g_single_structure
module~mod_post_processing_3g_single_structure
mod_post_processing_3g_single_structure
module~mod_post_processing_3g_single_structure->module~mod_evaluate_electrostatics_3g_single_structure
module~mod_runner_interface_bindings
mod_runner_interface_bindings
module~mod_runner_interface_bindings->module~mod_evaluate_electrostatics_3g_single_structure
module~mod_lammps_interface
mod_lammps_interface
module~mod_lammps_interface->module~mod_runner_interface_bindings
module~mod_post_processing_wrapper_single_structure
mod_post_processing_wrapper_single_structure
module~mod_post_processing_wrapper_single_structure->module~mod_post_processing_3g_single_structure
module~mod_predict_multiple_structures
mod_predict_multiple_structures
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_post_processing_wrapper_single_structure
module~mod_generic_interface
mod_generic_interface
module~mod_generic_interface->module~mod_predict_single_structure
module~mod_output_files_and_cost
mod_output_files_and_cost
module~mod_output_files_and_cost->module~mod_predict_multiple_structures
module~mod_predict_all_chunks
mod_predict_all_chunks
module~mod_predict_all_chunks->module~mod_predict_multiple_structures
module~mod_predict_mode
mod_predict_mode
module~mod_predict_mode->module~mod_predict_multiple_structures
module~mod_feature_calc_interface
mod_feature_calc_interface
module~mod_feature_calc_interface->module~mod_generic_interface
module~mod_train_loop_atomic_property
mod_train_loop_atomic_property
module~mod_train_loop_atomic_property->module~mod_output_files_and_cost
module~mod_train_loop_short_range
mod_train_loop_short_range
module~mod_train_loop_short_range->module~mod_output_files_and_cost
module~mod_train_mode
mod_train_mode
module~mod_train_mode->module~mod_predict_all_chunks
module~mod_train_mode->module~mod_train_loop_atomic_property
module~mod_train_mode->module~mod_train_loop_short_range
program~runner
RuNNer
program~runner->module~mod_predict_mode
program~runner->module~mod_train_mode
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.
Procedures Summary
Procedure Details
subroutine calculate_electrostatics_3g_single_structure_part_1
subroutine calculate_electrostatics_3g_single_structure_part_1 ( & num_atoms, & pos, & total_charge, & lattice, & lperiodic, & calculate_forces, & calculate_d_energy_d_strain, & atomic_charges, & elec_calc &)
This routine evaluates an electrostatic calculator
for a single structure based on given atomic charges to calculate
the total energy, as well as force and d_energy_d_strain contributions.
For a third generation (3G) potential, the total energy is
\(E_{\mathrm{total}(R, Q(R))} = E_{\mathrm{short}(R)} + E_{\mathrm{elec}(R, Q(R))}\) .
This routine handles the second part of that sum.
As one can see, the 3G electrostatic forces \(\frac{\mathrm{d} E}{\mathrm{d} R}\)
are a function of both the Cartesian coordinates \(R\) and the environment-dependent
charges \(Q(R)\) . In mathematical terms:
$$$
\frac{\mathrm{d} E_{\mathrm{elec}}}{\mathrm{d} R} =
& \frac{\partial E_{\mathrm{elec}}}{\partial R}
& + \frac{\partial E_{\mathrm{elec}}}{\partial Q} \frac{\partial Q}{\partial R}
$$$
This routine only handles the first part of that chain rule.
Arguments
num_atoms :
integer [in]– The total number of atoms in the system. Note that the evaluation
of electrostatics is only possible for the whole structure, not a
piece of it (e.g. when a structure was split over multiple processes).
pos :
real (DP) (dim: (3,num_atoms)) [in]– The Cartesian coordinates of all atoms.
total_charge :
real (DP) [in]– The total charge of the structure. For a periodic structure, this
must be zero.
lattice :
real (DP) (dim: (3,3)) [in]– The cell vectors of the structure.
lperiodic :
logical [in]– Whether the structure is periodic or not. For a non-periodic structure,
elec_calc must be a `PairwiseElectrostaticsCalculator`.
calculate_forces :
logical [in]– Whether the electrostatic force contributions will be calculated.
calculate_d_energy_d_strain :
logical [in]– Whether the electrostatic contributions to the lattice strain are
calculated.
atomic_charges :
real (DP) (dim: (num_atoms)) [inout]– The charge of each atom. Please note that these will always be
projected on the total charge constraint hypersurface before
electrostratics are evaluated.
elec_calc :
class (AbstractElectrostaticsCalculator ) [inout]– A electrostatics calculator thas has already been initialized for the given
structure.
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_electrostatics_3g_single_structure_part_2
subroutine calculate_electrostatics_3g_single_structure_part_2 ( & num_atoms, & num_local_atoms, & num_total_atoms, & atom_offset_on_process, & calculate_forces, & calculate_d_energy_d_strain, & neighbor_lists, & feature_calculator, & d_atomic_charges_d_features, & de_dq, & de_dq_sum, & forces, & d_energy_d_strain &)
Arguments
num_atoms :
integer [in]– The total number of atoms in the structure that
reside on this process. This is the sum of the local atoms
belonging to this MPI process and the ghost atoms which
are copies of local atoms from other MPI processes that
build up the neighbor list of owned local atoms.
num_local_atoms :
integer [in]– The number of atoms owned by this MPI process.
num_total_atoms :
integer [in]– The total number of local atoms across all MPI processes.
This is simply the actual number of atoms in the structure.
atom_offset_on_process :
integer [in]– The id on process for all local atoms.
calculate_forces :
logical [in]– Whether forces are calculated.
calculate_d_energy_d_strain :
logical [in]– Whether lattice strain contributions are calculated.
neighbor_lists :
type (FeatureMapNeighborList ) (dim: (:)) [in]– A list containing at the least the neighbor list used
by the given `feature_calculator`.
feature_calculator :
type (FeatureCalculator ) [in]– An evaluated feature calculator containing all derivatives
dG/dxyz for the features of the atomic charges.
d_atomic_charges_d_features :
real (DP) (dim: (maxval(feature_calculator%elements%num_features),num_local_atoms)) [in]– The derivatives of the atomic charges with respect to the
input features of the model that was used to predict them.
de_dq :
real (DP) (dim: (num_atoms)) [inout]– The derivative of the electrostatic energy with respect to
the charge of all atoms on this process (local and ghost).
This is the result of a previous call to an electrostatics
calculator. Note that this will be projected to the
total charge constraint hypersurface.
de_dq_sum :
real (DP) [in]– The sum of `de_dq` across all processes.
forces :
real (DP) (dim: (3,num_atoms)) [inout]– The calculated force contributions of the environment-dependent
atomic charges will be added to this array for all local and ghost
atoms on this process. This array will usually already contain the
force contributions arising from the direct derivative of the
electrostatic energy with respect to the Cartesian coordinates.
d_energy_d_strain :
real (DP) (dim: (3,3)) [inout]– The calculated strain contributions of the environment-dependent
atomic charges will be added to this array. See `forces` for details.
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.