Beispiel #1
0
    def _apply_material_properties(self, mp):
        #define properties
        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS,
                                       1000.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.20)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 0.001)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 700.0)
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.RAYLEIGH_ALPHA, 0.03)
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.RAYLEIGH_BETA, 0.02)
        mp.GetProperties()[1].SetValue(
            KratosMultiphysics.COMPUTE_LUMPED_MASS_MATRIX, True)

        constitutive_law = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw(
        )

        mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,
                                       constitutive_law)

        prestress = KratosMultiphysics.Vector(3)
        prestress[0] = 1e4  #1e4
        prestress[1] = 0.0
        prestress[2] = 0.0
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.PRESTRESS_VECTOR, prestress)
Beispiel #2
0
    def _apply_material_properties(self, mp, dim, small_strain=True):
        #define properties
        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 210e9)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.3)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 1.0)

        g = [0, 0, 0]
        mp.GetProperties()[1].SetValue(KratosMultiphysics.VOLUME_ACCELERATION,
                                       g)

        if (dim == 2):
            if (small_strain == True):
                cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw(
                )
            else:
                self.skipTestIfApplicationsNotAvailable(
                    "ConstitutiveLawsApplication")
                cl = ConstitutiveLawsApplication.HyperElasticPlaneStrain2DLaw()
        else:
            if (small_strain == True):
                cl = StructuralMechanicsApplication.LinearElastic3DLaw()
            else:
                self.skipTestIfApplicationsNotAvailable(
                    "ConstitutiveLawsApplication")
                cl = ConstitutiveLawsApplication.HyperElastic3DLaw()
        mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
Beispiel #3
0
 def _apply_material_properties(self, mp):
     cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()
     mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
     mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 2000)
     mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 10000)
     mp.GetProperties()[1].SetValue(
         StructuralMechanicsApplication.CROSS_AREA, 1.0)
Beispiel #4
0
    def _apply_material_properties(self, mp):
        # Define properties
        mp.GetProperties()[0].SetValue(KratosMultiphysics.YOUNG_MODULUS, 1e8)
        mp.GetProperties()[0].SetValue(KratosMultiphysics.POISSON_RATIO, 0.3)
        mp.GetProperties()[0].SetValue(KratosMultiphysics.THICKNESS, 0.01)
        mp.GetProperties()[0].SetValue(KratosMultiphysics.DENSITY, 1.0)

        cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()
        mp.GetProperties()[0].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
Beispiel #5
0
def apply_material_properties(mp,dim):
    #define properties
    mp.GetProperties()[0].SetValue(KratosMultiphysics.YOUNG_MODULUS,1000)
    mp.GetProperties()[0].SetValue(KratosMultiphysics.POISSON_RATIO,0.3)
    mp.GetProperties()[0].SetValue(KratosMultiphysics.THICKNESS,1.0)
    mp.GetProperties()[0].SetValue(KratosMultiphysics.DENSITY,1.0)
    g = [0,0,0]
    mp.GetProperties()[0].SetValue(KratosMultiphysics.VOLUME_ACCELERATION,g)
    cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()
    mp.GetProperties()[0].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,cl)
    def _apply_material_properties(self, mp, dim):
        #define properties
        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 210e9)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.3)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 1.0)

        g = [0, 0, 0]
        mp.GetProperties()[1].SetValue(KratosMultiphysics.VOLUME_ACCELERATION,
                                       g)

        if (dim == 2):
            cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()
        else:
            cl = StructuralMechanicsApplication.LinearElastic3DLaw()
        mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
    def _apply_material_properties(self, mp):
        #define properties
        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 0.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 1.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 1.0)
        prestress = KratosMultiphysics.Matrix(1, 3)
        prestress[0, 0] = 2.0
        prestress[0, 1] = 1.0
        prestress[0, 2] = 0.0
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.MEMBRANE_PRESTRESS, prestress)

        cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()

        mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
