/*@C MatSetType - Builds matrix object for a particular matrix type Collective on Mat Input Parameters: + mat - the matrix object - matype - matrix type Options Database Key: . -mat_type <method> - Sets the type; use -help for a list of available methods (for instance, seqaij) Notes: See "${PETSC_DIR}/include/petscmat.h" for available methods Level: intermediate .keywords: Mat, MatType, set, method .seealso: PCSetType(), VecSetType(), MatCreate(), MatType, Mat @*/ PetscErrorCode PETSCMAT_DLLEXPORT MatSetType(Mat mat, const MatType matype) { PetscErrorCode ierr,(*r)(Mat); PetscTruth sametype; PetscFunctionBegin; PetscValidHeaderSpecific(mat,MAT_COOKIE,1); ierr = PetscTypeCompare((PetscObject)mat,matype,&sametype);CHKERRQ(ierr); if (sametype) PetscFunctionReturn(0); ierr = PetscFListFind(MatList,((PetscObject)mat)->comm,matype,(void(**)(void))&r);CHKERRQ(ierr); if (!r) SETERRQ1(PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown Mat type given: %s",matype); /* free the old data structure if it existed */ if (mat->ops->destroy) { ierr = MatPreallocated(mat);CHKERRQ(ierr); ierr = (*mat->ops->destroy)(mat);CHKERRQ(ierr); mat->ops->destroy = PETSC_NULL; mat->preallocated = PETSC_FALSE; } /* create the new data structure */ if (mat->rmap->n < 0 && mat->rmap->N < 0 && mat->cmap->n < 0 && mat->cmap->N < 0) { mat->ops->create = r; } else { ierr = (*r)(mat);CHKERRQ(ierr); } ierr = PetscPublishAll(mat);CHKERRQ(ierr); PetscFunctionReturn(0); }
EXTERN_C_BEGIN #undef __FUNCT__ #define __FUNCT__ "PetscRandomCreate_Sprng" PetscErrorCode PETSC_DLLEXPORT PetscRandomCreate_Sprng(PetscRandom r) { PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));CHKERRQ(ierr); ierr = PetscObjectChangeTypeName((PetscObject)r,PETSCSPRNG);CHKERRQ(ierr); ierr = PetscPublishAll(r);CHKERRQ(ierr); PetscFunctionReturn(0); }
EXTERN_C_BEGIN #undef __FUNCT__ #define __FUNCT__ "PetscRandomCreate_Rand48" PetscErrorCode PETSC_DLLEXPORT PetscRandomCreate_Rand48(PetscRandom r) { PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));CHKERRQ(ierr); /* r->bops->publish = PetscRandomPublish; */ /* r->petscnative = PETSC_TRUE; */ ierr = PetscObjectChangeTypeName((PetscObject)r,PETSCRAND48);CHKERRQ(ierr); ierr = PetscPublishAll(r);CHKERRQ(ierr); PetscFunctionReturn(0); }