|
@@ 540-558 (lines=19) @@
|
| 537 |
|
tmp[3, :] = 288. |
| 538 |
|
rh = np.ones((4, 5, 5)) |
| 539 |
|
rh[0, :] = 100. |
| 540 |
|
rh[1, :] = 80. |
| 541 |
|
rh[2, :] = 40. |
| 542 |
|
rh[3, :] = 20. |
| 543 |
|
relh = rh * units.percent |
| 544 |
|
tmpk = tmp * units.kelvin |
| 545 |
|
isentlev = [296.] * units.kelvin |
| 546 |
|
isentprs = isentropic_interpolation(isentlev, lev, tmpk, relh) |
| 547 |
|
truerh = 100. * units.percent |
| 548 |
|
assert_almost_equal(isentprs[1], truerh, 3) |
| 549 |
|
|
| 550 |
|
|
| 551 |
|
def test_isentropic_pressure_tmp_out(): |
| 552 |
|
"""Test calculation of isentropic pressure function, temperature output.""" |
| 553 |
|
lev = [100000., 95000., 90000., 85000.] * units.Pa |
| 554 |
|
tmp = np.ones((4, 5, 5)) |
| 555 |
|
tmp[0, :] = 296. |
| 556 |
|
tmp[1, :] = 292. |
| 557 |
|
tmp[2, :] = 290. |
| 558 |
|
tmp[3, :] = 288. |
| 559 |
|
tmpk = tmp * units.kelvin |
| 560 |
|
isentlev = [296.] * units.kelvin |
| 561 |
|
isentprs = isentropic_interpolation(isentlev, lev, tmpk, tmpk_out=True) |
|
@@ 504-522 (lines=19) @@
|
| 501 |
|
lev = [100000., 95000., 90000., 85000.] * units.Pa |
| 502 |
|
tmp = np.ones((4, 5, 5)) |
| 503 |
|
tmp[0, :] = 296. |
| 504 |
|
tmp[1, :] = 292. |
| 505 |
|
tmp[2, :] = 290 |
| 506 |
|
tmp[3, :] = 288. |
| 507 |
|
tmpk = tmp * units.kelvin |
| 508 |
|
isentlev = [296.] * units.kelvin |
| 509 |
|
isentprs = isentropic_interpolation(isentlev, lev, tmpk) |
| 510 |
|
trueprs = 1000. * units.hPa |
| 511 |
|
assert_almost_equal(isentprs[0].shape, (1, 5, 5), 3) |
| 512 |
|
assert_almost_equal(isentprs[0], trueprs, 3) |
| 513 |
|
|
| 514 |
|
|
| 515 |
|
def test_isentropic_pressure_p_increase(): |
| 516 |
|
"""Test calculation of isentropic pressure function, p increasing order.""" |
| 517 |
|
lev = [85000, 90000., 95000., 100000.] * units.Pa |
| 518 |
|
tmp = np.ones((4, 5, 5)) |
| 519 |
|
tmp[0, :] = 288. |
| 520 |
|
tmp[1, :] = 290. |
| 521 |
|
tmp[2, :] = 292. |
| 522 |
|
tmp[3, :] = 296. |
| 523 |
|
tmpk = tmp * units.kelvin |
| 524 |
|
isentlev = [296.] * units.kelvin |
| 525 |
|
isentprs = isentropic_interpolation(isentlev, lev, tmpk) |
|
@@ 468-486 (lines=19) @@
|
| 465 |
|
"""Tests that CAPE is zero with no LFC.""" |
| 466 |
|
p = np.array([959., 779.2, 751.3, 724.3, 700., 269.]) * units.mbar |
| 467 |
|
temperature = np.array([22.2, 24.6, 22., 20.4, 18., -10.]) * units.celsius |
| 468 |
|
dewpoint = np.array([19., -11.2, -10.8, -10.4, -10., -53.2]) * units.celsius |
| 469 |
|
parcel_prof = parcel_profile(p, temperature[0], dewpoint[0]).to('degC') |
| 470 |
|
cape, cin = cape_cin(p, temperature, dewpoint, parcel_prof) |
| 471 |
|
assert_almost_equal(cape, 0.0 * units('joule / kilogram'), 6) |
| 472 |
|
assert_almost_equal(cin, 0.0 * units('joule / kilogram'), 6) |
| 473 |
|
|
| 474 |
|
|
| 475 |
|
def test_find_append_zero_crossings(): |
| 476 |
|
"""Tests finding and appending zero crossings of an x, y series.""" |
| 477 |
|
x = np.arange(11) * units.hPa |
| 478 |
|
y = np.array([3, 2, 1, -1, 2, 2, 0, 1, 0, -1, 2]) * units.degC |
| 479 |
|
x2, y2 = _find_append_zero_crossings(x, y) |
| 480 |
|
|
| 481 |
|
x_truth = np.array([0., 1., 2., 2.5, 3., 3.33333333, 4., 5., |
| 482 |
|
6., 7., 8., 9., 9.33333333, 10.]) * units.hPa |
| 483 |
|
y_truth = np.array([3, 2, 1, 0, -1, 0, 2, 2, 0, 1, 0, -1, 0, 2]) * units.degC |
| 484 |
|
assert_array_almost_equal(x2, x_truth, 6) |
| 485 |
|
assert_almost_equal(y2, y_truth, 6) |
| 486 |
|
|
| 487 |
|
|
| 488 |
|
def test_most_unstable_parcel(): |
| 489 |
|
"""Tests calculating the most unstable parcel.""" |