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.")
121 IF (reftraj%info%variable_volume)
THEN
126 CALL cp_abort(__location__, &
127 "Reached the end of the cell file for REFTRAJ. Number of steps skipped "// &
128 "equal to the number of steps present in the file.")
131 reftraj%natom = natom
132 IF (reftraj%info%last_snapshot > 0)
THEN
133 simpar%nsteps = (reftraj%info%last_snapshot - reftraj%info%first_snapshot + 1)
136 IF (reftraj%info%msd)
THEN
139 CALL initialize_msd_reftraj(reftraj%msd, msd_section, reftraj, md_env)
154 SUBROUTINE initialize_msd_reftraj(msd, msd_section, reftraj, md_env)
160 CHARACTER(LEN=2) :: element_symbol, element_symbol_ref0
161 CHARACTER(LEN=default_path_length) :: filename
162 CHARACTER(LEN=default_string_length) :: title
163 CHARACTER(LEN=max_line_length) :: errmsg
164 INTEGER :: first_atom, iatom, ikind, imol, &
165 last_atom, natom_read, nkind, nmol, &
166 nmolecule, nmolkind, npart
167 REAL(kind=
dp) :: com(3), mass, mass_mol, tol, x, y, z
181 NULLIFY (molecule, molecules, molecule_kind, molecule_kind_set, &
182 molecule_kinds, molecule_set, subsys, force_env, particles, particle_set)
183 cpassert(.NOT.
ASSOCIATED(msd))
187 NULLIFY (msd%ref0_pos)
188 NULLIFY (msd%ref0_com_molecule)
189 NULLIFY (msd%val_msd_kind)
190 NULLIFY (msd%val_msd_molecule)
191 NULLIFY (msd%disp_atom_index)
192 NULLIFY (msd%disp_atom_dr)
194 CALL get_md_env(md_env=md_env, force_env=force_env, para_env=para_env)
197 particle_set => particles%els
198 npart =
SIZE(particle_set, 1)
202 CALL open_file(trim(filename), unit_number=msd%ref0_unit)
204 ALLOCATE (msd%ref0_pos(3, reftraj%natom))
205 msd%ref0_pos = 0.0_dp
207 IF (para_env%is_source())
THEN
208 rewind(msd%ref0_unit)
209 READ (msd%ref0_unit, *, err=999,
END=998) natom_read
210 IF (natom_read /= reftraj%natom)
THEN
211 errmsg =
"The MSD reference configuration has a different number of atoms: "// &
216 READ (msd%ref0_unit,
'(A)', err=999,
END=998) title
217 msd%total_mass = 0.0_dp
218 msd%ref0_com = 0.0_dp
219 DO iatom = 1, natom_read
220 READ (msd%ref0_unit, *, err=999,
END=998) element_symbol_ref0, x, y, z
221 CALL uppercase(element_symbol_ref0)
222 element_symbol = trim(particle_set(iatom)%atomic_kind%element_symbol)
223 CALL uppercase(element_symbol)
224 IF (element_symbol /= element_symbol_ref0)
THEN
225 errmsg =
"The MSD reference configuration shows a mismatch: Check atom "// &
226 trim(adjustl(cp_to_string(iatom)))
229 x = cp_unit_to_cp2k(x,
"angstrom")
230 y = cp_unit_to_cp2k(y,
"angstrom")
231 z = cp_unit_to_cp2k(z,
"angstrom")
232 msd%ref0_pos(1, iatom) = x
233 msd%ref0_pos(2, iatom) = y
234 msd%ref0_pos(3, iatom) = z
235 mass = particle_set(iatom)%atomic_kind%mass
236 msd%ref0_com(1) = msd%ref0_com(1) + x*mass
237 msd%ref0_com(2) = msd%ref0_com(2) + y*mass
238 msd%ref0_com(3) = msd%ref0_com(3) + z*mass
239 msd%total_mass = msd%total_mass + mass
241 msd%ref0_com = msd%ref0_com/msd%total_mass
243 CALL close_file(unit_number=msd%ref0_unit)
245 CALL para_env%bcast(msd%total_mass)
246 CALL para_env%bcast(msd%ref0_pos)
247 CALL para_env%bcast(msd%ref0_com)
249 CALL section_vals_val_get(msd_section,
"MSD_PER_KIND", l_val=msd%msd_kind)
250 CALL section_vals_val_get(msd_section,
"MSD_PER_MOLKIND", l_val=msd%msd_molecule)
251 CALL section_vals_val_get(msd_section,
"MSD_PER_REGION", l_val=msd%msd_region)
253 CALL section_vals_val_get(msd_section,
"DISPLACED_ATOM", l_val=msd%disp_atom)
254 IF (msd%disp_atom)
THEN
255 ALLOCATE (msd%disp_atom_index(npart))
256 msd%disp_atom_index = 0
257 ALLOCATE (msd%disp_atom_dr(3, npart))
258 msd%disp_atom_dr = 0.0_dp
259 msd%msd_kind = .true.
261 CALL section_vals_val_get(msd_section,
"DISPLACEMENT_TOL", r_val=tol)
262 msd%disp_atom_tol = tol*tol
264 IF (msd%msd_kind)
THEN
265 CALL cp_subsys_get(subsys=subsys, atomic_kinds=atomic_kinds)
266 nkind = atomic_kinds%n_els
268 ALLOCATE (msd%val_msd_kind(4, nkind))
269 msd%val_msd_kind = 0.0_dp
272 IF (msd%msd_molecule)
THEN
273 CALL cp_subsys_get(subsys=subsys, molecules=molecules, &
274 molecule_kinds=molecule_kinds)
275 nmolkind = molecule_kinds%n_els
276 ALLOCATE (msd%val_msd_molecule(4, nmolkind))
278 molecule_kind_set => molecule_kinds%els
279 molecule_set => molecules%els
280 nmol = molecules%n_els
282 ALLOCATE (msd%ref0_com_molecule(3, nmol))
284 DO ikind = 1, nmolkind
285 molecule_kind => molecule_kind_set(ikind)
286 CALL get_molecule_kind(molecule_kind=molecule_kind, nmolecule=nmolecule)
287 DO imol = 1, nmolecule
288 molecule => molecule_set(molecule_kind%molecule_list(imol))
289 CALL get_molecule(molecule=molecule, first_atom=first_atom, last_atom=last_atom)
292 DO iatom = first_atom, last_atom
293 mass = particle_set(iatom)%atomic_kind%mass
294 com(1) = com(1) + msd%ref0_pos(1, iatom)*mass
295 com(2) = com(2) + msd%ref0_pos(2, iatom)*mass
296 com(3) = com(3) + msd%ref0_pos(3, iatom)*mass
297 mass_mol = mass_mol + mass
299 msd%ref0_com_molecule(1, molecule_kind%molecule_list(imol)) = com(1)/mass_mol
300 msd%ref0_com_molecule(2, molecule_kind%molecule_list(imol)) = com(2)/mass_mol
301 msd%ref0_com_molecule(3, molecule_kind%molecule_list(imol)) = com(3)/mass_mol
306 IF (msd%msd_region)
THEN
312 cpabort(
"End of reference positions file reached")
314 cpabort(
"Error reading reference positions file")
316 END SUBROUTINE initialize_msd_reftraj
329 TYPE(reftraj_type),
POINTER :: reftraj
330 TYPE(md_environment_type),
POINTER :: md_env
331 TYPE(particle_type),
DIMENSION(:),
POINTER :: particle_set
333 INTEGER ::
atom, bo(2), first_atom, iatom, ikind, imol, imol_global, last_atom, mepos, &
334 natom_kind, nmol_per_kind, nmolecule, nmolkind, num_pe
335 INTEGER,
DIMENSION(:),
POINTER :: atom_list
336 REAL(kind=dp) :: com(3), diff2_com(4), dr2, dx, dy, dz, &
337 mass, mass_mol, msd_mkind(4), rcom(3)
338 TYPE(atomic_kind_list_type),
POINTER :: atomic_kinds
339 TYPE(atomic_kind_type),
POINTER :: atomic_kind
340 TYPE(cp_subsys_type),
POINTER :: subsys
341 TYPE(distribution_1d_type),
POINTER :: local_molecules
342 TYPE(force_env_type),
POINTER :: force_env
343 TYPE(molecule_kind_list_type),
POINTER :: molecule_kinds
344 TYPE(molecule_kind_type),
DIMENSION(:),
POINTER :: molecule_kind_set
345 TYPE(molecule_kind_type),
POINTER :: molecule_kind
346 TYPE(molecule_list_type),
POINTER :: molecules
347 TYPE(molecule_type),
DIMENSION(:),
POINTER :: molecule_set
348 TYPE(molecule_type),
POINTER :: molecule
349 TYPE(mp_para_env_type),
POINTER :: para_env
351 NULLIFY (force_env, para_env, subsys)
352 NULLIFY (atomic_kind, atomic_kinds, atom_list)
353 NULLIFY (local_molecules, molecule, molecule_kind, molecule_kinds, &
354 molecule_kind_set, molecules, molecule_set)
356 CALL get_md_env(md_env=md_env, force_env=force_env, para_env=para_env)
357 CALL force_env_get(force_env=force_env, subsys=subsys)
358 CALL cp_subsys_get(subsys=subsys, atomic_kinds=atomic_kinds)
360 num_pe = para_env%num_pe
361 mepos = para_env%mepos
363 IF (reftraj%msd%msd_kind)
THEN
364 reftraj%msd%val_msd_kind = 0.0_dp
365 reftraj%msd%num_disp_atom = 0
366 reftraj%msd%disp_atom_dr = 0.0_dp
369 DO ikind = 1, atomic_kinds%n_els
370 atomic_kind => atomic_kinds%els(ikind)
371 CALL get_atomic_kind(atomic_kind=atomic_kind, &
372 atom_list=atom_list, &
373 natom=natom_kind, mass=mass)
374 bo = get_limit(natom_kind, num_pe, mepos)
375 DO iatom = bo(1), bo(2)
376 atom = atom_list(iatom)
377 rcom(1) = rcom(1) + particle_set(
atom)%r(1)*mass
378 rcom(2) = rcom(2) + particle_set(
atom)%r(2)*mass
379 rcom(3) = rcom(3) + particle_set(
atom)%r(3)*mass
382 CALL para_env%sum(rcom)
383 rcom = rcom/reftraj%msd%total_mass
384 reftraj%msd%drcom(1) = rcom(1) - reftraj%msd%ref0_com(1)
385 reftraj%msd%drcom(2) = rcom(2) - reftraj%msd%ref0_com(2)
386 reftraj%msd%drcom(3) = rcom(3) - reftraj%msd%ref0_com(3)
391 DO ikind = 1, atomic_kinds%n_els
392 atomic_kind => atomic_kinds%els(ikind)
393 CALL get_atomic_kind(atomic_kind=atomic_kind, &
394 atom_list=atom_list, &
396 bo = get_limit(natom_kind, num_pe, mepos)
397 DO iatom = bo(1), bo(2)
398 atom = atom_list(iatom)
399 dx = particle_set(
atom)%r(1) - reftraj%msd%ref0_pos(1,
atom) - &
401 dy = particle_set(
atom)%r(2) - reftraj%msd%ref0_pos(2,
atom) - &
403 dz = particle_set(
atom)%r(3) - reftraj%msd%ref0_pos(3,
atom) - &
405 dr2 = dx*dx + dy*dy + dz*dz
407 reftraj%msd%val_msd_kind(1, ikind) = reftraj%msd%val_msd_kind(1, ikind) + dx*dx
408 reftraj%msd%val_msd_kind(2, ikind) = reftraj%msd%val_msd_kind(2, ikind) + dy*dy
409 reftraj%msd%val_msd_kind(3, ikind) = reftraj%msd%val_msd_kind(3, ikind) + dz*dz
410 reftraj%msd%val_msd_kind(4, ikind) = reftraj%msd%val_msd_kind(4, ikind) + dr2
412 IF (reftraj%msd%disp_atom)
THEN
413 IF (dr2 > reftraj%msd%disp_atom_tol)
THEN
414 reftraj%msd%num_disp_atom = reftraj%msd%num_disp_atom + 1
415 reftraj%msd%disp_atom_dr(1,
atom) = dx
416 reftraj%msd%disp_atom_dr(2,
atom) = dy
417 reftraj%msd%disp_atom_dr(3,
atom) = dz
421 reftraj%msd%val_msd_kind(1:4, ikind) = &
422 reftraj%msd%val_msd_kind(1:4, ikind)/real(natom_kind, kind=dp)
426 CALL para_env%sum(reftraj%msd%val_msd_kind)
427 CALL para_env%sum(reftraj%msd%num_disp_atom)
428 CALL para_env%sum(reftraj%msd%disp_atom_dr)
430 IF (reftraj%msd%msd_molecule)
THEN
431 CALL cp_subsys_get(subsys=subsys, local_molecules=local_molecules, &
432 molecules=molecules, molecule_kinds=molecule_kinds)
434 nmolkind = molecule_kinds%n_els
435 molecule_kind_set => molecule_kinds%els
436 molecule_set => molecules%els
438 reftraj%msd%val_msd_molecule = 0.0_dp
439 DO ikind = 1, nmolkind
440 molecule_kind => molecule_kind_set(ikind)
441 CALL get_molecule_kind(molecule_kind=molecule_kind, nmolecule=nmolecule)
442 nmol_per_kind = local_molecules%n_el(ikind)
444 DO imol = 1, nmol_per_kind
445 imol_global = local_molecules%list(ikind)%array(imol)
446 molecule => molecule_set(imol_global)
447 CALL get_molecule(molecule, first_atom=first_atom, last_atom=last_atom)
451 DO iatom = first_atom, last_atom
452 mass = particle_set(iatom)%atomic_kind%mass
453 com(1) = com(1) + particle_set(iatom)%r(1)*mass
454 com(2) = com(2) + particle_set(iatom)%r(2)*mass
455 com(3) = com(3) + particle_set(iatom)%r(3)*mass
456 mass_mol = mass_mol + mass
458 com(1) = com(1)/mass_mol
459 com(2) = com(2)/mass_mol
460 com(3) = com(3)/mass_mol
461 diff2_com(1) = com(1) - reftraj%msd%ref0_com_molecule(1, imol_global)
462 diff2_com(2) = com(2) - reftraj%msd%ref0_com_molecule(2, imol_global)
463 diff2_com(3) = com(3) - reftraj%msd%ref0_com_molecule(3, imol_global)
464 diff2_com(1) = diff2_com(1)*diff2_com(1)
465 diff2_com(2) = diff2_com(2)*diff2_com(2)
466 diff2_com(3) = diff2_com(3)*diff2_com(3)
467 diff2_com(4) = diff2_com(1) + diff2_com(2) + diff2_com(3)
468 msd_mkind(1) = msd_mkind(1) + diff2_com(1)
469 msd_mkind(2) = msd_mkind(2) + diff2_com(2)
470 msd_mkind(3) = msd_mkind(3) + diff2_com(3)
471 msd_mkind(4) = msd_mkind(4) + diff2_com(4)
474 reftraj%msd%val_msd_molecule(1, ikind) = msd_mkind(1)/real(nmolecule, kind=dp)
475 reftraj%msd%val_msd_molecule(2, ikind) = msd_mkind(2)/real(nmolecule, kind=dp)
476 reftraj%msd%val_msd_molecule(3, ikind) = msd_mkind(3)/real(nmolecule, kind=dp)
477 reftraj%msd%val_msd_molecule(4, ikind) = msd_mkind(4)/real(nmolecule, kind=dp)
479 CALL para_env%sum(reftraj%msd%val_msd_molecule)
493 TYPE(md_environment_type),
POINTER :: md_env
495 CHARACTER(LEN=default_string_length) :: my_act, my_mittle, my_pos
496 INTEGER :: iat, ikind, nkind, out_msd
497 LOGICAL,
SAVE :: first_entry = .false.
498 TYPE(cp_logger_type),
POINTER :: logger
499 TYPE(force_env_type),
POINTER :: force_env
500 TYPE(reftraj_type),
POINTER :: reftraj
501 TYPE(section_vals_type),
POINTER :: reftraj_section, root_section
504 logger => cp_get_default_logger()
507 NULLIFY (reftraj_section, root_section)
509 CALL get_md_env(md_env=md_env, force_env=force_env, &
512 CALL force_env_get(force_env=force_env, root_section=root_section)
514 reftraj_section => section_vals_get_subs_vals(root_section, &
520 IF (reftraj%init .AND. (reftraj%isnap == reftraj%info%first_snapshot))
THEN
525 IF (reftraj%info%msd)
THEN
526 IF (reftraj%msd%msd_kind)
THEN
527 nkind =
SIZE(reftraj%msd%val_msd_kind, 2)
529 my_mittle =
"k"//trim(adjustl(cp_to_string(ikind)))
530 out_msd = cp_print_key_unit_nr(logger, reftraj_section,
"PRINT%MSD_KIND", &
531 extension=
".msd", file_position=my_pos, file_action=my_act, &
532 file_form=
"FORMATTED", middle_name=trim(my_mittle))
533 IF (out_msd > 0)
THEN
534 WRITE (unit=out_msd, fmt=
"(I8, F12.3,4F20.10)") reftraj%itimes, &
535 reftraj%time*femtoseconds, &
536 reftraj%msd%val_msd_kind(1:4, ikind)*angstrom*angstrom
537 CALL m_flush(out_msd)
539 CALL cp_print_key_finished_output(out_msd, logger, reftraj_section, &
543 IF (reftraj%msd%msd_molecule)
THEN
544 nkind =
SIZE(reftraj%msd%val_msd_molecule, 2)
546 my_mittle =
"mk"//trim(adjustl(cp_to_string(ikind)))
547 out_msd = cp_print_key_unit_nr(logger, reftraj_section,
"PRINT%MSD_MOLECULE", &
548 extension=
".msd", file_position=my_pos, file_action=my_act, &
549 file_form=
"FORMATTED", middle_name=trim(my_mittle))
550 IF (out_msd > 0)
THEN
551 WRITE (unit=out_msd, fmt=
"(I8, F12.3,4F20.10)") reftraj%itimes, &
552 reftraj%time*femtoseconds, &
553 reftraj%msd%val_msd_molecule(1:4, ikind)*angstrom*angstrom
554 CALL m_flush(out_msd)
556 CALL cp_print_key_finished_output(out_msd, logger, reftraj_section, &
557 "PRINT%MSD_MOLECULE")
560 IF (reftraj%msd%disp_atom)
THEN
562 IF (first_entry) my_pos =
"REWIND"
563 my_mittle =
"disp_at"
564 out_msd = cp_print_key_unit_nr(logger, reftraj_section,
"PRINT%DISPLACED_ATOM", &
565 extension=
".msd", file_position=my_pos, file_action=my_act, &
566 file_form=
"FORMATTED", middle_name=trim(my_mittle))
567 IF (out_msd > 0 .AND. reftraj%msd%num_disp_atom > 0)
THEN
568 IF (first_entry)
THEN
569 first_entry = .false.
571 WRITE (unit=out_msd, fmt=
"(A,T7,I8, A, T29, F12.3, A, T50, I10)")
"# i = ", reftraj%itimes,
" time (fs) = ", &
572 reftraj%time*femtoseconds,
" nat = ", reftraj%msd%num_disp_atom
573 DO iat = 1,
SIZE(reftraj%msd%disp_atom_dr, 2)
574 IF (abs(reftraj%msd%disp_atom_dr(1, iat)) > 0.0_dp)
THEN
575 WRITE (unit=out_msd, fmt=
"(I8, 3F20.10)") iat, &
576 reftraj%msd%disp_atom_dr(1, iat)*angstrom, &
577 reftraj%msd%disp_atom_dr(2, iat)*angstrom, &
578 reftraj%msd%disp_atom_dr(3, iat)*angstrom
582 CALL cp_print_key_finished_output(out_msd, logger, reftraj_section, &
583 "PRINT%DISPLACED_ATOM")
586 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)
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.