Changeset 2294 in lmdz_wrf for trunk/tools


Ignore:
Timestamp:
Jan 28, 2019, 5:48:59 PM (6 years ago)
Author:
lfita
Message:

Fixing indices errors...

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_scientific.f90

    r2292 r2294  
    53045304 
    53055305        CALL grid_within_polygon(Nvertex, vertexgrid, dxB, dyB, dxB*dyB, xCBvals, yCBvals,            &
    5306           NBvertexmax, xBBvals, yBBvals, Ngridsin(ix,iy), gridsin(ix,iy,:,:))
     5306          NBvertexmax, xBBvals, yBBvals, Ngridsin(ix,iy), gridsin(ix,iy,1:dxyB,:))
    53075307   
    53085308        IF (ALLOCATED(poinsin)) DEALLOCATE(poinsin)
     
    53175317
    53185318        CALL grid_spacepercen_within_reg(Nvertex, vertexgrid, dxB, dyB, NBvertexmax, xBBvals,        &
    5319           yBBvals, Ngridsin(ix,iy), poinsin, strict, pareas, percentages(ix,iy,:))
     5319          yBBvals, Ngridsin(ix,iy), poinsin, strict, pareas, percentages(ix,iy,1:dxyB))
    53205320
    53215321        ! Filling areas
  • trunk/tools/nc_var_tools.py

    r2293 r2294  
    2822528225                percens = percenst.transpose()
    2822628226
     28227                # Remember we are in C-like!
     28228                gridsin = gridsin - 1
     28229
    2822728230                Ngridsinmax = np.max(Ngridsin)
    2822828231        else:
     
    2827828281
    2827928282                ainds = np.array(indices)
     28283                # Remenber we are in C-like ...
     28284                ainds = ainds - 1
    2828028285                if Ngridsin[0,islc] > 0:
    28281                    
    2828228286                    gridsin[0,0:Nt,0,islc] = ainds[0,0:Nt]
    2828328287                    gridsin[1,0:Nt,0,islc] = ainds[1,0:Nt]
     
    2829628300                if not gen.searchInlist(onewnc.dimensions, 'fake'):
    2829728301                    newdim = onewnc.createDimension('fake',1)
     28302                    newdim = onewnc.createDimension('slice_fake',1)
     28303                    newdim = onewnc.createDimension('fakebnds',4)
     28304                    newvar = onewnc.createVariable('fake','f',('fake'))
     28305                    newvar[:] = [0.]
     28306                    basicvardef(newvar, 'fake', 'fake variable for transforming ' +  \
     28307                      '1D variable without bounds', '-')
     28308                    newvar = onewnc.createVariable('slice_fake','f',('slice_fake'))
     28309                    newvar[:] = [0.]
     28310                    basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\
     28311                      'for transforming variable without bounds', '-')
     28312                    newvar = onewnc.createVariable('slice_fake_bnds','f',            \
     28313                      ('fakebnds','fake'))
     28314                    fakebnds = np.zeros((4,1), dtype=np.float)
     28315                    fakebnds[0,0] = -1
     28316                    fakebnds[1,0] = 1
     28317                    fakebnds[2,0] = 1
     28318                    fakebnds[3,0] = -1
     28319                    newvar[:] = fakebnds
     28320                    basicvardef(newvar, 'slice_fake', 'slicing along fake variable '+\
     28321                      'for transforming variable without bounds', '-')
     28322                    onewnc.sync()
    2829828323
    2829928324        if not gen.searchInlist(newslcvarns,dn):
     
    2834528370            anewvar[:] = areas[:]
    2834628371
     28372            aanewvar = onewnc.createVariable(dn+'area','f',tuple(Srgrid),             \
     28373              fill_value=gen.fillValueF)
     28374            basicvardef(aanewvar ,dn+'area', "area of the slice", vu)
     28375            aanewvar.setncattr('coordinates',' '.join(Srgrid[::-1]))
     28376
    2834728377            pnewvar = onewnc.createVariable(dn+'gridpercen','f',tuple(Spgrid),       \
    2834828378              fill_value=gen.fillValueF)
     
    2835728387                          gridsin[:,0:Ngridsin[j,i],j,i]
    2835828388                        pnewvar[0:Ngridsin[j,i],i]= percens[0:Ngridsin[j,i],j,i]
     28389                        slicearea = 0.
     28390                        for iv in range(Ngridsin[j,i]):
     28391                            ix = gridsin[1,iv,i]
     28392                            iy = gridsin[0,iv,i]
     28393                            slicearea = slicearea + areas[iy,ix]*percens[iv,j,i]
     28394                        aanewvar[i]= slicearea
    2835928395            elif len(dv.shape) == 2:
    2836028396                for j in range(dyref):
    2836128397                   for i in range(dxref):
     28398                        apolygon = np.zeros((4,2), dtype=np.float)
     28399                        apolygon[0,0] = refblon1D[i,0]
     28400                        apolygon[1,0] = refblon1D[i,1]
     28401                        apolygon[2,0] = refblon1D[i,1]
     28402                        apolygon[3,0] = refblon1D[i,0]
     28403                        apolygon[0,1] = refblat1D[j,1]
     28404                        apolygon[1,1] = refblat1D[j,1]
     28405                        apolygon[2,1] = refblat1D[j,0]
     28406                        apolygon[3,1] = refblat1D[j,0]
     28407                        ap = np.abs(fsci.module_scientific.shoelace_area_polygon(nvertex=4, poly=apolygon))
    2836228408                        innewvar[:,0:Ngridsin[j,i],j,i] =                            \
    2836328409                          gridsin[:,0:Ngridsin[j,i],j,i]
    2836428410                        pnewvar[0:Ngridsin[j,i],j,i]= percens[0:Ngridsin[j,i],j,i]
    28365    
     28411                        slicearea = 0.
     28412                        aa = 0.
     28413                        pp = 0.
     28414                        for iv in range(Ngridsin[j,i]):
     28415                            ix = gridsin[1,iv,j,i]
     28416                            iy = gridsin[0,iv,j,i]
     28417                            apolygon[:,0] = xdimvarbnds2D[:,iy,ix]
     28418                            apolygon[:,1] = ydimvarbnds2D[:,iy,ix]
     28419                            ag = np.abs(fsci.module_scientific.shoelace_area_polygon(nvertex=4, poly=apolygon))
     28420                            print '  lluis iv:', iv, ':', iy, ix, 'ag:', ag, 'areas:', areas[iy,ix], 'percens:', percens[iv,j,i]
     28421                            slicearea = slicearea + areas[iy,ix]*percens[iv,j,i]
     28422                            aa = aa + areas[iy,ix]
     28423                            pp = pp + percens[iv,j,i]
     28424                        aanewvar[j,i]= slicearea
     28425                        print '  areas Lluis =', refblon1D[i,:], 'x', refblat1D[j,:], \
     28426                          'j i:', j,i, 'ap', ap, 'aanewvar:', slicearea, 'aa:', aa, 'pp:', pp
     28427                        if slicearea > ap: quit()
     28428
    2836628429            onewnc.sync()
    2836728430
     
    2845628519                    Nin = NpointsAB[jB,iB,jA,iA]
    2845728520                    innewvar[:,0:Nin,jB,iB,jA,iA] = pointsAB[:,0:Nin,jB,iB,jA,iA]
    28458                     print Nin, 'Lluis shapes sliceaA:', osliceaA.shape, 'sliceaB:', osliceaB.shape, \
    28459                     'pnewvar:', pnewvar.shape, 'anewvar:', anewvar.shape
    2846028521                    for iv in range(Nin):
    28461                         print 'Lluis jB, iB, jA, iA:', jB,iB,jA,iA
    28462                         print 'Lluis shapes inpointsA:', inpointsA.shape, 'inpointsB:', inpointsB.shape
    28463                         print 'Lluis inpointsA:', inpointsA[iv,jA,iA], 'inpointsB:', inpointsB[iv,jB,iB]
    2846428522                        pA = oslicepA[inpointsA[iv,jA,iA],jA,iA]
    2846528523                        pB = oslicepB[inpointsB[iv,jB,iB],jB,iB]
    28466                         print 'Lluis shapes pnewvar:', pnewvar.shape, 'pA:', pA, 'pB:', pB
    2846728524                        pnewvar[iv,jB,iB,jA,iA]= pA*pB
    2846828525                        ixA = sliceinA[1,inpointsA[iv,jA,iA],jA,iA]
    2846928526                        iyA = sliceinA[0,inpointsA[iv,jA,iA],jA,iA]
    28470                         print '  A:', ixA, iyA
    2847128527                        aA = osliceaA[iyA,ixA]
    2847228528                        ixB = sliceinB[1,inpointsB[iv,jB,iB],jB,iB]
    2847328529                        iyB = sliceinB[0,inpointsB[iv,jB,iB],jB,iB]
    28474                         print '  B:', ixB, iyB
    2847528530                        aB = osliceaB[iyB,ixB]
    2847628531                        anewvar[jB,iB,jA,iA]= (aA*pA)*(aB*pB)
Note: See TracChangeset for help on using the changeset viewer.