Skip to content

sqnm

Lines: 186 | Visibility: public

Dependencies

Uses

module~~sqnm~~UsesGraph module~sqnm sqnm iso_c_binding iso_c_binding module~sqnm->iso_c_binding module~historylist historylist module~sqnm->module~historylist module~mod_linalg mod_linalg module~sqnm->module~mod_linalg module~mod_precision mod_precision module~sqnm->module~mod_precision module~historylist->iso_c_binding 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 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_settings->module~mod_precision module~mod_settings->module~mod_throw module~mod_constants mod_constants module~mod_settings->module~mod_constants module~mod_cpu_vendor mod_cpu_vendor module~mod_settings->module~mod_cpu_vendor module~mod_io mod_io module~mod_settings->module~mod_io module~mod_periodic_table mod_periodic_table module~mod_settings->module~mod_periodic_table module~mod_throw->iso_c_binding module~mod_throw->module~mod_precision 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->iso_c_binding module~mod_constants->module~mod_precision 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_periodic_table->module~mod_precision module~mod_periodic_table->module~mod_throw module~mod_periodic_table->module~mod_constants module~mod_periodic_table->module~mod_io module~mod_array_helpers mod_array_helpers module~mod_periodic_table->module~mod_array_helpers module~mod_sort->module~mod_precision module~mod_array_helpers->module~mod_precision module~mod_array_helpers->module~mod_throw

Used By

module~~sqnm~~UsedByGraph module~sqnm sqnm module~mod_iterative_charge_equilibration_sqnm mod_iterative_charge_equilibration_sqnm module~mod_iterative_charge_equilibration_sqnm->module~sqnm module~mod_initialize mod_initialize module~mod_initialize->module~mod_iterative_charge_equilibration_sqnm 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
SQNMOptimizer This class is an implementation of the stabilized quasi newton optimization method. More...

Procedures Summary

Name Type Description
get_lower_bound Function calculates an energy uncertainty (see eq. 20 of vc-sqnm paper) The estimate is only accurate...
initialize_sqnm Subroutine
sqnm_step Subroutine Calculates a set of new coordinates based on the function value and derivatives provide on...

Derived Types Details

type SQNMOptimizer

This class is an implementation of the stabilized quasi newton optimization method. More informations about the algorithm can be found here: https://aip.scitation.org/doi/10.1063/1.4905665

Components

  • nhistx : integer(c_int)
  • ndim : integer(c_int)
  • eps_subsp : real(c_double)
  • alpha0 : real(c_double)
  • x_list : type(hist_list)
  • flist : type(hist_list)
  • alpha : real(c_double)
  • dir_of_descent : real(c_double)
  • prev_f : real(c_double)– previous value of target function
  • prev_df_dx : real(c_double)– previous derivative of target function
  • s_evec : real(c_double)
  • s_eval : real(c_double)
  • dr_subsp : real(c_double)
  • df_subsp : real(c_double)
  • h_evec_subsp : real(c_double)
  • h_evec : real(c_double)
  • h_eval : real(c_double)
  • res : real(c_double)
  • res_temp : real(c_double)
  • gainratio : real(c_double)
  • nhist : integer
  • expected_positions : real(c_double)
  • estimate_step_size : logical
  • lwork : integer
  • work : real(DP)

Type-Bound Procedures

Name Attributes Binding
initialize_sqnm public ⇒ initialize_sqnm
sqnm_step public ⇒ sqnm_step
get_lower_bound public ⇒ get_lower_bound

Inherits

type~~sqnmoptimizer~~InheritsGraph type~sqnmoptimizer SQNMOptimizer type~hist_list hist_list type~sqnmoptimizer->type~hist_list x_list, flist

Inherited By

type~~sqnmoptimizer~~InheritedByGraph type~sqnmoptimizer SQNMOptimizer type~iterativesqnmchargeequilibrator IterativeSQNMChargeEquilibrator type~iterativesqnmchargeequilibrator->type~sqnmoptimizer lin_solve

Procedure Details

function get_lower_bound

function get_lower_bound( &
    t &
)

calculates an energy uncertainty (see eq. 20 of vc-sqnm paper) The estimate is only accurate when the optimization is converged.

Arguments


subroutine initialize_sqnm

subroutine initialize_sqnm( &
    t, &
    ndim, &
    nhistx, &
    alpha, &
    alpha0, &
    eps_subsp &
)

Arguments

  • t : class(SQNMOptimizer)
  • ndim : integer(c_int)– dimension of the optimization problem
  • nhistx : integer(c_int)– maximal length of history list
  • alpha : real(c_double)– Initial step size. Should be approximately the inverse of the largest eigenvalue of the Hessian matrix.
  • alpha0 : real(c_double)– Lowest step size that is allowed.
  • eps_subsp : real(c_double)– Lower limit on linear dependencies in history list.

Called By

proc~~initialize_sqnm~~CalledByGraph proc~initialize_sqnm sqnm::SQNMOptimizer%initialize_sqnm proc~sqnm_initial_iteration mod_iterative_charge_equilibration_sqnm::IterativeSQNMChargeEquilibrator%sqnm_initial_iteration proc~sqnm_initial_iteration->proc~initialize_sqnm

subroutine sqnm_step

subroutine sqnm_step( &
    t, &
    x, &
    f_of_x, &
    df_dx, &
    dir_of_descent &
)

Calculates a set of new coordinates based on the function value and derivatives provide on input. The idea behind this function is, that the user evaluates the function at the new point this method suggested and then calls this method again with the function value at the new point until convergence was reached.

first step compute eq. 13

Arguments

  • t : class(SQNMOptimizer)
  • x : real(c_double) (dim: (t%ndim)) [in]– Array containg position vector x.
  • f_of_x : real(c_double) [in]– Value of target function at point x.
  • df_dx : real(c_double) (dim: (t%ndim)) [in]– derivative of function f with respect to x.
  • dir_of_descent : real(c_double) (dim: (t%ndim)) [out]– Direction of descent x+dir_of_descent is the new point of the function that should be evaluated by the user.

Called By

proc~~sqnm_step~~CalledByGraph proc~sqnm_step sqnm::SQNMOptimizer%sqnm_step proc~sqnm_iteration mod_iterative_charge_equilibration_sqnm::IterativeSQNMChargeEquilibrator%sqnm_iteration proc~sqnm_iteration->proc~sqnm_step