コード例 #1
0
ファイル: TestMeshExodus.c プロジェクト: erdc-cm/petsc-dev
int main (int argc,char ** argv) {
  DM             dmBody,dmFS;
  DM             dmBodyDist,dmFSDist;
  ALE::Obj<PETSC_MESH_TYPE> meshBody,meshBodyDist,meshFS,meshFSDist;
  PetscBool      inflag,outflag;
  char           infilename[PETSC_MAX_PATH_LEN+1],outfilename[PETSC_MAX_PATH_LEN+1];
  PetscViewer    viewer;
  int            rank,numproc;
  PetscErrorCode ierr;

  ierr = PetscInitialize(&argc,&argv,(char *)0,help);CHKERRQ(ierr);
  ierr = PetscOptionsGetString(PETSC_NULL,"-i",infilename,PETSC_MAX_PATH_LEN,&inflag);CHKERRQ(ierr);
  ierr = MPI_Comm_size(PETSC_COMM_WORLD,&numproc);
  ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
  if (inflag) {
    ierr = MyDMMeshCreateExodus(PETSC_COMM_WORLD,infilename,&dmBody,&dmFS);CHKERRQ(ierr);
    ierr = DMMeshGetMesh(dmBody,meshBody);CHKERRQ(ierr);
    meshBody->view("meshBody");

    ierr = DMMeshGetMesh(dmFS,meshFS);CHKERRQ(ierr);
    meshFS->view("meshFS");

    if (numproc > 1) {
      ierr = DMMeshDistribute(dmBody,PETSC_NULL,&dmBodyDist);CHKERRQ(ierr);
      //ierr = DMMeshDistribute(dmFS,PETSC_NULL,&dmFSDist);CHKERRQ(ierr);
      ierr = DMMeshGetMesh(dmBodyDist,meshBodyDist);CHKERRQ(ierr);
      meshBodyDist->view("meshBodyDist");
      //ierr = DMMeshGetMesh(dmFSDist,meshFSDist);CHKERRQ(ierr);
      //meshFSDist->view("meshFS");

      //ierr = DMDestroy(&dmBodyDist);CHKERRQ(ierr);
      //ierr = DMDestroy(&dmFSDist);CHKERRQ(ierr);
    }

    //ierr = DMDestroy(&dmBody);CHKERRQ(ierr);
    //ierr = DMDestroy(&dmFS);CHKERRQ(ierr);
  } else {
    ierr = PetscPrintf(PETSC_COMM_WORLD,"No file name given\n");CHKERRQ(ierr);
  }
  ierr = PetscFinalize();
  return 0;
}
コード例 #2
0
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     = NULL;
        DM         distributedMesh = NULL;
        const char *partitioner    = user->partitioner;

        /* Refine mesh using a volume constraint */
        ierr = DMMeshRefine(*dm, refinementLimit, interpolate, &refinedMesh);
        CHKERRQ(ierr);
        if (refinedMesh) {
            ierr = DMDestroy(dm);
            CHKERRQ(ierr);
            *dm  = refinedMesh;
        }
        /* Distribute mesh over processes */
        ierr = DMMeshDistribute(*dm, partitioner, &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);
}