1      logical function pre_dih(lang,mang,nang,ldih,mdih,ndih)
2c
3c $Id$
4c
5      implicit none
6c
7      integer mang,mdih
8      integer nang,ndih
9      integer lang(3,mang),ldih(4,mdih)
10      integer i,j,k,ltemp
11c
12c
13c     determine the list of dihedrals
14c     -------------------------------
15c
16      pre_dih=.false.
17c
18      do 1 i=1,nang-1
19      do 2 j=i+1,nang
20      if(lang(2,i).eq.lang(1,j).and.lang(3,i).eq.lang(2,j)) then
21      if(ndih.ge.mdih) return
22      ndih=ndih+1
23      ldih(1,ndih)=lang(1,i)
24      ldih(2,ndih)=lang(2,i)
25      ldih(3,ndih)=lang(3,i)
26      ldih(4,ndih)=lang(3,j)
27      else
28      if(lang(2,i).eq.lang(3,j).and.lang(3,i).eq.lang(2,j)) then
29      if(ndih.ge.mdih) return
30      ndih=ndih+1
31      ldih(1,ndih)=lang(1,i)
32      ldih(2,ndih)=lang(2,i)
33      ldih(3,ndih)=lang(3,i)
34      ldih(4,ndih)=lang(1,j)
35      else
36      if(lang(1,i).eq.lang(2,j).and.lang(2,i).eq.lang(3,j)) then
37      if(ndih.ge.mdih) return
38      ndih=ndih+1
39      ldih(1,ndih)=lang(1,j)
40      ldih(2,ndih)=lang(1,i)
41      ldih(3,ndih)=lang(2,i)
42      ldih(4,ndih)=lang(3,i)
43      else
44      if(lang(1,i).eq.lang(2,j).and.lang(2,i).eq.lang(1,j)) then
45      if(ndih.ge.mdih) return
46      ndih=ndih+1
47      ldih(1,ndih)=lang(3,j)
48      ldih(2,ndih)=lang(1,i)
49      ldih(3,ndih)=lang(2,i)
50      ldih(4,ndih)=lang(3,i)
51      endif
52      endif
53      endif
54      endif
55    2 continue
56    1 continue
57c
58      do 3 i=1,ndih
59      if(ldih(2,i).gt.ldih(3,i)) then
60      ltemp=ldih(2,i)
61      ldih(2,i)=ldih(3,i)
62      ldih(3,i)=ltemp
63      ltemp=ldih(1,i)
64      ldih(1,i)=ldih(4,i)
65      ldih(4,i)=ltemp
66      endif
67    3 continue
68c
69      do 4 i=1,ndih-1
70      do 5 j=i+1,ndih
71      if(ldih(2,i).gt.ldih(2,j).or.
72     + (ldih(2,i).eq.ldih(2,j).and.ldih(3,i).gt.ldih(3,j)).or.
73     + (ldih(2,i).eq.ldih(2,j).and.ldih(3,i).eq.ldih(3,j).and.
74     +  ldih(1,i).gt.ldih(1,j)).or.
75     + (ldih(2,i).eq.ldih(2,j).and.ldih(3,i).eq.ldih(3,j).and.
76     +  ldih(1,i).eq.ldih(1,j).and.ldih(4,i).gt.ldih(4,j))) then
77      do 6 k=1,4
78      ltemp=ldih(k,i)
79      ldih(k,i)=ldih(k,j)
80      ldih(k,j)=ltemp
81    6 continue
82      endif
83    5 continue
84    4 continue
85c
86      pre_dih=.true.
87      return
88      end
89