plexgenerate.c (8393f63d60048dedb208b2705a79fcb7432e3605) plexgenerate.c (94ef8dde638caef1d0cd84a7dc8a2db65fcda8b6)
1#include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/
2
3PetscErrorCode DMPlexInvertCell_Internal(PetscInt dim, PetscInt numCorners, PetscInt cone[])
4{
5 int tmpc;
6
7 PetscFunctionBegin;
8 if (dim != 3) PetscFunctionReturn(0);

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

66
67 PetscFunctionBegin;
68 for (coff = 0; coff < bound; coff += numCorners) {
69 ierr = DMPlexInvertCell(dim, numCorners, &cells[coff]);CHKERRQ(ierr);
70 }
71 PetscFunctionReturn(0);
72}
73
1#include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/
2
3PetscErrorCode DMPlexInvertCell_Internal(PetscInt dim, PetscInt numCorners, PetscInt cone[])
4{
5 int tmpc;
6
7 PetscFunctionBegin;
8 if (dim != 3) PetscFunctionReturn(0);

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

66
67 PetscFunctionBegin;
68 for (coff = 0; coff < bound; coff += numCorners) {
69 ierr = DMPlexInvertCell(dim, numCorners, &cells[coff]);CHKERRQ(ierr);
70 }
71 PetscFunctionReturn(0);
72}
73
74/*@
74/*@C
75 DMPlexTriangleSetOptions - Set the options used for the Triangle mesh generator
76
77 Not Collective
78
79 Inputs Parameters:
80+ dm - The DMPlex object
81- opts - The command line options
82

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

93 PetscFunctionBegin;
94 PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
95 PetscValidPointer(opts, 2);
96 ierr = PetscFree(mesh->triangleOpts);CHKERRQ(ierr);
97 ierr = PetscStrallocpy(opts, &mesh->triangleOpts);CHKERRQ(ierr);
98 PetscFunctionReturn(0);
99}
100
75 DMPlexTriangleSetOptions - Set the options used for the Triangle mesh generator
76
77 Not Collective
78
79 Inputs Parameters:
80+ dm - The DMPlex object
81- opts - The command line options
82

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

93 PetscFunctionBegin;
94 PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
95 PetscValidPointer(opts, 2);
96 ierr = PetscFree(mesh->triangleOpts);CHKERRQ(ierr);
97 ierr = PetscStrallocpy(opts, &mesh->triangleOpts);CHKERRQ(ierr);
98 PetscFunctionReturn(0);
99}
100
101/*@
101/*@C
102 DMPlexTetgenSetOptions - Set the options used for the Tetgen mesh generator
103
104 Not Collective
105
106 Inputs Parameters:
107+ dm - The DMPlex object
108- opts - The command line options
109

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

1185 ierr = PetscStrcmp(name, "triangle", &isTriangle);CHKERRQ(ierr);
1186 ierr = PetscStrcmp(name, "tetgen", &isTetgen);CHKERRQ(ierr);
1187 ierr = PetscStrcmp(name, "ctetgen", &isCTetgen);CHKERRQ(ierr);
1188 }
1189 switch (dim) {
1190 case 2:
1191 if (!name || isTriangle) {
1192#if defined(PETSC_HAVE_TRIANGLE)
102 DMPlexTetgenSetOptions - Set the options used for the Tetgen mesh generator
103
104 Not Collective
105
106 Inputs Parameters:
107+ dm - The DMPlex object
108- opts - The command line options
109

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

1185 ierr = PetscStrcmp(name, "triangle", &isTriangle);CHKERRQ(ierr);
1186 ierr = PetscStrcmp(name, "tetgen", &isTetgen);CHKERRQ(ierr);
1187 ierr = PetscStrcmp(name, "ctetgen", &isCTetgen);CHKERRQ(ierr);
1188 }
1189 switch (dim) {
1190 case 2:
1191 if (!name || isTriangle) {
1192#if defined(PETSC_HAVE_TRIANGLE)
1193 PetscReal *maxVolumes;
1194 PetscInt c;
1193 double *maxVolumes;
1194 PetscInt c;
1195
1196 ierr = PetscMalloc1(cEnd - cStart, &maxVolumes);CHKERRQ(ierr);
1197 if (adaptLabel) {
1198 ierr = DMRefine_Plex_Label(dm,adaptLabel,cStart,cEnd,maxVolumes);CHKERRQ(ierr);
1199 } else if (refinementFunc) {
1200 for (c = cStart; c < cEnd; ++c) {
1201 PetscReal vol, centroid[3];
1202 PetscReal maxVol;
1203
1204 ierr = DMPlexComputeCellGeometryFVM(dm, c, &vol, centroid, NULL);CHKERRQ(ierr);
1205 ierr = (*refinementFunc)(centroid, &maxVol);CHKERRQ(ierr);
1206 maxVolumes[c - cStart] = (double) maxVol;
1207 }
1208 } else {
1209 for (c = 0; c < cEnd-cStart; ++c) maxVolumes[c] = refinementLimit;
1210 }
1195
1196 ierr = PetscMalloc1(cEnd - cStart, &maxVolumes);CHKERRQ(ierr);
1197 if (adaptLabel) {
1198 ierr = DMRefine_Plex_Label(dm,adaptLabel,cStart,cEnd,maxVolumes);CHKERRQ(ierr);
1199 } else if (refinementFunc) {
1200 for (c = cStart; c < cEnd; ++c) {
1201 PetscReal vol, centroid[3];
1202 PetscReal maxVol;
1203
1204 ierr = DMPlexComputeCellGeometryFVM(dm, c, &vol, centroid, NULL);CHKERRQ(ierr);
1205 ierr = (*refinementFunc)(centroid, &maxVol);CHKERRQ(ierr);
1206 maxVolumes[c - cStart] = (double) maxVol;
1207 }
1208 } else {
1209 for (c = 0; c < cEnd-cStart; ++c) maxVolumes[c] = refinementLimit;
1210 }
1211#if !defined(PETSC_USE_REAL_DOUBLE)
1212 {
1213 double *mvols;
1214 ierr = PetscMalloc1(cEnd - cStart,&mvols);CHKERRQ(ierr);
1215 for (c = 0; c < cEnd-cStart; ++c) mvols[c] = (double)maxVolumes[c];
1216 ierr = DMPlexRefine_Triangle(dm, mvols, dmRefined);CHKERRQ(ierr);
1217 ierr = PetscFree(mvols);CHKERRQ(ierr);
1218 }
1219#else
1220 ierr = DMPlexRefine_Triangle(dm, maxVolumes, dmRefined);CHKERRQ(ierr);
1211 ierr = DMPlexRefine_Triangle(dm, maxVolumes, dmRefined);CHKERRQ(ierr);
1221#endif
1222 ierr = PetscFree(maxVolumes);CHKERRQ(ierr);
1223#else
1224 SETERRQ(PetscObjectComm((PetscObject)dm), PETSC_ERR_SUP, "Mesh refinement needs external package support.\nPlease reconfigure with --download-triangle.");
1225#endif
1226 } else SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_SUP, "Unknown 2D mesh generation package %s", name);
1227 break;
1228 case 3:
1229 if (!name || isCTetgen) {

--- 144 unchanged lines hidden ---
1212 ierr = PetscFree(maxVolumes);CHKERRQ(ierr);
1213#else
1214 SETERRQ(PetscObjectComm((PetscObject)dm), PETSC_ERR_SUP, "Mesh refinement needs external package support.\nPlease reconfigure with --download-triangle.");
1215#endif
1216 } else SETERRQ1(PetscObjectComm((PetscObject)dm), PETSC_ERR_SUP, "Unknown 2D mesh generation package %s", name);
1217 break;
1218 case 3:
1219 if (!name || isCTetgen) {

--- 144 unchanged lines hidden ---