Ejemplo n.º 1
0
def fluxbudget_bolus_visop(ds,mask,varn,kza=0,kzo=None,S0=34.8,t=0):
    """Compute flux of `varn` into region `mask` due to eddy (bolus) velocity"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dxt = dsvar['DXT'][:] * 1e-2
    dyt = dsvar['DYT'][:] * 1e-2
    dz = dsvar['dz'][:] * 1e-2
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in xrange(kza,kzo):
        # get bolus velocity
        uflux = _fill0(dsvar['UISOP'][t,k]) * 1e-2 # m s-1
        vflux = _fill0(dsvar['VISOP'][t,k]) * 1e-2 # m s-1
        # get scalar data
        if varn == 'heat':
            scalar = _fill0(dsvar['TEMP'][t,k])
        elif varn == 'salt':
            scalar = _fill0(dsvar['SALT'][t,k])
        elif varn == 'freshwater':
            scalar = (S0 - _fill0(dsvar['SALT'][t,k])) / S0
        # multiply flux by scalar
        uflux *= scalar
        vflux *= scalar
        # multiply by horizontal grid spacing
        uflux *= dyt
        vflux *= dxt
        # multiply by vertical grid spacing
        uflux *= dz[k]
        vflux *= dz[k]
        # compute budget
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=None,mask=mask)
    if varn == 'heat':
        fluxbudget *= (1e3 * 4e3 * 1e-15) # PW
    return fluxbudget
Ejemplo n.º 2
0
def fluxbudget_VVEL(ds,mask,varn,kza=0,kzo=None,S0=34.8,t=0):
    """Integrate horizontal flux using VVEL*SCALAR"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dxu = dsvar['DXU'][:] * 1e-2
    dyu = dsvar['DYU'][:] * 1e-2
    dz = dsvar['dz'][:] * 1e-2
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in xrange(kza,kzo):
        uflux = _fill0(dsvar['UVEL'][t,k]) * 1e-2
        uflux *= dyu
        uflux *= dz[k]
        vflux = _fill0(dsvar['VVEL'][t,k]) * 1e-2
        vflux *= dxu
        vflux *= dz[k]
        if not varn:
            scalar = None
        elif varn == 'heat':
            scalar = _fill0(dsvar['TEMP'][t,k])
        elif varn == 'salt':
            scalar = _fill0(dsvar['SALT'][t,k])
        elif varn == 'freshwater':
            scalar = (S0 - _fill0(dsvar['SALT'][t,k])) / S0
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=scalar,mask=mask,grid='ArakawaB')
    if varn == 'heat':
        fluxbudget *= (1e3 * 4e3 * 1e-15) # PW
    return fluxbudget
Ejemplo n.º 3
0
def fluxbudget_bolus_visop(ds,mask,varn,kza=0,kzo=None,S0=34.8,t=0):
    """Compute flux of `varn` into region `mask` due to eddy (bolus) velocity"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dxt = dsvar['DXT'][:] * 1e-2
    dyt = dsvar['DYT'][:] * 1e-2
    dz = dsvar['dz'][:] * 1e-2
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in range(kza,kzo):
        # get bolus velocity
        uflux = _fill0(dsvar['UISOP'][t,k]) * 1e-2 # m s-1
        vflux = _fill0(dsvar['VISOP'][t,k]) * 1e-2 # m s-1
        # get scalar data
        if varn == 'heat':
            scalar = _fill0(dsvar['TEMP'][t,k])
        elif varn == 'salt':
            scalar = _fill0(dsvar['SALT'][t,k])
        elif varn == 'freshwater':
            scalar = (S0 - _fill0(dsvar['SALT'][t,k])) / S0
        # multiply flux by scalar
        uflux *= scalar
        vflux *= scalar
        # multiply by horizontal grid spacing
        uflux *= dyt
        vflux *= dxt
        # multiply by vertical grid spacing
        uflux *= dz[k]
        vflux *= dz[k]
        # compute budget
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=None,mask=mask)
    if varn == 'heat':
        fluxbudget *= (1e3 * 4e3 * 1e-15) # PW
    return fluxbudget
Ejemplo n.º 4
0
def fluxbudget_VVEL(ds,mask,varn,kza=0,kzo=None,S0=34.8,t=0):
    """Integrate horizontal flux using VVEL*SCALAR"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dxu = dsvar['DXU'][:] * 1e-2
    dyu = dsvar['DYU'][:] * 1e-2
    dz = dsvar['dz'][:] * 1e-2
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in range(kza,kzo):
        uflux = _fill0(dsvar['UVEL'][t,k]) * 1e-2
        uflux *= dyu
        uflux *= dz[k]
        vflux = _fill0(dsvar['VVEL'][t,k]) * 1e-2
        vflux *= dxu
        vflux *= dz[k]
        if not varn:
            scalar = None
        elif varn == 'heat':
            scalar = _fill0(dsvar['TEMP'][t,k])
        elif varn == 'salt':
            scalar = _fill0(dsvar['SALT'][t,k])
        elif varn == 'freshwater':
            scalar = (S0 - _fill0(dsvar['SALT'][t,k])) / S0
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=scalar,mask=mask,grid='ArakawaB')
    if varn == 'heat':
        fluxbudget *= (1e3 * 4e3 * 1e-15) # PW
    return fluxbudget
