def test_harmonic_mdpa_input(self):
        if not kratos_utils.CheckIfApplicationsAvailable("HDF5Application"):
            self.skipTest(
                "HDF5Application not found: Skipping harmonic analysis mdpa test"
            )

        with ControlledExecutionScope(
                os.path.dirname(os.path.realpath(__file__))):
            #run simulation and write to hdf5 file
            model = KratosMultiphysics.Model()
            project_parameter_file_name = "harmonic_analysis_test/harmonic_analysis_test_eigenproblem_parameters.json"
            with open(project_parameter_file_name, 'r') as parameter_file:
                project_parameters = KratosMultiphysics.Parameters(
                    parameter_file.read())
            test = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model, project_parameters)
            test.Run()

            #start new simulation and read from hdf5 file
            model = KratosMultiphysics.Model()
            project_parameter_file_name = "harmonic_analysis_test/harmonic_analysis_test_parameters.json"
            with open(project_parameter_file_name, 'r') as parameter_file:
                project_parameters = KratosMultiphysics.Parameters(
                    parameter_file.read())
            test = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model, project_parameters)
            test.Run()

            # remove hdf5 file
            kratos_utils.DeleteFileIfExisting(
                "harmonic_analysis_test/eigen_results.h5")
            kratos_utils.DeleteFileIfExisting(
                "harmonic_analysis_test/harmonic_analysis_test.time")
    def test_harmonic_mdpa_input(self):

        with KratosUnittest.WorkFolderScope(".", __file__):
            #run simulation and write to hdf5 file
            model = KratosMultiphysics.Model()
            project_parameter_file_name = "harmonic_analysis_test/harmonic_analysis_test_eigenproblem_parameters.json"
            with open(project_parameter_file_name, 'r') as parameter_file:
                project_parameters = KratosMultiphysics.Parameters(
                    parameter_file.read())
            test = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model, project_parameters)
            test.Run()

            #start new simulation and read from hdf5 file
            model = KratosMultiphysics.Model()
            project_parameter_file_name = "harmonic_analysis_test/harmonic_analysis_test_parameters.json"
            with open(project_parameter_file_name, 'r') as parameter_file:
                project_parameters = KratosMultiphysics.Parameters(
                    parameter_file.read())
            test = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model, project_parameters)
            test.Run()

            # remove hdf5 file
            kratos_utils.DeleteFileIfExisting(
                "harmonic_analysis_test/eigen_results.h5")
            kratos_utils.DeleteFileIfExisting(
                "harmonic_analysis_test/harmonic_analysis_test.time")
    def setUp(self):
        # Within this location context:
        with KratosUnittest.WorkFolderScope(".", __file__):
            # Reading the ProjectParameters
            with open(self.primal_file_name, 'r') as parameter_file:
                primal_parameters = KratosMultiphysics.Parameters(
                    parameter_file.read())
            with open(self.adjoint_file_name, 'r') as parameter_file:
                self.adjoint_parameters = KratosMultiphysics.Parameters(
                    parameter_file.read())
            self.problem_name = primal_parameters["problem_data"][
                "problem_name"].GetString()
            self.model_part_name = primal_parameters["solver_settings"][
                "model_part_name"].GetString()

            # To avoid many prints
            if (primal_parameters["problem_data"]["echo_level"].GetInt() == 0
                    or self.adjoint_parameters["problem_data"]
                ["echo_level"].GetInt() == 0):
                KratosMultiphysics.Logger.GetDefaultOutput().SetSeverity(
                    KratosMultiphysics.Logger.Severity.WARNING)

            SelectAndVerifyLinearSolver(primal_parameters, self.skipTest)
            SelectAndVerifyLinearSolver(self.adjoint_parameters, self.skipTest)

            # solve primal problem
            model_primal = KratosMultiphysics.Model()
            primal_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_primal, primal_parameters)
            primal_analysis.Run()
            # create adjoint analysis
            model_adjoint = KratosMultiphysics.Model()
            self.adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, self.adjoint_parameters)
            self.adjoint_analysis.Initialize()
