Changeset 766 in lmdz_wrf


Ignore:
Timestamp:
May 10, 2016, 1:55:00 PM (9 years ago)
Author:
lfita
Message:

Almost working version with `lonlatfrac'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/nc_var_tools.py

    r765 r766  
    1374013740
    1374113741#    mindiff = np.min([minlat, minlon])/1.
    13742     mindiff = np.min([minlat, minlon])*10.e6
     13742    mindiffin = np.sqrt(minlat*minlat + minlon*minlon)
    1374313743
    1374413744    print '  ' + fname + ': Closest latitude to Equator:', minlat
     
    1385613856        quit(-1)
    1385713857
     13858    sortedlonmap = np.sort(lonmap)
     13859    sortedlatmap = np.sort(latmap)
     13860    Nsortlonm = len(sortedlonmap)
     13861    Nsortlatm = len(sortedlatmap)
     13862
     13863    diffsortlon = sortedlonmap[1:Nsortlonm-1]-sortedlonmap[0:Nsortlonm-2]
     13864    diffsortlat = sortedlatmap[1:Nsortlatm-1]-sortedlatmap[0:Nsortlatm-2]
     13865
     13866    mindifflonmap = np.min(diffsortlon)
     13867    maxdifflonmap = np.max(diffsortlon)
     13868    mindifflatmap = np.min(diffsortlat)
     13869    maxdifflatmap = np.max(diffsortlat)
     13870
     13871    mindiffmap = np.sqrt(mindifflonmap*mindifflonmap+mindifflatmap*mindifflatmap)
     13872    maxdiffmap = np.sqrt(maxdifflonmap*maxdifflonmap+maxdifflatmap*maxdifflatmap)
     13873
     13874    print '  ' + fname + ': minimum distance in target projection:', mindiffmap,     \
     13875      'maximum:', maxdiffmap
    1385813876# Matrix map creation
    1385913877##
     
    1390213920        basicvardef(newvarindiff, 'locindiff', 'distance between input point and ' + \
    1390313921          'its final location','degree')
     13922        set_attributek(newvar,'authorized_minimum_distance',mindiff,'R')
    1390413923
    1390513924# map variable
     
    1392313942            newvarin = newnc.createVariable('inpts', 'i4', ('pts'))   
    1392413943        else:
    13925             newvarin = newnc.createVariable('inpts', 'i4', ('lat','lon'))
    13926 
    13927         basicvardef(newvarin, 'inpts', 'Equivalent point from the input source', '-')
     13944            if kind[Lkind-4:Lkind] == 'frac':
     13945                Nmaxcoinpt = np.int((maxdiffmap/mindiffin)*(maxdiffmap/mindiffin))
     13946                print '  ' + fname + ': maximum theoretical number of coincident '   + \
     13947                  'grid points in the same target gid point:', Nmaxcoinpt
     13948                newdim = newnc.createDimension('Ncoinpt', Nmaxcoinpt)
     13949                newvarin = newnc.createVariable('inpts', 'i4', ('Ncoinpt','lat',     \
     13950                  'lon'))
     13951                basicvardef(newvarin, 'inpts', 'Equivalent points from the input '   +
     13952                  'source', '-')
     13953            else:
     13954                newvarin = newnc.createVariable('inpts', 'i4', ('lat','lon'))
     13955                basicvardef(newvarin, 'inpts', 'Equivalent point from the input ' +  \
     13956                  'source', '-')
     13957
    1392813958        newvar.setncattr('coordinates', 'lon lat')
    1392913959
     
    1395013980
    1395113981# Reducing the searching points
    13952     Nsearchpt = 499999
     13982    Nsearchpt = 999999
    1395313983    Ninpts=np.min([Nsearchpt, Ninpts-ipoint])
    1395413984    newvarinvals = newvarinpt[ipoint:ipoint+Ninpts]
     
    1395713987    mapoints = ma.array(points, mask=maskpt)
    1395813988    ptsf = mapoints.compressed()
    13959 
    13960     Nptsf = len(ptsf)
    13961     print Ninpts,'Npoints to find:', len(ptsf), ptsf[0:10], newvarindiff[ptsf[0:10]]
    13962     print '  ' + fname + ': from:', Ninpts,'re-locating:',Nptsf,'points starting at',\
    13963       ipoint,'...'
    1396413989
    1396513990    Nptsf = len(ptsf)
     
    1400214027            idiff, ilonlatv = fin.module_forinterpolate.interpolate1dll(projlon,     \
    1400314028              projlat, lonvss, latvss, np.float64(mindiff), inptss)
    14004             print 'Lluis shapes: newvar', newvar.shape,'ilonlatv:',ilonlatv.shape,'range:',np.min([len(idiff),fracs])
    14005             print 'Lluis shapes: ovar:',ovar.shape
    1400614029
    1400714030            for i in range(np.min([len(idiff),fracs])):
     
    1403014053
    1403114054            for i in range(np.min([len(idiff),fracs])):
    14032                 print i,'Lluis:',ovar[iri+i], ilonlatv[i,1],',',ilonlatv[i,0],newvar[ovar[iri+i],ilonlatv[i,1],ilonlatv[i,0]], type(newvar[ovar[iri+i],ilonlatv[i,1],ilonlatv[i,0]])
    14033                 if newvar[ovar[iri+i],ilonlatv[i,1],ilonlatv[i,0]].mask:
    14034                     newvar[ovar[iri+i],ilonlatv[i,1],ilonlatv[i,0]].mask = False
    14035                     newvar[ovar[iri+i],ilonlatv[i,1],ilonlatv[i,0]] = 1.
     14055                if type(newvar[ovar[iri+i]-1,ilonlatv[i,1],ilonlatv[i,0]]) ==        \
     14056                  type(ma.array(1)) and newvar[ovar[iri+i]-1,ilonlatv[i,1],          \
     14057                  ilonlatv[i,0]].mask:
     14058                    newvar[ovar[iri+i]-1,ilonlatv[i,1],ilonlatv[i,0]].mask = False
     14059                    newvar[ovar[iri+i]-1,ilonlatv[i,1],ilonlatv[i,0]] = 1.
     14060                    newvarin[0,ilonlatv[i,1],ilonlatv[i,0]] = iri + i
    1403614061                else:
    14037                     newvar[ovar[iri+i],ilonlatv[i,1],ilonlatv[i,0]] =                \
    14038                       newvar[ovar[iri+i],ilonlatv[i,1],ilonlatv[i,0]] + 1
    14039                 newvarin[ilonlatv[i,1],ilonlatv[i,0]] = iri + i
     14062                    Npt = np.sum(newvarin[:,ilonlatv[i,1],ilonlatv[i,0]] > 0)
     14063                    print ilonlatv[i,1],ilonlatv[i,0],'Npt:',Npt
     14064                    print newvarin[:,ilonlatv[i,1],ilonlatv[i,0]]
     14065                    newvar[ovar[iri+i]-1,ilonlatv[i,1],ilonlatv[i,0]] =                \
     14066                      newvar[ovar[iri+i]-1,ilonlatv[i,1],ilonlatv[i,0]] + 1.
     14067                    newvarin[Npt+1,ilonlatv[i,1],ilonlatv[i,0]] = iri + i
    1404014068                newvarinpt[iri+i] = 1
    1404114069                newvarindiff[iri+i] = idiff[i]
Note: See TracChangeset for help on using the changeset viewer.