[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