212
213
214
215 USE timer_mod
217 USE h3d_oned_scalar_mod, ONLY: h3d_oned_scalar
221 USE elbufdef_mod
227 USE multi_fvm_mod
231 USE sensor_mod
236 USE loads_mod
237 USE matparam_def_mod
238 USE my_alloc_mod
241 use glob_therm_mod
242 USE pblast_mod
243 USE h3d_gather_id_val_mod
244 USE spmd_mod
245
246
247
248#include "implicit_f.inc"
249#ifdef MPI
250#endif
251
252
253
254#include "build_info.inc"
255#include "com01_c.inc"
256#include "com04_c.inc"
257#include "com08_c.inc"
258#include "com_xfem1.inc"
259#include "sphcom.inc"
260#include "param_c.inc"
261#include "units_c.inc"
262#include "scr14_c.inc"
263#include "scr16_c.inc"
264#include "scr17_c.inc"
265#include "scr23_c.inc"
266#include "chara_c.inc"
267#include "task_c.inc"
268#include "spmd_c.inc"
269#include "filescount_c.inc"
270#include "tabsiz_c.inc"
271#include "intstamp_c.inc"
272#include "macro.inc"
273#include "sysunit.inc"
274
275
276
277 INTEGER SYSFUS2
278
279
280
281 TYPE(TIMER_), INTENT(INOUT) :: TIMERS
282 INTEGER SWAFT,SMAS,SXNORM,SIAD,SINVERT,SMATER,SEL2FA,SWA4,
283 . SIADG,NERCVOIS(*),NESDVOIS(*),LERCVOIS(*),
284 . LESDVOIS(*),SPH2SOL(*),SH4TREE(*),SH3TREE(*),(*)
285 integer
286 . suix, sxusr ,sfacptx,sixedge,sixfacet,sixsolid,snumx1,
287 . snumx2,snumx3,soffx1,soffx2,soffx3,smass1,smass2,
288 .
smass3,sfunc1,sfunc2,sfunc3,sfin,snfacptx,npf(*)
289
290 INTEGER IGEO(NPROPGI,NUMGEO),IPM(NPROPMI,NUMMAT),INDX_CRK(*),
291 . LRBE2(*),LRBE3(*),FR_RBE2(3,*),FR_RBE3M(3,*),
292 . NOD_PXFEM(*), IEL_PXFEM(*),NODEDGE(2,*),XEDGE4N(4,*),XEDGE3N(3,*),
293 . INOD_CRK(*),IEL_CRK(*),ELCUTC(2,*),IADC_CRK(*)
295 . x(3*numnod), d(3*numnod), v(3*numnod), a(3,numnod), bufel(*),
296 . pm(npropm,nummat), geo(npropg,numgeo),cont(*),
297 . xcut(*) , fint(3,numnod),ms(numnod),rwbuf(nrwlp,*),skew(lskew,*),
298 . rby(nrby,*),fext(3,numnod) ,fopt(6,*),anin(*),tani(6,*),eani(*),
299 . tors(15,*),bufsf(*), rdata(*),
300 . bufmat(*),bufgeo(*),
301 . spbuf(*), vr(3*numnod),volmon(svolmon), rflow(*), fncont(3,*), ftcont(3,*),
302 . temp(*), thke(*), err_thk_sh4(*), err_thk_sh3(*), diag_sms(*),
303 . fncont2(3,*), dr(3,*),dxancg(3,*),zi_ply(*),vgaz(*),
304 . fcontg(*), fncontg(*), ftcontg(*),fanreac(6,*),pdama2(2,*),
305 . res_sms(*),fcluster(3,*),mcluster(3,*),w(sw),
306 . wige(*),knot(*),stifn(*),stifr(*),pskids(*),tf(*),fcont_max(*),
307 . fncontp2(3,*) ,ftcontp2(3,*)
308 INTEGER IPARG(NPARG,NGROUP),NSTRF(*),LPBY(*),
309 . IXS(NIXS,NUMELS),IXQ(NIXQ,NUMELQ),IXC(NIXC,NUMELC),IXTG(NIXTG,NUMELTG),
310 . IXT(NIXT,NUMELT),IXP(NIXP,NUMELP),IXR(NIXR,NUMELR),MONVOL(SMONVOL) ,
311 . IXS10(6,*) ,IXS16(8,*) ,IXS20(12,*) ,
312 . ICUT(*), ITAB(NUMNOD),NPBY(NNPBY,*),NPRW(*),
313 . WEIGHT(*),IPART(LIPART1,*),IPARTS(*),IPARTQ(*),IPARTC(*),
314 . IPARTT(*),IPARTP(*),IPARTR(*),IPARTUR(*),IPARTTG(*),
315 . NOM_OPT(*),
316 . IDATA(*),KXX(NIXX,*), IXX(*), IPARTX(*),
317 . KXSP(NISP,*), IXSP(KVOISPH,*), NOD2SP(*), IPARTSP(*),
318 . NODGLOB(*),IAD_ELEM(2,*),FR_ELEM(*),FR_WALL(*), IFLOW(*),
319 . IPARI(NPARI,*),IRBE2(NRBE2L,*),IRBE3(NRBE3L,*),
320 . WEIGHT_MD(*),NODGLOBXFE(*),IPARTIG3D(*)
321 INTEGER CTEXT(111), IB
322 INTEGER DD_IAD(NSPMD+1,*)
323 INTEGER FR_SEC(NSPMD+1,*),FR_RBY2(3,*),IAD_RBY2(4,*),
324 . NERBE2T(NRBE2G),
325 . NERBE3T(NRBE3G),IAD_RBE2(4,*),NV46,KXIG3D(*),
326 . IXIG3D(*),SIG3DSOLID,MDS_MATID(*)
327 INTEGER LLOADP(SLLOADP)
328 INTEGER ILOADP(SIZLOADP,*),IBCL(NIBCLD,*)
329 INTEGER TAGNCONT(NLOADP_HYD_INTER,NUMNOD),LOADP_HYD_INTER(NLOADP_HYD)
330 INTEGER ,DIMENSION(LISKN,NUMFRAM+1), INTENT(IN) :: IFRAME
332 . fac(lfaccld,*),xframe(nxframe,*),forc(*)
333 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP) :: ELBUF_TAB
334 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP,NXEL) :: XFEM_TAB
335 TYPE (CLUSTER_) ,DIMENSION(NCLUSTER) :: CLUSTER
336 TYPE (XFEM_EDGE_) , DIMENSION(*) :: CRKEDGE
337 TYPE (STACK_PLY) :: STACK
338 TYPE (H3D_DATABASE) :: H3D_DATA
339 TYPE (MULTI_FVM_STRUCT), INTENT(IN) :: MULTI_FVM
340 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
341 TYPE (SUBSET_) , TARGET, DIMENSION(NSUBS) :: SUBSET
342 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
343 TYPE (SENSORS_) , INTENT(IN) :: SENSORS
344 TYPE (LOADS_) , INTENT(IN) :: LOADS
345 TYPE (TTABLE),DIMENSION(NTABLE) ,INTENT(IN) :: TABLE
346 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
347 my_real ,
INTENT(IN) :: ar(sar)
350 my_real ,
DIMENSION(3,NUMNOD),
INTENT(IN) :: x_c
351 TYPE (DRAPE_) , INTENT(IN) :: DRAPE_SH4N(NUMELC_DRAPE), DRAPE_SH3N(NUMELTG_DRAPE)
352 TYPE (DRAPEG_), INTENT(IN) :: DRAPEG
353 type (glob_therm_), intent(in) :: GLOB_THERM
354 type (pblast_), intent(in) :: PBLAST
355
356
357
358 INTEGER iterator
359 my_real,
DIMENSION(:),
ALLOCATABLE :: waft , mas
360 INTEGER IAD(SIAD),INVERT(SINVERT),EL2FA(SEL2FA),IADG(NSPMD,SIADG),FIRST_NODE_IG3D
361 my_real ,
DIMENSION (:),
ALLOCATABLE :: cbuf
362 INTEGER ,DIMENSION (:), ALLOCATABLE :: ICBUF
363 SAVE cbuf,icbuf
364 CHARACTER*80 ,H3DTITLE
365 CHARACTER(LEN=NCHARLINE100):: KEYWORD
366 CHARACTER CH_H3D*4,FILNAM*100
367 INTEGER I, NBF, NBPART, J, IFUNC, FILEN, NSENSOR,NELCUT,N,K,NERBY,ISK(6),LAYER,IPT,GAUSS,ID_PLY,IUVAR
368 INTEGER II,II_L,INC,NDMA2,NB1D,NBONED_T, NBF_L, LEN
369 INTEGER ,NERBE3,ALL_SUB_CHILDS,IDMDS,IMDSVAR,ID
370 INTEGER I161,I16A,I16B,I16C,I16D,I16E,I16F,I16G,I16H,I16I,I16J,I16K,I16L,I16M,I16N
371 INTEGER NNN
372 INTEGER ISPH3D
373 INTEGER SBUFSPM,SBUFRECVM,SBUFSPO,SPORBY,N_OUTP_DATA,LEN_H3DTITLE,N_H3D_PART_LIST
374 my_real cdg(3),xmin,ymin,zmin,xmax,
ymax,zmax, scale
375 INTEGER JJ, SUBG,IR,IS,IT,INTER_INPUT,INTERSKID,NI,ITYSKID,INTERFRIC
376 INTEGER, DIMENSION(:), ALLOCATABLE :: SHELL_ID,SHELL_ID_P,
377 . SHELL_ITY,SHELL_ITY_P,ONED_ID,ONED_ID_P,
378 . ONED_ITY,ONED_ITY_P,SOLID_ID,SOLID_ID_P,
379 . SOLID_ITY,SOLID_ITY_P,IS_WRITEN_SHELL,
380 . IS_WRITEN_SHELL_P,IS_WRITEN_ONED,
381 . IS_WRITEN_ONED_P,IS_WRITEN_NODE,
382 . IS_WRITEN_NODE_P,NODE_ID,NODE_ID_P,
383 . IS_WRITEN_SOLID,IS_WRITEN_SOLID_P,
384 . SPH_ID,SPH_ID_P,IS_WRITEN_SPH,IS_WRITEN_SPH_P,
385 . QUAD_ID,QUAD_ID_P,IS_WRITEN_QUAD,IS_WRITEN_QUAD_P,
386 . SKIN_ID_P,IS_WRITEN_SKIN,IS_WRITEN_SKIN_P,
387 . ISOLNOD,ISOLNOD_P
388 INTEGER, DIMENSION(:), ALLOCATABLE :: IS_WRITEN_NODE_FVM,NODE_ID_FVM
389 INTEGER INFO1,INFO2,IS_CORNER_DATA, COMPID_RBODIES, COMPID_RBE2S, COMPID_RBE3S, MAX_PART_ID
390 INTEGER ERROR_LOAD,
391
392 INTEGER, DIMENSION(:,:), ALLOCATABLE ::
393 . IXC_P,
394 . IXC_TMP,
395 . IXTG_TMP,
396 . IXTG_P,
397 . IXS_TMP,
398 . IXS_P,
399 . IXR_TMP,
400 . IXR_P,
401 . IXP_TMP,
402 . IXP_P,
403 . KXSP_TMP,
404 . KXSP_P,
405 . IXT_TMP,
406 . IXT_P,
407 . IXS10_TMP,
408 . IXS10_P,
409 . IXS16_TMP,
410 . IXS16_P,
411 . IXS20_TMP,
412 . IXS20_P,
413 . IXQ_TMP,
414 . IXQ_P,
415 . IXSKIN_TMP,
416 . IXSKIN_P
417 INTEGER, DIMENSION(:), ALLOCATABLE ::
418 . IPARTS_P,
419 . IPARTR_P,
420 . IPARTP_P,
421 . IPARTT_P,
422 . IPARTSP_P,
423 . IPARTS10_P,
424 . IPARTS16_P,
425 . IPARTS20_P,
426 . IPARTC_P,
427 . IPARTTG_P,
428 . IPARTQ_P,
429 . IPARTSKIN_P,
430 . NODAL_IPART,
431 . IMAPSKP
432 my_real,
DIMENSION(:),
ALLOCATABLE :: x_p,d_p
433 INTEGER, DIMENSION(:), ALLOCATABLE :: ITAB_P
434 INTEGER :: IAD_H3DPART,IAD_P,NUMNODG0,IP0 ,NIXSKIN
435 INTEGER :: NUMNOD_P(NSPMD)
436 INTEGER MAX_NOD_ID,MAX_NCORN
437 REAL(KIND=4), dimension(:), ALLOCATABLE :: shell_stack
438 REAL(KIND=4), dimension(:), ALLOCATABLE :: shell_stack_p
439 INTEGER,DIMENSION(NSPMD) ::
440 INTEGER,DIMENSION(NSPMD) :: TMP_OFFSETS
441 INTEGER,DIMENSION(NSPMD+1) :: SH_TRIA_SPMD_OFFSETS
442 my_real,
DIMENSION(:),
ALLOCATABLE :: nodal_scalar,nodal_scalar_p,
443 . nodal_vector,nodal_vector_p,
444 . nodal_tensor,nodal_tensor_p,
445 . oned_scalar,oned_scalar_p,
446 . oned_vector,oned_vector_p,
447 . oned_tensor,oned_tensor_p,
448 . oned_torsor,oned_torsor_p,
449 . shell_scalar_p,shell_scalar,
450 . shell_vector,shell_vector_p,
451 . shell_tensor,shell_tensor_p,
452 . solid_scalar,solid_scalar_p,
453 . solid_vector,solid_vector_p,
454 . solid_tensor,solid_tensor_p,
455 . solid_tensor_corner,solid_tensor_corner_p,
456 . skin_scalar,skin_scalar_p,
457 . skin_vector,skin_vector_p,
458 . skin_tensor,skin_tensor_p,
459 . sph_scalar,sph_scalar_p,
460 . sph_tensor,sph_tensor_p,
461 . quad_scalar,quad_scalar_p,
462 . quad_vector,quad_vector_p,
463 . quad_tensor,quad_tensor_p,nodal_scalar_fvm,
464 . nodal_vector_fvm
465 INTEGER, DIMENSION(:), ALLOCATABLE :: TAGNOD,TAGNOD_P,
466 . ITAB_P_PART,ITABM1_P
467 my_real xwl(nrwall) ,ywl(nrwall) , zwl(nrwall), v1(nrwall), v2(nrwall), v3(nrwall),
468 . vv1(nrwall), vv2(nrwall), vv3(nrwall), xl(nrwall), xn(nrwall), yn(nrwall),
469 . zn(nrwall)
470 LOGICAL IS_FILE_EXISTS
471 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_CHILD,SUB_IAD,SUB_TITLE
472 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_NCHILD
473 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_LEVEL
474 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_ID
475 INTEGER (KIND=8) :: H3DTOTALSIZE8
476 INTEGER :: LEN_TMP_NAME,LEN_RADVERS,OBJECT_ID, NPOLH, NPOLHG, NPOLH_ANIM, NPOLH_ANIM_G,
477 * FVM_GLOBALS(3)
478 INTEGER :: AIRBAGS_TOTAL_FVM_IN_H3D_G
479 CHARACTER(len=2148) :: TMP_NAME
480 CHARACTER RADVERS*68
481 TYPE(FVBAG_DATA), DIMENSION(:), ALLOCATABLE :: FVDATA_P
482 my_real,
DIMENSION(:),
ALLOCATABLE :: fvdata_1d_array,fvdata_1d_array_p
483 INTEGER ITMP,MODE
484 TYPE user_nod_id_
485
486
487
488
489
490
491
492
493
494
495
496
497 INTEGER INPUT_MAX
498 INTEGER RWALL_SHIFT
499 INTEGER RWALL_LEN
500 INTEGER FVMBAG_SHIFT
501 INTEGER FVMBAG_LEN
502 END TYPE
503
504 TYPE(USER_NOD_ID_) :: USER_NOD_ID
505 INTEGER SZ_ANIN
506 INTEGER :: MAX_SHELL_STACKSIZE
507 INTEGER :: SHELL_STACKSIZE
508 INTEGER :: SHELL_STACKSIZE_P0
509 integer elem
510
511
512
513 max_shell_stacksize = numelc + numeltg
514 CALL startime(timers,macro_timer_genh3d)
515
516 user_nod_id%INPUT_MAX=0
517 user_nod_id%RWALL_SHIFT=0
518 user_nod_id%RWALL_LEN=0
519 user_nod_id%FVMBAG_SHIFT=0
520 user_nod_id%FVMBAG_LEN=0
521
522 ndma2 = numnod*(
min(1,anim_n(1)+outp_n(1)+h3d_data%N_SCAL_DT)
523 . +
min(1,anim_n(2)+outp_n(2)+h3d_data%N_SCAL_DMAS)
524 . +
min(1,anim_n(12)+outp_n(3)+h3d_data%N_SCAL_DINER))
525 nsensor = sensors%NSENSOR
526 ALLOCATE(mas(smas))
527 ALLOCATE(sub_nchild(nsubs))
528 ALLOCATE(sub_level(nsubs))
529 ALLOCATE(sub_id(nsubs))
530
531
532 i161=1
533 i16a=i161+lnopt1*nrbody0
534 i16b=i16a+lnopt1*naccelm
535 i16c=i16b+lnopt1*nvolu
536 i16d=i16c+lnopt1*(ninter+nintsub)
537 i16e=i16d+lnopt1*nrwall
538 i16f=i16e
539 i16g=i16f+lnopt1*njoint
540 i16h=i16g+lnopt1*nsect
541 i16i=i16h+lnopt1*nlink
542 i16j=i16i+lnopt1*(numskw+1+numfram+1)
543 i16k=i16j+lnopt1*nfxbody
544 i16l=i16k+lnopt1*nflow
545 i16m=i16l+lnopt1*nrbe2
546 i16n=i16m+lnopt1*nrbe3
547
548
549
550
551 error_load = 0
552
553 h3d_data%IH3D_RUN = h3d_data%IH3D_RUN + 1
554 IF(ispmd == 0) THEN
555 numnodg0 = numnodg
556 ip0 = 1
557 ELSE
558 numnodg0 = 1
559 ip0 = 0
560 ENDIF
561
562 nixskin = nixq
563
564 ALLOCATE(x_p(8*numnodg0))
565 ALLOCATE(itab_p(numnodg0))
566
567 CALL my_alloc( ixtg_p ,nixtg,numeltgg*ip0)
568 CALL my_alloc( ixs_p ,nixs,(numelsg-numels10g-numels16g-numels20g)*ip0)
569 CALL my_alloc( ixp_p ,nixp,numelpg*ip0)
570 CALL my_alloc( ixr_p ,nixr,numelrg*ip0)
571 CALL my_alloc( kxsp_p ,nisp,numsphg*ip0)
572 CALL my_alloc( ixt_p ,nixt,numeltrg*ip0)
573 CALL my_alloc( ixc_p ,nixc,numelcg*ip0)
574 CALL my_alloc( ixs10_p ,11,numels10g*ip0)
575 CALL my_alloc( ixs16_p ,17,numels16g*ip0)
576 CALL my_alloc( ixs20_p ,21,numels20g*ip0)
577 ALLOCATE( ipartc_p(numelcg*ip0))
578 ALLOCATE( iparttg_p(numeltgg*ip0))
579 ALLOCATE( ipartq_p(numelqg*ip0))
580 ALLOCATE( iparts_p((numelsg-numels10g-numels16g-numels20g)*ip0))
581 ALLOCATE( ipartr_p(numelrg*ip0))
582 ALLOCATE( ipartp_p(numelpg*ip0))
583 ALLOCATE( ipartt_p(numeltrg*ip0))
584 ALLOCATE( ipartsp_p(numsphg*ip0))
585 ALLOCATE( iparts10_p(numels10g*ip0))
586 ALLOCATE( iparts16_p(numels16g*ip0))
587 ALLOCATE( iparts20_p(numels20g*ip0))
588 CALL my_alloc( ixq_p ,nixq,numelqg*ip0)
589 CALL my_alloc( ixc_tmp ,nixc,numelc)
590 CALL my_alloc( ixtg_tmp ,nixtg,numeltg)
591 CALL my_alloc( ixr_tmp ,nixr,numelr)
592 CALL my_alloc( ixp_tmp ,nixp,numelp)
593 CALL my_alloc( kxsp_tmp ,nisp,numsph)
594 CALL my_alloc( ixt_tmp ,nixt,numelt)
595 CALL my_alloc( ixs10_tmp ,11,numels10)
596 CALL my_alloc( ixs16_tmp ,17,numels16)
597 CALL my_alloc( ixs20_tmp ,21,numels20)
598 CALL my_alloc( ixq_tmp ,nixq,numelq)
599 CALL my_alloc( ixskin_tmp ,nixskin,numskin)
600 CALL my_alloc( ixskin_p ,nixskin,numsking*ip0)
601 ALLOCATE( ipartskin_p(numsking*ip0))
602
603 ALLOCATE(d_p(numnodg0*8))
604
605 IF(nspmd > 1) THEN
606 CALL startime(timers,macro_timer_spmdh3d)
608 CALL stoptime(timers,macro_timer_spmdh3d)
609 ENDIF
610
611
612
613
614 max_part_id = 0
615 compid_rbodies = 0
616 compid_rbe2s = 0
617 compid_rbe3s = 0
618 DO i=1,npart
619 max_part_id =
max(max_part_id,ipart(4,i))
620 ENDDO
621 IF(h3d_data%RBODY_SINGLE == 1)compid_rbodies = max_part_id + 1
622 IF(h3d_data%RBE2_SINGLE == 1)compid_rbe2s = max_part_id + 2
623 IF(h3d_data%RBE3_SINGLE == 1)compid_rbe3s = max_part_id + 3
624
625
626
627 IF (ispmd==0) THEN
628 filnam=rootnam(1:rootlen)//'.h3d'
629 filen = rootlen + 4
632
633
634
635
636 IF ((h3d_data%IH3D == 1 .AND. irun == 1)
637 . .OR.( h3d_data%IH3D_RUN == 1 .AND. irun > 1)) THEN
638
639 IF (nsubs > 0) THEN
640 all_sub_childs = 0
641 DO j=1,nsubs
642 all_sub_childs = all_sub_childs + subset(j)%NCHILD
643 sub_id(j) = subset(j)%ID
644 sub_nchild(j) = subset(j)%NCHILD
645 sub_level(j) = subset(j)%LEVEL
646 ENDDO
647
648 ALLOCATE(sub_child(all_sub_childs))
649 sub_child(1:all_sub_childs) = 0
650 ALLOCATE(sub_iad(nsubs))
651 sub_iad(1:nsubs) = 0
652 ALLOCATE(sub_title(nsubs*ltitr))
653 sub_title(1:nsubs*ltitr) = 0
654 k = 0
655 DO j=1,nsubs
656 DO i=1,subset(j)%NCHILD
657 k = k + 1
658 sub_child(k) = subset(j)%CHILD(i)
659 ENDDO
660 sub_iad(j) = k
661 ENDDO
662
663 DO j=1,nsubs
664 CALL fretitl(subset(j)%TITLE,sub_title(ltitr * (j-1)+1),ltitr)
665 ENDDO
666 ELSE
667 ALLOCATE(sub_child(0))
668 ALLOCATE(sub_iad(0))
669 ALLOCATE(sub_title(0))
670 ENDIF
671 ENDIF
672
673 IF (h3d_data%IH3D == 1 .AND. irun == 1) THEN
674
675
676
677
678 error_load = 0
680 IF(error_load == 1) THEN
681 CALL ancmsg(msgid=274,anmode=aninfo)
683 ENDIF
684
685
686
687
689 WRITE(radvers,'(A,A)') 'Radioss ',vers
690 len_radvers = len_trim(radvers)
691
692 CALL startime(timers,macro_timer_libh3d)
693 CALL c_h3d_open_file(tmp_name,len_tmp_name,h3d_data%PERCENTAGE_ERROR,h3d_data%COMP_LEVEL,
694 . radvers,len_radvers,fac_mass,fac_length,fac_time)
696 . h3d_data%PARTS(1)%PART,
697 . nrbody, nrwall, nom_opt, lnopt1, i16d, npby, nnpby,
698 . sub_nchild, nsubs, nrbe2, nrbe3, i16l, i16m, n2d ,irbe2,
699 . nrbe2l,sub_id,sub_child,sub_level,sub_iad,sub_title,irbe3,
700 . nrbe3l,compid_rbodies,compid_rbe2s,compid_rbe3s)
701 CALL stoptime(timers,macro_timer_libh3d)
702
703
704
705 ELSEIF( h3d_data%IH3D_RUN == 1 .AND. irun > 1) THEN
706
707
708
709 error_load = 0
711 IF(error_load == 1) THEN
712 CALL ancmsg(msgid=274,anmode=aninfo)
714 ENDIF
715
716
717
718
719 INQUIRE( file=tmp_name(1:len_tmp_name), exist=is_file_exists )
720 IF (is_file_exists) THEN
721 CALL startime(timers,macro_timer_libh3d)
723 CALL c_h3d_reopen_file(tmp_name,len_tmp_name,h3d_data%PERCENTAGE_ERROR,h3d_data%COMP_LEVEL)
724 CALL stoptime(timers,macro_timer_libh3d)
725 ELSE
726
727
728
729 WRITE(ch_h3d,'(I4.4)')irun
730 filnam=rootnam(1:rootlen)//'_'//ch_h3d//'.h3d'
733 h3d_data%IH3D = 1
734 filen = rootlen + 9
736
737 WRITE(radvers,'(A,A)') 'Radioss ',vers
738 len_radvers = len_trim(radvers)
739
740 CALL startime(timers,macro_timer_libh3d)
741 CALL c_h3d_open_file(tmp_name,len_tmp_name,h3d_data%PERCENTAGE_ERROR,h3d_data%COMP_LEVEL,
742 . radvers,len_radvers,fac_mass,fac_length,fac_time)
744 . nrbody, nrwall, nom_opt, lnopt1, i16d, npby, nnpby,
745 . sub_nchild, nsubs, nrbe2g, nrbe3g, i16e, i16f, n2d ,irbe2,
746 . nrbe2l,sub_id,sub_child,sub_level,sub_iad,sub_title,irbe3,
747 . nrbe3l,compid_rbodies,compid_rbe2s,compid_rbe3s)
748 CALL stoptime(timers,macro_timer_libh3d)
749
750 ENDIF
751 ENDIF
752 ENDIF
753
754
755
756 IF(nspmd > 1) THEN
757 CALL startime(timers,macro_timer_spmdh3d)
760 CALL stoptime(timers,macro_timer_spmdh3d)
761 ELSE
762 DO i=1,numnod
763 itab_p(i) = itab(i)
764 ENDDO
765 ENDIF
766
767
768
769 IF (ispmd == 0)THEN
770 ALLOCATE(tagnod_p(numnodg))
771 ELSE
772 ALLOCATE(tagnod_p(1))
773 ENDIF
774
775 IF(h3d_data%IPART_SELECT == 1) THEN
778
779
780 DO i=1,numsph
781 IF (h3d_data%PARTS(1)%PART(ipartsp(i)) == 1) THEN
782 IF(kxsp(2,i) > 0 )
tagnod(kxsp(2,i)) = 1
783 ENDIF
784 ENDDO
785
786 DO i=1,numelr
787 IF (h3d_data%PARTS(1)%PART(ipartr(i)) == 1) THEN
788 DO j=2,4
789 IF(ixr(j,i) > 0 )
tagnod(ixr(j,i)) = 1
790 ENDDO
791 ENDIF
792 ENDDO
793
794 DO i=1,numelp
795 IF (h3d_data%PARTS(1)%PART(ipartp(i)) == 1) THEN
796 DO j=2,4
797 IF(ixp(j,i) > 0 )
tagnod(ixp(j,i)) = 1
798 ENDDO
799 ENDIF
800 ENDDO
801
802 DO i=1,numelt
803 IF (h3d_data%PARTS(1)%PART(ipartt(i)) == 1) THEN
804 DO j=2,4
805 IF(ixt(j,i) > 0 )
tagnod(ixt(j,i)) = 1
806 ENDDO
807 ENDIF
808 ENDDO
809
810 DO i=1,nrbody
811 IF(npby(1,i) > 0 )
tagnod(npby(1,i)) = 1
812 DO j=1,npby(2,i)
813 IF(lpby(npby(11,i)+j) > 0)
tagnod(lpby(npby(11,i)+j)) = 1
814 ENDDO
815 ENDDO
816
817 DO i=1,numelc
818 IF (h3d_data%PARTS(1)%PART(ipartc(i)) == 1) THEN
819 DO j=2,5
820 IF(ixc(j,i) > 0 )
tagnod(ixc(j,i)) = 1
821 ENDDO
822 ENDIF
823 ENDDO
824
825 DO i=1,numeltg
826 IF (h3d_data%PARTS(1)%PART(iparttg(i)) == 1) THEN
827 DO j=2,4
829 ENDDO
830 ENDIF
831 ENDDO
832
833 DO i=1,numels
834 IF (h3d_data%PARTS(1)%PART(iparts(i)) == 1) THEN
835 DO j=2,9
836 IF(ixs(j,i) > 0 )
tagnod(ixs(j,i)) = 1
837 ENDDO
838 ENDIF
839 ENDDO
840
841 DO i=1,numelq
842 IF (h3d_data%PARTS(1)%PART(ipartq(i)) == 1) THEN
843 DO j=2,5
844 IF(ixq(j,i) > 0 )
tagnod(ixq(j,i)) = 1
845 ENDDO
846 ENDIF
847 ENDDO
848
849 numnod_h3dpart = 0
850
851 IF(nspmd > 1) THEN
852 CALL startime(timers,macro_timer_spmdh3d)
854 CALL stoptime(timers,macro_timer_spmdh3d)
855 IF(ispmd == 0) THEN
856 DO i=1,nspmd
857 numnod_h3dpart = numnod_h3dpart + numnod_p(i)
858 ENDDO
859 ENDIF
860 ENDIF
861
862 ALLOCATE(itab_p_part(numnod_h3dpart))
863 ALLOCATE(itabm1_p(2*numnodg))
864
865 IF(nspmd > 1) THEN
866 CALL startime(timers,macro_timer_spmdh3d)
869 CALL stoptime(timers,macro_timer_spmdh3d)
870 IF(ispmd == 0) THEN
872 DO i=1,numnod_h3dpart
873 IF(itab_p_part(i) /= 0)THEN
874 IF(
sysfus2(itab_p_part(i),itabm1_p,numnodg) /= 0)
THEN
875 tagnod_p(
sysfus2(itab_p_part(i),itabm1_p,numnodg)) = 1
876 ENDIF
877 ENDIF
878 ENDDO
879 ENDIF
880 ELSE
881 DO i=1,numnod
883 ENDDO
884 ENDIF
885 DEALLOCATE(itab_p_part)
886 DEALLOCATE(itabm1_p)
887 ELSE IF(ispmd == 0) THEN
888 DO i=1,numnodg
889 tagnod_p(i) = 1
890 ENDDO
891 ENDIF
892
893
894
895
896 max_nod_id = 0
897 IF(nspmd > 1 .AND. ispmd==0)THEN
898 DO i=1,numnodg
899 max_nod_id =
max(max_nod_id,itab_p(i))
900 ENDDO
901 ELSEIF(nspmd == 1)THEN
902 max_nod_id = 0
903 DO i=1,numnod
904 max_nod_id =
max(max_nod_id,itab(i))
905 ENDDO
906 ENDIF
907 user_nod_id%INPUT_MAX = max_nod_id
908
909
910 IF(nspmd > 1 .AND. ispmd==0 .AND. h3d_data%IH3D == 1 )THEN
911 CALL startime(timers,macro_timer_libh3d)
913 CALL stoptime(timers,macro_timer_libh3d)
914 ELSEIF(ispmd==0 .AND. h3d_data%IH3D == 1)THEN
915 CALL startime(timers,macro_timer_libh3d)
917 CALL stoptime(timers,macro_timer_libh3d)
918 ENDIF
919 DEALLOCATE(x_p)
920
921
922 airbags_total_fvm_in_h3d_g = 0
923
924 user_nod_id%FVMBAG_SHIFT = max_nod_id
925 user_nod_id%FVMBAG_LEN = 0
926
927 IF(nspmd > 1)THEN
929
930 if (ispmd == 0)
ALLOCATE (fvdata_p(
nfvbag))
931 airbags_total_fvm_in_h3d_g = 0
933
934
935 if ( (
fvspmd(j)%PMAIN-1 == 0) .and. (ispmd == 0))
then
936
938 npolh_anim_g =
fvdata(j)%NPOLH_ANIM
940
941 else
942 if (
fvspmd(j)%PMAIN-1 == ispmd)
then
943
944 fvm_globals(1) =
fvdata(j)%NPOLH
945 fvm_globals(2) =
fvdata(j)%NPOLH_ANIM
947
948 call spmd_send(fvm_globals,3,it_spmd(1),25001)
949 endif
950
951 if (ispmd == 0)then
952 call spmd_recv(fvm_globals,3,it_spmd(
fvspmd(j)%PMAIN),25001)
953 npolhg = fvm_globals(1)
954 npolh_anim_g = fvm_globals(2)
955 airbags_total_fvm_in_h3d_g = fvm_globals(3)
956 else
957 npolhg = 0
958 npolh_anim_g = 0
959 airbags_total_fvm_in_h3d_g = 0
960 endif
961 endif
962
963
964 if (ispmd == 0)then
965 ALLOCATE (fvdata_p(j)%CENTROID_POLH(3,npolhg))
966 ALLOCATE (fvdata_p(j)%QPOLH(3,npolhg))
967 ALLOCATE (fvdata_p(j)%PPOLH(npolhg))
968 ALLOCATE (fvdata_p(j)%SSPPOLH(npolhg))
969 ALLOCATE (fvdata_p(j)%DTPOLH(npolhg))
970 ALLOCATE (fvdata_p(j)%MPOLH(npolhg))
971 ALLOCATE (fvdata_p(j)%RPOLH(npolhg))
972 ALLOCATE (fvdata_p(j)%TPOLH(npolhg))
973 fvdata_p(j)%NPOLH = npolhg
974 fvdata_p(j)%NPOLH_ANIM = npolh_anim_g
975 endif
976
977 if ( (
fvspmd(j)%PMAIN-1 == 0) .and. (ispmd == 0))
then
978
979 fvdata_p(j)%CENTROID_POLH(1,1:npolh) =
fvdata(j)%CENTROID_POLH(1,1:npolh)
980 fvdata_p(j)%CENTROID_POLH(2,1:npolh) =
fvdata(j)%CENTROID_POLH(2,1:npolh)
981 fvdata_p(j)%CENTROID_POLH(3,1:npolh) =
fvdata(j
982 fvdata_p(j)%QPOLH(1,1:npolh) =
fvdata(j)%QPOLH(1,1:npolh)
983 fvdata_p(j)%QPOLH(2,1:npolh) =
fvdata(j)%QPOLH(2,1:npolh)
984 fvdata_p(j)%QPOLH(3,1:npolh) =
fvdata(j)%QPOLH(3,1:npolh)
985 fvdata_p(j)%PPOLH(1:npolh) =
fvdata(j)%PPOLH(1:npolh)
986 fvdata_p(j)%SSPPOLH(1:npolh) =
fvdata(j)%SSPPOLH(1:npolh)
987 fvdata_p(j)%DTPOLH(1:npolh) =
fvdata(j)%DTPOLH(1:npolh)
988 fvdata_p(j)%MPOLH(1:npolh) =
fvdata(j)%MPOLH(1:npolh)
989 fvdata_p(j)%RPOLH(1:npolh) =
fvdata(j)%RPOLH(1:npolh)
990 fvdata_p(j)%TPOLH(1:npolh) =
fvdata(j)%TPOLH(1:npolh)
991 else
992 if (ispmd ==
fvspmd(j)%PMAIN-1)
then
993 ALLOCATE(fvdata_1d_array(12*npolh))
994 fvdata_1d_array(00*npolh+1:01*npolh) =
fvdata(j)%CENTROID_POLH(1,1:npolh)
995 fvdata_1d_array(01*npolh+1:02*npolh) =
fvdata(j)%CENTROID_POLH(2,1:npolh)
996 fvdata_1d_array(02*npolh+1:03*npolh) =
fvdata(j)%CENTROID_POLH(3,1:npolh)
997 fvdata_1d_array(03*npolh+1:04*npolh) =
fvdata(j)%QPOLH(1,1:npolh)
998 fvdata_1d_array(04*npolh+1:05*npolh) =
fvdata(j)%QPOLH(2,1:npolh)
999 fvdata_1d_array(05*npolh+1:06*npolh) =
fvdata(j)%QPOLH(3,1:npolh)
1000 fvdata_1d_array(06*npolh+1:07*npolh) =
fvdata(j)%PPOLH(1:npolh)
1001 fvdata_1d_array(07*npolh+1:08*npolh) =
fvdata(j)%SSPPOLH(1:npolh)
1002 fvdata_1d_array(08*npolh+1:09*npolh) =
fvdata(j)%DTPOLH(1:npolh)
1003 fvdata_1d_array(09*npolh+1:10*npolh) =
fvdata(j)%MPOLH(1:npolh)
1004 fvdata_1d_array(10*npolh+1:11*npolh) =
fvdata(j)%RPOLH(1:npolh)
1005 fvdata_1d_array(11*npolh+1:12*npolh) =
fvdata(j)%TPOLH(1:npolh)
1006
1007 call spmd_send(fvdata_1d_array,12*npolh,it_spmd(1),25000)
1008 DEALLOCATE(fvdata_1d_array)
1009 endif
1010
1011 if (ispmd == 0)then
1012 ALLOCATE(fvdata_1d_array(12*npolhg))
1013 call spmd_recv(fvdata_1d_array,12*npolhg,it_spmd(
fvspmd(j)%PMAIN),25000)
1014
1015 fvdata_p(j)%CENTROID_POLH(1,1:npolhg) = fvdata_1d_array(00*npolhg+1:01*npolhg)
1016 fvdata_p(j)%CENTROID_POLH(2,1:npolhg) = fvdata_1d_array(01*npolhg+1:02*npolhg)
1017 fvdata_p(j)%CENTROID_POLH(3,1:npolhg) = fvdata_1d_array(02*npolhg+1:03*npolhg)
1018 fvdata_p(j)%QPOLH(1,1:npolhg) = fvdata_1d_array(03*npolhg+1:04*npolhg)
1019 fvdata_p(j)%QPOLH(2,1:npolhg) = fvdata_1d_array(04*npolhg+1:05*npolhg)
1020 fvdata_p(j)%QPOLH(3,1:npolhg) = fvdata_1d_array(05*npolhg+1:06*npolhg)
1021 fvdata_p(j)%PPOLH(1:npolhg) = fvdata_1d_array(06*npolhg+1:07*npolhg)
1022 fvdata_p(j)%SSPPOLH(1:npolhg) = fvdata_1d_array(07*npolhg+1:08*npolhg)
1023 fvdata_p(j)%DTPOLH(1:npolhg
1024 fvdata_p(j)%MPOLH(1:npolhg) = fvdata_1d_array(09*npolhg+1:10*npolhg)
1025 fvdata_p(j)%RPOLH(1:npolhg) = fvdata_1d_array
1026 fvdata_p(j)%TPOLH(1:npolhg) = fvdata_1d_array(11*npolhg+1:12*npolhg)
1027 user_nod_id%FVMBAG_LEN = user_nod_id%FVMBAG_LEN + npolhg
1028 DEALLOCATE(fvdata_1d_array)
1029 endif
1030 endif
1031
1032 ENDDO
1033 endif
1034
1035 ELSE
1036
1039 ALLOCATE (fvdata_p(
nfvbag))
1042 npolh_anim =
fvdata(j)%NPOLH
1043 npolh =
max(1,npolh)
1044 ALLOCATE (fvdata_p(j)%CENTROID_POLH(3,npolh))
1045 ALLOCATE (fvdata_p(j)%QPOLH(3,npolh))
1046 ALLOCATE (fvdata_p(j)%PPOLH(npolh))
1047 ALLOCATE (fvdata_p(j)%SSPPOLH(npolh))
1048 ALLOCATE (fvdata_p(j)%DTPOLH(npolh))
1049 ALLOCATE (fvdata_p(j)%MPOLH(npolh))
1050 ALLOCATE (fvdata_p(j)%RPOLH(npolh))
1051 ALLOCATE (fvdata_p(j)%TPOLH(npolh))
1052
1053 fvdata_p(j)%NPOLH = npolh
1054 fvdata_p(j)%NPOLH_ANIM = npolh_anim
1055 fvdata_p(j)%CENTROID_POLH(1,1:npolh) =
fvdata(j)%CENTROID_POLH(1,1:npolh)
1056 fvdata_p(j)%CENTROID_POLH(2,1:npolh) =
fvdata(j)%CENTROID_POLH(2,1:npolh)
1057 fvdata_p(j)%CENTROID_POLH(3,1:npolh) =
fvdata(j)%CENTROID_POLH(3,1:npolh)
1058 fvdata_p(j)%QPOLH(1,1:npolh) =
fvdata(j)%QPOLH(1,1:npolh)
1059 fvdata_p(j)%QPOLH(2,1:npolh) =
fvdata(j)%QPOLH(2,1:npolh)
1060 fvdata_p(j)%QPOLH(3,1:npolh) =
fvdata(j)%QPOLH(3,1:npolh)
1061 fvdata_p(j)%PPOLH(1:npolh) =
fvdata(j)%PPOLH(1:npolh)
1062 fvdata_p(j)%SSPPOLH(1:npolh) =
fvdata(j)%SSPPOLH(1:npolh)
1063 fvdata_p(j)%DTPOLH(1:npolh) =
fvdata(j)%DTPOLH(1:npolh)
1064 fvdata_p(j)%MPOLH(1:npolh) =
fvdata(j)%MPOLH(1:npolh)
1065 fvdata_p(j)%RPOLH(1:npolh) =
fvdata(j)%RPOLH(1:npolh)
1066 fvdata_p(j)%TPOLH(1:npolh) =
fvdata(j)%TPOLH(1:npolh)
1067 user_nod_id%FVMBAG_LEN = user_nod_id%FVMBAG_LEN + npolh
1068 ENDDO
1069 ENDIF
1070 ENDIF
1071
1072 max_nod_id = max_nod_id + user_nod_id%FVMBAG_LEN
1073
1074 IF(
nfvbag > 0 .AND. ispmd==0 .AND. h3d_data%IH3D == 1)
THEN
1075 CALL startime(timers,macro_timer_libh3d)
1077 CALL stoptime(timers,macro_timer_libh3d)
1078 ENDIF
1079
1080
1081
1082
1083
1084 IF(h3d_data%IH3D == 1) THEN
1085 IF(nspmd > 1) THEN
1086 DO i=1,numsph
1087 DO j=1,2
1088 kxsp_tmp(j,i) = kxsp(j,i)
1089 ENDDO
1090 kxsp_tmp(3,i) = itab(kxsp(3,i))
1091 DO j=4,nisp
1092 kxsp_tmp(j,i) = kxsp(j,i)
1093 ENDDO
1094 ENDDO
1095
1096 CALL startime(timers,macro_timer_spmdh3d)
1098 CALL stoptime(timers,macro_timer_spmdh3d)
1099
1100 ELSE
1101 DO i=1,numsph
1102 DO j=1,2
1103 kxsp_p(j,i) = kxsp(j,i)
1104 ENDDO
1105 kxsp_p(3,i) = itab(kxsp(3,i))
1106 DO j=4,nisp
1107 kxsp_p(j,i) = kxsp(j,i)
1108 ENDDO
1109 ENDDO
1110 ENDIF
1111
1112 IF(nspmd > 1) THEN
1113 if (ispmd == 0)then
1114 ipartsp_p(1:numsphg)=0
1115 endif
1116 CALL startime(timers,macro_timer_spmdh3d)
1118 CALL stoptime(timers,macro_timer_spmdh3d)
1119 ELSE
1120 DO i=1,numsph
1121 ipartsp_p(i) = ipartsp(i)
1122 ENDDO
1123 ENDIF
1124 ENDIF
1125
1126 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1127 CALL startime(timers,macro_timer_libh3d)
1128 CALL c_h3d_create_sph(itab_p,numnodg,kxsp_p,nisp,numsphg,ipartsp_p,ipart,lipart1,x,h3d_data%PARTS(1)%PART)
1129 CALL stoptime(timers,macro_timer_libh3d)
1130 ENDIF
1131
1132
1133
1134
1135
1136
1137 IF(h3d_data%IH3D == 1) THEN
1138 IF(nspmd > 1) THEN
1139 DO i=1,numelr
1140 ixr_tmp(1,i) = ixr(1,i)
1141 DO j=2,4
1142 IF (ixr(j,i) /= 0 )ixr_tmp(j,i) = itab(ixr(j,i))
1143 ENDDO
1144 ixr_tmp(4:nixr,i) = ixr(4:nixr,i)
1145 ENDDO
1146
1147 CALL startime(timers,macro_timer_spmdh3d)
1149 CALL stoptime(timers,macro_timer_spmdh3d)
1150
1151 ELSE
1152 DO i=1,numelr
1153 ixr_p(1,i) = ixr(1,i)
1154 DO j=2,4
1155 IF (ixr(j,i) /= 0 ) ixr_p(j,i) = itab(ixr(j,i))
1156 ENDDO
1157 ixr_p(4:nixr,i) = ixr(4:nixr,i)
1158 ENDDO
1159 ENDIF
1160
1161 IF(nspmd > 1) THEN
1162 CALL startime(timers,macro_timer_spmdh3d)
1164 CALL stoptime(timers,macro_timer_spmdh3d)
1165 ELSE
1166 DO i=1,numelr
1167 ipartr_p(i) = ipartr(i)
1168 ENDDO
1169 ENDIF
1170 ENDIF
1171
1172 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1173 CALL startime(timers,macro_timer_libh3d)
1174 CALL c_h3d_create_springs(itab,numnod,ixr_p,nixr,numelrg,ipartr_p,ipart,lipart1,h3d_data%PARTS(1)%PART)
1175 CALL stoptime(timers,macro_timer_libh3d)
1176 ENDIF
1177
1178
1179
1180
1181 IF(h3d_data%IH3DTHEN
1182 IF(nspmd > 1) THEN
1183 DO i=1,numelp
1184 ixp_tmp(1,i) = ixp(1,i)
1185 DO j=2,4
1186 ixp_tmp(j,i) = itab(ixp(j,i))
1187 ENDDO
1188 ixp_tmp(4:nixp,i) = ixp(4:nixp,i)
1189 ENDDO
1190
1193 CALL stoptime(timers,macro_timer_spmdh3d)
1194
1195 ELSE
1196 DO i=1,numelp
1197 ixp_p(1,i) = ixp(1,i)
1198 DO j=2,4
1199 ixp_p(j,i) = itab(ixp(j,i))
1200 ENDDO
1201 ixp_p(4:nixp,i) = ixp(4:nixp,i)
1202 ENDDO
1203 ENDIF
1204 IF(nspmd > 1)THEN
1205 CALL startime(timers,macro_timer_spmdh3d)
1207 CALL stoptime(timers,macro_timer_spmdh3d)
1208 ELSE
1209 DO i=1,numelp
1210 ipartp_p(i) = ipartp(i)
1211 ENDDO
1212 ENDIF
1213 ENDIF
1214
1215
1216 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1217 CALL startime(timers,macro_timer_libh3d)
1218 CALL c_h3d_create_beams(itab,numnod,ixp_p,nixp,numelpg,ipartp_p,ipart,lipart1,h3d_data%PARTS(1)%PART)
1219 CALL stoptime(timers,macro_timer_libh3d)
1220 ENDIF
1221
1222
1223
1224
1225 IF(h3d_data%IH3D == 1) THEN
1226 IF(nspmd > 1) THEN
1227 DO i=1,numelt
1228 ixt_tmp(1,i) = ixt(1,i)
1229 DO j=2,4
1230 ixt_tmp(j,i) = itab(ixt(j,i))
1231 ENDDO
1232 ixt_tmp(4:nixt,i) = ixt(4:nixt,i)
1233 ENDDO
1234
1235 CALL startime(timers,macro_timer_spmdh3d)
1237 CALL stoptime(timers,macro_timer_spmdh3d)
1238
1239 ELSE
1240 DO i=1,numelt
1241 ixt_p(1,i) = ixt(1,i)
1242 DO j=2,4
1243 ixt_p(j,i) = itab(ixt(j,i))
1244 ENDDO
1245 ixt_p(4:nixt,i) = ixt(4:nixt,i)
1246 ENDDO
1247 ENDIF
1248 IF(nspmd > 1) THEN
1249 CALL startime(timers,macro_timer_spmdh3d)
1251 CALL stoptime(timers,macro_timer_spmdh3d)
1252 ELSE
1253 DO i=1,numelt
1254 ipartt_p(i) = ipartt(i)
1255 ENDDO
1256 ENDIF
1257 ENDIF
1258
1259
1260 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1261 CALL startime(timers,macro_timer_libh3d)
1262 CALL c_h3d_create_truss(itab,numnod,ixt_p,nixt,numeltrg,ipartt_p,ipart,lipart1,h3d_data%PARTS(1)%PART)
1263 CALL stoptime(timers,macro_timer_libh3d)
1264 ENDIF
1265
1266
1267
1268
1269
1270 IF(nspmd > 1 .AND. h3d_data%IH3D == 1)THEN
1271 nerby = 0
1272 IF (nrbody>0)
1273 .
CALL drbycnt(nerby,npby,fr_rby2)
1274 nerbe2 = 0
1275 IF (nrbe2g>0)
1276 .
CALL drbe2cnt(nerbe2,irbe2,lrbe2,weight)
1277 nerbe3 = 0
1278 IF (nrbe3g>0)
1280
1281 sbufspm=0
1282 sbufrecvm=0
1283 sbufspo=0
1284 sporby=0
1285
1286 DO i=1,nspmd
1287 sbufspm = sbufspm + iad_rby2(1,i)
1288 sbufrecvm = sbufrecvm + iad_rby2(2,i)+1
1289 ENDDO
1290 sbufspm = sbufspm + 2*nrbykin
1291 sbufrecvm = sbufrecvm + 2*nrbykin*nspmd
1292 DO i=1,nrbykin
1293
1294 IF ((ispmd+1)==abs
1295 . sbufspo = sbufspo + fr_rby2(2,i)
1296 ENDDO
1297 sbufspo = sbufspo + nrbykin*2
1298 IF (ispmd==0) THEN
1299 sporby = nerby+nrbykin*2
1300 ELSE
1301 sporby=1
1302 ENDIF
1303
1305 . sbufspm,sbufrecvm,sbufspo,sporby,
1306 . nodglob,weight,itab,compid_rbodies)
1307
1309 . nerbe2t,itab,compid_rbe2s)
1310
1312 . nerbe3t,itab,compid_rbe3s)
1313
1314 ELSE
1315 IF(nspmd == 1 .AND. ispmd==0 .AND. h3d_data%IH3D == 1) THEN
1316 CALL startime(timers,macro_timer_libh3d)
1318 CALL c_h3d_create_rbe2(itab,numnod,irbe2,nrbe2l,lrbe2,nrbe2,compid_rbe2s,compid_rbe2s)
1319 CALL c_h3d_create_rbe3(itab,numnod,irbe3,nrbe3l,lrbe3,nrbe3,compid_rbe3s,compid_rbe3s)
1320 CALL stoptime(timers,macro_timer_libh3d)
1321 ENDIF
1322 ENDIF
1323
1324
1325
1326
1327
1328 IF(h3d_data%IH3D == 1) THEN
1329 IF(nspmd > 1 .AND. h3d_data%IH3D == 1) THEN
1330 DO i=1,numelc
1331 ixc_tmp(1,i) = ixc(1,i)
1332 DO j=2,5
1333 ixc_tmp(j,i) = itab(ixc(j,i))
1334 ENDDO
1335 ixc_tmp(6:nixc,i) = ixc(6:nixc,i)
1336 ENDDO
1337
1338 CALL startime(timers,macro_timer_spmdh3d)
1340 CALL stoptime(timers,macro_timer_spmdh3d)
1341
1342 DO i=1,numeltg
1343 ixtg_tmp(1,i) = ixtg(1,i)
1344 DO j=2,4
1345 ixtg_tmp(j,i) = itab(ixtg(j,i))
1346 ENDDO
1347 ixtg_tmp(5:nixtg,i) = ixtg(5:nixtg,i)
1348 ENDDO
1349
1350 CALL startime(timers,macro_timer_spmdh3d)
1352 CALL stoptime(timers,macro_timer_spmdh3d)
1353
1354 ELSE
1355 DO i=1,numelc
1356 ixc_p(1,i) = ixc(1,i)
1357 DO j=2,5
1358 ixc_p(j,i) = itab(ixc(j,i))
1359 ENDDO
1360 ixc_p(6:nixc,i) = ixc(6:nixc,i)
1361 ENDDO
1362
1363 DO i=1,numeltg
1364 ixtg_p(1,i) = ixtg(1,i)
1365 DO j=2,4
1366 ixtg_p(j,i) = itab(ixtg(j,i))
1367 ENDDO
1368 ixtg_p(5:nixtg,i) = ixtg(5:nixtg,i)
1369 ENDDO
1370
1371 ENDIF
1372 IF(nspmd > 1) THEN
1373 CALL startime(timers,macro_timer_spmdh3d)
1375 CALL stoptime(timers,macro_timer_spmdh3d)
1376 CALL startime(timers,macro_timer_spmdh3d)
1378 CALL stoptime(timers,macro_timer_spmdh3d)
1379 ELSE
1380 DO i=1,numelc
1381 ipartc_p(i) = ipartc(i)
1382 ENDDO
1383 DO i=1,numeltg
1384 iparttg_p(i) = iparttg(i)
1385 ENDDO
1386 ENDIF
1387 ENDIF
1388
1389
1390
1391 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1392 CALL startime(timers,macro_timer_libh3d)
1394 . h3d_data%PARTS(1)%PART)
1395 CALL c_h3d_create_sh3ns(itab_p,numnodg,ixtg_p,nixtg,numeltgg,iparttg_p,ipart,lipart1,
1396 . h3d_data%PARTS(1)%PART)
1397 CALL stoptime(timers,macro_timer_libh3d)
1398 ENDIF
1399
1400
1401
1402
1403
1404 max_nod_id = user_nod_id%FVMBAG_SHIFT + user_nod_id%FVMBAG_LEN
1405 user_nod_id%RWALL_SHIFT = max_nod_id
1406
1407 IF(h3d_data%IH3D == 1 .AND. nrwall>0) THEN
1408
1409 CALL scanor(x,d,cdg,xmin,ymin,zmin,xmax,
ymax,zmax,scale,
1410 . weight)
1411
1412
1414 2 nstrf,rwbuf,nprw ,x,xmin,
1415 3 ymin,zmin,xmax,
ymax,zmax,
1416 4 fr_sec,fr_wall,weight,itab,
1417 5 xwl ,ywl , zwl, v1, v2, v3, vv1, vv2, vv3, xl, xn, yn, zn )
1418
1419
1420 IF(ispmd==0) THEN
1421 CALL startime(timers,macro_timer_libh3d)
1423 . xwl ,ywl , zwl, v1, v2, v3, vv1, vv2, vv3, xl, xn, yn, zn, user_nod_id%RWALL_LEN )
1424 CALL stoptime(timers,macro_timer_libh3d)
1425 max_nod_id = max_nod_id + user_nod_id%RWALL_LEN
1426 ENDIF
1427
1428 ENDIF
1429
1430
1431
1432
1433
1434 IF(h3d_data%IH3D == 1) THEN
1435
1436 IF(nspmd > 1) THEN
1437 ALLOCATE(ixs_tmp(nixs,numels8))
1438
1439 DO i=1,numels8
1440 ixs_tmp(1,i) = ixs(1,i)
1441 DO j=2,9
1442 ixs_tmp(j,i) = itab(ixs(j,i))
1443 ENDDO
1444 ixs_tmp(10:nixs,i) = ixs(10:nixs,i)
1445 ENDDO
1446
1447 DO i=1,numels10
1448 ixs10_tmp(1,i) = itab(ixs(2,numels8+i))
1449 ixs10_tmp(2,i) = itab(ixs(4,numels8+i))
1450 ixs10_tmp(3,i) = itab(ixs(7,numels8+i))
1451 ixs10_tmp(4,i) = itab(ixs(6,numels8+i))
1452 DO j=1,6
1453 IF (ixs10(j,i)>0) THEN
1454 ixs10_tmp(4+j,i) = itab(ixs10(j,i))
1455 ELSE
1456 ixs10_tmp(4+j,i) = 0
1457 END IF
1458 ENDDO
1459 ixs10_tmp(11,i) = ixs(nixs,numels8+i)
1460 ENDDO
1461
1462
1463 DO i=1,numels16
1464 ixs16_tmp(1,i) = itab(ixs(2,numels8+numels10+numels20+i))
1465 ixs16_tmp(2,i) = itab(ixs(3,numels8+numels10+numels20+i))
1466 ixs16_tmp(3,i) = itab(ixs(4,numels8+numels10+numels20+i))
1467 ixs16_tmp(4,i) = itab(ixs(5,numels8+numels10+numels20+i))
1468 ixs16_tmp(5,i) = itab(ixs(6,numels8+numels10+numels20+i))
1469 ixs16_tmp(6,i) = itab(ixs(7,numels8+numels10+numels20+i))
1470 ixs16_tmp(7,i) = itab(ixs(8,numels8+numels10+numels20+i))
1471 ixs16_tmp(8,i) = itab(ixs(9,numels8+numels10+numels20+i))
1472 DO j=1,8
1473 ixs16_tmp(8+j,i) = itab(ixs16(j,i))
1474 ENDDO
1475 ixs16_tmp(17,i) = ixs(nixs,numels8+numels10+numels20+i)
1476 ENDDO
1477
1478
1479 DO i=1,numels20
1480 ixs20_tmp(1,i) = itab(ixs(2,numels8+numels10+i))
1481 ixs20_tmp(2,i) = itab(ixs(3,numels8
1482 ixs20_tmp(3,i) = itab(ixs(4,numels8+numels10+i))
1483 ixs20_tmp(4,i) = itab(ixs(5,numels8+numels10+i))
1484 ixs20_tmp(5,i) = itab(ixs(6,numels8+numels10+i))
1485 ixs20_tmp(6,i) = itab(ixs(7,numels8
1486 ixs20_tmp(7,i) = itab(ixs(8,numels8+numels10+i))
1487 ixs20_tmp(8,i) = itab(ixs(9,numels8+numels10+i))
1488 DO j=1,12
1489 ixs20_tmp(8+j,i) = itab(ixs20(j,i))
1490 ENDDO
1491 ixs20_tmp(21,i) = ixs(nixs,numels8+numels10+i)
1492 ENDDO
1493
1494 CALL startime(timers,macro_timer_spmdh3d)
1495 CALL spmd_h3d_gather_i(ixs_tmp,nixs*numels8,ixs_p,nixs*(numelsg-numels10g-numels16g-numels20g))
1499 CALL stoptime(timers,macro_timer_spmdh3d)
1500 DEALLOCATE(ixs_tmp)
1501 ELSE
1502
1503 DO i=1,numels8
1504 ixs_p(1,i) = ixs(1,i)
1505 DO j=2,9
1506 ixs_p(j,i) = itab(ixs(j,i))
1507 ENDDO
1508 ixs_p(10:nixs,i) = ixs(10:nixs,i)
1509 ENDDO
1510
1511 DO i=1,numels10
1512 ixs10_p(1,i) = itab(ixs(2,numels8+i))
1513 ixs10_p(2,i) = itab(ixs(4,numels8+i))
1514 ixs10_p(3,i) = itab(ixs(7,numels8+i))
1515 ixs10_p(4,i) = itab(ixs(6,numels8+i))
1516 DO j=1,6
1517 ixs10_p(4+j,i) = itab(ixs10(j,i))
1518 ENDDO
1519 ixs10_p(11,i) = ixs(nixs,numels8+i)
1520 ENDDO
1521
1522 DO i=1,numels16
1523 ixs16_p(1,i) = itab(ixs(2,numels8+numels10+numels20+i))
1524 ixs16_p(2,i) = itab(ixs(3,numels8+numels10+numels20+i))
1525 ixs16_p(3,i) = itab(ixs(4,numels8+numels10+numels20+i))
1526 ixs16_p(4,i) = itab(ixs(5,numels8+numels10+numels20+i))
1527 ixs16_p(5,i) = itab(ixs(6,numels8+numels10+numels20+i))
1528 ixs16_p(6,i) = itab(ixs(7,numels8+numels10+numels20+i))
1529 ixs16_p(7,i) = itab(ixs(8,numels8+numels10+numels20+i))
1530 ixs16_p(8,i) = itab(ixs(9,numels8+numels10+numels20+i))
1531 DO j=1,8
1532 ixs16_p(8+j,i) = ixs16(j,i)
1533 ENDDO
1534 ixs16_p(17,i) = ixs(nixs,numels8+numels10+numels20+i)
1535 ENDDO
1536
1537 DO i=1,numels20
1538 ixs20_p(1,i) = itab(ixs(2,numels8+numels10+i))
1539 ixs20_p(2,i) = itab(ixs(3,numels8+numels10+i))
1540 ixs20_p(3,i) = itab(ixs(4,numels8+numels10+i))
1541 ixs20_p(4,i) = itab(ixs(5,numels8+numels10+i))
1542 ixs20_p(5,i) = itab(ixs(6,numels8+numels10+i))
1543 ixs20_p(6,i) = itab(ixs(7,numels8+numels10+i))
1544 ixs20_p(7,i) = itab(ixs(8,numels8+numels10+i))
1545 ixs20_p(8,i) = itab(ixs(9,numels8+numels10+i))
1546 DO j=1,12
1547 ixs20_p(8+j,i) = itab(ixs20(j,i))
1548 ENDDO
1549 ixs20_p(21,i) = ixs(nixs,numels8+numels10+i)
1550 ENDDO
1551 ENDIF
1552 IF(nspmd > 1) THEN
1553 CALL startime(timers,macro_timer_spmdh3d)
1554 CALL spmd_h3d_gather_i(iparts,numels8,iparts_p,numelsg-numels10g-numels16g-numels20g)
1556 CALL spmd_h3d_gather_i(iparts(numels8+numels10+1),numels20,iparts20_p,numels20g)
1557 CALL spmd_h3d_gather_i(iparts(numels8+numels10+numels20+1),numels16,iparts16_p,numels16g)
1558 CALL stoptime(timers,macro_timer_spmdh3d)
1559 ELSE
1560 DO i=1,numels8
1561 iparts_p(i) = iparts(i)
1562 ENDDO
1563 DO i=1,numels10
1564 iparts10_p(i) = iparts(i+numels8)
1565 ENDDO
1566 DO i=1,numels20
1567 iparts20_p(i) = iparts(i+numels8+numels10)
1568 ENDDO
1569 DO i=1,numels16
1570 iparts16_p(i) = iparts(i+numels8+numels10+numels20)
1571 ENDDO
1572 ENDIF
1573 ENDIF
1574
1575
1576 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1577 CALL startime(timers,macro_timer_libh3d)
1579 . h3d_data%PARTS(1)%PART,numels10g,ixs10_p,iparts10_p,numels16g,ixs16_p,
1580 . iparts16_p,numels20g,ixs20_p,iparts20_p)
1581 CALL stoptime(timers,macro_timer_libh3d)
1582 ENDIF
1583
1584
1585
1586
1587
1588 IF(h3d_data%IH3D == 1) THEN
1589 IF(nspmd > 1) THEN
1590 DO i=1,numelq
1591 ixq_tmp(1,i) = ixq(1,i)
1592 DO j=2,5
1593 ixq_tmp(j,i) = itab(ixq(j,i))
1594 ENDDO
1595 ixq_tmp(6:nixq,i) = ixq(6:nixq,i)
1596 ENDDO
1597 CALL startime(timers,macro_timer_spmdh3d)
1599 CALL stoptime(timers,macro_timer_spmdh3d)
1600 ELSE
1601 DO i=1,numelq
1602 ixq_p(1,i) = ixq(1,i)
1603 DO j=2,5
1604 ixq_p(j,i) = itab(ixq(j,i))
1605 ENDDO
1606 ixq_p(6:nixq,i) = ixq(6:nixq,i)
1607 ENDDO
1608 ENDIF
1609 IF(nspmd > 1) THEN
1610 CALL startime(timers,macro_timer_spmdh3d)
1612 CALL stoptime(timers,macro_timer_spmdh3d)
1613 ELSE
1614 DO i=1,numelq
1615 ipartq_p(i) = ipartq(i)
1616 ENDDO
1617 ENDIF
1618 ENDIF
1619
1620
1621 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1622 CALL startime(timers,macro_timer_libh3d)
1624 . ixq_p,nixq,numelqg,ipartq_p)
1625 CALL stoptime(timers,macro_timer_libh3d)
1626 ENDIF
1627
1628
1629
1630
1632 ALLOCATE(nodal_ipart(numnod),imapskp(
numskinp0))
1634 . ixc, ixtg, ixs,ixs10,ixs16,ixs20,
1635 . nodal_ipart)
1637 END IF
1638 IF(h3d_data%IH3D == 1 .AND. numsking>0 ) THEN
1639
1640 ixskin_tmp = 0
1642 . itab ,ixskin_tmp ,tag_skins6,
1643 . ibcl,iloadp,lloadp,nodal_ipart,imapskp,loads,pblast)
1644
1645 IF(nspmd > 1) THEN
1646
1647 CALL startime(timers,macro_timer_spmdh3d)
1649 CALL stoptime(timers,macro_timer_spmdh3d)
1650 ELSE
1651 ixskin_p(1:nixskin,1:numskin) = ixskin_tmp(1:nixskin,1:numskin)
1652 END IF
1653
1654
1655 IF(ispmd == 0) THEN
1656
1657 DO i=1,numsking
1658 ipartskin_p(i) = ixskin_p(1,i)
1659 ixskin_p(nixskin,i) = i
1660 ENDDO
1661 CALL startime(timers,macro_timer_libh3d)
1662
1664 . ixskin_p,nixskin,numsking,ipartskin_p)
1665 CALL stoptime(timers,macro_timer_libh3d)
1666 ENDIF
1667 ENDIF
1668
1669
1670
1671
1672 IF(ispmd==0.AND. h3d_data%IH3D == 1) THEN
1673 CALL startime(timers,macro_timer_libh3d)
1675 CALL stoptime(timers,macro_timer_libh3d)
1676 ENDIF
1677
1678
1679
1680
1681 IF(ispmd==0.AND. ( h3d_data%IH3D_RUN == 1)) THEN
1682 CALL startime(timers,macro_timer_libh3d)
1684
1685
1686
1687
1689 CALL stoptime(timers,macro_timer_libh3d)
1690
1691 ENDIF
1692
1693
1694
1695
1696
1697 IF(nrwall>0) THEN
1698
1699 CALL scanor(x,d,cdg,xmin,ymin,zmin,xmax,
ymax,zmax,scale,
1700 . weight)
1701
1702
1704 2 nstrf,rwbuf,nprw ,d,xmin,
1705 3 ymin,zmin,xmax,
ymax,zmax,
1706 4 fr_sec,fr_wall
1707 5 xwl ,ywl , zwl, v1, v2, v3, vv1, vv2, vv3)
1708 ENDIF
1709
1710 h3dtitle = ' '
1711 len_h3dtitle = 0
1712 IF (h3d_data%N_TITLE /= 0) THEN
1713 DO i=1,h3d_data%N_TITLE
1714 IF(h3d_data%ITITLE(i) == h3d_data%IH3D) THEN
1715 h3dtitle = h3d_data%TITLE(i)
1716 len_h3dtitle = len_trim(h3d_data%TITLE(i))
1717 ENDIF
1718 ENDDO
1719 ENDIF
1720
1721 IF(nspmd > 1 .AND. ispmd==0)THEN
1722 CALL startime(timers,macro_timer_libh3d)
1723 CALL c_h3d_update_nodes(h3dtitle,len_h3dtitle,tt,h3d_data%IH3D,
1724 . itab_p,numnodg,d_p, nrwall, user_nod_id%RWALL_SHIFT,
1725 . xwl ,ywl , zwl, v1, v2,
1726 . v3, vv1, vv2, vv3,kxsp_p,
1727 . nisp,numsphg,tagnod_p,nprw)
1728 CALL stoptime(timers,macro_timer_libh3d)
1729 ELSEIF(ispmd==0 )THEN
1730 CALL startime(timers,macro_timer_libh3d)
1731 CALL c_h3d_update_nodes(h3dtitle,len_h3dtitle,tt,h3d_data%IH3D,
1732 . itab,numnod,d, nrwall, user_nod_id%RWALL_SHIFT,
1733 . xwl ,ywl , zwl, v1, v2,
1734 . v3, vv1, vv2, vv3,kxsp_p,
1735 . nisp,numsphg,tagnod_p,nprw)
1736 CALL stoptime(timers,macro_timer_libh3d)
1737 ENDIF
1738
1739
1740
1741 IF(
nfvbag > 0 .AND. ispmd==0)
THEN
1742 CALL startime(timers,macro_timer_libh3d)
1744 . fvdata_p, user_nod_id%FVMBAG_SHIFT)
1745 CALL stoptime(timers,macro_timer_libh3d)
1746 ENDIF
1747
1748
1749
1750
1751 DEALLOCATE(d_p)
1752
1753 ALLOCATE(nodal_scalar(numnod))
1754 ALLOCATE(nodal_vector(3*numnod))
1755 ALLOCATE(nodal_tensor(6*numnod))
1756 ALLOCATE(node_id(numnod))
1757 ALLOCATE(is_writen_node(numnod))
1758 is_writen_node(1:numnod) = 0
1759
1760 IF(ispmd == 0)THEN
1761 ALLOCATE(nodal_scalar_fvm(airbags_total_fvm_in_h3d_g))
1762 ALLOCATE(nodal_vector_fvm(3*airbags_total_fvm_in_h3d_g))
1763 ALLOCATE(node_id_fvm(airbags_total_fvm_in_h3d_g))
1764 ALLOCATE(is_writen_node_fvm(airbags_total_fvm_in_h3d_g))
1765 is_writen_node_fvm(1:airbags_total_fvm_in_h3d_g) = 0
1766 ELSE
1767 ALLOCATE(nodal_scalar_fvm(1))
1768 ALLOCATE(nodal_vector_fvm(3*1))
1769 ALLOCATE(node_id_fvm(1))
1770 ALLOCATE(is_writen_node_fvm(1))
1771 is_writen_node_fvm(1:1) = 0
1772 ENDIF
1773
1774
1775 IF (ispmd == 0 )THEN
1776 ALLOCATE(is_writen_node_p(numnodg))
1777 ALLOCATE(nodal_scalar_p(numnodg))
1778 ALLOCATE(nodal_vector_p(3*numnodg))
1779 ALLOCATE(nodal_tensor_p(6*numnodg))
1780 ALLOCATE(node_id_p(numnodg))
1781 is_writen_node_p(1:numnodg) = 0
1782 ELSE
1783 ALLOCATE(is_writen_node_p(1))
1784 ALLOCATE(nodal_scalar_p(1))
1785 ALLOCATE(nodal_vector_p(1))
1786 ALLOCATE(nodal_tensor_p(1))
1787 ALLOCATE(node_id_p(1))
1788 is_writen_node_p(1) = 0
1789 ENDIF
1790
1791
1792 ALLOCATE(oned_scalar(numelr+numelp+numelt))
1793 ALLOCATE(oned_vector(3*(numelr+numelp+numelt)))
1794 ALLOCATE(oned_tensor(6*(numelr+numelp+numelt)))
1795 ALLOCATE(oned_torsor(9*(numelr+numelp+numelt)))
1796 ALLOCATE(oned_id(numelrg+numelpg+numeltrg))
1797 ALLOCATE(oned_ity(numelrg+numelpg+numeltrg))
1798 ALLOCATE(is_writen_oned(numelrg+numelpg+numeltrg))
1799 oned_id(1:numelr+numelp+numelt) = 0
1800 oned_ity(1:numelr+numelp+numelt) = 0
1801 is_writen_oned(1:numelr+numelp+numelt) = 0
1802
1803 IF (ispmd == 0 )THEN
1804 ALLOCATE(oned_scalar_p(numelrg+numelpg+numeltrg))
1805 ALLOCATE(oned_vector_p(3*(numelrg+numelpg+numeltrg)))
1806 ALLOCATE(oned_tensor_p(6*(numelrg+numelpg+numeltrg)))
1807 ALLOCATE(oned_torsor_p(9*(numelrg+numelpg+numeltrg)))
1808 ALLOCATE(oned_id_p(numelrg+numelpg+numeltrg))
1809 ALLOCATE(oned_ity_p(numelrg+numelpg+numeltrg))
1810 ALLOCATE(is_writen_oned_p(numelrg+numelpg+numeltrg))
1811 is_writen_oned_p(1:numelrg+numelpg+numeltrg) = 0
1812 ELSE
1813 ALLOCATE(oned_scalar_p(1))
1814 ALLOCATE(oned_vector_p(1))
1815 ALLOCATE(oned_tensor_p(1))
1816 ALLOCATE(oned_torsor_p(1))
1817 ALLOCATE(oned_id_p(1))
1818 ALLOCATE(oned_ity_p(1))
1819 ALLOCATE(is_writen_oned_p(1))
1820 is_writen_oned_p(1) = 0
1821 ENDIF
1822
1823
1824 ALLOCATE(shell_scalar(numelc+numeltg))
1825 ALLOCATE(shell_stack(max_shell_stacksize))
1826 ALLOCATE(shell_stack_p(numelcg+numeltgg))
1827 ALLOCATE(shell_vector(3*(numelc+numeltg)))
1828 ALLOCATE(shell_tensor(3*(numelc+numeltg)))
1829 ALLOCATE(shell_id(numelc+numeltg))
1830 ALLOCATE(shell_ity(numelc+numeltg))
1831 ALLOCATE(is_writen_shell(numelc+numeltg))
1832 shell_id(1:numelc+numeltg) = 0
1833 shell_ity(1:numelc+numeltg) = 0
1834 is_writen_shell(1:numelc+numeltg) = 0
1835
1836 IF (ispmd == 0 )THEN
1837 ALLOCATE(shell_scalar_p(numelcg+numeltgg))
1838 ALLOCATE(shell_vector_p(3*(numelcg+numeltgg)))
1839 ALLOCATE(shell_tensor_p(3*(numelcg+numeltgg)))
1840 ALLOCATE(shell_id_p(numelcg+numeltgg))
1841 ALLOCATE(shell_ity_p(numelcg+numeltgg))
1842 ALLOCATE(is_writen_shell_p(numelcg+numeltgg))
1843 is_writen_shell_p(1:numelcg+numeltgg) = 0
1844 ELSE
1845 ALLOCATE(shell_scalar_p(1))
1846 ALLOCATE(shell_vector_p(1))
1847 ALLOCATE(shell_tensor_p(1))
1848 ALLOCATE(shell_id_p(1))
1849 ALLOCATE(shell_ity_p(1))
1850 ALLOCATE(is_writen_shell_p(1))
1851 is_writen_shell_p(1) = 0
1852 ENDIF
1853
1854
1855 max_ncorn = 10
1856 ALLOCATE(solid_scalar(numels))
1857 ALLOCATE(solid_vector(3*numels))
1858 ALLOCATE(solid_tensor(6*numels))
1859 ALLOCATE(solid_tensor_corner(6*numels*max_ncorn))
1860 ALLOCATE(solid_id(numels))
1861 ALLOCATE(isolnod(numels))
1862 ALLOCATE(solid_ity(numels))
1863 ALLOCATE(is_writen_solid(numels))
1864 solid_id(1:numels) = 0
1865 isolnod(1:numels) = 0
1866 solid_ity(1:numels) = 0
1867 is_writen_solid(1:numels) = 0
1868
1869 IF (ispmd == 0 )THEN
1870 ALLOCATE(solid_scalar_p(numelsg))
1871 ALLOCATE(solid_vector_p(3*numelsg))
1872 ALLOCATE(solid_tensor_p(6*numelsg))
1873 ALLOCATE(solid_tensor_corner_p(6*numelsg*max_ncorn))
1874 ALLOCATE(solid_id_p(numelsg))
1875 ALLOCATE(solid_ity_p(numelsg))
1876 ALLOCATE(isolnod_p(numelsg))
1877 ALLOCATE(is_writen_solid_p(numelsg))
1878 is_writen_solid_p(1:numelsg) = 0
1879 ELSE
1880 ALLOCATE(solid_scalar_p(1))
1881 ALLOCATE(solid_vector_p(1))
1882 ALLOCATE(solid_tensor_p(1))
1883 ALLOCATE(solid_tensor_corner_p(1))
1884 ALLOCATE(solid_id_p(1))
1885 ALLOCATE(solid_ity_p(1))
1886 ALLOCATE(isolnod_p(1))
1887 ALLOCATE(is_writen_solid_p(1))
1888 is_writen_solid_p(1) = 0
1889 ENDIF
1890
1891
1892 ALLOCATE(sph_scalar(numsph))
1893 ALLOCATE(sph_tensor(6*numsph))
1894 ALLOCATE(sph_id(numsph))
1895 ALLOCATE(is_writen_sph(numsph))
1896 sph_id(1:numsph) = 0
1897 is_writen_sph(1:numsph) = 0
1898
1899 IF (ispmd == 0 )THEN
1900 ALLOCATE(sph_scalar_p(numsphg))
1901 ALLOCATE(sph_tensor_p(6*numsphg))
1902 ALLOCATE(sph_id_p(numsphg))
1903 ALLOCATE(is_writen_sph_p(numsphg))
1904 is_writen_sph_p(1:numsphg) = 0
1905 ELSE
1906 ALLOCATE(sph_scalar_p(1))
1907 ALLOCATE(sph_tensor_p(1))
1908 ALLOCATE(sph_id_p(1))
1909 ALLOCATE(is_writen_sph_p(1))
1910 is_writen_sph_p(1) = 0
1911 ENDIF
1912
1913
1914 ALLOCATE(quad_scalar(numelq))
1915 ALLOCATE(quad_vector(3*numelq))
1916 ALLOCATE(quad_tensor(6*numelq))
1917 ALLOCATE(quad_id(numelq))
1918 ALLOCATE(is_writen_quad(numelq))
1919 quad_id(1:numelq) = 0
1920 is_writen_quad(1:numelq) = 0
1921
1922 IF (ispmd == 0 )THEN
1923 ALLOCATE(quad_scalar_p(numelqg))
1924 ALLOCATE(quad_vector_p(3*numelqg))
1925 ALLOCATE(quad_tensor_p(6*numelqg))
1926 ALLOCATE(quad_id_p(numelqg))
1927 ALLOCATE(is_writen_quad_p(numelqg))
1928 is_writen_quad_p(1:numelqg) = 0
1929 ELSE
1930 ALLOCATE(quad_scalar_p(1))
1931 ALLOCATE(quad_vector_p(1))
1932 ALLOCATE(quad_tensor_p(1))
1933 ALLOCATE(quad_id_p(1))
1934 ALLOCATE(is_writen_quad_p(1))
1935 is_writen_quad_p(1) = 0
1936 ENDIF
1937
1938 ALLOCATE(skin_tensor(3*numskin))
1939 ALLOCATE(skin_vector(3*numskin))
1940 ALLOCATE(skin_scalar(numskin))
1941 ALLOCATE(is_writen_skin(numskin))
1942 is_writen_skin(1:numskin) = 0
1943
1944 IF (ispmd == 0 )THEN
1945 ALLOCATE(skin_tensor_p(3*numsking))
1946 ALLOCATE(skin_vector_p(3*numsking))
1947 ALLOCATE(skin_scalar_p(numsking))
1948 ALLOCATE(skin_id_p(numsking))
1949 ALLOCATE(is_writen_skin_p(numsking))
1950 is_writen_skin_p(1:numsking) = 0
1951 ELSE
1952 ALLOCATE(skin_tensor_p(1))
1953 ALLOCATE(skin_vector_p(1))
1954 ALLOCATE(skin_scalar_p(1))
1955 ALLOCATE(skin_id_p(1))
1956 ALLOCATE(is_writen_skin_p(1))
1957 is_writen_skin_p(1) = 0
1958 ENDIF
1959
1960 n_outp_data = 0
1961
1962
1963
1964
1966 . elbuf_tab ,iparg ,ixc, ixtg,numelc,shell_scalar, shell_id, shell_ity,
1967 . ipart, ipartc ,iparttg)
1968
1969 IF (nspmd > 1 ) THEN
1970 CALL startime(timers,macro_timer_spmdh3d)
1973 CALL spmd_h3d_gather_r(shell_scalar,numelc+numeltg,shell_scalar_p,numelcg+numeltgg)
1974
1975
1976
1978 IF (ispmd == 0) THEN
1979 sh_tria_spmd_offsets(1) = 0
1980 DO i=2,nspmd+1
1981 sh_tria_spmd_offsets(i) = sh_tria_spmd_offsets(i-1) + tmp_offsets(i-1)
1982 ENDDO
1983 ENDIF
1984
1985 CALL stoptime(timers,macro_timer_spmdh3d)
1986 ELSE
1987 shell_id_p(1:numelc+numeltg) = shell_id(1:numelc+numeltg)
1988 shell_ity_p(1:numelc+numeltg) = shell_ity(1:numelc+numeltg)
1989 shell_scalar_p(1:numelc+numeltg) = shell_scalar(1:numelc+numeltg)
1990 ENDIF
1991
1992 IF(ispmd == 0) THEN
1993 CALL startime(timers,macro_timer_libh3d)
1995 . nixc,numelcg,ipartc,ixtg,nixtg,
1996 . numeltgg,iparttg,shell_scalar_p,shell_id_p,
1997 . h3d_data%N_OUTP_H3D+3,shell_ity_p,numels,
1998 . numelq,numelt,numelp,numelr)
1999 CALL stoptime(timers,macro_timer_libh3d)
2000 ENDIF
2001
2003 . elbuf_tab ,iparg ,ixs ,solid_scalar, solid_id, solid_ity, isolnod)
2004
2005 IF (nspmd > 1 ) THEN
2006 CALL startime(timers,macro_timer_spmdh3d)
2011 CALL stoptime(timers,macro_timer_spmdh3d)
2012 ELSE
2013 solid_id_p(1:numels) = solid_id(1:numels)
2014 solid_ity_p(1:numels) = solid_ity(1:numels)
2015 solid_scalar_p(1:numels) = solid_scalar(1:numels)
2016 isolnod_p(1:numels) = isolnod(1:numels)
2017 ENDIF
2018
2019 IF(ispmd == 0) THEN
2020 CALL startime(timers,macro_timer_libh3d)
2022 . nixs,numelsg,iparts,solid_scalar_p,solid_id_p,
2023 . h3d_data%N_OUTP_H3D+4,solid_ity_p,
2024 . numelq,numelt,numelp,numelr)
2025 CALL stoptime(timers,macro_timer_libh3d)
2026
2027 ENDIF
2028
2030 . elbuf_tab ,iparg ,ixt, ixp, ixr ,oned_scalar, oned_id, oned_ity,
2031 . ipart , ipartt ,ipartp ,ipartr)
2032
2033 IF (nspmd > 1 ) THEN
2034 CALL startime(timers,macro_timer_spmdh3d)
2035 CALL spmd_h3d_gather_i(oned_id,numelt+numelp+numelr,oned_id_p,numeltrg+numelpg+numelrg)
2036 CALL spmd_h3d_gather_i(oned_ity,numelt+numelp+numelr,oned_ity_p,numeltrg+numelpg+numelrg)
2037 CALL spmd_h3d_gather_r(oned_scalar,numelt+numelp+numelr,oned_scalar_p,numeltrg+numelpg+numelrg)
2038 CALL stoptime(timers,macro_timer_spmdh3d)
2039 ELSE
2040 oned_id_p(1:numelt+numelp+numelr) = oned_id(1:numelt+numelp+numelr)
2041 oned_ity_p(1:numelt+numelp+numelr) = oned_ity(1:numelt+numelp+numelr)
2042 oned_scalar_p(1:numelt+numelp+numelr) = oned_scalar(1:numelt+numelp+numelr)
2043 ENDIF
2044
2045 IF(ispmd == 0) THEN
2046 CALL startime(timers,macro_timer_libh3d)
2048 . nixt,numeltrg,ipartt,ixp_p,nixp,
2049 . numelpg,ipartp,ixr_p,nixr,numelrg,
2050 . ipartr,oned_scalar_p,oned_id_p,h3d_data%N_OUTP_H3D+5,oned_ity_p)
2051 CALL stoptime(timers,macro_timer_libh3d)
2052
2053 ENDIF
2054
2056 . elbuf_tab ,iparg ,kxsp ,sph_scalar, sph_id)
2057
2058 IF (nspmd > 1 ) THEN
2059 CALL startime(timers,macro_timer_spmdh3d)
2062 CALL stoptime(timers,macro_timer_spmdh3d)
2063 ELSE
2064 sph_id_p(1:numsph) = sph_id(1:numsph)
2065 sph_scalar_p(1:numsph) = sph_scalar(1:numsph)
2066 ENDIF
2067
2068 IF(ispmd == 0) THEN
2069 CALL startime(timers,macro_timer_libh3d)
2071 . h3d_data%N_OUTP_H3D+6)
2072 CALL stoptime(timers,macro_timer_libh3d)
2073
2074 ENDIF
2075
2077 . elbuf_tab ,iparg ,ixq,quad_scalar, quad_id,
2078 . ipart ,ipartq)
2079
2080 IF (nspmd > 1 ) THEN
2081 CALL startime(timers,macro_timer_spmdh3d)
2084 CALL stoptime(timers,macro_timer_spmdh3d)
2085 ELSE
2086 quad_id_p(1:numelq) = quad_id(1:numelq)
2087 quad_scalar_p(1:numelq) = quad_scalar(1:numelq)
2088 ENDIF
2089
2090 IF(ispmd == 0) THEN
2091 CALL startime(timers,macro_timer_libh3d)
2093 . nixq,numelqg,ipartq,quad_scalar_p,quad_id_p,
2094 . h3d_data%N_OUTP_H3D+7)
2095 CALL stoptime(timers,macro_timer_libh3d)
2096 ENDIF
2097
2098 CALL h3d_skin_off(elbuf_tab,iparg,ixs,ixs10,tag_skins6,skin_scalar)
2099 IF (nspmd > 1 ) THEN
2100 CALL startime(timers,macro_timer_spmdh3d)
2102 CALL stoptime(timers,macro_timer_spmdh3d)
2103 ELSE
2104 skin_scalar_p(1:numskin) = skin_scalar(1:numskin)
2105 ENDIF
2106
2107 IF(ispmd == 0) THEN
2108 DO ii=1,numsking
2109 skin_id_p(ii) = ii
2110 ENDDO
2111 CALL startime(timers,macro_timer_libh3d)
2113 . h3d_data%N_OUTP_H3D+8,numsking)
2114 CALL stoptime(timers,macro_timer_libh3d)
2115 ENDIF
2116
2117
2118
2119
2120 DO i = 1,h3d_data%N_OUTP_H3D
2121
2122
2123
2124 IF(h3d_data%OUTPUT_LIST(i)%OK /= 0 .AND. h3d_data%OUTPUT_LIST(i)%ETYPE == 1 .AND.
2125 . h3d_data%OUTPUT_LIST(i)%OUTP_TYPE == 1)THEN
2126
2127 ifunc = h3d_data%OUTPUT_LIST(i)%ID
2128 inter_input = h3d_data%OUTPUT_LIST(i)%INTER
2129 info1 = h3d_data%OUTPUT_LIST(i)%INFO1
2130 info2 = h3d_data%OUTPUT_LIST(i)%INFO2
2131 keyword = h3d_data%OUTPUT_LIST(i)%KEYWORD
2132 n_outp_data = h3d_data%OUTPUT_LIST(i)%N_OUTP
2133 n_h3d_part_list = h3d_data%OUTPUT_LIST(i)%N_H3D_PART_LIST
2134 interskid = 0
2135 IF(keyword == 'SKID_LINE')THEN
2136 DO ni=1,ninter
2137 IF(ni == inter_input ) THEN
2138 interskid
2139 ityskid = ipari(7,ni)
2140 EXIT
2141 ENDIF
2142 ENDDO
2143 ENDIF
2144 interfric = 0
2145 IF(keyword == 'CSE_FRIC')THEN
2146 DO ni=1,ninter
2147 IF(ni == inter_input ) THEN
2148 interfric = h3d_data%N_CSE_FRIC_INTER (ni)
2149 EXIT
2150 ENDIF
2151 ENDDO
2152 ENDIF
2153
2154
2155
2156
2158 . elbuf_tab ,nodal_scalar ,ifunc ,iparg ,geo ,
2159 . mas ,pm ,anin ,itab
2160 . info1 ,info2 ,is_writen_node ,h3d_data%OUTPUT_LIST(i)%PART ,ipartc ,
2161 . iparttg ,ixc ,ixtg ,temp ,iflow ,
2162 . rflow ,ixs ,ixq ,nv46 ,monvol
2163 . volmon ,ale_connect ,diag_sms ,ms ,pdama2 ,
2164 . x ,stifr ,stifn ,keyword ,h3d_data ,
2165 . npby ,rby ,interskid ,h3d_data%N_SCAL_SKID ,pskids ,
2166 . nodglob ,ityskid ,ipartsp ,ipartr ,ipartp ,
2167 . ipartt ,iparts ,ipartq ,kxsp ,ixr ,
2168 . ixp ,ixt ,n_h3d_part_list,interfric ,csefric ,
2169 . csefricg ,csefric_stamp ,csefricg_stamp ,nodal_scalar_fvm ,airbags_total_fvm_in_h3d_g,
2170 . is_writen_node_fvm,ispmd ,fvdata_p ,user_nod_id%FVMBAG_SHIFT ,multi_fvm ,
2171 . glob_therm%ITHERM_FE,
nfvbag)
2172
2173
2174 IF (nspmd > 1 ) THEN
2175 CALL startime(timers,macro_timer_spmdh3d)
2176
2177 IF(keyword == 'SKID_LINE')THEN
2179 CALL spmd_outpitab(is_writen_node,weight,nodglob,is_writen_node_p)
2180 IF(ityskid== 21) THEN
2182 . interskid,h3d_data%N_SCAL_SKID)
2183 ELSE
2185 ENDIF
2186 ELSEIF(keyword == 'CSE_FRIC'.AND.interfric > 0)THEN
2188 CALL spmd_outpitab(is_writen_node,weight,nodglob,is_writen_node_p)
2191 ELSE
2192 IF(ispmd == 0) THEN
2193 nodal_scalar_p(1:numnodg) =csefric_stamp(interfric-
ninefric,1:numnodg)
2194 ENDIF
2195 ENDIF
2196 ELSEIF((keyword == 'CSE_FRIC'.AND.interfric == 0).OR.keyword == 'CSE_FRICG')THEN
2198 CALL spmd_outpitab(is_writen_node,weight,nodglob,is_writen_node_p)
2199 IF(nintstamp==0) THEN
2201 ELSE
2203 IF(ispmd == 0) THEN
2204 nodal_scalar_p(1:numnodg) =nodal_scalar_p(1:numnodg) + csefricg_stamp(1:numnodg)
2205 ENDIF
2206 ENDIF
2207 ELSE
2211 ENDIF
2212 CALL stoptime(timers,macro_timer_spmdh3d)
2213 ELSE
2214 node_id_p(1:numnod) = node_id(1:numnod)
2215 is_writen_node_p(1:numnod) = is_writen_node(1:numnod)
2216 nodal_scalar_p(1:numnod) = nodal_scalar(1:numnod)
2217 ENDIF
2218
2219
2220 IF(ispmd == 0) THEN
2221 CALL startime(timers,macro_timer_libh3d)
2223 . n_outp_data,is_writen_node_p)
2224 CALL stoptime(timers,macro_timer_libh3d)
2225
2226 ENDIF
2227
2228
2229 IF(ispmd == 0) THEN
2230 IF(airbags_total_fvm_in_h3d_g > 0)THEN
2231 DO j=1,airbags_total_fvm_in_h3d_g
2232 node_id_fvm(j) = user_nod_id%FVMBAG_SHIFT + j
2233 ENDDO
2234 CALL startime(timers,macro_timer_libh3d)
2236 . n_outp_data,is_writen_node_fvm)
2237 CALL stoptime(timers,macro_timer_libh3d)
2238 ENDIF
2239 ENDIF
2240
2241
2242
2243
2244 ELSEIF(h3d_data%OUTPUT_LIST(i)%OK /= 0 .AND. h3d_data%OUTPUT_LIST(i)%ETYPE == 1 .AND.
2245 . h3d_data%OUTPUT_LIST(i)%OUTP_TYPE == 2)THEN
2246
2247 ifunc = h3d_data%OUTPUT_LIST(i)%ID
2248 info1 = h3d_data%OUTPUT_LIST(i)%INFO1
2249 info2 = h3d_data%OUTPUT_LIST(i)%INFO2
2250 n_outp_data = h3d_data%OUTPUT_LIST(i)%N_OUTP
2251 keyword = h3d_data%OUTPUT_LIST(i)%KEYWORD
2252 n_h3d_part_list = h3d_data%OUTPUT_LIST(i)%N_H3D_PART_LIST
2253
2254
2255
2256
2258 . elbuf_tab ,nodal_vector , ifunc ,iparg ,geo ,
2259 . mas ,pm , anin ,itab ,node_id ,
2260 . info1 ,info2 , is_writen_node,h3d_data%OUTPUT_LIST(i)%PART,
2261 . ipartc ,
2262 . iparttg ,ixc , ixtg ,temp ,iflow ,
2263 . rflow ,ixs , ixq ,nv46 ,monvol ,
2264 . diag_sms ,ms , pdama2 ,x ,volmon ,
2265 . stifr ,stifn , a ,d ,v ,
2266 . cont ,fcontg , fint ,fext ,keyword ,
2267 . fncont ,fncontg , ftcont ,ftcontg
2268 . dr ,dxancg , fanreac ,fcluster ,mcluster
2269 . vr ,fopt
2270 . ipari ,igrnod , weight ,nodglob ,fcont_max ,
2271 . fncontp2 ,ftcontp2 , ar ,ipartsp ,ipartr ,
2272 . ipartp ,ipartt , iparts ,ipartq ,kxsp ,
2273 . ixr ,ixp , ixt ,n_h3d_part_list ,
2274 . nodal_vector_fvm,
2275 . is_writen_node_fvm,airbags_total_fvm_in_h3d_g,smonvol ,svolmon ,ispmd ,
2276 . fvdata_p ,user_nod_id%FVMBAG_SHIFT ,w ,sw ,x_c )
2277
2278
2279 IF (nspmd > 1 ) THEN
2280 IF(keyword == 'CONT'.OR.keyword == 'PCONT/NORMAL'.OR.keyword == 'pcont/tangent.OR.'KEYWORD == 'fext'
2281.OR. . (KEYWORD == 'cont2.OR.'KEYWORD == 'pcont2/normal.OR.'KEYWORD == 'pcont2/tangent')
2282.OR. . (KEYWORD == 'cont2/moment')) THEN
2283 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2284 CALL SPMD_OUTPITAB(NODE_ID,WEIGHT,NODGLOB,NODE_ID_P)
2285 CALL SPMD_OUTPITAB(IS_WRITEN_NODE,WEIGHT,NODGLOB,IS_WRITEN_NODE_P)
2286.OR. IF(NINTSTAMP==0KEYWORD == 'cont2.OR.'KEYWORD == 'pcont2/normal.OR.'KEYWORD == 'pcont2/normal'
2287.OR. . KEYWORD == 'pcont2/tangent.OR.'KEYWORD == 'fext') THEN
2288 CALL SPMD_H3D_SUM_R_NODAL(NODGLOB,NODAL_VECTOR,3*NUMNOD,NODAL_VECTOR_P,3*NUMNODG)
2289 ELSEIF(KEYWORD == 'cont')THEN
2290 CALL SPMD_H3D_SUM_R_NODAL_21(NODGLOB,NODAL_VECTOR,3*NUMNOD,NODAL_VECTOR_P,3*NUMNODG,FCONTG)
2291 ELSEIF(KEYWORD == 'pcont/normal')THEN
2292 CALL SPMD_H3D_SUM_R_NODAL_21(NODGLOB,NODAL_VECTOR,3*NUMNOD,NODAL_VECTOR_P,3*NUMNODG,FNCONTG)
2293 ELSEIF(KEYWORD == 'pcont/tangent')THEN
2294 CALL SPMD_H3D_SUM_R_NODAL_21(NODGLOB,NODAL_VECTOR,3*NUMNOD,NODAL_VECTOR_P,3*NUMNODG,FTCONTG)
2295 ELSEIF(KEYWORD == 'cont2/moment')THEN
2296 CALL SPMD_H3D_SUM_R_NODAL_21(NODGLOB,NODAL_VECTOR,3*NUMNOD,NODAL_VECTOR_P,3*NUMNODG,MCONT2)
2297 ENDIF
2298 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2299
2300.AND. ELSEIF(NINTSTAMP/=0((KEYWORD == 'cont/tmax.OR.')(KEYWORD == 'maxpcont/normal.OR.')
2301 . (KEYWORD == 'maxpcont/tangent'))) THEN
2302 IF(KEYWORD == 'cont/tmax')THEN
2303 IF(ISPMD == 0) THEN
2304 NODAL_VECTOR_P(1:3*NUMNODG) =FCONT_MAX(1:3*NUMNODG)
2305 ENDIF
2306 ELSEIF(KEYWORD == 'maxpcont/normal')THEN
2307 IF(ISPMD == 0) THEN
2308 NODAL_VECTOR_P(1:3*NUMNODG) =FNCONT_MAX(1:3*NUMNODG)
2309 ENDIF
2310 ELSEIF(KEYWORD == 'maxpcont/tangent')THEN
2311 IF(ISPMD == 0) THEN
2312 NODAL_VECTOR_P(1:3*NUMNODG) =FTCONT_MAX(1:3*NUMNODG)
2313 ENDIF
2314 ENDIF
2315
2316 ELSE
2317 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2318 CALL SPMD_H3D_GATHER_I_NODE(WEIGHT,NODE_ID,NUMNOD,NODE_ID_P,NUMNODG)
2319 CALL SPMD_H3D_GATHER_I_NODE(WEIGHT,IS_WRITEN_NODE,NUMNOD,IS_WRITEN_NODE_P,NUMNODG)
2320 CALL SPMD_H3D_GATHER_R_NODE(WEIGHT,NODAL_VECTOR,3*NUMNOD,NODAL_VECTOR_P,3*NUMNODG)
2321 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2322 ENDIF
2323
2324 ELSE
2325
2326 NODE_ID_P(1:NUMNOD) = NODE_ID(1:NUMNOD)
2327 IS_WRITEN_NODE_P(1:NUMNOD) = IS_WRITEN_NODE(1:NUMNOD)
2328 NODAL_VECTOR_P(1:3*NUMNOD) = NODAL_VECTOR(1:3*NUMNOD)
2329
2330 ENDIF
2331
2332 ! vector update for /NODE entities
2333 IF(ISPMD == 0) THEN
2334 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2335 CALL C_H3D_UPDATE_NODAL_VECTOR(TT,H3D_DATA%IH3D,ITAB,NUMNODG,NODAL_VECTOR_P,NODE_ID_P,
2336 . N_OUTP_DATA,IS_WRITEN_NODE_P)
2337 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2338
2339 ENDIF
2340
2341 ! vector update for virtual entities (FVMBAG polyhedron centroids)
2342.AND. IF(ISPMD == 0 AIRBAGS_TOTAL_FVM_IN_H3D_G > 0) THEN
2343 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2344 DO J=1,AIRBAGS_TOTAL_FVM_IN_H3D_G
2345 NODE_ID_FVM(J) = USER_NOD_ID%FVMBAG_SHIFT + J
2346 ENDDO
2347 CALL C_H3D_UPDATE_NODAL_VECTOR(TT,H3D_DATA%IH3D,ITAB,AIRBAGS_TOTAL_FVM_IN_H3D_G,NODAL_VECTOR_FVM,
2348 . NODE_ID_FVM,
2349 . N_OUTP_DATA,IS_WRITEN_NODE_FVM)
2350 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2351
2352 ENDIF
2353
2354
2355
2356
2357.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 1
2358 . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 3)THEN
2359
2360 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2361 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2362 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2363 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2364 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2365 N_H3D_PART_LIST = H3D_DATA%OUTPUT_LIST(I)%N_H3D_PART_LIST
2366
2367
2368
2369
2370 CALL H3D_NODAL_TENSOR(
2371 . ELBUF_TAB, NODAL_TENSOR ,IFUNC ,IPARG,GEO ,MAS ,PM ,
2372 . ANIN , ITAB, NODE_ID ,INFO1 ,INFO2 ,
2373 . IS_WRITEN_NODE,H3D_DATA%OUTPUT_LIST(I)%PART ,IPARTC,IPARTTG,
2374 . IXC, IXTG,TEMP,IFLOW,RFLOW,IXS,IXQ,NV46,MONVOL ,VOLMON, DIAG_SMS,MS,
2375 . PDAMA2,X, STIFR, STIFN, A, D, V, CONT, FCONTG, FINT, FEXT,KEYWORD,
2376 . BUFMAT ,IXS10 ,IXS16 ,IXS20 ,IXT ,
2377 . IXP ,IXR ,IAD_ELEM ,FR_ELEM ,WEIGHT ,
2378 . IPARTSP ,IPARTR ,IPARTP ,IPARTT ,IPARTS ,
2379 . IPARTQ ,KXSP ,N_H3D_PART_LIST)
2380
2381
2382 IF (NSPMD > 1 ) THEN
2383 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2384 CALL SPMD_H3D_GATHER_I_NODE(WEIGHT,NODE_ID,NUMNOD,NODE_ID_P,NUMNODG)
2385 CALL SPMD_H3D_GATHER_I_NODE(WEIGHT,IS_WRITEN_NODE,NUMNOD,IS_WRITEN_NODE_P,NUMNODG)
2386 CALL SPMD_H3D_GATHER_T_NODE(WEIGHT,NODAL_TENSOR,6*NUMNOD,NODAL_TENSOR_P,6*NUMNODG)
2387 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2388 ELSE
2389 NODE_ID_P(1:NUMNOD) = NODE_ID(1:NUMNOD)
2390 IS_WRITEN_NODE_P(1:NUMNOD) = IS_WRITEN_NODE(1:NUMNOD)
2391 NODAL_TENSOR_P(1:6*NUMNOD) = NODAL_TENSOR(1:6*NUMNOD)
2392 ENDIF
2393
2394 IF(ISPMD == 0) THEN
2395 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2396 CALL C_H3D_UPDATE_NODAL_TENSOR(TT,H3D_DATA%IH3D,ITAB,NUMNODG,NODAL_TENSOR_P,NODE_ID_P,
2397 . N_OUTP_DATA,IS_WRITEN_NODE_P)
2398 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2399
2400 ENDIF
2401
2402
2403
2404.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 4
2405.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 1 (NUMELTRG+NUMELPG+NUMELRG) > 0)THEN
2406
2407 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2408 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2409 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2410 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2411 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2412 IPT = H3D_DATA%OUTPUT_LIST(I)%IPT
2413
2414
2415
2416
2417 SZ_ANIN = SANIN - NDMA2
2418 CALL H3D_ONED_SCALAR(ELBUF_TAB ,IPARG ,GEO , IXT,
2419 . IXP ,IXR ,PM , ANIN(NDMA2+1),
2420 . ONED_SCALAR ,ONED_ID ,ONED_ITY,
2421 . IS_WRITEN_ONED ,IPARTT ,IPARTP,IPARTR,H3D_DATA%OUTPUT_LIST(I)%PART,
2422 . KEYWORD, X , D ,IPT,
2423 . NUMELP, NUMELT, NUMELR,NIXT,NIXP,
2424 . NIXR, NGROUP, ANIM_FE, MX_ANI, NPARG,
2425 . NPROPM, NPROPG, NUMMAT, NUMGEO, NUMNOD,
2426 . SZ_ANIN, NUMELPG, NUMELRG, NUMELTRG, NPART)
2427
2428
2429 IF (NSPMD > 1 ) THEN
2430 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2431 CALL SPMD_H3D_GATHER_I(ONED_ID,NUMELT+NUMELP+NUMELR,ONED_ID_P,NUMELTRG+NUMELPG+NUMELRG)
2432 CALL SPMD_H3D_GATHER_I(ONED_ITY,NUMELT+NUMELP+NUMELR,ONED_ITY_P,NUMELTRG+NUMELPG+NUMELRG)
2433 CALL SPMD_H3D_GATHER_I(IS_WRITEN_ONED,NUMELT+NUMELP+NUMELR,IS_WRITEN_ONED_P,NUMELTRG+NUMELPG+NUMELRG)
2434 CALL SPMD_H3D_GATHER_R(ONED_SCALAR,NUMELT+NUMELP+NUMELR,ONED_SCALAR_P,NUMELTRG+NUMELPG+NUMELRG)
2435 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2436 ELSE
2437 ONED_ID_P(1:NUMELT+NUMELP+NUMELR) = ONED_ID(1:NUMELT+NUMELP+NUMELR)
2438 ONED_ITY_P(1:NUMELT+NUMELP+NUMELR) = ONED_ITY(1:NUMELT+NUMELP+NUMELR)
2439 IS_WRITEN_ONED_P(1:NUMELT+NUMELP+NUMELR) = IS_WRITEN_ONED(1:NUMELT+NUMELP+NUMELR)
2440 ONED_SCALAR_P(1:NUMELT+NUMELP+NUMELR) = ONED_SCALAR(1:NUMELT+NUMELP+NUMELR)
2441 ENDIF
2442
2443 IF(ISPMD == 0) THEN
2444 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2445 CALL C_H3D_UPDATE_ONED_SCALAR(TT,H3D_DATA%IH3D,ITAB,NUMELTRG,NUMELPG,NUMELRG,ONED_SCALAR_P,ONED_ID_P,
2446 . N_OUTP_DATA,ONED_ITY_P,IS_WRITEN_ONED_P)
2447 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2448
2449 ENDIF
2450
2451
2452
2453.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 4
2454.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 2 (NUMELTRG+NUMELPG+NUMELRG) > 0)THEN
2455
2456 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2457 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2458 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2459 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2460 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2461
2462
2463
2464
2465 CALL H3D_ONED_VECTOR(ELBUF_TAB ,IFUNC ,IPARG ,GEO ,
2466 . IXT ,IXP ,IXR ,PM ,
2467 . ANIN(NDMA2+1),ONED_VECTOR,
2468 . ONED_ID ,ONED_ITY,INFO1 ,INFO2 , IS_WRITEN_ONED ,
2469 . IPARTT ,IPARTP,IPARTR,H3D_DATA%OUTPUT_LIST(I)%PART,
2470 . KEYWORD , X , D ,TORS )
2471
2472
2473 IF (NSPMD > 1 ) THEN
2474 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2475 CALL SPMD_H3D_GATHER_I(ONED_ID,NUMELT+NUMELP+NUMELR,ONED_ID_P,NUMELTRG+NUMELPG+NUMELRG)
2476 CALL SPMD_H3D_GATHER_I(ONED_ITY,NUMELT+NUMELP+NUMELR,ONED_ITY_P,NUMELTRG+NUMELPG+NUMELRG)
2477 CALL SPMD_H3D_GATHER_I(IS_WRITEN_ONED,NUMELT+NUMELP+NUMELR,IS_WRITEN_ONED_P,NUMELTRG+NUMELPG+NUMELRG)
2478 CALL SPMD_H3D_GATHER_R(ONED_VECTOR,3*(NUMELT+NUMELP+NUMELR),ONED_VECTOR_P,3*(NUMELTRG+NUMELPG+NUMELRG))
2479 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2480 ELSE
2481 ONED_ID_P(1:NUMELT+NUMELP+NUMELR) = ONED_ID(1:NUMELT+NUMELP+NUMELR)
2482 ONED_ITY_P(1:NUMELT+NUMELP+NUMELR) = ONED_ITY(1:NUMELT+NUMELP+NUMELR)
2483 IS_WRITEN_ONED_P(1:NUMELT+NUMELP+NUMELR) = IS_WRITEN_ONED(1:NUMELT+NUMELP+NUMELR)
2484 ONED_VECTOR_P(1:3*(NUMELT+NUMELP+NUMELR)) = ONED_VECTOR(1:3*(NUMELT+NUMELP+NUMELR))
2485 ENDIF
2486
2487 IF(ISPMD == 0) THEN
2488 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2489 CALL C_H3D_UPDATE_ONED_VECTOR(TT,H3D_DATA%IH3D,ITAB,NUMELTRG,NUMELPG,NUMELRG,ONED_VECTOR_P,ONED_ID_P,
2490 . N_OUTP_DATA,ONED_ITY_P,IS_WRITEN_ONED_P)
2491 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2492
2493 ENDIF
2494
2495
2496
2497.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 4
2498.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 3 (NUMELTRG+NUMELPG+NUMELRG) > 0)THEN
2499
2500 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2501 IPT = H3D_DATA%OUTPUT_LIST(I)%IPT
2502 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2503 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2504 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2505 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2506
2507
2508
2509
2510 CALL H3D_ONED_TENSOR(ELBUF_TAB ,IFUNC ,IPARG ,GEO ,
2511 . IXT ,IXP ,IXR ,PM ,
2512 . ANIN(NDMA2+1),ONED_TENSOR,
2513 . ONED_ID ,ONED_ITY,INFO1 ,INFO2 , IS_WRITEN_ONED ,
2514 . IPARTT ,IPARTP,IPARTR,H3D_DATA%OUTPUT_LIST(I)%PART,
2515 . KEYWORD , X , D ,IPT)
2516
2517 IF (NSPMD > 1 ) THEN
2518 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2519 CALL SPMD_H3D_GATHER_I(ONED_ID,NUMELT+NUMELP+NUMELR,ONED_ID_P,NUMELTRG+NUMELPG+NUMELRG)
2520 CALL SPMD_H3D_GATHER_I(ONED_ITY,NUMELT+NUMELP+NUMELR,ONED_ITY_P,NUMELTRG+NUMELPG+NUMELRG)
2521 CALL SPMD_H3D_GATHER_I(IS_WRITEN_ONED,NUMELT+NUMELP+NUMELR,IS_WRITEN_ONED_P,NUMELTRG+NUMELPG+NUMELRG)
2522 CALL SPMD_H3D_GATHER_R(ONED_TENSOR,6*(NUMELT+NUMELP+NUMELR),ONED_TENSOR_P,6*(NUMELTRG+NUMELPG+NUMELRG))
2523 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2524 ELSE
2525 ONED_ID_P(1:NUMELT+NUMELP+NUMELR) = ONED_ID(1:NUMELT+NUMELP+NUMELR)
2526 ONED_ITY_P(1:NUMELT+NUMELP+NUMELR) = ONED_ITY(1:NUMELT+NUMELP+NUMELR)
2527 IS_WRITEN_ONED_P(1:NUMELT+NUMELP+NUMELR) = IS_WRITEN_ONED(1:NUMELT+NUMELP+NUMELR)
2528 ONED_TENSOR_P(1:6*(NUMELT+NUMELP+NUMELR)) = ONED_TENSOR(1:6*(NUMELT+NUMELP+NUMELR))
2529 ENDIF
2530
2531 IF(ISPMD == 0) THEN
2532 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2533 CALL C_H3D_UPDATE_ONED_TENSOR(TT,H3D_DATA%IH3D,ITAB,NUMELTRG,NUMELPG,NUMELRG,ONED_TENSOR_P,ONED_ID_P,
2534 . N_OUTP_DATA,ONED_ITY_P,IS_WRITEN_ONED_P)
2535 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2536
2537 ENDIF
2538
2539
2540
2541.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 4
2542.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 4 (NUMELTRG+NUMELPG+NUMELRG) > 0)THEN
2543
2544 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2545 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2546 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2547 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2548 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2549
2550
2551
2552
2553 CALL H3D_ONED_TORSOR(IPARG,IFUNC ,IXT ,IXP ,
2554 . IXR ,TORS ,ONED_TORSOR,ONED_ID ,
2555 . ONED_ITY,INFO1 ,INFO2 , IS_WRITEN_ONED,
2556 . IPARTT ,IPARTP,IPARTR,H3D_DATA%OUTPUT_LIST(I)%PART,KEYWORD)
2557
2558
2559 IF (NSPMD > 1 ) THEN
2560 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2561 CALL SPMD_H3D_GATHER_I(ONED_ID,NUMELT+NUMELP+NUMELR,ONED_ID_P,NUMELTRG+NUMELPG+NUMELRG)
2562 CALL SPMD_H3D_GATHER_I(ONED_ITY,NUMELT+NUMELP+NUMELR,ONED_ITY_P,NUMELTRG+NUMELPG+NUMELRG)
2563 CALL SPMD_H3D_GATHER_I(IS_WRITEN_ONED,NUMELT+NUMELP+NUMELR,IS_WRITEN_ONED_P,NUMELTRG+NUMELPG+NUMELRG)
2564 CALL SPMD_H3D_GATHER_R(ONED_TORSOR,9*(NUMELT+NUMELP+NUMELR),ONED_TORSOR_P,9*(NUMELTRG+NUMELPG+NUMELRG))
2565 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2566 ELSE
2567 ONED_ID_P(1:NUMELT+NUMELP+NUMELR) = ONED_ID(1:NUMELT+NUMELP+NUMELR)
2568 ONED_ITY_P(1:NUMELT+NUMELP+NUMELR) = ONED_ITY(1:NUMELT+NUMELP+NUMELR)
2569 IS_WRITEN_ONED_P(1:NUMELT+NUMELP+NUMELR) = IS_WRITEN_ONED(1:NUMELT+NUMELP+NUMELR)
2570 ONED_TORSOR_P(1:9*(NUMELT+NUMELP+NUMELR)) = ONED_TORSOR(1:9*(NUMELT+NUMELP+NUMELR))
2571 ENDIF
2572
2573 IF(ISPMD == 0) THEN
2574 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2575 CALL C_H3D_UPDATE_ONED_TORSOR(TT,H3D_DATA%IH3D,ITAB,NUMELTRG,NUMELPG,NUMELRG,ONED_TORSOR_P,ONED_ID_P,
2576 . N_OUTP_DATA,ONED_ITY_P,IS_WRITEN_ONED_P)
2577 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2578 ENDIF
2579
2580
2581
2582.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 2
2583.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 1 (NUMELCG+NUMELTGG) > 0)THEN
2584
2585 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2586 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2587 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2588 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
2589 IPT = H3D_DATA%OUTPUT_LIST(I)%IPT
2590 ID_PLY = H3D_DATA%OUTPUT_LIST(I)%PLY
2591 GAUSS = H3D_DATA%OUTPUT_LIST(I)%GAUSS
2592 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
2593 IDMDS = H3D_DATA%OUTPUT_LIST(I)%IDMDS
2594 IMDSVAR = H3D_DATA%OUTPUT_LIST(I)%IMDSVAR
2595 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2596 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2597 OBJECT_ID = H3D_DATA%OUTPUT_LIST(I)%OBJECT_ID
2598 MODE = H3D_DATA%OUTPUT_LIST(I)%MODE
2599
2600
2601
2602
2603 SHELL_STACKSIZE = 0
2604 CALL H3D_SHELL_SCALAR(
2605 . ELBUF_TAB ,SHELL_STACK ,IPARG ,GEO ,
2606 . IXC ,IXTG ,PM ,BUFMAT ,
2607 . EANI,
2608 . IPM ,IGEO ,THKE ,ERR_THK_SH4 ,ERR_THK_SH3,
2609 . X ,V ,W ,ALE_CONNECT,
2610 . NERCVOIS ,NESDVOIS ,LERCVOIS ,LESDVOIS ,
2611 . STACK ,SHELL_ID ,SHELL_ITY ,
2612 . IS_WRITEN_SHELL,IPARTC ,IPARTTG ,LAYER ,IPT ,
2613 . ID_PLY ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART,KEYWORD,GLOB_THERM%ITHERM,
2614 . D ,MULTI_FVM ,IDMDS ,IMDSVAR ,MDS_MATID ,
2615 . OBJECT_ID ,MODE ,MAT_PARAM ,H3D_DATA%LIGHT,MAX_SHELL_STACKSIZE,
2616 . SHELL_STACKSIZE)
2617
2618
2619
2620 if (ispmd==0) then
2621 IS_WRITEN_SHELL_P(1:SHELL_STACKSIZE) = IS_WRITEN_SHELL(1:SHELL_STACKSIZE)
2622 SHELL_STACK_P(1:SHELL_STACKSIZE) = SHELL_STACK(1:SHELL_STACKSIZE)
2623 SHELL_STACKSIZE_P0 = SHELL_STACKSIZE
2624 else
2625 SHELL_STACKSIZE_P0 = 1
2626 endif
2627 IF (NSPMD > 1 ) THEN
2628 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2629
2630 ! First Gather the size of the shell+triangle stack
2631 CALL SPMD_GATHER_INT(SHELL_STACKSIZE,GATHER_SIZE,IT_SPMD(1),1,NSPMD)
2632
2633 ! Then gather the shell+triangle stack to P0 & apply elemen offset
2634 ! to fit with P0 order
2635 CALL H3D_GATHER_ID_VAL(IS_WRITEN_SHELL,SHELL_STACK,SHELL_STACKSIZE,
2636 * IS_WRITEN_SHELL_P,SHELL_STACK_P,NUMELCG+NUMELTGG,
2637 * SHELL_STACKSIZE_P0,GATHER_SIZE,SH_TRIA_SPMD_OFFSETS,NSPMD,ISPMD,IT_SPMD)
2638
2639 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2640 ENDIF
2641
2642 IF(ISPMD == 0) THEN
2643
2644 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2645 CALL C_H3D_UPDATE_SHELL_SCALAR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXC_P,
2646 . NIXC,NUMELCG,IPARTC,IXTG,NIXTG,
2647 . NUMELTGG,IPARTTG,SHELL_STACK_P,SHELL_ID_P,
2648 . N_OUTP_DATA,SHELL_ITY_P,NUMELS,
2649 . NUMELQ,NUMELT,NUMELP,NUMELR,IS_WRITEN_SHELL_P,
2650 . SHELL_STACKSIZE_P0)
2651 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2652
2653 ENDIF
2654
2655
2656
2657.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 2
2658.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 2 (NUMELCG+NUMELTGG) > 0)THEN
2659
2660 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2661 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2662 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2663 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
2664 IPT = H3D_DATA%OUTPUT_LIST(I)%IPT
2665 ID_PLY = H3D_DATA%OUTPUT_LIST(I)%PLY
2666 GAUSS = H3D_DATA%OUTPUT_LIST(I)%GAUSS
2667 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
2668 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2669 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2670
2671
2672
2673
2674 CALL H3D_SHELL_VECTOR(
2675 . ELBUF_TAB ,SHELL_VECTOR ,IFUNC ,IPARG,GEO ,
2676 . IXQ ,IXC ,IXTG ,PM ,
2677 . EL2FA ,NBF ,IAD ,
2678 . NBF_L ,EANI ,ANIN(NDMA2+1) ,NBPART ,IADG ,
2679 . IPM ,IGEO ,THKE ,ERR_THK_SH4 ,ERR_THK_SH3,
2680 . INVERT ,X ,V ,W ,
2681 . NV46 ,NERCVOIS ,NESDVOIS ,LERCVOIS ,LESDVOIS ,
2682 . STACK ,SHELL_ID ,SHELL_ITY ,INFO1 ,INFO2 ,
2683 . IS_WRITEN_SHELL,IPARTC ,IPARTTG ,LAYER ,IPT ,
2684 . ID_PLY ,GAUSS ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART,KEYWORD,
2685 . D ,MULTI_FVM)
2686
2687 IF (NSPMD > 1 ) THEN
2688 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2689 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SHELL,NUMELC+NUMELTG,IS_WRITEN_SHELL_P,NUMELCG+NUMELTGG)
2690 CALL SPMD_H3D_GATHER_R(SHELL_VECTOR,3*(NUMELC+NUMELTG),SHELL_VECTOR_P,3*(NUMELCG+NUMELTGG))
2691 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2692 ELSE
2693 IS_WRITEN_SHELL_P(1:NUMELC+NUMELTG) = IS_WRITEN_SHELL(1:NUMELC+NUMELTG)
2694 SHELL_VECTOR_P(1:3*(NUMELC+NUMELTG)) = SHELL_VECTOR(1:3*(NUMELC+NUMELTG))
2695 ENDIF
2696
2697 IF(ISPMD == 0) THEN
2698
2699 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2700 CALL C_H3D_UPDATE_SHELL_VECTOR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXC_P,
2701 . NIXC,NUMELCG,IPARTC,IXTG,NIXTG,
2702 . NUMELTGG,IPARTTG,SHELL_VECTOR_P,SHELL_ID_P,
2703 . N_OUTP_DATA,SHELL_ITY_P,NUMELS,
2704 . NUMELQ,NUMELT,NUMELP,NUMELR,IS_WRITEN_SHELL_P)
2705 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2706
2707 ENDIF
2708
2709
2710
2711.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 2
2712.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 3 (NUMELCG+NUMELTGG) > 0)THEN
2713
2714 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2715 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2716 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2717 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
2718 IPT = H3D_DATA%OUTPUT_LIST(I)%IPT
2719 ID_PLY = H3D_DATA%OUTPUT_LIST(I)%PLY
2720 GAUSS = H3D_DATA%OUTPUT_LIST(I)%GAUSS
2721 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
2722 OBJECT_ID = H3D_DATA%OUTPUT_LIST(I)%OBJECT_ID
2723 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2724 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2725
2726 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2727 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2728 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2729 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2730
2731
2732
2733
2734 CALL H3D_SHELL_TENSOR(ELBUF_TAB,SHELL_TENSOR ,IPARG ,IFUNC ,INVERT,NELCUT,
2735 . EL2FA ,NBF ,WAFT ,TANI ,IAD ,
2736 . NBF_L ,NBPART,IADG ,X ,IXC ,
2737 . IGEO ,IXTG ,IPM ,STACK ,SHELL_ID ,SHELL_ITY ,INFO1,
2738 . INFO2 ,IS_WRITEN_SHELL ,IPARTC ,IPARTTG ,LAYER ,IPT ,
2739 . ID_PLY ,GAUSS ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART ,KEYWORD,D ,
2740 . OBJECT_ID ,BUFMAT ,MAT_PARAM,GEO ,DRAPE_SH4N, DRAPE_SH3N, DRAPEG)
2741
2742
2743 IF (NSPMD > 1 ) THEN
2744 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2745 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SHELL,NUMELC+NUMELTG,IS_WRITEN_SHELL_P,NUMELCG+NUMELTGG)
2746 CALL SPMD_H3D_GATHER_R(SHELL_TENSOR,3*(NUMELC+NUMELTG),SHELL_TENSOR_P,3*(NUMELCG+NUMELTGG))
2747 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2748 ELSE
2749 IS_WRITEN_SHELL_P(1:NUMELC+NUMELTG) = IS_WRITEN_SHELL(1:NUMELC+NUMELTG)
2750 SHELL_TENSOR_P(1:3*(NUMELC+NUMELTG)) = SHELL_TENSOR(1:3*(NUMELC+NUMELTG))
2751 ENDIF
2752
2753 IF(ISPMD == 0) THEN
2754 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2755 CALL C_H3D_UPDATE_SHELL_TENSOR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXC_P,
2756 . NIXC,NUMELCG,IPARTC,IXTG,NIXTG,
2757 . NUMELTGG,IPARTTG,SHELL_TENSOR_P,SHELL_ID_P,
2758 . N_OUTP_DATA,SHELL_ITY_P,NUMELS,
2759 . NUMELQ,NUMELT,NUMELP,NUMELR,IS_WRITEN_SHELL_P)
2760 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2761
2762 ENDIF
2763
2764
2765
2766
2767.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 3
2768.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 1 NUMELSG > 0)THEN
2769
2770 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2771 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2772 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2773 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
2774 IR = H3D_DATA%OUTPUT_LIST(I)%IR
2775 IS = H3D_DATA%OUTPUT_LIST(I)%IS
2776 IT = H3D_DATA%OUTPUT_LIST(I)%IT
2777 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
2778 IDMDS = H3D_DATA%OUTPUT_LIST(I)%IDMDS
2779 IMDSVAR = H3D_DATA%OUTPUT_LIST(I)%IMDSVAR
2780 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2781 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2782 OBJECT_ID = H3D_DATA%OUTPUT_LIST(I)%OBJECT_ID
2783 MODE = H3D_DATA%OUTPUT_LIST(I)%MODE
2784
2785
2786 CALL H3D_SOLID_SCALAR(
2787 . ELBUF_TAB ,SOLID_SCALAR ,IPARG ,
2788 . IXS ,PM ,BUFMAT ,
2789 . EANI ,
2790 . IPM ,
2791 . X ,V ,W ,ALE_CONNECT,
2792 . NERCVOIS,NESDVOIS, LERCVOIS,LESDVOIS,
2793 . SOLID_ID ,SOLID_ITY ,IPARTS ,LAYER ,
2794 . IR ,IS ,IT ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART,
2795 . IS_WRITEN_SOLID,INFO1,KEYWORD ,GLOB_THERM%ITHERM,FANI_CELL ,
2796 . MULTI_FVM, IDMDS ,IMDSVAR ,
2797 . OBJECT_ID ,MAT_PARAM ,MODE )
2798
2799 IF (NSPMD > 1 ) THEN
2800 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2801 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SOLID,NUMELS,IS_WRITEN_SOLID_P,NUMELSG)
2802 CALL SPMD_H3D_GATHER_R(SOLID_SCALAR,NUMELS,SOLID_SCALAR_P,NUMELSG)
2803 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2804 ELSE
2805 IS_WRITEN_SOLID_P(1:NUMELS) = IS_WRITEN_SOLID(1:NUMELS)
2806 SOLID_SCALAR_P(1:NUMELS) = SOLID_SCALAR(1:NUMELS)
2807 ENDIF
2808
2809 IF(ISPMD == 0) THEN
2810 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2811 CALL C_H3D_UPDATE_SOLID_SCALAR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXS_P,
2812 . NIXS,NUMELSG,IPARTS,SOLID_SCALAR_P,SOLID_ID_P,
2813 . N_OUTP_DATA,SOLID_ITY_P,
2814 . NUMELQ,NUMELT,NUMELP,NUMELR,IS_WRITEN_SOLID_P)
2815 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2816
2817 ENDIF
2818
2819
2820
2821.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 3
2822.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 2 NUMELSG > 0)THEN
2823
2824 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2825 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2826 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2827 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
2828 IR = H3D_DATA%OUTPUT_LIST(I)%IR
2829 IS = H3D_DATA%OUTPUT_LIST(I)%IS
2830 IT = H3D_DATA%OUTPUT_LIST(I)%IT
2831 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
2832 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2833 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2834
2835
2836 CALL H3D_SOLID_VECTOR(
2837 . ELBUF_TAB ,SOLID_VECTOR ,IFUNC ,IPARG,GEO ,
2838 . IXQ ,IXS ,IXTG ,PM ,
2839 . EL2FA ,NBF ,IAD ,
2840 . NBF_L ,EANI ,ANIN(NDMA2+1) ,NBPART ,IADG ,
2841 . IPM ,IGEO ,THKE ,ERR_THK_SH4 ,ERR_THK_SH3,
2842 . INVERT ,X ,V ,W ,
2843 . NV46 ,NERCVOIS ,NESDVOIS ,LERCVOIS ,LESDVOIS ,
2844 . STACK ,SOLID_ID ,SOLID_ITY ,IPARTS ,LAYER ,
2845 . IR ,IS ,IT ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART,
2846 . IS_WRITEN_SOLID,INFO1,KEYWORD ,FANI_CELL ,
2847 . H3D_DATA, MULTI_FVM)
2848
2849 IF (NSPMD > 1 ) THEN
2850 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2851 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SOLID,NUMELS,IS_WRITEN_SOLID_P,NUMELSG)
2852 CALL SPMD_H3D_GATHER_R(SOLID_VECTOR,3*NUMELS,SOLID_VECTOR_P,3*NUMELSG)
2853 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2854 ELSE
2855 IS_WRITEN_SOLID_P(1:NUMELS) = IS_WRITEN_SOLID(1:NUMELS)
2856 SOLID_VECTOR_P(1:3*NUMELS) = SOLID_VECTOR(1:3*NUMELS)
2857 ENDIF
2858
2859 IF(ISPMD == 0) THEN
2860 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2861 CALL C_H3D_UPDATE_SOLID_VECTOR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXS_P,
2862 . NIXS,NUMELSG,IPARTS,SOLID_VECTOR_P,SOLID_ID_P,
2863 . N_OUTP_DATA,SOLID_ITY_P,
2864 . NUMELQ,NUMELT,NUMELP,NUMELR,IS_WRITEN_SOLID_P)
2865 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2866
2867 ENDIF
2868
2869
2870
2871.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 3
2872.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 3 NUMELSG > 0)THEN
2873
2874 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
2875 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
2876 INFO2 = H3D_DATA%OUTPUT_LIST(I)%INFO2
2877 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
2878 IR = H3D_DATA%OUTPUT_LIST(I)%IR
2879 IS = H3D_DATA%OUTPUT_LIST(I)%IS
2880 IT = H3D_DATA%OUTPUT_LIST(I)%IT
2881 OBJECT_ID = H3D_DATA%OUTPUT_LIST(I)%OBJECT_ID
2882 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2883 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2884 IS_CORNER_DATA = H3D_DATA%OUTPUT_LIST(I)%IS_CORNER_DATA
2885
2886
2887 CALL H3D_SOLID_TENSOR(
2888 . ELBUF_TAB,SOLID_TENSOR, IPARG ,IFUNC ,IXS ,PM ,
2889 2 EL2FA ,NNN ,WAFT ,TANI ,
2890 3 NBPART ,X ,IADG ,IPART ,
2891 4 IPARTSP ,IPARTS ,ISPH3D ,IPM ,IGEO , SOLID_ID ,SOLID_ITY , IS_WRITEN_SOLID,
2892 5 LAYER , IR ,IS ,IT ,H3D_DATA%OUTPUT_LIST(I)%PART,INFO1 ,KEYWORD ,D ,
2893 6 SOLID_TENSOR_CORNER,IS_CORNER_DATA , IXS10 ,MAX_NCORN,OBJECT_ID)
2894
2895 IF (NSPMD > 1 ) THEN
2896 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2897 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SOLID,NUMELS,IS_WRITEN_SOLID_P,NUMELSG)
2898 CALL SPMD_H3D_GATHER_R(SOLID_TENSOR,6*NUMELS,SOLID_TENSOR_P,6*NUMELSG)
2899 IF (IS_CORNER_DATA == 1)
2900 . CALL SPMD_H3D_GATHER_R(SOLID_TENSOR_CORNER,6*NUMELS*MAX_NCORN,SOLID_TENSOR_CORNER_P,6*NUMELSG*MAX_NCORN)
2901 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2902 ELSE
2903 IS_WRITEN_SOLID_P(1:NUMELS) = IS_WRITEN_SOLID(1:NUMELS)
2904 SOLID_TENSOR_P(1:6*NUMELS) = SOLID_TENSOR(1:6*NUMELS)
2905 IF (IS_CORNER_DATA == 1)
2906 . SOLID_TENSOR_CORNER_P(1:6*NUMELS*MAX_NCORN) = SOLID_TENSOR_CORNER(1:6*NUMELS*MAX_NCORN)
2907 ENDIF
2908
2909 IF(ISPMD == 0) THEN
2910 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2911 CALL C_H3D_UPDATE_SOLID_TENSOR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXS_P,
2912 . NIXS,NUMELSG,IPARTS,SOLID_TENSOR_P,SOLID_ID_P,
2913 . N_OUTP_DATA,SOLID_ITY_P,
2914 . NUMELQ,NUMELT,NUMELP,NUMELR,IS_WRITEN_SOLID_P,
2915 3 SOLID_TENSOR_CORNER_P,IS_CORNER_DATA,ISOLNOD_P,MAX_NCORN)
2916 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2917
2918 ENDIF
2919
2920
2921
2922.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 5
2923.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 1 NUMSPHG > 0)THEN
2924
2925 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
2926 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2927 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2928 OBJECT_ID = H3D_DATA%OUTPUT_LIST(I)%OBJECT_ID
2929
2930
2931 CALL H3D_SPH_SCALAR(
2932 . ELBUF_TAB ,SPH_SCALAR,IFUNC ,IPARG ,
2933 . KXSP ,PM ,IPART ,
2934 . IPM ,
2935 . SPH_ID ,IPARTSP ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART,
2936 . IS_WRITEN_SPH,KEYWORD,SPBUF, OBJECT_ID )
2937
2938
2939 IF (NSPMD > 1 ) THEN
2940 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2941 CALL SPMD_H3D_GATHER_I(SPH_ID,NUMSPH,SPH_ID_P,NUMSPHG)
2942 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SPH,NUMSPH,IS_WRITEN_SPH_P,NUMSPHG)
2943 CALL SPMD_H3D_GATHER_R(SPH_SCALAR,NUMSPH,SPH_SCALAR_P,NUMSPHG)
2944 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2945 ELSE
2946 SPH_ID_P(1:NUMSPH) = SPH_ID(1:NUMSPH)
2947 IS_WRITEN_SPH_P(1:NUMSPH) = IS_WRITEN_SPH(1:NUMSPH)
2948 SPH_SCALAR_P(1:NUMSPH) = SPH_SCALAR(1:NUMSPH)
2949 ENDIF
2950
2951 IF(ISPMD == 0) THEN
2952 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2953 CALL C_H3D_UPDATE_SPH_SCALAR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,KXSP_P,
2954 . NISP,NUMSPHG,IPARTS,SPH_SCALAR_P,SPH_ID_P,
2955 . N_OUTP_DATA,
2956 . NUMELQ,NUMELT,NUMELP,NUMELR,IS_WRITEN_SPH_P)
2957 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2958
2959 ENDIF
2960
2961
2962
2963.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 5
2964.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 3 NUMSPHG > 0)THEN
2965
2966 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
2967 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
2968
2969
2970 CALL H3D_SPH_TENSOR(
2971 . ELBUF_TAB,SPH_TENSOR, IPARG ,IFUNC ,KXSP ,PM ,
2972 2 EL2FA ,NNN ,WAFT ,TANI ,
2973 3 NBPART ,X ,IADG ,IPART ,
2974 4 IPARTSP ,ISPH3D ,IPM ,IGEO , SPH_ID , IS_WRITEN_SPH,
2975 5 H3D_DATA%OUTPUT_LIST(I)%PART,KEYWORD )
2976
2977 IF (NSPMD > 1 ) THEN
2978 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2979 CALL SPMD_H3D_GATHER_I(SPH_ID,NUMSPH,SPH_ID_P,NUMSPHG)
2980 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SPH,NUMSPH,IS_WRITEN_SPH_P,NUMSPHG)
2981 CALL SPMD_H3D_GATHER_R(SPH_TENSOR,6*NUMSPH,SPH_TENSOR_P,6*NUMSPHG)
2982 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
2983 ELSE
2984 SPH_ID_P(1:NUMSPH) = SPH_ID(1:NUMSPH)
2985 IS_WRITEN_SPH_P(1:NUMSPH) = IS_WRITEN_SPH(1:NUMSPH)
2986 SPH_TENSOR_P(1:6*NUMSPH) = SPH_TENSOR(1:6*NUMSPH)
2987 ENDIF
2988
2989 IF(ISPMD == 0) THEN
2990 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
2991 CALL C_H3D_UPDATE_SPH_TENSOR(TT,H3D_DATA%IH3D,ITAB,NUMSPHG,IPARTS,SPH_TENSOR_P,SPH_ID_P,
2992 . N_OUTP_DATA,IS_WRITEN_SPH_P)
2993 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
2994
2995 ENDIF
2996
2997
2998
2999.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 6
3000.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 1 NUMELQG > 0)THEN
3001
3002 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
3003 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
3004 IR = H3D_DATA%OUTPUT_LIST(I)%IR
3005 IS = H3D_DATA%OUTPUT_LIST(I)%IS
3006 IT = H3D_DATA%OUTPUT_LIST(I)%IT
3007 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
3008 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
3009 OBJECT_ID = H3D_DATA%OUTPUT_LIST(I)%OBJECT_ID
3010
3011
3012
3013
3014
3015
3016 CALL H3D_QUAD_SCALAR(
3017 . ELBUF_TAB ,QUAD_SCALAR ,IPARG,
3018 . IXQ ,PM ,
3019 . EANI ,
3020 . IPM ,
3021 . X ,V ,W ,ALE_CONNECT,
3022 . NERCVOIS ,NESDVOIS ,LERCVOIS ,LESDVOIS ,
3023 . QUAD_ID ,
3024 . IS_WRITEN_QUAD,IPARTQ ,LAYER , NPART,
3025 . IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART,KEYWORD,GLOB_THERM%ITHERM,
3026 . BUFMAT ,MULTI_FVM ,IR ,IS ,IT ,
3027 . OBJECT_ID ,MAT_PARAM)
3028
3029 IF (NSPMD > 1 ) THEN
3030 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3031 CALL SPMD_H3D_GATHER_I(QUAD_ID,NUMELQ,QUAD_ID_P,NUMELQG)
3032 CALL SPMD_H3D_GATHER_I(IS_WRITEN_QUAD,NUMELQ,IS_WRITEN_QUAD_P,NUMELQG)
3033 CALL SPMD_H3D_GATHER_R(QUAD_SCALAR,NUMELQ,QUAD_SCALAR_P,NUMELQG)
3034 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3035 ELSE
3036 QUAD_ID_P(1:NUMELQ) = QUAD_ID(1:NUMELQ)
3037 IS_WRITEN_QUAD_P(1:NUMELQ) = IS_WRITEN_QUAD(1:NUMELQ)
3038 QUAD_SCALAR_P(1:NUMELQ) = QUAD_SCALAR(1:NUMELQ)
3039 ENDIF
3040
3041 IF(ISPMD == 0) THEN
3042
3043 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
3044 CALL C_H3D_UPDATE_QUAD_SCALAR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXC_P,
3045 . NIXC,NUMELC,IPARTC,IXTG,NIXTG,
3046 . NUMELTGG,IPARTTG,QUAD_SCALAR_P,QUAD_ID_P,
3047 . N_OUTP_DATA,NUMELS,
3048 . NUMELQG,NUMELT,NUMELP,NUMELR,IS_WRITEN_QUAD_P)
3049 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
3050
3051 ENDIF
3052
3053
3054
3055.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 6
3056.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 2 NUMELQG > 0)THEN
3057
3058 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
3059 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
3060 IR = H3D_DATA%OUTPUT_LIST(I)%IR
3061 IS = H3D_DATA%OUTPUT_LIST(I)%IS
3062 IT = H3D_DATA%OUTPUT_LIST(I)%IT
3063 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
3064 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
3065
3066
3067
3068
3069
3070 CALL H3D_QUAD_VECTOR(
3071 . ELBUF_TAB ,QUAD_VECTOR ,IFUNC ,IPARG,GEO ,
3072 . IXQ ,IXC ,IXTG ,PM ,
3073 . EL2FA ,NBF ,IAD ,
3074 . NBF_L ,EANI ,ANIN(NDMA2+1) ,NBPART ,IADG ,
3075 . IPM ,IGEO ,THKE ,ERR_THK_SH4 ,ERR_THK_SH3,
3076 . INVERT ,X ,V ,W ,
3077 . NV46 ,NERCVOIS ,NESDVOIS ,LERCVOIS ,LESDVOIS ,
3078 . STACK ,QUAD_ID ,INFO1 ,INFO2 ,
3079 . IS_WRITEN_QUAD,IPARTQ ,IPARTTG ,LAYER ,IPT ,
3080 . ID_PLY ,GAUSS ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART,KEYWORD,
3081 . BUFMAT ,MULTI_FVM ,IR ,IS ,IT )
3082
3083 IF (NSPMD > 1 ) THEN
3084 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3085 CALL SPMD_H3D_GATHER_I(QUAD_ID,NUMELQ,QUAD_ID_P,NUMELQG)
3086 CALL SPMD_H3D_GATHER_I(IS_WRITEN_QUAD,NUMELQ,IS_WRITEN_QUAD_P,NUMELQG)
3087 CALL SPMD_H3D_GATHER_R(QUAD_VECTOR,3*NUMELQ,QUAD_VECTOR_P,3*NUMELQG)
3088 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3089 ELSE
3090 QUAD_ID_P(1:NUMELQ) = QUAD_ID(1:NUMELQ)
3091 IS_WRITEN_QUAD_P(1:NUMELQ) = IS_WRITEN_QUAD(1:NUMELQ)
3092 QUAD_VECTOR_P(1:3*NUMELQ) = QUAD_VECTOR(1:3*NUMELQ)
3093 ENDIF
3094
3095 IF(ISPMD == 0) THEN
3096 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
3097
3098 CALL C_H3D_UPDATE_QUAD_VECTOR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXC_P,
3099 . NIXC,NUMELC,IPARTC,IXTG,NIXTG,
3100 . NUMELTGG,IPARTTG,QUAD_VECTOR_P,QUAD_ID_P,
3101 . N_OUTP_DATA,NUMELS,
3102 . NUMELQG,NUMELT,NUMELP,NUMELR,IS_WRITEN_QUAD_P)
3103 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
3104
3105 ENDIF
3106
3107
3108
3109.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 6
3110.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 3 NUMELQG > 0)THEN
3111
3112 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
3113 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
3114 IR = H3D_DATA%OUTPUT_LIST(I)%IR
3115 IS = H3D_DATA%OUTPUT_LIST(I)%IS
3116 IT = H3D_DATA%OUTPUT_LIST(I)%IT
3117 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
3118 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
3119
3120
3121
3122
3123
3124 CALL H3D_QUAD_TENSOR(ELBUF_TAB,QUAD_TENSOR ,IPARG ,IFUNC ,INVERT,NELCUT,
3125 . EL2FA ,WAFT ,TANI ,IAD ,
3126 . NBPART,IADG ,X ,IXQ ,
3127 . IGEO ,IXTG ,IPM ,STACK ,QUAD_ID ,INFO1,
3128 . INFO2 ,IS_WRITEN_QUAD ,IPARTQ ,IPARTTG ,LAYER ,IPT ,
3129 . ID_PLY ,GAUSS ,IUVAR ,H3D_DATA%OUTPUT_LIST(I)%PART ,KEYWORD ,
3130 . IR ,IS ,IT )
3131
3132
3133 IF (NSPMD > 1 ) THEN
3134 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3135 CALL SPMD_H3D_GATHER_I(QUAD_ID,NUMELQ,QUAD_ID_P,NUMELQG)
3136 CALL SPMD_H3D_GATHER_I(IS_WRITEN_QUAD,NUMELQ,IS_WRITEN_QUAD_P,NUMELQG)
3137 CALL SPMD_H3D_GATHER_R(QUAD_TENSOR,6*(NUMELQ),QUAD_TENSOR_P,6*(NUMELQG))
3138 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3139 ELSE
3140 QUAD_ID_P(1:NUMELQ) = QUAD_ID(1:NUMELQ)
3141 IS_WRITEN_QUAD_P(1:NUMELQ) = IS_WRITEN_QUAD(1:NUMELQ)
3142 QUAD_TENSOR_P(1:6*(NUMELQ)) = QUAD_TENSOR(1:6*(NUMELQ))
3143 ENDIF
3144
3145 IF(ISPMD == 0) THEN
3146 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
3147 CALL C_H3D_UPDATE_QUAD_TENSOR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,IXC_P,
3148 . NIXC,NUMELCG,IPARTC,IXTG,NIXTG,
3149 . NUMELTGG,IPARTTG,QUAD_TENSOR_P,QUAD_ID_P,
3150 . N_OUTP_DATA,NUMELS,
3151 . NUMELQG,NUMELT,NUMELP,NUMELR,IS_WRITEN_QUAD_P)
3152 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
3153
3154 ENDIF
3155
3156
3157
3158
3159.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 7
3160.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 1 NUMSKING > 0)THEN
3161
3162 IFUNC = H3D_DATA%OUTPUT_LIST(I)%ID
3163 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
3164 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
3165 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
3166
3167 CALL H3D_SKIN_SCALAR(
3168 . ELBUF_TAB ,SKIN_SCALAR ,IFUNC ,IPARG ,GEO ,
3169 . IXS ,IXS10 ,IXS16 , IXS20 ,PM ,
3170 . IPM ,IGEO ,X ,V ,W ,
3171 . IPARTS ,H3D_DATA%OUTPUT_LIST(I)%PART,
3172 . IS_WRITEN_SKIN,INFO1,KEYWORD , H3D_DATA ,
3173 6 IAD_ELEM ,FR_ELEM , WEIGHT ,TAG_SKINS6,
3174 7 NPF ,TF ,BUFMAT,IBCL ,ILOADP ,LLOADP ,FAC ,
3175 8 NSENSOR,SENSORS%SENSOR_TAB,TAGNCONT,LOADP_HYD_INTER,XFRAME,FORC ,
3176 9 NODAL_IPART ,IMAPSKP ,LOADS ,TABLE,IFRAME,MAT_PARAM,D,PBLAST)
3177
3178 IF (NSPMD > 1 ) THEN
3179 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3180 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SKIN,NUMSKIN,IS_WRITEN_SKIN_P,NUMSKING)
3181 CALL SPMD_H3D_GATHER_R(SKIN_SCALAR,NUMSKIN,SKIN_SCALAR_P,NUMSKING)
3182 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3183 ELSE
3184 IS_WRITEN_SKIN_P(1:NUMSKIN) = IS_WRITEN_SKIN(1:NUMSKIN)
3185 SKIN_SCALAR_P(1:NUMSKIN) = SKIN_SCALAR(1:NUMSKIN)
3186 ENDIF
3187
3188 IF(ISPMD == 0) THEN
3189 DO II=1,NUMSKING
3190 SKIN_ID_P(II) = II
3191 ENDDO
3192 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
3193 CALL C_H3D_UPDATE_SKIN_SCALAR(TT,H3D_DATA%IH3D,ITAB,NUMNOD,
3194 . SKIN_SCALAR_P,SKIN_ID_P,N_OUTP_DATA,
3195 . NUMSKING,IS_WRITEN_SKIN_P)
3196 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
3197
3198 ENDIF
3199
3200
3201
3202.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 7
3203.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 2 NUMSKING > 0)THEN
3204
3205 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
3206 INFO1 = H3D_DATA%OUTPUT_LIST(I)%INFO1
3207 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
3208 CALL H3D_SKIN_VECTOR(SKIN_VECTOR,NODAL_IPART,NSENSOR,
3209 . IS_WRITEN_SKIN ,H3D_DATA%OUTPUT_LIST(I)%PART,INFO1 ,KEYWORD ,
3210 . IBCL,ILOADP,LLOADP,FAC ,NPF,TF ,SENSORS%SENSOR_TAB,
3211 . TAGNCONT,LOADP_HYD_INTER,FORC,XFRAME,X ,V ,IMAPSKP,LOADS ,
3212 . TABLE,IFRAME,D,PBLAST)
3213
3214 IF (NSPMD > 1 ) THEN
3215 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3216 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SKIN,NUMSKIN,IS_WRITEN_SKIN_P,NUMSKING)
3217 CALL SPMD_H3D_GATHER_R(SKIN_VECTOR,3*NUMSKIN,SKIN_VECTOR_P,3*(NUMSKING))
3218 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3219 ELSE
3220 IS_WRITEN_SKIN_P(1:NUMSKIN) = IS_WRITEN_SKIN(1:NUMSKIN)
3221 SKIN_VECTOR_P(1:3*(NUMSKIN)) = SKIN_VECTOR(1:3*(NUMSKIN))
3222 ENDIF
3223
3224 IF(ISPMD == 0) THEN
3225 DO II=1,NUMSKING
3226 SKIN_ID_P(II) = II
3227 ENDDO
3228 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
3229 CALL C_H3D_UPDATE_SKIN_VECTOR(TT,H3D_DATA%IH3D,
3230 . NUMSKING,SKIN_VECTOR_P,SKIN_ID_P,
3231 . N_OUTP_DATA,IS_WRITEN_SKIN_P)
3232 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
3233
3234 ENDIF
3235
3236
3237
3238.AND..AND. ELSEIF(H3D_DATA%OUTPUT_LIST(I)%OK /= 0 H3D_DATA%OUTPUT_LIST(I)%ETYPE == 7
3239.AND. . H3D_DATA%OUTPUT_LIST(I)%OUTP_TYPE == 3 NUMSKING > 0)THEN
3240
3241 N_OUTP_DATA = H3D_DATA%OUTPUT_LIST(I)%N_OUTP
3242 LAYER = H3D_DATA%OUTPUT_LIST(I)%LAYER
3243 IUVAR = H3D_DATA%OUTPUT_LIST(I)%IUVAR
3244 KEYWORD = H3D_DATA%OUTPUT_LIST(I)%KEYWORD
3245 CALL H3D_SKIN_TENSOR(
3246 . ELBUF_TAB,SKIN_TENSOR, IPARG ,IXS ,X ,PM ,
3247 4 IPARTS ,IPM ,IGEO ,IXS10 ,IXS16 ,IXS20 ,
3248 5 IS_WRITEN_SKIN ,H3D_DATA%OUTPUT_LIST(I)%PART,INFO1 ,
3249 6 KEYWORD ,IAD_ELEM ,FR_ELEM , WEIGHT ,TAG_SKINS6)
3250
3251 IF (NSPMD > 1 ) THEN
3252 CALL STARTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3253 CALL SPMD_H3D_GATHER_I(IS_WRITEN_SKIN,NUMSKIN,IS_WRITEN_SKIN_P,NUMSKING)
3254 CALL SPMD_H3D_GATHER_R(SKIN_TENSOR,3*(NUMSKIN),SKIN_TENSOR_P,3*(NUMSKING))
3255 CALL STOPTIME(TIMERS,MACRO_TIMER_SPMDH3D)
3256 ELSE
3257 IS_WRITEN_SKIN_P(1:NUMSKIN) = IS_WRITEN_SKIN(1:NUMSKIN)
3258 SKIN_TENSOR_P(1:3*(NUMSKIN)) = SKIN_TENSOR(1:3*(NUMSKIN))
3259 ENDIF
3260
3261 IF(ISPMD == 0) THEN
3262
3263 DO II=1,NUMSKING
3264 SKIN_ID_P(II) = II
3265 ENDDO
3266 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
3267 CALL C_H3D_UPDATE_SKIN_TENSOR(TT,H3D_DATA%IH3D,
3268 . NUMSKING,SKIN_TENSOR_P,SKIN_ID_P,
3269 . N_OUTP_DATA,IS_WRITEN_SKIN_P)
3270 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
3271
3272 ENDIF
3273
3274 ENDIF
3275 ENDDO
3276
3277
3278
3279
3280 !A POSTERIORI CHECK ---
3281 !CHECK IF MAXIMUM VIRTUAL NODE IDENTIFIER IS WITHIN [0,2147483647=HUGE]
3282 ITMP = USER_NOD_ID%FVMBAG_LEN + USER_NOD_ID%RWALL_LEN !total number of virtual nodes
3283 IF(ITMP > 0)THEN
3284 IF(ITMP >= HUGE(ITMP) - USER_NOD_ID%INPUT_MAX)THEN !test is in fact ( USER_NOD_ID%INPUT_MAX + ITMP >= HUGE) but LHS might be over HUGE written like this.
3285 CALL ANCMSG(MSGID=305,ANMODE=ANINFO)
3286 CALL ARRET(2)
3287 END IF
3288 ENDIF
3289
3290
3291
3292 ! FVMBAG visualization
3293 IF(ALLOCATED(NODAL_SCALAR_FVM))DEALLOCATE(NODAL_SCALAR_FVM)
3294 IF(ALLOCATED(NODAL_VECTOR_FVM))DEALLOCATE(NODAL_VECTOR_FVM)
3295 IF(ALLOCATED(NODE_ID_FVM))DEALLOCATE(NODE_ID_FVM)
3296 IF(ALLOCATED(IS_WRITEN_NODE_FVM))DEALLOCATE(IS_WRITEN_NODE_FVM)
3297
3298 if (ispmd ==0)then
3299 ! FVDATA_P deallocate
3300 IF(ALLOCATED(FVDATA_P))THEN
3301 DO J=1,NFVBAG
3302 IF(ASSOCIATED(FVDATA_P(J)%CENTROID_POLH))DEALLOCATE (FVDATA_P(J)%CENTROID_POLH)
3303 IF(ASSOCIATED(FVDATA_P(J)%PPOLH))DEALLOCATE (FVDATA_P(J)%PPOLH)
3304 IF(ASSOCIATED(FVDATA_P(J)%SSPPOLH))DEALLOCATE (FVDATA_P(J)%SSPPOLH)
3305 IF(ASSOCIATED(FVDATA_P(J)%DTPOLH))DEALLOCATE (FVDATA_P(J)%DTPOLH)
3306 IF(ASSOCIATED(FVDATA_P(J)%QPOLH))DEALLOCATE (FVDATA_P(J)%QPOLH)
3307 IF(ASSOCIATED(FVDATA_P(J)%MPOLH))DEALLOCATE (FVDATA_P(J)%MPOLH)
3308 IF(ASSOCIATED(FVDATA_P(J)%RPOLH))DEALLOCATE (FVDATA_P(J)%RPOLH)
3309 IF(ASSOCIATED(FVDATA_P(J)%TPOLH))DEALLOCATE (FVDATA_P(J)%TPOLH)
3310 ENDDO
3311 DEALLOCATE(FVDATA_P)
3312 ENDIF
3313 ENDIF
3314
3315 DEALLOCATE(NODAL_SCALAR)
3316 DEALLOCATE(NODAL_VECTOR)
3317 DEALLOCATE(NODE_ID)
3318 DEALLOCATE(IS_WRITEN_NODE)
3319 DEALLOCATE(IS_WRITEN_NODE_P)
3320 DEALLOCATE(NODAL_VECTOR_P)
3321 DEALLOCATE(NODAL_SCALAR_P)
3322 DEALLOCATE(NODE_ID_P)
3323
3324 DEALLOCATE(ONED_SCALAR)
3325 DEALLOCATE(ONED_VECTOR)
3326 DEALLOCATE(ONED_TENSOR)
3327 DEALLOCATE(ONED_TORSOR)
3328 DEALLOCATE(ONED_ID)
3329 DEALLOCATE(ONED_ITY)
3330 DEALLOCATE(IS_WRITEN_ONED)
3331 DEALLOCATE(IS_WRITEN_ONED_P)
3332 DEALLOCATE(ONED_ITY_P)
3333 DEALLOCATE(ONED_ID_P)
3334 DEALLOCATE(ONED_SCALAR_P)
3335 DEALLOCATE(ONED_VECTOR_P)
3336 DEALLOCATE(ONED_TENSOR_P)
3337 DEALLOCATE(ONED_TORSOR_P)
3338
3339 DEALLOCATE(SHELL_SCALAR)
3340 DEALLOCATE(SHELL_VECTOR)
3341 DEALLOCATE(SHELL_TENSOR)
3342 DEALLOCATE(SHELL_ID)
3343 DEALLOCATE(SHELL_ITY)
3344 DEALLOCATE(IS_WRITEN_SHELL)
3345 DEALLOCATE(SHELL_SCALAR_P)
3346 DEALLOCATE(IS_WRITEN_SHELL_P)
3347 DEALLOCATE(SHELL_TENSOR_P)
3348 DEALLOCATE(SHELL_ID_P)
3349 DEALLOCATE(SHELL_ITY_P)
3350
3351 DEALLOCATE(SOLID_SCALAR)
3352 DEALLOCATE(SOLID_VECTOR)
3353 DEALLOCATE(SOLID_TENSOR)
3354 DEALLOCATE(SOLID_TENSOR_CORNER)
3355 DEALLOCATE(SOLID_ID)
3356 DEALLOCATE(ISOLNOD)
3357 DEALLOCATE(SOLID_ITY)
3358 DEALLOCATE(IS_WRITEN_SOLID)
3359 DEALLOCATE(SOLID_SCALAR_P)
3360 DEALLOCATE(SOLID_VECTOR_P)
3361 DEALLOCATE(SOLID_TENSOR_P)
3362 DEALLOCATE(SOLID_TENSOR_CORNER_P)
3363 DEALLOCATE(IS_WRITEN_SOLID_P)
3364 DEALLOCATE(SOLID_ID_P)
3365 DEALLOCATE(ISOLNOD_P)
3366 DEALLOCATE(SOLID_ITY_P)
3367
3368 DEALLOCATE(SPH_SCALAR)
3369 DEALLOCATE(SPH_TENSOR)
3370 DEALLOCATE(SPH_ID)
3371 DEALLOCATE(IS_WRITEN_SPH)
3372 DEALLOCATE(SPH_SCALAR_P)
3373 DEALLOCATE(SPH_TENSOR_P)
3374 DEALLOCATE(IS_WRITEN_SPH_P)
3375 DEALLOCATE(SPH_ID_P)
3376
3377 DEALLOCATE(QUAD_SCALAR)
3378 DEALLOCATE(QUAD_VECTOR)
3379 DEALLOCATE(QUAD_TENSOR)
3380 DEALLOCATE(QUAD_ID)
3381 DEALLOCATE(IS_WRITEN_QUAD)
3382 DEALLOCATE(QUAD_SCALAR_P)
3383 DEALLOCATE(QUAD_TENSOR_P)
3384 DEALLOCATE(IS_WRITEN_QUAD_P)
3385 DEALLOCATE(QUAD_ID_P)
3386
3387 DEALLOCATE(SKIN_TENSOR,SKIN_VECTOR,SKIN_SCALAR)
3388 DEALLOCATE(IS_WRITEN_SKIN)
3389 DEALLOCATE(SKIN_TENSOR_P,SKIN_VECTOR_P,SKIN_SCALAR_P)
3390 DEALLOCATE(IS_WRITEN_SKIN_P)
3391 DEALLOCATE(SKIN_ID_P)
3392 DEALLOCATE(IXSKIN_TMP)
3393 DEALLOCATE(IXSKIN_P)
3394 IF (NUMSKINP>0) DEALLOCATE(NODAL_IPART,IMAPSKP)
3395
3396 DEALLOCATE(ITAB_P)
3397
3398
3399 DEALLOCATE( IXTG_P)
3400 DEALLOCATE( IXS_P)
3401 DEALLOCATE( IXP_P)
3402 DEALLOCATE( IXR_P)
3403 DEALLOCATE( KXSP_P)
3404 DEALLOCATE( IXT_P)
3405 DEALLOCATE( IXC_P)
3406 DEALLOCATE( IXS10_P)
3407 DEALLOCATE( IXS16_P)
3408 DEALLOCATE( IXS20_P)
3409 DEALLOCATE( IPARTC_P)
3410 DEALLOCATE( IPARTTG_P)
3411 DEALLOCATE( IPARTQ_P)
3412 DEALLOCATE( IPARTS_P)
3413 DEALLOCATE( IPARTR_P)
3414 DEALLOCATE( IPARTP_P)
3415 DEALLOCATE( IPARTT_P)
3416 DEALLOCATE( IPARTSP_P)
3417 DEALLOCATE( IPARTS10_P)
3418 DEALLOCATE( IPARTS16_P)
3419 DEALLOCATE( IPARTS20_P)
3420 DEALLOCATE( IXQ_P)
3421 DEALLOCATE( IXC_TMP)
3422 DEALLOCATE( IXTG_TMP)
3423
3424 DEALLOCATE( IXR_TMP)
3425 DEALLOCATE( IXP_TMP)
3426 DEALLOCATE( KXSP_TMP)
3427 DEALLOCATE( IXT_TMP)
3428 DEALLOCATE( IXS10_TMP)
3429 DEALLOCATE( IXS16_TMP)
3430 DEALLOCATE( IXS20_TMP)
3431 DEALLOCATE( IXQ_TMP)
3432 DEALLOCATE( SUB_ID,SUB_LEVEL,SUB_NCHILD)
3433 IF(ALLOCATED(SUB_CHILD)) DEALLOCATE( SUB_CHILD,SUB_IAD,SUB_TITLE)
3434
3435
3436 IF (ALLOCATED(NODAL_IPART)) DEALLOCATE(NODAL_IPART)
3437
3438
3439 IF (ALLOCATED(TAGNOD)) DEALLOCATE(TAGNOD)
3440
3441 DEALLOCATE(TAGNOD_P)
3442
3443 DEALLOCATE(MAS)
3444
3445 IF(ISPMD == 0) THEN
3446 CALL STARTIME(TIMERS,MACRO_TIMER_LIBH3D)
3447 CALL C_H3D_WRITE_TOC()
3448 CALL STOPTIME(TIMERS,MACRO_TIMER_LIBH3D)
3449 ENDIF
3450
3451 IF (ISPMD==0) THEN
3452 INQUIRE(FILE=TMP_NAME(1:LEN_TMP_NAME), SIZE=H3DTOTALSIZE8)
3453 H3DTOTALSIZE8 = H3DTOTALSIZE8/(1024*1024)
3454 H3DTOTALSIZE = H3DTOTALSIZE8
3455 WRITE (IOUT,1000) FILNAM(1:FILEN),H3D_DATA%IH3D,NCYCLE,TT
3456 WRITE (ISTDO,1000) FILNAM(1:FILEN),H3D_DATA%IH3D,NCYCLE,TT
3457 ENDIF
3458
3459 CALL STOPTIME(TIMERS,MACRO_TIMER_GENH3D)
3460
3461 RETURN
3462 1000 FORMAT (4X,' h3d file:',1X,A,' updated: frame=',1X,I5,' , nc=',1X,I7,' , time=',1X,G11.4)
void c_h3d_create_beams(int *ITAB, int *NUMNOD, int *IXP, int *NIXP, int *NUMELP, int *IPARTP, int *IPART, int *LIPART1, int *H3D_PART)
void c_h3d_create_components(int *IPART, int *LIPART1, int *NPART, int *LTITR, int *IGEO, int *NPROPGI, int *H3D_PART, int *NRBODY, int *NRWALL, int *NOM_OPT, int *LNOPT1, int *I16D, int *NPBY, int *NNPBY, int *SUB_NCHILD, int *NSUBS, int *NRBE2, int *NRBE3, int *I16E, int *I16F, int *N2D, int *IRBE2, int *NRBE2L, int *SUB_ID, int *SUB_CHILD, int *SUB_LEVEL, int *SUB_IAD, int *SUB_TITLE, int *IRBE3, int *NRBE3L, int *COMPID_RBODIES, int *COMPID_RBE2S, int *COMPID_RBE3S)
void c_h3d_create_displacement_datatype()
void c_h3d_create_nodes(int *ITAB, int *NUMNOD, my_real *X, int *TAGNOD, my_real *D)
void c_h3d_create_quads(int *ITAB, int *NUMNOD, int *IPART, int *LIPART1, int *H3D_PART, int *IXQ, int *NIXQ, int *NUMELQ, int *IPARTQ)
void c_h3d_create_rbe2(int *ITAB, int *NUMNOD, int *IRBE2, int *NRBE2L, int *LRBE2, int *NRBE2, int *COMPID_RBE2S)
void c_h3d_create_rbe3(int *ITAB, int *NUMNOD, int *IRBE3, int *NRBE3L, int *LRBE3, int *NRBE3, int *COMPID_RBE3S)
void c_h3d_create_rbodies(int *ITAB, int *NUMNOD, int *NPBY, int *NNPBY, int *LPBY, int *NRBODY, int *COMPID_RBODIES)
void c_h3d_create_results_end()
void c_h3d_create_rwalls(int *NOM_OPT, int *LNOPT1, int *I16D, int *NPRW, int *NRWALL, int *MAX_NOD_ID, my_real *XWL, my_real *YWL, my_real *ZWL, my_real *V1, my_real *V2, my_real *V3, my_real *VV1, my_real *VV2, my_real *VV3, my_real *XL, my_real *XN, my_real *YN, my_real *ZN, int *NUM_ADDED_NODES)
void c_h3d_create_sh3ns(int *ITAB, int *NUMNOD, int *IXTG, int *NIXTG, int *NUMELTG, int *IPARTTG, int *IPART, int *LIPART1, int *H3D_PART)
void c_h3d_create_shells(int *ITAB, int *NUMNOD, int *IXC, int *NIXC, int *NUMELC, int *IPARTC, int *IPART, int *LIPART1, int *H3D_PART)
void c_h3d_create_skins(int *ITAB, int *NUMNOD, int *IPART, int *LIPART1, int *H3D_PART, int *IXQ, int *NIXQ, int *NUMELQ, int *IPARTQ)
void c_h3d_create_solid8n(int *ITAB, int *NUMNOD, int *IXS, int *NIXS, int *NUMELS, int *IPARTS, int *IPART, int *LIPART1, int *H3D_PART, int *NUMELS10, int *IXS10, int *IPARTS10, int *NUMELS16, int *IXS16, int *IPARTS16, int *NUMELS20, int *IXS20, int *IPARTS20)
void c_h3d_create_sph(int *ITAB, int *NUMNOD, int *KXSP, int *NISP, int *NUMSPH, int *IPARTSP, int *IPART, int *LIPART1, my_real *X, int *H3D_PART)
void c_h3d_create_springs(int *ITAB, int *NUMNOD, int *IXR, int *NIXR, int *NUMELR, int *IPARTR, int *IPART, int *LIPART1, int *H3D_PART)
void c_h3d_create_truss(int *ITAB, int *NUMNOD, int *IXT, int *NIXT, int *NUMELT, int *IPARTT, int *IPART, int *LIPART1, int *H3D_PART)
void c_h3d_eroded_oned(my_real *TT, int *IH3D, int *ITAB, int *NUMNOD, int *IXT, int *NIXT, int *NUMELT, int *IPARTT, int *IXP, int *NIXP, int *NUMELP, int *IPARTP, int *IXR, int *NIXR, int *NUMELR, int *IPARTR, my_real *FUNC, int *ID_ELEM, int *CPT_DATATYPE, int *ITY_ELEM)
void c_h3d_eroded_quad(my_real *TT, int *IH3D, int *ITAB, int *NUMNOD, int *IXQ, int *NIXQ, int *NUMELQ, int *IPARTQ, my_real *FUNC, int *ID_ELEM, int *CPT_DATATYPE)
void c_h3d_eroded_shell(my_real *TT, int *IH3D, int *ITAB, int *NUMNOD, int *IXC, int *NIXC, int *NUMELC, int *IPARTC, int *IXTG, int *NIXTG, int *NUMELTG, int *IPARTTG, my_real *FUNC, int *ID_ELEM, int *CPT_DATATYPE, int *ITY_ELEM, int *NUMELS, int *NUMELQ, int *NUMELT, int *NUMELP, int *NUMELR)
void c_h3d_eroded_skin(my_real *TT, int *IH3D, int *ITAB, int *NUMNOD, my_real *FUNC, int *ID_ELEM, int *CPT_DATATYPE, int *NUMELQ)
void c_h3d_eroded_solid(my_real *TT, int *IH3D, int *ITAB, int *NUMNOD, int *IXS, int *NIXS, int *NUMELS, int *IPARTS, my_real *FUNC, int *ID_ELEM, int *CPT_DATATYPE, int *ITY_ELEM, int *NUMELQ, int *NUMELT, int *NUMELP, int *NUMELR)
void c_h3d_eroded_sph(my_real *TT, int *IH3D, int *NUMSPH, my_real *FUNC, int *ID_ELEM, int *CPT_DATATYPE)
void c_h3d_open_file(char *name, int *size, my_real *percentage_error, int *comp_level, char *RADVERS, int *LEN_RADVERS, my_real *FAC_M, my_real *FAC_L, my_real *FAC_T)
void c_h3d_reopen_file(char *name, int *size, my_real *percentage_error, int *comp_level)
void c_h3d_update_nodal_fvmbag_scalar(my_real *TT, int *IH3D, int *NUMNOD, my_real *FUNC, int *ID_NODE, int *CPT_DATATYPE, int *IS_WRITTEN)
void c_h3d_update_nodal_scalar(my_real *TT, int *IH3D, int *ITAB, int *NUMNOD, my_real *FUNC, int *ID_NODE, int *CPT_DATATYPE, int *IS_WRITTEN)
subroutine drbe2cnt(nerbe2, irbe2, lrbe2, weight)
subroutine drbe3cnt(nerbe3, irbe3, lrbe3, weight)
integer function sysfus2(iu, itabm1, numnod)
subroutine h3d_constit(itab, itabm1, numnod)
subroutine h3d_create_datatype(h3d_data, ipari)
subroutine h3d_create_fvmbag_centroids(monvol, volmon, fvdata, nfvbag, smonvol, svolmon, airbags_node_id_shift)
subroutine h3d_create_rbe2_impi(lrbe2, irbe2, nodglob, weight, nerbe2y, nerbe2t, itab, compid_rbe2s)
subroutine h3d_create_rbe3_impi(lrbe3, irbe3, nodglob, weight, nerbe3y, nerbe3t, itab, compid_rbe3s)
subroutine h3d_create_rbodies_impi(npby, lpby, fr_rby2, iad_rby2, sbufspm, sbufrecvm, sbufspo, sporby, nodglob, weight, itab, compid_rbodies)
void h3dlib_load(int *IERROR)
subroutine h3d_dxyz_rwall(nstrf, rwbuf, nprw, x, xmin, ymin, zmin, xmax, ymax, zmax, fr_sec, fr_wall, weight, itab, xwl, ywl, zwl, rwall_v1, rwall_v2, rwall_v3, rwall_v4, rwall_v5, rwall_v6, rwall_v7, rwall_v8, rwall_v9, rwall_v10)
subroutine h3d_dxyz_rwall_update(nstrf, rwbuf, nprw, disp, xmin, ymin, zmin, xmax, ymax, zmax, fr_sec, fr_wall, weight, itab, xwl, ywl, zwl, rwall_v1, rwall_v2, rwall_v3, rwall_v4, rwall_v5, rwall_v6)
subroutine h3d_nodal_scalar(elbuf_tab, nodal_scalar, 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, volmon, ale_connect, diag_sms, ms, pdama2, x, stifr, stifn, keyword, h3d_data, npby, rby, interskid, ninterskid, pskids, nodglob, ityskid, ipartsp, ipartr, ipartp, ipartt, iparts, ipartq, kxsp, ixr, ixp, ixt, n_h3d_part_list, interfric, csefric, csefricg, csefric_stamp, csefricg_stamp, nodal_scalar_fvm, airbags_total_fvm_in_h3d, is_written_node_fvm, ispmd, fvdata_p, airbags_node_id_shift, multi_fvm, itherm_fe, nfvbag)
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)
subroutine get_nodal_ipart(elbuf_tab, iparg, ipartc, iparttg, iparts, ixc, ixtg, ixs, ixs10, ixs16, ixs20, nodal_ipart)
subroutine h3d_skin_ixskin(elbuf_tab, iparg, iparts, ixs, ixs10, itab, ixskin, tag_skins6, ibcl, iloadp, lloadp, nodal_ipart, imapskp, loads, pblast)
subroutine h3d_skin_off(elbuf_tab, iparg, ixs, ixs10, tag_skins6, skin_off)
subroutine h3d_skin_pre_map(ib, iloadp, lloadp, imapskp, loads, pblast)
subroutine h3d_update_fvmbag_centroids(h3dtitle, len_h3dtitle, ih3d, monvol, volmon, nfvbag, smonvol, svolmon, fvdata_p, airbags_node_id_shift)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
type(fvbag_spmd), dimension(:), allocatable fvspmd
type(fvbag_data), dimension(:), allocatable fvdata
integer airbags_total_fvm_in_h3d
character(len=outfile_char_len) outfile_name
integer, parameter ncharline100
subroutine smass3(rho, ms, partsav, x, v, ipart, mss, volu, msnf, mssf, in, vr, ins, wma, rhocp, mcp, mcps, mssa, rhof, frac, fill, nc1, nc2, nc3, nc4, nc5, nc6, nc7, nc8)
subroutine spmd_gather_int(sendbuf, recvbuf, proc, send_size, rcv_size)
subroutine spmd_h3d_gather_i(v, len, vp0, lenp0)
subroutine spmd_h3d_gather_i_node(weight, v, len, vp0, lenp0)
subroutine spmd_h3d_gather_i_node_part(weight, tagnod, v, len, vp0, lenp0)
subroutine spmd_h3d_gather_r(v, len, vp0, lenp0)
subroutine spmd_h3d_gather_r_nodal_value(weight, v, len, vp0, lenp0)
subroutine spmd_h3d_max_r_nodal_value(nodglob, v, len, vp0, lenp0)
subroutine spmd_h3d_max_r_nodal_value_21(nodglob, vp0, lenp0, vg21, ni, nig)
subroutine spmd_h3d_gather_r_node(weight, v, len, vp0, lenp0)
subroutine h3d_oned_off(elbuf_tab, iparg, ixt, ixp, ixr, oned_scalar, id_elem, ity_elem, ipart, ipartt, ipartp, ipartr)
subroutine h3d_quad_off(elbuf_tab, iparg, ixq, quad_scalar, id_elem, ipart, ipartq)
subroutine h3d_shell_off(elbuf_tab, iparg, ixc, ixtg, numelc, shell_scalar, id_elem, ity_elem, ipart, ipartc, iparttg)
subroutine h3d_solid_off(elbuf_tab, iparg, ixs, solid_scalar, id_elem, ity_elem, isolnod)
subroutine h3d_sph_off(elbuf_tab, iparg, kxsp, sph_scalar, id_elem)
subroutine spmd_h3d_sum_r_nodal_value(nodglob, v, len, vp0, lenp0)
subroutine spmd_outpitab(v, weight, nodglob, vglob)
subroutine drbycnt(nerby, npby)
subroutine scanor(x, d, cdg, scale)
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 startime(event, itask)
subroutine stoptime(event, itask)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)