Changeset 2188


Ignore:
Timestamp:
Jan 30, 2015, 5:25:12 PM (9 years ago)
Author:
fhourdin
Message:

Modification of the numerical scheme for coupling of surface temperature
with Orchidee.

Modification du schéma numérique pour le couplage de la température
de surface avec Orchidee.
Cette modification concerne la gestion des pas de temps différents pour
l'appel au rayonnement et au modèle de surface.

Orchidee prend en entrée le flux LW descendant.
Dans la version actuelle, on recalculait ce flux descendant à partir
du flux net issu du rayonnement, comme si il ne variait pas dans
le temps.
pbl_surface recalculait ensuite un flux descendant en ajoutant
au flux net descendant l'emission du sol, simga Ts4.
Mais du coup, si la température du sol partait en dérive froide entre
deux appels au rayonnement, on ne tenait pas compte du rappel
exercé par le rayonnement : le flux descendant ne bouge
pas et réhauffe la surface tandis que celle ci se refroidit de
moins en moins par émission LW.

Dans la nouvelle version, on passe le LWdown directement depuis
le rayonnement.
Il s'agit de deux hypothèses extrêmes :
Avant on supposait que le LWnet ne bougeait pas d'un appel au rayonnement
sur l'autre. Maintenant on suppose que c'est le LWdown.
La réalité est entre les deux car le WLdown a tendance à
suivre la température de surface, quand la température de l'air
et de la surface sont fortement couplées.

La nouvelle façon de faire devrait limiter la dérive vers le froid
dans les conditions de découplage nocturne. Un découplage extrême
avait amené à limiter la fonction de Richardson dans le calcul du coefficient
de trraînée Cd f(Ri) à F(ri) > 0.6 plutôt que 0.1 sur le cas 1D Dice.
Les corrections pourraient également résoudre des plantages
aléatoires sur l'Himalaya.

Jean-Louis Dufresne, Fuxing Wang, Frédéric Hourdin

