コード例 #1
0
def setup_cb(comm):

    solver = ADFLOW(options=options, comm=comm, debug=True)

    solver.addIntegrationSurface('../inputFiles/integration_plane_viscous.fmt',
                                 'viscous_plane')
    solver.finalizeUserIntegrationSurfaces()

    solver.addFamilyGroup('upstream', ['inlet'])
    solver.addFamilyGroup('downstream', ['outlet'])
    solver.addFamilyGroup('all_flow', ['inlet', 'outlet'])
    solver.addFamilyGroup('output_fam', ['all_flow', 'allWalls'])

    solver.addFunction('mdot', 'upstream', name="mdot_up")
    solver.addFunction('mdot', 'downstream', name="mdot_down")
    solver.addFunction('mdot', 'viscous_plane', name="mdot_plane")

    solver.addFunction('mavgptot', 'downstream', name="mavgptot_down")
    solver.addFunction('mavgptot', 'upstream', name="mavgptot_up")
    solver.addFunction('mavgptot', 'viscous_plane', name="mavgptot_plane")

    solver.addFunction('aavgptot', 'downstream', name="aavgptot_down")
    solver.addFunction('aavgptot', 'upstream', name="aavgptot_up")
    solver.addFunction('aavgptot', 'viscous_plane', name="aavgptot_plane")

    solver.addFunction('mavgttot', 'downstream', name="mavgttot_down")
    solver.addFunction('mavgttot', 'upstream', name="mavgttot_up")
    solver.addFunction('mavgttot', 'viscous_plane', name="mavgttot_plane")

    solver.addFunction('mavgps', 'downstream', name="mavgps_down")
    solver.addFunction('mavgps', 'upstream', name="mavgps_up")
    solver.addFunction('mavgps', 'viscous_plane', name="mavgps_plane")

    solver.addFunction('aavgps', 'downstream', name="aavgps_down")
    solver.addFunction('aavgps', 'upstream', name="aavgps_up")
    solver.addFunction('aavgps', 'viscous_plane', name="aavgps_plane")

    solver.setOption('ncycles', 1000)

    return solver, None, None, None
コード例 #2
0
class TestSolveIntegrationPlane(reg_test_classes.RegTest):
    """
    Tests that ADflow can converge the wing from the mdo tutorial using the euler
    equation to the required accuracy as meassure by the norm of the residuals,
    and states, and the accuracy of the functions

    based on the old regression test

    Test 9: MDO tutorial -- Euler -- Solution Test
    """

    N_PROCS = 2

    options = {
        "gridfile":
        os.path.join(baseDir, "../../input_files/conic_conv_nozzle_mb.cgns"),
        "outputdirectory":
        os.path.join(baseDir, "../output_files"),
        # Physics Parameters
        "equationType":
        "Euler",
        "smoother":
        "DADI",
        "nsubiter":
        3,
        "CFL":
        4.0,
        "CFLCoarse":
        1.25,
        "MGCycle":
        "3w",
        "MGStartLevel":
        -1,
        "nCyclesCoarse":
        250,
        "nCycles":
        1000,
        "monitorvariables": ["cpu", "resrho", "cl", "cd"],
        "volumevariables": ["blank"],
        "surfacevariables": ["mach", "cp", "vx", "vy", "vz", "blank"],
        "useNKSolver":
        True,
        "nkswitchtol":
        0.01,
        "nkadpc":
        True,
        "nkjacobianlag":
        5,
        "nkouterpreconits":
        3,
        "nkinnerpreconits":
        2,
        # Convergence Parameters
        "L2Convergence":
        1e-10,
        "L2ConvergenceCoarse":
        1e-2,
        "adjointl2convergence":
        1e-6,
        "forcesAsTractions":
        True,
        "debugzipper":
        True,
        "nearwalldist":
        0.001,
        # 'nkls':'none',
        "solutionprecision":
        "double",
        "adjointsubspacesize":
        200,
        "outerpreconits":
        3,
        "zipperSurfaceFamily":
        "output_fam",
        "flowtype":
        "internal",
    }
    ref_file = "solve_conic_mb.json"

    def setUp(self):

        super().setUp()

        self.ap = copy.copy(ap_conic_conv_nozzle)
        options = copy.copy(adflowDefOpts)
        options.update(self.options)

        # Setup aeroproblem

        planeFile = os.path.join(
            baseDir, "../../input_files/integration_plane_viscous.fmt")

        options = copy.copy(adflowDefOpts)
        options.update(self.options)

        # Setup aeroproblem
        self.ap.evalFuncs.extend([
            "mdot_plane", "mavgptot_plane", "aavgptot_plane", "mavgttot_plane",
            "mavgps_plane", "aavgps_plane"
        ])

        # Create the solver
        self.CFDSolver = ADFLOW(options=options, debug=False)
        self.CFDSolver.addIntegrationSurface(planeFile, "viscous_plane")
        self.CFDSolver.finalizeUserIntegrationSurfaces()

        self.CFDSolver.addFamilyGroup("upstream", ["inlet"])
        self.CFDSolver.addFamilyGroup("downstream", ["outlet"])
        self.CFDSolver.addFamilyGroup("all_flow", ["inlet", "outlet"])
        self.CFDSolver.addFamilyGroup("output_fam", ["all_flow", "allWalls"])

        self.CFDSolver.addFunction("mdot", "upstream", name="mdot_up")
        self.CFDSolver.addFunction("mdot", "downstream", name="mdot_down")
        self.CFDSolver.addFunction("mdot", "viscous_plane", name="mdot_plane")

        self.CFDSolver.addFunction("mavgptot",
                                   "downstream",
                                   name="mavgptot_down")
        self.CFDSolver.addFunction("mavgptot", "upstream", name="mavgptot_up")
        self.CFDSolver.addFunction("mavgptot",
                                   "viscous_plane",
                                   name="mavgptot_plane")

        self.CFDSolver.addFunction("aavgptot",
                                   "downstream",
                                   name="aavgptot_down")
        self.CFDSolver.addFunction("aavgptot", "upstream", name="aavgptot_up")
        self.CFDSolver.addFunction("aavgptot",
                                   "viscous_plane",
                                   name="aavgptot_plane")

        self.CFDSolver.addFunction("mavgttot",
                                   "downstream",
                                   name="mavgttot_down")
        self.CFDSolver.addFunction("mavgttot", "upstream", name="mavgttot_up")
        self.CFDSolver.addFunction("mavgttot",
                                   "viscous_plane",
                                   name="mavgttot_plane")

        self.CFDSolver.addFunction("mavgps", "downstream", name="mavgps_down")
        self.CFDSolver.addFunction("mavgps", "upstream", name="mavgps_up")
        self.CFDSolver.addFunction("mavgps",
                                   "viscous_plane",
                                   name="mavgps_plane")

        self.CFDSolver.addFunction("aavgps", "downstream", name="aavgps_down")
        self.CFDSolver.addFunction("aavgps", "upstream", name="aavgps_up")
        self.CFDSolver.addFunction("aavgps",
                                   "viscous_plane",
                                   name="aavgps_plane")

    def test_solve(self):

        # do the solve
        self.CFDSolver(self.ap)

        # check its accuracy
        utils.assert_functions_allclose(self.handler,
                                        self.CFDSolver,
                                        self.ap,
                                        tol=1e-9)
        utils.assert_states_allclose(self.handler, self.CFDSolver, tol=1e-10)
        utils.assert_residuals_allclose(self.handler,
                                        self.CFDSolver,
                                        self.ap,
                                        tol=1e-10)