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

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

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

revision 1388 by trankine, Fri Jan 11 07:45:58 2008 UTC revision 1552 by gross, Thu May 8 08:52:41 2008 UTC
# Line 37  void  Finley_Assemble_addToSystemMatrix( Line 37  void  Finley_Assemble_addToSystemMatrix(
37                                          dim_t NN_Sol,index_t* Nodes_Sol, dim_t num_Sol, double* array) {                                          dim_t NN_Sol,index_t* Nodes_Sol, dim_t num_Sol, double* array) {
38    index_t index_offset=(in->type & MATRIX_FORMAT_OFFSET1 ? 1:0);    index_t index_offset=(in->type & MATRIX_FORMAT_OFFSET1 ? 1:0);
39    dim_t k_Equa,j_Equa,j_Sol,k_Sol,i_Equa,i_Sol,l_col,l_row,ic,ir,index,k,i_row, i_col;    dim_t k_Equa,j_Equa,j_Sol,k_Sol,i_Equa,i_Sol,l_col,l_row,ic,ir,index,k,i_row, i_col;
40    index_t *mainBlock_ptr, *mainBlock_index, *coupleBlock_ptr, *coupleBlock_index;    index_t *mainBlock_ptr, *mainBlock_index, *col_coupleBlock_ptr, *col_coupleBlock_index, *row_coupleBlock_ptr, *row_coupleBlock_index;
41    double *mainBlock_val, *coupleBlock_val;    double *mainBlock_val, *row_coupleBlock_val, *col_coupleBlock_val;
42    dim_t row_block_size=in->row_block_size;    dim_t row_block_size=in->row_block_size;
43    dim_t col_block_size=in->col_block_size;    dim_t col_block_size=in->col_block_size;
44    dim_t block_size=in->block_size;    dim_t block_size=in->block_size;
# Line 103  void  Finley_Assemble_addToSystemMatrix( Line 103  void  Finley_Assemble_addToSystemMatrix(
103           mainBlock_ptr=in->mainBlock->pattern->ptr;           mainBlock_ptr=in->mainBlock->pattern->ptr;
104           mainBlock_index=in->mainBlock->pattern->index;           mainBlock_index=in->mainBlock->pattern->index;
105           mainBlock_val=in->mainBlock->val;           mainBlock_val=in->mainBlock->val;
106           coupleBlock_ptr=in->coupleBlock->pattern->ptr;           col_coupleBlock_ptr=in->col_coupleBlock->pattern->ptr;
107           coupleBlock_index=in->coupleBlock->pattern->index;           col_coupleBlock_index=in->col_coupleBlock->pattern->index;
108           coupleBlock_val=in->coupleBlock->val;           col_coupleBlock_val=in->col_coupleBlock->val;
109             row_coupleBlock_ptr=in->row_coupleBlock->pattern->ptr;
110             row_coupleBlock_index=in->row_coupleBlock->pattern->index;
111             row_coupleBlock_val=in->row_coupleBlock->val;
112    
113           for (k_Equa=0;k_Equa<NN_Equa;++k_Equa) { /* Down columns of array */           for (k_Equa=0;k_Equa<NN_Equa;++k_Equa) { /* Down columns of array */
114                  j_Equa=Nodes_Equa[k_Equa];                  j_Equa=Nodes_Equa[k_Equa];
# Line 134  void  Finley_Assemble_addToSystemMatrix( Line 137  void  Finley_Assemble_addToSystemMatrix(
137                                     }                                     }
138                                 }                                 }
139                             } else {                             } else {
140                             for (k=coupleBlock_ptr[i_row]-index_offset;k<coupleBlock_ptr[i_row+1]-index_offset;++k) {                             for (k=col_coupleBlock_ptr[i_row]-index_offset;k<col_coupleBlock_ptr[i_row+1]-index_offset;++k) {
141                                 if (coupleBlock_index[k] == i_col-numMyCols) {                                 if (col_coupleBlock_index[k] == i_col-numMyCols) {
142                                       /* Entry array(k_Sol, j_Equa) is a block (row_block_size x col_block_size) */                                       /* Entry array(k_Sol, j_Equa) is a block (row_block_size x col_block_size) */
143                                       for (ic=0;ic<col_block_size;++ic) {                                       for (ic=0;ic<col_block_size;++ic) {
144                                             i_Sol=ic+col_block_size*l_col;                                             i_Sol=ic+col_block_size*l_col;
145                                             for (ir=0;ir<row_block_size;++ir) {                                             for (ir=0;ir<row_block_size;++ir) {
146                                                i_Equa=ir+row_block_size*l_row;                                                i_Equa=ir+row_block_size*l_row;
147                                        coupleBlock_val[k*block_size+ir+row_block_size*ic]+=                                        col_coupleBlock_val[k*block_size+ir+row_block_size*ic]+=
148                                                        array[INDEX4(i_Equa,i_Sol,k_Equa,k_Sol,num_Equa,num_Sol,NN_Equa)];                                                        array[INDEX4(i_Equa,i_Sol,k_Equa,k_Sol,num_Equa,num_Sol,NN_Equa)];
149                                             }                                             }
150                                       }                                       }
# Line 151  void  Finley_Assemble_addToSystemMatrix( Line 154  void  Finley_Assemble_addToSystemMatrix(
154                             }                             }
155                          }                          }
156                        }                        }
157                      } /* end i_row check */                      } else {
158                          for (k_Sol=0;k_Sol<NN_Sol;++k_Sol) { /* Across rows of array */
159                            j_Sol=Nodes_Sol[k_Sol];
160                            for (l_col=0;l_col<num_subblocks_Sol;++l_col) {
161                               i_col=j_Sol*num_subblocks_Sol+index_offset+l_col;
162                               if (i_col < numMyCols + index_offset ) {
163                               for (k=row_coupleBlock_ptr[i_row-numMyRows]-index_offset;k<row_coupleBlock_ptr[i_row-numMyRows+1]-index_offset;++k) {
164                                   if (row_coupleBlock_index[k] == i_col) {
165                                         /* Entry array(k_Sol, j_Equa) is a block (row_block_size x col_block_size) */
166                                         for (ic=0;ic<col_block_size;++ic) {
167                                               i_Sol=ic+col_block_size*l_col;
168                                               for (ir=0;ir<row_block_size;++ir) {
169                                                  i_Equa=ir+row_block_size*l_row;
170                                          row_coupleBlock_val[k*block_size+ir+row_block_size*ic]+=
171                                                          array[INDEX4(i_Equa,i_Sol,k_Equa,k_Sol,num_Equa,num_Sol,NN_Equa)];
172                                               }
173                                         }
174                                         break;
175                                       }
176                                   }
177                               }
178                            }
179                          }
180                        }
181                }                }
182          }          }
183     }     }

Legend:
Removed from v.1388  
changed lines
  Added in v.1552

  ViewVC Help
Powered by ViewVC 1.1.26