60#include "../base/base_uses.f90"
66 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'reftraj_util'
87 INTEGER :: natom, nline_to_skip, nskip
96 NULLIFY (force_env, msd_section, particles, simpar, subsys)
97 CALL get_md_env(md_env=md_env, force_env=force_env, para_env=para_env, &
101 natom = particles%n_els
106 nskip = reftraj%info%first_snapshot - 1
110 nline_to_skip = (natom + 2)*nskip
114 reftraj%isnap = nskip
116 CALL cp_abort(__location__, &
117 "Reached the end of the trajectory file for REFTRAJ. Number of steps skipped "// &
118 "equal to the number of steps present in the file.")
122 IF (reftraj%info%variable_volume)
THEN
127 CALL cp_abort(__location__, &
128 "Reached the end of the cell file for REFTRAJ. Number of steps skipped "// &
129 "equal to the number of steps present in the file.")
133 reftraj%natom = natom
134 IF (reftraj%info%last_snapshot > 0)
THEN
135 simpar%nsteps = (reftraj%info%last_snapshot - reftraj%info%first_snapshot + 1)
138 IF (reftraj%info%msd)
THEN
141 CALL initialize_msd_reftraj(reftraj%msd, msd_section, reftraj, md_env)
156 SUBROUTINE initialize_msd_reftraj(msd, msd_section, reftraj, md_env)
162 CHARACTER(LEN=2) :: element_symbol, element_symbol_ref0
163 CHARACTER(LEN=default_path_length) :: filename
164 CHARACTER(LEN=default_string_length) :: title
165 CHARACTER(LEN=max_line_length) :: errmsg
166 INTEGER :: first_atom, iatom, ikind, imol, &
167 last_atom, natom_read, nkind, nmol, &
168 nmolecule, nmolkind, npart
169 REAL(kind=
dp) :: com(3), mass, mass_mol, tol, x, y, z
183 NULLIFY (molecule, molecules, molecule_kind, molecule_kind_set, &
184 molecule_kinds, molecule_set, subsys, force_env, particles, particle_set)
185 cpassert(.NOT.
ASSOCIATED(msd))
189 NULLIFY (msd%ref0_pos)
190 NULLIFY (msd%ref0_com_molecule)
191 NULLIFY (msd%val_msd_kind)
192 NULLIFY (msd%val_msd_molecule)
193 NULLIFY (msd%disp_atom_index)
194 NULLIFY (msd%disp_atom_dr)
196 CALL get_md_env(md_env=md_env, force_env=force_env, para_env=para_env)
199 particle_set => particles%els
200 npart =
SIZE(particle_set, 1)
204 CALL open_file(trim(filename), unit_number=msd%ref0_unit)
206 ALLOCATE (msd%ref0_pos(3, reftraj%natom))
207 msd%ref0_pos = 0.0_dp
209 IF (para_env%is_source())
THEN
210 rewind(msd%ref0_unit)
211 READ (msd%ref0_unit, *, err=999,
END=998) natom_read
212 IF (natom_read /= reftraj%natom)
THEN
213 errmsg =
"The MSD reference configuration has a different number of atoms: "// &
218 READ (msd%ref0_unit,
'(A)', err=999,
END=998) title
219 msd%total_mass = 0.0_dp
220 msd%ref0_com = 0.0_dp
221 DO iatom = 1, natom_read
222 READ (msd%ref0_unit, *, err=999,
END=998) element_symbol_ref0, x, y, z
223 CALL uppercase(element_symbol_ref0)
224 element_symbol = trim(particle_set(iatom)%atomic_kind%element_symbol)
225 CALL uppercase(element_symbol)
226 IF (element_symbol /= element_symbol_ref0)
THEN
227 errmsg =
"The MSD reference configuration shows a mismatch: Check atom "// &
228 trim(adjustl(cp_to_string(iatom)))
231 x = cp_unit_to_cp2k(x,
"angstrom")
232 y = cp_unit_to_cp2k(y,
"angstrom")
233 z = cp_unit_to_cp2k(z,
"angstrom")
234 msd%ref0_pos(1, iatom) = x
235 msd%ref0_pos(2, iatom) = y
236 msd%ref0_pos(3, iatom) = z
237 mass = particle_set(iatom)%atomic_kind%mass
238 msd%ref0_com(1) = msd%ref0_com(1) + x*mass
239 msd%ref0_com(2) = msd%ref0_com(2) + y*mass
240 msd%ref0_com(3) = msd%ref0_com(3) + z*mass
241 msd%total_mass = msd%total_mass + mass
243 msd%ref0_com = msd%ref0_com/msd%total_mass
245 CALL close_file(unit_number=msd%ref0_unit)
247 CALL para_env%bcast(msd%total_mass)
248 CALL para_env%bcast(msd%ref0_pos)
249 CALL para_env%bcast(msd%ref0_com)
251 CALL section_vals_val_get(msd_section,
"MSD_PER_KIND", l_val=msd%msd_kind)
252 CALL section_vals_val_get(msd_section,
"MSD_PER_MOLKIND", l_val=msd%msd_molecule)
253 CALL section_vals_val_get(msd_section,
"MSD_PER_REGION", l_val=msd%msd_region)
255 CALL section_vals_val_get(msd_section,
"DISPLACED_ATOM", l_val=msd%disp_atom)
256 IF (msd%disp_atom)
THEN
257 ALLOCATE (msd%disp_atom_index(npart))
258 msd%disp_atom_index = 0
259 ALLOCATE (msd%disp_atom_dr(3, npart))
260 msd%disp_atom_dr = 0.0_dp
261 msd%msd_kind = .true.
263 CALL section_vals_val_get(msd_section,
"DISPLACEMENT_TOL", r_val=tol)
264 msd%disp_atom_tol = tol*tol
266 IF (msd%msd_kind)
THEN
267 CALL cp_subsys_get(subsys=subsys, atomic_kinds=atomic_kinds)
268 nkind = atomic_kinds%n_els
270 ALLOCATE (msd%val_msd_kind(4, nkind))
271 msd%val_msd_kind = 0.0_dp
274 IF (msd%msd_molecule)
THEN
275 CALL cp_subsys_get(subsys=subsys, molecules=molecules, &
276 molecule_kinds=molecule_kinds)
277 nmolkind = molecule_kinds%n_els
278 ALLOCATE (msd%val_msd_molecule(4, nmolkind))
280 molecule_kind_set => molecule_kinds%els
281 molecule_set => molecules%els
282 nmol = molecules%n_els
284 ALLOCATE (msd%ref0_com_molecule(3, nmol))
286 DO ikind = 1, nmolkind
287 molecule_kind => molecule_kind_set(ikind)
288 CALL get_molecule_kind(molecule_kind=molecule_kind, nmolecule=nmolecule)
289 DO imol = 1, nmolecule
290 molecule => molecule_set(molecule_kind%molecule_list(imol))
291 CALL get_molecule(molecule=molecule, first_atom=first_atom, last_atom=last_atom)
294 DO iatom = first_atom, last_atom
295 mass = particle_set(iatom)%atomic_kind%mass
296 com(1) = com(1) + msd%ref0_pos(1, iatom)*mass
297 com(2) = com(2) + msd%ref0_pos(2, iatom)*mass
298 com(3) = com(3) + msd%ref0_pos(3, iatom)*mass
299 mass_mol = mass_mol + mass
301 msd%ref0_com_molecule(1, molecule_kind%molecule_list(imol)) = com(1)/mass_mol
302 msd%ref0_com_molecule(2, molecule_kind%molecule_list(imol)) = com(2)/mass_mol
303 msd%ref0_com_molecule(3, molecule_kind%molecule_list(imol)) = com(3)/mass_mol
308 IF (msd%msd_region)
THEN
314 cpabort(
"End of reference positions file reached")
316 cpabort(
"Error reading reference positions file")
318 END SUBROUTINE initialize_msd_reftraj
331 TYPE(reftraj_type),
POINTER :: reftraj
332 TYPE(md_environment_type),
POINTER :: md_env
333 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
335 INTEGER ::
atom, bo(2), first_atom, iatom, ikind, imol, imol_global, last_atom, mepos, &
336 natom_kind, nmol_per_kind, nmolecule, nmolkind, num_pe
337 INTEGER,
DIMENSION(:),
POINTER :: atom_list
338 REAL(kind=dp) :: com(3), diff2_com(4), dr2, dx, dy, dz, &
339 mass, mass_mol, msd_mkind(4), rcom(3)
340 TYPE(atomic_kind_list_type),
POINTER :: atomic_kinds
341 TYPE(atomic_kind_type),
POINTER :: atomic_kind
342 TYPE(cp_subsys_type),
POINTER :: subsys
343 TYPE(distribution_1d_type),
POINTER :: local_molecules
344 TYPE(force_env_type),
POINTER :: force_env
345 TYPE(molecule_kind_list_type),
POINTER :: molecule_kinds
346 TYPE(molecule_kind_type),
DIMENSION(:),
POINTER :: molecule_kind_set
347 TYPE(molecule_kind_type),
POINTER :: molecule_kind
348 TYPE(molecule_list_type),
POINTER :: molecules
349 TYPE(molecule_type),
DIMENSION(:),
POINTER :: molecule_set
350 TYPE(molecule_type),
POINTER :: molecule
351 TYPE(mp_para_env_type),
POINTER :: para_env
353 NULLIFY (force_env, para_env, subsys)
354 NULLIFY (atomic_kind, atomic_kinds, atom_list)
355 NULLIFY (local_molecules, molecule, molecule_kind, molecule_kinds, &
356 molecule_kind_set, molecules, molecule_set)
358 CALL get_md_env(md_env=md_env, force_env=force_env, para_env=para_env)
359 CALL force_env_get(force_env=force_env, subsys=subsys)
360 CALL cp_subsys_get(subsys=subsys, atomic_kinds=atomic_kinds)
362 num_pe = para_env%num_pe
363 mepos = para_env%mepos
365 IF (reftraj%msd%msd_kind)
THEN
366 reftraj%msd%val_msd_kind = 0.0_dp
367 reftraj%msd%num_disp_atom = 0
368 reftraj%msd%disp_atom_dr = 0.0_dp
371 DO ikind = 1, atomic_kinds%n_els
372 atomic_kind => atomic_kinds%els(ikind)
373 CALL get_atomic_kind(atomic_kind=atomic_kind, &
374 atom_list=atom_list, &
375 natom=natom_kind, mass=mass)
376 bo = get_limit(natom_kind, num_pe, mepos)
377 DO iatom = bo(1), bo(2)
378 atom = atom_list(iatom)
379 rcom(1) = rcom(1) + particle_set(
atom)%r(1)*mass
380 rcom(2) = rcom(2) + particle_set(
atom)%r(2)*mass
381 rcom(3) = rcom(3) + particle_set(
atom)%r(3)*mass
384 CALL para_env%sum(rcom)
385 rcom = rcom/reftraj%msd%total_mass
386 reftraj%msd%drcom(1) = rcom(1) - reftraj%msd%ref0_com(1)
387 reftraj%msd%drcom(2) = rcom(2) - reftraj%msd%ref0_com(2)
388 reftraj%msd%drcom(3) = rcom(3) - reftraj%msd%ref0_com(3)
393 DO ikind = 1, atomic_kinds%n_els
394 atomic_kind => atomic_kinds%els(ikind)
395 CALL get_atomic_kind(atomic_kind=atomic_kind, &
396 atom_list=atom_list, &
398 bo = get_limit(natom_kind, num_pe, mepos)
399 DO iatom = bo(1), bo(2)
400 atom = atom_list(iatom)
401 dx = particle_set(
atom)%r(1) - reftraj%msd%ref0_pos(1,
atom) - &
403 dy = particle_set(
atom)%r(2) - reftraj%msd%ref0_pos(2,
atom) - &
405 dz = particle_set(
atom)%r(3) - reftraj%msd%ref0_pos(3,
atom) - &
407 dr2 = dx*dx + dy*dy + dz*dz
409 reftraj%msd%val_msd_kind(1, ikind) = reftraj%msd%val_msd_kind(1, ikind) + dx*dx
410 reftraj%msd%val_msd_kind(2, ikind) = reftraj%msd%val_msd_kind(2, ikind) + dy*dy
411 reftraj%msd%val_msd_kind(3, ikind) = reftraj%msd%val_msd_kind(3, ikind) + dz*dz
412 reftraj%msd%val_msd_kind(4, ikind) = reftraj%msd%val_msd_kind(4, ikind) + dr2
414 IF (reftraj%msd%disp_atom)
THEN
415 IF (dr2 > reftraj%msd%disp_atom_tol)
THEN
416 reftraj%msd%num_disp_atom = reftraj%msd%num_disp_atom + 1
417 reftraj%msd%disp_atom_dr(1,
atom) = dx
418 reftraj%msd%disp_atom_dr(2,
atom) = dy
419 reftraj%msd%disp_atom_dr(3,
atom) = dz
423 reftraj%msd%val_msd_kind(1:4, ikind) = &
424 reftraj%msd%val_msd_kind(1:4, ikind)/real(natom_kind, kind=dp)
428 CALL para_env%sum(reftraj%msd%val_msd_kind)
429 CALL para_env%sum(reftraj%msd%num_disp_atom)
430 CALL para_env%sum(reftraj%msd%disp_atom_dr)
432 IF (reftraj%msd%msd_molecule)
THEN
433 CALL cp_subsys_get(subsys=subsys, local_molecules=local_molecules, &
434 molecules=molecules, molecule_kinds=molecule_kinds)
436 nmolkind = molecule_kinds%n_els
437 molecule_kind_set => molecule_kinds%els
438 molecule_set => molecules%els
440 reftraj%msd%val_msd_molecule = 0.0_dp
441 DO ikind = 1, nmolkind
442 molecule_kind => molecule_kind_set(ikind)
443 CALL get_molecule_kind(molecule_kind=molecule_kind, nmolecule=nmolecule)
444 nmol_per_kind = local_molecules%n_el(ikind)
446 DO imol = 1, nmol_per_kind
447 imol_global = local_molecules%list(ikind)%array(imol)
448 molecule => molecule_set(imol_global)
449 CALL get_molecule(molecule, first_atom=first_atom, last_atom=last_atom)
453 DO iatom = first_atom, last_atom
454 mass = particle_set(iatom)%atomic_kind%mass
455 com(1) = com(1) + particle_set(iatom)%r(1)*mass
456 com(2) = com(2) + particle_set(iatom)%r(2)*mass
457 com(3) = com(3) + particle_set(iatom)%r(3)*mass
458 mass_mol = mass_mol + mass
460 com(1) = com(1)/mass_mol
461 com(2) = com(2)/mass_mol
462 com(3) = com(3)/mass_mol
463 diff2_com(1) = com(1) - reftraj%msd%ref0_com_molecule(1, imol_global)
464 diff2_com(2) = com(2) - reftraj%msd%ref0_com_molecule(2, imol_global)
465 diff2_com(3) = com(3) - reftraj%msd%ref0_com_molecule(3, imol_global)
466 diff2_com(1) = diff2_com(1)*diff2_com(1)
467 diff2_com(2) = diff2_com(2)*diff2_com(2)
468 diff2_com(3) = diff2_com(3)*diff2_com(3)
469 diff2_com(4) = diff2_com(1) + diff2_com(2) + diff2_com(3)
470 msd_mkind(1) = msd_mkind(1) + diff2_com(1)
471 msd_mkind(2) = msd_mkind(2) + diff2_com(2)
472 msd_mkind(3) = msd_mkind(3) + diff2_com(3)
473 msd_mkind(4) = msd_mkind(4) + diff2_com(4)
476 reftraj%msd%val_msd_molecule(1, ikind) = msd_mkind(1)/real(nmolecule, kind=dp)
477 reftraj%msd%val_msd_molecule(2, ikind) = msd_mkind(2)/real(nmolecule, kind=dp)
478 reftraj%msd%val_msd_molecule(3, ikind) = msd_mkind(3)/real(nmolecule, kind=dp)
479 reftraj%msd%val_msd_molecule(4, ikind) = msd_mkind(4)/real(nmolecule, kind=dp)
481 CALL para_env%sum(reftraj%msd%val_msd_molecule)
495 TYPE(md_environment_type),
POINTER :: md_env
497 CHARACTER(LEN=default_string_length) :: my_act, my_mittle, my_pos
498 INTEGER :: iat, ikind, nkind, out_msd
499 LOGICAL,
SAVE :: first_entry = .false.
500 TYPE(cp_logger_type),
POINTER :: logger
501 TYPE(force_env_type),
POINTER :: force_env
502 TYPE(reftraj_type),
POINTER :: reftraj
503 TYPE(section_vals_type),
POINTER :: reftraj_section, root_section
506 logger => cp_get_default_logger()
509 NULLIFY (reftraj_section, root_section)
511 CALL get_md_env(md_env=md_env, force_env=force_env, &
514 CALL force_env_get(force_env=force_env, root_section=root_section)
516 reftraj_section => section_vals_get_subs_vals(root_section, &
522 IF (reftraj%init .AND. (reftraj%isnap == reftraj%info%first_snapshot))
THEN
527 IF (reftraj%info%msd)
THEN
528 IF (reftraj%msd%msd_kind)
THEN
529 nkind =
SIZE(reftraj%msd%val_msd_kind, 2)
531 my_mittle =
"k"//trim(adjustl(cp_to_string(ikind)))
532 out_msd = cp_print_key_unit_nr(logger, reftraj_section,
"PRINT%MSD_KIND", &
533 extension=
".msd", file_position=my_pos, file_action=my_act, &
534 file_form=
"FORMATTED", middle_name=trim(my_mittle))
535 IF (out_msd > 0)
THEN
536 WRITE (unit=out_msd, fmt=
"(I8, F12.3,4F20.10)") reftraj%itimes, &
537 reftraj%time*femtoseconds, &
538 reftraj%msd%val_msd_kind(1:4, ikind)*angstrom*angstrom
539 CALL m_flush(out_msd)
541 CALL cp_print_key_finished_output(out_msd, logger, reftraj_section, &
545 IF (reftraj%msd%msd_molecule)
THEN
546 nkind =
SIZE(reftraj%msd%val_msd_molecule, 2)
548 my_mittle =
"mk"//trim(adjustl(cp_to_string(ikind)))
549 out_msd = cp_print_key_unit_nr(logger, reftraj_section,
"PRINT%MSD_MOLECULE", &
550 extension=
".msd", file_position=my_pos, file_action=my_act, &
551 file_form=
"FORMATTED", middle_name=trim(my_mittle))
552 IF (out_msd > 0)
THEN
553 WRITE (unit=out_msd, fmt=
"(I8, F12.3,4F20.10)") reftraj%itimes, &
554 reftraj%time*femtoseconds, &
555 reftraj%msd%val_msd_molecule(1:4, ikind)*angstrom*angstrom
556 CALL m_flush(out_msd)
558 CALL cp_print_key_finished_output(out_msd, logger, reftraj_section, &
559 "PRINT%MSD_MOLECULE")
562 IF (reftraj%msd%disp_atom)
THEN
564 IF (first_entry) my_pos =
"REWIND"
565 my_mittle =
"disp_at"
566 out_msd = cp_print_key_unit_nr(logger, reftraj_section,
"PRINT%DISPLACED_ATOM", &
567 extension=
".msd", file_position=my_pos, file_action=my_act, &
568 file_form=
"FORMATTED", middle_name=trim(my_mittle))
569 IF (out_msd > 0 .AND. reftraj%msd%num_disp_atom > 0)
THEN
570 IF (first_entry)
THEN
571 first_entry = .false.
573 WRITE (unit=out_msd, fmt=
"(A,T7,I8, A, T29, F12.3, A, T50, I10)")
"# i = ", reftraj%itimes,
" time (fs) = ", &
574 reftraj%time*femtoseconds,
" nat = ", reftraj%msd%num_disp_atom
575 DO iat = 1,
SIZE(reftraj%msd%disp_atom_dr, 2)
576 IF (abs(reftraj%msd%disp_atom_dr(1, iat)) > 0.0_dp)
THEN
577 WRITE (unit=out_msd, fmt=
"(I8, 3F20.10)") iat, &
578 reftraj%msd%disp_atom_dr(1, iat)*angstrom, &
579 reftraj%msd%disp_atom_dr(2, iat)*angstrom, &
580 reftraj%msd%disp_atom_dr(3, iat)*angstrom
584 CALL cp_print_key_finished_output(out_msd, logger, reftraj_section, &
585 "PRINT%DISPLACED_ATOM")
588 reftraj%init = .false.
represent a simple array based list of the given type
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
Utility routines to open and close files.
subroutine, public open_file(file_name, unit_number, file_status, file_form, file_action, file_position, file_pad, file_access, debug)
Opens a file and returns its logical unit number.
subroutine, public close_file(unit_number, file_status)
Closes an open file given by its logical unit number.
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,...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_get_next_line(parser, nline, at_end)
Read the next input line and broadcast the input information. Skip (nline-1) lines and skip also all ...
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, cell_ref, use_ref_cell)
returns information about various attributes of the given subsys
real(kind=dp) function, public cp_unit_to_cp2k(value, unit_str, defaults, power)
converts to the internal cp2k units to the given unit
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 max_line_length
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
Machine interface based on Fortran 2003 and POSIX.
subroutine, public m_flush(lunit)
flushes units if the &GLOBAL flag is set accordingly
subroutine, public get_md_env(md_env, itimes, constant, used_time, cell, simpar, npt, force_env, para_env, reftraj, t, init, first_time, fe_env, thermostats, barostat, thermostat_coeff, thermostat_part, thermostat_shell, thermostat_baro, thermostat_fast, thermostat_slow, md_ener, averages, thermal_regions, ehrenfest_md)
get components of MD environment type
Interface to the message passing library MPI.
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.
Definition of physical constants:
real(kind=dp), parameter, public femtoseconds
real(kind=dp), parameter, public angstrom
initialization of the reftraj structure used to analyse previously generated trajectories
Initialize the analysis of trajectories to be done by activating the REFTRAJ ensemble.
subroutine, public write_output_reftraj(md_env)
...
subroutine, public compute_msd_reftraj(reftraj, md_env, particle_set)
...
subroutine, public initialize_reftraj(reftraj, reftraj_section, md_env)
...
Type for storing MD parameters.
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.
pure integer function, dimension(2), public get_limit(m, n, me)
divide m entries into n parts, return size of part me
represent a list of objects
Provides all information about an atomic kind.
type of a logger, at the moment it contains just a print level starting at which level it should be l...
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
stores all the informations relevant to an mpi environment
represent a list of objects
represent a list of objects
represent a list of objects
Simulation parameter type for molecular dynamics.