Changeset 2296 in lmdz_wrf for trunk


Ignore:
Timestamp:
Jan 29, 2019, 3:34:56 PM (6 years ago)
Author:
lfita
Message:

Getting the right join !! There is a matrix displacement issue which I can't solve...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r2295 r2296  
    2754427544    Ngridsin = Ngridsint.transpose()
    2754527545    gridsin = gridsint.transpose()
    27546     percens = areast.transpose()
     27546    areas = areast.transpose()
    2754727547    percens = percenst.transpose()
    2754827548
     
    2828928289
    2829028290            gridsin = np.zeros((2,Ngridsinmax,1,Nslices), dtype=int)
    28291             areas = np.ones(tuple(varfinalshape), dtype=np.float)
     28291            areas = np.ones(tuple(varfinalshape), dtype=np.float)*gen.fillValueF
    2829228292            percens = np.zeros((Ngridsinmax,1,Nslices), dtype=np.float)
    2829328293           
     
    2832728327                    gridsin[1,0:Nt,0,islc] = ainds[1,0:Nt]
    2832828328                    percens[0:Nt,0,islc] = 1.
    28329 
    28330                 # Values for file
    28331                 dxref = Nslices
    28332                 dyref = 1
    28333                 dxget = 1
    28334                 dyget = 1
    28335 
    28336                 dref = ['fake', dn]
    28337                 sref = [1, Nslices]
    28338                 dget = ['fake']
    28339                 sget = [1]
    28340                 if not gen.searchInlist(onewnc.dimensions, 'fake'):
    28341                     newdim = onewnc.createDimension('fake',1)
    28342                     newdim = onewnc.createDimension('slice_fake',1)
    28343                     newdim = onewnc.createDimension('fakebnds',4)
    28344                     newvar = onewnc.createVariable('fake','f',('fake'))
    28345                     newvar[:] = [0.]
    28346                     basicvardef(newvar, 'fake', 'fake variable for transforming ' +  \
    28347                       '1D variable without bounds', '-')
    28348                     newvar = onewnc.createVariable('slice_fake','f',('slice_fake'))
    28349                     newvar[:] = [0.]
    28350                     basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\
    28351                       'for transforming variable without bounds', '-')
    28352                     newvar = onewnc.createVariable('slice_fake_bnds','f',            \
    28353                       ('fakebnds','fake'))
    28354                     fakebnds = np.zeros((4,1), dtype=np.float)
    28355                     fakebnds[0,0] = -1
    28356                     fakebnds[1,0] = 1
    28357                     fakebnds[2,0] = 1
    28358                     fakebnds[3,0] = -1
    28359                     newvar[:] = fakebnds
    28360                     basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\
    28361                       'for transforming variable without bounds', '-')
    28362                     onewnc.sync()
     28329                    for iv in range(Nt):
     28330                        i = ainds[0,iv]
     28331                        j = ainds[1,iv]
     28332                        areas[j,i] = 1.
     28333
     28334            # Values for file
     28335            dxref = Nslices
     28336            dyref = 1
     28337            dxget = 1
     28338            dyget = 1
     28339
     28340            dref = ['fake', dn]
     28341            sref = [1, Nslices]
     28342            dget = ['fake']
     28343            sget = [1]
     28344            if not gen.searchInlist(onewnc.dimensions, 'fake'):
     28345                newdim = onewnc.createDimension('fake',1)
     28346                newdim = onewnc.createDimension('slice_fake',1)
     28347                newdim = onewnc.createDimension('fakebnds',4)
     28348                newvar = onewnc.createVariable('fake','f',('fake'))
     28349                newvar[:] = [0.]
     28350                basicvardef(newvar, 'fake', 'fake variable for transforming ' +  \
     28351                  '1D variable without bounds', '-')
     28352                newvar = onewnc.createVariable('slice_fake','f',('slice_fake'))
     28353                newvar[:] = [0.]
     28354                basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\
     28355                  'for transforming variable without bounds', '-')
     28356                newvar = onewnc.createVariable('slice_fake_bnds','f',            \
     28357                  ('fakebnds','fake'))
     28358                fakebnds = np.zeros((4,1), dtype=np.float)
     28359                fakebnds[0,0] = -1
     28360                fakebnds[1,0] = 1
     28361                fakebnds[2,0] = 1
     28362                fakebnds[3,0] = -1
     28363                newvar[:] = fakebnds
     28364                basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\
     28365                  'for transforming variable without bounds', '-')
     28366                onewnc.sync()
    2836328367
    2836428368        if not gen.searchInlist(newslcvarns,dn):
     
    2839528399            newvar[:] = Ngridsin[:]
    2839628400            basicvardef(newvar, dn+'Ngrid', "number of grids cells from " +          \
    28397               ".get. laying within .ref.", '-')
     28401              dn + " laying within slice", '-')
    2839828402            newvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
    2839928403   
     
    2840128405              fill_value=gen.fillValueI)
    2840228406            basicvardef(innewvar, dn+'gridin', "coordinates of the grids " +         \
    28403               "cells from .get. laying within .ref.",'-')
     28407              "cells from " + dn + " laying within slice",'-')
    2840428408            innewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
    2840528409
    28406             anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(varfinaldims))
     28410            anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(varfinaldims),   \
     28411              fill_value = gen.fillValueF)
    2840728412            basicvardef(anewvar ,dn+'gridarea', "area of the grids cells from " +    \
    28408              ".get.", vu)
     28413             dn, vu)
    2840928414            anewvar.setncattr('coordinates',' '.join(varfinaldims[::-1]))
    2841028415            anewvar[:] = areas[:]
     
    2841828423              fill_value=gen.fillValueF)
    2841928424            basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " +            \
    28420              "grids cells from .get. laying within .ref.", '1')
     28425             "grids cells from " + dn + " laying within slice", '1')
    2842128426            pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
     28427            onewnc.sync()
    2842228428
    2842328429            if len(dv.shape) == 1:
     
    2844528451                        #apolygon[2,1] = refblat1D[j,0]
    2844628452                        #apolygon[3,1] = refblat1D[j,0]
    28447                         #ap = np.abs(fsci.module_scientific.shoelace_area_polygon(nvertex=4, poly=apolygon))
     28453                        #ap = np.abs(fsci.module_scientific.shoelace_area_polygon(   \
     28454                        #  nvertex=4, poly=apolygon))
    2844828455                        innewvar[:,0:Ngridsin[j,i],j,i] =                            \
    2844928456                          gridsin[:,0:Ngridsin[j,i],j,i]
     
    2845828465                            apolygon[:,1] = ydimvarbnds2D[:,iy,ix]
    2845928466                            ag = np.abs(fsci.module_scientific.shoelace_area_polygon(nvertex=4, poly=apolygon))
    28460                             if varn == 'HGT':
    28461                                 print 'Lluis ref dy:', dyref, 'dx:', dxref
    28462                                 print '  lluis iv:', iv, ':', iy, ix, '<>', apolygon[1:3,0],'x',apolygon[2:4,1],'ag:', ag, 'areas:', areas[iy,ix], 'percens:', percens[iv,j,i]
    2846328467                            slicearea = slicearea + ag*percens[iv,j,i]
    2846428468                            aa = aa + areas[iy,ix]
    2846528469                            pp = pp + percens[iv,j,i]
    2846628470                        aanewvar[j,i]= slicearea
    28467                         #print '  areas Lluis =', refblon1D[i,:], 'x', refblat1D[j,:], \
    28468                         #  'j i:', j,i, 'ap', ap, 'aanewvar:', slicearea, 'aa:', aa, 'pp:', pp
    28469                         if varn == 'HGT':
    28470                             print '  areas Lluis =', refblon1D[i,:], 'x', refblat1D[j,:], \
    28471                               'j i:', j,i, 'aanewvar:', slicearea, 'aa:', aa, 'pp:', pp
     28471                        # This should be true for the regular lon/lat projections
    2847228472                        #if slicearea > ap: quit()
    2847328473
    2847428474            onewnc.sync()
    2847528475
     28476    onewnc.sync()
    2847628477    # Getting full slice
    2847728478    # NOTE: for simplicity let's assume that there is only one slice with bounds !!
     
    2849528496    sliceNA = osliceNA[:]
    2849628497    sliceinA = osliceinA[:]
     28498    sliceaA = osliceaA[:]
    2849728499    sliceNB = osliceNB[:]
    2849828500    sliceinB = osliceinB[:]
     28501    sliceaB = osliceaB[:]
    2849928502
    2850028503    dxA = osliceNA.shape[1]
     
    2852328526
    2852428527    # Remembering that it is python (C-like...)
     28528    iA = 1
     28529    jA = 4
     28530    iB = 0
     28531    jB = 0
    2852528532    inpointsA = inpointsA-1
    2852628533    inpointsB = inpointsB-1
     
    2854528552    innewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
    2854628553
     28554    aanewvar = onewnc.createVariable(dn+'area','f',tuple(Srgrid),                    \
     28555      fill_value=gen.fillValueF)
     28556    basicvardef(aanewvar ,dn+'area', "area of the join slice " + newslcvarns[0] +    \
     28557      " & " + newslcvarns[1], vu)
     28558    aanewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28559
    2854728560    anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid),                 \
    2854828561      fill_value=gen.fillValueF)
     
    2855128564    anewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
    2855228565
    28553     print 'Lluis Spgrid:', Spgrid
    2855428566    pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),               \
    2855528567      fill_value=gen.fillValueF)
    2855628568    basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " +                    \
    28557       "grids cells from .get. laying within .ref.", '1')
     28569      "grids cells from " + newslcvarns[0] + " laying within " + newslcvarns[1], '1')
    2855828570    pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1]))
    2855928571
     
    2856428576                    Nin = NpointsAB[jB,iB,jA,iA]
    2856528577                    innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA]
     28578                    slicearea = 0.
    2856628579                    for iv in range(Nin):
    2856728580                        pA = oslicepA[inpointsA[iv,jA,iA],jA,iA]
     
    2857428587                        iyB = sliceinB[0,inpointsB[iv,jB,iB],jB,iB]
    2857528588                        aB = osliceaB[iyB,ixB]
    28576                         anewvar[jB,iB,jA,iA]= (aA*pA)*(aB*pB)
     28589                        # I do not understand why this is needed !!
     28590                        if aA != gen.mamat[1] and aB != gen.mamat[1]:
     28591                            anewvar[jB,iB,jA,iA]= (aA*pA)*(aB*pB)
     28592                            slicearea = slicearea + (aA*pA)*(aB*pB)
     28593                        aanewvar[jB,iB,jA,iA]= slicearea
    2857728594
    2857828595    onewnc.sync()
Note: See TracChangeset for help on using the changeset viewer.