本文整理汇总了C++中PetscFree3函数的典型用法代码示例。如果您正苦于以下问题:C++ PetscFree3函数的具体用法?C++ PetscFree3怎么用?C++ PetscFree3使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PetscFree3函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: DMDestroy_Sliced
static PetscErrorCode DMDestroy_Sliced(DM dm)
{
PetscErrorCode ierr;
DM_Sliced *slice = (DM_Sliced*)dm->data;
PetscFunctionBegin;
ierr = PetscFree(slice->ghosts);CHKERRQ(ierr);
if (slice->dfill) {ierr = PetscFree3(slice->dfill,slice->dfill->i,slice->dfill->j);CHKERRQ(ierr);}
if (slice->ofill) {ierr = PetscFree3(slice->ofill,slice->ofill->i,slice->ofill->j);CHKERRQ(ierr);}
/* This was originally freed in DMDestroy(), but that prevents reference counting of backend objects */
ierr = PetscFree(slice);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:13,代码来源:sliced.c
示例2: MatCholeskyFactorSymbolic_CHOLMOD
PetscErrorCode MatCholeskyFactorSymbolic_CHOLMOD(Mat F,Mat A,IS perm,const MatFactorInfo *info)
{
Mat_CHOLMOD *chol = (Mat_CHOLMOD*)F->spptr;
PetscErrorCode ierr;
cholmod_sparse cholA;
PetscBool aijalloc;
PetscInt *fset = 0;
size_t fsize = 0;
PetscFunctionBegin;
ierr = (*chol->Wrap)(A,PETSC_FALSE,&cholA,&aijalloc);CHKERRQ(ierr);
static_F = F;
if (chol->factor) {
ierr = !cholmod_X_resymbol(&cholA,fset,fsize,(int)chol->pack,chol->factor,chol->common);
if (ierr) SETERRQ1(((PetscObject)F)->comm,PETSC_ERR_LIB,"CHOLMOD analysis failed with status %d",chol->common->status);
} else if (perm) {
const PetscInt *ip;
ierr = ISGetIndices(perm,&ip);CHKERRQ(ierr);
chol->factor = cholmod_X_analyze_p(&cholA,(PetscInt*)ip,fset,fsize,chol->common);
if (!chol->factor) SETERRQ1(((PetscObject)F)->comm,PETSC_ERR_LIB,"CHOLMOD analysis failed with status %d",chol->common->status);
ierr = ISRestoreIndices(perm,&ip);CHKERRQ(ierr);
} else {
chol->factor = cholmod_X_analyze(&cholA,chol->common);
if (!chol->factor) SETERRQ1(((PetscObject)F)->comm,PETSC_ERR_LIB,"CHOLMOD analysis failed with status %d",chol->common->status);
}
if (aijalloc) {ierr = PetscFree3(cholA.p,cholA.i,cholA.x);CHKERRQ(ierr);}
F->ops->choleskyfactornumeric = MatCholeskyFactorNumeric_CHOLMOD;
PetscFunctionReturn(0);
}
开发者ID:Kun-Qu,项目名称:petsc,代码行数:31,代码来源:sbaijcholmod.c
示例3: DMInterpolate_Tetrahedron_Private
PETSC_STATIC_INLINE PetscErrorCode DMInterpolate_Tetrahedron_Private(DMInterpolationInfo ctx, DM dm, Vec xLocal, Vec v)
{
PetscReal *v0, *J, *invJ, detJ;
PetscScalar *a, *coords;
PetscInt p;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscMalloc3(ctx->dim,&v0,ctx->dim*ctx->dim,&J,ctx->dim*ctx->dim,&invJ);CHKERRQ(ierr);
ierr = VecGetArray(ctx->coords, &coords);CHKERRQ(ierr);
ierr = VecGetArray(v, &a);CHKERRQ(ierr);
for (p = 0; p < ctx->n; ++p) {
PetscInt c = ctx->cells[p];
const PetscInt order[3] = {2, 1, 3};
PetscScalar *x = NULL;
PetscReal xi[4];
PetscInt d, f, comp;
ierr = DMPlexComputeCellGeometry(dm, c, v0, J, invJ, &detJ);CHKERRQ(ierr);
if (detJ <= 0.0) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Invalid determinant %g for element %d", detJ, c);
ierr = DMPlexVecGetClosure(dm, NULL, xLocal, c, NULL, &x);CHKERRQ(ierr);
for (comp = 0; comp < ctx->dof; ++comp) a[p*ctx->dof+comp] = x[0*ctx->dof+comp];
for (d = 0; d < ctx->dim; ++d) {
xi[d] = 0.0;
for (f = 0; f < ctx->dim; ++f) xi[d] += invJ[d*ctx->dim+f]*0.5*PetscRealPart(coords[p*ctx->dim+f] - v0[f]);
for (comp = 0; comp < ctx->dof; ++comp) a[p*ctx->dof+comp] += PetscRealPart(x[order[d]*ctx->dof+comp] - x[0*ctx->dof+comp])*xi[d];
}
ierr = DMPlexVecRestoreClosure(dm, NULL, xLocal, c, NULL, &x);CHKERRQ(ierr);
}
ierr = VecRestoreArray(v, &a);CHKERRQ(ierr);
ierr = VecRestoreArray(ctx->coords, &coords);CHKERRQ(ierr);
ierr = PetscFree3(v0, J, invJ);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:lw4992,项目名称:petsc,代码行数:35,代码来源:dmplexsnes.c
示例4: MatGetOrdering_RCM
/*
MatGetOrdering_RCM - Find the Reverse Cuthill-McKee ordering of a given matrix.
*/
PETSC_INTERN PetscErrorCode MatGetOrdering_RCM(Mat mat,MatOrderingType type,IS *row,IS *col)
{
PetscErrorCode ierr;
PetscInt i,*mask,*xls,nrow,*perm;
const PetscInt *ia,*ja;
PetscBool done;
PetscFunctionBegin;
ierr = MatGetRowIJ(mat,1,PETSC_TRUE,PETSC_TRUE,&nrow,&ia,&ja,&done);
CHKERRQ(ierr);
if (!done) SETERRQ(PetscObjectComm((PetscObject)mat),PETSC_ERR_SUP,"Cannot get rows for matrix");
ierr = PetscMalloc3(nrow,&mask,nrow,&perm,2*nrow,&xls);
CHKERRQ(ierr);
SPARSEPACKgenrcm(&nrow,ia,ja,perm,mask,xls);
ierr = MatRestoreRowIJ(mat,1,PETSC_TRUE,PETSC_TRUE,NULL,&ia,&ja,&done);
CHKERRQ(ierr);
/* shift because Sparsepack indices start at one */
for (i=0; i<nrow; i++) perm[i]--;
ierr = ISCreateGeneral(PETSC_COMM_SELF,nrow,perm,PETSC_COPY_VALUES,row);
CHKERRQ(ierr);
ierr = ISCreateGeneral(PETSC_COMM_SELF,nrow,perm,PETSC_COPY_VALUES,col);
CHKERRQ(ierr);
ierr = PetscFree3(mask,perm,xls);
CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:petsc,项目名称:petsc,代码行数:31,代码来源:sprcm.c
示例5: MPIPetsc_Type_compare_contig
/* Check whether a was created via MPI_Type_contiguous from b
*
*/
PetscErrorCode MPIPetsc_Type_compare_contig(MPI_Datatype a,MPI_Datatype b,PetscInt *n)
{
PetscErrorCode ierr;
MPI_Datatype atype,btype;
PetscMPIInt aintcount,aaddrcount,atypecount,acombiner;
PetscFunctionBegin;
ierr = MPIPetsc_Type_unwrap(a,&atype);CHKERRQ(ierr);
ierr = MPIPetsc_Type_unwrap(b,&btype);CHKERRQ(ierr);
*n = PETSC_FALSE;
if (atype == btype) {
*n = 1;
PetscFunctionReturn(0);
}
ierr = MPI_Type_get_envelope(atype,&aintcount,&aaddrcount,&atypecount,&acombiner);CHKERRQ(ierr);
if (acombiner == MPI_COMBINER_CONTIGUOUS && aintcount >= 1) {
PetscMPIInt *aints;
MPI_Aint *aaddrs;
MPI_Datatype *atypes;
ierr = PetscMalloc3(aintcount,&aints,aaddrcount,&aaddrs,atypecount,&atypes);CHKERRQ(ierr);
ierr = MPI_Type_get_contents(atype,aintcount,aaddrcount,atypecount,aints,aaddrs,atypes);CHKERRQ(ierr);
if (atypes[0] == btype) *n = aints[0];
ierr = PetscFree3(aints,aaddrs,atypes);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
PetscFunctionReturn(0);
}
开发者ID:00liujj,项目名称:petsc,代码行数:30,代码来源:sftype.c
示例6: MatDestroy_LUSOL
PetscErrorCode MatDestroy_LUSOL(Mat A)
{
PetscErrorCode ierr;
Mat_LUSOL *lusol=(Mat_LUSOL*)A->spptr;
PetscFunctionBegin;
if (lusol && lusol->CleanUpLUSOL) {
ierr = PetscFree(lusol->ip);CHKERRQ(ierr);
ierr = PetscFree(lusol->iq);CHKERRQ(ierr);
ierr = PetscFree(lusol->lenc);CHKERRQ(ierr);
ierr = PetscFree(lusol->lenr);CHKERRQ(ierr);
ierr = PetscFree(lusol->locc);CHKERRQ(ierr);
ierr = PetscFree(lusol->locr);CHKERRQ(ierr);
ierr = PetscFree(lusol->iploc);CHKERRQ(ierr);
ierr = PetscFree(lusol->iqloc);CHKERRQ(ierr);
ierr = PetscFree(lusol->ipinv);CHKERRQ(ierr);
ierr = PetscFree(lusol->iqinv);CHKERRQ(ierr);
ierr = PetscFree(lusol->mnsw);CHKERRQ(ierr);
ierr = PetscFree(lusol->mnsv);CHKERRQ(ierr);
ierr = PetscFree3(lusol->data,lusol->indc,lusol->indr);CHKERRQ(ierr);
}
ierr = PetscFree(A->spptr);CHKERRQ(ierr);
ierr = MatDestroy_SeqAIJ(A);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:25,代码来源:lusol.c
示例7: DMRefineHierarchy_DA
PetscErrorCode DMRefineHierarchy_DA(DM da,PetscInt nlevels,DM daf[])
{
PetscErrorCode ierr;
PetscInt i,n,*refx,*refy,*refz;
PetscFunctionBegin;
PetscValidHeaderSpecific(da,DM_CLASSID,1);
if (nlevels < 0) SETERRQ(((PetscObject)da)->comm,PETSC_ERR_ARG_OUTOFRANGE,"nlevels cannot be negative");
if (nlevels == 0) PetscFunctionReturn(0);
PetscValidPointer(daf,3);
/* Get refinement factors, defaults taken from the coarse DMDA */
ierr = PetscMalloc3(nlevels,PetscInt,&refx,nlevels,PetscInt,&refy,nlevels,PetscInt,&refz);CHKERRQ(ierr);
for (i=0; i<nlevels; i++) {
ierr = DMDAGetRefinementFactor(da,&refx[i],&refy[i],&refz[i]);CHKERRQ(ierr);
}
n = nlevels;
ierr = PetscOptionsGetIntArray(((PetscObject)da)->prefix,"-da_refine_hierarchy_x",refx,&n,PETSC_NULL);CHKERRQ(ierr);
n = nlevels;
ierr = PetscOptionsGetIntArray(((PetscObject)da)->prefix,"-da_refine_hierarchy_y",refy,&n,PETSC_NULL);CHKERRQ(ierr);
n = nlevels;
ierr = PetscOptionsGetIntArray(((PetscObject)da)->prefix,"-da_refine_hierarchy_z",refz,&n,PETSC_NULL);CHKERRQ(ierr);
ierr = DMDASetRefinementFactor(da,refx[0],refy[0],refz[0]);CHKERRQ(ierr);
ierr = DMRefine(da,((PetscObject)da)->comm,&daf[0]);CHKERRQ(ierr);
for (i=1; i<nlevels; i++) {
ierr = DMDASetRefinementFactor(daf[i-1],refx[i],refy[i],refz[i]);CHKERRQ(ierr);
ierr = DMRefine(daf[i-1],((PetscObject)da)->comm,&daf[i]);CHKERRQ(ierr);
}
ierr = PetscFree3(refx,refy,refz);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:32,代码来源:da.c
示例8: KSPPlotEigenContours_Private
/* collective on KSP */
PetscErrorCode KSPPlotEigenContours_Private(KSP ksp,PetscInt neig,const PetscReal *r,const PetscReal *c)
{
PetscErrorCode ierr;
PetscReal xmin,xmax,ymin,ymax,*xloc,*yloc,*value,px0,py0,rscale,iscale;
PetscInt M,N,i,j;
PetscMPIInt rank;
PetscViewer viewer;
PetscDraw draw;
PetscDrawAxis drawaxis;
PetscFunctionBegin;
ierr = MPI_Comm_rank(((PetscObject)ksp)->comm,&rank);CHKERRQ(ierr);
if (rank) PetscFunctionReturn(0);
M = 80;
N = 80;
xmin = r[0]; xmax = r[0];
ymin = c[0]; ymax = c[0];
for (i=1; i<neig; i++) {
xmin = PetscMin(xmin,r[i]);
xmax = PetscMax(xmax,r[i]);
ymin = PetscMin(ymin,c[i]);
ymax = PetscMax(ymax,c[i]);
}
ierr = PetscMalloc3(M,PetscReal,&xloc,N,PetscReal,&yloc,M*N,PetscReal,&value);CHKERRQ(ierr);
for (i=0; i<M; i++) xloc[i] = xmin - 0.1*(xmax-xmin) + 1.2*(xmax-xmin)*i/(M-1);
for (i=0; i<N; i++) yloc[i] = ymin - 0.1*(ymax-ymin) + 1.2*(ymax-ymin)*i/(N-1);
ierr = PolyEval(neig,r,c,0,0,&px0,&py0);CHKERRQ(ierr);
rscale = px0/(PetscSqr(px0)+PetscSqr(py0));
iscale = -py0/(PetscSqr(px0)+PetscSqr(py0));
for (j=0; j<N; j++) {
for (i=0; i<M; i++) {
PetscReal px,py,tx,ty,tmod;
ierr = PolyEval(neig,r,c,xloc[i],yloc[j],&px,&py);CHKERRQ(ierr);
tx = px*rscale - py*iscale;
ty = py*rscale + px*iscale;
tmod = PetscSqr(tx) + PetscSqr(ty); /* modulus of the complex polynomial */
if (tmod > 1) tmod = 1.0;
if (tmod > 0.5 && tmod < 1) tmod = 0.5;
if (tmod > 0.2 && tmod < 0.5) tmod = 0.2;
if (tmod > 0.05 && tmod < 0.2) tmod = 0.05;
if (tmod < 1e-3) tmod = 1e-3;
value[i+j*M] = PetscLogScalar(tmod) / PetscLogScalar(10.0);
}
}
ierr = PetscViewerDrawOpen(PETSC_COMM_SELF,0,"Iteratively Computed Eigen-contours",PETSC_DECIDE,PETSC_DECIDE,450,450,&viewer);CHKERRQ(ierr);
ierr = PetscViewerDrawGetDraw(viewer,0,&draw);CHKERRQ(ierr);
ierr = PetscDrawTensorContour(draw,M,N,PETSC_NULL,PETSC_NULL,value);CHKERRQ(ierr);
if (0) {
ierr = PetscDrawAxisCreate(draw,&drawaxis);CHKERRQ(ierr);
ierr = PetscDrawAxisSetLimits(drawaxis,xmin,xmax,ymin,ymax);CHKERRQ(ierr);
ierr = PetscDrawAxisSetLabels(drawaxis,"Eigen-counters","real","imag");CHKERRQ(ierr);
ierr = PetscDrawAxisDraw(drawaxis);CHKERRQ(ierr);
ierr = PetscDrawAxisDestroy(&drawaxis);CHKERRQ(ierr);
}
ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);
ierr = PetscFree3(xloc,yloc,value);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:59,代码来源:eige.c
示例9: BuildGradientReconstruction
static PetscErrorCode BuildGradientReconstruction(DM dm, PetscFV fvm, DM dmFace, PetscScalar *fgeom, DM dmCell, PetscScalar *cgeom)
{
DMLabel ghostLabel;
PetscScalar *dx, *grad, **gref;
PetscInt dim, cStart, cEnd, c, cEndInterior, maxNumFaces;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = DMPlexGetDimension(dm, &dim);CHKERRQ(ierr);
ierr = DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd);CHKERRQ(ierr);
ierr = DMPlexGetHybridBounds(dm, &cEndInterior, NULL, NULL, NULL);CHKERRQ(ierr);
ierr = DMPlexGetMaxSizes(dm, &maxNumFaces, NULL);CHKERRQ(ierr);
ierr = PetscFVLeastSquaresSetMaxFaces(fvm, maxNumFaces);CHKERRQ(ierr);
ierr = DMPlexGetLabel(dm, "ghost", &ghostLabel);CHKERRQ(ierr);
ierr = PetscMalloc3(maxNumFaces*dim, &dx, maxNumFaces*dim, &grad, maxNumFaces, &gref);CHKERRQ(ierr);
for (c = cStart; c < cEndInterior; c++) {
const PetscInt *faces;
PetscInt numFaces, usedFaces, f, d;
const CellGeom *cg;
PetscBool boundary;
PetscInt ghost;
ierr = DMPlexPointLocalRead(dmCell, c, cgeom, &cg);CHKERRQ(ierr);
ierr = DMPlexGetConeSize(dm, c, &numFaces);CHKERRQ(ierr);
ierr = DMPlexGetCone(dm, c, &faces);CHKERRQ(ierr);
if (numFaces < dim) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_INCOMP,"Cell %D has only %D faces, not enough for gradient reconstruction", c, numFaces);
for (f = 0, usedFaces = 0; f < numFaces; ++f) {
const CellGeom *cg1;
FaceGeom *fg;
const PetscInt *fcells;
PetscInt ncell, side;
ierr = DMLabelGetValue(ghostLabel, faces[f], &ghost);CHKERRQ(ierr);
ierr = DMPlexIsBoundaryPoint(dm, faces[f], &boundary);CHKERRQ(ierr);
if ((ghost >= 0) || boundary) continue;
ierr = DMPlexGetSupport(dm, faces[f], &fcells);CHKERRQ(ierr);
side = (c != fcells[0]); /* c is on left=0 or right=1 of face */
ncell = fcells[!side]; /* the neighbor */
ierr = DMPlexPointLocalRef(dmFace, faces[f], fgeom, &fg);CHKERRQ(ierr);
ierr = DMPlexPointLocalRead(dmCell, ncell, cgeom, &cg1);CHKERRQ(ierr);
for (d = 0; d < dim; ++d) dx[usedFaces*dim+d] = cg1->centroid[d] - cg->centroid[d];
gref[usedFaces++] = fg->grad[side]; /* Gradient reconstruction term will go here */
}
if (!usedFaces) SETERRQ(PETSC_COMM_SELF, PETSC_ERR_USER, "Mesh contains isolated cell (no neighbors). Is it intentional?");
ierr = PetscFVComputeGradient(fvm, usedFaces, dx, grad);CHKERRQ(ierr);
for (f = 0, usedFaces = 0; f < numFaces; ++f) {
ierr = DMLabelGetValue(ghostLabel, faces[f], &ghost);CHKERRQ(ierr);
ierr = DMPlexIsBoundaryPoint(dm, faces[f], &boundary);CHKERRQ(ierr);
if ((ghost >= 0) || boundary) continue;
for (d = 0; d < dim; ++d) gref[usedFaces][d] = grad[usedFaces*dim+d];
++usedFaces;
}
}
ierr = PetscFree3(dx, grad, gref);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:OpenCMISS-Dependencies,项目名称:petsc,代码行数:56,代码来源:dmplexts.c
示例10: PCReset_CP
static PetscErrorCode PCReset_CP(PC pc)
{
PC_CP *cp = (PC_CP*)pc->data;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscFree(cp->d);CHKERRQ(ierr);
ierr = VecDestroy(&cp->work);CHKERRQ(ierr);
ierr = PetscFree3(cp->a,cp->i,cp->j);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:pombredanne,项目名称:petsc,代码行数:11,代码来源:cp.c
示例11: DMLabelDestroy
PetscErrorCode DMLabelDestroy(DMLabel *label)
{
PetscErrorCode ierr;
PetscFunctionBegin;
if (--(*label)->refct > 0) {PetscFunctionReturn(0);}
ierr = PetscFree((*label)->name);CHKERRQ(ierr);
ierr = PetscFree3((*label)->stratumValues,(*label)->stratumOffsets,(*label)->stratumSizes);CHKERRQ(ierr);
ierr = PetscFree((*label)->points);CHKERRQ(ierr);
ierr = PetscFree(*label);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:12,代码来源:plexlabel.c
示例12: PetscFEGeomDestroy
PetscErrorCode PetscFEGeomDestroy(PetscFEGeom **geom)
{
PetscErrorCode ierr;
PetscFunctionBegin;
if (!*geom) PetscFunctionReturn(0);
ierr = PetscFree3((*geom)->v,(*geom)->J,(*geom)->detJ);CHKERRQ(ierr);
ierr = PetscFree((*geom)->invJ);CHKERRQ(ierr);
ierr = PetscFree4((*geom)->face,(*geom)->n,(*geom)->suppInvJ[0],(*geom)->suppInvJ[1]);CHKERRQ(ierr);
ierr = PetscFree(*geom);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:12,代码来源:fegeom.c
示例13: SNESReset_QN
static PetscErrorCode SNESReset_QN(SNES snes)
{
PetscErrorCode ierr;
SNES_QN *qn;
PetscFunctionBegin;
if (snes->data) {
qn = (SNES_QN*)snes->data;
if (qn->U) {
ierr = VecDestroyVecs(qn->m, &qn->U);CHKERRQ(ierr);
}
if (qn->V) {
ierr = VecDestroyVecs(qn->m, &qn->V);CHKERRQ(ierr);
}
if (qn->singlereduction) {
ierr = PetscFree3(qn->dXdFmat, qn->dFtdX, qn->YtdX);CHKERRQ(ierr);
}
ierr = PetscFree3(qn->alpha, qn->beta, qn->dXtdF);CHKERRQ(ierr);
}
PetscFunctionReturn(0);
}
开发者ID:hsahasra,项目名称:petsc-magma-dense-mat,代码行数:21,代码来源:qn.c
示例14: MatDestroy_SeqSBSTRM
PetscErrorCode MatDestroy_SeqSBSTRM(Mat A)
{
PetscErrorCode ierr;
Mat_SeqSBSTRM *sbstrm = (Mat_SeqSBSTRM*) A->spptr;
if (sbstrm) {
ierr = PetscFree3(sbstrm->as, sbstrm->asi, sbstrm->asj);CHKERRQ(ierr);
}
ierr = PetscObjectChangeTypeName((PetscObject)A, MATSEQSBAIJ);CHKERRQ(ierr);
ierr = MatDestroy_SeqSBAIJ(A);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:ZJLi2013,项目名称:petsc,代码行数:12,代码来源:sbstream.c
示例15: MatDestroy_SeqAIJ_Inode
PetscErrorCode MatDestroy_SeqAIJ_Inode(Mat A)
{
PetscErrorCode ierr;
Mat_SeqAIJ *a=(Mat_SeqAIJ*)A->data;
PetscFunctionBegin;
ierr = PetscFree(a->inode.size);CHKERRQ(ierr);
ierr = PetscFree3(a->inode.ibdiag,a->inode.bdiag,a->inode.ssor_work);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)A,"MatInodeAdjustForInodes_C",NULL);CHKERRQ(ierr);
ierr = PetscObjectComposeFunction((PetscObject)A,"MatInodeGetInodeSizes_C",NULL);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:12,代码来源:inode2.c
示例16: PetscMatStashSpaceDestroy
PetscErrorCode PetscMatStashSpaceDestroy(PetscMatStashSpace *space)
{
PetscMatStashSpace a;
PetscErrorCode ierr;
PetscFunctionBegin;
while (*space) {
a = (*space)->next;
ierr = PetscFree3((*space)->space_head,(*space)->idx,(*space)->idy);CHKERRQ(ierr);
ierr = PetscFree((*space));CHKERRQ(ierr);
*space = a;
}
*space = NULL;
PetscFunctionReturn(0);
}
开发者ID:pombredanne,项目名称:petsc,代码行数:15,代码来源:matstashspace.c
示例17: MatGetOrdering_WBM
PETSC_EXTERN PetscErrorCode MatGetOrdering_WBM(Mat mat, MatOrderingType type, IS *row, IS *col)
{
PetscScalar *a, *dw;
const PetscInt *ia, *ja;
const PetscInt job = 5;
PetscInt *perm, nrow, ncol, nnz, liw, *iw, ldw, i;
PetscBool done;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = MatGetRowIJ(mat,1,PETSC_TRUE,PETSC_TRUE,&nrow,&ia,&ja,&done);CHKERRQ(ierr);
ncol = nrow;
nnz = ia[nrow];
if (!done) SETERRQ(PetscObjectComm((PetscObject)mat),PETSC_ERR_SUP,"Cannot get rows for matrix");
ierr = MatSeqAIJGetArray(mat, &a);CHKERRQ(ierr);
switch (job) {
case 1: liw = 4*nrow + ncol; ldw = 0;break;
case 2: liw = 2*nrow + 2*ncol; ldw = ncol;break;
case 3: liw = 8*nrow + 2*ncol + nnz; ldw = nnz;break;
case 4: liw = 3*nrow + 2*ncol; ldw = 2*ncol + nnz;break;
case 5: liw = 3*nrow + 2*ncol; ldw = nrow + 2*ncol + nnz;break;
}
ierr = PetscMalloc3(liw,&iw,ldw,&dw,nrow,&perm);CHKERRQ(ierr);
#if defined(PETSC_HAVE_SUPERLU_DIST)
{
PetscInt num, info[10], icntl[10];
ierr = mc64id_dist(icntl);
if (ierr) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_LIB,"HSL mc64id_dist returned %d\n",ierr);
icntl[0] = 0; /* allow printing error messages (f2c'd code uses if non-negative, ignores value otherwise) */
icntl[1] = -1; /* suppress warnings */
icntl[2] = -1; /* ignore diagnostic output [default] */
icntl[3] = 0; /* perform consistency checks [default] */
ierr = mc64ad_dist(&job, &nrow, &nnz, ia, ja, a, &num, perm, &liw, iw, &ldw, dw, icntl, info);
if (ierr) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_LIB,"HSL mc64ad_dist returned %d\n",ierr);
}
#else
SETERRQ(PetscObjectComm((PetscObject) mat), PETSC_ERR_SUP, "WBM using MC64 does not support complex numbers");
#endif
ierr = MatRestoreRowIJ(mat, 1, PETSC_TRUE, PETSC_TRUE, NULL, &ia, &ja, &done);CHKERRQ(ierr);
for (i = 0; i < nrow; ++i) perm[i]--;
/* If job == 5, dw[0..ncols] contains the column scaling and dw[ncols..ncols+nrows] contains the row scaling */
ierr = ISCreateStride(PETSC_COMM_SELF, nrow, 0, 1, row);CHKERRQ(ierr);
ierr = ISCreateGeneral(PETSC_COMM_SELF,nrow,perm,PETSC_COPY_VALUES,col);CHKERRQ(ierr);
ierr = PetscFree3(iw,dw,perm);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:plguhur,项目名称:petsc,代码行数:48,代码来源:wbm.c
示例18: SVDAllocateSolution
/*@
SVDAllocateSolution - Allocate memory storage for common variables such
as the singular values and the basis vectors.
Collective on SVD
Input Parameters:
+ svd - eigensolver context
- extra - number of additional positions, used for methods that require a
working basis slightly larger than ncv
Developers Notes:
This is PETSC_EXTERN because it may be required by user plugin SVD
implementations.
This is called at setup after setting the value of ncv and the flag leftbasis.
Level: developer
@*/
PetscErrorCode SVDAllocateSolution(SVD svd,PetscInt extra)
{
PetscErrorCode ierr;
PetscInt oldsize,requested;
Vec tr,tl;
PetscFunctionBegin;
requested = svd->ncv + extra;
/* oldsize is zero if this is the first time setup is called */
ierr = BVGetSizes(svd->V,NULL,NULL,&oldsize);CHKERRQ(ierr);
/* allocate sigma */
if (requested != oldsize) {
if (oldsize) {
ierr = PetscFree3(svd->sigma,svd->perm,svd->errest);CHKERRQ(ierr);
}
ierr = PetscMalloc3(requested,&svd->sigma,requested,&svd->perm,requested,&svd->errest);CHKERRQ(ierr);
ierr = PetscLogObjectMemory((PetscObject)svd,PetscMax(0,requested-oldsize)*(2*sizeof(PetscReal)+sizeof(PetscInt)));CHKERRQ(ierr);
}
/* allocate V */
if (!svd->V) { ierr = SVDGetBV(svd,&svd->V,NULL);CHKERRQ(ierr); }
if (!oldsize) {
if (!((PetscObject)(svd->V))->type_name) {
ierr = BVSetType(svd->V,BVSVEC);CHKERRQ(ierr);
}
ierr = SVDMatGetVecs(svd,&tr,NULL);CHKERRQ(ierr);
ierr = BVSetSizesFromVec(svd->V,tr,requested);CHKERRQ(ierr);
ierr = VecDestroy(&tr);CHKERRQ(ierr);
} else {
ierr = BVResize(svd->V,requested,PETSC_FALSE);CHKERRQ(ierr);
}
/* allocate U */
if (svd->leftbasis) {
if (!svd->U) { ierr = SVDGetBV(svd,NULL,&svd->U);CHKERRQ(ierr); }
if (!oldsize) {
if (!((PetscObject)(svd->U))->type_name) {
ierr = BVSetType(svd->U,BVSVEC);CHKERRQ(ierr);
}
ierr = SVDMatGetVecs(svd,NULL,&tl);CHKERRQ(ierr);
ierr = BVSetSizesFromVec(svd->U,tl,requested);CHKERRQ(ierr);
ierr = VecDestroy(&tl);CHKERRQ(ierr);
} else {
ierr = BVResize(svd->U,requested,PETSC_FALSE);CHKERRQ(ierr);
}
}
PetscFunctionReturn(0);
}
开发者ID:OpenCMISS-Dependencies,项目名称:slepc,代码行数:67,代码来源:svdsetup.c
示例19: PetscConvEstCreate
/*@
PetscConvEstDestroy - Destroys a PetscConvEst object
Collective on PetscConvEst
Input Parameter:
. ce - The PetscConvEst object
Level: beginner
.keywords: PetscConvEst, convergence, destroy
.seealso: PetscConvEstCreate(), PetscConvEstGetConvRate()
@*/
PetscErrorCode PetscConvEstDestroy(PetscConvEst *ce)
{
PetscErrorCode ierr;
PetscFunctionBegin;
if (!*ce) PetscFunctionReturn(0);
PetscValidHeaderSpecific((*ce),PETSC_OBJECT_CLASSID,1);
if (--((PetscObject)(*ce))->refct > 0) {
*ce = NULL;
PetscFunctionReturn(0);
}
ierr = PetscFree3((*ce)->initGuess, (*ce)->exactSol, (*ce)->ctxs);CHKERRQ(ierr);
ierr = PetscFree((*ce)->errors);CHKERRQ(ierr);
ierr = PetscHeaderDestroy(ce);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
开发者ID:petsc,项目名称:petsc,代码行数:29,代码来源:convest.c
示例20: TSRosWRegister
/*@C
SNESMSRegisterDestroy - Frees the list of schemes that were registered by TSRosWRegister().
Not Collective
Level: advanced
.keywords: TSRosW, register, destroy
.seealso: TSRosWRegister(), TSRosWRegisterAll(), TSRosWRegisterDynamic()
@*/
PetscErrorCode SNESMSRegisterDestroy(void)
{
PetscErrorCode ierr;
SNESMSTableauLink link;
PetscFunctionBegin;
while ((link = SNESMSTableauList)) {
SNESMSTableau t = &link->tab;
SNESMSTableauList = link->next;
ierr = PetscFree3(t->gamma,t->delta,t->betasub);CHKERRQ(ierr);
ierr = PetscFree(t->name);CHKERRQ(ierr);
ierr = PetscFree(link);CHKERRQ(ierr);
}
SNESMSRegisterAllCalled = PETSC_FALSE;
PetscFunctionReturn(0);
}
开发者ID:Kun-Qu,项目名称:petsc,代码行数:26,代码来源:ms.c
注:本文中的PetscFree3函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论