Changeset 12859


Ignore:
Timestamp:
08/01/12 16:39:30 (13 years ago)
Author:
Eric.Larour
Message:

BUG: fixed segfault in PetscMat and PetscVec constructors.

Location:
issm/trunk-jpl/src/c/toolkits/petsc/objects
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscMat.cpp

    r12857 r12859  
    3737PetscMat::PetscMat(int M,int N, IssmDouble sparsity){
    3838
    39         this->matrix=NULL;
    40         if(M*N) this->matrix=NewMat(M,N,sparsity);
     39        this->matrix=NewMat(M,N,sparsity);
    4140}
    4241/*}}}*/
     
    4443PetscMat::PetscMat(IssmDouble* serial_mat,int M,int N,IssmDouble sparsity){
    4544
    46         this->matrix=NULL;
     45        int     i;
     46        int* idxm=NULL;
     47        int* idxn=NULL;
    4748       
    48         if(M*N){
    49                 int     i;
    50                 int* idxm=xNew<int>(M);
    51                 int* idxn=xNew<int>(N);
    52        
    53                 for(i=0;i<M;i++)idxm[i]=i;
    54                 for(i=0;i<N;i++)idxn[i]=i;
     49        if(M)idxm=xNew<int>(M);
     50        if(N)idxn=xNew<int>(N);
     51
     52        for(i=0;i<M;i++)idxm[i]=i;
     53        for(i=0;i<N;i++)idxn[i]=i;
    5554
    5655
    57                 this->matrix=NewMat(M,N,sparsity);
    58                 MatSetValues(this->matrix,M,idxm,N,idxn,serial_mat,INSERT_VALUES);
    59                 MatAssemblyBegin(this->matrix,MAT_FINAL_ASSEMBLY);
    60                 MatAssemblyEnd(this->matrix,MAT_FINAL_ASSEMBLY);
     56        this->matrix=NewMat(M,N,sparsity);
     57        MatSetValues(this->matrix,M,idxm,N,idxn,serial_mat,INSERT_VALUES);
     58        MatAssemblyBegin(this->matrix,MAT_FINAL_ASSEMBLY);
     59        MatAssemblyEnd(this->matrix,MAT_FINAL_ASSEMBLY);
    6160
    62                 xDelete<int>(idxm);
    63                 xDelete<int>(idxn);
    64         }
     61        xDelete<int>(idxm);
     62        xDelete<int>(idxn);
    6563
    6664}
     
    6967PetscMat::PetscMat(int M,int N, int connectivity,int numberofdofspernode){
    7068       
    71         this->matrix=NULL;
    72         if(M*N) this->matrix=NewMat(M,N,connectivity,numberofdofspernode);
     69        this->matrix=NewMat(M,N,connectivity,numberofdofspernode);
    7370
    7471}
  • issm/trunk-jpl/src/c/toolkits/petsc/objects/PetscVec.cpp

    r12857 r12859  
    3737PetscVec::PetscVec(IssmDouble* serial_vec,int M){
    3838
    39         this->vector=NULL;
    40         if(M){
    41                 int* idxm=xNew<int>(M);
    42                 for(int i=0;i<M;i++) idxm[i]=i;
    43 
    44                 this->vector=NewVec(M);
    45                 VecSetValues(this->vector,M,idxm,serial_vec,INSERT_VALUES);
    46                 VecAssemblyBegin(this->vector);
    47                 VecAssemblyEnd(this->vector);
    48 
    49                 xDelete<int>(idxm);
    50         }
     39        int* idxm=NULL;
     40        if(M)idxm=xNew<int>(M);
     41        for(int i=0;i<M;i++) idxm[i]=i;
     42
     43        this->vector=NewVec(M);
     44        VecSetValues(this->vector,M,idxm,serial_vec,INSERT_VALUES);
     45        VecAssemblyBegin(this->vector);
     46        VecAssemblyEnd(this->vector);
     47
     48        xDelete<int>(idxm);
    5149}
    5250/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.