Changeset 1835 in lmdz_wrf for trunk/tools/nc_var_tools.py


Ignore:
Timestamp:
Mar 21, 2018, 12:52:34 PM (7 years ago)
Author:
lfita
Message:

Working version of pinterp ready for 'heavy' matrices

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r1834 r1835  
    1847018470                yend = iyy + dimyfrac
    1847118471                Ndy = len(range(yini,yend))
     18472                #Slice tuple
     18473                tslc = tuple([slice(tini,tend), slice(0,dimz), slice(yini,yend),     \
     18474                  slice(0,dimx)])
     18475                tslcx1 = tuple([slice(tini,tend), slice(0,dimz), slice(yini,yend),   \
     18476                  slice(1,dimx+1)])
     18477                tslcy1= tuple([slice(tini,tend), slice(0,dimz), slice(yini+1,yend+1),\
     18478                  slice(0,dimx)])
    1847218479
    1847318480                if gen.searchInlist(notCHK, vn):
    1847418481                    if vn == 'WRFght':
    18475                         varin = geop[tini:tend,:,yini:yend,:]
     18482                        varin = geop[tslc]
    1847618483                        isgeop = True
    1847718484                        varattrs = gen.variables_values('WRFght')
     
    1848218489                    elif vn == 'WRFhus':
    1848318490                        # specific humidity
    18484                         varin = qv[tini:tend,:,yini:yend,:]/(1.+qv[tini:tend,:,yini:yend,:])
     18491                        varin = qv[tslc]/(1.+qv[tslc])
    1848518492                        isgeop = False
    1848618493                        varattrs = gen.variables_values('WRFhus')
     
    1849018497                        newvarattr['units'] = varattrs[5]
    1849118498                    elif vn == 'WRFt':
    18492                         varin = temp[tini:tend,:,yini:yend,:]
     18499                        varin = temp[tlsc]
    1849318500                        isgeop = False
    1849418501                        varattrs = gen.variables_values('WRFt')
     
    1850118508                        print infmsg
    1850218509                        print '  ' + fname + ': De-staggering x-wind variable !!'
    18503                         print '    from:', ovarin.shape, 'to', (dimt, dimz, dimy, dimx)
     18510                        print '    from:',ovarin[tini:tend,:,yini:yend,0:dimx].shape,\
     18511                          'to', (Ndt,dimz,Ndy,dimx)
    1850418512                        if isFR64:
    18505                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     18513                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1850618514                        else:
    18507                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
    18508                         varin[tini:tend,:,yini:yend,:] =                             \
    18509                           0.5*(ovarin[tini:tend,:,yini:yend,0:dimx] +                \
    18510                           ovarin[tini:tend,:,yini:yend,1:dimx+1])
     18515                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
     18516                        varin[:] = 0.5*(ovarin[tslc] + ovarin[tslcx1])
    1851118517
    1851218518                        # Not pro, but less memory problems!
     
    1853918545                        # Not pro, but less memory problems!
    1854018546                        for it in range(tini,tend):
    18541                             varin0[it,:,yini:yend,:] =                               \
    18542                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     18547                            varin0[it-tini,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1854318548                              ovarin[it,:,yini:yend,1:dimx+1])
    18544                             varin02[it,:,yini:yend,:] =                              \
    18545                               0.5*(ovarin2[it,:,yini:yend,:] +                       \
     18549                            varin02[it-tini,:,:,:] = 0.5*(ovarin2[it,:,yini:yend,:]+ \
    1854618550                              ovarin2[it,:,yini+1:yend+1,:])
    1854718551                        for iz in range(dimz):
    18548                             varin[tini:tend,iz,yini:yend,:] =                        \
    18549                               varin0[tini:tend,iz,yini:yend,:]*                      \
     18552                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1855018553                              ocosa[tini:tend,yini:yend,:] -                         \
    1855118554                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1856318566                        print '    from:', ovarin.shape, 'to', (dimt,dimz,dimy,dimx)
    1856418567                        if isFR64:
    18565                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     18568                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1856618569                        else:
    18567                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
     18570                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
    1856818571                        # Not pro, but less memory problems!
    1856918572                        for it in range(tini,tend):
    18570                             varin[it,:,yini:yend,:] = 0.5*(ovarin[it,:,yini:yend,:]+ \
     18573                            varin[it-tini,:,:,:] = 0.5*(ovarin[it,:,yini:yend,:] +  \
    1857118574                              ovarin[it,:,yini+1:yend+1,:])
    1857218575                        isgeop = False
     
    1859618599                        # Not pro, but less memory problems!
    1859718600                        for it in range(tini,tend):
    18598                             varin0[it,:,yini:yend,:] =                               \
    18599                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     18601                            varin0[it-tini,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1860018602                              ovarin[it,:,yini:yend,1:dimx+1])
    18601                             varin02[it,:,yini:yend,:] =                              \
    18602                               0.5*(ovarin2[it,:,yini:yend,:] +                       \
     18603                            varin02[it-tini,:,:,:] = 0.5*(ovarin2[it,:,yini:yend,:]+ \
    1860318604                              ovarin2[it,:,yini+1:yend+1,:])
    1860418605                        for iz in range(dimz):
    18605                             varin[tini:tend,iz,yini:yend,:] =                        \
    18606                               varin0[tini:tend,iz,yini:yend,:]*                      \
     18606                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1860718607                              osina[tini:tend,yini:yend,:] +                         \
    1860818608                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1862518625                        # Not pro, but less memory problems!
    1862618626                        for it in range(tini,tend):
    18627                             varin[it,:,yini:yend,:] =                                \
    18628                               0.5*(ovarin[it,0:dimz,yini:yend,:] +                   \
     18627                            varin[it-tini,:,:,:]=0.5*(ovarin[it,0:dimz,yini:yend,:]+ \
    1862918628                              ovarin[it,1:dimz+1,yini:yend,:])
    1863018629                        isgeop = False
     
    1863518634                        newvarattr['units'] = varattrs[5]
    1863618635                    elif vn == 'pres':
    18637                         varin = pres[tini:tend,:,yini:yend,:]
     18636                        varin = pres[tslc]
    1863818637                        isgeop = False
    1863918638                        varattrs = gen.variables_values('pres')
     
    1864618645                    ovarin = onc.variables[vn]
    1864718646                    varinf = variable_inf(ovarin)
    18648                     varin = ovarin[tini:tend,:,yini:yend,:]
     18647                    varin = ovarin[tslc]
    1864918648                    # de-staggering
    1865018649                    #print '  Lluis:', ovarin.dimensions,'unsDIM',  unstaggerDIM, 'CFdim:', CFdimvs
     
    1866818667                          fill_value=gen.fillValueF)
    1866918668                    varint = varin.transpose()
    18670                     prest = pres[tini:tend,:,yini:yend,:].transpose()
     18669                    prest = pres[tslc].transpose()
    1867118670                    psfct = psfc[tini:tend,yini:yend,:].transpose()
    1867218671                    hgtt = hgt[yini:yend,:].transpose()
    18673                     tempt = temp[tini:tend,:,yini:yend,:].transpose()
    18674                     qvt = qv[tini:tend,:,yini:yend,:].transpose()
     18672                    tempt = temp[tslc].transpose()
     18673                    qvt = qv[tslc].transpose()
    1867518674                    varinterp = fin.module_forinterpolate.interp( data_in=varint,    \
    1867618675                      pres_field=prest, interp_levels=interplevs, psfc=psfct,        \
     
    1872218721                        print '    from:', ovarin.shape, 'to', (dimt, dimz, dimy, dimx)
    1872318722                        if isFR64:
    18724                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     18723                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1872518724                        else:
    18726                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
    18727                         varin[tini:tend,:,yini:yend,:] =                             \
    18728                           0.5*(ovarin[tini:tend,:,yini:yend,0:dimx] +                \
     18725                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
     18726                        varin[:] = 0.5*(ovarin[tini:tend,:,yini:yend,0:dimx] +       \
    1872918727                          ovarin[tini:tend,:,yini:yend,1:dimx+1])
    1873018728
     
    1875818756                        # Not pro, but less memory problems!
    1875918757                        for it in range(tini,tend):
    18760                             varin0[it,:,yini:yend,:] =                               \
    18761                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     18758                            varin0[it-tend,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1876218759                              ovarin[it,:,yini:yend,1:dimx+1])
    1876318760                            varin02[it,:,yini:yend,:] =                              \
     
    1876518762                              ovarin2[it,:,yini+1:yend+1,:])
    1876618763                        for iz in range(dimz):
    18767                             varin[tini:tend,iz,yini:yend,:] =                        \
    18768                               varin0[tini:tend,iz,yini:yend,:]*                      \
     18764                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1876918765                              ocosa[tini:tend,yini:yend,:] -                         \
    1877018766                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1878218778                        print '    from:', ovarin.shape, 'to', (dimt,dimz,dimy,dimx)
    1878318779                        if isFR64:
    18784                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     18780                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1878518781                        else:
    18786                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
     18782                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
    1878718783                        # Not pro, but less memory problems!
    1878818784                        for it in range(tini,tend):
    18789                             varin[it,:,yini:yend,:] = 0.5*(ovarin[it,:,yini:yend,:]+ \
     18785                            varin[it-tini,:,:,:] = 0.5*(ovarin[it,:,yini:yend,:] +  \
    1879018786                              ovarin[it,:,yini+1:yend+1,:])
    1879118787                        isgeop = False
     
    1881518811                        # Not pro, but less memory problems!
    1881618812                        for it in range(tini,tend):
    18817                             varin0[it,:,yini:yend,:] =                               \
    18818                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     18813                            varin0[it-tini,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1881918814                              ovarin[it,:,yini:yend,1:dimx+1])
    18820                             varin02[it,:,yini:yend,:] =                              \
    18821                               0.5*(ovarin2[it,:,yini:yend,:] +                       \
     18815                            varin02[it-tini,:,:,:] = 0.5*(ovarin2[it,:,yini:yend,:]+ \
    1882218816                              ovarin2[it,:,yini+1:yend+1,:])
    1882318817                        for iz in range(dimz):
    18824                             varin[tini:tend,iz,yini:yend,:] =                        \
    18825                               varin0[tini:tend,iz,yini:yend,:]*                      \
     18818                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1882618819                              osina[tini:tend,yini:yend,:] +                         \
    1882718820                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1884418837                        # Not pro, but less memory problems!
    1884518838                        for it in range(tini,tend):
    18846                             varin[it,:,yini:yend,:] =                                \
    18847                               0.5*(ovarin[it,0:dimz,yini:yend,:] +                   \
     18839                            varin[it-tini,:,:,:]=0.5*(ovarin[it,0:dimz,yini:yend,:]+ \
    1884818840                              ovarin[it,1:dimz+1,yini:yend,:])
    1884918841                        isgeop = False
     
    1894218934                        print '    from:', ovarin.shape, 'to', (dimt, dimz, dimy, dimx)
    1894318935                        if isFR64:
    18944                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     18936                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1894518937                        else:
    18946                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
    18947                         varin[tini:tend,:,yini:yend,:] =                             \
    18948                           0.5*(ovarin[tini:tend,:,yini:yend,0:dimx] +                \
     18938                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
     18939                        varin[:] = 0.5*(ovarin[tini:tend,:,yini:yend,0:dimx] +       \
    1894918940                          ovarin[tini:tend,:,yini:yend,1:dimx+1])
    1895018941
     
    1897818969                        # Not pro, but less memory problems!
    1897918970                        for it in range(tini,tend):
    18980                             varin0[it,:,yini:yend,:] =                               \
    18981                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     18971                            varin0[it-tini,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1898218972                              ovarin[it,:,yini:yend,1:dimx+1])
    18983                             varin02[it,:,yini:yend,:] =                              \
    18984                               0.5*(ovarin2[it,:,yini:yend,:] +                       \
     18973                            varin02[it-tini,:,:,:] = 0.5*(ovarin2[it,:,yini:yend,:]+ \
    1898518974                              ovarin2[it,:,yini+1:yend+1,:])
    1898618975                        for iz in range(dimz):
    18987                             varin[tini:tend,iz,yini:yend,:] =                        \
    18988                               varin0[tini:tend,iz,yini:yend,:]*                      \
     18976                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1898918977                              ocosa[tini:tend,yini:yend,:] -                         \
    1899018978                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1900218990                        print '    from:', ovarin.shape, 'to', (dimt,dimz,dimy,dimx)
    1900318991                        if isFR64:
    19004                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     18992                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1900518993                        else:
    19006                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
     18994                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
    1900718995                        # Not pro, but less memory problems!
    1900818996                        for it in range(tini,tend):
    19009                             varin[it,:,yini:yend,:] = 0.5*(ovarin[it,:,yini:yend,:]+ \
     18997                            varin[it-tini,:,:,:] = 0.5*(ovarin[it,:,yini:yend,:] +  \
    1901018998                              ovarin[it,:,yini+1:yend+1,:])
    1901118999                        isgeop = False
     
    1903519023                        # Not pro, but less memory problems!
    1903619024                        for it in range(tini,tend):
    19037                             varin0[it,:,yini:yend,:] =                               \
    19038                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     19025                            varin0[it-tini,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1903919026                              ovarin[it,:,yini:yend,1:dimx+1])
    19040                             varin02[it,:,yini:yend,:] =                              \
    19041                               0.5*(ovarin2[it,:,yini:yend,:] +                       \
     19027                            varin02[it-tini,:,:,:] = 0.5*(ovarin2[it,:,yini:yend,:]+ \
    1904219028                              ovarin2[it,:,yini+1:yend+1,:])
    1904319029                        for iz in range(dimz):
    19044                             varin[tini:tend,iz,yini:yend,:] =                        \
    19045                               varin0[tini:tend,iz,yini:yend,:]*                      \
     19030                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1904619031                              osina[tini:tend,yini:yend,:] +                         \
    1904719032                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1906419049                        # Not pro, but less memory problems!
    1906519050                        for it in range(tini,tend):
    19066                             varin[it,:,yini:yend,:] =                                \
    19067                               0.5*(ovarin[it,0:dimz,yini:yend,:] +                   \
     19051                            varin[it-tini,:,:,:]=0.5*(ovarin[it,0:dimz,yini:yend,:]+ \
    1906819052                              ovarin[it,1:dimz+1,yini:yend,:])
    1906919053                        isgeop = False
     
    1915819142                        print '    from:', ovarin.shape, 'to', (dimt, dimz, dimy, dimx)
    1915919143                        if isFR64:
    19160                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     19144                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1916119145                        else:
    19162                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
    19163                         varin[tini:tend,:,yini:yend,:] =                             \
    19164                           0.5*(ovarin[tini:tend,:,yini:yend,0:dimx] +                \
     19146                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
     19147                        varin[:] = 0.5*(ovarin[tini:tend,:,yini:yend,0:dimx] +       \
    1916519148                          ovarin[tini:tend,:,yini:yend,1:dimx+1])
    1916619149
     
    1919419177                        # Not pro, but less memory problems!
    1919519178                        for it in range(tini,tend):
    19196                             varin0[it,:,yini:yend,:] =                               \
    19197                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     19179                            varin0[it-tini,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1919819180                              ovarin[it,:,yini:yend,1:dimx+1])
    19199                             varin02[it,:,yini:yend,:] =                              \
    19200                               0.5*(ovarin2[it,:,yini:yend,:] +                       \
     19181                            varin02[it-tini,:,:,:] = 0.5*(ovarin2[it,:,yini:yend,:]+ \
    1920119182                              ovarin2[it,:,yini+1:yend+1,:])
    1920219183                        for iz in range(dimz):
    19203                             varin[tini:tend,iz,yini:yend,:] =                        \
    19204                               varin0[tini:tend,iz,yini:yend,:]*                      \
     19184                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1920519185                              ocosa[tini:tend,yini:yend,:] -                         \
    1920619186                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1921819198                        print '    from:', ovarin.shape, 'to', (dimt,dimz,dimy,dimx)
    1921919199                        if isFR64:
    19220                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float64)
     19200                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float64)
    1922119201                        else:
    19222                             varin = np.zeros((Ndt, dimz, Ndy, dimx), dtype=np.float)
     19202                            varin = np.zeros((Ndt,dimz,Ndy,dimx), dtype=np.float)
    1922319203                        # Not pro, but less memory problems!
    1922419204                        for it in range(tini,tend):
    19225                             varin[it,:,yini:yend,:] = 0.5*(ovarin[it,:,yini:yend,:]+ \
     19205                            varin[it,:,:,:] = 0.5*(ovarin[it,:,yini:yend,:] +        \
    1922619206                              ovarin[it,:,yini+1:yend+1,:])
    1922719207                        isgeop = False
     
    1925119231                        # Not pro, but less memory problems!
    1925219232                        for it in range(tini,tend):
    19253                             varin0[it,:,yini:yend,:] =                               \
    19254                               0.5*(ovarin[it,:,yini:yend,0:dimx] +                   \
     19233                            varin0[it-tini,:,:,:]=0.5*(ovarin[it,:,yini:yend,0:dimx]+\
    1925519234                              ovarin[it,:,yini:yend,1:dimx+1])
    19256                             varin02[it,:,yini:yend,:] =                              \
    19257                               0.5*(ovarin2[it,:,yini:yend,:] +                       \
     19235                            varin02[it-tini,:,:,:] = 0.5*(ovarin2[it,:,yini:yend,:]+ \
    1925819236                              ovarin2[it,:,yini+1:yend+1,:])
    1925919237                        for iz in range(dimz):
    19260                             varin[tini:tend,iz,yini:yend,:] =                        \
    19261                               varin0[tini:tend,iz,yini:yend,:]*                      \
     19238                            varin[:,iz,:,:] = varin0[tini:tend,iz,yini:yend,:]*      \
    1926219239                              osina[tini:tend,yini:yend,:] +                         \
    1926319240                              varin02[tini:tend,iz,yini:yend,:]*                     \
     
    1928019257                        # Not pro, but less memory problems!
    1928119258                        for it in range(tini,tend):
    19282                             varin[it,:,yini:yend,:] =                                \
    19283                               0.5*(ovarin[it,0:dimz,yini:yend,:] +                   \
     19259                            varin[it-tini,:,:,:]=0.5*(ovarin[it,0:dimz,yini:yend,:]+ \
    1928419260                              ovarin[it,1:dimz+1,yini:yend,:])
    1928519261                        isgeop = False
Note: See TracChangeset for help on using the changeset viewer.