Changeset 2315 in lmdz_wrf for trunk/tools


Ignore:
Timestamp:
Feb 4, 2019, 11:40:15 PM (7 years ago)
Author:
lfita
Message:

Working on the triple slicing!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r2314 r2315  
    2889028890        dxyC = osliceinC.shape[1]
    2889128891   
    28892         Srgrid = list(osliceNB.dimensions) + list(osliceNAB.dimensions)
     28892        Srgrid = list(osliceNC.dimensions) + list(osliceNAB.dimensions)
    2889328893        Sigrid = ['coord', dn+'gridin'] + Srgrid
    2889428894        Spgrid = [dn+'gridin'] + Srgrid
     
    2889728897        pointsABC = np.zeros((2,dxyAB,dyC,dxC,dyB,dxB,dyA,dxA), dtype=int)
    2889828898        inpointsAB = np.zeros((dxyAB,dyC,dxC,dyB,dxB,dyA,dxA), dtype=int)
     28899        NpointsA = np.zeros((dyC,dxC,dyB,dxB,dyA,dxA), dtype=int)
     28900        NpointsB = np.zeros((dyC,dxC,dyB,dxB,dyA,dxA), dtype=int)
     28901        inpointsA = np.zeros((dxyAB,dyC,dxC,dyB,dxB,dyA,dxA), dtype=int)
     28902        inpointsB = np.zeros((dxyAB,dyC,dxC,dyB,dxB,dyA,dxA), dtype=int)
    2889928903        inpointsC = np.zeros((dxyAB,dyC,dxC,dyB,dxB,dyA,dxA), dtype=int)
    28900         print 'Lluis shapes sliceNAB:', sliceNAB.shape, 'sliceinAB:', sliceinAB.shape
    2890128904        # Following B-slices
    2890228905        for j in range(dyB):
     
    2890628909                sliceNBt = sliceNC.transpose()
    2890728910                sliceinBt = sliceinC.transpose()
    28908    
    28909                 print 'LLuis j i:', j,i, 'shapes sliceNAt:', sliceNAt.shape, 'sliceinAt:', sliceinAt.shape, \
    28910                   'sliceNBt:', sliceNBt.shape, 'sliceinBt:', sliceinBt.shape
    28911                 print '  A dx dy dxy:', dxA, dyA, dxyAB, 'B dx dy dxy:', dxC, dyC, dxyC
    2891228911                NpointsABt, pointsABt, inpA, inpB = fsci.module_scientific.coincident_gridsin2d( \
    2891328912                  npointsa=sliceNAt, pointsa=sliceinAt, npointsb=sliceNBt, pointsb=sliceinBt,    \
     
    2891828917                inpointsC[:,:,:,j,i,:,:] = inpB.transpose()
    2891928918
     28919                # Getting respective A & B
     28920                for jc in range(dyC):
     28921                    for ic in range(dxC):
     28922                        print jc, ic, 'Lluis shapes NpointsABt[jc,ic,:,:]', NpointsABt[jc,ic,:,:].shape, \
     28923                        'pointsABt[jc,ic,:,:]', NpointsABt[jc,ic,:,:].shape, 'sliceNAt', sliceNAt.shape, \
     28924                        'sliceinAt', sliceinAt.shape, 'A dx dy dxy:', dxA, dyA, dxyAB,                   \
     28925                        'B dx dy dxy:', dxA, dyA, dxA
     28926                       
     28927                        NptsAt, inptsAt, inpA, inpB = fsci.module_scientific.coincident_gridsin2d( \
     28928                          npointsa=NpointsABt[jc,ic,:,:], pointsa=pointsABt[jc,ic,:,:], npointsb=sliceNAt,\
     28929                          pointsb=sliceinAt, dxa=dxA, dya=dyA, dxya=dxyAB, dxb=dxA, dyb=dyA, dxyb=dxyA)
     28930                        NpointsA[jc,ic,j,i,:,:] = NptsAt.transpose()
     28931                        inpointsA[:,jc,ic,j,i,:,:] = inptsAt.transpose()
     28932
     28933                        NptsBt, inptsBt, inpA, inpB = fsci.module_scientific.coincident_gridsin2d( \
     28934                          npointsa=NpointsABt[jc,ic,:,:], pointsa=pointsABt[jc,ic,:,:], npointsb=sliceNBt,\
     28935                          pointsb=sliceinBt, dxa=dxA, dya=dyA, dxya=dxyAB, dxb=dxB, dyb=dyB, dxyb=dxyB)
     28936                        NpointsB[jc,ic,j,i,:,:] = NptsAt.transpose()
     28937                        inpointsB[:,jc,ic,j,i,:,:] = inptsAt.transpose()
     28938
    2892028939                # Remembering that it is python (C-like...)
    2892128940                inpointsAB = inpointsAB-1
    2892228941                inpointsC = inpointsC-1
    2892328942
    28924         maxNpointsABC = np.max(NpointsAB)
     28943        maxNpointsABC = np.max(NpointsABC)
    2892528944
    2892628945        print "  Joined slice '" + prevdn + "' & '" + newslcvarns[islc] + "':",      \
     
    2892828947
    2892928948        if not gen.searchInlist(onewnc.dimensions, dn+'gridin'):
    28930             newdim = onewnc.createDimension(dn+'gridin', maxNpointsAB)
     28949            newdim = onewnc.createDimension(dn+'gridin', maxNpointsABC)
    2893128950   
    2893228951        newvar = onewnc.createVariable(dn+'Ngrid','i', tuple(Srgrid))
     28952        print 'Lluis shapes: newvar', newvar.shape, 'NpointsABC:', NpointsABC.shape, 'Srgrid:', Srgrid
    2893328953        newvar[:] = NpointsABC[:]
    2893428954        basicvardef(newvar, dn+'Ngrid', "number of grids cells from slice " +        \
     
    2896028980        pnewvar.setncattr('coordinates',' '.join(Spgrid[::-1]))
    2896128981
     28982        print 'Lluis shapes NpointsANC:', NpointsABC.shape, 'pointsABC:', pointsABC.shape, \
     28983          'inpoints AB:', inpointsAB.shape, 'sliceinAB:', sliceinAB.shape, 'oslicepAB:',   \
     28984          oslicepAB.shape, 'osliceaAB:', osliceaAB.shape, 'inpoints C:', inpointsC.shape,  \
     28985          'sliceinC:', sliceinC.shape, 'oslicepC:', oslicepC.shape, 'osliceaC:', osliceaC.shape
     28986        ixA = -1
     28987        iyA = -1
     28988        ixB = -1
     28989        iyB = -1
     28990        ixC = -1
     28991        iyC = -1
    2896228992        for jA in range(dyA):
    2896328993            for iA in range(dxA):
    2896428994                for jB in range(dyB):
    2896528995                    for iB in range(dxB):
    28966                         Nin = NpointsAB[jB,iB,jA,iA]
    28967                         innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA]
    28968                         aanewvar[jB,iB,jA,iA]= gen.fillValueF
    28969                         anewvar[:,jB,iB,jA,iA]= gen.fillValueF
    28970                         pnewvar[:,jB,iB,jA,iA]= gen.fillValueF
    28971                         slicearea = 0.
    28972                         for iv in range(Nin):
    28973                             pA = oslicepA[inpointsA[iv,jB,iB,jA,iA],jA,iA]
    28974                             pB = oslicepB[inpointsB[iv,jB,iB,jA,iA],jB,iB]
    28975                             pnewvar[iv,jB,iB,jA,iA]= pA*pB
    28976                             ixA = sliceinA[1,inpointsA[iv,jB,iB,jA,iA],jA,iA]
    28977                             iyA = sliceinA[0,inpointsA[iv,jB,iB,jA,iA],jA,iA]
    28978                             aA = osliceaA[iyA,ixA]
    28979                             ixB = sliceinB[1,inpointsB[iv,jB,iB,jA,iA],jB,iB]
    28980                             iyB = sliceinB[0,inpointsB[iv,jB,iB,jA,iA],jB,iB]
    28981                             aB = osliceaB[iyB,ixB]
    28982                             anewvar[iv,jB,iB,jA,iA]= (aA*pA)*(aB*pB)
    28983                             slicearea = slicearea + (aA*pA)*(aB*pB)
    28984                         aanewvar[jB,iB,jA,iA]= slicearea
     28996                        for jC in range(dyC):
     28997                            for iC in range(dxC):
     28998                                Nin = NpointsABC[jC,iC,jB,iB,jA,iA]
     28999                                innewvar[:,0:Nin,jC,iC,jB,iB,jA,iA] = pointsABC[:,0:Nin,jC,iC,jB,iB,jA,iA]
     29000                                aanewvar[jC,iC,jB,iB,jA,iA]= gen.fillValueF
     29001                                anewvar[:,jC,iC,jB,iB,jA,iA]= gen.fillValueF
     29002                                pnewvar[:,jC,iC,jB,iB,jA,iA]= gen.fillValueF
     29003                                slicearea = 0.
     29004                                for iv in range(Nin):
     29005                                    pA = oslicepAB[inpointsAB[iv,jC,iC,jB,iB,jA,iA],jB,iB,jA,iA]
     29006                                    pB = oslicepC[inpointsC[iv,jC,iC,jB,iB,jA,iA],jC,iC]
     29007                                    pnewvar[iv,jC,iC,jB,iB,jA,iA]= pA*pB
     29008                                    ixAB = sliceinAB[1,inpointsAB[iv,jC,iC,jB,iB,jA,iA],jB,iB,jA,iA]
     29009                                    iyAB = sliceinAB[0,inpointsAB[iv,jC,iC,jB,iB,jA,iA],jB,iB,jA,iA]
     29010                                    ixA = inpointsA[1,NpointsA[iv,jC,iC,jB,iB,jA,iA],jC,iC,jB,iB,jA,iA]
     29011                                    iyA = inpointsA[0,NpointsA[iv,jC,iC,jB,iB,jA,iA],jC,iC,jB,iB,jA,iA]
     29012                                    ixB = inpointsB[1,NpointsB[iv,jC,iC,jB,iB,jA,iA],jC,iC,jB,iB,jA,iA]
     29013                                    iyB = inpointsB[0,NpointsB[iv,jC,iC,jB,iB,jA,iA],jC,iC,jB,iB,jA,iA]
     29014                                    ixC = sliceinC[1,inpointsC[iv,jC,iC,jB,iB,jA,iA],jC,iC]
     29015                                    iyC = sliceinC[0,inpointsC[iv,jC,iC,jB,iB,jA,iA],jC,iC]
     29016                                    print jA,iA,jB,iB,jC,iC,':',iyA,ixA,iyB,ixB,iyC,ixC
     29017                                    aA = osliceaAB[iyB,ixB,iyA,ixA]
     29018                                    aB = osliceaC[iyC,ixC]
     29019                                    anewvar[iv,jC,iC,jB,iB,jA,iA]= (aA*pA)*(aB*pB)
     29020                                    slicearea = slicearea + (aA*pA)*(aB*pB)
     29021                                aanewvar[jC,iC,jB,iB,jA,iA]= slicearea
    2898529022        onewnc.sync()
    2898629023
Note: See TracChangeset for help on using the changeset viewer.