def test_add_methods(self):
        # This method checks all the "GetXXX" Methods if they throw an error
        tmp = Parameters("""{}""")

        key = "int"
        tmp.AddInt(key, 10)
        self.assertEqual(tmp[key].GetInt(), 10)

        key = "double"
        tmp.AddDouble(key, 2.0)
        self.assertEqual(tmp[key].GetDouble(), 2.0)

        key = "bool"
        tmp.AddBool(key, True)
        self.assertEqual(tmp[key].GetBool(), True)

        key = "string"
        tmp.AddString(key, "hello")
        self.assertEqual(tmp[key].GetString(), "hello")

        key = "vector"
        vector = Vector(3)
        vector[0] = 5.2
        vector[1] = -3.1
        vector[2] = 4.33
        tmp.AddVector(key, vector)
        V = tmp[key].GetVector()
        self.assertEqual(V[0], 5.2)
        self.assertEqual(V[1], -3.1)
        self.assertEqual(V[2], 4.33)

        key = "matrix"
        matrix = Matrix(3, 2)
        matrix[0, 0] = 1.0
        matrix[0, 1] = 2.0
        matrix[1, 0] = 3.0
        matrix[1, 1] = 4.0
        matrix[2, 0] = 5.0
        matrix[2, 1] = 6.0
        tmp.AddMatrix(key, matrix)
        A = tmp[key].GetMatrix()
        self.assertEqual(A[0, 0], 1.0)
        self.assertEqual(A[0, 1], 2.0)
        self.assertEqual(A[1, 0], 3.0)
        self.assertEqual(A[1, 1], 4.0)
        self.assertEqual(A[2, 0], 5.0)
        self.assertEqual(A[2, 1], 6.0)
    def __init__(self, identifier, response_settings, model):
        default_parameters = KratosMultiphysics.Parameters( """
            {
                "response_type": "stochastic_adjoint_lift_potential_jump",
                "risk_measure": "expected_value",
                "primal_settings": "",
                "adjoint_settings": "",
                "xmc_settings": "",
                "design_surface_sub_model_part_name": "",
                "auxiliary_mdpa_path": "auxiliary_mdpa",
                "primal_data_transfer_with_python": true,
                "output_dict_results_file_name": "",
                "output_pressure_file_path": ""
            }  """ )
        response_settings.ValidateAndAssignDefaults(default_parameters)

        self.identifier = identifier
        self.response_settings = response_settings

        if not response_settings["primal_settings"].GetString() == "":
            self.primal_settings = response_settings["primal_settings"].GetString()
        else:
            raise Exception("Please set the path to the primal parameters in \"primal_settings\"")

        if not response_settings["adjoint_settings"].GetString() == "":
            self.adjoint_settings = response_settings["adjoint_settings"].GetString()
        else:
            raise Exception("Please set the path to the adjoint parameters in \"adjoint_settings\"")

        if not response_settings["xmc_settings"].GetString() == "":
            self.xmc_settings_path = response_settings["xmc_settings"].GetString()
        else:
            raise Exception("Please set the path to the XMC parameters in \"xmc_settings\"")

        if not response_settings["design_surface_sub_model_part_name"].GetString() == "":
            self.design_surface_sub_model_part_name = response_settings["design_surface_sub_model_part_name"].GetString()
        else:
            raise Exception("Please set the name of the design surface submodelpart in \"design_surface_sub_model_part_name\"")

        self.auxiliary_mdpa_path = response_settings["auxiliary_mdpa_path"].GetString()
        self.risk_measure = response_settings["risk_measure"].GetString()

        if response_settings.Has("output_dict_results_file_name"):
            self.output_dict_results_file_name = response_settings["output_dict_results_file_name"].GetString()
            self.results_dict = {}
        else:
            self.output_dict_results_file_name = ""

        if response_settings.Has("output_pressure_file_path"):
            self.output_pressure_file_path = response_settings["output_pressure_file_path"].GetString()
        else:
            self.output_pressure_file_path = ""
        # Create the primal solver
        with open(self.response_settings["primal_settings"].GetString(),'r') as parameter_file:
            primal_parameters = Parameters( parameter_file.read() )

        primal_parameters = _CheckParameters(primal_parameters)
        if primal_parameters.Has("adjoint_parameters_path"):
            primal_parameters["adjoint_parameters_path"].SetString(self.response_settings["adjoint_settings"].GetString())
        else:
            primal_parameters.AddString("adjoint_parameters_path", self.response_settings["adjoint_settings"].GetString())
        if primal_parameters.Has("design_surface_sub_model_part_name"):
            primal_parameters["design_surface_sub_model_part_name"].SetString(self.design_surface_sub_model_part_name)
        else:
            primal_parameters.AddString("design_surface_sub_model_part_name", self.design_surface_sub_model_part_name)
        if primal_parameters.Has("auxiliary_mdpa_path"):
            primal_parameters["auxiliary_mdpa_path"].SetString(self.auxiliary_mdpa_path)
        else:
            primal_parameters.AddString("auxiliary_mdpa_path", self.auxiliary_mdpa_path)
        open(self.response_settings["primal_settings"].GetString(), 'w').write(primal_parameters.PrettyPrintJsonString())

        # Store current design
        self.current_model_part = _GetModelPart(model, primal_parameters["solver_settings"])