54#include "./base/base_uses.f90"
60 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .false.
62 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'cp_eri_mme_interface'
75 MODULE PROCEDURE eri_mme_set_params_from_basis
76 MODULE PROCEDURE eri_mme_set_params_custom
82#if defined(FTN_NO_DEFAULT_INIT)
88 POINTER :: mme_section => null()
89 INTEGER :: g_count_2c = 0, r_count_2c = 0
90 INTEGER :: gg_count_3c = 0, gr_count_3c = 0, rr_count_3c = 0
91 LOGICAL :: do_calib = .false.
102 INTEGER,
INTENT(IN),
OPTIONAL :: default_n_minimax
104 INTEGER :: my_default_n_minimax
108 NULLIFY (keyword, print_key, subsection)
109 cpassert(.NOT.
ASSOCIATED(section))
111 IF (
PRESENT(default_n_minimax))
THEN
112 my_default_n_minimax = default_n_minimax
114 my_default_n_minimax = 20
118 description=
"Parameters for the calculation of periodic electron repulsion "// &
119 "integrals (ERI) using the Minimax-Ewald (MME) method. "// &
120 "Note: N_MINIMAX is the only parameter to be tuned for accuracy, "// &
121 "all other parameters can be left to default. MME method is faster "// &
122 "than numerical GPW.", &
123 n_keywords=5, n_subsections=1)
127 description=
"Number of terms in minimax approximation of "// &
128 "reciprocal space potential. ", &
129 default_i_val=my_default_n_minimax)
135 description=
"User-defined energy cutoff to be used only if "// &
136 "DO_CALIBRATE_CUTOFF is set to .FALSE. ", &
137 default_r_val=300.0_dp)
142 name=
"SUM_PRECISION", &
143 description=
"Terms in lattice sums are ignored if absolute value smaller than this value.", &
144 default_r_val=1.0e-16_dp)
149 name=
"DO_CALIBRATE_CUTOFF", &
150 description=
"Whether the energy cutoff shall be calibrated to "// &
151 "minimize upper bound error estimate. ", &
152 default_l_val=.true., &
153 lone_keyword_l_val=.true.)
158 name=
"DO_ERROR_ESTIMATE", &
159 description=
"Whether the error due to minimax approx. and cutoff shall be estimated", &
160 default_l_val=.true., &
161 lone_keyword_l_val=.true.)
166 description=
"Controls the printing info.", &
172 name=
"PRINT_CALIB", &
173 description=
"Print detailed info on calibration. ", &
174 default_l_val=.false., &
175 lone_keyword_l_val=.true.)
181 description=
"debug mode (consistency of summation methods is checked).", &
182 default_l_val=.false., &
183 lone_keyword_l_val=.true.)
188 name=
"DEBUG_TOLERANCE", &
189 description=
"tolerance for rel. numerical error in debug mode.", &
190 default_r_val=1.0e-06_dp)
195 name=
"DEBUG_NSUM_MAX", &
196 description=
"restrict debug mode for non-ortho cells to this number of summands. "// &
197 "Sums with more terms are not checked.", &
198 default_i_val=1000000)
202 CALL section_create(subsection, __location__, name=
"CUTOFF_CALIB", &
203 description=
"Parameters for the calibration of the energy cutoff by "// &
204 "minimizing the errors due to finite cutoff and minimax approximation. "// &
205 "Implemented as bisection of error(minimax) - error(cutoff). Not "// &
206 "implemented for non-orthorhombic cells. ", &
207 n_keywords=5, n_subsections=0)
211 description=
"Initial guess of lower bound for cutoff. ", &
212 default_r_val=10.0_dp)
218 description=
"Initial guess of upper bound for cutoff. ", &
219 default_r_val=10000.0_dp)
225 description=
"Relative widening of cutoff interval in case starting "// &
226 "values are not valid. ", &
227 default_r_val=0.9_dp)
233 description=
"Relative cutoff precision required to stop calibration. ", &
234 default_r_val=0.01_dp)
252 INTEGER :: debug_nsum, n_minimax, unit_nr
253 LOGICAL :: debug, do_calib_cutoff, do_error_est, &
255 REAL(kind=
dp) :: cutoff, cutoff_delta, cutoff_eps, &
256 cutoff_max, cutoff_min, debug_delta, &
263 extension=
".eri_mme")
282 param%mme_section => mme_section
285 cutoff, do_calib_cutoff, do_error_est, cutoff_min, cutoff_max, cutoff_eps, cutoff_delta, &
286 sum_precision, debug, debug_delta, debug_nsum, unit_nr, print_calib)
288 param%do_calib = do_calib_cutoff
292 param%GG_count_3c = 0
293 param%GR_count_3c = 0
294 param%RR_count_3c = 0
296 param%logger => logger
306 INTEGER :: count_2c, count_3c, unit_nr
308 count_2c = param%G_count_2c + param%R_count_2c
309 count_3c = param%GG_count_3c + param%GR_count_3c + param%RR_count_3c
311 unit_nr = param%par%unit_nr
313 IF (unit_nr > 0)
THEN
314 IF (count_2c .GT. 0)
THEN
315 WRITE (unit_nr,
'(/T2, A)')
"ERI_MME| Percentage of 2-center integrals evaluated in"
316 WRITE (unit_nr,
'(T2, A, T76, F5.1)')
"ERI_MME| G space:", &
317 100.0_dp*param%G_count_2c/count_2c
318 WRITE (unit_nr,
'(T2, A, T76, F5.1/)')
"ERI_MME| R space:", &
319 100.0_dp*param%R_count_2c/count_2c
321 IF (count_3c .GT. 0)
THEN
322 WRITE (unit_nr,
'(/T2, A)')
"ERI_MME| Percentage of 3-center integrals evaluated in"
323 WRITE (unit_nr,
'(T2, A, T76, F5.1)')
"ERI_MME| G/G space:", &
324 100.0_dp*param%GG_count_3c/count_3c
325 WRITE (unit_nr,
'(T2, A, T76, F5.1)')
"ERI_MME| G/R space:", &
326 100.0_dp*param%GR_count_3c/count_3c
327 WRITE (unit_nr,
'(T2, A, T76, F5.1/)')
"ERI_MME| R/R space:", &
328 100.0_dp*param%RR_count_3c/count_3c
348 SUBROUTINE eri_mme_set_params_from_basis(param, cell, qs_kind_set, basis_type_1, basis_type_2, para_env, &
353 POINTER :: qs_kind_set
354 CHARACTER(len=*),
INTENT(IN) :: basis_type_1
355 CHARACTER(len=*),
INTENT(IN),
OPTIONAL :: basis_type_2
357 INTEGER,
INTENT(IN),
OPTIONAL :: potential
358 REAL(KIND=
dp),
INTENT(IN),
OPTIONAL :: pot_par
360 CHARACTER(LEN=*),
PARAMETER :: routineN =
'eri_mme_set_params_from_basis'
362 INTEGER :: handle, l_max, l_max_zet
363 REAL(KIND=
dp) :: zet_max, zet_min
365 CALL timeset(routinen, handle)
367 CALL error_est_pgf_params_from_basis(qs_kind_set, basis_type_1, basis_type_2, &
368 zet_min, zet_max, l_max_zet, l_max)
370 CALL eri_mme_set_params_custom(param, cell%hmat, cell%orthorhombic, &
371 zet_min, zet_max, l_max_zet, &
375 CALL timestop(handle)
376 END SUBROUTINE eri_mme_set_params_from_basis
391 SUBROUTINE eri_mme_set_params_custom(param, hmat, is_ortho, zet_min, zet_max, l_max_zet, l_max, para_env, &
394 REAL(kind=
dp),
DIMENSION(3, 3),
INTENT(IN) :: hmat
395 LOGICAL,
INTENT(IN) :: is_ortho
396 REAL(kind=
dp),
INTENT(IN) :: zet_min, zet_max
397 INTEGER,
INTENT(IN) :: l_max_zet, l_max
399 INTEGER,
INTENT(IN),
OPTIONAL :: potential
400 REAL(KIND=
dp),
INTENT(IN),
OPTIONAL :: pot_par
402 REAL(KIND=
dp),
PARAMETER :: eps_changed = 1.0e-14_dp
404 IF (param%do_calib)
THEN
405 IF (.NOT. param%par%is_valid)
THEN
406 param%par%do_calib_cutoff = .true.
409 IF (all(abs(param%par%hmat - hmat) < eps_changed) .AND. &
410 abs(param%par%zet_min - zet_min) < eps_changed .AND. &
411 abs(param%par%zet_max - zet_max) < eps_changed .AND. &
412 param%par%l_max_zet == l_max_zet)
THEN
413 param%par%do_calib_cutoff = .false.
415 param%par%do_calib_cutoff = .true.
419 param%par%do_calib_cutoff = .false.
422 CALL eri_mme_set_params(param%par, hmat, is_ortho, zet_min, zet_max, l_max_zet, l_max, para_env, &
425 CALL eri_mme_print_info(param)
426 END SUBROUTINE eri_mme_set_params_custom
440 SUBROUTINE error_est_pgf_params_from_basis(qs_kind_set, basis_type_1, basis_type_2, zet_min, zet_max, l_max_zet, l_max)
442 POINTER :: qs_kind_set
443 CHARACTER(len=*),
INTENT(IN) :: basis_type_1
444 CHARACTER(len=*),
INTENT(IN),
OPTIONAL :: basis_type_2
445 REAL(kind=
dp),
INTENT(OUT) :: zet_min, zet_max
446 INTEGER,
INTENT(OUT) :: l_max_zet, l_max
448 CHARACTER(LEN=*),
PARAMETER :: routinen =
'error_est_pgf_params_from_basis'
450 CHARACTER(len=default_string_length) :: basis_type
451 INTEGER :: handle, ibasis, ikind, ipgf, iset, l_m, &
452 l_zet, nbasis, nkind, nset
453 INTEGER,
DIMENSION(:),
POINTER :: npgf
454 REAL(kind=
dp) :: zet_m
457 CALL timeset(routinen, handle)
464 nkind =
SIZE(qs_kind_set)
465 nbasis = merge(2, 1,
PRESENT(basis_type_2))
470 DO ibasis = 1, nbasis
471 IF (ibasis .EQ. 1)
THEN
472 basis_type = basis_type_1
474 basis_type = basis_type_2
476 CALL get_qs_kind(qs_kind=qs_kind_set(ikind), basis_set=basis_set, &
477 basis_type=basis_type)
478 cpassert(
ASSOCIATED(basis_set))
479 npgf => basis_set%npgf
480 nset = basis_set%nset
481 l_m = max(l_m, maxval(basis_set%lmax(:)))
483 zet_m = max(zet_m, maxval(basis_set%zet(1:npgf(iset), iset)))
484 IF (zet_min .LT. 0.0_dp)
THEN
485 zet_min = minval(basis_set%zet(1:npgf(iset), iset))
487 zet_min = min(zet_min, minval(basis_set%zet(1:npgf(iset), iset)))
495 DO ibasis = 1, nbasis
496 IF (ibasis .EQ. 1)
THEN
497 basis_type = basis_type_1
499 basis_type = basis_type_2
501 CALL get_qs_kind(qs_kind=qs_kind_set(ikind), basis_set=basis_set, &
502 basis_type=basis_type)
503 DO iset = 1, basis_set%nset
504 DO ipgf = 1, basis_set%npgf(iset)
505 IF (abs(zet_m - basis_set%zet(ipgf, iset)) .LE. (zet_m*1.0e-12_dp) &
506 .AND. (basis_set%lmax(iset) .GT. l_zet))
THEN
507 l_zet = basis_set%lmax(iset)
514 cpassert(l_zet .GE. 0)
520 l_max_zet = l_zet + 1
523 CALL timestop(handle)
524 END SUBROUTINE error_est_pgf_params_from_basis
530 SUBROUTINE eri_mme_print_info(param)
533 INTEGER :: igrid, unit_nr
534 LOGICAL :: print_multigrids
537 print_multigrids = .false.
539 logger => param%logger
541 unit_nr = param%par%unit_nr
543 IF (unit_nr > 0)
THEN
544 SELECT CASE (param%par%potential)
545 CASE (eri_mme_coulomb)
546 WRITE (unit_nr,
'(/T2, A)')
"ERI_MME| Potential: Coulomb"
547 CASE (eri_mme_yukawa)
548 WRITE (unit_nr,
'(/T2, A, ES9.2)')
"ERI_MME| Potential: Yukawa with a=", param%par%pot_par
549 CASE (eri_mme_longrange)
550 WRITE (unit_nr,
'(/T2, A, ES9.2)')
"ERI_MME| Potential: long-range Coulomb with a=", param%par%pot_par
554 IF (unit_nr > 0)
THEN
555 WRITE (unit_nr,
'(/T2, A, T71, F10.1)')
"ERI_MME| Cutoff for ERIs [a.u.]:", param%par%cutoff
556 WRITE (unit_nr,
'(/T2, A, T78, I3/)')
"ERI_MME| Number of terms in minimax approximation:", param%par%n_minimax
558 IF (param%par%is_ortho)
THEN
559 IF (unit_nr > 0)
THEN
560 IF (param%par%do_error_est)
THEN
561 WRITE (unit_nr,
'(T2, A)')
"ERI_MME| Estimated absolute error for normalized Hermite-Gaussian basis"
562 WRITE (unit_nr,
'(T2, A, T72, ES9.2)')
"ERI_MME| Minimax error:", param%par%err_mm
563 WRITE (unit_nr,
'(T2, A, T72, ES9.2)')
"ERI_MME| Cutoff error:", param%par%err_c
564 WRITE (unit_nr,
'(T2, A, T72, ES9.2)')
"ERI_MME| Total error (minimax + cutoff):", param%par%err_mm + param%par%err_c
566 IF (param%par%print_calib) &
567 WRITE (unit_nr,
'(T2, A, T68, F13.10)')
"ERI_MME| Minimax scaling constant in AM-GM estimate:", param%par%C_mm
571 IF (print_multigrids)
THEN
572 DO igrid = 1, param%par%n_grids
577 IF (unit_nr > 0)
WRITE (unit_nr, *)
579 END SUBROUTINE eri_mme_print_info
591 NULLIFY (keyword, subsection)
593 cpassert(.NOT.
ASSOCIATED(section))
595 description=
"Parameters for testing the ERI_MME method for electron repulsion integrals. "// &
596 "Testing w.r.t. performance and accuracy. ", &
597 n_keywords=5, n_subsections=1)
604 name=
"_SECTION_PARAMETERS_", &
605 description=
"Controls the activation the ERI_MME test. ", &
606 default_l_val=.false., &
607 lone_keyword_l_val=.true.)
612 description=
"Whether to test 3-center integrals.", &
613 default_l_val=.true., &
614 lone_keyword_l_val=.true.)
619 description=
"Whether to test 2-center integrals.", &
620 default_l_val=.true., &
621 lone_keyword_l_val=.true.)
626 description=
"Specify the lengths of the cell vectors A, B, and C. ", &
627 usage=
"ABC 10.000 10.000 10.000", unit_str=
"angstrom", &
628 n_var=3, type_of_var=
real_t)
633 description=
"Minimum number of atomic distances to consider. ", &
639 description=
"Number of repeated calculation of each integral. ", &
644 CALL keyword_create(keyword, __location__, name=
"CHECK_2C_ACCURACY", &
645 description=
"Whether integrals should be compared to reference values, "// &
646 "created on the fly by exact method (G-space sum on grid without "// &
647 "minimax approximation). Note: only feasible for not too many "// &
648 "integrals and maximum exponent around 10.0. ", &
649 default_l_val=.false., &
650 lone_keyword_l_val=.true.)
656 description=
"Maximum total angular momentum quantum number. ", &
662 description=
"Minimum exponent. ", &
663 default_r_val=0.001_dp)
668 description=
"Maximum exponent. ", &
669 default_r_val=1.0_dp)
674 description=
"Number of exponents (logarithmic partition between ZET_MIN and ZET_MAX). ", &
680 description=
"If NSAMPLE_3C = N, only calculate every Nth 3-center integral.", &
686 description=
"Operator to test", &
687 default_i_val=eri_mme_coulomb, &
688 enum_i_vals=(/eri_mme_coulomb, eri_mme_yukawa, eri_mme_longrange/), &
689 enum_c_vals=
s2a(
"COULOMB",
"YUKAWA",
"LONGRANGE"), &
690 enum_desc=
s2a(
"1/r",
"exp(-a*r)/r",
"erf(a*r)/r"))
694 CALL keyword_create(keyword, __location__, name=
"POTENTIAL_PARAM", &
695 description=
"Parameter 'a' for chosen potential, ignored for Coulomb", &
696 default_r_val=0.0_dp)
716 INTEGER,
INTENT(INOUT),
OPTIONAL :: g_count_2c, r_count_2c, gg_count_3c, &
717 gr_count_3c, rr_count_3c
719 IF (
PRESENT(g_count_2c))
THEN
720 CALL para_env%sum(g_count_2c)
721 param%G_count_2c = param%G_count_2c + g_count_2c
724 IF (
PRESENT(r_count_2c))
THEN
725 CALL para_env%sum(r_count_2c)
726 param%R_count_2c = param%R_count_2c + r_count_2c
729 IF (
PRESENT(gg_count_3c))
THEN
730 CALL para_env%sum(gg_count_3c)
731 param%GG_count_3c = param%GG_count_3c + gg_count_3c
734 IF (
PRESENT(gr_count_3c))
THEN
735 CALL para_env%sum(gr_count_3c)
736 param%GR_count_3c = param%GR_count_3c + gr_count_3c
739 IF (
PRESENT(rr_count_3c))
THEN
740 CALL para_env%sum(rr_count_3c)
741 param%RR_count_3c = param%RR_count_3c + rr_count_3c
754 INTEGER,
INTENT(IN) :: iw
757 INTEGER :: count_r, g_count, gg_count, gr_count, i, &
758 ix, iy, iz, l_max, min_nr, nr, nr_xyz, &
759 nrep, nsample, nzet, potential, &
761 LOGICAL :: test_2c, test_3c, test_accuracy
762 REAL(kind=
dp) :: pot_par, zet_fac, zetmax, zetmin
763 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: zet
764 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: rabc
765 REAL(kind=
dp),
DIMENSION(:),
POINTER :: cell_par
770 NULLIFY (box, eri_mme_section, cell_par)
790 cpabort(
"Number of exponents NZET must be greater than 0.")
798 IF (nzet .GT. 1)
THEN
799 zet_fac = (zetmax/zetmin)**(1.0_dp/(nzet - 1))
801 zet(i + 1) = zet(i)*zet_fac
808 box%hmat(1, 1) = cell_par(1)
809 box%hmat(2, 2) = cell_par(2)
810 box%hmat(3, 3) = cell_par(3)
814 nr_xyz = ceiling(real(min_nr, kind=
dp)**(1.0_dp/3.0_dp) - 1.0e-06)
817 ALLOCATE (rabc(3, nr))
822 count_r = count_r + 1
824 rabc(:, count_r) =
pbc([ix*abs(cell_par(1)), &
825 iy*abs(cell_par(2)), &
826 iz*abs(cell_par(3))]/nr_xyz + &
827 0.1_dp*abs(cell_par(:)), box)
833 CALL cp_eri_mme_set_params(param, box%hmat, box%orthorhombic, minval(zet), maxval(zet), l_max, l_max, para_env, &
836 IF (iw > 0)
WRITE (iw,
'(T2, A, T61, I20)')
"ERI_MME| Number of atomic distances:", nr
838 g_count = 0; r_count = 0
839 gg_count = 0; gr_count = 0; rr_count = 0
842 potential=potential, pot_par=pot_par, g_count=g_count, r_count=r_count)
844 para_env, iw, potential=potential, pot_par=pot_par, &
845 gg_count=gg_count, gr_count=gr_count, rr_count=rr_count)
Handles all functions related to the CELL.
subroutine, public init_cell(cell, hmat, periodic)
Initialise/readjust a simulation cell after hmat has been changed.
subroutine, public cell_create(cell, hmat, periodic, tag)
allocates and initializes a cell
Handles all functions related to the CELL.
subroutine, public cell_release(cell)
releases the given cell (see doc/ReferenceCounting.html)
Interface to Minimax-Ewald method for periodic ERI's to be used in CP2K.
subroutine, public create_eri_mme_test_section(section)
Create input section for unit testing.
subroutine, public create_eri_mme_section(section, default_n_minimax)
Create main input section.
subroutine, public cp_eri_mme_perf_acc_test(para_env, iw, eri_mme_test_section)
...
subroutine, public cp_eri_mme_init_read_input(mme_section, param)
Read input and initialize parameter type.
subroutine, public cp_eri_mme_finalize(param)
Release eri mme data. Prints some statistics on summation methods chosen.
subroutine, public cp_eri_mme_update_local_counts(param, para_env, g_count_2c, r_count_2c, gg_count_3c, gr_count_3c, rr_count_3c)
Update local counters to gather statistics on different paths taken in MME algorithm (each Ewald sum ...
various routines to log and control the output. The idea is that decisions about where to log should ...
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)
...
integer, parameter, public medium_print_level
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,...
subroutine, public cp_print_key_section_create(print_key_section, location, name, description, print_level, each_iter_names, each_iter_values, add_last, filename, common_iter_levels, citations, unit_str)
creates a print_key section
Methods for testing / debugging.
subroutine, public eri_mme_3c_perf_acc_test(param, l_max, zet, rabc, nrep, nsample, para_env, iw, potential, pot_par, gg_count, gr_count, rr_count)
...
subroutine, public eri_mme_2c_perf_acc_test(param, l_max, zet, rabc, nrep, test_accuracy, para_env, iw, potential, pot_par, g_count, r_count)
Unit test for performance and accuracy.
Types and initialization / release routines for Minimax-Ewald method for electron repulsion integrals...
subroutine, public eri_mme_release(param)
...
subroutine, public eri_mme_init(param, n_minimax, cutoff, do_calib_cutoff, do_error_est, cutoff_min, cutoff_max, cutoff_eps, cutoff_delta, sum_precision, debug, debug_delta, debug_nsum, unit_nr, print_calib)
...
subroutine, public eri_mme_set_params(param, hmat, is_ortho, zet_min, zet_max, l_max_zet, l_max, para_env, potential, pot_par)
Set parameters for MME method with manual specification of basis parameters. Takes care of cutoff cal...
subroutine, public eri_mme_print_grid_info(grid, grid_no, unit_nr)
...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Interface to the message passing library MPI.
Provides Cartesian and spherical orbital pointers and indices.
subroutine, public init_orbital_pointers(maxl)
Initialize or update the orbital pointers.
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, 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, floating, name, element_symbol, pao_basis_size, pao_model_file, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
Utilities for string manipulations.
Type defining parameters related to the simulation cell.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
stores all the informations relevant to an mpi environment
Provides all information about a quickstep kind.