예제 #1
0
    def __init__(self, friction='manning', nx=1, ny=1, mesh=None, input_dir=None, output_dir=None, **kwargs):
        self.timestepper = 'CrankNicolson'
        super(BeachOptions, self).__init__(**kwargs)

        try:
            assert friction in ('nikuradse', 'manning')
        except AssertionError:
            raise ValueError("Friction parametrisation '{:s}' not recognised.".format(friction))
        self.friction = friction

        self.lx = 220
        self.ly = 10

        if output_dir is not None:
            self.di = output_dir

        self.default_mesh = RectangleMesh(np.int(220*nx), np.int(10*ny), self.lx, self.ly)

        self.friction_coeff = Constant(0.02)

        self.set_up_morph_model(self.default_mesh)

        # Initial
        self.uv_init, self.elev_init = initialise_hydrodynamics(input_dir, outputdir=output_dir, op=self)

        self.plot_pvd = True
        self.hessian_recovery = 'L2'

        self.grad_depth_viscosity = True

        self.num_hours = 3600

        # Stabilisation
        self.stabilisation = 'lax_friedrichs'
        self.stabilisation_sediment = 'lax_friedrichs'

        self.morphological_acceleration_factor = Constant(10000)

        # Boundary conditions
        h_amp = 0.25  # Ocean boundary forcing amplitude
        v_amp = 0.5  # Ocean boundary foring velocity
        omega = 0.5  # Ocean boundary forcing frequency
        self.ocean_elev_func = lambda t: (h_amp * np.cos(-omega*(t+(100.0))))
        self.ocean_vel_func = lambda t: (v_amp * np.cos(-omega*(t+(100.0))))

        self.tracer_init = Constant(0.0)

        # Time integration

        self.dt = 0.5
        self.end_time = float(self.num_hours*3600.0/self.morphological_acceleration_factor)
        self.dt_per_mesh_movement = 72
        self.dt_per_export = 72
        self.implicitness_theta = 1.0
예제 #2
0
    def __init__(self,
                 friction='nik_solver',
                 nx=1,
                 ny=1,
                 input_dir=None,
                 output_dir=None,
                 **kwargs):
        self.timestepper = 'CrankNicolson'
        super(TrenchSedimentOptions, self).__init__(**kwargs)
        self.default_mesh = RectangleMesh(np.int(16 * 5 * nx), 5 * ny, 16, 1.1)
        self.plot_pvd = True
        self.num_hours = 15
        if output_dir is not None:
            self.di = output_dir

        # Physical
        self.base_viscosity = Constant(1e-6)
        self.wetting_and_drying = False
        self.solve_sediment = True
        self.solve_exner = True
        try:
            assert friction in ('nikuradse', 'manning', 'nik_solver')
        except AssertionError:
            raise ValueError(
                "Friction parametrisation '{:s}' not recognised.".format(
                    friction))
        self.friction = friction
        self.average_size = Constant(160e-6)  # Average sediment size
        self.friction_coeff = Constant(0.025)
        self.ksp = Constant(3 * self.average_size)
        self.norm_smoother = Constant(0.1)

        # Stabilisation
        self.stabilisation = 'lax_friedrichs'
        self.stabilisation_sediment = 'lax_friedrichs'

        # Initialisation
        self.uv_init, self.elev_init = initialise_hydrodynamics(
            input_dir,
            outputdir=output_dir,
            op=self,
        )
        self.set_up_morph_model(input_dir, self.default_mesh)
        self.morphological_acceleration_factor = Constant(100)

        # Time integration
        self.dt = 0.25 if nx < 4 else 0.1
        self.end_time = self.num_hours * 3600.0 / float(
            self.morphological_acceleration_factor)
        self.dt_per_mesh_movement = 40
        self.dt_per_export = 40
        self.implicitness_theta = 1.0
        self.family = 'dg-dg'