Exemplo n.º 1
0
def find_or_create_field_node_group(group: FieldGroup, nodeset: Nodeset) -> FieldNodeGroup:
    """
    Gets or creates the node group field for the supplied nodeset in group.
    Field is managed by its parent group field.

    :param group:  Zinc group field that manages child node group field.
    :param nodeset:  A nodeset from group region to get or create subgroup of.
    :return: Zinc FieldNodeGroup.
    """
    node_group = group.getFieldNodeGroup(nodeset)
    if not node_group.isValid():
        node_group = group.createFieldNodeGroup(nodeset)
    return node_group
Exemplo n.º 2
0
def group_add_group_nodes(group: FieldGroup, other_group: FieldGroup,
                          nodeset: Nodeset):
    """
    Add to group elements and/or nodes from other_group.
    :param nodeset: Nodeset to add nodes from.
    """
    other_node_group = other_group.getFieldNodeGroup(nodeset)
    if other_node_group.isValid() and (
            other_node_group.getNodesetGroup().getSize() > 0):
        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))
Exemplo n.º 3
0
def group_get_highest_dimension(group : FieldGroup):
    '''
    Get highest dimension of elements or nodes in group.
    :return: Dimensions from 3-0, or -1 if empty.
    '''
    fieldmodule = group.getFieldmodule()
    for dimension in range(3, 0, -1):
        mesh = fieldmodule.findMeshByDimension(dimension)
        element_group = group.getFieldElementGroup(mesh)
        if element_group.isValid() and (element_group.getMeshGroup().getSize() > 0):
            return dimension
    nodeset = fieldmodule.findNodesetByFieldDomainType(Field.DOMAIN_TYPE_NODES)
    node_group = group.getFieldNodeGroup(nodeset)
    if node_group.isValid() and (node_group.getNodesetGroup().getSize() > 0):
        return 0
    return -1
Exemplo n.º 4
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))
Exemplo n.º 5
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