Skip to content

mod_direct_charge_equilibration

Lines: 63 | Visibility: private

Implementation of a direct solver for the QeQ scheme. author: Jonas A. Finkler, Moritz Gubler.

Dependencies

Uses

module~~mod_direct_charge_equilibration~~UsesGraph module~mod_direct_charge_equilibration mod_direct_charge_equilibration module~mod_abstract_charge_equilibration mod_abstract_charge_equilibration module~mod_direct_charge_equilibration->module~mod_abstract_charge_equilibration module~mod_abstract_electrostatics mod_abstract_electrostatics module~mod_direct_charge_equilibration->module~mod_abstract_electrostatics module~mod_linalg mod_linalg module~mod_direct_charge_equilibration->module~mod_linalg module~mod_precision mod_precision module~mod_direct_charge_equilibration->module~mod_precision module~mod_abstract_charge_equilibration->module~mod_abstract_electrostatics module~mod_abstract_charge_equilibration->module~mod_precision module~mod_periodic_table mod_periodic_table module~mod_abstract_charge_equilibration->module~mod_periodic_table module~mod_structures mod_structures module~mod_abstract_charge_equilibration->module~mod_structures module~mod_abstract_electrostatics->module~mod_precision module~mod_abstract_electrostatics->module~mod_structures module~mod_linalg->module~mod_precision module~cublas_wrapper cublas_wrapper module~mod_linalg->module~cublas_wrapper module~mod_settings mod_settings module~mod_linalg->module~mod_settings module~mod_throw mod_throw module~mod_linalg->module~mod_throw 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~cublas_wrapper->iso_c_binding module~cublas_wrapper->module~mod_settings 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_constants mod_constants module~mod_periodic_table->module~mod_constants module~mod_io mod_io module~mod_periodic_table->module~mod_io module~mod_settings->module~mod_precision module~mod_settings->module~mod_periodic_table 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_settings->module~mod_io module~mod_structures->module~mod_linalg module~mod_structures->module~mod_precision module~mod_structures->module~mod_periodic_table module~mod_structures->module~mod_throw module~mod_structures->module~mod_array_helpers module~mod_structures->module~mod_constants module~mod_mpi mod_mpi module~mod_structures->module~mod_mpi module~mod_structures_helper mod_structures_helper module~mod_structures->module~mod_structures_helper 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_mpi module~mod_sort mod_sort module~mod_throw->module~mod_sort 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_cpu_vendor->iso_c_binding module~mod_io->module~mod_precision 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_sort->module~mod_precision module~mod_structures_helper->module~mod_linalg module~mod_structures_helper->module~mod_precision

Used By

module~~mod_direct_charge_equilibration~~UsedByGraph module~mod_direct_charge_equilibration mod_direct_charge_equilibration module~mod_analyse_a_prime_matrix_eigenvalues mod_analyse_a_prime_matrix_eigenvalues module~mod_analyse_a_prime_matrix_eigenvalues->module~mod_direct_charge_equilibration module~mod_initialize mod_initialize module~mod_initialize->module~mod_direct_charge_equilibration module~mod_predict_mode mod_predict_mode module~mod_predict_mode->module~mod_initialize module~mod_write_outfiles mod_write_outfiles module~mod_predict_mode->module~mod_write_outfiles module~mod_runner_interface_bindings mod_runner_interface_bindings module~mod_runner_interface_bindings->module~mod_initialize 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_cost_calculator mod_cost_calculator 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_cost_calculator module~mod_output_files_and_cost mod_output_files_and_cost 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_initialize 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_train_loop_short_range->module~mod_output_files_and_cost 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 mod_train_mode module~mod_train_mode->module~mod_initialize 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 program~runner RuNNer program~runner->module~mod_initialize program~runner->module~mod_predict_mode program~runner->module~mod_train_mode module~mod_lammps_interface mod_lammps_interface module~mod_lammps_interface->module~mod_runner_interface_bindings module~mod_write_outfiles_training->module~mod_write_outfiles module~mod_cost_calculator->module~mod_write_outfiles_training module~mod_output_files_and_cost->module~mod_cost_calculator 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

Derived Types Summary

Name Description
DirectChargeEquilibrator

Procedures Summary

Name Type Description
initialize_direct Subroutine
solve_linear_system_direct Subroutine call lapack to solve the linear system.
get_eigenvalues Subroutine
construct_a_prime_matrix Subroutine

