/[escript]/branches/doubleplusgood/dudley/src/Assemble_PDE_Single2_3D.cpp
ViewVC logotype

Annotation of /branches/doubleplusgood/dudley/src/Assemble_PDE_Single2_3D.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4257 - (hide annotations)
Wed Feb 27 03:42:40 2013 UTC (6 years, 3 months ago) by jfenwick
Original Path: branches/doubleplusgood/dudley/src/Assemble_PDE_Single2_3D.c
File MIME type: text/plain
File size: 14532 byte(s)
Some simple experiments for c++ Finley

1 gross 798
2 jfenwick 3981 /*****************************************************************************
3 ksteube 1811 *
4 jfenwick 4154 * Copyright (c) 2003-2013 by University of Queensland
5 jfenwick 3981 * http://www.uq.edu.au
6 ksteube 1811 *
7     * Primary Business: Queensland, Australia
8     * Licensed under the Open Software License version 3.0
9     * http://www.opensource.org/licenses/osl-3.0.php
10     *
11 jfenwick 3981 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12     * Development since 2012 by School of Earth Sciences
13     *
14     *****************************************************************************/
15 ksteube 1312
16 jfenwick 3981 /************************************************************************************/
17 gross 798
18     /* assembles the system of numEq PDEs into the stiffness matrix S right hand side F */
19     /* the shape functions for test and solution must be identical */
20    
21     /* -(A_{i,j} u_,j)_i-(B_{i} u)_i+C_{j} u_,j-D u_m and -(X_,i)_i + Y */
22    
23     /* in a 3D domain. The shape functions for test and solution must be identical */
24     /* and row_NS == row_NN */
25    
26     /* Shape of the coefficients: */
27    
28     /* A = 3 x 3 */
29     /* B = 3 */
30     /* C = 3 */
31     /* D = scalar */
32     /* X = 3 */
33     /* Y = scalar */
34    
35 jfenwick 3981 /************************************************************************************/
36 gross 798
37     #include "Assemble.h"
38     #include "Util.h"
39 gross 853 #ifdef _OPENMP
40     #include <omp.h>
41     #endif
42 gross 798
43 jfenwick 3981 /************************************************************************************/
44 gross 798
45 caltinay 3247 void Dudley_Assemble_PDE_Single2_3D(Dudley_Assemble_Parameters p, Dudley_ElementFile * elements,
46 jfenwick 3187 Paso_SystemMatrix * Mat, escriptDataC * F,
47     escriptDataC * A, escriptDataC * B, escriptDataC * C, escriptDataC * D,
48     escriptDataC * X, escriptDataC * Y)
49     {
50 gross 798
51 jfenwick 3187 #define DIM 3
52 gross 798 index_t color;
53 jfenwick 3136 dim_t e;
54 gross 2748 __const double *A_p, *B_p, *C_p, *D_p, *X_p, *Y_p, *A_q, *B_q, *C_q, *D_q, *X_q, *Y_q;
55 jfenwick 3184 double *EM_S, *EM_F, *DSDX;
56 gross 853 index_t *row_index;
57 jfenwick 3187 register dim_t q, s, r;
58 gross 853 register double rtmp, rtmp00, rtmp01, rtmp02, rtmp10, rtmp11, rtmp12, rtmp20, rtmp21, rtmp22, rtmp0, rtmp1, rtmp2;
59     bool_t add_EM_F, add_EM_S;
60    
61 jfenwick 3187 bool_t extendedA = isExpanded(A);
62     bool_t extendedB = isExpanded(B);
63     bool_t extendedC = isExpanded(C);
64     bool_t extendedD = isExpanded(D);
65     bool_t extendedX = isExpanded(X);
66     bool_t extendedY = isExpanded(Y);
67     double *F_p = (requireWrite(F), getSampleDataRW(F, 0)); /* use comma, to get around the mixed code and declarations thing */
68 jfenwick 3224 const double *S = p.shapeFns;
69 jfenwick 3204 dim_t len_EM_S = p.numShapes * p.numShapes;
70     dim_t len_EM_F = p.numShapes;
71 gross 798
72 jfenwick 3231 #pragma omp parallel private(color,EM_S, EM_F, DSDX, A_p, B_p, C_p, D_p, X_p, Y_p, A_q, B_q, C_q, D_q, X_q, Y_q,row_index,q, s,r,rtmp, rtmp00, rtmp01, rtmp02, rtmp10, rtmp11, rtmp12, rtmp20, rtmp21, rtmp22, rtmp0, rtmp1, rtmp2,add_EM_F, add_EM_S)
73 gross 798 {
74 jfenwick 3187 EM_S = THREAD_MEMALLOC(len_EM_S, double);
75     EM_F = THREAD_MEMALLOC(len_EM_F, double);
76 jfenwick 3204 row_index = THREAD_MEMALLOC(p.numShapes, index_t);
77 gross 798
78 jfenwick 3187 if (!Dudley_checkPtr(EM_S) && !Dudley_checkPtr(EM_F) && !Dudley_checkPtr(row_index))
79     {
80 gross 2748
81 jfenwick 3187 for (color = elements->minColor; color <= elements->maxColor; color++)
82     {
83     /* open loop over all elements: */
84     #pragma omp for private(e) schedule(static)
85     for (e = 0; e < elements->numElements; e++)
86     {
87     if (elements->Color[e] == color)
88     {
89 jfenwick 3251 double vol = p.row_jac->absD[e] * p.row_jac->quadweight;
90 gross 2748
91 jfenwick 3187 A_p = getSampleDataRO(A, e);
92     B_p = getSampleDataRO(B, e);
93     C_p = getSampleDataRO(C, e);
94     D_p = getSampleDataRO(D, e);
95     X_p = getSampleDataRO(X, e);
96     Y_p = getSampleDataRO(Y, e);
97    
98 jfenwick 3205 DSDX = &(p.row_jac->DSDX[INDEX5(0, 0, 0, 0, e, p.numShapes, DIM, p.numQuad, 1)]);
99 jfenwick 3187 for (q = 0; q < len_EM_S; ++q)
100     EM_S[q] = 0;
101     for (q = 0; q < len_EM_F; ++q)
102     EM_F[q] = 0;
103     add_EM_F = FALSE;
104     add_EM_S = FALSE;
105 gross 2748
106 jfenwick 3981 /************************************************************************************/
107 jfenwick 3187 /* process A: */
108 jfenwick 3981 /************************************************************************************/
109 jfenwick 3187 if (NULL != A_p)
110     {
111     add_EM_S = TRUE;
112     if (extendedA)
113     {
114 jfenwick 3205 A_q = &(A_p[INDEX4(0, 0, 0, 0, DIM, DIM, p.numQuad)]);
115 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
116 jfenwick 3187 {
117 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
118 jfenwick 3187 {
119     rtmp = 0;
120 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
121 jfenwick 3187 {
122     rtmp +=
123 jfenwick 3204 vol * (DSDX[INDEX3(s, 0, q, p.numShapes, DIM)] *
124 jfenwick 3187 A_q[INDEX3(0, 0, q, DIM, DIM)] *
125 jfenwick 3204 DSDX[INDEX3(r, 0, q, p.numShapes, DIM)] +
126     DSDX[INDEX3(s, 0, q, p.numShapes, DIM)] *
127 jfenwick 3187 A_q[INDEX3(0, 1, q, DIM, DIM)] *
128 jfenwick 3204 DSDX[INDEX3(r, 1, q, p.numShapes, DIM)] +
129     DSDX[INDEX3(s, 0, q, p.numShapes, DIM)] *
130 jfenwick 3187 A_q[INDEX3(0, 2, q, DIM, DIM)] *
131 jfenwick 3204 DSDX[INDEX3(r, 2, q, p.numShapes, DIM)] +
132     DSDX[INDEX3(s, 1, q, p.numShapes, DIM)] *
133 jfenwick 3187 A_q[INDEX3(1, 0, q, DIM, DIM)] *
134 jfenwick 3204 DSDX[INDEX3(r, 0, q, p.numShapes, DIM)] +
135     DSDX[INDEX3(s, 1, q, p.numShapes, DIM)] *
136 jfenwick 3187 A_q[INDEX3(1, 1, q, DIM, DIM)] *
137 jfenwick 3204 DSDX[INDEX3(r, 1, q, p.numShapes, DIM)] +
138     DSDX[INDEX3(s, 1, q, p.numShapes, DIM)] *
139 jfenwick 3187 A_q[INDEX3(1, 2, q, DIM, DIM)] *
140 jfenwick 3204 DSDX[INDEX3(r, 2, q, p.numShapes, DIM)] +
141     DSDX[INDEX3(s, 2, q, p.numShapes, DIM)] *
142 jfenwick 3187 A_q[INDEX3(2, 0, q, DIM, DIM)] *
143 jfenwick 3204 DSDX[INDEX3(r, 0, q, p.numShapes, DIM)] +
144     DSDX[INDEX3(s, 2, q, p.numShapes, DIM)] *
145 jfenwick 3187 A_q[INDEX3(2, 1, q, DIM, DIM)] *
146 jfenwick 3204 DSDX[INDEX3(r, 1, q, p.numShapes, DIM)] +
147     DSDX[INDEX3(s, 2, q, p.numShapes, DIM)] *
148 jfenwick 3187 A_q[INDEX3(2, 2, q, DIM, DIM)] *
149 jfenwick 3204 DSDX[INDEX3(r, 2, q, p.numShapes, DIM)]);
150 jfenwick 3187 }
151 jfenwick 3204 EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] += rtmp;
152 jfenwick 3187 }
153     }
154 jfenwick 3224 }
155     else
156 jfenwick 3187 {
157 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
158 jfenwick 3187 {
159 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
160 jfenwick 3187 {
161     rtmp00 = 0;
162     rtmp01 = 0;
163     rtmp02 = 0;
164     rtmp10 = 0;
165     rtmp11 = 0;
166     rtmp12 = 0;
167     rtmp20 = 0;
168     rtmp21 = 0;
169     rtmp22 = 0;
170 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
171 jfenwick 3187 {
172 gross 2748
173 jfenwick 3204 rtmp0 = vol * DSDX[INDEX3(s, 0, q, p.numShapes, DIM)];
174     rtmp00 += rtmp0 * DSDX[INDEX3(r, 0, q, p.numShapes, DIM)];
175     rtmp01 += rtmp0 * DSDX[INDEX3(r, 1, q, p.numShapes, DIM)];
176     rtmp02 += rtmp0 * DSDX[INDEX3(r, 2, q, p.numShapes, DIM)];
177 gross 2748
178 jfenwick 3204 rtmp1 = vol * DSDX[INDEX3(s, 1, q, p.numShapes, DIM)];
179     rtmp10 += rtmp1 * DSDX[INDEX3(r, 0, q, p.numShapes, DIM)];
180     rtmp11 += rtmp1 * DSDX[INDEX3(r, 1, q, p.numShapes, DIM)];
181     rtmp12 += rtmp1 * DSDX[INDEX3(r, 2, q, p.numShapes, DIM)];
182 gross 2748
183 jfenwick 3204 rtmp2 = vol * DSDX[INDEX3(s, 2, q, p.numShapes, DIM)];
184     rtmp20 += rtmp2 * DSDX[INDEX3(r, 0, q, p.numShapes, DIM)];
185     rtmp21 += rtmp2 * DSDX[INDEX3(r, 1, q, p.numShapes, DIM)];
186     rtmp22 += rtmp2 * DSDX[INDEX3(r, 2, q, p.numShapes, DIM)];
187 jfenwick 3187 }
188 jfenwick 3204 EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] +=
189 jfenwick 3187 rtmp00 * A_p[INDEX2(0, 0, DIM)] + rtmp01 * A_p[INDEX2(0, 1, DIM)] +
190     rtmp02 * A_p[INDEX2(0, 2, DIM)] + rtmp10 * A_p[INDEX2(1, 0, DIM)] +
191     rtmp11 * A_p[INDEX2(1, 1, DIM)] + rtmp12 * A_p[INDEX2(1, 2, DIM)] +
192     rtmp20 * A_p[INDEX2(2, 0, DIM)] + rtmp21 * A_p[INDEX2(2, 1, DIM)] +
193     rtmp22 * A_p[INDEX2(2, 2, DIM)];
194     }
195     }
196     }
197     }
198 jfenwick 3981 /************************************************************************************/
199 jfenwick 3187 /* process B: */
200 jfenwick 3981 /************************************************************************************/
201 jfenwick 3187 if (NULL != B_p)
202     {
203     add_EM_S = TRUE;
204     if (extendedB)
205     {
206 jfenwick 3205 B_q = &(B_p[INDEX3(0, 0, 0, DIM, p.numQuad)]);
207 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
208 jfenwick 3187 {
209 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
210 jfenwick 3187 {
211     rtmp = 0;
212 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
213 jfenwick 3187 {
214 jfenwick 3204 rtmp += vol * S[INDEX2(r, q, p.numShapes)] *
215     (DSDX[INDEX3(s, 0, q, p.numShapes, DIM)] *
216 jfenwick 3187 B_q[INDEX2(0, q, DIM)] +
217 jfenwick 3204 DSDX[INDEX3(s, 1, q, p.numShapes, DIM)] *
218 jfenwick 3187 B_q[INDEX2(1, q, DIM)] +
219 jfenwick 3224 DSDX[INDEX3(s, 2, q, p.numShapes, DIM)] * B_q[INDEX2(2, q, DIM)]);
220 jfenwick 3187 }
221 jfenwick 3204 EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] += rtmp;
222 jfenwick 3187 }
223     }
224 jfenwick 3224 }
225     else
226 jfenwick 3187 {
227 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
228 jfenwick 3187 {
229 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
230 jfenwick 3187 {
231     rtmp0 = 0;
232     rtmp1 = 0;
233     rtmp2 = 0;
234 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
235 jfenwick 3187 {
236 jfenwick 3204 rtmp = vol * S[INDEX2(r, q, p.numShapes)];
237     rtmp0 += rtmp * DSDX[INDEX3(s, 0, q, p.numShapes, DIM)];
238     rtmp1 += rtmp * DSDX[INDEX3(s, 1, q, p.numShapes, DIM)];
239     rtmp2 += rtmp * DSDX[INDEX3(s, 2, q, p.numShapes, DIM)];
240 jfenwick 3187 }
241 jfenwick 3204 EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] +=
242 jfenwick 3187 rtmp0 * B_p[0] + rtmp1 * B_p[1] + rtmp2 * B_p[2];
243     }
244     }
245     }
246     }
247 jfenwick 3981 /************************************************************************************/
248 jfenwick 3187 /* process C: */
249 jfenwick 3981 /************************************************************************************/
250 jfenwick 3187 if (NULL != C_p)
251     {
252     add_EM_S = TRUE;
253     if (extendedC)
254     {
255 jfenwick 3205 C_q = &(C_p[INDEX3(0, 0, 0, DIM, p.numQuad)]);
256 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
257 jfenwick 3187 {
258 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
259 jfenwick 3187 {
260     rtmp = 0;
261 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
262 jfenwick 3187 {
263 jfenwick 3204 rtmp += vol * S[INDEX2(s, q, p.numShapes)] *
264 jfenwick 3187 (C_q[INDEX2(0, q, DIM)] *
265 jfenwick 3204 DSDX[INDEX3(r, 0, q, p.numShapes, DIM)] +
266 jfenwick 3187 C_q[INDEX2(1, q, DIM)] *
267 jfenwick 3204 DSDX[INDEX3(r, 1, q, p.numShapes, DIM)] +
268 jfenwick 3224 C_q[INDEX2(2, q, DIM)] * DSDX[INDEX3(r, 2, q, p.numShapes, DIM)]);
269 jfenwick 3187 }
270 jfenwick 3204 EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] += rtmp;
271 jfenwick 3187 }
272     }
273 jfenwick 3224 }
274     else
275 jfenwick 3187 {
276 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
277 jfenwick 3187 {
278 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
279 jfenwick 3187 {
280     rtmp0 = 0;
281     rtmp1 = 0;
282     rtmp2 = 0;
283 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
284 jfenwick 3187 {
285 jfenwick 3204 rtmp = vol * S[INDEX2(s, q, p.numShapes)];
286     rtmp0 += rtmp * DSDX[INDEX3(r, 0, q, p.numShapes, DIM)];
287     rtmp1 += rtmp * DSDX[INDEX3(r, 1, q, p.numShapes, DIM)];
288     rtmp2 += rtmp * DSDX[INDEX3(r, 2, q, p.numShapes, DIM)];
289 jfenwick 3187 }
290 jfenwick 3204 EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] +=
291 jfenwick 3187 rtmp0 * C_p[0] + rtmp1 * C_p[1] + rtmp2 * C_p[2];
292     }
293     }
294     }
295     }
296 jfenwick 3981 /*********************************************************************************** */
297 jfenwick 3187 /* process D */
298 jfenwick 3981 /************************************************************************************/
299 jfenwick 3187 if (NULL != D_p)
300     {
301     add_EM_S = TRUE;
302     if (extendedD)
303     {
304 jfenwick 3205 D_q = &(D_p[INDEX2(0, 0, p.numQuad)]);
305 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
306 jfenwick 3187 {
307 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
308 jfenwick 3187 {
309     rtmp = 0;
310 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
311 jfenwick 3187 rtmp +=
312 jfenwick 3204 vol * S[INDEX2(s, q, p.numShapes)] * D_q[q] *
313     S[INDEX2(r, q, p.numShapes)];
314     EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] += rtmp;
315 jfenwick 3187 }
316     }
317 jfenwick 3224 }
318     else
319 jfenwick 3187 {
320 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
321 jfenwick 3187 {
322 jfenwick 3204 for (r = 0; r < p.numShapes; r++)
323 jfenwick 3187 {
324     rtmp = 0;
325 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
326 jfenwick 3224 rtmp += vol * S[INDEX2(s, q, p.numShapes)] * S[INDEX2(r, q, p.numShapes)];
327     EM_S[INDEX4(0, 0, s, r, p.numEqu, p.numComp, p.numShapes)] += rtmp * D_p[0];
328 jfenwick 3187 }
329     }
330     }
331     }
332 jfenwick 3981 /************************************************************************************/
333 jfenwick 3187 /* process X: */
334 jfenwick 3981 /************************************************************************************/
335 jfenwick 3187 if (NULL != X_p)
336     {
337     add_EM_F = TRUE;
338     if (extendedX)
339     {
340 jfenwick 3205 X_q = &(X_p[INDEX3(0, 0, 0, DIM, p.numQuad)]);
341 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
342 jfenwick 3187 {
343     rtmp = 0;
344 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
345 jfenwick 3187 {
346     rtmp +=
347 jfenwick 3204 vol * (DSDX[INDEX3(s, 0, q, p.numShapes, DIM)] *
348 jfenwick 3187 X_q[INDEX2(0, q, DIM)] +
349 jfenwick 3204 DSDX[INDEX3(s, 1, q, p.numShapes, DIM)] *
350 jfenwick 3187 X_q[INDEX2(1, q, DIM)] +
351 jfenwick 3224 DSDX[INDEX3(s, 2, q, p.numShapes, DIM)] * X_q[INDEX2(2, q, DIM)]);
352 jfenwick 3187 }
353     EM_F[INDEX2(0, s, p.numEqu)] += rtmp;
354     }
355 jfenwick 3224 }
356     else
357 jfenwick 3187 {
358 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
359 jfenwick 3187 {
360     rtmp0 = 0;
361     rtmp1 = 0;
362     rtmp2 = 0;
363 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
364 jfenwick 3187 {
365 jfenwick 3204 rtmp0 += vol * DSDX[INDEX3(s, 0, q, p.numShapes, DIM)];
366     rtmp1 += vol * DSDX[INDEX3(s, 1, q, p.numShapes, DIM)];
367     rtmp2 += vol * DSDX[INDEX3(s, 2, q, p.numShapes, DIM)];
368 jfenwick 3187 }
369     EM_F[INDEX2(0, s, p.numEqu)] += rtmp0 * X_p[0] + rtmp1 * X_p[1] + rtmp2 * X_p[2];
370     }
371     }
372     }
373 jfenwick 3981 /************************************************************************************/
374 jfenwick 3187 /* process Y: */
375 jfenwick 3981 /************************************************************************************/
376 jfenwick 3187 if (NULL != Y_p)
377     {
378     add_EM_F = TRUE;
379     if (extendedY)
380     {
381 jfenwick 3205 Y_q = &(Y_p[INDEX2(0, 0, p.numQuad)]);
382 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
383 jfenwick 3187 {
384     rtmp = 0;
385 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
386 jfenwick 3204 rtmp += vol * S[INDEX2(s, q, p.numShapes)] * Y_q[q];
387 jfenwick 3187 EM_F[INDEX2(0, s, p.numEqu)] += rtmp;
388     }
389 jfenwick 3224 }
390     else
391 jfenwick 3187 {
392 jfenwick 3204 for (s = 0; s < p.numShapes; s++)
393 jfenwick 3187 {
394     rtmp = 0;
395 jfenwick 3205 for (q = 0; q < p.numQuad; q++)
396 jfenwick 3204 rtmp += vol * S[INDEX2(s, q, p.numShapes)];
397 jfenwick 3187 EM_F[INDEX2(0, s, p.numEqu)] += rtmp * Y_p[0];
398     }
399     }
400     }
401 jfenwick 3981 /*********************************************************************************************************************/
402 jfenwick 3187 /* add the element matrices onto the matrix and right hand side */
403 jfenwick 3981 /*********************************************************************************************************************/
404 gross 798
405 jfenwick 3204 for (q = 0; q < p.numShapes; q++)
406 jfenwick 3187 row_index[q] = p.row_DOF[elements->Nodes[INDEX2(q, e, p.NN)]];
407    
408     if (add_EM_F)
409 jfenwick 3224 Dudley_Util_AddScatter(p.numShapes, row_index, p.numEqu, EM_F, F_p, p.row_DOF_UpperBound);
410 jfenwick 3187 if (add_EM_S)
411 jfenwick 3204 Dudley_Assemble_addToSystemMatrix(Mat, p.numShapes, row_index, p.numEqu,
412     p.numShapes, row_index, p.numComp, EM_S);
413 jfenwick 3187
414     } /* end color check */
415     } /* end element loop */
416     } /* end color loop */
417    
418     THREAD_MEMFREE(EM_S);
419     THREAD_MEMFREE(EM_F);
420     THREAD_MEMFREE(row_index);
421    
422     } /* end of pointer check */
423     } /* end parallel region */
424 gross 798 }

  ViewVC Help
Powered by ViewVC 1.1.26