Changeset 2455


Ignore:
Timestamp:
Feb 28, 2016, 12:30:51 PM (8 years ago)
Author:
jyg
Message:

Implementation of a second order distribution on

sub-surfaces of longwave net radiance (Alain
Lahellec).

Introduction of the flag iflag_order2_sollw:

=1 ==> second order distribution.
=0 ==> linear distribution (Default).

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

Legend:

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

    r2159 r2455  
    22      ! $Header$
    33      !
    4 !jyg+nrlmd<
    5 !!!      integer iflag_pbl
    6 !!!      common/compbl/iflag_pbl
    7       integer iflag_pbl,iflag_pbl_split
    8       common/compbl/iflag_pbl,iflag_pbl_split
    9 !>jyg+nrlmd
     4!jyg+al1<
     5!!      integer iflag_pbl,iflag_pbl_split
     6!!      common/compbl/iflag_pbl,iflag_pbl_split
     7      integer iflag_pbl, iflag_pbl_split, iflag_order2_sollw
     8      common/compbl/iflag_pbl, iflag_pbl_split, iflag_order2_sollw
     9!>jyg+al1
    1010!$OMP THREADPRIVATE(/compbl/)
  • LMDZ5/trunk/libf/phylmd/conf_phys_m.F90

    r2443 r2455  
    179179    INTEGER,SAVE :: iflag_pbl_omp,lev_histhf_omp,lev_histday_omp,lev_histmth_omp
    180180    INTEGER,SAVE :: iflag_pbl_split_omp
     181    INTEGER,SAVE :: iflag_order2_sollw_omp
    181182    Integer, save :: lev_histins_omp, lev_histLES_omp
    182183    INTEGER, SAVE :: lev_histdayNMC_omp
     
    12871288    call getin('iflag_pbl_split',iflag_pbl_split_omp)
    12881289    !
     1290    !Config Key  = iflag_order2_sollw
     1291    !Config Desc =
     1292    !Config Def  = 0
     1293    !Config Help =
     1294    !
     1295    iflag_order2_sollw_omp = 0
     1296    call getin('iflag_order2_sollw',iflag_order2_sollw_omp)
     1297    !
    12891298    !Config Key  = iflag_thermals
    12901299    !Config Desc =
     
    17031712    f_gust_wk_omp = 0.
    17041713    call getin('f_gust_wk',f_gust_wk_omp)
     1714    !
     1715    !Config Key  = iflag_z0_oce
     1716    !Config Desc = 0 (z0h=z0m), 1 (diff. equ. for z0h and z0m), -1 (z0m=z0h=z0min)
     1717    !Config Def  = 0   ! z0h = z0m
     1718    !Config Help =
    17051719    !
    17061720    iflag_z0_oce_omp=0
     
    20252039    iflag_pbl = iflag_pbl_omp
    20262040    iflag_pbl_split = iflag_pbl_split_omp
     2041    iflag_order2_sollw = iflag_order2_sollw_omp
    20272042    lev_histhf = lev_histhf_omp
    20282043    lev_histday = lev_histday_omp
     
    22242239       END IF
    22252240    END IF
    2226 
    2227     ! Flag_aerosol cannot be to zero if we are in coupled mode for aerosol
    2228     IF (aerosol_couple .AND. flag_aerosol .eq. 0 ) THEN
    2229        CALL abort_physic('conf_phys', 'flag_aerosol cannot be to zero if aerosol_couple=y ', 1)
    2230     ENDIF
    2231 
    2232     ! flag_aerosol need to be different to zero if ok_cdnc is activated
    2233     IF (ok_cdnc .AND. flag_aerosol .eq. 0) THEN
    2234        CALL abort_physic('conf_phys', 'flag_aerosol cannot be to zero if ok_cdnc is activated ', 1)
    2235     ENDIF
    22362241
    22372242    ! ok_cdnc must be set to y if ok_aie is activated
     
    23572362    write(lunout,*)' iflag_pbl = ', iflag_pbl
    23582363    write(lunout,*)' iflag_pbl_split = ', iflag_pbl_split
     2364    write(lunout,*)' iflag_order2_sollw = ', iflag_order2_sollw
    23592365    write(lunout,*)' iflag_thermals = ', iflag_thermals
    23602366    write(lunout,*)' iflag_thermals_ed = ', iflag_thermals_ed
  • LMDZ5/trunk/libf/phylmd/dyn1d/1DUTILS.h

    r2347 r2455  
    43444344!
    43454345   INTEGER k,i
    4346    REAL zx_qs, rh, tnew, d_rh
     4346   REAL zx_qs, rh, tnew, d_rh, rhnew
    43474347
    43484348! Declaration des constantes et des fonctions thermodynamiques
     
    43614361        print *,'temp ',t
    43624362        print *,'hum ',q
     4363!
    43634364        DO k = 1,klev
    43644365         DO i = 1,klon
    4365 !!           IF (paprs(i,1)-pplay(i,k) .GT. 10000.) THEN
     4366           IF (paprs(i,1)-pplay(i,k) .GT. 10000.) THEN
    43664367            IF (t(i,k).LT.RTT) THEN
    43674368               zx_qs = qsats(t(i,k))/(pplay(i,k))
     
    43744375            d_rh = 1./tau*(rh_targ(i,k)-rh)
    43754376!
    4376             tnew = t(i,k)+d_t(i,k)
     4377            tnew = t(i,k)+d_t(i,k)*dtime
     4378!jyg<
     4379!   Formule pour q :
     4380!                         d_q = (1/tau) [rh_targ*qsat(T_new) - q]
     4381!
     4382!  Cette formule remplace d_q = (1/tau) [rh_targ - rh] qsat(T_new)
     4383!   qui n'était pas correcte.
     4384!
    43774385            IF (tnew.LT.RTT) THEN
    43784386               zx_qs = qsats(tnew)/(pplay(i,k))
     
    43804388               zx_qs = qsatl(tnew)/(pplay(i,k))
    43814389            ENDIF
    4382             d_q(i,k) = d_q(i,k) + d_rh*zx_qs
    4383 !
    4384             print *,' k,d_t,rh,d_rh,d_q ',    &
    4385                       k,d_t(i,k),rh,d_rh,d_q(i,k)
    4386 !!           ENDIF
     4390!!            d_q(i,k) = d_q(i,k) + d_rh*zx_qs
     4391            d_q(i,k) = d_q(i,k) + (1./tau)*(rh_targ(i,k)*zx_qs - q(i,k))
     4392            rhnew = (q(i,k)+d_q(i,k)*dtime)/zx_qs
     4393!
     4394            print *,' k,d_t,rh,d_rh,rhnew,d_q ',    &
     4395                      k,d_t(i,k),rh,d_rh,rhnew,d_q(i,k)
     4396           ENDIF
    43874397!
    43884398         ENDDO
  • LMDZ5/trunk/libf/phylmd/dyn1d/lmdz1d.F90

    r2422 r2455  
    932932!   Call physiq :
    933933!---------------------------------------------------------------------
    934 
    935934       call physiq(ngrid,llm, &
    936             firstcall,lastcall,timestep, &
    937             plev,play,phi,phis,presnivs, &
    938             u,v, rot, temp,q,omega2, &
    939             du_phys,dv_phys,dt_phys,dq,dpsrf)
    940         firstcall=.false.
     935                    firstcall,lastcall,timestep, &
     936                    plev,play,phi,phis,presnivs, &
     937                    u,v, rot, temp,q,omega2, &
     938                    du_phys,dv_phys,dt_phys,dq,dpsrf)
     939                firstcall=.false.
    941940
    942941!---------------------------------------------------------------------
  • LMDZ5/trunk/libf/phylmd/pbl_surface_mod.F90

    r2452 r2455  
    522522!albedo SB <<<
    523523    REAL, DIMENSION(klon)              :: ztsol
     524    REAL, DIMENSION(klon)              :: meansqT ! mean square deviation of subsurface temperatures
    524525    REAL, DIMENSION(klon)              :: alb_m  ! mean albedo for whole SW interval
    525526    REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q, y_d_t_diss
     
    11061107       ENDDO
    11071108    ENDDO
     1109!
     1110!<al1: second order corrections
     1111!- net = dwn -up; up=sig( T4 + 4sum%T3T' + 6sum%T2T'2 +...)
     1112   IF (iflag_order2_sollw == 1) THEN
     1113    meansqT(:) = 0. ! as working buffer
     1114    DO nsrf = 1, nbsrf
     1115     DO i = 1, klon
     1116      meansqT(i) = meansqT(i)+(ts(i,nsrf)-ztsol(i))**2 *pctsrf(i,nsrf)
     1117     END DO
     1118    END DO
     1119    DO nsrf = 1, nbsrf
     1120     DO i = 1, klon
     1121      sollw(i,nsrf) = sollw(i,nsrf) &
     1122                + 6.0*RSIGMA*ztsol(i)**2 *(meansqT(i)-(ztsol(i)-ts(i,nsrf))**2)
     1123     ENDDO
     1124    ENDDO
     1125   ENDIF   ! iflag_order2_sollw == 1
     1126!>al1
    11081127
    11091128!****************************************************************************************
     
    28112830       END DO
    28122831    END DO
     2832!
     2833!<al1 order 2 correction to zxtsol, for radiation computations (main atm effect of Ts)
     2834   IF (iflag_order2_sollw == 1) THEN
     2835    meansqT(:) = 0. ! as working buffer
     2836    DO nsrf = 1, nbsrf
     2837     DO i = 1, klon
     2838      meansqT(i) = meansqT(i)+(ts(i,nsrf)-zxtsol(i))**2 *pctsrf(i,nsrf)
     2839     END DO
     2840    END DO
     2841    zxtsol(:) = zxtsol(:)+1.5*meansqT(:)/zxtsol(:)
     2842   ENDIF   ! iflag_order2_sollw == 1
     2843!>al1
    28132844         
    28142845!!! jyg le 07/02/2012
  • LMDZ5/trunk/libf/phylmd/surf_ocean_mod.F90

    r2413 r2455  
    3636
    3737    include "clesphys.h"
    38     ! for cycle_diurne
     38    ! for cycle_diurne and for iflag_z0_oce==-1 (prescribed z0)
    3939
    4040! Input variables
     
    244244       z0h(i)=0.4*14e-6 / SQRT(cdragm(i) * tmp)
    245245    ENDDO
     246ELSE IF (iflag_z0_oce==-1) THEN
     247    DO i = 1, knon
     248       z0m(i) = z0min
     249       z0h(i) = z0min
     250    ENDDO
    246251ELSE
    247252       CALL abort_physic(modname,'version non prevue',1)
Note: See TracChangeset for help on using the changeset viewer.