173
174
175
179 USE elbufdef_mod
180
181
182
183#include "implicit_f.inc"
184
185
186
187#include "com01_c.inc"
188#include "param_c.inc"
189#include "scr19_c.inc"
190#include "units_c.inc"
191#include "impl1_c.inc"
192
193
194
195 INTEGER IPARG(NPARG,NGROUP),IPM(NPROPMI,*),IGEO(*)
196
197
198
199 INTEGER I,IFA,IR,IS,IT,NG,BUFLEN,ERR,
200 . NEL,NPT,NPG,MLW,ISORTH,ISRATE,ISROT,IREP,ISIGV,IGTYP,
201 . ISTRA,IFAIL,NFAIL,IEOS,IXFEM,NLAY,NPTR,NPTS,NPTT,NVAR,
202 . NFT,NFT0,KFTS,ITY,JALE,OFF,ISS,ICPRE,NSG,ICNOD,ISNOD,JEUL,
203 . JHBE,JIVF,JPOR,IPLA,L_ETFAC,L_SIGE,L_A_KT,L_SUBKT,LENF,
204 . IGROUC(NGROUP),IG
205 TYPE(KTBUF_STRUCT_) , POINTER :: KTBUF
206 TYPE(L_KTBUFEP_) , POINTER :: LBUF
207 TYPE(MLAW_TAG_) , POINTER :: MTAG
208 TYPE(ELBUF_STRUCT_) , DIMENSION(NGROUP) :: ELBUF_TAB
209
210
211
212
213
215
216 lenf =0
218 DO ig = 1,ngroup
219 ng = igrouc(ig)
220 mlw = iparg(1,ng)
221 nel = iparg(2,ng)
222 nft = iparg(3,ng)
223 npt = iparg(6,ng)
224 off = iparg(8,ng)
225 ity = iparg(5,ng)
226 jhbe = iparg(23,ng)
227 npg = iparg(48,ng)
228 nlay = 1
229 nptr = 1
230 npts = 1
231 nptt = 1
232
233 IF (mlw == 0 .OR. mlw == 13 .OR. off==1) cycle
234
235 l_etfac = 0
236 l_sige = 0
237 l_a_kt = 0
238 l_subkt = 0
239
240 IF (ity == 1) THEN
241
242 nlay = elbuf_tab(ng)%NLAY
243 nptr = elbuf_tab(ng)%NPTR
244 npts = elbuf_tab(ng)%NPTS
245 nptt = elbuf_tab(ng)%NPTT
246
247 isnod = iparg(28,ng)
248 ipla = iparg(29,ng)
249 isrot = iparg(41,ng)
250
251 IF (isnod==8 .AND. jhbe/=14 .AND. jhbe/=17) THEN
252 WRITE(iout,*)' **WARNING : ONLY ISOLID=14,17 ARE AVAILABLE',
253 1 ' WITH CONSISTING TANGENT MATRIX, OPTION IGNORED. '
254 WRITE(istdo,*)' **WARNING : ONLY ISOLID=14,17 ARE AVAILABLE',
255 1 ' WITH CONSISTING TANGENT MATRIX, OPTION IGNORED. '
256
257 ELSE
258 IF (mlw==42.OR.mlw==62.OR.mlw==69.OR.mlw==82) THEN
259 l_etfac=1
260 IF (ihelas ==0 ) ihelas=1
261 ELSEIF (mlw==2.OR.mlw==36) THEN
262 l_etfac=1
263 l_sige = 6
264 l_a_kt = 1
265 ENDIF
266 END IF
267
268 ELSEIF(ity==3.OR.ity==7) THEN
269
270 IF (jhbe==11) THEN
271
272 nptr = 1
273 npts = npg
274 nptt = npt
275 ELSE
276 nptr = 1
277 npts = 1
278 nptt = npt
279 ENDIF
280 IF (nptt == 0 .AND. mlw /= 1) THEN
281 CALL ancmsg(msgid=227,anmode=aninfo,
282 . c1='FOR IMPLICIT NONLINEAR')
284 ENDIF
285
286 IF (mlw==78) THEN
287 l_etfac=1
288 ELSEIF (mlw==2.OR.mlw==36) THEN
289
290 l_etfac=1
291 l_sige = 5
292 l_a_kt = 1
293 END IF
294 ENDIF
295
296
297
298 IF (ity /=1 .AND.ity /=3 .AND.ity /=7 ) cycle
299 ALLOCATE (
ktbuf_str(ng)%MLAW_TAG(0:maxlaw) ,stat=err)
300 ALLOCATE (
ktbuf_str(ng)%ETFAC(nel*l_etfac) ,stat=err)
301 ALLOCATE (
ktbuf_str(ng)%KTBUFEP(nptr,npts
302
305 mtag%L_ETFAC=l_etfac
306 mtag%L_A_KT =l_a_kt
307 mtag%L_SIGE =l_sige
308 mtag%L_SUBKT=l_subkt
309
310
311
312
313 DO ir = 1,nptr
314 DO is = 1,npts
315 DO it = 1,nptt
316
317
318
320 ALLOCATE(lbuf%A_KT(nel*l_a_kt), stat=err)
321 lbuf%A_KT = zero
322 ALLOCATE(lbuf%SIGE(nel*l_sige), stat=err)
323 lbuf%SIGE = zero
324 lenf = lenf + nel*(l_etfac+l_a_kt+l_sige)
325 ENDDO
326 ENDDO
327 ENDDO
328
329 IF (err /= 0) THEN
330 CALL ancmsg(msgid=19,anmode=aninfo,
331 . c1='FOR IMPLICIT NONLINEAR')
333 ENDIF
334 ENDDO
335
336
337 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)