Exemplo n.º 1
0
def lookup(x, y, z, table, mod='column'):
    if mod == 'column':
        table = table.T
    _x, _y, _z, _fs = table[0], table[1], table[2], table[3:]
    result = array([x, y, z])
    for _f in _fs:
        _table = array([_x, _y, _z, _f]).T
	result.append(trunc(interp3d(x, y, z, _table), 14))
    return result
Exemplo n.º 2
0
def ltmPressure(jdays, time, lon, lat, ncfile):
    """
    Extract pressure value from a daily long-term mean SLP dataset at the
    given day of year and lon,lat position
    To use this function (and hence some form of daily LTM SLP data) requires
    knowledge of the day of year.

    :param jdays: Julian day (day of year) values.
    :param time: Time of day for each observation (fraction of a day).
    :param lon: Longitude of TC position.
    :param lat: Latitude of TC position.
    :param str ncfile: Path to netCDF file containing daily long-term mean
                       sea level pressure data.

    :type  jdays: :class:`numpy.ndarray`
    :type  time: :class:`numpy.ndarray`
    :type  lon: :class:`numpy.ndarray`
    :type  lat: :class:`numpy.ndarray`

    :returns: :class:`numpy.ndarray` of long-term mean sea level pressure
              values at the day of year and positions given.
    """
    jtime = jdays + np.modf(time)[0]
    coords = np.array([jtime, lat, lon])

    LOG.debug("Sampling data from MSLP data in {0}".format(ncfile))
    ncobj = nctools.ncLoadFile(ncfile)
    slpunits = getattr(ncobj.variables['slp'], 'units')

    data = nctools.ncGetData(ncobj, 'slp')
    # Get the MSLP by interpolating to the location of the TC:
    penv = interp3d.interp3d(data,
                             coords,
                             scale=[365., 180., 360.],
                             offset=[0., -90., 0.])
    penv = metutils.convert(penv, slpunits, 'hPa')
    del data
    ncobj.close()
    del ncobj

    return penv
Exemplo n.º 3
0
def ltmPressure(jdays, time, lon, lat, ncfile):
    """
    Extract pressure value from a daily long-term mean SLP dataset at the
    given day of year and lon,lat position
    To use this function (and hence some form of daily LTM SLP data) requires
    knowledge of the day of year.

    :param jdays: Julian day (day of year) values.
    :param time: Time of day for each observation (fraction of a day).
    :param lon: Longitude of TC position.
    :param lat: Latitude of TC position.
    :param str ncfile: Path to netCDF file containing daily long-term mean
                       sea level pressure data.

    :type  jdays: :class:`numpy.ndarray`
    :type  time: :class:`numpy.ndarray` 
    :type  lon: :class:`numpy.ndarray`
    :type  lat: :class:`numpy.ndarray`

    :returns: :class:`numpy.ndarray` of long-term mean sea level pressure
              values at the day of year and positions given. 
    """
    jtime = jdays + np.modf(time)[0]
    coords = np.array([jtime, lat, lon])

    logger.debug("Sampling data from MSLP data in {0}".format(ncfile))
    ncobj = nctools.ncLoadFile(ncfile)
    slpunits = getattr(ncobj.variables['slp'], 'units')

    data = nctools.ncGetData(ncobj, 'slp')
    # Get the MSLP by interpolating to the location of the TC:
    penv = interp3d.interp3d(data, coords, scale=[365., 180., 360.],
                             offset=[0., -90., 0.])
    penv = metutils.convert(penv, slpunits, 'hPa')
    del data
    ncobj.close()
    del ncobj

    return penv
Exemplo n.º 4
0
def ltmPressure(jdays, time, lon, lat, ncfile):
    """
    Extract pressure value from a daily long-term mean SLP dataset at the
    given day of year and lon,lat position
    To use this function (and hence some form of daily LTM SLP data) requires
    knowledge of the day of year.
    """
    jtime = jdays + np.modf(time)[0]
    coords = np.array([jtime, lat, lon])

    logger.debug("Sampling data from MSLP data in {0}".format(ncfile))
    ncobj = nctools.ncLoadFile(ncfile)
    slpunits = getattr(ncobj.variables['slp'], 'units')

    data = nctools.ncGetData(ncobj, 'slp')
    # Get the MSLP by interpolating to the location of the TC:
    penv = interp3d.interp3d(data, coords)
    penv = metutils.convert(penv, slpunits, 'hPa')
    del data
    ncobj.close()
    del ncobj

    return penv
Exemplo n.º 5
0
    coords = ncv[var].coordinates.split()
    v = nc.createVariable(var+'_z',vardtype,newdims)
    v.units = ncv[var].units
    v.long_name = ncv[var].long_name
    v.standard_name = ncv[var].standard_name
    v.missing_value = fillvalue
    #v.coordinates = zaxname+' '+coords[1]+' '+coords[2]
    v.coordinates = coords[2]+' '+coords[1]


# so far assume sigma coordinates
for t in range(tnum):
  print('  timestep %d'%t)
  h = numpy.tile(depth[t]/znum,(znum,1,1))
  z = cumsum(h,axis=0)-0.5*h - numpy.tile(depth[t],(znum,1,1))
  for varname in variables:
    # Cython:
    ncv[varname+'_z'][t] = interp3d(z.filled(1.0),ncv[varname][t].filled(fillvalue),-zlevels,fillvalue=fillvalue)

    # Scipy interp:    
    #
    #for j in range(ynum):
    #  for i in range(xnum):
    #    varz[:,j,i] = interp(-zlevels,squeeze(z[:,j,i]),squeeze(ncv[varname][t,:,j,i]))
    #ncv[varname+'_z'][t]=varz

  nc.sync()

nc.close()