48 . V ,ITAB ,ITABM1 ,X ,IKINE ,
49 . IGRNOD ,MFI ,IMERGE ,UNITAB ,IDDLEVEL,
50 . LSUBMODEL,RTRANS ,NOM_OPT ,ITAGND ,NCHPLAN ,
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,NCHPLAN,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
97 :: DIST, FRIC, DIAM, XMAS, VX, VY, VZ, XM1, YM1, ZM1
98 my_real :: XN, X1, Y1, Z1, DISN, X2, X3, FREQ, ALPHA, FAC_M_R2R
100 CHARACTER(LEN=NCHARTITLE) :: TITR
101 LOGICAL :: IS_AVAILABLE
106 INTEGER USR2SYS, NGR2USR
107 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
108 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
115 is_available = .false.
122 DO n = 1+offs, nchplan+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',
154 CALL hm_get_intv(
'Node1',nuser,is_available,lsubmodel)
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)
158 CALL hm_get_intv(
'Iform',ipen,is_available,lsubmodel)
161 msr = usr2sys(nuser,itabm1,mess,nuser)
164 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
172 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab)
173 CALL hm_get_floatv(
'fric' ,fric ,is_available, lsubmodel, unitab)
174 CALL hm_get_floatv(
'Diameter' ,diam ,is_available, lsubmodel, unitab)
175 CALL hm_get_floatv(
'Filteringfactor',freq ,is_available, lsubmodel, unitab)
176 CALL hm_get_intv(
'Filteringflag' ,ifq ,is_available, lsubmodel)
177 IF (freq == 0 .AND. ifq /= 0) ifq = 0
178 IF (ifq == 0) freq = one
181 IF (ifq <= 1) alpha = freq
182 IF (ifq == 2) alpha = four*atan2(one,zero) / freq
183 IF (ifq == 3) alpha = four*atan2(one,zero) * freq
185 IF ((alpha < zero) .OR. ((alpha > one .AND. ifq <= 2)))
THEN
186 CALL ancmsg(msgid=350,anmode=aninfo,msgtype=msgerror,
202 IF(sub_id /= 0)
CALL subrotpoint(x1,x2,x3,rtrans,sub_id,lsubmodel)
207 ELSE IF (msr /= 0)
THEN
209 CALL hm_get_floatv(
'Mass' ,xmas ,is_available, lsubmodel, unitab)
210 CALL hm_get_floatv(
'motionx' ,vx ,is_available, lsubmodel, unitab)
211 CALL hm_get_floatv(
'motiony' ,vy ,is_available, lsubmodel, unitab)
212 CALL hm_get_floatv(
'motionz' ,vz ,is_available, lsubmodel, unitab)
215 IF (nsubdom > 0)
THEN
216 IF(
tagno(npart+msr) == 4) fac_m_r2r = half
218 IF(sub_id /= 0)
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
222 ms(msr) = ms(msr) + xmas*fac_m_r2r
230 CALL hm_get_floatv(
'XH' ,xm1 ,is_available, lsubmodel, unitab)
231 CALL hm_get_floatv(
'YH' ,ym1 ,is_available, lsubmodel, unitab)
232 CALL hm_get_floatv(
'ZH' ,zm1 ,is_available, lsubmodel, unitab)
233 IF (sub_id /= 0)
CALL subrotpoint(xm1,ym1,zm1,rtrans,sub_id,lsubmodel)
238 rwl(1,n) = xm1-rwl(4,n)
239 rwl(2,n) = ym1-rwl(5,n)
240 rwl(3,n) = zm1-rwl(6,n)
241 xn = sqrt(rwl(1,n)**2+rwl(2,n)**2+rwl(3,n)**2)
243 CALL ancmsg(msgid=167,anmode=aninfo,msgtype=msgerror,
244 . i1=nuser,c2=
'PLANE',c1=titr)
246 rwl(1,n) = rwl(1,n)/xn
247 rwl(2,n) = rwl(2,n)/xn
248 rwl(3,n) = rwl(3,n)/xn
257 IF (dist /= zero)
THEN
259 x1 = (x(1,i)-rwl(4,n))*rwl(1,n)
260 y1 = (x(2,i)-rwl(5,n))*rwl(2,n)
261 z1 = (x(3,i)-rwl(6,n))*rwl(3,n)
263 IF (disn >= zero .AND. disn <= dist .AND. i /= msr) lprw(k+i)=1
268 ingr2usr => igrnod(1:ngrnod)%ID
269 igrs = ngr2usr(igu,ingr2usr
271 DO j = 1,igrnod(igrs)%NENTITY
272 nosys = igrnod(igrs)%ENTITY(j)
274 IF (itab(nosys) == nuser)
THEN
277 . anmode=aninfo_blind_1,
286 ingr2usr => igrnod(1:ngrnod)%ID
287 igrs = ngr2usr(igu2,ingr2usr,ngrnod)
289 DO j = 1,igrnod(igrs)%NENTITY
290 nosys = igrnod(igrs)%ENTITY(j)
298 IF (lprw(k+i) > 0)
THEN
299 IF (ns10e > 0.AND. ipen==0)
THEN
300 IF(itagnd(i) /= 0) cycle
304 IF (iddlevel == 0.AND. ipen==0)
THEN
305 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
310 IF (ns10e > 0 .AND. ipen==0)
CALL remove_nd(nsl,lprw(k+1),itagnd)
314 srwsav = srwsav + 3 * nsl
319 WRITE(iout,1100) n,ityp,itied,nsl
321 WRITE(iout,1150) n,ityp,itied,nsl,nuser,xmas,vx,vy,vz
323 IF (ipen > 0)
WRITE(iout,2500)
325 WRITE(iout,2001)(rwl(l,n),l=4,6),(rwl(l,n),l=1,3)
327 IF (itied == 2)
WRITE(iout,2101)fric,ifq,freq
330 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl)
334 nprw(n+nrwall) = itied
335 nprw(n+2*nrwall) = msr
336 nprw(n+3*nrwall) = ityp
339 nprw(n+8*nrwall) = ipen
345 offs = offs + nchplan
349 1100
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
350 . /10x,
'RIGID WALL TYPE . . . . .',i10
351 . /10x,
'TYPE SLIDE/TIED/FRICTION.',i10
352 . /10x,
'NUMBER OF NODES . . . . .',i10)
353 1150
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
354 . /10x,
'RIGID WALL TYPE . . . . .',i10
355 . /10x,
'TYPE SLIDE/TIED/FRICTION.',i10
356 . /10x,
'NUMBER OF NODES . . . . .',i10
357 . /10x,
'WALL NODE NUMBER. . . . .',i10
358 . /10x,
'WALL MASS . . . . . . . .',1pg14.4
359 . /10x,
'WALL X-VELOCITY . . . . .',1pg14.4
360 . /10x,
'WALL Y-VELOCITY . . . . .',1pg14.4
361 . /10x,
'WALL Z-VELOCITY . . . . .',1pg14.4)
362 1200
FORMAT(/10x,
'SECONDARY NODES : ')
363 1201
FORMAT(/10x,10i10)
364 2001
FORMAT(/5x,
'INFINITE WALL CHARACTERISTICS',
365 . /10x,
'POINT M . . . . . . . . .',1p3g20.13
366 . /10x,
'NORMAL VECTOR . . . . . .',1p3g20.13)
367 2101
FORMAT(/5x,
'COULOMB FRICTION CHARACTERISTICS',
368 . /10x,
'FRICTION COEFFICIENT . . .',1pg14.4
369 . /10x,'filtration flag. . . . . .
',I10
370 . /10X,'filtration factor. . . . .
',1PG14.4)
371 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)