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