35#include "./base/base_uses.f90"
43 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_fb_distribution_methods'
52 TYPE fb_distribution_element
54 REAL(KIND=
dp) :: cost = -1.0_dp
55 END TYPE fb_distribution_element
64 TYPE fb_distribution_list
65 TYPE(fb_distribution_element),
DIMENSION(:),
POINTER :: list => null()
66 INTEGER :: nelements = -1
67 REAL(KIND=
dp) :: cost = -1.0_dp
68 END TYPE fb_distribution_list
86 TYPE fb_preferred_procs_list
87 INTEGER,
DIMENSION(:),
POINTER :: list => null()
88 INTEGER :: nprocs = -1
89 END TYPE fb_preferred_procs_list
93 INTEGER,
PARAMETER,
PRIVATE :: ENLARGE_RATIO = 1
94 INTEGER,
PARAMETER,
PRIVATE :: REDUCE_RATIO = 3
95 INTEGER,
PARAMETER,
PRIVATE :: EXPAND_FACTOR = 2
96 INTEGER,
PARAMETER,
PRIVATE :: SHRINK_FACTOR = 2
98 INTERFACE fb_distribution_remove
99 MODULE PROCEDURE fb_distribution_remove_ind, &
100 fb_distribution_remove_el
101 END INTERFACE fb_distribution_remove
103 INTERFACE fb_distribution_move
104 MODULE PROCEDURE fb_distribution_move_ind, &
105 fb_distribution_move_el
106 END INTERFACE fb_distribution_move
124 CHARACTER(len=*),
PARAMETER :: routinen =
'fb_distribution_build'
126 INTEGER :: handle, i_common_set, iatom, ii, ipe, lb, lowest_cost_ind, my_pe, n_common_sets, &
127 natoms, nhalo_atoms, nkinds, nprocs, owner_id_in_halo, pref_pe, ub
128 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: common_set_ids, local_atoms_all, &
129 local_atoms_sizes, local_atoms_starts, &
130 pe, pos_in_preferred_list
131 INTEGER,
DIMENSION(:),
POINTER :: halo_atoms, local_atoms
132 LOGICAL :: acceptable_move, move_happened
133 REAL(kind=
dp) :: average_cost
134 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: cost_per_atom, cost_per_proc
135 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: pair_radii
136 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rcut
140 TYPE(fb_distribution_element) :: element
141 TYPE(fb_distribution_list),
ALLOCATABLE, &
143 TYPE(fb_preferred_procs_list),
ALLOCATABLE, &
144 DIMENSION(:) :: preferred_procs_set
147 TYPE(
qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
149 CALL timeset(routinen, handle)
151 NULLIFY (mat_ks, rcut, cell, para_env, particle_set, qs_kind_set, &
152 halo_atoms, local_atoms)
160 particle_set=particle_set, &
161 qs_kind_set=qs_kind_set, &
166 nprocs = para_env%num_pe
167 my_pe = para_env%mepos + 1
170 ALLOCATE (pair_radii(nkinds, nkinds))
173 ALLOCATE (cost_per_atom(natoms))
185 natoms=nhalo_atoms, &
186 halo_atoms=halo_atoms)
190 DEALLOCATE (pair_radii)
194 ALLOCATE (preferred_procs_set(natoms))
195 ALLOCATE (common_set_ids(natoms))
196 CALL fb_build_preferred_procs(mat_ks(1)%matrix, &
198 preferred_procs_set, &
205 ALLOCATE (dist(nprocs))
207 CALL fb_distribution_init(dist=dist(ipe))
209 ALLOCATE (pos_in_preferred_list(n_common_sets))
210 pos_in_preferred_list(:) = 0
213 element%cost = cost_per_atom(iatom)
214 i_common_set = common_set_ids(iatom)
215 pos_in_preferred_list(i_common_set) = &
216 mod(pos_in_preferred_list(i_common_set), &
217 preferred_procs_set(iatom)%nprocs) + 1
218 ipe = preferred_procs_set(iatom)%list(pos_in_preferred_list(i_common_set))
219 CALL fb_distribution_add(dist(ipe), element)
222 DEALLOCATE (pos_in_preferred_list)
223 DEALLOCATE (common_set_ids)
224 DEALLOCATE (cost_per_atom)
228 ALLOCATE (cost_per_proc(nprocs))
230 cost_per_proc(ipe) = dist(ipe)%cost
232 ALLOCATE (pe(nprocs))
233 CALL sort(cost_per_proc, nprocs, pe)
239 average_cost = sum(cost_per_proc)/real(nprocs,
dp)
241 DEALLOCATE (cost_per_proc)
252 DO ipe = nprocs, 1, -1
253 redistribute:
DO WHILE (dist(pe(ipe))%cost .GT. average_cost)
254 iatom = dist(pe(ipe))%list(lowest_cost_ind)%id
255 move_happened = .false.
257 preferred:
DO ii = 1, preferred_procs_set(iatom)%nprocs
258 pref_pe = preferred_procs_set(iatom)%list(ii)
260 fb_distribution_acceptable_move(dist(pe(ipe)), &
261 dist(pe(ipe))%list(lowest_cost_ind), &
264 IF ((pref_pe .NE. pe(ipe)) .AND. acceptable_move)
THEN
265 CALL fb_distribution_move(dist(pe(ipe)), &
268 move_happened = .true.
276 IF (.NOT. move_happened)
THEN
278 next_in_line:
DO ii = 1, nprocs
280 fb_distribution_acceptable_move(dist(pe(ipe)), &
281 dist(pe(ipe))%list(lowest_cost_ind), &
284 IF ((pe(ii) .NE. pe(ipe)) .AND. acceptable_move)
THEN
285 CALL fb_distribution_move(dist(pe(ipe)), &
288 move_happened = .true.
298 IF (.NOT. move_happened)
THEN
305 DO ii = 1,
SIZE(preferred_procs_set)
306 CALL fb_preferred_procs_list_release(preferred_procs_set(ii))
308 DEALLOCATE (preferred_procs_set)
311 ALLOCATE (local_atoms_all(natoms))
312 ALLOCATE (local_atoms_starts(nprocs))
313 ALLOCATE (local_atoms_sizes(nprocs))
314 CALL fb_distribution_to_local_atoms(dist, &
316 local_atoms_starts, &
318 ALLOCATE (local_atoms(local_atoms_sizes(my_pe)))
319 lb = local_atoms_starts(my_pe)
320 ub = local_atoms_starts(my_pe) + local_atoms_sizes(my_pe) - 1
321 local_atoms(1:local_atoms_sizes(my_pe)) = local_atoms_all(lb:ub)
323 local_atoms=local_atoms, &
324 nlocal_atoms=local_atoms_sizes(my_pe))
327 CALL fb_distribution_write_info(dist, scf_section)
329 DEALLOCATE (local_atoms_all)
330 DEALLOCATE (local_atoms_starts)
331 DEALLOCATE (local_atoms_sizes)
332 DO ipe = 1,
SIZE(dist)
333 CALL fb_distribution_release(dist(ipe))
337 CALL timestop(handle)
352 PURE FUNCTION fb_distribution_acceptable_move(dist_from, &
357 TYPE(fb_distribution_list),
INTENT(IN) :: dist_from
358 TYPE(fb_distribution_element),
INTENT(IN) :: element
359 TYPE(fb_distribution_list),
INTENT(IN) :: dist_to
360 REAL(kind=
dp),
INTENT(IN) :: threshold
361 LOGICAL :: acceptable
363 acceptable = (dist_to%cost + element%cost .LT. dist_from%cost) .AND. &
364 (dist_to%cost .LT. threshold)
365 END FUNCTION fb_distribution_acceptable_move
373 SUBROUTINE fb_distribution_write_info(dist_set, scf_section)
374 TYPE(fb_distribution_list),
DIMENSION(:), &
375 INTENT(IN) :: dist_set
378 INTEGER :: ii, max_natoms, min_natoms, natoms, &
380 REAL(kind=
dp) :: ave_cost, ave_natoms, max_cost, &
384 nprocs =
SIZE(dist_set)
388 natoms = natoms + dist_set(ii)%nelements
389 total_cost = total_cost + dist_set(ii)%cost
391 ave_natoms = real(natoms,
dp)/real(nprocs,
dp)
392 ave_cost = total_cost/real(nprocs,
dp)
396 max_natoms = max(max_natoms, dist_set(ii)%nelements)
397 max_cost = max(max_cost, dist_set(ii)%cost)
400 min_cost = total_cost
402 min_natoms = min(min_natoms, dist_set(ii)%nelements)
403 min_cost = min(min_cost, dist_set(ii)%cost)
408 "PRINT%FILTER_MATRIX", &
411 IF (unit_nr > 0)
THEN
412 WRITE (unit=unit_nr, fmt=
"(/,A,I6,A)") &
413 " FILTER_MAT_DIAG| Load distribution across ", nprocs,
" processors:"
414 WRITE (unit=unit_nr, &
415 fmt=
"(A,T40,A,T55,A,T70,A,T85,A)") &
416 " FILTER_MAT_DIAG| ",
"Total",
"Average",
"Max",
"Min"
417 WRITE (unit=unit_nr, &
418 fmt=
"(A,T40,I12,T55,F12.1,T70,I12,T85,I10)") &
419 " FILTER_MAT_DIAG| Atomic Matrices", &
420 natoms, ave_natoms, max_natoms, min_natoms
421 WRITE (unit=unit_nr, &
422 fmt=
"(A,T40,D12.7,T55,D12.7,T70,D12.7,T85,D12.7)") &
423 " FILTER_MAT_DIAG| Cost*", &
424 total_cost, ave_cost, max_cost, min_cost
425 WRITE (unit=unit_nr, fmt=
"(A)") &
426 " FILTER_MAT_DIAG| (* cost is calculated as sum of cube of atomic matrix sizes)"
429 "PRINT%FILTER_MATRIX")
430 END SUBROUTINE fb_distribution_write_info
444 SUBROUTINE fb_build_preferred_procs(dbcsr_mat, &
446 preferred_procs_set, &
450 INTEGER,
INTENT(IN) :: natoms
451 TYPE(fb_preferred_procs_list),
DIMENSION(:), &
452 INTENT(INOUT) :: preferred_procs_set
453 INTEGER,
DIMENSION(:),
INTENT(OUT) :: common_set_ids
454 INTEGER,
INTENT(OUT) :: n_common_sets
456 INTEGER :: icol, nblkcols_tot, nprows, pcol, prow
457 INTEGER,
DIMENSION(:),
POINTER :: col_dist
458 INTEGER,
DIMENSION(:, :),
POINTER :: pgrid
462 cpassert(natoms <= nblkcols_tot)
463 cpassert(
SIZE(preferred_procs_set) >= natoms)
464 cpassert(
SIZE(common_set_ids) >= natoms)
466 CALL dbcsr_get_info(dbcsr_mat, distribution=dbcsr_dist, proc_col_dist=col_dist)
470 IF (
ASSOCIATED(preferred_procs_set(icol)%list))
THEN
471 DEALLOCATE (preferred_procs_set(icol)%list)
473 ALLOCATE (preferred_procs_set(icol)%list(nprows))
474 pcol = col_dist(icol)
476 DO prow = 0, nprows - 1
478 preferred_procs_set(icol)%list(prow + 1) = pgrid(prow, pcol) + 1
480 preferred_procs_set(icol)%nprocs = nprows
483 common_set_ids(:) = 0
484 common_set_ids(1:natoms) = col_dist(1:natoms) + 1
486 END SUBROUTINE fb_build_preferred_procs
493 SUBROUTINE fb_preferred_procs_list_release(preferred_procs_list)
494 TYPE(fb_preferred_procs_list),
INTENT(INOUT) :: preferred_procs_list
496 IF (
ASSOCIATED(preferred_procs_list%list))
THEN
497 DEALLOCATE (preferred_procs_list%list)
499 END SUBROUTINE fb_preferred_procs_list_release
512 SUBROUTINE fb_distribution_to_local_atoms(dist_set, &
514 local_atoms_starts, &
516 TYPE(fb_distribution_list),
DIMENSION(:), &
517 INTENT(IN) :: dist_set
518 INTEGER,
DIMENSION(:),
INTENT(OUT) :: local_atoms, local_atoms_starts, &
521 INTEGER :: iatom, ipe, n_procs, pos
524 n_procs =
SIZE(dist_set)
526 check_ok =
SIZE(local_atoms_starts) .GE. n_procs
528 check_ok =
SIZE(local_atoms_sizes) .GE. n_procs
532 local_atoms_starts(:) = 0
533 local_atoms_sizes(:) = 0
537 local_atoms_starts(ipe) = pos
538 DO iatom = 1, dist_set(ipe)%nelements
539 local_atoms(pos) = dist_set(ipe)%list(iatom)%id
541 local_atoms_sizes(ipe) = local_atoms_sizes(ipe) + 1
544 END SUBROUTINE fb_distribution_to_local_atoms
552 SUBROUTINE fb_distribution_init(dist, nmax)
553 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist
554 INTEGER,
INTENT(IN),
OPTIONAL :: nmax
556 INTEGER :: ii, my_nmax
559 IF (
PRESENT(nmax)) my_nmax = nmax
560 IF (
ASSOCIATED(dist%list))
THEN
561 DEALLOCATE (dist%list)
564 IF (my_nmax .GT. 0)
THEN
565 ALLOCATE (dist%list(my_nmax))
566 DO ii = 1,
SIZE(dist%list)
568 dist%list(ii)%cost = 0.0_dp
573 END SUBROUTINE fb_distribution_init
581 SUBROUTINE fb_distribution_resize(dist, nmax)
582 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist
583 INTEGER,
INTENT(IN) :: nmax
585 INTEGER :: ii, my_nmax
586 TYPE(fb_distribution_element),
DIMENSION(:), &
589 IF (.NOT.
ASSOCIATED(dist%list))
THEN
590 my_nmax = max(nmax, 1)
591 ALLOCATE (dist%list(my_nmax))
593 my_nmax = max(nmax, dist%nelements)
594 ALLOCATE (new_list(my_nmax))
595 DO ii = 1,
SIZE(new_list)
597 new_list(ii)%cost = 0.0_dp
599 DO ii = 1, dist%nelements
600 new_list(ii) = dist%list(ii)
602 DEALLOCATE (dist%list)
603 dist%list => new_list
605 END SUBROUTINE fb_distribution_resize
613 SUBROUTINE fb_distribution_add(dist, element)
614 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist
615 TYPE(fb_distribution_element),
INTENT(IN) :: element
617 INTEGER :: ii, new_nelements, pos
619 new_nelements = dist%nelements + 1
622 IF (.NOT.
ASSOCIATED(dist%list))
THEN
623 CALL fb_distribution_resize(dist, new_nelements)
624 ELSE IF (new_nelements*enlarge_ratio .GT.
SIZE(dist%list))
THEN
625 CALL fb_distribution_resize(dist,
SIZE(dist%list)*expand_factor)
629 IF (new_nelements == 1)
THEN
630 dist%list(1) = element
632 pos = fb_distribution_find_slot(dist, element)
633 DO ii = dist%nelements, pos, -1
634 dist%list(ii + 1) = dist%list(ii)
636 dist%list(pos) = element
638 dist%nelements = new_nelements
639 dist%cost = dist%cost + element%cost
640 END SUBROUTINE fb_distribution_add
650 PURE FUNCTION fb_distribution_find_slot(dist, element)
RESULT(pos)
651 TYPE(fb_distribution_list),
INTENT(IN) :: dist
652 TYPE(fb_distribution_element),
INTENT(IN) :: element
655 INTEGER :: lower, middle, n, upper
658 IF (element%cost .LT. dist%list(1)%cost)
THEN
662 IF (element%cost .GE. dist%list(n)%cost)
THEN
668 DO WHILE ((upper - lower) .GT. 1)
669 middle = (lower + upper)/2
670 IF (element%cost .LT. dist%list(middle)%cost)
THEN
677 END FUNCTION fb_distribution_find_slot
685 SUBROUTINE fb_distribution_remove_ind(dist, pos)
686 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist
687 INTEGER,
INTENT(IN) :: pos
692 check_ok = pos .GT. 0
694 IF (pos .LE. dist%nelements)
THEN
695 dist%cost = dist%cost - dist%list(pos)%cost
696 DO ii = pos, dist%nelements - 1
697 dist%list(ii) = dist%list(ii + 1)
699 dist%list(dist%nelements)%id = 0
700 dist%list(dist%nelements)%cost = 0.0_dp
701 dist%nelements = dist%nelements - 1
703 IF (dist%nelements*reduce_ratio .LT.
SIZE(dist%list))
THEN
704 CALL fb_distribution_resize(dist, dist%nelements/shrink_factor)
707 END SUBROUTINE fb_distribution_remove_ind
715 SUBROUTINE fb_distribution_remove_el(dist, element)
716 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist
717 TYPE(fb_distribution_element),
INTENT(IN) :: element
721 pos = dist%nelements + 1
722 DO ii = 1, dist%nelements
723 IF (element%id == dist%list(ii)%id)
THEN
728 CALL fb_distribution_remove_ind(dist, pos)
729 END SUBROUTINE fb_distribution_remove_el
738 SUBROUTINE fb_distribution_move_ind(dist_from, pos, dist_to)
739 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist_from
740 INTEGER,
INTENT(IN) :: pos
741 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist_to
744 TYPE(fb_distribution_element) :: element
746 check_ok =
ASSOCIATED(dist_from%list)
748 check_ok = pos .LE. dist_from%nelements
750 element = dist_from%list(pos)
751 CALL fb_distribution_add(dist_to, element)
752 CALL fb_distribution_remove(dist_from, pos)
753 END SUBROUTINE fb_distribution_move_ind
762 SUBROUTINE fb_distribution_move_el(dist_from, element, dist_to)
763 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist_from
764 TYPE(fb_distribution_element),
INTENT(IN) :: element
765 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist_to
769 check_ok =
ASSOCIATED(dist_from%list)
771 CALL fb_distribution_add(dist_to, element)
772 CALL fb_distribution_remove(dist_from, element)
773 END SUBROUTINE fb_distribution_move_el
780 SUBROUTINE fb_distribution_release(dist)
781 TYPE(fb_distribution_list),
INTENT(INOUT) :: dist
783 IF (
ASSOCIATED(dist%list))
THEN
784 DEALLOCATE (dist%list)
786 END SUBROUTINE fb_distribution_release
Handles all functions related to the CELL.
subroutine, public dbcsr_get_info(matrix, nblkrows_total, nblkcols_total, nfullrows_total, nfullcols_total, nblkrows_local, nblkcols_local, nfullrows_local, nfullcols_local, my_prow, my_pcol, local_rows, local_cols, proc_row_dist, proc_col_dist, row_blk_size, col_blk_size, row_blk_offset, col_blk_offset, distribution, name, matrix_type, group)
...
subroutine, public dbcsr_distribution_get(dist, row_dist, col_dist, nrows, ncols, has_threads, group, mynode, numnodes, nprows, npcols, myprow, mypcol, pgrid, subgroups_defined, prow_group, pcol_group)
...
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)
...
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,...
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.
Define the data structure for the particle information.
subroutine, public get_qs_env(qs_env, atomic_kind_set, qs_kind_set, cell, super_cell, cell_ref, use_ref_cell, kpoints, dft_control, mos, sab_orb, sab_all, qmmm, qmmm_periodic, sac_ae, sac_ppl, sac_lri, sap_ppnl, sab_vdw, sab_scp, sap_oce, sab_lrc, sab_se, sab_xtbe, sab_tbe, sab_core, sab_xb, sab_xtb_pp, sab_xtb_nonbond, sab_almo, sab_kp, sab_kp_nosym, particle_set, energy, force, matrix_h, matrix_h_im, matrix_ks, matrix_ks_im, matrix_vxc, run_rtp, rtp, matrix_h_kp, matrix_h_im_kp, matrix_ks_kp, matrix_ks_im_kp, matrix_vxc_kp, kinetic_kp, matrix_s_kp, matrix_w_kp, matrix_s_ri_aux_kp, matrix_s, matrix_s_ri_aux, matrix_w, matrix_p_mp2, matrix_p_mp2_admm, rho, rho_xc, pw_env, ewald_env, ewald_pw, active_space, mpools, input, para_env, blacs_env, scf_control, rel_control, kinetic, qs_charges, vppl, rho_core, rho_nlcc, rho_nlcc_g, ks_env, ks_qmmm_env, wf_history, scf_env, local_particles, local_molecules, distribution_2d, dbcsr_dist, molecule_kind_set, molecule_set, subsys, cp_subsys, oce, local_rho_set, rho_atom_set, task_list, task_list_soft, rho0_atom_set, rho0_mpole, rhoz_set, ecoul_1c, rho0_s_rs, rho0_s_gs, do_kpoints, has_unit_metric, requires_mo_derivs, mo_derivs, mo_loc_history, nkind, natom, nelectron_total, nelectron_spin, efield, neighbor_list_id, linres_control, xas_env, virial, cp_ddapc_env, cp_ddapc_ewald, outer_scf_history, outer_scf_ihistory, x_data, et_coupling, dftb_potential, results, se_taper, se_store_int_env, se_nddo_mpole, se_nonbond_env, admm_env, lri_env, lri_density, exstate_env, ec_env, harris_env, dispersion_env, gcp_env, vee, rho_external, external_vxc, mask, mp2_env, bs_env, kg_env, wanniercentres, atprop, ls_scf_env, do_transport, transport_env, v_hartree_rspace, s_mstruct_changed, rho_changed, potential_changed, forces_up_to_date, mscfg_env, almo_scf_env, gradient_history, variable_history, embed_pot, spin_embed_pot, polar_env, mos_last_converged, eeq, rhs)
Get the QUICKSTEP environment.
real(kind=dp) function, public fb_atomic_halo_cost(atomic_halo, particle_set, qs_kind_set)
Estimates the computational cost with respect to the filter matrix calculation associated to an atomi...
subroutine, public fb_atomic_halo_build_halo_atoms(owner_atom, particle_set, cell, pair_radii, halo_atoms, nhalo_atoms, owner_id_in_halo)
Builds halo atoms for a given (owner) atom.
subroutine, public fb_atomic_halo_set(atomic_halo, owner_atom, owner_id_in_halo, natoms, nelectrons, halo_atoms, sorted, cost)
Sets attributes in a fb_atomic_halo object, one should only set the data content in a fb_atomic_halo ...
subroutine, public fb_atomic_halo_create(atomic_halo)
Creates and initialises an empty fb_atomic_halo object.
pure subroutine, public fb_build_pair_radii(rcut, nkinds, pair_radii)
Builds the required pair_radii array required for building the halo atoms from a given set of cut off...
subroutine, public fb_atomic_halo_nullify(atomic_halo)
Nullifies a fb_atomic_halo object, note that it does not release the original object....
subroutine, public fb_atomic_halo_release(atomic_halo)
Releases an fb_atomic_halo object.
subroutine, public fb_atomic_halo_init(atomic_halo)
Initialises an fb_atomic_halo object, and makes it empty.
subroutine, public fb_distribution_build(fb_env, qs_env, scf_section)
Build local atoms associated to filter matrix algorithm for each MPI process, trying to balance the l...
subroutine, public fb_env_get(fb_env, rcut, filter_temperature, auto_cutoff_scale, eps_default, atomic_halos, trial_fns, collective_com, local_atoms, nlocal_atoms)
method to get attributes from a given fb_env object
subroutine, public fb_env_set(fb_env, rcut, filter_temperature, auto_cutoff_scale, eps_default, atomic_halos, trial_fns, collective_com, local_atoms, nlocal_atoms)
method to set attributes from a given fb_env object
Define the quickstep kind type and their sub types.
All kind of helpful little routines.
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
defines a fb_atomic_halo object
the object container which allows for the creation of an array of pointers to fb_env
Provides all information about a quickstep kind.