/[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 3070 by jfenwick, Thu Jan 28 02:03:15 2010 UTC revision 3071 by gross, Wed Jul 21 05:37:30 2010 UTC
# Line 48  void  Finley_Assemble_addToSystemMatrix( Line 48  void  Finley_Assemble_addToSystemMatrix(
48    
49    if (in->type & MATRIX_FORMAT_CSC) {    if (in->type & MATRIX_FORMAT_CSC) {
50           /* MATRIX_FORMAT_CSC does not support MPI !!!!! */           /* MATRIX_FORMAT_CSC does not support MPI !!!!! */
51           mainBlock_ptr=in->mainBlock->pattern->ptr;       mainBlock_ptr=in->mainBlock->pattern->ptr;
52           mainBlock_index=in->mainBlock->pattern->index;       mainBlock_index=in->mainBlock->pattern->index;
53           mainBlock_val=in->mainBlock->val;       mainBlock_val=in->mainBlock->val;
54           for (k_Sol=0;k_Sol<NN_Sol;k_Sol++) {       col_coupleBlock_ptr=in->col_coupleBlock->pattern->ptr;
55              j_Sol=Nodes_Sol[k_Sol];       col_coupleBlock_index=in->col_coupleBlock->pattern->index;
56              for (l_col=0;l_col<num_subblocks_Sol;++l_col) {       col_coupleBlock_val=in->col_coupleBlock->val;
57                 i_col=j_Sol*num_subblocks_Sol+l_col;       row_coupleBlock_ptr=in->row_coupleBlock->pattern->ptr;
58                 for (k_Equa=0;k_Equa<NN_Equa;k_Equa++) {       row_coupleBlock_index=in->row_coupleBlock->pattern->index;
59                   j_Equa=Nodes_Equa[k_Equa];       row_coupleBlock_val=in->row_coupleBlock->val;
60                   for (l_row=0;l_row<num_subblocks_Equa;++l_row) {  
61                      i_row=j_Equa*num_subblocks_Equa+index_offset+l_row;       for (k_Sol=0;k_Sol<NN_Sol;++k_Sol) { /* Down columns of array */
62                  for (k=mainBlock_ptr[i_col]-index_offset; k<mainBlock_ptr[i_col+1]-index_offset;++k) {          j_Sol=Nodes_Sol[k_Sol];
63                      if (mainBlock_index[k] == i_row) {             for (l_col=0;l_col<num_subblocks_Sol;++l_col) {
64                            for (ic=0;ic<col_block_size;++ic) {            i_col=j_Sol*num_subblocks_Sol+l_col;
65                                  i_Sol=ic+col_block_size*l_col;            if (i_col < numMyCols) {
66                                  for (ir=0;ir<row_block_size;++ir) {               for (k_Equa=0;k_Equa<NN_Equa;++k_Equa) { /* Across cols of array */
67                                     i_Equa=ir+row_block_size*l_row;              j_Equa=Nodes_Equa[k_Equa];
68                             mainBlock_val[k*block_size+ir+row_block_size*ic]+=              for (l_row=0;l_row<num_subblocks_Equa;++l_row) {
69                                             array[INDEX4(i_Equa,i_Sol,k_Equa,k_Sol,num_Equa,num_Sol,NN_Equa)];                 i_row=j_Equa*num_subblocks_Equa+index_offset+l_row;
70                                  }                 if (i_row < numMyRows + index_offset ) {
71                            }                    for (k=mainBlock_ptr[i_col]-index_offset;k<mainBlock_ptr[i_col+1]-index_offset;++k) {
72                            break;                   if (mainBlock_index[k]==i_row) {
73                          }                      /* Entry array(k_Equa, j_Sol) is a block (col_block_size x col_block_size) */
74                      }                      for (ic=0;ic<col_block_size;++ic) {
75                   }                         i_Sol=ic+col_block_size*l_col;;
76                 }                         for (ir=0;ir<row_block_size;++ir) {
77              }                        i_Equa=ir+row_block_size*l_row;
78           }                           mainBlock_val[k*block_size+ir+row_block_size*ic]+=
79                            array[INDEX4(i_Equa,i_Sol,k_Equa,k_Sol,num_Equa,num_Sol,NN_Equa)];
80                           }
81                        }
82                        break;
83                     }
84                      }
85                   } else {
86                      for (k=col_coupleBlock_ptr[i_col]-index_offset;k<col_coupleBlock_ptr[i_col+1]-index_offset;++k) {
87                     if (row_coupleBlock_index[k] == i_row-numMyRows) {
88                        for (ic=0;ic<col_block_size;++ic) {
89                           i_Sol=ic+col_block_size*l_col;
90                           for (ir=0;ir<row_block_size;++ir) {
91                          i_Equa=ir+row_block_size*l_row;
92                          row_coupleBlock_val[k*block_size+ir+row_block_size*ic]+=
93                          array[INDEX4(i_Equa,i_Sol,k_Equa,k_Sol,num_Equa,num_Sol,NN_Equa)];;
94                           }
95                        }
96                        break;
97                     }
98                      }
99                   }
100                }
101                 }
102              } else {
103                 for (k_Equa=0;k_Equa<NN_Equa;++k_Equa) { /* Across rows of array */
104                j_Equa=Nodes_Equa[k_Equa];
105                for (l_row=0;l_row<num_subblocks_Equa;++l_row) {
106                   i_row=j_Equa*num_subblocks_Equa+index_offset+l_row;
107                   if (i_row < numMyRows + index_offset ) {
108                      for (k=col_coupleBlock_ptr[i_col-numMyCols]-index_offset;k<col_coupleBlock_ptr[i_col-numMyCols+1]-index_offset;++k) {
109                     if (col_coupleBlock_index[k] == i_row) {
110                        for (ic=0;ic<col_block_size;++ic) {
111                           i_Sol=ic+col_block_size*l_col;
112                           for (ir=0;ir<row_block_size;++ir) {
113                          i_Equa=ir+row_block_size*l_row;
114                          col_coupleBlock_val[k*block_size+ir+row_block_size*ic]+=
115                          array[INDEX4(i_Equa,i_Sol,k_Equa,k_Sol,num_Equa,num_Sol,NN_Equa)];
116                           }
117                        }
118                        break;
119                     }
120                      }
121                   }
122                }
123                 }
124              }
125               }
126         }
127     } else if (in->type & MATRIX_FORMAT_TRILINOS_CRS) {     } else if (in->type & MATRIX_FORMAT_TRILINOS_CRS) {
128         /* this needs to be modified */         /* this needs to be modified */
129         #ifdef TRILINOS         #ifdef TRILINOS

Legend:
Removed from v.3070  
changed lines
  Added in v.3071

  ViewVC Help
Powered by ViewVC 1.1.26