source: issm/trunk-jpl/src/c/toolkits/petsc/patches/VecTranspose.cpp@ 12431

Last change on this file since 12431 was 12431, checked in by Mathieu Morlighem, 13 years ago

changing xmalloc to xNew and xfree to xDelete

File size: 1.3 KB
Line 
1/*! \file VecTranspose.cpp
2 * \brief: transpose of a petsc vector
3 */
4
5#include "./petscpatches.h"
6#include "../../../shared/shared.h"
7
8int VecTranspose(Vec* ptvector,Vec vector){
9
10 int i;
11 int size;
12 int lower_row,upper_row,range;
13
14 int* idxm=NULL;
15 double* values=NULL;
16
17 int* tidxm=NULL;
18 double* tvalues=NULL;
19
20 /*output: */
21 Vec tvector=NULL;
22
23 /*Get size of input vector: */
24 VecGetSize(vector,&size);
25
26 /*Create new vector of same size: */
27 tvector=NewVec(size);
28
29 /*Extract values locally from input vector: */
30 VecGetOwnershipRange(vector,&lower_row,&upper_row);
31 upper_row--;
32 range=upper_row-lower_row+1;
33
34 if (range){
35 idxm=xNew<int>(range);
36 tidxm=xNew<int>(range);
37 for (i=0;i<range;i++){
38 *(idxm+i)=lower_row+i;
39 }
40 values=xNew<double>(range);
41 tvalues=xNew<double>(range);
42
43 VecGetValues(vector,range,idxm,values);
44
45 /*Transfer values into tidxm, and idxm into tvalues: */
46 for (i=0;i<range;i++){
47 tidxm[i]=(int)values[i];
48 tvalues[i]=(double)idxm[i];
49 }
50 VecSetValues(tvector,range,tidxm,tvalues,INSERT_VALUES);
51 }
52
53 /*Assemble: */
54 VecAssemblyBegin(tvector);
55 VecAssemblyEnd(tvector);
56
57 /*Free ressources: */
58 xDelete<int>(idxm);
59 xDelete<double>(values);
60 xDelete<int>(tidxm);
61 xDelete<double>(tvalues);
62
63 /*Assign output pointers: */
64 *ptvector=tvector;
65 return 1;
66}
Note: See TracBrowser for help on using the repository browser.