43
44
45
47 USE mat_elem_mod
48 USE elbufdef_mod
50 use element_mod , only : nixs
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "mvsiz_p.inc"
59#include "com01_c.inc"
60#include "com04_c.inc"
61#include "param_c.inc"
62#include "scr19_c.inc"
63
64
65
66
67 INTEGER IPARG(NPARG,*),IXS(NIXS,*),IPARTS(*),
68 . IXS10(6,*) ,TAG_SKINS6(*) ,NSKIN , NPF(*),H3D_PART(*),
69 . IS_WRITTEN_SKIN(*)
70 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
71 my_real,
INTENT(IN),
TARGET :: tf(*)
72 my_real,
INTENT(IN),
TARGET :: t6gps(6,*),x(3,*)
73 my_real,
INTENT(OUT),
TARGET :: skin_scalar(*)
74 CHARACTER(LEN=NCHARLINE100):: KEYWORD
75 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
76
77
78
79 INTEGER I,ISOLNOD,ICS,NG,N,J
80 INTEGER
81 . MLW ,NEL ,NFT ,IAD ,ITY ,
82 . NPT ,JALE ,ISMSTR ,JEUL ,JTUR ,
83 . JTHE ,JLAG ,JMULT ,JHBE ,JIVF ,
84 . NVAUX ,JPOR ,KCVT ,JCLOSE ,JPLASOL ,
85 . IREP ,IINT ,IGTYP ,ISRAT ,ISROT ,
86 . ICSEN ,ISORTH ,ISORTHG ,IFAILURE,JSMS ,
87 . NN,NN1,N1,IOK_PART(MVSIZ),IS_WRITTEN_VALUE(MVSIZ)
88 INTEGER NC(10,MVSIZ),PWR(7),LL,IXSK(5,6*MVSIZ)
89 INTEGER FACES(4,6),NS(4),JJ,II,K1,K2,T3(3),T6(6),TIA4S(3,4)
90 INTEGER IFUNC(MAXFUNC),IDEB
91 INTEGER NPAR,NFUNC,MX,NSK,IL,IR,IS,IT,NFAIL,IFAIL,NSKI,NIPAR
92 my_real evar(3,mvsiz),value(mvsiz)
93 TYPE(BUF_LAY_) ,POINTER :: BUFLY
94 TYPE(BUF_FAIL_) ,POINTER :: FBUF
95 DATA pwr/1,2,4,8,16,32,64/
96 DATA faces/4,3,2,1,
97 . 5,6,7,8,
98 . 1,2,6,5,
99 . 3,4,8,7,
100 . 2,3,7,6,
101 . 1,5,8,4/
102 DATA tia4s/3,5,6,
103 . 2,4,5,
104 . 1,6,4,
105 . 4,6,5/
106
107
108
109
110
111
112
113
114
115
116 DO ng=1,ngroup
118 2 mlw ,nel ,nft ,iad ,ity ,
119 3 npt ,jale ,ismstr ,jeul ,jtur ,
120 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
121 5 nvaux ,jpor ,kcvt ,jclose ,jplasol ,
122 6 irep ,iint ,igtyp ,israt ,isrot ,
123 7 icsen ,isorth ,isorthg ,ifailure,jsms )
124
125 IF(mlw == 13 .OR. mlw == 0.OR.ity /= 1) cycle
126
127 IF (igtyp==6 .OR. igtyp==14 ) THEN
128 isolnod = iparg(28,ng)
129 ics = iparg(17,ng)
130 nsk = 0
131 iok_part(1:nel) = 0
132 IF(isolnod == 4)THEN
133 DO i=1,nel
134 n = i + nft
135 nc(1,i)=ixs(2,n)
136 nc(2,i)=ixs(4,n)
137 nc(3,i)=ixs(7,n)
138 nc(4,i)=ixs(6,n)
139 ENDDO
140
141 DO i=1,nel
142 n = i + nft
143 ll=tag_skins6(n)
144 jj = 5
145 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
146
147 nsk = nsk + 1
148 ixsk(1,nsk) = iparts(n)
149 ixsk(2,nsk) = nc(3,i)
150 ixsk(3,nsk) = nc(2,i)
151 ixsk(4,nsk) = nc(1,i)
152 ixsk(5,nsk) = ixsk(4,nsk)
153 END IF
154
155 jj = 4
156 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
157 nsk = nsk + 1
158 ixsk(1,nsk) = iparts(n)
159 ixsk(2,nsk) = nc(2,i)
160 ixsk(3,nsk) = nc(3,i)
161 ixsk(4,nsk) = nc(4,i)
162 ixsk(5,nsk) = ixsk(4,nsk)
163 END IF
164
165 jj = 3
166 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
167 nsk = nsk + 1
168 ixsk(1,nsk) = iparts(n)
169 ixsk(2,nsk) = nc(1,i)
170 ixsk(3,nsk) = nc(4,i)
171 ixsk(4,nsk) = nc(3,i)
172 ixsk(5,nsk) = ixsk(4,nsk)
173 END IF
174
175 jj = 6
176 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
177 nsk = nsk + 1
178 ixsk(1,nsk) = iparts(n)
179 ixsk(2,nsk) = nc(1,i)
180 ixsk(3,nsk) = nc(2,i)
181 ixsk(4,nsk) = nc(4,i)
182 ixsk(5,nsk) = ixsk(4,nsk)
183 END IF
184 ENDDO
185 ELSEIF(isolnod == 6)THEN
186 ELSEIF(isolnod == 10)THEN
187 DO i=1,nel
188 n = i + nft
189 nc(1,i)=ixs(2,n)
190 nc(2,i)=ixs(4,n)
191 nc(3,i)=ixs(7,n)
192 nc(4,i)=ixs(6,n)
193 nn1 = n - numels8
194 nc(5:10,i) = ixs10(1:6,nn1)
195 ENDDO
196
197 DO i=1,nel
198 n = i + nft
199 ll=tag_skins6(n)
200
201 jj = 5
202 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
203 t6(1:3) = nc(1:3,i)
204 t6(4:6) = nc(5:7,i)
205 DO j=1,4
206 nsk = nsk + 1
207 ixsk(1,nsk) = iparts(n)
208 t3(1:3) = t6(tia4s(1:3,j))
209 ixsk(2:4,nsk) = t3(1:3)
210 ixsk(5,nsk) = ixsk(4,nsk)
211 END DO
212 END IF
213
214 jj = 4
215 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
216 t6(1:3) = nc(2:4,i)
217 t6(4) = nc(6,i)
218 t6(5) = nc(10,i)
219 t6(6) = nc(9,i)
220 DO j=1,4
221 nsk = nsk + 1
222 ixsk(1,nsk) = h3d_part(iparts(n))
223 t3(1:3) = t6(tia4s(1:3,j))
224 ixsk(2:4,nsk) = t3(1:3)
225 ixsk(5,nsk) = ixsk(4,nsk)
226 END DO
227 END IF
228
229 jj = 3
230 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
231 t6(1) = nc(3,i)
232 t6(2) = nc(1,i)
233 t6(3) = nc(4,i)
234 t6(4) = nc(7,i)
235 t6(5) = nc(8,i)
236 t6(6) = nc(10,i)
237 DO j=1,4
238 nsk = nsk + 1
239 ixsk(1,nsk) = iparts(n)
240 t3(1:3) = t6(tia4s(1:3,j))
241 ixsk(2:4,nsk) = t3(1:3)
242 ixsk(5,nsk) = ixsk(4,nsk)
243 END DO
244 END IF
245
246 jj = 6
247 IF(mod(ll,pwr(jj+1))/pwr(jj) == 0) THEN
248 t6(1:2) = nc(1:2,i)
249 t6(3) = nc(4,i)
250 t6(4) = nc(5,i)
251 t6(5) = nc(9,i)
252 t6(6) = nc(8,i)
253 DO j=1,4
254 nsk = nsk + 1
255 ixsk(1,nsk) = iparts(n)
256 t3(1:3) = t6(tia4s(1:3,j))
257 ixsk(2:4,nsk) = t3(1:3)
258 ixsk(5,nsk) = ixsk(4,nsk)
259 END DO
260 END IF
261 ENDDO
262
263 ELSE
264 DO i=1,nel
265 n = i + nft
266 nc(1:8,i) = ixs(2:9,n)
267 ll=tag_skins6(n)
268
269 DO jj=1,6
270 IF(mod(ll,pwr(jj+1))/pwr(jj) /= 0)cycle
271 DO ii=1,4
272 ns(ii)=nc(faces(ii,jj),i)
273 END DO
274
275 DO k1=1,3
276 DO k2=k1+1,4
277 IF(ns(k2)==ns(k1))ns(k2)=0
278 END DO
279 END DO
280 nn=0
281 DO k1=1,4
282 n1=ns(k1)
283 IF(n1/=0)THEN
284 nn=nn+1
285 ns(nn)= n1
286 END IF
287 END DO
288 IF (nn>2) THEN
289 nsk = nsk + 1
290 ixsk(1,nsk) = iparts(n)
291 ixsk(2:4,nsk) = ns(1:3)
292 IF (nn > 3) THEN
293 ixsk(5,nsk) = ns(4)
294 ELSE
295 ixsk(5,nsk) = ixsk(4,nsk)
296 END IF
297 END IF
298 ENDDO
299 ENDDO
300 ENDIF
301
302 IF (nsk>0) THEN
303 il = 1
304 ir = 1
305 is = 1
306 it = 1
307 bufly => elbuf_tab(ng)%BUFLY(il)
308 nfail = elbuf_tab(ng)%BUFLY(il)%NFAIL
309 fbuf => bufly%FAIL(ir,is,it)
310 mx = ixs(1,1+nft)
311 ideb = 0
312 DO ii=1,nsk,mvsiz
313 nski =
min(nsk-ideb,mvsiz)
314 n = 1+ideb
316 DO i=1,nski
317 value(i) = zero
318 is_written_value(i) = 0
319 iok_part(i) = h3d_part(ixsk(1,i+ideb))
320 ENDDO
321
322 IF (keyword == 'FLDZ/OUTER') THEN
323
324 is_written_value(1:nski) = 1
325 DO ifail=1,nfail
326 IF (fbuf%FLOC(ifail)%ILAWF == 7) THEN
327 npar = mat_param(mx)%FAIL(ifail)%NUPARAM
328 nfunc = mat_param(mx)%FAIL(ifail)%NFUNC
329 nipar = mat_param(mx)%FAIL(ifail)%NIPARAM
330 DO i=1,nfunc
331 ifunc(i) = mat_param(mx)%FAIL(ifail)%IFUNC(i)
332 END DO
334 1 nski ,npar ,nfunc ,ifunc ,
335 2 npf ,tf ,mat_param(mx)%FAIL(ifail)%UPARAM,
336 3 evar ,VALUE ,nipar ,mat_param(mx)%FAIL(ifail)%IPARAM,
337 4 bufly%LBUF(ir,is,it)%PLA)
338
339 ENDIF
340 ENDDO
341 DO i=1,nski
342 skin_scalar(nskin+i) = value(i)
343 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_value(i)
344 END DO
345
346 ELSEIF (keyword == 'FLDF/OUTER') THEN
347
348 is_written_value(1:nski) = 1
349 DO ifail=1,nfail
350 IF (fbuf%FLOC(ifail)%ILAWF == 7) THEN
351 npar = mat_param(mx)%FAIL(ifail)%NUPARAM
352 nipar = mat_param(mx)%FAIL(ifail)%NIPARAM
353 nfunc = mat_param(mx)%FAIL(ifail)%NFUNC
354 DO i=1,nfunc
355 ifunc(i) = mat_param(mx)%FAIL(ifail)%IFUNC(i)
356 END DO
358 1 nski ,npar ,nfunc ,ifunc ,
359 2 npf ,tf ,mat_param(mx)%FAIL(ifail)%UPARAM,
360 3 evar ,VALUE ,nipar ,mat_param(mx)%FAIL(ifail)%IPARAM,
361 4 bufly%LBUF(ir,is,it)%PLA)
362
363 ENDIF
364 ENDDO
365 DO i=1,nski
366 skin_scalar(nskin+i) = value(i)
367 IF(iok_part(i) == 1 ) is_written_skin(nskin+i) = is_written_value(i)
368 END DO
369 END IF
370 nskin = nskin + nski
371 ideb = ideb + nski
372 END DO
373 END IF
374 ENDIF
375 END DO
376
377 RETURN
subroutine tens3dto2d(nel, ixc, x, ten3, ten2)
subroutine idx_fld_sol(nel, nuparam, nfunc, ifunc, npf, tf, uparam, eps3, fld_idx, niparam, iparam, pla)
subroutine dam_fld_sol(nel, nuparam, nfunc, ifunc, npf, tf, uparam, eps3, dam, niparam, iparam, pla)
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
integer, parameter ncharline100