示例#1
0
def narr2suntansrad(outfile,tstart,tend,bbox,utmzone):
    """
    Extraxts NARR model data and converts to a netcdf file format recognised by SUNTANS
    
    This function is for extracting shortwave and longwave radiation
    """

    # Initialise the NARR object (for all variables)
    basefile = 'narr-b_221_' # These variables are stored in the NARR-B files
    narr=getNARR(tstart,tend,bbox,basefile=basefile)
    
    #Lookup table that matches variables to name in NARR file
    varlookup={'Hsw_up':'Upward_short_wave_radiation_flux', 'Hsw_down':'Downward_shortwave_radiation_flux',\
    'Hlw_up':'Upward_long_wave_radiation_flux','Hlw_down':'Downward_longwave_radiation_flux'}
    
    # Set some meta variables
    Nc = narr.nx*narr.ny
    
    nctime = convertTime(narr.time)
    
    meta={}
    meta.update({'Hsw_up':{'long_name':'Upward shortwave radiation','units':'W m-2','scalefactor':1.0,'addoffset':0.0}})
    meta.update({'Hsw_down':{'long_name':'Downward shortwave radiation','units':'W m-2','scalefactor':1.0,'addoffset':0.0}})
    meta.update({'Hlw_up':{'long_name':'Upward longwave radiation','units':'W m-2','scalefactor':1.0,'addoffset':0.0}})
    meta.update({'Hlw_down':{'long_name':'Downward longwave radiation','units':'W m-2','scalefactor':1.0,'addoffset':0.0}})
   
    # Convert the coordinates to UTM
    ll = np.hstack((np.reshape(narr.lon,(Nc,1)), np.reshape(narr.lat,(Nc,1))))
    xy = ll2utm(ll,utmzone)
    
    # Loop through each variable and store in a dictionary
    output = {}
    coords={}
    for vv in varlookup.keys():
        
        data = narr(varlookup[vv])
        
        # Convert the units
        data = data*meta[vv]['scalefactor']+meta[vv]['addoffset']    
        
        output[vv] = {'Data':np.reshape(data,(narr.nt,Nc))}
        
        output[vv].update({'long_name':meta[vv]['long_name'],'units':meta[vv]['units']})
        
        # Update the coordinates dictionary
        coords['x_'+vv]=xy[:,0]
        coords['y_'+vv]=xy[:,1]
        coords['z_'+vv]=narr.z * np.ones((Nc,))

    # Write to NetCDF 
    write2NC(outfile,coords,output,nctime)    
