# Diff of /trunk/finley/src/Assemble_PDE_Points.cpp

revision 4407 by jfenwick, Tue Apr 2 04:46:45 2013 UTC revision 4408 by caltinay, Tue May 14 06:58:43 2013 UTC
# Line 14  Line 14
14  *****************************************************************************/  *****************************************************************************/
15
16
17  /************************************************************************************/  /****************************************************************************
18
19  /*    assembles the system of numEq PDEs into the stiffness matrix S and right hand side F  */    Assembles the system of numEq PDEs into the stiffness matrix S and right
20      hand side F
21
22  /*      d_dirac_{k,m} u_m and y_dirac_k */        d_dirac_{k,m} u_m and y_dirac_k
23
24  /*    u has p.numComp components in a 3D domain. The shape functions for test and solution must be identical  */    u has p.numComp components in a 3D domain.
25  /*    and row_NS == row_NN                                                                                  */    The shape functions for test and solution must be identical and
26      row_NS == row_NN.
27
28  /*    Shape of the coefficients: */    Shape of the coefficients:
29
30  /*      d_dirac = p.numEqu x p.numComp  */        d_dirac = p.numEqu x p.numComp
31  /*      y_dirac = p.numEqu   */        y_dirac = p.numEqu

/************************************************************************************/
32
33    *****************************************************************************/
34
35  #include "Assemble.h"  #include "Assemble.h"
36  #include "Util.h"  #include "Util.h"
#ifdef _OPENMP
#include <omp.h>
#endif

37
38  /************************************************************************************/  void Finley_Assemble_PDE_Points(Finley_Assemble_Parameters p,
39                                    Finley_ElementFile* elements,
40                                    Paso_SystemMatrix* S, escriptDataC* F,
41                                    escriptDataC* d_dirac, escriptDataC* y_dirac)
42    {
43        requireWrite(F);
44        double *F_p=getSampleDataRW(F,0);
45
46  void  Finley_Assemble_PDE_Points(Finley_Assemble_Parameters p,  #pragma omp parallel
Finley_ElementFile* elements,
Paso_SystemMatrix* Mat, escriptDataC* F,
escriptDataC* d_dirac, escriptDataC* y_dirac) {

index_t color, e, row_index;
__const double  *d_dirac_p, *y_dirac_p;

double *F_p=(requireWrite(F), getSampleDataRW(F,0));    /* use comma, to get around the mixed code and declarations thing */

#pragma omp parallel private(color, d_dirac_p, y_dirac_p)
47      {      {
48            for (color=elements->minColor;color<=elements->maxColor;color++) {          for (index_t color=elements->minColor;color<=elements->maxColor;color++) {
49               /*  open loop over all elements: */              // loop over all elements
50               #pragma omp for private(e) schedule(static)  #pragma omp for schedule(static)
51               for(e=0;e<elements->numElements;e++){              for(index_t e=0; e<elements->numElements; e++) {
52                  if (elements->Color[e]==color) {                  if (elements->Color[e]==color) {
53                                          const double *d_dirac_p=getSampleDataRO(d_dirac, e);
54             d_dirac_p=getSampleDataRO(d_dirac, e);                      const double *y_dirac_p=getSampleDataRO(y_dirac, e);
55                     y_dirac_p=getSampleDataRO(y_dirac, e);                      index_t row_index=p.row_DOF[elements->Nodes[INDEX2(0,e,p.NN)]];
56                                  if (NULL != y_dirac_p) {
58                                                       y_dirac_p, F_p, p.row_DOF_UpperBound);
60                                                          &row_index,                      if (NULL != d_dirac_p) {
62                                                          y_dirac_p,                                  p.numEqu, 1, &row_index, p.numComp, d_dirac_p);
63                                                          F_p,                      }
p.row_DOF_UpperBound);

1,
&row_index,
p.numEqu,
1,
&row_index,
p.numComp,
d_dirac_p);
64                  } /* end color check */                  } /* end color check */
65               } /* end element loop */              } /* end element loop */
66           } /* end color loop */          } /* end color loop */
67     } /* end parallel region */      } /* end parallel region */
68  }  }
69

Legend:
 Removed from v.4407 changed lines Added in v.4408