40 . ELBUF_TAB ,NODAL_VECTOR ,IFUNC ,IPARG ,GEO ,
41 . MASS ,PM ,ANIN ,ITAB ,NODE_ID ,
42 . INFO1 ,INFO2 ,IS_WRITTEN_NODE,H3D_PART ,IPARTC ,
43 . IPARTTG ,IXC ,IXTG ,TEMP ,IFLOW ,
44 . RFLOW ,IXS ,IXQ ,NV46 ,MONVOL ,
45 . DIAG_SMS ,MS ,PDAMA2 ,X ,VOLMON ,
46 . STIFR ,STIFN ,A ,D ,V ,
47 . CONT ,FCONTG ,FINT ,FEXT ,KEYWORD ,
48 . FNCONT ,FNCONTG ,FTCONT ,FTCONTG ,FNCONT2 ,
49 . DR ,DXANCG ,FANREAC ,FCLUSTER ,MCLUSTER ,
50 . VR ,FOPT ,NPBY ,VGAZ ,
51 . IPARI ,IGRNOD ,WEIGHT ,NODGLOB ,FCONT_MAX ,
52 . FNCONTP2 ,FTCONTP2 ,AR ,IPARTSP ,IPARTR ,
53 . IPARTP ,IPARTT ,IPARTS ,IPARTQ ,KXSP ,
54 . IXR ,IXP ,IXT ,N_H3D_PART_LIST ,NODAL_VECTOR_FVM,
55 . IS_WRITTEN_NODE_FVM,AIRBAGS_TOTAL_FVM_IN_H3D,SMONVOL ,SVOLMON ,ISPMD ,
56 . FVDATA_P ,AIRBAGS_NODE_ID_SHIFT ,W ,SW ,X_C )
73#include "implicit_f.inc"
79#include "intstamp_c.inc"
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,*)
98 my_real,
INTENT(IN) :: W(3,SW/3)
99 INTEGER IPARG(NPARG,*),IFUNC,NODE_ID(*),
100 . INFO1,INFO2,IS_WRITTEN_NODE(NUMNOD),H3D_PART(*),ITAB(NUMNOD),
101 . IXC(,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),(NUMELP),
109 . IPARTT(NUMELT),IPARTS(NUMELS),IPARTQ(NUMELQ)
110 INTEGER ,
INTENT(IN) :: KXSP(NISP,NUMSPH),IXR(NIXR,NUMELR),IXP(NIXP,NUMELP),
112 INTEGER ,
INTENT(IN) :: N_H3D_PART_LIST
113 my_real,
INTENT(INOUT) :: NODAL_VECTOR_FVM(3,AIRBAGS_TOTAL_FVM_IN_H3D)
114 INTEGER,
INTENT(INOUT) :: IS_WRITTEN_NODE_FVM()
115 TYPE(),
INTENT(IN) :: FVDATA_P(NFVBAG)
119 INTEGER I,J,K,N,IOK_PART(NUMNOD)
128 is_written_node(i) = 0
131 IF(n_h3d_part_list /= 0)
THEN
133 IF ( h3d_part(ipartsp(i)) == 1)
THEN
134 IF(kxsp(2,i) > 0 )iok_part(kxsp(2,i)) = 1
139 IF ( h3d_part(ipartr(i)) == 1)
THEN
141 IF(ixr(j,i) > 0 )iok_part(ixr(j,i)) = 1
147 IF ( h3d_part(ipartp(i)) == 1)
THEN
149 IF(ixp(j,i) > 0 )iok_part(ixp(j,i)) = 1
155 IF ( h3d_part(ipartt(i)) == 1)
THEN
157 IF(ixt(j,i) > 0 )iok_part(ixt(j,i)) = 1
163 IF ( h3d_part(ipartc(i)) == 1)
THEN
165 IF(ixc(j,i) > 0 )iok_part(ixc(j,i)) = 1
171 IF ( h3d_part(iparttg(i)) == 1)
THEN
173 IF(ixtg(j,i) > 0 )iok_part(ixtg(j,i)) = 1
179 IF ( h3d_part(iparts(i)) == 1)
THEN
181 IF(ixs(j,i) > 0 )iok_part(ixs(j,i)) = 1
187 IF ( h3d_part(ipartq(i)) == 1)
THEN
189 IF(ixq(j,i) > 0 )iok_part(ixq(j,i)) = 1
194 iok_part(1:numnod) = 1
198 IF(keyword ==
'VEL')
THEN
211 IF(airbags_total_fvm_in_h3d > 0)
THEN
212 is_written_node_fvm(1:airbags_total_fvm_in_h3d)=0
213 IF(nfvbag>0 .AND. ispmd == 0 .AND. airbags_total_fvm_in_h3d > 0)
THEN
215 . smonvol, svolmon ,airbags_total_fvm_in_h3d,is_written_node_fvm,
216 . airbags_node_id_shift )
221 ELSEIF(keyword ==
'DIS')
THEN
230 ELSEIF(keyword ==
'ACC')
THEN
239 ELSEIF(keyword ==
'CONT'.AND.keyword /=
'CONT/TMAX')
THEN
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)
258 ELSEIF(keyword ==
'CONT/TMAX')
THEN
260 IF(nintstamp==0.OR.nspmd==1)
THEN
262 value(1) = fcont_max(1,i)
263 value(2) = fcont_max(2,i)
264 value(3) = fcont_max(3,i)
276 ELSEIF(keyword ==
'FINT')
THEN
285 ELSEIF(keyword ==
'FEXT')
THEN
294 ELSEIF(keyword ==
'FOPT/FORCE')
THEN
297 is_written_node(i) = 0
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)
311 ELSEIF(keyword ==
'FOPT/MOMENT')
THEN
314 is_written_node(i) = 0
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)
328 ELSEIF(keyword ==
'VROT')
THEN
339 ELSEIF(keyword ==
'FVEL')
THEN
342 ELSEIF(keyword ==
'FRES')
THEN
345 ELSEIF(keyword ==
'PCONT/NORMAL')
THEN
349 value(1) = fncont(1,i)
350 value(2) = fncont(2,i)
351 value(3) = fncont(3,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)
364 ELSEIF(keyword ==
'MAXPCONT/NORMAL')
THEN
366 IF(nintstamp==0.OR.nspmd==1)
THEN
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)
382 ELSEIF(keyword ==
'PCONT/TANGENT')
THEN
386 value(1) = ftcont(1,i)
387 value(2) = ftcont(2,i)
388 value(3) = ftcont(3,i)
394 value(1) = ftcont(1,i)+ftcontg(1,k)
395 value(2) = ftcont(2,i)+ftcontg
396 value(3) = ftcont(3,i)+ftcontg(3,k)
401 ELSEIF(keyword ==
'MAXPCONT/TANGENT')
THEN
403 IF(nintstamp==0.OR.nspmd==1)
THEN
405 value(1) = ftcont_max(3*(i-1)+1)
406 value(2) = ftcont_max(
407 value(3) = ftcont_max(3*(i-1)+3)
419 ELSEIF(keyword ==
'CONT2')
THEN
422 value(1) = fncont2(1,i)
423 value(2) = fncont2(2,i)
424 value(3) = fncont2(3,i)
428 ELSEIF(keyword ==
'CONT2/MOMENT')
THEN
431 value(1) = mcont2(1,i)
432 value(2) = mcont2(2,i)
433 value(3) = mcont2(3,i)
437 ELSEIF(keyword ==
'PCONT2/NORMAL')
THEN
440 value(1) = fncontp2(1,i)
441 value(2) = fncontp2(2,i)
442 value(3) = fncontp2(3,i)
446 ELSEIF'PCONT2/TANGENT'THEN
449 value(1) = ftcontp2(1,i)
450 value(2) = ftcontp2(2,i)
451 value(3) = ftcontp2(3,i)
455 ELSEIF(keyword ==
'CONT2/TMAX')
THEN
459 value(2) = fcont2_max(3*(i-1)+2)
460 value(3) = fcont2_max(3*(i-1)+3)
464 ELSEIF'CONT2/TMIN')
THEN
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
473 ELSEIF(keyword ==
'MAXPCONT2/NORMAL')
THEN
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)
482 ELSEIF(keyword ==
'MAXPCONT2/TANGENT')
THEN
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)
491 ELSEIF(keyword ==
'MINPCONT2/NORMAL')
THEN
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)
500 ELSEIF(keyword ==
'MINPCONT2/TANGENT')
THEN
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)
509 ELSEIF(keyword ==
'DROT')
THEN
511 IF( (idrot == 1 .OR. isecut>0 .OR. iisrot>0 .OR. impose_dr>0) .AND. iroddl/=0)
THEN
520 ELSEIF (keyword ==
'DXANC')
THEN
523 value(1) = dxancg(1,i)
524 value(2) = dxancg(2,i)
525 value(3) = dxancg(3,i)
529 ELSEIF (keyword ==
'GVEL')
THEN
531 IF(ialelag > 0 )
THEN
540 ELSEIF(keyword ==
'FREAC')
THEN
543 value(1)=fanreac(1,i)
544 value(2)=fanreac(2,i)
545 value(3)=fanreac(3,i)
549 ELSEIF(keyword ==
'MREAC')
THEN
552 value(1)=fanreac(4,i)
553 value(2)=fanreac(5,i)
554 value(3)=fanreac(6,i)
558 ELSEIF(keyword ==
'CLUSTER/FORCE')
THEN
561 value(1)=fcluster(1,i)
562 value(2)=fcluster(2,i)
563 value(3)=fcluster(3,i)
567 ELSEIF(keyword ==
'CLUSTER/MOMENT')
THEN
570 value(1)=mcluster(1,i)
571 value(2)=mcluster(2,i)
572 value(3)=mcluster(3,i)
576 ELSEIF(keyword ==
'ZVEL')
THEN
577 CALL h3d_velvecc22(elbuf_tab,iparg,1,ixs,ixq,itab,iok_part,is_written_node,nodal_vector)
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)
584 ELSEIF(keyword ==
'ZMOM')
THEN
585 CALL h3d_velvecc22(elbuf_tab,iparg,2,ixs,ixq,itab,iok_part,is_written_node,nodal_vector)
588 ELSEIF(keyword ==
'ZFP')
THEN
589 CALL h3d_velvecz22(elbuf_tab,iparg,ipari,igrnod,x,ixs,ixq,itab,2,iok_part,is_written_node,nodal_vector)
592 ELSEIF(keyword ==
'ZFINT')
THEN
593 CALL h3d_velvecc22(elbuf_tab,iparg,3,ixs,ixq,itab,iok_part,is_written_node,nodal_vector)
595 ELSEIF(keyword ==
'VEL/TMAX')
THEN
601 value(3) = tm_vel(j+2)
605 ELSEIF(keyword ==
'DIS/TMAX')
THEN
610 value(2) = tm_dis(j+1)
611 value(3) = tm_dis(j+2)
615 ELSEIF(keyword ==
'AROT')
THEN
626 ELSEIF(keyword ==
'VEL/GRID')
THEN
637 ELSEIF(keyword ==
'SHELL_OFFSET'THEN
640 value(1:3) = x_c(1:3,i) - x(1:3,i)
subroutine h3d_nodal_vector(elbuf_tab, nodal_vector, ifunc, iparg, geo, mass, pm, anin, 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)