36
37
38
39 USE elbufdef_mod
40 use element_mod , only : nixr
41
42
43
44#include "implicit_f.inc"
45
46
47
48#include "com08_c.inc"
49#include "com01_c.inc"
50#include "param_c.inc"
51#include "scr02_c.inc"
52#include "scr17_c.inc"
53#include "scr18_c.inc"
54#include "cong2_c.inc"
55#include "units_c.inc"
56
57
58
59 INTEGER ITAB(*),WEIGHT(*),IXR(NIXR,*),
60 . IPART(LIPART1,*),IPARTR(*),IGEO(NPROPGI,*),NPBY(NNPBY,*),
61 . IPARG(NPARG,*)
62
63 my_real stifn(*), stifr(*),ms(*) ,in(*),x(3,*),
64 . dmas,diner,geo(npropg,*)
65
66 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
67
68
69
70 INTEGER I,J,M1,M2,IG,IGTYP,N1,N2,ITYP,NG,JFT,JLT,NEL,
71 . FLAG,NFT,NUVAR,JNTYP,IRB1,IRB2,FLAG_S,FLAG_PR,NV
72 my_real iner1,iner2,km1,krm1,km2,krm2,xx,kx1,kx2,kr1,dtc,
alpha,
73 . xl,kxmax,krmax,kx,kr,scf,get_u_geo,
74 . xx1,xx2,dta,mass1,mass2
75 CHARACTER(LEN=30) :: INFO_MESSAGE
76
77 TYPE(G_BUFEL_),POINTER :: GBUF
78
79 EXTERNAL get_u_geo
80
81
82 flag_pr = 0
83
84 dtc = dt2
85 dta = dtmin1(11)
86
87 IF (tt==0) THEN
88
89 IF (nodadt>0) THEN
90 dtc =
max(dtc,dtmin1(11)/dtfac1(11))
91 IF (dtmx>em20) dtc =
min(dtc,dtmx)
92 ENDIF
93
94 IF (dtc>90000) THEN
95 IF (dta==0) THEN
96 print *,"ERROR NO TARGET TIME STEP DT=",dtc
97 print *,"STIFFNESS CAN NOT BE COMPUTED"
99 ELSE
100 dtc = dta
101 ENDIF
102 ENDIF
103
105
106 DO ng=1,ngroup
107 ityp = iparg(5,ng)
108 nel = iparg(2,ng)
109 nft = iparg(3,ng)
110 jft = 1
112 gbuf => elbuf_tab(ng)%GBUF
113 IF (ityp /= 6) GOTO 250
114
115 DO i=jft,jlt
116 j = i + nft
117 ig = ipart(2,ipartr(j))
118 igtyp = igeo(11,ig)
119 nuvar = nint(geo(25,ig))
120 nv = nuvar*(i-1) + 1
121 IF (igtyp==45) THEN
122 scf = get_u_geo(11,ig)
123 jntyp = nint(get_u_geo(1,ig))
124 flag = nint(get_u_geo(10,ig))
125 flag_s = 0
126 IF (flag==0) THEN
127
128 n1 = ixr(2,j)
129 n2 = ixr(3,j)
130
131 irb1 = nint(gbuf%VAR(nv + 37))
132 IF (irb1 > 0) THEN
133 m1 = npby(1,irb1)
134 ELSE
135 m1 = n1
136 ENDIF
137
138 irb2 = nint(gbuf%VAR(nv + 38))
139 IF (irb2 > 0) THEN
140 m2 = npby(1,irb2)
141 ELSE
142 m2 = n2
143 ENDIF
144
145 xl = ((x(1,n1)-x(1,n2))**2)+((x(2,n1)-x(2,n2))**
146 . +((x(3,n1)-x(3,n2))**2)
147 xx1 = ((x(1,n1)-x(1,m1))**2)+((x(2,n1)-x(2,m1))**2)
148 . +((x(3,n1)-x(3,m1))**2)
149 xx2 = ((x(1,n2)-x(1,m2))**2)+((x(2,n2)-x(2,m2))**2)
150 . +((x(3,n2)-x(3,m2))**2)
152
153
154 mass1 = ms(m1)
155 iner1 = in(m1)
156 km1 = stifn(m1)
157 krm1 = stifr(m1)
158
159 kx1 = (2*mass1/(
alpha*dtc*dtc)) - km1
160 IF (iner1 > zero) THEN
161 kx2 = 0.8*(iner1/(
alpha*dtc*dtc)- krm1)/(
max(em20,(xx+xl)))
162 kr = iner1/(
alpha*dtc*dtc)- krm1
163 ELSE
164 kx2 = ep30
165 kr = zero
166 ENDIF
168
169
170 mass2 = ms(m2)
171 iner2 = in(m2)
172 km2 = stifn(m2)
173 krm2 = stifr(m2)
174
175 kx1 = (2*mass2/(
alpha*dtc*dtc)) - km2
176 IF (iner2 > zero) THEN
177 kx2 = 0.8*(iner2/(
alpha*dtc*dtc)- krm2)/(
max(em20,(xx+xl)))
178 kr1 = iner2/(
alpha*dtc*dtc)- krm2
179 ELSE
180 kx2 = ep30
181 kr1 = zero
182 ENDIF
183
184 kxmax =
min(kx1,kx2,kxmax)
186
187
188 kx =
max(kxmax,2*km1,2*km2)
189 IF ((kx - kxmax)>1e-8) flag_s = 1
190 IF ((iner1 == zero).OR.(iner2 == zero)) THEN
191
192 kr = zero
193 krmax = kr
194 flag_s = 0
195 ELSE
196 krmax = kr
197 kr =
max(kr,2*krm1,2*krm2)
198 ENDIF
199
200 info_message = ''
201 IF ((kx-kxmax)>1e-8 .OR. (kr-krmax)>1e-8) THEN
202 IF ((irb1 > 0).AND.(irb2 > 0)) THEN
203 info_message = '(FROM RIGID BODIES)'
204 ELSE
205 info_message = '(FROM CONNECTED STRUCTURES)'
206 ENDIF
207 ENDIF
208
209 IF (flag_s==1) THEN
210 kr =
max(kr,1.3*kx*(xx+xl))
211 ENDIF
212
213 kx = scf*kx
214 kr = scf*kr
215
216 WRITE(iout,'(I10,I10,8X,1PE11.4,8X,1PE11.4,1X,A)')
217 . ixr(nixr,j),jntyp,kx,kr,info_message
218
219 gbuf%VAR(nv + 16) = kx
220 gbuf%VAR(nv + 17) = kr
221
222
223 IF (jntyp==1) THEN
224 gbuf%VAR(nv + 18) = kx
225 gbuf%VAR(nv + 19) = kx
226 gbuf%VAR(nv + 20) = kx
227
228 ELSEIF (jntyp==2) THEN
229 gbuf%VAR(nv + 18) = kx
230 gbuf%VAR(nv + 19) = kx
231 gbuf%VAR(nv + 20) = kx
232 gbuf%VAR(nv + 31) = kr
233 gbuf%VAR(nv + 32) = kr
234
235 ELSEIF (jntyp==3) THEN
236 gbuf%VAR(nv + 19) = kx
237 gbuf%VAR(nv + 20) = kx
238 gbuf%VAR(nv + 31) = kr
239 gbuf%VAR(nv + 32) = kr
240
241 ELSEIF (jntyp==4) THEN
242 gbuf%VAR(nv + 18) = kx
243 gbuf%VAR(nv + 31) = kr
244 gbuf%VAR(nv + 32) = kr
245
246 ELSEIF (jntyp==5) THEN
247 gbuf%VAR(nv + 18) = kx
248 gbuf%VAR(nv + 19) = kx
249 gbuf%VAR(nv + 20) = kx
250 gbuf%VAR(nv + 30) = kr
251
252 ELSEIF (jntyp==6) THEN
253 gbuf%VAR(nv + 19) = kx
254 gbuf%VAR(nv + 20) = kx
255 gbuf%VAR(nv + 30) = kr
256 gbuf%VAR(nv + 31) = kr
257 gbuf%VAR(nv + 32) = kr
258
259 ELSEIF (jntyp==7) THEN
260 gbuf%VAR(nv + 18) = kx
261 gbuf%VAR(nv + 30) = kr
262 gbuf%VAR(nv + 31) = kr
263 gbuf%VAR(nv + 32) = kr
264
265 ELSEIF (jntyp==8) THEN
266 gbuf%VAR(nv + 18) = kx
267 gbuf%VAR(nv + 19) = kx
268 gbuf%VAR(nv + 20) = kx
269 gbuf%VAR(nv + 30) = kr
270 gbuf%VAR(nv + 31) = kr
271 gbuf%VAR(nv + 32) = kr
272 ENDIF
273
274 ENDIF
275 ENDIF
276
277 ENDDO
278250 CONTINUE
279 ENDDO
280
281
282
283 ENDIF
284
285 RETURN
286