Ejemplo n.º 5
0
def fluxbudget_UESVNS(ds,mask,varn='salt',kza=0,kzo=None,t=0):
    """Integrate horizontal flux using UES and VNS variables"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dz = dsvar['dz'][:] * 1e-2
    tarea = dsvar['UAREA'][:] * 1e-4
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in xrange(kza,kzo):
        uflux = _fill0(dsvar['UES'][t,k])
        uflux *= tarea
        uflux *= dz[k]
        vflux = _fill0(dsvar['VNS'][t,k])
        vflux *= tarea
        vflux *= dz[k]
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=None,mask=mask)
    return fluxbudget
Ejemplo n.º 6
0
def fluxbudget_UESVNS(ds,mask,varn='salt',kza=0,kzo=None,t=0):
    """Integrate horizontal flux using UES and VNS variables"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dz = dsvar['dz'][:] * 1e-2
    tarea = dsvar['UAREA'][:] * 1e-4
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in range(kza,kzo):
        uflux = _fill0(dsvar['UES'][t,k])
        uflux *= tarea
        uflux *= dz[k]
        vflux = _fill0(dsvar['VNS'][t,k])
        vflux *= tarea
        vflux *= dz[k]
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=None,mask=mask)
    return fluxbudget
Ejemplo n.º 7
0
def fluxbudget_diffusion(ds,mask,varn,kza=0,kzo=None,S0=34.8,t=0):
    """Compute flux of `varn` into region `mask` due to diffusion"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dxt = dsvar['DXT'][:] * 1e-2
    dyt = dsvar['DYT'][:] * 1e-2
    dz = dsvar['dz'][:] * 1e-2
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in xrange(kza,kzo):
        # get scalar data
        if varn == 'heat':
            scalar = _fill0(dsvar['TEMP'][t,k])
        elif varn == 'salt':
            scalar = _fill0(dsvar['SALT'][t,k])
        elif varn == 'freshwater':
            scalar = (S0 - _fill0(dsvar['SALT'][t,k])) / S0
        # get gradient
        uflux = central_differences(scalar,dxt,axis=1) # [scalar] m-1
        vflux = central_differences(scalar,dyt,axis=0) # [scalar] m-1
        # multiply gradient by diffusion coefficient
        kappa = _fill0(dsvar['KAPPA_ISOP'][t,k] * 1e-4) # m2 s-1
        uflux *= kappa
        vflux *= kappa
        # multiply by horizontal grid spacing
        uflux *= dyt
        vflux *= dxt
        # multiply by vertical grid spacing
        uflux *= dz[k]
        vflux *= dz[k]
        # compute budget
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=None,mask=mask)
    # convert to right units
    if varn == 'heat':
        fluxbudget *= (1e3 * 4e3 * 1e-15) # PW
    return fluxbudget
Ejemplo n.º 8
0
def fluxbudget_diffusion(ds,mask,varn,kza=0,kzo=None,S0=34.8,t=0):
    """Compute flux of `varn` into region `mask` due to diffusion"""
    _warn_virtual_salt_flux_units()
    dsvar = ds.variables
    dxt = dsvar['DXT'][:] * 1e-2
    dyt = dsvar['DYT'][:] * 1e-2
    dz = dsvar['dz'][:] * 1e-2
    if kzo is None: kzo = len(dz)
    fluxbudget = 0.
    for k in range(kza,kzo):
        # get scalar data
        if varn == 'heat':
            scalar = _fill0(dsvar['TEMP'][t,k])
        elif varn == 'salt':
            scalar = _fill0(dsvar['SALT'][t,k])
        elif varn == 'freshwater':
            scalar = (S0 - _fill0(dsvar['SALT'][t,k])) / S0
        # get gradient
        uflux = central_differences(scalar,dxt,axis=1) # [scalar] m-1
        vflux = central_differences(scalar,dyt,axis=0) # [scalar] m-1
        # multiply gradient by diffusion coefficient
        kappa = _fill0(dsvar['KAPPA_ISOP'][t,k] * 1e-4) # m2 s-1
        uflux *= kappa
        vflux *= kappa
        # multiply by horizontal grid spacing
        uflux *= dyt
        vflux *= dxt
        # multiply by vertical grid spacing
        uflux *= dz[k]
        vflux *= dz[k]
        # compute budget
        fluxbudget += budget_over_region_2D(uflux,vflux,scalar=None,mask=mask)
    # convert to right units
    if varn == 'heat':
        fluxbudget *= (1e3 * 4e3 * 1e-15) # PW
    return fluxbudget