- Timestamp:
- Jan 25, 2019, 8:31:56 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var_tools.py
r2287 r2290 27536 27536 getvarybndst = getvarbndsy.transpose() 27537 27537 27538 Ngridsint, gridsint, percenst = fsci.module_scientific.spacepercen(\27538 Ngridsint, gridsint, areast, percenst = fsci.module_scientific.spacepercen( \ 27539 27539 xcavals=reflont, ycavals=reflatt, xbavals=refvarxbndst, ybavals=refvarybndst, \ 27540 27540 xcbvals=getlont, ycbvals=getlatt, xbbvals=getvarxbndst, ybbvals=getvarybndst, \ 27541 strict=strict, dxa=refdx, dya=refdy, navertexmax=refmaxvert, 27542 d xb=getdx, dyb=getdy, dxyb=getdx*getdy, nbvertexmax=getmaxvert)27541 strict=strict, dxa=refdx, dya=refdy, navertexmax=refmaxvert, dxb=getdx, \ 27542 dyb=getdy, dxyb=getdx*getdy, nbvertexmax=getmaxvert) 27543 27543 27544 27544 Ngridsin = Ngridsint.transpose() 27545 27545 gridsin = gridsint.transpose() 27546 percens = areast.transpose() 27546 27547 percens = percenst.transpose() 27547 27548 … … 27893 27894 else: slcvarnS = slcvarnS + ', ' + varn 27894 27895 27896 for dimn in rmdims: 27897 if not gen.searchInlist(onewnc.dimensions, dimn): 27898 newdim = onewnc.createDimension(dimn, len(onc.dimensions[dimn])) 27899 27900 newvar = onewnc.createVariable(varn, 'f', (rmdims)) 27901 newvar[:] = varv[:] 27902 basicvardef(newvar, varn, 'variable ' + varn + ' used to slice', vu) 27903 onewnc.sync() 27904 27895 27905 # dimensions 27896 27906 newdim = onewnc.createDimension('slice_'+varn, Nslices) … … 27903 27913 newvar[:] = slcvalsc[:] 27904 27914 basicvardef(newvar, 'slice_'+varn, 'slices for variable ' + varn, vu) 27915 newattr = set_attribute(newvar, 'bounds', 'slice_'+varn+'_bnds') 27905 27916 onewnc.sync() 27906 27917 … … 27916 27927 slcv = np.zeros(tuple(slcshape), dtype=int) 27917 27928 for islc in range(Nslices): 27918 vvslc = 27929 vvslc =~slcvar[islc,] 27919 27930 slcv[islc,] = np.where(vvslc, 1, 0) 27920 27931 newvar = onewnc.createVariable(varn+'sliced', 'i', tuple(slcdims)) … … 27927 27938 vardimbndslice = {} 27928 27939 27929 print 'Lluis slcvarns:', slcvarns27930 27940 newslcvarns = [] 27931 27941 for varn in slcvarns: … … 27945 27955 rmshape = list(ovar.shape) 27946 27956 27957 varfinaldims = rmdims + [] 27947 27958 dimbnds = [] 27948 27959 for dn in rmdims: … … 28183 28194 getvarybndst = ydimvarbnds2D.transpose() 28184 28195 28185 Ngridsint, gridsint, percenst =\28186 fsci.module_scientific. spacepercen(xcavals=reflont,\28196 Ngridsint, gridsint, areast, percenst = \ 28197 fsci.module_scientific.grid_spacepercen(xcavals=reflont, \ 28187 28198 ycavals=reflatt, xbavals=refvarxbndst, ybavals=refvarybndst, \ 28188 28199 xcbvals=getlont, ycbvals=getlatt, xbbvals=getvarxbndst, \ … … 28193 28204 Ngridsin = Ngridsint.transpose() 28194 28205 gridsin = gridsint.transpose() 28206 areas = areast.transpose() 28195 28207 percens = percenst.transpose() 28196 28208 28197 28209 Ngridsinmax = np.max(Ngridsin) 28198 28210 else: 28211 dn = varn + '' 28199 28212 # Here is only done by 1D variables !!! 28200 28213 print infmsg … … 28214 28227 28215 28228 Ngridsinmax = np.max(Ngridsin) 28229 28216 28230 gridsin = np.zeros((2,Ngridsinmax,1,Nslices), dtype=int) 28231 areas = np.zeros((Ngridsmax,1,Nslices), dtype=np.float) 28217 28232 percens = np.zeros((Ngridsinmax,1,Nslices), dtype=np.float) 28218 28233 for islc in range(Nslices): … … 28249 28264 percens[0:Ngridsin[0,islc],0,islc] = 1. 28250 28265 28251 # Let's avoid memory issues... 28252 newslcvarns.append(dn) 28253 lvalues = [Ngridsin, gridsin, percens] 28254 vardimbndslice[dn] = lvalues 28266 onewnc.sync() 28267 28268 if not gen.searchInlist(newslcvarns,dn): 28269 # Let's avoid memory issues... 28270 newslcvarns.append(dn) 28271 lvalues = [Ngridsin, gridsin, percens] 28272 vardimbndslice[dn] = lvalues 28273 28255 28274 if not onewnc.variables.has_key(dn+'gridin'): 28256 28275 … … 28283 28302 newvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28284 28303 28285 innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid)) 28304 innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid), \ 28305 fill_value=gen.fillValueI) 28286 28306 basicvardef(innewvar, dn+'gridin', "coordinates of the grids " + \ 28287 28307 "cells from .get. laying within .ref.",'-') 28288 28308 innewvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28289 28290 pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid)) 28309 28310 anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(varfinaldims)) 28311 basicvardef(anewvar ,dn+'gridarea', "area of the grids cells from " + \ 28312 ".get.", vu) 28313 anewvar.setncattr('coordinates',' '.join(varfinaldims[::-1])) 28314 anewvar[:] = areas[:] 28315 28316 pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid), \ 28317 fill_value=gen.fillValueF) 28291 28318 basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " + \ 28292 28319 "grids cells from .get. laying within .ref.", '1') … … 28307 28334 28308 28335 onewnc.sync() 28336 28337 # Getting full slice 28338 # NOTE: for simplicity let's assume that there is only one slice with bounds !! 28339 # Otherwise we need to re-calculate the polygons taking the outcome from each 28340 # slice 28341 print 'joining slices of:', newslcvarns 28342 28343 Nnewslcs = len(newslcvarns) 28344 28345 dn = newslcvarns[0] + '_' + newslcvarns[1] 28346 28347 osliceNA = onewnc.variables[newslcvarns[0] + 'Ngrid'] 28348 osliceinA = onewnc.variables[newslcvarns[0] + 'gridin'] 28349 osliceaA = onewnc.variables[newslcvarns[0] + 'gridarea'] 28350 oslicepA = onewnc.variables[newslcvarns[0] + 'gridpercen'] 28351 osliceNB = onewnc.variables[newslcvarns[1] + 'Ngrid'] 28352 osliceinB = onewnc.variables[newslcvarns[1] + 'gridin'] 28353 osliceaB = onewnc.variables[newslcvarns[1] + 'gridarea'] 28354 oslicepB = onewnc.variables[newslcvarns[1] + 'gridpercen'] 28355 28356 sliceNA = osliceNA[:] 28357 sliceinA = osliceinA[:] 28358 sliceNB = osliceNB[:] 28359 sliceinB = osliceinB[:] 28360 28361 dxA = osliceNA.shape[1] 28362 dyA = osliceNA.shape[0] 28363 dxyA = osliceinA.shape[1] 28364 dxB = osliceNB.shape[1] 28365 dyB = osliceNB.shape[0] 28366 dxyB = osliceinB.shape[1] 28367 28368 Srgrid = list(osliceNA.dimensions) + list(osliceNB.dimensions) 28369 Sigrid = ['coord', dn+'gridin'] + Srgrid 28370 Spgrid = [dn+'gridin'] + Srgrid 28371 28372 sliceNAt = sliceNA.transpose() 28373 sliceinAt = sliceinA.transpose() 28374 sliceNBt = sliceNB.transpose() 28375 sliceinBt = sliceinB.transpose() 28376 28377 NpointsABt, pointsABt, inpA, inpB = fsci.module_scientific.coincident_gridsin2d( \ 28378 npointsa=sliceNAt, pointsa=sliceinAt, npointsb=sliceNBt, pointsb=sliceinBt, \ 28379 dxa=dxA, dya=dyA, dxya=dxyA, dxb=dxB, dyb=dyB, dxyb=dxyB) 28380 NpointsAB = NpointsABt.transpose() 28381 pointsAB = pointsABt.transpose() 28382 inpointsA = inpA.transpose() 28383 inpointsB = inpB.transpose() 28384 28385 print " Joined slice '" + newslcvarns[0] + "' & '" + newslcvarns[1] + "':", \ 28386 NpointsAB.shape 28387 quit(-1) 28388 28389 maxNpointsAB = np.max(NpointsAB) 28390 28391 if not gen.searchInlist(onewnc.dimensions, dn+'gridin'): 28392 newdim = onewnc.createDimension(dn+'gridin', maxNpointsAB) 28393 28394 newvar = onewnc.createVariable(dn+'Ngrid','i', tuple(Srgrid)) 28395 newvar[:] = NpointsAB[:] 28396 basicvardef(newvar, dn+'Ngrid', "number of grids cells from slice " + \ 28397 newslcvarns[0] + " laying within slice " + newslcvarns[1], '-') 28398 newvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28399 28400 innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid), \ 28401 fill_value=gen.fillValueI) 28402 basicvardef(innewvar, dn+'gridin', "coordinates of the grids cells from slice "+ \ 28403 newslcvarns[0] + " laying within slice " + newslcvarns[1],'-') 28404 innewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28405 28406 anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid), \ 28407 fill_value=gen.fillValueF) 28408 basicvardef(anewvar ,dn+'gridarea', "area of the join slice " + newslcvarns[0] + \ 28409 " & " + newslcvarns[1], vu) 28410 anewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28411 28412 pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid), \ 28413 fill_value=gen.fillValueF) 28414 basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " + \ 28415 "grids cells from .get. laying within .ref.", '1') 28416 pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28417 28418 for jA in range(dyA): 28419 for iA in range(dxA): 28420 for jB in range(dyB): 28421 for iB in range(dxB): 28422 Nin = NpointsAB[jB,iB,jA,iA] 28423 innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA] 28424 print Nin, 'Lluis shapes sliceaA:', osliceaA.shape, 'sliceaB:', osliceaB.shape 28425 for iv in range(Nin): 28426 pA = oslicepA[inpA[jA,iA,iv],jA,iA] 28427 pB = oslicepB[inpB[jB,iB,iv],jB,iB] 28428 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] 28431 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] 28435 print ' B:', ixB, iyB 28436 aB = osliceaB[ixB,iyB] 28437 anewvar[jB,iB,jA,iA]= aA*aB 28438 28439 onewnc.sync() 28440 28441 for islc in range(2,Nnewslcs): 28442 dn = dn + '_' + newslcvarns[iscl+1] 28443 osliceNA = onewnc.variables[newslcvarns[0] + 'Ngrid'] 28444 osliceinA = onewnc.variables[newslcvarns[0] + 'gridin'] 28445 osliceaA = onewnc.variables[newslcvarns[0] + 'gridarea'] 28446 oslicepA = onewnc.variables[newslcvarns[0] + 'gridpercen'] 28447 osliceNB = onewnc.variables[newslcvarns[1] + 'Ngrid'] 28448 osliceinB = onewnc.variables[newslcvarns[1] + 'gridin'] 28449 osliceaB = onewnc.variables[newslcvarns[1] + 'gridarea'] 28450 oslicepB = onewnc.variables[newslcvarns[1] + 'gridpercen'] 28451 28452 sliceNA = osliceNA[:] 28453 sliceinA = osliceinA[:] 28454 sliceNB = osliceNB[:] 28455 sliceinB = osliceinB[:] 28456 28457 dxA = osliceNA.shape[1] 28458 dyA = osliceNA.shape[0] 28459 dxyA = osliceinA.shape[1] 28460 dxB = osliceNB.shape[1] 28461 dyB = osliceNB.shape[0] 28462 dxyB = osliceinB.shape[1] 28463 28464 Srgrid = list(osliceNA.dimensions) + list(osliceNB.dimensions) 28465 Sigrid = ['coord', dn+'gridin'] + Srgrid 28466 Spgrid = [dn+'gridin'] + Srgrid 28467 28468 sliceNAt = sliceNA.transpose() 28469 sliceinAt = sliceinA.transpose() 28470 sliceNBt = sliceNB.transpose() 28471 sliceinBt = sliceinB.transpose() 28472 28473 NpointsABt, pointsABt, inpA, inpB = fsci.module_scientific.coincident_gridsin2d( \ 28474 npointsa=sliceNAt, pointsa=sliceinAt, npointsb=sliceNBt, pointsb=sliceinBt, \ 28475 dxa=dxA, dya=dyA, dxya=dxyA, dxb=dxB, dyb=dyB, dxyb=dxyB) 28476 NpointsAB = NpointsABt.transpose() 28477 pointsAB = pointsABt.transpose() 28478 inpointsA = inpA.transpose() 28479 inpointsB = inpB.transpose() 28480 28481 maxNpointsAB = np.max(NpointsAB) 28482 28483 if not gen.searchInlist(onewnc.dimensions, dn+'gridin'): 28484 newdim = onewnc.createDimension(dn+'gridin', maxNpointsAB) 28485 28486 newvar = onewnc.createVariable(dn+'Ngrid','i', tuple(Srgrid)) 28487 newvar[:] = NpointsAB[:] 28488 basicvardef(newvar, dn+'Ngrid', "number of grids cells from slice " + \ 28489 newslcvarns[0] + " laying within slice " + newslcvarns[1], '-') 28490 newvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28491 28492 innewvar = onewnc.createVariable(dn+'gridin', 'i', tuple(Sigrid), \ 28493 fill_value=gen.fillValueI) 28494 basicvardef(innewvar, dn+'gridin', "coordinates of the grids cells from slice "+ \ 28495 newslcvarns[0] + " laying within slice " + newslcvarns[1],'-') 28496 innewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28497 28498 anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid), \ 28499 fill_value=gen.fillValueF) 28500 basicvardef(anewvar ,dn+'gridarea', "area of the join slice " + newslcvarns[0] + \ 28501 " & " + newslcvarns[1], vu) 28502 anewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28503 28504 pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid), \ 28505 fill_value=gen.fillValueF) 28506 basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " + \ 28507 "grids cells from .get. laying within .ref.", '1') 28508 pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28509 28510 for jA in range(dyA): 28511 for iA in range(dxA): 28512 for jB in range(dyB): 28513 for iB in range(dxB): 28514 Nin = NpointsAB[jB,iB,jA,iA] 28515 innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA] 28516 for iv in range(Nin): 28517 pA = oslicepA[inpA[iv],jA,iA] 28518 pB = oslicepB[inpB[iv],jB,iB] 28519 pnewvar[iv,jB,iB,jA,iA]= pA*pB 28520 aA = osliceaA[inpA[iv],jA,iA] 28521 aB = osliceaB[inpB[iv],jB,iB] 28522 anewvar[iv,jB,iB,jA,iA]= aA*aB 28523 28524 onewnc.sync() 28309 28525 28310 28526 slcvarns = slcvarns + newslcvarns
Note: See TracChangeset
for help on using the changeset viewer.