Skip to content

mod_evaluate_4g_single_structure

Lines: 150 | Visibility: private

Routines for fourth-generation (4G) model predictions. author: Alexander Knoll Calculate all contributions to the 4G electrostatic energies, forces, and lattice strain arising from environment-dependent electronegativities and hardnesses.

This routine calculates $$$ & \frac{\partial E_{\mathrm{elec}}}{\partial Q} \cdot \( \frac{\partial\chi}{\partial R} + \frac{\partial J}{\partial R} \) $$$ for a fourth generation (3G) potential and adds it the forces and lattice strain. Please see the docstring of calculate_electrostatics_4g_single_structure_part_1 for a more detailed explanations of the math.

Dependencies

Uses

module~~mod_evaluate_4g_single_structure~~UsesGraph module~mod_evaluate_4g_single_structure mod_evaluate_4g_single_structure module~mod_abstract_charge_equilibration mod_abstract_charge_equilibration module~mod_evaluate_4g_single_structure->module~mod_abstract_charge_equilibration module~mod_chain_features mod_chain_features module~mod_evaluate_4g_single_structure->module~mod_chain_features module~mod_ee4g_feature_calculator mod_ee4g_feature_calculator module~mod_evaluate_4g_single_structure->module~mod_ee4g_feature_calculator module~mod_feature_calculator mod_feature_calculator module~mod_evaluate_4g_single_structure->module~mod_feature_calculator module~mod_feature_map_neighborlist mod_feature_map_neighborlist module~mod_evaluate_4g_single_structure->module~mod_feature_map_neighborlist module~mod_mpi mod_mpi module~mod_evaluate_4g_single_structure->module~mod_mpi module~mod_optional_args mod_optional_args module~mod_evaluate_4g_single_structure->module~mod_optional_args module~mod_periodic_table mod_periodic_table module~mod_evaluate_4g_single_structure->module~mod_periodic_table module~mod_precision mod_precision module~mod_evaluate_4g_single_structure->module~mod_precision module~mod_structures mod_structures module~mod_evaluate_4g_single_structure->module~mod_structures module~mod_structures_helper mod_structures_helper module~mod_evaluate_4g_single_structure->module~mod_structures_helper module~mod_throw mod_throw module~mod_evaluate_4g_single_structure->module~mod_throw module~mod_timer mod_timer module~mod_evaluate_4g_single_structure->module~mod_timer module~mod_abstract_charge_equilibration->module~mod_periodic_table module~mod_abstract_charge_equilibration->module~mod_precision module~mod_abstract_charge_equilibration->module~mod_structures module~mod_abstract_electrostatics mod_abstract_electrostatics module~mod_abstract_charge_equilibration->module~mod_abstract_electrostatics 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_ee4g_feature_calculator->module~mod_feature_map_neighborlist module~mod_ee4g_feature_calculator->module~mod_periodic_table module~mod_ee4g_feature_calculator->module~mod_precision module~mod_ee4g_feature_calculator->module~mod_structures module~mod_ee4g_feature_calculator->module~mod_throw module~mod_constants mod_constants module~mod_ee4g_feature_calculator->module~mod_constants module~mod_global_feature_calculator mod_global_feature_calculator module~mod_ee4g_feature_calculator->module~mod_global_feature_calculator module~mod_inputnn mod_inputnn module~mod_ee4g_feature_calculator->module~mod_inputnn module~mod_io mod_io module~mod_ee4g_feature_calculator->module~mod_io module~mod_outer_product mod_outer_product module~mod_ee4g_feature_calculator->module~mod_outer_product module~mod_path mod_path module~mod_ee4g_feature_calculator->module~mod_path module~mod_settings mod_settings module~mod_ee4g_feature_calculator->module~mod_settings module~mod_sort mod_sort module~mod_ee4g_feature_calculator->module~mod_sort module~mod_feature_calculator->module~mod_feature_map_neighborlist module~mod_feature_calculator->module~mod_mpi module~mod_feature_calculator->module~mod_optional_args module~mod_feature_calculator->module~mod_periodic_table module~mod_feature_calculator->module~mod_precision module~mod_feature_calculator->module~mod_structures 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_feature_calculator->module~mod_io module~mod_overlap_matrix mod_overlap_matrix module~mod_feature_calculator->module~mod_overlap_matrix module~mod_feature_calculator->module~mod_path 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_feature_calculator->module~mod_settings module~mod_feature_map_neighborlist->module~mod_mpi module~mod_feature_map_neighborlist->module~mod_precision module~mod_feature_map_neighborlist->module~mod_structures 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_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_mpi->module~mod_precision mpi_f08 mpi_f08 module~mod_mpi->mpi_f08 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 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_structures->module~mod_mpi module~mod_structures->module~mod_periodic_table module~mod_structures->module~mod_precision module~mod_structures->module~mod_structures_helper 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->module~mod_precision module~mod_structures_helper->module~mod_linalg 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_throw->module~mod_sort module~mod_timer->module~mod_optional_args 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_abstract_cutoff_function->module~mod_precision module~mod_abstract_electrostatics->module~mod_precision module~mod_abstract_electrostatics->module~mod_structures module~mod_angular_symmetry_function_3->module~mod_feature_map_neighborlist module~mod_angular_symmetry_function_3->module~mod_periodic_table module~mod_angular_symmetry_function_3->module~mod_precision module~mod_angular_symmetry_function_3->module~mod_structures 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_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_periodic_table module~mod_angular_symmetry_function_8->module~mod_precision module~mod_angular_symmetry_function_8->module~mod_structures 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_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_periodic_table module~mod_angular_symmetry_function_9->module~mod_precision module~mod_angular_symmetry_function_9->module~mod_structures 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_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_structures module~mod_atomic_descriptor->module~mod_element 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_optional_args module~mod_element->module~mod_periodic_table 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_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_periodic_table module~mod_extrapolation_warning->module~mod_precision module~mod_extrapolation_warning->module~mod_throw module~mod_extrapolation_warning->iso_c_binding 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_structures 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_hash module~mod_sanitize mod_sanitize module~mod_feature_map->module~mod_sanitize module~mod_global_feature_calculator->module~mod_optional_args module~mod_global_feature_calculator->module~mod_periodic_table module~mod_global_feature_calculator->module~mod_precision module~mod_global_feature_calculator->module~mod_structures module~mod_global_feature_calculator->module~mod_throw module~mod_global_feature_calculator->module~mod_data_container module~mod_global_feature_calculator->module~mod_io module~mod_free mod_free module~mod_global_feature_calculator->module~mod_free module~mod_global_atomic_descriptor mod_global_atomic_descriptor module~mod_global_feature_calculator->module~mod_global_atomic_descriptor module~mod_global_feature_statistics mod_global_feature_statistics module~mod_global_feature_calculator->module~mod_global_feature_statistics module~mod_statistics_container mod_statistics_container module~mod_global_feature_calculator->module~mod_statistics_container module~mod_training_charge_equilibration mod_training_charge_equilibration module~mod_global_feature_calculator->module~mod_training_charge_equilibration module~mod_inputnn->module~mod_mpi module~mod_inputnn->module~mod_throw module~mod_inputnn->module~mod_io module~mod_abstract_broadcast_file mod_abstract_broadcast_file module~mod_inputnn->module~mod_abstract_broadcast_file module~mod_io->module~mod_optional_args module~mod_io->module~mod_precision module~mod_io->iso_fortran_env 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_neighborlist->module~mod_mpi module~mod_neighborlist->module~mod_precision module~mod_neighborlist->module~mod_structures module~mod_neighborlist->module~mod_throw module~mod_neighborlist->module~mod_io module~mod_neighborlist->module~mod_settings 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_outer_product->module~mod_precision module~mod_outer_product->module~mod_linalg module~mod_overlap_matrix->module~mod_feature_map_neighborlist module~mod_overlap_matrix->module~mod_precision module~mod_overlap_matrix->module~mod_structures module~mod_overlap_matrix->module~mod_cutoff_function module~mod_overlap_matrix->module~mod_feature_map module~mod_path->module~mod_io module~mod_radial_symmetry_function_1->module~mod_feature_map_neighborlist module~mod_radial_symmetry_function_1->module~mod_periodic_table module~mod_radial_symmetry_function_1->module~mod_precision module~mod_radial_symmetry_function_1->module~mod_structures 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_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_periodic_table module~mod_radial_symmetry_function_2->module~mod_precision module~mod_radial_symmetry_function_2->module~mod_structures 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_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_periodic_table 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_cpu_vendor mod_cpu_vendor module~mod_settings->module~mod_cpu_vendor module~mod_sort->module~mod_precision module~cublas_wrapper->iso_c_binding module~cublas_wrapper->module~mod_settings module~mod_abstract_angular_symmetry_function->module~mod_feature_map_neighborlist module~mod_abstract_angular_symmetry_function->module~mod_periodic_table module~mod_abstract_angular_symmetry_function->module~mod_precision module~mod_abstract_angular_symmetry_function->module~mod_structures module~mod_abstract_angular_symmetry_function->module~mod_abstract_symmetry_function module~mod_abstract_broadcast_file->module~mod_mpi module~mod_abstract_broadcast_file->module~mod_throw module~mod_abstract_broadcast_file->module~mod_io module~mod_abstract_broadcast_file->module~mod_sanitize module~mod_genericfile mod_genericfile module~mod_abstract_broadcast_file->module~mod_genericfile 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_structures 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_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_free->module~mod_precision module~mod_global_atomic_descriptor->module~mod_optional_args module~mod_global_atomic_descriptor->module~mod_precision module~mod_global_feature_statistics->module~mod_periodic_table module~mod_global_feature_statistics->module~mod_precision module~mod_global_feature_statistics->module~mod_throw module~mod_global_feature_statistics->module~mod_io module~mod_global_feature_statistics->module~mod_free module~mod_global_feature_statistics->module~mod_statistics_container module~mod_statisticsfile mod_statisticsfile module~mod_global_feature_statistics->module~mod_statisticsfile module~mod_hash->module~mod_periodic_table module~mod_hash->module~mod_precision module~mod_hash->module~mod_io module~mod_neighbor_grid->module~mod_mpi module~mod_neighbor_grid->module~mod_precision module~mod_neighbor_grid->module~mod_structures_helper module~mod_neighbor_grid->module~mod_dynamic_int_array module~mod_neighbor_grid->module~mod_neighborlist_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_statistics_container->module~mod_mpi module~mod_statistics_container->module~mod_periodic_table module~mod_statistics_container->module~mod_precision module~mod_statistics_container->module~mod_throw module~mod_statistics_container->module~mod_constants module~mod_statistics_container->module~mod_io module~mod_table mod_table module~mod_statistics_container->module~mod_table module~mod_training_charge_equilibration->module~mod_optional_args module~mod_training_charge_equilibration->module~mod_precision module~mod_training_charge_equilibration->module~mod_structures module~mod_training_charge_equilibration->module~mod_abstract_electrostatics module~mod_training_charge_equilibration->module~mod_data_container module~mod_training_charge_equilibration->module~mod_linalg module~mod_cross_matrix mod_cross_matrix module~mod_training_charge_equilibration->module~mod_cross_matrix module~mod_ewald_summation mod_ewald_summation module~mod_training_charge_equilibration->module~mod_ewald_summation module~mod_pair_electrostatics mod_pair_electrostatics module~mod_training_charge_equilibration->module~mod_pair_electrostatics module~mod_cross_matrix->module~mod_precision module~mod_cross_matrix->module~mod_linalg 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_ewald_summation->module~mod_precision module~mod_ewald_summation->module~mod_abstract_electrostatics module~mod_ewald_summation->module~mod_constants module~mod_ewald_summation->module~mod_linalg module~mod_ewald_summation->module~mod_outer_product module~mod_ewald_summation->module~mod_neighbor_grid module~mod_ewald_summation->module~mod_neighborlist_helper module~mod_ewald_summation->module~mod_pair_electrostatics module~mod_genericfile->module~mod_mpi module~mod_genericfile->module~mod_throw module~mod_genericfile->module~mod_io module~mod_pair_electrostatics->module~mod_precision module~mod_pair_electrostatics->module~mod_throw module~mod_pair_electrostatics->module~mod_abstract_electrostatics module~mod_pair_electrostatics->module~mod_constants module~mod_spin_prefactor->module~mod_feature_map_neighborlist module~mod_spin_prefactor->module~mod_precision module~mod_statisticsfile->module~mod_mpi module~mod_statisticsfile->module~mod_abstract_broadcast_file module~mod_statisticsfile->module~mod_statistics_container module~mod_table->module~mod_precision module~mod_table->module~mod_throw module~mod_table->module~mod_io module~mod_table->module~mod_decorations

