40
41
42
43
44
50
51
52
53#include "implicit_f.inc"
54
55
56
57
58
59
60 INTEGER NOINT
61 INTEGER IPARI(*),NPC(*)
64 CHARACTER(LEN=NCHARTITLE),INTENT(IN) :: TITR
65 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
66 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
67
68 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
69 TYPE (SURF_) ,TARGET , DIMENSION(NSURF) :: IGRSURF
70
71
72
73#include "com04_c.inc"
74#include "units_c.inc"
75
76
77
78 CHARACTER(LEN=NCHARTITLE) :: TITR1
79 INTEGER ISU1,ISU2,I,J,L, NTYP,IS1, IS2,NLO,NFRIC,NDAMP1,NDAMP2,NCURS,ISU20,INTKG
80 my_real fric,gap,startt,stopt,visc
81 INTEGER, DIMENSION(:), POINTER :: INGR2USR
82 LOGICAL IS_AVAILABLE
83
84
85
86 INTEGER NGR2USR
87
88
89
90
91
92
93 is1=0
94 is2=0
95 nlo = 0
96 nfric = 0
97 ndamp1 = 0
98 ndamp2 = 0
99 intkg=0
100
101 fric = zero
102 gap = zero
103 startt = zero
104 stopt=ep30
105 visc = zero
106
107 ntyp = 14
108 ipari(15)=noint
109 ipari(7)=ntyp
110
111 is_available = .false.
112
113
114
115 CALL hm_get_intv(
'secondaryentityids',isu1,is_available,lsubmodel)
116 CALL hm_get_intv(
'mainentityids',isu2,is_available,lsubmodel)
117 CALL hm_get_intv(
'Iload',nlo,is_available,lsubmodel)
118 CALL hm_get_intv(
'IFRIC',nfric,is_available,lsubmodel)
119 CALL hm_get_intv('fun_a1
',NDAMP1,IS_AVAILABLE,LSUBMODEL)
120 CALL HM_GET_INTV('fun_a2',NDAMP2,IS_AVAILABLE,LSUBMODEL)
121
122
123
124 CALL HM_GET_FLOATV('stiff1',STFAC,IS_AVAILABLE,LSUBMODEL,UNITAB)
125 CALL HM_GET_FLOATV('fric',FRIC,IS_AVAILABLE,LSUBMODEL,UNITAB)
126 CALL HM_GET_FLOATV('visc',VISC,IS_AVAILABLE,LSUBMODEL,UNITAB)
127 CALL HM_GET_FLOATV('gap',GAP,IS_AVAILABLE,LSUBMODEL,UNITAB)
128
129
130
131 IS1=2
132 IS2=4
133 INGR2USR => IGRNOD(1:NGRNOD)%ID
134 IF(ISU1/=0)ISU1=NGR2USR(ISU1,INGR2USR,NGRNOD)
135 ISU20=ISU2
136 INGR2USR => IGRSURF(1:NSURF)%ID
137 ISU2=NGR2USR(ISU2,INGR2USR,NSURF)
138 IF ( IGRSURF(ISU2)%TYPE/=100
139.AND. . IGRSURF(ISU2)%TYPE/=101) THEN
140 TITR1 = IGRSURF(ISU20)%TITLE
141 CALL ANCMSG(MSGID=111,
142 . MSGTYPE=MSGERROR,
143 . ANMODE=ANINFO,
144 . I1=NOINT,
145 . C1=TITR,
146 . I2=ISU20,
147 . C2=TITR1)
148 END IF
149
150
151 IF (NLO==0) GOTO 11
152 DO NCURS=1,NFUNCT
153 IF (NLO==NPC(NFUNCT+1+NCURS)) THEN
154 IPARI(8)=NCURS
155 GOTO 11
156 ENDIF
157 ENDDO
158 CALL ANCMSG(MSGID=113,
159 . MSGTYPE=MSGERROR,
160 . ANMODE=ANINFO,
161 . I1=NOINT,
162 . C1=TITR,
163 . I2=NLO)
164 11 CONTINUE
165 IF (NFRIC==0) GOTO 12
166 DO NCURS=1,NFUNCT
167 IF (NFRIC==NPC(NFUNCT+1+NCURS)) THEN
168 IPARI(9)=NCURS
169 GOTO 12
170 ENDIF
171 ENDDO
172 CALL ANCMSG(MSGID=113,
173 . MSGTYPE=MSGERROR,
174 . ANMODE=ANINFO,
175 . I1=NOINT,
176 . C1=TITR,
177 . I2=NFRIC)
178 12 CONTINUE
179 IF (NDAMP1==0) GOTO 13
180 DO NCURS=1,NFUNCT
181 IF (NDAMP1==NPC(NFUNCT+1+NCURS)) THEN
182 IPARI(10)=NCURS
183 GOTO 13
184 ENDIF
185 ENDDO
186 CALL ANCMSG(MSGID=113,
187 . MSGTYPE=MSGERROR,
188 . ANMODE=ANINFO,
189 . I1=NOINT,
190 . C1=TITR,
191 . I2=NDAMP1)
192 13 CONTINUE
193 IF (NDAMP2==0) GOTO 14
194 DO NCURS=1,NFUNCT
195 IF (NDAMP2==NPC(NFUNCT+1+NCURS)) THEN
196 IPARI(11)=NCURS
197 GOTO 14
198 ENDIF
199 ENDDO
200 CALL ANCMSG(MSGID=113,
201 . MSGTYPE=MSGERROR,
202 . ANMODE=ANINFO,
203 . I1=NOINT,
204 . C1=TITR,
205 . I2=NDAMP2)
206 14 CONTINUE
207
208
209 IPARI(45)=ISU1
210 IPARI(46)=ISU2
211 IPARI(13)=IS1*10+IS2
212
213 STARTT=ZERO
214 STOPT =EP30
215
216
217 FRIGAP(1)=FRIC
218 FRIGAP(2)=GAP
219 FRIGAP(3)=STARTT
220 FRIGAP(11)=STOPT
221 FRIGAP(14)=VISC
222
223
224
225
226 IPARI(65) = INTKG
227
228
229
230
231 WRITE(IOUT,1514)
232 . STFAC,NLO,FRIC,NFRIC,VISC,NDAMP1,NDAMP2,GAP,
233 . STARTT,STOPT
234
235
236 IF(IS1==0)THEN
237 WRITE(IOUT,'(6x,a)')'no secondary surface input'
238 ELSEIF(IS1==1)THEN
239 WRITE(IOUT,'(6x,a)')'secondary surface input by segments'
240 ELSEIF(IS1==2)THEN
241 WRITE(IOUT,'(6x,a)')'secondary surface input by nodes'
242 ELSEIF(IS1==3)THEN
243 WRITE(IOUT,'(6x,a)')'secondary surface input by segments'
244 ELSEIF(IS1==4 )THEN
245 WRITE(IOUT,'(6x,a)')'secondary side'
246 ELSEIF(IS1==5 )THEN
247 WRITE(IOUT,'(6x,a)')'secondary side input by solid elements'
248 ENDIF
249 IF(IS2==0)THEN
250 WRITE(IOUT,'(6x,a)
')'no
main surface input
'
251 ELSEIF(IS2==1)THEN
252 WRITE(IOUT,'(6x,a)
')'main surface input by segments
'
253 ELSEIF(IS2==2)THEN
254 WRITE(IOUT,'(6x,a)
')'main'
255 ELSEIF(IS2==3)THEN
256 WRITE(IOUT,'(6x,a)
')'main surface input by segments
'
257 ELSEIF(IS2==4)THEN
258 WRITE(IOUT,'(6x,a)
')'main surface refers
',
259 . 'to hyper-ellipsoidal surface'
260 ENDIF
261
262
263 1000 FORMAT(/1X,' INTERFACE number :',I10,1X,A)
264
265 RETURN
266
267
268 1514 FORMAT(//
269 . ' type==14 node to surface ' //,
270 . ' INTERFACE stiffness . . . . . . . . . . . . ',1PG20.13/,
271 . ' FUNCTION for elastic contact . . . . . . .
',I10/,
272 . ' friction coefficient . . . . . . . . . . . ',1PG20.13/,
273 . ' function
for friction . . . . . . . . . . .
',I10/,
274 . ' normal
damping factor . . . . . . . . . . .
',1PG20.13/,
275 . ' function
for damping versus velocity . . .
',I10/,
276 . ' function
for damping versus elastic force .
',I10/,
277 . ' minimum gap . . . . . . . . . . . . . . . . ',1PG20.13/,
278 . ' start time. . . . . . . . . . . . . . . . . ',1PG20.13/,
279 . ' stop time . . . . . . . . . . . . . . . . . ',1PG20.13/)
280
subroutine damping(nodft, nodlt, v, vr, a, ar, damp, ms, in, igrnod, dim, itask, weight, tagslv_rby, wfext)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle
int main(int argc, char *argv[])