source: issm/trunk/src/c/Reducematrixfromgtofx/Reducematrixfromgton.cpp@ 3223

Last change on this file since 3223 was 3223, checked in by Eric.Larour, 15 years ago

Introduced petsc 3 in coexistence with petsc2.

File size: 1.7 KB
Line 
1/*!\file: Reducematrixfromgton
2 * \brief
3 */
4
5#ifdef HAVE_CONFIG_H
6 #include "config.h"
7#else
8#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9#endif
10
11#undef __FUNCT__
12#define __FUNCT__ "Reducematrixfromgton"
13
14#include "../toolkits/toolkits.h"
15
16
17void Reducematrixfromgton(Mat* pKnn,Mat Kgg,Mat Gmn,double* pv_m,int msize, double* pv_n,int nsize,int flag){
18
19
20 /*output: */
21 Mat Knn=NULL;
22
23 /*intermediary: */
24 Mat Kmm=NULL;
25 Mat Kmn=NULL;
26 Mat Knm=NULL;
27 Mat KnmGmn=NULL;
28 Mat KmmGmn=NULL;
29 Mat tGmn=NULL;
30 Mat tGmnKmn=NULL;
31 PetscScalar a=1;
32
33 if (msize){
34
35 /*Partition K_gg*/
36 MatPartition(&Kmm, Kgg, pv_m,msize,pv_m,msize);
37 MatPartition(&Kmn, Kgg, pv_m,msize,pv_n,nsize);
38 MatPartition(&Knm, Kgg, pv_n,nsize,pv_m,msize);
39 MatPartition(&Knn, Kgg, pv_n,nsize,pv_n,nsize);
40
41 /*Reduce K_gg to K_nn*/
42 //K_nn = K_nn + K_nm * G_mn;
43 MatMatMult(Knm,Gmn,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&KnmGmn);
44 MatAXPY(Knn,a,KnmGmn,DIFFERENT_NONZERO_PATTERN);
45
46 if (flag!=1){
47 //K_mn = K_mn + K_mm * G_mn;
48 MatMatMult(Kmm,Gmn,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&KmmGmn);
49 MatAXPY(Kmn,a,KmmGmn,DIFFERENT_NONZERO_PATTERN);
50
51 //K_nn = K_nn + G_mn' * K_mn;
52 #if _PETSC_VERSION_ == 2
53 MatTranspose(Gmn,&tGmn);
54 #else
55 MatTranspose(Gmn,MAT_INITIAL_MATRIX,&tGmn);
56 #endif
57 MatMatMult(tGmn,Kmn,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&tGmnKmn);
58 MatAXPY(Knn,a,tGmnKmn,DIFFERENT_NONZERO_PATTERN);
59 }
60 }
61 else{
62 /*msize=0 just return input*/
63 MatDuplicate(Kgg,MAT_COPY_VALUES,&Knn);
64 }
65
66 /*Free ressources:*/
67 MatFree(&Kmm);
68 MatFree(&Kmn);
69 MatFree(&Knm);
70 MatFree(&KnmGmn);
71 MatFree(&KmmGmn);
72 MatFree(&tGmn);
73 MatFree(&tGmnKmn);
74
75 /*Assign output pointers:*/
76 *pKnn=Knn;
77}
Note: See TracBrowser for help on using the repository browser.