mod_iterative_charge_equilibration_sqnm¶
Quasi-Newton optimization method for the iterative QeQ solver. author: Jonas A. Finkler, Moritz Gubler.
Dependencies¶
Module Variables¶
-
MAX_HISTORY_LENGTH: integer -
INITIAL_STEP_SIZE: real(DP) -
MIN_STEP_SIZE: real(DP) -
SUBSPACE_TOL: real(DP)
Derived Types Summary¶
| Name | Description |
|---|---|
IterativeSQNMChargeEquilibrator |
Procedures Summary¶
| Name | Type | Description |
|---|---|---|
sqnm_initial_iteration |
Subroutine | |
sqnm_iteration |
Subroutine |
Derived Types Details¶
type IterativeSQNMChargeEquilibrator¶
Components
-
nat: integer– Inherited from AbstractChargeEquilibrator -
hardness: real(DP) (dim: (:))– Inherited from AbstractChargeEquilibrator -
elec_calc: class(AbstractElectrostaticsCalculator)– Inherited from AbstractChargeEquilibrator -
iter_tol: real(DP)– Inherited from AbstractChargeEquilibrator -
electro_precision: real(DP)– Inherited from AbstractChargeEquilibrator -
pos: real(DP) (dim: (:,:))– Inherited from AbstractChargeEquilibrator -
lat: real(DP) (dim: (3,3))– Inherited from AbstractChargeEquilibrator -
energy: real(DP)– Inherited from AbstractChargeEquilibrator -
charges: real(DP) (dim: (:))– Inherited from AbstractChargeEquilibrator -
electronegativities: real(DP) (dim: (:))– Inherited from AbstractChargeEquilibrator -
lagrange_charges: real(DP) (dim: (:))– Inherited from AbstractChargeEquilibrator -
dq_dchi: real(DP) (dim: (:,:))– Inherited from AbstractChargeEquilibrator -
dq_dhardness: real(DP) (dim: (:,:))– Inherited from AbstractChargeEquilibrator -
forces: real(DP) (dim: (:,:))– Inherited from AbstractChargeEquilibrator -
stress: real(DP) (dim: (3,3))– Inherited from AbstractChargeEquilibrator -
calc_a_matrix: logical– Inherited from AbstractChargeEquilibrator -
lperiodic: logical– Inherited from AbstractChargeEquilibrator -
p_inverse: real(DP) (dim: (:))– Inherited from AbstractIterativeChargeEquilibrator -
f_of_x: real(DP) -
df_dx: real(DP) (dim: (:)) -
lin_solve: type(SQNMOptimizer)
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 | ⇒ sqnm_initial_iteration |
| iteration | public | ⇒ sqnm_iteration |
Inherits
Procedure Details¶
subroutine sqnm_initial_iteration¶
subroutine sqnm_initial_iteration( &
self, &
rhs, &
sum_x, &
x, &
df_dx &
)
Arguments
-
self: class(IterativeSQNMChargeEquilibrator) [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 sqnm_iteration¶
subroutine sqnm_iteration( &
self, &
rhs, &
sum_x, &
x, &
df_dx &
)
Arguments
-
self: class(IterativeSQNMChargeEquilibrator) [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