35 #include "./base/base_uses.f90"
39 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'topology_input'
56 TYPE(section_vals_type),
POINTER :: topology_section
58 CHARACTER(len=*),
PARAMETER :: routinen =
'read_topology_section'
60 INTEGER :: handle, ival
62 CALL timeset(routinen, handle)
68 cpabort(
"Only one between <CHARGE_OCCUP,CHARGE_BETA,CHARGE_EXTENDED> can be defined! ")
111 TYPE(colvar_p_type),
DIMENSION(:),
POINTER :: colvar_p
112 TYPE(section_vals_type),
POINTER :: constraint_section
114 CHARACTER(LEN=default_string_length), &
115 DIMENSION(:),
POINTER :: tmpstringlist
116 INTEGER :: icolvar, ig, isize, isize_old, itype, &
117 jg, msize, msize_old, n_rep, ncons, &
119 INTEGER,
DIMENSION(:),
POINTER :: ilist, tmplist
121 REAL(kind=
dp),
DIMENSION(:),
POINTER :: rlist
123 TYPE(section_vals_type),
POINTER :: collective_section, fix_atom_section, &
124 g3x3_section, g4x6_section, &
125 hbonds_section, vsite_section
128 IF (
ASSOCIATED(constraint_section))
THEN
137 CALL check_restraint(hbonds_section, &
138 is_restraint=cons_info%hbonds_restraint, &
139 k0=cons_info%hbonds_k0, &
145 cons_info%nconst_g33 = ncons
147 ALLOCATE (cons_info%const_g33_mol(ncons))
148 ALLOCATE (cons_info%const_g33_molname(ncons))
149 ALLOCATE (cons_info%const_g33_a(ncons))
150 ALLOCATE (cons_info%const_g33_b(ncons))
151 ALLOCATE (cons_info%const_g33_c(ncons))
152 ALLOCATE (cons_info%const_g33_dab(ncons))
153 ALLOCATE (cons_info%const_g33_dac(ncons))
154 ALLOCATE (cons_info%const_g33_dbc(ncons))
155 ALLOCATE (cons_info%g33_intermolecular(ncons))
156 ALLOCATE (cons_info%g33_restraint(ncons))
157 ALLOCATE (cons_info%g33_k0(ncons))
158 ALLOCATE (cons_info%g33_exclude_qm(ncons))
159 ALLOCATE (cons_info%g33_exclude_mm(ncons))
161 CALL check_restraint(g3x3_section, &
162 is_restraint=cons_info%g33_restraint(ig), &
163 k0=cons_info%g33_k0(ig), &
166 cons_info%const_g33_mol(ig) = 0
167 cons_info%const_g33_molname(ig) =
"UNDEF"
170 l_val=cons_info%g33_exclude_qm(ig))
172 l_val=cons_info%g33_exclude_mm(ig))
175 l_val=cons_info%g33_intermolecular(ig))
178 IF (cons_info%g33_intermolecular(ig))
THEN
187 i_val=cons_info%const_g33_mol(ig))
193 c_val=cons_info%const_g33_molname(ig))
195 IF ((cons_info%const_g33_mol(ig) /= 0) .AND. (cons_info%const_g33_molname(ig) /=
"UNDEF"))
THEN
198 IF ((cons_info%const_g33_mol(ig) == 0) .AND. (cons_info%const_g33_molname(ig) ==
"UNDEF") .AND. &
199 (.NOT. cons_info%g33_intermolecular(ig)))
THEN
206 cons_info%const_g33_a(ig) = ilist(1)
207 cons_info%const_g33_b(ig) = ilist(2)
208 cons_info%const_g33_c(ig) = ilist(3)
210 cons_info%const_g33_dab(ig) = rlist(1)
211 cons_info%const_g33_dac(ig) = rlist(2)
212 cons_info%const_g33_dbc(ig) = rlist(3)
219 cons_info%nconst_g46 = ncons
221 ALLOCATE (cons_info%const_g46_mol(ncons))
222 ALLOCATE (cons_info%const_g46_molname(ncons))
223 ALLOCATE (cons_info%const_g46_a(ncons))
224 ALLOCATE (cons_info%const_g46_b(ncons))
225 ALLOCATE (cons_info%const_g46_c(ncons))
226 ALLOCATE (cons_info%const_g46_d(ncons))
227 ALLOCATE (cons_info%const_g46_dab(ncons))
228 ALLOCATE (cons_info%const_g46_dac(ncons))
229 ALLOCATE (cons_info%const_g46_dbc(ncons))
230 ALLOCATE (cons_info%const_g46_dad(ncons))
231 ALLOCATE (cons_info%const_g46_dbd(ncons))
232 ALLOCATE (cons_info%const_g46_dcd(ncons))
233 ALLOCATE (cons_info%g46_intermolecular(ncons))
234 ALLOCATE (cons_info%g46_restraint(ncons))
235 ALLOCATE (cons_info%g46_k0(ncons))
236 ALLOCATE (cons_info%g46_exclude_qm(ncons))
237 ALLOCATE (cons_info%g46_exclude_mm(ncons))
239 CALL check_restraint(g4x6_section, &
240 is_restraint=cons_info%g46_restraint(ig), &
241 k0=cons_info%g46_k0(ig), &
244 cons_info%const_g46_mol(ig) = 0
245 cons_info%const_g46_molname(ig) =
"UNDEF"
248 l_val=cons_info%g46_exclude_qm(ig))
250 l_val=cons_info%g46_exclude_mm(ig))
253 l_val=cons_info%g46_intermolecular(ig))
256 IF (cons_info%g46_intermolecular(ig))
THEN
265 i_val=cons_info%const_g46_mol(ig))
271 c_val=cons_info%const_g46_molname(ig))
273 IF ((cons_info%const_g46_mol(ig) /= 0) .AND. (cons_info%const_g46_molname(ig) /=
"UNDEF"))
THEN
276 IF ((cons_info%const_g46_mol(ig) == 0) .AND. (cons_info%const_g46_molname(ig) ==
"UNDEF") .AND. &
277 (.NOT. cons_info%g46_intermolecular(ig)))
THEN
284 cons_info%const_g46_a(ig) = ilist(1)
285 cons_info%const_g46_b(ig) = ilist(2)
286 cons_info%const_g46_c(ig) = ilist(3)
287 cons_info%const_g46_d(ig) = ilist(4)
288 cons_info%const_g46_dab(ig) = rlist(1)
289 cons_info%const_g46_dac(ig) = rlist(2)
290 cons_info%const_g46_dad(ig) = rlist(3)
291 cons_info%const_g46_dbc(ig) = rlist(4)
292 cons_info%const_g46_dbd(ig) = rlist(5)
293 cons_info%const_g46_dcd(ig) = rlist(6)
300 cons_info%nconst_vsite = ncons
302 ALLOCATE (cons_info%const_vsite_mol(ncons))
303 ALLOCATE (cons_info%const_vsite_molname(ncons))
304 ALLOCATE (cons_info%const_vsite_a(ncons))
305 ALLOCATE (cons_info%const_vsite_b(ncons))
306 ALLOCATE (cons_info%const_vsite_c(ncons))
307 ALLOCATE (cons_info%const_vsite_d(ncons))
308 ALLOCATE (cons_info%const_vsite_wbc(ncons))
309 ALLOCATE (cons_info%const_vsite_wdc(ncons))
310 ALLOCATE (cons_info%vsite_intermolecular(ncons))
311 ALLOCATE (cons_info%vsite_restraint(ncons))
312 ALLOCATE (cons_info%vsite_k0(ncons))
313 ALLOCATE (cons_info%vsite_exclude_qm(ncons))
314 ALLOCATE (cons_info%vsite_exclude_mm(ncons))
316 CALL check_restraint(vsite_section, &
317 is_restraint=cons_info%vsite_restraint(ig), &
318 k0=cons_info%vsite_k0(ig), &
320 label=
"Virtual_SITE")
321 cons_info%const_vsite_mol(ig) = 0
322 cons_info%const_vsite_molname(ig) =
"UNDEF"
325 l_val=cons_info%vsite_exclude_qm(ig))
327 l_val=cons_info%vsite_exclude_mm(ig))
330 l_val=cons_info%vsite_intermolecular(ig))
333 IF (cons_info%vsite_intermolecular(ig))
THEN
342 i_val=cons_info%const_vsite_mol(ig))
348 c_val=cons_info%const_vsite_molname(ig))
350 IF ((cons_info%const_vsite_mol(ig) /= 0) .AND. (cons_info%const_vsite_molname(ig) /=
"UNDEF"))
THEN
353 IF ((cons_info%const_vsite_mol(ig) == 0) .AND. (cons_info%const_vsite_molname(ig) ==
"UNDEF") .AND. &
354 (.NOT. cons_info%vsite_intermolecular(ig)))
THEN
361 cons_info%const_vsite_a(ig) = ilist(1)
362 cons_info%const_vsite_b(ig) = ilist(2)
363 cons_info%const_vsite_c(ig) = ilist(3)
364 cons_info%const_vsite_d(ig) = ilist(4)
365 cons_info%const_vsite_wbc(ig) = rlist(1)
366 cons_info%const_vsite_wdc(ig) = rlist(2)
370 CALL section_vals_get(fix_atom_section, explicit=explicit, n_repetition=ncons)
372 NULLIFY (tmplist, tmpstringlist)
375 ALLOCATE (cons_info%fixed_atoms(isize))
376 ALLOCATE (cons_info%fixed_type(isize))
377 ALLOCATE (cons_info%fixed_restraint(isize))
378 ALLOCATE (cons_info%fixed_k0(isize))
379 ALLOCATE (cons_info%fixed_molnames(msize))
380 ALLOCATE (cons_info%fixed_mol_type(isize))
381 ALLOCATE (cons_info%fixed_mol_restraint(msize))
382 ALLOCATE (cons_info%fixed_mol_k0(msize))
383 ALLOCATE (cons_info%fixed_exclude_qm(ncons))
384 ALLOCATE (cons_info%fixed_exclude_mm(ncons))
394 i_rep_val=jg, i_vals=tmplist)
395 CALL reallocate(cons_info%fixed_atoms, 1, isize +
SIZE(tmplist))
396 cons_info%fixed_atoms(isize + 1:isize +
SIZE(tmplist)) = tmplist
397 CALL reallocate(cons_info%fixed_restraint, 1, isize +
SIZE(tmplist))
398 CALL reallocate(cons_info%fixed_k0, 1, isize +
SIZE(tmplist))
399 CALL reallocate(cons_info%fixed_type, 1, isize +
SIZE(tmplist))
400 cons_info%fixed_type(isize + 1:isize +
SIZE(tmplist)) = itype
401 isize =
SIZE(cons_info%fixed_atoms)
404 IF ((isize - isize_old) > 0)
THEN
405 CALL check_restraint(fix_atom_section, &
406 is_restraint=cons_info%fixed_restraint(isize_old + 1), &
407 k0=cons_info%fixed_k0(isize_old + 1), &
410 cons_info%fixed_restraint(isize_old + 1:isize) = cons_info%fixed_restraint(isize_old + 1)
411 cons_info%fixed_k0(isize_old + 1:isize) = cons_info%fixed_k0(isize_old + 1)
418 i_rep_val=jg, c_vals=tmpstringlist)
419 CALL reallocate(cons_info%fixed_molnames, 1, msize +
SIZE(tmpstringlist, 1))
420 CALL reallocate(cons_info%fixed_mol_type, 1, msize +
SIZE(tmpstringlist, 1))
421 CALL reallocate(cons_info%fixed_mol_restraint, 1, msize +
SIZE(tmpstringlist, 1))
422 CALL reallocate(cons_info%fixed_mol_k0, 1, msize +
SIZE(tmpstringlist, 1))
423 cons_info%fixed_molnames(msize + 1:msize +
SIZE(tmpstringlist, 1)) = tmpstringlist
424 cons_info%fixed_mol_type(msize + 1:msize +
SIZE(tmpstringlist, 1)) = itype
425 msize =
SIZE(cons_info%fixed_molnames)
428 CALL reallocate(cons_info%fixed_exclude_qm, 1, msize)
429 CALL reallocate(cons_info%fixed_exclude_mm, 1, msize)
431 l_val=cons_info%fixed_exclude_qm(msize_old + 1))
433 l_val=cons_info%fixed_exclude_mm(msize_old + 1))
434 cons_info%fixed_exclude_qm(msize_old + 1:msize) = cons_info%fixed_exclude_qm(msize_old + 1)
435 cons_info%fixed_exclude_mm(msize_old + 1:msize) = cons_info%fixed_exclude_mm(msize_old + 1)
439 CALL check_restraint(fix_atom_section, &
440 is_restraint=cons_info%fixed_mol_restraint(msize_old + 1), &
441 k0=cons_info%fixed_mol_k0(msize_old + 1), &
444 cons_info%fixed_mol_restraint(msize_old + 1:msize) = cons_info%fixed_mol_restraint(msize_old + 1)
445 cons_info%fixed_mol_k0(msize_old + 1:msize) = cons_info%fixed_mol_k0(msize_old + 1)
448 n_rep_val=nrep, explicit=explicit)
449 IF (nrep == 1 .AND. explicit)
THEN
453 cons_info%freeze_mm_type = itype
456 n_rep_val=nrep, explicit=explicit)
457 IF (nrep == 1 .AND. explicit)
THEN
461 cons_info%freeze_qm_type = itype
464 CALL check_restraint(fix_atom_section, &
465 is_restraint=cons_info%fixed_mm_restraint, &
466 k0=cons_info%fixed_mm_k0, &
471 CALL check_restraint(fix_atom_section, &
472 is_restraint=cons_info%fixed_qm_restraint, &
473 k0=cons_info%fixed_qm_k0, &
479 IF ((isize /= 0) .OR. (msize /= 0) .OR. &
486 CALL section_vals_get(collective_section, explicit=explicit, n_repetition=ncons)
491 cpassert(icolvar <=
SIZE(colvar_p))
493 cons_info%nconst_colv = ncons
494 ALLOCATE (cons_info%const_colv_mol(ncons))
495 ALLOCATE (cons_info%const_colv_molname(ncons))
496 ALLOCATE (cons_info%const_colv_target(ncons))
497 ALLOCATE (cons_info%const_colv_target_growth(ncons))
498 ALLOCATE (cons_info%colvar_set(ncons))
499 ALLOCATE (cons_info%colv_intermolecular(ncons))
500 ALLOCATE (cons_info%colv_restraint(ncons))
501 ALLOCATE (cons_info%colv_k0(ncons))
502 ALLOCATE (cons_info%colv_exclude_qm(ncons))
503 ALLOCATE (cons_info%colv_exclude_mm(ncons))
505 CALL check_restraint(collective_section, &
506 is_restraint=cons_info%colv_restraint(ig), &
507 k0=cons_info%colv_k0(ig), &
510 cons_info%const_colv_mol(ig) = 0
511 cons_info%const_colv_molname(ig) =
"UNDEF"
514 l_val=cons_info%colv_exclude_qm(ig))
516 l_val=cons_info%colv_exclude_mm(ig))
519 l_val=cons_info%colv_intermolecular(ig))
522 IF (cons_info%colv_intermolecular(ig))
THEN
531 i_val=cons_info%const_colv_mol(ig))
537 c_val=cons_info%const_colv_molname(ig))
539 IF (((cons_info%const_colv_mol(ig) /= 0) .AND. (cons_info%const_colv_molname(ig) /=
"UNDEF")))
THEN
540 cpabort(
"Both MOLNAME and MOLECULE specified for CONSTRAINT section. ")
542 IF ((cons_info%const_colv_mol(ig) == 0) .AND. (cons_info%const_colv_molname(ig) ==
"UNDEF") .AND. &
543 (.NOT. cons_info%colv_intermolecular(ig)))
THEN
544 CALL cp_abort(__location__, &
545 "Constraint section error: you have to specify at least one of the "// &
546 "following keywords: MOLECULE, MOLNAME or INTERMOLECULAR! ")
548 NULLIFY (cons_info%colvar_set(ig)%colvar)
552 colvar_p(icolvar)%colvar)
554 n_rep_val=n_rep, i_rep_section=ig)
557 r_val=cons_info%const_colv_target(ig), i_rep_section=ig)
559 cons_info%const_colv_target(ig) = -huge(0.0_dp)
562 r_val=cons_info%const_colv_target_growth(ig), i_rep_section=ig)
578 SUBROUTINE check_restraint(cons_section, is_restraint, k0, i_rep_section, label)
579 TYPE(section_vals_type),
POINTER :: cons_section
580 LOGICAL,
INTENT(OUT) :: is_restraint
581 REAL(kind=
dp),
INTENT(OUT) :: k0
582 INTEGER,
INTENT(IN),
OPTIONAL :: i_rep_section
583 CHARACTER(LEN=*),
INTENT(IN) :: label
585 CHARACTER(LEN=default_string_length) :: nlabel
586 INTEGER :: output_unit
588 TYPE(section_vals_type),
POINTER :: restraint_section
590 is_restraint = .false.
595 i_rep_section=i_rep_section)
597 IF (is_restraint)
THEN
599 IF (output_unit > 0)
THEN
600 nlabel = cp_to_string(i_rep_section)
601 WRITE (output_unit, fmt=
'(T2,"RESTRAINT|",1X,A,F9.6)') &
602 "Active restraint on "//label//
" section Nr."// &
603 trim(nlabel)//
". K [a.u.]=", k0
607 END SUBROUTINE check_restraint
Initialize the collective variables types.
recursive subroutine, public colvar_clone(colvar_out, colvar_in, i_atom_offset)
Clone a colvar type.
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
Utility routines for the memory handling.
Control for reading in different topologies and coordinates.