52
53
54
55
56
64
65
66
67#include "implicit_f.inc"
68
69
70
71#include "analyse_name.inc"
72
73
74
75#include "com04_c.inc"
76#include "units_c.inc"
77#include "scr03_c.inc"
78#include "scr17_c.inc"
79#include "param_c.inc"
80#include "tabsiz_c.inc"
81#include "r2r_c.inc"
82
83
84
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,*)
91
92 TYPE (
group_) ,
TARGET,
DIMENSION(NGRNOD) :: igrnod
93
94
95
96 INTEGER :: N, ITYP, ITIED, NSL, NUSER, MSR, J, I,L, IGU,IGU2, IGRS, NOSYS
97
98 CHARACTER MESS*40
99 CHARACTER(LEN=NCHARTITLE) :: TITR
100 LOGICAL :: IS_AVAILABLE
101 INTEGER :: IPEN
102
103
104
105 INTEGER USR2SYS, NGR2USR
106 INTEGER, DIMENSION(:), POINTER :: INGR2USR
107 DATA mess/'STANDARD RIGID WALL DEFINITION '/
108
109
110
111
112
113
114
115 is_available = .false.
117
118 ityp = 3
119
120
121
122
123 DO n = 1+offs, nchspher+offs
124
125
126
127
128 titr = ''
130 . option_id = nuser,
131 . unit_id = uid,
132 . submodel_index = sub_index,
133 . submodel_id = sub_id,
134 . option_titr = titr)
135
136 nom_opt(1,n)=nuser
137 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
138
139
140 iflagunit = 0
141 DO j=1,unitab%NUNITS
142 IF (unitab%UNIT_ID(j) == uid) THEN
143 iflagunit = 1
144 EXIT
145 ENDIF
146 ENDDO
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',
150 . c2='RIGID WALL',
151 . c3=titr)
152 ENDIF
153
154
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)
160
161 IF(nuser /= 0) THEN
162 msr = usr2sys(nuser,itabm1,mess,nuser)
164 DO jc = 1,nmerged
165 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
166 ENDDO
167 ELSE
168 msr = 0
169 ENDIF
170
171
172
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, unitab)
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
181 IF (ifq >= 0) THEN
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
185 ENDIF
186 IF ((
alpha < zero) .OR. ((
alpha > one .AND. ifq <= 2)))
THEN
187 CALL ancmsg(msgid=350,anmode=aninfo,msgtype=msgerror,
188 . i1=nuser,
189 . c1=titr,
190 . r1=freq)
191 ENDIF
192 rwl(13,n) = fric
194 rwl(15,n) = ifq
195
196
197
198 IF (msr == 0) THEN
199
203 IF(sub_id /= 0)
CALL subrotpoint(x1,x2,x3,rtrans,sub_id,lsubmodel)
204 rwl(4,n) = x1
205 rwl(5,n) = x2
206 rwl(6,n) = x3
207
208 ELSE IF (msr /= 0)THEN
209 ! mass
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)
214
215 fac_m_r2r = one
216 IF (nsubdom > 0) THEN
217 IF(
tagno(npart+msr) == 4) fac_m_r2r = half
218 ENDIF
219 IF(sub_id /= 0)
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
220 rwl(4,n) = x(1,msr)
221 rwl(5,n) = x(2,msr)
222 rwl(6,n) = x(3,msr)
223 ms(msr) = ms(msr) + xmas*fac_m_r2r
224 v(1,msr) = vx
225 v(2,msr) = vy
226 v(3,msr) = vz
227 ENDIF
228
229
230 rwl(7,n) = diam
231
232
233 DO i = 1,numnod
234 lprw(k+i) = 0
235 ENDDO
236
237
238 IF (dist /= zero) THEN
239 DO i = 1,numnod
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
245 ENDDO
246 ENDIF
247
248
249 ingr2usr => igrnod(1:ngrnod)%ID
250 igrs = ngr2usr(igu,ingr2usr,ngrnod)
251 IF (igrs /= 0) THEN
252 DO j = 1,igrnod(igrs)%NENTITY
253 nosys = igrnod(igrs)%ENTITY(j)
254 lprw(k+nosys) = 1
255 IF (itab(nosys) == nuser) THEN
257 . msgtype=msgerror,
258 . anmode=aninfo_blind_1,
259 . i1=nuser,
260 . c1=titr,
261 . i2=nuser)
262 ENDIF
263 ENDDO
264 ENDIF
265
266
267 ingr2usr => igrnod(1:ngrnod)%ID
268 igrs = ngr2usr(igu2,ingr2usr,ngrnod)
269 IF (igrs /= 0) THEN
270 DO j = 1,igrnod(igrs)%NENTITY
271 nosys = igrnod(igrs)%ENTITY(j)
272 lprw(k+nosys) = 0
273 ENDDO
274 ENDIF
275
276
277 nsl = 0
278 DO i = 1,numnod
279 IF (lprw(k+i) > 0) THEN
280 IF (ns10e > 0.AND. ipen==0) THEN
281 IF( itagnd(i) /= 0) cycle
282 ENDIF
283 nsl = nsl+1
284 lprw(k+nsl) = i
285 IF (iddlevel == 0.AND. ipen==0) THEN
286 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
287 ENDIF
288 ENDIF
289 ENDDO
290
291 IF (ns10e > 0 .AND. ipen==0)
CALL remove_nd(nsl,lprw(k+1),itagnd)
292 ifi=ifi+nsl
293 IF (ifq > 0) THEN
294 mfi=mfi+3*nsl
295 srwsav = srwsav + 3 * nsl
296 ENDIF
297
298
299 IF (msr == 0) THEN
300 WRITE(iout,1100) n,ityp,itied,nsl
301 ELSE
302 WRITE(iout,1150) n,ityp,itied,nsl,nuser,xmas,vx,vy,vz
303 ENDIF
304 IF (ipen > 0) WRITE(iout,2500)
305
306 WRITE(iout,2003)(rwl(l,n),l=4,6),rwl(7,n)
307
308 IF (itied == 2) WRITE(iout,2101)fric,ifq,freq
309 IF (ipri >= 1) THEN
310 WRITE(iout,1200)
311 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl)
312 ENDIF
313
314 nprw(n) = nsl
315 nprw(n+nrwall) = itied
316 nprw(n+2*nrwall) = msr
317 nprw(n+3*nrwall) = ityp
318 nprw(n+4*nrwall) = 0
319 nprw(n+5*nrwall) = 0
320 nprw(n+8*nrwall) = ipen
321 k = k+nsl
322
323 ENDDO
324
325
326 offs = offs + nchspher
327
328 RETURN
329
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'/)
void anodset(int *id, int *type)
subroutine remove_nd(nn, inn, itagnd)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine kinset(ik, node, ikine, idir, isk, ikine1)
integer, parameter nchartitle
integer, parameter ncharkey
integer, dimension(:), allocatable tagno
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)
subroutine subrotvect(x, y, z, rtrans, sub_id, lsubmodel)
subroutine subrotpoint(x, y, z, rtrans, sub_id, lsubmodel)