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