Beispiel #8
0
    def _apply_material_properties(self,mp):
        #define properties
        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS,0.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO,0.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS,1.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY,1.0)
        prestress = KratosMultiphysics.Vector(3)
        prestress[0]=2.0
        prestress[1]=1.0
        prestress[2]=0.0
        mp.GetProperties()[1].SetValue(StructuralMechanicsApplication.PRESTRESS_VECTOR,prestress)


        cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()

        mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,cl)
        mp.GetProperties()[1].SetValue(StructuralMechanicsApplication.PROJECTION_TYPE_COMBO,"planar")
Beispiel #9
0
    def _apply_material_properties(self, mp):
        #define properties
        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS,
                                       1000.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.20)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 0.001)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 700.0)
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.RAYLEIGH_ALPHA, 0.03)
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.RAYLEIGH_BETA, 0.02)

        constitutive_law = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw(
        )

        local_axis_1 = KratosMultiphysics.Vector(3)
        local_axis_1[0] = 1.0
        local_axis_1[1] = 0.0
        local_axis_1[2] = 0.0

        local_axis_2 = KratosMultiphysics.Vector(3)
        local_axis_2[0] = 0.0
        local_axis_2[1] = 0.0
        local_axis_2[2] = 1.0

        mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,
                                       constitutive_law)
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.PROJECTION_TYPE_COMBO, "planar")
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.PRESTRESS_AXIS_1_GLOBAL,
            local_axis_1)
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.PRESTRESS_AXIS_2_GLOBAL,
            local_axis_2)

        prestress = KratosMultiphysics.Vector(3)
        prestress[0] = 1e4  #1e4
        prestress[1] = 0.0
        prestress[2] = 0.0
        mp.GetProperties()[1].SetValue(
            StructuralMechanicsApplication.PRESTRESS_VECTOR, prestress)
 def _apply_material_properties(self, mp):
     cl = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()
     mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW, cl)
