[petsc-users] create a matrix in C++ constructor
Matthew Knepley
knepley at gmail.com
Mon Dec 21 17:25:10 CST 2009
Then it is not MatCreate() causing your SEGV.
Matt
On Mon, Dec 21, 2009 at 5:11 PM, Umut Tabak <u.tabak at tudelft.nl> wrote:
> Matthew Knepley wrote:
>
> On Mon, Dec 21, 2009 at 5:01 PM, Umut Tabak <u.tabak at tudelft.nl <mailto:
>> u.tabak at tudelft.nl>> wrote:
>>
>> Dear all,
>>
>> I was trying to wrap around some Petsc code into a class, so that
>> there is a neat interface and implementation, I got into a problem
>> at the very beginning and did not understand the reason maybe some
>> of you could help me to understand this.
>>
>> I have a Matrix A in the private section of my simple class.
>>
>> And I would like to create this matrix inside the class ctor.
>> Whenever I call the MatCreate function I get a segmentation fault with
>>
>>
>> Without seeing the code, we cannot say anything, but I bet you misdeclared
>> A.
>>
>>
>>
> Dear Matthew,
>
> Here is my simple starter design,
> 8 class petscMatrix
> 9 {
> 10 public:
> 11 petscMatrix();
> 12 petscMatrix(PetscInt, PetscInt, char)
> throw(std::runtime_error);
> 13 Mat* assignSubMatrix();
> 14 int createMatrix();
> 15 private:
> 16 Mat A; // Operation matrix
> 17 PetscInt m,n; // the row and column count
> 18 // of the matrix
> 19 char matType;
> 20
> 21};
>
>
> And its implementation is:
>
> 15 petscMatrix::petscMatrix(PetscInt rowSz, PetscInt colSz, char t)
> throw(runtime_error)
> 16 {
> 17 try{
> 18 switch(t)
> 19 {
> 20 case('d'): // dense
> 21 matType = t;
> 22 m = rowSz;
> 23 n = colSz;
> 24 case('D'): // dense
> 25 matType = t;
> 26 m = rowSz;
> 27 n = colSz;
> 28 case('s'): //sparse
> 29 matType = t;
> 30 m = rowSz;
> 31 n = colSz;
> 32 MatCreate(MPI_COMM_SELF, &A);
> 33 MatSetSizes(A, m, n, 0, 0);
> 34 MatSetType(A,MATSEQAIJ);
> 35 case('S'): //sparse
> 36 matType = t;
> 37 m = rowSz;
> 38 n = colSz;
> 39 default:
> 40 throw runtime_error("Matrix type not recognized\nMatrix not
> initialized\nExiting...");
> 41 }
> 42 }
> 43 catch(runtime_error &e)
> 44 {
> 45 cout << e.what() << endl;
> 46 exit(1);
> 47 }
> 48 }
>
> Maybe I am too tired, most probably, there is sth easy that I am missing...
>
--
What most experimenters take for granted before they begin their experiments
is infinitely more interesting than any results to which their experiments
lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20091221/e26f440d/attachment.htm>
More information about the petsc-users
mailing list