def perform_ifs_tasks(datadir, expname, refdate=None, postprocmode=postproc.recreate, tempdir="/tmp/ece2cmor", taskthreads=4, cdothreads=4): global log, tasks, table_dir, prefix, masks validate_setup_settings() validate_run_settings(datadir, expname) ifs_tasks = [t for t in tasks if t.source.model_component() == "ifs"] log.info("Selected %d IFS tasks from %d input tasks" % (len(ifs_tasks), len(tasks))) if len(ifs_tasks) == 0: return tableroot = os.path.join(table_dir, prefix) if enable_masks: ifs2cmor.masks = {k: masks[k] for k in masks if masks[k]["source"].model_component() == "ifs"} else: ifs2cmor.masks = {} if (not ifs2cmor.initialize(datadir, expname, tableroot, refdate if refdate else datetime.datetime(1850, 1, 1), tempdir=tempdir, autofilter=auto_filter)): return postproc.postproc_mode = postprocmode postproc.cdo_threads = cdothreads area_task = cmor_task.cmor_task(cmor_source.ifs_source(cmor_source.grib_code(129)), get_cmor_target("areacella", "fx")) ifs2cmor.execute(ifs_tasks + [area_task], nthreads=taskthreads)
def get_sp_tasks(tasks, autofilter): global ifs_spectral_file_ tasks_by_freq = cmor_utils.group(tasks, lambda task: task.target.frequency) result = [] for freq, task_group in tasks_by_freq.iteritems(): tasks3d = [ t for t in task_group if "alevel" in getattr(t.target, cmor_target.dims_key).split() ] if not any(tasks3d): continue surf_pressure_tasks = [ t for t in task_group if t.source.get_grib_code() == surface_pressure and getattr(t, "time_operator", "point") in ["mean", "point"] ] surf_pressure_task = surf_pressure_tasks[0] if any( surf_pressure_tasks) else None if surf_pressure_task: result.append(surf_pressure_task) else: source = cmor_source.ifs_source(surface_pressure) surf_pressure_task = cmor_task.cmor_task( source, cmor_target.cmor_target("sp", freq)) setattr(surf_pressure_task.target, cmor_target.freq_key, freq) setattr(surf_pressure_task.target, "time_operator", ["point"]) find_sp_variable(surf_pressure_task, autofilter) result.append(surf_pressure_task) for task3d in tasks3d: setattr(task3d, "sp_task", surf_pressure_task) return result
def get_sp_tasks(tasks): tasks_by_freq = cmor_utils.group( tasks, lambda task: (task.target.frequency, '_'.join( getattr(task.target, "time_operator", ["mean"])))) result = [] for freq, task_group in tasks_by_freq.iteritems(): tasks3d = [ t for t in task_group if "alevel" in getattr(t.target, cmor_target.dims_key).split() ] if not any(tasks3d): continue surf_pressure_tasks = [ t for t in task_group if t.source.get_grib_code() == surface_pressure ] if len(surf_pressure_tasks) > 0: surf_pressure_task = surf_pressure_tasks[0] result.append(surf_pressure_task) else: source = cmor_source.ifs_source(surface_pressure) surf_pressure_task = cmor_task.cmor_task( source, cmor_target.cmor_target("sp", tasks3d[0].target.table)) setattr(surf_pressure_task.target, cmor_target.freq_key, freq[0]) setattr(surf_pressure_task.target, "time_operator", freq[1].split('_')) setattr(surf_pressure_task.target, cmor_target.dims_key, "latitude longitude") find_sp_variable(surf_pressure_task) result.append(surf_pressure_task) for task3d in tasks3d: setattr(task3d, "sp_task", surf_pressure_task) return result
def test_snow_depth(): code = grib_code(141, 128) src = ifs_source(code) eq_(src.grid(), "point") eq_(src.spatial_dims, 2)
def test_specific_humidity(): code = grib_code(135, 128) src = ifs_source(code) eq_(src.grid(), "spec") eq_(src.spatial_dims, 3)
def test_default_ifs_source(): src = ifs_source(None) eq_(src.grid(), None) eq_(src.get_grib_code(), None) eq_(src.get_root_codes(), [])
def test_invalid_target(self): src=cmor_source.ifs_source("81.128") tgt="invalid" task=cmor_task.cmor_task(src,tgt)
def test_snow_depth(): code = grib_code(141, 128) src = ifs_source(code) assert src.grid() == "point" assert src.spatial_dims == 2
def test_specific_humidity(): code = grib_code(135, 128) src = ifs_source(code) assert src.grid() == "spec" assert src.spatial_dims == 3
def test_default_ifs_source(): src = ifs_source(None) assert src.grid() is None assert src.get_grib_code() is None assert not any(src.get_root_codes())
def test_snow_depth(self): code=grib_code(141,128) src=ifs_source(code) eq_(src.grid(),"point") eq_(src.dims(),2)
def test_specific_humidity(self): code=grib_code(135,128) src=ifs_source(code) eq_(src.grid(),"spec") eq_(src.dims(),3)