/[escript]/trunk/finley/src/Assemble_PDE_Points.cpp
ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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) {
57                     row_index=p.row_DOF[elements->Nodes[INDEX2(0,e,p.NN)]];                          Finley_Util_AddScatter(1, &row_index, p.numEqu,
58                                                       y_dirac_p, F_p, p.row_DOF_UpperBound);
59             if (NULL!=y_dirac_p)  Finley_Util_AddScatter(1,                      }
60                                                          &row_index,                      if (NULL != d_dirac_p) {
61                                                          p.numEqu,                          Finley_Assemble_addToSystemMatrix(S, 1, &row_index,
62                                                          y_dirac_p,                                  p.numEqu, 1, &row_index, p.numComp, d_dirac_p);
63                                                          F_p,                      }
                                                         p.row_DOF_UpperBound);  
             
                    if (NULL!=d_dirac_p) Finley_Assemble_addToSystemMatrix(Mat,  
                                                                    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

  ViewVC Help
Powered by ViewVC 1.1.26