32#include "./base/base_uses.f90"
38 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'almo_scf_env_methods'
54 CHARACTER(len=*),
PARAMETER :: routinen =
'almo_scf_env_create'
56 INTEGER :: handle, nallocate
61 CALL timeset(routinen, handle)
63 ALLOCATE (almo_scf_env)
66 CALL get_qs_env(qs_env, input=input, dft_control=dft_control)
69 CALL almo_scf_init_read_write_input(input, almo_scf_env)
72 almo_scf_env%nspins = dft_control%nspins
73 almo_scf_env%almo_history%nstore = almo_scf_env%almo_extrapolation_order
74 almo_scf_env%almo_history%istore = 0
76 nallocate = max(1, almo_scf_env%almo_extrapolation_order)
77 ALLOCATE (almo_scf_env%almo_history%matrix_p_up_down(almo_scf_env%nspins, nallocate))
78 ALLOCATE (almo_scf_env%almo_history%matrix_t(almo_scf_env%nspins))
79 almo_scf_env%xalmo_history%nstore = almo_scf_env%xalmo_extrapolation_order
80 almo_scf_env%xalmo_history%istore = 0
81 nallocate = max(1, almo_scf_env%xalmo_extrapolation_order)
82 ALLOCATE (almo_scf_env%xalmo_history%matrix_p_up_down(almo_scf_env%nspins, nallocate))
84 ALLOCATE (almo_scf_env%xalmo_history%matrix_t(almo_scf_env%nspins))
87 CALL set_qs_env(qs_env, almo_scf_env=almo_scf_env)
101 SUBROUTINE almo_scf_init_read_write_input(input, almo_scf_env)
105 CHARACTER(len=*),
PARAMETER :: routinen =
'almo_scf_init_read_write_input'
108 TYPE(
section_vals_type),
POINTER :: almo_analysis_section, almo_opt_diis_section, &
109 almo_opt_pcg_section, almo_opt_trustr_section, almo_scf_section, matrix_iterate_section, &
110 nlmo_opt_pcg_section, penalty_section, xalmo_opt_newton_pcg_section, &
111 xalmo_opt_pcg_section, xalmo_opt_trustr_section
113 CALL timeset(routinen, handle)
117 "ALMO_OPTIMIZER_DIIS")
119 "ALMO_OPTIMIZER_PCG")
121 "ALMO_OPTIMIZER_TRUSTR")
123 "XALMO_OPTIMIZER_PCG")
125 "XALMO_OPTIMIZER_TRUSTR")
127 "NLMO_OPTIMIZER_PCG")
130 "XALMO_NEWTON_PCG_SOLVER")
137 r_val=almo_scf_env%eps_filter)
139 i_val=almo_scf_env%almo_scf_guess)
141 i_val=almo_scf_env%almo_update_algorithm)
143 i_val=almo_scf_env%xalmo_update_algorithm)
145 i_val=almo_scf_env%xalmo_trial_wf)
147 i_val=almo_scf_env%sigma_inv_algorithm)
149 i_val=almo_scf_env%deloc_method)
151 r_val=almo_scf_env%quencher_r0_factor)
153 i_val=almo_scf_env%almo_extrapolation_order)
154 almo_scf_env%almo_extrapolation_order = max(0, almo_scf_env%almo_extrapolation_order)
156 i_val=almo_scf_env%xalmo_extrapolation_order)
157 almo_scf_env%xalmo_extrapolation_order = max(0, almo_scf_env%xalmo_extrapolation_order)
159 l_val=almo_scf_env%return_orthogonalized_mos)
161 l_val=almo_scf_env%construct_nlmos)
164 r_val=almo_scf_env%eps_lanczos)
166 i_val=almo_scf_env%order_lanczos)
168 i_val=almo_scf_env%max_iter_lanczos)
170 r_val=almo_scf_env%matrix_iter_eps_error_factor)
174 r_val=almo_scf_env%opt_block_diag_diis%eps_error)
176 i_val=almo_scf_env%opt_block_diag_diis%max_iter)
178 r_val=almo_scf_env%opt_block_diag_diis%eps_error_early)
180 i_val=almo_scf_env%opt_block_diag_diis%max_iter_early)
182 i_val=almo_scf_env%opt_block_diag_diis%ndiis)
185 r_val=almo_scf_env%opt_block_diag_pcg%eps_error)
187 i_val=almo_scf_env%opt_block_diag_pcg%max_iter)
189 r_val=almo_scf_env%opt_block_diag_pcg%eps_error_early)
191 i_val=almo_scf_env%opt_block_diag_pcg%max_iter_early)
193 i_val=almo_scf_env%opt_block_diag_pcg%max_iter_outer_loop)
195 r_val=almo_scf_env%opt_block_diag_pcg%lin_search_eps_error)
197 r_val=almo_scf_env%opt_block_diag_pcg%lin_search_step_size_guess)
199 r_val=almo_scf_env%opt_block_diag_pcg%neglect_threshold)
201 i_val=almo_scf_env%opt_block_diag_pcg%conjugator)
203 i_val=almo_scf_env%opt_block_diag_pcg%preconditioner)
206 r_val=almo_scf_env%opt_block_diag_trustr%eps_error)
208 i_val=almo_scf_env%opt_block_diag_trustr%max_iter)
210 i_val=almo_scf_env%opt_block_diag_trustr%trustr_algorithm)
212 r_val=almo_scf_env%opt_block_diag_trustr%eps_error_early)
214 i_val=almo_scf_env%opt_block_diag_trustr%max_iter_early)
216 i_val=almo_scf_env%opt_block_diag_trustr%max_iter_outer_loop)
218 r_val=almo_scf_env%opt_block_diag_trustr%rho_do_not_update)
219 almo_scf_env%opt_block_diag_trustr%rho_do_not_update = &
220 min(max(almo_scf_env%opt_block_diag_trustr%rho_do_not_update, 0.0_dp), 0.25_dp)
222 r_val=almo_scf_env%opt_block_diag_trustr%model_grad_norm_ratio)
224 r_val=almo_scf_env%opt_block_diag_trustr%initial_trust_radius)
226 r_val=almo_scf_env%opt_block_diag_trustr%max_trust_radius)
228 i_val=almo_scf_env%opt_block_diag_trustr%conjugator)
230 i_val=almo_scf_env%opt_block_diag_trustr%preconditioner)
233 r_val=almo_scf_env%opt_xalmo_trustr%eps_error)
235 i_val=almo_scf_env%opt_xalmo_trustr%max_iter)
237 i_val=almo_scf_env%opt_xalmo_trustr%trustr_algorithm)
239 r_val=almo_scf_env%opt_xalmo_trustr%eps_error_early)
241 i_val=almo_scf_env%opt_xalmo_trustr%max_iter_early)
243 i_val=almo_scf_env%opt_xalmo_trustr%max_iter_outer_loop)
245 r_val=almo_scf_env%opt_xalmo_trustr%rho_do_not_update)
246 almo_scf_env%opt_xalmo_trustr%rho_do_not_update = &
247 min(max(almo_scf_env%opt_xalmo_trustr%rho_do_not_update, 0.0_dp), 0.25_dp)
249 r_val=almo_scf_env%opt_xalmo_trustr%model_grad_norm_ratio)
251 r_val=almo_scf_env%opt_xalmo_trustr%initial_trust_radius)
253 r_val=almo_scf_env%opt_xalmo_trustr%max_trust_radius)
255 i_val=almo_scf_env%opt_xalmo_trustr%conjugator)
257 i_val=almo_scf_env%opt_xalmo_trustr%preconditioner)
260 r_val=almo_scf_env%opt_xalmo_pcg%eps_error)
262 i_val=almo_scf_env%opt_xalmo_pcg%max_iter)
264 r_val=almo_scf_env%opt_xalmo_pcg%eps_error_early)
266 i_val=almo_scf_env%opt_xalmo_pcg%max_iter_early)
268 i_val=almo_scf_env%opt_xalmo_pcg%max_iter_outer_loop)
270 r_val=almo_scf_env%opt_xalmo_pcg%lin_search_eps_error)
272 r_val=almo_scf_env%opt_xalmo_pcg%lin_search_step_size_guess)
274 r_val=almo_scf_env%opt_xalmo_pcg%neglect_threshold)
276 i_val=almo_scf_env%opt_xalmo_pcg%conjugator)
278 i_val=almo_scf_env%opt_xalmo_pcg%preconditioner)
282 r_val=almo_scf_env%opt_nlmo_pcg%eps_error)
284 i_val=almo_scf_env%opt_nlmo_pcg%max_iter)
286 r_val=almo_scf_env%opt_nlmo_pcg%eps_error_early)
288 i_val=almo_scf_env%opt_nlmo_pcg%max_iter_early)
290 i_val=almo_scf_env%opt_nlmo_pcg%max_iter_outer_loop)
292 r_val=almo_scf_env%opt_nlmo_pcg%lin_search_eps_error)
294 r_val=almo_scf_env%opt_nlmo_pcg%lin_search_step_size_guess)
296 r_val=almo_scf_env%opt_nlmo_pcg%neglect_threshold)
298 i_val=almo_scf_env%opt_nlmo_pcg%conjugator)
300 i_val=almo_scf_env%opt_nlmo_pcg%preconditioner)
303 i_val=almo_scf_env%opt_nlmo_pcg%opt_penalty%operator_type)
305 "PENALTY_STRENGTH", &
306 r_val=almo_scf_env%opt_nlmo_pcg%opt_penalty%penalty_strength)
308 "PENALTY_STRENGTH_DECREASE_FACTOR", &
309 r_val=almo_scf_env%opt_nlmo_pcg%opt_penalty%penalty_strength_dec_factor)
311 "DETERMINANT_TOLERANCE", &
312 r_val=almo_scf_env%opt_nlmo_pcg%opt_penalty%determinant_tolerance)
314 "FINAL_DETERMINANT", &
315 r_val=almo_scf_env%opt_nlmo_pcg%opt_penalty%final_determinant)
317 "COMPACTIFICATION_FILTER_START", &
318 r_val=almo_scf_env%opt_nlmo_pcg%opt_penalty%compactification_filter_start)
321 l_val=almo_scf_env%opt_nlmo_pcg%opt_penalty%virtual_nlmos)
324 r_val=almo_scf_env%opt_xalmo_newton_pcg_solver%eps_error)
326 i_val=almo_scf_env%opt_xalmo_newton_pcg_solver%max_iter)
328 i_val=almo_scf_env%opt_xalmo_newton_pcg_solver%max_iter_outer_loop)
330 i_val=almo_scf_env%opt_xalmo_newton_pcg_solver%preconditioner)
333 l_val=almo_scf_env%almo_analysis%do_analysis)
335 i_val=almo_scf_env%almo_analysis%frozen_mo_energy_term)
445 almo_scf_env%mu = -0.1_dp
446 almo_scf_env%fixed_mu = .false.
447 almo_scf_env%mixing_fraction = 0.45_dp
448 almo_scf_env%eps_prev_guess = almo_scf_env%eps_filter/1000.0_dp
452 almo_scf_env%deloc_cayley_max_iter = 100
453 almo_scf_env%deloc_use_occ_orbs = .true.
454 almo_scf_env%deloc_cayley_use_virt_orbs = .false.
455 almo_scf_env%deloc_cayley_linear = .false.
456 almo_scf_env%deloc_cayley_eps_convergence = 1.0e-6_dp
457 almo_scf_env%deloc_cayley_occ_precond = .true.
458 almo_scf_env%deloc_cayley_vir_precond = .true.
459 almo_scf_env%deloc_truncate_virt =
virt_full
460 almo_scf_env%deloc_virt_per_domain = -1
462 almo_scf_env%opt_k_eps_convergence = 1.0e-5_dp
463 almo_scf_env%opt_k_max_iter = 100
464 almo_scf_env%opt_k_outer_max_iter = 1
465 almo_scf_env%opt_k_trial_step_size = 0.05_dp
467 almo_scf_env%opt_k_trial_step_size_multiplier = 1.05_dp
468 almo_scf_env%opt_k_conj_iter_start = 0
469 almo_scf_env%opt_k_prec_iter_start = 0
470 almo_scf_env%opt_k_conj_iter_freq = 10000000
471 almo_scf_env%opt_k_prec_iter_freq = 10000000
474 almo_scf_env%quencher_r1_factor = almo_scf_env%quencher_r0_factor
482 almo_scf_env%quencher_s0 = 1.0e-4_dp
483 almo_scf_env%quencher_s1 = 1.0e-6_dp
485 almo_scf_env%envelope_amplitude = 1.0_dp
487 almo_scf_env%logical01 = .false.
488 almo_scf_env%logical02 = .true.
489 almo_scf_env%logical03 = .true.
490 almo_scf_env%logical04 = .true.
491 almo_scf_env%logical05 = .false.
493 almo_scf_env%real01 = almo_scf_env%eps_filter/10.0_dp
494 almo_scf_env%real02 = 0.0_dp
495 almo_scf_env%real03 = 0.0_dp
496 almo_scf_env%real04 = 0.5_dp
498 almo_scf_env%integer01 = 10
499 almo_scf_env%integer02 = 4
500 almo_scf_env%integer03 = 0
501 almo_scf_env%integer04 = 0
502 almo_scf_env%integer05 = 0
507 cpabort(
"Trust region algorithm cannot optimize projected XALMOs")
511 i_val=almo_scf_env%xalmo_update_algorithm)
513 i_val=almo_scf_env%xalmo_trial_wf)
516 cpabort(
"1-step delocalization correction requires a different algorithm")
520 almo_scf_env%almo_update_algorithm .EQ.
almo_scf_skip .AND. &
522 cpabort(
"R0 projector requires optimized ALMOs")
527 cpabort(
"No optimization requested")
530 IF (almo_scf_env%deloc_truncate_virt .EQ.
virt_number .AND. &
531 almo_scf_env%deloc_virt_per_domain .LE. 0)
THEN
532 cpabort(
"specify a positive number of virtual orbitals")
535 IF (almo_scf_env%deloc_truncate_virt .EQ.
virt_minimal)
THEN
536 cpabort(
"VIRT TRUNCATION TO MINIMAL BASIS IS NIY")
540 cpabort(
"use MOLECULAR domains")
544 cpabort(
"use MOLECULAR domains")
548 cpabort(
"use MOLECULAR distr for MOs")
553 cpabort(
"AO blocks cannot be larger than domains")
558 cpabort(
"MO blocks cannot be larger than domains")
562 CALL cp_abort(__location__, &
563 "XALMO_R_CUTOFF_FACTOR is larger than almo_max_cutoff_multiplier. "// &
564 "Increase the hard-coded almo_max_cutoff_multiplier")
568 IF (almo_scf_env%almo_analysis%do_analysis)
THEN
572 cpabort(
"To compute frozen-MO energy term set ALMO_SCF_GUESS MOLECULAR")
577 CALL timestop(handle)
579 END SUBROUTINE almo_scf_init_read_write_input
subroutine, public almo_scf_env_create(qs_env)
Creation and basic initialization of the almo environment.
Types for all ALMO-based methods.
real(kind=dp), parameter, public almo_max_cutoff_multiplier
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
Defines the basic variable types.
integer, parameter, public dp
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Get the QUICKSTEP environment.
subroutine, public set_qs_env(qs_env, super_cell, mos, qmmm, qmmm_periodic, ewald_env, ewald_pw, mpools, rho_external, external_vxc, mask, scf_control, rel_control, qs_charges, ks_env, ks_qmmm_env, wf_history, scf_env, active_space, input, oce, rho_atom_set, rho0_atom_set, rho0_mpole, run_rtp, rtp, rhoz_set, rhoz_tot, ecoul_1c, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, efield, linres_control, xas_env, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, ls_scf_env, do_transport, transport_env, lri_env, lri_density, exstate_env, ec_env, dispersion_env, harris_env, gcp_env, mp2_env, bs_env, kg_env, force, kpoints, wanniercentres, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Set the QUICKSTEP environment.