39
40
41
42
43
49
50
51
52#include "implicit_f.inc"
53
54
55
56
57
58
59 INTEGER ISU1,ISU2,NOINT
60 INTEGER IPARI(*),NPC1(*)
62 . stfac
64 . frigap(*)
65 CHARACTER(LEN=NCHARTITLE) :: TITR
66 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
67 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
68
69 TYPE (SURF_) ,TARGET , DIMENSION(NSURF) :: IGRSURF
70
71
72
73# "com04_c.inc"
74# "units_c.inc"
75
76
77
78 INTEGER J, NTYP,INACTI,IS1, IS2,ILEV,
79 . NDAMP1,NDAMP2,IRS,IRM,IFUN1,IFUN2,HFLAG,
80 . INTKG, NFRIC1,NFRIC2,ICOR,IERR1,IERR2,IFRIC1,IFRIC2,
81 . IDAMP1,IDAMP2,IGSTI
83 . fac1,fac2,fac3,facf,facv,fric,gap,startt,stopt,sfric,
84 . visc,facx,stiff
85
86
87 INTEGER, DIMENSION(:), POINTER :: INGR2USR
88 LOGICAL IS_AVAILABLE
89
90
91
92 INTEGER NGR2USR
93
94
95
96
97 is1=0
98 is2=0
99 ifun1=0
100 ifun2=0
101 igsti = 0
102 inacti = 0
103 ilev = 0
104 intkg = 0
105
106 fric = zero
107 gap = zero
108 startt = zero
109 stopt=ep30
110 visc = zero
111 facx = zero
112
113 ntyp = 6
114 ipari(15)=noint
115 ipari(7)=ntyp
116
117 is_available = .false.
118
119
120
121 CALL hm_get_intv(
'secondaryentityids',isu1,is_available,lsubmodel)
122 CALL hm_get_intv(
'mainentityids',isu2,is_available,lsubmodel)
123
124 CALL hm_get_intv(
'Gflag',irs,is_available,lsubmodel)
125 CALL hm_get_intv(
'Vflag',irm,is_available,lsubmodel)
126 CALL hm_get_intv(
'INACTIV',inacti,is_available,lsubmodel)
127 CALL hm_get_intv(
'Crx_Fun',nfric1,is_available,lsubmodel)
128 CALL hm_get_intv(
'Cry_Fun',nfric2,is_available,lsubmodel)
129
130 CALL hm_get_intv(
'FUN_A1',ifun1,is_available,lsubmodel)
131 CALL hm_get_intv(
'HFLAG1',hflag,is_available,lsubmodel)
132 CALL hm_get_intv(
'ISFLAG',icor,is_available,lsubmodel)
133
134 CALL hm_get_intv(
'FUNCT_ID',ifun2,is_available,lsubmodel)
135 CALL hm_get_intv(
'Crz_Fun',ndamp2,is_available,lsubmodel)
136 CALL hm_get_intv(
'Ctx_Fun',ndamp1,is_available,lsubmodel)
137
138
139
140 CALL hm_get_floatv(
'Friction_phi',sfric,is_available,lsubmodel,unitab)
141 CALL hm_get_floatv(
'FRIC',fric,is_available,lsubmodel,unitab)
143 CALL hm_get_floatv(
'TSTART',startt,is_available,lsubmodel,unitab)
144 CALL hm_get_floatv(
'TSTOP',stopt,is_available,lsubmodel,unitab)
145
146 CALL hm_get_floatv(
'scale1',facf,is_available,lsubmodel,unitab)
147 CALL hm_get_floatv(
'scale2',facv,is_available,lsubmodel,unitab)
148
149 CALL hm_get_floatv(
'FACX',facx,is_available,lsubmodel,unitab)
151
152 CALL hm_get_floatv(
'STIFF1',stiff,is_available,lsubmodel,unitab)
153 CALL hm_get_floatv(
'PFscale',fac2,is_available,lsubmodel,unitab)
154 CALL hm_get_floatv(
'VISC',visc,is_available,lsubmodel,unitab)
155 CALL hm_get_floatv(
'scale3',fac3,is_available,lsubmodel,unitab)
156
157
158
159 is1=1
160 is2=1
161 ingr2usr => igrsurf(1:nsurf)%ID
162 isu1=
ngr2usr(isu1,ingr2usr,nsurf)
163 isu2=
ngr2usr(isu2,ingr2usr,nsurf)
164
165
166 ipari(45)=isu1
167 ipari(46)=isu2
168 ipari(13)=is1*10+is2
169 IF (stopt == zero) stopt = ep30
170
171
172 frigap(1)=fric
173 frigap(2)=gap
174 frigap(3)=startt
175 frigap(11)=stopt
176
177
178
179 IF (hflag > 0 .AND. ifun2 == 0) hflag = 2
180 IF (hflag > 0 .AND. stiff == zero) hflag = 0
181 IF (hflag == 0 .AND. icor == 1) icor = 0
182 IF (facx == zero) facx = one
183 IF (fac1 == zero) fac1 = one
184 IF (fac2 == zero) fac2 = one
185 IF (fac3 == zero) fac3 = one
186 IF (facf == zero) facf = one
187 IF (facv == zero) facv = one
188 IF (stiff == zero) stiff = ep30
189 facx = one / facx
190 facf = one / facf
191 facv = one / facv
192
193
194 stfac = fac1
195 IF (stfac == zero) stfac = one_fifth
196 ipari(11) = ifun1
197 ipari(22) = inacti
198 ipari(24) = irm
199 ipari(25) = irs
200 ipari(47) = hflag
201 ipari(49) = ifun2
202 ipari(51) = nfric1
203 ipari(52) = ndamp1
204 ipari(53) = ndamp2
205 ipari(54) = nfric2
206 ipari(58) = icor
207 ipari(20) = ilev
208 ipari(65) = intkg
209 frigap(5) = sfric
210 frigap(19) = facx
211 frigap(20) = fac2
212 frigap(21) = stiff
213 frigap(22) = facf
214 frigap(23) = facv
215 frigap(24) = fac3
216 frigap(14)=visc
217
218
219
220
221 ierr1 = 1
222 DO j=1,nfunct
223 IF (ipari(11) == npc1(j)) THEN
224 ipari(11)=j
225 ierr1 = 0
226 EXIT
227 ENDIF
228 ENDDO
229 IF (ierr1 == 1) THEN
231 . msgtype=msgerror,
232 . anmode=aninfo_blind_1,
233 . i1=noint,
234 . c1=titr,
235 . i2=ipari(11))
236 ENDIF
237
238 IF (ipari(47) > 0 .AND. ipari(49) /= 0) THEN
239 ierr2 = 1
240 DO j=1,nfunct
241 IF(ipari(49) == npc1(j)) THEN
242 ipari(49)=j
243 ierr2 = 0
244 EXIT
245 ENDIF
246 ENDDO
247 IF (ierr2 == 1) THEN
249 . msgtype=msgerror,
250 . anmode=aninfo_blind_1,
251 . i1=noint,
252 . c1=titr,
253 . i2=ipari(49))
254 ENDIF
255 ENDIF
256
257 ifric1 = ipari(51)
258 IF (ifric1 /= 0) THEN
259 ierr1 = 1
260 DO j=1,nfunct
261 IF (ifric1 == npc1(j)) THEN
262 ipari(51) = j
263 ierr1 = 0
264 EXIT
265 ENDIF
266 ENDDO
267 IF (ierr1 == 1)
CALL ancmsg(msgid=113,
268 . msgtype=msgerror,
269 . anmode=aninfo,
270 . i1=noint,
271 . c1=titr,
272 . i2=ifric1)
273 ENDIF
274
275 idamp1 = ipari(52)
276 IF (idamp1 /= 0) THEN
277 ierr1 = 1
278 DO j=1,nfunct
279 IF (idamp1 == npc1(j)) THEN
280 ipari(52) = j
281 ierr1 = 0
282 EXIT
283 ENDIF
284 ENDDO
285 IF (ierr1 == 1)
CALL ancmsg(msgid=113,
286 . msgtype=msgerror,
287 . anmode=aninfo,
288 . i1=noint,
289 . c1=titr,
290 . i2=idamp1)
291 ENDIF
292
293 idamp2 = ipari(53)
294 IF (idamp2 /= 0) THEN
295 ierr1 = 1
296 DO j=1,nfunct
297 IF (idamp2 == npc1(j)) THEN
298 ipari(53) = j
299 ierr1 = 0
300 EXIT
301 ENDIF
302 ENDDO
303 IF (ierr1 == 1)
CALL ancmsg(msgid=113,
304 . msgtype=msgerror,
305 . anmode=aninfo,
306 . i1=noint
307 . c1=titr,
308 . i2=idamp2)
309 ENDIF
310
311 ifric2 = ipari(54)
312 IF (ifric2 /= 0) THEN
313 ierr1 = 1
314 DO j=1,nfunct
315 IF (ifric2 == npc1(j)) THEN
316 ipari(54) = j
317 ierr1 = 0
318 EXIT
319 ENDIF
320 ENDDO
321 IF (ierr1 == 1)
CALL ancmsg(msgid=113,
322 . msgtype=msgerror,
323 . anmode=aninfo,
324 . i1=noint,
325 . c1=titr,
326 . i2=ifric2)
327 ENDIF
328
329
330
331
332 WRITE(iout,1506) hflag,icor,ifun1,ifun2,facx,stfac,fac2,
333 . stiff,sfric,fric,nfric1,nfric2,visc,
334 . ndamp2,ndamp1,inacti,gap,startt,stopt,irs,irm
335
336 IF(is1==0)THEN
337 WRITE(iout,'(6X,A)')'NO SECONDARY SURFACE INPUT'
338 ELSEIF(is1==1)THEN
339 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY SEGMENTS'
340 ELSEIF(is1==2)THEN
341 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY NODES'
342 ELSEIF(is1==3)THEN
343 WRITE(iout,'(6X,A)')'SECONDARY SURFACE INPUT BY SEGMENTS'
344 ELSEIF(is1==4 )THEN
345 WRITE(iout,'(6X,A)')'SECONDARY SIDE INPUT BY BRICKS'
346 ELSEIF(is1==5 )THEN
347 WRITE(iout,'(6X,A)')'SECONDARY SIDE INPUT BY SOLID ELEMENTS'
348 ENDIF
349 IF(is2==0)THEN
350 WRITE(iout,'(6X,A)')'NO MAIN SURFACE INPUT'
351 ELSEIF(is2==1)THEN
352 WRITE(iout,'(6X,A)')'MAIN SURFACE INPUT BY SEGMENTS'
353 ELSEIF(is2==2)THEN
354 WRITE(iout,'(6X,A)')'MAIN SURFACE INPUT BY NODES'
355 ELSEIF(is2==3)THEN
356 WRITE(iout,'(6X,A)')'MAIN SURFACE INPUT BY SEGMENTS'
357 ELSEIF(is2==4)THEN
358 WRITE(iout,'(6X,A)')'MAIN SURFACE REFERS ',
359 . 'TO HYPER-ELLIPSOIDAL SURFACE'
360 ENDIF
361
362
363
364 RETURN
365
366 1506 FORMAT(//
367 . ' TYPE==6 RIGID BODY INTERFACE ' //,
368 . ' FORMULATION FLAG . . . . ',i10/,
369 . ' INITIAL PENETRATION FLAG . . . . ',i10/,
370 . ' LOADING FUNCTION ID . . . . ',i10/,
371 . ' UNLOADING FUNCTION ID . . . . ',i10/,
372 . ' ABSCISSA (DISPLACEMENT) SCALE FACTOR. . . ',1pg20.13/,
373 . ' LOAD FUNCTION SCALE FACTOR . . . . . . . ',1pg20.13/,
374 . ' UNLOAD FUNCTION SCALE FACTOR . . . . . . ',1pg20.13/,
375 . ' ELASTIC MODULUS . . . . . . . . . . . . . ',1pg20.13/,
376 . ' STATIC FRICTION FORCE . . . . . . . . . . ',1pg20.13/,
377 . ' FRICTION FACTOR . . . . . . . . . . . . . ',1pg20.13/,
378 . ' FRICTION FUNCTION OF NORMAL FORCE . . . . .',i10/,
379 . ' FRICTION FUNCTION OF SLIP VELOCITY. . . . .',i10/,
380 . ' DAMPING COEFFICIENT . . . . . . . . . . . ',1pg20.13/,
381 . ' DAMPING AMPLIFIER FUNCTION VS NORMAL FORCE.',i10/,
382 . ' DAMPING FORCE FUNCTION VS VELOCITY. . . . .',i10/,
383 . ' DE-ACTIVATION OF INITIAL PENETRATIONS . . .',i10/,
384 . ' INITIAL GAP . . . . . . . . . . . . . . . ',1pg20.13/,
385 . ' START TIME. . . . . . . . . . . . . . . . ',1pg20.13/,
386 . ' STOP TIME . . . . . . . . . . . . . . . . ',1pg20.13/,
387 . ' SECONDARY SURFACE REORDERING FLAG . . . . . . ',i1/,
388 . ' MAIN SURFACE REORDERING FLAG. . . . . . ',i1/)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharfield
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)