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