def MixedSpacesRestrictionAmbiguous(mesh): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 1) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element) W = FunctionSpace(mesh, element_0) return (V, W)
def MixedSpacesExtensionSolveAmbiguityWithComponents(mesh): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 1) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element_0) W = FunctionSpace(mesh, element, components=[["u", "s"], "p"]) return (V, W)
def MixedSpacesExtensionAutomatic(mesh): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 2) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element_0) W = FunctionSpace(mesh, element) return (V, W)
def MixedSpacesRestrictionToSubElementSolveAmbiguityWithComponents(mesh): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 1) element_00 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element, components=[("ux", "uy"), "p"]) W = FunctionSpace(mesh, element_00) return (V, W)
def MixedSpacesRestrictionToSubElementAmbiguous(mesh): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 2) # Note that we need to use 2nd order FE otherwise element_00 = FiniteElement("Lagrange", mesh.ufl_cell(), 2) # the automatic detection would restrict the element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) # pressure component element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element) W = FunctionSpace(mesh, element_00) return (V, W)
def MixedSpacesRestrictionSolveAmbiguityWithComponents(mesh, sub_element): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 1) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element, components=["u", "p"]) assert sub_element in (0, 1) if sub_element == 0: W = FunctionSpace(mesh, element_0) elif sub_element == 1: W = FunctionSpace(mesh, element_1) return (V, W)
def MixedSpacesRestrictionAutomatic(mesh, sub_element): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 2) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element) assert sub_element in (0, 1) if sub_element == 0: W = FunctionSpace(mesh, element_0) elif sub_element == 1: W = FunctionSpace(mesh, element_1) return (V, W)
def MixedSpacesExtensionFromSubElementSolveAmbiguityWithComponents(mesh, components): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 1) element_00 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element_00) assert components in (tuple, str) if components is tuple: W = FunctionSpace(mesh, element) else: W = FunctionSpace(mesh, element, components=[("ux", "uy"), "p"]) return (V, W)
def MixedToMixedSpacesCopySubComponentToDifferentLocation(mesh): element_0 = VectorElement("Lagrange", mesh.ufl_cell(), 1) element_1 = VectorElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element, components=[("uxx", "uxy"), ("uyx", "uyy")]) W = V return (V, W)
def MixedToMixedSpacesCopyComponentToDifferentLocation(mesh): element_0 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element_1 = FiniteElement("Lagrange", mesh.ufl_cell(), 1) element = MixedElement(element_0, element_1) V = FunctionSpace(mesh, element, components=["ux", "uy"]) W = V return (V, W)
def CustomFunctionSpace(mesh, element): return FunctionSpace(mesh, element, components=auxiliary_V._component_to_index)
def CustomFunctionSpace(mesh, element): return FunctionSpace(mesh, element, components=V_component._component_to_index)
def ScalarSpaces(mesh): V = FunctionSpace(mesh, "Lagrange", 2) W = V return (V, W)