Last active
May 27, 2019 21:44
-
-
Save lindsayad/00d060449953db574da250d9d2349619 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <gmsh.h> | |
| #include <set> | |
| #include <iostream> | |
| namespace factory = gmsh::model::geo; | |
| int | |
| main(int argc, char ** argv) | |
| { | |
| gmsh::initialize(); | |
| gmsh::option::setNumber("General.Terminal", 1); | |
| gmsh::model::add("square"); | |
| double length = 2; | |
| double lc = .1; | |
| auto bottom_left_point = factory::addPoint(0, 0, 0, lc); | |
| auto bottom_right_point = factory::addPoint(length, 0, 0, lc); | |
| auto top_right_point = factory::addPoint(length, length, 0, lc); | |
| auto top_left_point = factory::addPoint(0, length, 0, lc); | |
| auto top = factory::addPoint(length / 2, length, 0, lc); | |
| auto bottom = factory::addPoint(length / 2, 0, 0, lc); | |
| // Generate the blocks | |
| auto right = factory::addLine(bottom_right_point, top_right_point); | |
| auto left = factory::addLine(top_left_point, bottom_left_point); | |
| auto bottom_left = factory::addLine(bottom_left_point, bottom); | |
| auto bottom_right = factory::addLine(bottom, bottom_right_point); | |
| auto top_left = factory::addLine(top, top_left_point); | |
| auto top_right = factory::addLine(top_right_point, top); | |
| auto left_interface = factory::addLine(bottom, top); | |
| auto right_interface = factory::addLine(top, bottom); | |
| auto left_curve_loop = factory::addCurveLoop({bottom_left, left_interface, top_left, left}); | |
| auto left_surface = factory::addPlaneSurface({left_curve_loop}); | |
| auto right_curve_loop = factory::addCurveLoop({bottom_right, right, top_right, right_interface}); | |
| auto right_surface = factory::addPlaneSurface({right_curve_loop}); | |
| // Add all the boundary ids and names | |
| size_t boundary_id_counter = 100; | |
| auto right_boundary_id = boundary_id_counter++; | |
| gmsh::model::addPhysicalGroup(1, {right}, right_boundary_id); | |
| gmsh::model::setPhysicalName(1, right_boundary_id, "right"); | |
| auto left_boundary_id = boundary_id_counter++; | |
| gmsh::model::addPhysicalGroup(1, {left}, left_boundary_id); | |
| gmsh::model::setPhysicalName(1, left_boundary_id, "left"); | |
| auto left_interface_boundary_id = boundary_id_counter++; | |
| gmsh::model::addPhysicalGroup(1, {left_interface}, left_interface_boundary_id); | |
| gmsh::model::setPhysicalName(1, left_interface_boundary_id, "master_interface"); | |
| auto right_interface_boundary_id = boundary_id_counter++; | |
| gmsh::model::addPhysicalGroup(1, {right_interface}, right_interface_boundary_id); | |
| gmsh::model::setPhysicalName(1, right_interface_boundary_id, "slave_interface"); | |
| // Add the subdomain ids and names | |
| size_t subdomain_id_counter = 10; | |
| auto left_subdomain_id = subdomain_id_counter++; | |
| gmsh::model::addPhysicalGroup(2, {left_surface}, left_subdomain_id); | |
| gmsh::model::setPhysicalName(2, left_subdomain_id, "left_block"); | |
| auto right_subdomain_id = subdomain_id_counter++; | |
| gmsh::model::addPhysicalGroup(2, {right_surface}, right_subdomain_id); | |
| gmsh::model::setPhysicalName(2, right_subdomain_id, "right_block"); | |
| factory::synchronize(); | |
| gmsh::model::mesh::generate(2); | |
| gmsh::write("two-body.msh"); | |
| gmsh::finalize(); | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment