Example #1
0
 def test_num_per_timestep_release_elements(self):
     'release elements in the context of a spill container'
     # todo: need a test for a line release where rate is given - to check
     # positions are being initialized correctly
     end_time = self.rel_time + timedelta(hours=1)
     release = ContinuousRelease(self.rel_time,
                                 self.pos,
                                 num_per_timestep=100,
                                 initial_elements=1000,
                                 end_release_time=end_time)
     s = Spill(release)
     sc = SpillContainer()
     sc.spills += s
     sc.prepare_for_model_run()
     for ix in range(5):
         time = self.rel_time + timedelta(seconds=900 * ix)
         num_les = sc.release_elements(900, time)
         if time <= s.get('end_release_time'):
             if ix == 0:
                 assert num_les == 1100
             else:
                 assert num_les == 100
             assert sc.num_released == 100 + ix * 100 + 1000
         else:
             assert num_les == 0
Example #2
0
def test_init(element_type, amount):
    '''
    Test various initializtions
    '''
    spill = Spill(Release(release_time=datetime.now()),
                  element_type=element_type,
                  amount=amount,
                  units='kg')

    if element_type is None:
        assert np.all(spill.get('windage_range') == (0.01, 0.04))
        assert (spill.get('windage_persist') == 900)
        assert len(spill.get('initializers')) == 1  # add windages
    else:
        assert len(spill.get('initializers')) == 0

    assert spill.name == 'Spill'
    assert spill.get('release_duration') == 0
Example #3
0
    def test_set_newparticle_positions(self):
        'define two spatial releases and check positions are set correctly'
        sp2 = Spill(SpatialRelease(self.sp.release.release_time,
                                  ((0, 0, 0), (0, 0, 0))))
        (data_arrays, num) = release_elements(self.sp,
                                            self.sp.release.release_time, 600)
        assert (self.sp.get('num_released') == self.sp.release.num_elements and
                self.sp.release.num_elements == num)

        (data_arrays, num2) = release_elements(sp2,
                                              sp2.release.release_time,
                                              600,
                                              data_arrays)
        assert (sp2.get('num_released') == sp2.release.num_elements and
                len(data_arrays['positions']) == num2 + num)
        assert (np.all(data_arrays['positions'][:num, :] ==
                self.sp.get('start_position')))
        assert (np.all(data_arrays['positions'][num:, :] ==
                sp2.get('start_position')))
Example #4
0
def test_init(element_type, amount):
    '''
    Test various initializtions
    '''
    spill = Spill(Release(release_time=datetime.now()),
                  element_type=element_type,
                  amount=amount,
                  units='kg'
                  )

    if element_type is None:
        assert np.all(spill.get('windage_range') == (0.01, 0.04))
        assert (spill.get('windage_persist') == 900)
        assert len(spill.get('initializers')) == 1  # add windages
    else:
        assert len(spill.get('initializers')) == 0

    assert spill.name == 'Spill'
    assert spill.get('release_duration') == 0
Example #5
0
    def test_set_newparticle_positions(self):
        'define two spatial releases and check positions are set correctly'
        sp2 = Spill(
            SpatialRelease(self.sp.release.release_time,
                           ((0, 0, 0), (0, 0, 0))))
        (data_arrays, num) = release_elements(self.sp,
                                              self.sp.release.release_time,
                                              600)
        assert (self.sp.get('num_released') == self.sp.release.num_elements
                and self.sp.release.num_elements == num)

        (data_arrays, num2) = release_elements(sp2, sp2.release.release_time,
                                               600, data_arrays)
        assert (sp2.get('num_released') == sp2.release.num_elements
                and len(data_arrays['positions']) == num2 + num)
        assert (np.all(
            data_arrays['positions'][:num, :] == self.sp.get('start_position'))
                )
        assert (np.all(
            data_arrays['positions'][num:, :] == sp2.get('start_position')))
