42
43
44
46
47
48
49#include "implicit_f.inc"
50#include "comlock.inc"
51
52
53
54#include "mvsiz_p.inc"
55
56
57
58 INTEGER I_MEM, NSN, NSNROLD,IGAP,NIN,ISYM
59 INTEGER ,MULNSN,NOINT,INACTI,,ESHIFT
60 INTEGER IRECT(4,*),NSV(*),CAND_N(*),CAND_E(*),CAND_A(*)
61 INTEGER PROV_N(MVSIZ),PROV_E(MVSIZ),IFPEN(*), (*),
62 . NBINFLG(*),MBINFLG(*),II_STOK
63
65 . xa(3,*), cand_p(*), gap_s(*), gap_m(*), gap_sh(*),
66 . marge, gap, gapmin, gapmax,curv_max(*)
67
68
69
70 INTEGER I,K_STOK,I_STOK,N,NE,J,ISS1,ISS2,IMS1,IMS2
71 INTEGER IX1(MVSIZ), IX2(MVSIZ), IX3(MVSIZ), IX4(MVSIZ)
72
74 . x1(mvsiz), x2(mvsiz), x3(mvsiz), x4(mvsiz),
75 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
76 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz),
77 . xi(mvsiz), yi(mvsiz), zi(mvsiz), stif(mvsiz),
78 . pene(mvsiz), gapv(mvsiz)
79 INTEGER BITGET
81
82 CALL i20cor3t(j_stok ,xa ,irect ,nsv ,prov_e ,
83 1 prov_n ,igap ,gap ,x1 ,x2 ,
84 2 x3 ,x4 ,y1 ,y2 ,y3 ,
85 3 y4 ,z1 ,z2 ,z3 ,z4 ,
86 4 xi ,yi ,zi ,stif ,ix1 ,
87 5 ix2 ,ix3 ,ix4 ,nsn ,gap_s ,
88 6 gap_m ,gapv ,gapmax,gapmin,curv_max,
89 7 nin ,gap_sh)
90
91 CALL i7pen3(j_stok ,marge ,x1 ,x2 ,x3 ,
92 . x4 ,y1 ,y2 ,y3 ,y4 ,
93 . z1 ,z2 ,z3 ,z4 ,xi ,
94 . yi ,zi ,pene ,ix1 ,ix2 ,
95 . ix3 ,ix4 ,igap ,gap ,gapv )
96
97
98
99 IF(isym==1)THEN
100 DO i=1,j_stok
101 n = prov_n(i)
102 ne = prov_e(i)+eshift
103 ims1 =
bitget(mbinflg(ne),0)
104 ims2 =
bitget(mbinflg(ne),1)
105 IF(n <= nsn) THEN
106 iss1 =
bitget(nbinflg(nsv(n)),0)
107 iss2 =
bitget(nbinflg(nsv(n)),1)
108 ELSE
109 iss1 =
bitget(nint(xrem(12,n-nsn)),0)
110 iss2 =
bitget(nint(xrem(12,n-nsn)),1)
111 ENDIF
112 IF((ims1 == 0 .and. iss1==0).or.
113 . (ims2 == 0 .and. iss2==0))THEN
114 pene(i)=zero
115 ENDIF
116 ENDDO
117 ENDIF
118
119
120
121 IF(inacti==5.OR.inacti==6.OR.inacti==7.OR.ifq>0)THEN
122 DO i=1,j_stok
123 IF(pene(i)/=zero)THEN
124 n = prov_n(i)
125 ne = prov_e(i)+eshift
126 IF(n>nsn) THEN
127
128 n = oldnum(n-nsn)+nsn
129 IF(n==nsn) n = nsn+nsnrold+1
130 END IF
131 j = cand_a(n)
132 DO WHILE(j<=cand_a(n+1)-1)
133 IF(cand_e(j)==ne)THEN
134 pene(i)=zero
135 j=cand_a(n+1)
136 ELSE
137 j=j+1
138 ENDIF
139 ENDDO
140 ENDIF
141 ENDDO
142 ENDIF
143
144 k_stok = 0
145 DO i=1,j_stok
146 IF(pene(i)/=zero) k_stok = k_stok + 1
147 ENDDO
148 IF(k_stok==0)RETURN
149
150#include "lockon.inc"
151 i_stok = ii_stok
152 IF(i_stok+k_stok>mulnsn) THEN
153 i_mem = 2
154#include "lockoff.inc"
155 RETURN
156 ENDIF
157 ii_stok = i_stok + k_stok
158#include "lockoff.inc"
159
160 IF(ifq > 0 .AND.
161 . (inacti == 5 .OR. inacti ==6 .OR. inacti ==7))THEN
162 DO i=1,j_stok
163 IF(pene(i)/=0.0)THEN
164 i_stok = i_stok + 1
165 cand_n(i_stok) = prov_n(i)
166 cand_e(i_stok) = prov_e(i)+eshift
167 ifpen(i_stok) = 0
168 cand_p(i_stok) = zero
169 ENDIF
170 ENDDO
171 ELSEIF(ifq > 0)THEN
172 DO i=1,j_stok
173 IF(pene(i)/=zero)THEN
174 i_stok = i_stok + 1
175 cand_n(i_stok) = prov_n(i)
176 cand_e(i_stok) = prov_e(i)+eshift
177 ifpen(i_stok) = 0
178 ENDIF
179 ENDDO
180 ELSEIF(inacti==5.OR.inacti==6.OR.inacti==7)THEN
181 DO i=1,j_stok
182 IF(pene(i)/=zero)THEN
183 i_stok = i_stok + 1
184 cand_n(i_stok) = prov_n(i)
185 cand_e(i_stok) = prov_e(i)+eshift
186 cand_p(i_stok) = zero
187 ENDIF
188 ENDDO
189 ELSE
190 DO i=1,j_stok
191 IF(pene(i)/=zero)THEN
192 i_stok = i_stok + 1
193 cand_n(i_stok) = prov_n(i)
194 cand_e(i_stok) = prov_e(i)+eshift
195 ENDIF
196 ENDDO
197 ENDIF
198
199 RETURN
subroutine i20cor3t(jlt, xa, irect, nsv, cand_e, cand_n, igap, gap, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, stif, ix1, ix2, ix3, ix4, nsn, gap_s, gap_m, gapv, gapmax, gapmin, curv_max, nin, gap_sh)
subroutine i7pen3(marge, gapv, n1, n2, n3, pene, nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4, p1, p2, p3, p4, last)