Exemplo n.º 1
0
    def run_one_step(self):
        """Calculate the tidal flow field and water-surface elevation."""

        # Tidal mean water depth  and water surface elevation at nodes
        # (Note: mean water surf elev only used for boundary conditions in
        # matrix construction; should be mean sea level)
        self._calc_effective_water_depth()
        self._boundary_mean_water_surf_elev[:] = self._mean_sea_level

        # Map water depth to links
        map_min_of_link_nodes_to_link(self.grid,
                                      self._water_depth,
                                      out=self._water_depth_at_links)

        # Calculate velocity and diffusion coefficients on links
        velocity_coef = self._water_depth_at_links**_FOUR_THIRDS / (
            (self.roughness**2) * self._scale_velocity)
        self._diffusion_coef_at_links[:] = self._water_depth_at_links * velocity_coef

        # Calculate inundation / drainage rate at nodes
        tidal_inundation_rate = self.calc_tidal_inundation_rate()

        # Set up right-hand-side (RHS) vector for both ebb and flood tides (only
        # difference is in the sign)
        cores = self.grid.core_nodes

        # For flood tide, set up matrix and add boundary info to RHS vector
        # mat, rhs = make_core_node_matrix_var_coef(
        mat, rhs = get_core_node_matrix(
            self.grid,
            self._boundary_mean_water_surf_elev,
            coef_at_link=self._diffusion_coef_at_links,
        )

        rhs[:, 0] += self._grid_multiplier * tidal_inundation_rate[cores]

        # Solve for flood tide water-surface elevation
        tidal_wse = np.zeros(self.grid.number_of_nodes)
        tidal_wse[self.grid.core_nodes] = spsolve(mat, rhs)

        # Calculate flood-tide water-surface gradient at links
        tidal_wse_grad = np.zeros(self.grid.number_of_links)
        self.grid.calc_grad_at_link(tidal_wse, out=tidal_wse_grad)

        # Calculate flow velocity field at links for flood tide, and assign
        # negative of the flood tide values to ebb tide
        self._flood_tide_vel[self.grid.active_links] = (
            -velocity_coef[self.grid.active_links] *
            tidal_wse_grad[self.grid.active_links])
        self._ebb_tide_vel[:] = -self._flood_tide_vel
Exemplo n.º 2
0
    def test_min(self):
        rmg = RasterModelGrid(4, 5)
        rmg.add_empty('node', 'values')
        node_values = rmg.at_node['values']
        node_values[:] = np.arange(rmg.number_of_nodes)

        values_at_links = maps.map_min_of_link_nodes_to_link(rmg, 'values')

        assert_array_equal(
            values_at_links,
            np.array([
                0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 7, 8, 5, 6, 7, 8, 9, 10, 11,
                12, 13, 10, 11, 12, 13, 14, 15, 16, 17, 18
            ]))
Exemplo n.º 3
0
    def test_min(self):
        rmg = RasterModelGrid(4, 5)
        rmg.add_empty('node', 'values')
        node_values = rmg.at_node['values']
        node_values[:] = np.arange(rmg.number_of_nodes)

        values_at_links = maps.map_min_of_link_nodes_to_link(rmg, 'values')

        assert_array_equal(
            values_at_links,
            np.array([
                0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3,
                5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18
            ]))
Exemplo n.º 4
0
    def test_min(self):
        rmg = RasterModelGrid((4, 5))
        rmg.add_empty("node", "values")
        node_values = rmg.at_node["values"]
        node_values[:] = np.arange(rmg.number_of_nodes)

        values_at_links = maps.map_min_of_link_nodes_to_link(rmg, "values")

        assert_array_equal(
            values_at_links,
            np.array(
                [
                    0,
                    1,
                    2,
                    3,
                    0,
                    1,
                    2,
                    3,
                    4,
                    5,
                    6,
                    7,
                    8,
                    5,
                    6,
                    7,
                    8,
                    9,
                    10,
                    11,
                    12,
                    13,
                    10,
                    11,
                    12,
                    13,
                    14,
                    15,
                    16,
                    17,
                    18,
                ]
            ),
        )
Exemplo n.º 5
0
    def test_min(self):
        rmg = RasterModelGrid((4, 5))
        rmg.add_empty("values", at="node")
        node_values = rmg.at_node["values"]
        node_values[:] = np.arange(rmg.number_of_nodes)

        values_at_links = maps.map_min_of_link_nodes_to_link(rmg, "values")

        assert_array_equal(
            values_at_links,
            np.array([
                0,
                1,
                2,
                3,
                0,
                1,
                2,
                3,
                4,
                5,
                6,
                7,
                8,
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
            ]),
        )