コード例 #1
0
    def from_netCDF(cls,
                    filename=None,
                    grid_topology=None,
                    name=None,
                    units=None,
                    time=None,
                    ice_var=None,
                    ice_conc_var=None,
                    grid=None,
                    dataset=None,
                    grid_file=None,
                    data_file=None,
                    **kwargs):
        if filename is not None:
            data_file = filename
            grid_file = filename

        ds = None
        dg = None
        if dataset is None:
            if grid_file == data_file:
                ds = dg = _get_dataset(grid_file)
            else:
                ds = _get_dataset(data_file)
                dg = _get_dataset(grid_file)
        else:
            ds = dg = dataset

        if grid is None:
            grid = _init_grid(grid_file,
                              grid_topology=grid_topology,
                              dataset=dg)
        if ice_var is None:
            ice_var = IceVelocity.from_netCDF(filename,
                                              grid=grid,
                                              dataset=ds,
                                              **kwargs)
        if time is None:
            time = ice_var.time

        if ice_conc_var is None:
            ice_conc_var = IceConcentration.from_netCDF(filename,
                                                        time=time,
                                                        grid=grid,
                                                        dataset=ds,
                                                        **kwargs)
        if name is None:
            name = 'IceAwareProp'
        if units is None:
            units = ice_var.units
        return cls(name='foo',
                   units=units,
                   time=time,
                   ice_var=ice_var,
                   ice_conc_var=ice_conc_var,
                   grid=grid,
                   grid_file=grid_file,
                   data_file=data_file,
                   **kwargs)
コード例 #2
0
    def from_netCDF(cls,
                    filename=None,
                    grid_topology=None,
                    name=None,
                    units=None,
                    time=None,
                    ice_var=None,
                    wind_var=None,
                    ice_conc_var=None,
                    grid=None,
                    dataset=None,
                    grid_file=None,
                    data_file=None,
                    **kwargs):

        if filename is not None:
            data_file = filename
            grid_file = filename

        ds = None
        dg = None
        if dataset is None:
            if grid_file == data_file:
                ds = dg = _get_dataset(grid_file)
            else:
                ds = _get_dataset(data_file)
                dg = _get_dataset(grid_file)
        else:
            ds = dg = dataset

        if grid is None:
            grid = _init_grid(grid_file,
                              grid_topology=grid_topology,
                              dataset=dg)
        if wind_var is None:
            wind_var = GridWind.from_netCDF(filename,
                                            time=time,
                                            grid=grid,
                                            dataset=ds,
                                            **kwargs)

        return super(IceAwareWind, cls).from_netCDF(grid_topology=grid_topology,
                                                    name=name,
                                                    units=units,
                                                    time=time,
                                                    ice_var=ice_var,
                                                    wind_var=wind_var,
                                                    ice_conc_var=ice_conc_var,
                                                    grid=grid,
                                                    dataset=ds,
                                                    grid_file=grid_file,
                                                    data_file=data_file,
                                                    **kwargs)
