105 CHARACTER(len=*),
PARAMETER :: routinen =
'read_coordinate_crd'
107 CHARACTER(LEN=default_string_length) :: string
108 INTEGER :: handle, iw, j, natom
109 LOGICAL :: my_end, setup_velocities
110 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: velocity
116 NULLIFY (logger, velocity)
119 extension=
".subsysLog")
120 CALL timeset(routinen, handle)
123 IF (iw > 0)
WRITE (iw, *)
" Reading in CRD file ", trim(
topology%coord_file_name)
126 IF (iw > 0)
WRITE (iw,
'(T2,A)')
'CRD_INFO| Parsing the TITLE section'
132 IF (iw > 0)
WRITE (iw,
'(T2,A)')
'CRD_INFO| '//trim(string)
138 IF (iw > 0)
WRITE (iw,
'(T2,A,I0)')
'CRD_INFO| Number of atoms: ', natom
139 CALL reallocate(atom_info%id_molname, 1, natom)
140 CALL reallocate(atom_info%id_resname, 1, natom)
142 CALL reallocate(atom_info%id_atmname, 1, natom)
145 CALL reallocate(atom_info%atm_charge, 1, natom)
148 CALL reallocate(atom_info%id_element, 1, natom)
155 DO j = 1, natom - mod(natom, 2), 2
157 READ (parser%input_line, *) atom_info%r(1, j), atom_info%r(2, j), atom_info%r(3, j), &
158 atom_info%r(1, j + 1), atom_info%r(2, j + 1), atom_info%r(3, j + 1)
161 atom_info%id_atmname(j) =
str2id(
s2s(
"__UNDEF__"))
162 atom_info%id_molname(j) =
str2id(
s2s(
"__UNDEF__"))
163 atom_info%id_resname(j) =
str2id(
s2s(
"__UNDEF__"))
164 atom_info%id_element(j) =
str2id(
s2s(
"__UNDEF__"))
165 atom_info%resid(j) = huge(0)
166 atom_info%atm_mass(j) = huge(0.0_dp)
167 atom_info%atm_charge(j) = -huge(0.0_dp)
172 atom_info%id_atmname(j + 1) =
str2id(
s2s(
"__UNDEF__"))
173 atom_info%id_molname(j + 1) =
str2id(
s2s(
"__UNDEF__"))
174 atom_info%id_resname(j + 1) =
str2id(
s2s(
"__UNDEF__"))
175 atom_info%id_element(j + 1) =
str2id(
s2s(
"__UNDEF__"))
176 atom_info%resid(j + 1) = huge(0)
177 atom_info%atm_mass(j + 1) = huge(0.0_dp)
178 atom_info%atm_charge(j + 1) = -huge(0.0_dp)
179 atom_info%r(1, j + 1) =
cp_unit_to_cp2k(atom_info%r(1, j + 1),
"angstrom")
180 atom_info%r(2, j + 1) =
cp_unit_to_cp2k(atom_info%r(2, j + 1),
"angstrom")
181 atom_info%r(3, j + 1) =
cp_unit_to_cp2k(atom_info%r(3, j + 1),
"angstrom")
186 IF ((my_end) .AND. (j /= natom - mod(natom, 2) + 1))
THEN
188 cpabort(
"Error while reading CRD file. Unexpected end of file.")
189 ELSE IF (mod(natom, 2) /= 0)
THEN
192 READ (parser%input_line, *) atom_info%r(1, j), atom_info%r(2, j), atom_info%r(3, j)
195 atom_info%id_atmname(j) =
str2id(
s2s(
"__UNDEF__"))
196 atom_info%id_molname(j) =
str2id(
s2s(
"__UNDEF__"))
197 atom_info%id_resname(j) =
str2id(
s2s(
"__UNDEF__"))
198 atom_info%id_element(j) =
str2id(
s2s(
"__UNDEF__"))
199 atom_info%resid(j) = huge(0)
200 atom_info%atm_mass(j) = huge(0.0_dp)
201 atom_info%atm_charge(j) = -huge(0.0_dp)
211 cpwarn(
"No VELOCITY or BOX information found in CRD file. ")
215 DO j = 1, natom - mod(natom, 2), 2
217 READ (parser%input_line, *) velocity(1, j), velocity(2, j), velocity(3, j), &
218 velocity(1, j + 1), velocity(2, j + 1), velocity(3, j + 1)
223 velocity(1:3, j) = velocity(1:3, j)*amber_conv_factor
225 velocity(1, j + 1) =
cp_unit_to_cp2k(velocity(1, j + 1),
"angstrom*ps^-1")
226 velocity(2, j + 1) =
cp_unit_to_cp2k(velocity(2, j + 1),
"angstrom*ps^-1")
227 velocity(3, j + 1) =
cp_unit_to_cp2k(velocity(3, j + 1),
"angstrom*ps^-1")
228 velocity(1:3, j + 1) = velocity(1:3, j + 1)*amber_conv_factor
232 setup_velocities = .true.
233 IF ((my_end) .AND. (j /= natom - mod(natom, 2) + 1))
THEN
235 CALL cp_warn(__location__, &
236 "No VELOCITY information found in CRD file. Ignoring BOX information. "// &
237 "Please provide the BOX information directly from the main CP2K input! ")
238 setup_velocities = .false.
239 ELSE IF (mod(natom, 2) /= 0)
THEN
242 READ (parser%input_line, *) velocity(1, j), velocity(2, j), velocity(3, j)
247 velocity(1:3, j) = velocity(1:3, j)*amber_conv_factor
251 IF (setup_velocities)
THEN
256 DEALLOCATE (velocity)
260 cpwarn(
"BOX information missing in CRD file. ")
263 CALL cp_warn(__location__, &
264 "BOX information found in CRD file. They will be ignored. "// &
265 "Please provide the BOX information directly from the main CP2K input!")
269 "PRINT%TOPOLOGY_INFO/CRD_INFO")
270 CALL timestop(handle)
367 do_forcefield, atom_info, conn_info, amb_info, particle_set)
369 CHARACTER(LEN=*),
INTENT(IN) :: filename
370 INTEGER,
INTENT(IN) :: output_unit
372 LOGICAL,
INTENT(IN) :: do_connectivity, do_forcefield
377 POINTER :: particle_set
379 CHARACTER(len=*),
PARAMETER :: routinen =
'rdparm_amber_8'
381 CHARACTER(LEN=default_string_length) :: input_format, section
382 CHARACTER(LEN=default_string_length), &
383 ALLOCATABLE,
DIMENSION(:) :: isymbl, labres, strtmp_a
384 INTEGER :: handle, handle2, i, ifbox, ifcap, ifpert, index_now, info(31), istart, mbona, &
385 mbper, mdper, mgper, mphia, mtheta, natom, natom_prev, natyp, nbona, nbond_prev, nbonh, &
386 nbper, ndper, ngper, nhparm, nmxrs, nnb, nparm, nphb, nphi_prev, nphia, nphih, nptra, &
387 nres, nsize, ntheta, ntheta_prev, ntheth, ntypes, numang, numbnd, numextra, &
389 INTEGER,
ALLOCATABLE,
DIMENSION(:) :: iac, ib, ibh, icb, icbh, ico, icp, icph, &
390 ict, icth, ip, iph, ipres, it, ith, &
391 iwork, jb, jbh, jp, jph, jt, jth, kp, &
392 kph, kt, kth, lp, lph
393 INTEGER,
ALLOCATABLE,
DIMENSION(:, :) :: full_torsions
394 LOGICAL :: check, valid_format
395 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: asol, bsol, cn1, cn2, phase, pk, pn, &
399 CALL timeset(routinen, handle)
400 IF (output_unit > 0)
WRITE (output_unit,
'(/,A)')
" AMBER_INFO| Reading Amber Topology File: "// &
402 CALL parser_create(parser, filename, para_env=para_env, parse_white_lines=.true.)
403 valid_format = check_amber_8_std(parser, output_unit)
404 IF (valid_format)
THEN
405 DO WHILE (get_section_parmtop(parser, section, input_format))
406 SELECT CASE (trim(section))
411 CALL rd_amber_section(parser, section, info, 31)
447 IF (output_unit > 0)
THEN
448 WRITE (output_unit,
'(A,/)')
" AMBER_INFO| Information from AMBER topology file:"
449 WRITE (output_unit, 1000) &
450 natom, ntypes, nbonh, mbona, ntheth, mtheta, nphih, &
451 mphia, nhparm, nparm, nnb, nres, nbona, ntheta, &
452 nphia, numbnd, numang, nptra, natyp, nphb, ifbox, &
453 nmxrs, ifcap, numextra
457 IF (do_connectivity)
THEN
458 check =
PRESENT(atom_info) .AND.
PRESENT(conn_info)
461 IF (
ASSOCIATED(atom_info%id_molname)) natom_prev =
SIZE(atom_info%id_molname)
463 ALLOCATE (labres(nres))
464 ALLOCATE (ipres(nres))
466 IF (do_forcefield)
THEN
468 ALLOCATE (iac(natom))
469 ALLOCATE (ico(ntypes*ntypes))
470 ALLOCATE (rk(numbnd))
471 ALLOCATE (req(numbnd))
472 ALLOCATE (tk(numang))
473 ALLOCATE (teq(numang))
476 ALLOCATE (phase(nptra))
477 ALLOCATE (cn1(ntypes*(ntypes + 1)/2))
478 ALLOCATE (cn2(ntypes*(ntypes + 1)/2))
479 ALLOCATE (asol(ntypes*(ntypes + 1)/2))
480 ALLOCATE (bsol(ntypes*(ntypes + 1)/2))
483 ALLOCATE (ibh(nbonh))
484 ALLOCATE (jbh(nbonh))
485 ALLOCATE (icbh(nbonh))
488 ALLOCATE (icb(nbona))
489 ALLOCATE (ith(ntheth))
490 ALLOCATE (jth(ntheth))
491 ALLOCATE (kth(ntheth))
492 ALLOCATE (icth(ntheth))
493 ALLOCATE (it(ntheta))
494 ALLOCATE (jt(ntheta))
495 ALLOCATE (kt(ntheta))
496 ALLOCATE (ict(ntheta))
497 ALLOCATE (iph(nphih))
498 ALLOCATE (jph(nphih))
499 ALLOCATE (kph(nphih))
500 ALLOCATE (lph(nphih))
501 ALLOCATE (icph(nphih))
506 ALLOCATE (icp(nphia))
510 CASE (
"AMBER_ATOM_TYPE")
511 IF (.NOT. do_connectivity) cycle
512 CALL reallocate(atom_info%id_atmname, 1, natom_prev + natom)
513 ALLOCATE (strtmp_a(natom))
514 CALL rd_amber_section(parser, section, strtmp_a, natom)
516 atom_info%id_atmname(natom_prev + i) =
str2id(strtmp_a(i))
518 DEALLOCATE (strtmp_a)
520 IF (.NOT. do_connectivity) cycle
521 CALL reallocate(atom_info%atm_charge, 1, natom_prev + natom)
522 CALL rd_amber_section(parser, section, atom_info%atm_charge(natom_prev + 1:), natom)
524 atom_info%atm_charge(natom_prev + 1:) = atom_info%atm_charge(natom_prev + 1:)/amber_conv_charge
526 IF (.NOT. do_connectivity) cycle
527 CALL reallocate(atom_info%atm_mass, 1, natom_prev + natom)
528 CALL rd_amber_section(parser, section, atom_info%atm_mass(natom_prev + 1:), natom)
529 CASE (
"RESIDUE_LABEL")
530 IF (.NOT. do_connectivity) cycle
531 CALL reallocate(atom_info%id_resname, 1, natom_prev + natom)
532 CALL rd_amber_section(parser, section, labres, nres)
533 CASE (
"RESIDUE_POINTER")
534 IF (.NOT. do_connectivity) cycle
535 CALL reallocate(atom_info%resid, 1, natom_prev + natom)
536 CALL rd_amber_section(parser, section, ipres, nres)
537 CASE (
"ATOM_TYPE_INDEX")
538 IF (.NOT. do_forcefield) cycle
539 CALL rd_amber_section(parser, section, iac, natom)
540 CASE (
"NONBONDED_PARM_INDEX")
541 IF (.NOT. do_forcefield) cycle
542 CALL rd_amber_section(parser, section, ico, ntypes**2)
543 CASE (
"BOND_FORCE_CONSTANT")
544 IF (.NOT. do_forcefield) cycle
545 CALL rd_amber_section(parser, section, rk, numbnd)
546 CASE (
"BOND_EQUIL_VALUE")
547 IF (.NOT. do_forcefield) cycle
548 CALL rd_amber_section(parser, section, req, numbnd)
549 CASE (
"ANGLE_FORCE_CONSTANT")
550 IF (.NOT. do_forcefield) cycle
551 CALL rd_amber_section(parser, section, tk, numang)
552 CASE (
"ANGLE_EQUIL_VALUE")
553 IF (.NOT. do_forcefield) cycle
554 CALL rd_amber_section(parser, section, teq, numang)
555 CASE (
"DIHEDRAL_FORCE_CONSTANT")
556 IF (.NOT. do_forcefield) cycle
557 CALL rd_amber_section(parser, section, pk, nptra)
558 IF (nptra <= 0) cycle
560 IF (
ASSOCIATED(amb_info%raw_torsion_k))
DEALLOCATE (amb_info%raw_torsion_k)
561 ALLOCATE (amb_info%raw_torsion_k(nptra), source=pk)
562 CASE (
"DIHEDRAL_PERIODICITY")
563 IF (.NOT. do_forcefield) cycle
564 CALL rd_amber_section(parser, section, pn, nptra)
565 IF (nptra <= 0) cycle
567 IF (
ASSOCIATED(amb_info%raw_torsion_m))
DEALLOCATE (amb_info%raw_torsion_m)
568 ALLOCATE (amb_info%raw_torsion_m(nptra), source=pn)
569 CASE (
"DIHEDRAL_PHASE")
570 IF (.NOT. do_forcefield) cycle
571 CALL rd_amber_section(parser, section, phase, nptra)
572 IF (nptra <= 0) cycle
574 IF (
ASSOCIATED(amb_info%raw_torsion_phi0))
DEALLOCATE (amb_info%raw_torsion_phi0)
575 ALLOCATE (amb_info%raw_torsion_phi0(nptra), source=phase)
576 CASE (
"LENNARD_JONES_ACOEF")
577 IF (.NOT. do_forcefield) cycle
578 CALL rd_amber_section(parser, section, cn1, ntypes*(ntypes + 1)/2)
579 CASE (
"LENNARD_JONES_BCOEF")
580 IF (.NOT. do_forcefield) cycle
581 CALL rd_amber_section(parser, section, cn2, ntypes*(ntypes + 1)/2)
583 IF (.NOT. do_forcefield) cycle
584 CALL rd_amber_section(parser, section, asol, nphb)
586 IF (.NOT. do_forcefield) cycle
587 CALL rd_amber_section(parser, section, bsol, nphb)
588 CASE (
"BONDS_INC_HYDROGEN")
590 CALL rd_amber_section(parser, section, ibh, jbh, icbh, nbonh)
592 ibh(:) = ibh(:)/3 + 1
593 jbh(:) = jbh(:)/3 + 1
594 CASE (
"BONDS_WITHOUT_HYDROGEN")
596 CALL rd_amber_section(parser, section, ib, jb, icb, nbona)
600 CASE (
"ANGLES_INC_HYDROGEN")
602 CALL rd_amber_section(parser, section, ith, jth, kth, icth, ntheth)
604 ith(:) = ith(:)/3 + 1
605 jth(:) = jth(:)/3 + 1
606 kth(:) = kth(:)/3 + 1
607 CASE (
"ANGLES_WITHOUT_HYDROGEN")
609 CALL rd_amber_section(parser, section, it, jt, kt, ict, ntheta)
614 CASE (
"DIHEDRALS_INC_HYDROGEN")
616 CALL rd_amber_section(parser, section, iph, jph, kph, lph, icph, nphih)
618 iph(:) = iph(:)/3 + 1
619 jph(:) = jph(:)/3 + 1
620 kph(:) = abs(kph(:))/3 + 1
621 lph(:) = abs(lph(:))/3 + 1
622 CASE (
"DIHEDRALS_WITHOUT_HYDROGEN")
624 CALL rd_amber_section(parser, section, ip, jp, kp, lp, icp, nphia)
628 kp(:) = abs(kp(:))/3 + 1
629 lp(:) = abs(lp(:))/3 + 1
635 IF (do_forcefield .AND. (nphih + nphia > 0))
THEN
636 IF (
ASSOCIATED(amb_info%raw_torsion_id))
DEALLOCATE (amb_info%raw_torsion_id)
637 ALLOCATE (amb_info%raw_torsion_id(5, nphih + nphia))
639 amb_info%raw_torsion_id(1, i) = iph(i)
640 amb_info%raw_torsion_id(2, i) = jph(i)
641 amb_info%raw_torsion_id(3, i) = kph(i)
642 amb_info%raw_torsion_id(4, i) = lph(i)
643 amb_info%raw_torsion_id(5, i) = icph(i)
646 amb_info%raw_torsion_id(1, nphih + i) = ip(i)
647 amb_info%raw_torsion_id(2, nphih + i) = jp(i)
648 amb_info%raw_torsion_id(3, nphih + i) = kp(i)
649 amb_info%raw_torsion_id(4, nphih + i) = lp(i)
650 amb_info%raw_torsion_id(5, nphih + i) = icp(i)
656 IF (do_connectivity)
THEN
657 CALL timeset(trim(routinen)//
"_connectivity", handle2)
661 ALLOCATE (isymbl(natom))
662 ALLOCATE (iwork(natom))
664 DO i = 1,
SIZE(isymbl)
665 isymbl(i) =
id2str(atom_info%id_atmname(natom_prev + i))
669 CALL sort(isymbl, natom, iwork)
673 IF (trim(isymbl(i)) /= trim(isymbl(istart)))
THEN
674 CALL conform_atom_type_low(isymbl, iwork, i, istart, atom_info%atm_charge(natom_prev + 1:))
678 CALL conform_atom_type_low(isymbl, iwork, i, istart, atom_info%atm_charge(natom_prev + 1:))
682 atom_info%id_atmname(natom_prev + iwork(i)) =
str2id(
s2s(isymbl(i)))
689 atom_info%id_resname(natom_prev + ipres(i):natom_prev + ipres(i + 1)) =
str2id(
s2s(labres(i)))
690 atom_info%resid(natom_prev + ipres(i):natom_prev + ipres(i + 1)) = i
692 atom_info%id_resname(natom_prev + ipres(i):natom_prev + natom) =
str2id(
s2s(labres(i)))
693 atom_info%resid(natom_prev + ipres(i):natom_prev + natom) = i
706 IF (
ASSOCIATED(conn_info%bond_a)) nbond_prev =
SIZE(conn_info%bond_a)
708 CALL reallocate(conn_info%bond_a, 1, nbond_prev + nbonh + nbona)
709 CALL reallocate(conn_info%bond_b, 1, nbond_prev + nbonh + nbona)
711 index_now = nbond_prev + i
712 conn_info%bond_a(index_now) = natom_prev + ibh(i)
713 conn_info%bond_b(index_now) = natom_prev + jbh(i)
716 index_now = nbond_prev + i + nbonh
717 conn_info%bond_a(index_now) = natom_prev + ib(i)
718 conn_info%bond_b(index_now) = natom_prev + jb(i)
723 IF (
ASSOCIATED(conn_info%theta_a)) ntheta_prev =
SIZE(conn_info%theta_a)
725 CALL reallocate(conn_info%theta_a, 1, ntheta_prev + ntheth + ntheta)
726 CALL reallocate(conn_info%theta_b, 1, ntheta_prev + ntheth + ntheta)
727 CALL reallocate(conn_info%theta_c, 1, ntheta_prev + ntheth + ntheta)
729 index_now = ntheta_prev + i
730 conn_info%theta_a(index_now) = natom_prev + ith(i)
731 conn_info%theta_b(index_now) = natom_prev + jth(i)
732 conn_info%theta_c(index_now) = natom_prev + kth(i)
735 index_now = ntheta_prev + i + ntheth
736 conn_info%theta_a(index_now) = natom_prev + it(i)
737 conn_info%theta_b(index_now) = natom_prev + jt(i)
738 conn_info%theta_c(index_now) = natom_prev + kt(i)
745 IF (
ASSOCIATED(conn_info%phi_a)) nphi_prev =
SIZE(conn_info%phi_a)
747 CALL reallocate(conn_info%phi_a, 1, nphi_prev + nphih + nphia)
748 CALL reallocate(conn_info%phi_b, 1, nphi_prev + nphih + nphia)
749 CALL reallocate(conn_info%phi_c, 1, nphi_prev + nphih + nphia)
750 CALL reallocate(conn_info%phi_d, 1, nphi_prev + nphih + nphia)
752 IF (nphih + nphia /= 0)
THEN
753 ALLOCATE (full_torsions(4, nphih + nphia))
754 ALLOCATE (iwork(nphih + nphia))
757 full_torsions(1, i) = iph(i)
758 full_torsions(2, i) = jph(i)
759 full_torsions(3, i) = kph(i)
760 full_torsions(4, i) = lph(i)
763 full_torsions(1, nphih + i) = ip(i)
764 full_torsions(2, nphih + i) = jp(i)
765 full_torsions(3, nphih + i) = kp(i)
766 full_torsions(4, nphih + i) = lp(i)
768 CALL sort(full_torsions, 1, nphih + nphia, 1, 4, iwork)
770 unique_torsions = nphi_prev + 1
771 conn_info%phi_a(unique_torsions) = natom_prev + full_torsions(1, 1)
772 conn_info%phi_b(unique_torsions) = natom_prev + full_torsions(2, 1)
773 conn_info%phi_c(unique_torsions) = natom_prev + full_torsions(3, 1)
774 conn_info%phi_d(unique_torsions) = natom_prev + full_torsions(4, 1)
775 DO i = 2, nphih + nphia
776 IF ((full_torsions(1, i) /= full_torsions(1, i - 1)) .OR. &
777 (full_torsions(2, i) /= full_torsions(2, i - 1)) .OR. &
778 (full_torsions(3, i) /= full_torsions(3, i - 1)) .OR. &
779 (full_torsions(4, i) /= full_torsions(4, i - 1)))
THEN
780 unique_torsions = unique_torsions + 1
781 conn_info%phi_a(unique_torsions) = natom_prev + full_torsions(1, i)
782 conn_info%phi_b(unique_torsions) = natom_prev + full_torsions(2, i)
783 conn_info%phi_c(unique_torsions) = natom_prev + full_torsions(3, i)
784 conn_info%phi_d(unique_torsions) = natom_prev + full_torsions(4, i)
787 CALL reallocate(conn_info%phi_a, 1, unique_torsions)
788 CALL reallocate(conn_info%phi_b, 1, unique_torsions)
789 CALL reallocate(conn_info%phi_c, 1, unique_torsions)
790 CALL reallocate(conn_info%phi_d, 1, unique_torsions)
792 DEALLOCATE (full_torsions)
804 CALL reallocate(atom_info%id_molname, 1, natom_prev + natom)
805 atom_info%id_molname(natom_prev + 1:natom_prev + natom) =
str2id(
s2s(
"__UNDEF__"))
807 atom_info%id_molname(natom_prev + 1:natom_prev + natom))
808 CALL timestop(handle2)
812 IF (do_forcefield)
THEN
813 CALL timeset(trim(routinen)//
"_forcefield", handle2)
817 CALL reallocate(amb_info%bond_a, 1, buffer_size)
818 CALL reallocate(amb_info%bond_b, 1, buffer_size)
819 CALL reallocate(amb_info%bond_k, 1, buffer_size)
820 CALL reallocate(amb_info%bond_r0, 1, buffer_size)
823 CALL post_process_bonds_info(amb_info%bond_a, amb_info%bond_b, &
824 amb_info%bond_k, amb_info%bond_r0, particle_set, nsize, &
825 nbonh, ibh, jbh, icbh, rk, req)
827 CALL post_process_bonds_info(amb_info%bond_a, amb_info%bond_b, &
828 amb_info%bond_k, amb_info%bond_r0, particle_set, nsize, &
829 nbona, ib, jb, icb, rk, req)
839 CALL reallocate(amb_info%bend_a, 1, buffer_size)
840 CALL reallocate(amb_info%bend_b, 1, buffer_size)
841 CALL reallocate(amb_info%bend_c, 1, buffer_size)
842 CALL reallocate(amb_info%bend_k, 1, buffer_size)
843 CALL reallocate(amb_info%bend_theta0, 1, buffer_size)
846 CALL post_process_bends_info(amb_info%bend_a, amb_info%bend_b, &
847 amb_info%bend_c, amb_info%bend_k, amb_info%bend_theta0, &
848 particle_set, nsize, ntheth, ith, jth, kth, icth, tk, teq)
850 CALL post_process_bends_info(amb_info%bend_a, amb_info%bend_b, &
851 amb_info%bend_c, amb_info%bend_k, amb_info%bend_theta0, &
852 particle_set, nsize, ntheta, it, jt, kt, ict, tk, teq)
858 CALL reallocate(amb_info%bend_theta0, 1, nsize)
865 CALL reallocate(amb_info%torsion_a, 1, buffer_size)
866 CALL reallocate(amb_info%torsion_b, 1, buffer_size)
867 CALL reallocate(amb_info%torsion_c, 1, buffer_size)
868 CALL reallocate(amb_info%torsion_d, 1, buffer_size)
869 CALL reallocate(amb_info%torsion_k, 1, buffer_size)
870 CALL reallocate(amb_info%torsion_m, 1, buffer_size)
871 CALL reallocate(amb_info%torsion_phi0, 1, buffer_size)
874 CALL post_process_torsions_info(amb_info%torsion_a, amb_info%torsion_b, &
875 amb_info%torsion_c, amb_info%torsion_d, amb_info%torsion_k, &
876 amb_info%torsion_m, amb_info%torsion_phi0, particle_set, nsize, &
877 nphih, iph, jph, kph, lph, icph, pk, pn, phase)
879 CALL post_process_torsions_info(amb_info%torsion_a, amb_info%torsion_b, &
880 amb_info%torsion_c, amb_info%torsion_d, amb_info%torsion_k, &
881 amb_info%torsion_m, amb_info%torsion_phi0, particle_set, nsize, &
882 nphia, ip, jp, kp, lp, icp, pk, pn, phase)
890 CALL reallocate(amb_info%torsion_phi0, 1, nsize)
893 IF (nphih + nphia /= 0)
THEN
894 ALLOCATE (iwork(nphih + nphia))
895 CALL sort(amb_info%raw_torsion_id, 1, nphih + nphia, 1, 5, iwork)
902 CALL reallocate(amb_info%nonbond_a, 1, buffer_size)
903 CALL reallocate(amb_info%nonbond_eps, 1, buffer_size)
904 CALL reallocate(amb_info%nonbond_rmin2, 1, buffer_size)
907 CALL post_process_lj_info(amb_info%nonbond_a, amb_info%nonbond_eps, &
908 amb_info%nonbond_rmin2, particle_set, ntypes, nsize, iac, ico, &
913 CALL reallocate(amb_info%nonbond_eps, 1, nsize)
914 CALL reallocate(amb_info%nonbond_rmin2, 1, nsize)
930 CALL timestop(handle2)
958 CALL timestop(handle)
962 /
' NATOM = ', i7,
' NTYPES = ', i7,
' NBONH = ', i7,
' MBONA = ', i7, &
963 /
' NTHETH = ', i7,
' MTHETA = ', i7,
' NPHIH = ', i7,
' MPHIA = ', i7, &
964 /
' NHPARM = ', i7,
' NPARM = ', i7,
' NNB = ', i7,
' NRES = ', i7, &
965 /
' NBONA = ', i7,
' NTHETA = ', i7,
' NPHIA = ', i7,
' NUMBND = ', i7, &
966 /
' NUMANG = ', i7,
' NPTRA = ', i7,
' NATYP = ', i7,
' NPHB = ', i7, &
967 /
' IFBOX = ', i7,
' NMXRS = ', i7,
' IFCAP = ', i7,
' NEXTRA = ', i7,/)