Changeset 1762 in lmdz_wrf


Ignore:
Timestamp:
Jan 24, 2018, 3:54:22 PM (7 years ago)
Author:
lfita
Message:

Adding:

`mrso': total soil moisture
`slw': total liquid water

Location:
trunk/tools
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/diag_tools.py

    r1759 r1762  
    639639    return virtual
    640640
     641def Forcompute_zint(var, zinterlev, zweights, dimns, dimvns):
     642    """ Function to compute a vertical integration of volumetric quantities
     643    Forcompute_mrso(smois, dsoil, dimns, dimvns)
     644      [var]= values (assuming [[t],z,y,x]) [volumetric units]
     645      [zinterlev]= depth of each layer (assuming [z]) [same z units as var]
     646      [zweights]= weights to apply to each level (just in case...)
     647      [dimns]= list of the name of the dimensions of [smois]
     648      [dimvns]= list of the name of the variables with the values of the
     649        dimensions of [smois]
     650    """
     651    fname = 'Forcompute_zint'
     652
     653    vardims = dimns[:]
     654    varvdims = dimvns[:]
     655
     656    if len(var.shape) == 4:
     657        zint = np.zeros((var.shape[0],var.shape[2],var.shape[3]), dtype=np.float)
     658        dx = var.shape[3]
     659        dy = var.shape[2]
     660        dz = var.shape[1]
     661        dt = var.shape[0]
     662        vardims.pop(1)
     663        varvdims.pop(1)
     664
     665        zintvart=fdin.module_fordiagnostics.compute_zint4d(var4d=var[:].transpose(), \
     666          dlev=zinterlev[:].transpose(), zweight=zweights[:].transpose(), d1=dx,     \
     667          d2=dy, d3=dz, d4=dt)
     668        zintvar = zintvart.transpose()
     669    else:
     670        print errormsg
     671        print '  ' + fname + ': rank', len(var.shape), 'not ready !!'
     672        print '  it only computes 4D [t,z,y,x] rank values'
     673        quit(-1)
     674
     675    return zintvar, vardims, varvdims
    641676
    642677def var_mslp(pres, psfc, ter, tk, qv):
  • trunk/tools/diagnostics.inf

    r1760 r1762  
    1616hurs, TSrhs, psfc@t@q
    1717hurs, WRFrhs, PSFC@T2@Q2
     18mrso, WRFmrso,  SMOIS@DZS
    1819p, WRFp, P@PB
    1920pr, RAINTOT, RAINC@RAINNC@WRFtime
     
    2627rvor, rvor, U@V
    2728rvors, WRFrvors, U10@V10@WRFpos
     29slw, WRFslw,  SH2O@DZS
    2830ta, WRFt, T@P@PB
    2931td, WRFtd, WRFp@WRFt2@QVAPOR
  • trunk/tools/diagnostics.py

    r1761 r1762  
    7878availdiags = ['ACRAINTOT', 'accum', 'clt', 'cllmh', 'deaccum', 'LMDZrh', 'mslp',     \
    7979  'OMEGAw', 'RAINTOT',                                                               \
    80   'rvors', 'td', 'turbulence', 'WRFclivi', 'WRFclwvl', 'WRFgeop', 'WRFp',            \
    81   'WRFpsl_ptarget', 'WRFrvors', 'ws', 'wds', 'wss', 'WRFheight', 'WRFheightrel',     \
    82   'WRFua', 'WRFva']
     80  'rvors', 'td', 'turbulence', 'WRFcape_afwa', 'WRFclivi', 'WRFclwvl', 'WRFgeop',    \
     81  'WRFmrso', 'WRFp',                                                                 \
     82  'WRFpsl_ptarget', 'WRFrvors', 'WRFslw', 'ws', 'wds', 'wss', 'WRFheight',           \
     83  'WRFheightrel', 'WRFua', 'WRFva']
    8384
    8485methods = ['accum', 'deaccum']
     
    489490
    490491        ncvar.insert_variable(ncobj, 'hurs', diagout, diagoutd, diagoutvd, newnc)
     492
     493# mrso: total soil moisture SMOIS, DZS
     494    elif diagn == 'WRFmrso':
     495           
     496        var0 = ncobj.variables[depvars[0]][:]
     497        var10 = ncobj.variables[depvars[1]][:]
     498        dnamesvar = list(ncobj.variables[depvars[0]].dimensions)
     499        dvnamesvar = ncvar.var_dim_dimv(dnamesvar,dnames,dvnames)
     500
     501        var1 = var0.copy()*0.
     502        var2 = var0.copy()*0.+1.
     503        # Must be a better way....
     504        for j in range(var0.shape[2]):
     505          for i in range(var0.shape[3]):
     506              var1[:,:,j,i] = var10
     507
     508        diagout, diagoutd, diagoutvd = diag.Forcompute_zint(var0, var1, var2,        \
     509          dnamesvar, dvnamesvar)
     510
     511        # Removing the nonChecking variable-dimensions from the initial list
     512        varsadd = []
     513        diagoutvd = list(dvnames)
     514        for nonvd in NONchkvardims:
     515            if gen.searchInlist(dvnames,nonvd): diagoutvd.remove(nonvd)
     516            varsadd.append(nonvd)
     517        ncvar.insert_variable(ncobj, 'mrso', diagout, diagoutd, diagoutvd, newnc)
    491518
    492519# mslp: mean sea level pressure (pres, psfc, terrain, temp, qv)
     
    601628        ncvar.insert_variable(ncobj, 'hurs', diagout, diagoutd, diagoutvd, newnc)
    602629
     630# slw: total soil liquid water SH2O, DZS
     631    elif diagn == 'WRFslw':
     632           
     633        var0 = ncobj.variables[depvars[0]][:]
     634        var10 = ncobj.variables[depvars[1]][:]
     635        dnamesvar = list(ncobj.variables[depvars[0]].dimensions)
     636        dvnamesvar = ncvar.var_dim_dimv(dnamesvar,dnames,dvnames)
     637
     638        var1 = var0.copy()*0.
     639        var2 = var0.copy()*0.+1.
     640        # Must be a better way....
     641        for j in range(var0.shape[2]):
     642          for i in range(var0.shape[3]):
     643              var1[:,:,j,i] = var10
     644
     645        diagout, diagoutd, diagoutvd = diag.Forcompute_zint(var0, var1, var2,        \
     646          dnamesvar, dvnamesvar)
     647
     648        # Removing the nonChecking variable-dimensions from the initial list
     649        varsadd = []
     650        diagoutvd = list(dvnames)
     651        for nonvd in NONchkvardims:
     652            if gen.searchInlist(dvnames,nonvd): diagoutvd.remove(nonvd)
     653            varsadd.append(nonvd)
     654        ncvar.insert_variable(ncobj, 'slw', diagout, diagoutd, diagoutvd, newnc)
     655
    603656# td (psfc, t, q) from TimeSeries files
    604657    elif diagn == 'TStd' or diagn == 'td':
  • trunk/tools/module_ForDiagnostics.f90

    r1761 r1762  
    533533
    534534  END SUBROUTINE compute_psl_ptarget4d2
     535
     536  SUBROUTINE compute_massvertint1D(var, mutot, dz, deta, integral)
     537    ! Subroutine to vertically integrate a 1D variable in eta vertical coordinates
     538
     539    IMPLICIT NONE
     540
     541    INTEGER, INTENT(in)                                  :: dz
     542    REAL(r_k), INTENT(in)                                :: mutot
     543    REAL(r_k), DIMENSION(dz), INTENT(in)                 :: var, deta
     544    REAL(r_k), INTENT(out)                               :: integral
     545
     546! Local
     547    INTEGER                                              :: k
     548
     549!!!!!!! Variables
     550! var: vertical variable to integrate (assuming kgkg-1)
     551! mutot: total dry-air mass in column
     552! dz: vertical dimension
     553! deta: eta-levels difference between full eta-layers
     554
     555    fname = 'compute_massvertint1D'
     556
     557!    integral=0.
     558!    DO k=1,dz
     559!      integral = integral + var(k)*deta(k)
     560!    END DO
     561     integral = SUM(var*deta)
     562
     563    integral=integral*mutot/g
     564
     565    RETURN
     566
     567  END SUBROUTINE compute_massvertint1D
     568
     569  SUBROUTINE compute_zint4D(var4D, dlev, zweight, d1, d2, d3, d4, int3D)
     570    ! Subroutine to vertically integrate a 4D variable in any vertical coordinates
     571
     572    IMPLICIT NONE
     573
     574    INTEGER, INTENT(in)                                  :: d1,d2,d3,d4
     575    REAL(r_k), DIMENSION(d1,d2,d3,d4), INTENT(in)        :: var4D, dlev, zweight
     576    REAL(r_k), DIMENSION(d1,d2,d4), INTENT(out)          :: int3D
     577
     578! Local
     579    INTEGER                                              :: i,j,l
     580
     581!!!!!!! Variables
     582! var4D: vertical variable to integrate
     583! dlev: height of layers
     584! zweight: weight for each level to be applied (=1. for no effect)
     585
     586    fname = 'compute_zint4D'
     587
     588    DO i=1,d1
     589      DO j=1,d2
     590        DO l=1,d4
     591          CALL compute_vertint1D(var4D(i,j,:,l),d3, dlev(i,j,:,l), zweight(i,j,:,l), &
     592            int3D(i,j,l))
     593        END DO
     594      END DO
     595    END DO
     596
     597    RETURN
     598
     599  END SUBROUTINE compute_zint4D
     600
     601  SUBROUTINE compute_vertint1D(var, dz, deta, zweight, integral)
     602    ! Subroutine to vertically integrate a 1D variable in any vertical coordinates
     603
     604    IMPLICIT NONE
     605
     606    INTEGER, INTENT(in)                                  :: dz
     607    REAL(r_k), DIMENSION(dz), INTENT(in)                 :: var, deta, zweight
     608    REAL(r_k), INTENT(out)                               :: integral
     609
     610! Local
     611    INTEGER                                              :: k
     612
     613!!!!!!! Variables
     614! var: vertical variable to integrate
     615! dz: vertical dimension
     616! deta: eta-levels difference between layers
     617! zweight: weight for each level to be applied (=1. for no effect)
     618
     619    fname = 'compute_vertint1D'
     620
     621!    integral=0.
     622!    DO k=1,dz
     623!      integral = integral + var(k)*deta(k)
     624!    END DO
     625    integral = SUM(var*deta*zweight)
     626
     627    RETURN
     628
     629  END SUBROUTINE compute_vertint1D
    535630
    536631  SUBROUTINE compute_tv4d(ta,qv,tv,d1,d2,d3,d4)
  • trunk/tools/variables_values.dat

    r1759 r1762  
    249249lon, lon, longitude, 0., 360., longitude, degrees_East, seismic
    250250nav_lon, lon, longitude, 0., 360., longitude, degrees_East, seismic
     251mrso, mrso, soil_moisture_content, 0., 0.003, Total|soil|moisture|content, kg m-2, Blues
    251252mrsos, mrsos, moisture_content_of_soil_layer, 0., 0.003, Moisture|content|of|first|soil|layer, kg m-2, Blues
    252253SMOIS, mrsos, moisture_content_of_soil_layer, 0., 0.003, Moisture|content|of|first|soil|layer, kg m-2, Blues
     
    397398s, s, snow_mixing_ratio, 0., 0.0003, snow|mixing|ratio, kgkg-1, Purples
    398399QSNOW, s, snow_mixing_ratio, 0., 0.0003, snow|mixing|ratio, kgkg-1, Purples
     400slw, slw, soil_liquid_water, 0., 0.003, Total|soil|liquid|water|content, kg m-2, Blues
    399401sftls, sftls, land_binary_mask, 0., 1., land|mask, 1, bwr
    400402LANDMASK, sftls, land_binary_mask, 0., 1., land|mask, 1, bwr
Note: See TracChangeset for help on using the changeset viewer.