Example #1
0
    def test_vertical_mixing_profiles(self):
        # Testing an isolated mixing timestep

        cases = [  # Some cases with expected outcome
                {'vt': 0, 'K': 0, 'K_below': .01, 'T': 60, # No mixing
                    'zmin': -10, 'zmax': -10, 'zmean': -10},
                {'vt': -.005, 'K': 0, 'K_below': .01, 'T': 60, # Sinking
                    #'zmin': -74.0, 'zmax': -21.4, 'zmean': -50.2},  # With old seed_elements
                    'zmin': -74.79, 'zmax': -21.6, 'zmean': -49.97},
                {'vt': 0, 'K': .01, 'K_below': .01, 'T': 60, # Mixing
                    #'zmin': -39.8, 'zmax': -0.1, 'zmean': -14.5},
                    'zmin': -42.76, 'zmax': -0.02, 'zmean': -14.38},
                {'vt': .005, 'K': .01, 'K_below': .01, 'T': 60, # Mixing and rising
                    #'zmin': -8.1, 'zmax': -0.01, 'zmean': -2.1},
                    'zmin': -7.86, 'zmax': -0.01, 'zmean': -2.1},
                {'vt': -0.005, 'K': .01, 'K_below': .01, 'T': 60, # Mixing and sinking
                    #'zmin': -75.8, 'zmax': -20.7, 'zmean': -48.1},
                    'zmin': -78.76, 'zmax': -19.74, 'zmean': -48.0},
                {'vt': 0, 'K': .02, 'K_below': .001, 'T': 60,  # Mixing in mixed layer
                    #'zmin': -22.8, 'zmax': -0.1, 'zmean': -9.8},
                    'zmin': -21.3, 'zmax': -0.1, 'zmean': -9.55},
                ]

        N=100
        z = np.arange(0, -30, -2)
        time = datetime.now()
        for case in cases:
            diffusivity = np.ones(z.shape)*case['K']
            diffusivity[z<-15] = case['K_below']
            o = OceanDrift(loglevel=20)
            o.set_config('drift:vertical_mixing', True)
            o.set_config('vertical_mixing:diffusivitymodel', 'environment')
            o.set_config('vertical_mixing:timestep', case['T'])
            o.seed_elements(lon=4, lat=60, z=-10, time=time, number=N,
                            terminal_velocity=case['vt'])
            o.time = time
            o.time_step = timedelta(hours=2)
            o.release_elements()
            o.set_config('environment:fallback:land_binary_mask', 0)
            o.environment = np.array(np.ones(N)*100,
                            dtype=[('sea_floor_depth_below_sea_level',
                                    np.float32)]).view(np.recarray)
            o.environment_profiles = { 'z': z, 'ocean_vertical_diffusivity':
                                      np.tile(diffusivity, (N, 1)).T}
            o.set_fallback_values()
            o.vertical_mixing()
            self.assertAlmostEqual(o.elements.z.min(), case['zmin'], 1)
            self.assertAlmostEqual(o.elements.z.max(), case['zmax'], 1)
            self.assertAlmostEqual(o.elements.z.mean(), case['zmean'], 1)
Example #2
0
o = OceanDrift(loglevel=0)
o.set_config('drift:vertical_mixing', True)
o.set_config('vertical_mixing:diffusivitymodel', 'environment')
o.set_config('vertical_mixing:timestep', timestep_seconds)
o.seed_elements(lon=4,
                lat=60,
                z=seed_depth,
                time=time,
                number=N,
                terminal_velocity=terminal_velocity)
o.time = time
o.time_step = timedelta(hours=hours)
o.release_elements()
o.set_config('environment:fallback:land_binary_mask', 0)
o.environment = np.array(np.ones(N) * sea_floor_depth,
                         dtype=[('sea_floor_depth_below_sea_level', np.float32)
                                ]).view(np.recarray)
o.environment_profiles = {
    'z': z,
    'ocean_vertical_diffusivity': np.tile(diffusivity, (N, 1)).T
}

#%%
# Calculate vertical mixing, and return particle depths at all positions
print('Calculating...')
depths = o.vertical_mixing(store_depths=True)

print('Making animation...')
o.animate_vertical_distribution(depths=depths)

#%%