示例#1
0
    def __init__(self, mesh_file, inflow_direction, finite_element = finite_elements.p2p1, period = 12.*60*60, eta0=2.0):
        super(UnsteadyConfiguration, self).__init__(mesh_file, inflow_direction, finite_element)

        # Switch to the unsteady shallow water equations
        self.params['steady_state'] = False
        self.params['functional_final_time_only'] = False

        # Timing settings
        self.params['theta'] = 1.0
        self.params['start_time'] = 1./4*period
        self.params['dt'] = period/50
        self.params['finish_time'] = 5./4*period

        # Initial condition
        k = 2*pi/(period*sqrt(self.params['g']*self.params['depth']))
        info('Wave period (in h): %f' % (period/60/60) )
        info('Approximate CFL number (assuming a velocity of 2): ' + str(2*self.params['dt']/self.domain.mesh.hmin()))
        self.params['initial_condition'] = SinusoidalInitialCondition(self, eta0, k, self.params['depth'])

        # Boundary conditions
        bc = DirichletBCSet(self)
        expression = Expression(("eta0*sqrt(g/depth)*cos(k*x[0]-sqrt(g*depth)*k*t)", "0"), eta0 = eta0, g = self.params["g"], depth = self.params["depth"], t = self.params["current_time"], k = k)
        bc.add_analytic_u(1, expression)
        bc.add_analytic_u(2, expression)
        bc.add_noslip_u(3)
        self.params['strong_bc'] = bc
示例#2
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
示例#3
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['diffusion_coef'] = 3.0
        self.params['quadratic_friction'] = True
        self.params['newton_solver'] = True
        self.params['friction'] = 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_zero_eta(2)
        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
示例#4
0
    def __init__(self,
                 mesh_file,
                 inflow_direction,
                 finite_element=finite_elements.p2p1,
                 period=12. * 60 * 60,
                 eta0=2.0):
        super(UnsteadyConfiguration,
              self).__init__(mesh_file, inflow_direction, finite_element)

        # Switch to the unsteady shallow water equations
        self.params['steady_state'] = False
        self.params['functional_final_time_only'] = False

        # Timing settings
        self.params['theta'] = 1.0
        self.params['start_time'] = 1. / 4 * period
        self.params['dt'] = period / 50
        self.params['finish_time'] = 5. / 4 * period

        # Initial condition
        k = 2 * pi / (period * sqrt(self.params['g'] * self.params['depth']))
        info('Wave period (in h): %f' % (period / 60 / 60))
        info('Approximate CFL number (assuming a velocity of 2): ' +
             str(2 * self.params['dt'] / self.domain.mesh.hmin()))
        self.params['initial_condition'] = SinusoidalInitialCondition(
            self, eta0, k, self.params['depth'])

        # Boundary conditions
        bc = DirichletBCSet(self)
        expression = Expression(
            ("eta0*sqrt(g/depth)*cos(k*x[0]-sqrt(g*depth)*k*t)", "0"),
            eta0=eta0,
            g=self.params["g"],
            depth=self.params["depth"],
            t=self.params["current_time"],
            k=k)
        bc.add_analytic_u(1, expression)
        bc.add_analytic_u(2, expression)
        bc.add_noslip_u(3)
        self.params['strong_bc'] = bc