Exemplo n.º 1
0
    def test_get_velocity_in_surface_layer_on_a_boundary(self):
        x1 = self.deg_to_radians * 2.0
        x2 = self.deg_to_radians * 13.0
        host_elements = {'arakawa_a': 5}

        # Test #1
        x3 = 0.0  # Surface
        time = 0.0

        particle = ParticleSmartPtr(x1=x1,
                                    x2=x2,
                                    x3=x3,
                                    host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)
        test.assert_equal(flag, 0)

        vel = np.empty(3, dtype=DTYPE_FLOAT)
        self.data_reader.get_velocity_wrapper(time, particle, vel)
        test.assert_array_almost_equal(vel, [1., 1., 1.])

        # Test #2
        x3 = -5.0  # Half way down the surface layer
        time = 1800.0
        particle = ParticleSmartPtr(x1=x1,
                                    x2=x2,
                                    x3=x3,
                                    host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)

        vel = np.empty(3, dtype=DTYPE_FLOAT)
        self.data_reader.get_velocity_wrapper(time, particle, vel)
        test.assert_equal(flag, 0)
        test.assert_array_almost_equal(vel, [0.5, 0.5, 0.5])
Exemplo n.º 2
0
 def test_find_host_when_particle_is_in_the_domain(self):
     particle_old = ParticleSmartPtr(
         x1=self.deg_to_radians * 2.25 - self.xmin,
         x2=self.deg_to_radians * 12.6 - self.ymin,
         host_elements={
             'grid_psi': 0,
             'grid_rho': 6,
             'grid_u': 3,
             'grid_v': 3
         })
     particle_new = ParticleSmartPtr(
         x1=self.deg_to_radians * 1.75 - self.xmin,
         x2=self.deg_to_radians * 12.6 - self.ymin,
         host_elements={
             'grid_psi': -999,
             'grid_rho': -999,
             'grid_u': -999,
             'grid_v': -999
         })
     flag = self.data_reader.find_host_wrapper(particle_old, particle_new)
     test.assert_equal(flag, 0)
     test.assert_equal(particle_new.get_host_horizontal_elem('grid_psi'), 0)
     test.assert_equal(particle_new.get_host_horizontal_elem('grid_rho'), 2)
     test.assert_equal(particle_new.get_host_horizontal_elem('grid_u'), 3)
     test.assert_equal(particle_new.get_host_horizontal_elem('grid_v'), 0)
Exemplo n.º 3
0
    def test_get_velocity_in_middle_layer(self):
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        host_elements={'fvcom': 0}

        # Test #1
        x3 = -2.6
        time = 0.0
        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)

        vel = np.empty(3, dtype=DTYPE_FLOAT)
        self.data_reader.get_velocity_wrapper(time, particle, vel)
        test.assert_equal(flag, 0)
        test.assert_array_almost_equal(vel, [1.5, 1.5, 1.5])

        # Test #2
        x3 = -2.25
        time = 1800.0
        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)

        vel = np.empty(3, dtype=DTYPE_FLOAT)
        self.data_reader.get_velocity_wrapper(time, particle, vel)
        test.assert_equal(flag, 0)
        test.assert_array_almost_equal(vel, [2.25, 2.25, 2.25])
Exemplo n.º 4
0
 def test_reflect_particle_that_undergoes_a_double_reflection_while_on_a_southeast_trajectory(self):
     particle_old = ParticleSmartPtr(x1=1.8 - self.xmin, x2=1.1 - self.ymin, host_elements={'fvcom': 1})
     particle_new = ParticleSmartPtr(x1=2.1 - self.xmin, x2=0.8 - self.ymin, host_elements={'fvcom': 1})
     flag = self.horiz_boundary_condition_calculator.apply_wrapper(self.data_reader, particle_old, particle_new)
     test.assert_equal(flag, 0)
     test.assert_equal(particle_new.x1 + self.xmin, 1.9)
     test.assert_equal(particle_new.x2 + self.ymin, 1.2)
     test.assert_equal(particle_new.get_host_horizontal_elem('fvcom'), 1)
