Dear All, I have the following mesh from gmsh (see attached). I can read it just fine: mesh = Mesh("lshape.msh") but when I try to solve equation on this mesh it fails to apply boundary conditions (because boundaries isn't marked in the msh file, I guess): --------------------------------------------------------------------------- LookupError Traceback (most recent call last) <ipython-input-17-ae4ad3326f99> in <module>() 6 fun0 = None 7 cff = 0.002 ----> 8 sol = get_sol(frm, rhs) 9 fun0 = get_functional(sol, f) <ipython-input-15-e7cda2e05bae> in get_sol(frm, rhs) 4 sol = Function(V) 5 #solve(frm, sol, rhs, solver_parameters={'ksp_type': 'cg'}) ----> 6 solve(frm, sol, rhs, solver_parameters={"ksp_type": "preonly", "pc_type": "lu"}) 7 8 return sol /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/solving.pyc in solve(*args, **kwargs) 121 else: 122 # Solve pre-assembled system --> 123 return _la_solve(*args, **kwargs) 124 125 /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/solving.pyc in _la_solve(A, x, b, **kwargs) 209 solver = ls.LinearSolver(A, solver_parameters=solver_parameters, 210 nullspace=nullspace, --> 211 options_prefix=options_prefix) 212 213 solver.solve(x, b) /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/linear_solver.pyc in __init__(self, A, P, solver_parameters, nullspace, options_prefix) 87 # applied 88 # Force evaluation here ---> 89 self.ksp.setOperators(A=self.A.M.handle, P=self.P.M.handle) 90 91 @cached_property /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/matrix.pyc in M(self) 143 just need a handle on the :class:`pyop2.Mat` object it's 144 wrapping, use :attr:`_M` instead.""" --> 145 self.assemble() 146 # User wants to see it, so force the evaluation. 147 self._M._force_evaluation() <decorator-gen-414> in assemble(self) /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/utils.pyc in wrapper(f, *args, **kwargs) 60 opts["type_check"] = safe 61 try: ---> 62 return f(*args, **kwargs) 63 finally: 64 opts["type_check"] = check /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/matrix.pyc in assemble(self) 72 return 73 self._bcs_at_point_of_assembly = copy.copy(self.bcs) ---> 74 self._assembly_callback(self.bcs) 75 self._assembled = True 76 /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/assembly_cache.pyc in inner(bcs) 356 return r 357 --> 358 r = thunk(bcs) 359 if isinstance(r, float): 360 # 0-form case /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/assemble.pyc in thunk(bcs) 328 tensor_arg = mat(lambda s: get_map(s, tsbc, decoration), 329 lambda s: get_map(s, trbc, decoration), --> 330 i, j) 331 elif is_vec: 332 tensor_arg = vec(lambda s: get_map(s), i) /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/assemble.pyc in mat(testmap, trialmap, i, j) 189 def mat(testmap, trialmap, i, j): 190 return tensor[i, j](op2.INC, --> 191 (testmap(test.function_space()[i])[op2.i[0]], 192 trialmap(trial.function_space()[j])[op2.i[1]]), 193 flatten=True) /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/assemble.pyc in <lambda>(s) 326 # Output argument 327 if is_mat: --> 328 tensor_arg = mat(lambda s: get_map(s, tsbc, decoration), 329 lambda s: get_map(s, trbc, decoration), 330 i, j) /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/assemble.pyc in get_map(x, bcs, decoration) 280 281 def get_map(x, bcs=None, decoration=None): --> 282 return x.cell_node_map(bcs) 283 284 elif integral_type in ("exterior_facet", "exterior_facet_vert"): /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/functionspaceimpl.pyc in cell_node_map(self, bcs) 411 "cell_node", 412 self.offset, --> 413 parent) 414 415 def interior_facet_node_map(self, bcs=None): /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/functionspacedata.pyc in get_map(self, V, entity_set, map_arity, bcs, name, offset, parent) 485 # Cache miss. 486 # Any top and bottom bcs (for the extruded case) are handled elsewhere. --> 487 nodes = [bc.nodes for bc in lbcs if bc.sub_domain not in ['top', 'bottom']] 488 decorate = False 489 if nodes: /home/george/polygon/firedrake/local/lib/python2.7/site-packages/pyop2/utils.pyc in __get__(self, obj, cls) 62 if obj is None: 63 return self ---> 64 obj.__dict__[self.__name__] = result = self.fget(obj) 65 return result 66 /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/bcs.pyc in nodes(self) 152 fs.exterior_facet_boundary_node_map( 153 self.method).values_with_halo.take( --> 154 fs._mesh.exterior_facets.subset(self.sub_domain).indices, 155 axis=0)) 156 /home/george/polygon/firedrake/local/lib/python2.7/site-packages/firedrake/mesh.pyc in subset(self, markers) 125 raise LookupError( 126 '{0} is not a valid marker'. --> 127 format(marker)) 128 129 # build a list of indices corresponding to the subsets selected by LookupError: 4 is not a valid marker So, I need to somehow mark boundaries, but I cannot find it out, how. I've tried https://openfoamwiki.net/index.php/2D_Mesh_Tutorial_using_GMSH but step 4 does not work for me -- I simply cannot select line with gui, and it is not clear how to select boundaries editing mesh file. Sincerely, George
_______________________________________________ firedrake mailing list firedrake@imperial.ac.uk https://mailman.ic.ac.uk/mailman/listinfo/firedrake