OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_rbody.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!|| hm_read_rbody ../starter/source/constraints/general/rbody/hm_read_rbody.F
25!||--- called by ------------------------------------------------------
26!|| lectur ../starter/source/starter/lectur.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| anodset ../starter/source/output/analyse/analyse_node.c
30!|| fretitl ../starter/source/starter/freform.F
31!|| fretitl2 ../starter/source/starter/freform.F
32!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
33!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
34!|| hm_option_read_key ../starter/source/devtools/hm_reader/hm_option_read_key.F
35!|| hm_option_start ../starter/source/devtools/hm_reader/hm_option_start.F
36!|| hm_sz_r2r ../starter/source/coupling/rad2rad/routines_r2r.F
37!|| newdbl ../starter/source/system/sysfus.F
38!|| ngr2usr ../starter/source/system/nintrr.F
39!|| nodgrnr6 ../starter/source/starter/freform.F
40!|| rigmodif_nd ../starter/source/elements/solid/solide10/dim_s10edg.F
41!|| spmdset ../starter/source/constraints/general/rbody/spmdset.F
42!|| udouble ../starter/source/system/sysfus.F
43!|| usr2sys ../starter/source/system/sysfus.F
44!||--- uses -----------------------------------------------------
45!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
46!|| message_mod ../starter/share/message_module/message_mod.F
47!|| r2r_mod ../starter/share/modules1/r2r_mod.F
48!|| submodel_mod ../starter/share/modules1/submodel_mod.F
49!||====================================================================
50 SUBROUTINE hm_read_rbody(RBY ,NPBY ,LPBY ,ITAB ,ITABM1 ,
51 2 IGRNOD ,IGRSURF ,IBFV ,IGRV ,IBGR ,
52 3 SENSORS ,IMERGE ,UNITAB ,ISKN ,NOM_OPT ,
53 4 NUMSL ,KNOD2ELS,KNOD2ELC,KNOD2ELTG,KNOD2EL1D,
54 5 KNOD2ELQ ,ITAGND ,ICDNS10 ,LSUBMODEL,ICFIELD ,
55 6 LCFIELD )
56C-------------------------------------
57C LECTURE STRUCTURE RIGIDES
58C-----------------------------------------------
59C M o d u l e s
60C-----------------------------------------------
61 USE my_alloc_mod
62 USE unitab_mod
63 USE r2r_mod
64 USE message_mod
65 USE groupdef_mod
66 USE submodel_mod
68 USE sensor_mod
70C-----------------------------------------------
71C I m p l i c i t T y p e s
72C-----------------------------------------------
73#include "implicit_f.inc"
74C-----------------------------------------------
75C A n a l y s e M o d u l e
76C-----------------------------------------------
77#include "analyse_name.inc"
78C-----------------------------------------------
79C C o m m o n B l o c k s
80C-----------------------------------------------
81#include "com04_c.inc"
82#include "units_c.inc"
83#include "scr17_c.inc"
84#include "scr03_c.inc"
85#include "param_c.inc"
86#include "r2r_c.inc"
87#include "sphcom.inc"
88#include "sms_c.inc"
89C-----------------------------------------------
90C D u m m y A r g u m e n t s
91C-----------------------------------------------
92 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
93 INTEGER NPBY(NNPBY,*), LPBY(*), ITAB(*), ITABM1(*)
94 INTEGER IBFV(NIFV,*)
95 INTEGER IGRV(NIGRV,*),IBGR(*),IMERGE(*),
96 . ISKN(LISKN,*),NUMSL,
97 . knod2els(*),knod2elc(*),knod2eltg(*),knod2el1d(*),knod2elq(*),
98 . itagnd(*),icdns10(*), icfield(sizfield,*), lcfield(*)
99 my_real rby(nrby,*)
100 INTEGER NOM_OPT(LNOPT1,*)
101C-----------------------------------------------
102 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
103 TYPE (SURF_) ,TARGET, DIMENSION(NSURF) :: IGRSURF
104 TYPE (SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
105 TYPE (SENSORS_) ,INTENT(IN) :: SENSORS
106C-----------------------------------------------
107C L o c a l V a r i a b l e s
108C-----------------------------------------------
109 INTEGER I, J, K, N, NSL, NSL0, NSKEW, IC,
110 . ispher, igu,igs,isens,id,icdg,
111 . jc,uid,iflagunit,sub_index,nrb,
112 . ifail,nrb_r2r
113 INTEGER IDSURF, ISU, NN, IAD, M, IOPT, IEXPAMS, NEL
114 CHARACTER MESS*40
115 CHARACTER(LEN=NCHARTITLE)::TITR,TITR1
116 CHARACTER(LEN=NCHARKEY)::KEY
117 my_real BID, MASS, I1, I2, I3, I12, I23, I13, FN, FT, EXPN, EXPT
118 INTEGER, DIMENSION(:), ALLOCATABLE :: ITAG
119 INTEGER, DIMENSION(:,:), ALLOCATABLE :: TABSL
120 INTEGER, DIMENSION(:), POINTER :: INGR2USR
121 LOGICAL IS_AVAILABLE
122C-----------------------------------------------
123C E x t e r n a l F u n c t i o n s
124C-----------------------------------------------
125 INTEGER USR2SYS,NGR2USR,NODGRNR6
126C-----------------------------------------------
127C NPBY(NNPBY,NRBYKIN), NNPBY=17
128C 1 : main NODE
129C 2 : NUMBER OF SECONDARY NODES
130C 3 : ICOG
131C 4 : ISENS
132C 5 : FLAG SPHERICAL INERTIA
133C 6 : IDENTIFIER
134C 7 : 1 ON(1) OFF(0)
135C 8 : ISU
136C 9 : NSKEW
137C 10 : IEXPAMS (AMS - Hidden)
138C = 1 (default) : AMS expansion ; = 2 (Hidden) : No expansion
139C 11 : IAD => SECONDARY nodes LPBY(IAD+1:IAD+NSN)
140C 12 : RIGID BODY LEVEL (IN MERGE RELATIONS)
141C 13 : MERGING FLAG FOR THE main RIGID BODY
142C 14 : NUMBER OF SECONDARY NODES WITH MERGING FLAG = 1
143C 15 : NUMBER OF SECONDARY NODES WITH MERGING FLAG = 2
144C 16 : NUMBER OF SECONDARY NODES WITH MERGING FLAG = 3
145C 17 : IKREM
146C 18 : IFAIL
147C 19 : INITIAL NUMBER OF SECONDARY NODES (NSN_G)
148C-----------------------------------------------
149C RBY(NRBY,NRBYKIN), NRBY=25
150C LOADED DURING READING AFTER INITIALIZATION (including in RD ENGINE)
151C 1 : Added Mass 1..9 : Principal directions
152C 2..4: IXX, IYY, IZZ 10..12: Principal inertia I1, I2, I3
153C 5..7: IXY, IYZ, IXZ 13: Initial inertia of Main Node (cf deactivation of rbody)
154C 14: Rigid body mass
155C 15: Initial mass of main node (cf deactivation of rbody)
156C 17..25: Inertia matrix in global system
157C 26: FN : Normal force at failure (Ifail=1)
158C 27: FT : Shear force at failure (Ifail=1)
159C 28: EXPN (Ifail=1)
160C 29: EXPT (Ifail=1)
161C 30: CRIT (computed at each cycle in RD Engine)
162C=======================================================================
163 DATA mess/'RIGID BODY DEFINITION '/
164C=======================================================================
165 IF (numsl > 0) THEN
166 CALL my_alloc(tabsl,2,numsl)
167 tabsl=0
168 END IF
169
170 WRITE(iout,1000)
171C--------------------------------------------------
172C START BROWSING MODEL RBODY
173C--------------------------------------------------
174 is_available = .false.
175 CALL hm_option_start('/RBODY')
176C
177 CALL my_alloc(itag,numnod)
178 itag(1:numnod) = 0
179C
180 k=0
181 nrb=0
182 nrb_r2r=0
183C
184 DO n=1,nrbody
185C
186C--------------------------------------------------
187C EXTRACT DATAS OF /RBODY/... LINE
188C--------------------------------------------------
189C
190 nrb_r2r = nrb_r2r + 1
191 IF (nsubdom > 0) THEN
192 IF(tagrby(nrb_r2r) == 0) CALL hm_sz_r2r(tagrby,nrb_r2r,lsubmodel)
193 ENDIF
194C
195 key=''
196 CALL hm_option_read_key(lsubmodel,
197 . option_id = id,
198 . unit_id = uid,
199 . option_titr = titr,
200 . keyword2 = key,
201 . submodel_index = sub_index)
202 IF(key=='')THEN ! not a /RBODY/LAGMUL
203 nrb = nrb + 1
204C-------
205 iflagunit = 0
206 DO j=1,unitab%NUNITS
207 IF (unitab%UNIT_ID(j) == uid) THEN
208 iflagunit = 1
209 EXIT
210 ENDIF
211 ENDDO
212 IF (uid/=0.AND.iflagunit == 0) THEN
213 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
214 . i2=uid,i1=id,c1='RIGID BODY',
215 . c2='RIGID BODY',
216 . c3=titr)
217 ENDIF
218C
219 nom_opt(1,nrb)=id
220 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,nrb),ltitr)
221C
222 CALL hm_get_intv('node_ID',npby(1,nrb),is_available,lsubmodel)
223 CALL hm_get_intv('sens_ID',isens,is_available,lsubmodel)
224 CALL hm_get_intv('Skew_ID',nskew,is_available,lsubmodel)
225 CALL hm_get_intv('ispher',ISPHER,IS_AVAILABLE,LSUBMODEL)
226 CALL HM_GET_INTV('grnd_id',IGU,IS_AVAILABLE,LSUBMODEL)
227 CALL HM_GET_INTV('ikrem',IKREM,IS_AVAILABLE,LSUBMODEL)
228 CALL HM_GET_INTV('icog',ICDG,IS_AVAILABLE,LSUBMODEL)
229 CALL HM_GET_INTV('surf_id',IDSURF,IS_AVAILABLE,LSUBMODEL)
230 CALL HM_GET_FLOATV('mass',MASS,IS_AVAILABLE,LSUBMODEL,UNITAB)
231C
232 IF(ISPHER == 0) ISPHER=2
233 IF(ICDG == 0)ICDG=1
234c
235.AND. IF(NSKEW == 0 SUB_INDEX /= 0 ) NSKEW = LSUBMODEL(SUB_INDEX)%SKEW
236 DO J=0,NUMSKW+MIN(1,NSPCOND)*NUMSPH+NSUBMOD
237 IF(NSKEW == ISKN(4,J+1)) THEN
238 NSKEW=J+1
239 GO TO 100
240 ENDIF
241 ENDDO
242 CALL ANCMSG(MSGID=137,ANMODE=ANINFO,MSGTYPE=MSGERROR,
243 . C1='rigid body',
244 . C2='rigid body',
245 . I2=NSKEW,I1=ID,C3=TITR)
246 100 CONTINUE
247C
248 RBY(1,NRB) = MASS
249C
250 ISU=0
251 IF (IDSURF/=0) THEN
252 INGR2USR => IGRSURF(1:NSURF)%ID
253 ISU=NGR2USR(IDSURF,INGR2USR,NSURF)
254 IF (ISU == 0) THEN
255 CALL ANCMSG(MSGID=158,ANMODE=ANINFO,MSGTYPE=MSGERROR,
256 . I2=IDSURF,I1=ID,C1=TITR)
257 ELSEIF (IGRSURF(ISU)%TYPE/=101) THEN
258 TITR1 = IGRSURF(IGS)%TITLE
259 CALL ANCMSG(MSGID=159,ANMODE=ANINFO,MSGTYPE=MSGERROR,
260 . I2=IDSURF,C2=TITR1,I1=ID,C1=TITR)
261 ENDIF
262 ENDIF
263 NPBY(8,NRB)=ISU
264C
265 CALL HM_GET_FLOATV('jxx',I1,IS_AVAILABLE,LSUBMODEL,UNITAB)
266 CALL HM_GET_FLOATV('jyy',I2,IS_AVAILABLE,LSUBMODEL,UNITAB)
267 CALL HM_GET_FLOATV('jzz',I3,IS_AVAILABLE,LSUBMODEL,UNITAB)
268 RBY(2,NRB) = I1
269 RBY(3,NRB) = I2
270 RBY(4,NRB) = I3
271 CALL HM_GET_FLOATV('jxy',I12,IS_AVAILABLE,LSUBMODEL,UNITAB)
272 CALL HM_GET_FLOATV('jyz',I23,IS_AVAILABLE,LSUBMODEL,UNITAB)
273 CALL HM_GET_FLOATV('jxz',I13,IS_AVAILABLE,LSUBMODEL,UNITAB)
274C
275 CALL HM_GET_INTV('ioptoff',IOPT,IS_AVAILABLE,LSUBMODEL)
276 CALL HM_GET_INTV('iexpams',IEXPAMS,IS_AVAILABLE,LSUBMODEL)
277C
278 CALL HM_GET_INTV('ifail',IFAIL,IS_AVAILABLE,LSUBMODEL)
279 NPBY(18,NRB)=IFAIL
280 IF(IFAIL==1)THEN
281 CALL HM_GET_FLOATV('fn',FN,IS_AVAILABLE,LSUBMODEL,UNITAB)
282 CALL HM_GET_FLOATV('ft',FT,IS_AVAILABLE,LSUBMODEL,UNITAB)
283 CALL HM_GET_FLOATV('expn',EXPN,IS_AVAILABLE,LSUBMODEL,UNITAB)
284 CALL HM_GET_FLOATV('expt',EXPT,IS_AVAILABLE,LSUBMODEL,UNITAB)
285 IF(FN==ZERO)FN=EP20
286 IF(FT==ZERO)FT=EP20
287 IF(EXPN==ZERO) EXPN=TWO
288 IF(EXPT==ZERO) EXPT=TWO
289 RBY(26,NRB)=FN
290 RBY(27,NRB)=FT
291 RBY(28,NRB)=EXPN
292 RBY(29,NRB)=EXPT
293 END IF
294C
295 RBY(5,NRB) = I12
296 RBY(6,NRB) = I23
297 RBY(7,NRB) = I13
298 NPBY(1,NRB)= USR2SYS(NPBY(1,NRB),ITABM1,MESS,ID)
299!
300 DO JC=1,NMERGED
301 IF (NPBY(1,NRB) == IMERGE(JC)) NPBY(1,NRB)=IMERGE(NUMCNOD+JC)
302 ENDDO
303 CALL ANODSET(NPBY(1,NRB), CHECK_RB_M)
304C
305 NPBY(11,NRB)=K
306 M = NPBY(1,NRB)
307 NSL = NODGRNR6(M,IGU,IGS,LPBY(K+1),IGRNOD,ITABM1,MESS,ID)
308c
309 DO I=1,NSL
310 ITAG(LPBY(K+I)) = 1
311 ENDDO
312c
313 IF (NS10E > 0 ) THEN
314 CALL RIGMODIF_ND(NSL,LPBY(K+1),ITAGND,ICDNS10,ID,TITR,ITAB)
315 M = NPBY(1,NRB)
316 IF (ITAGND(M)/=0) THEN
317 CALL ANCMSG(MSGID=1211,
318 . MSGTYPE=MSGERROR,
319 . ANMODE=ANINFO,
320 . I1=ITAB(M),
321 . C1='rbody',
322 . I2=ID,
323 . C2='rbody')
324 END IF
325 END IF
326 NPBY(2,NRB)=NSL
327 NPBY(19,NRB)=NSL
328 DO J=1, NSL
329 CALL ANODSET(LPBY(J+K), CHECK_RB_S)
330 TABSL(1,J+K)=ITAB(LPBY(J+K))
331 TABSL(2,J+K)=N
332 ENDDO
333C
334 IF(ISENS > 0)THEN
335 DO I=1,SENSORS%NSENSOR
336 IF (ISENS == SENSORS%SENSOR_TAB(I)%SENS_ID) NPBY(4,NRB)=I
337 ENDDO
338 IF(NPBY(4,NRB) == 0)THEN
339 TITR1 = IGRSURF(IGS)%TITLE
340 CALL ANCMSG(MSGID=159,ANMODE=ANINFO,MSGTYPE=MSGERROR,
341 . I2=ISENS,C2=TITR1,I1=ID,C1=TITR)
342 ENDIF
343 RBY(1,NRB)=ZERO
344 RBY(2,NRB)=ZERO
345 RBY(3,NRB)=ZERO
346 RBY(4,NRB)=ZERO
347 RBY(5,NRB)=ZERO
348 RBY(6,NRB)=ZERO
349 RBY(7,NRB)=ZERO
350 NSKEW=0
351 ICDG =0
352 IKREM=1
353 ENDIF
354 NPBY(5,NRB)=ISPHER
355 NPBY(6,NRB)=ID
356 NPBY(17,NRB)=IKREM
357 IF(ISENS == 0)THEN
358 NPBY(7,NRB)=1
359 ELSE
360 NPBY(7,NRB)=0
361 ENDIF
362 NPBY(3,NRB) =ICDG
363 NPBY(9,NRB) =NSKEW
364 IF(IEXPAMS==0)THEN
365 IEXPAMS=1
366 ELSEIF(IEXPAMS==2)THEN
367 IEXPAMS=0
368 END IF
369 NPBY(10,NRB)=IEXPAMS
370 NSL0 = NSL
371 IF (NSUBDOM > 0) NSL0 = IGRNOD(IGS)%R2R_ALL
372 IF (NSL0 == 0) THEN
373 CALL ANCMSG(MSGID=352,
374 . MSGTYPE=MSGWARNING,
375 . ANMODE=ANINFO_BLIND_2,
376 . I1=ID,
377 . C1=TITR)
378 ENDIF
379C
380 CALL SPMDSET(NRB,NPBY,NNPBY,LPBY,NSL,K)
381C
382 IF(ISMS==0)THEN
383 IF (ISENS/=0) THEN
384 WRITE(IOUT,1100) ID,TRIM(TITR),ISENS,ITAB(NPBY(1,NRB)),NSL,
385 . IDSURF,ISPHER
386 ELSE
387 WRITE(IOUT,1111) ID,TRIM(TITR),ITAB(NPBY(1,NRB)),NSL,
388 . IDSURF,ISKN(4,NSKEW),ISPHER,IKREM,ICDG,
389 . (RBY(J,NRB),J=1,7)
390 ENDIF
391 ELSE
392 IF (ISENS/=0) THEN
393 WRITE(IOUT,1102) ID,TRIM(TITR),ISENS,ITAB(NPBY(1,NRB)),NSL,
394 . IDSURF,ISPHER
395 ELSE
396 WRITE(IOUT,1112) ID,TRIM(TITR),ITAB(NPBY(1,NRB)),NSL,
397 . IDSURF,ISKN(4,NSKEW),ISPHER,IKREM,ICDG,
398 . (RBY(J,NRB),J=1,7)
399 ENDIF
400 WRITE(IOUT,1103)
401 END IF
402 IF(IFAIL==1)THEN
403 WRITE(IOUT,1151)
404 WRITE(IOUT,1152) FN, EXPN, FT, EXPT
405 END IF
406 WRITE(IOUT,1201)
407 WRITE(IOUT,1202) (ITAB(LPBY(I+K)),I=1,NSL)
408 K=K+NSL
409C-------------------------------
410C VITESSE FIXE SUR main EN ROT
411C-------------------------------
412 DO J=1,NFXVEL
413.AND. IF(IABS(IBFV(1,J)) == NPBY(1,NRB)
414 . IBFV(2,J)-10*(IBFV(2,J)/10)>=4)THEN
415 IBFV(6,J)=N
416 ENDIF
417 ENDDO
418C-------------------------------
419C main BELONGS TO MESH
420C-------------------------------
421 NEL=KNOD2ELS(NPBY(1,NRB)+1) -KNOD2ELS(NPBY(1,NRB))
422 . +KNOD2ELC(NPBY(1,NRB)+1) -KNOD2ELC(NPBY(1,NRB))
423 . +KNOD2ELTG(NPBY(1,NRB)+1)-KNOD2ELTG(NPBY(1,NRB))
424 . +KNOD2EL1D(NPBY(1,NRB)+1)-KNOD2EL1D(NPBY(1,NRB))
425 . +KNOD2ELQ(NPBY(1,NRB)+1)-KNOD2ELQ(NPBY(1,NRB))
426 IF(NEL/=0)THEN
427 IF(ISMS==0)THEN
428 ID=NOM_OPT(1,NRB)
429 CALL FRETITL2(TITR,NOM_OPT(LNOPT1-LTITR+1,NRB),LTITR)
430 CALL ANCMSG(MSGID=448,
431 . MSGTYPE=MSGWARNING,
432 . ANMODE=ANINFO_BLIND_2,
433 . I1=ITAB(NPBY(1,NRB)),
434 . I2=ID,
435 . C1=TITR)
436 ELSE
437 ID=NOM_OPT(1,NRB)
438 CALL FRETITL2(TITR,NOM_OPT(LNOPT1-LTITR+1,NRB),LTITR)
439 CALL ANCMSG(MSGID=1066,
440 . MSGTYPE=MSGERROR,
441 . ANMODE=ANINFO_BLIND_1,
442 . I1=ITAB(NPBY(1,NRB)),
443 . I2=ID,
444 . C1=TITR)
445 END IF
446 END IF
447 END IF ! IF(KEY=='')THEN
448 ENDDO
449C-------------------------------------
450C Recherche des Rigid Body ID doubles
451C-------------------------------------
452 CALL UDOUBLE(NPBY(6,1),NNPBY,NRBYKIN,MESS,0,BID)
453C-------------------------------------
454C Recherche des Main Node ID doubles
455C-------------------------------------
456 IC = 442
457 I = 0
458 CALL NEWDBL(NPBY(1,1),NNPBY,NRBYKIN,ITAB,442,ANINFO_BLIND_1,
459 . NOM_OPT)
460C------------------------------------
461C tag des noeuds SECONDARYs rby avec gravite ou load/centri
462C pour calcul du travail des forces externes
463C-------------------------------------
464 DO I=1,NUMNOD
465 ITAG(I)=0
466 ENDDO
467 K=0
468 DO N=1,NRBYKIN
469 NSL=NPBY(2,N)
470 IF(NPBY(7,N)/=0)THEN
471 DO I=1,NSL
472 ITAG(LPBY(I+K))=1
473 ENDDO
474 ENDIF
475 K=K+NSL
476 ENDDO
477C
478 DO K=1,NGRAV
479 NN =IGRV(1,K)
480 IAD=IGRV(4,K)
481 DO I=1,NN
482 N=IBGR(I+IAD-1)
483 IF(ITAG(N) == 1)IBGR(I+IAD-1) = -N
484 ENDDO
485 ENDDO
486C
487 DO K=1,NLOADC
488 NN = ICFIELD(1,K)
489 IAD = ICFIELD(4,K)
490 DO I=1,NN
491 N=LCFIELD(IAD+I-1)
492 IF(ITAG(N) == 1)LCFIELD(IAD+I-1) = -N
493 END DO
494 ENDDO
495C------------------------------------
496 IF(ALLOCATED(ITAG)) DEALLOCATE(ITAG)
497 IF(ALLOCATED(TABSL))DEALLOCATE(TABSL)
498C------------------------------------
499 RETURN
500C
5011000 FORMAT(/
502 . ' rigid body definitions '/
503 . ' ---------------------- '/)
5041100 FORMAT( /5X,'rigid body id ',I10,1X,A
505 . /10X,'sensor ',I10
506 . /10X,'primary node ',I10
507 . /10X,'number of nodes ',I10
508 . /10X,'surface linked to body ',i10
509 . /10x,'SPHERICAL INERTIA FLAG ',i10)
5101102 FORMAT( /5x,'RIGID BODY ID ',i10,1x,a
511 . /10x,'SENSOR ',i10
512 . /10x,'PRIMARY NODE ',i10
513 . /10x,'NUMBER OF NODES ',i10
514 . /10x,'SURFACE LINKED TO BODY ',i10
515 . /10x,'SPHERICAL INERTIA FLAG ',i10)
5161103 FORMAT( /10x,'NO AMS EXPANSION OVERALL THE RBODY ')
5171111 FORMAT( /5x,'RIGID BODY ID ',i10,1x,a
518 . /10x,'PRIMARY NODE ',i10
519 . /10x,'NUMBER OF NODES ',i10
520 . /10x,'SURFACE LINKED TO BODY ',i10
521 . /10x,'SKEW NUMBER ',i10
522 . /10x,'SPHERICAL INERTIA FLAG ',i10
523 . /10x,'REMOVE SECONDARY NODES FROM RIGID WALL(IF=0)',i10
524 . /10x,'CENTER OF MASS FLAG ',i10
525 . /10x,'ADDED MASS ',1pg20.4
526 . /10x,'ADDED INERTIA ',1p6g20.4)
5271112 FORMAT( /5x,'RIGID BODY ID ',i10,1x,a
528 . /10x,'PRIMARY NODE ',i10
529 . /10x,'NUMBER OF NODES ',i10
530 . /10x,'SURFACE LINKED TO BODY ',i10
531 . /10x,'SKEW NUMBER ',i10
532 . /10x,'SPHERICAL INERTIA FLAG ',i10
533 . /10x,'REMOVE SECONDARY NODES FROM RIGID WALL(IF=0)',i10
534 . /10x,'CENTER OF MASS FLAG ',i10
535 . /10x,'ADDED MASS ',1pg20.4
536 . /10x,'ADDED INERTIA ',1p6g20.4)
5371151 FORMAT(/10x,'FAILURE CRITERIA : ')
5381152 FORMAT(/10x,'NORMAL FORCE AT FAILURE. . . . . . . . . . . . .',1pg20.4
539 . /10x,'FAILURE EXPONENT PARAMETER IN NORMAL DIRECTION ',1pg20.4
540 . /10x,'SHEAR FORCE AT FAILURE . . . . . . . . . . . . .',1pg20.4
541 . /10x,'FAILURE EXPONENT PARAMETER IN SHEAR DIRECTION ',1pg20.4)
5421201 FORMAT(/10x,'SECONDARY NODES ')
5431202 FORMAT( 10x,10i10)
544 END SUBROUTINE hm_read_rbody
545C
546!||====================================================================
547!|| setrbyon ../starter/source/constraints/general/rbody/hm_read_rbody.F
548!||--- called by ------------------------------------------------------
549!|| lectur ../starter/source/starter/lectur.F
550!||--- calls -----------------------------------------------------
551!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
552!|| hm_option_read_key ../starter/source/devtools/hm_reader/hm_option_read_key.F
553!|| hm_option_start ../starter/source/devtools/hm_reader/hm_option_start.F
554!|| hm_sz_r2r ../starter/source/coupling/rad2rad/routines_r2r.F
555!||--- uses -----------------------------------------------------
556!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
557!|| message_mod ../starter/share/message_module/message_mod.F
558!|| r2r_mod ../starter/share/modules1/r2r_mod.F
559!|| submodel_mod ../starter/share/modules1/submodel_mod.F
560!||====================================================================
561 SUBROUTINE setrbyon(IXS ,IXC ,IXTG ,IGRNOD ,IGRNRBY ,
562 2 ISOLOFF ,ISHEOFF ,ITRIOFF,KNOD2ELS,KNOD2ELC,
563 3 KNOD2ELTG,NOD2ELS ,NOD2ELC,NOD2ELTG,IXQ ,
564 4 IQUAOFF ,KNOD2ELQ,NOD2ELQ,LSUBMODEL)
565C-------------------------------------
566C PRE LECTURE STRUCTURE RIGIDES POUR OPTIMIZATION
567C-----------------------------------------------
568C M o d u l e s
569C-----------------------------------------------
570 USE my_alloc_mod
571 USE message_mod
572 USE r2r_mod
573 USE groupdef_mod
574 USE submodel_mod
577C-----------------------------------------------
578C I m p l i c i t T y p e s
579C-----------------------------------------------
580#include "implicit_f.inc"
581C-----------------------------------------------
582C C o m m o n B l o c k s
583C-----------------------------------------------
584#include "com01_c.inc"
585#include "com04_c.inc"
586#include "r2r_c.inc"
587C-----------------------------------------------
588C D u m m y A r g u m e n t s
589C-----------------------------------------------
590 INTEGER IGRNRBY(*),ISOLOFF(*),ISHEOFF(*),ITRIOFF(*),
591 . IXS(NIXS,*), IXC(NIXC,*), IXTG(NIXTG,*),
592 . KNOD2ELC(*), KNOD2ELTG(*), NOD2ELC(*), NOD2ELTG(*),
593 . KNOD2ELS(*), NOD2ELS(*),KNOD2ELQ(*),IQUAOFF(*),
594 . NOD2ELQ(*) ,IXQ(NIXQ,*)
595C-----------------------------------------------
596 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
597 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
598C-----------------------------------------------
599C L o c a l V a r i a b l e s
600C-----------------------------------------------
601 INTEGER I, ISENS, IG, NSN, II, NALL, IGU, N, ID, IRBYON, IOPT, NN, JJ, NRB
602 INTEGER, DIMENSION(:), ALLOCATABLE :: ITAG
603 CHARACTER(LEN=NCHARTITLE) :: TITR
604 LOGICAL IS_AVAILABLE
605C-----------------------------------
606C
607 DO i = 1, numels
608 isoloff(i) = 0
609 END DO
610 DO i = 1, numelc
611 isheoff(i) = 0
612 END DO
613 DO i = 1, numeltg
614 itrioff(i) = 0
615 END DO
616 DO i = 1, numelq
617 iquaoff(i) = 0
618 END DO
619C
620C init a 0 de itag
621 CALL my_alloc(itag,numnod)
622 DO i=1,numnod
623 itag(i)=0
624 ENDDO
625C--------------------------------------------------
626C START BROWSING MODEL RBODY
627C--------------------------------------------------
628 is_available = .false.
629 CALL hm_option_start('/RBODY')
630C
631 nrb=0
632C
633 DO n=1,nrbykin
634 nrb = nrb + 1
635 IF (nsubdom > 0)THEN ! TAGRBY is allocated only if NSUBDOM>0
636 IF(tagrby(nrb) == 0) CALL hm_sz_r2r(tagrby,nrb,lsubmodel)
637 ENDIF
638C-----------------------------------------------------------------
639 igrnrby(n)=0
640C--------------------------------------------------
641C EXTRACT DATAS OF /RBODY/... LINE
642C--------------------------------------------------
643 CALL hm_option_read_key(lsubmodel,
644 . option_id = id,
645 . option_titr = titr)
646C
647 CALL hm_get_intv('sens_ID',isens,is_available,lsubmodel)
648 CALL hm_get_intv('grnd_ID',igu,is_available,lsubmodel)
649 CALL hm_get_intv('Ioptoff',iopt,is_available,lsubmodel)
650C
651 IF (iopt == 1) THEN
652 irbyon=2
653 ELSE
654C par defaut rbody desactive
655 irbyon=1
656 END IF
657C si sensor rbody active
658 IF(isens/=0) irbyon=0
659C si Imls utilisee rbody active temporairement
660 IF(ndsolv == 1) irbyon=0
661 IF(irbyon>=1)THEN
662C
663 IF(igu/=0)THEN
664 ig = 0
665 DO i=1,ngrnod
666 IF(igrnod(i)%ID == igu)THEN
667 ig=i
668 GOTO 100
669 END IF
670 END DO
671 100 CONTINUE
672C
673 IF(ig/=0) THEN
674 igrnrby(n)=ig
675 nsn = igrnod(ig)%NENTITY
676 DO i=1,nsn
677 itag(igrnod(ig)%ENTITY(i)) = 1
678 END DO
679C
680cc DO II = 1, NUMELS
681 DO i=1,nsn
682 nn = igrnod(ig)%ENTITY(i)
683 DO jj = knod2els(nn)+1,knod2els(nn+1)
684 ii = nod2els(jj)
685 nall = itag(ixs(2,ii)) * itag(ixs(3,ii)) *
686 + itag(ixs(4,ii)) * itag(ixs(5,ii)) *
687 + itag(ixs(6,ii)) * itag(ixs(7,ii)) *
688 + itag(ixs(8,ii)) * itag(ixs(9,ii))
689 IF(nall/=0)THEN
690 isoloff(ii) = irbyon
691 END IF
692 END DO
693C
694cc DO II = 1, NUMELC
695 DO jj = knod2elc(nn)+1,knod2elc(nn+1)
696 ii = nod2elc(jj)
697 nall = itag(ixc(2,ii)) * itag(ixc(3,ii)) *
698 + itag(ixc(4,ii)) * itag(ixc(5,ii))
699 IF(nall/=0)THEN
700 isheoff(ii) = irbyon
701 END IF
702 END DO
703C
704cc DO II = 1, NUMELTG
705 DO jj = knod2eltg(nn)+1,knod2eltg(nn+1)
706 ii = nod2eltg(jj)
707 nall = itag(ixtg(2,ii)) * itag(ixtg(3,ii)) *
708 + itag(ixtg(4,ii))
709 IF(nall/=0)THEN
710 itrioff(ii) = irbyon
711 END IF
712 END DO
713C
714 DO jj = knod2elq(nn)+1,knod2elq(nn+1)
715 ii = nod2elq(jj)
716 nall = itag(ixq(2,ii)) * itag(ixq(3,ii)) *
717 + itag(ixq(4,ii)) * itag(ixq(5,ii))
718 IF(nall/=0)THEN
719 iquaoff(ii) = irbyon
720 END IF
721 END DO
722C
723 END DO
724C reinit a 0 sur la partie concernee
725 DO i=1,nsn
726 itag(igrnod(ig)%ENTITY(i))=0
727 END DO
728 END IF
729 END IF
730 END IF
731C
732 END DO
733C
734 IF(ALLOCATED(itag)) DEALLOCATE(itag)
735C
736 RETURN
737 END SUBROUTINE setrbyon
738C
739!||====================================================================
740!|| seteloff ../starter/source/constraints/general/rbody/hm_read_rbody.F
741!||--- called by ------------------------------------------------------
742!|| lectur ../starter/source/starter/lectur.F
743!||--- calls -----------------------------------------------------
744!||--- uses -----------------------------------------------------
745!|| message_mod ../starter/share/message_module/message_mod.F
746!||====================================================================
747 SUBROUTINE seteloff(IXS ,IXC ,IXT ,IXP ,IXR ,
748 2 IXTG ,IPARG , ISOLOFF,ISHEOFF,
749 3 ITRUOFF,IPOUOFF,IRESOFF,ITRIOFF,IGRNRBY,
750 4 IGRNOD ,ELBUF_STR,IQUAOFF,IXQ )
751C-----------------------------------------------
752C M o d u l e s
753C-----------------------------------------------
754 USE my_alloc_mod
755 USE message_mod
756 USE elbufdef_mod
757 USE groupdef_mod
758C-------------------------------------
759C PRE LECTURE STRUCTURE RIGIDES POUR OPTIMIZATION
760C-----------------------------------------------
761C I m p l i c i t T y p e s
762C-----------------------------------------------
763#include "implicit_f.inc"
764C-----------------------------------------------
765C C o m m o n B l o c k s
766C-----------------------------------------------
767#include "com01_c.inc"
768#include "com04_c.inc"
769#include "units_c.inc"
770#include "scr03_c.inc"
771#include "param_c.inc"
772C-----------------------------------------------
773C D u m m y A r g u m e n t s
774C-----------------------------------------------
775 INTEGER ISOLOFF(*), ISHEOFF(*), ITRIOFF(*),ITRUOFF(*),
776 . IPOUOFF(*), IRESOFF(*),
777 . IXS(NIXS,*), IXC(NIXC,*), IXTG(NIXTG,*), IXT(NIXT,*),
778 . IXP(NIXP,*), IXR(NIXR,*),
779 . IPARG(NPARG,*),IGRNRBY(*),
780 . IQUAOFF(*),IXQ(NIXQ,*)
781 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_STR
782C-----------------------------------------------
783 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
784C-----------------------------------------------
785C L o c a l V a r i a b l e s
786C-----------------------------------------------
787 INTEGER NG, MLW, ITY, NEL, NFT, IAD, I, II, IGOF, NR, IG,
788 . NSN, NALL, ISHFT, IOK, IRBYON
789 TYPE(G_BUFEL_) ,POINTER :: GBUF
790 INTEGER, DIMENSION(:), ALLOCATABLE :: ITAG
791C-----------------------
792C MISE DE OFF A -OFF
793C======================================================================|
794 IF(ipri>=5) THEN
795 WRITE(iout,*)' '
796
797 WRITE(iout,*)' LIST OF DEACTIVATED ELEMENTS FROM RIGID BODIES'
798 WRITE(iout,*)' ----------------------------------------------'
799 END IF
800C
801 irbyon = 1
802C
803 CALL my_alloc(itag,numnod)
804C init initiale sur numnod
805 DO i=1,numnod
806 itag(i)=0
807 ENDDO
808C
809 DO nr = 1, nrbody
810 ig = igrnrby(nr)
811 IF(ig > 0)THEN
812 nsn = igrnod(ig)%NENTITY
813 DO i=1,nsn
814 itag(igrnod(ig)%ENTITY(i))=1
815 END DO
816C
817 DO ii = 1, numelt
818 nall = itag(ixt(2,ii)) * itag(ixt(3,ii))
819 IF(nall/=0)THEN
820 itruoff(ii) = irbyon
821 END IF
822 END DO
823C
824 DO ii = 1, numelp
825 nall = itag(ixp(2,ii)) * itag(ixp(3,ii))
826 IF(nall/=0)THEN
827 ipouoff(ii) = irbyon
828 END IF
829 END DO
830C
831 DO ii = 1, numelr
832 nall = itag(ixr(2,ii)) * itag(ixr(3,ii))
833 IF(nall/=0)THEN
834 iresoff(ii) = irbyon
835 END IF
836 END DO
837C
838C reinit a 0 sur la partie concernee uniquement
839 DO i=1,nsn
840 itag(igrnod(ig)%ENTITY(i))=0
841 END DO
842 END IF
843 END DO
844C
845C IF COND
846 DO ng=1,ngroup
847 gbuf => elbuf_str(ng)%GBUF
848 mlw=iparg(1,ng)
849 ity=iparg(5,ng)
850 nel=iparg(2,ng)
851 nft=iparg(3,ng)
852 iad=iparg(4,ng) - 1
853C-----------------------
854C 1. ELEMENTS SOLIDES
855C-----------------------
856 IF(ity == 1.AND.mlw/=0)THEN ! loi0, pas de off
857 iok = 0
858 DO i=1,nel
859 ii=i+nft
860 IF(isoloff(ii)/=0)THEN
861 gbuf%OFF(i)= -abs(gbuf%OFF(i))
862 IF(ipri>=5) WRITE(iout,*)' brick deactivation:',
863 . IXS(11,II)
864 IOK = 1
865 ENDIF
866 ENDDO
867C----------------------------------------
868C TEST POUR L'ELIMINATION D'ONE GROUPE
869C----------------------------------------
870 IF(IOK == 1)THEN
871 IGOF = 1
872 DO I = 1,NEL
873 II=I+NFT
874 IF (GBUF%OFF(I) > ZERO) IGOF=0
875 ENDDO
876 IPARG(8,NG) = IGOF
877 END IF
878C-----------------------
879C 2. ELEMENTS QUADS
880C-----------------------
881.AND. ELSEIF(ITY == 2MLW/=0)THEN ! loi0, pas de off
882 IOK = 0
883 DO I=1,NEL
884 II=I+NFT
885 IF(IQUAOFF(II)/=0)THEN
886 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
887 IF(IPRI>=5) WRITE(IOUT,*)' quad deactivation:',
888 . IXQ(NIXQ,II)
889 IOK = 1
890 ENDIF
891 ENDDO
892C----------------------------------------
893C TEST POUR L'ELIMINATION D'ONE GROUPE
894C----------------------------------------
895 IF(IOK == 1)THEN
896 IGOF = 1
897 DO I = 1,NEL
898 II=I+NFT
899 IF (GBUF%OFF(I) > ZERO) IGOF=0
900 ENDDO
901 IPARG(8,NG) = IGOF
902 END IF
903C-----------------------
904C 3. ELEMENTS COQUES
905C-----------------------
906.AND. ELSEIF(ITY == 3MLW/=0)THEN ! loi0, pas de off
907 IOK = 0
908 DO I=1,NEL
909 II=I+NFT
910 IF(ISHEOFF(II)/=0)THEN
911 IF (GBUF%OFF(I) > ZERO)THEN
912 GBUF%OFF(I) = -GBUF%OFF(I)
913 IF(IPRI>=5) WRITE(IOUT,*)' shell deactivation:',
914 . IXC(7,II)
915 IOK = 1
916 ENDIF
917 ENDIF
918 ENDDO
919C----------------------------------------
920C TEST POUR L'ELIMINATION D'ONE GROUPE
921C----------------------------------------
922 IF(IOK == 1)THEN
923 IGOF = 1
924 DO I = 1,NEL
925 II=I+NFT
926 IF (GBUF%OFF(I) > ZERO) IGOF=0
927 ENDDO
928 IPARG(8,NG) = IGOF
929 END IF
930C-----------------------
931C 4. ELEMENTS TRUSS
932C-----------------------
933 ELSEIF(ITY == 4)THEN
934 IOK = 0
935 DO I=1,NEL
936 II=I+NFT
937 IF(ITRUOFF(II)/=0)THEN
938 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
939 IF(IPRI>=5) WRITE(IOUT,*)' truss deactivation:',
940 . IXT(5,II)
941 IOK = 1
942 ENDIF
943 ENDDO
944C----------------------------------------
945C TEST POUR L'ELIMINATION D'ONE GROUPE
946C----------------------------------------
947C Incompatible avec option de gap dans propriete de truss
948C IGOF = 1
949C DO I = 1,NEL
950C IF(ELBUF(IAD + I)/=ZERO) IGOF=0
951C ENDDO
952C IPARG(8,NG) = IGOF
953C-----------------------
954C 5. ELEMENTS POUTRES
955C-----------------------
956 ELSEIF(ITY == 5)THEN
957 IOK = 0
958 DO I=1,NEL
959 II=I+NFT
960 IF(IPOUOFF(II)/=0)THEN
961 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
962 IF(IPRI>=5) WRITE(IOUT,*)' beam deactivation:',
963 . IXP(6,II)
964 IOK = 1
965 ENDIF
966 ENDDO
967C----------------------------------------
968C TEST POUR L'ELIMINATION D'ONE GROUPE
969C----------------------------------------
970 IF(IOK == 1)THEN
971 IGOF = 1
972 DO I = 1,NEL
973 IF(GBUF%OFF(I) > ZERO) IGOF=0
974 ENDDO
975 IPARG(8,NG) = IGOF
976 END IF
977C-----------------------
978C 6. ELEMENTS RESSORTS
979C-----------------------
980.AND. ELSEIF(ITY == 6MLW/=3)THEN
981 IOK = 0
982 DO I=1,NEL
983 II=I+NFT
984 IF(IRESOFF(II)/=0)THEN
985 IF (GBUF%OFF(I) /= -TEN) GBUF%OFF(I) = -ABS(GBUF%OFF(I))
986C spring is active
987 IF(IPRI>=5) WRITE(IOUT,*)' spring deactivation:',
988 . IXR(6,II)
989 IOK = 1
990 ENDIF
991 ENDDO
992C----------------------------------------
993C TEST POUR L'ELIMINATION D'ONE GROUPE
994C----------------------------------------
995 IF(IOK == 1)THEN
996 IGOF = 1
997 DO I = 1,NEL
998 IF(GBUF%OFF(I)/=ZERO) IGOF=0
999 ENDDO
1000 IPARG(8,NG) = IGOF
1001 END IF
1002C-----------------------
1003C 7. ELEMENTS COQUES 3N
1004C-----------------------
1005.AND. ELSEIF(ITY == 7MLW/=0)THEN ! loi0, pas de off
1006 ISHFT=16
1007 IOK = 0
1008 DO I=1,NEL
1009 II=I+NFT
1010 IF(ITRIOFF(II)/=0)THEN
1011 GBUF%OFF(I)= -ABS(GBUF%OFF(I))
1012 IF(IPRI>=5) WRITE(IOUT,*)' sh_3n deactivation:',
1013 . ixtg(6,ii)
1014 iok = 1
1015 ENDIF
1016 ENDDO
1017C----------------------------------------
1018C TEST POUR L'ELIMINATION D'ONE GROUPE
1019C----------------------------------------
1020 IF(iok == 1)THEN
1021 igof = 1
1022 DO i = 1,nel
1023 ii=i+nft
1024 IF (gbuf%OFF(i) > zero) igof=0
1025 ENDDO
1026 iparg(8,ng) = igof
1027 END IF
1028C----------------------------------------
1029 ENDIF
1030 ENDDO
1031C-----------
1032 IF(ALLOCATED(itag)) DEALLOCATE(itag)
1033C
1034 RETURN
1035 END SUBROUTINE seteloff
1036
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine setrbyon(ixs, ixc, ixtg, igrnod, igrnrby, isoloff, isheoff, itrioff, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, ixq, iquaoff, knod2elq, nod2elq, lsubmodel)
subroutine seteloff(ixs, ixc, ixt, ixp, ixr, ixtg, iparg, isoloff, isheoff, itruoff, ipouoff, iresoff, itrioff, igrnrby, igrnod, elbuf_str, iquaoff, ixq)
subroutine hm_read_rbody(rby, npby, lpby, itab, itabm1, igrnod, igrsurf, ibfv, igrv, ibgr, sensors, imerge, unitab, iskn, nom_opt, numsl, knod2els, knod2elc, knod2eltg, knod2el1d, knod2elq, itagnd, icdns10, lsubmodel, icfield, lcfield)
initmumps id
integer, parameter nchartitle
integer, parameter ncharkey
integer, dimension(:), allocatable tagrby
Definition r2r_mod.F:132
subroutine hm_sz_r2r(tag, val, lsubmodel)
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)
Definition sigeps106.F:339
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 fretitl(titr, iasc, l)
Definition freform.F:620