OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
resol.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "mvsiz_p.inc"
#include "macro.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "com06_c.inc"
#include "com08_c.inc"
#include "com09_c.inc"
#include "intstamp_c.inc"
#include "sphcom.inc"
#include "param_c.inc"
#include "scr02_c.inc"
#include "scr03_c.inc"
#include "scr05_c.inc"
#include "scr06_c.inc"
#include "scr07_c.inc"
#include "scr11_c.inc"
#include "scr12_c.inc"
#include "scr14_c.inc"
#include "scr16_c.inc"
#include "scr17_c.inc"
#include "scr18_c.inc"
#include "scr23_c.inc"
#include "units_c.inc"
#include "stati_c.inc"
#include "statr_c.inc"
#include "cong2_c.inc"
#include "task_c.inc"
#include "parit_c.inc"
#include "timeri_c.inc"
#include "couple_c.inc"
#include "rad2r_c.inc"
#include "chara_c.inc"
#include "lagmult.inc"
#include "warn_c.inc"
#include "impl1_c.inc"
#include "fxbcom.inc"
#include "eigcom.inc"
#include "spmd_c.inc"
#include "remesh_c.inc"
#include "com_xfem1.inc"
#include "tabsiz_c.inc"
#include "sms_c.inc"
#include "filescount_c.inc"
#include "inter22.inc"
#include "userlib.inc"
#include "drape_c.inc"
#include "lockon.inc"
#include "lockoff.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine resol (timers, element, nodes, coupling, af, iaf, iskwn, neth, ipart, nom_opt, kxx, ixx, ixtg, ixs, ixq, ixt, ixp, ixr, ifill, mat_elem, ims, npc, ibcl, ibfv, idum, las, laccelm, nnlink, lnlink, iparg, dd_iad, igrv, iexlnk, ipari, iconx, npby, lpby, lrivet, nstrf, ljoint, nodpor, monvol, ilink, llink, linale, neflsw, nnflsw, icut, cluster, itask, inoise, thke, damp, pm, skews, geo, eani, bufmat, bufgeo, bufsf, w, veul, fill, dfill, alph, wb, dsave, asave, msnf, tf, forc, vel, fsav, fzero, xlas, accelm, agrv, fr_wave, failwave, parts0, elbuf, sensors, rby, rivet, secbuf, volmon, lambda, wa, fv, partsav, uwa, val2, phi, segvar, r, crflsw, flsw, xcut, tani, secfcum, bufnois, idata, rdata, iframe, kxsp, ixsp, nod2sp, ispsym, ispcond, xframe, spbuf, xspsym, vspsym, pv, fsavd, ibvel, lbvel, wasph, w16, isphio, lprtsph, lonfsph, vsphio, fbvel, lagbuf, ibcslag, iactiv, dampr, gjbufi, gjbufr, rbmpc, ibmpc, sphveln, nbrcvois, nbsdvois, lnrcvois, lnsdvois, nercvois, nesdvois, lercvois, lesdvois, npsegcom, lsegcom, nporgeo, ixtg1, npbyl, lpbyl, rbyl, igeo, ipm, madprt, madsh4, madsh3, madsol, madnod, madfail, iad_rby, fr_rby, iad_rby2, fr_rby2, iad_i2m, fr_i2m, addcni2, procni2, iadi2, fr_mv, iadmv2, fr_ll, fr_rl, iadcj, fr_cj, fr_sec, iad_sec, iad_cut, fr_cut, rg_cut, newfront, fr_mad, fxbipm, fxbrpm, fxbnod, fxbmod, fxbglm, fxbcpm, fxbcps, fxblm, fxbfls, fxbdls, fxbdep, fxbvit, fxbacc, fxbelm, fxbsig, fxbgrvi, fxbgrvr, eigipm, eigibuf, eigrpm, lnodpor, fr_i18, graphe, iflow, rflow, lgrav, dd_r2r, fasolfr, fr_lagf, llagf, icontact, rcontact, sh4tree, sh3tree, ipadmesh, padmesh, msc, mstg, inc, intg, ptg, iskwp, nskwp, isensp, nsensp, iaccp, naccp, ipart_state, acontact, pcontact, factiv, sh4trim, sh3trim, mscnd, incnd, ibfflux, fbfflux, rbym, irbym, lnrbym, icodrbym, ibcv, fconv, ibftemp, fbftemp, iad_rbym, fr_rbym, weight_rm, ms_ply, zi_ply, inod_pxfem, iel_pxfem, iadc_pxfem, adsky_pxfem, icode_ply, icodt_ply, iskew_ply, admsms, madclnod, nom_sect, mcpc, mcptg, dmelc, dmeltg, mssa, dmels, mstr, dmeltr, msp, dmelp, msrt, dmelrt, ibcr, fradia, res_sms, table, irbe2, lrbe2, iad_rbe2, fr_rbe2, phie, msf, procne_pxfem, iadsdp_pxfem, iadrcp_pxfem, icfield, lcfield, cfield, msz2, diag_sms, iloadp, lloadp, loadp, inod_crk, iel_crk, iadc_crk, adsky_crk, cne_crk, procne_crk, iadsdp_crk, iadrcp_crk, ibufssg_io, ibc_ply, dmint2, ibordnode, elbuf_tab, por, nodedge, iad_edge, fr_edge, fr_nbedge, crknodiad, lgauge, gauge, igaup, ngaup, nodlevxf, dd_r2r_elem, nodglobxfe, sph2sol, sol2sph, irst, dmsph, wagap, xfem_tab, elcutc, nodenr, kxfenod2elc, enrtag, rthbu f, kxig3d, ixig3d, knot, wige, wsmcomp, stack, cputime_mp_glob, cputime_mp, tab_ump, poin_ump, sol2sph_typ, irunn_bis, addcsrect, iad_frnor, fr_nor, procnor, iad_fredg, fr_edg, drape_sh4n, drape_sh3n, tab_mat, nativ0_sms, multi_fvm, segquadfr, ms_2d, h3d_data, subsets, igrnod, igrbric, igrquad, igrsh4n, igrsh3n, igrtruss, igrbeam, igrspring, igrpart, igrsurf, forneqs, nloc_dmg, iskwp_l, knotlocpc, knotlocel, pinch_data, tag_skins6, ale_connectivity, xcell, xface, ne_nercvois, ne_nesdvois, ne_lercvois, ne_lesdvois, ibcscyc, lbcscyc, t_monvol, id_global_vois, face_vois, dynain_data, fcont_max, ebcs_tab, diffusion, kloadpinter, loadpinter, dgaploadint, drapeg, user_windows, output, interfaces, dt, loads, python, dpl0cld, vel0cld, ndamp_vrel, id_damp_vrel, fr_damp_vrel, ndamp_vrel_rbyg, names_and_titles, unitab, liflow, lrflow, glob_therm, pblast, rbe3, rwall)

Function/Subroutine Documentation

◆ resol()

subroutine resol ( type(timer_) timers,
type(connectivity_), intent(inout) element,
type(nodal_arrays_), intent(inout) nodes,
type(coupling_type), intent(inout) coupling,
af,
integer, dimension(*) iaf,
integer, dimension(liskn,*) iskwn,
integer, dimension(*) neth,
integer, dimension(*) ipart,
integer, dimension(lnopt1,*) nom_opt,
integer, dimension(nixx,*) kxx,
integer, dimension(*) ixx,
integer, dimension(nixtg,*) ixtg,
integer, dimension(*) ixs,
integer, dimension(nixq,*) ixq,
integer, dimension(nixt,*) ixt,
integer, dimension(nixp,*) ixp,
integer, dimension(nixr,*) ixr,
integer, dimension(numnod,*) ifill,
type(mat_elem_), intent(inout) mat_elem,
integer, dimension(*) ims,
integer, dimension(*) npc,
integer, dimension(*) ibcl,
integer, dimension(*) ibfv,
integer, dimension(*) idum,
integer, dimension(*) las,
integer, dimension(3,*) laccelm,
integer, dimension(10,*) nnlink,
integer, dimension(*) lnlink,
integer, dimension(nparg,*) iparg,
integer, dimension(nspmd+1,*) dd_iad,
integer, dimension(*) igrv,
integer, dimension(nr2r,*) iexlnk,
integer, dimension(npari,ninter) ipari,
integer, dimension(*) iconx,
integer, dimension(nnpby,*) npby,
integer, dimension(*) lpby,
integer, dimension(*) lrivet,
integer, dimension(*) nstrf,
integer, dimension(*) ljoint,
integer, dimension(*) nodpor,
integer, dimension(*) monvol,
integer, dimension(*) ilink,
integer, dimension(*) llink,
integer, dimension(*) linale,
integer, dimension(*) neflsw,
integer, dimension(*) nnflsw,
integer, dimension(*) icut,
type (cluster_), dimension(*) cluster,
integer itask,
integer, dimension(*) inoise,
thke,
damp,
pm,
type(skew_), intent(inout) skews,
geo,
eani,
bufmat,
bufgeo,
bufsf,
w,
veul,
fill,
dfill,
alph,
wb,
dsave,
asave,
msnf,
tf,
forc,
vel,
fsav,
fzero,
xlas,
accelm,
agrv,
fr_wave,
type (failwave_str_) failwave,
parts0,
elbuf,
type (sensors_), intent(inout) sensors,
rby,
rivet,
secbuf,
volmon,
lambda,
wa,
fv,
partsav,
uwa,
val2,
phi,
type(t_segvar) segvar,
r,
crflsw,
flsw,
xcut,
tani,
secfcum,
bufnois,
integer, dimension(*) idata,
rdata,
integer, dimension(liskn,*) iframe,
integer, dimension(nisp,*) kxsp,
integer, dimension(*) ixsp,
integer, dimension(*) nod2sp,
integer, dimension(nspcond,*) ispsym,
integer, dimension(nispcond,*) ispcond,
xframe,
spbuf,
type (spsym_struct) xspsym,
type (spsym_struct) vspsym,
pv,
fsavd,
integer, dimension(nbvelp,*) ibvel,
integer, dimension(*) lbvel,
wasph,
w16,
integer, dimension(nisphio,*) isphio,
integer, dimension(*) lprtsph,
integer, dimension(*) lonfsph,
vsphio,
fbvel,
integer, dimension(*) lagbuf,
integer, dimension(*) ibcslag,
integer, dimension(*) iactiv,
dampr,
integer, dimension(lkjni,*) gjbufi,
gjbufr,
rbmpc,
integer, dimension(*) ibmpc,
sphveln,
integer, dimension(*) nbrcvois,
integer, dimension(*) nbsdvois,
integer, dimension(*) lnrcvois,
integer, dimension(*) lnsdvois,
integer, dimension(*) nercvois,
integer, dimension(*) nesdvois,
integer, dimension(*) lercvois,
integer, dimension(*) lesdvois,
integer, dimension(*) npsegcom,
integer, dimension(*) lsegcom,
integer, dimension(*) nporgeo,
integer, dimension(4,*) ixtg1,
integer, dimension(nnpby,*) npbyl,
integer, dimension(*) lpbyl,
rbyl,
integer, dimension(npropgi,*) igeo,
integer, dimension(npropmi,*) ipm,
integer, dimension(*) madprt,
integer, dimension(*) madsh4,
integer, dimension(*) madsh3,
integer, dimension(*) madsol,
integer, dimension(*) madnod,
integer, dimension(*) madfail,
integer, dimension(*) iad_rby,
integer, dimension(*) fr_rby,
integer, dimension(*) iad_rby2,
integer, dimension(*) fr_rby2,
integer, dimension(*) iad_i2m,
integer, dimension(*) fr_i2m,
integer, dimension(*) addcni2,
integer, dimension(*) procni2,
integer, dimension(*) iadi2,
integer, dimension(*) fr_mv,
integer, dimension(*) iadmv2,
integer, dimension(*) fr_ll,
integer, dimension(*) fr_rl,
integer, dimension(*) iadcj,
integer, dimension(*) fr_cj,
integer, dimension(*) fr_sec,
integer, dimension(4,*) iad_sec,
integer, dimension(nspmd+2,*) iad_cut,
integer, dimension(*) fr_cut,
integer, dimension(*) rg_cut,
integer, dimension(*) newfront,
integer, dimension(5,*) fr_mad,
integer, dimension(nbipm,*) fxbipm,
fxbrpm,
integer, dimension(*) fxbnod,
fxbmod,
fxbglm,
fxbcpm,
fxbcps,
fxblm,
fxbfls,
fxbdls,
fxbdep,
fxbvit,
fxbacc,
integer, dimension(*) fxbelm,
fxbsig,
integer, dimension(*) fxbgrvi,
fxbgrvr,
integer, dimension(neipm,*) eigipm,
integer, dimension(*) eigibuf,
eigrpm,
integer, dimension(*) lnodpor,
integer, dimension(*) fr_i18,
type(prgraph), dimension(*) graphe,
integer, dimension(*) iflow,
rflow,
integer, dimension(*) lgrav,
integer, dimension(nspmd+1,*) dd_r2r,
integer, dimension(*) fasolfr,
integer, dimension(3,*) fr_lagf,
integer, dimension(*) llagf,
integer, dimension(*) icontact,
rcontact,
integer, dimension(*) sh4tree,
integer, dimension(*) sh3tree,
integer, dimension(*) ipadmesh,
padmesh,
msc,
mstg,
inc,
intg,
ptg,
integer, dimension(*) iskwp,
integer, dimension(*) nskwp,
integer, dimension(2,*) isensp,
integer, dimension(*) nsensp,
integer, dimension(*) iaccp,
integer, dimension(*) naccp,
integer, dimension(*) ipart_state,
acontact,
pcontact,
factiv,
integer, dimension(*) sh4trim,
integer, dimension(*) sh3trim,
mscnd,
incnd,
integer, dimension(*) ibfflux,
fbfflux,
rbym,
integer, dimension(*) irbym,
integer, dimension(*) lnrbym,
integer, dimension(*) icodrbym,
integer, dimension(*) ibcv,
fconv,
integer, dimension(*) ibftemp,
fbftemp,
integer, dimension(*) iad_rbym,
integer, dimension(*) fr_rbym,
integer, dimension(*) weight_rm,
ms_ply,
zi_ply,
integer, dimension(*) inod_pxfem,
integer, dimension(*) iel_pxfem,
integer, dimension(*) iadc_pxfem,
integer, dimension(*) adsky_pxfem,
integer, dimension(*) icode_ply,
integer, dimension(*) icodt_ply,
integer, dimension(*) iskew_ply,
admsms,
integer, dimension(*) madclnod,
integer, dimension(*) nom_sect,
mcpc,
mcptg,
dmelc,
dmeltg,
mssa,
dmels,
mstr,
dmeltr,
msp,
dmelp,
msrt,
dmelrt,
integer, dimension(*) ibcr,
fradia,
res_sms,
type(ttable), dimension(*) table,
integer, dimension(*) irbe2,
integer, dimension(*) lrbe2,
integer, dimension(*) iad_rbe2,
integer, dimension(*) fr_rbe2,
phie,
msf,
integer, dimension(*) procne_pxfem,
integer, dimension(*) iadsdp_pxfem,
integer, dimension(*) iadrcp_pxfem,
integer, dimension(*) icfield,
integer, dimension(*) lcfield,
cfield,
msz2,
diag_sms,
integer, dimension(*) iloadp,
integer, dimension(*) lloadp,
loadp,
integer, dimension(*) inod_crk,
integer, dimension(*) iel_crk,
integer, dimension(*) iadc_crk,
integer, dimension(*) adsky_crk,
integer, dimension(*) cne_crk,
integer, dimension(*) procne_crk,
integer, dimension(*) iadsdp_crk,
integer, dimension(*) iadrcp_crk,
integer, dimension(*) ibufssg_io,
integer, dimension(*) ibc_ply,
dmint2,
integer, dimension(*) ibordnode,
type(elbuf_struct_), dimension(ngroup) elbuf_tab,
por,
integer, dimension(*) nodedge,
integer, dimension(*) iad_edge,
integer, dimension(*) fr_edge,
integer, dimension(*) fr_nbedge,
integer, dimension(*) crknodiad,
integer, dimension(3,*) lgauge,
gauge,
integer, dimension(*) igaup,
integer, dimension(*) ngaup,
integer, dimension(*) nodlevxf,
integer, dimension(*) dd_r2r_elem,
integer, dimension(*) nodglobxfe,
integer, dimension(*) sph2sol,
integer, dimension(2,*) sol2sph,
integer, dimension(3,*) irst,
dmsph,
wagap,
type(elbuf_struct_), dimension(ngroup,nxel) xfem_tab,
integer, dimension(2,*) elcutc,
integer, dimension(*) nodenr,
integer, dimension(*) kxfenod2elc,
integer, dimension(numnod,*) enrtag,
rthbu,
f,
integer, dimension(*) kxig3d,
integer, dimension(*) ixig3d,
knot,
wige,
type (spsym_struct) wsmcomp,
type (stack_ply) stack,
dimension(nbr_gpmp,nspmd+1) cputime_mp_glob,
dimension(taille) cputime_mp,
integer, dimension(7,taille) tab_ump,
integer, dimension(nummat) poin_ump,
integer, dimension(*) sol2sph_typ,
integer irunn_bis,
integer, dimension(*) addcsrect,
integer, dimension(*) iad_frnor,
integer, dimension(*) fr_nor,
integer, dimension(*) procnor,
integer, dimension(*) iad_fredg,
integer, dimension(*) fr_edg,
type (drape_), dimension(numelc_drape) drape_sh4n,
type (drape_), dimension(numeltg_drape) drape_sh3n,
tab_mat,
integer, dimension(*) nativ0_sms,
type(multi_fvm_struct) multi_fvm,
integer, dimension(*) segquadfr,
ms_2d,
type(h3d_database) h3d_data,
type(subset_), dimension(nsubs) subsets,
type(group_), dimension(ngrnod) igrnod,
type(group_), dimension(ngrbric) igrbric,
type(group_), dimension(ngrquad) igrquad,
type(group_), dimension(ngrshel) igrsh4n,
type(group_), dimension(ngrsh3n) igrsh3n,
type(group_), dimension(ngrtrus) igrtruss,
type(group_), dimension(ngrbeam) igrbeam,
type(group_), dimension(ngrspri) igrspring,
type(group_), dimension(ngrpart) igrpart,
type(surf_), dimension(nsurf) igrsurf,
forneqs,
type(nlocal_str_) nloc_dmg,
integer, dimension(numskw), intent(in) iskwp_l,
knotlocpc,
knotlocel,
type(pinch) pinch_data,
integer, dimension(*) tag_skins6,
type(t_ale_connectivity), intent(inout) ale_connectivity,
xcell,
xface,
integer, dimension(*), intent(in) ne_nercvois,
integer, dimension(*), intent(in) ne_nesdvois,
integer, dimension(*), intent(in) ne_lercvois,
integer, dimension(*), intent(in) ne_lesdvois,
integer, dimension(*) ibcscyc,
integer, dimension(*) lbcscyc,
type(monvol_struct_), dimension(nvolu), intent(inout) t_monvol,
integer, dimension(*), intent(in) id_global_vois,
integer, dimension(*), intent(in) face_vois,
type (dynain_database), intent(inout) dynain_data,
fcont_max,
type(t_ebcs_tab), intent(inout) ebcs_tab,
type(t_diffusion), intent(inout) diffusion,
integer, dimension(ninter+1) kloadpinter,
integer, dimension(ninter*nloadp_hyd) loadpinter,
dimension(ninter*nloadp_hyd), intent(in) dgaploadint,
type(drapeg_) drapeg,
type(user_windows_), intent(inout) user_windows,
type(output_), intent(inout) output,
type (interfaces_), intent(inout) interfaces,
type (dt_), intent(inout) dt,
type (loads_), intent(inout) loads,
type(python_), intent(inout) python,
dpl0cld,
vel0cld,
integer, intent(in) ndamp_vrel,
integer, dimension(ndamp_vrel), intent(in) id_damp_vrel,
integer, dimension(nspmd+2,ndamp_vrel), intent(in) fr_damp_vrel,
integer, intent(in) ndamp_vrel_rbyg,
type(names_and_titles_), intent(inout) names_and_titles,
type(unit_type_) unitab,
integer, intent(in) liflow,
integer, intent(in) lrflow,
type (glob_therm_), intent(inout) glob_therm,
type (pblast_), intent(inout) pblast,
type (rbe3_), intent(inout) rbe3,
type (rwall_), intent(inout) rwall )
Parameters
[in,out]names_and_titlesNAMES_AND_TITLES host the input deck names and titles for outputs
[in]liflowSize of IFLOW
[in]lrflowSize of RFLOW

Definition at line 565 of file resol.F.

648C-----------------------------------------------
649C M o d u l e s
650C-----------------------------------------------
651 USE ghost_shells_mod
652 USE connectivity_mod
653 USE nodal_arrays_mod
654 USE detach_node_mod
655 USE dsgraph_mod
656 USE error_mod
657 USE resolsav_mod
658 USE icontact_mod
659 USE remesh_mod
660 USE heat_mod
661 USE sms_mod
662 USE sms_pcg_proj
663 USE thk_mod
665 USE rigmat_mod
666 USE plyxfem_mod
667 USE threac_mod
668 USE thgrelem_mod
669 USE table_mod
671 USE aleflow_mod
672 USE rad2r_mod
673 USE imp_intbuf
674 USE message_mod
675 USE crackxfem_mod
677 USE i22edge_mod
678 USE cluster_mod
679 USE intbufdef_mod
680 USE xfem2vars_mod
681 USE stack_mod
682 USE alefvm_mod
683 USE i22tri_mod
684 USE fvbag_mod
685 USE mpi_tools_mod
686 USE alemuscl_mod
687 USE ecnd_mod
688 USE multi_fvm_mod
689 USE h3d_mod
690 USE pblast_mod
691 USE groupdef_mod
692 USE failwave_mod
694 USE mat_elem_mod
695 USE time_mod
696 USE pinchtype_mod
697 USE check_mod
700 USE aleanim_mod
701 USE dynlib_mod
703 USE drape_mod
704 USE sensor_mod
706 USE ebcs_mod
707 USE seatbelt_mod
708 USE diffusion_mod
709 USE segvar_mod
710 USE dtdc_mod
711 USE impbufdef_mod
714 USE shooting_node_mod
715 USE loads_mod
716 USE state_mod
718 USE ale_mod
719 USE output_mod
720 USE interfaces_mod
722 USE dt_mod
723 USE python_funct_mod
724 USE python_share_memory_mod
725 USE python_register_mod, ONLY : python_register
726 USE funct_python_update_elements_mod, ONLY : funct_python_update_elements
727 USE python_call_funct_cload_mod
728 USE python_monvol_mod , ONLY : python_monvol
729 USE outmax_mod
730 USE force_mod , ONLY : force
731 USE array_mod , ONLY : array_type
733 USE unitab_mod, ONLY : unit_type_
734 USE bcs_mod , ONLY : bcs
735 USE inter_sh_offset_mod , only:sh_offset_
736 USE offset_nproj_mod, only : offset_nproj
737 USE get_neighbour_surface_mod , only : get_neighbour_surface
738 USE spmd_mod , only : spmd_max,spmd_allreduce,spmd_barrier
739 USE skew_mod
740 USE elbufdef_mod
741 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
742 use init_global_frontier_monvol_mod , only : init_global_frontier_monvol
743 use init_monvol_omp_structure_mod , only : init_monvol_omp_structure
744 USE inivel_dt2_mod , only : inivel_dt2
745 USE inivel_start_mod , only : inivel_start
746 use glob_therm_mod
747 USE my_alloc_mod
748 USE sph_work_mod
749 USE spmd_xv_inter_type1_mod, only : spmd_xv_inter_type1
750 USE timer_mod
751 USE rbe3_mod
753 USE ams_work_mod
754 USE update_pon_mod
755 USE debug_mod
756 use inter_init_component_mod , only : inter_init_component
757 use damping_vref_compute_dampa_mod
758 use coupling_adapter_mod
759 use damping_funct_ini_mod , only : damping_funct_ini
760 USE viper_mod
761 USE bcs_nrf_mod , ONLY : bcs_nrf
762 USE rwall_mod
763 USE rwall_pen_mod, only : rgwal0_pen
764 use element_mod , only : nixs,nixq,nixc,nixt,nixp,nixr,nixtg
765 use resol_alloc_mod
766C-----------------------------------------------
767C I m p l i c i t T y p e s
768C-----------------------------------------------
769#include "implicit_f.inc"
770#include "comlock.inc"
771C-----------------------------------------------
772C G l o b a l P a r a m e t e r s
773C-----------------------------------------------
774#include "mvsiz_p.inc"
775C-----------------------------------------------
776C C o m m o n B l o c k s
777C-----------------------------------------------
778#include "macro.inc"
779#include "com01_c.inc"
780#include "com04_c.inc"
781#include "com06_c.inc"
782#include "com08_c.inc"
783#include "com09_c.inc"
784#include "intstamp_c.inc"
785#include "sphcom.inc"
786#include "param_c.inc"
787#include "scr02_c.inc"
788#include "scr03_c.inc"
789#include "scr05_c.inc"
790#include "scr06_c.inc"
791#include "scr07_c.inc"
792#include "scr11_c.inc"
793#include "scr12_c.inc"
794#include "scr14_c.inc"
795#include "scr16_c.inc"
796#include "scr17_c.inc"
797#include "scr18_c.inc"
798#include "scr23_c.inc"
799#include "units_c.inc"
800#include "stati_c.inc"
801#include "statr_c.inc"
802#include "cong2_c.inc"
803#include "task_c.inc"
804#include "parit_c.inc"
805#include "timeri_c.inc"
806#include "couple_c.inc"
807#include "rad2r_c.inc"
808#include "chara_c.inc"
809#include "lagmult.inc"
810#include "warn_c.inc"
811#include "impl1_c.inc"
812#include "fxbcom.inc"
813#include "eigcom.inc"
814#include "spmd_c.inc"
815#include "remesh_c.inc"
816#include "com_xfem1.inc"
817#include "tabsiz_c.inc"
818#include "sms_c.inc"
819#include "filescount_c.inc"
820#include "inter22.inc"
821#include "userlib.inc"
822#include "drape_c.inc"
823C-----------------------------------------------
824 COMMON /vglob/dmas,diner
825 my_real dmas,diner
826C-----------------------------------------------
827C D u m m y A r g u m e n t s
828C-----------------------------------------------
829 INTEGER ITASK
830 INTEGER ISKWN(LISKN,*), NETH(*),
831 . IPART(*),NOM_OPT(LNOPT1,*),IXS(*),
832 . IXQ(NIXQ,*), IXT(NIXT,*), IXP(NIXP,*),
833 . IXR(NIXR,*),IXTG(NIXTG,*), IXTG1(4,*),
834 . IFILL(NUMNOD,*), IMS(*), NPC(*), IBCL(*), IBFV(*),
835 . IDUM(*), LAS(*),IPARG(NPARG,*),
836 . ICONX(*), NPBY(NNPBY,*),
837 . LPBY(*),
838 . LRIVET(*), NSTRF(*), LJOINT(*), ILINK(*),
839 . LLINK(*), LINALE(*), NEFLSW(*), NNFLSW(*),
840 . NODPOR(*),ICUT(*) , INOISE(*),MONVOL(*),
841 . LACCELM(3,*),DD_IAD(NSPMD+1,*),
842 . IAD_RBY(*),FR_RBY(*),NNLINK(10,*),LNLINK(*),
843 . IAF(*),IGRV(*),
844 . KXX(NIXX,*),IXX(*),IEXLNK(NR2R,*),
845 . IFRAME(LISKN,*),KXSP(NISP,*),IXSP(*),NOD2SP(*),
846 . ISPCOND(NISPCOND,*),ISPSYM(NSPCOND,*),IBVEL(NBVELP,*),LBVEL(*),
847 . ISPHIO(NISPHIO,*),LPRTSPH(*),LONFSPH(*),LAGBUF(*),IBCSLAG(*),
848 . IACTIV(*),GJBUFI(LKJNI,*) ,IBMPC(*),NPBYL(NNPBY,*), LPBYL(*),
849 . NBRCVOIS(*),NBSDVOIS(*),LNRCVOIS(*),LNSDVOIS(*),
850 . NERCVOIS(*),NESDVOIS(*),LERCVOIS(*),LESDVOIS(*), NPORGEO(*),
851 . NPSEGCOM(*), LSEGCOM(*), IGEO(NPROPGI,*),
852 . IPM(NPROPMI,*),MADPRT(*), MADSH4(*), MADSH3(*), MADSOL(*),
853 . MADNOD(*),MADFAIL(*),
854 . IAD_RBY2(*),
855 . FR_RBY2(*),IAD_I2M(*),FR_I2M(*),ADDCNI2(*),PROCNI2(*),IADI2(*),
856 . FR_MV(*), IADMV2(*), FR_LL(*), FR_RL(*),
857 . IADCJ(*), FR_CJ(*),
858 . FR_SEC(*), IAD_SEC(4,*),
859 . IAD_CUT(NSPMD+2,*), FR_CUT(*), RG_CUT(*), NEWFRONT(*),
860 . FR_MAD(5,*), LNODPOR(*), FR_I18(*),
861 . FXBIPM(NBIPM,*),FXBNOD(*),FXBELM(*), FXBGRVI(*),
862 . EIGIPM(NEIPM,*), EIGIBUF(*), IFLOW(*), FASOLFR(*),
863 . DD_R2R(NSPMD+1,*), LGRAV(*), FR_LAGF(3,*), LLAGF(*),
864 . ICONTACT(*), SH4TREE(*), SH3TREE(*), IPADMESH(*),
865 . ISKWP(*), NSKWP(*), ISENSP(2,*), NSENSP(*), IACCP(*), NACCP(*),
866 . IPART_STATE(*),SH4TRIM(*), SH3TRIM(*),IRBYM(*) ,LNRBYM(*),
867 . ICODRBYM(*),IAD_RBYM(*),
868 . FR_RBYM(*),NOM_SECT(*), IBCR(*),IRBE2(*),LRBE2(*),
869 . IAD_RBE2(*),FR_RBE2(*),IADSDP_PXFEM(*),
870 . IADRCP_PXFEM(*),ICFIELD(*),LCFIELD(*),ILOADP(*),LLOADP(*),
871 . IADSDP_CRK(*),IADRCP_CRK(*),INOD_CRK(*),IEL_CRK(*),IADC_CRK(*),
872 . ADSKY_CRK(*),PROCNE_CRK(*),CNE_CRK(*),IBORDNODE(*),
873 . NODEDGE(*),IAD_EDGE(*),FR_EDGE(*),FR_NBEDGE(*),
874 . CRKNODIAD(*), LGAUGE(3,*), IGAUP(*), NGAUP(*),NODLEVXF(*),
875 . NODGLOBXFE(*),ELCUTC(2,*),NODENR(*),KXFENOD2ELC(*),
876 . ENRTAG(NUMNOD,*),KXIG3D(*),IXIG3D(*),
877 . NATIV0_SMS(*), SEGQUADFR(*),
878 . KLOADPINTER(NINTER+1) ,LOADPINTER(NINTER*NLOADP_HYD)
879 INTEGER IDATA(*), IBFTEMP(*), IBCV(*), IBFFLUX(*), WEIGHT_RM(*),
880 . ICODT_PLY(*), ISKEW_PLY(*),INOD_PXFEM(*),IEL_PXFEM(*),
881 . IADC_PXFEM(*),ADSKY_PXFEM(*),ICODE_PLY(*),MADCLNOD(*),
882 . PROCNE_PXFEM(*),
883 . IBUFSSG_IO(*),IBC_PLY(*),DD_R2R_ELEM(*),
884 . SPH2SOL(*), SOL2SPH(2,*), IRST(3,*), SOL2SPH_TYP(*),IRUNN_BIS,
885 . ADDCSRECT(*), IAD_FRNOR(*), FR_NOR(*), PROCNOR(*),
886 . IAD_FREDG(*), FR_EDG(*),TAG_SKINS6(*),IBCSCYC(*),LBCSCYC(*)
887 integer :: IPARI(NPARI,ninter)
888 INTEGER, DIMENSION(NUMSKW), INTENT(IN) :: ISKWP_L
889 INTEGER, DIMENSION(*), INTENT(in) :: ID_GLOBAL_VOIS,FACE_VOIS
890 my_real
891 . damp(*),
892 . pm(npropm,*),geo(npropg,*),
893 . bufmat(*) ,w(3,*) ,veul(*),fill(numnod,*),dfill(numnod,*),
894 . alph(*) ,wb(3,*) ,tf(*) ,forc(*) ,vel(*),
895 . fsav(nthvki,*) ,fzero(3,*),xlas(*) ,elbuf(*) ,
896 . rby(nrby,*),rivet(*),wa(*),
897 . fv(*) ,val2(*) ,phi(*),
898 . r(3,*) ,crflsw(*),flsw(*),
899 . uwa(*) ,partsav(*) ,
900 . dsave(3,*),asave(3,*),xcut(*) ,bufnois(*),
901 . accelm(llaccelm,*),
902 . tani(*),volmon(*),eani(*),agrv(*), thke(*), bufsf(*),af(*),
903 . secbuf(*),secfcum(7,numnod,nsect),lambda(*),
904 . fr_wave(*),parts0(*),bufgeo(*),
905 . spbuf(nspbuf,*),xframe(nxframe,*),
906 . wasph(*),w16(*),vsphio(*),fbvel(*),dampr(nrdamp,*),
907 . rdata(*),pv(*),fsavd(nthvki,*),gjbufr(lkjnr,*),rbmpc(*),
908 . sphveln(*),rbyl(nrby,*), msnf(*),
909 . fxbrpm(*), fxbmod(*), fxbglm(*), fxbcpm(*), fxbcps(*),
910 . fxblm(*), fxbfls(*), fxbdls(*), fxbdep(*), fxbvit(*),
911 . fxbacc(*), fxbsig(*), fxbgrvr(*), eigrpm(nerpm,*),
912 . dmsph(*),knot(*),wige(*),ms_2d(*),
913 . knotlocpc(*),knotlocel(*),xcell(*),xface(*),fcont_max(3,*)
914 my_real
915 . rflow(*), rcontact(*),
916 . padmesh(*), msc(*), mstg(*), inc(*) , intg(*), ptg(3,*),
917 . acontact(*), pcontact(*), factiv(*),
918 . mscnd(*), incnd(*), rbym(*), fbfflux(*),
919 . fconv(*), fbftemp(*), ms_ply(*), zi_ply(*), admsms(*),
920 . mcpc(*), mcptg(*), dmelc(*), dmeltg(*), mssa(*), dmels(*),
921 . mstr(*), dmeltr(*), msp(*), dmelp(*), msrt(*), dmelrt(*),
922 . fradia(*), res_sms(*), phie(*),msf(*),
923 . cfield(*),msz2(*), diag_sms(*),loadp(*), dmint2(*),por(*),
924 . gauge(llgauge,*),wagap(2,*),rthbuf(*),forneqs(3,*),
925 . dpl0cld(*),vel0cld(*)
926 my_real , INTENT(IN) :: dgaploadint(ninter*nloadp_hyd)
927 TYPE(timer_) :: TIMERS
928 TYPE(connectivity_), INTENT(INOUT) :: ELEMENT
929 TYPE(NODAL_ARRAYS_), INTENT(INOUT) :: NODES
930 TYPE (CLUSTER_) ,DIMENSION(*) :: CLUSTER
931 TYPE(PRGRAPH) :: GRAPHE(*)
932 TYPE(TTABLE) :: TABLE(*)
933 TYPE(ELBUF_STRUCT_),DIMENSION(NGROUP) :: ELBUF_TAB
934 TYPE(ELBUF_STRUCT_),DIMENSION(:),ALLOCATABLE :: ELBUF_IMP
935 TYPE(ELBUF_STRUCT_),DIMENSION(NGROUP,NXEL) :: XFEM_TAB
936 TYPE spsym_struct
937 my_real, DIMENSION(:) , POINTER :: buf
938 END TYPE spsym_struct
939 TYPE (SPSYM_STRUCT) :: XSPSYM,VSPSYM,WSMCOMP
940 TYPE (STACK_PLY) :: STACK
941 TYPE (MPI_MIN_REAL_STRUCT) :: MPI_BUF
942 TYPE(UNIT_TYPE_) :: UNITAB !structure containing units conversion ratios
943 INTEGER MIN_TAB(4)
944 my_real :: dt2r
945 TYPE(coupling_type), intent(inout) :: coupling
946C
947C Mat + Prop timers
948 INTEGER, DIMENSION(NUMMAT) :: POIN_UMP
949 my_real, DIMENSION(NBR_GPMP,NSPMD+1) :: cputime_mp_glob
950 my_real, DIMENSION(TAILLE) :: cputime_mp
951 INTEGER, DIMENSION(7,TAILLE) :: TAB_UMP
952 my_real tab_mat(ngroup)
953 TYPE(MULTI_FVM_STRUCT) :: MULTI_FVM
954 TYPE(H3D_DATABASE) :: H3D_DATA
955 TYPE (FAILWAVE_STR_) :: FAILWAVE
956!
957 TYPE(SUBSET_) ,DIMENSION(NSUBS) :: SUBSETS
958 TYPE(GROUP_) ,DIMENSION(NGRNOD) :: IGRNOD
959 TYPE(GROUP_) ,DIMENSION(NGRBRIC) :: IGRBRIC
960 TYPE(GROUP_) ,DIMENSION(NGRQUAD) :: IGRQUAD
961 TYPE(GROUP_) ,DIMENSION(NGRSHEL) :: IGRSH4N
962 TYPE(GROUP_) ,DIMENSION(NGRSH3N) :: IGRSH3N
963 TYPE(GROUP_) ,DIMENSION(NGRTRUS) :: IGRTRUSS
964 TYPE(GROUP_) ,DIMENSION(NGRBEAM) :: IGRBEAM
965 TYPE(GROUP_) ,DIMENSION(NGRSPRI) :: IGRSPRING
966 TYPE(GROUP_) ,DIMENSION(NGRPART) :: IGRPART
967 TYPE(SURF_) ,DIMENSION(NSURF) :: IGRSURF
968c
969 TYPE(NLOCAL_STR_) :: NLOC_DMG
970 TYPE(PINCH) :: PINCH_DATA
971 TYPE(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
972 INTEGER, INTENT(IN) :: NE_NERCVOIS(*), NE_NESDVOIS(*), NE_LERCVOIS(*), NE_LESDVOIS(*)
973 TYPE(MONVOL_STRUCT_), DIMENSION(NVOLU), INTENT(INOUT) :: T_MONVOL
974 TYPE (DRAPE_) :: DRAPE_SH4N(NUMELC_DRAPE) , DRAPE_SH3N(NUMELTG_DRAPE)
975 TYPE(DRAPEG_) :: DRAPEG
976 TYPE (SENSORS_) ,INTENT(INOUT) :: SENSORS
977 TYPE(t_ebcs_tab) ,INTENT(INOUT) :: EBCS_TAB
978 TYPE(T_DIFFUSION) ,INTENT(INOUT) :: DIFFUSION
979 TYPE(t_segvar) :: SEGVAR
980 TYPE(inter_struct_type), DIMENSION(:), ALLOCATABLE :: INTER_STRUCT ! structure for interface
981 TYPE(sorting_comm_type), DIMENSION(:), ALLOCATABLE :: SORT_COMM ! structure for interface sorting comm
982 TYPE (LOADS_) ,INTENT(INOUT) :: LOADS
983 TYPE (DYNAIN_DATABASE), INTENT(INOUT) :: DYNAIN_DATA
984 TYPE(USER_WINDOWS_),INTENT(INOUT) :: USER_WINDOWS
985 TYPE(OUTPUT_),INTENT(INOUT) :: OUTPUT
986 TYPE (INTERFACES_) ,INTENT(INOUT) :: INTERFACES
987 TYPE (DT_) ,INTENT(INOUT) :: DT
988 TYPE(MAT_ELEM_) ,INTENT(INOUT) :: MAT_ELEM
989 TYPE(PYTHON_) ,INTENT(INOUT) :: PYTHON
990 TYPE(NAMES_AND_TITLES_),INTENT(INOUT) :: NAMES_AND_TITLES !< NAMES_AND_TITLES host the input deck names and titles for outputs
991 type (glob_therm_) ,intent(inout) :: glob_therm
992 type (PBLAST_) ,intent(inout) :: PBLAST
993 type (rbe3_) ,intent(inout) :: RBE3
994 type (rwall_) ,intent(inout) :: RWALL
995C
996 INTEGER ,INTENT(IN) :: NDAMP_VREL,NDAMP_VREL_RBYG
997 INTEGER ,INTENT(IN) :: ID_DAMP_VREL(NDAMP_VREL),FR_DAMP_VREL(NSPMD+2,NDAMP_VREL)
998 TYPE(SKEW_),INTENT(INOUT) :: SKEWS
999 INTEGER, INTENT(IN) :: LIFLOW !< Size of IFLOW
1000 INTEGER, INTENT(IN) :: LRFLOW !< Size of RFLOW
1001C-----------------------------------------------
1002C L o c a l V a r i a b l e s
1003C-----------------------------------------------
1004 LOGICAL LOUT
1005 CHARACTER FILNAM*100
1006 INTEGER NODFT, NODLT, I,J, N,
1007 . K1, K2, K3, K4, K5, K6, K7, K8, K9, K10, K11, K, ISK, KK1,
1008 . N0, N1, N2, NN, NNOD, NSENSOR,
1009 . ISYNC, TWO_INTS(2),
1010 . NELTST,ITYPTST,NWAFT, NBNCL, NBIKL,
1011 . NBNODL, NBNODLR,GREFTSK,GRELTSK,
1012 . ISTOP, NFIA, NFEA, NFOA, NDMA, NDIN,
1013 . NFNCA, NFTCA,NDMA2, NFNCA2, NFTCA2,
1014 . L1,L2,L3,LL1,LL2,LL3,NFT2,LISENDP_PXFEM,
1015 . LIRECVP_PXFEM,NDAMA2,FLG_KJ2,NCONT,BID,K12,IVAD,IAD_GREL,
1016 . FLG_KJ2_RAZ,I_EXCH_FLG_RAZ
1017 INTEGER :: LISENDP_CRK,LIRECVP_CRK
1018 INTEGER :: I13A,I13B,I13C,I13D,I13E,I13F,I13G,I13H,I13I
1019 INTEGER :: I15A,I15B,I15C,I15D,I15E,I15F,I15G,I15H,I15I,I15J,I15K
1020 INTEGER :: I15ATH,I35ATH
1021 INTEGER :: I87A,I87B,I87C,I87D,I87E,I87F,I87G,I87H,I87I,I87J,I87K,
1022 . I87L,I87M,I87N,IMSCH,IAD1B,IAD1,IAD2,I2MSCH, ISMSCH, ONOFP
1023 INTEGER CPLXIT, ADRNOD, ONOF, ONFELT, ICH,IFLGADM, MADENDREQUEST
1024 CHARACTER*13 CDUM
1025 INTEGER IDUM1, DIM6, DIM_EXCH
1026
1027 my_real
1028 . rdum1,maduf,rbuf(10)
1029 INTEGER LLT1,IWIOUT,IWIOUT_RESULT
1030 INTEGER KSPH1,KSPH21,KSPH22,KSPH23,
1031 . KSPACTIV,KSP2SORT,NELTSA,ITYPTSA,IDTNOD
1032 INTEGER NEGMAS
1033 INTEGER :: LENGTH
1034 INTEGER NBINTC, LENR, LENS, LENI, SIZI, ISIZXV ,ILENXV,
1035 . I2SIZE, LSEND1, LRECV1, LSEND2, LRECV2, NPARTL,
1036 . ISLEN7, IRLEN7, ISLEN11, IRLEN11, LISENDP, LIRECVP,
1037 . ISLEN17, IRLEN17,IRLEN7T,ISLEN7T,LINDIDEL,LBUFIDEL,LBUFSEGLO,
1038 . ISLEN20, IRLEN20, ISLEN20T, IRLEN20T, NBINT20,
1039 . ISLEN20E, IRLEN20E,LAG_SEC,LENS1,LENR1,INT18KINE,
1040 . NRBYKIN_L, INT24USE, NELEML,I24MAXNSNE,INT24E2EUSE,NHIER_RBY
1041 INTEGER :: INT7ITIED
1042 INTEGER, DIMENSION(:,:),ALLOCATABLE ::
1043 . ISENDTO,IRCVFROM,FR_NBCC,FR_NBCCI2,FR_NBCC1
1044 INTEGER, DIMENSION(:),ALLOCATABLE ::
1045 . INTLIST,NISKYFI,ISENDP,IRECVP, IRBKIN_L,
1046 . IPARTL, NISKYFIE, TAGEL,
1047 . ISENDP_PXFEM,IRECVP_PXFEM,COUNT_REMSLV,COUNT_REMSLVE,
1048 . INTLIST25
1049 INTEGER, DIMENSION(:), ALLOCATABLE, TARGET :: CNEL,ADDCNEL,ADDTMPL
1050 INTEGER, DIMENSION(:),ALLOCATABLE ::
1051 . ISENDP_CRK,IRECVP_CRK
1052 INTEGER NSPHACTG,SPH_IORD1
1053 INTEGER, DIMENSION(1), TARGET :: IMP_DUM
1054C----
1055 my_real,DIMENSION(:),ALLOCATABLE :: dretri, xsec,qfricint,icodr0,icodt0,
1056 . stifn_tmp,stifr_tmp
1057 SAVE isendto, ircvfrom, intlist, fr_nbcc, niskyfi, fr_nbcci2,
1058 . nbintc, i2size, islen7 ,irlen7 ,islen11 ,irlen11,
1059 . ilenxv, isizxv, islen17, irlen17,irlen7t,islen7t,
1060 . islen20, irlen20, islen20t, irlen20t, nbint20, niskyfie,
1061 . islen20e, irlen20e, nrbykin_l, irbkin_l, qfricint,
1062 . intlist25,nhier_rby
1063 SAVE dretri, xsec, lisendp, lirecvp, isendp, irecvp,
1064 . cnel, addcnel, addtmpl, ipartl, npartl, lindidel, lbufidel,
1065 . lbufseglo
1066 my_real dt2t,
1067 . dt2save, mas, bb, wfexc,trest,dtrest,
1068 . dmast, dinert, factb,dampt,
1069 . xsens(12,sensors%NSENSOR),dampa3
1070 my_real fxbmvn(lencp),fxbsv(lenlm),fxbse(15*nfxbody),
1071 . fxbmcd(lenmcd),fxbfp(lenvar),fxbfc(lenlm),fxbefw(nfxbody),
1072 . fxbedp(nfxbody),fxbgrp(lenvar),fxbgrw(nfxbody)
1073 my_real, DIMENSION(:,:), ALLOCATABLE :: dxancg
1074 my_real dt2prev, dtmin1_save, target_dt
1075 SAVE imsch, i2msch, ismsch
1076 SAVE dt2prev
1077 SAVE nfia, nfea, nfoa, ndma, ndin, ndma2,
1078 . i13a,i13b,i13c,i13d,i13e,i13f,i13g,i13h,i13i,
1079 . i15a,i15b,i15c,i15d,i15e,i15f,i15g,i15h,i15i,i15j,i15k,
1080 . i87a,i87b,i87c,i87d,i87e,i87f,i87g,i87h,i87i,i87j,i87k,i87l,
1081 . i87m,i87n,i15ath,i35ath,lag_sec,nft2,ndama2
1082 INTEGER NDDL0,NNZK0,LENQMV,NV46,NUM_IMP(NINTER),NINT7,NT_IMP,
1083 . NNDL,IT,NMC2,LI13,DIRUL(NFXVEL),NUM_IMP1(NINTER),
1084 . FR_RBE2M(SFR_RBE2),R2SIZE,
1085 . NUM_IMPL(NINTER,NTHREAD), I_OPT_STOK(NINTER),IT_T,NTMP
1086 INTEGER IER1,NDS,IBUCK,NMRBE2,NTHOLD
1087 SAVE nmrbe2,r2size,nint7
1088 INTEGER, DIMENSION(:),POINTER :: NS_IMP,NE_IMP,IND_IMP
1089 TYPE (IMPBUF_STRUCT_), TARGET :: IMPBUF_TAB
1090 my_real, DIMENSION(:) , POINTER :: fext_imp,r_imp
1091 my_real ttmp,dmcp(numgeo)
1092 data ttmp /0.0/
1093 INTEGER LWIBEM, LWRBEM, IERROR, IERROR2, INTER_ERRORS
1094 INTEGER, DIMENSION(:), ALLOCATABLE :: WIBEM
1095 my_real, DIMENSION(:), ALLOCATABLE :: wrbem
1096 SAVE lwibem, lwrbem, wibem, wrbem
1097 INTEGER NKCOND, NDDLG, NRP, NCP, NKCOND_INI, NT_IMP_OLD
1098 INTEGER LWIFLOW, LWRFLOW
1099 INTEGER, DIMENSION(:), ALLOCATABLE :: WIFLOW
1100 my_real, DIMENSION(:), ALLOCATABLE :: wrflow
1101 SAVE lwiflow, lwrflow, wiflow, wrflow
1102 INTEGER SIZ, R2R_ON
1103 INTEGER, DIMENSION(:), ALLOCATABLE :: CDDLP
1104#if defined(MUMPS5)
1105 TYPE(DMUMPS_STRUC) MUMPS_PAR
1106#endif
1107 INTEGER IFVMESH
1108C
1109 my_real, DIMENSION(:,:), ALLOCATABLE :: madclfrecv,partsav2
1110C
1111 INTEGER MADYMO_DEL,MADYMO_DEL_GLOBAL
1112 INTEGER, DIMENSION(:), ALLOCATABLE ::MAD_TAG_SOL, MAD_TAG_SH,MAD_TAG_TG,MAD_FAIL_ELEMENTS
1113C
1114C OpenMP specific
1115 INTEGER ITSK, NODFTSK, NODLTSK, NUMNTSK, NDTSK, NDTSKR, IPMTSK,
1116 . PARTFTSK, PARTLTSK, NWAFTSK, I16TSK,
1117 . NELTSTT, ITYPTSTT,IGMTSK,NGROUC, NGROUNC,
1118 . NSNFIOLD(NSPMD),
1119 . KINDRBY(NRBYKIN), NINDEX1(NINTER), NINDEX2(NINTER),
1120 . NINDEX3(NINTER), NINDEX4(NINTER), KINDRBYM(NRBYM),
1121 . OMP_GET_THREAD_NUM,IADISK,RNUM_SIZ,RNS,NINDEXP,NI,LENC,ITHOUT
1122 integer :: omp_address
1123 INTEGER, DIMENSION(:),ALLOCATABLE :: IGROUC
1124 INTEGER, DIMENSION(:),ALLOCATABLE :: IGROUNC
1125 EXTERNAL omp_get_thread_num
1126 INTEGER, DIMENSION(:), ALLOCATABLE :: IBUFIDEL, INDIDEL,RENUM,IBUFSEGLO,INDSEGLO
1127 my_real dt2tt,d_tstart,d_tstop
1128 my_real xslv(18,ninter),xmsr(12,ninter),
1129 . vslv(6,ninter),vmsr(6,ninter), size_t(ninter)
1130C End OpenMP specific
1131C Parith/ON specific
1132 INTEGER FR_RBY6(SFR_RBY)
1133 double precision
1134 . frl6(15,6,nrlink),fnl6(15,6,nlink),
1135 . frwl6(7,6,nrwall),rbym6(6,6,nrbym),sphg_f6(4,6,nbgauge)
1136 DOUBLE PRECISION,DIMENSION(:,:,:),ALLOCATABLE :: RBY6
1137 my_real frl(4,nrlink), fnl(4,nlink)
1138 INTEGER NGRTH,NELEM
1139 INTEGER RESTSIZE
1140C End Parith/ON specific
1141 INTEGER FR_SMS(NSPMD+1), FR_RMS(NSPMD+1)
1142 INTEGER, POINTER, DIMENSION(:) :: PTR_SMS
1143 INTEGER NMT0
1144 INTEGER, DIMENSION(:), ALLOCATABLE :: IKINE
1145 my_real, DIMENSION(:), ALLOCATABLE :: stk_sn,stk_sr,fcluster,mcluster
1146 my_real, DIMENSION(:), ALLOCATABLE :: noda_fext
1147 INTEGER LNZM
1148 INTEGER, DIMENSION(:),ALLOCATABLE :: INT18ADD,TAGPENE
1149 INTEGER, DIMENSION(:),ALLOCATABLE :: IDAMP_RDOF_TAB
1150 my_real, DIMENSION(:,:),ALLOCATABLE :: mtf, cand_sav
1151 INTEGER FLG_DTNODAMP,FLG_DAMP_FUNCT
1152 my_real dt3
1153 INTEGER IGROUPFLG(2)
1154 INTEGER, DIMENSION(:),ALLOCATABLE :: IGROUPC,IGROUPTG,IGROUPS
1155 INTEGER IOLDSECT
1156 ! TETRA4 : SMOOTH FINITE ELEMENT FORMULATIONS
1157 my_real, DIMENSION(:),ALLOCATABLE :: sfem_nodvar !lagrange framework
1158 my_real, DIMENSION(:),ALLOCATABLE :: sfem_nodvar_ale !ALE framework
1159 INTEGER S_SFEM_NODVAR ! same size for ALE and Lagrange frameworks
1160C-----------------------------------------------------------------------------------
1161C Parith/OFF + AMS
1162 INTEGER, DIMENSION(:),ALLOCATABLE :: UNCOMP_FR,FR_LOC,
1163 * UNCOMP_FRI2M,FR_LOCI2M
1164 INTEGER NB_FR,NB_FRI2M
1165C-----------------------------------------------------------------------------------
1166C ADDITIVE MANUFACTURING
1167 my_real, DIMENSION(:), ALLOCATABLE :: mcp_off
1168C-----------------------------------------------------------------------------------
1169C TEMPI I24
1170 INTEGER SFR_I24
1171 INTEGER, DIMENSION(:), ALLOCATABLE :: FR_I24
1172 INTEGER, DIMENSION(:,:), ALLOCATABLE :: IAD_I24
1173 my_real
1174 . delta_pmax_gap(ninter)
1175 INTEGER DELTA_PMAX_GAP_NODE(NINTER)
1176 INTEGER S_LOADPINTER, NPRESLOAD
1177 INTEGER, DIMENSION(:,:), ALLOCATABLE :: TAGNCONT
1178 INTEGER, DIMENSION(:), ALLOCATABLE :: LOADP_HYD_INTER, LOADP_TAGDEL
1179C-----------------------------------------------------------------------------------
1180C Debug CAND INTERFACE TYPE25
1181 INTEGER,DIMENSION(:),ALLOCATABLE :: NB25_CANDT
1182 INTEGER,DIMENSION(:),ALLOCATABLE :: NB25_IMPCT
1183 INTEGER,DIMENSION(:),ALLOCATABLE :: NB25_DST1
1184 INTEGER,DIMENSION(:),ALLOCATABLE :: NB25_DST2
1185 SAVE nb25_candt,nb25_impct,nb25_dst1,nb25_dst2
1186C-----------------------------------------------------------------------------------
1187C Communication INTERFACE TYPE25
1188 INTEGER SFR_I25
1189 INTEGER, DIMENSION(:), ALLOCATABLE :: FR_I25
1190 INTEGER, DIMENSION(:,:), ALLOCATABLE :: IAD_I25
1191C Assembling normals INTERFACE TYPE25
1192 REAL(kind=4), dimension(:,:), ALLOCATABLE :: fskyn25
1193C time varying gap T25
1194 my_real maxdgap(ninter)
1195 INTEGER :: FLAG_SLIPRING_UPDATE,FLAG_RETRACTOR_UPDATE
1196C-----------------------------------------------------------------------------------
1197C Multidomains
1198 INTEGER IDEL7NOK_R2R,IDEL7NOK_SAV,NUMSPH_GLO_R2R,FLG_SPHINOUT_R2R
1199 INTEGER, DIMENSION(:),ALLOCATABLE :: OFF_SPH_R2R
1200C-----------------------------------------------------------------------------------
1201C Sensors inter
1202 INTEGER, ALLOCATABLE, DIMENSION(:,:) :: ISENSINT
1203 INTEGER NISUBMAX
1204
1205 INTEGER, ALLOCATABLE, DIMENSION(:) :: ICONTACT_OLD
1206C-----------------------------------------------------------------------------------
1207 my_real
1208 . , DIMENSION(:),ALLOCATABLE :: waspsym
1209C AMS
1210 INTEGER LSKYI_SMS_NEW
1211 INTEGER, ALLOCATABLE, DIMENSION(:,:) :: T2MAIN_SMS
1212 my_real, DIMENSION(:),ALLOCATABLE :: t2fac_sms
1213 my_real, DIMENSION(:), ALLOCATABLE :: mskyi_fi_sms
1214 INTEGER, DIMENSION(:),ALLOCATABLE :: LIST_SMS
1215 INTEGER, DIMENSION(:),ALLOCATABLE :: LIST_RMS
1216 my_real, DIMENSION(:,:), ALLOCATABLE :: cjwork
1217 my_real, DIMENSION(:,:), ALLOCATABLE :: frea
1218 INTEGER, DIMENSION(:), ALLOCATABLE :: IRWL_WORK
1219 my_real, DIMENSION(:,:), ALLOCATABLE :: sms_vfi
1220 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MW6
1221 integer sz_mw6
1222C-----------------------------------------------------------------------------------
1223C FVMBAG: switch to UP
1224 INTEGER :: NFVBAG0
1225 LOGICAL :: CHECK_NPOLH
1226C---ADMESH + TRIMMING----
1227 INTEGER, DIMENSION(:),ALLOCATABLE :: TAGTRIMC,TAGTRIMTG
1228 INTEGER :: IFTHE, ICONDN, IDX_FTHE, IDX_CONDN, IDX_PINCH,MSTOP_DT_THERM
1229C---Nitsche Method----
1230 INTEGER NFACNIT
1231 my_real, DIMENSION(:,:),ALLOCATABLE :: stressmean
1232 my_real, DIMENSION(:),ALLOCATABLE :: forneqsky
1233 INTEGER :: NUMSKW_L,NUMSKW_L_SEND,NODFTSK_2,NODLTSK_2
1234 INTEGER, DIMENSION(NUMSKW) :: ISKWP_L_SEND
1235 INTEGER, DIMENSION(NSPMD) :: RECVCOUNT
1236 INTEGER, DIMENSION(NTHREAD) :: NODFT_ASSPAR, NODLT_ASSPAR
1237 INTEGER NODFT_NL,NODLT_NL
1238 REAL(kind=8) :: secs
1239 REAL(kind=8) :: tt_double
1240 my_real
1241 . dtnod_nlocal,t_kin
1242 INTEGER, DIMENSION(:),ALLOCATABLE ::IBUFPDEL, NINDEXPDEL
1243 DOUBLE PRECISION :: argin,argout
1244 DOUBLE PRECISION, DIMENSION(:,:,:),ALLOCATABLE :: RBY6_C
1245C----------------------------------------------------------------------------------
1246C IMPVEL/FGEO
1247 INTEGER FXVEL_FGEO
1248C----------------------------------------------------------------------------------
1249C /DAMP/VREL
1250 INTEGER SIZE_RBY6_C,FL_VREL
1251 my_real damp_a(3)
1252C----------------------------------------------------------------------------------
1253C /VIPER/ON
1254 type(viper_coupling_) :: VIPER
1255C----------------------------------------------------------------------------------
1256C Type2 output - PCONT2
1257 INTEGER :: SZ_NPCONT2
1258 my_real, DIMENSION(:,:),ALLOCATABLE :: npcont2
1259C----------------------------------------------------------------------------------
1260! contact w/ offset
1261 my_real, TARGET, DIMENSION(:,:),ALLOCATABLE :: xyz
1262 my_real, POINTER, DIMENSION(:,:), contiguous :: ptrx, ptrx_offset
1263 TYPE(sh_offset_) :: SH_OFFSET_TAB
1264C-----------------------------------------------------------------------------------
1265 INTEGER IFLAG, COMPTREAC ! Flag for computing reaction forces
1266! 1. Storing Freac=Fint+Fext+Fcont
1267! 2. Add acceleration fields (gravity, etc) to Freac
1268! Downloading velocities (cf so-called main/secnd formulation)
1269! In RD, accelerations are computed so that the resulting velocity after integration
1270! will correspond to the expected velocity
1271! because sortie_main (output) is done before integration of accelerations
1272! 3. Finalize Freac=MS*A-Freac
1273C----------------------------------------------------------------------------------
1274! -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*
1275! NSKWP : integer ; dimension = NSPMD
1276! number of skew per processor
1277! ISKWP : integer ; dimension=NUMSKW+1
1278! gives the ID processir of the current i SKEW
1279! ISKWP < 0 --> the SKEW is local on a processor
1280! and we don't need to communicate the data
1281! ISKWP > 0 --> the SKEW is global and the data must be
1282! communicated
1283! NUMSKW_L : integer
1284! number of local SKEW
1285! NUMSKW_L_SEND : integer
1286! number of sent SKEW
1287! ISKWP_L_SEND : integer ; dimension=NUMSKW_L_SEND
1288! index of sent SKEW
1289! RECVCOUNT : integer ; dimension=NSPMD
1290! number of received SKEW
1291! NODFT_ASSPAR : integer ; dimension=NTHREADS
1292! lower bound for asspar4 splitting
1293! NODLT_ASSPAR : integer ; dimension=NTHREADS
1294! upper bound for asspar4 splitting
1295! TT_DOUBLE : real(kind8)
1296! current time in double precision --> with simple precision version,
1297! the current time can be wrong (due to error's accumulation) if the
1298! number of cycle is huge AND the time step is small
1299! (ie. when NCYCLE > 300 000 and DT = 10^-7)
1300! -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*
1301 INTEGER :: STATE_H3D, STATE_ANIM
1302 LOGICAL :: BOOL_RESTART
1303 INTEGER :: NATIV_SMS_SIZ ! size of NATIV_SMS array
1304 INTEGER :: TEMP_SIZ ! size of TEMP
1305 TYPE(shooting_node_type) :: SHOOT_STRUCT
1306 INTEGER :: S_ELEM_STATE ! size of ELEM_STATE array
1307 LOGICAL, DIMENSION(:), ALLOCATABLE :: ELEM_STATE ! boolean : true if element is ON, false if element is OFF
1308 INTEGER :: SIZE_ADDCNEL ! size of addcnel array
1309 INTEGER :: SIZE_CNEL ! size of cnel array
1310 LOGICAL :: GLOBAL_ACTIVE_ALE_ELEMENT
1311 INTEGER :: SIZE_NPBY
1312 ! ----------
1313 LOGICAL :: NEED_COMM_INTER18 !< true if the mpi comm "exchange of remote XCELL data" is mandatory
1314 INTEGER :: NUMBER_INTER18 ! number of interface 18
1315 INTEGER, DIMENSION(NINTER) :: INTER18_LIST ! list of interface 18
1316 TYPE(array_type), DIMENSION(:), ALLOCATABLE :: XCELL_REMOTE ! remote data structure for interface 18
1317 ! ----------
1318 my_real, DIMENSION(:), ALLOCATABLE :: fsky_l
1319 LOGICAL, DIMENSION(NSPMD) :: NEED_COMM_INT25_SOLID_EROSION !< boolean, true if the proc needs to comm some values related to interface type 25 with solid erosion
1320 INTEGER :: COMM_INT25_SOLID_EROSION !< integer, sub-communicator related to interface type 25 with solid erosion
1321 INTEGER :: CHECK_NEIGH_FLAG,CHECK_NEIGH_FLAG_RES
1322 integer, dimension(nspmd+2) :: frontier_global_mv !< frontier fo monitored volume
1323 integer :: sporo
1324 ! Restart File Writing
1325 INTEGER STOP_OR_ADD_CYCLE !< Check if additional cycle must be done after restart at termination
1326 INTEGER, PARAMETER :: MAXFUNC = 100
1327 integer :: numnod_old,numnodm_old
1328 integer :: new_crack,nsect_offset
1329C-----------------------------------------------------------------------------------
1330C Err THK
1331C-----------------------------------------------------------------------------------
1332 my_real, DIMENSION(:), ALLOCATABLE :: thick_sh4
1333 my_real, DIMENSION(:), ALLOCATABLE :: thick_sh3
1334 my_real, DIMENSION(:), ALLOCATABLE :: thick_nod
1335 my_real, DIMENSION(:), ALLOCATABLE :: area_nod
1336 my_real, DIMENSION(:), ALLOCATABLE :: area_sh4
1337 my_real, DIMENSION(:), ALLOCATABLE :: area_sh3
1338C-----------------------------------------------------------------------------------
1339C admerr
1340C-----------------------------------------------------------------------------------
1341 my_real, DIMENSION(:), ALLOCATABLE :: admerr_thick_sh4
1342 my_real, DIMENSION(:), ALLOCATABLE :: admerr_thick_sh3
1343 my_real, DIMENSION(:), ALLOCATABLE :: admerr_thick_nod
1344 my_real, DIMENSION(:), ALLOCATABLE :: admerr_area_nod
1345 my_real, DIMENSION(:), ALLOCATABLE :: admerr_area_sh4
1346 my_real, DIMENSION(:), ALLOCATABLE :: admerr_area_sh3
1347C-----------------------------------------------------------------------------------
1348 type(SPH_WORK_) :: SPH_WORK !< working Areas for SPLISSV and SPHPREP
1349 type (ams_work_) :: ams_work !< Working areas for AMS
1350
1351 type(component_), dimension(:), allocatable :: component
1352C-----------------------------------------------------------------------------------
1353C coupling coupling
1354 logical :: ongoing
1355 double precision :: dt2max_coupling
1356C-----------------------------------------------------------------------------------
1357 call resol_alloc_phase1(rby6,dxancg,nb25_candt,nb25_impct,nb25_dst1,nb25_dst2,igrouc,igrounc,
1358 . interfaces,int18add,idamp_rdof_tab,icontact_old,
1359 . nrbykin,numnod,parasiz,ngroup,ninter,sicontact,nodes,
1360 . isendto,ircvfrom,intlist,intlist25,niskyfi,niskyfie,
1361 . count_remslv,count_remslve,fr_nbcc,fr_nbcci2,
1362 . dretri,xsec,nsect,nspmd,ispmd,ninter25, irbkin_l,fr_nbcc1)
1363
1364 interfaces%ninter = ninter
1365 interfaces%npari = npari
1366 element%shell%offset = numels + numelq
1367 bool_restart = .true.
1368 lout = ispmd==0
1369 state_h3d = 0
1370 state_anim = 0
1371 ninter22 = int22
1372 idamp_rdof_tab = 0
1373 flg_dtnodamp = 0
1374 flg_kj2 = 0
1375 i_exch_flg_raz = 0
1376 neltst = 0
1377 ityptst = 0
1378 dt2t = 0
1379 mstop_dt_therm = 0
1380C initialize int24 presence flag
1381 int24use = 0
1382 int24e2euse = 0
1383C-----------------------------------------------
1384C exit flag for MaDyMo coupling
1385 cplxit=0
1386 ilastanim=0
1387 ilasth3d=0
1388 ioldsect = -1
1389 ilastdynain=0
1390 nodft = 1
1391 nodlt = numnod
1392 nwaft = 1
1393 iwiout = 0
1394 lmpc = 0
1395 tt_double = tt
1396 lskyi_count = 0
1397 flag_slipring_update = 0
1398 flag_retractor_update = 0
1399 flg_dtnodamp = 0
1400 IF ((nodadt==1).AND.(idamp_rdof==ndamp .OR. ndamp>0 .OR. istat==3)) flg_dtnodamp = 1
1401 flg_damp_funct = 0
1402 IF (ndamp>0) THEN
1403 DO i=1,ndamp
1404 IF(nint(dampr(21,i))==4) flg_damp_funct=1
1405 END DO
1406 END IF
1407 nsensor = sensors%NSENSOR
1408 temp_siz = merge(numnod, 0, glob_therm%ITHERM_FE>0)
1409 size_rby6_c = merge(nrbykin, 0, ndamp_vrel_rbyg > 0)
1410 ALLOCATE(rby6_c(2,6,size_rby6_c))
1411 IF(ispmd==0) lmpc = sum(ibmpc(1:nummpc))
1412C----------------------------------------------
1413C I N I T I A L I S A T I O N S
1414C----------------------------------------------
1415 size_npby = snpby/nnpby
1416C -------------------------------------------------------------------
1417C User Libraries get the possibility to use GET_U_NOD_X & GET_U_NOD_V in user elements properties (Solids & Springs)
1418 getunod_nocom=0
1419C----------------------------------------------
1420C Allocations Phase1
1421C----------------------------------------------
1422 imsch = 0
1423 i2msch = 0
1424 dt2prev= zero
1425 lisendp_pxfem = 0 ; lirecvp_pxfem = 0
1426 lisendp_crk = 0 ; lirecvp_crk = 0
1427 pblast%PBLAST_DT%IDT = 0
1428 numsph_glo_r2r = 0
1429 flg_sphinout_r2r = 0
1430 call resol_alloc_phase2(element,nodes,iplyxfem,icrack3d,nspmd,lisendp, lirecvp,
1431 . lisendp_pxfem, lirecvp_pxfem, lisendp_crk, lirecvp_crk,
1432 . isendp_pxfem, irecvp_pxfem, isendp_crk, irecvp_crk, adsky_crk,inod_crk,
1433 . procne_crk,procne_pxfem,adsky_pxfem,inod_pxfem)
1434C----------------------------------------------------------
1435C Allocation of tables for /LOAD/PRESSURE
1436C-----------------------------------------------------------
1437 call resol_alloc_phase3(nloadp_hyd_inter,nintloadp,nloadp_hyd,iloadp,sizloadp,numnod,
1438 . loadp_hyd_inter,tagncont,ninter,
1439 . s_loadpinter,npresload,loadp_tagdel)
1440C----------------------------------------------------------
1441 ALLOCATE(interfaces%PARAMETERS%INTAREAN(merge(numnod, 0, interfaces%PARAMETERS%INTCAREA>0)))
1442C ! /TH/SURF output
1443 CALL resol_alloc_phase4(nsurf,output,th_surf_num_channel,nloadp,
1444 . nloadp_f,pblast,iloadp,sizloadp, cnel, addcnel,size_cnel,size_addcnel,
1445 . idel7ng,irad2r,alemuscl_param,alemuscl_buffer,pdel, addtmpl,tagel,
1446 . numnod,lcnel,numels,numelq,numelc,numelt,numelp,numelr,numeltg,
1447 . npart,partsav2,ipartl,elem_state,s_elem_state)
1448C
1449C Working arrays for thermal analysis
1450C
1451 call resol_alloc_phase5(glob_therm,numnod,ninter,nodadt,nthread,iparit,lsky,lskyi,
1452 . icodt0,icodr0,mcp_off,fthe,fthesky,qfricint,condn,condnsky,
1453 . ftheskyi,condnskyi,icondn,ifthe)
1454C
1455C ply xfem for composite shell
1456C
1457 call resol_alloc_phase6(intplyxfem,iplyxfem,nplymax,ply,plysky,iparit,nthread,
1458 . nplyxfe,anim_ply,vn_nod,irigid_mat,nrbym,
1459 . vrbym,vrrbym,arbym,arrbym,plyskyi,lskyi,lskypxfem)
1460
1461C ----------------------------------------------
1462C SIMPLIFIED ALE FORMULATION
1463C ----------------------------------------------
1464 call resol_alloc_phase7(ialelag,numnod,nthread,iparit,lsky,msnf,msf,
1465 . aflow,vflow,dflow,wflow,ffsky,ifoam,ifoam_cont)
1466C--------------------------------------------
1467C Adaptive Meshing
1468C--------------------------------------------
1469 CALL resol_alloc_phase8(nadmesh,numelc,numeltg,numnod,levelmax,iparit,istatcnd,anim_n,
1470 . h3d_data,iroddl,lsh4act,lsh4kin,psh4act,psh4kin,lsh3act,lsh3kin,
1472 . acnd,arcnd,stcnd,strcnd,stifr_tmp,stifn_tmp,nthread)
1473C--------------------------------------------
1474C Error estimation / not on Restart file.
1475C--------------------------------------------
1476 call resol_alloc_phase9(anim_ce,numelc,numeltg,numnod,iadmerrt,h3d_data,
1477 . inter_ithknod,err_thk_sh4,err_thk_sh3,thksh4,thksh3,thknod,
1478 . area_sh4,area_sh3,area_nod,thick_sh4,thick_sh3,thick_nod,
1479 . admerr_area_sh4,admerr_area_sh3,admerr_area_nod,
1480 . admerr_thick_sh4,admerr_thick_sh3,admerr_thick_nod)
1481
1482C----------------------------------------------------------
1483C SELECTIVE MASS SCALING
1484C----------------------------------------------------------
1485C for chkpt :: ISMSCH=1
1486 ismsch =1
1487 call resol_alloc_phase10(ngroup,idtmins, idtmins_int,tagnod_sms,nativ_sms,tagprt_sms,tagrel_sms,indx1_sms,indx2_sms,
1490 . x_sms,p_sms,y_sms,z_sms,prec_sms,xmom_sms,prec_sms3,diag_sms3,
1491 . t2main_sms,t2fac_sms,fr_rms,fr_sms,ptr_sms,nspmd,nintstamp,
1493 . mskyi_sms,iskyi_sms,jadi_sms,jdii_sms,lti_sms,lskyi_sms,
1494 . npart,numelc,numels,numels10,numelt,numelp,numelr,numeltg,numnod)
1495C------------------------------------------
1496 IF (ireac == 1 ) THEN
1497 ALLOCATE(nodreac(numnod))
1498 ELSE
1499 ALLOCATE(nodreac(0))
1500 ENDIF
1501 IF (igrelem == 1) THEN
1502 ngpe = nthpart
1503 ngrth = nthpart
1504 nelem=numelsg+3*numels16g+numsphg+numelcg+numeltgg+numelqg+numeltg+numelpg+2*numelrg
1505 ELSE
1506 ngpe = 0
1507 ngrth = 0
1508 nelem = 0
1509 ENDIF
1510C
1511 IF (igrelem == 1 ) THEN
1512 ALLOCATE(grth(nelem+ngrth+1))
1513 ALLOCATE(igrth(nelem+1))
1514 ELSE
1515 ALLOCATE(grth(1))
1516 ALLOCATE(igrth(1))
1517 ENDIF
1518 igrth = 0
1519 grth = 0
1520 dxancg = zero
1521C------------------------------------------
1522C ALLOCATION IGROUPC AND IGROUPTG
1523C TABLE GIVING GROUP NUMBER FOR SHELLS
1524C ALLOCATION IGROUPS FOR BRICKS
1525C------------------------------------------
1526 igroupflg(1:2)=0
1527 IF(nvolu > 0) igroupflg(1) = 1
1528 DO i=1,nummat
1529 IF(ipm(2,i)/=19.AND.ipm(2,i)/=58) cycle
1530 IF(ipm(4,i) >= 4) igroupflg(1)=1
1531 ENDDO
1532 IF(igroupflg(1) == 1) THEN
1533 ALLOCATE(igroupc(numelc))
1534 ALLOCATE(igrouptg(numeltg))
1535 ELSE
1536 ALLOCATE(igroupc(0))
1537 ALLOCATE(igrouptg(0))
1538 ENDIF
1539 igroupflg(2)=1
1540 ALLOCATE(igroups(numels))
1541C-----------------------------------------------
1542C /IMPDISP/FGEO
1543 fxvel_fgeo = 0
1544C-----------------------------------------------
1545C End Allocations Phase 1
1546C-----------------------------------------------
1547 !initialisation timer resol
1548 IF (imon>0) THEN
1549 CALL startime(timers,timer_resol)
1550 ENDIF
1551C INTERFACES RENUM
1552 rnum_siz=numnod
1553 ALLOCATE(renum(rnum_siz))
1554C-----------------------------------------------
1555C Sensor Inter
1556C-----------------------------------------------
1557 nisubmax = 0
1558 DO i=1,ninter
1559 nisubmax = max(nisubmax,ipari(36,i))
1560 ENDDO
1561 ALLOCATE(isensint(nisubmax+1,ninter))
1562 isensint(1:nisubmax+1,1:ninter) = 0
1563C-----------------------------------------------
1564 idel7nok_sav=idel7nok
1565C-----------------------------------------------
1566 CALL trace_in(6,0,zero)
1567C-----------------------------------------------
1568C Initialisations
1569C-----------------------------------------------
1570
1571 l1 = 1+nixs*numels + nsvois*nixs
1572 l2 = l1+6*numels10
1573 l3 = l2+12*numels20
1574 ll1 = 1+8*numels
1575 ll2 = ll1+6*numels10
1576 ll3 = ll2+12*numels20
1577 IF(nadmesh/=0.AND.idel7ng>=1)THEN
1578 ALLOCATE(tagtrimc(numelc))
1579 ALLOCATE(tagtrimtg(numeltg))
1580 ELSE
1581 ALLOCATE(tagtrimc(0))
1582 ALLOCATE(tagtrimtg(0))
1583 ENDIF
1584
1585C NITSCHE METHOD
1586 nfacnit =0
1587 IF (nitsche > 0 ) THEN
1588
1589c Element mean stress
1590 ALLOCATE(stressmean(6,numels))
1591
1592c Equivalent nodal force
1593 IF(iparit /= 0 ) THEN
1594 IF(numels10g ==0) THEN
1595 nfacnit = 6
1596 ALLOCATE(forneqsky(18*lsky))
1597 forneqsky(1:18*lsky) = zero
1598 ELSE
1599 nfacnit = 16
1600 ALLOCATE(forneqsky(48*lsky))
1601 forneqsky(1:48*lsky) = zero
1602 ENDIF
1603 ELSE
1604 ALLOCATE(forneqsky(0))
1605 ENDIF
1606 stressmean(1:6,1:numels)=zero
1607 ELSE
1608 ALLOCATE(stressmean(0,0))
1609 ALLOCATE( forneqsky(0))
1610 ENDIF
1611
1612 CALL newskw_init(iskwp,numskw_l,nskwp,numskw_l_send,iskwp_l_send,recvcount)
1613 partsav2(1:2,1:npart) = zero
1614
1615 ! Initialization of INTER_STRUCT structure + allocation
1616 ALLOCATE( inter_struct(ninter) )
1617 ALLOCATE( sort_comm(ninter) )
1618 CALL inter_struct_init(inter_struct,sort_comm)
1619
1620
1621C========================================================================================
1622
1623C save the Python functions into the Python interpreter dictionarry
1624 CALL python_register(python,nodes,numnod,
1625 . ixs, nixs, numels,
1626 . element%SHELL%IXC, nixc, numelc,
1627 . ixp, nixp, numelp,
1628 . ixt, nixt, numelt,
1629 . ixq, nixq, numelq,
1630 . ixtg, nixtg, numeltg,
1631 . ixr, nixr, numelr,
1632 . iparg, ngroup, nparg, mvsiz)
1633
1634 IF(python%NB_FUNCTS > 0) CALL python_share_memory(python,nodes,numnod,
1635 . ixs, nixs, numels,
1636 . element%SHELL%IXC, nixc, numelc,
1637 . ixp, nixp, numelp,
1638 . ixt, nixt, numelt,
1639 . ixq, nixq, numelq,
1640 . ixtg, nixtg, numeltg,
1641 . ixr, nixr, numelr,
1642 . iparg, ngroup, nparg)
1643
1644
1645
1646 k1=1+lipart1*(npart+nthpart)+2*9*(npart+nthpart)
1647 k2=k1+numels
1648 k3=k2+numelq
1649 k4=k3+numelc
1650 k5=k4+numelt
1651 k6=k5+numelp
1652 k7=k6+numelr
1653 k8=k7
1654 k9=k8+numeltg
1655 CALL python_dummy_active_node(python)
1656 CALL funct_python_update_elements(python, ispmd,
1657 . n2d, ngroup, nixc, nixtg, nixs,nixq,
1658 . numgeo, numelc, numeltg, numels, numelq, nummat, numnod,
1659 . nparg, npropg, npropm, npropmi, npropgi,
1660 . snercvois, snesdvois, slercvois, slesdvois,
1661 . sthke, seani, npart,
1662 . elbuf_tab ,iparg ,geo ,
1663 . element%SHELL%IXC ,ixtg , ixs, ixq, pm ,bufmat ,
1664 . eani,
1665 . ipm ,igeo ,thke ,err_thk_sh4 ,err_thk_sh3,
1666 . nodes ,w ,ale_connectivity,
1667 . nercvois ,nesdvois ,lercvois ,lesdvois,
1668 . m51_n0phas, m51_nvphas, stack ,
1669 . ipart(k3:k4-1),ipart(k1:k2-1),ipart(k8:k9-1), ipart(k2:k3-1),
1670 . multi_fvm ,
1671 . mat_elem%MAT_PARAM , output%DATA%FANI_CELL,glob_therm%ITHERM)
1672
1673C========================================================================================
1674C Initialize SENSORS & communication buffers.
1675C Play Time & Logical sensors.
1676C Reinitialise sensor variables defined in /SENS/RESET
1677
1678 k1=1+lipart1*(npart+nthpart)+2*9*(npart+nthpart)
1679 k2=k1+numels
1680 k3=k2+numelq
1681 k4=k3+numelc
1682 k5=k4+numelt
1683 k6=k5+numelp
1684 k7=k6+numelr
1685 k8=k7
1686 k9=k8+numeltg
1687 k10=k9+numelx
1688 k11=k10+numsph
1689 k12=k11+numelig3d
1690 CALL sensor_init(subsets,iparg,ngrouc,
1691 . ipart(k3),ipart(k8),ipart(k1),ipart(k2),ipart(k4),
1692 . ipart(k5) ,ipart(k6),sensors,tt ,dt2 ,iout, python ,nthread)
1693
1694
1695C========================================================================================
1696C PARALLEL SECTION (SMP)
1697C========================================================================================
1698
1699 need_comm_int25_solid_erosion(1:nspmd) = .false.
1700 comm_int25_solid_erosion = 0
1701 CALL python_begin_openmp(python)
1702!$OMP PARALLEL
1703!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
1704!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,N1,GREFTSK,GRELTSK)
1705C Init var parallel SMP
1706 CALL smp_init(
1707 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk,
1708 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
1709 3 greftsk,greltsk)
1710C
1711 CALL resol_init(
1712 1 itsk ,fr_nbcc ,
1713 2 isendto ,ircvfrom ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,nodes%ITABM1 ,
1714 3 ipari ,iparg ,nodes%ITAB ,ixs(l1) ,ixs(l2) ,
1715 4 i13a ,i13b ,i13c ,i13d ,i13e ,
1716 5 i13f ,i13g ,i13h ,i13i ,i15a ,
1717 6 i15b ,i15c ,i15d ,i15e ,i15f ,
1718 7 i15g ,i15h ,i15i ,i87a ,i87b ,
1719 8 i87c ,i87d ,i87e ,i87f ,i87g ,
1720 9 nfia ,nfea ,nfoa ,ndma ,ndma2 ,
1721 a nodftsk ,nodltsk ,ndtsk ,numntsk ,ixs(l3) ,
1722 b ixs ,ixq ,element%SHELL%IXC ,ixt ,ixp ,
1723 c ixr ,ixtg ,element%PON, nodes%IKINE ,
1724 d nodes%A ,nodes%AR ,nodes%V ,nodes%VR ,
1725 e nodes%X ,nodes%D ,nodes%MS ,nodes%IN ,nodes%STIFN ,
1726 f nodes%STIFR ,dmas ,diner ,
1727 g wa ,uwa ,pm ,geo ,
1728 h partsav ,parts0 ,monvol ,
1729 i i87h ,i87i ,i87j ,i87k ,
1730 j i15j ,kxx ,
1731 k secbuf ,secfcum ,nstrf ,igrnod ,iexlnk ,
1732 l xframe ,
1733 m ixtg1 ,ibcl ,nodes%VISCN ,dd_r2r ,
1734 o elbuf ,ipart ,madprt ,madsh4 ,
1735 p madsh3 ,madsol ,madnod ,madfail ,igeo ,
1736 q intlist ,nbintc ,element%PON%PROCNE ,niskyfi ,nodes%WEIGHT ,
1737 r isizxv ,ilenxv ,addcni2 ,procni2 ,iad_i2m ,
1738 s fr_i2m ,fr_nbcci2,i2size ,fr_mad ,lwibem ,
1739 t lwrbem ,fxbfp ,fxbefw ,fxbedp ,fxbgrp ,
1740 u fxbgrw ,ndin ,
1741 v islen7 ,irlen7 ,islen11 ,irlen11 ,
1742 w lwiflow ,lwrflow ,iflow ,addcnel ,cnel ,
1743 x addtmpl ,ipartl ,npartl ,nfnca ,nftca ,
1744 y i15ath ,i35ath ,ipm ,sh4tree ,ipadmesh ,
1745 z msc ,inc ,sh3tree ,mstg ,intg ,
1746 a ptg ,fthe ,fthesky ,ftheskyi ,nme17 ,
1747 b islen17 ,irlen17 ,irlen7t ,islen7t ,lindidel ,
1748 c lbufidel ,sh4trim ,sh3trim ,mscnd ,incnd ,
1749 d irlen20 ,islen20 ,irlen20t ,islen20t ,nbint20 ,
1750 e irlen20e ,islen20e ,niskyfie ,
1751 f nodes%MCP ,nodes%MS0 ,inod_pxfem,iel_pxfem,iadc_pxfem,
1752 g adsky_pxfem,nodes%ICODT ,nodes%ICODR ,ibfv ,admsms ,
1753 h nodreac ,igrouc ,ngrouc ,igrounc ,ngrounc ,
1754 i fr_rby ,fr_rby6 ,npby ,
1755 j nom_sect ,mcpc ,mcptg ,grth ,igrth ,
1756 k nelem ,lag_sec ,rwall%NPRW ,diag_sms ,dmelc ,
1757 l dmeltg ,ngrth ,nft2 ,dmels ,dmeltr ,
1758 m dmelp ,dmelrt ,res_sms ,i87l ,irbe2 ,
1759 n lrbe2 ,nmrbe2 ,iad_rbe2 ,fr_rbe2 ,fr_rbe2m ,
1760 o r2size ,lpby ,procne_pxfem,isendp_pxfem,irecvp_pxfem ,
1761 p iadsdp_pxfem,iadrcp_pxfem,fr_nbcc1,rby ,int18kine ,
1762 q nodes%XDP ,i87m ,inod_crk ,iel_crk ,iadc_crk,
1763 r adsky_crk,procne_crk,isendp_crk,irecvp_crk,
1764 s iadsdp_crk,iadrcp_crk ,int24use,ndama2 ,
1765 t igroupc ,igrouptg ,igroups ,igroupflg ,dmint2 ,irbkin_l ,
1766 u nrbykin_l,kindrby ,elbuf_tab ,sensors ,dd_r2r_elem,
1767 v sdd_r2r_elem,nodes%KINET, nodes%WEIGHT_MD ,dmsph ,ioldsect,lbufseglo,
1768 w interfaces%INTBUF_TAB ,numsph_glo_r2r, flg_sphinout_r2r,i15k,
1769 y condn ,condnsky,kxfenod2elc ,elcutc ,nodedge,
1770 z iad_edge ,crknodiad,fr_edge ,fr_nbedge ,nodlevxf,
1771 x crkedge ,xfem_tab ,isensint ,nisubmax ,
1772 1 intlist25 ,int24e2euse,tabmp_l ,
1773 2 i87n ,tab_mat,h3d_data,tagtrimc,tagtrimtg ,
1774 3 igrbric ,igrquad ,igrsh4n ,igrsh3n ,igrtruss ,
1775 4 igrbeam ,igrspring,igrpart ,forneqs ,int7itied,
1776 5 fxvel_fgeo,failwave,nloc_dmg,pinch_data ,slloadp,
1777 6 nodes%TAG_S_RBY,nfnca2 ,nftca2 ,nodes%IN0 ,sort_comm,stack,output,
1778 7 thke ,nodes%BOUNDARY_SIZE ,sh_offset_tab,
1779 8 need_comm_int25_solid_erosion,comm_int25_solid_erosion ,
1780 9 iskwn ,iframe ,loads ,glob_therm,pblast,rbe3,nhier_rby)
1781
1782!$OMP END PARALLEL
1783 CALL python_end_openmp(python)
1784 IF (alemuscl_param%IALEMUSCL == 0) DEALLOCATE(addtmpl)
1785C========================================================================================
1786C NON PARALLEL SECTION (SMP)
1787C========================================================================================
1788 CALL split_asspar4(element%PON%ADSKY,numnod,nthread,nodft_asspar,nodlt_asspar,element%PON%SADSKY)
1789! shell offset for contact (penalty), should use XYZ instead of X to take into account the offset
1790 IF (sh_offset_tab%NNSH_OSET > 0 .AND. impl_s==0) THEN
1791 ALLOCATE(xyz(3,numnod))
1792 xyz(1:3,1:numnod) = nodes%X(1:3,1:numnod)
1793 CALL offset_nproj(nspmd,numnod,xyz,sh_offset_tab,iparit)
1794 ELSE
1795 ALLOCATE(xyz(3,1))
1796!--- deactivate contact w/ offset
1797 sh_offset_tab%NNSH_OSET = 0
1798 ENDIF
1799
1800 IF (sh_offset_tab%NNSH_OSET > 0) THEN
1801 CALL assign_ptrx(ptrx,xyz,numnod)
1802 ELSE
1803 CALL assign_ptrx(ptrx,nodes%X,numnod)
1804 ENDIF
1805
1806
1807 ! Allocation and initialization of /INT18 + LAW151
1808 ALLOCATE( xcell_remote(ninter) )
1809 CALL int18_alloc(number_inter18,inter18_list,multi_fvm,ipari,xcell_remote,nspmd)
1810 CALL int18_law151_init(multi_fvm,igrbric,ipari ,ixs,
1811 1 igroups ,iparg ,elbuf_tab,multi_fvm%FORCE_INT ,
1812 2 ptrx , nodes%V , nodes%MS , nodes%KINET ,
1813 3 multi_fvm%X_APPEND,multi_fvm%V_APPEND,multi_fvm%MASS_APPEND,multi_fvm%KINET_APPEND,
1814 4 multi_fvm%FORCE_INT_PON)
1815
1816
1817 ! allocation & initialization for /FAIL/ALTER
1818 CALL fail_wind_frwave_init(ngroup)
1819 ! Check if ALE elements are deactivated to avoid some mpi comm. in the ALE solver
1820 global_active_ale_element = .false.
1821 CALL check_ale_comm(iparg,elbuf_tab,global_active_ale_element,glob_therm%ITHERM)
1822C End Initialisations //
1823 IF(nadmesh/=0.AND.idel7ng>=1) idel7nok = 0
1824C THERMAL TIME STEP : we don t check incompatible kinematic conditions anymore
1825c we constraint all DDLs
1826 IF (glob_therm%IDT_THERM == 1) THEN
1827 CALL bcsdtth_copy(nodes%ICODT, nodes%ICODR, icodt0, icodr0 ,1 )
1828 ENDIF
1829
1830 ! -----------------
1831 ! Monitored volume : initialization of global frontier array for mpi comm
1832 if(nvolu/=0) then
1833 call init_global_frontier_monvol(ispmd,nspmd,nvolu,nsurf,monvol,
1834 . nimv,volmon,nrvolu,
1835 . fr_mv,frontier_global_mv, t_monvol,igrsurf )
1836 else
1837 frontier_global_mv(1:nspmd+2) = 0
1838 endif
1839 ! Monitored volume : initialization of omp array
1840 call init_monvol_omp_structure(ispmd,nspmd,nvolu,nsurf,monvol,
1841 . nimv,numnod,
1842 . fr_mv,t_monvol,igrsurf )
1843 ! -----------------
1844 i24maxnsne=0
1845 IF (int24use == 1)THEN
1846 ALLOCATE(iad_i24(nbintc+1,nspmd))
1847 sfr_i24=0
1848 CALL spmd_i24_prepare(1,ipari, interfaces%INTBUF_TAB,
1849 * nodes%BOUNDARY_ADD, nodes%BOUNDARY,intlist,nbintc,
1850 * iad_i24 , sfr_i24, idum,i24maxnsne)
1851 ALLOCATE(fr_i24(sfr_i24))
1852 CALL spmd_i24_prepare(2,ipari, interfaces%INTBUF_TAB,
1853 * nodes%BOUNDARY_ADD, nodes%BOUNDARY,intlist,nbintc,
1854 * iad_i24 , sfr_i24, fr_i24,i24maxnsne)
1855C E2E Fictive Node Position, Velocity, Mass
1856 CALL i24e2e_fictive_nodes_update(intlist,nbintc,ipari,interfaces%INTBUF_TAB,
1857 * nodes%X,nodes%V,nodes%MS,nodes%ITAB,xyz,numnod,sh_offset_tab%NNSH_OSET)
1858
1859 ELSE
1860 ALLOCATE(iad_i24(1,1))
1861 ENDIF
1862
1863 CALL init_i25_edge(nledge,ninter,npari,ipari,interfaces%INTBUF_TAB )
1864 IF(ninter25 /= 0)THEN
1865 ALLOCATE(iad_i25(nbintc+1,nspmd))
1866 CALL spmd_i25_prepare(1,ipari, interfaces%INTBUF_TAB,
1867 * nodes%BOUNDARY_ADD, nodes%BOUNDARY,intlist,nbintc,
1868 * iad_i25 , sfr_i25, idum)
1869
1870 ALLOCATE(fr_i25(sfr_i25))
1871 CALL spmd_i25_prepare(2,ipari, interfaces%INTBUF_TAB,
1872 * nodes%BOUNDARY_ADD, nodes%BOUNDARY,intlist,nbintc,
1873 * iad_i25 , sfr_i25, fr_i25)
1874
1875 ELSE
1876 ALLOCATE(iad_i25(1,1))
1877 ENDIF
1878 ALLOCATE(fskyn25(3,nbccnor))
1879 fskyn25=0.
1880C Multidomains + SPH
1881 IF ((numsph_glo_r2r>0).AND.(flg_sphinout_r2r==1)) THEN
1882 ALLOCATE(off_sph_r2r(numnod))
1883 off_sph_r2r(:) = 0
1884 ENDIF
1885
1886C THERMAL EXPANSION and IMPTEMP : Initialisation of nodal temperatures
1887 IF (glob_therm%NFXTEMP > 0 .AND. glob_therm%ITHERM_FE > 0.AND.tt==zero) THEN
1888 CALL fixtemp(python,ibftemp ,fbftemp ,nodes%TEMP ,npc ,tf ,
1889 . nsensor ,sensors%SENSOR_TAB,glob_therm,snpc )
1890 ENDIF
1891C ---------------------
1892C Allocating Array for PCONT2 - average normal
1893C ---------------------
1894 IF (anim_v(27)+h3d_data%N_VECT_PCONT2 > 0) THEN
1895 sz_npcont2 = numnod
1896 ALLOCATE(npcont2(3,numnod))
1897 npcont2 = zero
1898 ELSE
1899 sz_npcont2 = 0
1900 ALLOCATE(npcont2(3,0))
1901 ENDIF
1902C ---------------------
1903C Allocating FEXT Array
1904C ---------------------
1905 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
1906 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT >0 .or. vipercoupling) THEN
1907 ALLOCATE(noda_fext(3*numnod))
1908 noda_fext(1:3*numnod)=zero
1909 ELSE
1910 ALLOCATE(noda_fext(3))
1911 noda_fext(1:3)=zero
1912 ENDIF
1913C ---------------------
1914C Allocating PEXT Array
1915C ---------------------
1916 CALL output_allocate_noda_pext(output%DATA,numnod, numnodg)
1917C ---------------------
1918 IF (anim_v(19) + h3d_data%N_VECT_CLUST_FORCE > 0) THEN
1919 ALLOCATE(fcluster(3*numnod))
1920 fcluster(1:3*numnod)=zero
1921 ELSE
1922 ALLOCATE(fcluster(3))
1923 fcluster(1:3)=zero
1924 ENDIF
1925 IF (anim_v(20) + h3d_data%N_VECT_CLUST_MOM > 0) THEN
1926 ALLOCATE(mcluster(3*numnod))
1927 mcluster(1:3*numnod)=0
1928 ELSE
1929 ALLOCATE(mcluster(3))
1930 mcluster(1:3)=0
1931 ENDIF
1932 ! -------------------------
1933 ! initialization of SHOOT_STRUCT for
1934 ! the deactivation node algo
1935 CALL init_nodal_state( ipari,shoot_struct,interfaces%INTBUF_TAB,nodes%BOUNDARY_ADD,nodes%BOUNDARY,
1936 . nodes%ITAB,nodes,geo,addcnel,cnel,
1937 . ixs,element%SHELL%IXC,ixt,ixp,ixr,ixtg,
1938 . size_addcnel,size_cnel ,
1939 . numelsg,numelqg,numelcg,numeltrg,numelpg,
1940 . numelrg,numeltgg ,ixs(l1))
1941 ! -------------------------
1942 allocate(component(ninter))
1943 call inter_init_component(ninter,npari,numnod,ispmd,nspmd,ipari,nodes%x,interfaces%intbuf_tab,component)
1944 ! -------------------------
1945 ! initialization of SPH_WORK
1946 call allocate_sph_work(sph_work,
1947 * numsph,numsph, ! Flag & size for WREDUCE
1948 * sol2sph_flag, numnod, ! Flag for other arrays
1949 * nsphact,numnod,nsphact, ! Size of as6, a6, as
1950 * numsphg )
1951C========================================================================================
1952C NON PARALLEL SECTION (SMP)
1953C========================================================================================
1954
1955 CALL trace_out(6)
1956c-----------------------------------------------
1957c INITIALISATION XFEM
1958c-----------------------------------------------
1959 IF (icrack3d > 0 .and. tt == zero) THEN
1960 CALL inixfem(elbuf_tab ,xfem_tab ,
1961 . iparg ,element%SHELL%IXC ,ixtg ,ngrouc ,igrouc ,
1962 . elcutc ,iadc_crk ,iel_crk ,inod_crk ,adsky_crk ,
1963 . nodes%X ,kxfenod2elc ,nodedge ,crknodiad ,iad_edge ,
1964 . fr_edge ,fr_nbedge ,nodlevxf ,crkedge ,xedge4n ,
1965 . xedge3n )
1966 END IF
1967C-----------------------------------------------
1968C Allocations Phase 2
1969C-----------------------------------------------
1970 ALLOCATE(fthreac(6*cptreac))
1971 IF (impl_s==1) THEN
1972 ALLOCATE(fthdtm(6*cptreac))
1973 ELSE
1974 ALLOCATE(fthdtm(0))
1975 ENDIF
1976C
1977 ! OUTPUT (ANIM,OUTP,H3D,TH) set COMPTREAC TO 1 IF REQUESTED
1978 comptreac = 0
1979 CALL reaction_forces_check_for_requested_output(npby,h3d_data,comptreac) ! Look for options for anim, ... and rbody with failure
1980 IF(comptreac == 1)THEN
1981 ALLOCATE(freac(6*numnod))
1982 freac(1:6*numnod)=zero
1983 ELSE
1984 ALLOCATE(freac(0))
1985 ENDIF
1986C
1987 fthreac = zero
1988 fthdtm = zero
1989 IF (nthpart > 0) THEN
1990 ALLOCATE(gresav(npsav*ngpe*nthread))
1991 ELSE
1992 ALLOCATE(gresav(1))
1993 ENDIF
1994 gresav = zero
1995C ALLOCATION Flying Nodes if IDEL
1996 IF(idel7ng>0)THEN
1997 ierror = 0
1998 ALLOCATE(ibufidel(lbufidel),stat=ierror2)
1999 ierror = ierror + ierror2
2000 ALLOCATE(indidel(lindidel),stat=ierror2)
2001 ierror = ierror + ierror2
2002 IF(int24use==1.OR.ninter25/=0)THEN
2003 ALLOCATE (ibufseglo(lbufseglo),stat=ierror2)
2004 ALLOCATE (indseglo(ninter+1),stat=ierror2)
2005 ENDIF
2006 IF(ierror/=0)THEN
2007 CALL ancmsg(msgid=158,anmode=aninfo,
2008 . i1=ierror)
2009 CALL arret(2)
2010 ENDIF
2011 ELSE
2012 ALLOCATE(ibufidel(0) ,stat=ierror2)
2013 ALLOCATE(indidel(0) ,stat=ierror2)
2014 END IF
2015
2016 IF(nspmd > 1.AND.pdel > 0) THEN
2017 ALLOCATE(ibufpdel(4*nconld+4*npresload),stat=ierr)
2018 ALLOCATE(nindexpdel(nconld+npresload),stat=ierr)
2019 ENDIF
2020
2021C========================================================================================
2022C PARALLEL SECTION (SMP)
2023C========================================================================================
2024
2025C------------IF adaptive Mesh : check if there are elements eroded after trimming to remove nodes from interface------
2026 IF(nadmesh/=0.AND.idel7ng>=1)THEN
2027
2028 l1 = 1+nixs*numels + nsvois*nixs
2029 l2 = l1+6*numels10
2030 l3 = l2+12*numels20
2031 IF((int24use==1.OR.ninter25/=0).AND.idel7nok==1)THEN
2032 indseglo(2:ninter+1)=0
2033 indseglo(1)=1
2034 ENDIF
2035 check_neigh_flag_res = 0
2036 IF (sh_offset_tab%NNSH_OSET > 0) THEN
2037 CALL assign_ptrx(ptrx,xyz,numnod)
2038 ELSE
2039 CALL assign_ptrx(ptrx,nodes%X,numnod)
2040 ENDIF
2041c allocate(nodes%deleted_node(2*numnod)) ! working array to mark nodes connected to deleted element
2042c allocate(nodes%work_array_node(nthread*numnod)) ! working array to mark nodes (connected to active element or deleted element)
2043 CALL python_begin_openmp(python)
2044!$OMP PARALLEL
2045!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
2046!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,N1,GREFTSK,GRELTSK,omp_address)
2047C Init var parallel SMP
2048 CALL smp_init(
2049 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk,
2050 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
2051 3 greftsk,greltsk)
2052 omp_address = 1 + itsk * numnod
2053 CALL tagoff3n(nodes,
2054 1 geo ,ixs ,ixs(l1) ,ixs(l1) ,ixs(l3) ,ixq ,
2055 2 element%SHELL%IXC ,ixt ,ixp ,ixr ,ixtg ,
2056 3 nodes%deleted_node,nodftsk ,nodltsk ,iparg ,elbuf ,itsk ,
2057 4 ixtg1 ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,nodes%ITAB ,
2058 5 addcnel ,cnel ,kxsp ,elbuf_tab ,tagel ,iexlnk ,
2059 6 igrnod ,dd_r2r ,dd_r2r_elem,sdd_r2r_elem,idel7nok_sav ,
2060 7 idel7nok_r2r,tagtrimc,tagtrimtg,s_elem_state,elem_state,
2061 8 shoot_struct,shoot_struct%GLOBAL_NB_ELEM_OFF)
2062 ! ---------------------
2063 ! check if a node is deactivated and deactivate all the corresponding secondary nodes
2064 CALL check_nodal_state( itsk,nodes%deleted_node,newfront,interfaces%INTBUF_TAB,shoot_struct%SIZE_SEC_NODE,
2065 . shoot_struct%SHIFT_S_NODE,shoot_struct%INTER_SEC_NODE,shoot_struct%SEC_NODE_ID)
2066 ! ---------------------
2067
2068 ! ---------------------
2069 ! check if a surface/edge must be deactivated and save the surface/edge id
2070 IF(itsk==0) THEN
2071 CALL find_surface_inter( nodes%ITAB ,shoot_struct ,ixs ,ixs(l1) ,element%SHELL%IXC ,
2072 . ixtg ,
2073 . ngroup,nparg,igroups,iparg )
2074
2075 CALL find_edge_inter( nodes%ITAB,shoot_struct,ixs,ixs(l1),
2076 1 element%SHELL%IXC,ixtg,ixq,ixt,ixp,
2077 2 ixr,geo,ngroup,igroups,iparg )
2078 ENDIF
2079 CALL my_barrier( )
2080 ! ---------------------
2081
2082 ! ---------------------
2083 ! exchange of surfaces (ie. 4 nodes) to deactivate and deactivation
2084 ! ONLY FOR LOCAL SURFACE / REMOTE ELEMENT
2085 IF(nspmd>1) THEN
2086 IF(itsk==0) CALL spmd_exch_deleted_surf_edge( nodes%BOUNDARY_ADD,nodes,shoot_struct,
2087 . interfaces%INTBUF_TAB,newfront,
2088 . ipari,geo,
2089 . ixs,element%SHELL%IXC,ixt,ixp,ixr,ixtg,ixs(l1),
2090 . addcnel,cnel,nodes%work_array_node(omp_address),tagel )
2091 CALL my_barrier()
2092 ENDIF
2093 ! ---------------------
2094
2095 ! ---------------------
2096 ! loop over the surface id and deactivate the surface
2097 ! ONLY FOR LOCAL SURFACE / LOCAL ELEMENT
2098 CALL check_surface_state( itsk,shoot_struct%SAVE_SURFACE_NB,shoot_struct%SAVE_SURFACE,
2099 . shoot_struct%SHIFT_INTERFACE,interfaces%INTBUF_TAB,
2100 . ipari,geo,
2101 . ixs,element%SHELL%IXC,ixt,ixp,ixr,ixtg,ixs(l1),
2102 . addcnel,cnel,nodes%work_array_node(omp_address),tagel,shoot_struct )
2103
2104 ! loop over the edge id and deactivate the edge
2105 ! ONLY FOR LOCAL EDGE / LOCAL ELEMENT
2106 CALL check_edge_state( itsk,shoot_struct%SAVE_M_EDGE_NB,shoot_struct%SAVE_S_EDGE_NB,
2107 . shoot_struct%SAVE_M_EDGE,shoot_struct%SAVE_S_EDGE,
2108 . shoot_struct%SHIFT_INTERFACE,interfaces%INTBUF_TAB,newfront,ipari,geo,
2109 . ixs,element%SHELL%IXC,ixt,ixp,ixr,ixtg,ixs(l1),
2110 . addcnel,cnel,nodes%work_array_node(omp_address),tagel,shoot_struct )
2111 ! ---------------------
2112
2113 ! ---------------------
2114 ! exchange of deactivated surfaces (ie. 4 nodes) to deactivate to deactivate the neighbourhood
2115 ! ONLY FOR REMOTE SURFACE + interface type 24 or 25
2116 IF(int24use>0.OR.ninter25/=0) THEN
2117 IF(itsk==0) CALL check_remote_surface_state( shoot_struct%NUMBER_REMOTE_SURF,shoot_struct%REMOTE_SURF,
2118 . shoot_struct%SHIFT_INTERFACE,interfaces%INTBUF_TAB,
2119 . ipari,nodes%BOUNDARY_ADD,shoot_struct )
2120 CALL my_barrier()
2121 IF(ninter25/=0.AND.interfaces%PARAMETERS%INT25_EROSION_SOLID > 0) THEN
2122 IF(itsk==0) THEN
2123 check_neigh_flag = shoot_struct%NUMBER_NEW_SURF + shoot_struct%NUMBER_REMOTE_SURF
2124 IF(need_comm_int25_solid_erosion(ispmd+1)) THEN
2125 CALL spmd_allreduce(check_neigh_flag,check_neigh_flag_res,1,spmd_max,comm_int25_solid_erosion)
2126 ELSEIF(nspmd==1) THEN
2127 check_neigh_flag_res = check_neigh_flag
2128 ENDIF
2129 IF(check_neigh_flag_res > 0 ) THEN
2130 CALL get_neighbour_surface( ispmd,nspmd,ninter25,npari,ninter,
2131 . nbintc,nixs,nixc,nixtg,numnod,
2132 . numels,numelc,numeltg,s_elem_state,
2133 . nbddedgt,nbddedg_max,
2134 . elem_state,ipari,intlist,nodes,
2135 . newfront,ixs,element%SHELL%IXC,ixtg,
2136 . nodes%BOUNDARY_ADD,ptrx,
2137 . interfaces%INTBUF_TAB,interfaces%SPMD_ARRAYS,shoot_struct,
2138 . need_comm_int25_solid_erosion )
2139 ENDIF
2140 ENDIF
2141 CALL my_barrier()
2142 ENDIF
2143 ENDIF
2144 ! ---------------------
2145
2146 CALL chkstfn3n(nodes,
2147 1 ipari ,geo ,ixs ,ixq ,element%SHELL%IXC ,ixt ,
2148 2 ixp ,ixr ,ixtg ,nodes%deleted_node,iparg ,itsk ,
2149 3 newfront,nodes%work_array_node(omp_address) ,nodes%MS ,nodes%IN ,output%DATA%SCAL_DMAS,nodes%ITAB ,
2150 4 nodes%ITABM1 ,addcnel , cnel ,indidel ,nindex1 ,nindex2 ,
2151 5 nindex3 ,nindex4 ,tagel ,int24use ,ibufseglo ,indseglo,
2152 6 ibufidel ,interfaces%INTBUF_TAB,nodes%BOUNDARY_ADD)
2153
2154
2155!$OMP END PARALLEL
2156 CALL python_end_openmp(python)
2157 CALL dealloc_shoot_inter( shoot_struct )
2158 ENDIF
2159
2160
2161 ! TETRA4 : SMOOTH FINITE ELEMENT FORMULATIONS
2162 IF(isfem >= 1) THEN
2163 s_sfem_nodvar = 2*numnod
2164 ELSE
2165 s_sfem_nodvar = 1
2166 ENDIF
2167 ALLOCATE(sfem_nodvar(s_sfem_nodvar))
2168 ALLOCATE(sfem_nodvar_ale(s_sfem_nodvar))
2169
2170C========================================================================================
2171C NON PARALLEL SECTION (SMP)
2172C========================================================================================
2173
2174C----------------------------------------------------------
2175C SELECTIVE MASS SCALING
2176C----------------------------------------------------------
2177 IF(idtmins_int /= 0)THEN
2178C
2179C /DT/INTER/AMS
2180 CALL sms_ini_err(rwall%NPRW ,rwall%LPRW ,nodes%KINET )
2181C
2182 END IF
2183C----------------------------------------------------------
2184 IF(idtmins /= 0)THEN
2185 l1 = 1+nixs*numels + nsvois*nixs
2186 l2 = l1+6*numels10
2187 l3 = l2+12*numels20
2188
2189C NATIV_SMS read from starter state
2190 nativ_sms(1:numnod) = nativ0_sms(1:numnod)
2191C
2192 CALL sms_ini_part(igrpart ,tagprt_sms)
2193
2194 IF(idtmins_int==0)
2195 . CALL sms_ini_rby(
2196 1 nodes%KINET ,rwall%NPRW ,rwall%LPRW ,npby , lpby ,
2198
2199 CALL sms_ini_kad(
2200 1 ixs ,ixq ,element%SHELL%IXC ,ixt ,ixp ,
2201 2 ixr ,ixtg ,ixtg1 ,ixs(l1) ,ixs(l3) ,
2202 3 ixs(l2) ,iparg ,nodes%MS ,nodes%MS0 ,tagnod_sms,
2203 4 nodes%ICODT ,nodes%ICODR ,nodes%KINET ,indx1_sms,
2204 5 kad_sms ,ipart(i15a),ipart(i15b),
2205 6 ipart(i15c),ipart(i15d),ipart(i15e),ipart(i15f),ipart(i15g),
2206 7 ipart(i15h),ipart(i15i),tagprt_sms ,tagrel_sms ,nodes%ITAB ,
2207 8 nodes%WEIGHT ,irbe2 ,rbe3%IRBE3 ,lrbe2 ,rbe3%LRBE3 ,
2208 9 nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,rwall%NPRW ,rwall%LPRW ,ipart ,
2209 a igeo ,nativ_sms )
2210
2211 ALLOCATE(kdi_sms(knz_sms),pk_sms(knz_sms),stat=ierror)
2212 IF(ierror/=0) THEN
2213 CALL ancmsg(msgid=19,anmode=aninfo,
2214 . c1='(/DT/.../AMS)')
2215 CALL arret(2)
2216 ENDIF
2217
2218 nsgdone=1
2219 CALL sms_ini_kdi(
2220 2 element%SHELL%IXC ,iparg ,ixs ,ixt ,ixp ,
2221 3 ixr ,ixtg ,ixs(l1) ,tagnod_sms,kad_sms ,
2223 5 jadt_sms ,jadp_sms,
2225 7 tagrel_sms,ipart(i15a),ipart(i15b),ipart(i15c),ipart(i15d),
2226 8 ipart(i15e),ipart(i15f),ipart(i15g),ipart(i15h),ipart(i15i),
2227 9 nodes%BOUNDARY_ADD ,nodes%BOUNDARY,npby ,lpby ,nodes%KINET ,
2228 a tagslv_rby_sms,ipari ,interfaces%INTBUF_TAB,iadi2,
2229 b lad_sms ,ipart,igeo ,nodes%WEIGHT ,
2230 c nativ_sms)
2231
2232 ALLOCATE(idi_sms(nnz_sms),jdi_sms(nnz_sms),stat=ierror)
2233 IF(ierror/=0) THEN
2234 CALL ancmsg(msgid=19,anmode=aninfo,
2235 . c1='(/DT/.../AMS)')
2236 CALL arret(2)
2237 ENDIF
2238
2239 nsgdone=1
2240 CALL sms_ini_jad_1(
2241 2 element%SHELL%IXC ,iparg ,ixs ,ixt ,ixp ,
2242 3 ixr ,ixtg ,ixs(l1) ,tagnod_sms,jadc_sms ,
2246 7 tagrel_sms,ipart(i15a),ipart(i15b),ipart(i15c),ipart(i15d),
2247 8 ipart(i15e),ipart(i15f),ipart(i15g),ipart(i15h),ipart(i15i),
2248 9 nodes%BOUNDARY_ADD ,nodes%BOUNDARY,npby ,lpby ,nodes%KINET ,
2249 a tagslv_rby_sms,ipari ,interfaces%INTBUF_TAB,iadi2,
2250 b lad_sms ,ipart ,igeo ,nodes%WEIGHT ,nativ_sms,
2251 c iad_sms ,idi_sms,jad_sms ,jdi_sms ,t2main_sms)
2252 DEALLOCATE(jdi_sms)
2253
2254 ALLOCATE(jdi_sms(nnz_sms),stat=ierror)
2255 IF(ierror/=0) THEN
2256 CALL ancmsg(msgid=19,anmode=aninfo,
2257 . c1='(/DT/.../AMS)')
2258 CALL arret(2)
2259 ENDIF
2260
2261 nsgdone=1
2262 CALL sms_ini_jad_2(
2263 2 element%SHELL%IXC ,iparg ,ixs ,ixt ,ixp ,
2264 3 ixr ,ixtg ,ixs(l1) ,tagnod_sms,jadc_sms ,
2267 6 tagrel_sms,ipart(i15a),ipart(i15b),ipart(i15c),ipart(i15d),
2268 7 ipart(i15e),ipart(i15f),ipart(i15g),ipart(i15h),ipart(i15i),
2269 8 nodes%BOUNDARY_ADD ,nodes%BOUNDARY,npby ,lpby ,nodes%KINET ,
2270 9 tagslv_rby_sms,ipari ,interfaces%INTBUF_TAB,iadi2 ,
2271 a lad_sms ,rwall%NPRW ,rwall%LPRW,tagmsr_rby_sms,
2273 . ipart ,
2274 c igeo ,nodes%WEIGHT ,nativ_sms,irbe2 ,lrbe2 ,
2275 d iad_sms ,idi_sms ,jad_sms ,jdi_sms ,t2main_sms)
2276 DEALLOCATE(jdi_sms)
2277 ALLOCATE(jdi_sms(nnz_sms),stat=ierror)
2278 IF(ierror/=0) THEN
2279 CALL ancmsg(msgid=19,anmode=aninfo,
2280 . c1='(/DT/.../AMS)')
2281 CALL arret(2)
2282 ENDIF
2283 ALLOCATE(jsm_sms(nnz_sms),stat=ierror)
2284 IF(ierror/=0) THEN
2285 CALL ancmsg(msgid=19,anmode=aninfo,
2286 . c1='(/DT/.../AMS)')
2287 CALL arret(2)
2288 ENDIF
2289
2290 nsgdone=1
2291 CALL sms_ini_jad_3(
2292 2 element%SHELL%IXC ,iparg ,ixs ,ixt ,ixp ,
2293 3 ixr ,ixtg ,ixs(l1) ,tagnod_sms,jadc_sms,
2296 6 tagrel_sms,ipart(i15a),ipart(i15b),ipart(i15c),ipart(i15d),
2297 7 ipart(i15e),ipart(i15f),ipart(i15g),ipart(i15h),ipart(i15i),
2298 8 nodes%BOUNDARY_ADD ,nodes%BOUNDARY,npby ,lpby ,nodes%KINET ,
2299 9 tagslv_rby_sms,ipari ,interfaces%INTBUF_TAB,iadi2 ,
2301 b igeo ,tagmsr_rby_sms,nodes%WEIGHT,nativ_sms,
2302 c iad_sms ,idi_sms ,jad_sms ,jdi_sms ,t2main_sms)
2303
2304 DEALLOCATE(iad_sms,idi_sms)
2305
2306 ALLOCATE(ltk_sms(knz_sms),lt_sms(nnz_sms),stat=ierror)
2307 IF(ierror/=0) THEN
2308 CALL ancmsg(msgid=19,anmode=aninfo,
2309 . c1='(/DT/.../AMS)')
2310 CALL arret(2)
2311 ENDIF
2312
2313 ALLOCATE(tag_lnk_sms(nrlink+nlink+njoint),
2314 . nrwl_sms(slprw),
2315 . stat=ierror)
2316 IF(ierror/=0) THEN
2317 CALL ancmsg(msgid=19,anmode=aninfo,
2318 . c1='(/DT/.../AMS)')
2319 CALL arret(2)
2320 ENDIF
2321
2322 IF(idtmins==1)THEN
2323C Obsolete
2324 ELSE
2325 CALL sms_ini_kin_2(
2326 1 ilink ,llink ,nnlink ,lnlink ,tag_lnk_sms,
2327 2 fr_ll ,fr_rl ,nodes%WEIGHT ,nodes%ITAB ,ljoint ,
2328 3 iadcj ,fr_cj ,rwall%NPRW ,rwall%LPRW ,rwall%FR_WALL ,
2329 4 nrwl_sms ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY )
2330 END IF
2331
2332 IF(idtmins_int/=0)THEN
2333C re-tag rigid bodies (all nodes)
2334 CALL sms_ini_rby(
2335 1 nodes%KINET ,rwall%NPRW ,rwall%LPRW ,npby , lpby ,
2337 END IF
2338
2339 CALL sms_ini_int(
2340 1 ipari ,interfaces%INTBUF_TAB ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist,
2341 2 nbintc)
2342
2343 ELSEIF(idtmins_int/=0)THEN
2344C
2345C /DT/INTER/AMS
2346 ALLOCATE(kdi_sms(0),jdi_sms(0),pk_sms(0),lt_sms(0),ltk_sms(0),
2347 . jsm_sms(0),
2348 . tag_lnk_sms(nrlink+nlink+njoint),nrwl_sms(slprw))
2349
2350 nindx1_sms=0
2351 nsmspcg=min(nsmspcg,numnodg)
2352
2353 CALL sms_ini_kin_2(
2354 1 ilink ,llink ,nnlink ,lnlink ,tag_lnk_sms,
2355 2 fr_ll ,fr_rl ,nodes%WEIGHT ,nodes%ITAB ,ljoint ,
2356 3 iadcj ,fr_cj ,rwall%NPRW ,rwall%LPRW ,rwall%FR_WALL ,
2357 4 nrwl_sms ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY )
2358
2359 CALL sms_ini_rby(
2360 1 nodes%KINET ,rwall%NPRW ,rwall%LPRW ,npby , lpby ,
2362
2363 CALL sms_ini_int(
2364 1 ipari ,interfaces%INTBUF_TAB ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist,
2365 2 nbintc)
2366
2367 ELSE
2368 ALLOCATE(kdi_sms(0),jdi_sms(0),pk_sms(0),lt_sms(0),ltk_sms(0),
2369 . jsm_sms(0),tag_lnk_sms(0),nrwl_sms(0))
2370 END IF
2371
2372C
2373 IF (m_vs_sms>0) THEN
2374 lnzm=m_vs_sms+3
2375 ALLOCATE(proj_s(numnod,lnzm),proj_t(numnod,lnzm),
2376 . proj_la_1(lnzm),proj_w(3*lnzm),proj_k(lnzm,lnzm))
2377 proj_s = zero
2378 ncg_run_sms = 0
2379 ELSE
2380 ALLOCATE(proj_s(0,0),proj_t(0,0),proj_la_1(0),proj_w(0),proj_k(0,0))
2381 END IF
2382C---------------------------------------------------------------------
2383C DEBUG MATRIX AMS
2384C---------------------------------------------------------------------
2385 IF (idtmins/=0.AND.debug(macro_debug_ams)==1) THEN
2386 IF(nspmd > 1) THEN
2387 IF (ispmd==0) THEN
2388 siz = numnodg
2389 ELSE
2390 siz = 0
2391 END IF
2392 CALL spmd_collectm(tagnod_sms,nodes%ITAB,nodes%WEIGHT,nodes%NODGLOB,siz)
2393 ELSE
2394 CALL collectm(tagnod_sms,nodes%ITAB,nodes%WEIGHT,nodes%NODGLOB)
2395 END IF
2396 END IF
2397C---------------------------------------------------------------------
2398C AMS + POFF
2399C---------------------------------------------------------------------
2400 IF(idtmins/=0.AND.iparit==0)THEN
2401 ALLOCATE(uncomp_fr(numnod))
2402 ALLOCATE(uncomp_fri2m(numnod))
2403
2405 * nodes%BOUNDARY_ADD,nodes%BOUNDARY,nb_fr,uncomp_fr,
2406 * iad_i2m,fr_i2m,nb_fri2m,uncomp_fri2m)
2407
2408 ALLOCATE(fr_loc(nb_fr))
2409 fr_loc(1:nb_fr) = uncomp_fr(1:nb_fr)
2410
2411 ALLOCATE(fr_loci2m(nb_fri2m))
2412 fr_loci2m(1:nb_fri2m) = uncomp_fri2m(1:nb_fri2m)
2413
2414
2415 DEALLOCATE(uncomp_fr)
2416 DEALLOCATE(uncomp_fri2m)
2417
2418 ELSE
2419 ALLOCATE(fr_loc(1))
2420 ALLOCATE(fr_loci2m(1))
2421 ENDIF
2422
2423C========================================================================================
2424C NON PARALLEL SECTION (SMP)
2425C========================================================================================
2426
2427C ALLOCATION OF WORKING ARRAYS FOR AIRBAG BEM
2428C
2429 ALLOCATE(wibem(lwibem), wrbem(lwrbem), stat=ierror)
2430 IF (ierror/=0) THEN
2431 CALL ancmsg(msgid=160,anmode=aninfo,
2432 . i1=ierror)
2433 CALL arret(2)
2434 ENDIF
2435 DO i=1,lwibem
2436 wibem(i)=0
2437 ENDDO
2438 ALLOCATE(wiflow(lwiflow), wrflow(lwrflow), stat=ierror)
2439 IF (ierror/=0) THEN
2440 CALL ancmsg(msgid=160,anmode=aninfo,
2441 . i1=ierror)
2442 CALL arret(2)
2443 ENDIF
2444 DO i=1,lwiflow
2445 wiflow(i)=0
2446 ENDDO
2447C
2448C Allocation interface 17
2449C
2450 ALLOCATE(eminx(nme17*6))
2451C
2452 IF (nfxbody>0) THEN
2453 DO n=1,nfxbody
2454 adrnod=fxbipm(6,n)
2455 onof=1
2456 onfelt=0
2457 CALL fxbypid(output,
2458 . iparg , ixs , ixq , element%SHELL%IXC ,
2459 . ixt , ixp , ixr , ixtg , fxbipm(1,n),
2460 . fxbnod(adrnod), onof , wa , onfelt ,elbuf_tab )
2461 ENDDO
2462 END IF
2463C
2464
2465C dt2s=0 => shells computation at 1st cycle next to restart
2466 IF(mcheck==0) dt2s=0.0
2467 IF(mcheck/=0) dt2save = dt2
2468C------------RBE3----allocation-------------
2469 IF(nrbe3>0)THEN
2470 nmt0 = rbe3%lrbe3_sz/2
2471 IF (nmt0>0) THEN
2472 CALL prerbe3p0(rbe3)
2473 END IF
2474 END IF
2475C----------------------------------
2476C IMPLICIT SIZES [MONO THREAD]
2477C Double precision only
2478C----------------------------------
2479 IF (impl_s==1.OR.neig>0) THEN
2480#if defined(myreal8) && !defined(WITHOUT_LINALG)
2481 ALLOCATE (elbuf_imp(ngroup))
2482 CALL alloc_elbuf_imp(elbuf_tab,elbuf_imp,ngroup, iparg)
2483 IF (imon>0) CALL startime(timers,34)
2484 IF (imon>0) CALL startime(timers,31)
2485 l1 = 1+nixs*numels + nsvois*nixs
2486 l2 = l1+6*numels10
2487 l3 = l2+12*numels20
2488 CALL imp_sol_init(
2489 1 geo ,npby ,lpby ,nodes%ITAB ,
2490 2 ipari ,ixs ,ixq ,element%SHELL%IXC ,ixt ,
2491 4 ixp ,ixr ,ixtg ,ixtg1 ,ixs(l1) ,
2492 5 ixs(l2) ,ixs(l3) ,iparg ,
2493 6 elbuf ,nint7 ,nbintc ,nodes%X ,dmcp ,
2494 7 nodes%BOUNDARY ,nodes%BOUNDARY_ADD ,fr_i2m ,iad_i2m ,
2495 8 rwall%NPRW ,num_imp1 ,num_impl ,monvol ,igrsurf ,
2496 9 fr_mv ,ipm ,igeo ,iad_rby ,
2497 a fr_rby ,sh4tree ,sh3tree ,rbe3%IRBE3 ,rbe3%LRBE3 ,
2498 b rbe3%mpi%FR_RBE3 ,rbe3%mpi%IAD_RBE3 ,irbe2 ,lrbe2 ,ibfv ,
2499 c vel ,elbuf_tab ,iframe ,interfaces%INTBUF_TAB,
2500 d nddl0 ,nnzk0 ,impbuf_tab)
2501 IF (imon>0) CALL stoptime(timers,31)
2502 IF (imon>0) CALL stoptime(timers,34)
2503C
2504 ns_imp=>impbuf_tab%CAND_N
2505 ne_imp=>impbuf_tab%CAND_E
2506 ind_imp=>impbuf_tab%INDSUBT
2507 fext_imp=>impbuf_tab%AC
2508 r_imp=>impbuf_tab%R_IMP
2509 ALLOCATE(fac_k(0), ipiv_k(0))
2510 IF (imumpsv >0.OR.(isolv==7.AND.nspmd>1)) THEN
2511#if defined(MUMPS5)
2512 CALL spmd_mumps_ini(mumps_par, 1)
2513#else
2514 WRITE(6,*) __line__,"Fatal error: MUMPS required"
2515 CALL flush(6)
2516 CALL arret(5)
2517#endif
2518 ALLOCATE(cddlp(nddl0))
2519 ENDIF
2520 ibuck= ibuckl
2521C----------------------------------
2522C EIGENSOLVER [MONO THREAD]
2523C----------------------------------
2524C------ one routine for EIG
2525 IF (neig>0) THEN
2526 CALL trace_in(3,ncycle,zero)
2527#ifdef DNC
2528 CALL imp_eigsol(
2529 1 eigipm , eigrpm , nodes%MS ,nodes%IN , eigibuf ,
2530 2 nodes%X ,ixtg1 ,tf , npc , fr_wave ,
2531 3 w16 , wa ,
2532 4 nodes%ICODT , nodes%ICODR , nodes%ISKEW ,ibfv , vel ,
2533 4 nodes%V , nodes%A , elbuf , ixs , ixq ,
2534 5 element%SHELL%IXC , ixt , ixp , ixr , ixtg ,
2535 6 pm , geo ,output%DATA%VECT_CONT , icut , skews%SKEW ,
2536 7 xcut ,output%DATA%VECT_FINT, nodes%ITAB ,output%DATA%VECT_FEXT,output%DATA%FOPT,
2537 8 output%DATA%SCAL_DT, lpby , npby , nstrf , rwall%RWBUF ,
2538 9 rwall%NPRW , tani , elbuf_tab ,mat_elem%MAT_PARAM, dd_iad ,
2539 a nodes%BOUNDARY_ADD , nodes%BOUNDARY , nodes%WEIGHT , eani , ipart ,
2540 b rby , nom_opt , igrsurf ,
2541 c bufsf , idata , rdata , bufmat , bufgeo ,
2542 d kxx , ixx , kxsp , ixsp , nod2sp ,
2543 e spbuf , ixs(l1) , ixs(l2) , ixs(l3) , nodes%VR ,
2544 f monvol , volmon , ipm , igeo , iparg ,
2545 g nodes%NODGLOB , nodes%BOUNDARY_ADD , nodes%BOUNDARY , fr_sec , fr_rby2 ,
2546 h iad_rby2 , rwall%FR_WALL , ipari ,
2547 i interfaces%INTBUF_TAB , nodes%D ,partsav ,
2548 j fsav(1,nfnca+1),fsav(1,nftca+1), nodes%TEMP , thke ,
2549 k err_thk_sh4 , err_thk_sh3 , irbe2 , rbe3%IRBE3 ,lrbe2 ,
2550 l rbe3%LRBE3 , rbe3%FRBE3 ,fr_rbe2 , rbe3%mpi%fr_rbe3 , iad_rbe2,
2551 m nodes%WEIGHT_MD , cluster , fcluster , mcluster , xfem_tab,
2552 o w , nv46 , nercvois , nesdvois,
2553 p lercvois , lesdvois ,crkedge , indx_crk , xedge4n ,
2554 q xedge3n ,stack ,sph2sol ,nodes%STIFN ,nodes%STIFR ,
2555 r drape_sh4n , drape_sh3n ,h3d_data ,subsets ,igrnod ,
2556 s fcont_max ,output%DATA%VECT_PCONT2,output%DATA%VECT_PCONT2_2, ale_connectivity ,
2557 t itask ,nddl0 ,nnzk0 ,impbuf_tab , drapeg,
2558 u glob_therm, output ,multi_fvm)
2559#endif
2560 dt2 = max(em20,tstop-tt)
2561 mstop=2
2562 GOTO 300
2563 END IF !IF (NEIG>0) THEN
2564#endif
2565 ELSE
2566 impl_s0 = 0
2567 imp_dum(1)=0
2568 ns_imp => imp_dum
2569 ne_imp => imp_dum
2570 ind_imp=> imp_dum
2571 num_imp=0
2572 ismdisp=0
2573 END IF !IF (IMPL_S==1.OR.NEIG>0) THEN
2574C------------------------------------------------------
2575C End of Implicit [MONO THREAD]
2576C------------------------------------------------------
2577C------------------------------------------------------
2578C other initializations [MONO THREAD]
2579C------------------------------------------------------
2580 onofp=0
2581 iad1 = 0
2582 iad2 = 0
2583 iad1b= 0
2584 IF (iparit>0) THEN
2585 iad1 = 1
2586 IF(ivector==1)THEN
2587 iad1b = iad1+numnod+1
2588 iad2 = iad1b+numnod
2589 ELSE
2590 iad1b = iad1
2591 iad2 = iad1b+numnod+1
2592 ENDIF
2593 ENDIF
2594 IF(numsph/=0)THEN
2595 IF(scodver>=44.AND.sminver<3)
2596 . CALL sphres44b(kxsp ,ixsp ,nod2sp ,iparg ,spbuf )
2597 ENDIF
2598C------------------------------------------------------
2599C SPH Pointers
2600C------------------------------------------------------
2601 ksph1 =1+3*numsph
2602 ksph21 =numsph+1
2603 ksph22 =ksph21+16*numsph
2604 ksph23 =ksph22+min(1,nsphio)*3*numsph
2605 kspactiv=1
2606 IF(nsphsol==0)THEN
2607C pointer to list of particles to be sorted (to be sorted == active)
2608 ksp2sort=1
2609 ELSE
2610C to be sorted > active
2611 ksp2sort=ksph23
2612 END IF
2613
2614C-------------------------------
2615C POINTERS FOR USER ROUTINES
2616C-------------------------------
2617 CALL sav_buf_point(pm,1)
2618 CALL sav_buf_point(bufmat,2)
2619 CALL sav_buf_point(geo,3)
2620 CALL sav_buf_point(bufgeo,4)
2621 CALL sav_buf_point(npc,5)
2622 CALL sav_buf_point(tf,6)
2623 CALL sav_buf_point(iskwn,9)
2624 CALL sav_buf_point(skews%SKEW,10)
2625 CALL sav_buf_point(laccelm,11)
2626 CALL sav_buf_point(accelm,12)
2627 CALL sav_buf_point(nodes%ITABM1,13)
2628 CALL sav_buf_point(nodes%X,14)
2629 CALL sav_buf_point(nodes%D,15)
2630 CALL sav_buf_point(nodes%V,16)
2631 CALL sav_buf_point(nodes%A,17)
2632 CALL sav_buf_point(nodes%V,16)
2633 CALL sav_buf_point(nodes%A,17)
2634 CALL sav_buf_point(nodes%WEIGHT,18)
2635 CALL sav_buf_point(ipm,19)
2636 CALL sav_buf_point(igeo,20)
2637
2638C ----------------------------------------------
2639C Specific Initializations
2640C ----------------------------------------------
2641
2642#ifdef DNC
2643 madymo_del_global=0
2644 madymo_del=0
2645 IF(imadcpl==1)THEN
2646
2647 ALLOCATE(mad_tag_sol(numels))
2648 ALLOCATE(mad_tag_sh(numelc))
2649 ALLOCATE(mad_tag_tg(numeltg))
2650 ALLOCATE(mad_fail_elements(nmadsol+nmadsh4+nmadsh3))
2651 mad_tag_sol(1:numels)=0
2652 mad_tag_sh(1:numelc)=0
2653 mad_tag_tg(1:numeltg)=0
2654 mad_fail_elements(1:nmadsol+nmadsh4+nmadsh3) = 0
2655
2656 ALLOCATE(madclfrecv(3,madclnods))
2657
2658 CALL initial_data_exch_madcpl(nodes%X,nodes%A,nodes%V,nodes%MS,madclnod)
2659
2660C Implementing a dummy Madymo cycle
2661 CALL dummy_cycle_madcpl(nodes%X,madclnod)
2662
2663 ENDIF
2664#endif
2665
2666 IF(ninter25 /= 0) THEN
2667 CALL spmd_i25front_init(nodes%ITAB,nodes%MAIN_PROC,interfaces%INTBUF_TAB,ipari)
2668 ELSE
2669 ninter25e = 0
2670 ENDIF
2671
2672 nfvbag = 0
2673 check_npolh = .false.
2674 IF(nvolu>0)THEN
2675 CALL fvdim(monvol)
2676 CALL fv_switch_crit(monvol,check_npolh)
2677 ENDIF
2678C Save the number of FVMBAG before switches to UP
2679 nfvbag0 = nfvbag
2680
2681
2682 IF( ninter /= 0 ) THEN
2683C Bucket or voxel, depending on /PERF/ in 1.rad
2684 CALL init_interf_sorting_strategy(interfaces%INTBUF_TAB,ninter)
2685C First: try with reduced bounding box
2686 CALL init_trim(ninter)
2687 ENDIF
2688
2689 ! ----------------------
2690 ! user library : initialization
2691 IF(dlib_struct(id_engine_user_initialize)%DLIB_BOOL) THEN
2692 nspmd_user = nspmd
2693 ntask_user = nthread
2694 ispmd_user = ispmd
2695 CALL engine_user_initialize(nspmd_user,ntask_user,ispmd_user)
2696 ENDIF
2697 ! ----------------------
2698 CALL python_update_time(tt,dt2)
2699 CALL python_update_nodal_entities(numnod, nodes, x=nodes%X,a=nodes%A,v=nodes%V,d=nodes%D,dr=nodes%DR,vr=nodes%VR)
2700 CALL python_sync(python%CONTEXT)
2701 IF(nvolu > 0)THEN
2702 IF(python%NB_FUNCTS > 0) THEN
2703 k1 = 1
2704 kk1 = 0
2705 DO i=1,nvolu
2706 t_monvol(i)%pressure = volmon(kk1+12)
2707 t_monvol(i)%temperature = volmon(kk1+13)
2708 t_monvol(i)%area = volmon(kk1+18)
2709 t_monvol(i)%volume = volmon(kk1+16)
2710 k1 = k1 + nimv
2711 kk1 = kk1 + nrvolu
2712 END DO
2713 CALL python_monvol(t_monvol)
2714 ENDIF
2715 ENDIF
2716C
2717
2718 IF(coupling%active) THEN
2719 ! ALLOCATION AND INITIALIZATION OF COUPLING COUPLING
2720 ALLOCATE(nodes%FORCES(3,numnod))
2721 nodes%FORCES = zero
2722 call coupling_set_interface(coupling, igrnod, ngrnod, igrsurf, nsurf, nodes)
2723 CALL coupling_initialize(coupling,nodes%X,numnod,ispmd,nspmd)
2724 CALL coupling_ongoing(coupling,ongoing)
2725 ENDIF
2726
2727 ! Node Splitting
2728 CALL init_ghost_shells(nodes, element,ispmd,nspmd,nodes%boundary_add,nodes%boundary_size,nodes%boundary)
2729
2730 ! ----------------------
2731 ! Initialize coupling to Viper
2732 IF (vipercoupling) THEN
2733 call viper_coupling_initialize(viper, nodes, element, numnod,
2734 . nixs, numels, ixs, nixc, numelc,nixtg, numeltg,ixtg,
2735 . istdo, neleml, numelq, numelt, numelp, numelr,
2736 . dtmin, tstop, output%DTANIM, tt, nparg, ngroup, iparg, elbuf_tab,
2737 . tt_double, output%TANIM)
2738 ENDIF
2739
2740C===========================================================================
2741C BEGINNING OF EXPLICIT ITERATION LOOP
2742C===========================================================================
2743 100 CONTINUE
2744
2745 ncycle_debug = ncycle
2746
2747C========================================================================================
2748C NON PARALLEL SECTION (SMP)
2749C========================================================================================
2750
2751C INTERFACE
2752C Reallocate RENUM array
2753 rns = 0
2754 CALL renum_siz(ipari,rns)
2755 IF (rns > rnum_siz)THEN
2756 DEALLOCATE(renum)
2757 rnum_siz=rns
2758 ALLOCATE(renum(rnum_siz))
2759 ENDIF
2760
2761#ifdef DNC
2762 IF (imadcpl>0)THEN
2763
2764 CALL data_send_madcpl(nodes%X,madclnod,
2765 * madymo_del_global,mad_fail_elements)
2766 ENDIF
2767#endif
2768
2769C-----------------------------------------------
2770C TRACE BACK
2771C-----------------------------------------------
2772 CALL trace_in(3,ncycle,zero)
2773
2774 IF(imon>0) CALL startime(timers,6)
2775 IF(imonm > 0) CALL startime(timers,47)
2776C
2777 CALL manctr(output,sensors,h3d_data)
2778C----------------------------
2779C MOVING SKEW [MONO THREAD]
2780C----------------------------------
2781 IF(numskw/=0) CALL newskw(skews%SKEW ,iskwn ,nodes%X ,iskwp_l ,nskwp,
2782 1 numskw_l,numskw_l_send,iskwp_l_send,recvcount,iskwp)
2783C----------------------------------
2784 econt=zero
2785 edamp=zero
2786 enint=zero
2787 xmass=zero
2788 xmomt=zero
2789 ymomt=zero
2790 zmomt=zero
2791 wplast=zero
2792C
2793 dt1=dt2
2794 dt2=ep06
2795 glob_therm%DT_THERM = ep06
2796 nt_imp=0
2797!
2798 IF(impl_s>0) THEN
2799 IF(ncycle>0) THEN
2800 IF (imon>0) CALL startime(timers,timer_integ)
2801 CALL imp_fanie(output ,fext_imp,nfia ,nfea ,nodft ,nodlt,
2802 . h3d_data )
2803 IF (imon>0) CALL stoptime(timers,timer_integ)
2804 ENDIF
2805 END IF
2806
2807
2808 IF(ncycle==1.AND.interfaces%PARAMETERS%ISTIF_DT>0)
2809 . interfaces%PARAMETERS%DT_STIFINT = dt1
2810C----------------------------------
2811 IF(imonm > 0) CALL stoptime(timers,47)
2812 IF(imon>0) CALL stoptime(timers,6)
2813
2814 imadfsh4=0
2815
2816C----------------------------------
2817C Gather actual thickness of shells
2818C----------------------------------
2819 IF(inter_ithknod/=0)THEN
2820 nsgdone=1
2821 thknod(nodft:nodlt)=zero
2822C /---------------/
2823C /---------------/
2824 CALL thickvar(iparg,elbuf_tab,element%SHELL%IXC,ixtg,thksh4,
2825 . thksh3,thknod,thke,sh4tree,sh3tree)
2826
2827 IF(nspmd>1) THEN
2828 length = 1
2829 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
2830 CALL spmd_exch_thknod(
2831 + thknod,nodes%BOUNDARY_ADD ,nodes%BOUNDARY,length,lenr)
2832 ENDIF
2833 END IF
2834
2835C-----------------------------
2836C Not pure thermal case
2837C-----------------------------
2838
2839 IF(ilag+iale+ieuler/=0)THEN
2840C--- // N/3 -------------------------------------
2841C CANCEL Mass matrix in 2D
2842C------------------------------------------------
2843 isync = 0
2844 IF(n2d/=0) THEN
2845
2846C========================================================================================
2847C PARALLEL SECTION (SMP)
2848C========================================================================================
2849
2850!$OMP PARALLEL
2851!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
2852!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,GREFTSK,GRELTSK)
2853
2854C Init var parallel SMP
2855 CALL smp_init(
2856 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
2857 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
2858 3 greftsk,greltsk)
2859 CALL zero1(nodes%MS(nodftsk),numntsk)
2860!$OMP END PARALLEL
2861
2862 ENDIF
2863 ENDIF
2864
2865C========================================================================================
2866C NON PARALLEL SECTION (SMP)
2867C========================================================================================
2868 IF(ALLOCATED(output%DATA%FOPT)) THEN
2869 output%DATA%FOPT = zero
2870 ENDIF
2871 IF(ALLOCATED(output%DATA%VECT_CONT2)) THEN
2872 output%DATA%VECT_CONT2 = zero
2873 ENDIF
2874 IF(h3d_data%N_VECT_CONT2M==1)THEN
2875 DO i=1,numnod
2876 mcont2(1,i) = zero
2877 mcont2(2,i) = zero
2878 mcont2(3,i) = zero
2879 ENDDO
2880 ENDIF
2881 ngdone = 1
2882 nsgdone = 1
2883C------------------------
2884C INTERFACES 14 & 15 :
2885C Initialisation buffers: forces, moments, stifness of surfaces.
2886C--- //0 ----------------
2887 IF (ispmd==0) THEN
2888 IF (ninter/=0) THEN
2889 IF (imon>0) CALL startime(timers,timer_contsort)
2890 CALL i14ist(ipari,interfaces%INTBUF_TAB,igrsurf,bufsf)
2891 IF (imon>0) CALL stoptime(timers,timer_contsort)
2892 ENDIF
2893 ENDIF
2894
2895C========================================================================================
2896C NON PARALLEL SECTION (SMP)
2897C========================================================================================
2898
2899C--------------------------------------------------------
2900 dt2t = dt2
2901C--------------------------------------------------------
2902 k1=1+lipart1*(npart+nthpart)+2*9*(npart+nthpart)
2903 k2=k1+numels
2904 k3=k2+numelq
2905 k4=k3+numelc
2906 k5=k4+numelt
2907 k6=k5+numelp
2908 k7=k6+numelr
2909 k8=k7
2910 k9=k8+numeltg
2911 k10=k9+numelx
2912 k11=k10+numsph
2913 k12=k11+numelig3d
2914C-----------------------------------------------
2915C pressure gauges, position calculation
2916C-----------------------------------------------
2917 IF (iale+ieuler+glob_therm%ITHERM+numsph/=0) THEN
2918 IF(nbgauge/=0)CALL agauge0(lgauge,gauge,nodes%X,element%SHELL%IXC,igaup,ngaup)
2919 END IF
2920C----------------------------------------
2921C
2922 IF (imon>0) CALL startime(timers,6)
2923 IF (imonm > 0) CALL startime(timers,49)
2924C----------------------------
2925 IF(numgeo>0.AND.nodadt==0)THEN
2926 DO i=1,numgeo
2927 IF(geo(5,i)>zero.AND.dtfac1(3)*geo(5,i)<dt2t)THEN
2928 dt2t= dtfac1(3)*geo(5,i)
2929 neltst = 0
2930 ityptst= 3
2931 ENDIF
2932 ENDDO
2933 ENDIF
2934C------------------------
2935C USER WINDOW
2936C------------------------
2937 IF(user_windows%HAS_USER_WINDOW /= 0 ) THEN
2938 CALL trace_in(9,2,zero)
2939
2940 CALL user_windows_routine( ispmd ,nspmd ,userl_avail ,
2941 1 user_windows ,rad_inputname ,len_rad_inputname,
2942 2 numnod ,ncycle ,nodes%ITAB ,
2943 3 tt ,dt1 ,output%TH%WFEXT ,
2944 4 nodes%D ,nodes%X ,nodes%V ,
2945 5 nodes%VR ,nodes%MS ,nodes%IN ,
2946 6 nodes%STIFN ,nodes%STIFR ,nodes%A ,
2947 7 nodes%AR ,dt2)
2948
2949 CALL trace_out(9)
2950
2951 ENDIF
2952C----------------------------------
2953C FUNCTIONS
2954C----------------------------------
2955
2956 IF(nfunct /= 0.AND.iale+ieuler+glob_therm%ITHERM+nebcs>0) THEN
2957 CALL timfun(python,fv, npc, tf)
2958 IF(ebcs_tab%nebcs_loc/=0) THEN
2959 !!! Need to "extrapolate values" whenever current time
2960 !!! is lower than minimum defined time function or greater than
2961 !!! maximum defined time function
2962 CALL ebcs_extrapol(fv, npc, tf, ebcs_tab)
2963 ENDIF
2964 ENDIF
2965C----------------------------------
2966c /STOP/LSENSOR
2967C-----------------------------------------------
2968 CALL stop_sensor(sensors,h3d_data,dynain_data,output)
2969C
2970C-------------------------------------------------------------------
2971C ACTIVATION-DEACTIVATION of groups of elements
2972C-------------------------------------------------------------------
2973 IF (nactiv>0) THEN
2974 IF(glob_therm%ITHERM_FE > 0 .AND. nspmd > 1 ) THEN
2975 DO i = 1,numnod
2976 nodes%MCP(i) = nodes%MCP(i) * nodes%WEIGHT(i)
2977 nodes%STIFN(i) = nodes%STIFN(i) * nodes%WEIGHT(i)
2978 ENDDO
2979 ENDIF
2980 CALL desacti(ixs ,ixq ,element%SHELL%IXC ,ixp ,ixt ,
2981 . ixr ,ixtg ,iparg ,iactiv ,
2982 . nsensor ,sensors%SENSOR_TAB,element%PON%FSKY ,nodes%X ,elbuf_tab,
2983 . ibcv ,fconv ,ibcr ,fradia ,igroups ,
2984 . factiv ,nodes%TEMP ,nodes%MCP ,pm ,mcp_off ,
2985 . igrbric ,igrquad ,igrsh4n ,igrsh3n ,igrtruss ,
2986 . igrbeam ,igrspring,glob_therm)
2987 ELSE
2988 IF(glob_therm%ITHERM_FE > 0 .AND. nspmd > 1 .AND. iparit == 0) THEN
2989 DO i = 1,numnod
2990 nodes%MCP(i) = nodes%MCP(i) * nodes%WEIGHT(i)
2991 ENDDO
2992 ENDIF
2993 ENDIF
2994 IF (imonm > 0) CALL stoptime(timers,49)
2995
2996C-------------------------------------------------------------------
2997C EXTERNAL FORCES
2998C-------------------------------------------------------------------
2999 IF (nconld/=0 .AND. impl_s/=1) THEN
3000 CALL trace_in(10,0,zero)
3001 IF (imon>0) CALL startime(timers,timer_kin)
3002 IF (imonm > 0) CALL startime(timers,41)
3003 CALL force(
3004 1 nibcld ,ibcl ,lfaccld ,forc ,snpc ,
3005 2 npc ,stf ,tf ,nodes%A ,nodes%V ,
3006 3 nodes%X ,skews ,nodes%AR ,
3007 4 nodes%VR ,nsensor ,sensors%SENSOR_TAB ,wfexc ,element%PON%IAD_CONLD ,
3008 5 lsky ,element%PON%FSKY ,noda_fext ,h3d_data ,cptreac ,
3009 6 fthreac ,nodreac ,output%TH%TH_SURF ,
3010 7 dpl0cld ,vel0cld ,nodes%D ,nodes%DR ,nconld ,
3011 8 numnod ,nfunct ,anim_v ,outp_v ,
3012 9 iparit ,tt ,dt1 ,n2d ,output%TH%WFEXT ,
3013 a impl_s ,python=python, nodes=nodes)
3014C
3015 IF (npinch > 0) THEN
3016 CALL forcepinch(ibcl ,forc ,npc ,tf ,nodes%A ,
3017 2 nodes%V ,nodes%X ,skews%SKEW ,nodes%AR ,nodes%VR ,
3018 3 nsensor,sensors%SENSOR_TAB ,nodes%WEIGHT ,wfexc ,element%PON%IAD_CONLD,
3019 4 element%PON%FSKY , element%PON%FSKY ,noda_fext ,h3d_data,
3020 5 pinch_data%APINCH, pinch_data%VPINCH, python, output%TH%WFEXT)
3021 ENDIF
3022C
3023 IF (imonm > 0) CALL stoptime(timers,41)
3024 IF (imon>0) CALL stoptime(timers,timer_kin)
3025 CALL trace_out(10)
3026 ENDIF
3027C
3028 IF(nfxvel/=0.AND.impl_s/=1) THEN
3029 IF(imon>0) THEN
3030 CALL startime(timers,6)
3031 CALL startime(timers,timer_kin)
3032 IF(imonm > 0) CALL startime(timers,44)
3033 ENDIF
3034 CALL forcefingeo(ibfv ,npc ,tf ,nodes%A ,nodes%V ,nodes%X ,
3035 2 vel ,sensors%SENSOR_TAB ,element%PON%FSKY ,noda_fext ,nodes%ITABM1,
3036 3 h3d_data,nsensor,python,output%TH%WFEXT,nodes)
3037 IF(imon>0) THEN
3038 IF(imonm > 0) CALL stoptime(timers,44)
3039 CALL stoptime(timers,timer_kin)
3040 CALL stoptime(timers,6)
3041 ENDIF
3042 ENDIF
3043C-------------------------------------------------------------------
3044C LOAD PFLUID
3045C-------------------------------------------------------------------
3046 IF(nloadp_f/=0.AND.impl_s/=1) THEN
3047 CALL trace_in(10,0,zero)
3048 IF (imon>0) CALL startime(timers,timer_kin)
3049 IF (imonm > 0) CALL startime(timers,41)
3050 CALL python_begin_openmp(python)
3051!$OMP PARALLEL
3052 CALL pfluid(iloadp ,loadp ,npc ,tf ,nodes%A ,
3053 2 nodes%V ,nodes%X ,xframe ,nodes%MS ,
3054 3 nsensor ,sensors%SENSOR_TAB,wfexc ,output%TH%WFEXT,element%PON%IAD_LOADP ,
3055 4 element%PON%FSKY , element%PON%FSKY ,lloadp ,noda_fext ,h3d_data ,
3056 5 output%TH%TH_SURF, python)
3057!$OMP END PARALLEL
3058 CALL python_end_openmp(python)
3059 IF (imonm > 0) CALL stoptime(timers,41)
3060 IF (imon>0) CALL stoptime(timers,timer_kin)
3061 CALL trace_out(10)
3062 ENDIF
3063
3064C-------------------------------------------------------------------
3065C LOAD PBLAST
3066C----------------------------------
3067 IF(pblast%NLOADP_B/=0.AND.impl_s/=1) THEN
3068 CALL trace_in(10,0,zero)
3069 IF (imon>0) CALL startime(timers,timer_kin)
3070 IF (imonm > 0) CALL startime(timers,41)
3071 CALL pblast_load_computation(output,
3072 1 pblast,iloadp,loadp,nodes%A ,nodes%V ,nodes%X,
3073 2 element%PON%IAD_LOADP ,element%PON%FSKY ,lloadp,noda_fext ,output%DATA%NODA_SURF ,output%DATA%NODA_PEXT,
3074 3 nodes%ITAB,h3d_data, output%TH%TH_SURF ,output%TH%WFEXT)
3075 IF (imonm > 0) CALL stoptime(timers,41)
3076 IF (imon>0) CALL stoptime(timers,timer_kin)
3077 CALL trace_out(10)
3078 IF(pblast%PBLAST_DT%DT<dt2t)THEN
3079 !inter22 kinematic time step
3080 dt2t = pblast%PBLAST_DT%DT
3081 ityptst = 12
3082 neltst = pblast%PBLAST_DT%IDT
3083 pblast%PBLAST_DT%DT = ep20
3084 ENDIF
3085 ENDIF
3086C-------------------------------------------------------------------
3087C LOAD PCYL
3088C----------------------------------
3089 IF (loads%NLOAD_CYL > 0) THEN
3090 CALL pressure_cyl(
3091 . loads ,table ,sensors%NSENSOR,sensors%SENSOR_TAB,iframe ,
3092 . dt1 ,nodes%X ,nodes%V ,nodes%A ,noda_fext ,
3093 . h3d_data ,cptreac ,fthreac ,nodreac ,element%PON%FSKY ,output%TH%WFEXT )
3094 ENDIF
3095!
3096C----------------------
3097C /BCS/NRF
3098C----------------------
3099 IF(bcs%NUM_NRF > 0)THEN
3100 CALL bcs_nrf(n2d , numnod ,
3101 . nodes%X , nodes%V , nodes%A ,
3102 . nixs , nixtg , nixq ,
3103 . numels , numeltg , numelq ,
3104 . ixs , ixtg , ixq ,
3105 . iparit , lsky , element%PON%FSKY,
3106 . output%TH%WFEXT, noda_fext, dt1 ,
3107 . anim_v , outp_v , h3d_data )
3108 ENDIF
3109C----------------------
3110
3111 IF( glob_therm%NUMCONV + glob_therm%NUMRADIA > 0 .AND. glob_therm%ITHERM_FE > 0 )THEN
3112
3113C========================================================================================
3114C PARALLEL SECTION (SMP)
3115C========================================================================================
3116
3117!$OMP PARALLEL
3118C-------------------------------------------------------------------
3119C BC -- CONVECTION for heat_transfert by FEM
3120C----------------------------------------------
3121 IF (glob_therm%NUMCONV > 0 .AND. glob_therm%ITHERM_FE > 0) THEN
3122 IF (imon>0) CALL startime(timers,timer_kin)
3123 IF (imonm > 0) CALL startime(timers,41)
3124 CALL convec(ibcv ,fconv ,npc ,tf , nodes%X ,
3125 1 nodes%TEMP ,nsensor,sensors%SENSOR_TAB,fthe, element%PON%IAD_CONV,
3126 2 fthesky, python,glob_therm)
3127 IF (imonm > 0) CALL stoptime(timers,41)
3128 IF (imon>0) CALL stoptime(timers,timer_kin)
3129 ENDIF
3130C-------------------------------------------------------------------
3131C BC -- RADIATION to environment for heat_transfert by FEM
3132C-----------------------------------------------------------
3133 IF (glob_therm%NUMRADIA > 0 .AND. glob_therm%ITHERM_FE > 0) THEN
3134 IF (imon>0) CALL startime(timers,timer_kin)
3135 IF (imonm > 0) CALL startime(timers,41)
3136 CALL radiation(ibcr, fradia, npc, tf, nodes%X ,
3137 1 nodes%TEMP, nsensor,sensors%SENSOR_TAB, fthe, element%PON%IAD_RADIA,
3138 2 fthesky, python,glob_therm)
3139 IF (imonm > 0) CALL stoptime(timers,41)
3140 IF (imon>0) CALL stoptime(timers,timer_kin)
3141 ENDIF
3142!$OMP END PARALLEL
3143 ENDIF
3144
3145C========================================================================================
3146C NON PARALLEL SECTION (SMP)
3147C========================================================================================
3148
3149C-------------------------------------------------------------------
3150C BC -- THERMAL FLUX for heat_transfert by FEM
3151C-------------------------------------------------
3152 IF (glob_therm%NFXFLUX > 0 .AND. glob_therm%ITHERM_FE > 0) THEN
3153 IF (imon>0) CALL startime(timers,timer_kin)
3154 IF (imonm > 0) CALL startime(timers,41)
3155 CALL fixflux(ibfflux, fbfflux, npc, tf, nodes%X, ixs,
3156 . nsensor,sensors%SENSOR_TAB, fthe, element%PON%IAD_FXFLUX, fthesky, python,
3157 . glob_therm)
3158 IF (imonm > 0) CALL stoptime(timers,41)
3159 IF (imon>0) CALL stoptime(timers,timer_kin)
3160 ENDIF
3161
3162
3163 icontact_old(1:sicontact) = icontact(1:sicontact)
3164 IF(nvolu/=0)THEN
3165 IF (imonm > 0) CALL startime(timers,50)
3166 CALL trace_in(11,0,zero)
3167 nn = numelc+numeltg+ibagsurf
3168 n0 = 1 + 3*nn
3169 IF(intbag/=0)THEN
3170 n1 = n0+ nn
3171 ELSE
3172 n1 = n0
3173 ENDIF
3174 sporo = numelc+numeltg+ibagsurf
3175C
3176 n=1+ninter+nrwall+nrbody+nsect+njoint+nrbag
3177 IF (impl_s > 0 .AND. ismdisp >0) THEN
3178 CALL assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
3179 ELSE
3180 CALL assign_ptrx(ptrx,nodes%X,numnod)
3181 ENDIF
3182 CALL monvol0(
3183 1 monvol ,volmon ,ptrx ,nodes%A ,
3184 2 npc ,tf ,nodes%V ,wa ,
3185 3 fsav(1,n) ,nsensor ,sensors%SENSOR_TAB ,igrsurf ,
3186 4 fr_mv ,element%PON%IAD_MV ,sicontact ,sporo ,
3187 5 element%PON%FSKY,icontact ,wa(n0) ,iparg ,
3188 6 elbuf_tab ,geo ,igeo ,
3189 7 pm ,ipm ,ipart ,ipart(k3) ,
3190 8 ipart(k8) ,igroupc ,igrouptg ,noda_fext ,
3191 9 1 ,h3d_data ,t_monvol ,frontier_global_mv,
3192 a output, python )
3193 CALL trace_out(11)
3194 IF (imonm > 0) CALL stoptime(timers,50)
3195 ENDIF
3196 IF (imon>0) CALL stoptime(timers,6)
3197C
3198 IF (nflow>0) THEN
3199 CALL flow0(output,iflow, rflow, wiflow, wrflow, nodes%X,
3200 . nodes%V, nodes%A, npc, tf, sensors%SENSOR_TAB,
3201 . nbgauge,lgauge, gauge , nsensor,
3202 . igrv, agrv ,nfunct ,python, output%TH%WFEXT)
3203 ENDIF
3204
3205C----------------------------------------
3206C MPI COMMUNICATION BEFORE SORTING
3207C----------------------------------------
3208 IF (imon>0) CALL startime(timers,13)
3209 IF (imonm > 0) CALL startime(timers,24)
3210 IF(nspmd>1)THEN
3211 l1 = 1+nixs*numels + nsvois*nixs
3212 l2 = l1+6*numels10
3213 l3 = l2+12*numels20
3214 CALL spmd_i7xvcom2(
3215 1 ipari ,nodes%X ,nodes%V ,nodes%MS ,
3216 2 imsch ,i2msch ,dt2prev ,intlist ,nbintc ,
3217 3 islen7 ,irlen7 ,islen11 ,irlen11 ,islen17 ,
3218 4 irlen17 ,ixs ,ixs(l3) ,nsensor ,
3219 5 igrbric ,nodes%TEMP ,2 ,irlen7t ,islen7t ,
3220 6 irlen20 ,islen20 ,irlen20t,islen20t,irlen20e,
3221 7 islen20e,nodes%IKINE ,diag_sms,sensors%SENSOR_TAB,interfaces%INTBUF_TAB ,int24e2euse,
3222 8 forneqs ,multi_fvm,interfaces,sh_offset_tab%NNSH_OSET)
3223 END IF
3224 IF (imonm > 0) CALL stoptime(timers,24)
3225 IF (imon>0) CALL stoptime(timers,13)
3226
3227
3228C--------------------------------------------------------
3229C Interface 24 - Communication Part 4/4
3230C--------------------------------------------------------
3231
3232 IF (int24use == 1)THEN
3233 IF (imon>0) CALL startime(timers,timer_contfor)
3234 CALL spmd_exch_i24(ipari ,interfaces%INTBUF_TAB ,nodes%ITAB ,
3235 * nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist ,nbintc,
3236 * iad_i24 ,fr_i24 ,sfr_i24,i24maxnsne,4,
3237 * int24e2euse)
3238 IF (imon>0) CALL stoptime(timers,timer_contfor)
3239 ENDIF
3240
3241C
3242C Section processing in SPMD comm before FORINT
3243C
3244 IF(nsect>0.AND.nspmd>1) THEN
3245 lsend1 = iad_sec(1,nspmd+1)
3246 lrecv1 = iad_sec(2,nspmd+1)
3247 lsend2 = iad_sec(3,nspmd+1)
3248 lrecv2 = iad_sec(4,nspmd+1)
3249 CALL spmd_exch_sec(nstrf ,nodes%X ,nodes%MS ,nodes%WEIGHT,xsec ,
3250 2 fr_sec,iad_sec,lsend1,lrecv1,lsend2,
3251 3 lrecv2,nodes%WEIGHT_MD)
3252 END IF
3253C----------------------------------------------------------
3254C INTER/TYPE21 ROTATION
3255C----------------------------------------------------------
3256 IF(nintstamp/=0)THEN
3257 CALL intstamp_init(intstamp,nodes%ICODR)
3258 END IF
3259C---------------------------------------------
3260C TETRA4 : SMOOTH FINITE ELEMENT FORMULATIONS
3261C---------------------------------------------
3262 IF(isfem >= 1) THEN
3263 IF(glob_therm%ITHERM == 0)THEN
3264 l1 = 1+nixs*numels + nsvois*nixs
3265 CALL s4lagsfem(iparg, ixs, nodes%X, nodes%V, elbuf_tab, sfem_nodvar, s_sfem_nodvar,
3266 . nodes%BOUNDARY_ADD, nodes%BOUNDARY, ixs(l1), nodes%XDP, sxdp,
3267 . numnod, nodes%BOUNDARY_SIZE , nspmd, numels, numels8, numels10, nparg, ngroup, iresp)
3268 ENDIF
3269 ENDIF
3270
3271C----------------------------------------
3272C COLLISION DETECTION FOR INTERFACES 7 (CALL BARRIER IN I7BUCE_CRIT)
3273C----------------------------------------
3274 IF(ninter/=0) THEN
3275 CALL trace_in(8,2,zero)
3276 IF (imon > 0) CALL startime(timers,timer_contsort)
3277 l1 = 1+nixs*numels + nsvois*nixs
3278 l2 = l1+6*numels10
3279 l3 = l2+12*numels20
3280 lskyi_count = 0
3281 lskyi_sms_new = 0
3282
3283 IF(idtmins/=0) THEN
3284 nativ_sms_siz = numnod
3285 ELSE
3286 nativ_sms_siz = 0
3287 ENDIF
3288
3289 IF(coupling%active .AND. tt > zero) dt2t = min(dt2t,coupling%DT_LIMIT)
3290
3291C========================================================================================
3292C PARALLEL SECTION (SMP)
3293C========================================================================================
3294 IF (sh_offset_tab%NNSH_OSET > 0) THEN
3295 CALL assign_ptrx(ptrx,xyz,numnod)
3296 ELSEIF (impl_s > 0 .AND. ismdisp >0) THEN
3297 CALL assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
3298 ELSE
3299 CALL assign_ptrx(ptrx,nodes%X,numnod)
3300 ENDIF
3301 inter_errors = 0
3302
3303!$omp parallel private(itsk,dt2tt,neltstt,ityptstt)
3304 dt2tt = dt2t
3305 neltstt = neltst
3306 ityptstt= ityptst
3307 itsk = omp_get_thread_num()
3308 CALL inttri(output ,timers,
3309 1 ipari ,ptrx ,w , inter_errors,
3310 2 nodes%V ,nodes%MS ,nodes%IN ,nodes%BOUNDARY_ADD ,
3311 3 nodes%BOUNDARY ,nodes%VR ,isendto ,ircvfrom ,
3312 4 newfront ,itsk ,wa ,dt2tt ,
3313 5 nodes%ITAB ,neltstt ,ityptstt,nodes%WEIGHT ,
3314 6 intlist ,nbintc ,nodes%KINET ,dretri ,
3315 7 islen7 ,irlen7 ,islen11 ,irlen11 ,
3316 8 nodes%TEMP ,igrbric ,igrsh3n ,eminx ,
3317 9 ixs ,ixs(l3) ,ixs(l2) ,islen17 ,
3318 a irlen17 ,irlen7t ,islen7t ,num_imp1 ,
3319 b ind_imp ,intstamp,thknod ,irlen20 ,
3320 c islen20 ,irlen20t,islen20t,irlen20e ,
3321 d islen20e ,renum ,nsnfiold,xslv ,
3322 e xmsr ,vslv ,vmsr ,size_t ,
3323 f nativ_sms ,dxancg ,nodes%IKINE ,diag_sms ,
3324 g count_remslv,count_remslve ,ale_connectivity,
3325 h ixtg ,sensors,delta_pmax_gap,interfaces%INTBUF_TAB,
3326 i delta_pmax_gap_node,iad_frnor,fr_nor,
3327 j nb25_candt,nb25_impct,nb25_dst1,nb25_dst2,intlist25,
3328 k interfaces%SPMD_ARRAYS%IAD_FREDG,interfaces%SPMD_ARRAYS%FR_EDG,nodes%MAIN_PROC,nativ_sms,i_opt_stok ,
3329 l multi_fvm,iparg ,elbuf_tab, h3d_data, t2main_sms,
3330 m lskyi_sms_new ,forneqs ,int7itied,idel7nok_sav,maxdgap,
3331 n t2fac_sms,nodes%ICODT,nodes%ISKEW ,fskyn25 ,addcsrect,procnor,
3332 o inter_struct,sort_comm,rnum_siz,nativ_sms_siz,temp_siz,
3333 p interfaces,glob_therm,component)
3334C
3335#include "lockon.inc"
3336 IF(dt2tt<dt2t)THEN
3337 dt2t = dt2tt
3338 neltst = neltstt
3339 ityptst= ityptstt
3340 ENDIF
3341#include "lockoff.inc"
3342
3343!$OMP END PARALLEL
3344 IF(inter_errors > 0) THEN
3345 mstop = 2
3346 ENDIF
3347
3348
3349C========================================================================================
3350
3351C ----------------------------------------------------
3352C Check if ISKY & FSKYI are sufficiently allocate
3353C If not reallocate them
3354C ----------------------------------------------------
3355
3356 IF(iparit >0)THEN
3357 IF(SIZE(interfaces%PON%ADSKYI,1) < numnod+2) then
3358 deallocate(interfaces%PON%ADSKYI)
3359 allocate(interfaces%PON%ADSKYI(0:numnod+1))
3360 endif
3361 IF ( nisky+lskyi_count > sisky) THEN
3362 CALL reallocate_i_skyline(lskyi_count,1,glob_therm%INTHEAT,glob_therm%nodadt_therm,interfaces%PON)
3363 ENDIF
3364
3365C
3366C Remote Secnd Nodes
3367 IF (nspmd >1)THEN
3368 CALL upgrade_rem_2ry(ipari,count_remslv,count_remslve,glob_therm%nodadt_therm)
3369 count_remslv(1:ninter)= 0
3370 count_remslve(1:ninter)= 0
3371 ENDIF
3372
3373 ENDIF
3374
3375 IF (imon > 0) CALL stoptime(timers,timer_contsort)
3376 CALL trace_out(8)
3377 ENDIF
3378
3379C ----------------------------------------------------
3380C SMS - Check if ISKYI_SMS & MSKYI_SMS are sufficiently allocate
3381C If not reallocate them
3382C ----------------------------------------------------
3383
3384 IF ((idtmins == 2.OR.idtmins_int/=0).AND.(ninter > 0)) THEN
3385C
3386 IF (lskyi_sms_new > lskyi_sms) THEN
3387C
3388 DEALLOCATE(iskyi_sms,mskyi_sms,jdii_sms,lti_sms)
3389C
3390 lskyi_sms = nint(lskyi_sms_new*1.2)
3391 ALLOCATE(mskyi_sms(lskyi_sms),iskyi_sms(lskyi_sms,3),
3392 . jdii_sms(2*lskyi_sms),lti_sms(2*lskyi_sms),
3393 . stat=ierror)
3394C
3395 IF(ierror/=0) THEN
3396 CALL ancmsg(msgid=19,anmode=aninfo,
3397 . c1='LSKYI_SMS RESIZE')
3398 CALL arret(2)
3399 ENDIF
3400C
3401 ENDIF
3402 ENDIF
3403
3404C--------------------------------------------------------
3405C INTERFACE 25 - Communication IRTLM, TIME_S, etc :: send
3406C--------------------------------------------------------
3407 IF(ninter25 /= 0)THEN
3408
3409 IF(nspmd > 1)THEN
3410 IF (imon>0) CALL startime(timers,timer_exfor)
3411 CALL spmd_exch_i25(ipari ,interfaces%INTBUF_TAB ,nodes%ITAB ,
3412 * nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist ,nbintc,
3413 * iad_i25 ,fr_i25 ,sfr_i25 ,1 )
3414 CALL spmd_exch_i25(ipari ,interfaces%INTBUF_TAB ,nodes%ITAB ,
3415 * nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist ,nbintc,
3416 * iad_i25 ,fr_i25 ,sfr_i25 ,2 )
3417 IF (imon>0) CALL stoptime(timers,timer_exfor)
3418 END IF
3419
3420 END IF
3421
3422C-------------------------------------------------------
3423C ADAPTIVE MESHING
3424C Get ICONTACT After sort, After Contact forces if SPMD
3425C Before Contact forces if SMP
3426C-------------------------------------------------------
3427 IF(nadmesh > 0.AND.impl_s==0)THEN
3428 IF (imon>0) CALL startime(timers,36)
3429C
3432 iadmesh=0
3433 ichkadm=0
3434 IF(tt >= tadmesh+dtadmesh)THEN
3435 tadmesh=tadmesh+dtadmesh
3436 ichkadm=1
3437 END IF
3438C
3439 IF(ichkadm/=0 .AND. iadmerrt/=0)THEN
3440C
3441 CALL admerr(
3442 . element%SHELL%IXC ,ixtg ,nodes%X ,iparg ,elbuf_tab ,
3443 . ipart ,ipart(k3),ipart(k8),err_thk_sh4 ,err_thk_sh3 ,
3444 . nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,nodes%WEIGHT ,sh4tree ,sh3tree ,
3445 . admerr_area_sh4, admerr_area_sh3, admerr_area_nod,
3446 . admerr_thick_sh4,admerr_thick_sh3,admerr_thick_nod )
3447 END IF
3448
3449C========================================================================================
3450C PARALLEL SECTION (SMP)
3451C========================================================================================
3452
3453!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
3454 itsk = omp_get_thread_num()
3455 nodftsk = 1+itsk*numnod/ nthread
3456 nodltsk = (itsk+1)*numnod/nthread
3457
3458 CALL admdiv(element%SHELL%IXC ,ipart(k3),ixtg ,ipart(k8),ipart,
3459 . itsk ,icontact ,iparg,nodes%X ,nodes%MS ,
3460 . nodes%IN ,rcontact ,elbuf_tab,nodftsk ,nodltsk,
3461 . igeo ,ipm ,sh4tree,padmesh,msc ,
3462 . inc ,sh3tree ,mstg ,intg ,ptg ,
3463 . acontact,pcontact,err_thk_sh4,err_thk_sh3,mscnd,
3464 . incnd,pm ,nodes%MCP ,mcpc ,mcptg,
3465 . glob_therm%ITHERM_FE)
3466 ngdone = 1
3467C /---------------/
3468 CALL my_barrier
3469C /---------------/
3470 IF(iadmrule /= 0)THEN
3471 IF(iadmesh > 0)THEN
3472 CALL admregul(element%SHELL%IXC ,ipart(k3),ixtg ,ipart(k8),ipart,
3473 . itsk ,iparg ,nodes%X ,nodes%MS ,nodes%IN ,
3474 . elbuf_tab,nodftsk ,nodltsk,igeo ,ipm ,
3475 . sh4tree,msc ,inc ,sh3tree,mstg ,
3476 . intg ,ptg ,mscnd ,incnd ,pm ,
3477 . nodes%MCP ,mcpc ,mcptg ,glob_therm%ITHERM_FE)
3478C /---------------/
3479 CALL my_barrier
3480C /---------------/
3481 END IF
3482 END IF
3483
3484 IF(iadmesh > 0)THEN
3485 IF(itsk==0) THEN
3486 CALL admordr(sh4tree,sh3tree,element%SHELL%IXC,ixtg)
3487 IF(istatcnd /= 0) CALL cndordr(ipart,ipart(k3),ipart(k8),
3488 . sh4tree,sh3tree)
3489 END IF
3490 iflgadm=1
3491 CALL admgvid(
3492 1 iparg ,elbuf_tab ,element%PON%FSKY ,element%PON%FSKY ,fthesky,
3493 2 element%PON%IADC,element%PON%IAD_TG,iflgadm,igrouc,ngrouc ,
3494 3 condnsky ,glob_therm%NODADT_THERM)
3495 CALL my_barrier
3496 ngdone = 1
3497 END IF
3498 rcontact(nodftsk:nodltsk)=ep30
3499 acontact(nodftsk:nodltsk)=ep30
3500 pcontact(nodftsk:nodltsk)=zero
3501!$OMP END PARALLEL
3502
3503 IF (imon>0) CALL stoptime(timers,36)
3504 END IF
3505C--- // N/3 --------------------------------------------------------
3506C EXTERNAL AND INTERNAL FORCES (ANIM)
3507C--------------------------------
3508
3509 IF(anim_v(5)+outp_v(5)+h3d_data%N_VECT_FINT+
3510 . anim_v(6)+outp_v(6)+h3d_data%N_VECT_FEXT>0
3511 . .AND.impl_s==0)THEN
3512
3513C========================================================================================
3514C PARALLEL SECTION (SMP)
3515C========================================================================================
3516C--- // ----------------------------------------
3517C EXTERNAL FORCES (ANIM, OUTP, H3D)
3518C-----------------------------------------------
3519!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
3520 itsk = omp_get_thread_num()
3521 nodftsk = 1+itsk*numnod/ nthread
3522 nodltsk = (itsk+1)*numnod/nthread
3523 CALL forani1(output,nodes%A ,nfia,nfea,nfoa,nodftsk,nodltsk,noda_fext,h3d_data)
3524!$OMP END PARALLEL
3525C
3526 ENDIF
3527C--------------------------------------------------------
3528C ALE flux + forces
3529C--------------------------------------------------------
3530 need_comm_inter18 = .false.
3531 IF (iale+ieuler+glob_therm%ITHERM/=0.AND.global_active_ale_element) THEN
3532 CALL startime(timers,macro_timer_alemain)
3533C-----------------------------
3534C SPMD : MS=0 boundary nodes if weight/=1 (for amas03)
3535C only for PARITH/OFF
3536C-----------------------------
3537 lenqmv = 1
3538 IF(trimat>0)lenqmv = min(1,trimat)*(numels+numelq)
3539 nv46 = 6
3540 IF(n2d /= 0) nv46 = 4
3541 CALL trace_in(12,0,zero)
3542
3543C========================================================================================
3544C PARALLEL SECTION (SMP)
3545C========================================================================================
3546 CALL python_begin_openmp(python)
3547!$OMP PARALLEL
3548!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
3549!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,DT2TT,NELTSTT,ITYPTSTT)
3550!$OMP+ PRIVATE(GREFTSK,GRELTSK)
3551
3552C Init var parallel SMP
3553 CALL smp_init(
3554 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
3555 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
3556 3 greftsk,greltsk)
3557 dt2tt = dt2t
3558 neltstt = neltst
3559 ityptstt = ityptst
3560 IF(iparit == 1) ndtsk = 1
3561C
3562 CALL alemain(timers,
3563 1 pm ,geo ,nodes%X ,nodes%A(1,ndtsk) ,nodes%V ,
3564 2 nodes%MS ,wa ,elbuf_tab ,bufmat ,partsav(ipmtsk) ,tf,
3565 3 val2 ,veul ,fv ,nodes%STIFN(ndtsk),element%PON%FSKY,eani,
3566 4 phi ,fill ,dfill ,alph ,skews%SKEW ,w,
3567 5 nodes%D ,dsave ,asave ,dt2tt ,dt2save ,xcell,
3568 6 iparg ,npc ,ixs ,ixq, ixtg ,element%PON%IADS,
3569 7 ifill ,nodes%ICODT,nodes%ISKEW ,ims ,element%PON%IADQ ,
3570 8 neltstt ,ityptstt ,ipart(k1) ,ipart(k2) ,itsk ,
3571 a nodftsk ,nodltsk ,nbrcvois ,nodes%TEMP ,output%TH%TH_SURF%CHANNELS,
3572 b nbsdvois ,lnrcvois ,lnsdvois ,nercvois ,nesdvois ,lercvois ,
3573 c lesdvois ,isizxv ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY,element%PON%FSKYM,msnf ,
3574 d ipari ,segvar ,nodes%ITAB ,iskwn ,diffusion ,iresp,
3575 e volmon ,fsav ,igrsurf ,neltsa ,
3576 f ityptsa ,nodes%WEIGHT ,npsegcom ,lsegcom ,ipm ,igeo,
3577 g nodes%ITABM1 ,lenqmv ,nv46 ,nodes%A ,gresav ,
3578 h grth ,igrth ,lgauge ,gauge ,mssa ,
3579 i dmels ,igaup ,ngaup ,table ,nodes%MS0 ,
3580 j nodes%XDP ,igrnod ,sfem_nodvar_ale ,interfaces%PON%FSKYI,interfaces%PON%ISKY, s_sfem_nodvar,
3581 k interfaces%INTBUF_TAB ,ixt ,igrv ,agrv ,sensors ,
3582 l lgrav ,condnsky ,condn ,ms_2d ,multi_fvm ,igrtruss ,
3583 m igrbric ,nloc_dmg ,id_global_vois,face_vois ,ebcs_tab ,ale_connectivity,
3584 n mat_elem ,h3d_data ,dt ,output ,need_comm_inter18 ,idtmins ,
3585 o idtmin ,maxfunc ,imon_mat ,userl_avail ,
3586 p impl_s ,idyna ,python ,mat_elem%MAT_PARAM,glob_therm)
3587
3588 IF(int22 /=0) call my_barrier !INTER22in input files - get also IDT_INT22
3589#include "lockon.inc"
3590 IF(int22 == 0)THEN
3591 IF(dt2tt<dt2t)THEN
3592 dt2t = dt2tt
3593 ityptst= ityptstt
3594 neltst = neltstt
3595 ENDIF
3596 ELSE
3597 IF(idt_int22 /= 0)THEN
3598!inter22 kinematic time step
3599 dt2t = dt22_min
3600 ityptst= 10
3601 neltst = 1
3602 ELSE
3603!cell time step
3604 IF(dt2tt<dt2t)THEN
3605 dt2t = dt2tt
3606 ityptst= ityptstt
3607 neltst = neltstt
3608 ENDIF
3609 ENDIF
3610 ENDIF
3611#include "lockoff.inc"
3612
3613!$OMP END PARALLEL
3614 CALL python_end_openmp(python)
3615
3616 IF(need_comm_inter18) THEN
3617 CALL spmd_exch_inter_18(ninter,nspmd,number_inter18,sxcell,inter18_list,
3618 . xcell,multi_fvm,xcell_remote,interfaces%INTBUF_TAB,ale_connectivity)
3619 ENDIF
3620 CALL trace_out(12)
3621 CALL stoptime(timers,macro_timer_alemain)
3622 ELSE
3623 ale%SUB%IFSUB=0
3624 ale%SUB%IFSUBM=0
3625 t1s=tt
3626 ENDIF
3627
3628C========================================================================================
3629C NON PARALLEL SECTION (SMP)
3630C========================================================================================
3631
3632 IF(ale%SUB%IALESUB ==2 .AND. ale%SUB%IFSUB==2)GOTO 22
3633 21 CONTINUE
3634C
3635 IF (imon>0) CALL startime(timers,6)
3636 IF (imonm > 0) CALL startime(timers,51)
3637C----------------------------------
3638C INTERNAL FORCES:S8FORC3
3639C----------------------------------
3640 CALL forints(
3641 1 pm ,geo ,nodes%X ,nodes%A ,nodes%AR ,
3642 2 nodes%V ,nodes%VR ,nodes%MS ,nodes%IN ,w ,
3643 3 elbuf ,val2 ,veul ,fv ,
3644 4 nodes%STIFN ,nodes%STIFR ,element%PON%FSKY ,tf ,bufmat ,
3645 5 partsav ,output%DATA%FOPT,fsav ,
3646 6 skews%SKEW,dt2t ,
3647 7 element%PON%IADS ,iparg ,npc ,ixs ,
3648 8 neltst ,ityptst ,ipart ,ipart(k1) ,nodes%ITAB ,
3649 9 interfaces%PON%FSKYI ,bufgeo ,kxx ,ixx ,interfaces%PON%ISKY ,
3650 a ipart(k9) ,gresav ,grth ,
3651 b igrth ,elbuf_tab )
3652 IF (imonm > 0) CALL stoptime(timers,51)
3653 IF (imon>0) CALL stoptime(timers,6)
3654
3655C========================================================================================
3656C PARALLEL SECTION (SMP)
3657C========================================================================================
3658 CALL python_begin_openmp(python)
3659!$OMP PARALLEL
3660!$omp+ private(itsk,nodftsk,nodltsk,numntsk,ndtsk,ipmtsk,igmtsk)
3661!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,GREFTSK,GRELTSK)
3662
3663C Init var parallel SMP
3664 CALL smp_init(
3665 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
3666 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
3667 3 greftsk,greltsk)
3668
3669C-------------------------------------------------------
3670C RESET ICONTACT(1:NUMNOD)
3671C-------------------------------------------------------
3672 IF(kcontact/=0)THEN
3673 IF(ialelag >0)
3674 . ifoam_cont(nodftsk:nodltsk)= icontact(nodftsk:nodltsk)
3675C
3676 icontact(nodftsk:nodltsk)=0
3677 END IF
3678
3679 IF(istatcnd /= 0)THEN
3680 IF(iparit==0)THEN
3681 DO n=1,numnod
3682 stcnd(ndtsk+n-1) = zero
3683 END DO
3684 ELSE
3685 DO n=nodftsk,nodltsk
3686 stcnd(n) = zero
3687 END DO
3688 END IF
3689 END IF
3690C int 24+pxfem
3691 IF(intplyxfem > 0) THEN
3692 DO n=nodftsk,nodltsk
3693 wagap(1,n) = zero
3694 wagap(2,n) = zero
3695 END DO
3696 ENDIF
3697C
3698!$OMP END PARALLEL
3699 CALL python_end_openmp(python)
3700
3701 IF(anim_ply > 0) vn_nod = zero
3702
3703
3704C--------------move to here to keep TAGNCONT for output
3705 IF(nloadp_hyd_inter > 0 )THEN
3706
3707C========================================================================================
3708C PARALLEL SECTION (SMP)
3709C========================================================================================
3710
3711!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
3712 itsk = omp_get_thread_num()
3713 nodftsk = 1+itsk*numnod/ nthread
3714 nodltsk = (itsk+1)*numnod/nthread
3715 DO k=1,nloadp_hyd_inter
3716 tagncont(k,nodftsk:nodltsk) = 0
3717 ENDDO
3718
3719!$OMP END PARALLEL
3720
3721 ENDIF
3722C--- // 3N ------------------------------
3723C INTERFACES WITH VOID OPENING
3724C----------------------------------------
3725 IF(ninter/=0) THEN
3726
3727 CALL trace_in(4,1,zero)
3728 IF (imon>0) CALL startime(timers,timer_contsort)
3729
3730 dt2tt = dt2t
3731 neltstt = neltst
3732 ityptstt= ityptst
3733 IF (impl_s>0) THEN
3734 iadisk = 1
3735 ELSE
3736 iadisk = 1
3737 ENDIF
3738 IF (sh_offset_tab%NNSH_OSET > 0) THEN
3739 CALL assign_ptrx(ptrx,xyz,numnod)
3740 ELSEIF (impl_s > 0 .AND. ismdisp >0) THEN
3741 CALL assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
3742 ELSE
3743 CALL assign_ptrx(ptrx,nodes%X,numnod)
3744 ENDIF
3745 CALL intfop8(output,
3746 1 ipari ,ptrx ,nodes%A ,
3747 2 nodes%ICODT ,fsav ,wa(1),nodes%V ,nodes%MS ,
3748 3 dt2tt ,neltstt ,ityptstt ,nodes%ITAB ,nodes%STIFN ,
3749 4 npc ,tf ,interfaces%PON%FSKYI ,interfaces%PON%ISKY ,nodes%VR ,
3750 5 output%DATA%VECT_CONT ,nodes%IN ,bufsf ,output%DATA%VECT_PCONT ,nsensor,
3751 6 output%DATA%VECT_PCONT_2 ,icontact ,rcontact ,num_impl(1,1),
3752 7 ns_imp(iadisk),ne_imp(iadisk),nt_imp ,sensors%SENSOR_TAB,interfaces%INTBUF_TAB ,
3753 8 h3d_data ,pskids ,tagncont,kloadpinter,loadpinter,
3754 9 loadp_hyd_inter)
3755
3756 IF(dt2tt<dt2t)THEN
3757 dt2t = dt2tt
3758 neltst = neltstt
3759 ityptst= ityptstt
3760 ENDIF
3761
3762
3763C=======================================================================================
3764C PARALLEL SECTION (SMP)
3765C========================================================================================
3766 CALL python_begin_openmp(python)
3767!$OMP PARALLEL
3768!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
3769!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,IADISK)
3770!$OMP+ PRIVATE(DT2TT,NELTSTT,ITYPTSTT,GREFTSK,GRELTSK)
3771
3772C Init var parallel SMP
3773 CALL smp_init(
3774 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
3775 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
3776 3 greftsk,greltsk)
3777
3778 dt2tt = dt2t
3779 neltstt = neltst
3780 ityptstt= ityptst
3781
3782
3783 IF(istatcnd /= 0 .AND. iparit == 0)THEN
3784 DO n=1,numnod
3785 stcnd(ndtsk+n-1)=-nodes%STIFN (ndtsk+n-1)
3786 END DO
3787 END IF
3788
3789 IF (impl_s>0) THEN
3790 iadisk = 1+itsk*nint7
3791 ELSE
3792 iadisk = 1
3793 ENDIF
3794 IF(iparit == 1) ndtsk = 1
3795
3796 CALL intfop1(output,
3797 1 ipari ,nodes%X ,nodes%A(1,ndtsk) ,
3798 2 nodes%ICODT ,fsav ,wa(nwaftsk),nodes%V ,nodes%MS ,
3799 3 dt2tt ,neltstt ,ityptstt ,nodes%ITAB ,nodes%STIFN(ndtsk) ,
3800 4 npc ,tf ,interfaces%PON%FSKYI ,interfaces%PON%ISKY ,nodes%VR ,
3801 6 output%DATA%VECT_CONT ,nodes%IN ,igrsurf ,bufsf ,output%DATA%VECT_PCONT ,
3802 7 output%DATA%VECT_PCONT_2 ,icontact ,rcontact ,num_impl(1,itsk+1),
3803 8 ns_imp(iadisk),ne_imp(iadisk),nt_imp ,sensors%SENSOR_TAB,interfaces%INTBUF_TAB,
3804 9 h3d_data ,nsensor)
3805
3806#include "lockon.inc"
3807 IF(dt2tt<dt2t)THEN
3808 dt2t = dt2tt
3809 neltst = neltstt
3810 ityptst= ityptstt
3811 ENDIF
3812#include "lockoff.inc"
3813
3814!$OMP END PARALLEL
3815 CALL python_end_openmp(python)
3816
3817 IF(impl_s>0) THEN
3818 CALL re2int5(nt_imp,num_imp,ns_imp,ne_imp,num_impl,ipari,nint7)
3819 nt_imp5=nt_imp
3820 END IF
3821C
3822 IF (imon>0) CALL stoptime(timers,timer_contsort)
3823 CALL trace_out(4)
3824
3825C----------------------------------------
3826C INTERFACES: computation of forces
3827C----------------------------------------
3828 CALL trace_in(4,2,zero)
3829 IF (imon>0) CALL startime(timers,timer_contfor)
3830
3831 l1 = 1+nixs*numels + nsvois*nixs
3832 l2 = l1+6*numels10
3833 l3 = l2+12*numels20
3834
3835C--------------------------------------------------------
3836C INTERFACE 25 - Communication IRTLM, TIME_S, etc :: Reception
3837C--------------------------------------------------------
3838 IF(nspmd > 1)THEN
3839 IF(ninter25 /= 0)THEN
3840 IF (imon>0) CALL startime(timers,timer_exfor)
3841 CALL spmd_exch_i25(ipari ,interfaces%INTBUF_TAB,nodes%ITAB ,
3842 * nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist ,nbintc,
3843 * iad_i25 ,fr_i25 ,sfr_i25 ,3 )
3844 CALL spmd_exch_i25(ipari ,interfaces%INTBUF_TAB,nodes%ITAB ,
3845 * nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist ,nbintc,
3846 * iad_i25 ,fr_i25 ,sfr_i25 ,4 )
3847 IF (imon>0) CALL stoptime(timers,timer_exfor)
3848 ENDIF
3849 END IF
3850C========================================================================================
3851C PARALLEL SECTION (SMP)
3852C========================================================================================
3853
3854 ncont = 0 ! Initialisation number of nodes tagged for FCONT storage
3855 IF (impl_s>0) THEN
3856 ntmp = nt_imp5 + nt_imp1
3857 ENDIF
3858 IF (sh_offset_tab%NNSH_OSET > 0) THEN
3859 CALL assign_ptrx(ptrx,xyz,numnod)
3860 ELSEIF (impl_s > 0 .AND. ismdisp >0) THEN
3861 CALL assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
3862 ELSE
3863 CALL assign_ptrx(ptrx,nodes%X,numnod)
3864 ENDIF
3865 CALL python_begin_openmp(python)
3866!$OMP PARALLEL
3867!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IADISK,IGMTSK)
3868!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,DT2TT,NELTSTT,ITYPTSTT)
3869!$OMP+ PRIVATE(GREFTSK,GRELTSK)
3870!$OMP+ PRIVATE(IDX_FTHE,IDX_CONDN,IDX_PINCH)
3871C Init var parallel SMP
3872 CALL smp_init(
3873 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
3874 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
3875 3 greftsk,greltsk)
3876 dt2tt = dt2t
3877 neltstt = neltst
3878 ityptstt= ityptst
3879
3880 IF (impl_s>0) THEN
3881 iadisk = 1+ntmp+itsk*(nint7-ntmp)
3882 ELSE
3883 iadisk = 1
3884 ENDIF
3885 idx_fthe = ndtsk
3886 IF(ndtsk>ifthe) idx_fthe = 1
3887 idx_condn = ndtsk
3888 IF(ndtsk>icondn)idx_condn = 1
3889 idx_pinch = ndtsk
3890 IF(npinch == 0 )idx_pinch = 1
3891 IF(iparit == 1) ndtsk = 1
3892 CALL intfop2(output, timers,
3893 1 ipari ,ptrx ,nodes%A(1,ndtsk) ,igroups ,ale_connectivity,
3894 2 nodes%ICODT ,fsav ,nodes%V ,nodes%MS ,dt2tt ,
3895 3 neltstt ,ityptstt ,nodes%ITAB ,nodes%STIFN(ndtsk) ,tf ,
3896 4 interfaces%PON%FSKYI ,interfaces%PON%ISKY ,nodes%VR ,output%DATA%VECT_CONT,secfcum,
3897 5 itsk+1 ,niskyfi ,nodes%KINET ,newfront ,nstrf ,
3898 6 icontact ,nodes%VISCN(ndtsk),xcell ,
3899 8 num_impl(1,itsk+1),ns_imp(iadisk) ,ne_imp(iadisk) ,ind_imp(iadisk) ,nt_imp ,
3900 9 fr_i18 ,igrbric ,eminx ,
3901 a ixs ,ixs(l3) ,ixs(l2) ,output%DATA%VECT_PCONT ,output%DATA%VECT_PCONT_2 ,
3902 b nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,rcontact ,acontact ,pcontact ,
3903 c nodes%TEMP ,fthe(idx_fthe) ,ftheskyi ,iparg ,nsensor ,
3904 d pm ,intstamp ,nodes%WEIGHT ,niskyfie ,irlen20 ,
3905 e islen20 ,irlen20t ,islen20t ,irlen20e ,islen20e ,
3906 f mskyi_sms ,iskyi_sms ,nativ_sms ,int18add ,fcontg ,
3907 g fncontg ,ftcontg ,nodes%NODGLOB ,nodes%MS0 ,npc ,
3908 h wa ,sensors%SENSOR_TAB,qfricint ,ncont ,indexcont ,
3909 i tagcont ,inod_pxfem ,ms_ply ,wagap ,elbuf_tab ,
3910 j condn(idx_condn) ,condnskyi ,nv46 ,
3911 k sensors%SFSAV ,sensors%FSAV ,glob_therm%NODADT_THERM,glob_therm%THEACCFACT,
3912 l isensint ,nisubmax ,nb25_candt ,nb25_impct ,
3913 m nb25_dst1 ,nb25_dst2 ,ixig3d ,kxig3d ,wige ,
3914 n knot ,igeo ,multi_fvm ,h3d_data ,
3915 p pskids ,t2main_sms ,forneqs ,knotlocpc ,knotlocel ,
3916 q pinch_data%APINCH(1,idx_pinch),pinch_data%STIFPINCH(idx_pinch),t2fac_sms,tagncont ,
3917 r kloadpinter ,loadpinter ,loadp_hyd_inter ,dgaploadint ,s_loadpinter ,
3918 s interfaces ,xcell_remote)
3919
3920 IF(nintstamp/=0.AND.(anim_v(12)+outp_v(12)+h3d_data%N_VECT_PCONT >0.OR.
3921 . anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT >0))THEN
3922 CALL my_barrier
3923 IF(ncont/=0) THEN
3924 DO i=itsk+1,ncont,nthread
3925 tagcont(indexcont(i)) = 0
3926 ENDDO
3927 ENDIF
3928 ENDIF
3929
3930#include "lockon.inc"
3931 IF(dt2tt<dt2t)THEN
3932 dt2t = dt2tt
3933 neltst = neltstt
3934 ityptst= ityptstt
3935 END IF
3936#include "lockoff.inc"
3937
3938 IF(istatcnd /= 0 .AND. iparit == 0)THEN
3939 DO n=1,numnod
3940 stcnd(ndtsk+n-1) = stcnd(ndtsk+n-1) + nodes%STIFN (ndtsk+n-1)
3941 END DO
3942 ENDIF
3943 IF (iparit == 0 .AND. nspmd > 1 .AND. nthread > 1) THEN
3944 CALL my_barrier()
3945 CALL assparxx(itsk, intlist,nbintc,ipari,glob_therm%NODADT_THERM)
3946 ENDIF
3947!$OMP END PARALLEL
3948 CALL python_end_openmp(python)
3949
3950C========================================================================================
3951C NON PARALLEL SECTION (SMP)
3952C========================================================================================
3953
3954 IF(impl_s>0) CALL re2int7(nt_imp,num_imp,ns_imp,ne_imp,
3955 1 ind_imp,num_impl,ipari,nint7 )
3956C
3957 IF (imon>0) THEN
3958 CALL stoptime(timers,timer_contfor)
3959 CALL startime(timers,timer_exfor)
3960 ENDIF
3961 IF (imonm > 0) CALL startime(timers,21)
3962
3963C--------------------------------------------------------
3964C Communication contact forces (SPMD), Part1 : Send
3965C--------------------------------------------------------
3966
3967 IF(nspmd>1)THEN
3968C
3969 IF((anim_v(12)+outp_v(12)+h3d_data%N_VECT_PCONT >0.AND.
3970 . ((tt>=output%TANIM .AND. tt<=output%TANIM_STOP).OR.tt>=toutp.OR.
3971 . (tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP) .OR.
3972 . (manim>=4.AND.manim<=15).OR.h3d_data%MH3D/=0))
3973 . .OR.h3d_data%N_VECT_PCONT_MAX >0)THEN ! comm to do before i7fcom
3974 CALL spmd_exch_press(output,
3975 1 ipari ,intlist ,nbintc ,output%DATA%VECT_PCONT,
3976 2 output%DATA%VECT_PCONT_2,islen7 ,irlen7 ,irlen7t ,islen7t ,
3977 3 irlen20 ,islen20,irlen20t,islen20t,interfaces%INTBUF_TAB ,
3978 4 h3d_data%N_CSE_FRIC_INTER,h3d_data%N_SCAL_CSE_FRIC)
3979 ELSEIF((h3d_data%N_SCAL_CSE_FRIC+output%DATA%NINEFRIC>0.AND.
3980 . ((tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP) .OR.
3981 . h3d_data%MH3D/=0 ))
3982 . .OR.(h3d_data%N_SCAL_CSE_FRIC+output%DATA%NINEFRIC >0.AND.ninter25>0))THEN
3983 CALL spmd_exch_efric(output,
3984 1 ipari ,intlist ,nbintc ,islen7 ,irlen7 ,
3985 2 irlen7t ,islen7t ,irlen20 ,islen20,irlen20t,
3986 3 islen20t ,interfaces%INTBUF_TAB ,h3d_data)
3987
3988 END IF
3989C
3990 l1 = 1+nixs*numels + nsvois*nixs
3991 l2 = l1+6*numels10
3992 l3 = l2+12*numels20
3993 IF(iparit==0) THEN
3994 CALL spmd_i7fcom_poff(output,
3995 1 ipari ,nodes%A ,nodes%STIFN ,nodes%VISCN ,
3996 2 intlist ,nbintc ,nodes%ICODT ,secfcum ,nstrf ,
3997 3 icontact ,output%DATA%VECT_CONT ,islen7 ,irlen7 ,islen11 ,
3998 4 irlen11 ,islen17 ,irlen17,igrbric ,
3999 5 ixs ,ixs(l3) ,fthe ,irlen7t ,
4000 6 islen7t ,irlen20 ,islen20,irlen20t,islen20t,
4001 7 irlen20e ,islen20e,condn ,1, interfaces%INTBUF_TAB ,
4002 8 h3d_data, multi_fvm,tagncont,kloadpinter,loadpinter,
4003 9 loadp_hyd_inter,fsav ,interfaces,glob_therm%NODADT_THERM)
4004 ELSE
4005
4006 CALL spmd_i7fcom_pon(output,
4007 1 ipari ,intlist ,nbintc ,niskyfi ,nodes%ICODT ,
4008 2 secfcum ,nstrf ,icontact ,output%DATA%VECT_CONT ,igrbric ,
4009 3 ixs ,ixs(l3) ,niskyfie ,nbint20 ,1 ,
4010 4 interfaces%INTBUF_TAB,sfskyi ,sisky ,h3d_data ,multi_fvm ,
4011 5 tagncont ,kloadpinter,loadpinter,loadp_hyd_inter,fsav,
4012 6 interfaces,glob_therm)
4013
4014 IF(multi_fvm%IS_INT18_LAW151) THEN
4015 IF(nthread>1) CALL int18_law151_omp_accumulation( multi_fvm )
4016 CALL spmd_int18_law151_pon( ipari,islen7,irlen7,1,interfaces%INTBUF_TAB,
4017 1 multi_fvm )
4018 ENDIF
4019 END IF
4020 ENDIF
4021 IF (imon>0) CALL stoptime(timers,timer_exfor)
4022 IF (imonm > 0) CALL stoptime(timers,21)
4023
4024 CALL trace_out(4)
4025 ENDIF ! fin NINTER > 0
4026C--------------------------------------------------------
4027C Interface 24 - Communication Part 1/4
4028C--------------------------------------------------------
4029 IF (int24use == 1)THEN
4030 IF (imon>0) CALL startime(timers,timer_contfor)
4031 CALL spmd_exch_i24(ipari ,interfaces%INTBUF_TAB,nodes%ITAB ,
4032 * nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist ,nbintc,
4033 * iad_i24 ,fr_i24 ,sfr_i24,i24maxnsne,1,
4034 * int24e2euse )
4035
4036 IF (imon>0) CALL stoptime(timers,timer_contfor)
4037 ENDIF
4038C--------------------------------------------------------
4039C INTERFACE 21 - Communication of heat flux
4040C--------------------------------------------------------
4041 IF(nspmd>1)THEN
4042 IF(nintstamp /= 0.AND.ftempvar21==1) THEN
4043 CALL spmd_i21fthecom(ipari ,fthe ,interfaces%INTBUF_TAB,sensors%SENSOR_TAB,niskyfi ,
4044 . ftheskyi,interfaces%PON%ISKY ,interfaces%PON%FSKYI ,condnskyi,nsensor,glob_therm%NODADT_THERM)
4045 ENDIF
4046 ENDIF
4047C--------------------------------------------------------
4048C Itet=2 STIFND <- STIFN part of interface only
4049C--------------------------------------------------------
4050 IF (ns10e > 0.AND.iparit == 0) THEN
4051
4052C========================================================================================
4053C PARALLEL SECTION (SMP)
4054C========================================================================================
4055
4056!$OMP PARALLEL
4057!$OMP+PRIVATE(ITSK,NODFTSK,NODLTSK,GREFTSK,GRELTSK)
4058 itsk = omp_get_thread_num()
4059 nodftsk = 1+itsk*numnod/ nthread
4060 nodltsk = (itsk+1)*numnod/nthread
4061 greftsk = 1+itsk*ns10e/ nthread
4062 greltsk = (itsk+1)*ns10e/nthread
4063 CALL s10cndfnd(icnds10,nodes%WEIGHT ,iad_cnds,fr_cnds,nodes%ITAB ,
4064 2 nodftsk,nodltsk,greftsk,greltsk,itsk ,
4065 3 nodes%STIFN ,stifnd)
4066!$OMP END PARALLEL
4067 END IF
4068
4069C========================================================================================
4070C NON PARALLEL SECTION (SMP)
4071C========================================================================================
4072
4073C--------------------------------------------------------
4074C VOLUMES MONITORES
4075C--------------------------------------------------------
4076
4077 IF(nvolu/=0)THEN
4078 IF (imonm > 0) CALL startime(timers,50)
4079 CALL trace_in(11,0,zero)
4080 nn = numelc+numeltg+ibagsurf
4081 n0 = 1 + 3*nn
4082 IF(intbag/=0)THEN
4083 n1 = n0+ nn
4084 ELSE
4085 n1 = n0
4086 ENDIF
4087C
4088 CALL fvdim(monvol)
4089 CALL fvcopy(monvol)
4090 CALL fvmesh0(monvol, nodes%X, volmon, ixs)
4091 CALL fvrezone0(monvol, nodes%X)
4092 CALL fvupd0(monvol, nodes%X, nodes%V, volmon, smonvol, svolmon)
4093 n=1+ninter+nrwall+nrbody+nsect+njoint+nrbag
4094 CALL fvbag0(output, monvol , volmon, nodes%X, sensors%SENSOR_TAB, nodes%V ,
4095 . nodes%A , npc, tf, nsensor ,
4096 . fsav(1,n), ifvmesh, icontact_old, lgauge ,
4097 . gauge , igeo, geo, pm , ipm ,
4098 . iparg , igrouptg, igroupc, elbuf_tab , noda_fext,
4099 . 1 , h3d_data, nodes%ITAB, nodes%WEIGHT , output%TH%WFEXT, python)
4100C
4101 CALL trace_out(11)
4102 IF (imonm > 0) CALL stoptime(timers,50)
4103 ENDIF
4104
4105
4106 IF(nspmd > 1 .AND. nvolu > 0 .AND. nfvbag0 > 0) THEN
4107 ! DT2R : value to be minimized over the processor
4108 dt2r = dt2
4109
4110 ! Fill MIN_TAB with integer
4111 min_tab(1) = nelts
4112 min_tab(2) = itypts
4113 min_tab(3) = 0
4114 min_tab(4) = ispmd
4115 !
4116 ! Begin Asynchronous communication
4117 !
4118 CALL mpi_min_real_begin(dt2r,min_tab,4,mpi_buf)
4119 ! | | | |
4120 !Value to be minimized --* | | |
4121 !Integers array ---------------* | |
4122 !Size of Integers array -------------* |
4123 !Internal Structure ----------------------*
4124 !
4125 ! After this call DT2R and MIN_TAB are unchanged
4126 ! The minimum value of DT2R and the corresponding MIN_TAB
4127 ! Will be received after a call to MPI_MIN_REAL_END
4128 ENDIF
4129
4130 t1sh=tt
4131C
4132C-----------------------------------------------------
4133C UPDATE OF SLIPRING AND RETRACTOR
4134C-----------------------------------------------------
4135
4136 IF (nslipring + nretractor> 0) CALL update_slipring(ixr,element%SHELL%IXC,iparg,elbuf_tab,flag_slipring_update,
4137 . flag_retractor_update,nodes%X,npby)
4138C
4139C---- // GROUPS ----------------
4140C INTERNAL FORCES OF SHELLS, 3-NODE SHELLS
4141C-------------------------------
4142 CALL trace_in(14,0,zero)
4143 IF (imon>0) CALL startime(timers,timer_element)
4144
4145C -------------------------------------------------------------------
4146C User Libraries get the possibility to use GET_U_NOD_X & GET_U_NOD_V in user elements properties (Solids & Springs)
4147 getunod_nocom=1
4148C -------------------------------------------------------------------
4149 llt1 = i87g+3*numeltg
4150 CALL python_begin_openmp(python)
4151!$OMP PARALLEL
4152!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,NDTSKR,IPMTSK,IGMTSK)
4153!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,DT2TT,NELTSTT,ITYPTSTT)
4154!$OMP+ PRIVATE(GREFTSK,GRELTSK)
4155!$OMP+ PRIVATE(IDX_FTHE,IDX_CONDN,IDX_PINCH)
4156C Init var parallel SMP
4157 CALL smp_init(
4158 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk,
4159 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
4160 3 greftsk,greltsk)
4161 dt2tt = dt2t
4162 neltstt = neltst
4163 ityptstt= ityptst
4164 iad_grel = 1
4165 IF(igrelem == 1)iad_grel = k3-k1+1
4166 idx_fthe = ndtsk
4167 IF(ndtsk>ifthe)idx_fthe=1
4168 idx_condn = ndtsk
4169 IF(ndtsk>icondn)idx_condn=1
4170 idx_pinch = ndtsk
4171 IF(npinch == 0 )idx_pinch = 1
4172 IF(iparit == 1) ndtsk = 1
4173
4174 ndtskr=ndtsk ; IF(iroddl == 0)ndtskr=1
4175
4176 CALL forintc(timers,
4177 1 pm ,geo ,nodes%X ,nodes%A(1,ndtsk) ,nodes%AR(1,ndtsk) ,
4178 2 nodes%V ,nodes%VR ,nodes%MS ,nodes%IN ,nloc_dmg ,
4179 3 wa(nwaftsk) ,nodes%STIFN(ndtsk) ,nodes%STIFR(ndtskr) ,element%PON%FSKY ,crksky ,
4180 4 tf ,bufmat ,partsav(ipmtsk) ,nodes%D ,mat_elem ,
4181 5 nodes%DR ,eani ,tani ,output%DATA%FOPT ,
4182 6 fsav ,sensors ,skews%SKEW ,failwave ,
4183 7 dt2tt ,thke ,bufgeo ,element%PON%IADC ,element%PON%IAD_TG ,
4184 8 iparg ,npc ,element%SHELL%IXC ,ixtg ,neltstt ,
4185 9 ipari ,ityptstt ,nstrf ,
4186 a ipart ,ipart(k3) ,ipart(k8) ,secfcum ,
4187 b fsavd ,mat_elem%GROUP_PARAM ,
4188 e fzero ,ixtg1 ,element%PON%IAD_TG6 ,igeo ,ipm ,
4189 f madfail ,xsec ,itsk ,nodes%MCP ,
4190 g nodes%TEMP ,fthe(idx_fthe) ,fthesky ,
4191 h ms_ply ,zi_ply ,inod_pxfem ,xedge4n ,xedge3n ,
4192 i iel_pxfem ,iadc_pxfem ,igrouc ,ngrouc ,gresav(igmtsk),
4193 j grth ,igrth(iad_grel) ,mstg ,dmeltg ,msc ,
4194 k dmelc ,table ,kxfenod2elc ,ptg ,msz2 ,
4195 l inod_crk ,iel_crk ,iadc_crk ,elcutc ,nodenr ,
4196 m ibordnode ,nodedge ,crknodiad ,elbuf_tab ,
4197 n xfem_tab ,condn(idx_condn),condnsky ,crkedge ,
4198 o stack ,nodes%ITAB ,glob_therm,
4199 q drape_sh4n ,drape_sh3n ,subsets, nodes%XDP ,pinch_data%VPINCH ,
4200 r pinch_data%APINCH(1,idx_pinch),pinch_data%STIFPINCH(idx_pinch),drapeg ,
4201 s output ,dt ,snpc , stf ,userl_avail ,maxfunc ,
4202 s sbufmat )
4203#include "lockon.inc"
4204 IF(dt2tt<dt2t)THEN
4205 dt2t = dt2tt
4206 neltst = neltstt
4207 ityptst= ityptstt
4208 END IF
4209#include "lockoff.inc"
4210!$OMP END PARALLEL
4211 CALL python_end_openmp(python)
4212 CALL trace_out(14)
4213 IF (imon>0) CALL stoptime(timers,timer_element)
4214
4215
4216
4217
4218C---- // GROUPS ----------------
4219C INTERNAL FORCES OF TRUSSES, POUTRES, RESSORTS,
4220C SOLIDES, QUAD
4221C-------------------------------
4222
4223 CALL trace_in(14,0,zero)
4224 IF (imon>0) CALL startime(timers,timer_element)
4225 l1 = 1+nixs*numels + nsvois*nixs
4226 l2 = l1+6*numels10
4227 l3 = l2+12*numels20
4228 ll1 = 1+8*numels
4229 ll2 = ll1+6*numels10
4230 ll3 = ll2+12*numels20
4231
4232C
4233C========================================================================================
4234C PARALLEL SECTION (SMP)
4235C========================================================================================
4236 CALL python_begin_openmp(python)
4237!$OMP PARALLEL
4238!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,NDTSKR,IPMTSK)
4239!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,DT2TT,NELTSTT,ITYPTSTT)
4240!$OMP+ PRIVATE(I16TSK,IGMTSK,GREFTSK,GRELTSK)
4241!$OMP+ PRIVATE(IDX_FTHE,IDX_CONDN)
4242C Init var parallel SMP
4243 CALL smp_init(
4244 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk,
4245 2 ipmtsk,partftsk ,partltsk ,nwaftsk,igmtsk ,
4246 3 greftsk,greltsk)
4247 IF(iparit == 1) ndtsk = 1
4248
4249 dt2tt = dt2t
4250 neltstt = neltst
4251 ityptstt= ityptst
4252 i16tsk = 1+itsk*(sw16/nthread)
4253 idx_fthe = ndtsk
4254 IF(ndtsk>ifthe) idx_fthe = 1
4255 idx_condn = ndtsk
4256 IF(ndtsk>icondn)idx_condn = 1
4257
4258 ndtskr = ndtsk ; IF(iroddl == 0)ndtskr = 1
4259C
4260 CALL forint(timers, python,
4261 1 pm ,geo ,nodes%X ,nodes%A(1,ndtsk) ,nodes%AR(1,ndtsk) ,
4262 2 nodes%V ,nodes%VR ,nodes%MS ,nodes%IN ,w ,
4263 3 elbuf ,wa(nwaftsk) ,val2 ,veul ,fv ,
4264 4 nodes%STIFN(ndtsk) ,nodes%STIFR(ndtskr) ,element%PON%FSKY ,tf ,bufmat ,
4265 5 partsav(ipmtsk),nodes%D ,nodes%DR ,eani ,elbuf_tab ,
4266 6 tani ,output%DATA%FOPT,fsav ,sensors ,nloc_dmg ,
4267 7 skews%SKEW ,output%DATA%SCAL_SPRING ,dt2tt ,bufgeo ,nodes%ITAB ,
4268 8 element%PON%IADS ,element%PON%IADQ ,element%PON%IAD_TRUSS ,element%PON%IAD_BEAM ,mat_elem ,
4269 9 element%PON%IAD_SPRING ,iparg ,ale_connectivity,npc ,
4270 a ixs ,ixq ,ixt ,ixp ,
4271 b ixr ,neltstt ,ipari ,
4272 c ityptstt ,nstrf ,ipart ,
4273 d ipart(k1) ,ipart(k2) ,ipart(k4) ,ipart(k5) ,
4274 e ipart(k6) ,ipart(k7) ,fr_wave ,rby ,
4275 f secfcum ,agrv ,igrv ,lgrav ,
4276 g ixs(l1) ,
4277 h ixs(l2) ,element%PON%IADS10 ,element%PON%IADS20 ,ixs(l3) ,element%PON%IADS16 ,
4278 i w16(i16tsk) ,element%PON%FSKYM ,msnf ,igeo ,ipm ,
4279 j xsec ,itsk ,nodes%TEMP ,
4280 k fthe(idx_fthe) ,fthesky ,igrounc ,ngrounc ,
4281 m gresav(igmtsk) ,grth ,igrth ,nodes%XDP ,mssa ,
4282 n dmels ,mstr ,dmeltr ,msp ,dmelp ,
4283 o msrt ,dmelrt ,table ,vflow ,aflow ,
4284 p dflow ,wflow ,ffsky ,aflow ,nbsdvois ,
4285 q nercvois ,nesdvois ,lercvois ,lesdvois ,phi ,
4286 r phie ,msf ,nodftsk ,nodltsk ,
4287 s flg_kj2 ,por ,ifoam_cont ,ifoam ,sfem_nodvar ,
4288 t kxig3d ,ixig3d ,knot ,wige ,condn(idx_condn),
4289 u condnsky ,s_sfem_nodvar,
4290 v tagprt_sms ,itagnd ,ms_2d ,ale_connectivity%NALE ,stressmean ,
4291 w knotlocpc ,knotlocel ,subsets ,flag_slipring_update, flag_retractor_update ,
4292 y h3d_data ,ifthe ,icondn ,dt ,output,
4293 z sbufmat ,snpc ,stf ,nodadt ,dtfac1,
4294 . dtmin1 ,idtmin ,iout ,istdo ,idtmins,dtfacs,nsvois,
4295 . iresp ,maxfunc ,userl_avail ,glob_therm,imon_mat,dtmins,sanin,
4296 . ngrth ,nelem )
4297C
4298#include "lockon.inc"
4299 IF(dt2tt<dt2t)THEN
4300 dt2t = dt2tt
4301 neltst = neltstt
4302 ityptst= ityptstt
4303 END IF
4304#include "lockoff.inc"
4305!$OMP END PARALLEL
4306 CALL python_end_openmp(python)
4307 CALL trace_out(14)
4308
4309 IF (imon>0) CALL stoptime(timers,timer_element)
4310C-----
4311 IF(numsphg/=0)THEN
4312 IF (imonm > 0) CALL startime(timers,48)
4313 IF (imonm > 0) CALL startime(timers,87)
4314 CALL trace_in(13,0,zero)
4315C-----------------------------------------------
4316C SPH SORT, SYMMETRIZATION AND CSPH PREPARATION & SPH INLETS/OUTLETS (After forint)
4317C-----------------------------------------------
4318C========================================================================================
4319C PARALLEL SECTION (SMP)
4320C========================================================================================
4321 CALL python_begin_openmp(python)
4322!$OMP PARALLEL
4323!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
4324!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,GREFTSK,GRELTSK)
4325C Init var parallel SMP
4326 CALL smp_init(
4327 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk,
4328 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
4329 3 greftsk,greltsk)
4330
4331
4332 CALL sphprep(timers,
4333 1 pm ,geo ,nodes%X ,nodes%V ,nodes%MS ,
4334 2 elbuf_tab,wa ,tf ,bufmat ,partsav ,
4335 3 iparg ,npc ,ipart ,nodes%ITAB ,bufgeo ,
4336 4 xframe ,kxsp ,ixsp ,nod2sp ,ipart(k10),
4337 5 spbuf ,ispcond ,ispsym ,xspsym ,vspsym ,
4338 6 wasph(ksph21) ,lprtsph ,lonfsph ,wasph(ksp2sort) ,
4339 7 isphio ,vsphio ,igrsurf ,nodes%D ,
4340 8 sphveln ,itsk ,nodes%XDP ,ibufssg_io,lgauge ,
4341 9 gauge ,ngrounc ,igrounc ,sol2sph ,sph2sol ,
4342 a ixs ,element%PON%IADS ,element%PON%ADSKY ,element%PON%FSKYD ,dmsph(ndtsk),
4343 b wasph(kspactiv),icontact_old,off_sph_r2r,wsmcomp,irunn_bis,
4344 c sph_iord1,sph_work,output%TH%WFEXT)
4345!$OMP END PARALLEL
4346 CALL python_end_openmp(python)
4347
4348 IF (imonm > 0) CALL stoptime(timers,87)
4349C========================================================================================
4350C PARALLEL SECTION (SMP)
4351C========================================================================================
4352 IF (imonm > 0) CALL startime(timers,88)
4353
4354 CALL python_begin_openmp(python)
4355!$OMP PARALLEL
4356!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK)
4357!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK)
4358!$OMP+ PRIVATE(DT2TT,NELTSTT,ITYPTSTT,IGMTSK,GREFTSK,GRELTSK)
4359
4360C Init var parallel SMP
4361 CALL smp_init(
4362 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
4363 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
4364 3 greftsk,greltsk)
4365
4366 dt2tt = dt2t
4367 neltstt = neltst
4368 ityptstt= ityptst
4369
4370 iad_grel = 1
4371 IF(igrelem == 1)iad_grel = k10-k1+1
4372 IF(iparit == 1) ndtsk = 1
4373
4374C----------------------------------
4375C SPH: Internal forces
4376C----------------------------------
4377 CALL forintp(timers,
4378 1 pm ,geo ,nodes%X ,nodes%A(1,ndtsk) ,nodes%V ,
4379 2 nodes%MS ,w ,elbuf_tab ,wa ,fv ,
4380 3 nodes%STIFN(ndtsk) ,tf ,bufmat ,partsav(ipmtsk) ,nloc_dmg ,
4381 4 fsav ,dt2tt ,element%PON%IADS ,iparg ,npc ,
4382 5 neltstt ,ityptstt ,ipart ,nodes%ITAB ,interfaces%PON%ISKY ,
4383 6 bufgeo ,interfaces%PON%FSKYI ,xframe ,kxsp ,ixsp ,
4384 7 nod2sp ,ipart(k10) ,spbuf ,ispcond ,ispsym ,
4385 8 xspsym%BUF ,vspsym%BUF ,
4386 9 wasph(ksph21) ,lprtsph ,lonfsph ,wasph(kspactiv) ,isphio ,
4387 a vsphio ,sphveln ,itsk ,ipm ,gresav(igmtsk),
4388 b grth ,igrth(iad_grel),table ,lgauge ,gauge ,
4389 c ngrounc ,igrounc ,ixs ,irst ,sol2sph ,
4390 d sph2sol ,element%PON%FSKY ,element%PON%FSKY ,igeo ,nodes%TEMP ,
4391 e fthe ,ftheskyi ,sphg_f6 ,wsmcomp%BUF ,sol2sph_typ ,
4392 f mat_elem ,output ,sph_iord1 ,snpc ,stf ,
4393 g sbufmat ,nsvois ,idtmins ,iresp ,maxfunc ,
4394 . imon_mat ,userl_avail ,impl_s ,idyna ,
4395 . dt ,glob_therm ,sph_work ,output%TH%WFEXT ,sensors )
4396#include "lockon.inc"
4397 IF(dt2tt<dt2t)THEN
4398 dt2t = dt2tt
4399 neltst = neltstt
4400 ityptst= ityptstt
4401 END IF
4402#include "lockoff.inc"
4403
4404!$OMP END PARALLEL
4405 CALL python_end_openmp(python)
4406C -------------------------------------------------------------------
4407C User Libraries get the possibility to use GET_U_NOD_X & GET_U_NOD_V in user elements properties (Solids & Springs)
4408 getunod_nocom=0
4409C -------------------------------------------------------------------
4410
4411C=======================================================================================
4412C NON PARALLEL SECTION (SMP)
4413C========================================================================================
4414
4415 CALL trace_out(13)
4416 IF (imonm > 0) CALL stoptime(timers,88)
4417 IF (imonm > 0) CALL stoptime(timers,48)
4418 ENDIF
4419
4420C-----------------------------------------------
4421C Multidomains : synchro proc of flag_activation
4422C----------------------------------------------
4423 IF (nspmd>1) THEN
4424 IF ((sdd_r2r_elem>0).AND.(flg_sphinout_r2r>0)) THEN
4425 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
4426 CALL spmd_exch_r2r_sphoff(off_sph_r2r,nodes%BOUNDARY_ADD,nodes%BOUNDARY,dd_r2r,dd_r2r_elem,lenr)
4427 CALL spmd_exch_r2r_sph(nodes%X,nodes%BOUNDARY_ADD,nodes%BOUNDARY,dd_r2r,dd_r2r_elem,lenr)
4428 CALL spmd_exch_r2r_sph(nodes%D,nodes%BOUNDARY_ADD,nodes%BOUNDARY,dd_r2r,dd_r2r_elem,lenr)
4429 CALL spmd_exch_r2r_sph(nodes%V,nodes%BOUNDARY_ADD,nodes%BOUNDARY,dd_r2r,dd_r2r_elem,lenr)
4430 ENDIF
4431 ENDIF
4432
4433
4434 IF(nvolu/=0)THEN
4435 IF (imonm > 0) CALL startime(timers,50)
4436 CALL trace_in(11,0,zero)
4437 nn = numelc+numeltg+ibagsurf
4438 n0 = 1 + 3*nn
4439 IF(intbag/=0)THEN
4440 n1 = n0+ nn
4441 ELSE
4442 n1 = n0
4443 ENDIF
4444 sporo = numelc+numeltg+ibagsurf
4445C
4446 n=1+ninter+nrwall+nrbody+nsect+njoint+nrbag
4447 CALL fvbag0(output, monvol, volmon, nodes%X, sensors%SENSOR_TAB, nodes%V,
4448 . nodes%A, npc, tf, nsensor ,
4449 . fsav(1,n), ifvmesh, icontact_old,lgauge,
4450 . gauge , igeo, geo, pm, ipm,
4451 . iparg , igrouptg,igroupc, elbuf_tab, noda_fext,
4452 . 2 , h3d_data,nodes%ITAB, nodes%WEIGHT, output%TH%WFEXT, python)
4453 IF (impl_s > 0 .AND. ismdisp >0) THEN
4454 CALL assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
4455 ELSE
4456 CALL assign_ptrx(ptrx,nodes%X,numnod)
4457 ENDIF
4458 CALL monvol0(
4459 1 monvol ,volmon ,ptrx ,nodes%A ,
4460 2 npc ,tf ,nodes%V ,wa ,
4461 3 fsav(1,n) ,nsensor ,sensors%SENSOR_TAB ,igrsurf ,
4462 4 fr_mv ,element%PON%IAD_MV ,sicontact ,sporo ,
4463 5 element%PON%FSKY ,icontact ,wa(n0) ,iparg ,
4464 6 elbuf_tab ,geo ,igeo ,
4465 7 pm ,ipm ,ipart ,ipart(k3) ,
4466 8 ipart(k8) ,igroupc ,igrouptg ,noda_fext ,
4467 9 2 ,h3d_data ,t_monvol ,frontier_global_mv,
4468 a output, python)
4469
4470 CALL trace_out(11)
4471 IF (imonm > 0) CALL stoptime(timers,50)
4472 ENDIF
4473
4474C========================================================================================
4475C PARALLEL SECTION (SMP)
4476C========================================================================================
4477
4478 IF (ns10e > 0 .AND. iparit==0) THEN
4479C must be done before the reception of remote contact stif
4480!$OMP PARALLEL
4481!$OMP+PRIVATE(ITSK,NODFTSK,NODLTSK,GREFTSK,GRELTSK)
4482 itsk = omp_get_thread_num()
4483 nodftsk = 1+itsk*numnod/ nthread
4484 nodltsk = (itsk+1)*numnod/nthread
4485 greftsk = 1+itsk*ns10e/ nthread
4486 greltsk = (itsk+1)*ns10e/nthread
4487 CALL s10stfe_poff(icnds10,nodes%WEIGHT ,iad_cnds,fr_cnds,nodes%ITAB ,
4488 2 nodftsk,nodltsk,greftsk,greltsk,itsk ,
4489 3 nodes%STIFN ,stifnd)
4490!$OMP END PARALLEL
4491 END IF
4492
4493C========================================================================================
4494C NON PARALLEL SECTION (SMP)
4495C========================================================================================
4496
4497C----------------------------------------
4498C Communication of interface forces (SPMD), Part2 : Reception
4499C----------------------------------------
4500 IF(ninter/=0) THEN
4501 IF(nspmd>1)THEN
4502 IF(imonm == 2)THEN
4503 CALL startime(timers,59)
4504 CALL spmd_barrier()
4505 CALL stoptime(timers,59)
4506 ENDIF
4507 IF (imon>0) CALL startime(timers,timer_exfor)
4508 IF (imonm > 0) CALL startime(timers,22)
4509C
4510 l1 = 1+nixs*numels + nsvois*nixs
4511 l2 = l1+6*numels10
4512 l3 = l2+12*numels20
4513 IF(iparit==0)THEN
4514
4515 CALL spmd_i7fcom_poff(output,
4516 1 ipari ,nodes%A ,nodes%STIFN ,nodes%VISCN ,
4517 2 intlist ,nbintc ,nodes%ICODT ,secfcum ,nstrf ,
4518 3 icontact ,output%DATA%VECT_CONT ,islen7 ,irlen7 ,islen11 ,
4519 4 irlen11 ,islen17 ,irlen17 ,igrbric ,
4520 5 ixs ,ixs(l3) ,fthe ,irlen7t ,
4521 6 islen7t ,irlen20 ,islen20 ,irlen20t,islen20t,
4522 7 irlen20e ,islen20e,condn ,2, interfaces%INTBUF_TAB,
4523 8 h3d_data, multi_fvm,tagncont,kloadpinter,loadpinter,
4524 9 loadp_hyd_inter,fsav ,interfaces,glob_therm%nodadt_therm)
4525 ELSE
4526
4527 CALL spmd_i7fcom_pon(output,
4528 1 ipari ,intlist ,nbintc ,niskyfi ,nodes%ICODT ,
4529 2 secfcum ,nstrf ,icontact ,output%DATA%VECT_CONT ,igrbric ,
4530 3 ixs ,ixs(l3) ,niskyfie ,nbint20 ,2 ,
4531 4 interfaces%INTBUF_TAB,sfskyi ,sisky ,h3d_data ,multi_fvm ,
4532 5 tagncont ,kloadpinter,loadpinter,loadp_hyd_inter,fsav,
4533 6 interfaces,glob_therm)
4534 END IF
4535
4536C
4537 IF (imon>0) THEN
4538 CALL stoptime(timers,timer_exfor)
4539 IF (imonm > 0) CALL stoptime(timers,22)
4540 ENDIF
4541 ENDIF
4542 ENDIF
4543
4544 22 CONTINUE
4545
4546! Mpi communication for Nlocal option : parith/off
4547 IF(iparit /= 0.AND.nspmd > 1.AND. nloc_dmg%IMOD > 0)THEN
4548 CALL spmd_exch_sub_pon(nloc_dmg)
4549 ENDIF
4550 IF(nspmd > 1.AND. nintloadp > 0)THEN
4551 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
4552 CALL spmd_exch_tagncont(tagncont,nodes%BOUNDARY_ADD ,nodes%BOUNDARY,lenr )
4553 ENDIF
4554! ----------------------------------
4555
4556 IF(nloadp_hyd/=0.AND.impl_s/=1) THEN
4557 noda_fext = zero
4558 CALL trace_in(10,0,zero)
4559 IF (imon>0) CALL startime(timers,timer_kin)
4560 IF (imonm > 0) CALL startime(timers,41)
4561 CALL load_pressure(iloadp ,loadp ,lloadp ,npc ,tf ,
4562 2 nodes%A ,nodes%V ,nodes%X ,skews%SKEW ,sensors%SENSOR_TAB,
4563 3 element%PON%IAD_LOADP,element%PON%FSKY ,output%DATA%VECT_FEXT,tagncont ,nsensor ,
4564 4 loadp_hyd_inter,h3d_data , python,
4565 5 npresload ,loadp_tagdel,output%TH%TH_SURF,pblast,output%TH%WFEXT)
4566
4567
4568 IF (imonm > 0) CALL stoptime(timers,41)
4569 IF (imon>0) CALL stoptime(timers,timer_kin)
4570 CALL trace_out(10)
4571 ENDIF
4572C--- //------------------------------
4573C FORCE ASSEMBLY
4574C-------------------------------------
4575 IF(coupling%active) THEN
4576 nodes%FORCES(1:3,1:numnod) = nodes%A(1:3,1:numnod)
4577 ENDIF
4578C========================================================================================
4579C PARALLEL SECTION (SMP)
4580C========================================================================================
4581 dtnod_nlocal = ep20
4582 IF(iparit == 0 .AND. nthread > 1)THEN
4583 IF (imon>0) CALL startime(timers,timer_asm)
4584
4585!$OMP PARALLEL
4586!$OMP+PRIVATE(ITSK,NODFTSK,NODLTSK,PARTFTSK,PARTLTSK,GREFTSK,GRELTSK,NODFT_NL,NODLT_NL)
4587 itsk = omp_get_thread_num()
4588 nodftsk = 1+itsk*numnod/ nthread
4589 nodltsk = (itsk+1)*numnod/nthread
4590 partftsk = 1+itsk*npsav*npart/nthread
4591 partltsk = (itsk+1)*npsav*npart/nthread
4592 greftsk = 1+itsk*npsav*ngpe/nthread
4593 greltsk = (itsk+1)*npsav*ngpe/nthread
4594
4595C Parith/OFF assembly necessary before boundary communication if multi-thread
4596
4597 CALL asspar(
4598 1 nthread ,numnod,nodftsk,nodltsk,iroddl,
4599 2 npart ,partftsk,partltsk ,nodes%A ,nodes%AR ,
4600 3 partsav ,nodes%STIFN ,nodes%STIFR ,nodes%VISCN , fthe ,
4601 4 glob_therm%ITHERM_FE,glob_therm%NODADT_THERM,stcnd ,greftsk,greltsk ,
4602 5 gresav ,ngpe ,nthpart ,ialelag, aflow,
4603 6 dmsph ,condn ,
4604 7 pinch_data%APINCH,pinch_data%STIFPINCH)
4605
4606
4607! ----------------------------------
4608! Accumulation of acceleration for Nlocal option : parith/off
4609 IF (nloc_dmg%IMOD > 0) THEN
4610 nodft_nl = 1+ itsk*nloc_dmg%NNOD/nthread
4611 nodlt_nl = (itsk+1)*nloc_dmg%NNOD/nthread
4612 CALL asspar_sub_poff(nloc_dmg%FNL ,nodft_nl,nodlt_nl,
4613 . nloc_dmg%POSI,nloc_dmg%L_NLOC,nthread )
4614 ! Non-local nodal stiffness
4615 IF (nodadt > 0) THEN
4616 CALL asspar_sub_poff(nloc_dmg%STIFNL,nodft_nl,nodlt_nl,
4617 . nloc_dmg%POSI,nloc_dmg%L_NLOC,nthread )
4618 CALL nlocal_dtnoda(nodft_nl,nodlt_nl,nloc_dmg,dtnod_nlocal,dt2t)
4619 ENDIF
4620 ENDIF
4621!$OMP END PARALLEL
4622 IF (imon>0) CALL stoptime(timers,timer_asm)
4623 ENDIF
4624C Transfer of contact force from sleeping particles to solid nodes
4625C========================================================================================
4626C PARALLEL SECTION (SMP)
4627C========================================================================================
4628 IF(numsph /= 0 .AND. nsphsol /= 0 )THEN
4629 IF (imonm > 0) CALL startime(timers,48)
4630 IF (imonm > 0) CALL startime(timers,89)
4631 CALL python_begin_openmp(python)
4632!$OMP PARALLEL
4633!$OMP+PRIVATE(ITSK,NODFTSK,NODLTSK)
4634 itsk = omp_get_thread_num()
4635 nodftsk = 1+itsk*numnod/ nthread
4636 nodltsk = (itsk+1)*numnod/nthread
4637
4638 CALL soltosphf(
4639 1 nodes%A ,spbuf ,ixs ,kxsp ,ipart(k10),
4640 2 nod2sp ,irst ,ngrounc ,igrounc ,iparg ,
4641 3 nodes%STIFN ,sol2sph,sph2sol ,elbuf_tab,itsk ,
4642 4 nodftsk,nodltsk,interfaces%PON%ISKY ,interfaces%PON%FSKYI ,igeo ,
4643 5 sol2sph_typ)
4644
4645!$OMP END PARALLEL
4646 CALL python_end_openmp(python)
4647
4648 IF (imonm > 0) CALL stoptime(timers,89)
4649 IF (imonm > 0) CALL stoptime(timers,48)
4650 ENDIF
4651
4652C===== Nitsche Method Reinit FORNEQS every cycle
4653
4654 IF(nitsche/=0) THEN
4655!$OMP PARALLEL
4656!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK)
4657
4658C Init var parallel SMP
4659 CALL smp_init(
4660 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
4661 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
4662 3 greftsk,greltsk)
4663
4664 CALL zeror(forneqs(1,nodftsk),numntsk)
4665
4666!$OMP END PARALLEL
4667
4668C====== Nitsche equivalent nodal force computation FORNEQS ===========
4669
4670 IF (int24use == 1)THEN
4671 IF (sh_offset_tab%NNSH_OSET > 0) THEN
4672 CALL assign_ptrx(ptrx,xyz,numnod)
4673 ELSEIF (impl_s > 0 .AND. ismdisp >0) THEN
4674 CALL assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
4675 ELSE
4676 CALL assign_ptrx(ptrx,nodes%X,numnod)
4677 ENDIF
4678 CALL i24nitschfor3 (ipari ,interfaces%INTBUF_TAB,iparit ,stressmean ,
4679 2 intlist ,nbintc ,ptrx,element%PON%IADS,
4680 3 forneqs ,forneqsky ,nodes%ITAB ,ixs ,
4681 4 element%PON%IADS10,element%PON%IADS20 ,element%PON%IADS16,nfacnit )
4682 ENDIF
4683 ENDIF
4684
4685C========================================================================================
4686C NON PARALLEL SECTION (SMP)
4687C========================================================================================
4688
4689 IF(int18kine== 1)THEN
4690 ALLOCATE(mtf(14,numnod))
4691 ALLOCATE(cand_sav(8,int18add(ninter+1)-1))
4692 IF (nspmd > 1)THEN
4693 ALLOCATE(tagpene(numnod))
4694 ELSE
4695 ALLOCATE(tagpene(1))
4696 ENDIF
4697 ENDIF
4698 int18add(ninter+1) = -iabs(int18add(ninter+1))
4699 int18kine=-iabs(int18kine)
4700
4701 IF(nspmd>1)THEN
4702 IF (imon>0) CALL startime(timers,timer_exfor)
4703 IF (iparit==0) THEN
4704 length = 4 + iroddl*4
4705 IF (n2d/=0) THEN
4706 length = length + 1
4707 IF(ale%SUB%IFSUBM == 1) length = length + 1
4708 ELSEIF(ale%SUB%IFSUBM==1)THEN
4709 length = length + 2
4710 ENDIF
4711C
4712 IF(glob_therm%ITHERM_FE > 0 )THEN
4713 length = length + 3
4714 IF (glob_therm%NODADT_THERM == 1 ) length = length + 1
4715 ENDIF
4716C
4717 IF(ialelag > 0 )THEN
4718 length = length + 4
4719 ENDIF
4720C
4721 IF(sol2sph_flag/=0) length = length + 1
4722C
4723 IF(nitsche > 0 )THEN
4724 nfacnit = 3
4725 ENDIF
4726C
4727 lenc = 0
4728 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0) lenc = 3
4729 IF(h3d_data%N_VECT_PCONT_MAX /=0.AND.nintstamp==0) lenc = lenc+6
4730C
4731 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
4732 IF(idtmins /= 0)THEN
4733
4735 1 nodes%A ,nodes%AR ,nodes%STIFN, nodes%STIFR ,nodes%MS ,
4736 2 nodes%BOUNDARY_ADD,nodes%BOUNDARY,msnf ,ale%SUB%IFSUBM,length ,
4737 3 lenr ,fthe , nodes%MCP,fr_loc,nb_fr ,
4738 4 ms_2d ,mcp_off,forneqs ,nfacnit ,
4739 5 lenc ,output%DATA%VECT_CONT ,h3d_data,output%DATA%VECT_PCONT,
4740 6 output%DATA%VECT_PCONT_2 ,glob_therm)
4741 ELSE
4742 CALL spmd_exch_a(
4743 1 nodes%A , nodes%ACC_DP ,nodes%AR ,nodes%STIFN,nodes%STIFR ,nodes%MS ,
4744 2 nodes%BOUNDARY_ADD,nodes%BOUNDARY,msnf ,ale%SUB%IFSUBM,length ,
4745 3 lenr ,fthe , nodes%MCP, dmsph,condn,
4746 4 ms_2d,mcp_off,
4747 5 forneqs ,nfacnit,lenc ,output%DATA%VECT_CONT ,h3d_data,
4748 6 output%DATA%VECT_PCONT ,output%DATA%VECT_PCONT_2 ,glob_therm)
4749
4750 ENDIF
4751C
4752 ELSE
4753 length = 4 + iroddl*4
4754 IF(ale%SUB%IFSUBM==1)THEN
4755 length = length + 1
4756 ENDIF
4757 IF(n2d /= 0.AND.ale%SUB%IFSUBM == 1) length = length + 1
4758 sizi = nfskyi+1
4759C
4760 IF (glob_therm%ITHERM_FE > 0 )THEN
4761 length = length + 1
4762 sizi = sizi + 1
4763 IF (glob_therm%NODADT_THERM == 1 ) THEN
4764 length = length + 1
4765 sizi = sizi + 1
4766 ENDIF
4767 ENDIF
4768 IF(intplyxfem > 0) sizi = sizi + 5
4769C
4770 IF(ialelag > 0 )THEN
4771 length = length + 4
4772 ENDIF
4773C
4774 lens = fr_nbcc(1,nspmd+1)
4775 lenr = fr_nbcc(2,nspmd+1)
4776 leni = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
4777C
4778 lens1 = 0
4779 lenr1 = 0
4780C
4781 IF(iplyxfem > 0) THEN
4782 lens1 = fr_nbcc1(1,nspmd+1)
4783 lenr1 = fr_nbcc1(2,nspmd+1)
4784 ENDIF
4785C
4786 IF(icrack3d > 0) THEN
4787 lens1 = fr_nbcc1(1,nspmd+1)
4788 lenr1 = fr_nbcc1(2,nspmd+1)
4789 ENDIF
4790C
4791 IF(sol2sph_flag/=0)THEN
4792 length = length + 1
4793 ENDIF
4794C
4795 lenc = 0
4796 IF(anim_v(26)+h3d_data%N_VECT_CONT_MAX /=0.AND.nintstamp==0) lenc = 3*leni
4797 IF(h3d_data%N_VECT_PCONT_MAX /=0.AND.nintstamp==0) lenc = lenc+6*leni
4798
4799 CALL spmd_exch2_a_pon(interfaces,
4800 1 nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,element%PON%ADSKY ,element%PON%PROCNE ,fr_nbcc ,
4801 2 length ,lenr ,lens ,element%PON%FSKY ,element%PON%FSKY ,
4802 3 element%PON%FSKYM ,ale%SUB%IFSUBM ,sizi ,leni ,element%PON%IADSDP ,
4803 4 element%PON%IADRCP ,element%PON%ISENDP ,element%PON%IRECVP ,ffsky ,procne_pxfem,
4804 5 fr_nbcc1 ,iadsdp_pxfem,iadrcp_pxfem ,isendp_pxfem,
4805 6 irecvp_pxfem,lenr1 ,lens1 ,iadsdp_crk,iadrcp_crk ,
4806 7 isendp_crk ,irecvp_crk,element%PON%FSKYD ,crknodiad ,crksky ,
4807 8 forneqsky ,nfacnit ,lenc , output%DATA%VECT_CONT ,h3d_data ,
4808 9 output%DATA%VECT_PCONT,output%DATA%VECT_PCONT_2 ,glob_therm)
4809C
4810 ENDIF
4811 IF (imon>0) CALL stoptime(timers,timer_exfor)
4812 ENDIF
4813
4814C--- //------------------------------
4815C PARITH/ON ASSEMBLY OF FORCES AFTER COMMUNICATION
4816C-------------------------------------
4817 CALL trace_in(15,0,zero)
4818
4819 IF (imon>0) CALL startime(timers,timer_asm)
4820c Parallel update of crack
4821 IF(icrack3d > 0 .AND. nspmd > 1) CALL spmd_max_xfe_i(nlevset)
4822
4823C========================================================================================
4824C PARALLEL SECTION (SMP)
4825C========================================================================================
4826 IF(iparit==1) ALLOCATE( fsky_l(nisky) )
4827 dtnod_nlocal = ep20
4828 CALL python_begin_openmp(python)
4829!$OMP PARALLEL
4830!$omp+private(itsk,nodftsk,nodltsk,partftsk,partltsk,greftsk,greltsk,nodftsk_2,nodltsk_2,nodft_nl,nodlt_nl)
4831 itsk = omp_get_thread_num()
4832
4833 nodftsk = 1+itsk*numnod/ nthread
4834 nodltsk = (itsk+1)*numnod/nthread
4835 partftsk = 1+itsk*npsav*npart/nthread
4836 partltsk = (itsk+1)*npsav*npart/nthread
4837 greftsk = 1+itsk*npsav*ngpe/nthread
4838 greltsk = (itsk+1)*npsav*ngpe/nthread
4839 nodftsk_2 = nodft_asspar(itsk+1)
4840 nodltsk_2 = nodlt_asspar(itsk+1)
4841
4842 IF(iparit==1)THEN
4843
4844C------------------------
4845C Assembly Parith/ON spmd+multi-thread
4846C------------------------
4847 CALL asspar4(nodes,
4848 2 element%PON%FSKY ,element%PON%FSKY ,element%PON%ADSKY ,element%PON%FSKYM ,
4849 3 msnf ,interfaces%PON%ISKY ,interfaces%PON%FSKYI ,fthe ,
4850 4 fthesky,ftheskyi,nodftsk,nodltsk ,interfaces%PON%ADSKYI,
4851 5 partsav,partftsk ,partltsk ,itsk ,greftsk ,
4852 6 greltsk ,gresav ,aflow ,ffsky ,msf ,
4853 7 adsky_pxfem, inod_pxfem ,element%PON%FSKYD ,
4854 8 dmsph ,condn ,condnsky ,condnskyi,
4855 9 ms_2d,icnds10 ,
4856 a stifnd ,forneqs ,forneqsky ,nfacnit,nodftsk_2,
4857 b nodltsk_2,fsky_l,glob_therm)
4858
4859! ----------------------------------
4860! Accumulation of acceleration for Nlocal option : parith/on
4861 IF (nloc_dmg%IMOD>0) THEN
4862 nodft_nl = 1+ itsk*nloc_dmg%NNOD/nthread
4863 nodlt_nl = (itsk+1)*nloc_dmg%NNOD/nthread
4864 CALL asspar_sub(nloc_dmg%FNL(:,1) ,nloc_dmg%FSKY,nloc_dmg%ADDCNE,nodft_nl ,
4865 . nodlt_nl ,nloc_dmg%POSI ,nloc_dmg%NNOD, nloc_dmg%L_NLOC)
4866 ! Non-local nodal stiffness
4867 IF (nodadt > 0) THEN
4868 CALL asspar_sub(nloc_dmg%STIFNL(:,1),nloc_dmg%STSKY,nloc_dmg%ADDCNE,nodft_nl,
4869 . nodlt_nl,nloc_dmg%POSI,nloc_dmg%NNOD,nloc_dmg%L_NLOC)
4870 CALL nlocal_dtnoda(nodft_nl,nodlt_nl,nloc_dmg,dtnod_nlocal,dt2t)
4871 ENDIF
4872 ENDIF
4873C------------------------
4874C Assembly of Parith/ON forces on Phantom Xfem
4875C------------------------
4876 IF(icrack3d > 0)THEN
4877C /---------------/
4878 CALL my_barrier
4879C /---------------/
4880 CALL asspar_crk(
4881 . adsky_crk,inod_crk ,crksky ,nodftsk ,nodltsk ,
4882 . nodenr ,nodlevxf ,nodes%ITAB )
4883 ENDIF
4884 ELSEIF(iparit==2)THEN
4885
4886 IF(kdtint/=0)THEN
4887
4888!$OMP SINGLE
4889 CALL ancmsg(msgid=165,anmode=aninfo)
4890!$OMP END SINGLE
4891
4892 CALL arret(1)
4893 ENDIF
4894C
4895 CALL asspar3(
4896 2 nodes%A ,nodes%AR ,itsk ,nodftsk ,
4897 3 nodltsk ,nodes%STIFN ,nodes%STIFR ,nodes%ITAB ,element%PON%FSKY ,
4898 4 element%PON%FSKY ,interfaces%PON%ISKY ,element%PON%ADSKY ,interfaces%PON%FSKYI ,
4899 5 wa ,partftsk ,partltsk ,partsav ,nodes%MS ,
4900 6 fthe ,fthesky ,ftheskyi ,greftsk ,greltsk ,
4901 7 gresav ,glob_therm%ITHERM_FE ,glob_therm%INTHEAT )
4902
4903 ELSEIF(iparit==3)THEN
4904
4905C Assemblage Parith/ON
4906 n1 = 1 + numnod
4907 CALL asspar5(
4908 1 nthread ,numnod ,nodftsk ,nodltsk ,iroddl ,
4909 2 npart ,partftsk ,partltsk ,nodes%A ,nodes%AR ,
4910 3 partsav ,nodes%STIFN ,nodes%STIFR ,nodes%A(1,n1) ,nodes%AR(1,n1) ,
4911 4 nodes%STIFN(n1) ,nodes%STIFR(n1) ,nodes%VISCN ,nodes%VISCN(n1),greftsk ,
4912 5 greltsk ,gresav ,ngpe ,nthpart)
4913C
4914 ENDIF
4915
4916 IF(kdtint/=0) CALL modsti(nodftsk,nodltsk,nodes%STIFN,nodes%VISCN,nodes%MS)
4917
4918!$OMP END PARALLEL
4919 CALL python_end_openmp(python)
4920C
4921 IF(iparit==1) DEALLOCATE( fsky_l )
4922 IF (imon>0) CALL stoptime(timers,timer_asm)
4923 CALL trace_out(15)
4924C========================================================================================
4925C NON PARALLEL SECTION (SMP)
4926C========================================================================================
4927
4928! -------------------------------------------
4929! check if a NaN appears in acc vectors (only available with /DEBUG/NAN option)
4930 IF( debug(macro_debug_nan)/=0 )CALL check_nan_acc(ncycle,nodes)
4931! write *.adb files for NON-LOCAL option
4932 IF (debug(macro_debug_acc)==1.AND.(nloc_dmg%IMOD>0)) THEN
4933 IF (ispmd==0) THEN
4934 siz = numnodg
4935 ELSE
4936 siz = 0
4937 END IF
4938 IF ( ncycle>=debstart .AND.
4939 . mod(ncycle-debstart,rstfreq)==0 ) THEN
4940 CALL spmd_collect_nlocal(nloc_dmg%FNL(:,1),nloc_dmg%L_NLOC ,nloc_dmg%NNOD,
4941 . nloc_dmg%POSI ,nloc_dmg,siz,nodes%NODGLOB,nodes%ITAB )
4942 ENDIF
4943 ENDIF
4944
4945C----------------------------------
4946C ITET2 of S10 Forces condensation; pass 1
4947C----------------------------------
4948
4949C========================================================================================
4950C PARALLEL SECTION (SMP)
4951C========================================================================================
4952
4953 IF (ns10e > 0) THEN
4954 CALL python_begin_openmp(python)
4955!$OMP PARALLEL
4956!$OMP+PRIVATE(ITSK,NODFTSK,NODLTSK,GREFTSK,GRELTSK)
4957 itsk = omp_get_thread_num()
4958 nodftsk = 1+itsk*numnod/ nthread
4959 nodltsk = (itsk+1)*numnod/nthread
4960 greftsk = 1+itsk*ns10e/ nthread
4961 greltsk = (itsk+1)*ns10e/nthread
4962 CALL s10cndf1(icnds10,nodes%WEIGHT ,iad_cndm1,fr_cndm1,fr_nbcccnd1,
4963 1 addcncnd,procncnd,nodes%A ,iadcnd,fskycnd,
4964 2 itagnd ,nodftsk,nodltsk,greftsk,greltsk,
4965 3 itsk ,nodes%ITAB ,nodes%STIFN, stifnd)
4966!$OMP END PARALLEL
4967 CALL python_end_openmp(python)
4968 END IF
4969c--------------------------------------
4970 IF(sol2sph_flag/=0)THEN
4971C========================================================================================
4972C PARALLEL SECTION (SMP)
4973C========================================================================================
4974 CALL python_begin_openmp(python)
4975!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
4976 itsk = omp_get_thread_num()
4977 nodftsk = 1+itsk*numnod/ nthread
4978 nodltsk = (itsk+1)*numnod/nthread
4979 DO i=nodftsk,nodltsk
4980 IF(nodes%MS(i)/=zero)THEN
4981 IF(nodes%MS(i)-dmsph(i) < em03*nodes%MS(i))THEN
4982 nodes%MS(i)=zero
4983 ELSE
4984 nodes%MS(i)=max(zero,nodes%MS(i)-dmsph(i))
4985 END IF
4986 END IF
4987 dmsph(i)=zero
4988 ENDDO
4989!$OMP END PARALLEL
4990 CALL python_end_openmp(python)
4991 ENDIF
4992
4993C========================================================================================
4994C NON PARALLEL SECTION (SMP)
4995C========================================================================================
4996
4997 IF (int24use == 1)THEN
4998 IF (imon>0) CALL startime(timers,timer_contfor)
4999 CALL spmd_exch_i24(ipari ,interfaces%INTBUF_TAB,nodes%ITAB ,
5000 * nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,intlist ,nbintc,
5001 * iad_i24 ,fr_i24 ,sfr_i24,i24maxnsne,2,
5002 * int24e2euse )
5003 IF (imon>0) CALL stoptime(timers,timer_contfor)
5004 ENDIF
5005
5006C
5007C Communication Interface type20 DAANC6
5008C
5009 IF(nbint20>0.AND.nspmd>1) THEN
5010 length = 21
5011 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
5012 CALL spmd_exch_da20(
5013 1 interfaces%INTBUF_TAB,ipari,nodes%BOUNDARY_ADD,nodes%BOUNDARY,
5014 2 length ,nbint20,lenr ,intlist ,nbintc )
5015 ENDIF
5016C
5017C Communication ICONTACT AIRBAG
5018C
5019 IF(kcontact/=0.AND.nspmd>1) THEN
5020 length = 1
5021 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
5022 CALL spmd_exch_icont(icontact
5023 + ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY,length,lenr)
5024 ENDIF
5025C
5026C Communication IFOAM
5027C
5028 IF(ialelag > 0.AND.nspmd>1) THEN
5029 length = 1
5030 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
5031 CALL spmd_exch_icont(ifoam,nodes%BOUNDARY_ADD ,nodes%BOUNDARY,length,lenr)
5032 ENDIF
5033C
5034#ifdef DNC
5035 IF (imadcpl>0)THEN
5036C at every cycle except cycle 0, send the Nodes coordinates
5037 CALL data_recv_madcpl(nodes%X,nodes%A,nodes%V,nodes%MS,
5038 . output%DATA%VECT_CONT,madclnod,madclfrecv,h3d_data,output%TH%WFEXT)
5039 ENDIF
5040#endif
5041
5042 IF (vipercoupling) THEN
5043C Viper's contribution to force
5044 CALL radiossviper_receiveaccelerations(numnod,nodes%A,noda_fext,viper%ITABM1)
5045 endif
5046
5047CFP SKIP KINEMATIC FORCES
5048 IF(ale%SUB%IALESUB==2 .AND. ale%SUB%IFSUB==2) GOTO 23
5049
5050C
5051C POROUS MEDIA (not parallel)
5052C---------------------------------------------------------------------
5053 IF(numpor>0) THEN
5054 CALL poro(
5055 1 geo ,nodpor ,nodes%MS,nodes%X ,nodes%V ,
5056 2 w ,nodes%A ,nodes%AR,skews%SKEW,nodes%WEIGHT,
5057 3 nporgeo)
5058 ENDIF
5059C---------------------------------------------------------------------
5060C DEBUG OUTPUT ACCELERATION
5061C---------------------------------------------------------------------
5062 IF (debug(macro_debug_acc)==1) THEN
5063 IF (ncycle>=debstart .AND.mod(ncycle-debstart,rstfreq)==0) THEN
5064 IF(nspmd > 1) THEN
5065 IF (ispmd==0) THEN
5066 siz = numnodg
5067 ELSE
5068 siz = 0
5069 END IF
5070 CALL spmd_collect(nodes%A,nodes%ITAB,nodes%WEIGHT,nodes%NODGLOB,siz)
5071 ELSE
5072 CALL collect(nodes%A,nodes%ITAB,nodes%WEIGHT,nodes%NODGLOB)
5073 END IF
5074 END IF
5075 END IF
5076
5077C-----------------------------------------------
5078C COMMUNICATION BETWEEN BOUNDARY ELEMENTS AFTER ASSEMBLY
5079C-----------------------------------------------
5080 IF (ifrwv > 0) THEN
5081 IF (nspmd > 1) THEN
5082 length = 1
5083 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
5084C FR_WAVE boundary exchange
5085 CALL spmd_exch_wave(fr_wave,nodes%BOUNDARY_ADD ,nodes%BOUNDARY,length,lenr)
5086 END IF
5087
5088C========================================================================================
5089C PARALLEL SECTION (SMP)
5090C========================================================================================
5091
5092!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
5093 itsk = omp_get_thread_num()
5094 nodftsk = 1+itsk*numnod/ nthread
5095 nodltsk = (itsk+1)*numnod/nthread
5096 DO i=nodftsk,nodltsk
5097 fr_wave(i)=abs(fr_wave(i))
5098 ENDDO
5099
5100!$OMP END PARALLEL
5101
5102 ENDIF
5103
5104C========================================================================================
5105C NON PARALLEL SECTION (SMP)
5106C========================================================================================
5107C Failure front wave
5108C-----------------------------------------------
5109 IF (failwave%WAVE_MOD > 0) CALL update_failwave(failwave)
5110C----------------------------------
5111C PROCESSING SHOOTING NODES
5112C----------------------------------
5113 IF (imon>0) CALL startime(timers,timer_contfor)
5114 IF (n2d/=0.AND.idel7==2) THEN
5115 IF (imon>0) CALL startime(timers,6)
5116 CALL chkstifn(ipari,nodes%MS,interfaces%INTBUF_TAB)
5117 IF (imon>0) CALL stoptime(timers,6)
5118C
5119C IDEL7NG : global flag deleted segments/nodes int. type7, type2
5120C IDEL7NG = 0 => nothing
5121C IDEL7NG = 1 | 2 => deleted segments/nodes (for at least 1 interface)
5122C IDEL7NOK = 1 : need all interface such as IPARI(17)= 1 | 2
5123 ELSEIF(idel7ng>=1.OR.pdel>0) THEN
5124C IF (NCYCLE==97) IDEL7NOK = 1
5125C IF (NCYCLE==98) IDEL7NOK = 1
5126 IF (nspmd>1.AND.(idel7ng>=1.OR.pdel>0)) THEN
5127C recuperation IDEL7NOK global
5128 IF (imonm > 0 ) CALL startime(timers,76)
5129 CALL spmd_allglob_isum9(idel7nok,1)
5130 IF (imonm > 0 ) CALL stoptime(timers,76)
5131 idel7nok = min(1,idel7nok)
5132 ENDIF
5133 idel7nok_sav = idel7nok
5134 IF (r2r_siu==1.AND.idel7ng>=1) THEN
5135 CALL get_shmbuf_c(idel7nok_r2r,2)
5136 idel7nok = idel7nok+idel7nok_r2r
5137 idel7nok = min(1,idel7nok)
5138 ENDIF
5139C Warning WA used on 2*NUMNOD (NUMNOD + NUMNOD SPECIFIC SPMD)
5140 IF ((idel7ng>=1.AND.idel7nok==1).OR.(pdel>0.AND.idel7nok==1)) THEN
5141 l1 = 1+nixs*numels + nsvois*nixs
5142 l2 = l1+6*numels10
5143 l3 = l2+12*numels20
5144 IF((int24use==1.OR.ninter25/=0).AND.(idel7ng>=1.AND.idel7nok==1))THEN
5145 indseglo(2:ninter+1)=0
5146 indseglo(1)=1
5147 ENDIF
5148
5149
5150C========================================================================================
5151C PARALLEL SECTION (SMP)
5152C========================================================================================
5153 IF (imonm > 0 ) CALL startime(timers,29)
5154 nindexp = 0
5155 check_neigh_flag_res = 0
5156
5157c allocate(nodes%deleted_node(2*numnod)) ! working array to mark nodes connected to deleted element
5158c allocate(nodes%work_array_node(nthread*numnod)) ! working array to mark nodes (connected to active element or deleted element)
5159 CALL python_begin_openmp(python)
5160!$OMP PARALLEL
5161!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
5162!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,GREFTSK,GRELTSK,omp_address)
5163C Init var parallel SMP
5164 CALL smp_init(
5165 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
5166 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
5167 3 greftsk,greltsk)
5168 omp_address = 1 + itsk*numnod
5169
5170 IF ((idel7ng>=1.AND.idel7nok==1).OR.(pdel>0.AND.idel7nok==1)) THEN
5171 CALL tagoff3n(nodes,
5172 1 geo ,ixs ,ixs(l1) ,ixs(l1) ,ixs(l3) ,ixq ,
5173 2 element%SHELL%IXC ,ixt ,ixp ,ixr ,ixtg ,
5174 3 nodes%deleted_node,nodftsk ,nodltsk ,iparg ,elbuf ,itsk ,
5175 4 ixtg1 ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,nodes%ITAB ,
5176 5 addcnel ,cnel ,kxsp ,elbuf_tab ,tagel ,iexlnk ,
5177 6 igrnod ,dd_r2r ,dd_r2r_elem,sdd_r2r_elem,idel7nok_sav ,
5178 7 idel7nok_r2r,tagtrimc,tagtrimtg,s_elem_state,elem_state,
5179 8 shoot_struct,shoot_struct%GLOBAL_NB_ELEM_OFF)
5180 ! ---------------------
5181 ! check if a node is deactivated and deactivate all the corresponding secondary nodes
5182 CALL check_nodal_state( itsk,nodes%deleted_node,newfront,interfaces%INTBUF_TAB,shoot_struct%SIZE_SEC_NODE,
5183 . shoot_struct%SHIFT_S_NODE,shoot_struct%INTER_SEC_NODE,shoot_struct%SEC_NODE_ID)
5184 ! ---------------------
5185
5186 ! ---------------------
5187 ! check if a surface/edge must be deactivated and save the surface/edge id
5188
5189 IF(itsk==0) THEN
5190 CALL find_surface_inter( nodes%ITAB ,shoot_struct ,ixs ,ixs(l1) ,element%SHELL%IXC ,
5191 . ixtg ,
5192 . ngroup,nparg,igroups,iparg )
5193 CALL find_edge_inter( nodes%ITAB,shoot_struct,ixs,ixs(l1),
5194 1 element%SHELL%IXC,ixtg,ixq,ixt,ixp,
5195 2 ixr,geo,ngroup,igroups,iparg )
5196 ENDIF
5197 CALL my_barrier( )
5198 ! ---------------------
5199
5200 ! ---------------------
5201 ! exchange of surfaces (ie. 4 nodes) to deactivate and deactivation
5202 ! ONLY FOR LOCAL SURFACE / REMOTE ELEMENT
5203 IF(nspmd>1) THEN
5204 IF(itsk==0) CALL spmd_exch_deleted_surf_edge( nodes%BOUNDARY_ADD,nodes,shoot_struct,
5205 . interfaces%INTBUF_TAB,newfront,
5206 . ipari,geo,
5207 . ixs,element%SHELL%IXC,ixt,ixp,ixr,ixtg,ixs(l1),
5208 . addcnel,cnel,nodes%work_array_node(omp_address),tagel )
5209 CALL my_barrier()
5210 ENDIF
5211 ! ---------------------
5212
5213 ! ---------------------
5214 ! loop over the surface id and deactivate the surface
5215 ! ONLY FOR LOCAL SURFACE / LOCAL ELEMENT
5216
5217 CALL check_surface_state( itsk,shoot_struct%SAVE_SURFACE_NB,shoot_struct%SAVE_SURFACE,
5218 . shoot_struct%SHIFT_INTERFACE,interfaces%INTBUF_TAB,
5219 . ipari,geo,
5220 . ixs,element%SHELL%IXC,ixt,ixp,ixr,ixtg,ixs(l1),
5221 . addcnel,cnel,nodes%work_array_node(omp_address),tagel,shoot_struct )
5222
5223 ! loop over the edge id and deactivate the edge
5224 ! ONLY FOR LOCAL EDGE / LOCAL ELEMENT
5225 CALL check_edge_state( itsk,shoot_struct%SAVE_M_EDGE_NB,shoot_struct%SAVE_S_EDGE_NB,
5226 . shoot_struct%SAVE_M_EDGE,shoot_struct%SAVE_S_EDGE,
5227 . shoot_struct%SHIFT_INTERFACE,interfaces%INTBUF_TAB,newfront,ipari,geo,
5228 . ixs,element%SHELL%IXC,ixt,ixp,ixr,ixtg,ixs(l1),
5229 . addcnel,cnel,nodes%work_array_node(omp_address),tagel,shoot_struct )
5230 ! ---------------------
5231
5232 ! ---------------------
5233 ! exchange of deactivated surfaces (ie. 4 nodes) to deactivate to the neighbourhood
5234 ! ONLY FOR REMOTE SURFACE + interface type 24 or 25
5235 IF(int24use>0.OR.ninter25/=0) THEN
5236 IF(itsk==0) CALL check_remote_surface_state( shoot_struct%NUMBER_REMOTE_SURF,shoot_struct%REMOTE_SURF,
5237 . shoot_struct%SHIFT_INTERFACE,interfaces%INTBUF_TAB,
5238 . ipari,nodes%BOUNDARY_ADD,shoot_struct )
5239 CALL my_barrier()
5240 IF(ninter25/=0.AND.interfaces%PARAMETERS%INT25_EROSION_SOLID > 0) THEN
5241 IF(itsk==0) THEN
5242 check_neigh_flag = shoot_struct%NUMBER_NEW_SURF + shoot_struct%NUMBER_REMOTE_SURF
5243 IF(need_comm_int25_solid_erosion(ispmd+1)) THEN
5244 check_neigh_flag = shoot_struct%NUMBER_NEW_SURF + shoot_struct%NUMBER_REMOTE_SURF
5245 CALL spmd_allreduce(check_neigh_flag,check_neigh_flag_res,1,spmd_max,comm_int25_solid_erosion)
5246 ELSEIF(nspmd==1) THEN
5247 check_neigh_flag_res = check_neigh_flag
5248 ENDIF
5249 IF(check_neigh_flag_res > 0 ) THEN
5250 CALL get_neighbour_surface( ispmd,nspmd,ninter25,npari,ninter,
5251 . nbintc,nixs,nixc,nixtg,numnod,
5252 . numels,numelc,numeltg,s_elem_state,
5253 . nbddedgt,nbddedg_max,
5254 . elem_state,ipari,intlist,nodes,
5255 . newfront,ixs,element%SHELL%IXC,ixtg,
5256 . nodes%BOUNDARY_ADD,nodes%X,
5257 . interfaces%INTBUF_TAB,interfaces%SPMD_ARRAYS,shoot_struct,
5258 . need_comm_int25_solid_erosion)
5259 ENDIF
5260 ENDIF
5261 CALL my_barrier()
5262 ENDIF
5263 ENDIF
5264 ! ---------------------
5265 ENDIF
5266
5267 IF (idel7ng>=1.AND.idel7nok==1) THEN
5268 CALL chkstfn3n(nodes,
5269 1 ipari ,geo ,ixs ,ixq ,element%SHELL%IXC ,ixt ,
5270 2 ixp ,ixr ,ixtg ,nodes%deleted_node,iparg ,itsk ,
5271 3 newfront,nodes%work_array_node(omp_address) ,nodes%MS ,nodes%IN ,output%DATA%SCAL_DMAS,nodes%ITAB ,
5272 4 nodes%ITABM1 ,addcnel , cnel ,indidel ,nindex1 ,nindex2 ,
5273 5 nindex3 ,nindex4 ,tagel ,int24use ,ibufseglo ,indseglo,
5274 6 ibufidel ,interfaces%INTBUF_TAB,nodes%BOUNDARY_ADD)
5275
5276 ENDIF
5277
5278 IF (pdel>0.AND.idel7nok==1) THEN
5279 CALL chkload(
5280 1 ibcl ,ixs ,ixq ,element%SHELL%IXC ,ixt ,ixp ,
5281 2 ixr ,ixtg ,nodes%deleted_node,itsk ,nodes%work_array_node(omp_address),nodes%ITAB ,
5282 3 nodes ,addcnel ,cnel ,tagel ,iparg ,geo ,
5283 4 ibufpdel,nindexpdel,nindexp ,npresload,loadp_tagdel ,
5284 5 iloadp ,lloadp ,nodes%BOUNDARY_ADD)
5285
5286 ENDIF
5287
5288!$OMP END PARALLEL
5289 CALL python_end_openmp(python)
5290 IF (imonm > 0 ) CALL stoptime(timers,29)
5291 CALL dealloc_shoot_inter( shoot_struct )
5292 ENDIF
5293 ENDIF
5294
5295
5296c ========================================================================================
5297C node splitting
5298C uncomment the following code for an example of node splitting (using non-physical deformation critera)
5299
5300C numnod_old = numnod
5301C numnodm_old = numnodm
5302C call test_jc_shell_detach(nodes, element, interfaces, npari, ninter, ipari, numnod,
5303C . numnodg, elbuf_tab, ngroup, ngrouc, nparg, iparg, igrouc, numelc, ispmd, nspmd,
5304C . new_crack)
5305
5306
5307C if(new_crack > 0) then
5308C ! if at least 1 node has been detached, some data must be re-initialized
5309C numnodm = numnodm_old + new_crack
5310C CALL INIT_NODAL_STATE( IPARI,SHOOT_STRUCT,INTERFACES%INTBUF_TAB,NODES%BOUNDARY_ADD,NODES%BOUNDARY,
5311C . NODES%ITAB,NODES,GEO,ADDCNEL,CNEL,
5312C . IXS,ELEMENT%SHELL%IXC,IXT,IXP,IXR,IXTG,
5313C . SIZE_ADDCNEL,SIZE_CNEL ,
5314C . numelsg,numelqg,numelcg,numeltrg,numelpg,
5315C . numelrg,numeltgg , IXS(L1))
5316
5317
5318C IF(IDEL7NG>0.OR.IRAD2R>0.OR.ALEMUSCL_Param%IALEMUSCL>0.OR.PDEL>0) THEN
5319C SIZE_ADDCNEL = NUMNOD+1
5320C SIZE_CNEL = LCNEL
5321C NELEML = NUMELS+NUMELQ+NUMELC+NUMELT+NUMELP+NUMELR+NUMELTG
5322C S_ELEM_STATE = NELEML
5323C DEALLOCATE(CNEL)
5324C ALLOCATE(CNEL(0:SIZE_CNEL))
5325C DEALLOCATE(ADDCNEL)
5326C ALLOCATE(ADDCNEL(0:SIZE_ADDCNEL))
5327C DEALLOCATE(ADDTMPL)
5328C ALLOCATE(ADDTMPL(0:NUMNOD+1))
5329C NELEML = NUMELS+NUMELQ+NUMELC+NUMELT+NUMELP+NUMELR+NUMELTG
5330C ALEMUSCL_Buffer%pCNEL => CNEL
5331C ALEMUSCL_Buffer%pADDCNEL => ADDCNEL
5332C ALEMUSCL_Buffer%pADDTMPL => ADDTMPL
5333C L1 = 1+NIXS*NUMELS + NSVOIS*NIXS
5334C L2 = L1+6*NUMELS10
5335C L3 = L2+12*NUMELS20
5336
5337C CALL CHKINIT(
5338C 2 IXS ,IXQ ,ELEMENT%SHELL%IXC ,IXT ,IXP ,
5339C 3 IXR ,IXTG ,IXS(L1) ,IXS(L2) ,
5340C 4 IXS(L3) ,IXTG1 ,GEO ,ADDCNEL ,CNEL ,
5341C 5 ADDTMPL ,IPARG )
5342
5343C ENDIF
5344C CALL ALLOCATE_OUTPUT_DATA(OUTPUT,NUMNOD)
5345C LCNE0 = SIZE(ELEMENT%PON%PROCNE)
5346C endif
5347
5348C========================================================================================
5349C NON PARALLEL SECTION (SMP)
5350C========================================================================================
5351
5352C elt deletion => need to rebuild ams mass matrix ...
5353 IF(idtmins>=1.OR.idtmins_int/=0)THEN
5354 IF(mcheck==0)THEN
5355 ismsnok=0
5356 IF(idel7ng==0)THEN
5357 IF (nspmd>1) THEN
5358C Get IDEL7NOK global
5359 IF (imonm > 0 ) CALL startime(timers,76)
5360 CALL spmd_allglob_isum9(idel7nok,1)
5361 IF (imonm > 0 ) CALL stoptime(timers,76)
5362 idel7nok = min(1,idel7nok)
5363 ENDIF
5364 ENDIF
5365 ismsnok=idel7nok
5366 ELSE
5367 ismsnok=1
5368 END IF
5369 END IF
5370
5371#ifdef DNC
5372 IF(imadcpl /=0)THEN
5373C ---------------------------------------------------------
5374C Radioss Madymo Coupling
5375C ---------------------------------------------------------
5376C IF IDEL7NOK is > Deleted elements were found
5377C MAD_FAIL_ELEMENTS is upgraded
5378C
5379C If one domain has new deleted elements, MADYMO_DEL is set to 1
5380C MADYMO_DEL is globalized with SPMD_ALLGLOB_ISUM9
5381C if Positive, all domains send the info during Time Step exchange
5382C
5383C --------------------------------------------------------
5384C Do not communicate IDEL7NOK if already done. (IDEL7NG >0)
5385C ---------------------------------------------------------
5386
5387 madymo_del_global=0
5388 madymo_del=0
5389
5390 IF (idel7nok > 0 ) THEN
5391 CALL mad_elfail( elbuf_tab,iparg,
5392 * madsol,madsh3,madsh4,
5393 * mad_tag_sol, mad_tag_sh,mad_tag_tg,
5394 * madymo_del,
5395 * mad_fail_elements)
5396
5397 ENDIF
5398
5399 madymo_del_global = madymo_del
5400
5401 CALL spmd_allglob_isum9(madymo_del_global,1)
5402 ENDIF
5403#endif
5404C ---------------------------------------------------------
5405 idel7nok=0
5406 IF (imon>0) CALL stoptime(timers,timer_contfor)
5407C
5408C========================================================================================
5409C NON PARALLEL SECTION (SMP)
5410C========================================================================================
5411
5412C----------------------------------
5413C EXTERNAL FORCES FROM SECTIONS
5414C----------------------------------
5415 IF(isecut/=0)CALL section_fio (
5416 1 nstrf ,nodes%V,nodes%VR,
5417 2 nodes%A ,nodes%AR ,secbuf,nodes%MS,nodes%IN,
5418 3 nodes%WEIGHT,iad_cut,fr_cut, output%TH%WFEXT)
5419C-----------------------------------------------------
5420C SPOTWELD ELEMENT CLUSTERS
5421C-----------------------------------------------------
5422 IF (ncluster > 0) THEN
5423 CALL clusterf(cluster ,elbuf_tab,nodes%X ,nodes%A ,nodes%AR ,
5424 . skews%SKEW ,ixs ,iparg ,fcluster,mcluster,
5425 . h3d_data,geo )
5426 ENDIF
5427
5428C-----------------------------------------------------
5429C KINEMATIC CONDITIONS FOR SEATBELTS
5430C-----------------------------------------------------
5431
5432 IF (nslipring + nretractor + n_anchor_remote > 0) THEN
5433 CALL kine_seatbelt_force(nodes%A,nodes%STIFN,flag_slipring_update,flag_retractor_update)
5434 ENDIF
5435
5436C-----------------------------------------------------
5437C INTERFACES 18 KINE
5438C-----------------------------------------------------
5439 IF(ninter /= 0.and.iale+ieuler /= 0.and.
5440 . int18kine == -1)THEN
5441
5442C========================================================================================
5443C PARALLEL SECTION (SMP)
5444C========================================================================================
5445 CALL python_begin_openmp(python)
5446!$OMP PARALLEL PRIVATE(ITSK)
5447 itsk = omp_get_thread_num()
5448
5449C /---------------/
5450 CALL my_barrier
5451C /---------------/
5452 CALL i18main_kine_1(output, ipari,interfaces%INTBUF_TAB,nodes%X ,nodes%V ,
5453 2 nodes%A ,nodes%ISKEW ,skews%SKEW ,nodes%ICODT ,wa ,
5454 3 nodes%MS ,nodes%ITAB ,itsk+1 ,nodes%KINET ,nodes%STIFN ,
5455 4 mtf ,cand_sav ,int18add ,nodes%BOUNDARY_ADD,nodes%BOUNDARY ,
5456 5 tagpene ,h3d_data ,multi_fvm,ale_connectivity%NE_CONNECT,xcell,xcell_remote)
5457!$OMP END PARALLEL
5458 CALL python_end_openmp(python)
5459 ENDIF
5460C------------------------
5461C INTERFACES TIED
5462C--- //0 ----------------
5463C========================================================================================
5464C NON PARALLEL SECTION (SMP)
5465C========================================================================================
5466 IF(ninter/=0)THEN
5467 IF (imon>0) THEN
5468 CALL startime(timers,6)
5469 CALL startime(timers,timer_contsort)
5470 ENDIF
5471 IF (imonm > 0)CALL startime(timers,28)
5472!0.
5473 DO k=0,nhin2
5474 CALL intti1(nodes,
5475 1 ipari ,nodes%X ,nodes%V ,nodes%A ,
5476 2 nodes%VR ,nodes%AR ,wa ,nodes%MS ,nodes%IN ,nodes%WEIGHT ,
5477 3 nodes%STIFN ,nodes%STIFR ,k ,nodes%ITAB ,fr_i2m ,iad_i2m ,
5478 4 addcni2,procni2,iadi2 ,i2msch ,dmas ,output%DATA%SCAL_DMAS,
5479 5 skews%SKEW ,i2size ,fr_nbcci2,output%DATA%SCAL_DINER ,igeo,bufgeo ,
5480 6 fsav ,npc ,tf ,output%DATA%VECT_CONT2 ,nodes%BOUNDARY_ADD,nodes%BOUNDARY,
5481 7 nativ_sms,dmint2,output%DATA%SCAL_DAMA2,nb_fri2m ,fr_loci2m,
5482 8 dt2t ,neltst ,ityptst ,interfaces%INTBUF_TAB ,nodes%TEMP ,nodes%MCP ,
5483 9 fthe ,condn ,glob_therm,
5484 a h3d_data,t2fac_sms,output%DATA%VECT_PCONT2,npcont2)
5485 ENDDO
5486 IF (imonm > 0) CALL stoptime(timers,28)
5487 IF (imon>0) THEN
5488 CALL stoptime(timers,timer_contsort)
5489 CALL stoptime(timers,6)
5490 ENDIF
5491C
5492 IF((idtmins/=0.OR.idtmins_int/=0).AND.ncycle==0)ismsch=1
5493
5494 ENDIF
5495C
5496C----------------------------------
5497C ITET2 of S10 Forces condensation; pass 2
5498C----------------------------------
5499
5500C========================================================================================
5501C PARALLEL SECTION (SMP)
5502C========================================================================================
5503
5504 IF (ns10e > 0) THEN
5505 CALL python_begin_openmp(python)
5506!$OMP PARALLEL
5507!$OMP+PRIVATE(ITSK,NODFTSK,NODLTSK,GREFTSK,GRELTSK)
5508 itsk = omp_get_thread_num()
5509 nodftsk = 1+itsk*numnod/ nthread
5510 nodltsk = (itsk+1)*numnod/nthread
5511 greftsk = 1+itsk*ns10e/ nthread
5512 greltsk = (itsk+1)*ns10e/nthread
5513 CALL s10cndf2(icnds10,nodes%WEIGHT ,iad_cndm,fr_cndm,fr_nbcccnd,
5514 1 addcncnd,procncnd,nodes%A ,iadcnd,fskycnd,
5515 2 itagnd ,nodftsk,nodltsk,greftsk,greltsk,
5516 3 itsk ,nodes%ITAB ,nodes%STIFN , stifnd)
5517!$OMP END PARALLEL
5518 CALL python_end_openmp(python)
5519
5520C========================================================================================
5521C NON PARALLEL SECTION (SMP)
5522C========================================================================================
5523
5524 IF (ncycle==0.OR.mcheck/=0)
5525 1 CALL cnd_dmasi2(icnds10,nkend,imap2nd,masi2nd0,nodes%MS ,nodes%WEIGHT)
5526 END IF
5527C
5528 IF(intplyxfem > 0) THEN
5529 CALL i24pxfem(
5530 1 ipari ,interfaces%INTBUF_TAB ,wagap,nodes%BOUNDARY_ADD,nodes%BOUNDARY)
5531 ENDIF
5532C
5533C----------------------------------------------------------
5534C RBE2 - FORCES and MOMENTS (Torque)
5535C----------------------------------------------------------
5536 IF (nrbe2>0.OR.r2size>0) THEN
5537 CALL my_barrier
5538 IF(itask==0)THEN
5539 IF (imon>0) CALL startime(timers,timer_kin)
5540 CALL rbe2t1(irbe2 ,lrbe2 ,nodes%X ,nodes%A ,nodes%AR ,
5541 1 nodes%MS ,nodes%IN ,skews%SKEW ,nodes%WEIGHT ,iad_rbe2,
5542 2 fr_rbe2m,nmrbe2,nodes%STIFN ,nodes%STIFR ,r2size )
5543 IF (imon>0) CALL stoptime(timers,timer_kin)
5544
5545 END IF
5546 ENDIF
5547C----------------------------------------------------------
5548C RBE3 - FORCES AND MOMENTS
5549C----------------------------------------------------------
5550 IF (nrbe3>0) THEN
5551 IF (imon>0) CALL startime(timers,timer_kin)
5552 IF (imonm > 0) CALL startime(timers,45)
5553
5554 CALL rbe3t1(rbe3 ,nodes ,skews%SKEW,
5555 1 dmas ,output%DATA%SCAL_DMAS ,diner,
5556 2 output%DATA%SCAL_DINER ,h3d_data , dt1,
5557 3 tt ,impl_s )
5558
5559 IF (imonm > 0) CALL stoptime(timers,45)
5560 IF (imon>0) CALL stoptime(timers,timer_kin)
5561 ENDIF
5562
5563C------------------------
5564C test of mass and inertia on main nodes of interf. type 2
5565C------------------------
5566 IF(tt==zero.AND.iale+ieuler+glob_therm%ITHERM==0)THEN
5567
5568 negmas=0
5569C========================================================================================
5570C PARALLEL SECTION (SMP)
5571C========================================================================================
5572
5573 CALL python_begin_openmp(python)
5574!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
5575 itsk = omp_get_thread_num()
5576 nodftsk = 1+itsk*numnod/ nthread
5577 nodltsk = (itsk+1)*numnod/nthread
5578 CALL chkmsin(nodftsk,nodltsk,nodes%ITAB,nodes%MS,nodes%IN,negmas)
5579!$OMP END PARALLEL
5580 CALL python_end_openmp(python)
5581C Implicit barrier on NEGMAS
5582 IF(negmas/=0) CALL arret(2)
5583 ENDIF
5584
5585C========================================================================================
5586C NON PARALLEL SECTION (SMP)
5587C========================================================================================
5588C
5589C Assemblage TYPE21
5590C
5591 IF(nintstamp/=0)THEN
5592 CALL intstamp_ass(intstamp,nodes%MS ,nodes%IN ,nodes%A ,nodes%AR ,
5593 . nodes%STIFN ,nodes%STIFR ,nodes%WEIGHT, output%TH%WFEXT)
5594 END IF
5595C-----------------------------------------------------
5596C RIGID BODY: SUM forces, stiff.
5597C-----------------------------------------------------
5598
5599 IF(nrbykin>0)THEN
5600 IF (imon>0) CALL startime(timers,timer_kin)
5601 IF (imonm > 0) CALL startime(timers,40)
5602
5603C========================================================================================
5604C NON PARALLEL SECTION (SMP)
5605C========================================================================================
5606
5607 CALL rbysens(
5608 1 iparg,ipari ,nodes%MS ,nodes%IN ,
5609 2 ixs ,ixq ,element%SHELL%IXC ,ixt ,ixp ,
5610 3 ixr ,skews%SKEW ,nodes%ITAB ,nodes%ITABM1,iskwn,
5611 4 npby ,wa ,lpby ,element%PON%FSKY ,nsensor,
5612 5 rby ,nodes%X ,nodes%V ,nodes%VR ,ixtg ,
5613 6 igrv ,lgrav,sensors%SENSOR_TAB,nodes%A ,nodes%AR ,
5614 7 fsav ,nodes%STIFN ,nodes%STIFR,output%DATA%FOPT,nodes%WEIGHT,
5615 8 dmas ,diner ,bufsf,fr_rby2,partsav ,
5616 9 ipart ,elbuf_tab,icfield,lcfield,nodes%TAG_S_RBY)
5617
5618C========================================================================================
5619C PARALLEL SECTION (SMP)
5620C========================================================================================
5621 CALL python_begin_openmp(python)
5622!$OMP PARALLEL
5623
5624 CALL rbyfor(timers,
5625 1 rby ,nodes%A ,nodes%AR ,nodes%X ,nodes%VR ,
5626 2 fsav ,nodes%IN ,nodes%STIFN ,nodes%STIFR ,output%DATA%FOPT ,
5627 3 lpby ,npby ,nodes%WEIGHT ,nodes%MS ,nodes%V ,
5628 4 igrsurf ,bufsf ,nodes%ICODR ,nodes%ISKEW ,skews%SKEW ,
5629 5 kindrby ,iad_rby ,fr_rby6,rby6 ,irbkin_l ,
5630 6 nrbykin_l ,nativ_sms ,sensors%SFSAV ,sensors%FSAV ,sensors%STABSEN,
5631 7 sensors%TABSENSOR,nodreac ,fthreac ,cptreac ,dampr,
5632 8 sdamp ,damp ,ndamp_vrel ,id_damp_vrel ,igrnod ,
5633 9 nodes%TAG_S_RBY ,iparit ,output%TH%WFEXT ,ndamp_vrel_rbyg ,size_rby6_c ,
5634 a rby6_c,nhier_rby)
5635
5636!$OMP END PARALLEL
5637 CALL python_end_openmp(python)
5638 IF (imon>0) CALL stoptime(timers,timer_kin)
5639 IF (imonm > 0) CALL stoptime(timers,40)
5640C-----------------------------------------------------
5641 ENDIF
5642C========================================================================================
5643C NON PARALLEL SECTION (SMP)
5644C========================================================================================
5645C-----------------------------------------------------
5646C FORCES FLEXIBLE BODIES
5647C-----------------------------------------------------
5648 IF (nfxbody>0) THEN
5649 CALL fxbyfor(output, fxbipm, fxbrpm, fxbnod, fxbmod, fxbglm,
5650 . fxbcpm, fxbcps, fxblm , fxbfls, fxbdls,
5651 . fxbdep, fxbvit, fxbacc, nodes%A, nodes%AR,
5652 . nodes%X, fxbmvn, fxbmcd, fxbse, fxbsv,
5653 . fxbelm, fxbsig, elbuf, partsav, elbuf_tab,
5654 . fsav, fxbfp, fxbefw, fxbfc, nodes%D,
5655 . dt2t, ityptst, neltst, fxbgrvi, fxbgrvr,
5656 . igrv, npc, tf , fxbgrp, fxbgrw ,
5657 . iparg , nsensor,sensors%SENSOR_TAB,nodes%BOUNDARY_ADD, nodes%BOUNDARY,
5658 . agrv ,python)
5659 END IF
5660
5661C----------------------------------------------------------
5662C ADAPTIVE MESHING : FORCES AND STIFNESS FROM SECND TO MAIN
5663C-----------------------------------------------------
5664 IF(nadmesh/=0)THEN
5665 IF (imon>0) CALL startime(timers,37)
5666 CALL admfor0(element%SHELL%IXC, ipart(k3), ixtg, ipart(k8), ipart,
5667 1 nodes%A , nodes%STIFN , nodes%AR, nodes%STIFR ,nodes%X ,
5668 2 sh4tree,sh3tree,stcnd, fthe,condn,
5669 . glob_therm%NODADT_THERM,glob_therm%ITHERM_FE)
5670 IF (imon>0) CALL stoptime(timers,37)
5671 END IF
5672C----------------------------------------------------------
5673C RIGID MATERIAL
5674C----------------------------------------------------------
5675 IF (irigid_mat > 0) THEN
5676
5677C========================================================================================
5678C PARALLEL SECTION (SMP)
5679C========================================================================================
5680
5681 CALL python_begin_openmp(python)
5682!$OMP PARALLEL
5683 CALL rmatforp(timers,
5684 1 nodes%A ,nodes%AR ,nodes%X ,nodes%VR ,nodes%IN ,
5685 2 nodes%STIFN ,nodes%STIFR ,irbym ,lnrbym ,rbym ,
5686 3 icodrbym ,nodes%WEIGHT ,nodes%MS ,nodes%V ,fr_rbym ,
5687 4 iad_rbym ,arbym ,vrbym ,arrbym ,vrrbym ,
5688 5 kindrbym ,rbym6 )
5689
5690!$OMP END PARALLEL
5691 CALL python_end_openmp(python)
5692
5693 ENDIF
5694
5695C----------------------------------------------------------
5696C Rigid wall - Force node (moving RWALL)
5697C----------------------------------------------------------
5698 IF (nrwall>0) THEN
5699 CALL rgwalf(nodes%A ,rwall%RWBUF ,rwall%NPRW ,nodes%MS )
5700 IF (rwall%nrwall_pen>0 .AND. impl_s==0) THEN
5701 nsect_offset = nsect + nintsub + ninter
5702!$OMP PARALLEL
5703 CALL rgwal0_pen(
5704 1 nodes%X ,nodes%A ,nodes%V ,nodes%MS ,numnod ,
5705 2 fsav(1,ninter+1) ,nthvki ,frwl6 ,nodes%WEIGHT_MD,ncycle ,
5706 3 output%DATA%FOPT(1,1+(nsect+nrbody)),sensors%SFSAV,sensors%FSAV ,sensors%STABSEN ,
5707 4 sensors%TABSENSOR,nsect_offset,nodes%STIFN ,dt1 ,nspmd ,
5708 5 rwall%NRWALL,rwall )
5709!$OMP END PARALLEL
5710 END IF
5711 END IF
5712
5713C-----------------------------------------------
5714C SELECTIVE MASS SCALING
5715C-----------------------------------------------
5716 IF( idtmins == 1 .AND.
5717 . (ismsch/=0.OR.ncycle==0.OR.ismsnok/=0.OR.iadmesh/=0))THEN
5718C
5719C Obsolete
5720 ELSEIF(idtmins == 2.OR.idtmins_int/=0)THEN
5721C
5722 nsgdone=1
5723 nrbdone=1
5724
5725 IF (imon>0) CALL startime(timers,39)
5726 IF (imon>0) CALL startime(timers,75)
5727
5728C========================================================================================
5729C PARALLEL SECTION (SMP)
5730C========================================================================================
5731 l1 = 1+nixs*numels + nsvois*nixs
5732
5733C Sorting of ISKYI_SMS and additional connections for TYPE2 + contact
5734 CALL spmd_sort_sms(iskyi_sms,mskyi_sms,fr_sms)
5735C
5736 IF(nspmd > 1)THEN
5737 CALL spmd_nlist_sms(fr_sms,fr_rms)
5738 END IF
5739 IF (ALLOCATED(mskyi_fi_sms)) DEALLOCATE(mskyi_fi_sms)
5740 IF (ALLOCATED(list_sms)) DEALLOCATE(list_sms)
5741 IF (ALLOCATED(list_rms)) DEALLOCATE(list_rms)
5742 IF (ALLOCATED(list_rms)) DEALLOCATE(list_rms)
5743 IF (ALLOCATED(sms_vfi)) DEALLOCATE(sms_vfi)
5744 CALL my_alloc(mskyi_fi_sms,fr_rms(nspmd+1))
5745 CALL my_alloc(list_sms,fr_sms(nspmd+1))
5746 CALL my_alloc(list_rms,fr_rms(nspmd+1))
5747 CALL my_alloc( sms_vfi,3,fr_rms(nspmd+1)+fr_sms(nspmd+1) )
5748
5749 IF (ALLOCATED(mw6)) DEALLOCATE(mw6)
5750 if (iparit /=0) then
5751 sz_mw6 = 3*numnod
5752 CALL my_alloc(mw6,6,sz_mw6)
5753 else
5754 sz_mw6 = 1
5755 CALL my_alloc(mw6,6,1)
5756 endif
5757 CALL python_begin_openmp(python)
5758!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
5759 itsk = omp_get_thread_num()
5760 nodftsk = 1+itsk*numnod/ nthread
5761 nodltsk = (itsk+1)*numnod/nthread
5762C
5763 CALL sms_build_mat_2(
5764 1 itsk ,nodftsk ,nodltsk ,
5765 2 element%SHELL%IXC ,iparg ,ixs ,ixt ,ixp ,
5766 3 ixr ,ixtg ,tagnod_sms,nodes%MS ,nodes%MS0 ,
5767 4 indx1_sms,indx2_sms,jad_sms ,jdi_sms ,lt_sms ,
5768 . kad_sms ,kdi_sms ,ltk_sms ,pk_sms ,nodii_sms ,
5770 6 jadtg_sms,diag_sms ,tagprt_sms,tagrel_sms,
5771 7 ipart(i15a),ipart(i15b),ipart(i15c),ipart(i15d),ipart(i15e),
5772 8 ipart(i15f),ipart(i15g),ipart(i15h),ipart(i15i),nodes%BOUNDARY_ADD ,
5773 9 nodes%BOUNDARY ,npby ,lpby ,tagslv_rby_sms ,lad_sms ,
5774 a jsm_sms ,dmeltg ,dmelc ,mskyi_sms,
5776 c dmels ,dmeltr ,dmelp ,dmelrt ,igeo ,
5777 d fr_sms ,fr_rms ,elbuf ,ipari ,interfaces%INTBUF_TAB,
5778 e nodes%KINET ,tagslv_i21_sms,jadi21_sms,intstamp,
5779 f ixs(l1),jads10_sms,ilink ,llink ,nnlink ,
5780 g lnlink ,tag_lnk_sms,ljoint ,iadcj ,fr_cj ,
5781 h nodes%ITAB ,nodes%WEIGHT ,dmint2 ,elbuf_tab,tagmsr_rby_sms,
5782 i rwall%NPRW ,rwall%LPRW ,rwall%FR_WALL ,nrwl_sms ,rby ,
5783 j nodes%X ,nodes%A ,nodes%AR ,nodes%IN ,nodes%V ,
5784 k nodes%VR ,irbe2 ,lrbe2 ,rbe3%IRBE3 ,rbe3%LRBE3 ,
5785 l rbe3%mpi%IAD_RBE3 ,rbe3%mpi%FR_RBE3 ,nativ_sms,t2main_sms,t2fac_sms,
5786 m mskyi_fi_sms, list_sms,list_rms,sz_mw6,mw6)
5787c
5788!$OMP END PARALLEL
5789 CALL python_end_openmp(python)
5790
5791 ptr_sms => nodxi_sms
5792
5793 ismsch=0
5794 IF (imon>0) CALL stoptime(timers,39)
5795 IF (imon>0) CALL stoptime(timers,75)
5796
5797 ENDIF
5798C----------------------------------------------------------
5799C SCALE TIME STEP
5800C========================================================================================
5801C PARALLEL SECTION (SMP)
5802C========================================================================================
5803C--- COUPLAGE RADIOSS 2 RADIOSS
5804 IF (irad2r /= 0) THEN
5805 IF (nspmd>1) CALL spmd_barrier()
5806 CALL r2r_exchange(
5807 1 iexlnk ,igrnod ,nodes%D ,nodes%V ,nodes%VR ,
5808 2 nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,nodes%STIFN ,nodes%STIFR ,
5809 3 r2r_on ,dd_r2r ,nodes%WEIGHT ,nodes%BOUNDARY_ADD,nodes%BOUNDARY ,rby ,
5810 4 nodes%XDP ,nodes%X ,dd_r2r_elem, sdd_r2r_elem,off_sph_r2r,
5811 5 numsph_glo_r2r,nloc_dmg)
5812C
5813 IF (flg_sphinout_r2r/=0) THEN
5814 DO i=1,numnod
5815 IF (off_sph_r2r(i)==2) THEN
5816 off_sph_r2r(i) = 1
5817 ELSE
5818 off_sph_r2r(i) = 0
5819 ENDIF
5820 END DO
5821 ENDIF
5822C
5823 ENDIF
5824
5825C========================================================================================
5826C NON PARALLEL SECTION (SMP)
5827C========================================================================================
5828
5829C----------------------------
5830 23 CONTINUE
5831
5832C----------------------------------------------------------
5833C INTER/TYPE21 TIME STEP
5834C----------------------------------------------------------
5835 IF(nintstamp/=0)THEN
5836 CALL intstamp_dt(intstamp,ipari,neltst,ityptst,dt2t,
5837 . ptr_sms ,diag_sms,nodes%MS ,nodes%V ,nodes%STIFN,
5838 . nodes%STIFR )
5839 END IF
5840
5841 imsch=0
5842!
5843 IF (flg_damp_funct==1) THEN
5844 CALL damping_funct_ini(dampr, nrdamp, ndamp, tt,iroddl)
5845 ENDIF
5846 IF (flg_dtnodamp==1) THEN
5847C---------------NODAL TIME STEP FOR DAMPING-----------------
5848 IF (idamp_rdof==ndamp)
5849 + CALL dtnodamp(nodes%ITAB ,nodes%MS ,nodes%IN ,nodes%STIFN ,nodes%STIFR ,dt2t ,
5850 1 nodes%WEIGHT ,igrnod ,dampr ,istop ,
5851 2 idamp_rdof_tab,icontact,element%SHELL%IXC,nodes%X)
5852 IF (ndamp>0 .OR. istat==3)
5853 + CALL dtnodarayl(nodes%MS ,nodes%IN ,nodes%STIFN ,nodes%STIFR ,dt2t ,
5854 1 igrnod ,dampr )
5855 ENDIF
5856C --------------------------
5857
5858 IF (i_exch_flg_raz==0) THEN
5859 ! Flag for reset of stifn and stifr - must be set only at first cycle - ncycle=0 not enough because of chkpt
5860 ! I_EXCH_FLG_RAZ ensures that it is set only once
5861
5862 flg_kj2_raz = flg_kj2
5863 IF (nspmd > 1) call spmd_allreduce(flg_kj2,flg_kj2_raz,1,spmd_sum)
5864 i_exch_flg_raz = 1
5865 ENDIF
5866C
5867 IF (flg_kj2==1) THEN
5868C
5869 IF (ncycle==0) THEN
5870 ALLOCATE(stk_sn(numnod),stk_sr(numnod))
5871 stk_sn(1:numnod)=nodes%STIFN(1:numnod)
5872 stk_sr(1:numnod)=nodes%STIFR(1:numnod)
5873 ENDIF
5874C
5875 CALL joint_elem_timestep(nodes%MS,nodes%IN,nodes%STIFN,nodes%STIFR,ixr,ipart,
5876 1 ipart(k6),igeo,geo,npby,iparg,elbuf_tab,
5877 2 dt2t,neltst,ityptst,nrbody,nodes%ITAB)
5878 ENDIF
5879
5880C----------------------------------------------------------
5881C FIND TARGET_DT FOR DEFINED % OF ADDED MASS
5882C----------------------------------------------------------
5883 IF ((ncycle==0).AND.(idt_percent_addmass > 0).AND.(idtmin(11)==3.OR.idtmin(11)==8)) THEN
5884 CALL find_dt_for_targeted_added_mass(nodes%MS,nodes%STIFN,dtfac1(11),idtgr(11),target_dt,
5885 . percent_addmass,percent_addmass_old,mass0_start,nodes%WEIGHT_MD,igrnod,
5886 . icnds10)
5887 dtmin1(11) = max(dtmin1(11),target_dt)
5888 ELSEIF ((idt_percent_addmass == 2).AND.(idtmin(11) == 8)) THEN
5889C-- For /DT/NODA/STOP + % added mass - IDTMIN switch back to 1 after first cycle
5890 IF (idt_percent_addmass == 2) THEN
5891 idtmin(11) = 1
5892 dtmin1(11) = dt_stop_percent_addmass
5893 ENDIF
5894 ENDIF
5895
5896C--------------------------------------------------
5897C UPDATE MINIMUM NODAL DT IF DT IS GIVEN BY FVMBAG
5898C--------------------------------------------------
5899 IF(nspmd > 1 .AND. nvolu > 0 .AND. nfvbag0 > 0) THEN
5900 !
5901 ! End asynchronous communication
5902 ! This is an implicit Barrier
5903 !
5904 CALL mpi_min_real_end(dt2r,min_tab,4,mpi_buf)
5905 ! This call changes DT2R and MIN_TAB the to minimum value of
5906 ! DT2R and the corresponding MIN_TAB.
5907
5908 ! NELTS = MIN_TAB(1)
5909 ! ITYPTS= MIN_TAB(2)
5910 ! ISPMD = MIN_TAB(4) ! ID of the proc. that has the mini. value of DT2R
5911
5912 ! DT2 = DT2R ! Min over the proc. of the value of DT2
5913
5914 dtmin1_save = dtmin1(11)
5915 IF(min_tab(2) == 52) dtmin1(11) = min(dtmin1_save,dt2r,1.1*dt2old)
5916
5917 ELSE
5918
5919 dtmin1_save = dtmin1(11)
5920 IF(itypts == 52) dtmin1(11) = min(dtmin1_save,dt2,1.1*dt2old)
5921
5922 ENDIF
5923
5924C
5925
5926C------------------------------------
5927C THERMAL TIME STEP COMPUTATION
5928C-----------------------------
5929 IF (glob_therm%IDT_THERM == 1)THEN
5930 dt2 = glob_therm%DT_THERM
5931 dt2t = dt2
5932 ENDIF
5933C
5934
5935 IF((anim_n(18) /= 0 .OR. h3d_data%N_SCAL_STIFR /= 0) .AND. iroddl /= 0)
5936 . stifr_tmp(1:numnod)=nodes%STIFR(1:numnod)
5937 IF(anim_n(19) /= 0 .OR. h3d_data%N_SCAL_STIFN /= 0)
5938 . stifn_tmp(1:numnod)=nodes%STIFN(1:numnod)
5939
5940C========================================================================================
5941C PARALLEL SECTION (SMP)
5942C========================================================================================
5943 CALL python_begin_openmp(python)
5944!$OMP PARALLEL
5945!$OMP+PRIVATE(ITSK,DT2TT,NELTSTT,ITYPTSTT,NODFTSK,NODLTSK)
5946!$OMP+PRIVATE(DMAST,DINERT)
5947
5948 dt2tt = dt2t
5949 neltstt = neltst
5950 ityptstt= ityptst
5951 dmast = zero
5952 dinert = zero
5953 itsk = omp_get_thread_num()
5954 nodftsk = 1+itsk*numnod/ nthread
5955 nodltsk = (itsk+1)*numnod/nthread
5956
5957C----------------------------------------------------------
5958C NODAL TIME STEP
5959C----------------------------------------------------------
5960 IF(istatcnd/=0)THEN
5961C additional storage due to reset of stifn stifr
5962 stcnd(nodftsk:nodltsk)=nodes%STIFN(nodftsk:nodltsk)
5963 strcnd(nodftsk:nodltsk)=nodes%STIFR(nodftsk:nodltsk)
5964 ENDIF
5965
5966 IF(idtmins==0)THEN
5967C IF(IDTMINS==0.AND.IDTMINS_INT==0)THEN
5968 CALL dtnoda(
5969 1 nodftsk,nodltsk ,neltstt,ityptstt ,nodes%ITAB ,
5970 2 nodes%MS ,nodes%IN ,nodes%STIFN ,nodes%STIFR ,dt2tt ,
5971 3 dmast,dinert,output%DATA%SCAL_DT,output%DATA%SCAL_DMAS,imsch ,
5972 4 nodes%WEIGHT,nodes%A ,nodes%AR ,igrnod ,glob_therm%nodadt_therm,
5973 5 output%DATA%SCAL_DINER,rbym ,arbym ,arrbym,nodes%WEIGHT_MD,
5974 6 nodes%MCP ,mcp_off,condn ,ale_connectivity%NALE ,h3d_data )
5975 ELSEIF(idtmins/=0)THEN
5976 CALL dtnodams(
5977 1 nodftsk,nodltsk ,neltstt,ityptstt ,nodes%ITAB ,
5978 2 nodes%MS ,nodes%IN ,nodes%STIFN ,nodes%STIFR ,dt2tt ,
5979 3 dmast,dinert,output%DATA%SCAL_DT,output%DATA%SCAL_DMAS,imsch ,
5980 4 nodes%WEIGHT,nodes%A ,nodes%AR ,igrnod ,
5981 5 output%DATA%SCAL_DINER,rbym ,arbym ,arrbym ,ismsch ,
5982 6 nativ_sms ,diag_sms ,npby,tagmsr_rby_sms,
5983 7 h3d_data )
5984 END IF
5985
5986#include "lockon.inc"
5987 dmas = dmas + dmast
5988 diner = diner + dinert
5989 IF (glob_therm%IDT_THERM == 1)THEN
5990 IF(dt2tt<=dt2t)THEN
5991C---------Check remaining time for end simulation and correct time step----
5992C------------Need to stop computation at Tstop for /DT/THERM----------
5993
5994 trest=max(tstop-tt,zero)
5995
5996 dtrest = trest*(one+em10)
5997
5998 dt2t = min(dt2tt,dtrest)
5999 neltst = neltstt
6000 ityptst= ityptstt
6001 ENDIF
6002 ELSE
6003 IF(dt2tt<dt2t)THEN
6004 dt2t = dt2tt
6005 neltst = neltstt
6006 ityptst= ityptstt
6007 END IF
6008 ENDIF
6009#include "lockoff.inc"
6010
6011!$OMP END PARALLEL
6012 CALL python_end_openmp(python)
6013
6014C ----RAZ of NODES%STIFN AND NODES%STIFR for kjoints with element time step----------------------
6015 IF ((flg_kj2_raz==1).AND.(i7kglo==0).AND.(idtmins==0).AND.(nodadt==0)) THEN
6016 nodes%STIFN(1:numnod) = em20
6017 IF (iroddl > 0) nodes%STIFR(1:numnod) = em20
6018 ENDIF
6019C
6020 dtmin1(11) = dtmin1_save
6021
6022C========================================================================================
6023C NON PARALLEL SECTION (SMP)
6024C========================================================================================
6025C
6026 IF (glob_therm%IDT_THERM == 1)THEN
6027 IF(dt2t<dt2)THEN
6028 nelts = neltst
6029 itypts = ityptst
6030 dt2 = dt2t
6031 ENDIF
6032 ELSE
6033 IF(dt2t<dt2)THEN
6034 nelts = neltst
6035 itypts = ityptst
6036 dt2 = dt2t
6037 ENDIF
6038 ENDIF
6039
6040C----------------------------
6041C IMPLICIT SYNCHRONISATION On DT2 FBIG
6042C----------------------------
6043
6044
6045C-----------------------------
6046 IF(ale%SUB%IALESUB==2 .AND.ale%SUB%IFSUB==2)THEN
6047 IF(nspmd>1) THEN
6048 iwiout = 0
6049 IF (ispmd/=0) CALL spmd_chkw(iwiout,iout)
6050 CALL spmd_glob_min5(dt2 ,itypts,nelts ,nodes%ICODT ,imsch,
6051 . tstop,iwiout,mstop, ismsch,
6052 . int24use,nbintc,intlist,ipari,interfaces%INTBUF_TAB)
6053
6054 IF(nspmd>1.AND.iwiout>0) THEN
6055 CALL spmd_wiout(iout,iwiout)
6056 iwiout = 0
6057 ENDIF
6058
6059 IF(iexicodt>0) THEN
6060 length = 1
6061 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
6062 CALL spmd_exch_icodt(nodes%ICODT,nodes%BOUNDARY_ADD,nodes%BOUNDARY,length,lenr)
6063 iexicodt = 0
6064 ENDIF
6065 ENDIF
6066
6067
6068C========================================================================================
6069C PARALLEL SECTION (SMP)
6070C========================================================================================
6071 CALL python_begin_openmp(python)
6072!$OMP PARALLEL
6073!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
6074!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,DT2TT,NELTSTT,ITYPTSTT)
6075!$OMP+ PRIVATE(GREFTSK,GRELTSK)
6076C Init var parallel SMP
6077 CALL smp_init(itsk,nodftsk,nodltsk,numntsk,ndtsk,ipmtsk,partftsk,partltsk,nwaftsk,igmtsk,greftsk,greltsk)
6078 dt2tt = dt2t
6079 neltstt = neltst
6080 ityptstt= ityptst
6081 CALL alesub2(
6082 1 ale_connectivity%NALE,nodes%V ,dsave ,nodes%ICODT ,nodes%ISKEW,
6083 2 skews%SKEW ,asave ,nodes%A ,nodes%D ,neltstt,
6084 3 ityptstt ,itsk ,nodftsk ,nodltsk ,dt2save,
6085 4 dt2tt ,neltsa ,ityptsa ,nelts ,
6086 5 nodes%WEIGHT ,element%PON%FSKY ,element%PON%FSKY )
6087#include "lockon.inc"
6088 IF(dt2tt<dt2t)THEN
6089 dt2t = dt2tt
6090 neltst = neltstt
6091 ityptst= ityptstt
6092 END IF
6093#include "lockoff.inc"
6094!$omp END parallel
6095 CALL python_end_openmp(python)
6096C========================================================================================
6097C NON PARALLEL SECTION (SMP)
6098C========================================================================================
6099 ale%SUB%IFSUB=0
6100 ale%SUB%IFSUBM=0
6101C-----------------------------
6102C SPMD update restart writing
6103C-----------------------------
6104 GOTO 21
6105 ENDIF
6106 IF (imon>0) CALL startime(timers,6)
6107C----------------------------------
6108C SCALE TIME STEP FOR OLD AIRBAGS
6109C----------------------------------
6110 IF(nrbag > 0)THEN
6111 IF (imonm > 0) CALL startime(timers,50)
6112 CALL rbagdt(geo,igeo)
6113 IF (imonm > 0) CALL stoptime(timers,50)
6114 ENDIF
6115C----------------------------------
6116C SCALE TIME STEP FOR
6117C - MONITORED VOLUMES
6118C - a M + b K DAMPING
6119C----------------------------------
6120 IF(nvolu > 0)THEN
6121 IF (imonm > 0) CALL startime(timers,50)
6122 IF(nspmd>1)CALL spmd_glob_minv(t_monvol,dt2,itypts,nelts,volmon, fr_mv)
6123 IF(python%NB_FUNCTS > 0) CALL python_monvol(t_monvol)
6124C========================================================================================
6125C DOMAIN 0
6126C========================================================================================
6127 IF(ispmd == 0) CALL mvoludt(monvol,volmon)
6128 IF (imonm > 0) CALL stoptime(timers,50)
6129 ENDIF
6130C----------------------------------
6131 IF (imonm > 0) CALL startime(timers,52)
6132 IF (nodadt==0) THEN
6133 IF (istat==3) THEN
6134 dampa3 = two*betate/(one + betate * dt12)
6135 IF (dt2>=ep06) dampa3=zero
6136 ELSE
6137 dampa3 = zero
6138 END IF
6139
6140 IF(idamp>0)THEN
6141 IF(dampb>=zero)THEN
6142 bb = (min(dampb,dt1,dt2) + half*(dampa+dampa3)*dt2*dt2)
6143C-- IF no node/elemt on proc - dt2=10E6 -> dt2 can be equal to zero
6144 IF (dt2>=ep06) bb = zero
6145 dt2 = sqrt(bb*bb + dt2*dt2) - bb
6146 ELSE
6147 bb = one - dampb - dampb
6148 dt2 = dt2/sqrt(bb)
6149 ENDIF
6150 ELSEIF(ndamp>0) THEN
6151 IF(nrdamp==4)THEN
6152 bb = zero
6153 DO i=1,ndamp
6154 dampa = dampr(3,i)
6155 dampb = dampr(4,i)
6156 d_tstart = dampr(17,i)
6157 d_tstop = dampr(18,i)
6158C-- IF no node/elemt on proc - dt2=10E6 -> dt2 can be equal to zero
6159 IF ((tt>=d_tstart).AND.(tt<=d_tstop).AND.(dt2 < ep06))
6160 . bb=max(bb,(min(dampb,dt1,dt2)+half*(dampa+dampa3)*dt2*dt2))
6161 ENDDO
6162 ELSE
6163 bb = zero
6164 IF (flg_dtnodamp==1) GOTO 600
6165 DO i=1,ndamp
6166 dampa = max(dampr(3,i),dampr(5,i),dampr(7,i))
6167 dampa = max(dampa,dampr(9,i),dampr(11,i),dampr(13,i))
6168 dampb = max(dampr(4,i),dampr(6,i),dampr(8,i))
6169 dampb = max(dampb,dampr(10,i),dampr(12,i),dampr(14,i))
6170C-- /DAMP/VREL - recompute damping parameters at current time
6171 fl_vrel = nint(dampr(21,i))
6172 IF (fl_vrel==2) THEN
6173 call damping_vref_compute_dampa(i,ndamp,nrdamp,dampr,dt1,tt,damp_a)
6174 dampa = max(damp_a(1),damp_a(2),damp_a(3))
6175 dampb = zero
6176 ENDIF
6177 factb = dampr(16,i)
6178 d_tstart = dampr(17,i)
6179 d_tstop = dampr(18,i)
6180C-- IF no node/elemt on proc - dt2=10E6 -> dt2 can be equal to zero
6181 IF ((tt>=d_tstart).AND.(tt<=d_tstop).AND.(dt2 < ep06)) THEN
6182 dampt = min(dt1,dt2)*factb
6183 bb=max(bb,(min(dampb,dampt)+half*(dampa+dampa3)*dt2*dt2))
6184 ENDIF
6185 ENDDO
6186600 CONTINUE
6187 END IF
6188 dt2 = sqrt(bb*bb + dt2*dt2) - bb
6189 ELSEIF(istat==3) THEN
6190 bb = half*dampa3*dt2*dt2
6191 dt2 = sqrt(bb*bb + dt2*dt2) - bb
6192 ENDIF
6193 END IF !(NODADT==0) THEN
6194
6195 IF (imonm > 0) CALL stoptime(timers,52)
6196
6197
6198 ! ----------------------
6199 ! user library : check out
6200 IF(dlib_struct(id_engine_user_check)%DLIB_BOOL) THEN
6201 tstop_user = tstop
6202 tt_user = tt
6203 mstop_user = 0
6204 ncycle_user = ncycle
6205 CALL engine_user_check(ispmd_user,tstop_user,ncycle_user,tt_user,mstop_user)
6206 IF(mstop_user > 0) THEN
6207 mstop=1
6208 mrest=1
6209 ENDIF
6210 ENDIF
6211 ! ----------------------
6212#ifdef DNC
6213 IF(mds_avail==1) THEN
6214 tstop_user = tstop
6215 tt_user = tt
6216 mstop_user = 0
6217 ncycle_user = ncycle
6218 CALL mds_engine_user_check(ispmd_user,tstop_user,ncycle_user,tt_user,mstop_user)
6219 IF(mstop_user > 0) THEN
6220 mstop=1
6221 mrest=1
6222 ENDIF
6223 ENDIF
6224#endif
6225
6226 ! ----------------------
6227 ! *.out file check tmp files for other domains
6228
6229 IF (imonm > 0) CALL startime(timers,53)
6230 IF(nspmd>1) THEN
6231 iwiout = 0
6232 IF (ispmd/=0) CALL spmd_chkw(iwiout,iout)
6233 ENDIF
6234
6235 IF(nspmd>1)THEN
6236 CALL spmd_glob_min5(dt2 ,itypts,nelts ,nodes%ICODT ,imsch,
6237 . tstop,iwiout,mstop ,ismsch,
6238 . int24use,nbintc,intlist,ipari,interfaces%INTBUF_TAB)
6239
6240 ! -------------------------------------------------------------------
6241 ! Writing content of tmp file in output file for other MPI domains
6242 ! -------------------------------------------------------------------
6243 IF(iwiout>0) THEN
6244 CALL spmd_wiout(iout,iwiout)
6245 iwiout = 0
6246 ENDIF
6247
6248C If FVMBAGS switch to UP using NPOLH criterion, then
6249C an SPMD communication must be made to warn all processors (only
6250C processes in charge of the FVMBAGS know NPOLH)
6251 IF(nfvbag0 >0 .AND. check_npolh) CALL spmd_fvb_switch(monvol)
6252
6253 IF(iexicodt>0) THEN
6254 length = 1
6255 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
6256 CALL spmd_exch_icodt(nodes%ICODT,nodes%BOUNDARY_ADD,nodes%BOUNDARY,length,lenr)
6257 iexicodt = 0
6258 ENDIF
6259 ENDIF
6260
6261 IF (glob_therm%IDT_THERM == 0) dt2= min(dt2,1.1*dt2old,dtmx)
6262 IF (impl_s==1) CALL imp_dt2(dt2)
6263
6264 IF (imonm > 0) CALL stoptime(timers,53)
6265
6266C --------------------------
6267 IF ( ncycle == 0 .AND. flg_kj2_raz > 0 ) THEN ! All processes should go in this block
6268
6269 if (ispmd==0)then
6270 write(iout,'(A)') ' '
6271 write(iout,'(A/)') ' AUTOMATIC STIFFNESS COMPUTATION FOR JOINTS'
6272 write(iout,'(A)') ' JOINT ID TYPE KNN KNR'
6273 endif
6274
6275 IF (flg_kj2 == 1) then
6276 CALL joint_block_stiffness(nodes%ITAB,nodes%MS,nodes%IN,stk_sn,stk_sr,
6277 1 nodes%WEIGHT,ixr,ipart,nodes%X,ipart(k6),
6278 2 igeo,geo,npby,iparg,elbuf_tab,dmast,dinert)
6279 DEALLOCATE(stk_sn,stk_sr)
6280 ENDIF
6281
6282 ! After joint_block_stiffness : Flush .tmp files in *.out for all domains except ispmd=0
6283
6284 iwiout = 0
6285 IF (ispmd/=0) CALL spmd_chkw(iwiout,iout)
6286 call spmd_allreduce(iwiout,iwiout_result,1,spmd_sum)
6287 iwiout = iwiout_result
6288 IF(iwiout>0) CALL spmd_wiout(iout,iwiout)
6289 iwiout = 0
6290
6291 if (ispmd==0)then
6292 write(iout,'(A)') ' '
6293 endif
6294
6295 ENDIF
6296C--------------------------------------------------------------C
6297C RADIOSS 2 RADIOSS COUPLING
6298C--------------------------------------------------------------C
6299 IF (irad2r /= 0 .AND. r2r_activ == 1) THEN
6300 CALL r2r_sendkine(iexlnk,igrnod,nodes%MS,nodes%IN)
6301 IF (nspmd>1) CALL spmd_barrier()
6302C--------------------------------------------------------------C
6303 CALL python_begin_openmp(python)
6304!$OMP PARALLEL PRIVATE(ITSK)
6305!$OMP MASTER
6306C--------------------------------------------------------------C
6307C--------------------------------------------------------------C
6308 IF (imonm > 0) CALL startime(timers,54)
6309 IF (ncycle == zero) tt_dp = tt
6310C--------------------------------------------------------------C
6311 IF(ispmd==0)THEN
6312 CALL r2r_sem_c()
6313 IF (iresp==1) CALL send_fbufdp_c(tt_dp,1)
6314 IF (iresp/=1) CALL send_fbufdp_c(tt,1)
6315 IF ((r2r_siu==1).AND.(iddom/=0)) THEN
6316 CALL get_ibuf_c(r2r_th_main,10)
6317 ENDIF
6318 CALL send_fbuf_c(dt2,1)
6319 CALL send_ibuf_c(r2r_mfilr,1)
6320 CALL send_ibuf_c(r2r_mstop,1)
6321 IF (r2r_mfilr==1) THEN
6322 CALL send_fbuf_c(tman_r2r,1)
6323 CALL send_ibuf_c(r2r_ctr,3)
6324 ENDIF
6325 IF (iresp==1) CALL get_fbufdp_c(tt_dp,1)
6326 IF (iresp/=1) CALL get_fbufdp_c(tt,1)
6327 CALL get_ibuf_c(mrest,1)
6328 CALL get_ibuf_c(r2r_mfilr,1)
6329 CALL get_ibuf_c(r2r_mstop,1)
6330 IF (r2r_mfilr==2) THEN
6331 CALL get_fbuf_c(tman_r2r,1)
6332 CALL get_ibuf_c(r2r_ctr,3)
6333 ENDIF
6334 CALL get_fbuf_c(dt2,1)
6335 END IF
6336C--------------------------------------------------------------C
6337 IF(nspmd>1)THEN
6338 IF(ispmd==0) THEN
6339 rbuf(1) = tt
6340 rbuf(2) = dt2
6341 END IF
6342 CALL spmd_rbcast(rbuf,rbuf,2,1,0,2)
6343 CALL spmd_ibcast(mrest,mrest,1,1,0,2)
6344 CALL spmd_ibcast(r2r_th_main,r2r_th_main,10,1,0,2)
6345 IF(ispmd/=0) THEN
6346 tt = rbuf(1)
6347 dt2 = rbuf(2)
6348 END IF
6349 END IF
6350C--------------------------------------------------------------C
6351 IF ((r2r_siu==1).OR.(nspmd==1)) THEN
6352 CALL r2r_sem_c()
6353 CALL get_ibuf_c(bid,1)
6354 CALL r2r_unlock_threads_c(nthread)
6355 ELSEIF (ispmd==0) THEN
6356 CALL r2r_sem_c()
6357 CALL get_ibuf_c(bid,1)
6358 CALL r2r_unlock_threads_c(nthread*nspmd)
6359 ENDIF
6360!$OMP END MASTER
6361 CALL r2r_block_c()
6362C--------------------------------------------------------------C
6363!$OMP END PARALLEL
6364 CALL python_end_openmp(python)
6365C--------------------------------------------------------------C
6366C--------------------------------------------------------------C
6367
6368 CALL r2r_getdata(iexlnk ,igrnod ,nodes%X ,nodes%V ,
6369 . nodes%VR ,nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,
6370 . nodes%XDP ,nodes%D ,r2r_on ,dd_r2r ,nodes%WEIGHT ,
6371 . nodes%BOUNDARY_ADD,nodes%BOUNDARY ,nodes%STIFN ,nodes%STIFR ,dd_r2r_elem ,
6372 . sdd_r2r_elem,nloc_dmg, output%TH%WFEXT, output%TH%WFEXT_MD)
6373
6374 IF (imonm > 0) CALL stoptime(timers,54)
6375
6376 ENDIF
6377
6378#ifdef DNC
6379C----------------------------------------------
6380C Radioss Madymo coupling - Exchange Timesteps
6381C----------------------------------------------
6382 IF(imadcpl==1)THEN
6383 madendrequest = 0
6384 IF (imonm > 0) CALL startime(timers,55)
6385C Exchange Time Step
6386 CALL tstp_exch_madcpl(madendrequest,madclnod,madclfrecv,nodes%V,nodes%A,nodes%MS ,madymo_del_global )
6387 IF (madendrequest == -1)THEN
6388 mstop = 2
6389 CALL trace_out(3)
6390 RETURN
6391 ENDIF
6392 IF (imonm > 0) CALL stoptime(timers,55)
6393 ENDIF
6394#endif
6395C-----------------------------------------------------
6396 IF (vipercoupling) THEN
6397C Compare timesteps from Viper and Radioss & select the smallest
6398 CALL radiossviper_receivesenddt(viper%id,tt,dt2)
6399 ENDIF
6400C-----------------------------------------------------
6401! reducing dt2 due to /INIVEL
6402 IF(loads%NINIVELT_G>0) CALL inivel_dt2(loads%NINIVELT,loads%INIVELT,sensors,tt , dt2 ,nspmd)
6403C-----------------------------
6404 IF (imonm > 0) CALL startime(timers,53)
6405 dt2old=dt2
6406 IF (inconv==1) THEN
6407 dt12=half*(dt1+dt2)
6408 dt3=dt1
6409 ENDIF
6410 IF(ale%SUB%IALESUB==0)dt2s=dt2
6411
6412 IF (irad2r /= 0) THEN
6413 IF(ispmd==0)THEN
6414 r2rfx1 = r2rfx1*dt2 + r2rfx2*dt12*dt2
6415 ENDIF
6416 ENDIF
6417C EXTERNAL WORK OF CONCENTRATED LOADS
6418 IF (nconld/=0.AND.impl_s/=1) THEN
6419 output%TH%WFEXT = output%TH%WFEXT + wfexc*dt2
6420 ENDIF
6421
6422 IF (imonm > 0) CALL stoptime(timers,53)
6423 IF (imon>0) CALL stoptime(timers,6)
6424
6425C========================================================================================
6426C PARALLEL SECTION (SMP)
6427C========================================================================================
6428 IF (imon>0) CALL startime(timers,timer_io)
6429
6430 CALL python_begin_openmp(python)
6431!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
6432
6433 itsk = omp_get_thread_num()
6434 nodftsk = 1+itsk*numnod/ nthread
6435 nodltsk = (itsk+1)*numnod/nthread
6436
6437C--- // ---------------------------------------
6438C OUTPUT (ANIM,OUTP,H3D,TH) STEP 1 ON 3 TO GET FREAC/MREAC
6439C adding FEXT+FINT
6440C-----------------------------------------------
6441 IF(comptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
6442 CALL reaction_forces_1(nodftsk,nodltsk,nodes%A,nodes%AR,freac)
6443 END IF
6444
6445C--- // ----------------------------------------
6446C INTERNAL FORCES (ANIM, OUTP, H3D)
6447C-----------------------------------------------
6448 CALL forani2(output,nodes%A,nodftsk,nodltsk,h3d_data)
6449
6450!$OMP END PARALLEL
6451 CALL python_end_openmp(python)
6452
6453 IF (imon>0) CALL stoptime(timers,timer_io)
6454C-----------------------------------------------
6455C SELECTIVE MASS SCALING
6456C-----------------------------------------------
6457 IF(idtmins == 1)THEN
6458C
6459C Obsolete
6460 ELSEIF(idtmins == 2.OR.idtmins_int /= 0)THEN
6461
6462 IF (imon>0) CALL startime(timers,39)
6463
6464C========================================================================================
6465C PARALLEL SECTION (SMP)
6466C========================================================================================
6467
6468 CALL my_alloc(cjwork,18,njoint)
6469 CALL my_alloc(frea,3,numnod)
6470 CALL my_alloc(irwl_work,slprw)
6471 CALL python_begin_openmp(python)
6472!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
6473 itsk = omp_get_thread_num()
6474 nodftsk = 1+itsk*numnod/ nthread
6475 nodltsk = (itsk+1)*numnod/nthread
6476 CALL sms_mass_scale_2(timers,python,
6477 1 itsk ,nodftsk ,nodltsk ,nodii_sms ,indx2_sms ,
6478 2 nodxi_sms,nodes%MS ,nodes%MS0 ,nodes%A ,nodes%ICODT ,
6479 3 nodes%ICODR ,nodes%ISKEW ,skews%SKEW,jad_sms ,jdi_sms ,
6480 4 lt_sms ,x_sms ,p_sms ,z_sms ,y_sms ,
6481 5 prec_sms ,indx1_sms ,diag_sms ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,
6482 6 nodes%WEIGHT ,npby ,lpby ,
6484 8 vel ,npc ,tf ,nodes%V ,nodes%X ,
6485 9 nodes%D ,sensors%SENSOR_TAB,nsensor,iframe,xframe,
6486 a jadi_sms ,jdii_sms ,lti_sms ,fr_sms ,fr_rms ,
6487 b iskyi_sms,mskyi_sms,res_sms ,igrv ,agrv ,
6488 c lgrav ,ilink ,llink ,fr_rl ,frl6 ,
6489 d nnlink ,lnlink ,fr_ll ,fnl6 ,tag_lnk_sms,
6490 e nodes%ITAB ,fsav ,ljoint ,iadcj ,fr_cj ,
6491 f nodes%AR ,nodes%VR ,nodes%IN ,frl ,fnl ,
6492 g rwall%NPRW ,rwall%LPRW ,rwall%RWBUF ,rwall%RWSAV ,
6493 h output%DATA%FOPT(1,1+(nsect+nrbody)),rwall%FR_WALL ,nrwl_sms ,
6494 i intstamp ,nodes%KINET ,element%SHELL%IXC ,ixtg ,sh4tree ,
6495 j sh3tree ,cptreac ,nodreac ,fthreac ,
6496 k frwl6 ,3+iroddl*3,nodes%TAG_S_RBY,dampr , damp ,
6497 l igrnod ,nodes%DR ,rby ,tagmsr_rby_sms,
6498 m jsm_sms ,irbe2 ,lrbe2 ,iad_rbe2 ,fr_rbe2m ,
6499 n nmrbe2 ,r2size ,rbe3%IRBE3 ,rbe3%LRBE3 ,rbe3%FRBE3 ,
6500 o rbe3%mpi%IAD_RBE3 ,rbe3%mpi%FR_RBE3,rbe3%mpi%FR_RBE3MP ,rbe3%RRBE3 ,rbe3%RRBE3_PON,
6501 p prec_sms3 ,diag_sms3,iad_rby ,fr_rby6 ,rby6 ,
6502 q rbe3%irotg_sz ,betate ,ibcscyc ,lbcscyc,
6503 r mskyi_fi_sms, list_sms,list_rms,cjwork,frea,
6504 s irwl_work,sms_vfi,sz_mw6,mw6,output%TH%WFEXT,ams_work)
6505
6506!$omp END parallel
6507 CALL python_end_openmp(python)
6508
6509 IF (ALLOCATED(cjwork)) DEALLOCATE(cjwork)
6510 IF (ALLOCATED(frea)) DEALLOCATE(frea)
6511 IF (ALLOCATED(irwl_work)) DEALLOCATE(irwl_work)
6512
6513 IF (imon>0) CALL stoptime(timers,39)
6514
6515 ENDIF
6516
6517 idum1=0
6518 rdum1=zero
6519C
6520 k1=1+lipart1*(npart+nthpart)+2*9*(npart+nthpart)
6521 k2=k1+numels
6522 k3=k2+numelq
6523 k4=k3+numelc
6524 k5=k4+numelt
6525 k6=k5+numelp
6526 k7=k6+numelr
6527 k8=k7
6528 k9=k8+numeltg
6529 k10=k9+numelx
6530 k11=k10+numsph
6531
6532C-----------------------------------------------------------------
6533C IMPLICIT SYNCHRONIZATION (FORCES), FV(FUNC) AND SKEW(MOVING)
6534C-----------------------------------------------------------------
6535
6536 IF (impl_s == 1) THEN
6537 encin = zero
6538 enrot = zero
6539 encin2 = zero
6540 enrot2 = zero
6541 IF (imon>0) CALL startime(timers,timer_integ)
6542C-----------------------
6543 IF (impl_s==1 .AND. inconv==1) THEN
6544 CALL thbcs_imp(nodft,nodlt ,nodes%A,nodes%AR,
6545 & fthreac,nodreac,cptreac,fthdtm,dt3)
6546 ENDIF
6547C========================================================================================
6548C PARALLEL SECTION (SMP)
6549C========================================================================================
6550 CALL python_begin_openmp(python)
6551!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
6552 itsk = omp_get_thread_num()
6553 nodftsk = 1+itsk*numnod/ nthread
6554 nodltsk = (itsk+1)*numnod/nthread
6555
6556 IF (ilag+iale+ieuler/=0) THEN
6557C-----------------------
6558C MULTIMATERIAL
6559C-----------------------
6560 IF (nmult>0) THEN
6561 CALL bmultn(fill,dfill,ims,nodftsk,nodltsk)
6562 ENDIF
6563 CALL imp_fanii(output,nodes%A ,nfia ,nodft ,nodlt ,
6564 . h3d_data )
6565 IF (impdeb==1.AND.imconv==0) THEN
6566 IF (ncycle>=ndeb0.AND.ncycle<=ndeb1) THEN
6567 CALL imp_fout(
6568 1 output ,nodes%A ,nodes%AR ,nfia ,nfea ,
6569 2 nodftsk ,nodltsk ,h3d_data ,impbuf_tab)
6570 ENDIF
6571 ENDIF
6572C--- // N/3 ---------------------------------------
6573C INTERNAL FORCES (ANIM)
6574C-----------------------------------------------
6575 IF (isecut/=0) THEN
6576 IF (imon>0) CALL startime(timers,timer_io)
6577 CALL section_io (
6578 1 nstrf,nodes%D,nodes%DR,nodes%V,nodes%VR,fsav(1,1+ninter+nrwall+nrbody),
6579 2 secfcum,nodes%A ,nodes%AR ,secbuf,nodes%MS ,nodes%IN ,
6580 3 nodes%X ,output%DATA%FOPT,nodes%WEIGHT,xsec ,nodes%BOUNDARY_ADD,nodes%BOUNDARY,
6581 4 rg_cut ,iad_cut ,fr_cut,nodes%WEIGHT_MD,ioldsect,
6582 5 sensors%STABSEN,sensors%SFSAV,sensors%TABSENSOR,sensors%FSAV, output%TH%WFEXT)
6583 IF(imon>0) CALL stoptime(timers,timer_io)
6584 ENDIF
6585 ENDIF ! ILAG+IALE+IEULER/=0
6586
6587!$OMP END PARALLEL
6588 CALL python_end_openmp(python)
6589
6590 IF (imon>0) CALL stoptime(timers,timer_integ)
6591C-----------------------------------------------
6592 IF (ilag+iale+ieuler/=0)THEN
6593 IF(imon>0) CALL startime(timers,timer_kin)
6594 IF(imonm > 0) CALL startime(timers,40)
6595
6596C========================================================================================
6597C PARALLEL SECTION (SMP)
6598C========================================================================================
6599 CALL python_begin_openmp(python)
6600!$OMP PARALLEL
6601
6602 CALL rbycor(
6603 1 rby ,nodes%X ,nodes%V ,nodes%VR ,skews%SKEW ,fsav ,
6604 2 lpby,npby,nodes%ISKEW,nodes%ITAB ,nodes%WEIGHT ,nodes%A ,
6605 3 nodes%AR ,nodes%MS ,nodes%IN ,kindrby,irbkin_l,nrbykin_l ,
6606 4 nodes%WEIGHT_MD,ms_2d)
6607!$OMP END PARALLEL
6608 CALL python_end_openmp(python)
6609
6610 IF(imon>0) CALL stoptime(timers,timer_kin)
6611 IF(imonm > 0) CALL stoptime(timers,40)
6612 ENDIF ! ILAG+IALE+IEULER/=0
6613C========================================================================================
6614C----- RBE2 Bilan crrection
6615C========================================================================================
6616 IF (nrbe2>0)THEN
6617 IF(imon>0) CALL startime(timers,timer_kin)
6618 IF(imonm > 0) CALL startime(timers,40)
6619C
6620
6621 CALL python_begin_openmp(python)
6622!$OMP PARALLEL
6623 CALL rbe2cor(irbe2 ,lrbe2 ,nodes%X ,nodes%V ,nodes%VR ,
6624 2 skews%SKEW ,nodes%ISKEW ,nodes%ITAB ,nodes%WEIGHT,nodes%A ,
6625 3 nodes%AR ,nodes%MS0 ,nodes%IN ,nodes%WEIGHT_MD)
6626!$OMP END PARALLEL
6627 CALL python_end_openmp(python)
6628
6629 IF(imon>0) CALL stoptime(timers,timer_kin)
6630 IF(imonm > 0) CALL stoptime(timers,40)
6631 ENDIF
6632C--------------------
6633C SENSOR // NODES%IN IMPLICIT
6634C-----------------------------------------------
6635C Exchange SENSORS%FSAV for sensors 6-13
6636C-----------------------------------------------
6637 IF (nsensor > 0) THEN
6638 IF (nspmd > 1 .AND. sensors%STABSEN > 0) THEN
6639 dim6=12
6640 dim_exch = sensors%SFSAV
6641 CALL spmd_exsum_fb6(dim6,dim_exch,sensors%FSAV)
6642 ENDIF
6643 ENDIF
6644c
6645 IF (nsensor > 0 .AND. inconv == 1) THEN
6646 CALL sensor_ener_sav(nsensor,sensors%SENSOR_TAB ,partsav ,partsav2)
6647 ! -------------------------------
6648 ! pre-computation and mpi communication for type 16 sensor
6649 IF (sensors%COMM_SENS16%BOOL) THEN
6650 CALL sensor_dist_surf0(nsensor,sensors%SENSOR_TAB,nodes%X,
6651 * igrsurf,sensors%COMM_SENS16)
6652 ENDIF
6653 ! -------------------------------
6654 ! pre-computation and mpi communication for type 17 sensor
6655 IF(sensors%COMM_SENS17%BOOL) THEN
6656 CALL sensor_temp0(nsensor,sensors%SENSOR_TAB,igrnod,nodes%TEMP,nodes%WEIGHT,sensors%COMM_SENS17,
6657 * sensors%SENSOR_STRUCT)
6658 ENDIF
6659 ! -------------------------------
6660 IF (nspmd > 1) THEN
6661 CALL sensor_spmd(sensors%SENSOR_TAB,ipari ,rwall%NPRW ,isensp ,nsensp ,
6662 . xsens ,nodes%X ,accelm ,iaccp ,naccp ,
6663 . gauge ,igaup ,ngaup ,partsav2,nsensor,
6664 . sensors%COMM_SENS14,sensors%SENSOR_STRUCT)
6665 ENDIF
6666c
6667 ! check activation condition of base sensors
6668 CALL sensor_base(sensors ,nsensor ,tt ,dt2 ,
6669 . xsens ,ipari ,partsav2 ,gauge ,fsav ,
6670 . nodes%X ,nodes%V ,nodes%A ,accelm ,rwall%NPRW ,
6671 . subsets ,igrsurf ,igrnod , python)
6672c
6673 ! check activation condition of logical sensors hierarchy
6674 CALL sensor_logical(sensors)
6675
6676 ENDIF
6677
6678 GOTO 111
6679
6680 ENDIF
6681C-----------------------------
6682C Non pure thermal case
6683C-----------------------------
6684 IF (ilag + iale + ieuler /= 0) THEN
6685
6686 IF (imon>0) CALL startime(timers,timer_integ)
6687
6688C========================================================================================
6689C PARALLEL SECTION (SMP)
6690C========================================================================================
6691
6692 CALL python_begin_openmp(python)
6693!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
6694 itsk = omp_get_thread_num()
6695 nodftsk = 1+itsk*numnod/ nthread
6696 nodltsk = (itsk+1)*numnod/nthread
6697
6698C--- // ----------------
6699C MULTIMATERIAL
6700C------- ----------------
6701 IF(nmult>0) THEN
6702 CALL bmultn(fill,dfill,ims,nodftsk,nodltsk)
6703 ENDIF
6704
6705!$OMP END PARALLEL
6706 CALL python_end_openmp(python)
6707
6708
6709C-----------------------------------------------
6710C SPH SMOOTHING OF VELOCITIES
6711C-----------------------------------------------
6712 IF ((numsph/=0).OR.(sol2sph_flag==1)) THEN
6713C------------------------
6714C Conservative smoothing of velocities
6715C------------------------
6716 IF (imonm > 0) CALL startime(timers,48)
6717 IF (imonm > 0) CALL startime(timers,89)
6718
6719 ALLOCATE(waspsym(3*nsphsym+1),stat=ierror)
6720 IF(ierror/=0)THEN
6721 CALL ancmsg(msgid=19,anmode=aninfo,c1="WASPSYM")
6722 CALL arret(2)
6723 ENDIF
6724C========================================================================================
6725C PARALLEL SECTION (SMP)
6726C========================================================================================
6727 CALL python_begin_openmp(python)
6728!$OMP PARALLEL PRIVATE(ITSK,IPMTSK)
6729 itsk = omp_get_thread_num()
6730 ipmtsk = 1 + itsk*npsav*npart
6731
6732 CALL splissv(
6733 1 nodes%X ,nodes%V ,nodes%MS ,nodes%A ,spbuf ,
6734 2 wa ,nodes%ITAB ,kxsp ,ixsp ,nod2sp ,
6735 3 nodes%D ,ispsym ,xspsym%BUF ,vspsym%BUF ,bufmat ,
6736 4 bufgeo ,npc ,tf ,pm ,geo ,
6737 5 ispcond ,xframe ,waspsym,ipart(k10),partsav(ipmtsk),
6738 6 wasph(ksph21) ,wsmcomp%BUF ,wasph(kspactiv) ,ipart,itsk,
6739 7 sph2sol ,sol2sph ,irst ,ixs ,iparg ,
6740 8 ngrounc ,igrounc ,elbuf_tab,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,
6741 9 igeo ,sol2sph_typ,sph_work)
6742
6743!$OMP END PARALLEL
6744 CALL python_end_openmp(python)
6745 DEALLOCATE(waspsym)
6746
6747C========================================================================================
6748C NON PARALLEL SECTION (SMP)
6749C========================================================================================
6750
6751 IF (imonm > 0) CALL stoptime(timers,48)
6752 IF (imonm > 0) CALL stoptime(timers,89)
6753C
6754C------------------------
6755C Second Part of artificial forces work.
6756C--- //0 ----------------
6757 IF (imon>0) CALL startime(timers,6)
6758 IF (imonm > 0) CALL startime(timers,48)
6759 CALL spwfvis(spbuf,ipart(k10),partsav,iparg,elbuf_tab,
6760 . kxsp ,wasph(kspactiv))
6761 IF (imonm > 0) CALL stoptime(timers,48)
6762 IF (imon>0) CALL stoptime(timers,6)
6763
6764C========================================================================================
6765C PARALLEL SECTION (SMP)
6766C========================================================================================
6767
6768 CALL python_begin_openmp(python)
6769!$OMP PARALLEL
6770!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
6771!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,GREFTSK,GRELTSK)
6772
6773C Init var parallel SMP
6774 CALL smp_init(
6775 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
6776 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
6777 3 greftsk,greltsk)
6778
6779 CALL asspart(
6780 2 partftsk,partltsk,partsav,greftsk,greltsk,gresav)
6781
6782!$OMP END PARALLEL
6783 CALL python_end_openmp(python)
6784
6785 ENDIF ! (NUMSPH/=0).OR.(SOL2SPH_FLAG==1)
6786C========================================================================================
6787C NON PARALLEL SECTION (SMP)
6788C========================================================================================
6789C BALANCING FORCES COMPUTED AT TT=0 NODES%IN GLOBAL REFERENCE SYSTEM
6790C----------------------------------------------------------------------------------------
6791 IF (tt==zero.AND.iabs(isigi)==5) THEN
6792C--- //0 ----------------
6793 IF (imon>0) CALL startime(timers,6)
6794 IF (imonm > 0) CALL startime(timers,49)
6795 CALL fequilibre(nodes%A,fzero,element%SHELL%IXC,ixtg)
6796 IF (imonm > 0) CALL stoptime(timers,49)
6797 IF (imon>0) CALL stoptime(timers,6)
6798 ENDIF
6799C========================================================================================
6800C MPI communication for NLOC_DMG : parith/off
6801C========================================================================================
6802 IF(iparit == 0.AND.nspmd > 1.AND. nloc_dmg%IMOD > 0)THEN
6803 CALL spmd_exch_sub_poff(nloc_dmg)
6804 ENDIF
6805
6806 IF(coupling%active) THEN
6807 ! FORCES WAS INITIALIZED TO THE ACCELERTION, BEFORE ASSEMBLY
6808 ! BEFORE THE CALL TO ACCELE, A CONTAINS THE FORCES
6809 ! AFTER THE CALL TO ACCELE, A CONTAINS THE ACCELERATION
6810 !NODES%FORCES(1:3,1:NUMNOD) = nodes%A(1:3,1:NUMNOD) - NODES%FORCES(1:3,1:NUMNOD)
6811 CALL coupling_sync(coupling,dt2,nodes,coupling_forces)
6812 ENDIF
6813C========================================================================================
6814C PARALLEL SECTION (SMP)
6815C========================================================================================
6816
6817 CALL python_begin_openmp(python)
6818!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK,NODFT_NL,NODLT_NL)
6819 itsk = omp_get_thread_num()
6820 nodftsk = 1+itsk*numnod/ nthread
6821 nodltsk = (itsk+1)*numnod/nthread
6822
6823C--- // ---------------------------------------
6824C ACCELERATIONS (TRANSLATIONS)
6825C-----------------------------------------------
6826
6827 !-----------------------------
6828 ! FINITE VOLUME METHOD FOR ALE
6829 !-----------------------------
6830 IF(alefvm_param%IEnabled>0)THEN
6831 CALL alefvm_accele(nodes%A, nodes%AR, nodftsk, nodltsk, ale_connectivity%NALE)
6832 ENDIF
6833
6834 CALL accele(nodes%A ,nodes%AR ,nodes%V ,nodes%MS ,nodes%IN ,
6835 2 ale%GLOBAL%SNALE ,ale_connectivity%NALE ,ms_2d ,
6836 3 size_npby,npby )
6837C
6838 IF(iplyxfem > 0 )
6839 . CALL ply_accele(inod_pxfem,ms_ply,zi_ply,nodes%MS,
6840 . nodftsk,nodltsk,nplymax,nplyxfe,numnod,msz2 )
6841
6842C
6843 IF(ialelag > 0) THEN
6844 CALL flow_accele(ale_connectivity%NALE, msf ,aflow ,vflow ,
6845 2 nodftsk,nodltsk)
6846 ENDIF
6847c
6848 IF (nloc_dmg%IMOD > 0) THEN
6849 nodft_nl = 1+ itsk*nloc_dmg%NNOD/nthread
6850 nodlt_nl = (itsk+1)*nloc_dmg%NNOD/nthread
6851 CALL nlocal_acc(nloc_dmg, nodft_nl ,nodlt_nl)
6852 ENDIF
6853c
6854 IF (icrack3d > 0) THEN
6855C /---------------/
6856 CALL my_barrier
6857C /---------------/
6858 CALL crk_accele(adsky_crk,inod_crk,nodlevxf ,nodftsk ,nodltsk ,
6859 . nodenr ,crksky ,nodes%MS ,nodes%IN ,nodes%ITAB )
6860C /---------------/
6861 CALL my_barrier
6862C /---------------/
6863 CALL crk_zero_fsky(crksky,adsky_crk,inod_crk,nodftsk,nodltsk,
6864 . nodlevxf)
6865C /---------------/
6866 CALL my_barrier
6867C /---------------/
6868 ENDIF
6869C
6870 IF(npinch > 0) THEN
6871 CALL accelepinch(
6872 1 pinch_data%APINCH, nodes%MS, pinch_data%MSPINCH,
6873 2 pinch_data%STIFPINCH, nodftsk, nodltsk,
6874 3 dt2t, dtfac)
6875 ENDIF
6876C--- // ---------------------------------------
6877C TEMPERATURES COMPUTATION
6878C-----------------------------------------------
6879 IF (glob_therm%ITHERM_FE > 0 )
6880 . CALL tempur(nodes%TEMP ,nodes%MCP,fthe,nodftsk,nodltsk,nodes%WEIGHT,mcp_off,glob_therm%HEAT_STORED)
6881!$OMP END PARALLEL
6882 CALL python_end_openmp(python)
6883
6884C------------------------------------------
6885C DT_DC for thick-shell
6886C-----------------------------------------------
6887 IF(ntshegg>0.AND.nspmd > 1)
6888 . CALL spmd_exch_vmax(iad_stsh ,fr_stsh ,iad_rtsh ,fr_rtsh ,alpha_dc )
6889 IF(ntsheg > 0) THEN
6890
6891C========================================================================================
6892C PARALLEL SECTION (SMP)
6893C========================================================================================
6894
6895 CALL python_begin_openmp(python)
6896!$OMP PARALLEL
6897!$OMP+PRIVATE(ITSK,NODFTSK,NODLTSK,GREFTSK,GRELTSK)
6898 itsk = omp_get_thread_num()
6899 greftsk = 1+itsk*ntsheg/ nthread
6900 greltsk = (itsk+1)*ntsheg/nthread
6901 CALL accdtdc(greftsk,greltsk,ienunl ,alpha_dc,nodes%A ,nodes%MS ,nodes%ITAB )
6902!$OMP END PARALLEL
6903 CALL python_end_openmp(python)
6904 ENDIF
6905
6906 IF(ntshegg>0.AND.nspmd > 1)
6907 . CALL spmd_exch_fa(iad_stsh ,fr_stsh ,iad_rtsh ,fr_rtsh ,nodes%A )
6908C---------------------------------------------------------------------
6909C DEBUG TEMPERATURES OUTPUT
6910C---------------------------------------------------------------------
6911 IF (debug(macro_debug_temp)==1) THEN
6912 IF (ncycle>=tdebstart .AND.
6913 . mod(ncycle-tdebstart,trstfreq)==0) THEN
6914
6915 IF(nspmd > 1) THEN
6916 IF (ispmd==0) THEN
6917 siz = numnodg
6918 ELSE
6919 siz = 0
6920 END IF
6921 CALL spmd_collectt(nodes%TEMP,nodes%ITAB,nodes%WEIGHT,nodes%NODGLOB,siz)
6922 ELSE
6923 CALL collectt(nodes%TEMP,nodes%ITAB,nodes%WEIGHT,nodes%NODGLOB)
6924 END IF
6925 END IF
6926 END IF
6927
6928C========================================================================================
6929C NON PARALLEL SECTION (SMP)
6930C========================================================================================
6931
6932 IF (imon>0) CALL stoptime(timers,timer_integ)
6933C-----------------------------------------------
6934C INLETS,OUTLETS.
6935C-----------------------------------------------
6936 IF(nsphio/=0)THEN
6937
6938C globalize NSPHACT in NSPHACTG
6939 nsphactg = nsphact
6940
6941 IF(nspmd>1)THEN
6942 CALL spmd_glob_isum9(nsphactg,1)
6943 CALL spmd_ibcast(nsphactg,nsphactg,1,1,0,2)
6944 END IF
6945
6946 IF(nsphactg/=0)THEN
6947C--- //0 ----------------
6948 IF (imon>0) CALL startime(timers,6)
6949 IF (imonm > 0) CALL startime(timers,48)
6950 IF (imonm > 0) CALL startime(timers,89)
6951
6952 CALL sponfv (nodes%X ,nodes%V ,nodes%A ,nodes%D ,nodes%MS ,
6953 2 spbuf ,nodes%ITAB ,kxsp ,ixsp ,nod2sp ,
6954 3 npc ,tf ,isphio ,vsphio ,ipart ,
6955 4 ipart(k10),wasph(kspactiv) ,wa,wasph(ksph22) ,sph_work, output%TH%WFEXT)
6956
6957 IF (imonm > 0) CALL stoptime(timers,89)
6958 IF (imonm > 0) CALL stoptime(timers,48)
6959 IF (imon>0) CALL stoptime(timers,6)
6960 ENDIF
6961 END IF
6962
6963C========================================================================================
6964C NON PARALLEL SECTION (SMP)
6965C========================================================================================
6966
6967C-----------------------------------------------
6968C INLETS,OUTLETS.
6969C-----------------------------------------------
6970 IF(nsphio/=0.AND.nsphactg/=0)THEN
6971C--- //0 ----------------
6972 IF (imon>0) CALL startime(timers,6)
6973 IF (imonm > 0) CALL startime(timers,48)
6974 IF (imonm > 0) CALL startime(timers,89)
6975
6976 CALL sponfv (nodes%X ,nodes%V ,nodes%A ,nodes%D ,nodes%MS ,
6977 2 spbuf ,nodes%ITAB ,kxsp ,ixsp ,nod2sp ,
6978 3 npc ,tf ,isphio ,vsphio ,ipart ,
6979 4 ipart(k10),wasph(kspactiv),wa,wasph(ksph22) ,sph_work, output%TH%WFEXT)
6980
6981 IF (imonm > 0) CALL stoptime(timers,89)
6982 IF (imonm > 0) CALL stoptime(timers,48)
6983 IF (imon>0) CALL stoptime(timers,6)
6984 ENDIF
6985
6986C-----------------------------------------------
6987C Multidomains : resynchronization of accelerations in SPH
6988C----------------------------------------------
6989 IF (nspmd>1) THEN
6990 IF ((sdd_r2r_elem>0).AND.(numsph_glo_r2r>0)) THEN
6991 lenr = nodes%BOUNDARY_ADD(1,nspmd+1)-nodes%BOUNDARY_ADD(1,1)
6992 CALL spmd_exch_r2r_sph(nodes%A,nodes%BOUNDARY_ADD,nodes%BOUNDARY,dd_r2r,dd_r2r_elem,lenr)
6993 ENDIF
6994 ENDIF
6995
6996C========================================================================================
6997C PARALLEL SECTION (SMP)
6998C========================================================================================
6999 IF (imon>0) CALL startime(timers,timer_io)
7000
7001 IF(comptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
7002
7003 CALL python_begin_openmp(python)
7004!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7005
7006 itsk = omp_get_thread_num()
7007 nodftsk = 1+itsk*numnod/ nthread
7008 nodltsk = (itsk+1)*numnod/nthread
7009
7010C--- // ---------------------------------------
7011C OUTPUT (ANIM,OUTP,H3D,TH) STEP 2 ON 3 TO GET FREAC/MREAC
7012C additional forces
7013C when called with iflag=1 it will add (Fgrav+Fbcs_cyclic+Fcentrif)
7014C-----------------------------------------------
7015 iflag = -1
7016 CALL reaction_forces_2(nodftsk,nodltsk,nodes%A,nodes%AR,nodes%MS,nodes%IN,freac,iflag)
7017
7018!$OMP END PARALLEL
7019 CALL python_end_openmp(python)
7020 END IF
7021
7022 IF (imon>0) CALL stoptime(timers,timer_io)
7023 CALL python_update_nodal_entities(numnod,nodes,a=nodes%A,v=nodes%V,ar=nodes%AR,vr=nodes%VR)
7024
7025C------------------------------
7026C GRAVITE / ACCEL. BASE
7027C------------------------------
7028 IF(ngrav/=0.AND.idtmins==0.AND.idtmins_int==0) THEN
7029 IF (imon>0) CALL startime(timers,timer_kin)
7030 IF (imonm > 0) CALL startime(timers,46)
7031
7032C========================================================================================
7033C PARALLEL SECTION (SMP)
7034C========================================================================================
7035
7036 CALL python_begin_openmp(python)
7037!$OMP PARALLEL PRIVATE(ITSK)
7038 itsk = omp_get_thread_num()
7039 IF(multi_fvm%IS_USED)THEN
7040 CALL gravit_fvm_fem(
7041 1 igrv ,agrv ,npc ,tf ,nodes%A ,
7042 2 nodes%V ,nodes%X ,skews%SKEW ,nodes%MS ,sensors%SENSOR_TAB,
7043 3 nodes%WEIGHT ,lgrav ,itsk ,ale_connectivity%NALE,nsensor, python, output%TH%WFEXT)
7044 ELSE
7045 CALL gravit(
7046 1 igrv ,agrv ,npc ,tf ,nodes%A ,
7047 2 nodes%V ,nodes%X ,skews%SKEW ,nodes%MS ,sensors%SENSOR_TAB,
7048 3 nodes%WEIGHT ,lgrav ,itsk ,nsensor, python, output%TH%WFEXT)
7049 ENDIF
7050!$OMP END PARALLEL
7051 CALL python_end_openmp(python)
7052
7053C========================================================================================
7054C NON PARALLEL SECTION (SMP)
7055C========================================================================================
7056
7057C----------------------
7058C GRAVITY FLEXIBLE BODIES
7059C----------------------
7060 IF (nfxbody>0) THEN
7061 CALL fxgrvcor(fxbipm, fxbgrvi, nodes%A, igrv, agrv,
7062 . npc, tf, nodes%MS, nodes%V , skews%SKEW,
7063 . fxbgrw, nodes%BOUNDARY_ADD, nodes%BOUNDARY, output%TH%WFEXT, python)
7064 END IF
7065 IF (imon>0) CALL stoptime(timers,46)
7066 IF (imonm > 0) CALL stoptime(timers,timer_kin)
7067 ENDIF
7068C----------------------
7069C /BCS/CYCLIC
7070C----------------------
7071 IF(nbcscyc > 0)THEN
7072 CALL bcscyc(ibcscyc,lbcscyc,skews%SKEW,nodes%X,nodes%V,nodes%A,nodes%ITAB)
7073 ENDIF
7074C----------------------
7075C CENTRIFUGAL FORCES
7076C----------------------
7077 IF (nloadc>0) THEN
7078 IF (imon>0) CALL startime(timers,timer_kin)
7079
7080C========================================================================================
7081C PARALLEL SECTION (SMP)
7082C========================================================================================
7083
7084 CALL python_begin_openmp(python)
7085!$OMP PARALLEL PRIVATE(ITSK)
7086 itsk = omp_get_thread_num()
7087 CALL cfield_1(python,icfield ,cfield,npc ,tf ,nodes%A,
7088 2 nodes%V ,nodes%X ,xframe ,nodes%MS,sensors%SENSOR_TAB,
7089 3 nodes%WEIGHT,lcfield,itsk ,iframe,nsensor, output%TH%WFEXT)
7090!$OMP END PARALLEL
7091 CALL python_end_openmp(python)
7092
7093 IF (imon>0) CALL stoptime(timers,timer_kin)
7094 ENDIF
7095
7096C========================================================================================
7097C PARALLEL SECTION (SMP)
7098C========================================================================================
7099
7100 IF (imon>0) CALL startime(timers,timer_io)
7101
7102 IF(comptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
7103 CALL python_begin_openmp(python)
7104!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7105
7106 itsk = omp_get_thread_num()
7107 nodftsk = 1+itsk*numnod/ nthread
7108 nodltsk = (itsk+1)*numnod/nthread
7109
7110C--- // ---------------------------------------
7111C OUTPUT (ANIM,OUTP,H3D,TH) STEP 2 ON 3 TO GET FREAC/MREAC
7112C additional forces
7113C FREAC is now : FEXT+FINT + (Fgrav+Fbcs_cyclic+Fcentrif)
7114C-----------------------------------------------
7115 iflag = 1
7116 CALL reaction_forces_2(nodftsk,nodltsk,nodes%A,nodes%AR,nodes%MS,nodes%IN,freac,iflag)
7117
7118!$OMP END PARALLEL
7119 CALL python_end_openmp(python)
7120
7121 END IF
7122
7123 IF (imon>0) CALL stoptime(timers,timer_io)
7124
7125C========================================================================================
7126C PARALLEL SECTION (SMP)
7127C========================================================================================
7128
7129C-----------------------------------------------
7130C EXTERNAL FORCES ADDITIONAL CONTRIBUTIONS before adding in A other kinematic conditions (BCS, ...)
7131C (ANIM, OUTP, H3D)
7132C-----------------------------------------------
7133 IF (imon>0) CALL startime(timers,timer_io)
7134 CALL python_begin_openmp(python)
7135!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7136 itsk = omp_get_thread_num()
7137 nodftsk = 1+itsk*numnod/ nthread
7138 nodltsk = (itsk+1)*numnod/nthread
7139 CALL forani3(output,nodes%A,nodes%MS,nodftsk,nodltsk,h3d_data)
7140!$OMP END PARALLEL
7141 CALL python_end_openmp(python)
7142 IF (imon>0) CALL stoptime(timers,timer_io)
7143
7144C========================================================================================
7145C NON PARALLEL SECTION (SMP)
7146C========================================================================================
7147
7148C----------------------
7149C INTERFACE ALE
7150C----------------------
7151 ierr=0
7152 IF(ninter/=0.AND.iale/=0)THEN
7153 IF(ispmd==0)THEN
7154 IF (imon>0) THEN
7155 CALL startime(timers,6)
7156 CALL startime(timers,timer_contsort)
7157 ENDIF
7158 CALL intal1(output,ipari ,nodes%X ,nodes%V ,
7159 2 nodes%A ,nodes%ISKEW ,skews%SKEW ,nodes%ICODT,wa,
7160 3 nodes%MS ,nodes%ITAB ,fsav ,interfaces%INTBUF_TAB ,
7161 4 output%DATA%VECT_CONT ,output%DATA%VECT_PCONT ,h3d_data )
7162 IF (imon>0) THEN
7163 CALL stoptime(timers,timer_contsort)
7164 CALL stoptime(timers,6)
7165 ENDIF
7166 ENDIF
7167 IF(nspmd > 1)THEN
7168 ! transmit updated values on domain ispmd=0 to other domains (values may be used by parallelized ebcs options)
7169 call spmd_xv_inter_type1(numnod, nodes%BOUNDARY_SIZE, ispmd, nspmd, nodes%BOUNDARY_ADD, nodes%BOUNDARY,
7170 1 nodes%a, nodes%v, ninter, ipari, npari)
7171 ENDIF
7172 ENDIF
7173 IF(ierr == 1)CALL arret(2)
7174
7175 IF(ninter /= 0 .and. iale+ieuler /= 0 .and. int18kine == -1)THEN
7176C========================================================================================
7177C PARALLEL SECTION (SMP)
7178C========================================================================================
7179 CALL python_begin_openmp(python)
7180!$OMP PARALLEL PRIVATE(ITSK)
7181 itsk = omp_get_thread_num()
7182C /---------------/
7183 CALL my_barrier
7184C /---------------/
7185 CALL i18main_kine_2(output, ipari,interfaces%INTBUF_TAB,nodes%X ,nodes%V ,
7186 2 nodes%A ,nodes%ISKEW,skews%SKEW ,nodes%ICODT,wa,
7187 3 nodes%MS ,nodes%ITAB ,fsav ,itsk+1,nodes%KINET,
7188 4 nodes%STIFN,mtf,cand_sav,output%DATA%VECT_CONT,int18add,
7189 5 nodes%BOUNDARY_ADD,nodes%BOUNDARY,h3d_data )
7190!$OMP END PARALLEL
7191 CALL python_end_openmp(python)
7192 ENDIF
7193C========================================================================================
7194C NON PARALLEL SECTION (SMP)
7195C========================================================================================
7196
7197C----------------------
7198C Activating valve (in/out or imposed velocity)
7199C----------------------
7200
7201 IF(ebcs_tab%nebcs_loc>0)THEN
7202 IF (imon>0) THEN
7203 CALL startime(timers,6)
7204 CALL startime(timers,timer_contsort)
7205 END IF
7206 IF(ispmd == 0)THEN
7207 CALL ebcclap(nodes%V,nodes%A,fv,ebcs_tab)
7208 ENDIF
7209 IF (imon>0) THEN
7210 CALL stoptime(timers,timer_contsort)
7211 CALL stoptime(timers,6)
7212 END IF
7213 ENDIF
7214
7215C----- // ----------------------
7216C BOUNDARY CONDITIONS
7217C-------------------------------
7218 IF (imon>0) CALL startime(timers,timer_kin)
7219 IF (imonm > 0) CALL startime(timers,42)
7220
7221 CALL thbcs(nodft ,nodlt ,nodes%ICODT ,nodes%ICODR,nodes%ISKEW,
7222 2 skews%SKEW ,nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,
7223 3 fthreac,nodreac,cptreac)
7224
7225C========================================================================================
7226C PARALLEL SECTION (SMP)
7227C========================================================================================
7228
7229 CALL python_begin_openmp(python)
7230!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7231 itsk = omp_get_thread_num()
7232 nodftsk = 1+itsk*numnod/ nthread
7233 nodltsk = (itsk+1)*numnod/nthread
7234 CALL bcs10(nodftsk,nodltsk ,nodes%ICODT ,nodes%ICODR,nodes%ISKEW,
7235 2 skews%SKEW ,nodes%A ,nodes%AR ,nodes%MS ,nodes%V ,
7236 3 nodes%VR )
7237C---
7238
7239 IF(iplybcs > 0 .AND. iplyxfem > 0 )
7240 . CALL ply_bcs(nodftsk, nodltsk,icodt_ply,iskew_ply,skews%SKEW,
7241 . inod_pxfem,ms_ply,ibc_ply)
7242!$OMP END PARALLEL
7243 CALL python_end_openmp(python)
7244
7245 IF (imonm > 0) THEN
7246 CALL stoptime(timers,42)
7247 CALL startime(timers,43)
7248 END IF
7249C========================================================================================
7250C PARALLEL SECTION (SMP)
7251C========================================================================================
7252C-------------------
7253C [RLINK1][RLINK2]... (ON FREE TASK)
7254C [RIVETS] -
7255C [JOINT1][JOINT2]... -
7256
7257C-------------------
7258 CALL python_begin_openmp(python)
7259!$OMP PARALLEL PRIVATE(ITSK)
7260 itsk = omp_get_thread_num()
7261
7262C-----------------------------------
7263C RIGID LINKS BETWEEN NODES
7264C---- // ----------------------------
7265 IF(nrlink>0)CALL rlink10(
7266 1 nodes%MS ,nodes%IN ,nodes%A ,nodes%AR ,nodes%V ,
7267 2 nodes%VR ,ilink ,llink,skews%SKEW,fr_rl,
7268 3 nodes%WEIGHT,frl6)
7269 IF(nlink>0) CALL rlink11(
7270 1 nodes%MS ,nodes%IN ,nodes%A ,nodes%AR ,nodes%V ,
7271 2 nodes%VR ,nnlink,lnlink,skews%SKEW ,fr_ll,
7272 3 nodes%WEIGHT,fnl6 ,nodes%X ,xframe)
7273C---------------
7274C RIVETS
7275C---------------
7276 IF(nrivet>0) THEN
7277 CALL rivet1(
7278 + nodes%MS ,nodes%IN ,nodes%A ,nodes%AR,nodes%X ,
7279 + lrivet,rivet,geo,nodes%V ,nodes%VR,
7280 + itsk )
7281 ENDIF
7282
7283C-------------
7284C JOINTS
7285C-- // -----------
7286 IF(njoint>0) THEN
7287 CALL cjoint(nodes%A ,nodes%AR ,nodes%V ,nodes%VR,nodes%X ,
7288 2 fsav ,ljoint,nodes%MS,nodes%IN,iadcj,
7289 3 fr_cj,tag_lnk_sms(nrlink+nlink+1),itsk)
7290 ENDIF
7291
7292!$OMP END PARALLEL
7293 CALL python_end_openmp(python)
7294
7295 IF (imon>0) CALL stoptime(timers,timer_kin)
7296 IF (imonm > 0) CALL stoptime(timers,43)
7297 ENDIF
7298C--------------------------- END OF NON-THERMAL ONLY CASE
7299
7300C========================================================================================
7301C PARALLEL SECTION (SMP)
7302C========================================================================================
7303
7304 IF (imon>0) CALL startime(timers,timer_io)
7305
7306!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7307 itsk = omp_get_thread_num()
7308 nodftsk = 1+itsk*numnod/ nthread
7309 nodltsk = (itsk+1)*numnod/nthread
7310C--- //-----------------------------------------
7311C SAVE FORCES FROM INITIAL STATE
7312C---------------------------------------
7313 IF(tt==zero.AND.(isigi==2.OR.isigi==4)) THEN
7314#include "vectorize.inc"
7315 DO i=nodftsk,nodltsk
7316 fzero(1,i)=-nodes%A(1,i)
7317 nodes%A(1,i)=zero
7318 fzero(2,i)=-nodes%A(2,i)
7319 nodes%A(2,i)=zero
7320 fzero(3,i)=-nodes%A(3,i)
7321 nodes%A(3,i)=zero
7322 ENDDO
7323 ENDIF
7324!$OMP END PARALLEL
7325
7326
7327 IF (imon>0) CALL stoptime(timers,timer_io)
7328
7329C-----------------------------------------------
7330C DAMPING alpha M + beta K
7331C-----------------------------------------------
7332
7333 IF (ns10e>0.AND.(idamp/=0.OR.ndamp>0.OR.istat/=0)) THEN
7334 CALL s10getvdm(icnds10,nodes%V,vnd,vmd)
7335 END IF
7336
7337C========================================================================================
7338C PARALLEL SECTION (SMP)
7339C========================================================================================
7340
7341 IF (imon>0) CALL startime(timers,timer_io)
7342
7343 IF(comptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
7344
7345 CALL python_begin_openmp(python)
7346!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7347
7348 itsk = omp_get_thread_num()
7349 nodftsk = 1+itsk*numnod/ nthread
7350 nodltsk = (itsk+1)*numnod/nthread
7351
7352C--- // ---------------------------------------
7353C OUTPUT (ANIM,OUTP,H3D,TH) STEP 2 ON 3 TO GET FREAC/MREAC
7354C damping forces
7355C when called with iflag=1 it will add Fdamp
7356C-----------------------------------------------
7357 iflag = -1
7358 CALL reaction_forces_2(nodftsk,nodltsk,nodes%A,nodes%AR,nodes%MS,nodes%IN,freac,iflag)
7359
7360!$OMP END PARALLEL
7361 CALL python_end_openmp(python)
7362 END IF
7363
7364 IF (imon>0) CALL stoptime(timers,timer_io)
7365C-----------------------------------------------
7366 IF (imonm > 0) CALL startime(timers,52)
7367
7368 CALL python_begin_openmp(python)
7369!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7370
7371 itsk = omp_get_thread_num()
7372 nodftsk = 1+itsk*numnod/ nthread
7373 nodltsk = (itsk+1)*numnod/nthread
7374
7375 IF(idamp/=0)THEN
7376 IF (ns10e>0) THEN
7377 CALL damping(nodftsk,nodltsk,vmd,nodes%VR,nodes%A ,nodes%AR ,damp,nodes%MS,nodes%IN,
7378 . igrnod,3+iroddl*3,itsk,nodes%WEIGHT,nodes%TAG_S_RBY,output%TH%WFEXT)
7379 ELSE
7380 CALL damping(nodftsk,nodltsk,nodes%V ,nodes%VR,nodes%A ,nodes%AR ,damp,nodes%MS,nodes%IN,
7381 . igrnod,3+iroddl*3,itsk,nodes%WEIGHT,nodes%TAG_S_RBY,output%TH%WFEXT)
7382 END IF !(NS10E>0) THEN
7383 ELSEIF(ndamp>0)THEN
7384 IF(nrdamp==4)THEN
7385
7386!$OMP SINGLE
7387 CALL damping44(
7388 . 3+iroddl*3,nodes%V ,
7389 . nodes%VR ,nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,
7390 . dampr ,damp ,igrnod ,nodes%WEIGHT ,nodes%TAG_S_RBY ,output%TH%WFEXT)
7391!$OMP END SINGLE
7392
7393 ELSE
7394
7395!$OMP SINGLE
7396 IF (ns10e>0) THEN
7397 CALL damping51(
7398 . 3+iroddl*3,vmd ,
7399 . nodes%VR ,nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,
7400 . dampr ,damp ,igrnod ,nodes%WEIGHT ,nodes%TAG_S_RBY,
7401 . skews%SKEW ,icontact,idamp_rdof_tab ,ndamp_vrel,id_damp_vrel,
7402 . fr_damp_vrel,iparit,ispmd,output%TH%WFEXT)
7403 ELSE
7404 CALL damping51(
7405 . 3+iroddl*3,nodes%V ,
7406 . nodes%VR ,nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,
7407 . dampr ,damp ,igrnod ,nodes%WEIGHT ,nodes%TAG_S_RBY,
7408 . skews%SKEW ,icontact,idamp_rdof_tab ,ndamp_vrel,id_damp_vrel,
7409 . fr_damp_vrel,iparit,ispmd,output%TH%WFEXT)
7410 END IF
7411!$OMP END SINGLE
7412
7413 END IF
7414 END IF
7415
7416!$OMP END PARALLEL
7417 CALL python_end_openmp(python)
7418
7419 IF(imon>0) CALL stoptime(timers,52)
7420C-----------------------------------------------
7421 IF (imon>0) CALL startime(timers,timer_io)
7422
7423 IF(comptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
7424
7425 CALL python_begin_openmp(python)
7426!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7427
7428 itsk = omp_get_thread_num()
7429 nodftsk = 1+itsk*numnod/ nthread
7430 nodltsk = (itsk+1)*numnod/nthread
7431
7432C--- // ---------------------------------------
7433C OUTPUT (ANIM,OUTP,H3D,TH) STEP 2 ON 3 TO GET FREAC/MREAC
7434C damping forces
7435C FREAC is now : (FEXT+FINT) + (Fgrav+Fbcs_cyclic+Fcentrif) + (Fdamp)
7436C-----------------------------------------------
7437 iflag = 1
7438 CALL reaction_forces_2(nodftsk,nodltsk,nodes%A,nodes%AR,nodes%MS,nodes%IN,freac,iflag)
7439
7440!$OMP END PARALLEL
7441 CALL python_end_openmp(python)
7442
7443 END IF
7444
7445 IF (imon>0) CALL stoptime(timers,timer_io)
7446
7447C========================================================================================
7448C PARALLEL SECTION (SMP)
7449C========================================================================================
7450
7451 IF (imon>0) CALL startime(timers,timer_io)
7452
7453 IF(cptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
7454 CALL python_begin_openmp(python)
7455!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7456
7457 itsk = omp_get_thread_num()
7458 nodftsk = 1+itsk*numnod/ nthread
7459 nodltsk = (itsk+1)*numnod/nthread
7460
7461C--- // ---------------------------------------
7462C /TH/NODE (REAC) FIRST CALL WITH IFLAG=-1
7463C imposed loads
7464C-----------------------------------------------
7465 iflag = -1
7466 CALL reaction_forces_th(nodftsk,nodltsk ,nodes%A ,nodes%AR ,nodes%MS ,
7467 . nodes%IN ,fthreac ,iflag,nodreac)
7468
7469!$OMP END PARALLEL
7470 CALL python_end_openmp(python)
7471 END IF
7472
7473 IF (imon>0) CALL stoptime(timers,timer_io)
7474
7475C========================================================================================
7476C NON PARALLEL SECTION (SMP)
7477C========================================================================================
7478
7479C--------------------------
7480C STATIC
7481C--------------------------
7482 IF(istat/=0) THEN
7483 IF (imon>0) CALL startime(timers,6)
7484 IF (imonm > 0) CALL startime(timers,49)
7485 IF (ns10e>0) THEN
7486 CALL static(vmd ,nodes%VR,nodes%A,nodes%AR,nodes%MS,nodes%IN,igrnod,nodes%WEIGHT_MD,output%TH%WFEXT)
7487 ELSE
7488 CALL static(nodes%V,nodes%VR,nodes%A,nodes%AR,nodes%MS,nodes%IN,igrnod,nodes%WEIGHT_MD,output%TH%WFEXT)
7489 END IF
7490 IF (imonm > 0) CALL stoptime(timers,49)
7491 IF (imon>0) CALL stoptime(timers,6)
7492 ENDIF
7493 encin = zero
7494 enrot = zero
7495 encin2 = zero
7496 enrot2 = zero
7497C--------------------------
7498C IMPOSED VELOCITIES & DISPLACEMENTS
7499C--------------------------
7500 IF(nfxvel/=0) THEN
7501 IF(imon>0) THEN
7502 CALL startime(timers,6)
7503 CALL startime(timers,timer_kin)
7504 IF(imonm > 0) CALL startime(timers,44)
7505 ENDIF
7506 CALL fixvel(ibfv ,nodes%A ,nodes%V ,npc ,tf ,
7507 2 vel ,nodes%MS ,nodes%X ,skews%SKEW ,nodes%AR ,
7508 3 nodes%VR ,nodes%IN ,nsensor,sensors%SENSOR_TAB,
7509 4 nodes%WEIGHT,nodes%D ,rby ,iframe ,
7510 5 xframe,nodes%DR ,ptr_sms, nodes,
7511 6 tt_double,nodes%DDP,python ,output%TH%WFEXT)
7512
7513 IF (fxvel_fgeo ==1) THEN
7514 CALL fixfingeo(python, nodes, ibfv ,npc ,tf ,
7515 2 vel ,sensors%SENSOR_TAB ,
7516 3 cptreac,nodreac,ptr_sms,nsensor ,
7517 4 fthreac, output%TH%WFEXT )
7518 ENDIF
7519C
7520 IF(imon>0) THEN
7521 IF(imonm > 0) CALL stoptime(timers,44)
7522 CALL stoptime(timers,timer_kin)
7523 CALL stoptime(timers,6)
7524 ENDIF
7525 ENDIF
7526
7527C========================================================================================
7528C PARALLEL SECTION (SMP)
7529C========================================================================================
7530
7531 IF (imon>0) CALL startime(timers,timer_io)
7532
7533 IF(cptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
7534
7535 CALL python_begin_openmp(python)
7536!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7537
7538 itsk = omp_get_thread_num()
7539 nodftsk = 1+itsk*numnod/ nthread
7540 nodltsk = (itsk+1)*numnod/nthread
7541
7542C--- // ---------------------------------------
7543C /TH/NODE (REAC) SECOND CALL WITH IFLAG=+1
7544C imposed loads
7545C----------------------------------------------
7546 iflag = 1
7547 CALL reaction_forces_th(nodftsk,nodltsk ,nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,fthreac ,iflag,nodreac)
7548
7549!$OMP END PARALLEL
7550 CALL python_end_openmp(python)
7551
7552 END IF
7553
7554 IF (imon>0) CALL stoptime(timers,timer_io)
7555
7556C========================================================================================
7557C PARALLEL SECTION (SMP)
7558C========================================================================================
7559
7560 IF (imon>0) CALL startime(timers,timer_kin)
7561 IF (imonm > 0) CALL startime(timers,43)
7562
7563 CALL python_begin_openmp(python)
7564!$OMP PARALLEL
7565
7566C-------------------
7567C RIGID WALL
7568C---- // -----------
7569C write(6,*) "FOPT size:", size(OUTPUT%DATA%FOPT,1), size(OUTPUT%DATA%FOPT,2)
7570C write(6,*) "NSECT, NRBODY, NRWALL:", NSECT, NRBODY,NRWALL
7571C call flush(6)
7572
7573 IF(nrwall>0.AND.idtmins==1)THEN
7574C
7575C Obsolete
7576 ELSEIF(nrwall>0.AND.(idtmins==2.OR.idtmins_int/=0))THEN
7577 CALL rgwal0(
7578 1 nodes%X ,nodes%A ,nodes%V ,rwall%RWBUF ,rwall%LPRW,
7579 2 rwall%NPRW ,nodes%MS ,fsav(1,ninter+1),rwall%FR_WALL ,
7580 3 output%DATA%FOPT(1,1+(nsect+nrbody)),
7581 4 rwall%RWSAV ,nodes%WEIGHT ,frwl6 ,nodxi_sms, nodes%WEIGHT_MD,
7582 5 sensors%SFSAV,sensors%FSAV,sensors%STABSEN,sensors%TABSENSOR, output%TH%WFEXT, output%TH%WFEXT_MD)
7583 ELSE
7584 CALL rgwal0(
7585 1 nodes%X ,nodes%A ,nodes%V ,rwall%RWBUF ,rwall%LPRW,
7586 2 rwall%NPRW ,nodes%MS ,fsav(1,ninter+1),rwall%FR_WALL ,
7587 3 output%DATA%FOPT(1,1+(nsect+nrbody)),
7588 4 rwall%RWSAV ,nodes%WEIGHT ,frwl6 ,nativ_sms, nodes%WEIGHT_MD,
7589 5 sensors%SFSAV,sensors%FSAV,sensors%STABSEN,sensors%TABSENSOR, output%TH%WFEXT, output%TH%WFEXT_MD)
7590 ENDIF
7591
7592!$OMP END PARALLEL
7593 CALL python_end_openmp(python)
7594
7595 IF (imon>0) CALL stoptime(timers,timer_kin)
7596 IF (imonm > 0) CALL stoptime(timers,43)
7597
7598C========================================================================================
7599C NON PARALLEL SECTION (SMP)
7600C========================================================================================
7601
7602C--------------------------
7603C IMPOSED TEMPERATURES
7604C--------------------------
7605 IF (glob_therm%NFXTEMP > 0 .AND. glob_therm%ITHERM_FE > 0) THEN
7606 IF (imon>0) THEN
7607 CALL startime(timers,6)
7608 CALL startime(timers,timer_kin)
7609 IF(imonm > 0) CALL startime(timers,44)
7610 ENDIF
7611 CALL fixtemp(python,ibftemp ,fbftemp ,nodes%TEMP ,npc ,tf ,
7612 1 nsensor ,sensors%SENSOR_TAB,glob_therm,snpc)
7613 IF (imon>0) THEN
7614 IF(imonm > 0) CALL stoptime(timers,44)
7615 CALL stoptime(timers,timer_kin)
7616 CALL stoptime(timers,6)
7617 ENDIF
7618 ENDIF
7619C---------------
7620 IF(isecut/=0)THEN
7621 IF (imon>0) CALL startime(timers,timer_io)
7622 CALL section_io (
7623 1 nstrf,nodes%D,nodes%DR,nodes%V,nodes%VR,fsav(1,1+ninter+nrwall+nrbody),
7624 2 secfcum,nodes%A ,nodes%AR ,secbuf,nodes%MS ,nodes%IN ,
7625 3 nodes%X ,output%DATA%FOPT,nodes%WEIGHT,xsec ,nodes%BOUNDARY_ADD,nodes%BOUNDARY,
7626 4 rg_cut ,iad_cut ,fr_cut,nodes%WEIGHT_MD,ioldsect,
7627 5 sensors%STABSEN,sensors%SFSAV,sensors%TABSENSOR ,sensors%FSAV ,output%TH%WFEXT )
7628 IF(imon>0) CALL stoptime(timers,timer_io)
7629 ENDIF
7630
7631C-----------------------------------------------------
7632c adaptive meshing + static condensation : velocities on static nodes.
7633C-----------------------------------------------------
7634
7635C========================================================================================
7636C PARALLEL SECTION (SMP)
7637C========================================================================================
7638
7639 IF(istatcnd/=0)THEN
7640 IF (imon>0) CALL startime(timers,38)
7641 CALL python_begin_openmp(python)
7642!$omp parallel private(itsk,nodftsk,nodltsk)
7643 itsk = omp_get_thread_num()
7644 nodftsk = 1+itsk*numnod/ nthread
7645 nodltsk = (itsk+1)*numnod/nthread
7646 CALL cndint(element%SHELL%IXC, ipart(k3), ixtg, ipart(k8), ipart,
7647 2 itsk ,nodes%A ,nodes%V ,nodes%AR ,nodes%VR ,
7648 3 nodes%MS ,nodes%IN ,nodftsk,nodltsk ,nodes%X ,
7649 4 sh4tree,sh3tree ,nodes%ITAB ,nodes%STIFN ,nodes%STIFR ,
7650 5 mscnd ,incnd )
7651!$OMP END PARALLEL
7652 CALL python_end_openmp(python)
7653
7654 IF (imon>0) CALL stoptime(timers,38)
7655C
7656C reimpose bcs.
7657 IF (imon>0) CALL startime(timers,timer_kin)
7658 IF (imonm > 0) CALL startime(timers,42)
7659
7660C========================================================================================
7661C PARALLEL SECTION (SMP)
7662C========================================================================================
7663 CALL python_begin_openmp(python)
7664!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
7665
7666 itsk = omp_get_thread_num()
7667 nodftsk = 1+itsk*numnod/ nthread
7668 nodltsk = (itsk+1)*numnod/nthread
7669
7670 CALL bcs10(nodftsk,nodltsk ,nodes%ICODT ,nodes%ICODR,nodes%ISKEW,
7671 2 skews%SKEW ,nodes%A ,nodes%AR ,nodes%MS ,nodes%V ,
7672 3 nodes%VR )
7673
7674!$OMP END PARALLEL
7675 CALL python_end_openmp(python)
7676
7677 IF (imonm > 0) CALL stoptime(timers,42)
7678 IF (imon>0) CALL stoptime(timers,timer_kin)
7679 END IF
7680
7681
7682C-----------------------------------------------------
7683C adaptive meshing : velocities on secnd nodes
7684C-----------------------------------------------------
7685
7686 IF(nadmesh/=0)THEN
7687 IF (imon>0) CALL startime(timers,38)
7688
7689C========================================================================================
7690C PARALLEL SECTION (SMP)
7691C========================================================================================
7692
7693 CALL python_begin_openmp(python)
7694!$OMP PARALLEL PRIVATE(ITSK)
7695 itsk = omp_get_thread_num()
7696
7697 CALL admvit(element%SHELL%IXC, ipart(k3), ixtg, ipart(k8), ipart,
7698 1 itsk ,nodes%A , nodes%V , nodes%AR , nodes%VR ,
7699 2 sh4tree,sh3tree ,nodes%TEMP ,glob_therm%ITHERM_FE)
7700
7701!$OMP END PARALLEL
7702 CALL python_end_openmp(python)
7703
7704 IF (imon>0) CALL stoptime(timers,38)
7705 END IF
7706
7707C--------------------------------------------------
7708c rigid bodies velocities on secondary nodes
7709C--------------------------------------------------
7710 IF(nrbykin>0)THEN
7711
7712 IF(imon>0) CALL startime(timers,timer_kin)
7713 IF(imonm > 0) CALL startime(timers,40)
7714
7715C========================================================================================
7716C PARALLEL SECTION (SMP)
7717C========================================================================================
7718
7719C----------------------------
7720C PARALLEL COMPUTATION
7721C [NRBODY1][NRBODY2]... (ON FREE TASK)
7722C // --------------------------
7723
7724 CALL python_begin_openmp(python)
7725!$OMP PARALLEL
7726
7727 CALL rbyvit(
7728 1 rby ,nodes%X ,nodes%V ,nodes%VR ,skews%SKEW ,
7729 2 fsav ,lpby ,npby ,nodes%ISKEW,nodes%ITAB ,
7730 3 nodes%WEIGHT ,nodes%A ,nodes%AR ,nodes%MS ,nodes%IN ,
7731 4 kindrby,irbkin_l,nrbykin_l,nodreac,fthreac,
7732 5 freac ,nhier_rby)
7733
7734!$OMP END PARALLEL
7735 CALL python_end_openmp(python)
7736
7737C--------------------------------------------------
7738 IF(imon>0) CALL stoptime(timers,timer_kin)
7739 IF(imonm > 0) CALL stoptime(timers,40)
7740
7741 ENDIF
7742C---------------------------------------------------
7743C rigid material
7744C--------------------------------------------------
7745C
7746 IF(irigid_mat > 0 ) THEN
7747
7748C========================================================================================
7749C PARALLEL SECTION (SMP)
7750C========================================================================================
7751
7752 CALL python_begin_openmp(python)
7753!$OMP PARALLEL
7754
7755 CALL rmatacce(rbym , arbym, arrbym, vrbym, vrrbym ,
7756 1 irbym,lnrbym,nodes%X ,nodes%A ,nodes%AR ,
7757 2 nodes%V ,nodes%VR ,kindrbym)
7758
7759!$OMP END PARALLEL
7760 CALL python_end_openmp(python)
7761
7762 ENDIF
7763
7764C========================================================================================
7765C NON PARALLEL SECTION (SMP)
7766C========================================================================================
7767
7768C--------------------------------------------------
7769C Flexible bodies solution and velocities on secondary nodes
7770C--------------------------------------------------
7771 IF (nfxbody>0) THEN
7772 CALL fxbyvit(output,fxbipm, fxbnod, fxbmod, fxbglm, fxblm ,
7773 . fxbmvn, fxbmcd, fxbse , fxbsv , fxbvit,
7774 . fxbacc, fxbrpm, nodes%V , nodes%VR , nodes%A ,
7775 . nodes%AR , nodes%MS , nodes%IN , nodes%WEIGHT, fsav ,
7776 . fxbfc , fxbedp, nodes%BOUNDARY_ADD, nodes%BOUNDARY)
7777 END IF
7778C--------------------
7779C RBE3
7780C--------------------
7781 IF (nrbe3>0) THEN
7782 CALL rbe3v(rbe3,nodes,skews%SKEW )
7783 ENDIF
7784C--------------------
7785C RBE2
7786C--------------------
7787 IF (nrbe2>0) THEN
7788 IF (itask==0) THEN
7789 CALL rbe2v(irbe2 ,lrbe2 ,nodes%X ,nodes%A ,nodes%AR ,
7790 1 nodes%V ,nodes%VR ,skews%SKEW )
7791 ENDIF
7792 ENDIF
7793C--------------------------------------------------
7794C DAA normal accelerations
7795C--------------------------------------------------
7796 IF (nflow>0) CALL flow1(iflow, rflow, nbgauge, nodes%A)
7797
7798C========================================================================================
7799C DOMAIN 0
7800C========================================================================================
7801
7802 IF (ispmd==0) THEN
7803C------------------------
7804C INTERFACES 14 & 15
7805C--- //0 ----------------
7806 IF(ninter/=0)THEN
7807 IF (imon>0) THEN
7808 CALL startime(timers,timer_contsort)
7809 ENDIF
7810 CALL i14wfs(output,ipari,interfaces%INTBUF_TAB,igrsurf,fsav)
7811 IF (imon>0) THEN
7812 CALL stoptime(timers,timer_contsort)
7813 ENDIF
7814 ENDIF
7815 ENDIF
7816C----
7817 IF (ns10e>0) CALL s10cndi2a(icnds10 ,itagnd ,nodes%A )
7818C------------------------
7819C INTERFACES TIED
7820C--- //0 ----------------
7821
7822 IF(ninter/=0)THEN
7823 IF (imon>0) THEN
7824 CALL startime(timers,6)
7825 CALL startime(timers,timer_contsort)
7826 ENDIF
7827 IF (imonm > 0) CALL startime(timers,28)
7828 DO k=nhin2,0,-1
7829 CALL intti2(ipari,nodes%X ,nodes%V ,nodes%A ,
7830 2 nodes%VR ,nodes%AR ,k ,nodes%MS ,nodes%IN ,nodes%WEIGHT,wa,skews%SKEW,
7831 3 interfaces%INTBUF_TAB)
7832 ENDDO
7833 IF (imonm > 0) CALL stoptime(timers,28)
7834 IF (imon>0) THEN
7835 CALL stoptime(timers,timer_contsort)
7836 CALL stoptime(timers,6)
7837 ENDIF
7838 ENDIF
7839C
7840C-----------------------------------------------------
7841C KINEMATIC CONDITIONS FOR SEATBELTS
7842C-----------------------------------------------------
7843
7844 IF (nslipring + nretractor > 0) CALL kine_seatbelt_vel(nodes%A,nodes%V,nodes%X,nodes%XDP)
7845C
7846C-----------------------------------------------------
7847
7848 IF (ns10e>0) CALL s10cndi2a1(icnds10 ,itagnd ,nodes%A )
7849
7850 IF(numfram /= 0 .AND. n2d == 0)THEN
7851C----------------------------
7852C MOVING FRAME - RETRIEVE ACCELERATION.
7853C--- //0 ----------------
7854 IF (imon>0)CALL startime(timers,6)
7855 IF (imonm > 0) CALL startime(timers,49)
7856 CALL movfra1(xframe,iframe ,nodes%X, nodes%V ,nodes%A ,nodes%AR)
7857 IF (imonm > 0) CALL stoptime(timers,49)
7858 IF (imon>0)CALL stoptime(timers,6)
7859 ENDIF
7860
7861 IF (imon>0) CALL startime(timers,timer_kin)
7862 IF (imonm > 0) CALL startime(timers,40)
7863
7864 IF(numsph/=0.AND.nsphsol/=0)THEN
7865C------------------------
7866C Solids impose velocity to SPH
7867C--- // ----------------
7868 IF (imonm > 0) CALL startime(timers,48)
7869 IF (imonm > 0) CALL startime(timers,89)
7870
7871C========================================================================================
7872C PARALLEL SECTION (SMP)
7873C========================================================================================
7874
7875 CALL python_begin_openmp(python)
7876!$OMP PARALLEL PRIVATE(ITSK)
7877 itsk = omp_get_thread_num()
7878
7879 CALL soltospha(
7880 1 itsk ,nodes%V ,nodes%A ,nodes%MS ,pm ,
7881 2 ipart ,ixs ,ipart(k1) ,kxsp ,ipart(k10) ,
7882 3 irst ,spbuf ,partsav ,sol2sph ,iparg ,
7883 4 ngrounc ,igrounc ,elbuf_tab ,igeo)
7884
7885!$OMP END PARALLEL
7886 CALL python_end_openmp(python)
7887
7888 IF (imonm > 0) CALL stoptime(timers,89)
7889 IF (imonm > 0) CALL stoptime(timers,48)
7890 ENDIF
7891
7892C========================================================================================
7893C PARALLEL SECTION (SMP)
7894C========================================================================================
7895
7896C--------------------
7897C ACCELEROMETRE
7898C-- // --------------
7899 IF (naccelm > 0) THEN
7900 CALL python_begin_openmp(python)
7901!$OMP PARALLEL DO PRIVATE(K,N,ISK)
7902 DO k=1,naccelm
7903C check that proc is concerned. Otherwise necessary exchange for sensor, th
7904 IF(iaccp(k)==ispmd+1)THEN
7905 n = laccelm(1,k)
7906 IF(n > 0 .AND. n/=2*numnodg )THEN
7907 isk= laccelm(3,k)
7908 CALL accel1(
7909 . nodes%A(1,n),accelm(1,k),accelm(2,k),accelm(8,k),accelm(14,k),
7910 . accelm(20,k),accelm(23,k),skews%SKEW(1,isk))
7911 END IF
7912 END IF
7913 ENDDO
7914C implicit barrier on end do
7915!$OMP END PARALLEL DO
7916 CALL python_end_openmp(python)
7917
7918 END IF ! Fin NACCELM > 0
7919
7920C--------------------
7921C SPH Gauges
7922C-- // --------------
7923 IF (nbgauge > 0) THEN
7924 CALL python_begin_openmp(python)
7925!$OMP PARALLEL DO SCHEDULE(DYNAMIC,1) PRIVATE(N)
7926 DO k=1,nbgauge
7927 IF(igaup(k)==ispmd+1)THEN
7928 n = lgauge(1,k)
7929C
7930C SPH Gauges
7931 IF(n < -(numels+numelq+numeltg))THEN
7932 CALL spgauge_f(
7933 . gauge(10,k),gauge(9,k),gauge(14,k),gauge(22,k),
7934 . gauge(30,k),4)
7935 END IF
7936 END IF
7937 ENDDO
7938C implicit barrier on end do
7939!$OMP END PARALLEL DO
7940 CALL python_end_openmp(python)
7941
7942 END IF ! Fin NBGAUGE > 0
7943
7944C--------------------
7945C SPH Flow
7946C-- // --------------
7947 IF (nsphio > 0) THEN
7948 CALL python_begin_openmp(python)
7949!$OMP PARALLEL DO SCHEDULE(DYNAMIC,1) PRIVATE(IVAD)
7950 DO k=1,nsphio
7951 IF (isphio(1,k)>1) THEN
7952 ivad = isphio(4,k)
7953 CALL spgauge_f(
7954 . vsphio(ivad+13),vsphio(ivad+15),vsphio(ivad+18),vsphio(ivad+20),
7955 . vsphio(ivad+16),1)
7956 END IF
7957 ENDDO
7958C implicit barrier on end do
7959!$OMP END PARALLEL DO
7960 CALL python_end_openmp(python)
7961 END IF
7962 CALL python_begin_openmp(python)
7963!$OMP PARALLEL
7964 IF(nrbykin>0)THEN
7965 CALL rbycor(
7966 1 rby ,nodes%X ,nodes%V ,nodes%VR ,skews%SKEW ,fsav ,
7967 2 lpby,npby,nodes%ISKEW,nodes%ITAB ,nodes%WEIGHT ,nodes%A ,
7968 3 nodes%AR ,nodes%MS ,nodes%IN ,kindrby,irbkin_l,nrbykin_l,
7969 4 nodes%WEIGHT_MD,ms_2d)
7970 ENDIF
7971C---------RBE2
7972 IF(nrbe2>0)THEN
7973C
7974 CALL rbe2cor(irbe2 ,lrbe2 ,nodes%X ,nodes%V ,nodes%VR ,
7975 2 skews%SKEW ,nodes%ISKEW ,nodes%ITAB ,nodes%WEIGHT,nodes%A ,
7976 3 nodes%AR ,nodes%MS0 ,nodes%IN ,nodes%WEIGHT_MD)
7977 ENDIF
7978!$OMP END PARALLEL
7979 CALL python_end_openmp(python)
7980C========================================================================================
7981C NON PARALLEL SECTION (SMP)
7982C========================================================================================
7983
7984C------------------------------------------
7985C SYNCHRONIZATION: A V (FOR OUTPUTS)
7986C------------------------------------------
7987C SENSORS
7988C-- // --------------
7989C-----------------------------------------------
7990C Exchange SENSORS%FSAV for sensors 6-13
7991C-----------------------------------------------
7992 IF (nsensor> 0 ) THEN
7993 IF (nspmd > 1 .AND. sensors%STABSEN > 0) THEN
7994 dim6=12
7995 dim_exch = sensors%SFSAV
7996 CALL spmd_exsum_fb6(dim6,dim_exch,sensors%FSAV)
7997 ENDIF
7998 ENDIF
7999c
8000 IF (nsensor > 0) THEN
8001
8002 CALL sensor_ener_sav(nsensor,sensors%SENSOR_TAB,partsav ,partsav2)
8003
8004 ! pre-computation and mpi communication for type 16 sensor
8005 IF (sensors%COMM_SENS16%BOOL) THEN
8006 CALL sensor_dist_surf0(nsensor,sensors%SENSOR_TAB,nodes%X,
8007 * igrsurf,sensors%COMM_SENS16)
8008 ENDIF
8009
8010 ! pre-computation and mpi communication for type 17 sensor
8011 IF (sensors%COMM_SENS17%BOOL) THEN
8012 CALL sensor_temp0(nsensor,sensors%SENSOR_TAB,igrnod,nodes%TEMP,nodes%WEIGHT,sensors%COMM_SENS17,
8013 * sensors%SENSOR_STRUCT)
8014 ENDIF
8015
8016 IF (nspmd > 1) THEN
8017 CALL sensor_spmd(sensors%SENSOR_TAB,ipari ,rwall%NPRW ,isensp ,nsensp ,
8018 . xsens ,nodes%X ,accelm ,iaccp ,naccp ,
8019 . gauge ,igaup ,ngaup ,partsav2 ,nsensor,
8020 . sensors%COMM_SENS14,sensors%SENSOR_STRUCT )
8021 ENDIF
8022c
8023 ! check activation condition of base sensors
8024 CALL sensor_base(sensors ,nsensor ,tt ,dt2 ,
8025 . xsens ,ipari ,partsav2 ,gauge ,fsav ,
8026 . nodes%X ,nodes%V ,nodes%A ,accelm ,rwall%NPRW ,
8027 . subsets ,igrsurf ,igrnod ,python)
8028c
8029 ! check activation condition of logical sensor hierarchy
8030 CALL sensor_logical(sensors)
8031
8032 ENDIF ! NSENSOR > 0
8033C========================================================================================
8034
8035 IF (imonm > 0) CALL stoptime(timers,40)
8036 IF (imon>0) CALL stoptime(timers,timer_kin)
8037C-------------------------------------------------------
8038C Kinematic conditions by Lagrange Multipliers
8039C-------------------------------------------------------
8040
8041 IF(lag_ncf+lag_ncl>0)THEN
8042 l1 = 1+nixs*numels + nsvois*nixs
8043 l2 = l1+6*numels10
8044 l3 = l2+12*numels20
8045C case NSPMD == 1 and options supported only in SMP
8046 IF(lag_sec == 1 .AND. nspmd == 1)THEN
8047
8048C========================================================================================
8049C PARALLEL SECTION (SMP)
8050C========================================================================================
8051 CALL python_begin_openmp(python)
8052!$omp parallel
8053!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
8054!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,GREFTSK,GRELTSK)
8055
8056C Init var parallel SMP
8057 CALL smp_init(
8058 1 itsk ,nodftsk ,nodltsk ,numntsk,ndtsk ,
8059 2 ipmtsk,partftsk,partltsk,nwaftsk,igmtsk ,
8060 3 greftsk,greltsk)
8061
8062 CALL lag_mult(output,
8063 1 ipari ,nodes%X ,nodes%A ,
8064 2 wa(nwaftsk), nodes%V ,nodes%MS ,nodes%IN ,nodes%VR ,
8065 3 itsk ,wa ,nodes%ITAB ,ixs ,ixs(l2) ,
8066 4 ixs(l3) ,igrnod ,output%DATA%VECT_CONT,fsav ,
8067 5 skews%SKEW ,nodes%AR ,lambda ,lagbuf ,ibcslag ,
8068 6 ixs(l1) ,gjbufi ,gjbufr ,ibmpc ,rbmpc ,
8069 7 npbyl ,lpbyl ,ibfv ,vel ,npc ,
8070 8 tf ,newfront ,icontact ,rwall%RWBUF ,rwall%LPRW ,
8071 9 rwall%NPRW ,rbyl ,nodes%D ,nodes%DR ,nodes%KINET ,
8072 a nsensor ,sensors%SENSOR_TAB,interfaces%INTBUF_TAB, h3d_data ,igrbric,
8073 b python,nodes)
8074
8075!$OMP END PARALLEL
8076 CALL python_end_openmp(python)
8077
8078C========================================================================================
8079C NON PARALLEL SECTION (SMP)
8080C========================================================================================
8081
8082 ELSE
8083 IF(ispmd==0) THEN
8084 nbncl = fr_lagf(1,nspmd+1)
8085 nbikl = fr_lagf(2,nspmd+1)
8086 nbnodl = fr_lagf(3,nspmd+1)
8087 nbnodlr= nbnodl*max(1,iroddl)
8088 ELSE
8089 nbncl = fr_lagf(1,ispmd+1)
8090 nbikl = fr_lagf(2,ispmd+1)
8091 nbnodl=0
8092 nbnodlr=0
8093 END IF
8094 CALL lag_multp(output,
8095 1 ipari ,nodes%X ,nodes%A ,
8096 2 wa(nwaftsk), nodes%V ,nodes%MS ,nodes%IN ,nodes%VR ,
8097 3 wa, nodes%ITAB ,ixs ,ixs(l2) ,
8098 4 ixs(l3) ,output%DATA%VECT_CONT ,fsav ,
8099 5 skews%SKEW ,nodes%AR ,lambda ,lagbuf ,ibcslag ,
8100 6 ixs(l1) ,gjbufi ,gjbufr ,ibmpc ,rbmpc ,
8101 7 npbyl ,lpbyl ,ibfv ,vel ,npc ,
8102 8 tf ,newfront ,icontact ,rwall%RWBUF ,rwall%LPRW ,
8103 9 rwall%NPRW ,rbyl ,nodes%D ,nodes%DR ,nodes%KINET ,
8104 a nodes%NODGLOB ,nodes%WEIGHT ,nbncl ,nbikl ,nbnodl ,
8105 b nbnodlr ,fr_lagf ,llagf ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,
8106 c interfaces%INTBUF_TAB ,h3d_data, python, nodes)
8107 END IF
8108 ENDIF
8109c--------------
8110 111 CONTINUE
8111c--------------
8112
8113 ntmp = imconv
8114 IF (impdeb==1.AND.imconv==0) THEN
8115 IF (ncycle>=ndeb0.AND.ncycle<=ndeb1) THEN
8116 ttmp=ttmp+output%DTANIM
8117 IF ((irad2r==1).AND.(iresp==1)) THEN
8118 tt_dp=tt_dp+ttmp
8119 tt = tt_dp
8120 ELSE
8121 ! double precision accumulation and then cast in simple precision
8122 tt_double = tt_double + ttmp
8123 IF (impl_s==1.OR.neig>0) THEN
8124 tt = tt + ttmp
8125 ELSE
8126 IF(iresp == 1)THEN
8127 tt = sngl(tt_double)
8128 ELSE
8129 tt = tt_double
8130 ENDIF
8131 ENDIF
8132 !TT=TT+TTMP
8133 ENDIF
8134 ntmp = 1
8135 ENDIF
8136 ENDIF
8137C--------------------------------------------------
8138 IF( ( anim_ce(2156)/=0 .OR. h3d_data%SH_SCAL_ERR_THK /=0)
8139 . .AND.((tt>=output%TANIM .AND. tt<=output%TANIM_STOP).OR.tt>=toutp.OR.
8140 . (manim>=4.AND.manim<=15))) THEN
8141
8142C========================================================================================
8143C PARALLEL SECTION (SMP)
8144C========================================================================================
8145 CALL python_begin_openmp(python)
8146!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
8147
8148 itsk = omp_get_thread_num()
8149 nodftsk = 1+itsk*numnod/ nthread
8150 nodltsk = (itsk+1)*numnod/nthread
8151
8152 CALL err_thk(element%SHELL%IXC ,ixtg ,iparg ,nodes%BOUNDARY_ADD,nodes%BOUNDARY ,
8153 . nodes%WEIGHT ,nodes%X ,elbuf_tab,ipart ,ipart(k3) ,
8154 . ipart(k8) ,itsk ,nodftsk ,nodltsk ,err_thk_sh4,
8155 . err_thk_sh3,sh4tree,sh3tree,
8156 . area_sh4, area_sh3, area_nod,
8157 . thick_sh4, thick_sh3, thick_nod)
8158
8159!$OMP END PARALLEL
8160 CALL python_end_openmp(python)
8161 END IF
8162
8163 k1=1+lipart1*(npart+nthpart)+2*9*(npart+nthpart)
8164 k2=k1+numels
8165 k3=k2+numelq
8166 k4=k3+numelc
8167 k5=k4+numelt
8168 k6=k5+numelp
8169 k7=k6+numelr
8170 k8=k7
8171 k9=k8+numeltg
8172 CALL funct_python_update_elements(python, ispmd,
8173 . n2d, ngroup, nixc, nixtg, nixs,nixq,
8174 . numgeo, numelc, numeltg, numels, numelq, nummat, numnod,
8175 . nparg, npropg, npropm, npropmi, npropgi,
8176 . snercvois, snesdvois, slercvois, slesdvois,
8177 . sthke, seani, npart,
8178 . elbuf_tab ,iparg ,geo ,
8179 . element%SHELL%IXC,ixtg, ixs ,ixq ,pm ,bufmat ,
8180 . eani,
8181 . ipm ,igeo ,thke ,err_thk_sh4 ,err_thk_sh3,
8182 . nodes ,w ,ale_connectivity,
8183 . nercvois ,nesdvois ,lercvois ,lesdvois,
8184 . m51_n0phas, m51_nvphas, stack ,
8185 . ipart(k3:k4-1),ipart(k1:k2-1) ,ipart(k8:k9-1),ipart(k1:k2-1),
8186 . multi_fvm ,
8187 . mat_elem%MAT_PARAM, output%DATA%FANI_CELL,glob_therm%ITHERM)
8188
8189
8190C
8191C========================================================================================
8192C PARALLEL SECTION (SMP)
8193C========================================================================================
8194 IF(ntmp==1)THEN
8195 IF(idtmins==1)THEN
8196C
8197C Obsolete
8198 ELSEIF(idtmins==2.OR.idtmins_int/=0)THEN
8199C--------------------------------------------------
8200 IF (imon>0) CALL startime(timers,39)
8201 CALL python_begin_openmp(python)
8202!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
8203
8204 itsk = omp_get_thread_num()
8205 nodftsk = 1+itsk*numnod/ nthread
8206 nodltsk = (itsk+1)*numnod/nthread
8207
8208 CALL sms_encin_2(timers,
8209 1 itsk ,nodftsk ,nodltsk ,nodxi_sms ,
8210 2 nodes%MS ,jad_sms ,jdi_sms ,lt_sms ,indx1_sms,
8211 3 diag_sms ,nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,nodes%WEIGHT ,nodes%V ,
8212 4 nodes%A ,x_sms ,y_sms ,z_sms ,xmom_sms ,
8213 5 nodes%ICODT ,nodes%ICODR ,nodes%ISKEW ,skews%SKEW ,ibfv ,
8214 6 vel ,npc ,tf ,nodes%X ,nodes%D ,
8215 7 sensors ,iframe ,xframe ,jadi_sms ,
8216 8 jdii_sms ,lti_sms ,iskyi_sms ,mskyi_sms ,fr_sms ,
8217 9 fr_rms ,npby ,tagslv_rby_sms,intstamp,cptreac,
8218 a nodreac ,fthreac ,nodes%AR ,nodes%VR ,
8219 b nodes%DR ,nodes%IN ,rby ,irbe2 ,lrbe2 ,
8220 c iad_rbe2 ,fr_rbe2m ,nmrbe2 ,r2size ,rbe3%IRBE3 ,
8221 d rbe3%LRBE3 ,rbe3%FRBE3 ,rbe3%mpi%IAD_RBE3,rbe3%mpi%FR_RBE3 ,rbe3%mpi%FR_RBE3MP ,
8222 e rbe3%RRBE3 ,rbe3%RRBE3_PON,iad_rby ,fr_rby6 ,rby6 ,
8223 f lpby ,tagmsr_rby_sms,rbe3%irotg_sz,nodii_sms,indx2_sms,
8224 g ibcscyc ,lbcscyc ,output, mskyi_fi_sms,list_sms,
8225 h list_rms ,sms_vfi,sz_mw6,mw6)
8226
8227!$OMP END PARALLEL
8228 CALL python_end_openmp(python)
8229
8230 IF (imon>0) CALL stoptime(timers,39)
8231
8232 END IF
8233 END IF
8234C---
8235 nisky_sms=0
8236
8237C========================================================================================
8238C NON PARALLEL SECTION (SMP)
8239C========================================================================================
8240
8241 IF (icrack3d > 0 .AND. nlevset > 0) THEN
8242 CALL xfeoff(xfem_tab ,
8243 . iparg ,element%SHELL%IXC ,ngrouc ,igrouc ,iel_crk ,
8244 . elcutc ,ixtg ,iadc_crk ,nodes%BOUNDARY_ADD,iad_edge ,
8245 . fr_edge,fr_nbedge,nodes%BOUNDARY ,nxlaymax,inod_crk ,
8247 ENDIF
8248
8249C========================================================================================
8250C PARALLEL SECTION (SMP)
8251C========================================================================================
8252
8253C-----------------------------
8254C FINITE VOLUME METHOD FOR ALE
8255C-----------------------------
8256
8257 IF(alefvm_param%IEnabled>0)THEN
8258 CALL python_begin_openmp(python)
8259!$OMP PARALLEL
8260!$OMP+ PRIVATE(ITSK,NODFTSK,NODLTSK,NUMNTSK,NDTSK,IPMTSK,IGMTSK)
8261!$OMP+ PRIVATE(PARTFTSK,PARTLTSK,NWAFTSK,DT2TT,NELTSTT,ITYPTSTT)
8262!$OMP+ PRIVATE(GREFTSK,GRELTSK)
8263
8264C Init var parallel SMP
8265 CALL smp_init(
8266 1 itsk , nodftsk , nodltsk , numntsk, ndtsk ,
8267 2 ipmtsk , partftsk, partltsk, nwaftsk, igmtsk ,
8268 3 greftsk, greltsk)
8269 dt2tt = dt2t
8270 neltstt = neltst
8271 ityptstt = ityptst
8272 IF(iparit == 1) ndtsk = 1
8273 CALL alefvm_main(
8274 1 nodes%X , nodes%V ,
8275 2 elbuf_tab , nodes%VR ,
8276 3 ale_connectivity , iparg , ixs ,
8277 4 ale_connectivity%NALE ,
8278 5 itsk ,nodftsk , nodltsk ,ipm , nv46 ,msnf )
8279
8280!$OMP END PARALLEL
8281 CALL python_end_openmp(python)
8282 ENDIF
8283C========================================================================================
8284C PARALLEL SECTION (SMP)
8285C========================================================================================
8286
8287 IF (imon>0) CALL startime(timers,timer_io)
8288
8289 IF(comptreac/=0.AND.(impl_s==0 .OR. inconv==1)) THEN
8290 CALL python_begin_openmp(python)
8291!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
8292
8293 itsk = omp_get_thread_num()
8294 nodftsk = 1+itsk*numnod/ nthread
8295 nodltsk = (itsk+1)*numnod/nthread
8296C--- // ---------------------------------------
8297C OUTPUT (ANIM,OUTP,H3D,TH) STEP 3 ON 3 TO GET FREAC/MREAC
8298C FREAC is now : FTOTAL - (FEXT+FINT) - (Fgrav+Fbcs_cyclic+Fcentrif) - (Fdamp)
8299C-----------------------------------------------
8300 CALL reaction_forces_3(nodftsk,nodltsk,nodes%A,nodes%AR,nodes%MS,nodes%IN,freac)
8301
8302!$OMP END PARALLEL
8303 CALL python_end_openmp(python)
8304 END IF
8305
8306 IF (imon>0) CALL stoptime(timers,timer_io)
8307C========================================================================================
8308C PARALLEL SECTION (SMP)
8309C========================================================================================
8310 IF(ncycle > 0) THEN
8311
8312 IF (imon>0) CALL startime(timers,macro_timer_genh3d1)
8313 l1 = 1+nixs*numels + nsvois*nixs
8314 l2 = l1+6*numels10
8315 l3 = l2+12*numels20
8316 CALL python_begin_openmp(python)
8317!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
8318c
8319 itsk = omp_get_thread_num()
8320C--------------------------------------------------
8321C /H3D/TMAX
8322C--------------------------------------------------
8323 CALL upd_tmax(elbuf_tab,iparg ,geo ,pm ,
8324 . ixs ,ixs(l1) ,ixs(l3) ,ixs(l2) ,ixq ,
8325 . element%SHELL%IXC ,ixtg ,ixt ,ixp ,ixr ,
8326 . nodes%X ,nodes%D ,nodes%V ,nodes%BOUNDARY_ADD,nodes%BOUNDARY ,
8327 . nodes%WEIGHT ,ipm ,igeo ,stack ,itsk )
8328
8329!$omp END parallel
8330 CALL python_end_openmp(python)
8331 IF (imon>0) CALL stoptime(timers,macro_timer_genh3d1)
8332 END IF
8333
8334C========================================================================================
8335C NON PARALLEL SECTION (SMP)
8336C========================================================================================
8337C--------------------------------------------------
8338 IF(ntmp==1)THEN
8339C--------------------------------------------------
8340 IF (imon>0) THEN
8341 CALL startime(timers,timer_io)
8342 ENDIF
8343 CALL trace_in(5,0,zero)
8344 l1 = 1+nixs*numels + nsvois*nixs
8345 l2 = l1+6*numels10
8346 l3 = l2+12*numels20
8347C Do not stop yet
8348 IF (tt<=tstop.AND.ilastanim==3) THEN
8349 ilastanim=0
8350 END IF
8351 IF (tt<=tstop.AND.ilastdynain==3) THEN
8352 ilastdynain=0
8353 END IF
8354 IF (tt<=tstop.AND.ilasth3d==3) THEN
8355 ilasth3d=0
8356 END IF
8357C Regular animation
8358 IF ((tt>output%TANIM .AND. tt<=output%TANIM_STOP).AND.ilastanim==0) THEN
8359 ilastanim=3
8360 lastanimcycle=ncycle
8361 END IF
8362
8363 IF (tt>tstat.AND.ilastanim==0) THEN
8364 ilastanim=3
8365 laststatcycle=ncycle
8366 END IF
8367 IF (tt>dynain_data%TDYNAIN.AND.ilastdynain==0) THEN
8368 ilastdynain=3
8369 lastdyncycle=ncycle
8370 END IF
8371 IF (tt>h3d_data%TH3D.AND.ilasth3d==0) THEN
8372 ilasth3d=3
8373 lasth3dcycle=ncycle
8374 END IF
8375
8376 IF(debug(macro_debug_chksm) >0) THEN
8377 IF(mod(ncycle,debug(macro_debug_chksm)) == 0 ) THEN
8378 CALL spmd_flush_accel(ncycle, ispmd, nspmd, numnod,
8379 . numnodg, numnodm, nodes%A, nodes%ITAB,
8380 . nodes%WEIGHT, nodes%NODGLOB)
8381 ENDIF
8382 ENDIF
8383
8384 IF(sh_offset_tab%NNSH_OSET > 0) THEN
8385 CALL assign_ptrx(ptrx, nodes%X,numnod)
8386 CALL assign_ptrx(ptrx_offset, xyz,numnod)
8387 ELSEIF (impl_s > 0 .AND. ismdisp >0) THEN
8388 CALL assign_ptrx(ptrx, impbuf_tab%X_A,numnod)
8389 CALL assign_ptrx(ptrx_offset, xyz ,numnod)
8390 ELSE
8391 CALL assign_ptrx(ptrx, nodes%X,numnod)
8392 CALL assign_ptrx(ptrx_offset, nodes%X,numnod)
8393 ENDIF
8394
8395 CALL sortie_main(timers,
8396 1 pm ,nodes%D ,nodes%V ,ale_connectivity ,w ,
8397 2 elbuf ,iparg ,ixs ,ixq ,element%SHELL%IXC,
8398 3 ixt ,ixp ,ixr ,ixtg ,wa ,
8399 4 nodes%ITAB ,ptrx ,geo ,nodes%MS ,nodes%A ,
8400 5 partsav ,icut ,xcut ,
8401 6 lpby ,
8402 7 npby ,nstrf ,rwall%RWBUF ,rwall%NPRW ,ebcs_tab ,
8403 8 tani ,inoise ,bufnois ,rby ,neflsw ,
8404 9 nnflsw ,crflsw ,flsw ,lout ,nodes ,
8405 b fsav ,skews%SKEW ,elbuf_tab ,cluster ,
8406 c nodes%VR ,nodes%IN ,nodes%WEIGHT ,fcluster ,mcluster ,
8407 d dd_iad ,dmas ,accelm ,gauge ,
8408 e ipari ,eani ,ipart ,mat_elem%MAT_PARAM ,
8409 f igrnod ,subsets ,
8410 g nom_opt ,nodes%AR ,igrsurf ,bufsf ,idata ,
8411 h rdata ,kxx ,ixx ,bufmat ,bufgeo ,
8412 i kxsp ,ixsp ,nod2sp ,spbuf ,nodes%DR,
8413 j fsavd ,lrivet ,rivet ,iskwn ,iframe ,
8414 m xframe ,ixs(l1) ,ixs(l2) ,ixs(l3) ,ndma ,
8415 n monvol ,volmon ,ipm ,igeo ,nodes%NODGLOB ,
8416 . nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,
8417 u fr_rby2 ,iad_rby2 ,rwall%FR_WALL ,fr_sec ,fxbipm ,fxbrpm ,
8418 v ndin ,fxbdep ,fxbvit ,fxbacc ,iflow ,
8419 w rflow ,ipartl ,npartl ,iaccp ,naccp ,
8420 x fasolfr ,ipart(i15ath) ,
8421 y fr_mv ,ipart_state ,sh4tree ,sh3tree ,nodes%TEMP ,
8422 z thke ,err_thk_sh4 ,err_thk_sh3,
8423 a inod_pxfem ,fthreac ,nodreac ,gresav ,
8424 b diag_sms ,sh4trim ,sh3trim ,xmom_sms ,
8425 c irbe2 ,rbe3%IRBE3 ,lrbe2 ,rbe3%LRBE3 ,fr_rbe2 ,
8426 d rbe3%mpi%FR_RBE3 ,iad_rbe2 ,dxancg ,iel_pxfem ,zi_ply ,
8427 e vflow ,fcontg ,fncontg ,ftcontg ,freac ,
8428 f inod_crk ,iel_crk ,elcutc ,iadc_crk ,
8429 g res_sms ,sensors ,
8430 h qfricint ,igaup ,ngaup ,nodes%WEIGHT_MD ,ncont ,
8431 i indexcont ,nodglobxfe ,nodedge ,xfem_tab ,
8432 j nv46 ,rthbuf ,kxig3d ,ixig3d ,knot ,
8433 k wige ,nercvois ,nesdvois ,lercvois ,lesdvois ,
8434 l crkedge ,stack ,isphio ,vsphio ,nodes%ICODE ,
8435 m indx_crk ,xedge4n ,xedge3n ,sph2sol ,stifn_tmp ,
8436 n stifr_tmp ,drape_sh4n ,drape_sh3n ,ms_2d ,multi_fvm ,
8437 o segquadfr ,h3d_data ,nodes%ISKEW ,pskids ,iskwp ,
8438 p knotlocpc ,knotlocel ,pinch_data ,tag_skins6 ,irunn_bis ,
8439 q tf ,npc ,dynain_data ,fcont_max ,mds_matid ,
8440 r ibcl ,iloadp ,lloadp ,
8441 s loadp ,tagncont ,loadp_hyd_inter,forc ,drapeg ,
8442 t user_windows ,output ,dt ,output%TH%TH_SURF%CHANNELS ,
8443 u table ,loads ,sfani ,iparit ,ptrx_offset ,
8444 v sz_npcont2 ,npcont2 ,glob_therm ,pblast ,output%TH%WFEXT,
8445 w mass0_start)
8446
8447 IF((mstop == 1 .AND. ictlstop == 0) .OR. mstop == 2 .OR. dt2<=zero)THEN
8448 CALL sortie_error(
8449 1 nodes%V ,nodes%NODGLOB ,nodes%WEIGHT ,nodes%ITAB ,nodes%MS ,
8450 2 nodes%MS0 ,10 ,partsav ,ipart ,pm ,
8451 3 igeo )
8452 END IF
8453C
8454 CALL trace_out(5)
8455C-------ADYREL----
8456 IF (istat==3) CALL ener_w0
8457 IF(coupling%active) CALL coupling_advance(coupling,dt2)
8458C------------
8459C TIME
8460C------------
8461C ILASTANIM=0 No additional animation
8462C ILASTANIM=1 One more cycle needed
8463C ILASTANIM=2 Additional cycle done
8464C ILASTANIM=3 regular animation
8465 IF (ilastanim==1) THEN
8466 ilastanim=2
8467 END IF
8468 IF (ilasth3d==1) THEN
8469 ilasth3d=2
8470 END IF
8471 IF(t1s==tt)ncycle=ncycle+1
8472C-------> Multidomain single precision: double precision time scale----
8473 IF ((irad2r==1).AND.(iresp==1)) THEN
8474 tt_dp=tt_dp+dt2
8475 tt=tt_dp
8476 ELSE
8477 ! double precision accumulation and then cast in simple precision
8478 tt_double = tt_double + dt2
8479 IF (impl_s==1.OR.neig>0) THEN
8480 tt = tt + dt2
8481 ELSE
8482 IF(iresp == 1)THEN
8483 tt = sngl(tt_double)
8484 ELSE
8485 tt = tt_double
8486 ENDIF
8487 ENDIF
8488 ENDIF
8489C May do 1 more cycle to write animation if TT = TOUTPUT%TANIM - 10%
8490 IF (imadcpl /= 1) THEN
8491 IF (output%DTANIM>zero) THEN
8492 IF((output%NB_ANIM_FRAME >0.AND.ianim < output%NB_ANIM_FRAME).OR.output%NB_ANIM_FRAME ==0) THEN
8493 IF (tt>tstop.AND.ilastanim==0
8494 . .AND.abs((tt-output%TANIM)/output%DTANIM)<em03) THEN
8495 ilastanim=1
8496 output%TANIM=tt-em10
8497 END IF
8498
8499 IF (tt>tstop.AND.ilastanim==0.AND.
8500 . (ncycle-lastanimcycle)>=100) THEN
8501 ilastanim=1
8502 output%TANIM=tt-em10
8503 END IF
8504 ENDIF
8505 END IF
8506c
8507 IF (dtstat>zero) THEN
8508 IF (tt>tstop.AND.ilastanim==0
8509 . .AND.abs((tt-tstat)/dtstat)<em03) THEN
8510 ilastanim=1
8511 tstat=tt-em10
8512 END IF
8513 IF (tt>tstop.AND.ilastanim==0.AND.
8514 . (ncycle-laststatcycle)>=100) THEN
8515 ilastanim=1
8516 tstat=tt-em10
8517 END IF
8518 END IF
8519c
8520 IF (dynain_data%DTDYNAIN>zero) THEN
8521 IF (tt>tstop.AND.ilastdynain==0
8522 . .AND.abs((tt-dynain_data%TDYNAIN)/dynain_data%DTDYNAIN)<em03) THEN
8523 ilastdynain=1
8524 dynain_data%TDYNAIN=tt-em10
8525 END IF
8526 IF (tt>tstop.AND.ilastdynain==0.AND.
8527 . (ncycle-lastdyncycle)>=100) THEN
8528 ilastdynain=1
8529 dynain_data%TDYNAIN=tt-em10
8530 END IF
8531 END IF
8532c
8533 IF (h3d_data%DTH3D>zero) THEN
8534 IF((h3d_data%NB_H3D_FRAME >0.AND.h3d_data%IH3D < h3d_data%NB_H3D_FRAME).OR.(h3d_data%NB_H3D_FRAME ==0)) THEN
8535 IF (tt>tstop.AND.ilasth3d==0
8536 . .AND.abs((tt-h3d_data%TH3D)/h3d_data%DTH3D)<em03) THEN
8537 ilasth3d=1
8538 h3d_data%TH3D=tt-em10
8539 END IF
8540 IF (tt>tstop.AND.ilasth3d==0.AND.
8541 . (ncycle-lasth3dcycle)>=100) THEN
8542 ilasth3d=1
8543 h3d_data%TH3D=tt-em10
8544 END IF
8545 ENDIF
8546 END IF
8547 ENDIF
8548C------------
8549 IF (imon>0) THEN
8550 CALL stoptime(timers,timer_io)
8551 ENDIF
8552 ENDIF
8553 IF (impdeb==1.AND.imconv==0) THEN
8554 IF (ncycle>=ndeb0.AND.ncycle<=ndeb1) THEN
8555 IF ((irad2r==1).AND.(iresp==1)) THEN
8556 tt_dp=tt_dp-ttmp-dt2
8557 tt=tt_dp
8558 ELSE
8559 ! double precision accumulation and then cast in simple precision
8560 tt_double = tt_double - ttmp - dt2
8561 IF (impl_s==1.OR.neig>0) THEN
8562 tt = tt - ttmp - dt2
8563 ELSE
8564 IF(iresp == 1)THEN
8565 tt = sngl(tt_double)
8566 ELSE
8567 tt = tt_double
8568 ENDIF
8569 ENDIF
8570 !TT=TT-TTMP-DT2
8571 ENDIF
8572 ENDIF
8573 ENDIF
8574C ---------------------------------
8575 CALL python_update_time(tt,dt2)
8576
8577C----------------------------------
8578C IMPLICIT SOLVER
8579C----------------------------------
8580 IF (impl_s==1) THEN
8581 CALL trace_in(3,ncycle,zero)
8582 IF (imon>0) CALL startime(timers,34)
8583
8584C========================================================================================
8585C PARALLEL SECTION (SMP)
8586C========================================================================================
8587
8588 IF (imp_chk > 0) THEN
8589 CALL imp_chkm(timers, python,
8590 1 nodes%ICODE ,nodes%ISKEW ,iskwn ,ipart ,ixtg ,ixs ,ixq ,
8591 2 element%SHELL%IXC,ixt ,ixp ,ixr ,ixtg1 ,nodes%ITAB ,nodes%ITABM1,
8592 3 npc ,ibcl ,ibfv ,sensors%SENSOR_TAB,nnlink ,lnlink ,iparg ,igrv,
8593 4 ipari ,interfaces%INTBUF_TAB,rwall%NPRW ,iconx ,npby ,lpby ,lrivet ,
8594 5 nstrf ,ljoint,nodes%ICODT ,nodes%ICODR,interfaces%PON%ISKY,element%PON%ADSKY,element%PON%IAD_CONLD,
8595 6 ilink ,llink ,nodes%WEIGHT,itask ,ibvel ,lbvel ,fbvel,
8596 7 nodes%X ,nodes%D ,nodes%V ,nodes%VR ,nodes%DR ,thke ,damp ,nodes%MS,
8597 8 nodes%IN ,pm ,skews%SKEW ,geo ,eani ,bufmat ,bufgeo ,bufsf,
8598 9 tf ,forc ,vel ,fsav ,agrv ,fr_wave,parts0 ,
8599 a elbuf ,rby ,rivet ,nodes%BOUNDARY ,nodes%BOUNDARY_ADD ,nsensor ,
8600 b wa ,nodes%A ,nodes%AR ,nodes%STIFN ,nodes%STIFR,partsav,element%PON%FSKY,
8601 c interfaces%PON%FSKYI,iframe ,xframe ,w16 ,iactiv ,element%PON%FSKYM,igeo,ipm ,
8602 d output%TH%WFEXT ,nodft ,nodlt ,nt_imp ,num_imp ,ns_imp ,ne_imp,ind_imp,
8603 l it ,rwall%RWBUF ,rwall%LPRW ,rwall%FR_WALL ,nbintc ,intlist ,
8604 m output%DATA%FOPT(1,1+(nsect+nrbody)),rwall%RWSAV ,fsavd ,
8605 n dirul ,lgrav ,rbe3%IRBE3 ,rbe3%LRBE3 ,rbe3%FRBE3 ,
8606 o frwl6 ,irbe2 ,lrbe2 ,icfield ,lcfield ,cfield ,elbuf_tab,
8607 p nodes%WEIGHT_MD ,stack,sensors%SFSAV ,sensors%FSAV,sensors%STABSEN ,sensors%TABSENSOR ,drape_sh4n ,
8608 q drape_sh3n ,h3d_data ,nddl0 ,nnzk0 ,impbuf_tab ,cptreac,fthreac,nodreac ,
8609 r drapeg ,output%TH%TH_SURF ,dpl0cld ,vel0cld ,snpc ,stf , output%TH%WFEXT_MD,igrsurf)
8610 mstop=2
8611 ELSEIF ((tt<=tstop.OR.(tt-tstop)<em10).AND.ibuck==0) THEN
8612C-----integer : 1:IKC,2:IKUD,3:W_DDL,4:IADM,5:JDIM,6:NDOFI,7:IDDLI
8613C-----reel : 1,2,3,4:DIAG_K,LT_K,DIAG_M,LT_M,5,6:LB,DB,7:BKUD,8,9:D_IMP,DR_IMP
8614C---- 10,11,12:ELBUF_C,BUFMAT_C,X_C,13,14:DD,DDR,15,16:X_ac,V_zero,23,24:AC,ACR
8615#if defined(MUMPS5)
8616 CALL imp_solv(output,timers, python,
8617 1 nodes%ICODE ,nodes%ISKEW ,iskwn ,ipart ,ixtg ,ixs ,ixq ,
8618 2 element%SHELL%IXC ,ixt ,ixp ,ixr ,ixtg1 ,nodes%ITAB ,nodes%ITABM1 ,
8619 3 npc ,ibcl ,ibfv ,sensors%SENSOR_TAB,nnlink ,lnlink ,iparg ,igrv ,
8620 4 ipari ,interfaces%INTBUF_TAB,rwall%NPRW ,iconx ,npby,lpby ,lrivet ,
8621 5 nstrf ,ljoint ,nodes%ICODT ,nodes%ICODR ,interfaces%PON%ISKY ,element%PON%ADSKY,element%PON%IAD_CONLD,
8622 6 ilink ,llink ,nodes%WEIGHT ,itask ,ibvel ,lbvel ,fbvel ,
8623 7 nodes%X ,nodes%D ,nodes%V ,nodes%VR ,nodes%DR ,thke ,damp ,nodes%MS ,
8624 8 nodes%IN ,pm ,skews ,geo ,eani ,bufmat ,bufgeo ,bufsf ,
8625 9 tf ,forc ,vel ,fsav ,agrv ,fr_wave,parts0 ,
8626 a elbuf ,rby ,rivet,nodes%BOUNDARY,nodes%BOUNDARY_ADD,
8627 b wa ,nodes%A ,nodes%AR ,nodes%STIFN ,nodes%STIFR ,partsav,element%PON%FSKY ,
8628 c interfaces%PON%FSKYI ,iframe ,xframe ,w16 ,iactiv ,element%PON%FSKYM ,igeo ,ipm ,
8629 d output%TH%WFEXT ,nodft ,nodlt ,nt_imp ,num_imp,ns_imp ,ne_imp ,ind_imp,
8630 l it ,rwall%RWBUF ,rwall%LPRW ,rwall%FR_WALL,nbintc ,intlist,
8631 m output%DATA%FOPT(1,1+(nsect+nrbody)) ,rwall%RWSAV ,fsavd ,
8632 n graphe , fac_k ,ipiv_k ,nkcond,nsensor,
8633 o monvol ,igrsurf,fr_mv ,volmon ,dirul,
8634 p nodes%NODGLOB,mumps_par,cddlp ,isendto,ircvfrom,newfront,imsch ,
8635 q i2msch ,isizxv,ilenxv ,islen7 ,irlen7 ,islen11,irlen11,islen17,
8636 r irlen17,irlen7t,islen7t,nodes%KINET ,num_imp1,nodes%TEMP ,dt2prev,wa ,
8637 s lgrav ,sh4tree,sh3tree,irlen20,islen20,irlen20t,islen20t,
8638 t irlen20e,islen20e,rbe3%IRBE3,rbe3%LRBE3 ,rbe3%FRBE3 ,fr_i2m,iad_i2m,rbe3%mpi%FR_RBE3,
8639 u rbe3%mpi%IAD_RBE3,frwl6,irbe2 ,lrbe2,intbuf_tab_cp,
8640 w nodes%IKINE ,diag_sms,icfield,lcfield,cfield,count_remslv,
8641 x count_remslve,elbuf_tab,elbuf_imp,nodes%XDP,nodes%WEIGHT_MD , stack ,
8642 y sensors%SFSAV,sensors%FSAV,sensors%STABSEN,sensors%TABSENSOR,drape_sh4n , drape_sh3n,
8643 z h3d_data,multi_fvm,igrbric,igrsh4n,igrsh3n,igrbeam,forneqs,maxdgap,
8644 a nddl0 ,nnzk0 ,it_t ,impbuf_tab,cptreac,fthreac,nodreac, drapeg,
8645 b interfaces,output%TH%TH_SURF,dpl0cld,vel0cld,snpc,stf,glob_therm,output%TH%WFEXT_MD)
8646#else
8647 WRITE(6,*) __line__,"Fatal error: MUMPS required"
8648 CALL flush(6)
8649 CALL arret(5)
8650#endif
8651C Modes buckling
8652 IF (nbuck>0) ibuck=1
8653 ELSEIF (ibuck>0) THEN
8654C
8655#if defined(MUMPS5) && defined(DNC)
8656 IF (impl_s > 0 .AND. ismdisp >0) THEN
8657 call assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
8658 ELSE
8659 call assign_ptrx(ptrx,nodes%X,numnod)
8660 ENDIF
8661 CALL imp_buck(
8662 2 pm, geo, ipm, igeo, elbuf,
8663 3 ixs, ixq, element%SHELL%IXC, ixt, ixp,
8664 4 ixr, ixtg, ixtg1, iparg,
8665 5 tf, npc, fr_wave, w16, bufmat,
8666 6 thke, bufgeo, nsensor, sensors%SENSOR_TAB,rby,
8667 7 skews%SKEW, wa, nodes%ICODT, nodes%ICODR, nodes%ISKEW,
8668 9 ibfv, vel, lpby, npby, nodes%ITAB,
8669 a nodes%WEIGHT, nodes%MS, nodes%IN, ipari, interfaces%INTBUF_TAB,
8670 b ptrx, itsk ,
8671 e output%DATA%VECT_CONT, icut, xcut, output%DATA%VECT_FINT, output%DATA%VECT_FEXT,
8672 f output%DATA%FOPT, output%DATA%SCAL_DT, nstrf, rwall%RWBUF, rwall%NPRW,
8673 g tani, dd_iad, eani, ipart,
8674 h nom_opt, igrsurf, bufsf, idata,
8675 i rdata, kxx, ixx, kxsp, ixsp,
8676 j nod2sp, spbuf, ixs(l1), ixs(l2), ixs(l3),
8677 k nodes%VR, monvol, volmon, nodes%NODGLOB, nodes%BOUNDARY_ADD,
8678 l nodes%BOUNDARY, fr_sec, fr_rby2, iad_rby2, rwall%FR_WALL,
8679 m nodes%V, nodes%A, graphe, partsav , xframe ,
8680 n dirul,
8681 o fsav(1,nfnca+1), fsav(1,nftca+1),nodes%TEMP ,sh4tree, sh3tree,
8682 p err_thk_sh4, err_thk_sh3 , iframe ,rwall%LPRW , elbuf_tab,
8683 q fsav ,fsavd , rwall%RWSAV ,nodes%AR , rbe3%IRBE3 ,
8684 r rbe3%LRBE3 ,rbe3%FRBE3 , fr_i2m ,iad_i2m , rbe3%mpi%FR_RBE3,
8685 s rbe3%mpi%IAD_RBE3,frwl6 , ibcl ,forc , irbe2 ,
8686 t lrbe2 ,iad_rbe2 , fr_rbe2 ,nodes%WEIGHT_MD,
8687 u cluster ,fcluster , mcluster ,xfem_tab ,
8688 v ale_connectivity ,w , nv46 ,nercvois , nesdvois ,
8689 w lercvois ,lesdvois ,crkedge ,stack ,sensors%SFSAV ,
8690 x sensors%FSAV ,sensors%STABSEN,sensors%TABSENSOR,indx_crk ,xedge4n ,
8691 y xedge3n ,sph2sol ,stifn_tmp ,stifr_tmp , drape_sh4n ,
8692 z drape_sh3n ,h3d_data ,subsets ,igrnod , fcont_max,
8693 a output%DATA%VECT_PCONT2,output%DATA%VECT_PCONT2_2,nddl0 ,nnzk0 ,impbuf_tab ,
8694 b drapeg ,mat_elem%MAT_PARAM ,glob_therm, output )
8695#else
8696 WRITE(6,*) __line__,"Fatal error: MUMPS required"
8697 CALL flush(6)
8698 CALL arret(5)
8699#endif
8700
8701 IF (idyna==0.AND.itsk==0) CALL cp_dm(numgeo,geo,igeo,dmcp,2)
8702 mstop=2
8703 ELSE
8704 IF (ilastanim/=1) THEN
8705 IF (iline/=1.AND.ispmd==0) THEN
8706 WRITE(iout,*)
8707 WRITE(istdo,*)
8708 WRITE(iout,1002)it_t
8709 WRITE(istdo,1002)it_t
8710 WRITE(iout,1003)it_bcs,it_pcg
8711 WRITE(istdo,1003)it_bcs,it_pcg
8712 ENDIF
8713 END IF !(ILASTANIM==2) THEN
8714 tt = min(tt,tstop+em10)
8715 dt2 = dt2t
8716 ENDIF !IF (IMP_CHK>0)
8717 IF (tt>tstop.AND.inconv==1) THEN
8718 CALL imp_restarcp(nodes%X,nodes%V,nodes%VR,geo,igeo,dmcp,impbuf_tab)
8719 ENDIF !IF (TT>TSTOP.AND.INCONV==1)
8720
8721 CALL trace_out(3)
8722 IF (imon>0) CALL stoptime(timers,34)
8723C---------------------------
8724C Not pure thermal case
8725C---------------------------
8726 ELSEIF(ilag+iale+ieuler/=0)THEN
8727
8728C========================================================================================
8729C PARALLEL SECTION (SMP)
8730C========================================================================================
8731
8732 CALL python_begin_openmp(python)
8733!$OMP PARALLEL
8734
8735C----------------------------
8736C RBODIES TO RIGIDE SURFACE.
8737C--- // ----------------
8738 IF (nsurf/=0) THEN
8739
8740C========================================================================================
8741C DOMAIN 0
8742C========================================================================================
8743 IF(ispmd==0) THEN ! int14 processing on p0
8744 CALL srfvit(nodes%X,nodes%V,nodes%VR,nodes%A,nodes%AR,
8745 . npby ,rby ,nodes%MS ,nodes%IN ,
8746 . igrsurf ,bufsf)
8747 END IF
8748 ENDIF
8749
8750!$OMP END PARALLEL
8751 CALL python_end_openmp(python)
8752C----------------------------------------------------------------
8753C CLOAD - Save Displacements and Velocities for concentrated loads and pressure loads
8754C----------------------------------------------------------------
8755 IF (nconld > 0) THEN
8756 CALL disp_vel_saved_cload(nodes%V ,nodes%D ,nodes%VR ,nodes%DR ,ibcl ,
8757 . dpl0cld,vel0cld,nibcld,nconld,iroddl ,
8758 . numnod )
8759 ENDIF
8760C----------------------------------------------------------------
8761C USER WINDOWS - Save Accelerations before reset to zero
8762C----------------------------------------------------------------
8763 IF(user_windows%HAS_USER_WINDOW /= 0)THEN
8764 IF(ispmd == 0) THEN
8765 DO i=1,numnod
8766 user_windows%A_SAV(1,i)=nodes%A(1,i)*nodes%MS(i)
8767 user_windows%A_SAV(2,i)=nodes%A(2,i)*nodes%MS(i)
8768 user_windows%A_SAV(3,i)=nodes%A(3,i)*nodes%MS(i)
8769 ENDDO
8770 IF(iroddl/=0)THEN
8771 DO i=1,numnod
8772 user_windows%AR_SAV(1,i)=nodes%AR(1,i)*nodes%IN(i)
8773 user_windows%AR_SAV(2,i)=nodes%AR(2,i)*nodes%IN(i)
8774 user_windows%AR_SAV(3,i)=nodes%AR(3,i)*nodes%IN(i)
8775 ENDDO
8776 ENDIF
8777 ENDIF
8778 ENDIF
8779C------------------------------------------
8780C SYNCHRONIZATION ON V TT AND NCYCLE (implicit)
8781C----------------------------
8782
8783 IF(imon>0) CALL startime(timers,timer_integ)
8784
8785C========================================================================================
8786C PARALLEL SECTION (SMP)
8787C========================================================================================
8788
8789 CALL python_begin_openmp(python)
8790!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK,NODFT_NL,NODLT_NL)
8791 itsk = omp_get_thread_num()
8792 nodftsk = 1+itsk*numnod/ nthread
8793 nodltsk = (itsk+1)*numnod/nthread
8794C-----------------
8795C VELOCITIES
8796C-----------------
8797 CALL velocity(
8798 1 nodes%A , nodes%AR , nodes%V , nodes%VR , fzero,
8799 2 nodes%ITAB,ale_connectivity%NALE )
8800c
8801 IF (nloc_dmg%IMOD > 0) THEN
8802c
8803 nodft_nl = 1+ itsk*nloc_dmg%NNOD/nthread
8804 nodlt_nl = (itsk+1)*nloc_dmg%NNOD/nthread
8805 CALL nlocal_vel(nloc_dmg, nodft_nl ,nodlt_nl)
8806 ENDIF
8807c
8808 IF(ialelag > 0) THEN
8809 CALL flow_velocity(ale_connectivity%NALE,aflow ,vflow , fzero ,
8810 2 nodftsk,nodltsk ,wflow, nodes%V,ifoam)
8811 ENDIF
8812C
8813 IF(npinch > 0) THEN
8814 CALL velocitypinch(
8815 1 pinch_data%APINCH, pinch_data%VPINCH,
8816 2 nodftsk , nodltsk )
8817 ENDIF
8818C
8819CC
8820!$OMP END PARALLEL
8821 CALL python_end_openmp(python)
8822
8823! inivel w/ Tstart or sensor
8824 IF (loads%NINIVELT > 0) THEN
8825 IF (n2d == 0) THEN
8826 length = numels + nsvois
8827 ELSE
8828 length = numelq + numeltg
8829 ENDIF
8830 CALL inivel_start(
8831 . ngrnod, ngrbric, ngrquad, ngrsh3n,
8832 . igrnod, igrbric, igrquad, igrsh3n,
8833 . numskw, lskew, numfram, sensors,
8834 . xframe,skews%SKEW, nodes%X, nodes%V,
8835 . nodes%VR, numnod, vflow, wflow,
8836 . w,multi_fvm, iale , ialelag,
8837 . tt, iroddl, loads%NINIVELT,loads%INIVELT,
8838 . nparg, ngroup, length, iparg,
8839 . elbuf_tab, nodes%MS, nodes%IN, nodes%WEIGHT,
8840 . nxframe, t_kin )
8841 output%TH%WFEXT = output%TH%WFEXT + t_kin
8842 END IF
8843!
8844C----------------------------------
8845C ITET2 of S10 Kinematic
8846C----------------------------------
8847 IF (ns10e > 0) CALL s10cndv(icnds10,vnd ,nodes%V )
8848
8849C========================================================================================
8850C PARALLEL SECTION (SMP)
8851C==========================================================================================
8852
8853 IF(iplyxfem > 0) THEN
8854 nthold= nthread
8855 nthread=1
8856 call omp_set_num_threads(nthread)
8857 CALL python_begin_openmp(python)
8858!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
8859 itsk = omp_get_thread_num()
8860 nodftsk = 1+itsk*numnod/ nthread
8861 nodltsk = (itsk+1)*numnod/nthread
8862c for smp parallel is not parit on
8863 CALL ply_velocity(nodftsk,nodltsk,nplymax,inod_pxfem,numnod)
8864!$OMP END PARALLEL
8865 CALL python_end_openmp(python)
8866 nthread= nthold
8867 call omp_set_num_threads(nthread)
8868 ENDIF
8869C
8870 IF(imon>0) CALL stoptime(timers,timer_integ)
8871
8872 IF(iale+ieuler==0) THEN
8873C----------------------
8874C LAGRANGE PUR
8875C----------------------
8876
8877 IF(imon>0) CALL startime(timers,timer_integ)
8878
8879C========================================================================================
8880C PARALLEL SECTION (SMP)
8881C========================================================================================
8882
8883 CALL python_begin_openmp(python)
8884!$omp parallel private(itsk,nodftsk,nodltsk,nodft_nl,nodlt_nl)
8885
8886 itsk = omp_get_thread_num()
8887 nodftsk = 1+itsk*numnod/ nthread
8888 nodltsk = (itsk+1)*numnod/nthread
8889
8890 CALL depla(nodes%V ,nodes%D ,nodes%X ,nodes%VR ,nodes%DR ,
8891 2 nodes%XDP,nodes%DDP,numnod)
8892C
8893 CALL deplafakeige(nodes%X ,nodes%V ,interfaces%INTBUF_TAB, kxig3d,
8894 2 ixig3d,igeo, knot, wige,
8895 3 knotlocpc,knotlocel)
8896
8897c
8898 IF (nloc_dmg%IMOD > 0) THEN
8899c
8900 nodft_nl = 1+ itsk*nloc_dmg%NNOD/nthread
8901 nodlt_nl = (itsk+1)*nloc_dmg%NNOD/nthread
8902 CALL nlocal_incr(nloc_dmg, nodft_nl,nodlt_nl)
8903 ENDIF
8904c
8905 IF(ialelag > 0) THEN
8906 CALL flow_depla(ale_connectivity%NALE, vflow ,dflow ,
8907 2 nodftsk,nodltsk)
8908 ENDIF
8909C
8910 IF(npinch > 0) THEN
8911 CALL deplapinch(pinch_data%VPINCH, pinch_data%DPINCH,
8912 2 pinch_data%XPINCH, nodftsk , nodltsk)
8913 ENDIF
8914C
8915!$OMP END PARALLEL
8916 CALL python_end_openmp(python)
8917
8918 IF(imon>0) CALL stoptime(timers,timer_integ)
8919C
8920 ELSEIF(iale/=0)THEN
8921C-------------------------------------
8922C -A.L.E.-(+LAGRANGE)(+EULER)
8923C-------------------------------------
8924
8925C========================================================================================
8926C PARALLEL SECTION (SMP)
8927C========================================================================================
8928
8929 CALL python_begin_openmp(python)
8930!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
8931
8932 itsk = omp_get_thread_num()
8933 nodftsk = 1+itsk*numnod/ nthread
8934 nodltsk = (itsk+1)*numnod/nthread
8935 CALL alewdx(timers,
8936 1 geo ,nodes%X ,nodes%D ,nodes%V ,nodes%VR ,
8937 2 w ,wa ,wb ,skews%SKEW ,
8938 3 pm ,xlas ,nodes%MS ,fsav ,
8939 4 nodes%A ,tf ,rwall%RWBUF ,
8940 5 dt2save ,python ,
8941 6 iparg ,ixs ,ixq ,nodpor ,
8942 7 nodes%ISKEW ,nodes%ICODT ,elbuf_tab ,
8943 8 npc ,linale ,rwall%NPRW ,las ,
8944 9 ipari ,nodftsk ,nodltsk ,itsk ,
8945 a nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,nbrcvois ,nbsdvois ,lnrcvois ,
8946 b lnsdvois ,nodes%WEIGHT ,element%PON%ADSKY,element%PON%FSKY,element%PON%IADS,
8947 c rwall%FR_WALL ,nporgeo ,element%PON%PROCNE ,
8948 d fr_nbcc ,element%PON%IADQ ,nodes%XDP ,igrnod ,
8949 e nodes%DR ,interfaces%INTBUF_TAB ,multi_fvm ,
8950 f ale_connectivity,nodes%DDP ,ne_nercvois ,ne_nesdvois ,
8951 g ne_lercvois ,ne_lesdvois ,xcell ,xface , output%TH%WFEXT)
8952
8953!$OMP END PARALLEL
8954 CALL python_end_openmp(python)
8955
8956C -EULER+LAGRANGE-
8957C No displacements computed if pure Euler
8958C-------------------------
8959 ELSEIF(ilag==1)THEN
8960C // -----------------------------------
8961 IF(imon>0) CALL startime(timers,timer_integ)
8962
8963C========================================================================================
8964C PARALLEL SECTION (SMP)
8965C========================================================================================
8966
8967 CALL python_begin_openmp(python)
8968!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
8969
8970 itsk = omp_get_thread_num()
8971 nodftsk = 1+itsk*numnod/ nthread
8972 nodltsk = (itsk+1)*numnod/nthread
8973
8974 CALL euldx(nodes%V,nodes%D,nodes%X,nodes%DDP,ale_connectivity%NALE,nodftsk,nodltsk)
8975
8976!$OMP END PARALLEL
8977 CALL python_end_openmp(python)
8978
8979 IF(imon>0) CALL stoptime(timers,timer_integ)
8980 ENDIF
8981 ENDIF
8982 CALL python_sync(python%CONTEXT)
8983 CALL python_update_nodal_entities(numnod,nodes,x=nodes%X, d=nodes%D, dr=nodes%DR)
8984 IF(coupling%active) THEN
8985 dt2max_coupling = dt2
8986 ! Read and write coupling positions
8987 CALL coupling_sync(coupling,dt2,nodes,coupling_positions)
8988 ENDIF
8989
8990 IF (vipercoupling) THEN
8991C Send positions to Viper
8992 CALL radiossviper_sendxve(numnod,neleml,viper%NUMELE,nparg,ngroup,viper%NUMON,viper%ivout,
8993 . nodes%X,nodes%V,viper%ITABM1,viper%IXEM1,iparg,elbuf_tab)
8994 CALL radiossviper_sendkill(mstop,tstop,viper%TSTOP)
8995 ENDIF
8996
8997C========================================================================================
8998C NON PARALLEL SECTION (SMP)
8999C========================================================================================
9000!-------------------------------------------------------------------
9001! offset projection for contact ! add smp // after
9002!----------------------------------
9003 IF (sh_offset_tab%NNSH_OSET > 0) THEN
9004 xyz(1:3,1:numnod) = nodes%X(1:3,1:numnod)
9005 CALL offset_nproj(nspmd,numnod,xyz,sh_offset_tab,iparit)
9006 ENDIF
9007
9008C-------------------------------------
9009C UPDATE XFEM CONFIGURATION
9010C-------------------------------------
9011 IF (icrack3d > 0) THEN
9012 IF (nlevset > 0)THEN
9013c
9014 CALL upxfem1(xfem_tab,
9015 . iparg ,element%SHELL%IXC ,ngrouc ,igrouc ,ixtg ,
9016 . iadc_crk ,iel_crk ,inod_crk ,elcutc ,nodedge ,
9017 . enrtag ,crkedge ,xedge4n ,xedge3n )
9018C
9019 IF (nspmd > 1) ! exchange ENRTAG
9020 . CALL spmd_crk_adv(nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,inod_crk ,enrtag)
9021
9022C========================================================================================
9023C PARALLEL SECTION (SMP)
9024C========================================================================================
9025
9026 CALL python_begin_openmp(python)
9027!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
9028 itsk = omp_get_thread_num()
9029 nodftsk = 1+itsk*numnod/ nthread
9030 nodltsk = (itsk+1)*numnod/nthread
9031c Use enrtag => positive set enrichments
9032 CALL upenr_crk(adsky_crk,inod_crk ,nodftsk ,nodltsk ,
9033 . nodenr ,enrtag ,nodlevxf ,procne_crk )
9034!$OMP END PARALLEL
9035 CALL python_end_openmp(python)
9036
9037c set TAGXP after updating enrichments
9038 CALL upxfem_tagxp(xfem_tab,
9039 . iparg ,element%SHELL%IXC ,ngrouc ,igrouc ,ixtg ,
9040 . iadc_crk ,iel_crk ,inod_crk ,elcutc ,nodedge ,
9041 . enrtag ,crkedge ,xedge4n ,xedge3n ,nodes%ITAB )
9042 CALL python_begin_openmp(python)
9043!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
9044 itsk = omp_get_thread_num()
9045 nodftsk = 1+itsk*numnod/ nthread
9046 nodltsk = (itsk+1)*numnod/nthread
9047c update velocities of phantom elements
9048 CALL crk_velocity(adsky_crk,inod_crk ,nodlevxf ,nodftsk ,nodltsk ,
9049 . nodes%X ,nodes%V ,nodes%VR ,nodes%A ,nodes%AR ,
9050 . nodes%ITAB )
9051!$OMP END PARALLEL
9052 CALL python_end_openmp(python)
9053
9054C========================================================================================
9055C NON PARALLEL SECTION (SMP)
9056C========================================================================================
9057
9058 CALL crk_velocity2(iparg ,ngrouc ,igrouc ,elcutc ,crkedge ,
9059 . nodedge ,element%SHELL%IXC ,ixtg ,xedge4n ,xedge3n ,
9060 . iadc_crk ,iel_crk ,inod_crk ,nodes%ITAB )
9061c----------------------------------------------------------------------
9062c spmd xfem velocity exchange
9063c----------------------------------------------------------------------
9064 IF (nspmd > 1) THEN
9065 CALL spmd_exch_crkvel(nodes%BOUNDARY_ADD ,nodes%BOUNDARY ,inod_crk ,nodes%ITAB ,
9066 . nodes%X ,nodes%V ,nodes%VR )
9067 ENDIF
9068C========================================================================================
9069C PARALLEL SECTION (SMP)
9070C========================================================================================
9071
9072 CALL python_begin_openmp(python)
9073!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
9074 itsk = omp_get_thread_num()
9075 nodftsk = 1+itsk*numnod/ nthread
9076 nodltsk = (itsk+1)*numnod/nthread
9077 CALL crk_zero_accel(adsky_crk,inod_crk ,nodftsk ,nodltsk ,nodlevxf )
9078!$OMP END PARALLEL
9079 CALL python_end_openmp(python)
9080c----------------------------------------------------------------------
9081
9082C========================================================================================
9083C NON PARALLEL SECTION (SMP)
9084C========================================================================================
9085
9086 CALL upxfem2(iparg ,element%SHELL%IXC ,ngrouc ,igrouc ,iadc_crk ,
9087 . iel_crk ,elcutc ,ixtg ,enrtag ,inod_crk ,
9088 . nodes%BOUNDARY_ADD ,nodes%BOUNDARY,iad_edge,fr_edge ,fr_nbedge ,
9089 . crkedge )
9090 ELSE ! NLEVSET = 0
9091
9092C========================================================================================
9093C PARALLEL SECTION (SMP)
9094C========================================================================================
9095 CALL python_begin_openmp(python)
9096!$OMP PARALLEL PRIVATE(ITSK,NODFTSK,NODLTSK)
9097 itsk = omp_get_thread_num()
9098 nodftsk = 1+itsk*numnod/ nthread
9099 nodltsk = (itsk+1)*numnod/nthread
9100 CALL crk_coord_ini(adsky_crk,inod_crk ,nodftsk,nodltsk,nodes%X ,
9101 . nodlevxf )
9102!$OMP END PARALLEL
9103 CALL python_end_openmp(python)
9104 END IF
9105C---
9106 END IF ! XFEM
9107
9108C========================================================================================
9109C NON PARALLEL SECTION (SMP)
9110C========================================================================================
9111
9112 IF(nintstamp/=0)THEN
9113 CALL intstamp_move(intstamp ,npc ,tf ,skews%SKEW ,ptr_sms,
9114 . nodes%V ,nodes%VR ,nodes%MS ,nodes%X ,nodes%D ,
9115 . npby ,rby )
9116 END IF
9117 ! --------------------------------
9118 ! velocity update for /INT18 + LAW151
9119 IF( multi_fvm%IS_INT18_LAW151 ) THEN
9120 IF(nspmd>1.AND. iparit/=0) THEN
9121 CALL spmd_int18_law151_pon( ipari,islen7,irlen7,2,interfaces%INTBUF_TAB,
9122 1 multi_fvm )
9123 ENDIF
9124
9125C========================================================================================
9126C PARALLEL SECTION (SMP)
9127C========================================================================================
9128 CALL python_begin_openmp(python)
9129!$OMP PARALLEL PRIVATE(ITSK)
9130 itsk = omp_get_thread_num()
9131 CALL int18_law151_update(itsk ,multi_fvm,igrbric ,ipari,ixs,
9132 1 igroups,iparg ,elbuf_tab,multi_fvm%FORCE_INT ,
9133 2 nodes%X, nodes%V, nodes%MS, nodes%KINET ,
9134 3 multi_fvm%X_APPEND,multi_fvm%V_APPEND,multi_fvm%MASS_APPEND,multi_fvm%KINET_APPEND)
9135!$OMP END PARALLEL
9136 CALL python_end_openmp(python)
9137
9138 ENDIF
9139 CALL python_begin_openmp(python)
9140!$OMP PARALLEL PRIVATE(ITSK)
9141 itsk = omp_get_thread_num()
9142 CALL multi_velocity_backup(itsk,multi_fvm,n2d,numels,numelq,numeltg)
9143!$OMP END PARALLEL
9144 CALL python_end_openmp(python)
9145C========================================================================================
9146C NON PARALLEL SECTION (SMP)
9147C========================================================================================
9148
9149 IF( multi_fvm%IS_USED ) THEN
9150! write *.adb files for FVM solver option
9151 IF (debug(macro_debug_acc)==1) THEN
9152 IF (ispmd==0) THEN
9153 siz = numelsg
9154 ELSE
9155 siz = 0
9156 END IF
9157 IF ( ncycle>=debstart .AND. mod(ncycle-debstart,rstfreq)==0 ) THEN
9158 CALL spmd_collect_multi_fvm(ixs,multi_fvm,1)
9159 ENDIF
9160 ENDIF
9161 IF(debug(macro_debug_chksm) >0) THEN
9162 IF(mod(ncycle,debug(macro_debug_chksm)) == 0 ) THEN
9163 CALL spmd_collect_multi_fvm(ixs,multi_fvm,2)
9164 ENDIF
9165 ENDIF
9166 ENDIF
9167C========================================================================================
9168C NON PARALLEL SECTION (SMP)
9169C========================================================================================
9170
9171C---------Computation of node areas for contact area output-----
9172 IF(interfaces%PARAMETERS%INTCAREA > 0) THEN
9173C IOUTPRT for assembly synthesis, not need for spring which call *bilan each cycle
9174 ithout = 0
9175 CALL th_time_output(ithout, sensors,output)
9176 IF(ithout > 0) THEN
9177 CALL inter_nodal_areas(ixs ,element%SHELL%IXC ,ixtg ,fasolfr ,nodes%X ,
9178 . nodes%BOUNDARY_ADD,nodes%BOUNDARY ,nodes%WEIGHT ,ixq ,segquadfr ,
9179 . ixs(l1) ,interfaces%PARAMETERS%INTAREAN)
9180 ENDIF
9181
9182 ENDIF
9183
9184
9185 IF (int24use == 1)THEN
9186C E2E Fictive Node Position, Velocity, Mass
9187C Useful to do it before send back to Remote nodes, E2E Fictive node position,
9188C mass & velocity
9189 CALL i24e2e_fictive_nodes_update(intlist,nbintc,ipari,interfaces%INTBUF_TAB,
9190 . nodes%X,nodes%V,nodes%MS,nodes%ITAB,xyz,numnod,sh_offset_tab%nnsh_oset)
9191 ENDIF
9192
9193 IF (nspmd>1) THEN
9194 IF(imonm == 2)THEN
9195 CALL startime(timers,60)
9196 CALL spmd_barrier()
9197 CALL stoptime(timers,60)
9198 END IF
9199 IF(imon>0) CALL startime(timers,13)
9200 IF(isizxv>0) CALL spmd_sd_xv(output,
9201 1 nodes%X ,nodes%D ,nodes%V ,nodes%VR ,nodes%MS ,
9202 2 nodes%IN ,nodes%BOUNDARY_ADD,nodes%BOUNDARY,nodes%WEIGHT,imsch,
9203 3 w ,isizxv ,ilenxv ,nodes%XDP)
9204 IF (imonm > 0) CALL startime(timers,23)
9205 l1 = 1+nixs*numels + nsvois*nixs
9206 l2 = l1+6*numels10
9207 l3 = l2+12*numels20
9208
9209 IF (sh_offset_tab%NNSH_OSET > 0) THEN
9210 CALL assign_ptrx(ptrx,xyz,numnod)
9211 ELSEIF (impl_s > 0 .AND. ismdisp >0) THEN
9212 CALL assign_ptrx(ptrx,impbuf_tab%X_A,numnod)
9213 ELSE
9214 CALL assign_ptrx(ptrx,nodes%X,numnod)
9215 ENDIF
9216
9217 CALL spmd_i7xvcom2(
9218 1 ipari ,ptrx ,nodes%V ,nodes%MS ,
9219 2 imsch ,i2msch ,dt2prev ,intlist ,nbintc ,
9220 3 islen7 ,irlen7 ,islen11 ,irlen11 ,islen17 ,
9221 4 irlen17 ,ixs ,ixs(l3) ,nsensor ,
9222 5 igrbric ,nodes%TEMP ,1 ,irlen7t ,islen7t ,
9223 6 irlen20 ,islen20,irlen20t,islen20t,irlen20e,
9224 7 islen20e,nodes%IKINE ,diag_sms,sensors%SENSOR_TAB,interfaces%INTBUF_TAB ,int24e2euse,
9225 8 forneqs ,multi_fvm,interfaces,sh_offset_tab%NNSH_OSET)
9226 IF (imonm > 0) CALL stoptime(timers,23)
9227 IF (imon>0) CALL stoptime(timers,13)
9228 ENDIF
9229
9230 IF (int24use == 1)THEN
9231 IF (imon>0) CALL startime(timers,timer_contfor)
9232 CALL spmd_exch_i24(ipari, interfaces%INTBUF_TAB ,nodes%ITAB ,
9233 * nodes%BOUNDARY_ADD, nodes%BOUNDARY ,intlist ,nbintc,
9234 * iad_i24 ,fr_i24 ,sfr_i24,i24maxnsne,3,
9235 * int24e2euse)
9236 IF (imon>0) CALL stoptime(timers,timer_contfor)
9237 ENDIF
9238
9239 IF(nintstamp /= 0.AND.ftempvar21==1.AND.nspmd>1) THEN
9240 CALL spmd_i21tempcom(ipari,nodes%TEMP,interfaces%INTBUF_TAB,nsensor,sensors%SENSOR_TAB)
9241 ENDIF
9242
9243 IF(numfram/=0.AND.n2d==0)THEN
9244C----------------------------
9245C MOVING FRAME: RETRIEVE POSITION & VELOCITY.
9246C--- //0 ----------------
9247 IF (imon>0)CALL startime(timers,6)
9248 IF (imonm > 0) CALL startime(timers,49)
9249 IF (impl_s >0) THEN
9250 CALL movfra_imp(xframe ,iframe ,nodes%X ,nodes%V ,nodes%A ,
9251 . nodes%VR ,nodes%AR ,nodes%D )
9252 ELSE
9253 CALL movfra2(xframe ,iframe ,nodes%X ,nodes%V ,nodes%VR ,
9254 . nodes%D )
9255 END IF !(IMPL_S >0)
9256 IF (imonm > 0) CALL stoptime(timers,49)
9257 IF (imon>0) CALL stoptime(timers,6)
9258 ENDIF
9259
9260 IF (glob_therm%IDT_THERM == 1.AND.(tstop-tt)<=em20)THEN
9261 mstop_dt_therm = 1
9262 ENDIF
9263
9264#if defined(MYREAL8) && !defined(WITHOUT_LINALG)
9265 300 CONTINUE
9266#endif
9267
9268 ! ---------------------------------------------
9269 ! END OF RUN
9270 ! ---------------------------------------------
9271
9272 ! --------------
9273 ! Restart Files
9274 ! --------------
9275
9276 ! Restart File criteria
9277 stop_or_add_cycle = 0
9278 bool_restart=.false.
9279
9280 ! End of computation
9281 IF (((tt>tstop).OR.(mstop_dt_therm==1)).AND.imconv==1) THEN
9282 stop_or_add_cycle = 1 ! check if additional cycle is need with animation
9283 IF (irad2r==0) THEN ! No Restart writing at end of Run when Rad2rad is active
9284 bool_restart = ((ilastanim==0.OR.ilastanim==1.OR.ilastanim==3).AND. restart_file==1) ! Restart writing criteria
9285 ENDIF
9286 ENDIF
9287
9288 ! Restart within Run
9289 IF (ale%SUB%IFSUB==0.AND.imconv==1 .AND. restart_file==1.AND.
9290 . (ncycle/ncrst)*ncrst==ncycle.AND. irad2r==0 .OR.mrest==1.OR.(wmcheck==1.AND.ncycle/=1) ) THEN
9291 stop_or_add_cycle = 0
9292 bool_restart = .true.
9293 ENDIF
9294
9295 IF(wmcheck==1)THEN ! Checkpoint Restart : write CHECK_DATA File
9296 IF(ispmd==0)THEN
9297 filnam = 'CHECK_DATA'
9298 OPEN(unit=icheckd,file=filnam,access='SEQUENTIAL',form='FORMATTED',status='UNKNOWN')
9299 WRITE(icheckd, fmt='(3A, I1)') '/RERUN/',rootnam(1:rootlen),'/',irun
9300 CLOSE(icheckd)
9301 ENDIF
9302 ENDIF
9303
9304 IF (bool_restart) THEN
9305 IF(imon>0) CALL startime(timers,timer_io)
9306
9307 IF (glob_therm%IDT_THERM == 1)CALL bcsdtth_copy(nodes%ICODT, nodes%ICODR, icodt0, icodr0, 2)
9308
9309 CALL bcsn(nodes%ICODE,nodes%ICODT,nodes%ICODR,parts0,partsav)
9310
9311 IF (int24use == 1)THEN
9312 ! E2E Update Fictive Node Position, Velocity, Mass
9313 ! To do before SPMD_I7XVCOM2
9314 CALL i24e2e_fictive_nodes_update(intlist,nbintc,ipari,interfaces%INTBUF_TAB,
9315 . nodes%X,nodes%V,nodes%MS,nodes%ITAB,
9316 . xyz,numnod,sh_offset_tab%nnsh_oset)
9317 ENDIF
9318
9319 ! Interface communication : Send updates to remote nodes - finalizatoin
9320 ! Need here for coherent Restart writing
9321 IF(nspmd>1)THEN
9322 l1 = 1+nixs*numels + nsvois*nixs
9323 l2 = l1+6*numels10
9324 l3 = l2+12*numels20
9325 CALL spmd_i7xvcom2(
9326 1 ipari ,nodes%X ,nodes%V ,nodes%MS ,
9327 2 imsch ,i2msch ,dt2prev ,intlist ,nbintc ,
9328 3 islen7 ,irlen7 ,islen11 ,irlen11 ,islen17 ,
9329 4 irlen17 ,ixs ,ixs(l3) ,nsensor ,
9330 5 igrbric ,nodes%TEMP ,2 ,irlen7t ,islen7t ,
9331 6 irlen20 ,islen20,irlen20t,islen20t,irlen20e,
9332 7 islen20e,nodes%IKINE ,diag_sms,sensors%SENSOR_TAB,interfaces%INTBUF_TAB ,int24e2euse,
9333 8 forneqs ,multi_fvm,interfaces,sh_offset_tab%NNSH_OSET)
9334 END IF
9335
9336 ! Finalize T24 Communication to fill Buffers before restarts
9337 IF (int24use == 1)THEN
9338 IF (imon>0) CALL startime(timers,timer_contfor)
9339 CALL spmd_exch_i24(ipari, interfaces%INTBUF_TAB ,nodes%ITAB ,
9340 * nodes%BOUNDARY_ADD, nodes%BOUNDARY ,intlist ,nbintc,
9341 * iad_i24 ,fr_i24 ,sfr_i24,i24maxnsne,3,
9342 * int24e2euse)
9343
9344 CALL spmd_exch_i24(ipari, interfaces%INTBUF_TAB ,nodes%ITAB ,
9345 * nodes%BOUNDARY_ADD, nodes%BOUNDARY ,intlist ,nbintc,
9346 * iad_i24 ,fr_i24 ,sfr_i24,i24maxnsne,4,
9347 * int24e2euse)
9348
9349 IF (imon>0) CALL stoptime(timers,timer_contfor)
9350 ENDIF
9351
9352 ! INTERFACE 21 - Communication of nodal temperature
9353 IF(nintstamp /= 0.AND.ftempvar21==1.AND.nspmd>1) THEN
9354 CALL spmd_i21tempcom(ipari,nodes%TEMP,interfaces%INTBUF_TAB,nsensor,sensors%SENSOR_TAB)
9355 ENDIF
9356 ich = 0
9357 ! Engine time for restart
9358 CALL elapstime(timers,secs)
9359 global_comp_time%ENGINE_TIME(global_comp_time%RUN_NBR) = secs
9360
9361 CALL wrrestp(element, nodes, af ,iaf ,ich ,element%PON%ADSKY ,
9362 . elbuf_tab ,xfem_tab ,interfaces%INTBUF_TAB ,multi_fvm ,mat_elem ,
9363 . h3d_data ,interfaces%INTBUF_FRIC_TAB ,subsets ,pinch_data ,ale_connectivity ,
9364 . t_monvol ,sensors , ebcs_tab ,dynain_data ,user_windows ,
9365 . output ,interfaces ,loads ,python ,names_and_titles ,
9366 . eigipm ,eigibuf ,eigrpm ,neipm ,leibuf ,
9367 . nerpm ,iflow ,rflow ,liflow ,lrflow ,
9368 . impbuf_tab ,impl_s ,impl_s0 ,nodes%MCP ,nodes%TEMP ,
9369 . forneqs ,unitab ,stack ,ndrape ,drape_sh3n ,
9370 . drape_sh4n ,drapeg ,restsize ,skews ,glob_therm ,
9371 . pblast ,rbe3 ,rwall )
9372
9373 ! Restart file size
9374 IF (multirest >0)THEN
9375 IF (restsize > multirests(irprev))multirests(irprev)=restsize
9376 ELSE
9377 IF (restsize > restartfilesize) restartfilesize=restsize
9378 ENDIF
9379
9380 IF((iddw/=0).AND.(mstop/=0.OR.tt+dt2>=tstop)) THEN
9381 CALL cumultime_mp(
9382 1 taille,iparg,
9383 2 element%SHELL%IXC,ixq,ixt,ixp,ixtg,
9384 3 ixr,ixs,kxig3d,ipm,
9385 4 igeo,geo,poin_ump,cputime_mp,
9386 5 nbr_gpmp,cputime_mp_glob,tab_ump,pm,
9387 6 bufmat,tabmp_l ,tab_mat )
9388 IF(iddwstat/=0) THEN
9389 CALL printimeg(iparg,pm,ipm,element%SHELL%IXC,ixtg,ixs)
9390 ENDIF
9391 ENDIF
9392
9393 IF(imon>0) CALL stoptime(timers,timer_io)
9394 END IF
9395
9396 IF (stop_or_add_cycle==1) THEN
9397
9398 ! End of Run / criteria if additional cycle is need to write Anim or H3D state
9399 !
9400 ! ILASTANIM=0 No additional animation
9401 ! ILASTANIM=1 One more cycle needed
9402 ! ILASTANIM=2 Additional cycle done
9403 ! ILASTANIM=3 regular animation
9404
9405 IF (ilastanim==2.OR.irad2r==1)THEN ! We are done / No magic - No additional Restart with Rad2rad run
9406 mstop=2
9407 GOTO 500
9408 ENDIF
9409
9410 state_anim = 0
9411 IF(mstop_dt_therm==0) THEN
9412 IF (ilastanim==1) THEN
9413 state_anim = 1
9414 ELSEIF (ilastanim==0.OR.ilastanim==3) THEN
9415 state_anim = 2
9416 END IF
9417 ELSE
9418 state_anim = 2
9419 ENDIF
9420
9421 state_h3d = 0
9422 IF(mstop_dt_therm==0) THEN
9423 IF (ilasth3d==1) THEN
9424 state_h3d = 1
9425 ELSEIF (ilasth3d==0.OR.ilasth3d==3) THEN
9426 state_h3d = 2
9427 END IF
9428 ELSE
9429 state_h3d = 2
9430 ENDIF
9431 IF( state_anim == 1 .OR. state_h3d == 1 ) THEN
9432 CALL trace_out(3)
9433 GOTO 100
9434 ELSEIF( state_anim == 2 .OR. state_h3d == 2 ) THEN
9435 mstop=2
9436 GOTO 500
9437 ENDIF
9438 ENDIF
9439
9440 ! ------------------
9441 ! Negative Timestep
9442 ! ------------------
9443 IF(dt2<=zero) THEN
9444 WRITE(iout,*)' **ERROR : TIME STEP LESS OR EQUAL ZERO'
9445 WRITE(istdo,*)' **ERROR : TIME STEP LESS OR EQUAL ZERO'
9446
9447 IF ( istamping == 1) THEN
9448 WRITE(istdo,'(A)')' The run has gone to divergence.'
9449 WRITE(istdo,'(A)')' It could be due to a wrong definition of the interfaces between the tools and the blank.'
9450 WRITE(istdo,'(A)')' You may need to check if there is enough clearance between the tools,'
9451 WRITE(istdo,'(A)')' and that they do not penetrate each other during their travel.'
9452 WRITE(iout, '(A)')' The run has gone to divergence.'
9453 WRITE(iout, '(A)')' It could be due to a wrong definition of the interfaces between the tools and the blank.'
9454 WRITE(iout, '(A)')' You may need to check if there is enough clearance between the tools,'
9455 WRITE(iout, '(A)')' and that they do not penetrate each other during their travel.'
9456 ENDIF
9457
9458 ! Finalize MPI communication for clean exit when dt < 0
9459 IF (int24use == 1) THEN
9460 ! E2E Update Fictive Node Position, Velocity, Mass
9461 ! To do before SPMD_I7XVCOM2
9462 CALL i24e2e_fictive_nodes_update(intlist,nbintc,ipari,interfaces%INTBUF_TAB,
9463 . nodes%X,nodes%V,nodes%MS,nodes%ITAB,
9464 1 xyz,numnod,sh_offset_tab%nnsh_oset)
9465 ENDIF
9466 ! Finalize Interface communication from Node to remote node for coherent restart
9467 IF(nspmd>1)THEN
9468 l1 = 1+nixs*numels + nsvois*nixs
9469 l2 = l1+6*numels10
9470 l3 = l2+12*numels20
9471 CALL spmd_i7xvcom2(
9472 1 ipari ,nodes%X ,nodes%V ,nodes%MS ,
9473 2 imsch ,i2msch ,dt2prev ,intlist ,nbintc ,
9474 3 islen7 ,irlen7 ,islen11 ,irlen11 ,islen17 ,
9475 4 irlen17 ,ixs ,ixs(l3) ,nsensor ,
9476 5 igrbric ,nodes%TEMP ,2 ,irlen7t ,islen7t ,
9477 6 irlen20 ,islen20 ,irlen20t,islen20t,irlen20e,
9478 7 islen20e,nodes%IKINE ,diag_sms,sensors%SENSOR_TAB,interfaces%INTBUF_TAB ,int24e2euse ,
9479 8 forneqs ,multi_fvm,interfaces,sh_offset_tab%NNSH_OSET)
9480 END IF
9481
9482 IF(coupling%active) THEN
9483 CALL coupling_ongoing(coupling, ongoing)
9484 ! FAKE TIME STEPS TO FINALIZE COUPLING
9485 DO WHILE (ongoing)
9486 dt2 = huge(dt2)
9487 CALL coupling_advance(coupling,dt2)
9488 CALL coupling_ongoing(coupling, ongoing)
9489 END DO
9490 CALL coupling_finalize(coupling)
9491 ENDIF
9492
9493 IF(ALLOCATED(isendto))DEALLOCATE(isendto)
9494 IF(ALLOCATED(ircvfrom))DEALLOCATE(ircvfrom)
9495 IF(ALLOCATED(intlist))DEALLOCATE(intlist)
9496 IF(ALLOCATED(intlist25))DEALLOCATE(intlist25)
9497 IF(ALLOCATED(niskyfi))DEALLOCATE(niskyfi)
9498 IF(ALLOCATED(niskyfie))DEALLOCATE(niskyfie)
9499 IF(ALLOCATED(fr_nbcc))DEALLOCATE(fr_nbcc)
9500 IF(ALLOCATED(fr_nbcci2))DEALLOCATE(fr_nbcci2)
9501 IF(ALLOCATED(dretri))DEALLOCATE(dretri)
9502 IF(ALLOCATED(xsec))DEALLOCATE(xsec)
9503 IF(ALLOCATED(irbkin_l))DEALLOCATE(irbkin_l)
9504 IF(ALLOCATED(icodt0))DEALLOCATE (icodt0)
9505 IF(ALLOCATED(icodr0))DEALLOCATE(icodr0)
9506 IF(ALLOCATED(element%PON%ISENDP))DEALLOCATE(element%PON%ISENDP)
9507 IF(ALLOCATED(element%PON%IRECVP))DEALLOCATE(element%PON%IRECVP)
9508 IF(ALLOCATED(irecvp_pxfem))DEALLOCATE(irecvp_pxfem)
9509 IF(ALLOCATED(isendp_crk))DEALLOCATE(isendp_crk)
9510 IF(ALLOCATED(irecvp_crk))DEALLOCATE(irecvp_crk)
9511 IF(ALLOCATED(cnel))DEALLOCATE(cnel)
9512 IF(ALLOCATED(addcnel))DEALLOCATE(addcnel)
9513 IF(ALLOCATED(addtmpl))DEALLOCATE(addtmpl)
9514 IF(ALLOCATED(tagel))DEALLOCATE(tagel)
9515 IF(ALLOCATED(ibufidel))DEALLOCATE(ibufidel)
9516 IF(ALLOCATED(indidel))DEALLOCATE(indidel)
9517 IF(ALLOCATED(ipartl))DEALLOCATE(ipartl)
9518 IF(ALLOCATED(eminx))DEALLOCATE(eminx)
9519 IF(nadmesh/=0)THEN
9520 DEALLOCATE(lsh4act,lsh4kin,psh4act,psh4kin,
9522 . msh4sky,msh3sky)
9523 IF(idel7ng>=1) DEALLOCATE(tagtrimc,tagtrimtg)
9524 END IF
9525 IF(ALLOCATED(stifn_tmp))DEALLOCATE(stifn_tmp)
9526 IF(ALLOCATED(stifr_tmp))DEALLOCATE(stifr_tmp)
9527 IF(ALLOCATED(acnd))DEALLOCATE(acnd)
9528 IF(ALLOCATED(arcnd))DEALLOCATE(arcnd)
9529 IF(ALLOCATED(stcnd))DEALLOCATE(stcnd)
9530 IF(ALLOCATED(strcnd))DEALLOCATE(strcnd)
9531 IF(ALLOCATED(lsh4upl))DEALLOCATE(lsh4upl)
9532 IF(ALLOCATED(lsh3upl))DEALLOCATE(lsh3upl)
9533 IF(ALLOCATED(psh4upl))DEALLOCATE(psh4upl)
9534 IF(ALLOCATED(psh3upl))DEALLOCATE(psh3upl)
9535 IF(ALLOCATED(fthreac))DEALLOCATE(fthreac)
9536 IF(ALLOCATED(fthdtm))DEALLOCATE(fthdtm)
9537 IF(ALLOCATED(freac))DEALLOCATE(freac)
9538 IF(ALLOCATED(nodreac))DEALLOCATE(nodreac)
9539 IF(ALLOCATED(grth))DEALLOCATE(grth)
9540 IF(ALLOCATED(igrth))DEALLOCATE(igrth)
9541 IF(ALLOCATED(igroupc))DEALLOCATE(igroupc)
9542 IF(ALLOCATED(igrouptg))DEALLOCATE(igrouptg)
9543 IF(ALLOCATED(igroups))DEALLOCATE(igroups)
9544 IF(ALLOCATED(gresav))DEALLOCATE(gresav)
9545 IF(ALLOCATED(sfem_nodvar))DEALLOCATE(sfem_nodvar)
9546 IF(ALLOCATED(sfem_nodvar_ale))DEALLOCATE(sfem_nodvar_ale)
9547 IF(ALLOCATED(partsav2))DEALLOCATE(partsav2)
9548 IF(imon>0) THEN
9549 IF(nvolu > 0) CALL fvstats(monvol)
9550 CALL stoptime(timers,timer_resol)
9551 IF(imonm>0) CALL printime_interf(interfaces%INTBUF_TAB,ipari,intlist,nbintc,timers%REALTIME(1)*0.01d0)
9552 CALL printime(timers,glob_therm%ITHERM,output)
9553 ELSE
9554 CALL add_elapsed_time_mon_off(timers)
9555 ENDIF
9556 CALL trace_out(3)
9557 RETURN
9558 ENDIF
9559C-------------------------------
9560 500 CONTINUE
9561C-------------------------------
9562 IF(mstop/=0) THEN
9563 parallel_section = 0
9564C Multidomain -> close sockets
9565 IF (irad2r==1) THEN
9566 DO itsk=1,nthread
9567 CALL close_sock_c(socket(itsk))
9568 END DO
9569 ENDIF
9570C /KILL
9571 IF((ncycle/ncrst)*ncrst/=ncycle.AND.
9572 2 mrest/=1.AND.wmcheck/=1.AND.nspmd>1)THEN
9573 l1 = 1+nixs*numels + nsvois*nixs
9574 l2 = l1+6*numels10
9575 l3 = l2+12*numels20
9576 CALL spmd_i7xvcom2(
9577 1 ipari ,nodes%X ,nodes%V ,nodes%MS ,
9578 2 imsch ,i2msch ,dt2prev ,intlist ,nbintc ,
9579 3 islen7 ,irlen7 ,islen11 ,irlen11 ,islen17 ,
9580 4 irlen17 ,ixs ,ixs(l3) ,nsensor ,
9581 5 igrbric ,nodes%TEMP ,2 ,irlen7t ,islen7t ,
9582 6 irlen20 ,islen20,irlen20t,islen20t,irlen20e,
9583 7 islen20e,nodes%IKINE ,diag_sms,sensors%SENSOR_TAB,interfaces%INTBUF_TAB,int24e2euse,
9584 8 forneqs ,multi_fvm,interfaces,sh_offset_tab%NNSH_OSET)
9585 ENDIF
9586
9587 IF(ALLOCATED(isendto))DEALLOCATE(isendto)
9588 IF(ALLOCATED(ircvfrom))DEALLOCATE(ircvfrom)
9589 IF(ALLOCATED(intlist25))DEALLOCATE(intlist25)
9590 IF(ALLOCATED(niskyfi))DEALLOCATE(niskyfi)
9591 IF(ALLOCATED(niskyfie))DEALLOCATE(niskyfie)
9592 IF(ALLOCATED(fr_nbcc))DEALLOCATE(fr_nbcc)
9593 IF(ALLOCATED(fr_nbcci2))DEALLOCATE(fr_nbcci2)
9594 IF(ALLOCATED(dretri))DEALLOCATE(dretri)
9595 IF(ALLOCATED(xsec))DEALLOCATE(xsec)
9596 IF(ALLOCATED(irbkin_l))DEALLOCATE(irbkin_l)
9597 IF(ALLOCATED(isendp))DEALLOCATE(isendp)
9598 IF(ALLOCATED(element%PON%ISENDP))DEALLOCATE(element%PON%ISENDP)
9599 IF(ALLOCATED(element%PON%IRECVP))DEALLOCATE(element%PON%IRECVP)
9600 IF(ALLOCATED(irecvp_pxfem))DEALLOCATE(irecvp_pxfem)
9601 IF(ALLOCATED(isendp_crk))DEALLOCATE(isendp_crk)
9602 IF(ALLOCATED(irecvp_crk))DEALLOCATE(irecvp_crk)
9603 !IF(IDEL7NG>0)THEN
9604 IF(ALLOCATED(cnel))DEALLOCATE(cnel)
9605 IF(ALLOCATED(addcnel))DEALLOCATE(addcnel)
9606 IF(ALLOCATED(addtmpl))DEALLOCATE(addtmpl)
9607 IF(ALLOCATED(tagel))DEALLOCATE(tagel)
9608 IF(ALLOCATED(ibufidel))DEALLOCATE(ibufidel)
9609 IF(ALLOCATED(indidel))DEALLOCATE(indidel)
9610 !ENDIF
9611 IF(ALLOCATED(ipartl))DEALLOCATE(ipartl)
9612 IF(ALLOCATED(eminx))DEALLOCATE(eminx)
9613 IF(nadmesh/=0)THEN
9614 DEALLOCATE(lsh4act,lsh4kin,psh4act,psh4kin,
9616 . msh4sky,msh3sky)
9617 IF(idel7ng>=1) DEALLOCATE(tagtrimc,tagtrimtg)
9618 END IF
9619C
9620 !interface22
9621 IF(ALLOCATED(brick_list)) DEALLOCATE (brick_list)
9622 IF(ALLOCATED(list_b_old)) DEALLOCATE (list_b_old)
9623 IF(ALLOCATED(nbold)) DEALLOCATE (nbold)
9624 IF(ALLOCATED(edge_list)) DEALLOCATE (edge_list)
9625 IF(ALLOCATED(uvarl)) DEALLOCATE (uvarl)
9626 IF(ALLOCATED(supercellvol_l)) DEALLOCATE (supercellvol_l)
9627 IF(ALLOCATED(eint_l)) DEALLOCATE (eint_l)
9628 IF(ALLOCATED(rho_l)) DEALLOCATE (rho_l)
9629 IF(ALLOCATED(mom_l)) DEALLOCATE (mom_l)
9630 IF(ALLOCATED(sig_l)) DEALLOCATE (sig_l)
9631 IF(ALLOCATED(vold_l)) DEALLOCATE (vold_l)
9632 IF(ALLOCATED(imergel)) DEALLOCATE (imergel)
9633 IF(ALLOCATED(old_secndlist)) DEALLOCATE (old_secndlist)
9634 IF(ALLOCATED(unlinked_cells_l)) DEALLOCATE (unlinked_cells_l)
9635 IF(ALLOCATED(n_unlinked_l)) DEALLOCATE (n_unlinked_l)
9636 IF(ALLOCATED(v22max_l)) DEALLOCATE (v22max_l)
9637 IF(ALLOCATED(dx22min_l)) DEALLOCATE (dx22min_l)
9638 IF(ALLOCATED(int22_fcell_anim)) DEALLOCATE (int22_fcell_anim)
9639
9640 !ALEFVM
9641 IF(ALLOCATED(alefvm_buffer%WFEXT_CELL)) DEALLOCATE (alefvm_buffer%WFEXT_CELL)
9642 IF(ALLOCATED(alefvm_buffer%FEXT_CELL)) DEALLOCATE (alefvm_buffer%FEXT_CELL)
9643 IF(ALLOCATED(alefvm_buffer%FCELL)) DEALLOCATE (alefvm_buffer%FCELL)
9644 IF(ALLOCATED(alefvm_buffer%FINT_CELL)) DEALLOCATE (alefvm_buffer%FINT_CELL)
9645 IF(ALLOCATED(alefvm_buffer%VERTEX)) DEALLOCATE (alefvm_buffer%VERTEX)
9646 IF(ALLOCATED(alefvm_buffer%F_FACE)) DEALLOCATE (alefvm_buffer%F_FACE)
9647
9648 !/LOAD/PBLAST
9649 CALL pblast_deallocate(pblast)
9650
9651C-- Rad2rad deallocation
9652 IF(ALLOCATED(iadd_nl)) DEALLOCATE (iadd_nl)
9653 IF(ALLOCATED(nbdof_nl)) DEALLOCATE (nbdof_nl)
9654 IF(ALLOCATED(nllnk)) DEALLOCATE (nllnk)
9655
9656C-- Seatblet stuctures deallocation
9657 IF (nslipring > 0) THEN
9658 DO i=1,nslipring
9659 DEALLOCATE(slipring(i)%FRAM)
9660 ENDDO
9661 DEALLOCATE(slipring)
9662 ENDIF
9663 IF (nretractor > 0) THEN
9664 DO i=1,nretractor
9665 DEALLOCATE(retractor(i)%INACTI_NODE)
9666 DO k=1,2
9667 IF (retractor(i)%IFUNC(k) > 0) THEN
9668 DEALLOCATE(retractor(i)%TABLE(k)%X(1)%VALUES)
9669 DEALLOCATE(retractor(i)%TABLE(k)%X)
9670 DEALLOCATE(retractor(i)%TABLE(k)%Y%VALUES)
9671 DEALLOCATE(retractor(i)%TABLE(k)%Y)
9672 ENDIF
9673 ENDDO
9674 ENDDO
9675 DEALLOCATE(retractor)
9676 ENDIF
9677
9678 !ALEMUSCL
9679 CALL alemuscl_deallocate()
9680 !Multifluid law
9681 CALL multi_deallocate(multi_fvm)
9682 IF (multi_fvm%NS_DIFF) THEN
9683 CALL diffusion%TERMINATE_DIFFUSION()
9684 ENDIF
9685
9686 !EBCS
9687 IF(nebcs > 0)CALL segvar%destroy()
9688C
9689 IF(ALLOCATED(stifn_tmp))DEALLOCATE(stifn_tmp)
9690 IF(ALLOCATED(stifr_tmp))DEALLOCATE(stifr_tmp)
9691 IF(ALLOCATED(acnd))DEALLOCATE(acnd)
9692 IF(ALLOCATED(arcnd))DEALLOCATE(arcnd)
9693 IF(ALLOCATED(stcnd))DEALLOCATE(stcnd)
9694 IF(ALLOCATED(strcnd))DEALLOCATE(strcnd)
9695 IF(ALLOCATED(lsh4upl))DEALLOCATE(lsh4upl)
9696 IF(ALLOCATED(lsh3upl))DEALLOCATE(lsh3upl)
9697 IF(ALLOCATED(psh4upl))DEALLOCATE(psh4upl)
9698 IF(ALLOCATED(psh3upl))DEALLOCATE(psh3upl)
9699 IF(ALLOCATED(err_thk_sh3))DEALLOCATE(err_thk_sh3)
9700 IF(ALLOCATED(err_thk_sh4))DEALLOCATE(err_thk_sh4)
9706 . x_sms, p_sms,y_sms, z_sms, prec_sms, prec_sms3,
9707 . diag_sms3, lt_sms,
9708 . kad_sms, kdi_sms , pk_sms, ltk_sms,
9709 . jadi_sms, jdii_sms, lti_sms, mskyi_sms, iskyi_sms,
9710 . xmom_sms, tagmsr_rby_sms, t2main_sms)
9711C
9712 IF(ALLOCATED(fthreac))DEALLOCATE(fthreac)
9713 IF(ALLOCATED(fthdtm))DEALLOCATE(fthdtm)
9714 IF(ALLOCATED(freac))DEALLOCATE(freac)
9715 IF(ALLOCATED(nodreac))DEALLOCATE(nodreac)
9716 IF(ALLOCATED(grth))DEALLOCATE(grth)
9717 IF(ALLOCATED(igrth))DEALLOCATE(igrth)
9718 IF(ALLOCATED(gresav))DEALLOCATE(gresav)
9719 IF(nrbe3>0)THEN
9720 DEALLOCATE(rbe3%RRBE3)
9721 IF (iparit>0) DEALLOCATE(rbe3%RRBE3_PON)
9722 END IF
9723 IF(impl_s>0.OR.neig>0)THEN
9724 CALL dealloc_impbuf(impbuf_tab)
9725#if defined(MUMPS5)
9726 CALL deallocm_imp(mumps_par)
9727#endif
9728 END IF
9729 IF(imon>0) THEN
9730 IF(nvolu > 0) CALL fvstats(monvol)
9731 CALL stoptime(timers,timer_resol)
9732 IF(imonm>0) CALL printime_interf(interfaces%INTBUF_TAB,ipari,intlist,nbintc,timers%REALTIME(1)*0.01d0)
9733 CALL printime(timers,glob_therm%ITHERM,output)
9734 ELSE
9735 CALL add_elapsed_time_mon_off(timers)
9736 ENDIF
9737 IF (glob_therm%ITHERM_FE > 0 ) CALL thermbilan(glob_therm)
9738 CALL trace_out(3)
9739
9740 DEALLOCATE(wibem, wrbem)
9741 IF(glob_therm%ITHERM_FE > 0 ) DEALLOCATE(fthe,fthesky)
9742 IF(glob_therm%INTHEAT > 0 ) DEALLOCATE(ftheskyi)
9743 IF(glob_therm%NODADT_THERM > 0 ) DEALLOCATE(condn,condnsky)
9744 IF(glob_therm%NODADT_THERM > 0.AND.glob_therm%INTHEAT > 0) DEALLOCATE(condnskyi)
9745!
9746 DEALLOCATE(vrbym,vrrbym,arbym,arrbym)
9747 IF(iplyxfem > 0) THEN
9748 DO i=1,nplymax
9749 DEALLOCATE(ply(i)%A)
9750 DEALLOCATE(ply(i)%V)
9751 DEALLOCATE(ply(i)%U)
9752 DEALLOCATE(plysky(i)%FSKY)
9753 ENDDO
9754 ENDIF
9755 IF(intplyxfem > 0)DEALLOCATE(plyskyi%FSKYI)
9756 DEALLOCATE(ply, plysky)
9757 IF(ALLOCATED(noda_fext))DEALLOCATE(noda_fext)
9758 CALL output_deallocate_noda_pext(output%DATA)
9759 DEALLOCATE(npcont2)
9760C Deallocte AMS / POFF
9761 IF(ALLOCATED(fr_loc))DEALLOCATE (fr_loc)
9762 IF(ALLOCATED(fr_loci2m))DEALLOCATE (fr_loci2m)
9763 IF(ALLOCATED(icodt0))DEALLOCATE (icodt0)
9764 IF(ALLOCATED(icodr0))DEALLOCATE (icodr0)
9765 IF(ALLOCATED(isensint))DEALLOCATE(isensint)
9766C
9767 CALL free_pinch(pinch_data)
9768 CALL deallocate_joint()
9769 CALL bcs%DEALLOCATE()
9770 IF (ALLOCATED(rby6)) DEALLOCATE(rby6)
9771 IF (ALLOCATED(dxancg)) DEALLOCATE(dxancg)
9772 IF (ALLOCATED(nb25_candt)) DEALLOCATE(nb25_candt)
9773 IF (ALLOCATED(nb25_impct)) DEALLOCATE(nb25_impct)
9774 IF (ALLOCATED(nb25_dst1)) DEALLOCATE(nb25_dst1)
9775 IF (ALLOCATED(nb25_dst2)) DEALLOCATE(nb25_dst2)
9776 DEALLOCATE(igrouc)
9777 DEALLOCATE(igrounc)
9778 IF (ALLOCATED(sph_work%VOXEL%NNOD)) DEALLOCATE(sph_work%VOXEL%NNOD)
9779 IF (ALLOCATED(sph_work%VOXEL%DXMIN)) DEALLOCATE(sph_work%VOXEL%DXMIN)
9780 IF (ALLOCATED(sph_work%VOXEL%DYMIN)) DEALLOCATE(sph_work%VOXEL%DYMIN)
9781 IF (ALLOCATED(sph_work%VOXEL%DZMIN)) DEALLOCATE(sph_work%VOXEL%DZMIN)
9782 IF (ALLOCATED(sph_work%VOXEL%DXMAX)) DEALLOCATE(sph_work%VOXEL%DXMAX)
9783 IF (ALLOCATED(sph_work%VOXEL%DYMAX)) DEALLOCATE(sph_work%VOXEL%DYMAX)
9784 IF (ALLOCATED(sph_work%VOXEL%DZMAX)) DEALLOCATE(sph_work%VOXEL%DZMAX)
9785 RETURN
9786 ENDIF ! MSTOP/=0
9787
9788 CALL trace_out(3)
9789
9790C=============================
9791C END OF EXPLICIT ITERATIVE LOOP
9792C=============================
9793 GO TO 100
9794C
9795 1002 FORMAT(3x,'* IMPLICIT COMPUTATION TERMINATED WITH ',3x,
9796 . 'TOTAL NONLINEAR ITERATIONS:',i8)
9797 1003 FORMAT(3x,'* TOTAL NUM.OF MATRIX FACTORIZATION AND PCG ITERATION:'
9798 . ,2x,i5,2x,i8)
9799c-----------
9800 IF (vipercoupling) THEN
9801C Deallocate indexing arrays
9802 IF(ALLOCATED(viper%ITABM1))DEALLOCATE(viper%ITABM1)
9803 IF(ALLOCATED(viper%IXEM1))DEALLOCATE(viper%IXEM1)
9804 CLOSE(viper%id)
9805 ENDIF
9806c-----------
9807 RETURN
subroutine accdtdc(eftsk, eltsk, ienunl, alpha_dc, a, ms, itab)
Definition accdtdc.F:29
subroutine accel1(a, ff, a2, a1, a0, as, vs, skew)
Definition accel1.F:29
subroutine accele(a, ar, v, ms, in, size_nale, nale, ms_2d, size_npby, npby)
Definition accele.F:32
subroutine crk_accele(addcne_crk, inod_crk, nodlevxf, nodft, nodlt, nodenr, crksky, ms, in, itab)
Definition accele_crk.F:32
subroutine accelepinch(apinch, ms, mspinch, stifpinch, nodft, nodlt, dtnod, dtfac)
Definition accelepinch.F:34
subroutine admdiv(ixc, ipartc, ixtg, iparttg, ipart, itask, icontact, iparg, x, ms, in, rcontact, elbuf_tab, nodft, nodlt, igeo, ipm, sh4tree, padmesh, msc, inc, sh3tree, mstg, intg, ptg, acontact, pcontact, err_thk_sh4, err_thk_sh3, mscnd, incnd, pm, mcp, mcpc, mcptg, itherm_fe)
Definition admdiv.F:48
subroutine admerr(ixc, ixtg, x, iparg, elbuf_tab, ipart, ipartc, iparttg, err_thk_sh4, err_thk_sh3, iad_elem, fr_elem, weight, sh4tree, sh3tree, area_sh4, area_sh3, area_nod, thick_sh4, thick_sh3, thick_nod)
Definition admerr.F:42
subroutine admfor0(ixc, ipartc, ixtg, iparttg, ipart, a, stifn, ar, stifr, x, sh4tree, sh3tree, stcont, fthe, condn, nodadt_therm, itherm_fe)
Definition admfor0.F:37
subroutine admgvid(iparg, elbuf_tab, fskyv, fsky, fthesky, iadc, iadtg, iflg, igrouc, ngrouc, condnsky, nodadt_therm)
Definition admgvid.F:35
subroutine admordr(sh4tree, sh3tree, ixc, ixtg)
Definition admordr.F:36
subroutine admregul(ixc, ipartc, ixtg, iparttg, ipart, itask, iparg, x, ms, in, elbuf_tab, nodft, nodlt, igeo, ipm, sh4tree, msc, inc, sh3tree, mstg, intg, ptg, mscnd, incnd, pm, mcp, mcpc, mcptg, itherm_fe)
Definition admregul.F:45
subroutine admvit(ixc, ipartc, ixtg, iparttg, ipart, itask, a, v, ar, vr, sh4tree, sh3tree, temp, itherm_fe)
Definition admvit.F:36
subroutine agauge0(lgauge, gauge, x, ixc, igaup, ngaup)
Definition agauge.F:566
subroutine alefvm_accele(a, ar, nodft, nodlt, nale)
subroutine alefvm_main(x, v, elbuf_tab, vr, ale_connect, iparg, ixs, nale, itask, nodft, nodlt, ipm, nv46, msnf)
Definition alefvm_main.F:49
subroutine alemain(timers, pm, geo, x, a, v, ms, wa, elbuf_tab, bufmat, partsav, tf, val2, veul, fv, stifn, fsky, eani, phi, fill, dfill, alph, skew, w, d, dsave, asave, dt2t, dt2save, xcell, iparg, npc, ixs, ixq, ixtg, iads, ifill, icodt, iskew, ims, iadq, neltst, ityptst, iparts, ipartq, itask, nodft, nodlt, nbrcvois, temp, fsavsurf, nbsdvois, lnrcvois, lnsdvois, nercvois, nesdvois, lercvois, lesdvois, isizxv, iad_elem, fr_elem, fskym, msnf, ipari, segvar, itab, iskwn, diffusion, iresp, volmon, fsav, igrsurf, neltsa, ityptsa, weight, npsegcom, lsegcom, ipm, igeo, itabm1, lenqmv, nv46, aglob, gresav, grth, igrth, lgauge, gauge, mssa, dmels, igaup, ngaup, table, ms0, xdp, igrnod, sfem_nodvar, fskyi, isky, s_sfem_nodvar, intbuf_tab, ixt, igrv, agrav, sensors, lgrav, condnsky, condn, ms_2d, multi_fvm, igrtruss, igrbric, nloc_dmg, id_global_vois, face_vois, ebcs_tab, ale_connectivity, mat_elem, h3d_data, dt, output, need_comm_inter18, idtmins, idtmin, maxfunc, imon_mat, userl_avail, impl_s, idyna, python, matparam, glob_therm)
Definition alemain.F:117
subroutine alemuscl_deallocate()
subroutine alesub2(nale, v, dsave, icodt, iskew, skew, asave, a, d, neltst, ityptst, itask, nodft, nodlt, dt2save, dt2t, neltsa, ityptsa, nelts, weight, fsky, fskyv)
Definition alesub2.F:39
subroutine alewdx(timers, geo, x, d, v, vr, w, wa, wb, skew, pm, xlas, ms, fsav, a, tf, rwbuf, dt2save, python, iparg, ixs, ixq, nodpor, iskew, icodt, elbuf_tab, npf, linale, nprw, las, ipari, nodft, nodlt, itask, iad_elem, fr_elem, nbrcvois, nbsdvois, lnrcvois, lnsdvois, weight, adsky, fsky, iads, fr_wall, nporgeo, procne, fr_nbcc, iadq, xdp, igrnod, dr, intbuf_tab, multi_fvm, ale_connectivity, ddp, ne_nercvois, ne_nesdvois, ne_lercvois, ne_lesdvois, xcell, xface, wfext)
Definition alewdx.F:76
subroutine alloc_elbuf_imp(elbuf_tab, elbuf_imp, ngroup, iparg)
subroutine asspar3(a, ar, itask, nodft, nodlt, stifn, stifr, itab, fsky, fskyv, isky, indsky, fskyi, adskyi, partft, partlt, partsav, ms, fthe, fthesky, ftheskyi, greft, grelt, gresav, itherm_fe, intheat)
Definition asspar3.F:37
subroutine asspar4(nodes, fsky, fskyv, adsky, fskym, msnf, isky, fskyi, fthe, fthesky, ftheskyi, nodft, nodlt, adskyi, partsav, partft, partlt, itask, greft, grelt, gresav, af, ffsky, msf, adsky_pxfem, inod_pxfem, fskyd, dmsph, condn, condnsky, condnskyi, ms_2d, icnds10, stifnd, forneqs, forneqsky, nfacnit, nodft_2, nodlt_2, fsky_l, glob_therm)
Definition asspar4.F:48
subroutine asspar5(nthread, numnod, nodft, nodlt, iroddl, npart, partft, partlt, a, ar, partsav, stifn, stifr, i8a, i8ar, i8stifn, i8stifr, viscn, i8viscn, greft, grelt, gresav, ngpe, nthpart)
Definition asspar5.F:33
subroutine asspar(nthread, numnod, nodft, nodlt, iroddl, npart, partft, partlt, a, ar, partsav, stifn, stifr, viscn, fthe, itherm_fe, nodadt_therm, stcnd, greft, grelt, gresav, ngpe, nthpart, ialelag, af, dmsph, condn, apinch, stifpinch)
Definition asspar.F:36
subroutine asspar_crk(addcne_crk, inod_crk, crksky, nodft, nodlt, nodenr, nodlevxf, itab)
Definition asspar_crk.F:33
subroutine asspar_sub(a, fsky, addcne, nodft_2, nodlt_2, posi, sizesub, sizea)
Definition asspar_sub.F:30
subroutine asspar_sub_poff(a, nodft, nodlt, posi, sizea, nthread)
subroutine asspart(partft, partlt, partsav, greft, grelt, gresav)
Definition asspart.F:32
subroutine assparxx(itsk, intlist, nbintc, ipari, nodadt_therm)
Definition assparxx.F:31
subroutine bcs10(nodft, nodlt, icodt, icodr, iskew, skew, a, ar, ms, v, vr)
Definition bcs10.F:33
subroutine bcscyc(ibcscyc, lbcscyc, skew, x, v, a, itab)
Definition bcscyc.F:32
subroutine bcsdtth_copy(icodt, icodr, icodt0, icodr0, iflag)
Definition bcsdtth.F:218
subroutine bcsn(icode, icodt, icodr, parts0, partsav)
Definition bcsn.F:29
subroutine bmultn(fill, dfill, ims, nodft, nodlt)
Definition bmultn.F:29
subroutine cfield_1(python, icfield, fac, npc, tf, a, v, x, xframe, ms, sensor_tab, weight, ib, itask, iframe, nsensor, wfext)
Definition cfield.F:38
subroutine check_ale_comm(iparg_l, elbuf_tab, global_active_ale_element, itherm)
subroutine check_edge_state(itask, m_edge_nb, s_edge_nb, m_edge_id, s_edge_id, shift_interface, intbuf_tab, newfront, ipari, geo, ixs, ixc, ixt, ixp, ixr, ixtg, ixs10, addcnel, cnel, tag_node, tag_elem, shoot_struct)
subroutine check_nan_acc(ncycle, nodes)
subroutine check_nodal_state(itask, itag, newfront, intbuf_tab, size_sec_node, shift_s_node, inter_sec_node, sec_node_id)
subroutine check_remote_surface_state(surfarce_nb, surface_id, shift_interface, intbuf_tab, ipari, iad_elem, shoot_struct)
subroutine check_surface_state(itask, surfarce_nb, surface_id, shift_interface, intbuf_tab, ipari, geo, ixs, ixc, ixt, ixp, ixr, ixtg, ixs10, addcnel, cnel, tag_node, tag_elem, shoot_struct)
subroutine chkload(ib, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, itag, itask, itagl, itab, nodes, addcnel, cnel, tagel, iparg, geo, ibufs, nindex, nindg, npresload, loadp_tagdel, iloadp, lloadp, iad_elem)
Definition chkload.F:42
subroutine chkmsin(nodft, nodlt, itab, ms, in, negmas)
Definition chkmsin.F:29
subroutine chkstfn3n(nodes, ipari, geo, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, itag, iparg, itask, newfront, itagl, ms, in, adm, itab, itabm1, addcnel, cnel, ind, nindex1, nindex2, nindex3, nindex4, tagel, int24use, ibufseglo, indseglo, ibufs, intbuf_tab, iad_elem)
Definition chkstfn3.F:1281
subroutine tagoff3n(nodes, geo, ixs, ixs10, ixs20, ixs16, ixq, ixc, ixt, ixp, ixr, ixtg, itag, nodft, nodlt, iparg, ev, itask, ixtg1, iad_elem, fr_elem, itab, addcnel, cnel, kxsp, elbuf_tab, tagel, iexlnk, igrnod, dd_r2r, dd_r2r_elem, sdd_r2r_elem, idel7nok_sav, idel7nok_r2r, tagtrimc, tagtrimtg, s_elem_state, elem_state, shoot_struct, global_nb_elem_off)
Definition chkstfn3.F:577
subroutine chkstifn(ipari, ms, intbuf_tab)
Definition chkstifn.F:33
subroutine cjoint(a, ar, v, vr, x, fsav, ljoint, ms, in, iadcj, fr_cj, tag_lnk_sms, itask)
Definition cjoint.F:35
subroutine clusterf(cluster, elbuf_tab, x, a, ar, skew, ixs, iparg, fcluster, mcluster, h3d_data, geo)
Definition clusterf.F:36
subroutine cndint(ixc, ipartc, ixtg, iparttg, ipart, itask, a, v, ar, vr, ms, in, nodft, nodlt, x, sh4tree, sh3tree, itab, stifn, stifr, mscnd, incnd)
Definition cndint.F:38
subroutine cndordr(ipart, ipartc, iparttg, sh4tree, sh3tree)
Definition cndordr.F:32
subroutine collect(a, itab, weight, nodglob)
Definition collect.F:31
subroutine collectm(nodnx_sms, itab, weight, nodglob)
Definition collect.F:282
subroutine collectt(temp, itab, weight, nodglob)
Definition collect.F:379
subroutine convec(ibcv, fconv, npc, tf, x, temp, nsensor, sensor_tab, fthe, iad, fthesky, python, glob_therm)
Definition convec.F:38
#define my_real
Definition cppsort.cpp:32
subroutine crk_coord_ini(addcne_crk, inod_crk, nodft, nodlt, x, nodlevxf)
subroutine crk_velocity2(iparg, ngrouc, igrouc, elcutc, crkedge, nodedge, ixc, ixtg, xedge4n, xedge3n, iadc_crk, iel_crk, inod_crk, itab)
subroutine crk_zero_accel(addcne_crk, inod_crk, nodft, nodlt, nodlevxf)
subroutine crk_zero_fsky(crksky, addcne_crk, inod_crk, nodft, nodlt, nodlevxf)
subroutine crk_velocity(addcne_crk, inod_crk, nodlevxf, nodft, nodlt, x, v, vr, a, ar, itab)
subroutine damping(nodft, nodlt, v, vr, a, ar, damp, ms, in, igrnod, dim, itask, weight, tagslv_rby, wfext)
Definition damping.F:882
subroutine damping44(dim, v, vr, a, ar, ms, in, dampr, damp, igrnod, weight, tagslv_rby, wfext)
Definition damping.F:794
subroutine damping51(dim, v, vr, a, ar, ms, in, dampr, damp, igrnod, weight, tagslv_rby, skew, icontact, i_damp_rdof_tab, ndamp_vrel, id_damp_vrel, fr_damp_vrel, iparit, ispmd, wfext)
Definition damping.F:41
subroutine dealloc_shoot_inter(shoot_struct)
subroutine desacti(ixs, ixq, ixc, ixp, ixt, ixr, ixtg, iparg, iactiv, nsensor, sensor_tab, fsky, x, elbuf_tab, ibcv, fconv, ibcr, fradia, igroups, factiv, temp, mcp, pm, mcp_off, igrbric, igrquad, igrsh4n, igrsh3n, igrtruss, igrbeam, igrspring, glob_therm)
Definition desacti.F:45
subroutine disp_vel_saved_cload(v, d, vr, dr, ib, dpl0cld, vel0cld, nibcld, nconld, iroddl, numnod)
subroutine depla(v, d, x, vr, dr, xdp, ddp, numnod)
subroutine deplafakeige(x, v, intbuf_tab, kxig3d, ixig3d, igeo, knot, wige, knotlocpc, knotlocel)
subroutine deplapinch(vpinch, dpinch, xpinch, nodft, nodlt)
Definition displpinch.F:32
subroutine dtnoda(nodft, nodlt, neltst, ityptst, itab, ms, in, stifn, stifr, dt2t, dmast, dinert, adt, adm, imsch, weight, a, ar, igrnod, nodadt_therm, adi, rbym, arby, arrby, weight_md, mcp, mcp_off, condn, nale, h3d_data)
Definition dtnoda.F:42
subroutine dtnodamp(itab, ms, in, stifn, stifr, dt2t, weight, igrnod, dampr, istop, i_damp_rdof_tab, icontact, ixc, x)
Definition dtnodamp.F:34
subroutine dtnodams(nodft, nodlt, neltst, ityptst, itab, ms, in, stifn, stifr, dt2t, dmast, dinert, adt, adm, imsch, weight, a, ar, igrnod, adi, rbym, arby, arrby, ismsch, nodnx_sms, diag_sms, npby, tagmsr_rby_sms, h3d_data)
Definition dtnodams.F:43
subroutine dtnodarayl(ms, in, stifn, stifr, dt2t, igrnod, dampr)
Definition dtnodarayl.F:35
subroutine ebcclap(v, a, fv, ebcs_tab)
Definition ebcclap.F:36
subroutine ebcs_extrapol(fv, np, tf, ebcs_tab)
void sav_buf_point(int *buf, int *i)
subroutine sms_ini_err(nprw, lprw, kinet)
Definition sms_init.F:2739
subroutine sms_ini_rby(kinet, nprw, lprw, npby, lpby, tagmsr_rby_sms, tagslv_rby_sms)
Definition sms_init.F:102
subroutine sms_ini_int(ipari, intbuf_tab, iad_elem, fr_elem, intlist, nbintc)
Definition sms_init.F:2576
subroutine sms_ini_kin_2(ilink, rlink, nnlink, lnlink, tag_lnk_sms, fr_ll, fr_rl, weight, itab, ljoint, iadcj, fr_cj, nprw, lprw, fr_wall, nrwl_sms, iad_elem, fr_elem)
Definition sms_init.F:2477
subroutine sms_ini_part(igrpart, tagprt_sms)
Definition sms_init.F:35
subroutine soltosphf(a, spbuf, ixs, kxsp, ipartsp, nod2sp, irst, ngrounc, igrounc, iparg, stifn, sol2sph, sph2sol, elbuf_tab, itask, nodft, nodlt, isky, fskyi, igeo, sol2sph_typ)
Definition soltosph.F:45
subroutine cumultime_mp(taille, iparg, ixc, ixq, ixt, ixp, ixtg, ixr, ixs, kxig3d, ipm, igeo, geo, poin_ump, cputime_mp, nbr_gpmp, cputime_mp_glob, tab_ump, pm, bufmat, tabmp_l, tab_mat)
Definition timer.F:2619
subroutine printimeg(iparg, pm, ipm, ixc, ixtg, ixs)
Definition timer.F:1454
subroutine add_elapsed_time_mon_off(t)
Definition timer.F:3102
subroutine err_thk(ixc, ixtg, iparg, iad_elem, fr_elem, weight, x, elbuf_tab, ipart, ipartc, iparttg, itask, nodft, nodlt, err_thk_sh4, err_thk_sh3, sh4tree, sh3tree, area_sh4, area_sh3, area_nod, thick_sh4, thick_sh3, thick_nod)
Definition err_thk.F:45
subroutine euldx(v, d, x, ddp, nale, nodft, nodlt)
Definition euldx.F:29
subroutine fail_wind_frwave_init(ngroup)
subroutine fequilibre(a, fzero, ixc, ixtg)
Definition fequilibre.F:31
subroutine find_dt_for_targeted_added_mass(ms, stifn, dtsca, igrp_usr, target_dt, percent_addmass, percent_addmass_old, totmas, weight, igrnod, icnds10)
subroutine find_edge_inter(itab, shoot_struct, ixs, ixs10, ixc, ixtg, ixq, ixt, ixp, ixr, geo, ngroup, igroups, iparg)
subroutine find_surface_inter(itab, shoot_struct, ixs, ixs10, ixc, ixtg, ngroup, nparg, igroups, iparg)
subroutine fixfingeo(python, nodes, ibfv, npc, tf, vel, sensor_tab, cptreac, nodreac, nodnx_sms, nsensor, fthreac, wfext)
Definition fixfingeo.F:40
subroutine fixflux(ibfflux, fbfflux, npc, tf, x, ixs, nsensor, sensor_tab, fthe, iad, fthesky, python, glob_therm)
Definition fixflux.F:41
subroutine fixtemp(python, ibft, val, temp, npc, tf, nsensor, sensor_tab, glob_therm, snpc)
Definition fixtemp.F:40
subroutine fixvel(ibfv, a, v, npc, tf, vel, ms, x, skew, ar, vr, in, nsensor, sensor_tab, weight, depla, rby, iframe, xframe, dr, nodnx_sms, nodes, tt_double, depla_double, python, wfext)
Definition fixvel.F:42
subroutine flow0(output, iflow, rflow, wiflow, wrflow, x, v, a, npc, tf, sensor_tab, nbgauge, lgauge, gauge, nsensor, igrv, agrv, nfunct, python, wfext)
Definition flow0.F:40
subroutine flow1(iflow, rflow, nbgauge, a)
Definition flow1.F:31
subroutine flow_accele(nale, ms, a, v, nodft, nodlt)
Definition flow_accele.F:29
subroutine flow_depla(nale, v, d, nodft, nodlt)
Definition flow_displ.F:30
subroutine flow_velocity(nale, a, v, fzero, nodft, nodlt, w, vs, ifoam)
subroutine forani1(output, a, nfia, nfea, nfoa, nodft, nodlt, fext, h3d_data)
Definition forani1.F:32
subroutine forani2(output, a, nodft, nodlt, h3d_data)
Definition forani2.F:32
subroutine forani3(output, a, ms, nodft, nodlt, h3d_data)
Definition forani3.F:32
subroutine forcefingeo(ibfv, npc, tf, a, v, x, vel, sensor_tab, fsky, fext, itabm1, h3d_data, nsensor, python, wfext, nodes)
Definition forcefingeo.F:40
subroutine forcepinch(ib, fac, npc, tf, a, v, x, skew, ar, vr, nsensor, sensor_tab, weight, tfexc, iadc, fsky, fskyv, fext, h3d_data, apinch, vpinch, python, wfext)
Definition forcepinch.F:46
subroutine forint(timers, python, pm, geo, x, a, ar, v, vr, ms, in, w, elbuf, wa, val2, veul, fv, stifn, stifr, fsky, tf, bufmat, partsav, d, dr, eani, elbuf_tab, tani, fani, fsav, sensors, nloc_dmg, skew, anin, dt2t, bufgeo, itab, iads, iadq, iadt, iadp, mat_elem, iadr, iparg, ale_connect, npc, ixs, ixq, ixt, ixp, ixr, neltst, ipari, ityptst, nstrf, ipart, iparts, ipartq, ipartt, ipartp, ipartr, ipartur, fr_wave, rby, secfcum, agrav, igrv, lgrav, ixs10, ixs20, iads10, iads20, ixs16, iads16, w16, fskym, msnf, igeo, ipm, xsec, itask, temp, fthe, fthesky, igrounc, ngrounc, gresav, grth, igrth, xdp, mssa, dmels, mstr, dmeltr, msp, dmelp, msrt, dmelrt, table, vf, af, df, wf, ffsky, afglob, nbsdvois, nercvois, nesdvois, lercvois, lesdvois, phi1, phi2, msf, nodft, nodlt, flg_kj2, por, icontact, ifoam, sfem_nodvar, kxig3d, ixig3d, knot, wige, condn, condnsky, s_sfem_nodvar, tagprt_sms, itagnd, ms_2d, nale, stressmean, knotlocpc, knotlocel, subset, flag_slipring_update, flag_retractor_update, h3d_data, ifthe, icondn, dt, output, sbufmat, snpc, stf, nodadt, dtfac1, dtmin1, idtmin, iout, istdo, idtmins, dtfacs, nsvois, iresp, maxfunc, userl_avail, glob_therm, imon_mat, dtmins, sanin, ngrth, nelem)
Definition forint.F:126
subroutine forintc(timers, pm, geo, x, a, ar, v, vr, ms, in, nloc_dmg, wa, stifn, stifr, fsky, crksky, tf, bufmat, partsav, d, mat_elem, dr, eani, tani, fani, fsav, sensors, skew, failwave, dt2t, thke, bufgeo, iadc, iadtg, iparg, npc, ixc, ixtg, neltst, ipari, ityptst, nstrf, ipart, ipartc, iparttg, secfcum, fsavd, group_param_tab, fzero, ixtg1, iadtg1, igeo, ipm, madfail, xsec, itask, mcp, temp, fthe, fthesky, ms_ply, zi_ply, inod_pxfem, xedge4n, xedge3n, iel_pxfem, iadc_pxfem, igrouc, ngrouc, gresav, grth, igrth, mstg, dmeltg, msc, dmelc, table, knod2elc, ptg, msz2, inod_crk, iel_crk, iadc_crk, elcutc, nodenr, ibordnode, nodedge, crknodiad, elbuf_tab, xfem_tab, condn, condnsky, crkedge, stack, itab, glob_therm, drape_sh4n, drape_sh3n, subset, xdp, vpinch, apinch, stifpinch, drapeg, output, dt, snpc, stf, userl_avail, maxfunc, sbufmat)
Definition forintc.F:89
subroutine forintp(timers, pm, geo, x, a, v, ms, w, elbuf_tab, wa, fv, stifn, pld, bufmat, partsav, nloc_dmg, fsav, dt2t, iads, iparg, npc, neltst, ityptst, ipart, itab, isky, bufgeo, fskyi, xframe, kxsp, ixsp, nod2sp, ipartsp, spbuf, ispcond, ispsym, xspsym, vspsym, wasph, lprtsph, lonfsph, waspact, isphio, vsphio, sphveln, itask, ipm, gresav, grth, igrth, table, lgauge, gauge, ngrounc, igrounc, ixs, irst, sol2sph, sph2sol, fskyv, fsky, igeo, temp, fthe, ftheskyi, sphg_f6, wsmcomp, sol2sph_typ, mat_elem, output, sph_iord1, snpc, stf, sbufmat, idtmins, nsvois, iresp, maxfunc, imon_mat, userl_avail, impl_s, idyna, dt, glob_therm, sph_work, wfext, sensors)
Definition forintp.F:88
subroutine forints(pm, geo, x, a, ar, v, vr, ms, in, w, elbuf, val2, veul, fv, stifn, stifr, fsky, tf, bufmat, partsav, fani, fsav, skew, dt2t, iads, iparg, npc, ixs, neltst, ityptst, ipart, iparts, itab, fskyi, bufgeo, kxx, ixx, isky, ipartx, gresav, grth, igrth, elbuf_tab)
Definition forints.F:49
subroutine fvbag0(output, monvol, volmon, x, sensor_tab, v, a, npc, tf, nsensor, fsav, ifvmesh, icontact, lgauge, gauge, igeo, geo, pm, ipm, iparg, igrouptg, igroupc, elbuf_tab, fext, flag, h3d_data, itab, weight, wfext, python)
Definition fvbag0.F:46
subroutine fvcopy(monvol)
Definition fvcopy.F:32
subroutine fv_switch_crit(monvol, check_npolh)
Definition fvdim.F:74
subroutine fvrezone0(monvol, x)
Definition fvrezone.F:33
subroutine fvstats(monvol)
Definition fvstats.F:36
subroutine fvupd0(monvol, x, v, volmon, smonvol, svolmon)
Definition fvupd.F:34
subroutine fxbyfor(output, fxbipm, fxbrpm, fxbnod, fxbmod, fxbglm, fxbcpm, fxbcps, fxblm, fxbfls, fxbdls, fxbdep, fxbvit, fxbacc, a, ar, x, fxbmvn, fxbmcd, fxbse, fxbsv, fxbelm, fxbsig, elbuf, partsav, elbuf_tab, fsav, fxbfp, fxbefw, fxbfc, d, dt2t, ityptst, neltst, fxbgrvi, fxbgrvr, igrv, npc, tf, fxbgrp, fxbgrw, iparg, nsensor, sensor_tab, iad_elem, fr_elem, agrv, python)
Definition fxbyfor.F:48
subroutine fxbypid(output, iparg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, fxbipm, fxbnod, onof, itag, onfelt, elbuf_str)
Definition fxbypid.F:40
subroutine fxbyvit(output, fxbipm, fxbnod, fxbmod, fxbglm, fxblm, fxbmvn, fxbmcd, fxbse, fxbsv, fxbvit, fxbacc, fxbrpm, v, vr, a, ar, ms, in, weight, fsav, fxbfc, fxbedp, iad_elem, fr_elem)
Definition fxbyvit.F:39
subroutine fxgrvcor(fxbipm, fxbgrvi, a, igrv, agrv, npc, tf, ms, v, skew, fxbgrw, iad_elem, fr_elem, wfext, python)
Definition fxgrvcor.F:36
subroutine gravit(igrv, agrv, npc, tf, a, v, x, skew, ms, sensor_tab, weight, ib, itask, nsensor, python, wfext)
Definition gravit.F:38
subroutine gravit_fvm_fem(igrv, agrv, npc, tf, a, v, x, skew, ms, sensor_tab, weight, ib, itask, nale, nsensor, python, wfext)
subroutine zero1(r, n)
subroutine i14ist(ipari, intbuf_tab, igrsurf, bufsf)
Definition i14ist.F:32
subroutine i14wfs(output, ipari, intbuf_tab, igrsurf, fsav)
Definition i14wfs.F:33
subroutine i18main_kine_2(output, ipari, intbuf_tab, x, v, a, iskew, skew, lcod, wa, ms, itab, fsav, jtask, kinet, stifn, mtf, cand_sav, fcont, int18add, iad_elem, fr_elem, h3d_data)
subroutine i18main_kine_1(output, ipari, intbuf_tab, x, v, a, iskew, skew, lcod, wa, ms, itab, jtask, kinet, stifn, mtf, cand_sav, int18add, iad_elem, fr_elem, tagpene, h3d_data, multi_fvm, ale_ne_connect, xcell, xcell_remote)
subroutine spmd_i24_prepare(mode, ipari, intbuf_tab, iad_elem, fr_elem, intlist, nbintc, iad_i24, sfr_i24, fr_i24, i24maxnsne)
Definition i24_prepare.F:35
subroutine i24e2e_fictive_nodes_update(intlist, nbintc, ipari, intbuf_tab, x, v, ms, itab, xyz, numnod, nsh_offset)
Definition i24for3e.F:708
subroutine i24nitschfor3(ipari, intbuf_tab, iparit, stressmean, intlist, nbintc, x, iads, forneqs, forneqsky, itab, ixs, iads10, iads20, iads16, nfacnit)
subroutine i24pxfem(ipari, intbuf_tab, wagap, iad_elem, fr_elem)
Definition i24pxfem.F:35
subroutine spmd_i25_prepare(mode, ipari, intbuf_tab, iad_elem, fr_elem, intlist, nbintc, iad_i25, sfr_i25, fr_i25)
Definition i25_prepare.F:35
subroutine imp_buck(pm, geo, ipm, igeo, elbuf, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, ixtg1, iparg, tf, npc, fr_wave, w16, bufmat, thke, bufgeo, nsensor, sensor_tab, rby, skew, wa, icodt, icodr, iskew, ibfv, vel, lpby, npby, itab, weight, ms, in, ipari, intbuf_tab, x, itask, cont, icut, xcut, fint, fext, fopt, anin, nstrf, rwbuf, nprw, tani, dd_iad, eani, ipart, nom_opt, igrsurf, bufsf, idata, rdata, kxx, ixx, kxsp, ixsp, nod2sp, spbuf, ixs10, ixs20, ixs16, vr, monvol, volmon, nodglob, iad_elem, fr_elem, fr_sec, fr_rby2, iad_rby2, fr_wall, v, a, graphe, partsav, xframe, dirul, fncont, ftcont, temp, sh4tree, sh3tree, err_thk_sh4, err_thk_sh3, iframe, lprw, elbuf_tab, fsav, fsavd, rwsav, ar, irbe3, lrbe3, frbe3, fr_i2m, iad_i2m, fr_rbe3m, iad_rbe3m, frwl6, ibcl, forc, irbe2, lrbe2, iad_rbe2, fr_rbe2, weight_md, cluster, fcluster, mcluster, xfem_tab, ale_connect, w, nv46, nercvois, nesdvois, lercvois, lesdvois, crkedge, stack, dimfb, fbsav6, stabsen, tabsensor, indx_crk, xedge4n, xedge3n, sph2sol, stifn, stifr, drape_sh4n, drape_sh3n, h3d_data, subset, igrnod, fcont_max, fncontp2, ftcontp2, nddl0, nnzk0, impbuf_tab, drapeg, matparam_tab, glob_therm, output)
Definition imp_buck.F:106
subroutine imp_dt2(dt_e)
Definition imp_dt.F:29
subroutine imp_sol_init(geo, npby, lpby, itab, ipari, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, ixtg1, ixs10, ixs20, ixs16, iparg, elbuf, nint7, nbintc, x, dmcp, fr_elem, iad_elem, fr_i2m, iad_i2m, nprw, num_imp1, num_impl, monvol, igrsurf, fr_mv, ipm, igeo, iad_rby, fr_rby, sh4tree, sh3tree, irbe3, lrbe3, fr_rbe3m, iad_rbe3m, irbe2, lrbe2, ibfv, vel, elbuf_tab, iframe, intbuf_tab, nddl0, nnzk0, impbuf_tab)
subroutine imp_restarcp(x, v, vr, geo, igeo, dmcp, impbuf_tab)
subroutine imp_solv(output, timers, python, icode, iskew, iskwn, ipart, ixtg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg1, itab, itabm1, npc, ibcl, ibfv, sensor_tab, nnlink, lnlink, iparg, igrv, ipari, intbuf_tab, nprw, iconx, npby, lpby, lrivet, nstrf, ljoint, icodt, icodr, isky, adsky, iads_f, ilink, llink, weight, itask, ibvel, lbvel, fbvel, x, d, v, vr, dr, thke, damp, ms, in, pm, skews, geo, eani, bufmat, bufgeo, bufsf, tf, forc, vel, fsav, agrv, fr_wave, parts0, elbuf, rby, rivet, fr_elem, iad_elem, wa, a, ar, stifn, stifr, partsav, fsky, fskyi, iframe, xframe, w16, iactiv, fskym, igeo, ipm, wfext, nodft, nodlt, nint7, num_imp, ns_imp, ne_imp, ind_imp, it, rwbuf, lprw, fr_wall, nbintc, intlist, fopt, rwsav, fsavd, graphe, fac_k, ipiv_k, nkcond, nsensor, monvol, igrsurf, fr_mv, volmon, dirul, nodglob, mumps_par, cddlp, isendto, irecvfrom, newfront, imsch, i2msch, isizxv, ilenxv, islen7, irlen7, islen11, irlen11, islen17, irlen17, irlen7t, islen7t, kinet, num_imp1, temp, dt2prev, waint, lgrav, sh4tree, sh3tree, irlen20, islen20, irlen20t, islen20t, irlen20e, islen20e, irbe3, lrbe3, frbe3, fr_i2m, iad_i2m, fr_rbe3m, iad_rbe3m, frwl6, irbe2, lrbe2, intbuf_tab_c, ikine, diag_sms, icfield, lcfield, cfield, count_remslv, count_remslve, elbuf_tab, elbuf_imp, xdp, weight_md, stack, dimfb, fbsav6, stabsen, tabsensor, drape_sh4n, drape_sh3n, h3d_data, multi_fvm, igrbric, igrsh4n, igrsh3n, igrbeam, forneqs, maxdgap, nddl0, nnzk0, it_t, impbuf_tab, cptreac, fthreac, nodreac, drapeg, interfaces, th_surf, dpl0cld, vel0cld, snpc, stf, glob_therm, wfext_md)
Definition imp_solv.F:175
subroutine imp_fanie(output, fext, nfia, nfea, nodft, nodlt, h3d_data)
Definition imp_solv.F:4794
subroutine imp_fanii(output, fint, nfia, nodft, nodlt, h3d_data)
Definition imp_solv.F:4744
subroutine imp_fout(output, a, ar, nfia, nfea, nodft, nodlt, h3d_data, impbuf_tab)
Definition imp_solv.F:4683
subroutine deallocm_imp(mumps_par)
Definition imp_solv.F:4923
subroutine dealloc_impbuf(impbuf_tab)
Definition imp_solv.F:9107
subroutine re2int5(nt_imp, numimp, ns_imp, ne_imp, numimpl, ipari, nt_imp0)
Definition imp_solv.F:5270
subroutine imp_chkm(timers, python, icode, iskew, iskwn, ipart, ixtg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg1, itab, itabm1, npc, ibcl, ibfv, sensor_tab, nnlink, lnlink, iparg, igrv, ipari, intbuf_tab, nprw, iconx, npby, lpby, lrivet, nstrf, ljoint, icodt, icodr, isky, adsky, iads_f, ilink, llink, weight, itask, ibvel, lbvel, fbvel, x, d, v, vr, dr, thke, damp, ms, in, pm, skews, geo, eani, bufmat, bufgeo, bufsf, tf, forc, vel, fsav, agrv, fr_wave, parts0, elbuf, rby, rivet, fr_elem, iad_elem, nsensor, wa, a, ar, stifn, stifr, partsav, fsky, fskyi, iframe, xframe, w16, iactiv, fskym, igeo, ipm, wfext, nodft, nodlt, nint7, num_imp, ns_imp, ne_imp, ind_imp, it, rwbuf, lprw, fr_wall, nbintc, intlist, fopt, rwsav, fsavd, dirul, lgrav, irbe3, lrbe3, frbe3, frwl6, irbe2, lrbe2, icfield, lcfield, cfield, elbuf_tab, weight_md, stack, dimfb, fbsav6, stabsen, tabsensor, drape_sh4n, drape_sh3n, h3d_data, nddl0, nnzk0, impbuf_tab, cptreac, fthreac, nodreac, drapeg, th_surf, dpl0cld, vel0cld, snpc, stf, wfext_md, igrsurf)
Definition imp_solv.F:3137
subroutine re2int7(nt_imp, numimp, ns_imp, ne_imp, ind_imp, numimpl, ipari, nt_imp0)
Definition imp_solv.F:5367
subroutine spmd_mumps_ini(mumps_par, sym)
Definition imp_spmd.F:498
subroutine thickvar(elbuf_tab, iparg, thksh4_var, thksh3_var, thknod, ixc, ixtg)
subroutine init_i25_edge(nledge, ninter, npari, ipari, intbuf_tab)
subroutine init_interf_sorting_strategy(intbuf_tab, ninter)
subroutine init_nodal_state(ipari, shoot_struct, intbuf_tab, iad_elem, fr_elem, itab, nodes, geo, addcnel, cnel, ixs, ixc, ixt, ixp, ixr, ixtg, size_addcnel, size_cnel, numelsg, numelqg, numelcg, numeltrg, numelpg, numelrg, numeltgg, ixs10)
subroutine init_trim(ninter)
Definition init_trim.F:31
subroutine inixfem(elbuf_tab, xfem_tab, iparg, ixc, ixtg, ngrouc, igrouc, elcutc, iadc_crk, iel_crk, inod_crk, addcne_crk, x, knod2elc, nodedge, crknodiad, iad_edge, fr_edge, fr_nbedge, nodlevxf, crkedge, xedge4n, xedge3n)
Definition inixfem.F:45
subroutine int18_alloc(number_inter18, inter18_list, multi_fvm, ipari, xcell_remote, nspmd)
Definition int18_alloc.F:34
subroutine int18_law151_omp_accumulation(multi_fvm)
subroutine int18_law151_update(itask, multi_fvm, igrbric, ipari, ixs, igroups, iparg, elbuf_tab, force_int, x, v, ms, kinet, x_append, v_append, mass_append, kinet_append)
subroutine intal1(output, ipari, x, v, a, iskew, skew, lcod, wa, ms, itab, fsav, intbuf_tab, fcont, fncont, h3d_data)
Definition intal1.F:40
subroutine inter_nodal_areas(ixs, ixc, ixtg, fasolfr, x, iad_elem, fr_elem, weight, ixq, segquadfr, ixs10, intarean)
subroutine inter_struct_init(inter_struct, sort_comm)
subroutine intfop1(output, ipari, x, a, icodt, fsav, wa, v, ms, dt2t, neltst, ityptst, itab, stifn, npc, tf, fskyi, isky, vr, fcont, in, igrsurf, bufsf, fncont, ftcont, icontact, rcontact, num_imp, ns_imp, ne_imp, nt_imp, sensor_tab, intbuf_tab, h3d_data, nsensor)
Definition intfop1.F:49
subroutine intfop2(output, timers, ipari, x, a, igroups, ale_connectivity, icodt, fsav, v, ms, dt2t, neltst, ityptst, itab, stifn, tf, fskyi, isky, vr, fcont, secfcum, jtask, niskyfi, kinet, newfront, nstrf, icontact, viscn, xcell, num_imp, ns_imp, ne_imp, ind_imp, nt_imp, fr_i18, igrbric, eminx, ixs, ixs16, ixs20, fncont, ftcont, iad_elem, fr_elem, rcontact, acontact, pcontact, temp, fthe, ftheskyi, iparg, nsensor, pm, intstamp, weight, niskyfie, irlen20, islen20, irlen20t, islen20t, irlen20e, islen20e, mskyi_sms, iskyi_sms, nodnx_sms, int18add, fcontg, fncontg, ftcontg, nodglob, ms0, npc, wa, sensor_tab, qfricint, ncont, indexcont, tagcont, inod_pxfem, ms_ply, wagap, elbuf_tab, condn, condnskyi, nv46, sfbsav6, fbsav6, nodadt_therm, theaccfact, isensint, nisubmax, nb25_candt, nb25_impct, nb25_dst1, nb25_dst2, ixig3d, kxig3d, wige, knot, igeo, multi_fvm, h3d_data, pskids, t2main_sms, forneqs, knotlocpc, knotlocel, apinch, stifpinch, t2fac_sms, tagncont, kloadpinter, loadpinter, loadp_hyd_inter, dgaploadint, s_loadpinter, interfaces, xcell_remote)
Definition intfop2.F:85
subroutine intfop8(output, ipari, x, a, icodt, fsav, wa, v, ms, dt2t, neltst, ityptst, itab, stifn, npc, tf, fskyi, isky, vr, fcont, in, bufsf, fncont, nsensor, ftcont, icontact, rcontact, num_imp, ns_imp, ne_imp, nt_imp, sensor_tab, intbuf_tab, h3d_data, pskids, tagncont, kloadpinter, loadpinter, loadp_hyd_inter)
Definition intfop8.F:47
subroutine intstamp_ass(intstamp, ms, in, a, ar, stifn, stifr, weight, wfext)
subroutine intstamp_dt(intstamp, ipari, neltst, ityptst, dt2t, nodnx_sms, diag_sms, ms, v, stifn, stifr)
Definition intstamp_dt.F:34
subroutine intstamp_init(intstamp, icodr)
subroutine intstamp_move(intstamp, npc, tf, skew, nodnx_sms, v, vr, ms, x, d, npby, rby)
subroutine intti1(nodes, ipari, x, v, a, vr, ar, wa, ms, in, weight, stifn, stifr, khie, itab, fr_i2m, iad_i2m, addcni2, procni2, iadi2, i2msch, dmast, adm, skew, i2size, fr_nbcci2, adi, igeo, bufgeo, fsav, npf, tf, fncont, iad_elem, fr_elem, nodnx_sms, dmint2, pdama2, nb_fri2m, fr_loci2m, dt2t, neltst, ityptst, intbuf_tab, temp, mcp, fthe, condn, glob_therm, h3d_data, t2fac_sms, fncontp, ftcontp)
Definition intti1.F:58
subroutine intti2(ipari, x, v, a, vr, ar, khie, ms, in, weight, wa, skew, intbuf_tab)
Definition intti2.F:37
subroutine inttri(output, timers, ipari, x, w, errors, v, ms, in, iad_elem, fr_elem, vr, isendto, irecvfrom, newfront, itask, wag, dt2t, itab, neltst, ityptst, weight, intlist, nbintc, kinet, dretri, islen7, irlen7, islen11, irlen11, temp, igrbric, igrsh3n, eminx, ixs, ixs16, ixs20, islen17, irlen17, irlen7t, islen7t, num_imp, ind_imp, intstamp, thknod, irlen20, islen20, irlen20t, islen20t, irlen20e, islen20e, renum, nsnfiold, xslv, xmsr, vslv, vmsr, size_t, nodnx_sms, dxancg, ikine, diag_sms, count_remslv, count_remslve, ale_connectivity, ixtg, sensors, delta_pmax_gap, intbuf_tab, delta_pmax_gap_node, iad_frnor, fr_nor, nb25_candt, nb25_impct, nb25_dst1, nb25_dst2, intlist25, iad_fredg, fr_edg, main_proc, nativ_sms, i_opt_stok, multi_fvm, iparg, elbuf_tab, h3d_data, t2main_sms, lskyi_sms_new, forneqs, int7itied, idel7nok_sav, maxdgap, t2fac_sms, icodt, iskew, fskyn25, addcsrect, procnor, inter_struct, sort_comm, renum_siz, nodnx_sms_siz, temp_siz, interfaces, glob_therm, component)
Definition inttri.F:135
subroutine joint_block_stiffness(itab, ms, in, stifn, stifr, weight, ixr, ipart, x, ipartr, igeo, geo, npby, iparg, elbuf_tab, dmas, diner)
subroutine joint_elem_timestep(ms, in, stifn, stifr, ixr, ipart, ipartr, igeo, geo, npby, iparg, elbuf_tab, dt2t, neltst, ityptst, nrbody, itab)
subroutine kine_seatbelt_force(a, stifn, flag_slipring_update, flag_retractor_update)
subroutine kine_seatbelt_vel(a, v, x, xdp)
subroutine lag_multp(output, ipari, x, a, wat, v, ms, in, vr, wag, itab, ixs, ixs20, ixs16, fani, fsav, skew, ar, lambda, lagbuf, ibcslag, ixs10, gjbufi, gjbufr, ibmpc, rbmpc, npbyl, lpbyl, ibfv, vel, npf, tf, newfront, icontact, rwbuf, lprw, nprw, rbyl, d, dr, kinet, nodglob, weight, nbncl, nbikl, nbnodl, nbnodlr, fr_lagf, llagf, iad_elem, fr_elem, intbuf_tab, h3d_data, python, nodes)
Definition lag_mult.F:454
subroutine lag_mult(output, ipari, x, a, wat, v, ms, in, vr, itask, wag, itab, ixs, ixs20, ixs16, igrnod, fani, fsav, skew, ar, lambda, lagbuf, ibcslag, ixs10, gjbufi, gjbufr, ibmpc, rbmpc, npbyl, lpbyl, ibfv, vel, npf, tf, newfront, icontact, rwbuf, lprw, nprw, rbyl, d, dr, kinet, nsensor, sensor_tab, intbuf_tab, h3d_data, igrbric, python, nodes)
Definition lag_mult.F:73
subroutine load_pressure(iloadp, loadp, lloadp, npc, tf, a, v, x, skew, sensor_tab, iadc, fsky, fext, tagncont, nsensor, loadp_hyd_inter, h3d_data, python, npresload, loadp_tagdel, th_surf, pblast, wfext)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine manctr(output, sensors, h3d_data)
Definition manctr.F:39
subroutine merge(x, itab, itabm1, cmerge, imerge, imerge2, iadmerge2, nmerge_tot)
Definition merge.F:36
subroutine modsti(nodft, nodlt, stifn, viscn, ms)
Definition modsti.F:29
subroutine monvol0(monvol, volmon, x, a, npc, tf, v, normal, fsav, nsensor, sensor_tab, igrsurf, fr_mv, iadmv, sicontact, sporo, fsky, icontact, poro, iparg, elbuf_tab, geo, igeo, pm, ipm, ipart, ipartc, iparttg, igroupc, igrouptg, fext, flag, h3d_data, t_monvol, frontier_global_mv, output, python)
Definition monvol0.F:61
subroutine movfra1(xframe, iframe, x, v, a, ar)
Definition movfram.F:31
subroutine movfra_imp(xframe, iframe, x, v, a, vr, ar, d)
Definition movfram.F:688
subroutine movfra2(xframe, iframe, x, v, vr, d)
Definition movfram.F:371
subroutine multi_deallocate(multi_fvm)
subroutine multi_velocity_backup(itask, multi_fvm, n2d, numels, numelq, numeltg)
subroutine mvoludt(monvol, volmon)
Definition mvoludt.F:29
type(ale_) ale
Definition ale_mod.F:253
integer, dimension(:), allocatable ifoam_cont
Definition aleflow_mod.F:40
integer, dimension(:), allocatable ifoam
Definition aleflow_mod.F:40
type(alefvm_buffer_), target alefvm_buffer
Definition alefvm_mod.F:120
type(alefvm_param_), target alefvm_param
Definition alefvm_mod.F:121
type(alemuscl_param_) alemuscl_param
type(alemuscl_buffer_) alemuscl_buffer
integer restart_file
Definition check_mod.F:52
subroutine spmd_flush_accel(ncycle, ispmd, nspmd, numnod, numnodg, numnodm, a, itab, weight, nodglob)
integer ncycle_debug
Engine Cycle number.
Definition debug_mod.F:51
integer, dimension(:), pointer fr_stsh
Definition dtdc_mod.F:42
integer, dimension(:), pointer iad_stsh
Definition dtdc_mod.F:42
integer, dimension(:), pointer iad_rtsh
Definition dtdc_mod.F:43
integer ntshegg
Definition dtdc_mod.F:39
integer, dimension(:), pointer ienunl
Definition dtdc_mod.F:40
integer, dimension(:), pointer fr_rtsh
Definition dtdc_mod.F:43
real(kind=8) tstop_user
Definition dynlib_mod.F:80
integer, parameter id_engine_user_initialize
Definition dynlib_mod.F:86
type(dyn_lib_type), dimension(:), allocatable dlib_struct
Definition dynlib_mod.F:72
real(kind=8) tt_user
Definition dynlib_mod.F:81
integer ncycle_user
Definition dynlib_mod.F:79
integer nspmd_user
Definition dynlib_mod.F:76
integer ispmd_user
Definition dynlib_mod.F:75
integer mstop_user
Definition dynlib_mod.F:78
integer ntask_user
Definition dynlib_mod.F:77
integer, parameter id_engine_user_check
Definition dynlib_mod.F:84
integer, dimension(:), pointer iad_cndm1
Definition ecdn_mod.F:48
integer, dimension(:), pointer fr_nbcccnd1
Definition ecdn_mod.F:57
integer, dimension(:), pointer iad_cnds
Definition ecdn_mod.F:50
integer, dimension(:), allocatable imap2nd
Definition ecdn_mod.F:64
integer, dimension(:), pointer iadcnd
Definition ecdn_mod.F:49
integer, dimension(:), pointer fr_cndm
Definition ecdn_mod.F:47
integer, dimension(:), pointer fr_cndm1
Definition ecdn_mod.F:48
integer, dimension(:), pointer itagnd
Definition ecdn_mod.F:54
integer, dimension(:), pointer procncnd
Definition ecdn_mod.F:49
integer, dimension(:), pointer icnds10
Definition ecdn_mod.F:42
integer, dimension(:), pointer fr_cnds
Definition ecdn_mod.F:50
integer, dimension(:), pointer addcncnd
Definition ecdn_mod.F:49
integer, dimension(:), pointer iad_cndm
Definition ecdn_mod.F:47
integer nkend
Definition ecdn_mod.F:63
integer, dimension(:), pointer fr_nbcccnd
Definition ecdn_mod.F:57
integer nfvbag
Definition fvbag_mod.F:127
integer ninter22
number of /INTER/TYPE22
type(edge_entity), dimension(:,:), allocatable, target edge_list
type(brick_entity), dimension(:,:), allocatable, target brick_list
integer, dimension(:), allocatable imergel
type(list_secnd), dimension(:,:), allocatable old_secndlist
integer, dimension(:,:), allocatable list_b_old
integer, dimension(:), allocatable n_unlinked_l
integer, dimension(:,:,:), allocatable unlinked_cells_l
integer, dimension(:), allocatable nbold
integer nme17
type(intstamp_data), dimension(:), allocatable intstamp
integer, dimension(:), allocatable indexcont
integer, dimension(:), allocatable tagcont
integer, dimension(:), allocatable mds_matid
subroutine mpi_min_real_end(val, tab, stab, my_struct)
subroutine mpi_min_real_begin(val, tab, stab, my_struct)
type(ply_data), dimension(:), allocatable ply
Definition plyxfem_mod.F:92
type(ply_data), dimension(:), allocatable plysky
Definition plyxfem_mod.F:92
type(ply_data), allocatable plyskyi
Definition plyxfem_mod.F:93
integer, dimension(:), allocatable nllnk
Definition rad2r.F:53
integer, dimension(:), allocatable nbdof_nl
Definition rad2r.F:53
integer, dimension(:), allocatable socket
Definition rad2r.F:53
integer, dimension(:), allocatable iadd_nl
Definition rad2r.F:53
integer, dimension(:), allocatable lsh3act
Definition remesh_mod.F:62
integer, dimension(:), allocatable msh3sky
Definition remesh_mod.F:56
integer, dimension(:), allocatable lsh4upl
Definition remesh_mod.F:71
integer, dimension(:), allocatable ilevnod
Definition remesh_mod.F:76
integer, dimension(:), allocatable lsh4kin
Definition remesh_mod.F:62
integer, dimension(:), allocatable lsh3upl
Definition remesh_mod.F:71
integer, dimension(:), allocatable lsh3kin
Definition remesh_mod.F:62
integer, dimension(:), allocatable psh4kin
Definition remesh_mod.F:62
integer, dimension(:), allocatable psh3kin
Definition remesh_mod.F:62
integer, dimension(:), allocatable psh4act
Definition remesh_mod.F:62
integer, dimension(:), allocatable psh3upl
Definition remesh_mod.F:71
integer, dimension(:), allocatable psh4upl
Definition remesh_mod.F:71
integer nsh3old
Definition remesh_mod.F:66
integer nsh4old
Definition remesh_mod.F:66
integer, dimension(:), allocatable msh4sky
Definition remesh_mod.F:56
integer nsh3act
Definition remesh_mod.F:66
integer nsh4act
Definition remesh_mod.F:66
integer, dimension(:), allocatable lsh4act
Definition remesh_mod.F:62
integer, dimension(:), allocatable psh3act
Definition remesh_mod.F:62
integer, dimension(:), allocatable ipiv_k
Definition resol_mod.F:31
type(retractor_struct), dimension(:), allocatable retractor
type(slipring_struct), dimension(:), allocatable slipring
integer, dimension(:), allocatable tagslv_rby_sms
Definition sms_mod.F:35
integer, dimension(:), allocatable indx2_sms
Definition sms_mod.F:39
integer, dimension(:), allocatable tagprt_sms
Definition sms_mod.F:35
integer, dimension(:), allocatable, target tagnod_sms
Definition sms_mod.F:41
integer, dimension(:), allocatable, target nodxi_sms
Definition sms_mod.F:41
integer, dimension(:), allocatable tagmsr_rby_sms
Definition sms_mod.F:35
integer, dimension(:), allocatable nativ_sms
Definition sms_mod.F:35
integer, dimension(:), allocatable tagslv_i21_sms
Definition sms_mod.F:43
integer, dimension(:), allocatable tagrel_sms
Definition sms_mod.F:35
integer, dimension(:), allocatable kad_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable lad_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable jsm_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable indx1_sms
Definition sms_mod.F:39
integer, dimension(:), allocatable jadc_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable jadi_sms
Definition sms_mod.F:47
integer, dimension(:), allocatable jdii_sms
Definition sms_mod.F:47
integer, dimension(:), allocatable jadt_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable tagmsr_i21_sms
Definition sms_mod.F:43
integer, dimension(:), allocatable jad_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable kdi_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable jadtg_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable pk_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable iad_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable jadp_sms
Definition sms_mod.F:38
integer, dimension(:,:), allocatable iskyi_sms
Definition sms_mod.F:58
integer, dimension(:), allocatable nrwl_sms
Definition sms_mod.F:35
integer, dimension(:), allocatable idi_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable jadi21_sms
Definition sms_mod.F:43
integer, dimension(:), allocatable jads10_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable, target nodii_sms
Definition sms_mod.F:41
integer, dimension(:), allocatable jads_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable jdi_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable jadr_sms
Definition sms_mod.F:38
integer, dimension(:), allocatable tag_lnk_sms
Definition sms_mod.F:35
OPTION /TH/SURF outputs of Pressure and Area needed Tabs.
Definition th_surf_mod.F:61
integer, parameter th_surf_num_channel
number of /TH/SURF channels : AREA, VELOCITY, MASSFLOW, P A, MASS
integer, dimension(:), allocatable igrth
integer, dimension(:), allocatable grth
integer, dimension(:), allocatable nodreac
Definition threac_mod.F:40
type(time_type) global_comp_time
Definition time_mod.F:56
type(xfem_sky_), dimension(:), allocatable crksky
integer, dimension(:,:), allocatable xedge4n
integer, dimension(:), allocatable indx_crk
type(xfem_edge_), dimension(:), allocatable crkedge
integer, dimension(:,:), allocatable xedge3n
subroutine newskw_init(iskwp, numskw_l, nskwp, numskw_l_send, iskwp_l_send, recvcount)
Definition newskw.F:379
subroutine newskw(skew, iskwn, x, iskwp_l, nskwp, numskw_l, numskw_l_send, iskwp_l_send, recvcount, iskwp)
Definition newskw.F:32
subroutine nlocal_acc(nloc_dmg, nodft, nodlt)
Definition nlocal_acc.F:31
subroutine nlocal_dtnoda(nodft, nodlt, nloc_dmg, dtnod_nlocal, dt2t)
subroutine nlocal_incr(nloc_dmg, nodft, nodlt)
Definition nlocal_incr.F:31
subroutine nlocal_vel(nloc_dmg, nodft, nodlt)
Definition nlocal_vel.F:31
subroutine pblast_load_computation(output, pblast, iloadp, fac, a, v, x, iadc, fsky, lloadp, fext, noda_surf, noda_pext, itab, h3d_data, th_surf, wfext)
Definition pblast.F:42
subroutine pfluid(iloadp, rload, npc, tf, a, v, x, xframe, ms, nsensor, sensor_tab, wfexc, wfext, iadc, fsky, fskyv, lloadp, fext, h3d_data, th_surf, python)
Definition pfluid.F:45
subroutine free_pinch(pinch_data)
subroutine ply_accele(inod, ms_layer, zi_layer, ms, nodft, nodlt, nplymax, nplyxfe, nddim, msz2)
Definition ply_accele.F:34
subroutine ply_bcs(nodft, nodlt, icodt, iskew, skew, inod, ms_ply, ibc_ply)
Definition ply_bcs.F:32
subroutine ply_velocity(nodft, nodlt, nplymax, inod, nddim)
subroutine poro(geo, nodpor, ms, x, v, w, af, am, skew, weight, nporgeo)
Definition poro.F:40
subroutine pressure_cyl(loads, table, nsensor, sensor_tab, iframe, dt1, x, v, acc, fext, h3d_data, cptreac, fthreac, nodreac, fsky, wfext)
subroutine cp_dm(numgeo, geo, igeo, dmcp, iflag)
Definition produt_v.F:2563
subroutine r2r_exchange(iexlnk, igrnod, dx, v, vr, a, ar, ms, in, stx, str, r2r_on, dd_r2r, weight, iad_elem, fr_elem, rby, xdp, x, dd_r2r_elem, sdd_r2r_elem, off_sph_r2r, numsph_glo_r2r, nloc_dmg)
subroutine r2r_getdata(iexlnk, igrnod, x, v, vr, a, ar, ms, in, xdp, dx, r2r_on, dd_r2r, weight, iad_elem, fr_elem, stifn, stifr, dd_r2r_elem, sdd_r2r_elem, nloc_dmg, wfext, wfext_md)
Definition r2r_getdata.F:47
subroutine r2r_sendkine(iexlnk, igrnod, ms, in)
void get_shmbuf_c(int *val1, int *val2)
Definition rad2rad_c.c:2787
void get_fbuf_c(my_real_c *fbuf, int *len)
Definition rad2rad_c.c:995
void r2r_unlock_threads_c(int *nthr)
Definition rad2rad_c.c:369
void r2r_block_c()
Definition rad2rad_c.c:406
void r2r_sem_c()
Definition rad2rad_c.c:430
void get_fbufdp_c(double *fbuf, int *len)
Definition rad2rad_c.c:1013
void send_fbuf_c(my_real_c *fbuf, int *len)
Definition rad2rad_c.c:958
void close_sock_c(int *sd)
Definition rad2rad_c.c:2571
void send_ibuf_c(int *ibuf, int *len)
Definition rad2rad_c.c:940
void get_ibuf_c(int *ibuf, int *len)
Definition rad2rad_c.c:1031
void send_fbufdp_c(double *fbuf, int *len)
Definition rad2rad_c.c:977
subroutine radiation(ibcr, fradia, npc, tf, x, temp, nsensor, sensor_tab, fthe, iad, fthesky, python, glob_therm)
Definition radiation.F:38
subroutine rbagdt(geo, igeo)
Definition rbagdt.F:29
subroutine rbe2t1(irbe2, lrbe2, x, a, ar, ms, in, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2, stifn, stifr, r2size)
Definition rbe2f.F:38
subroutine rbe2v(irbe2, lrbe2, x, a, ar, v, vr, skew)
Definition rbe2v.F:34
subroutine rbe3t1(rbe3, nodes, skew, dmast, adm, dinert, adi, h3d_data, dt1, tt, impl_s)
Definition rbe3f.F:49
subroutine prerbe3p0(rbe3)
Definition rbe3f.F:2283
subroutine rbe3v(rbe3, nodes, skew)
Definition rbe3v.F:35
subroutine rbycor(rby, x, v, vr, skew, fsav, lpby, npby, iskew, itab, weight, a, ar, ms, in, kind, irbkin_l, nrbykin_l, weight_md, ms_2d)
Definition rbycor.F:36
subroutine rbyfor(timers, rby, a, ar, x, vr, fsav, in, stifn, stifr, fani, lpby, npby, weight, ms, v, igrsurf, bufsf, icodr, iskew, skew, kind, iad_rby, fr_rby6, rby6, irbkin_l, nrbykin_l, nativ_sms, dimfb, fbsav6, stabsen, tabsensor, nodreac, fthreac, cptreac, dampr, sdamp, damp, ndamp_vrel, id_damp_vrel, igrnod, tagslv_rby, iparit, wfext, ndamp_vrel_rbyg, size_rby6_c, rby6_c, nhier_rby)
Definition rbyfor.F:53
subroutine rbysens(iparg, ipari, ms, in, ixs, ixq, ixc, ixt, ixp, ixr, skew, itab, itabm1, iskwn, npby, itag, lpby, fsky, nsensor, rby, x, v, vr, ixtg, igrv, ibgr, sensor_tab, a, ar, fsav, stifn, stifr, fani, weight, dmast, dinert, bufsf, fr_rby2, partsav, ipart, elbuf_tab, icfield, lcfield, tagslv_rby)
Definition rbyonf.F:235
subroutine rbyvit(rby, x, v, vr, skew, fsav, lpby, npby, iskew, itab, weight, a, ar, ms, in, kind, irbkin_l, nrbykin_l, nodreac, fthreac, freac, nhier_rby)
Definition rbyvit.F:38
subroutine reaction_forces_th(nodft, nodlt, a, ar, ms, in, fthreac, iflag, nodreac)
subroutine reaction_forces_check_for_requested_output(npby, h3d_data, comptreac)
Definition reactions.F:31
subroutine reaction_forces_1(nodft, nodlt, a, ar, freac)
Definition reactions.F:123
subroutine reaction_forces_3(nodft, nodlt, a, ar, ms, in, freac)
Definition reactions.F:275
subroutine reaction_forces_2(nodft, nodlt, a, ar, ms, in, freac, iflag)
Definition reactions.F:199
subroutine reallocate_i_skyline(new_count, call_id, intheat, nodadt_therm, pon)
subroutine renum_siz(ipari, rnum_siz)
Definition renum_siz.F:29
subroutine smp_init(itsk, nodftsk, nodltsk, numntsk, ndtsk, ipmtsk, partftsk, partltsk, nwaftsk, igmtsk, greftsk, greltsk)
subroutine resol_init(itask, fr_nbcc, isendto, ircvfrom, iad_elem, fr_elem, itabm1, ipari, iparg, itab, ixs10, ixs20, i13a, i13b, i13c, i13d, i13e, i13f, i13g, i13h, i13i, i15a, i15b, i15c, i15d, i15e, i15f, i15g, i15h, i15i, i87a, i87b, i87c, i87d, i87e, i87f, i87g, nfia, nfea, nfoa, ndma, ndma2, nodft, nodlt, ndtask, numnthread, ixs16, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, pon, ikine, a, ar, v, vr, x, d, ms, in, stifn, stifr, dmas, diner, wa, uwa, pm, geo, partsav, parts0, monvol, i87h, i87i, i87j, i87k, i15j, kxx, secbuf, secfcum, nstrf, igrnod, iexlnk, xframe, ixtg1, ib, viscn, dd_r2r, elbuf, ipart, madprt, madsh4, madsh3, madsol, madnod, madfail, igeo, intlist, nbintc, procne, niskyfi, weight, isizxv, ilenxv, addcni2, procni2, iad_i2m, fr_i2m, fr_nbcci2, i2size, fr_mad, lwibem, lwrbem, fxbfp, fxbefw, fxbedp, fxbgrp, fxbgrw, ndin, islen7, irlen7, islen11, irlen11, lwiflow, lwrflow, iflow, addcnel, cnel, addtmpl, ipartl, npartl, nfnca, nftca, i15ath, i35ath, ipm, sh4tree, ipadmesh, msc, inc, sh3tree, mstg, intg, ptg, fthe, fthesky, ftheskyi, nme17, islen17, irlen17, irlen7t, islen7t, lindidel, lbufidel, sh4trim, sh3trim, mscnd, incnd, irlen20, islen20, irlen20t, islen20t, nbint20, irlen20e, islen20e, niskyfie, mcp, ms0, inod_pxfem, iel_pxfem, iadc_pxfem, adsky_pxfem, icodt, icodr, ibfv, admsms, nodreac, igrouc, ngrouc, igrounc, ngrounc, fr_rby, fr_rby6, npby, nom_sect, mcpc, mcptg, grth, igrth, nelem, lag_sec, nprw, diag_sms, dmelc, dmeltg, ngrth, nft2, dmels, dmeltr, dmelp, dmelrt, res_sms, i87l, irbe2, lrbe2, nmrbe2, iad_rbe2, fr_rbe2, fr_rbe2m, r2size, lpby, procne_pxfem, isendp_pxfem, irecvp_pxfem, iadsdp_pxfem, iadrcp_pxfem, fr_nbcc1, rby, int18kine, xdp, i87m, inod_crkxfem, iel_crkxfem, iadc_crkxfem, adsky_crkxfem, procne_crkxfem, isendp_crkxfem, irecvp_crkxfem, iadsdp_crkxfem, iadrcp_crkxfem, int24use, ndama2, igroupc, igrouptg, igroups, igroupflg, dmint2, irbkin_l, nrbykin_l, kindrby, elbuf_tab, sensors, dd_r2r_elem, sdd_r2r_elem, kinet, weight_md, dmsph, ioldsect, lbufidel24, intbuf_tab, numsph_glo_r2r, flg_sphinout_r2r, i15k, condn, condnsky, kxfenod2elc, elcutc, nodedge, iad_edge, crknodiad, fr_edge, fr_nbedge, nodlevxf, crkedge, xfem_tab, isensint, nisubmax, intlist25, int24e2euse, tabmp_l, i87n, tab_mat, h3d_data, tagtrimc, tagtrimtg, igrbric, igrquad, igrsh4n, igrsh3n, igrtruss, igrbeam, igrspring, igrpart, forneqs, int7itied, fxvel_fgeo, failwave, nloc_dmg, pinch_data, slloadp, tagslv_rby, nfnca2, nftca2, in0, sort_comm, stack, output, thke, sfr_elem, sh_offset_tab, need_comm_int25_solid_erosion, comm_int25_solid_erosion, iskwn, iframe, loads, glob_therm, pblast, rbe3, nhier_rby)
Definition resol_init.F:171
subroutine rbe2cor(irbe2, lrbe2, x, v, vr, skew, iskew, itab, weight, a, ar, ms, in, weight_md)
Definition rgbcor.F:476
subroutine rgwal0(x, a, v, rwbuf, lprw, nprw, ms, fsav, fr_wall, fopt, rwsav, weight, frwl6, nodnx_sms, weight_md, dimfb, fbsav6, stabsen, tabsensor, wfext, wfext_md)
Definition rgwal0.F:40
subroutine rgwalf(a, rwbuf, nprw, ms)
Definition rgwal0.F:380
subroutine rivet1(ms, in, a, ar, x, ixrt, rivet, geo, v, vr, itask)
Definition rivet1.F:31
subroutine rlink11(ms, in, a, ar, v, vr, nnlink, lllink, skew, fr_ll, weight, frl6, x, xframe)
Definition rlink10.F:144
subroutine rlink10(ms, in, a, ar, v, vr, nlink, llink, skew, fr_rl, weight, frl6)
Definition rlink10.F:36
subroutine rmatacce(rbym, arbym, arrbym, vrbym, vrrbym, irbym, lnrbym, x, a, ar, v, vr, kind)
Definition rmatacce.F:31
subroutine rmatforp(timers, a, ar, x, vr, in, stifn, stifr, irby, lnrby, rby, icodrby, weight, ms, v, fr_rbm, iad_rby, arby, vrby, arrby, vrrby, kind, rbym6)
Definition rmatforp.F:41
subroutine s10cndf2(icnds10, weight, iad_cndm, fr_cndm, fr_nbcccnd, addcncnd, procncnd, a, iadcnd, fskycnd, itagnd, nodftsk, nodltsk, eftsk, eltsk, itsk, itab, stifn, stifnd)
Definition s10cndf.F:227
subroutine s10cndf1(icnds10, weight, iad_cndm, fr_cndm, fr_nbcccnd, addcncnd, procncnd, a, iadcnd, fskycnd, itagnd, nodftsk, nodltsk, eftsk, eltsk, itsk, itab, stifn, stifnd)
Definition s10cndf.F:38
subroutine s10cndfnd(icnds10, weight, iad_cnds, fr_cnds, itab, nodftsk, nodltsk, eftsk, eltsk, itsk, stifn, stifnd)
Definition s10cndf.F:768
subroutine s10stfe_poff(icnds10, weight, iad_cnds, fr_cnds, itab, nodftsk, nodltsk, eftsk, eltsk, itsk, stifn, stifnd)
Definition s10cndf.F:1770
subroutine cnd_dmasi2(icnds10, nkend, imap2nd, masi2nd0, ms, weight)
Definition s10cndf.F:1096
subroutine s10cndv(icnds10, vnd, v)
Definition s10cndv.F:29
subroutine s10getvdm(icnds10, v, vnd, vmd)
Definition s10cndv.F:257
subroutine s10cndi2a(icnds10, itagnd, a)
Definition s10cndv.F:160
subroutine s10cndi2a1(icnds10, itagnd, a)
Definition s10cndv.F:211
subroutine s4lagsfem(iparg, ixs, x, v, elbuf_tab, sfem_nodvar, s_sfem_nodvar, iad_elem, fr_elem, ixs10, xdp, sxdp, numnod, sfr_elem, nspmd, numels, numels8, numels10, nparg, ngroup, iresp)
Definition s4lagsfem.F:43
subroutine section_fio(nstrf, v, vr, a, ar, secbuf, ms, in, weight, iad_cut, fr_cut, wfext)
Definition section_fio.F:34
subroutine section_io(nstrf, d, dr, v, vr, fsav, secfcum, a, ar, secbuf, ms, in, x, fani, weight, xsec, iad_elem, fr_elem, rg_cut, iad_cut, fr_cut, weight_md, ioldsect, stabsen, dimfb, tabs, fbsav6, wfext)
Definition section_io.F:46
subroutine spmd_i21fthecom(ipari, fthe, intbuf_tab, sensor_tab, niskyfi, ftheskyi, isky, fskyi, condnskyi, nsensor, nodadt_therm)
Definition send_cand.F:2192
subroutine spmd_i21tempcom(ipari, temp, intbuf_tab, nsensor, sensor_tab)
Definition send_cand.F:1991
subroutine sensor_base(sensors, nsensor, time, timestep, xsens, ipari, partsav2, gauge, fsav, x, v, a, acc, nprw, subset, igrsurf, igrnod, python)
Definition sensor_base.F:57
subroutine sensor_dist_surf0(nsensor, sensor_tab, x, igrsurf, comm_sens16)
subroutine sensor_ener_sav(nsensor, sensor_tab, partsav, partsav2)
subroutine sensor_init(subset, iparg, ngrouc, ipartc, iparttg, iparts, ipartq, ipartt, ipartp, ipartr, sensors, time, timestep, iout, python, ntask)
Definition sensor_init.F:43
subroutine sensor_logical(sensors)
subroutine sensor_spmd(sensor_tab, ipari, nprw, isensp, nsensp, xsens, x, accelm, iaccp, naccp, gauge, igaup, ngaup, partsav2, nsensor, comm_sens14, sensor_struct)
Definition sensor_spmd.F:43
subroutine sensor_temp0(nsensor, sensor_tab, igrnod, temp, weight, comm_sens17, sensor_struct)
subroutine sms_build_mat_2(itask, nodft, nodlt, ixc, iparg, ixs, ixt, ixp, ixr, ixtg, nodnx_sms, ms, ms0, indx1_sms, indx2_sms, jad_sms, jdi_sms, lt_sms, kad_sms, kdi_sms, ltk_sms, pk_sms, nodii_sms, jadc_sms, jads_sms, jadt_sms, jadp_sms, jadr_sms, jadtg_sms, diag_sms, tagprt_sms, tagrel_sms, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, ipartur, iparttg, ipartx, iad_elem, fr_elem, npby, lpby, tagslv_rby_sms, lad_sms, jsm_sms, dmeltg, dmelc, mskyi_sms, iskyi_sms, jadi_sms, jdii_sms, lti_sms, nodxi_sms, dmels, dmeltr, dmelp, dmelrt, igeo, fr_sms, fr_rms, ev, ipari, intbuf_tab, kinet, tagslv_i21_sms, jadi21_sms, intstamp, ixs10, jads10_sms, ilink, rlink, nnlink, lnlink, tag_lnk_sms, ljoint, iadcj, fr_cj, itab, weight, dmint2, elbuf_tab, tagmsr_rby_sms, nprw, lprw, fr_wall, nrwl_sms, rby, x, a, ar, in, v, vr, irbe2, lrbe2, irbe3, lrbe3, iad_rbe3m, fr_rbe3m, nativ_sms, t2main_sms, t2fac_sms, mskyi_fi_sms, list_sms, list_rms, sz_mw6, mw6)
subroutine sms_encin_2(timers, itask, nodft, nodlt, nodxi_sms, ms, jad_sms, jdi_sms, lt_sms, indx1_sms, diag_sms, iad_elem, fr_elem, weight, v, a, wv, wmv, wdg, xmom_sms, icodt, icodr, iskew, skew, ibfv, vel, npc, tf, x, d, sensors, iframe, xframe, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, npby, tagslv_rby_sms, intstamp, cptreac, nodreac, fthreac, ar, vr, dr, in, rby, irbe2, lrbe2, iad_rbe2, fr_rbe2m, nmrbe2, r2size, irbe3, lrbe3, frbe3, iad_rbe3m, fr_rbe3m, fr_rbe3mp, rrbe3, rrbe3_pon, iad_rby, fr_rby6, rby6, lpby, tagmsr_rby_sms, r3size, nodii_sms, indx2_sms, ibcscyc, lbcscyc, output, mskyi_fi_sms, list_sms, list_rms, vfi, sz_mw6, mw6)
Definition sms_encin_2.F:66
subroutine sms_mass_scale_2(timers, python, itask, nodft, nodlt, nodii_sms, indx2_sms, nodxi_sms, ms, ms0, a, icodt, icodr, iskew, skew, jad_sms, jdi_sms, lt_sms, x_sms, p_sms, z_sms, y_sms, prec_sms, indx1_sms, diag_sms, iad_elem, fr_elem, weight, npby, lpby, tagslv_rby_sms, lad_sms, kad_sms, jrb_sms, ibfv, vel, npc, tf, v, x, d, sensor_tab, nsensor, iframe, xframe, jadi_sms, jdii_sms, lti_sms, fr_sms, fr_rms, iskyi_sms, mskyi_sms, res_sms, igrv, agrv, lgrav, ilink, rlink, fr_rl, frl6, nnlink, lnlink, fr_ll, fnl6, tag_lnk_sms, itab, fsav, ljoint, iadcj, fr_cj, am, vr, in, frl, fnl, nprw, lprw, rwbuf, rwsav, fopt, fr_wall, nrwl_sms, intstamp, kinet, ixc, ixtg, sh4tree, sh3tree, cptreac, nodreac, fthreac, frwl6, dim, tagslv_rby, dampr, damp, igrnod, dr, rby, tagmsr_rby_sms, jsm_sms, irbe2, lrbe2, iad_rbe2, fr_rbe2m, nmrbe2, r2size, irbe3, lrbe3, frbe3, iad_rbe3m, fr_rbe3m, fr_rbe3mp, rrbe3, rrbe3_pon, prec_sms3, diag_sms3, iad_rby, fr_rby6, rby6, r3size, betate, ibcscyc, lbcscyc, mskyi_fi_sms, list_sms, list_rms, cjwork, frea, irwl_work, vfi, sz_mw6, mw6, wfext, ams_work)
subroutine soltospha(itask, v, a, ms, pm, ipart, ixs, iparts, kxsp, ipartsp, irst, spbuf, partsav, sol2sph, iparg, ngrounc, igrounc, elbuf_tab, igeo)
Definition soltospha.F:44
subroutine sortie_error(v, nodglob, weight, itab, ms, ms0, param, partsav, ipart, pm, igeo)
subroutine sortie_main(timers, pm, d, v, ale_connect, w, elbuf, iparg, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, wa, itab, x, geo, ms, a, partsav, icut, xcut, lpby, npby, nstrf, rwbuf, nprw, ebcs_tab, tani, inoise, bufnois, rby, neflsw, nnflsw, crflsw, flsw, lout, nodes, fsav, skew, elbuf_tab, cluster, vr, in, weight, fcluster, mcluster, dd_iad, dmas, accelm, gauge, ipari, eani, ipart, mat_param, igrnod, subset, nom_opt, ar, igrsurf, bufsf, idata, rdata, kxx, ixx, bufmat, bufgeo, kxsp, ixsp, nod2sp, spbuf, dr, fsavd, ixri, rivet, iskwn, iframe, xframe, ixs10, ixs20, ixs16, ndma, monvol, volmon, ipm, igeo, nodglob, iad_elem, fr_elem, fr_rby2, iad_rby2, fr_wall, fr_sec, fxbipm, fxbrpm, ndin, fxbdep, fxbvit, fxbacc, iflow, rflow, ipartl, npartl, iaccp, naccp, fasolfr, iparth, fr_mv, ipart_state, sh4tree, sh3tree, temp, thke, err_thk_sh4, err_thk_sh3, inod_pxfem, fthreac, nodreac, gresav, diag_sms, sh4trim, sh3trim, xmom_sms, irbe2, irbe3, lrbe2, lrbe3, fr_rbe2, fr_rbe3m, iad_rbe2, dxancg, iel_pxfem, zi_ply, vgaz, fcontg, fncontg, ftcontg, fanreac, inod_crk, iel_crk, elcutc, iadc_crk, res_sms, sensors, qfricint, igaup, ngaup, weight_md, ncont, indexcont, nodglobxfe, nodedge, xfem_tab, nv46, rthbuf, kxig3d, ixig3d, knot, wige, nercvois, nesdvois, lercvois, lesdvois, crkedge, stack, isphio, vsphio, icode, indx_crk, xedge4n, xedge3n, sph2sol, stifn, stifr, drape_sh4n, drape_sh3n, ms_2d, multi_fvm, segquadfr, h3d_data, iskew, pskids, iskwp, knotlocpc, knotlocel, pinch_data, tag_skins6, irunn_bis, tf, npc, dynain_data, fcont_max, mds_matid, ibcl, iloadp, lloadp, loadp, tagncont, loadp_hyd_inter, forc, drapeg, user_windows, output, dt, fsavsurf, table, loads, sfani, iparit, x_c, sz_npcont2, npcont2, glob_therm, pblast, wfext, mass0_start)
subroutine spgauge_f(p, ff, p0, p1, p2, n)
Definition spgauge.F:259
subroutine sphprep(timers, pm, geo, x, v, ms, elbuf_tab, wa, pld, bufmat, partsav, iparg, npc, ipart, itab, bufgeo, xframe, kxsp, ixsp, nod2sp, ipartsp, spbuf, ispcond, ispsym, xspsym, vspsym, wasph, lprtsph, lonfsph, wsp2sort, isphio, vsphio, igrsurf, d, sphveln, itask, xdp, ibufssg_io, lgauge, gauge, ngrounc, igrounc, sol2sph, sph2sol, ixs, iads, addcne, fskyd, dmsph, waspact, icontact, off_sph_r2r, wsmcomp, irunn_bis, sph_iord1, sph_work, wfext)
Definition sphprep.F:77
subroutine sphres44b(kxsp, ixsp, nod2sp, iparg, spbuf)
Definition sphres44b.F:30
subroutine splissv(x, v, ms, a, spbuf, wa, itab, kxsp, ixsp, nod2sp, d, ispsym, xspsym, vspsym, bufmat, bufgeo, npc, pld, pm, geo, ispcond, xframe, waspsym, ipartsp, partsav, wacomp, wsmcomp, waspact, ipart, itask, sph2sol, sol2sph, irst, ixs, iparg, ngrounc, igrounc, elbuf_tab, iad_elem, fr_elem, igeo, sol2sph_typ, sph_work)
Definition splissv.F:53
subroutine split_asspar4(addcne, numnod, nthreads, first, last, sadsky)
subroutine spmd_allglob_isum9(v, len)
subroutine spmd_chkw(iwiout, iout)
Definition spmd_chkw.F:38
subroutine spmd_collect(a, itab, weight, nodglob, sizp0)
subroutine spmd_collect_multi_fvm(ixs, multi_fvm, flag)
subroutine spmd_collect_nlocal(a, sizea, numnod_local, posi, nloc_dmg, sizp0, nodglob, itab)
subroutine spmd_collectm(nodnx_sms, itab, weight, nodglob, sizp0)
subroutine spmd_collectt(temp, itab, weight, nodglob, sizp0)
subroutine spmd_exch2_a_pon(interfaces, iad_elem, fr_elem, addcne, procne, fr_nbcc, size, lenr, lens, fsky, fskyv, fskym, ifsubm, sizi, leni, iadsdp, iadrcp, isendp, irecvp, ffsky, procne_pxfem, fr_nbcc1, iadsdp_pxfem, iadrcp_pxfem, isendp_pxfem, irecvp_pxfem, lenr1, lens1, iadsdp_crk, iadrcp_crk, isendp_crk, irecvp_crk, fskyd, crknodiad, crksky, forneqsky, nfacnit, lenc, fcont, h3d_data, fncont, ftcont, glob_therm)
subroutine spmd_exch_a(a, adp, ar, stifn, stifr, ms, iad_elem, fr_elem, msnf, ifsubm, size, lenr, fthe, mcp, dmsph, condn, ms_2d, mcp_off, forneqs, nfacnit, lenc, fcont, h3d_data, fncont, ftcont, glob_therm)
Definition spmd_exch_a.F:40
subroutine spmd_exch_a_ams_poff(a, ar, stifn, stifr, ms, iad_elem, fr_elem, msnf, ifsubm, size, lenr, fthe, mcp, fr_loc, nb_fr, ms_2d, mcp_off, forneqs, nfacnit, lenc, fcont, h3d_data, fncont, ftcont, glob_therm)
subroutine spmd_exch_da20(intbuf_tab, ipari, iad_elem, fr_elem, len20, nbint20, lenr, intlist, nbintc)
subroutine spmd_exch_deleted_surf_edge(iad_elem, nodes, shoot_struct, intbuf_tab, newfront, ipari, geo, ixs, ixc, ixt, ixp, ixr, ixtg, ixs10, addcnel, cnel, tag_node, tag_elem)
subroutine spmd_exch_vmax(iad_stsh, fr_stsh, iad_rtsh, fr_rtsh, v_max)
subroutine spmd_exch_fa(iad_stsh, fr_stsh, iad_rtsh, fr_rtsh, a)
subroutine spmd_exch_efric(output, ipari, intlist, nbintc, islen7, irlen7, irlen7t, islen7t, irlen20, islen20, irlen20t, islen20t, intbuf_tab, h3d_data)
subroutine spmd_exch_i24(ipari, intbuf_tab, itab, iad_elem, fr_elem, intlist, nbintc, iad_i24, fr_i24, sfr_i24, i24maxnsne, flag, int24e2euse)
subroutine spmd_exch_i25(ipari, intbuf_tab, itab, iad_elem, fr_elem, intlist, nbintc, iad_i25, fr_i25, sfr_i25, flag)
subroutine spmd_exch_icodt(icodt, iad_elem, fr_elem, size, lenr)
subroutine spmd_exch_icont(icontact, iad_elem, fr_elem, size, lenr)
subroutine spmd_exch_inter_18(ninter, nspmd, number_inter18, sxcell, inter18_list, xcell, multi_fvm, xcell_remote, intbuf_tab, ale_connectivity)
subroutine spmd_exch_press(output, ipari, intlist, nbintc, fncont, ftcont, islen7, irlen7, irlen7t, islen7t, irlen20, islen20, irlen20t, islen20t, intbuf_tab, n_cse_fric_inter, n_scal_cse_efric)
subroutine spmd_exch_sub_pon(nloc_dmg)
subroutine spmd_exch_sub_poff(nloc_dmg)
subroutine spmd_exch_tagncont(tagncont, iad_elem, fr_elem, lenr)
subroutine spmd_exch_thknod(thknod, iad_elem, fr_elem, size, lenr)
subroutine spmd_exch_wave(fr_wave, iad_elem, fr_elem, size, lenr)
subroutine spmd_exsum_fb6(dim6, dim_exch, fb6)
subroutine spmd_fvb_switch(monvol)
subroutine spmd_glob_min5(dt2, itypts, nelts, icodt, imsch, tstop, iwiout, mstop, ismsch, int24use, nbintc, intlist, ipari, intbuf_tab)
subroutine spmd_glob_minv(t_monvol, dt2, itypts, nelts, volmon, fr_mv)
subroutine spmd_i25front_init(itab, main_proc, intbuf_tab, ipari)
subroutine spmd_i7fcom_poff(output, ipari, a, stifn, viscn, intlist, nbintc, icodt, secfcum, nstrf, icontact, fcont, islen7, irlen7, islen11, irlen11, islen17, irlen17, igrbric, ixs, ixs16, fthe, irlen7t, islen7t, irlen20, islen20, irlen20t, islen20t, irlen20e, islen20e, condn, iflag, intbuf_tab, h3d_data, multi_fvm, tagncont, kloadpinter, loadpinter, loadp_hyd_inter, fsav, interfaces, nodadt_therm)
subroutine spmd_i7fcom_pon(output, ipari, intlist, nbintc, niskyfi, icodt, secfcum, nstrf, icontact, fcont, igrbric, ixs, ixs16, niskyfie, nbint20, iflag, intbuf_tab, sfskyi, sisky, h3d_data, multi_fvm, tagncont, kloadpinter, loadpinter, loadp_hyd_inter, fsav, interfaces, glob_therm)
subroutine upgrade_rem_2ry(ipari, count_remslv, count_remslve, nodadt_therm)
subroutine spmd_i7xvcom2(ipari, x, v, ms, imsch, i2msch, dt2prev, intlist, nbintc, islen7, irlen7, islen11, irlen11, islen17, irlen17, ixs, ixs16, nsensor, igrbric, temp, iflag, irlen7t, islen7t, irlen20, islen20, irlen20t, islen20t, irlen20e, islen20e, ikine, diag_sms, sensor_tab, intbuf_tab, int24e2euse, forneqs, multi_fvm, interfaces, ish_offset)
subroutine spmd_ibcast(tabi, tabr, n1, n2, from, add)
Definition spmd_ibcast.F:57
subroutine spmd_int18_law151_pon(ipari, islen7, irlen7, iflag, intbuf_tab, multi_fvm)
subroutine spmd_exch_r2r_sphoff(off_sph_r2r, iad_elem, fr_elem, dd_r2r, dd_r2r_elem, lenr)
Definition spmd_r2r.F:2125
subroutine spmd_exch_r2r_sph(a, iad_elem, fr_elem, dd_r2r, dd_r2r_elem, lenr)
Definition spmd_r2r.F:1997
subroutine spmd_rbcast(tabi, tabr, n1, n2, from, add)
Definition spmd_rbcast.F:62
subroutine spmd_sd_xv(output, x, d, v, vr, ms, in, iad_elem, fr_elem, weight, imsch, w, isizxv, ilenxv, xdp)
Definition spmd_sd_xv.F:42
subroutine spmd_exch_sec(nstrf, x, ms, weight, xsec, fr_sec, iad_sec, lsend1, lrecv1, lsend2, lrecv2, weight_md)
subroutine spmd_sort_sms(iskyi_sms, mskyi_sms, fr_sms)
Definition spmd_sms.F:33
subroutine spmd_nlist_sms(fr_sms, fr_rms)
Definition spmd_sms.F:184
subroutine ams_prepare_poff_assembly(iad_elem, fr_elem, nb_fr, fr_loc, iad_i2m, fr_i2m, nb_fri2m, fr_loc_i2m)
Definition spmd_sms.F:116
subroutine spmd_glob_isum9(v, len)
Definition spmd_th.F:520
subroutine spmd_wiout(iout, iwiout)
Definition spmd_wiout.F:40
subroutine spmd_max_xfe_i(int)
Definition spmd_xfem.F:1130
subroutine spmd_exch_crkvel(iad_elem, fr_elem, inod_crk, itab, x, v, vr)
Definition spmd_xfem.F:35
subroutine sponfv(x, v, a, d, ms, spbuf, itab, kxsp, ixsp, nod2sp, npc, pld, isphio, vsphio, ipart, ipartsp, waspact, wa, vnormal, sph_work, wfext)
Definition sponfv.F:41
subroutine spwfvis(spbuf, ipartsp, partsav, iparg, elbuf_tab, kxsp, waspact)
Definition spwfvis.F:35
subroutine srfvit(x, v, vr, a, ar, npby, rby, ms, in, igrsurf, bufsf)
Definition srfvit.F:35
subroutine fvmesh0(t_monvol, xyzini, ixs, ixc, ixtg, pm, ipm, igrsurf, xyzref, nb_node)
Definition fvmesh0.F:55
subroutine fvdim(t_monvol)
Definition fvmesh.F:3458
subroutine sms_ini_jad_1(ixc, iparg, ixs, ixt, ixp, ixr, ixtg, ixs10, nodnx_sms, jadc_sms, jads_sms, jads10_sms, jadt_sms, jadp_sms, jadr_sms, jadtg_sms, tagprt_sms, kad_sms, kdi_sms, pk_sms, tagrel_sms, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, iparttg, ipartx, npby, lpby, kinet, tagslv_rby_sms, ipari, intbuf_tab, lad_sms, ipart, igeo, nativ_sms, iad_sms, idi_sms, jad_sms, jdi_sms, t2main_sms)
Definition sms_init.F:1182
subroutine sms_ini_jad_2(ixc, iparg, ixs, ixt, ixp, ixr, ixtg, ixs10, nodnx_sms, jadc_sms, jads_sms, jads10_sms, jadt_sms, jadp_sms, jadr_sms, jadtg_sms, tagprt_sms, kad_sms, kdi_sms, tagrel_sms, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, iparttg, ipartx, npby, lpby, kinet, tagslv_rby_sms, ipari, intbuf_tab, lad_sms, nprw, lprw, tagmsr_rby_sms, intstamp, ipart, igeo, nativ_sms, irbe2, lrbe2, iad_sms, idi_sms, jad_sms, jdi_sms, t2main_sms)
Definition sms_init.F:1572
subroutine sms_ini_kdi(ixc, iparg, ixs, ixt, ixp, ixr, ixtg, ixs10, nodnx_sms, kad_sms, kdi_sms, jadc_sms, jads_sms, jads10_sms, jadt_sms, jadp_sms, jadr_sms, jadtg_sms, tagprt_sms, iad_sms, tagrel_sms, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, iparttg, ipartx, npby, lpby, kinet, tagslv_rby_sms, ipari, intbuf_tab, lad_sms, ipart, igeo, nativ_sms)
Definition sms_init.F:777
subroutine sms_ini_kad(ixs, ixq, ixc, ixt, ixp, ixr, ixtg, ixtg1, ixs10, ixs16, ixs20, iparg, ms, ms0, nodnx_sms, icodt, icodr, kinet, kad_sms, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, iparttg, ipartx, tagprt_sms, tagrel_sms, itab, irbe2, irbe3, lrbe2, lrbe3, nprw, lprw, ipart, igeo, nativ_sms)
Definition sms_init.F:393
subroutine sms_ini_jad_3(ixc, iparg, ixs, ixt, ixp, ixr, ixtg, ixs10, nodnx_sms, jadc_sms, jads_sms, jads10_sms, jadt_sms, jadp_sms, jadr_sms, jadtg_sms, tagprt_sms, kad_sms, kdi_sms, tagrel_sms, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, iparttg, ipartx, npby, lpby, kinet, tagslv_rby_sms, ipari, intbuf_tab, lad_sms, jsm_sms, intstamp, ipart, igeo, tagmsr_rby_sms, nativ_sms, iad_sms, idi_sms, jad_sms, jdi_sms, t2main_sms)
Definition sms_init.F:1877
subroutine deallocate_joint()
subroutine int18_law151_init(s_append_array, ninter, npari, numnod, numels, ngrbric, multi_fvm, igrbric, ipari, ixs, x, v, ms, kinet, x_append, v_append, mass_append, kinet_append)
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)
Definition message.F:895
subroutine arret(nn)
Definition arret.F:86
subroutine my_barrier
Definition machine.F:31
subroutine startime(event, itask)
Definition timer.F:93
subroutine elapstime(etime)
Definition timer.F:366
subroutine printime(itask, got_timer, startdate, starttime, enddate, endtime)
Definition timer.F:184
subroutine stoptime(event, itask)
Definition timer.F:135
subroutine trace_out(nsub)
Definition trace_back.F:324
subroutine trace_in(nsub, itab, atab)
Definition trace_back.F:98
subroutine static(v, vr, a, ar, ms, in, igrnod, weight_md, wfext)
Definition static.F:33
subroutine ener_w0
Definition static.F:313
subroutine stop_sensor(sensors, h3d_data, dynain_data, output)
Definition stop_sensor.F:38
subroutine tempur(temp, mcp, fthe, nodft, nodlt, weight, mcp_off, heat_stored)
Definition tempur.F:29
subroutine th_time_output(ithout, sensors, output)
subroutine thbcs(nodft, nodlast, icodt, icodr, iskew, skew, a, ar, ms, in, fthreac, nodreac, cptreac)
Definition thbcs.F:33
subroutine thbcs_imp(nodft, nodlast, a, ar, fthreac, nodreac, cptreac, fthdtm, dt3)
Definition thbcs_imp.F:33
subroutine thermbilan(glob_therm)
Definition thermbilan.F:35
subroutine printime_interf(intbuf_tab, ipari, intlist, nbintc, treshold)
subroutine timfun(python, fv, np, tf)
Definition timfun.F:33
subroutine upd_tmax(elbuf_tab, iparg, geo, pm, ixs, ixs10, ixs16, ixs20, ixq, ixc, ixtg, ixt, ixp, ixr, x, d, v, iad_elem, fr_elem, weight, ipm, igeo, stack, itask)
Definition upd_outmax.F:57
subroutine update_failwave(failwave)
subroutine update_slipring(ixr, ixc, iparg, elbuf_tab, flag_slipring_update, flag_retractor_update, x, npby)
subroutine upenr_crk(addcne_crk, inod_crk, nodft, nodlt, nodenr, enrtag, nodlevxf, procne_crk)
Definition upenr_crk.F:32
subroutine upxfem1(xfem_tab, iparg, ixc, ngrouc, igrouc, ixtg, iadc_crk, iel_crk, inod_crk, elcutc, nodedge, enrtag, crkedge, xedge4n, xedge3n)
Definition upxfem1.F:43
subroutine upxfem2(iparg, ixc, ngrouc, igrouc, iadc_crk, iel_crk, elcutc, ixtg, enrtag, inod_crk, iad_elem, fr_elem, iad_edge, fr_edge, fr_nbedge, crkedge)
Definition upxfem2.F:44
subroutine upxfem_tagxp(xfem_tab, iparg, ixc, ngrouc, igrouc, ixtg, iadc_crk, iel_crk, inod_crk, elcutc, nodedge, enrtag, crkedge, xedge4n, xedge3n, itab)
subroutine user_windows_routine(ispmd, nspmd, userl_avail, user_windows, rad_inputname, len_rad_inputname, numnod, ncycle, itab, tt, dt1, wfext, d, x, v, vr, ms, in, stifn, stifr, a, ar, dt2)
subroutine velocity(a, ar, v, vr, fzero, itab, nale)
Definition velocity.F:29
subroutine velocitypinch(apinch, vpinch, nodft, nodlt)
subroutine wrrestp(elements, nodes, af, iaf, ich, addcne, elbuf_tab, xfem_tab, intbuf_tab, multi_fvm, mat_elem, h3d_data, intbuf_fric_tab, subset, pinch_data, ale_connectivity, t_monvol, sensors, ebcs_tab, dynain_data, user_windows, output, interfaces, loads, python, names_and_titles, eigipm, eigibuf, eigrpm, neipm, leibuf, nerpm, iflow, rflow, liflow, lrflow, impbuf_tab, impl_s, impl_s0, mcp, temp, forneqs, unitab, stack, ndrape, drape_sh3n, drape_sh4n, drapeg, restsize, skews, glob_therm, pblast, rbe3, rwall)
Definition wrrestp.F:169
subroutine spmd_crk_adv(iad_elem, fr_elem, inod_crk, enrtag)
Definition xfemfsky.F:718
subroutine xfeoff(xfem_tab, iparg, ixc, ngrouc, igrouc, iel_crk, elcutc, ixtg, iadc_crk, iad_elem, iad_edge, fr_edge, fr_nbedge, fr_elem, nlay, inod_crk, crkedge, xedge4n, xedge3n)
Definition xfeoff.F:45
subroutine zeror(a, n)
Definition zero.F:39