diff --git a/conf/archive.yml b/conf/archive.yml index 0251beaf4151ce8c90b26094531d640f68d0a4cc..decc387c391855fbac18d5f3f09812131964a78e 100644 --- a/conf/archive.yml +++ b/conf/archive.yml @@ -3,7 +3,7 @@ archive: src: "/esarchive/" System: - system5c3s: + ECMWF-SEAS5: name: "ECMWF SEAS5" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ecmwf/system5c3s/" @@ -21,7 +21,24 @@ archive: calendar: "proleptic_gregorian" time_stamp_lag: "0" reference_grid: "/esarchive/exp/ecmwf/system5c3s/monthly_mean/tas_f6h/tas_20180501.nc" - system7c3s: + ECMWF-SEAS5.1: + name: "ECMWF SEAS5 (v5.1)" + institution: "European Centre for Medium-Range Weather Forecasts" + src: "exp/ecmwf/system51c3s/" + daily_mean: {"tas":"_f6h/", "prlr":"_s0-24h/", "sfcWind":"_f6h/", + "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", + "tdps":"_f6h/"} + monthly_mean: {"tas":"_f6h/", "rsds":"_s0-24h/", "prlr":"_s0-24h/", + "sfcWind":"_f6h/", "tasmin":"_f24h/", "tasmax":"_f24h/", + "uas":"_f6h/", "vas":"_f6h/", "psl":"_f6h/", + "tdps":"_f6h/"} + nmember: + fcst: 51 + hcst: 25 + calendar: "proleptic_gregorian" + time_stamp_lag: "0" + reference_grid: "conf/grid_description/griddes_system51c3s.txt" + Meteo-France-System7: name: "Meteo-France System 7" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/meteofrance/system7c3s/" @@ -34,7 +51,7 @@ archive: time_stamp_lag: "+1" calendar: "proleptic_gregorian" reference_grid: "conf/grid_description/griddes_system7c3s.txt" - system21_m1: + DWD-GCFS2.1: name: "DWD GCFS 2.1" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/dwd/system21_m1/" @@ -47,7 +64,7 @@ archive: calendar: "proleptic_gregorian" time_stamp_lag: "+1" reference_grid: "conf/grid_description/griddes_system21_m1.txt" - system35c3s: + CMCC-SPS3.5: name: "CMCC-SPS3.5" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/cmcc/system35c3s/" @@ -60,7 +77,7 @@ archive: calendar: "proleptic_gregorian" time_stamp_lag: "+1" reference_grid: "conf/grid_description/griddes_system35c3s.txt" - system2c3s: + JMA-CPS2: name: "JMA System 2" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/jma/system2c3s/" @@ -72,7 +89,7 @@ archive: calendar: "proleptic_gregorian" time_stamp_lag: "+1" reference_grid: "conf/grid_description/griddes_system2c3s.txt" - eccc1: + ECCC-CanCM4i: name: "ECCC CanCM4i" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/eccc/eccc1/" @@ -84,8 +101,8 @@ archive: calendar: "proleptic_gregorian" time_stamp_lag: "+1" reference_grid: "conf/grid_description/griddes_eccc1.txt" - glosea6_system600-c3s: - name: "UKMO GloSea 6 6.0" + UK-MetOffice-Glosea600: + name: "UK MetOffice GloSea 6 (v6.0)" institution: "European Centre for Medium-Range Weather Forecasts" src: "exp/ukmo/glosea6_system600-c3s/" monthly_mean: {"tas":"_f6h/", "tasmin":"_f24h/", @@ -96,7 +113,7 @@ archive: calendar: "proleptic_gregorian" time_stamp_lag: "+1" reference_grid: "conf/grid_description/griddes_ukmo600.txt" - ncep-cfsv2: + NCEP-CFSv2: name: "NCEP CFSv2" institution: "NOAA NCEP" #? src: "exp/ncep/cfs-v2/" @@ -109,7 +126,7 @@ archive: time_stamp_lag: "0" reference_grid: "conf/grid_description/griddes_ncep-cfsv2.txt" Reference: - era5: + ERA5: name: "ERA5" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/era5/" @@ -127,7 +144,7 @@ archive: "ta500":"_f1h-r1440x721cds/", "ta850":"_f1h-r1440x721cds/"} calendar: "standard" reference_grid: "/esarchive/recon/ecmwf/era5/monthly_mean/tas_f1h-r1440x721cds/tas_201805.nc" - era5land: + ERA5-Land: name: "ERA5-Land" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/era5land/" @@ -138,7 +155,7 @@ archive: "sfcWind":"_f1h/", "rsds":"_f1h/"} calendar: "proleptic_gregorian" reference_grid: "/esarchive/recon/ecmwf/era5land/daily_mean/tas_f1h/tas_201805.nc" - uerra: + UERRA: name: "ECMWF UERRA" institution: "European Centre for Medium-Range Weather Forecasts" src: "recon/ecmwf/uerra_mescan/" diff --git a/conf/grid_description/griddes_system51c3s.txt b/conf/grid_description/griddes_system51c3s.txt new file mode 100644 index 0000000000000000000000000000000000000000..9610e9ef73e582c2b1ba28eeee14cb1f5cf0dd14 --- /dev/null +++ b/conf/grid_description/griddes_system51c3s.txt @@ -0,0 +1,17 @@ +# +# Grid description file for ECMWF SEAS5 v5.1 +# +gridtype = lonlat +gridsize = 64800 +xname = lon +xlongname = longitude +xunits = degrees_east +yname = lat +ylongname = latitude +yunits = degrees_north +xsize = 360 +ysize = 180 +xfirst = 0.5 +xinc = 1 +yfirst = 89.5 +yinc = -1 diff --git a/conf/output_dictionaries/scorecards.yml b/conf/output_dictionaries/scorecards.yml index c5071987a3cca3120c665e06bd0247994eca7f8f..fa92042caf218489eecf32febfd9e9e10bb6717d 100644 --- a/conf/output_dictionaries/scorecards.yml +++ b/conf/output_dictionaries/scorecards.yml @@ -1,26 +1,29 @@ System: - system5c3s: + ECMWF-SEAS5: short_name: "ecmwfs5" display_name: "ECMWF System 5" - system7c3s: + ECMWF-SEAS5.1: + short_name: "ecmwfs51" + display_name: "ECMWF System 5.1" + Meteo-France-System7: short_name: "meteofrances7" display_name: "Meteo-France System 7" - system21_m1: + DWD-GCFS2.1: short_name: "dwds21" display_name: "DWD System 21" - system35c3s: + CMCC-SPS3.5: short_name: "cmccs35" display_name: "CMCC System 35" - system2c3s: + JMA-CPS2: short_name: "jmas2" display_name: "JMA System 2" - eccc1: + ECCC-CanCM4i: short_name: "ecccs1" display_name: "ECCC System 1" - glosea6_system600-c3s: + UK-MetOffice-Glosea600: short_name: "ukmos600" display_name: "UK Met Office System 600" - ncep-cfsv2: + NCEP-CFSv2: short_name: "nceps2" display_name: "NCEP System 2" Reference: @@ -33,5 +36,3 @@ Reference: uerra: short_name: "uerra_mescan" display_name: "UERRA MESCAN" - - diff --git a/modules/Loading/Loading.R b/modules/Loading/Loading.R index 53d41cc24efa32c4f4d7247aca245e8eb5888676..a08935e7210b0fec82fff59766626c9b3ca82e0e 100644 --- a/modules/Loading/Loading.R +++ b/modules/Loading/Loading.R @@ -19,7 +19,6 @@ load_datasets <- function(recipe) { lons.max <- recipe$Analysis$Region$lonmax ref.name <- recipe$Analysis$Datasets$Reference$name exp.name <- recipe$Analysis$Datasets$System$name - variable <- recipe$Analysis$Variables$name store.freq <- recipe$Analysis$Variables$freq @@ -55,7 +54,7 @@ load_datasets <- function(recipe) { reference_descrip <- archive$Reference[[ref.name]] freq.obs <- unlist(reference_descrip[[store.freq]][variable]) obs.dir <- reference_descrip$src - fcst.dir <- exp_descrip$src + fcst.dir <- exp_descrip$src hcst.dir <- exp_descrip$src fcst.nmember <- exp_descrip$nmember$fcst hcst.nmember <- exp_descrip$nmember$hcst diff --git a/modules/Loading/testing_recipes/recipe_seasonal-tests.yml b/modules/Loading/testing_recipes/recipe_seasonal-tests.yml index 4e8128e74342358c40e0bac5dd44f3e27c05a7e8..cda98c913123a5ec1f9f194c21e26f2d3dcddea4 100644 --- a/modules/Loading/testing_recipes/recipe_seasonal-tests.yml +++ b/modules/Loading/testing_recipes/recipe_seasonal-tests.yml @@ -8,17 +8,17 @@ Analysis: freq: monthly_mean Datasets: System: - name: system21_m1 + name: ECMWF-SEAS5.1 Multimodel: False Reference: - name: era5 + name: ERA5 Time: - sdate: '1101' + sdate: '0101' fcst_year: hcst_start: '2000' hcst_end: '2015' ftime_min: 1 - ftime_max: 6 + ftime_max: 2 Region: latmin: 30 latmax: 50 diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-rsds.yml b/modules/Loading/testing_recipes/recipe_system5c3s-rsds.yml index 94fc716cfcb32db9b361266fd8fc1724cad04aee..0cb2d29f1880041fc90e732a9b7e9cd3960cdfc6 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-rsds.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-rsds.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system5c3s + name: ECMWF-SEAS5 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: '2020' diff --git a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml index 3a2bc72e7f022fbbfd792e6fbac5dae6838780db..31ae079d2dfe76c600ecef3083db5943e5f2ae20 100644 --- a/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system5c3s-tas.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system5c3s + name: ECMWF-SEAS5 Multimodel: no Reference: - name: era5 + name: ERA5 Time: sdate: '0601' fcst_year: '2020' diff --git a/modules/Loading/testing_recipes/recipe_system7c3s-prlr.yml b/modules/Loading/testing_recipes/recipe_system7c3s-prlr.yml index 23b630b5b0194f280dfc3ce857ab52ea818d7ecf..58030bf3b0697a177d901bbb3b2cbbca0411c779 100644 --- a/modules/Loading/testing_recipes/recipe_system7c3s-prlr.yml +++ b/modules/Loading/testing_recipes/recipe_system7c3s-prlr.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system7c3s + name: Meteo-France-System7 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: '2020' diff --git a/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml b/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml index df82c349eab2eb46f785ce5cdc0b0b46d4ed2601..c8d3b5e891de09b5cc1236e1b9c85297fc27f1e3 100644 --- a/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml +++ b/modules/Loading/testing_recipes/recipe_system7c3s-tas.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system7c3s + name: Meteo-France-System7 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: '2020' diff --git a/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-reference.yml b/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-reference.yml index 364d3dd60c6386eadb578fb383fb72c35e0c6ae7..b14c90e13ffd42534689ec0f1c4a179321e23cca 100644 --- a/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-reference.yml +++ b/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-reference.yml @@ -9,10 +9,10 @@ Analysis: freq: daily_mean # Mandatory, str: either monthly_mean or daily_mean Datasets: System: - name: system5c3s # Mandatory, str: System codename. See docu. + name: ECMWF-SEAS5 # Mandatory, str: System codename. See docu. Multimodel: no # Mandatory, bool: Either yes/true or no/false Reference: - name: era5 # Mandatory, str: Reference codename. See docu. + name: ERA5 # Mandatory, str: Reference codename. See docu. Time: sdate: '1101' fcst_year: '2020' # Optional, int: Forecast year 'YYYY' diff --git a/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-system.yml b/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-system.yml index 244a5654979ed02cf7cecd1ae462e264d6aeec32..5c899f97273cf183518ee7ebb560ced275e2dc0a 100644 --- a/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-system.yml +++ b/modules/Loading/testing_recipes/recipe_tas-daily-regrid-to-system.yml @@ -8,10 +8,10 @@ Analysis: freq: daily_mean Datasets: System: - name: system5c3s + name: ECMWF-SEAS5 Multimodel: no Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: '2020' diff --git a/modules/Loading/testing_recipes/recipe_test-new-metrics.yml b/modules/Loading/testing_recipes/recipe_test-new-metrics.yml index df84138d71bcd3d9e660b85b2d3fb4b4d13c8080..b5745292ace8c45258c4e975bc375385005f1fc1 100644 --- a/modules/Loading/testing_recipes/recipe_test-new-metrics.yml +++ b/modules/Loading/testing_recipes/recipe_test-new-metrics.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system7c3s + name: Meteo-France-System7 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: '2020' diff --git a/modules/Loading/testing_recipes/recipe_test_anomalies.yml b/modules/Loading/testing_recipes/recipe_test_anomalies.yml index cdf5e3ca885bff21d13e9cdeeed18618b48582af..287f9a98f38786bcc4db37a21eff196d23f7837c 100644 --- a/modules/Loading/testing_recipes/recipe_test_anomalies.yml +++ b/modules/Loading/testing_recipes/recipe_test_anomalies.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system5c3s + name: ECMWF-SEAS5 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: '2020' diff --git a/modules/Loading/testing_recipes/recipe_testing_nadia.yml b/modules/Loading/testing_recipes/recipe_testing_nadia.yml index 6071198148b887a99598a265b9ddd62b2f007565..e6b2bc02e6a511b114977c7238397d89a7ce5558 100644 --- a/modules/Loading/testing_recipes/recipe_testing_nadia.yml +++ b/modules/Loading/testing_recipes/recipe_testing_nadia.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system5c3s + name: ECMWF-SEAS5 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: diff --git a/modules/Saving/paths2save.R b/modules/Saving/paths2save.R index 5cb3326f47b6ed0eb37b8f8c84c980e09f4ffa49..93196b86d194fa2dbed8913d6c675f84d038ec9b 100644 --- a/modules/Saving/paths2save.R +++ b/modules/Saving/paths2save.R @@ -19,12 +19,13 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { "country" = {gg <- "-country"}, "global" = {gg <- ""}) + system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) + reference <- gsub('.','', recipe$Analysis$Datasets$Reference$name, fixed = T) + if (tolower(recipe$Analysis$Output_format) == 'scorecards') { # Define output dir name accordint to Scorecards format dict <- read_yaml("conf/output_dictionaries/scorecards.yml") # Get necessary names - system <- dict$System[[recipe$Analysis$Datasets$System$name]]$short_name - reference <- dict$Reference[[recipe$Analysis$Datasets$Reference$name]]$short_name hcst_start <- recipe$Analysis$Time$hcst_start hcst_end <- recipe$Analysis$Time$hcst_end @@ -51,9 +52,7 @@ get_filename <- function(dir, recipe, var, date, agg, file.type) { "probs" = {file <- paste0(var, gg, "-probs_", date)}, "bias" = {file <- paste0(var, gg, "-bias_", date)}) } - return(paste0(dir, file, ".nc")) - } get_dir <- function(recipe, agg = "global") { @@ -62,20 +61,18 @@ get_dir <- function(recipe, agg = "global") { # startdate, and aggregation. ## TODO: Get aggregation from recipe - outdir <- paste0(recipe$Run$output_dir, "/outputs/") ## TODO: multivar case variable <- recipe$Analysis$Variables$name + system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) if (tolower(recipe$Analysis$Output_format) == 'scorecards') { # Define output dir name accordint to Scorecards format dict <- read_yaml("conf/output_dictionaries/scorecards.yml") - system <- dict$System[[recipe$Analysis$Datasets$System$name]]$short_name + # system <- dict$System[[recipe$Analysis$Datasets$System$name]]$short_name dir <- paste0(outdir, "/", system, "/", variable, "/") - } else { # Default generic output format based on FOCUS - system <- gsub('.','', recipe$Analysis$Datasets$System$name, fixed = T) # Get startdate or hindcast period if (!is.null(recipe$Analysis$Time$fcst_year)) { if (tolower(recipe$Analysis$Horizon) == 'decadal') { diff --git a/recipes/recipe_splitting_example.yml b/recipes/recipe_splitting_example.yml index e62611ab592a10dcadd1ef3d7660b567e7ae485f..78a4d18c566bd492ba66f483ae1e80f96b0db1ec 100644 --- a/recipes/recipe_splitting_example.yml +++ b/recipes/recipe_splitting_example.yml @@ -17,11 +17,11 @@ Analysis: - {name: prlr, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - - {name: system7c3s} - - {name: system5c3s} + - {name: Meteo-France-System7} + - {name: ECMWF-SEAS5} Multimodel: False # single option Reference: - - {name: era5} # multiple references for single model? + - {name: ERA5} # multiple references for single model? Time: sdate: # list, split - '1101' diff --git a/recipes/seasonal_oper.yml b/recipes/seasonal_oper.yml index 5e5f61fcdd2249bf0f97c4932439994547bda7cd..a1351e37306778ffaf9ae8867de84b9daf6ec38b 100644 --- a/recipes/seasonal_oper.yml +++ b/recipes/seasonal_oper.yml @@ -26,10 +26,10 @@ Analysis: - None Datasets: System: - - name: system5c3s # list of strs + - name: ECMWF-SEAS5 # list of strs Multimodel: False # boolean, if true system above are aggregated into single multi-model Reference: # single dict? in the future multiple ref can be an asset - - {name: era5} # str + - {name: ERA5} # str Time: sdate: fcst_syear: ["2017"] # list of ints or None (case where only hcst is verfied) diff --git a/recipes/tests/recipe_seasonal_two-variables.yml b/recipes/tests/recipe_seasonal_two-variables.yml index 89406ecef1250ea6d5835a44c3b053a1b8f51a01..0cef06b312dde288b04512b00e93f4a09724a8c9 100644 --- a/recipes/tests/recipe_seasonal_two-variables.yml +++ b/recipes/tests/recipe_seasonal_two-variables.yml @@ -17,10 +17,10 @@ Analysis: - {name: prlr, freq: monthly_mean} Datasets: System: # multiple systems for single model, split if Multimodel = F - - {name: system5c3s} + - {name: ECMWF-SEAS5} Multimodel: False # single option Reference: - - {name: era5} # multiple references for single model? + - {name: ERA55} # multiple references for single model? Time: sdate: # list, split - '0101' diff --git a/tests/recipes/recipe-seasonal_daily_1.yml b/tests/recipes/recipe-seasonal_daily_1.yml index 52c7c0b85dcf62ee92a5bd51fc069f8c8f33145c..afa0f4966bf6b242e40f1179f79882fbc60c1022 100644 --- a/tests/recipes/recipe-seasonal_daily_1.yml +++ b/tests/recipes/recipe-seasonal_daily_1.yml @@ -8,10 +8,10 @@ Analysis: freq: daily_mean Datasets: System: - name: system5c3s + name: ECMWF-SEAS5 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1201' fcst_year: diff --git a/tests/recipes/recipe-seasonal_monthly_1.yml b/tests/recipes/recipe-seasonal_monthly_1.yml index 003313325643ea7996136693c2288578b2144932..68c58f83603baf157662d5c44f885a814cb914ec 100644 --- a/tests/recipes/recipe-seasonal_monthly_1.yml +++ b/tests/recipes/recipe-seasonal_monthly_1.yml @@ -8,10 +8,10 @@ Analysis: freq: monthly_mean Datasets: System: - name: system7c3s + name: Meteo-France-System7 Multimodel: False Reference: - name: era5 + name: ERA5 Time: sdate: '1101' fcst_year: '2020' diff --git a/tools/check_recipe.R b/tools/check_recipe.R index 0f268733ea71573a6e52be5fccebd9ce35004510..559d049226fbd0902376fe85538fa032e01796e1 100644 --- a/tools/check_recipe.R +++ b/tools/check_recipe.R @@ -43,6 +43,7 @@ check_recipe <- function(recipe) { } # Check time settings if (tolower(recipe$Analysis$Horizon) == "seasonal") { + ## TODO: Specify filesystem archive <- read_yaml(ARCHIVE_SEASONAL)$archive if (!all(TIME_SETTINGS_SEASONAL %in% names(recipe$Analysis$Time))) { error(recipe$Run$logger,