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, , I,L, IGU,IGU2, IGRS, , IFQ, JC,UID,IFLAGUNIT,SUB_ID, SUB_INDEX
97 my_real :: DIST, , DIAM, XMAS, VX, VY, , XM1, YM1, ZM1, XM2, YM2, VN
98 my_real :: ZM2, XN, X1, Y1, , DISN, X2, X3, FREQ, ALPHA, FAC_M_R2R
100 CHARACTER(LEN=NCHARTITLE) :: TITR
101 LOGICAL :: IS_AVAILABLE
106 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
107 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
114 is_available = .false.
121 DO n = 1+offs, nchparal+offs
130 . submodel_index = sub_index,
131 . submodel_id = sub_id,
132 . option_titr = titr)
135 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
140 IF (unitab%UNIT_ID(j) == uid)
THEN
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',
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)
159 msr = usr2sys(nuser,itabm1,mess,nuser)
162 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
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
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
183.OR..AND.
IF ((ALPHA < ZERO) ((ALPHA > ONE IFQ <= 2))) THEN
184 CALL ANCMSG(MSGID=350,ANMODE=ANINFO,MSGTYPE=MSGERROR,
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)
208 ELSE IF (MSR /= 0)THEN
210 CALL HM_GET_FLOATV('mass
' ,XMAS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
211 CALL HM_GET_FLOATV('motionx
' ,VX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
212 CALL HM_GET_FLOATV('motiony
' ,VY ,IS_AVAILABLE, LSUBMODEL, UNITAB)
213 CALL HM_GET_FLOATV('motionz
' ,VZ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
214 ! Multidomains : masse of the rwall splitted between 2 domains
216 IF (NSUBDOM > 0) THEN
217 IF(TAGNO(NPART+MSR) == 4) FAC_M_R2R = HALF
219 IF(SUB_ID /= 0) CALL SUBROTVECT(VX,VY,VZ,RTRANS,SUB_ID,LSUBMODEL)
223 MS(MSR) = MS(MSR) + XMAS*FAC_M_R2R
229 ! 4th card (only for PLANE, CYL and PARAL)
231 CALL HM_GET_FLOATV('cnode1_x
' ,XM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
232 CALL HM_GET_FLOATV('cnode1_y
' ,YM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
233 CALL HM_GET_FLOATV('cnode1_z
' ,ZM1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
234 IF(SUB_ID /= 0) CALL SUBROTPOINT(XM1,YM1,ZM1,RTRANS,SUB_ID,LSUBMODEL)
236 ! 5th card (only for PARAL)
238 CALL HM_GET_FLOATV('cnode2_x
' ,XM2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
239 CALL HM_GET_FLOATV('cnode2_y
' ,YM2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
240 CALL HM_GET_FLOATV('cnode2_z
' ,ZM2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
241 IF(SUB_ID /= 0) CALL SUBROTPOINT(XM2,YM2,ZM2,RTRANS,SUB_ID,LSUBMODEL)
243 ! Initialization depending on the type of interface
245 RWL(1,N) = (YM1-RWL(5,N))*(ZM2-RWL(6,N))
246 . - (ZM1-RWL(6,N))*(YM2-RWL(5,N))
247 RWL(2,N) = (ZM1-RWL(6,N))*(XM2-RWL(4,N))
248 . - (XM1-RWL(4,N))*(ZM2-RWL(6,N))
249 RWL(3,N) = (XM1-RWL(4,N))*(YM2-RWL(5,N))
250 . - (YM1-RWL(5,N))*(XM2-RWL(4,N))
251 XN = SQRT(RWL(1,N)**2+RWL(2,N)**2+RWL(3,N)**2)
253 CALL ANCMSG(MSGID=168,ANMODE=ANINFO,MSGTYPE=MSGERROR,
254 . I1=NUSER,C2='paral
',C1=TITR)
256 RWL(1,N) = RWL(1,N)/XN
257 RWL(2,N) = RWL(2,N)/XN
258 RWL(3,N) = RWL(3,N)/XN
260 RWL(7,N) = XM1-RWL(4,N)
261 RWL(8,N) = YM1-RWL(5,N)
262 RWL(9,N) = ZM1-RWL(6,N)
263 RWL(10,N) = XM2-RWL(4,N)
264 RWL(11,N) = YM2-RWL(5,N)
265 RWL(12,N) = ZM2-RWL(6,N)
267 ! Looking for SECONDARY nodes
272 ! SECONDARY nodes at DIST from the RWALL
273 IF (DIST /= ZERO) THEN
275 X1 = (X(1,I)-RWL(4,N))*RWL(1,N)
276 Y1 = (X(2,I)-RWL(5,N))*RWL(2,N)
277 Z1 = (X(3,I)-RWL(6,N))*RWL(3,N)
279.AND..AND.
IF (DISN >= ZERO DISN <= DIST I /= MSR) LPRW(K+I)=1
284 INGR2USR => IGRNOD(1:NGRNOD)%ID
285 IGRS = NGR2USR(IGU,INGR2USR,NGRNOD)
287 DO J = 1,IGRNOD(IGRS)%NENTITY
288 NOSYS = IGRNOD(IGRS)%ENTITY(J)
290 IF (ITAB(NOSYS) == NUSER) THEN
291 CALL ANCMSG(MSGID=637,
293 . ANMODE=ANINFO_BLIND_1,
302 INGR2USR => IGRNOD(1:NGRNOD)%ID
303 IGRS = NGR2USR(IGU2,INGR2USR,NGRNOD)
305 DO J = 1,IGRNOD(IGRS)%NENTITY
306 NOSYS = IGRNOD(IGRS)%ENTITY(J)
314 IF (LPRW(K+I) > 0) THEN
316 IF(ITAGND(I) /= 0) CYCLE
320 IF (IDDLEVEL == 0) THEN
321 CALL KINSET(4,ITAB(I),IKINE(I),1,N+NUMSKW+1,IKINE1(I))
326 IF (NS10E > 0 ) CALL REMOVE_ND(NSL,LPRW(K+1),ITAGND)
330 SRWSAV = SRWSAV + 3 * NSL
335 WRITE(IOUT,1100) N,ITYP,ITIED,NSL
337 WRITE(IOUT,1150) N,ITYP,ITIED,NSL,NUSER,XMAS,VX,VY,VZ
340 WRITE(IOUT,2004)(RWL(L,N),L=4,6),(RWL(L,N),L=7,9),
343 IF (ITIED == 2) WRITE(IOUT,2101) FRIC,IFQ,FREQ
346 WRITE(IOUT,1201) (ITAB(LPRW(I+K)),I=1,NSL)
350 NPRW(N+NRWALL) = ITIED
351 NPRW(N+2*NRWALL) = MSR
352 NPRW(N+3*NRWALL) = ITYP
356 VN = VX*RWL(1,N)+VY*RWL(2,N)+VZ*RWL(3,N)
365 ! Updating the OFFSET
366 OFFS = OFFS + NCHPARAL
370 1100 FORMAT(/5X,'rigid wall number. . . . .
',I10
371 . /10X,'rigid wall
TYPE . . . . .
',I10
372 . /10X,'type slide/tied/friction.
',I10
373 . /10X,'number of nodes . . . . .
',I10)
374 1150 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 . /10X,'wall node number. . . . .
',I10
379 . /10X,'wall mass . . . . . . . .
',1PG14.4
380 . /10X,'wall x-velocity . . . . .
',1PG14.4
381 . /10X,'wall y-velocity . . . . .
',1PG14.4
382 . /10X,'wall z-velocity . . . . .
',1PG14.4)
383 1200 FORMAT(/10X,'secondary nodes :
')
384 1201 FORMAT(/10X,10I10)
385 2004 FORMAT(/5X,'parallelogramm wall characteristics
',
386 . /10X,'point m . . . . . . . . .
',1P3G20.13
387 . /10X,'mm1 vector. . . . . . . .
',1P3G20.13
388 . /10X,'mm2 vector. . . . . . . .
',1P3G20.13)
389 2101 FORMAT(/5X,'coulomb friction characteristics
',
390 . /10X,'friction coefficient . . .
',1PG14.4
391 . /10X,'filtration flag. . . . . .
',I10
392 . /10X,'filtration factor. . . . .
',1PG14.4)
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)