Changeset 2290 in lmdz_wrf for trunk


Ignore:
Timestamp:
Jan 25, 2019, 8:31:56 PM (7 years ago)
Author:
lfita
Message:

Getting there !

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r2287 r2290  
    2753627536    getvarybndst = getvarbndsy.transpose()
    2753727537
    27538     Ngridsint, gridsint, percenst = fsci.module_scientific.spacepercen(              \
     27538    Ngridsint, gridsint, areast, percenst = fsci.module_scientific.spacepercen(      \
    2753927539      xcavals=reflont, ycavals=reflatt, xbavals=refvarxbndst, ybavals=refvarybndst,  \
    2754027540      xcbvals=getlont, ycbvals=getlatt, xbbvals=getvarxbndst, ybbvals=getvarybndst,  \
    27541       strict=strict, dxa=refdx, dya=refdy, navertexmax=refmaxvert,                   \
    27542       dxb=getdx, dyb=getdy, dxyb=getdx*getdy, nbvertexmax=getmaxvert)
     27541      strict=strict, dxa=refdx, dya=refdy, navertexmax=refmaxvert, dxb=getdx,        \
     27542      dyb=getdy, dxyb=getdx*getdy, nbvertexmax=getmaxvert)
    2754327543
    2754427544    Ngridsin = Ngridsint.transpose()
    2754527545    gridsin = gridsint.transpose()
     27546    percens = areast.transpose()
    2754627547    percens = percenst.transpose()
    2754727548
     
    2789327894            else: slcvarnS = slcvarnS + ', ' + varn
    2789427895
     27896        for dimn in rmdims:
     27897            if not gen.searchInlist(onewnc.dimensions, dimn):
     27898                newdim = onewnc.createDimension(dimn, len(onc.dimensions[dimn]))
     27899
     27900        newvar = onewnc.createVariable(varn, 'f', (rmdims))
     27901        newvar[:] = varv[:]
     27902        basicvardef(newvar, varn, 'variable ' + varn + ' used to slice', vu)
     27903        onewnc.sync()
     27904
    2789527905        # dimensions
    2789627906        newdim = onewnc.createDimension('slice_'+varn, Nslices)
     
    2790327913        newvar[:] = slcvalsc[:]
    2790427914        basicvardef(newvar, 'slice_'+varn, 'slices for variable ' + varn, vu)
     27915        newattr = set_attribute(newvar, 'bounds', 'slice_'+varn+'_bnds')
    2790527916        onewnc.sync()
    2790627917
     
    2791627927        slcv = np.zeros(tuple(slcshape), dtype=int)
    2791727928        for islc in range(Nslices):
    27918             vvslc = ~slcvar[islc,]
     27929            vvslc =~slcvar[islc,]
    2791927930            slcv[islc,] = np.where(vvslc, 1, 0)
    2792027931        newvar = onewnc.createVariable(varn+'sliced', 'i', tuple(slcdims))
     
    2792727938    vardimbndslice = {}
    2792827939
    27929     print 'Lluis slcvarns:', slcvarns
    2793027940    newslcvarns = []
    2793127941    for varn in slcvarns:
     
    2794527955            rmshape = list(ovar.shape)
    2794627956
     27957        varfinaldims = rmdims + []
    2794727958        dimbnds = []
    2794827959        for dn in rmdims:
     
    2818328194                getvarybndst = ydimvarbnds2D.transpose()
    2818428195
    28185                 Ngridsint, gridsint, percenst =                                      \
    28186                   fsci.module_scientific.spacepercen(xcavals=reflont,                \
     28196                Ngridsint, gridsint, areast, percenst =                              \
     28197                  fsci.module_scientific.grid_spacepercen(xcavals=reflont,           \
    2818728198                  ycavals=reflatt, xbavals=refvarxbndst, ybavals=refvarybndst,       \
    2818828199                  xcbvals=getlont, ycbvals=getlatt, xbbvals=getvarxbndst,            \
     
    2819328204                Ngridsin = Ngridsint.transpose()
    2819428205                gridsin = gridsint.transpose()
     28206                areas = areast.transpose()
    2819528207                percens = percenst.transpose()
    2819628208
    2819728209                Ngridsinmax = np.max(Ngridsin)
    2819828210        else:
     28211            dn = varn + ''
    2819928212            # Here is only done by 1D variables !!!
    2820028213            print infmsg
     
    2821428227
    2821528228            Ngridsinmax = np.max(Ngridsin)
     28229
    2821628230            gridsin = np.zeros((2,Ngridsinmax,1,Nslices), dtype=int)
     28231            areas = np.zeros((Ngridsmax,1,Nslices), dtype=np.float)
    2821728232            percens = np.zeros((Ngridsinmax,1,Nslices), dtype=np.float)
    2821828233            for islc in range(Nslices):
     
    2824928264                    percens[0:Ngridsin[0,islc],0,islc] = 1.
    2825028265
    28251         # Let's avoid memory issues...
    28252         newslcvarns.append(dn)
    28253         lvalues = [Ngridsin, gridsin, percens]
    28254         vardimbndslice[dn] = lvalues
     28266                onewnc.sync()
     28267
     28268        if not gen.searchInlist(newslcvarns,dn):
     28269            # Let's avoid memory issues...
     28270            newslcvarns.append(dn)
     28271            lvalues = [Ngridsin, gridsin, percens]
     28272            vardimbndslice[dn] = lvalues
     28273
    2825528274        if not onewnc.variables.has_key(dn+'gridin'):
    2825628275
     
    2828328302            newvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
    2828428303   
    28285             innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid))
     28304            innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid),        \
     28305              fill_value=gen.fillValueI)
    2828628306            basicvardef(innewvar, dn+'gridin', "coordinates of the grids " +         \
    2828728307              "cells from .get. laying within .ref.",'-')
    2828828308            innewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
    28289        
    28290             pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid))
     28309
     28310            anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(varfinaldims))
     28311            basicvardef(anewvar ,dn+'gridarea', "area of the grids cells from " +    \
     28312             ".get.", vu)
     28313            anewvar.setncattr('coordinates',' '.join(varfinaldims[::-1]))
     28314            anewvar[:] = areas[:]
     28315
     28316            pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),       \
     28317              fill_value=gen.fillValueF)
    2829128318            basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " +            \
    2829228319             "grids cells from .get. laying within .ref.", '1')
     
    2830728334   
    2830828335            onewnc.sync()
     28336
     28337    # Getting full slice
     28338    # NOTE: for simplicity let's assume that there is only one slice with bounds !!
     28339    # Otherwise we need to re-calculate the polygons taking the outcome from each
     28340    #   slice
     28341    print 'joining slices of:', newslcvarns
     28342
     28343    Nnewslcs = len(newslcvarns)
     28344
     28345    dn = newslcvarns[0] + '_' + newslcvarns[1]
     28346   
     28347    osliceNA = onewnc.variables[newslcvarns[0] + 'Ngrid']
     28348    osliceinA = onewnc.variables[newslcvarns[0] + 'gridin']
     28349    osliceaA = onewnc.variables[newslcvarns[0] + 'gridarea']
     28350    oslicepA = onewnc.variables[newslcvarns[0] + 'gridpercen']
     28351    osliceNB = onewnc.variables[newslcvarns[1] + 'Ngrid']
     28352    osliceinB = onewnc.variables[newslcvarns[1] + 'gridin']
     28353    osliceaB = onewnc.variables[newslcvarns[1] + 'gridarea']
     28354    oslicepB = onewnc.variables[newslcvarns[1] + 'gridpercen']
     28355
     28356    sliceNA = osliceNA[:]
     28357    sliceinA = osliceinA[:]
     28358    sliceNB = osliceNB[:]
     28359    sliceinB = osliceinB[:]
     28360
     28361    dxA = osliceNA.shape[1]
     28362    dyA = osliceNA.shape[0]
     28363    dxyA = osliceinA.shape[1]
     28364    dxB = osliceNB.shape[1]
     28365    dyB = osliceNB.shape[0]
     28366    dxyB = osliceinB.shape[1]
     28367
     28368    Srgrid = list(osliceNA.dimensions) + list(osliceNB.dimensions)
     28369    Sigrid = ['coord', dn+'gridin'] + Srgrid
     28370    Spgrid = [dn+'gridin'] + Srgrid
     28371
     28372    sliceNAt = sliceNA.transpose()
     28373    sliceinAt = sliceinA.transpose()
     28374    sliceNBt = sliceNB.transpose()
     28375    sliceinBt = sliceinB.transpose()
     28376
     28377    NpointsABt, pointsABt, inpA, inpB = fsci.module_scientific.coincident_gridsin2d( \
     28378      npointsa=sliceNAt, pointsa=sliceinAt, npointsb=sliceNBt, pointsb=sliceinBt,    \
     28379      dxa=dxA, dya=dyA, dxya=dxyA, dxb=dxB, dyb=dyB, dxyb=dxyB)
     28380    NpointsAB = NpointsABt.transpose()
     28381    pointsAB = pointsABt.transpose()
     28382    inpointsA = inpA.transpose()
     28383    inpointsB = inpB.transpose()
     28384
     28385    print "  Joined slice '" + newslcvarns[0] + "' & '" + newslcvarns[1] + "':",     \
     28386      NpointsAB.shape
     28387    quit(-1)
     28388
     28389    maxNpointsAB = np.max(NpointsAB)
     28390
     28391    if not gen.searchInlist(onewnc.dimensions, dn+'gridin'):
     28392        newdim = onewnc.createDimension(dn+'gridin', maxNpointsAB)
     28393
     28394    newvar = onewnc.createVariable(dn+'Ngrid','i', tuple(Srgrid))
     28395    newvar[:] = NpointsAB[:]
     28396    basicvardef(newvar, dn+'Ngrid', "number of grids cells from slice " +            \
     28397      newslcvarns[0] + " laying within slice " + newslcvarns[1], '-')
     28398    newvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28399   
     28400    innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid),                \
     28401      fill_value=gen.fillValueI)
     28402    basicvardef(innewvar, dn+'gridin', "coordinates of the grids cells from slice "+ \
     28403      newslcvarns[0] + " laying within slice " + newslcvarns[1],'-')
     28404    innewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28405
     28406    anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid),                 \
     28407      fill_value=gen.fillValueF)
     28408    basicvardef(anewvar ,dn+'gridarea', "area of the join slice " + newslcvarns[0] + \
     28409      " & " + newslcvarns[1], vu)
     28410    anewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28411
     28412    pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),               \
     28413      fill_value=gen.fillValueF)
     28414    basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " +                    \
     28415      "grids cells from .get. laying within .ref.", '1')
     28416    pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
     28417
     28418    for jA in range(dyA):
     28419        for iA in range(dxA):
     28420            for jB in range(dyB):
     28421                for iB in range(dxB):
     28422                    Nin = NpointsAB[jB,iB,jA,iA]
     28423                    innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA]
     28424                    print Nin, 'Lluis shapes sliceaA:', osliceaA.shape, 'sliceaB:', osliceaB.shape
     28425                    for iv in range(Nin):
     28426                        pA = oslicepA[inpA[jA,iA,iv],jA,iA]
     28427                        pB = oslicepB[inpB[jB,iB,iv],jB,iB]
     28428                        pnewvar[iv,jB,iB,jA,iA]= pA*pB
     28429                        ixA = sliceinA[0,inpA[jA,iA,iv],jA,iA]
     28430                        iyA = sliceinA[1,inpA[jA,iA,iv],jA,iA]
     28431                        print '  A:', ixA, iyA
     28432                        aA = osliceaA[ixA,iyA]
     28433                        ixB = sliceinB[0,inpB[jB,iB,iv],jB,iB]
     28434                        iyB = sliceinB[1,inpB[jB,iB,iv],jB,iB]
     28435                        print '  B:', ixB, iyB
     28436                        aB = osliceaB[ixB,iyB]
     28437                        anewvar[jB,iB,jA,iA]= aA*aB
     28438
     28439    onewnc.sync()
     28440
     28441    for islc in range(2,Nnewslcs):
     28442        dn = dn + '_' + newslcvarns[iscl+1]
     28443        osliceNA = onewnc.variables[newslcvarns[0] + 'Ngrid']
     28444        osliceinA = onewnc.variables[newslcvarns[0] + 'gridin']
     28445        osliceaA = onewnc.variables[newslcvarns[0] + 'gridarea']
     28446        oslicepA = onewnc.variables[newslcvarns[0] + 'gridpercen']
     28447        osliceNB = onewnc.variables[newslcvarns[1] + 'Ngrid']
     28448        osliceinB = onewnc.variables[newslcvarns[1] + 'gridin']
     28449        osliceaB = onewnc.variables[newslcvarns[1] + 'gridarea']
     28450        oslicepB = onewnc.variables[newslcvarns[1] + 'gridpercen']
     28451
     28452        sliceNA = osliceNA[:]
     28453        sliceinA = osliceinA[:]
     28454        sliceNB = osliceNB[:]
     28455        sliceinB = osliceinB[:]
     28456
     28457        dxA = osliceNA.shape[1]
     28458        dyA = osliceNA.shape[0]
     28459        dxyA = osliceinA.shape[1]
     28460        dxB = osliceNB.shape[1]
     28461        dyB = osliceNB.shape[0]
     28462        dxyB = osliceinB.shape[1]
     28463
     28464        Srgrid = list(osliceNA.dimensions) + list(osliceNB.dimensions)
     28465        Sigrid = ['coord', dn+'gridin'] + Srgrid
     28466        Spgrid = [dn+'gridin'] + Srgrid
     28467
     28468        sliceNAt = sliceNA.transpose()
     28469        sliceinAt = sliceinA.transpose()
     28470        sliceNBt = sliceNB.transpose()
     28471        sliceinBt = sliceinB.transpose()
     28472
     28473        NpointsABt, pointsABt, inpA, inpB = fsci.module_scientific.coincident_gridsin2d( \
     28474          npointsa=sliceNAt, pointsa=sliceinAt, npointsb=sliceNBt, pointsb=sliceinBt,    \
     28475          dxa=dxA, dya=dyA, dxya=dxyA, dxb=dxB, dyb=dyB, dxyb=dxyB)
     28476        NpointsAB = NpointsABt.transpose()
     28477        pointsAB = pointsABt.transpose()
     28478        inpointsA = inpA.transpose()
     28479        inpointsB = inpB.transpose()
     28480
     28481        maxNpointsAB = np.max(NpointsAB)
     28482
     28483        if not gen.searchInlist(onewnc.dimensions, dn+'gridin'):
     28484            newdim = onewnc.createDimension(dn+'gridin', maxNpointsAB)
     28485   
     28486        newvar = onewnc.createVariable(dn+'Ngrid','i', tuple(Srgrid))
     28487        newvar[:] = NpointsAB[:]
     28488        basicvardef(newvar, dn+'Ngrid', "number of grids cells from slice " +            \
     28489          newslcvarns[0] + " laying within slice " + newslcvarns[1], '-')
     28490        newvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28491   
     28492        innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid),                \
     28493          fill_value=gen.fillValueI)
     28494        basicvardef(innewvar, dn+'gridin', "coordinates of the grids cells from slice "+ \
     28495          newslcvarns[0] + " laying within slice " + newslcvarns[1],'-')
     28496        innewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28497
     28498        anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid),                 \
     28499          fill_value=gen.fillValueF)
     28500        basicvardef(anewvar ,dn+'gridarea', "area of the join slice " + newslcvarns[0] + \
     28501          " & " + newslcvarns[1], vu)
     28502        anewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28503
     28504        pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),               \
     28505          fill_value=gen.fillValueF)
     28506        basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " +                    \
     28507          "grids cells from .get. laying within .ref.", '1')
     28508        pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
     28509
     28510        for jA in range(dyA):
     28511            for iA in range(dxA):
     28512                for jB in range(dyB):
     28513                    for iB in range(dxB):
     28514                        Nin = NpointsAB[jB,iB,jA,iA]
     28515                        innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA]
     28516                        for iv in range(Nin):
     28517                            pA = oslicepA[inpA[iv],jA,iA]
     28518                            pB = oslicepB[inpB[iv],jB,iB]
     28519                            pnewvar[iv,jB,iB,jA,iA]= pA*pB
     28520                            aA = osliceaA[inpA[iv],jA,iA]
     28521                            aB = osliceaB[inpB[iv],jB,iB]
     28522                            anewvar[iv,jB,iB,jA,iA]= aA*aB
     28523
     28524        onewnc.sync()
    2830928525
    2831028526    slcvarns = slcvarns + newslcvarns
Note: See TracChangeset for help on using the changeset viewer.