您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ DMSetFromOptions函数代码示例

51自学网 2021-06-01 20:22:50
  C++
这篇教程C++ DMSetFromOptions函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中DMSetFromOptions函数的典型用法代码示例。如果您正苦于以下问题:C++ DMSetFromOptions函数的具体用法?C++ DMSetFromOptions怎么用?C++ DMSetFromOptions使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了DMSetFromOptions函数的22个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: DMCreateLibMesh

  void PetscDMNonlinearSolver<T>::init()  {    PetscErrorCode ierr;    DM dm;    this->PetscNonlinearSolver<T>::init();    // Attaching a DM with the function and Jacobian callbacks to SNES.    ierr = DMCreateLibMesh(libMesh::COMM_WORLD, this->system(), &dm); CHKERRABORT(libMesh::COMM_WORLD, ierr);    ierr = DMSetFromOptions(dm);               CHKERRABORT(libMesh::COMM_WORLD, ierr);    ierr = DMSetUp(dm);                        CHKERRABORT(libMesh::COMM_WORLD, ierr);    ierr = SNESSetDM(this->_snes, dm);         CHKERRABORT(libMesh::COMM_WORLD, ierr);    // SNES now owns the reference to dm.    ierr = DMDestroy(&dm);                     CHKERRABORT(libMesh::COMM_WORLD, ierr);    KSP ksp;    ierr = SNESGetKSP (this->_snes, &ksp);     CHKERRABORT(libMesh::COMM_WORLD,ierr);    // Set the tolerances for the iterative solver.  Use the user-supplied    // tolerance for the relative residual & leave the others at default values    ierr = KSPSetTolerances (ksp, this->initial_linear_tolerance, PETSC_DEFAULT,PETSC_DEFAULT, this->max_linear_iterations); CHKERRABORT(libMesh::COMM_WORLD,ierr);    // Set the tolerances for the non-linear solver.    ierr = SNESSetTolerances(this->_snes,			     this->absolute_residual_tolerance,			     this->relative_residual_tolerance,			     this->absolute_step_tolerance,			     this->max_nonlinear_iterations,			     this->max_function_evaluations);    CHKERRABORT(libMesh::COMM_WORLD,ierr);    //Pull in command-line options    KSPSetFromOptions(ksp);    SNESSetFromOptions(this->_snes);  }
开发者ID:paulovieira,项目名称:libmesh,代码行数:33,


示例2: 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    = user->partitioner;  PetscErrorCode ierr;  PetscFunctionBeginUser;  ierr = PetscLogEventBegin(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);  ierr = DMPlexCreateBoxMesh(comm, dim, interpolate, dm);CHKERRQ(ierr);  {    DM refinedMesh     = NULL;    DM distributedMesh = NULL;    /* Refine mesh using a volume constraint */    ierr = DMPlexSetRefinementLimit(*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 = DMPlexDistribute(*dm, partitioner, 0, &distributedMesh);CHKERRQ(ierr);    if (distributedMesh) {      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = distributedMesh;    }  }  ierr     = DMSetFromOptions(*dm);CHKERRQ(ierr);  ierr     = PetscLogEventEnd(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);  user->dm = *dm;  PetscFunctionReturn(0);}
开发者ID:feelpp,项目名称:debian-petsc,代码行数:34,


示例3: main

int main(int argc, char **argv){  DM             dm;  char           typeString[256] = {'/0'};  PetscViewer    viewer          = NULL;  PetscBool      flg;  PetscErrorCode ierr;  ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr;  ierr = DMCreate(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr);  ierr = PetscStrncpy(typeString,DMFOREST,256);CHKERRQ(ierr);  ierr = PetscOptionsBegin(PETSC_COMM_WORLD,NULL,"DM Forest example options",NULL);CHKERRQ(ierr);  ierr = PetscOptionsString("-dm_type","The type of the dm",NULL,DMFOREST,typeString,sizeof(typeString),NULL);CHKERRQ(ierr);  ierr = PetscOptionsEnd();CHKERRQ(ierr);  ierr = DMSetType(dm,(DMType) typeString);CHKERRQ(ierr);  ierr = DMSetFromOptions(dm);CHKERRQ(ierr);  ierr = DMSetUp(dm);CHKERRQ(ierr);  ierr = PetscOptionsGetViewer(PETSC_COMM_WORLD,NULL,"-dm_view",&viewer,NULL,&flg);CHKERRQ(ierr);  if (flg) {    ierr = DMView(dm,viewer);CHKERRQ(ierr);  }  ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);  ierr = DMDestroy(&dm);CHKERRQ(ierr);  ierr = PetscFinalize();  return ierr;}
开发者ID:tom-klotz,项目名称:petsc,代码行数:26,


示例4: petscSetupDM

