Source code for polaris.ocean.convergence

[docs] def get_resolution_for_task(config, refinement_factor, refinement='both'): """ Get the resolution for a step in a convergence task Parameters ---------- config : polaris.Config The config options for this task refinement_factor : float The factor by which either resolution or time is refined for this step refinement : str, optional Whether to refine in space, time or both Returns ------- resolution : float The resolution corresponding to the refinement_factor and convergence test type """ if refinement == 'both': option = 'refinement_factors_space' else: option = f'refinement_factors_{refinement}' base_resolution = config.getfloat('convergence', 'base_resolution') refinement_factors = config.getlist('convergence', option, dtype=float) if refinement_factor not in refinement_factors: raise ValueError( f'refinement_factor {refinement_factor} not found in config ' f'option {option}:\n {refinement_factors}' ) if refinement == 'time': resolution = base_resolution else: resolution = refinement_factor * base_resolution return resolution
[docs] def get_timestep_for_task(config, refinement_factor, refinement='both'): """ Get the time step for a forward step in a convergence task Parameters ---------- config : polaris.Config The config options for this task refinement_factor : float The factor by which either resolution or time is refined for this step refinement : str, optional Whether to refine in space, time or both Returns ------- resolution : float The resolution corresponding to the refinement_factor and convergence test type """ if refinement == 'both': option = 'refinement_factors_space' else: option = f'refinement_factors_{refinement}' base_resolution = config.getfloat('convergence', 'base_resolution') refinement_factors = config.getlist('convergence', option, dtype=float) if refinement_factor not in refinement_factors: raise ValueError( f'refinement_factor {refinement_factor} not found in config ' f'option {option}:\n {refinement_factors}' ) resolution = get_resolution_for_task( config, refinement_factor, refinement=refinement ) section = config['convergence_forward'] time_integrator = section.get('time_integrator') # dt is proportional to resolution: default 30 seconds per km if time_integrator == 'RK4': dt_per_km = section.getfloat('rk4_dt_per_km') btr_timestep = 0.0 else: dt_per_km = section.getfloat('split_dt_per_km') btr_dt_per_km = section.getfloat('btr_dt_per_km') if refinement == 'time': btr_timestep = btr_dt_per_km * base_resolution * refinement_factor elif refinement == 'space': btr_timestep = btr_dt_per_km * base_resolution else: btr_timestep = btr_dt_per_km * resolution if refinement == 'time': timestep = dt_per_km * refinement_factor * resolution elif refinement == 'space': timestep = dt_per_km * base_resolution else: timestep = dt_per_km * resolution return timestep, btr_timestep