43
44
45
51 use element_mod , only : nixs,nixc,nixt,nixp,nixr,nixtg
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com04_c.inc"
60#include "units_c.inc"
61#include "fxbcom.inc"
62
63
64
65 INTEGER ITABM1(*),FXBIPM(NBIPM,*)
66 INTEGER IXS(NIXS,*),ISOLOFF(*),
67 * IXC(NIXC,*),ISHEOFF(*),
68 * IXT(NIXT,*),ITRUOFF(*),
69 * IXP(NIXP,*),IPOUOFF(*),
70 * IXR(NIXR,*),IRESOFF(*),
71 * IXTG(NIXTG,*),ITRIOFF(*)
72 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
73
74
75
76 INTEGER NFX,ID,NMOD,NMST,NBNO,NME,NTR,ADRGLM,
77 . ADRCP,ADRLM,ADRFLS,ADRDLS,ADRVAR,ADRRPM,IMOD,INO,I,LEN,
78 . NLIG,NRES,ILIG,ADRCP2,IR,ADRNOD,NUMNO(10),IDAMP,ISHELL,
79 . ADRMCD,IBLO,IFILE,IMIN,IMAX
80 INTEGER IDUM1
81 INTEGER NOD
82 INTEGER II,NALL,LENGTH,FLAG,SIZE_STIFF,SIZE_MASS
83 my_real rdum1,rdum2,rdum3,rdum4,rdum5
84 CHARACTER(LEN=NCHARTITLE) :: TITR
85 CHARACTER :: MESS*40,NWLINE*100,FXBFILE*100,EXTENSION*3
86
87 INTEGER, DIMENSION(:),ALLOCATABLE :: ITAG
88
89 INTEGER :: LEN_TMP_NAME
90 CHARACTER(len=2148) :: TMP_NAME
91 LOGICAL :: IS_AVAILABLE
92
93
94
95 INTEGER USR2SYS
96
97 ALLOCATE (itag(numnod))
98
99 lenmat = 0
100 adrnod = 1
101 adrglm = 1
102 adrcp = 1
103 adrlm = 1
104 adrfls = 1
105 adrdls = 1
106 adrvar = 1
107 adrrpm = 1
108 adrmcd = 1
109 is_available = .false.
110
111
113
114
115 DO nfx = 1,nfxbody
116
117 itag(1:numnod) = 0
118 size_stiff = 0
119 size_mass = 0
120
121
122 titr = ''
125 . option_titr = titr)
126
127
128 CALL hm_get_intv(
'node_IDm',idum1 ,is_available,lsubmodel)
129 CALL hm_get_intv(
'Imin' ,imin ,is_available,lsubmodel)
130 CALL hm_get_intv(
'Imax' ,imax ,is_available,lsubmodel)
131
132
134
135 length = len_trim(fxbfile)
136 IF (length > 2) extension = fxbfile(length-2:length)
137
138 IF ((extension == "pch").OR.(extension == "PCH")) THEN
139
140 flag = 0
142 . size_mass,itabm1,fxbfile,
id,titr)
143
144 nbno = 0
145 DO i=1,numnod
146 IF (itag(i) > 0) THEN
147 nbno = nbno + 1
148 ENDIF
149 ENDDO
150
151 fxbipm(41,nfx) = 2
152 fxbipm(42,nfx) = size_stiff
153 fxbipm(43,nfx) = size_mass
154
155 ELSE
156
157
158 fxbipm(41,nfx) = 1
159
162 OPEN(unit=ificm,file=tmp_name(1:len_tmp_name),
163 . access='SEQUENTIAL',form='FORMATTED',
164 . status='OLD',err=999)
165
167 READ(nwline,fmt='(7I8)',err=9999)
168 . nmod, nmst, nbno, ishell, idamp, iblo, ifile
169
170 IF (ishell == 0) THEN
171 nme = 12
172 ELSE
173 nme = 15
174 ENDIF
175 imin = 0
176 IF (imax == 0) imax = nmod
178 imax =
min(nmod,imax)
179
180 adrmcd = adrmcd+nme*nme
181
182 nlig = nbno/10
183 nres = nbno-nlig*10
184 DO ilig = 1,nlig
186 READ(nwline,'(10I8)',err=9999)
187 . (numno(i),i=1,10)
188 DO i=1,10
190 itag(nod)=1
191 ENDDO
192 ENDDO
193 IF (nres > 0) THEN
195 READ(nwline,'(10I8)',err=9999)
196 . (numno(i),i=1,nres)
197 DO i = 1,nres
199 itag(nod) = 1
200 ENDDO
201 ENDIF
202
203 ntr = 9
205 READ(nwline,'(5F16.0)',err=9999)
206 . rdum1,rdum2,rdum3,rdum4,rdum5
208 READ(nwline,'(5F16.0)',err=9999)
209 . rdum1,rdum2,rdum3,rdum4,rdum5
210
211 IF (idamp > 0) THEN
213 READ(nwline,'(2F16.0)',err=9999)
214 . rdum1,rdum2
215 ELSE
216
217 ENDIF
218
219 IF (iblo == 0) THEN
220 DO imod = 1,nme
221 DO ino = 1,nbno
224 ENDDO
225 ENDDO
226 ENDIF
227 DO imod = 1,nmod
228 DO ino = 1,nbno
231 ENDDO
232 ENDDO
233
234 IF (nmod > 0) THEN
235 len = nmod
236 nlig = len/5
237 nres = len-nlig*5
238 DO ilig = 1,nlig
240 READ(nwline,'(5F16.0)',err=9999)
241 . rdum1,rdum2,rdum3,rdum4,rdum5
242 ENDDO
243 IF (nres > 0) THEN
245 READ(nwline,'(5F16.0)',err=9999)
246 . rdum1,rdum2,rdum3,rdum4,rdum5
247 ENDIF
248 ENDIF
249
250 IF (nmst > 0) THEN
251 len = nmst*(2*nmod-nmst+1)/2
252 nlig = len/5
253 nres = len-nlig*5
254 DO ilig = 1,nlig
256 READ(nwline,'(5F16.0)',err=9999)
257 . rdum1,rdum2,rdum3,rdum4,rdum5
258 ENDDO
259 IF (nres > 0) THEN
261 READ(nwline,'(5F16.0)',err=9999)
262 . rdum1,rdum2,rdum3,rdum4,rdum5
263 ENDIF
264 ENDIF
265
266 IF ((nmod-nmst) > 0) THEN
267 len = nmod-nmst
268 nlig = len/5
269 nres = len-nlig*5
270 DO ilig = 1,nlig
272 READ(nwline,'(5F16.0)',err=9999)
273 . rdum1,rdum2,rdum3,rdum4,rdum5
274 ENDDO
275 IF (nres > 0) THEN
277 READ(nwline,'(5F16.0)',err=9999)
278 . rdum1,rdum2,rdum3,rdum4,rdum5
279 ENDIF
280 ENDIF
281
282 IF (iblo == 1) THEN
283 GOTO 100
284 ENDIF
285
286 len = nme*(nme+1)/2
287 nlig = len/5
288 nres = len-nlig*5
289 DO ilig = 1,nlig
291 READ(nwline,'(5F16.0)',err=9999)
292 . rdum1,rdum2,rdum3,rdum4,rdum5
293 ENDDO
294 IF (nres > 0) THEN
296 READ(nwline,'(5F16.0)',err=9999)
297 . rdum1,rdum2,rdum3,rdum4,rdum5
298 ENDIF
299
300 IF (nmod > 0) THEN
301 adrcp2 = adrcp
302 DO ir = 1,ntr
303 len = nme*nmod
304 nlig = len/5
305 nres = len-nlig*5
306 DO ilig = 1,nlig
308 READ(nwline,'(5F16.0)',err=9999)
309 . rdum1,rdum2,rdum3,rdum4,rdum5
310 ENDDO
311 IF (nres > 0) THEN
313 READ(nwline,'(5F16.0)',err=9999)
314 . rdum1,rdum2,rdum3,rdum4,rdum5
315 ENDIF
316 ENDDO
317
318 DO ir = 1,ntr
319 len = nme*nmod
320 nlig = len/5
321 nres = len-nlig*5
322 DO ilig = 1,nlig
324 READ(nwline,'(5F16.0)',err=9999)
325 . rdum1,rdum2,rdum3,rdum4,rdum5
326 ENDDO
327 IF (nres > 0) THEN
329 READ(nwline,'(5F16.0)',err=9999)
330 . rdum1,rdum2,rdum3,rdum4,rdum5
331 ENDIF
332 ENDDO
333 ENDIF
334
335 ENDIF
336
337 100 CLOSE(ificm)
338
339 fxbipm(3,nfx) = nbno
340 lennod = lennod + nbno
341 lenmat = lenmat + size_stiff + size_mass
342
343
344 DO ii = 1,numels
345 nall = itag(ixs(2,ii)) * itag(ixs(3,ii)) *
346 + itag(ixs(4,ii)) * itag(ixs(5,ii)) *
347 + itag(ixs(6,ii)) * itag(ixs(7,ii)) *
348 + itag(ixs(8,ii)) * itag(ixs(9,ii))
349 IF (nall /= 0) THEN
350 isoloff(ii) = 3
351 END IF
352 ENDDO
353
354
355 DO ii=1,numelc
356 nall = itag(ixc(2,ii)) * itag(ixc(3,ii)) *
357 + itag(ixc(4,ii)) * itag(ixc(5,ii))
358 IF (nall /= 0) THEN
359 isheoff(ii) = 3
360 END IF
361 ENDDO
362
363
364 DO ii=1,numelt
365 nall = itag(ixt(2,ii)) * itag(ixt(3,ii))
366 IF (nall /= 0) THEN
367 itruoff(ii) = 3
368 END IF
369 ENDDO
370
371
372 DO ii=1,numelp
373 nall = itag(ixp(2,ii)) * itag(ixp(3,ii))
374 IF (nall /= 0) THEN
375 ipouoff(ii) = 3
376 END IF
377 ENDDO
378
379
380 DO ii=1,numelr
381 nall = itag(ixr(2,ii)) * itag(ixr(3,ii))
382 IF (nall /= 0) THEN
383 iresoff(ii) = 3
384 END IF
385 ENDDO
386
387
388 DO ii=1,numeltg
389 nall = itag(ixtg(2,ii)) * itag(ixtg(3,ii)) * itag(ixtg(4,ii))
390 IF (nall /= 0) THEN
391 itrioff(ii) = 3
392 END IF
393 ENDDO
394
395 ENDDO
396
397
398 IF (ALLOCATED(itag)) DEALLOCATE (itag)
399
400 RETURN
402 IF (ALLOCATED(itag)) DEALLOCATE (itag)
403 RETURN
4049999
CALL ancmsg(msgid=566,
405 . msgtype=msgerror,
406 . anmode=aninfo,
408 . c1=titr,
409 . c2=fxbfile,
410 . c3=nwline)
411 IF (ALLOCATED(itag)) DEALLOCATE (itag)
412 RETURN
413
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_get_string(name, sval, size, is_available)
subroutine hm_option_start(entity_type)
subroutine fxrline(ific, nwline, id, titr)
character(len=infile_char_len) infile_name
integer, parameter nchartitle
subroutine read_pch_file(flag, matrix, itag, matrix_add, cpt_stiff, cpt_mass, itabm1, pch_file, id, titr)
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 usr2sys(iu, itabm1, mess, id)