Beispiel #1
0
def vtem(time, levi, lat, vzm, vthzm, thzm):
    ntime = len(time)

    levi100 = 100.0 * levi

    vtem = numpy.zeros(vzm.shape, dtype="d")
    for itime in range(ntime):
        dthdp = deriv(levi100, thzm[itime, ...])
        psieddy = vthzm[itime, ...] / dthdp
        dpsidp = deriv(levi100, psieddy)
        vtem[itime, ...] = vzm[itime, ...] - dpsidp
    return vtem
Beispiel #2
0
def _init_epfy(time, levi, lat, uzm, uvzm, vthzm, thzm):
    ntime = len(time)

    latrad = (lat / 180.0) * numpy.pi
    coslat = numpy.cos(latrad)
    levi100 = 100.0 * levi

    epfy = numpy.zeros(uzm.shape, dtype='d')
    for itime in range(ntime):
        dthdp = deriv(levi100, thzm[itime, ...])
        dudp = deriv(levi100, uzm[itime, ...])
        psieddy = vthzm[itime, ...] / dthdp
        epfy[itime, ...] = a * numpy.einsum('j,ij...->ij...', coslat, (dudp * psieddy - uvzm[itime, ...]))
    return epfy
Beispiel #3
0
 def test_deriv_array(self):
     x = np.array([2.0, 5.0, 7.0, 3.0, 4.0])
     y = np.array([3.0, 5.0, 4.0, 7.0, 8.0])
     actual = deriv(x, y)
     expected = np.array(
         [1.3666666, -0.033333302, -0.25000000, 1.5833340, 0.41666698])
     np.testing.assert_array_almost_equal(actual, expected, 6)
Beispiel #4
0
def psitem(time, levi, lat, vzm, vthzm, thzm):
    ntime = len(time)
    nlevi = len(levi)

    latrad = (lat / 180.0) * numpy.pi
    coslat = numpy.cos(latrad)
    levi100 = levi * 100.0

    psitem = numpy.zeros(vzm.shape, dtype="d")
    vzm_shape_1 = list(vzm.shape[1:])
    vzm_shape_1[0] += 1
    vzmwithzero = numpy.zeros(vzm_shape_1, dtype="d")
    levi100withzero = numpy.zeros((nlevi + 1, ), dtype="d")
    levi100withzero[1:] = levi100
    for itime in range(ntime):
        dthdp = deriv(levi100, thzm[itime, ...])
        psieddy = vthzm[itime, ...] / dthdp
        vzmwithzero[1:, ...] = vzm[itime, ...]
        for ilev in range(1, nlevi + 1):
            result = int_tabulated(levi100withzero[0:ilev + 1],
                                   vzmwithzero[0:ilev + 1, ...])
            tmp1 = (2 * numpy.pi * a * coslat) / g0
            tmp2 = result - psieddy[ilev - 1, ...]
            psitem[itime, ilev - 1,
                   ...] = numpy.einsum("i,i...->i...", tmp1, tmp2)

    return psitem
Beispiel #5
0
 def test_deriv_list(self):
     x = [2.0, 5.0, 7.0, 3.0, 4.0]
     y = [3.0, 5.0, 4.0, 7.0, 8.0]
     actual = deriv(x, y)
     expected = [
         1.3666666, -0.033333302, -0.25000000, 1.5833340, 0.41666698
     ]
     np.testing.assert_array_almost_equal(actual, expected, 6)
Beispiel #6
0
def _init_wtem(time, levi, lat, wzm, vthzm, thzm):
    ntime = len(time)

    latrad = (lat / 180.0) * numpy.pi
    coslat = numpy.cos(latrad)
    levi100 = 100.0 * levi

    _wzm = -1.0 * numpy.einsum('ij...,j->ij...', wzm, levi100) / H

    wtem = numpy.zeros(wzm.shape, dtype='d')
    for itime in range(ntime):
        dthdp = deriv(levi100, thzm[itime, ...])
        psieddy = vthzm[itime, ...] / dthdp
        tmp = numpy.einsum('ij...,j->ij...', psieddy, coslat)
        dpsidy = numpy.einsum('ij...,j->ij...', deriv(latrad, tmp, axis=1), 1.0 / (a * coslat))
        wtem[itime, ...] = _wzm[itime, ...] + dpsidy
    return wtem
