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
class TestFunctionals(reg_test_classes.RegTest): """ Tests that given a flow state the residuals, function, forces/tractions, and jacobian vector products are accurate. """ N_PROCS = 2 def setUp(self): if not hasattr(self, "name"): # return immediately when the setup method is being called on the based class and NOT the # classes created using parametrized # this will happen when testing, but will hopefully be fixed down the line return super().setUp() options = copy.copy(adflowDefOpts) options["outputdirectory"] = os.path.join(baseDir, options["outputdirectory"]) options.update(self.options) # Create the solver self.CFDSolver = ADFLOW(options=copy.deepcopy(options), debug=True) self.ap = copy.deepcopy(self.aero_prob) # add the default dvs to the problem for dv in defaultAeroDVs: self.ap.addDV(dv) # propagates the values from the restart file throughout the code self.CFDSolver.getResidual(self.ap) def test_restart_read(self): utils.assert_problem_size_equal(self.handler, self.CFDSolver, tol=1e-10) utils.assert_states_allclose(self.handler, self.CFDSolver, tol=1e-10) def test_residuals(self): utils.assert_residuals_allclose(self.handler, self.CFDSolver, self.ap, tol=1e-10) def test_functions(self): utils.assert_functions_allclose(self.handler, self.CFDSolver, self.ap, tol=1e-9) def test_forces_and_tractions(self): utils.assert_forces_allclose(self.handler, self.CFDSolver, tol=1e-10) utils.assert_tractions_allclose(self.handler, self.CFDSolver, tol=1e-10) # Reset the option self.CFDSolver.setOption("forcesAsTractions", True) # Make sure we can write the force file. forces_file = os.path.join(self.CFDSolver.getOption("outputdirectory"), "forces.txt") self.CFDSolver.writeForceFile(forces_file) # ------------------- Derivative routine checks ---------------------------- def test_jac_vec_prod_fwd(self): utils.assert_fwd_mode_allclose(self.handler, self.CFDSolver, self.ap, tol=5e-9) def test_jac_vec_prod_bwd(self): utils.assert_bwd_mode_allclose(self.handler, self.CFDSolver, self.ap, tol=1e-10) def test_dot_products(self): utils.assert_dot_products_allclose(self.handler, self.CFDSolver, tol=1e-10)