Used By

module~~mod_evaluate_4g_single_structure~~UsedByGraph module~mod_evaluate_4g_single_structure mod_evaluate_4g_single_structure module~mod_post_processing_4g_single_structure mod_post_processing_4g_single_structure module~mod_post_processing_4g_single_structure->module~mod_evaluate_4g_single_structure module~mod_post_processing_wrapper_single_structure mod_post_processing_wrapper_single_structure module~mod_post_processing_wrapper_single_structure->module~mod_evaluate_4g_single_structure module~mod_post_processing_wrapper_single_structure->module~mod_post_processing_4g_single_structure module~mod_runner_interface_bindings mod_runner_interface_bindings module~mod_runner_interface_bindings->module~mod_evaluate_4g_single_structure module~mod_lammps_interface mod_lammps_interface module~mod_lammps_interface->module~mod_runner_interface_bindings 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

Procedures Summary

Name Type Description
calculate_charges_4g_single_structure Subroutine Equilibrate global charges for a single structures based on the calculated electronegativity and...
calculate_electrostatics_4g_single_structure_part_1 Subroutine This routine evaluates an electrostatic calculator for a single structure based on...
calculate_electrostatics_4g_single_structure_part_2 Subroutine
calculate_short_range_de_dq_4g_single_structure Subroutine

