46#include "./base/base_uses.f90"
57 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'colvar_utils'
71 LOGICAL,
INTENT(IN),
OPTIONAL :: only_intra_colvar, unique
74 CHARACTER(LEN=*),
PARAMETER :: routinen =
'number_of_colvar'
76 INTEGER :: handle, ikind, imol
77 LOGICAL :: my_unique, skip_inter_colvar
86 NULLIFY (subsys, molecules, molecule_kind, molecule, molecule_set, gci)
87 CALL timeset(routinen, handle)
88 skip_inter_colvar = .false.
90 IF (
PRESENT(only_intra_colvar)) skip_inter_colvar = only_intra_colvar
91 IF (
PRESENT(unique)) my_unique = unique
94 CALL cp_subsys_get(subsys=subsys, molecules=molecules, gci=gci, &
95 molecule_kinds=molecule_kinds)
97 molecule_set => molecules%els
100 molecule_kind_set => molecule_kinds%els
101 DO ikind = 1, molecule_kinds%n_els
102 molecule_kind => molecule_kind_set(ikind)
104 ntot = ntot + ncolv%ntot
107 mol:
DO imol = 1,
SIZE(molecule_set)
108 molecule => molecule_set(imol)
109 molecule_kind => molecule%molecule_kind
113 ntot = ntot + ncolv%ntot
117 IF (.NOT. skip_inter_colvar)
THEN
118 IF (
ASSOCIATED(gci))
THEN
119 ntot = ntot + gci%ncolv%ntot
122 CALL timestop(handle)
133 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN) :: targets
136 CHARACTER(LEN=*),
PARAMETER :: routinen =
'set_colvars_target'
138 INTEGER :: handle, i, ikind, ind, nkind
148 NULLIFY (cell, subsys, molecule_kinds, molecule_kind, gci, colv_list)
149 CALL timeset(routinen, handle)
150 CALL force_env_get(force_env=force_env, subsys=subsys, cell=cell)
151 CALL cp_subsys_get(subsys=subsys, gci=gci, molecule_kinds=molecule_kinds)
153 nkind = molecule_kinds%n_els
155 mol:
DO ikind = 1, nkind
156 molecule_kind => molecule_kinds%els(ikind)
158 colv_list=colv_list, &
160 IF (ncolv%ntot /= 0)
THEN
161 DO i = 1,
SIZE(colv_list)
162 ind = colv_list(i)%inp_seq_num
163 colv_list(i)%expected_value = targets(ind)
168 IF (
ASSOCIATED(gci))
THEN
169 IF (gci%ncolv%ntot /= 0)
THEN
170 colv_list => gci%colv_list
171 DO i = 1,
SIZE(colv_list)
172 ind = colv_list(i)%inp_seq_num
173 colv_list(i)%expected_value = targets(ind)
177 CALL timestop(handle)
191 SUBROUTINE eval_colvar(force_env, coords, cvalues, Bmatrix, MassI, Amatrix)
194 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN),
OPTIONAL :: coords
195 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: cvalues
196 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: bmatrix
197 REAL(kind=
dp),
DIMENSION(:),
OPTIONAL,
POINTER :: massi
198 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: amatrix
200 CHARACTER(LEN=*),
PARAMETER :: routinen =
'eval_colvar'
202 INTEGER :: handle, i, ikind, imol, n_tot, natom, &
203 nkind, nmol_per_kind, offset
204 INTEGER,
DIMENSION(:),
POINTER :: map, wrk
206 REAL(kind=
dp) :: inv_error
207 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:, :) :: bwrk, gmatrix, gmatrix_i
208 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rwrk
221 NULLIFY (cell, subsys, local_molecules, molecule_kinds, &
222 molecules, molecule_kind, molecule, &
223 molecule_set, particles, particle_set, gci)
224 IF (
PRESENT(bmatrix))
THEN
225 check =
ASSOCIATED(bmatrix)
229 CALL timeset(routinen, handle)
230 ALLOCATE (map(
SIZE(cvalues)))
232 CALL force_env_get(force_env=force_env, subsys=subsys, cell=cell)
236 particles=particles, &
237 molecules=molecules, &
238 local_molecules=local_molecules, &
240 molecule_kinds=molecule_kinds)
242 nkind = molecule_kinds%n_els
243 particle_set => particles%els
244 molecule_set => molecules%els
247 mol:
DO ikind = 1, nkind
248 nmol_per_kind = local_molecules%n_el(ikind)
249 DO imol = 1, nmol_per_kind
250 i = local_molecules%list(ikind)%array(imol)
251 molecule => molecule_set(i)
252 molecule_kind => molecule%molecule_kind
256 offset = get_colvar_offset(i, molecule_set)
258 IF (ncolv%ntot /= 0)
THEN
259 CALL eval_colv_int(molecule, particle_set, coords, cell, cvalues, &
260 bmatrix, offset, n_tot, map)
264 CALL force_env%para_env%sum(n_tot)
265 CALL force_env%para_env%sum(cvalues)
266 IF (
PRESENT(bmatrix))
CALL force_env%para_env%sum(bmatrix)
270 IF (
ASSOCIATED(gci))
THEN
271 IF (gci%ncolv%ntot /= 0)
THEN
272 CALL eval_colv_ext(gci, particle_set, coords, cell, cvalues, &
273 bmatrix, offset, n_tot, map)
276 cpassert(n_tot ==
SIZE(cvalues))
279 ALLOCATE (wrk(
SIZE(cvalues)))
280 ALLOCATE (rwrk(
SIZE(cvalues)))
281 CALL sort(map,
SIZE(map), wrk)
284 cvalues(i) = rwrk(wrk(i))
287 IF (
PRESENT(bmatrix))
THEN
288 check = n_tot ==
SIZE(bmatrix, 2)
290 ALLOCATE (bwrk(
SIZE(bmatrix, 1),
SIZE(bmatrix, 2)))
293 bmatrix(:, i) = bwrk(:, wrk(i))
301 IF (
PRESENT(bmatrix) .AND.
PRESENT(amatrix))
THEN
302 cpassert(
ASSOCIATED(amatrix))
303 check =
SIZE(bmatrix, 1) ==
SIZE(amatrix, 2)
305 check =
SIZE(bmatrix, 2) ==
SIZE(amatrix, 1)
307 ALLOCATE (gmatrix(n_tot, n_tot))
308 ALLOCATE (gmatrix_i(n_tot, n_tot))
309 gmatrix(:, :) = matmul(transpose(bmatrix), bmatrix)
311 IF (abs(inv_error) > 1.0e-8_dp)
THEN
312 cpwarn(
"Error in inverting the Gmatrix larger than 1.0E-8!")
314 amatrix = matmul(gmatrix_i, transpose(bmatrix))
315 DEALLOCATE (gmatrix_i)
318 IF (
PRESENT(massi))
THEN
319 natom =
SIZE(particle_set)
320 cpassert(
ASSOCIATED(massi))
321 cpassert(
SIZE(massi) == natom*3)
323 massi((i - 1)*3 + 1) = 1.0_dp/particle_set(i)%atomic_kind%mass
324 massi((i - 1)*3 + 2) = 1.0_dp/particle_set(i)%atomic_kind%mass
325 massi((i - 1)*3 + 3) = 1.0_dp/particle_set(i)%atomic_kind%mass
328 CALL timestop(handle)
339 FUNCTION get_colvar_offset(i, molecule_set)
RESULT(offset)
340 INTEGER,
INTENT(IN) :: i
351 molecule => molecule_set(j)
352 molecule_kind => molecule%molecule_kind
355 offset = offset + ncolv%ntot
358 END FUNCTION get_colvar_offset
373 SUBROUTINE eval_colv_int(molecule, particle_set, coords, cell, cvalues, &
374 Bmatrix, offset, n_tot, map)
378 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN),
OPTIONAL :: coords
380 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT) :: cvalues
381 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: bmatrix
382 INTEGER,
INTENT(IN) :: offset
383 INTEGER,
INTENT(INOUT) :: n_tot
384 INTEGER,
DIMENSION(:),
POINTER :: map
393 molecule_kind => molecule%molecule_kind
396 CALL eval_colv_low(colv_list, fixd_list, lcolv, particle_set, &
397 coords, cell, cvalues, bmatrix, offset, n_tot, map)
399 END SUBROUTINE eval_colv_int
414 SUBROUTINE eval_colv_ext(gci, particle_set, coords, cell, cvalues, &
415 Bmatrix, offset, n_tot, map)
418 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN),
OPTIONAL :: coords
420 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT) :: cvalues
421 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: bmatrix
422 INTEGER,
INTENT(IN) :: offset
423 INTEGER,
INTENT(INOUT) :: n_tot
424 INTEGER,
DIMENSION(:),
POINTER :: map
430 colv_list => gci%colv_list
431 fixd_list => gci%fixd_list
433 CALL eval_colv_low(colv_list, fixd_list, lcolv, particle_set, &
434 coords, cell, cvalues, bmatrix, offset, n_tot, map)
436 END SUBROUTINE eval_colv_ext
455 SUBROUTINE eval_colv_low(colv_list, fixd_list, lcolv, particle_set, coords, &
456 cell, cvalues, Bmatrix, offset, n_tot, map)
462 REAL(kind=
dp),
DIMENSION(:),
INTENT(IN),
OPTIONAL :: coords
464 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT) :: cvalues
465 REAL(kind=
dp),
DIMENSION(:, :),
OPTIONAL,
POINTER :: bmatrix
466 INTEGER,
INTENT(IN) :: offset
467 INTEGER,
INTENT(INOUT) :: n_tot
468 INTEGER,
DIMENSION(:),
POINTER :: map
470 INTEGER :: iatm, iconst, ind, ival
473 DO iconst = 1,
SIZE(colv_list)
477 IF (
PRESENT(coords))
THEN
479 pos=reshape(coords, (/3,
SIZE(particle_set)/)), fixd_list=fixd_list)
484 cvalues(ival) = lcolv(iconst)%colvar%ss
485 map(ival) = colv_list(iconst)%inp_seq_num
487 IF (
PRESENT(bmatrix))
THEN
488 DO iatm = 1,
SIZE(lcolv(iconst)%colvar%i_atom)
489 ind = (lcolv(iconst)%colvar%i_atom(iatm) - 1)*3
490 bmatrix(ind + 1, ival) = lcolv(iconst)%colvar%dsdr(1, iatm)
491 bmatrix(ind + 2, ival) = lcolv(iconst)%colvar%dsdr(2, iatm)
492 bmatrix(ind + 3, ival) = lcolv(iconst)%colvar%dsdr(3, iatm)
497 END SUBROUTINE eval_colv_low
511 SUBROUTINE get_clv_force(force_env, forces, coords, nsize_xyz, nsize_int, cvalues, &
514 REAL(kind=
dp),
DIMENSION(:),
INTENT(INOUT), &
515 OPTIONAL :: forces, coords
516 INTEGER,
INTENT(IN) :: nsize_xyz, nsize_int
517 REAL(kind=
dp),
DIMENSION(:),
INTENT(OUT) :: cvalues, mmatrix
521 REAL(kind=
dp),
DIMENSION(:),
POINTER :: massi, wrk
522 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: amatrix, bmatrix
524 ALLOCATE (bmatrix(nsize_xyz, nsize_int))
525 ALLOCATE (massi(nsize_xyz))
527 IF (
PRESENT(forces))
THEN
528 ALLOCATE (wrk(nsize_int))
529 ALLOCATE (amatrix(nsize_int, nsize_xyz))
531 CALL eval_colvar(force_env, coords, cvalues, bmatrix, massi, amatrix)
532 wrk = matmul(amatrix, forces)
534 forces(1:nsize_int) = wrk
539 CALL eval_colvar(force_env, coords, cvalues, bmatrix, massi)
546 tmp = tmp + bmatrix(k, j)*massi(k)*bmatrix(k, i)
548 mmatrix((i - 1)*nsize_int + j) = tmp
549 mmatrix((j - 1)*nsize_int + i) = tmp
571 CHARACTER(len=3) :: name_kind
572 INTEGER :: i, ii, j, natoms, nkinds, nr_frame, stat
573 REAL(kind=
dp) :: mtot
575 natoms =
SIZE(particles)
577 IF (colvar%coord_param%use_kinds_from .OR. colvar%coord_param%use_kinds_to)
THEN
579 IF (colvar%coord_param%use_kinds_from)
THEN
580 colvar%coord_param%use_kinds_from = .false.
581 nkinds =
SIZE(colvar%coord_param%c_kinds_from)
584 name_kind = trim(particles(i)%atomic_kind%name)
586 IF (trim(colvar%coord_param%c_kinds_from(j)) == name_kind)
THEN
587 CALL reallocate(colvar%coord_param%i_at_from, 1, colvar%coord_param%n_atoms_from + 1)
588 colvar%coord_param%n_atoms_from = colvar%coord_param%n_atoms_from + 1
589 colvar%coord_param%i_at_from(colvar%coord_param%n_atoms_from) = i
593 stat = colvar%coord_param%n_atoms_from
597 IF (colvar%coord_param%use_kinds_to)
THEN
598 colvar%coord_param%use_kinds_to = .false.
599 nkinds =
SIZE(colvar%coord_param%c_kinds_to)
602 name_kind = trim(particles(i)%atomic_kind%name)
604 IF (trim(colvar%coord_param%c_kinds_to(j)) == name_kind)
THEN
605 CALL reallocate(colvar%coord_param%i_at_to, 1, colvar%coord_param%n_atoms_to + 1)
606 colvar%coord_param%n_atoms_to = colvar%coord_param%n_atoms_to + 1
607 colvar%coord_param%i_at_to(colvar%coord_param%n_atoms_to) = i
611 stat = colvar%coord_param%n_atoms_to
615 IF (colvar%coord_param%use_kinds_to_b)
THEN
616 colvar%coord_param%use_kinds_to_b = .false.
617 nkinds =
SIZE(colvar%coord_param%c_kinds_to_b)
620 name_kind = trim(particles(i)%atomic_kind%name)
622 IF (trim(colvar%coord_param%c_kinds_to_b(j)) == name_kind)
THEN
623 CALL reallocate(colvar%coord_param%i_at_to_b, 1, colvar%coord_param%n_atoms_to_b + 1)
624 colvar%coord_param%n_atoms_to_b = colvar%coord_param%n_atoms_to_b + 1
625 colvar%coord_param%i_at_to_b(colvar%coord_param%n_atoms_to_b) = i
629 stat = colvar%coord_param%n_atoms_to_b
639 IF (colvar%mindist_param%use_kinds_from .OR. colvar%mindist_param%use_kinds_to)
THEN
641 IF (colvar%mindist_param%use_kinds_from)
THEN
642 colvar%mindist_param%use_kinds_from = .false.
643 nkinds =
SIZE(colvar%mindist_param%k_coord_from)
646 name_kind = trim(particles(i)%atomic_kind%name)
648 IF (trim(colvar%mindist_param%k_coord_from(j)) == name_kind)
THEN
649 CALL reallocate(colvar%mindist_param%i_coord_from, 1, colvar%mindist_param%n_coord_from + 1)
650 colvar%mindist_param%n_coord_from = colvar%mindist_param%n_coord_from + 1
651 colvar%mindist_param%i_coord_from(colvar%mindist_param%n_coord_from) = i
655 stat = colvar%mindist_param%n_coord_from
659 IF (colvar%mindist_param%use_kinds_to)
THEN
660 colvar%mindist_param%use_kinds_to = .false.
661 nkinds =
SIZE(colvar%mindist_param%k_coord_to)
664 name_kind = trim(particles(i)%atomic_kind%name)
666 IF (trim(colvar%mindist_param%k_coord_to(j)) == name_kind)
THEN
667 CALL reallocate(colvar%mindist_param%i_coord_to, 1, colvar%mindist_param%n_coord_to + 1)
668 colvar%mindist_param%n_coord_to = colvar%mindist_param%n_coord_to + 1
669 colvar%mindist_param%i_coord_to(colvar%mindist_param%n_coord_to) = i
673 stat = colvar%mindist_param%n_coord_to
683 IF (colvar%population_param%use_kinds_from .OR. colvar%population_param%use_kinds_to)
THEN
685 IF (colvar%population_param%use_kinds_from)
THEN
686 colvar%population_param%use_kinds_from = .false.
687 nkinds =
SIZE(colvar%population_param%c_kinds_from)
690 name_kind = trim(particles(i)%atomic_kind%name)
692 IF (trim(colvar%population_param%c_kinds_from(j)) == name_kind)
THEN
693 CALL reallocate(colvar%population_param%i_at_from, 1, colvar%population_param%n_atoms_from + 1)
694 colvar%population_param%n_atoms_from = colvar%population_param%n_atoms_from + 1
695 colvar%population_param%i_at_from(colvar%population_param%n_atoms_from) = i
699 stat = colvar%population_param%n_atoms_from
703 IF (colvar%population_param%use_kinds_to)
THEN
704 colvar%population_param%use_kinds_to = .false.
705 nkinds =
SIZE(colvar%population_param%c_kinds_to)
708 name_kind = trim(particles(i)%atomic_kind%name)
710 IF (trim(colvar%population_param%c_kinds_to(j)) == name_kind)
THEN
711 CALL reallocate(colvar%population_param%i_at_to, 1, colvar%population_param%n_atoms_to + 1)
712 colvar%population_param%n_atoms_to = colvar%population_param%n_atoms_to + 1
713 colvar%population_param%i_at_to(colvar%population_param%n_atoms_to) = i
717 stat = colvar%population_param%n_atoms_to
728 IF (colvar%gyration_param%use_kinds)
THEN
730 IF (colvar%gyration_param%use_kinds)
THEN
731 colvar%gyration_param%use_kinds = .false.
732 nkinds =
SIZE(colvar%gyration_param%c_kinds)
735 name_kind = trim(particles(i)%atomic_kind%name)
737 IF (trim(colvar%gyration_param%c_kinds(j)) == name_kind)
THEN
738 CALL reallocate(colvar%gyration_param%i_at, 1, colvar%gyration_param%n_atoms + 1)
739 colvar%gyration_param%n_atoms = colvar%gyration_param%n_atoms + 1
740 colvar%gyration_param%i_at(colvar%gyration_param%n_atoms) = i
744 stat = colvar%gyration_param%n_atoms
753 IF (colvar%rmsd_param%subset ==
rmsd_all)
THEN
755 DO i = 1,
SIZE(colvar%rmsd_param%i_rmsd)
756 ii = colvar%rmsd_param%i_rmsd(i)
757 colvar%rmsd_param%weights(ii) = particles(ii)%atomic_kind%mass
759 mtot = minval(colvar%rmsd_param%weights)
760 colvar%rmsd_param%weights = colvar%rmsd_param%weights/mtot
761 ELSE IF (colvar%rmsd_param%subset ==
rmsd_list)
THEN
763 DO i = 1,
SIZE(colvar%rmsd_param%i_rmsd)
764 ii = colvar%rmsd_param%i_rmsd(i)
765 colvar%rmsd_param%weights(ii) = 1.0_dp
770 IF (colvar%rmsd_param%align_frames)
THEN
771 nr_frame =
SIZE(colvar%rmsd_param%r_ref, 2)
773 CALL rmsd3(particles, colvar%rmsd_param%r_ref(:, i), colvar%rmsd_param%r_ref(:, 1), -1, &
781 IF (colvar%reaction_path_param%dist_rmsd .OR. colvar%reaction_path_param%rmsd)
THEN
782 IF (colvar%reaction_path_param%align_frames)
THEN
783 nr_frame = colvar%reaction_path_param%nr_frames
785 CALL rmsd3(particles, colvar%reaction_path_param%r_ref(:, i), colvar%reaction_path_param%r_ref(:, 1), -1, &
Handles all functions related to the CELL.
defines collective variables s({R}) and the derivative of this variable wrt R these can then be used ...
subroutine, public colvar_eval_mol_f(colvar, cell, particles, pos, fixd_list)
evaluates the derivatives (dsdr) given and due to the given colvar variables in a molecular environme...
Initialize the collective variables types.
integer, parameter, public population_colvar_id
integer, parameter, public distance_from_path_colvar_id
integer, parameter, public rmsd_colvar_id
integer, parameter, public mindist_colvar_id
integer, parameter, public gyration_colvar_id
integer, parameter, public coord_colvar_id
subroutine, public colvar_setup(colvar)
Finalize the setup of the collective variable.
integer, parameter, public reaction_path_colvar_id
evaluations of colvar for internal coordinates schemes
subroutine, public eval_colvar(force_env, coords, cvalues, bmatrix, massi, amatrix)
Computes the values of colvars and the Wilson matrix B and its invers A.
subroutine, public post_process_colvar(colvar, particles)
Complete the description of the COORDINATION colvar when defined using KINDS.
integer function, public number_of_colvar(force_env, only_intra_colvar, unique)
Gives back the number of colvar defined for a force_eval.
subroutine, public get_clv_force(force_env, forces, coords, nsize_xyz, nsize_int, cvalues, mmatrix)
Computes the forces in the frame of collective variables, and additional also the local metric tensor...
subroutine, public set_colvars_target(targets, force_env)
Set the value of target for constraints/restraints.
types that represent a subsys, i.e. a part of the system
subroutine, public cp_subsys_get(subsys, ref_count, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell)
returns information about various attributes of the given subsys
stores a lists of integer that are local to a processor. The idea is that these integers represent ob...
Interface for the force calculations.
recursive subroutine, public force_env_get(force_env, in_use, fist_env, qs_env, meta_env, fp_env, subsys, para_env, potential_energy, additional_potential, kinetic_energy, harmonic_shell, kinetic_shell, cell, sub_force_env, qmmm_env, qmmmx_env, eip_env, pwdft_env, globenv, input, force_env_section, method_name_id, root_section, mixed_env, nnp_env, embed_env, ipi_env)
returns various attributes about the force environment
Defines the basic variable types.
integer, parameter, public dp
Collection of simple mathematical functions and subroutines.
Utility routines for the memory handling.
represent a simple array based list of the given type
Define the molecule kind structure types and the corresponding functionality.
subroutine, public get_molecule_kind(molecule_kind, atom_list, bond_list, bend_list, ub_list, impr_list, opbend_list, colv_list, fixd_list, g3x3_list, g4x6_list, vsite_list, torsion_list, shell_list, name, mass, charge, kind_number, natom, nbend, nbond, nub, nimpr, nopbend, nconstraint, nconstraint_fixd, nfixd, ncolv, ng3x3, ng4x6, nvsite, nfixd_restraint, ng3x3_restraint, ng4x6_restraint, nvsite_restraint, nrestraints, nmolecule, nsgf, nshell, ntorsion, molecule_list, nelectron, nelectron_alpha, nelectron_beta, bond_kind_set, bend_kind_set, ub_kind_set, impr_kind_set, opbend_kind_set, torsion_kind_set, molname_generated)
Get informations about a molecule kind.
represent a simple array based list of the given type
Define the data structure for the molecule information.
subroutine, public get_molecule(molecule, molecule_kind, lmi, lci, lg3x3, lg4x6, lcolv, first_atom, last_atom, first_shell, last_shell)
Get components from a molecule data set.
represent a simple array based list of the given type
Define the data structure for the particle information.
Defines functions to perform rmsd in 3D.
subroutine, public rmsd3(particle_set, r, r0, output_unit, weights, my_val, rotate, transl, rot, drmsd3)
Computes the RMSD in 3D. Provides also derivatives.
Utilities for string manipulations.
elemental subroutine, public uppercase(string)
Convert all lower case characters in a string to upper case.
All kind of helpful little routines.
Type defining parameters related to the simulation cell.
parameters for a collective variable
represents a system: atoms, molecules, their pos,vel,...
structure to store local (to a processor) ordered lists of integers.
wrapper to abstract the force evaluation of the various methods
represent a list of objects
represent a list of objects
represent a list of objects