Changeset 3899 for LMDZ5


Ignore:
Timestamp:
May 14, 2021, 7:12:13 PM (3 years ago)
Author:
lguez
Message:

Old work on cold pool death.

Location:
LMDZ5/branches/Cold_pool_death
Files:
5 added
7 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/Cold_pool_death/bld.cfg

    r2787 r3899  
    3737src::cosp    %COSP
    3838src::ext_src %EXT_SRC
     39src::cold_pool_death %SRC_PATH/%PHYS/Cold_pool_death
    3940
    4041bld::lib            lmdz
     
    9899bld::excl_dep        use::ifile_attr
    99100bld::excl_dep        use::ixml_tree
     101bld::excl_dep        use::numer_rec_95
    100102
    101103# Don't generate interface files
  • LMDZ5/branches/Cold_pool_death/libf/phylmd/calwake.F90

    r2870 r3899  
    1414    wake_omg, wake_dp_deltomg, &
    1515    wake_spread, wake_cstar, wake_d_deltat_gw, &
    16     wake_ddeltat, wake_ddeltaq, wake_ds, wake_ddens)
     16    wake_ddeltat, wake_ddeltaq, wake_ds, wake_ddens, itap)
    1717  ! **************************************************************
    1818  ! *
     
    6868  REAL, DIMENSION(klon, klev),   INTENT (OUT)        :: wake_ddeltat, wake_ddeltaq
    6969  REAL, DIMENSION(klon),         INTENT (OUT)        :: wake_ds, wake_ddens
     70  integer, intent(in):: itap ! index of call to physiq
    7071
    7172
     
    211212    dtke, dqke, omg, dp_deltomg, spread, cstar, &
    212213    d_deltat_gw, &
    213     d_deltatw, d_deltaqw, d_sigmaw, d_wdens)                     ! tendencies
     214    d_deltatw, d_deltaqw, d_sigmaw, d_wdens, itap)                     ! tendencies
    214215
    215216!
  • LMDZ5/branches/Cold_pool_death/libf/phylmd/phys_output_ctrlout_mod.F90

    r2886 r3899  
    14761476  TYPE(ctrl_out), SAVE :: o_wake_omg = ctrl_out((/ 4, 5, 10, 10, 10, 10, 11, 11, 11, 11/), &
    14771477    'wake_omg', 'wake_omg', ' ', (/ ('', i=1, 10) /))
     1478  TYPE(ctrl_out), SAVE :: o_wake_lifetime = ctrl_out((/ 4, 5, 10, 10, 10, 10, &
     1479       11, 11, 11, 11/), 'wake_lifetime', 'lifetime of wake', 's', &
     1480       (/ ('', i=1, 10) /))
     1481  TYPE(ctrl_out), SAVE :: o_wake_final_radius = ctrl_out((/ 4, 5, 10, 10, 10, &
     1482       10, 11, 11, 11, 11/), 'wake_final_radius', 'final radius of wake', 'm', &
     1483       (/ ('', i=1, 10) /))
     1484  TYPE(ctrl_out), SAVE :: o_wake_final_height = ctrl_out((/ 4, 5, 10, 10, 10, &
     1485       10, 11, 11, 11, 11/), 'wake_final_height', 'final height of wake', 'm', &
     1486       (/ ('', i=1, 10) /))
    14781487  TYPE(ctrl_out), SAVE :: o_wdtrainA = ctrl_out((/ 4, 5, 10,  4, 10, 10, 11, 11, 11, 11 /), &
    14791488    'wdtrainA', 'precipitation from AA', '-', (/ ('', i=1, 10) /))
  • LMDZ5/branches/Cold_pool_death/libf/phylmd/phys_output_var_mod.F90

    r2870 r3899  
    114114 !$OMP THREADPRIVATE(sens_prec_liq_o, sens_prec_sol_o,lat_prec_liq_o,lat_prec_sol_o)
    115115
     116  REAL, allocatable:: wake_lifetime(:) ! (klon) in s
     117  !$OMP THREADPRIVATE(wake_lifetime)
     118
     119  REAL, allocatable:: wake_final_radius(:), wake_final_height(:) ! (klon) in m
     120  !$OMP THREADPRIVATE(wake_final_radius, wake_final_height)
     121
    116122CONTAINS
    117123
     
    123129
    124130    include "clesphys.h"
     131
     132    include "thermcell.h"
     133    ! (for iflag_wake)
    125134
    126135    !------------------------------------------------
     
    163172    IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon))
    164173
     174    if (iflag_wake>=1) allocate(wake_lifetime(klon), wake_final_radius(klon), &
     175         wake_final_height(klon))
     176
    165177  END SUBROUTINE phys_output_var_init
    166178
  • LMDZ5/branches/Cold_pool_death/libf/phylmd/phys_output_write_mod.F90

    r2870 r3899  
    182182         o_map_emis_Anv, o_map_pcld_Anv, o_map_tcld_Anv, &
    183183         o_map_ntot, o_map_hc,o_map_hist,o_map_Cb,o_map_ThCi,o_map_Anv, &
    184          o_alt_tropo
     184         o_alt_tropo, o_wake_lifetime, o_wake_final_radius, o_wake_final_height
    185185
    186186#ifdef CPP_StratAer
     
    317317         map_emis_ThCi,map_pcld_ThCi,map_tcld_ThCi,&
    318318         map_emis_Anv,map_pcld_Anv,map_tcld_Anv, &
    319          alt_tropo
     319         alt_tropo, wake_lifetime, wake_final_radius, wake_final_height 
    320320
    321321    USE ocean_slab_mod, ONLY: nslay, tslab, slab_bils, slab_bilg, tice, &
     
    10571057             CALL water_int(klon,klev,zx_tmp_fi3d,zmasse,zx_tmp_fi2d)
    10581058             CALL histwrite_phy(o_dqwak2d, zx_tmp_fi2d)
     1059             CALL histwrite_phy(o_wake_lifetime, wake_lifetime)
     1060             CALL histwrite_phy(o_wake_final_radius, wake_final_radius)
     1061             CALL histwrite_phy(o_wake_final_height, wake_final_height)
    10591062          ENDIF ! iflag_wake>=1
    10601063          CALL histwrite_phy(o_ftd, ftd)
  • LMDZ5/branches/Cold_pool_death/libf/phylmd/physiq_mod.F90

    r2886 r3899  
    27722772               wake_omg, wake_dp_deltomg,  &
    27732773               wake_spread, wake_Cstar, d_deltat_wk_gw,  &
    2774                d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk)
     2774               d_deltat_wk, d_deltaq_wk, d_s_wk, d_dens_wk, itap)
    27752775          !
    27762776          !jyg    Reinitialize itapwk when wakes have been called
  • LMDZ5/branches/Cold_pool_death/libf/phylmd/wake.F90

    r2787 r3899  
    1111                dtke, dqke, omg, dp_deltomg, spread, cstar, &
    1212                d_deltat_gw, &
    13                 d_deltatw2, d_deltaqw2, d_sigmaw2, d_wdens2)                ! tendencies
     13                d_deltatw2, d_deltaqw2, d_sigmaw2, d_wdens2, itap)                ! tendencies
    1414
    1515
     
    2626  USE dimphy
    2727  use mod_phys_lmdz_para
     28  use cold_pool_death_m, only: cold_pool_death
    2829  USE print_control_mod, ONLY: prt_level
     30  use write_field_phy, only: WriteField_phy
     31  use phys_local_var_mod, only: zxtsol, q_seri, sens_w
     32  use phys_output_var_mod, only: wake_lifetime, wake_final_radius, &
     33       wake_final_height
     34
    2935  IMPLICIT NONE
    3036  ! ============================================================================
     
    158164  REAL, DIMENSION (klon, klev),     INTENT(OUT)         :: d_deltatw2, d_deltaqw2
    159165  REAL, DIMENSION (klon),           INTENT(OUT)         :: d_sigmaw2, d_wdens2
     166  integer, intent(in):: itap ! index of call to physiq
    160167
    161168  ! Variables internes
     
    272279
    273280  REAL, DIMENSION(klon)                                 :: sigmaw_in   ! pour les prints
     281
     282  real:: z_cp0  = 1000. ! initial height of cold pool, in m
     283  !$omp THREADPRIVATE(z_cp0)
     284
     285  real:: r0  = 2000. ! initial radius of cold pool, in m
     286  !$omp THREADPRIVATE(r0)
     287
     288  real:: h0  = 1000. ! initial height of environmental boundary layer, in m
     289  !$omp THREADPRIVATE(h0)
     290
     291  real:: eps_cp = 0.06 ! entrainment coefficient at the border of the cold pool
     292  !$omp THREADPRIVATE(eps_cp)
     293
     294  real:: beta = 0.2 ! entrainment at the top of the mixed layer
     295  !$omp THREADPRIVATE(beta)
     296
     297  logical:: av_thvu_constant = .true.
     298  !$omp THREADPRIVATE(av_thvu_constant)
     299
     300  real:: k_star = 0.68
     301  !$omp THREADPRIVATE(k_star)
     302
     303  real rate_uns(klon) ! mass rate in one unsaturated downdraft, in kg s-1
     304  real theta_vs(klon) ! virtual potential temperature at the surface, in K
     305
     306  real theta_v_uns(klon)
     307  ! virtual potential temperature of the unsaturated downdraft, in K
     308   
     309  integer return_code(klon)
    274310
    275311  ! -------------------------------------------------------------------------
     
    348384  WRITE(*,*) 'flag_wk_check_trgl=', flag_wk_check_trgl
    349385
     386  CALL getin_p('z_cp0', z_cp0)
     387  CALL getin_p('r0', r0)
     388  CALL getin_p('h0', h0)
     389  CALL getin_p('eps_cp', eps_cp)
     390  CALL getin_p('beta', beta)
     391  CALL getin_p('av_thvu_constant', av_thvu_constant)
     392  CALL getin_p('k_star', k_star)
    350393  first=.false.
    351394 endif
     
    19702013!>jyg
    19712014
    1972 
     2015  do i = 1, klon
     2016     if (ktopw(i) /= 0) then
     2017        rate_uns(i) = - amdwn(i, ktopw(i)) / wdens(i)
     2018     else
     2019        rate_uns(i) = -1.
     2020     end if
     2021  end do
     2022
     2023  theta_vs = zxtsol * (1e5 / ph(:, 1))**rkappa * (1 + epsim1 * q_seri(:, 1))
     2024
     2025  forall (i = 1:klon, ktopw(i) /= 0 .and. theta_vs(i) >= av_thvu(i)) &
     2026       theta_v_uns(i) = the(i, ktopw(i)) * (1. + epsim1 * qe(i, ktopw(i)))
     2027 
     2028  call WriteField_phy("thu", thu, klev)
     2029  call WriteField_phy("qu", qu, klev)
     2030  call WriteField_phy("av_thvu", av_thvu, 1)
     2031  call WriteField_phy("ktopw", real(ktopw), 1)
     2032  call WriteField_phy("wdens", wdens, 1)
     2033  call WriteField_phy("av_rho", av_rho, 1)
     2034  call WriteField_phy("rate_uns", rate_uns, 1)
     2035  call WriteField_phy("theta_vs", theta_vs, 1)
     2036  call WriteField_phy("the", the, klev)
     2037  call WriteField_phy("qe", qe, klev)
     2038
     2039  do i = 1, klon
     2040     call cold_pool_death(z_cp0, r0, h0, eps_cp, beta, av_thvu_constant, &
     2041          k_star, av_thvu(i), rate_uns(i), theta_vs(i), theta_v_uns(i), &
     2042          sens_w(i) / (av_rho(i) * rcpd * (theta_vs(i) - theta_v_uns(i))), &
     2043          av_rho(i), return_code(i), wake_lifetime(i), wake_final_radius(i), &
     2044          wake_final_height(i))
     2045  end do
     2046  if (any(return_code /= 0)) print *, &
     2047       "cold_pool_death: return_code /= 0 somewhere, itap  = ", itap
    19732048
    19742049  RETURN
Note: See TracChangeset for help on using the changeset viewer.