45 SUBROUTINE hm_read_fxb1(NOM_OPT,FXBNOD,FXBIPM,FXB_MATRIX,FXB_MATRIX_ADD,
46 . NMANIM,ITAB,ITABM1,FXBFILE_TAB,LSUBMODEL)
58#include "implicit_f.inc"
69 INTEGER NOM_OPT(LNOPT1,*),FXBIPM(NBIPM,*),FXBNOD(*),FXB_MATRIX_ADD(4,*),NMANIM,ITAB(*),ITABM1(*)
71 CHARACTER,
DIMENSION(NFXBODY) :: FXBFILE_TAB*2148
76 INTEGER ID,I,J,L,NFX,NMOD,NMST,NBNO,NTR,NME,IDAMP,
77 . ishell,iblo,ifile,idmast,ianim,imin,imax,adrnod,nlig,nres,ilig,
78 . numno(10),bid,iflagi1,ic,iold,iflagdbl,irb,flag,idum1,idum2,idum3,
80 . il1,il2,adr_stiff,adr_stiff0,size_mass,size_stiff
82 CHARACTER FXBFILE*2148, NWLINE*100, STRERR*29
83 CHARACTER(LEN=NCHARTITLE) :: TITR
84 CHARACTER :: MESS*40,MESS1*40,EXTENSION*3
85 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: TABSL,ITAG_DOF
86 INTEGER,
DIMENSION(:),
ALLOCATABLE :: INDEX,ITAG
88 INTEGER :: LEN_TMP_NAME
89 CHARACTER(len=2148) :: TMP_NAME
90 LOGICAL :: IS_AVAILABLE
96 DATA mess/
'FLEXIBLE BODY : NODES '/
97 DATA mess1/
'FLEXIBLE BODY DEFINITION '/
104 size_max =
max(size_max,fxbipm(3,nfx))
108 ALLOCATE(tabsl(2,lennod))
109 ALLOCATE(index(3*lennod))
110 ALLOCATE(itag_dof(6,size_max))
111 ALLOCATE(itag(numnod))
113 itag_dof(1:6,1:size_max) = 0
120 is_available = .false.
131 . option_titr = titr)
134 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,nfx),ltitr)
137 CALL hm_get_intv(
'node_IDm',idmast,is_available,lsubmodel)
138 CALL hm_get_intv(
'Ianim' ,ianim ,is_available,lsubmodel)
139 CALL hm_get_intv(
'Imin' ,imin ,is_available,lsubmodel)
140 CALL hm_get_intv(
'Imax' ,imax ,is_available,lsubmodel)
144 fxbfile_tab(nfx) = fxbfile
146 IF (fxbipm(41,nfx) == 2)
THEN
149 fxbipm(6,nfx) = adrnod
151 size_stiff = fxbipm(42,nfx)
152 size_mass = fxbipm(43,nfx)
154 adr_mass = adr_mat + size_stiff
155 fxbipm(44,nfx) = adr_stiff
156 fxbipm(45,nfx) = adr_mass
157 adr_stiff0 = adr_stiff
163 CALL read_pch_file(flag,fxb_matrix,itag,fxb_matrix_add,adr_stiff,
164 . adr_mass,itabm1,fxbfile,id,titr)
166 adr_mat = adr_mat + size_stiff + size_mass
170 IF (itag(i) > 0)
THEN
172 tabsl(1,adrnod) = fxbnod(adrnod)
173 tabsl(2,adrnod) = nfx
176 itag(i) = adrnod-adrnod0
184 i1 = fxb_matrix_add(1,adr_stiff0+i-1)
185 i2 = fxb_matrix_add(2,adr_stiff0+i-1)
186 idof1 = fxb_matrix_add(3,adr_stiff0+i-1)
187 idof2 = fxb_matrix_add(4,adr_stiff0+i-1)
192 fxb_matrix_add(1,adr_stiff0+i-1) = il1
193 fxb_matrix_add(2,adr_stiff0+i-1) = il2
197 IF (itag_dof(idof1,il1)==0)
THEN
199 IF (idof1 > 3) ishell = 1
200 itag_dof(idof1,il1) = 1
202 IF (itag_dof(idof2,il2)==0)
THEN
204 IF (idof2 > 3) ishell = 1
205 itag_dof(idof2,il2) = 1
210 i1 = fxb_matrix_add(1,adr_mass0+i-1)
211 i2 = fxb_matrix_add(2,adr_mass0+i-1)
216 fxb_matrix_add(1,adr_mass0+i-1) = il1
217 fxb_matrix_add(2,adr_mass0+i-1) = il2
221 itag_dof(1:6,1:nbno) = 0
223 itag(fxbnod(adrnod0+i-1)) = 0
232 IF (size_mass > 0)
THEN
233 WRITE(iout,1200) id,trim(titr),idmast,nbno
235 WRITE(iout,1100) id,trim(titr),idmast,nbno
242 OPEN(unit=ificm,file=tmp_name(1:len_tmp_name),
243 . access=
'SEQUENTIAL',form=
'FORMATTED',
244 . status=
'OLD',err=1000)
250 CALL fxrline(ificm,nwline,id,titr)
251 READ(nwline,fmt=
'(7I8)',err=9999)
252 . nmod, nmst, nbno, ishell, idamp, iblo, ifile
255 strerr=
'NEGATIVE MODE NUMBER'
263 strerr=
'NEGATIVE STATIC MODE NUMBER'
271 strerr=
'NEGATIVE NODE NUMBER'
278 IF (ishell /= 0.AND.ishell /= 1)
THEN
279 strerr=
'INVALID VALUE FOR FLAG IROT'
286 IF (idamp /= 0.AND.idamp /= 1)
THEN
287 strerr=
'INVALID VALUE FOR FLAG IDAMP'
290 . anmode=aninfo_blind_1,
294 IF (iblo /= 0.AND.iblo /= 1)
THEN
295 strerr=
'INVALID VALUE FOR FLAG IBLO'
298 . anmode=aninfo_blind_1,
302 IF (ifile /= 0.AND.ifile /= 1)
THEN
303 strerr=
'INVALID VALUE FOR FLAG IFILE'
306 . anmode=aninfo_blind_1,
315 fxbipm(6,nfx) = adrnod
320 CALL fxrline(ificm,nwline,id,titr)
321 READ(nwline,
'(10I8)',err=9999)
324 fxbnod(adrnod) = usr2sys(numno(i),itabm1,mess,id)
325 tabsl(1,adrnod) = fxbnod(adrnod)
326 tabsl(2,adrnod) = nfx
331 CALL fxrline(ificm,nwline,id,titr)
332 READ(nwline,
'(10I8)',err=9999)
333 . (numno(i),i=1,nres)
335 fxbnod(adrnod)=usr2sys(numno(i),itabm1,mess,id)
343 IF (ishell == 0)
THEN
349 lenglm = lenglm+nme*(nme+1)/2
350 lencp = lencp +ntr*nmod*nme
352 lenfls = lenfls+nmst*(2*nmod-nmst+1)/2
353 lendls = lendls+nmod-nmst
354 lenvar = lenvar+nmod+nme
355 lenrpm = lenrpm+ntr+7
356 lenmcd = lenmcd+nme*nme
359 fxbipm(2,nfx) = usr2sys(idmast,itabm1,mess,id)
362 fxbipm(16,nfx) = ishell
364 fxbipm(28,nfx) = iblo
365 fxbipm(29,nfx) = ifile
366 fxbipm(36,nfx) = ianim
368 IF (imax == 0) imax = nmod
370 imax =
min(nmod,imax)
371 fxbipm(37,nfx) = imin
372 fxbipm(38,nfx) = imax
386 CALL udouble(fxbipm(1,1),nbipm,nfxbody,mess1,0,bid)
393 CALL newdbl(fxbipm(2,1),nbipm,nfxbody,itab,567,aninfo_blind_1,
400 IF (nfxbody > 1)
THEN
406 CALL my_orders(0,iwork,tabsl,index,lennod,2)
410 IF(index(i) /=0 )
THEN
411 IF (tabsl(1,index(i))==iold)
THEN
412 IF (iflagdbl==0)
THEN
417 IF (iflagdbl/=0)
THEN
419 irb=tabsl(2,index(j))
421 CALL fretitl2(titr,nom_opt(lnopt1-ltitr+1,irb),ltitr)
423 . msgtype=msgwarning,
424 . anmode=aninfo_blind_2,
430 . msgtype=msgwarning,
431 . anmode=aninfo_blind_1,
432 . i1=tabsl(1,index(iflagi1)),
437 iold=tabsl(1,index(i))
444 DEALLOCATE(tabsl,index,itag_dof,itag)
4471000
CALL ancmsg(msgid=565,
4539999
CALL ancmsg(msgid=566,
463 .
' FLEXIBLE BODY DEFINITIONS '/
464 .
' ---------------------- '/)
4661100
FORMAT( /5x,
'FLEXIBLE BODY ID ',i10,1x,a
467 . /10x,
'MAIN NODE ID ',i10
468 . /10x,
'NUMBER OF NODES ',i10
469 . /10x,
'INITIALIZED FROM PCH FILE ',
470 . /10x,
' --> STIFFNESS MATRIX ')
4721200
FORMAT( /5x,
'FLEXIBLE BODY ID ',i10,1x,a
473 . /10x,
'MAIN NODE ID ',i10
474 . /10x,
'NUMBER OF NODES ',i10
475 . /10x,
'INITIALIZED FROM PCH FILE ',
476 . /10x,
' --> STIFFNESS MATRIX ',
477 . /10x,
' --> MASS MATRIX ')
496 . FXBCPM , FXBCPS, FXBLM , FXBFLS, FXBDLS,
497 . FXBMOD , ITAB , ITABM1, NOM_OPT,FXB_LAST_ADRESS,
510#include "implicit_f.inc"
514#include "com04_c.inc"
515#include "units_c.inc"
516#include "scr17_c.inc"
521 INTEGER FXBIPM(NBIPM,*), FXBNOD(*),
522 . ITAB(*),ITABM1(*),FXB_LAST_ADRESS(*)
524 . FXBRPM(*), FXBGLM(*), FXBCPM(*), FXBCPS(*),
525 . fxblm(*), fxbfls(*), fxbdls(*), fxbmod(*)
526 INTEGER NOM_OPT(LNOPT1,*)
531 INTEGER NFX,ID,IDMAST,NMOD,NMST,NBNO,NME,NTR,ADRGLM,
532 . ADRCP,ADRLM,ADRFLS,ADRDLS,ADRVAR,ADRRPM,IMOD,INO,I,LEN,
533 . NLIG,NRES,ILIG,ADRCP2,IR,ADRNOD,IDAMP,ISHELL,
534 . ADRMCD,J,INFO,IBLO,IFILE, IANIM, , IMAX, ADRMOD,IRCM,
535 . ntag,adrm1,adrm2,adrn1,adrn2,cnod(numnod)
536 my_real freq,beta,omega,dtc1,dtc2,vv(6)
537 CHARACTER(LEN=NCHARTITLE) :: TITR
538 CHARACTER :: NWLINE*100,FXBFILE*100
540 INTEGER :: LEN_TMP_NAME
541 CHARACTER(len=2148) :: TMP_NAME
542 LOGICAL :: IS_AVAILABLE
555 is_available = .false.
563 IF (fxbipm(41,nfx) == 2) cycle
569 . option_titr = titr)
575 OPEN(unit=ificm,file=tmp_name(1:len_tmp_name),
576 . access=
'SEQUENTIAL',form=
'FORMATTED',
577 . status=
'OLD',err=999)
579 CALL fxrline(ificm,nwline,id,titr)
580 READ(nwline,fmt=
'(7I8)',err=9999)
581 . nmod, nmst, nbno, ishell, idamp, iblo, ifile
583 fxbipm(7,nfx) = adrmod
584 fxbipm(8,nfx) = adrglm
585 fxbipm(9,nfx) = adrcp
586 fxbipm(10,nfx) = adrlm
587 fxbipm(11,nfx) = adrfls
588 fxbipm(12,nfx) = adrdls
589 fxbipm(13,nfx) = adrvar
590 fxbipm(14,nfx) = adrrpm
591 fxbipm(15,nfx) = adrmcd
592 fxbipm(30,nfx) = ircm
594 adrnod = fxbipm(6,nfx
595 ntag = fxbipm(18,nfx)
598 adrmcd = adrmcd+nme*nme
603 CALL fxrline(ificm,nwline,id,titr)
606 CALL fxrline(ificm,nwline,id,titr)
615 CALL fxrline(ificm,nwline,id,titr)
616 READ(nwline,
'(5F16.0)',err=9999)
617 . (fxbrpm(adrrpm+i-1),i=2,6)
618 CALL fxrline(ificm,nwline,id,titr)
619 READ(nwline,
'(5F16.0)',err=9999)
620 . (fxbrpm(adrrpm+i-1),i=7,10),freq
628 CALL fxrline(ificm,nwline,id,titr)
629 READ(nwline,
'(2F16.0)',err=9999)
630 . (fxbrpm(adrrpm+i-1),i=1,2)
631 beta=fxbrpm(adrrpm+1)
632 IF (beta > zero)
THEN
635 . sqrt(beta*beta*omega*omega+four))/omega
636 dtc2 = two/(beta*omega*omega)
637 fxbrpm(adrrpm-12)=
min(dtc1,dtc2)
640 fxbrpm(adrrpm-12) = two/omega
644 fxbrpm(adrrpm) = zero
645 fxbrpm(adrrpm+1) = zero
646 fxbrpm(adrrpm-12) = one/(pi*freq)
649 fxbrpm(adrrpm) = zero
650 fxbrpm(adrrpm+1) = zero
663 adrm2 = adrmod+ntag*6
665 IF (fxbnod(adrnod+ino-1) < 0)
THEN
666 CALL fxrline(ificm,nwline,id,titr)
667 READ(nwline,
'(5F16.0)',err=9999)
668 . (fxbmod(adrm1+i-1),i=1,5)
669 CALL fxrline(ificm,nwline,id,titr)
670 READ(nwline,
'(F16.0)',err=9999)
673 ELSEIF (fxbnod(adrnod+ino-1) > 0)
THEN
674 CALL fxrline(ificm,nwline,id,titr)
675 READ(nwline,
'(5F16.0)',err=9999)
676 . (fxbmod(adrm2+i-1),i=1,5)
677 CALL fxrline(ificm,nwline,id,titr)
678 READ(nwline,
'(F16.0)',err=9999)
685 ELSEIF (iblo == 1)
THEN
688 adrm2 = adrmod+ntag*6
690 IF (fxbnod(adrnod+ino-1) < 0)
THEN
692 fxbmod(adrm1+i-1) = zero
695 ELSEIF (fxbnod(adrnod+ino-1) > 0)
THEN
697 fxbmod(adrm2+i-1) = zero
707 adrm2 = adrmod+ntag*6
709 IF (fxbnod(adrnod+ino-1) < 0)
THEN
710 CALL fxrline(ificm,nwline,id,titr)
711 READ(nwline,
'(5F16.0)',err=9999)
712 . (fxbmod(adrm1+i-1),i=1,5)
713 CALL fxrline(ificm,nwline,id,titr)
714 READ(nwline,
'(F16.0)',err=9999)
717 ELSEIF (fxbnod(adrnod+ino-1) > 0)
THEN
718 CALL fxrline(ificm,nwline,id,titr)
719 READ(nwline,
'(5F16.0)',err=9999)
720 . (fxbmod(adrm2+i-1),i=1,5)
721 CALL fxrline(ificm,nwline,id,titr)
722 READ(nwline,
'(F16.0)',err=9999)
729 ELSEIF (ifile == 1)
THEN
737 IF (fxbnod(adrnod+ino-1) < 0)
THEN
738 CALL fxrline(ificm,nwline,id,titr)
739 READ(nwline,
'(5F16.0)',err=9999)
740 . (fxbmod(adrm1+i-1),i=1,5)
741 CALL fxrline(ificm,nwline,id,titr)
742 READ(nwline,
'(F16.0)',err=9999)
745 ELSEIF (fxbnod(adrnod+ino-1) > 0)
THEN
746 CALL fxrline(ificm,nwline,id,titr)
747 READ(nwline,
'(5F16.0)',err=9999) (vv(i),i=1,5)
748 CALL fxrline(ificm,nwline,id,titr)
749 READ(nwline,
'(F16.0)',err=9999) vv(6)
751 WRITE(ifxm,rec=ircm) (vv(i),i=1,6)
756 ELSEIF (iblo == 1)
THEN
760 IF (fxbnod(adrnod+ino-1) < 0)
THEN
762 fxbmod(adrm1+i-1) = zero
765 ELSEIF (fxbnod(adrnod+ino-1) > 0)
THEN
770 WRITE(ifxm,rec=ircm) (vv(i),i=1,6)
779 IF (fxbnod(adrnod+ino-1) < 0)
THEN
780 CALL fxrline(ificm,nwline,id,titr)
781 READ(nwline,
'(5F16.0)',err=9999)
782 . (fxbmod(adrm1+i-1),i=1,5)
783 CALL fxrline(ificm,nwline,id,titr)
784 READ(nwline,
'(F16.0)',err=9999)
787 ELSEIF (fxbnod(adrnod+ino-1) > 0)
THEN
788 CALL fxrline(ificm,nwline,id,titr)
789 READ(nwline,
'(5F16.0)',err=9999) (vv(i),i=1,5)
790 CALL fxrline(ificm,nwline,id,titr)
791 READ(nwline,
'(F16.0)',err=9999) vv(6)
793 WRITE(ifxm,rec=ircm) (vv(i),i=1,6)
811 CALL fxrline(ificm,nwline,id,titr)
812 READ(nwline,
'(5F16.0)',err=9999)
813 . (fxblm(adrlm+i-1),i=1,5)
817 CALL fxrline(ificm,nwline,id,titr)
818 READ(nwline,
'(5F16.0)',err=9999)
819 . (fxblm(adrlm+i-1),i=1,nres)
829 len = nmst*(2*nmod-nmst+1)/2
833 CALL fxrline(ificm,nwline,id,titr)
834 READ(nwline,
'(5F16.0)',err=9999)
835 . (fxbfls(adrfls+i-1),i=1,5)
839 CALL fxrline(ificm,nwline,id,titr)
840 READ(nwline,
'(5F16.0)',err=9999)
841 . (fxbfls(adrfls+i-1),i=1,nres)
850 IF ((nmod-nmst) > 0)
THEN
855 CALL fxrline(ificm,nwline,id,titr)
856 READ(nwline,
'(5F16.0)',err=9999)
857 . (fxbdls(adrdls+i-1),i=1,5)
861 CALL fxrline(ificm,nwline,id,titr)
862 READ(nwline,
'(5F16.0)',err=9999)
863 . (fxbdls(adrdls+i-1),i=1,nres)
871 fxbglm(adrglm) = zero
893 CALL fxrline(ificm,nwline,id,titr)
894 READ(nwline,
'(5F16.0)',err=9999)
895 . (fxbglm(adrglm+i-1),i=1,5)
899 CALL fxrline(ificm,nwline,id,titr)
900 READ(nwline,
'(5F16.0)',err=9999)
901 . (fxbglm(adrglm+i-1),i=1,nres)
916 CALL fxrline(ificm,nwline,id,titr)
917 READ(nwline,
'(5F16.0)',err=9999)
918 . (fxbcpm(adrcp+i-1),i=1,5)
922 CALL fxrline(ificm,nwline,id,titr)
923 READ(nwline,
'(5F16.0)',err=9999)
924 . (fxbcpm(adrcp+i-1),i=1,nres)
938 CALL fxrline(ificm,nwline,id,titr)
939 READ(nwline,
'(5F16.0)',err=9999)
940 . (fxbcps(adrcp2+i-1),i=1,5)
944 CALL fxrline(ificm,nwline,id,titr)
945 READ(nwline,
'(5F16.0)',err=9999)
946 . (fxbcps(adrcp2+i-1),i=1,nres)
956 cnod(i)=fxbnod(adrnod+i-1)
959 adrn2 = adrnod-1+ntag
961 IF (cnod(i) < 0)
THEN
963 fxbnod(adrn1) = -cnod(i)
964 ELSEIF (cnod(i) > 0)
THEN
966 fxbnod(adrn2)=cnod(i)
970 adrvar=adrvar+nmod+nme
972 WRITE(iout,1100) id,trim(titr),itab(fxbipm(2,nfx)),nbno,nme,nmod,
973 . nmst,(fxbrpm(fxbipm(14,nfx)+i),i=1,ntr),
974 . fxbrpm(fxbipm(14,nfx))
979 fxb_last_adress(1) = adrmod
980 fxb_last_adress(2) = adrglm
981 fxb_last_adress(3) = adrcp
982 fxb_last_adress(4) = adrlm
983 fxb_last_adress(5) = adrfls
984 fxb_last_adress(6) = adrdls
985 fxb_last_adress(7) = adrvar
986 fxb_last_adress(8) = adrrpm
987 fxb_last_adress(9) = adrmcd
9929999
CALL ancmsg(msgid=566,
10011100
FORMAT( /5x,
'FLEXIBLE BODY ID ',i10,1x,a
1002 . /10x,
'MAIN NODE ID ',i10
1003 . /10x,
'NUMBER OF NODES ',i10
1004 . /10x,
'NUMBER OF GLOBAL MODES ',i10
1005 . /10x,
'NUMBER OF LOCAL MODES ',i10
1006 . /10x,
'NUMBER OF LOCAL STATIC MODES ',i10
1007 . /10x,
'INITIAL ROTATION MATRIX ',
1009 . /10x,
'STABILITY TIME-STEP ',1pe10.3)
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)