Beispiel #4
0
 def test_execution(self):
     # Within this location context:
     with controlledExecutionScope(
             os.path.dirname(os.path.realpath(__file__))):
         model_save = KratosMultiphysics.Model()
         model_load = KratosMultiphysics.Model()
         structural_mechanics_analysis.StructuralMechanicsAnalysis(
             model_save, self.project_parameters_save).Run()
         structural_mechanics_analysis.StructuralMechanicsAnalysis(
             model_load, self.project_parameters_load).Run()
    def test_nodal_reaction_response(self):
        # Create the adjoint solver
        with controlledExecutionScope(_get_test_working_dir()):
            with open("beam_test_nodal_reaction_adjoint_parameters.json",
                      'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_part_name = ProjectParametersAdjoint["solver_settings"][
                "model_part_name"].GetString()
            model_adjoint = Model()
            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)
            adjoint_analysis.Run()

        # Check sensitivity for the parameter POINT_LOAD
        reference_values = [-0.31249774999397384, -1.249]
        sensitivities_to_check = []
        sensitivities_to_check.append(
            model_adjoint.GetModelPart(model_part_name).Conditions[1].GetValue(
                POINT_LOAD_SENSITIVITY)[2])
        sensitivities_to_check.append(
            model_adjoint.GetModelPart(model_part_name).Elements[10].GetValue(
                I22_SENSITIVITY))

        self.assertAlmostEqual(sensitivities_to_check[0], reference_values[0],
                               4)
        self.assertAlmostEqual(sensitivities_to_check[1], reference_values[1],
                               2)
    def test_displacement_response(self):
        #Create the adjoint solver
        with KratosUnittest.WorkFolderScope(_get_test_working_dir(), __file__):
            with open("AdjointParameters.json", 'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_adjoint = Model()
            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)
            adjoint_analysis.Run()
def solve_primal_problem():
    with open("beam_test_parameters.json", 'r') as parameter_file:
        ProjectParametersPrimal = Parameters(parameter_file.read())

    # To avoid many prints
    if (ProjectParametersPrimal["problem_data"]["echo_level"].GetInt() == 0):
        Logger.GetDefaultOutput().SetSeverity(Logger.Severity.WARNING)

    model_primal = Model()
    primal_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
        model_primal, ProjectParametersPrimal)
    primal_analysis.Run()
