Changeset 2208 in lmdz_wrf


Ignore:
Timestamp:
Oct 31, 2018, 8:23:47 PM (6 years ago)
Author:
lfita
Message:

Adding:

  • `range_faces': Function to compute faces [uphill, valley, downhill] of sections of a mountain rage, along a given face
Location:
trunk/tools
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/diag_tools.py

    r2140 r2208  
    13671367
    13681368    return var1, var2, vardims, varvdims
     1369
     1370def Forcompute_range_faces(lon, lat, hgt, face, dimns, dimvns):
     1371    """ Function to compute faces [uphill, valley, downhill] of sections of a mountain
     1372      rage, along a given face
     1373    Forcompute_range_faces(lon, lat, hgt, face, dimns, dimvns)
     1374      [lon]= longitude values (assuming [y,x]) [degrees east]
     1375      [lat]= latitude values (assuming [y,x]) [degrees north]
     1376      [hgt]= height values (assuming [y,x]) [m]
     1377      [dimns]= list of the name of the dimensions of [smois]
     1378      [dimvns]= list of the name of the variables with the values of the
     1379        dimensions of [smois]
     1380    """
     1381    fname = 'Forcompute_range_faces'
     1382
     1383    vardims = dimns[:]
     1384    varvdims = dimvns[:]
     1385
     1386    if len(var.shape) == 2:
     1387        faces = np.zeros((var.shape[0],var.shape[1]), dtype=np.float)
     1388        dx = var.shape[1]
     1389        dy = var.shape[0]
     1390
     1391        facest=fdin.module_fordiagnostics.compute_range_faces(lon=lon[:].transpose(),\
     1392          lat=lat[:].transpose(), hgt=hgt[:].transpose(), face=face, d1=dx, d2=dy)
     1393        faces = facest.transpose()
     1394    else:
     1395        print errormsg
     1396        print '  ' + fname + ': rank', len(var.shape), 'not ready !!'
     1397        print '  it only computes 2D [y,x] rank values'
     1398        quit(-1)
     1399
     1400    return faces, vardims, varvdims
    13691401
    13701402####### ###### ##### #### ### ## # END Fortran diagnostics
  • trunk/tools/diagnostics.py

    r2207 r2208  
    676676        ncvar.insert_variable(ncobj, 'hurs', diagout, diagoutd, diagoutvd, newnc)
    677677
     678# range_faces: LON, LAT, HGT, 'face,[WE],[SN]'
     679    elif diagn == 'range_faces':
     680           
     681        var0 = ncobj.variables[depvars[0]][:]
     682        var1 = ncobj.variables[depvars[1]][:]
     683        var2 = ncobj.variables[depvars[2]][:]
     684        var3 = depvars[3].split(',')[1]
     685
     686        dnamesvar = list(ncobj.variables[depvars[0]].dimensions)
     687        dvnamesvar = ncvar.var_dim_dimv(dnamesvar,dnames,dvnames)
     688
     689        diagout, diagoutd, diagoutvd = diag.Forcompute_range_faces(var0, var1, var2, \
     690          var3, dnamesvar, dvnamesvar)
     691
     692        # Removing the nonChecking variable-dimensions from the initial list
     693        varsadd = []
     694        diagoutvd = list(dvnames)
     695        for nonvd in NONchkvardims:
     696            if gen.searchInlist(dvnames,nonvd): diagoutvd.remove(nonvd)
     697            varsadd.append(nonvd)
     698        ncvar.insert_variable(ncobj, 'range_faces', diagout, diagoutd, diagoutvd,    \
     699          newnc)
     700
    678701# mrso: total soil moisture SMOIS, DZS
    679702    elif diagn == 'WRFmrso':
  • trunk/tools/module_ForDiagnostics.f90

    r1909 r2208  
    948948  END SUBROUTINE compute_fog_FRAML50
    949949
     950  SUBROUTINE compute_range_faces(d1, d2, lon, lat, hgt, face, faces)
     951! Subroutine to compute faces [uphill, valleys, downhill] of a mountain range along a given face
     952
     953    IMPLICIT NONE
     954
     955    INTEGER, INTENT(in)                                  :: d1, d2
     956    REAL(r_k), DIMENSION(d1,d2), INTENT(in)              :: lon, lat, hgt
     957    CHARACTER(len=*)                                     :: face
     958    INTEGER, DIMENSION(d1,d2), INTENT(out)               :: faces
     959 
     960! Local
     961    INTEGER                                              :: i, j
     962
     963!!!!!!! Variables
     964! lon: longitude [degrees east]
     965! lat: latitude [degrees north]
     966! hgt: topograpical height [m]
     967
     968    fname = 'compute_range_faces'
     969
     970    IF (TRIM(face) == 'WE') THEN
     971      DO j=1, d2
     972        CALL var_range_faces(d1, lon(:,j), lat(:,j), hgt(:,j), faces(:,j))
     973      END DO
     974    ELSE IF (TRIM(face) == 'SN') THEN
     975      DO i=1, d1
     976        CALL var_range_faces(d2, lon(i,:), lat(i,:), hgt(i,:), faces(i,:))
     977      END DO
     978    ELSE
     979      PRINT *,TRIM(ErrWarnMsg('err'))
     980      PRINT *,'  ' // TRIM(fname) // ": wrong face: '" // TRIM(face) // "' !!"
     981      PRINT *,'    accepted ones: WE, SN'
     982      STOP
     983    END IF
     984
     985    RETURN
     986
     987  END SUBROUTINE compute_range_faces
     988
    950989END MODULE module_ForDiagnostics
  • trunk/tools/module_ForDiagnosticsVars.f90

    r1909 r2208  
    15781578  END SUBROUTINE var_fog_FRAML50
    15791579
     1580  SUBROUTINE var_range_faces(d, lon, lat, hgt, faces)
     1581! Subroutine to compute faces of a monuntain range along a face
     1582
     1583    IMPLICIT NONE
     1584
     1585    INTEGER, INTENT(in)                                  :: d
     1586    REAL, DIMENSION(d), INTENT(in)                       :: lon, lat, hgt
     1587    INTEGER, DIMENSION(d), INTENT(out)                   :: faces
     1588
     1589! Local
     1590    INTEGER                                              :: i, Nfaces, Npeaks
     1591    INTEGER, DIMENSION(1)                                :: ihmax
     1592    REAL                                                 :: hgtmax
     1593    INTEGER, DIMENSION(d)                                :: ddhgt, Ndhgt, ipeaks
     1594    REAL, DIMENSION(d)                                   :: dhgt, peaks
     1595
     1596!!!!!!! Variables
     1597! lon: longitude [degrees east]
     1598! lat: latitude [degrees north]
     1599! hgt: topograpical height [m]
     1600
     1601    fname = 'var_range_faces'
     1602
     1603    PRINT *, 'heights:', hgt
     1604
     1605    ! Looking for the maximum height
     1606    hgtmax = MAXVAL(hgt)
     1607    ihmax = MAXLOC(hgt)
     1608
     1609    PRINT *, 'height max:', hgtmax, 'location:', ihmax
     1610
     1611    ! range slope
     1612    dhgt(1:d) = hgt(2:d) - hgt(1:d-1)
     1613
     1614    PRINT *, 'slope:', dhgt
     1615
     1616    ! Classification
     1617    Npeaks = 0
     1618    DO i=1, d-1
     1619      IF (dhgt(i) > 0.) THEN
     1620        faces(i) = 1
     1621      ELSE
     1622        faces(i) = -1
     1623      END IF
     1624      ! peaks
     1625      IF (dhgt(i) > 0. .AND. dhgt(i+1) < 0.) THEN
     1626        Npeaks = Npeaks + 1
     1627        peaks(Npeaks) = hgt(i+1)
     1628        ipeaks(Npeaks) = i+1
     1629      END IF
     1630    END DO
     1631
     1632    PRINT *, 'faces:', faces
     1633    PRINT *, Npeaks, ' peaks:', peaks(1:Npeaks), ' ipeak:', ipeaks(1:Npeaks)
     1634
     1635    ! tendency of the slope
     1636    ddhgt(1) = 1
     1637    Nfaces = 1
     1638    Ndhgt(Nfaces) = 1
     1639    DO i=2, d-1
     1640      IF (faces(i) /= faces(i-1)) THEN
     1641        ddhgt(i) = ddhgt(i-1) + 1
     1642        Nfaces = Nfaces + 1
     1643        Ndhgt(Nfaces) = 1
     1644      ELSE
     1645        Ndhgt(Nfaces) = Ndhgt(Nfaces) + 1
     1646      END IF
     1647    END DO
     1648
     1649    PRINT *, 'ddhgt:', ddhgt
     1650    PRINT *, Nfaces, ' length faces:', Ndhgt(1:Nfaces)
     1651
     1652    RETURN
     1653
     1654  END SUBROUTINE var_range_faces
     1655
    15801656  SUBROUTINE var_hur(t, press, qv, hur)
    15811657! Subroutine to compute relative humidity using August-Roche-Magnus approximation [1]
Note: See TracChangeset for help on using the changeset viewer.