void petscSetupDM (NonlinearSystem & nl) {#if !PETSC_VERSION_LESS_THAN(3,3,0)  PetscErrorCode  ierr;  // Initialize the part of the DM package that's packaged with Moose; in the PETSc source tree this call would be in DMInitializePackage()  ierr = DMMooseRegisterAll();  CHKERRABORT(nl.comm().get(),ierr);  // Create and set up the DM that will consume the split options and deal with block matrices.  PetscNonlinearSolver<Number> *petsc_solver = dynamic_cast<PetscNonlinearSolver<Number> *>(nl.sys().nonlinear_solver.get());  SNES snes = petsc_solver->snes();  /* FIXME: reset the DM, do not recreate it anew every time? */  DM dm = PETSC_NULL;  ierr = DMCreateMoose(nl.comm().get(), nl, &dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = DMSetFromOptions(dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = DMSetUp(dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = SNESSetDM(snes,dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = DMDestroy(&dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = SNESSetUpdate(snes,SNESUpdateDMMoose);  CHKERRABORT(nl.comm().get(),ierr);#endif}
开发者ID:AhmedAly83,项目名称:moose,代码行数:26,


示例5: main

int main(int argc,char **argv){  DM             dm;  Vec            X,Y;  PetscErrorCode ierr;  PetscInt       dof = 10;  ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;  ierr = PetscOptionsGetInt(NULL,NULL,"-dof",&dof,NULL);CHKERRQ(ierr);  ierr = DMDACreate3d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,-128,-128,-128,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,dof,1,NULL,NULL,NULL,&dm);CHKERRQ(ierr);  ierr = DMSetFromOptions(dm);CHKERRQ(ierr);  ierr = DMSetUp(dm);CHKERRQ(ierr);  ierr = PetscMemoryTrace("DMDACreate3d        ");CHKERRQ(ierr);  ierr = DMCreateGlobalVector(dm,&X);CHKERRQ(ierr);  ierr = PetscMemoryTrace("DMCreateGlobalVector");  ierr = DMCreateGlobalVector(dm,&Y);CHKERRQ(ierr);  ierr = PetscMemoryTrace("DMCreateGlobalVector");CHKERRQ(ierr);  ierr = VecDestroy(&X);CHKERRQ(ierr);  ierr = VecDestroy(&Y);CHKERRQ(ierr);  ierr = DMDestroy(&dm);CHKERRQ(ierr);  ierr = PetscFinalize();  return ierr;}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:25,


示例6: main

int main(int argc, char **argv){    Mat            A;    KSP            ksp;    DM             shell;    Vec            *left, *right;    MPI_Comm       c;    PetscErrorCode ierr;    ierr = PetscInitialize(&argc, &argv, NULL, NULL);if (ierr) return ierr;    c = PETSC_COMM_WORLD;    ierr = MatCreate(c, &A); CHKERRQ(ierr);    ierr = MatSetSizes(A, 1, 1, PETSC_DECIDE, PETSC_DECIDE); CHKERRQ(ierr);    ierr = MatSetFromOptions(A); CHKERRQ(ierr);    ierr = MatSetUp(A); CHKERRQ(ierr);    ierr = KSPCreate(c, &ksp); CHKERRQ(ierr);    ierr = KSPSetOperators(ksp, A, A); CHKERRQ(ierr);    ierr = KSPSetFromOptions(ksp); CHKERRQ(ierr);    ierr = DMShellCreate(c, &shell); CHKERRQ(ierr);    ierr = DMSetFromOptions(shell); CHKERRQ(ierr);    ierr = DMSetUp(shell); CHKERRQ(ierr);    ierr = KSPSetDM(ksp, shell); CHKERRQ(ierr);    ierr = KSPCreateVecs(ksp, 1, &right, 1, &left); CHKERRQ(ierr);    ierr = VecView(right[0], PETSC_VIEWER_STDOUT_(c));CHKERRQ(ierr);    ierr = VecDestroyVecs(1,&right); CHKERRQ(ierr);    ierr = VecDestroyVecs(1,&left); CHKERRQ(ierr);    ierr = DMDestroy(&shell); CHKERRQ(ierr);    ierr = KSPDestroy(&ksp); CHKERRQ(ierr);    ierr = MatDestroy(&A); CHKERRQ(ierr);    PetscFinalize();    return 0;}
开发者ID:tom-klotz,项目名称:petsc,代码行数:35,


示例7: CreateMesh

PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm){  const char    *filename = user->filename;  PetscInt       dim      = user->dim;  size_t         len;  PetscErrorCode ierr;  PetscFunctionBegin;  ierr = PetscStrlen(filename, &len);CHKERRQ(ierr);  if (!len) {ierr = DMPlexCreateBoxMesh(comm, dim, PETSC_TRUE, dm);CHKERRQ(ierr);}  else      {ierr = DMPlexCreateFromFile(comm, filename, PETSC_TRUE, dm);CHKERRQ(ierr);}  ierr = DMViewFromOptions(*dm, NULL, "-orig_dm_view");CHKERRQ(ierr);  {    DM distributedMesh = NULL;    ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);    if (distributedMesh) {      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = distributedMesh;      ierr = DMViewFromOptions(*dm, NULL, "-dist_dm_view");CHKERRQ(ierr);    }  }  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  if (user->uninterpolate) {    DM udm = NULL;    ierr = DMPlexUninterpolate(*dm, &udm);CHKERRQ(ierr);    ierr = DMDestroy(dm);CHKERRQ(ierr);    *dm  = udm;    ierr = DMViewFromOptions(*dm, NULL, "-un_dm_view");CHKERRQ(ierr);  }  ierr = PetscObjectSetName((PetscObject) *dm, "Test Mesh");CHKERRQ(ierr);  ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:masa-ito,项目名称:PETScToPoisson,代码行数:35,


示例8: CreateMesh

static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *ctx, DM *dm){  PetscInt       dim         = ctx->dim;  PetscBool      cellSimplex = ctx->cellSimplex;  const char    *filename    = ctx->filename;  const PetscInt cells[3]    = {1, 1, 1};  size_t         len;  PetscMPIInt    rank, size;  PetscErrorCode ierr;  PetscFunctionBegin;  ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr);  ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr);  ierr = PetscStrlen(filename, &len);CHKERRQ(ierr);  if (len) {ierr = DMPlexCreateFromFile(comm, filename, PETSC_TRUE, dm);CHKERRQ(ierr);}  else     {ierr = DMPlexCreateBoxMesh(comm, dim, cellSimplex, cells, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr);}  {    DM               distributedMesh = NULL;    PetscPartitioner part;    ierr = DMPlexGetPartitioner(*dm, &part);CHKERRQ(ierr);    ierr = PetscPartitionerSetFromOptions(part);CHKERRQ(ierr);    /* Distribute mesh over processes */    ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);    if (distributedMesh) {      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = distributedMesh;    }  }  ierr = PetscObjectSetName((PetscObject) *dm, "Mesh");CHKERRQ(ierr);  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:petsc,项目名称:petsc,代码行数:35,


示例9: CreateMesh

PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm){  PetscInt       dim             = user->dim;  PetscBool      interpolate     = user->interpolate;  PetscReal      refinementLimit = user->refinementLimit;  PetscErrorCode ierr;  PetscFunctionBegin;  ierr = PetscLogEventBegin(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);  ierr = DMMeshCreateBoxMesh(comm, dim, interpolate, dm);CHKERRQ(ierr);  {    DM refinedMesh = PETSC_NULL;    /* Refine mesh using a volume constraint */    ierr = DMMeshRefine(*dm, refinementLimit, interpolate, &refinedMesh);CHKERRQ(ierr);    if (refinedMesh) {      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = refinedMesh;    }  }  ierr = PetscObjectSetName((PetscObject) *dm, "Serial Mesh");CHKERRQ(ierr);  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  ierr = PetscLogEventEnd(user->createMeshEvent,0,0,0,0);CHKERRQ(ierr);  user->dm = *dm;  PetscFunctionReturn(0);}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:26,


示例10: CreateMesh

PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm){  PetscInt       dim               = user->dim;  PetscBool      refinementUniform = user->refinementUniform;  PetscBool      cellSimplex       = user->cellSimplex;  const char    *partitioner       = "chaco";  PetscMPIInt    rank;  PetscErrorCode ierr;  PetscFunctionBegin;  ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr);  ierr = DMCreate(comm, dm);CHKERRQ(ierr);  ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr);  ierr = DMPlexSetDimension(*dm, dim);CHKERRQ(ierr);  switch(dim) {  case 2:    if (cellSimplex) {      ierr = CreateSimplexHybrid_2D(comm, *dm);CHKERRQ(ierr);    } else {      SETERRQ(comm, PETSC_ERR_ARG_OUTOFRANGE, "Cannot make hybrid meshes for quadrilaterals");    }    break;  default:    SETERRQ1(comm, PETSC_ERR_ARG_OUTOFRANGE, "Cannot make hybrid meshes for dimension %d", dim);  }  {    DM refinedMesh     = PETSC_NULL;    DM distributedMesh = PETSC_NULL;    /* Distribute mesh over processes */    ierr = DMPlexDistribute(*dm, partitioner, 0, &distributedMesh);CHKERRQ(ierr);    if (distributedMesh) {      PetscInt cMax = PETSC_DETERMINE, fMax = PETSC_DETERMINE;      /* Do not know how to preserve this after distribution */      if (rank) {        cMax = 1;        fMax = 11;      }      ierr = DMPlexSetHybridBounds(distributedMesh, cMax, PETSC_DETERMINE, fMax, PETSC_DETERMINE);CHKERRQ(ierr);      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = distributedMesh;    }    if (refinementUniform) {      ierr = DMPlexSetRefinementUniform(*dm, refinementUniform);CHKERRQ(ierr);      ierr = DMRefine(*dm, comm, &refinedMesh);CHKERRQ(ierr);      if (refinedMesh) {        ierr = DMDestroy(dm);CHKERRQ(ierr);        *dm  = refinedMesh;      }    }  }  ierr = PetscObjectSetName((PetscObject) *dm, "Hybrid Mesh");CHKERRQ(ierr);  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  user->dm = *dm;  PetscFunctionReturn(0);}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:57,


