Changeset 64cf353 in flex_extract.git for python/getMARSdata.py
- Timestamp:
- Feb 8, 2018, 9:54:05 PM (6 years ago)
- Branches:
- master, ctbto, dev
- Children:
- 02c8c50
- Parents:
- 6180177
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
python/getMARSdata.py
rd69b677 r64cf353 2 2 # 3 3 # This software is licensed under the terms of the Apache Licence Version 2.0 4 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 5 # 4 # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. 5 # 6 6 # Functionality provided: Prepare input 3D-wind fields in hybrid coordinates + surface fields for FLEXPART runs 7 7 # 8 8 # Creation: October 2014 - Anne Fouilloux - University of Oslo 9 # Extension November 2015 - Leopold Haimberger - University of Vienna for: 9 # Extension November 2015 - Leopold Haimberger - University of Vienna for: 10 10 # - using the WebAPI also for general MARS retrievals 11 11 # - job submission on ecgate and cca … … 15 15 # - conversion into GRIB2 16 16 # - conversion into .fp format for faster execution of FLEXPART 17 # 17 # 18 18 # 19 19 # Further documentation may be obtained from www.flexpart.eu 20 # 21 # Requirements: 20 # 21 # Requirements: 22 22 # in addition to a standard python 2.6 or 2.7 installation the following packages need to be installed 23 23 # ECMWF WebMARS, gribAPI with python enabled, emoslib, ecaccess web toolkit, all available from https://software.ecmwf.int/ … … 26 26 # 27 27 # Get MARS GRIB fields from ECMWF for FLEXPART 28 # 28 # 29 29 30 30 #import socket … … 51 51 52 52 from FlexpartTools import MARSretrieval, EIFlexpart, silentremove, \ 53 Control,myerror,normalexit, interpret_args_and_control 53 Control, myerror, normalexit, \ 54 interpret_args_and_control 54 55 55 56 56 def getMARSdata(args, c):57 58 57 def getMARSdata(args, c): 58 59 59 60 if not os.path.exists(c.inputdir): 60 61 os.makedirs(c.inputdir) 61 print "start date %s "%(c.start_date)62 print "end date %s "%(c.end_date)62 print("start date %s " % (c.start_date)) 63 print("end date %s " % (c.end_date)) 63 64 64 65 # server = ECMWFDataServer()66 65 if ecapi: 67 66 server = ecmwfapi.ECMWFService("mars") … … 69 68 server = False 70 69 71 c.ecapi=ecapi 72 print 'ecapi:',c.ecapi 70 c.ecapi = ecapi 71 print 'ecapi:', c.ecapi 72 73 73 # Retrieve ERA interim data for running flexpart 74 #AP change this variant to correct format conversion with datetime 75 #AP import datetime and timedelta explicitly 76 syear = int(c.start_date[:4]) 77 smonth = int(c.start_date[4:6]) 78 sday = int(c.start_date[6:]) 79 start = datetime.date(year=syear, month=smonth, day=sday) 80 startm1 = start - datetime.timedelta(days=1) 81 if c.basetime == '00': 82 start = startm1 83 eyear = int(c.end_date[:4]) 84 emonth = int(c.end_date[4:6]) 85 eday = int(c.end_date[6:]) 86 end = datetime.date(year=eyear, month=emonth, day=eday) 87 if c.basetime == '00' or c.basetime == '12': 88 endp1 = end + datetime.timedelta(days=1) 89 else: 90 endp1 = end + datetime.timedelta(days=2) 74 91 75 syear=int(c.start_date[:4]) 76 smonth=int(c.start_date[4:6]) 77 sday=int(c.start_date[6:]) 78 start = datetime.date( year = syear, month = smonth, day = sday ) 79 startm1=start- datetime.timedelta(days=1) 80 if c.basetime=='00': 81 start=startm1 82 eyear=int(c.end_date[:4]) 83 emonth=int(c.end_date[4:6]) 84 eday=int(c.end_date[6:]) 85 86 end = datetime.date( year = eyear, month = emonth, day = eday ) 87 if c.basetime=='00' or c.basetime=='12': 88 endp1=end+ datetime.timedelta(days=1) 89 else: 90 endp1=end+ datetime.timedelta(days=2) 91 92 datechunk=datetime.timedelta(days=int(c.date_chunk)) 93 print 'removing content of '+c.inputdir 94 tobecleaned=glob.glob(c.inputdir+'/*_acc_*.'+str(os.getppid())+'.*.grb') 92 datechunk = datetime.timedelta(days=int(c.date_chunk)) 93 print 'removing content of ' + c.inputdir 94 tobecleaned = glob.glob(c.inputdir + '/*_acc_*.' + str(os.getppid()) + '.*.grb') 95 95 for f in tobecleaned: 96 96 os.remove(f) 97 97 98 98 times=None 99 99 if c.maxstep<24: … … 103 103 flexpart = EIFlexpart(c,fluxes=True) 104 104 if day+datechunk-datetime.timedelta(days=1)<endp1: 105 dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") 105 dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") 106 106 else: 107 dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") 108 107 dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") 108 109 109 print "retrieve " + dates + " in dir " + c.inputdir 110 110 try: … … 112 112 except IOError: 113 113 myerror(c,'MARS request failed') 114 114 115 115 day+=datechunk 116 116 else: … … 120 120 flexpart = EIFlexpart(c,fluxes=True) 121 121 if day+datechunk-datetime.timedelta(days=1)<end: 122 dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") 122 dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") 123 123 else: 124 dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") 125 124 dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") 125 126 126 print "retrieve " + dates + " in dir " + c.inputdir 127 127 flexpart.retrieve(server, dates, times, c.inputdir) 128 128 day+=datechunk 129 129 130 130 131 131 … … 136 136 times=None 137 137 while day<=end: 138 138 139 139 # we need to retrieve MARS data for this period (maximum one month) 140 140 flexpart = EIFlexpart(c) 141 141 if day+datechunk-datetime.timedelta(days=1)<end: 142 dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") 142 dates= day.strftime("%Y%m%d") + "/to/" + (day+datechunk-datetime.timedelta(days=1)).strftime("%Y%m%d") 143 143 else: 144 dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") 144 dates= day.strftime("%Y%m%d") + "/to/" + end.strftime("%Y%m%d") 145 145 print "retrieve " + dates + " in dir " + c.inputdir 146 146 147 147 flexpart.retrieve(server, dates, times, c.inputdir) 148 148 day+=datechunk 149 149 150 150 151 151 if __name__ == "__main__": 152 152 153 153 args,c=interpret_args_and_control() 154 154 getMARSdata(args,c)
Note: See TracChangeset
for help on using the changeset viewer.