22 #include "../base/base_uses.f90"
28 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'colvar_types'
42 PUBLIC :: colvar_type, &
91 INTEGER :: i_at = 0, j_at = 0, axis_id = 0
92 LOGICAL :: sign_d = .false.
93 END TYPE dist_colvar_type
96 TYPE coord_colvar_type
97 LOGICAL :: do_chain = .false., use_kinds_from = .false., use_kinds_to = .false., &
98 use_kinds_to_b = .false.
99 INTEGER :: n_atoms_to = 0, &
106 INTEGER,
POINTER,
DIMENSION(:) :: i_at_from => null(), &
109 CHARACTER(LEN=default_string_length),
DIMENSION(:),
POINTER :: c_kinds_from => null(), &
110 c_kinds_to => null(), &
111 c_kinds_to_b => null()
112 REAL(kind=
dp) :: r_0 = 0.0_dp, r_0_b = 0.0_dp
113 END TYPE coord_colvar_type
116 TYPE population_colvar_type
117 LOGICAL :: use_kinds_from = .false., use_kinds_to = .false.
118 INTEGER :: n_atoms_to = 0, &
123 INTEGER,
POINTER,
DIMENSION(:) :: i_at_from => null(), &
125 CHARACTER(LEN=default_string_length),
DIMENSION(:),
POINTER :: c_kinds_from => null(), &
127 REAL(kind=
dp) :: r_0 = 0.0_dp, sigma = 0.0_dp
128 END TYPE population_colvar_type
131 TYPE gyration_colvar_type
132 LOGICAL :: use_kinds = .false.
133 INTEGER :: n_atoms = 0
134 INTEGER,
POINTER,
DIMENSION(:) :: i_at => null()
135 CHARACTER(LEN=default_string_length),
DIMENSION(:),
POINTER :: c_kinds => null()
136 END TYPE gyration_colvar_type
139 TYPE torsion_colvar_type
140 REAL(kind=
dp) :: o0 = 0.0_dp
141 INTEGER,
DIMENSION(4) :: i_at_tors = 0
142 END TYPE torsion_colvar_type
145 TYPE plane_distance_colvar_type
146 LOGICAL :: use_pbc = .false.
147 INTEGER,
DIMENSION(3) :: plane = -1
148 INTEGER :: point = -1
149 END TYPE plane_distance_colvar_type
153 INTEGER :: type_of_def = -1
154 INTEGER,
DIMENSION(3) :: points = 0
155 REAL(kind=
dp),
DIMENSION(3) :: normal_vec = 0.0_dp
156 END TYPE plane_def_type
158 TYPE plane_plane_angle_colvar_type
159 TYPE(plane_def_type) :: plane1 = plane_def_type(), plane2 = plane_def_type()
160 END TYPE plane_plane_angle_colvar_type
163 TYPE angle_colvar_type
164 INTEGER,
DIMENSION(3) :: i_at_angle = 0
165 END TYPE angle_colvar_type
168 TYPE rotation_colvar_type
169 INTEGER :: i_at1_bond1 = 0, &
173 END TYPE rotation_colvar_type
176 TYPE dfunct_colvar_type
177 INTEGER,
DIMENSION(4) :: i_at_dfunct = 0
178 LOGICAL :: use_pbc = .false.
179 REAL(kind=
dp) :: coeff = 0.0_dp
180 END TYPE dfunct_colvar_type
183 TYPE qparm_colvar_type
185 INTEGER :: n_atoms_to = 0, &
187 INTEGER,
POINTER,
DIMENSION(:) :: i_at_from => null(), &
189 REAL(kind=
dp) :: rcut = 0.0_dp, rstart = 0.0_dp
190 LOGICAL :: include_images = .false.
191 END TYPE qparm_colvar_type
194 TYPE hydronium_shell_colvar_type
195 INTEGER :: n_oxygens = -1, &
197 poh = -1, qoh = -1, poo = -1, qoo = -1, &
199 INTEGER,
POINTER,
DIMENSION(:) :: i_oxygens => null(), &
200 i_hydrogens => null()
201 REAL(kind=
dp) :: roo = 0.0_dp, roh = 0.0_dp, lambda = 0.0_dp, nh = 0.0_dp
202 END TYPE hydronium_shell_colvar_type
205 TYPE hydronium_dist_colvar_type
206 INTEGER :: n_oxygens = -1, &
208 poh = -1, qoh = -1, &
209 pf = -1, qf = -1, pm = -1, qm = -1
210 INTEGER,
POINTER,
DIMENSION(:) :: i_oxygens => null(), &
211 i_hydrogens => null()
212 REAL(kind=
dp) :: roh = 0.0_dp, lambda = 0.0_dp, nh = 0.0_dp, nn = 0.0_dp
213 END TYPE hydronium_dist_colvar_type
216 TYPE acid_hyd_dist_colvar_type
217 INTEGER :: n_oxygens_water = -1, &
218 n_oxygens_acid = -1, &
220 pwoh = -1, qwoh = -1, paoh = -1, qaoh = -1, pcut = -1, qcut = -1
221 INTEGER,
POINTER,
DIMENSION(:) :: i_oxygens_water => null(), i_oxygens_acid => null(), &
222 i_hydrogens => null()
223 REAL(kind=
dp) :: rwoh = 0.0_dp, raoh = 0.0_dp, lambda = 0.0_dp, nc = 0.0_dp
224 END TYPE acid_hyd_dist_colvar_type
227 TYPE acid_hyd_shell_colvar_type
228 INTEGER :: n_oxygens_water = -1, &
229 n_oxygens_acid = -1, &
231 pwoh = -1, qwoh = -1, paoh = -1, qaoh = -1, &
232 poo = -1, qoo = -1, pcut = -1, qcut = -1, pm = -1, qm = -1
233 INTEGER,
POINTER,
DIMENSION(:) :: i_oxygens_water => null(), i_oxygens_acid => null(), &
234 i_hydrogens => null()
235 REAL(kind=
dp) :: rwoh = 0.0_dp, raoh = 0.0_dp, roo = 0.0_dp, lambda = 0.0_dp, nc = 0.0_dp, nh = 0.0_dp
236 END TYPE acid_hyd_shell_colvar_type
239 TYPE reaction_path_colvar_type
240 INTEGER :: type_id = -1
241 INTEGER :: n_components = -1, nr_frames = -1, subset = -1
242 INTEGER,
DIMENSION(2) :: function_bounds = -1
243 INTEGER,
POINTER,
DIMENSION(:) :: i_rmsd => null()
244 LOGICAL :: align_frames = .false., dist_rmsd = .false.,
rmsd = .false.
245 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: f_vals => null()
246 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: r_ref => null()
247 REAL(kind=
dp) :: lambda = 0.0_dp
248 REAL(kind=
dp) :: step_size = 0.0_dp
249 TYPE(colvar_p_type),
POINTER,
DIMENSION(:) :: colvar_p => null()
250 END TYPE reaction_path_colvar_type
253 TYPE combine_colvar_type
254 INTEGER :: type_id = -1
255 TYPE(colvar_p_type),
POINTER,
DIMENSION(:) :: colvar_p => null()
256 REAL(kind=
dp) :: lerr = 0.0_dp, dx = 0.0_dp
257 CHARACTER(LEN=default_path_length) :: function =
""
258 CHARACTER(LEN=default_string_length), &
259 DIMENSION(:),
POINTER :: c_parameters => null(), variables => null()
260 REAL(kind=
dp),
DIMENSION(:),
POINTER :: v_parameters => null()
261 END TYPE combine_colvar_type
263 TYPE rmsd_colvar_type
264 INTEGER :: n_atoms = 0, nr_frames = 0, subset = 0
265 INTEGER,
POINTER,
DIMENSION(:) :: i_rmsd => null()
266 LOGICAL :: align_frames = .false.
267 REAL(kind=
dp),
DIMENSION(:),
POINTER :: weights => null()
268 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: r_ref => null()
269 END TYPE rmsd_colvar_type
273 INTEGER :: type_id = -1
274 INTEGER,
DIMENSION(:),
POINTER :: atoms => null()
275 REAL(kind=
dp),
DIMENSION(:),
POINTER :: weights => null()
276 REAL(kind=
dp),
DIMENSION(3) :: r = 0.0_dp
280 TYPE xyz_diag_colvar_type
281 LOGICAL :: use_pbc = .false.
282 LOGICAL :: use_absolute_position = .false.
283 INTEGER :: i_atom = 0
284 INTEGER :: component = 0
285 REAL(kind=
dp),
DIMENSION(3) :: r0 = 0.0_dp
286 END TYPE xyz_diag_colvar_type
289 TYPE xyz_outerdiag_colvar_type
290 LOGICAL :: use_pbc = .false.
291 INTEGER,
DIMENSION(2) :: i_atoms = 0
292 INTEGER,
DIMENSION(2) :: components = 0
293 REAL(kind=
dp),
DIMENSION(3, 2) :: r0 = 0.0_dp
294 END TYPE xyz_outerdiag_colvar_type
298 TYPE(section_vals_type),
POINTER :: mixed_energy_section => null()
299 INTEGER :: natom = -1
300 END TYPE u_colvar_type
304 INTEGER :: ids(3) = -1
305 REAL(kind=
dp) :: ewc = 0.0_dp
306 REAL(kind=
dp) :: rcut = 0.0_dp
307 END TYPE wc_colvar_type
311 INTEGER :: npoints = -1
312 INTEGER,
POINTER :: ids(:, :) => null()
314 REAL(kind=
dp),
POINTER :: ewc(:) => null()
315 REAL(kind=
dp) :: rcut = 0.0_dp
316 REAL(kind=
dp) :: shift = 0.0_dp
317 END TYPE hbp_colvar_type
320 TYPE ring_puckering_colvar_type
321 INTEGER :: nring = -1
322 INTEGER,
POINTER,
DIMENSION(:) :: atoms => null()
324 END TYPE ring_puckering_colvar_type
327 TYPE mindist_colvar_type
328 LOGICAL :: use_kinds_from = .false., use_kinds_to = .false.
329 INTEGER :: n_coord_to = 0, &
334 INTEGER,
POINTER,
DIMENSION(:) :: i_coord_from => null(), &
335 i_coord_to => null(), &
336 i_dist_from => null()
337 CHARACTER(LEN=default_string_length),
DIMENSION(:),
POINTER :: k_coord_from => null(), &
339 REAL(kind=
dp) :: lambda = 0.0_dp, r_cut = 0.0_dp
340 END TYPE mindist_colvar_type
347 INTEGER :: type_id = -1
348 LOGICAL :: use_points = .false.
349 REAL(kind=
dp) :: ss = 0.0_dp
350 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: dsdr => null()
351 INTEGER,
DIMENSION(:),
POINTER :: i_atom => null()
352 INTEGER :: n_atom_s = -1
354 TYPE(dist_colvar_type),
POINTER :: dist_param => null()
355 TYPE(coord_colvar_type),
POINTER :: coord_param => null()
356 TYPE(population_colvar_type),
POINTER :: population_param => null()
357 TYPE(gyration_colvar_type),
POINTER :: gyration_param => null()
358 TYPE(torsion_colvar_type),
POINTER :: torsion_param => null()
359 TYPE(angle_colvar_type),
POINTER :: angle_param => null()
360 TYPE(plane_distance_colvar_type),
POINTER :: plane_distance_param => null()
361 TYPE(plane_plane_angle_colvar_type),
POINTER :: plane_plane_angle_param => null()
362 TYPE(rotation_colvar_type),
POINTER :: rotation_param => null()
363 TYPE(dfunct_colvar_type),
POINTER :: dfunct_param => null()
364 TYPE(qparm_colvar_type),
POINTER :: qparm_param => null()
365 TYPE(hydronium_shell_colvar_type),
POINTER :: hydronium_shell_param => null()
366 TYPE(hydronium_dist_colvar_type),
POINTER :: hydronium_dist_param => null()
367 TYPE(acid_hyd_dist_colvar_type),
POINTER :: acid_hyd_dist_param => null()
368 TYPE(acid_hyd_shell_colvar_type),
POINTER :: acid_hyd_shell_param => null()
369 TYPE(reaction_path_colvar_type),
POINTER :: reaction_path_param => null()
370 TYPE(combine_colvar_type),
POINTER :: combine_cvs_param => null()
371 TYPE(rmsd_colvar_type),
POINTER :: rmsd_param => null()
372 TYPE(xyz_diag_colvar_type),
POINTER :: xyz_diag_param => null()
373 TYPE(xyz_outerdiag_colvar_type),
POINTER :: xyz_outerdiag_param => null()
374 TYPE(u_colvar_type),
POINTER :: u_param => null()
375 TYPE(point_type),
DIMENSION(:),
POINTER :: points => null()
376 TYPE(wc_colvar_type),
POINTER :: wc => null()
377 TYPE(hbp_colvar_type),
POINTER :: hbp => null()
378 TYPE(ring_puckering_colvar_type),
POINTER :: ring_puckering_param => null()
379 TYPE(mindist_colvar_type),
POINTER :: mindist_param => null()
384 TYPE(colvar_type),
POINTER :: colvar => null()
385 END TYPE colvar_p_type
390 INTEGER :: nangle = 0
391 INTEGER :: ntorsion = 0
392 INTEGER :: ncoord = 0
393 INTEGER :: nplane_dist = 0
394 INTEGER :: nplane_angle = 0
396 INTEGER :: ndfunct = 0
397 INTEGER :: nqparm = 0
398 INTEGER :: nhydronium_shell = 0
399 INTEGER :: nhydronium_dist = 0
400 INTEGER :: nacid_hyd_dist = 0
401 INTEGER :: nacid_hyd_shell = 0
402 INTEGER :: nreactionpath = 0
403 INTEGER :: ncombinecvs = 0
404 INTEGER :: nrestraint = 0
405 INTEGER :: npopulation = 0
406 INTEGER :: ngyration = 0
407 INTEGER :: nxyz_diag = 0
408 INTEGER :: nxyz_outerdiag = 0
410 END TYPE colvar_counters
421 TYPE(colvar_type),
POINTER :: colvar
422 INTEGER,
INTENT(in) :: colvar_id
424 cpassert(.NOT.
ASSOCIATED(colvar))
426 colvar%type_id = colvar_id
427 colvar%use_points = .false.
428 SELECT CASE (colvar_id)
430 ALLOCATE (colvar%dist_param)
432 colvar%dist_param%sign_d = .false.
434 ALLOCATE (colvar%coord_param)
436 ALLOCATE (colvar%population_param)
438 ALLOCATE (colvar%gyration_param)
440 ALLOCATE (colvar%angle_param)
442 ALLOCATE (colvar%torsion_param)
444 ALLOCATE (colvar%plane_distance_param)
446 ALLOCATE (colvar%plane_plane_angle_param)
448 ALLOCATE (colvar%rotation_param)
450 ALLOCATE (colvar%dfunct_param)
452 ALLOCATE (colvar%qparm_param)
454 ALLOCATE (colvar%xyz_diag_param)
456 colvar%xyz_diag_param%r0 = huge(0.0_dp)
458 ALLOCATE (colvar%xyz_outerdiag_param)
460 colvar%xyz_outerdiag_param%r0 = huge(0.0_dp)
462 ALLOCATE (colvar%u_param)
463 NULLIFY (colvar%u_param%mixed_energy_section)
465 ALLOCATE (colvar%hydronium_shell_param)
467 ALLOCATE (colvar%hydronium_dist_param)
469 ALLOCATE (colvar%acid_hyd_dist_param)
471 ALLOCATE (colvar%acid_hyd_shell_param)
473 ALLOCATE (colvar%reaction_path_param)
475 ALLOCATE (colvar%reaction_path_param)
477 ALLOCATE (colvar%combine_cvs_param)
479 ALLOCATE (colvar%rmsd_param)
483 ALLOCATE (colvar%HBP)
485 ALLOCATE (colvar%ring_puckering_param)
487 ALLOCATE (colvar%mindist_param)
502 TYPE(colvar_type),
INTENT(INOUT) :: colvar
504 INTEGER :: i, idum, iend, ii, istart, j, np, stat
505 INTEGER,
DIMENSION(:),
POINTER ::
list
507 SELECT CASE (colvar%type_id)
510 i = colvar%dist_param%i_at
511 j = colvar%dist_param%j_at
513 colvar%n_atom_s = colv_size(colvar, i) + &
517 list(1) = colvar%dist_param%i_at
518 list(2) = colvar%dist_param%j_at
520 np = colvar%coord_param%n_atoms_from + colvar%coord_param%n_atoms_to &
521 + colvar%coord_param%n_atoms_to_b
524 DO ii = 1, colvar%coord_param%n_atoms_from
525 i = colvar%coord_param%i_at_from(ii)
526 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
528 DO ii = 1, colvar%coord_param%n_atoms_to
529 i = colvar%coord_param%i_at_to(ii)
530 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
532 IF (colvar%coord_param%n_atoms_to_b /= 0)
THEN
533 DO ii = 1, colvar%coord_param%n_atoms_to_b
534 i = colvar%coord_param%i_at_to_b(ii)
535 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
541 DO ii = 1, colvar%coord_param%n_atoms_from
543 i = colvar%coord_param%i_at_from(ii)
546 DO ii = 1, colvar%coord_param%n_atoms_to
548 i = colvar%coord_param%i_at_to(ii)
551 IF (colvar%coord_param%n_atoms_to_b /= 0)
THEN
552 DO ii = 1, colvar%coord_param%n_atoms_to_b
554 i = colvar%coord_param%i_at_to_b(ii)
560 np = colvar%population_param%n_atoms_from + colvar%population_param%n_atoms_to
563 DO ii = 1, colvar%population_param%n_atoms_from
564 i = colvar%population_param%i_at_from(ii)
565 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
567 DO ii = 1, colvar%population_param%n_atoms_to
568 i = colvar%population_param%i_at_to(ii)
569 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
574 DO ii = 1, colvar%population_param%n_atoms_from
576 i = colvar%population_param%i_at_from(ii)
579 DO ii = 1, colvar%population_param%n_atoms_to
581 i = colvar%population_param%i_at_to(ii)
586 np = colvar%gyration_param%n_atoms
589 DO ii = 1, colvar%gyration_param%n_atoms
590 i = colvar%gyration_param%i_at(ii)
591 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
596 DO ii = 1, colvar%gyration_param%n_atoms
598 i = colvar%gyration_param%i_at(ii)
607 i = colvar%angle_param%i_at_angle(ii)
608 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
615 i = colvar%angle_param%i_at_angle(ii)
624 i = colvar%torsion_param%i_at_tors(ii)
625 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
632 i = colvar%torsion_param%i_at_tors(ii)
641 i = colvar%plane_distance_param%plane(ii)
642 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
644 i = colvar%plane_distance_param%point
645 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
651 i = colvar%plane_distance_param%plane(ii)
654 i = colvar%plane_distance_param%point
660 IF (colvar%plane_plane_angle_param%plane1%type_of_def ==
plane_def_atoms) np = np + 3
661 IF (colvar%plane_plane_angle_param%plane2%type_of_def ==
plane_def_atoms) np = np + 3
664 CALL cp_abort(__location__, &
665 "PLANE_PLANE_ANGLE Colvar defined using two normal vectors! This is "// &
666 "not a COLLECTIVE VARIABLE! One of the two planes must be defined "// &
667 "using atomic positions.")
671 IF (colvar%plane_plane_angle_param%plane1%type_of_def ==
plane_def_atoms)
THEN
673 i = colvar%plane_plane_angle_param%plane1%points(ii)
674 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
677 IF (colvar%plane_plane_angle_param%plane2%type_of_def ==
plane_def_atoms)
THEN
679 i = colvar%plane_plane_angle_param%plane2%points(ii)
680 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
687 IF (colvar%plane_plane_angle_param%plane1%type_of_def ==
plane_def_atoms)
THEN
690 i = colvar%plane_plane_angle_param%plane1%points(ii)
694 IF (colvar%plane_plane_angle_param%plane2%type_of_def ==
plane_def_atoms)
THEN
697 i = colvar%plane_plane_angle_param%plane2%points(ii)
707 i = colvar%dfunct_param%i_at_dfunct(ii)
708 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
715 i = colvar%dfunct_param%i_at_dfunct(ii)
723 i = colvar%rotation_param%i_at1_bond1
724 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
725 i = colvar%rotation_param%i_at2_bond1
726 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
727 i = colvar%rotation_param%i_at1_bond2
728 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
729 i = colvar%rotation_param%i_at2_bond2
730 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
733 i = colvar%rotation_param%i_at1_bond1
735 i = colvar%rotation_param%i_at2_bond1
737 i = colvar%rotation_param%i_at1_bond2
739 i = colvar%rotation_param%i_at2_bond2
742 np = colvar%qparm_param%n_atoms_from + colvar%qparm_param%n_atoms_to
745 DO ii = 1, colvar%qparm_param%n_atoms_from
746 i = colvar%qparm_param%i_at_from(ii)
747 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
749 DO ii = 1, colvar%qparm_param%n_atoms_to
750 i = colvar%qparm_param%i_at_to(ii)
751 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
756 DO ii = 1, colvar%qparm_param%n_atoms_from
758 i = colvar%qparm_param%i_at_from(ii)
761 DO ii = 1, colvar%qparm_param%n_atoms_to
763 i = colvar%qparm_param%i_at_to(ii)
768 np = colvar%hydronium_shell_param%n_oxygens + colvar%hydronium_shell_param%n_hydrogens
772 np = colvar%hydronium_dist_param%n_oxygens + colvar%hydronium_dist_param%n_hydrogens
776 np = colvar%acid_hyd_dist_param%n_oxygens_water &
777 + colvar%acid_hyd_dist_param%n_oxygens_acid &
778 + colvar%acid_hyd_dist_param%n_hydrogens
782 np = colvar%acid_hyd_shell_param%n_oxygens_water &
783 + colvar%acid_hyd_shell_param%n_oxygens_acid &
784 + colvar%acid_hyd_shell_param%n_hydrogens
788 np = colvar%rmsd_param%n_atoms
791 DO ii = 1, colvar%rmsd_param%n_atoms
792 i = colvar%rmsd_param%i_rmsd(ii)
793 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
798 DO ii = 1, colvar%rmsd_param%n_atoms
800 i = colvar%rmsd_param%i_rmsd(ii)
805 IF (colvar%reaction_path_param%dist_rmsd .OR. colvar%reaction_path_param%rmsd)
THEN
806 colvar%n_atom_s = colvar%reaction_path_param%n_components
808 DO ii = 1,
SIZE(colvar%reaction_path_param%colvar_p)
809 colvar%n_atom_s = colvar%n_atom_s + colvar%reaction_path_param%colvar_p(ii)%colvar%n_atom_s
812 ALLOCATE (
list(colvar%n_atom_s))
814 IF (colvar%reaction_path_param%dist_rmsd .OR. colvar%reaction_path_param%rmsd)
THEN
815 DO ii = 1,
SIZE(colvar%reaction_path_param%i_rmsd)
817 i = colvar%reaction_path_param%i_rmsd(ii)
821 DO ii = 1,
SIZE(colvar%reaction_path_param%colvar_p)
822 DO j = 1, colvar%reaction_path_param%colvar_p(ii)%colvar%n_atom_s
824 list(idum) = colvar%reaction_path_param%colvar_p(ii)%colvar%i_atom(j)
832 i = colvar%xyz_diag_param%i_atom
833 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
836 i = colvar%xyz_diag_param%i_atom
842 i = colvar%xyz_outerdiag_param%i_atoms(1)
843 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
844 i = colvar%xyz_outerdiag_param%i_atoms(2)
845 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
848 i = colvar%xyz_outerdiag_param%i_atoms(1)
850 i = colvar%xyz_outerdiag_param%i_atoms(2)
853 np = 1;
ALLOCATE (
list(np), stat=stat)
855 colvar%n_atom_s = np;
list(1) = 1
861 i = colvar%Wc%ids(ii)
862 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
869 i = colvar%Wc%ids(ii)
874 np = 3*colvar%HBP%nPoints
877 DO j = 1, colvar%HBP%nPoints
879 i = colvar%HBP%ids(j, ii)
880 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
886 DO j = 1, colvar%HBP%nPoints
889 i = colvar%HBP%ids(j, ii)
895 np = colvar%ring_puckering_param%nring
898 DO ii = 1, colvar%ring_puckering_param%nring
899 i = colvar%ring_puckering_param%atoms(ii)
900 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
905 DO ii = 1, colvar%ring_puckering_param%nring
907 i = colvar%ring_puckering_param%atoms(ii)
912 np = colvar%mindist_param%n_dist_from + &
913 colvar%mindist_param%n_coord_from + colvar%mindist_param%n_coord_to
916 DO ii = 1, colvar%mindist_param%n_dist_from
917 i = colvar%mindist_param%i_dist_from(ii)
918 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
920 DO ii = 1, colvar%mindist_param%n_coord_from
921 i = colvar%mindist_param%i_coord_from(ii)
922 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
924 DO ii = 1, colvar%mindist_param%n_coord_to
925 i = colvar%mindist_param%i_coord_to(ii)
926 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
931 DO ii = 1, colvar%mindist_param%n_dist_from
933 i = colvar%mindist_param%i_dist_from(ii)
936 DO ii = 1, colvar%mindist_param%n_coord_from
938 i = colvar%mindist_param%i_coord_from(ii)
941 DO ii = 1, colvar%mindist_param%n_coord_to
943 i = colvar%mindist_param%i_coord_to(ii)
949 DO ii = 1,
SIZE(colvar%combine_cvs_param%colvar_p)
950 colvar%n_atom_s = colvar%n_atom_s + colvar%combine_cvs_param%colvar_p(ii)%colvar%n_atom_s
952 ALLOCATE (
list(colvar%n_atom_s))
954 DO ii = 1,
SIZE(colvar%combine_cvs_param%colvar_p)
955 DO j = 1, colvar%combine_cvs_param%colvar_p(ii)%colvar%n_atom_s
957 list(idum) = colvar%combine_cvs_param%colvar_p(ii)%colvar%i_atom(j)
962 IF (
ASSOCIATED(colvar%dsdr))
THEN
963 DEALLOCATE (colvar%dsdr)
965 IF (
ASSOCIATED(colvar%i_atom))
THEN
966 DEALLOCATE (colvar%i_atom)
968 ALLOCATE (colvar%dsdr(3, colvar%n_atom_s))
969 ALLOCATE (colvar%i_atom(colvar%n_atom_s))
974 IF (.NOT. colvar%use_points)
THEN
976 colvar%i_atom(i) =
list(i)
979 IF (
ASSOCIATED(colvar%points(
list(i))%atoms))
THEN
980 iend = istart +
SIZE(colvar%points(
list(i))%atoms)
981 colvar%i_atom(istart + 1:iend) = colvar%points(
list(i))%atoms
986 cpassert(iend == colvar%n_atom_s)
998 SUBROUTINE setup_hydronium_colvars(colvar, colvar_id, list)
999 TYPE(colvar_type),
INTENT(INOUT) :: colvar
1000 INTEGER,
INTENT(IN) :: colvar_id
1001 INTEGER,
DIMENSION(:),
INTENT(INOUT) ::
list
1003 INTEGER :: i, idum, ii, n_hydrogens, n_oxygens, np
1004 INTEGER,
DIMENSION(:),
POINTER :: i_hydrogens, i_oxygens
1006 NULLIFY (i_oxygens, i_hydrogens)
1008 SELECT CASE (colvar_id)
1010 n_oxygens = colvar%hydronium_shell_param%n_oxygens
1011 n_hydrogens = colvar%hydronium_shell_param%n_hydrogens
1012 i_oxygens => colvar%hydronium_shell_param%i_oxygens
1013 i_hydrogens => colvar%hydronium_shell_param%i_hydrogens
1015 n_oxygens = colvar%hydronium_dist_param%n_oxygens
1016 n_hydrogens = colvar%hydronium_dist_param%n_hydrogens
1017 i_oxygens => colvar%hydronium_dist_param%i_oxygens
1018 i_hydrogens => colvar%hydronium_dist_param%i_hydrogens
1021 np = n_oxygens + n_hydrogens
1024 DO ii = 1, n_oxygens
1026 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
1028 DO ii = 1, n_hydrogens
1030 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
1033 DO ii = 1, n_oxygens
1037 IF (any(i_hydrogens == i)) &
1038 cpabort(
"COLVAR: atoms doubled in OXYGENS and HYDROGENS list")
1040 DO ii = 1, n_hydrogens
1045 cpassert(idum == np)
1049 IF (i <= n_oxygens) &
1050 cpabort(
"atoms doubled in OXYGENS list")
1051 IF (i > n_oxygens) &
1052 cpabort(
"atoms doubled in HYDROGENS list")
1057 END SUBROUTINE setup_hydronium_colvars
1067 SUBROUTINE setup_acid_hydronium_colvars(colvar, colvar_id, list)
1068 TYPE(colvar_type),
INTENT(INOUT) :: colvar
1069 INTEGER,
INTENT(IN) :: colvar_id
1070 INTEGER,
DIMENSION(:),
INTENT(INOUT) ::
list
1072 INTEGER :: i, idum, ii, n_hydrogens, &
1073 n_oxygens_acid, n_oxygens_water, np
1074 INTEGER,
DIMENSION(:),
POINTER :: i_hydrogens, i_oxygens_acid, &
1077 NULLIFY (i_oxygens_water, i_oxygens_acid, i_hydrogens)
1079 SELECT CASE (colvar_id)
1081 n_oxygens_water = colvar%acid_hyd_dist_param%n_oxygens_water
1082 n_oxygens_acid = colvar%acid_hyd_dist_param%n_oxygens_acid
1083 n_hydrogens = colvar%acid_hyd_dist_param%n_hydrogens
1084 i_oxygens_water => colvar%acid_hyd_dist_param%i_oxygens_water
1085 i_oxygens_acid => colvar%acid_hyd_dist_param%i_oxygens_acid
1086 i_hydrogens => colvar%acid_hyd_dist_param%i_hydrogens
1088 n_oxygens_water = colvar%acid_hyd_shell_param%n_oxygens_water
1089 n_oxygens_acid = colvar%acid_hyd_shell_param%n_oxygens_acid
1090 n_hydrogens = colvar%acid_hyd_shell_param%n_hydrogens
1091 i_oxygens_water => colvar%acid_hyd_shell_param%i_oxygens_water
1092 i_oxygens_acid => colvar%acid_hyd_shell_param%i_oxygens_acid
1093 i_hydrogens => colvar%acid_hyd_shell_param%i_hydrogens
1096 np = n_oxygens_water + n_oxygens_acid + n_hydrogens
1099 DO ii = 1, n_oxygens_water
1100 i = i_oxygens_water(ii)
1101 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
1103 DO ii = 1, n_oxygens_acid
1104 i = i_oxygens_acid(ii)
1105 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
1107 DO ii = 1, n_hydrogens
1109 colvar%n_atom_s = colvar%n_atom_s + colv_size(colvar, i)
1112 DO ii = 1, n_oxygens_water
1114 i = i_oxygens_water(ii)
1116 IF (any(i_hydrogens == i)) &
1117 cpabort(
"COLVAR: atoms doubled in OXYGENS_WATER and HYDROGENS list")
1118 IF (any(i_oxygens_acid == i)) &
1119 cpabort(
"COLVAR: atoms doubled in OXYGENS_WATER and OXYGENS_ACID list")
1121 DO ii = 1, n_oxygens_acid
1123 i = i_oxygens_acid(ii)
1125 IF (any(i_hydrogens == i)) &
1126 cpabort(
"COLVAR: atoms doubled in OXYGENS_ACID and HYDROGENS list")
1128 DO ii = 1, n_hydrogens
1133 cpassert(idum == np)
1137 IF (i <= n_oxygens_water) &
1138 cpabort(
"atoms doubled in OXYGENS_WATER list")
1139 IF (i > n_oxygens_water .AND. i <= n_oxygens_water + n_oxygens_acid) &
1140 cpabort(
"atoms doubled in OXYGENS_ACID list")
1141 IF (i > n_oxygens_water + n_oxygens_acid) &
1142 cpabort(
"atoms doubled in HYDROGENS list")
1147 END SUBROUTINE setup_acid_hydronium_colvars
1156 FUNCTION colv_size(colvar, i)
RESULT(my_size)
1157 TYPE(colvar_type),
INTENT(IN) :: colvar
1158 INTEGER :: i, my_size
1161 IF (
ASSOCIATED(colvar%points))
THEN
1162 IF (
ASSOCIATED(colvar%points(i)%atoms))
THEN
1163 my_size =
SIZE(colvar%points(i)%atoms)
1168 END FUNCTION colv_size
1176 TYPE(colvar_type),
POINTER :: colvar
1180 cpassert(
ASSOCIATED(colvar))
1181 IF (
ASSOCIATED(colvar%dsdr))
THEN
1182 DEALLOCATE (colvar%dsdr)
1184 IF (
ASSOCIATED(colvar%i_atom))
THEN
1185 DEALLOCATE (colvar%i_atom)
1187 IF (
ASSOCIATED(colvar%points))
THEN
1188 DO i = 1,
SIZE(colvar%points)
1189 IF (
ASSOCIATED(colvar%points(i)%atoms))
THEN
1190 DEALLOCATE (colvar%points(i)%atoms)
1192 IF (
ASSOCIATED(colvar%points(i)%weights))
THEN
1193 DEALLOCATE (colvar%points(i)%weights)
1196 DEALLOCATE (colvar%points)
1198 SELECT CASE (colvar%type_id)
1200 DEALLOCATE (colvar%dist_param)
1202 IF (
ASSOCIATED(colvar%coord_param%i_at_from))
THEN
1203 DEALLOCATE (colvar%coord_param%i_at_from)
1205 IF (
ASSOCIATED(colvar%coord_param%i_at_to))
THEN
1206 DEALLOCATE (colvar%coord_param%i_at_to)
1208 IF (
ASSOCIATED(colvar%coord_param%c_kinds_from))
THEN
1209 DEALLOCATE (colvar%coord_param%c_kinds_from)
1211 IF (
ASSOCIATED(colvar%coord_param%c_kinds_to))
THEN
1212 DEALLOCATE (colvar%coord_param%c_kinds_to)
1214 IF (
ASSOCIATED(colvar%coord_param%i_at_to_b))
THEN
1215 DEALLOCATE (colvar%coord_param%i_at_to_b)
1217 IF (
ASSOCIATED(colvar%coord_param%c_kinds_to_b))
THEN
1218 DEALLOCATE (colvar%coord_param%c_kinds_to_b)
1220 DEALLOCATE (colvar%coord_param)
1222 IF (
ASSOCIATED(colvar%population_param%i_at_from))
THEN
1223 DEALLOCATE (colvar%population_param%i_at_from)
1225 IF (
ASSOCIATED(colvar%population_param%i_at_to))
THEN
1226 DEALLOCATE (colvar%population_param%i_at_to)
1228 IF (
ASSOCIATED(colvar%population_param%c_kinds_from))
THEN
1229 DEALLOCATE (colvar%population_param%c_kinds_from)
1231 IF (
ASSOCIATED(colvar%population_param%c_kinds_to))
THEN
1232 DEALLOCATE (colvar%population_param%c_kinds_to)
1234 DEALLOCATE (colvar%population_param)
1236 IF (
ASSOCIATED(colvar%gyration_param%i_at))
THEN
1237 DEALLOCATE (colvar%gyration_param%i_at)
1239 IF (
ASSOCIATED(colvar%gyration_param%c_kinds))
THEN
1240 DEALLOCATE (colvar%gyration_param%c_kinds)
1242 DEALLOCATE (colvar%gyration_param)
1244 DEALLOCATE (colvar%angle_param)
1246 DEALLOCATE (colvar%torsion_param)
1248 DEALLOCATE (colvar%plane_distance_param)
1250 DEALLOCATE (colvar%plane_plane_angle_param)
1252 DEALLOCATE (colvar%dfunct_param)
1254 DEALLOCATE (colvar%rotation_param)
1256 DEALLOCATE (colvar%qparm_param%i_at_from)
1257 DEALLOCATE (colvar%qparm_param%i_at_to)
1258 DEALLOCATE (colvar%qparm_param)
1260 DEALLOCATE (colvar%xyz_diag_param)
1262 DEALLOCATE (colvar%xyz_outerdiag_param)
1264 NULLIFY (colvar%u_param%mixed_energy_section)
1265 DEALLOCATE (colvar%u_param)
1267 DEALLOCATE (colvar%hydronium_shell_param%i_oxygens)
1268 DEALLOCATE (colvar%hydronium_shell_param%i_hydrogens)
1269 DEALLOCATE (colvar%hydronium_shell_param)
1271 DEALLOCATE (colvar%hydronium_dist_param%i_oxygens)
1272 DEALLOCATE (colvar%hydronium_dist_param%i_hydrogens)
1273 DEALLOCATE (colvar%hydronium_dist_param)
1275 DEALLOCATE (colvar%acid_hyd_dist_param%i_oxygens_water)
1276 DEALLOCATE (colvar%acid_hyd_dist_param%i_oxygens_acid)
1277 DEALLOCATE (colvar%acid_hyd_dist_param%i_hydrogens)
1278 DEALLOCATE (colvar%acid_hyd_dist_param)
1280 DEALLOCATE (colvar%acid_hyd_shell_param%i_oxygens_water)
1281 DEALLOCATE (colvar%acid_hyd_shell_param%i_oxygens_acid)
1282 DEALLOCATE (colvar%acid_hyd_shell_param%i_hydrogens)
1283 DEALLOCATE (colvar%acid_hyd_shell_param)
1285 IF (colvar%reaction_path_param%dist_rmsd .OR. colvar%reaction_path_param%rmsd)
THEN
1286 DEALLOCATE (colvar%reaction_path_param%r_ref)
1287 DEALLOCATE (colvar%reaction_path_param%i_rmsd)
1289 DO i = 1,
SIZE(colvar%reaction_path_param%colvar_p)
1290 CALL colvar_release(colvar%reaction_path_param%colvar_p(i)%colvar)
1292 DEALLOCATE (colvar%reaction_path_param%colvar_p)
1293 DEALLOCATE (colvar%reaction_path_param%f_vals)
1295 DEALLOCATE (colvar%reaction_path_param)
1297 DO i = 1,
SIZE(colvar%combine_cvs_param%colvar_p)
1300 DEALLOCATE (colvar%combine_cvs_param%colvar_p)
1301 DEALLOCATE (colvar%combine_cvs_param%c_parameters)
1302 DEALLOCATE (colvar%combine_cvs_param%v_parameters)
1303 DEALLOCATE (colvar%combine_cvs_param%variables)
1304 DEALLOCATE (colvar%combine_cvs_param)
1306 DEALLOCATE (colvar%rmsd_param%weights)
1307 DEALLOCATE (colvar%rmsd_param%r_ref)
1308 DEALLOCATE (colvar%rmsd_param%i_rmsd)
1309 DEALLOCATE (colvar%rmsd_param)
1311 DEALLOCATE (colvar%Wc)
1313 DEALLOCATE (colvar%HBP%ewc)
1314 DEALLOCATE (colvar%HBP%ids)
1315 DEALLOCATE (colvar%HBP)
1317 DEALLOCATE (colvar%ring_puckering_param%atoms)
1318 DEALLOCATE (colvar%ring_puckering_param)
1320 IF (
ASSOCIATED(colvar%mindist_param%i_dist_from))
THEN
1321 DEALLOCATE (colvar%mindist_param%i_dist_from)
1323 IF (
ASSOCIATED(colvar%mindist_param%i_coord_from))
THEN
1324 DEALLOCATE (colvar%mindist_param%i_coord_from)
1326 IF (
ASSOCIATED(colvar%mindist_param%i_coord_to))
THEN
1327 DEALLOCATE (colvar%mindist_param%i_coord_to)
1329 IF (
ASSOCIATED(colvar%mindist_param%k_coord_from))
THEN
1330 DEALLOCATE (colvar%mindist_param%k_coord_from)
1332 IF (
ASSOCIATED(colvar%mindist_param%k_coord_to))
THEN
1333 DEALLOCATE (colvar%mindist_param%k_coord_to)
1335 DEALLOCATE (colvar%mindist_param)
1353 TYPE(colvar_type),
INTENT(INOUT),
POINTER :: colvar_out
1354 TYPE(colvar_type),
INTENT(IN) :: colvar_in
1355 INTEGER,
INTENT(IN),
OPTIONAL :: i_atom_offset
1357 INTEGER :: i, my_offset, ndim, ndim2, stat
1360 IF (
PRESENT(i_atom_offset)) my_offset = i_atom_offset
1362 CALL colvar_clone_points(colvar_out, colvar_in, my_offset)
1363 IF (colvar_in%use_points) my_offset = 0
1364 SELECT CASE (colvar_out%type_id)
1366 colvar_out%dist_param%i_at = colvar_in%dist_param%i_at + my_offset
1367 colvar_out%dist_param%j_at = colvar_in%dist_param%j_at + my_offset
1368 colvar_out%dist_param%axis_id = colvar_in%dist_param%axis_id
1369 colvar_out%dist_param%sign_d = colvar_in%dist_param%sign_d
1371 colvar_out%coord_param%n_atoms_to = colvar_in%coord_param%n_atoms_to
1372 colvar_out%coord_param%n_atoms_to_b = colvar_in%coord_param%n_atoms_to_b
1373 colvar_out%coord_param%n_atoms_from = colvar_in%coord_param%n_atoms_from
1374 colvar_out%coord_param%nncrd = colvar_in%coord_param%nncrd
1375 colvar_out%coord_param%ndcrd = colvar_in%coord_param%ndcrd
1376 colvar_out%coord_param%r_0 = colvar_in%coord_param%r_0
1377 colvar_out%coord_param%nncrd_b = colvar_in%coord_param%nncrd_b
1378 colvar_out%coord_param%ndcrd_b = colvar_in%coord_param%ndcrd_b
1379 colvar_out%coord_param%r_0_b = colvar_in%coord_param%r_0_b
1380 colvar_out%coord_param%use_kinds_from = colvar_in%coord_param%use_kinds_from
1381 colvar_out%coord_param%use_kinds_to = colvar_in%coord_param%use_kinds_to
1382 colvar_out%coord_param%use_kinds_to_b = colvar_in%coord_param%use_kinds_to_b
1383 IF (colvar_in%coord_param%use_kinds_from)
THEN
1385 ndim =
SIZE(colvar_in%coord_param%c_kinds_from)
1386 ALLOCATE (colvar_out%coord_param%c_kinds_from(ndim))
1387 colvar_out%coord_param%c_kinds_from = colvar_in%coord_param%c_kinds_from
1390 ndim =
SIZE(colvar_in%coord_param%i_at_from)
1391 ALLOCATE (colvar_out%coord_param%i_at_from(ndim))
1392 colvar_out%coord_param%i_at_from = colvar_in%coord_param%i_at_from + my_offset
1394 IF (colvar_in%coord_param%use_kinds_to)
THEN
1396 ndim =
SIZE(colvar_in%coord_param%c_kinds_to)
1397 ALLOCATE (colvar_out%coord_param%c_kinds_to(ndim))
1398 colvar_out%coord_param%c_kinds_to = colvar_in%coord_param%c_kinds_to
1401 ndim =
SIZE(colvar_in%coord_param%i_at_to)
1402 ALLOCATE (colvar_out%coord_param%i_at_to(ndim))
1403 colvar_out%coord_param%i_at_to = colvar_in%coord_param%i_at_to + my_offset
1405 IF (colvar_in%coord_param%use_kinds_to_b)
THEN
1407 ndim =
SIZE(colvar_in%coord_param%c_kinds_to_b)
1408 ALLOCATE (colvar_out%coord_param%c_kinds_to_b(ndim))
1409 colvar_out%coord_param%c_kinds_to_b = colvar_in%coord_param%c_kinds_to_b
1410 ELSEIF (
ASSOCIATED(colvar_in%coord_param%i_at_to_b))
THEN
1412 ndim =
SIZE(colvar_in%coord_param%i_at_to_b)
1413 ALLOCATE (colvar_out%coord_param%i_at_to_b(ndim))
1414 colvar_out%coord_param%i_at_to_b = colvar_in%coord_param%i_at_to_b + my_offset
1418 colvar_out%population_param%n_atoms_to = colvar_in%population_param%n_atoms_to
1419 colvar_out%population_param%n_atoms_from = colvar_in%population_param%n_atoms_from
1420 colvar_out%population_param%nncrd = colvar_in%population_param%nncrd
1421 colvar_out%population_param%ndcrd = colvar_in%population_param%ndcrd
1422 colvar_out%population_param%r_0 = colvar_in%population_param%r_0
1423 colvar_out%population_param%use_kinds_from = colvar_in%population_param%use_kinds_from
1424 colvar_out%population_param%use_kinds_to = colvar_in%population_param%use_kinds_to
1425 IF (colvar_in%population_param%use_kinds_from)
THEN
1427 ndim =
SIZE(colvar_in%population_param%c_kinds_from)
1428 ALLOCATE (colvar_out%population_param%c_kinds_from(ndim))
1429 colvar_out%population_param%c_kinds_from = colvar_in%population_param%c_kinds_from
1432 ndim =
SIZE(colvar_in%population_param%i_at_from)
1433 ALLOCATE (colvar_out%population_param%i_at_from(ndim))
1434 colvar_out%population_param%i_at_from = colvar_in%population_param%i_at_from + my_offset
1436 IF (colvar_in%population_param%use_kinds_to)
THEN
1438 ndim =
SIZE(colvar_in%population_param%c_kinds_to)
1439 ALLOCATE (colvar_out%population_param%c_kinds_to(ndim))
1440 colvar_out%population_param%c_kinds_to = colvar_in%population_param%c_kinds_to
1443 ndim =
SIZE(colvar_in%population_param%i_at_to)
1444 ALLOCATE (colvar_out%population_param%i_at_to(ndim))
1445 colvar_out%population_param%i_at_to = colvar_in%population_param%i_at_to + my_offset
1449 colvar_out%gyration_param%n_atoms = colvar_in%gyration_param%n_atoms
1450 colvar_out%gyration_param%use_kinds = colvar_in%gyration_param%use_kinds
1451 IF (colvar_in%gyration_param%use_kinds)
THEN
1453 ndim =
SIZE(colvar_in%gyration_param%c_kinds)
1454 ALLOCATE (colvar_out%gyration_param%c_kinds(ndim))
1455 colvar_out%gyration_param%c_kinds = colvar_in%gyration_param%c_kinds
1458 ndim =
SIZE(colvar_in%gyration_param%i_at)
1459 ALLOCATE (colvar_out%gyration_param%i_at(ndim))
1460 colvar_out%gyration_param%i_at = colvar_in%gyration_param%i_at + my_offset
1463 colvar_out%angle_param%i_at_angle = colvar_in%angle_param%i_at_angle + my_offset
1465 colvar_out%torsion_param%i_at_tors = colvar_in%torsion_param%i_at_tors + my_offset
1466 colvar_out%torsion_param%o0 = colvar_in%torsion_param%o0
1468 colvar_out%plane_distance_param%use_pbc = colvar_in%plane_distance_param%use_pbc
1469 colvar_out%plane_distance_param%plane = colvar_in%plane_distance_param%plane + my_offset
1470 colvar_out%plane_distance_param%point = colvar_in%plane_distance_param%point + my_offset
1472 colvar_out%plane_plane_angle_param%plane1%type_of_def = colvar_in%plane_plane_angle_param%plane1%type_of_def
1473 IF (colvar_out%plane_plane_angle_param%plane1%type_of_def ==
plane_def_vec)
THEN
1474 colvar_out%plane_plane_angle_param%plane1%normal_vec = colvar_in%plane_plane_angle_param%plane1%normal_vec
1476 colvar_out%plane_plane_angle_param%plane1%points = colvar_in%plane_plane_angle_param%plane1%points + my_offset
1479 colvar_out%plane_plane_angle_param%plane2%type_of_def = colvar_in%plane_plane_angle_param%plane2%type_of_def
1480 IF (colvar_out%plane_plane_angle_param%plane2%type_of_def ==
plane_def_vec)
THEN
1481 colvar_out%plane_plane_angle_param%plane2%normal_vec = colvar_in%plane_plane_angle_param%plane2%normal_vec
1483 colvar_out%plane_plane_angle_param%plane2%points = colvar_in%plane_plane_angle_param%plane2%points + my_offset
1486 colvar_out%rotation_param%i_at1_bond1 = colvar_in%rotation_param%i_at1_bond1 + my_offset
1487 colvar_out%rotation_param%i_at2_bond1 = colvar_in%rotation_param%i_at2_bond1 + my_offset
1488 colvar_out%rotation_param%i_at1_bond2 = colvar_in%rotation_param%i_at1_bond2 + my_offset
1489 colvar_out%rotation_param%i_at2_bond2 = colvar_in%rotation_param%i_at2_bond2 + my_offset
1491 colvar_out%dfunct_param%i_at_dfunct = colvar_in%dfunct_param%i_at_dfunct + my_offset
1492 colvar_out%dfunct_param%coeff = colvar_in%dfunct_param%coeff
1493 colvar_out%dfunct_param%use_pbc = colvar_in%dfunct_param%use_pbc
1495 colvar_out%qparm_param%n_atoms_to = colvar_in%qparm_param%n_atoms_to
1496 colvar_out%qparm_param%n_atoms_from = colvar_in%qparm_param%n_atoms_from
1497 colvar_out%qparm_param%rcut = colvar_in%qparm_param%rcut
1498 colvar_out%qparm_param%l = colvar_in%qparm_param%l
1499 colvar_out%qparm_param%rstart = colvar_in%qparm_param%rstart
1500 colvar_out%qparm_param%include_images = colvar_in%qparm_param%include_images
1501 ndim =
SIZE(colvar_in%qparm_param%i_at_from)
1502 ALLOCATE (colvar_out%qparm_param%i_at_from(ndim))
1503 ndim =
SIZE(colvar_in%qparm_param%i_at_to)
1504 ALLOCATE (colvar_out%qparm_param%i_at_to(ndim))
1505 colvar_out%qparm_param%i_at_from = colvar_in%qparm_param%i_at_from + my_offset
1506 colvar_out%qparm_param%i_at_to = colvar_in%qparm_param%i_at_from + my_offset
1508 colvar_out%xyz_diag_param%i_atom = colvar_in%xyz_diag_param%i_atom + my_offset
1509 colvar_out%xyz_diag_param%component = colvar_in%xyz_diag_param%component
1510 colvar_out%xyz_diag_param%r0 = colvar_in%xyz_diag_param%r0
1511 colvar_out%xyz_diag_param%use_pbc = colvar_in%xyz_diag_param%use_pbc
1512 colvar_out%xyz_diag_param%use_absolute_position = colvar_in%xyz_diag_param%use_absolute_position
1514 colvar_out%xyz_outerdiag_param%i_atoms = colvar_in%xyz_outerdiag_param%i_atoms + my_offset
1515 colvar_out%xyz_outerdiag_param%components = colvar_in%xyz_outerdiag_param%components
1516 colvar_out%xyz_outerdiag_param%r0 = colvar_in%xyz_outerdiag_param%r0
1517 colvar_out%xyz_outerdiag_param%use_pbc = colvar_in%xyz_outerdiag_param%use_pbc
1519 colvar_out%u_param%natom = colvar_in%u_param%natom
1521 colvar_out%hydronium_shell_param%n_hydrogens = colvar_in%hydronium_shell_param%n_hydrogens
1522 colvar_out%hydronium_shell_param%n_oxygens = colvar_in%hydronium_shell_param%n_oxygens
1523 colvar_out%hydronium_shell_param%nh = colvar_in%hydronium_shell_param%nh
1524 colvar_out%hydronium_shell_param%poh = colvar_in%hydronium_shell_param%poh
1525 colvar_out%hydronium_shell_param%poo = colvar_in%hydronium_shell_param%poo
1526 colvar_out%hydronium_shell_param%qoh = colvar_in%hydronium_shell_param%qoh
1527 colvar_out%hydronium_shell_param%qoo = colvar_in%hydronium_shell_param%qoo
1528 colvar_out%hydronium_shell_param%pm = colvar_in%hydronium_shell_param%pm
1529 colvar_out%hydronium_shell_param%qm = colvar_in%hydronium_shell_param%qm
1530 colvar_out%hydronium_shell_param%roo = colvar_in%hydronium_shell_param%roo
1531 colvar_out%hydronium_shell_param%roh = colvar_in%hydronium_shell_param%roh
1532 colvar_out%hydronium_shell_param%lambda = colvar_in%hydronium_shell_param%lambda
1533 ndim =
SIZE(colvar_in%hydronium_shell_param%i_oxygens)
1534 ALLOCATE (colvar_out%hydronium_shell_param%i_oxygens(ndim))
1535 ndim =
SIZE(colvar_in%hydronium_shell_param%i_hydrogens)
1536 ALLOCATE (colvar_out%hydronium_shell_param%i_hydrogens(ndim))
1537 colvar_out%hydronium_shell_param%i_oxygens = colvar_in%hydronium_shell_param%i_oxygens + my_offset
1538 colvar_out%hydronium_shell_param%i_hydrogens = colvar_in%hydronium_shell_param%i_hydrogens + my_offset
1540 colvar_out%hydronium_dist_param%n_hydrogens = colvar_in%hydronium_dist_param%n_hydrogens
1541 colvar_out%hydronium_dist_param%n_oxygens = colvar_in%hydronium_dist_param%n_oxygens
1542 colvar_out%hydronium_dist_param%nh = colvar_in%hydronium_dist_param%nh
1543 colvar_out%hydronium_dist_param%nn = colvar_in%hydronium_dist_param%nn
1544 colvar_out%hydronium_dist_param%poh = colvar_in%hydronium_dist_param%poh
1545 colvar_out%hydronium_dist_param%qoh = colvar_in%hydronium_dist_param%qoh
1546 colvar_out%hydronium_dist_param%pf = colvar_in%hydronium_dist_param%pf
1547 colvar_out%hydronium_dist_param%qf = colvar_in%hydronium_dist_param%qf
1548 colvar_out%hydronium_dist_param%pm = colvar_in%hydronium_dist_param%pm
1549 colvar_out%hydronium_dist_param%qm = colvar_in%hydronium_dist_param%qm
1550 colvar_out%hydronium_dist_param%roh = colvar_in%hydronium_dist_param%roh
1551 colvar_out%hydronium_dist_param%lambda = colvar_in%hydronium_dist_param%lambda
1552 ndim =
SIZE(colvar_in%hydronium_dist_param%i_oxygens)
1553 ALLOCATE (colvar_out%hydronium_dist_param%i_oxygens(ndim))
1554 ndim =
SIZE(colvar_in%hydronium_dist_param%i_hydrogens)
1555 ALLOCATE (colvar_out%hydronium_dist_param%i_hydrogens(ndim))
1556 colvar_out%hydronium_dist_param%i_oxygens = colvar_in%hydronium_dist_param%i_oxygens + my_offset
1557 colvar_out%hydronium_dist_param%i_hydrogens = colvar_in%hydronium_dist_param%i_hydrogens + my_offset
1559 colvar_out%acid_hyd_dist_param%n_hydrogens = colvar_in%acid_hyd_dist_param%n_hydrogens
1560 colvar_out%acid_hyd_dist_param%n_oxygens_water = colvar_in%acid_hyd_dist_param%n_oxygens_water
1561 colvar_out%acid_hyd_dist_param%n_oxygens_acid = colvar_in%acid_hyd_dist_param%n_oxygens_acid
1562 colvar_out%acid_hyd_dist_param%nc = colvar_in%acid_hyd_dist_param%nc
1563 colvar_out%acid_hyd_dist_param%pwoh = colvar_in%acid_hyd_dist_param%pwoh
1564 colvar_out%acid_hyd_dist_param%qwoh = colvar_in%acid_hyd_dist_param%qwoh
1565 colvar_out%acid_hyd_dist_param%paoh = colvar_in%acid_hyd_dist_param%paoh
1566 colvar_out%acid_hyd_dist_param%qaoh = colvar_in%acid_hyd_dist_param%qaoh
1567 colvar_out%acid_hyd_dist_param%pcut = colvar_in%acid_hyd_dist_param%pcut
1568 colvar_out%acid_hyd_dist_param%qcut = colvar_in%acid_hyd_dist_param%qcut
1569 colvar_out%acid_hyd_dist_param%rwoh = colvar_in%acid_hyd_dist_param%rwoh
1570 colvar_out%acid_hyd_dist_param%raoh = colvar_in%acid_hyd_dist_param%raoh
1571 colvar_out%acid_hyd_dist_param%lambda = colvar_in%acid_hyd_dist_param%lambda
1572 ndim =
SIZE(colvar_in%acid_hyd_dist_param%i_oxygens_water)
1573 ALLOCATE (colvar_out%acid_hyd_dist_param%i_oxygens_water(ndim))
1574 ndim =
SIZE(colvar_in%acid_hyd_dist_param%i_oxygens_acid)
1575 ALLOCATE (colvar_out%acid_hyd_dist_param%i_oxygens_acid(ndim))
1576 ndim =
SIZE(colvar_in%acid_hyd_dist_param%i_hydrogens)
1577 ALLOCATE (colvar_out%acid_hyd_dist_param%i_hydrogens(ndim))
1578 colvar_out%acid_hyd_dist_param%i_oxygens_water = colvar_in%acid_hyd_dist_param%i_oxygens_water + my_offset
1579 colvar_out%acid_hyd_dist_param%i_oxygens_acid = colvar_in%acid_hyd_dist_param%i_oxygens_acid + my_offset
1580 colvar_out%acid_hyd_dist_param%i_hydrogens = colvar_in%acid_hyd_dist_param%i_hydrogens + my_offset
1582 colvar_out%acid_hyd_shell_param%n_hydrogens = colvar_in%acid_hyd_shell_param%n_hydrogens
1583 colvar_out%acid_hyd_shell_param%n_oxygens_water = colvar_in%acid_hyd_shell_param%n_oxygens_water
1584 colvar_out%acid_hyd_shell_param%n_oxygens_acid = colvar_in%acid_hyd_shell_param%n_oxygens_acid
1585 colvar_out%acid_hyd_shell_param%nc = colvar_in%acid_hyd_shell_param%nc
1586 colvar_out%acid_hyd_shell_param%nh = colvar_in%acid_hyd_shell_param%nh
1587 colvar_out%acid_hyd_shell_param%pwoh = colvar_in%acid_hyd_shell_param%pwoh
1588 colvar_out%acid_hyd_shell_param%qwoh = colvar_in%acid_hyd_shell_param%qwoh
1589 colvar_out%acid_hyd_shell_param%paoh = colvar_in%acid_hyd_shell_param%paoh
1590 colvar_out%acid_hyd_shell_param%qaoh = colvar_in%acid_hyd_shell_param%qaoh
1591 colvar_out%acid_hyd_shell_param%poo = colvar_in%acid_hyd_shell_param%poo
1592 colvar_out%acid_hyd_shell_param%qoo = colvar_in%acid_hyd_shell_param%qoo
1593 colvar_out%acid_hyd_shell_param%pm = colvar_in%acid_hyd_shell_param%pm
1594 colvar_out%acid_hyd_shell_param%qm = colvar_in%acid_hyd_shell_param%qm
1595 colvar_out%acid_hyd_shell_param%pcut = colvar_in%acid_hyd_shell_param%pcut
1596 colvar_out%acid_hyd_shell_param%qcut = colvar_in%acid_hyd_shell_param%qcut
1597 colvar_out%acid_hyd_shell_param%rwoh = colvar_in%acid_hyd_shell_param%rwoh
1598 colvar_out%acid_hyd_shell_param%raoh = colvar_in%acid_hyd_shell_param%raoh
1599 colvar_out%acid_hyd_shell_param%roo = colvar_in%acid_hyd_shell_param%roo
1600 colvar_out%acid_hyd_shell_param%lambda = colvar_in%acid_hyd_shell_param%lambda
1601 ndim =
SIZE(colvar_in%acid_hyd_shell_param%i_oxygens_water)
1602 ALLOCATE (colvar_out%acid_hyd_shell_param%i_oxygens_water(ndim))
1603 ndim =
SIZE(colvar_in%acid_hyd_shell_param%i_oxygens_acid)
1604 ALLOCATE (colvar_out%acid_hyd_shell_param%i_oxygens_acid(ndim))
1605 ndim =
SIZE(colvar_in%acid_hyd_shell_param%i_hydrogens)
1606 ALLOCATE (colvar_out%acid_hyd_shell_param%i_hydrogens(ndim))
1607 colvar_out%acid_hyd_shell_param%i_oxygens_water = colvar_in%acid_hyd_shell_param%i_oxygens_water + my_offset
1608 colvar_out%acid_hyd_shell_param%i_oxygens_acid = colvar_in%acid_hyd_shell_param%i_oxygens_acid + my_offset
1609 colvar_out%acid_hyd_shell_param%i_hydrogens = colvar_in%acid_hyd_shell_param%i_hydrogens + my_offset
1611 colvar_out%reaction_path_param%dist_rmsd = colvar_in%reaction_path_param%dist_rmsd
1612 colvar_out%reaction_path_param%rmsd = colvar_in%reaction_path_param%rmsd
1613 colvar_out%reaction_path_param%nr_frames = colvar_in%reaction_path_param%nr_frames
1614 IF (colvar_in%reaction_path_param%dist_rmsd .OR. colvar_in%reaction_path_param%rmsd)
THEN
1615 colvar_out%reaction_path_param%align_frames = colvar_in%reaction_path_param%align_frames
1616 colvar_out%reaction_path_param%subset = colvar_in%reaction_path_param%subset
1617 ndim =
SIZE(colvar_in%reaction_path_param%i_rmsd)
1618 ALLOCATE (colvar_out%reaction_path_param%i_rmsd(ndim), stat=stat)
1619 colvar_out%reaction_path_param%i_rmsd = colvar_in%reaction_path_param%i_rmsd
1620 ndim =
SIZE(colvar_in%reaction_path_param%r_ref, 1)
1621 ndim2 =
SIZE(colvar_in%reaction_path_param%r_ref, 2)
1622 ALLOCATE (colvar_out%reaction_path_param%r_ref(ndim, ndim2), stat=stat)
1623 colvar_out%reaction_path_param%r_ref = colvar_in%reaction_path_param%r_ref
1625 ndim =
SIZE(colvar_in%reaction_path_param%colvar_p)
1626 ALLOCATE (colvar_out%reaction_path_param%colvar_p(ndim))
1628 CALL colvar_clone(colvar_out%reaction_path_param%colvar_p(i)%colvar, &
1629 colvar_in%reaction_path_param%colvar_p(i)%colvar, &
1632 colvar_out%reaction_path_param%function_bounds = colvar_in%reaction_path_param%function_bounds
1633 ndim =
SIZE(colvar_in%reaction_path_param%f_vals, 1)
1634 ndim2 =
SIZE(colvar_in%reaction_path_param%f_vals, 2)
1635 ALLOCATE (colvar_out%reaction_path_param%f_vals(ndim, ndim2))
1636 colvar_out%reaction_path_param%f_vals = colvar_in%reaction_path_param%f_vals
1638 colvar_out%reaction_path_param%step_size = colvar_in%reaction_path_param%step_size
1639 colvar_out%reaction_path_param%n_components = colvar_in%reaction_path_param%n_components
1640 colvar_out%reaction_path_param%lambda = colvar_in%reaction_path_param%lambda
1642 ndim =
SIZE(colvar_in%combine_cvs_param%colvar_p)
1643 ALLOCATE (colvar_out%combine_cvs_param%colvar_p(ndim))
1645 CALL colvar_clone(colvar_out%combine_cvs_param%colvar_p(i)%colvar, &
1646 colvar_in%combine_cvs_param%colvar_p(i)%colvar, &
1649 colvar_out%combine_cvs_param%lerr = colvar_in%combine_cvs_param%lerr
1650 colvar_out%combine_cvs_param%dx = colvar_in%combine_cvs_param%dx
1651 colvar_out%combine_cvs_param%function = colvar_in%combine_cvs_param%function
1653 ndim =
SIZE(colvar_in%combine_cvs_param%c_parameters)
1654 ALLOCATE (colvar_out%combine_cvs_param%c_parameters(ndim))
1655 colvar_out%combine_cvs_param%c_parameters = colvar_in%combine_cvs_param%c_parameters
1657 ndim =
SIZE(colvar_in%combine_cvs_param%v_parameters)
1658 ALLOCATE (colvar_out%combine_cvs_param%v_parameters(ndim))
1659 colvar_out%combine_cvs_param%v_parameters = colvar_in%combine_cvs_param%v_parameters
1661 ndim =
SIZE(colvar_in%combine_cvs_param%variables)
1662 ALLOCATE (colvar_out%combine_cvs_param%variables(ndim))
1663 colvar_out%combine_cvs_param%variables = colvar_in%combine_cvs_param%variables
1665 colvar_out%rmsd_param%n_atoms = colvar_in%rmsd_param%n_atoms
1666 colvar_out%rmsd_param%align_frames = colvar_in%rmsd_param%align_frames
1667 colvar_out%rmsd_param%nr_frames = colvar_in%rmsd_param%nr_frames
1668 colvar_out%rmsd_param%subset = colvar_in%rmsd_param%subset
1670 ndim =
SIZE(colvar_in%rmsd_param%i_rmsd)
1671 ALLOCATE (colvar_out%rmsd_param%i_rmsd(ndim))
1672 colvar_out%rmsd_param%i_rmsd = colvar_in%rmsd_param%i_rmsd + my_offset
1674 ndim =
SIZE(colvar_in%rmsd_param%weights)
1675 ALLOCATE (colvar_out%rmsd_param%weights(ndim))
1676 colvar_out%rmsd_param%weights = colvar_in%rmsd_param%weights
1677 ndim =
SIZE(colvar_in%rmsd_param%r_ref, 1)
1678 ndim2 =
SIZE(colvar_in%rmsd_param%r_ref, 2)
1679 ALLOCATE (colvar_out%rmsd_param%r_ref(ndim, ndim2))
1680 colvar_out%rmsd_param%r_ref = colvar_in%rmsd_param%r_ref
1682 colvar_out%Wc%ids = colvar_in%Wc%ids + my_offset
1683 colvar_out%Wc%rcut = colvar_in%Wc%rcut
1685 ndim = colvar_out%HBP%nPoints
1686 ALLOCATE (colvar_out%HBP%ids(ndim, 3))
1687 ALLOCATE (colvar_out%HBP%ewc(ndim))
1688 colvar_out%HBP%ids = colvar_in%HBP%ids + my_offset
1689 colvar_out%HBP%ewc = colvar_in%HBP%ewc + my_offset
1690 colvar_out%HBP%nPoints = colvar_in%HBP%nPoints
1691 colvar_out%HBP%rcut = colvar_in%HBP%rcut
1692 colvar_out%HBP%shift = colvar_in%HBP%shift
1694 ndim = colvar_in%ring_puckering_param%nring
1695 colvar_out%ring_puckering_param%nring = colvar_in%ring_puckering_param%nring
1696 colvar_out%ring_puckering_param%iq = colvar_in%ring_puckering_param%iq
1697 ALLOCATE (colvar_out%ring_puckering_param%atoms(ndim))
1698 colvar_out%ring_puckering_param%atoms = colvar_in%ring_puckering_param%atoms + my_offset
1700 colvar_out%mindist_param%n_dist_from = colvar_in%mindist_param%n_dist_from
1701 colvar_out%mindist_param%n_coord_to = colvar_in%mindist_param%n_coord_to
1702 colvar_out%mindist_param%n_coord_from = colvar_in%mindist_param%n_coord_from
1703 colvar_out%mindist_param%p_exp = colvar_in%mindist_param%p_exp
1704 colvar_out%mindist_param%q_exp = colvar_in%mindist_param%q_exp
1705 colvar_out%mindist_param%r_cut = colvar_in%mindist_param%r_cut
1706 colvar_out%mindist_param%lambda = colvar_in%mindist_param%lambda
1707 colvar_out%mindist_param%use_kinds_from = colvar_in%mindist_param%use_kinds_from
1708 colvar_out%mindist_param%use_kinds_to = colvar_in%mindist_param%use_kinds_to
1710 ndim =
SIZE(colvar_in%mindist_param%i_dist_from)
1711 ALLOCATE (colvar_out%mindist_param%i_dist_from(ndim))
1712 colvar_out%mindist_param%i_dist_from = colvar_in%mindist_param%i_dist_from + my_offset
1713 IF (colvar_in%mindist_param%use_kinds_from)
THEN
1715 ndim =
SIZE(colvar_in%mindist_param%k_coord_from)
1716 ALLOCATE (colvar_out%mindist_param%k_coord_from(ndim))
1717 colvar_out%mindist_param%k_coord_from = colvar_in%mindist_param%k_coord_from
1720 ndim =
SIZE(colvar_in%mindist_param%i_coord_from)
1721 ALLOCATE (colvar_out%mindist_param%i_coord_from(ndim))
1722 colvar_out%mindist_param%i_coord_from = colvar_in%mindist_param%i_coord_from + my_offset
1724 IF (colvar_in%mindist_param%use_kinds_to)
THEN
1726 ndim =
SIZE(colvar_in%mindist_param%k_coord_to)
1727 ALLOCATE (colvar_out%mindist_param%k_coord_to(ndim))
1728 colvar_out%mindist_param%k_coord_to = colvar_in%mindist_param%k_coord_to
1731 ndim =
SIZE(colvar_in%mindist_param%i_coord_to)
1732 ALLOCATE (colvar_out%mindist_param%i_coord_to(ndim))
1733 colvar_out%mindist_param%i_coord_to = colvar_in%mindist_param%i_coord_to + my_offset
1747 SUBROUTINE colvar_clone_points(colvar_out, colvar_in, offset)
1748 TYPE(colvar_type),
INTENT(INOUT) :: colvar_out
1749 TYPE(colvar_type),
INTENT(IN) :: colvar_in
1750 INTEGER,
INTENT(IN) :: offset
1752 INTEGER :: i, natoms, npoints
1754 colvar_out%use_points = colvar_in%use_points
1755 IF (colvar_in%use_points)
THEN
1756 cpassert(
ASSOCIATED(colvar_in%points))
1757 npoints =
SIZE(colvar_in%points)
1758 ALLOCATE (colvar_out%points(npoints))
1760 IF (
ASSOCIATED(colvar_in%points(i)%atoms))
THEN
1761 natoms =
SIZE(colvar_in%points(i)%atoms)
1762 ALLOCATE (colvar_out%points(i)%atoms(natoms))
1763 colvar_out%points(i)%atoms = colvar_in%points(i)%atoms + offset
1765 NULLIFY (colvar_out%points(i)%atoms)
1767 IF (
ASSOCIATED(colvar_in%points(i)%weights))
THEN
1768 natoms =
SIZE(colvar_in%points(i)%weights)
1769 ALLOCATE (colvar_out%points(i)%weights(natoms))
1770 colvar_out%points(i)%weights = colvar_in%points(i)%weights
1772 NULLIFY (colvar_out%points(i)%weights)
1774 colvar_out%points(i)%type_id = colvar_in%points(i)%type_id
1775 colvar_out%points(i)%r = colvar_in%points(i)%r
1778 NULLIFY (colvar_out%points)
1781 END SUBROUTINE colvar_clone_points
1791 TYPE(colvar_p_type),
DIMENSION(:),
POINTER :: colvar_set
1792 INTEGER,
INTENT(IN) :: lb1_new, ub1_new
1794 INTEGER :: j, lb1, lb1_old, ub1, ub1_old
1795 TYPE(colvar_p_type),
DIMENSION(:),
POINTER :: work
1798 IF (
ASSOCIATED(colvar_set))
THEN
1799 lb1_old = lbound(colvar_set, 1)
1800 ub1_old = ubound(colvar_set, 1)
1801 lb1 = max(lb1_new, lb1_old)
1802 ub1 = min(ub1_new, ub1_old)
1803 ALLOCATE (work(lb1:ub1))
1805 CALL colvar_clone(work(j)%colvar, colvar_set(j)%colvar)
1810 DEALLOCATE (colvar_set)
1813 ALLOCATE (colvar_set(lb1_new:ub1_new))
1815 IF (
ASSOCIATED(work))
THEN
1816 lb1 = max(lb1_new, lb1_old)
1817 ub1 = min(ub1_new, ub1_old)
1819 CALL colvar_clone(colvar_set(j)%colvar, work(j)%colvar)
1837 TYPE(colvar_p_type),
DIMENSION(:),
POINTER :: colvar_p
1843 IF (
ASSOCIATED(colvar_p))
THEN
1844 DO i = 1,
SIZE(colvar_p)
1845 IF (
ASSOCIATED(colvar_p(i)%colvar)) &
1848 DEALLOCATE (colvar_p)
1860 TYPE(point_type),
INTENT(IN) :: point
1861 TYPE(particle_type),
DIMENSION(:),
INTENT(IN) :: particles
1862 REAL(kind=
dp),
DIMENSION(3),
INTENT(OUT) :: r
1866 SELECT CASE (point%type_id)
1869 DO i = 1,
SIZE(point%atoms)
1870 r = r + particles(point%atoms(i))%r*point%weights(i)
1885 TYPE(point_type),
INTENT(IN) :: point
1886 TYPE(particle_type),
DIMENSION(:),
INTENT(IN) :: particles
1887 REAL(kind=
dp),
INTENT(OUT) :: m
1891 SELECT CASE (point%type_id)
1894 DO i = 1,
SIZE(point%atoms)
1895 m = m + particles(point%atoms(i))%atomic_kind%mass*point%weights(i)
1912 TYPE(point_type),
DIMENSION(:),
INTENT(IN) :: points
1913 INTEGER,
INTENT(IN) :: i
1914 REAL(kind=
dp),
DIMENSION(:, :),
INTENT(INOUT) :: dsdr
1915 REAL(kind=
dp),
DIMENSION(3),
INTENT(IN) :: f
1918 REAL(kind=
dp) ::
fac
1920 SELECT CASE (points(i)%type_id)
1924 IF (
ASSOCIATED(points(j)%atoms))
THEN
1925 ind = ind +
SIZE(points(j)%atoms)
1928 DO j = 1,
SIZE(points(i)%atoms)
1929 fac = points(i)%weights(j)
1930 dsdr(:, ind + j) = dsdr(:, ind + j) + f*
fac
1947 TYPE(colvar_type),
INTENT(IN) :: colvar
1948 REAL(kind=
dp),
INTENT(IN) :: b
1949 REAL(kind=
dp) :: diff
1951 diff = colvar%ss - b
1954 diff = sign(1.0_dp, asin(sin(diff)))*acos(cos(diff))
static GRID_HOST_DEVICE double fac(const int i)
Factorial function, e.g. fac(5) = 5! = 120.
Initialize the collective variables types.
integer, parameter, public ring_puckering_colvar_id
integer, parameter, public population_colvar_id
integer, parameter, public do_clv_geo_center
recursive subroutine, public colvar_release(colvar)
releases the memory that might have been allocated by the colvar
integer, parameter, public distance_from_path_colvar_id
integer, parameter, public rmsd_colvar_id
integer, parameter, public mindist_colvar_id
integer, parameter, public wc_colvar_id
integer, parameter, public acid_hyd_dist_colvar_id
integer, parameter, public xyz_outerdiag_colvar_id
integer, parameter, public do_clv_xyz
integer, parameter, public do_clv_xz
real(kind=dp) function, public diff_colvar(colvar, b)
subtract b from the ss value of a colvar: general function for handling periodic/non-periodic colvar
integer, parameter, public plane_plane_angle_colvar_id
subroutine, public colvar_create(colvar, colvar_id)
initializes a colvar_param type
integer, parameter, public plane_distance_colvar_id
integer, parameter, public combine_colvar_id
integer, parameter, public gyration_colvar_id
integer, parameter, public hbp_colvar_id
integer, parameter, public rotation_colvar_id
recursive subroutine, public colvar_clone(colvar_out, colvar_in, i_atom_offset)
Clone a colvar type.
integer, parameter, public hydronium_dist_colvar_id
integer, parameter, public coord_colvar_id
integer, parameter, public do_clv_fix_point
integer, parameter, public do_clv_z
subroutine, public eval_point_pos(point, particles, r)
Evaluate the position of the geometrical point.
integer, parameter, public plane_def_atoms
integer, parameter, public do_clv_yz
integer, parameter, public dfunct_colvar_id
subroutine, public colvar_p_reallocate(colvar_set, lb1_new, ub1_new)
Change the dimension of a colvar_p_type.
subroutine, public colvar_p_release(colvar_p)
Deallocate a set of colvar_p_type.
integer, parameter, public no_colvar_id
integer, parameter, public angle_colvar_id
integer, parameter, public qparm_colvar_id
subroutine, public eval_point_der(points, i, dsdr, f)
Evaluate the position of the geometrical point.
subroutine, public eval_point_mass(point, particles, m)
...
integer, parameter, public dist_colvar_id
subroutine, public colvar_setup(colvar)
Finalize the setup of the collective variable.
integer, parameter, public do_clv_xy
integer, parameter, public u_colvar_id
integer, parameter, public hydronium_shell_colvar_id
integer, parameter, public torsion_colvar_id
integer, parameter, public do_clv_y
integer, parameter, public plane_def_vec
integer, parameter, public xyz_diag_colvar_id
integer, parameter, public reaction_path_colvar_id
integer, parameter, public do_clv_x
integer, parameter, public acid_hyd_shell_colvar_id
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...
Define the data structure for the particle information.
Defines functions to perform rmsd in 3D.