Beispiel #7
0
def utendepfd(time, levi, lat, uzm, uvzm, uwzm, vthzm, thzm):
    ntime = len(time)

    latrad = (lat / 180.0) * numpy.pi
    coslat = numpy.cos(latrad)
    levi100 = 100.0 * levi
    iacoslat = 1.0 / (a * coslat)

    epfy = _init_epfy(time, levi, lat, uzm, uvzm, vthzm, thzm)
    epfz = _init_epfz(time, levi, lat, uzm, uwzm, vthzm, thzm)

    utendepfd = numpy.zeros(uzm.shape, dtype='d')
    for itime in range(ntime):
        tmp = numpy.einsum('ij...,j->ij...', epfy[itime, ...], coslat)
        depfydphi = numpy.einsum('ij...,j->ij...', deriv(latrad, tmp, axis=1), iacoslat)
        depfzdp = deriv(levi100, epfz[itime, ...])
        utendepfd[itime, ...] = numpy.einsum('ij...,j->ij...', depfydphi + depfzdp, iacoslat)
    return utendepfd
Beispiel #8
0
def _init_epfz(time, levi, lat, uzm, uwzm, vthzm, thzm):
    ntime = len(time)

    latrad = (lat / 180.0) * numpy.pi
    coslat = numpy.cos(latrad)
    fshape = (1, len(lat)) + tuple([1] * (uzm.ndim - 3))
    f = 2 * om * numpy.sin(latrad).reshape(fshape)
    levi100 = 100.0 * levi

    _uwzm = -1.0 * numpy.einsum('ij...,j->ij...', uwzm, levi100) / H

    epfz = numpy.zeros(uzm.shape, dtype='d')
    for itime in range(ntime):
        ucos = numpy.einsum('ij...,j->ij...', uzm[itime, ...], coslat)
        dudphi = deriv(latrad, ucos, axis=1) / a
        dthdp = deriv(levi100, thzm[itime, ...])
        psieddy = vthzm[itime, ...] / dthdp
        epfz[itime, ...] = a * numpy.einsum('j,ij...->ij...', coslat, (f - dudphi) * psieddy - _uwzm[itime, ...])
    return epfz
Beispiel #9
0
def utendwtem(time, levi, lat, uzm, wzm, vthzm, thzm):
    ntime = len(time)

    levi100 = 100.0 * levi
    wtem = _init_wtem(time, levi, lat, wzm, vthzm, thzm)

    utendwtem = numpy.zeros(uzm.shape, dtype="d")
    for itime in range(ntime):
        dudp = deriv(levi100, uzm[itime, ...])
        utendwtem[itime, ...] = -1.0 * wtem[itime, ...] * dudp
    return utendwtem
Beispiel #10
0
def utendvtem(time, levi, lat, uzm, vzm, vthzm, thzm):
    ntime = len(time)

    latrad = (lat / 180.0) * numpy.pi
    coslat = numpy.cos(latrad)
    fshape = (1, len(lat)) + tuple([1] * (uzm.ndim - 3))
    f = 2 * om * numpy.sin(latrad).reshape(fshape)
    _vtem = vtem(time, levi, lat, vzm, vthzm, thzm)

    utendvtem = numpy.zeros(uzm.shape, dtype="d")
    for itime in range(ntime):
        ucos = numpy.einsum("ij...,j->ij...", uzm[itime, ...], coslat)
        dudphi = deriv(latrad, ucos, axis=1) / a
        utendvtem[itime, ...] = _vtem[itime, ...] * (f - dudphi)
    return utendvtem
Beispiel #11
0
 def test_deriv_list_no_y(self):
     x = [1.2345, 2.34567, 3.45678, 4.56789, 5.678901]
     actual = deriv(x)
     expected = [1.11120, 1.11114, 1.11111, 1.11106, 1.11096]
     np.testing.assert_array_almost_equal(actual, expected, 6)