156
157
158
167
168
169
170#include "implicit_f.inc"
171
172
173
174#include "com01_c.inc"
175#include "com04_c.inc"
176#include "units_c.inc"
177#include "eigcom.inc"
178
179
180
181 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
182 INTEGER EIGIPM(*), EIGIBUF(*),ITABM1(*)
184 . eigrpm(*)
185
186 TYPE (GROUP_) , DIMENSION(NGRNOD) :: IGRNOD
187 TYPE (SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
188
189
190
191 INTEGER ID,SUB_INDEX,UID
192 LOGICAL IS_AVAILABLE
193 INTEGER I, ITAG(NUMNOD), IAD, IADF, IE, IGU1, IGU2, NN, IG, NNI,
194 . ICT, ICR, NEV, NBLFR, INCV, NITER, IPRI, NDOF, NMS, IFILE,
195 . J6(6), ITYP, IADB, IRCM, J, JJ, K, NLIG, NRES, IADN,
196 . NBNO, NBMO, II, IPRSP, IMLS, IFLAGUNIT,LEN_MODFILE,MAXL
198 . cutfreq, shiftini, tol, fac_t,fac_fre
199 CHARACTER(LEN=NCHARTITLE)::TITR
200 CHARACTER(LEN=NCHARFIELD)::STRING
201 CHARACTER :: CODE*7,
202 . CTYPE*33, CPRE*17, NWLINE*100, MESS*40, MODFILE*2148,
203 . CIMLS*3 ,CPRSP*4,MODFILE_TMP*2148
204 INTEGER, ALLOCATABLE :: NODES(:)
206 . ALLOCATABLE :: modes(:,:,:)
207
208
209
210 INTEGER USR2SYS
211 DATA mess/'ADDITIONAL MODES FILE : NODES '/
212
213 iad=1
214 iadb=1
215 iadf=1
217 ircm = 0
218 DO ie=1,neig
219 itag(1:numnod)=0
222 . unit_id = uid,
223 . submodel_index = sub_index,
224 . option_titr = titr)
225 CALL hm_get_intv(
'grnd_ID',igu1,is_available,lsubmodel)
226 CALL hm_get_intv(
'grnd_bc',igu2,is_available,lsubmodel)
227 CALL hm_get_intv(
'Tx',j6(1),is_available,lsubmodel)
228 CALL hm_get_intv(
'Ty',j6(2),is_available,lsubmodel)
229 CALL hm_get_intv(
'Tz',j6(3),is_available,lsubmodel)
230 CALL hm_get_intv(
'OmegaX',j6(4),is_available,lsubmodel)
231 CALL hm_get_intv(
'OmegaY',j6(5),is_available,lsubmodel)
232 CALL hm_get_intv(
'OmegaZ',j6(6),is_available,lsubmodel)
233 CALL hm_get_intv(
'Ifile',ifile,is_available,lsubmodel)
234 CALL hm_get_intv(
'Nmod',nev,is_available,lsubmodel)
235 CALL hm_get_intv(
'Inorm',iprsp,is_available,lsubmodel)
236 CALL hm_get_floatv(
'Cutfreq',cutfreq,is_available,lsubmodel,unitab)
237 CALL hm_get_floatv(
'Freqmin',shiftini,is_available,lsubmodel,unitab)
238 CALL hm_get_intv(
'Nbloc',nblfr,is_available,lsubmodel)
239 CALL hm_get_intv(
'Incv',incv,is_available,lsubmodel)
240 CALL hm_get_intv(
'Niter',niter,is_available,lsubmodel)
241 CALL hm_get_intv(
'Ipri',ipri,is_available,lsubmodel)
243
244 iflagunit = 0
245 DO j=1,unitab%NUNITS
246 IF (unitab%UNIT_ID(j) == uid) THEN
247 fac_t = unitab%FAC_T(j)
248 iflagunit = 1
249 EXIT
250 ENDIF
251 ENDDO
252 IF (uid/=0.AND.iflagunit==0) THEN
253 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
254 . i2=uid,i1=
id,c1=
'EIG',
255 . c2='EIG',
256 . c3=titr)
257 ENDIF
259
260 IF (ifile==2) THEN
261
262 WRITE(istdo,'(A)') ' ** WARNING - EIG OPTION:'
263 WRITE(istdo,'(A)')
264 . ' ** USE OF NASTRAN OUTPUT FILE NOT YET IMPLEMENTED'
265 WRITE(iout,'(A)') ' ** WARNING - EIG OPTION:'
266 WRITE(iout,'(A)')
267 . ' ** USE OF NASTRAN OUTPUT FILE NOT YET IMPLEMENTED'
268 ifile=0
269 ENDIF
270
271 IF (ifile==1.AND.igu2/=0) THEN
273 . msgtype=msgwarning,
274 . anmode=aninfo_blind_1,
276 . c1=titr,
277 . i2=igu2)
278 igu2=0
279 ENDIF
280
281 IF (nspmd>1.AND.ifile==1) THEN
283 . msgtype=msgwarning,
284 . anmode=aninfo,
286 . c1=titr)
287 ifile=0
288 ENDIF
289
290 imls=0
291 IF (igu1==0) THEN
292 DO i=1,numnod
293 eigibuf(iadb+i-1)=i
294 ENDDO
295 nn=numnod
296 ELSE
297 ig=0
298 DO i=1,ngrnod
299 IF(igrnod(i)%ID==igu1)THEN
300 ig=i
301 ENDIF
302 ENDDO
303
304 nn=igrnod(ig)%NENTITY
305 DO i=1,nn
306 eigibuf(iadb+i-1)=igrnod(ig)%ENTITY(i)
307 itag(igrnod(ig)%ENTITY(i))=1
308 ENDDO
309 ENDIF
310 eigipm(iad+9)=nn
311 IF (nspmd>1.AND.nn/=numnod) THEN
313 . msgtype=msgerror,
314 . anmode=aninfo_blind_1,
316 . c1=titr,
317 . i2=nn,
318 . i3=numnod)
319 ENDIF
320 nni=0
321 ict=0
322 icr=0
323 IF (igu2==0) THEN
324 ityp=1
325 eigipm(iad+1)=ityp
326 ELSE
327 ityp=2
328 eigipm(iad+1)=ityp
329 ict=j6(1)*4 +j6(2)*2 +j6(3)
330 icr=j6(4)*4 +j6(5)*2 +j6(6)
331
332 ig=0
333 DO i=1,ngrnod
334 IF(igrnod(i)%ID==igu2)THEN
335 ig=i
336 ENDIF
337 ENDDO
338
339 DO i=1,igrnod(ig)%NENTITY
340 IF (itag(igrnod(ig)%ENTITY(i))==1) THEN
341 nni=nni+1
342 eigibuf(iadb+nn+nni-1)=igrnod(ig)%ENTITY(i)
343 ENDIF
344 ENDDO
345 ENDIF
346 eigipm(iad+10)=nni
347 eigipm(iad+2)=ict
348 eigipm(iad+3)=icr
349
350 eigipm(iad+16)=imls
351
352 IF (iprsp>1) iprsp=0
354 IF (shiftini==zero) shiftini=em03*fac_fre
355
356
357
358 IF (nev==0) nev=100
359 eigipm(iad+4)=nev
360 eigrpm(iadf+1)=zero
361 eigrpm(iadf+2)=(shiftini*two*pi)**2
362 eigrpm(iadf+3)=cutfreq
363
364 IF (nblfr==0) nblfr=nev
365 IF (incv==0) incv=2
366 IF (niter==0) niter=300
367
368 eigipm(iad+8)=nblfr
369 eigipm(iad+5)=incv
370 eigipm(iad+6)=niter
371 eigipm(iad+7)=ipri
372
373 eigipm(iad+14)=iprsp
374
375 eigipm(iad+15)=0
376
377 eigrpm(iadf)=tol
378
379 eigipm(iad+13)=0
380 IF (ifile==1) THEN
381 maxl = 100
383 len_modfile = len_trim(modfile)
386 OPEN(unit=ificm,file=modfile_tmp(1:len_modfile),
387 . access='SEQUENTIAL',form='FORMATTED',
388 . status='OLD',err=999)
390 READ(nwline,fmt='(2I8)',err=9999) nbno, nbmo
391
392 IF (nev>nbmo) THEN
394 . msgtype=msgwarning,
395 . anmode=aninfo_blind_1,
397 . c1=titr,
398 . i3=nev,
399 . i2=nbmo)
400 nev=nbmo
401 eigipm(iad+4)=nev
402 ENDIF
403 nblfr=
min(nbmo-2,nblfr)
404 eigipm(iad+8)=nblfr
405
406 ALLOCATE(nodes(nbno), modes(nbmo,6,nn))
407 nlig=nbno/10
408 nres=nbno-nlig*10
409 iadn=0
410 DO i=1,nlig
412 READ(nwline,fmt='(10I8)',err=9999) (nodes(iadn+j),j=1,10)
413 DO j=1,10
414 nodes(iadn+j)=
usr2sys(nodes(iadn+j),itabm1,mess,
id)
415 ENDDO
416 iadn=iadn+10
417 ENDDO
418 IF (nres>0) THEN
420 READ(nwline,fmt='(10I8)',err=9999)
421 . (nodes(iadn+j
422 DO j=1,nres
423 nodes(iadn+j)=
usr2sys(nodes(iadn+j),itabm1,mess,
id)
424 ENDDO
425 ENDIF
426
427 DO i=1,numnod
428 itag(i)=0
429 ENDDO
430 DO i=1,nn
431 ii=eigibuf(iadb+i-1)
432 itag(ii)=i
433 ENDDO
434 DO i=1,nbno
435 ii=nodes(i)
436 nodes(i)=itag(ii)
437 itag(ii)=-1
438 ENDDO
439 DO i=1,nn
440 ii=eigibuf(iadb+i-1)
441 IF (itag(ii)/=-1) THEN
442 j=itabm1(ii)
444 . msgtype=msgerror,
445 . anmode=aninfo_blind_1,
447 . c1=titr,
448 . i2=j)
449 ENDIF
450 ENDDO
451
452 DO i=1,nbmo
453 DO j=1,nbno
454 jj=nodes(j)
456 READ(nwline,fmt='(5F16.0)',err=9999)
457 . (modes(i,k,jj),k=1,5)
459 READ(nwline,fmt='(F16.0)',err=9999) modes(i,6,jj)
460 ENDDO
461 ENDDO
462
463 eigipm(iad+12)=ircm
464 eigipm(iad+13)=nbmo
465 DO i=1,nbmo
466 DO j=1,nbno
467 ircm=ircm+1
468 WRITE(ieigm,rec=ircm) (modes(i,k,j),k=1,6)
469 ENDDO
470 ENDDO
471
472 DEALLOCATE(nodes, modes)
473 CLOSE(ificm)
474 ENDIF
475
476 ndof=0
477 IF(ict==1)THEN
478 ndof=1
479 ELSEIF(ict==2)THEN
480 ndof=1
481 ELSEIF(ict==3)THEN
482 ndof=2
483 ELSEIF(ict==4)THEN
484 ndof=1
485 ELSEIF(ict==5)THEN
486 ndof=2
487 ELSEIF(ict==6)THEN
488 ndof=2
489 ELSEIF(ict==7)THEN
490 ndof=3
491 ENDIF
492 IF(icr==1)THEN
493 ndof=ndof+1
494 ELSEIF(icr==2)THEN
495 ndof=ndof+1
496 ELSEIF(icr==3)THEN
497 ndof=ndof+2
498 ELSEIF(icr==4)THEN
499 ndof=ndof+1
500 ELSEIF(icr==5)THEN
501 ndof=ndof+2
502 ELSEIF(icr==6)THEN
503 ndof=ndof+2
504 ELSEIF(icr==7)THEN
505 ndof=ndof+3
506 ENDIF
507 nms=nni*ndof
508 IF (ityp==1) THEN
509 ctype=' FREE EIGENMODES'
510 ELSEIF (ityp==2) THEN
511 ctype='CLAMPED EIGENMODES + STATIC MODES'
512 ENDIF
513 IF (tol>zero) THEN
514 WRITE(cpre,fmt='(7X,1PE10.3)') tol
515 ELSE
516 cpre='MACHINE PRECISION'
517 ENDIF
518
519 cimls=' NO'
520 IF (imls==1) cimls='YES'
521 cprsp='MASS'
522 IF (iprsp==1) cprsp='MAX '
523 WRITE(iout,2100)
id,trim(titr),ctype, nev, nblfr, incv, niter, cpre,cimls,cprsp
524 IF (ityp==2) WRITE(iout,2105) nms
525 WRITE(iout,2109)
526 WRITE(iout,2110) (eigibuf(iadb+i-1),i=1,nn)
527 IF (ityp==2) THEN
528 WRITE(iout,2111)
529 WRITE(iout,2110) (eigibuf(iadb+nn+i-1),i=1,nni)
530 ENDIF
531
532 eigipm(iad+11)=iadb
533 iad=iad+neipm
534 iadb=iadb+nn+nni
535 iadf=iadf+nerpm
536 ENDDO
537
538 RETURN
540 RETURN
5419999
CALL ancmsg(msgid=587,
542 . msgtype=msgerror,
543 . anmode=aninfo,
545 . c1=titr,
546 . c2=nwline)
547 RETURN
548
5492000 FORMAT(/
550 . /
551 . ' EIGEN AND STATIC MODES COMPUTATION '/
552 . ' ---------------------------------- '/)
5532100 FORMAT( /5x,'EIGENPROBLEM ID ',i10,1x,a
554 . /10x,'TYPE ',a33
555 . /10x,'NUMBER OF EIGENMODES ',i10
556 . /10x,'NUMBER OF FREQUENCIES PER BLOCK ',i10
557 . /10x,'FACTOR FOR NUMBER OF LANCZOS VECTORS ',i10
558 . /10x,'
max number of arnoldi iterations
',I10
559 . /10X,'precision ',A17
560 . /10X,'USE of multi-level condensation ',7X,A3,
561 . /10X,'output eigenvectors normalization ',6X,A4)
5622105 FORMAT( 10X,'number of
static modes
',I10)
5632109 FORMAT( 10X,'nodes ')
5642110 FORMAT( 9X,10I9)
5652111 FORMAT( 10X,'interface nodes ')
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_string(name, sval, size, is_available)
subroutine eigrline(ific, nwline, id, titr)
character(len=infile_char_len) infile_name
integer, parameter ncharfield
integer function usr2sys(iu, itabm1, mess, id)
subroutine static(v, vr, a, ar, ms, in, igrnod, weight_md, wfext)