# 2. Read the mesh from the given mesh file. We can handle geometrically # periodic meshes in this code. meshfile = expanduser(join(path, 'data', 'periodic-hexagon.mesh')) if not exists(meshfile): path = dirname(dirname(__file__)) meshfile = expanduser(join(path, 'data', 'periodic-hexagon.mesh')) mesh = mfem.Mesh(meshfile, 1,1) dim = mesh.Dimension() # 3. Define the ODE solver used for time integration. Several explicit # Runge-Kutta methods are available. ode_solver = None if ode_solver_type == 1: ode_solver = mfem.ForwardEulerSolver() elif ode_solver_type == 2: ode_solver = mfem.RK2Solver(1.0) elif ode_solver_type == 3: ode_solver = mfem.RK3SSolver() elif ode_solver_type == 4: ode_solver = mfem.RK4Solver() elif ode_solver_type == 6: ode_solver = mfem.RK6Solver() else: print( "Unknown ODE solver type: " + str(ode_solver_type)) exit # 4. Refine the mesh to increase the resolution. In this example we do # 'ref_levels' of uniform refinement, where 'ref_levels' is a # command-line parameter. If the mesh is of NURBS type, we convert it to # a (piecewise-polynomial) high-order mesh. for lev in range(ref_levels): mesh.UniformRefinement(); if mesh.NURBSext: mesh.SetCurvature(max(order, 1))
parser.print_options(args) # 2. Read the mesh from the given mesh file. We can handle triangular, # quadrilateral, tetrahedral and hexahedral meshes with the same code. meshfile = expanduser(join(path, 'data', args.mesh)) mesh = mfem.Mesh(meshfile, 1, 1) dim = mesh.Dimension() # 3. Define the ODE solver used for time integration. Several implicit # singly diagonal implicit Runge-Kutta (SDIRK) methods, as well as # explicit Runge-Kutta methods are available. if ode_solver_type == 1: ode_solver = BackwardEulerSolver() elif ode_solver_type == 2: ode_solver = mfem.SDIRK23Solver(2) elif ode_solver_type == 3: ode_solver = mfem.SDIRK33Solver() elif ode_solver_type == 11: ode_solver = ForwardEulerSolver() elif ode_solver_type == 12: ode_solver = mfem.RK2Solver(0.5) elif ode_solver_type == 13: ode_solver = mfem.RK3SSPSolver() elif ode_solver_type == 14: ode_solver = mfem.RK4Solver() elif ode_solver_type == 22: ode_solver = mfem.ImplicitMidpointSolver() elif ode_solver_type == 23: ode_solver = mfem.SDIRK23Solver() elif ode_solver_type == 24: ode_solver = mfem.SDIRK34Solver() else: print("Unknown ODE solver type: " + str(ode_solver_type)) exit # 4. Refine the mesh to increase the resolution. In this example we do # 'ref_levels' of uniform refinement, where 'ref_levels' is a # command-line parameter. for lev in range(ref_levels): mesh.UniformRefinement() # 5. Define the vector finite element space representing the current and the # initial temperature, u_ref.