/[escript]/trunk/finley/src/Assemble_LumpedSystem.c
ViewVC logotype

Diff of /trunk/finley/src/Assemble_LumpedSystem.c

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

revision 3521 by caltinay, Wed Mar 30 02:24:33 2011 UTC revision 3522 by gross, Tue May 24 00:57:58 2011 UTC
# Line 63  void Finley_Assemble_LumpedSystem(Finley Line 63  void Finley_Assemble_LumpedSystem(Finley
63         reducedIntegrationOrder=TRUE;         reducedIntegrationOrder=TRUE;
64    } else if (funcspace==FINLEY_REDUCED_FACE_ELEMENTS)  {    } else if (funcspace==FINLEY_REDUCED_FACE_ELEMENTS)  {
65         reducedIntegrationOrder=TRUE;         reducedIntegrationOrder=TRUE;
66        } else if (funcspace==FINLEY_POINTS)  {
67           reducedIntegrationOrder=TRUE;
68    } else {    } else {
69         Finley_setError(TYPE_ERROR,"Finley_Assemble_LumpedSystem: assemblage failed because of illegal function space.");         Finley_setError(TYPE_ERROR,"Finley_Assemble_LumpedSystem: assemblage failed because of illegal function space.");
70    }    }
# Line 98  void Finley_Assemble_LumpedSystem(Finley Line 100  void Finley_Assemble_LumpedSystem(Finley
100    if (Finley_noError()) {    if (Finley_noError()) {
101      requireWrite(lumpedMat);      requireWrite(lumpedMat);
102      lumpedMat_p=getSampleDataRW(lumpedMat,0);      lumpedMat_p=getSampleDataRW(lumpedMat,0);
103      len_EM_lumpedMat=p.row_numShapesTotal*p.numEqu;      if (funcspace==FINLEY_POINTS) {
104                      #pragma omp parallel private(color, D_p)
105      expandedD=isExpanded(D);            {
106      S=p.row_jac->BasisFunctions->S;              for (color=elements->minColor;color<=elements->maxColor;color++) {
107                  /*  open loop over all elements: */
108      #pragma omp parallel private(color, EM_lumpedMat, row_index, Vol, D_p, s, q, k, rtmp, diagS, m_t, isub, rtmp2)                #pragma omp for private(e) schedule(static)
109      {                for(e=0;e<elements->numElements;e++){
110         EM_lumpedMat=THREAD_MEMALLOC(len_EM_lumpedMat,double);                if (elements->Color[e]==color) {
111         row_index=THREAD_MEMALLOC(p.row_numShapesTotal,index_t);                  D_p=getSampleDataRO(D, e);
112         if ( !Finley_checkPtr(EM_lumpedMat) && !Finley_checkPtr(row_index) ) {                  if (NULL!=D_p)  Finley_Util_AddScatter(1,
113            if (p.numEqu == 1) { /* single equation */                                                          &(p.row_DOF[elements->Nodes[INDEX2(0,e,p.NN)]]),
114               if (expandedD) {   /* with expanded D */                                                                  p.numEqu,
115                   for (color=elements->minColor;color<=elements->maxColor;color++) {                                                          D_p,
116                      /*  open loop over all elements: */                                                          lumpedMat_p,
117                      #pragma omp for private(e) schedule(static)                                                          p.row_DOF_UpperBound);
118                      for(e=0;e<elements->numElements;e++){                              } /* end color check */
119              if (elements->Color[e]==color) {                } /* end element loop */
120                              for (isub=0; isub<p.numSub; isub++) {            } /* end color loop */
121                                 Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);          } /* end parallel region */
122                                 D_p=getSampleDataRO(D,e);                                } else {  
123                     if (useHRZ) {        
124          len_EM_lumpedMat=p.row_numShapesTotal*p.numEqu;
125                                     m_t=0; /* mass of the element: m_t */        
126                                     #pragma ivdep        expandedD=isExpanded(D);
127                                     for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q]*D_p[INDEX2(q, isub,p.numQuadSub) ];        S=p.row_jac->BasisFunctions->S;
128                              
129                                     diagS=0; /* diagonal sum: S */        #pragma omp parallel private(color, EM_lumpedMat, row_index, Vol, D_p, s, q, k, rtmp, diagS, m_t, isub, rtmp2)
130                                     for (s=0;s<p.row_numShapes;s++) {        {
131                                        rtmp=0;          EM_lumpedMat=THREAD_MEMALLOC(len_EM_lumpedMat,double);
132                        #pragma ivdep          row_index=THREAD_MEMALLOC(p.row_numShapesTotal,index_t);
133                                        for (q=0;q<p.numQuadSub;q++) {          if ( !Finley_checkPtr(EM_lumpedMat) && !Finley_checkPtr(row_index) ) {
134                       rtmp2=S[INDEX2(s,q,p.row_numShapes)];          if (p.numEqu == 1) { /* single equation */
135                       rtmp+=Vol[q]*D_p[INDEX2(q, isub,p.numQuadSub)]*rtmp2*rtmp2;            if (expandedD) {  /* with expanded D */        
136                        }                for (color=elements->minColor;color<=elements->maxColor;color++) {
137                                        EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp;                /*  open loop over all elements: */
138                                        diagS+=rtmp;                #pragma omp for private(e) schedule(static)
139                                     }                for(e=0;e<elements->numElements;e++){              
140                                     /* rescale diagonals by m_t/diagS to ensure consistent mass over element */                    if (elements->Color[e]==color) {
141                     rtmp=m_t/diagS;                    for (isub=0; isub<p.numSub; isub++) {
142                     #pragma ivdep                      Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);
143                                     for (s=0;s<p.row_numShapes;s++) EM_lumpedMat[INDEX2(0,s,p.numEqu)]*=rtmp;                      D_p=getSampleDataRO(D,e);                          
144                                                  if (useHRZ) {
145                     } else { /* row-sum lumping */  
146                                     for (s=0;s<p.row_numShapes;s++) {                      m_t=0; /* mass of the element: m_t */
147                                         rtmp=0;                      #pragma ivdep
148                         #pragma ivdep                      for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q]*D_p[INDEX2(q, isub,p.numQuadSub) ];
149                                         for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)]*D_p[INDEX2(q, isub,p.numQuadSub)];                  
150                                         EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp;                      diagS=0; /* diagonal sum: S */
151                                     }                      for (s=0;s<p.row_numShapes;s++) {
152                            rtmp=0;
                    }  
                                for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];  
                                Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);  
                 } /* end of isub loop */  
                        } /* end color check */    
                     } /* end element loop */  
                   } /* end color loop */  
   
   
              } else  {  /* with constant D */    
   
                  for (color=elements->minColor;color<=elements->maxColor;color++) {  
                     /*  open loop over all elements: */  
                     #pragma omp for private(e) schedule(static)  
                     for(e=0;e<elements->numElements;e++){  
                         if (elements->Color[e]==color) {  
                             for (isub=0; isub<p.numSub; isub++) {  
                                Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);                  
                                D_p=getSampleDataRO(D,e);                            
                    if (useHRZ) { /* HRZ lumping */  
                                    m_t=0; /* mass of the element: m_t */  
                                    #pragma ivdep  
                                    for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q];  
                                    diagS=0; /* diagonal sum: S */  
                                    for (s=0;s<p.row_numShapes;s++) {  
                                       rtmp=0;  
                       #pragma ivdep  
                                       for (q=0;q<p.numQuadSub;q++){  
                      rtmp2=S[INDEX2(s,q,p.row_numShapes)];  
                       rtmp+=Vol[q]*rtmp2*rtmp2;  
                       }  
                                       EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp;  
                                       diagS+=rtmp;  
                                    }  
                                    /* rescale diagonals by m_t/diagS to ensure consistent mass over element */  
                    rtmp=m_t/diagS*D_p[0];  
                    #pragma ivdep  
                                    for (s=0;s<p.row_numShapes;s++) EM_lumpedMat[INDEX2(0,s,p.numEqu)]*=rtmp;  
                    } else { /* row-sum lumping */  
                                    for (s=0;s<p.row_numShapes;s++) {  
                                        rtmp=0;  
                        #pragma ivdep  
                                        for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)];  
                                        EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp*D_p[0];  
                                    }  
                    }  
                                for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];  
                                Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);  
                             } /* end of isub loop */  
                        } /* end color check */  
                     } /* end element loop */  
                   } /* end color loop */  
           
              }  
           } else { /* system of  equation */  
              if (expandedD) { /* with expanded D */  
                  for (color=elements->minColor;color<=elements->maxColor;color++) {  
                     /*  open loop over all elements: */  
                     #pragma omp for private(e) schedule(static)  
                     for(e=0;e<elements->numElements;e++){  
                        if (elements->Color[e]==color) {  
               for (isub=0; isub<p.numSub; isub++) {      
                               Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);  
                               D_p=getSampleDataRO(D,e);    
                   
                               if (useHRZ) { /* HRZ lumping */  
                                   for (k=0;k<p.numEqu;k++) {  
                                       m_t=0; /* mass of the element: m_t */  
                                       #pragma ivdep  
                                       for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q]*D_p[INDEX3(k,q,isub,p.numEqu,p.numQuadSub)];  
                                                     
                                       diagS=0; /* diagonal sum: S */  
                                       for (s=0;s<p.row_numShapes;s++) {  
                                           rtmp=0;  
                       #pragma ivdep  
                                           for (q=0;q<p.numQuadSub;q++) {  
                          rtmp2=S[INDEX2(s,q,p.row_numShapes)];  
                          rtmp+=Vol[q]*D_p[INDEX3(k,q,isub,p.numEqu,p.numQuadSub)]*rtmp2*rtmp2;  
                       }  
                                           EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp;  
                                           diagS+=rtmp;  
                                        }  
                        /* rescale diagonals by m_t/diagS to ensure consistent mass over element */  
                        rtmp=m_t/diagS;  
                        #pragma ivdep  
                        for (s=0;s<p.row_numShapes;s++) EM_lumpedMat[INDEX2(k,s,p.numEqu)]*=rtmp;  
                     }                  
                   } else { /* row-sum lumping */  
                                   for (s=0;s<p.row_numShapes;s++) {  
                                       for (k=0;k<p.numEqu;k++) {  
                                          rtmp=0.;  
                      #pragma ivdep  
                                          for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)]*D_p[INDEX3(k,q,isub,p.numEqu,p.numQuadSub)];  
                                          EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp;  
                                        }  
                   }  
                   }  
                   for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];  
                   Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);  
                } /* end of isub loop */  
                        } /* end color check */  
                     } /* end element loop */  
                 } /* end color loop */  
              } else { /* with constant D */  
                  for (color=elements->minColor;color<=elements->maxColor;color++) {  
                     /*  open loop over all elements: */  
                     #pragma omp for private(e) schedule(static)  
                     for(e=0;e<elements->numElements;e++){  
                        if (elements->Color[e]==color) {  
                for (isub=0; isub<p.numSub; isub++) {      
                               Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);  
                               D_p=getSampleDataRO(D,e);  
                 
                               if (useHRZ) { /* HRZ lumping */  
                                       m_t=0; /* mass of the element: m_t */  
                                       #pragma ivdep  
                                       for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q];  
                                       diagS=0; /* diagonal sum: S */  
                                       for (s=0;s<p.row_numShapes;s++) {  
                                           rtmp=0;  
                       #pragma ivdep  
                                           for (q=0;q<p.numQuadSub;q++) {  
                          rtmp2=S[INDEX2(s,q,p.row_numShapes)];  
                          rtmp+=Vol[q]*rtmp2*rtmp2;  
                       }  
                       #pragma ivdep  
                       for (k=0;k<p.numEqu;k++) EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp;  
                                           diagS+=rtmp;  
                                       }  
                                         
                       /* rescale diagonals by m_t/diagS to ensure consistent mass over element */  
                       rtmp=m_t/diagS;  
                       for (s=0;s<p.row_numShapes;s++) {  
153                          #pragma ivdep                          #pragma ivdep
154                          for (k=0;k<p.numEqu;k++) EM_lumpedMat[INDEX2(k,s,p.numEqu)]*=rtmp*D_p[k];                          for (q=0;q<p.numQuadSub;q++) {
155                        }                            rtmp2=S[INDEX2(s,q,p.row_numShapes)];
156                    } else { /* row-sum lumping */                            rtmp+=Vol[q]*D_p[INDEX2(q, isub,p.numQuadSub)]*rtmp2*rtmp2;
157                                   for (s=0;s<p.row_numShapes;s++) {                          }
158                      for (k=0;k<p.numEqu;k++) {                          EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp;
159                                          rtmp=0.;                          diagS+=rtmp;
160                        }
161                        /* rescale diagonals by m_t/diagS to ensure consistent mass over element */
162                        rtmp=m_t/diagS;
163                        #pragma ivdep
164                        for (s=0;s<p.row_numShapes;s++) EM_lumpedMat[INDEX2(0,s,p.numEqu)]*=rtmp;
165                    
166                        } else { /* row-sum lumping */
167                        for (s=0;s<p.row_numShapes;s++) {
168                            rtmp=0;
169                            #pragma ivdep
170                            for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)]*D_p[INDEX2(q, isub,p.numQuadSub)];
171                            EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp;
172                        }
173    
174                        }
175                        for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];
176                        Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);
177                      } /* end of isub loop */
178                    } /* end color check */
179                  } /* end element loop */
180                } /* end color loop */
181    
182    
183              } else  { /* with constant D */  
184    
185                  for (color=elements->minColor;color<=elements->maxColor;color++) {
186                  /*  open loop over all elements: */
187                  #pragma omp for private(e) schedule(static)
188                  for(e=0;e<elements->numElements;e++){
189                      if (elements->Color[e]==color) {
190                      for (isub=0; isub<p.numSub; isub++) {
191                        Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);              
192                        D_p=getSampleDataRO(D,e);                          
193                        if (useHRZ) { /* HRZ lumping */
194                        m_t=0; /* mass of the element: m_t */
195                      #pragma ivdep                      #pragma ivdep
196                                          for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)];                      for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q];
197                                          EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp*D_p[k];                      diagS=0; /* diagonal sum: S */
198                                       }                      for (s=0;s<p.row_numShapes;s++) {
199                   }                          rtmp=0;
200                    }                          #pragma ivdep
201                    for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];                          for (q=0;q<p.numQuadSub;q++){
202                    Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);                            rtmp2=S[INDEX2(s,q,p.row_numShapes)];
203                } /* end of isub loop */                          rtmp+=Vol[q]*rtmp2*rtmp2;
204                         } /* end color check */                          }
205                      } /* end element loop */                          EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp;
206                  } /* end color loop */                          diagS+=rtmp;
207               }                      }
208            }                      /* rescale diagonals by m_t/diagS to ensure consistent mass over element */
209         } /* end of pointer check */                      rtmp=m_t/diagS*D_p[0];
210         THREAD_MEMFREE(EM_lumpedMat);                      #pragma ivdep
211         THREAD_MEMFREE(row_index);                      for (s=0;s<p.row_numShapes;s++) EM_lumpedMat[INDEX2(0,s,p.numEqu)]*=rtmp;
212      } /* end parallel region */                      } else { /* row-sum lumping */
213                        for (s=0;s<p.row_numShapes;s++) {
214                            rtmp=0;
215                            #pragma ivdep
216                            for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)];
217                            EM_lumpedMat[INDEX2(0,s,p.numEqu)]=rtmp*D_p[0];
218                        }
219                        }
220                        for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];
221                        Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);
222                                      } /* end of isub loop */
223                    } /* end color check */
224                  } /* end element loop */
225                } /* end color loop */
226                  
227              }
228            } else { /* system of  equation */
229              if (expandedD) { /* with expanded D */    
230                  for (color=elements->minColor;color<=elements->maxColor;color++) {
231                  /*  open loop over all elements: */
232                  #pragma omp for private(e) schedule(static)
233                  for(e=0;e<elements->numElements;e++){
234                    if (elements->Color[e]==color) {
235                    for (isub=0; isub<p.numSub; isub++) {    
236                        Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);
237                        D_p=getSampleDataRO(D,e);  
238                      
239                        if (useHRZ) { /* HRZ lumping */
240                        for (k=0;k<p.numEqu;k++) {
241                            m_t=0; /* mass of the element: m_t */
242                            #pragma ivdep
243                            for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q]*D_p[INDEX3(k,q,isub,p.numEqu,p.numQuadSub)];
244                                
245                            diagS=0; /* diagonal sum: S */
246                            for (s=0;s<p.row_numShapes;s++) {
247                            rtmp=0;
248                            #pragma ivdep
249                            for (q=0;q<p.numQuadSub;q++) {
250                              rtmp2=S[INDEX2(s,q,p.row_numShapes)];
251                              rtmp+=Vol[q]*D_p[INDEX3(k,q,isub,p.numEqu,p.numQuadSub)]*rtmp2*rtmp2;
252                            }
253                            EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp;
254                            diagS+=rtmp;
255                            }
256                            /* rescale diagonals by m_t/diagS to ensure consistent mass over element */
257                            rtmp=m_t/diagS;
258                            #pragma ivdep
259                            for (s=0;s<p.row_numShapes;s++) EM_lumpedMat[INDEX2(k,s,p.numEqu)]*=rtmp;
260                          }              
261                        } else { /* row-sum lumping */
262                        for (s=0;s<p.row_numShapes;s++) {
263                            for (k=0;k<p.numEqu;k++) {
264                              rtmp=0.;
265                              #pragma ivdep
266                              for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)]*D_p[INDEX3(k,q,isub,p.numEqu,p.numQuadSub)];
267                              EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp;
268                            }
269                        }
270                        }
271                        for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];
272                        Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);
273                    } /* end of isub loop */
274                    } /* end color check */
275                  } /* end element loop */
276                  } /* end color loop */
277              } else { /* with constant D */
278                  for (color=elements->minColor;color<=elements->maxColor;color++) {
279                  /*  open loop over all elements: */
280                  #pragma omp for private(e) schedule(static)
281                  for(e=0;e<elements->numElements;e++){
282                    if (elements->Color[e]==color) {
283                    for (isub=0; isub<p.numSub; isub++) {    
284                        Vol=&(p.row_jac->volume[INDEX3(0,isub,e, p.numQuadSub,p.numSub)]);
285                        D_p=getSampleDataRO(D,e);
286                    
287                        if (useHRZ) { /* HRZ lumping */
288                            m_t=0; /* mass of the element: m_t */
289                            #pragma ivdep
290                            for (q=0;q<p.numQuadSub;q++) m_t+=Vol[q];
291                            diagS=0; /* diagonal sum: S */
292                            for (s=0;s<p.row_numShapes;s++) {
293                            rtmp=0;
294                            #pragma ivdep
295                            for (q=0;q<p.numQuadSub;q++) {
296                              rtmp2=S[INDEX2(s,q,p.row_numShapes)];
297                              rtmp+=Vol[q]*rtmp2*rtmp2;
298                            }
299                            #pragma ivdep
300                            for (k=0;k<p.numEqu;k++) EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp;
301                            diagS+=rtmp;
302                            }
303                            
304                            /* rescale diagonals by m_t/diagS to ensure consistent mass over element */
305                            rtmp=m_t/diagS;
306                            for (s=0;s<p.row_numShapes;s++) {
307                              #pragma ivdep
308                              for (k=0;k<p.numEqu;k++) EM_lumpedMat[INDEX2(k,s,p.numEqu)]*=rtmp*D_p[k];
309                            }
310                        } else { /* row-sum lumping */
311                          for (s=0;s<p.row_numShapes;s++) {
312                          for (k=0;k<p.numEqu;k++) {
313                              rtmp=0.;
314                              #pragma ivdep
315                              for (q=0;q<p.numQuadSub;q++) rtmp+=Vol[q]*S[INDEX2(s,q,p.row_numShapes)];
316                              EM_lumpedMat[INDEX2(k,s,p.numEqu)]=rtmp*D_p[k];
317                          }
318                          }
319                        }
320                        for (q=0;q<p.row_numShapesTotal;q++) row_index[q]=p.row_DOF[elements->Nodes[INDEX2(p.row_node[INDEX2(q,isub,p.row_numShapesTotal)],e,p.NN)]];
321                        Finley_Util_AddScatter(p.row_numShapesTotal,row_index,p.numEqu,EM_lumpedMat,lumpedMat_p, p.row_DOF_UpperBound);
322                    } /* end of isub loop */
323                    } /* end color check */
324                  } /* end element loop */
325                  } /* end color loop */
326              }
327            }
328            } /* end of pointer check */
329            THREAD_MEMFREE(EM_lumpedMat);
330            THREAD_MEMFREE(row_index);
331          } /* end parallel region */
332        }
333    }    }
334  }  }

Legend:
Removed from v.3521  
changed lines
  Added in v.3522

  ViewVC Help
Powered by ViewVC 1.1.26