72
73
74
75
76
77
78
79#include "implicit_f.inc"
80
81
82
83#include "com04_c.inc"
84
85
86
87 INTEGER PROC, NMADSH4_L, NMADSH3_L, NMADSOL_L, NMADNOD_L,
88 . LEN_IA, NUMELS_L, NUMELC_L, NUMELTG_L,MADCL_NMADNOD_L,
89 . IEXMAD(*), CEP(*), NODLOCAL(*),CEL(*)
90
91
92
93 INTEGER NLOCAL
95
96
97
98 INTEGER I, IDEB, K, ESHIFT, NMAD_L, P
99 INTEGER, DIMENSION(:),ALLOCATABLE :: MADCL_TMPNOD,TMPSH3,TMPSH4,TMPSOL,
100 . TMPNOD,FAILSH4,FAILSH3,FAILSOL,ICONX_L
101
102
103 ALLOCATE(madcl_tmpnod(madcl_nmadnod_l))
104 ALLOCATE( tmpsh3(nmadsh3_l),tmpsh4(nmadsh4_l) )
105 ALLOCATE( tmpsol(nmadsol_l),tmpnod(nmadnod_l) )
106 ALLOCATE( iconx_l(7*nconx) )
107
108
109
110
111 IF(nexmad/=0) THEN
112
113
114
115 ideb = 1 + 7*nconx + nmadprt
116 eshift = numels+numelq
117 nmad_l = 0
118 DO i = 1, nmadsh4
119 k = iexmad(ideb+i-1)
120 IF(cep(k+eshift)==proc) THEN
121 nmad_l = nmad_l+1
122 tmpsh4(nmad_l) = cel(k+eshift)
123 END IF
124 END DO
125
126
127
128 ideb = ideb + nmadsh4
129 eshift = numels+numelq+numelc+numelt+numelp+numelr
130 nmad_l = 0
131 DO i = 1, nmadsh3
132 k = iexmad(ideb+i-1)
133 IF(cep(k+eshift)==proc) THEN
134 nmad_l = nmad_l+1
135 tmpsh3(nmad_l) = cel(k+eshift)
136 END IF
137 END DO
138
139
140
141 ideb = ideb + nmadsh3
142 eshift = 0
143 nmad_l = 0
144 DO i = 1, nmadsol
145 k = iexmad(ideb+i-1)
146 IF(cep(k+eshift)==proc) THEN
147 nmad_l = nmad_l+1
148 tmpsol(nmad_l) = cel(k+eshift)
149 END IF
150 END DO
151
152
153
154 ideb = ideb + nmadsol
155 nmad_l = 0
156 DO i = 1, nmadnod
157 k = iexmad(ideb+i-1)
158 IF(
nlocal(k,proc+1)==1)
THEN
159 DO p = 1, proc
160 IF(
nlocal(k,p)==1)
GOTO 100
161 END DO
162 nmad_l = nmad_l+1
163 tmpnod(nmad_l) = nodlocal(k)
164 END IF
165 100 CONTINUE
166 END DO
167
168
169
170 nmad_l = 0
171 DO i = 1, nmadnod
172 k = iexmad(ideb+i-1)
173 IF(
nlocal(k,proc+1)==1)
THEN
174 nmad_l = nmad_l+1
175 madcl_tmpnod(nmad_l) = nodlocal(k)
176 END IF
177 END DO
178
179 END IF
180
181 IF(proc==0) THEN
182 DO i=1,7*nconx
183 iconx_l(i) = iexmad(i)
184 END DO
185 DO i=1,nconx
186 iconx_l(7*(i-1)+4) = nodlocal(iexmad(7*(i-1)+4))
187 END DO
189 len_ia = len_ia + 7*nconx
190 END IF
191 IF(nexmad/=0) THEN
192 IF(proc==0) THEN
193 CALL write_i_c(iexmad(7*nconx+1),nmadprt)
194 len_ia = len_ia + nmadprt
195 END IF
197 len_ia = len_ia + nmadsh4_l
199 len_ia = len_ia + nmadsh3_l
201 len_ia = len_ia + nmadsol_l
203 len_ia = len_ia + nmadnod_l
204 CALL write_i_c(madcl_tmpnod,madcl_nmadnod_l)
205 len_ia = len_ia + madcl_nmadnod_l
206 IF(proc==0)THEN
207 ideb = 7*nconx+nmadprt+nmadsh4+nmadsh3+nmadsol+nmadnod
208 + + numelc+numeltg+numels + 1
209 CALL write_i_c(iexmad(ideb),2*nmadnod+nmadsh4+nmadsh3+nmadsol)
210 len_ia = len_ia + 2*nmadnod+nmadsh4+nmadsh3
211 END IF
212 END IF
213
214
215
216 DEALLOCATE(madcl_tmpnod)
217 DEALLOCATE( tmpsh3,tmpsh4 )
218 DEALLOCATE( tmpsol,tmpnod )
219 DEALLOCATE( iconx_l )
220
221 RETURN
void write_i_c(int *w, int *len)