def __init__(self, temperature=300., salinity=35.0, sediment=.005, fetch=0, name='WaterConditions', **kwargs): ''' Assume units are SI for all properties. 'units' attribute assumes SI by default. This can be changed, but initialization takes SI. ''' if isinstance(temperature, (Number)): self.temperature = TemperatureTS.constant(data=temperature) elif isinstance(temperature, (EnvProp)): self.temperature = temperature else: raise TypeError('Temperature is not an environment object or number') if isinstance(salinity, (Number)): self.salinity = TimeSeriesProp.constant(name='Salinity', units='psu', data=salinity) elif isinstance(salinity, (EnvProp)): self.salinity = salinity else: raise TypeError('Salinity is not an environment object or number') if isinstance(sediment, (Number)): self.sediment = TimeSeriesProp.constant(name='Sediment', units='kg/m^3', data=sediment) elif isinstance(sediment, (EnvProp)): self.sediment = sediment else: raise TypeError('Sediment is not an environment object or number') # self.wave_height = wave_height self.fetch = fetch self.kinematic_viscosity = 0.000001 self.name = 'WaterConditions'
def test_construction(self): u = None v = None with pytest.raises(ValueError): # mismatched data and dates length dates = [] u = TimeSeriesProp( 'u', 'm/s', [datetime.datetime.now(), datetime.datetime.now()], [ 5, ]) u = TimeSeriesProp('u', 'm/s', [datetime.datetime.now()], [ 5, ]) assert u is not None assert u.name == 'u' assert u.units == 'm/s' v = None with pytest.raises(ValueError): v = TimeSeriesProp('v', 'nm/hr', [datetime.datetime.now()], [ 5, ]) assert v is None constant = TimeSeriesProp.constant('const', 'm/s', 5) assert constant.data[0] == 5 assert all(constant.at(np.array((0, 0)), datetime.datetime.now()) == 5)
def constant(cls, name='', speed=0, direction=0, units='m/s'): """ utility to create a constant wind "timeseries" :param speed: speed of wind :param direction: direction -- degrees True, direction wind is from (degrees True) :param units='m/s': units for speed, as a string, i.e. "knots", "m/s", "cm/s", etc. .. note:: The time for a constant wind timeseries is irrelevant. This function simply sets it to datetime.now() accurate to hours. """ direction = direction * -1 - 90 u = speed * np.cos(direction * np.pi / 180) v = speed * np.sin(direction * np.pi / 180) u = TimeSeriesProp.constant('u', units, u) v = TimeSeriesProp.constant('v', units, v) return super(VelocityTS, cls).constant(name, units, variables=[u, v])