Procedure Details

subroutine calculate_charges_4g_single_structure

subroutine calculate_charges_4g_single_structure( &
    num_atoms, &
    total_charge, &
    atomic_electronegativities, &
    atomic_hardnesses, &
    qeq_solver, &
    atomic_charges, &
    l_initial_guess &
)

Equilibrate global charges for a single structures based on the calculated electronegativity and hardness values.

Arguments

  • num_atoms : integer [in]– The total number of atoms in the structure. Note that this must always be the global number of atoms, not only the number of atoms owned by this MPI process or their ghost atoms.
  • total_charge : real(DP) [in]– The total charge of the structure to which the sum of all atomic charges is constrained.
  • atomic_electronegativities : real(DP) (dim: (num_atoms)) [in]– The predicted electronegativity of each atom.
  • atomic_hardnesses : real(DP) (dim: (num_atoms)) [in]– The predicted hardess of each atom.
  • qeq_solver : class(AbstractChargeEquilibrator) [inout]– An charge equilibrator that was previously initialized for the current structure.
  • atomic_charges : real(DP) (dim: (num_atoms)) [inout]– The final equilibrated charges for all atoms. They are automatically constrained to the `total_charge` hypersurface. If l_initial_guess is false, the input charges are used as initial guess.
  • l_initial_guess : logical [in]– Whether or not initial guess should be calculated or are provided in atomic_charges array

