Source code for edelweissfe.sets.elementset

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#  ---------------------------------------------------------------------
#
#  _____    _      _              _         _____ _____
# | ____|__| | ___| |_      _____(_)___ ___|  ___| ____|
# |  _| / _` |/ _ \ \ \ /\ / / _ \ / __/ __| |_  |  _|
# | |__| (_| |  __/ |\ V  V /  __/ \__ \__ \  _| | |___
# |_____\__,_|\___|_| \_/\_/ \___|_|___/___/_|   |_____|
#
#
#  Unit of Strength of Materials and Structural Analysis
#  University of Innsbruck,
#  2017 - today
#
#  Alexander Dummer alexander.dummer@uibk.ac.at
#  Paul Hofer Paul.Hofer@uibk.ac.at
#
#  This file is part of EdelweissFE.
#
#  This library is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 2.1 of the License, or (at your option) any later version.
#
#  The full text of the license can be found in the file LICENSE.md at
#  the top level directory of EdelweissFE.
#  ---------------------------------------------------------------------

from edelweissfe.elements.base.baseelement import BaseElement
from edelweissfe.utils.misc import checkSuccessfulExtension

if checkSuccessfulExtension("edelweissfe.elements.marmotelement.element"):
    from edelweissfe.elements.marmotelement.element import MarmotElementWrapper
else:
    MarmotElementWrapper = None

if checkSuccessfulExtension("edelweissfe.materials.marmot.marmothypoelastic") or checkSuccessfulExtension(
    "edelweissfe.materials.marmot.marmotgradientenhancedhypoelastic"
):
    # Either point-wise material family's extension suffices for the element to be (partially) usable.
    from edelweissfe.elements.marmotsingleqpelement.element import (
        MarmotMaterialWrappingElement,
    )
else:
    MarmotMaterialWrappingElement = None

from edelweissfe.sets.orderedset import OrderedSet
from edelweissfe.utils.meshtools import extractNodesFromElementSet


[docs] class ElementSet(OrderedSet): """A basic element set. It has a label, and a list containing unique elements. Parameters ---------- name The unique label for this element set. elements A list of elements. """ def __init__( self, label: str, elements, ): self.allowedObjectTypes = [BaseElement] self.allowedObjectTypes.append(MarmotElementWrapper) if MarmotElementWrapper is not None else None ( self.allowedObjectTypes.append(MarmotMaterialWrappingElement) if MarmotMaterialWrappingElement is not None else None ) super().__init__(label, elements) self._nodes = None self.elements = self.items def extractNodeSet( self, ): if not self._nodes: self._nodes = extractNodesFromElementSet(self) return self._nodes
[docs] def replaceMembers(self, item_s): """Replace all members in-place (see :meth:`OrderedSet.replaceMembers`), additionally invalidating the cached :meth:`extractNodeSet` result, which is stale once the element membership changes.""" super().replaceMembers(item_s) self._nodes = None