Beispiel #11
0
    def test_membrane_wrinkling_law(self):
        self.skipTestIfApplicationsNotAvailable("ConstitutiveLawsApplication")

        current_model = KratosMultiphysics.Model()
        mp = current_model.CreateModelPart("Structure")
        mp.SetBufferSize(2)
        mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = 3
        self._add_variables(mp)

        # add properties and subproperties
        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS,
                                       206900000000.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.30)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, 0.0001)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 7850.0)
        constitutive_law = ConstitutiveLawsApplication.WrinklingLinear2DLaw()
        mp.GetProperties()[1].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,
                                       constitutive_law)
        sub_constitutive_law = StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw(
        )
        mp.GetProperties()[2].SetValue(KratosMultiphysics.CONSTITUTIVE_LAW,
                                       sub_constitutive_law)
        mp.GetProperties()[1].AddSubProperties(mp.GetProperties()[2])

        # create nodes
        mp.CreateNewNode(1, 0.0000000000, 1.0000000000, 0.0000000000)
        mp.CreateNewNode(2, 0.0000000000, 0.0000000000, 0.0000000000)
        mp.CreateNewNode(3, 1.0000000000, 1.0000000000, 0.0000000000)
        mp.CreateNewNode(4, 1.0000000000, 0.0000000000, 0.0000000000)

        # add dofs
        self._add_dofs(mp)

        # create element
        element_name = "MembraneElement3D4N"
        mp.CreateNewElement(element_name, 1, [4, 3, 1, 2],
                            mp.GetProperties()[1])

        # create & apply dirichlet bcs
        bcs_dirichlet_all = mp.CreateSubModelPart(
            "BoundaryCondtionsDirichletAll")
        bcs_dirichlet_all.AddNodes([2, 4])

        bcs_dirichlet_mv = mp.CreateSubModelPart(
            "BoundaryCondtionsDirichletMove")
        bcs_dirichlet_mv.AddNodes([1, 3])

        self._apply_dirichlet_BCs(bcs_dirichlet_all)
        self._apply_dirichlet_BCs(bcs_dirichlet_mv, fix_type='YZ')

        # create & apply neumann bcs
        mp.CreateNewCondition("PointLoadCondition3D1N", 1, [1],
                              mp.GetProperties()[1])
        mp.CreateNewCondition("PointLoadCondition3D1N", 2, [3],
                              mp.GetProperties()[1])

        bcs_neumann = mp.CreateSubModelPart("BoundaryCondtionsNeumann")
        bcs_neumann.AddNodes([1, 3])
        bcs_neumann.AddConditions([1, 2])

        KratosMultiphysics.VariableUtils().SetScalarVar(
            StructuralMechanicsApplication.POINT_LOAD_X, 1000000.0,
            bcs_neumann.Nodes)

        # solve
        self._solve_static(mp)

        # check results
        self.assertAlmostEqual(
            mp.Nodes[1].GetSolutionStepValue(
                KratosMultiphysics.DISPLACEMENT_X), 0.58054148514004470, 4)
        self.assertAlmostEqual(
            mp.Nodes[3].GetSolutionStepValue(
                KratosMultiphysics.DISPLACEMENT_X), 0.15072065295319598, 4)
 def create_constitutive_Law():
     return StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw()
    def test_membrane_cauchy_stress_and_local_axis(self):

        current_model = KratosMultiphysics.Model()
        mp = current_model.CreateModelPart("Structure")
        mp.SetBufferSize(2)
        mp.ProcessInfo[KratosMultiphysics.DOMAIN_SIZE] = 3
        self._add_variables(mp)

        # add properties and subproperties
        thickness = 1.3
        height = 1.2
        length = 10.0

        mp.GetProperties()[1].SetValue(KratosMultiphysics.YOUNG_MODULUS, 500.0)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.POISSON_RATIO, 0.00)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.THICKNESS, thickness)
        mp.GetProperties()[1].SetValue(KratosMultiphysics.DENSITY, 7850.0)
        mp.GetProperties()[1].SetValue(
            KratosMultiphysics.CONSTITUTIVE_LAW,
            StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw())

        # create nodes
        mp.CreateNewNode(1, -0.668004, 0.9192533, 0.3856725)
        mp.CreateNewNode(2, 0.0, 0.0, 0.0)
        mp.CreateNewNode(3, 5.966131, 7.3471293, -3.4445475)
        mp.CreateNewNode(4, 6.634135, 6.427876, -3.83022)

        # add dofs
        self._add_dofs(mp)

        # create element
        element_name = "MembraneElement3D4N"
        mp.CreateNewElement(element_name, 1, [4, 3, 1, 2],
                            mp.GetProperties()[1])

        # create & apply dirichlet bcs
        bcs_dirichlet_all = mp.CreateSubModelPart(
            "BoundaryCondtionsDirichletAll")
        bcs_dirichlet_all.AddNodes([1, 2])

        self._apply_dirichlet_BCs(bcs_dirichlet_all)

        # create & apply neumann bcs
        mp.CreateNewCondition("PointLoadCondition3D1N", 1, [3],
                              mp.GetProperties()[1])
        mp.CreateNewCondition("PointLoadCondition3D1N", 2, [4],
                              mp.GetProperties()[1])

        bcs_neumann = mp.CreateSubModelPart("BoundaryCondtionsNeumann")
        bcs_neumann.AddNodes([3, 4])
        bcs_neumann.AddConditions([1, 2])
        point_load = 5.0

        KratosMultiphysics.VariableUtils().SetScalarVar(
            StructuralMechanicsApplication.POINT_LOAD_X,
            point_load * 0.6634135, bcs_neumann.Nodes)
        KratosMultiphysics.VariableUtils().SetScalarVar(
            StructuralMechanicsApplication.POINT_LOAD_Y,
            point_load * 0.6427876, bcs_neumann.Nodes)
        KratosMultiphysics.VariableUtils().SetScalarVar(
            StructuralMechanicsApplication.POINT_LOAD_Z,
            point_load * (-0.383022), bcs_neumann.Nodes)

        ## 1.) with local axis calculated from element (dependent on node numbering)
        cauchy_stress_analytical = point_load * len(
            bcs_neumann.Nodes) / (thickness * height)

        # solve
        self._solve_static(mp)

        disp_x_i = mp.Nodes[4].GetSolutionStepValue(
            KratosMultiphysics.DISPLACEMENT_X)
        disp_y_i = mp.Nodes[4].GetSolutionStepValue(
            KratosMultiphysics.DISPLACEMENT_Y)
        disp_z_i = mp.Nodes[4].GetSolutionStepValue(
            KratosMultiphysics.DISPLACEMENT_Z)
        disp_i = (disp_x_i**2 + disp_y_i**2 + disp_z_i**2)**0.5
        det_F_inv = length / (length + disp_i)

        for element_i in mp.Elements:
            pk2 = element_i.CalculateOnIntegrationPoints(
                KratosMultiphysics.PK2_STRESS_VECTOR, mp.ProcessInfo)
            cauchy = element_i.CalculateOnIntegrationPoints(
                KratosMultiphysics.CAUCHY_STRESS_VECTOR, mp.ProcessInfo)

            # check results
            for i in range(4):
                self.assertAlmostEqual(cauchy[i][0], 0.0, 5)
                self.assertAlmostEqual(cauchy[i][1], cauchy_stress_analytical,
                                       5)
                self.assertAlmostEqual(cauchy[i][2], 0.0, 5)

                self.assertAlmostEqual(pk2[i][0], 0.0, 5)
                self.assertAlmostEqual(pk2[i][1],
                                       cauchy_stress_analytical * det_F_inv, 5)
                self.assertAlmostEqual(pk2[i][2], 0.0, 5)

        ## 2.) with local mat_axis = 0.6634135,0.6427876,-0.383022 : along forces

        projection_settings = KratosMultiphysics.Parameters("""
        {
            "model_part_name"  : "Structure",
            "projection_type"  : "planar",
            "global_direction" : [0.6634135,0.6427876,-0.383022],
            "variable_name"    : "LOCAL_MATERIAL_AXIS_1"
        }
        """)
        StructuralMechanicsApplication.ProjectVectorOnSurfaceUtility.Execute(
            mp, projection_settings)

        # solve
        self._solve_static(mp)

        disp_x_i = mp.Nodes[4].GetSolutionStepValue(
            KratosMultiphysics.DISPLACEMENT_X)
        disp_y_i = mp.Nodes[4].GetSolutionStepValue(
            KratosMultiphysics.DISPLACEMENT_Y)
        disp_z_i = mp.Nodes[4].GetSolutionStepValue(
            KratosMultiphysics.DISPLACEMENT_Z)
        disp_i = (disp_x_i**2 + disp_y_i**2 + disp_z_i**2)**0.5
        det_F_inv = length / (length + disp_i)

        for element_i in mp.Elements:
            pk2 = element_i.CalculateOnIntegrationPoints(
                KratosMultiphysics.PK2_STRESS_VECTOR, mp.ProcessInfo)
            cauchy = element_i.CalculateOnIntegrationPoints(
                KratosMultiphysics.CAUCHY_STRESS_VECTOR, mp.ProcessInfo)

            # check results
            for i in range(4):
                self.assertAlmostEqual(cauchy[i][0], cauchy_stress_analytical,
                                       5)
                self.assertAlmostEqual(cauchy[i][1], 0.0, 5)
                self.assertAlmostEqual(cauchy[i][2], 0.0, 5)

                self.assertAlmostEqual(pk2[i][0],
                                       cauchy_stress_analytical * det_F_inv, 5)
                self.assertAlmostEqual(pk2[i][1], 0.0, 5)
                self.assertAlmostEqual(pk2[i][2], 0.0, 5)

        ## 3.) with local mat_axis = 0.07537005, 0.9961943, -0.0437662 -> rotate stress state by 45°
        cauchy_stress_analytical /= 2.0

        projection_settings = KratosMultiphysics.Parameters("""
        {
            "model_part_name"  : "Structure",
            "projection_type"  : "planar",
            "global_direction" : [0.07537005, 0.9961943, -0.0437662],
            "variable_name"    : "LOCAL_MATERIAL_AXIS_1"
        }
        """)
        StructuralMechanicsApplication.ProjectVectorOnSurfaceUtility.Execute(
            mp, projection_settings)

        # solve
        self._solve_static(mp)

        disp_x_i = mp.Nodes[4].GetSolutionStepValue(
            KratosMultiphysics.DISPLACEMENT_X)
        det_F_inv = length / (length + disp_x_i)

        for element_i in mp.Elements:
            cauchy = element_i.CalculateOnIntegrationPoints(
                KratosMultiphysics.CAUCHY_STRESS_VECTOR, mp.ProcessInfo)

            # check results
            for i in range(4):
                self.assertAlmostEqual(cauchy[i][0], cauchy_stress_analytical,
                                       5)
                self.assertAlmostEqual(cauchy[i][1], cauchy_stress_analytical,
                                       5)
                self.assertAlmostEqual(abs(cauchy[i][2]),
                                       cauchy_stress_analytical, 5)
    def test_specifications_utilities_elements_dependencies(self):
        current_model = KratosMultiphysics.Model()

        model_part = current_model.CreateModelPart("Main")

        node1 = model_part.CreateNewNode(1, 0.0, 0.0, 0.0)
        node2 = model_part.CreateNewNode(2, 1.0, 0.0, 0.0)
        node3 = model_part.CreateNewNode(3, 1.0, 1.0, 0.0)
        prop1 = KratosMultiphysics.Properties(1)
        model_part.AddProperties(prop1)
        prop1.SetValue(
            KratosMultiphysics.CONSTITUTIVE_LAW,
            StructuralMechanicsApplication.LinearElasticPlaneStrain2DLaw())
        elem1 = model_part.CreateNewElement("SmallDisplacementElement2D3N", 1,
                                            [1, 2, 3],
                                            model_part.GetProperties()[1])
        elem1.Initialize(model_part.ProcessInfo)

        self.assertEqual(model_part.GetNodalSolutionStepDataSize(), 0)
        KratosMultiphysics.SpecificationsUtilities.AddMissingVariables(
            model_part)
        self.assertEqual(model_part.GetNodalSolutionStepDataSize(), 3)

        self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_X),
                         False)
        self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Y),
                         False)
        self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Z),
                         False)
        KratosMultiphysics.SpecificationsUtilities.AddMissingDofs(model_part)
        self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_X),
                         True)
        self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Y),
                         True)
        self.assertEqual(node1.HasDofFor(KratosMultiphysics.DISPLACEMENT_Z),
                         True)

        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.
            DetermineTimeIntegration(model_part).sort(),
            ['explicit', 'static', 'implicit'].sort())
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.DetermineFramework(
                model_part), "lagrangian")
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.DetermineSymmetricLHS(
                model_part), True)
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.
            DeterminePositiveDefiniteLHS(model_part), True)
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.
            DetermineIfCompatibleGeometries(model_part), True)
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.
            DetermineIfRequiresTimeIntegration(model_part), True)
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.
            CheckCompatibleConstitutiveLaws(model_part), True)
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.
            CheckGeometricalPolynomialDegree(model_part), -1)
        docu = KratosMultiphysics.Parameters(
            """{"SmallDisplacementElement2D3N"   : "This is a pure displacement element"}"""
        )
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.GetDocumention(
                model_part).IsEquivalentTo(docu), True)

        # Changing the law to get a False check
        prop1.SetValue(
            KratosMultiphysics.CONSTITUTIVE_LAW,
            StructuralMechanicsApplication.LinearElasticPlaneStress2DLaw())
        elem1.Initialize(model_part.ProcessInfo)
        self.assertEqual(
            KratosMultiphysics.SpecificationsUtilities.
            CheckCompatibleConstitutiveLaws(model_part), False)