示例11: CreateTensorProductHybrid_2D

PetscErrorCode CreateTensorProductHybrid_2D(MPI_Comm comm, PetscInt testNum, DM *dm){  DM             idm, hdm = NULL;  DMLabel        faultLabel, hybridLabel;  PetscInt       p;  PetscMPIInt    rank;  PetscErrorCode ierr;  PetscFunctionBegin;  ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr);  if (!rank) {    PetscInt    numPoints[2]        = {6, 2};    PetscInt    coneSize[8]         = {4, 4, 0, 0, 0, 0, 0, 0};    PetscInt    cones[8]            = {2, 3, 4, 5,  3, 6, 7, 4,};    PetscInt    coneOrientations[8] = {0, 0, 0, 0,  0, 0, 0, 0};    PetscScalar vertexCoords[12]    = {-1.0, -0.5,  0.0, -0.5,  0.0, 0.5,  -1.0, 0.5,  1.0, -0.5,  1.0, 0.5};    PetscInt    faultPoints[2]      = {3, 4};    ierr = DMPlexCreateFromDAG(*dm, 1, numPoints, coneSize, cones, coneOrientations, vertexCoords);CHKERRQ(ierr);    for(p = 0; p < 2; ++p) {ierr = DMSetLabelValue(*dm, "fault", faultPoints[p], 1);CHKERRQ(ierr);}    ierr = PetscObjectSetOptionsPrefix((PetscObject) *dm, "orig_");CHKERRQ(ierr);    ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);    ierr = DMPlexInterpolate(*dm, &idm);CHKERRQ(ierr);    ierr = PetscObjectSetOptionsPrefix((PetscObject) idm, "in_");CHKERRQ(ierr);    ierr = DMSetFromOptions(idm);CHKERRQ(ierr);    ierr = DMViewFromOptions(idm, NULL, "-dm_view");CHKERRQ(ierr);    ierr = DMGetLabel(*dm, "fault", &faultLabel);CHKERRQ(ierr);    ierr = DMPlexCreateHybridMesh(idm, faultLabel, NULL, &hybridLabel, NULL, NULL, &hdm);CHKERRQ(ierr);    ierr = DMLabelDestroy(&hybridLabel);CHKERRQ(ierr);  } else {    PetscInt numPoints[3] = {0, 0, 0};    ierr = DMPlexCreateFromDAG(*dm, 1, numPoints, NULL, NULL, NULL, NULL);CHKERRQ(ierr);    ierr = DMPlexInterpolate(*dm, &idm);CHKERRQ(ierr);    ierr = DMViewFromOptions(idm, NULL, "-in_dm_view");CHKERRQ(ierr);    ierr = DMPlexCreateHybridMesh(idm, NULL, NULL, NULL, NULL, NULL, &hdm);CHKERRQ(ierr);  }  ierr = DMDestroy(&idm);CHKERRQ(ierr);  ierr = DMDestroy(dm);CHKERRQ(ierr);  *dm  = hdm;  PetscFunctionReturn(0);}
开发者ID:petsc,项目名称:petsc,代码行数:42,


示例12: CreateMesh

