コード例 #1
0
    def energy_dissipation_rate(self, H, U):
        '''
        c_ub = 100 = dimensionless empirical coefficient to correct
        for non-Law-of-the-Wall results (Umlauf and Burchard, 2003)

        u_c = water friction velocity (m/s)
               sqrt(rho_air / rho_w) * u_a ~ .03 * u_a
        u_a = air friction velocity (m/s)
        z_0 = surface roughness (m) (Taylor and Yelland)
        c_p = peak wave speed for Pierson-Moskowitz spectrum
        w_p = peak angular frequency for Pierson-Moskowitz spectrum (1/s)

        TODO: This implementation should be in a utility function.
              It should not be part of the Waves management object itself.
        '''
        if H is 0 or U is 0:
            return 0

        c_ub = 100

        c_p = PiersonMoskowitz.peak_wave_speed(U)
        w_p = PiersonMoskowitz.peak_angular_frequency(U)

        z_0 = 1200 * H * ((H / (2*np.pi*c_p)) * w_p)**4.5
        u_a = .4 * U / np.log(10 / z_0)
        u_c = .03 * u_a
        eps = c_ub * u_c**3 / H

        return eps
コード例 #2
0
def test_delvigne_sweeney():
    wind_speed = 10.0
    T_w = PiersonMoskowitz.peak_wave_period(wind_speed)

    assert np.isclose(DelvigneSweeney.breaking_waves_frac(wind_speed, 10.0),
                      0.016)
    assert np.isclose(DelvigneSweeney.breaking_waves_frac(wind_speed, T_w),
                      0.0213333)
コード例 #3
0
def test_delvigne_sweeney():
    wind_speed = 10.0
    T_w = PiersonMoskowitz.peak_wave_period(wind_speed)

    assert np.isclose(DelvigneSweeney.breaking_waves_frac(wind_speed, 10.0),
                      0.016)
    assert np.isclose(DelvigneSweeney.breaking_waves_frac(wind_speed, T_w),
                      0.0213333)
コード例 #4
0
ファイル: waves.py プロジェクト: govtmirror/PyGnome
    def peak_wave_period(self, time):
        '''
        :param time: the time you want the wave data for
        :type time: datetime.datetime object

        :returns: peak wave period (s)
        '''
        U = self.wind.get_value(time)[0]
        return PiersonMoskowitz.peak_wave_period(U)
コード例 #5
0
ファイル: waves.py プロジェクト: liuy0813/PyGnome
    def peak_wave_period(self, time):
        '''
        :param time: the time you want the wave data for
        :type time: datetime.datetime object

        :returns: peak wave period (s)
        '''
        U = self.wind.get_value(time)[0]
        return PiersonMoskowitz.peak_wave_period(U)
コード例 #6
0
    def peak_wave_period(self, points, time):
        '''
        :param time: the time you want the wave data for
        :type time: datetime.datetime object

        :returns: peak wave period (s)
        '''
        U = self.get_wind_speed(points, time)  # only need velocity

        return PiersonMoskowitz.peak_wave_period(U)
コード例 #7
0
def test_ding_farmer():
    wind_speed = 10.0  # m/s
    rdelta = 200.0  # oil/water density difference (kg / m^3)
    droplet_diameter = 0.0002  # 200 microns

    wave_height = PiersonMoskowitz.significant_wave_height(wind_speed)
    wave_period = PiersonMoskowitz.peak_wave_period(wind_speed)

    f_bw = DelvigneSweeney.breaking_waves_frac(wind_speed, wave_period)
    k_w = Stokes.water_phase_xfer_velocity(rdelta, droplet_diameter)

    assert np.isclose(DingFarmer.calm_between_wave_breaks(0.5, 10), 15.0)
    assert np.isclose(DingFarmer.calm_between_wave_breaks(f_bw, wave_period),
                      347.8125)
    assert np.isclose(DingFarmer.refloat_time(wave_height, k_w), 386.0328)

    assert np.isclose(
        DingFarmer.water_column_time_fraction(f_bw, wave_period, wave_height,
                                              k_w), 1.0)
コード例 #8
0
    def calm_between_wave_breaks(self, model_time, time_step,
                                 time_spent_in_wc=0.0):
        wind_speed = max(.1, self.waves.wind.get_value(model_time)[0])
        wave_period = PiersonMoskowitz.peak_wave_period(wind_speed)

        f_bw = DelvigneSweeney.breaking_waves_frac(wind_speed, wave_period)

        T_calm = DingFarmer.calm_between_wave_breaks(f_bw, wave_period)

        return np.clip(T_calm, 0.0, float(time_step) - time_spent_in_wc)
