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 . IKINE(*), 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
101, Z2, X3, FREQ, ALPHA, FAC_M_R2R
103 CHARACTER(LEN=NCHARTITLE)::TITR
104 LOGICAL :: IS_AVAILABLE
109 INTEGER USR2SYS, NGR2USR
110 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
111 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
119 is_available = .false.
126 DO n = 1+offs, nchcyl+offs
135 . submodel_index = sub_index,
136 . submodel_id = sub_id,
137 . option_titr = titr)
140 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
145 IF (unitab%UNIT_ID(j) == uid)
THEN
150 IF (uid /= 0 .AND. iflagunit == 0)
THEN
151 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
152 . i2=uid,i1=nuser,c1=
'RIGID WALL',
158 CALL hm_get_intv(
'Node1',nuser,is_available,lsubmodel)
159 CALL hm_get_intv(
'slidingflag',itied,is_available,lsubmodel)
160 CALL hm_get_intv(
'NodeSet_ID',igu,is_available,lsubmodel)
161 CALL hm_get_intv(
'excludeNodeSet_ID',igu2,is_available,lsubmodel)
162 CALL hm_get_intv(
'Iform',ipen,is_available,lsubmodel)
165 msr = usr2sys(nuser,itabm1,mess,nuser)
168 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
176 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab
177 CALL hm_get_floatv(
'fric' ,fric ,is_available, lsubmodel, unitab)
178 CALL hm_get_floatv(
'Diameter' ,diam ,is_available, lsubmodel, unitab)
179 CALL hm_get_floatv(
'Filteringfactor',freq ,is_available, lsubmodel, unitab)
182 IF (freq == 0 .AND. ifq /= 0) ifq = 0
183 IF (ifq == 0) freq = one
185 IF (ifq <= 1) alpha = freq
186 IF (ifq == 2) alpha = four*atan2(one,zero) / freq
187 IF (ifq == 3) alpha = four*atan2(one,zero) * freq
189 IF ((alpha < zero) .OR. ((alpha > one .AND. ifq <= 2)))
THEN
190 CALL ancmsg(msgid=350,anmode=aninfo,msgtype=msgerror,
206 IF(sub_id /= 0)
CALL subrotpoint(x1,x2,x3,rtrans,sub_id,lsubmodel)
211 ELSE IF (msr /= 0)
THEN
213 CALL hm_get_floatv(
'Mass' ,xmas ,is_available, lsubmodel, unitab
214 CALL hm_get_floatv(
'motionx' ,vx ,is_available, lsubmodel, unitab)
215 CALL hm_get_floatv(
'motiony' ,vy ,is_available, lsubmodel, unitab)
216 CALL hm_get_floatv(
'motionz' ,vz ,is_available, lsubmodel, unitab)
219 IF (nsubdom > 0)
THEN
220 IF(
tagno(npart+msr) == 4) fac_m_r2r = half
222 IF(sub_id /= 0)
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
226 ms(msr) = ms(msr) + xmas*fac_m_r2r
234 CALL hm_get_floatv(
'XH' ,xm1 ,is_available, lsubmodel, unitab)
235 CALL hm_get_floatv(
'YH' ,ym1 ,is_available, lsubmodel, unitab)
236 CALL hm_get_floatv(
'ZH' ,zm1 ,is_available, lsubmodel, unitab)
237 IF (sub_id /= 0)
CALL subrotpoint(xm1,ym1,zm1,rtrans,sub_id,lsubmodel)
242 rwl(1,n) = xm1-rwl(4,n)
243 rwl(2,n) = ym1-rwl(5,n)
244 rwl(3,n) = zm1-rwl(6,n)
245 xn = sqrt(rwl(1,n)**2+rwl(2,n)**2+rwl(3,n)**2)
247 CALL ancmsg(msgid=167,anmode=aninfo,msgtype=msgerror,
248 . i1=nuser,c2=
'CYL',c1=titr)
250 rwl(1,n) = rwl(1,n)/xn
251 rwl(2,n) = rwl(2,n)/xn
252 rwl(3,n) = rwl(3,n)/xn
262 IF (dist /= zero)
THEN
264 x1 = (x(1,i)-rwl(4,n))*rwl(1,n)
265 y1 = (x(2,i)-rwl(5,n))*rwl(2,n)
266 z1 = (x(3,i)-rwl(6,n))*rwl(3,n)
268 x2 = (x(1,i)-rwl(4,n))**2
269 y2 = (x(2,i)-rwl(5,n))**2
270 z2 = (x(3,i)-rwl(6,n))**2
272 disn = sqrt(d2-d1**2) - half*diam
273 IF (disn >= zero .AND. disn <= dist .AND. i /= msr) lprw(k+i)=1
278 ingr2usr => igrnod(1:ngrnod)%ID
279 igrs = ngr2usr(igu,ingr2usr,ngrnod)
281 DO j = 1,igrnod(igrs)%NENTITY
282 nosys = igrnod(igrs)%ENTITY(j)
284 IF (itab(nosys) == nuser)
THEN
287 . anmode=aninfo_blind_1,
296 ingr2usr => igrnod(1:ngrnod)%ID
297 igrs = ngr2usr(igu2,ingr2usr,ngrnod)
299 DO j = 1,igrnod(igrs)%NENTITY
300 nosys = igrnod(igrs)%ENTITY(j)
308 IF (lprw(k+i) > 0)
THEN
309 IF (ns10e > 0.AND.ipen==0)
THEN
310 IF( itagnd(i) /= 0) cycle
314 IF (iddlevel == 0.AND.ipen==0)
THEN
315 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
320 IF (ns10e > 0 .AND.ipen==0)
CALL remove_nd(nsl,lprw(k+1),itagnd)
324 srwsav = srwsav + 3 * nsl
329 WRITE(iout,1100) n,ityp,itied,nsl
331 WRITE(iout,1150) n,ityp,itied,nsl,nuser,xmas,vx,vy,vz
333 IF (ipen > 0)
WRITE(iout,2500)
335 WRITE(iout,2002)(rwl(l,n),l=4,6),rwl(7,n),(rwl(l,n),l=1,3)
337 IF (itied == 2)
WRITE(iout,2101) fric,ifq,freq
340 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl)
344 nprw(n+nrwall) = itied
345 nprw(n+2*nrwall) = msr
346 nprw(n+3*nrwall) = ityp
349 nprw(n+8*nrwall) = ipen
359 1100
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
360 . /10x,
'RIGID WALL TYPE . . . . .',i10
361 . /10x,
'TYPE SLIDE/TIED/FRICTION.',i10
362 . /10x,
'NUMBER OF NODES . . . . .',i10)
363 1150
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
364 . /10x,
'RIGID WALL TYPE . . . . .',i10
365 . /10x,
'TYPE SLIDE/TIED/FRICTION.',i10
366 . /10x,
'NUMBER OF NODES . . . . .',i10
367 . /10x,
'WALL NODE NUMBER. . . . .',i10
368 . /10x,
'WALL MASS . . . . . . . .',1pg14.4
369 . /10x,
'WALL X-VELOCITY . . . . .',1pg14.4
370 . /10x,
'WALL Y-VELOCITY . . . . .',1pg14.4
371 . /10x,
'WALL Z-VELOCITY . . . . .',1pg14.4)
372 1200
FORMAT(/10x,
'SECONDARY NODES : ')
373 1201
FORMAT(/10x,10i10)
374 2002
FORMAT(/5x,
'CYLINDRIC WALL CHARACTERISTICS',
375 . /10x,
'POINT M . . . . . . . . .',1p3g20.13
376 . /10x,
'CYLINDER DIAMETER . . . .',1pg14.4
377 . /10x,
'AXIS VECTOR . . . . . . .',1p3g20.13)
378 2101
FORMAT(/5x,
'COULOMB FRICTION CHARACTERISTICS',
379 . /10x,
'FRICTION COEFFICIENT . . .',1pg14.4
380 . /10x,
'FILTRATION FLAG. . . . . .',i10
381 . /10x,
'FILTRATION FACTOR. . . . .',1pg14.4)
382 2500
FORMAT(/5x,
'RIGID WALL FORMULATION : PENALTY'/)
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)