Date: 2026-07-30T21:14:01+00:00

Actual source code: ex1.c

      1: static char help[] = "Create and view a forest mesh\n\n";

      3: #include <petscdmforest.h>
      4: #include <petscdmplex.h>
      5: #include <petscoptions.h>

      7: int main(int argc, char **argv)
      8: {
      9:   DM          dm;
     10:   char        typeString[256] = {'\0'};
     11:   PetscViewer viewer          = NULL;
     12:   PetscBool   conv            = PETSC_FALSE;

     14:   PetscFunctionBeginUser;
     15:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
     16:   PetscCall(DMCreate(PETSC_COMM_WORLD, &dm));
     17:   PetscCall(PetscStrncpy(typeString, DMFOREST, 256));
     18:   PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "DM Forest example options", NULL);
     19:   PetscCall(PetscOptionsString("-dm_type", "The type of the dm", NULL, DMFOREST, typeString, sizeof(typeString), NULL));
     20:   PetscCall(PetscOptionsBool("-test_convert", "Test conversion to DMPLEX", NULL, conv, &conv, NULL));
     21:   PetscOptionsEnd();
     22:   PetscCall(DMSetType(dm, (DMType)typeString));
     23:   PetscCall(DMSetFromOptions(dm));
     24:   PetscCall(DMSetUp(dm));
     25:   PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
     26:   PetscCall(PetscViewerDestroy(&viewer));
     27:   if (conv) {
     28:     DM dmConv;

     30:     PetscCall(DMConvert(dm, DMPLEX, &dmConv));
     31:     PetscCall(DMLocalizeCoordinates(dmConv));
     32:     PetscCall(DMViewFromOptions(dmConv, NULL, "-dm_conv_view"));
     33:     PetscCall(DMPlexCheckCellShape(dmConv, PETSC_FALSE, PETSC_DETERMINE));
     34:     PetscCall(DMDestroy(&dmConv));
     35:   }
     36:   PetscCall(DMDestroy(&dm));
     37:   PetscCall(PetscFinalize());
     38:   return 0;
     39: }

     41: /*TEST

     43:       test:
     44:         output_file: output/empty.out
     45:         suffix: p4est_topology_moebius
     46:         nsize: 3
     47:         args: -dm_type p4est -dm_forest_topology moebius -dm_view vtk:moebius.vtu
     48:         requires: p4est !complex

     50:       test:
     51:         output_file: output/empty.out
     52:         suffix: p4est_topology_moebius_convert
     53:         nsize: 3
     54:         args: -dm_type p4est -dm_forest_topology moebius -test_convert -dm_conv_view vtk:moebiusconv.vtu
     55:         requires: p4est !complex

     57:       test:
     58:         output_file: output/empty.out
     59:         suffix: p4est_topology_shell
     60:         nsize: 3
     61:         args: -dm_type p8est -dm_forest_topology shell -dm_view vtk:shell.vtu
     62:         requires: p4est !complex

     64:       test:
     65:         TODO: broken
     66:         output_file: output/empty.out
     67:         suffix: p4est_topology_shell_convert
     68:         nsize: 3
     69:         args: -dm_type p8est -dm_forest_topology shell -test_convert -dm_conv_view vtk:shellconv.vtu
     70:         requires: p4est !complex

     72:       test:
     73:         TODO: broken
     74:         output_file: output/empty.out
     75:         suffix: p4est_topology_sphere_convert
     76:         nsize: 3
     77:         args: -dm_type p8est -dm_forest_topology sphere -dm_view vtk:sphere.vtu -dm_forest_initial_refinement 1 -dm_forest_maximum_refinement 1 -test_convert -dm_conv_view vtk:sphereconv.vtu
     78:         requires: p4est !complex

     80:       test:
     81:         output_file: output/empty.out
     82:         suffix: p4est_topology_brick
     83:         nsize: 3
     84:         args: -dm_type p8est -dm_forest_topology brick -dm_p4est_brick_size 2,3,5 -dm_view vtk:brick.vtu
     85:         requires: p4est !complex

     87:       test:
     88:         output_file: output/ex1_brick_periodic_glvis.out
     89:         suffix: p4est_topology_brick_periodic_glvis
     90:         args: -dm_type p8est -dm_forest_topology brick -dm_p4est_brick_size 3,4,5 -dm_p4est_brick_periodicity 0,1,0 -test_convert -dm_conv_view glvis:
     91:         requires: p4est

     93:       test:
     94:         output_file: output/empty.out
     95:         suffix: p4est_topology_brick_periodic_2d
     96:         nsize: 3
     97:         args: -dm_type p4est -dm_forest_topology brick -dm_p4est_brick_size 5,6 -dm_p4est_brick_periodicity 1,0 -test_convert -dm_forest_initial_refinement 0 -dm_forest_maximum_refinement 2 -dm_p4est_refine_pattern hash
     98:         requires: p4est

    100:       test:
    101:         output_file: output/empty.out
    102:         suffix: p4est_topology_brick_periodic_3d
    103:         nsize: 3
    104:         args: -dm_type p8est -dm_forest_topology brick -dm_p4est_brick_size 5,6,1 -dm_p4est_brick_periodicity 0,1,0 -test_convert -dm_forest_initial_refinement 0 -dm_forest_maximum_refinement 2 -dm_p4est_refine_pattern hash
    105:         requires: p4est

    107: TEST*/