# -*- coding: utf-8 -*-## This file is subject to the terms and conditions defined in# file 'LICENSE.txt', which is part of this source code package.#fromtypingimportAny,NewType,Dict,Type,Union,IterableimportMuscat.Containers.ElementsDescriptionasEDfromMuscat.Helpers.FactoryimportFactoryimportMuscat.FE.Spaces.PointSpacesasPointSpacesimportMuscat.FE.Spaces.BarSpacesasBarSpacesimportMuscat.FE.Spaces.TriSpacesasTriSpacesimportMuscat.FE.Spaces.TetSpacesasTetSpacesimportMuscat.FE.Spaces.QuadSpacesasQuadSpacesimportMuscat.FE.Spaces.HexaSpacesasHexaSpacesimportMuscat.FE.Spaces.WedgeSpacesasWedgeSpacesimportMuscat.FE.Spaces.PyrSpacesasPyrSpacesfromMuscat.FE.Spaces.SpaceBaseimportSpaceBase
[docs]classFESpace:def__init__(self,name:str):super().__init__()self.storage:Dict[ED.ElementType,SpaceBase]={}self.name:str=name#if true means some shape function are shared across the elements; meaning we must compute a global numberingself.hasSharedShapeFunctions=Truedef__getitem__(self,elementType:Union[str,ED.ElementType]):returnself.storage[ED.ElementType(elementType)]def__setitem__(self,elementType:Union[str,ED.ElementType],value:SpaceBase):self.storage[ED.ElementType(elementType)]=value
LagrangeSpaceGeo=FESpace("LagrangeSpaceGeo")"""Isoparametric Lagrange space (if the mesh is quadratic the field is P2)."""LagrangeSpaceGeo[ED.Point_1]=PointSpaces.Point_P0_Lagrange()LagrangeSpaceGeo[ED.Bar_2]=BarSpaces.Bar_P1_Lagrange()LagrangeSpaceGeo[ED.Bar_3]=BarSpaces.Bar_P2_Lagrange()LagrangeSpaceGeo[ED.Triangle_3]=TriSpaces.Tri_P1_Lagrange()LagrangeSpaceGeo[ED.Triangle_6]=TriSpaces.Tri_P2_Lagrange()LagrangeSpaceGeo[ED.Tetrahedron_4]=TetSpaces.Tet_P1_Lagrange()LagrangeSpaceGeo[ED.Tetrahedron_10]=TetSpaces.Tet_P2_Lagrange()LagrangeSpaceGeo[ED.Quadrangle_4]=QuadSpaces.Quad_P1_Lagrange()LagrangeSpaceGeo[ED.Quadrangle_8]=QuadSpaces.Quad8_P2_Lagrange()LagrangeSpaceGeo[ED.Quadrangle_9]=QuadSpaces.Quad_P2_Lagrange()LagrangeSpaceGeo[ED.Hexahedron_8]=HexaSpaces.Hexa_P1_Lagrange()LagrangeSpaceGeo[ED.Hexahedron_20]=HexaSpaces.Hexa20_P2_Lagrange()LagrangeSpaceGeo[ED.Hexahedron_27]=HexaSpaces.Hexa_P2_Lagrange()LagrangeSpaceGeo[ED.Wedge_6]=WedgeSpaces.Wedge_P1_Lagrange()LagrangeSpaceGeo[ED.Wedge_15]=WedgeSpaces.Wedge15_P2_Lagrange()LagrangeSpaceGeo[ED.Wedge_18]=WedgeSpaces.Wedge_P2_Lagrange()LagrangeSpaceGeo[ED.Pyramid_5]=PyrSpaces.Pyr_P1_Lagrange()LagrangeSpaceGeo[ED.Pyramid_13]=PyrSpaces.Pyr13_P2_Lagrange()LagrangeSpaceGeo[ED.Pyramid_14]=PyrSpaces.Pyr14_P2_Lagrange()RegisterFESpace(LagrangeSpaceGeo())ConstantSpaceGlobal=FESpace("ConstantSpaceGlobal")"""Global constant space. Used to integrate expressions over a domain into a scalar."""ConstantSpaceGlobal[ED.Point_1]=PointSpaces.Point_P0_Global()ConstantSpaceGlobal[ED.Bar_2]=BarSpaces.Bar_P0_Global()ConstantSpaceGlobal[ED.Bar_3]=BarSpaces.Bar_P0_Global()ConstantSpaceGlobal[ED.Triangle_3]=TriSpaces.Tri_P0_Global()ConstantSpaceGlobal[ED.Triangle_6]=TriSpaces.Tri_P0_Global()ConstantSpaceGlobal[ED.Tetrahedron_4]=TetSpaces.Tet_P0_Global()ConstantSpaceGlobal[ED.Tetrahedron_10]=TetSpaces.Tet_P0_Global()ConstantSpaceGlobal[ED.Quadrangle_4]=QuadSpaces.Quad_P0_Global()ConstantSpaceGlobal[ED.Quadrangle_8]=QuadSpaces.Quad_P0_Global()ConstantSpaceGlobal[ED.Quadrangle_9]=QuadSpaces.Quad_P0_Global()ConstantSpaceGlobal[ED.Hexahedron_8]=HexaSpaces.Hexa_P0_Global()ConstantSpaceGlobal[ED.Hexahedron_20]=HexaSpaces.Hexa_P0_Global()ConstantSpaceGlobal[ED.Hexahedron_27]=HexaSpaces.Hexa_P0_Global()ConstantSpaceGlobal[ED.Wedge_6]=WedgeSpaces.Wedge_P0_Global()ConstantSpaceGlobal[ED.Wedge_15]=WedgeSpaces.Wedge_P0_Global()ConstantSpaceGlobal[ED.Wedge_18]=WedgeSpaces.Wedge_P0_Global()ConstantSpaceGlobal[ED.Pyramid_5]=PyrSpaces.Pyr_P0_Global()ConstantSpaceGlobal[ED.Pyramid_13]=PyrSpaces.Pyr_P0_Global()ConstantSpaceGlobal[ED.Pyramid_14]=PyrSpaces.Pyr_P0_Global()RegisterFESpace(ConstantSpaceGlobal())LagrangeSpaceP0=FESpace("LagrangeSpaceP0")LagrangeSpaceP0.hasSharedShapeFunctions=False"""Degree 0 Lagrange space. This space is constant per element (one value per element)."""LagrangeSpaceP0[ED.Point_1]=PointSpaces.Point_P0_Lagrange()LagrangeSpaceP0[ED.Bar_2]=BarSpaces.Bar_P0_Lagrange()LagrangeSpaceP0[ED.Bar_3]=BarSpaces.Bar_P0_Lagrange()LagrangeSpaceP0[ED.Triangle_3]=TriSpaces.Tri_P0_Lagrange()LagrangeSpaceP0[ED.Triangle_6]=TriSpaces.Tri_P0_Lagrange()LagrangeSpaceP0[ED.Tetrahedron_4]=TetSpaces.Tet_P0_Lagrange()LagrangeSpaceP0[ED.Tetrahedron_10]=TetSpaces.Tet_P0_Lagrange()LagrangeSpaceP0[ED.Quadrangle_4]=QuadSpaces.Quad_P0_Lagrange()LagrangeSpaceP0[ED.Quadrangle_8]=QuadSpaces.Quad_P0_Lagrange()LagrangeSpaceP0[ED.Quadrangle_9]=QuadSpaces.Quad_P0_Lagrange()LagrangeSpaceP0[ED.Hexahedron_8]=HexaSpaces.Hexa_P0_Lagrange()LagrangeSpaceP0[ED.Hexahedron_20]=HexaSpaces.Hexa_P0_Lagrange()LagrangeSpaceP0[ED.Hexahedron_27]=HexaSpaces.Hexa_P0_Lagrange()LagrangeSpaceP0[ED.Wedge_6]=WedgeSpaces.Wedge_P0_Lagrange()LagrangeSpaceP0[ED.Wedge_15]=WedgeSpaces.Wedge_P0_Lagrange()LagrangeSpaceP0[ED.Wedge_18]=WedgeSpaces.Wedge_P0_Lagrange()LagrangeSpaceP0[ED.Pyramid_5]=PyrSpaces.Pyr_P0_Lagrange()LagrangeSpaceP0[ED.Pyramid_13]=PyrSpaces.Pyr_P0_Lagrange()LagrangeSpaceP0[ED.Pyramid_14]=PyrSpaces.Pyr_P0_Lagrange()RegisterFESpace(LagrangeSpaceP0())LagrangeSpaceP1=FESpace("LagrangeSpaceP1")"""Degree 1 Lagrange space. This space implement linear interpolation functions."""LagrangeSpaceP1[ED.Point_1]=PointSpaces.Point_P0_Lagrange()LagrangeSpaceP1[ED.Bar_2]=BarSpaces.Bar_P1_Lagrange()LagrangeSpaceP1[ED.Bar_3]=BarSpaces.Bar_P1_Lagrange()LagrangeSpaceP1[ED.Triangle_3]=TriSpaces.Tri_P1_Lagrange()LagrangeSpaceP1[ED.Triangle_6]=TriSpaces.Tri_P1_Lagrange()LagrangeSpaceP1[ED.Tetrahedron_4]=TetSpaces.Tet_P1_Lagrange()LagrangeSpaceP1[ED.Tetrahedron_10]=TetSpaces.Tet_P1_Lagrange()LagrangeSpaceP1[ED.Quadrangle_4]=QuadSpaces.Quad_P1_Lagrange()LagrangeSpaceP1[ED.Quadrangle_8]=QuadSpaces.Quad_P1_Lagrange()LagrangeSpaceP1[ED.Quadrangle_9]=QuadSpaces.Quad_P1_Lagrange()LagrangeSpaceP1[ED.Hexahedron_8]=HexaSpaces.Hexa_P1_Lagrange()LagrangeSpaceP1[ED.Hexahedron_20]=HexaSpaces.Hexa_P1_Lagrange()LagrangeSpaceP1[ED.Hexahedron_27]=HexaSpaces.Hexa_P1_Lagrange()LagrangeSpaceP1[ED.Wedge_6]=WedgeSpaces.Wedge_P1_Lagrange()LagrangeSpaceP1[ED.Wedge_15]=WedgeSpaces.Wedge_P1_Lagrange()LagrangeSpaceP1[ED.Wedge_18]=WedgeSpaces.Wedge_P1_Lagrange()LagrangeSpaceP1[ED.Pyramid_5]=PyrSpaces.Pyr_P1_Lagrange()LagrangeSpaceP1[ED.Pyramid_13]=PyrSpaces.Pyr_P1_Lagrange()LagrangeSpaceP1[ED.Pyramid_14]=PyrSpaces.Pyr_P1_Lagrange()RegisterFESpace(LagrangeSpaceP1())LagrangeSpaceP2=FESpace("LagrangeSpaceP2")"""Degree 2 Lagrange space. This space implement quadratic interpolation functions."""LagrangeSpaceP2[ED.Point_1]=PointSpaces.Point_P0_Lagrange()LagrangeSpaceP2[ED.Bar_2]=BarSpaces.Bar_P2_Lagrange()LagrangeSpaceP2[ED.Bar_3]=BarSpaces.Bar_P2_Lagrange()LagrangeSpaceP2[ED.Triangle_3]=TriSpaces.Tri_P2_Lagrange()LagrangeSpaceP2[ED.Triangle_6]=TriSpaces.Tri_P2_Lagrange()LagrangeSpaceP2[ED.Tetrahedron_4]=TetSpaces.Tet_P2_Lagrange()LagrangeSpaceP2[ED.Tetrahedron_10]=TetSpaces.Tet_P2_Lagrange()LagrangeSpaceP2[ED.Quadrangle_4]=QuadSpaces.Quad_P2_Lagrange()LagrangeSpaceP2[ED.Quadrangle_8]=QuadSpaces.Quad_P2_Lagrange()LagrangeSpaceP2[ED.Quadrangle_9]=QuadSpaces.Quad_P2_Lagrange()LagrangeSpaceP2[ED.Hexahedron_8]=HexaSpaces.Hexa_P2_Lagrange()LagrangeSpaceP2[ED.Hexahedron_20]=HexaSpaces.Hexa_P2_Lagrange()LagrangeSpaceP2[ED.Hexahedron_27]=HexaSpaces.Hexa_P2_Lagrange()LagrangeSpaceP2[ED.Wedge_6]=WedgeSpaces.Wedge_P2_Lagrange()LagrangeSpaceP2[ED.Wedge_15]=WedgeSpaces.Wedge_P2_Lagrange()LagrangeSpaceP2[ED.Wedge_18]=WedgeSpaces.Wedge_P2_Lagrange()LagrangeSpaceP2[ED.Pyramid_5]=PyrSpaces.Pyr14_P2_Lagrange()LagrangeSpaceP2[ED.Pyramid_13]=PyrSpaces.Pyr14_P2_Lagrange()LagrangeSpaceP2[ED.Pyramid_14]=PyrSpaces.Pyr14_P2_Lagrange()RegisterFESpace(LagrangeSpaceP2())LagrangeSpaceP2Serendipity=FESpace("LagrangeSpaceP2Serendipity")LagrangeSpaceP2Serendipity[ED.Point_1]=PointSpaces.Point_P0_Lagrange()LagrangeSpaceP2Serendipity[ED.Bar_2]=BarSpaces.Bar_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Bar_3]=BarSpaces.Bar_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Triangle_3]=TriSpaces.Tri_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Triangle_6]=TriSpaces.Tri_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Tetrahedron_4]=TetSpaces.Tet_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Tetrahedron_10]=TetSpaces.Tet_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Quadrangle_4]=QuadSpaces.Quad_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Quadrangle_8]=QuadSpaces.Quad8_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Quadrangle_9]=QuadSpaces.Quad_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Hexahedron_8]=HexaSpaces.Hexa_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Hexahedron_20]=HexaSpaces.Hexa20_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Hexahedron_27]=HexaSpaces.Hexa_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Wedge_6]=WedgeSpaces.Wedge_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Wedge_15]=WedgeSpaces.Wedge15_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Wedge_18]=WedgeSpaces.Wedge_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Pyramid_5]=PyrSpaces.Pyr14_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Pyramid_13]=PyrSpaces.Pyr13_P2_Lagrange()LagrangeSpaceP2Serendipity[ED.Pyramid_14]=PyrSpaces.Pyr14_P2_Lagrange()RegisterFESpace(LagrangeSpaceP2Serendipity())
[docs]defInitAllSpaces()->None:"""Function to create all the spaces, this need to be called at the beginning of the app in a multi threated app"""forfeSpaceNameinGetAvailableFESpacesNames():GetFESpaceByName(feSpaceName).InitSpaces()