(git:495eafe)
Loading...
Searching...
No Matches
pao_main.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Main module for the PAO method
10!> \author Ole Schuett
11! **************************************************************************************************
13 USE bibliography, ONLY: schuett2018,&
14 cite_reference
15 USE cp_dbcsr_api, ONLY: dbcsr_add,&
20 dbcsr_set,&
28 USE kinds, ONLY: dp
33 USE machine, ONLY: m_walltime
35 USE pao_io, ONLY: pao_read_restart,&
41 USE pao_methods, ONLY: &
46 USE pao_ml, ONLY: pao_ml_init,&
52 USE pao_param, ONLY: pao_calc_ab,&
56 USE pao_types, ONLY: pao_env_type
59 USE virial_types, ONLY: virial_type
60#include "./base/base_uses.f90"
61
62 IMPLICIT NONE
63
64 PRIVATE
65
66 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'pao_main'
67
69
70CONTAINS
71
72! **************************************************************************************************
73!> \brief Initialize the PAO environment
74!> \param qs_env ...
75!> \param ls_scf_env ...
76! **************************************************************************************************
77 SUBROUTINE pao_init(qs_env, ls_scf_env)
78 TYPE(qs_environment_type), POINTER :: qs_env
79 TYPE(ls_scf_env_type), TARGET :: ls_scf_env
80
81 CHARACTER(len=*), PARAMETER :: routinen = 'pao_init'
82
83 INTEGER :: handle
84 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s
85 TYPE(pao_env_type), POINTER :: pao
86 TYPE(section_vals_type), POINTER :: input
87
88 IF (.NOT. ls_scf_env%do_pao) RETURN
89
90 CALL timeset(routinen, handle)
91 CALL cite_reference(schuett2018)
92 pao => ls_scf_env%pao_env
93 CALL get_qs_env(qs_env=qs_env, input=input, matrix_s=matrix_s)
94
95 ! parse input
96 CALL parse_pao_section(pao, input)
97
98 CALL pao_init_kinds(pao, qs_env)
99
100 ! train machine learning
101 CALL pao_ml_init(pao, qs_env)
102
103 CALL timestop(handle)
104 END SUBROUTINE pao_init
105
106! **************************************************************************************************
107!> \brief Start a PAO optimization run.
108!> \param qs_env ...
109!> \param ls_scf_env ...
110! **************************************************************************************************
111 SUBROUTINE pao_optimization_start(qs_env, ls_scf_env)
112 TYPE(qs_environment_type), POINTER :: qs_env
113 TYPE(ls_scf_env_type), TARGET :: ls_scf_env
114
115 CHARACTER(len=*), PARAMETER :: routinen = 'pao_optimization_start'
116
117 INTEGER :: handle
118 TYPE(ls_mstruct_type), POINTER :: ls_mstruct
119 TYPE(pao_env_type), POINTER :: pao
120 TYPE(section_vals_type), POINTER :: input, section
121
122 IF (.NOT. ls_scf_env%do_pao) RETURN
123
124 CALL timeset(routinen, handle)
125 CALL get_qs_env(qs_env, input=input)
126 pao => ls_scf_env%pao_env
127 ls_mstruct => ls_scf_env%ls_mstruct
128
129 ! reset state
130 pao%step_start_time = m_walltime()
131 pao%istep = 0
132 pao%matrix_P_ready = .false.
133
134 ! ready stuff that does not depend on atom positions
135 IF (.NOT. pao%constants_ready) THEN
136 CALL pao_build_diag_distribution(pao, qs_env)
137 CALL pao_build_orthogonalizer(pao, qs_env)
138 CALL pao_build_selector(pao, qs_env)
139 CALL pao_build_core_hamiltonian(pao, qs_env)
140 pao%constants_ready = .true.
141 END IF
142
143 CALL pao_param_init(pao, qs_env)
144
145 ! ready PAO parameter matrix_X
146 IF (.NOT. pao%matrix_X_ready) THEN
147 CALL pao_build_matrix_x(pao, qs_env)
148 CALL pao_print_atom_info(pao)
149 IF (len_trim(pao%restart_file) > 0) THEN
150 CALL pao_read_restart(pao, qs_env)
151 ELSE IF (SIZE(pao%ml_training_set) > 0) THEN
152 CALL pao_ml_predict(pao, qs_env)
153 ELSE IF (ALLOCATED(pao%models)) THEN
154 CALL pao_model_predict(pao, qs_env)
155 ELSE
156 CALL pao_param_initial_guess(pao, qs_env)
157 END IF
158 pao%matrix_X_ready = .true.
159 ELSE IF (SIZE(pao%ml_training_set) > 0) THEN
160 CALL pao_ml_predict(pao, qs_env)
161 ELSE IF (ALLOCATED(pao%models)) THEN
162 CALL pao_model_predict(pao, qs_env)
163 ELSE
164 IF (pao%iw > 0) WRITE (pao%iw, *) "PAO| reusing matrix_X from previous optimization"
165 END IF
166
167 ! init line-search
168 section => section_vals_get_subs_vals(input, "DFT%LS_SCF%PAO%LINE_SEARCH")
169 CALL linesearch_init(pao%linesearch, section, "PAO|")
170
171 ! create some more matrices
172 CALL dbcsr_copy(pao%matrix_G, pao%matrix_X)
173 CALL dbcsr_set(pao%matrix_G, 0.0_dp)
174
175 CALL dbcsr_create(ls_mstruct%matrix_A, template=pao%matrix_Y)
176 CALL dbcsr_reserve_diag_blocks(ls_mstruct%matrix_A)
177 CALL dbcsr_create(ls_mstruct%matrix_B, template=pao%matrix_Y)
178 CALL dbcsr_reserve_diag_blocks(ls_mstruct%matrix_B)
179
180 ! fill PAO transformation matrices
181 CALL pao_calc_ab(pao, qs_env, ls_scf_env, gradient=.false.)
182
183 CALL timestop(handle)
184 END SUBROUTINE pao_optimization_start
185
186! **************************************************************************************************
187!> \brief Called after the SCF optimization, updates the PAO basis.
188!> \param qs_env ...
189!> \param ls_scf_env ...
190!> \param pao_is_done ...
191! **************************************************************************************************
192 SUBROUTINE pao_update(qs_env, ls_scf_env, pao_is_done)
193 TYPE(qs_environment_type), POINTER :: qs_env
194 TYPE(ls_scf_env_type), TARGET :: ls_scf_env
195 LOGICAL, INTENT(OUT) :: pao_is_done
196
197 CHARACTER(len=*), PARAMETER :: routinen = 'pao_update'
198
199 INTEGER :: handle, icycle
200 LOGICAL :: cycle_converged, do_mixing, should_stop
201 REAL(kind=dp) :: energy, penalty
202 TYPE(dbcsr_type) :: matrix_x_mixing
203 TYPE(ls_mstruct_type), POINTER :: ls_mstruct
204 TYPE(pao_env_type), POINTER :: pao
205
206 IF (.NOT. ls_scf_env%do_pao) THEN
207 pao_is_done = .true.
208 RETURN
209 END IF
210
211 ls_mstruct => ls_scf_env%ls_mstruct
212 pao => ls_scf_env%pao_env
213
214 IF (.NOT. pao%matrix_P_ready) THEN
215 CALL pao_guess_initial_p(pao, qs_env, ls_scf_env)
216 pao%matrix_P_ready = .true.
217 END IF
218
219 IF (pao%max_pao == 0) THEN
220 pao_is_done = .true.
221 RETURN
222 END IF
223
224 IF (pao%need_initial_scf) THEN
225 pao_is_done = .false.
226 pao%need_initial_scf = .false.
227 IF (pao%iw > 0) WRITE (pao%iw, *) "PAO| Performing initial SCF optimization."
228 RETURN
229 END IF
230
231 CALL timeset(routinen, handle)
232
233 ! perform mixing once we are well into the optimization
234 do_mixing = pao%mixing /= 1.0_dp .AND. pao%istep > 1
235 IF (do_mixing) THEN
236 CALL dbcsr_copy(matrix_x_mixing, pao%matrix_X)
237 END IF
238
239 cycle_converged = .false.
240 icycle = 0
241 CALL linesearch_reset(pao%linesearch)
242 CALL pao_opt_init(pao)
243
244 DO WHILE (.true.)
245 pao%istep = pao%istep + 1
246
247 IF (pao%iw > 0) WRITE (pao%iw, "(A,I9,A)") " PAO| ======================= Iteration: ", &
248 pao%istep, " ============================="
249
250 ! calc energy and check trace_PS
251 CALL pao_calc_energy(pao, qs_env, ls_scf_env, energy)
252 CALL pao_check_trace_ps(ls_scf_env)
253
254 IF (pao%linesearch%starts) THEN
255 icycle = icycle + 1
256 ! calc new gradient including penalty terms
257 CALL pao_calc_ab(pao, qs_env, ls_scf_env, gradient=.true., penalty=penalty)
258 CALL pao_check_grad(pao, qs_env, ls_scf_env)
259
260 ! calculate new direction for line-search
261 CALL pao_opt_new_dir(pao, icycle)
262
263 !backup X
264 CALL dbcsr_copy(pao%matrix_X_orig, pao%matrix_X)
265
266 ! print info and convergence test
267 CALL pao_test_convergence(pao, ls_scf_env, energy, cycle_converged)
268 IF (cycle_converged) THEN
269 pao_is_done = icycle < 3
270 IF (pao_is_done .AND. pao%iw > 0) WRITE (pao%iw, *) "PAO| converged after ", pao%istep, " steps :-)"
271 EXIT
272 END IF
273
274 ! if we have reached the maximum number of cycles exit in order
275 ! to restart with a fresh hamiltonian
276 IF (icycle >= pao%max_cycles) THEN
277 IF (pao%iw > 0) WRITE (pao%iw, *) "PAO| CG not yet converged after ", icycle, " cylces."
278 pao_is_done = .false.
279 EXIT
280 END IF
281
282 IF (mod(icycle, pao%write_cycles) == 0) &
283 CALL pao_write_restart(pao, qs_env, energy) ! write an intermediate restart file
284 END IF
285
286 ! check for early abort without convergence?
287 CALL external_control(should_stop, "PAO", start_time=qs_env%start_time, target_time=qs_env%target_time)
288 IF (should_stop .OR. pao%istep >= pao%max_pao) THEN
289 IF (pao%ignore_convergence_failure) THEN
290 cpwarn("PAO not converged!")
291 ELSE
292 cpabort("PAO not converged!")
293 END IF
294 pao_is_done = .true.
295 EXIT
296 END IF
297
298 ! perform line-search step
299 CALL linesearch_step(pao%linesearch, energy=energy, slope=pao%norm_G**2)
300
301 IF (pao%linesearch%step_size < 1e-9_dp) cpabort("PAO gradient is wrong.")
302
303 CALL dbcsr_copy(pao%matrix_X, pao%matrix_X_orig) !restore X
304 CALL dbcsr_add(pao%matrix_X, pao%matrix_D, 1.0_dp, pao%linesearch%step_size)
305 END DO
306
307 ! perform mixing of matrix_X
308 IF (do_mixing) THEN
309 CALL dbcsr_add(pao%matrix_X, matrix_x_mixing, pao%mixing, 1.0_dp - pao%mixing)
310 CALL dbcsr_release(matrix_x_mixing)
311 IF (pao%iw > 0) WRITE (pao%iw, *) "PAO| Recalculating energy after mixing."
312 CALL pao_calc_energy(pao, qs_env, ls_scf_env, energy)
313 END IF
314
315 CALL pao_write_restart(pao, qs_env, energy)
316 CALL pao_opt_finalize(pao)
317
318 CALL timestop(handle)
319 END SUBROUTINE pao_update
320
321! **************************************************************************************************
322!> \brief Calculate PAO forces and store density matrix for future ASPC extrapolations
323!> \param qs_env ...
324!> \param ls_scf_env ...
325!> \param pao_is_done ...
326! **************************************************************************************************
327 SUBROUTINE pao_post_scf(qs_env, ls_scf_env, pao_is_done)
328 TYPE(qs_environment_type), POINTER :: qs_env
329 TYPE(ls_scf_env_type), TARGET :: ls_scf_env
330 LOGICAL, INTENT(IN) :: pao_is_done
331
332 CHARACTER(len=*), PARAMETER :: routinen = 'pao_post_scf'
333
334 INTEGER :: handle
335 LOGICAL :: use_virial
336 TYPE(virial_type), POINTER :: virial
337
338 IF (.NOT. ls_scf_env%do_pao) RETURN
339 IF (.NOT. pao_is_done) RETURN
340
341 CALL timeset(routinen, handle)
342
343 ! print out the matrices here before pao_store_P converts them back into matrices in
344 ! terms of the primary basis
345 CALL pao_write_ks_matrix_csr(qs_env, ls_scf_env)
346 CALL pao_write_s_matrix_csr(qs_env, ls_scf_env)
347 CALL pao_write_hcore_matrix_csr(qs_env, ls_scf_env)
348 CALL pao_write_p_matrix_csr(qs_env, ls_scf_env)
349
350 CALL pao_store_p(qs_env, ls_scf_env)
351 IF (ls_scf_env%calculate_forces) CALL pao_add_forces(qs_env, ls_scf_env)
352
353 CALL get_qs_env(qs_env=qs_env, virial=virial)
354 use_virial = virial%pv_availability .AND. (.NOT. virial%pv_numer)
355 IF (use_virial .AND. ls_scf_env%calculate_forces) THEN
356 cpabort("Analytical stress tensor not implemented for PAO.")
357 END IF
358
359 CALL timestop(handle)
360 END SUBROUTINE pao_post_scf
361
362! **************************************************************************************************
363!> \brief Finish a PAO optimization run.
364!> \param ls_scf_env ...
365! **************************************************************************************************
366 SUBROUTINE pao_optimization_end(ls_scf_env)
367 TYPE(ls_scf_env_type), TARGET :: ls_scf_env
368
369 CHARACTER(len=*), PARAMETER :: routinen = 'pao_optimization_end'
370
371 INTEGER :: handle
372 TYPE(ls_mstruct_type), POINTER :: ls_mstruct
373 TYPE(pao_env_type), POINTER :: pao
374
375 IF (.NOT. ls_scf_env%do_pao) RETURN
376
377 pao => ls_scf_env%pao_env
378 ls_mstruct => ls_scf_env%ls_mstruct
379
380 CALL timeset(routinen, handle)
381
382 CALL pao_param_finalize(pao)
383
384 ! We keep pao%matrix_X for next scf-run, e.g. during MD or GEO-OPT
385 CALL dbcsr_release(pao%matrix_X_orig)
386 CALL dbcsr_release(pao%matrix_G)
387 CALL dbcsr_release(ls_mstruct%matrix_A)
388 CALL dbcsr_release(ls_mstruct%matrix_B)
389
390 CALL linesearch_finalize(pao%linesearch)
391
392 CALL timestop(handle)
393 END SUBROUTINE pao_optimization_end
394
395END MODULE pao_main
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public schuett2018
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
subroutine, public dbcsr_release(matrix)
...
subroutine, public dbcsr_add(matrix_a, matrix_b, alpha_scalar, beta_scalar)
...
subroutine, public dbcsr_reserve_diag_blocks(matrix)
Reserves all diagonal blocks.
Routines to handle the external control of CP2K.
subroutine, public external_control(should_stop, flag, globenv, target_time, start_time, force_check)
External manipulations during a run : when the <PROJECT_NAME>.EXIT_$runtype command is sent the progr...
Types needed for a linear scaling quickstep SCF run based on the density matrix.
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
A generic framework to calculate step lengths for 1D line search.
Definition linesearch.F:12
subroutine, public linesearch_finalize(this)
Finzalize line search machinery.
Definition linesearch.F:259
subroutine, public linesearch_init(this, section, label)
Initialize linesearch from given input section.
Definition linesearch.F:195
subroutine, public linesearch_reset(this)
Reset line search to initial state.
Definition linesearch.F:285
subroutine, public linesearch_step(this, energy, slope)
Calculate step length of next line search step.
Definition linesearch.F:299
Machine interface based on Fortran 2003 and POSIX.
Definition machine.F:17
real(kind=dp) function, public m_walltime()
returns time from a real-time clock, protected against rolling early/easily
Definition machine.F:153
subroutine, public parse_pao_section(pao, input)
Declare the PAO input section.
Definition pao_input.F:69
Routines for reading and writing restart files.
Definition pao_io.F:12
subroutine, public pao_write_p_matrix_csr(qs_env, ls_scf_env)
writing the density matrix (NYA)
Definition pao_io.F:752
subroutine, public pao_write_hcore_matrix_csr(qs_env, ls_scf_env)
writing the core Hamiltonian matrix (NYA)
Definition pao_io.F:710
subroutine, public pao_write_restart(pao, qs_env, energy)
Writes restart file.
Definition pao_io.F:392
subroutine, public pao_write_ks_matrix_csr(qs_env, ls_scf_env)
writing the KS matrix (in terms of the PAO basis) in csr format into a file
Definition pao_io.F:563
subroutine, public pao_write_s_matrix_csr(qs_env, ls_scf_env)
writing the overlap matrix (in terms of the PAO basis) in csr format into a file
Definition pao_io.F:638
subroutine, public pao_read_restart(pao, qs_env)
Reads restart file.
Definition pao_io.F:88
Main module for the PAO method.
Definition pao_main.F:12
subroutine, public pao_post_scf(qs_env, ls_scf_env, pao_is_done)
Calculate PAO forces and store density matrix for future ASPC extrapolations.
Definition pao_main.F:328
subroutine, public pao_update(qs_env, ls_scf_env, pao_is_done)
Called after the SCF optimization, updates the PAO basis.
Definition pao_main.F:193
subroutine, public pao_init(qs_env, ls_scf_env)
Initialize the PAO environment.
Definition pao_main.F:78
subroutine, public pao_optimization_end(ls_scf_env)
Finish a PAO optimization run.
Definition pao_main.F:367
subroutine, public pao_optimization_start(qs_env, ls_scf_env)
Start a PAO optimization run.
Definition pao_main.F:112
Methods used by pao_main.F.
Definition pao_methods.F:12
subroutine, public pao_build_orthogonalizer(pao, qs_env)
Constructs matrix_N and its inverse.
subroutine, public pao_build_core_hamiltonian(pao, qs_env)
Creates the matrix_H0 which contains the core hamiltonian.
subroutine, public pao_guess_initial_p(pao, qs_env, ls_scf_env)
Provide an initial guess for the density matrix.
subroutine, public pao_test_convergence(pao, ls_scf_env, new_energy, is_converged)
Test whether the PAO optimization has reached convergence.
subroutine, public pao_add_forces(qs_env, ls_scf_env)
Calculate the forces contributed by PAO.
subroutine, public pao_check_trace_ps(ls_scf_env)
Ensure that the number of electrons is correct.
subroutine, public pao_init_kinds(pao, qs_env)
Initialize qs kinds.
Definition pao_methods.F:97
subroutine, public pao_build_matrix_x(pao, qs_env)
Creates the matrix_X.
subroutine, public pao_check_grad(pao, qs_env, ls_scf_env)
Debugging routine for checking the analytic gradient.
subroutine, public pao_print_atom_info(pao)
Prints a one line summary for each atom.
subroutine, public pao_store_p(qs_env, ls_scf_env)
Stores density matrix as initial guess for next SCF optimization.
subroutine, public pao_build_selector(pao, qs_env)
Build rectangular matrix to converert between primary and PAO basis.
subroutine, public pao_calc_energy(pao, qs_env, ls_scf_env, energy)
Calculate the pao energy.
subroutine, public pao_build_diag_distribution(pao, qs_env)
Creates new DBCSR distribution which spreads diagonal blocks evenly across ranks.
Main module for PAO Machine Learning.
Definition pao_ml.F:12
subroutine, public pao_ml_init(pao, qs_env)
Initializes the learning machinery.
Definition pao_ml.F:85
subroutine, public pao_ml_predict(pao, qs_env)
Fills paomatrix_X based on machine learning predictions.
Definition pao_ml.F:505
Module for equivariant PAO-ML based on PyTorch.
Definition pao_model.F:12
subroutine, public pao_model_predict(pao, qs_env)
Fills paomatrix_X based on machine learning predictions.
Definition pao_model.F:147
Optimizers used by pao_main.F.
subroutine, public pao_opt_init(pao)
Initialize the optimizer.
subroutine, public pao_opt_finalize(pao)
Finalize the optimizer.
subroutine, public pao_opt_new_dir(pao, icycle)
Calculates the new search direction.
Front-End for any PAO parametrization.
Definition pao_param.F:12
subroutine, public pao_param_initial_guess(pao, qs_env)
Fills matrix_X with an initial guess.
Definition pao_param.F:207
subroutine, public pao_param_init(pao, qs_env)
Initialize PAO parametrization.
Definition pao_param.F:109
subroutine, public pao_calc_ab(pao, qs_env, ls_scf_env, gradient, penalty, forces)
Takes current matrix_X and calculates the matrices A and B.
Definition pao_param.F:70
subroutine, public pao_param_finalize(pao)
Finalize PAO parametrization.
Definition pao_param.F:140
Types used by the PAO machinery.
Definition pao_types.F:12
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, mimic, 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, sab_cneo, 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, xcint_weights, 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, rhoz_cneo_set, ecoul_1c, rho0_s_rs, rho0_s_gs, rhoz_cneo_s_rs, rhoz_cneo_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, do_rixs, tb_tblite)
Get the QUICKSTEP environment.