43
44
45
46
48
49
50
51#include "implicit_f.inc"
52#include "comlock.inc"
53
54
55
56#include "mvsiz_p.inc"
57
58
59
60 INTEGER INTFRIC,JLT,NFRIC_P ,NSET ,NPARTFRIC ,NTY ,MFROT ,IORTHFRIC ,NFORTH ,
61 . NFISOT ,JLT_TIED
62 INTEGER IPARTFRICSI(MVSIZ), IPARTFRICMI(MVSIZ), ADPARTS_FRIC(NPARTFRIC+1),
63 . TABCOUPLEPARTS_FRIC(NSET ),TABPARTS_FRIC(NPARTFRIC) ,INDEXORTH(MVSIZ),
64 . INDEXISOT(MVSIZ),IFRICORTH(NSET),IREP_FRICMI(MVSIZ),IX3(MVSIZ),IX4(MVSIZ),
65 . CE_LOC(MVSIZ)
66
68 . viscf ,fric ,
69 . fric_coefs(mvsiz,10),tabcoef_fric(*),fricc(mvsiz), viscffric(mvsiz),
70 . frot_p(10),fricc2(mvsiz), viscffric2(mvsiz),fric_coefs2(mvsiz,10),dir1(mvsiz,3),
71 . dir2(mvsiz,3),dir_fricmi(mvsiz,2),
72 . x1(mvsiz), x2(mvsiz), x3(mvsiz), x4(mvsiz),
73 . y1(mvsiz), y2(mvsiz), y3(mvsiz), y4(mvsiz),
74 . z1(mvsiz), z2(mvsiz), z3(mvsiz), z4(mvsiz)
75
76
77
78 INTEGER I ,J ,K ,IPS ,IPM ,IP ,IPMID ,ADRI ,ADRF ,ADRCOEF ,IPSL ,IPML ,IPI ,IPF ,
79 . L , IREP ,IORTH,NI,NN ,LENC
80 my_real adr ,e1x ,e1y ,e1z ,e2x ,e2y ,e2z ,e3x ,e3y ,e3z ,rx ,ry ,rz ,sx
81 . suma ,s1 ,s2 ,aa ,bb ,v1 ,v2 ,v3 ,vr ,vs
82
83
84 nforth = 0
85 nfisot = 0
86
87
88 DO i=1,jlt-jlt_tied
89 fricc(i) = tabcoef_fric(1)
90 viscffric(i) = tabcoef_fric(2)
91 fricc2(i) = zero
92 viscffric2(i) = zero
93 ENDDO
94 IF(mfrot ==0 ) THEN
95 lenc =2
96 ELSE
97 lenc = 8
98 ENDIF
99 IF(mfrot/=0) THEN
100 DO i=1,jlt-jlt_tied
101 DO j=1,6
102 fric_coefs(i,j) = tabcoef_fric(j+2)
103 fric_coefs2(i,j) = zero
104 ENDDO
105 ENDDO
106 ENDIF
107
108 IF(nty == 24.OR.nty == 25) THEN
109 DO i=1,jlt-jlt_tied
110 viscffric(i) = zero
111 ENDDO
112 ENDIF
113
114 DO i=1,jlt-jlt_tied
115 ipsl = ipartfricsi(i)
116 ipml = ipartfricmi(i)
117
118 IF(ipsl /= 0) THEN
119 ips = tabparts_fric(ipsl)
120 ELSE
121 ips = 0
122 ENDIF
123 IF(ipml /= 0) THEN
124 ipm = tabparts_fric(ipml)
125 ELSE
126 ipm = 0
127 ENDIF
128
129 IF(ips/=0.AND.ipm/=0) THEN
130 IF(ipsl > ipml ) THEN
131 ip = ips
132 ips = ipm
133 ipm = ip
134
135 ip = ipsl
136 ipsl = ipml
137 ipml = ip
138 ENDIF
139
140 adri = adparts_fric(ipsl)
141
142 IF (adri /= 0) THEN
143 adrf = adparts_fric(ipsl+1)-1
144
145
146 adrcoef = 0
147
148 IF(adri == adrf ) THEN
149 ipi = tabcoupleparts_fric(adri)
150 IF(ipi == ipm) THEN
151 adrcoef = adri
152 ELSE
153 adrcoef = 0
154 ENDIF
155 ELSE
156 DO WHILE ((adrf-adri) >= 1)
157 adr = (adrf-adri)*half
158 k = adri + nint(adr)
159 ipmid = tabcoupleparts_fric(k)
160 ipf = tabcoupleparts_fric(adrf)
161 ipi = tabcoupleparts_fric(adri)
162 IF(ipmid == ipm) THEN
163 adrcoef = k
164 EXIT
165 ELSEIF(ipi == ipm) THEN
166 adrcoef = adri
167 EXIT
168 ELSEIF(ipf == ipm) THEN
169 adrcoef = adrf
170 EXIT
171 ELSEIF (ipmid < ipm) THEN
172 adri = k + 1
173 ELSEIF (ipmid > ipm) THEN
174 adrf = k - 1
175 ENDIF
176 ENDDO
177 ENDIF
178
179
180 IF(adrcoef /= 0) THEN
181
182 iorth = ifricorth(adrcoef)
183 l= ce_loc(i)
184 irep = irep_fricmi(i)
185
186 IF(iorth > 0 .AND.irep /=10 ) THEN
187 nforth = nforth +1
188 indexorth(nforth) = i
189
190 fricc(i) = tabcoef_fric(lenc+2*lenc*(adrcoef-1)+1)
191 fricc2(i)= tabcoef_fric(2*lenc*adrcoef+1)
192 IF(nty == 24.OR.nty == 25 ) THEN
193 viscffric(i) = zero
194 viscffric2(i) = zero
195 ELSE
196 viscffric(i) = tabcoef_fric(lenc+2*lenc*(adrcoef-1)+2)
197 viscffric2(i) = tabcoef_fric(2*lenc*adrcoef+2)
198 ENDIF
199 IF (mfrot > 0) THEN
200 DO j=1,6
201 fric_coefs(i,j) = tabcoef_fric(lenc+2*lenc*adrcoef+j+2)
202 fric_coefs2(i,j) = tabcoef_fric(2*lenc*adrcoef+j+2)
203 ENDDO
204 ENDIF
205 ELSE
206 nfisot = nfisot +1
207 indexisot(nfisot) = i
208
209 fricc(i) = tabcoef_fric(lenc+2*lenc*(adrcoef-1)+1)
210 IF(nty == 24.OR.nty == 25 ) THEN
211 viscffric(i) = zero
212 ELSE
213 viscffric(i) = tabcoef_fric(lenc+2*lenc*(adrcoef-1)+2)
214 ENDIF
215 IF (mfrot > 0) THEN
216 DO j=1,6
217 fric_coefs(i,j) = tabcoef_fric(2*lenc*adrcoef+j+2)
218 ENDDO
219 ENDIF
220 ENDIF
221 ELSE
222 nfisot = nfisot +1
223 indexisot(nfisot) = i
224 ENDIF
225
226
227 ELSE
228
229 nfisot = nfisot +1
230 indexisot(nfisot) = i
231 ENDIF
232
233 ELSE
234
235 nfisot = nfisot +1
236 indexisot(nfisot) = i
237 ENDIF
238
239 ENDDO
240
241
242 IF(nforth > 0 ) THEN
243 DO k=1,nforth
244 i = indexorth(k )
245 l= ce_loc(i)
246
247 IF (ix3(i) /= ix4(i)) THEN
248
249 e1x= x2(i) + x3(i) - x1(i) - x4(i)
250 e1y= y2(i) + y3(i) - y1(i) - y4(i)
251 e1z= z2(i) + z3(i) - z1(i) - z4(i)
252 e2x= x3(i) + x4(i) - x1(i) - x2(i)
253 e2y= y3(i) + y4(i) - y1(i) - y2(i)
254 e2z= z3(i) + z4(i) - z1(i) - z2(i)
255
256 ELSE
257
258 e1x= x2(i) - x1(i)
259 e1y= y2(i) - y1(i)
260 e1z= z2(i) - z1(i)
261 e2x= x3(i) - x1(i)
262 e2y= y3(i) - y1(i)
263 e2z= z3(i) - z1(i)
264 ENDIF
265 rx = e1x
266 ry = e1y
267 rz = e1z
268 sx = e2x
269 sy = e2y
270 sz = e2z
271
272 e3x = e1y*e2z-e1z*e2y
273 e3y = e1z*e2x-e1x*e2z
274 e3z = e1x*e2y-e1y*e2x
275
276 suma = e3x*e3x+e3y*e3y+e3z*e3z
277 suma = one/
max(sqrt(suma),em20)
278 e3x = e3x*suma
279 e3y = e3y*suma
280 e3z = e3z*suma
281
282 s1 = e1x*e1x+e1y*e1y+e1z*e1z
283 s2 = e2x*e2x+e2y*e2y+e2z*e2z
284 suma = sqrt(s1/s2)
285 e1x = e1x + (e2y *e3z-e2z*e3y)*suma
286 e1y = e1y + (e2z *e3x-e2x*e3z)*suma
287 e1z = e1z + (e2x *e3y-e2y*e3x)*suma
288
289 suma = e1x*e1x+e1y*e1y+e1z*e1z
290 suma = one/
max(sqrt(suma),em20)
291 e1x = e1x*suma
292 e1y = e1y*suma
293 e1z = e1z*suma
294
295 e2x = e3y * e1z - e3z * e1y
296 e2y = e3z * e1x - e3x * e1z
297 e2z = e3x * e1y - e3y * e1x
298
299
300 aa = dir_fricmi(i,1)
301 bb = dir_fricmi(i,2)
302 irep = irep_fricmi(i)
303
304 IF(irep == 1) THEN
305 v1 = aa*rx + bb*sx
306 v2 = aa*ry + bb*sy
307 v3 = aa*rz + bb*sz
308 vr = v1*e1x+ v2*e1y + v3*e1z
309 vs = v1*e2x+ v2*e2y + v3*e2z
310 suma=
max(sqrt(vr*vr + vs*vs) , em20)
311 aa = vr/suma
312 bb = vs/suma
313 ENDIF
314
315 dir1(i,1) = aa*e1x+bb*e2x
316 dir1(i,2) = aa*e1y+bb*e2y
317 dir1(i,3) = aa*e1z+bb*e2z
318
319 dir2(i,1) = aa*e2x-bb*e1x
320 dir2(i,2) = aa*e2y-bb*e1y
321 dir2(i,3) = aa*e2z-bb*e1z
322
323 ENDDO
324 ENDIF
325
326
327 RETURN