33
34
35
38 use element_mod , only : nixs,nixq,nixtg
39
40
41
42#include "implicit_f.inc"
43
44
45
46 INTEGER, INTENT(IN) :: N2D
47 INTEGER, INTENT(IN) :: NGROUP, NPARG
48 INTEGER, INTENT(IN) :: PROC, NUMEL
49 INTEGER, INTENT(IN) :: NUMELS_L, NUMELQ_L, NUMELTG_L
50 INTEGER, INTENT(IN) :: NUMELS_G, NUMELQ_G, NUMELTG_G
51 INTEGER, INTENT(IN) :: CEL(*), CEP(*)
52 INTEGER, INTENT(IN) :: IXS(NIXS, NUMELS_G), IXQ(NIXQ, NUMELQ_G), IXTG(NIXTG, NUMELTG_G)
53 INTEGER, INTENT(IN) :: IPARG(NPARG, NGROUP)
54 INTEGER, INTENT(INOUT) :: IDGLOB_L(*), UIDGLOB_L(*)
55 TYPE(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
56
57
58
59 INTEGER :: PROCI, II, JJ, I, J, I_LOC, NEL, ITY, NFT, ICOUNT,NG, PROCJ, IAD1, LGTH
60 INTEGER :: NELEM_L
61 INTEGER, DIMENSION(:), ALLOCATABLE :: TAG
62
63
64
65 ALLOCATE(tag(numel))
66 tag(1:numel) = 0
67
68 icount = 0
69 nelem_l = 0
70 DO ng = 1, ngroup
71 nel = iparg(2, ng)
72 nft = iparg(3, ng)
73 ity = iparg(5, ng)
74 IF (ity == 1) THEN
75
76 nelem_l = numels_l
77 DO ii = 1, nel
78 i = ii + nft
79 iad1 = ale_connectivity%ee_connect%iad_connect(i)
80 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-ale_connectivity%ee_connect%iad_connect(i)
81 proci = cep(i)
82 IF (proci == proc) THEN
83 i_loc = cel(i)
85 uidglob_l(i_loc) = ixs(nixs, i)
86 DO jj = 1, lgth
87 j = ale_connectivity%ee_connect%connected(iad1 + jj - 1)
88 IF (j > 0) THEN
89 procj = cep(j)
90 IF (procj /= proc .AND. tag(j) == 0) THEN
91 icount = icount + 1
93 uidglob_l(nelem_l + icount) = ixs(nixs, j)
94 tag(j) = 1
95 ENDIF
96 ENDIF
97 ENDDO
98 ENDIF
99 ENDDO
100
101 ELSEIF( ity == 2)THEN
102
103 nelem_l = numelq_l
104 DO ii = 1, nel
105 i = ii + nft
106 iad1 = ale_connectivity%ee_connect%iad_connect(i)
107 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-ale_connectivity%ee_connect%iad_connect(i)
108 proci = cep(i)
109 IF (proci == proc) THEN
110 i_loc = cel(i)
112 uidglob_l(i_loc) = ixq(nixq, i)
113 DO jj = 1, lgth
114 j = ale_connectivity%ee_connect%connected(iad1 + jj - 1)
115 IF (j > 0) THEN
116 procj = cep(j)
117 IF (procj /= proc .AND. tag(j) == 0) THEN
118 icount = icount + 1
120 uidglob_l(nelem_l + icount) = ixq(nixq, j)
121 tag(j) = 1
122 ENDIF
123 ENDIF
124 ENDDO
125 ENDIF
126 ENDDO
127
128 ELSEIF(ity == 7 .AND. n2d >= 0)THEN
129
130 nelem_l = numeltg_l
131 DO ii = 1, nel
132 i = ii + nft
133 iad1 = ale_connectivity%ee_connect%iad_connect(i)
134 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-ale_connectivity%ee_connect%iad_connect(i)
135 proci = cep(i)
136 IF (proci == proc) THEN
137 i_loc = cel(i)
139 uidglob_l(i_loc) = ixtg(nixtg, i)
140 DO jj = 1, lgth
141 j = ale_connectivity%ee_connect%connected(iad1 + jj - 1)
142 IF (j > 0) THEN
143 procj = cep(j)
144 IF (procj /= proc .AND. tag(j) == 0) THEN
145 icount = icount + 1
147 uidglob_l(nelem_l + icount) = ixtg(nixtg , j)
148 tag(j) = 1
149 ENDIF
150 ENDIF
151 ENDDO
152 ENDIF
153 ENDDO
154 ELSE
155
156 cycle
157 ENDIF
158
159 ENDDO
160
161 DEALLOCATE(tag)
type(reorder_struct_) permutation