45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129#include "implicit_f.inc"
130
131
132
133
134
135
136 INTEGER IOUT,NUVAR,NUVARN,IPROP,IMAT,
137 . NX ,NAX1D ,NAX2D ,NAX3D , IX(NX), IDS,
138 . GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
139 . KFUNC,KMAT,KPROP
141 . xel(3,nx),vel(3,nx),vrel(3,nx),
142 . mass(nx) ,xiner(nx) ,stifm(nx) ,
143 . stifr(nx),viscm(nx) ,viscr(nx) ,uvar(nuvar) ,
144 . uvarn(nuvarn*nx), dte,
145 . get_u_mat,get_u_geo,get_u_func,ffac
148 parameter(kfunc=29)
149 parameter(kmat=31)
150 parameter(kprop=33)
151
152
153
154
155
156
157
158
160 . ms,xk,xc,epstot,f,dfdx,rho,stif,deps,g,dgdx,l0,
161 . lprev, lnext,
162 . xm, xkm, xcm, fact, xn, dtc, dtk
163 INTEGER I,K,NB1,NB2,NB3,MB1,MB2,MB3,MB4,MB5,IFUNCT,IFV
164
165
166 nax1d=nx-1
167 nax2d=0
168 nax3d=0
169
170
171 nb1=1
172
173 nb2=nb1+1
174
175 nb3=nb2+1
176
177 mb1=1
178
179
180 mb2=mb1+nx
181
182
183 mb3=mb2+nx
184
185
186 mb4=mb3+nx
187
188
189 mb5=mb4+nx
190
191
192 IF(nx<3)THEN
193
194
195
197 . msgtype=msgerror,
198 . anmode=aninfo,
199 . i1=ids)
200
201
202 ENDIF
203
204 rho =get_u_geo(3,iprop)
205
206
207
208 lprev=
209 . sqrt((xel(1,2)-xel(1,1))*(xel(1,2)-xel(1,1))
210 . +(xel(2,2)-xel(2,1))*(xel(2,2)-xel(2,1))
211 . +(xel(3,2)-xel(3,1))*(xel(3,2)-xel(3,1)))
212 uvar(nb1) =lprev
213 uvarn(mb3)=lprev
214
215 mass(1) =half*rho*lprev
216 IF (lprev<=em15) THEN
217
218
219
220
221
223 . msgtype=msgerror,
224 . anmode=aninfo,
225 . i1=ids)
226 ENDIF
227 IF(mass(1)<=em15)THEN
228
229
230
231
232
234 . msgtype=msgerror,
235 . anmode=aninfo,
236 . i1=ids)
237 ENDIF
238 DO k=2,nx-1
239 lnext=
240 . sqrt((xel(1,k+1)-xel(1,k))*(xel(1,k+1)-xel(1,k))
241 . +(xel(2,k+1)-xel(2,k))*(xel(2,k+1)-xel(2,k))
242 . +(xel(3,k+1)-xel(3,k))*(xel(3,k+1)-xel(3,k)))
243 IF (lnext<=em15) THEN
244
245
246
247
248
250 . msgtype=msgerror,
251 . anmode=aninfo,
252 . i1=ids)
253 ENDIF
254 mass(k) = half*rho*(lprev+lnext)
255 uvarn(mb3+k-1)=lnext
256 uvar(nb1) =uvar(nb1)+lnext
257 IF(mass(k)<=em15)THEN
258
259
260
261
262
264 . msgtype=msgerror,
265 . anmode=aninfo,
266 . i1=ids)
267 ENDIF
268 lprev=lnext
269 ENDDO
270 mass(nx) = half*rho*lprev
271 IF(mass(nx)<=em15)THEN
272
273
274
275
276
278 . msgtype=msgerror,
279 . anmode=aninfo,
280 . i1=ids)
281 ENDIF
282
283 xk =get_u_geo(4,iprop)
284 dfdx=zero
286
287 xc =get_u_geo(5,iprop)
289 ffac=get_u_geo(12,iprop)
290
291 IF (ifunct==0.AND.ifv==0) THEN
292
293
294 l0 =uvar(nb1)
295 stif=xk
296 f =zero
297 ELSEIF (ifunct==0.AND.ifv/=0) THEN
298
299
300 l0 =uvar(nb1)
301 stif=zero
302 f =one
303 ELSE
304
305
306 l0 =uvar(nb1)
307 epstot=zero
308 f =get_u_func(ifunct,epstot,dfdx)
309 stif =ffac*dfdx
310 ENDIF
311
312 deps=zero
313 dgdx=zero
314 g =one
315 IF (ifv/=0) THEN
316 g=get_u_func(ifv,deps,dgdx)
317 stif=stif*g
318 ENDIF
319
320
321 IF( stif/uvar(nb1)<=em15
322 . .AND.(f*dgdx+xc)/uvar(nb1)<=em15)THEN
323
324
325
326
327
329 . msgtype=msgerror,
330 . anmode=aninfo,
331 . i1=ids)
332 ENDIF
333
334
335 xn=nx
336 dte = ep20
337 DO k=1,nx-1
338 xm = rho*uvarn(mb3+k-1)
339
340
341
342 xkm = stif/uvarn(mb3+k-1)
343
344
345 xcm = (f*dgdx+xc)/uvarn(mb3+k-1)
346 IF(xcm+xkm<em15)xm =one
348
349
350 dtk=(sqrt(xcm*xcm+xm*xkm)-xcm)/
max(em15,xkm)
352 IF (dtk==zero) THEN
353
354 dtk=dtc
355 ELSE
357 ENDIF
359 ENDDO
360
361
362 viscm(1) =(f*dgdx+xc)/uvarn(mb3)
363 stifm(1) =stif/uvarn(mb3)
364 DO k=2,nx-1
365 fact =one/uvarn(mb3+k-2) + one/uvarn(mb3+k-1)
366 stifm(k) =stif*fact
367 viscm(k) =(f*dgdx+xc)*fact
368 ENDDO
369 viscm(nx) =(f*dgdx+xc)/uvarn(mb3+nx-2)
370 stifm(nx) =stif/uvarn(mb3+nx-2)
371
372 DO k=1,nx
373 xiner(k) = zero
374 stifr(k) = zero
375 viscr(k) = zero
376
377 ENDDO
378
379 DO k=1,nx
380 uvarn(mb1+k-1)=mass(k)
381 ENDDO
382
383 WRITE(iout,1000) ids,l0,rho*l0,stif/l0
384 1000 FORMAT(' NSTRAND ELEMENT CHECKING :',/,
385 . ' ------------------------ ',/,
386 . ' ELEMENT IDENTIFIER . . . .',i8/,
387 . ' TOTAL LENGTH . . . . . . .',e12.4/,
388 . ' MASS . . . . . . . . . . .',e12.4/,
389 . ' INITIAL GLOBAL STIFFNESS .',e12.4//)
390
391 RETURN
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)
integer function get_u_pid(ip)
integer function get_u_pnu(ivar, ip, k)
integer function get_u_mid(im)
integer function get_u_mnu(ivar, im, k)