499
500
501
507
508
509
510#include "implicit_f.inc"
511
512
513
514#include "com04_c.inc"
515#include "units_c.inc"
516#include "scr17_c.inc"
517#include "fxbcom.inc"
518
519
520
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,*)
527 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
528
529
530
531 INTEGER NFX,ID,IDMAST,NMOD,NMST,NBNO,NME,NTR,ADRGLM,
532 . ,ADRLM,ADRFLS,ADRDLS,ADRVAR,ADRRPM,IMOD,INO,I,LEN,
533 . ,NRES,ILIG,ADRCP2,IR,ADRNOD,IDAMP,ISHELL,
534 . ADRMCD,J,INFO,IBLO,IFILE, IANIM, IMIN, 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) ::
538 CHARACTER :: NWLINE*100,FXBFILE*100
539
540 INTEGER ::
541 CHARACTER(len=2148) :: TMP_NAME
542 LOGICAL ::
543
544
545 adrmod = 1
546 ircm = 0
547 adrglm = 1
548 adrcp = 1
549 adrlm = 1
550 adrfls = 1
551 adrdls = 1
552 adrvar = 1
553 adrrpm = 1
554 adrmcd = 1
555 is_available = .false.
556
558
559
560 DO nfx = 1,nfxbody
561
562
563 IF (fxbipm(41,nfx) == 2) cycle
564
565
566 titr = ''
569 . option_titr = titr)
570
571
575 OPEN(unit=ificm,file=tmp_name(1:len_tmp_name),
576 . access='SEQUENTIAL',form='FORMATTED',
577 . status='OLD',err=999)
578
580 READ(nwline,fmt='(7I8)',err=9999)
581 . nmod, nmst, nbno, ishell, idamp, iblo, ifile
582
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
593
594 adrnod = fxbipm(6,nfx)
595 ntag = fxbipm(18,nfx)
596 nme = fxbipm(17,nfx)
597
598 adrmcd = adrmcd+nme*nme
599
600 nlig = nbno/10
601 nres = nbno-nlig*10
602 DO ilig = 1,nlig
604 ENDDO
605 IF (nres > 0) THEN
607 ENDIF
608
609 ntr = 9
610
611
612
613
614
616 READ(nwline,'(5F16.0)',err=9999)
617 . (fxbrpm(adrrpm+i-1),i=2,6)
619 READ(nwline,'(5F16.0)',err=9999)
620 . (fxbrpm(adrrpm+i-1),i=7,10),freq
621 adrrpm=adrrpm+12
622
623
624
625
626
627 IF (idamp > 0) THEN
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
633 omega = two*pi*freq
634 dtc1 = (-beta*omega+
635 . sqrt(beta*beta*omega*omega+four))/omega
636 dtc2 = two/(beta*omega*omega)
637 fxbrpm(adrrpm-12)=
min(dtc1,dtc2)
638 ELSE
639 omega = two*pi*freq
640 fxbrpm(adrrpm-12) = two/omega
641 ENDIF
642 adrrpm = adrrpm+2
643 ELSE
644 fxbrpm(adrrpm) = zero
645 fxbrpm(adrrpm+1) = zero
646 fxbrpm(adrrpm-12) = one/(pi*freq)
647 adrrpm = adrrpm+2
648 ENDIF
649 fxbrpm(adrrpm) = zero
650 fxbrpm(adrrpm+1) = zero
651 adrrpm = adrrpm+2
652
653
654
655
656
657 IF (ifile == 0) THEN
658
659
660 IF (iblo == 0) THEN
661 DO imod = 1,nme
662 adrm1 = adrmod
663 adrm2 = adrmod+ntag*6
664 DO ino = 1,nbno
665 IF (fxbnod(adrnod+ino-1) < 0) THEN
667 READ(nwline,'(5F16.0)',err=9999)
668 . (fxbmod(adrm1+i-1),i=1,5)
670 READ(nwline,'(F16.0)',err=9999)
671 . fxbmod(adrm1+5)
672 adrm1=adrm1+6
673 ELSEIF (fxbnod(adrnod+ino-1) > 0) THEN
675 READ(nwline,'(5F16.0)',err=9999)
676 . (fxbmod(adrm2+i-1),i=1,5)
678 READ(nwline,'(F16.0)',err=9999)
679 . fxbmod(adrm2+5)
680 adrm2=adrm2+6
681 ENDIF
682 ENDDO
683 adrmod = adrm2
684 ENDDO
685 ELSEIF (iblo == 1) THEN
686 DO imod = 1,nme
687 adrm1 = adrmod
688 adrm2 = adrmod+ntag*6
689 DO ino = 1,nbno
690 IF (fxbnod(adrnod+ino-1) < 0) THEN
691 DO i = 1,6
692 fxbmod(adrm1+i-1) = zero
693 ENDDO
694 adrm1 = adrm1+6
695 ELSEIF (fxbnod(adrnod+ino-1) > 0) THEN
696 DO i = 1,6
697 fxbmod(adrm2+i-1) = zero
698 ENDDO
699 adrm2 = adrm2+6
700 ENDIF
701 ENDDO
702 adrmod = adrm2
703 ENDDO
704 ENDIF
705 DO imod = 1,nmod
706 adrm1 = adrmod
707 adrm2 = adrmod+ntag*6
708 DO ino = 1,nbno
709 IF (fxbnod(adrnod+ino-1) < 0) THEN
711 READ(nwline,'(5F16.0)',err=9999)
712 . (fxbmod(adrm1+i-1),i=1,5)
714 READ(nwline,'(F16.0)',err=9999)
715 . fxbmod(adrm1+5)
716 adrm1 = adrm1+6
717 ELSEIF (fxbnod(adrnod+ino-1) > 0) THEN
719 READ(nwline,'(5F16.0)',err=9999)
720 . (fxbmod(adrm2+i-1),i=1,5)
722 READ(nwline,'(f16.0)',ERR=9999)
723 . FXBMOD(ADRM2+5)
724 ADRM2 = ADRM2+6
725 ENDIF
726 ENDDO
727 ADRMOD = ADRM2
728 ENDDO
729 ELSEIF (IFILE == 1) THEN
730
731
732
733 IF (IBLO == 0) THEN
734 DO IMOD = 1,NME
735 ADRM1 = ADRMOD
736 DO INO = 1,NBNO
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)
743 . FXBMOD(ADRM1+5)
744 ADRM1 = ADRM1+6
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)
750 IRCM = IRCM+1
751 WRITE(IFXM,REC=IRCM) (VV(I),I=1,6)
752 ENDIF
753 ENDDO
754 ADRMOD = ADRM1
755 ENDDO
756 ELSEIF (IBLO == 1) THEN
757 DO IMOD = 1,NME
758 ADRM1 = ADRMOD
759 DO INO = 1,NBNO
760 IF (FXBNOD(ADRNOD+INO-1) < 0) THEN
761 DO I = 1,6
762 FXBMOD(ADRM1+I-1) = ZERO
763 ENDDO
764 ADRM1 = ADRM1+6
765 ELSEIF (FXBNOD(ADRNOD+INO-1) > 0) THEN
766 DO I = 1,6
767 VV(I) = ZERO
768 ENDDO
769 IRCM = IRCM+1
770 WRITE(IFXM,REC=IRCM) (VV(I),I=1,6)
771 ENDIF
772 ENDDO
773 ADRMOD = ADRM1
774 ENDDO
775 ENDIF
776 DO IMOD = 1,NMOD
777 ADRM1 = ADRMOD
778 DO INO = 1,NBNO
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)
785 . FXBMOD(ADRM1+5)
786 ADRM1 = ADRM1+6
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)
792 IRCM = IRCM+1
793 WRITE(IFXM,REC=IRCM) (VV(I),I=1,6)
794 ENDIF
795 ENDDO
796 ADRMOD = ADRM1
797 ENDDO
798 ENDIF
799
800 FXBIPM(32,NFX)=IRCM
801
802
803
804
805
806 IF (NMOD > 0) THEN
807 LEN = NMOD
808 NLIG = LEN/5
809 NRES = LEN-NLIG*5
810 DO ILIG = 1,NLIG
811 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
812 READ(NWLINE,'(5f16.0)',ERR=9999)
813 . (FXBLM(ADRLM+I-1),I=1,5)
814 ADRLM = ADRLM+5
815 ENDDO
816 IF (NRES > 0) THEN
817 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
818 READ(NWLINE,'(5f16.0)',ERR=9999)
819 . (FXBLM(ADRLM+I-1),I=1,NRES)
820 ADRLM = ADRLM+NRES
821 ENDIF
822 ENDIF
823
824
825
826
827
828 IF (NMST > 0) THEN
829 LEN = NMST*(2*NMOD-NMST+1)/2
830 NLIG = LEN/5
831 NRES = LEN-NLIG*5
832 DO ILIG = 1,NLIG
833 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
834 READ(NWLINE,'(5f16.0)',ERR=9999)
835 . (FXBFLS(ADRFLS+I-1),I=1,5)
836 ADRFLS = ADRFLS+5
837 ENDDO
838 IF (NRES > 0) THEN
839 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
840 READ(NWLINE,'(5f16.0)',ERR=9999)
841 . (FXBFLS(ADRFLS+I-1),I=1,NRES)
842 ADRFLS = ADRFLS+NRES
843 ENDIF
844 ENDIF
845
846
847
848
849
850 IF ((NMOD-NMST) > 0) THEN
851 LEN = NMOD-NMST
852 NLIG = LEN/5
853 NRES = LEN-NLIG*5
854 DO ILIG = 1,NLIG
855 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
856 READ(NWLINE,'(5f16.0)',ERR=9999)
857 . (FXBDLS(ADRDLS+I-1),I=1,5)
858 ADRDLS = ADRDLS+5
859 ENDDO
860 IF (NRES > 0) THEN
861 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
862 READ(NWLINE,'(5f16.0)',ERR=9999)
863 . (FXBDLS(ADRDLS+I-1),I=1,NRES)
864 ADRDLS = ADRDLS+NRES
865 ENDIF
866 ENDIF
867
868 IF (IBLO == 1) THEN
869 LEN = NME*(NME+1)/2
870 DO I = 1,LEN
871 FXBGLM(ADRGLM) = ZERO
872 ADRGLM = ADRGLM+1
873 ENDDO
874 LEN = NME*NMOD
875 DO I = 1,NTR
876 DO J = 1,LEN
877 FXBCPM(ADRCP) = ZERO
878 FXBCPS(ADRCP) = ZERO
879 ADRCP = ADRCP+1
880 ENDDO
881 ENDDO
882 GOTO 100
883 ENDIF
884
885
886
887
888
889 LEN = NME*(NME+1)/2
890 NLIG = LEN/5
891 NRES = LEN-NLIG*5
892 DO ILIG = 1,NLIG
893 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
894 READ(NWLINE,'(5f16.0)',ERR=9999)
895 . (FXBGLM(ADRGLM+I-1),I=1,5)
896 ADRGLM = ADRGLM+5
897 ENDDO
898 IF (NRES > 0) THEN
899 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
900 READ(NWLINE,'(5f16.0)',ERR=9999)
901 . (FXBGLM(ADRGLM+I-1),I=1,NRES)
902 ADRGLM = ADRGLM+NRES
903 ENDIF
904
905
906
907
908
909 IF (NMOD > 0) THEN
910 ADRCP2 = ADRCP
911 DO IR = 1,NTR
912 LEN = NME*NMOD
913 NLIG = LEN/5
914 NRES = LEN-NLIG*5
915 DO ILIG = 1,NLIG
916 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
917 READ(NWLINE,'(5f16.0)',ERR=9999)
918 . (FXBCPM(ADRCP+I-1),I=1,5)
919 ADRCP = ADRCP+5
920 ENDDO
921 IF (NRES > 0) THEN
922 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
923 READ(NWLINE,'(5f16.0)',ERR=9999)
924 . (FXBCPM(ADRCP+I-1),I=1,NRES)
925 ADRCP = ADRCP+NRES
926 ENDIF
927 ENDDO
928
929
930
931
932
933 DO IR = 1,NTR
934 LEN = NME*NMOD
935 NLIG = LEN/5
936 NRES = LEN-NLIG*5
937 DO ILIG = 1,NLIG
938 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
939 READ(NWLINE,'(5f16.0)',ERR=9999)
940 . (FXBCPS(ADRCP2+I-1),I=1,5)
941 ADRCP2 = ADRCP2+5
942 ENDDO
943 IF (NRES > 0) THEN
944 CALL FXRLINE(IFICM,NWLINE,ID,TITR)
945 READ(NWLINE,'(5f16.0)',ERR=9999)
946 . (FXBCPS(ADRCP2+I-1),I=1,NRES)
947 ADRCP2 = ADRCP2+NRES
948 ENDIF
949 ENDDO
950 ENDIF
951
952 100 CLOSE(IFICM)
953
954
955 DO I = 1,NBNO
956 CNOD(I)=FXBNOD(ADRNOD+I-1)
957 ENDDO
958 ADRN1 = ADRNOD-1
959 ADRN2 = ADRNOD-1+NTAG
960 DO I = 1,NBNO
961 IF (CNOD(I) < 0) THEN
962 ADRN1 = ADRN1+1
963 FXBNOD(ADRN1) = -CNOD(I)
964 ELSEIF (CNOD(I) > 0) THEN
965 ADRN2 = ADRN2+1
966 FXBNOD(ADRN2)=CNOD(I)
967 ENDIF
968 ENDDO
969
970 ADRVAR=ADRVAR+NMOD+NME
971
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))
975 ENDDO
976
977
978
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
988
989 RETURN
990 999 CALL FREERR(3)
991 RETURN
9929999 CALL ANCMSG(MSGID=566,
993 . MSGTYPE=MSGERROR,
994 . ANMODE=ANINFO,
995 . I1=ID,
996 . C1=TITR,
997 . C2=FXBFILE,
998 . C3=NWLINE)
999 RETURN
1000
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 ',
1008 . /10X,(9(1PE10.3))
1009 . /10X,'stability time-step ',1PE10.3)
1010
int main(int argc, char *argv[])
subroutine static(v, vr, a, ar, ms, in, igrnod, weight_md, wfext)