Beispiel #8
0
    def setUp(self):
        # Within this location context:
        with controlledExecutionScope(
                os.path.dirname(os.path.realpath(__file__))):

            # Reading the ProjectParameters
            with open(self.file_name + "_parameters.json",
                      'r') as parameter_file:
                ProjectParameters = KratosMultiphysics.Parameters(
                    parameter_file.read())

            # Checking if frictionless_by_components is defined
            try:
                self.frictionless_by_components
            except AttributeError:
                self.frictionless_by_components = False

            # Setting for frictionless by components
            if self.frictionless_by_components:
                if ProjectParameters.Has("output_processes"):
                    post_param = ProjectParameters["output_configuration"][
                        "gid_output"]["Parameters"]["postprocess_parameters"][
                            "result_file_configuration"]
                    list_nodal_var = post_param["nodal_results"]
                    for i in range(0, list_nodal_var.size()):
                        if (list_nodal_var[i].GetString() ==
                                "LAGRANGE_MULTIPLIER_CONTACT_PRESSURE"):
                            list_nodal_var[i].SetString(
                                "VECTOR_LAGRANGE_MULTIPLIER")
                    new_list = list_nodal_var.Clone()
                    post_param.RemoveValue("nodal_results")
                    post_param.AddValue("nodal_results", new_list)
                ProjectParameters["solver_settings"]["contact_settings"][
                    "mortar_type"].SetString(
                        "ALMContactFrictionlessComponents")
                for i in range(ProjectParameters["processes"]
                               ["contact_process_list"].size()):
                    ProjectParameters["processes"]["contact_process_list"][i][
                        "Parameters"]["contact_type"].SetString(
                            "FrictionlessComponents")

            # To avoid many prints
            echo_level = ProjectParameters["problem_data"][
                "echo_level"].GetInt()
            if echo_level == 0:
                KratosMultiphysics.Logger.GetDefaultOutput().SetSeverity(
                    KratosMultiphysics.Logger.Severity.WARNING)

            # Creating the test
            model = KratosMultiphysics.Model()
            self.test = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model, ProjectParameters)
            self.test.Initialize()
    def test_local_stress_response(self):
        #Create the adjoint solver
        with controlledExecutionScope(_get_test_working_dir()):
            with open("beam_test_local_stress_adjoint_parameters.json",
                      'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_part_name = ProjectParametersAdjoint["solver_settings"][
                "model_part_name"].GetString()
            model_adjoint = Model()

            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)
            adjoint_analysis.Run()

            # Check sensitivities for the parameter I22
            reference_values = [
                -87.62277093392399, 9.497391494932984, 38.125186783868,
                0.6250049974719261, 0.15624887499699122
            ]
            sensitivities_to_check = []
            element_list = [1, 2, 3, 4, 5, 6, 10]
            for element_id in element_list:
                sensitivities_to_check.append(
                    model_adjoint.GetModelPart(model_part_name).
                    Elements[element_id].GetValue(I22_SENSITIVITY))
            sensitivities_to_check.append(
                model_adjoint.GetModelPart(model_part_name).Conditions[1].
                GetValue(POINT_LOAD_SENSITIVITY)[2])

        self.assertAlmostEqual(sensitivities_to_check[0], reference_values[0],
                               3)
        self.assertAlmostEqual(sensitivities_to_check[1], reference_values[1],
                               3)
        self.assertAlmostEqual(sensitivities_to_check[2], reference_values[1],
                               3)
        self.assertAlmostEqual(sensitivities_to_check[3], reference_values[1],
                               3)
        self.assertAlmostEqual(sensitivities_to_check[4], reference_values[1],
                               3)
        self.assertAlmostEqual(sensitivities_to_check[5], reference_values[2],
                               3)
        self.assertAlmostEqual(sensitivities_to_check[6], reference_values[3],
                               3)
        self.assertAlmostEqual(sensitivities_to_check[7], reference_values[4],
                               5)
    def test_nodal_displacement_response(self):
        # Create the adjoint solver
        with controlledExecutionScope(_get_test_working_dir()):
            with open("beam_test_nodal_disp_adjoint_parameters.json",
                      'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_part_name = ProjectParametersAdjoint["solver_settings"][
                "model_part_name"].GetString()

            model_adjoint = Model()

            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)

            adjoint_analysis.Run()

            # Check sensitivities for the parameter I22
            reference_values = [
                -0.45410279537614157, -0.37821875982596204,
                -0.006200296058668847, 0.0004340210813670321
            ]
            sensitivities_to_check = []
            element_list = [1, 6, 10]
            for element_id in element_list:
                sensitivities_to_check.append(
                    model_adjoint.GetModelPart(model_part_name).
                    Elements[element_id].GetValue(I22_SENSITIVITY))
            sensitivities_to_check.append(
                model_adjoint.GetModelPart(model_part_name).Conditions[1].
                GetValue(POINT_LOAD_SENSITIVITY)[2])

        self.assertAlmostEqual(sensitivities_to_check[0], reference_values[0],
                               4)
        self.assertAlmostEqual(sensitivities_to_check[1], reference_values[1],
                               4)
        self.assertAlmostEqual(sensitivities_to_check[2], reference_values[2],
                               4)
        self.assertAlmostEqual(sensitivities_to_check[3], reference_values[3],
                               5)
Beispiel #11
0
    def test_strain_energy_response(self):
        # Create the adjoint solver
        with controlledExecutionScope(_get_test_working_dir()):
            with open(
                    "linear_shell_test_strain_energy_adjoint_parameters.json",
                    'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_part_name = ProjectParametersAdjoint["solver_settings"][
                "model_part_name"].GetString()
            model_adjoint = Model()

            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)
            adjoint_analysis.Run()

            # Check sensitivities for the parameter THICKNESS
            reference_values = [
                -0.4958006682716821, -1.1674087588549331, -0.2471256044520311,
                0.12125502238309535
            ]
            sensitivities_to_check = []
            element_list = [1, 2, 8]
            for element_id in element_list:
                sensitivities_to_check.append(
                    model_adjoint.GetModelPart(model_part_name).
                    Elements[element_id].GetValue(THICKNESS_SENSITIVITY))
            sensitivities_to_check.append(
                model_adjoint.GetModelPart(model_part_name).Conditions[1].
                GetValue(POINT_LOAD_SENSITIVITY)[2])

            self.assertAlmostEqual(sensitivities_to_check[0],
                                   reference_values[0], 5)
            self.assertAlmostEqual(sensitivities_to_check[1],
                                   reference_values[1], 5)
            self.assertAlmostEqual(sensitivities_to_check[2],
                                   reference_values[2], 5)
            self.assertAlmostEqual(sensitivities_to_check[3],
                                   reference_values[3], 5)
    def test_strain_energy_response(self):
        # Create the adjoint solver
        with controlledExecutionScope(_get_test_working_dir()):
            with open("beam_test_strain_energy_adjoint_parameters.json",
                      'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_part_name = ProjectParametersAdjoint["solver_settings"][
                "model_part_name"].GetString()

            model_adjoint = Model()
            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)
            adjoint_analysis.Run()

            # Check sensitivities for the parameter I22
            reference_values = [
                -9.082055907522943, -7.5643751965193164, -0.12400592117339182,
                0.017360843254681547
            ]
            sensitivities_to_check = []
            element_list = [1, 6, 10]
            for element_id in element_list:
                sensitivities_to_check.append(
                    model_adjoint.GetModelPart(model_part_name).
                    Elements[element_id].GetValue(I22_SENSITIVITY))
            sensitivities_to_check.append(
                model_adjoint.GetModelPart(model_part_name).Conditions[1].
                GetValue(POINT_LOAD_SENSITIVITY)[2])

        self.assertAlmostEqual(sensitivities_to_check[0], reference_values[0],
                               4)
        self.assertAlmostEqual(sensitivities_to_check[1], reference_values[1],
                               4)
        self.assertAlmostEqual(sensitivities_to_check[2], reference_values[2],
                               4)
        self.assertAlmostEqual(sensitivities_to_check[3], reference_values[3],
                               5)
