Ejemplo n.º 1
0
def group_add_group_elements(group: FieldGroup,
                             other_group: FieldGroup,
                             only_dimension=None):
    '''
    Add to group elements and/or nodes from other_group.
    :param only_dimension: If set, only add objects of this dimension.
    '''
    fieldmodule = group.getFieldmodule()
    with ChangeManager(fieldmodule):
        for dimension in [only_dimension] if only_dimension else range(4):
            if dimension > 0:
                mesh = fieldmodule.findMeshByDimension(dimension)
                element_group = group.getFieldElementGroup(mesh)
                if not element_group.isValid():
                    element_group = group.createFieldElementGroup(mesh)
                mesh_group = element_group.getMeshGroup()
                mesh_group.addElementsConditional(
                    other_group.getFieldElementGroup(mesh))
            elif dimension == 0:
                nodeset = fieldmodule.findNodesetByFieldDomainType(
                    Field.DOMAIN_TYPE_NODES)
                node_group = group.getFieldNodeGroup(nodeset)
                if not node_group.isValid():
                    node_group = group.createFieldNodeGroup(nodeset)
                nodeset_group = node_group.getNodesetGroup()
                nodeset_group.addNodesConditional(
                    other_group.getFieldNodeGroup(nodeset))
Ejemplo n.º 2
0
def group_add_group_elements(group: FieldGroup,
                             other_group: FieldGroup,
                             highest_dimension_only=True):
    """
    Add to group elements from other_group.
    :param highest_dimension_only: If set (default), only add elements of
    highest dimension present in other_group, otherwise add all dimensions.
    """
    fieldmodule = group.getFieldmodule()
    with ChangeManager(fieldmodule):
        for dimension in range(3, 0, -1):
            mesh = fieldmodule.findMeshByDimension(dimension)
            other_element_group = other_group.getFieldElementGroup(mesh)
            if other_element_group.isValid() and (
                    other_element_group.getMeshGroup().getSize() > 0):
                element_group = group.getFieldElementGroup(mesh)
                if not element_group.isValid():
                    element_group = group.createFieldElementGroup(mesh)
                mesh_group = element_group.getMeshGroup()
                mesh_group.addElementsConditional(other_element_group)
                if highest_dimension_only:
                    break