33 use element_mod , only : nixc,nixtg
34
35
36
37#include "implicit_f.inc"
38
39
40
41#include "com01_c.inc"
42#include "com04_c.inc"
43#include "com_xfem1.inc"
44#include "param_c.inc"
45
46
47
48 INTEGER LCNE_CRKXFEM
49 INTEGER IXC(NIXC,*),IXTG(NIXTG,*),ADDCNE_CRKXFEM(0:NCRKXFE+1),
50 . CNE_XFE(LCNE_CRKXFEM),IEL_CRKXFEM(NUMELC+NUMELTG),INOD_CRKXFEM(*),
51 . CEP(*),CEL_XFE(ECRKXFE),CEP_XFE(ECRKXFE),CRKNODIAD(LCNE_CRKXFEM),
52 . IPARG(NPARG,NGROUP)
53
54
55
56 INTEGER I, J, K, N, NG, NP, NEL, NFT, ITY, II, NIN, P, PROC, INDX, OFFC, OFFTG
57 INTEGER ADSKY(0:NCRKXFE+1)
58 INTEGER, ALLOCATABLE, DIMENSION(:) :: KNOD2ELC
59 INTEGER, ALLOCATABLE, DIMENSION(:,:) :: TAGSKYC,TAGSKYTG
60 INTEGER, DIMENSION(70000) :: WORK
61 INTEGER, DIMENSION(NUMELC) :: ITRIC
62 INTEGER, DIMENSION(NUMELTG) :: ITRITG
63 INTEGER, DIMENSION(NUMELC*2) :: INDXC
64 INTEGER, DIMENSION(NUMELTG*2):: INDXTG
65
66
67
68 ALLOCATE(knod2elc(numnod+1))
69 knod2elc = 0
70 ALLOCATE(tagskyc(4,numelc))
71 tagskyc = 0
72 ALLOCATE(tagskytg(3,numeltg))
73 tagskytg = 0
74
75 DO i = 0, ncrkxfe + 1
76 adsky(i) = addcne_crkxfem(i)
77 ENDDO
78
79 offc = numels + numelq
80 offtg = offc + numelt + numelp + numelr + numelc
81
82
83
84
85 DO i = 1, numelc
86 itric(i) = ixc(7,i)
87 ENDDO
88 CALL my_orders(0,work,itric,indxc,numelc,1)
89
90 DO i = 1, numeltg
91 itritg(i) = ixtg(6,i)
92 ENDDO
93 CALL my_orders(0,work,itritg,indxtg,numeltg,1)
94
95 DO j=1,numelc
96 i = indxc(j)
97 DO k=1,4
98 n = ixc(k+1,i)
99 knod2elc(n) = knod2elc(n) + 1
100 tagskyc(k,i) = knod2elc(n)
101 END DO
102 END DO
103
104 DO j=1,numeltg
105 i = indxtg(j)
106 DO k=1,3
107 n = ixtg(k+1,i)
108 knod2elc(n) = knod2elc(n) + 1
109 tagskytg(k,i) = knod2elc(n)
110 END DO
111 END DO
112
113
114
115 indx = 0
116 DO j=1,numelc
117 i = indxc(j)
118 IF (iel_crkxfem(i) > 0) THEN
119 indx = indx + 1
120 DO k=1,4
121 n = ixc(k+1,i)
122 np = inod_crkxfem(n)
123 cne_xfe(adsky(np)) = i
124 crknodiad(adsky(np)) = tagskyc(k,i)
125 adsky(np) = adsky(np) + 1
126 ENDDO
127 ENDIF
128 ENDDO
129
130
131
132 DO j=1,numeltg
133 i = indxtg(j)
134 IF (iel_crkxfem(i+numelc) > 0) THEN
135 indx = indx + 1
136 DO k=1,3
137 n = ixtg(k+1,i)
138 np = inod_crkxfem(n)
139 cne_xfe(adsky(np)) = i + numelc
140 crknodiad(adsky(np)) = tagskytg(k,i)
141 adsky(np) = adsky(np) + 1
142 ENDDO
143 ENDIF
144 ENDDO
145
146
147
148
149
150 DO proc = 1, nspmd
151 nin = 0
152 DO ng = 1, ngroup
153 nel = iparg(2,ng)
154 nft = iparg(3,ng)
155 ity = iparg(5,ng)
156 p = iparg(32,ng)+1
157 IF (ity == 3) THEN
158 IF (p == proc) THEN
159 DO i = 1, nel
160 n = iel_crkxfem(i+nft)
161 IF (n > 0) THEN
162 nin = nin + 1
163 cel_xfe(n) = nin
164 cep_xfe(n) = p-1
165 ENDIF
166 ENDDO
167 ENDIF
168 ENDIF
169 ENDDO
170 ENDDO
171
172
173
174 DO proc = 1, nspmd
175 nin = 0
176 DO ng = 1, ngroup
177 nel = iparg(2,ng)
178 nft = iparg(3,ng)
179 ity = iparg(5,ng)
180 p = iparg(32,ng)+1
181 IF (ity == 7) THEN
182 IF (p == proc) THEN
183 ii = numelc + nft
184 DO i = 1, nel
185 n = iel_crkxfem(ii + i)
186 IF (n > 0) THEN
187 nin = nin + 1
188 cel_xfe(n) = nin
189 cep_xfe(n) = p-1
190 ENDIF
191 ENDDO
192 ENDIF
193 ENDIF
194 ENDDO
195 ENDDO
196
197 DEALLOCATE(tagskyc,tagskytg,knod2elc)
198
199 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)