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