def analyze_elements(elements, parameters): begin("Compiler stage 1: Analyzing form(s)") # Extract unique (sub)elements unique_elements = set(extract_sub_elements(elements)) # Sort elements unique_elements = sort_elements(unique_elements) # Build element map element_numbers = _compute_element_numbers(unique_elements) # Update scheme for QuadratureElements scheme = parameters["quadrature_rule"] if scheme == "auto": scheme = "default" for element in unique_elements: if element.family() == "Quadrature": element._quad_scheme = scheme end() form_datas = () unique_coordinate_elements = () return form_datas, unique_elements, element_numbers, unique_coordinate_elements
def analyze_elements(elements, parameters): begin("Compiler stage 1: Analyzing form(s)") # Extract unique elements unique_elements = [] element_numbers = {} for element in elements: # Get all (unique) nested elements. for e in _get_nested_elements(element): # Check if element is present if not e in element_numbers: element_numbers[e] = len(unique_elements) unique_elements.append(e) # Sort elements unique_elements = sort_elements(unique_elements) # Build element map element_numbers = _compute_element_numbers(unique_elements) # Update scheme for QuadratureElements scheme = parameters["quadrature_rule"] if scheme == "auto": scheme = "default" for element in unique_elements: if element.family() == "Quadrature": element._quad_scheme = scheme end() return (), unique_elements, element_numbers
def analyze_forms(forms, parameters): """ Analyze form(s), returning form_datas - a tuple of form_data objects unique_elements - a tuple of unique elements across all forms element_numbers - a mapping to unique numbers for all elements """ begin("Compiler stage 1: Analyzing form(s)") # Analyze forms form_datas = tuple(_analyze_form(form, parameters) for form in forms) # Extract unique elements accross all forms unique_elements = set() for form_data in form_datas: unique_elements.update(form_data.unique_sub_elements) # Sort elements unique_elements = sort_elements(unique_elements) # Compute element numbers element_numbers = _compute_element_numbers(unique_elements) # Extract coordinate elements unique_coordinate_elements = sorted(set(chain(*[form_data.coordinate_elements for form_data in form_datas]))) end() return form_datas, unique_elements, element_numbers, unique_coordinate_elements
def analyze_forms(forms, object_names, parameters): """ Analyze form(s), returning form_datas - a tuple of form_data objects unique_elements - a tuple of unique elements across all forms element_numbers - a mapping to unique numbers for all elements """ begin("Compiler stage 1: Analyzing form(s)") # Analyze forms form_datas = tuple(_analyze_form(form, object_names, parameters) for form in forms) # Extract unique elements accross all forms unique_elements = [] for form_data in form_datas: for element in form_data.unique_sub_elements: if not element in unique_elements: unique_elements.append(element) # Sort elements unique_elements = sort_elements(unique_elements) # Compute element numbers element_numbers = _compute_element_numbers(unique_elements) end() return form_datas, unique_elements, element_numbers
def analyze_forms(forms, object_names, parameters): """ Analyze form(s), returning form_datas - a tuple of form_data objects unique_elements - a tuple of unique elements across all forms element_numbers - a mapping to unique numbers for all elements """ begin("Compiler stage 1: Analyzing form(s)") # Analyze forms form_datas = tuple( _analyze_form(form, object_names, parameters) for form in forms) # Extract unique elements accross all forms unique_elements = [] for form_data in form_datas: for element in form_data.unique_sub_elements: if not element in unique_elements: unique_elements.append(element) # Sort elements unique_elements = sort_elements(unique_elements) # Compute element numbers element_numbers = _compute_element_numbers(unique_elements) end() return form_datas, unique_elements, element_numbers
def analyze_ufl_objects(ufl_objects, kind, parameters): """ Analyze ufl object(s), either forms, elements, or coordinate mappings, returning: form_datas - a tuple of form_data objects unique_elements - a tuple of unique elements across all forms element_numbers - a mapping to unique numbers for all elements """ begin("Compiler stage 1: Analyzing %s(s)" % (kind, )) form_datas = () unique_elements = set() unique_coordinate_elements = set() if kind == "form": forms = ufl_objects # Analyze forms form_datas = tuple(_analyze_form(form, parameters) for form in forms) # Extract unique elements accross all forms for form_data in form_datas: unique_elements.update(form_data.unique_sub_elements) # Extract coordinate elements across all forms for form_data in form_datas: unique_coordinate_elements.update(form_data.coordinate_elements) elif kind == "element": elements = ufl_objects # Extract unique (sub)elements unique_elements.update(extract_sub_elements(elements)) elif kind == "coordinate_mapping": meshes = ufl_objects # Extract unique (sub)elements unique_coordinate_elements = [ mesh.ufl_coordinate_element() for mesh in meshes ] # Make sure coordinate elements and their subelements are included unique_elements.update(extract_sub_elements(unique_coordinate_elements)) # Sort elements unique_elements = sort_elements(unique_elements) #unique_coordinate_elements = sort_elements(unique_coordinate_elements) unique_coordinate_elements = sorted(unique_coordinate_elements, key=lambda x: repr(x)) # Check for schemes for QuadratureElements for element in unique_elements: if element.family() == "Quadrature": qs = element.quadrature_scheme() if qs is None: error("Missing quad_scheme in quadrature element.") # Compute element numbers element_numbers = _compute_element_numbers(unique_elements) end() return form_datas, unique_elements, element_numbers, unique_coordinate_elements
def analyze_ufl_objects(ufl_objects, kind, parameters): """ Analyze ufl object(s), either forms, elements, or coordinate mappings, returning: form_datas - a tuple of form_data objects unique_elements - a tuple of unique elements across all forms element_numbers - a mapping to unique numbers for all elements """ begin("Compiler stage 1: Analyzing %s(s)" % (kind,)) form_datas = () unique_elements = set() unique_coordinate_elements = set() if kind == "form": forms = ufl_objects # Analyze forms form_datas = tuple(_analyze_form(form, parameters) for form in forms) # Extract unique elements accross all forms for form_data in form_datas: unique_elements.update(form_data.unique_sub_elements) # Extract coordinate elements across all forms for form_data in form_datas: unique_coordinate_elements.update(form_data.coordinate_elements) elif kind == "element": elements = ufl_objects # Extract unique (sub)elements unique_elements.update(extract_sub_elements(elements)) elif kind == "coordinate_mapping": meshes = ufl_objects # Extract unique (sub)elements unique_coordinate_elements = [mesh.ufl_coordinate_element() for mesh in meshes] # Make sure coordinate elements and their subelements are included unique_elements.update(extract_sub_elements(unique_coordinate_elements)) # Sort elements unique_elements = sort_elements(unique_elements) #unique_coordinate_elements = sort_elements(unique_coordinate_elements) unique_coordinate_elements = sorted(unique_coordinate_elements, key=lambda x: repr(x)) # Check for schemes for QuadratureElements for element in unique_elements: if element.family() == "Quadrature": qs = element.quadrature_scheme() if qs is None: error("Missing quad_scheme in quadrature element.") # Compute element numbers element_numbers = _compute_element_numbers(unique_elements) end() return form_datas, unique_elements, element_numbers, unique_coordinate_elements