49 use element_mod , only :nixs,nixc,nixtg
50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "com04_c.inc"
58#include "param_c.inc"
59#include "units_c.inc"
60
61
62
63 INTEGER NRTS, NRTM, NINT, NTY, NOINT, NSN, NMN, IGAP
64 INTEGER IRECTS(4,*), IRECTM(4,*), IXS(NIXS,*), IXC(NIXC,*),
65 . NSV(*), IXTG(NIXTG,*),
66 . KNOD2ELS(*), (*), KNOD2ELTG(*), NOD2ELS(*), NOD2ELC(*),
67 . NOD2ELTG(*),
68 . INTTH, MSR(*), IXS10(*),
69 . IXS16(*), IXS20(*), IPARTC(*), IPARTTG(*),IGEO(NPROPGI,*),
70 . IWORKSH(*)
71
73 . gap, gapmin, gapinf, gapmax, gapscale, bgapsmx,
74 . x(3,*), pm(npropm,*), geo(npropg,*), thk(*), wa(*),
75 . gap_s(*), stfn(*), stf(*), gap_m(*),pm_stack(*)
76 INTEGER ID
77 CHARACTER(LEN=NCHARTITLE) :: TITR
78
79
80
81 INTEGER I, INRT, NELS, NELC, NELTG, IP, MG, NDX,
82 . IGTYP
83
85 . dxm, gapmx, gapmn,
area, dx, gapm
86
87 dxm=zero
88 ndx=0
89 gapmx=ep30
90 gapmn=ep30
91
92
93
94 IF(igap>=1)THEN
95 DO i=1,numnod
96 wa(i)=zero
97 ENDDO
98 END IF
99
100 DO 250 i=1,nrts
101 inrt=i
102
103
104
105 CALL insol3(x,irects,ixs,nint,nels,inrt,
106 .
area,noint,knod2els ,nod2els ,0 ,ixs10,
107 . ixs16,ixs20)
108
109
110
111 CALL incoq3(irects,ixc ,ixtg ,nint ,nelc ,
112 . neltg,inrt,geo ,pm ,knod2elc ,
113 . knod2eltg ,nod2elc ,nod2eltg,thk,nty,igeo,
114 . pm_stack , iworksh )
115 IF(neltg/=0) THEN
116 IF(igap>=1)THEN
117 mg=ixtg(5,neltg)
118 igtyp = igeo(11,mg)
119 ip = iparttg(neltg)
120 dx=half*geo(1,mg)
121 IF(igtyp == 17) dx = half*thk(numelc + neltg)
122 wa(ixtg(2,neltg))=
max(wa(ixtg(2,neltg)),dx)
123 wa(ixtg(3,neltg))=
max(wa(ixtg(3,neltg)),dx)
124 wa(ixtg(4,neltg))=
max(wa(ixtg(4,neltg)),dx)
125 END IF
126 ELSEIF(nelc/=0) THEN
127 IF(igap>=1)THEN
128 mg=ixc(6,nelc)
129 igtyp = igeo(11,mg)
130 ip = ipartc(nelc)
131 dx=half*geo(1,mg)
132 IF(igtyp == 17) dx = half*thk(nelc)
133 wa(ixc(2,nelc))=
max(wa(ixc(2,nelc)),dx)
134 wa(ixc(3,nelc))=
max(wa(ixc(3,nelc)),dx)
135 wa(ixc(4,nelc))=
max(wa(ixc(4,nelc)),dx)
136 wa(ixc(5,nelc))=
max(wa(ixc(5,nelc)),dx)
137 END IF
138 ENDIF
139
140 IF(nels+nelc+neltg==0)THEN
141
142 IF(nint>0) THEN
144 . msgtype=msgerror,
145 . anmode=aninfo_blind_2,
147 . c1=titr,
148 . i2=i)
149 ENDIF
150 IF(nint<0) THEN
152 . msgtype=msgerror,
153 . anmode=aninfo_blind_2,
155 . c1=titr,
156 . i2=i)
157 ENDIF
158 ENDIF
159 250 CONTINUE
160
161 IF(igap>=1)THEN
162 DO i=1,nsn
163 gapm=gapscale * wa(nsv(i))
164 gap_s(i)= gapm
165 ENDDO
166 ENDIF
167
168
169
170 DO 350 i=1,nrtm
171 inrt=i
172 gapm=zero
173 CALL i4gmx3(x,irectm,inrt,gapmx)
174
175
176
177 CALL insol3(x,irectm,ixs,nint,nels,inrt,
178 .
area,noint,knod2els ,nod2els ,0 ,ixs10,
179 . ixs16,ixs20)
180
181
182
183 CALL incoq3(irectm,ixc ,ixtg ,nint ,nelc ,
184 . neltg,inrt,geo ,pm ,knod2elc ,
185 . knod2eltg ,nod2elc ,nod2eltg
186 . pm_stack , iworksh )
187 IF(neltg/=0) THEN
188
189 mg=ixtg(5,neltg)
190 igtyp =igeo(11,mg)
191 ip = iparttg(neltg)
192 dx =geo(1,mg)*gapscale
193 IF(igtyp == 17) dx =thk(numelc+neltg)*gapscale
194
195 ELSEIF(nelc/=0) THEN
196
197 mg=ixc(6,nelc)
198 igtyp =igeo(11,mg)
199 ip = ipartc(nelc)
200 dx =geo(1,mg)*gapscale
201 IF(igtyp == 17) dx =thk(nelc)*gapscale
202
203 ENDIF
204 gapm=half*dx
205 gapmn =
min(gapmn,half*dx)
206 dxm=dxm+dx
207 ndx=ndx+1
208 IF(igap/=0) gap_m(i)=gapm
209
210 IF(nels+nelc+neltg==0)THEN
211
212 IF(nint>0) THEN
214 . msgtype=msgerror,
215 . anmode=aninfo_blind_2,
217 . c1=titr,
218 . i2=i)
219 ENDIF
220 IF(nint<0) THEN
222 . msgtype=msgerror,
223 . anmode=aninfo_blind_2,
225 . c1=titr,
226 . i2=i)
227 ENDIF
228 ENDIF
229 350 CONTINUE
230
231
232
233 gapmx=sqrt(gapmx)
234 IF(igap==0)THEN
235
236 IF(gap<=zero)THEN
237 IF(ndx/=0)THEN
238 gap = dxm/ndx
239 gap =
min(half*gapmx,gap)
240 ELSE
241 gap = em01 * gapmx
242 ENDIF
243 WRITE(iout,1000)gap
244 ENDIF
245 gapmin = gap
246 gapmax = gap
247 ELSE
248
249
250
251 IF(gap<=zero)THEN
252 IF(ndx/=0)THEN
253 gapmin = gapmn
254 gapmin =
min(half*gapmx,gapmin)
255 ELSE
256 gapmin = em01 * gapmx
257 ENDIF
258 ELSE
259 gapmin=gap
260 END IF
261 WRITE(iout,1000)gapmin
262
263
264 IF(gapmax==zero)gapmax=ep30
265 WRITE(iout,1500)gapmax
266 gap =
min(gap,gapmax)
267 ENDIF
268
269
270
271
272 bgapsmx = zero
273 IF (igap==0) THEN
274 gapinf=gap
275 ELSE
276 gapinf=ep30
277 DO i = 1, nsn
278 gapinf =
min(gapinf,gap_s(i))
279 bgapsmx =
max(bgapsmx,gap_s(i))
280 ENDDO
281 DO i = 1, nrtm
282 gapinf =
min(gapinf,gap_m(i))
283 ENDDO
284 gapinf=
max(gapinf,gapmin)
285 ENDIF
286
287
288
289 DO i=1,nrtm
290 stf(i)=one
291 END DO
292
293
294
295 DO i=1,nsn
296 stfn(i) = one
297 END DO
298
299 RETURN
300 1000 FORMAT(2x,'GAP MIN = ',1pg20.13)
301 1500 FORMAT(2x,'GAP MAX = ',1pg20.13)
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine i4gmx3(x, irect, i, gapmax)
subroutine incoq3(irect, ixc, ixtg, nint, nel, neltg, is, geo, pm, knod2elc, knod2eltg, nod2elc, nod2eltg, thk, nty, igeo, pm_stack, iworksh)
subroutine insol3(x, irect, ixs, nint, nel, i, area, noint, knod2els, nod2els, ir, ixs10, ixs16, ixs20)
integer, parameter nchartitle
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)