Skip to content

mod_iterative_charge_equilibration_cg

Lines: 60 | Visibility: private

Conjugate Gradient methods for the iterative QeQ solver. author: Jonas A. Finkler, Moritz Gubler.

Dependencies

Uses

module~~mod_iterative_charge_equilibration_cg~~UsesGraph module~mod_iterative_charge_equilibration_cg mod_iterative_charge_equilibration_cg module~mod_abstract_iterative_charge_equilibration mod_abstract_iterative_charge_equilibration module~mod_iterative_charge_equilibration_cg->module~mod_abstract_iterative_charge_equilibration module~mod_precision mod_precision module~mod_iterative_charge_equilibration_cg->module~mod_precision module~mod_abstract_iterative_charge_equilibration->module~mod_precision module~mod_abstract_charge_equilibration mod_abstract_charge_equilibration module~mod_abstract_iterative_charge_equilibration->module~mod_abstract_charge_equilibration module~mod_abstract_electrostatics mod_abstract_electrostatics module~mod_abstract_iterative_charge_equilibration->module~mod_abstract_electrostatics module~mod_io mod_io module~mod_abstract_iterative_charge_equilibration->module~mod_io module~mod_pair_electrostatics mod_pair_electrostatics module~mod_abstract_iterative_charge_equilibration->module~mod_pair_electrostatics module~mod_throw mod_throw module~mod_abstract_iterative_charge_equilibration->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~mod_abstract_charge_equilibration->module~mod_precision module~mod_abstract_charge_equilibration->module~mod_abstract_electrostatics 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_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_pair_electrostatics->module~mod_precision module~mod_pair_electrostatics->module~mod_abstract_electrostatics module~mod_pair_electrostatics->module~mod_throw module~mod_constants mod_constants module~mod_pair_electrostatics->module~mod_constants 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_mpi mod_mpi module~mod_throw->module~mod_mpi module~mod_sort mod_sort module~mod_throw->module~mod_sort module~mod_constants->module~mod_precision module~mod_constants->iso_c_binding 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_io module~mod_periodic_table->module~mod_throw module~mod_periodic_table->module~mod_constants module~mod_array_helpers mod_array_helpers module~mod_periodic_table->module~mod_array_helpers module~mod_sort->module~mod_precision module~mod_structures->module~mod_precision module~mod_structures->module~mod_throw module~mod_structures->module~mod_constants module~mod_structures->module~mod_mpi module~mod_structures->module~mod_periodic_table module~mod_structures->module~mod_array_helpers 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_array_helpers->module~mod_precision module~mod_array_helpers->module~mod_throw module~mod_linalg->module~mod_precision module~mod_linalg->module~mod_throw module~cublas_wrapper cublas_wrapper module~mod_linalg->module~cublas_wrapper module~mod_settings mod_settings module~mod_linalg->module~mod_settings 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_settings->module~mod_precision module~mod_settings->module~mod_io module~mod_settings->module~mod_throw module~mod_settings->module~mod_constants module~mod_settings->module~mod_periodic_table module~mod_cpu_vendor mod_cpu_vendor module~mod_settings->module~mod_cpu_vendor module~mod_cpu_vendor->iso_c_binding

Used By

module~~mod_iterative_charge_equilibration_cg~~UsedByGraph module~mod_iterative_charge_equilibration_cg mod_iterative_charge_equilibration_cg module~mod_initialize mod_initialize module~mod_initialize->module~mod_iterative_charge_equilibration_cg 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
IterativeCgChargeEquilibrator

Procedures Summary

Name Type Description
cg_initial_iteration Subroutine
cg_iteration Subroutine @todo Remove commented lines of code.

Derived Types Details

type IterativeCgChargeEquilibrator

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
initialize public ⇒ initialize_iterative
solve_linear_system public ⇒ solve_linear_system_iterative
make_initial_charge_guess public ⇒ make_initial_charge_guess_iterative_solver
make_initial_guess public ⇒ make_initial_guess
calc_f_and_df_dx public ⇒ calc_f_and_df_dx
calc_a_times_vector public ⇒ calc_a_times_vector
constrain_x public ⇒ constrain_x
constrain_df_dx public ⇒ constrain_df_dx
initial_iteration public ⇒ cg_initial_iteration
iteration public ⇒ cg_iteration

Inherits

type~~iterativecgchargeequilibrator~~InheritsGraph type~iterativecgchargeequilibrator IterativeCgChargeEquilibrator type~abstractiterativechargeequilibrator AbstractIterativeChargeEquilibrator type~iterativecgchargeequilibrator->type~abstractiterativechargeequilibrator type~abstractchargeequilibrator AbstractChargeEquilibrator type~abstractiterativechargeequilibrator->type~abstractchargeequilibrator type~abstractelectrostaticscalculator AbstractElectrostaticsCalculator type~abstractchargeequilibrator->type~abstractelectrostaticscalculator elec_calc

Procedure Details

subroutine cg_initial_iteration

subroutine cg_initial_iteration( &
    self, &
    rhs, &
    sum_x, &
    x, &
    df_dx &
)

Arguments

  • self : class(IterativeCgChargeEquilibrator) [inout]
  • rhs : real(DP) (dim: (self%nat)) [in]– Right hand side of the equation
  • sum_x : real(DP) [in]– This is the constraint (total charge)
  • x : real(DP) (dim: (self%nat)) [inout]– solution (and initial guess for iterative methods)
  • df_dx : real(DP) (dim: (self%nat)) [out]– This is used to check convergence

subroutine cg_iteration

subroutine cg_iteration( &
    self, &
    rhs, &
    sum_x, &
    x, &
    df_dx &
)

@todo Remove commented lines of code.

Arguments

  • self : class(IterativeCgChargeEquilibrator) [inout]
  • rhs : real(DP) (dim: (self%nat)) [in]– Right hand side of the equation
  • sum_x : real(DP) [in]– This is the constraint (total charge)
  • x : real(DP) (dim: (self%nat)) [inout]– solution (and initial guess for iterative methods)
  • df_dx : real(DP) (dim: (self%nat)) [out]– This is used to check convergence