48 . V ,ITAB ,ITABM1 ,X ,IKINE ,
49 . IGRNOD ,MFI ,IMERGE ,UNITAB ,IDDLEVEL,
50 . LSUBMODEL,RTRANS ,NOM_OPT ,ITAGND ,NCHPARAL,
67#include "implicit_f.inc"
71#include "analyse_name.inc"
80#include "tabsiz_c.inc"
85 TYPE (UNIT_TYPE_),
INTENT(IN) :: UNITAB
86 INTEGER :: IFI,MFI,IDDLEVEL,NCHPARAL,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,*)
92 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
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, XM2, YM2, VN
98 my_real :: ZM2, XN, X1, Y1, Z1, DISN, X2, X3, FREQ, ALPHA, FAC_M_R2R
100 CHARACTER(LEN=NCHARTITLE) :: TITR
101 LOGICAL :: IS_AVAILABLE
106 INTEGER USR2SYS, NGR2USR
107 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
108 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
115 is_available = .false.
122 DO n = 1+offs, nchparal+offs
131 . submodel_index = sub_index,
132 . submodel_id = sub_id,
133 . option_titr = titr)
136 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
141 IF (unitab%UNIT_ID(j) == uid
THEN
146 IF (uid /= 0 .AND.
THEN
147 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
154 CALL hm_get_intv(
'Node1',nuser,is_available,lsubmodel)
155 CALL hm_get_intv(
'slidingflag',itied,is_available,lsubmodel)
156 CALL hm_get_intv(
'NodeSet_ID',igu,is_available,lsubmodel)
157 CALL hm_get_intv(
'excludeNodeSet_ID',igu2,is_available,lsubmodel)
158 CALL hm_get_intv(
'Iform',ipen,is_available,lsubmodel)
161 msr = usr2sys(nuser,itabm1,mess,nuser)
164 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
172 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab)
173 CALL hm_get_floatv(
'fric' ,fric ,is_available, lsubmodel, unitab)
174 CALL hm_get_floatv(
'Diameter' ,diam ,is_available, lsubmodel, unitab)
175 CALL hm_get_floatv('filteringfactor
',FREQ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
176 CALL HM_GET_INTV('filteringflag
' ,IFQ ,IS_AVAILABLE, LSUBMODEL)
177.AND.
IF (FREQ == 0 IFQ /= 0) IFQ = 0
178 IF (IFQ == 0) FREQ = ONE
181 IF (IFQ <= 1) ALPHA = FREQ
182 IF (IFQ == 2) ALPHA = FOUR*ATAN2(ONE,ZERO) / FREQ
183 IF (IFQ == 3) ALPHA = FOUR*ATAN2(ONE,ZERO) * FREQ
185.OR..AND.
IF ((ALPHA < ZERO) ((ALPHA > ONE IFQ <= 2))) THEN
186 CALL ANCMSG(MSGID=350,ANMODE=ANINFO,MSGTYPE=MSGERROR,
199 CALL HM_GET_FLOATV('x
' ,X1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
200 CALL HM_GET_FLOATV('y
' ,X2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
201 CALL HM_GET_FLOATV('z
' ,X3 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
202 IF(SUB_ID /= 0) CALL SUBROTPOINT(X1,X2,X3,RTRANS,SUB_ID,LSUBMODEL)
210 ELSE IF (MSR /= 0)THEN
212 CALL HM_GET_FLOATV('mass
' ,XMAS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
213 CALL HM_GET_FLOATV('motionx
' ,VX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
214 CALL HM_GET_FLOATV('motiony
' ,VY ,IS_AVAILABLE, LSUBMODEL, UNITAB)
215 CALL HM_GET_FLOATV('motionz
' ,VZ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
216 ! Multidomains : masse of the rwall splitted between 2 domains
218 IF (NSUBDOM > 0) THEN
219 IF(TAGNO(NPART+MSR) == 4) FAC_M_R2R = HALF
221 IF(SUB_ID /= 0) CALL SUBROTVECT(VX,VY,VZ,RTRANS,SUB_ID,LSUBMODEL)
225 MS(MSR) = MS(MSR) + XMAS*FAC_M_R2R
231 ! 4th card (only for PLANE, CYL and PARAL)
233 CALL HM_GET_FLOATV('cnode1_x
' ,XM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
234 CALL HM_GET_FLOATV('cnode1_y
' ,YM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
235 CALL HM_GET_FLOATV('cnode1_z
' ,ZM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
236 IF(SUB_ID /= 0) CALL SUBROTPOINT(XM1,YM1,ZM1,RTRANS,SUB_ID,LSUBMODEL)
238 ! 5th card (only for PARAL)
240 CALL HM_GET_FLOATV('cnode2_x
' ,XM2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
241 CALL HM_GET_FLOATV('cnode2_y
' ,YM2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
242 CALL HM_GET_FLOATV('cnode2_z
' ,ZM2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
243 IF(SUB_ID /= 0) CALL SUBROTPOINT(XM2,YM2,ZM2,RTRANS,SUB_ID,LSUBMODEL)
245 ! Initialization depending on the type of interface
247 RWL(1,N) = (YM1-RWL(5,N))*(ZM2-RWL(6,N))
248 . - (ZM1-RWL(6,N))*(YM2-RWL(5,N))
249 RWL(2,N) = (ZM1-RWL(6,N))*(XM2-RWL(4,N))
250 . - (XM1-RWL(4,N))*(ZM2-RWL(6,N))
251 RWL(3,N) = (XM1-RWL(4,N))*(YM2-RWL(5,N))
252 . - (YM1-RWL(5,N))*(XM2-RWL(4,N))
253 XN = SQRT(RWL(1,N)**2+RWL(2,N)**2+RWL(3,N)**2)
255 CALL ANCMSG(MSGID=168,ANMODE=ANINFO,MSGTYPE=MSGERROR,
256 . I1=NUSER,C2='paral
',C1=TITR)
258 RWL(1,N) = RWL(1,N)/XN
259 RWL(2,N) = RWL(2,N)/XN
260 RWL(3,N) = RWL(3,N)/XN
262 RWL(7,N) = XM1-RWL(4,N)
263 RWL(8,N) = YM1-RWL(5,N)
264 RWL(9,N) = ZM1-RWL(6,N)
265 RWL(10,N) = XM2-RWL(4,N)
266 RWL(11,N) = YM2-RWL(5,N)
267 RWL(12,N) = ZM2-RWL(6,N)
269 ! Looking for SECONDARY nodes
274 ! SECONDARY nodes at DIST from the RWALL
275 IF (DIST /= ZERO) THEN
277 X1 = (X(1,I)-RWL(4,N))*RWL(1,N)
278 Y1 = (X(2,I)-RWL(5,N))*RWL(2,N)
279 Z1 = (X(3,I)-RWL(6,N))*RWL(3,N)
281.AND..AND.
IF (DISN >= ZERO DISN <= DIST I /= MSR) LPRW(K+I)=1
286 INGR2USR => IGRNOD(1:NGRNOD)%ID
287 IGRS = NGR2USR(IGU,INGR2USR,NGRNOD)
289 DO J = 1,IGRNOD(IGRS)%NENTITY
290 NOSYS = IGRNOD(IGRS)%ENTITY(J)
292 IF (ITAB(NOSYS) == NUSER) THEN
293 CALL ANCMSG(MSGID=637,
295 . ANMODE=ANINFO_BLIND_1,
304 INGR2USR => IGRNOD(1:NGRNOD)%ID
305 IGRS = NGR2USR(IGU2,INGR2USR,NGRNOD)
307 DO J = 1,IGRNOD(IGRS)%NENTITY
308 NOSYS = IGRNOD(IGRS)%ENTITY(J)
316 IF (LPRW(K+I) > 0) THEN
317.AND.
IF (NS10E > 0 IPEN==0) THEN
318 IF(ITAGND(I) /= 0) CYCLE
322.AND.
IF (IDDLEVEL == 0 IPEN==0) THEN
323 CALL KINSET(4,ITAB(I),IKINE(I),1,N+NUMSKW+1,IKINE1(I))
328.AND.
IF (NS10E > 0 IPEN==0) CALL REMOVE_ND(NSL,LPRW(K+1),ITAGND)
332 SRWSAV = SRWSAV + 3 * NSL
337 WRITE(IOUT,1100) N,ITYP,ITIED,NSL
339 WRITE(IOUT,1150) N,ITYP,ITIED,NSL,NUSER,XMAS,VX,VY,VZ
341 IF (IPEN > 0) WRITE(IOUT,2500)
343 WRITE(IOUT,2004)(RWL(L,N),L=4,6),(RWL(L,N),L=7,9),
346 IF (ITIED == 2) WRITE(IOUT,2101) FRIC,IFQ,FREQ
349 WRITE(IOUT,1201) (ITAB(LPRW(I+K)),I=1,NSL)
353 NPRW(N+NRWALL) = ITIED
354 NPRW(N+2*NRWALL) = MSR
355 NPRW(N+3*NRWALL) = ITYP
358 NPRW(N+8*NRWALL) = IPEN
360 VN = VX*RWL(1,N)+VY*RWL(2,N)+VZ*RWL(3,N)
369 ! Updating the OFFSET
370 OFFS = OFFS + NCHPARAL
374 1100 FORMAT(/5X,'rigid wall number. . . . .
',I10
375 . /10X,'rigid wall
TYPE . . . . .
',I10
376 . /10X,'type slide/tied/friction.
',I10
377 . /10X,'number of nodes . . . . .
',I10)
378 1150 FORMAT(/5X,'rigid wall number. . . . .
',I10
379 . /10X,'rigid wall
TYPE . . . . .
',I10
380 . /10X,'type slide/tied/friction.
',I10
381 . /10X,'number of nodes . . . . .
',I10
382 . /10X,'wall node number. . . . .
',I10
383 . /10X,'wall mass . . . . . . . .
',1PG14.4
385 . /10x,
'WALL Y-VELOCITY . . . . .',1pg14.4
386 . /10x,
'WALL Z-VELOCITY . . . . .',1pg14.4)
387 1200
FORMAT(/10x,
'SECONDARY NODES : ')
388 1201
FORMAT(/10x,10i10)
389 2004
FORMAT(/5x,
'PARALLELOGRAMM WALL CHARACTERISTICS',
390 . /10x,
'POINT M . . . . . . . . .',1p3g20.13
391 . /10x,
'MM1 VECTOR. . . . . . . .'
392 . /10x,
'MM2 VECTOR. . . . . . . .',1p3g20.13)
393 2101
FORMAT(/5x,
'COULOMB FRICTION CHARACTERISTICS',
394 . /10x,
'FRICTION COEFFICIENT . . .',1pg14.4
395 . /10x,
'FILTRATION FLAG. . . . . .',i10
396 . /10x,
'FILTRATION FACTOR. . . . .',1pg14.4)
397 2500
FORMAT(/5x,
'RIGID WALL FORMULATION : PENALTY'/)
subroutine hm_read_rwall_paral(rwl, nprw, lprw, ifi, ms, v, itab, itabm1, x, ikine, igrnod, mfi, imerge, unitab, iddlevel, lsubmodel, rtrans, nom_opt, itagnd, nchparal, k, offs, ikine1)
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)