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
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,
136 . option_titr = titr)
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)
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,
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)
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
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)
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
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 IF (disn >= zero .AND. disn <= dist .AND. 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
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
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/friction.
',I10
368 . /10X,'number of nodes . . . . .
',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 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)