OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
r2r_group.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| r2r_group ../starter/source/coupling/rad2rad/r2r_group.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| ale_check_lag ../starter/source/ale/ale_check_lag.f
29!|| ancmsg ../starter/source/output/message/message.F
30!|| chk_flg_fsi ../starter/source/coupling/rad2rad/routines_r2r.F
31!|| new_link ../starter/source/coupling/rad2rad/new_link.F
32!|| printcenter ../starter/source/starter/radioss_title.F
33!|| r2r_input ../starter/source/coupling/rad2rad/r2r_input.F
34!|| r2r_prelec ../starter/source/coupling/rad2rad/r2r_prelec.F
35!|| tagnod_r2r ../starter/source/coupling/rad2rad/tagnod_r2r.F
36!|| tagnod_r2r_nl ../starter/source/coupling/rad2rad/tagnod_r2r_nl.F
37!|| tagnod_r2r_s ../starter/source/coupling/rad2rad/tagnod_r2r.F
38!|| tagnods_r2r ../starter/source/coupling/rad2rad/tagnod_r2r.F
39!||--- uses -----------------------------------------------------
40!|| detonators_mod ../starter/share/modules1/detonators_mod.F
41!|| group_mod ../starter/share/modules1/group_mod.F
42!|| inivol_def_mod ../starter/share/modules1/inivol_mod.F
43!|| message_mod ../starter/share/message_module/message_mod.F
44!|| r2r_mod ../starter/share/modules1/r2r_mod.F
45!|| reader_old_mod ../starter/share/modules1/reader_old_mod.F90
46!|| restmod ../starter/share/modules1/restart_mod.F
47!|| submodel_mod ../starter/share/modules1/submodel_mod.F
48!||====================================================================
49 SUBROUTINE r2r_group(
50 1 NGROU,INNOD,FLAG,IPARTS,
51 2 IPARTQ,IPARTC,IPARTT,IPARTP,IPARTR,IPARTG,
52 3 IPARTSP,IXS10,IXS20,IXS16,KK,BUF_NOD,IXR_KJ,
53 4 INOM_OPT,IPART_L,IAD,NALE_R2R,FLG_R2R_ERR ,
54 5 PM_STACK ,IWORKSH ,IGRBRIC2,IGRQUAD2 ,IGRSH4N2,
55 6 IGRSH3N2 ,IGRTRUSS2,IGRBEAM2,IGRSPRING2,IGRNOD2 ,
56 7 IGRSURF2 ,IGRSLIN2,LSUBMODEL,ALE_EULER,IGEO_,
57 8 NLOC_DMG ,DETONATORS,NSENSOR,SEATBELT_SHELL_TO_SPRING,
58 9 NB_SEATBELT_SHELLS,MAT_PARAM)
59C-----------------------------------------------
60C M o d u l e s
61C-----------------------------------------------
62 USE my_alloc_mod
63 USE restmod
64 USE r2r_mod
65 USE message_mod
66 USE groupdef_mod
67 USE group_mod
69 USE submodel_mod
70 USE inivol_def_mod , ONLY : num_inivol
73 USE matparam_def_mod
75 USE reader_old_mod , ONLY : kinter, nslash
76C-----------------------------------------------
77C I m p l i c i t T y p e s
78C-----------------------------------------------
79#include "implicit_f.inc"
80C-----------------------------------------------
81C A r g u m e n t s
82C-----------------------------------------------
83 INTEGER,INTENT(IN) :: IGEO_(NPROPGI,NUMGEO)
84C-----------------------------------------------
85C C o m m o n B l o c k s
86C-----------------------------------------------
87#include "com01_c.inc"
88#include "com04_c.inc"
89#include "units_c.inc"
90#include "scr17_c.inc"
91#include "param_c.inc"
92#include "sphcom.inc"
93#include "r2r_c.inc"
94C-----------------------------------------------
95C D u m m y A r g u m e n t s
96C-----------------------------------------------
97 TYPE(submodel_data) LSUBMODEL(NSUBMOD)
98 INTEGER ,INTENT(IN) :: NSENSOR
99 INTEGER NGROU,
100 . BUF_NOD(*),INNOD,FLAG,KK,
101 . IPARTS(*),IXS10(6,*),IXS20(12,*),
102 . IXS16(8,*),IPARTQ(*),IPARTSP(*),
103 . IPARTC(*),IPARTT(*),IPARTP(*),IPARTR(*),
104 . IPARTG(*),IXR_KJ(*),INOM_OPT(*),IPART_L(*),IAD,
105 . NALE_R2R(*),FLG_R2R_ERR,IWORKSH(*),ALE_EULER
106 INTEGER ,INTENT(IN) :: NB_SEATBELT_SHELLS
107 INTEGER ,INTENT(IN) :: SEATBELT_SHELL_TO_SPRING(NUMELC,2)
108 my_real :: pm_stack(*)
109 TYPE (NLOCAL_STR_) ,INTENT(IN) :: NLOC_DMG
110 TYPE (DETONATORS_STRUCT_),TARGET,INTENT(IN) :: DETONATORS
111 TYPE (MATPARAM_STRUCT_) ,DIMENSION(NUMMAT) ,INTENT(IN) :: MAT_PARAM
112C-----------------------------------------------
113! TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD2
114 TYPE (GROUP_) , DIMENSION(NGROU) :: IGRNOD2
115 TYPE (GROUP_) , DIMENSION(NGRBRIC) :: IGRBRIC2
116 TYPE (GROUP_) , DIMENSION(NGRQUAD) :: IGRQUAD2
117 TYPE (GROUP_) , DIMENSION(NGRSHEL) :: IGRSH4N2
118 TYPE (GROUP_) , DIMENSION(NGRSH3N) :: IGRSH3N2
119 TYPE (GROUP_) , DIMENSION(NGRTRUS) :: IGRTRUSS2
120 TYPE (GROUP_) , DIMENSION(NGRBEAM) :: IGRBEAM2
121 TYPE (GROUP_) , DIMENSION(NGRSPRI) :: IGRSPRING2
122 TYPE (SURF_) , DIMENSION(NSURF) :: IGRSURF2
123 TYPE (SURF_) , DIMENSION(NSLIN) :: IGRSLIN2
124C-----------------------------------------------
125C L o c a l V a r i a b l e s
126C-----------------------------------------------
127 INTEGER STAT,I,J,IGR,IGRS,N,NUM,K,ADD,COMPT,IGS,IPID_L
128 INTEGER ID_TEMP(NB_PART_SUB),NSUBDOM_LOC,P,TMP_PART(NPART)
129 INTEGER, DIMENSION(:,:), ALLOCATABLE :: IGROUP_TEMP2
130 INTEGER N_LNK_C,NI,GRM,GRS,MAIN,IGU,NUL,IAD_TMP,COMPT_T2
131 INTEGER MODIF,NINTER_PREC,FAC,IO_ERR,NUM_KJ,NSPCONDN,NSPHION,NN
132 INTEGER MEMTR(NUMNOD),FLG_SPH,COUNT,NEW_NSLASH_INT,NEW_HM_NINTER,NEW_NINTSUB,NEW_NINIVOL
133 CHARACTER(LEN=NCHARTITLE) :: TITR
134 CHARACTER NAME*100
135 INTEGER NGRNOD2,NGRBRIC2,NGRQUAD2,NGRSHEL2,NGRSH3N2,NGRTRUS2,NGRBEAM2,NGRSPRI2,LENGRN,ITITLE(LTITR)
136 CHARACTER(LEN=NCHARTITLE) :: NEW_TITLE(NGROU+10*NSUBDOM)
137 INTEGER, DIMENSION(:), ALLOCATABLE :: IGROUP_TEMP2_BUF,TAG_NLOCAL
138 INTEGER :: LEN_TMP_NAME
139 CHARACTER(len=4096) :: TMP_NAME
140C-----------------------------------------------
141 n_lnk_c = 0
142 tmp_part(:)= 0
143 modif = 1
144 innod = 0
145C----- Storage of IGRN in IGRN Temp------------------------------C
146 lengrn = 9
147 IF (flag == 1) THEN
148 ALLOCATE(igroup_temp2(10,ngrou+10*nsubdom))
149 igroup_temp2 = 0
150 count = 0
151 DO i=1,ngrou
152 count = count + igrnod2(i)%NENTITY
153 ENDDO
154 IF (count > 0) THEN
155 ALLOCATE(igroup_temp2_buf(count))
156 igroup_temp2_buf(:) = 0
157 ENDIF
158 iad_tmp = 1
159!
160 DO i=1,ngrou
161 igroup_temp2(1,i) = igrnod2(i)%ID ! IGRN(1,*)
162 igroup_temp2(2,i) = igrnod2(i)%NENTITY ! IGRN(2,*)
163 igroup_temp2(3,i) = igrnod2(i)%GRTYPE ! IGRN(4,*)
164 igroup_temp2(4,i) = igrnod2(i)%SORTED ! IGRN(5,*)
165 igroup_temp2(5,i) = igrnod2(i)%GRPGRP ! IGRN(6,*)
166 igroup_temp2(6,i) = igrnod2(i)%LEVEL ! IGRN(7,*)
167 new_title(i) = igrnod2(i)%TITLE ! IGRN(11,*)
168 igroup_temp2(8,i) = igrnod2(i)%R2R_ALL ! IGRN(8,*)
169 igroup_temp2(9,i) = igrnod2(i)%R2R_SHARE ! IGRN(9,*)
170 igroup_temp2(7,i) = iad_tmp
171 DO j=1,igrnod2(i)%NENTITY
172 igroup_temp2_buf(iad_tmp) = igrnod2(i)%ENTITY(j)
173 iad_tmp = iad_tmp + 1
174 ENDDO
175 ENDDO
176 ENDIF
177C--------------------------------------------------------------------C
178C------Creation of groups of nodes of multidomains interface---------C
179C--------------------------------------------------------------------C
180!
181 ngrnod2 = ngrnod
182 ngrbric2 = ngrbric
183 ngrquad2 = ngrquad
184 ngrshel2 = ngrshel
185 ngrsh3n2 = ngrsh3n
186 ngrtrus2 = ngrtrus
187 ngrbeam2 = ngrbeam
188 ngrspri2 = ngrspri
189!
190 IF (flag == 1) THEN
191 num = 1
192 igs = ngrou+1
193 DO i=1,ngrou
194 IF (num<=igrnod2(i)%ID) num=igrnod2(i)%ID+1
195 END DO
196 ENDIF
197C--------------------------------------------------------------------C
198 IF (ipid==0) nsubdom = 1
199 nsubdom_loc = nsubdom
200 DO p=1,nsubdom_loc
201C-----2 pass : pass 1 - contact nodes / passe 2 - connection nodes
202 n = p
203 IF (ipid==0) n = iddom
204 compt = 0
205C--------------------------------------------------------------------C
206C---------------FLAG = 0 --> tag of nodes and counting --------------C
207C--------------------------------------------------------------------C
208 IF (flag==0) THEN
209C---------------Reset of out file + printout of new heading ---------C
210 ipid_l = ipid
211 IF (flg_swale==1) THEN
212 IF (ipid==0) ipid_l = 1
213 IF (ipid/=0) ipid_l = 0
214 ENDIF
215 IF (ipid_l==0) THEN
216 CLOSE(unit=iout, status='DELETE',iostat=io_err)
217
218 tmp_name=outfile_name(1:outfile_name_len)//r2r_filnam(1:len_trim(r2r_filnam))
219 len_tmp_name = outfile_name_len+len_trim(r2r_filnam)
220 OPEN(unit=iout,file=tmp_name(1:len_tmp_name),
221 . access='SEQUENTIAL',
222 . form='FORMATTED',status='UNKNOWN')
223 name = "SUBDOMAIN "//r2r_filnam(1:(len_trim(r2r_filnam)-9))
224 WRITE (iout,'(A)') ''
225 CALL printcenter(" ",0,iout,1)
226 CALL printcenter(" ",0,iout,2)
227 CALL printcenter(name,len_trim(name),iout,2)
228 CALL printcenter(" ",0,iout,2)
229 CALL printcenter(" ",0,iout,1)
230 ENDIF
231C---------------Allocation of arrays for tag of elements--------------C
232 ALLOCATE(tag_elc(numelc+npart),tag_els(numels+npart))
233 ALLOCATE(tag_elg(numeltg+npart),tag_elsp(numsph+npart))
234 ALLOCATE(tag_elr(numelr+npart),tag_elt(numelt+npart))
235 ALLOCATE(tag_elp(numelp+npart),tag_elq(numelq+npart))
236 tag_els(:)=0
237 tag_elc(:)=0
238 tag_elg(:)=0
239 tag_elt(:)=0
240 tag_elp(:)=0
241 tag_elr(:)=0
242 tag_elq(:)=0
243 tag_elsp(:)=0
244C---------------Tag of Parts-------------------------------------------C
245 DO k=1,npart
246 tagno(k)=0
247C ---> TAGNO(K)=-1 => PART K belongs to an already treated subdomain---
248 IF(tmp_part(k)==-1) tagno(k)=-1
249 ENDDO
250 add = isubdom(3,n)
251 DO k=1,npart
252 DO i=1,isubdom(1,n)
253 IF(k == isubdom_part(i+add))THEN
254 tagno(k)=1
255 tmp_part(k)=-1
256 ENDIF
257 ENDDO
258 END DO
259C----------------Full domain - inversion of part selection-------------C
260 IF (iddom == 0) THEN
261 DO k=1,npart
262 IF(tagno(k)==1) THEN
263 tagno(k)=0
264 ELSEIF(tagno(k)==0) THEN
265 tagno(k)=1
266 ENDIF
267 ENDDO
268 ENDIF
269C---------------> TAG OF PARTS : ----------------------------------
270C---------------> TAGNO(K) = -1 -> Part of already treated subdmain
271C---------------> TAGNO(K) = 0 -> Internal part of subdomain
272C---------------> TAGNO(K) = 1 -> External part of subdomain
273
274C---------------> TAG OF NODES : ----------------------------------
275C---------------> TAGNO(K) = -1 -> external node
276C---------------> TAGNO(K) = 0 -> free node (not attached to any domain)
277C---------------> TAGNO(K) = 1 -> internal node
278C---------------> TAGNO(K) = 2 -> coupled node
279C---------------> TAGNO(K) = 3 -> coupled node -> main node of RBODY
280C---------------> TAGNO(K) = 4 -> coupled node for contacts
281C---------------Detag of already treated nodes----------------------C
282 CALL tagnods_r2r(ixs,ixs10,ixs20,ixs16,iparts,tagno,-1,n)
283 CALL tagnod_r2r(ixq,nixq,2,5,numelq,ipartq,tagno,npart,-1,n)
284 CALL tagnod_r2r(ixc,nixc,2,5,numelc,ipartc,tagno,npart,-1,n)
285 CALL tagnod_r2r(ixt,nixt,2,3,numelt,ipartt,tagno,npart,-1,n)
286 CALL tagnod_r2r(ixp,nixp,2,4,numelp,ipartp,tagno,npart,-1,n)
287 CALL tagnod_r2r(ixr,nixr,2,3,numelr,ipartr,tagno,npart,-1,n)
288 CALL tagnod_r2r(ixtg,nixtg,2,4,numeltg,ipartg,tagno,npart,-1,n)
289 CALL tagnod_r2r(kxsp,nisp,3,3,numsph,ipartsp,tagno,npart,-1,n)
290C---------------Tag of nodes -> pass 1------------------------------C
291 CALL tagnods_r2r(ixs,ixs10,ixs20,ixs16,iparts,tagno,0,n)
292 CALL tagnod_r2r(ixq,nixq,2,5,numelq,ipartq,tagno,npart,0,n)
293 CALL tagnod_r2r(ixc,nixc,2,5,numelc,ipartc,tagno,npart,0,n)
294 CALL tagnod_r2r(ixt,nixt,2,3,numelt,ipartt,tagno,npart,0,n)
295 CALL tagnod_r2r(ixp,nixp,2,3,numelp,ipartp,tagno,npart,0,n)
296 CALL tagnod_r2r(ixr,nixr,2,3,numelr,ipartr,tagno,npart,0,n)
297 CALL tagnod_r2r(ixtg,nixtg,2,4,numeltg,ipartg,tagno,npart,0,n)
298 CALL tagnod_r2r(kxsp,nisp,3,3,numsph,ipartsp,tagno,npart,0,n)
299C---------------Tag of nodes -> pass 2-------------------------------C
300 CALL tagnods_r2r(ixs,ixs10,ixs20,ixs16,iparts,tagno,1,n)
301 CALL tagnod_r2r(ixq,nixq,2,5,numelq,ipartq,tagno,npart,1,n)
302 CALL tagnod_r2r(ixc,nixc,2,5,numelc,ipartc,tagno,npart,1,n)
303 CALL tagnod_r2r(ixt,nixt,2,3,numelt,ipartt,tagno,npart,1,n)
304 CALL tagnod_r2r(ixp,nixp,2,3,numelp,ipartp,tagno,npart,1,n)
305 CALL tagnod_r2r(ixr,nixr,2,3,numelr,ipartr,tagno,npart,1,n)
306 CALL tagnod_r2r(ixtg,nixtg,2,4,numeltg,ipartg,tagno,npart,1,n)
307 CALL tagnod_r2r(kxsp,nisp,3,3,numsph,ipartsp,tagno,npart,1,n)
308C---------------Tag of 3rd nodes of beams/springs -> pass 3----------C
309 CALL tagnod_r2r(ixp,nixp,4,4,numelp,ipartp,tagno,npart,3,n)
310 CALL tagnod_r2r(ixr,nixr,4,4,numelr,ipartr,tagno,npart,3,n)
311C---------------Tag of additional nodes for kjoints-- --------------C
312 CALL tagnod_r2r(ixr_kj,5,1,3,numelr,ipartr,tagno,npart,4,n)
313C---------------Tag of specific nodes -> Skew,Frames-----------------C
314 IF (p==nsubdom_loc) CALL tagnod_r2r_s(tagno)
315C---------------Storage of initial tag of nodes----------------------C
316 DO i=1,numnod
317 tagno(npart+numnod+i) = tagno(npart+i)
318 END DO
319C--------------------------------------------------------------------C
320C////////////////////////////////////////////////////////////////////C
321C--------------------------------------------------------------------C
322 DO WHILE ((modif>0).AND.(compt<80))
323 modif = 0
324C---------------Prereading of options for tag of nodes---------------C
325 IF (p==nsubdom_loc) THEN
326 CALL r2r_prelec(iparts,
327 2 ipartc,ipartg,ipartt,ipartp,ipartr,ipartsp,compt_t2,
328 3 modif,compt,inom_opt,nspcondn,nsphion,ipart_l,memtr,
329 4 pm_stack ,iworksh ,igrnod ,igrsurf ,igrslin ,
331 6 igrbeam ,igrspring ,new_nslash_int,lsubmodel,new_hm_ninter,
332 7 new_nintsub,new_ninivol,ixs10,ixs20,ixs16,
333 8 detonators,nsensor,seatbelt_shell_to_spring,nb_seatbelt_shells)
334 ENDIF
335C---------------Tag of nodes of pretaged elements ( for TYPE2)-------C
336 IF (compt_t2>0) THEN
337 CALL tagnods_r2r(ixs,ixs10,ixs20,ixs16,tag_els,tagno,2,1)
338 CALL tagnod_r2r(ixc,nixc,2,5,numelc,tag_elc,tagno,npart,2,1)
339 CALL tagnod_r2r(ixtg,nixtg,2,4,numeltg,tag_elg,tagno,npart,2,1)
340 CALL tagnod_r2r(ixt,nixt,2,3,numelt,tag_elt,tagno,npart,2,1)
341 CALL tagnod_r2r(ixp,nixp,2,4,numelp,tag_elp,tagno,npart,2,1)
342 ENDIF
343 compt = compt+1
344 END DO ! DO WHILE
345C---------------Tag of nodes ALE/lagrange ---------------------------C
346 IF (iale>0) THEN
347 CALL ale_check_lag(nale_r2r,ixs,ixq,ixc,ixt,ixtg,pm,itab,nale_r2r,0,igeo_)
348 ENDIF
349C---------------Check of FLG_FSI ------------------------------------C
350 IF (iale+ieuler>0) THEN
351 CALL chk_flg_fsi(ixs,pm,iparts,ale_euler,igeo_)
352 ENDIF
353C---------------Error message infinite loop -------------------------C
354 IF (compt>=80) THEN
355 CALL ancmsg(msgid=972,
356 . msgtype=msgerror,
357 . anmode=aninfo)
358 END IF
359C--------------------------------------------------------------------C
360C////////////////////////////////////////////////////////////////////C
361C--------------------------------------------------------------------C
362C---------------Update of number of remaining options----------------C
363 nrbody = new_nrby
364 nrbykin = new_nrbykin
365 njoint = new_njoint
366 ninter_prec = ninter
367 hm_ninter = new_hm_ninter
368 ninter = new_hm_ninter + new_ninter - new_nintsub
369 nslash(kinter) = new_nslash_int
370 nintsub = new_nintsub
371 num_inivol = new_ninivol
372C
373 nlink = new_nlink
374 nrbe3 = new_nrbe3
375 nrbe2 = new_nrbe2
376 ngjoint = new_ngjoint
377 nummpc = new_nummpc
378 nspcond = nspcondn
379 nsphio = nsphion
380C---------------Determination of flag for coupled sph particles------C
381 flg_sph = 0
382 DO j=1,numsph
383 IF (tagno(kxsp(nisp*(j-1)+3)+npart)>1) flg_sph = 1
384 END DO
385C---------------Counting of remaining nodes--------------------------C
386 compt = 0
387 DO j=1,numnod
388 IF (tagno(j+npart)>1) innod = innod+1
389 ENDDO
390C---------------Warnings for size of interfaces ---------------------C
391 IF (innod==0) THEN
392 CALL ancmsg(msgid=839,
393 . msgtype=msgerror,
394 . anmode=aninfo,
395 . c1="CONNECTIONS FOUND",
396 . c2="FOR DOMAIN",
397 . i1=isubdom(1,p))
398 ELSE
399C-- For SPH big multidomains interfaces are alloxed -> no error message only a warning
400 IF ((flg_sph==1).OR.(flg_fsi==1)) r2r_flag_err_off = 1
401C
402 fac = (100*innod) / numnod
403 IF (((fac>20).AND.(fac<50)).OR.((r2r_flag_err_off==1).AND.(fac>50))) THEN
404 CALL ancmsg(msgid=859,
405 . msgtype=msgwarning,
406 . anmode=aninfo_blind_1,
407 . i1=innod,
408 . i2=fac)
409 ELSEIF (fac>50) THEN
410 flg_r2r_err = 1
411 CALL ancmsg(msgid=1075,
412 . msgtype=msgerror,
413 . anmode=aninfo_blind_1,
414 . i1=innod,
415 . i2=fac)
416 ENDIF
417 ENDIF
418C---------------Warnings for splitted contact interfaces ------------C
419 IF (tagint_warn(1)>0) THEN
420 CALL ancmsg(msgid=842,
421 . msgtype=msgwarning,
422 . anmode=aninfo_blind_1)
423 WRITE(iout,1301)
424 WRITE(iout,1302) (tagint_warn(1+j),j=1,tagint_warn(1))
425 ENDIF
426C--------------------------------------------------------------------C
427 ELSE
428C--------------------------------------------------------------------C
429C---------------FLAG = 1 --> Creation of groups and links------------C
430C--------------------------------------------------------------------C
431 innod = 0
432 nn = 4
433C
434C---------------Tag of nodes with nlocal dof-------------------------C
435 IF (nloc_dmg%IMOD > 0) THEN
436 nn = 5
437 CALL my_alloc(tag_nlocal,numnod)
438 tag_nlocal(1:numnod) = 0
439 CALL tagnod_r2r_nl(ixc,ixtg,ixs,ixs10,ixs20,
440 . ixs16,tag_nlocal,mat_param)
441 ENDIF
442C
443 DO k=1,nn
444 compt = 0
445 iad_tmp = iad
446C-----------Storage inside buffer------------------------------------C
447 IF (k < 5) THEN
448 DO j=1,numnod
449 IF (tagno(j+npart)==(k+n)) THEN
450 buf_nod(iad)=j
451 iad=iad+1
452 compt = compt+1
453 ENDIF
454 ENDDO
455 ELSE
456C-----------Nodes in link type 4 + nlocal dof -> additional link-----C
457C-----------Node coupled only if nl material on both sides ----------C
458 DO j=1,numnod
459 IF ((tag_nlocal(j)==1).AND.(tagno(j+npart+numnod) == n+1)) THEN
460 buf_nod(iad)=j
461 iad=iad+1
462 compt = compt+1
463 ENDIF
464 ENDDO
465 ENDIF
466C
467 innod = innod + compt
468 IF (compt>0) THEN
469C---------------Creation of new GRNOD + LINK ------------------------C
470 IF (k == 1) THEN
471 titr="MULTIDOMAINS INTERFACE TYPE CONNECTION "
472 ELSEIF (k == 2) THEN
473 titr="MULTIDOMAINS INTERFACE TYPE RBODY CONNECTION "
474 ELSEIF (k == 4) THEN
475 titr="MULTIDOMAINS INTERFACE TYPE KINEMATIC CONDITION"
476 ELSEIF (k == 5) THEN
477 titr="MULTIDOMAINS INTERFACE TYPE NON LOCAL"
478 ELSE
479 titr="MULTIDOMAINS INTERFACE TYPE CONTACT "
480 ENDIF
481!---
482 igroup_temp2(1,igs)= num
483 igroup_temp2(2,igs)= compt
484 igroup_temp2(3,igs)= iad_tmp
485 igroup_temp2(10,igs)= -1 ! temporary tag new group
486 new_title(igs) = titr
487!---
488C---------------Creation of new LINK---------------------------------C
489 CALL new_link(num,n,k)
490C---------------Incrementation of Variables for future GRNOD---------C
491 num = num+1
492 igs = igs+1
493 IF (compt>0) n_lnk_c = n_lnk_c+1
494 ENDIF
495 END DO
496 IF (innod==0) THEN
497 IF (ipid/=0) THEN
498 ENDIF
499 CALL ancmsg(msgid=839,
500 . msgtype=msgerror,
501 . anmode=aninfo,
502 . c1="CONNECTIONS FOUND",
503 . c2="FOR DOMAIN",
504 . i1=isubdom(1,p))
505 ENDIF
506c
507 IF (nloc_dmg%IMOD > 0) THEN
508 DEALLOCATE(tag_nlocal)
509 ENDIF
510 ENDIF
511 END DO
512C--------------------------------------------------------------------C
513C----- Recopy of other groups in IGROUP_TEMP-------------------------C
514C--------------------------------------------------------------------C
515C----- Transfer of Igroup_temp in IGRN-------------------------------C
516C--------------------------------------------------------------------C
517 IF (flag == 1) THEN
518 DO i=1,ngrnod
519 DEALLOCATE(igrnod(i)%ENTITY)
520 ENDDO
521 DEALLOCATE(igrnod)
522 ALLOCATE(igrnod(ngrnod+n_lnk_c))
523 ngrnod = ngrnod+n_lnk_c
524!
525 DO i=1,ngrnod
526 ALLOCATE(igrnod(i)%ENTITY(igroup_temp2(2,i)))
527 igrnod(i)%ENTITY(1:igroup_temp2(2,i)) = 0
528!
529 igrnod(i)%ID = igroup_temp2(1,i) ! IGRN(1,*)
530 igrnod(i)%NENTITY = igroup_temp2(2,i) ! IGRN(2,*)
531 igrnod(i)%GRTYPE = igroup_temp2(3,i) ! IGRN(4,*)
532 igrnod(i)%SORTED = igroup_temp2(4,i) ! IGRN(5,*)
533 igrnod(i)%GRPGRP = igroup_temp2(5,i) ! IGRN(6,*)
534 igrnod(i)%LEVEL = igroup_temp2(6,i) ! IGRN(7,*)
535 igrnod(i)%TITLE = new_title(i) ! IGRN(11,*)
536 igrnod(i)%R2R_ALL = igroup_temp2(8,i) ! IGRN(8,*)
537 igrnod(i)%R2R_SHARE = igroup_temp2(9,i) ! IGRN(9,*)
538!
539 IF (igroup_temp2(10,i) == -1) THEN
540 iad_tmp = igroup_temp2(3,i)
541 DO j=1,igroup_temp2(2,i)
542! "BUF_NOD" --> temporary array for shared boundary
543 igrnod(i)%ENTITY(j) = buf_nod(iad_tmp+j-1)
544 ENDDO
545 ELSE
546 iad_tmp = igroup_temp2(7,i)
547 DO j=1,igroup_temp2(2,i)
548 igrnod(i)%ENTITY(j) = igroup_temp2_buf(iad_tmp+j-1)
549 ENDDO
550 ENDIF
551!
552 END DO ! DO I=1,NGRNOD
553 ENDIF ! IF (FLAG == 1)
554C--------------------------------------------------------------------C
555C----- Creation of file "_0000.r2r"----------------------------------C
556C--------------------------------------------------------------------C
557 IF (flag == 1) THEN
558 IF (ipid/=0) THEN
559 WRITE(istdo,'(A)')' .. MULTIDOMAINS INPUT FILE GENERATION'
560 CALL r2r_input(iexlnk)
561 ENDIF
562 ENDIF
563C--------------------------------------------------------------------C
564C--------------------------------------------------------------------C
565C--------------------------------------------------------------------C
566 IF (flag == 1) DEALLOCATE(igroup_temp2)
567 IF (flag == 1) THEN
568 IF (ALLOCATED(igroup_temp2_buf))DEALLOCATE(igroup_temp2_buf)
569 ENDIF
570 RETURN
571C--------------------------------------------------------------------C
5721301 FORMAT( 1x,'LIST OF SPLITTED CONTACT INTERFACES : ')
5731302 FORMAT( 1x,10i9)
574
575 END SUBROUTINE r2r_group
subroutine ale_check_lag(nale, ixs, ixq, ixc, ixt, ixtg, pm, itab, nale_r2r, flag_r2r, igeo)
#define my_real
Definition cppsort.cpp:32
type(group_), dimension(:), allocatable, target igrsh4n
Definition group_mod.F:38
type(group_), dimension(:), allocatable, target igrquad
Definition group_mod.F:37
type(group_), dimension(:), allocatable, target igrbeam
Definition group_mod.F:41
type(surf_), dimension(:), allocatable, target igrsurf
Definition group_mod.F:46
type(group_), dimension(:), allocatable, target igrtruss
Definition group_mod.F:40
type(group_), dimension(:), allocatable, target igrsh3n
Definition group_mod.F:39
type(group_), dimension(:), allocatable, target igrspring
Definition group_mod.F:42
type(group_), dimension(:), allocatable, target igrbric
Definition group_mod.F:36
type(surf_), dimension(:), allocatable, target igrslin
Definition group_mod.F:47
type(group_), dimension(:), allocatable, target igrnod
Definition group_mod.F:35
integer num_inivol
Definition inivol_mod.F:85
character(len=outfile_char_len) outfile_name
integer outfile_name_len
integer, parameter nchartitle
integer, dimension(:), allocatable tag_els
Definition r2r_mod.F:133
integer, dimension(:), allocatable tag_elg
Definition r2r_mod.F:135
integer, dimension(:), allocatable tagno
Definition r2r_mod.F:132
integer, dimension(:), allocatable tag_elq
Definition r2r_mod.F:135
integer, dimension(:), allocatable tag_elc
Definition r2r_mod.F:133
integer, dimension(:), allocatable tag_elr
Definition r2r_mod.F:134
integer, dimension(:), allocatable tag_elt
Definition r2r_mod.F:134
integer, dimension(:), allocatable isubdom_part
Definition r2r_mod.F:131
integer, dimension(:), allocatable tagint_warn
Definition r2r_mod.F:137
integer, dimension(:), allocatable tag_elp
Definition r2r_mod.F:133
integer, dimension(:,:), allocatable isubdom
Definition r2r_mod.F:144
integer, dimension(:), allocatable tag_elsp
Definition r2r_mod.F:142
integer, dimension(:), allocatable, target ixs
Definition restart_mod.F:60
integer, dimension(:), allocatable ixt
Definition restart_mod.F:60
integer, dimension(:), allocatable ixr
Definition restart_mod.F:60
integer, dimension(:), allocatable iexlnk
Definition restart_mod.F:60
integer, dimension(:), allocatable, target ixtg
Definition restart_mod.F:60
integer, dimension(:), allocatable kxsp
Definition restart_mod.F:60
integer, dimension(:), allocatable itab
Definition restart_mod.F:60
integer, dimension(:), allocatable ixp
Definition restart_mod.F:60
integer, dimension(:), allocatable ixq
Definition restart_mod.F:60
integer, dimension(:), allocatable ixc
Definition restart_mod.F:60
subroutine r2r_group(ngrou, innod, flag, iparts, ipartq, ipartc, ipartt, ipartp, ipartr, ipartg, ipartsp, ixs10, ixs20, ixs16, kk, buf_nod, ixr_kj, inom_opt, ipart_l, iad, nale_r2r, flg_r2r_err, pm_stack, iworksh, igrbric2, igrquad2, igrsh4n2, igrsh3n2, igrtruss2, igrbeam2, igrspring2, igrnod2, igrsurf2, igrslin2, lsubmodel, ale_euler, igeo_, nloc_dmg, detonators, nsensor, seatbelt_shell_to_spring, nb_seatbelt_shells, mat_param)
Definition r2r_group.F:59
subroutine r2r_input(iexter)
Definition r2r_input.F:33
subroutine r2r_prelec(iparts, ipartc, ipartg, ipartt, ipartp, ipartr, ipartsp, compt_t2, modif, passe, inom_opt, nspcondn, nsphion, ipart_l, memtr, pm_stack, iworksh, igrnod, igrsurf, igrslin, igrbric, igrquad, igrsh4n, igrsh3n, igrtruss, igrbeam, igrspring, new_nslash_int, lsubmodel, new_hm_ninter, new_nintsub, new_ninivol, ixs10, ixs20, ixs16, detonators, nsensor, seatbelt_shell_to_spring, nb_seatbelt_shells)
Definition r2r_prelec.F:62
subroutine chk_flg_fsi(ixs, pm, iparts, ale_euler, igeo)
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:889
subroutine printcenter(array, arrlen, linout, flag)
program starter
Definition starter.F:39
subroutine tagnod_r2r(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart, flag, idom)
Definition tagnod_r2r.F:34
subroutine tagnod_r2r_s(tagbuf)
Definition tagnod_r2r.F:201
subroutine tagnods_r2r(ixs, ixs10, ixs20, ixs16, iparts, tagbuf, flag, idom)
Definition tagnod_r2r.F:265
subroutine tagnod_r2r_nl(ixc, ixtg, ixs, ixs10, ixs20, ixs16, tag_nlocal, mat_param)