from__future__importabsolute_importfrom__future__importdivisionfrom__future__importprint_functionfromcompas_fea2.baseimportFEADatadocs="""Note----BoundaryConditions are registered to a :class:`compas_fea2.model.Model`.Warning-------The `axes` parameter is WIP. Currently only global axes can be used.Parameters----------name : str, optional Uniqe identifier. If not provided it is automatically generated. Set a name if you want a more human-readable input file.axes : str, optional The refernce axes.Attributes----------name : str Uniqe identifier.x : bool Restrain translations along the x axis.y : bool Restrain translations along the y axis.z : bool Restrain translations along the z axis.xx : bool Restrain rotations around the x axis.yy : bool Restrain rotations around the y axis.zz : bool Restrain rotations around the z axis.components : dict Dictionary with component-value pairs summarizing the boundary condition.axes : str The refernce axes."""
[docs]class_BoundaryCondition(FEAData):"""Base class for all zero-valued boundary conditions. """__doc__+=docsdef__init__(self,axes='global',name=None,**kwargs):super(_BoundaryCondition,self).__init__(name=name,**kwargs)self._axes=axesself._x=Falseself._y=Falseself._z=Falseself._xx=Falseself._yy=Falseself._zz=False@propertydefx(self):returnself._x@propertydefy(self):returnself._y@propertydefz(self):returnself._z@propertydefxx(self):returnself._xx@propertydefyy(self):returnself._yy@propertydefzz(self):returnself._zz@propertydefaxes(self):returnself._axes@axes.setterdefaxes(self,value):self._axes=value@propertydefcomponents(self):return{c:getattr(self,c)forcin['x','y','z','xx','yy','zz']}
[docs]classGeneralBC(_BoundaryCondition):"""Costumized boundary condition. """__doc__+=docs__doc__+="""Additional Parameters---------------------x : bool Restrain translations along the x axis.y : bool Restrain translations along the y axis.z : bool Restrain translations along the z axis.xx : bool Restrain rotations around the x axis.yy : bool Restrain rotations around the y axis.zz : bool Restrain rotations around the z axis. """def__init__(self,name=None,x=False,y=False,z=False,xx=False,yy=False,zz=False,**kwargs):super(GeneralBC,self).__init__(name=name,**kwargs)self._x=xself._y=yself._z=zself._xx=xxself._yy=yyself._zz=zz
[docs]classClampBCXX(PinnedBC):"""A pinned nodal displacement boundary condition clamped in XX. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(ClampBCXX,self).__init__(name=name,**kwargs)self._xx=True
[docs]classClampBCYY(PinnedBC):"""A pinned nodal displacement boundary condition clamped in YY. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(ClampBCYY,self).__init__(name=name,**kwargs)self._yy=True
[docs]classClampBCZZ(PinnedBC):"""A pinned nodal displacement boundary condition clamped in ZZ. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(ClampBCZZ,self).__init__(name=name,**kwargs)self._zz=True
[docs]classRollerBCX(PinnedBC):"""A pinned nodal displacement boundary condition released in X. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(RollerBCX,self).__init__(name=name,**kwargs)self._x=False
[docs]classRollerBCY(PinnedBC):"""A pinned nodal displacement boundary condition released in Y. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(RollerBCY,self).__init__(name=name,**kwargs)self._y=False
[docs]classRollerBCZ(PinnedBC):"""A pinned nodal displacement boundary condition released in Z. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(RollerBCZ,self).__init__(name=name,**kwargs)self._z=False
[docs]classRollerBCXY(PinnedBC):"""A pinned nodal displacement boundary condition released in X and Y. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(RollerBCXY,self).__init__(name=name,**kwargs)self._x=Falseself._y=False
[docs]classRollerBCYZ(PinnedBC):"""A pinned nodal displacement boundary condition released in Y and Z. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(RollerBCYZ,self).__init__(name=name,**kwargs)self._y=Falseself._z=False
[docs]classRollerBCXZ(PinnedBC):"""A pinned nodal displacement boundary condition released in X and Z. """__doc__+=docsdef__init__(self,name=None,**kwargs):super(RollerBCXZ,self).__init__(name=name,**kwargs)self._x=Falseself._z=False