plexcreate.c (67d101c4b97d953f4b2940fbc2e829defba16da1) plexcreate.c (ed5e4e85792117e4bf875eb7efb50a9b8564ac26)
1#define PETSCDM_DLL
2#include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/
3#include <petsc/private/hashseti.h> /*I "petscdmplex.h" I*/
4#include <petscsf.h>
5
6PetscLogEvent DMPLEX_CreateFromFile, DMPLEX_BuildFromCellList, DMPLEX_BuildCoordinatesFromCellList;
7
8/* External function declarations here */

--- 2478 unchanged lines hidden (view full) ---

2487static PetscErrorCode DMPlexCreateFromOptions_Internal(PetscOptionItems *PetscOptionsObject, PetscBool *useCoordSpace, DM dm)
2488{
2489 DMPlexShape shape = DM_SHAPE_BOX;
2490 DMPolytopeType cell = DM_POLYTOPE_TRIANGLE;
2491 PetscInt dim = 2;
2492 PetscBool simplex = PETSC_TRUE, interpolate = PETSC_TRUE, adjCone = PETSC_FALSE, adjClosure = PETSC_TRUE, refDomain = PETSC_FALSE;
2493 PetscBool flg, flg2, fflg, bdfflg, nameflg;
2494 MPI_Comm comm;
1#define PETSCDM_DLL
2#include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/
3#include <petsc/private/hashseti.h> /*I "petscdmplex.h" I*/
4#include <petscsf.h>
5
6PetscLogEvent DMPLEX_CreateFromFile, DMPLEX_BuildFromCellList, DMPLEX_BuildCoordinatesFromCellList;
7
8/* External function declarations here */

--- 2478 unchanged lines hidden (view full) ---

2487static PetscErrorCode DMPlexCreateFromOptions_Internal(PetscOptionItems *PetscOptionsObject, PetscBool *useCoordSpace, DM dm)
2488{
2489 DMPlexShape shape = DM_SHAPE_BOX;
2490 DMPolytopeType cell = DM_POLYTOPE_TRIANGLE;
2491 PetscInt dim = 2;
2492 PetscBool simplex = PETSC_TRUE, interpolate = PETSC_TRUE, adjCone = PETSC_FALSE, adjClosure = PETSC_TRUE, refDomain = PETSC_FALSE;
2493 PetscBool flg, flg2, fflg, bdfflg, nameflg;
2494 MPI_Comm comm;
2495 char filename[PETSC_MAX_PATH_LEN], bdFilename[PETSC_MAX_PATH_LEN], plexname[PETSC_MAX_PATH_LEN];
2495 char filename[PETSC_MAX_PATH_LEN] = "<unspecified>";
2496 char bdFilename[PETSC_MAX_PATH_LEN] = "<unspecified>";
2497 char plexname[PETSC_MAX_PATH_LEN] = "";
2496 PetscErrorCode ierr;
2497
2498 PetscFunctionBegin;
2499 ierr = PetscObjectGetComm((PetscObject) dm, &comm);CHKERRQ(ierr);
2500 /* TODO Turn this into a registration interface */
2501 ierr = PetscOptionsString("-dm_plex_filename", "File containing a mesh", "DMPlexCreateFromFile", filename, filename, sizeof(filename), &fflg);CHKERRQ(ierr);
2502 ierr = PetscOptionsString("-dm_plex_boundary_filename", "File containing a mesh boundary", "DMPlexCreateFromFile", bdFilename, bdFilename, sizeof(bdFilename), &bdfflg);CHKERRQ(ierr);
2503 ierr = PetscOptionsString("-dm_plex_name", "Name of the mesh in the file", "DMPlexCreateFromFile", plexname, plexname, sizeof(plexname), &nameflg);CHKERRQ(ierr);

--- 126 unchanged lines hidden (view full) ---

2630 break;
2631 }
2632 }
2633 break;
2634 default: SETERRQ1(comm, PETSC_ERR_SUP, "Domain shape %s is unsupported", DMPlexShapes[shape]);
2635 }
2636 }
2637 ierr = DMPlexSetRefinementUniform(dm, PETSC_TRUE);CHKERRQ(ierr);
2498 PetscErrorCode ierr;
2499
2500 PetscFunctionBegin;
2501 ierr = PetscObjectGetComm((PetscObject) dm, &comm);CHKERRQ(ierr);
2502 /* TODO Turn this into a registration interface */
2503 ierr = PetscOptionsString("-dm_plex_filename", "File containing a mesh", "DMPlexCreateFromFile", filename, filename, sizeof(filename), &fflg);CHKERRQ(ierr);
2504 ierr = PetscOptionsString("-dm_plex_boundary_filename", "File containing a mesh boundary", "DMPlexCreateFromFile", bdFilename, bdFilename, sizeof(bdFilename), &bdfflg);CHKERRQ(ierr);
2505 ierr = PetscOptionsString("-dm_plex_name", "Name of the mesh in the file", "DMPlexCreateFromFile", plexname, plexname, sizeof(plexname), &nameflg);CHKERRQ(ierr);