Derived Types Details

type DirectChargeEquilibrator

Components

Type-Bound Procedures

Name Attributes Binding
initialize_private public ⇒ initialize_private
compute_charges public ⇒ compute_charges
compute_dcharge_delectronegativity public ⇒ compute_dcharge_delectronegativity
compute_dcharge_dhardness public ⇒ compute_dcharge_dhardness
set_hardness public ⇒ set_hardness
set_charges public ⇒ set_charges
get_lagrange_charges public ⇒ get_lagrange_charges
update_structure public ⇒ update_structure
make_initial_charge_guess public ⇒ set_zero_charge_and_lagrange_charge
initialize public ⇒ initialize_direct
solve_linear_system public ⇒ solve_linear_system_direct
get_eigenvalues public ⇒ get_eigenvalues
construct_a_prime_matrix private ⇒ construct_a_prime_matrix

Inherits

type~~directchargeequilibrator~~InheritsGraph type~directchargeequilibrator DirectChargeEquilibrator type~abstractchargeequilibrator AbstractChargeEquilibrator type~directchargeequilibrator->type~abstractchargeequilibrator type~abstractelectrostaticscalculator AbstractElectrostaticsCalculator type~abstractchargeequilibrator->type~abstractelectrostaticscalculator elec_calc

Procedure Details

subroutine initialize_direct

subroutine initialize_direct( &
    self, &
    num_atoms, &
    lperiodic, &
    pos, &
    lat, &
    elec_calc, &
    atomic_sigmas, &
    iter_tol, &
    electro_precision &
)

Arguments

  • self : class(DirectChargeEquilibrator) [out]
  • num_atoms : integer [in]
  • lperiodic : logical [in]
  • pos : real(DP) (dim: (3,num_atoms)) [in]
  • lat : real(DP) (dim: (3,3)) [in]
  • elec_calc : class(AbstractElectrostaticsCalculator) [in]
  • atomic_sigmas : real(DP) (dim: (num_atoms)) [in]
  • iter_tol : real(DP) [in]
  • electro_precision : real(DP) [in]

Called By

proc~~initialize_direct~~CalledByGraph proc~initialize_direct mod_direct_charge_equilibration::DirectChargeEquilibrator%initialize_direct proc~analyse_a_prime_matrix_eigenvalues mod_analyse_a_prime_matrix_eigenvalues::analyse_a_prime_matrix_eigenvalues proc~analyse_a_prime_matrix_eigenvalues->proc~initialize_direct

subroutine solve_linear_system_direct

subroutine solve_linear_system_direct( &
    self, &
    rhs, &
    sum_x, &
    x &
)

call lapack to solve the linear system.

Arguments

  • self : class(DirectChargeEquilibrator) [inout]
  • rhs : real(DP) (dim: (self%nat)) [in]
  • sum_x : real(DP) [in]
  • x : real(DP) (dim: (self%nat)) [inout]

subroutine get_eigenvalues

subroutine get_eigenvalues( &
    self, &
    eigenvalues &
)

Arguments

Called By

proc~~get_eigenvalues~~CalledByGraph proc~get_eigenvalues mod_direct_charge_equilibration::DirectChargeEquilibrator%get_eigenvalues proc~analyse_a_prime_matrix_eigenvalues mod_analyse_a_prime_matrix_eigenvalues::analyse_a_prime_matrix_eigenvalues proc~analyse_a_prime_matrix_eigenvalues->proc~get_eigenvalues

subroutine construct_a_prime_matrix

subroutine construct_a_prime_matrix( &
    self &
)

Arguments

Called By

proc~~construct_a_prime_matrix~~CalledByGraph proc~construct_a_prime_matrix mod_direct_charge_equilibration::DirectChargeEquilibrator%construct_a_prime_matrix proc~get_eigenvalues mod_direct_charge_equilibration::DirectChargeEquilibrator%get_eigenvalues proc~get_eigenvalues->proc~construct_a_prime_matrix proc~solve_linear_system_direct mod_direct_charge_equilibration::DirectChargeEquilibrator%solve_linear_system_direct proc~solve_linear_system_direct->proc~construct_a_prime_matrix proc~analyse_a_prime_matrix_eigenvalues mod_analyse_a_prime_matrix_eigenvalues::analyse_a_prime_matrix_eigenvalues proc~analyse_a_prime_matrix_eigenvalues->proc~get_eigenvalues