Changeset 2678 in lmdz_wrf for trunk


Ignore:
Timestamp:
Jul 13, 2019, 9:52:45 PM (5 years ago)
Author:
lfita
Message:

Starting to work 'frontogenesis'

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/diag_tools.py

    r2675 r2678  
    16241624        dyst = dys.transpose()
    16251625
    1626         print '  ' + fname + ' Lluis shapes dzs', dzs.shape, 'dz:', dz
    1627  
    16281626        pxdiab, pydiab, pzdiab, pxdef, pydef, pzdef, pxtilt, pytilt, pzdiv, pf =     \
    16291627          fdin.module_fordiagnostics.compute_frontogenesis(theta=thetat, ua=uat,     \
     
    16461644        quit(-1)
    16471645
    1648     return xdiab, ydiab, zdiab, xdef, ydef, zdef, xtilt, ytilt, zdiv, f
     1646    return xdiab, ydiab, zdiab, xdef, ydef, zdef, xtilt, ytilt, zdiv, f, frontdims, frontvdims
    16491647
    16501648####### ###### ##### #### ### ## # END Fortran diagnostics
  • trunk/tools/diagnostics.py

    r2675 r2678  
    104104NONcheckingvars = ['accum', 'cllmh', 'deaccum', 'face', 'LONLATdxdy',                \
    105105  'params', 'reglonlatbnds', 'TSrhs', 'TStd', 'TSwds', 'TSwss',                      \
     106  'UNua', 'UNva', 'UNwa',                                                            \
    106107  'WRFbils',  'WRFbnds',                                                             \
    107108  'WRFclivi', 'WRFclwvi', 'WRFdens', 'WRFdx', 'WRFdxdy', 'WRFdxdywps', 'WRFdy',      \
     
    206207    if dnv == 'WRFdxdywps':WRFdxdywps_compute = True
    207208    if dnv == 'LONLATdxdy':LONLATdxdy_compute = True
     209    if dnv[0:4] == 'UNua':
     210        UNua_compute = True
     211        vUnua = dnv.split(',')[1]
     212    if dnv[0:4] == 'UNva':
     213        UNva_compute = True
     214        vUnva = dnv.split(',')[1]
     215    if dnv[0:4] == 'UNwa':
     216        UNwa_compute = True
     217        vUnwa = dnv.split(',')[1]
    208218
    209219# diagnostics to compute
     
    223233        if depvars == 'WRFtime': WRFtime_compute = True
    224234        if depvars == 'WRFz': WRFz_compute = True
     235        if depvars == 'WRFdx': WRFdx_compute = True
     236        if depvars == 'WRFdy': WRFdy_compute = True
     237        if depvars == 'WRFdz': WRFdz_compute = True
     238        if depvars == 'WRFdxdy': WRFdxdy_compute = True
     239        if depvars == 'WRFdxdywps': WRFdxdywps_compute = True
     240        if depvars == 'LONLATdxdy': LONLATdxdy_compute = True
     241        if depvars[0:4] == 'UNua':
     242            UNua_compute = True
     243            vUnua = dnv.split(',')[1]
     244        if depvars[0:4] == 'UNva':
     245            UNva_compute = True
     246            vUnva = dnv.split(',')[1]
     247        if depvars[0:4] == 'UNwa':
     248            UNwa_compute = True
     249            vUnwa = dnv.split(',')[1]
    225250    else:
    226251        depvars = diags[idiag].split('|')[1].split('@')
     
    240265        if gen.searchInlist(depvars, 'WRFdxdywps'): WRFdxdywps_compute = True
    241266        if gen.searchInlist(depvars, 'LONLATdxdy'): LONLATdxdy_compute = True
     267        if gen.searchInlist_Strsec(depvars, 0, 3, 'UNua'):
     268            UNua_compute = True
     269            vals, ind = gen.search_sec_list(depvars,'UNua')
     270            dnv = depvars[ind[0]]
     271            vUNua = dnv.split(':')[1]
     272        if gen.searchInlist_Strsec(depvars, 0, 3, 'UNva'):
     273            UNva_compute = True
     274            vals, ind = gen.search_sec_list(depvars,'UNva')
     275            dnv = depvars[ind[0]]
     276            vUNva = dnv.split(':')[1]
     277        if gen.searchInlist_Strsec(depvars, 0, 3, 'UNwa'):
     278            UNwa_compute = True
     279            vals, ind = gen.search_sec_list(depvars,'UNwa')
     280            dnv = depvars[ind[0]]
     281            vUNwa = dnv.split(':')[1]
    242282
    243283# Dictionary with the new computed variables to be able to add them
     
    379419    refdateS = yrref + '-' + monref + '-' + dayref + ' ' + horref + ':' + minref +   \
    380420      ':' + secref
    381 
    382421
    383422    if len(timeobj.shape) == 2:
     
    537576    # Attributes of the variable
    538577    Vvals = gen.variables_values('WRFdx')
    539     dictcompvars['WRFdx'] = {'name': Vvals[0], 'standard_name': Vvals[1],             \
     578    dictcompvars['WRFdx'] = {'name': Vvals[0], 'standard_name': Vvals[1],            \
    540579      'long_name': Vvals[4].replace('|',' '), 'units': Vvals[5]}
    541580    Vvals = gen.variables_values('WRFdy')
    542     dictcompvars['WRFdy'] = {'name': Vvals[0], 'standard_name': Vvals[1],             \
     581    dictcompvars['WRFdy'] = {'name': Vvals[0], 'standard_name': Vvals[1],            \
    543582      'long_name': Vvals[4].replace('|',' '), 'units': Vvals[5]}
    544583    Vvals = gen.variables_values('WRFds')
    545     dictcompvars['WRFds'] = {'name': Vvals[0], 'standard_name': Vvals[1],             \
     584    dictcompvars['WRFds'] = {'name': Vvals[0], 'standard_name': Vvals[1],            \
     585      'long_name': Vvals[4].replace('|',' '), 'units': Vvals[5]}
     586
     587if UNua_compute:
     588    print '  ' + main + ": un-staggering '" + vUNua + "': as 0.5*(ua[0:dimx-1]+" +   \
     589      "ua[1:dimx])"
     590    vunua = ncobj.variables[vUNua][:]
     591    dimv = ncobj.variables[vUNua].shape
     592
     593    dimx = dimv[3]
     594    dimy = dimv[2]
     595    dimz = dimv[1]
     596    dimt = dimv[0]
     597
     598    undimx = 'unx'
     599
     600    unua = np.zeros((dimt,dimz,dimy,dimx-1), dtype=np.float)
     601    unua[...,0:dimx-1] = 0.5*(vunua[...,1:dimx]+vunua[...,0:dimx-1])
     602
     603    # Attributes of the variable
     604    Vvals = gen.variables_values('ua')
     605    dictcompvars['unua'] = {'name': Vvals[0], 'standard_name': Vvals[1],            \
     606      'long_name': Vvals[4].replace('|',' '), 'units': Vvals[5]}
     607
     608if UNva_compute:
     609    print '  ' + main + ": un-staggering '" + vUNva + "': as 0.5*(va[0:dimy-1]+" +   \
     610      "va[1:dimy])"
     611    vunva = ncobj.variables[vUNva][:]
     612    dimv = ncobj.variables[vUNva].shape
     613
     614    dimx = dimv[3]
     615    dimy = dimv[2]
     616    dimz = dimv[1]
     617    dimt = dimv[0]
     618
     619    undimy = 'uny'
     620
     621    unva = np.zeros((dimt,dimz,dimy-1,dimx), dtype=np.float)
     622    unva[...,0:dimy-1,:] = 0.5*(vunva[...,1:dimy,:]+vunva[...,0:dimy-1,:])
     623
     624    # Attributes of the variable
     625    Vvals = gen.variables_values('va')
     626    dictcompvars['unva'] = {'name': Vvals[0], 'standard_name': Vvals[1],            \
     627      'long_name': Vvals[4].replace('|',' '), 'units': Vvals[5]}
     628
     629if UNwa_compute:
     630    print '  ' + main + ": un-staggering '" + vUNwa + "': as 0.5*(wa[0:dimz-1]+" +   \
     631      "wa[1:dimz])"
     632    vunwa = ncobj.variables[vUNwa][:]
     633    dimv = ncobj.variables[vUNwa].shape
     634
     635    dimx = dimv[3]
     636    dimy = dimv[2]
     637    dimz = dimv[1]
     638    dimt = dimv[0]
     639
     640    undimz = 'unz'
     641
     642    unwa = np.zeros((dimt,dimz-1,dimy,dimx), dtype=np.float)
     643    unwa[...,0:dimz-1,:,:] = 0.5*(vunwa[...,1:dimz,:,:]+vunwa[...,0:dimz-1,:,:])
     644
     645    # Attributes of the variable
     646    Vvals = gen.variables_values('wa')
     647    dictcompvars['unwa'] = {'name': Vvals[0], 'standard_name': Vvals[1],            \
    546648      'long_name': Vvals[4].replace('|',' '), 'units': Vvals[5]}
    547649
     
    881983# frontogenesis (theta, ua, va, wa, press, dxs, dys, dzs, time)
    882984    elif diagn == 'frontogenesis':
    883            
    884985        if depvars[0] == 'WRFt': var0 = WRFt
    885986        else: var0 = ncobj.variables[depvars[0]][:]
     
    888989        dz = var0.shape[1]
    889990        dt = var0.shape[0]
    890         var1 = ncobj.variables[depvars[1]][:]
    891         var2 = ncobj.variables[depvars[2]][:]
    892         var3 = ncobj.variables[depvars[3]][:]
     991        if depvars[1][0:4] == 'UNua': var1 = unua
     992        else: var1 = ncobj.variables[depvars[1]][:]
     993        if depvars[2][0:4] == 'UNva': var2 = unva
     994        else: var2 = ncobj.variables[depvars[2]][:]
     995        if depvars[3][0:4] == 'UNwa': var3 = unwa
     996        else: var3 = ncobj.variables[depvars[3]][:]
    893997        if depvars[4] == 'WRFp': var4 = WRFp
    894998        else: var4 = ncobj.variables[depvars[4]]
     
    9091013          var4, var5, var6, var7, var8, dnames, dvnames)
    9101014
     1015        # Removing the nonChecking variable-dimensions from the initial list
     1016        varsadd = []
     1017        diagoutvd = list(dvnames)
     1018        for nonvd in NONchkvardims:
     1019            if gen.searchInlist(dvnames,nonvd): diagoutvd.remove(nonvd)
     1020            varsadd.append(nonvd)
     1021
    9111022        ncvar.insert_variable(ncobj, 'diabh', diag1, diagoutd, diagoutvd, newnc,     \
    9121023          gen.fillValueF)
    913         ovar = newnc.variables['diabh']
     1024        newnc.renameVariable('diabh', 'xdiabh')
     1025        newnc.sync()
     1026        ovar = newnc.variables['xdiabh']
    9141027        stdn = ovar.getncattr('standard_name')
    9151028        ovar.setncattr('standard_name', 'x'+stdn)
     
    9211034        ncvar.insert_variable(ncobj, 'diabh', diag2, diagoutd, diagoutvd, newnc,     \
    9221035          gen.fillValueF)
    923         ovar = newnc.variables['diabh']
     1036        newnc.renameVariable('diabh', 'ydiabh')
     1037        newnc.sync()
     1038        ovar = newnc.variables['ydiabh']
    9241039        stdn = ovar.getncattr('standard_name')
    9251040        ovar.setncattr('standard_name', 'y'+stdn)
     
    9311046        ncvar.insert_variable(ncobj, 'diabh', diag3, diagoutd, diagoutvd, newnc,     \
    9321047          gen.fillValueF)
    933         ovar = newnc.variables['diabh']
     1048        newnc.renameVariable('diabh', 'zdiabh')
     1049        newnc.sync()
     1050        ovar = newnc.variables['zdiabh']
    9341051        stdn = ovar.getncattr('standard_name')
    9351052        ovar.setncattr('standard_name', 'z'+stdn)
     
    9421059        ncvar.insert_variable(ncobj, 'def', diag4, diagoutd, diagoutvd, newnc,       \
    9431060          gen.fillValueF)
    944         ovar = newnc.variables['def']
     1061        newnc.renameVariable('def', 'xdef')
     1062        newnc.sync()
     1063        ovar = newnc.variables['xdef']
    9451064        stdn = ovar.getncattr('standard_name')
    9461065        ovar.setncattr('standard_name', 'thetax'+stdn)
     
    9521071        ncvar.insert_variable(ncobj, 'def', diag5, diagoutd, diagoutvd, newnc,       \
    9531072          gen.fillValueF)
    954         ovar = newnc.variables['def']
     1073        newnc.renameVariable('def', 'ydef')
     1074        newnc.sync()
     1075        ovar = newnc.variables['ydef']
    9551076        stdn = ovar.getncattr('standard_name')
    9561077        ovar.setncattr('standard_name', 'thetay'+stdn)
     
    9621083        ncvar.insert_variable(ncobj, 'def', diag6, diagoutd, diagoutvd, newnc,       \
    9631084          gen.fillValueF)
    964         ovar = newnc.variables['def']
     1085        newnc.renameVariable('def', 'zdef')
     1086        newnc.sync()
     1087        ovar = newnc.variables['zdef']
    9651088        stdn = ovar.getncattr('standard_name')
    9661089        ovar.setncattr('standard_name', 'thetaz'+stdn)
     
    9731096        ncvar.insert_variable(ncobj, 'tilt', diag7, diagoutd, diagoutvd, newnc,      \
    9741097          gen.fillValueF)
    975         ovar = newnc.variables['tilt']
     1098        newnc.renameVariable('tilt', 'xtilt')
     1099        newnc.sync()
     1100        ovar = newnc.variables['xtilt']
    9761101        stdn = ovar.getncattr('standard_name')
    9771102        ovar.setncattr('standard_name', 'thetax'+stdn)
     
    9841109        ncvar.insert_variable(ncobj, 'tilt', diag8, diagoutd, diagoutvd, newnc,      \
    9851110          gen.fillValueF)
    986         ovar = newnc.variables['tilt']
     1111        newnc.renameVariable('tilt', 'ytilt')
     1112        newnc.sync()
     1113        ovar = newnc.variables['ytilt']
    9871114        stdn = ovar.getncattr('standard_name')
    9881115        ovar.setncattr('standard_name', 'thetay'+stdn)
     
    9951122        ncvar.insert_variable(ncobj, 'div', diag9, diagoutd, diagoutvd, newnc,       \
    9961123          gen.fillValueF)
    997         ovar = newnc.variables['div']
     1124        newnc.renameVariable('div', 'zdiv')
     1125        newnc.sync()
     1126        ovar = newnc.variables['zdiv']
    9981127        stdn = ovar.getncattr('standard_name')
    9991128        ovar.setncattr('standard_name', 'thetaz'+stdn)
     
    10071136        newvar = newnc.createVariable('e', 'i', ('e'))
    10081137        newvar[:] = range(3)
    1009         ncvar.newvar.basicvardef(newvar, 'component', 'axis component: x, y, z', '-')
     1138        ncvar.basicvardef(newvar, 'component', 'axis component: x, y, z', '-')
    10101139        newnc.sync()
    10111140
Note: See TracChangeset for help on using the changeset viewer.