Beispiel #13
0
    def test_local_stress_response(self):
        # Create the adjoint solver
        with controlledExecutionScope(_get_test_working_dir()):
            with open("linear_shell_test_local_stress_adjoint_parameters.json",
                      'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_part_name = ProjectParametersAdjoint["solver_settings"][
                "model_part_name"].GetString()
            model_adjoint = Model()

            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)
            adjoint_analysis.Run()

            # Check sensitivities for the parameter THICKNESS
            reference_values = [
                1.7135092490964121, -6.860092387341681, 0.14749301178647778,
                -0.0823339298948347
            ]
            sensitivities_to_check = []
            element_list = [1, 2, 8]
            for element_id in element_list:
                sensitivities_to_check.append(
                    model_adjoint.GetModelPart(model_part_name).
                    Elements[element_id].GetValue(THICKNESS_SENSITIVITY))
            sensitivities_to_check.append(
                model_adjoint.GetModelPart(model_part_name).Conditions[1].
                GetValue(POINT_LOAD_SENSITIVITY)[2])

            self.assertAlmostEqual(sensitivities_to_check[0],
                                   reference_values[0], 5)
            self.assertAlmostEqual(sensitivities_to_check[1],
                                   reference_values[1], 5)
            self.assertAlmostEqual(sensitivities_to_check[2],
                                   reference_values[2], 5)
            self.assertAlmostEqual(sensitivities_to_check[3],
                                   reference_values[3], 5)
Beispiel #14
0
    def test_nodal_displacement_response(self):
        # Create the adjoint solver
        with controlledExecutionScope(_get_test_working_dir()):
            with open("linear_shell_test_nodal_disp_adjoint_parameters.json",
                      'r') as parameter_file:
                ProjectParametersAdjoint = Parameters(parameter_file.read())

            model_part_name = ProjectParametersAdjoint["solver_settings"][
                "model_part_name"].GetString()
            model_adjoint = Model()

            adjoint_analysis = structural_mechanics_analysis.StructuralMechanicsAnalysis(
                model_adjoint, ProjectParametersAdjoint)
            adjoint_analysis.Run()

            # Check sensitivities for the parameter THICKNESS
            reference_values = [
                -0.09916013365433643, -0.23348175177098657,
                -0.04942512089147077, 0.012125502238309537
            ]
            sensitivities_to_check = []
            element_list = [1, 2, 8]
            for element_id in element_list:
                sensitivities_to_check.append(
                    model_adjoint.GetModelPart(model_part_name).
                    Elements[element_id].GetValue(THICKNESS_SENSITIVITY))
            sensitivities_to_check.append(
                model_adjoint.GetModelPart(model_part_name).Conditions[1].
                GetValue(POINT_LOAD_SENSITIVITY)[2])

            self.assertAlmostEqual(sensitivities_to_check[0],
                                   reference_values[0], 5)
            self.assertAlmostEqual(sensitivities_to_check[1],
                                   reference_values[1], 5)
            self.assertAlmostEqual(sensitivities_to_check[2],
                                   reference_values[2], 5)
            self.assertAlmostEqual(sensitivities_to_check[3],
                                   reference_values[3], 5)