Skip to content
Snippets Groups Projects
Select Git revision
  • 3f147e49852e19b79b873f3f88edaff2314ae196
  • master default protected
  • hierarchical-basis
  • revert-ef4a3a4f
  • patch_releases_4_14
  • overlaps_tags_and_distributed_export
  • overlaps_tags_and_distributed_export_rebased
  • relaying
  • alphashapes
  • steplayer
  • bl
  • pluginMeshQuality
  • fixBugsAmaury
  • new_export_boris
  • oras_vs_osm
  • reassign_partitions
  • distributed_fwi
  • rename-classes
  • fix/fortran-api-example-t4
  • robust_partitions
  • reducing_files
  • gmsh_4_14_0
  • gmsh_4_13_1
  • gmsh_4_13_0
  • gmsh_4_12_2
  • gmsh_4_12_1
  • gmsh_4_12_0
  • gmsh_4_11_1
  • gmsh_4_11_0
  • gmsh_4_10_5
  • gmsh_4_10_4
  • gmsh_4_10_3
  • gmsh_4_10_2
  • gmsh_4_10_1
  • gmsh_4_10_0
  • gmsh_4_9_5
  • gmsh_4_9_4
  • gmsh_4_9_3
  • gmsh_4_9_2
  • gmsh_4_9_1
  • gmsh_4_9_0
41 results

gmp_normal_form.h

Blame
  • t21.geo 3.25 KiB
    // -----------------------------------------------------------------------------
    //
    //  Gmsh GEO tutorial 21
    //
    //  Mesh partitioning
    //
    // -----------------------------------------------------------------------------
    
    // Gmsh can partition meshes using different algorithms, e.g. the graph
    // partitioner Metis or the `SimplePartition' plugin. For all the partitining
    // algorithms, the relationship between mesh elements and mesh partitions is
    // encoded through the creation of new (discrete) elementary entities, called
    // "partition entities".
    //
    // Partition entities behave exactly like other discrete elementary entities;
    // the only difference is that they keep track of both a mesh partition index
    // and their parent elementary entity.
    //
    // The major advantage of this approach is that it allows to maintain a full
    // boundary representation of the partition entities, which Gmsh creates
    // automatically if `Mesh.PartitionCreateTopology' is set.
    
    // Let us start by creating a simple geometry with two adjacent squares sharing
    // an edge:
    SetFactory("OpenCASCADE");
    Rectangle(1) = {0, 0, 0, 1, 1};
    Rectangle(2) = {1, 0, 0, 1, 1};
    BooleanFragments{ Surface{1}; Delete; }{ Surface{2}; Delete; }
    MeshSize {:} = 0.05;
    
    // We create one physical group for each square, and we mesh the resulting
    // geometry:
    Physical Surface("Left", 100) = 1;
    Physical Surface("Right", 200) = 2;
    Mesh 2;
    
    // We now define several constants to fine-tune how the mesh will be partitioned
    DefineConstant[
      partitioner = {0, Choices{0="Metis", 1="SimplePartition"},
        Name "Parameters/0Mesh partitioner"}
      N = {3, Min 1, Max 256, Step 1,
        Name "Parameters/1Number of partitions"}
      topology = {1, Choices{0, 1},
        Name "Parameters/2Create partition topology (BRep)?"}
      ghosts = {0, Choices{0, 1},
        Name "Parameters/3Create ghost cells?"}
      physicals = {0, Choices{0, 1},
        Name "Parameters/3Create new physical groups?"}
      write = {1, Choices {0, 1},
        Name "Parameters/3Write file to disk?"}
      split = {0, Choices {0, 1},
        Name "Parameters/4Write one file per partition?"}
    ];
    
    // Should we create the boundary representation of the partition entities?
    Mesh.PartitionCreateTopology = topology;
    
    // Should we create ghost cells?
    Mesh.PartitionCreateGhostCells = ghosts;
    
    // Should we automatically create new physical groups on the partition entities?
    Mesh.PartitionCreatePhysicals = physicals;
    
    // Should we keep backward compatibility with pre-Gmsh 4, e.g. to save the mesh
    // in MSH2 format?
    Mesh.PartitionOldStyleMsh2 = 0;
    
    // Should we save one mesh file per partition?
    Mesh.PartitionSplitMeshFiles = split;
    
    If (partitioner == 0)
      // Use Metis to create N partitions
      PartitionMesh N;
      // Several options can be set to control Metis: `Mesh.MetisAlgorithm' (1:
      // Recursive, 2: K-way), `Mesh.MetisObjective' (1: min. edge-cut, 2:
      // min. communication volume), `Mesh.PartitionTriWeight' (weight of
      // triangles), `Mesh.PartitionQuadWeight' (weight of quads), ...
    Else
      // Use the `SimplePartition' plugin to create chessboard-like partitions
      Plugin(SimplePartition).NumSlicesX = N;
      Plugin(SimplePartition).NumSlicesY = 1;
      Plugin(SimplePartition).NumSlicesZ = 1;
      Plugin(SimplePartition).Run;
    EndIf
    
    // Save mesh file (or files, if `Mesh.PartitionSplitMeshFiles' is set):
    If(write)
      Save "t21.msh";
    EndIf