static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm){  PetscErrorCode ierr;  PetscFunctionBeginUser;  /* Create box mesh */  ierr = DMPlexCreateBoxMesh(comm, user->dim, user->simplex, user->cells, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr);  /* Distribute mesh over processes */  {    DM               dmDist = NULL;    PetscPartitioner part;    ierr = DMPlexGetPartitioner(*dm, &part);CHKERRQ(ierr);    ierr = PetscPartitionerSetFromOptions(part);CHKERRQ(ierr);    ierr = DMPlexDistribute(*dm, 0, NULL, &dmDist);CHKERRQ(ierr);    if (dmDist) {      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = dmDist;    }  }  /* TODO: This should be pulled into the library */  {    char      convType[256];    PetscBool flg;    ierr = PetscOptionsBegin(comm, "", "Mesh conversion options", "DMPLEX");CHKERRQ(ierr);    ierr = PetscOptionsFList("-dm_plex_convert_type","Convert DMPlex to another format","ex12",DMList,DMPLEX,convType,256,&flg);CHKERRQ(ierr);    ierr = PetscOptionsEnd();    if (flg) {      DM dmConv;      ierr = DMConvert(*dm,convType,&dmConv);CHKERRQ(ierr);      if (dmConv) {        ierr = DMDestroy(dm);CHKERRQ(ierr);        *dm  = dmConv;      }    }  }  /* TODO: This should be pulled into the library */  ierr = DMLocalizeCoordinates(*dm);CHKERRQ(ierr);  ierr = PetscObjectSetName((PetscObject) *dm, "Mesh");CHKERRQ(ierr);  ierr = DMSetApplicationContext(*dm, user);CHKERRQ(ierr);  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);  /* TODO: Add a hierachical viewer */  if (user->spectral) {    PetscInt  planeDir[2]   = {0,  1};    PetscReal planeCoord[2] = {0., 1.};    ierr = CreateSpectralPlanes(*dm, 2, planeDir, planeCoord, user);CHKERRQ(ierr);  }  PetscFunctionReturn(0);}
开发者ID:petsc,项目名称:petsc,代码行数:54,


示例13: PETScExternalSolverCreate

PetscErrorCodePETScExternalSolverCreate(MPI_Comm comm, TS * ts){  DM da;  PetscErrorCode ierr;  PetscFunctionBeginUser;  /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     Create distributed array (DMDA) to manage parallel grid and vectors  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */  ierr = DMDACreate2d(comm,                      DM_BOUNDARY_NONE,                      DM_BOUNDARY_NONE,                      DMDA_STENCIL_STAR,                      11,                      11,                      PETSC_DECIDE,                      PETSC_DECIDE,                      1,                      1,                      NULL,                      NULL,                      &da);  CHKERRQ(ierr);  ierr = DMSetFromOptions(da);  CHKERRQ(ierr);  ierr = DMSetUp(da);  CHKERRQ(ierr);  /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     Create timestepping solver context     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */  ierr = TSCreate(comm, ts);  CHKERRQ(ierr);  ierr = TSSetProblemType(*ts, TS_NONLINEAR);  CHKERRQ(ierr);  ierr = TSSetType(*ts, TSBEULER);  CHKERRQ(ierr);  ierr = TSSetDM(*ts, da);  CHKERRQ(ierr);  ierr = DMDestroy(&da);  CHKERRQ(ierr);  ierr = TSSetIFunction(*ts, NULL, FormIFunction, nullptr);  CHKERRQ(ierr);  /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   Set Jacobian evaluation routine  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */  ierr = TSSetIJacobian(*ts, NULL, NULL, FormIJacobian, NULL);  CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:jwpeterson,项目名称:moose,代码行数:53,


示例14: 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);}
开发者ID:tom-klotz,项目名称:petsc,代码行数:51,


示例15: DMLibMeshCreateDomainDecompositionDM

