From bdd08a8563e92dfe7893d3d82076a5e1d9043a84 Mon Sep 17 00:00:00 2001 From: Gildas Cambon <gildas.cambon@ird.fr> Date: Fri, 5 Apr 2024 23:09:06 +0200 Subject: [PATCH] Squashed commit of the following: commit 0f718ee9950256e3496583a2247e9e4c057c53e0 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Fri Apr 5 17:22:53 2024 +0200 Update the CHANGELOG.md for croco_tools commit f3fa5a22870dc9d63024a7af2c8d993b78adf078 Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Apr 4 19:59:02 2024 +0200 cosmetics for CHANGELOG.md commit 7f6b1cca5ff2d7d2594a5a22806d21d9a3f5764a Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Apr 4 19:49:24 2024 +0200 Add CHANGELOG file for release / No more hindcast runs / No more quick forecast plot commit b7e5f15a0fb3daaa68886985d6bf42adbc581e67 Author: gmorvan <guillaume.morvan@ird.fr> Date: Wed Apr 3 07:51:45 2024 +0200 Fix forecast plots in case of onerun=0 commit ad08ec1e78a990d5cb7abc96051c4213c265fcf1 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Tue Apr 2 18:33:03 2024 +0200 Some correction in cse of iteration of hindcast Some correction for plotting commit caabe214282b58dfd2872c36ef32f263ba14f85e Author: gmorvan <guillaume.morvan@ird.fr> Date: Tue Apr 2 18:41:32 2024 +0200 Modif of Copernicus Documentation commit fe38bfb55b7d313562ffe9ab05082b8e95f70527 Author: gmorvan <guillaume.morvan@ird.fr> Date: Fri Mar 29 20:07:51 2024 +0100 Fix to load export_fig commit 0c93881ef50a25c1ffc430575a57278798cd9b47 Merge: 44a1f9f9 90f28f25 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Fri Mar 29 15:53:46 2024 +0100 Merge branch 'hotfix_dev_newcopernicus' into dev_newcopernicus commit 90f28f2562915abe31737d2537cc9a6391766b75 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Fri Mar 29 15:46:42 2024 +0100 Some cleaning and update on plotting scripts commit 4742b2c20ce4bc3d1fc64f1d75dd124a71ccb337 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Fri Mar 29 13:54:37 2024 +0100 Squashed commit of the following: commit 44a1f9f9a39ee7737a3f4a1450e1fe4880cbc2e8 Author: gmorvan <guillaume.morvan@ird.fr> Date: Fri Mar 29 12:27:04 2024 +0100 Tipos / plot forecast fix commit 44a1f9f9a39ee7737a3f4a1450e1fe4880cbc2e8 Author: gmorvan <guillaume.morvan@ird.fr> Date: Fri Mar 29 12:27:04 2024 +0100 Tipos / plot forecast fix commit 37761ede3ed5ba71b2f1f49cb22844b99c27cb11 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Fri Mar 29 12:19:11 2024 +0100 Small update commit 6c1d09a9b45ab04a1ca4ca8d1d76859382c47516 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Thu Mar 28 19:19:11 2024 +0100 Some update and typos commit e15ef6bb009114a2c09bdf96a65785efe9bafde2 Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Mar 28 18:06:20 2024 +0100 Update crocotools_param commit 928c1fa11e6947ae6728d493009e76a72cc8258e Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Mar 28 17:26:05 2024 +0100 Modif Doc Copernicus commit 9d39da47ea0c1d7ba74933be9af421d92d05c59b Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Mar 28 17:22:51 2024 +0100 Tipos / modif depth forecast for mercator commit 64332e4f15eafaa1b0ee65501bdf5b13b93186d2 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Wed Mar 27 18:07:49 2024 +0100 Remove IFS forecast for now... commit 8c0c9a68ffcc4c1aef4dba1516e2597a3db909a8 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Wed Mar 27 17:58:20 2024 +0100 Add ERA5_parallel_request.py: Parallelization of the ERA5 request to speed-up the process commit 814582374cfd153e50dc6ccc894ea23eb0df3839 Author: gmorvan <guillaume.morvan@ird.fr> Date: Mon Mar 25 12:15:15 2024 +0100 Cleaning forecast scripts (mercator/GFS) / IFS forecast now available (transfer by wget/ conversion to nc by cdo) with make_IFS.m commit 26798499f6e724a1dfce58d7c2cc6ef6b81356a8 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Tue Mar 19 17:53:18 2024 +0100 Squashed commit of the following: commit a861c34ba628960b28e3a1abf6b85de0490a0348 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Tue Mar 19 17:11:51 2024 +0100 Refactorisation : use of write_mercator_multi.m instead of write_mercator_frcst.m commit 747149f7e7d7b5e4bd915131ea68befede046f0d Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Tue Mar 19 15:18:50 2024 +0100 Cleaning commit 0dc67715d969213a2de3e622a58bdc896bf51337 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Tue Mar 19 14:29:18 2024 +0100 Update in download_mercator_frcst_python commit f5c9aaddbe16247974cfb86e6e77f6b157da8e6f Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Mon Mar 18 14:33:52 2024 +0100 Cleaning in make_OGCM_frcst - Rename make_OGCM_frcst.m in make_OGCM_mercator_frcst.m - some simplifications commit 90a6ebc1eed360a8bfc2a6c113d5cf7b875d0c75 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Mon Mar 18 14:20:30 2024 +0100 Remove ECCO product from Forecast_tools commit 5040ce6c0d8704afbd0121f9efd8e56cf234dee2 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Mon Mar 18 14:17:33 2024 +0100 Remove original file "raw_mercator_name" after download commit a1fae6b97390dcb8d50e16748e6e7a5e69313eed Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Mon Mar 18 14:11:52 2024 +0100 Remove downloading of taux/tauy in extract_SODA commit 76fc422ba040321ff42400ddcfe12fc58197f9eb Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Mon Mar 18 14:04:31 2024 +0100 In Preprocessing_tools, during geostrophic calculation, add the Ekman transport only of forcing file (containing wind strss) exists commit 37e88f210a8ab69f35404957cd2fb3f6cac019ce Author: gmorvan <guillaume.morvan@ird.fr> Date: Mon Mar 18 19:42:07 2024 +0100 Add WKB based on ERA5 waves - Time management on Forecast tools - Scripts for forecasts - script for download Glorys - Cleaning commit 9816b9c63463db135e5fe02527749c2d2e539264 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Thu Mar 14 16:12:25 2024 +0100 Cleaning in interanual oceanic reanalysis preprocessing - remove ECCO reference - remove duplicated routines commit dd582f17d02593f4bfabaf8215612c519ae8bc5d Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Thu Mar 14 15:37:47 2024 +0100 Remove wrong check for lonp_parent fixe issues #15 commit b2b67bf3231209ee98a77839b0c94712606ea023 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Thu Mar 14 15:25:55 2024 +0100 Update in variable name for vertical coodinate : sc_r, sc_w, Cs_r and Cs_rho are changed to s_rho, s_w, Cs_rho and Cs_w to be consistent with croco outputs. It should not have side effect. Change are in Preprocessing_tools/ and Nesting_tools/ commit 6762c94b96c03941bb4f346dfa6bc69066982b23 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Thu Mar 14 11:36:05 2024 +0100 Still some typos commit 5e5161fb3c90b54a484b0e2a53ffee78a7745827 Author: gmorvan <guillaume.morvan@ird.fr> Date: Tue Mar 12 13:22:54 2024 +0100 Clean and tipos commit 9be27745408c68b9818f4099847bee4725472b58 Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Mar 7 18:40:56 2024 +0100 Fix for ERA5 waves preprocessing commit 79ed182eeefe9d4612232f0125839cacedb3afe3 Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Mar 7 18:30:17 2024 +0100 Add some tipos, client installation instructions commit 00fb04ac20748ba2fe851d42ee6921f00f47964b Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Mar 7 13:48:37 2024 +0100 Add environment file for CMT installation commit e5d121cc3a170f8838a68ca47224e42611d2d75a Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Mar 7 13:40:10 2024 +0100 Cleaning Forecasts_tools with mercator products / typos commit 28d928a9360af12f7776a77679dbee62993dbbfa Author: gmorvan <guillaume.morvan@ird.fr> Date: Thu Feb 29 09:48:40 2024 +0100 Set of changes to deal with copernicus marine client / clean Forecasts_tools / typos commit b3be7236942de70a4f4420617f0941ccb26d3ac6 Author: Gildas Cambon <gildas.cambon@ird.fr> Date: Fri Feb 23 17:57:53 2024 +0100 First commits for the dev_newcopernicus branch --- Aforc_ERA5/ERA5_parallel_request.py | 211 ++++ Aforc_ERA5/era5_crocotools_param.py | 1 - Aforc_ERA5/era5_crocotools_param_my.py | 86 ++ Aforc_ERA5/interp_ERA5.m | 4 +- Aforc_ERA5/make_ERA5.m | 25 +- Aforc_ERA5/make_bry_wkb_ERA5.m | 190 ++++ CHANGELOG.md | 42 +- Coupling_tools/CROCO/prepro_soda.m | 2 +- .../copernicusmarine_env.yml | 8 + Forecast_tools/ForecastCharts.pdf | Bin 415044 -> 0 bytes Forecast_tools/download_ECCO_frcst.m | 173 ---- Forecast_tools/download_GFS.m | 6 +- Forecast_tools/download_mercator_frcst.m | 187 ---- .../download_mercator_frcst_python.m | 159 ++- Forecast_tools/extract_ECCO_frcst.m | 115 --- Forecast_tools/extract_mercator_frcst.m | 116 --- Forecast_tools/get_GFS.m | 27 +- Forecast_tools/iteration.m | 26 - Forecast_tools/make_GFS.m | 24 +- ...GCM_frcst.m => make_OGCM_mercator_frcst.m} | 178 ++-- Forecast_tools/make_forecast.m | 176 ++-- Forecast_tools/motuclient-python/LICENSE | 165 ---- Forecast_tools/motuclient-python/MANIFEST.in | 8 - Forecast_tools/motuclient-python/README.md | 334 ------- .../motuclient-python/motu-client.py | 28 - .../motuclient-python/motu_utils/__init__.py | 0 .../motuclient-python/motu_utils/cfg/log.ini | 24 - .../motu_utils/cfg/messages.properties | 17 - .../motuclient-python/motu_utils/motu_api.py | 652 ------------- .../motu_utils/pom_version.py | 25 - .../motu_utils/stop_watch.py | 107 --- .../motuclient-python/motu_utils/utils_cas.py | 152 --- .../motu_utils/utils_collection.py | 110 --- .../motu_utils/utils_configpath.py | 20 - .../motu_utils/utils_html.py | 48 - .../motu_utils/utils_http.py | 181 ---- .../motuclient-python/motu_utils/utils_log.py | 94 -- .../motu_utils/utils_messages.py | 74 -- .../motu_utils/utils_stream.py | 66 -- .../motu_utils/utils_unit.py | 47 - .../motuclient-python/motuclient.py | 329 ------- Forecast_tools/motuclient-python/pom.xml | 83 -- Forecast_tools/motuclient-python/setup.cfg | 2 - Forecast_tools/motuclient-python/setup.py | 61 -- Forecast_tools/plot_forecast_croco.m | 904 +++++++++--------- Forecast_tools/plot_quick_forecast.m | 334 ------- Nesting_tools/create_nestedclim.m | 44 +- Nesting_tools/create_nestedinitial.m | 44 +- Nesting_tools/create_nestedrestart.m | 6 +- Nesting_tools/nested_grid.m | 2 - .../Copernicus_Marine_Toolbox_installation.md | 74 ++ Oforc_OGCM/README | 24 - Oforc_OGCM/README.md | 20 + Oforc_OGCM/README.md.bck | 20 + Oforc_OGCM/create_OGCM.m | 16 + Oforc_OGCM/create_SODA.m | 199 ---- Oforc_OGCM/download_ECCO.m | 102 -- Oforc_OGCM/download_glorys_data.sh | 59 +- Oforc_OGCM/download_mercator_python.m | 94 +- Oforc_OGCM/extract_ECCO.m | 172 ---- Oforc_OGCM/extract_SODA.m | 65 +- Oforc_OGCM/extract_mercator.m | 212 ---- Oforc_OGCM/get_ECCO_subgrid.m | 138 --- Oforc_OGCM/get_file_python_mercator.m | 140 +-- Oforc_OGCM/get_filename_ECCO.m | 24 - Oforc_OGCM/{make_OGCM.m => make_OGCM_SODA.m} | 34 +- Oforc_OGCM/make_OGCM_mercator.m | 27 +- Oforc_OGCM/prepro_soda.m | 2 +- Oforc_OGCM/write_mercator.m | 21 +- .../write_mercator_multi.m | 90 +- Preprocessing_tools/create_bryfile.m | 76 +- Preprocessing_tools/create_climfile.m | 88 +- Preprocessing_tools/create_inifile.m | 34 +- Preprocessing_tools/geost_currents.m | 4 +- Preprocessing_tools/geost_currents_bry.m | 4 +- Preprocessing_tools/make_config.m | 2 +- UTILITIES/export_fig/.ignore/ghostscript.txt | 1 + UTILITIES/export_fig/.ignore/gs_font_path.txt | 1 + crocotools_param.m | 157 +-- start.m | 1 + 80 files changed, 1917 insertions(+), 5701 deletions(-) create mode 100644 Aforc_ERA5/ERA5_parallel_request.py create mode 100644 Aforc_ERA5/era5_crocotools_param_my.py create mode 100644 Aforc_ERA5/make_bry_wkb_ERA5.m create mode 100644 Forecast_tools/CopernicusMarineToolbox/copernicusmarine_env.yml delete mode 100644 Forecast_tools/ForecastCharts.pdf delete mode 100644 Forecast_tools/download_ECCO_frcst.m delete mode 100644 Forecast_tools/download_mercator_frcst.m delete mode 100644 Forecast_tools/extract_ECCO_frcst.m delete mode 100644 Forecast_tools/extract_mercator_frcst.m delete mode 100644 Forecast_tools/iteration.m rename Forecast_tools/{make_OGCM_frcst.m => make_OGCM_mercator_frcst.m} (57%) delete mode 100755 Forecast_tools/motuclient-python/LICENSE delete mode 100755 Forecast_tools/motuclient-python/MANIFEST.in delete mode 100755 Forecast_tools/motuclient-python/README.md delete mode 100755 Forecast_tools/motuclient-python/motu-client.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/__init__.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/cfg/log.ini delete mode 100755 Forecast_tools/motuclient-python/motu_utils/cfg/messages.properties delete mode 100755 Forecast_tools/motuclient-python/motu_utils/motu_api.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/pom_version.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/stop_watch.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_cas.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_collection.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_configpath.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_html.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_http.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_log.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_messages.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_stream.py delete mode 100755 Forecast_tools/motuclient-python/motu_utils/utils_unit.py delete mode 100755 Forecast_tools/motuclient-python/motuclient.py delete mode 100755 Forecast_tools/motuclient-python/pom.xml delete mode 100755 Forecast_tools/motuclient-python/setup.cfg delete mode 100755 Forecast_tools/motuclient-python/setup.py delete mode 100644 Forecast_tools/plot_quick_forecast.m create mode 100644 Oforc_OGCM/Copernicus_Marine_Toolbox_installation.md delete mode 100644 Oforc_OGCM/README create mode 100644 Oforc_OGCM/README.md create mode 100644 Oforc_OGCM/README.md.bck delete mode 100644 Oforc_OGCM/create_SODA.m delete mode 100644 Oforc_OGCM/download_ECCO.m delete mode 100644 Oforc_OGCM/extract_ECCO.m delete mode 100644 Oforc_OGCM/extract_mercator.m delete mode 100644 Oforc_OGCM/get_ECCO_subgrid.m delete mode 100644 Oforc_OGCM/get_filename_ECCO.m rename Oforc_OGCM/{make_OGCM.m => make_OGCM_SODA.m} (93%) rename Forecast_tools/write_mercator_frcst.m => Oforc_OGCM/write_mercator_multi.m (65%) create mode 100644 UTILITIES/export_fig/.ignore/ghostscript.txt create mode 100644 UTILITIES/export_fig/.ignore/gs_font_path.txt diff --git a/Aforc_ERA5/ERA5_parallel_request.py b/Aforc_ERA5/ERA5_parallel_request.py new file mode 100644 index 00000000..62072a92 --- /dev/null +++ b/Aforc_ERA5/ERA5_parallel_request.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python + +# Script to download ECMWF ERA5 reanalysis datasets from the Climate Data +# Store (CDS) of Copernicus https://cds.climate.copernicus.eu +# +# This script use the CDS Phyton API[*] to connect and download specific ERA5 +# variables, for a chosen area and monthly date interval, required by CROCO to +# perform simulations with atmospheric forcing. Furthermore, this script use +# ERA5 parameter names and not parameter IDs as these did not result in stable +# downloads. +# +# Tested using Python 3.8.6 and Python 3.9.1. This script need the following +# python libraries pre-installed: "calendar", "datetime", "json" and "os". +# +# [*] https://cds.climate.copernicus.eu/api-how-to +# +# Copyright (c) DDONOSO February 2021 +# e-mail:ddonoso@dgeo.udec.cl +# + +# You may see all available ERA5 variables at the following website +# https://confluence.ecmwf.int/display/CKB/ERA5%3A+data+documentation#ERA5:datadocumentation-Parameterlistings + +# ------------------------------------------------- +# Getting libraries and utilities +# ------------------------------------------------- +import cdsapi +from ERA5_utilities import * +import calendar +import datetime +import json +import os +from multiprocessing import Pool + +# Importing addmonths4date function from ERA5_utilities +from ERA5_utilities import addmonths4date + +# Function to download data for a single variable +def download_data(variable, options, product, output): + c = cdsapi.Client() + c.retrieve(product, options, output) + +# Main function to process tasks in parallel +def process_parallel(tasks): + with Pool() as pool: + pool.starmap(download_data, tasks) + + +# ------------------------------------------------- +# Import my crocotools_param_python file +from era5_crocotools_param import * +print('year_start is '+str(year_start)) + +# ------------------------------------------------- +dl=2 +if ownArea == 0: + lines = [line.rstrip('\n') for line in open(paramFile)] + for line in lines: + if "lonmin" in line: + iStart=line.find('=')+1 + iEnd=line.find(';') + lonmin = line[iStart:iEnd] + elif "lonmax" in line: + iStart=line.find('=')+1 + iEnd=line.find(';') + lonmax = line[iStart:iEnd] + elif "latmin" in line: + iStart=line.find('=')+1 + iEnd=line.find(';') + latmin = line[iStart:iEnd] + elif "latmax" in line: + iStart=line.find('=')+1 + iEnd=line.find(';') + latmax = line[iStart:iEnd] + +lonmin = str(float(lonmin)-dl) +lonmax = str(float(lonmax)+dl) +latmin = str(float(latmin)-dl) +latmax = str(float(latmax)+dl) +print ('lonmin-dl = ', lonmin) +print ('lonmax+dl =', lonmax) +print ('latmin-dl =', latmin) +print ('latmax+dl =', latmax) +# ------------------------------------------------- + +area = [latmax, lonmin, latmin, lonmax] + +# ------------------------------------------------- +# Setting raw output directory +# ------------------------------------------------- +# Get the current directory +os.makedirs(era5_dir_raw,exist_ok=True) + + +# ------------------------------------------------- +# Loading ERA5 variables's information as +# python Dictionary from JSON file +# ------------------------------------------------- +with open('ERA5_variables.json', 'r') as jf: + era5 = json.load(jf) + + +# ------------------------------------------------- +# Downloading ERA5 datasets +# ------------------------------------------------- +# Monthly dates limits +monthly_date_start = datetime.datetime(year_start,month_start,1) +monthly_date_end = datetime.datetime(year_end,month_end,1) + +# Length of monthly dates loop +len_monthly_dates = (monthly_date_end.year - monthly_date_start.year) * 12 + \ + (monthly_date_end.month - monthly_date_start.month) + 1 + +# Initial monthly date +monthly_date = monthly_date_start + +# Construct tasks for parallel processing +tasks = [] + +# Monthly dates loop +for j in range(len_monthly_dates): + + # Year and month + year = monthly_date.year + month = monthly_date.month + + # Number of days in month + days_in_month = calendar.monthrange(year,month)[1] + + # Date limits + date_start = datetime.datetime(year,month,1) + date_end = datetime.datetime(year,month,days_in_month) + + # Ordinal date limits (days) + n_start = datetime.date.toordinal(date_start) + n_end = datetime.date.toordinal(date_end) + + # Overlapping date string limits (yyyy-mm-dd) + datestr_start_overlap = datetime.date.fromordinal(n_start - n_overlap).strftime('%Y-%m-%d') + datestr_end_overlap = datetime.date.fromordinal(n_end + n_overlap).strftime('%Y-%m-%d') + + # Overlapping date string interval + vdate = datestr_start_overlap + '/' + datestr_end_overlap + + # Variables/Parameters loop + for k in range(len(variables)): + + # Variable's name, long-name and level-type + vname = variables[k] + vlong = era5[vname][0] + vlevt = era5[vname][3] + + # Request options + options = { + 'product_type': 'reanalysis', + 'type': 'an', + 'date': vdate, + 'variable': vlong, + 'levtype': vlevt, + 'area': area, + 'format': 'netcdf', + } + + if vlong == 'sea_surface_temperature': + options['time'] = '00' + elif vlong == 'land_sea_mask': + options['time'] = '00:00' + else: + options['time'] = time + + if vlong == 'specific_humidity' or vlong == 'relative_humidity': + options['pressure_level'] = '1000' + product = 'reanalysis-era5-pressure-levels' + else: + product = 'reanalysis-era5-single-levels' + + # Output filename + fname = 'ERA5_ecmwf_' + vname.upper() + '_Y' + str(year) + 'M' + str(month).zfill(2) + '.nc' + output = era5_dir_raw + '/' + fname + + # Information strings + info_time_clock = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + info_monthly_date = monthly_date.strftime('%Y-%b') + info_n_overlap = ' with ' + str(n_overlap) + ' overlapping day(s) ' + + # Printing message on screen + print(' ') + print('-----------------------------------------------------------') + print('',info_time_clock,' ') + print(' Performing ERA5 data request, please wait... ') + print(' Date [yyyy-mmm] =',info_monthly_date + info_n_overlap,' ') + print(' Variable =',vlong,' ') + print('-----------------------------------------------------------') + print('Request options: ') + print(options) + + tasks.append((vname, options, product, output)) + + monthly_date = addmonths4date(monthly_date, 1) + +# Process tasks in parallel +process_parallel(tasks) + +# Print output message on screen +print(' ') +print(' ERA5 data request has been done successfully! ') +print(' ') + + + + diff --git a/Aforc_ERA5/era5_crocotools_param.py b/Aforc_ERA5/era5_crocotools_param.py index ddc5c9fe..fd3630ea 100644 --- a/Aforc_ERA5/era5_crocotools_param.py +++ b/Aforc_ERA5/era5_crocotools_param.py @@ -8,7 +8,6 @@ # # General path # -##config_dir = '../croco/Run_TEST/' # must be the same than crocotools_param config_dir = 'path_to_my_run_dir/' # must be the same than crocotools_param config_name = 'Benguela_LR' # diff --git a/Aforc_ERA5/era5_crocotools_param_my.py b/Aforc_ERA5/era5_crocotools_param_my.py new file mode 100644 index 00000000..c2930362 --- /dev/null +++ b/Aforc_ERA5/era5_crocotools_param_my.py @@ -0,0 +1,86 @@ +# +# For ERA5 python crocotools parameters list +# +# CAUTION IT MUST BE CONSISTENT with your MATLAB CROCOTOOLS_PARAM.m file in Run directory +# ******************************************************************************* +# U S E R * O P T I O N S +# ******************************************************************************* +# +# General path +# +config_dir = '/local/tmp/3/gcambon/CONFIGS/RUN_V2.0_cforec_LR_DEV/' # must be the same than crocotools_param +config_name = 'Benguela_LR' +# +# Original ERA5 directory +# +era5_dir_raw = config_dir + 'DATA/ERA5_native_' + config_name +# +# Output ERA5 directory +# +era5_dir_processed = config_dir + 'DATA/ERA5_' + config_name +# +# extraction wave variables +# +wave_extract=False # True to extract wave variables +# +# Dates limits +# +year_start = 2005 +month_start = 1 +year_end = 2005 +month_end = 1 +# +# Year origin of time +# +Yorig=2000 +# +# Overlapping days (at the beginning/end of each month) +# +n_overlap = 0 +# +# Request time (daily hours '00/01/.../23') +# +time = '00/01/02/03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23' +# +# Request variables (see available at ERA5_variables.json) +variables = ['lsm','tp','strd','ssr','t2m','q','u10','v10'] #note lsm is land_sea_mask +# +# Request area ([north, west, south, east]) +# +ownArea = 0 # 0 if area from a crocotools_param.m file + # 1 if own area + +if ownArea == 0: + # To complete if ownArea==0 + paramFile = config_dir + 'crocotools_param.m' # path the crocotools_param file of the simulation + +else: + # To complete if ownArea==1 + lonmin=7 + lonmax=23 + latmin=-45 + latmax=-20 +# +# Variable names and conversion coefficients +# TP: convert from accumlated m in a hour into kg m-2 s-1 +# +cff_tp=1000./3600. # m in 1 hour -> kg m-2 s-1 +# Heat flux J m-2 in one hour into W m-2 +# +cff_heat=1./3600. # J m-2 in 1 hour -> W m-2 +# Names, conversion coefficients and new units +# +variables = ['lsm' , 'sst' , 'tp' ,'strd' ,'ssr' ,'t2m' ,'q' ,'u10' ,'v10' ] +conv_cff = [1. , 1. , cff_tp ,cff_heat ,cff_heat ,1. ,1. ,1. ,1. ] +units = ['(0-1)', 'K' , 'kg m-2 s-1','W m-2' ,'W m-2' ,'K' ,'kg kg-1','m s-1','m s-1'] + +if wave_extract: + ## append waves variables + wave_var=['swh', 'mwd', 'pp1d' ,'cdww'];variables.extend(wave_var) + wave_conv_cff=[1., 1., 1. , 1.]; conv_cff.extend(wave_conv_cff) + wave_units=['m','Degrees true','s', 'dimensionless']; units.extend(wave_units) + + +# ******************************************************************************* +# E N D U S E R * O P T I O N S +# ******************************************************************************* diff --git a/Aforc_ERA5/interp_ERA5.m b/Aforc_ERA5/interp_ERA5.m index 658e243c..ac371d3e 100644 --- a/Aforc_ERA5/interp_ERA5.m +++ b/Aforc_ERA5/interp_ERA5.m @@ -1,5 +1,5 @@ function interp_ERA5(ATMO_dir,Y,M,Roa,interp_method,... - lon1,lat1,lonwave1,latwave1,mask1,maskwave1,tin,... + lon1,lat1,lonwave1,latwave1,mask1,maskwave1,maskwave2,tin,... nc_frc, nc_blk,lon,lat,angle,tout, add_waves) % % Read the local ERA5 files and perform the space interpolations @@ -171,7 +171,7 @@ if add_waves == 1 nc=netcdf([ATMO_dir,vname,'_Y',num2str(Y),'M',num2str(M),'.nc'],'r'); pwave=squeeze(nc{vname}(tin,:,:)); close(nc); - pwave=get_missing_val(lonwave1,latwave1,maskwave1.*pwave,nan,Roa,nan); + pwave=get_missing_val(lonwave1,latwave1,maskwave2.*pwave,nan,Roa,nan); pwave=interp2(lonwave1,latwave1,pwave,lon,lat,interp_method); end % diff --git a/Aforc_ERA5/make_ERA5.m b/Aforc_ERA5/make_ERA5.m index 1f3587eb..23f548d1 100644 --- a/Aforc_ERA5/make_ERA5.m +++ b/Aforc_ERA5/make_ERA5.m @@ -98,10 +98,21 @@ if add_waves == 1 maskwave(maskwave ~= missvalue_wave ) = 1; maskwave(maskwave == missvalue_wave ) = NaN ; close(nc); + + % fix: PP1D doesn t have the same mask than SWH + filein2=[ERA5_dir,'PP1D_Y',num2str(Ymin),'M',num2str(Mmin),'.nc']; + nc=netcdf(filein2); + maskwave2=squeeze(nc{'PP1D'}(1,:,:)); + missvalue_wave2 = ncreadatt(filein2,'PP1D','missing_value'); + maskwave2(maskwave2 ~= missvalue_wave2 ) = 1; + maskwave2(maskwave2 == missvalue_wave2 ) = NaN ; + close(nc); + % else lon1wave = NaN; lat1wave = NaN; maskwave = NaN; + maskwave2 = NaN; end @@ -191,10 +202,10 @@ for Y=Ymin:Ymax % % % % Add the waves % % - if makefrc==1 && add_waves==1 - disp(['Add waves data']) - disp(['==============']) - end + if makefrc==1 && add_waves==1 + disp(['Add waves data']) + disp(['==============']) + end % % % % % % Add the tides @@ -266,7 +277,7 @@ for Y=Ymin:Ymax aa0=tndx-(itolap-aa); end interp_ERA5(ERA5_dir,Ym,Mm,Roa,interp_method,lon1,lat1,lon1wave,lat1wave, ... - mask,maskwave,aa0,nc_frc,nc_blk,lon,lat,angle,aa,add_waves) + mask,maskwave,maskwave2,aa0,nc_frc,nc_blk,lon,lat,angle,aa,add_waves) end %###################################################################### % @@ -284,7 +295,7 @@ for Y=Ymin:Ymax disp(['Step: ',num2str(tndx),' of ',num2str(tlen0)]) end interp_ERA5(ERA5_dir,Y,M,Roa,interp_method,lon1,lat1,lon1wave,lat1wave,... - mask,maskwave,tndx,nc_frc,nc_blk,lon,lat,angle,tndx+itolap,add_waves) + mask,maskwave,maskwave2,tndx,nc_frc,nc_blk,lon,lat,angle,tndx+itolap,add_waves) end disp(' ') @@ -344,7 +355,7 @@ for Y=Ymin:Ymax disp(['tin=',num2str(tin)]) end interp_ERA5(ERA5_dir,Yp,Mp,Roa,interp_method,lon1,lat1,lon1wave,lat1wave,... - mask,maskwave,tin,nc_frc,nc_blk,lon,lat,angle,tout,add_waves) + mask,maskwave,maskwave2,tin,nc_frc,nc_blk,lon,lat,angle,tout,add_waves) end; % % Close the CROCO forcing files diff --git a/Aforc_ERA5/make_bry_wkb_ERA5.m b/Aforc_ERA5/make_bry_wkb_ERA5.m new file mode 100644 index 00000000..b9c163c8 --- /dev/null +++ b/Aforc_ERA5/make_bry_wkb_ERA5.m @@ -0,0 +1,190 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Build a CROCO boundary file +% +% Extrapole and interpole temperature and salinity from a +% climatology to get boundary conditions for +% CROCO (boundary netcdf file) . +% Get the velocities and sea surface elevation via a +% geostrophic computation. +% +% Data input format (netcdf): +% temperature(T, Z, Y, X) +% T : time [Months] +% Z : Depth [m] +% Y : Latitude [degree north] +% X : Longitude [degree east] +% +% Data source : IRI/LDEO climate Data Library (World Ocean Atlas 1998) +% http://ingrid.ldgo.columbia.edu/ +% http://iridl.ldeo.columbia.edu/SOURCES/.NOAA/.NODC/.WOA98/ +% +% Further Information: +% http://www.croco-ocean.org +% +% This file is part of CROCOTOOLS +% +% CROCOTOOLS is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published +% by the Free Software Foundation; either version 2 of the License, +% or (at your option) any later version. +% +% CROCOTOOLS is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 59 Temple Place, Suite 330, Boston, +% MA 02111-1307 USA +% +% Copyright (c) 2005-2006 by Pierrick Penven +% e-mail:Pierrick.Penven@ird.fr +% +% Updated 2016 by Patrick Marchesiello & Rachid Benshila +% for wave forcing +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +clear all +close all +%%%%%%%%%%%%%%%%%%%%% USERS DEFINED VARIABLES %%%%%%%%%%%%%%%%%%%%%%%% +% +% Common parameters +% +crocotools_param +% +%%%%%%%%%%%%%%%%%%% END USERS DEFINED VARIABLES %%%%%%%%%%%%%%%%%%%%%%% +disp(' ') +disp([' Title: ',CROCO_title]) +% +% Read in the grid +% +disp(' ') +disp(' Read in the grid...') +nc=netcdf(grdname); +h=nc{'h'}(:); +lon=nc{'lon_rho'}(:); +lat=nc{'lat_rho'}(:); +angle=nc{'angle'}(:); +mask=nc{'mask_rho'}(:); +Lp=length(nc('xi_rho')); +Mp=length(nc('eta_rho')); +hmax=max(max(nc{'h'}(:))); +result=close(nc); +grid_angle=mean(mean(angle(mask==1))); +[M L]=size(h); +% +% Loop over monthly files +% +for Y=Ymin:Ymax + if Y==Ymin + mo_min=Mmin; + else + mo_min=1; + end + if Y==Ymax + mo_max=Mmax; + else + mo_max=12; + end + for M=mo_min:mo_max +% +% Forcing file name +% + frc_prefix=[frc_prefix,'_ERA5_']; + if level==0 + nc_suffix='.nc'; + else + nc_suffix=['.nc.',num2str(level)]; + end + frcname=[frc_prefix,'Y',num2str(Y),... + 'M',num2str(M),nc_suffix]; +% +% WKB file name +% + wkb_prefix=[wkb_prefix,'_ERA5_']; + brywkbname=[wkb_prefix,'Y',num2str(Y),... + 'M',num2str(M),nc_suffix]; + disp(' ') + disp([' Making file: ',brywkbname]) + disp([' from: ',frcname]) +% +% Read wave fields data +% + nc=netcdf(frcname); + Awave=nc{'Awave'}(:); + Dwave=nc{'Dwave'}(:); + Pwave=nc{'Pwave'}(:); + time =nc{'wwv_time'}(:); + close(nc) + + wkb_time=time; + wkb_cycle=wkb_time(end); +% +% Create the boundary file +% + create_bryfile_wkb(brywkbname,grdname,CROCO_title,wkb_obc,... + wkb_time,wkb_cycle,'clobber'); + disp(' ') +% +% +% Extract boundary data: loop on time and boundaries +% note: in ERA5, meteo convention for wave direction: +% --> zero means "coming from north" and 90 "coming from east" +% + disp(' Extracting and writing file ...') + nc=netcdf(brywkbname,'write'); + g=9.81; + for l=1:length(time) + for obcndx=1:4 + if obcndx==1 + suffix='_south'; % SOUTH + Dstp=squeeze(h(1,:)); + hrm=2*squeeze(Awave(l,1,:)); + cdir=3*pi/2-deg2rad(squeeze(Dwave(l,1,:)))-grid_angle; + cfrq=2*pi./squeeze(Pwave(l,1,:)); + elseif obcndx==2 + suffix='_east'; % EAST + Dstp=squeeze(h(:,L)); + hrm=2*squeeze(Awave(l,:,L)); + cdir=3*pi/2-deg2rad(squeeze(Dwave(l,:,L)))-grid_angle; + cfrq=2*pi./squeeze(Pwave(l,:,L)); + elseif obcndx==3 + suffix='_north'; % NORTH + Dstp=squeeze(h(M,:)); + hrm=2*squeeze(Awave(l,M,:)); + cdir=3*pi/2-deg2rad(squeeze(Dwave(l,M,:)))-grid_angle; + cfrq=2*pi./squeeze(Pwave(l,M,:)); + elseif obcndx==4 + suffix='_west'; % WEST + Dstp=squeeze(h(:,1)); + hrm=2*squeeze(Awave(l,:,1)); + cdir=3*pi/2-deg2rad(squeeze(Dwave(l,:,1)))-grid_angle; + cfrq=2*pi./squeeze(Pwave(l,:,1)); + end + dd = Dstp'; %+Tide(l) + khd = dd.*cfrq.*cfrq./g; + kh = sqrt( khd.*khd + khd./(1.0 + khd.*(0.6666666666 ... + +khd.*(0.3555555555 + khd.*(0.1608465608 ... + +khd.*(0.0632098765 + khd.*(0.0217540484 ... + +khd.*0.0065407983)))))) ); + kw=kh./dd; + cosw=cos(cdir); + sinw=sin(cdir); + wac=0.125*g*(hrm.^2)./cfrq; + wkx=kw.*cosw; + wke=kw.*sinw; + nc{['wac' suffix]}(l,:)=wac; + nc{['wkx' suffix]}(l,:)=wkx; + nc{['wke' suffix]}(l,:)=wke; + end + end + close(nc); + + end % M +end % Y +% +% End +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/CHANGELOG.md b/CHANGELOG.md index c69a0a3a..6c51de36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,44 @@ # Changelog -Release changelog are available here : https://gitlab.inria.fr/croco-ocean/croco_tools/-/releases +Release changelog are available here : https://gitlab.inria.fr/croco-ocean/croco_tools/-/releases -## [Unreleased] +## [Unreleased] - xxxx-xx-xx + +### Added + +- crocotools_param.m: deal with different mercator datasets, see issue [#23](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/23) + - Reanalysis Glorys/Analysis: [ *see make_OGCM_mercator.m* ] + - Forecast/Mediterranean high resolution Forecasts : [ *see make_OGCM_mercator_frcst.m* ] + +- Forecast_tools, see issue [#23](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/23) + - Add pause instance to download GFS datasets to avoid over rate limit violation + - Add dependency on time step to write on template croco_forecast.in (filled within run_croco_forecast.bash) + - Remove hindcast runs (and iterations for nudging OGCM data), keep only one forecast run on hindcast/forecast days. + +- Aforc_ERA5, see issue [#23](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/23) + - Add python request for extraction in parallel mode + - Add boundary creation with WKB model + - Add ERA5 parallel request + +## Fixed + +- NESTGUI : fix in nested_grid, see issue [#15](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/15) + +- RUNOFF : wrong runoff positioning after first guess, fixed see issue [#18](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/18) + +## Changed + +- Preprocessing_tools : Update creation of forcing files for dust and nitrogen deposition in line with the PISCES code. See issue [#19](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/19) + +- Oforc_OGCM : see issue [#23](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/23) + - Add new Copernicus Marine Toolbox to deal with mercator datasets (Please see Copernicus_Marine_Toolbox_installation.md) + - Launch SODA preprocessing with make_OGCM_SODA.m + - Lauch MERCATOR/CMEMS preprocessing with make_OGCM_mercator.m + +## Removed +- No more use of ECCO datasets for oceanic reanalysis, see issue [#23](https://gitlab.inria.fr/croco-ocean/croco_tools/-/issues/23) + +### Deprecated + +### Other diff --git a/Coupling_tools/CROCO/prepro_soda.m b/Coupling_tools/CROCO/prepro_soda.m index 3ba9797b..2bd90cae 100644 --- a/Coupling_tools/CROCO/prepro_soda.m +++ b/Coupling_tools/CROCO/prepro_soda.m @@ -1,4 +1,4 @@ clear all close all start ; -make_OGCM ; +make_OGCM_SODA ; diff --git a/Forecast_tools/CopernicusMarineToolbox/copernicusmarine_env.yml b/Forecast_tools/CopernicusMarineToolbox/copernicusmarine_env.yml new file mode 100644 index 00000000..eebe6b1d --- /dev/null +++ b/Forecast_tools/CopernicusMarineToolbox/copernicusmarine_env.yml @@ -0,0 +1,8 @@ +name: cmt_1.0 +channels: + - conda-forge +dependencies: + - pip + - pip: + - copernicusmarine>=1.0<=2.0 + - python>=3.9,<3.12 \ No newline at end of file diff --git a/Forecast_tools/ForecastCharts.pdf b/Forecast_tools/ForecastCharts.pdf deleted file mode 100644 index cfa209c29ebbae5fd52260dfdaca4d0b13fb33cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415044 zcmeFac|26_+W<_85K>f@7)!EbnHkHF$dV<L>`}5!A-j<+J0%K53sEVGEFq*QMW|4u z63SMx6)HRFJ#)^%%y9gA-uHR_c|X6teLtEx=i0CPy6^kCuKTu4UtL2SEg{Xsu&oIA z!^D6_NugYA9GMst6(x;)-SCoX)&y%O*JG0U*2nOkC=Bq}KvLJ*<(TkM4{;3x5tO7M z!NbdzVB~?v8@Rd>P|`BsD|*%*$F*IKx&mm3|HRv&fY<O!N|O7%2yR{kZ5IOGh2Uv1 zPlfbbNkd6ZBf}#AXDVp;bv0KPI|qV;tBbZB0OoMi0q-H~X`rbJkT<{|bMPd1`0lfI z#tYjM2yP0JlHT6l61J{Rt{xJu9>;)ph>QrUdEl)Ht{w^~EqxU6kDj%Q*HLR*f|m#0 zLqU6w8u*>79o|U+#;lI_BtU%Wd$=BTaKfXo(sD%Ml#~vmB=ztFYdb(Uz?V4aOC|=q ziyf#tqL#>%2r5rf&DG0=fWk=XIM{hwps++Jl(ZD_$6=I`(jqwV$r5nD03Lwsumue8 zo~~XVws=oKff}wZ1mX`g3R1lW1_iPysewhw6R}HbNTbk1!vg=3L1EyBvM3DvR1T1V z_!O{?*?t>Gye$!(wliRGG!_N?B?3Yp0X*QF@JAUG8X^fjl|`XtNnVyip&?SxQydBn zDhh^`N1-9|;8Tng3i!J~2!loee-}SuP#DPbpqH^I3<*~lX%z5x@nt|n60R_SoFrUf z<x#+2;AKEqz^t~0c!Gr_;A)aacpn19nkw`|4f>%?v<+ZwI|pl3S04)iR0<^{FC&4) zpm5S?33&|Q3xIoq?u>%ifJOvlFHe*dscDHX%$ruj!HIzPkkoLpCg9cawt(wN>f&9F z5$sV|S$Q-O3h-;ZwKEfgPx9kK&aPi%H_Y*%{)RjaINzqh+EG<y6C(TB$zrr8slH1o z?etTxgmZ1rTUuWa^>lQsb2ylmc3%7rj_pM&<`|CqbuCuy?)TB_-^T`<uD^cr_Y(UZ z<$arZ%}m7i&5Z^A`o=W#tqnU~-}AGvU;fyk-q(4xZC?alGfc)}`J$3_j^fXYJ(J*# ziH$ns_AKg<Iek!(yVF$aaDP?lms?riXWb9h3vCy@n){)7P;++Fr`#rf<JGAe?~RFi zmp5L_*}k3MLT|28A_%AC$N1}pZV}ttf#g!NsI0SlZ2zvJ{z$JSdgX+IY1GBNUn6X4 z2PXSEj^wSGV>aNtxO1{mG@dKL<YE^KbLk(O*p83~ALnwdN(%bdiXR%{r~UBI<9nnz z17BCiNc{ST{dphfh7P8w1@2O^aSc+i-O=i|&-Jm@q0}cAa+>iH+}QNX?_75c<XHvU z2Kgi<zxY1qYlAsz(ROO~(5qT{X@M_Rv5I1!a#l@voVb`X?AKTN>%}T9!VZ?~$HG4S zi6^Us+eCCv*BM6I+{C^X!8rU@t+tcI$QxF~o|2WHp0M(`+Tjp?e2c!2oHYLhRaf18 zKM#$$HJq#3CNRBjUjyxSj@}<k#d|Ef4aA2{eNUICO*V7aV%%0Ai?@hAP%-_d*SF@o zQLNGHZ#Szd;~)IU3DV=v-X9ssDNg&xG9gfGps&SmOK5KxOLEXYpYz7eeJ<r?JFmK3 z`xAcsp6kykk7D!Q$?qX~wg)1)Z9D{be|?_tCQ{Yk`}2mw_<Ju>@&3XuFK&L=__E<X zJ|gQ%Zm*Ke4is13ncB|i*Dfub&AxJ7qFGx4%ThYjZfBTCh1PFQtE`kLF}fLjB>4I9 zAAe*-2WR~|e+vW#&0OoYaT@w$Ie5XU<N{AC+T#7O;`RG?@7lxRvsWwCVvt?-ffMb? z{pCSd0yB2Ebtn}m1vM3xkC_+O>CnvbWko3kwK=~>_xxfVo1&Vs^4fKzPUTti4T5XM zdk<RPJI6mcmKW6ymbNGy**%+bpqM|QLw#@Y>(+X$^opC=QAKx!b6P748R&JdgcWic z#x&gxbw6o?jaHvy5l-YXuQm7<aSQ*W?<V&heBIgV=jI<0E`3%p|G<26zi;HFjjzmV zv8!)RY?KJQB;a-H=CK>DrdeFP!f8(Z+-J}UjgEA7=?-0`FLE{)vGjd@^hpq1sqfcI zli{ZIlWGmsdET3oS1=~C!?nlse~eW=zbf1J@Kc{}#U9$*OjhC<ABS>|#$Qg}RFoBM z`4n^GC{4$q?4vq&6Q7G#I?4+5&Z1;$63!$I{~bLwGsJDAiC2yh5$|byKoiEwt*$0; z$E3ly@kLq2#rkt+i;i4qRo;PhWO}O0oA&1l=EGbLOKbD+Ywdb2vlMNPvnByuWnG5d z-eXNycWunKI=n4gM|9nenLNR!qm0SNha4x)Ha^@E@p_}smo8uRIsTJ@(W#=Va~x$4 zcd-m6t9~mpN_n`gX6Velx7poSA6l?T(x&b_9s2%65yK7EqF+&hm8(7rRX7cXpVK&& zClw!{j+@h+E~`_ih^*C@xxw1C&9>P)<Ef)@Du$yXVC_%#;^;h;aNo<Fc)ZT^;Schg zUa;Np=c(b;tWKgiugmADV$4}t&1D!<8NEiSgSF~h$AP_%T<VoK+!Y=P6^x1weVdJ2 zcQ@lL&z7o<uQppfxAA_yNzpWksKxX8dsNID6-=<(-=ExKbYN3pzYbIBdv3#_*tLwa zC2CnueD(HzI6SSj_GY0LH7fhm+X3tK>J9-YDqUgQ9A+z)de6hR6H1-0R-^12(f77q zUGpemG_;g+>%m`Q!gK`g$~7%otf$}4?p65C!CP<;-BVH@CGt0BH`|F2b8S=O$BBh> z3Zi`ZGY?pFFk!_vZdJ73`mtM6o<TuKw_2?xa`rFt*7%2iW&1vU7`WEpZWjBw{f|~M zO6T%mNjl$)Qz?q;wriPbHda3o$l>dDznC(0ZCq3M{`FngoH^TSgP#$k!q_qs=Z0#| z44oKnI2XcdQOP1GE#d2ONOTMR%f@UUh4F3&YW|d)$-QfR0w4PLkB|B9SS7JPpU2GQ zhb(Q13eJ&d&2)T@?>DVyig~Joy&r!)sGN2zow~Hkr`TA;zhgVUI8Iℑnh>d^jO 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ÍTS-Ee1gWg>81nXJ;T=<Zo0EJL~`FSqkBTtL2>Oa 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ⅅ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℞oV_bz+$OV{T9KTpY`xzCtcctJ*@u?g`UT(@W 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�mT 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 RhN1@?OHFa<lBk^6{{gv;A*uiX diff --git a/Forecast_tools/download_ECCO_frcst.m b/Forecast_tools/download_ECCO_frcst.m deleted file mode 100644 index 64653c23..00000000 --- a/Forecast_tools/download_ECCO_frcst.m +++ /dev/null @@ -1,173 +0,0 @@ -function ecco_name=download_ECCO_frcst(lonmin,lonmax,latmin,latmax,... - FRCST_dir,FRCST_prefix,url,Yorig) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Extract a subgrid from ECCO to get a CROCO forcing -% Store that into monthly files. -% Take care of the Greenwitch Meridian. -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 8-Sep-2006 by Pierrick Penven -% Updated 20-Aug-2008 by Matthieu Caillaud & P. Marchesiello -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% -% Get the date -% -rundate_str=date; -rundate=datenum(rundate_str)-datenum(Yorig,1,1); -[y,m,d,h,mi,s]=datevec(rundate_str); -% -% start -% -disp([' ']) -disp(['Get data for ',rundate_str]) -disp(['Minimum Longitude: ',num2str(lonmin)]) -disp(['Maximum Longitude: ',num2str(lonmax)]) -disp(['Minimum Latitude: ',num2str(latmin)]) -disp(['Maximum Latitude: ',num2str(latmax)]) -disp([' ']) -% -% Create the directory -% -disp(['Making output data directory ',FRCST_dir]) -eval(['!mkdir ',FRCST_dir]) -% -% Start -% -disp(['Process the dataset: ',url]) -% -% Get the latest ECCO time -% -% -% first ecco time: 06-Jan-2006 (315696) -% first ecco time: 07-Jan-2006 (324456) !!! should be reset every year !!! -ecco_time_start_year=359520; - -% -ecco_time_start=ecco_time_start_year/24+datenum(1970,1,1)-datenum(Yorig,1,1); -ecco_times=[ecco_time_start:10:ecco_time_start+10000]; -%htime_ecco=24*(ecco_times+datenum(Yorig,1,1)-datenum(1970,1,1)); -% -% Get the closest ecco time -% -ecco_indx=max(find(ecco_times<=rundate)); -foundfile=0; -% -while foundfile==0 - ecco_time=ecco_times(ecco_indx); - disp([' Testing date: ' datestr(ecco_time+datenum(Yorig,1,1))]) - [ecco_y,ecco_m,ecco_d,ecco_h,ecco_mi,ecco_s]=... - datevec(ecco_time+datenum(Yorig,1,1)); - daysinyear=ecco_time+datenum(Yorig,1,1)-datenum(ecco_y,1,1); - necco=round(daysinyear/10); - nhours=necco*240; - if nhours < 1000 - endname=['_00',num2str(nhours),'_240.cdf']; - elseif nhours < 10000 - endname=['_0',num2str(nhours),'_240.cdf']; - else nhours < 10000 - endname=['_',num2str(nhours),'_240.cdf']; - end -% - if necco <= 9 - prefix=[url,num2str(ecco_y),'/n10day_01_0',num2str(necco),'/']; - suffix=['_08_08.00001',endname]; - elseif necco <= 18 - prefix=[url,num2str(ecco_y),'/n10day_10_',num2str(necco),'/']; - suffix=['_08_08.02160',endname]; - elseif necco <= 27 - prefix=[url,num2str(ecco_y),'/n10day_19_',num2str(necco),'/']; - suffix=['_08_08.04320',endname]; - elseif necco <= 37 - prefix=[url,num2str(ecco_y),'/n10day_28_',num2str(necco),'/']; - suffix=['_08_08.06480',endname]; - end -% -% test if the file exist -% - vname='Have'; - fname=[prefix,vname,suffix]; - warning off - try - x=loaddap('-A -e +v ',fname); - foundfile=1; - catch - foundfile=0; - end - if foundfile==1 & ~isempty(x) - disp(' File found') - else - foundfile=0; - disp(' File does not exist') - ecco_indx=ecco_indx-1; - if ecco_indx==0 - error('DOWNLOAD_ECCO_FRCST: No file found...') - end - end - warning on -end -% -tindex=x.time.DODS_ML_Size; -missval=x.Have.missing_value; -% -% Get the time -% -vname='Have'; -fname=[prefix,'Have',suffix]; -trange=['[',num2str(tindex-1),':',num2str(tindex-1),']']; -time=readdap(fname,'time',trange); -time=floor(time/24+datenum(1970,1,1)); -disp([' Date: ',datestr(time)]) -time=time-datenum(Yorig,1,1); -ecco_name=[FRCST_dir,FRCST_prefix,num2str(time),'.cdf']; -% -%if isempty(dir(ecco_name)) -if ~exist(ecco_name) -% -% -% Get a subset of the ECCO grid -% - vname='Have'; - fname=[prefix,vname,suffix]; - [i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - jrange,jrange_v,krange,lon,lon_u,lat,lat_v,depth]=... - get_ECCO_subgrid(fname,lonmin,lonmax,latmin,latmax); -% -% Extract ECCO -% - extract_ECCO_frcst(FRCST_dir,FRCST_prefix,prefix,suffix,tindex,missval,... - lon,lon_u,lat,lat_v,depth,... - krange,jrange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - time,Yorig) -else - disp(' ECCO file allready exist') -end -return diff --git a/Forecast_tools/download_GFS.m b/Forecast_tools/download_GFS.m index 6060cd28..af30f6d7 100644 --- a/Forecast_tools/download_GFS.m +++ b/Forecast_tools/download_GFS.m @@ -193,7 +193,7 @@ for ihind=1:4*hdays % loop on files until time=yesterday 12Z radlw(n,:,:),radlw_in(n,:,:),radsw(n,:,:)]=... get_GFS(fname,mask,tndxdap,jrange,i1min,i1max,i2min,i2max, ... i3min,i3max,missvalue); - end + end end % ihind (nb of hindcast record) % %================================================================== @@ -289,7 +289,3 @@ write_GFS(gfs_name,Yorig,lon,lat,mask,gfstime,... disp('Download GFS: done') % return - - - - diff --git a/Forecast_tools/download_mercator_frcst.m b/Forecast_tools/download_mercator_frcst.m deleted file mode 100644 index 77a1fbf2..00000000 --- a/Forecast_tools/download_mercator_frcst.m +++ /dev/null @@ -1,187 +0,0 @@ -function mercator_name=download_mercator_frcst(lonmin,lonmax,latmin,latmax,... - FRCST_dir,FRCST_prefix,url,Yorig) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Extract a subgrid from ECCO to get a CROCO forcing -% Store that into monthly files. -% Take care of the Greenwitch Meridian. -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 8-Sep-2006 by Pierrick Penven -% Updated 20-Aug-2008 by Matthieu Caillaud & P. Marchesiello -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% -% Get the date -% -l=1; -rundate_str=date; -rundate=datenum(rundate_str)-datenum(Yorig,1,1); -lh=5; % length of hindcast for mercator -lf=6; % length of forecast -%%% test if mercator forecast exist %%% -% mercator time is in julian hours since 1950 - time=readdap(url,'time',[])/24; -time(1) - time=time+datenum(1950,1,1); -time(1) - time=time-datenum(Yorig,1,1); - time(1) - rundate - size(time) - stop - while l==1 - try - x=find(time==rundate+lf); - foundtime=1; - catch - foundtime=0; - end - if foundtime==1 & ~isempty(x) - disp('time is ok') - else - foundtime=0; - disp('missing forecast') - end - -if foundtime==0; - lf=lf-1; - l=1; -else - l=0; -end - end - -for i=1:lh - time1(i)=datenum(rundate_str)-(lh+1-i); -end -time2=datenum(rundate_str); -for j=1:lf - time3(j)=datenum(rundate_str)+j; - -end -if foundtime==0 - time3=[time3 time3(end)]; - end - -time=cat(2,time1,time2,time3); - - -% Get time from Opendap -time2=readdap(url,'time',[])/24; -time2=time2+datenum(1950,1,1); -%time2=time2-datenum(Yorig,1,1); - -% Get time index -for i=1:length(time) - tndx(i)=find(time2==time(i)); -end - -% -% start -% -disp([' ']) -disp(['Get data for ',rundate_str]) -disp(['Minimum Longitude: ',num2str(lonmin)]) -disp(['Maximum Longitude: ',num2str(lonmax)]) -disp(['Minimum Latitude: ',num2str(latmin)]) -disp(['Maximum Latitude: ',num2str(latmax)]) -disp([' ']) -% -% Create the directory -% -disp(['Making output data directory ',FRCST_dir]) -eval(['!mkdir ',FRCST_dir]) -% -% Start -% -disp(['Process the dataset: ',url]) -% -% -% test if the file exist -% -% -foundfile=0; - fname=url; - warning off - try - x=loaddap('-A -e +v ', fname); - foundfile=1; - catch - foundfile=0; - end - if foundfile==1 & ~isempty(x) - disp(' File found') - else - foundfile=0; - disp(' File does not exist') - end - warning on -% -% -%tindex=x.time.DODS_ML_Size; -%missval=x.ssh.missing_value; %PSY3V1 -missval=x.ssh.ml__FillValue; %PSY3V2 -% Get the time -% -trange=['[',num2str(min(tndx)-1),':',num2str(max(tndx)-1),']']; -fname=url; -% -%trange=['[',num2str(tindex-1),':',num2str(tindex-1),']']; -%time=readdap(fname,'time',trange); -%time=floor(time+datenum(1950,1,1)); -%disp([' Date: ',datestr(time)]) -%time=time-datenum(Yorig,1,1); -time=time2(tndx)-datenum(Yorig,1,1); -mercator_name=[FRCST_dir,FRCST_prefix,num2str(rundate),'.cdf']; -% -%if isempty(dir(mercator_name)) -if ~exist(mercator_name) -% -% -% Get a subset of the ECCO grid -% - - - [i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - jrange,jrange_v,krange,lon,lon_u,lat,lat_v,depth]=... - get_mercator_subgrid(url,lonmin,lonmax,latmin,latmax); -% -% Extract mercator -% - extract_mercator_frcst(FRCST_dir,FRCST_prefix,url,tndx,missval,... - lon,lon_u,lat,lat_v,depth,... - krange,jrange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - time,Yorig) -else - disp(' mercator file allready exist') -end - -return diff --git a/Forecast_tools/download_mercator_frcst_python.m b/Forecast_tools/download_mercator_frcst_python.m index 0402779f..a1c22b72 100644 --- a/Forecast_tools/download_mercator_frcst_python.m +++ b/Forecast_tools/download_mercator_frcst_python.m @@ -1,10 +1,9 @@ -function mercator_name=download_mercator_frcst_python(pathMotu,user,password,mercator_type, ... - motu_url, service_id,product_id, ... - lh,lf, ... - lonmin,lonmax,latmin,latmax,zmax, ... - FRCST_dir,FRCST_prefix,raw_mercator_name,Yorig) +function download_mercator_frcst_python(pathCMC,user,password,mercator_type, ... + raw_mercator_name,product_id, ... + lh,lf, ... + lonmin,lonmax,latmin,latmax,zmax, ... + FRCST_dir,FRCST_prefix,date_frcst,Yorig) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % Extract a subgrid from mercator to get a CROCO forcing % Store that into monthly files. % Take care of the Greenwitch Meridian. @@ -42,120 +41,116 @@ function mercator_name=download_mercator_frcst_python(pathMotu,user,password,mer download_raw_data=1; convert_raw2crocotools=1; % convert -> crocotools format data % +disp(['Making output data directory ',FRCST_dir]) % create directory +eval(['!mkdir ',FRCST_dir, ' 2> /dev/null']) +% % Set variable names according to mercator type data % -if mercator_type==1, - vars = {'zos' ... - 'uo' ... - 'vo' ... - 'thetao' ... - 'so'}; +if mercator_type==5 + vars = {'zos_detided', ... + 'uo', ... + 'vo', ... + 'thetao', ... + 'so'}; else - vars = {'zos_detided' ... - 'uo' ... - 'vo' ... - 'thetao' ... - 'so'}; + vars = {'zos' ... + 'uo' ... + 'vo' ... + 'thetao' ... + 'so'}; end % % Get dates % rundate_str=date; -rundate=datenum(rundate_str)-datenum(Yorig,1,1); - +date_run=datenum(rundate_str); +rundate=date_run-datenum(Yorig,1,1); for i=1:lh+1 time1(i)=datenum(rundate_str)-(lh+2-i); end time2=datenum(rundate_str); -for j=1:lf+1 - time3(j)=datenum(rundate_str)+j; +for j=1:lf+2 + time3(j)=datenum(rundate_str)+j-1; end time=cat(2,time1,time2,time3); tiempo_inicial = time1(1); tiempo_final = time3(end); +tiempo_p0 = time1(lh+1); +tiempo_p1 = date_run; +% if (lonmin > 180) lonmin = lonmin - 360; end if (lonmax > 180) lonmax = lonmax - 360; end +% disp([' ']) -disp(['Get data for ',rundate_str]) disp(['Minimum Longitude: ',num2str(lonmin)]) disp(['Maximum Longitude: ',num2str(lonmax)]) disp(['Minimum Latitude: ',num2str(latmin)]) disp(['Maximum Latitude: ',num2str(latmax)]) disp([' ']) - +% if download_raw_data % - % Get data (now in 4 different files) + disp(['--> Extraction Forecasts (assuming local time is after time dissemination : 12hUTC) : ', datestr(tiempo_p1,'yyyy-mm-dd')]) + if lh ~= 0 + for i=1:lh + disp(['Get Hindcasts NRT ana.: ',datestr(time1(i),'yyyy-mm-dd')]) + end + disp(['Get Hindcasts P0 : ',datestr(tiempo_p0,'yyyy-mm-dd')]) + end + disp(['Get ',num2str(lf+2),' Forecasts : from ',datestr(tiempo_p1,'yyyy-mm-dd'),' to ',datestr(tiempo_final, 'yyyy-mm-dd')]) + % + % + % Get data (now splitted in 4 different files) + get_file_python_mercator(pathCMC, ... % SSH + product_id{1}, ... + vars(1), ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_z.nc']); % - % temporarily removing Matlab lib path to avoid conflict with Python, - % (mandatory with python 2.7.X) + get_file_python_mercator(pathCMC, ... % U/V + product_id{2}, ... + vars(2:3), ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_u.nc']); % - pathdyld=getenv('DYLD_LIBRARY_PATH'); - setenv('DYLD_LIBRARY_PATH',''); - pathld=getenv('LD_LIBRARY_PATH'); - setenv('LD_LIBRARY_PATH',''); - - get_file_python_mercator(pathMotu,mercator_type, ... % SSH - motu_url,service_id,product_id{1}, ... - vars(1), ... - [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... - {datestr(tiempo_inicial,'yyyy-mm-dd') ... - datestr(tiempo_final, 'yyyy-mm-dd')}, ... - {user password}, ... - [raw_mercator_name(1:end-3),'_z.nc']); - - get_file_python_mercator(pathMotu,mercator_type, ... % U,V - motu_url,service_id,product_id{2}, ... - vars(2:3), ... - [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... - {datestr(tiempo_inicial,'yyyy-mm-dd') ... - datestr(tiempo_final, 'yyyy-mm-dd')}, ... - {user password}, ... - [raw_mercator_name(1:end-3),'_u.nc']); - - get_file_python_mercator(pathMotu,mercator_type, ... % T - motu_url,service_id,product_id{3}, ... - vars(4), ... - [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... - {datestr(tiempo_inicial,'yyyy-mm-dd') ... - datestr(tiempo_final, 'yyyy-mm-dd')}, ... - {user password}, ... - [raw_mercator_name(1:end-3),'_t.nc']); - - get_file_python_mercator(pathMotu,mercator_type, ... % S - motu_url,service_id,product_id{4}, ... - vars(5), ... - [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... - {datestr(tiempo_inicial,'yyyy-mm-dd') ... - datestr(tiempo_final, 'yyyy-mm-dd')}, ... - {user password}, ... - [raw_mercator_name(1:end-3),'_s.nc']); - - setenv('DYLD_LIBRARY_PATH',pathdyld); % set back Matlab libs path - setenv('LD_LIBRARY_PATH',pathld); % set back Matlab libs path - + get_file_python_mercator(pathCMC, ... % T + product_id{3}, ... + vars(4), ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_t.nc']); + % + get_file_python_mercator(pathCMC, ... % S + product_id{4}, ... + vars(5), ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_s.nc']); +% end % download_raw_data - +% if convert_raw2crocotools % % Convert data format and write in a more CROCOTOOLS % compatible input file % - disp(['Making output data directory ',FRCST_dir]) % create directory - eval(['!mkdir ',FRCST_dir]) - % - mercator_name=[FRCST_dir,FRCST_prefix,num2str(rundate),'.cdf']; - if exist(mercator_name) - disp('Mercator file already exist => overwrite it') - end - write_mercator_frcst(FRCST_dir,FRCST_prefix,raw_mercator_name, ... - mercator_type,vars,time,Yorig); % write data + write_mercator_multi(FRCST_dir,FRCST_prefix,raw_mercator_name, ... + mercator_type,vars,time,num2str(rundate),Yorig); % write data eval(['! rm -f ',[raw_mercator_name(1:end-3),'*nc '] ]); end - +% end - diff --git a/Forecast_tools/extract_ECCO_frcst.m b/Forecast_tools/extract_ECCO_frcst.m deleted file mode 100644 index 10ad8ffb..00000000 --- a/Forecast_tools/extract_ECCO_frcst.m +++ /dev/null @@ -1,115 +0,0 @@ -function extract_ECCO_frcst(FRCST_dir,FRCST_prefix,prefix,suffix,tindex,missval,... - lon,lon_u,lat,lat_v,depth,... - krange,jrange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - time,Yorig) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Extract a subset from ECCO using DODS -% Write it in a local file (keeping the classic -% SODA netcdf format) -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 9-Sep-2006 by Pierrick Penven -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -disp([' Download ECCO']) -trange=['[',num2str(tindex-1),':',num2str(tindex-1),']']; -% -% Get the time -% -%vname='Have'; -%fname=[prefix,vname,suffix]; -%time=readdap(fname,'time',trange) -%time=floor(time/24+datenum(1970,1,1)); -%disp([' Date: ',datestr(time)]) -%time=time-datenum(Yorig,1,1) -% -% Get SSH -% -disp(' ...SSH') -vname='Have'; -fname=[vname,suffix]; -ssh=getdap(prefix,fname,vname,... - trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -ssh=shiftdim(ssh,2); -ssh(ssh<=missval)=NaN; -% -% Get U -% -disp(' ...U') -vname='Uave'; -fname=[vname,suffix]; -u=getdap(prefix,fname,vname,... - trange,krange,jrange,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u); -u=permute(u,[4 3 1 2]); -u(u<=missval)=NaN; -% -% Get V -% -disp(' ...V') -vname='Vave'; -fname=[vname,suffix]; -v=getdap(prefix,fname,vname,... - trange,krange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max); -v=permute(v,[4 3 1 2]); -v(v<=missval)=NaN; -% -% Get TEMP -% -disp(' ...TEMP') -vname='Tave'; -fname=[vname,suffix]; -temp=getdap(prefix,fname,vname,... - trange,krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -temp=permute(temp,[4 3 1 2]); -temp(temp<=missval)=NaN; -% -% Get SALT -% -disp(' ...SALT') -vname='Save'; -fname=[vname,suffix]; -salt=getdap(prefix,fname,vname,... - trange,krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -salt=permute(salt,[4 3 1 2]); -salt(salt<=missval)=NaN; -% -% Create the ECCO file -% -create_OGCM([FRCST_dir,FRCST_prefix,num2str(time),'.cdf'],... - lon,lat,lon_u,lat,lon,lat_v,depth,time,... - squeeze(temp),squeeze(salt),squeeze(u),... - squeeze(v),squeeze(ssh),Yorig) -% -return diff --git a/Forecast_tools/extract_mercator_frcst.m b/Forecast_tools/extract_mercator_frcst.m deleted file mode 100644 index 72d03800..00000000 --- a/Forecast_tools/extract_mercator_frcst.m +++ /dev/null @@ -1,116 +0,0 @@ -function extract_mercator_frcst(FRCST_dir,FRCST_prefix,url,tndx,missval,... - lon,lon_u,lat,lat_v,depth,... - krange,jrange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - time,Yorig) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Extract a subset from Mercator using DODS -% Write it in a local file (keeping the classic -% SODA netcdf format) -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 9-Sep-2006 by Pierrick Penven -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -disp([' Download MERCATOR']) -trange=['[',num2str(min(tndx)-1),':',num2str(max(tndx)-1),']']; -%trange=['[',num2str(tindex-1),':',num2str(tindex-1),']']; -% -% Get the time -% -%vname='Have'; -%fname=[prefix,vname,suffix]; -%time=readdap(fname,'time',trange) -%time=floor(time/24+datenum(1970,1,1)); -%disp([' Date: ',datestr(time)]) -%time=time-datenum(Yorig,1,1) -% -% Get SSH -% -disp(' ...SSH') -vname='ssh'; -fname=''; -ssh=getdap(url,fname,vname,... - trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -ssh=shiftdim(ssh,2); -ssh(ssh>=missval)=NaN; -% -% -% Get U -% -disp(' ...U') -vname='u'; -u=getdap(url,fname,vname,... - trange,krange,jrange,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u); -u=permute(u,[4 3 1 2]); -u(u>=missval)=NaN; -% -% Get V -% -disp(' ...V') -vname='v'; -v=getdap(url,fname,vname,... - trange,krange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max); -v=permute(v,[4 3 1 2]); -v(v>=missval)=NaN; -% -% Get TEMP -% -disp(' ...TEMP') -vname='temperature'; -temp=getdap(url,fname,vname,... - trange,krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -temp=permute(temp,[4 3 1 2]); -temp(temp>=missval)=NaN; -% -% Get SALT -% -disp(' ...SALT') -vname='salinity'; -salt=getdap(url,fname,vname,... - trange,krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -salt=permute(salt,[4 3 1 2]); -salt(salt>=missval)=NaN; -% -% -% Create the ECCO file -rundate_str=date; -rundate=datenum(rundate_str)-datenum(Yorig,1,1); - -create_OGCM([FRCST_dir,FRCST_prefix,num2str(rundate),'.cdf'],... - lon,lat,lon_u,lat,lon,lat_v,depth,time,... - squeeze(temp),squeeze(salt),squeeze(u),... - squeeze(v),squeeze(ssh),Yorig) -% -return diff --git a/Forecast_tools/get_GFS.m b/Forecast_tools/get_GFS.m index 667463e3..47f94e05 100644 --- a/Forecast_tools/get_GFS.m +++ b/Forecast_tools/get_GFS.m @@ -47,69 +47,74 @@ t=readdap(fname,'time',trange); disp(['TRANGE=',num2str(trange)]) disp(['GFS raw time=',sprintf('%5.3f',t)]) t=t+365; % put it in "matlab" time -disp(['GFS: ',datestr(t)]) +disp(['GFS: ',datestr(datenum(t),'yyyy-mm-dd HH:MM:SS')]) disp('====================================================') %disp('u...') u=mask.*getdap('',fname,'ugrd10m',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); u(abs(u)>=missvalue)=NaN; +pause(2) %disp('v...') v=mask.*getdap('',fname,'vgrd10m',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); v(abs(v)>=missvalue)=NaN; - -%disp('ty...') -ty=mask.*getdap('',fname,'vflxsfc',trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -ty(abs(ty)>=missvalue)=NaN; +pause(2) %disp('tx...') tx=mask.*getdap('',fname,'uflxsfc',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); tx(abs(tx)>=missvalue)=NaN; +pause(2) - -%disp('skt...') -%skt=mask.*getdap('',fname,'tmpsfc',trange,'',jrange,... -% i1min,i1max,i2min,i2max,i3min,i3max); -%skt(abs(skt)>=missvalue)=NaN; +%disp('ty...') +ty=mask.*getdap('',fname,'vflxsfc',trange,'',jrange,... + i1min,i1max,i2min,i2max,i3min,i3max); +ty(abs(ty)>=missvalue)=NaN; +pause(2) %disp('tair...') tair=mask.*getdap('',fname,'tmp2m',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); tair(abs(tair)>=missvalue)=NaN; +pause(2) %disp('rhum...') rhum=mask.*getdap('',fname,'rh2m',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); rhum(abs(rhum)>=missvalue)=NaN; +pause(2) %disp('prate...') prate=mask.*getdap('',fname,'pratesfc',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); prate(abs(prate)>=missvalue)=NaN; +pause(2) %disp('down radlw...') dradlw=mask.*getdap('',fname,'dlwrfsfc',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); dradlw(abs(dradlw)>=missvalue)=NaN; +pause(2) %disp('up radlw...') uradlw=mask.*getdap('',fname,'ulwrfsfc',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); uradlw(abs(uradlw)>=missvalue)=NaN; +pause(2) %disp('down radsw...') dradsw=mask.*getdap('',fname,'dswrfsfc',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); dradsw(abs(dradsw)>=missvalue)=NaN; +pause(2) %disp('up radsw...') uradsw=mask.*getdap('',fname,'uswrfsfc',trange,'',jrange,... i1min,i1max,i2min,i2max,i3min,i3max); uradsw(abs(uradsw)>=missvalue)=NaN; +pause(2) % % Transform the variables % diff --git a/Forecast_tools/iteration.m b/Forecast_tools/iteration.m deleted file mode 100644 index 9c472128..00000000 --- a/Forecast_tools/iteration.m +++ /dev/null @@ -1,26 +0,0 @@ - -%%%% hindcast iterations %%% -start -crocotools_param - -time=(floor(now)-datenum(Yorig,1,1)-(hdays-1)-timezone/24)*86400; - -% shift back restart time after first iteration -eval(['!cp ','croco_rst.nc',' ','croco_ini.nc']) -nc=netcdf('croco_ini.nc','write'); -nc{'scrum_time'}(1)=time; -close(nc) - -for i=1:3 - disp(['I=',num2str(i+1)]) - eval(['!export OMP_NUM_THREADS=4 ; ./croco ','croco_hindcast.in ',' > ','croco_hindcast_',num2str(date),'.out']); - - % shift back restart time for next iteration - eval(['!cp ','croco_rst.nc',' ','croco_ini.nc']) - nc=netcdf('croco_ini.nc','write'); - nc{'scrum_time'}(1)=time; - close(nc) - -end - -return diff --git a/Forecast_tools/make_GFS.m b/Forecast_tools/make_GFS.m index 967a7048..ff01b7e2 100644 --- a/Forecast_tools/make_GFS.m +++ b/Forecast_tools/make_GFS.m @@ -3,6 +3,8 @@ % Create and fill frc and bulk files with GFS data. % for a forecast run % +% Description : 3 hourly forecasts / 0.25 deg (00z/06z/12z/18z) +% % The on-line reference to GFS is at % http://nomad3.ncep.noaa.gov/ % @@ -95,6 +97,10 @@ if Download_data==1 % Download data with DODS (the download matlab routine depends on the OGCM) % disp('Download data...') + disp('--> NB: if you receive this message during download : ') + disp(' " syntax error, unexpected WORD_WORD, expecting SCAN_ATTR or SCAN_DATASET or SCAN_ERROR ..."') + disp(' " you maybe reach the rate limit authorized, there is a ban on your IP due to an “Over Rate Limit†violation, try to wait more than 10 minutes before to do it again') + disp([' ']) download_GFS(today,lonmin,lonmax,latmin,latmax,FRCST_dir,Yorig,it) % end @@ -121,16 +127,6 @@ create_forcing(frcname,grdname,CROCO_title,... 0,0,0,... 0,0,0,0,0,0) nc_frc=netcdf(frcname,'write'); -% for l=1:tlen -% nc_blk{'tair'}(l,:,:)=0; -% nc_blk{'rhum'}(l,:,:)=0; -% nc_blk{'prate'}(l,:,:)=0; -% nc_blk{'radsw'}(l,:,:)=0; -% nc_blk{'radlw'}(l,:,:)=0; -% nc_blk{'wspd'}(l,:,:)=0; -% nc_frc{'sustr'}(l,:,:)=0; -% nc_frc{'svstr'}(l,:,:)=0; -% end % % Loop on time % @@ -295,13 +291,5 @@ if makeplot==1 test_forcing(blkname,grdname,'radsw',slides,3,coastfileplot) end - toc - - - - - - - diff --git a/Forecast_tools/make_OGCM_frcst.m b/Forecast_tools/make_OGCM_mercator_frcst.m similarity index 57% rename from Forecast_tools/make_OGCM_frcst.m rename to Forecast_tools/make_OGCM_mercator_frcst.m index 3c11f8e4..ba600e75 100644 --- a/Forecast_tools/make_OGCM_frcst.m +++ b/Forecast_tools/make_OGCM_mercator_frcst.m @@ -1,8 +1,24 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% Create and fill CROCO clim and bry files with OGCM data. -% for a forecast run +% Create and fill CROCO clim and bry files with OGCM data +% from mercator for a forecast run % +% On crocotools_param.m, available datasets: +% +% mercator -> 3 options for mercator_type parameter: +% +% 3 --> 1/12 deg Mercator global forecast (See Section 8.) +% (daily forecast from 00h UTC up to 10 days, +% updated daily at 12h UTC) +% 4 --> 1/24 deg Mercator Mediterranean analysis/forecast (See Section 8.) +% (daily forecast from 00h UTC up to 9 days, +% updated daily at 16h UTC) +% 5 --> the same than 4 but with detiding postprocessing on current and ssh +% +% Note for 3/4/5: (now -> 10days : P1-P10) +% (now -1day : P0) +% (7days from now -> now-1day : Near Real Time analysis) +% (more than 15days from now : Best analysis) % % Further Information: % http://www.croco-ocean.org @@ -31,16 +47,16 @@ % Updated 20-Aug-2008 by Matthieu Caillaud & P. Marchesiello % Updated 12-Feb-2016 by P. Marchesiello % Updated 14-Oct-2020 by P. Marchesiello -% +% Updated 18-Mar-2024 by G. Cambon %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%clear all -%close all +clear all +close all tic %%%%%%%%%%%%%%%%%%%%% USERS DEFINED VARIABLES %%%%%%%%%%%%%%%%%%%%%%%% % % Common parameters % -crocotools_param +crocotools_param; % % Specific to forecast % @@ -49,29 +65,30 @@ makeplot = 0; % Get date % rundate_str=date; -rundate=datenum(rundate_str)-datenum(Yorig,1,1); +date_run=datenum(rundate_str); +rundate=date_run-datenum(Yorig,1,1); +date_frcst=rundate; +%OGCM=mercator +for i=1:hdays+1 + time1(i)=date_run-(hdays+1-i); +end +if hdays ~= 0 + % date_deb = rundate - hindcast days : example 2024-02-28T00:00:00Z-PT2D + % for a validity date 2 days before run 20240228 00hUTC ... + date_deb=strcat(datestr(time1(1+hdays),'yyyy-mm-ddT00:00:00') ,['-PT',num2str(hdays),'D']); +else + date_deb=datestr(time1(1+hdays),'yyyy-mm-ddT00:00:00Z'); +end % % Set generic OGCM file name % -FRCST_prefix=[OGCM,'_']; +FRCST_prefix=['mercator_']; OGCM_name=[FRCST_dir,FRCST_prefix,num2str(rundate),'.cdf']; % -if strcmp(OGCM,'ECCO') - % - % ECCO DODS URL - % - % Kalman filter - % - url = 'http://ecco.jpl.nasa.gov/thredds/dodsC/las/kf080/kf080_'; - % -elseif strcmp(OGCM,'mercator') - % - % MERCATOR : see get_file_python_mercator.m - % - raw_mercator_name=[FRCST_dir,'raw_motu_mercator_',num2str(rundate),'.nc']; -else - error(['Unknown OGCM: ',OGCM]) -end +% +% MERCATOR : see get_file_python_mercator.m +% +raw_mercator_name=[FRCST_dir,'raw_mercator_',date_deb,'.nc']; % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % end of user input parameters @@ -95,41 +112,31 @@ pm=nc{'pm'}(:); pn=nc{'pn'}(:); rmask=nc{'mask_rho'}(:); close(nc) - %--------------------------------------------------------------- % Extract data from the Internet %--------------------------------------------------------------- if Download_data - % - % Get model limits - % - lonmin=min(min(lon)); - lonmax=max(max(lon)); - latmin=min(min(lat)); - latmax=max(max(lat)); - % - % Download data (matlab routine for download depends on OGCM) - % - if strcmp(OGCM,'ECCO') - disp('Download data...') - eval(['OGCM_name=download_', ... - OGCM,'_frcst(lonmin,lonmax,latmin,latmax,',... - 'FRCST_dir,FRCST_prefix,url,Yorig);']) - - elseif strcmp(OGCM,'mercator') % - % Use Motu python + % Get model limits + % + lonmin=min(min(lon)); + lonmax=max(max(lon)); + latmin=min(min(lat)); + latmax=max(max(lat)); + % + % Download data (matlab routine for download depends on OGCM) + % + % + % Use of Copernicusmarine client (python) + % -> script download_mercator_frcst_python.m % disp('Download data...') - eval(['OGCM_name=download_', ... - OGCM,'_frcst_python(pathMotu,user,password,mercator_type,', ... - 'motu_url_fcst,service_id_fcst,product_id_fcst,', ... - 'hdays,fdays,', ... - 'lonmin,lonmax,latmin,latmax,hmax,', ... - 'FRCST_dir,FRCST_prefix,raw_mercator_name,Yorig);']) - end + download_mercator_frcst_python(pathCMC,user,password,mercator_type, ... + raw_mercator_name,product_id, ... + hdays,fdays, ... + lonmin,lonmax,latmin,latmax,hmax, ... + FRCST_dir,FRCST_prefix,date_frcst,Yorig); end - %--------------------------------------------------------------- % Get OGCM grid %--------------------------------------------------------------- @@ -144,35 +151,28 @@ Z=-nc{'depth'}(:); NZ=length(Z); NZ=NZ-rmdepth; Z=Z(1:NZ); - %--------------------------------------------------------------- % Get time array %--------------------------------------------------------------- -if strcmp(OGCM,'ECCO') - time=[90 270]; - time_cycle=360; - trange=[1 1]; -elseif strcmp(OGCM,'mercator') - OGCM_time=nc{'time'}(:); - time_cycle=0; - delta=1; % >1 if subsampling - trange=[1:delta:length(OGCM_time)]; - time=zeros(length(trange),1); - for i=1:length(trange) - time(i)=OGCM_time(trange(i)); - end +OGCM_time=nc{'time'}(:); +time_cycle=0; +delta=1; % >1 if subsampling +trange=[1:delta:length(OGCM_time)]; +time=zeros(length(trange),1); +for i=1:length(trange) + time(i)=OGCM_time(trange(i)); end close(nc) - %--------------------------------------------------------------- % Initial file %--------------------------------------------------------------- if makeini==1 - ininame=[ini_prefix,num2str(rundate),nc_suffix]; - disp(['Create an initial file for ',num2str(rundate);]) + % + ininame=[ini_prefix,num2str(date_frcst),nc_suffix]; + disp(['-> Create an initial file for date ',num2str(date_deb);]) create_inifile(ininame,grdname,CROCO_title,... theta_s,theta_b,hc,N,... - rundate-hdays,'clobber',vtransform); % starts at 00:00 + date_frcst-hdays,'clobber',vtransform); % starts at 00:00 nc_ini=netcdf(ininame,'write'); interp_OGCM_frcst(OGCM_name,Roa,interp_method,... @@ -180,19 +180,22 @@ if makeini==1 nc_ini,[],lon,lat,angle,h,pm,pn,rmask,... 1,vtransform,obc) close(nc_ini) - if (isoctave == 0) - eval(['!cp ',ininame,' ',ini_prefix,'hct',nc_suffix]) - else - eval(['cp ',ininame,' ',ini_prefix,'hct',nc_suffix]) + if hdays ~= 0 + if (isoctave == 0) + eval(['!cp ',ininame,' ',ini_prefix,'hct_',num2str(date_frcst),nc_suffix]) + else + eval(['cp ',ininame,' ',ini_prefix,'hct_',num2str(date_frcst),nc_suffix]) + end end end - %--------------------------------------------------------------- % Clim and Bry files %--------------------------------------------------------------- if makeclim==1 | makebry==1 if makebry==1 - bryname=[bry_prefix,num2str(rundate),nc_suffix]; + bryname=[bry_prefix,num2str(date_frcst),nc_suffix]; + disp([' ']) + disp(['-> Create bry files from ',num2str(date_deb);]) create_bryfile(bryname,grdname,CROCO_title,[1 1 1 1],... theta_s,theta_b,hc,N,... time,time_cycle,'clobber',vtransform); @@ -201,7 +204,8 @@ if makeclim==1 | makebry==1 nc_bry=[]; end if makeclim==1 - clmname=[clm_prefix,num2str(rundate),nc_suffix]; + clmname=[clm_prefix,num2str(date_frcst),nc_suffix]; + disp(['-> Create clim files from ',num2str(date_deb);]) create_climfile(clmname,grdname,CROCO_title,... theta_s,theta_b,hc,N,... time,time_cycle,'clobber',vtransform); @@ -209,18 +213,16 @@ if makeclim==1 | makebry==1 else nc_clm=[]; end - %--------------------------------------------------------------- % Perform interpolations for all selected records %--------------------------------------------------------------- -for tndx=1:length(time) - disp([' Time step : ',num2str(tndx),' of ',num2str(length(time)),' :']) - interp_OGCM_frcst(OGCM_name,Roa,interp_method,... - lonU,latU,lonV,latV,lonT,latT,Z,trange(tndx),... - nc_clm,nc_bry,lon,lat,angle,h,pm,pn,rmask, ... - tndx,vtransform,obc) -end - + for tndx=1:length(time) + disp([' Time step : ',num2str(tndx),' of ',num2str(length(time)),' :']) + interp_OGCM_frcst(OGCM_name,Roa,interp_method,... + lonU,latU,lonV,latV,lonT,latT,Z,trange(tndx),... + nc_clm,nc_bry,lon,lat,angle,h,pm,pn,rmask, ... + tndx,vtransform,obc) + end % % Close CROCO files % @@ -239,21 +241,21 @@ if makeplot==1 disp(' ') disp(' Make a few plots...') if makeini==1 - ininame=[ini_prefix,num2str(rundate),nc_suffix]; + ininame=[ini_prefix,num2str(date_frcst),nc_suffix]; figure test_clim(ininame,grdname,'temp',1,coastfileplot) figure test_clim(ininame,grdname,'salt',1,coastfileplot) end if makeclim==1 - clmname=[clm_prefix,num2str(rundate),nc_suffix]; + clmname=[clm_prefix,num2str(date_frcst),nc_suffix]; figure test_clim(clmname,grdname,'temp',1,coastfileplot) figure test_clim(clmname,grdname,'salt',1,coastfileplot) end if makebry==1 - bryname=[bry_prefix,num2str(rundate),nc_suffix]; + bryname=[bry_prefix,num2str(frcst),nc_suffix]; figure test_bry(bryname,grdname,'temp',1,obc) figure diff --git a/Forecast_tools/make_forecast.m b/Forecast_tools/make_forecast.m index 4f1c4ff0..4f449259 100644 --- a/Forecast_tools/make_forecast.m +++ b/Forecast_tools/make_forecast.m @@ -1,86 +1,90 @@ -% -% make_forecast.m -% -% Preparation of the files for the forecast system: -% - launch make_OGCM_frcst and make_GFS -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 8-Sep-2006 by Pierrick Penven -% Updated 12-Feb-2016 by P. Marchesiello -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -start -tic -crocotools_param - -% -% Get the lateral boundary conditions -% -make_OGCM_frcst -% -% Get the surface forcing -% -make_GFS -% -% Copy the resulting files -% -rundate=datenum(date)-datenum(Yorig,1,1); nc_suffix='.nc'; -eval(['!cp ',bry_prefix,num2str(rundate),nc_suffix,' ',bry_prefix,'0',nc_suffix]) -eval(['!cp ',blk_prefix,num2str(rundate),nc_suffix,' ',blk_prefix,'0',nc_suffix]) -eval(['!cp ',frc_prefix,num2str(rundate),nc_suffix,' ',frc_prefix,'0',nc_suffix]) -eval(['!cp ',clm_prefix,num2str(rundate),nc_suffix,' ',clm_prefix,'0',nc_suffix]) -eval(['!cp ',ini_prefix,num2str(rundate),nc_suffix,' ',ini_prefix,'0',nc_suffix]) -% -% Add tidal data in forcing file -% -if add_tides_fcst==1 - disp(['Add tidal data ... ']) - frcname=[CROCO_files_dir,'croco_frc_GFS_0.nc']; - [Y,M,d,h,mi,s] = datevec(date); - add_tidal_data(tidename,grdname,frcname,Ntides,tidalrank, ... - Yorig,Y,M,coastfileplot,sal_tides,salname) -end -% -% Set the clock right: -% - copy croco_ini.nc in FORECAST/croco_ini.nc if not available -% - update scrum_time in FORECAST/croco_ini.nc using timezone information -% In this case, initial scrum_time is the UTC time corresponding to -% local midnight of day=now-hdays (scrum_time needs to be a UTC time -% since all forcing fields are referenced to UTC time). -% -disp('Set the clock right in initial file using Time Zone information') -time=(floor(now)-datenum(Yorig,1,1)-hdays-timezone/24)*86400; -ininame='FORECAST/croco_ini.nc'; -nc=netcdf(ininame,'write'); -if isempty(nc) - rundate=datenum(date)-datenum(Yorig,1,1); nc_suffix='.nc'; - disp('No restart file available in CROCO_FILES, copy OGCM inifile') - eval(['!cp ',ini_prefix,num2str(rundate),nc_suffix,' ',ininame]) - nc=netcdf(ininame,'write'); -end -nc{'scrum_time'}(:)=time; -close(nc) -toc -return +% +% make_forecast.m +% +% Preparation of the files for the forecast system: +% - launch make_OGCM_frcst and make_GFS +% +% Further Information: +% http://www.croco-ocean.org +% +% This file is part of CROCOTOOLS +% +% CROCOTOOLS is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published +% by the Free Software Foundation; either version 2 of the License, +% or (at your option) any later version. +% +% CROCOTOOLS is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 59 Temple Place, Suite 330, Boston, +% MA 02111-1307 USA +% +% Copyright (c) 2006 by Pierrick Penven +% e-mail:Pierrick.Penven@ird.fr +% +% Updated 8-Sep-2006 by Pierrick Penven +% Updated 12-Feb-2016 by P. Marchesiello +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +start +tic +crocotools_param + +% +% Get the lateral boundary conditions +% +make_OGCM_mercator_frcst +% +% Get the surface forcing +% +make_GFS +% +% Copy the resulting files +% +rundate=datenum(date)-datenum(Yorig,1,1); +nc_suffix='.nc'; +eval(['!cp ',bry_prefix,num2str(rundate),nc_suffix,' ',bry_prefix,'0',nc_suffix]) +eval(['!cp ',blk_prefix,num2str(rundate),nc_suffix,' ',blk_prefix,'0',nc_suffix]) +eval(['!cp ',frc_prefix,num2str(rundate),nc_suffix,' ',frc_prefix,'0',nc_suffix]) +eval(['!cp ',clm_prefix,num2str(rundate),nc_suffix,' ',clm_prefix,'0',nc_suffix]) +eval(['!cp ',ini_prefix,num2str(rundate),nc_suffix,' ',ini_prefix,'0',nc_suffix]) +% +% Add tidal data in forcing file +% +if add_tides_fcst==1 + disp(['Add tidal data ... ']) + frcname=[CROCO_files_dir,'croco_frc_GFS_0.nc']; + [Y,M,d,h,mi,s] = datevec(date); + add_tidal_data(tidename,grdname,frcname,Ntides,tidalrank, ... + Yorig,Y,M,coastfileplot,sal_tides,salname) +end +% +% Set the clock right: +% - copy croco_ini.nc in FORECAST/croco_ini.nc if not available +% - update scrum_time in FORECAST/croco_ini.nc using timezone information +% In this case, initial scrum_time is the UTC time corresponding to +% local midnight of day=now-hdays (scrum_time needs to be a UTC time +% since all forcing fields are referenced to UTC time). +% +disp('Set the clock right in initial file using Time Zone information') +time=(floor(now)-datenum(Yorig,1,1)-hdays-timezone/24)*86400; +if ~exist('FORECAST', 'dir') + mkdir('FORECAST'); +end +ininame='FORECAST/croco_ini.nc'; +nc=netcdf(ininame,'write'); +if isempty(nc) + rundate=datenum(date)-datenum(Yorig,1,1); nc_suffix='.nc'; + disp('No restart file available in CROCO_FILES, copy OGCM inifile') + eval(['!cp ',ini_prefix,num2str(rundate),nc_suffix,' ',ininame]) + nc=netcdf(ininame,'write'); +end +nc{'scrum_time'}(:)=time; +close(nc) +toc +return diff --git a/Forecast_tools/motuclient-python/LICENSE b/Forecast_tools/motuclient-python/LICENSE deleted file mode 100755 index f0156c53..00000000 --- a/Forecast_tools/motuclient-python/LICENSE +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/MANIFEST.in b/Forecast_tools/motuclient-python/MANIFEST.in deleted file mode 100755 index 4f24fe08..00000000 --- a/Forecast_tools/motuclient-python/MANIFEST.in +++ /dev/null @@ -1,8 +0,0 @@ -# Author: CLS, smarty@cls.fr -include LICENSE -include pom.xml -include README.md -include setup.cfg -include setup.py -include src/python/motu_utils/cfg/log.ini -include src/python/motu_utils/cfg/messages.properties diff --git a/Forecast_tools/motuclient-python/README.md b/Forecast_tools/motuclient-python/README.md deleted file mode 100755 index d1cabd5f..00000000 --- a/Forecast_tools/motuclient-python/README.md +++ /dev/null @@ -1,334 +0,0 @@ -# Motu Client Python Project -@author Product owner <tjolibois@cls.fr> -@author Scrum master, software architect <smarty@cls.fr> -@author Quality assurance, continuous integration manager <smarty@cls.fr> - ->How to read this file? -Use a markdown reader: -plugins [chrome](https://chrome.google.com/webstore/detail/markdown-preview/jmchmkecamhbiokiopfpnfgbidieafmd?utm_source=chrome-app-launcher-info-dialog) exists (Once installed in Chrome, open URL chrome://extensions/, and check "Markdown Preview"/Authorise access to file URL.), -or for [firefox](https://addons.mozilla.org/fr/firefox/addon/markdown-viewer/) (anchor tags do not work) -and also plugin for [notepadd++](https://github.com/Edditoria/markdown_npp_zenburn). - ->Be careful: Markdown format has issue while rendering underscore "\_" character which can lead to bad variable name or path. - - -# Summary -* [Overview](#Overview) -* [Build](#Build) -* [Installation](#Installation) - * [Prerequisites](#InstallationPre) - * [Using PIP](#InstallationPIP) - * [From tar.gz file](#InstallationTGZ) -* [Configuration](#Configuration) -* [Usage and options](#Usage) - * [Usage from PIP installation](#UsagePIP) - * [Usage from tar.gz installation](#UsageTGZ) -* [Usage examples](#UsageExamples) - * [Download](#UsageExamplesDownload) - * [GetSize](#UsageExamplesGetSize) - * [DescribeProduct](#UsageExamplesDescribeProduct) -* [Licence](#Licence) -* [Troubleshooting](#Troubleshooting) - * [Unable to download the latest version watched on GitHub from PIP](#Troubleshooting) - * [From Windows, Parameter error](#TroubleshootingWinArgErr) - -# <a name="Overview">Overview</a> -Motu client "motuclient-python" is a python script used to connect to Motu HTTP server in order to: - -* __extract__ the data of a dataset, with geospatial, temporal and variable criterias (default option) -* __get the size__ of an extraction with geospatial, temporal and variable criterias -* __get information__ about a dataset - -This program can be integrated into a processing chain in order to automate the downloading of products via the Motu. - - -# <a name="Build">Build</a> -From the root folder runs the command: - -``` -./patchPOMtoBuild.sh -mvn clean install -Dmaven.test.skip=true -[...] -[INFO] BUILD SUCCESS -[...] -``` - -This creates two archives in the target folder: - -* motuclient-python-$version-$buildTimestamp-src.tar.gz: Archive containing all the source code -* motuclient-python-$version-$buildTimestamp-bin.tar.gz: Archive ready to be installed - - - -# <a name="Installation">Installation</a> - -## <a name="InstallationPre">Prerequisites</a> -You must use python version 2.7.X or later. -This program is fully compatible with Python 3.X versions. -There is two methods to install the client, by using PIP or from a tar.gz file. - [setuptools](#InstallationSetuptools) python package has be installed in order to display the motuclient version successfully. - -## <a name="InstallationPIP">Using PIP</a> -Python Package Index is used to ease installation. -If your host needs a PROXY set it, for example: -``` -export HTTPS_PROXY=http://myCompanyProxy:8080 -``` - -Then run: - -``` -pip install motuclient -``` - -Now "motuclient" is installed, you can [configured it](#Configuration) and [use it](#UsagePIP). - - -## <a name="InstallationTGZ">From tar.gz file</a> -Deploy the archive (file motuclient-python-$version-bin.tar.gz available from [GitHub release](https://github.com/clstoulouse/motu-client-python/releases)) in the directory of your choice. -``` -tar xvzf motuclient-python-$version-$buildTimestamp-bin.tar.gz -``` - -Create a [configuration file](#Configuration) and set the user and password to use to connect to the CAS server. - -## <a name="InstallationSetuptools">Install setuptools python package</a> -"[Setuptools](https://pypi.python.org/pypi/setuptools)" python package has to be installed in order to display the version with option --version, here is how to install it: - -If your host needs a PROXY set it, for example: -``` -export HTTPS_PROXY=http://myCompanyProxy:8080 -``` - -Then run: - -``` -sudo apt install python-pip -pip install --upgrade setuptools -``` - -# <a name="Configuration">Configuration</a> -All parameters can be defined as command line options or can be written in a configuration file. -The configuration file is a .ini file. This file is located in the following directory: - -* on __Unix__ platforms: $HOME/motuclient/motuclient-python.ini -* on __Windows__ platforms: %USERPROFILE%\motuclient\motuclient-python.ini - -The expected structure of file is: -``` -[Main] -# Motu credentials -user=john -pwd=secret - -motu=http://motu-ip-server:port/motu-web/Motu -service_id=GLOBAL_ANALYSIS_FORECAST_PHY_001_024-TDS -product_id=global-analysis-forecast-phy-001-024-hourly-t-u-v-ssh -date_min=2019-03-27 -date_max=2019-03-27 -latitude_min=-30 -latitude_max=40.0 -longitude_min=-10 -longitude_max=179.9166717529297 -depth_min=0.493 -depth_max=0.4942 -# Empty or non set means all variables -# 1 or more variables separated by a coma and identified by their standard name -variable=sea_water_potential_temperature,sea_surface_height_above_geoid -# Accept relative or absolute path. The dot character "." is the current folder -out_dir=./out_dir -out_name=test.nc - -# Logging -# https://docs.python.org/3/library/logging.html#logging-levels -# log_level=X {CRITICAL:50, ERROR:40, WARNING:30, INFO:20, DEBUG:10, TRACE:0} -log_level=0 - -# block_size block used to download file (integer expressing bytes) default=65535 -# block_size=65535 -socket_timeout=120000 - -# Http proxy to connect to Motu server -# proxy_server=proxy.domain.net:8080 -# proxy_user=john -# proxy_pwd=secret -``` - -A configuration file in another location can be specified by the `--config-file` option. It is even possible to split the configuration into two or more files. This is useful, for example, to keep server configuration in one file and dataset configuration in another: -``` -./motuclient.py --config-file ~/server.ini --config-file ~/mercator.ini -``` -If by chance there is a parameter listed in both configuration files, the value in the last file (e.g. `mercator.ini`) is the one actually used. - -# <a name="Usage">Usage</a> -Starts the motu python client. - -## <a name="UsagePIP">Usage from PIP installation</a> -Since version 1.8.0: -``` -motuclient -h -motuclient [options] -``` -Before version 1.8.0: -``` -python -m motu-client -h -python -m motu-client [options] -``` - -[Options](#UsageOptions) are listed below. -Method to used when it has been installed with [PIP method](#InstallationPIP). - - -## <a name="UsageTGZ">Usage from tar.gz installation</a> -``` -./motuclient.py -h -motuclient.py [options] -``` -Method to used when it has been installed with [tar.gz method](#InstallationTGZ). -Usefull if host is offline and has no Internet access. - -### <a name="UsageOptions">__Options:__</a> - - -* __-h, --help__ show this help message and exit -* __-q, --quiet__ print logs with level WARN in stdout, used to prevent any output in stdout -* __--noisy__ print logs with level TRACE in stdout -* __--verbose__ print logs with level DEBUG in stdout -* __--version__ show program's version number and exit, [setuptools](#InstallationSetuptools) python package has be installed to run it successfully - -* __--proxy-server=PROXY_SERVER__ Proxy server (url) used to contact Motu -* __--proxy-user=PROXY_USER__ Proxy user name (string) -* __--proxy-pwd=PROXY_PWD__ Proxy password (string) - -* __--auth-mode=AUTH_MODE__ the authentication mode: [default: cas] - * __none__ for no authentication - * __basic__ for basic authentication - * __cas__ for Central Authentication Service -* __-u USER, --user=USER__ User name (string) for the specified authentication mode -* __-p PWD, --pwd=PWD__ the user password (string) for the specified authentication mode. Special characters can be used. - * __Example 1__ From a Windows batch, if your password contains a percent character, double the percent character: If password is CMS2017@%! then enter -u username-p CMS2017@%%! - * __Example 2__ From a Windows batch, if your password contains a space character, set password between double quotes: If password is CMS2017 @%! then enter -u username-p "CMS2017 @%%!" - * __Example 3__ From a Linux shell, if your password contains a space character, set password between simple quotes: If password is CMS2017 @%! then enter -u username-p 'CMS2017 @%!' - -* __-m MOTU, --motu=MOTU__ Motu server url, e.g. "-m http://localhost:8080/motu-web/Motu" -* __-s SERVICE_ID, --service-id=SERVICE_ID__ The service identifier (string), e.g. -s Mercator_Ocean_Model_Global-TDS -* __-d PRODUCT_ID, --product-id=PRODUCT_ID__ The product (data set) to download (string), e.g. -d dataset-mercator-psy4v3-gl12-bestestimate-uv -* __-t DATE_MIN, --date-min=DATE_MIN__ The min date with optional hour resolution (string following format YYYY-MM-DD [HH:MM:SS]), e.g. -t "2016-06-10" or -t "2016-06-10 12:00:00". Be careful to not forget double quotes around the date. -* __-T DATE_MAX, --date-max=DATE_MAX__ The max date with optional hour resolution (string following format YYYY-MM-DD [HH:MM:SS ]), e.g. -T "2016-06-11" or -T "2016-06-10 12:00:00". Be careful to not forget double quotes around the date. -* __-y LATITUDE_MIN, --latitude-min=LATITUDE_MIN__ The min latitude (float in the interval [-90 ; 90 ]), e.g. -y -80.5 -* __-Y LATITUDE_MAX, --latitude-max=LATITUDE_MAX__ The max latitude (float in the interval [-90 ; 90 ]), e.g. -Y 80.5 -* __-x LONGITUDE_MIN, --longitude-min=LONGITUDE_MIN__ The min longitude (float in the interval [-180 ; 180 ]), e.g. -x -180 -* __-X LONGITUDE_MAX, --longitude-max=LONGITUDE_MAX__ The max longitude (float in the interval [-180 ; 180 ]), e.g. -X 35.5 -* __-z DEPTH_MIN, --depth-min=DEPTH_MIN__ The min depth (float in the interval [0 ; 2e31 ] or string 'Surface'), e.g. -z 0.49 -* __-Z DEPTH_MAX, --depth-max=DEPTH_MAX__ The max depth (float in the interval [0 ; 2e31 ] or string 'Surface'), e.g. -Z 0.50 -* __-v VARIABLE, --variable=VARIABLE__ The variable (list of strings), e.g. -v salinity -v sst -* __-S, --sync-mode__ Sets the download mode to synchronous (not recommended). If this parameter is set, Motu server is called with parameter [console](https://github.com/clstoulouse/motu#download-product). Otherwise -, Motu server is called with parameter [status](https://github.com/clstoulouse/motu#download-product). - - -* __-o OUT_DIR, --out-dir=OUT_DIR__ The output dir where result (download file) is written (string). If it starts with "console", behaviour is the same as with --console-mode. -* __-f OUT_NAME, --out-name=OUT_NAME__ The output file name (string) -* __--console-mode__ Write result on stdout. In case of an extraction, write the nc file http URL where extraction result can be downloaded. In case of a getSize or a describeProduct request, display the XML result. - -* __-D, --describe-product__ Get all updated information on a dataset. Output is in XML format, [API details](https://github.com/clstoulouse/motu#describe-product) -* __--size__ Get the size of an extraction. Output is in XML format, [API details](https://github.com/clstoulouse/motu#get-size) - -* __--block-size=BLOCK_SIZE__ The block used to download file (integer expressing bytes), default=65535 bytes -* __--socket-timeout=SOCKET_TIMEOUT__ Set a timeout on blocking socket operations (float expressing seconds) -* __--user-agent=USER_AGENT__ Set the identification string (user-agent) for HTTP requests. By default this value is 'Python-urllib/x.x' (where x.x is the version of the python interpreter) - - -# <a name="UsageExamples">Usage examples</a> -In the following examples, variable ${MOTU\_USER} and ${MOTU\_PASSWORD} are user name and user password used to connect to the CAS server for single sign on. -${MOTU\_SERVER\_URL} is the URL on the MOTU HTTP(s) server. For example http://localhost:8080/motu-web/Motu. -Commands "./motuclient.py" has to be replaced by "python -m motuclient" if it has been installed with [PIP method](#UsagePIP). - - -## <a name="UsageExamplesDownload">Download</a> -### Download and save extracted file on the local machine -This command writes the extraction result data in file: /data/test.nc - -``` -./motuclient.py --verbose --auth-mode=none -m ${MOTU_SERVER_URL} -s HR_MOD_NCSS-TDS -d HR_MOD -z 0.49 -Z 0.50 -x -70 -X 25 -y -75 -Y 10 -t "2016-06-10" -T "2016-06-11" -v salinity -o /data -f test.nc -``` - -### Display on stdout the HTTP(s) URL of the NC file available on the Motu server -The HTTP(s) URL is displayed on stdout. This URL is a direct link to the file which is available to be downloaded. - -``` -./motuclient.py --quiet --auth-mode=cas -u ${MOTU_USER} -p ${MOTU_PASSWORD} -m ${MOTU_SERVER_URL} -s HR_MOD_NCSS-TDS -d HR_MOD -z 0.49 -Z 0.50 -x -70 -X 25 -y -75 -Y 10 -t "2016-06-10" -T "2016-06-11" -v salinity -o console -``` - -## <a name="UsageExamplesGetSize">GetSize</a> -See [https://github.com/clstoulouse/motu#ClientAPI_GetSize](https://github.com/clstoulouse/motu#ClientAPI_GetSize) for more details about XML result. - -### Get the XML file which contains the extraction size on the local machine -``` -./motuclient.py --size --auth-mode=cas -u ${MOTU_USER} -p ${MOTU_PASSWORD} -m ${MOTU_SERVER_URL} -s HR_MOD_NCSS-TDS -d HR_MOD -z 0.49 -Z 0.50 -x -70 -X 25 -y -75 -Y 10 -t "2016-06-10" -T "2016-06-11" -v salinity -o /data -f getSizeResult.xml -``` - -### Display the extraction size as XML on stdout -``` -./motuclient.py --quiet --size --auth-mode=cas -u ${MOTU_USER} -p ${MOTU_PASSWORD} -m ${MOTU_SERVER_URL} -s HR_MOD_NCSS-TDS -d HR_MOD -z 0.49 -Z 0.50 -x -70 -X 25 -y -75 -Y 10 -t "2016-06-10" -T "2016-06-11" -v salinity -o console -``` - - -## <a name="UsageExamplesDescribeProduct">DescribeProduct</a> -See [https://github.com/clstoulouse/motu#describe-product](https://github.com/clstoulouse/motu#describe-product) for more details about XML result. - -### Get the XML file which contains the dataset description on the local machine -``` -./motuclient.py -D --auth-mode=cas -u ${MOTU_USER} -p ${MOTU_PASSWORD} -m ${MOTU_SERVER_URL} -s HR_MOD_NCSS-TDS -d HR_MOD -o /data -f describeProductResult.xml -``` - -### Display the dataset description XML result on stdout -``` -./motuclient.py --quiet -D --auth-mode=cas -u ${MOTU_USER} -p ${MOTU_PASSWORD} -m ${MOTU_SERVER_URL} -s HR_MOD_NCSS-TDS -d HR_MOD -o console -``` - - - - -# <a name="Licence">Licence</a> -This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -# <a name="Troubleshooting">Troubleshooting</a> -# <a name="TroubleshootingPIPCache">Unable to download the latest version watched on GitHub from PIP</a> -Example: -``` -pip install motuclient -Collecting motuclient - Using cached https://test-files.pythonhosted.org/packages/4a/7d/41c3bdd973baf119371493c193248349c9b7107477ebf343f3889cabbf48/motuclient-X.Y.Z.zip -Installing collected packages: motuclient - Running setup.py install for motuclient ... done -Successfully installed motuclient-X.Y.Z -``` - -Clear your PIP cache: On Windows, delete the folder %HOMEPATH%/pip. On archlinux pip cache is located at ~/.cache/pip. -After re run the command: -``` -pip install motuclient -Collecting motuclient - Using https://test-files.pythonhosted.org/packages/4a/7d/41c3bdd973baf119371493c193248349c9b7107477ebf343f3889cabbf48/motuclient-X.Y.Z.zip -Installing collected packages: motuclient - Running setup.py install for motuclient ... done -Successfully installed motuclient-X.Y.Z -``` - -# <a name="TroubleshootingWinArgErr">From Windows, Parameter error</a> -From Windows, the command "motuclient.py --version" returns an error. -10:44:24 [ERROR] Execution failed: [Excp 13] User (option 'user') is mandatory when 'cas' authentication is set. Please provide it. - -__Analyse:__ -This issue comes from the fact that Windows command line does not pass parameters to python command. - -__Solution:__ -``` -Edit the Windows Registry Key "HKEY_CLASSES_ROOT\py_auto_file\shell\open\command" and append at the end of the value %* -Exemple: "C:\dvltSoftware\python\Python27\python.exe" "%1" %* -``` - diff --git a/Forecast_tools/motuclient-python/motu-client.py b/Forecast_tools/motuclient-python/motu-client.py deleted file mode 100755 index 623f3587..00000000 --- a/Forecast_tools/motuclient-python/motu-client.py +++ /dev/null @@ -1,28 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Deprecated -# Only for retrocompatibility of Motu <= v1.7 -import logging -import motuclient - -deprecatedWarnMsg='"motu-client" module is deprecated since version1.8. A new Python module named "motuclient" without a dash separator between motu and client shall be used instead of "motu-client".' -motuclient.initLogger() -motuclient.log.warn( deprecatedWarnMsg ) - - -def get_client_version(): - #motuclient.log.warn( deprecatedWarnMsg + 'e.g. motuclient.get_client_version()') - return motuclient.get_client_version() - -def get_client_artefact(): - #motuclient.log.warn( deprecatedWarnMsg + ', e.g. motuclient.get_client_artefact()') - return motuclient.get_client_artefact() - -def main(): - #motuclient.log.warn( deprecatedWarnMsg + ', e.g. motuclient.main()') - motuclient.main() - -if __name__ == '__main__': - #motuclient.log.warn( deprecatedWarnMsg + ', e.g. motuclient.main()') - motuclient.main() \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/__init__.py b/Forecast_tools/motuclient-python/motu_utils/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/Forecast_tools/motuclient-python/motu_utils/cfg/log.ini b/Forecast_tools/motuclient-python/motu_utils/cfg/log.ini deleted file mode 100755 index ff8a4ee6..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/cfg/log.ini +++ /dev/null @@ -1,24 +0,0 @@ -[loggers] -keys=root - -[handlers] -keys=console - -[formatters] -keys=default - -[logger_root] -level=NOTSET -handlers=console -qualname=motuclient - -[handler_console] -class=StreamHandler -level=NOTSET -formatter=default -args=(sys.stdout,) -stream=sys.stdout - -[formatter_default] -format=%(asctime)s.%(msecs)03d [%(levelname)5s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/cfg/messages.properties b/Forecast_tools/motuclient-python/motu_utils/cfg/messages.properties deleted file mode 100755 index 1b73d07e..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/cfg/messages.properties +++ /dev/null @@ -1,17 +0,0 @@ -motuclient.exception.option.mandatory=[Excp 1] Option '%s' is mandatory. Please provide it. -motuclient.exception.option.mandatory.user=[Excp 13] User (option '%s') is mandatory when '%s' authentication is set. Please provide it. -motuclient.exception.option.mandatory.mode=[Excp 17] Authentication mode other than '%s' (option '%s') is mandatory when a user ('%s') is set. Please provide it. -motuclient.exception.option.mandatory.password=[Excp 14] Password (option '%s') is mandatory for user '%s'. Please provide it. -motuclient.exception.option.outdir-notexist=[Excp 2] The given output directory '%s' does not exist. -motuclient.exception.option.outdir-notwritable=[Excp 3] The given output directory (%s) is not writable. -motuclient.exception.option.not-url=[Excp 4] Option '%s' has a bad url scheme "%s". -motuclient.exception.option.linked=[Excp 5] Option '%s' and '%s' must be provided both, or none. -motuclient.exception.option.out-of-range=[Excp 6] Option '%s' is out of range for value '%s'. -motuclient.exception.option.invalid=[Excp 12] Value '%s' is not valid for option '%s'. Expected one of %s. -motuclient.exception.option.geographic-box=[Excp 7] Geographic coverage is not fully defined. Missing '%s' parameters. -motuclient.exception.authentication.unfound-url=[Excp 8] CAS Url Server can't be found in '%s'. Check the contacted service use CAS for authentication. -motuclient.exception.authentication.not-redirected=[Excp 15] Service '%s' seems to not have been redirected to the CAS service. Check the contacted service use CAS for authentication. -motuclient.exception.authentication.redirected=[Excp 16] Service '%s' seems to have been redirected to the CAS service ('%s'). Check the contacted service doesn't need a CAS authentication first. -motuclient.exception.authentication.tgt=[Excp 9] Unable to retrieve the Ticket Granting Ticket (TGT) when authenticating with CAS mode. -motuclient.exception.motu.error=[Excp 10] Motu server failed to process the request. Response returned is the following: '%s'. -motuclient.exception.download.too-short=[Excp 11] "Dataset retrival incomplete. Got only %i out of %i bytes. \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/motu_api.py b/Forecast_tools/motuclient-python/motu_utils/motu_api.py deleted file mode 100755 index 21600cd8..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/motu_api.py +++ /dev/null @@ -1,652 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -import sys - - -if sys.version_info > (3, 0): - import urllib.request, urllib.error - from urllib.request import BaseHandler - from urllib.parse import unquote, quote_plus, urlparse -else: - from urllib import quote_plus, quote - from urlparse import urlparse - - -import os -import re -import datetime -import time -import socket -from xml.dom import minidom -from pkg_resources import get_distribution - -# Import project libraries -from motu_utils import utils_http, utils_stream, utils_cas, utils_log, utils_messages, utils_unit, \ - stop_watch, pom_version -from motu_utils import utils_collection -import logging - -# constant for authentication modes -AUTHENTICATION_MODE_NONE = 'none' -AUTHENTICATION_MODE_BASIC = 'basic' -AUTHENTICATION_MODE_CAS = 'cas' - -# constant for date time string format -DATETIME_FORMAT = "%Y-%m-%d% %H:%M:%S" - - -# shared logger -log = None - -def get_client_version(): - """Return the version (as a string) of this client. - - The value is automatically set by the maven processing build, so don't - touch it unless you know what you are doing.""" - version = 'unknown' - try: - version = get_distribution('motuclient').version - except: - version = pom_version.getPOMVersion() - return version - -def get_client_artefact(): - """Return the artifact identifier (as a string) of this client. - - The value is automatically set by the maven processing build, so don't - touch it unless you know what you are doing.""" - return 'motuclient-python' - -def build_params(_options): - """Function that builds the query string for Motu according to the given options""" - temporal = '' - geographic = '' - vertical = '' - other_opt = '' - - """ - Build the main url to connect to - """ - query_options = utils_collection.ListMultimap() - - # describeProduct in XML format (sync) / productDownload (sync/async) - if _options.describe: - query_options.insert( action = 'describeProduct', - service = _options.service_id, - product = _options.product_id - ) - elif _options.size: - query_options.insert( action = 'getSize', - service = _options.service_id, - product = _options.product_id - ) - else: - # synchronous/asynchronous mode - if _options.sync: - log.info('Synchronous mode set') - query_options.insert( action = 'productdownload', - scriptVersion = quote_plus(get_client_version()), - mode = 'console', - service = _options.service_id, - product = _options.product_id - ) - else: - log.info('Asynchronous mode set') - query_options.insert( action = 'productdownload', - scriptVersion = quote_plus(get_client_version()), - mode = 'status', - service = _options.service_id, - product = _options.product_id - ) - - # geographical parameters - if _options.extraction_geographic: - query_options.insert( x_lo = _options.longitude_min, - x_hi = _options.longitude_max, - y_lo = _options.latitude_min, - y_hi = _options.latitude_max - ) - - if _options.extraction_vertical: - query_options.insert( z_lo = _options.depth_min, - z_hi = _options.depth_max - ) - - if _options.extraction_output: - query_options.insert(output=_options.outputWritten) - else: - query_options.insert(output="netcdf") - - if _options.extraction_temporal: - # date are strings, and they are send to Motu "as is". If not, we convert them into string - if _options.date_min is not None or _options.date_min != None: - date_min = _options.date_min - if not isinstance(date_min, str): - date_min = date_min.strftime(DATETIME_FORMAT) - query_options.insert( t_lo = date_min ) - - if _options.date_max is not None or _options.date_max != None: - date_max = _options.date_max - if not isinstance(date_max, str): - date_max = date_max.strftime(DATETIME_FORMAT) - query_options.insert( t_hi = date_max ) - - variable = _options.variable - if variable is not None: - for i, opt in enumerate(variable): - query_options.insert( variable = opt ) - - - if _options.console_mode or _options.out_dir.startswith("console") : - query_options.insert(mode="console") - - return utils_http.encode(query_options) - -def check_options(_options): - """function that checks the given options for coherency.""" - - # Check Mandatory Options - if (_options.auth_mode != AUTHENTICATION_MODE_NONE and - _options.auth_mode != AUTHENTICATION_MODE_BASIC and - _options.auth_mode != AUTHENTICATION_MODE_CAS): - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.invalid'] % (_options.auth_mode, 'auth-mode', [AUTHENTICATION_MODE_NONE, AUTHENTICATION_MODE_BASIC, AUTHENTICATION_MODE_CAS])) - - # if authentication mode is set we check both user & password presence - if (_options.user == None and - _options.auth_mode != AUTHENTICATION_MODE_NONE): - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.mandatory.user'] % ('user', _options.auth_mode)) - - # check that if a user is set, a password should be set also - if (_options.pwd == None and - _options.user != None): - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.mandatory.password'] % ('pwd', _options.user)) - - #check that if a user is set, an authentication mode should also be set - if (_options.user != None and - _options.auth_mode == AUTHENTICATION_MODE_NONE): - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.mandatory.mode'] % (AUTHENTICATION_MODE_NONE, 'auth-mode', _options.user)) - - # those following parameters are required - if _options.motu == None : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.mandatory'] % 'motu') - - if _options.service_id == None : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.mandatory'] % 'service-id') - - if _options.product_id == None : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.mandatory'] % 'product-id') - - if _options.out_dir == None : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.mandatory'] % 'out-dir') - - out_dir = _options.out_dir - if not out_dir.startswith("console"): - # check directory existence - if not os.path.exists(out_dir): - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.option.outdir-notexist'] % out_dir) - # check whether directory is writable or not - if not os.access(out_dir, os.W_OK): - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.option.outdir-notwritable'] % out_dir) - - if _options.out_name == None : - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.option.mandatory'] % 'out-name') - - # Check PROXY Options - _options.proxy = False - if (_options.proxy_server != None) and (len(_options.proxy_server) != 0): - _options.proxy = True - # check that proxy server is a valid url - url = _options.proxy_server - p = re.compile('^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?') - m = p.match(url) - - if not m : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.not-url'] % ('proxy-server', url)) - # check that if proxy-user is defined then proxy-pwd shall be also, and reciprocally. - if (_options.proxy_user != None) != ( _options.proxy_pwd != None ) : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.linked'] % ('proxy-user', 'proxy-name')) - - - # Check VERTICAL Options - _options.extraction_vertical = False - if _options.depth_min != None or _options.depth_max != None : - _options.extraction_vertical = True - - # Check TEMPORAL Options - _options.extraction_temporal = False - if _options.date_min != None or _options.date_max != None : - _options.extraction_temporal = True - - #Check OUTPUT Options - _options.extraction_output = False - if _options.outputWritten != None : - _options.extraction_output = True - - # Check GEOGRAPHIC Options - _options.extraction_geographic = False - if _options.latitude_min != None or _options.latitude_max != None or _options.longitude_min != None or _options.longitude_max != None : - _options.extraction_geographic = True - if( _options.latitude_min == None ): - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.option.geographic-box'] % 'latitude_min') - - if( _options.latitude_max == None ): - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.option.geographic-box'] % 'latitude_max') - - if( _options.longitude_min == None ): - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.option.geographic-box'] % 'longitude_min') - - if( _options.longitude_max == None ): - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.option.geographic-box'] % 'longitude_max') - - tempvalue = float(_options.latitude_min) - if tempvalue < -90 or tempvalue > 90 : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.out-of-range'] % ('latitude_min', str(tempvalue))) - tempvalue = float(_options.latitude_max) - if tempvalue < -90 or tempvalue > 90 : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.out-of-range'] % ('latitude_max', str(tempvalue))) - tempvalue = float(_options.longitude_min) - tempvalue = normalize_longitude(tempvalue) - if tempvalue < -180 or tempvalue > 180 : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.out-of-range'] % ('logitude_min', str(tempvalue))) - tempvalue = float(_options.longitude_max) - tempvalue = normalize_longitude(tempvalue) - if tempvalue < -180 or tempvalue > 180 : - raise Exception(utils_messages.get_external_messages()['motuclient.exception.option.out-of-range'] % ('longitude_max', str(tempvalue))) - -def normalize_longitude(lon): - if lon > 180: - while lon > 180: - lon -= 360 - elif lon < -180: - while lon < -180: - lon += 360 - return lon - -def total_seconds(td): - return total_milliseconds(td) / 10**3 - -def total_milliseconds(td): - return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**3 - -def get_url_config(_options, data = None): - # prepare arguments - kargs = {} - # proxy - if _options.proxy: - #proxyUrl = _options.proxy_server.partition(':') - proxyUrl = urlparse(_options.proxy_server) - kargs['proxy'] = { "scheme": proxyUrl.scheme, - "netloc": proxyUrl.netloc } - if _options.proxy_user != None: - kargs['proxy']['user'] = _options.proxy_user - kargs['proxy']['password'] = _options.proxy_pwd - # authentication - if _options.auth_mode == AUTHENTICATION_MODE_BASIC: - kargs['authentication'] = { 'mode' : 'basic', - 'user' : _options.user, - 'password': _options.pwd } - # headers - kargs['headers'] = {"X-Client-Id" : get_client_artefact(), - "X-Client-Version": quote_plus(get_client_version())} - # data - if data != None: - kargs['data'] = data - - return kargs - -def get_requestUrl(dl_url, server, _options, **options): - """ Get the request url.""" - stopWatch = stop_watch.localThreadStopWatch() - start_time = datetime.datetime.now() - stopWatch.start('get_request') - log.info( "Requesting file to download (this can take a while)..." ) - - # Get request id - m = utils_http.open_url(dl_url, **options) - responseStr = m.read() - dom = minidom.parseString(responseStr) - node = dom.getElementsByTagName('statusModeResponse')[0] - status = node.getAttribute('status') - if status == "2": - msg = node.getAttribute('msg') - log.error(msg) - get_req_url = None - else: - requestId = node.getAttribute('requestId') - # Get request url - get_req_url = server + '?action=getreqstatus&requestid=' + requestId + "&service=" + _options.service_id + "&product=" + _options.product_id - - stopWatch.stop('get_request') - - return get_req_url - -def wait_till_finished(reqUrlCAS, **options): - stopWatch = stop_watch.localThreadStopWatch() - start_time = datetime.datetime.now() - - -lastProgressPercentValue=0.0 - -def dl_2_file(dl_url, fh, block_size = 65535, isADownloadRequest = None, **options): - """ Download the file with the main url (of Motu) file. - - Motu can return an error message in the response stream without setting an - appropriate http error code. So, in that case, the content-type response is - checked, and if it is text/plain, we consider this as an error. - - dl_url: the complete download url of Motu - fh: file handler to use to write the downstream""" - - stopWatch = stop_watch.localThreadStopWatch() - start_time = datetime.datetime.now() - lastProgressPercentValue=0.0 - log.info("Downloading file (this can take a while)..." ) - - # download file - temp = None - if not fh.startswith("console"): - temp = open(fh, 'w+b') - - try: - stopWatch.start('processing') - - m = utils_http.open_url(dl_url, **options) - try: - # check the real url (after potential redirection) is not a CAS Url scheme - match = re.search(utils_cas.CAS_URL_PATTERN, m.url) - if match is not None: - service, _, _ = dl_url.partition('?') - redirection, _, _ = m.url.partition('?') - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.authentication.redirected'] % (service, redirection)) - - # check that content type is not text/plain - headers = m.info() - if "Content-Type" in headers and len(headers['Content-Type']) > 0 and isADownloadRequest and (headers['Content-Type'].startswith('text') or headers['Content-Type'].find('html') != -1): - raise Exception(utils_messages.get_external_messages()['motuclient.exception.motu.error'] % m.read()) - - log.info( 'File type: %s' % headers['Content-Type'] ) - # check if a content length (size of the file) has been send - size = -1 - if "Content-Length" in headers: - try: - # it should be an integer - size = int(headers["Content-Length"]) - log.info( 'File size: %s (%i B)' % (utils_unit.convert_bytes(size), size)) - except Exception as e: - size = -1 - log.warn( 'File size is not an integer: %s' % headers["Content-Length"] ) - elif temp is not None: - log.warn( 'File size: %s' % 'unknown' ) - - processing_time = datetime.datetime.now(); - stopWatch.stop('processing') - stopWatch.start('downloading') - - # performs the download - log.info( 'Downloading file %s' % os.path.abspath(fh) ) - - def progress_function(sizeRead): - global lastProgressPercentValue - percent = sizeRead*100./size - if percent - lastProgressPercentValue> 1 or (lastProgressPercentValue != 100 and percent >= 100) : - log.info( "- %s (%.1f%%)", utils_unit.convert_bytes(size).rjust(8), percent) - lastProgressPercentValue = percent - - def none_function(sizeRead): - global lastProgressPercentValue - percent = 100 - log.info( "- %s (%.1f%%)", utils_unit.convert_bytes(size).rjust(8), percent) - lastProgressPercentValue = percent - - if temp is not None: - read = utils_stream.copy(m, temp, progress_function if size != -1 else none_function, block_size) - else: - if isADownloadRequest: - #Console mode, only display the NC file URL on stdout - read = len(m.url) - print((m.url)) - else: - import io - output = io.StringIO() - utils_stream.copy(m, output, progress_function if size != -1 else none_function, block_size) - read = len(output.getvalue()) - print((output.getvalue())) - - end_time = datetime.datetime.now() - stopWatch.stop('downloading') - - log.info( "Processing time : %s", str(processing_time - init_time) ) - log.info( "Downloading time : %s", str(end_time - processing_time) ) - log.info( "Total time : %s", str(end_time - init_time) ) - log.info( "Download rate : %s/s", utils_unit.convert_bytes((read / total_milliseconds(end_time - start_time)) * 10 ** 3)) - finally: - m.close() - finally: - if temp is not None: - temp.flush() - temp.close() - - # raise exception if actual size does not match content-length header - if temp is not None and size >= 0 and read < size: - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.download.too-short'] % (read, size)) - -def execute_request(_options): - """ - the main function that submit a request to motu. Available options are: - - * Proxy configuration (with eventually user credentials) - - proxy_server: 'http://my-proxy.site.com:8080' - - proxy_user : 'john' - - proxy_pwd :'doe' - - * Autorisation mode: 'cas', 'basic', 'none' - - auth_mode: 'cas' - - * User credentials for authentication 'cas' or 'basic' - - user: 'john' - - pwd: 'doe' - - * Motu service URL - - motu: 'http://atoll-dev.cls.fr:30080/mis-gateway-servlet/Motu' - - * Dataset identifier to download - - product_id: 'dataset-duacs-global-nrt-madt-merged-h' - - * Service identifier to use for retrieving dataset - - service_id: 'http://purl.org/myocean/ontology/service/database#yourduname' - - * Geographic extraction parameters - - latitude_max : 10.0 - - latitude_min : -10.0 - - longitude_max: -0.333333333369 - - longitude_min: 0.0 - - * Vertical extraction parameters - - depth_max: 1000 - - depth_min: 0 - - * Temporal extraction parameters, as a datetime instance or a string (format: '%Y-%m-%d %H:%M:%S') - - date_max: 2010-04-25 12:05:36 - - date_min: 2010-04-25 - - * Variable extraction - - variable: ['variable1','variable2'] - - * The file name and the directory of the downloaded dataset - - out_dir : '.' - - out_name: 'dataset' - - * The block size used to perform download - - block_size: 12001 - - * The socket timeout configuration - - socket_timeout: 515 - - * The user agent to use when performing http requests - - user_agent: 'motu-api-client' - - """ - global log - global init_time - - init_time = datetime.datetime.now() - stopWatch = stop_watch.localThreadStopWatch() - stopWatch.start() - try: - log = logging.getLogger("motu_api") - - # at first, we check given options are ok - check_options(_options) - - # print some trace info about the options set - log.log(utils_log.TRACE_LEVEL, '-' * 60) - - for option in dir(_options): - if not option.startswith('_'): - log.log(utils_log.TRACE_LEVEL, "%s=%s" % (option, getattr(_options, option))) - - log.log(utils_log.TRACE_LEVEL, '-' * 60) - - # start of url to invoke - url_service = _options.motu - - # parameters of the invoked service - url_params = build_params(_options) - - url_config = get_url_config(_options) - - # check if question mark is in the url - questionMark = '?' - if url_service.endswith(questionMark) : - questionMark = '' - url = url_service+questionMark+url_params - - if _options.describe == True or _options.size == True: - _options.out_name = _options.out_name.replace('.nc','.xml') - - # set-up the socket timeout if any - if _options.socket_timeout != None: - log.debug("Setting timeout %s" % _options.socket_timeout) - socket.setdefaulttimeout(_options.socket_timeout) - - if _options.auth_mode == AUTHENTICATION_MODE_CAS: - stopWatch.start('authentication') - # perform authentication before acceding service - download_url = utils_cas.authenticate_CAS_for_URL(url, - _options.user, - _options.pwd, **url_config) - url_service = download_url.split("?")[0] - stopWatch.stop('authentication') - else: - # if none, we do nothing more, in basic, we let the url requester doing the job - download_url = url - - # create a file for storing downloaded stream - fh = os.path.join(_options.out_dir,_options.out_name) - if _options.console_mode: - fh = "console" - - try: - # Synchronous mode - if _options.sync == True or _options.describe == True or _options.size == True: - is_a_download_request=False - if _options.describe == False and _options.size == False: - is_a_download_request=True - dl_2_file(download_url, fh, _options.block_size, is_a_download_request, **url_config) - log.info( "Done" ) - # Asynchronous mode - else: - stopWatch.start('wait_request') - requestUrl = get_requestUrl(download_url, url_service, _options, **url_config) - - if requestUrl != None: - # asynchronous mode - status = 0 - dwurl = "" - msg = "" - - while True: - if _options.auth_mode == AUTHENTICATION_MODE_CAS: - stopWatch.start('authentication') - # perform authentication before acceding service - requestUrlCas = utils_cas.authenticate_CAS_for_URL(requestUrl, - _options.user, - _options.pwd, **url_config) - stopWatch.stop('authentication') - else: - # if none, we do nothing more, in basic, we let the url requester doing the job - requestUrlCas = requestUrl - - - m = utils_http.open_url(requestUrlCas, **url_config) - motu_reply=m.read() - dom = minidom.parseString(motu_reply) - - for node in dom.getElementsByTagName('statusModeResponse'): - status = node.getAttribute('status') - dwurl = node.getAttribute('remoteUri') - msg = node.getAttribute('msg') - - # Check status - if status == "0" or status == "3": # in progress/pending - log.info('Product is not yet available (request in progress)') - time.sleep(10) - else: # finished (error|success) - break - - if status == "2": - log.error(msg) - if status == "1": - log.info('The product is ready for download') - if dwurl != "": - dl_2_file(dwurl, fh, _options.block_size, not (_options.describe or _options.size), **url_config) - log.info( "Done" ) - else: - log.error("Couldn't retrieve file") - - stopWatch.stop('wait_request') - - except: - try: - if (os.path.isfile(fh)): - os.remove(fh) - except: - pass - raise - finally: - stopWatch.stop() \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/pom_version.py b/Forecast_tools/motuclient-python/motu_utils/pom_version.py deleted file mode 100755 index 958faea7..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/pom_version.py +++ /dev/null @@ -1,25 +0,0 @@ -from xml.etree import ElementTree -import os - -def getPOMVersion(): - version="Unknown" - try: - # For production tree, while run from cur folder - abspath = os.path.abspath(__file__) - dname = os.path.dirname(abspath) - version = __getPOMVersion(os.path.join(dname, "..", "pom.xml") ) - except: - # For development tree - try: - version = __getPOMVersion(os.path.join(dname, "..", "..", "pom.xml") ) - except : - version = __getPOMVersion(os.path.join(dname, "..", "..", "..", "pom.xml") ) - finally: - return version - -def __getPOMVersion(POM_FILE): - namespaces = {'xmlns' : 'http://maven.apache.org/POM/4.0.0'} - tree = ElementTree.parse(POM_FILE) - root = tree.getroot() - version = root.find("xmlns:version", namespaces=namespaces) - return str(version.text) \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/stop_watch.py b/Forecast_tools/motuclient-python/motu_utils/stop_watch.py deleted file mode 100755 index fe294f03..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/stop_watch.py +++ /dev/null @@ -1,107 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -from threading import Thread, local - -import time -import threading - -# global stats -tsl = local() - -class StopWatch(object): - TIME = "time" - GLOBAL = "global" - - def __init__(self): - # contains the computed times - self.times = {} - # contains the current timers - self.timers = {} - - def clear(self): - self.timers = {} - self.times = {} - - def start(self,label = GLOBAL): - """Starts a new counter - Returns the time the counter has been recorded. - """ - self.timers[label] = self.__time() - return self.timers[label] - - def stop(self,label=GLOBAL): - """Stops the clock for the given counter. - Returns the time at which the instance was stopped. - """ - self.times[label] = self.elapsed(label) - del self.timers[label] - - return self.times[label] - - def isRunning(self, label=GLOBAL): - return label in self.timers - - def elapsed(self,label=GLOBAL): - """The number of seconds since the current time that the StopWatch - object was created. If stop() was called, it is the number - of seconds from the instance creation until stop() was called. - """ - t0 = self.times[label] if label in self.times else 0. - t1 = self.timers[label] if label in self.timers else 0. - t2 = self.__time() if label in self.timers else 0. - - return t0 + (t2 - t1) - - def getTimes(self): - return self.times - - def __time(self): - """Wrapper for time.time() to allow unit testing. - """ - return time.time() - - def __str__(self): - """Nicely format the elapsed time - """ - keys = list(self.times.keys()) + [x for x in list(self.timers.keys()) if x not in list(self.times.keys())] - txt = "" - for key in keys: - txt = txt + key + " : " + str(self.elapsed(key)) + " s " + ("(running)" if self.isRunning(key) else "(stopped)")+"\n" - return txt - -def localThreadStopWatch(): - if not hasattr(tsl,'timer'): - lock = threading.Lock() - lock.acquire() - try: - if not hasattr(tsl,'timer'): - tsl.timer = StopWatch() - finally: - lock.release() - return tsl.timer \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_cas.py b/Forecast_tools/motuclient-python/motu_utils/utils_cas.py deleted file mode 100755 index e59de858..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_cas.py +++ /dev/null @@ -1,152 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -import logging -import re -import sys - - -if sys.version_info > (3, 0): - import urllib.request, urllib.error - from urllib.parse import parse_qs, urlparse, quote, quote_plus -else: - from urllib import quote_plus, quote - from urlparse import urlparse, parse_qs - -from motu_utils import utils_http, utils_log, utils_html, utils_messages -from motu_utils import utils_collection - - -# pattern used to search for a CAS url within a response -CAS_URL_PATTERN = '(.*)/login.*' - -def authenticate_CAS_for_URL(url, user, pwd, **url_config): - """Performs a CAS authentication for the given URL service and returns - the service url with the obtained credential. - - The following algorithm is done: - 1) A connection is opened on the given URL - 2) We check that the response is an HTTP redirection - 3) Redirected URL contains the CAS address - 4) We ask for a ticket for the given user and password - 5) We ask for a service ticket for the given service - 6) Then we return a new url with the ticket attached - - url: the url of the service to invoke - user: the username - pwd: the password""" - - log = logging.getLogger("utils_cas:authenticate_CAS_for_URL") - - server, sep, options = url.partition( '?' ) - - log.info( 'Authenticating user %s for service %s' % (user,server) ) - - connexion = utils_http.open_url(url, **url_config) - - # connexion response code must be a redirection, else, there's an error (user can't be already connected since no cookie or ticket was sent) - if connexion.url == url: - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.authentication.not-redirected'] % server) - - # find the cas url from the redirected url - redirected_url = connexion.url - p = parse_qs(urlparse(connexion.url).query, keep_blank_values=False) - redirectServiceUrl = p['service'][0] - - - m = re.search(CAS_URL_PATTERN, redirected_url) - - if m is None: - raise Exception( - utils_messages.get_external_messages()['motuclient.exception.authentication.unfound-url'] % redirected_url) - - url_cas = m.group(1) + '/v1/tickets' - - opts = utils_http.encode(utils_collection.ListMultimap(username = quote(user), password = quote(pwd))) - - utils_log.log_url(log, "login user into CAS:\t", url_cas + '?' + opts) - url_config['data']=opts.encode() - try: - connexion = utils_http.open_url(url_cas, **url_config) - except Exception as e: - if e.code == 400: - log.error( """Error: Bad user login or password: - - On *nix OS, you must use the single quote, otherwise it may expand specific characters. - [...] -u 'string' or --user 'string' [...] - - On Windows OS, you must use the double quote, because single quotes are treated literally. - [...] -p "string" or --pwd "string" [...] - """) - - raise e - - fp = utils_html.FounderParser() - for line in connexion: - log.log(utils_log.TRACE_LEVEL, 'utils_html.FounderParser() line: %s', line) - # py3 compatibility - if (isinstance(line, bytes)): - fp.feed(line.decode()) - else: - fp.feed(line) - - tgt = fp.action_[fp.action_.rfind('/') + 1:] - log.log(utils_log.TRACE_LEVEL, 'TGT: %s', tgt) - - # WARNING : don't use 'fp.action_' as url : it seems protocol is always http never https - # use 'url_cas', extract TGT from 'fp.action_' , then construct url_ticket. - # url_ticket = fp.action_ - url_ticket = url_cas + '/' + tgt - - if url_ticket is None: - raise Exception(utils_messages.get_external_messages()['motuclient.exception.authentication.tgt']) - - utils_log.log_url(log, "found url ticket:\t", url_ticket) - - opts = utils_http.encode(utils_collection.ListMultimap(service = quote_plus(redirectServiceUrl))) - - utils_log.log_url(log, 'Granting user for service\t', url_ticket + '?' + opts) - url_config['data']=opts.encode() - - ticket = utils_http.open_url(url_ticket, **url_config).readline() - - # py3 compatibility - if (isinstance(ticket, bytes)): - ticket = ticket.decode() - - utils_log.log_url(log, "found service ticket:\t", ticket) - - # we append the download url with the ticket and return the result - service_url = redirectServiceUrl + '&ticket=' + ticket - - utils_log.log_url(log, "service url is:\t", service_url) - - return service_url - - \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_collection.py b/Forecast_tools/motuclient-python/motu_utils/utils_collection.py deleted file mode 100755 index ab279255..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_collection.py +++ /dev/null @@ -1,110 +0,0 @@ -""" -The multimap data structure associates multiple values to a key. - -In this module the multimap is implemented by a dictionary in which each key is -associated to a container, which can be a list, a dictionary, or a set. - -These containers are created, accessed, and extended using the usual array -notation, e.g. m["a"] = 1, m["a"] = 2 creates a container for key "a" -containing 1 and 2. An item within a container can be removed using the -"remove" method. - -Requires Python 2.7. -""" - -import collections - -class Map(object): - """ Map wraps a dictionary. It is essentially an abstract class from which - specific multimaps are subclassed. """ - def __init__(self): - self._dict = {} - - def __repr__(self): - return "%s(%s)" % (self.__class__.__name__, repr(self._dict)) - - __str__ = __repr__ - - def __getitem__(self, key): - return self._dict[key] - - def __setitem__(self, key, value): - self._dict[key] = value - - def __delitem__(self, key): - del self._dict[key] - - def insert(self, **values): - for k, v in values.items(): - self.__setitem__(k, v) - - def remove(self, key, value): - del self._dict[key] - - def dict(self): - """ Allows access to internal dictionary, if necessary. Caution: multimaps - will break if keys are not associated with proper container.""" - return self._dict - -class ListMultimap(Map): - """ ListMultimap is based on lists and allows multiple instances of same value. """ - def __init__(self, **values): - self._dict = collections.defaultdict(list) - self.insert(**values) - - def __setitem__(self, key, value): - self._dict[key].append(value) - - def remove(self, key, value): - self._dict[key].remove(value) - -class SetMultimap(Map): - """ SetMultimap is based on sets and prevents multiple instances of same value. """ - def __init__(self): - self._dict = collections.defaultdict(set) - - def __setitem__(self, key, value): - self._dict[key].add(value) - - def remove(self, key, value): - self._dict[key].remove(value) - -class DictMultimap(Map): - """ DictMultimap is based on dicts and allows fast tests for membership. """ - def __init__(self): - self._dict = collections.defaultdict(dict) - - def __setitem__(self, key, value): - self._dict[key][value] = True - - def remove(self, key, value): - del self._dict[key][value] - -def test(): - def test_multimap(m): - print("__________________________________") - print(m["a"]) - m["a"] = 1 - m["a"] = 2 - m["a"] = 2 - m["a"] = 3 - m["a"] = 4 - m.insert( b = 'v1', c = 'v2' ) - print(m) - m.remove("a", 4) - print(m) - print(("a" in m.dict())) - print(m["a"]) - m["a"] = 5 - m["b"] = 6 - print(m) - del m["b"] - print(m) - print((3 in m["a"])) - - test_multimap(ListMultimap()) - test_multimap(SetMultimap()) - test_multimap(DictMultimap()) - -if __name__ == "__main__": - test() \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_configpath.py b/Forecast_tools/motuclient-python/motu_utils/utils_configpath.py deleted file mode 100755 index 607a8688..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_configpath.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys -import os - -MOTU_CLIENT_CONFIG_PATH = os.path.join("motu_utils", "cfg") -LINUX_CONFIG_PATH = os.path.join("/usr", "local", MOTU_CLIENT_CONFIG_PATH) -WINDOWS_CONFIG_PATH = os.path.join(sys.prefix, MOTU_CLIENT_CONFIG_PATH) -VIT_ENV_CONFIG_PATH = MOTU_CLIENT_CONFIG_PATH -LOCAL_CONFIG_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "motu_utils", "cfg") - -def getConfigPath(): - if os.path.isdir(LINUX_CONFIG_PATH): - return LINUX_CONFIG_PATH - elif os.path.isdir(WINDOWS_CONFIG_PATH): - return WINDOWS_CONFIG_PATH - elif os.path.isdir(LOCAL_CONFIG_PATH): - return LOCAL_CONFIG_PATH - elif os.path.isdir(VIT_ENV_CONFIG_PATH): - return VIT_ENV_CONFIG_PATH - else: - return "" \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_html.py b/Forecast_tools/motuclient-python/motu_utils/utils_html.py deleted file mode 100755 index 6d6976d1..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_html.py +++ /dev/null @@ -1,48 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -import sys -if sys.version_info > (3, 0): - from html.parser import HTMLParser -else: - from HTMLParser import HTMLParser - - - -class FounderParser(HTMLParser): - """ - Parser witch found the form/action section an return it - """ - def __init__(self, *args, **kargs): - HTMLParser.__init__(self, *args, **kargs) - self.action_ = None - - def handle_starttag(self, tag, attrs): - d = dict(attrs) - if tag == 'form' and 'action' in d: - self.action_ = d['action'] \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_http.py b/Forecast_tools/motuclient-python/motu_utils/utils_http.py deleted file mode 100755 index d3ab68c9..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_http.py +++ /dev/null @@ -1,181 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -import sys - - -if sys.version_info > (3, 0): - import urllib.request, urllib.error - from urllib.request import HTTPCookieProcessor, Request - from urllib.request import HTTPSHandler, HTTPHandler, install_opener, build_opener, \ - HTTPRedirectHandler, ProxyHandler, HTTPBasicAuthHandler, HTTPPasswordMgrWithDefaultRealm - from urllib.request import HTTPErrorProcessor as HTTPErrorProcessor_ - from http.client import HTTPConnection, HTTPSConnection - from http.cookiejar import CookieJar -else: - from httplib import HTTPConnection, HTTPSConnection - from urllib2 import HTTPSHandler, install_opener, build_opener, \ - HTTPRedirectHandler, HTTPRedirectHandler, ProxyHandler, HTTPBasicAuthHandler, \ - HTTPPasswordMgrWithDefaultRealm, HTTPCookieProcessor, HTTPSHandler, HTTPHandler, Request - from urllib2 import HTTPErrorProcessor as HTTPErrorProcessor_ - from cookielib import CookieJar - -from motu_utils import utils_log -import logging -import ssl -import socket - - -class TLS1v2Connection(HTTPSConnection): - """Like HTTPSConnection but more specific""" - def __init__(self, host, **kwargs): - HTTPSConnection.__init__(self, host, **kwargs) - - def connect(self): - """Overrides HTTPSConnection.connect to specify TLS version""" - # Standard implementation from HTTPSConnection, which is not - # designed for extension, unfortunately - sock = socket.create_connection((self.host, self.port), - self.timeout, self.source_address) - if getattr(self, '_tunnel_host', None): - self.sock = sock - self._tunnel() - - # This is the only difference; default wrap_socket uses SSLv23 - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, - ssl_version=ssl.PROTOCOL_TLSv1_2) - -class TLS1v2Handler(HTTPSHandler): - """Like HTTPSHandler but more specific""" - def __init__(self): - HTTPSHandler.__init__(self) - - def https_open(self, req): - return self.do_open(TLS1v2Connection, req) - -# Overide default handler -install_opener(build_opener(TLS1v2Handler())) - - -class HTTPErrorProcessor(HTTPErrorProcessor_): - def https_response(self, request, response): - # Consider error codes that are not 2xx (201 is an acceptable response) - code, msg, hdrs = response.code, response.msg, response.info() - if code >= 300: - response = self.parent.error('http', request, response, code, msg, hdrs) - return response - - -class SmartRedirectHandler(HTTPRedirectHandler): - - def http_error_302(self, req, fp, code, msg, headers): - result = HTTPRedirectHandler.http_error_302( - self, req, fp, code, msg, headers) - result.status = code - return result - - -def open_url(url, **kargsParam): - """open an url and return an handler on it. - arguments can be : - headers : http headers to send - headers = {"Accept": "text/plain", - "User-Agent": "a user agent" - } - - proxy : the proxy to use when connecting to the url - proxy = { "url": "http://aproxy.server", - "port": 8080, - "user": "username", - "password": "userpassword" - } - - authentication: the authentication information - authentication = { "mode": "basic", - "user": "username", - "password": "password" } - """ - data = None - log = logging.getLogger("utils_http:open_url") - kargs = kargsParam.copy() - # common handlers - handlers = [SmartRedirectHandler(), - HTTPCookieProcessor(CookieJar()), - HTTPHandler(), - TLS1v2Handler(), - utils_log.HTTPDebugProcessor(log), - HTTPErrorProcessor() - ] - - # add handlers for managing proxy credentials if necessary - if 'proxy' in kargs: - urlProxy = '' - if 'user' in kargs['proxy']: - urlProxy = kargs['proxy']['user'] + ':' + kargs['proxy']['password'] + '@' - - urlProxy += kargs['proxy']['netloc'] - - handlers.append( ProxyHandler({'http':urlProxy, 'https':urlProxy}) ) - handlers.append( HTTPBasicAuthHandler() ) - - del kargs['proxy'] - - if 'authentication' in kargs: - # create the password manager - #password_mgr = HTTPPasswordMgrWithDefaultRealm(ssl_version=ssl.PROTOCOL_TLSv1) - password_mgr = HTTPPasswordMgrWithDefaultRealm() - urlPart = url.partition('?') - password_mgr.add_password(None, urlPart, kargs['authentication']['user'], kargs['authentication']['password']) - # add the basic authentication handler - handlers.append(HTTPSHandler(password_mgr)) - del kargs['authentication'] - - if 'data' in kargs: - data = kargs['data'] - del kargs['data'] - - _opener = build_opener(*handlers) - log.log(utils_log.TRACE_LEVEL, 'list of handlers:') - for h in _opener.handlers: - log.log(utils_log.TRACE_LEVEL, ' . %s', str(h)) - - # create the request - if( data != None ): - r = Request(url, data, **kargs) - else: - r = Request(url, **kargs) - - # open the url, but let the exception propagates to the caller - return _opener.open(r) - -def encode(options): - opts = [] - for k, vset in options.dict().items(): - for v in vset: - opts.append('%s=%s' % (str(k), str(v).replace('#','%23').replace(' ','%20'))) - return '&'.join(opts) \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_log.py b/Forecast_tools/motuclient-python/motu_utils/utils_log.py deleted file mode 100755 index 0457164d..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_log.py +++ /dev/null @@ -1,94 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - - -import sys -if sys.version_info > (3, 0): - import urllib.request, urllib.error - from urllib.request import BaseHandler - from urllib.parse import unquote -else: - - from urllib2 import BaseHandler - from urllib2 import unquote - - - -import logging - -# trace level -TRACE_LEVEL = 1 - -def log_url(log, message, url, level = logging.DEBUG ): - """Nicely logs the given url. - - Print out the url with the first part (protocol, host, port, authority, - user info, path, ref) and in sequence all the query parameters. - - log: the log into which write the message - message: a message to print before the url - url: the url to log - level: (optional) the log level to use""" - - urls = url.split('?') - log.log( level, message + unquote(urls[0]) ) - if len(urls) > 1: - for a in sorted(urls[1].split('&')): - param = a.split('=') - if( len(param) < 2 ): - param.append('') - log.log( level, ' . %s = %s', unquote(param[0]), unquote(param[1]) ) - - -class HTTPDebugProcessor(BaseHandler): - """ Track HTTP requests and responses with this custom handler. - """ - def __init__(self, log, log_level=TRACE_LEVEL): - self.log_level = log_level - self.log = log - - def http_request(self, request): - host, full_url = request.host, request.get_full_url() - url_path = full_url[full_url.find(host) + len(host):] - log_url ( self.log, "Requesting: ", request.get_full_url(), TRACE_LEVEL ) - self.log.log(self.log_level, "%s %s" % (request.get_method(), url_path)) - - for header in request.header_items(): - self.log.log(self.log_level, " . %s: %s" % header[:]) - - return request - - def http_response(self, request, response): - code, msg, headers = response.code, response.msg, response.info().items() - self.log.log(self.log_level, "Response:") - self.log.log(self.log_level," HTTP/1.x %s %s" % (code, msg)) - - for key, value in headers: - self.log.log(self.log_level, " . %s: %s" % (key, value)) - - return response \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_messages.py b/Forecast_tools/motuclient-python/motu_utils/utils_messages.py deleted file mode 100755 index 1878288f..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_messages.py +++ /dev/null @@ -1,74 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -from motu_utils import utils_configpath -import os, sys -_messages = None - -MESSAGES_FILE = utils_configpath.getConfigPath() + '/messages.properties' - - -def _process_content(content): - propDict = dict() - for propLine in content: - propDef = propLine.strip() - if len(propDef) == 0: - continue - if propDef[0] in ('!', '#'): - continue - punctuation = [propDef.find(c) for c in ':= '] + [len(propDef)] - found = min([pos for pos in punctuation if pos != -1]) - name = propDef[:found].rstrip() - value = propDef[found:].lstrip(":= ").rstrip() - propDict[name] = value - - _messages = propDict - return _messages - - -def _process_file_py3(path): - with open(path) as propFile: - return _process_content(propFile.readlines()) - - -def _process_file_py2(path): - propFile = file(path, "rU") - processed_content = _process_content(propFile) - propFile.close() - return processed_content - - -def get_external_messages(): - """Return a table of externalized messages. - - The table is lazzy instancied (loaded once when called the first time).""" - global _messages - if _messages is None: - if sys.version_info > (3, 0): - return _process_file_py3(MESSAGES_FILE) - return _process_file_py2(MESSAGES_FILE) \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_stream.py b/Forecast_tools/motuclient-python/motu_utils/utils_stream.py deleted file mode 100755 index 27680c66..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_stream.py +++ /dev/null @@ -1,66 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -import io, sys - -def copy(sourceHandler, destHandler, callback = None, blockSize = 65535 ): - """Copy the available content through the given handler to another one. Process - can be monitored with the (optional) callback function. - - sourceHandler: the handler through witch downloading content - destHandler: the handler into which writing data - callback: the callback function called for each block read. Signature: f: sizeRead -> void - blockSize: the size of the block used to read data - - returns the total size read - """ - read = 0 - while 1: - block = sourceHandler.read(blockSize) - exit_condition = '' - if(isinstance(block, bytes)): - exit_condition = b'' - if block == exit_condition: - break - read += len(block) - try: - if type(destHandler) == io.StringIO: - strBlock=str(block) - if sys.version_info > (3, 0): - destHandler.write( str(block, 'utf-8') ) - else: - destHandler.write( unicode(block, 'utf-8') ) - else: - destHandler.write(block) - except Exception as inst: - print(type(inst)) # the exception instance - print(inst.args) # arguments stored in .args - print(inst) - - callback(read) - - return read \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motu_utils/utils_unit.py b/Forecast_tools/motuclient-python/motu_utils/utils_unit.py deleted file mode 100755 index 60a91424..00000000 --- a/Forecast_tools/motuclient-python/motu_utils/utils_unit.py +++ /dev/null @@ -1,47 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - -# SI unit prefixes -SI_K, SI_M, SI_G, SI_T = 10 ** 3, 10 ** 6, 10 ** 9, 10 ** 12 - -def convert_bytes(n): - """Converts the given bytes into a string with the most appropriate - unit power. - - Note that prefixes like M, G, T are power of 10 (ISO/IEC 80000-13:2008) and - not power of 2.""" - if n >= SI_T: - return '%.1f TB' % (float(n) / SI_T) - elif n >= SI_G: - return '%.1f GB' % (float(n) / SI_G) - elif n >= SI_M: - return '%.1f MB' % (float(n) / SI_M) - elif n >= SI_K: - return '%.1f kB' % (float(n) / SI_K) - else: - return '%d B' % n \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/motuclient.py b/Forecast_tools/motuclient-python/motuclient.py deleted file mode 100755 index 35e6b52f..00000000 --- a/Forecast_tools/motuclient-python/motuclient.py +++ /dev/null @@ -1,329 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- -# -# Python motu client -# -# Motu, a high efficient, robust and Standard compliant Web Server for Geographic -# Data Dissemination. -# -# http://cls-motu.sourceforge.net/ -# -# (C) Copyright 2009-2010, by CLS (Collecte Localisation Satellites) - -# http://www.cls.fr - and Contributors -# -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public -# License for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. - - -import sys -from cgi import log -if sys.version_info > (3, 0): - import urllib - import configparser as ConfigParser -else: - import urllib2 as urllib - import ConfigParser - -import traceback -import platform -import sys -import os -import datetime -import logging -import logging.config - -import optparse -from motu_utils import utils_configpath - -# error code to use when exiting after exception catch -ERROR_CODE_EXIT=1 - -# the config file to load from -CFG_FILE = '~/motuclient/motuclient-python.ini' -LOG_CFG_FILE = './motu_utils/cfg/log.ini' - -SECTION = 'Main' - -# shared logger -log = None - -# shared variables to download -_variables = [] - -# project libraries path -LIBRARIES_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'motu_utils') -# Manage imports of project libraries -if not os.path.exists(LIBRARIES_PATH): - sys.stderr.write('\nERROR: can not find project libraries path: %s\n\n' % os.path.abspath(LIBRARIES_PATH)) - sys.exit(1) -sys.path.append(LIBRARIES_PATH) - -# Import project libraries -import utils_log -import utils_messages -import motu_api - -def get_client_version(): - """Return the version (as a string) of this client. - - The value is automatically set by the maven processing build, so don't - touch it unless you know what you are doing.""" - return motu_api.get_client_version() - -def get_client_artefact(): - """Return the artifact identifier (as a string) of this client. - - The value is automatically set by the maven processing build, so don't - touch it unless you know what you are doing.""" - return motu_api.get_client_artefact() - -def load_options(): - """load options to handle""" - - _options = None - - # create option parser - parser = optparse.OptionParser(version=get_client_artefact() + ' v' + get_client_version()) - - # add available options - parser.add_option( '--quiet', '-q', - help = "prevent any output in stdout", - action = 'store_const', - const = logging.WARN, - dest='log_level') - - parser.add_option( '--verbose', - help = "print information in stdout", - action='store_const', - const = logging.DEBUG, - dest='log_level') - - parser.add_option( '--noisy', - help = "print more information (traces) in stdout", - action='store_const', - const = utils_log.TRACE_LEVEL, - dest='log_level') - - parser.add_option( '--user', '-u', - help = "the user name (string)") - - parser.add_option( '--pwd', '-p', - help = "the user password (string)") - - parser.add_option( '--auth-mode', - default = motu_api.AUTHENTICATION_MODE_CAS, - help = "the authentication mode: '" + motu_api.AUTHENTICATION_MODE_NONE + - "' (for no authentication), '"+ motu_api.AUTHENTICATION_MODE_BASIC + - "' (for basic authentication), or '"+motu_api.AUTHENTICATION_MODE_CAS + - "' (for Central Authentication Service) [default: %default]") - - parser.add_option( '--proxy-server', - help = "the proxy server (url)") - - parser.add_option( '--proxy-user', - help = "the proxy user (string)") - - parser.add_option( '--proxy-pwd', - help = "the proxy password (string)") - - parser.add_option( '--motu', '-m', - help = "the motu server to use (url)") - - parser.add_option( '--service-id', '-s', - help = "The service identifier (string)") - - parser.add_option( '--product-id', '-d', - help = "The product (data set) to download (string)") - - parser.add_option( '--date-min', '-t', - help = "The min date with optional hour resolution (string following format YYYY-MM-DD [HH:MM:SS])") - - parser.add_option( '--date-max', '-T', - help = "The max date with optional hour resolution (string following format YYYY-MM-DD [HH:MM:SS])", - default = datetime.date.today().isoformat()) - - parser.add_option( '--latitude-min', '-y', - type = 'float', - help = "The min latitude (float in the interval [-90 ; 90])") - - parser.add_option( '--latitude-max', '-Y', - type = 'float', - help = "The max latitude (float in the interval [-90 ; 90])") - - parser.add_option( '--longitude-min', '-x', - type = 'float', - help = "The min longitude (float in the interval [-180 ; 180])") - - parser.add_option( '--longitude-max', '-X', - type = 'float', - help = "The max longitude (float in the interval [-180 ; 180])") - - parser.add_option( '--depth-min', '-z', - type = 'string', - help = "The min depth (float in the interval [0 ; 2e31] or string 'Surface')") - - parser.add_option( '--depth-max', '-Z', - type = 'string', - help = "The max depth (float in the interval [0 ; 2e31] or string 'Surface')") - - parser.add_option( '--variable', '-v', - help = "The variable (list of strings)", - callback=option_callback_variable, - dest="variable", - type="string", - action="callback") - - parser.add_option( '--sync-mode', '-S', - help = "Sets the download mode to synchronous (not recommended)", - action='store_true', - dest='sync') - - parser.add_option( '--describe-product', '-D', - help = "Get all updated information on a dataset. Output is in XML format", - action='store_true', - dest='describe') - - parser.add_option( '--size', - help = "Get the size of an extraction. Output is in XML format", - action='store_true', - dest='size') - - parser.add_option( '--out-dir', '-o', - help = "The output dir where result (download file) is written (string). If it starts with 'console', behaviour is the same as with --console-mode. ", - default=".") - - parser.add_option( '--out-name', '-f', - help = "The output file name (string)", - default="data.nc") - - parser.add_option( '--block-size', - type = 'int', - help = "The block used to download file (integer expressing bytes)", - default="65536") - - parser.add_option( '--socket-timeout', - type = 'float', - help = "Set a timeout on blocking socket operations (float expressing seconds)") - parser.add_option( '--user-agent', - help = "Set the identification string (user-agent) for HTTP requests. By default this value is 'Python-urllib/x.x' (where x.x is the version of the python interpreter)") - - parser.add_option( '--outputWritten', - help = "Optional parameter used to set the format of the file returned by the download request: netcdf or netcdf4. If not set, netcdf is used.") - - parser.add_option( '--console-mode', - help = "Optional parameter used to display result on stdout, either URL path to download extraction file, or the XML content of getSize or describeProduct requests.", - action='store_true', - dest='console_mode') - - parser.add_option( '--config-file', - help = "Path of the optional configuration file [default: %s]" % CFG_FILE, - action='append', - dest="config_file", - type="string") - - # create config parser - conf_parser = ConfigParser.ConfigParser() - - # read configuration file name from cli arguments or use default - # cant set default in parser.add_option due to optparse/argparse bug: - # https://bugs.python.org/issue16399 - config_file = parser.parse_args()[0].config_file - if config_file is None: - config_file = [CFG_FILE] - config_file=[os.path.expanduser(x) for x in config_file] - conf_parser.read(config_file) - - # set default values by picking from the configuration file - default_values = {} - default_variables = [] - for option in parser.option_list: - if (option.dest != None) and conf_parser.has_option(SECTION, option.dest): - if option.dest == "variable": - variablesInCfgFile = conf_parser.get(SECTION, option.dest) - if (not variablesInCfgFile is None) and variablesInCfgFile.strip(): - allVariablesArray = variablesInCfgFile.split(",") - default_variables = default_variables + allVariablesArray - default_values[option.dest] = default_variables - else: - default_values[option.dest] = conf_parser.get(SECTION, option.dest) - - parser.set_defaults( **default_values ) - - return parser.parse_args() - -def option_callback_variable(option, opt, value, parser): - global _variables - _variables.append(value) - setattr(parser.values, option.dest, _variables) - - -def initLogger(): - logging.addLevelName(utils_log.TRACE_LEVEL, 'TRACE') - logging.config.fileConfig( os.path.join(os.path.dirname(__file__),LOG_CFG_FILE) ) - global log - log = logging.getLogger(__name__) - - logging.getLogger().setLevel(logging.INFO) -#=============================================================================== -# The Main function -#=============================================================================== -def main(): - start_time = datetime.datetime.now() - - initLogger() - - try: - # we prepare options we want - (_options, args) = load_options() - - if _options.log_level != None: - logging.getLogger().setLevel(int(_options.log_level)) - - motu_api.execute_request(_options) - except Exception as e: - log.error( "Execution failed: %s", e ) - if hasattr(e, 'reason'): - log.info( ' . reason: %s', e.reason ) - if hasattr(e, 'code'): - log.info( ' . code %s: ', e.code ) - if hasattr(e, 'read'): - log.log( utils_log.TRACE_LEVEL, ' . detail:\n%s', e.read() ) - - log.debug( '-'*60 ) - log.debug( "Stack trace exception is detailed herafter:" ) - exc_type, exc_value, exc_tb = sys.exc_info() - x = traceback.format_exception(exc_type, exc_value, exc_tb) - for stack in x: - log.debug( ' . %s', stack.replace('\n', '') ) - log.debug( '-'*60 ) - log.log( utils_log.TRACE_LEVEL, 'System info is provided hereafter:' ) - system, node, release, version, machine, processor = platform.uname() - log.log( utils_log.TRACE_LEVEL, ' . system : %s', system ) - log.log( utils_log.TRACE_LEVEL, ' . node : %s', node ) - log.log( utils_log.TRACE_LEVEL, ' . release : %s', release ) - log.log( utils_log.TRACE_LEVEL, ' . version : %s', version ) - log.log( utils_log.TRACE_LEVEL, ' . machine : %s', machine ) - log.log( utils_log.TRACE_LEVEL, ' . processor: %s', processor ) - log.log( utils_log.TRACE_LEVEL, ' . python : %s', sys.version ) - log.log( utils_log.TRACE_LEVEL, ' . client : %s', get_client_version() ) - log.log( utils_log.TRACE_LEVEL, '-'*60 ) - - sys.exit(ERROR_CODE_EXIT) - - finally: - log.debug( "Elapsed time : %s", str(datetime.datetime.now() - start_time) ) - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/pom.xml b/Forecast_tools/motuclient-python/pom.xml deleted file mode 100755 index fb4c1380..00000000 --- a/Forecast_tools/motuclient-python/pom.xml +++ /dev/null @@ -1,83 +0,0 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <groupId>cls.atoll.motu.client</groupId> - <artifactId>motuclient-python</artifactId> - <version>1.8.4</version> - <packaging>pom</packaging> - - <name>Motu Client Python</name> - <description>This package holds the python scripts used to address Motu servers for ordering, extracting and - downloading oceanographic data. - </description> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - - <build> - <scriptSourceDirectory>${basedir}/src</scriptSourceDirectory> - <testSourceDirectory>${basedir}/bin</testSourceDirectory> - <outputDirectory>${basedir}/bin</outputDirectory> - <testOutputDirectory>${basedir}/bin</testOutputDirectory> - <plugins> - <plugin> - <artifactId>maven-assembly-plugin</artifactId> - <version>2.4</version> - <configuration> - <finalName>${project.artifactId}-${project.version}-${build-timestamp}</finalName> - <descriptors> - <descriptor>${basedir}/assembly/bin.xml</descriptor> - <descriptor>${basedir}/assembly/src.xml</descriptor> - </descriptors> - </configuration> - <executions> - <execution> - <id>make-assembly</id> - <phase>package</phase> - <goals> - <goal>single</goal> - </goals> - </execution> - </executions> - </plugin> - <!-- Used to build a "build-timestamp" property, this property could be overridden by ANT calls from /motu-distribution/build.xml --> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>buildnumber-maven-plugin</artifactId> - <version>1.4</version> - <configuration> - <revisionOnScmFailure>no.scm.config.in.pom</revisionOnScmFailure> - </configuration> - <executions> - <execution> - <id>create-timestamp-id</id> - <phase>validate</phase> - <goals> - <goal>create-timestamp</goal> - </goals> - <configuration> - <timestampFormat>yyyyMMddHHmmssSSS</timestampFormat> - <timestampPropertyName>build-timestamp</timestampPropertyName> - <!-- formats the timestamp all together like 2016-04-04 14:17:05.123 - and puts it in the ${myBuildNumberVariable} buildProperty --> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - - <organization> - <name>CLS (Collecte Localisation Satelite)</name> - <url>http://www.cls.fr</url> - </organization> - - <licenses> - <license> - <name>GNU Lesser General Public License (LGPL)</name> - <url>http://www.gnu.org/licenses/lgpl.html</url> - <distribution>repo</distribution> - <comments>A business-friendly Open Source license</comments> - </license> - </licenses> -</project> \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/setup.cfg b/Forecast_tools/motuclient-python/setup.cfg deleted file mode 100755 index a2f3748e..00000000 --- a/Forecast_tools/motuclient-python/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[metadata] -description-file = README.md \ No newline at end of file diff --git a/Forecast_tools/motuclient-python/setup.py b/Forecast_tools/motuclient-python/setup.py deleted file mode 100755 index b0fab61c..00000000 --- a/Forecast_tools/motuclient-python/setup.py +++ /dev/null @@ -1,61 +0,0 @@ -import os -import sys - -from setuptools import setup, find_packages - -# project libraries path -LIBRARIES_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'src', 'python') - -# Manage imports of project libraries -if not os.path.exists(LIBRARIES_PATH): - sys.stderr.write('\nERROR: can not find project libraries path: %s\n\n' % os.path.abspath(LIBRARIES_PATH)) - sys.exit(1) -sys.path.append(LIBRARIES_PATH) - -from motu_utils import pom_version - -setup( - name='motuclient', - version=pom_version.getPOMVersion(), - python_requires='>=2.7', - description='Extract and download gridded data through a python command line from Motu web server. Used in CMEMS context http://marine.copernicus.eu/', - long_description='Motu is a high efficient and robust Web Server which fills the gap between heterogeneous data providers to end users. Motu handles, extracts and transforms oceanographic huge volumes of data without performance collapse. This client enables to extract and download data through a python command line.', - keywords=[ - 'Copernicus', - 'CMEMS', - 'CLS', - 'Motu', - 'motuclient-python', - 'Dissemination Unit' - ], - - author='Sylvain MARTY, CLS', - author_email='smarty@cls.fr', - platforms=['any'], - - url='https://github.com/clstoulouse/motu-client-python', - license='LGPL', - - package_dir = {'': 'src/python', 'motu_utils': 'src/python/motu_utils'}, - packages=['motu_utils'], - py_modules = ['motuclient', 'motu-client'], - include_package_data=True, - - download_url='https://github.com/clstoulouse/motu-client-python/releases/', - - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Programming Language :: Python :: 2.7', - 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)', - 'Topic :: Scientific/Engineering :: GIS', - 'Environment :: Console', - 'Natural Language :: English', - 'Operating System :: OS Independent' - ], - - entry_points={ - 'console_scripts': [ - 'motuclient = motuclient:main' - ] - } -) diff --git a/Forecast_tools/plot_forecast_croco.m b/Forecast_tools/plot_forecast_croco.m index 82375860..13e0b207 100644 --- a/Forecast_tools/plot_forecast_croco.m +++ b/Forecast_tools/plot_forecast_croco.m @@ -1,439 +1,465 @@ -%********************************************************* -% plot CROCO forecast analysis at noon for each day -%********************************************************* -clear all -close all -start -crocotools_param -as_consts % load constants - -disp('Forecast analysis') -%******************************************************** -% User defined parameters -% -dirin = './'; -dirout = './Figs/'; -eval(['!mkdir ',dirout]) -grdname = [dirin,'SCRATCH/croco_grd.nc']; -frcname = [dirin,'SCRATCH/croco_frc_GFS_0.nc']; -avgname = [dirin,'SCRATCH/croco_avg.nc']; -coastfile = [dirin,'coastline_l.mat']; - -%lonmin=8; lonmax=22; latmin=-38; latmax=-26; - -skip_wnd = 2; -skip_cur = 2; -zoom = 0; -fsize = 14; % Font size -nx = 3; % number of days -titlemark = ['IRD: ',datestr(now)]; - -mean_currents = 0; % 1: plot 0-500 mean currents - % 0: surface currents - -plot_fig_1 = 0; % wind -plot_fig_2 = 0; % surface currents -plot_fig_3 = 1; % SST + surface currents -plot_fig_4 = 1; % SSH -plot_fig_5 = 0; % HBL - -% offset to convert UTC model time -% into local matlab time (days] -days_off = timezone/24+datenum(Yorig,1,1); -% -%************ End of users's defined parameter ************ -% -% time (in matlab time) -% -today=floor(now); -% -% date in 'Yorig' time -% -rundate=datenum(today)-datenum(Yorig,1,1); -% -nc=netcdf(grdname); -lon=nc{'lon_rho'}(:); -lat=nc{'lat_rho'}(:); -h=nc{'h'}(:); -mask=nc{'mask_rho'}(:); -angle=nc{'angle'}(:); -close(nc) -mask(mask==0)=NaN; -% -nc=netcdf(avgname); -N=length(nc('s_rho')); -close(nc) -[M L]=size(lon); -Mu=M; Lu=L-1; Mv=M-1; Lv=L; -zeta(1:M,1:L)=0; -zw=zlevs(h,zeta,theta_s,theta_b,hc,N,'w',vtransform); -zu=rho2u_3d(zw); -zv=rho2v_3d(zw); -dzu=zu(2:end,:,:)-zu(1:end-1,:,:); -dzv=zv(2:end,:,:)-zv(1:end-1,:,:); -% -% coastline -%bounds=[lonmin lonmax latmin latmax]; res='l'; -%coastfile=make_coast2(bounds,res) - -% -barwidth=0.5; -barheight=0.04; -titleheight=0.01; -hmargin=0.025; -vmargin=0.10; -clear title; - -if plot_fig_1, -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% 1: wind -% - disp('PLot winds ...') - itime=0; - cmin=0; cint=5; cmax=30; cff_wnd=.4; % winds - [LON,LAT]=meshgrid([lonmin:1/3:lonmax],[latmin:1/3:latmax]); - nc=netcdf(frcname); - smstime=nc{'sms_time'}(:); - smstime0=floor(now)-datenum(Yorig,1,1)-1/24-1; %midday - for tndx=1:nx; - smstime0=smstime0+1; - itime=itime+1; - disp(['Day ',num2str(itime)]) - outname=['WIND',num2str(itime)]; - close all - figure('position',[5 5 1000 600]); - subplot('position',[0 0.2 1 .75]); - istr=max(find(smstime<=smstime0)); - iend=min(find(smstime>=smstime0)); - u1=squeeze(nc{'sustr'}(istr,:,:)); - v1=squeeze(nc{'svstr'}(istr,:,:)); - u2=squeeze(nc{'sustr'}(iend,:,:)); - v2=squeeze(nc{'svstr'}(iend,:,:)); - u=(u1*(smstime(iend)-smstime0)+u2*(smstime0-smstime(istr)))/ ... - (smstime(iend)-smstime(istr)); - v=(v1*(smstime(iend)-smstime0)+v2*(smstime0-smstime(istr)))/ ... - (smstime(iend)-smstime(istr)); - stress=sqrt((u2rho_2d(u)).^2+(v2rho_2d(v)).^2); - [ur,vr,lonr,latr,maskr]=uv_vec2rho(u,v,lon,lat,angle,mask,skip_wnd,[0 0 0 0]); - - spd=1.94384*sqrt(stress./(rho_air*1.15e-3)); - spdr=sqrt(ur.^2+vr.^2)./(rho_air*1.15e-3); - ur=1.94384*ur./(rho_air*1.15e-3*spdr); - vr=1.94384*vr./(rho_air*1.15e-3*spdr); - - U=interp2(lonr,latr,ur,LON,LAT); - V=interp2(lonr,latr,vr,LON,LAT); - - m_proj('mercator',... - 'lon',[lonmin lonmax],... - 'lat',[latmin latmax]); -% [C0,h0]=m_contourf(lon,lat,stress,[0:0.04:0.3],'k'); - [C0,h0]=m_contourf(lon,lat,spd,[cmin:cint:cmax],'k'); - shading flat - caxis([cmin cmax]) - hold on - %h=m_quiver(lonr,latr,cff_wnd*ur,cff_wnd*vr,0,'k'); hold on; - h=m_streamslice(LON,LAT,U,V,1); hold on; - %m_streamslice(lonr,latr,ur,vr,1); hold on; - set(h,'color','b'); - m_usercoast(coastfile,'patch',[.0 .0 .0]); - hold off - m_grid('box','fancy','tickdir','in','FontSize',fsize); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(smstime0+days_off,1)],'FontSize',fsize+1) - ht=m_text(lonmax,latmax+.5,titlemark); - set(ht,'horizontalalignment','right','fontsize',fsize-4,'Color','b'); - set(gca,'Layer','top'); - subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) - colormap(1-copper) - x=[0:1]; - y=[cmin:cint:cmax]; - [X,Y]=meshgrid(x,y); - contourf(Y,X,Y,y) - caxis([cmin cmax]) - set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) - set(gca,'FontSize',fsize) - set(gca,'Layer','top'); -% xlabel('Wind Stress [N m^{-2}]','FontSize',fsize) - xlabel('Wind [knots]','FontSize',fsize) - set(gcf, 'PaperPositionMode', 'auto'); - - export_fig -transparent file.pdf - eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); - end -close(nc) -end % plot_fig_1 - -if plot_fig_2, -% -% 2: Surface currents -% -disp('PLot surface currents ...') -itime=0; -cmin=0; cint=0.1; cmax=2.0; cff_cur=2; -for tndx=hdays+1:nx+hdays - itime=itime+1; - disp(['Day ',num2str(itime)]) - outname=['FLOW',num2str(itime)]; - close all - figure('position',[5 5 1000 600]); - subplot('position',[0 0.2 1 .75]); - - nc=netcdf(avgname); - scrumtime=[]; - scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; - if ~isempty(scrumtime) - U=zeros(Mu,Lu); - V=zeros(Mv,Lv); - N=length(nc('s_rho')); - if mean_currents, - u=squeeze(nc{'u'}(tndx,:,:,:)); - v=squeeze(nc{'v'}(tndx,:,:,:)); - for j=1:Mu; for i=1:Lu; for k=N:-1:1; - if zu(k,j,i)>-500, - U(j,i)=U(j,i)+u(k,j,i).*dzu(k,j,i); - hu(j,i)=-zu(k,j,i); - end; - end; end; end; - clear u; u=U./hu; clear U; - for j=1:Mv; for i=1:Lv; for k=N:-1:1; - if zv(k,j,i)>-500, - V(j,i)=V(j,i)+v(k,j,i).*dzv(k,j,i); - hv(j,i)=-zv(k,j,i); - end; - end; end; end; - clear v; v=V./hv; clear V; - else - u=squeeze(nc{'u'}(tndx,N,:,:)); - v=squeeze(nc{'v'}(tndx,N,:,:)); - end - close(nc) - - spd=1.94384*mask.*sqrt((u2rho_2d(u)).^2+(v2rho_2d(v)).^2); - spd=get_missing_val(lon,lat,spd); - [ur,vr,lonr,latr,maskr]=uv_vec2rho(u,v,lon,lat,angle,mask,skip_cur,[0 0 0 0]); - - m_proj('mercator',... - 'lon',[lonmin lonmax],... - 'lat',[latmin latmax]); - [C0,h0]=m_contourf(lon,lat,spd,[cmin:cint:cmax],'k'); - shading flat - caxis([cmin cmax]) - hold on - m_quiver(lonr,latr,cff_cur*ur,cff_cur*vr,0,'k'); - m_usercoast(coastfile,'patch',[.0 .0 .0]); - hold off - m_grid('box','fancy','tickdir','in','FontSize',fsize); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(scrumtime,1)],'FontSize',fsize+1) - ht=m_text(lonmax,latmax+.5,titlemark); - set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); - set(gca,'Layer','top'); - subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) - colormap(1-copper) - x=[0:1]; - y=[cmin:cint:cmax]; - [X,Y]=meshgrid(x,y); - caxis([cmin cmax]) - contourf(Y,X,Y,y) - set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) - set(gca,'FontSize',fsize) - set(gca,'Layer','top'); - if mean_currents, - xlabel('0-500m mean currents [Knots]','FontSize',fsize) - else - xlabel('Surface currents [Knots]','FontSize',fsize) - end - set(gcf, 'PaperPositionMode', 'auto'); - - export_fig -transparent file.pdf - eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); - end -end -end % plot_fig_2 - -if plot_fig_3, -% -% 3: SST and Surface Currents -% -disp('PLot SST and surface currents ...') -itime=0; -nc=netcdf(avgname); -sst=mask.*squeeze(nc{'temp'}(1,N,:,:)); -close(nc) -cmin=floor(min(min(sst))); -cmax= ceil(max(max(sst))); -cint=1; cff_cur=1.5; -%cmin=13; cmax=20; -for tndx=hdays+1:nx+hdays - itime=itime+1; - disp(['Day ',num2str(itime)]) - outname=['SST',num2str(itime)]; - close all - figure('position',[5 5 1000 600]); - subplot('position',[0 0.2 1 .75]); - - nc=netcdf(avgname); - scrumtime=[]; - scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; - if ~isempty(scrumtime) - N=length(nc('s_rho')); - sst=mask.*squeeze(nc{'temp'}(tndx,N,:,:)); - u=squeeze(nc{'u'}(tndx,N,:,:)); - v=squeeze(nc{'v'}(tndx,N,:,:)); - close(nc) - [ur,vr,lonr,latr,maskr]=uv_vec2rho(u,v,lon,lat,angle,mask,skip_cur,[0 0 0 0]); - spdr=sqrt(ur.^2+vr.^2); - sst=get_missing_val(lon,lat,sst); - ur=get_missing_val(lonr,latr,ur); - vr=get_missing_val(lonr,latr,vr); - - %plot_res=1/3; - %[LON,LAT]=meshgrid([lonmin:plot_res:lonmax],[latmin:plot_res:latmax]); - %U=interp2(lonr,latr,ur,LON,LAT); - %V=interp2(lonr,latr,vr,LON,LAT); - - m_proj('mercator',... - 'lon',[lonmin lonmax],... - 'lat',[latmin latmax]); - [C0,h0]=m_contourf(lon,lat,sst,[cmin:cint:cmax],'k'); - shading flat - caxis([cmin cmax]) - hold on - m_quiver(lonr,latr,cff_cur*ur,cff_cur*vr,0,'k'); - %m_streamslice(LON,LAT,U,V,2); - m_usercoast(coastfile,'patch',[.0 .0 .0]); - hold off - m_grid('box','fancy','tickdir','in','FontSize',fsize-2); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(scrumtime,1)],'FontSize',fsize+1); - ht=m_text(lonmax,latmax+.5,titlemark); - set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); - set(gca,'Layer','top'); - - subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) - x=[0:1]; - y=[cmin:cint:cmax]; - [X,Y]=meshgrid(x,y); - caxis([cmin cmax]) - contourf(Y,X,Y,y) - set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) - set(gca,'FontSize',fsize) - set(gca,'Layer','top'); - xlabel('SST [^{o}C]','FontSize',fsize) - set(gcf, 'PaperPositionMode', 'auto'); - - export_fig -transparent file.pdf - eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); - end -end -end % plot_fig_3 -% -if plot_fig_4, -% -% 4: Sea Surface Height -% -disp('PLot SSH ...') -itime=0; -cmin=-50; cint=5; cmax=50; -for tndx=hdays+1:nx+hdays - itime=itime+1; - disp(['Day ',num2str(itime)]) - outname=['SSH',num2str(itime)]; - close all - figure('position',[5 5 1000 600]); - subplot('position',[0 0.2 1 .75]); - - nc=netcdf(avgname); - scrumtime=[]; - scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; - if ~isempty(scrumtime) - N=length(nc('s_rho')); - ssh=100*squeeze(nc{'zeta'}(tndx,:,:)); - ssh=(ssh-mean(mean(ssh))).*mask; - close(nc) - ssh=get_missing_val(lon,lat,ssh); - - m_proj('mercator','lon',[lonmin lonmax],'lat',[latmin latmax]); - [C0,h0]=m_contourf(lon,lat,ssh,[cmin:cint:cmax]); -% shading flat - caxis([cmin cmax]) - m_usercoast(coastfile,'patch',[.0 .0 .0]); - m_grid('box','fancy','tickdir','in','FontSize',fsize-2); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(scrumtime,1)],'FontSize',fsize+1) - ht=m_text(lonmax,latmax+.5,titlemark); - set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); - set(gca,'Layer','top'); - - subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) - x=[0:1]; - y=[cmin:cint:cmax]; - [X,Y]=meshgrid(x,y); - caxis([cmin cmax]) - contourf(Y,X,Y,y) - set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) - set(gca,'FontSize',fsize) - set(gca,'Layer','top'); - xlabel('SSH [cm]','FontSize',fsize) - set(gcf, 'PaperPositionMode', 'auto'); - - export_fig -transparent file.pdf - eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); - end -end -end % plot_fig_4 - -if plot_fig_5, -% -% 5: Surface Boundary Layer Depth -% -disp('PLot HBL ...') -itime=0; -cmin=0; cint=10; cmax=100; -for tndx=hdays+1:nx+hdays - itime=itime+1; - disp(['Day ',num2str(itime)]) - outname=['HBL',num2str(itime)]; - close all - figure('position',[5 5 1000 600]); - subplot('position',[0 0.2 1 .75]); - - nc=netcdf(avgname); - scrumtime=[]; - scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; - if ~isempty(scrumtime) - hbl=mask.*squeeze(nc{'hbl'}(tndx,:,:)); - close(nc) -% hbl=get_missing_val(lon,lat,hbl); - - m_proj('mercator','lon',[lonmin lonmax],'lat',[latmin latmax]); - m_pcolor(lon,lat,hbl); - shading flat - caxis([cmin cmax]) - m_usercoast(coastfile,'patch',[.0 .0 .0]); - m_grid('box','fancy','tickdir','in','FontSize',fsize-2); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(scrumtime,1)],'FontSize',fsize+1) - ht=m_text(lonmax,latmax+.5,titlemark); - set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); - set(gca,'Layer','top'); - - subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) - x=[0:1]; - y=[cmin:cint:cmax]; - [X,Y]=meshgrid(x,y); - caxis([cmin cmax]) - contourf(Y,X,Y,y) - set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) - set(gca,'FontSize',fsize) - set(gca,'Layer','top'); - xlabel('HBL [m]','FontSize',fsize) - set(gcf, 'PaperPositionMode', 'auto'); - - export_fig -transparent file.pdf - eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); - end -end -end % plot_fig_5 +%********************************************************* +% plot CROCO forecast analysis at noon of each day +%********************************************************* +clear all +close all +start +crocotools_param +as_consts % load constants + +disp('Forecast analysis') +%******************************************************** +% User defined parameters +% +dirin = './'; +dirout = './Figs/'; +eval(['!mkdir ',dirout]) +grdname = [dirin,'SCRATCH/croco_grd.nc']; +frcname = [dirin,'SCRATCH/croco_frc_GFS_0.nc']; +hisname = [dirin,'SCRATCH/croco_his.nc']; +avgname = [dirin,'SCRATCH/croco_avg.nc']; +coastfile = [dirin,'coastline_f.mat']; + +skip_wnd = 2; +skip_cur = 2; +zoom = 0; +fsize = 14; % Font size +nx = 3; % number of forecast days +% +titlemark = ['CROCO: ',datestr(now)]; + +mean_currents = 0; % 1: plot 0-500 mean currents + % 0: surface currents + +plot_fig_1 = 0; % wind +plot_fig_2 = 1; % surface currents +plot_fig_3 = 1; % SST + surface currents +plot_fig_4 = 1; % SSH +plot_fig_5 = 0; % HBL + +% offset to convert UTC model time +% into local matlab time [days] +days_off = timezone/24+datenum(Yorig,1,1); +% +%************ End of users's defined parameter ************ +% +today=floor(now); +% +% date in 'Yorig' time +% +rundate=datenum(today)-datenum(Yorig,1,1); +% +nc=netcdf(grdname); +lon=nc{'lon_rho'}(:); +lat=nc{'lat_rho'}(:); +h=nc{'h'}(:); +mask=nc{'mask_rho'}(:); +angle=nc{'angle'}(:); +close(nc) +mask(mask==0)=NaN; +% +nc=netcdf(avgname); +N=length(nc('s_rho')); +close(nc) +[M L]=size(lon); +Mu=M; Lu=L-1; Mv=M-1; Lv=L; +zeta(1:M,1:L)=0; +zw=zlevs(h,zeta,theta_s,theta_b,hc,N,'w',vtransform); +zu=rho2u_3d(zw); +zv=rho2v_3d(zw); +dzu=zu(2:end,:,:)-zu(1:end-1,:,:); +dzv=zv(2:end,:,:)-zv(1:end-1,:,:); +% +% coastline +%bounds=[lonmin lonmax latmin latmax]; res='l'; +%coastfile=make_coast2(bounds,res) +% +barwidth=0.5; +barheight=0.04; +titleheight=0.01; +hmargin=0.025; +vmargin=0.10; +clear title; + +if plot_fig_1, +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% 1: wind +% + disp('Plot winds ...') + itime=0; + cmin=0; cint=5; cmax=30; cff_wnd=.4; % winds + [LON,LAT]=meshgrid([lonmin:1/3:lonmax],[latmin:1/3:latmax]); + nc=netcdf(frcname); + smstime=nc{'sms_time'}(:); + smstime0=floor(now)-datenum(Yorig,1,1)-1/24-1; %midday + for tndx=hdays+1:nx+hdays + smstime0=smstime0+1; + itime=itime+1; + disp(['Day ',num2str(itime)]) + outname=['WIND',num2str(itime)]; + close all + figure('position',[5 5 1000 600]); + subplot('position',[0 0.2 1 .75]); + istr=max(find(smstime<=smstime0)); + iend=min(find(smstime>=smstime0)); + u1=squeeze(nc{'sustr'}(istr,:,:)); + v1=squeeze(nc{'svstr'}(istr,:,:)); + u2=squeeze(nc{'sustr'}(iend,:,:)); + v2=squeeze(nc{'svstr'}(iend,:,:)); + u=(u1*(smstime(iend)-smstime0)+u2*(smstime0-smstime(istr)))/ ... + (smstime(iend)-smstime(istr)); + v=(v1*(smstime(iend)-smstime0)+v2*(smstime0-smstime(istr)))/ ... + (smstime(iend)-smstime(istr)); + stress=sqrt((u2rho_2d(u)).^2+(v2rho_2d(v)).^2); + [ur,vr,lonr,latr,maskr]=uv_vec2rho(u,v,lon,lat,angle,mask,skip_wnd,[0 0 0 0]); + + spd=1.94384*sqrt(stress./(rho_air*1.15e-3)); + spdr=sqrt(ur.^2+vr.^2)./(rho_air*1.15e-3); + ur=1.94384*ur./(rho_air*1.15e-3*spdr); + vr=1.94384*vr./(rho_air*1.15e-3*spdr); + + U=interp2(lonr,latr,ur,LON,LAT); + V=interp2(lonr,latr,vr,LON,LAT); + + m_proj('mercator',... + 'lon',[lonmin lonmax],... + 'lat',[latmin latmax]); +% [C0,h0]=m_contourf(lon,lat,stress,[0:0.04:0.3],'k'); + [C0,h0]=m_contourf(lon,lat,spd,[cmin:cint:cmax],'k'); + shading flat + caxis([cmin cmax]) + hold on + %h=m_quiver(lonr,latr,cff_wnd*ur,cff_wnd*vr,0,'k'); hold on; + h=m_streamslice(LON,LAT,U,V,1); hold on; + %m_streamslice(lonr,latr,ur,vr,1); hold on; + set(h,'color','b'); + if ~isempty(coastfile) + m_usercoast(coastfile,'patch',[.0 .0 .0]); + else + m_gshhs_f('patch',[.7 .7 .7],'edgecolor','k') + end + hold off + m_grid('box','fancy','tickdir','in','FontSize',fsize); + set(findobj('tag','m_grid_color'),'facecolor','white') + title([datestr(smstime0+days_off,1)],'FontSize',fsize+1) + ht=m_text(lonmax,latmax+.5,titlemark); + set(ht,'horizontalalignment','right','fontsize',fsize-4,'Color','b'); + set(gca,'Layer','top'); + subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) + colormap(1-copper) + x=[0:1]; + y=[cmin:cint:cmax]; + [X,Y]=meshgrid(x,y); + contourf(Y,X,Y,y) + caxis([cmin cmax]) + set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) + set(gca,'FontSize',fsize) + set(gca,'Layer','top'); +% xlabel('Wind Stress [N m^{-2}]','FontSize',fsize) + xlabel('Wind [knots]','FontSize',fsize) + set(gcf, 'PaperPositionMode', 'auto'); + + % export_fig -transparent file.pdf + % eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); + eval(['print -bestfit -dpdf',dirout,outname,'.pdf']); + end +close(nc) +end % plot_fig_1 + +if plot_fig_2, +% +% 2: Surface currents +% +disp('Plot surface currents ...') +itime=0; +cmin=0; cint=0.1; cmax=2.0; cff_cur=2; +for tndx=hdays+1:nx+hdays + itime=itime+1; + disp(['Day ',num2str(itime)]) + outname=['FLOW',num2str(itime)]; + close all + figure('position',[5 5 1000 600]); + subplot('position',[0 0.2 1 .75]); + + nc=netcdf(avgname); + scrumtime=[]; + scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; + if ~isempty(scrumtime) + U=zeros(Mu,Lu); + V=zeros(Mv,Lv); + N=length(nc('s_rho')); + if mean_currents, + u=squeeze(nc{'u'}(tndx,:,:,:)); + v=squeeze(nc{'v'}(tndx,:,:,:)); + for j=1:Mu; for i=1:Lu; for k=N:-1:1; + if zu(k,j,i)>-500, + U(j,i)=U(j,i)+u(k,j,i).*dzu(k,j,i); + hu(j,i)=-zu(k,j,i); + end; + end; end; end; + clear u; u=U./hu; clear U; + for j=1:Mv; for i=1:Lv; for k=N:-1:1; + if zv(k,j,i)>-500, + V(j,i)=V(j,i)+v(k,j,i).*dzv(k,j,i); + hv(j,i)=-zv(k,j,i); + end; + end; end; end; + clear v; v=V./hv; clear V; + else + u=squeeze(nc{'u'}(tndx,N,:,:)); + v=squeeze(nc{'v'}(tndx,N,:,:)); + end + close(nc) + + spd=1.94384*mask.*sqrt((u2rho_2d(u)).^2+(v2rho_2d(v)).^2); + spd=get_missing_val(lon,lat,spd); + [ur,vr,lonr,latr,maskr]=uv_vec2rho(u,v,lon,lat,angle,mask,skip_cur,[0 0 0 0]); + + m_proj('mercator',... + 'lon',[lonmin lonmax],... + 'lat',[latmin latmax]); + [C0,h0]=m_contourf(lon,lat,spd,[cmin:cint:cmax],'k'); + shading flat + caxis([cmin cmax]) + hold on + m_quiver(lonr,latr,cff_cur*ur,cff_cur*vr,0,'k'); + m_usercoast(coastfile,'patch',[.0 .0 .0]); + if ~isempty(coastfile) + m_usercoast(coastfile,'patch',[.0 .0 .0]); + else + m_gshhs_f('patch',[.7 .7 .7],'edgecolor','k') + end + hold off + m_grid('box','fancy','tickdir','in','FontSize',fsize); + set(findobj('tag','m_grid_color'),'facecolor','white') + title([datestr(scrumtime,1)],'FontSize',fsize+1) + ht=m_text(lonmax,latmax+.5,titlemark); + set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); + set(gca,'Layer','top'); + subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) + colormap(1-copper) + x=[0:1]; + y=[cmin:cint:cmax]; + [X,Y]=meshgrid(x,y); + caxis([cmin cmax]) + contourf(Y,X,Y,y) + set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) + set(gca,'FontSize',fsize) + set(gca,'Layer','top'); + if mean_currents, + xlabel('0-500m mean currents [Knots]','FontSize',fsize) + else + xlabel('Surface currents [Knots]','FontSize',fsize) + end + set(gcf, 'PaperPositionMode', 'auto'); + + % export_fig -transparent file.pdf + % eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); + eval(['print -bestfit -dpdf ',dirout,outname,'.pdf']); + end +end +end % plot_fig_2 + +if plot_fig_3, +% +% 3: SST and Surface Currents +% +disp('Plot SST and surface currents ...') +itime=0; +nc=netcdf(avgname); +sst=mask.*squeeze(nc{'temp'}(1,N,:,:)); +close(nc) +cmin=floor(min(min(sst))); +cmax= ceil(max(max(sst))); +cint=1; cff_cur=1.5; +%cmin=13; cmax=20; +for tndx=hdays+1:nx+hdays + itime=itime+1; + disp(['Day ',num2str(itime)]) + outname=['SST',num2str(itime)]; + close all + figure('position',[5 5 1000 600]); + subplot('position',[0 0.2 1 .75]); + + nc=netcdf(avgname); + scrumtime=[]; + scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; + if ~isempty(scrumtime) + N=length(nc('s_rho')); + sst=mask.*squeeze(nc{'temp'}(tndx,N,:,:)); + u=squeeze(nc{'u'}(tndx,N,:,:)); + v=squeeze(nc{'v'}(tndx,N,:,:)); + close(nc) + [ur,vr,lonr,latr,maskr]=uv_vec2rho(u,v,lon,lat,angle,mask,skip_cur,[0 0 0 0]); + spdr=sqrt(ur.^2+vr.^2); + sst=get_missing_val(lon,lat,sst); + ur=get_missing_val(lonr,latr,ur); + vr=get_missing_val(lonr,latr,vr); + + %plot_res=1/3; + %[LON,LAT]=meshgrid([lonmin:plot_res:lonmax],[latmin:plot_res:latmax]); + %U=interp2(lonr,latr,ur,LON,LAT); + %V=interp2(lonr,latr,vr,LON,LAT); + + m_proj('mercator',... + 'lon',[lonmin lonmax],... + 'lat',[latmin latmax]); + [C0,h0]=m_contourf(lon,lat,sst,[cmin:cint:cmax],'k'); + shading flat + caxis([cmin cmax]) + hold on + m_quiver(lonr,latr,cff_cur*ur,cff_cur*vr,0,'k'); + %m_streamslice(LON,LAT,U,V,2); + m_usercoast(coastfile,'patch',[.0 .0 .0]); + if ~isempty(coastfile) + m_usercoast(coastfile,'patch',[.0 .0 .0]); + else + m_gshhs_f('patch',[.7 .7 .7],'edgecolor','k') + end + hold off + m_grid('box','fancy','tickdir','in','FontSize',fsize-2); + set(findobj('tag','m_grid_color'),'facecolor','white') + title([datestr(scrumtime,1)],'FontSize',fsize+1); + ht=m_text(lonmax,latmax+.5,titlemark); + set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); + set(gca,'Layer','top'); + + subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) + x=[0:1]; + y=[cmin:cint:cmax]; + [X,Y]=meshgrid(x,y); + caxis([cmin cmax]) + contourf(Y,X,Y,y) + set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) + set(gca,'FontSize',fsize) + set(gca,'Layer','top'); + xlabel('SST [^{o}C]','FontSize',fsize) + set(gcf, 'PaperPositionMode', 'auto'); + + % export_fig -transparent file.pdf + % eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); + eval(['print -bestfit -dpdf ',dirout,outname,'.pdf']); + end +end +end % plot_fig_3 +% +if plot_fig_4, +% +% 4: Sea Surface Height +% +disp('Plot SSH ...') +itime=0; +cmin=-50; cint=5; cmax=50; +for tndx=hdays+1:nx+hdays + itime=itime+1; + disp(['Day ',num2str(itime)]) + outname=['SSH',num2str(itime)]; + close all + figure('position',[5 5 1000 600]); + subplot('position',[0 0.2 1 .75]); + + nc=netcdf(avgname); + scrumtime=[]; + scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; + if ~isempty(scrumtime) + N=length(nc('s_rho')); + ssh=100*squeeze(nc{'zeta'}(tndx,:,:)); + ssh=(ssh-mean(mean(ssh))).*mask; + close(nc) + ssh=get_missing_val(lon,lat,ssh); + + m_proj('mercator','lon',[lonmin lonmax],'lat',[latmin latmax]); + [C0,h0]=m_contourf(lon,lat,ssh,[cmin:cint:cmax]); +% shading flat + caxis([cmin cmax]) + if ~isempty(coastfile) + m_usercoast(coastfile,'patch',[.0 .0 .0]); + else + m_gshhs_f('patch',[.7 .7 .7],'edgecolor','k') + end + m_grid('box','fancy','tickdir','in','FontSize',fsize-2); + set(findobj('tag','m_grid_color'),'facecolor','white') + title([datestr(scrumtime,1)],'FontSize',fsize+1) + ht=m_text(lonmax,latmax+.5,titlemark); + set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); + set(gca,'Layer','top'); + + subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) + x=[0:1]; + y=[cmin:cint:cmax]; + [X,Y]=meshgrid(x,y); + caxis([cmin cmax]) + contourf(Y,X,Y,y) + set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) + set(gca,'FontSize',fsize) + set(gca,'Layer','top'); + xlabel('SSH [cm]','FontSize',fsize) + set(gcf, 'PaperPositionMode', 'auto'); + + % export_fig -transparent file.pdf + % eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); + eval(['print -bestfit -dpdf ',dirout,outname,'.pdf']); + end +end +end % plot_fig_4 + +if plot_fig_5, +% +% 5: Surface Boundary Layer Depth +% +disp('Plot HBL ...') +itime=0; +cmin=0; cint=10; cmax=100; +for tndx=hdays+1:nx+hdays + itime=itime+1; + disp(['Day ',num2str(itime)]) + outname=['HBL',num2str(itime)]; + close all + figure('position',[5 5 1000 600]); + subplot('position',[0 0.2 1 .75]); + + nc=netcdf(avgname); + scrumtime=[]; + scrumtime=(nc{'scrum_time'}(tndx))/86400+days_off; + if ~isempty(scrumtime) + hbl=mask.*squeeze(nc{'hbl'}(tndx,:,:)); + close(nc) +% hbl=get_missing_val(lon,lat,hbl); + + m_proj('mercator','lon',[lonmin lonmax],'lat',[latmin latmax]); + m_pcolor(lon,lat,hbl); + shading flat + caxis([cmin cmax]) + if ~isempty(coastfile) + m_usercoast(coastfile,'patch',[.0 .0 .0]); + else + m_gshhs_f('patch',[.7 .7 .7],'edgecolor','k') + end + m_grid('box','fancy','tickdir','in','FontSize',fsize-2); + set(findobj('tag','m_grid_color'),'facecolor','white') + title([datestr(scrumtime,1)],'FontSize',fsize+1) + ht=m_text(lonmax,latmax+.5,titlemark); + set(ht,'horizontalalignment','right','fontsize',fsize-3,'Color','b'); + set(gca,'Layer','top'); + + subplot('Position',[0.5-0.5*barwidth vmargin barwidth barheight]) + x=[0:1]; + y=[cmin:cint:cmax]; + [X,Y]=meshgrid(x,y); + caxis([cmin cmax]) + contourf(Y,X,Y,y) + set(gca,'XTick',[cmin:cint:cmax],'YTickLabel',[' ']) + set(gca,'FontSize',fsize) + set(gca,'Layer','top'); + xlabel('HBL [m]','FontSize',fsize) + set(gcf, 'PaperPositionMode', 'auto'); + + % export_fig -transparent file.pdf + % eval(['! mv -f file.pdf ',dirout,outname,'.pdf']); + eval(['print -bestfit -dpdf ',dirout,outname,'.pdf']); + end +end +end % plot_fig_5 + + diff --git a/Forecast_tools/plot_quick_forecast.m b/Forecast_tools/plot_quick_forecast.m deleted file mode 100644 index 9fc96d73..00000000 --- a/Forecast_tools/plot_quick_forecast.m +++ /dev/null @@ -1,334 +0,0 @@ -% -% forecast_analysis.m -% -% Create an image from the forecast results and send it to the -% forecast web page. -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 8-Sep-2006 by Pierrick Penven -% Updated 5-Oct-2006 by Pierrick Penven (changes in file names) -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -start -disp('Forecast analysis') -% -% Common parameters -% -crocotools_param -% -% plot the wind speed at noon for each day -% -skip=5; -zoom=0; -X=30; -Y=22; -% time (in matlab time) -% -today=floor(now); -% -% date in 'Yorig' time -% -rundate=datenum(today)-datenum(Yorig,1,1); -% -nc=netcdf(grdname); -lon=nc{'lon_rho'}(:); -lat=nc{'lat_rho'}(:); -mask=nc{'mask_rho'}(:); -angle=nc{'angle'}(:); -close(nc) -mask(mask==0)=NaN; -% -lonmin=min(min(lon))-zoom; -lonmax=max(max(lon))+zoom; -latmin=min(min(lat))-zoom; -latmax=max(max(lat))+zoom; -% -close all -figure('Units','centimeters',... - 'Position',[1 1 X Y],... - 'PaperPosition',[1 1 X Y],... - 'PaperUnits','centimeters') -% -fsize=8; -nx=6; -cff1=4; -cff2=2; -% -barwidth=0.2; -barheight=0.01; -titleheight=0.01; -hmargin=0.025; -vmargin=0.06; -% -width=(1-(1+nx)*hmargin)/(nx); -height=(1-6.6*vmargin-3*barheight-titleheight)/3; -% -left1=hmargin; -% -bot1=vmargin; -bot2=bot1+barheight+0.5*vmargin; -bot3=bot2+height+1.5*vmargin; -bot4=bot3+barheight+0.5*vmargin; -bot5=bot4+height+1.5*vmargin; -bot6=bot5+barheight+0.5*vmargin; -bot7=bot6+height+1.5*vmargin; -% -% title -% -subplot('Position',[0.5-0.5*barwidth bot7 barwidth titleheight]) -set(gca,'XTickLabel',[' ']) -xlabel(['CROCO experiment: ',datestr(today)],'FontSize',10) -% -% 1: wind stress -% -left=left1; -bot=bot6; -for tndx=4*5:4:4*5+4*(nx) - subplot('Position',[left bot width height]) - nc=netcdf('SCRATCH/croco_frc_GFS_0.nc'); - smstime=[]; - smstime=nc{'sms_time'}(tndx); - if ~isempty(smstime) - u=squeeze(nc{'sustr'}(tndx,:,:)); - v=squeeze(nc{'svstr'}(tndx,:,:)); - close(nc) - stress=mask.*sqrt((u2rho_2d(u)).^2+(v2rho_2d(v)).^2); - [ur,vr,lonr,latr,spd]=uv_vec2rho(u,v,lon,lat,angle,mask,skip,[0 0 0 0]); - m_proj('mercator',... - 'lon',[lonmin lonmax],... - 'lat',[latmin latmax]); - [C0,h0]=m_contourf(lon,lat,stress,[0:0.04:0.3],'k'); - shading flat - caxis([0 0.3]) - hold on - m_quiver(lonr,latr,cff1*ur,cff1*vr,0,'k'); - m_usercoast(coastfileplot,'patch',[.9 .9 .9]); - hold off - m_grid('box','fancy','xtick',5,'ytick',5,'tickdir','out',... - 'FontSize',fsize-2); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(smstime+datenum(Yorig,1,1))],'FontSize',fsize) - left=left+width+hmargin; - end -end -subplot('Position',[0.5-0.5*barwidth bot5 barwidth barheight]) -x=[0:1]; -y=[0:0.04:0.3]; -[X,Y]=meshgrid(x,y); -contourf(Y,X,Y,y) -caxis([0 0.3]) -set(gca,'XTick',[0:0.04:0.3],'YTickLabel',[' ']) -set(gca,'FontSize',fsize) -xlabel('Wind stress [N.m^{-2}]','FontSize',fsize) -% -% 2: Surface currents -% -left=left1; -bot=bot4; -for tndx=1:nx - subplot('Position',[left bot width height]) - nc=netcdf('SCRATCH/croco_avg.nc'); - scrumtime=[]; - scrumtime=(nc{'scrum_time'}(tndx))/(24*3600); - if ~isempty(scrumtime) - N=length(nc('s_rho')); - u=squeeze(nc{'u'}(tndx,N,:,:)); - v=squeeze(nc{'v'}(tndx,N,:,:)); - close(nc) - spd=mask.*sqrt((u2rho_2d(u)).^2+(v2rho_2d(v)).^2); - [ur,vr,lonr,latr,spdr]=uv_vec2rho(u,v,lon,lat,angle,mask,skip,[0 0 0 0]); - m_proj('mercator',... - 'lon',[lonmin lonmax],... - 'lat',[latmin latmax]); - [C0,h0]=m_contourf(lon,lat,100*spd,[0:10:80],'k'); - shading flat - caxis([0 80]) - hold on - m_quiver(lonr,latr,cff2*ur,cff2*vr,0,'k'); - m_usercoast(coastfileplot,'patch',[.9 .9 .9]); - hold off - m_grid('box','fancy','xtick',5,'ytick',5,'tickdir','out',... - 'FontSize',fsize-2); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(scrumtime+datenum(Yorig,1,1))],'FontSize',fsize) - left=left+width+hmargin; - end -end -subplot('Position',[0.5-0.5*barwidth bot3 barwidth barheight]) -x=[0:1]; -y=[0:10:80]; -[X,Y]=meshgrid(x,y); -caxis([0 80]) -contourf(Y,X,Y,y) -set(gca,'XTick',[0:10:80],'YTickLabel',[' ']) -set(gca,'FontSize',fsize) -xlabel('Surface currents [cm.s^{-1}]','FontSize',fsize) -% -% 3: SST -% -left=left1; -bot=bot2; -for tndx=1:nx - subplot('Position',[left bot width height]) - nc=netcdf('SCRATCH/croco_avg.nc'); - scrumtime=[]; - scrumtime=(nc{'scrum_time'}(tndx))/(24*3600); - if ~isempty(scrumtime) - N=length(nc('s_rho')); - sst=squeeze(nc{'temp'}(tndx,N,:,:)); - close(nc) - m_proj('mercator',... - 'lon',[lonmin lonmax],... - 'lat',[latmin latmax]); - [C0,h0]=m_contourf(lon,lat,sst,[10:1:25],'k'); - shading flat - caxis([10 25]) - hold on - m_usercoast(coastfileplot,'patch',[.9 .9 .9]); - hold off - m_grid('box','fancy','xtick',5,'ytick',5,'tickdir','out',... - 'FontSize',fsize-2); - set(findobj('tag','m_grid_color'),'facecolor','white') - title([datestr(scrumtime+datenum(Yorig,1,1))],'FontSize',fsize) - left=left+width+hmargin; - end -end -subplot('Position',[0.5-0.5*barwidth bot1 barwidth barheight]) -x=[0:1]; -y=[10:1:25]; -[X,Y]=meshgrid(x,y); -caxis([10 25]) -contourf(Y,X,Y,y) -set(gca,'XTick',[10:2:25],'YTickLabel',[' ']) -set(gca,'FontSize',fsize) -xlabel('SST [^{o}C]','FontSize',fsize) -% -% Print the image -% -eval(['print -depsc2 croco_',num2str(rundate),'.eps']) -eval(['!convert -density 85 croco_',num2str(rundate),... - '.eps croco_',num2str(rundate),'.jpg']) -eval(['!mv -f croco_',num2str(rundate),'.jpg croco_realtime.jpg']) -% -% send the file to the web site -% -% %!./envoi.csh croco_realtime.jpg -% % -% close all -% % -% nc=netcdf('SCRATCH/croco_sta_hindcast.nc'); -% t1=nc{'scrum_time'}(:)/(24*3600); -% sst1=squeeze(nc{'temp'}(:,1,32)); -% bott1=squeeze(nc{'temp'}(:,1,1)); -% temp1=squeeze(nc{'temp'}(:,1,:)); -% z1=squeeze(nc{'depth'}(:,1,:)); -% u1=1e3*squeeze(nc{'u'}(:,1,:)); -% v1=1e3*squeeze(nc{'v'}(:,1,:)); -% close(nc) -% tmin=min(t1); -% sst1(1)=NaN; -% bott1(1)=NaN; -% u1(1,:)=NaN; -% v1(1,:)=NaN; -% temp1(1,:)=NaN; -% -% nc=netcdf('SCRATCH/croco_sta_forecast.nc'); -% t2=nc{'scrum_time'}(:)/(24*3600); -% sst2=squeeze(nc{'temp'}(:,1,32)); -% bott2=squeeze(nc{'temp'}(:,1,1)); -% temp2=squeeze(nc{'temp'}(:,1,:)); -% z2=squeeze(nc{'depth'}(:,1,:)); -% u2=1e3*squeeze(nc{'u'}(:,1,:)); -% v2=1e3*squeeze(nc{'v'}(:,1,:)); -% close(nc) -% temp2=temp2(2:end,:); -% u2=u2(2:end,:); -% v2=v2(2:end,:); -% z2=z2(2:end,:); -% t2=t2(2:end); -% sst2=sst2(2:end); -% bott2=bott2(2:end); -% z=squeeze(z2(1,:)); -% t1=t1-tmin; -% t2=t2-tmin; -% -% figure('Units','centimeters',... -% 'Position',[1 1 20 20],... -% 'PaperPosition',[1 1 20 20],... -% 'PaperUnits','centimeters') -% -% subplot(3,1,1) -% pcolor(t1,z,u1') -% hold on -% pcolor(t2,z,u2') -% axis([0 9 -30 0]) -% shading flat -% caxis([-250 250]) -% colorbar -% title(['Velocity East [mm/s]']) -% ylabel('Depth') -% set(gca,'Xticklabel',[]) -% -% subplot(3,1,2) -% pcolor(t1,z,v1') -% hold on -% pcolor(t2,z,v2') -% axis([0 9 -30 0]) -% shading flat -% caxis([-250 250]) -% colorbar -% title(['Velocity North [mm/s]']) -% ylabel('Depth') -% set(gca,'Xticklabel',[]) -% -% subplot(3,1,3) -% pcolor(t1,z,temp1') -% hold on -% pcolor(t2,z,temp2') -% axis([0 9 -30 0]) -% shading flat -% caxis([10 15]) -% colorbar -% title(['Temperature [^oC]']) -% ylabel('Depth') -% set(gca,'Xtick',[0.5:1:9],... -% 'Xticklabel',datestr(tmin+[0.5:1:9]+datenum(Yorig,1,1),19)) -% % -% % Print the image -% % -% eval(['print -depsc2 -painters bob_',num2str(rundate),'.eps']) -% eval(['!convert -density 85 bob_',num2str(rundate),... -% '.eps bob_',num2str(rundate),'.jpg']) -% eval(['!cp -f bob_',num2str(rundate),'.jpg bob_realtime.jpg']) -% % -% % send the file to the web site -% % -% %!./envoi.csh bob_realtime.jpg - - - - - diff --git a/Nesting_tools/create_nestedclim.m b/Nesting_tools/create_nestedclim.m index 49768926..ace52e95 100644 --- a/Nesting_tools/create_nestedclim.m +++ b/Nesting_tools/create_nestedclim.m @@ -126,8 +126,8 @@ ncclim{'theta_s'} = ncdouble('one') ; ncclim{'theta_b'} = ncdouble('one') ; ncclim{'Tcline'} = ncdouble('one') ; ncclim{'hc'} = ncdouble('one') ; -ncclim{'sc_r'} = ncdouble('s_rho') ; -ncclim{'Cs_r'} = ncdouble('s_rho') ; +ncclim{'s_rho'} = ncdouble('s_rho') ; +ncclim{'Cs_rho'} = ncdouble('s_rho') ; ncclim{'tclm_time'} = ncdouble('tclm_time') ; ncclim{'sclm_time'} = ncdouble('sclm_time') ; ncclim{'uclm_time'} = ncdouble('uclm_time') ; @@ -180,23 +180,23 @@ ncclim{'hc'}.long_name = 'S-coordinate parameter, critical depth'; ncclim{'hc'}.units = ncchar('meter'); ncclim{'hc'}.units = 'meter'; % -ncclim{'sc_r'}.long_name = ncchar('S-coordinate at RHO-points'); -ncclim{'sc_r'}.long_name = 'S-coordinate at RHO-points'; -ncclim{'sc_r'}.units = ncchar('nondimensional'); -ncclim{'sc_r'}.units = 'nondimensional'; -ncclim{'sc_r'}.valid_min = -1; -ncclim{'sc_r'}.valid_max = 0; -ncclim{'sc_r'}.field = ncchar('sc_r, scalar'); -ncclim{'sc_r'}.field = 'sc_r, scalar'; -% -ncclim{'Cs_r'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); -ncclim{'Cs_r'}.long_name = 'S-coordinate stretching curves at RHO-points'; -ncclim{'Cs_r'}.units = ncchar('nondimensional'); -ncclim{'Cs_r'}.units = 'nondimensional'; -ncclim{'Cs_r'}.valid_min = -1; -ncclim{'Cs_r'}.valid_max = 0; -ncclim{'Cs_r'}.field = ncchar('Cs_r, scalar'); -ncclim{'Cs_r'}.field = 'Cs_r, scalar'; +ncclim{'s_rho'}.long_name = ncchar('S-coordinate at RHO-points'); +ncclim{'s_rho'}.long_name = 'S-coordinate at RHO-points'; +ncclim{'s_rho'}.units = ncchar('nondimensional'); +ncclim{'s_rho'}.units = 'nondimensional'; +ncclim{'s_rho'}.valid_min = -1; +ncclim{'s_rho'}.valid_max = 0; +ncclim{'s_rho'}.field = ncchar('s_rho, scalar'); +ncclim{'s_rho'}.field = 's_rho, scalar'; +% +ncclim{'Cs_rho'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); +ncclim{'Cs_rho'}.long_name = 'S-coordinate stretching curves at RHO-points'; +ncclim{'Cs_rho'}.units = ncchar('nondimensional'); +ncclim{'Cs_rho'}.units = 'nondimensional'; +ncclim{'Cs_rho'}.valid_min = -1; +ncclim{'Cs_rho'}.valid_max = 0; +ncclim{'Cs_rho'}.field = ncchar('Cs_rho, scalar'); +ncclim{'Cs_rho'}.field = 'Cs_rho, scalar'; % ncclim{'tclm_time'}.long_name = ncchar('time for temperature climatology'); ncclim{'tclm_time'}.long_name = 'time for temperature climatology'; @@ -308,7 +308,7 @@ ncclim.history = history; % result = endef(ncclim); % -[sc_r,Cs_r,sc_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); +[s_rho,Cs_rho,s_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); % % Write variables % @@ -320,8 +320,8 @@ ncclim{'theta_s'}(:) = theta_s; ncclim{'theta_b'}(:) = theta_b; ncclim{'Tcline'}(:) = Tcline; ncclim{'hc'}(:) = hc; -ncclim{'sc_r'}(:) = sc_r; -ncclim{'Cs_r'}(:) = Cs_r; +ncclim{'s_rho'}(:) = s_rho; +ncclim{'Cs_rho'}(:) = Cs_rho; ncclim{'tclm_time'}(:) = ttime; ncclim{'sclm_time'}(:) = stime; ncclim{'uclm_time'}(:) = utime ; diff --git a/Nesting_tools/create_nestedinitial.m b/Nesting_tools/create_nestedinitial.m index c4bb989d..7bb1e37e 100644 --- a/Nesting_tools/create_nestedinitial.m +++ b/Nesting_tools/create_nestedinitial.m @@ -110,8 +110,8 @@ ncini{'theta_s'} = ncdouble('one') ; ncini{'theta_b'} = ncdouble('one') ; ncini{'Tcline'} = ncdouble('one') ; ncini{'hc'} = ncdouble('one') ; -ncini{'sc_r'} = ncdouble('s_rho') ; -ncini{'Cs_r'} = ncdouble('s_rho') ; +ncini{'s_rho'} = ncdouble('s_rho') ; +ncini{'Cs_rho'} = ncdouble('s_rho') ; ncini{'scrum_time'} = ncdouble('time') ; ncini{'u'} = ncdouble('time','s_rho','eta_u','xi_u') ; ncini{'v'} = ncdouble('time','s_rho','eta_v','xi_v') ; @@ -169,23 +169,23 @@ ncini{'hc'}.long_name = 'S-coordinate parameter, critical depth'; ncini{'hc'}.units = ncchar('meter'); ncini{'hc'}.units = 'meter'; % -ncini{'sc_r'}.long_name = ncchar('S-coordinate at RHO-points'); -ncini{'sc_r'}.long_name = 'S-coordinate at RHO-points'; -ncini{'sc_r'}.units = ncchar('nondimensional'); -ncini{'sc_r'}.units = 'nondimensional'; -ncini{'sc_r'}.valid_min = -1; -ncini{'sc_r'}.valid_max = 0; -ncini{'sc_r'}.field = ncchar('sc_r, scalar'); -ncini{'sc_r'}.field = 'sc_r, scalar'; -% -ncini{'Cs_r'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); -ncini{'Cs_r'}.long_name = 'S-coordinate stretching curves at RHO-points'; -ncini{'Cs_r'}.units = ncchar('nondimensional'); -ncini{'Cs_r'}.units = 'nondimensional'; -ncini{'Cs_r'}.valid_min = -1; -ncini{'Cs_r'}.valid_max = 0; -ncini{'Cs_r'}.field = ncchar('Cs_r, scalar'); -ncini{'Cs_r'}.field = 'Cs_r, scalar'; +ncini{'s_rho'}.long_name = ncchar('S-coordinate at RHO-points'); +ncini{'s_rho'}.long_name = 'S-coordinate at RHO-points'; +ncini{'s_rho'}.units = ncchar('nondimensional'); +ncini{'s_rho'}.units = 'nondimensional'; +ncini{'s_rho'}.valid_min = -1; +ncini{'s_rho'}.valid_max = 0; +ncini{'s_rho'}.field = ncchar('s_rho, scalar'); +ncini{'s_rho'}.field = 's_rho, scalar'; +% +ncini{'Cs_rho'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); +ncini{'Cs_rho'}.long_name = 'S-coordinate stretching curves at RHO-points'; +ncini{'Cs_rho'}.units = ncchar('nondimensional'); +ncini{'Cs_rho'}.units = 'nondimensional'; +ncini{'Cs_rho'}.valid_min = -1; +ncini{'Cs_rho'}.valid_max = 0; +ncini{'Cs_rho'}.field = ncchar('Cs_rho, scalar'); +ncini{'Cs_rho'}.field = 'Cs_rho, scalar'; % ncini{'scrum_time'}.long_name = ncchar('time since initialization'); ncini{'scrum_time'}.long_name = 'time since initialization'; @@ -290,7 +290,7 @@ ncini.creation_method = 'Nestgui @ CROCOTOOLS'; % Leave define mode % %%result = endef(ncini); -[sc_r,Cs_r,sc_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); +[s_rho,Cs_rho,s_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); % % Write variables % @@ -302,8 +302,8 @@ ncini{'theta_s'}(:)=theta_s; ncini{'theta_b'}(:)=theta_b; ncini{'Tcline'}(:)=Tcline; ncini{'hc'}(:)=hc; -ncini{'sc_r'}(:)=sc_r; -ncini{'Cs_r'}(:)=Cs_r; +ncini{'s_rho'}(:)=s_rho; +ncini{'Cs_rho'}(:)=Cs_rho; ncini{'scrum_time'}(1)=time; ncini{'u'}(:)=0; ncini{'v'}(:)=0; diff --git a/Nesting_tools/create_nestedrestart.m b/Nesting_tools/create_nestedrestart.m index b328c8f8..cdc87b27 100644 --- a/Nesting_tools/create_nestedrestart.m +++ b/Nesting_tools/create_nestedrestart.m @@ -292,10 +292,10 @@ disp('Get the vertical grid') ncrst.theta_s=ncprt.theta_s(:); ncrst.theta_b=ncprt.theta_b(:); ncrst.hc=ncprt.hc(:); -ncrst.sc_w=ncprt.sc_w(:); +ncrst.s_w=ncprt.s_w(:); ncrst.Cs_w=ncprt.Cs_w(:); -ncrst.sc_r=ncprt.sc_r(:); -ncrst.Cs_r=ncprt.Cs_r(:); +ncrst.s_rho=ncprt.s_rho(:); +ncrst.Cs_rho=ncprt.Cs_rho(:); ncrst.ntimes=ncprt.ntimes(:); ncrst.ndtfast=ncprt.ndtfast(:); ncrst.dt=ncprt.dt(:); diff --git a/Nesting_tools/nested_grid.m b/Nesting_tools/nested_grid.m index 9280ae2d..60caeba5 100644 --- a/Nesting_tools/nested_grid.m +++ b/Nesting_tools/nested_grid.m @@ -152,8 +152,6 @@ while (bbound_east | bbound_west | bbound_south | bbound_north) disp(' ') disp(' Do the interpolations...') lonpchild=interp2(igrd_p,jgrd_p,lonp_parent,ichildgrd_p,jchildgrd_p,'cubic'); - lonpchild(1,1); - lonp_parent(imin,1); latpchild=interp2(igrd_p,jgrd_p,latp_parent,ichildgrd_p,jchildgrd_p,'cubic'); xpchild=interp2(igrd_p,jgrd_p,xp_parent,ichildgrd_p,jchildgrd_p,'cubic'); ypchild=interp2(igrd_p,jgrd_p,yp_parent,ichildgrd_p,jchildgrd_p,'cubic'); diff --git a/Oforc_OGCM/Copernicus_Marine_Toolbox_installation.md b/Oforc_OGCM/Copernicus_Marine_Toolbox_installation.md new file mode 100644 index 00000000..3e99a2e2 --- /dev/null +++ b/Oforc_OGCM/Copernicus_Marine_Toolbox_installation.md @@ -0,0 +1,74 @@ +# Copernicus Marine Toolbox installation + +The Copernicus Marine Toolbox is used to download and extract data from the Copernicus Marine Data Store (Global Ocean Physics Reanalysis, Global Ocean Physics Analysis and Forecast, ...) to create oceanic open boundary and initial conditions. [ https://data.marine.copernicus.eu/products ] + + +All the instructions can be found here : + * 1) https://help.marine.copernicus.eu/en/collections/4060068-copernicus-marine-toolbox + * 2) https://help.marine.copernicus.eu/en/articles/7970514-copernicus-marine-toolbox-installation + + +Prerequisites: + * python version >= 3.9 & <3.12 + + +--- +## 2 ways to download it: + + 1) typing : + ```console + python -m pip install copernicusmarine + ``` + + + 2) Use of conda/mamba package (replace conda by mamba command below) + + * Install a dedicated environment, by default named cmt_1.0 . First, you need to copy the file copernicusmarine_env.yml from the directory Forecast_tools/CopernicusMarineToolbox/ + + ```console + conda env create -f copernicusmarine_env.yml + ``` + + Note that you can use micromamba instead of mamba to install the python environment + + + Firstly, you need to activate the environment cmt_1.0 : + + ```console + conda activate cmt_1.0 + ``` + + The location of the executable (here after pathCMC) will be found typing : + + ```console + ls $CONDA_PREFIX/bin/copernicusmarine + ``` + Note that the value returned by your terminal here, will be your pathCMC to fill in your + crocotools_param.m and download_glorys_data.sh script + + +--- +## When it's installed : + +You will have access to the copernicusmarine executable with various sub-command, very useful to get, extract and download data from the Copernicus Marine Data Store : + +```console +copernicusmarine -h +``` + +Or alternatively: + +```console +$CONDA_PREFIX/bin/copernicusmarine -h +``` + + +To be used in the Matlab croco_tools, in the crocotools_param.m, you need to : + +- define the path to the copernicusmarine executable (`pathCMC`) in crocotools_param.m at *section 7, Option for make_OGCM_frcst or make_OGCM_mercator* +- define your copernicus marine `login` and `password` in crocotools_param.m at *section 7, Options for for make_OGCM_frcst or make_OGCM_mercator* + + + + + diff --git a/Oforc_OGCM/README b/Oforc_OGCM/README deleted file mode 100644 index e6c1fb90..00000000 --- a/Oforc_OGCM/README +++ /dev/null @@ -1,24 +0,0 @@ -== -make_OGCM.m is a way to get initial and boundary conditions -for CROCO simulations from different global oceanic models. -for the moment it works with SODA and ECCO. -it uses DODS to extract the subgrids. - -Pierrick 2006/1/19. - -== -Update: -Now it use the ECCO2 data, every 3 days -Gildas 2014/2/14 - -== -24-11-2020 : Update by Gildas Cambon -Now you can process oceanic frocing from the global daily glorys12 reanalysis -at 1/12 degree resolution. -It is distributed by copernicus/mecator => https://resources.marine.copernicus.eu/ - -It use the python-motu client to download a space and time -extraction of the reanalysis. -Have a look at the routines : -- download_mercator_frcst_python.m -- get_file_python_mercator.m diff --git a/Oforc_OGCM/README.md b/Oforc_OGCM/README.md new file mode 100644 index 00000000..31f4a7ca --- /dev/null +++ b/Oforc_OGCM/README.md @@ -0,0 +1,20 @@ +## 23-02-2024 : Update to use the Copernicus Marine Toolbox + + - see Copernicus_Marine_Toolbox_installation.md + +## 24-11-2020 : Update by Gildas Cambon +Now you can process oceanic forcing from the global daily glorys12 reanalysis +at 1/12 degree resolution. +It is distributed by copernicus/mecator => https://resources.marine.copernicus.eu/ + +It use the python-motu client to download a space and time +extraction of the reanalysis. +Have a look at the routines : +- download_mercator_frcst_python.m +- get_file_python_mercator.m + +## 14-02-2014 : Gildas Cambon +Now it use the ECCO2 data, every 3 days + +## 01-19-2006 : Pierrick Penven +make_OGCM.m is a way to get initial and boundary conditions. For CROCO simulations from different global oceanic models. For the moment it works with SODA and ECCO. it uses DODS to extract the subgrids diff --git a/Oforc_OGCM/README.md.bck b/Oforc_OGCM/README.md.bck new file mode 100644 index 00000000..31f4a7ca --- /dev/null +++ b/Oforc_OGCM/README.md.bck @@ -0,0 +1,20 @@ +## 23-02-2024 : Update to use the Copernicus Marine Toolbox + + - see Copernicus_Marine_Toolbox_installation.md + +## 24-11-2020 : Update by Gildas Cambon +Now you can process oceanic forcing from the global daily glorys12 reanalysis +at 1/12 degree resolution. +It is distributed by copernicus/mecator => https://resources.marine.copernicus.eu/ + +It use the python-motu client to download a space and time +extraction of the reanalysis. +Have a look at the routines : +- download_mercator_frcst_python.m +- get_file_python_mercator.m + +## 14-02-2014 : Gildas Cambon +Now it use the ECCO2 data, every 3 days + +## 01-19-2006 : Pierrick Penven +make_OGCM.m is a way to get initial and boundary conditions. For CROCO simulations from different global oceanic models. For the moment it works with SODA and ECCO. it uses DODS to extract the subgrids diff --git a/Oforc_OGCM/create_OGCM.m b/Oforc_OGCM/create_OGCM.m index 24e4ae1e..88f04690 100644 --- a/Oforc_OGCM/create_OGCM.m +++ b/Oforc_OGCM/create_OGCM.m @@ -80,6 +80,18 @@ nc{'vbar'}.long_name='MERIDIONAL BAROTROPIC VELOCITY'; nc{'vbar'}.units=ncchar('m/sec'); nc{'vbar'}.units='m/sec'; nc{'vbar'}.missing_value=missval; +%nc{'taux'}=ncfloat('time','latU','lonU') ; +%nc{'taux'}.long_name=ncchar('TAU_X'); +%nc{'taux'}.long_name='TAU_X'; +%nc{'taux'}.units=ncchar('N.m-2'); +%nc{'taux'}.units='N.m-2'; +%nc{'taux'}.missing_value=missval; +%nc{'tauy'}=ncfloat('time','latV','lonV') ; +%nc{'tauy'}.long_name=ncchar('TAU_Y'); +%nc{'tauy'}.long_name='TAU_Y'; +%nc{'tauy'}.units=ncchar('N.m-2'); +%nc{'tauy'}.units='N.m-2'; +%nc{'tauy'}.missing_value=missval; nc{'ssh'}=ncfloat('time','latT','lonT') ; nc{'ssh'}.long_name=ncchar('SEA LEVEL HEIGHT'); nc{'ssh'}.long_name='SEA LEVEL HEIGHT'; @@ -129,6 +141,8 @@ nc{'time'}(tndx)=time(tndx); % if length(time)==1 nc{'ssh'}(tndx,:,:)=ssh; +% nc{'taux'}(tndx,:,:)=taux; +% nc{'tauy'}(tndx,:,:)=tauy; u1=u; v1=v; nc{'u'}(tndx,:,:,:)=u1; @@ -137,6 +151,8 @@ nc{'time'}(tndx)=time(tndx); nc{'salt'}(tndx,:,:,:)=salt; else nc{'ssh'}(tndx,:,:)=squeeze(ssh(tndx,:,:)); +% nc{'taux'}(tndx,:,:)=squeeze(taux(tndx,:,:)); +% nc{'tauy'}(tndx,:,:)=squeeze(tauy(tndx,:,:)); u1=squeeze(u(tndx,:,:,:)); v1=squeeze(v(tndx,:,:,:)); nc{'u'}(tndx,:,:,:)=u1; diff --git a/Oforc_OGCM/create_SODA.m b/Oforc_OGCM/create_SODA.m deleted file mode 100644 index 2d22d123..00000000 --- a/Oforc_OGCM/create_SODA.m +++ /dev/null @@ -1,199 +0,0 @@ -function create_SODA(fname,lonT,latT,lonU,latU,lonV,latV,depth,time,... - temp,salt,u,v,ssh,taux,tauy,Yorig) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Create the OGCM file -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2005-2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 6-Sep-2006 by Pierrick Penven -% Updated 7-Oct-2013 by Gildas Cambon -% Updated 14-Fev-2013 by Gildas Cambon -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -missval=NaN; -disp(' Create the OGCM file') -nc=netcdf(fname,'clobber'); -redef(nc); -nc('lonT')=length(lonT); -nc('latT')=length(latT); -nc('lonU')=length(lonU); -nc('latU')=length(latU); -nc('lonV')=length(lonV); -nc('latV')=length(latV); -nc('depth')=length(depth); -nc('time')=length(time); -nc{'temp'}=ncfloat('time','depth','latT','lonT') ; -nc{'temp'}.long_name=ncchar('TEMPERATURE'); -nc{'temp'}.long_name='TEMPERATURE'; -nc{'temp'}.units=ncchar('deg. C'); -nc{'temp'}.units='deg. C'; -nc{'temp'}.missing_value=missval; -nc{'salt'}=ncfloat('time','depth','latT','lonT') ; -nc{'salt'}.long_name=ncchar('SALINITY'); -nc{'salt'}.long_name='SALINITY'; -nc{'salt'}.units=ncchar('ppt'); -nc{'salt'}.units='ppt'; -nc{'salt'}.missing_value=missval; -nc{'u'}=ncfloat('time','depth','latU','lonU') ; -nc{'u'}.long_name=ncchar('ZONAL VELOCITY'); -nc{'u'}.long_name='ZONAL VELOCITY'; -nc{'u'}.units=ncchar('m/sec'); -nc{'u'}.units='m/sec'; -nc{'u'}.missing_value=missval; -nc{'v'}=ncfloat('time','depth','latV','lonV') ; -nc{'v'}.long_name=ncchar('MERIDIONAL VELOCITY'); -nc{'v'}.long_name='MERIDIONAL VELOCITY'; -nc{'v'}.units=ncchar('m/sec'); -nc{'v'}.units='m/sec'; -nc{'v'}.missing_value=missval; -nc{'ubar'}=ncfloat('time','latU','lonU') ; -nc{'ubar'}.long_name=ncchar('ZONAL BAROTROPIC VELOCITY'); -nc{'ubar'}.long_name='ZONAL BAROTROPIC VELOCITY'; -nc{'ubar'}.units=ncchar('m/sec'); -nc{'ubar'}.units='m/sec'; -nc{'ubar'}.missing_value=missval; -nc{'vbar'}=ncfloat('time','latV','lonV') ; -nc{'vbar'}.long_name=ncchar('MERIDIONAL BAROTROPIC VELOCITY'); -nc{'vbar'}.long_name='MERIDIONAL BAROTROPIC VELOCITY'; -nc{'vbar'}.units=ncchar('m/sec'); -nc{'vbar'}.units='m/sec'; -nc{'vbar'}.missing_value=missval; -nc{'taux'}=ncfloat('time','latU','lonU') ; -nc{'taux'}.long_name=ncchar('TAU_X'); -nc{'taux'}.long_name='TAU_X'; -nc{'taux'}.units=ncchar('N.m-2'); -nc{'taux'}.units='N.m-2'; -nc{'taux'}.missing_value=missval; -nc{'tauy'}=ncfloat('time','latV','lonV') ; -nc{'tauy'}.long_name=ncchar('TAU_Y'); -nc{'tauy'}.long_name='TAU_Y'; -nc{'tauy'}.units=ncchar('N.m-2'); -nc{'tauy'}.units='N.m-2'; -nc{'tauy'}.missing_value=missval; -nc{'ssh'}=ncfloat('time','latT','lonT') ; -nc{'ssh'}.long_name=ncchar('SEA LEVEL HEIGHT'); -nc{'ssh'}.long_name='SEA LEVEL HEIGHT'; -nc{'ssh'}.units=ncchar('m'); -nc{'ssh'}.units='m'; -nc{'ssh'}.missing_value=missval; -nc{'lonT'}=ncdouble('lonT') ; -nc{'lonT'}.units=ncchar('degrees_east'); -nc{'lonT'}.units='degrees_east'; -nc{'latT'}=ncdouble('latT') ; -nc{'latT'}.units=ncchar('degrees_north'); -nc{'latT'}.units='degrees_north'; -nc{'lonU'}=ncdouble('lonU') ; -nc{'lonU'}.units=ncchar('degrees_east'); -nc{'lonU'}.units='degrees_east'; -nc{'latU'}=ncdouble('latU') ; -nc{'latU'}.units=ncchar('degrees_north'); -nc{'latU'}.units='degrees_north'; -nc{'lonV'}=ncdouble('lonV') ; -nc{'lonV'}.units=ncchar('degrees_east'); -nc{'lonV'}.units='degrees_east'; -nc{'latV'}=ncdouble('latV') ; -nc{'latV'}.units=ncchar('degrees_north'); -nc{'latV'}.units='degrees_north'; -nc{'depth'}=ncdouble('depth') ; -nc{'depth'}.units=ncchar('meters'); -nc{'depth'}.units='meters'; -nc{'time'}=ncdouble('time') ; -eval(['nc{''time''}.units = ncchar(''days since 1-Jan-',num2str(Yorig),' 00:00:0.0'');']) -eval(['nc{''time''}.units = ''days since 1-Jan-',num2str(Yorig),' 00:00:0.0'';']) -endef(nc); -% -% File the file -% -disp(' Fill the OGCM file') -nc{'depth'}(:)=depth; -nc{'latT'}(:)=latT; -nc{'lonT'}(:)=lonT; -nc{'latU'}(:)=latU; -nc{'lonU'}(:)=lonU; -nc{'latV'}(:)=latV; -nc{'lonV'}(:)=lonV; -% -for tndx=1:length(time) -% -nc{'time'}(tndx)=time(tndx); -% -if length(time)==1 - nc{'ssh'}(tndx,:,:)=ssh; - nc{'taux'}(tndx,:,:)=taux; - nc{'tauy'}(tndx,:,:)=tauy; - u1=u; - v1=v; - nc{'u'}(tndx,:,:,:)=u1; - nc{'v'}(tndx,:,:,:)=v1; - nc{'temp'}(tndx,:,:,:)=temp; - nc{'salt'}(tndx,:,:,:)=salt; -else - nc{'ssh'}(tndx,:,:)=squeeze(ssh(tndx,:,:)); - nc{'taux'}(tndx,:,:)=squeeze(taux(tndx,:,:)); - nc{'tauy'}(tndx,:,:)=squeeze(tauy(tndx,:,:)); - u1=squeeze(u(tndx,:,:,:)); - v1=squeeze(v(tndx,:,:,:)); - nc{'u'}(tndx,:,:,:)=u1; - nc{'v'}(tndx,:,:,:)=v1; - nc{'temp'}(tndx,:,:,:)=squeeze(temp(tndx,:,:,:)); - nc{'salt'}(tndx,:,:,:)=squeeze(salt(tndx,:,:,:)); -end -% -% Compute the barotropic velocities -% -masku=isfinite(u1); -maskv=isfinite(v1); -u1(isnan(u1))=0; -v1(isnan(v1))=0; -dz=gradient(depth); -NZ=length(depth); -du=0*squeeze(u1(1,:,:)); -zu=du; -dv=0*squeeze(v1(1,:,:)); -zv=dv; -for k=1:NZ - du=du+dz(k)*squeeze(u1(k,:,:)); - zu=zu+dz(k)*squeeze(masku(k,:,:)); - dv=dv+dz(k)*squeeze(v1(k,:,:)); - zv=zv+dz(k)*squeeze(maskv(k,:,:)); -end -du(zu==0)=NaN; -dv(zv==0)=NaN; -zu(zu==0)=NaN; -zv(zv==0)=NaN; -ubar=du./zu; -vbar=dv./zv; -% -nc{'ubar'}(tndx,:,:)=ubar; -nc{'vbar'}(tndx,:,:)=vbar; -% -end -% -close(nc) -% -return - -end - diff --git a/Oforc_OGCM/download_ECCO.m b/Oforc_OGCM/download_ECCO.m deleted file mode 100644 index 144424cc..00000000 --- a/Oforc_OGCM/download_ECCO.m +++ /dev/null @@ -1,102 +0,0 @@ -function download_ECCO (Ymin,Ymax,Mmin,Mmax,lonmin,lonmax,latmin,latmax,... - OGCM_dir,OGCM_prefix,url,Yorig) -% -% Extract a subgrid from ECCO to get a CROCO forcing -% Store that into monthly files. -% Take care of the Greenwitch Meridian. -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 6-Sep-2006 by Pierrick Penven -% Updated 14-Feb-2014 by Gildas cambon : ECCO2 server -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -disp([' ']) -disp(['Get data from Y',num2str(Ymin),'M',num2str(Mmin),... - ' to Y',num2str(Ymax),'M',num2str(Mmax)]) -disp(['Minimum Longitude: ',num2str(lonmin)]) -disp(['Maximum Longitude: ',num2str(lonmax)]) -disp(['Minimum Latitude: ',num2str(latmin)]) -disp(['Maximum Latitude: ',num2str(latmax)]) -disp([' ']) -% -% Catalogue vvname for ECCO2 -% -catalog_vname={'THETA','SALT','UVEL','VVEL','SSH'}; -catalog_vname2={'temp','salt','u','v','ssh'}; -% -% Create the directory -% -disp(['Making output data directory ',OGCM_dir]) -eval(['!mkdir ',OGCM_dir]) -% -% Start -% -disp(['Process the dataset: ',url]) -% -% Find a subset of the ECCO grid -% -fname=[url,'THETA.nc/THETA.1440x720x50.19920102.nc']; -[i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - jrange,jrange_v,krange,lon,lon_u,lat,lat_v,depth]=... - get_ECCO_subgrid(fname,lonmin,lonmax,latmin,latmax); - -time0=readdap(fname,'TIME',[]); -% -% Loop on the years -% -for Y=Ymin:Ymax - disp(['Processing year: ',num2str(Y)]) - % - % Loop on the months - % - if Y==Ymin - mo_min=Mmin; - else - mo_min=1; - end - if Y==Ymax - mo_max=Mmax; - else - mo_max=12; - end - for M=mo_min:mo_max - disp([' Processing month: ',num2str(M)]) - ECCO_file=[OGCM_dir,OGCM_prefix,'Y',num2str(Y),'M',num2str(M),'.cdf']; - % - % Extract ECCO data - % - extract_ECCO(OGCM_dir,OGCM_prefix,url,Y,M,... - catalog_vname,catalog_vname2,... - lon,lat,depth,krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max,Yorig) - - end -end -return - -end - diff --git a/Oforc_OGCM/download_glorys_data.sh b/Oforc_OGCM/download_glorys_data.sh index 7c85633f..8b20c40a 100755 --- a/Oforc_OGCM/download_glorys_data.sh +++ b/Oforc_OGCM/download_glorys_data.sh @@ -1,6 +1,6 @@ #!/bin/bash set -e -source ../../myenv_mypath.sh +#source ../../myenv_mypath.sh ########################## # python # ====== @@ -10,27 +10,14 @@ source ../../myenv_mypath.sh # # motuclient # ========== -# 1- Use croco's motuclient (pathMotu => Forecast_tools) or ... -# 2- Install your own motuclient: -# To update/upgrade and get the latest version of motuclient -# from a previous version (<= v1.8.3), type in the following: -# $ python -m pip install --upgrade motuclient -# Otherwise (if there is no previous installation of motuclient), -# type in the following: -# $ python -m pip install motuclient -# It should install and display motuclient package v1.8.4 (Oct. 2019). -# To make sure, display the version: -# $ python -m motuclient --version -# If it does not return: "motuclient-python v1.8.X" ("X" >= "4"), -# then type in the following: -# $ python -m pip install motuclient==1.8.4 +# 1- Use copernicusmarine client ... #### USER INFORMATIONS #### user='XXXXXXXXX' -password='XXXXXXXXXX' +password='XXXXXXXXX' ### -### motu client ### -path_to_motu="${OCE}/../../croco_tools" # Use croco's motuclient croco_tools/Forecast_tools -# if you want to use your own motu, leave empty +### Copernicus marine client ### +# this is the pathCMC (described on the readme file Copernicus_Marine_Toolbox_installation.md) +path_to_cmt="/home/to/your/bin/copernicusmarine" ### YEAR_START=2017 MONTH_START=1 @@ -49,7 +36,8 @@ DT_TIME= # Value in days. Default value when empty is 1 month. kdata="MONTHLY" # DAILY or MONTHLY #################### READ_GRD=1 # read croco_grid to find lon/lat min-max -INPUT_GRD="${OCE_FILES_DIR}/croco_grd.nc" +#INPUT_GRD="${OCE_FILES_DIR}/croco_grd.nc" +INPUT_GRD="CROCO_FILES/croco_grd.nc" # In case you don't want to read croco_grd # Please use -180/180 -90/90 format lon_min="-90" @@ -72,16 +60,14 @@ for field in ${vars}; do done ### -### motu command ### -if [[ -z ${path_to_motu} ]]; then - command_line="python -m motuclient" +if [[ -z ${path_to_cmt} ]]; then + echo "You need to define your path_to_cmt variable ..." + exit 12 else - command_line="${path_to_motu}/Forecast_tools/motuclient-python/motuclient.py" + command_line=${path_to_cmt}" " fi -## motu info -motu_url_reana='http://my.cmems-du.eu/motu-web/Motu' -service_id_reana='GLOBAL_MULTIYEAR_PHY_001_030-TDS' +## cmt info if [[ ${kdata} == "DAILY" ]]; then product_id_reana='cmems_mod_glo_phy_my_0.083_P1D-m' elif [[ ${kdata} == "MONTHLY" ]]; then @@ -126,18 +112,20 @@ for YEAR in `seq ${YEAR_START} ${YEAR_END}`; do daystrt=1 start_date=$( printf "%04d-%02d-%02d" $YEAR $MONTH $daystrt) end_date=$(printf `date +"%Y-%m-%d" -d "${start_date} +1 month - 1 day"`) - OUTNAME="${OUTDIR}/raw_motu_${PREFIX}_Y${YEAR}M${MONTH}.nc" - ${command_line} --motu ${motu_url_reana} --service-id ${service_id_reana} --product-id ${product_id_reana} --longitude-min ${lon_min} --longitude-max ${lon_max} --latitude-min ${lat_min} --latitude-max ${lat_max} --date-min "${start_date} 12:00:00" --date-max "${end_date} 12:00:00" --depth-min 0.493 --depth-max 5727.918 ${variables} --out-dir ./ --out-name ${OUTNAME} --user ${user} --pwd ${password} + OUTNAME="${OUTDIR}/raw_${PREFIX}_Y${YEAR}M${MONTH}.nc" + echo "${command_line} subset -i ${product_id_reana} -x ${lon_min} -X ${lon_max} -y ${lat_min} -Y ${lat_max} -t "${start_date}" -T "${end_date}" -z 0.493 -Z 5727.918 ${variables} -o ./ -f ${OUTNAME} --username ${user} --password ${password} --force-download" + ${command_line} subset -i ${product_id_reana} -x ${lon_min} -X ${lon_max} -y ${lat_min} -Y ${lat_max} -t "${start_date}" -T "${end_date}" -z 0.493 -Z 5727.918 ${variables} -o ./ -f ${OUTNAME} --username ${user} --password ${password} --force-download elif [[ ${kdata} == "DAILY" ]]; then if [ -z ${DT_TIME} ]; then start_date=$( printf "%04d-%02d-%02d" $YEAR $MONTH $daystrt) end_date=$(printf `date +"%Y-%m-%d" -d "${start_date} +1 month - 1 day"`) - OUTNAME="${OUTDIR}/raw_motu_${PREFIX}_Y${YEAR}M${MONTH}.nc" - ${command_line} --motu ${motu_url_reana} --service-id ${service_id_reana} --product-id ${product_id_reana} --longitude-min ${lon_min} --longitude-max ${lon_max} --latitude-min ${lat_min} --latitude-max ${lat_max} --date-min "${start_date} 12:00:00" --date-max "${end_date} 12:00:00" --depth-min 0.493 --depth-max 5727.918 ${variables} --out-dir ./ --out-name ${OUTNAME} --user ${user} --pwd ${password} + OUTNAME="${OUTDIR}/raw_${PREFIX}_Y${YEAR}M${MONTH}.nc" + echo "${command_line} subset -i ${product_id_reana} -x ${lon_min} -X ${lon_max} -y ${lat_min} -Y ${lat_max} -t "${start_date}" -T "${end_date}" -z 0.493 -Z 5727.918 ${variables} -o ./ -f ${OUTNAME} --username ${user} --password ${password} --force-download" + ${command_line} subset -i ${product_id_reana} -x ${lon_min} -X ${lon_max} -y ${lat_min} -Y ${lat_max} -t "${start_date}" -T "${end_date}" -z 0.493 -Z 5727.918 ${variables} -o ./ -f ${OUTNAME} --username ${user} --password ${password} --force-download else for DAY in `seq ${dstart} ${DT_TIME} ${dend}`; do - tmpoutname="${OUTDIR}/raw_motu_${PREFIX}_Y${YEAR}M${MONTH}D${DAY}.nc" + tmpoutname="${OUTDIR}/raw_${PREFIX}_Y${YEAR}M${MONTH}D${DAY}.nc" start_date=$( printf "%04d-%02d-%02d" $YEAR $MONTH $DAY ) end_date=$( date +"%Y-%m-%d" -d "${start_date} +${DT_TIME} day - 1 day" ) tmpsdate=$( echo `date -d ${start_date} +"%Y%m"` ) @@ -150,12 +138,13 @@ for YEAR in `seq ${YEAR_START} ${YEAR_END}`; do nbdays=$(( (${second_date} - ${first_date})/86400 )) end_date=$( date +"%Y-%m-%d" -d "${end_date} - ${nbdays} day" ) fi - ${command_line} --motu ${motu_url_reana} --service-id ${service_id_reana} --product-id ${product_id_reana} --longitude-min ${lon_min} --longitude-max ${lon_max} --latitude-min ${lat_min} --latitude-max ${lat_max} --date-min "${start_date} 12:00:00" --date-max "${end_date} 12:00:00" --depth-min 0.493 --depth-max 5727.918 ${variables} --out-dir ./ --out-name ${tmpoutname} --user ${user} --pwd ${password} + echo "${command_line} subset -i ${product_id_reana} -x ${lon_min} -X ${lon_max} -y ${lat_min} -Y ${lat_max} -t "${start_date}" -T "${end_date}" -z 0.493 -Z 5727.918 ${variables} -o ./ -f ${tmpoutname} --username ${user} --password ${password} --force-download" + ${command_line} subset -i ${product_id_reana} -x ${lon_min} -X ${lon_max} -y ${lat_min} -Y ${lat_max} -t "${start_date}" -T "${end_date}" -z 0.493 -Z 5727.918 ${variables} -o ./ -f ${tmpoutname} --username ${user} --password ${password} --force-download ncks -O -F --mk_rec_dmn time ${tmpoutname} ${tmpoutname} done cd ${OUTDIR} - ncrcat -O raw_motu_${PREFIX}_Y${YEAR}M${MONTH}D*.nc raw_motu_${PREFIX}_Y${YEAR}M${MONTH}.nc - rm -r raw_motu_${PREFIX}_Y${YEAR}M${MONTH}D*.nc + ncrcat -O raw_${PREFIX}_Y${YEAR}M${MONTH}D*.nc raw_${PREFIX}_Y${YEAR}M${MONTH}.nc + rm -r raw_${PREFIX}_Y${YEAR}M${MONTH}D*.nc cd - fi fi diff --git a/Oforc_OGCM/download_mercator_python.m b/Oforc_OGCM/download_mercator_python.m index eb98f398..31d4ea54 100644 --- a/Oforc_OGCM/download_mercator_python.m +++ b/Oforc_OGCM/download_mercator_python.m @@ -1,5 +1,5 @@ -function download_mercator_python(pathMotu,user,password,mercator_type, ... - motu_url,service_id,product_id, ... +function download_mercator_python(pathCMC,user,password,mercator_type, ... + product_id, ... Y,M, ... lonmin,lonmax,latmin,latmax,zmax, ... OGCM_dir,OGCM_prefix,thedatemonth,Yorig) @@ -37,7 +37,6 @@ function download_mercator_python(pathMotu,user,password,mercator_type, ... % Updated 20-Aug-2008 by Matthieu Caillaud & P. Marchesiello % Update 23-Oct-2020 by Gildas Cambon %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% pathMotu is a deprecated parameter ! download_raw_data=1; convert_raw2crocotools=1; % convert -> crocotools format data % @@ -48,7 +47,7 @@ vars = {'zos' ... 'vo' ... 'thetao' ... 'so'}; - +% disp([' ']) disp(['Get data for Y',num2str(Y),'M',num2str(M)]) disp(['Minimum Longitude: ',num2str(lonmin)]) @@ -60,8 +59,7 @@ disp([' ']) % Create the directory % disp(['Making output data directory ',OGCM_dir]) -eval(['!mkdir ',OGCM_dir]) - +eval(['!mkdir ',OGCM_dir, ' 2> /dev/null']) % % Get files and dates % @@ -69,7 +67,6 @@ eval(['!mkdir ',OGCM_dir]) time1=datenum(Y,M,01); time2=datenum(Y,M+1,01) - 1; %time2=datenum(Y,M,02); %for debug -%e debug time=cat(2,time1,time2); tiempo_inicial = time(1); tiempo_final = time(end); @@ -80,47 +77,84 @@ end if (lonmax > 180) lonmax = lonmax - 360; end -raw_mercator_name=[OGCM_dir,'raw_motu_',OGCM_prefix,thedatemonth,'.nc']; +raw_mercator_name=[OGCM_dir,'raw_',OGCM_prefix,thedatemonth,'.nc']; if download_raw_data % - % Get data - % (temporarily removing Matlab lib path to avoid conflict with Python, mandatory with python 2.7.X) - % for example problem like : - % Execution failed: /usr/lib/python2.7/lib-dynload/pyexpat.x86_64-linux-gnu.so: - % undefined symbol: XML_SetHashSalt" ) - - pathdyld=getenv('DYLD_LIBRARY_PATH'); - setenv('DYLD_LIBRARY_PATH',''); - pathld=getenv('LD_LIBRARY_PATH'); - setenv('LD_LIBRARY_PATH',''); - - get_file_python_mercator(pathMotu,mercator_type, ... - motu_url,service_id,product_id, ... + % Get data + if mercator_type==1 + get_file_python_mercator(pathCMC, ... + product_id, ... vars, ... [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... {datestr(tiempo_inicial,'yyyy-mm-dd') ... datestr(tiempo_final, 'yyyy-mm-dd')}, ... {user password}, ... - raw_mercator_name); - - setenv('DYLD_LIBRARY_PATH',pathdyld); % set back Matlab libs path - setenv('LD_LIBRARY_PATH',pathld); % set back Matlab libs path -end %end download_raw_data + raw_mercator_name); + + elseif mercator_type==2 + %zos + get_file_python_mercator(pathCMC,... + product_id{1}, ... + vars{1}, ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_z.nc']); + %uo/vo + get_file_python_mercator(pathCMC, ... + product_id{2}, ... + {vars{2:3}}, ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_u.nc']); + %thetao + get_file_python_mercator(pathCMC, ... + product_id{3}, ... + vars{4}, ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_t.nc']); + %so + get_file_python_mercator(pathCMC, ... + product_id{4}, ... + vars{5}, ... + [lonmin-1 lonmax+1 latmin-1 latmax+1 0 zmax], ... + {datestr(tiempo_inicial,'yyyy-mm-dd') ... + datestr(tiempo_final, 'yyyy-mm-dd')}, ... + {user password}, ... + [raw_mercator_name(1:end-3),'_s.nc']); + end +% +end %end download_raw_data +% if convert_raw2crocotools % % Convert data format and write in a more CROCOTOOLS % compatible input file % - mercator_name=[OGCM_dir,'raw_motu_',OGCM_prefix,thedatemonth,'.nc']; + mercator_name=[OGCM_dir,'raw_',OGCM_prefix,thedatemonth,'.nc']; if exist(mercator_name) disp('Mercator file already exist => overwrite it') end - write_mercator(OGCM_dir,OGCM_prefix,raw_mercator_name, ... - mercator_type,vars,time,thedatemonth,Yorig); % write data - eval(['! rm -f ',raw_mercator_name]); + if mercator_type==1 + write_mercator(OGCM_dir,OGCM_prefix,raw_mercator_name, ... + mercator_type,vars,time,thedatemonth,Yorig); % write data +% eval(['! rm -f ',raw_mercator_name]); + elseif mercator_type==2 + write_mercator_multi(OGCM_dir,OGCM_prefix,raw_mercator_name, ... + mercator_type,vars,time,thedatemonth,Yorig); % write data +% eval(['! rm -f ',raw_mercator_name(1:end-3),'*.nc']); + end + + end end diff --git a/Oforc_OGCM/extract_ECCO.m b/Oforc_OGCM/extract_ECCO.m deleted file mode 100644 index 936831af..00000000 --- a/Oforc_OGCM/extract_ECCO.m +++ /dev/null @@ -1,172 +0,0 @@ -function extract_ECCO(OGCM_dir,OGCM_prefix,url,Y,M,catalog_vname,... - catalog_vname2,... - lon,lat,depth,... - krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max,...... - Yorig) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Extract a subset from ECCO using DODS -% Write it in a local file (keeping the classic -% SODA netcdf format) -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 6-Sep-2006 by Pierrick Penven -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -disp([' Download ECCO2 for ',num2str(Y),... - ' - ',num2str(M)]) -% -% Get Matlab version -% -matversion=version('-release'); -matlab_new=~verLessThan('matlab','7.14'); -disp([' Matlab version : ',matversion]) -disp([' !!! WARNING !!! ']) -if matlab_new - disp([' Matlab version >= 2012a ']) - disp([' --> use Matlab built-in support for OPeNDAP']) - disp([' with Matlab scripts in Opendap_tools_no_loaddap']) - disp([' (set path in start.m)']) -else - disp([' Matlab version < 2012a ']) - disp([' --> use Matlab scripts in Opendap_tools']) - disp([' (set path in start.m)']) -end -disp([' !!! WARNING !!! ']) -% -% Get the number of days in the month -% -nmax=daysinmonth(Y,M); -%%nmax=5; -Lm=length(lon); -Mm=length(lat); -N=length(depth); -%int_3D=3; % Interval in days between ECCO2 data for 3D variables -%int_2D=1; % Interval in days between ECCO2 data for 2D variables -for vv=1:length(catalog_vname) - vname=char(catalog_vname(vv)); - vname2=char(catalog_vname2(vv)); - prefix=[char(vname),'.nc/']; - % Get starting day of month - if strcmp(vname,'THETA') - Dst=1; - disp(['-->']) - disp([' Check ',vname,' for ',datestr(datenum(Y,M,Dst,0,0,0))]) - fname0=get_filename_ECCO(vname,Y,M,Dst); - fname=[url,prefix,fname0]; - % Determine if dap file exists at day D0 - % --> if not, increment - dok=[]; - try; dok=loaddap('-A -e +v ',fname); end; - while isempty(dok)==1 - Dst=Dst+1; - fname0=get_filename_ECCO(vname,Y,M,Dst); - fname=[url,prefix,fname0]; - try; dok=loaddap('-A -e +v ',fname); end; - end - end - % Compute 3D variable every 3 days - if ~strcmp(vname,'SSH')% v-> name='UVEL, VVEL' - var0=nan*zeros(N,Mm,Lm); - tndx=0; - for D=Dst:3:nmax - tndx=tndx+1; - disp(['===>']) - disp([' Downloading ',vname,' for ',datestr(datenum(Y,M,D,0,0,0))]) - fname0=get_filename_ECCO(vname,Y,M,D); - fname=[url,prefix,fname0]; - time=readdap(fname,'TIME',[]); - time3d(tndx)=time+datenum(1992,1,1)-datenum(Yorig,1,1); - x=readattribute(fname); - eval(['missing_value=x.',vname,'.missing_value;']) - var0=getdap('',fname,vname,'[0:0]', ... - krange,jrange,i1min,i1max,i2min,i2max,i3min,i3max); - var0(var0<=-2000)=NaN; - if matlab_new - var(tndx,:,:,:)=var0; - else - var(tndx,:,:,:)=permute(var0,[3 1 2]); % old readdap version - end - %size(var) - end - if strcmp(vname,'UVEL') - u=var; - elseif strcmp(vname,'VVEL') - v=var; - elseif strcmp(vname,'THETA') - temp=var; - elseif strcmp(vname,'SALT') - salt=var; - end - % disp(['Write variable ',vname2]) - % create_ECCO_3D([OGCM_dir,vname2,'_Y',num2str(Y),'M',num2str(M),'.cdf'], ... - % vname2,lon,lat,depth,time3d,var,Yorig) - clear var - - else - - % Compute 2D variable every 3 days also! - var0=nan*zeros(Mm,Lm); - tndx=0; - for D=Dst:3:nmax - tndx=tndx+1; - disp(['===>']) - disp([' Downloading ',vname,' for ',datestr(datenum(Y,M,D,0,0,0))]) - fname0=get_filename_ECCO(vname,Y,M,D); - fname=[url,prefix,fname0]; - time=readdap(fname,'TIME',[]); - time3d(tndx)=time+datenum(1992,1,1)-datenum(Yorig,1,1); - x=readattribute(fname); - eval(['missing_value=x.',vname,'.missing_value;']) - var0=getdap('',fname,vname,'[0:0]','', ... - jrange,i1min,i1max,i2min,i2max,i3min,i3max); - var0(var0<=-2000)=NaN; - var(tndx,:,:)=var0; - end - if strcmp(vname,'SSH') - ssh=var; - end - % disp(['Write variable ',vname2]) - % create_ECCO_2D([OGCM_dir,vname2,'_Y',num2str(Y),'M',num2str(M),'.cdf'], ... - % vname2,lon,lat,time3d,var,Yorig) - clear var - - end %-> if - -end %-> catalogue_vname list - -% -% Create ECCO file and write variables -% -create_OGCM([OGCM_dir,OGCM_prefix,'Y',num2str(Y),'M',num2str(M),'.cdf'],... - lon,lat,lon,lat,lon,lat,depth,time3d,temp,salt,u,v,ssh,Yorig) - -return - -end - diff --git a/Oforc_OGCM/extract_SODA.m b/Oforc_OGCM/extract_SODA.m index acc65077..77c7936b 100644 --- a/Oforc_OGCM/extract_SODA.m +++ b/Oforc_OGCM/extract_SODA.m @@ -32,8 +32,10 @@ function extract_SODA(SODA_dir,SODA_prefix,url,year,month,... % e-mail:Pierrick.Penven@ird.fr % % Updated 6-Sep-2006 by Pierrick Penven -% Updated : 23-Oct-2009 by Gildas Cambon Adaptation for the special tratment +% Updated : 23-Oct-2009 by Gildas Cambon Adaptation for the special treatement % for the bry file +% Updated 18-March-2024 by Gildas Cambon +% - remove download of taux and tauy %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % disp([' Download SODA for ',num2str(year),... @@ -62,33 +64,33 @@ if missval<0 else ssh(ssh>=(0.9*missval))=NaN; end -% -% Get TAUX -% -disp(' ...TAUX') -taux=getdap(url,'',... - 'taux',trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -eval(['missval=double(x.taux.',missname,');']) -if missval<0 - taux(taux<=(0.9*missval))=NaN; -else - taux(taux>=(0.9*missval))=NaN; -end -% -% Get TAUY -% -disp(' ...TAUY') -tauy=getdap(url,'',... - 'tauy',trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -eval(['missval=double(x.tauy.',missname,');']) -if missval<0 - tauy(tauy<=(0.9*missval))=NaN; -else - tauy(tauy>=(0.9*missval))=NaN; -end -% +% % +% % Get TAUX +% % +% disp(' ...TAUX') +% taux=getdap(url,'',... +% 'taux',trange,'',jrange,... +% i1min,i1max,i2min,i2max,i3min,i3max); +% eval(['missval=double(x.taux.',missname,');']) +% if missval<0 +% taux(taux<=(0.9*missval))=NaN; +% else +% taux(taux>=(0.9*missval))=NaN; +% end +% % +% % Get TAUY +% % +% disp(' ...TAUY') +% tauy=getdap(url,'',... +% 'tauy',trange,'',jrange,... +% i1min,i1max,i2min,i2max,i3min,i3max); +% eval(['missval=double(x.tauy.',missname,');']) +% if missval<0 +% tauy(tauy<=(0.9*missval))=NaN; +% else +% tauy(tauy>=(0.9*missval))=NaN; +% end +% % % Get U % disp(' ...U') @@ -147,8 +149,11 @@ end % % Create the SODA file % -create_SODA([SODA_dir,SODA_prefix,'Y',num2str(year),'M',num2str(month),'.cdf'],... +% create_SODA([SODA_dir,SODA_prefix,'Y',num2str(year),'M',num2str(month),'.cdf'],... +% lon,lat,lon,lat,lon,lat,depth,time,... +% temp,salt,u,v,ssh,taux,tauy,Yorig) +create_OGCM([SODA_dir,SODA_prefix,'Y',num2str(year),'M',num2str(month),'.cdf'],... lon,lat,lon,lat,lon,lat,depth,time,... - temp,salt,u,v,ssh,taux,tauy,Yorig) + temp,salt,u,v,ssh,Yorig) % return diff --git a/Oforc_OGCM/extract_mercator.m b/Oforc_OGCM/extract_mercator.m deleted file mode 100644 index 6842dea3..00000000 --- a/Oforc_OGCM/extract_mercator.m +++ /dev/null @@ -1,212 +0,0 @@ -function extract_mercator(OGCM_dir,OGCM_prefix,url,Y,M,... - lon,lon_u,lat,lat_v,depth,... - krange,jrange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - Yorig) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Extract a subset from ECCO using DODS -% Write it in a local file (keeping the classic -% SODA netcdf format) -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 6-Sep-2006 by Pierrick Penven -% Updated 20-Aug-2008 by Matthieu Caillaud & P. Marchesiello -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -disp([' Download mercator for ',num2str(Y),... - ' - ',num2str(M)]) - -% -% Get the dataset attributes -% - -% test if the file exist -% -% -foundfile=0; - fname=url; - warning off - try - x=loaddap('-A -e +v ', fname); - foundfile=1; - catch - foundfile=0; - end - if foundfile==1 & ~isempty(x) - disp(' File found') - else - foundfile=0; - disp(' File does not exist') - end - warning on -% -% -missval=x.ssh.missing_value; %PSY3V1 - -%missval=x.ssh.ml__FillValue; %PSY3V2 - - - -% -% Get the time range -% -time=readdap(fname,'time',[]); -% -% Process the time -% -time=time+datenum(1950,1,1); - -disp(datestr(time)); -c=datevec(time); -y0=c(:,1); -m0=c(:,2); -d0=c(:,3); -oktime=1; -d=[12;13;14;15;16;17;18]; -if Y~=mean(y0) - disp(['Warning: dates are not all for year: ',num2str(Y)]) - oktime=0; -end -tndx=find(m0==M & y0==Y); -if isempty(tndx) - error('Time problem: did not find the corresponding month') -end -% -if oktime==0 & M==12 % to get the value of 1 jan of next year % - tndx=[tndx;tndx(end)+1]; -end - -trange=['[',num2str(min(tndx)-1),':',num2str(max(tndx)-1),']']; - - -% tndx=find(m0==M & y0==Y); - % trange=['[',num2str(tndx(1)-1),']']; - -% -% Put the time into "Yorig time" -% -time=time(tndx)-datenum(Yorig,1,1); -% -% Get SSH -% -disp(' ...SSH') -vname='ssh'; -fname=''; -ssh=getdap(url,fname,vname,... - trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); - - - -ssh=shiftdim(ssh,2); -%missval=x.ssh.missing_value; -ssh(ssh>=missval)=NaN; -% -% Get TAUX -% -disp(' ...TAUX') -taux=getdap(url,fname,... - 'taux',trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); - - -%missval=x.taux.missing_value; -taux(taux>=missval)=NaN; -% -% Get TAUY -% -disp(' ...TAUY') -tauy=getdap(url,fname,... - 'tauy',trange,'',jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -%missval=x.tauy.missing_value; -tauy(tauy>=missval)=NaN; -% - -% Get U -% -disp(' ...U') -vname='u'; -u=getdap(url,fname,vname,... - trange,krange,jrange,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u); -u=permute(u,[4 3 1 2]); -%u=shiftdim(u,2); -%missval=x.u.missing_value; -u(u>=missval)=NaN; -% -% Get V -% -disp(' ...V') -vname='v'; -v=getdap(url,fname,vname,... - trange,krange,jrange_v,... - i1min,i1max,i2min,i2max,i3min,i3max); -v=permute(v,[4 3 1 2]); -%missval=x.v.missing_value; -v(v>=missval)=NaN; -% -% Get TEMP -% -disp(' ...TEMP') -vname='temperature'; -temp=getdap(url,fname,vname,... - trange,krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -temp=permute(temp,[4 3 1 2]); - -%temp=shiftdim(temp,2); -%missval=x.temperature.missing_value; -temp(temp>=missval)=NaN; -% -% Get SALT -% -disp(' ...SALT') -vname='salinity'; -salt=getdap(url,fname,vname,... - trange,krange,jrange,... - i1min,i1max,i2min,i2max,i3min,i3max); -salt=permute(salt,[4 3 1 2]); -%salt=shiftdim(salt,2); -%missval=x.salinity.missing_value; -salt(salt>=missval)=NaN; -% -% Create the ECCO file -% -fname=url -% -% -create_OGCM([OGCM_dir,OGCM_prefix,'Y',num2str(Y),'M',num2str(M),'.cdf'],... - lon,lat,lon_u,lat,lon,lat_v,depth,time,... - temp,salt,u,v,ssh,Yorig) -% -return - -end - diff --git a/Oforc_OGCM/get_ECCO_subgrid.m b/Oforc_OGCM/get_ECCO_subgrid.m deleted file mode 100644 index f7488716..00000000 --- a/Oforc_OGCM/get_ECCO_subgrid.m +++ /dev/null @@ -1,138 +0,0 @@ -function [i1min,i1max,i2min,i2max,i3min,i3max,... - i1min_u,i1max_u,i2min_u,i2max_u,i3min_u,i3max_u,... - jrange,jrange_v,krange,lon,lon_u,lat,lat_v,depth]=... - get_ECCO_subgrid(path,lonmin,lonmax,latmin,latmax) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Get the indices for a ECCO subgrid -% -% -% Further Information: -% http://www.croco-ocean.org -% -% This file is part of CROCOTOOLS -% -% CROCOTOOLS is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published -% by the Free Software Foundation; either version 2 of the License, -% or (at your option) any later version. -% -% CROCOTOOLS is distributed in the hope that it will be useful, but -% WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this program; if not, write to the Free Software -% Foundation, Inc., 59 Temple Place, Suite 330, Boston, -% MA 02111-1307 USA -% -% Copyright (c) 2006 by Pierrick Penven -% e-mail:Pierrick.Penven@ird.fr -% -% Updated 6-Sep-2006 by Pierrick Penven -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -dl=1; -lonmin=lonmin-dl; -lonmax=lonmax+dl; -latmin=latmin-dl; -latmax=latmax+dl; -% -% Get the global grid -% -lon=readdap(path,'LONGITUDE_T',[]); -lat=readdap(path,'LATITUDE_T',[]); -depth=readdap(path,'DEPTH_T',[]); -% -% Quick fix because lon_u and lat_v are -% -disp('GET_ECCO_SUBGRID: Warning lon_u and lat_v are no more downloaded from the server') -lon_u=lon-0.5; -lat_v=lat-0.5; -% -% Get a subgrid -% -% -% 1 Longitude: take care of greenwitch -% -i1=find(lon-360>=lonmin & lon-360<=lonmax); -i2=find(lon>=lonmin & lon<=lonmax); -i3=find(lon+360>=lonmin & lon+360<=lonmax); -% -lon=cat(1,lon(i1)-360,lon(i2),lon(i3)+360); -% -if ~isempty(i1) - i1min=min(i1)-1; - i1max=max(i1)-1; -else - i1min=[]; - i1max=[]; -end -if ~isempty(i2) - i2min=min(i2)-1; - i2max=max(i2)-1; -else - i2min=[]; - i2max=[]; -end -if ~isempty(i3) - i3min=min(i3)-1; - i3max=max(i3)-1; -else - i3min=[]; - i3max=[]; -end -% -i1_u=find(lon_u-360>=lonmin & lon_u-360<=lonmax); -i2_u=find(lon_u>=lonmin & lon_u<=lonmax); -i3_u=find(lon_u+360>=lonmin & lon_u+360<=lonmax); -% -lon_u=cat(1,lon_u(i1_u)-360,lon_u(i2_u),lon(i3_u)+360); -% -if ~isempty(i1_u) - i1min_u=min(i1_u)-1; - i1max_u=max(i1_u)-1; -else - i1min_u=[]; - i1max_u=[]; -end -if ~isempty(i2_u) - i2min_u=min(i2_u)-1; - i2max_u=max(i2_u)-1; -else - i2min_u=[]; - i2max_u=[]; -end -if ~isempty(i3_u) - i3min_u=min(i3_u)-1; - i3max_u=max(i3_u)-1; -else - i3min_u=[]; - i3max_u=[]; -end -% -% 2 Latitude -% -j=find(lat>=latmin & lat<=latmax); -lat=lat(j); -jmin=min(j)-1; -jmax=max(j)-1; -jrange=['[',num2str(jmin),':',num2str(jmax),']']; -% -j_v=find(lat_v>=latmin & lat_v<=latmax); -lat_v=lat_v(j_v); -jmin_v=min(j_v)-1; -jmax_v=max(j_v)-1; -jrange_v=['[',num2str(jmin_v),':',num2str(jmax_v),']']; -% -% 3 Depth -% -k=length(depth); -krange=['[',num2str(0),':',num2str(k-1),']']; -% -return - -end - diff --git a/Oforc_OGCM/get_file_python_mercator.m b/Oforc_OGCM/get_file_python_mercator.m index 4320a577..1fe41bcf 100644 --- a/Oforc_OGCM/get_file_python_mercator.m +++ b/Oforc_OGCM/get_file_python_mercator.m @@ -1,7 +1,8 @@ -function outname = get_file_python_mercator(pathmotu,mercator_type,... - motu_url,service_id,product_id, ... - vars, ... - geom,date,info,outname) +function outname = get_file_python_mercator(pathCMC,... + product_id,... + vars,... + geom,date,... + info,outname) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Extract a subgrid from MERCATOR to get a CROCO forcing @@ -33,115 +34,36 @@ function outname = get_file_python_mercator(pathmotu,mercator_type,... % % Updated 12-Feb-2016 by P. Marchesiello % Updated 26-Nov-2020 by G. Cambon +% Updated 22-Feb-2024 by G. Cambon %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Usage: -%======= -% get_file_python_mercator(pathMotu,mercator_type,... -% motu_url,service_id,product_id, ... -% {'varname1' 'varname2'}, ... -% [lonmin lonmax latmin latmax, depthmin depthmax], ... -% {'startdate' 'enddate'},{user password}, -% 'outname.nc'); -% -% For GLORYS 12 reanalysis -% ======================== -% motu_url='http://my.cmems-du.eu/motu-web/Motu'; -% service_id='GLOBAL_REANALYSIS_PHY_001_030-TDS'; -% product_id='global-reanalysis-phy-001-030-daily'; -% -% For Mercator 1/12 forecast -% ========================== -% motu_url='http://nrt.cmems-du.eu/motu-web/Motu'; -% service_id='GLOBAL_ANALYSIS_FORECAST_PHY_001_024-TDS'; -% product_id='global-analysis-forecast-phy-001-024'; -% -% For Met-Office 1/4 forecast -% =========================== -% motu_url='http://nrtcmems.mercator-ocean.fr/motu-web/Motu'; -% service_id='GLOBAL_ANALYSIS_FORECAST_PHYS_001_015-TDS'; -% product_id='global-analysis-forecast-phys-001-015'; -% -% Check http://marine.copernicus.eu/web/34-products-and-services-faq.php -% for changes in the command line: addresses, file names, variable names ... -% -% Currently needs Python2.7.X (with X >= 10) or Python 3.X (with >=4) -% and motuclient.py v.1.8.X (where "X" is equal or higher to "4") -% from https://marine.copernicus.eu/services-portfolio/technical-faq/#motu-client -% -% python -% ====== -% Type: -% python --version -% It should return: "Python 2.7.10+" or "Python 3.4+". -% -% motuclient -% ========== -% 1- Use croco's motuclient (pathMotu => Forecast_tools) or ... -% 2- Install your own motuclient: -% To update/upgrade and get the latest version of motuclient -% from a previous version (<= v1.8.3), type in the following: -% $ python -m pip install --upgrade motuclient -% Otherwise (if there is no previous installation of motuclient), -% type in the following: -% $ python -m pip install motuclient -% It should install and display motuclient package v1.8.4 (Oct. 2019). -% To make sure, display the version: -% $ python -m motuclient --version -% If it does not return: "motuclient-python v1.8.X" ("X" >= "4"), -% then type in the following: -% $ python -m pip install motuclient==1.8.4 -%======= -% -eval(['! rm ',outname]) +% Informations : +% => https://help.marine.copernicus.eu/en/collections/4060068-copernicus-marine-toolbox +% => https://help.marine.copernicus.eu/en/articles/8206131-how-to-download-a-copernicus-marine-toolbox-request-in-matlab +% +eval(['! rm -f ',outname]) +disp([' ']) +disp(['Extraction of product: ', product_id]) +disp([' ']) +command = { sprintf('export PYTHONWARNINGS="ignore"; ') + sprintf('%s',pathCMC) + sprintf(' subset') + sprintf(' --username %s --password %s',info{1},info{2}) + sprintf(' -i %s',product_id) + sprintf(' -t %s -T %s',['"',date{1},'"'],['"',date{2},'"']) + sprintf(' -x %f -X %f',geom(1),geom(2)) + sprintf(' -y %f -Y %f',geom(3),geom(4)) + sprintf(' -z %f -Z %f',geom(5),geom(6)) + sprintf(' -o ./') + sprintf(' -f %s',outname) + sprintf(' --force-download')}; -if isempty(pathmotu), % use your own motuclient - - command = {'!python -m motuclient' - sprintf(' -u %s -p %s',info{1},info{2}) - sprintf(' -m %s',motu_url) - sprintf(' -s %s',service_id) - sprintf(' -d %s',product_id) - sprintf(' -t %s -T %s',date{1},date{2}) - sprintf(' -x %f -X %f',geom(1),geom(2)) - sprintf(' -y %f -Y %f',geom(3),geom(4)) - sprintf(' -z %f -Z %f',geom(5),geom(6)) - sprintf(' -o ./') - sprintf(' --out-name %s',outname)}; - -else % use croco's motuclient - - command = {'!' - sprintf('%s',pathmotu) - 'motuclient-python/motuclient.py' - sprintf(' -u %s -p %s',info{1},info{2}) - sprintf(' -m %s',motu_url) - sprintf(' -s %s',service_id) - sprintf(' -d %s',product_id) - sprintf(' -t %s -T %s',date{1},date{2}) - sprintf(' -x %f -X %f',geom(1),geom(2)) - sprintf(' -y %f -Y %f',geom(3),geom(4)) - sprintf(' -z %f -Z %f',geom(5),geom(6)) - sprintf(' -o ./') - sprintf(' --out-name %s',outname)}; -end - -for k =1:length(vars) - command{end+1}=sprintf(' -v %s ',vars{k}); +if isa(vars,'cell') + for k =1:size(vars,2) + command{end+1}=sprintf(' -v %s',vars{k}); + end end -%=== -% If using a proxy server, uncomment the following line and replace by your -% proxy url and port server. Beware that a SPACE is needed between -% "--proxy-server=" and "the proxy-server-name" ! -% -%command{end+2}=sprintf('--proxy-server= http://your_proxy_server:your_proxy_port'); -%=== disp([command{:}]) -eval([command{:}]) +system([command{:}]); -% -% example of a python motuclient commands -% -%python -m motuclient --motu http://my.cmems-du.eu/motu-web/Motu --service-id GLOBAL_REANALYSIS_PHY_001_030-TDS --product-id global-reanalysis-phy-001-030-daily --longitude-min 15 --longitude-max 20 --latitude-min -40 --latitude-max -25 --date-min "2004-12-31 12:00:00" --date-max "2005-02-01 12:00:00" --depth-min 0.493 --depth-max 5727.918 --variable so --variable thetao --variable uo --variable vo --variable zos --out-dir <OUTPUT_DIRECTORY> --out-name <OUTPUT_FILENAME> --user <USERNAME> --pwd <PASSWORD> -end diff --git a/Oforc_OGCM/get_filename_ECCO.m b/Oforc_OGCM/get_filename_ECCO.m deleted file mode 100644 index 02893a34..00000000 --- a/Oforc_OGCM/get_filename_ECCO.m +++ /dev/null @@ -1,24 +0,0 @@ -function fname=get_filename_ECCO(vname,Y,M,D) - -stryear=num2str(Y); -if M<10 - strmonth=['0',num2str(M)]; -else - strmonth=[num2str(M)]; -end - -if D<10 - strday=['0',num2str(D)]; -else - strday=[num2str(D)]; -end - -if strcmp(vname,'SSH') - fname=[vname,'.1440x720.',stryear,strmonth,strday,'.nc'] ; -else - fname=[vname,'.1440x720x50.',stryear,strmonth,strday,'.nc'] ; -end -return - -end - diff --git a/Oforc_OGCM/make_OGCM.m b/Oforc_OGCM/make_OGCM_SODA.m similarity index 93% rename from Oforc_OGCM/make_OGCM.m rename to Oforc_OGCM/make_OGCM_SODA.m index 13b070e9..f59e5e54 100644 --- a/Oforc_OGCM/make_OGCM.m +++ b/Oforc_OGCM/make_OGCM_SODA.m @@ -1,6 +1,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% Create and fill CROCO clim and bry files with OGCM data. +% Create and fill CROCO clim and bry files with OGCM SODA data. % % The on-line reference to SODA is at % http://iridl.ldeo.columbia.edu./SOURCES/.CARTON-GIESE/.SODA/ @@ -45,35 +45,13 @@ close all % Common parameters % crocotools_param -% -if strcmp(OGCM,'SODA') + % % SODA DODS URL % - % SODA 2.0.2-4 - %url= 'http://apdrc.soest.hawaii.edu:80/dods/public_data/SODA/soda_pop2.0.4' - - % SODA_2.1.6 [ ERA40/QSCAT 1958-2008 / POP2.1 / WOD09 ] - %%url='http://iridl.ldeo.columbia.edu/SOURCES/.CARTON-GIESE/.SODA/.v2p1p6' ; - %url='http://apdrc.soest.hawaii.edu:80/dods/public_data/SODA/soda_pop2.1.6' ; - % SODA_2.2.4/ [ C20R-2 1871-2008 / POP2.1 ] %%url='http://iridl.ldeo.columbia.edu/SOURCES/.CARTON-GIESE/.SODA/.v2p2p4' ; url='http://apdrc.soest.hawaii.edu:80/dods/public_data/SODA/soda_pop2.2.4' ; - -elseif strcmp(OGCM,'ECCO') - % - % ECCO DODS URL - % - % Kalman filter - % - % url = 'http://ecco.jpl.nasa.gov/thredds/dodsC/las/kf080/kf080_'; - url = 'http://ecco2.jpl.nasa.gov:80/opendap/data1/cube/cube92/lat_lon/quart_90S_90N/' - % -else - error(['Unknown OGCM: ',OGCM]) - % for mercator/glorys12 reanalysis use make_OGCM_mercator.m -end % itolap_tot=itolap_a + itolap_p; disp(['Overlap before =',num2str(itolap_a)]) @@ -118,8 +96,8 @@ if Download_data==1 % Download data with DODS (the download matlab routine depends on the OGCM) % disp('Download data...') - eval(['download_',OGCM,'(Ymin,Ymax,Mmin,Mmax,lonmin,lonmax,latmin,latmax,',... - 'OGCM_dir,OGCM_prefix,url,Yorig)']) + download_SODA(Ymin,Ymax,Mmin,Mmax,lonmin,lonmax,latmin,latmax,... + OGCM_dir,OGCM_prefix,url,Yorig) end % %------------------------------------------------------------------------------------ @@ -322,10 +300,10 @@ if makeclim==1 | makebry==1 Yp=Y; for aa=1:itolap_p tndx_OGCM(aa)=ntimes; - end + end else for aa=1:itolap_p - tndx_OGCM(aa)=aa; + tndx_OGCM(aa)=aa; end; end % diff --git a/Oforc_OGCM/make_OGCM_mercator.m b/Oforc_OGCM/make_OGCM_mercator.m index 1619d15f..510f2069 100644 --- a/Oforc_OGCM/make_OGCM_mercator.m +++ b/Oforc_OGCM/make_OGCM_mercator.m @@ -3,6 +3,19 @@ % Create and fill CROCO clim and bry files with OGCM % MERCATOR data. % +% On crocotools_param.m, available datasets: +% SODA -> Description : 1/4 deg SODA v2.2.4 monthly means +% (187101 -> 201012) +% mercator -> 2 options for mercator_type parameter: +% +% 1 --> 1/12 deg Mercator global reanalysis (1993 -> 202101) +% (Monthly or Daily product) +% 2 --> 1/12 deg Mercator global analysis (202011 -> ) +% +% Note for 2: +% (7days from now -> now-1day : Near Real Time analysis) +% (more than 15days from now : Best analysis) +% % Online reference to MERCATOR is at http://marine.copernicus.eu % % Further Information: @@ -109,10 +122,9 @@ if Download_data==1 mo_max=12; end for M=mo_min:mo_max - %motu_url_reana thedatemonth=['Y',num2str(Y),'M',num2str(M)]; - download_mercator_python(pathMotu,user,password,1,... - motu_url_reana,service_id_reana,product_id_reana, ... + download_mercator_python(pathCMC,user,password,mercator_type,... + product_id, ... Y,M, ... lonmin,lonmax,latmin,latmax,hmax, ... OGCM_dir,OGCM_prefix,thedatemonth,Yorig) @@ -154,7 +166,8 @@ if makeini==1 % Process the time in Yorig time (i.e days since Yorig-01-01) % tini=datenum(Ymin,Mmin,1)-datenum(Yorig,1,1); - disp(['Create an initial file for ',datestr(tini+datenum(Yorig,1,1));]) + disp([' ']) + disp(['=> Create an initial file for ',datestr(tini+datenum(Yorig,1,1));]) create_inifile(ininame,grdname,CROCO_title,... theta_s,theta_b,hc,N,... tini,'clobber', vtransform); @@ -211,10 +224,10 @@ if makeclim==1 | makebry==1 OGCM_time=nc{'time'}(:); ntimes=length(OGCM_time); if ntimes==1 - dt=30; % monthly files (SODA..) + dt=30; % monthly files itolap_a=1; itolap_p=1; itolap_tot=itolap_a + itolap_p; - disp(['Reduced overlap for monthly SODA files']) + disp(['Reduced overlap for monthly files']) disp(['...']) else dt=max(gradient(OGCM_time)); @@ -254,6 +267,8 @@ if makeclim==1 | makebry==1 if makebry==1 bryname=[bry_prefix,'Y',num2str(Y),... 'M',num2str(sprintf(Mth_format,M)),nc_suffix]; + disp([' ']) + disp(['=> Create bry file : ', bryname ]) create_bryfile(bryname,grdname,CROCO_title,[1 1 1 1],... theta_s,theta_b,hc,N,... croco_time,0,'clobber',vtransform); diff --git a/Oforc_OGCM/prepro_soda.m b/Oforc_OGCM/prepro_soda.m index 3ba9797b..2bd90cae 100644 --- a/Oforc_OGCM/prepro_soda.m +++ b/Oforc_OGCM/prepro_soda.m @@ -1,4 +1,4 @@ clear all close all start ; -make_OGCM ; +make_OGCM_SODA ; diff --git a/Oforc_OGCM/write_mercator.m b/Oforc_OGCM/write_mercator.m index 1a765e56..353f1e9f 100644 --- a/Oforc_OGCM/write_mercator.m +++ b/Oforc_OGCM/write_mercator.m @@ -2,8 +2,8 @@ function write_mercator(OGCM_dir,OGCM_prefix,raw_mercator_name,... mercator_type,vars,time,thedatemonth,Yorig) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% Extract a subset from Mercator in the case of hindcast -% using python motu client (cls) +% Extract a subset from Mercator in the case of hindcast +% using python copernicusmarine client % Write it in a local file (keeping the classic SODA netcdf format) % % Further Information: @@ -35,18 +35,16 @@ function write_mercator(OGCM_dir,OGCM_prefix,raw_mercator_name,... % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -disp([' writing MERCATOR file']) +disp([' Writing MERCATOR file']) % % Get grid and time frame % nc = netcdf(raw_mercator_name); -if mercator_type==1, - lon = nc{'longitude'}(:); - lat = nc{'latitude'}(:); - depth = nc{'depth'}(:); - time = nc{'time'}(:); - time = time / 24 + datenum(1950,1,1) - datenum(Yorig,1,1); -end +lon = nc{'longitude'}(:); +lat = nc{'latitude'}(:); +depth = nc{'depth'}(:); +time = nc{'time'}(:); +time = time / 24 + datenum(1950,1,1) - datenum(Yorig,1,1); % % Get SSH % @@ -95,9 +93,8 @@ temp=ncc(:); missval=ncc.FillValue_(:); scale_factor=ncc.scale_factor(:); add_offset=ncc.add_offset(:); -ktoc=272.15; temp(temp<=missval)=NaN; -temp = temp.*scale_factor + add_offset; % - ktoc; +temp = temp.*scale_factor + add_offset; % % Get SALT % diff --git a/Forecast_tools/write_mercator_frcst.m b/Oforc_OGCM/write_mercator_multi.m similarity index 65% rename from Forecast_tools/write_mercator_frcst.m rename to Oforc_OGCM/write_mercator_multi.m index e82e3616..75779986 100644 --- a/Forecast_tools/write_mercator_frcst.m +++ b/Oforc_OGCM/write_mercator_multi.m @@ -1,9 +1,10 @@ -function write_mercator_frcst(FRCST_dir,FRCST_prefix,raw_mercator_name,... - mercator_type,vars,time,Yorig) +function write_mercator_multi(OGCM_dir,OGCM_prefix,raw_mercator_name,... + mercator_type,vars,time,thedatemonth,Yorig) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% Extract a subset from Marcator using python motu client (cls) -% Write it in a local file (keeping the classic SODA netcdf format) +% Extract a subset from Mercator in the case of +% using python +% Write mercator multi files for analysis and forecast % % Further Information: % http://www.croco-ocean.org @@ -31,10 +32,10 @@ function write_mercator_frcst(FRCST_dir,FRCST_prefix,raw_mercator_name,... % Updated 9-Sep-2006 by Pierrick Penven % Updated 19-May-2011 by Andres Sepulveda & Gildas Cambon % Updated 12-Feb-2016 by P. Marchesiello -% Updated 06-May-2023 by Efrain Rodriguez-Rubio & P. Marchesiello +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -disp([' writing MERCATOR file']) +disp([' Writing MERCATOR multifiles ']) fname_z=[raw_mercator_name(1:end-3),'_z.nc']; fname_u=[raw_mercator_name(1:end-3),'_u.nc']; @@ -44,51 +45,51 @@ fname_s=[raw_mercator_name(1:end-3),'_s.nc']; % % Get grid and time frame % -nc = netcdf(fname_u,'r'); -if mercator_type==1, - lon = nc{'longitude'}(:); - lat = nc{'latitude'}(:); - depth = nc{'depth'}(:); - time = nc{'time'}(:); - time = time / 24 + datenum(1950,1,1) - datenum(Yorig,1,1); +nc = netcdf(fname_u); +lon = nc{'longitude'}(:); +lat = nc{'latitude'}(:); +depth = nc{'depth'}(:); +time = nc{'time'}(:); +% +if (mercator_type == 4) | (mercator_type == 5) + time = time / (24*60) + datenum(1900,1,1) - datenum(Yorig,1,1); else - lon = nc{'lon'}(:); - lat = nc{'lat'}(:); - depth = nc{'depth'}(:); - time = nc{'time'}(:); - time = time / 86400 + datenum(2014,1,9) - datenum(Yorig,1,1); + time = time / 24 + datenum(1950,1,1) - datenum(Yorig,1,1); end close(nc) % % Get SSH % -%missval = -32767; disp(' ...SSH') nc = netcdf(fname_z,'r'); vname=sprintf('%s',vars{1}); ncc=nc{vname}; ssh=ncc(:); missval=ncc.FillValue_(:); -scale_factor=1; %ncc.scale_factor(:); -add_offset=0.; %ncc.add_offset(:); +scale_factor=1; +add_offset=0; ssh(ssh>=missval)=NaN; +%scale_factor=ncc.scale_factor(:); +%add_offset=ncc.add_offset(:); +%ssh(ssh<=missval)=NaN; ssh = ssh.*scale_factor + add_offset; -close(nc) +close(nc) % close raw_mercator_name % % -% Get U -% disp(' ...U') nc = netcdf(fname_u,'r'); vname=sprintf('%s',vars{2}); ncc=nc{vname}; u=ncc(:); missval=ncc.FillValue_(:); -scale_factor=1; %ncc.scale_factor(:); -add_offset=0.; %ncc.add_offset(:); +scale_factor=1; +add_offset=0; u(u>=missval)=NaN; +%scale_factor=ncc.scale_factor(:); +%add_offset=ncc.add_offset(:); +%u(u<=missval)=NaN; u = u.*scale_factor + add_offset; -close(nc) +close(nc) % close raw_mercator_name % % Get V % @@ -98,11 +99,14 @@ vname=sprintf('%s',vars{3}); ncc=nc{vname}; v=ncc(:); missval=ncc.FillValue_(:); -scale_factor=1; %ncc.scale_factor(:); -add_offset=0.; %ncc.add_offset(:); +scale_factor=1; +add_offset=0; v(v>=missval)=NaN; +%scale_factor=ncc.scale_factor(:); +%add_offset=ncc.add_offset(:); +%v(v<=missval)=NaN; v = v.*scale_factor + add_offset; -close(nc) +close(nc) % close raw_mercator_name % % Get TEMP % @@ -112,12 +116,14 @@ vname=sprintf('%s',vars{4}); ncc=nc{vname}; temp=ncc(:); missval=ncc.FillValue_(:); -scale_factor=1; %ncc.scale_factor(:); -add_offset=0.; %ncc.add_offset(:); -ktoc=272.15; +scale_factor=1; +add_offset=0; temp(temp>=missval)=NaN; -temp = temp.*scale_factor + add_offset; % - ktoc; -close(nc) +%scale_factor=ncc.scale_factor(:); +%add_offset=ncc.add_offset(:); +%temp(temp<=missval)=NaN; +temp = temp.*scale_factor + add_offset; +close(nc) % close raw_mercator_name % % Get SALT % @@ -127,18 +133,18 @@ vname=sprintf('%s',vars{5}); ncc=nc{vname}; salt=ncc(:); missval=ncc.FillValue_(:); -scale_factor=1; %ncc.scale_factor(:); -add_offset=0.; %ncc.add_offset(:); +scale_factor=1; +add_offset=0; salt(salt>=missval)=NaN; +%scale_factor=ncc.scale_factor(:); +%add_offset=ncc.add_offset(:); +%salt(salt<=missval)=NaN; salt = salt.*scale_factor + add_offset; -close(nc) +close(nc) % close raw_mercator_name % % Create the Mercator file % -rundate_str=date; -rundate=datenum(rundate_str)-datenum(Yorig,1,1); - -create_OGCM([FRCST_dir,FRCST_prefix,num2str(rundate),'.cdf'],... +create_OGCM([OGCM_dir,OGCM_prefix,thedatemonth,'.cdf'],... lon,lat,lon,lat,lon,lat,depth,time,... squeeze(temp),squeeze(salt),squeeze(u),... squeeze(v),squeeze(ssh),Yorig) diff --git a/Preprocessing_tools/create_bryfile.m b/Preprocessing_tools/create_bryfile.m index e2c3af8a..e36dde8a 100644 --- a/Preprocessing_tools/create_bryfile.m +++ b/Preprocessing_tools/create_bryfile.m @@ -163,47 +163,47 @@ nc{'hc'}.long_name = 'S-coordinate parameter, critical depth'; nc{'hc'}.units = ncchar('meter'); nc{'hc'}.units = 'meter'; % -nc{'sc_r'} = ncdouble('s_rho') ; -nc{'sc_r'}.long_name = ncchar('S-coordinate at RHO-points'); -nc{'sc_r'}.long_name = 'S-coordinate at RHO-points'; -nc{'sc_r'}.valid_min = -1.; -nc{'sc_r'}.valid_max = 0.; -nc{'sc_r'}.positive = ncchar('up'); -nc{'sc_r'}.positive = 'up'; +nc{'s_rho'} = ncdouble('s_rho') ; +nc{'s_rho'}.long_name = ncchar('S-coordinate at RHO-points'); +nc{'s_rho'}.long_name = 'S-coordinate at RHO-points'; +nc{'s_rho'}.valid_min = -1.; +nc{'s_rho'}.valid_max = 0.; +nc{'s_rho'}.positive = ncchar('up'); +nc{'s_rho'}.positive = 'up'; if (vtransform == 1) - nc{'sc_r'}.standard_name = ncchar('ocean_s_coordinate_g1'); - nc{'sc_r'}.standard_name = 'ocean_s_coordinate_g1'; + nc{'s_rho'}.standard_name = ncchar('ocean_s_coordinate_g1'); + nc{'s_rho'}.standard_name = 'ocean_s_coordinate_g1'; elseif (vtransform == 2) - nc{'sc_r'}.standard_name = ncchar('ocean_s_coordinate_g2'); - nc{'sc_r'}.standard_name = 'ocean_s_coordinate_g2'; + nc{'s_rho'}.standard_name = ncchar('ocean_s_coordinate_g2'); + nc{'s_rho'}.standard_name = 'ocean_s_coordinate_g2'; end -nc{'sc_r'}.formula_terms = ncchar('s: s_rho C: Cs_r eta: zeta depth: h depth_c: hc'); -nc{'sc_r'}.formula_terms = 's: s_rho C: Cs_r eta: zeta depth: h depth_c: hc'; -% -nc{'sc_w'} = ncdouble('s_w') ; -nc{'sc_w'}.long_name = ncchar('S-coordinate at W-points'); -nc{'sc_w'}.long_name = 'S-coordinate at W-points'; -nc{'sc_w'}.valid_min = -1. ; -nc{'sc_w'}.valid_max = 0. ; -nc{'sc_w'}.positive = ncchar('up'); -nc{'sc_w'}.positive = 'up'; +nc{'s_rho'}.formula_terms = ncchar('s: s_rho C: Cs_rho eta: zeta depth: h depth_c: hc'); +nc{'s_rho'}.formula_terms = 's: s_rho C: Cs_rho eta: zeta depth: h depth_c: hc'; +% +nc{'s_w'} = ncdouble('s_w') ; +nc{'s_w'}.long_name = ncchar('S-coordinate at W-points'); +nc{'s_w'}.long_name = 'S-coordinate at W-points'; +nc{'s_w'}.valid_min = -1. ; +nc{'s_w'}.valid_max = 0. ; +nc{'s_w'}.positive = ncchar('up'); +nc{'s_w'}.positive = 'up'; if (vtransform == 1) - nc{'sc_w'}.standard_name = ncchar('ocean_s_coordinate_g1'); - nc{'sc_w'}.standard_name = 'ocean_s_coordinate_g1'; + nc{'s_w'}.standard_name = ncchar('ocean_s_coordinate_g1'); + nc{'s_w'}.standard_name = 'ocean_s_coordinate_g1'; elseif (vtransform == 2) - nc{'sc_w'}.standard_name = ncchar('ocean_s_coordinate_g2'); - nc{'sc_w'}.standard_name = 'ocean_s_coordinate_g2'; + nc{'s_w'}.standard_name = ncchar('ocean_s_coordinate_g2'); + nc{'s_w'}.standard_name = 'ocean_s_coordinate_g2'; end -nc{'sc_w'}.formula_terms = ncchar('s: s_w C: Cs_w eta: zeta depth: h depth_c: hc'); -nc{'sc_w'}.formula_terms = 's: s_w C: Cs_w eta: zeta depth: h depth_c: hc'; +nc{'s_w'}.formula_terms = ncchar('s: s_w C: Cs_w eta: zeta depth: h depth_c: hc'); +nc{'s_w'}.formula_terms = 's: s_w C: Cs_w eta: zeta depth: h depth_c: hc'; % -nc{'Cs_r'} = ncdouble('s_rho') ; -nc{'Cs_r'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); -nc{'Cs_r'}.long_name = 'S-coordinate stretching curves at RHO-points'; -nc{'Cs_r'}.units = ncchar('nondimensional'); -nc{'Cs_r'}.units = 'nondimensional'; -nc{'Cs_r'}.valid_min = -1; -nc{'Cs_r'}.valid_max = 0; +nc{'Cs_rho'} = ncdouble('s_rho') ; +nc{'Cs_rho'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); +nc{'Cs_rho'}.long_name = 'S-coordinate stretching curves at RHO-points'; +nc{'Cs_rho'}.units = ncchar('nondimensional'); +nc{'Cs_rho'}.units = 'nondimensional'; +nc{'Cs_rho'}.valid_min = -1; +nc{'Cs_rho'}.valid_max = 0; % nc{'Cs_w'} = ncdouble('s_w') ; nc{'Cs_w'}.long_name = ncchar('S-coordinate stretching curves at W-points'); @@ -582,7 +582,7 @@ nc.history = history; % % Compute S coordinates % -[sc_r,Cs_r,sc_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); +[s_rho,Cs_rho,s_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); %disp(['vtransform=',num2str(vtransform)]) % % Write variables @@ -596,9 +596,9 @@ nc{'theta_s'}(:) = theta_s; nc{'theta_b'}(:) = theta_b; nc{'Tcline'}(:) = hc; nc{'hc'}(:) = hc; -nc{'sc_r'}(:) = sc_r; -nc{'sc_w'}(:) = sc_w; -nc{'Cs_r'}(:) = Cs_r ; +nc{'s_rho'}(:) = s_rho; +nc{'s_w'}(:) = s_w; +nc{'Cs_rho'}(:) = Cs_rho ; nc{'Cs_w'}(:) = Cs_w; nc{'tclm_time'}(:) = time; nc{'temp_time'}(:) = time; diff --git a/Preprocessing_tools/create_climfile.m b/Preprocessing_tools/create_climfile.m index f8bda105..7e2bee7a 100644 --- a/Preprocessing_tools/create_climfile.m +++ b/Preprocessing_tools/create_climfile.m @@ -124,9 +124,9 @@ nc{'theta_s'} = ncdouble('one') ; nc{'theta_b'} = ncdouble('one') ; nc{'Tcline'} = ncdouble('one') ; nc{'hc'} = ncdouble('one') ; -nc{'sc_r'} = ncdouble('s_rho') ; -nc{'sc_w'} = ncdouble('s_w') ; -nc{'Cs_r'} = ncdouble('s_rho') ; +nc{'s_rho'} = ncdouble('s_rho') ; +nc{'s_w'} = ncdouble('s_w') ; +nc{'Cs_rho'} = ncdouble('s_rho') ; nc{'Cs_w'} = ncdouble('s_w') ; nc{'tclm_time'} = ncdouble('tclm_time') ; nc{'temp_time'} = ncdouble('temp_time') ; @@ -192,44 +192,44 @@ nc{'hc'}.long_name = 'S-coordinate parameter, critical depth'; nc{'hc'}.units = ncchar('meter'); nc{'hc'}.units = 'meter'; % -nc{'sc_r'}.long_name = ncchar('S-coordinate at RHO-points'); -nc{'sc_r'}.long_name = 'S-coordinate at RHO-points'; -nc{'sc_r'}.valid_min = -1.; -nc{'sc_r'}.valid_max = 0.; -nc{'sc_r'}.positive = ncchar('up'); -nc{'sc_r'}.positive = 'up'; +nc{'s_rho'}.long_name = ncchar('S-coordinate at RHO-points'); +nc{'s_rho'}.long_name = 'S-coordinate at RHO-points'; +nc{'s_rho'}.valid_min = -1.; +nc{'s_rho'}.valid_max = 0.; +nc{'s_rho'}.positive = ncchar('up'); +nc{'s_rho'}.positive = 'up'; if (vtransform ==1) - nc{'sc_r'}.standard_name = ncchar('ocean_s_coordinate_g1'); - nc{'sc_r'}.standard_name = 'ocean_s_coordinate_g1'; + nc{'s_rho'}.standard_name = ncchar('ocean_s_coordinate_g1'); + nc{'s_rho'}.standard_name = 'ocean_s_coordinate_g1'; elseif (vtransform ==2) - nc{'sc_r'}.standard_name = ncchar('ocean_s_coordinate_g2'); - nc{'sc_r'}.standard_name = 'ocean_s_coordinate_g2'; + nc{'s_rho'}.standard_name = ncchar('ocean_s_coordinate_g2'); + nc{'s_rho'}.standard_name = 'ocean_s_coordinate_g2'; end -nc{'sc_r'}.formula_terms = ncchar('s: s_rho C: Cs_r eta: zeta depth: h depth_c: hc'); -nc{'sc_r'}.formula_terms = 's: s_rho C: Cs_r eta: zeta depth: h depth_c: hc'; -% -nc{'sc_w'}.long_name = ncchar('S-coordinate at W-points'); -nc{'sc_w'}.long_name = 'S-coordinate at W-points'; -nc{'sc_w'}.valid_min = -1. ; -nc{'sc_w'}.valid_max = 0. ; -nc{'sc_w'}.positive = ncchar('up'); -nc{'sc_w'}.positive = 'up'; +nc{'s_rho'}.formula_terms = ncchar('s: s_rho C: Cs_rho eta: zeta depth: h depth_c: hc'); +nc{'s_rho'}.formula_terms = 's: s_rho C: Cs_rho eta: zeta depth: h depth_c: hc'; +% +nc{'s_w'}.long_name = ncchar('S-coordinate at W-points'); +nc{'s_w'}.long_name = 'S-coordinate at W-points'; +nc{'s_w'}.valid_min = -1. ; +nc{'s_w'}.valid_max = 0. ; +nc{'s_w'}.positive = ncchar('up'); +nc{'s_w'}.positive = 'up'; if (vtransform == 1) - nc{'sc_w'}.standard_name = ncchar('ocean_s_coordinate_g1'); - nc{'sc_w'}.standard_name = 'ocean_s_coordinate_g1'; + nc{'s_w'}.standard_name = ncchar('ocean_s_coordinate_g1'); + nc{'s_w'}.standard_name = 'ocean_s_coordinate_g1'; elseif (vtransform == 2) - nc{'sc_w'}.standard_name = ncchar('ocean_s_coordinate_g2'); - nc{'sc_w'}.standard_name = 'ocean_s_coordinate_g2'; + nc{'s_w'}.standard_name = ncchar('ocean_s_coordinate_g2'); + nc{'s_w'}.standard_name = 'ocean_s_coordinate_g2'; end -nc{'sc_w'}.formula_terms = ncchar('s: s_w C: Cs_w eta: zeta depth: h depth_c: hc'); -nc{'sc_w'}.formula_terms = 's: s_w C: Cs_w eta: zeta depth: h depth_c: hc'; +nc{'s_w'}.formula_terms = ncchar('s: s_w C: Cs_w eta: zeta depth: h depth_c: hc'); +nc{'s_w'}.formula_terms = 's: s_w C: Cs_w eta: zeta depth: h depth_c: hc'; % -nc{'Cs_r'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); -nc{'Cs_r'}.long_name = 'S-coordinate stretching curves at RHO-points'; -nc{'Cs_r'}.units = ncchar('nondimensional'); -nc{'Cs_r'}.units = 'nondimensional'; -nc{'Cs_r'}.valid_min = -1; -nc{'Cs_r'}.valid_max = 0; +nc{'Cs_rho'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); +nc{'Cs_rho'}.long_name = 'S-coordinate stretching curves at RHO-points'; +nc{'Cs_rho'}.units = ncchar('nondimensional'); +nc{'Cs_rho'}.units = 'nondimensional'; +nc{'Cs_rho'}.valid_min = -1; +nc{'Cs_rho'}.valid_max = 0; % nc{'Cs_w'}.long_name = ncchar('S-coordinate stretching curves at W-points'); nc{'Cs_w'}.long_name = 'S-coordinate stretching curves at W-points'; @@ -411,17 +411,17 @@ nc.history = history; % % Set S-Curves in domain [-1 < sc < 0] at vertical W- and RHO-points. % -[sc_r,Cs_r,sc_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); +[s_rho,Cs_rho,s_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); %disp(['vtransform=',num2str(vtransform)]) % cff1=1./sinh(theta_s); % cff2=0.5/tanh(0.5*theta_s); -% sc_r=((1:N)-N-0.5)/N; -% Cs_r=(1.-theta_b)*cff1*sinh(theta_s*sc_r)... -% +theta_b*(cff2*tanh(theta_s*(sc_r+0.5))-0.5); -% sc_w=((0:N)-N)/N; -% Cs_w=(1.-theta_b)*cff1*sinh(theta_s*sc_w)... -% +theta_b*(cff2*tanh(theta_s*(sc_w+0.5))-0.5); +% s_rho=((1:N)-N-0.5)/N; +% Cs_rho=(1.-theta_b)*cff1*sinh(theta_s*s_rho)... +% +theta_b*(cff2*tanh(theta_s*(s_rho+0.5))-0.5); +% s_w=((0:N)-N)/N; +% Cs_w=(1.-theta_b)*cff1*sinh(theta_s*s_w)... +% +theta_b*(cff2*tanh(theta_s*(s_w+0.5))-0.5); % @@ -436,9 +436,9 @@ nc{'theta_s'}(:) = theta_s; nc{'theta_b'}(:) = theta_b; nc{'Tcline'}(:) = hc; nc{'hc'}(:) = hc; -nc{'sc_r'}(:) = sc_r; -nc{'sc_w'}(:) = sc_w; -nc{'Cs_r'}(:) = Cs_r; +nc{'s_rho'}(:) = s_rho; +nc{'s_w'}(:) = s_w; +nc{'Cs_rho'}(:) = Cs_rho; nc{'Cs_w'}(:) = Cs_w; nc{'tclm_time'}(:) = time; nc{'temp_time'}(:) = time; diff --git a/Preprocessing_tools/create_inifile.m b/Preprocessing_tools/create_inifile.m index 8a2e8332..acdc9abc 100644 --- a/Preprocessing_tools/create_inifile.m +++ b/Preprocessing_tools/create_inifile.m @@ -109,8 +109,8 @@ nc{'theta_s'} = ncdouble('one') ; nc{'theta_b'} = ncdouble('one') ; nc{'Tcline'} = ncdouble('one') ; nc{'hc'} = ncdouble('one') ; -nc{'sc_r'} = ncdouble('s_rho') ; -nc{'Cs_r'} = ncdouble('s_rho') ; +nc{'s_rho'} = ncdouble('s_rho') ; +nc{'Cs_rho'} = ncdouble('s_rho') ; nc{'ocean_time'} = ncdouble('time') ; nc{'scrum_time'} = ncdouble('time') ; nc{'u'} = ncdouble('time','s_rho','eta_u','xi_u') ; @@ -159,19 +159,19 @@ nc{'hc'}.long_name = 'S-coordinate parameter, critical depth'; nc{'hc'}.units = ncchar('meter'); nc{'hc'}.units = 'meter'; % -nc{'sc_r'}.long_name = ncchar('S-coordinate at RHO-points'); -nc{'sc_r'}.long_name = 'S-coordinate at RHO-points'; -nc{'sc_r'}.units = ncchar('nondimensional'); -nc{'sc_r'}.units = 'nondimensional'; -nc{'sc_r'}.valid_min = -1; -nc{'sc_r'}.valid_max = 0; +nc{'s_rho'}.long_name = ncchar('S-coordinate at RHO-points'); +nc{'s_rho'}.long_name = 'S-coordinate at RHO-points'; +nc{'s_rho'}.units = ncchar('nondimensional'); +nc{'s_rho'}.units = 'nondimensional'; +nc{'s_rho'}.valid_min = -1; +nc{'s_rho'}.valid_max = 0; % -nc{'Cs_r'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); -nc{'Cs_r'}.long_name = 'S-coordinate stretching curves at RHO-points'; -nc{'Cs_r'}.units = ncchar('nondimensional'); -nc{'Cs_r'}.units = 'nondimensional'; -nc{'Cs_r'}.valid_min = -1; -nc{'Cs_r'}.valid_max = 0; +nc{'Cs_rho'}.long_name = ncchar('S-coordinate stretching curves at RHO-points'); +nc{'Cs_rho'}.long_name = 'S-coordinate stretching curves at RHO-points'; +nc{'Cs_rho'}.units = ncchar('nondimensional'); +nc{'Cs_rho'}.units = 'nondimensional'; +nc{'Cs_rho'}.valid_min = -1; +nc{'Cs_rho'}.valid_max = 0; % nc{'ocean_time'}.long_name = ncchar('time since initialization'); nc{'ocean_time'}.long_name = 'time since initialization'; @@ -239,7 +239,7 @@ nc.history = history; % % Compute S coordinates % -[sc_r,Cs_r,sc_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); +[s_rho,Cs_rho,s_w,Cs_w] = scoordinate(theta_s,theta_b,N,hc,vtransform); %disp(['vtransform=',num2str(vtransform)]) % % Write variables @@ -253,8 +253,8 @@ nc{'theta_s'}(:) = theta_s; nc{'theta_b'}(:) = theta_b; nc{'Tcline'}(:) = hc; nc{'hc'}(:) = hc; -nc{'sc_r'}(:) = sc_r; -nc{'Cs_r'}(:) = Cs_r; +nc{'s_rho'}(:) = s_rho; +nc{'Cs_rho'}(:) = Cs_rho; nc{'scrum_time'}(1) = time*24*3600; nc{'ocean_time'}(1) = time*24*3600; nc{'u'}(:) = 0; diff --git a/Preprocessing_tools/geost_currents.m b/Preprocessing_tools/geost_currents.m index 73026f9b..2363074b 100644 --- a/Preprocessing_tools/geost_currents.m +++ b/Preprocessing_tools/geost_currents.m @@ -162,8 +162,8 @@ for l=1:tlen % % Ekman transport % - if ~isempty(frcname) -% disp('Add the Ekman transport') + if exist(frcname) + disp('Add the Ekman transport') sustr(:,:)=nfrc{'sustr'}(l,:,:); svstr(:,:)=nfrc{'svstr'}(l,:,:); % rhoA=1.3; Cd=1.4e-3; diff --git a/Preprocessing_tools/geost_currents_bry.m b/Preprocessing_tools/geost_currents_bry.m index cc0f2e0a..eaad7517 100644 --- a/Preprocessing_tools/geost_currents_bry.m +++ b/Preprocessing_tools/geost_currents_bry.m @@ -193,8 +193,8 @@ for l=1:tlen % % Ekman transport % - if ~isempty(frcname) -% disp('Add the Ekman transport') + if exist(frcname) + disp('Add the Ekman transport') if obcndx==1 tmp=squeeze(nfrc{'sustr'}(l,1,:)); sustr=0*h; diff --git a/Preprocessing_tools/make_config.m b/Preprocessing_tools/make_config.m index d6e53acf..94b89ab9 100644 --- a/Preprocessing_tools/make_config.m +++ b/Preprocessing_tools/make_config.m @@ -47,5 +47,5 @@ make_clim % Interannual forcing % %make_NCEP -%make_OGCM +%make_OGCM_mercator (SODA) return diff --git a/UTILITIES/export_fig/.ignore/ghostscript.txt b/UTILITIES/export_fig/.ignore/ghostscript.txt new file mode 100644 index 00000000..cb507525 --- /dev/null +++ b/UTILITIES/export_fig/.ignore/ghostscript.txt @@ -0,0 +1 @@ +gs \ No newline at end of file diff --git a/UTILITIES/export_fig/.ignore/gs_font_path.txt b/UTILITIES/export_fig/.ignore/gs_font_path.txt new file mode 100644 index 00000000..cf71a1b3 --- /dev/null +++ b/UTILITIES/export_fig/.ignore/gs_font_path.txt @@ -0,0 +1 @@ +UTILITIES/export_fig/.ignore/ghostscript.txt /usr/share/fonts:/usr/local/share/fonts:/usr/share/fonts/X11:/usr/local/share/fonts/X11:/usr/share/fonts/truetype:/usr/local/share/fonts/truetype \ No newline at end of file diff --git a/crocotools_param.m b/crocotools_param.m index 3cd89505..7f59da61 100644 --- a/crocotools_param.m +++ b/crocotools_param.m @@ -5,7 +5,7 @@ % % This file is used by make_grid.m, make_forcing.m, % make_clim.m, make_biol.m, make_bry.m, make_tides.m, -% make_NCEP.m, make_OGCM.m, make_... +% make_NCEP.m, make_OGCM_*.m, make_... % % Further Information: % http://www.croco-ocean.org @@ -92,7 +92,7 @@ hmax_coast = 500; % Maximum depth [m] (cut the topography to prevent % extrapolations below WOA data) % -hmax = 5000; +hmax = 6000; % % Slope parameter (r=grad(h)/h) maximum value for topography smoothing % @@ -150,7 +150,7 @@ CROCO_files_dir=[RUN_dir,'CROCO_FILES/']; % % Global data directory (etopo, coads, datasets download from ftp, etc..) % -DATADIR='../../croco_tools/'; +DATADIR='../../croco_tools/'; % % Forcing data directory (ncep, quikscat, datasets download with opendap, etc..) % @@ -221,7 +221,7 @@ pathfinder_sst_name=[DATADIR,... % % 4 - Open boundaries and initial conditions parameters % used by make_clim.m, make_biol.m, make_bry.m -% make_OGCM.m and make_OGCM_frcst.m +% make_OGCM_*.m and make_OGCM_frcst.m % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % @@ -235,7 +235,7 @@ zref = -1000; % % initial/boundary data options (1 = process) % (used in make_clim, make_biol, make_bry, -% make_OGCM.m and make_OGCM_frcst.m) +% make_OGCM_*.m and make_OGCM_*frcst.m) % makeini = 1; % initial data makeclim = 1; % climatological data (for boundaries and nudging layers) @@ -322,7 +322,7 @@ Z0 = 1; % Mean depth of tide gauge %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 6 - Reference date and simulation times -% (used for make_tides, make_CFSR (or make_NCEP), make_OGCM) +% (used for make_tides, make_CFSR (or make_NCEP), make_OGCM_*) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % @@ -353,7 +353,7 @@ Download_data = 1; % Get data from OPENDAP sites level = 0; % AGRIF level; 0 = parent grid % NCEP_version = 3; % NCEP version: - % [ CFSR up-to-date product are recommandated ] + % [ CFSR up-to-date product are recommended ] % 1: NCEP/NCAR Reanalysis, 1/1/1948 - present % 2: NCEP-DOE Reanalysis, 1/1/1979 - present % 3: CFSR (Climate Forecast System Reanalysis), @@ -401,9 +401,9 @@ QSCAT_clim_file = [DATADIR,'QuikSCAT_clim/',... % QSCAT climatolog % Reformat_ECMWF = 1; ECMWF_dir = [FORC_DATA_DIR,'ECMWF_',CROCO_config,'/']; % ERA-I data dir. [croco format] -My_ECMWF_dir = [FORC_DATA_DIR,'ERAI/']; % ERA-I native data downloaded - % with python script -itolap_ecmwf = 3; % 3 records for daily ECMWF +My_ECMWF_dir = [FORC_DATA_DIR,'ERAI/']; % ERA-I native data downloaded + % with python script +itolap_ecmwf = 3; % 3 records for daily ECMWF % %-------------------------------------------------- % Options for make_ERA5 @@ -417,10 +417,10 @@ itolap_era5 = 2; % 2 records = 2 h % % %-------------------------------------------- -% Options for make_OGCM or make_OGCM_mercator +% Options for make_OGCM_SODA or make_OGCM_mercator %-------------------------------------------- % -OGCM = 'SODA'; % Select OGCM: SODA, ECCO, mercator +OGCM = 'SODA'; % Select OGCM: SODA or mercator % OGCM_dir = [FORC_DATA_DIR,OGCM,'_',CROCO_config,'/']; % OGCM data dir. [croco format] % @@ -429,21 +429,52 @@ clm_prefix = [CROCO_files_dir,'croco_clm_',OGCM,'_']; % generic climatology ini_prefix = [CROCO_files_dir,'croco_ini_',OGCM,'_']; % generic initial file name OGCM_prefix = [OGCM,'_']; % generic OGCM file name + +mercator_type=1; % 1 --> 1/12 deg Mercator global reanalysis + % 2 --> 1/12 deg Mercator global analysis + % 3 --> 1/12 deg Mercator global forecast (See Section 8.) + % 4 --> 1/24 deg Mercator Mediterranean analysis/forecast (See Section 8.) + % 5 --> the same than 4 but with detiding postprocessing on current and ssh + +% ============= +% To download CMEMS data: set login/password (http://marine.copernicus.eu) +% and path to copernicusmarine executable +% see Oforc_OGCM/Copernicus_Marine_Toolbox_installation.md +% +% Various sets of data are proposed in the Copernicus web site +% if strcmp(OGCM,'mercator') + % + pathCMC='/path/to/home/copernicusmarine'; % copernicusmarine client + % + user = 'XXXX'; + password = 'XXXX'; + % + if mercator_type==1 % ======================== - % For GLORYS 12 reanalysis extraction + download using python motuclient + % For GLORYS 12 reanalysis extraction % ======================== - raw_mercator_name = 'mercator'; - kdata='MONTHLY' ; % or DAILY - motu_url_reana='http://my.cmems-du.eu/motu-web/Motu'; - service_id_reana='GLOBAL_MULTIYEAR_PHY_001_030-TDS'; + kdata='MONTHLY' ; % DAILY or MONTHLY if strcmp(kdata,'DAILY') - product_id_reana='cmems_mod_glo_phy_my_0.083_P1D-m'; + product_id='cmems_mod_glo_phy_my_0.083_P1D-m'; elseif strcmp(kdata,'MONTHLY') - product_id_reana='cmems_mod_glo_phy_my_0.083_P1M-m' + product_id='cmems_mod_glo_phy_my_0.083_P1M-m'; else - disp('Please specify what reanalysis frequency you want (DAILY or MONTHLY)') + disp('Please specify what kind of data you want (DAILY or MONTHLY)') end + % + elseif mercator_type==2 + % ======================== + % 2 -> For analysis PSY4 + % ======================== + product_id={'cmems_mod_glo_phy_anfc_0.083deg_P1D-m' ... + 'cmems_mod_glo_phy-cur_anfc_0.083deg_P1D-m', ... + 'cmems_mod_glo_phy-thetao_anfc_0.083deg_P1D-m', ... + 'cmems_mod_glo_phy-so_anfc_0.083deg_P1D-m'}; + % + else + end +% end % % Number of OGCM bottom levels to remove @@ -451,14 +482,14 @@ end % rmdepth = 2; % -% Overlap parameters : nb of records around each monthly sequence +% Overlap parameters : nb of records around each sequence % itolap_a = 1; % before itolap_p = 1; % after - % -%-------------------------- -% Options for make_bry_WKB -%-------------------------- +% +%---------------------------------------------------- +% Options for make_bry_WKB_ECMWF or make_bry_WKB_ERA5 +%---------------------------------------------------- % wkb_prefix=[CROCO_files_dir,'croco_wkb']; wkb_obc= [1 1 1 1]; @@ -468,25 +499,21 @@ wkb_obc= [1 1 1 1]; % 8 - Parameters for the forecast system % % --> select OGCM name above (mercator ...) +% --> select Aforc name (GFS) % --> don't forget to define in cppdefs.h: -% - ROBUST_DIAG -% - CLIMATOLOGY -% - BULK_FLUX -% - TIDES if you choose so, but without TIDERAMP +% - ROBUST_DIAG +% - CLIMATOLOGY +% - BULK_FLUX +% - TIDES if you choose so, but without TIDERAMP % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % FRCST_dir = [FORC_DATA_DIR,'Forecast/']; % path to local OGCM data directory % -% Number of hindcast/forecast days +% Number of hindcast / forecast days % -if strcmp(OGCM,'ECCO') - hdays=1; - fdays=6; -elseif strcmp(OGCM,'mercator') - hdays=1; - fdays=3; -end +hdays=1; +fdays=3; % % Local time= UTC + timezone % @@ -496,36 +523,38 @@ timezone = +2; % add_tides_fcst = 1; % 1: add tides % -% MERCATOR case: +% MERCATOR cases (See Section 7): % ============= -% To download CMEMS data: set login/password (http://marine.copernicus.eu) -% and path to croco's motuclient python package; -% or set pathMotu='' (empty) to use your own motuclient -% -% Various sets of data are proposed in the Copernicus web site % if strcmp(OGCM,'mercator') - user = 'XXX'; - password = 'XXX'; - - pathMotu =[CROCOTOOLS_dir,'Forecast_tools/']; - - mercator_type=1; % 1 --> 1/12 deg Mercator forecast - % 2 --> high-resolution regional grids - if mercator_type==1 - motu_url_fcst='http://nrt.cmems-du.eu/motu-web/Motu'; - service_id_fcst='GLOBAL_ANALYSISFORECAST_PHY_001_024-TDS'; - product_id_fcst={'cmems_mod_glo_phy_anfc_0.083deg_P1D-m', ... - 'cmems_mod_glo_phy-cur_anfc_0.083deg_P1D-m', ... - 'cmems_mod_glo_phy-thetao_anfc_0.083deg_P1D-m', ... - 'cmems_mod_glo_phy-so_anfc_0.083deg_P1D-m'}; - elseif mercator_type==2 - motu_url_fcst='http://nrt.cmems-du.eu/motu-web/Motu'; - service_id_fcst='MEDSEA_ANALYSISFORECAST_PHY_006_013-TDS'; - product_id_fcst={'cmems_mod_med_phy-ssh_anfc_4.2km_P1D-m', ... - 'cmems_mod_med_phy-cur_anfc_4.2km_P1D-m', ... - 'cmems_mod_med_phy-tem_anfc_4.2km_P1D-m', ... - 'cmems_mod_med_phy-sal_anfc_4.2km_P1D-m'}; + if mercator_type==3 + % ======================== + % 3 -> For Global Forecast PSY4 + % ======================== + product_id={'cmems_mod_glo_phy_anfc_0.083deg_P1D-m' ... + 'cmems_mod_glo_phy-cur_anfc_0.083deg_P1D-m', ... + 'cmems_mod_glo_phy-thetao_anfc_0.083deg_P1D-m', ... + 'cmems_mod_glo_phy-so_anfc_0.083deg_P1D-m'}; + % + elseif mercator_type==4 + % ======================== + % 4 -> For Mediterannean Forecast PSY4 4.2km + % ======================== + product_id={'cmems_mod_med_phy-ssh_anfc_4.2km_P1D-m', ... + 'cmems_mod_med_phy-cur_anfc_4.2km_P1D-m', ... + 'cmems_mod_med_phy-tem_anfc_4.2km_P1D-m', ... + 'cmems_mod_med_phy-sal_anfc_4.2km_P1D-m'}; + % + elseif mercator_type==5 + % ======================== + % 5 -> For Mediterannean Forecast PSY4 4.2km (ssh detided) + % ======================== + product_id={'cmems_mod_med_phy-ssh_anfc_detided_4.2km_P1D-m', ... + 'cmems_mod_med_phy-cur_anfc_4.2km_P1D-m', ... + 'cmems_mod_med_phy-tem_anfc_4.2km_P1D-m', ... + 'cmems_mod_med_phy-sal_anfc_4.2km_P1D-m'}; + % + else end end % diff --git a/start.m b/start.m index cb94c5cb..52509619 100644 --- a/start.m +++ b/start.m @@ -41,6 +41,7 @@ myutilpath=[tools_path,'UTILITIES/']; addpath([myutilpath,'m_map1.4h']) addpath([myutilpath,'air_sea']) addpath([myutilpath,'mask']) +addpath([myutilpath,'export_fig']) % % CROCOTOOLS directories % -- GitLab