48 . V ,ITAB ,ITABM1 ,X ,IKINE ,
49 . IGRNOD ,MFI ,IMERGE ,UNITAB ,IDDLEVEL,
50 . LSUBMODEL,RTRANS ,NOM_OPT ,ITAGND ,NCHCYL ,
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,NCHCYL,K,OFFS
87 INTEGER NPRW(*), LPRW(*), ITAB(*), ITABM1(*),
88 . (*), IMERGE(*),ITAGND(*),IKINE1(3*NUMNOD)
91 . rwl(nrwlp,*), ms(*), v(3,*), x(3,*),
93 INTEGER NOM_OPT(LNOPT1,*)
95 TYPE (GROUP_) ,
TARGET,
DIMENSION(NGRNOD) :: IGRNOD
99 INTEGER N, ITYP, ITIED, NSL, NUSER, MSR, , I,L, IGU,IGU2, , NOSYS, IFQ, JC,UID,IFLAGUNIT,SUB_ID, SUB_INDEX
100 my_real :: DIST, FRIC, DIAM, XMAS, VX, VY, VZ, XM1, YM1, ZM1, D1, D2
101 my_real :: XN, X1, Y1, Z1, DISN, X2, Y2, Z2, X3, FREQ, ALPHA, FAC_M_R2R
103 CHARACTER(LEN=NCHARTITLE)::TITR
104 LOGICAL :: IS_AVAILABLE
108 INTEGER USR2SYS, NGR2USR
109 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
110 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
118 is_available = .false.
125 DO n = 1+offs, nchcyl+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,
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)
180 IF (freq == 0 .AND. ifq /= 0) ifq = 0
181 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=
'CYL',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
260 IF (dist /= zero)
THEN
262 x1 = (x(1,i)-rwl(4,n))*rwl(1,n)
263 y1 = (x(2,i)-rwl(5,n))*rwl(2,n)
264 z1 = (x(3,i)-rwl(6,n))*rwl(3,n)
266 x2 = (x(1,i)-rwl(4,n))**2
267 y2 = (x(2,i)-rwl(5,n))**2
268 z2 = (x(3,i)-rwl(6,n))**2
270 disn = sqrt(d2-d1**2) - half*diam
271 IF (disn >= zero .AND. disn <= dist .AND. i /= msr) lprw(k+i)=1
276 ingr2usr => igrnod(1:ngrnod)%ID
277 igrs = ngr2usr(igu,ingr2usr,ngrnod)
279 DO j = 1,igrnod(igrs)%NENTITY
280 nosys = igrnod(igrs)%ENTITY(j)
282 IF (itab(nosys) == nuser)
THEN
285 . anmode=aninfo_blind_1,
294 ingr2usr => igrnod(1:ngrnod)%ID
295 igrs = ngr2usr(igu2,ingr2usr,ngrnod)
297 DO j = 1,igrnod(igrs)%NENTITY
298 nosys = igrnod(igrs)%ENTITY(j)
306 IF (lprw(k+i) > 0)
THEN
308 IF( itagnd(i) /= 0) cycle
312 IF (iddlevel == 0)
THEN
313 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
318 IF (ns10e > 0 )
CALL remove_nd(nsl,lprw(k+1),itagnd)
322 srwsav = srwsav + 3 * nsl
327 WRITE(iout,1100) n,ityp,itied,nsl
329 WRITE(iout,1150) n,ityp,itied,nsl,nuser,xmas,vx,vy,vz
332 WRITE(iout,2002)(rwl(l,n),l=4,6),rwl(7,n),(rwl(l,n),l=1,3)
334 IF (itied == 2)
WRITE(iout,2101) fric,ifq,freq
337 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl)
341 nprw(n+nrwall) = itied
342 nprw(n+2*nrwall) = msr
343 nprw(n+3*nrwall) = ityp
355 1100
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
356 . /10x,
'RIGID WALL TYPE . . . . .',i10
357 . /10x,
'TYPE SLIDE/TIED/FRICTION.',i10
358 . /10x,
'NUMBER OF NODES . . . . .',i10)
359 1150
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .'
360 . /10x,
'RIGID WALL TYPE . . . . .',i10
361 .
'TYPE SLIDE/TIED/FRICTION.',i10
362 . /10x,
'NUMBER OF NODES . . . . .',i10
363 . /10x,
'WALL NODE NUMBER. . . . .'
364 . /10x,
'WALL MASS . . . . . . . .',1pg14.4
365 . /10x,
'WALL X-VELOCITY . . . . .',1pg14.4
366 . /10x,
'WALL Y-VELOCITY . . . . .',1pg14.4
367 . /10x,
'WALL Z-VELOCITY . . . . .',1pg14.4)
368 1200
FORMAT(/10x,
'SECONDARY NODES : ')
369 1201
FORMAT(/10x,10i10)
370 2002
FORMAT(/5x,
'CYLINDRIC WALL CHARACTERISTICS',
371 . /10x,'point m . . . . . . . . .
',1P3G20.13
372 . /10X,'cylinder diameter . . . .
',1PG14.4
373 . /10X,'axis vector . . . . . . .
',1P3G20.13)
374 2101 FORMAT(/5X,'coulomb friction characteristics
',
375 . /10X,'friction coefficient . . .
',1PG14.4
376 . /10X,'filtration flag. . . . . .
',I10
377 . /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)