コード例 #3
0
    def from_netCDF(cls,
                    filename=None,
                    varname=None,
                    grid_topology=None,
                    name=None,
                    units=None,
                    time=None,
                    grid=None,
                    depth=None,
                    dataset=None,
                    data_file=None,
                    grid_file=None,
                    load_all=False,
                    fill_value=0,
                    **kwargs
                    ):
        '''
        Allows one-function creation of a GriddedProp from a file.

        :param filename: Default data source. Parameters below take precedence
        :param varname: Name of the variable in the data source file
        :param grid_topology: Description of the relationship between grid attributes and variable names.
        :param name: Name of property
        :param units: Units
        :param time: Time axis of the data
        :param data: Underlying data source
        :param grid: Grid that the data corresponds with
        :param depth: Depth axis object
        :param dataset: Instance of open Dataset
        :param data_file: Name of data source file
        :param grid_file: Name of grid source file
        :type filename: string
        :type varname: string
        :type grid_topology: {string : string, ...}
        :type name: string
        :type units: string
        :type time: [] of datetime.datetime, netCDF4 Variable, or Time object
        :type data: netCDF4.Variable or numpy.array
        :type grid: pysgrid or pyugrid
        :type S_Depth or L_Depth
        :type dataset: netCDF4.Dataset
        :type data_file: string
        :type grid_file: string
        '''
        if filename is not None:
            data_file = filename
            grid_file = filename

        ds = None
        dg = None
        if dataset is None:
            if grid_file == data_file:
                ds = dg = _get_dataset(grid_file)
            else:
                ds = _get_dataset(data_file)
                dg = _get_dataset(grid_file)
        else:
            if grid_file is not None:
                dg = _get_dataset(grid_file)
            else:
                dg = dataset
            ds = dataset

        if grid is None:
            grid = _init_grid(grid_file,
                              grid_topology=grid_topology,
                              dataset=dg)
        if varname is None:
            varname = cls._gen_varname(data_file,
                                       dataset=ds)
            if varname is None:
                raise NameError('Default current names are not in the data file, must supply variable name')
        data = ds[varname]
        if name is None:
            name = cls.__name__ + str(cls._def_count)
            cls._def_count += 1
        if units is None:
            try:
                units = data.units
            except AttributeError:
                units = None
        timevar = None
        if time is None:
            try:
                timevar = data.time if data.time == data.dimensions[0] else data.dimensions[0]
            except AttributeError:
                if len(data.dimensions) > 2:
                    timevar = data.dimensions[0]
                    time = Time(ds[timevar])
                else:
                    time = None
        if depth is None:
            from gnome.environment.environment_objects import Depth
            depth = Depth(surface_index=-1)
#             if len(data.shape) == 4 or (len(data.shape) == 3 and time is None):
#                 from gnome.environment.environment_objects import S_Depth
#                 depth = S_Depth.from_netCDF(grid=grid,
#                                             depth=1,
#                                             data_file=data_file,
#                                             grid_file=grid_file,
#                                             **kwargs)
        if load_all:
            data = data[:]
        return cls(name=name,
                   units=units,
                   time=time,
                   data=data,
                   grid=grid,
                   depth=depth,
                   grid_file=grid_file,
                   data_file=data_file,
                   fill_value=fill_value,
                   **kwargs)
コード例 #4
0
    def from_netCDF(cls,
                    filename=None,
                    grid_topology=None,
                    name=None,
                    temperature=None,
                    salinity=None,
                    sediment=None,
                    grid=None,
                    dataset=None,
                    grid_file=None,
                    data_file=None):
        if filename is not None:
            data_file = filename
            grid_file = filename

        ds = None
        dg = None
        if dataset is None:
            if grid_file == data_file:
                ds = dg = _get_dataset(grid_file)
            else:
                ds = _get_dataset(data_file)
                dg = _get_dataset(grid_file)
        else:
            ds = dg = dataset

        if grid is None:
            grid = _init_grid(grid_file,
                             grid_topology=grid_topology,
                             dataset=dg)

        if time is None:
            time = ice_var.time

        if temperature is None:
            try:
                temperature = GridTemperature.from_netCDF(filename,
                                                          time=time,
                                                          grid=grid,
                                                          dataset=ds)
            except:
                temperature = 300.
        if salinity is None:
            try:
                salinity = GridSalinity.from_netCDF(filename,
                                                    time=time,
                                                    grid=grid,
                                                    dataset=ds)
            except:
                salinity = 35.
        if sediment is None:
            try:
                sediment = GridSediment.from_netCDF(filename,
                                                    time=time,
                                                    grid=grid,
                                                    dataset=ds)
            except:
                sediment = .005
        if name is None:
            name = 'WaterConditions'
        if units is None:
            units = water_var.units
        return cls(name=name,
                   units=units,
                   time=time,
                   ice_var=ice_var,
                   water_var=water_var,
                   ice_conc_var=ice_conc_var,
                   grid=grid,
                   grid_file=grid_file,
                   data_file=data_file)