Called By

proc~~calculate_charges_4g_single_structure~~CalledByGraph proc~calculate_charges_4g_single_structure mod_evaluate_4g_single_structure::calculate_charges_4g_single_structure proc~post_processing_wrapper_single_structure mod_post_processing_wrapper_single_structure::post_processing_wrapper_single_structure proc~post_processing_wrapper_single_structure->proc~calculate_charges_4g_single_structure proc~runner_interface_compute_charges_4g mod_runner_interface_bindings::runner_interface_compute_charges_4g proc~runner_interface_compute_charges_4g->proc~calculate_charges_4g_single_structure proc~predict_multiple_structures mod_predict_multiple_structures::predict_multiple_structures proc~predict_multiple_structures->proc~post_processing_wrapper_single_structure proc~predict_single_structure mod_predict_single_structure::predict_single_structure proc~predict_single_structure->proc~post_processing_wrapper_single_structure proc~output_files_and_cost mod_output_files_and_cost::output_files_and_cost proc~output_files_and_cost->proc~predict_multiple_structures proc~predict_all_chunks mod_predict_all_chunks::predict_all_chunks proc~predict_all_chunks->proc~predict_multiple_structures proc~predict_mode mod_predict_mode::predict_mode proc~predict_mode->proc~predict_multiple_structures proc~predict_structure_interface mod_generic_interface::predict_structure_interface proc~predict_structure_interface->proc~predict_single_structure proc~train_loop_atomic_property mod_train_loop_atomic_property::train_loop_atomic_property proc~train_loop_atomic_property->proc~output_files_and_cost proc~train_loop_short_range mod_train_loop_short_range::train_loop_short_range proc~train_loop_short_range->proc~output_files_and_cost proc~train_mode mod_train_mode::train_mode proc~train_mode->proc~predict_all_chunks proc~train_mode->proc~train_loop_atomic_property proc~train_mode->proc~train_loop_short_range program~runner RuNNer program~runner->proc~predict_mode program~runner->proc~train_mode

