/[escript]/trunk/esys2/finley/src/finleyC/System_add.c
ViewVC logotype

Annotation of /trunk/esys2/finley/src/finleyC/System_add.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 100 - (hide annotations)
Wed Dec 15 03:48:48 2004 UTC (15 years, 5 months ago) by jgs
File MIME type: text/plain
File size: 3017 byte(s)
*** empty log message ***

1 jgs 82 /* $Id$ */
2    
3     /**************************************************************/
4    
5     /* Finley: SystemMatrix and SystemVector */
6    
7 jgs 100 /* adds the matrix array[row_block_size,col_block_size,NN,NN] onto the matrix in. */
8 jgs 82 /* the rows/columns are given by */
9 jgs 100 /* ir+row_block_size*Nodes_row[Nodes[jr]] (ir=0:row_block_size; jr=0:NN_row). */
10 jgs 82 /* the routine has to be called from a parallel region */
11    
12 jgs 100 /* This routine assumes that in->row_block_size=in->col_block_size=1, i.e. */
13 jgs 82 /* array is fully packed. */
14 jgs 100 /* TODO: the case in->row_block_size!=1 */
15 jgs 82
16     /**************************************************************/
17    
18     /* Copyrights by ACcESS Australia 2003/04 */
19     /* Author: gross@access.edu.au */
20    
21     /**************************************************************/
22    
23     #include "Finley.h"
24     #include "System.h"
25    
26     /**************************************************************/
27    
28 jgs 100 void Finley_SystemMatrix_add(Finley_SystemMatrix* in,int NN_row,maybelong* Nodes_row, int row_block_size,
29     int NN_col,maybelong* Nodes_col,int col_block_size, double* array) {
30     int kr,jr,jc,kc,ir,ic;
31     maybelong irow,icol,k;
32     switch(in->type) {
33     case CSR:
34     for (kr=0;kr<NN_row;kr++) {
35     jr=Nodes_row[kr];
36     for (ir=0;ir<row_block_size;ir++) {
37     irow=ir+row_block_size*jr;
38     for (kc=0;kc<NN_col;kc++) {
39     jc=Nodes_col[kc];
40     for (ic=0;ic<col_block_size;ic++) {
41     icol=ic+col_block_size*jc+INDEX_OFFSET;
42     for(k=in->ptr[irow]-PTR_OFFSET;k<in->ptr[irow+1]-PTR_OFFSET;k++) {
43     if (in->index[k]==icol) {
44     #pragma omp atomic
45     in->val[k]+=array[INDEX4(ir,ic,kr,kc,row_block_size,col_block_size,NN_row)];
46 jgs 82 break;
47 jgs 100 }
48     }
49     }
50     }
51 jgs 82 }
52 jgs 100 }
53     break;
54     case CSC:
55     for (kr=0;kr<NN_row;kr++) {
56     jr=Nodes_row[kr];
57     for (ir=0;ir<row_block_size;ir++) {
58     irow=ir+row_block_size*jr;
59     for (kc=0;kc<NN_col;kc++) {
60     jc=Nodes_col[kc];
61     for (ic=0;ic<col_block_size;ic++) {
62     icol=ic+col_block_size*jc+INDEX_OFFSET;
63     for(k=in->ptr[icol]-PTR_OFFSET;k<in->ptr[icol+1]-PTR_OFFSET;k++) {
64     if (in->index[k]==irow) {
65     #pragma omp atomic
66     in->val[k]+=array[INDEX4(ir,ic,kr,kc,row_block_size,col_block_size,NN_row)];
67     break;
68     }
69     }
70     }
71     }
72     }
73     }
74     break;
75     default:
76     Finley_ErrorCode=TYPE_ERROR;
77     sprintf(Finley_ErrorMsg,"Unknown matrix type.");
78     } /* switch in->type */
79 jgs 82 }
80     /*
81     * $Log$
82 jgs 100 * Revision 1.3 2004/12/15 03:48:46 jgs
83 jgs 97 * *** empty log message ***
84 jgs 82 *
85 jgs 97 * Revision 1.1.1.1 2004/10/26 06:53:57 jgs
86     * initial import of project esys2
87     *
88 jgs 82 * Revision 1.1 2004/07/02 04:21:13 gross
89     * Finley C code has been included
90     *
91     *
92     */

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26