(git:cccd2f3)
Loading...
Searching...
No Matches
ec_environment.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 Energy correction environment setup and handling
10!> \par History
11!> 2019.09 created
12!> \author JGH
13! **************************************************************************************************
22 USE bibliography, ONLY: niklasson2003,&
24 cite_reference
25 USE cell_types, ONLY: cell_type
34 USE input_constants, ONLY: &
47 USE kinds, ONLY: dp
52 USE kpoint_types, ONLY: kpoint_create,&
68 USE qs_kind_types, ONLY: get_qs_kind,&
71 USE qs_mo_types, ONLY: allocate_mo_set,&
75 USE qs_rho_types, ONLY: qs_rho_type
81#include "./base/base_uses.f90"
82
83 IMPLICIT NONE
84
85 PRIVATE
86
87 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'ec_environment'
88
89 PUBLIC :: ec_env_create
90 PUBLIC :: ec_write_input
91
92CONTAINS
93
94! **************************************************************************************************
95!> \brief Allocates and intitializes ec_env
96!> \param qs_env The QS environment
97!> \param ec_env The energy correction environment (the object to create)
98!> \param dft_section The DFT section
99!> \param ec_section The energy correction input section
100!> \par History
101!> 2019.09 created
102!> \author JGH
103! **************************************************************************************************
104 SUBROUTINE ec_env_create(qs_env, ec_env, dft_section, ec_section)
105 TYPE(qs_environment_type), POINTER :: qs_env
106 TYPE(energy_correction_type), POINTER :: ec_env
107 TYPE(section_vals_type), POINTER :: dft_section
108 TYPE(section_vals_type), OPTIONAL, POINTER :: ec_section
109
110 cpassert(.NOT. ASSOCIATED(ec_env))
111 ALLOCATE (ec_env)
112 CALL init_ec_env(qs_env, ec_env, dft_section, ec_section)
113
114 END SUBROUTINE ec_env_create
115
116! **************************************************************************************************
117!> \brief Initializes energy correction environment
118!> \param qs_env The QS environment
119!> \param ec_env The energy correction environment
120!> \param dft_section The DFT section
121!> \param ec_section The energy correction input section
122!> \par History
123!> 2019.09 created
124!> \author JGH
125! **************************************************************************************************
126 SUBROUTINE init_ec_env(qs_env, ec_env, dft_section, ec_section)
127 TYPE(qs_environment_type), POINTER :: qs_env
128 TYPE(energy_correction_type), POINTER :: ec_env
129 TYPE(section_vals_type), POINTER :: dft_section
130 TYPE(section_vals_type), OPTIONAL, POINTER :: ec_section
131
132 CHARACTER(LEN=*), PARAMETER :: routinen = 'init_ec_env'
133
134 INTEGER :: handle, ikind, ispin, maxlgto, nel(2), &
135 nkind, nsgf, nspins, unit_nr
136 LOGICAL :: explicit, gpw, gs_kpoints, paw_atom
137 REAL(kind=dp) :: eps_pgf_orb, etemp, &
138 flexible_electron_count, focc, n_el_f, &
139 rc
140 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
141 TYPE(cell_type), POINTER :: cell
142 TYPE(cp_blacs_env_type), POINTER :: blacs_env
143 TYPE(cp_fm_struct_type), POINTER :: fm_struct
144 TYPE(dft_control_type), POINTER :: dft_control
145 TYPE(gto_basis_set_type), POINTER :: basis_set, harris_basis, &
146 harris_soft_basis
147 TYPE(mo_set_type), DIMENSION(:), POINTER :: mo_set
148 TYPE(mp_para_env_type), POINTER :: para_env
149 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
150 TYPE(qs_dispersion_type), POINTER :: dispersion_env
151 TYPE(qs_kind_type), DIMENSION(:), POINTER :: qs_kind_set
152 TYPE(qs_kind_type), POINTER :: qs_kind
153 TYPE(qs_rho_type), POINTER :: rho
154 TYPE(section_vals_type), POINTER :: ec_hfx_section, kp_section, nl_section, &
155 pp_section, section1, section2, &
156 xc_fun_section, xc_section
157
158 CALL timeset(routinen, handle)
159
160 NULLIFY (atomic_kind_set, dispersion_env, ec_env%ls_env, para_env)
161 NULLIFY (ec_env%sab_orb, ec_env%sac_ae, ec_env%sac_ppl, ec_env%sap_ppnl)
162 NULLIFY (ec_env%matrix_ks, ec_env%matrix_h, ec_env%matrix_s)
163 NULLIFY (ec_env%matrix_t, ec_env%matrix_p, ec_env%matrix_w)
164 NULLIFY (ec_env%task_list)
165 NULLIFY (ec_env%mao_coef)
166 NULLIFY (ec_env%force)
167 NULLIFY (ec_env%dispersion_env)
168 NULLIFY (ec_env%xc_section)
169 NULLIFY (ec_env%matrix_z)
170 NULLIFY (ec_env%matrix_hz)
171 NULLIFY (ec_env%matrix_wz)
172 NULLIFY (ec_env%z_admm)
173 NULLIFY (ec_env%p_env)
174 NULLIFY (ec_env%vxc_rspace)
175 NULLIFY (ec_env%vtau_rspace)
176 NULLIFY (ec_env%vadmm_rspace)
177 NULLIFY (ec_env%vadmm_tau_rspace)
178 NULLIFY (ec_env%rhoout_r, ec_env%rhoz_r)
179 NULLIFY (ec_env%x_data)
180 ec_env%should_update = .true.
181 ec_env%mao = .false.
182 ec_env%do_ec_admm = .false.
183 ec_env%do_kpoints = .false.
184 ec_env%do_ec_hfx = .false.
185 ec_env%reuse_hfx = .false.
186
187 IF (qs_env%energy_correction) THEN
188
189 cpassert(PRESENT(ec_section))
190
191 ! get a useful output_unit
192 unit_nr = cp_logger_get_default_unit_nr(local=.false.)
193
194 CALL section_vals_val_get(ec_section, "ALGORITHM", &
195 i_val=ec_env%ks_solver)
196 CALL section_vals_val_get(ec_section, "ENERGY_FUNCTIONAL", &
197 i_val=ec_env%energy_functional)
198 CALL section_vals_val_get(ec_section, "FACTORIZATION", &
199 i_val=ec_env%factorization)
200 CALL section_vals_val_get(ec_section, "OT_INITIAL_GUESS", &
201 i_val=ec_env%ec_initial_guess)
202 CALL section_vals_val_get(ec_section, "EPS_DEFAULT", &
203 r_val=ec_env%eps_default)
204 CALL section_vals_val_get(ec_section, "HARRIS_BASIS", &
205 c_val=ec_env%basis)
206 CALL section_vals_val_get(ec_section, "ELECTRONIC_TEMPERATURE", &
207 r_val=etemp)
208 CALL section_vals_val_get(ec_section, "MAO", &
209 l_val=ec_env%mao)
210 CALL section_vals_val_get(ec_section, "MAO_MAX_ITER", &
211 i_val=ec_env%mao_max_iter)
212 CALL section_vals_val_get(ec_section, "MAO_EPS_GRAD", &
213 r_val=ec_env%mao_eps_grad)
214 CALL section_vals_val_get(ec_section, "MAO_EPS1", &
215 r_val=ec_env%mao_eps1)
216 CALL section_vals_val_get(ec_section, "MAO_IOLEVEL", &
217 i_val=ec_env%mao_iolevel)
218 ! Skip EC calculation if ground-state calculation did not converge
219 CALL section_vals_val_get(ec_section, "SKIP_EC", &
220 l_val=ec_env%skip_ec)
221 ! Debug output
222 CALL section_vals_val_get(ec_section, "DEBUG_FORCES", &
223 l_val=ec_env%debug_forces)
224 CALL section_vals_val_get(ec_section, "DEBUG_STRESS", &
225 l_val=ec_env%debug_stress)
226 CALL section_vals_val_get(ec_section, "DEBUG_EXTERNAL_METHOD", &
227 l_val=ec_env%debug_external)
228 ! WFN output
229 section1 => section_vals_get_subs_vals(ec_section, "PRINT%HARRIS_OUTPUT_WFN")
230 CALL section_vals_get(section1, explicit=ec_env%write_harris_wfn)
231 ! ADMM
232 CALL section_vals_val_get(ec_section, "ADMM", l_val=ec_env%do_ec_admm)
233 ! EXTERNAL
234 CALL section_vals_val_get(ec_section, "EXTERNAL_RESPONSE_FILENAME", &
235 c_val=ec_env%exresp_fn)
236 CALL section_vals_val_get(ec_section, "EXTERNAL_RESPONSE_ERROR_FILENAME", &
237 c_val=ec_env%exresperr_fn)
238 CALL section_vals_val_get(ec_section, "EXTERNAL_RESULT_FILENAME", &
239 c_val=ec_env%exresult_fn)
240 CALL section_vals_val_get(ec_section, "ERROR_ESTIMATION", &
241 l_val=ec_env%do_error)
242 CALL section_vals_val_get(ec_section, "ERROR_ESTIMATION_METHOD", &
243 c_val=ec_env%error_method)
244 CALL uppercase(ec_env%error_method)
245 CALL section_vals_val_get(ec_section, "ERROR_CUTOFF", &
246 r_val=ec_env%error_cutoff)
247 CALL section_vals_val_get(ec_section, "ERROR_SUBSPACE_SIZE", &
248 i_val=ec_env%error_subspace)
249
250 ec_env%do_skip = .false.
251
252 ! smearing
253 IF (etemp > 0.0_dp) THEN
254 ec_env%smear%do_smear = .true.
255 ec_env%smear%method = smear_fermi_dirac
256 ec_env%smear%electronic_temperature = etemp
257 ec_env%smear%eps_fermi_dirac = 1.0e-5_dp
258 ec_env%smear%fixed_mag_mom = -100.0_dp
259 ELSE
260 ec_env%smear%do_smear = .false.
261 ec_env%smear%electronic_temperature = 0.0_dp
262 END IF
263
264 ! kpoints
265 ! Options: gs ec
266 ! gamma gamma
267 ! gamma KPec
268 ! KPgs KPgs
269 ! KPgs KPec
270 CALL get_qs_env(qs_env, do_kpoints=gs_kpoints)
271 kp_section => section_vals_get_subs_vals(ec_section, "KPOINTS")
272 CALL section_vals_get(kp_section, explicit=explicit)
273 ec_env%do_kpoints = gs_kpoints .OR. explicit
274 IF (ec_env%do_kpoints) THEN
275 IF (.NOT. explicit) THEN
276 kp_section => section_vals_get_subs_vals(dft_section, "KPOINTS")
277 END IF
278 CALL get_qs_env(qs_env, particle_set=particle_set, cell=cell)
279 CALL kpoint_create(ec_env%kpoints)
280 CALL read_kpoint_section(ec_env%kpoints, kp_section, cell%hmat)
281 CALL kpoint_initialize(ec_env%kpoints, particle_set, cell)
282 CALL get_qs_env(qs_env, para_env=para_env, blacs_env=blacs_env)
283 CALL kpoint_env_initialize(ec_env%kpoints, para_env, blacs_env)
284 ELSE
285 NULLIFY (ec_env%kpoints)
286 END IF
287
288 ! set basis
289 CALL get_qs_env(qs_env, qs_kind_set=qs_kind_set, nkind=nkind)
290 CALL uppercase(ec_env%basis)
291 SELECT CASE (ec_env%basis)
292 CASE ("ORBITAL")
293 DO ikind = 1, nkind
294 qs_kind => qs_kind_set(ikind)
295 CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, basis_type="ORB")
296 IF (ASSOCIATED(basis_set)) THEN
297 NULLIFY (harris_basis)
298 CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS")
299 IF (ASSOCIATED(harris_basis)) THEN
300 CALL remove_basis_from_container(qs_kind%basis_sets, basis_type="HARRIS")
301 END IF
302 NULLIFY (harris_basis)
303 CALL copy_gto_basis_set(basis_set, harris_basis)
304 CALL add_basis_set_to_container(qs_kind%basis_sets, harris_basis, "HARRIS")
305 END IF
306 END DO
307 CASE ("PRIMITIVE")
308 DO ikind = 1, nkind
309 qs_kind => qs_kind_set(ikind)
310 CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, basis_type="ORB")
311 IF (ASSOCIATED(basis_set)) THEN
312 NULLIFY (harris_basis)
313 CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS")
314 IF (ASSOCIATED(harris_basis)) THEN
315 CALL remove_basis_from_container(qs_kind%basis_sets, basis_type="HARRIS")
316 END IF
317 NULLIFY (harris_basis)
318 CALL create_primitive_basis_set(basis_set, harris_basis)
319 CALL get_qs_env(qs_env, dft_control=dft_control)
320 eps_pgf_orb = dft_control%qs_control%eps_pgf_orb
321 CALL init_interaction_radii_orb_basis(harris_basis, eps_pgf_orb)
322 harris_basis%kind_radius = basis_set%kind_radius
323 CALL add_basis_set_to_container(qs_kind%basis_sets, harris_basis, "HARRIS")
324 END IF
325 END DO
326 CASE ("HARRIS")
327 DO ikind = 1, nkind
328 qs_kind => qs_kind_set(ikind)
329 NULLIFY (harris_basis)
330 CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS")
331 IF (.NOT. ASSOCIATED(harris_basis)) THEN
332 cpwarn("Harris Basis not defined for all types of atoms.")
333 END IF
334 END DO
335 CASE DEFAULT
336 cpabort("Unknown basis set for energy correction (Harris functional)")
337 END SELECT
338 !
339 CALL get_qs_kind_set(qs_kind_set, maxlgto=maxlgto, basis_type="HARRIS")
340 CALL init_orbital_pointers(maxlgto + 1)
341 ! GAPW: Generate soft version of Harris basis
342 CALL get_qs_env(qs_env, dft_control=dft_control)
343 IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc) THEN
344 eps_pgf_orb = dft_control%qs_control%eps_pgf_orb
345 DO ikind = 1, nkind
346 qs_kind => qs_kind_set(ikind)
347 NULLIFY (harris_basis)
348 CALL get_qs_kind(qs_kind, basis_set=harris_basis, basis_type="HARRIS")
349 CALL get_qs_kind(qs_kind, hard_radius=rc, gpw_type_forced=gpw)
350 NULLIFY (harris_soft_basis)
351 CALL allocate_gto_basis_set(harris_soft_basis)
352 CALL create_soft_basis(harris_basis, harris_soft_basis, &
353 dft_control%qs_control%gapw_control%eps_fit, &
354 rc, paw_atom, &
355 dft_control%qs_control%gapw_control%force_paw, gpw)
356 CALL init_interaction_radii_orb_basis(harris_soft_basis, eps_pgf_orb)
357 CALL add_basis_set_to_container(qs_kind%basis_sets, harris_soft_basis, "HARRIS_SOFT")
358 END DO
359 END IF
360 !
361 CALL uppercase(ec_env%basis)
362
363 ! Basis may only differ from ground-state if explicitly added
364 ec_env%basis_inconsistent = .false.
365 IF (ec_env%basis == "HARRIS") THEN
366 DO ikind = 1, nkind
367 qs_kind => qs_kind_set(ikind)
368 ! Basis sets of ground-state
369 CALL get_qs_kind(qs_kind=qs_kind, basis_set=basis_set, basis_type="ORB")
370 ! Basis sets of energy correction
371 CALL get_qs_kind(qs_kind=qs_kind, basis_set=harris_basis, basis_type="HARRIS")
372
373 IF (basis_set%name /= harris_basis%name) THEN
374 ec_env%basis_inconsistent = .true.
375 END IF
376 END DO
377 END IF
378
379 !Density-corrected DFT must be performed with the same basis as ground-state
380 IF (ec_env%energy_functional == ec_functional_dc .AND. ec_env%basis_inconsistent) THEN
381 CALL cp_abort(__location__, &
382 "DC-DFT: Correction and ground state need to use the same basis. "// &
383 "Checked by comparing basis set names only.")
384 END IF
385 IF (ec_env%energy_functional == ec_functional_ext .AND. ec_env%basis_inconsistent) THEN
386 CALL cp_abort(__location__, &
387 "Exteranl Energy: Correction and ground state need to use the same basis. "// &
388 "Checked by comparing basis set names only.")
389 END IF
390 !
391 ! set functional
392 SELECT CASE (ec_env%energy_functional)
394 ec_env%ec_name = "Harris"
395 CASE (ec_functional_dc)
396 ec_env%ec_name = "DC-DFT"
397 CASE (ec_functional_ext)
398 ec_env%ec_name = "External Energy"
399 CASE DEFAULT
400 cpabort("unknown energy correction")
401 END SELECT
402 ! select the XC section
403 NULLIFY (xc_section)
404 xc_section => section_vals_get_subs_vals(dft_section, "XC")
405 section1 => section_vals_get_subs_vals(ec_section, "XC")
406 section2 => section_vals_get_subs_vals(ec_section, "XC%XC_FUNCTIONAL")
407 CALL section_vals_get(section2, explicit=explicit)
408 IF (explicit) THEN
409 CALL xc_functionals_expand(section2, section1)
410 ec_env%xc_section => section1
411 ELSE
412 ec_env%xc_section => xc_section
413 END IF
414 ! Check whether energy correction requires the kinetic energy density and rebuild rho if necessary
415 CALL get_qs_env(qs_env, dft_control=dft_control, rho=rho)
416 xc_fun_section => section_vals_get_subs_vals(ec_env%xc_section, "XC_FUNCTIONAL")
417 dft_control%use_kinetic_energy_density = dft_control%use_kinetic_energy_density .OR. &
418 xc_uses_kinetic_energy_density(xc_fun_section, dft_control%lsd)
419 ! Same for density gradient
420 dft_control%drho_by_collocation = dft_control%drho_by_collocation .OR. &
421 (xc_uses_norm_drho(xc_fun_section, dft_control%lsd) .AND. &
422 (section_get_ival(xc_section, "XC_GRID%XC_DERIV") == xc_deriv_collocate))
423 ! dispersion
424 ALLOCATE (dispersion_env)
425 NULLIFY (xc_section)
426 xc_section => ec_env%xc_section
427 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set, para_env=para_env)
428 CALL qs_dispersion_env_set(dispersion_env, xc_section)
429 IF (dispersion_env%type == xc_vdw_fun_pairpot) THEN
430 NULLIFY (pp_section)
431 pp_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%PAIR_POTENTIAL")
432 CALL qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
433 ELSE IF (dispersion_env%type == xc_vdw_fun_nonloc) THEN
434 cpabort("nl-vdW functionals not available for EC calculations")
435 NULLIFY (nl_section)
436 nl_section => section_vals_get_subs_vals(xc_section, "VDW_POTENTIAL%NON_LOCAL")
437 CALL qs_dispersion_nonloc_init(dispersion_env, para_env)
438 END IF
439 ec_env%dispersion_env => dispersion_env
440
441 ! Check if hybrid functional are used
442 ec_hfx_section => section_vals_get_subs_vals(ec_section, "XC%HF")
443 CALL section_vals_get(ec_hfx_section, explicit=ec_env%do_ec_hfx)
444
445 ! Initialize Harris LS solver environment
446 ec_env%use_ls_solver = .false.
447 ec_env%use_ls_solver = (ec_env%ks_solver == ec_matrix_sign) &
448 .OR. (ec_env%ks_solver == ec_matrix_trs4) &
449 .OR. (ec_env%ks_solver == ec_matrix_tc2)
450
451 IF (ec_env%use_ls_solver) THEN
452 CALL ec_ls_create(qs_env, ec_env)
453 END IF
454
455 ! check that Harris functional with electronic temperature uses diagonalization
456 IF (ec_env%energy_functional == ec_functional_harris) THEN
457 IF (ec_env%smear%do_smear .AND. ec_env%ks_solver /= ec_diagonalization) THEN
458 cpabort("Harris functional with Fermi-Dirac smearing needs diagonalization solver.")
459 END IF
460 IF (ec_env%do_kpoints .AND. ec_env%ks_solver /= ec_diagonalization) THEN
461 cpabort("Harris functional with K-points needs diagonalization solver.")
462 END IF
463 END IF
464
465 ! initialize Kpoint MOs
466 IF (ec_env%do_kpoints) THEN
467 CALL get_qs_env(qs_env, dft_control=dft_control)
468 nspins = dft_control%nspins
469 CALL get_qs_kind_set(qs_kind_set, nsgf=nsgf, basis_type="HARRIS")
470 focc = 2.0_dp + real(1 - nspins, dp)
471 flexible_electron_count = dft_control%relax_multiplicity
472 CALL get_qs_env(qs_env, para_env=para_env, blacs_env=blacs_env)
473 CALL cp_fm_struct_create(fm_struct, para_env=para_env, context=blacs_env, &
474 nrow_global=nsgf, ncol_global=nsgf)
475 CALL get_qs_env(qs_env, nelectron_spin=nel)
476 ALLOCATE (mo_set(nspins))
477 DO ispin = 1, nspins
478 n_el_f = nel(ispin)
479 CALL allocate_mo_set(mo_set(ispin), nsgf, nsgf, nel(ispin), n_el_f, &
480 focc, flexible_electron_count)
481 CALL init_mo_set(mo_set(ispin), fm_struct=fm_struct, name="MO")
482 END DO
483 CALL kpoint_initialize_mos(ec_env%kpoints, mo_set)
484 CALL kpoint_initialize_mo_set(ec_env%kpoints)
485 CALL qs_basis_rotation(qs_env, ec_env%kpoints, basis_type="HARRIS")
486 DO ispin = 1, nspins
487 CALL deallocate_mo_set(mo_set(ispin))
488 END DO
489 DEALLOCATE (mo_set)
490 CALL cp_fm_struct_release(fm_struct)
491 END IF
492
493 END IF
494
495 CALL timestop(handle)
496
497 END SUBROUTINE init_ec_env
498
499! **************************************************************************************************
500!> \brief Initializes linear scaling environment for LS based solver of
501!> Harris energy functional and parses input section
502!> \param qs_env ...
503!> \param ec_env ...
504!> \par History
505!> 2020.10 created [Fabian Belleflamme]
506!> \author Fabian Belleflamme
507! **************************************************************************************************
508 SUBROUTINE ec_ls_create(qs_env, ec_env)
509 TYPE(qs_environment_type), POINTER :: qs_env
510 TYPE(energy_correction_type), POINTER :: ec_env
511
512 CHARACTER(LEN=*), PARAMETER :: routinen = 'ec_ls_create'
513
514 INTEGER :: handle
515 REAL(kind=dp) :: mu
516 TYPE(dft_control_type), POINTER :: dft_control
517 TYPE(ls_scf_env_type), POINTER :: ls_env
518 TYPE(molecule_type), DIMENSION(:), POINTER :: molecule_set
519 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
520 TYPE(section_vals_type), POINTER :: ec_section, input
521
522 CALL timeset(routinen, handle)
523
524 ALLOCATE (ec_env%ls_env)
525 ls_env => ec_env%ls_env
526
527 NULLIFY (dft_control, input, ls_env%para_env)
528
529 CALL get_qs_env(qs_env, &
530 dft_control=dft_control, &
531 input=input, &
532 molecule_set=molecule_set, &
533 particle_set=particle_set, &
534 para_env=ls_env%para_env, &
535 nelectron_spin=ls_env%nelectron_spin)
536
537 ! copy some basic stuff
538 ls_env%nspins = dft_control%nspins
539 ls_env%natoms = SIZE(particle_set, 1)
540 CALL ls_env%para_env%retain()
541
542 ! initialize block to group to defined molecules
543 ALLOCATE (ls_env%ls_mstruct%atom_to_molecule(ls_env%natoms))
544 CALL molecule_of_atom(molecule_set, atom_to_mol=ls_env%ls_mstruct%atom_to_molecule)
545
546 ls_env%do_transport = .false.
547 ls_env%do_pao = .false.
548 ls_env%ls_mstruct%do_pao = ls_env%do_pao
549 ls_env%do_pexsi = .false.
550 ls_env%has_unit_metric = .false.
551
552 ec_section => section_vals_get_subs_vals(input, "DFT%ENERGY_CORRECTION")
553 CALL section_vals_val_get(ec_section, "EPS_FILTER", r_val=ls_env%eps_filter)
554 CALL section_vals_val_get(ec_section, "MU", r_val=mu)
555 CALL section_vals_val_get(ec_section, "FIXED_MU", l_val=ls_env%fixed_mu)
556 ls_env%mu_spin = mu
557 CALL section_vals_val_get(ec_section, "S_PRECONDITIONER", i_val=ls_env%s_preconditioner_type)
558 CALL section_vals_val_get(ec_section, "MATRIX_CLUSTER_TYPE", i_val=ls_env%ls_mstruct%cluster_type)
559 CALL section_vals_val_get(ec_section, "S_INVERSION", i_val=ls_env%s_inversion_type)
560 CALL section_vals_val_get(ec_section, "CHECK_S_INV", l_val=ls_env%check_s_inv)
561 CALL section_vals_val_get(ec_section, "REPORT_ALL_SPARSITIES", l_val=ls_env%report_all_sparsities)
562 CALL section_vals_val_get(ec_section, "SIGN_METHOD", i_val=ls_env%sign_method)
563 CALL section_vals_val_get(ec_section, "SIGN_ORDER", i_val=ls_env%sign_order)
564 CALL section_vals_val_get(ec_section, "DYNAMIC_THRESHOLD", l_val=ls_env%dynamic_threshold)
565 CALL section_vals_val_get(ec_section, "NON_MONOTONIC", l_val=ls_env%non_monotonic)
566 CALL section_vals_val_get(ec_section, "S_SQRT_METHOD", i_val=ls_env%s_sqrt_method)
567 CALL section_vals_val_get(ec_section, "S_SQRT_ORDER", i_val=ls_env%s_sqrt_order)
568 CALL section_vals_val_get(ec_section, "EPS_LANCZOS", r_val=ls_env%eps_lanczos)
569 CALL section_vals_val_get(ec_section, "MAX_ITER_LANCZOS", i_val=ls_env%max_iter_lanczos)
570
571 SELECT CASE (ec_env%ks_solver)
572 CASE (ec_matrix_sign)
573 ! S inverse required for Sign matrix algorithm,
574 ! calculated either by Hotelling or multiplying S matrix sqrt inv
575 SELECT CASE (ls_env%s_inversion_type)
577 ls_env%needs_s_inv = .true.
578 ls_env%use_s_sqrt = .true.
580 ls_env%needs_s_inv = .true.
581 ls_env%use_s_sqrt = .false.
583 ls_env%needs_s_inv = .false.
584 ls_env%use_s_sqrt = .false.
585 CASE DEFAULT
586 cpabort("")
587 END SELECT
589 ls_env%needs_s_inv = .false.
590 ls_env%use_s_sqrt = .true.
591 CASE DEFAULT
592 cpabort("")
593 END SELECT
594
595 SELECT CASE (ls_env%s_preconditioner_type)
597 ls_env%has_s_preconditioner = .false.
598 CASE DEFAULT
599 ls_env%has_s_preconditioner = .true.
600 END SELECT
601
602 ! buffer for the history of matrices, not needed here
603 ls_env%extrapolation_order = 0
604 ls_env%scf_history%nstore = 0
605 ls_env%scf_history%istore = 0
606 ALLOCATE (ls_env%scf_history%matrix(ls_env%nspins, ls_env%scf_history%nstore))
607
608 NULLIFY (ls_env%mixing_store)
609
610 CALL timestop(handle)
611
612 END SUBROUTINE ec_ls_create
613
614! **************************************************************************************************
615!> \brief Print out the energy correction input section
616!>
617!> \param ec_env ...
618!> \par History
619!> 2020.10 created [Fabian Belleflamme]
620!> \author Fabian Belleflamme
621! **************************************************************************************************
622 SUBROUTINE ec_write_input(ec_env)
623 TYPE(energy_correction_type), POINTER :: ec_env
624
625 CHARACTER(LEN=*), PARAMETER :: routinen = 'ec_write_input'
626
627 INTEGER :: handle, unit_nr
628 TYPE(ls_scf_env_type), POINTER :: ls_env
629
630 CALL timeset(routinen, handle)
631
632 unit_nr = cp_logger_get_default_unit_nr(local=.false.)
633
634 IF (unit_nr > 0) THEN
635
636 WRITE (unit_nr, '(T2,A)') &
637 "!"//repeat("-", 29)//" Energy Correction "//repeat("-", 29)//"!"
638
639 ! Type of energy correction
640 SELECT CASE (ec_env%energy_functional)
642 WRITE (unit_nr, '(T2,A,T61,A20)') "Energy Correction: ", "HARRIS FUNCTIONAL"
643 CASE (ec_functional_dc)
644 WRITE (unit_nr, '(T2,A,T61,A20)') "Energy Correction: ", "DC-DFT"
645 CASE (ec_functional_ext)
646 WRITE (unit_nr, '(T2,A,T61,A20)') "Energy Correction: ", "External"
647 END SELECT
648 WRITE (unit_nr, '()')
649
650 ! Energy correction parameters
651 WRITE (unit_nr, '(T2,A,T61,E20.3)') "eps_default:", ec_env%eps_default
652
653 CALL uppercase(ec_env%basis)
654 SELECT CASE (ec_env%basis)
655 CASE ("ORBITAL")
656 WRITE (unit_nr, '(T2,A,T61,A20)') "EC basis: ", "ORBITAL"
657 CASE ("PRIMITIVE")
658 WRITE (unit_nr, '(T2,A,T61,A20)') "EC basis: ", "PRIMITIVE"
659 CASE ("HARRIS")
660 WRITE (unit_nr, '(T2,A,T61,A20)') "EC Basis: ", "HARRIS"
661 END SELECT
662
663 ! Info how HFX in energy correction is treated
664 IF (ec_env%do_ec_hfx) THEN
665
666 WRITE (unit_nr, '(T2,A,T61,L20)') "DC-DFT with HFX", ec_env%do_ec_hfx
667 WRITE (unit_nr, '(T2,A,T61,L20)') "Reuse HFX integrals", ec_env%reuse_hfx
668 WRITE (unit_nr, '(T2,A,T61,L20)') "DC-DFT HFX with ADMM", ec_env%do_ec_admm
669
670 END IF ! ec_env%do_ec_hfx
671
672 IF (ec_env%do_kpoints) THEN
673 CALL write_kpoint_info(ec_env%kpoints, iounit=unit_nr)
674 END IF
675
676 ! Parameters for Harris functional solver
677 IF (ec_env%energy_functional == ec_functional_harris) THEN
678
679 ! Algorithm
680 SELECT CASE (ec_env%ks_solver)
681 CASE (ec_diagonalization)
682 WRITE (unit_nr, '(T2,A,T61,A20)') "Algorithm: ", "DIAGONALIZATION"
683 CASE (ec_ot_diag)
684 WRITE (unit_nr, '(T2,A,T61,A20)') "Algorithm: ", "OT DIAGONALIZATION"
685 CASE (ec_matrix_sign)
686 WRITE (unit_nr, '(T2,A,T61,A20)') "Algorithm: ", "MATRIX_SIGN"
687 CASE (ec_matrix_trs4)
688 WRITE (unit_nr, '(T2,A,T61,A20)') "Algorithm: ", "TRS4"
689 CALL cite_reference(niklasson2003)
690 CASE (ec_matrix_tc2)
691 WRITE (unit_nr, '(T2,A,T61,A20)') "Algorithm: ", "TC2"
692 CALL cite_reference(niklasson2014)
693 END SELECT
694 WRITE (unit_nr, '()')
695
696 ! MAO
697 IF (ec_env%mao) THEN
698 WRITE (unit_nr, '(T2,A,T61,L20)') "MAO:", ec_env%mao
699 WRITE (unit_nr, '(T2,A,T61,L20)') "MAO_IOLEVEL:", ec_env%mao_iolevel
700 WRITE (unit_nr, '(T2,A,T61,I20)') "MAO_MAX_ITER:", ec_env%mao_max_iter
701 WRITE (unit_nr, '(T2,A,T61,E20.3)') "MAO_EPS_GRAD:", ec_env%mao_eps_grad
702 WRITE (unit_nr, '(T2,A,T61,E20.3)') "MAO_EPS1:", ec_env%mao_eps1
703 WRITE (unit_nr, '()')
704 END IF
705
706 ! Parameters for linear response solver
707 IF (.NOT. ec_env%use_ls_solver) THEN
708
709 WRITE (unit_nr, '(T2,A)') "MO Solver"
710 WRITE (unit_nr, '()')
711
712 SELECT CASE (ec_env%ks_solver)
713 CASE (ec_diagonalization)
714
715 SELECT CASE (ec_env%factorization)
716 CASE (kg_cholesky)
717 WRITE (unit_nr, '(T2,A,T61,A20)') "Factorization: ", "CHOLESKY"
718 END SELECT
719
720 CASE (ec_ot_diag)
721
722 ! OT Diagonalization
723 ! Initial guess : 1) block diagonal initial guess
724 ! 2) GS-density matrix (might require trafo if basis diff)
725
726 SELECT CASE (ec_env%ec_initial_guess)
727 CASE (ec_ot_atomic)
728 WRITE (unit_nr, '(T2,A,T61,A20)') "OT Diag initial guess: ", "ATOMIC"
729 CASE (ec_ot_gs)
730 WRITE (unit_nr, '(T2,A,T61,A20)') "OT Diag initial guess: ", "GROUND STATE DM"
731 END SELECT
732
733 CASE DEFAULT
734 cpabort("Unknown Diagonalization algorithm for Harris functional")
735 END SELECT
736
737 ELSE
738
739 WRITE (unit_nr, '(T2,A)') "AO Solver"
740 WRITE (unit_nr, '()')
741
742 ls_env => ec_env%ls_env
743 WRITE (unit_nr, '(T2,A,T61,E20.3)') "eps_filter:", ls_env%eps_filter
744 WRITE (unit_nr, '(T2,A,T61,L20)') "fixed chemical potential (mu)", ls_env%fixed_mu
745 WRITE (unit_nr, '(T2,A,T61,L20)') "Computing inv(S):", ls_env%needs_s_inv
746 WRITE (unit_nr, '(T2,A,T61,L20)') "Computing sqrt(S):", ls_env%use_s_sqrt
747 WRITE (unit_nr, '(T2,A,T61,L20)') "Computing S preconditioner ", ls_env%has_s_preconditioner
748
749 IF (ls_env%use_s_sqrt) THEN
750 SELECT CASE (ls_env%s_sqrt_method)
751 CASE (ls_s_sqrt_ns)
752 WRITE (unit_nr, '(T2,A,T61,A20)') "S sqrt method:", "NEWTONSCHULZ"
753 CASE (ls_s_sqrt_proot)
754 WRITE (unit_nr, '(T2,A,T61,A20)') "S sqrt method:", "PROOT"
755 CASE DEFAULT
756 cpabort("Unknown sqrt method.")
757 END SELECT
758 WRITE (unit_nr, '(T2,A,T61,I20)') "S sqrt order:", ls_env%s_sqrt_order
759 END IF
760
761 SELECT CASE (ls_env%s_preconditioner_type)
763 WRITE (unit_nr, '(T2,A,T61,A20)') "S preconditioner type ", "NONE"
765 WRITE (unit_nr, '(T2,A,T61,A20)') "S preconditioner type ", "ATOMIC"
767 WRITE (unit_nr, '(T2,A,T61,A20)') "S preconditioner type ", "MOLECULAR"
768 END SELECT
769
770 SELECT CASE (ls_env%ls_mstruct%cluster_type)
771 CASE (ls_cluster_atomic)
772 WRITE (unit_nr, '(T2,A,T61,A20)') "Cluster type", adjustr("ATOMIC")
774 WRITE (unit_nr, '(T2,A,T61,A20)') "Cluster type", adjustr("MOLECULAR")
775 CASE DEFAULT
776 cpabort("Unknown cluster type")
777 END SELECT
778
779 END IF
780
781 END IF ! if ec_functional_harris
782
783 WRITE (unit_nr, '(T2,A)') repeat("-", 79)
784 WRITE (unit_nr, '()')
785
786 END IF ! unit_nr
787
788 CALL timestop(handle)
789
790 END SUBROUTINE ec_write_input
791
792END MODULE ec_environment
Define the atomic kind types and their sub types.
subroutine, public remove_basis_from_container(container, inum, basis_type)
...
subroutine, public add_basis_set_to_container(container, basis_set, basis_set_type)
...
subroutine, public allocate_gto_basis_set(gto_basis_set)
...
subroutine, public copy_gto_basis_set(basis_set_in, basis_set_out)
...
subroutine, public create_primitive_basis_set(basis_set, pbasis, lmax)
...
collects all references to literature in CP2K as new algorithms / method are included from literature...
integer, save, public niklasson2014
integer, save, public niklasson2003
Handles all functions related to the CELL.
Definition cell_types.F:15
methods related to the blacs parallel environment
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
represent the structure of a full matrix
subroutine, public cp_fm_struct_create(fmstruct, para_env, context, nrow_global, ncol_global, nrow_block, ncol_block, descriptor, first_p_pos, local_leading_dimension, template_fmstruct, square_blocks, force_block)
allocates and initializes a full matrix structure
subroutine, public cp_fm_struct_release(fmstruct)
releases a full matrix structure
various routines to log and control the output. The idea is that decisions about where to log should ...
recursive integer function, public cp_logger_get_default_unit_nr(logger, local, skip_not_ionode)
asks the default unit number of the given logger. try to use cp_logger_get_unit_nr
Types needed for a linear scaling quickstep SCF run based on the density matrix.
Types needed for a for a Energy Correction.
Energy correction environment setup and handling.
subroutine, public ec_write_input(ec_env)
Print out the energy correction input section.
subroutine, public ec_env_create(qs_env, ec_env, dft_section, ec_section)
Allocates and intitializes ec_env.
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public ec_functional_harris
integer, parameter, public smear_fermi_dirac
integer, parameter, public ec_functional_dc
integer, parameter, public ls_s_preconditioner_molecular
integer, parameter, public ls_s_inversion_hotelling
integer, parameter, public xc_vdw_fun_nonloc
integer, parameter, public ls_cluster_molecular
integer, parameter, public ec_ot_atomic
integer, parameter, public ls_s_preconditioner_atomic
integer, parameter, public ec_ot_diag
integer, parameter, public ec_ot_gs
integer, parameter, public ls_s_inversion_none
integer, parameter, public ls_s_sqrt_proot
integer, parameter, public ls_s_sqrt_ns
integer, parameter, public ls_s_preconditioner_none
integer, parameter, public ec_matrix_tc2
integer, parameter, public ec_diagonalization
integer, parameter, public ec_matrix_trs4
integer, parameter, public ec_functional_ext
integer, parameter, public ec_matrix_sign
integer, parameter, public ls_s_inversion_sign_sqrt
integer, parameter, public xc_vdw_fun_pairpot
integer, parameter, public kg_cholesky
integer, parameter, public ls_cluster_atomic
checks the input and perform some automatic "magic" on it
subroutine, public xc_functionals_expand(functionals, xc_section)
expand a shortcutted functional section
objects that represent the structure of input sections and the data contained in an input section
integer function, public section_get_ival(section_vals, keyword_name)
...
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
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Routines needed for kpoint calculation.
subroutine, public kpoint_initialize_mo_set(kpoint)
...
subroutine, public kpoint_initialize_mos(kpoint, mos, added_mos, for_aux_fit)
Initialize a set of MOs and density matrix for each kpoint (kpoint group)
subroutine, public kpoint_initialize(kpoint, particle_set, cell)
Generate the kpoints and initialize the kpoint environment.
subroutine, public kpoint_env_initialize(kpoint, para_env, blacs_env, with_aux_fit)
Initialize the kpoint environment.
Types and basic routines needed for a kpoint calculation.
subroutine, public read_kpoint_section(kpoint, kpoint_section, a_vec)
Read the kpoint input section.
subroutine, public write_kpoint_info(kpoint, iounit, dft_section)
Write information on the kpoints to output.
subroutine, public kpoint_create(kpoint)
Create a kpoint environment.
Interface to the message passing library MPI.
Define the data structure for the molecule information.
subroutine, public molecule_of_atom(molecule_set, atom_to_mol)
finds for each atom the molecule it belongs to
Provides Cartesian and spherical orbital pointers and indices.
subroutine, public init_orbital_pointers(maxl)
Initialize or update the orbital pointers.
Define the data structure for the particle information.
subroutine, public qs_basis_rotation(qs_env, kpoints, basis_type)
Construct basis set rotation matrices.
Calculation of non local dispersion functionals Some routines adapted from: Copyright (C) 2001-2009 Q...
subroutine, public qs_dispersion_nonloc_init(dispersion_env, para_env)
...
Calculation of dispersion using pair potentials.
subroutine, public qs_dispersion_pairpot_init(atomic_kind_set, qs_kind_set, dispersion_env, pp_section, para_env)
...
Definition of disperson types for DFT calculations.
Set disperson types for DFT calculations.
subroutine, public qs_dispersion_env_set(dispersion_env, xc_section)
...
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.
Calculate the interaction radii for the operator matrix calculation.
subroutine, public init_interaction_radii_orb_basis(orb_basis_set, eps_pgf_orb, eps_pgf_short)
...
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, cneo_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zatom, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, u_of_dft_plus_u, j_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, j0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, monovalent, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public get_qs_kind_set(qs_kind_set, all_potential_present, tnadd_potential_present, gth_potential_present, sgp_potential_present, paw_atom_present, dft_plus_u_atom_present, maxcgf, maxsgf, maxco, maxco_proj, maxgtops, maxlgto, maxlprj, maxnset, maxsgf_set, ncgf, npgf, nset, nsgf, nshell, maxpol, maxlppl, maxlppnl, maxppnl, nelectron, maxder, max_ngrid_rad, max_sph_harm, maxg_iso_not0, lmax_rho0, basis_rcut, basis_type, total_zeff_corr, npgf_seg, cneo_potential_present, nkind_q, natom_q)
Get attributes of an atomic kind set.
Definition and initialisation of the mo data type.
Definition qs_mo_types.F:22
subroutine, public allocate_mo_set(mo_set, nao, nmo, nelectron, n_el_f, maxocc, flexible_electron_count)
Allocates a mo set and partially initializes it (nao,nmo,nelectron, and flexible_electron_count are v...
subroutine, public deallocate_mo_set(mo_set)
Deallocate a wavefunction data structure.
subroutine, public init_mo_set(mo_set, fm_pool, fm_ref, fm_struct, name)
initializes an allocated mo_set. eigenvalues, mo_coeff, occupation_numbers are valid only after this ...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public create_soft_basis(orb_basis, soft_basis, eps_fit, rc, paw_atom, paw_type_forced, gpw_r3d_rs_type_forced)
create the soft basis from a GTO basis
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
input constants for xc
integer, parameter, public xc_deriv_collocate
Exchange and Correlation functional calculations.
Definition xc.F:17
logical function, public xc_uses_norm_drho(xc_fun_section, lsd)
...
Definition xc.F:111
logical function, public xc_uses_kinetic_energy_density(xc_fun_section, lsd)
...
Definition xc.F:91
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
Definition cell_types.F:60
represent a blacs multidimensional parallel environment (for the mpi corrispective see cp_paratypes/m...
keeps the information about the structure of a full matrix
Contains information on the energy correction functional for KG.
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.
keeps the density in various representations, keeping track of which ones are valid.