示例#1
0
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)
示例#2
0
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
示例#3
0
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
示例#4
0
 def test_snow_depth():
     code = grib_code(141, 128)
     src = ifs_source(code)
     eq_(src.grid(), "point")
     eq_(src.spatial_dims, 2)
示例#5
0
 def test_specific_humidity():
     code = grib_code(135, 128)
     src = ifs_source(code)
     eq_(src.grid(), "spec")
     eq_(src.spatial_dims, 3)
示例#6
0
 def test_default_ifs_source():
     src = ifs_source(None)
     eq_(src.grid(), None)
     eq_(src.get_grib_code(), None)
     eq_(src.get_root_codes(), [])
示例#7
0
 def test_invalid_target(self):
     src=cmor_source.ifs_source("81.128")
     tgt="invalid"
     task=cmor_task.cmor_task(src,tgt)
示例#8
0
 def test_snow_depth():
     code = grib_code(141, 128)
     src = ifs_source(code)
     assert src.grid() == "point"
     assert src.spatial_dims == 2
示例#9
0
 def test_specific_humidity():
     code = grib_code(135, 128)
     src = ifs_source(code)
     assert src.grid() == "spec"
     assert src.spatial_dims == 3
示例#10
0
 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())
示例#11
0
 def test_snow_depth(self):
     code=grib_code(141,128)
     src=ifs_source(code)
     eq_(src.grid(),"point")
     eq_(src.dims(),2)
示例#12
0
 def test_specific_humidity(self):
     code=grib_code(135,128)
     src=ifs_source(code)
     eq_(src.grid(),"spec")
     eq_(src.dims(),3)