(git:d3d49ac)
Loading...
Searching...
No Matches
qs_force.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 Quickstep force driver routine
10!> \author MK (12.06.2002)
11! **************************************************************************************************
15 USE cell_types, ONLY: cell_type
17 USE cp_dbcsr_api, ONLY: dbcsr_copy,&
26 USE cp_output_handling, ONLY: cp_p_file,&
30 USE dft_plus_u, ONLY: plus_u
36 USE hfx_exx, ONLY: calculate_exx
37 USE input_constants, ONLY: &
44 USE kinds, ONLY: dp
55 USE qs_energy, ONLY: qs_energies
67 USE qs_ks_types, ONLY: qs_ks_env_type,&
69 USE qs_rho_types, ONLY: qs_rho_get,&
87#include "./base/base_uses.f90"
88
89 IMPLICIT NONE
90
91 PRIVATE
92
93! *** Global parameters ***
94
95 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_force'
96
97! *** Public subroutines ***
98
99 PUBLIC :: qs_calc_energy_force
100
101CONTAINS
102
103! **************************************************************************************************
104!> \brief ...
105!> \param qs_env ...
106!> \param calc_force ...
107!> \param consistent_energies ...
108!> \param linres ...
109! **************************************************************************************************
110 SUBROUTINE qs_calc_energy_force(qs_env, calc_force, consistent_energies, linres)
111 TYPE(qs_environment_type), POINTER :: qs_env
112 LOGICAL :: calc_force, consistent_energies, linres
113
114 qs_env%linres_run = linres
115 IF (calc_force) THEN
116 CALL qs_forces(qs_env)
117 ELSE
118 CALL qs_energies(qs_env, calc_forces=.false., &
119 consistent_energies=consistent_energies)
120 END IF
121
122 END SUBROUTINE qs_calc_energy_force
123
124! **************************************************************************************************
125!> \brief Calculate the Quickstep forces.
126!> \param qs_env ...
127!> \date 29.10.2002
128!> \author MK
129!> \version 1.0
130! **************************************************************************************************
131 SUBROUTINE qs_forces(qs_env)
132
133 TYPE(qs_environment_type), POINTER :: qs_env
134
135 CHARACTER(len=*), PARAMETER :: routinen = 'qs_forces'
136
137 INTEGER :: after, handle, i, iatom, ic, ikind, &
138 ispin, iw, natom, nkind, nspin, &
139 output_unit
140 INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, kind_of, natom_of_kind
141 LOGICAL :: do_admm, do_exx, do_gw, do_im_time, &
142 has_unit_metric, omit_headers, &
143 perform_ec, reuse_hfx
144 REAL(dp) :: dummy_real, dummy_real2(2)
145 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
146 TYPE(cell_type), POINTER :: cell
147 TYPE(cp_logger_type), POINTER :: logger
148 TYPE(dbcsr_p_type), DIMENSION(:), POINTER :: matrix_s, matrix_w, rho_ao
149 TYPE(dbcsr_p_type), DIMENSION(:, :), POINTER :: matrix_w_kp
150 TYPE(dft_control_type), POINTER :: dft_control
151 TYPE(energy_correction_type), POINTER :: ec_env
152 TYPE(lri_environment_type), POINTER :: lri_env
153 TYPE(mp_para_env_type), POINTER :: para_env
154 TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
155 TYPE(qs_energy_type), POINTER :: energy
156 TYPE(qs_force_type), DIMENSION(:), POINTER :: force
157 TYPE(qs_ks_env_type), POINTER :: ks_env
158 TYPE(qs_rho_type), POINTER :: rho
159 TYPE(qs_subsys_type), POINTER :: subsys
160 TYPE(section_vals_type), POINTER :: hfx_sections, print_section
161 TYPE(virial_type), POINTER :: virial
162
163 CALL timeset(routinen, handle)
164 NULLIFY (logger)
165 logger => cp_get_default_logger()
166
167 ! rebuild plane wave environment
168 CALL qs_env_rebuild_pw_env(qs_env)
169
170 ! zero out the forces in particle set
171 CALL get_qs_env(qs_env, particle_set=particle_set)
172 natom = SIZE(particle_set)
173 DO iatom = 1, natom
174 particle_set(iatom)%f = 0.0_dp
175 END DO
176
177 ! get atom mapping
178 NULLIFY (atomic_kind_set)
179 CALL get_qs_env(qs_env, atomic_kind_set=atomic_kind_set)
180 CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, &
181 atom_of_kind=atom_of_kind, &
182 kind_of=kind_of)
183
184 NULLIFY (force, subsys, dft_control)
185 CALL get_qs_env(qs_env, &
186 force=force, &
187 subsys=subsys, &
188 dft_control=dft_control)
189 IF (.NOT. ASSOCIATED(force)) THEN
190 ! *** Allocate the force data structure ***
191 nkind = SIZE(atomic_kind_set)
192 CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, natom_of_kind=natom_of_kind)
193 CALL allocate_qs_force(force, natom_of_kind)
194 DEALLOCATE (natom_of_kind)
195 CALL qs_subsys_set(subsys, force=force)
196 END IF
197 CALL zero_qs_force(force)
198
199 ! Check if CDFT potential is needed and save it until forces have been calculated
200 IF (dft_control%qs_control%cdft) THEN
201 dft_control%qs_control%cdft_control%save_pot = .true.
202 END IF
203
204 ! recalculate energy and the response vector for the Z-vector linear equation system if calc_force = .true.
205 CALL qs_energies(qs_env, calc_forces=.true.)
206
207 NULLIFY (para_env)
208 CALL get_qs_env(qs_env, &
209 para_env=para_env)
210
211 ! Now we handle some special cases
212 ! Maybe some of these would be better dealt with in qs_energies?
213 IF (qs_env%run_rtp) THEN
214 NULLIFY (matrix_w, matrix_s, ks_env)
215 CALL get_qs_env(qs_env, &
216 ks_env=ks_env, &
217 matrix_w=matrix_w, &
218 matrix_s=matrix_s)
219 CALL dbcsr_allocate_matrix_set(matrix_w, dft_control%nspins)
220 DO ispin = 1, dft_control%nspins
221 ALLOCATE (matrix_w(ispin)%matrix)
222 CALL dbcsr_copy(matrix_w(ispin)%matrix, matrix_s(1)%matrix, &
223 name="W MATRIX")
224 CALL dbcsr_set(matrix_w(ispin)%matrix, 0.0_dp)
225 END DO
226 CALL set_ks_env(ks_env, matrix_w=matrix_w)
227
228 CALL calc_c_mat_force(qs_env)
229 IF (dft_control%do_admm) CALL rt_admm_force(qs_env)
230 IF (dft_control%rtp_control%velocity_gauge .AND. dft_control%rtp_control%nl_gauge_transform) THEN
231 CALL velocity_gauge_nl_force(qs_env, particle_set)
232 END IF
233 END IF
234 ! from an eventual Mulliken restraint
235 IF (dft_control%qs_control%mulliken_restraint) THEN
236 NULLIFY (matrix_w, matrix_s, rho)
237 CALL get_qs_env(qs_env, &
238 matrix_w=matrix_w, &
239 matrix_s=matrix_s, &
240 rho=rho)
241 NULLIFY (rho_ao)
242 CALL qs_rho_get(rho, rho_ao=rho_ao)
243 CALL mulliken_restraint(dft_control%qs_control%mulliken_restraint_control, &
244 para_env, matrix_s(1)%matrix, rho_ao, w_matrix=matrix_w)
245 END IF
246 ! Add non-Pulay contribution of DFT+U to W matrix, since it has also to be
247 ! digested with overlap matrix derivatives
248 IF (dft_control%dft_plus_u) THEN
249 NULLIFY (matrix_w_kp)
250 CALL get_qs_env(qs_env, matrix_w_kp=matrix_w_kp)
251 CALL plus_u(qs_env=qs_env, matrix_w=matrix_w_kp)
252 END IF
253
254 ! Write W Matrix to output (if requested)
255 CALL get_qs_env(qs_env, has_unit_metric=has_unit_metric)
256 IF (.NOT. has_unit_metric) THEN
257 NULLIFY (matrix_w_kp)
258 CALL get_qs_env(qs_env, matrix_w_kp=matrix_w_kp)
259 nspin = SIZE(matrix_w_kp, 1)
260 DO ispin = 1, nspin
261 IF (btest(cp_print_key_should_output(logger%iter_info, &
262 qs_env%input, "DFT%PRINT%AO_MATRICES/W_MATRIX"), cp_p_file)) THEN
263 iw = cp_print_key_unit_nr(logger, qs_env%input, "DFT%PRINT%AO_MATRICES/W_MATRIX", &
264 extension=".Log")
265 CALL section_vals_val_get(qs_env%input, "DFT%PRINT%AO_MATRICES%NDIGITS", i_val=after)
266 CALL section_vals_val_get(qs_env%input, "DFT%PRINT%AO_MATRICES%OMIT_HEADERS", l_val=omit_headers)
267 after = min(max(after, 1), 16)
268 DO ic = 1, SIZE(matrix_w_kp, 2)
269 CALL cp_dbcsr_write_sparse_matrix(matrix_w_kp(ispin, ic)%matrix, 4, after, qs_env, &
270 para_env, output_unit=iw, omit_headers=omit_headers)
271 END DO
272 CALL cp_print_key_finished_output(iw, logger, qs_env%input, &
273 "DFT%PRINT%AO_MATRICES/W_MATRIX")
274 END IF
275 END DO
276 END IF
277
278 ! Check if energy correction should be skipped
279 perform_ec = .false.
280 IF (qs_env%energy_correction) THEN
281 CALL get_qs_env(qs_env, ec_env=ec_env)
282 IF (.NOT. ec_env%do_skip) perform_ec = .true.
283 END IF
284
285 ! Compute core forces (also overwrites matrix_w)
286 IF (dft_control%qs_control%semi_empirical) THEN
287 CALL build_se_core_matrix(qs_env=qs_env, para_env=para_env, &
288 calculate_forces=.true.)
289 CALL se_core_core_interaction(qs_env, para_env, calculate_forces=.true.)
290 ELSE IF (dft_control%qs_control%dftb) THEN
291 CALL build_dftb_matrices(qs_env=qs_env, para_env=para_env, &
292 calculate_forces=.true.)
293 CALL calculate_dftb_dispersion(qs_env=qs_env, para_env=para_env, &
294 calculate_forces=.true.)
295 ELSE IF (dft_control%qs_control%xtb) THEN
296 IF (dft_control%qs_control%xtb_control%do_tblite) THEN
297 CALL build_tblite_matrices(qs_env=qs_env, calculate_forces=.true.)
298 ELSE
299 CALL build_xtb_matrices(qs_env=qs_env, calculate_forces=.true.)
300 END IF
301 ELSE IF (perform_ec) THEN
302 ! Calculates core and grid based forces
303 CALL energy_correction(qs_env, ec_init=.false., calculate_forces=.true.)
304 ELSE
305 ! Dispersion energy and forces are calculated in qs_energy?
306 CALL build_core_hamiltonian_matrix(qs_env=qs_env, calculate_forces=.true.)
307 ! The above line reset the core H, which should be re-updated in case a TD field is applied:
308 IF (qs_env%run_rtp) THEN
309 IF (dft_control%apply_efield_field) THEN
311 END IF
312 IF (dft_control%rtp_control%velocity_gauge) THEN
313 CALL velocity_gauge_ks_matrix(qs_env, subtract_nl_term=.false.)
314 END IF
315
316 END IF
317 CALL calculate_ecore_self(qs_env)
318 CALL calculate_ecore_overlap(qs_env, para_env, calculate_forces=.true.)
319 CALL calculate_ecore_efield(qs_env, calculate_forces=.true.)
320 !swap external_e_potential before external_c_potential, to ensure
321 !that external potential on grid is loaded before calculating energy of cores
322 CALL external_e_potential(qs_env)
323 IF (.NOT. dft_control%qs_control%gapw) THEN
324 CALL external_c_potential(qs_env, calculate_forces=.true.)
325 END IF
326 ! RIGPW matrices
327 IF (dft_control%qs_control%rigpw) THEN
328 CALL get_qs_env(qs_env=qs_env, lri_env=lri_env)
329 CALL build_ri_matrices(lri_env, qs_env, calculate_forces=.true.)
330 END IF
331 END IF
332
333 ! MP2 Code
334 IF (ASSOCIATED(qs_env%mp2_env)) THEN
335 NULLIFY (energy)
336 CALL get_qs_env(qs_env, energy=energy)
337 CALL qs_scf_compute_properties(qs_env, wf_type='MP2 ', do_mp2=.true.)
338 CALL qs_ks_update_qs_env(qs_env, just_energy=.true.)
339 energy%total = energy%total + energy%mp2
340
341 IF ((qs_env%mp2_env%method == ri_mp2_method_gpw .OR. qs_env%mp2_env%method == ri_mp2_laplace .OR. &
342 qs_env%mp2_env%method == ri_rpa_method_gpw) &
343 .AND. .NOT. qs_env%mp2_env%do_im_time) THEN
344 CALL update_mp2_forces(qs_env)
345 END IF
346
347 !RPA EXX energy and forces
348 IF (qs_env%mp2_env%method == ri_rpa_method_gpw) THEN
349 do_exx = .false.
350 hfx_sections => section_vals_get_subs_vals(qs_env%input, "DFT%XC%WF_CORRELATION%RI_RPA%HF")
351 CALL section_vals_get(hfx_sections, explicit=do_exx)
352 IF (do_exx) THEN
353 do_gw = qs_env%mp2_env%ri_rpa%do_ri_g0w0
354 do_admm = qs_env%mp2_env%ri_rpa%do_admm
355 reuse_hfx = qs_env%mp2_env%ri_rpa%reuse_hfx
356 do_im_time = qs_env%mp2_env%do_im_time
357 output_unit = cp_logger_get_default_io_unit()
358 dummy_real = 0.0_dp
359
360 CALL calculate_exx(qs_env=qs_env, &
361 unit_nr=output_unit, &
362 hfx_sections=hfx_sections, &
363 x_data=qs_env%mp2_env%ri_rpa%x_data, &
364 do_gw=do_gw, &
365 do_admm=do_admm, &
366 calc_forces=.true., &
367 reuse_hfx=reuse_hfx, &
368 do_im_time=do_im_time, &
369 e_ex_from_gw=dummy_real, &
370 e_admm_from_gw=dummy_real2, &
371 t3=dummy_real)
372 END IF
373 END IF
374 ELSE IF (perform_ec) THEN
375 ! energy correction forces postponed
376 ELSE IF (qs_env%harris_method) THEN
377 ! Harris method forces already done in harris_energy_correction
378 ELSE
379 ! Compute grid-based forces
380 CALL qs_ks_update_qs_env(qs_env, calculate_forces=.true.)
381 END IF
382
383 ! Excited state forces
384 ! Solve the response linear equation system for the Z-vector method
385 ! and calculate remaining terms of the force
386 CALL excited_state_energy(qs_env, calculate_forces=.true.)
387
388 ! replicate forces (get current pointer)
389 NULLIFY (force)
390 CALL get_qs_env(qs_env=qs_env, force=force)
391 CALL replicate_qs_force(force, para_env)
392
393 DO iatom = 1, natom
394 ikind = kind_of(iatom)
395 i = atom_of_kind(iatom)
396 ! XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
397 ! the force is - dE/dR, what is called force is actually the gradient
398 ! Things should have the right name
399 ! The minus sign below is a hack
400 ! XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
401 force(ikind)%other(1:3, i) = -particle_set(iatom)%f(1:3) + force(ikind)%ch_pulay(1:3, i)
402 force(ikind)%total(1:3, i) = force(ikind)%total(1:3, i) + force(ikind)%other(1:3, i)
403 particle_set(iatom)%f = -force(ikind)%total(1:3, i)
404 END DO
405
406 NULLIFY (cell, virial, energy)
407 CALL get_qs_env(qs_env=qs_env, cell=cell, virial=virial, energy=energy)
408 IF (virial%pv_availability) THEN
409 CALL para_env%sum(virial%pv_overlap)
410 CALL para_env%sum(virial%pv_ekinetic)
411 CALL para_env%sum(virial%pv_ppl)
412 CALL para_env%sum(virial%pv_ppnl)
413 CALL para_env%sum(virial%pv_ecore_overlap)
414 CALL para_env%sum(virial%pv_ehartree)
415 CALL para_env%sum(virial%pv_exc)
416 CALL para_env%sum(virial%pv_exx)
417 CALL para_env%sum(virial%pv_vdw)
418 CALL para_env%sum(virial%pv_mp2)
419 CALL para_env%sum(virial%pv_nlcc)
420 CALL para_env%sum(virial%pv_gapw)
421 CALL para_env%sum(virial%pv_lrigpw)
422 CALL para_env%sum(virial%pv_virial)
423 CALL symmetrize_virial(virial)
424 ! Add the volume terms of the virial
425 IF ((.NOT. virial%pv_numer) .AND. &
426 (.NOT. (dft_control%qs_control%dftb .OR. &
427 dft_control%qs_control%xtb .OR. &
428 dft_control%qs_control%semi_empirical))) THEN
429
430 ! Harris energy correction requires volume terms from
431 ! 1) Harris functional contribution, and
432 ! 2) Linear Response solver
433 IF (perform_ec) THEN
434 CALL get_qs_env(qs_env, ec_env=ec_env)
435 energy%hartree = ec_env%ehartree
436 energy%exc = ec_env%exc
437 IF (dft_control%do_admm) THEN
438 energy%exc_aux_fit = ec_env%exc_aux_fit
439 END IF
440 END IF
441 DO i = 1, 3
442 virial%pv_ehartree(i, i) = virial%pv_ehartree(i, i) &
443 - 2.0_dp*(energy%hartree + energy%sccs_pol)
444 virial%pv_virial(i, i) = virial%pv_virial(i, i) - energy%exc &
445 - 2.0_dp*(energy%hartree + energy%sccs_pol)
446 virial%pv_exc(i, i) = virial%pv_exc(i, i) - energy%exc
447 IF (dft_control%do_admm) THEN
448 virial%pv_exc(i, i) = virial%pv_exc(i, i) - energy%exc_aux_fit
449 virial%pv_virial(i, i) = virial%pv_virial(i, i) - energy%exc_aux_fit
450 END IF
451 ! The factor 2 is a hack. It compensates the plus sign in h_stress/pw_poisson_solve.
452 ! The sign in pw_poisson_solve is correct for FIST, but not for QS.
453 ! There should be a more elegant solution to that ...
454 END DO
455 END IF
456 IF ((.NOT. virial%pv_numer) .AND. count(cell%perd /= 0) == 2) THEN
457 SELECT CASE (dft_control%qs_control%method_id)
460 CALL project_virial_to_periodic_subspace(virial, cell%perd)
461 END SELECT
462 END IF
463 END IF
464
465 IF (dft_control%qs_control%xtb .AND. dft_control%qs_control%xtb_control%do_tblite) THEN
466 CALL tb_reference_cli_compare(qs_env)
467 END IF
468
469 output_unit = cp_print_key_unit_nr(logger, qs_env%input, "DFT%PRINT%DERIVATIVES", &
470 extension=".Log")
471 print_section => section_vals_get_subs_vals(qs_env%input, "DFT%PRINT%DERIVATIVES")
472 IF (dft_control%qs_control%semi_empirical) THEN
473 CALL write_forces(force, atomic_kind_set, 2, output_unit=output_unit, &
474 print_section=print_section)
475 ELSE IF (dft_control%qs_control%dftb) THEN
476 CALL write_forces(force, atomic_kind_set, 4, output_unit=output_unit, &
477 print_section=print_section)
478 ELSE IF (dft_control%qs_control%xtb) THEN
479 CALL write_forces(force, atomic_kind_set, 4, output_unit=output_unit, &
480 print_section=print_section)
481 ELSE IF (dft_control%qs_control%gapw .OR. dft_control%qs_control%gapw_xc) THEN
482 CALL write_forces(force, atomic_kind_set, 1, output_unit=output_unit, &
483 print_section=print_section)
484 ELSE
485 CALL write_forces(force, atomic_kind_set, 0, output_unit=output_unit, &
486 print_section=print_section)
487 END IF
488 CALL cp_print_key_finished_output(output_unit, logger, qs_env%input, &
489 "DFT%PRINT%DERIVATIVES")
490
491 ! deallocate W Matrix:
492 NULLIFY (ks_env, matrix_w_kp)
493 CALL get_qs_env(qs_env=qs_env, &
494 matrix_w_kp=matrix_w_kp, &
495 ks_env=ks_env)
496 CALL dbcsr_deallocate_matrix_set(matrix_w_kp)
497 NULLIFY (matrix_w_kp)
498 CALL set_ks_env(ks_env, matrix_w_kp=matrix_w_kp)
499
500 DEALLOCATE (atom_of_kind, kind_of)
501
502 CALL timestop(handle)
503
504 END SUBROUTINE qs_forces
505
506! **************************************************************************************************
507!> \brief Write a Quickstep force data structure to output unit
508!> \param qs_force ...
509!> \param atomic_kind_set ...
510!> \param ftype ...
511!> \param output_unit ...
512!> \param print_section ...
513!> \date 05.06.2002
514!> \author MK
515!> \version 1.0
516! **************************************************************************************************
517 SUBROUTINE write_forces(qs_force, atomic_kind_set, ftype, output_unit, &
518 print_section)
519
520 TYPE(qs_force_type), DIMENSION(:), POINTER :: qs_force
521 TYPE(atomic_kind_type), DIMENSION(:), POINTER :: atomic_kind_set
522 INTEGER, INTENT(IN) :: ftype, output_unit
523 TYPE(section_vals_type), POINTER :: print_section
524
525 CHARACTER(LEN=13) :: fmtstr5
526 CHARACTER(LEN=15) :: fmtstr4
527 CHARACTER(LEN=20) :: fmtstr3
528 CHARACTER(LEN=35) :: fmtstr2
529 CHARACTER(LEN=48) :: fmtstr1
530 INTEGER :: i, iatom, ikind, my_ftype, natom, ndigits
531 INTEGER, ALLOCATABLE, DIMENSION(:) :: atom_of_kind, kind_of
532 REAL(kind=dp), DIMENSION(3) :: grand_total
533
534 IF (output_unit > 0) THEN
535
536 IF (.NOT. ASSOCIATED(qs_force)) THEN
537 CALL cp_abort(__location__, &
538 "The qs_force pointer is not associated "// &
539 "and cannot be printed")
540 END IF
541
542 CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set, atom_of_kind=atom_of_kind, &
543 kind_of=kind_of, natom=natom)
544
545 ! Variable precision output of the forces
546 CALL section_vals_val_get(print_section, "NDIGITS", &
547 i_val=ndigits)
548
549 fmtstr1 = "(/,/,T2,A,/,/,T3,A,T11,A,T23,A,T40,A1,2( X,A1))"
550 WRITE (unit=fmtstr1(41:42), fmt="(I2)") ndigits + 5
551
552 fmtstr2 = "(/,(T2,I5,4X,I4,T18,A,T34,3F . ))"
553 WRITE (unit=fmtstr2(32:33), fmt="(I2)") ndigits
554 WRITE (unit=fmtstr2(29:30), fmt="(I2)") ndigits + 6
555
556 fmtstr3 = "(/,T3,A,T34,3F . )"
557 WRITE (unit=fmtstr3(18:19), fmt="(I2)") ndigits
558 WRITE (unit=fmtstr3(15:16), fmt="(I2)") ndigits + 6
559
560 fmtstr4 = "((T34,3F . ))"
561 WRITE (unit=fmtstr4(12:13), fmt="(I2)") ndigits
562 WRITE (unit=fmtstr4(9:10), fmt="(I2)") ndigits + 6
563
564 fmtstr5 = "(/T2,A//T3,A)"
565
566 WRITE (unit=output_unit, fmt=fmtstr1) &
567 "FORCES [a.u.]", "Atom", "Kind", "Component", "X", "Y", "Z"
568
569 grand_total(:) = 0.0_dp
570
571 my_ftype = ftype
572
573 SELECT CASE (my_ftype)
574 CASE DEFAULT
575 DO iatom = 1, natom
576 ikind = kind_of(iatom)
577 i = atom_of_kind(iatom)
578 WRITE (unit=output_unit, fmt=fmtstr2) &
579 iatom, ikind, " total", qs_force(ikind)%total(1:3, i)
580 grand_total(1:3) = grand_total(1:3) + qs_force(ikind)%total(1:3, i)
581 END DO
582 CASE (0)
583 DO iatom = 1, natom
584 ikind = kind_of(iatom)
585 i = atom_of_kind(iatom)
586 WRITE (unit=output_unit, fmt=fmtstr2) &
587 iatom, ikind, " overlap", qs_force(ikind)%overlap(1:3, i), &
588 iatom, ikind, " overlap_admm", qs_force(ikind)%overlap_admm(1:3, i), &
589 iatom, ikind, " kinetic", qs_force(ikind)%kinetic(1:3, i), &
590 iatom, ikind, " gth_ppl", qs_force(ikind)%gth_ppl(1:3, i), &
591 iatom, ikind, " gth_nlcc", qs_force(ikind)%gth_nlcc(1:3, i), &
592 iatom, ikind, " gth_ppnl", qs_force(ikind)%gth_ppnl(1:3, i), &
593 iatom, ikind, " core_overlap", qs_force(ikind)%core_overlap(1:3, i), &
594 iatom, ikind, " rho_core", qs_force(ikind)%rho_core(1:3, i), &
595 iatom, ikind, " rho_elec", qs_force(ikind)%rho_elec(1:3, i), &
596 iatom, ikind, " rho_lri_elec", qs_force(ikind)%rho_lri_elec(1:3, i), &
597 iatom, ikind, " ch_pulay", qs_force(ikind)%ch_pulay(1:3, i), &
598 iatom, ikind, " dispersion", qs_force(ikind)%dispersion(1:3, i), &
599 iatom, ikind, " gCP", qs_force(ikind)%gcp(1:3, i), &
600 iatom, ikind, " other", qs_force(ikind)%other(1:3, i), &
601 iatom, ikind, " fock_4c", qs_force(ikind)%fock_4c(1:3, i), &
602 iatom, ikind, " ehrenfest", qs_force(ikind)%ehrenfest(1:3, i), &
603 iatom, ikind, " efield", qs_force(ikind)%efield(1:3, i), &
604 iatom, ikind, " eev", qs_force(ikind)%eev(1:3, i), &
605 iatom, ikind, " mp2_non_sep", qs_force(ikind)%mp2_non_sep(1:3, i), &
606 iatom, ikind, " tensorial_u", qs_force(ikind)%tensorial_u(1:3, i), &
607 iatom, ikind, " total", qs_force(ikind)%total(1:3, i)
608 grand_total(1:3) = grand_total(1:3) + qs_force(ikind)%total(1:3, i)
609 END DO
610 CASE (1)
611 DO iatom = 1, natom
612 ikind = kind_of(iatom)
613 i = atom_of_kind(iatom)
614 WRITE (unit=output_unit, fmt=fmtstr2) &
615 iatom, ikind, " overlap", qs_force(ikind)%overlap(1:3, i), &
616 iatom, ikind, " overlap_admm", qs_force(ikind)%overlap_admm(1:3, i), &
617 iatom, ikind, " kinetic", qs_force(ikind)%kinetic(1:3, i), &
618 iatom, ikind, " gth_ppl", qs_force(ikind)%gth_ppl(1:3, i), &
619 iatom, ikind, " gth_nlcc", qs_force(ikind)%gth_nlcc(1:3, i), &
620 iatom, ikind, " gth_ppnl", qs_force(ikind)%gth_ppnl(1:3, i), &
621 iatom, ikind, " all_potential", qs_force(ikind)%all_potential(1:3, i), &
622 iatom, ikind, "cneo_potential", qs_force(ikind)%cneo_potential(1:3, i), &
623 iatom, ikind, " core_overlap", qs_force(ikind)%core_overlap(1:3, i), &
624 iatom, ikind, " rho_core", qs_force(ikind)%rho_core(1:3, i), &
625 iatom, ikind, " rho_elec", qs_force(ikind)%rho_elec(1:3, i), &
626 iatom, ikind, " rho_lri_elec", qs_force(ikind)%rho_lri_elec(1:3, i), &
627 iatom, ikind, " rho_cneo_nuc", qs_force(ikind)%rho_cneo_nuc(1:3, i), &
628 iatom, ikind, " vhxc_atom", qs_force(ikind)%vhxc_atom(1:3, i), &
629 iatom, ikind, " g0s_Vh_elec", qs_force(ikind)%g0s_Vh_elec(1:3, i), &
630 iatom, ikind, " ch_pulay", qs_force(ikind)%ch_pulay(1:3, i), &
631 iatom, ikind, " dispersion", qs_force(ikind)%dispersion(1:3, i), &
632 iatom, ikind, " gCP", qs_force(ikind)%gcp(1:3, i), &
633 iatom, ikind, " fock_4c", qs_force(ikind)%fock_4c(1:3, i), &
634 iatom, ikind, " ehrenfest", qs_force(ikind)%ehrenfest(1:3, i), &
635 iatom, ikind, " efield", qs_force(ikind)%efield(1:3, i), &
636 iatom, ikind, " eev", qs_force(ikind)%eev(1:3, i), &
637 iatom, ikind, " mp2_non_sep", qs_force(ikind)%mp2_non_sep(1:3, i), &
638 iatom, ikind, " tensorial_u", qs_force(ikind)%tensorial_u(1:3, i), &
639 iatom, ikind, " total", qs_force(ikind)%total(1:3, i)
640 grand_total(1:3) = grand_total(1:3) + qs_force(ikind)%total(1:3, i)
641 END DO
642 CASE (2)
643 DO iatom = 1, natom
644 ikind = kind_of(iatom)
645 i = atom_of_kind(iatom)
646 WRITE (unit=output_unit, fmt=fmtstr2) &
647 iatom, ikind, " all_potential", qs_force(ikind)%all_potential(1:3, i), &
648 iatom, ikind, " rho_elec", qs_force(ikind)%rho_elec(1:3, i), &
649 iatom, ikind, " total", qs_force(ikind)%total(1:3, i)
650 grand_total(1:3) = grand_total(1:3) + qs_force(ikind)%total(1:3, i)
651 END DO
652 CASE (3)
653 DO iatom = 1, natom
654 ikind = kind_of(iatom)
655 i = atom_of_kind(iatom)
656 WRITE (unit=output_unit, fmt=fmtstr2) &
657 iatom, ikind, " overlap", qs_force(ikind)%overlap(1:3, i), &
658 iatom, ikind, "overlap_admm", qs_force(ikind)%overlap_admm(1:3, i), &
659 iatom, ikind, " kinetic", qs_force(ikind)%kinetic(1:3, i), &
660 iatom, ikind, " gth_ppl", qs_force(ikind)%gth_ppl(1:3, i), &
661 iatom, ikind, " gth_nlcc", qs_force(ikind)%gth_nlcc(1:3, i), &
662 iatom, ikind, " gth_ppnl", qs_force(ikind)%gth_ppnl(1:3, i), &
663 iatom, ikind, " core_overlap", qs_force(ikind)%core_overlap(1:3, i), &
664 iatom, ikind, " rho_core", qs_force(ikind)%rho_core(1:3, i), &
665 iatom, ikind, " rho_elec", qs_force(ikind)%rho_elec(1:3, i), &
666 iatom, ikind, " ch_pulay", qs_force(ikind)%ch_pulay(1:3, i), &
667 iatom, ikind, " fock_4c", qs_force(ikind)%fock_4c(1:3, i), &
668 iatom, ikind, " mp2_non_sep", qs_force(ikind)%mp2_non_sep(1:3, i), &
669 iatom, ikind, " tensorial_u", qs_force(ikind)%tensorial_u(1:3, i), &
670 iatom, ikind, " total", qs_force(ikind)%total(1:3, i)
671 grand_total(1:3) = grand_total(1:3) + qs_force(ikind)%total(1:3, i)
672 END DO
673 CASE (4)
674 DO iatom = 1, natom
675 ikind = kind_of(iatom)
676 i = atom_of_kind(iatom)
677 WRITE (unit=output_unit, fmt=fmtstr2) &
678 iatom, ikind, " all_potential", qs_force(ikind)%all_potential(1:3, i), &
679 iatom, ikind, " overlap", qs_force(ikind)%overlap(1:3, i), &
680 iatom, ikind, " rho_elec", qs_force(ikind)%rho_elec(1:3, i), &
681 iatom, ikind, " repulsive", qs_force(ikind)%repulsive(1:3, i), &
682 iatom, ikind, " dispersion", qs_force(ikind)%dispersion(1:3, i), &
683 iatom, ikind, " efield", qs_force(ikind)%efield(1:3, i), &
684 iatom, ikind, " ehrenfest", qs_force(ikind)%ehrenfest(1:3, i), &
685 iatom, ikind, " total", qs_force(ikind)%total(1:3, i)
686 grand_total(1:3) = grand_total(1:3) + qs_force(ikind)%total(1:3, i)
687 END DO
688 CASE (5)
689 DO iatom = 1, natom
690 ikind = kind_of(iatom)
691 i = atom_of_kind(iatom)
692 WRITE (unit=output_unit, fmt=fmtstr2) &
693 iatom, ikind, " overlap", qs_force(ikind)%overlap(1:3, i), &
694 iatom, ikind, " kinetic", qs_force(ikind)%kinetic(1:3, i), &
695 iatom, ikind, " rho_elec", qs_force(ikind)%rho_elec(1:3, i), &
696 iatom, ikind, " dispersion", qs_force(ikind)%dispersion(1:3, i), &
697 iatom, ikind, " all potential", qs_force(ikind)%all_potential(1:3, i), &
698 iatom, ikind, " other", qs_force(ikind)%other(1:3, i), &
699 iatom, ikind, " total", qs_force(ikind)%total(1:3, i)
700 grand_total(1:3) = grand_total(1:3) + qs_force(ikind)%total(1:3, i)
701 END DO
702 END SELECT
703
704 WRITE (unit=output_unit, fmt=fmtstr3) "Sum of total", grand_total(1:3)
705
706 DEALLOCATE (atom_of_kind)
707 DEALLOCATE (kind_of)
708
709 END IF
710
711 END SUBROUTINE write_forces
712
713END MODULE qs_force
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind_set(atomic_kind_set, atom_of_kind, kind_of, natom_of_kind, maxatom, natom, nshell, fist_potential_present, shell_present, shell_adiabatic, shell_check_distance, damping_present)
Get attributes of an atomic kind set.
Handles all functions related to the CELL.
Definition cell_types.F:15
Defines control structures, which contain the parameters and the settings for the DFT-based calculati...
subroutine, public dbcsr_copy(matrix_b, matrix_a, name, keep_sparsity, keep_imaginary)
...
subroutine, public dbcsr_set(matrix, alpha)
...
DBCSR operations in CP2K.
DBCSR output in CP2K.
subroutine, public cp_dbcsr_write_sparse_matrix(sparse_matrix, before, after, qs_env, para_env, first_row, last_row, first_col, last_col, scale, output_unit, omit_headers, cartesian_basis)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
integer function, public cp_print_key_unit_nr(logger, basis_section, print_key_path, extension, middle_name, local, log_filename, ignore_should_output, file_form, file_position, file_action, file_status, do_backup, on_file, is_new_file, mpi_io, fout)
...
subroutine, public cp_print_key_finished_output(unit_nr, logger, basis_section, print_key_path, local, ignore_should_output, on_file, mpi_io)
should be called after you finish working with a unit obtained with cp_print_key_unit_nr,...
integer, parameter, public cp_p_file
integer function, public cp_print_key_should_output(iteration_info, basis_section, print_key_path, used_print_key, first_time)
returns what should be done with the given property if btest(res,cp_p_store) then the property should...
Add the DFT+U contribution to the Hamiltonian matrix.
Definition dft_plus_u.F:18
subroutine, public plus_u(qs_env, matrix_h, matrix_w)
Add the DFT+U contribution to the Hamiltonian matrix. Wrapper routine for all "+U" methods.
Definition dft_plus_u.F:107
Types needed for a for a Energy Correction.
all routins needed for a nonperiodic electric field
subroutine, public calculate_ecore_efield(qs_env, calculate_forces)
Computes the force and the energy due to a efield on the cores Note: In the velocity gauge,...
subroutine, public efield_potential_lengh_gauge(qs_env)
Replace the original implementation of the electric-electronic interaction in the length gauge....
Routines for an energy correction on top of a Kohn-Sham calculation.
subroutine, public energy_correction(qs_env, ec_init, calculate_forces)
Energy Correction to a Kohn-Sham simulation Available energy corrections: (1) Harris energy functiona...
Routines for total energy and forces of excited states.
subroutine, public excited_state_energy(qs_env, calculate_forces)
Excited state energy and forces.
Routines to calculate EXX in RPA and energy correction methods.
Definition hfx_exx.F:16
subroutine, public calculate_exx(qs_env, unit_nr, hfx_sections, x_data, do_gw, do_admm, calc_forces, reuse_hfx, do_im_time, e_ex_from_gw, e_admm_from_gw, t3)
...
Definition hfx_exx.F:106
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public do_method_ofgpw
integer, parameter, public do_method_rigpw
integer, parameter, public do_method_gpw
integer, parameter, public ri_rpa_method_gpw
integer, parameter, public ri_mp2_method_gpw
integer, parameter, public do_method_gapw
integer, parameter, public ri_mp2_laplace
integer, parameter, public do_method_lrigpw
integer, parameter, public do_method_gapw_xc
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
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
contains the types and subroutines for dealing with the lri_env lri : local resolution of the identit...
Interface to the message passing library MPI.
Routines to calculate CPHF like update and solve Z-vector equation for MP2 gradients (only GPW)
Definition mp2_cphf.F:14
subroutine, public update_mp2_forces(qs_env)
...
Definition mp2_cphf.F:1283
compute mulliken charges we (currently) define them as c_i = 1/2 [ (PS)_{ii} + (SP)_{ii} ]
Definition mulliken.F:13
subroutine, public mulliken_restraint(mulliken_restraint_control, para_env, s_matrix, p_matrix, energy, order_p, ks_matrix, w_matrix)
computes the energy and density matrix derivate of a constraint on the mulliken charges
Definition mulliken.F:73
Define the data structure for the particle information.
Calculation of the energies concerning the core charge distribution.
subroutine, public calculate_ecore_overlap(qs_env, para_env, calculate_forces, molecular, e_overlap_core, atecc)
Calculate the overlap energy of the core charge distribution.
subroutine, public calculate_ecore_self(qs_env, e_self_core, atecc)
Calculate the self energy of the core charge distribution.
Calculation of the core Hamiltonian integral matrix <a|H|b> over Cartesian Gaussian-type functions.
subroutine, public build_core_hamiltonian_matrix(qs_env, calculate_forces)
Cosntruction of the QS Core Hamiltonian Matrix.
Calculation of dispersion in DFTB.
subroutine, public calculate_dftb_dispersion(qs_env, para_env, calculate_forces)
...
Calculation of Overlap and Hamiltonian matrices in DFTB.
subroutine, public build_dftb_matrices(qs_env, para_env, calculate_forces)
...
Perform a QUICKSTEP wavefunction optimization (single point)
Definition qs_energy.F:14
subroutine, public qs_energies(qs_env, consistent_energies, calc_forces)
Driver routine for QUICKSTEP single point wavefunction optimization.
Definition qs_energy.F:70
qs_environment methods that use many other modules
subroutine, public qs_env_rebuild_pw_env(qs_env)
rebuilds the pw_env in the given qs_env, allocating it if necessary
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, matrix_vhxc, 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.
Routines to handle an external electrostatic field The external field can be generic and is provided ...
subroutine, public external_c_potential(qs_env, calculate_forces)
Computes the force and the energy due to the external potential on the cores.
subroutine, public external_e_potential(qs_env)
Computes the external potential on the grid.
subroutine, public replicate_qs_force(qs_force, para_env)
Replicate and sum up the force.
subroutine, public zero_qs_force(qs_force)
Initialize a Quickstep force data structure.
subroutine, public allocate_qs_force(qs_force, natom_of_kind)
Allocate a Quickstep force data structure.
Quickstep force driver routine.
Definition qs_force.F:12
subroutine, public qs_calc_energy_force(qs_env, calc_force, consistent_energies, linres)
...
Definition qs_force.F:111
routines that build the Kohn-Sham matrix (i.e calculate the coulomb and xc parts
subroutine, public qs_ks_update_qs_env(qs_env, calculate_forces, just_energy, print_active)
updates the Kohn Sham matrix of the given qs_env (facility method)
subroutine, public set_ks_env(ks_env, v_hartree_rspace, s_mstruct_changed, rho_changed, exc_accint, potential_changed, forces_up_to_date, complex_ks, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, kinetic, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, matrix_vhxc, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_ks_im_kp, vppl, xcint_weights, rho_core, rho_nlcc, rho_nlcc_g, vee, neighbor_list_id, kpoints, sab_orb, sab_all, sac_ae, sac_ppl, sac_lri, sap_ppnl, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_vdw, sab_scp, sab_almo, sab_kp, sab_kp_nosym, sab_cneo, task_list, task_list_soft, subsys, dft_control, dbcsr_dist, distribution_2d, pw_env, para_env, blacs_env)
...
superstucture that hold various representations of the density and keeps track of which ones are vali...
subroutine, public qs_rho_get(rho_struct, rho_ao, rho_ao_im, rho_ao_kp, rho_ao_im_kp, rho_r, drho_r, rho_g, drho_g, tau_r, tau_g, rho_r_valid, drho_r_valid, rho_g_valid, drho_g_valid, tau_r_valid, tau_g_valid, tot_rho_r, tot_rho_g, rho_r_sccs, soft_valid, complex_rho_ao)
returns info about the density described by this object. If some representation is not available an e...
Utility routines for qs_scf.
subroutine, public qs_scf_compute_properties(qs_env, wf_type, do_mp2)
computes properties for a given hamilonian using the current wfn
types that represent a quickstep subsys
subroutine, public qs_subsys_set(subsys, cp_subsys, local_particles, local_molecules, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, nelectron_total, nelectron_spin)
...
Calculates integral matrices for RIGPW method.
subroutine, public build_ri_matrices(lri_env, qs_env, calculate_forces)
creates and initializes an lri_env
Routines needed for EMD.
subroutine, public rt_admm_force(qs_env)
...
subroutine, public calc_c_mat_force(qs_env)
calculates the three additional force contributions needed in EMD P_imag*C , P_imag*B*S^-1*S_der ,...
Routines to perform the RTP in the velocity gauge.
subroutine, public velocity_gauge_nl_force(qs_env, particle_set)
Calculate the force associated to non-local pseudo potential in the velocity gauge.
subroutine, public velocity_gauge_ks_matrix(qs_env, subtract_nl_term)
...
Split and build its own idependent core_core SE interaction module.
subroutine, public se_core_core_interaction(qs_env, para_env, calculate_forces)
Evaluates the core-core interactions for NDDO methods.
Calculation of the Hamiltonian integral matrix <a|H|b> for semi-empirical methods.
subroutine, public build_se_core_matrix(qs_env, para_env, calculate_forces)
...
interface to tblite
subroutine, public build_tblite_matrices(qs_env, calculate_forces)
...
subroutine, public tb_reference_cli_compare(qs_env)
Run native tblite CLI and compare against CP2K/tblite.
subroutine, public project_virial_to_periodic_subspace(virial, periodic)
Project all virial components to the periodic subspace of a low-dimensional cell.
subroutine, public symmetrize_virial(virial)
Symmetrize the virial components.
Calculation of Overlap and Hamiltonian matrices in xTB Reference: Stefan Grimme, Christoph Bannwarth,...
subroutine, public build_xtb_matrices(qs_env, calculate_forces)
...
Provides all information about an atomic kind.
Type defining parameters related to the simulation cell.
Definition cell_types.F:60
type of a logger, at the moment it contains just a print level starting at which level it should be l...
Contains information on the energy correction functional for KG.
stores all the informations relevant to an mpi environment
calculation environment to calculate the ks matrix, holds all the needed vars. assumes that the core ...
keeps the density in various representations, keeping track of which ones are valid.