Exemplo n.º 5
0
 def test_reflect_particle_that_sits_on_the_boundary(self):
     particle_old = ParticleSmartPtr(x1=1.5 - self.xmin, x2=1.0 - self.ymin, host_elements={'fvcom': 1})
     particle_new = ParticleSmartPtr(x1=1.6 - self.xmin, x2=0.9 - self.ymin, host_elements={'fvcom': 1})
     flag = self.horiz_boundary_condition_calculator.apply_wrapper(self.data_reader, particle_old, particle_new)
     test.assert_equal(flag, 0)
     test.assert_equal(particle_new.x1 + self.xmin, 1.6)
     test.assert_equal(particle_new.x2 + self.ymin, 1.1)
     test.assert_equal(particle_new.get_host_horizontal_elem('fvcom'), 1)
Exemplo n.º 6
0
 def test_find_host_using_global_search(self):
     particle = ParticleSmartPtr(x1=self.deg_to_radians * 2.25 - self.xmin,
                                 x2=self.deg_to_radians * 12.6 - self.ymin)
     flag = self.data_reader.find_host_using_global_search_wrapper(particle)
     test.assert_equal(flag, 0)
     test.assert_equal(particle.get_host_horizontal_elem('grid_psi'), 0)
     test.assert_equal(particle.get_host_horizontal_elem('grid_rho'), 6)
     test.assert_equal(particle.get_host_horizontal_elem('grid_u'), 3)
     test.assert_equal(particle.get_host_horizontal_elem('grid_v'), 3)
Exemplo n.º 7
0
 def test_get_boundary_intersection_when_a_particle_has_moved_to_an_external_elements_edge(self):
     particle_old = ParticleSmartPtr(x1=1.5-self.xmin, x2=1.1-self.ymin, host_elements={'fvcom': 1})
     particle_new = ParticleSmartPtr(x1=1.5-self.xmin, x2=1.0-self.ymin, host_elements={'fvcom': 1})
     start_point, end_point, intersection = self.data_reader.get_boundary_intersection_wrapper(particle_old, particle_new)
     test.assert_almost_equal(start_point[0]+self.xmin, 2.0)
     test.assert_almost_equal(start_point[1]+self.ymin, 1.0)
     test.assert_almost_equal(end_point[0]+self.xmin, 1.0)
     test.assert_almost_equal(end_point[1]+self.ymin, 1.0)
     test.assert_almost_equal(intersection[0]+self.xmin, 1.5)
     test.assert_almost_equal(intersection[1]+self.ymin, 1.0)
Exemplo n.º 8
0
 def test_get_boundary_intersection(self):
     particle_old = ParticleSmartPtr(x1=1.6666666667, x2=1.3333333333, host_elements={'test_grid': 1})
     particle_new = ParticleSmartPtr(x1=1.6666666667, x2=0.9, host_elements={'test_grid': 1})
     start_point, end_point, intersection = self.unstructured_grid.get_boundary_intersection_wrapper(particle_old, particle_new)
     test.assert_almost_equal(start_point[0], 2.0)
     test.assert_almost_equal(start_point[1], 1.0)
     test.assert_almost_equal(end_point[0], 1.0)
     test.assert_almost_equal(end_point[1], 1.0)
     test.assert_almost_equal(intersection[0], 1.6666666667)
     test.assert_almost_equal(intersection[1], 1.0)
Exemplo n.º 9
0
 def test_get_boundary_intersection_when_a_particle_has_moved_to_an_external_elements_edge(self):
     particle_old = ParticleSmartPtr(x1=1.5, x2=1.1, host_elements={'test_grid': 1})
     particle_new = ParticleSmartPtr(x1=1.5, x2=1.0, host_elements={'test_grid': 1})
     start_point, end_point, intersection = self.unstructured_grid.get_boundary_intersection_wrapper(particle_old, particle_new)
     test.assert_almost_equal(start_point[0], 2.0)
     test.assert_almost_equal(start_point[1], 1.0)
     test.assert_almost_equal(end_point[0], 1.0)
     test.assert_almost_equal(end_point[1], 1.0)
     test.assert_almost_equal(intersection[0], 1.5)
     test.assert_almost_equal(intersection[1], 1.0)
