本文整理汇总了C++中MatZeroEntries函数的典型用法代码示例。如果您正苦于以下问题:C++ MatZeroEntries函数的具体用法?C++ MatZeroEntries怎么用?C++ MatZeroEntries使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MatZeroEntries函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: DMCreateMatrix_Shell
static PetscErrorCode DMCreateMatrix_Shell(DM dm,Mat *J)
{
PetscErrorCode ierr;
DM_Shell *shell = (DM_Shell*)dm->data;
Mat A;
PetscFunctionBegin;
PetscValidHeaderSpecific(dm,DM_CLASSID,1);
PetscValidPointer(J,3);
if (!shell->A) {
if (shell->Xglobal) {
PetscInt m,M;
ierr = PetscInfo(dm,"Naively creating matrix using global vector distribution without preallocation\n");
CHKERRQ(ierr);
ierr = VecGetSize(shell->Xglobal,&M);
CHKERRQ(ierr);
ierr = VecGetLocalSize(shell->Xglobal,&m);
CHKERRQ(ierr);
ierr = MatCreate(PetscObjectComm((PetscObject)dm),&shell->A);
CHKERRQ(ierr);
ierr = MatSetSizes(shell->A,m,m,M,M);
CHKERRQ(ierr);
ierr = MatSetType(shell->A,dm->mattype);
CHKERRQ(ierr);
ierr = MatSetUp(shell->A);
CHKERRQ(ierr);
} else SETERRQ(PetscObjectComm((PetscObject)dm),PETSC_ERR_USER,"Must call DMShellSetMatrix(), DMShellSetCreateMatrix(), or provide a vector");
}
A = shell->A;
/* the check below is tacky and incomplete */
if (dm->mattype) {
PetscBool flg,aij,seqaij,mpiaij;
ierr = PetscObjectTypeCompare((PetscObject)A,dm->mattype,&flg);
CHKERRQ(ierr);
ierr = PetscObjectTypeCompare((PetscObject)A,MATSEQAIJ,&seqaij);
CHKERRQ(ierr);
ierr = PetscObjectTypeCompare((PetscObject)A,MATMPIAIJ,&mpiaij);
CHKERRQ(ierr);
ierr = PetscStrcmp(dm->mattype,MATAIJ,&aij);
CHKERRQ(ierr);
if (!flg) {
if (!(aij && (seqaij || mpiaij))) SETERRQ2(PetscObjectComm((PetscObject)dm),PETSC_ERR_ARG_NOTSAMETYPE,"Requested matrix of type %s, but only %s available",dm->mattype,((PetscObject)A)->type_name);
}
}
if (((PetscObject)A)->refct < 2) { /* We have an exclusive reference so we can give it out */
ierr = PetscObjectReference((PetscObject)A);
CHKERRQ(ierr);
ierr = MatZeroEntries(A);
CHKERRQ(ierr);
*J = A;
} else { /* Need to create a copy, could use MAT_SHARE_NONZERO_PATTERN in most cases */
ierr = MatDuplicate(A,MAT_DO_NOT_COPY_VALUES,J);
CHKERRQ(ierr);
ierr = MatZeroEntries(*J);
CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
开发者ID:petsc,项目名称:petsc,代码行数:58,代码来源:dmshell.c
示例2: VecSet
void PETScLinearSolver::Initialize( )
{
VecSet(b, 0.0);
VecSet(x, 0.0);
MatZeroEntries(A);
}
开发者ID:drjod,项目名称:ogs_kb1,代码行数:7,代码来源:PETScLinearSolver.cpp
示例3: MatZeroEntries
void PetscSparseStorage::atPutZeros( int row, int col,
int rowExtent, int colExtent )
{
int m, n;
this->getSize( m, n );
if( 0 == row && 0 == col &&
m == rowExtent && n == colExtent ) {
int ierr;
ierr = MatZeroEntries( M ); assert( ierr == 0);
} else {
double * zeros = new double[colExtent];
double * A = new double[colExtent];
int * jcol = new int [colExtent];
int i, nnz, info;
for ( i = 0; i < colExtent; i++ ) {
zeros[i] = 0.0;
}
for( i = row; i < row + rowExtent; i++ ) {
// Both calls will always succeed.
this->fromGetSpRow( i, col, A, colExtent, jcol, nnz,
colExtent, info );
this->atPutSpRow( i, zeros, nnz, jcol, info );
}
delete [] jcol;
delete [] A;
delete [] zeros;
}
}
开发者ID:aig-lchion,项目名称:OOQP,代码行数:31,代码来源:PetscSparseStorage.C
示例4: RHSJacobianP
static PetscErrorCode RHSJacobianP(TS ts,PetscReal t,Vec X,Mat A,void *ctx0)
{
PetscErrorCode ierr;
PetscScalar a;
PetscInt row,col;
Userctx *ctx=(Userctx*)ctx0;
PetscInt idx=0;
Vec Xgen,Xnet;
PetscScalar *xgen,*xnet;
PetscScalar Eqp,Edp;
PetscScalar Id,Iq;
PetscFunctionBeginUser;
/*if (ctx->jacp_flg) { delete me */
ierr = MatZeroEntries(A);CHKERRQ(ierr);
//recompute since this changes
M[0] = 2*H[0]/w_s; M[1] = 2*H[1]/w_s; M[2] = 2*H[2]/w_s;
D[0] = 0.1*M[0]; D[1] = 0.1*M[1]; D[2] = 0.1*M[2];
ierr = DMCompositeGetLocalVectors(ctx->dmpgrid,&Xgen,&Xnet);CHKERRQ(ierr);
ierr = DMCompositeScatter(ctx->dmpgrid,X,Xgen,Xnet);CHKERRQ(ierr);
/* Generator subsystem initialization */
ierr = VecGetArray(Xgen,&xgen);CHKERRQ(ierr);
ierr = VecGetArray(Xnet,&xnet);CHKERRQ(ierr);
for (col=0;col<ngen;col++) {
Eqp = xgen[idx];
Edp = xgen[idx+1];
Id = xgen[idx+4];
Iq = xgen[idx+5];
TM[col] = PG[col];
a = -1.0 *(TM[col] - Edp*Id - Eqp*Iq - (Xqp[col]-Xdp[col])*Id*Iq)/M[col]/H[col];
row = 9*col+3; // E is in the 4th equation hence +3
idx = idx + 9; //9 equations per generator, hence move to next gen
ierr = MatSetValues(A,1,&row,1,&col,&a,INSERT_VALUES);CHKERRQ(ierr);
}
/* ctx->jacp_flg = PETSC_FALSE; delete me */
ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = VecRestoreArray(Xgen,&xgen);CHKERRQ(ierr);
ierr = VecRestoreArray(Xnet,&xnet);CHKERRQ(ierr);
ierr = DMCompositeGather(ctx->dmpgrid,X,INSERT_VALUES,Xgen,Xnet);CHKERRQ(ierr);
ierr = DMCompositeRestoreLocalVectors(ctx->dmpgrid,&Xgen,&Xnet);CHKERRQ(ierr);
//MatView(A,PETSC_VIEWER_STDOUT_SELF);
/* }delete me */
PetscFunctionReturn(0);
}
开发者ID:Argonne-National-Laboratory,项目名称:PowerSystemsEstimation,代码行数:60,代码来源:ex9businertiaest_adj.c
示例5: TaoSetHessian
/*
FormHessian - Evaluates Hessian matrix.
Input Parameters:
. tao - the Tao context
. x - input vector
. ptr - optional user-defined context, as set by TaoSetHessian()
Output Parameters:
. H - Hessian matrix
Note: Providing the Hessian may not be necessary. Only some solvers
require this matrix.
*/
PetscErrorCode FormHessian(Tao tao,Vec X,Mat H, Mat Hpre, void *ptr)
{
AppCtx *user = (AppCtx*)ptr;
PetscErrorCode ierr;
PetscInt i, ind[2];
PetscReal alpha=user->alpha;
PetscReal v[2][2],*x;
PetscBool assembled;
/* Zero existing matrix entries */
ierr = MatAssembled(H,&assembled);CHKERRQ(ierr);
if (assembled){ierr = MatZeroEntries(H); CHKERRQ(ierr);}
/* Get a pointer to vector data */
ierr = VecGetArray(X,&x);CHKERRQ(ierr);
/* Compute H(X) entries */
for (i=0; i<user->n/2; i++){
v[1][1] = 2*alpha;
v[0][0] = -4*alpha*(x[2*i+1]-3*x[2*i]*x[2*i]) + 2;
v[1][0] = v[0][1] = -4.0*alpha*x[2*i];
ind[0]=2*i; ind[1]=2*i+1;
ierr = MatSetValues(H,2,ind,2,ind,v[0],INSERT_VALUES);CHKERRQ(ierr);
}
ierr = VecRestoreArray(X,&x);CHKERRQ(ierr);
/* Assemble matrix */
ierr = MatAssemblyBegin(H,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(H,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = PetscLogFlops(9.0*user->n/2.0);CHKERRQ(ierr);
return 0;
}
开发者ID:masa-ito,项目名称:PETScToPoisson,代码行数:46,代码来源:rosenbrock1.c
示例6: SFieldSolveFor
double SFieldSolveFor(SField sfv, double *Y, unsigned int yCount) {
mySField sf = static_cast<mySField>(sfv);
assert(yCount <= sf->maxN);
assert(Y);
assert(sf->running);
sf->Y = Y;
sf->curN = yCount;
// -------------- SOLVE
PetscErrorCode ierr;
PetscLogDouble tic,toc;
PetscTime(&tic);
int pt[sf->d];
ierr = MatZeroEntries(sf->J); CHKERRQ(ierr);
JacobianOnD(sf->J, sf->F, 0, pt, sf);
ierr = MatAssemblyBegin(sf->J,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
ierr = MatAssemblyEnd(sf->J,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
PetscTime(&toc);
sf->timeAssembly += toc-tic;
PetscTime(&tic);
ierr = VecZeroEntries(sf->U); CHKERRQ(ierr);
ierr = KSPSetOperators(sf->ksp, sf->J, sf->J); CHKERRQ(ierr);
ierr = KSPSetUp(sf->ksp); CHKERRQ(ierr);
ierr = KSPSolve(sf->ksp,sf->F,sf->U); CHKERRQ(ierr);
PetscTime(&toc);
sf->timeSolver += toc-tic;
return Integrate(sf->U,pt,0,sf);
}
开发者ID:StochasticNumerics,项目名称:mimclib,代码行数:31,代码来源:matern.cpp
示例7: MatFDColoringCreate
/*@
MatFDColoringApply - Given a matrix for which a MatFDColoring context
has been created, computes the Jacobian for a function via finite differences.
Collective on MatFDColoring
Input Parameters:
+ mat - location to store Jacobian
. coloring - coloring context created with MatFDColoringCreate()
. x1 - location at which Jacobian is to be computed
- sctx - context required by function, if this is being used with the SNES solver then it is SNES object, otherwise it is null
Options Database Keys:
+ -mat_fd_type - "wp" or "ds" (see MATMFFD_WP or MATMFFD_DS)
. -mat_fd_coloring_view - Activates basic viewing or coloring
. -mat_fd_coloring_view draw - Activates drawing of coloring
- -mat_fd_coloring_view ::ascii_info - Activates viewing of coloring info
Level: intermediate
.seealso: MatFDColoringCreate(), MatFDColoringDestroy(), MatFDColoringView(), MatFDColoringSetFunction()
.keywords: coloring, Jacobian, finite differences
@*/
PetscErrorCode MatFDColoringApply(Mat J,MatFDColoring coloring,Vec x1,void *sctx)
{
PetscErrorCode ierr;
PetscBool flg = PETSC_FALSE;
PetscFunctionBegin;
PetscValidHeaderSpecific(J,MAT_CLASSID,1);
PetscValidHeaderSpecific(coloring,MAT_FDCOLORING_CLASSID,2);
PetscValidHeaderSpecific(x1,VEC_CLASSID,3);
if (!coloring->f) SETERRQ(PetscObjectComm((PetscObject)J),PETSC_ERR_ARG_WRONGSTATE,"Must call MatFDColoringSetFunction()");
if (!J->ops->fdcoloringapply) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"Not supported for this matrix type %s",((PetscObject)J)->type_name);
if (!coloring->setupcalled) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONGSTATE,"Must call MatFDColoringSetUp()");
ierr = MatSetUnfactored(J);CHKERRQ(ierr);
ierr = PetscOptionsGetBool(NULL,"-mat_fd_coloring_dont_rezero",&flg,NULL);CHKERRQ(ierr);
if (flg) {
ierr = PetscInfo(coloring,"Not calling MatZeroEntries()\n");CHKERRQ(ierr);
} else {
PetscBool assembled;
ierr = MatAssembled(J,&assembled);CHKERRQ(ierr);
if (assembled) {
ierr = MatZeroEntries(J);CHKERRQ(ierr);
}
}
ierr = PetscLogEventBegin(MAT_FDColoringApply,coloring,J,x1,0);CHKERRQ(ierr);
ierr = (*J->ops->fdcoloringapply)(J,coloring,x1,sctx);CHKERRQ(ierr);
ierr = PetscLogEventEnd(MAT_FDColoringApply,coloring,J,x1,0);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:pombredanne,项目名称:petsc,代码行数:54,代码来源:fdmatrix.c
示例8: _RHS_time_dep_ham_p
PetscErrorCode _RHS_time_dep_ham_p(TS ts,PetscReal t,Vec X,Mat AA,Mat BB,void *ctx){
double time_dep_val;
PetscScalar time_dep_scalar;
int i,j;
operator op;
MatZeroEntries(AA);
MatCopy(full_A,AA,SAME_NONZERO_PATTERN);
for (i=0;i<_num_time_dep;i++){
time_dep_val = _time_dep_list[i].time_dep_func(t);
_add_ops_to_mat_ham(time_dep_val,AA,_time_dep_list[i].num_ops,_time_dep_list[i].ops);
}
for (i=0;i<_num_time_dep_lin;i++){
time_dep_val = _time_dep_list_lin[i].time_dep_func(t);
_add_ops_to_mat_lin(time_dep_val,AA,_time_dep_list_lin[i].num_ops,_time_dep_list_lin[i].ops);
}
MatAssemblyBegin(AA,MAT_FINAL_ASSEMBLY);
MatAssemblyEnd(AA,MAT_FINAL_ASSEMBLY);
if(AA!=BB) {
MatAssemblyBegin(AA,MAT_FINAL_ASSEMBLY);
MatAssemblyEnd(AA,MAT_FINAL_ASSEMBLY);
}
PetscFunctionReturn(0);
}
开发者ID:0tt3r,项目名称:QuaC,代码行数:30,代码来源:solver.c
示例9: TaoSetHessian
/*
FormHessian - Evaluates Hessian matrix.
Input Parameters:
. tao - the Tao context
. x - input vector
. ptr - optional user-defined context, as set by TaoSetHessian()
Output Parameters:
. H - Hessian matrix
Note: Providing the Hessian may not be necessary. Only some solvers
require this matrix.
*/
PetscErrorCode FormHessian(Tao tao,Vec X,Mat H, Mat Hpre, void *ptr)
{
AppCtx *user = (AppCtx*)ptr;
PetscErrorCode ierr;
PetscInt i, ind[2];
PetscReal alpha=user->alpha;
PetscReal v[2][2];
const PetscScalar *x;
PetscBool assembled;
PetscFunctionBeginUser;
/* Zero existing matrix entries */
ierr = MatAssembled(H,&assembled);CHKERRQ(ierr);
if (assembled){ierr = MatZeroEntries(H); CHKERRQ(ierr);}
/* Get a pointer to vector data */
ierr = VecGetArrayRead(X,&x);CHKERRQ(ierr);
/* Compute H(X) entries */
if (user->chained) {
ierr = MatZeroEntries(H);CHKERRQ(ierr);
for (i=0; i<user->n-1; i++) {
PetscScalar t1 = x[i+1] - x[i]*x[i];
v[0][0] = 2 + 2*alpha*(t1*(-2) - 2*x[i]);
v[0][1] = 2*alpha*(-2*x[i]);
v[1][0] = 2*alpha*(-2*x[i]);
v[1][1] = 2*alpha*t1;
ind[0] = i; ind[1] = i+1;
ierr = MatSetValues(H,2,ind,2,ind,v[0],ADD_VALUES);CHKERRQ(ierr);
}
} else {
for (i=0; i<user->n/2; i++){
v[1][1] = 2*alpha;
v[0][0] = -4*alpha*(x[2*i+1]-3*x[2*i]*x[2*i]) + 2;
v[1][0] = v[0][1] = -4.0*alpha*x[2*i];
ind[0]=2*i; ind[1]=2*i+1;
ierr = MatSetValues(H,2,ind,2,ind,v[0],INSERT_VALUES);CHKERRQ(ierr);
}
}
ierr = VecRestoreArrayRead(X,&x);CHKERRQ(ierr);
/* Assemble matrix */
ierr = MatAssemblyBegin(H,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(H,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = PetscLogFlops(9.0*user->n/2.0);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:61,代码来源:rosenbrock2.c
示例10: MatZeroEntries_IS
PetscErrorCode MatZeroEntries_IS(Mat A)
{
Mat_IS *a = (Mat_IS*)A->data;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = MatZeroEntries(a->A);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:masa-ito,项目名称:PETScToPoisson,代码行数:9,代码来源:matis.c
示例11: DRDPJacobianTranspose
static PetscErrorCode DRDPJacobianTranspose(TS ts,PetscReal t,Vec U,Mat DRDP,AppCtx *ctx)
{
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = MatZeroEntries(DRDP);CHKERRQ(ierr);
ierr = MatAssemblyBegin(DRDP,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(DRDP,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:petsc,项目名称:petsc,代码行数:10,代码来源:ex9adj.c
示例12: FormRHSJacobian
static PetscErrorCode FormRHSJacobian(TS ts,PetscReal t,Vec X,Mat Amat,Mat Pmat,void *ptr)
{
User user = (User)ptr;
PetscErrorCode ierr;
const PetscScalar **x;
PetscInt M = user->Nspec+1,i,j,xs,xm;;
DM dm;
PetscFunctionBeginUser;
if (user->reactions) {
ierr = TSGetDM(ts,&dm);CHKERRQ(ierr);
ierr = MatZeroEntries(Pmat);CHKERRQ(ierr);
ierr = MatSetOption(Pmat,MAT_ROW_ORIENTED,PETSC_FALSE);CHKERRQ(ierr);
ierr = MatSetOption(Pmat,MAT_IGNORE_ZERO_ENTRIES,PETSC_TRUE);CHKERRQ(ierr);
ierr = DMDAVecGetArrayDOFRead(dm,X,&x);CHKERRQ(ierr);
ierr = DMDAGetCorners(dm,&xs,NULL,NULL,&xm,NULL,NULL);CHKERRQ(ierr);
for (i=xs; i<xs+xm; i++) {
ierr = PetscMemcpy(user->tchemwork,x[i],(user->Nspec+1)*sizeof(x[xs][0]));CHKERRQ(ierr);
user->tchemwork[0] *= user->Tini; /* Dimensionalize temperature (first row) because that is what Tchem wants */
ierr = TC_getJacTYN(user->tchemwork,user->Nspec,user->Jdense,1);CHKERRQ(ierr);
for (j=0; j<M; j++) user->Jdense[j + 0*M] /= user->Tini; /* Non-dimensionalize first column */
for (j=0; j<M; j++) user->Jdense[0 + j*M] /= user->Tini; /* Non-dimensionalize first row */
for (j=0; j<M; j++) user->rows[j] = i*M+j;
ierr = MatSetValues(Pmat,M,user->rows,M,user->rows,user->Jdense,INSERT_VALUES);CHKERRQ(ierr);
}
ierr = DMDAVecRestoreArrayDOFRead(dm,X,&x);CHKERRQ(ierr);
ierr = MatAssemblyBegin(Pmat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(Pmat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
} else {
ierr = MatZeroEntries(Pmat);CHKERRQ(ierr);
}
if (user->diffusion) {
ierr = FormDiffusionJacobian(ts,t,X,Amat,Pmat,ptr);CHKERRQ(ierr);
}
if (Amat != Pmat) {
ierr = MatAssemblyBegin(Amat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(Amat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
开发者ID:tom-klotz,项目名称:petsc,代码行数:42,代码来源:extchemfield.c
示例13: context
/*
FormJacobian1 - Evaluates Jacobian matrix.
Input Parameters:
. snes - the SNES context
. x - input vector
. dummy - optional user-defined context (not used here)
Output Parameters:
. jac - Jacobian matrix
. B - optionally different preconditioning matrix
. flag - flag indicating matrix structure
*/
PetscErrorCode FormJacobian1(SNES snes,Vec x,Mat *jac,Mat *B,MatStructure *flag,void *ictx)
{
PetscScalar *xx;
PetscErrorCode ierr;
PetscInt i;
Ctx *ctx = (Ctx*)ictx;
ierr = MatZeroEntries(*B);CHKERRQ(ierr);
/*
Get pointer to vector data
*/
ierr = VecGetArray(x,&xx);CHKERRQ(ierr);
/*
Compute Jacobian entries and insert into matrix.
- Since this is such a small problem, we set all entries for
the matrix at once.
*/
ierr = MatSetValue(*B,0,0, 2.0 + 1200.0*xx[0]*xx[0] - 400.0*xx[1],ADD_VALUES);CHKERRQ(ierr);
ierr = MatSetValue(*B,0,1,-400.0*xx[0],ADD_VALUES);CHKERRQ(ierr);
for (i=1; i<ctx->p+1; i++) {
ierr = MatSetValue(*B,i,i-1, -400.0*xx[i-1],ADD_VALUES);CHKERRQ(ierr);
ierr = MatSetValue(*B,i,i, 2.0 + 1200.0*xx[i]*xx[i] - 400.0*xx[i+1] + 200.0,ADD_VALUES);CHKERRQ(ierr);
ierr = MatSetValue(*B,i,i+1,-400.0*xx[i],ADD_VALUES);CHKERRQ(ierr);
}
ierr = MatSetValue(*B,ctx->p+1,ctx->p, -400.0*xx[ctx->p],ADD_VALUES);CHKERRQ(ierr);
ierr = MatSetValue(*B,ctx->p+1,ctx->p+1,200,ADD_VALUES);CHKERRQ(ierr);
*flag = SAME_NONZERO_PATTERN;
for (i=ctx->p+2; i<2+ctx->p+ctx->n; i++) {
ierr = MatSetValue(*B,i,i,1.0,ADD_VALUES);CHKERRQ(ierr);
ierr = MatSetValue(*B,i,0,-1.0,ADD_VALUES);CHKERRQ(ierr);
ierr = MatSetValue(*B,i,1,.7,ADD_VALUES);CHKERRQ(ierr);
ierr = MatSetValue(*B,i,i-1,-.4*xx[i-1],ADD_VALUES);CHKERRQ(ierr);
}
/*
Restore vector
*/
ierr = VecRestoreArray(x,&xx);CHKERRQ(ierr);
/*
Assemble matrix
*/
ierr = MatAssemblyBegin(*B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(*B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
if (*jac != *B) {
ierr = MatAssemblyBegin(*jac,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(*jac,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
}
return 0;
}
开发者ID:feelpp,项目名称:debian-petsc,代码行数:67,代码来源:ex43.c
示例14: zero
void
PetscSparseMtrx :: zero()
{
// test if receiver is already assembled
PetscBool assembled;
MatAssembled(this->mtrx, & assembled);
if ( assembled ) {
MatZeroEntries(this->mtrx);
}
this->newValues = true;
}
开发者ID:MartinFagerstrom,项目名称:oofem,代码行数:11,代码来源:petscsparsemtrx.C
示例15: SNESComputeJacobian_MyShell
PetscErrorCode SNESComputeJacobian_MyShell(SNES snes,Vec X,Mat A,Mat B,void *ctx)
{
static PetscInt fail = 0;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = SNESComputeJacobian_DMDA(snes,X,A,B,ctx);CHKERRQ(ierr);
if (fail++ > 0) {
ierr = MatZeroEntries(A);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
开发者ID:haubentaucher,项目名称:petsc,代码行数:12,代码来源:ex69.c
示例16: main
int main(int argc,char **argv)
{
Mat mat,submat,*submatrices;
PetscInt m = 10,n = 10,i = 4,tmp;
PetscErrorCode ierr;
IS irkeep,ickeep;
PetscScalar value = 1.0;
PetscViewer sviewer;
PetscInitialize(&argc,&argv,(char *)0,help);
ierr = PetscViewerSetFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_COMMON);CHKERRQ(ierr);
ierr = PetscViewerSetFormat(PETSC_VIEWER_STDOUT_SELF,PETSC_VIEWER_ASCII_COMMON);CHKERRQ(ierr);
ierr = MatCreate(PETSC_COMM_WORLD,&mat);CHKERRQ(ierr);
ierr = MatSetSizes(mat,PETSC_DECIDE,PETSC_DECIDE,m,n);CHKERRQ(ierr);
ierr = MatSetFromOptions(mat);CHKERRQ(ierr);
for (i=0; i<m; i++) {
value = (PetscReal)i+1; tmp = i % 5;
ierr = MatSetValues(mat,1,&tmp,1,&i,&value,INSERT_VALUES);CHKERRQ(ierr);
}
ierr = MatAssemblyBegin(mat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(mat,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Original matrix\n");CHKERRQ(ierr);
ierr = MatView(mat,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
/* Form submatrix with rows 2-4 and columns 4-8 */
ierr = ISCreateStride(PETSC_COMM_SELF,3,2,1,&irkeep);CHKERRQ(ierr);
ierr = ISCreateStride(PETSC_COMM_SELF,5,4,1,&ickeep);CHKERRQ(ierr);
ierr = MatGetSubMatrices(mat,1,&irkeep,&ickeep,MAT_INITIAL_MATRIX,&submatrices);CHKERRQ(ierr);
submat = *submatrices;
ierr = PetscFree(submatrices);CHKERRQ(ierr);
/*
sviewer will cause the submatrices (one per processor) to be printed in the correct order
*/
ierr = PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Submatrices\n");CHKERRQ(ierr);
ierr = PetscViewerGetSingleton(PETSC_VIEWER_STDOUT_WORLD,&sviewer);CHKERRQ(ierr);
ierr = MatView(submat,sviewer);CHKERRQ(ierr);
ierr = PetscViewerRestoreSingleton(PETSC_VIEWER_STDOUT_WORLD,&sviewer);CHKERRQ(ierr);
ierr = PetscViewerFlush(PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
/* Zero the original matrix */
ierr = PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Original zeroed matrix\n");CHKERRQ(ierr);
ierr = MatZeroEntries(mat);CHKERRQ(ierr);
ierr = MatView(mat,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
ierr = ISDestroy(&irkeep);CHKERRQ(ierr);
ierr = ISDestroy(&ickeep);CHKERRQ(ierr);
ierr = MatDestroy(&submat);CHKERRQ(ierr);
ierr = MatDestroy(&mat);CHKERRQ(ierr);
ierr = PetscFinalize();
return 0;
}
开发者ID:Kun-Qu,项目名称:petsc,代码行数:52,代码来源:ex4.c
示例17: FormIJacobian
/*
FormIJacobian - Evaluates Jacobian matrix.
Input Parameters:
+ ts - the TS context
. t - pseudo-time
. X - input vector
. Xdot - time derivative
. shift - multiplier for mass matrix
. dummy - user-defined context
Output Parameters:
. J - Jacobian matrix
. B - optionally different preconditioning matrix
. flag - flag indicating matrix structure
*/
static PetscErrorCode FormIJacobian(TS ts,PetscReal t,Vec X,Vec Xdot,PetscReal shift,Mat J,Mat B,void *ictx)
{
const PetscScalar *x;
PetscErrorCode ierr;
PetscInt i;
Ctx *ctx = (Ctx*)ictx;
PetscFunctionBeginUser;
ierr = MatZeroEntries(B);CHKERRQ(ierr);
/*
Get pointer to vector data
*/
ierr = VecGetArrayRead(X,&x);CHKERRQ(ierr);
/*
Compute Jacobian entries and insert into matrix.
*/
for (i=0; i<ctx->n-1; i++) {
PetscInt rowcol[2];
PetscScalar v[2][2],a,a0,a1,a00,a01,a10,a11;
rowcol[0] = i;
rowcol[1] = i+1;
a = x[i+1] - PetscSqr(x[i]);
a0 = -2.*x[i];
a00 = -2.;
a01 = 0.;
a1 = 1.;
a10 = 0.;
a11 = 0.;
v[0][0] = 2. + 200.*(a*a00 + a0*a0);
v[0][1] = 200.*(a*a01 + a1*a0);
v[1][0] = 200.*(a*a10 + a0*a1);
v[1][1] = 200.*(a*a11 + a1*a1);
ierr = MatSetValues(B,2,rowcol,2,rowcol,&v[0][0],ADD_VALUES);CHKERRQ(ierr);
}
for (i=0; i<ctx->n; i++) {
ierr = MatSetValue(B,i,i,(PetscScalar)shift,ADD_VALUES);CHKERRQ(ierr);
}
ierr = VecRestoreArrayRead(X,&x);CHKERRQ(ierr);
/*
Assemble matrix
*/
ierr = MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
if (J != B) {
ierr = MatAssemblyBegin(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
开发者ID:masa-ito,项目名称:PETScToPoisson,代码行数:68,代码来源:ex24.c
示例18: FormTangent
PetscErrorCode FormTangent(TS ts,PetscReal t,Vec U,Vec Udot,PetscReal shift,Mat *A,Mat *B,MatStructure *flag,void *ctx)
{
PetscFunctionBegin;
PetscErrorCode ierr;
SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_ARG_OUTOFRANGE, "FormTangent not implemented, use -snes_mf");
DMDALocalInfo info;
DM da_dof;
Vec localU,localUdot; // local versions
Field **h,**hdot;
/* get the da from the snes */
ierr = TSGetDM(ts,(DM*)&da_dof);CHKERRQ(ierr);
/* handle the vec U */
ierr = DMGetLocalVector(da_dof,&localU);CHKERRQ(ierr);
ierr = DMGlobalToLocalBegin(da_dof,U,INSERT_VALUES,localU);CHKERRQ(ierr);
ierr = DMGlobalToLocalEnd(da_dof,U,INSERT_VALUES,localU);CHKERRQ(ierr);
/* handle the vec Udot */
ierr = DMGetLocalVector(da_dof,&localUdot);CHKERRQ(ierr);
ierr = DMGlobalToLocalBegin(da_dof,Udot,INSERT_VALUES,localUdot);CHKERRQ(ierr);
ierr = DMGlobalToLocalEnd(da_dof,Udot,INSERT_VALUES,localUdot);CHKERRQ(ierr);
/* Get the arrays from the vectors */
ierr = DMDAVecGetArray(da_dof,localU,&h);CHKERRQ(ierr);
ierr = DMDAVecGetArray(da_dof,localUdot,&hdot);CHKERRQ(ierr);
/* Grab the local info and call the local tangent routine */
ierr = DMDAGetLocalInfo(da_dof,&info);CHKERRQ(ierr);CHKERRQ(ierr);
ierr = MatZeroEntries(*B);CHKERRQ(ierr); // pre-zero the matrix
ierr = FormTangentLocal(&info,t,h,hdot,shift,B,(AppCtx *) ctx);CHKERRQ(ierr);
ierr = MatAssemblyBegin(*B,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
ierr = MatAssemblyEnd(*B,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
if (*A != *B) { // then we could be matrix free
ierr = MatAssemblyBegin(*A,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
ierr = MatAssemblyEnd(*A,MAT_FINAL_ASSEMBLY); CHKERRQ(ierr);
}
*flag = SAME_NONZERO_PATTERN; /* the sparsity pattern does not change */
ierr = DMDAVecRestoreArray(da_dof,localUdot,&hdot);CHKERRQ(ierr);
ierr = DMDAVecRestoreArray(da_dof,localU,&h);CHKERRQ(ierr);
/* Restore the arrays and local vectors */
ierr = DMRestoreLocalVector(da_dof,&localU);CHKERRQ(ierr);
ierr = DMRestoreLocalVector(da_dof,&localUdot);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:Kun-Qu,项目名称:petsc,代码行数:50,代码来源:ex18.c
示例19: RawGraph
RawGraph(Mat new_global_mat) {
global_mat = new_global_mat;
//For this code to work, we're going to need the matrix structure for the sequential portion of this matrix.
//Therefore, extract a sequential AIJ matrix.
MatType type;
MatGetType(global_mat, &type);
if (!strcmp(type,MATSEQAIJ)) {
MatDuplicate(global_mat, MAT_DO_NOT_COPY_VALUES, &local_mat);
} else {
MatGetLocalMat(global_mat, MAT_INITIAL_MATRIX, &local_mat);
}
MatZeroEntries(local_mat);
MatGetOwnershipRange(global_mat, &row_begin, &row_end);
//MatView(local_mat, PETSC_VIEWER_DRAW_SELF);
seq_raw.create(local_mat);
}
开发者ID:rblake,项目名称:petsc_amg,代码行数:17,代码来源:mglib.c
示例20: MPI_Allreduce
void linearSystemPETSc<scalar>::zeroMatrix()
{
if (_comm == PETSC_COMM_WORLD){
if (Msg::GetCommSize()>1){
int value = _entriesPreAllocated ? 1 : 0;
int sumValue = 0;
MPI_Allreduce((void*)&value, (void*)&sumValue, 1, MPI_INT, MPI_SUM, _comm);
if ((sumValue >= 0) &&(sumValue < Msg::GetCommSize()) && !_entriesPreAllocated){
preAllocateEntries();
}
}
}
if (_isAllocated && _entriesPreAllocated) {
_assembleMatrixIfNeeded();
_try(MatZeroEntries(_a));
}
}
开发者ID:feelpp,项目名称:debian-gmsh,代码行数:17,代码来源:linearSystemPETSc.hpp
注:本文中的MatZeroEntries函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论