示例#2
0
def narr2suntansrad(outfile, tstart, tend, bbox, utmzone):
    """
    Extraxts NARR model data and converts to a netcdf file format recognised by SUNTANS

    This function is for extracting shortwave and longwave radiation
    """

    # Initialise the NARR object (for all variables)
    basefile = 'narr-b_221_'  # These variables are stored in the NARR-B files
    narr = getNARR(tstart, tend, bbox, basefile=basefile)

    #Lookup table that matches variables to name in NARR file
    varlookup={'Hsw_up':'Upward_short_wave_radiation_flux', 'Hsw_down':'Downward_shortwave_radiation_flux',\
    'Hlw_up':'Upward_long_wave_radiation_flux','Hlw_down':'Downward_longwave_radiation_flux'}

    # Set some meta variables
    Nc = narr.nx * narr.ny

    nctime = convertTime(narr.time)

    meta = {}
    meta.update({
        'Hsw_up': {
            'long_name': 'Upward shortwave radiation',
            'units': 'W m-2',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })
    meta.update({
        'Hsw_down': {
            'long_name': 'Downward shortwave radiation',
            'units': 'W m-2',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })
    meta.update({
        'Hlw_up': {
            'long_name': 'Upward longwave radiation',
            'units': 'W m-2',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })
    meta.update({
        'Hlw_down': {
            'long_name': 'Downward longwave radiation',
            'units': 'W m-2',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })

    # Convert the coordinates to UTM
    ll = np.hstack((np.reshape(narr.lon,
                               (Nc, 1)), np.reshape(narr.lat, (Nc, 1))))
    xy = ll2utm(ll, utmzone)

    # Loop through each variable and store in a dictionary
    output = {}
    coords = {}
    for vv in list(varlookup.keys()):

        data = narr(varlookup[vv])

        # Convert the units
        data = data * meta[vv]['scalefactor'] + meta[vv]['addoffset']

        output[vv] = {'Data': np.reshape(data, (narr.nt, Nc))}

        output[vv].update({
            'long_name': meta[vv]['long_name'],
            'units': meta[vv]['units']
        })

        # Update the coordinates dictionary
        coords['x_' + vv] = xy[:, 0]
        coords['y_' + vv] = xy[:, 1]
        coords['z_' + vv] = narr.z * np.ones((Nc, ))

    # Write to NetCDF
    write2NC(outfile, coords, output, nctime)
示例#3
0
def narr2suntans(outfile,tstart,tend,bbox,utmzone):
    """
    Extraxts NARR model data and converts to a netcdf file format recognised by SUNTANS
    """

    # Initialise the NARR object (for all variables)
    narr=getNARR(tstart,tend,bbox)
    
    #Lookup table that matches variables to name in NARR file
    varlookup={\
        'Uwind':'u_wind_height_above_ground',\
        'Vwind':'v_wind_height_above_ground',\
        'Tair':'Temperature_height_above_ground',\
        'Pair':'Pressure_reduced_to_MSL',\
        'RH':'Relative_humidity',\
        'cloud':'Total_cloud_cover',\
        'rain':'Precipitation_rate',\
    }
    
    # Set some meta variables
    Nc = narr.nx*narr.ny
    
    nctime = convertTime(narr.time)
    
    meta={}
    meta.update({'Uwind':{'long_name':'Eastward wind velocity component','units':'m s-1','scalefactor':1.0,'addoffset':0.0}})
    meta.update({'Vwind':{'long_name':'Northward wind velocity component','units':'m s-1','scalefactor':1.0,'addoffset':0.0}})
    meta.update({'Tair':{'long_name':'Air Temperature','units':'Celsius','scalefactor':1.0,'addoffset':-273.15}})
    meta.update({'Pair':{'long_name':'Air Pressure','units':'hPa','scalefactor':0.01,'addoffset':0.0}})
    meta.update({'RH':{'long_name':'Relative Humidity','units':'percent','scalefactor':1.0,'addoffset':0.0}})
    meta.update({'cloud':{'long_name':'Cloud cover fraction','units':'dimensionless','scalefactor':0.01,'addoffset':0.0}})
    meta.update({'rain':{'long_name':'rain fall rate','units':'kg m2 s-1','scalefactor':1.0,'addoffset':0.0}})
    
    # Convert the coordinates to UTM
    ll = np.hstack((np.reshape(narr.lon,(Nc,1)), np.reshape(narr.lat,(Nc,1))))
    xy = ll2utm(ll,utmzone)
    
    # Loop through each variable and store in a dictionary
    output = {}
    coords={}
    
    # Get all data
    narrvars = [vv for vv in varlookup.itervalues()]
    data = narr(narrvars) # This stores all of the data in a dictionary    
    
    for vv in varlookup.keys():

        # Convert the units
        vnarr = varlookup[vv]
        data[vnarr] = data[vnarr]*meta[vv]['scalefactor']+meta[vv]['addoffset']    
        
        output[vv] = {'Data':np.reshape(data[vnarr],(narr.nt,Nc))}
        
        output[vv].update({'long_name':meta[vv]['long_name'],'units':meta[vv]['units']})
        
        # Update the coordinates dictionary
        coords['x_'+vv]=xy[:,0]
        coords['y_'+vv]=xy[:,1]
        coords['z_'+vv]=narr.z * np.ones((Nc,))

    # Write to NetCDF 
    write2NC(outfile,coords,output,nctime)
示例#4
0
def narr2suntans(outfile, tstart, tend, bbox, utmzone):
    """
    Extraxts NARR model data and converts to a netcdf file format recognised by SUNTANS
    """

    # Initialise the NARR object (for all variables)
    narr = getNARR(tstart, tend, bbox)

    #Lookup table that matches variables to name in NARR file
    varlookup={\
        'Uwind':'u_wind_height_above_ground',\
        'Vwind':'v_wind_height_above_ground',\
        'Tair':'Temperature_height_above_ground',\
        'Pair':'Pressure_reduced_to_MSL',\
        'RH':'Relative_humidity',\
        'cloud':'Total_cloud_cover',\
        'rain':'Precipitation_rate',\
    }

    # Set some meta variables
    Nc = narr.nx * narr.ny

    nctime = convertTime(narr.time)

    meta = {}
    meta.update({
        'Uwind': {
            'long_name': 'Eastward wind velocity component',
            'units': 'm s-1',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })
    meta.update({
        'Vwind': {
            'long_name': 'Northward wind velocity component',
            'units': 'm s-1',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })
    meta.update({
        'Tair': {
            'long_name': 'Air Temperature',
            'units': 'Celsius',
            'scalefactor': 1.0,
            'addoffset': -273.15
        }
    })
    meta.update({
        'Pair': {
            'long_name': 'Air Pressure',
            'units': 'hPa',
            'scalefactor': 0.01,
            'addoffset': 0.0
        }
    })
    meta.update({
        'RH': {
            'long_name': 'Relative Humidity',
            'units': 'percent',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })
    meta.update({
        'cloud': {
            'long_name': 'Cloud cover fraction',
            'units': 'dimensionless',
            'scalefactor': 0.01,
            'addoffset': 0.0
        }
    })
    meta.update({
        'rain': {
            'long_name': 'rain fall rate',
            'units': 'kg m2 s-1',
            'scalefactor': 1.0,
            'addoffset': 0.0
        }
    })

    # Convert the coordinates to UTM
    ll = np.hstack((np.reshape(narr.lon,
                               (Nc, 1)), np.reshape(narr.lat, (Nc, 1))))
    xy = ll2utm(ll, utmzone)

    # Loop through each variable and store in a dictionary
    output = {}
    coords = {}

    # Get all data
    narrvars = [vv for vv in varlookup.values()]
    data = narr(narrvars)  # This stores all of the data in a dictionary

    for vv in list(varlookup.keys()):

        # Convert the units
        vnarr = varlookup[vv]
        data[vnarr] = data[vnarr] * meta[vv]['scalefactor'] + meta[vv][
            'addoffset']

        output[vv] = {'Data': np.reshape(data[vnarr], (narr.nt, Nc))}

        output[vv].update({
            'long_name': meta[vv]['long_name'],
            'units': meta[vv]['units']
        })

        # Update the coordinates dictionary
        coords['x_' + vv] = xy[:, 0]
        coords['y_' + vv] = xy[:, 1]
        coords['z_' + vv] = narr.z * np.ones((Nc, ))

    # Write to NetCDF
    write2NC(outfile, coords, output, nctime)