subroutine calculate_electrostatics_4g_single_structure_part_1

subroutine calculate_electrostatics_4g_single_structure_part_1( &
    num_atoms, &
    short_range_de_dq, &
    lattice, &
    calculate_forces, &
    calculate_d_energy_d_strain, &
    qeq_solver, &
    atomic_charges, &
    hardness, &
    lagrange_charges, &
    elec_energy, &
    elec_forces, &
    elec_d_energy_d_strain, &
    ldo_force_trick, &
    ldo_elec_force_trick &
)

This routine evaluates an electrostatic calculator for a single structure based on equilibrated atomic charges and applies the first part of the force trick to calculate the total energy, as well as (incomplete) force and d_energy_d_strain contributions.

For a fourth generation (4G) 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 4G electrostatic forces \(\frac{\mathrm{d} E}{\mathrm{d} R}\) are a function of both the Cartesian coordinates \(R\) and the global 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} $$$ Applying the force trick, the electrostatic forces can be calculated as $$$ \frac{\mathrm{d} E_{\mathrm{elec}}}{\mathrm{d} R} = & \frac{\partial E_{\mathrm{elec}}}{\partial R} & + \lambda \frac{\partial \mathbf{A}}{\partial R} * q & + \frac{\partial E_{\mathrm{elec}}}{\partial Q} \cdot \( \frac{\partial\chi}{\partial R} + \frac{\partial J}{\partial R} \) $$$ where \(A\) is the Coulomb matrix, \(\chi\) are the atomic electronegativities and \(J\) is the atomic hardness. This routine handles the first and second parts of that chain rule. The force and strain contributions arising from the environment-dependent electronegativities and hardnesses will be added in calculate_electrostatics_4g_single_structure_part_2.

