Changeset 2291 in lmdz_wrf for trunk


Ignore:
Timestamp:
Jan 25, 2019, 10:11:51 PM (7 years ago)
Author:
lfita
Message:

Getting there!

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_scientific.f90

    r2289 r2291  
    60416041    INTEGER, DIMENSION(dxB, dyB), INTENT(in)             :: NpointsB
    60426042    INTEGER, DIMENSION(dxA, dyA, dxyA, 2), INTENT(in)    :: pointsA
    6043     INTEGER, DIMENSION(dxA, dyA, dxyB, 2), INTENT(in)    :: pointsB
     6043    INTEGER, DIMENSION(dxB, dyB, dxyB, 2), INTENT(in)    :: pointsB
    60446044    INTEGER, DIMENSION(dxA, dyA, dxB, dyB), INTENT(out)  :: Npoints
    60456045    INTEGER, DIMENSION(dxA, dyA, dxB, dyB, dxyA, 2),                                                  &
     
    60766076        DO ixB=1, dxB
    60776077          DO iyB=1, dyB
    6078             NB = NpointsA(ixB,iyB)
     6078            NB = NpointsB(ixB,iyB)
    60796079            CALL coincident_list_2Dcoords(NA, pointsA(ixA,iyA,1:NA,:), NB, pointsB(ixB,iyB,1:NB,:),   &
    60806080              Npoints(ixA,iyA,ixB,iyB), points(ixA,iyA,ixB,iyB,:,:), inpointsA(ixA,iyA,:),            &
  • trunk/tools/nc_var_tools.py

    r2290 r2291  
    2772727727        slices along sets of ranges for a series of variables weighting by the area
    2772827728        covered by each grid (defined as polygon) within the slice
    27729       values=[slicevarsinf]@[dimvars]@[sliceremovedim]@[slicebndsdim]@[slicestatsdim]
     27729      values=[slicevarsinf]@[dimvars]@[sliceremovedim]@[slicebndsdim]@
     27730          [slicebndsvar]@[slicestatsdim]
    2773027731        [slicevarsinf] ';' separated list of [varn1],[minvar1],[maxvar1],
    2773127732          [slcevar1]; ...;[varnN],[minvarN],[maxvarN],[slcevarN]
     
    2774527746          ('None' for any)
    2774627747        [slicebndsdim]: ',' [dimn]|[dimbnd] list of dimensions and their associated
    27747           bounds variables from the slicing variables ('None' for any)
     27748          bounds variables from the slicing variables
     27749          ('None' for any)
     27750        [slicebndsvar]: ',' [varn]|[dimbnd] list of variables and their associated
     27751          bounds variables (as ';' list when more than 1) from the slicing variables
     27752          ('None' for any)
    2774827753        [slicestatsdim]: ',' list of name of dimensions to do not use for computing
    2774927754          statistics of variables at each slice ('any' for not leaving any
     
    2776027765
    2776127766    expectargs = '[slicevarsinf]@[dimvars]@[sliceremovedim]@[slicebndsdim]@' +       \
    27762       '[slicestatsdim]'
     27767      '[slicebndsvar]@[slicestatsdim]'
    2776327768    gen.check_arguments(fname, values, expectargs, '@')
    2776427769
     
    2776727772    sliceremovedim = values.split('@')[2]
    2776827773    slicebndsdim0 = values.split('@')[3]
    27769     slicestatsdim = values.split('@')[4].split(',')
     27774    slicebndsvar0 = values.split('@')[4]
     27775    slicestatsdim = values.split('@')[5].split(',')
    2777027776
    2777127777    varvalues = varvalues0.split(';')
     
    2778827794        sliceremovdim = None
    2778927795
     27796    # Variables with boundaries from slicing variables
     27797    if slicebndsvar0 != 'None':
     27798        slicebndsvar0 = gen.str_list(slicebndsvar0, ',')
     27799        slicebndsvar = {}
     27800        for slcn in slicebndsvar0:
     27801            vn = slcn.split('|')[0]
     27802            bndn = slcn.split('|')[1].split(';')
     27803            slicebndsvar[vn] = bndn
     27804    else:
     27805        sliceremovdim = None
     27806
    2779027807    varvals = {}
    2779127808    slcvarns = []
     
    2795627973
    2795727974        varfinaldims = rmdims + []
    27958         dimbnds = []
    27959         for dn in rmdims:
    27960             if slicebndsdim.has_key(dn): dimbnds.append(dn)
    27961 
    27962         if len(dimbnds) != 0:
     27975        varfinalshape = rmshape + []
     27976
     27977        if slicebndsvar.has_key(varn):
     27978            varbnds = slicebndsvar[varn]
     27979
    2796327980            print '    ' + infmsg
    2796427981            print '    ' +fname+ ": slicing variable '"+varn+ "' with bounded " +    \
    27965               " dimensions:", dimbnds, " !!"
     27982              " dimensions:", varbnds, " !!"
    2796627983            print '      getting them to retrieve the slices'
    2796727984
     
    2796927986            dimdbnds = {}
    2797027987            dimsbnds = {}
    27971             for dn in dimbnds:
    27972                 if not onc.variables.has_key(slicebndsdim[dn]):
     27988            for vn in varbnds:
     27989                dnn = gen.dictionary_key(slicebndsdim, vn)
     27990                if not onc.variables.has_key(vn):
    2797327991                    print errormsg
    2797427992                    print '  ' + fname + ": file '" + ncfile + "' does not have " +  \
    27975                       "bounds variable '" + slicebndsdim[dn]+ "' !!"
     27993                      "bounds variable '" + vn+ "' !!"
    2797627994                    avar = list(onc.variables.keys())
    2797727995                    avar.sort()
     
    2797927997                    quit(-1)
    2798027998
    27981                 ovarbnds = onc.variables[slicebndsdim[dn]]
     27999                ovarbnds = onc.variables[vn]
    2798228000
    2798328001                # Removing undesired dimensions from bounds slicing variable
     
    2798928007                    rmshape = list(ovarbnds.shape)
    2799028008
    27991                 dimvbnds[dn] = varv
    27992                 dimdbnds[dn] = rmdims
    27993                 dimsbnds[dn] = rmshape
    27994 
    27995             dn = '_'.join(slicebndsdim)
     28009                dimvbnds[dnn] = varv
     28010                dimdbnds[dnn] = rmdims
     28011                dimsbnds[dnn] = rmshape
     28012
     28013            dn = '_'.join(varbnds)
    2799628014            if not gen.searchInlist(slcvarns, dn) and not                            \
    2799728015              gen.searchInlist(newslcvarns, dn) and not vardimbndslice.has_key(dn):
     
    2821028228        else:
    2821128229            dn = varn + ''
     28230            dv = np.zeros((1,Nslices), dtype=int)
    2821228231            # Here is only done by 1D variables !!!
    2821328232            print infmsg
     
    2822928248
    2823028249            gridsin = np.zeros((2,Ngridsinmax,1,Nslices), dtype=int)
    28231             areas = np.zeros((Ngridsmax,1,Nslices), dtype=np.float)
     28250            areas = np.ones(tuple(varfinalshape), dtype=np.float)
    2823228251            percens = np.zeros((Ngridsinmax,1,Nslices), dtype=np.float)
    2823328252            for islc in range(Nslices):
     
    2826028279                ainds = np.array(indices)
    2826128280                if Ngridsin[0,islc] > 0:
    28262                     gridsin[0,0:Ngridsin[0,islc],0,islc] = ainds[0,0:Nt]
    28263                     gridsin[1,0:Ngridsin[0,islc],0,islc] = ainds[1,0:Nt]
    28264                     percens[0:Ngridsin[0,islc],0,islc] = 1.
    28265 
    28266                 onewnc.sync()
     28281                   
     28282                    gridsin[0,0:Nt,0,islc] = ainds[0,0:Nt]
     28283                    gridsin[1,0:Nt,0,islc] = ainds[1,0:Nt]
     28284                    percens[0:Nt,0,islc] = 1.
     28285
     28286                # Values for file
     28287                dxref = Nslices
     28288                dyref = 1
     28289                dxget = 1
     28290                dyget = 1
     28291
     28292                dref = ['fake', dn]
     28293                sref = [1, Nslices]
     28294                dget = ['fake']
     28295                sget = [1]
     28296                if not gen.searchInlist(onewnc.dimensions, 'fake'):
     28297                    newdim = onewnc.createDimension('fake',1)
    2826728298
    2826828299        if not gen.searchInlist(newslcvarns,dn):
     
    2836628397    dxyB = osliceinB.shape[1]
    2836728398
    28368     Srgrid = list(osliceNA.dimensions) + list(osliceNB.dimensions)
     28399    Srgrid = list(osliceNB.dimensions) + list(osliceNA.dimensions)
    2836928400    Sigrid = ['coord', dn+'gridin'] + Srgrid
    2837028401    Spgrid = [dn+'gridin'] + Srgrid
     
    2838328414    inpointsB = inpB.transpose()
    2838428415
     28416    maxNpointsAB = np.max(NpointsAB)
    2838528417    print "  Joined slice '" + newslcvarns[0] + "' & '" + newslcvarns[1] + "':",     \
    28386       NpointsAB.shape
    28387     quit(-1)
    28388 
    28389     maxNpointsAB = np.max(NpointsAB)
     28418      NpointsAB.shape, 'maxin:', maxNpointsAB
    2839028419
    2839128420    if not gen.searchInlist(onewnc.dimensions, dn+'gridin'):
     
    2841028439    anewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
    2841128440
     28441    print 'Lluis Spgrid:', Spgrid
    2841228442    pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),               \
    2841328443      fill_value=gen.fillValueF)
     
    2842428454                    print Nin, 'Lluis shapes sliceaA:', osliceaA.shape, 'sliceaB:', osliceaB.shape
    2842528455                    for iv in range(Nin):
    28426                         pA = oslicepA[inpA[jA,iA,iv],jA,iA]
    28427                         pB = oslicepB[inpB[jB,iB,iv],jB,iB]
     28456                        pA = oslicepA[inpA[jA,iA,iv]-1,jA,iA]
     28457                        pB = oslicepB[inpB[jB,iB,iv]-1,jB,iB]
    2842828458                        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]
     28459                        ixA = sliceinA[1,inpointsA[jA,iA,iv]-1,jA,iA]
     28460                        iyA = sliceinA[0,inpointsA[jA,iA,iv]-1,jA,iA]
    2843128461                        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]
     28462                        aA = osliceaA[iyA,ixA]
     28463                        ixB = sliceinB[1,inpointsB[jB,iB,iv]-1,jB,iB]
     28464                        iyB = sliceinB[0,inpointsB[jB,iB,iv]-1,jB,iB]
    2843528465                        print '  B:', ixB, iyB
    28436                         aB = osliceaB[ixB,iyB]
     28466                        aB = osliceaB[iyB,ixB]
    2843728467                        anewvar[jB,iB,jA,iA]= aA*aB
    2843828468
Note: See TracChangeset for help on using the changeset viewer.