示例#1
0
    def __init__(self, mesh_file, inflow_direction, finite_element=finite_elements.p2p1):

        super(SteadyConfiguration, self).__init__(finite_element=finite_element)
        # Model settings
        self.set_domain(GMeshDomain(mesh_file), warning=False)
        self.params['steady_state'] = True
        self.params['initial_condition'] = ConstantFlowInitialCondition(self)
        self.params['include_advection'] = True
        self.params['include_diffusion'] = True
        self.params['linear_divergence'] = False
        self.params['diffusion_coef'] = 3.0
        self.params['quadratic_friction'] = True
        self.params['newton_solver'] = True
        self.params['friction'] = Constant(0.0025)
        self.params['theta'] = 1.0

        # Boundary conditions
        bc = DirichletBCSet(self)
        bc.add_constant_flow(1, 2.0 + 1e-10, direction=inflow_direction)
        bc.add_analytic_eta(2, 0.0)
        self.params['bctype'] = 'strong_dirichlet'
        self.params['strong_bc'] = bc
        self.params['free_slip_on_sides'] = True

        # Optimisation settings
        self.params['functional_final_time_only'] = True
        self.params['automatic_scaling'] = True

        # Turbine settings
        self.params['turbine_pos'] = []
        self.params['turbine_friction'] = []
        self.params['turbine_x'] = 20.
        self.params['turbine_y'] = 20.
        self.params['controls'] = ['turbine_pos']

        # Finally set some DOLFIN optimisation flags
        dolfin.parameters['form_compiler']['cpp_optimize'] = True
        dolfin.parameters['form_compiler']['cpp_optimize_flags'] = '-O3'
        dolfin.parameters['form_compiler']['optimize'] = True