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. Tracking of preconnections.
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
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.