Skip to content
Snippets Groups Projects
Select Git revision
  • ef83848c5821f68f049929795df615f2c57e8e22
  • master default protected
  • overlaps_tags_and_distributed_export
  • overlaps_tags_and_distributed_export_rebased
  • relaying
  • alphashapes
  • patches-4.14
  • steplayer
  • bl
  • pluginMeshQuality
  • fixBugsAmaury
  • hierarchical-basis
  • new_export_boris
  • oras_vs_osm
  • reassign_partitions
  • distributed_fwi
  • rename-classes
  • fix/fortran-api-example-t4
  • robust_partitions
  • reducing_files
  • fix_overlaps
  • 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

elasticitySolver.cpp

Blame
  • prepro.py 4.51 KiB
    import gmsh
    import math
    import sys
    
    # This example shows how to implement a simple interactive pre-processor for a
    # finite element solver, i.e. by interactively specifying boundary conditions
    # and material properties on parts of the model
    
    gmsh.initialize(sys.argv)
    if len(sys.argv) > 1:
        gmsh.open(sys.argv[1])
    
    # For Gmsh to know which types of boundary conditions/materials are available,
    # we define "template" ONELAB variables, whose names contains the following
    # substrings:
    #
    # - 'ONELAB Context/Point Template/'
    # - 'ONELAB Context/Curve Template/'
    # - 'ONELAB Context/Surface Template/'
    # - 'ONELAB Context/Volume Template/'
    #
    # Double- (or right-) clicking on an entity in the GUI will pop-up a window
    # where instances of these variables for the given entity can be edited. For
    # example, if the 'ONELAB Context/Curve Template/0Boundary condition' exists,
    # double-clicking on curve 123 in the model will create 'ONELAB Context/Curve
    # 123/0Boundary condition' (or 'ONELAB Context/Physical Curve 1000/0Boundary
    # condition' depending on the choice in the window, if Curve 123 belongs to the
    # Physical Curve 1000)
    #
    parameters = """
    [
      {
        "type":"number",
        "name":"ONELAB Context/Curve Template/0Boundary condition",
        "values":[0],
        "choices":[0, 1],
        "valueLabels":{"Temperature [℃]":0, "Flux [Wm⁻²]":1}
      },
      {
        "type":"number",
        "name":"ONELAB Context/Curve Template/1Value",
        "values":[20],
        "min":0,
        "max":100,
        "step":0.1
      },
      {
        "type":"number",
        "name":"ONELAB Context/Surface Template/0Material",
        "values":[1],
        "choices":[0, 1, 2],
        "valueLabels":{"User-defined":0, "Steel":1, "Concrete":2},
        "attributes":{"ServerActionHide":"ONELAB Context/Surface Template/1.*",
                      "ServerActionShow 0":"ONELAB Context/Surface Template/1.*"}
      },
      {
        "type":"number",
        "name":"ONELAB Context/Surface Template/10Conductivity [Wm⁻¹K⁻¹]",
        "values":[205],
        "min":0.1,
        "max":500,
        "step":0.1,
        "visible":false
      },
      {
        "type":"number",
        "name":"ONELAB Context/Surface Template/11Diffusivity [mm²s⁻¹]",
        "values":[97],
        "min":10,
        "max":1200,
        "step":0.1,
        "visible":false
      },
      {
        "type":"string",
        "name":"ONELAB/Button",
        "values":["Run", "run"],
        "visible":false
      },
      {
        "type":"number",
        "name":"My solver/1Some flag",
        "values":[0],
        "choices":[0, 1]
      },
      {
        "type":"number",
        "name":"My solver/2Some parameter",
        "values":[1.234],
        "min":0,
        "max":10,
        "step":0.1
      },
      {
        "type":"number",
        "name":"My solver/3Some choice",
        "values":[0],
        "choices":[0, 1],
        "valueLabels":{"Choice 1": 0, "Choice 2": 1}
      },
      {
        "type":"string",
        "name":"My solver/3Some input",
        "values":[""]
      },
      {
        "type":"string",
        "name":"My solver/5Some action",
        "values":["select entity"],
        "attributes":{"Macro":"Action"}
      }
    ]"""
    
    gmsh.onelab.set(parameters)
    
    def runSolver():
        print('parameters =', gmsh.onelab.get())
        print('running the solver with the given parameters...')
    
    def eventLoop():
        # terminate the event loop if the GUI was closed
        if gmsh.fltk.isAvailable() == 0: return 0
        # wait for an event
        gmsh.fltk.wait()
        # check if an action is requested
        action = gmsh.onelab.getString("ONELAB/Action")
        if len(action) < 1:
            # no action requested
            pass
        elif action[0] == "check":
            # database was changed: update/define new parameters depending on new
            # state
            gmsh.onelab.setString("ONELAB/Action", [""])
            # print('parameters = ', gmsh.onelab.get())
            gmsh.fltk.update()
        elif action[0] == "reset":
            # user clicked on "Reset database"
            gmsh.onelab.setString("ONELAB/Action", [""])
            gmsh.onelab.set(parameters)
            gmsh.fltk.update()
        elif action[0] == "run":
            # user clicked on "Run"
            gmsh.onelab.setString("ONELAB/Action", [""])
            runSolver()
        elif action[0] == "select entity":
            # user clicked on "My solver/Select an entity"
            gmsh.onelab.setString("ONELAB/Action", [""])
            gmsh.fltk.setStatusMessage(
                "Please select an entity (or press 'q' to quit)", True)
            r, ent = gmsh.fltk.selectEntities()
            if gmsh.fltk.isAvailable() == 0: return 0
            if r and len(ent):
                gmsh.fltk.showContextWindow(ent[0][0], ent[0][1])
            gmsh.fltk.setStatusMessage('', True)
        return 1
    
    if '-nopopup' not in sys.argv:
        gmsh.fltk.initialize()
        while eventLoop():
            pass
    else:
        runSolver()
    
    gmsh.finalize()