PS : les changements concernent l'interface entre physiq et
pbl_surface, ainsi que phyredem et phyetat0 pour garantir 1+1=2.
On en a profité pour faire un brin de toilette.

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

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/pbl_surface_mod.F90

    r2186 r2188  
    172172       debut,     lafin,                              &
    173173       rlon,      rlat,      rugoro,   rmu0,          &
    174        zsig,      sollwd_m,  pphi,     cldt,          &
     174       zsig,      lwdown_m,  pphi,     cldt,          &
    175175       rain_f,    snow_f,    solsw_m,  sollw_m,       &
    176176       t,         q,         u,        v,             &
     
    182182       pplay,     paprs,     pctsrf,                  &
    183183       ts,        alb1, alb2,ustar, u10m, v10m,wstar, &
    184        lwdown_m,  cdragh,    cdragm,   zu1,    zv1,   &
     184       cdragh,    cdragm,   zu1,    zv1,              &
    185185       alb1_m,    alb2_m,    zxsens,   zxevap,        &
    186186       alb3_lic,  runoff,    snowhgt,   qsnow,     to_ice,    sissnow,  &
     
    327327! Martin
    328328    REAL, DIMENSION(klon),        INTENT(IN)        :: zsig    ! slope
    329     REAL, DIMENSION(klon),        INTENT(IN)        :: sollwd_m ! net longwave radiation at mean s   
     329    REAL, DIMENSION(klon),        INTENT(IN)        :: lwdown_m ! downward longwave radiation at mean s   
    330330    REAL, DIMENSION(klon),        INTENT(IN)        :: cldt    ! total cloud fraction
    331331    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: pphi    ! geopotential (m2/s2)
     
    367367! Output variables
    368368!****************************************************************************************
    369     REAL, DIMENSION(klon),        INTENT(OUT)       :: lwdown_m   ! Downcoming longwave radiation
    370369    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh     ! drag coefficient for T and Q
    371370    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragm     ! drag coefficient for wind
     
    780779    ! Martin
    781780    REAL, DIMENSION(klon, nbsrf)       :: sollwd ! net longwave radiation at surface
    782     REAL, DIMENSION(klon)              :: ysollwd
    783781    REAL, DIMENSION(klon)              :: ytoice
    784782    REAL, DIMENSION(klon)              :: ysnowhgt, yqsnow, ysissnow, yrunoff
     
    855853! 2a) Initialization of all argument variables with INTENT(OUT)
    856854!****************************************************************************************
    857  lwdown_m(:)=0.
    858855 cdragh(:)=0. ; cdragm(:)=0.
    859856 zu1(:)=0. ; zv1(:)=0.
     
    938935    ! Martin
    939936    ysnowhgt = 0.0; yqsnow = 0.0     ; yrunoff = 0.0   ; ytoice =0.0
    940     yalb3_new = 0.0  ; ysissnow = 0.0  ; ysollwd = 0.0
     937    yalb3_new = 0.0  ; ysissnow = 0.0
    941938    ypphi = 0.0   ; ycldt = 0.0      ; yrmu0 = 0.0
    942939    ! Martin
     
    11091106       DO i = 1, klon
    11101107          sollw(i,nsrf) = sollw_m(i) + 4.0*RSIGMA*ztsol(i)**3 * (ztsol(i)-ts(i,nsrf))
    1111           ! Martin
    1112           sollwd(i,nsrf)= sollwd_m(i)
    1113           ! Martin
     1108
     1109!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1110!         ! Martin
     1111! Apparently introduced for sisvat but not used
     1112!         sollwd(i,nsrf)= sollwd_m(i)
     1113!         ! Martin
     1114!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1115
    11141116          solsw(i,nsrf) = solsw_m(i) * (1.-alb(i,nsrf)) / (1.-alb_m(i))
    11151117       ENDDO
    11161118    ENDDO
    11171119
    1118 
    1119 ! Downwelling longwave radiation at mean surface
    1120     lwdown_m(:) = 0.0
    1121     DO i = 1, klon
    1122        lwdown_m(i) = sollw_m(i) + RSIGMA*ztsol(i)**4
    1123     ENDDO
    11241120
    11251121!****************************************************************************************
     
    11801176          yagesno(j) = agesno(i,nsrf)
    11811177          yfder(j)   = fder(i)
     1178          ylwdown(j) = lwdown_m(i)
    11821179          ysolsw(j)  = solsw(i,nsrf)
    11831180          ysollw(j)  = sollw(i,nsrf)
     
    17031700     
    17041701       CASE(is_ter)
    1705           ! ylwdown : to be removed, calculation is now done at land surface in surf_land
    1706           ylwdown(:)=0.0
    1707           DO i=1,knon
    1708              ylwdown(i)=lwdown_m(ni(i))
    1709           END DO
     1702          print*,"DEBUGTS",yts(knon/2),ylwdown(knon/2)
    17101703          CALL surf_land(itap, dtime, date0, jour, knon, ni,&
    17111704               rlon, rlat, &
     
    17461739          CALL surf_landice(itap, dtime, knon, ni, &
    17471740               rlon, rlat, debut, lafin, &
    1748                yrmu0, ysollwd, yalb, ypphi(:,1), &
     1741               yrmu0, ylwdown, yalb, ypphi(:,1), &
    17491742               ysolsw, ysollw, yts, ypplay(:,1), &
    17501743               ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&
  • LMDZ5/trunk/libf/phylmd/phyetat0.F90

    r2159 r2188  
    1212       du_gwd_rando, dv_gwd_rando, entr_therm, f0, falb1, falb2, fm_therm, &
    1313       ftsol, pbl_tke, pctsrf, q_ancien, radpas, radsol, rain_fall, ratqs, &
    14        rlat, rlon, rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, &
     14       rlat, rlon, rnebcon, rugoro, sig1, snow_fall, solaire_etat0, sollw, sollwdown, &
    1515       solsw, t_ancien, u_ancien, v_ancien, w01, wake_cstar, wake_deltaq, &
    1616       wake_deltat, wake_delta_pbl_TKE, delta_tsurf, wake_fip, wake_pe, &
     
    2424  USE indice_sol_mod, only: nbsrf, is_ter, epsfra, is_lic, is_oce, is_sic
    2525  USE ocean_slab_mod, ONLY: tslab, ocean_slab_init
     26
    2627
    2728  IMPLICIT none
     
    3738  include "thermcell.h"
    3839  include "compbl.h"
     40  include "YOMCST.h"
    3941  !======================================================================
    4042  CHARACTER*(*) fichnom
     
    5355  REAL fractint(klon)
    5456  REAL trs(klon, nbtr)
     57  REAL zts(klon)
    5558
    5659  CHARACTER*6 ocean_in
     
    513516  PRINT*, 'Rayonnement IF au sol sollw:', xmin, xmax
    514517
     518  CALL get_field("sollwdown", sollwdown, found)
     519  IF (.NOT. found) THEN
     520     PRINT*, 'phyetat0: Le champ <sollwdown> est absent'
     521     PRINT*, 'mis a zero'
     522     sollwdown = 0.
     523     do nsrf=1,nbsrf
     524        zts(:)=zts(:)+ftsol(:,nsrf)*pctsrf(:,nsrf)
     525     enddo
     526     sollwdown(:)=sollw(:)+RSIGMA*zts(:)**4
     527  ENDIF
     528  print*,'TS SOLL',zts(klon/2),sollw(klon/2),sollwdown(klon/2)
     529  xmin = 1.0E+20
     530  xmax = -1.0E+20
     531  DO i = 1, klon
     532     xmin = MIN(sollwdown(i), xmin)
     533     xmax = MAX(sollwdown(i), xmax)
     534  ENDDO
     535  PRINT*, 'Rayonnement IF au sol sollwdown:', xmin, xmax
     536
     537
    515538  ! Lecture derive des flux:
    516539
  • LMDZ5/trunk/libf/phylmd/phyredem.F90

    r2069 r2188  
    209209
    210210  CALL put_field("sollw", "Rayonnement IF a la surface", sollw)
     211
     212  CALL put_field("sollwdown", "Rayonnement down IF a la surface", sollw)
    211213
    212214  CALL put_field("fder", "Derive de flux", fder)
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r2181 r2188  
    18111811!>nrlmd+jyg
    18121812          pplay,     paprs,     pctsrf,             &
    1813           ftsol,falb1,falb2,ustar,u10m,v10m,wstar, &
    1814           sollwdown, cdragh,    cdragm,  u1,    v1, &
    1815           albsol1,   albsol2,   sens,    evap,   &
     1813          ftsol,falb1,falb2,ustar,u10m,v10m,wstar,  &
     1814          cdragh,    cdragm,  u1,    v1,            &
     1815          albsol1,   albsol2,   sens,    evap,      &
    18161816          albsol3_lic,runoff,   snowhgt,   qsnow, to_ice, sissnow, &
    18171817          zxtsol,    zxfluxlat, zt2m,    qsat2m,  &
  • LMDZ5/trunk/libf/phylmd/surf_land_mod.F90

    r1907 r2188  
    8585    REAL, DIMENSION(klon) :: pref_tmp
    8686    REAL, DIMENSION(klon) :: swdown     ! downwelling shortwave radiation at land surface
    87     REAL, DIMENSION(klon) :: lwdown     ! downwelling longwave radiation at land surface
    8887    REAL, DIMENSION(klon) :: epot_air           ! potential air temperature
    8988    REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used
     
    106105       pref_tmp(1:knon)  = pref(1:knon)/100.
    107106!
    108 !* Calculate incoming flux for SW and LW interval: swdown, lwdown
     107!* Calculate incoming flux for SW and LW interval: swdown
    109108!
    110109       swdown(:) = 0.0
    111        lwdown(:) = 0.0
    112110       DO i = 1, knon
    113111          swdown(i) = swnet(i)/(1-albedo(i))
    114           lwdown(i) = lwnet(i) + RSIGMA*tsurf(i)**4
    115112       END DO
    116113!
Note: See TracChangeset for help on using the changeset viewer.