Changeset 3616


Ignore:
Timestamp:
Dec 16, 2019, 2:10:03 PM (4 years ago)
Author:
oboucher
Message:

Addition of diagnostics for the 100 meter wind

Location:
LMDZ6/branches/IPSLCM6.0.15
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/IPSLCM6.0.15/DefLists/field_def_lmdz.xml

    r3554 r3616  
    4949        <field id="wind10max"  long_name="10m wind speed max"   unit="m/s" />
    5050        <field id="sfcWindmax" field_ref="wind10m" operation="maximum" />
     51        <field id="wind100m"   long_name="100-m wind speed"      unit="m/s" />
    5152        <field id="sicf"    long_name="Sea-ice fraction"        unit="-" />
    5253        <field id="q2m"     long_name="Specific humidity 2m"    unit="kg/kg" />
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/phys_output_ctrlout_mod.F90

    r3487 r3616  
    279279  TYPE(ctrl_out), SAVE :: o_wind10m = ctrl_out((/ 1, 1, 1, 10, 10, 10, 11, 11, 11, 11/), &
    280280    'wind10m', '10-m wind speed', 'm/s', (/ ('', i=1, 10) /))
     281  TYPE(ctrl_out), SAVE :: o_wind100m = ctrl_out((/ 1, 10, 10, 10, 10, 10, 11, 11, 11, 11/), &
     282    'wind100m', '100-m wind speed', 'm/s', (/ ('', i=1, 10) /))
    281283  TYPE(ctrl_out), SAVE :: o_wind10max = ctrl_out((/ 10, 1, 10, 10, 10, 10, 11, 11, 11, 11/), &
    282284    'wind10max', '10m wind speed max', 'm/s', &
  • LMDZ6/branches/IPSLCM6.0.15/libf/phylmd/phys_output_write_mod.F90

    r3483 r3616  
    3939         o_t2m_min_mon, o_t2m_max_mon, &
    4040         o_q2m, o_ustar, o_u10m, o_v10m, &
    41          o_wind10m, o_wind10max, o_gusts, o_sicf, &
     41         o_wind10m, o_wind10max, o_wind100m, o_gusts, o_sicf, &
    4242         o_psol, o_mass, o_qsurf, o_qsol, &
    4343         o_precip, o_rain_fall, o_rain_con, o_ndayrain, o_plul, o_pluc, o_plun, &
     
    367367    USE print_control_mod, ONLY: prt_level,lunout
    368368
    369 
    370369#ifdef CPP_XIOS
    371370    ! ug Pour les sorties XIOS
     
    379378#endif
    380379    USE tracinca_mod, ONLY: config_inca
     380
     381    USE vertical_layers_mod, ONLY: presnivs
    381382
    382383    IMPLICIT NONE
     
    421422    REAL, DIMENSION(klev,2) :: Ahyb_mid_bounds, Bhyb_mid_bounds
    422423    INTEGER :: ilev
     424    INTEGER, SAVE :: kmax_100m
     425!$OMP THREADPRIVATE(kmax_100m)
    423426#ifndef CPP_XIOS
    424427    REAL :: missing_val
     
    436439    LOGICAL, PARAMETER :: debug_strataer=.FALSE.
    437440#endif
     441    REAL,DIMENSION(klon,klev) :: z, dz
     442    REAL,DIMENSION(klon)      :: zrho, zt
    438443
    439444    ! On calcul le nouveau tau:
     
    446451    ELSE
    447452       iinitend = 1
     453    ENDIF
     454
     455    IF (.NOT.vars_defined) THEN
     456      kmax_100m=1
     457      DO k=1, klev-1
     458        IF (presnivs(k).GT.0.97*101325.) kmax_100m = k !--finding out max level for 100 m with a good margin
     459      ENDDO
    448460    ENDIF
    449461
     
    678690
    679691       CALL histwrite_phy(o_gusts, gustiness)
     692
     693       IF (vars_defined) THEN
     694          DO k = 1, kmax_100m                                      !--we could stop much lower
     695            zrho(:) = pplay(:,k)/t_seri(:,k)/RD                    ! air density in kg/m3
     696            dz(:,k) = (paprs(:,k)-paprs(:,k+1))/zrho(:)/RG         ! layer thickness in m
     697            IF (k==1) THEN
     698              z(:,1) = (paprs(:,1)-pplay(:,1))/zrho(:)/RG          ! altitude middle of first layer in m
     699              zt(:)  = dz(:,1)                                     ! altitude top of first layer in m
     700            ELSE
     701              z(:,k) = zt(:) + (paprs(:,k)-pplay(:,k))/zrho(:)/RG  ! altitude middle of layer k in m
     702              zt(:)  = zt(:) + dz(:,k)                             ! altitude top of layer k in m
     703            ENDIF
     704          ENDDO
     705          zx_tmp_fi2d(:)=missing_val
     706          DO k=1, kmax_100m-1                                      !--we could stop much lower
     707            DO i=1,klon
     708              IF (z(i,k).LT.100..AND.z(i,k+1).GE.100.) THEN
     709                zx_tmp_fi2d(i)=SQRT( (u_seri(i,k)+(100.-z(i,k))/(z(i,k+1)-z(i,k))*(u_seri(i,k+1)-u_seri(i,k)))**2.0 +  &
     710                                     (v_seri(i,k)+(100.-z(i,k))/(z(i,k+1)-z(i,k))*(v_seri(i,k+1)-v_seri(i,k)))**2.0 )
     711              ENDIF
     712            ENDDO
     713          ENDDO
     714       ENDIF
     715       CALL histwrite_phy(o_wind100m, zx_tmp_fi2d)
    680716
    681717       IF (vars_defined) THEN
Note: See TracChangeset for help on using the changeset viewer.