Example #6
0
def test_amount_mass_vol(amount, units):
    '''
    ensure mass is being returned correctly when 'amount' is initialized wtih
    'mass' or 'volume'
    '''
    spill = Spill(Release(datetime.now()),
                  amount=amount,
                  units=units,
                  substance=test_oil)
    assert spill.amount == amount
    assert spill.units == units

    if units in Spill.valid_vol_units:
        exp_mass = (spill.get('substance').get_density() *
                    uc.convert('Volume', units, 'm^3', spill.amount))
    else:
        exp_mass = uc.convert('Mass', units, 'kg', spill.amount)
    assert spill.get_mass() == exp_mass
    exp_mass_g = exp_mass * 1000
    assert spill.get_mass('g') == exp_mass_g
Example #7
0
def test_amount_mass_vol(amount, units):
    '''
    ensure mass is being returned correctly when 'amount' is initialized wtih
    'mass' or 'volume'
    '''
    spill = Spill(Release(datetime.now()),
                  amount=amount,
                  units=units,
                  substance=test_oil)
    assert spill.amount == amount
    assert spill.units == units

    if units in Spill.valid_vol_units:
        exp_mass = (spill.get('substance').get_density() *
                    uc.convert('Volume', units, 'm^3', spill.amount))
    else:
        exp_mass = uc.convert('Mass', units, 'kg', spill.amount)
    assert spill.get_mass() == exp_mass
    exp_mass_g = exp_mass * 1000
    assert spill.get_mass('g') == exp_mass_g
Example #8
0
    def test_full_run(self):
        'just check that all data arrays work correctly'
        s = Spill(InitElemsFromFile(testdata['nc']['nc_output']))
        model = Model(start_time=s.get('release_time'),
                      time_step=self.time_step.total_seconds(),
                      duration=timedelta(days=2))
        model.spills += s
        model.movers += RandomMover()

        # setup model run
        for step in model:
            if step['step_num'] == 0:
                continue
            for sc in model.spills.items():
                for key in sc.data_arrays.keys():
                    # following keys will not change with run
                    if key in ('status_codes', 'mass', 'id', 'spill_num',
                               'last_water_positions'):  # all water map
                        assert np.all(sc[key] == s.release._init_data[key])
                    else:
                        assert np.any(sc[key] != s.release._init_data[key])
Example #9
0
 def test_num_per_timestep_release_elements(self):
     'release elements in the context of a spill container'
     # todo: need a test for a line release where rate is given - to check
     # positions are being initialized correctly
     end_time = self.rel_time + timedelta(hours=1)
     release = PointLineRelease(self.rel_time,
                                self.pos,
                                num_per_timestep=100,
                                end_release_time=end_time)
     s = Spill(release)
     sc = SpillContainer()
     sc.spills += s
     sc.prepare_for_model_run()
     for ix in range(5):
         time = self.rel_time + timedelta(seconds=900 * ix)
         num_les = sc.release_elements(900, time)
         if time <= s.get('end_release_time'):
             assert num_les == 100
             assert sc.num_released == 100 + ix * 100
         else:
             assert num_les == 0
Example #10
0
    def test_full_run(self):
        'just check that all data arrays work correctly'
        s = Spill(InitElemsFromFile(testdata['nc']['nc_output']))
        model = Model(start_time=s.get('release_time'),
                      time_step=self.time_step.total_seconds(),
                      duration=timedelta(days=2))
        model.spills += s
        model.movers += RandomMover()

        # setup model run
        for step in model:
            if step['step_num'] == 0:
                continue
            for sc in model.spills.items():
                for key in sc.data_arrays.keys():
                    # following keys will not change with run
                    if key in ('status_codes',
                               'mass',
                               'id',
                               'spill_num',
                               'last_water_positions'):  # all water map
                        assert np.all(sc[key] == s.release._init_data[key])
                    else:
                        assert np.any(sc[key] != s.release._init_data[key])