103 molecule_set, ewald_env, fist_nonbond_env, ff_type, root_section, qmmm, &
104 qmmm_env, mm_section, subsys_section, shell_particle_set, core_particle_set, &
115 LOGICAL,
INTENT(IN),
OPTIONAL :: qmmm
118 TYPE(
particle_type),
DIMENSION(:),
POINTER :: shell_particle_set, core_particle_set
121 CHARACTER(len=*),
PARAMETER :: routinen =
'force_field_pack'
123 CHARACTER(LEN=default_string_length), &
124 DIMENSION(:),
POINTER :: ainfo
125 INTEGER :: handle, iw, iw2, iw3, iw4, output_unit
126 LOGICAL :: do_zbl, explicit, fatal, ignore_fatal, &
128 REAL(kind=
dp) :: ewald_rcut, verlet_skin
129 REAL(kind=
dp),
DIMENSION(:),
POINTER :: charges
138 CALL timeset(routinen, handle)
140 ignore_fatal = ff_type%ignore_missing_critical
141 NULLIFY (logger, ainfo, charges_section, charges)
154 NULLIFY (potparm_nonbond14, potparm_nonbond)
156 IF (
PRESENT(qmmm) .AND.
PRESENT(qmmm_env)) my_qmmm = qmmm
157 inp_info => ff_type%inp_info
158 chm_info => ff_type%chm_info
159 gro_info => ff_type%gro_info
160 amb_info => ff_type%amb_info
194 fatal, ainfo, chm_info, inp_info, gro_info, &
200 fatal, ainfo, chm_info, inp_info, gro_info, &
203 CALL release_ff_missing_par(fatal, ignore_fatal, ainfo, output_unit, iw)
208 ainfo, chm_info, inp_info, iw)
213 ainfo, chm_info, inp_info, gro_info, amb_info, iw)
218 ainfo, chm_info, inp_info, gro_info, iw)
226 CALL release_ff_missing_par(fatal, ignore_fatal, ainfo, output_unit, iw)
230 IF (.NOT. explicit)
THEN
236 ainfo, my_qmmm, inp_info)
238 CALL release_ff_missing_par(fatal, ignore_fatal, ainfo, output_unit, iw)
245 qmmm_env, inp_info, iw4)
260 molecule_kind_set, molecule_set, root_section, subsys_section, &
261 shell_particle_set, core_particle_set, cell, iw, inp_info)
262 IF (ff_type%do_nonbonded)
THEN
268 chm_info, inp_info, gro_info, amb_info, potparm_nonbond14, ewald_env)
270 CALL release_ff_missing_par(fatal, ignore_fatal, ainfo, output_unit, iw)
274 potparm_nonbond14, do_zbl, nonbonded_type=
"NONBONDED14")
280 fatal, iw, ainfo, chm_info, inp_info, gro_info, amb_info, &
281 potparm_nonbond, ewald_env)
283 CALL release_ff_missing_par(fatal, ignore_fatal, ainfo, output_unit, iw)
287 potparm_nonbond, do_zbl, nonbonded_type=
"NONBONDED")
295 ALLOCATE (fist_nonbond_env)
297 potparm_nonbond14, potparm_nonbond, ff_type%do_nonbonded, &
298 ff_type%do_electrostatics, verlet_skin, ewald_rcut, ff_type%ei_scale14, &
299 ff_type%vdw_scale14, ff_type%shift_cutoff)
310 CALL timestop(handle)
474 CHARACTER(len=*),
PARAMETER :: routinen =
'clean_intra_force_kind'
476 INTEGER :: atm2_a, atm2_b, atm2_c, atm_a, atm_b, atm_c, atm_d, counter, handle, i, ibend, &
477 ibond, icolv, ig3x3, ig4x6, iimpr, ikind, iopbend, itorsion, iub, iw, j, k, nbend, nbond, &
478 newkind, ng3x3, ng4x6, nimpr, nopbend, ntorsion, nub
479 INTEGER,
POINTER :: bad1(:), bad2(:)
480 LOGICAL :: unsetme, valid_kind
481 TYPE(
bend_kind_type),
DIMENSION(:),
POINTER :: bend_kind_set, new_bend_kind_set
482 TYPE(
bend_type),
DIMENSION(:),
POINTER :: bend_list, new_bend_list
483 TYPE(
bond_kind_type),
DIMENSION(:),
POINTER :: bond_kind_set, new_bond_kind_set
484 TYPE(
bond_type),
DIMENSION(:),
POINTER :: bond_list, new_bond_list
490 TYPE(
impr_kind_type),
DIMENSION(:),
POINTER :: impr_kind_set, new_impr_kind_set
491 TYPE(
impr_type),
DIMENSION(:),
POINTER :: impr_list, new_impr_list
493 TYPE(
opbend_kind_type),
DIMENSION(:),
POINTER :: new_opbend_kind_set, opbend_kind_set
494 TYPE(
opbend_type),
DIMENSION(:),
POINTER :: new_opbend_list, opbend_list
495 TYPE(
torsion_kind_type),
DIMENSION(:),
POINTER :: new_torsion_kind_set, torsion_kind_set
496 TYPE(
torsion_type),
DIMENSION(:),
POINTER :: new_torsion_list, torsion_list
497 TYPE(
ub_kind_type),
DIMENSION(:),
POINTER :: new_ub_kind_set, ub_kind_set
498 TYPE(
ub_type),
DIMENSION(:),
POINTER :: new_ub_list, ub_list
500 CALL timeset(routinen, handle)
508 DO ikind = 1,
SIZE(molecule_kind_set)
509 molecule_kind => molecule_kind_set(ikind)
511 colv_list=colv_list, &
514 IF (
ASSOCIATED(colv_list))
THEN
515 DO icolv = 1,
SIZE(colv_list)
517 ((.NOT. colv_list(icolv)%use_points) .OR. (
SIZE(colv_list(icolv)%i_atoms) == 2)))
THEN
518 atm_a = colv_list(icolv)%i_atoms(1)
519 atm_b = colv_list(icolv)%i_atoms(2)
522 atm2_a = bond_list(ibond)%a
523 atm2_b = bond_list(ibond)%b
524 IF (atm2_a == atm_a .AND. atm2_b == atm_b) unsetme = .true.
525 IF (atm2_a == atm_b .AND. atm2_b == atm_a) unsetme = .true.
526 IF (unsetme) bond_list(ibond)%id_type =
do_ff_undef
535 DO ikind = 1,
SIZE(molecule_kind_set)
536 molecule_kind => molecule_kind_set(ikind)
538 colv_list=colv_list, &
541 IF (
ASSOCIATED(colv_list))
THEN
544 atm_a = bend_list(ibend)%a
545 atm_b = bend_list(ibend)%b
546 atm_c = bend_list(ibend)%c
547 DO icolv = 1,
SIZE(colv_list)
549 ((.NOT. colv_list(icolv)%use_points) .OR. (
SIZE(colv_list(icolv)%i_atoms) == 2)))
THEN
550 atm2_a = colv_list(icolv)%i_atoms(1)
551 atm2_b = colv_list(icolv)%i_atoms(2)
554 IF (((atm2_a == atm_a) .AND. (atm2_b == atm_c)) .OR. &
555 ((atm2_a == atm_c) .AND. (atm2_b == atm_a)))
THEN
561 IF (unsetme) bend_list(ibend)%id_type =
do_ff_undef
568 DO ikind = 1,
SIZE(molecule_kind_set)
569 molecule_kind => molecule_kind_set(ikind)
572 g3x3_list=g3x3_list, &
576 atm_a = g3x3_list(ig3x3)%a
577 atm_b = g3x3_list(ig3x3)%b
578 atm_c = g3x3_list(ig3x3)%c
581 atm2_a = bond_list(ibond)%a
582 atm2_b = bond_list(ibond)%b
583 IF (atm2_a == atm_a .AND. atm2_b == atm_b) unsetme = .true.
584 IF (atm2_a == atm_a .AND. atm2_b == atm_c) unsetme = .true.
585 IF (atm2_a == atm_c .AND. atm2_b == atm_c) unsetme = .true.
586 IF (unsetme) bond_list(ibond)%id_type =
do_ff_undef
593 DO ikind = 1,
SIZE(molecule_kind_set)
594 molecule_kind => molecule_kind_set(ikind)
597 g3x3_list=g3x3_list, &
601 atm_a = g3x3_list(ig3x3)%a
602 atm_b = g3x3_list(ig3x3)%b
603 atm_c = g3x3_list(ig3x3)%c
606 atm2_a = bend_list(ibend)%a
607 atm2_b = bend_list(ibend)%b
608 atm2_c = bend_list(ibend)%c
609 IF (atm2_a == atm_a .AND. atm2_b == atm_b .AND. atm2_c == atm_c) unsetme = .true.
610 IF (atm2_a == atm_a .AND. atm2_b == atm_c .AND. atm2_c == atm_b) unsetme = .true.
611 IF (atm2_a == atm_b .AND. atm2_b == atm_a .AND. atm2_c == atm_c) unsetme = .true.
612 IF (atm2_a == atm_b .AND. atm2_b == atm_c .AND. atm2_c == atm_a) unsetme = .true.
613 IF (unsetme) bend_list(ibend)%id_type =
do_ff_undef
620 DO ikind = 1,
SIZE(molecule_kind_set)
621 molecule_kind => molecule_kind_set(ikind)
624 g4x6_list=g4x6_list, &
628 atm_a = g4x6_list(ig4x6)%a
629 atm_b = g4x6_list(ig4x6)%b
630 atm_c = g4x6_list(ig4x6)%c
631 atm_d = g4x6_list(ig4x6)%d
634 atm2_a = bond_list(ibond)%a
635 atm2_b = bond_list(ibond)%b
636 IF (atm2_a == atm_a .AND. atm2_b == atm_b) unsetme = .true.
637 IF (atm2_a == atm_a .AND. atm2_b == atm_c) unsetme = .true.
638 IF (atm2_a == atm_a .AND. atm2_b == atm_d) unsetme = .true.
639 IF (unsetme) bond_list(ibond)%id_type =
do_ff_undef
646 DO ikind = 1,
SIZE(molecule_kind_set)
647 molecule_kind => molecule_kind_set(ikind)
650 g4x6_list=g4x6_list, &
654 atm_a = g4x6_list(ig4x6)%a
655 atm_b = g4x6_list(ig4x6)%b
656 atm_c = g4x6_list(ig4x6)%c
657 atm_d = g4x6_list(ig4x6)%d
660 atm2_a = bend_list(ibend)%a
661 atm2_b = bend_list(ibend)%b
662 atm2_c = bend_list(ibend)%c
663 IF (atm2_a == atm_b .AND. atm2_b == atm_a .AND. atm2_c == atm_c) unsetme = .true.
664 IF (atm2_a == atm_b .AND. atm2_b == atm_a .AND. atm2_c == atm_d) unsetme = .true.
665 IF (atm2_a == atm_c .AND. atm2_b == atm_a .AND. atm2_c == atm_d) unsetme = .true.
666 IF (unsetme) bend_list(ibend)%id_type =
do_ff_undef
673 DO ikind = 1,
SIZE(molecule_kind_set)
674 molecule_kind => molecule_kind_set(ikind)
677 bond_kind_set=bond_kind_set, &
680 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") Old BOND Count: ", &
681 SIZE(bond_list),
SIZE(bond_kind_set)
682 IF (iw > 0)
WRITE (iw,
'(2I6)') (bond_list(ibond)%a, bond_list(ibond)%b, ibond=1,
SIZE(bond_list))
684 ALLOCATE (bad1(
SIZE(bond_kind_set)))
686 DO ibond = 1,
SIZE(bond_kind_set)
688 IF (bond_kind_set(ibond)%id_type ==
do_ff_undef) unsetme = .true.
690 DO i = 1,
SIZE(bond_list)
692 bond_list(i)%bond_kind%kind_number == ibond)
THEN
697 IF (.NOT. valid_kind) unsetme = .true.
698 IF (unsetme) bad1(ibond) = 1
700 IF (sum(bad1) /= 0)
THEN
701 counter =
SIZE(bond_kind_set) - sum(bad1)
704 DO ibond = 1,
SIZE(bond_kind_set)
705 IF (bad1(ibond) == 0)
THEN
706 counter = counter + 1
707 new_bond_kind_set(counter) = bond_kind_set(ibond)
711 ALLOCATE (bad2(
SIZE(bond_list)))
713 DO ibond = 1,
SIZE(bond_list)
715 IF (bond_list(ibond)%bond_kind%id_type ==
do_ff_undef) unsetme = .true.
716 IF (bond_list(ibond)%id_type ==
do_ff_undef) unsetme = .true.
717 IF (unsetme) bad2(ibond) = 1
719 IF (sum(bad2) /= 0)
THEN
720 counter =
SIZE(bond_list) - sum(bad2)
721 ALLOCATE (new_bond_list(counter))
723 DO ibond = 1,
SIZE(bond_list)
724 IF (bad2(ibond) == 0)
THEN
725 counter = counter + 1
726 new_bond_list(counter) = bond_list(ibond)
727 newkind = bond_list(ibond)%bond_kind%kind_number
728 newkind = newkind - sum(bad1(1:newkind))
729 new_bond_list(counter)%bond_kind => new_bond_kind_set(newkind)
733 nbond=
SIZE(new_bond_list), &
734 bond_kind_set=new_bond_kind_set, &
735 bond_list=new_bond_list)
736 DO ibond = 1,
SIZE(new_bond_kind_set)
737 new_bond_kind_set(ibond)%kind_number = ibond
742 DEALLOCATE (bond_list)
743 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") New BOND Count: ", &
744 SIZE(new_bond_list),
SIZE(new_bond_kind_set)
745 IF (iw > 0)
WRITE (iw,
'(2I6)') (new_bond_list(ibond)%a, new_bond_list(ibond)%b, &
746 ibond=1,
SIZE(new_bond_list))
754 DO ikind = 1,
SIZE(molecule_kind_set)
755 molecule_kind => molecule_kind_set(ikind)
758 bend_kind_set=bend_kind_set, &
761 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") Old BEND Count: ", &
762 SIZE(bend_list),
SIZE(bend_kind_set)
763 IF (iw > 0)
WRITE (iw,
'(3I6)') (bend_list(ibend)%a, bend_list(ibend)%b, &
764 bend_list(ibend)%c, ibend=1,
SIZE(bend_list))
766 ALLOCATE (bad1(
SIZE(bend_kind_set)))
768 DO ibend = 1,
SIZE(bend_kind_set)
770 IF (bend_kind_set(ibend)%id_type ==
do_ff_undef) unsetme = .true.
772 DO i = 1,
SIZE(bend_list)
774 bend_list(i)%bend_kind%kind_number == ibend)
THEN
779 IF (.NOT. valid_kind) unsetme = .true.
780 IF (unsetme) bad1(ibend) = 1
782 IF (sum(bad1) /= 0)
THEN
783 counter =
SIZE(bend_kind_set) - sum(bad1)
786 DO ibend = 1,
SIZE(bend_kind_set)
787 IF (bad1(ibend) == 0)
THEN
788 counter = counter + 1
789 new_bend_kind_set(counter) = bend_kind_set(ibend)
793 ALLOCATE (bad2(
SIZE(bend_list)))
795 DO ibend = 1,
SIZE(bend_list)
797 IF (bend_list(ibend)%bend_kind%id_type ==
do_ff_undef) unsetme = .true.
798 IF (bend_list(ibend)%id_type ==
do_ff_undef) unsetme = .true.
799 IF (unsetme) bad2(ibend) = 1
801 IF (sum(bad2) /= 0)
THEN
802 counter =
SIZE(bend_list) - sum(bad2)
803 ALLOCATE (new_bend_list(counter))
805 DO ibend = 1,
SIZE(bend_list)
806 IF (bad2(ibend) == 0)
THEN
807 counter = counter + 1
808 new_bend_list(counter) = bend_list(ibend)
809 newkind = bend_list(ibend)%bend_kind%kind_number
810 newkind = newkind - sum(bad1(1:newkind))
811 new_bend_list(counter)%bend_kind => new_bend_kind_set(newkind)
815 nbend=
SIZE(new_bend_list), &
816 bend_kind_set=new_bend_kind_set, &
817 bend_list=new_bend_list)
818 DO ibend = 1,
SIZE(new_bend_kind_set)
819 new_bend_kind_set(ibend)%kind_number = ibend
824 DEALLOCATE (bend_list)
825 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") New BEND Count: ", &
826 SIZE(new_bend_list),
SIZE(new_bend_kind_set)
827 IF (iw > 0)
WRITE (iw,
'(3I6)') (new_bend_list(ibend)%a, new_bend_list(ibend)%b, &
828 new_bend_list(ibend)%c, ibend=1,
SIZE(new_bend_list))
836 DO ikind = 1,
SIZE(molecule_kind_set)
837 molecule_kind => molecule_kind_set(ikind)
840 ub_kind_set=ub_kind_set, &
843 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") Old UB Count: ", &
844 SIZE(ub_list),
SIZE(ub_kind_set)
845 IF (iw > 0)
WRITE (iw,
'(3I6)') (ub_list(iub)%a, ub_list(iub)%b, &
846 ub_list(iub)%c, iub=1,
SIZE(ub_list))
848 ALLOCATE (bad1(
SIZE(ub_kind_set)))
850 DO iub = 1,
SIZE(ub_kind_set)
852 IF (ub_kind_set(iub)%id_type ==
do_ff_undef) unsetme = .true.
854 DO i = 1,
SIZE(ub_list)
856 ub_list(i)%ub_kind%kind_number == iub)
THEN
861 IF (.NOT. valid_kind) unsetme = .true.
862 IF (unsetme) bad1(iub) = 1
864 IF (sum(bad1) /= 0)
THEN
865 counter =
SIZE(ub_kind_set) - sum(bad1)
868 DO iub = 1,
SIZE(ub_kind_set)
869 IF (bad1(iub) == 0)
THEN
870 counter = counter + 1
871 new_ub_kind_set(counter) = ub_kind_set(iub)
875 ALLOCATE (bad2(
SIZE(ub_list)))
877 DO iub = 1,
SIZE(ub_list)
879 IF (ub_list(iub)%ub_kind%id_type ==
do_ff_undef) unsetme = .true.
880 IF (ub_list(iub)%id_type ==
do_ff_undef) unsetme = .true.
881 IF (unsetme) bad2(iub) = 1
883 IF (sum(bad2) /= 0)
THEN
884 counter =
SIZE(ub_list) - sum(bad2)
885 ALLOCATE (new_ub_list(counter))
887 DO iub = 1,
SIZE(ub_list)
888 IF (bad2(iub) == 0)
THEN
889 counter = counter + 1
890 new_ub_list(counter) = ub_list(iub)
891 newkind = ub_list(iub)%ub_kind%kind_number
892 newkind = newkind - sum(bad1(1:newkind))
893 new_ub_list(counter)%ub_kind => new_ub_kind_set(newkind)
897 nub=
SIZE(new_ub_list), &
898 ub_kind_set=new_ub_kind_set, &
900 DO iub = 1,
SIZE(new_ub_kind_set)
901 new_ub_kind_set(iub)%kind_number = iub
907 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") New UB Count: ", &
908 SIZE(new_ub_list),
SIZE(new_ub_kind_set)
909 IF (iw > 0)
WRITE (iw,
'(3I6)') (new_ub_list(iub)%a, new_ub_list(iub)%b, &
910 new_ub_list(iub)%c, iub=1,
SIZE(new_ub_list))
918 DO ikind = 1,
SIZE(molecule_kind_set)
919 molecule_kind => molecule_kind_set(ikind)
922 torsion_kind_set=torsion_kind_set, &
923 torsion_list=torsion_list)
924 IF (ntorsion > 0)
THEN
925 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") Old TORSION Count: ", &
926 SIZE(torsion_list),
SIZE(torsion_kind_set)
927 IF (iw > 0)
WRITE (iw,
'(4I6)') (torsion_list(itorsion)%a, torsion_list(itorsion)%b, &
928 torsion_list(itorsion)%c, torsion_list(itorsion)%d, itorsion=1,
SIZE(torsion_list))
930 ALLOCATE (bad1(
SIZE(torsion_kind_set)))
932 DO itorsion = 1,
SIZE(torsion_kind_set)
934 IF (torsion_kind_set(itorsion)%id_type ==
do_ff_undef) unsetme = .true.
936 DO i = 1,
SIZE(torsion_list)
938 torsion_list(i)%torsion_kind%kind_number == itorsion)
THEN
943 IF (.NOT. valid_kind) unsetme = .true.
944 IF (unsetme) bad1(itorsion) = 1
946 IF (sum(bad1) /= 0)
THEN
947 counter =
SIZE(torsion_kind_set) - sum(bad1)
950 DO itorsion = 1,
SIZE(torsion_kind_set)
951 IF (bad1(itorsion) == 0)
THEN
952 counter = counter + 1
953 new_torsion_kind_set(counter) = torsion_kind_set(itorsion)
954 i =
SIZE(torsion_kind_set(itorsion)%m)
955 j =
SIZE(torsion_kind_set(itorsion)%k)
956 k =
SIZE(torsion_kind_set(itorsion)%phi0)
957 ALLOCATE (new_torsion_kind_set(counter)%m(i))
958 ALLOCATE (new_torsion_kind_set(counter)%k(i))
959 ALLOCATE (new_torsion_kind_set(counter)%phi0(i))
960 new_torsion_kind_set(counter)%m = torsion_kind_set(itorsion)%m
961 new_torsion_kind_set(counter)%k = torsion_kind_set(itorsion)%k
962 new_torsion_kind_set(counter)%phi0 = torsion_kind_set(itorsion)%phi0
966 ALLOCATE (bad2(
SIZE(torsion_list)))
968 DO itorsion = 1,
SIZE(torsion_list)
970 IF (torsion_list(itorsion)%torsion_kind%id_type ==
do_ff_undef) unsetme = .true.
971 IF (torsion_list(itorsion)%id_type ==
do_ff_undef) unsetme = .true.
972 IF (unsetme) bad2(itorsion) = 1
974 IF (sum(bad2) /= 0)
THEN
975 counter =
SIZE(torsion_list) - sum(bad2)
976 ALLOCATE (new_torsion_list(counter))
978 DO itorsion = 1,
SIZE(torsion_list)
979 IF (bad2(itorsion) == 0)
THEN
980 counter = counter + 1
981 new_torsion_list(counter) = torsion_list(itorsion)
982 newkind = torsion_list(itorsion)%torsion_kind%kind_number
983 newkind = newkind - sum(bad1(1:newkind))
984 new_torsion_list(counter)%torsion_kind => new_torsion_kind_set(newkind)
988 ntorsion=
SIZE(new_torsion_list), &
989 torsion_kind_set=new_torsion_kind_set, &
990 torsion_list=new_torsion_list)
991 DO itorsion = 1,
SIZE(new_torsion_kind_set)
992 new_torsion_kind_set(itorsion)%kind_number = itorsion
996 DO itorsion = 1,
SIZE(torsion_kind_set)
999 DEALLOCATE (torsion_kind_set)
1000 DEALLOCATE (torsion_list)
1001 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") New TORSION Count: ", &
1002 SIZE(new_torsion_list),
SIZE(new_torsion_kind_set)
1003 IF (iw > 0)
WRITE (iw,
'(4I6)') (new_torsion_list(itorsion)%a, new_torsion_list(itorsion)%b, &
1004 new_torsion_list(itorsion)%c, new_torsion_list(itorsion)%d, itorsion=1, &
1005 SIZE(new_torsion_list))
1013 DO ikind = 1,
SIZE(molecule_kind_set)
1014 molecule_kind => molecule_kind_set(ikind)
1017 impr_kind_set=impr_kind_set, &
1018 impr_list=impr_list)
1020 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") Old IMPROPER Count: ", &
1021 SIZE(impr_list),
SIZE(impr_kind_set)
1022 NULLIFY (bad1, bad2)
1023 ALLOCATE (bad1(
SIZE(impr_kind_set)))
1025 DO iimpr = 1,
SIZE(impr_kind_set)
1027 IF (impr_kind_set(iimpr)%id_type ==
do_ff_undef) unsetme = .true.
1028 valid_kind = .false.
1029 DO i = 1,
SIZE(impr_list)
1031 impr_list(i)%impr_kind%kind_number == iimpr)
THEN
1036 IF (.NOT. valid_kind) unsetme = .true.
1037 IF (unsetme) bad1(iimpr) = 1
1039 IF (sum(bad1) /= 0)
THEN
1040 counter =
SIZE(impr_kind_set) - sum(bad1)
1043 DO iimpr = 1,
SIZE(impr_kind_set)
1044 IF (bad1(iimpr) == 0)
THEN
1045 counter = counter + 1
1046 new_impr_kind_set(counter) = impr_kind_set(iimpr)
1050 ALLOCATE (bad2(
SIZE(impr_list)))
1052 DO iimpr = 1,
SIZE(impr_list)
1054 IF (impr_list(iimpr)%impr_kind%id_type ==
do_ff_undef) unsetme = .true.
1055 IF (impr_list(iimpr)%id_type ==
do_ff_undef) unsetme = .true.
1056 IF (unsetme) bad2(iimpr) = 1
1058 IF (sum(bad2) /= 0)
THEN
1059 counter =
SIZE(impr_list) - sum(bad2)
1060 ALLOCATE (new_impr_list(counter))
1062 DO iimpr = 1,
SIZE(impr_list)
1063 IF (bad2(iimpr) == 0)
THEN
1064 counter = counter + 1
1065 new_impr_list(counter) = impr_list(iimpr)
1066 newkind = impr_list(iimpr)%impr_kind%kind_number
1067 newkind = newkind - sum(bad1(1:newkind))
1068 new_impr_list(counter)%impr_kind => new_impr_kind_set(newkind)
1072 nimpr=
SIZE(new_impr_list), &
1073 impr_kind_set=new_impr_kind_set, &
1074 impr_list=new_impr_list)
1075 DO iimpr = 1,
SIZE(new_impr_kind_set)
1076 new_impr_kind_set(iimpr)%kind_number = iimpr
1080 DO iimpr = 1,
SIZE(impr_kind_set)
1083 DEALLOCATE (impr_kind_set)
1084 DEALLOCATE (impr_list)
1085 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") New IMPROPER Count: ", &
1086 SIZE(new_impr_list),
SIZE(new_impr_kind_set)
1094 DO ikind = 1,
SIZE(molecule_kind_set)
1095 molecule_kind => molecule_kind_set(ikind)
1098 opbend_kind_set=opbend_kind_set, &
1099 opbend_list=opbend_list)
1100 IF (nopbend > 0)
THEN
1101 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") Old OPBEND Count: ", &
1102 SIZE(opbend_list),
SIZE(opbend_kind_set)
1103 NULLIFY (bad1, bad2)
1104 ALLOCATE (bad1(
SIZE(opbend_kind_set)))
1106 DO iopbend = 1,
SIZE(opbend_kind_set)
1108 IF (opbend_kind_set(iopbend)%id_type ==
do_ff_undef) unsetme = .true.
1109 valid_kind = .false.
1110 DO i = 1,
SIZE(opbend_list)
1112 opbend_list(i)%opbend_kind%kind_number == iopbend)
THEN
1117 IF (.NOT. valid_kind) unsetme = .true.
1118 IF (unsetme) bad1(iopbend) = 1
1120 IF (sum(bad1) /= 0)
THEN
1121 counter =
SIZE(opbend_kind_set) - sum(bad1)
1124 DO iopbend = 1,
SIZE(opbend_kind_set)
1125 IF (bad1(iopbend) == 0)
THEN
1126 counter = counter + 1
1127 new_opbend_kind_set(counter) = opbend_kind_set(iopbend)
1131 ALLOCATE (bad2(
SIZE(opbend_list)))
1133 DO iopbend = 1,
SIZE(opbend_list)
1135 IF (opbend_list(iopbend)%opbend_kind%id_type ==
do_ff_undef) unsetme = .true.
1136 IF (opbend_list(iopbend)%id_type ==
do_ff_undef) unsetme = .true.
1137 IF (unsetme) bad2(iopbend) = 1
1139 IF (sum(bad2) /= 0)
THEN
1140 counter =
SIZE(opbend_list) - sum(bad2)
1141 ALLOCATE (new_opbend_list(counter))
1143 DO iopbend = 1,
SIZE(opbend_list)
1144 IF (bad2(iopbend) == 0)
THEN
1145 counter = counter + 1
1146 new_opbend_list(counter) = opbend_list(iopbend)
1147 newkind = opbend_list(iopbend)%opbend_kind%kind_number
1148 newkind = newkind - sum(bad1(1:newkind))
1149 new_opbend_list(counter)%opbend_kind => new_opbend_kind_set(newkind)
1153 nopbend=
SIZE(new_opbend_list), &
1154 opbend_kind_set=new_opbend_kind_set, &
1155 opbend_list=new_opbend_list)
1156 DO iopbend = 1,
SIZE(new_opbend_kind_set)
1157 new_opbend_kind_set(iopbend)%kind_number = iopbend
1161 DEALLOCATE (opbend_kind_set)
1162 DEALLOCATE (opbend_list)
1163 IF (iw > 0)
WRITE (iw, *)
" Mol(", ikind,
") New OPBEND Count: ", &
1164 SIZE(new_opbend_list),
SIZE(new_opbend_kind_set)
1176 CALL timestop(handle)