48 . V ,ITAB ,ITABM1 ,X ,IKINE ,
49 . IGRNOD ,MFI ,IMERGE ,UNITAB ,IDDLEVEL,
50 . LSUBMODEL,RTRANS ,NOM_OPT ,ITAGND ,NCHLAGM ,
67#include "implicit_f.inc"
71#include "analyse_name.inc"
81#include "tabsiz_c.inc"
86 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
87 INTEGER IFI,MFI,IDDLEVEL,NCHLAGM,K,OFFS
88 INTEGER NPRW(*), LPRW(*), ITAB(*), ITABM1(*),
89 . IKINE(*), IMERGE(*),ITAGND(*),IKINE1LAG(*)
92 . rwl(nrwlp,*), ms(*), v(3,*), x(3,*),
94 INTEGER NOM_OPT(LNOPT1,*)
96 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
100 INTEGER N, ITYP, ITIED, NSL, NUSER, MSR, J, I,L, IGU,IGU2, IGRS, NOSYS, IFQ, JC, UID,IFLAGUNIT,SUB_ID, SUB_INDEX
101 my_real :: DIST, FRIC, DIAM, XMAS, VX, VY, VZ, XM1, YM1, ZM1
102 my_real :: XN, X1, Y1, Z1, DISN, X2, X3, FREQ, ALPHA, FAC_M_R2R
104 CHARACTER(LEN=NCHARTITLE) :: TITR
105 LOGICAL :: IS_AVAILABLE
109 INTEGER USR2SYS, NGR2USR
110 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
111 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
118 is_available = .false.
125 DO n = 1+offs, nchlagm+offs
134 . submodel_index = sub_index,
135 . submodel_id = sub_id,
139 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr
144 IF (unitab%UNIT_ID(j) == uid
THEN
149 IF (uid /= 0 .AND. iflagunit == 0)
THEN
150 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
151 . i2=uid,i1=nuser,c1=
'RIGID WALL',
157 CALL hm_get_intv(
'Node1',nuser,is_available,lsubmodel)
158 CALL hm_get_intv(
'slidingflag',itied,is_available,lsubmodel)
159 CALL hm_get_intv(
'NodeSet_ID',igu,is_available,lsubmodel)
160 CALL hm_get_intv(
'excludeNodeSet_ID',igu2,is_available,lsubmodel)
163 msr = usr2sys(nuser,itabm1,mess,nuser)
166 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
174 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab)
175 CALL hm_get_floatv(
'fric' ,fric ,is_available, lsubmodel, unitab)
176 CALL hm_get_floatv(
'Diameter' ,diam ,is_available, lsubmodel, unitab)
177 CALL hm_get_floatv(
'Filteringfactor',freq ,is_available, lsubmodel, unitab)
178 CALL hm_get_intv(
'Filteringflag' ,ifq ,is_available, lsubmodel)
179 IF (freq == 0 .AND. ifq /= 0) ifq = 0
180 IF (ifq == 0) freq = one
183 IF (ifq <= 1) alpha = freq
184 IF (ifq == 2) alpha = four*atan2(one,zero) / freq
185 IF (ifq == 3) alpha = four*atan2(one,zero) * freq
187 IF ((alpha < zero) .OR. ((alpha > one .AND. ifq <= 2)))
THEN
188 CALL ancmsg(msgid=350,anmode=aninfo,msgtype=msgerror,
202 CALL HM_GET_FLOATV('y
' ,X2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
203 CALL HM_GET_FLOATV('z
' ,X3 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
204 IF(SUB_ID /= 0) CALL SUBROTPOINT(X1,X2,X3,RTRANS,SUB_ID,LSUBMODEL)
209 ELSE IF (MSR /= 0)THEN
211 CALL HM_GET_FLOATV('mass
' ,XMAS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
212 CALL HM_GET_FLOATV('motionx
' ,VX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
213 CALL HM_GET_FLOATV('motiony
' ,VY ,IS_AVAILABLE, LSUBMODEL, UNITAB)
214 CALL HM_GET_FLOATV('motionz
' ,VZ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
215 ! Multidomains : masse of the rwall splitted between 2 domains
217 IF (NSUBDOM > 0) THEN
218 IF(TAGNO(NPART+MSR) == 4) FAC_M_R2R = HALF
220 IF(SUB_ID /= 0) CALL SUBROTVECT(VX,VY,VZ,RTRANS,SUB_ID,LSUBMODEL)
224 MS(MSR) = MS(MSR) + XMAS*FAC_M_R2R
230 ! 4th card (only for PLANE, CYL and PARAL)
232 CALL HM_GET_FLOATV('xh
' ,XM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
233 CALL HM_GET_FLOATV('yh
' ,YM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
234 CALL HM_GET_FLOATV('zh
' ,ZM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
235 IF (SUB_ID /= 0) CALL SUBROTPOINT(XM1,YM1,ZM1,RTRANS,SUB_ID,LSUBMODEL)
237 ! Initialization depending on the type of interface
240 RWL(1,N) = XM1-RWL(4,N)
241 RWL(2,N) = YM1-RWL(5,N)
242 RWL(3,N) = ZM1-RWL(6,N)
243 XN = SQRT(RWL(1,N)**2+RWL(2,N)**2+RWL(3,N)**2)
245 CALL ANCMSG(MSGID=167,ANMODE=ANINFO,MSGTYPE=MSGERROR,
246 . I1=NUSER,C2='plane
',C1=TITR)
248 RWL(1,N) = RWL(1,N)/XN
249 RWL(2,N) = RWL(2,N)/XN
250 RWL(3,N) = RWL(3,N)/XN
253 ! Looking for SECONDARY nodes
258 ! SECONDARY nodes at DIST from the RWALL
259 IF (DIST /= ZERO) THEN
261 X1 = (X(1,I)-RWL(4,N))*RWL(1,N)
262 Y1 = (X(2,I)-RWL(5,N))*RWL(2,N)
263 Z1 = (X(3,I)-RWL(6,N))*RWL(3,N)
265.AND..AND.
IF (DISN >= ZERO DISN <= DIST I /= MSR) LPRW(K+I)=1
270 INGR2USR => IGRNOD(1:NGRNOD)%ID
271 IGRS = NGR2USR(IGU,INGR2USR,NGRNOD)
273 DO J = 1,IGRNOD(IGRS)%NENTITY
274 NOSYS = IGRNOD(IGRS)%ENTITY(J)
276 IF (ITAB(NOSYS) == NUSER) THEN
277 CALL ANCMSG(MSGID=637,
279 . ANMODE=ANINFO_BLIND_1,
288 INGR2USR => IGRNOD(1:NGRNOD)%ID
289 IGRS = NGR2USR(IGU2,INGR2USR,NGRNOD)
291 DO J = 1,IGRNOD(IGRS)%NENTITY
292 NOSYS = IGRNOD(IGRS)%ENTITY(J)
300 IF (LPRW(K+I) > 0) THEN
302 IF(ITAGND(I) /= 0) CYCLE
306 IF (IDDLEVEL == 0) THEN
307 CALL KINSET(512,ITAB(I),IKINE(I),7,0,IKINE1LAG(I))
312 IF (NS10E > 0 ) CALL REMOVE_ND(NSL,LPRW(K+1),ITAGND)
316 SRWSAV = SRWSAV + 3 * NSL
321 WRITE(IOUT,1100) N,ITYP,ITIED,NSL
323 WRITE(IOUT,1150) N,ITYP,ITIED,NSL,NUSER,XMAS,VX,VY,VZ
327 WRITE(IOUT,2001)(RWL(L,N),L=4,6),(RWL(L,N),L=1,3)
329 IF (ITIED == 2) WRITE(IOUT,2101)FRIC,IFQ,FREQ
332 WRITE(IOUT,1201) (ITAB(LPRW(I+K)),I=1,NSL)
336 NPRW(N+NRWALL) = ITIED
337 NPRW(N+2*NRWALL) = MSR
338 NPRW(N+3*NRWALL) = ITYP
341 NRWLAG = MAX(NRWLAG,NSL)
344 LAG_NKL=LAG_NKL+NSL*3
345 ELSE IF (ITIED == 1) THEN
346 LAG_NCL=LAG_NCL+NSL*3
347 LAG_NKL=LAG_NKL+NSL*3
350 LAG_NKL=LAG_NKL+NSL*3
356 ! Updating the OFFSET
357 OFFS = OFFS + NCHLAGM
361 1100 FORMAT(/5X,'rigid wall number. . . . .
',I10
362 . /10X,'rigid wall
TYPE . . . . .
',I10
363 . /10X,'type slide/tied/friction.
',I10
364 . /10X,'number of nodes . . . . .
',I10)
365 1150 FORMAT(/5X,'rigid wall number. . . . .
',I10
366 . /10X,'rigid wall
TYPE . . . . .
',I10
367 . /10X,'type slide/tied
',I10
368 . /10X,'number of
',I10
369 . /10X,'wall node number
',I10
370 . /10X,'wall mass . . . . . . . .
',1PG14.4
371 . /10X,'wall x-velocity . . . . .
',1PG14.4
372 . /10X,'wall y-velocity . . . . .
',1PG14.4
373 . /10X,'wall z-velocity . . . . .
',1PG14.4)
374 1160 FORMAT(10X,'lagrange multiplier option
')
375 1200 FORMAT(/10X,'secondary nodes :
')
376 1201 FORMAT(/10X,10I10)
377 2001 FORMAT(/5X,'infinite wall characteristics
',
378 . /10X,'point m . . . . . . . .
',1P3G20.13
379 . /10X,'normal vector . . . . . .
',1P3G20.13)
380 2101 FORMAT(/5X,'coulomb friction characteristics
',
381 . /10X,'friction coefficient . . .
',1PG14.4
382 . /10X,'filtration flag. . . . . .
',I10
383 . /10X,'filtration factor. . . . .
',1PG14.4)
subroutine hm_read_rwall_lagmul(rwl, nprw, lprw, ifi, ms, v, itab, itabm1, x, ikine, igrnod, mfi, imerge, unitab, iddlevel, lsubmodel, rtrans, nom_opt, itagnd, nchlagm, k, offs, ikine1lag)
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)