コード例 #9
0
ファイル: dissolution.py プロジェクト: simomartini/PyGnome
    def water_column_time_fraction(self, points, model_time,
                                   water_phase_xfer_velocity):
        wave_height = self.waves.get_value(points, model_time)[0]
        wind_speed = np.clip(self.get_wind_speed(points, model_time), 0.01,
                             None)
        wave_period = PiersonMoskowitz.peak_wave_period(wind_speed)

        f_bw = DelvigneSweeney.breaking_waves_frac(wind_speed, wave_period)

        return DingFarmer.water_column_time_fraction(
            f_bw, wave_period, wave_height, water_phase_xfer_velocity)
コード例 #10
0
    def water_column_time_fraction(self, model_time,
                                   water_phase_xfer_velocity):
        wave_height = self.waves.get_value(model_time)[0]
        wind_speed = max(.1, self.waves.wind.get_value(model_time)[0])
        wave_period = PiersonMoskowitz.peak_wave_period(wind_speed)

        f_bw = DelvigneSweeney.breaking_waves_frac(wind_speed, wave_period)

        return DingFarmer.water_column_time_fraction(f_bw,
                                                     wave_period,
                                                     wave_height,
                                                     water_phase_xfer_velocity)
コード例 #11
0
ファイル: dissolution.py プロジェクト: NOAA-ORR-ERD/PyGnome
    def water_column_time_fraction(self,
                                   points,
                                   model_time,
                                   water_phase_xfer_velocity):
        wave_height = self.waves.get_value(points, model_time)[0]
        wind_speed = np.clip(self.get_wind_speed(points, model_time), 0.01, None)
        wave_period = PiersonMoskowitz.peak_wave_period(wind_speed)

        f_bw = DelvigneSweeney.breaking_waves_frac(wind_speed, wave_period)

        return DingFarmer.water_column_time_fraction(f_bw,
                                                     wave_period,
                                                     wave_height,
                                                     water_phase_xfer_velocity)
コード例 #12
0
def test_ding_farmer():
    wind_speed = 10.0  # m/s
    rdelta = 0.2  # oil/water density difference
    droplet_diameter = 0.0002  # 200 microns

    wave_height = PiersonMoskowitz.significant_wave_height(wind_speed)
    wave_period = PiersonMoskowitz.peak_wave_period(wind_speed)

    f_bw = DelvigneSweeney.breaking_waves_frac(wind_speed, wave_period)
    k_w = Stokes.water_phase_xfer_velocity(rdelta, droplet_diameter)

    assert np.isclose(DingFarmer.calm_between_wave_breaks(0.5, 10),
                      15.0)
    assert np.isclose(DingFarmer.calm_between_wave_breaks(f_bw, wave_period),
                      347.8125)
    assert np.isclose(DingFarmer.refloat_time(wave_height, k_w),
                      385.90177)

    assert np.isclose(DingFarmer.water_column_time_fraction(f_bw,
                                                            wave_period,
                                                            wave_height,
                                                            k_w),
                      1.1095)
コード例 #13
0
ファイル: zhao_toba.py プロジェクト: shhw2019/noaa_pyGnome
    def percent_whitecap_coverage(cls, wind_speed):
        '''
            percent whitecap coverage
            drag coefficient reduces linearly with wind speed
            for winds less than 2.4 m/s
        '''

        if wind_speed is 0:
            return 0

        if wind_speed > 2.4:
            C_D = .0008 + .000065 * wind_speed
        else:
            C_D = (.0008 + 2.4 * .000065) * wind_speed / 2.4

        visc_air = 1.5 * 10**(-5)  # m2/s
        peak_ang_freq = PiersonMoskowitz.peak_angular_frequency(wind_speed)
        R_Bw = C_D * wind_speed**2 / (visc_air * peak_ang_freq)
        Wc = 3.88 * 10**(-5) * R_Bw**(1.09)

        return Wc
コード例 #14
0
def test_pierson_moskowitz():
    assert np.isclose(PiersonMoskowitz.significant_wave_height(10.0), 2.24337)
    assert np.isclose(PiersonMoskowitz.peak_wave_period(10.0), 7.5)
コード例 #15
0
def test_pierson_moskowitz():
    assert np.isclose(PiersonMoskowitz.significant_wave_height(10.0), 2.24337)
    assert np.isclose(PiersonMoskowitz.peak_wave_period(10.0), 7.5)