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, UID, IFLAGUNIT,SUB_ID, SUB_INDEX
97 my_real :: 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
105 INTEGER USR2SYS, NGR2USR
106 INTEGER,
DIMENSION(:),
POINTER :: INGR2USR
107 DATA MESS/
'STANDARD RIGID WALL DEFINITION '/
114 is_available = .false.
121 DO n = 1+offs, nchplan+offs
130 . submodel_index = sub_index,
131 . submodel_id = sub_id,
132 . option_titr = titr)
135 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
140 IF (unitab%UNIT_ID(j) == uid)
THEN
145 IF (uid /= 0 .AND. iflagunit == 0)
THEN
146 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
147 . i2=uid,i1=nuser,c1=
'RIGID WALL',
153 CALL hm_get_intv(
'Node1',nuser,is_available,lsubmodel)
154 CALL hm_get_intv(
'slidingflag',itied,is_available,lsubmodel)
155 CALL hm_get_intv(
'NodeSet_ID',igu,is_available,lsubmodel)
156 CALL hm_get_intv(
'excludeNodeSet_ID',igu2,is_available,lsubmodel)
159 msr = usr2sys(nuser,itabm1,mess,nuser)
162 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
170 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab)
172 CALL hm_get_floatv(
'Diameter' ,diam ,is_available, lsubmodel, unitab)
173 CALL hm_get_floatv(
'Filteringfactor',freq ,is_available, lsubmodel,
174 CALL hm_get_intv(
'Filteringflag' ,ifq ,is_available, lsubmodel)
175 IF (freq == 0 .AND. ifq /= 0) ifq = 0
176 IF (ifq == 0) freq = one
179 IF (ifq <= 1) alpha = freq
180 IF (ifq == 2) alpha = four*atan2(one,zero) / freq
181 IF (ifq == 3) alpha = four*atan2(one,zero) * freq
183 IF ((alpha < zero) .OR. ((alpha > one .AND. ifq <= 2)))
THEN
184 CALL ancmsg(msgid=350,anmode=aninfo,msgtype=msgerror,
200 IF(sub_id /= 0)
CALL subrotpoint(x1,x2,x3,rtrans,sub_id,lsubmodel)
205 ELSE IF (msr /= 0)
THEN
207 CALL hm_get_floatv(
'Mass' ,xmas ,is_available, lsubmodel, unitab)
208 CALL hm_get_floatv(
'motionx' ,vx ,is_available, lsubmodel, unitab)
209 CALL hm_get_floatv(
'motiony' ,vy ,is_available, lsubmodel, unitab)
210 CALL hm_get_floatv(
'motionz' ,vz ,is_available, lsubmodel, unitab)
213 IF (nsubdom > 0)
THEN
214 IF(
tagno(npart+msr) == 4) fac_m_r2r = half
216 IF(sub_id /= 0)
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
228 CALL hm_get_floatv(
'XH' ,xm1 ,is_available, lsubmodel, unitab)
230 CALL hm_get_floatv(
'ZH' ,zm1 ,is_available, lsubmodel, unitab)
231 IF (sub_id /= 0)
CALL subrotpoint(xm1,ym1,zm1,rtrans,sub_id,lsubmodel)
237 rwl(2,n) = ym1-rwl(5,n)
238 rwl(3,n) = zm1-rwl(6,n)
239 xn = sqrt(rwl(1,n)**2+rwl(2,n)**2+rwl(3,n)**2)
241 CALL ancmsg(msgid=167,anmode=aninfo,msgtype=msgerror,
242 . i1=nuser,c2=
'PLANE',c1=titr)
244 rwl(1,n) = rwl(1,n)/xn
245 rwl(2,n) = rwl(2,n)/xn
246 rwl(3,n) = rwl(3,n)/xn
255 IF (dist /= zero)
THEN
257 x1 = (x(1,i)-rwl(4,n))*rwl(1,n)
258 y1 = (x(2,i)-rwl(5,n))*rwl(2,n)
259 z1 = (x(3,i)-rwl(6,n))*rwl(3,n)
261 IF (disn >= zero .AND. disn <
266 ingr2usr => igrnod(1:ngrnod)%ID
267 igrs = ngr2usr(igu,ingr2usr,ngrnod)
269 DO j = 1,igrnod(igrs)%NENTITY
270 nosys = igrnod(igrs)%ENTITY(j)
272 IF (itab(nosys) == nuser)
THEN
275 . anmode=aninfo_blind_1,
284 ingr2usr => igrnod(1:ngrnod)%ID
285 igrs = ngr2usr(igu2,ingr2usr,ngrnod)
287 DO j = 1,igrnod(igrs)%NENTITY
288 nosys = igrnod(igrs)%ENTITY(j)
296 IF (lprw(k+i) > 0)
THEN
298 IF(itagnd(i) /= 0) cycle
302 IF (iddlevel == 0)
THEN
303 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
308 IF (ns10e > 0 )
CALL remove_nd(nsl,lprw(k+1),itagnd)
312 srwsav = srwsav + 3 * nsl
317 WRITE(iout,1100) n,ityp,itied,nsl
319 WRITE(iout,1150) n,ityp,itied,nsl,nuser,xmas,vx,vy,vz
322 WRITE(iout,2001)(rwl(l,n),l=4,6),(rwl(l,n),l=1,3)
324 IF (itied == 2)
WRITE(iout,2101)fric,ifq,freq
327 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl)
331 nprw(n+nrwall) = itied
332 nprw(n+2*nrwall) = msr
333 nprw(n+3*nrwall) = ityp
341 offs = offs + nchplan
345 1100
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
346 . /10x,
'RIGID WALL TYPE . . . . .',i10
347 . /10x,
'TYPE SLIDE/TIED/FRICTION.',i10
348 . /10x,
'NUMBER OF NODES . . . . .',i10)
349 1150
FORMAT(/5x,
'RIGID WALL NUMBER. . . . .',i10
350 . /10x,
'RIGID WALL TYPE . . . . .',i10
351'TYPE SLIDE/TIED/FRICTION.',i10
352 . /10x,
'NUMBER OF NODES . . . . .',i10
353 . /10x,
'WALL NODE NUMBER. . . . .',i10
354 . /10x,
'WALL MASS . . . . . . . .',1pg14.4
355 . /10x,
'WALL X-VELOCITY . . . . .',1pg14.4
356 . /10x,
'WALL Y-VELOCITY . . . . .',1pg14.4
357 . /10x,
'WALL Z-VELOCITY . . . . .',1pg14.4)
358 1200
FORMAT(/10x,
'SECONDARY NODES : ')
359 1201
FORMAT(/10x,10i10)
360 2001
FORMAT(/5x,
'INFINITE WALL CHARACTERISTICS',
361 . /10x,
'POINT M . . . . . . . . .',1p3g20.13
362 . /10x,
'NORMAL VECTOR . . . . . .',1p3g20.13)
363 2101
FORMAT(/5x,
'COULOMB FRICTION CHARACTERISTICS',
364 . /10x,
'FRICTION COEFFICIENT . . .',1pg14.4
365 . /10x,
'FILTRATION FLAG. . . . . .',i10
366 . /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)