OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_rwall_plane.F File Reference
#include "implicit_f.inc"
#include "analyse_name.inc"
#include "com04_c.inc"
#include "units_c.inc"
#include "scr03_c.inc"
#include "scr17_c.inc"
#include "param_c.inc"
#include "tabsiz_c.inc"
#include "r2r_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_rwall_plane (rwl, nprw, lprw, ifi, ms, v, itab, itabm1, x, ikine, igrnod, mfi, imerge, unitab, iddlevel, lsubmodel, rtrans, nom_opt, itagnd, nchplan, k, offs, ikine1)

Function/Subroutine Documentation

◆ hm_read_rwall_plane()

subroutine hm_read_rwall_plane ( rwl,
integer, dimension(*) nprw,
integer, dimension(*) lprw,
integer ifi,
ms,
v,
integer, dimension(*) itab,
integer, dimension(*) itabm1,
x,
integer, dimension(*) ikine,
type (group_), dimension(ngrnod), target igrnod,
integer mfi,
integer, dimension(*) imerge,
type (unit_type_), intent(in) unitab,
integer iddlevel,
type(submodel_data), dimension(nsubmod) lsubmodel,
rtrans,
integer, dimension(lnopt1,*) nom_opt,
integer, dimension(*) itagnd,
integer nchplan,
integer k,
integer offs,
integer, dimension(3*numnod) ikine1 )

Definition at line 47 of file hm_read_rwall_plane.F.