Arguments

  • num_atoms : integer [in]– The total number of atoms in the structure. Note that this must always be the global number of atoms, not only the number of atoms owned by this MPI process or their ghost atoms.
  • short_range_de_dq : real(DP) (dim: (num_atoms)) [in]– The derivative of the short-range energy with respect to the atomic charge neuron for all atoms in the structure. If electrostatic screening is applied, it should be added to this quantity before passing it to this routine. `short_range_de_dq` is added to the electrostatic energy derivative wrt the atomic charges and used to compute the `lagrange_charges` for the force trick.
  • lattice : real(DP) (dim: (3,3)) [in]– The cell vectors of the structure.
  • calculate_forces : logical [in]– Whether forces are calculated.
  • calculate_d_energy_d_strain : logical [in]– Whether lattice strain contributions are calculated.
  • qeq_solver : class(AbstractChargeEquilibrator) [inout]– An charge equilibrator that was previously initialized for the current structure.
  • atomic_charges : real(DP) (dim: (num_atoms)) [in]– The atomic charges as computed by the qeq_solver for the same committee member that we are currently evaluating.
  • hardness : real(DP) (dim: (num_atoms)) [in]
  • lagrange_charges : real(DP) (dim: (num_atoms)) [out]– The constrained charges for each atom that are used for the force trick.
  • elec_energy : real(DP) [out]– The calculated electrostatic energy.
  • elec_forces : real(DP) (dim: (3,num_atoms)) [out]– The calculated electrostatic forces for all atoms in the structure.
  • elec_d_energy_d_strain : real(DP) (dim: (3,3)) [out]– The calculated lattice strain contributions.
  • ldo_force_trick : logical [in]– Whether the force trick is applied to the electrostatic forces. defaults to `.true.` if not present. The forces will simply be incorrect if this is set to `.false.`, do only use this if you know what you are doing.
  • ldo_elec_force_trick : logical [in]– Whether we consider dE_elec/dq during the force trick. If this is .false., only the short-range dE/dQ term will be used for computing the Lagrangian charges. The electrostatic forces will be incorrect if this is set to `.false.`, do only use this if you know what you are doing. It is needed in some training scenarios.

Called By

proc~~calculate_electrostatics_4g_single_structure_part_1~~CalledByGraph proc~calculate_electrostatics_4g_single_structure_part_1 mod_evaluate_4g_single_structure::calculate_electrostatics_4g_single_structure_part_1 proc~post_processing_4g_single_structure mod_post_processing_4g_single_structure::post_processing_4g_single_structure proc~post_processing_4g_single_structure->proc~calculate_electrostatics_4g_single_structure_part_1 proc~runner_interface_evaluate_electrostatics_4g_part_1 mod_runner_interface_bindings::runner_interface_evaluate_electrostatics_4g_part_1 proc~runner_interface_evaluate_electrostatics_4g_part_1->proc~calculate_electrostatics_4g_single_structure_part_1 proc~post_processing_wrapper_single_structure mod_post_processing_wrapper_single_structure::post_processing_wrapper_single_structure proc~post_processing_wrapper_single_structure->proc~post_processing_4g_single_structure proc~predict_multiple_structures mod_predict_multiple_structures::predict_multiple_structures proc~predict_multiple_structures->proc~post_processing_wrapper_single_structure proc~predict_single_structure mod_predict_single_structure::predict_single_structure proc~predict_single_structure->proc~post_processing_wrapper_single_structure proc~output_files_and_cost mod_output_files_and_cost::output_files_and_cost proc~output_files_and_cost->proc~predict_multiple_structures proc~predict_all_chunks mod_predict_all_chunks::predict_all_chunks proc~predict_all_chunks->proc~predict_multiple_structures proc~predict_mode mod_predict_mode::predict_mode proc~predict_mode->proc~predict_multiple_structures proc~predict_structure_interface mod_generic_interface::predict_structure_interface proc~predict_structure_interface->proc~predict_single_structure proc~train_loop_atomic_property mod_train_loop_atomic_property::train_loop_atomic_property proc~train_loop_atomic_property->proc~output_files_and_cost proc~train_loop_short_range mod_train_loop_short_range::train_loop_short_range proc~train_loop_short_range->proc~output_files_and_cost proc~train_mode mod_train_mode::train_mode proc~train_mode->proc~predict_all_chunks proc~train_mode->proc~train_loop_atomic_property proc~train_mode->proc~train_loop_short_range program~runner RuNNer program~runner->proc~predict_mode program~runner->proc~train_mode

