Changeset 654 in lmdz_wrf


Ignore:
Timestamp:
Oct 15, 2015, 11:00:04 AM (10 years ago)
Author:
lfita
Message:

Adding 'WRFzhgt', WRF heights retrieved from the geopotential

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/tools/diagnostics.py

    r649 r654  
    1212import re
    1313import nc_var_tools as ncvar
    14 import datetime as dt
     14import datetime as dtime
    1515
    1616main = 'diagnostics.py'
    1717errormsg = 'ERROR -- error -- ERROR -- error'
    1818warnmsg = 'WARNING -- warning -- WARNING -- warning'
     19
     20# Constants
     21grav = 9.81
    1922
    2023# Gneral information
     
    797800availdiags = ['ACRAINTOT', 'accum', 'clt', 'cllmh', 'deaccum', 'LMDZrh', 'mslp',     \
    798801  'OMEGAw', 'RAINTOT',   \
    799   'rvors', 'td', 'turbulence', 'WRFrvors', 'wds', 'wss']
     802  'rvors', 'td', 'turbulence', 'WRFgeop', 'WRFp', 'WRFrvors', 'wds', 'wss',          \
     803  'WRFheight']
    800804
    801805methods = ['accum', 'deaccum']
     
    806810  'WRFp', 'WRFtd',                                                                   \
    807811  'WRFpos', 'WRFprc', 'WRFprls', 'WRFrh', 'LMDZrh', 'LMDZrhs', 'WRFrhs', 'WRFrvors', \
    808   'WRFt', 'WRFtime', 'WRFwds', 'WRFwss']
     812  'WRFt', 'WRFtime', 'WRFwds', 'WRFwss', 'WRFheight']
    809813
    810814ofile = 'diagnostics.nc'
     
    846850
    847851# Looking for specific variables that might be use in more than one diagnostic
     852WRFgeop_compute = False
    848853WRFp_compute = False
    849854WRFt_compute = False
     
    852857WRFdens_compute = False
    853858WRFpos_compute = False
     859WRFtime_compute = False
    854860
    855861for idiag in range(Ndiags):
    856862    if diags[idiag].split('|')[1].find('@') == -1:
    857863        depvars = diags[idiag].split('|')[1]
     864        if depvars == 'WRFgeop':WRFgeop_compute = True
    858865        if depvars == 'WRFp': WRFp_compute = True
    859866        if depvars == 'WRFt': WRFt_compute = True
     
    862869        if depvars == 'WRFdens': WRFdens_compute = True
    863870        if depvars == 'WRFpos': WRFpos_compute = True
    864 
     871        if depvars == 'WRFtime': WRFtime_compute = True
    865872    else:
    866873        depvars = diags[idiag].split('|')[1].split('@')
     874        if ncvar.searchInlist(depvars, 'WRFgeop'): WRFgeop_compute = True
    867875        if ncvar.searchInlist(depvars, 'WRFp'): WRFp_compute = True
    868876        if ncvar.searchInlist(depvars, 'WRFt'): WRFt_compute = True
     
    871879        if ncvar.searchInlist(depvars, 'WRFdens'): WRFdens_compute = True
    872880        if ncvar.searchInlist(depvars, 'WRFpos'): WRFpos_compute = True
     881        if ncvar.searchInlist(depvars, 'WRFtime'): WRFtime_compute = True
     882
     883if WRFgeop_compute:
     884    print '  ' + main + ': Retrieving geopotential value from WRF as PH + PHB'
     885    dimv = ncobj.variables['PH'].shape
     886    WRFgeop = ncobj.variables['PH'][:] + ncobj.variables['PHB'][:]
    873887
    874888if WRFp_compute:
     
    904918    print '    ' + main + ': computing air density from WRF as ((MU + MUB) * ' +     \
    905919      'DNW)/g ...'
    906     grav = 9.81
    907920
    908921# Just we need in in absolute values: Size of the central grid cell
     
    955968    for it in range(1,dt):
    956969        WRFpos[it,:,:] = WRFpos[0,:,:]
     970
     971if WRFtime_compute:
     972    print '    ' + main + ': computing time from WRF as CFtime(Times) ...'
     973
     974    refdate='19491201000000'
     975    tunitsval='minutes'
     976
     977    timeobj = ncobj.variables['Times']
     978    timewrfv = timeobj[:]
     979
     980    yrref=refdate[0:4]
     981    monref=refdate[4:6]
     982    dayref=refdate[6:8]
     983    horref=refdate[8:10]
     984    minref=refdate[10:12]
     985    secref=refdate[12:14]
     986
     987    refdateS = yrref + '-' + monref + '-' + dayref + ' ' + horref + ':' + minref +   \
     988      ':' + secref
     989
     990    dt = timeobj.shape[0]
     991    WRFtime = np.zeros((dt), dtype=np.float)
     992
     993    for it in range(dt):
     994        wrfdates = ncvar.datetimeStr_conversion(timewrfv[it,:],'WRFdatetime', 'matYmdHMS')
     995        WRFtime[it] = ncvar.realdatetime1_CFcompilant(wrfdates, refdate, tunitsval)
     996
     997    tunits = tunitsval + ' since ' + refdateS
     998
    957999
    9581000### ## #
     
    11431185        if depvars[2] != 'WRFtime':
    11441186            var2 = ncobj.variables[depvars[2]]
     1187        else:
     1188            var2 = np.arange(var0.shape[0], dtype=int)
    11451189
    11461190        var = var0[:] + var1[:]
     
    11521196
    11531197# Transforming to a flux
    1154         if var2.shape[0] > 0:
     1198        if var2.shape[0] > 1:
    11551199            if depvars[2] != 'WRFtime':
    11561200                dtimeunits = var2.getncattr('units')
     
    11671211                    tmf1 = tmf1 + time1[ic]
    11681212                    tmf2 = tmf2 + time2[ic]
    1169                 dtdate1 = dt.datetime.strptime(tmf1,"%Y-%m-%d_%H:%M:%S")
    1170                 dtdate2 = dt.datetime.strptime(tmf2,"%Y-%m-%d_%H:%M:%S")
     1213                dtdate1 = dtime.datetime.strptime(tmf1,"%Y-%m-%d_%H:%M:%S")
     1214                dtdate2 = dtime.datetime.strptime(tmf2,"%Y-%m-%d_%H:%M:%S")
    11711215                diffdate12 = dtdate2 - dtdate1
    11721216                dtime = diffdate12.total_seconds()
     
    12801324        ncvar.insert_variable(ncobj, 'bils', diagout, dnames, dvnames, newnc)
    12811325
     1326# WRFgeop geopotential from WRF as PH + PHB
     1327    elif diag == 'WRFgeop':
     1328           
     1329        diagout = WRFgeop
     1330
     1331        ncvar.insert_variable(ncobj, 'zg', diagout, dnames, dvnames, newnc)
     1332
    12821333# WRFp pressure from WRF as P + PB
    12831334    elif diag == 'WRFp':
     
    13411392
    13421393        ncvar.insert_variable(ncobj, 'rvors', diagout, dnamesvar, dvnamesvar, newnc)
     1394
     1395
     1396# WRFtime (u10, v10, WRFpos)
     1397    elif diag == 'WRFtime':
     1398           
     1399        diagout = WRFtime
     1400
     1401        dnamesvar = ['Time']
     1402        dvnamesvar = ['Times']
     1403
     1404        ncvar.insert_variable(ncobj, 'time', diagout, dnamesvar, dvnamesvar, newnc)
    13431405
    13441406# wss (u10, v10)
     
    13591421
    13601422        ncvar.insert_variable(ncobj, 'wss', diagout, dnamesvar, dvnamesvar, newnc)
     1423
     1424# WRFheight height from WRF geopotential as WRFGeop/g
     1425    elif diag == 'WRFheight':
     1426           
     1427        diagout = WRFgeop/grav
     1428
     1429        ncvar.insert_variable(ncobj, 'zhgt', diagout, dnames, dvnames, newnc)
    13611430
    13621431    else:
  • TabularUnified trunk/tools/variables_values.dat

    r646 r654  
    484484z, z, z,  0., 100., z, -, Greens
    485485Z, z, z,  0., 100., z, -, Greens
     486zhgt, zhgt, height,  0., 50000., altitude|from|surface, m, rainbow
    486487zg, zg, geopotential_height, 0., 80000., geopotential|height, m2s-2, rainbow
    487488WRFght, zg, geopotential_height, 0., 80000., geopotential|height, m2s-2, rainbow
Note: See TracChangeset for help on using the changeset viewer.