Ignore:
Timestamp:
May 13, 2013, 2:53:28 PM (12 years ago)
Author:
idelkadi
Message:

Concerns energy conservation.


The source terms of the TKE prognostic equation are diagnosed
from the tendencies (du, dv, dT) associated with subrgrid scale
motions and treated as an additional heat source.
Controled by a new key, iflag_ener_conserv :

0 no conservation

-1 old adhoc correction for kinetic E only (used for CMIP5)

1 conservation
101 conversion from kinetic to heat only
110 conversion from potential to heat only

iflag_ener_conserv=-1 kept as default value for a test period
iflag_ener_conserv=1 is the advisable value
Concerns clesphys.h, and conf_phys.F90
New routine : ener_conserv.F90, called by physic.
New outputs :
bils_ec, contribution to the energy budget of the column of the

additional heat source (in W/m2)

bils_kinetic : change kinetic energy of the column in physics (W/m2)
bils_enthalp : idem for the total column enthalphy
bils_latent : idem for latent heat
Modified files : clesphys.h, conf_phys_m.F90, physiq.F,

phys_output_mod.F90, phys_output_var_mod.F90, phys_output_write.h,
ener_conserv.F90

Location:
LMDZ5/trunk/libf/phylmd
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/clesphys.h

    r1737 r1753  
    1212       LOGICAL cycle_diurne,soil_model,new_oliq,ok_orodr,ok_orolf
    1313       LOGICAL ok_limitvrai
    14        INTEGER nbapp_rad, iflag_con
     14       INTEGER nbapp_rad, iflag_con,iflag_ener_conserv
    1515       REAL co2_ppm, co2_ppm0, solaire
    1616       REAL(kind=8) RCO2, RCH4, RN2O, RCFC11, RCFC12 
     
    7979       COMMON/clesphys/cycle_diurne, soil_model, new_oliq,              &
    8080     &     ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad, iflag_con       &
     81     &     , iflag_ener_conserv                                         &
    8182     &     , co2_ppm, solaire                                           &
    8283     &     , RCO2, RCH4, RN2O, RCFC11, RCFC12                           &
  • LMDZ5/trunk/libf/phylmd/conf_phys_m.F90

    r1737 r1753  
    169169  LOGICAL,SAVE :: ok_orodr_omp, ok_orolf_omp, ok_limitvrai_omp
    170170  INTEGER, SAVE :: nbapp_rad_omp, iflag_con_omp
     171  INTEGER, SAVE :: iflag_ener_conserv_omp
    171172  LOGICAL,SAVE :: ok_strato_omp
    172173  LOGICAL,SAVE :: ok_hines_omp
     
    653654       CALL getin('iflag_con',iflag_con_omp)
    654655
     656!Config  Key  = iflag_ener_conserv
     657!Config  Desc = Flag de convection
     658!Config  Def  = 1
     659!Config  Help = Flag  pour la convection les options suivantes existent :
     660!Config         -1 pour Kinetic energy correction
     661!Config         1  conservation kinetic and enthalpy
     662       iflag_ener_conserv_omp = -1
     663       CALL getin('iflag_ener_conserv',iflag_ener_conserv_omp)
     664
     665!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    655666!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    656667!!
     
    16371648    nbapp_rad = nbapp_rad_omp
    16381649    iflag_con = iflag_con_omp
     1650    iflag_ener_conserv = iflag_ener_conserv_omp
    16391651
    16401652    epmax = epmax_omp
     
    18451857  write(lunout,*)'nbapp_rad=',nbapp_rad
    18461858  write(lunout,*)'iflag_con=',iflag_con
     1859  write(lunout,*)'iflag_ener_conserv=',iflag_ener_conserv
    18471860  write(lunout,*)' epmax = ', epmax
    18481861  write(lunout,*)' ok_adj_ema = ', ok_adj_ema
  • LMDZ5/trunk/libf/phylmd/phys_output_mod.F90

    r1742 r1753  
    156156  type(ctrl_out),save :: o_LWdnSFCclr   = ctrl_out((/ 1, 4, 10, 10, 5, 10 /),'LWdnSFCclr')
    157157  type(ctrl_out),save :: o_bils         = ctrl_out((/ 1, 2, 10, 5, 10, 10 /),'bils')
     158  type(ctrl_out),save :: o_bils_ec         = ctrl_out((/ 1, 2, 10, 5, 10, 10 /),'bils_ec')
     159  type(ctrl_out),save :: o_bils_kinetic         = ctrl_out((/ 1, 2, 10, 5, 10, 10 /),'bils_kinetic')
     160  type(ctrl_out),save :: o_bils_enthalp         = ctrl_out((/ 1, 2, 10, 5, 10, 10 /),'bils_enthalp')
     161  type(ctrl_out),save :: o_bils_latent         = ctrl_out((/ 1, 2, 10, 5, 10, 10 /),'bils_latent')
    158162  type(ctrl_out),save :: o_sens         = ctrl_out((/ 1, 1, 10, 10, 5, 10 /),'sens')
    159163  type(ctrl_out),save :: o_fder         = ctrl_out((/ 1, 2, 10, 10, 10, 10 /),'fder')
     
    10381042          CALL histdef2d(iff,clef_stations(iff),o_LWdnSFCclr%flag,o_LWdnSFCclr%name, "Down. CS IR rad. at surface", "W/m2")
    10391043          CALL histdef2d(iff,clef_stations(iff),o_bils%flag,o_bils%name, "Surf. total heat flux", "W/m2")
     1044          CALL histdef2d(iff,clef_stations(iff),o_bils_ec%flag,o_bils_ec%name, "Surf. total heat flux", "W/m2")
     1045          CALL histdef2d(iff,clef_stations(iff),o_bils_kinetic%flag,o_bils_kinetic%name, "Surf. total heat flux", "W/m2")
     1046          CALL histdef2d(iff,clef_stations(iff),o_bils_enthalp%flag,o_bils_enthalp%name, "Surf. total heat flux", "W/m2")
     1047          CALL histdef2d(iff,clef_stations(iff),o_bils_latent%flag,o_bils_latent%name, "Surf. total heat flux", "W/m2")
    10401048          CALL histdef2d(iff,clef_stations(iff),o_sens%flag,o_sens%name, "Sensible heat flux", "W/m2")
    10411049          CALL histdef2d(iff,clef_stations(iff),o_fder%flag,o_fder%name, "Heat flux derivation", "W/m2")
  • LMDZ5/trunk/libf/phylmd/phys_output_var_mod.F90

    r1335 r1753  
    1515!$OMP THREADPRIVATE(snow_o, zfra_o)
    1616      INTEGER, save, ALLOCATABLE ::  itau_con(:)       ! Nombre de pas ou rflag <= 1
     17      REAL, ALLOCATABLE :: bils_ec(:) ! Contribution of energy conservation
     18      REAL, ALLOCATABLE :: bils_kinetic(:) ! bilan de chaleur au sol, kinetic
     19      REAL, ALLOCATABLE :: bils_enthalp(:) ! bilan de chaleur au sol
     20      REAL, ALLOCATABLE :: bils_latent(:) ! bilan de chaleur au sol
     21
    1722!$OMP THREADPRIVATE(itau_con)
    1823
     
    2732      allocate(snow_o(klon), zfra_o(klon))
    2833      allocate(itau_con(klon))
     34      allocate (bils_ec(klon),bils_kinetic(klon),bils_enthalp(klon),bils_latent(klon))
    2935
    3036END SUBROUTINE phys_output_var_init
     
    3642
    3743      deallocate(snow_o,zfra_o,itau_con)
     44      deallocate (bils_ec,bils_kinetic,bils_enthalp,bils_latent)
    3845
    3946END SUBROUTINE phys_output_var_end
  • LMDZ5/trunk/libf/phylmd/phys_output_write.h

    r1742 r1753  
    358358      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
    359359     $o_bils%name,itau_w,bils)
     360       ENDIF
     361
     362       IF (o_bils_ec%flag(iff)<=lev_files(iff)) THEN
     363      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
     364     $o_bils_ec%name,itau_w,bils_ec)
     365       ENDIF
     366
     367       IF (o_bils_kinetic%flag(iff)<=lev_files(iff)) THEN
     368      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
     369     $o_bils_kinetic%name,itau_w,bils_kinetic)
     370       ENDIF
     371
     372       IF (o_bils_latent%flag(iff)<=lev_files(iff)) THEN
     373      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
     374     $o_bils_latent%name,itau_w,bils_latent)
     375       ENDIF
     376
     377       IF (o_bils_enthalp%flag(iff)<=lev_files(iff)) THEN
     378      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
     379     $o_bils_enthalp%name,itau_w,bils_enthalp)
    360380       ENDIF
    361381
     
    20212041
    20222042       IF (o_dtec%flag(iff)<=lev_files(iff)) THEN
    2023       zx_tmp_fi3d(1:klon,1:klev)=d_t_ec(1:klon,1:klev)
     2043      zx_tmp_fi3d(1:klon,1:klev)=d_t_ec(1:klon,1:klev)/pdtphys
    20242044      CALL histwrite_phy(nid_files(iff),clef_stations(iff),
    20252045     $o_dtec%name,itau_w,zx_tmp_fi3d)
  • LMDZ5/trunk/libf/phylmd/physiq.F

    r1742 r1753  
    722722
    723723      REAL bils(klon) ! bilan de chaleur au sol
     724
    724725      REAL wfbilo(klon,nbsrf) ! bilan d'eau, pour chaque
    725726C                             ! type de sous-surface et pondere par la fraction
     
    751752      SAVE lmt_pas                ! frequence de mise a jour
    752753c$OMP THREADPRIVATE(lmt_pas)
    753       real zmasse(klon, llm)
     754      real zmasse(klon, llm),exner(klon, llm)
    754755C     (column-density of mass of air in a cell, in kg m-2)
    755756      real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2
     
    37483749c Accumuler les variables a stocker dans les fichiers histoire:
    37493750c
    3750 c+jld ec_conser
    3751       DO k = 1, klev
    3752       DO i = 1, klon
    3753         ZRCPD = RCPD*(1.0+RVTMP2*q_seri(i,k))
    3754         d_t_ec(i,k)=0.5/ZRCPD
    3755      $      *(u(i,k)**2+v(i,k)**2-u_seri(i,k)**2-v_seri(i,k)**2)
    3756       ENDDO
    3757       ENDDO
    3758 
    3759       DO k = 1, klev
    3760       DO i = 1, klon
    3761         t_seri(i,k)=t_seri(i,k)+d_t_ec(i,k)
    3762         d_t_ec(i,k) = d_t_ec(i,k)/dtime
    3763        END DO
    3764       END DO
    3765 c-jld ec_conser
     3751
     3752!================================================================
     3753! Conversion of kinetic and potential energy into heat, for
     3754! parameterisation of subgrid-scale motions
     3755!================================================================
     3756
     3757      d_t_ec(:,:)=0.
     3758      forall (k=1: llm) exner(:, k) = (pplay(:, k)/paprs(:,1))**RKAPPA
     3759      CALL ener_conserv(klon,klev,pdtphys,u,v,t,qx(:,:,ivap),
     3760     s        u_seri,v_seri,t_seri,q_seri,
     3761     s        zmasse,exner,d_t_ec)
     3762      t_seri(:,:)=t_seri(:,:)+d_t_ec(:,:)
     3763
    37663764cIM
    37673765      IF (ip_ebil_phy.ge.1) THEN
     
    38333831      END IF
    38343832
    3835 c=============================================================
     3833
    38363834c
    38373835c Convertir les incrementations en tendances
Note: See TracChangeset for help on using the changeset viewer.