- Timestamp:
- Jan 25, 2019, 10:11:51 PM (7 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/module_scientific.f90
r2289 r2291 6041 6041 INTEGER, DIMENSION(dxB, dyB), INTENT(in) :: NpointsB 6042 6042 INTEGER, DIMENSION(dxA, dyA, dxyA, 2), INTENT(in) :: pointsA 6043 INTEGER, DIMENSION(dx A, dyA, dxyB, 2), INTENT(in) :: pointsB6043 INTEGER, DIMENSION(dxB, dyB, dxyB, 2), INTENT(in) :: pointsB 6044 6044 INTEGER, DIMENSION(dxA, dyA, dxB, dyB), INTENT(out) :: Npoints 6045 6045 INTEGER, DIMENSION(dxA, dyA, dxB, dyB, dxyA, 2), & … … 6076 6076 DO ixB=1, dxB 6077 6077 DO iyB=1, dyB 6078 NB = Npoints A(ixB,iyB)6078 NB = NpointsB(ixB,iyB) 6079 6079 CALL coincident_list_2Dcoords(NA, pointsA(ixA,iyA,1:NA,:), NB, pointsB(ixB,iyB,1:NB,:), & 6080 6080 Npoints(ixA,iyA,ixB,iyB), points(ixA,iyA,ixB,iyB,:,:), inpointsA(ixA,iyA,:), & -
trunk/tools/nc_var_tools.py
r2290 r2291 27727 27727 slices along sets of ranges for a series of variables weighting by the area 27728 27728 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] 27730 27731 [slicevarsinf] ';' separated list of [varn1],[minvar1],[maxvar1], 27731 27732 [slcevar1]; ...;[varnN],[minvarN],[maxvarN],[slcevarN] … … 27745 27746 ('None' for any) 27746 27747 [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) 27748 27753 [slicestatsdim]: ',' list of name of dimensions to do not use for computing 27749 27754 statistics of variables at each slice ('any' for not leaving any … … 27760 27765 27761 27766 expectargs = '[slicevarsinf]@[dimvars]@[sliceremovedim]@[slicebndsdim]@' + \ 27762 '[slice statsdim]'27767 '[slicebndsvar]@[slicestatsdim]' 27763 27768 gen.check_arguments(fname, values, expectargs, '@') 27764 27769 … … 27767 27772 sliceremovedim = values.split('@')[2] 27768 27773 slicebndsdim0 = values.split('@')[3] 27769 slicestatsdim = values.split('@')[4].split(',') 27774 slicebndsvar0 = values.split('@')[4] 27775 slicestatsdim = values.split('@')[5].split(',') 27770 27776 27771 27777 varvalues = varvalues0.split(';') … … 27788 27794 sliceremovdim = None 27789 27795 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 27790 27807 varvals = {} 27791 27808 slcvarns = [] … … 27956 27973 27957 27974 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 27963 27980 print ' ' + infmsg 27964 27981 print ' ' +fname+ ": slicing variable '"+varn+ "' with bounded " + \ 27965 " dimensions:", dimbnds, " !!"27982 " dimensions:", varbnds, " !!" 27966 27983 print ' getting them to retrieve the slices' 27967 27984 … … 27969 27986 dimdbnds = {} 27970 27987 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): 27973 27991 print errormsg 27974 27992 print ' ' + fname + ": file '" + ncfile + "' does not have " + \ 27975 "bounds variable '" + slicebndsdim[dn]+ "' !!"27993 "bounds variable '" + vn+ "' !!" 27976 27994 avar = list(onc.variables.keys()) 27977 27995 avar.sort() … … 27979 27997 quit(-1) 27980 27998 27981 ovarbnds = onc.variables[ slicebndsdim[dn]]27999 ovarbnds = onc.variables[vn] 27982 28000 27983 28001 # Removing undesired dimensions from bounds slicing variable … … 27989 28007 rmshape = list(ovarbnds.shape) 27990 28008 27991 dimvbnds[dn ] = varv27992 dimdbnds[dn ] = rmdims27993 dimsbnds[dn ] = rmshape27994 27995 dn = '_'.join( slicebndsdim)28009 dimvbnds[dnn] = varv 28010 dimdbnds[dnn] = rmdims 28011 dimsbnds[dnn] = rmshape 28012 28013 dn = '_'.join(varbnds) 27996 28014 if not gen.searchInlist(slcvarns, dn) and not \ 27997 28015 gen.searchInlist(newslcvarns, dn) and not vardimbndslice.has_key(dn): … … 28210 28228 else: 28211 28229 dn = varn + '' 28230 dv = np.zeros((1,Nslices), dtype=int) 28212 28231 # Here is only done by 1D variables !!! 28213 28232 print infmsg … … 28229 28248 28230 28249 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) 28232 28251 percens = np.zeros((Ngridsinmax,1,Nslices), dtype=np.float) 28233 28252 for islc in range(Nslices): … … 28260 28279 ainds = np.array(indices) 28261 28280 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) 28267 28298 28268 28299 if not gen.searchInlist(newslcvarns,dn): … … 28366 28397 dxyB = osliceinB.shape[1] 28367 28398 28368 Srgrid = list(osliceN A.dimensions) + list(osliceNB.dimensions)28399 Srgrid = list(osliceNB.dimensions) + list(osliceNA.dimensions) 28369 28400 Sigrid = ['coord', dn+'gridin'] + Srgrid 28370 28401 Spgrid = [dn+'gridin'] + Srgrid … … 28383 28414 inpointsB = inpB.transpose() 28384 28415 28416 maxNpointsAB = np.max(NpointsAB) 28385 28417 print " Joined slice '" + newslcvarns[0] + "' & '" + newslcvarns[1] + "':", \ 28386 NpointsAB.shape 28387 quit(-1) 28388 28389 maxNpointsAB = np.max(NpointsAB) 28418 NpointsAB.shape, 'maxin:', maxNpointsAB 28390 28419 28391 28420 if not gen.searchInlist(onewnc.dimensions, dn+'gridin'): … … 28410 28439 anewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28411 28440 28441 print 'Lluis Spgrid:', Spgrid 28412 28442 pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid), \ 28413 28443 fill_value=gen.fillValueF) … … 28424 28454 print Nin, 'Lluis shapes sliceaA:', osliceaA.shape, 'sliceaB:', osliceaB.shape 28425 28455 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] 28428 28458 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] 28431 28461 print ' A:', ixA, iyA 28432 aA = osliceaA[i xA,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] 28435 28465 print ' B:', ixB, iyB 28436 aB = osliceaB[i xB,iyB]28466 aB = osliceaB[iyB,ixB] 28437 28467 anewvar[jB,iB,jA,iA]= aA*aB 28438 28468
Note: See TracChangeset
for help on using the changeset viewer.