42
43
44
49 USE matparam_def_mod
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69#include "implicit_f.inc"
70
71
72
73#include "vect01_c.inc"
74#include "com01_c.inc"
75#include "com04_c.inc"
76#include "units_c.inc"
77#include "param_c.inc"
78#include "scr17_c.inc"
79#include "r2r_c.inc"
80
81
82
83 INTEGER ND, IDX
84 INTEGER IGEO(NPROPGI,NUMGEO),(NPROPMI,NUMMAT), IXQ(NIXQ,NUMELQ),(NPARG,*),
85 . EADD(*),DD_IAD(NSPMD+1,*),INUM(9,*),INDEX(*),
86 . CEP(*),IPARTQ(*),ITR1(*),
87 . IQUAOFF(*)
88 INTEGER, INTENT(IN) :: PRINT_FLAG
89 TYPE (INIVOL_STRUCT_) , DIMENSION(NUM_INIVOL) :: INIVOL
90 my_real pm(npropm,nummat), geo(npropg,numgeo)
91
92 TYPE (GROUP_) , DIMENSION(NGRQUAD) :: IGRQUAD
93 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF
94 TYPE() ,DIMENSION(NUMMAT),INTENT(IN) :: MAT_PARAM
95
96
97
98 INTEGER
99 . NGR1, MLN, NG, N, MID, PID, II, NEL, NE1,
100 . P, NEL_PREC, LB_L, IGT, JHBE, I,
101 . ML1, , MT1, MT2,NB,INEG,IEOS,
102 . MODE, WORK(70000),NN,J,
103 . IPLAST,IFAIL,NFAIL,
104 . NGP(NSPMD+1),ICPRE,IPARTR2R,ISMST,TAG_INVOL,
105 . JALE_FROM_MAT,JALE_FROM_PROP
106 INTEGER ID,MFT,ILOC,JJ
107 CHARACTER(LEN=NCHARTITLE)::TITR
108 LOGICAL lFOUND
109
110
111
112 ngr1 = ngroup + 1
113
114
115
116 idx=idx+nd*(nspmd+1)
117 CALL zeroin(1,nd*(nspmd+1),dd_iad(1,nspgroup+1))
118
119 nft = 0
120
121 DO n=1,nd
122 DO p=1,nspmd+1
123 dd_iad(p,nspgroup+n) = 0
124 END DO
125 ENDDO
126
127
128
129
130 DO n=1,nd
131 nel = eadd(n+1)-eadd(n)
132
133 DO i = 1, nel
134 index(i) = i
135 inum(1,i)=ipartq(nft+i)
136 inum(2,i)=ixq(1,nft+i)
137 inum(3,i)=ixq(2,nft+i)
138 inum(4,i)=ixq(3,nft+i)
139 inum(5,i)=ixq(4,nft+i)
140 inum(6,i)=ixq(5,nft+i)
141 inum(7,i)=ixq(6,nft+i)
142 inum(8,i)=ixq(7,nft+i)
143 inum(9,i)=iquaoff(nft+i)
144 ENDDO
145
146 mode=0
147 CALL my_orders( mode, work, cep(nft+1), index, nel , 1)
148 DO i = 1, nel
149 ipartq(i+nft)=inum(1,index(i))
150 ixq(1,i+nft)=inum(2,index(i))
151 ixq(2,i+nft)=inum(3,index(i))
152 ixq(3,i+nft)=inum(4,index(i))
153 ixq(4,i+nft)=inum(5,index(i))
154 ixq(5,i+nft)=inum(6,index(i))
155 ixq(6,i+nft)=inum(7,index(i))
156 ixq(7,i+nft)=inum(8,index(i))
157 iquaoff(i+nft)=inum(9,index(i))
158 itr1(nft+index(i)) = nft+i
159 ENDDO
160
161
162 p = cep(nft+index(1))
163 nb = 1
164 DO i = 2, nel
165 IF (cep(nft+index(i))/=p) THEN
166 dd_iad(p+1,nspgroup+n) = nb
167 nb = 1
168 p = cep(nft+index(i))
169 ELSE
170 nb = nb + 1
171 ENDIF
172 ENDDO
173 dd_iad(p+1,nspgroup+n) = nb
174 DO p = 2, nspmd
175 dd_iad(p,nspgroup+n) = dd_iad(p,nspgroup+n)
176 . + dd_iad(p-1,nspgroup+n)
177 ENDDO
178 DO p = nspmd+1,2,-1
179 dd_iad(p,nspgroup+n) = dd_iad(p-1,nspgroup+n)+1
180 ENDDO
181 dd_iad(1,nspgroup+n) = 1
182
183
184
185 DO i = 1, nel
186 index(i) = cep(nft+index(i))
187 ENDDO
188 DO i = 1, nel
189 cep(nft+i) = index(i)
190 ENDDO
191 nft = nft + nel
192 ENDDO
193
194
195
196
197 DO i=1,nsurf
198 nn=igrsurf(i)%NSEG
199 DO j=1,nn
200 IF(igrsurf(i)%ELTYP(j) == 2)
201 . igrsurf(i)%ELEM(j) = itr1(igrsurf(i)%ELEM(j))
202 ENDDO
203 ENDDO
204
205
206
207 DO i=1,ngrquad
208 nn=igrquad(i)%NENTITY
209 DO j=1,nn
210 igrquad(i)%ENTITY(j) = itr1(igrquad(i)%ENTITY(j))
211 ENDDO
212 ENDDO
213
214 ineg = 0
215 DO 300 n=1,nd
216
217 nft = 0
218 lb_l = lbufel
219 DO p = 1, nspmd
220 ngp(p)=0
221 nel = dd_iad(p+1,nspgroup+n)-dd_iad(p,nspgroup+n)
222 IF (nel>0) THEN
223 nel_prec = dd_iad(p,nspgroup+n)-dd_iad(1,nspgroup+n)
224 ngp(p)=ngroup
225 ng = (nel-1)/nvsiz + 1
226 DO 220 i=1,ng
227
228 ngroup=ngroup+1
229 ii = eadd(n)+nft
230 mid = ixq(1,ii)
231 pid = ixq(6,ii)
232 ipartr2r = 0
233 IF (nsubdom>0) ipartr2r =
tag_mat(mid)
234 npt =1
235 jhbe=0
236 jpor=0
237 jcvt = 0
238 isorth=0
239 iplast= 1
240 icpre=0
241 ismst = 0
242 igt = 0
243 IF(pid/=0)THEN
244 IF(igeo(10,pid)==17 .OR.
245 . (n2d==1.AND.igeo(10,pid)==22)) THEN
246 npt = igeo(4,pid)
247 jhbe = igeo(10,pid)
248 ENDIF
249 icpre = igeo(13,pid)
250 igt = igeo(11,pid)
251 istrain= igeo(12,pid)
252 jcvt = igeo(16,pid)
253 isorth = igeo(17,pid)
254 ismst = igeo(5,pid)
255 IF (igt /= 15) iplast = igeo(9,pid)
256 IF(igt==15) jpor=2*nint(geo(28,pid))
257 ENDIF
258 mln = nint(pm(19,abs(mid)))
259 IF(mid<0)THEN
260 IF(mln==6.AND.jpor/=2)mln=17
261 IF(mln==46)mln=47
262 mid=abs(mid)
263 ixq(1,ii)=mid
264 ineg = 1
265 ENDIF
266 jale_from_mat = nint(pm(72,mid))
267 jale_from_prop = igeo(62,pid)
268 jale =
max(jale_from_mat, jale_from_prop)
269 jlag=0
270 IF(jale==0.AND.mln/=18)jlag=1
271 jeul=0
272 IF(jale==2)THEN
273 jale=0
274 jeul=1
275 ENDIF
276
277
278
279
280 IF(jale == 1)THEN
281 ale%REZON%NUM_NUVAR_MAT =
ale%REZON%NUM_NUVAR_MAT + mat_param(mid)%REZON%NUM_NUVAR_MAT
282 ale%REZON%NUM_NUVAR_EOS =
ale%REZON%NUM_NUVAR_EOS + mat_param(mid)%REZON%NUM_NUVAR_EOS
283 ENDIF
284
285
286 IF(jale == 1)THEN
287 iparg(81,ngroup) = mat_param(mid)%REZON%NUM_NUVAR_MAT
288 iparg(82,ngroup) = mat_param(mid)%REZON%NUM_NUVAR_EOS
289 ENDIF
290
291 jtur=nint(pm(70,mid))
292 jthe=nint(pm(71,mid))
293
294 jmult=0
295 IF(mln==20)THEN
296 jmult=nint(pm(20,mid))
297 mt1=nint(pm(21,mid))
298 mt2=nint(pm(22,mid))
299 ml1=nint(pm(19,mt1))
300 ml2=nint(pm(19,mt2))
301 ELSE
302 jmult=0
303 ml1=0
304 ml2=0
305 ENDIF
306
307
308
309 IF (igt == 14.OR.igt == 6) THEN
310 IF (icpre < 0) icpre =0
311 IF (ismst < 0) ismst =4
312 IF (jcvt<0) THEN
313 jcvt = 0
314 IF (jlag>0) jcvt = 1
315 END IF
316 END IF
317
318
319
320
322 CALL fretitl2(titr,igeo(npropgi-ltitr+1,pid),ltitr)
323 IF (ismst /= 2 .AND. ismst /= 4) THEN
325 . msgtype=msgerror,
326 . anmode=aninfo_blind_2,
328 . c1=titr,
329 . prmod=msg_cumu)
330 ENDIF
331 IF (mln==68 ) THEN
333 . msgtype=msgerror,
334 . anmode=aninfo_blind_1,
336 . c1=titr)
337 ENDIF
338 IF (jhbe==17.AND.(jale+jeul /= 0)) THEN
340 . msgtype=msgwarning,
341 . anmode=aninfo_blind_2,
343 . c1=titr,
344 . prmod=msg_cumu)
345 jhbe = 2
346 IF (geo(13,pid) == zero) geo(13,pid) = em01
347 npt = 1
348 igeo(4,pid) = npt
349 igeo(10,pid) = jhbe
350 END IF
351
352 IF(jcvt/=0.AND.(jlag==0.OR.mln==20))THEN
354 . igeo(npropgi-ltitr+1,pid),ltitr)
356 . msgtype=msgwarning,
357 . anmode=aninfo_blind_1,
359 . c1=titr,
360 . i2=ixq(7,ii))
361 jcvt=0
362 END IF
363 israt=ipm(3,mid)
364 ifail = 0
365 nfail = mat_param(mid)%NFAIL
366 istrain = 1
367 ieos=ipm(4,mid)
368
369
370
371
372 lfound=.false.
373 tag_invol=0
375
376 mft = eadd(n)-1 + nft
377 ne1=
min( nvsiz, nel + nel_prec - nft)
378 DO iloc = 1 ,ne1
380 IF(
inivol(jj)%PART_ID == ipartq(iloc+mft))
THEN
381 tag_invol = 1
382 lfound=.true.
383 EXIT
384 ENDIF
385 IF(lfound)EXIT
386 ENDDO
387 END DO
388 END IF
389
390
391
392
393 CALL zeroin(1,nparg,iparg(1,ngroup))
394
395 iparg(1,ngroup) = mln
396 ne1 =
min( nvsiz, nel + nel_prec - nft)
397 iparg(2,ngroup) = ne1
398 iparg(3,ngroup)= eadd(n)-1 + nft
399 iparg(4,ngroup) = 1
400
401 iparg(5,ngroup) = 2
402 iparg(6,ngroup) = npt
403 iparg(7,ngroup) = jale
404 iparg(11,ngroup)= jeul
405 iparg(12,ngroup)= jtur
406 IF(jale == 0 .AND. jeul == 0)THEN
407 iparg(13,ngroup)=-abs(jthe)
408 ELSE
409 iparg(13,ngroup)=+abs(jthe)
410 ENDIF
411 iparg(14,ngroup)= jlag
412 iparg(18,ngroup)= mid
413 iparg(20,ngroup)= jmult
414
415 IF (mln == 151) iparg(20, ngroup) = ipm(20, mid)
416 iparg(10,ngroup)= icpre
417 iparg(23,ngroup)= jhbe
418 iparg(24,ngroup)= 0
419 iparg(25,ngroup)= ml1
420 iparg(26,ngroup)= ml2
421 iparg(27,ngroup)= jpor
422 iparg(29,ngroup)= iplast
423
424 iparg(32,ngroup)= p-1
425
426 iparg(34,ngroup)= nint(pm(10,mid))
427 iparg(37,ngroup)= jcvt
428 iparg(38,ngroup)= igt
429 iparg(40,ngroup)= israt
430 iparg(42,ngroup)= isorth
431 iparg(43,ngroup)= ifail
432 iparg(44,ngroup)= istrain
433
434 iparg(53,ngroup) = tag_invol
435
436 iparg(55,ngroup)= ieos
437 iparg(62,ngroup)= pid
438
439 IF (nsubdom>0) iparg(77,ngroup)= ipartr2r
440 nft = nft + ne1
441 220 CONTINUE
442 ngp(p)=ngroup-ngp(p)
443 ENDIF
444 ENDDO
445
446 ngp(nspmd+1)=0
447 DO p = 1, nspmd
448 ngp(nspmd+1)=ngp(nspmd+1)+ngp(p)
449 dd_iad(p,nspgroup+n)=ngp(p)
450 END DO
451 dd_iad(nspmd+1,nspgroup+n)=ngp(nspmd+1)
452
453 300 CONTINUE
454
455 nspgroup = nspgroup + nd
456
457 IF (ineg==1) THEN
458 DO i = 1, numelq
459 ixq(1,i) = abs(ixq(1,i))
460 ENDDO
461 ENDIF
462
463 IF(print_flag>6) THEN
464 WRITE(iout,1000)
465 WRITE(iout,1001)(n,iparg(1,n),iparg(2,n),iparg(3,n)+1,
466 + iparg(4,n),iparg(6,n),iparg(7,n),iparg(11,n),
467 + iparg(12,n),iparg(13,n),iparg(23,n),
468 + iparg(24,n),iparg(18,n),iparg(27,n),
469 + iparg(29,n)+1,iparg(43,n),iparg(55,n),
470 + n=ngr1,ngroup)
471 ENDIF
473 . msgtype=msgwarning,
474 . anmode=aninfo_blind_2,
475 . prmod=msg_print)
477 . msgtype=msgerror,
478 . anmode=aninfo_blind_2,
479 . prmod=msg_print)
480
481 1000 FORMAT(//,7x,'4-NODE 2D SOLID ELEMENT GROUPS'/
482 + 7x,'---------------------'//
483 +' GROUP MAT. ELEM. FIRST BUFFER GAUSS',
484 +' A.L.E. EULER TURBU. THERM. HOUR- INTEG',
485 +' VAR POROUS PLASTI. FAILURE IEOS '/
486 +' # LAW NUMBER ELEM. ADDRESS POINTS',
487 +' FLAG FLAG FLAG FLAG GLASS FLAG',
488 +' MID MEDIUM FLAG FLAG TYPE '/)
489 1001 FORMAT(17(i10))
490
491 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
type(inivol_struct_), dimension(:), allocatable inivol
integer, parameter nchartitle
integer, dimension(:), allocatable tag_mat
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
subroutine zeroin(n1, n2, ma)