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) :: UNITAB
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, ,UID,IFLAGUNIT,SUB_ID, SUB_INDEX
97 my_real :: DIST, FRIC, DIAM, XMAS, VX, VY, VZ, X1, DISN, X2, Y2, Z2, X3, FREQ, ALPHA, FAC_M_R2R
99 CHARACTER(LEN=NCHARTITLE) :: TITR
100 LOGICAL :: IS_AVAILABLE
105 INTEGER USR2SYS, NGR2USR
106 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
107 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
115 is_available = .false.
123 DO n = 1+offs, nchspher+offs
132 . submodel_index = sub_index,
133 . submodel_id = sub_id,
134 . option_titr = titr)
137 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
142 IF (unitab%UNIT_ID(j) == uid)
THEN
147 IF (uid /= 0 .AND. iflagunit == 0)
THEN
148 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
149 . i2=uid,i1=nuser,c1=
'RIGID WALL',
155 CALL hm_get_intv(
'Node1',nuser,is_available,lsubmodel)
156 CALL hm_get_intv(
'slidingflag',itied,is_available,lsubmodel)
157 CALL hm_get_intv(
'NodeSet_ID',igu,is_available,lsubmodel)
158 CALL hm_get_intv(
'excludeNodeSet_ID',igu2,is_available,lsubmodel)
159 CALL hm_get_intv(
'Iform',ipen,is_available,lsubmodel)
162 msr = usr2sys(nuser,itabm1,mess,nuser)
165 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
173 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab)
174 CALL hm_get_floatv(
'fric' ,fric ,is_available, lsubmodel, unitab)
175 CALL hm_get_floatv(
'Diameter' ,diam ,is_available, lsubmodel, unitab)
176 CALL hm_get_floatv(
'Filteringfactor',freq ,is_available, lsubmodel
177 CALL hm_get_intv(
'Filteringflag' ,ifq ,is_available, lsubmodel
178 IF (freq == 0 .AND. ifq /= 0) ifq = 0
179 IF (ifq == 0) freq = one
182 IF (ifq <= 1) alpha = freq
183 IF (ifq == 2) alpha = four*atan2(one,zero) / freq
184 IF (ifq == 3) alpha = four*atan2(one,zero) * freq
186 IF ((alpha < zero) .OR. ((alpha > one .AND. ifq <= 2)))
THEN
187 CALL ancmsg(msgid=350,anmode=aninfo,msgtype=msgerror,
203 IF(sub_id /= 0)
CALL subrotpoint(x1,x2,x3,rtrans,sub_id,lsubmodel)
208 ELSE IF (msr /= 0)
THEN
210 CALL hm_get_floatv(
'Mass' ,xmas ,is_available, lsubmodel, unitab)
211 CALL hm_get_floatv(
'motionx' ,vx ,is_available, lsubmodel, unitab)
212 CALL hm_get_floatv(
'motiony' ,vy ,is_available, lsubmodel, unitab)
213 CALL hm_get_floatv(
'motionz' ,vz ,is_available, lsubmodel, unitab)
216 IF (nsubdom > 0)
THEN
217 IF(
tagno(npart+msr) == 4) fac_m_r2r = half
219 IF(sub_id /= 0)
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
223 ms(msr) = ms(msr) + xmas*fac_m_r2r
238 IF (dist /= zero)
THEN
240 x2 = (x(1,i)-rwl(4,n))**2
241 y2 = (x(2,i)-rwl(5,n))**2
242 z2 = (x(3,i)-rwl(6,n))**2
243 disn = sqrt(x2+y2+z2)- half*diam
244 IF (disn >= zero .AND. disn <= dist .AND. i /= msr) lprw(k+i)=1
249 ingr2usr => igrnod(1:ngrnod)%ID
250 igrs = ngr2usr(igu,ingr2usr,ngrnod)
252 DO j = 1,igrnod(igrs)%NENTITY
253 nosys = igrnod(igrs)%ENTITY(j)
255 IF (itab(nosys) == nuser)
THEN
258 . anmode=aninfo_blind_1,
267 ingr2usr => igrnod(1:ngrnod)%ID
268 igrs = ngr2usr(igu2,ingr2usr,ngrnod)
270 DO j = 1,igrnod(igrs)%NENTITY
271 nosys = igrnod(igrs)%ENTITY(j
279 IF (lprw(k+i) > 0)
THEN
280 IF (ns10e > 0.AND. ipen==0)
THEN
281 IF( itagnd(i) /= 0) cycle
285 IF (iddlevel == 0.AND. ipen==0)
THEN
286 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
291 IF (ns10e > 0 .AND. ipen==0)
CALL remove_nd(nsl,lprw(k+1),itagnd)
295 srwsav = srwsav + 3 * nsl
300 WRITE(iout,1100) n,ityp,itied,nsl
302 WRITE(iout,1150) n,ityp,itied,nsl,nuser,xmas,vx,vy,vz
304 IF (ipen > 0)
WRITE(iout,2500)
306 WRITE(iout,2003)(rwl(l,n),l=4,6),rwl(7,n)
308 IF (itied == 2)
WRITE(iout,2101)fric,ifq,freq
311 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl
315 nprw(n+nrwall) = itied
316 nprw(n+2*nrwall) = msr
317 nprw(n+3*nrwall) = ityp
320 nprw(n+8*nrwall) = ipen
326 offs = offs + nchspher
330 1100
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 1150
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
335 . /10x,
'RIGID WALL TYPE . . . . .',i10
336 . /10x,
'TYPE SLIDE/TIED/FRICTION.',i10
337 . /10x,
'NUMBER OF NODES . . . . .',i10
338 . /10x,
'WALL NODE NUMBER. . . . .',i10
339 . /10x,
'WALL MASS . . . . . . . .',1pg14.4
340 . /10x,
'WALL X-VELOCITY . . . . .',1pg14.4
341 . /10x,
'WALL Y-VELOCITY . . . . .',1pg14.4
342 . /10x,
'WALL Z-VELOCITY . . . . .',1pg14.4)
343 1200
FORMAT(/10x,
'SECONDARY NODES : ')
344 1201
FORMAT(/10x,10i10)
345 2003
FORMAT(/5x,
'SPHERICAL WALL CHARACTERISTICS',
346 . /10x,
'POINT M . . . . . . . . .',1p3g20.13
347 . /10x,
'SPHERE DIAMETER . . . . .',1pg14.4)
348 2101
FORMAT(/5x,
'COULOMB FRICTION CHARACTERISTICS',
349 . /10x,
'FRICTION COEFFICIENT . . .',1pg14.4
350 . /10x,
'FILTRATION FLAG. . . . . .',i10
351 . /10x,
'FILTRATION FACTOR. . . . .',1pg14.4)
352 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)