subroutine calculate_electrostatics_4g_single_structure_part_2

subroutine calculate_electrostatics_4g_single_structure_part_2( &
    num_atoms, &
    num_local_atoms, &
    atom_offset_on_process, &
    lagrange_charges, &
    charges, &
    chi_feature_calculator, &
    hardness_feature_calculator, &
    neighbor_lists, &
    d_chi_d_features, &
    d_hardness_d_features, &
    calculate_forces, &
    calculate_d_energy_d_strain, &
    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.
  • atom_offset_on_process : integer [in]– The offset of the id on process for all local atoms.
  • lagrange_charges : real(DP) (dim: (num_atoms)) [in]– The previously calculated auxiliary charges for each atom in the structure.
  • charges : real(DP) (dim: (num_atoms)) [in]– The previously calculated charges for each atom in the structure.
  • chi_feature_calculator : type(FeatureCalculator) [in]– An evaluated feature calculator containing all derivatives dG/dxyz for the features of the atomic electronegativities.
  • hardness_feature_calculator : type(FeatureCalculator) [in]– An evaluated feature calculator containing all derivatives dG/dxyz for the features of the atomic hardnesses.
  • neighbor_lists : type(FeatureMapNeighborList) (dim: (:)) [in]– A list containing at the least the neighbor list used by the given `feature_calculator`s.
  • d_chi_d_features : real(DP) (dim: (:,:)) [in]– The derivatives of the atomic electronegativities with respect to the input features of the model that was used to predict them.
  • d_hardness_d_features : real(DP) (dim: (:,:)) [in]– The derivatives of the atomic hardnesses with respect to the input features of the model that was used to predict them.
  • calculate_forces : logical [in]– Whether forces are calculated.
  • calculate_d_energy_d_strain : logical [in]– Whether lattice strain contributions are calculated.
  • forces : real(DP) (dim: (3,num_atoms)) [inout]– The calculated force contributions of the environment-dependent atomic electronegativities and hardnesses 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 lattice strain contributions of the environment-dependent atomic electronegativities and hardnesses will be added to this array for all local and ghost atoms on this process. This array will usually already contain the strain contributions arising from the direct derivative of the electrostatic energy with respect to the Cartesian coordinates.

Called By

proc~~calculate_electrostatics_4g_single_structure_part_2~~CalledByGraph proc~calculate_electrostatics_4g_single_structure_part_2 mod_evaluate_4g_single_structure::calculate_electrostatics_4g_single_structure_part_2 proc~post_processing_4g_single_structure mod_post_processing_4g_single_structure::post_processing_4g_single_structure proc~post_processing_4g_single_structure->proc~calculate_electrostatics_4g_single_structure_part_2 proc~runner_interface_evaluate_electrostatics_4g_part_2 mod_runner_interface_bindings::runner_interface_evaluate_electrostatics_4g_part_2 proc~runner_interface_evaluate_electrostatics_4g_part_2->proc~calculate_electrostatics_4g_single_structure_part_2 proc~post_processing_wrapper_single_structure mod_post_processing_wrapper_single_structure::post_processing_wrapper_single_structure proc~post_processing_wrapper_single_structure->proc~post_processing_4g_single_structure proc~predict_multiple_structures mod_predict_multiple_structures::predict_multiple_structures proc~predict_multiple_structures->proc~post_processing_wrapper_single_structure proc~predict_single_structure mod_predict_single_structure::predict_single_structure proc~predict_single_structure->proc~post_processing_wrapper_single_structure proc~output_files_and_cost mod_output_files_and_cost::output_files_and_cost proc~output_files_and_cost->proc~predict_multiple_structures proc~predict_all_chunks mod_predict_all_chunks::predict_all_chunks proc~predict_all_chunks->proc~predict_multiple_structures proc~predict_mode mod_predict_mode::predict_mode proc~predict_mode->proc~predict_multiple_structures proc~predict_structure_interface mod_generic_interface::predict_structure_interface proc~predict_structure_interface->proc~predict_single_structure proc~train_loop_atomic_property mod_train_loop_atomic_property::train_loop_atomic_property proc~train_loop_atomic_property->proc~output_files_and_cost proc~train_loop_short_range mod_train_loop_short_range::train_loop_short_range proc~train_loop_short_range->proc~output_files_and_cost proc~train_mode mod_train_mode::train_mode proc~train_mode->proc~predict_all_chunks proc~train_mode->proc~train_loop_atomic_property proc~train_mode->proc~train_loop_short_range program~runner RuNNer program~runner->proc~predict_mode program~runner->proc~train_mode

subroutine calculate_short_range_de_dq_4g_single_structure

subroutine calculate_short_range_de_dq_4g_single_structure( &
    struct, &
    neighbor_lists, &
    feature_calculator_short_range, &
    lee4g, &
    d_atomic_properties_d_features, &
    charge_neuron_scaling, &
    short_range_de_dq, &
    icomm, &
    ee4g_calc, &
    scaled_dv_dq_neigh, &
    de_dv &
)

Arguments

  • struct : type(Structure) [in]
  • neighbor_lists : type(FeatureMapNeighborList) (dim: (:)) [in]
  • feature_calculator_short_range : type(FeatureCalculator) [in]
  • lee4g : logical [in]
  • d_atomic_properties_d_features : real(DP) (dim: (:,:)) [in]
  • charge_neuron_scaling : real(DP) (dim: (MAX_ELEM_NUM)) [in]
  • short_range_de_dq : real(DP) (dim: (struct%num_local_atoms)) [out]
  • icomm : integer [in]
  • ee4g_calc : type(EE4GFeatureCalculator) (dim: (:)) [in]
  • scaled_dv_dq_neigh : real(DP) (dim: (:)) [in]
  • de_dv : real(DP) (dim: (:,:)) [out]– In the ee4g case, this must later be passed to `ee4g_calc%chain_de_dv_geom_to_forces`.

Called By

proc~~calculate_short_range_de_dq_4g_single_structure~~CalledByGraph proc~calculate_short_range_de_dq_4g_single_structure mod_evaluate_4g_single_structure::calculate_short_range_de_dq_4g_single_structure proc~post_processing_wrapper_single_structure mod_post_processing_wrapper_single_structure::post_processing_wrapper_single_structure proc~post_processing_wrapper_single_structure->proc~calculate_short_range_de_dq_4g_single_structure proc~runner_interface_short_range_4g mod_runner_interface_bindings::runner_interface_short_range_4g proc~runner_interface_short_range_4g->proc~calculate_short_range_de_dq_4g_single_structure proc~predict_multiple_structures mod_predict_multiple_structures::predict_multiple_structures proc~predict_multiple_structures->proc~post_processing_wrapper_single_structure proc~predict_single_structure mod_predict_single_structure::predict_single_structure proc~predict_single_structure->proc~post_processing_wrapper_single_structure proc~output_files_and_cost mod_output_files_and_cost::output_files_and_cost proc~output_files_and_cost->proc~predict_multiple_structures proc~predict_all_chunks mod_predict_all_chunks::predict_all_chunks proc~predict_all_chunks->proc~predict_multiple_structures proc~predict_mode mod_predict_mode::predict_mode proc~predict_mode->proc~predict_multiple_structures proc~predict_structure_interface mod_generic_interface::predict_structure_interface proc~predict_structure_interface->proc~predict_single_structure proc~train_loop_atomic_property mod_train_loop_atomic_property::train_loop_atomic_property proc~train_loop_atomic_property->proc~output_files_and_cost proc~train_loop_short_range mod_train_loop_short_range::train_loop_short_range proc~train_loop_short_range->proc~output_files_and_cost proc~train_mode mod_train_mode::train_mode proc~train_mode->proc~predict_all_chunks proc~train_mode->proc~train_loop_atomic_property proc~train_mode->proc~train_loop_short_range program~runner RuNNer program~runner->proc~predict_mode program~runner->proc~train_mode