| 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} |