# Diff of /trunk/paso/src/Solver_SchurComplement.c

revision 700 by gross, Thu Apr 6 00:13:40 2006 UTC revision 1312 by ksteube, Mon Sep 24 06:18:44 2007 UTC
# Line 1  Line 1
1
2  /* \$Id\$ */  /* \$Id\$ */
3
4  /*  /*******************************************************
5  ********************************************************************************   *
6  *               Copyright   2006 by ACcESS MNRF                                *   *           Copyright 2003-2007 by ACceSS MNRF
7  *                                                                              *   *       Copyright 2007 by University of Queensland
8  *                 http://www.access.edu.au                                     *   *
9  *           Primary Business: Queensland, Australia                            *   *                http://esscc.uq.edu.au
13  */   *
14     *******************************************************/
15
16  /**************************************************************/  /**************************************************************/
17
# Line 25  Line 27
27  /**************************************************************/  /**************************************************************/
28
29  #include "Paso.h"  #include "Paso.h"
30  #include "SystemMatrix.h"  #include "SparseMatrix.h"
31  #include "Solver.h"  #include "Solver.h"
32
33  /**************************************************************/  /**************************************************************/
34
35
36
37  void Paso_Solver_updateIncompleteSchurComplement(Paso_SystemMatrix* A_CC,Paso_SystemMatrix *A_CF,double* invA_FF,index_t* A_FF_pivot,Paso_SystemMatrix *A_FC) {  void Paso_Solver_updateIncompleteSchurComplement(Paso_SparseMatrix* A_CC,Paso_SparseMatrix *A_CF,double* invA_FF,index_t* A_FF_pivot,Paso_SparseMatrix *A_FC) {
38
39    index_t iPtr_CC,*index_CC,col_CF,col_FC, *where_p,iPtr_CC_2,i,iPtr_CF,iPtr_FC;    index_t iPtr_CC,*index_CC,col_CF,col_FC, *where_p,iPtr_CC_2,i,iPtr_CF,iPtr_FC;
40    dim_t index_CC_len;    dim_t index_CC_len;
41    bool_t set_A;    bool_t set_A;
42    dim_t n_rows=A_CC->num_rows;    dim_t n_loc_rows=A_CC->numRows;
43    dim_t n_block=A_CC->row_block_size;    dim_t n_block=A_CC->row_block_size;
44    register double A_CF_11,A_CF_21,A_CF_31,A_CF_12,A_CF_22,A_CF_32,A_CF_13,A_CF_23,A_CF_33,    register double A_CF_11,A_CF_21,A_CF_31,A_CF_12,A_CF_22,A_CF_32,A_CF_13,A_CF_23,A_CF_33,
45           invA_FF_11,invA_FF_21,invA_FF_31,invA_FF_12,invA_FF_22,invA_FF_32,invA_FF_13,invA_FF_23,invA_FF_33,           invA_FF_11,invA_FF_21,invA_FF_31,invA_FF_12,invA_FF_22,invA_FF_32,invA_FF_13,invA_FF_23,invA_FF_33,
46           A11,A21,A31,A12,A22,A32,A13,A23,A33,A_FC_11,A_FC_21,A_FC_31,A_FC_12,A_FC_22,A_FC_32,A_FC_13,A_FC_23,A_FC_33;           A11,A21,A31,A12,A22,A32,A13,A23,A33,A_FC_11,A_FC_21,A_FC_31,A_FC_12,A_FC_22,A_FC_32,A_FC_13,A_FC_23,A_FC_33;
47    if (n_block==1) {    if (n_block==1) {
48       #pragma omp parallel for private(i,iPtr_CC,index_CC,index_CC_len,col_CF,set_A,iPtr_CF,iPtr_FC,col_FC,where_p,A11) schedule(static)       #pragma omp parallel for private(i,iPtr_CC,index_CC,index_CC_len,col_CF,set_A,iPtr_CF,iPtr_FC,col_FC,where_p,A11) schedule(static)
49       for (i = 0; i < n_rows;++i) {       for (i = 0; i < n_loc_rows;++i) {
50          iPtr_CC=A_CC->pattern->ptr[i];          iPtr_CC=A_CC->pattern->ptr[i];
51          index_CC=&(A_CC->pattern->index[iPtr_CC]);          index_CC=&(A_CC->pattern->index[iPtr_CC]);
52          index_CC_len=(size_t)(A_CC->pattern->ptr[i+1]-A_CC->pattern->ptr[i]);          index_CC_len=(size_t)(A_CC->pattern->ptr[i+1]-A_CC->pattern->ptr[i]);
# Line 67  void Paso_Solver_updateIncompleteSchurCo Line 70  void Paso_Solver_updateIncompleteSchurCo
70        } /* end of irow loop */        } /* end of irow loop */
71     } else if (n_block==2) {     } else if (n_block==2) {
72        #pragma omp parallel for private(i,iPtr_CC,index_CC,index_CC_len,iPtr_CF,col_CF,iPtr_FC,col_FC,where_p,iPtr_CC_2,set_A,A_CF_11,A_CF_21,A_CF_12,A_CF_22,invA_FF_11,invA_FF_21,invA_FF_12,invA_FF_22,A11,A21,A12,A22,A_FC_11,A_FC_21,A_FC_12,A_FC_22) schedule(static)        #pragma omp parallel for private(i,iPtr_CC,index_CC,index_CC_len,iPtr_CF,col_CF,iPtr_FC,col_FC,where_p,iPtr_CC_2,set_A,A_CF_11,A_CF_21,A_CF_12,A_CF_22,invA_FF_11,invA_FF_21,invA_FF_12,invA_FF_22,A11,A21,A12,A22,A_FC_11,A_FC_21,A_FC_12,A_FC_22) schedule(static)
73       for (i = 0; i < n_rows;++i) {       for (i = 0; i < n_loc_rows;++i) {
74          iPtr_CC=A_CC->pattern->ptr[i];          iPtr_CC=A_CC->pattern->ptr[i];
75          index_CC=&(A_CC->pattern->index[iPtr_CC]);          index_CC=&(A_CC->pattern->index[iPtr_CC]);
76          index_CC_len=(size_t)(A_CC->pattern->ptr[i+1]-A_CC->pattern->ptr[i]);          index_CC_len=(size_t)(A_CC->pattern->ptr[i+1]-A_CC->pattern->ptr[i]);
# Line 117  void Paso_Solver_updateIncompleteSchurCo Line 120  void Paso_Solver_updateIncompleteSchurCo
120        } /* end of irow loop */        } /* end of irow loop */
121     } else if (n_block==3) {     } else if (n_block==3) {
122        #pragma omp parallel for private(i,iPtr_CC,index_CC,index_CC_len,iPtr_CF,col_CF,iPtr_FC,col_FC,where_p,iPtr_CC_2,set_A,A_CF_11,A_CF_21,A_CF_31,A_CF_12,A_CF_22,A_CF_32,A_CF_13,A_CF_23,A_CF_33,invA_FF_11,invA_FF_21,invA_FF_31,invA_FF_12,invA_FF_22,invA_FF_32,invA_FF_13,invA_FF_23,invA_FF_33,A11,A21,A31,A12,A22,A32,A13,A23,A33,A_FC_11,A_FC_21,A_FC_31,A_FC_12,A_FC_22,A_FC_32,A_FC_13,A_FC_23,A_FC_33) schedule(static)        #pragma omp parallel for private(i,iPtr_CC,index_CC,index_CC_len,iPtr_CF,col_CF,iPtr_FC,col_FC,where_p,iPtr_CC_2,set_A,A_CF_11,A_CF_21,A_CF_31,A_CF_12,A_CF_22,A_CF_32,A_CF_13,A_CF_23,A_CF_33,invA_FF_11,invA_FF_21,invA_FF_31,invA_FF_12,invA_FF_22,invA_FF_32,invA_FF_13,invA_FF_23,invA_FF_33,A11,A21,A31,A12,A22,A32,A13,A23,A33,A_FC_11,A_FC_21,A_FC_31,A_FC_12,A_FC_22,A_FC_32,A_FC_13,A_FC_23,A_FC_33) schedule(static)
123       for (i = 0; i < n_rows;++i) {       for (i = 0; i < n_loc_rows;++i) {
124          iPtr_CC=A_CC->pattern->ptr[i];          iPtr_CC=A_CC->pattern->ptr[i];
125          index_CC=&(A_CC->pattern->index[iPtr_CC]);          index_CC=&(A_CC->pattern->index[iPtr_CC]);
126          index_CC_len=(size_t)(A_CC->pattern->ptr[i+1]-A_CC->pattern->ptr[i]);          index_CC_len=(size_t)(A_CC->pattern->ptr[i+1]-A_CC->pattern->ptr[i]);

Legend:
 Removed from v.700 changed lines Added in v.1312