48 . V ,ITAB ,ITABM1 ,X ,IKINE ,
49 . IGRNOD ,MFI ,IMERGE ,UNITAB ,IDDLEVEL,
50 . LSUBMODEL,RTRANS ,NOM_OPT ,ITAGND ,NCHSPHER,
67#include "implicit_f.inc"
71#include "analyse_name.inc"
80#include "tabsiz_c.inc"
85 TYPE (UNIT_TYPE_),
INTENT(IN) ::
86 INTEGER :: IFI,MFI,IDDLEVEL,NCHSPHER,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, , DISN, X2, Y2, Z2, X3, FREQ, ALPHA, FAC_M_R2R
99 CHARACTER(LEN=NCHARTITLE) :: TITR
100 LOGICAL :: IS_AVAILABLE
104 INTEGER USR2SYS, NGR2USR
105 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
106 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
114 is_available = .false.
122 DO n = 1+offs, nchspher+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. iflagunit == 0)
THEN
147 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
148 . i2=uid,i1=nuser,c1=
'RIGID WALL',
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)
163 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
171 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab)
172 CALL hm_get_floatv('fric
' ,FRIC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
173 CALL HM_GET_FLOATV('diameter
' ,DIAM ,IS_AVAILABLE, LSUBMODEL, UNITAB)
174 CALL HM_GET_FLOATV('filteringfactor
',FREQ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
175 CALL HM_GET_INTV('filteringflag
' ,IFQ ,IS_AVAILABLE, LSUBMODEL)
176.AND.
IF (FREQ == 0 IFQ /= 0) IFQ = 0
177 IF (IFQ == 0) FREQ = ONE
180 IF (IFQ <= 1) ALPHA = FREQ
181 IF (IFQ == 2) ALPHA = FOUR*ATAN2(ONE,ZERO) / FREQ
182 IF (IFQ == 3) ALPHA = FOUR*ATAN2(ONE,ZERO) * FREQ
184.OR..AND.
IF ((ALPHA < ZERO) ((ALPHA > ONE IFQ <= 2))) THEN
185 CALL ANCMSG(MSGID=350,ANMODE=ANINFO,MSGTYPE=MSGERROR,
198 CALL HM_GET_FLOATV('x
' ,X1 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
199 CALL HM_GET_FLOATV('y
' ,X2 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
200 CALL HM_GET_FLOATV('z
' ,X3 ,IS_AVAILABLE, LSUBMODEL, UNITAB)
201 IF(SUB_ID /= 0) CALL SUBROTPOINT(X1,X2,X3,RTRANS,SUB_ID,LSUBMODEL)
206 ELSE IF (MSR /= 0)THEN
208 CALL HM_GET_FLOATV('mass
' ,XMAS ,IS_AVAILABLE, LSUBMODEL, UNITAB)
209 CALL HM_GET_FLOATV('motionx
' ,VX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
210 CALL HM_GET_FLOATV('motiony
' ,VY ,IS_AVAILABLE, LSUBMODEL, UNITAB)
211 CALL HM_GET_FLOATV('motionz
' ,VZ ,IS_AVAILABLE, LSUBMODEL, UNITAB)
212 ! Multidomains : masse of the rwall splitted between 2 domains
214 IF (NSUBDOM > 0) THEN
215 IF(TAGNO(NPART+MSR) == 4) FAC_M_R2R = HALF
217 IF(SUB_ID /= 0) CALL SUBROTVECT(VX,VY,VZ,RTRANS,SUB_ID,LSUBMODEL)
221 MS(MSR) = MS(MSR) + XMAS*FAC_M_R2R
227 ! Initialization depending on the type of interface
230 ! Looking for SECONDARY nodes
235 ! SECONDARY nodes at DIST from the RWALL
236 IF (DIST /= ZERO) THEN
238 X2 = (X(1,I)-RWL(4,N))**2
239 Y2 = (X(2,I)-RWL(5,N))**2
240 Z2 = (X(3,I)-RWL(6,N))**2
241 DISN = SQRT(X2+Y2+Z2)- HALF*DIAM
242.AND..AND.
IF (DISN >= ZERO DISN <= DIST I /= MSR) LPRW(K+I)=1
247 INGR2USR => IGRNOD(1:NGRNOD)%ID
248 IGRS = NGR2USR(IGU,INGR2USR,NGRNOD)
250 DO J = 1,IGRNOD(IGRS)%NENTITY
251 NOSYS = IGRNOD(IGRS)%ENTITY(J)
253 IF (ITAB(NOSYS) == NUSER) THEN
254 CALL ANCMSG(MSGID=637,
256 . ANMODE=ANINFO_BLIND_1,
265 INGR2USR => IGRNOD(1:NGRNOD)%ID
266 IGRS = NGR2USR(IGU2,INGR2USR,NGRNOD)
268 DO J = 1,IGRNOD(IGRS)%NENTITY
269 NOSYS = IGRNOD(IGRS)%ENTITY(J)
277 IF (LPRW(K+I) > 0) THEN
279 IF( ITAGND(I) /= 0) CYCLE
283 IF (IDDLEVEL == 0) THEN
284 CALL KINSET(4,ITAB(I),IKINE(I),1,N+NUMSKW+1,IKINE1(I))
289 IF (NS10E > 0 ) CALL REMOVE_ND(NSL,LPRW(K+1),ITAGND)
293 SRWSAV = SRWSAV + 3 * NSL
298 WRITE(IOUT,1100) N,ITYP,ITIED,NSL
300 WRITE(IOUT,1150) N,ITYP,ITIED,NSL,NUSER,XMAS,VX,VY,VZ
303 WRITE(IOUT,2003)(RWL(L,N),L=4,6),RWL(7,N)
305 IF (ITIED == 2) WRITE(IOUT,2101)FRIC,IFQ,FREQ
308 WRITE(IOUT,1201) (ITAB(LPRW(I+K)),I=1,NSL)
312 NPRW(N+NRWALL) = ITIED
313 NPRW(N+2*NRWALL) = MSR
314 NPRW(N+3*NRWALL) = ITYP
321 ! Updating the OFFSET
322 OFFS = OFFS + NCHSPHER
326 1100 FORMAT(/5X,'rigid wall number. . . . .
',I10
327 . /10X,'rigid wall
TYPE . . . . .
',I10
328 . /10X,'type slide/tied/friction.
',I10
329 . /10X,'number of nodes . . . . .
',I10)
330 1150 FORMAT(/5X,'rigid wall number. . . . .
',I10
331 . /10X,'rigid wall
TYPE . . . . .
',I10
332 . /10X,'type slide/tied/friction.
',I10
333 . /10X,'number of nodes . . . . .
',I10
334 . /10X,'wall node number. . . . .
',I10
335 . /10X,'wall mass . . . . . . . .
',1PG14.4
336 . /10X,'wall x-velocity . . . . .
',1PG14.4
337 . /10X,'wall y-velocity . . . . .
',1PG14.4
338 . /10X,'wall z-velocity . . . . .
',1PG14.4)
339 1200 FORMAT(/10X,'secondary nodes :
')
340 1201 FORMAT(/10X,10I10)
341 2003 FORMAT(/5X,'spherical wall characteristics
',
342 . /10X,'point m . . . . . . . . .
',1P3G20.13
343 . /10X,'sphere diameter . . . . .
',1PG14.4)
344 2101 FORMAT(/5X,'coulomb friction characteristics
',
345 . /10X,'friction coefficient . . .
',1PG14.4
346 . /10X,'filtration flag. . . . . .
',I10
347 . /10X,'filtration factor. . . . .
',1PG14.4)
subroutine hm_read_rwall_spher(rwl, nprw, lprw, ifi, ms, v, itab, itabm1, x, ikine, igrnod, mfi, imerge, unitab, iddlevel, lsubmodel, rtrans, nom_opt, itagnd, nchspher, 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)