Exemplo n.º 10
0
 def test_get_boundary_intersection(self):
     particle_old = ParticleSmartPtr(x1=1.6666666667-self.xmin, x2=1.3333333333-self.ymin, host_elements={'fvcom': 1})
     particle_new = ParticleSmartPtr(x1=1.6666666667-self.xmin, x2=0.9-self.ymin, host_elements={'fvcom': 1})
     start_point, end_point, intersection = self.data_reader.get_boundary_intersection_wrapper(particle_old, particle_new)
     test.assert_almost_equal(start_point[0]+self.xmin, 2.0)
     test.assert_almost_equal(start_point[1]+self.ymin, 1.0)
     test.assert_almost_equal(end_point[0]+self.xmin, 1.0)
     test.assert_almost_equal(end_point[1]+self.ymin, 1.0)
     test.assert_almost_equal(intersection[0]+self.xmin, 1.6666666667)
     test.assert_almost_equal(intersection[1]+self.ymin, 1.0)
Exemplo n.º 11
0
 def test_find_host_when_particle_is_in_the_domain(self):
     particle_old = ParticleSmartPtr(x1=self.deg_to_radians * 2.666666667,
                                     x2=self.deg_to_radians * 11.333333333,
                                     host_elements={'arakawa_a': 7})
     particle_new = ParticleSmartPtr(x1=self.deg_to_radians * 2.333333333,
                                     x2=self.deg_to_radians * 11.6666666667,
                                     host_elements={'arakawa_a': -999})
     flag = self.data_reader.find_host_wrapper(particle_old, particle_new)
     test.assert_equal(flag, 0)
     test.assert_equal(particle_new.get_host_horizontal_elem('arakawa_a'),
                       6)
Exemplo n.º 12
0
 def test_find_host_when_particle_has_crossed_a_land_boundary(self):
     particle_old = ParticleSmartPtr(x1=self.deg_to_radians * 2.333333333,
                                     x2=self.deg_to_radians * 12.666666667,
                                     host_elements={'arakawa_a': 10})
     particle_new = ParticleSmartPtr(x1=self.deg_to_radians * 2.333333333,
                                     x2=self.deg_to_radians * 13.1,
                                     host_elements={'arakawa_a': -999})
     flag = self.data_reader.find_host_wrapper(particle_old, particle_new)
     test.assert_equal(flag, -1)
     test.assert_equal(particle_new.get_host_horizontal_elem('arakawa_a'),
                       10)
Exemplo n.º 13
0
    def test_get_boundary_intersection(self):
        particle_old = ParticleSmartPtr(x1 = self.deg_to_radians * 1.99, x2 = self.deg_to_radians * 12.9, host_elements={'test_grid': 5})
        particle_new = ParticleSmartPtr(x1 = self.deg_to_radians * 1.99, x2 = self.deg_to_radians * 13.1, host_elements={'test_grid': 5})

        start_point, end_point, intersection = self.unstructured_grid.get_boundary_intersection_wrapper(particle_old, particle_new)

        test.assert_almost_equal(start_point[0], np.radians(1.0))
        test.assert_almost_equal(start_point[1], np.radians(13.0))
        test.assert_almost_equal(end_point[0], np.radians(2.0))
        test.assert_almost_equal(end_point[1], np.radians(13.0))
        test.assert_almost_equal(intersection[0], np.radians(1.99), decimal=4)
        test.assert_almost_equal(intersection[1], np.radians(13.0), decimal=4)
Exemplo n.º 14
0
 def test_get_zmax(self):
     x1 = 1.3333333333-self.xmin
     x2 = 1.6666666667-self.ymin
     host_elements={'fvcom': 0}
     
     time = 0.0
     particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
     self.data_reader.set_local_coordinates_wrapper(particle)
     zeta = self.data_reader.get_zmax_wrapper(time, particle)
     test.assert_almost_equal(zeta, 1.0)
     
     time = 1800.0
     particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
     self.data_reader.set_local_coordinates_wrapper(particle)
     zeta = self.data_reader.get_zmax_wrapper(time, particle)
     test.assert_almost_equal(zeta, 1.5)
Exemplo n.º 15
0
    def test_get_zmax(self):
        x1 = self.deg_to_radians * 2.0
        x2 = self.deg_to_radians * 12.0
        host_elements = {'arakawa_a': 0}

        time = 0.0
        particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        zeta = self.data_reader.get_zmax_wrapper(time, particle)
        test.assert_almost_equal(zeta, 0.0)

        time = 1800.0
        particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        zeta = self.data_reader.get_zmax_wrapper(time, particle)
        test.assert_almost_equal(zeta, 0.0)
