Example #1
0
    def __init__(
        self,
        num_moments=swme.DEFAULT_NUM_MOMENTS,
        gravity_constant=swme.DEFAULT_GRAVITY_CONSTANT,
        kinematic_viscosity=swme.DEFAULT_KINEMATIC_VISCOSITY,
        slip_length=swme.DEFAULT_SLIP_LENGTH,
        displacement=0.0,
        velocity=0.0,
        linear_coefficient=0.25,
        quadratic_coefficient=0.0,
        cubic_coefficient=0.0,
        max_height=1.4,
    ):
        self.num_moments = num_moments

        initial_condition = InitialCondition(
            num_moments,
            displacement,
            velocity,
            linear_coefficient,
            quadratic_coefficient,
            cubic_coefficient,
        )

        app_ = swme.ShallowWaterMomentEquations(num_moments, gravity_constant,
                                                kinematic_viscosity,
                                                slip_length)

        max_wavespeed = velocity + np.sqrt(gravity_constant * max_height)

        super().__init__(app_, initial_condition, max_wavespeed, None)
def test_quasilinear_functions():
    for num_moments in range(2):
        gen_shallow_water = swme.ShallowWaterMomentEquations()
        q = np.random.rand(num_moments + 2)
        x = 0
        t = 0
        app_test.check_quasilinear_functions(gen_shallow_water, q, x, t)
    def __init__(
        self,
        num_moments=swme.DEFAULT_NUM_MOMENTS,
        gravity_constant=swme.DEFAULT_GRAVITY_CONSTANT,
        kinematic_viscosity=swme.DEFAULT_KINEMATIC_VISCOSITY,
        slip_length=swme.DEFAULT_SLIP_LENGTH,
        primitive_left_states=None,
        primitive_right_states=None,
        discontinuity_location=0.0,
    ):
        self.num_moments = num_moments

        app_ = swme.ShallowWaterMomentEquations(
            num_moments, gravity_constant, kinematic_viscosity, slip_length
        )

        # primitive_states = [h, u, s, k, m]
        max_initial_height = max(
            [abs(primitive_left_states[0]), primitive_right_states[0]]
        )
        max_initial_velocity = max(
            [abs(primitive_left_states[1]), abs(primitive_right_states[1])]
        )
        if num_moments >= 1:
            max_initial_linear_coefficient = max(
                [abs(primitive_left_states[2]), abs(primitive_right_states[2])]
            )
        else:
            max_initial_linear_coefficient = 0

        # max_wavespeed = u + sqrt(g h^2 + s^2)
        max_wavespeed = max_initial_velocity + np.sqrt(
            gravity_constant * np.power(max_initial_height, 2)
            + max_initial_linear_coefficient
        )

        conserved_left_states = swme.get_conserved_variables(
            np.array(primitive_left_states)
        )
        conserved_right_states = swme.get_conserved_variables(
            np.array(primitive_right_states)
        )
        riemann_problems = []
        for i in range(num_moments + 2):
            riemann_problems.append(
                x_functions.RiemannProblem(
                    conserved_left_states[i],
                    conserved_right_states[i],
                    discontinuity_location,
                )
            )
        initial_condition = x_functions.ComposedVector(riemann_problems)

        super().__init__(app_, initial_condition, max_wavespeed, None)
    def __init__(
        self,
        exact_solution,
        max_wavespeed,
        num_moments=swme.DEFAULT_NUM_MOMENTS,
        gravity_constant=swme.DEFAULT_GRAVITY_CONSTANT,
        kinematic_viscosity=swme.DEFAULT_KINEMATIC_VISCOSITY,
        slip_length=swme.DEFAULT_SLIP_LENGTH,
    ):
        additional_source = swme.ExactOperator(
            exact_solution,
            num_moments,
            gravity_constant,
            kinematic_viscosity,
            slip_length,
        )
        app_ = swme.ShallowWaterMomentEquations(
            num_moments,
            gravity_constant,
            kinematic_viscosity,
            slip_length,
            additional_source,
        )

        initial_condition = x_functions.FrozenT(exact_solution, 0)

        exact_operator = swme.ExactOperator(
            exact_solution,
            num_moments,
            gravity_constant,
            kinematic_viscosity,
            slip_length,
            additional_source,
        )
        exact_time_derivative = swme.ExactTimeDerivative(
            exact_solution,
            num_moments,
            gravity_constant,
            kinematic_viscosity,
            slip_length,
            additional_source,
        )

        super().__init__(
            app_,
            initial_condition,
            max_wavespeed,
            exact_solution,
            exact_operator,
            exact_time_derivative,
        )