41 . ELBUF_TAB ,NODAL_VECTOR ,IFUNC ,IPARG ,GEO ,
42 . MASS ,PM ,ITAB ,NODE_ID ,
43 . INFO1 ,INFO2 ,IS_WRITTEN_NODE,H3D_PART ,IPARTC ,
44 . IPARTTG ,IXC ,IXTG ,TEMP ,IFLOW ,
45 . RFLOW ,IXS ,IXQ ,NV46 ,MONVOL ,
46 . DIAG_SMS ,MS ,PDAMA2 ,X ,VOLMON ,
47 . STIFR ,STIFN ,A ,D ,V ,
48 . CONT ,FCONTG ,FINT ,FEXT ,KEYWORD ,
49 . FNCONT ,FNCONTG ,FTCONT ,FTCONTG ,FNCONT2 ,
50 . DR ,DXANCG ,FANREAC ,FCLUSTER ,MCLUSTER ,
51 . VR ,FOPT ,NPBY ,VGAZ ,
52 . IPARI ,IGRNOD ,WEIGHT ,NODGLOB ,FCONT_MAX ,
53 . FNCONTP2 ,FTCONTP2 ,AR ,IPARTSP ,IPARTR ,
54 . IPARTP ,IPARTT ,IPARTS ,IPARTQ ,KXSP ,
55 . IXR ,IXP ,IXT ,N_H3D_PART_LIST ,NODAL_VECTOR_FVM,
56 . IS_WRITTEN_NODE_FVM,AIRBAGS_TOTAL_FVM_IN_H3D,SMONVOL ,SVOLMON ,ISPMD ,
57 . FVDATA_P ,AIRBAGS_NODE_ID_SHIFT ,W ,SW ,X_C )
71 use element_mod ,
only : nixs,nixq,nixc,nixt,nixr,nixp,nixtg
75#include "implicit_f.inc"
81#include "intstamp_c.inc"
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,*)
100INTENT(IN) :: W(3,SW/3)
101 INTEGER IPARG(NPARG,*),,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),
114 INTEGER ,
INTENT(IN) :: N_H3D_PART_LIST
115 my_real,
INTENT(INOUT) :: NODAL_VECTOR_FVM(3,AIRBAGS_TOTAL_FVM_IN_H3D)
116 INTEGER,
INTENT(INOUT) :: IS_WRITTEN_NODE_FVM(AIRBAGS_TOTAL_FVM_IN_H3D)
117 TYPE(
fvbag_data),
INTENT(IN) :: FVDATA_P(NFVBAG)
121 INTEGER I,J,K,N,IOK_PART(NUMNOD)
130 is_written_node(i) = 0
133 IF(n_h3d_part_list /= 0)
THEN
135 IF ( h3d_part(ipartsp(i)) == 1)
THEN
136 IF(kxsp(2,i) > 0 )iok_part(kxsp(2,i)) = 1
141 IF ( h3d_part(ipartr(i)) == 1)
THEN
143 IF(ixr(j,i) > 0 )iok_part(ixr(j,i)) = 1
149 IF ( h3d_part(ipartp(i)) == 1)
THEN
151 IF(ixp(j,i) > 0 )iok_part(ixp(j,i)) = 1
157 IF ( h3d_part(ipartt(i)) == 1)
THEN
159 IF(ixt(j,i) > 0 )iok_part(ixt(j,i)) = 1
165 IF ( h3d_part(ipartc(i)) == 1)
THEN
167 IF(ixc(j,i) > 0 )iok_part(ixc(j,i)) = 1
173 IF ( h3d_part(iparttg(i)) == 1)
THEN
175 IF(ixtg(j,i) > 0 )iok_part(ixtg(j,i)) = 1
181 IF ( h3d_part(iparts(i)) == 1)
THEN
183 IF(ixs(j,i) > 0 )iok_part(ixs(j,i)) = 1
189 IF ( h3d_part(ipartq(i)) == 1)
THEN
191 IF(ixq(j,i) > 0 )iok_part(ixq(j,i)) = 1
196 iok_part(1:numnod) = 1
200 IF(keyword ==
'VEL')
THEN
213 IF(airbags_total_fvm_in_h3d > 0)
THEN
214 is_written_node_fvm(1:airbags_total_fvm_in_h3d)=0
215 IF(nfvbag>0 .AND. ispmd == 0 .AND. airbags_total_fvm_in_h3d > 0)
THEN
217 . smonvol, svolmon ,airbags_total_fvm_in_h3d,is_written_node_fvm,
218 . airbags_node_id_shift )
223 ELSEIF(keyword ==
'DIS')
THEN
232 ELSEIF(keyword ==
'ACC')
THEN
241 ELSEIF(keyword ==
'CONT'.AND.keyword /=
'CONT/TMAX')
THEN
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)
260 ELSEIF(keyword ==
'CONT/TMAX')
THEN
262 IF(nintstamp==0.OR.nspmd==1)
THEN
264 value(1) = fcont_max(1,i)
265 value(2) = fcont_max(2,i)
266 value(3) = fcont_max(3,i)
278 ELSEIF(keyword ==
'FINT')
THEN
287 ELSEIF(keyword ==
'FEXT')
THEN
296 ELSEIF(keyword ==
'FOPT/FORCE')
THEN
299 is_written_node(i) = 0
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)
313 ELSEIF(keyword ==
'FOPT/MOMENT')
THEN
316 is_written_node(i) = 0
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)
330 ELSEIF(keyword ==
'VROT')
THEN
341 ELSEIF(keyword ==
'FVEL')
THEN
344 ELSEIF(keyword ==
'FRES')
THEN
347 ELSEIF(keyword ==
'PCONT/NORMAL')
THEN
351 value(1) = fncont(1,i)
352 value(2) = fncont(2,i)
353 value(3) = fncont(3,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)
366 ELSEIF(keyword ==
'MAXPCONT/NORMAL')
THEN
368 IF(nintstamp==0.OR.nspmd==1)
THEN
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)
384 ELSEIF(keyword ==
'PCONT/TANGENT')
THEN
388 value(1) = ftcont(1,i)
389 value(2) = ftcont(2,i)
390 value(3) = ftcont(3,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)
403 ELSEIF(keyword ==
'MAXPCONT/TANGENT')
THEN
405 IF(nintstamp==0.OR.nspmd==1)
THEN
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)
421 ELSEIF(keyword ==
'CONT2')
THEN
424 value(1) = fncont2(1,i)
425 value(2) = fncont2(2,i)
426 value(3) = fncont2(3,i)
430 ELSEIF(keyword ==
'CONT2/MOMENT')
THEN
433 value(1) = mcont2(1,i)
434 value(2) = mcont2(2,i)
435 value(3) = mcont2(3,i)
439 ELSEIF(keyword ==
'PCONT2/NORMAL')
THEN
442 value(1) = fncontp2(1,i)
443 value(2) = fncontp2(2,i)
444 value(3) = fncontp2(3,i)
448 ELSEIF(keyword ==
'PCONT2/TANGENT')
THEN
451 value(1) = ftcontp2(1,i)
452 value(2) = ftcontp2(2,i)
453 value(3) = ftcontp2(3,i)
457 ELSEIF(keyword ==
'CONT2/TMAX')
THEN
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)
466 ELSEIF(keyword ==
'CONT2/TMIN')
THEN
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)
475 ELSEIF(keyword ==
'MAXPCONT2/NORMAL')
THEN
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)
484 ELSEIF(keyword ==
'MAXPCONT2/TANGENT')
THEN
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)
493 ELSEIF(keyword ==
'MINPCONT2/NORMAL')
THEN
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)
502 ELSEIF(keyword ==
'MINPCONT2/TANGENT')
THEN
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)
511 ELSEIF(keyword ==
'DROT')
THEN
513 IF( (idrot == 1 .OR. isecut>0 .OR. iisrot>0 .OR. impose_dr>0) .AND. iroddl/=0)
THEN
522 ELSEIF (keyword ==
'DXANC')
THEN
525 value(1) = dxancg(1,i)
526 value(2) = dxancg(2,i)
527 value(3) = dxancg(3,i)
531 ELSEIF (keyword ==
'GVEL')
THEN
533 IF(ialelag > 0 )
THEN
542 ELSEIF(keyword ==
'FREAC')
THEN
545 value(1)=fanreac(1,i)
546 value(2)=fanreac(2,i)
547 value(3)=fanreac(3,i)
551 ELSEIF(keyword ==
'MREAC')
THEN
554 value(1)=fanreac(4,i)
555 value(2)=fanreac(5,i)
560 ELSEIF(keyword == 'cluster/force
') THEN
563 VALUE(1)=FCLUSTER(1,I)
564 VALUE(2)=FCLUSTER(2,I)
565 VALUE(3)=FCLUSTER(3,I)
566 CALL H3D_WRITE_VECTOR(IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR,I,0,0,VALUE)
569 ELSEIF(KEYWORD == 'cluster/moment
') THEN
572 VALUE(1)=MCLUSTER(1,I)
573 VALUE(2)=MCLUSTER(2,I)
574 VALUE(3)=MCLUSTER(3,I)
575 CALL H3D_WRITE_VECTOR(IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR,I,0,0,VALUE)
578 ELSEIF(KEYWORD == 'zvel
') THEN
579 CALL H3D_VELVECC22(ELBUF_TAB,IPARG,1,IXS,IXQ,ITAB,IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR)
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)
586 ELSEIF(KEYWORD == 'zmom
') THEN
587 CALL H3D_VELVECC22(ELBUF_TAB,IPARG,2,IXS,IXQ,ITAB,IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR)
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)
594 ELSEIF(KEYWORD == 'zfint
') THEN
595 CALL H3D_VELVECC22(ELBUF_TAB,IPARG,3,IXS,IXQ,ITAB,IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR)
597 ELSEIF(KEYWORD == 'vel/tmax
') THEN
602 VALUE(2) = TM_VEL(J+1)
603 VALUE(3) = TM_VEL(J+2)
604 CALL H3D_WRITE_VECTOR(IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR,I,0,0,VALUE)
607 ELSEIF(KEYWORD == 'dis/tmax
') THEN
612 VALUE(2) = TM_DIS(J+1)
613 VALUE(3) = TM_DIS(J+2)
614 CALL H3D_WRITE_VECTOR(IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR,I,0,0,VALUE)
617 ELSEIF(KEYWORD == 'arot
') THEN
624 CALL H3D_WRITE_VECTOR(IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR,I,0,0,VALUE)
628 ELSEIF(KEYWORD == 'vel/grid
') THEN
635 CALL H3D_WRITE_VECTOR(IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR,I,0,0,VALUE)
639 ELSEIF(KEYWORD == 'shell_offset
') THEN
642 VALUE(1:3) = X_C(1:3,I) - X(1:3,I)
643 CALL H3D_WRITE_VECTOR(IOK_PART,IS_WRITTEN_NODE,NODAL_VECTOR,I,0,0,VALUE)
subroutine h3d_nodal_vector(elbuf_tab, nodal_vector, ifunc, iparg, geo, mass, pm, itab, node_id, info1, info2, is_written_node, h3d_part, ipartc, iparttg, ixc, ixtg, temp, iflow, rflow, ixs, ixq, nv46, monvol, diag_sms, ms, pdama2, x, volmon, stifr, stifn, a, d, v, cont, fcontg, fint, fext, keyword, fncont, fncontg, ftcont, ftcontg, fncont2, dr, dxancg, fanreac, fcluster, mcluster, vr, fopt, npby, vgaz, ipari, igrnod, weight, nodglob, fcont_max, fncontp2, ftcontp2, ar, ipartsp, ipartr, ipartp, ipartt, iparts, ipartq, kxsp, ixr, ixp, ixt, n_h3d_part_list, nodal_vector_fvm, is_written_node_fvm, airbags_total_fvm_in_h3d, smonvol, svolmon, ispmd, fvdata_p, airbags_node_id_shift, w, sw, x_c)