PetscErrorCode DMLibMeshCreateDomainDecompositionDM(DM dm, PetscInt dnumber, PetscInt* dsizes, char*** dblocklists, DM* ddm){  PetscErrorCode ierr;  PetscBool islibmesh;  PetscFunctionBegin;  PetscValidHeaderSpecific(dm,DM_CLASSID,1);  ierr = PetscObjectTypeCompare((PetscObject)dm, DMLIBMESH,&islibmesh);  if(!islibmesh) SETERRQ2(((PetscObject)dm)->comm, PETSC_ERR_ARG_WRONG, "Got DM oftype %s, not of type %s", ((PetscObject)dm)->type_name, DMLIBMESH);  if(dnumber < 0) SETERRQ1(((PetscObject)dm)->comm, PETSC_ERR_ARG_WRONG, "Negative number %D of decomposition parts", dnumber);  PetscValidPointer(ddm,5);  DM_libMesh *dlm = (DM_libMesh *)(dm->data);  ierr = DMCreate(((PetscObject)dm)->comm, ddm); CHKERRQ(ierr);  ierr = DMSetType(*ddm, DMLIBMESH);             CHKERRQ(ierr);  DM_libMesh *ddlm = (DM_libMesh *)((*ddm)->data);  ddlm->sys = dlm->sys;  ddlm->varids   = dlm->varids;   ddlm->varnames = dlm->varnames;   ddlm->blockids   = dlm->blockids;   ddlm->blocknames = dlm->blocknames;   ddlm->decomposition = new(std::vector<std::set<unsigned int> >);  ddlm->decomposition_type = DMLIBMESH_DOMAIN_DECOMPOSITION;  if(dnumber) {    for(PetscInt d = 0; d < dnumber; ++d) {      if(dsizes[d] < 0) SETERRQ2(((PetscObject)dm)->comm, PETSC_ERR_ARG_WRONG, "Negative size %D of decomposition part %D", dsizes[d],d);      ddlm->decomposition->push_back(std::set<unsigned int>());      for(PetscInt b = 0; b < dsizes[d]; ++b) {	std::string bname(dblocklists[d][b]);	std::map<std::string, unsigned int>::const_iterator bit = dlm->blockids->find(bname);	if(bit == dlm->blockids->end()) 	  SETERRQ3(((PetscObject)dm)->comm, PETSC_ERR_ARG_WRONG, "Block %D on the %D-th list with name %s is not owned by this DM", b, d, dblocklists[d][b]);	unsigned int bid = bit->second;	(*ddlm->decomposition)[d].insert(bid);      }    }  }  else { /* Empty splits indicate default: split all blocks with one per split. */    PetscInt d = 0;    for(std::map<std::string, unsigned int>::const_iterator bit = ddlm->blockids->begin(); bit != ddlm->blockids->end(); ++bit) {      ddlm->decomposition->push_back(std::set<unsigned int>());      unsigned int bid = bit->second;      std::string bname = bit->first;      (*ddlm->decomposition)[d].insert(bid);      ++d;    }  }  ierr = DMLibMeshSetUpName_Private(*ddm); CHKERRQ(ierr);  ierr = DMSetFromOptions(*ddm);           CHKERRQ(ierr);  ierr = DMSetUp(*ddm);                    CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:mikegraham,项目名称:libmesh,代码行数:50,


示例16: CreateMesh

PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm){  PetscInt       dim = user->dim;  PetscErrorCode ierr;  PetscFunctionBeginUser;  ierr = DMPlexCreateBoxMesh(comm, dim, user->simplex, user->cells, NULL, NULL, NULL, PETSC_TRUE, dm);CHKERRQ(ierr);  {    Parameter   *param;    Vec          coordinates;    PetscScalar *coords;    PetscReal    alpha;    PetscInt     cdim, N, bs, i;    ierr = DMGetCoordinateDim(*dm, &cdim);CHKERRQ(ierr);    ierr = DMGetCoordinates(*dm, &coordinates);CHKERRQ(ierr);    ierr = VecGetLocalSize(coordinates, &N);CHKERRQ(ierr);    ierr = VecGetBlockSize(coordinates, &bs);CHKERRQ(ierr);    if (bs != cdim) SETERRQ2(comm, PETSC_ERR_ARG_WRONG, "Invalid coordinate blocksize %D != embedding dimension %D", bs, cdim);    ierr = VecGetArray(coordinates, &coords);CHKERRQ(ierr);    ierr = PetscBagGetData(user->bag, (void **) &param);CHKERRQ(ierr);    alpha = param->alpha;    for (i = 0; i < N; i += cdim) {      PetscScalar x = coords[i+0];      PetscScalar y = coords[i+1];      coords[i+0] = PetscCosReal(alpha)*x - PetscSinReal(alpha)*y;      coords[i+1] = PetscSinReal(alpha)*x + PetscCosReal(alpha)*y;    }    ierr = VecRestoreArray(coordinates, &coords);CHKERRQ(ierr);    ierr = DMSetCoordinates(*dm, coordinates);CHKERRQ(ierr);  }  {    DM               pdm = NULL;    PetscPartitioner part;    ierr = DMPlexGetPartitioner(*dm, &part);CHKERRQ(ierr);    ierr = PetscPartitionerSetFromOptions(part);CHKERRQ(ierr);    ierr = DMPlexDistribute(*dm, 0, NULL, &pdm);CHKERRQ(ierr);    if (pdm) {      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = pdm;    }  }  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:petsc,项目名称:petsc,代码行数:48,


示例17: CreateMesh

static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm){  DM             distributedMesh = NULL;  PetscErrorCode ierr;  PetscFunctionBeginUser;  ierr = DMPlexCreateBoxMesh(comm, 2, PETSC_TRUE, dm);CHKERRQ(ierr);  ierr = PetscObjectSetName((PetscObject) *dm, "Mesh");CHKERRQ(ierr);  ierr = DMPlexDistribute(*dm, 0, NULL, &distributedMesh);CHKERRQ(ierr);  if (distributedMesh) {    ierr = DMDestroy(dm);CHKERRQ(ierr);    *dm  = distributedMesh;  }  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:masa-ito,项目名称:PETScToPoisson,代码行数:17,


示例18: main

int main(int argc, char **argv){  DM             dm;  AppCtx         user;                 /* user-defined work context */  PetscErrorCode ierr;  ierr = PetscInitialize(&argc, &argv, PETSC_NULL, help);CHKERRQ(ierr);  ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr);  ierr = DMPatchCreateGrid(PETSC_COMM_WORLD, user.dim, user.patchSize, user.commSize, user.gridSize, &dm);CHKERRQ(ierr);  ierr = PetscObjectSetName((PetscObject) dm, "Patch Mesh");CHKERRQ(ierr);  ierr = DMSetFromOptions(dm);CHKERRQ(ierr);  ierr = DMSetUp(dm);CHKERRQ(ierr);  ierr = DMView(dm, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);  ierr = DMPatchSolve(dm);CHKERRQ(ierr);  ierr = DMDestroy(&dm);CHKERRQ(ierr);  ierr = PetscFinalize();  return 0;}
开发者ID:erdc-cm,项目名称:petsc-dev,代码行数:18,