Exemplo n.º 16
0
 def test_reflect_particle_on_a_normal_trajectory(self):
     particle_old = ParticleSmartPtr(x1=1.99 * self.deg_to_radians,
                                     x2=12.8 * self.deg_to_radians,
                                     host_elements={'arakawa_a': 5})
     particle_new = ParticleSmartPtr(x1=1.99 * self.deg_to_radians,
                                     x2=13.1 * self.deg_to_radians,
                                     host_elements={'arakawa_a': 5})
     flag = self.horiz_boundary_condition_calculator.apply_wrapper(
         self.data_reader, particle_old, particle_new)
     test.assert_equal(flag, 0)
     test.assert_almost_equal(particle_new.x1,
                              1.99 * self.deg_to_radians,
                              decimal=2)
     test.assert_almost_equal(particle_new.x2,
                              12.9 * self.deg_to_radians,
                              decimal=2)
     test.assert_equal(particle_new.get_host_horizontal_elem('arakawa_a'),
                       5)
Exemplo n.º 17
0
    def test_element_is_wet(self):
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        host_elements={'fvcom': 0}
        time = 0.0

        particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        status = self.data_reader.is_wet_wrapper(time, particle)
        test.assert_equal(status, 1)
Exemplo n.º 18
0
    def test_element_is_dry(self):
        x1 = self.deg_to_radians * 1.6666666667
        x2 = self.deg_to_radians * 11.6666666667
        host_elements = {'arakawa_a': 0}

        time = 0.0

        particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        status = self.data_reader.is_wet_wrapper(time, particle)
        test.assert_equal(status, 0)
Exemplo n.º 19
0
    def test_interpolate_in_space_on_a_boundary_element(self):
        h_grid = np.array([25., 10., 999., 999.,  25.,  10., 999., 999.,  25.,  10., 999., 999.], dtype=DTYPE_FLOAT)

        # Set the particle at the element's centroid
        x1 = self.deg_to_radians * 2.
        x2 = self.deg_to_radians * 13.
        host_elements = {'test_grid': 5}

        particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
        self.unstructured_grid.set_local_coordinates_wrapper(particle)
        h = self.unstructured_grid.interpolate_in_space_wrapper(h_grid, particle)
        test.assert_almost_equal(h, 10.)
Exemplo n.º 20
0
    def test_interpolate_in_space(self):
        h_grid = np.array([25., 10., 999., 999.,  25.,  10., 999., 999.,  25.,  10., 999., 999.], dtype=DTYPE_FLOAT)

        # Set the particle at the element's centroid
        x1 = self.deg_to_radians * 1.6670652236426569
        x2 = self.deg_to_radians * 11.667054258869966
        host_elements = {'test_grid': 0}

        particle = ParticleSmartPtr(x1=x1, x2=x2, host_elements=host_elements)
        self.unstructured_grid.set_local_coordinates_wrapper(particle)
        h = self.unstructured_grid.interpolate_in_space_wrapper(h_grid, particle)
        test.assert_almost_equal(h, 15.)
Exemplo n.º 21
0
    def test_get_so(self):
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        host_elements={'fvcom': 0}

        x3 = -0.1
        time = 0.0
        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)
        so = self.data_reader.get_environmental_variable_wrapper('so', time, particle)
        test.assert_equal(flag, 0)
        test.assert_almost_equal(so,  0.01)
Exemplo n.º 22
0
    def test_get_horizontal_eddy_diffusivity(self):
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        host_elements={'fvcom': 0}

        x3 = -0.1
        time = 0.0
        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)
        diffusivity = self.data_reader.get_horizontal_eddy_diffusivity_wrapper(time, particle)
        test.assert_equal(flag, 0)
        test.assert_almost_equal(diffusivity,  0.01)
Exemplo n.º 23
0
    def test_apply_reflecting_boundary_condition_for_a_particle_that_has_just_pierced_the_free_surface(self):
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        x3 = -11.0 - 1.e-14
        host_elements={'fvcom': 0}

        time = 0.0
        
        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.vert_boundary_condition_calculator.apply_wrapper(self.data_reader, time, particle)
        test.assert_equal(flag, 0)
        test.assert_almost_equal(particle.x3, -11.0)