--- 126 unchanged lines hidden (view full) ---

2632 break;
2633 }
2634 }
2635 break;
2636 default: SETERRQ1(comm, PETSC_ERR_SUP, "Domain shape %s is unsupported", DMPlexShapes[shape]);
2637 }
2638 }
2639 ierr = DMPlexSetRefinementUniform(dm, PETSC_TRUE);CHKERRQ(ierr);
2640 if (!((PetscObject)dm)->name && nameflg) {
2641 ierr = PetscObjectSetName((PetscObject)dm, plexname);CHKERRQ(ierr);
2642 }
2638 PetscFunctionReturn(0);
2639}
2640
2641PetscErrorCode DMSetFromOptions_NonRefinement_Plex(PetscOptionItems *PetscOptionsObject, DM dm)
2642{
2643 DM_Plex *mesh = (DM_Plex*) dm->data;
2644 PetscBool flg;
2645 char bdLabel[PETSC_MAX_PATH_LEN];

--- 136 unchanged lines hidden (view full) ---

2782 IS perm;
2783
2784 ierr = DMPlexGetOrdering(dm, oname, NULL, &perm);CHKERRQ(ierr);
2785 ierr = DMPlexPermute(dm, perm, &pdm);CHKERRQ(ierr);
2786 ierr = ISDestroy(&perm);CHKERRQ(ierr);
2787 ierr = DMPlexReplace_Static(dm, &pdm);CHKERRQ(ierr);
2788 ierr = DMSetFromOptions_NonRefinement_Plex(PetscOptionsObject, dm);CHKERRQ(ierr);
2789 }
2643 PetscFunctionReturn(0);
2644}
2645
2646PetscErrorCode DMSetFromOptions_NonRefinement_Plex(PetscOptionItems *PetscOptionsObject, DM dm)
2647{
2648 DM_Plex *mesh = (DM_Plex*) dm->data;
2649 PetscBool flg;
2650 char bdLabel[PETSC_MAX_PATH_LEN];

--- 136 unchanged lines hidden (view full) ---

2787 IS perm;
2788
2789 ierr = DMPlexGetOrdering(dm, oname, NULL, &perm);CHKERRQ(ierr);
2790 ierr = DMPlexPermute(dm, perm, &pdm);CHKERRQ(ierr);
2791 ierr = ISDestroy(&perm);CHKERRQ(ierr);
2792 ierr = DMPlexReplace_Static(dm, &pdm);CHKERRQ(ierr);
2793 ierr = DMSetFromOptions_NonRefinement_Plex(PetscOptionsObject, dm);CHKERRQ(ierr);
2794 }
2795 /* TODO Old-style extrusion which can be removed */
2796 ierr = PetscOptionsBool("-dm_plex_interpolate", "Flag to create edges and faces automatically", "", interpolate, &interpolate, NULL);CHKERRQ(ierr);
2790 /* Handle DMPlex distribution */
2791 ierr = PetscOptionsBool("-dm_distribute", "Flag to redistribute a mesh among processes", "DMCreate", distribute, &distribute, NULL);CHKERRQ(ierr);
2792 ierr = PetscOptionsBoundedInt("-dm_distribute_overlap", "The size of the overlap halo", "DMCreate", overlap, &overlap, NULL, 0);CHKERRQ(ierr);
2793 if (distribute) {
2794 DM pdm = NULL;
2795 PetscPartitioner part;
2796
2797 ierr = DMPlexGetPartitioner(dm, &part);CHKERRQ(ierr);

--- 1302 unchanged lines hidden (view full) ---

4100
4101 if (interpolate) {
4102 DM idm;
4103
4104 ierr = DMPlexInterpolate(*dm, &idm);CHKERRQ(ierr);
4105 ierr = DMDestroy(dm);CHKERRQ(ierr);
4106 *dm = idm;
4107 }
2797 /* Handle DMPlex distribution */
2798 ierr = PetscOptionsBool("-dm_distribute", "Flag to redistribute a mesh among processes", "DMCreate", distribute, &distribute, NULL);CHKERRQ(ierr);
2799 ierr = PetscOptionsBoundedInt("-dm_distribute_overlap", "The size of the overlap halo", "DMCreate", overlap, &overlap, NULL, 0);CHKERRQ(ierr);
2800 if (distribute) {
2801 DM pdm = NULL;
2802 PetscPartitioner part;
2803
2804 ierr = DMPlexGetPartitioner(dm, &part);CHKERRQ(ierr);

--- 1302 unchanged lines hidden (view full) ---

4107
4108 if (interpolate) {
4109 DM idm;
4110
4111 ierr = DMPlexInterpolate(*dm, &idm);CHKERRQ(ierr);
4112 ierr = DMDestroy(dm);CHKERRQ(ierr);
4113 *dm = idm;
4114 }
4108 ierr = PetscObjectSetName((PetscObject)(*dm), plexname);CHKERRQ(ierr);
4109 } else if (isMed) {
4110 ierr = DMPlexCreateMedFromFile(comm, filename, interpolate, dm);CHKERRQ(ierr);
4111 } else if (isPLY) {
4112 ierr = DMPlexCreatePLYFromFile(comm, filename, interpolate, dm);CHKERRQ(ierr);
4113 } else if (isEGADSLite || isEGADS || isIGES || isSTEP) {
4114 if (isEGADSLite) {ierr = DMPlexCreateEGADSLiteFromFile(comm, filename, dm);CHKERRQ(ierr);}
4115 else {ierr = DMPlexCreateEGADSFromFile(comm, filename, dm);CHKERRQ(ierr);}
4116 if (!interpolate) {
4117 DM udm;
4118
4119 ierr = DMPlexUninterpolate(*dm, &udm);CHKERRQ(ierr);
4120 ierr = DMDestroy(dm);CHKERRQ(ierr);
4121 *dm = udm;
4122 }
4123 } else if (isCV) {
4124 ierr = DMPlexCreateCellVertexFromFile(comm, filename, interpolate, dm);CHKERRQ(ierr);
4125 } else SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Cannot load file %s: unrecognized extension", filename);
4115 } else if (isMed) {
4116 ierr = DMPlexCreateMedFromFile(comm, filename, interpolate, dm);CHKERRQ(ierr);
4117 } else if (isPLY) {
4118 ierr = DMPlexCreatePLYFromFile(comm, filename, interpolate, dm);CHKERRQ(ierr);
4119 } else if (isEGADSLite || isEGADS || isIGES || isSTEP) {
4120 if (isEGADSLite) {ierr = DMPlexCreateEGADSLiteFromFile(comm, filename, dm);CHKERRQ(ierr);}
4121 else {ierr = DMPlexCreateEGADSFromFile(comm, filename, dm);CHKERRQ(ierr);}
4122 if (!interpolate) {
4123 DM udm;
4124
4125 ierr = DMPlexUninterpolate(*dm, &udm);CHKERRQ(ierr);
4126 ierr = DMDestroy(dm);CHKERRQ(ierr);
4127 *dm = udm;
4128 }
4129 } else if (isCV) {
4130 ierr = DMPlexCreateCellVertexFromFile(comm, filename, interpolate, dm);CHKERRQ(ierr);
4131 } else SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Cannot load file %s: unrecognized extension", filename);
4132 ierr = PetscStrlen(plexname, &len);CHKERRQ(ierr);
4133 if (len) {ierr = PetscObjectSetName((PetscObject)(*dm), plexname);CHKERRQ(ierr);}
4126 ierr = PetscLogEventEnd(DMPLEX_CreateFromFile,0,0,0,0);CHKERRQ(ierr);
4127 PetscFunctionReturn(0);
4128}
4134 ierr = PetscLogEventEnd(DMPLEX_CreateFromFile,0,0,0,0);CHKERRQ(ierr);
4135 PetscFunctionReturn(0);
4136}