def testCylinder(self):
        with KratosUnittest.WorkFolderScope('.', __file__):
            node_ids = [1968]

            # calculate sensitivity by finite difference
            primal_parameters = AdjointVMSSensitivity2D._ReadParameters(
                './AdjointVMSSensitivity2DTest/cylinder_test_parameters.json')
            step_size = 0.00000001
            fd_sensitivities = FiniteDifferenceBodyFittedDragShapeSensitivityAnalysis.ComputeSensitivity(
                node_ids, step_size, primal_parameters, [1.0, 0.0, 0.0],
                'MainModelPart.NoSlip2D_Cylinder', SolvePrimalProblem)

            # solve adjoint
            adjoint_parameters = AdjointVMSSensitivity2D._ReadParameters(
                './AdjointVMSSensitivity2DTest/cylinder_test_adjoint_parameters.json'
            )
            adjoint_sensitivities = ComputeAdjointSensitivity(
                node_ids, adjoint_parameters, SolveAdjointProblem)

            self.assertMatrixAlmostEqual(adjoint_sensitivities,
                                         fd_sensitivities, 5)
示例#2
0
    def testTwoElementsSlipBossak(self):
        with KratosUnittest.WorkFolderScope('.', __file__):
            node_ids = [1]

            # calculate sensitivity by finite difference
            primal_parameters = AdjointVMSSensitivity2D._ReadParameters(
                './AdjointVMSSensitivity2DTest/two_elements_bossak_test_parameters.json'
            )
            step_size = 1e-9
            fd_sensitivities = FiniteDifferenceBodyFittedDragShapeSensitivityAnalysis.ComputeSensitivity(
                node_ids, step_size, primal_parameters, [1.0, 0.0, 0.0],
                'MainModelPart.Structure', SolvePrimalProblem,
                lambda params: AdjointVMSSensitivity2D.
                AddHDF5PrimalOutputProcess(params, False))

            # solve adjoint
            adjoint_parameters = AdjointVMSSensitivity2D._ReadParameters(
                './AdjointVMSSensitivity2DTest/two_elements_bossak_test_adjoint_parameters.json'
            )
            adjoint_sensitivities = ComputeAdjointSensitivity(
                node_ids, adjoint_parameters, SolveAdjointProblem)

            self.assertMatrixAlmostEqual(adjoint_sensitivities,
                                         fd_sensitivities, 4)
示例#3
0
    def testSlipSteadyNormCylinder(self):
        with KratosUnittest.WorkFolderScope('.', __file__):
            node_ids = [1968]

            # calculate sensitivity by finite difference
            primal_parameters = AdjointVMSSensitivity2D._ReadParameters(
                './AdjointVMSSensitivity2DTest/steady_cylinder_slip_test_parameters.json'
            )
            step_size = 1e-9
            fd_sensitivities = FiniteDifferenceVelocityPressureNormSquareShapeSensitivityAnalysis.ComputeSensitivity(
                node_ids, step_size, primal_parameters,
                'MainModelPart.NoSlip2D_Cylinder', SolvePrimalProblem,
                lambda params: AdjointVMSSensitivity2D.
                AddHDF5PrimalSlipOutputProcess(params, True))

            # solve adjoint
            adjoint_parameters = AdjointVMSSensitivity2D._ReadParameters(
                './AdjointVMSSensitivity2DTest/steady_cylinder_slip_test_norm_adjoint_parameters.json'
            )
            adjoint_sensitivities = ComputeAdjointSensitivity(
                node_ids, adjoint_parameters, SolveAdjointProblem)

            self.assertMatrixAlmostEqual(adjoint_sensitivities,
                                         fd_sensitivities, 6)