Exemplo n.º 24
0
    def test_set_vertical_grid_vars_for_a_particle_in_the_bottom_boundary_layer(self):
        time = 0.0
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        x3 = -10.4
        host_elements={'fvcom': 0}

        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)

        test.assert_equal(flag, 0)
        test.assert_equal(particle.k_layer, 2)
        test.assert_equal(particle.in_vertical_boundary_layer, True)
        test.assert_almost_equal(particle.omega_interfaces, 0.25)
Exemplo n.º 25
0
    def test_get_horizontal_eddy_diffusivity_derivative(self):
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        host_elements={'fvcom': 0}

        x3 = -0.1
        time = 0.0
        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)

        Ah_prime = np.empty(2, dtype=DTYPE_FLOAT)
        self.data_reader.get_horizontal_eddy_diffusivity_derivative_wrapper(time, particle, Ah_prime)
        test.assert_equal(flag, 0)
        test.assert_array_almost_equal(Ah_prime, [0.0, 0.0])
Exemplo n.º 26
0
    def test_get_so(self):
        x1 = self.deg_to_radians * 2.0
        x2 = self.deg_to_radians * 12.0
        host_elements = {'arakawa_a': 0}

        x3 = -5.
        time = 0.0
        particle = ParticleSmartPtr(x1=x1,
                                    x2=x2,
                                    x3=x3,
                                    host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)
        so = self.data_reader.get_environmental_variable_wrapper(
            'so', time, particle)
        test.assert_equal(flag, 0)
        test.assert_almost_equal(so, 0.5)
Exemplo n.º 27
0
    def test_set_vertical_grid_vars_for_a_particle_in_the_middle_of_the_water_column(self):
        time = 0.0
        x1 = 1.3333333333-self.xmin
        x2 = 1.6666666667-self.ymin
        x3 = -2.6
        host_elements={'fvcom': 0}

        particle = ParticleSmartPtr(x1=x1, x2=x2, x3=x3, host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)

        test.assert_equal(flag, 0)
        test.assert_equal(particle.k_layer, 1)
        test.assert_equal(particle.in_vertical_boundary_layer, False)
        test.assert_equal(particle.k_upper_layer, 0)
        test.assert_equal(particle.k_lower_layer, 1)
        test.assert_almost_equal(particle.omega_interfaces, 0.83333333333)
        test.assert_almost_equal(particle.omega_layers, 0.5)
Exemplo n.º 28
0
    def test_set_vertical_grid_vars_for_a_particle_in_the_surface_layer(self):
        time = 0.0
        x1 = self.deg_to_radians * 2.0
        x2 = self.deg_to_radians * 12.0
        x3 = -5.0  # 1 m below the moving free surface
        host_elements = {'arakawa_a': 0}

        particle = ParticleSmartPtr(x1=x1,
                                    x2=x2,
                                    x3=x3,
                                    host_elements=host_elements)
        self.data_reader.set_local_coordinates_wrapper(particle)
        flag = self.data_reader.set_vertical_grid_vars_wrapper(time, particle)

        test.assert_equal(flag, 0)
        test.assert_equal(particle.k_layer, 0)
        test.assert_equal(particle.in_vertical_boundary_layer, False)
        test.assert_almost_equal(particle.omega_interfaces, 0.5)
Exemplo n.º 29
0
 def test_set_default_location(self):
     particle = ParticleSmartPtr(x1=1.5, x2=1.0, host_elements={'test_grid': 1})
     self.unstructured_grid.set_default_location_wrapper(particle)
     test.assert_almost_equal(particle.x1, 1.66666666667)
     test.assert_almost_equal(particle.x2, 1.33333333333)
     test.assert_array_almost_equal(particle.get_phi('test_grid'), [0.3333333333, 0.3333333333, 0.3333333333])
Exemplo n.º 30
0
 def test_find_host_using_global_search_when_a_particle_is_in_an_element_with_two_land_boundaries(self):
     particle = ParticleSmartPtr(x1=0.6666666667, x2=1.3333333333, host_elements={'test_grid': -1})
     flag = self.unstructured_grid.find_host_using_global_search_wrapper(particle)
     test.assert_equal(particle.get_host_horizontal_elem('test_grid'), -1)