-
Gildas Cambon authoredGildas Cambon authored
ERA-Interim_request.py 21.25 KiB
#!/usr/bin/env python
# Script to download ERA Interim data
# 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 January 2016 (E. Cadier and S. Illig)
# Updated December 2016 (P. Marchesiello) for 6-hourly & wave fields
#
from ecmwfapi import ECMWFDataServer
import shutil
import os
import calendar
from subprocess import call
######################
# Parameters
######################
# Period
yearStart = 2000
yearEnd = 2000
monthStart = 1
monthEnd = 3
# Area of interest
ownArea = 0 # 0 if area from a crocotools_param.m file
# 1 if own area
# To complete if ownArea==0
paramFile = '../Run/crocotools_param.m'
# To complete if ownArea==1
#lonmin = str(-10)
#lonmax = str(17.25)
#latmin = str(-30)
#latmax = str(7)
# Output directory
outdir = os.getcwd() + "/out"
outdir = '../Run/DATA/ERAI'
######################
dl = 3
if ownArea == 0:
lines = [line.rstrip('\n') for line in open(paramFile)]
for line in lines:
if "lonmin" in line:
for i in range(len(line)):
if line[i] == "=":
iStart = i+1
elif line[i] == ";":
iEnd = i
lonmin = line[iStart:iEnd]
elif "lonmax" in line:
for i in range(len(line)):
if line[i] == "=":
iStart = i+1
elif line[i] == ";":
iEnd = i
lonmax = line[iStart:iEnd]
elif "latmin" in line:
for i in range(len(line)):
if line[i] == "=":
iStart = i+1
elif line[i] == ";":
iEnd = i
latmin = line[iStart:iEnd]
elif "latmax" in line:
for i in range(len(line)):
if line[i] == "=":
iStart = i+1
elif line[i] == ";":
iEnd = i
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)
######################
# Retrieve data
######################
server = ECMWFDataServer()
# Loop on the years and months
for year in range(yearStart, yearEnd+1):
if year == yearStart and year == yearEnd:
monthStartYear = monthStart
monthEndYear = monthEnd
elif year == yearStart and year != yearEnd:
monthStartYear = monthStart
monthEndYear = 12
elif year != yearStart and year == yearEnd:
monthStartYear = 1
monthEndYear = monthEnd
else:
monthStartYear = 1
monthEndYear = 12
for month in range(monthStartYear, monthEndYear+1):
if month == 12:
yearBefore = year
monthBefore = month - 1
yearNext = year + 1
monthNext = 1
elif month == 1:
yearBefore = year - 1
monthBefore = 12
yearNext = year
monthNext = month + 1
else:
yearBefore = year
monthBefore = month - 1
monthNext = month + 1
yearNext = year
if month < 10:
month2 = "0"+str(month)
else:
month2 = str(month)
if monthBefore < 10:
monthBefore2 = "0"+str(monthBefore)
else:
monthBefore2 = str(monthBefore)
if monthNext < 10:
monthNext2 = "0"+str(monthNext)
else:
monthNext2 = str(monthNext)
if monthBefore == 1 or monthBefore == 3 or monthBefore == 5 or monthBefore == 7 or monthBefore == 8 or monthBefore == 10 or monthBefore == 12:
nDays = 31
elif monthBefore == 4 or monthBefore == 6 or monthBefore == 9 or monthBefore == 11:
nDays = 30
else:
if calendar.isleap(yearBefore):
nDays = 29
else:
nDays = 28
date = str(yearBefore) + "-" + monthBefore2 + "-" + \
str(nDays) + "/to/" + str(yearNext) + "-" + monthNext2 + "-01"
print ('date=', date)
# 1. Sea surface temperature
filename = 'EI_ecmwf_SSTK_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "34.128",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 2. 2 metre temperature
filename = 'EI_ecmwf_T2M_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "167.128",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 3. 10 metre u wind component
filename = 'EI_ecmwf_U10M_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "165.128",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 4. 10 metre v wind component
filename = 'EI_ecmwf_V10M_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "166.128",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 5. Specific humidity
filename = 'EI_ecmwf_Q_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "pl",
"levelist": "1000",
"param": "133.128",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 6. Significant wave height
filename = 'EI_ecmwf_SWH_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "wave",
"param": "229.140",
"stream": "wave",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 7. Mean wave direction
filename = 'EI_ecmwf_MWD_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "wave",
"param": "230.140",
"stream": "wave",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 8. Peak wave period
filename = 'EI_ecmwf_PP1D_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "wave",
"param": "231.140",
"stream": "wave",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 9. Coefficient of drag with waves
filename = 'EI_ecmwf_DRAGW_' + str(year) + str(month2) + '.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "wave",
"param": "233.140",
"stream": "wave",
"format": "netcdf",
"target": filename,
"time": "00/06/12/18",
"type": "an",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 10. Total Precipitations
filename = 'EI_ecmwf_TP_' + str(year) + str(month2) + '_step3.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "228.128",
"step": "3",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_TP_' + str(year) + str(month2) + '_step9.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "228.128",
"step": "9",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_TP_' + str(year) + str(month2) + '_step15.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "228.128",
"step": "15",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 11. Surface solar radiation
filename = 'EI_ecmwf_SSR_' + str(year) + str(month2) + '_step3.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "176.128",
"step": "3",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_SSR_' + str(year) + str(month2) + '_step9.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "176.128",
"step": "9",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_SSR_' + str(year) + str(month2) + '_step15.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "176.128",
"step": "15",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 12. Surface thermal radiation
filename = 'EI_ecmwf_STR_' + str(year) + str(month2) + '_step3.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "177.128",
"step": "3",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_STR_' + str(year) + str(month2) + '_step9.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "177.128",
"step": "9",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_STR_' + str(year) + str(month2) + '_step15.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "177.128",
"step": "15",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 13. Surface thermal radiation downwards
filename = 'EI_ecmwf_STRD_' + str(year) + str(month2) + '_step3.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "175.128",
"step": "3",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_STRD_' + str(year) + str(month2) + '_step9.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "175.128",
"step": "9",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_STRD_' + str(year) + str(month2) + '_step15.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "175.128",
"step": "15",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 14. East-west surface stress
filename = 'EI_ecmwf_EWSS_' + str(year) + str(month2) + '_step3.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "180.128",
"step": "3",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_EWSS_' + str(year) + str(month2) + '_step9.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "180.128",
"step": "9",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_EWSS_' + str(year) + str(month2) + '_step15.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "180.128",
"step": "15",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
# 15. North-south surface stress
filename = 'EI_ecmwf_NSSS_' + str(year) + str(month2) + '_step3.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "181.128",
"step": "3",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_NSSS_' + str(year) + str(month2) + '_step9.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "181.128",
"step": "9",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)
filename = 'EI_ecmwf_NSSS_' + str(year) + str(month2) + '_step15.nc'
server.retrieve({
"class": "ei",
"dataset": "interim",
"date": date,
"expver": "1",
"levtype": "sfc",
"param": "181.128",
"step": "15",
"stream": "oper",
"format": "netcdf",
"target": filename,
"time": "00/12",
"type": "fc",
"area": latmax+"/"+lonmin+"/"+latmin+"/"+lonmax,
"grid": "0.25/0.25",
})
shutil.move(filename, outdir+"/"+filename)