def test_simulation_visualization(): """Test simulation visualization.""" sim = plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) viz = sim.visualize(kind='particle', x='x', y='y') viz.next() viz.prev()
def test_sim_data(): """Testing data in simulation.""" sim = plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) snaps = sim.snaps assert len(snaps) == 1 assert len(snaps[0]) == 2000 properties = { 'adiabatic_index': 1.0, 'dust_method': 'dust as separate sets of particles', 'equation_of_state': 'locally isothermal disc', 'grain_density': [3000.0] * plonk.units('kg/m^3'), 'grain_size': [0.01] * plonk.units('m'), 'smoothing_length_factor': 1.0, 'time': [0.0] * plonk.units('s'), } for key, val in sim.properties.items(): if isinstance(val, plonk._units.Quantity): assert np.allclose(val.m, properties[key].m) else: assert sim.properties[key] == properties[key] assert sim.paths['time_series_global'][0].name == TS_FILENAME
def test_init_simulation(): """Testing initialising simulation.""" plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) with pytest.raises(ValueError): plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH, data_source='not_available') with pytest.raises(FileNotFoundError): plonk.load_simulation(prefix='does_not_exist', directory=DIR_PATH)
def test_animation_particles(): """Test animation of particle plots.""" sim = plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) snaps = [sim.snaps[0], sim.snaps[0], sim.snaps[0]] filename = Path('animation.mp4') visualize.animation_particles( filename=filename, snaps=snaps, x='x', y='density', units={ 'position': 'au', 'density': 'g/cm^3' }, adaptive_limits=False, ) filename.unlink()
def test_animation_images(): """Test animation of images.""" sim = plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) snaps = [sim.snaps[0], sim.snaps[0], sim.snaps[0]] filename = Path('animation.mp4') visualize.animation_images( filename=filename, snaps=snaps, quantity='density', units={ 'position': 'au', 'density': 'g/cm^3' }, adaptive_colorbar=False, num_pixels=(32, 32), ) filename.unlink()
def _calculate_velocity_differential(path, same_times=False): sim = plonk.load_simulation(prefix='dustybox', directory=path) data = dustybox.calculate_differential_velocity(sim) times = None if same_times: times = data['time'].to_numpy() exact1 = dustybox.calculate_differential_velocity_exact(sim, times=times, backreaction=True) exact2 = dustybox.calculate_differential_velocity_exact(sim, times=times, backreaction=False) # Scale time by the shortest stopping time _, stopping_time = dustybox.get_dust_properties(sim.snaps[0]) data['time'] = data['time'] / stopping_time[0] exact1['time'] = exact1['time'] / stopping_time[0] exact2['time'] = exact2['time'] / stopping_time[0] return data, exact1, exact2
def time_evolution_error(): print('') print('Time evolution of velocity differential error') print('---------------------------------------------') print('') paths = _get_paths(name='time_evolution', glob='f_*-N_*') error = dict() for name, path in paths.items(): print(f'Calculating error for {name}...') sim = plonk.load_simulation(prefix='dustybox', directory=path) error[name] = dustybox.calculate_error(sim) print('Plotting figure...') fig = dustybox.plot_error_all(error, figsize=(15, 8)) name = 'dustybox_differential_velocity_error.pdf' print(f'Saving figure to {name}') fig.savefig(name, bbox_inches='tight', pad_inches=0.05)
def test_animation_profiles(): """Test animation of profiles.""" sim = plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) snaps = [sim.snaps[0], sim.snaps[0], sim.snaps[0]] profiles = [plonk.load_profile(snap) for snap in snaps] filename = Path('animation.mp4') visualize.animation_profiles( filename=filename, profiles=profiles, x='radius', y='surface_density', units={ 'position': 'au', 'surface_density': 'g/cm^2' }, ) filename.unlink()
def accuracy(): print('') print('Accuracy of method') print('------------------') print('') paths = _get_paths(name='accuracy', glob='hfact_*-eps_*-C_force_*') error = dict() for name, path in paths.items(): print(f'Calculating error for {name}...') sim = plonk.load_simulation(prefix='dustybox', directory=path) error[name] = dustybox.calculate_error(sim) print('Plotting figure...') C_drag = {} error_norm = {} for key, val in error.items(): name = key[:18] if C_drag.get(name) is None: C_drag[name] = list() C_drag[name].append(_get_val(key, 'C_force')) if error_norm.get(name) is None: error_norm[name] = list() error_norm[name].append( _error_norm_fn([val['error.1'], val['error.2']], method=2)) def line(x, m=2, c=0): return [m * _x + c for _x in x] m, c = 2, -0.1 fig, ax = plt.subplots() def plot_error_norm(eta, marker, label, ax): _C_drag = { key: val for key, val in C_drag.items() if _get_val(key, 'hfact') == eta } _error_norm = { key: val for key, val in error_norm.items() if _get_val(key, 'hfact') == eta } for (eps, dt), err in zip(_C_drag.items(), _error_norm.values()): _eps = _get_val(eps, 'dust_to_gas') if label: _label = rf'$\eta = {eta}, \epsilon = {_eps}$' else: _label = None ax.plot(np.log10(dt), np.log10(err), marker, label=_label) return [np.log10(dt[0]), np.log10(dt[-1])] plot_error_norm(eta=1.0, marker='d', label=True, ax=ax) x = plot_error_norm(eta=2.5, marker='s', label=True, ax=ax) ax.plot(x, line(x, m=m, c=c), '--', color='gray') ax.set(xlabel=r'$\log_{10}$(dt)', ylabel=r'$\log_{10}$(error)') ax.legend() name = 'dustybox_accuracy.pdf' print(f'Saving figure to {name}') fig.savefig(name, bbox_inches='tight', pad_inches=0.05)
def test_set_units_time_series(): """Test set/unset units time series.""" sim = plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) sim.unset_units_on_time_series() sim.set_units_on_time_series()
def test_to_array(): """Testing to_array method.""" sim = plonk.load_simulation(prefix=PREFIX, directory=DIR_PATH) sim.to_array(quantity='density', indices=[0, 1, 2])