本文整理汇总了C++中PetscObjectSetName函数的典型用法代码示例。如果您正苦于以下问题:C++ PetscObjectSetName函数的具体用法?C++ PetscObjectSetName怎么用?C++ PetscObjectSetName使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PetscObjectSetName函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SetupDiscretization
PetscErrorCode SetupDiscretization(DM dm, AppCtx *user)
{
DM cdm = dm;
const PetscInt dim = 2;
PetscFE fe[3];
PetscQuadrature q;
PetscInt f;
MPI_Comm comm;
PetscErrorCode ierr;
PetscFunctionBeginUser;
/* Create finite element */
ierr = PetscObjectGetComm((PetscObject) dm, &comm);CHKERRQ(ierr);
ierr = PetscFECreateDefault(comm, dim, 1, PETSC_TRUE, "potential_", -1, &fe[0]);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) fe[0], "potential");CHKERRQ(ierr);
ierr = PetscFEGetQuadrature(fe[0], &q);CHKERRQ(ierr);
ierr = PetscFECreateDefault(comm, dim, 1, PETSC_TRUE, "charge_", -1, &fe[1]);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) fe[1], "charge");CHKERRQ(ierr);
ierr = PetscFESetQuadrature(fe[1], q);CHKERRQ(ierr);
ierr = PetscFECreateDefault(comm, dim, 1, PETSC_TRUE, "multiplier_", -1, &fe[2]);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) fe[2], "multiplier");CHKERRQ(ierr);
ierr = PetscFESetQuadrature(fe[2], q);CHKERRQ(ierr);
/* Set discretization and boundary conditions for each mesh */
for (f = 0; f < 3; ++f) {ierr = DMSetField(dm, f, NULL, (PetscObject) fe[f]);CHKERRQ(ierr);}
ierr = DMCreateDS(cdm);CHKERRQ(ierr);
ierr = SetupProblem(dm, user);CHKERRQ(ierr);
while (cdm) {
ierr = DMCopyDisc(dm, cdm);CHKERRQ(ierr);
ierr = DMGetCoarseDM(cdm, &cdm);CHKERRQ(ierr);
}
for (f = 0; f < 3; ++f) {ierr = PetscFEDestroy(&fe[f]);CHKERRQ(ierr);}
PetscFunctionReturn(0);
}
示例2: SetupDiscretization
PetscErrorCode SetupDiscretization(DM dm, AppCtx *user)
{
DM cdm = dm;
const PetscInt dim = user->dim;
PetscFE fe[2];
PetscQuadrature q;
Parameter *param;
MPI_Comm comm;
PetscErrorCode ierr;
PetscFunctionBeginUser;
/* Create finite element */
ierr = PetscObjectGetComm((PetscObject) dm, &comm);CHKERRQ(ierr);
ierr = PetscFECreateDefault(comm, dim, dim, user->simplex, "vel_", PETSC_DEFAULT, &fe[0]);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) fe[0], "velocity");CHKERRQ(ierr);
ierr = PetscFEGetQuadrature(fe[0], &q);CHKERRQ(ierr);
ierr = PetscFECreateDefault(comm, dim, 1, user->simplex, "pres_", PETSC_DEFAULT, &fe[1]);CHKERRQ(ierr);
ierr = PetscFESetQuadrature(fe[1], q);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) fe[1], "pressure");CHKERRQ(ierr);
/* Set discretization and boundary conditions for each mesh */
ierr = DMSetField(dm, 0, NULL, (PetscObject) fe[0]);CHKERRQ(ierr);
ierr = DMSetField(dm, 1, NULL, (PetscObject) fe[1]);CHKERRQ(ierr);
ierr = DMCreateDS(dm);CHKERRQ(ierr);
ierr = SetupProblem(dm, user);CHKERRQ(ierr);
ierr = PetscBagGetData(user->bag, (void **) ¶m);CHKERRQ(ierr);
while (cdm) {
ierr = DMCopyDisc(dm, cdm);CHKERRQ(ierr);
ierr = DMPlexCreateBasisRotation(cdm, param->alpha, 0.0, 0.0);CHKERRQ(ierr);
ierr = DMGetCoarseDM(cdm, &cdm);CHKERRQ(ierr);
}
ierr = PetscFEDestroy(&fe[0]);CHKERRQ(ierr);
ierr = PetscFEDestroy(&fe[1]);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例3: MatCreateAIJ
void PETSc::Create(
MPI_Comm Comm,
int ilower,
int iupper,
int d_nz,
int o_nz)
{
int n = iupper - ilower +1;
comm = Comm;
iLower = ilower;
iUpper = iupper;
MatCreateAIJ(PETSC_COMM_WORLD,n,n,PETSC_DECIDE,PETSC_DECIDE,
d_nz,PETSC_NULL,o_nz,PETSC_NULL,&A);
ierr = PetscObjectSetName((PetscObject) A, "A");
ierr = MatSetFromOptions(A);
// b
ierr = VecCreate(PETSC_COMM_WORLD, &b);
ierr = PetscObjectSetName((PetscObject) b, "b");
ierr = VecSetSizes(b, n, PETSC_DECIDE);
ierr = VecSetFromOptions(b);
ierr = VecCreate(PETSC_COMM_WORLD,&x);
ierr = PetscObjectSetName((PetscObject) x, "X");
ierr = VecSetSizes(x, n, PETSC_DECIDE);
ierr = VecSetFromOptions(x);
}
示例4: main
int main(int argc, char **argv)
{
PetscErrorCode ierr;
DM dm, rdm;
PetscViewer vwr;
PetscBool flg;
char datafile[PETSC_MAX_PATH_LEN];
MPI_Comm comm;
ierr = PetscInitialize(&argc, &argv, NULL, help);
if (ierr) return ierr;
comm = PETSC_COMM_WORLD;
ierr = PetscViewerCreate(comm, &vwr);CHKERRQ(ierr);
ierr = PetscViewerSetType(vwr, PETSCVIEWERHDF5);CHKERRQ(ierr);
ierr = PetscViewerFileSetMode(vwr, FILE_MODE_READ);CHKERRQ(ierr);
ierr = PetscOptionsGetString(NULL, NULL, "-f", datafile, PETSC_MAX_PATH_LEN, &flg);CHKERRQ(ierr);
if (!flg) SETERRQ(comm, PETSC_ERR_ARG_WRONG, "Must provide meshfile");
ierr = PetscViewerFileSetName(vwr, datafile);CHKERRQ(ierr);
ierr = DMCreate(comm, &dm);CHKERRQ(ierr);
ierr = DMSetType(dm, DMPLEX);CHKERRQ(ierr);
ierr = DMLoad(dm, vwr);CHKERRQ(ierr);
ierr = PetscViewerDestroy(&vwr);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)dm, "BaryDM");CHKERRQ(ierr);
ierr = DMViewFromOptions(dm, NULL, "-dm_view");CHKERRQ(ierr);
ierr = DMPlexSetRefinementUniform(dm, PETSC_TRUE);CHKERRQ(ierr);
ierr = DMRefine(dm, comm, &rdm);CHKERRQ(ierr);
ierr = DMDestroy(&dm);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)rdm, "RefinedDM");CHKERRQ(ierr);
ierr = DMViewFromOptions(rdm, NULL, "-refined_dm_view");CHKERRQ(ierr);
ierr = DMDestroy(&rdm);CHKERRQ(ierr);
ierr = PetscFinalize();
return ierr;
}
示例5: MatLUFactorNumeric_Matlab
PetscErrorCode MatLUFactorNumeric_Matlab(Mat F,Mat A,const MatFactorInfo *info)
{
PetscErrorCode ierr;
size_t len;
char *_A,*name;
PetscReal dtcol = info->dtcol;
PetscFunctionBegin;
if (F->factortype == MAT_FACTOR_ILU || info->dt > 0) {
/* the ILU form is not currently registered */
if (info->dtcol == PETSC_DEFAULT) dtcol = .01;
F->ops->solve = MatSolve_Matlab;
F->factortype = MAT_FACTOR_LU;
ierr = PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),(PetscObject)A);
CHKERRQ(ierr);
_A = ((PetscObject)A)->name;
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"info_%s = struct('droptol',%g,'thresh',%g);",_A,info->dt,dtcol);
CHKERRQ(ierr);
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"[l_%s,u_%s,p_%s] = luinc(%s',info_%s);",_A,_A,_A,_A,_A);
CHKERRQ(ierr);
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"%s = 0;",_A);
CHKERRQ(ierr);
ierr = PetscStrlen(_A,&len);
CHKERRQ(ierr);
ierr = PetscMalloc1(len+2,&name);
CHKERRQ(ierr);
sprintf(name,"_%s",_A);
ierr = PetscObjectSetName((PetscObject)F,name);
CHKERRQ(ierr);
ierr = PetscFree(name);
CHKERRQ(ierr);
} else {
ierr = PetscMatlabEnginePut(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),(PetscObject)A);
CHKERRQ(ierr);
_A = ((PetscObject)A)->name;
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"[l_%s,u_%s,p_%s] = lu(%s',%g);",_A,_A,_A,_A,dtcol);
CHKERRQ(ierr);
ierr = PetscMatlabEngineEvaluate(PETSC_MATLAB_ENGINE_(PetscObjectComm((PetscObject)A)),"%s = 0;",_A);
CHKERRQ(ierr);
ierr = PetscStrlen(_A,&len);
CHKERRQ(ierr);
ierr = PetscMalloc1(len+2,&name);
CHKERRQ(ierr);
sprintf(name,"_%s",_A);
ierr = PetscObjectSetName((PetscObject)F,name);
CHKERRQ(ierr);
ierr = PetscFree(name);
CHKERRQ(ierr);
F->ops->solve = MatSolve_Matlab;
}
PetscFunctionReturn(0);
}
示例6: main
int main(int argc, char **argv)
{
SNES snes; /* nonlinear solver */
DM dm; /* problem definition */
Vec u, r; /* solution and residual */
AppCtx user; /* user-defined work context */
PetscErrorCode ierr;
ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr;
ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr);
ierr = PetscBagCreate(PETSC_COMM_WORLD, sizeof(Parameter), &user.bag);CHKERRQ(ierr);
ierr = SetupParameters(&user);CHKERRQ(ierr);
ierr = SNESCreate(PETSC_COMM_WORLD, &snes);CHKERRQ(ierr);
ierr = CreateMesh(PETSC_COMM_WORLD, &user, &dm);CHKERRQ(ierr);
ierr = SNESSetDM(snes, dm);CHKERRQ(ierr);
ierr = DMSetApplicationContext(dm, &user);CHKERRQ(ierr);
/* Setup problem */
ierr = PetscMalloc(2 * sizeof(void (*)(const PetscReal[], PetscScalar *, void *)), &user.exactFuncs);CHKERRQ(ierr);
ierr = SetupDiscretization(dm, &user);CHKERRQ(ierr);
ierr = DMPlexCreateClosureIndex(dm, NULL);CHKERRQ(ierr);
ierr = DMCreateGlobalVector(dm, &u);CHKERRQ(ierr);
ierr = VecDuplicate(u, &r);CHKERRQ(ierr);
ierr = DMPlexSetSNESLocalFEM(dm,&user,&user,&user);CHKERRQ(ierr);
ierr = SNESSetFromOptions(snes);CHKERRQ(ierr);
{
Parameter *param;
void *ctxs[2];
ierr = PetscBagGetData(user.bag, (void **) ¶m);CHKERRQ(ierr);
ctxs[0] = ctxs[1] = param;
ierr = DMProjectFunction(dm, 0.0, user.exactFuncs, ctxs, INSERT_ALL_VALUES, u);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) u, "Exact Solution");CHKERRQ(ierr);
ierr = VecViewFromOptions(u, NULL, "-exact_vec_view");CHKERRQ(ierr);
}
ierr = DMSNESCheckFromOptions(snes, u, NULL, NULL);CHKERRQ(ierr);
ierr = VecSet(u, 0.0);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) u, "Solution");CHKERRQ(ierr);
ierr = SNESSolve(snes, NULL, u);CHKERRQ(ierr);
ierr = VecViewFromOptions(u, NULL, "-sol_vec_view");CHKERRQ(ierr);
ierr = VecDestroy(&u);CHKERRQ(ierr);
ierr = VecDestroy(&r);CHKERRQ(ierr);
ierr = PetscFree(user.exactFuncs);CHKERRQ(ierr);
ierr = DMDestroy(&dm);CHKERRQ(ierr);
ierr = SNESDestroy(&snes);CHKERRQ(ierr);
ierr = PetscBagDestroy(&user.bag);CHKERRQ(ierr);
ierr = PetscFinalize();
return ierr;
}
示例7: CheckMat
PetscErrorCode CheckMat(Mat A, Mat B, PetscBool usemult, const char* func)
{
Mat Bcheck;
PetscReal error;
PetscErrorCode ierr;
PetscFunctionBeginUser;
if (!usemult) {
if (B) {
MatType Btype;
ierr = MatGetType(B,&Btype);CHKERRQ(ierr);
ierr = MatConvert(A,Btype,MAT_INITIAL_MATRIX,&Bcheck);CHKERRQ(ierr);
} else {
ierr = MatConvert(A,MATAIJ,MAT_INITIAL_MATRIX,&Bcheck);CHKERRQ(ierr);
}
if (B) { /* if B is present, subtract it */
ierr = MatAXPY(Bcheck,-1.,B,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);
}
ierr = MatNorm(Bcheck,NORM_INFINITY,&error);CHKERRQ(ierr);
if (error > PETSC_SQRT_MACHINE_EPSILON) {
ISLocalToGlobalMapping rl2g,cl2g;
ierr = PetscObjectSetName((PetscObject)Bcheck,"Assembled Bcheck");CHKERRQ(ierr);
ierr = MatView(Bcheck,NULL);CHKERRQ(ierr);
if (B) {
ierr = PetscObjectSetName((PetscObject)B,"Assembled AIJ");CHKERRQ(ierr);
ierr = MatView(B,NULL);CHKERRQ(ierr);
ierr = MatDestroy(&Bcheck);CHKERRQ(ierr);
ierr = MatConvert(A,MATAIJ,MAT_INITIAL_MATRIX,&Bcheck);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)Bcheck,"Assembled IS");CHKERRQ(ierr);
ierr = MatView(Bcheck,NULL);CHKERRQ(ierr);
}
ierr = MatDestroy(&Bcheck);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)A,"MatIS");CHKERRQ(ierr);
ierr = MatView(A,NULL);CHKERRQ(ierr);
ierr = MatGetLocalToGlobalMapping(A,&rl2g,&cl2g);CHKERRQ(ierr);
ierr = ISLocalToGlobalMappingView(rl2g,NULL);CHKERRQ(ierr);
ierr = ISLocalToGlobalMappingView(cl2g,NULL);CHKERRQ(ierr);
SETERRQ2(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"ERROR ON %s: %g",func,error);
}
ierr = MatDestroy(&Bcheck);CHKERRQ(ierr);
} else {
PetscBool ok,okt;
ierr = MatMultEqual(A,B,3,&ok);CHKERRQ(ierr);
ierr = MatMultTransposeEqual(A,B,3,&okt);CHKERRQ(ierr);
if (!ok || !okt) SETERRQ3(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"ERROR ON %s: mult ok ? %d, multtranspose ok ? %d",func,ok,okt);
}
PetscFunctionReturn(0);
}
示例8: CreateMesh
static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *newdm)
{
PetscInt dim = user->dim;
PetscBool cellSimplex = user->cellSimplex;
PetscErrorCode ierr;
PetscFunctionBegin;
switch (dim) {
case 2:
if (cellSimplex) {
ierr = CreateSimplex_2D(comm, newdm);CHKERRQ(ierr);
} else {
ierr = CreateQuad_2D(comm, newdm);CHKERRQ(ierr);
}
break;
case 3:
if (cellSimplex) {
ierr = CreateSimplex_3D(comm, newdm);CHKERRQ(ierr);
} else {
ierr = CreateHex_3D(comm, newdm);CHKERRQ(ierr);
}
break;
default:
SETERRQ1(comm, PETSC_ERR_ARG_OUTOFRANGE, "Cannot make meshes for dimension %d", dim);
}
if (user->refinementLimit > 0.0) {
DM rdm;
const char *name;
ierr = DMPlexSetRefinementUniform(*newdm, PETSC_FALSE);CHKERRQ(ierr);
ierr = DMPlexSetRefinementLimit(*newdm, user->refinementLimit);CHKERRQ(ierr);
ierr = DMRefine(*newdm, PETSC_COMM_SELF, &rdm);CHKERRQ(ierr);
ierr = PetscObjectGetName((PetscObject) *newdm, &name);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) rdm, name);CHKERRQ(ierr);
ierr = DMDestroy(newdm);CHKERRQ(ierr);
*newdm = rdm;
}
if (user->interpolate) {
DM idm = NULL;
const char *name;
ierr = DMPlexInterpolate(*newdm, &idm);CHKERRQ(ierr);
ierr = PetscObjectGetName((PetscObject) *newdm, &name);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) idm, name);CHKERRQ(ierr);
ierr = DMPlexCopyCoordinates(*newdm, idm);CHKERRQ(ierr);
ierr = DMDestroy(newdm);CHKERRQ(ierr);
*newdm = idm;
}
ierr = DMSetFromOptions(*newdm);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例9: EvaluateJacobian
static PetscErrorCode EvaluateJacobian(Tao tao, Vec X, Mat J, Mat JPre, void *ptr)
{
AppCtx *user = (AppCtx *)ptr;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscObjectSetName((PetscObject)X,"X");CHKERRQ(ierr);
ierr = PetscMatlabEnginePut(user->mengine,(PetscObject)X);CHKERRQ(ierr);
ierr = PetscMatlabEngineEvaluate(user->mengine,"J = jac(X);");CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)J,"J");CHKERRQ(ierr);
ierr = PetscMatlabEngineGet(user->mengine,(PetscObject)J);CHKERRQ(ierr);
ierr = MatAssemblyBegin(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(J,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例10: TaoPounders
static PetscErrorCode TaoPounders(AppCtx *user)
{
PetscErrorCode ierr;
Tao tao;
Vec X, F;
Mat J;
char buf[1024];
PetscFunctionBegin;
/* Set the values for the algorithm options we want to use */
sprintf(buf,"%d",user->nfmax);
ierr = PetscOptionsSetValue(NULL,"-tao_max_funcs",buf);CHKERRQ(ierr);
sprintf(buf,"%d",user->npmax);
ierr = PetscOptionsSetValue(NULL,"-tao_pounders_npmax",buf);CHKERRQ(ierr);
sprintf(buf,"%5.4e",user->delta);
ierr = PetscOptionsSetValue(NULL,"-tao_pounders_delta",buf);CHKERRQ(ierr);
/* Create the TAO objects and set the type */
ierr = TaoCreate(PETSC_COMM_SELF,&tao);CHKERRQ(ierr);
/* Create starting point and initialize */
ierr = VecCreateSeq(PETSC_COMM_SELF,user->n,&X);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)X,"X0");CHKERRQ(ierr);
ierr = PetscMatlabEngineGet(user->mengine,(PetscObject)X);CHKERRQ(ierr);
ierr = TaoSetInitialVector(tao,X);CHKERRQ(ierr);
/* Create residuals vector and set residual function */
ierr = VecCreateSeq(PETSC_COMM_SELF,user->m,&F);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)F,"F");CHKERRQ(ierr);
ierr = TaoSetResidualRoutine(tao,F,EvaluateResidual,(void*)user);CHKERRQ(ierr);
/* Create Jacobian matrix and set residual Jacobian routine */
ierr = MatCreateSeqAIJ(PETSC_COMM_SELF,user->m,user->n,user->n,NULL,&J);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)J,"J");CHKERRQ(ierr);
ierr = TaoSetResidualJacobianRoutine(tao,J,J,EvaluateJacobian,(void*)user);CHKERRQ(ierr);
/* Solve the problem */
ierr = TaoSetType(tao,TAOPOUNDERS);CHKERRQ(ierr);
ierr = TaoSetFromOptions(tao);CHKERRQ(ierr);
ierr = TaoSolve(tao);CHKERRQ(ierr);
/* Finish the problem */
ierr = VecDestroy(&X);CHKERRQ(ierr);
ierr = VecDestroy(&F);CHKERRQ(ierr);
ierr = TaoDestroy(&tao);CHKERRQ(ierr);
PetscFunctionReturn(0);
}
示例11: PetscViewerCreate
// Write the sub mesh into a HDF5 file.
PetscErrorCode ProbeVolume::writeSubMeshHDF5(const std::string &filePath)
{
PetscErrorCode ierr;
PetscFunctionBeginUser;
// only the first process in the communicator write the sub-mesh into a file
if (commRank == 0)
{
// because only one process is involved in writing the sub-mesh,
// we need to create a temporary viewer
PetscViewer viewer2;
ierr = PetscViewerCreate(PETSC_COMM_SELF, &viewer2); CHKERRQ(ierr);
ierr = PetscViewerSetType(viewer2, PETSCVIEWERHDF5); CHKERRQ(ierr);
ierr = PetscViewerFileSetMode(viewer2, FILE_MODE_WRITE); CHKERRQ(ierr);
ierr = PetscViewerFileSetName(
viewer2, filePath.c_str()); CHKERRQ(ierr);
ierr = PetscViewerHDF5PushGroup(viewer2, "mesh"); CHKERRQ(ierr);
std::vector<std::string> dirs{"x", "y", "z"};
for (unsigned int d = 0; d < coord.size(); ++d)
{
Vec tmp;
ierr = VecCreateSeqWithArray(PETSC_COMM_SELF, 1, nPtsDir[d],
&coord[d][0], &tmp); CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) tmp,
dirs[d].c_str()); CHKERRQ(ierr);
ierr = VecView(tmp, viewer2); CHKERRQ(ierr);
ierr = VecDestroy(&tmp); CHKERRQ(ierr);
}
ierr = PetscViewerDestroy(&viewer2); CHKERRQ(ierr);
}
PetscFunctionReturn(0);
} // ProbeVolume::writeSubMeshHDF5
示例12: BVResize_Mat
PetscErrorCode BVResize_Mat(BV bv,PetscInt m,PetscBool copy)
{
PetscErrorCode ierr;
BV_MAT *ctx = (BV_MAT*)bv->data;
PetscScalar *pA,*pnew;
Mat A;
char str[50];
PetscFunctionBegin;
ierr = MatCreateDense(PetscObjectComm((PetscObject)bv->t),bv->n,PETSC_DECIDE,PETSC_DECIDE,m,NULL,&A);CHKERRQ(ierr);
ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
ierr = PetscLogObjectParent((PetscObject)bv,(PetscObject)A);CHKERRQ(ierr);
if (((PetscObject)bv)->name) {
ierr = PetscSNPrintf(str,50,"%s_0",((PetscObject)bv)->name);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)A,str);CHKERRQ(ierr);
}
if (copy) {
ierr = MatDenseGetArray(ctx->A,&pA);CHKERRQ(ierr);
ierr = MatDenseGetArray(A,&pnew);CHKERRQ(ierr);
ierr = PetscMemcpy(pnew,pA,PetscMin(m,bv->m)*bv->n*sizeof(PetscScalar));CHKERRQ(ierr);
ierr = MatDenseRestoreArray(ctx->A,&pA);CHKERRQ(ierr);
ierr = MatDenseRestoreArray(A,&pnew);CHKERRQ(ierr);
}
ierr = MatDestroy(&ctx->A);CHKERRQ(ierr);
ctx->A = A;
PetscFunctionReturn(0);
}
示例13: PetscViewerGetSingleton_ASCII
PetscErrorCode PetscViewerGetSingleton_ASCII(PetscViewer viewer,PetscViewer *outviewer)
{
PetscMPIInt rank;
PetscErrorCode ierr;
PetscViewer_ASCII *vascii = (PetscViewer_ASCII*)viewer->data,*ovascii;
const char *name;
PetscFunctionBegin;
if (vascii->sviewer) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ORDER,"Singleton already obtained from PetscViewer and not restored");
ierr = PetscViewerCreate(PETSC_COMM_SELF,outviewer);CHKERRQ(ierr);
ierr = PetscViewerSetType(*outviewer,PETSCVIEWERASCII);CHKERRQ(ierr);
ovascii = (PetscViewer_ASCII*)(*outviewer)->data;
ovascii->fd = vascii->fd;
ovascii->tab = vascii->tab;
vascii->sviewer = *outviewer;
(*outviewer)->format = viewer->format;
ierr = PetscObjectGetName((PetscObject)viewer,&name);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject)(*outviewer),name);CHKERRQ(ierr);
ierr = MPI_Comm_rank(PetscObjectComm((PetscObject)viewer),&rank);CHKERRQ(ierr);
((PetscViewer_ASCII*)((*outviewer)->data))->bviewer = viewer;
(*outviewer)->ops->destroy = PetscViewerDestroy_ASCII_Singleton;
if (rank) (*outviewer)->ops->flush = 0;
else (*outviewer)->ops->flush = PetscViewerFlush_ASCII_Singleton_0;
PetscFunctionReturn(0);
}
示例14: CreateMesh
PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
{
PetscInt dim = user->dim;
PetscBool interpolate = user->interpolate;
PetscReal refinementLimit = user->refinementLimit;
const char *partitioner = "chaco";
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = PetscLogEventBegin(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);
ierr = DMComplexCreateBoxMesh(comm, dim, interpolate, dm);CHKERRQ(ierr);
{
DM refinedMesh = PETSC_NULL;
DM distributedMesh = PETSC_NULL;
/* Refine mesh using a volume constraint */
ierr = DMComplexSetRefinementLimit(*dm, refinementLimit);CHKERRQ(ierr);
ierr = DMRefine(*dm, comm, &refinedMesh);CHKERRQ(ierr);
if (refinedMesh) {
ierr = DMDestroy(dm);CHKERRQ(ierr);
*dm = refinedMesh;
}
/* Distribute mesh over processes */
ierr = DMComplexDistribute(*dm, partitioner, &distributedMesh);CHKERRQ(ierr);
if (distributedMesh) {
ierr = DMDestroy(dm);CHKERRQ(ierr);
*dm = distributedMesh;
}
}
ierr = PetscObjectSetName((PetscObject) *dm, "Simplical Mesh");CHKERRQ(ierr);
ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
ierr = PetscLogEventEnd(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);
user->dm = *dm;
PetscFunctionReturn(0);
}
示例15: DMPlexBuildCoordinates_Private
/*
This takes as input the coordinates for each vertex
*/
PetscErrorCode DMPlexBuildCoordinates_Private(DM dm, PetscInt spaceDim, PetscInt numCells, PetscInt numVertices, const double vertexCoords[])
{
PetscSection coordSection;
Vec coordinates;
PetscScalar *coords;
PetscInt coordSize, v, d;
PetscErrorCode ierr;
PetscFunctionBegin;
ierr = DMPlexGetCoordinateSection(dm, &coordSection);CHKERRQ(ierr);
ierr = PetscSectionSetNumFields(coordSection, 1);CHKERRQ(ierr);
ierr = PetscSectionSetFieldComponents(coordSection, 0, spaceDim);CHKERRQ(ierr);
ierr = PetscSectionSetChart(coordSection, numCells, numCells + numVertices);CHKERRQ(ierr);
for (v = numCells; v < numCells+numVertices; ++v) {
ierr = PetscSectionSetDof(coordSection, v, spaceDim);CHKERRQ(ierr);
ierr = PetscSectionSetFieldDof(coordSection, v, 0, spaceDim);CHKERRQ(ierr);
}
ierr = PetscSectionSetUp(coordSection);CHKERRQ(ierr);
ierr = PetscSectionGetStorageSize(coordSection, &coordSize);CHKERRQ(ierr);
ierr = VecCreate(PetscObjectComm((PetscObject)dm), &coordinates);CHKERRQ(ierr);
ierr = PetscObjectSetName((PetscObject) coordinates, "coordinates");CHKERRQ(ierr);
ierr = VecSetSizes(coordinates, coordSize, PETSC_DETERMINE);CHKERRQ(ierr);
ierr = VecSetFromOptions(coordinates);CHKERRQ(ierr);
ierr = VecGetArray(coordinates, &coords);CHKERRQ(ierr);
for (v = 0; v < numVertices; ++v) {
for (d = 0; d < spaceDim; ++d) {
coords[v*spaceDim+d] = vertexCoords[v*spaceDim+d];
}
}
ierr = VecRestoreArray(coordinates, &coords);CHKERRQ(ierr);
ierr = DMSetCoordinatesLocal(dm, coordinates);CHKERRQ(ierr);
ierr = VecDestroy(&coordinates);CHKERRQ(ierr);
PetscFunctionReturn(0);
}