- Timestamp:
- Jan 29, 2019, 3:34:56 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/nc_var_tools.py
r2295 r2296 27544 27544 Ngridsin = Ngridsint.transpose() 27545 27545 gridsin = gridsint.transpose() 27546 percens = areast.transpose()27546 areas = areast.transpose() 27547 27547 percens = percenst.transpose() 27548 27548 … … 28289 28289 28290 28290 gridsin = np.zeros((2,Ngridsinmax,1,Nslices), dtype=int) 28291 areas = np.ones(tuple(varfinalshape), dtype=np.float) 28291 areas = np.ones(tuple(varfinalshape), dtype=np.float)*gen.fillValueF 28292 28292 percens = np.zeros((Ngridsinmax,1,Nslices), dtype=np.float) 28293 28293 … … 28327 28327 gridsin[1,0:Nt,0,islc] = ainds[1,0:Nt] 28328 28328 percens[0:Nt,0,islc] = 1. 28329 28330 # Values for file 28331 dxref = Nslices 28332 dyref = 1 28333 dxget = 1 28334 dyget = 1 28335 28336 dref = ['fake', dn] 28337 sref = [1, Nslices] 28338 dget = ['fake'] 28339 sget = [1] 28340 if not gen.searchInlist(onewnc.dimensions, 'fake'): 28341 newdim = onewnc.createDimension('fake',1) 28342 newdim = onewnc.createDimension('slice_fake',1) 28343 newdim = onewnc.createDimension('fakebnds',4) 28344 newvar = onewnc.createVariable('fake','f',('fake')) 28345 newvar[:] = [0.] 28346 basicvardef(newvar, 'fake', 'fake variable for transforming ' + \ 28347 '1D variable without bounds', '-') 28348 newvar = onewnc.createVariable('slice_fake','f',('slice_fake')) 28349 newvar[:] = [0.] 28350 basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\ 28351 'for transforming variable without bounds', '-') 28352 newvar = onewnc.createVariable('slice_fake_bnds','f', \ 28353 ('fakebnds','fake')) 28354 fakebnds = np.zeros((4,1), dtype=np.float) 28355 fakebnds[0,0] = -1 28356 fakebnds[1,0] = 1 28357 fakebnds[2,0] = 1 28358 fakebnds[3,0] = -1 28359 newvar[:] = fakebnds 28360 basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\ 28361 'for transforming variable without bounds', '-') 28362 onewnc.sync() 28329 for iv in range(Nt): 28330 i = ainds[0,iv] 28331 j = ainds[1,iv] 28332 areas[j,i] = 1. 28333 28334 # Values for file 28335 dxref = Nslices 28336 dyref = 1 28337 dxget = 1 28338 dyget = 1 28339 28340 dref = ['fake', dn] 28341 sref = [1, Nslices] 28342 dget = ['fake'] 28343 sget = [1] 28344 if not gen.searchInlist(onewnc.dimensions, 'fake'): 28345 newdim = onewnc.createDimension('fake',1) 28346 newdim = onewnc.createDimension('slice_fake',1) 28347 newdim = onewnc.createDimension('fakebnds',4) 28348 newvar = onewnc.createVariable('fake','f',('fake')) 28349 newvar[:] = [0.] 28350 basicvardef(newvar, 'fake', 'fake variable for transforming ' + \ 28351 '1D variable without bounds', '-') 28352 newvar = onewnc.createVariable('slice_fake','f',('slice_fake')) 28353 newvar[:] = [0.] 28354 basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\ 28355 'for transforming variable without bounds', '-') 28356 newvar = onewnc.createVariable('slice_fake_bnds','f', \ 28357 ('fakebnds','fake')) 28358 fakebnds = np.zeros((4,1), dtype=np.float) 28359 fakebnds[0,0] = -1 28360 fakebnds[1,0] = 1 28361 fakebnds[2,0] = 1 28362 fakebnds[3,0] = -1 28363 newvar[:] = fakebnds 28364 basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\ 28365 'for transforming variable without bounds', '-') 28366 onewnc.sync() 28363 28367 28364 28368 if not gen.searchInlist(newslcvarns,dn): … … 28395 28399 newvar[:] = Ngridsin[:] 28396 28400 basicvardef(newvar, dn+'Ngrid', "number of grids cells from " + \ 28397 ".get. laying within .ref.", '-')28401 dn + " laying within slice", '-') 28398 28402 newvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28399 28403 … … 28401 28405 fill_value=gen.fillValueI) 28402 28406 basicvardef(innewvar, dn+'gridin', "coordinates of the grids " + \ 28403 "cells from .get. laying within .ref.",'-')28407 "cells from " + dn + " laying within slice",'-') 28404 28408 innewvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28405 28409 28406 anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(varfinaldims)) 28410 anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(varfinaldims), \ 28411 fill_value = gen.fillValueF) 28407 28412 basicvardef(anewvar ,dn+'gridarea', "area of the grids cells from " + \ 28408 ".get.", vu)28413 dn, vu) 28409 28414 anewvar.setncattr('coordinates',' '.join(varfinaldims[::-1])) 28410 28415 anewvar[:] = areas[:] … … 28418 28423 fill_value=gen.fillValueF) 28419 28424 basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " + \ 28420 "grids cells from .get. laying within .ref.", '1')28425 "grids cells from " + dn + " laying within slice", '1') 28421 28426 pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28427 onewnc.sync() 28422 28428 28423 28429 if len(dv.shape) == 1: … … 28445 28451 #apolygon[2,1] = refblat1D[j,0] 28446 28452 #apolygon[3,1] = refblat1D[j,0] 28447 #ap = np.abs(fsci.module_scientific.shoelace_area_polygon(nvertex=4, poly=apolygon)) 28453 #ap = np.abs(fsci.module_scientific.shoelace_area_polygon( \ 28454 # nvertex=4, poly=apolygon)) 28448 28455 innewvar[:,0:Ngridsin[j,i],j,i] = \ 28449 28456 gridsin[:,0:Ngridsin[j,i],j,i] … … 28458 28465 apolygon[:,1] = ydimvarbnds2D[:,iy,ix] 28459 28466 ag = np.abs(fsci.module_scientific.shoelace_area_polygon(nvertex=4, poly=apolygon)) 28460 if varn == 'HGT':28461 print 'Lluis ref dy:', dyref, 'dx:', dxref28462 print ' lluis iv:', iv, ':', iy, ix, '<>', apolygon[1:3,0],'x',apolygon[2:4,1],'ag:', ag, 'areas:', areas[iy,ix], 'percens:', percens[iv,j,i]28463 28467 slicearea = slicearea + ag*percens[iv,j,i] 28464 28468 aa = aa + areas[iy,ix] 28465 28469 pp = pp + percens[iv,j,i] 28466 28470 aanewvar[j,i]= slicearea 28467 #print ' areas Lluis =', refblon1D[i,:], 'x', refblat1D[j,:], \ 28468 # 'j i:', j,i, 'ap', ap, 'aanewvar:', slicearea, 'aa:', aa, 'pp:', pp 28469 if varn == 'HGT': 28470 print ' areas Lluis =', refblon1D[i,:], 'x', refblat1D[j,:], \ 28471 'j i:', j,i, 'aanewvar:', slicearea, 'aa:', aa, 'pp:', pp 28471 # This should be true for the regular lon/lat projections 28472 28472 #if slicearea > ap: quit() 28473 28473 28474 28474 onewnc.sync() 28475 28475 28476 onewnc.sync() 28476 28477 # Getting full slice 28477 28478 # NOTE: for simplicity let's assume that there is only one slice with bounds !! … … 28495 28496 sliceNA = osliceNA[:] 28496 28497 sliceinA = osliceinA[:] 28498 sliceaA = osliceaA[:] 28497 28499 sliceNB = osliceNB[:] 28498 28500 sliceinB = osliceinB[:] 28501 sliceaB = osliceaB[:] 28499 28502 28500 28503 dxA = osliceNA.shape[1] … … 28523 28526 28524 28527 # Remembering that it is python (C-like...) 28528 iA = 1 28529 jA = 4 28530 iB = 0 28531 jB = 0 28525 28532 inpointsA = inpointsA-1 28526 28533 inpointsB = inpointsB-1 … … 28545 28552 innewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28546 28553 28554 aanewvar = onewnc.createVariable(dn+'area','f',tuple(Srgrid), \ 28555 fill_value=gen.fillValueF) 28556 basicvardef(aanewvar ,dn+'area', "area of the join slice " + newslcvarns[0] + \ 28557 " & " + newslcvarns[1], vu) 28558 aanewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28559 28547 28560 anewvar = onewnc.createVariable(dn+'gridarea','f',tuple(Srgrid), \ 28548 28561 fill_value=gen.fillValueF) … … 28551 28564 anewvar.setncattr('coordinates',' '.join(Srgrid[::-1])) 28552 28565 28553 print 'Lluis Spgrid:', Spgrid28554 28566 pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid), \ 28555 28567 fill_value=gen.fillValueF) 28556 28568 basicvardef(pnewvar ,dn+'gridpercen', "percentages of the " + \ 28557 "grids cells from .get. laying within .ref.", '1')28569 "grids cells from " + newslcvarns[0] + " laying within " + newslcvarns[1], '1') 28558 28570 pnewvar.setncattr('coordinates',' '.join(Scgrid[::-1])) 28559 28571 … … 28564 28576 Nin = NpointsAB[jB,iB,jA,iA] 28565 28577 innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA] 28578 slicearea = 0. 28566 28579 for iv in range(Nin): 28567 28580 pA = oslicepA[inpointsA[iv,jA,iA],jA,iA] … … 28574 28587 iyB = sliceinB[0,inpointsB[iv,jB,iB],jB,iB] 28575 28588 aB = osliceaB[iyB,ixB] 28576 anewvar[jB,iB,jA,iA]= (aA*pA)*(aB*pB) 28589 # I do not understand why this is needed !! 28590 if aA != gen.mamat[1] and aB != gen.mamat[1]: 28591 anewvar[jB,iB,jA,iA]= (aA*pA)*(aB*pB) 28592 slicearea = slicearea + (aA*pA)*(aB*pB) 28593 aanewvar[jB,iB,jA,iA]= slicearea 28577 28594 28578 28595 onewnc.sync()
Note: See TracChangeset
for help on using the changeset viewer.