Changeset a676cf7 in flex_extract.git for Source/Python/Classes/EcFlexpart.py


Ignore:
Timestamp:
Oct 30, 2022, 1:13:24 AM (18 months ago)
Author:
Anne Tipka <anne.tipka@…>
Branches:
dev
Children:
7271b6f
Parents:
ea754d1
Message:

modifications and adjustments to dates and times for correctly retrieving analysis and forecast data in operational mode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Source/Python/Classes/EcFlexpart.py

    r365c82a ra676cf7  
    615615
    616616
    617     def retrieve(self, server, dates, public, request, inputdir='.'):
     617    def retrieve(self, server, dates, public, purefc, request, inputdir='.'):
    618618        '''Finalizing the retrieval information by setting final details
    619619        depending on grid type.
     
    634634            "YYYYMMDD/to/YYYYMMDD"
    635635
     636        public : int
     637            Switch to select kind of ECMWF Web API access and the possible data sets.
     638            Public data sets (1) and Member states data sets (0).
     639
     640        purefc : int
     641            Switch to decide whether the job is a pure forecast retrieval or
     642            coupled with analysis data.
     643
    636644        request : int
    637645            Selects the mode of retrieval.
     
    652660        self.public = public
    653661        self.inputdir = inputdir
     662        self.purefc = purefc
    654663        oro = False
    655664
     
    739748                        print('CHANGED FC start date to ' +
    740749                              sdate.strftime("%Y%m%d") +
    741                               ' to accomodate TIME=' +
     750                              ' to accommodate TIME=' +
    742751                              retr_param_dict['time'][0] +
    743752                              ', STEP=' +
     
    753762                    # if yes eliminate those fields since they may not
    754763                    # be accessible with user's credentials
    755 
     764                    dates = retr_param_dict['date'].split('/')
    756765                    enddate = retr_param_dict['date'].split('/')[-1]
    757                     elimit = datetime.strptime(enddate + str(self.basetime),
    758                                                '%Y%m%d%H')
     766                    elimit = datetime.strptime(enddate, '%Y%m%d')
    759767
    760768                    if self.basetime == 12:
    761769                        # --------------  flux data ----------------------------
    762                         if 'acc' in pk:
    763                             startdate = retr_param_dict['date'].split('/')[0]
    764                             enddate = datetime.strftime(elimit - t24h, '%Y%m%d')
    765                             retr_param_dict['date'] = '/'.join([startdate,
    766                                                                 'to',
    767                                                                 enddate])
     770                        if 'acc' in pk and not self.purefc:
     771
     772                            retr_param_dict['date'] = dates[0]
     773                            retr_param_dict['time'] = '12'
     774                            retr_param_dict['target'] = \
     775                                self._mk_targetname(ftype, pk,
     776                                                    retr_param_dict['date'])
    768777
    769778                            # ******* start retrievement
    770779                            self._start_retrievement(request, retr_param_dict)
    771780
    772                             retr_param_dict['date'] = \
    773                                 datetime.strftime(elimit - t12h, '%Y%m%d')
     781                            retr_param_dict['date'] = dates[-1]
     782                            retr_param_dict['time'] = '00/12'
     783                            retr_param_dict['target'] = \
     784                                self._mk_targetname(ftype, pk,
     785                                                    retr_param_dict['date'])
     786
     787                            # ******* start retrievement
     788                            self._start_retrievement(request, retr_param_dict)
     789
     790                        # --------------  non flux data ------------------------
     791                        else:
     792                            # ******* start retrievement
     793                            self._start_retrievement(request, retr_param_dict)
     794
     795                    elif self.basetime == 0:
     796                        # --------------  flux data ----------------------------
     797                        if 'acc' in pk and not self.purefc:
     798
     799                            retr_param_dict['date'] = dates[0]
     800                            retr_param_dict['time'] = '00/12'
     801                            retr_param_dict['target'] = \
     802                                self._mk_targetname(ftype, pk,
     803                                                    retr_param_dict['date'])
     804
     805                            # ******* start retrievement
     806                            self._start_retrievement(request, retr_param_dict)
     807
     808                            retr_param_dict['date'] = dates[-1]
    774809                            retr_param_dict['time'] = '00'
    775810                            retr_param_dict['target'] = \
     
    779814                            # ******* start retrievement
    780815                            self._start_retrievement(request, retr_param_dict)
    781 
    782                         # --------------  non flux data ------------------------
    783                         else:
     816                        elif 'acc' in pk and self.purefc:
    784817                            # ******* start retrievement
    785818                            self._start_retrievement(request, retr_param_dict)
    786 
    787                     elif self.basetime == 0:
    788 
    789                         timesave = ''.join(retr_param_dict['time'])
    790 
    791                         if all(['/' in retr_param_dict['time'],
    792                                 pk != 'OG_OROLSM__SL',
    793                                 'acc' not in pk]):
    794                             times = retr_param_dict['time'].split('/')
    795                             steps = retr_param_dict['step'].split('/')
    796 
    797                             while int(times[0]) + int(steps[0]) <= 12:
    798                                 times = times[1:]
    799                                 if len(times) > 1:
    800                                     retr_param_dict['time'] = '/'.join(times)
    801                                 else:
    802                                     retr_param_dict['time'] = times[0]
    803 
    804                         if all([pk != 'OG_OROLSM__SL',
    805                                 int(retr_param_dict['step'].split('/')[0]) == 0,
    806                                 int(timesave.split('/')[0]) == 0]):
    807 
    808                             retr_param_dict['date'] = \
    809                                 datetime.strftime(elimit, '%Y%m%d')
    810                             retr_param_dict['time'] = '00'
    811                             retr_param_dict['step'] = '000'
    812                             retr_param_dict['target'] = \
    813                                 self._mk_targetname(ftype, pk,
    814                                                     retr_param_dict['date'])
    815 
    816                         if ftype.upper() == 'FC' and \
    817                                 'acc' not in retr_param_dict['target']:
    818 
    819                             retr_param_dict['date'] = \
    820                                 datetime.strftime(elimit - t24h, '%Y%m%d')
    821 
    822                         # ******* start retrievement
    823                         self._start_retrievement(request, retr_param_dict)
     819                        # --------------  non flux data ------------------------
     820                        else: # 'acc' not in pk
     821                            timesave = ''.join(retr_param_dict['time'])
     822
     823                            if all(['/' in retr_param_dict['time'],
     824                                    pk != 'OG_OROLSM__SL']):
     825                                times = retr_param_dict['time'].split('/')
     826                                steps = retr_param_dict['step'].split('/')
     827
     828                                while int(times[0]) + int(steps[0]) <= 12:
     829                                    times = times[1:]
     830                                    if len(times) > 1:
     831                                        retr_param_dict['time'] = '/'.join(times)
     832                                    else:
     833                                        retr_param_dict['time'] = times[0]
     834
     835                            if all([pk != 'OG_OROLSM__SL',
     836                                    int(retr_param_dict['step'].split('/')[0]) == 0,
     837                                    int(timesave.split('/')[0]) == 0]):
     838
     839                                retr_param_dict['date'] = \
     840                                    datetime.strftime(elimit, '%Y%m%d')
     841                                retr_param_dict['time'] = '00'
     842                                retr_param_dict['step'] = '000'
     843                                retr_param_dict['target'] = \
     844                                    self._mk_targetname(ftype, pk,
     845                                                        retr_param_dict['date'])
     846
     847                            if ftype.upper() == 'FC' and not self.purefc:
     848
     849                                retr_param_dict['date'] = \
     850                                    datetime.strftime(elimit - t24h, '%Y%m%d')
     851
     852                            # ******* start retrievement
     853                            self._start_retrievement(request, retr_param_dict)
    824854                    else:
    825855                        raise ValueError('ERROR: Basetime has an invalid value '
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG