コード例 #1
0
ファイル: saline_ice.py プロジェクト: robbiemallett/smrt
def impure_ice_permittivity_maetzler06(frequency, temperature, salinity):
    """ Computes permittivity of impure ice from Maetzler 2006 - Thermal Microwave Radiation: Applications for Remote Sensing.
     Model developed for salinity around 0.013 PSU. The extrapolation is based on linear assumption to salinity, so it is not recommended for much higher salinity.

        :param temperature: ice temperature in K
        :param salinity: salinity of ice in kg/kg (see PSU constant in smrt module)

    **Usage example**::

        from smrt.permittivity.saline_ice import impure_ice_permittivity_maetzler06
        eps_ice = impure_ice_permittivity_maetzler06(frequency=18e9, temperature=270, salinity=0.013)

    """

    # Issue warning if salinity > 0.013 PSU
    if salinity > 0.013e-3:
        warnings.warn(
            "This permittivity model was developed for saline impurities of around 0.013 10^-3 kg/kg (or 0.013 PSU)")

    # Modify imaginary component calculated for pure ice
    pure_ice_permittivity = ice_permittivity_maetzler06(frequency, temperature)

    # Equation 5.37 from Maetzler 2006: Thermal Microwave Radiation: Applications for Remote Sensing
    freqGHz = frequency / GHz
    g0 = 1866 * np.exp(-0.317 * freqGHz)
    g1 = 72.2 + 6.02 * freqGHz

    # Equation 5.36
    delta_Eimag = 1. / (g0 + g1 * (FREEZING_POINT - temperature))

    # Equation 5.38
    S0 = 0.013  # CURRENT UNITS ARE PSU
    # print (pure_ice_permittivity, delta_Eimag * salinity * 1e3 / S0)
    # print (pure_ice_permittivity + 1j * delta_Eimag * salinity * 1e3 / S0)
    return pure_ice_permittivity + 1j * delta_Eimag * salinity * 1e3 / S0
コード例 #2
0
ファイル: test_saline_ice.py プロジェクト: smrt-model/smrt
def test_impure_ice_freezing_point_0p013psu_10GHz():
    delta_epsimag = 1. / (1866 * np.exp(-3.17))
    test_eps = ice_permittivity_maetzler06(10e9, FREEZING_POINT) + delta_epsimag
    impure = impure_ice_permittivity_maetzler06(10e9, FREEZING_POINT, 0.013*PSU)
コード例 #3
0
ファイル: test_saline_ice.py プロジェクト: smrt-model/smrt
def test_saline_permittivity_same_as_pure_for_zero_salinity():
    pure = ice_permittivity_maetzler06(18e9, 265)
    impure = saline_ice_permittivity_pvs_mixing(18e9,265,0)
    assert abs(pure.real - impure.real)  < 1e-4
    assert abs(pure.imag- impure.imag) < 1e-7
コード例 #4
0
def test_real_ice_permittivity_output_maetzler87_temp_268():
    eps87 = ice_permittivity_maetzler87(10e9, 268.15)
    eps06 = ice_permittivity_maetzler06(10e9, 268.15)
    assert eps87.real == eps06.real
コード例 #5
0
def test_imaginary_ice_permittivity_output_matzler_temp_250_freq_40GHz():
    eps = ice_permittivity_maetzler06(40e9, 250)
    np.testing.assert_allclose(eps.imag, 0.0023952, atol=1e-4)
コード例 #6
0
def test_imaginary_ice_permittivity_output_matzler_temp_270_freq_30GHz():
    eps = ice_permittivity_maetzler06(30e9, 270)
    np.testing.assert_allclose(eps.imag, 0.0025971, atol=1e-4)
コード例 #7
0
def test_ice_permittivity_output_matzler_temp_250():
    eps = ice_permittivity_maetzler06(10e9, 250)
    print(eps)
    np.testing.assert_allclose(eps.real, 3.1675, atol=1e-3)
    np.testing.assert_allclose(eps.imag, 6.0571e-4, atol=1e-4)
コード例 #8
0
def test_ice_permittivity_output_matzler_temp_270():
    eps = ice_permittivity_maetzler06(10e9, 270)
    print(eps)
    np.testing.assert_allclose(eps.real, 3.18567, atol=1e-3)
    np.testing.assert_allclose(eps.imag, 9.093e-04, atol=1e-4)