52C-------------------------------------
53C LECTURE MUR RIGIDE
54C-----------------------------------------------
55C M o d u l e s
56C-----------------------------------------------
57 USE unitab_mod
59 USE message_mod
60 USE r2r_mod
61 USE groupdef_mod
64C-----------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68C-----------------------------------------------
69C A n a l y s e M o d u l e
70C-----------------------------------------------
71#include "analyse_name.inc"
72C-----------------------------------------------
73C C o m m o n B l o c k s
74C-----------------------------------------------
75#include "com04_c.inc"
76#include "units_c.inc"
77#include "scr03_c.inc"
78#include "scr17_c.inc"
79#include "param_c.inc"
80#include "tabsiz_c.inc"
81#include "r2r_c.inc"
82C-----------------------------------------------
83C D u m m y A r g u m e n t s
84C-----------------------------------------------
85 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
86 INTEGER :: IFI,MFI,IDDLEVEL,NCHPLAN,K,OFFS
87 INTEGER :: NPRW(*), LPRW(*), ITAB(*), ITABM1(*),IKINE(*), IMERGE(*),ITAGND(*),IKINE1(3*NUMNOD)
88 TYPE(SUBMODEL_DATA) LSUBMODEL(NSUBMOD)
89 my_real :: rwl(nrwlp,*), ms(*), v(3,*), x(3,*), rtrans(ntransf,*)
90 INTEGER NOM_OPT(LNOPT1,*)
91C-----------------------------------------------
92 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
93C-----------------------------------------------
94C L o c a l V a r i a b l e s
95C-----------------------------------------------
96 INTEGER N, ITYP, ITIED, NSL, NUSER, MSR, J, I, L, IGU,IGU2, IGRS, NOSYS, IFQ, JC, UID, IFLAGUNIT,SUB_ID, SUB_INDEX
97 my_real :: dist, fric, diam, xmas, vx, vy, vz, xm1, ym1, zm1
98 my_real :: xn, x1, y1, z1, disn, x2, x3, freq, alpha, fac_m_r2r
99 CHARACTER MESS*40
100 CHARACTER(LEN=NCHARTITLE) :: TITR
101 LOGICAL :: IS_AVAILABLE
102C-----------------------------------------------
103C E x t e r n a l F u n c t i o n s
104C-----------------------------------------------
105 INTEGER USR2SYS, NGR2USR
106 INTEGER, DIMENSION(:), POINTER :: INGR2USR
107 DATA mess/'STANDARD RIGID WALL DEFINITION '/
108C=======================================================================
109C-----------------------------------------------
110! ************************** !
111! RWALL/PLANE read with hm reader !
112! ************************** !
113C-----------------------------------------------
114 is_available = .false.
115 CALL hm_option_start('/RWALL/PLANE')
116 ! Flag for RWALL type PLANE
117 ityp = 1
118 !----------------------------------------------------------------------
119 ! Loop over HM_RWALLs
120 !----------------------------------------------------------------------
121 DO n = 1+offs, nchplan+offs
122C
123 ! Reading the option
124 ! /RWALL/type/rwall_ID/node_ID
125 ! rwall_title
126 titr = ''
127 CALL hm_option_read_key(lsubmodel,
128 . option_id = nuser,
129 . unit_id = uid,
130 . submodel_index = sub_index,
131 . submodel_id = sub_id,
132 . option_titr = titr)
133C
134 nom_opt(1,n)=nuser
135 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
136C
137 ! Checking flag unit
138 iflagunit = 0
139 DO j=1,unitab%NUNITS
140 IF (unitab%UNIT_ID(j) == uid) THEN
141 iflagunit = 1
142 EXIT
143 ENDIF
144 ENDDO
145 IF (uid /= 0 .AND. iflagunit == 0) THEN
146 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
147 . i2=uid,i1=nuser,c1='RIGID WALL',
148 . c2='RIGID WALL',
149 . c3=titr)
150 ENDIF
151C
152 ! node_ID Slide grnd_ID1 grnd_ID2
153 CALL hm_get_intv('node1',NUSER,IS_AVAILABLE,LSUBMODEL)
154 CALL HM_GET_INTV('slidingflag',ITIED,IS_AVAILABLE,LSUBMODEL)
155 CALL HM_GET_INTV('nodeset_id',IGU,IS_AVAILABLE,LSUBMODEL)
156 CALL HM_GET_INTV('excludenodeset_id',IGU2,IS_AVAILABLE,LSUBMODEL)
157C
158 IF(NUSER /= 0) THEN
159 MSR = USR2SYS(NUSER,ITABM1,MESS,NUSER)
160 CALL ANODSET(MSR, CHECK_USED)
161 DO JC = 1,NMERGED
162 IF (MSR == IMERGE(JC)) MSR = IMERGE(NUMCNOD+JC)
163 ENDDO
164 ELSE
165 MSR = 0
166 ENDIF
167C
168 ! 2nd card
169 ! d fric Diameter ffac ifq
170 CALL HM_GET_FLOATV('offset' ,DIST ,IS_AVAILABLE, LSUBMODEL, UNITAB)
171 CALL HM_GET_FLOATV('fric' ,FRIC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
172 CALL HM_GET_FLOATV('diameter' ,DIAM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
173 CALL HM_GET_FLOATV('filteringfactor',FREQ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
174 CALL HM_GET_INTV('filteringflag' ,IFQ ,IS_AVAILABLE, LSUBMODEL)
175.AND. IF (FREQ == 0 IFQ /= 0) IFQ = 0
176 IF (IFQ == 0) FREQ = ONE
177 ALPHA = ZERO
178 IF (IFQ >= 0) THEN
179 IF (IFQ <= 1) ALPHA = FREQ
180 IF (IFQ == 2) ALPHA = FOUR*ATAN2(ONE,ZERO) / FREQ
181 IF (IFQ == 3) ALPHA = FOUR*ATAN2(ONE,ZERO) * FREQ
182 ENDIF
183.OR..AND. IF ((ALPHA < ZERO) ((ALPHA > ONE IFQ <= 2))) THEN
184 CALL ANCMSG(MSGID=350,ANMODE=ANINFO,MSGTYPE=MSGERROR,
185 . I1=NUSER,
186 . C1=TITR,
187 . R1=FREQ)
188 ENDIF
189 RWL(13,N) = FRIC
190 RWL(14,N) = ALPHA
191 RWL(15,N) = IFQ
192C
193 ! 3rd card
194 ! if node_ID == 0
195 IF (MSR == 0) THEN
196 ! XM YM ZM
197 CALL HM_GET_FLOATV('x' ,X1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
198 CALL HM_GET_FLOATV('y' ,X2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
199 CALL HM_GET_FLOATV('z' ,X3 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
200 IF(SUB_ID /= 0) CALL SUBROTPOINT(X1,X2,X3,RTRANS,SUB_ID,LSUBMODEL)
201 RWL(4,N) = X1
202 RWL(5,N) = X2
203 RWL(6,N) = X3
204 ! if node_ID > 0
205 ELSE IF (MSR /= 0)THEN
206 ! Mass VX0 VY0 VZ0
207 CALL HM_GET_FLOATV('mass' ,XMAS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
208 CALL HM_GET_FLOATV('motionx' ,VX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
209 CALL HM_GET_FLOATV('motiony' ,VY ,IS_AVAILABLE, LSUBMODEL, UNITAB)
210 CALL HM_GET_FLOATV('motionz' ,VZ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
211 ! Multidomains : masse of the rwall splitted between 2 domains
212 FAC_M_R2R = ONE
213 IF (NSUBDOM > 0) THEN
214 IF(TAGNO(NPART+MSR) == 4) FAC_M_R2R = HALF
215 ENDIF
216 IF(SUB_ID /= 0) CALL SUBROTVECT(VX,VY,VZ,RTRANS,SUB_ID,LSUBMODEL)
217 RWL(4,N) = X(1,MSR)
218 RWL(5,N) = X(2,MSR)
219 RWL(6,N) = X(3,MSR)
220 MS(MSR) = MS(MSR) + XMAS*FAC_M_R2R
221 V(1,MSR) = VX
222 V(2,MSR) = VY
223 V(3,MSR) = VZ
224 ENDIF
225C
226 ! 4th card (only for PLANE, CYL and PARAL)
227 ! XM1 YM1 ZM1
228 CALL HM_GET_FLOATV('xh' ,XM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
229 CALL HM_GET_FLOATV('yh' ,YM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
230 CALL HM_GET_FLOATV('zh' ,ZM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
231 IF (SUB_ID /= 0) CALL SUBROTPOINT(XM1,YM1,ZM1,RTRANS,SUB_ID,LSUBMODEL)
232C
233 ! Initialization depending on the type of interface
234 ! PLANE
235C M MUR ET MM1 NORMALE
236 RWL(1,N) = XM1-RWL(4,N)
237 RWL(2,N) = YM1-RWL(5,N)
238 RWL(3,N) = ZM1-RWL(6,N)
239 XN = SQRT(RWL(1,N)**2+RWL(2,N)**2+RWL(3,N)**2)
240 IF (XN <= EM10) THEN
241 CALL ANCMSG(MSGID=167,ANMODE=ANINFO,MSGTYPE=MSGERROR,
242 . I1=NUSER,C2='plane',C1=TITR)
243 ELSE
244 RWL(1,N) = RWL(1,N)/XN
245 RWL(2,N) = RWL(2,N)/XN
246 RWL(3,N) = RWL(3,N)/XN
247 ENDIF
248C
249 ! Looking for SECONDARY nodes
250 DO I = 1,NUMNOD
251 LPRW(K+I) = 0
252 ENDDO
253C
254 ! SECONDARY nodes at DIST from the RWALL
255 IF (DIST /= ZERO) THEN
256 DO I = 1,NUMNOD
257 X1 = (X(1,I)-RWL(4,N))*RWL(1,N)
258 Y1 = (X(2,I)-RWL(5,N))*RWL(2,N)
259 Z1 = (X(3,I)-RWL(6,N))*RWL(3,N)
260 DISN = X1+Y1+Z1
261.AND..AND. IF (DISN >= ZERO DISN <= DIST I /= MSR) LPRW(K+I)=1
262 ENDDO
263 ENDIF
264C
265 ! Node group +
266 INGR2USR => IGRNOD(1:NGRNOD)%ID
267 IGRS = NGR2USR(IGU,INGR2USR,NGRNOD)
268 IF (IGRS /= 0) THEN
269 DO J = 1,IGRNOD(IGRS)%NENTITY
270 NOSYS = IGRNOD(IGRS)%ENTITY(J)
271 LPRW(K+NOSYS) = 1
272 IF (ITAB(NOSYS) == NUSER) THEN
273 CALL ANCMSG(MSGID=637,
274 . MSGTYPE=MSGERROR,
275 . ANMODE=ANINFO_BLIND_1,
276 . I1=NUSER,
277 . C1=TITR,
278 . I2=NUSER)
279 ENDIF
280 ENDDO
281 ENDIF
282C
283 ! Node group -
284 INGR2USR => IGRNOD(1:NGRNOD)%ID
285 IGRS = NGR2USR(IGU2,INGR2USR,NGRNOD)
286 IF (IGRS /= 0) THEN
287 DO J = 1,IGRNOD(IGRS)%NENTITY
288 NOSYS = IGRNOD(IGRS)%ENTITY(J)
289 LPRW(K+NOSYS) = 0
290 ENDDO
291 ENDIF
292C
293 ! Compaction
294 NSL = 0
295 DO I = 1,NUMNOD
296 IF (LPRW(K+I) > 0) THEN
297 IF (NS10E > 0) THEN
298 IF(ITAGND(I) /= 0) CYCLE
299 ENDIF
300 NSL = NSL+1
301 LPRW(K+NSL) = I
302 IF (IDDLEVEL == 0) THEN
303 CALL KINSET(4,ITAB(I),IKINE(I),1,N+NUMSKW+1,IKINE1(I))
304 ENDIF
305 ENDIF
306 ENDDO
307 ! Itet=2 of S10
308 IF (NS10E > 0 ) CALL REMOVE_ND(NSL,LPRW(K+1),ITAGND)
309 IFI=IFI+NSL
310 IF (IFQ > 0) THEN
311 MFI=MFI+3*NSL
312 SRWSAV = SRWSAV + 3 * NSL
313 ENDIF
314C
315 ! Printing
316 IF (MSR == 0) THEN
317 WRITE(IOUT,1100) N,ITYP,ITIED,NSL
318 ELSE
319 WRITE(IOUT,1150) N,ITYP,ITIED,NSL,NUSER,XMAS,VX,VY,VZ
320 ENDIF
321C
322 WRITE(IOUT,2001)(RWL(L,N),L=4,6),(RWL(L,N),L=1,3)
323
324 IF (ITIED == 2) WRITE(IOUT,2101)FRIC,IFQ,FREQ
325 IF (IPRI >= 1) THEN
326 WRITE(IOUT,1200)
327 WRITE(IOUT,1201) (ITAB(LPRW(I+K)),I=1,NSL)
328 ENDIF
329C
330 NPRW(N) = NSL
331 NPRW(N+NRWALL) = ITIED
332 NPRW(N+2*NRWALL) = MSR
333 NPRW(N+3*NRWALL) = ITYP
334 NPRW(N+4*NRWALL) = 0
335 NPRW(N+5*NRWALL) = 0
336 K = K+NSL
337C
338 ENDDO
339C
340 ! Updating the OFFSET
341 OFFS = OFFS + NCHPLAN
342C
343 RETURN
344C
345 1100 FORMAT(/5X,'rigid wall number. . . . .',I10
346 . /10X,'rigid wall TYPE . . . . .',I10
347 . /10X,'type slide/tied/friction.',I10
348 . /10X,'number of nodes . . . . .',I10)
349 1150 FORMAT(/5X,'rigid wall number. . . . .',I10
350 . /10X,'rigid wall TYPE . . . . .',I10
351 . /10X,'type slide/tied/friction.',I10
352 . /10X,'number of nodes . . . . .',I10
353 . /10X,'wall node number. . . . .',I10
354 . /10X,'wall mass . . . . . . . .',1PG14.4
355 . /10X,'wall x-velocity . . . . .',1PG14.4
356 . /10X,'wall y-velocity . . . . .',1PG14.4
357 . /10X,'wall z-velocity . . . . .',1PG14.4)
358 1200 FORMAT(/10X,'secondary nodes : ')
359 1201 FORMAT(/10X,10I10)
360 2001 FORMAT(/5X,'infinite wall characteristics',
361 . /10X,'point m . . . . . . . . .',1P3G20.13
362 . /10X,'normal vector . . . . . .',1P3G20.13)
363 2101 FORMAT(/5X,'coulomb friction characteristics',
364 . /10X,'friction coefficient . . .',1PG14.4
365 . /10X,'filtration flag. . . . . .',I10
366 . /10X,'filtration factor. . . . .',1PG14.4)
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharkey
integer nsubmod
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