676 IMPLICIT NONE
677
678
679
680
681
682
683
684
685
686 CLASS(T_ALE_CONNECTIVITY), INTENT(INOUT) :: THIS
687 INTEGER, INTENT(IN) :: NUMNOD, NUMELQ, NUMELTG, NUMELS, NPROPGI
688 INTEGER, INTENT(IN) :: NIXQ, NIXTG, NIXS, N2D, IALE, IEULER, ITHERM, IALELAG, NPROPM, NUMMAT,NUMGEO
689 my_real,
DIMENSION(NPROPM, NUMMAT),
INTENT(IN) :: pm
690 INTEGER, DIMENSION(NIXQ, NUMELQ), INTENT(IN) :: IXQ
691 INTEGER, DIMENSION(NIXTG, NUMELTG), INTENT(IN) :: IXTG
692 INTEGER, DIMENSION(NIXS, NUMELS), INTENT(IN) :: IXS
693 INTEGER, DIMENSION(NPROPGI, NUMGEO), INTENT(IN) :: IGEO
694 LOGICAL,INTENT(IN) :: ISHADOW
695
696
697
698 INTEGER :: II, JJ,KK, NODE_ID, INODE
699 LOGICAL :: DUPLICATE
700 INTEGER, DIMENSION(:), ALLOCATABLE :: ADSKY
701 INTEGER :: IAD1, ITMP, IAD
702 INTEGER, DIMENSION(:), ALLOCATABLE :: IAD_CONNECT, NE_NB_CONNECT, CONNECTED, TYPE, EE_NB_CONNECT,ITAG
703 INTEGER(8) :: VEC_PTR1
704 INTEGER :: JAL_FROM_MAT, JAL_FROM_PROP, JAL, JALT, MLW, IMID, TMP, COUNT, JTHE, JSHADOW
705 INTEGER, DIMENSION(4), TARGET :: TETRA_NODES
706 INTEGER, DIMENSION(6, 4), TARGET :: HEXA_FACE
707 INTEGER, DIMENSION(6, 3), TARGET :: TETRA_FACE
708 INTEGER, DIMENSION(4, 2), TARGET :: QUAD_FACE
709 INTEGER, DIMENSION(3, 2), TARGET :: TRI_FACE
710 INTEGER, DIMENSION(:, :), POINTER :: ELEM_FACE, ELEM_FACE2
711 INTEGER :: KFACE, KFACE2, NFACE, NFACE_NODE, NFACE2, NFACE_NODE2
712 INTEGER NN(4)
713 LOGICAL SKIP_FACE
714
715
716
717 IF (iale + ieuler + ialelag +itherm == 0 .AND. .NOT.ishadow) THEN
718 RETURN
719 ENDIF
720
721 tetra_nodes(1) = 2
722 tetra_nodes(2) = 4
723 tetra_nodes(3) = 7
724 tetra_nodes(4) = 6
725
726
727 hexa_face(1, 1) = 1
728 hexa_face(1, 2) = 2
729 hexa_face(1, 3) = 3
730 hexa_face(1, 4) = 4
731 hexa_face(2, 1) = 3
732 hexa_face(2, 2) = 4
733 hexa_face(2, 3) = 8
734 hexa_face(2, 4) = 7
735 hexa_face(3, 1) = 5
736 hexa_face(3, 2) = 6
737 hexa_face(3, 3) = 7
738 hexa_face(3, 4) = 8
739 hexa_face(4, 1) = 1
740 hexa_face(4, 2) = 2
741 hexa_face(4, 3) = 6
742 hexa_face(4, 4) = 5
743 hexa_face(5, 1) = 2
744 hexa_face(5, 2) = 3
745 hexa_face(5, 3) = 7
746 hexa_face(5, 4) = 6
747 hexa_face(6, 1) = 1
748 hexa_face(6, 2) = 4
749 hexa_face(6, 3) = 8
750 hexa_face(6, 4) = 5
751
752 tetra_face(1, 1) = -1
753 tetra_face(1, 2) = -1
754 tetra_face(1, 3) = -1
755 tetra_face(2, 1) = 5
756 tetra_face(2, 2) = 6
757 tetra_face(2, 3) = 3
758 tetra_face(3, 1) = -1
759 tetra_face(3, 2) = -1
760 tetra_face(3, 3) = -1
761 tetra_face(4, 1) = 5
762 tetra_face(4, 2) = 1
763 tetra_face(4, 3) = 6
764 tetra_face(5, 1) = 1
765 tetra_face(5, 2) = 3
766 tetra_face(5, 3) = 6
767 tetra_face(6, 1) = 5
768 tetra_face(6, 2) = 3
769 tetra_face(6, 3) = 1
770
771 quad_face(1, 1) = 1
772 quad_face(1, 2) = 2
773 quad_face(2, 1) = 2
774 quad_face(2, 2) = 3
775 quad_face(3, 1) = 3
776 quad_face(3, 2) = 4
777 quad_face(4, 1) = 4
778 quad_face(4, 2) = 1
779
780 tri_face(1, 1) = 1
781 tri_face(1, 2) = 2
782 tri_face(2, 1) = 2
783 tri_face(2, 2) = 3
784 tri_face(3, 1) = 3
785 tri_face(3, 2) = 1
786 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
787
788 IF (ALLOCATED(this%NALE)) DEALLOCATE(this%NALE)
789 ALLOCATE(this%NALE(numnod))
790 this%NALE(1:numnod) = 0
791 ENDIF
792
793 IF (ALLOCATED(this%EE_CONNECT%IAD_CONNECT)) DEALLOCATE(this%EE_CONNECT%IAD_CONNECT)
794 IF (ALLOCATED(this%EE_CONNECT%CONNECTED)) DEALLOCATE(this%EE_CONNECT%CONNECTED)
795 IF (ALLOCATED(this%EE_CONNECT%TYPE)) DEALLOCATE(this%EE_CONNECT%TYPE)
796 IF (ALLOCATED(this%EE_CONNECT%IFACE2)) DEALLOCATE(this%EE_CONNECT%IFACE2)
797
798
799 ALLOCATE(ne_nb_connect(numnod))
800 ne_nb_connect(1:numnod) = 0
801
802
803
804 IF(n2d > 0)THEN
805 DO ii = 1, numeltg
806
807 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
808 jal_from_prop = igeo(62, iabs(ixtg(5, ii)))
809 jal =
max(jal_from_mat, jal_from_prop)
810 jthe = nint(pm(71, iabs(ixtg(1, ii))))
811 jshadow = nint(pm(96, iabs(ixtg(1, ii))))
812 jalt = jal + jthe + jshadow
813 imid = iabs(ixtg(1, ii))
814 IF (jalt == 0) cycle
815 mlw = nint(pm(19,imid))
816 DO jj = 1, 3
817 node_id = ixtg(1 + jj, ii)
818 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
819 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
820 this%NALE(node_id) =
max(this%NALE(node_id), jal)
821 IF (mlw == 151) THEN
822 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
823 ENDIF
824 ENDIF
825 ENDDO
826 ENDDO
827 ENDIF
828
829
830 DO ii = 1, numelq
831
832 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
833 jal_from_prop = igeo(62,iabs(ixq(6, ii)))
834 jal =
max(jal_from_mat, jal_from_prop)
835 jthe = nint(pm(71, iabs(ixq(1, ii))))
836 jshadow = nint(pm(96, iabs(ixq(1, ii))))
837 jalt = jal + jthe + jshadow
838 imid = iabs(ixq(1, ii))
839 IF (jalt == 0) cycle
840 mlw = nint(pm(19,imid))
841 DO jj = 1, 4
842 node_id = ixq(1 + jj, ii)
843 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
844 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
845 this%NALE(node_id) =
max(this%NALE(node_id), jal)
846 IF (mlw == 151) THEN
847 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
848 ENDIF
849 ENDIF
850 ENDDO
851 ENDDO
852
853
854 DO ii = 1, numels
855 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
856 jal_from_prop = igeo(62, iabs(ixs(10, ii)))
857 jal =
max(jal_from_mat, jal_from_prop)
858 jthe = nint(pm(71, iabs(ixs(1, ii))))
859 jshadow = nint(pm(96, iabs(ixs(1, ii))))
860 jalt = jal + jthe + jshadow
861 imid = iabs(ixs(1, ii))
862 IF (jalt == 0) cycle
863 mlw = nint(pm(19,imid))
864 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
865 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
866
867 DO jj = 1, 4
868 node_id = ixs(tetra_nodes(jj), ii)
869 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
870 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
871 this%NALE(node_id) =
max(this%NALE(node_id), jal)
872 IF (mlw == 151) THEN
873 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
874 ENDIF
875 ENDIF
876 ENDDO
877 ELSE
878
879 DO jj = 1, 8
880 node_id = ixs(1 + jj, ii)
881 duplicate = .false.
882 DO kk = 1,jj - 1
883 IF(node_id == ixs(1 + kk, ii)) duplicate = .true.
884 ENDDO
885 IF( .NOT. duplicate) THEN
886 ne_nb_connect(node_id) = ne_nb_connect(node_id) + 1
887 IF (.NOT. this%NALE_ALREADY_COMPUTED) THEN
888 this%NALE(node_id) =
max(this%NALE(node_id), jal)
889 IF (mlw == 151) THEN
890 IF (this%NALE(node_id) == 1 .OR. this%NALE(node_id) == 2) this%NALE(node_id) = 150 + this%NALE(node_id)
891 ENDIF
892 ENDIF
893 ENDIF
894 ENDDO
895 ENDIF
896 ENDDO
897
898 this%NALE_ALREADY_COMPUTED = .true.
899
900
901 ALLOCATE(iad_connect(numnod + 1))
902 iad_connect(1) = 1
903 DO ii = 2, numnod + 1
904 iad_connect(ii) = iad_connect(ii - 1) + ne_nb_connect(ii - 1)
905 ENDDO
906 ALLOCATE(adsky(numnod))
907 DO ii = 1, numnod
908 adsky(ii) = iad_connect(ii)
909 ENDDO
910
911 ALLOCATE(connected(iad_connect(numnod + 1)))
912 connected(:) = 0
913 ALLOCATE(TYPE(IAD_CONNECT(NUMNOD + 1)))
914 TYPE(:) = 0
915
916
917
918 IF(n2d > 0)THEN
919 DO ii = 1, numeltg
920 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
921 jal_from_prop = igeo(62,iabs(ixtg(5, ii)))
922 jal =
max(jal_from_mat, jal_from_prop)
923 jalt = jal + nint(pm(71, iabs(ixtg(1, ii))) + pm(96, iabs(ixtg(1, ii))))
924 imid = iabs(ixtg(1, ii))
925 IF (jalt == 0) cycle
926 DO jj = 1, 3
927 node_id = ixtg(1 + jj, ii)
928 connected(adsky(node_id)) = ii
929 TYPE(ADSKY(NODE_ID)) = 3
930 adsky(node_id) = adsky(node_id) + 1
931 ENDDO
932 ENDDO
933 ENDIF
934
935
936 DO ii = 1, numelq
937 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
938 jal_from_prop = igeo(62, iabs(ixq(6, ii)) )
939 jal =
max(jal_from_mat, jal_from_prop)
940 jalt = jal + nint(pm(71, iabs(ixq(1, ii))) + pm(96, iabs(ixq(1, ii))))
941 imid = iabs(ixq(1, ii))
942 IF (jalt == 0) cycle
943 DO jj = 1, 4
944 node_id = ixq(1 + jj, ii)
945 connected(adsky(node_id)) = ii
946 TYPE(ADSKY(NODE_ID)) = 2
947 adsky(node_id) = adsky(node_id) + 1
948 ENDDO
949 ENDDO
950
951
952 DO ii = 1, numels
953 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
954 jal_from_prop = igeo(62, iabs(ixs(10, ii)) )
955 jal =
max(jal_from_mat, jal_from_prop)
956 jalt = jal + nint(pm(71, iabs(ixs(1, ii))) + pm(96, iabs(ixs(1, ii))))
957 imid = iabs(ixs(1, ii))
958 IF (jalt == 0) cycle
959 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
960 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
961
962 node_id = ixs(2, ii)
963 connected(adsky(node_id)) = ii
964 TYPE(ADSKY(NODE_ID)) = 1
965 adsky(node_id) = adsky(node_id) + 1
966 node_id = ixs(4, ii)
967 connected(adsky(node_id)) = ii
968 TYPE(ADSKY(NODE_ID)) = 1
969 adsky(node_id) = adsky(node_id) + 1
970 node_id = ixs(7, ii)
971 connected(adsky(node_id)) = ii
972 TYPE(ADSKY(NODE_ID)) = 1
973 adsky(node_id) = adsky(node_id) + 1
974 node_id = ixs(6, ii)
975 connected(adsky(node_id)) = ii
976 TYPE(ADSKY(NODE_ID)) = 1
977 adsky(node_id) = adsky(node_id) + 1
978 ELSE
979
980 DO jj = 1, 8
981 node_id = ixs(1 + jj, ii)
982 duplicate = .false.
983 DO kk = 1,jj - 1
984 IF(node_id == ixs(1 + kk, ii)) duplicate = .true.
985 ENDDO
986 IF(.NOT. duplicate) THEN
987 connected(adsky(node_id)) = ii
988 TYPE(ADSKY(NODE_ID)) = 1
989 adsky(node_id) = adsky(node_id) + 1
990 ENDIF
991 ENDDO
992 ENDIF
993 ENDDO
994
995
996
997 IF (n2d == 0) THEN
998 ALLOCATE(this%EE_CONNECT%IAD_CONNECT(numels+1))
999 ALLOCATE(ee_nb_connect(numels))
1000 ELSE
1001 ALLOCATE(this%EE_CONNECT%IAD_CONNECT(numeltg + numelq + 1))
1002 ALLOCATE(ee_nb_connect(numeltg + numelq))
1003 ENDIF
1004 ee_nb_connect(:) = 0
1005
1006 tmp = 0
1007 IF (n2d == 0) THEN
1008
1009 DO ii = 1, numels
1010 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
1011 jal_from_prop = igeo(62, iabs(ixs(10, ii)) )
1012 jal =
max(jal_from_mat, jal_from_prop)
1013 jalt = jal + nint(pm(71, iabs(ixs(1, ii))) + pm(96, iabs(ixs(1, ii))))
1014 IF (jalt == 0) cycle
1015 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
1016 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
1017
1018 ee_nb_connect(ii) = 6
1019 ELSE
1020
1021 ee_nb_connect(ii) = 6
1022 ENDIF
1023 ENDDO
1024 this%EE_CONNECT%IAD_CONNECT(1) = 1
1025 DO ii = 2, numels + 1
1026 this%EE_CONNECT%IAD_CONNECT(ii) = this%EE_CONNECT%IAD_CONNECT(ii - 1) + ee_nb_connect(ii - 1)
1027 ENDDO
1028 tmp = this%EE_CONNECT%IAD_CONNECT(numels + 1)
1029 ELSE
1030
1031
1032 DO ii = 1, numelq
1033 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
1034 jal_from_prop = igeo(62, iabs(ixq(6, ii)) )
1035 jal =
max(jal_from_mat, jal_from_prop)
1036 jalt = jal + nint(pm(71, iabs(ixq(1, ii))) + pm(96, iabs(ixq(1, ii))))
1037 IF (jalt == 0) cycle
1038 ee_nb_connect(ii) = 4
1039 ENDDO
1040
1041 DO ii = 1, numeltg
1042 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
1043 jal_from_prop = igeo(62, iabs(ixtg(5, ii)) )
1044 jal =
max(jal_from_mat, jal_from_prop)
1045 jalt = jal + nint(pm(71, iabs(ixtg(1, ii))) + pm(96, iabs(ixtg(1, ii))))
1046 IF (jalt == 0) cycle
1047 ee_nb_connect(ii) = 3
1048 ENDDO
1049 this%EE_CONNECT%IAD_CONNECT(1) = 1
1050 DO ii = 2, numelq + numeltg + 1
1051 this%EE_CONNECT%IAD_CONNECT(ii) = this%EE_CONNECT%IAD_CONNECT(ii - 1) + ee_nb_connect(ii - 1)
1052 ENDDO
1053 tmp = this%EE_CONNECT%IAD_CONNECT(numelq + numeltg + 1) - 1
1054 ENDIF
1055
1056 ALLOCATE(this%EE_CONNECT%CONNECTED(tmp))
1057 ALLOCATE(this%EE_CONNECT%TYPE(tmp))
1058 ALLOCATE(this%EE_CONNECT%IFACE2(tmp))
1059 this%EE_CONNECT%TYPE(1:tmp) = 0
1060 this%EE_CONNECT%CONNECTED(1:tmp) = 0
1061 this%EE_CONNECT%IFACE2(1:tmp) = 0
1062 CALL intvector_create(vec_ptr1)
1063 ALLOCATE(itag(numnod))
1064 itag(1:numnod) = 0
1065 IF (n2d == 0) THEN
1066 DO ii = 1, numels
1067 jal_from_mat = nint(pm(72, iabs(ixs(1, ii))))
1068 jal_from_prop = igeo(62, iabs(ixs(10, ii)) )
1069 jal =
max(jal_from_mat, jal_from_prop)
1070 jalt = jal + nint(pm(71, iabs(ixs(1, ii))) + pm(96, iabs(ixs(1, ii))))
1071 IF (jalt == 0) cycle
1072 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1073 IF (ixs(2, ii) == ixs(3, ii) .AND. ixs(4, ii) == ixs(5, ii) .AND.
1074 . ixs(6, ii) == ixs(9, ii) .AND. ixs(7, ii) == ixs(8, ii)) THEN
1075
1076 nface = 6
1077 nface_node = 3
1078 count = 3
1079 elem_face => tetra_face
1080 ELSE
1081
1082 nface = 6
1083 nface_node = 4
1084 count = 4
1085 elem_face => hexa_face
1086 ENDIF
1087
1088 DO kface = 1, nface
1089 CALL intvector_clear(vec_ptr1)
1090
1091
1092 skip_face = .false.
1093 IF(nface_node == 4)THEN
1094 DO kk=1,4
1095 nn(kk) = ixs(1 + elem_face(kface, kk), ii)
1096 ENDDO
1097 IF(nn(1)==nn(2) .AND. nn(3)==nn(4)) THEN
1098 skip_face = .true.
1099 ELSEIF(nn(2)==nn(3) .AND. nn(1)==nn(4)) THEN
1100 skip_face = .true.
1101 ENDIF
1102 ENDIF
1103
1104 IF(.NOT. skip_face)THEN
1105 DO inode = 1, nface_node
1106 IF (elem_face(kface, inode) < 0) cycle
1107 node_id = ixs(1 + elem_face(kface, inode), ii)
1108 itag(node_id) = 1
1109 DO iad = iad_connect(node_id), iad_connect(node_id + 1) - 1
1110 IF (connected(iad) /= ii) THEN
1111 CALL intvector_push_back(vec_ptr1, connected(iad))
1112 ENDIF
1113 ENDDO
1114 ENDDO
1115 ENDIF
1116
1117
1118 CALL intvector_get_redundant(vec_ptr1, jj, itmp, count)
1119 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1120 IF(skip_face) jj = 0
1121 this%EE_CONNECT%CONNECTED(iad1 + kface - 1) = jj
1122 IF (jj > 0) THEN
1123 IF (ixs(2, jj) == ixs(3, jj) .AND. ixs(4, jj) == ixs(5, jj) .AND.
1124 . ixs(6, jj) == ixs(9, jj) .AND. ixs(7, jj) == ixs(8, jj)) THEN
1125
1126 nface2 = 6
1127 nface_node2 = 3
1128 elem_face2 => tetra_face
1129 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 1
1130 ELSE
1131
1132 nface2 = 6
1133 nface_node2 = 4
1134 elem_face2 => hexa_face
1135 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 0
1136 ENDIF
1137 DO kface2 = 1, nface2
1138 itmp = 1
1139 DO inode = 1, nface_node2
1140 IF (elem_face(kface2, inode) < 0) cycle
1141 itmp = itmp * itag(ixs(1 + elem_face(kface2, inode), jj))
1142 ENDDO
1143 IF (itmp == 1) THEN
1144 this%EE_CONNECT%IFACE2(iad1 + kface - 1) = kface2
1145 EXIT
1146 ENDIF
1147 ENDDO
1148 ENDIF
1149 DO inode = 1, nface_node
1150 IF (elem_face(kface, inode) < 0) cycle
1151 node_id = ixs(1 + elem_face(kface, inode), ii)
1152 itag(node_id) = 0
1153 ENDDO
1154 ENDDO
1155 ENDDO
1156 ELSE
1157
1158 DO ii = 1, numelq
1159 jal_from_mat = nint(pm(72, iabs(ixq(1, ii))))
1160 jal_from_prop = igeo(62, iabs(ixq(6, ii)) )
1161 jal =
max(jal_from_mat, jal_from_prop)
1162 jalt = jal + nint(pm(71, iabs(ixq(1, ii))) + pm(96, iabs(ixq(1, ii))))
1163 IF (jalt == 0) cycle
1164 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1165 nface = 4
1166 nface_node = 2
1167 elem_face => quad_face
1168 count = 2
1169 DO kface = 1, nface
1170 CALL intvector_clear(vec_ptr1)
1171 DO inode = 1, nface_node
1172 node_id = ixq(1 + elem_face(kface, inode), ii)
1173 itag(node_id) = 1
1174 DO iad = iad_connect(node_id), iad_connect(node_id + 1) - 1
1175 IF (connected(iad) /= ii) THEN
1176 CALL intvector_push_back(vec_ptr1, connected(iad))
1177 ENDIF
1178 ENDDO
1179 ENDDO
1180
1181 CALL intvector_get_redundant(vec_ptr1, jj, itmp, count)
1182 this%EE_CONNECT%CONNECTED(iad1 + kface - 1) = jj
1183 IF (jj > 0) THEN
1184 IF (jj > numelq) THEN
1185 nface2 = 3
1186 nface_node2 = 2
1187 elem_face2 => tri_face
1188 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 3
1189 ELSE
1190 nface2 = 4
1191 nface_node2 = 2
1192 elem_face2 => quad_face
1193 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 2
1194 ENDIF
1195 DO kface2 = 1, nface2
1196 itmp = 1
1197 DO inode = 1, nface_node2
1198 itmp = itmp * itag(ixq(1 + elem_face(kface2, inode), jj))
1199 ENDDO
1200 IF (itmp == 1) THEN
1201 this%EE_CONNECT%IFACE2(iad1 + kface - 1) = kface2
1202 EXIT
1203 ENDIF
1204 ENDDO
1205 ENDIF
1206 DO inode = 1, nface_node
1207 node_id = ixq(1 + elem_face(kface, inode), ii)
1208 itag(node_id) = 0
1209 ENDDO
1210 ENDDO
1211 ENDDO
1212
1213 DO ii = 1, numeltg
1214 jal_from_mat = nint(pm(72, iabs(ixtg(1, ii))))
1215 jal_from_prop = igeo(62, iabs(ixtg(5, ii)) )
1216 jal =
max(jal_from_mat, jal_from_prop)
1217 jalt = jal + nint(pm(71, iabs(ixtg(1, ii))) + pm(96, iabs(ixtg(1, ii))))
1218 IF (jalt == 0) cycle
1219 iad1 = this%EE_CONNECT%IAD_CONNECT(ii)
1220 nface = 3
1221 nface_node = 2
1222 elem_face => tri_face
1223 count = 2
1224 DO kface = 1, nface
1225 CALL intvector_clear(vec_ptr1)
1226 DO inode = 1, nface_node
1227 node_id = ixtg(1 + elem_face(kface, inode), ii)
1228 itag(node_id) = 1
1229 DO iad = iad_connect(node_id), iad_connect(node_id + 1) - 1
1230 IF (connected(iad) /= ii) THEN
1231 CALL intvector_push_back(vec_ptr1, connected(iad))
1232 ENDIF
1233 ENDDO
1234 ENDDO
1235
1236 CALL intvector_get_redundant(vec_ptr1, jj, itmp, count)
1237 this%EE_CONNECT%CONNECTED(iad1 + kface - 1) = jj
1238 IF (jj > 0) THEN
1239 IF (jj > numelq) THEN
1240 nface2 = 2
1241 nface_node2 = 2
1242 elem_face2 => tri_face
1243 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 3
1244 ELSE
1245 nface2 = 4
1246 nface_node2 = 3
1247 elem_face2 => quad_face
1248 this%EE_CONNECT%TYPE(iad1 + kface - 1) = 2
1249 ENDIF
1250 DO kface2 = 1, nface2
1251 itmp = 1
1252 DO inode = 1, nface_node2
1253 itmp = itmp * itag(ixtg(1 + elem_face(kface2, inode), jj))
1254 ENDDO
1255 IF (itmp == 1) THEN
1256 this%EE_CONNECT%IFACE2(iad1 + kface - 1) = kface2
1257 EXIT
1258 ENDIF
1259 ENDDO
1260 ENDIF
1261 DO inode = 1, nface_node
1262 node_id = ixtg(1 + elem_face(kface, inode), ii)
1263 itag(node_id) = 0
1264 ENDDO
1265 ENDDO
1266 ENDDO
1267 ENDIF
1268
1269 CALL intvector_delete(vec_ptr1)
1270 IF (ALLOCATED(ee_nb_connect)) DEALLOCATE(ee_nb_connect)
1271 IF (ALLOCATED(itag)) DEALLOCATE(itag)
1272 IF (ALLOCATED(ne_nb_connect)) DEALLOCATE(ne_nb_connect)
1273 IF (ALLOCATED(iad_connect)) DEALLOCATE(iad_connect)
1274 IF (ALLOCATED(adsky)) DEALLOCATE(adsky)
1275 IF (ALLOCATED(connected)) DEALLOCATE(connected)
1276