Ejemplo n.º 1
0
    def testOneElement(self):
        with ControlledExecutionScope(
                os.path.dirname(os.path.realpath(__file__))):
            # solve fluid
            self.solve('AdjointVMSSensitivity2DTest/one_element_test')
            # solve adjoint
            test = AdjointFluidAnalysis(
                Model(),
                self._readParameters(
                    'AdjointVMSSensitivity2DTest/one_element_test_adjoint'))
            test.Run()
            Sensitivity = [[]]
            Sensitivity[0].append(test._GetSolver().main_model_part.GetNode(
                1).GetSolutionStepValue(SHAPE_SENSITIVITY_X))
            Sensitivity[0].append(test._GetSolver().main_model_part.GetNode(
                1).GetSolutionStepValue(SHAPE_SENSITIVITY_Y))

            # calculate sensitivity by finite difference
            step_size = 0.00000001
            FDSensitivity = self._computeFiniteDifferenceDragSensitivity(
                [1], step_size,
                './AdjointVMSSensitivity2DTest/one_element_test',
                [1.0, 0.0, 0.0], './Structure_drag.dat')
            self.assertAlmostEqual(Sensitivity[0][0], FDSensitivity[0][0], 4)
            self.assertAlmostEqual(Sensitivity[0][1], FDSensitivity[0][1], 4)
            self._removeH5Files("MainModelPart")
            kratos_utils.DeleteFileIfExisting(
                "./AdjointVMSSensitivity2DTest/one_element_test.time")
            kratos_utils.DeleteFileIfExisting("./Structure_drag.dat")
            kratos_utils.DeleteFileIfExisting("./one_element.post.bin")
            kratos_utils.DeleteFileIfExisting("./tests.post.lst")
    def testCylinder(self):
        with ControlledExecutionScope(os.path.dirname(os.path.realpath(__file__))):
            # solve fluid
            model = Kratos.Model()
            with open('AdjointVMSSensitivity2DTest/mpi_cylinder_test_parameters.json', 'r') as parameter_file:
                project_parameters = Kratos.Parameters(parameter_file.read())
                parameter_file.close()
            primal_simulation = FluidDynamicsAnalysis(model,project_parameters)
            primal_simulation.Run()
            KratosMPI.mpi.world.barrier()

            # solve adjoint
            with open('AdjointVMSSensitivity2DTest/mpi_cylinder_test_adjoint_parameters.json', 'r') as parameter_file:
                project_parameters = Kratos.Parameters(parameter_file.read())
                parameter_file.close()

            adjoint_model = Kratos.Model()
            adjoint_simulation = AdjointFluidAnalysis(adjoint_model,project_parameters)
            adjoint_simulation.Run()
            KratosMPI.mpi.world.barrier()
            rank = adjoint_simulation._solver.main_model_part.GetCommunicator().MyPID()
            # remove files
            if rank == 0:
                self._remove_file("./AdjointVMSSensitivity2DTest/mpi_cylinder_test_probe1.dat")
                self._remove_file("./AdjointVMSSensitivity2DTest/mpi_cylinder_test_probe2.dat")
                self._remove_file("./AdjointVMSSensitivity2DTest/mpi_cylinder_test_adjoint_probe1.dat")
                self._remove_file("./AdjointVMSSensitivity2DTest/mpi_cylinder_test_adjoint_probe2.dat")
                self._remove_file("./AdjointVMSSensitivity2DTest/mpi_cylinder_test_adjoint_probe3.dat")
                self._remove_file("./AdjointVMSSensitivity2DTest/cylinder_test.time")
                self._remove_h5_files("primal")
            self._remove_file("./AdjointVMSSensitivity2DTest/cylinder_test_" + str(rank) + ".time")
            self._remove_file("./AdjointVMSSensitivity2DTest/cylinder_test_" + str(rank) + ".mdpa")
Ejemplo n.º 3
0
 def _createAdjointTest(self, parameter_file_name):
     test = AdjointFluidAnalysis(Model(), self._readParameters(parameter_file_name))
     return test
Ejemplo n.º 4
0
    def _run_test(self, primal_parameter_file_name,
                  adjoint_parameter_file_name):
        model = km.Model()
        settings = km.Parameters(r'''{}''')

        with open(primal_parameter_file_name, 'r') as primal_parameter_file:
            settings.AddValue("primal_settings",
                              km.Parameters(primal_parameter_file.read()))

        with open(adjoint_parameter_file_name, 'r') as adjoint_parameter_file:
            settings.AddValue("adjoint_settings",
                              km.Parameters(adjoint_parameter_file.read()))

        # Add hdf5 output to the primal problem
        settings["primal_settings"]["auxiliar_process_list"].Append(
            km.Parameters(r'''{
            "kratos_module" : "KratosMultiphysics.HDF5Application",
            "python_module" : "single_mesh_primal_output_process",
            "Parameters" : {
                "model_part_name" : "MainModelPart",
                "file_settings" : {
                    "file_access_mode" : "truncate"
                },
                "model_part_output_settings" : {
                    "prefix" : "/ModelData"
                },
                "nodal_solution_step_data_settings" : {
                    "list_of_variables": ["VELOCITY", "ACCELERATION", "PRESSURE"]
                },
                "output_time_settings" : {
                    "output_step_frequency": 1,
                    "file_name" : "primal_output"
                }
            }
        }'''))

        # to check the results: add output settings block if needed
        if self.print_output:
            settings["adjoint_settings"].AddValue(
                "output_configuration",
                km.Parameters(r'''{
                "result_file_configuration" : {
                    "gidpost_flags" : {
                        "GiDPostMode"           : "GiD_PostBinary",
                        "WriteDeformedMeshFlag" : "WriteUndeformed",
                        "WriteConditionsFlag"   : "WriteConditions",
                        "MultiFileFlag"         : "SingleFile"
                    },
                    "file_label"          : "time",
                    "output_control_type" : "step",
                    "output_frequency"    : 1,
                    "body_output"         : true,
                    "node_output"         : false,
                    "skin_output"         : false,
                    "plane_output"        : [],
                    "nodal_results"       : ["VELOCITY","PRESSURE","ADJOINT_VELOCITY","ADJOINT_PRESSURE","SHAPE_SENSITIVITY"],
                    "gauss_point_results" : []
                },
                "point_data_configuration"  : []
            }'''))

        primal_analysis = FluidDynamicsAnalysis(model,
                                                settings["primal_settings"])
        primal_analysis.Run()
        adjoint_model = km.Model()
        adjoint_analysis = AdjointFluidAnalysis(adjoint_model,
                                                settings["adjoint_settings"])
        adjoint_analysis.Run()

        kratos_utilities.DeleteFileIfExisting("cylinder_2d.time")
        self._remove_h5_files("primal_output")