52
53
54
55
56
64
65
66
67#include "implicit_f.inc"
68
69
70
71#include "com01_c.inc"
72#include "com04_c.inc"
73#include "units_c.inc"
74#include "scr03_c.inc"
75#include "scr17_c.inc"
76#include "param_c.inc"
77#include "tabsiz_c.inc"
78
79
80
81 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
82 INTEGER IFI,MFI,IDDLEVEL,NCHTHERM,K,OFFS
83 INTEGER NPRW(*), LPRW(*), ITAB(*), ITABM1(*),
84 . IKINE(*), IMERGE(*),ITAGND(*),IKINE1(3*NUMNOD),
85 . IXS(,*),IXQ(NIXQ,*),NPC(*)
86 TYPE() LSUBMODEL(*)
87 my_real rwl(nrwlp,*), ms(*), v(3,*), x(3,*),rtrans(ntransf,*)
88 INTEGER NOM_OPT(LNOPT1,*)
89
90 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
91
92
93
94 INTEGER N, ITYP, ITIED, NSL, NUSER, MSR, J, I,
95 . L, IGU,IGU2, IGRS, NOSYS, , JC, UID,
96 . IFLAGUNIT,SUB_ID, ,IFUNC,NE,KK,ND,K0,NN,NF
98 . dist, fric, diam, xmas, vx, vy, vz, xm1, ym1, zm1,
99 . xn, x1, y1, z1, disn, x2, y2, z2, x3, freq,
alpha, fac_m_r2r,
100 . temp,tstif,fheat,facx,fac_tstif
101 CHARACTER MESS*40
102 CHARACTER(LEN=NCHARKEY) :: OPT
103 CHARACTER(LEN=NCHARTITLE)::TITR
104 LOGICAL :: IS_AVAILABLE
105
106
107
108 INTEGER USR2SYS, NGR2USR
109 INTEGER, DIMENSION(:), POINTER :: INGR2USR
110 DATA mess/'STANDARD RIGID WALL DEFINITION '/
111
112
113
114
115
116
117 is_available = .false.
119
120 ityp = 1
121 !----------------------------------------------------------------------
122
123
124 DO n = 1+offs, nchtherm+offs
125
126
127
128
129 titr = ''
131 . option_id = nuser,
132 . unit_id = uid,
133 . submodel_index = sub_index,
134 . submodel_id = sub_id,
135 . option_titr = titr)
136
137 nom_opt(1,n)=nuser
138 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
139
140
141 iflagunit = 0
142 DO j=1,unitab%NUNITS
143 IF (unitab%UNIT_ID(j) == uid) THEN
144 iflagunit = 1
145 EXIT
146 ENDIF
147 ENDDO
148 IF (uid /= 0 .AND. iflagunit == 0) THEN
149 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
150 . i2=uid,i1=nuser,c1='RIGID WALL',
151 . c2='RIGID WALL',
152 . c3=titr)
153 ENDIF
154
155
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
160
161 msr = 0
162
163
164
165 CALL hm_get_floatv(
'offset' ,dist ,is_available, lsubmodel, unitab)
166 CALL hm_get_floatv(
'fric' ,fric ,is_available, lsubmodel, unitab)
167 CALL hm_get_floatv(
'Diameter' ,diam ,is_available, lsubmodel, unitab)
168 ifq = 0
169 freq = one
171 rwl(13,n) = fric
173 rwl(15,n) = ifq
174
175
176
180 IF(sub_id /= 0)
CALL subrotpoint(x1,x2,x3,rtrans,sub_id,lsubmodel)
181 rwl(4,n) = x1
182 rwl(5,n) = x2
183 rwl(6,n) = x3
184
185
186
187 CALL hm_get_floatv(
'XH' ,xm1 ,is_available, lsubmodel, unitab)
188 CALL hm_get_floatv(
'YH' ,ym1 ,is_available, lsubmodel, unitab)
189 CALL hm_get_floatv(
'ZH' ,zm1 ,is_available, lsubmodel, unitab)
190 IF (sub_id /= 0)
CALL subrotpoint(xm1,ym1,zm1,rtrans,sub_id,lsubmodel)
191
192
193 CALL hm_get_intv(
'fct_IDt' ,ifunc,is_available, lsubmodel)
194 CALL hm_get_floatv(
'Fscale_T' ,temp ,is_available, lsubmodel, unitab)
195 CALL hm_get_floatv(
'Thermalresistance',tstif,is_available, lsubmodel, unitab)
196
197
198
199
200 rwl(1,n) = xm1-rwl(4,n)
201 rwl(2,n) = ym1-rwl(5,n)
202 rwl(3,n) = zm1-rwl(6,n)
203 xn = sqrt(rwl(1,n)**2+rwl(2,n)**2+rwl(3,n)**2)
204 IF (xn <= em10) THEN
205 CALL ancmsg(msgid=167,anmode=aninfo,msgtype=msgerror,
206 . i1=nuser,c2='PLANE',c1=titr)
207 ELSE
208 rwl(1,n) = rwl(1,n)/xn
209 rwl(2,n) = rwl(2,n)/xn
210 rwl(3,n) = rwl(3,n)/xn
211 ENDIF
212
213
214 DO i = 1,numnod
215 lprw(k+i) = 0
216 ENDDO
217
218
219 IF (dist /= zero) THEN
220 DO i = 1,numnod
221 x1 = (x(1,i)-rwl(4,n))*rwl(1,n)
222 y1 = (x(2,i)-rwl(5,n))*rwl(2,n)
223 z1 = (x(3,i)-rwl(6,n))*rwl(3,n)
224 disn = x1+y1+z1
225 IF (disn >= zero .AND. disn <= dist .AND. i /= msr) lprw(k+i)=1
226 ENDDO
227 ENDIF
228
229
230 ingr2usr => igrnod(1:ngrnod)%ID
231 igrs =
ngr2usr(igu,ingr2usr,ngrnod)
232 IF (igrs /= 0) THEN
233 DO j = 1,igrnod(igrs)%NENTITY
234 nosys = igrnod(igrs)%ENTITY(j)
235 lprw(k+nosys) = 1
236 IF (itab(nosys) == nuser) THEN
238 . msgtype=msgerror,
239 . anmode=aninfo_blind_1,
240 . i1=nuser,
241 . c1=titr,
242 . i2=nuser)
243 ENDIF
244 ENDDO
245 ENDIF
246
247
248 ingr2usr => igrnod(1:ngrnod)%ID
249 igrs =
ngr2usr(igu2,ingr2usr,ngrnod)
250 IF (igrs /= 0) THEN
251 DO j = 1,igrnod(igrs)%NENTITY
252 nosys = igrnod(igrs)%ENTITY(j)
253 lprw(k+nosys) = 0
254 ENDDO
255 ENDIF
256
257
258 nsl = 0
259 DO i = 1,numnod
260 IF (lprw(k+i) > 0) THEN
261 IF (ns10e > 0) THEN
262 IF(itagnd(i) /= 0) cycle
263 ENDIF
264 nsl = nsl+1
265 lprw(k+nsl) = i
266 IF (iddlevel == 0) THEN
267 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
268 ENDIF
269 ENDIF
270 ENDDO
271
272 IF (ns10e > 0 )
CALL remove_nd(nsl,lprw(k+1),itagnd)
273 ifi=ifi+nsl
274 IF (ifq > 0) THEN
275 mfi=mfi+3*nsl
276 srwsav = srwsav + 3 * nsl
277 ENDIF
278
279
280 WRITE(iout,1100) n,ityp,itied,nsl
281 WRITE(iout,2001)(rwl(l,n),l=4,6),(rwl(l,n),l=1,3)
282 IF (itied == 2) WRITE(iout,2101)fric,ifq,freq
283 IF (ipri >= 1) THEN
284 WRITE(iout,1200)
285 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl)
286 ENDIF
287
288 nprw(n) = nsl
289 nprw(n+nrwall) = itied
290 nprw(n+2*nrwall) = msr
291 nprw(n+3*nrwall) = ityp
292 nprw(n+4*nrwall) = 0
293 nprw(n+5*nrwall) = 0
294 k0 = k
295 k = k+nsl
296
297 ne = 0
298 kk = k+2*nsl
299 DO nd = kk+1,kk+numnod
300 lprw(nd) = 0
301 ENDDO
302 DO j = 1+k0,nsl+k0
303 nd = lprw(j) + kk
304 lprw(nd) = 1
305 ENDDO
306 IF (n2d == 0) THEN
307 DO i = 1,numels
308 nn = 0
309 DO j = 2,9
310 nd = ixs(j,i) + kk
311 nn = nn + lprw(nd)
312 ENDDO
313 IF (nn >= 4) THEN
314 ne = ne+1
315 nn = lprw(ixs(2,i) + kk)
316 . + lprw(ixs(3,i) + kk)
317 . + lprw(ixs(4,i) + kk)
318 . + lprw(ixs(5,i) + kk)
319 IF (nn == 4) THEN
320 lprw(k+ne) = i*10 + 1
321 ELSE
322 nn = lprw(ixs(4,i) + kk)
323 . + lprw(ixs(5,i) + kk)
324 . + lprw(ixs(8,i) + kk)
325 . + lprw(ixs(9,i) + kk)
326 IF (nn == 4) THEN
327 lprw(k+ne) = i*10 + 2
328 ELSE
329 nn = lprw(ixs(6,i) + kk)
330 . + lprw(ixs(7,i) + kk)
331 . + lprw(ixs(8,i) + kk)
332 . + lprw(ixs(9,i) + kk)
333 IF (nn == 4) THEN
334 lprw(k+ne) = i*10 + 3
335 ELSE
336 nn = lprw(ixs(2,i) + kk)
337 . + lprw(ixs(3,i) + kk)
338 . + lprw(ixs(6,i) + kk)
339 . + lprw(ixs(7,i) + kk)
340 IF (nn == 4) THEN
341 lprw(k+ne) = i*10 + 4
342 ELSE
343 nn = lprw(ixs(3,i) + kk)
344 . + lprw(ixs(4,i) + kk)
345 . + lprw(ixs(7,i) + kk)
346 . + lprw(ixs(8,i) + kk)
347 IF (nn == 4) THEN
348 lprw(k+ne) = i*10 + 5
349 ELSE
350 nn = lprw(ixs(2,i) + kk)
351 . + lprw(ixs(5,i) + kk)
352 . + lprw(ixs(6,i) + kk)
353 . + lprw(ixs(9,i) + kk)
354 IF (nn == 4)THEN
355 lprw(k+ne) = i*10 + 6
356 ELSE
357 ne = ne-1
358 ENDIF
359 ENDIF
360 ENDIF
361 ENDIF
362 ENDIF
363 ENDIF
364 ENDIF
365 ENDDO
366 ELSE
367 DO i = 1,numelq
368 nn = 0
369 DO j = 2,5
370 nd = ixq(j,i) + kk
371 nn = nn + lprw(nd)
372 ENDDO
373 IF (nn >= 2) THEN
374 ne = ne+1
375 nn = lprw(ixq(2,i) + kk) + lprw(ixq(3,i) + kk)
376 IF (nn == 2) THEN
377 lprw(k+ne) = i*10 + 1
378 ELSE
379 nn = lprw(ixq(3,i) + kk) + lprw(ixq(4,i) + kk)
380 IF (nn == 2) THEN
381 lprw(k+ne) = i*10 + 2
382 ELSE
383 nn = lprw(ixq(4,i) + kk) + lprw(ixq(5,i) + kk)
384 IF (nn == 2) THEN
385 lprw(k+ne) = i*10 + 3
386 ELSE
387 nn = lprw(ixq(5,i) + kk) + lprw(ixq(2,i) + kk)
388 IF (nn == 2) THEN
389 lprw(k+ne) = i*10 + 4
390 ELSE
391 ne = ne-1
392 ENDIF
393 ENDIF
394 ENDIF
395 ENDIF
396 ENDIF
397 ENDDO
398 ENDIF
399
400
401
402 fheat = one
403 facx = one/unitab%FAC_T_WORK
404
405 IF (tstif == zero) THEN
406 CALL hm_get_floatv_dim(
'Thermalresistance',fac_tstif,is_available,lsubmodel,unitab)
407 tstif = one*fac_tstif
408 ENDIF
409
410 WRITE(iout,2100) ifunc,temp,tstif
411
412 tstif = one/tstif
413
414 nprw(n+3*nrwall)=-ityp
415
416 nf = 0
417 IF (ifunc > 0) THEN
418 DO i=1,nfunct
419 IF (ifunc == npc(i)) THEN
420 nf = i
421 EXIT
422 ENDIF
423 ENDDO
424 IF (nf == 0) THEN
426 . msgtype=msgerror,
427 . anmode=aninfo,
428 . i1=ifunc,
429 . c1=titr)
430 ENDIF
431 ENDIF
432
433 rwl(8,n) = ne
434 rwl(9,n) = nf
435 rwl(10,n) = temp
436 rwl(11,n) = tstif
437 rwl(12,n) = fheat
438 rwl(16,n) = facx
439
440 ifi = ifi + ne
441
442 k = k + ne
443
444 ENDDO
445
446
447 offs = offs + nchtherm
448
449 RETURN
450
451 1100 FORMAT(/5x,'RIGID WALL NUMBER. . . . .',i10
452 . /10x,'RIGID WALL TYPE . . . . .',i10
453 . /10x,'TYPE SLIDE/TIED/FRICTION.',i10
454 . /10x,'NUMBER OF NODES . . . . .',i10)
455 1200 FORMAT(/10x,'SECONDARY NODES : ')
456 1201 FORMAT(/10x,10i10)
457 2001 FORMAT(/5x,'INFINITE WALL CHARACTERISTICS',
458 . /10x,'POINT M . . . . . . . . .',1p3g20.13
459 . /10x,'NORMAL VECTOR . . . . . .',1p3g20.13)
460 2100 FORMAT(/5x,'THERMAL CHARACTERISTICS',
461 . /10x,'TEMPERATURE FUNCTION. . .',i10
462 . /10x,'TEMPERATURE SCALE FACTOR.',1pg14.4
463 . /10x,'THERMAL RESISTANCE. . . .',1pg14.4)
464 2101 FORMAT(/5x,'COULOMB FRICTION CHARACTERISTICS',
465 . /10x,'FRICTION COEFFICIENT . . .',1pg14.4
466 . /10x,'FILTRATION FLAG. . . . . .',i10
467 . /10x,'FILTRATION FACTOR. . . . .',1pg14.4)
subroutine remove_nd(nn, inn, itagnd)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, 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 function ngr2usr(iu, igr, ngr)
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 subrotpoint(x, y, z, rtrans, sub_id, lsubmodel)