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