Changeset 601 in lmdz_wrf


Ignore:
Timestamp:
Jul 16, 2015, 1:19:14 PM (10 years ago)
Author:
lfita
Message:

Adding time interval checking

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/validation_sim.py

    r584 r601  
    9393
    9494    return
     95
     96def CFtimes_datetime_NOfile(times, units, calendar):
     97    """ Provide date/time array from velues of netCDF CF-compilant time variable
     98    times= time values
     99    units= CF units of the variable time
     100    output:
     101      array(dimt, 0) = year
     102      array(dimt, 1) = month
     103      array(dimt, 2) = day
     104      array(dimt, 3) = hour
     105      array(dimt, 4) = minute
     106      array(dimt, 5) = second
     107    """
     108    import datetime as dt
     109    fname = 'CFtimes_datetime_NOfile'
     110
     111    txtunits = units.split(' ')
     112    tunits = txtunits[0]
     113    Srefdate = txtunits[len(txtunits) - 1]
     114# Does reference date contain a time value [YYYY]-[MM]-[DD] [HH]:[MI]:[SS]
     115##
     116    timeval = Srefdate.find(':')
     117
     118    if not timeval == -1:
     119#        print '  refdate with time!'
     120        refdate = datetimeStr_datetime(txtunits[len(txtunits) - 2] + '_' + Srefdate)
     121    else:
     122        refdate = dateStr_date(Srefdate)
     123
     124    dimt = len(times)
     125    realdates = np.zeros((dimt, 6), dtype=int)
     126
     127    secsDay=3600*24.
     128
     129# Checking calendar!
     130##
     131    y360 = False
     132    daycal360 = ['earth_360d', '360d', '360days', '360_day']
     133    if searchInlist(daycal360,calendar):
     134        print warnmsg
     135        print '  ' + fname + ': calendar of 12 months of 30 days !!'
     136        y360 = True
     137
     138## Not in timedelta
     139#    if tunits == 'years':
     140#        for it in range(dimt):
     141#            realdate = refdate + dt.timedelta(years=float(times[it]))
     142#            realdates[it] = int(realdate.year)
     143#    elif tunits == 'months':
     144#        for it in range(dimt):
     145#            realdate = refdate + dt.timedelta(months=float(times[it]))
     146#            realdates[it] = int(realdate.year)
     147    if y360:
     148        if tunits == 'weeks':
     149            for it in range(dimt):
     150                deltat = dt.timedelta(weeks=float(times[it]))
     151                Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000.
     152                realdates[it,:] = date_juliandate(refdate.year,Tsecs)
     153        elif tunits == 'days':
     154            for it in range(dimt):
     155                deltat = dt.timedelta(days=float(times[it]))
     156                Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000.
     157                realdates[it,:] = date_juliandate(refdate.year,Tsecs)
     158        elif tunits == 'hours':
     159           for it in range(dimt):
     160                realdate = dt.timedelta(hours=float(times[it]))
     161                Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000.
     162                realdates[it,:] = date_juliandate(refdate.year,Tsecs)
     163        elif tunits == 'minutes':
     164           for it in range(dimt):
     165                realdate = dt.timedelta(minutes=float(times[it]))
     166                Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000.
     167                realdates[it,:] = date_juliandate(refdate.year,Tsecs)
     168        elif tunits == 'seconds':
     169           for it in range(dimt):
     170                realdate = dt.timedelta(seconds=float(times[it]))
     171                Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000.
     172                realdates[it,:] = date_juliandate(refdate.year,Tsecs)
     173        elif tunits == 'miliseconds':
     174           for it in range(dimt):
     175                realdate = dt.timedelta(miliseconds=float(times[it]))
     176                Tsecs = deltat.days*secsDay + deltat.seconds + deltat.microseconds/1000.
     177                realdates[it,:] = date_juliandate(refdate.year,Tsecs)
     178        else:
     179              print errormsg
     180              print '    CFtimes_datetime: time units "' + tunits + '" not ready!!!!'
     181              quit(-1)
     182    else:
     183        if tunits == 'weeks':
     184            for it in range(dimt):
     185                realdate = refdate + dt.timedelta(weeks=float(times[it]))
     186                realdates[it,0] = int(realdate.year)
     187                realdates[it,1] = int(realdate.month)
     188                realdates[it,2] = int(realdate.day)
     189                realdates[it,3] = int(realdate.hour)
     190                realdates[it,4] = int(realdate.second)
     191                realdates[it,5] = int(realdate.minute)
     192        elif tunits == 'days':
     193            for it in range(dimt):
     194                realdate = refdate + dt.timedelta(days=float(times[it]))
     195                realdates[it,0] = int(realdate.year)
     196                realdates[it,1] = int(realdate.month)
     197                realdates[it,2] = int(realdate.day)
     198                realdates[it,3] = int(realdate.hour)
     199                realdates[it,4] = int(realdate.second)
     200                realdates[it,5] = int(realdate.minute)
     201        elif tunits == 'hours':
     202           for it in range(dimt):
     203                realdate = refdate + dt.timedelta(hours=float(times[it]))
     204                realdates[it,0] = int(realdate.year)
     205                realdates[it,1] = int(realdate.month)
     206                realdates[it,2] = int(realdate.day)
     207                realdates[it,3] = int(realdate.hour)
     208                realdates[it,4] = int(realdate.second)
     209                realdates[it,5] = int(realdate.minute)
     210        elif tunits == 'minutes':
     211           for it in range(dimt):
     212                realdate = refdate + dt.timedelta(minutes=float(times[it]))
     213                realdates[it,0] = int(realdate.year)
     214                realdates[it,1] = int(realdate.month)
     215                realdates[it,2] = int(realdate.day)
     216                realdates[it,3] = int(realdate.hour)
     217                realdates[it,4] = int(realdate.second)
     218                realdates[it,5] = int(realdate.minute)
     219        elif tunits == 'seconds':
     220           for it in range(dimt):
     221                realdate = refdate + dt.timedelta(seconds=float(times[it]))
     222                realdates[it,0] = int(realdate.year)
     223                realdates[it,1] = int(realdate.month)
     224                realdates[it,2] = int(realdate.day)
     225                realdates[it,3] = int(realdate.hour)
     226                realdates[it,4] = int(realdate.second)
     227                realdates[it,5] = int(realdate.minute)
     228        elif tunits == 'milliseconds':
     229           for it in range(dimt):
     230                realdate = refdate + dt.timedelta(milliseconds=float(times[it]))
     231                realdates[it,0] = int(realdate.year)
     232                realdates[it,1] = int(realdate.month)
     233                realdates[it,2] = int(realdate.day)
     234                realdates[it,3] = int(realdate.hour)
     235                realdates[it,4] = int(realdate.second)
     236                realdates[it,5] = int(realdate.minute)
     237        else:
     238              print errormsg
     239              print '    CFtimes_datetime: time units "' + tunits + '" not ready!!!!'
     240              quit(-1)
     241   
     242    return realdates
    95243
    96244def index_3mat(matA,matB,matC,val):
     
    17871935simobstimes = coincident_CFtimes(tsim, obstunits, simtunits)
    17881936
     1937iobst = CFtimes_datetime_NOfile([valdimobs['T'][0]], obstunits, 'standard')
     1938fobst = CFtimes_datetime_NOfile([valdimobs['T'][dimtobs-1]], obstunits, 'standard')
     1939isimt = CFtimes_datetime_NOfile([simobstimes[0]], obstunits, 'standard')
     1940fsimt = CFtimes_datetime_NOfile([simobstimes[dimtsim-1]], obstunits, 'standard')
     1941print 'check of times _______'
     1942print '  * Observations'
     1943print '     - first time:', iobst
     1944print '     - last time:', fobst
     1945print '  * Simulations'
     1946print '     - first time:', isimt
     1947print '     - last time:', fsimt
     1948
    17891949#
    17901950## Looking for exact/near times
     
    18081968    print '  ' + main + ': no exact values found!'
    18091969    Nexactt = 0
    1810     quit(-1)
     1970#    quit(-1)
    18111971else:
    18121972    Nexactt = len(exacttvalues[:,0])
     
    18381998closesttvalues = np.array(closesttvalues0, dtype=np.float)
    18391999
     2000print 'closesttvales shape:',closesttvalues.shape
    18402001Nclosest = len(closesttvalues[:,0])
    18412002print main + ': found',Nclosest,'Simulation time-values closest to observations'
Note: See TracChangeset for help on using the changeset viewer.