Changeset 1180 in lmdz_wrf for trunk/tools


Ignore:
Timestamp:
Oct 12, 2016, 1:08:30 AM (9 years ago)
Author:
lfita
Message:

Working version with `npp' of 'reproject'

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_ForInterpolate.F90

    r1178 r1180  
    739739  REAL(r_k)                                              :: mindiffLl, dist
    740740  REAL(r_k), DIMENSION(idimx,idimy)                      :: difflonlat
     741  REAL(r_k), DIMENSION(idimx-1,idimy)                    :: difflon
     742  REAL(r_k), DIMENSION(idimx,idimy-1)                    :: difflat
    741743  REAL(r_k), DIMENSION(2)                                :: extremelon, extremelat, ipos
    742744  INTEGER, DIMENSION(2)                                  :: iLl
     
    760762  extremelon = (/ MINVAL(projlon), MAXVAL(projlon) /)
    761763  extremelat = (/ MINVAL(projlat), MAXVAL(projlat) /)
    762 
     764 
    763765  ! Using case outside loop to be more efficient
    764766  SELECT CASE(TRIM(intkind))
     
    815817          mindiffLl = MINVAL(difflonlat)
    816818          ipos = index2DArrayR(difflonlat, idimx, idimy, mindiffLl)
    817           outLlw(1:2,1,i,j) = ipos
     819          outLlw(1,1,i,j) = REAL(ipos(1))
     820          outLlw(2,1,i,j) = REAL(ipos(2))
    818821          outLlw(3,1,i,j) = 1.
    819           ix = outLlw(1,1,i,j)
    820           iy = outLlw(2,1,i,j)
    821           PRINT *,i,j,projlon(i,j),projlat(i,j),':',mindiffLl,'!',outLlw(1:2,1,i,j),'|',inlonv(ix,iy), &
    822             inlatv(ix,iy), '<>', MINVAL(inlonv), MINVAL(inlatv)
    823           IF (i > 1) THEN
    824             PRINT *,inlonv(1,1),inlatv(1,1),':',index2DArrayR(inlonv, idimx, idimy, MINVAL(inlonv))
    825             STOP
    826           END IF
     822          ix = INT(outLlw(1,1,i,j))
     823          iy = INT(outLlw(2,1,i,j))
    827824        END DO
    828825      END DO
     
    876873    CASE('dis')
    877874      DO i=1, pdimx
    878         DO j=1, pdimx
     875        DO j=1, pdimy
    879876          varout(i,j) = 0.
    880877          DO iv=1, 4
     
    888885    CASE('npp')
    889886      DO i=1, pdimx
    890         DO j=1, pdimx
     887        DO j=1, pdimy
    891888          ix = INT(outLlw(1,1,i,j))
    892889          iy = INT(outLlw(2,1,i,j))
     
    943940    CASE('dis')
    944941      DO i=1, pdimx
    945         DO j=1, pdimx
     942        DO j=1, pdimy
    946943          DO k=1, d3
    947944            varout(i,j,k) = 0.
     
    957954    CASE('npp')
    958955      DO i=1, pdimx
    959         DO j=1, pdimx
     956        DO j=1, pdimy
     957          ix = INT(outLlw(1,1,i,j))
     958          iy = INT(outLlw(2,1,i,j))
    960959          DO k=1, d3
    961             ix = INT(outLlw(1,1,i,j))
    962             iy = INT(outLlw(2,1,i,j))
    963960            varout(i,j,k) = var3Din(ix,iy,k)
    964961          END DO
     
    982979  REAL(r_k), DIMENSION(idimx,idimy), INTENT(in)          :: inlonv, inlatv
    983980  CHARACTER(LEN=50), INTENT(in)                          :: intkind
    984   REAL(r_k), DIMENSION(pdimx,pdimy,d3,d4), INTENT(in)    :: var4Din
     981  REAL(r_k), DIMENSION(idimx,idimy,d3,d4), INTENT(in)    :: var4Din
    985982  REAL(r_k), DIMENSION(pdimx,pdimy,d3,d4), INTENT(out)   :: varout
    986983
     
    10141011    CASE('dis')
    10151012      DO i=1, pdimx
    1016         DO j=1, pdimx
     1013        DO j=1, pdimy
    10171014          DO k=1, d3
    10181015            DO l=1, d4
     
    10301027    CASE('npp')
    10311028      DO i=1, pdimx
    1032         DO j=1, pdimx
     1029        DO j=1, pdimy
    10331030          ix = INT(outLlw(1,1,i,j))
    10341031          iy = INT(outLlw(2,1,i,j))
     
    10901087    CASE('dis')
    10911088      DO i=1, pdimx
    1092         DO j=1, pdimx
     1089        DO j=1, pdimy
    10931090          DO k=1, d3
    10941091            DO l=1, d4
     
    11081105    CASE('npp')
    11091106      DO i=1, pdimx
    1110         DO j=1, pdimx
     1107        DO j=1, pdimy
    11111108          ix = INT(outLlw(1,1,i,j))
    11121109          iy = INT(outLlw(2,1,i,j))
  • trunk/tools/nc_var_tools.py

    r1178 r1180  
    1586015860    olatvals0 = oprojlat[:]
    1586115861
     15862#    ilonvals0 = np.arange(0.,360.,360./oinlon.shape[0])
     15863#    ilatvals0 = np.arange(-90.,90.,180./oinlat.shape[0])
     15864#    olonvals0 = np.arange(0.5,359.5,359./oprojlon.shape[0])
     15865#    olatvals0 = np.arange(-89.5,89.5,179./oprojlat.shape[0])
     15866
    1586215867    # Getting 2D longitudes and latitudes
    1586315868    ilonvals, ilatvals = gen.lonlat2D(ilonvals0, ilatvals0)
     
    1590515910    rminlon = np.min(rlonvals)
    1590615911    rmaxlon = np.max(rlonvals)
     15912    iminlat = np.min(ilatvals)
     15913    imaxlat = np.max(ilatvals)
     15914    rminlat = np.min(rlatvals)
     15915    rmaxlat = np.max(rlatvals)
    1590715916
    1590815917    if np.abs(imaxlon - rmaxlon) > 100.:
     
    1591315922        print '    shifting input longitudes...'
    1591415923        if rmaxlon > 180.:
    15915             ilonvals = np.where(ilonvals < 0., ilonvals + 360., ilonvals)
     15924            ilonvals = np.where(ilonvals < 0., 360. + ilonvals, ilonvals)
    1591615925        else:
    1591715926            ilonvals = np.where(ilonvals > 180., ilonvals - 360., ilonvals)
     15927
     15928    flipy = False
     15929    if np.abs(ilatvals[0,0] - rlatvals[0,0]) > 90.:
     15930        print warnmsg
     15931        print '  ' + fname + ': reshaping latitudes!'
     15932        print '    input minimum lat:', ilatvals[0,0]
     15933        print '    target minimum lat:', rlatvals[0,0]
     15934        print '    flip input latitudes...'
     15935        ilatvals = ilatvals[::-1,:]
     15936        flipy = True
    1591815937
    1591915938    idx = ilonvals.shape[1]
     
    1597315992        print '  ' + fname + ": re-projecting '" + varn + "' ..."
    1597415993        ovarin = inf.variables[varn]
    15975         varin = ovarin[:]
     15994        if flipy:
     15995            varin = ovarin[...,::-1,:]
     15996        else:
     15997            varin = ovarin[:]
    1597615998
    1597715999        Nvarind = len(varin.shape)
     
    1598616008
    1598716009        if Nvarind == 2:
    15988             varout = fin.module_forinterpolate.var2d_intproj(var2din=varint,         \
     16010            varoutt = fin.module_forinterpolate.var2d_intproj(var2din=varint,        \
    1598916011              inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\
    1599016012              idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy)
    1599116013        elif Nvarind == 3:
    15992             varout = fin.module_forinterpolate.var3d_intproj(var3din=varint,         \
     16014            varoutt = fin.module_forinterpolate.var3d_intproj(var3din=varint,        \
    1599316015              inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\
    1599416016              idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0])
    1599516017        elif Nvarind == 4:
    15996             varout = fin.module_forinterpolate.var4d_intproj(var4din=varint,         \
     16018            varoutt = fin.module_forinterpolate.var4d_intproj(var4din=varint,        \
    1599716019              inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\
    1599816020              idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0],         \
    1599916021              d4=varin.shape[1])
    1600016022        elif Nvarind == 5:
    16001             varout = fin.module_forinterpolate.var5d_intproj(var5din=varint,         \
     16023            varoutt = fin.module_forinterpolate.var5d_intproj(var5din=varint,        \
    1600216024              inlonv=ilont, inlatv=ilatt, projlon=rlont, projlat=rlatt, intkind=kind,\
    1600316025              idimx=idx, idimy=idy, pdimx=rdx, pdimy=rdy, d3=varin.shape[0],         \
     
    1600716029            print '  ' + fname + ': rank:', Nvarind, 'for input data not ready !!'
    1600816030            quit(-1)
    16009    
     16031
     16032        # Recovering 'python' C-like space
     16033        varout = varoutt.transpose()
     16034
    1601016035        # Variable's dimensions and their related variables
    1601116036        vdims = list(ovarin.dimensions)
Note: See TracChangeset for help on using the changeset viewer.