示例19: petscSetupDM

voidpetscSetupDM (NonlinearSystem & nl) {#if !PETSC_VERSION_LESS_THAN(3,3,0)  PetscErrorCode  ierr;  PetscBool       ismoose;  DM              dm = PETSC_NULL;  // Initialize the part of the DM package that's packaged with Moose; in the PETSc source tree this call would be in DMInitializePackage()  ierr = DMMooseRegisterAll();  CHKERRABORT(nl.comm().get(),ierr);  // Create and set up the DM that will consume the split options and deal with block matrices.  PetscNonlinearSolver<Number> *petsc_solver = dynamic_cast<PetscNonlinearSolver<Number> *>(nl.sys().nonlinear_solver.get());  SNES snes = petsc_solver->snes();  // if there exists a DMMoose object, not to recreate a new one  ierr = SNESGetDM(snes, &dm);  CHKERRABORT(nl.comm().get(), ierr);  if (dm)  {    ierr = PetscObjectTypeCompare((PetscObject)dm, DMMOOSE, &ismoose);    CHKERRABORT(nl.comm().get(), ierr);    if (ismoose)      return;  }  ierr = DMCreateMoose(nl.comm().get(), nl, &dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = DMSetFromOptions(dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = DMSetUp(dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = SNESSetDM(snes,dm);  CHKERRABORT(nl.comm().get(),ierr);  ierr = DMDestroy(&dm);  CHKERRABORT(nl.comm().get(),ierr);  // We temporarily comment out this updating function because  // we lack an approach to check if the problem  // structure has been changed from the last iteration.  // The indices will be rebuilt for every timestep.  // TODO: figure out a way to check the structure changes of the  // matrix  // ierr = SNESSetUpdate(snes,SNESUpdateDMMoose);  // CHKERRABORT(nl.comm().get(),ierr);#endif}
开发者ID:garvct,项目名称:Moose,代码行数:43,


示例20: main

                      example is used for testing the subroutine MatLoad_MPI_DA/n/n";#include <petscdm.h>#include <petscdmda.h>int main(int argc,char **argv){  PetscInt       X = 10,Y = 8,Z=8;  PetscErrorCode ierr;  DM             da;  PetscViewer    viewer;  Mat            A;  ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;  ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"temp.dat",FILE_MODE_WRITE,&viewer);CHKERRQ(ierr);  /* Read options */  ierr = PetscOptionsGetInt(NULL,NULL,"-X",&X,NULL);CHKERRQ(ierr);  ierr = PetscOptionsGetInt(NULL,NULL,"-Y",&Y,NULL);CHKERRQ(ierr);  ierr = PetscOptionsGetInt(NULL,NULL,"-Z",&Z,NULL);CHKERRQ(ierr);  /* Create distributed array and get vectors */  ierr = DMDACreate3d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,X,Y,Z,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,1,1,NULL,NULL,NULL,&da);CHKERRQ(ierr);  ierr = DMSetFromOptions(da);CHKERRQ(ierr);  ierr = DMSetUp(da);CHKERRQ(ierr);   ierr = DMSetMatType(da,MATMPIAIJ);CHKERRQ(ierr);  ierr = DMCreateMatrix(da,&A);CHKERRQ(ierr);  ierr = MatShift(A,X);CHKERRQ(ierr);  ierr = MatView(A,viewer);CHKERRQ(ierr);  ierr = MatDestroy(&A);CHKERRQ(ierr);  ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);  ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"temp.dat",FILE_MODE_READ,&viewer);CHKERRQ(ierr);  ierr = DMCreateMatrix(da,&A);CHKERRQ(ierr);  ierr = MatLoad(A,viewer);CHKERRQ(ierr);  /* Free memory */  ierr = MatDestroy(&A);CHKERRQ(ierr);  ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr);  ierr = DMDestroy(&da);CHKERRQ(ierr);  ierr = PetscFinalize();  return ierr;}
开发者ID:firedrakeproject,项目名称:petsc,代码行数:43,


示例21: 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;  if (user->simplex) {    DM refinedMesh     = NULL;    DM distributedMesh = NULL;    ierr = DMPlexCreateBoxMesh(comm, dim, interpolate, dm);CHKERRQ(ierr);    /* Refine mesh using a volume constraint */    ierr = DMPlexSetRefinementLimit(*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 = DMPlexDistribute(*dm, partitioner, 0, NULL, &distributedMesh);CHKERRQ(ierr);    if (distributedMesh) {      ierr = DMDestroy(dm);CHKERRQ(ierr);      *dm  = distributedMesh;    }    ierr = PetscObjectSetName((PetscObject) *dm, "Simplical Mesh");CHKERRQ(ierr);  } else {    switch (user->dim) {    case 2:      ierr = DMDACreate2d(comm, DMDA_BOUNDARY_NONE, DMDA_BOUNDARY_NONE, DMDA_STENCIL_BOX, -3, -3, PETSC_DETERMINE, PETSC_DETERMINE, 1, 1, NULL, NULL, dm);CHKERRQ(ierr);      ierr = DMDASetVertexCoordinates(*dm, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0);CHKERRQ(ierr);      break;    default:      SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Cannot create structured mesh of dimension %d", dim);    }    ierr = PetscObjectSetName((PetscObject) *dm, "Hexahedral Mesh");CHKERRQ(ierr);  }  ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:ZJLi2013,项目名称:petsc,代码行数:42,


示例22: array

/*@C   DMDACreate1d - Creates an object that will manage the communication of  one-dimensional   regular array data that is distributed across some processors.   Collective on MPI_Comm   Input Parameters:+  comm - MPI communicator.  bx - type of ghost cells at the boundary the array should have, if any. Use          DM_BOUNDARY_NONE, DM_BOUNDARY_GHOSTED, or DM_BOUNDARY_PERIODIC..  M - global dimension of the array (use -M to indicate that it may be set to a different value            from the command line with -da_grid_x <M>).  dof - number of degrees of freedom per node.  s - stencil width-  lx - array containing number of nodes in the X direction on each processor,        or NULL. If non-null, must be of length as the number of processes in the MPI_Comm.   Output Parameter:.  da - the resulting distributed array object   Options Database Key:+  -dm_view - Calls DMView() at the conclusion of DMDACreate1d().  -da_grid_x <nx> - number of grid points in x direction; can set if M < 0.  -da_refine_x <rx> - refinement factor-  -da_refine <n> - refine the DMDA n times before creating it, if M < 0   Level: beginner   Notes:   The array data itself is NOT stored in the DMDA, it is stored in Vec objects;   The appropriate vector objects can be obtained with calls to DMCreateGlobalVector()   and DMCreateLocalVector() and calls to VecDuplicate() if more are needed..keywords: distributed array, create, one-dimensional.seealso: DMDestroy(), DMView(), DMDACreate2d(), DMDACreate3d(), DMGlobalToLocalBegin(), DMDASetRefinementFactor(),          DMGlobalToLocalEnd(), DMLocalToGlobalBegin(), DMLocalToLocalBegin(), DMLocalToLocalEnd(), DMDAGetRefinementFactor(),          DMDAGetInfo(), DMCreateGlobalVector(), DMCreateLocalVector(), DMDACreateNaturalVector(), DMLoad(), DMDAGetOwnershipRanges()@*/PetscErrorCode  DMDACreate1d(MPI_Comm comm, DMBoundaryType bx, PetscInt M, PetscInt dof, PetscInt s, const PetscInt lx[], DM *da){  PetscErrorCode ierr;  PetscMPIInt    size;  PetscFunctionBegin;  ierr = DMDACreate(comm, da);CHKERRQ(ierr);  ierr = DMSetDimension(*da, 1);CHKERRQ(ierr);  ierr = DMDASetSizes(*da, M, 1, 1);CHKERRQ(ierr);  ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr);  ierr = DMDASetNumProcs(*da, size, PETSC_DECIDE, PETSC_DECIDE);CHKERRQ(ierr);  ierr = DMDASetBoundaryType(*da, bx, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE);CHKERRQ(ierr);  ierr = DMDASetDof(*da, dof);CHKERRQ(ierr);  ierr = DMDASetStencilWidth(*da, s);CHKERRQ(ierr);  ierr = DMDASetOwnershipRanges(*da, lx, NULL, NULL);CHKERRQ(ierr);  /* This violates the behavior for other classes, but right now users expect negative dimensions to be handled this way */  ierr = DMSetFromOptions(*da);CHKERRQ(ierr);  ierr = DMSetUp(*da);CHKERRQ(ierr);  PetscFunctionReturn(0);}
开发者ID:haubentaucher,项目名称:petsc,代码行数:60,



注:本文中的DMSetFromOptions函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ DMSetUp函数代码示例
C++ DMSG_PANIC函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。