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