522
523
524
525 USE elbufdef_mod
528 USE mat_elem_mod
529
530
531
532#include "implicit_f.inc"
533
534
535
536#include "mvsiz_p.inc"
537
538
539
540#include "param_c.inc"
541
542
543
544 INTEGER JFT, JLT ,MTN , NPT,IORTH,NLAY,NEL,NFT
545 INTEGER , INTENT(IN) :: SEDRAPE,NUMEL_DRAPE
546 INTEGER MAT(*), PID(*) ,IGEO(NPROPGI,*)
547 INTEGER, DIMENSION(SEDRAPE) :: INDX_DRAPE
548
550 . geo(npropg,*), pm(npropm,*), dir(*),
551 . hm(mvsiz,6),hf(mvsiz,6),hc(mvsiz,2),hmfor(mvsiz,6),thk(*)
552 my_real,
DIMENSION(NEL),
INTENT(IN) :: thke
553 TYPE (STACK_PLY) :: STACK
554 TYPE(ELBUF_STRUCT_) :: ELBUF_STR
555 TYPE (DRAPE_) :: DRAPE(NUMEL_DRAPE)
556 TYPE (MAT_ELEM_) ,INTENT(IN) :: MAT_ELEM
557
558
559c
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583 INTEGER I,MX,IPID,J,J1,J2,J3,JJ,L,IGTYP,
584 . ISUBSTACK,IGMAT,IPOS,IPT_ALL,ILAY,IPT,IT,NPTT,
585 . LAYNPT_MAX, NLAY_MAX,ILAW_PLY
586 INTEGER MAT_IPLY(MVSIZ,NPT)
587 INTEGER, DIMENSION(:) , ALLOCATABLE :: MATLY
588 my_real,
DIMENSION(:) ,
ALLOCATABLE :: thkly
589 my_real,
DIMENSION(:,:) ,
ALLOCATABLE :: posly,thk_ly
591 . wmc,facg,coef,wm,a11,e11,nu,a12,g
593 . hmor(mvsiz,2),hmly(mvsiz,4),hcly(mvsiz,2),
594 . hmorly(mvsiz,2),shf(mvsiz),izz(mvsiz),iz(mvsiz)
595
596 igtyp = igeo(11,pid(1))
597 igmat = igeo(98,pid(1))
598 ipos = igeo(99,pid(1))
599 iorth = 0
600
601 laynpt_max = 1
602 IF(igtyp == 51 .OR. igtyp == 52) THEN
603 DO ilay=1,nlay
604 laynpt_max =
max(laynpt_max , elbuf_str%BUFLY(ilay)%NPTT)
605 ENDDO
606 ENDIF
607 nlay_max =
max(nlay,npt, elbuf_str%NLAY)
608 ALLOCATE(matly(mvsiz*nlay_max), thkly(mvsiz*nlay_max*laynpt_max),
609 . posly(mvsiz,nlay_max*laynpt_max),thk_ly(nel,nlay_max*laynpt_max))
610 IF (igtyp == 11 .OR. igtyp == 17 ) THEN
611 CALL layini(elbuf_str,jft ,jlt ,geo ,igeo ,
612 . mat ,pid ,thkly ,matly ,posly ,
613 . igtyp ,0 ,0 ,nlay ,npt ,
614 . isubstack,stack ,drape ,nft ,thke ,
615 . jlt ,thk_ly ,indx_drape, sedrape,numel_drape)
616 DO j=1,npt
617 j2=1+(j-1)*jlt
618 mx = matly(j2)
619 ilaw_ply = mat_elem%MAT_PARAM(mx)%ILAW
620 IF(ilaw_ply == 15. or. ilaw_ply == 25) THEN
621 iorth = 1
622 EXIT
623 ENDIF
624 ENDDO
625 ELSEIF( igtyp == 51 .OR. igtyp == 52) THEN
626 CALL layini(elbuf_str,jft ,jlt ,geo ,igeo ,
627 . mat ,pid ,thkly ,matly ,posly ,
628 . igtyp ,0 ,0 ,nlay ,npt ,
629 . isubstack,stack ,drape ,nft ,thke ,
630 . jlt ,thk_ly ,indx_drape, sedrape,numel_drape)
631 DO ilay=1,nlay
632 j1 = 1+(ilay-1)*jlt
633 mx = matly(j1)
634 ilaw_ply = mat_elem%MAT_PARAM(mx)%ILAW
635 IF(ilaw_ply == 15 .OR. ilaw_ply == 25 ) THEN
636 iorth = 1
637 EXIT
638 ENDIF
639 ENDDO
640 ELSEIF(mtn == 19 .OR. mtn == 15 .OR. mtn == 25 .OR. mtn == 119) THEN
641 iorth=1
642 ELSE
643 iorth=0
644 ENDIF
645
646 IF (iorth == 1) THEN
647 hmfor(jft:jlt,1:6)=zero
648 IF (npt == 1) THEN
649 DO i=jft,jlt
650 shf(i)=zero
651 ENDDO
652 ELSE
653 DO i=jft,jlt
654 shf(i)=geo(38,pid(i))
655 ENDDO
656 ENDIF
657 IF ((mtn == 19).OR.(mtn == 119)) THEN
658 CALL gepm_lc(jft,jlt,mat,pm,shf,hmly,hc)
659 CALL cctoglob(jft,jlt,hmly,hc,hmor,dir,nel)
660 DO i=jft,jlt
661 hm(i,1)=hmly(i,1)
662 hm(i,2)=hmly(i,2)
663 hm(i,3)=hmly(i,3)
664 hm(i,4)=hmly(i,4)
665 hm(i,5)=hmor(i,1)
666 hm(i,6)=hmor(i,2)
667 hf(i,1)=one_over_12*hmly(i,1)
668 hf(i,2)=one_over_12*hmly(i,2)
669 hf(i,3)=one_over_12*hmly(i,3)
670 hf(i,4)=one_over_12*hmly(i,4)
671 hf(i,5)=one_over_12*hmor(i,1)
672 hf(i,6)=one_over_12*hmor(i,2)
673 ENDDO
674 ELSEIF ((mtn == 15 .OR. mtn == 25 ) .AND.
675 . igtyp == 9 .OR. igtyp == 10 ) THEN
676 SELECT CASE (igtyp)
677 CASE(9)
678 CALL gepm_lc(jft,jlt,mat,pm,shf,hm,hc)
679 CALL cctoglob(jft,jlt,hm,hc,hmor,dir,nel)
680 DO i=jft,jlt
681 hm(i,5)=hmor(i,1)
682 hm(i,6)=hmor(i,2)
683 hf(i,1)=one_over_12*hm(i,1)
684 hf(i,2)=one_over_12*hm(i,2)
685 hf(i,3)=one_over_12*hm(i,3)
686 hf(i,4)=one_over_12*hm(i,4)
687 hf(i,5)=one_over_12*hmor(i,1)
688 hf(i,6)=one_over_12*hmor(i,2)
689 ENDDO
690 CASE(10)
691 CALL layini(elbuf_str,jft ,jlt ,geo ,igeo ,
692 . mat ,pid ,thkly ,matly ,posly ,
693 . igtyp ,0 ,0 ,nlay ,npt ,
694 . isubstack,stack ,drape ,nft ,thke ,
695 . jlt ,thk_ly ,indx_drape, sedrape,numel_drape)
696 hm(jft:jlt,1:6)=zero
697 hf(jft:jlt,1:6)=zero
698 hc(jft:jlt,1:2)=zero
699 DO j=1,npt
700 j2=1+(j-1)*jlt
701 j3=1+(j-1)*jlt*2
702 CALL gepm_lc(jft,jlt,matly(j2),pm,shf,hmly,hcly)
703 CALL cctoglob(jft,jlt,hmly,hcly,hmorly,dir(j3),nel)
704 DO i=jft,jlt
705 jj = j2 - 1 + i
706 wmc=posly(i,j)*posly(i,j)*thkly(jj)
707 hm(i,1)=hm(i,1)+thkly(jj)*hmly(i,1)
708 hm(i,2)=hm(i,2)+thkly(jj)*hmly(i,2)
709 hm(i,3)=hm(i,3)+thkly(jj)*hmly(i,3)
710 hm(i,4)=hm(i,4)+thkly(jj)*hmly(i,4)
711 hc(i,1)=hc(i,1)+thkly(jj)*hcly(i,1)
712 hc(i,2)=hc(i,2)+thkly(jj)*hcly(i,2)
713 hm(i,5)=hm(i,5)+thkly(jj)*hmorly(i,1)
714 hm(i,6)=hm(i,6)+thkly(jj)*hmorly(i,2)
715 hf(i,1)=hf(i,1)+wmc*hmly(i,1)
716 hf(i,2)=hf(i,2)+wmc*hmly(i,2)
717 hf(i,3)=hf(i,3)+wmc*hmly(i,3)
718 hf(i,4)=hf(i,4)+wmc*hmly(i,4)
719 hf(i,5)=hf(i,5)+wmc*hmorly(i,1)
720 hf(i,6)=hf(i,6)+wmc*hmorly(i,2)
721 ENDDO
722 ENDDO
723 END SELECT
724 ELSEIF(igtyp == 11 .OR. igtyp == 17 .OR. igtyp == 51 .OR. igtyp == 52) THEN
725 hm(jft:jlt,1:6)=zero
726 hf(jft:jlt,1:6)=zero
727 hc(jft:jlt,1:2)=zero
728 iorth=2
729 IF ((igtyp == 11 .OR. igtyp == 17).AND. igmat > 0) THEN
730 DO i=jft,jlt
731 izz(i) = zero
732 iz(i) = zero
733 ENDDO
734
735 DO j=1,npt
736 j2=1+(j-1)*jlt
737 j3=1+(j-1)*jlt*2
738 mx = matly(j2)
739 ilaw_ply = mat_elem%MAT_PARAM(mx)%ILAW
740 IF(ilaw_ply == 15 .OR. ilaw_ply == 25 ) THEN
741 CALL gepm_lc(jft,jlt,matly(j2),pm,shf,hmly,hcly)
742 ELSE
743 nu =pm(21,mx)
744
745 g =pm(22,mx)
746 a11 =pm(24,mx)
747 a12 = nu*a11
748 DO i=jft,jlt
749 hmly(i,1)=a11
750 hmly(i,2)=a11
751 hmly(i,3)=a12
752 hmly(i,4)=g
753 hcly(i,1)=g*shf(i)
754 hcly(i,2)=g*shf(i)
755 ENDDO
756 ENDIF
757 CALL cctoglob(jft,jlt,hmly,hcly,hmorly,dir(j3),nel)
758 DO i=jft,jlt
759 jj = j2 - 1 + i
760 wm = posly(i,j)*thkly(jj)
761 wmc= posly(i,j)*wm + one_over_12*thkly(jj)**3
762 hm(i,1)=hm(i,1)+thkly(jj)*hmly(i,1)
763 hm(i,2)=hm(i,2)+thkly(jj)*hmly(i,2)
764 hm(i,3)=hm(i,3)+thkly(jj)*hmly(i,3)
765 hm(i,4)=hm(i,4)+thkly(jj)*hmly(i,4)
766 hc(i,1)=hc(i,1)+thkly(jj)*hcly(i,1)
767 hc(i,2)=hc(i,2)+thkly(jj)*hcly(i,2)
768 hm(i,5)=hm(i,5)+thkly(jj)*hmorly(i,1)
769 hm(i,6)=hm(i,6)+thkly(jj)*hmorly(i,2)
770 izz(i) = izz(i) + wmc
771 iz(i) = iz(i) + wm
772
773 hf(i,1)=hf(i,1)+wmc*hmly(i,1)
774 hf(i,2)=hf(i,2)+wmc*hmly(i,2)
775 hf(i,3)=hf(i,3)+wmc*hmly(i,3)
776 hf(i,4)=hf(i,4)+wmc*hmly(i,4)
777 hf(i,5)=hf(i,5)+wmc*hmorly(i,1)
778 hf(i,6)=hf(i,6)+wmc*hmorly(i,2)
779
780 hmfor(i,1)=hmfor(i,1)+wm*hmly(i,1)
781 hmfor(i,2)=hmfor(i,2)+wm*hmly(i,2)
782 hmfor(i,3)=hmfor(i,3)+wm*hmly(i,3)
783 hmfor(i,4)=hmfor(i,4)+wm*hmly(i,4)
784 hmfor(i,5)=hmfor(i,5)+wm*hmorly(i,1)
785 hmfor(i,6)=hmfor(i,6)+wm*hmorly(i,2)
786 ENDDO
787 ENDDO
788
789 ELSEIF(igtyp == 11 .OR. igtyp == 17) THEN
790
791 DO j=1,npt
792 j2=1+(j-1)*jlt
793 j3=1+(j-1)*jlt*2
794 mx = matly(j2)
795 ilaw_ply = mat_elem%MAT_PARAM(mx)%ILAW
796 IF(ilaw_ply == 15 .OR. ilaw_ply == 25 ) THEN
797 CALL gepm_lc(jft,jlt,matly(j2),pm,shf,hmly,hcly)
798 ELSE
799 nu =pm(21,mx)
800 !
801 g =pm(22,mx)
802 a11 =pm(24,mx)
803 a12 = nu*a11
804 DO i=jft,jlt
805 hmly(i,1)=a11
806 hmly(i,2)=a11
807 hmly(i,3)=a12
808 hmly(i,4)=g
809 hcly(i,1)=g*shf(i)
810 hcly(i,2)=g*shf(i)
811 ENDDO
812 ENDIF
813 CALL cctoglob(jft,jlt,hmly,hcly,hmorly,dir(j3),nel)
814 DO i=jft,jlt
815 jj = j2 - 1 + i
816 wm = posly(i,j)*thkly(jj)
817 wmc= posly(i,j)*wm + one_over_12*thkly(jj)**3
818 hm(i,1)=hm(i,1)+thkly(jj)*hmly(i,1)
819 hm(i,2)=hm(i,2)+thkly(jj)*hmly(i,2)
820 hm(i,3)=hm(i,3)+thkly(jj)*hmly(i,3)
821 hm(i,4)=hm(i,4)+thkly(jj)*hmly(i,4)
822 hc(i,1)=hc(i,1)+thkly(jj)*hcly(i,1)
823 hc(i,2)=hc(i,2)+thkly(jj)*hcly(i,2)
824 hm(i,5)=hm(i,5)+thkly(jj)*hmorly(i,1)
825 hm(i,6)=hm(i,6)+thkly(jj)*hmorly(i,2)
826
827 hf(i,1)=hf(i,1)+wmc*hmly(i,1)
828 hf(i,2)=hf(i,2)+wmc*hmly(i,2)
829 hf(i,3)=hf(i,3)+wmc*hmly(i,3)
830 hf(i,4)=hf(i,4)+wmc*hmly(i,4)
831 hf(i,5)=hf(i,5)+wmc*hmorly(i,1)
832 hf(i,6)=hf(i,6)+wmc*hmorly(i,2)
833
834 hmfor(i,1)=hmfor(i,1)+wm*hmly(i,1)
835 hmfor(i,2)=hmfor(i,2)+wm*hmly(i,2)
836 hmfor(i,3)=hmfor(i,3)+wm*hmly(i,3)
837 hmfor(i,4)=hmfor(i,4)+wm*hmly(i,4)
838 hmfor(i,5)=hmfor(i,5)+wm*hmorly(i,1)
839 hmfor(i,6)=hmfor(i,6)+wm*hmorly(i,2)
840 ENDDO
841 ENDDO
842
843 ELSEIF(igtyp == 52 .OR. (igtyp == 51 .AND. igmat > 0)) THEN
844
845 ipt_all = 0
846 DO i=jft,jlt
847 izz(i) = zero
848 iz(i) = zero
849 ENDDO
850 DO ilay=1,nlay
851 nptt = elbuf_str%BUFLY(ilay)%NPTT
852 DO it=1,nptt
853 ipt = ipt_all + it
854 j1 = 1+(ilay-1)*jlt
855 j2 = 1+(ipt-1)*jlt
856 j3 = 1+(ilay-1)*jlt*2
857 j = ipt
858 mx = matly(j1)
859 ilaw_ply = mat_elem%MAT_PARAM(mx)%ILAW
860 IF(ilaw_ply == 15 .OR. ilaw_ply == 25 ) THEN
861 CALL gepm_lc(jft,jlt,matly(j1),pm,shf,hmly,hcly)
862 ELSE
863 nu =pm(21,mx)
864
865 g =pm(22,mx)
866 a11 =pm(24,mx)
867 a12 = nu*a11
868 DO i=jft,jlt
869 hmly(i,1)=a11
870 hmly(i,2)=a11
871 hmly(i,3)=a12
872 hmly(i,4)=g
873 hcly(i,1)=g*shf(i)
874 hcly(i,2)=g*shf(i)
875 ENDDO
876 ENDIF
877 CALL cctoglob(jft,jlt,hmly,hcly,hmorly,dir(j3),nel)
878
879 DO i=jft,jlt
880 jj = j2 - 1 + i
881 wm = posly(i,j)*thkly(jj)
882 wmc= posly(i,j)*wm
883 hm(i,1)=hm(i,1)+thkly(jj)*hmly(i,1)
884 hm(i,2)=hm(i,2)+thkly(jj)*hmly(i,2)
885 hm(i,3)=hm(i,3)+thkly(jj)*hmly(i,3)
886 hm(i,4)=hm(i,4)+thkly(jj)*hmly(i,4)
887 hc(i,1)=hc(i,1)+thkly(jj)*hcly(i,1)
888 hc(i,2)=hc(i,2)+thkly(jj)*hcly(i,2)
889 hm(i,5)=hm(i,5)+thkly(jj)*hmorly(i,1)
890 hm(i,6)=hm(i,6)+thkly(jj)*hmorly(i,2)
891
892 hf(i,1)=hf(i,1)+wmc*hmly(i,1)
893 hf(i,2)=hf(i,2)+wmc*hmly(i,2)
894 hf(i,3)=hf(i,3)+wmc*hmly(i,3)
895 hf(i,4)=hf(i,4)+wmc*hmly(i,4)
896 hf(i,5)=hf(i,5)+wmc*hmorly(i,1)
897 hf(i,6)=hf(i,6)+wmc*hmorly(i,2)
898
899 hmfor(i,1)=hmfor(i,1)+wm*hmly(i,1)
900 hmfor(i,2)=hmfor(i,2)+wm*hmly(i,2)
901 hmfor(i,3)=hmfor(i,3)+wm*hmly(i,3)
902 hmfor(i,4)=hmfor(i,4)+wm*hmly(i,4)
903 hmfor(i,5)=hmfor(i,5)+wm*hmorly(i,1)
904 hmfor(i,6)=hmfor(i,6)+wm*hmorly(i,2)
905 izz(i) = izz(i) + wmc
906 iz(i) = iz(i) + wm
907 ENDDO
908 ENDDO
909 ipt_all = ipt_all + nptt
910 ENDDO
911 ELSE
912 ipt_all = 0
913 DO ilay=1,nlay
914 nptt = elbuf_str%BUFLY(ilay)%NPTT
915 DO it=1,nptt
916 ipt = ipt_all + it
917 j1 = 1+(ilay-1)*jlt
918 j2 = 1+(ipt-1)*jlt
919 j3 = 1+(ilay-1)*jlt*2
920 j = ipt
921 mx = matly(j1)
922 ilaw_ply = mat_elem%MAT_PARAM(mx)%ILAW
923 IF(ilaw_ply == 15 .OR. ilaw_ply == 25 ) THEN
924 CALL gepm_lc(jft,jlt,matly(j1),pm,shf,hmly,hcly)
925 ELSE
926 nu =pm(21,mx)
927
928 g =pm(22,mx)
929 a11 =pm(24,mx)
930 a12 = nu*a11
931 DO i=jft,jlt
932 hmly(i,1)=a11
933 hmly(i,2)=a11
934 hmly(i,3)=a12
935 hmly(i,4)=g
936 hcly(i,1)=g*shf(i)
937 hcly(i,2)=g*shf(i)
938 ENDDO
939 ENDIF
940 CALL cctoglob(jft,jlt,hmly,hcly,hmorly,dir(j3),nel)
941
942 DO i=jft,jlt
943 jj = j2 - 1 + i
944 wm = posly(i,j)*thkly(jj)
945 wmc= posly(i,j)*wm
946 hm(i,1)=hm(i,1)+thkly(jj)*hmly(i,1)
947 hm(i,2)=hm(i,2)+thkly(jj)*hmly(i,2)
948 hm(i,3)=hm(i,3)+thkly(jj)*hmly(i,3)
949 hm(i,4)=hm(i,4)+thkly(jj)*hmly(i,4)
950 hc(i,1)=hc(i,1)+thkly(jj)*hcly(i,1)
951 hc(i,2)=hc(i,2)+thkly(jj)*hcly(i,2)
952 hm(i,5)=hm(i,5)+thkly(jj)*hmorly(i,1)
953 hm(i,6)=hm(i,6)+thkly(jj)*hmorly(i,2)
954
955 hf(i,1)=hf(i,1)+wmc*hmly(i,1)
956 hf(i,2)=hf(i,2)+wmc*hmly(i,2)
957 hf(i,3)=hf(i,3)+wmc*hmly(i,3)
958 hf(i,4)=hf(i,4)+wmc*hmly(i,4)
959 hf(i,5)=hf(i,5)+wmc*hmorly(i,1)
960 hf(i,6)=hf(i,6)+wmc*hmorly(i,2)
961
962 hmfor(i,1)=hmfor(i,1)+wm*hmly(i,1)
963 hmfor(i,2)=hmfor(i,2)+wm*hmly(i,2)
964 hmfor(i,3)=hmfor(i,3)+wm*hmly(i,3)
965 hmfor(i,4)=hmfor(i,4)+wm*hmly(i,4)
966 hmfor(i,5)=hmfor(i,5)+wm*hmorly(i,1)
967 hmfor(i,6)=hmfor(i,6)+wm*hmorly(i,2)
968 ENDDO
969 ENDDO
970 ipt_all = ipt_all + nptt
971 ENDDO
972 ENDIF
973 ENDIF
974 ENDIF
975 DEALLOCATE(matly, thkly, posly, thk_ly)
976
977 RETURN
subroutine cctoglob(jft, jlt, hm, hc, hmor, dir, nel)
subroutine gepm_lc(jft, jlt, mat, pm, shf, hm, hc)
subroutine layini(elbuf_str, jft, jlt, geo, igeo, mat, pid, thkly, matly, posly, igtyp, ixfem, ixlay, nlay, npt, isubstack, stack, drape, nft, thk, nel, ratio_thkly, indx_drape, sedrape, numel_drape)