Changeset 742 in lmdz_wrf


Ignore:
Timestamp:
May 3, 2016, 12:17:51 PM (9 years ago)
Author:
lfita
Message:

Final seem to work version II

Location:
trunk/tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/module_ForInterpolate.F90

    r740 r742  
    216216  REAL(r_k), INTENT(out)                                 :: mindiffLl
    217217! Local
    218   INTEGER                                                :: i,j
     218  INTEGER                                                :: i
    219219  REAL(r_k), DIMENSION(Nperx,Npery)                      :: difffraclonlat
    220220  REAL(r_k)                                              :: mindifffracLl
     
    634634  INTEGER                                                :: ierr
    635635  INTEGER, DIMENSION(2)                                  :: ilonlat
    636   REAL(r_k), DIMENSION(dimx,dimy)                        :: difflonlat
    637636  REAL(r_k)                                              :: mindiffLl
    638637  INTEGER                                                :: Ninpts1
     
    743742END SUBROUTINE CoarseInterpolateExact
    744743
    745 SUBROUTINE Interpolate(projlon, projlat, lonvs, latvs, mindiff, ivar, newvarinpt,                     &
    746   newvarindiff, ilonlat, dimx, dimy, Ninpts)
     744SUBROUTINE Interpolate(projlon, projlat, lonvs, latvs, mindiff, inpt, diffs, ilonlat, dimx, dimy,     &
     745  Ninpts)
    747746! Subroutine which finds the closest grid point within a projection
    748747
     
    755754  REAL(r_k), DIMENSION(dimx,dimy), INTENT(in)            :: projlon, projlat
    756755  INTEGER, INTENT(in)                                    :: Ninpts
    757   REAL(r_k), DIMENSION(Ninpts), INTENT(in)               :: ivar, lonvs, latvs
     756  REAL(r_k), DIMENSION(Ninpts), INTENT(in)               :: lonvs, latvs
    758757  REAL(r_k), INTENT(in)                                  :: mindiff
    759   INTEGER, DIMENSION(Ninpts), INTENT(out)                :: newvarinpt
    760   REAL(r_k), DIMENSION(Ninpts), INTENT(out)              :: newvarindiff
     758  INTEGER, DIMENSION(Ninpts), INTENT(inout)              :: inpt
     759  REAL(r_k), DIMENSION(Ninpts), INTENT(out)              :: diffs
    761760  INTEGER, DIMENSION(Ninpts,2), INTENT(out)              :: ilonlat
    762761
    763762! Local
    764   INTEGER                                                :: iv,i,j
    765   INTEGER                                                :: ierr
     763  INTEGER                                                :: iv
    766764  REAL(r_k)                                              :: mindiffLl
    767765  INTEGER                                                :: Ninpts1
     
    776774! [lon/lat]vs: longitudes and latitudes of the points to interpolate
    777775! mindiff: minimal accepted distance to the target point
    778 ! ivar: values to localize in the target projection
    779 ! newvar: localisation of the [lon/lat]vs point in the target projection
    780 ! newvarin: number of point from the input data
    781 ! newvarinpt: integer value indicating if the value has been already located (0: no, 1: yes)
    782 ! newvarindiff: distance of point from the input data to the closest target point
     776! inpt: whether the point has already been localized
     777! diffs: distance of point from the input data to the closest target point
    783778! ilonlat: longitude and latitude of the point
    784779! ncid: netCDF output file id
     
    791786
    792787  DO iv=1,Ninpts
    793     IF (newvarinpt(iv) == 0) THEN
     788    IF (inpt(iv) <= 0) THEN
    794789! Not using the subroutine, not efficient!
    795790!      CALL lonlatFind(dimx, dimy, projlon, projlat, extremelon, extremelat, lonvs(iv), latvs(iv),     &
     
    818813
    819814        IF (ilonlat(iv,1) >= 0 .AND. ilonlat(iv,2) >= 0) THEN
    820           newvarinpt(iv) = 1
    821           newvarindiff(iv) = mindiffLl
     815          diffs(iv) = mindiffLl
     816          inpt(iv) = 1
    822817!          PRINT *,'Lluis iv:', newvarin(ilonlat(1),ilonlat(2)), ' localized:', newvarinpt(iv),        &
    823818!            ' values:', newvar(ilonlat(1),ilonlat(2)), ' invalues:', ivar(iv), ' mindist:',           &
     
    841836        STOP
    842837      END IF
    843     ELSE
    844       PRINT *,TRIM(ErrWarnMsg('err'))
    845       PRINT *,'  ' // TRIM(fname) // ': for point #', iv,' lon,lat in incomplet map:', lonvs(iv),     &
    846         ' ,', latvs(iv), ' there is not a set of lon,lat in the completed map closer than: ',         &
    847         mindiff, ' !!'
    848       PRINT *,'    found minimum difference:', mindiffLl
    849       STOP
    850838    END IF
    851839  END DO
  • trunk/tools/nc_var_tools.py

    r741 r742  
    1050110501    elif vtype == type(np.int32(1)):
    1050210502        typeinf = np.iinfo(np.int32)
    10503         if (abs(np.float64(val)) > typeinf.max):
     10503        if (np.abs(np.float64(val)) > typeinf.max):
    1050410504            print warnmsg
    1050510505            print '  ' + fname + ': value to transform ', val,' overpasses type:',   \
     
    1050810508            newval = abs(np.float64(val))/np.float64(val) * np.int32(typeinf.max)
    1050910509        else:
    10510             newval = np.int32(val)
     10510            newval = np.int32(np.float64(val))
    1051110511    elif vtype == type(np.int64(1)):
    1051210512        newval = np.int64(val)
     
    2043620436        for ir in range(ptsf[0],Ninpts,fracs):
    2043720437            iri = ir
    20438             ire = ir + fracs + 1
     20438            ire = ir + fracs
    2043920439            print iri,',',ire
    2044020440#            percendone(iri,Ninpts,0.5,'done:')
    20441             pts = np.arange(iri,ire,1, dtype='int32')
    20442             lonvss = lonvs[iri:ire].astype('float64')
    20443             latvss = latvs[iri:ire].astype('float64')
    20444             ovars = ovar[iri:ire].astype('float64')
     20441            lonvss = lonvs[iri:ire+1].astype('float64')
     20442            latvss = latvs[iri:ire+1].astype('float64')
     20443            inptss = newvarinpt[iri:ire+1].astype('int32')
    2044520444
    2044620445#            newvar,newvarin,newvarinpt[pts],newvarindiff[pts] =                      \
     
    2044820447#              lonvss, latvss, fracd, mindiff, ovars)
    2044920448# Slow way
    20450             newvarinpt[pts],newvarindiff[pts],ilonlatv =                             \
    20451               fin.module_forinterpolate.interpolate(projlon, projlat,                \
    20452               lonvss, latvss, np.float64(mindiff), ovars)
     20449            idiff, ilonlatv = fin.module_forinterpolate.interpolate(projlon, projlat,\
     20450              lonvss, latvss, np.float64(mindiff), inptss)
    2045320451            for i in range(fracs):
    20454 #                print 'Lluis: ilonlatv:', ilonlatv[i,:]
    20455                 newvar[ilonlatv[i,1],ilonlatv[i,0]] = ovars[i]
    20456                 newvarin[ilonlatv[i,1],ilonlatv[i,0]] = i
     20452                newvar[ilonlatv[i,0],ilonlatv[i,1]] = ovar[iri + i]
     20453                newvarin[ilonlatv[i,0],ilonlatv[i,1]] = iri + i
     20454                newvarinpt[iri+i] = 1
     20455                newvarindiff[iri+i] = idiff[i]
     20456
    2045720457            newnc.sync()
     20458#            newnc.close()
     20459#            quit()
    2045820460
    2045920461    elif kind == 'lonlat':
Note: See TracChangeset for help on using the changeset viewer.