57
58
59
60
61
62
63
64
65 USE elbufdef_mod
70
71
72
73#include "implicit_f.inc"
74
75
76
77#include "com01_c.inc"
78#include "com04_c.inc"
79#include "intstamp_c.inc"
80#include "scr03_c.inc"
81#include "scr16_c.inc"
82#include "param_c.inc"
83#include "sphcom.inc"
84
85
86
87 INTEGER,INTENT(IN) :: SMONVOL, SVOLMON, ISPMD,AIRBAGS_NODE_ID_SHIFT, AIRBAGS_TOTAL_FVM_IN_H3D
88 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP) :: ELBUF_TAB
89 INTEGER,INTENT(IN) :: SW
91 . nodal_vector(3*numnod),mass(*),geo(npropg,numgeo),
92 . pm(npropm,nummat),anin(*),temp(*),rflow(*),volmon(svolmon), diag_sms(*),ms(numnod),
93 . pdama2(2,*),x(3,numnod),stifr(*),stifn(numnod),a(3,numnod),d(3,numnod),v(3,numnod), cont(3,*),
94 . fcontg(3,*), fint(3,numnod), fext(3,numnod),fncont(3,*),fncontg(3,*),
95 . ftcont(3,*),ftcontg(3,*),fncont2(3,*), dr(3,numnod),dxancg(3,*),
96 . fanreac(6,*),fcluster(3,*),mcluster(3,*),vr(3,numnod),fopt(6,*),vgaz(3,*),
97 . fcont_max(3,*),fncontp2(3,*),ftcontp2(3,*)
99 INTEGER IPARG(NPARG,*),IFUNC,NODE_ID(*),
100 . INFO1,INFO2,IS_WRITTEN_NODE(NUMNOD),H3D_PART(*),ITAB(NUMNOD),
101 . IXC(NIXC,NUMELC),IXTG(NIXTG,NUMELTG),IPARTC(*),IPARTTG(*),IFLOW(*),
102 . IXS(NIXS,NUMELS),IXQ(NIXQ,NUMELQ),NV46,MONVOL(SMONVOL),NPBY(NNPBY,*),
103 . IPARI(NPARI,NINTER),WEIGHT(*),NODGLOB(*)
104 CHARACTER(LEN=NCHARLINE100):: KEYWORD
105 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
106 my_real ,
INTENT(IN) :: ar(3,numnod)
107 my_real ,
INTENT(IN) ,
DIMENSION(3,NUMNOD) :: x_c
108 INTEGER ,INTENT(IN) :: IPARTSP(NUMSPH),IPARTR(NUMELR),IPARTP(NUMELP),
109 . IPARTT(NUMELT),IPARTS(NUMELS),IPARTQ(NUMELQ)
110 INTEGER ,INTENT(IN) :: KXSP(,NUMSPH),IXR(NIXR,NUMELR),IXP(NIXP,NUMELP),
111 . IXT(NIXT,NUMELT)
112 INTEGER ,INTENT(IN) :: N_H3D_PART_LIST
114 INTEGER, INTENT(INOUT) :: IS_WRITTEN_NODE_FVM(AIRBAGS_TOTAL_FVM_IN_H3D)
115 TYPE(FVBAG_DATA),INTENT(IN) :: FVDATA_P(NFVBAG)
116
117
118
119 INTEGER I,J,K,N,IOK_PART(NUMNOD)
121
122
123 VALUE = zero
124
125 DO i=1,numnod
126 node_id(i) = itab(i)
127 iok_part(i) = 0
128 is_written_node(i) = 0
129 ENDDO
130
131 IF(n_h3d_part_list /= 0)THEN
132 DO i=1,numsph
133 IF ( h3d_part(ipartsp(i)) == 1) THEN
134 IF(kxsp(2,i) > 0 )iok_part(kxsp(2,i)) = 1
135 ENDIF
136 ENDDO
137
138 DO i=1,numelr
139 IF ( h3d_part(ipartr(i)) == 1) THEN
140 DO j=2,4
141 IF(ixr(j,i) > 0 )iok_part(ixr(j,i)) = 1
142 ENDDO
143 ENDIF
144 ENDDO
145
146 DO i=1,numelp
147 IF ( h3d_part(ipartp(i)) == 1) THEN
148 DO j=2,4
149 IF(ixp(j,i) > 0 )iok_part(ixp(j,i)) = 1
150 ENDDO
151 ENDIF
152 ENDDO
153
154 DO i=1,numelt
155 IF ( h3d_part(ipartt(i)) == 1) THEN
156 DO j=2,4
157 IF(ixt(j,i) > 0 )iok_part(ixt(j,i)) = 1
158 ENDDO
159 ENDIF
160 ENDDO
161
162 DO i=1,numelc
163 IF ( h3d_part(ipartc(i)) == 1) THEN
164 DO j=2,5
165 IF(ixc(j,i) > 0 )iok_part(ixc(j,i)) = 1
166 ENDDO
167 ENDIF
168 ENDDO
169
170 DO i=1,numeltg
171 IF ( h3d_part(iparttg(i)) == 1) THEN
172 DO j=2,4
173 IF(ixtg(j,i) > 0 )iok_part(ixtg(j,i)) = 1
174 ENDDO
175 ENDIF
176 ENDDO
177
178 DO i=1,numels
179 IF ( h3d_part(iparts(i)) == 1) THEN
180 DO j=2,9
181 IF(ixs(j,i) > 0 )iok_part(ixs(j,i)) = 1
182 ENDDO
183 ENDIF
184 ENDDO
185
186 DO i=1,numelq
187 IF ( h3d_part(ipartq(i)) == 1) THEN
188 DO j=2,5
189 IF(ixq(j,i) > 0 )iok_part(ixq(j,i)) = 1
190 ENDDO
191 ENDIF
192 ENDDO
193 ELSE
194 iok_part(1:numnod) = 1
195 ENDIF
196
197
198 IF(keyword == 'VEL') THEN
199
200 DO i=1,numnod
201 value(1) = v(1,i)
202 value(2) = v(2,i)
203 value(3) = v(3,i)
205 ENDDO
206
207
208
209
210
216 . airbags_node_id_shift )
217 ENDIF
218 ENDIF
219
220
221 ELSEIF(keyword == 'DIS') THEN
222
223 DO i=1,numnod
224 value(1) = d(1,i)
225 value(2) = d(2,i)
226 value(3) = d(3,i)
228 ENDDO
229
230 ELSEIF(keyword == 'ACC') THEN
231
232 DO i=1,numnod
233 value(1) = a(1,i)
234 value(2) = a(2,i)
235 value(3) = a(3,i)
237 ENDDO
238
239 ELSEIF(keyword == 'CONT'.AND.keyword /= 'CONT/TMAX')THEN
240
241 IF(nintstamp==0)THEN
242 DO i=1,numnod
243 value(1) = cont(1,i)
244 value(2) = cont(2,i)
245 value(3) = cont(3,i)
247 ENDDO
248 ELSE
249 DO i=1,numnod
250 k=nodglob(i)
251 value(1) = cont(1,i) + fcontg(1,k)
252 value(2) = cont(2,i) + fcontg(2,k)
253 value(3) = cont(3,i) + fcontg(3,k)
255 ENDDO
256 END IF
257
258 ELSEIF(keyword == 'CONT/TMAX')THEN
259
260 IF(nintstamp==0.OR.nspmd==1)THEN
261 DO i=1,numnod
262 value(1) = fcont_max(1,i)
263 value(2) = fcont_max(2,i)
264 value(3) = fcont_max(3,i)
266 ENDDO
267 ELSE
268 DO i=1,numnod
269 value(1) = zero
270 value(2) = zero
271 value(3) = zero
273 ENDDO
274 ENDIF
275
276 ELSEIF(keyword == 'FINT') THEN
277
278 DO i=1,numnod
279 value(1) = fint(1,i)
280 value(2) = fint(2,i)
281 value(3) = fint(3,i)
283 ENDDO
284
285 ELSEIF(keyword == 'FEXT') THEN
286
287 DO i=1,numnod
288 value(1) = fext(1,i)
289 value(2) = fext(2,i)
290 value(3) = fext(3,i)
292 ENDDO
293
294 ELSEIF(keyword == 'FOPT/FORCE') THEN
295
296 DO i=1,numnod
297 is_written_node(i) = 0
298 ENDDO
299 DO n=1,nrbody
300 i = npby(1,n)
301 IF (i>0) THEN
302 IF (weight(i)==1) THEN
303 value(1) = fopt(1,nsect+n)
304 value(2) = fopt(2,nsect+n)
305 value(3) = fopt(3,nsect+n)
307 ENDIF
308 ENDIF
309 ENDDO
310
311 ELSEIF(keyword == 'FOPT/MOMENT') THEN
312
313 DO i=1,numnod
314 is_written_node(i) = 0
315 ENDDO
316 DO n=1,nrbody
317 i = npby(1,n)
318 IF (i>0) THEN
319 IF (weight(i)==1) THEN
320 value(1) = fopt(4,nsect+n)
321 value(2) = fopt(5,nsect+n)
322 value(3) = fopt(6,nsect+n)
324 ENDIF
325 ENDIF
326 ENDDO
327
328 ELSEIF(keyword == 'VROT') THEN
329
330 IF(iroddl/=0) THEN
331 DO i=1,numnod
332 value(1) = vr(1,i)
333 value(2) = vr(2,i)
334 value(3) = vr(3,i)
336 ENDDO
337 ENDIF
338
339 ELSEIF(keyword == 'FVEL') THEN
340
341
342 ELSEIF(keyword == 'FRES') THEN
343
344
345 ELSEIF(keyword == 'PCONT/NORMAL') THEN
346
347 IF(nintstamp==0)THEN
348 DO i=1,numnod
349 value(1) = fncont(1,i)
350 value(2) = fncont(2,i)
351 value(3) = fncont(3,i)
353 ENDDO
354 ELSE
355 DO i=1,numnod
356 k=nodglob(i)
357 value(1) = fncont(1,i)+fncontg(1,k)
358 value(2) = fncont(2,i)+fncontg(2,k)
359 value(3) = fncont(3,i)+fncontg(3,k)
361 ENDDO
362 ENDIF
363
364 ELSEIF(keyword == 'MAXPCONT/NORMAL')THEN
365
366 IF(nintstamp==0.OR.nspmd==1)THEN
367 DO i=1,numnod
368 value(1) = fncont_max(3*(i-1)+1)
369 value(2) = fncont_max(3*(i-1)+2)
370 value(3) = fncont_max(3*(i-1)+3)
372 ENDDO
373 ELSE
374 DO i=1,numnod
375 value(1) = zero
376 VALUE(2) = zero
377 value(3) = zero
379 ENDDO
380 ENDIF
381
382 ELSEIF(keyword == 'PCONT/TANGENT') THEN
383
384 IF(nintstamp==0)THEN
385 DO i=1,numnod
386 value(1) = ftcont(1,i)
387 value(2) = ftcont(2,i)
388 value(3) = ftcont(3,i)
390 ENDDO
391 ELSE
392 DO i=1,numnod
393 k=nodglob(i)
394 value(1) = ftcont(1,i)+ftcontg(1,k)
395 value(2) = ftcont(2,i)+ftcontg(2,k)
396 value(3) = ftcont(3,i)+ftcontg(3,k)
398 ENDDO
399 ENDIF
400
401 ELSEIF(keyword == 'MAXPCONT/TANGENT')THEN
402
403 IF(nintstamp==0.OR.nspmd==1)THEN
404 DO i=1,numnod
405 value(1) = ftcont_max(3*(i-1)+1)
406 value(2) = ftcont_max(3*(i-1)+2)
407 value(3) = ftcont_max(3*(i-1)+3)
409 ENDDO
410 ELSE
411 DO i=1,numnod
412 value(1) = zero
413 value(2) = zero
414 value(3) = zero
416 ENDDO
417 ENDIF
418
419 ELSEIF(keyword == 'CONT2') THEN
420
421 DO i=1,numnod
422 value(1) = fncont2(1,i)
423 value(2) = fncont2(2,i)
424 value(3) = fncont2(3,i)
426 ENDDO
427
428 ELSEIF(keyword == 'CONT2/MOMENT') THEN
429
430 DO i=1,numnod
431 value(1) = mcont2(1,i)
432 value(2) = mcont2(2,i)
433 value(3) = mcont2(3,i)
435 ENDDO
436
437 ELSEIF(keyword == 'PCONT2/NORMAL') THEN
438
439 DO i=1,numnod
440 value(1) = fncontp2(1,i)
441 value(2) = fncontp2(2,i)
442 value(3) = fncontp2(3,i)
444 ENDDO
445
446 ELSEIF(keyword == 'PCONT2/TANGENT') THEN
447
448 DO i=1,numnod
449 value(1) = ftcontp2(1,i)
450 value(2) = ftcontp2(2,i)
451 value(3) = ftcontp2(3,i)
453 ENDDO
454
455 ELSEIF(keyword == 'CONT2/TMAX') THEN
456
457 DO i=1,numnod
458 value(1) = fcont2_max(3*(i-1)+1)
459 value(2) = fcont2_max(3*(i-1)+2)
460 value(3) = fcont2_max(3*(i-1)+3)
462 ENDDO
463
464 ELSEIF(keyword == 'CONT2/TMIN') THEN
465
466 DO i=1,numnod
467 value(1) = fcont2_min(3*(i-1)+1)
468 value(2) = fcont2_min(3*(i-1)+2)
469 value(3) = fcont2_min(3*(i-1)+3)
471 ENDDO
472
473 ELSEIF(keyword == 'MAXPCONT2/NORMAL') THEN
474
475 DO i=1,numnod
476 VALUE(1) = fncont2_max(3*(i-1)+1)
477 value(2) = fncont2_max(3*(i-1)+2)
478 value(3) = fncont2_max(3*(i-1)+3)
480 ENDDO
481
482 ELSEIF(keyword == 'MAXPCONT2/TANGENT') THEN
483
484 DO i=1,numnod
485 value(1) = ftcont2_max(3*(i-1)+1)
486 value(2) = ftcont2_max(3*(i-1)+2)
487 VALUE(3) = ftcont2_max(3*(i-1)+3)
489 ENDDO
490
491 ELSEIF(keyword == 'MINPCONT2/NORMAL') THEN
492
493 DO i=1,numnod
494 value(1) = fncont2_min(3*(i-1)+1)
495 value(2) = fncont2_min(3*(i-1)+2)
496 value(3) = fncont2_min(3*(i-1)+3)
498 ENDDO
499
500 ELSEIF(keyword == 'MINPCONT2/TANGENT') THEN
501
502 DO i=1,numnod
503 value(1) = ftcont2_min(3*(i-1)+1)
504 value(2) = ftcont2_min(3*(i-1)+2)
505 value(3) = ftcont2_min(3*(i-1)+3)
507 ENDDO
508
509 ELSEIF(keyword == 'DROT')THEN
510
511 IF( (idrot == 1 .OR. isecut>0 .OR. iisrot>0 .OR. impose_dr>0) .AND. iroddl/=0)THEN
512 DO i=1,numnod
513 value(1) = dr(1,i)
514 value(2) = dr(2,i)
515 value(3) = dr(3,i)
517 ENDDO
518 ENDIF
519
520 ELSEIF (keyword == 'DXANC') THEN
521
522 DO i=1,numnod
523 value(1) = dxancg(1,i)
524 value(2) = dxancg(2,i)
525 value(3) = dxancg(3,i)
527 ENDDO
528
529 ELSEIF (keyword == 'GVEL') THEN
530
531 IF(ialelag > 0 ) THEN
532 DO i=1,numnod
533 value(1) = vgaz(1,i)
534 value(2) = vgaz(2,i)
535 value(3) = vgaz(3,i)
537 ENDDO
538 ENDIF
539
540 ELSEIF(keyword == 'FREAC') THEN
541
542 DO i=1,numnod
543 value(1)=fanreac(1,i)
544 value(2)=fanreac(2,i)
545 value(3)=fanreac(3,i)
547 ENDDO
548
549 ELSEIF(keyword == 'MREAC') THEN
550
551 DO i=1,numnod
552 value(1)=fanreac(4,i)
553 value(2)=fanreac(5,i)
554 value(3)=fanreac(6,i)
556 ENDDO
557
558 ELSEIF(keyword == 'CLUSTER/FORCE') THEN
559
560 DO i=1,numnod
561 value(1)=fcluster(1,i)
562 value(2)=fcluster(2,i)
563 value(3)=fcluster(3,i)
565 ENDDO
566
567 ELSEIF(keyword == 'CLUSTER/MOMENT') THEN
568
569 DO i=1,numnod
570 value(1)=mcluster(1,i)
571 value(2)=mcluster(2,i)
572 value(3)=mcluster(3,i)
574 ENDDO
575
576 ELSEIF(keyword == 'ZVEL') THEN
577 CALL h3d_velvecc22(elbuf_tab,iparg,1,ixs,ixq,itab,iok_part,is_written_node,nodal_vector)
578
579
580 ELSEIF(keyword == 'ZFVEL') THEN
581 CALL h3d_velvecz22(elbuf_tab,iparg,ipari,igrnod,x,ixs,ixq,itab,1,iok_part,is_written_node,nodal_vector)
582
583
584 ELSEIF(keyword == 'ZMOM') THEN
585 CALL h3d_velvecc22(elbuf_tab,iparg,2,ixs,ixq,itab,iok_part,is_written_node,nodal_vector)
586
587
588 ELSEIF(keyword == 'ZFP') THEN
589 CALL h3d_velvecz22(elbuf_tab,iparg,ipari,igrnod,x,ixs,ixq,itab,2,iok_part,is_written_node
590
591
592 ELSEIF(keyword == 'ZFINT') THEN
593 CALL h3d_velvecc22(elbuf_tab,iparg,3,ixs,ixq,itab,iok_part,is_written_node,nodal_vector)
594
595 ELSEIF(keyword == 'VEL/TMAX') THEN
596
597 DO i=1,numnod
598 j = 3*(i-1)+1
599 value(1) = tm_vel(j)
600 value(2) = tm_vel(j+1)
601 value(3) = tm_vel(j+2)
603 ENDDO
604
605 ELSEIF(keyword == 'DIS/TMAX') THEN
606
607 DO i=1,numnod
608 j = 3*(i-1)+1
609 value(1) = tm_dis(j)
610 value(2) = tm_dis(j+1)
611 value(3) = tm_dis(j+2)
613 ENDDO
614
615 ELSEIF(keyword == 'AROT') THEN
616
617 IF(iroddl/=0) THEN
618 DO i=1,numnod
619 value(1) = ar(1,i)
620 value(2) = ar(2,i)
621 value(3) = ar(3,i)
623 ENDDO
624 ENDIF
625
626 ELSEIF(keyword == 'VEL/GRID') THEN
627
628 IF(sw > 0) THEN
629 DO i=1,numnod
630 value(1) = w(1,i)
631 value(2) = w(2,i)
632 value(3) = w(3,i)
634 ENDDO
635 ENDIF
636
637 ELSEIF(keyword == 'SHELL_OFFSET') THEN
638
639 DO i=1,numnod
640 value(1:3) = x_c(1:3,i) - x(1:3,i)
642 ENDDO
643
644 ENDIF
645
646 RETURN
subroutine anim_nodal_vector_fvmbags(key, wa4, monvol, volmon, fvdata, nfvbag, smonvol, svolmon, airbags_total_fvm_in_h3d, is_written_node_fvm, airbags_node_id_shift)
subroutine h3d_velvecc22(elbuf_tab, iparg, iflg, ixs, ixq, itab, iok_part, is_written_node, nodal_vector)
subroutine h3d_velvecz22(elbuf_tab, iparg, ipari, igrnod, x, ixs, ixq, itab, iflg, iok_part, is_written_node, nodal_vector)
subroutine h3d_write_vector(iok_part, is_written, vector, i, offset, nft, value)
integer airbags_total_fvm_in_h3d
integer, parameter ncharline100