Changeset 888


Ignore:
Timestamp:
Feb 4, 2008, 5:24:28 PM (16 years ago)
Author:
Laurent Fairhead
Message:

Modifications sur l'albedo JG
LF

Location:
LMDZ4/trunk/libf/phylmd
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phylmd/ocean_cpl_mod.F90

    r803 r888  
    6565!
    6666  SUBROUTINE ocean_cpl_noice( &
    67        sollw, albedo, &
     67       swnet, lwnet, alb1, &
    6868       windsp, &
    6969       fder_old, &
    7070       itime, dtime, knon, knindex, &
    71        swdown, &
    7271       p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
    7372       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    7473       ps, u1_lay, v1_lay, pctsrf_in, &
    75        radsol, snow, qsurf, agesno, &
    76        evap, fluxsens, fluxlat, &
     74       radsol, snow, agesno, &
     75       qsurf, evap, fluxsens, fluxlat, &
    7776       tsurf_new, dflux_s, dflux_l, pctsrf_oce)
    7877!
     
    8988    INTEGER, DIMENSION(klon), INTENT(IN)     :: knindex
    9089    REAL, INTENT(IN)                         :: dtime
    91     REAL, DIMENSION(klon), INTENT(IN)        :: sollw
    92     REAL, DIMENSION(klon), INTENT(IN)        :: albedo
     90    REAL, DIMENSION(klon), INTENT(IN)        :: swnet
     91    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet
     92    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
    9393    REAL, DIMENSION(klon), INTENT(IN)        :: windsp
    9494    REAL, DIMENSION(klon), INTENT(IN)        :: fder_old
    95     REAL, DIMENSION(klon), INTENT(IN)        :: swdown   
    9695    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
    9796    REAL, DIMENSION(klon), INTENT(IN)        :: tq_cdrag
     
    199198
    200199    CALL cpl_send_ocean_fields(itime, knon, knindex, &
    201          swdown, sollw, fluxlat, fluxsens, &
    202          precip_rain, precip_snow, evap, tsurf_new, fder_new, albedo, taux, tauy, windsp)
     200         swnet, lwnet, fluxlat, fluxsens, &
     201         precip_rain, precip_snow, evap, tsurf_new, fder_new, alb1, taux, tauy, windsp)
    203202   
    204203
     
    208207!
    209208  SUBROUTINE ocean_cpl_ice( &
    210        rlon, rlat, sollw, albedo, &
     209       rlon, rlat, swnet, lwnet, alb1, &
    211210       fder_old, &
    212211       itime, dtime, knon, knindex, &
    213212       lafin, &
    214        swdown, &
    215213       p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
    216214       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    217215       ps, u1_lay, v1_lay, pctsrf_in, &
    218216       radsol, snow, qsurf, &
    219        alblw, evap, fluxsens, fluxlat, &
    220        tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_sic)
     217       alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     218       tsurf_new, dflux_s, dflux_l, pctsrf_sic)
    221219!
    222220! This subroutine treats the ocean where there is ice. The subroutine first receives
     
    234232    REAL, INTENT(IN)                         :: dtime
    235233    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
    236     REAL, DIMENSION(klon), INTENT(IN)        :: sollw
    237     REAL, DIMENSION(klon), INTENT(IN)        :: albedo
     234    REAL, DIMENSION(klon), INTENT(IN)        :: swnet
     235    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet
     236    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
    238237    REAL, DIMENSION(klon), INTENT(IN)        :: fder_old
    239     REAL, DIMENSION(klon), INTENT(IN)        :: swdown
    240238    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
    241239    REAL, DIMENSION(klon), INTENT(IN)        :: tq_cdrag
     
    256254!****************************************************************************************
    257255    REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    258     REAL, DIMENSION(klon), INTENT(OUT)       :: alblw
     256    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new, alb2_new
    259257    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
    260     REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new, alb_new
     258    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
    261259    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
    262260    REAL, DIMENSION(klon), INTENT(OUT)       :: pctsrf_sic
     
    271269    REAL, DIMENSION(klon)   :: tsurf_cpl, fder_new
    272270    REAL, DIMENSION(klon)   :: taux, tauy
     271    REAL, DIMENSION(klon)   :: alb_cpl
    273272
    274273! End definitions
     
    278277
    279278!****************************************************************************************
    280 ! Receive ocean temperature(tsurf_cpl), albedo(alb_new) and new fraction of
     279! Receive ocean temperature(tsurf_cpl), albedo(alb_cpl) and new fraction of
    281280! seaice(pctsrf_sic) from coupler
    282281!
     
    284283
    285284    CALL cpl_receive_seaice_fields(knon, knindex, &
    286          tsurf_cpl, alb_new, pctsrf_sic)
     285         tsurf_cpl, alb_cpl, pctsrf_sic)
     286
     287    alb1_new(1:knon) = alb_cpl(1:knon)
     288    alb2_new(1:knon) = alb_cpl(1:knon)   
     289
    287290   
    288291!****************************************************************************************
     
    342345    CALL cpl_send_seaice_fields(itime, dtime, knon, knindex, &
    343346       pctsrf_in, lafin, rlon, rlat, &
    344        swdown, sollw, fluxlat, fluxsens, &
    345        precip_rain, precip_snow, evap, tsurf_new, fder_new, albedo, taux, tauy)
     347       swnet, lwnet, fluxlat, fluxsens, &
     348       precip_rain, precip_snow, evap, tsurf_new, fder_new, alb1, taux, tauy)
    346349 
    347 
    348     alblw(1:knon) = alb_new(1:knon)   
    349350
    350351  END SUBROUTINE ocean_cpl_ice
  • LMDZ4/trunk/libf/phylmd/ocean_forced_mod.F90

    r882 r888  
    6969       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    7070       ps, u1_lay, v1_lay, &
    71        radsol, snow, qsurf, &
    72        agesno, &
    73        evap, fluxsens, fluxlat, &
     71       radsol, snow, agesno, &
     72       qsurf, evap, fluxsens, fluxlat, &
    7473       tsurf_new, dflux_s, dflux_l, pctsrf_oce)
    7574!
     
    191190       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    192191       ps, u1_lay, v1_lay, &
    193        radsol, snow, qsurf, qsol, agesno, &
    194        tsoil, alblw, evap, fluxsens, fluxlat, &
    195        tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_sic)
     192       radsol, snow, qsol, agesno, tsoil, &
     193       qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     194       tsurf_new, dflux_s, dflux_l, pctsrf_sic)
    196195!
    197196! This subroutine treats the ocean where there is ice.
     
    232231!****************************************************************************************
    233232    REAL, DIMENSION(klon), INTENT(OUT)            :: qsurf
    234     REAL, DIMENSION(klon), INTENT(OUT)            :: alblw
     233    REAL, DIMENSION(klon), INTENT(OUT)            :: alb1_new  ! new albedo in visible SW interval
     234    REAL, DIMENSION(klon), INTENT(OUT)            :: alb2_new  ! new albedo in near IR interval
    235235    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
    236     REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new, alb_new
     236    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    237237    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
    238238    REAL, DIMENSION(klon), INTENT(OUT)            :: pctsrf_sic
     
    286286    IF (soil_model) THEN
    287287! update tsoil and calculate soilcap and soilflux
    288 
    289288       CALL soil(dtime, is_sic, knon,snow, tsurf_tmp, tsoil,soilcap, soilflux)
    290289       cal(1:knon) = RCPD / soilcap(1:knon)
     
    320319    WHERE (snow(1:knon) .LT. 0.0001) agesno(1:knon) = 0.
    321320
    322     alb_new(:) = 0.0
     321    alb1_new(:) = 0.0
    323322    DO i=1, knon
    324323       zfra = MAX(0.0,MIN(1.0,snow(i)/(snow(i)+10.0)))
    325        alb_new(i) = alb_neig(i) * zfra +  0.6 * (1.0-zfra)
     324       alb1_new(i) = alb_neig(i) * zfra +  0.6 * (1.0-zfra)
    326325    ENDDO
    327 !!      alb_new(1 : knon) = 0.6
     326
     327    alb2_new(:) = alb1_new(:)
    328328
    329329!****************************************************************************************
     
    344344    ENDDO
    345345
    346 !!$    z0_new = 0.002
    347 !!$    z0_new = SQRT(z0_new**2+rugoro**2)
    348     alblw(1:knon) = alb_new(1:knon)
    349346
    350347!****************************************************************************************
     
    355352
    356353    pctsrf_sic(:) = pctsrf_lim(:,is_sic)
    357 
    358354
    359355  END SUBROUTINE ocean_forced_ice
  • LMDZ4/trunk/libf/phylmd/ocean_slab_mod.F90

    r793 r888  
    139139       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    140140       ps, u1_lay, v1_lay, &
    141        radsol, snow, qsurf, agesno, &
    142        evap, fluxsens, fluxlat, &
    143        tsurf_new, &
    144        dflux_s, dflux_l, pctsrf_oce)
     141       radsol, snow, agesno, &
     142       qsurf, evap, fluxsens, fluxlat, &
     143       tsurf_new, dflux_s, dflux_l, pctsrf_oce)
    145144
    146145    INCLUDE "indicesol.h"
     
    179178    INTEGER                :: i
    180179    REAL, DIMENSION(klon)  :: cal, beta, dif_grnd
    181     REAL, DIMENSION(klon)  :: alb_neig, tsurf_temp
     180    REAL, DIMENSION(klon)  :: tsurf_temp
    182181
    183182!****************************************************************************************
     
    191190    beta = 1.
    192191    dif_grnd = 0.
    193     alb_neig(:) = 0.
    194192    agesno(:) = 0.
    195193   
     
    221219       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    222220       ps, u1_lay, v1_lay, &
    223        radsol, snow, qsurf, qsol, agesno, &
    224        tsoil, &
    225        alblw, evap, fluxsens, fluxlat, &
    226        tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_sic)
     221       radsol, snow, qsurf, qsol, agesno, tsoil, &
     222       alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     223       tsurf_new, dflux_s, dflux_l, pctsrf_sic)
    227224
    228225    INCLUDE "indicesol.h"
     
    258255!****************************************************************************************
    259256    REAL, DIMENSION(klon), INTENT(OUT)            :: qsurf
    260     REAL, DIMENSION(klon), INTENT(OUT)            :: alblw
     257    REAL, DIMENSION(klon), INTENT(OUT)            :: alb1_new  ! new albedo in visible SW interval
     258    REAL, DIMENSION(klon), INTENT(OUT)            :: alb2_new  ! new albedo in near IR interval
    261259    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
    262     REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new, alb_new
     260    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    263261    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
    264262    REAL, DIMENSION(klon), INTENT(OUT)            :: pctsrf_sic
     
    282280
    283281! Initialization of output variables
    284     alb_new(:) = 0.0
     282    alb1_new(:) = 0.0
    285283
    286284!****************************************************************************************
     
    347345    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
    348346    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
    349     alb_new(1 : knon) = alb_neig(1 : knon) *zfra(1:knon) + &
     347    alb1_new(1 : knon) = alb_neig(1 : knon) *zfra(1:knon) + &
    350348         0.6 * (1.0-zfra(1:knon))
    351     !!      alb_new(1 : knon) = 0.6
     349   
     350    alb2_new(:) = alb1_new(:)
    352351
    353352!
     
    397396    ENDDO
    398397     
    399 !!$    z0_new = 0.002
    400 !!$    z0_new = SQRT(z0_new**2+rugoro**2)
    401     alblw(1:knon) = alb_new(1:knon)
    402398       
    403399!****************************************************************************************
  • LMDZ4/trunk/libf/phylmd/pbl_surface_mod.F90

    r882 r888  
    2626
    2727! Declaration of variables saved in restart file
    28   REAL, ALLOCATABLE, DIMENSION(:), PRIVATE, SAVE     :: qsol
     28  REAL, ALLOCATABLE, DIMENSION(:), PRIVATE, SAVE     :: qsol   ! water height in the soil (mm)
    2929  !$OMP THREADPRIVATE(qsol)
    30   REAL, ALLOCATABLE, DIMENSION(:), PRIVATE, SAVE     :: fder
     30  REAL, ALLOCATABLE, DIMENSION(:), PRIVATE, SAVE     :: fder   ! flux drift
    3131  !$OMP THREADPRIVATE(fder)
    32   REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: snow
     32  REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: snow   ! snow at surface
    3333  !$OMP THREADPRIVATE(snow)
    34   REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: qsurf
     34  REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: qsurf  ! humidity at surface
    3535  !$OMP THREADPRIVATE(qsurf)
    36   REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: evap
     36  REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: evap   ! evaporation at surface
    3737  !$OMP THREADPRIVATE(evap)
    38   REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: rugos
     38  REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: rugos  ! rugosity at surface (m)
    3939  !$OMP THREADPRIVATE(rugos)
    40   REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: agesno
     40  REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE   :: agesno ! age of snow at surface
    4141  !$OMP THREADPRIVATE(agesno)
    42   REAL, ALLOCATABLE, DIMENSION(:,:,:), PRIVATE, SAVE :: ftsoil  
     42  REAL, ALLOCATABLE, DIMENSION(:,:,:), PRIVATE, SAVE :: ftsoil ! soil temperature
    4343  !$OMP THREADPRIVATE(ftsoil)
    4444
     
    182182       t,         q,         u,        v,             &
    183183       pplay,     paprs,     pctsrf,                  &
    184        ts,        albe,      alblw,    u10m,   v10m,  &
    185        sollwdown, cdragh,    cdragm,   zu1,    zv1,   &
    186        albsol,    albsollw,  zxsens,   zxevap,        &
     184       ts,        alb1,      alb2,     u10m,   v10m,  &
     185       lwdown_m, cdragh,    cdragm,   zu1,    zv1,   &
     186       alb1_m,    alb2_m,    zxsens,   zxevap,        &
    187187       zxtsol,    zxfluxlat, zt2m,     qsat2m,        &
    188188       d_t,       d_q,       d_u,      d_v,           &
     
    270270! Input variables
    271271!****************************************************************************************
    272     REAL,                         INTENT(IN)        :: dtime
    273     REAL,                         INTENT(IN)        :: date0
    274     INTEGER,                      INTENT(IN)        :: itap
    275     INTEGER,                      INTENT(IN)        :: jour    ! jour de l'annee en cours
    276     LOGICAL,                      INTENT(IN)        :: debut, lafin
    277     REAL, DIMENSION(klon),        INTENT(IN)        :: rlon, rlat
    278     REAL, DIMENSION(klon),        INTENT(IN)        :: rugoro
    279     REAL, DIMENSION(klon),        INTENT(IN)        :: rmu0    ! cosinus de l'angle solaire zenithal
    280     REAL, DIMENSION(klon),        INTENT(IN)        :: rain_f, snow_f
    281     REAL, DIMENSION(klon),        INTENT(IN)        :: solsw_m ! mean value
    282     REAL, DIMENSION(klon),        INTENT(IN)        :: sollw_m ! mean value
    283     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t, q
    284     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: u, v
    285     REAL, DIMENSION(klon,klev),   INTENT(IN)        :: pplay
    286     REAL, DIMENSION(klon,klev+1), INTENT(IN)        :: paprs
    287     REAL, DIMENSION(klon, nbsrf), INTENT(IN)        :: pctsrf
     272    REAL,                         INTENT(IN)        :: dtime   ! time interval (s)
     273    REAL,                         INTENT(IN)        :: date0   ! initial day
     274    INTEGER,                      INTENT(IN)        :: itap    ! time step
     275    INTEGER,                      INTENT(IN)        :: jour    ! current day of the year
     276    LOGICAL,                      INTENT(IN)        :: debut   ! true if first run step
     277    LOGICAL,                      INTENT(IN)        :: lafin   ! true if last run step
     278    REAL, DIMENSION(klon),        INTENT(IN)        :: rlon    ! longitudes in degrees
     279    REAL, DIMENSION(klon),        INTENT(IN)        :: rlat    ! latitudes in degrees
     280    REAL, DIMENSION(klon),        INTENT(IN)        :: rugoro  ! rugosity length
     281    REAL, DIMENSION(klon),        INTENT(IN)        :: rmu0    ! cosine of solar zenith angle
     282    REAL, DIMENSION(klon),        INTENT(IN)        :: rain_f  ! rain fall
     283    REAL, DIMENSION(klon),        INTENT(IN)        :: snow_f  ! snow fall
     284    REAL, DIMENSION(klon),        INTENT(IN)        :: solsw_m ! net shortwave radiation at mean surface
     285    REAL, DIMENSION(klon),        INTENT(IN)        :: sollw_m ! net longwave radiation at mean surface
     286    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: t       ! temperature (K)
     287    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: q       ! water vapour (kg/kg)
     288    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: u       ! u speed
     289    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: v       ! v speed
     290    REAL, DIMENSION(klon,klev),   INTENT(IN)        :: pplay   ! mid-layer pression (Pa)
     291    REAL, DIMENSION(klon,klev+1), INTENT(IN)        :: paprs   ! pression between layers (Pa)
     292    REAL, DIMENSION(klon, nbsrf), INTENT(IN)        :: pctsrf  ! sub-surface fraction
    288293
    289294! Input/Output variables
    290295!****************************************************************************************
    291     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: ts
    292     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: albe
    293     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: alblw
    294     REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: u10m, v10m
     296    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: ts      ! temperature at surface (K)
     297    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: alb1    ! albedo in visible SW interval
     298    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: alb2    ! albedo in near infra-red SW interval
     299    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: u10m    ! u speed at 10m
     300    REAL, DIMENSION(klon, nbsrf), INTENT(INOUT)     :: v10m    ! v speed at 10m
    295301
    296302! Output variables
    297303!****************************************************************************************
    298     REAL, DIMENSION(klon),        INTENT(OUT)       :: sollwdown
    299     REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh, cdragm
    300     REAL, DIMENSION(klon),        INTENT(OUT)       :: zu1
    301     REAL, DIMENSION(klon),        INTENT(OUT)       :: zv1
    302     REAL, DIMENSION(klon),        INTENT(OUT)       :: albsol
    303     REAL, DIMENSION(klon),        INTENT(OUT)       :: albsollw
    304     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsens, zxevap
    305     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol
    306     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxfluxlat
    307     REAL, DIMENSION(klon),        INTENT(OUT)       :: zt2m
     304    REAL, DIMENSION(klon),        INTENT(OUT)       :: lwdown_m   ! Downcoming longwave radiation
     305    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragh     ! drag coefficient for T and Q
     306    REAL, DIMENSION(klon),        INTENT(OUT)       :: cdragm     ! drag coefficient for wind
     307    REAL, DIMENSION(klon),        INTENT(OUT)       :: zu1        ! u wind speed in first layer
     308    REAL, DIMENSION(klon),        INTENT(OUT)       :: zv1        ! v wind speed in first layer
     309    REAL, DIMENSION(klon),        INTENT(OUT)       :: alb1_m     ! mean albedo in visible SW interval
     310    REAL, DIMENSION(klon),        INTENT(OUT)       :: alb2_m     ! mean albedo in near IR SW interval
     311    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxsens     ! sensible heat flux at surface with inversed sign
     312                                                                  ! (=> positive sign upwards)
     313    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxevap     ! water vapour flux at surface, positiv upwards
     314    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxtsol     ! temperature at surface, mean for each grid point
     315    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxfluxlat  ! latent flux, mean for each grid point
     316    REAL, DIMENSION(klon),        INTENT(OUT)       :: zt2m       ! temperature at 2m, mean for each grid point
    308317    REAL, DIMENSION(klon),        INTENT(OUT)       :: qsat2m
    309     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_t, d_q
    310     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u, d_v
    311     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: zcoefh
    312     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: pctsrf_new
     318    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_t        ! change in temperature
     319    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_q        ! change in water vapour
     320    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u        ! change in u speed
     321    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_v        ! change in v speed
     322    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: zcoefh     ! coef for turbulent diffusion of T and Q, mean for each grid point
     323    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: pctsrf_new ! new sub-surface fraction
    313324
    314325! Output only for diagnostics
    315     REAL, DIMENSION(klon),        INTENT(OUT)       :: qsol_d
    316     REAL, DIMENSION(klon),        INTENT(OUT)       :: zq2m
    317     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblh
    318     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_plcl
    319     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_capCL
    320     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_oliqCL
    321     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_cteiCL
    322     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblT
    323     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_therm
    324     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb1
    325     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb2
    326     REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb3
    327     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxrugs
    328     REAL, DIMENSION(klon),        INTENT(OUT)       :: zu10m
    329     REAL, DIMENSION(klon),        INTENT(OUT)       :: zv10m
    330     REAL, DIMENSION(klon),        INTENT(OUT)       :: fder_print
    331     REAL, DIMENSION(klon),        INTENT(OUT)       :: zxqsurf
    332     REAL, DIMENSION(klon),        INTENT(OUT)       :: rh2m
    333     REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: zxfluxu, zxfluxv
    334     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: rugos_d
    335     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: agesno_d
    336     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: sollw, solsw
    337     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: d_ts
    338     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: evap_d
    339     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: fluxlat
    340     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: t2m
    341     REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: wfbils, wfbilo
    342     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_t
    343     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_u, flux_v
     326    REAL, DIMENSION(klon),        INTENT(OUT)       :: qsol_d     ! water height in the soil (mm)
     327    REAL, DIMENSION(klon),        INTENT(OUT)       :: zq2m       ! water vapour at 2m, mean for each grid point
     328    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblh     ! height of the planetary boundary layer(HPBL)
     329    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_plcl     ! condensation level
     330    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_capCL    ! CAPE of PBL
     331    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_oliqCL   ! liquid water intergral of PBL
     332    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_cteiCL   ! cloud top instab. crit. of PBL
     333    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_pblT     ! temperature at PBLH
     334    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_therm    ! thermal virtual temperature excess
     335    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb1    ! deep cape, mean for each grid point
     336    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb2    ! inhibition, mean for each grid point
     337    REAL, DIMENSION(klon),        INTENT(OUT)       :: s_trmb3    ! point Omega, mean for each grid point
     338    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxrugs     ! rugosity at surface (m), mean for each grid point
     339    REAL, DIMENSION(klon),        INTENT(OUT)       :: zu10m      ! u speed at 10m, mean for each grid point
     340    REAL, DIMENSION(klon),        INTENT(OUT)       :: zv10m      ! v speed at 10m, mean for each grid point
     341    REAL, DIMENSION(klon),        INTENT(OUT)       :: fder_print ! fder for printing (=fder(i) + dflux_t(i) + dflux_q(i))
     342    REAL, DIMENSION(klon),        INTENT(OUT)       :: zxqsurf    ! humidity at surface, mean for each grid point
     343    REAL, DIMENSION(klon),        INTENT(OUT)       :: rh2m       ! relative humidity at 2m
     344    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: zxfluxu    ! u wind tension, mean for each grid point
     345    REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: zxfluxv    ! v wind tension, mean for each grid point
     346    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: rugos_d    ! rugosity length (m)
     347    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: agesno_d   ! age of snow at surface
     348    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: solsw      ! net shortwave radiation at surface
     349    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: sollw      ! net longwave radiation at surface
     350    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: d_ts       ! change in temperature at surface
     351    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: evap_d     ! evaporation at surface
     352    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: fluxlat    ! latent flux
     353    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: t2m        ! temperature at 2 meter height
     354    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: wfbils     ! heat balance at surface
     355    REAL, DIMENSION(klon, nbsrf), INTENT(OUT)       :: wfbilo     ! water balance at surface
     356    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_t     ! sensible heat flux (CpT) J/m**2/s (W/m**2)
     357                                                                  ! positve orientation downwards
     358    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_u     ! u wind tension (kg m/s)/(m**2 s) or Pascal
     359    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_v     ! v wind tension (kg m/s)/(m**2 s) or Pascal
    344360
    345361! Output not needed
    346     REAL, DIMENSION(klon),       INTENT(OUT)        :: dflux_t, dflux_q
    347     REAL, DIMENSION(klon),       INTENT(OUT)        :: zxsnow
    348     REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxt, zxfluxq
    349     REAL, DIMENSION(klon, nbsrf),INTENT(OUT)        :: q2m
    350     REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q
     362    REAL, DIMENSION(klon),       INTENT(OUT)        :: dflux_t    ! change of sensible heat flux
     363    REAL, DIMENSION(klon),       INTENT(OUT)        :: dflux_q    ! change of water vapour flux
     364    REAL, DIMENSION(klon),       INTENT(OUT)        :: zxsnow     ! snow at surface, mean for each grid point
     365    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxt    ! sensible heat flux, mean for each grid point
     366    REAL, DIMENSION(klon, klev), INTENT(OUT)        :: zxfluxq    ! water vapour flux, mean for each grid point
     367    REAL, DIMENSION(klon, nbsrf),INTENT(OUT)        :: q2m        ! water vapour at 2 meter height
     368    REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q     ! water vapour flux(latent flux) (kg/m**2/s)
    351369
    352370! Input/output
     
    356374! Local variables with attribute SAVE
    357375!****************************************************************************************
    358     INTEGER, SAVE                            :: nhoridbg, nidbg
     376    INTEGER, SAVE                            :: nhoridbg, nidbg   ! variables for IOIPSL
    359377!$OMP THREADPRIVATE(nhoridbg, nidbg)
    360378    LOGICAL, SAVE                            :: debugindex=.FALSE.
     
    373391    REAL                               :: zx_alf1, zx_alf2 !valeur ambiante par extrapola
    374392    REAL                               :: amn, amx
     393    REAL                               :: f1 ! fraction de longeurs visibles parmi tout SW intervalle
    375394    REAL, DIMENSION(klon)              :: r_co2_ppm     ! taux CO2 atmosphere
    376395    REAL, DIMENSION(klon)              :: yts, yrugos, ypct, yz0_new
    377     REAL, DIMENSION(klon)              :: yalb
    378     REAL, DIMENSION(klon)              :: yalblw
     396    REAL, DIMENSION(klon)              :: yalb, yalb1, yalb2
    379397    REAL, DIMENSION(klon)              :: yu1, yv1
    380398    REAL, DIMENSION(klon)              :: ysnow, yqsurf, yagesno, yqsol
    381399    REAL, DIMENSION(klon)              :: yrain_f, ysnow_f
    382     REAL, DIMENSION(klon)              :: ysollw, ysolsw, ysollwdown
     400    REAL, DIMENSION(klon)              :: ysolsw, ysollw
    383401    REAL, DIMENSION(klon)              :: yfder
    384     REAL, DIMENSION(klon)              :: yrads,yrugoro
     402    REAL, DIMENSION(klon)              :: yrugoro
    385403    REAL, DIMENSION(klon)              :: yfluxlat
    386404    REAL, DIMENSION(klon)              :: y_d_ts
     
    409427    REAL, DIMENSION(klon)              :: qairsol, zgeo1
    410428    REAL, DIMENSION(klon)              :: rugo1
    411     REAL, DIMENSION(klon)              :: yfluxsens, swdown
     429    REAL, DIMENSION(klon)              :: yfluxsens
    412430    REAL, DIMENSION(klon)              :: petAcoef, peqAcoef, petBcoef, peqBcoef
    413     REAL, DIMENSION(klon)              :: ypsref, epot_air
    414     REAL, DIMENSION(klon)              :: yevap, ytsurf_new, yalb_new
     431    REAL, DIMENSION(klon)              :: ypsref
     432    REAL, DIMENSION(klon)              :: yevap, ytsurf_new, yalb1_new, yalb2_new
    415433    REAL, DIMENSION(klon)              :: pctsrf_nsrf
    416434    REAL, DIMENSION(klon)              :: ztsol
     435    REAL, DIMENSION(klon)              :: alb_m  ! mean albedo for whole SW interval
    417436    REAL, DIMENSION(klon,klev)         :: y_d_t, y_d_q
    418437    REAL, DIMENSION(klon,klev)         :: y_d_u, y_d_v
     
    441460
    442461
    443     REAL, DIMENSION(klon,nbsrf)        :: pblh
    444     REAL, DIMENSION(klon,nbsrf)        :: plcl
     462    REAL, DIMENSION(klon,nbsrf)        :: pblh         ! height of the planetary boundary layer
     463    REAL, DIMENSION(klon,nbsrf)        :: plcl         ! condensation level
    445464    REAL, DIMENSION(klon,nbsrf)        :: capCL
    446465    REAL, DIMENSION(klon,nbsrf)        :: oliqCL
     
    448467    REAL, DIMENSION(klon,nbsrf)        :: pblT
    449468    REAL, DIMENSION(klon,nbsrf)        :: therm
    450     REAL, DIMENSION(klon,nbsrf)        :: trmb1
    451     REAL, DIMENSION(klon,nbsrf)        :: trmb2
    452     REAL, DIMENSION(klon,nbsrf)        :: trmb3
     469    REAL, DIMENSION(klon,nbsrf)        :: trmb1        ! deep cape
     470    REAL, DIMENSION(klon,nbsrf)        :: trmb2        ! inhibition
     471    REAL, DIMENSION(klon,nbsrf)        :: trmb3        ! point Omega
    453472    REAL, DIMENSION(klon,nbsrf)        :: zx_rh2m, zx_qsat2m
    454473    REAL, DIMENSION(klon,nbsrf)        :: zx_qs1, zx_t1
    455474    REAL, DIMENSION(klon,nbsrf)        :: zdelta1, zcor1
     475    REAL, DIMENSION(klon, nbsrf)       :: alb          ! mean albedo for whole SW interval
     476    REAL, DIMENSION(klon)              :: ylwdown      ! jg : temporary (ysollwdown)
    456477
    457478
     
    521542    cdragh = 0.0  ; cdragm = 0.0     ; dflux_t = 0.0   ; dflux_q = 0.0
    522543    ypct = 0.0    ; yts = 0.0        ; ysnow = 0.0     ; zu1 = 0.0       
    523     zv1 = 0.0     ; yqsurf = 0.0     ; yalb = 0.0      ; yalblw = 0.0   
     544    zv1 = 0.0     ; yqsurf = 0.0     ; yalb1 = 0.0     ; yalb2 = 0.0   
    524545    yrain_f = 0.0 ; ysnow_f = 0.0    ; yfder = 0.0     ; ysolsw = 0.0   
    525     ysollw = 0.0  ; ysollwdown = 0.0 ; yrugos = 0.0    ; yu1 = 0.0   
    526     yv1 = 0.0     ; yrads = 0.0      ; ypaprs = 0.0    ; ypplay = 0.0
     546    ysollw = 0.0  ; yrugos = 0.0     ; yu1 = 0.0   
     547    yv1 = 0.0     ; ypaprs = 0.0     ; ypplay = 0.0
    527548    ydelp = 0.0   ; yu = 0.0         ; yv = 0.0        ; yt = 0.0         
    528549    yq = 0.0      ; pctsrf_new = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0
     
    538559! 3) - Calculate pressure thickness of each layer
    539560!    - Calculate the wind at first layer
    540 !
     561!    - Mean calculations of albedo
     562!    - Calculate net radiance at sub-surface
    541563!****************************************************************************************
    542564    DO k = 1, klev
     
    555577!****************************************************************************************
    556578! Test for rugos........ from physiq.. A la fin plutot???
    557 ! Calcul de l'abedo moyen par maille
     579!
    558580!****************************************************************************************
    559581
     
    566588    ENDDO
    567589
    568 ! Calcul de l'abedo moyen par maille
    569     albsol(:)   = 0.0
    570     albsollw(:) = 0.0
     590! Mean calculations of albedo
     591!
     592! Albedo at sub-surface
     593! * alb1 : albedo in visible SW interval
     594! * alb2 : albedo in near infrared SW interval
     595! * alb  : mean albedo for whole SW interval
     596!
     597! Mean albedo for grid point
     598! * alb1_m : albedo in visible SW interval
     599! * alb2_m : albedo in near infrared SW interval
     600! * alb_m  : mean albedo at whole SW interval
     601
     602    alb1_m(:) = 0.0
     603    alb2_m(:) = 0.0
    571604    DO nsrf = 1, nbsrf
    572605       DO i = 1, klon
    573           albsol(i)   = albsol(i)   + albe(i,nsrf) * pctsrf(i,nsrf)
    574           albsollw(i) = albsollw(i) + alblw(i,nsrf) * pctsrf(i,nsrf)
     606          alb1_m(i) = alb1_m(i) + alb1(i,nsrf) * pctsrf(i,nsrf)
     607          alb2_m(i) = alb2_m(i) + alb2(i,nsrf) * pctsrf(i,nsrf)
    575608       ENDDO
    576609    ENDDO
    577610
    578 
    579 
    580 ! Calcule de ztsol (aussi fait dans physiq.F, pourrait etre un argument)
     611! We here suppose the fraction f1 of incoming radiance of visible radiance
     612! as a fraction of all shortwave radiance
     613!    f1 = 0.5
     614    f1 = 1    ! put f1=1 to recreate old calculations
     615
     616    DO nsrf = 1, nbsrf
     617       DO i = 1, klon
     618          alb(i,nsrf) = f1*alb1(i,nsrf) + (1-f1)*alb2(i,nsrf)
     619       ENDDO
     620    ENDDO
     621
     622    DO i = 1, klon
     623       alb_m(i) = f1*alb1_m(i) + (1-f1)*alb2_m(i)
     624    END DO
     625
     626! Calculation of mean temperature at surface grid points
    581627    ztsol(:) = 0.0
    582628    DO nsrf = 1, nbsrf
     
    586632    ENDDO
    587633
    588 
    589 ! Repartition du longwave par sous-surface linearisee
     634! Linear distrubution on sub-surface of long- and shortwave net radiance
    590635    DO nsrf = 1, nbsrf
    591636       DO i = 1, klon
    592637          sollw(i,nsrf) = sollw_m(i) + 4.0*RSIGMA*ztsol(i)**3 * (ztsol(i)-ts(i,nsrf))
    593           solsw(i,nsrf) = solsw_m(i)*(1.-albe(i,nsrf))/(1.-albsol(i))
     638          solsw(i,nsrf) = solsw_m(i) * (1.-alb(i,nsrf)) / (1.-alb_m(i))
    594639       ENDDO
    595640    ENDDO
    596641
    597642
     643! Downwelling longwave radiation at mean surface
     644    lwdown_m(:) = 0.0
    598645    DO i = 1, klon
    599        sollwdown(i) = sollw_m(i) + RSIGMA*ztsol(i)**4
     646       lwdown_m(i) = sollw_m(i) + RSIGMA*ztsol(i)**4
    600647    ENDDO
    601648
     
    644691       DO j = 1, knon
    645692          i = ni(j)
    646           ypct(j) = pctsrf(i,nsrf)
    647           yts(j) = ts(i,nsrf)
    648           ysnow(j) = snow(i,nsrf)
    649           yqsurf(j) = qsurf(i,nsrf)
    650           yalb(j) = albe(i,nsrf)
    651           yalblw(j) = alblw(i,nsrf)
     693          ypct(j)    = pctsrf(i,nsrf)
     694          yts(j)     = ts(i,nsrf)
     695          ysnow(j)   = snow(i,nsrf)
     696          yqsurf(j)  = qsurf(i,nsrf)
     697          yalb(j)    = alb(i,nsrf)
     698          yalb1(j)   = alb1(i,nsrf)
     699          yalb2(j)   = alb2(i,nsrf)
    652700          yrain_f(j) = rain_f(i)
    653701          ysnow_f(j) = snow_f(i)
    654702          yagesno(j) = agesno(i,nsrf)
    655           yfder(j) = fder(i)
    656           ysolsw(j) = solsw(i,nsrf)
    657           ysollw(j) = sollw(i,nsrf)
    658           ysollwdown(j) = sollwdown(i)
    659           yrugos(j) = rugos(i,nsrf)
     703          yfder(j)   = fder(i)
     704          ysolsw(j)  = solsw(i,nsrf)
     705          ysollw(j)  = sollw(i,nsrf)
     706          yrugos(j)  = rugos(i,nsrf)
    660707          yrugoro(j) = rugoro(i)
    661           yu1(j) = u1lay(i)
    662           yv1(j) = v1lay(i)
    663           yrads(j) =  ysolsw(j)+ ysollw(j)
     708          yu1(j)     = u1lay(i)
     709          yv1(j)     = v1lay(i)
    664710          ypaprs(j,klev+1) = paprs(i,klev+1)
    665711          yu10mx(j) = u10m(i,nsrf)
     
    730776!
    731777!****************************************************************************************
    732          
     778
     779! - Reference pressure is given the values at surface level         
    733780       ypsref(:) = ypaprs(:,1) 
    734        epot_air(:) = 0.0
    735        epot_air(1:knon) = RCPD*yt(1:knon,1)*(ypsref(1:knon)/ypplay(1:knon,1))**RKAPPA
    736 
    737        swdown(:) = 0.0
    738        IF (nsrf .EQ. is_ter) THEN
    739           swdown(1:knon) = ysolsw(1:knon)/(1-yalb(1:knon))
    740        ELSE
    741           swdown(1:knon) = ysolsw(1:knon)
    742        ENDIF
    743 
    744        ! constant CO2
     781
     782! - Constant CO2 is copied to global grid
    745783       r_co2_ppm(:) = co2_ppm
    746784
     
    755793     
    756794       CASE(is_ter)
     795          ! ylwdown : to be removed, calculation is now done at land surface in surf_land
     796          ylwdown(:)=0.0
     797          DO i=1,knon
     798             ylwdown(i)=lwdown_m(ni(i))
     799          END DO
    757800          CALL surf_land(itap, dtime, date0, jour, knon, ni,&
    758801               rlon, rlat, &
    759                debut, lafin, ydelp(:,1), epot_air, r_co2_ppm, ysollwdown, ysolsw, swdown, &
     802               debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, &
    760803               yts, ypplay(:,1), ycoefh(:,1), yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    761804               petAcoef, peqAcoef, petBcoef, peqBcoef, &
    762805               ypsref, yu1, yv1, yrugoro, pctsrf, &
    763                yrads, ysnow, yqsurf, yqsol, yagesno, &
    764                ytsoil, yz0_new, yalblw, yevap, yfluxsens, yfluxlat, &
    765                ytsurf_new, yalb_new, y_dflux_t, y_dflux_q, pctsrf_nsrf)
     806               ysnow, yqsol, yagesno, ytsoil, &
     807               yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, &
     808               yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, pctsrf_nsrf, &
     809               ylwdown)
    766810     
    767811       CASE(is_lic)
    768812          CALL surf_landice(itap, dtime, knon, ni, &
     813               ysolsw, ysollw, yts, ypplay(:,1), &
     814               ycoefh(:,1), yrain_f, ysnow_f, yt(:,1), yq(:,1),&
     815               petAcoef, peqAcoef, petBcoef, peqBcoef, &
     816               ypsref, yu1, yv1, yrugoro, pctsrf, &
     817               ysnow, yqsurf, yqsol, yagesno, &
     818               ytsoil, yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, &
     819               ytsurf_new, y_dflux_t, y_dflux_q, pctsrf_nsrf)
     820         
     821       CASE(is_oce)
     822          CALL surf_ocean(rlon, rlat, ysolsw, ysollw, yalb1, &
     823               yrugos, ywindsp, rmu0, yfder, &
     824               itap, dtime, jour, knon, ni, &
     825               debut, &
     826               ypplay(:,1), ycoefh(:,1), ycoefm(:,1), yrain_f, ysnow_f, yt(:,1), yq(:,1),&
     827               petAcoef, peqAcoef, petBcoef, peqBcoef, &
     828               ypsref, yu1, yv1, yrugoro, pctsrf, &
     829               ysnow, yqsurf, yagesno, &
     830               yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, &
     831               ytsurf_new, y_dflux_t, y_dflux_q, pctsrf_nsrf)
     832         
     833       CASE(is_sic)
     834          CALL surf_seaice( &
     835               rlon, rlat, ysolsw, ysollw, yalb1, yfder, &
     836               itap, dtime, jour, knon, ni, &
     837               debut, lafin, &
    769838               yts, ypplay(:,1), ycoefh(:,1), yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    770839               petAcoef, peqAcoef, petBcoef, peqBcoef, &
    771840               ypsref, yu1, yv1, yrugoro, pctsrf, &
    772                yrads, ysnow, yqsurf, yqsol, yagesno, &
    773                ytsoil, yz0_new, yalblw, yevap, yfluxsens, yfluxlat, &
    774                ytsurf_new, yalb_new, y_dflux_t, y_dflux_q, pctsrf_nsrf)
    775          
    776        CASE(is_oce)
    777           CALL surf_ocean(rlon, rlat, ysollw, yalb, &
    778                yrugos, ywindsp, rmu0, &
    779                yfder, &
    780                itap, dtime, jour, knon, ni, &
    781                debut, swdown, &
    782                ypplay(:,1), ycoefh(:,1), ycoefm(:,1), yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    783                petAcoef, peqAcoef, petBcoef, peqBcoef, &
    784                ypsref, yu1, yv1, yrugoro, pctsrf, &
    785                yrads, ysnow, yqsurf, yagesno, &
    786                yz0_new, yalblw, yevap, yfluxsens, yfluxlat, &
    787                ytsurf_new, yalb_new, y_dflux_t, y_dflux_q, pctsrf_nsrf)
    788          
    789        CASE(is_sic)
    790           CALL surf_seaice( &
    791                rlon, rlat, ysollw, yalb, &
    792                yfder, &
    793                itap, dtime, jour, knon, ni, &
    794                debut, lafin, swdown, &
    795                yts, ypplay(:,1), ycoefh(:,1), yrain_f, ysnow_f, yt(:,1), yq(:,1),&
    796                petAcoef, peqAcoef, petBcoef, peqBcoef, &
    797                ypsref, yu1, yv1, yrugoro, pctsrf, &
    798                yrads, ysnow, yqsurf, yqsol, yagesno, &
    799                ytsoil, yz0_new, yalblw, yevap, yfluxsens, yfluxlat, &
    800                ytsurf_new, yalb_new, y_dflux_t, y_dflux_q, pctsrf_nsrf)
     841               ysnow, yqsurf, yqsol, yagesno, ytsoil, &
     842               yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, &
     843               ytsurf_new, y_dflux_t, y_dflux_q, pctsrf_nsrf)
    801844         
    802845
     
    815858!****************************************************************************************
    816859! 11) - Calcul the increment of surface temperature
    817 !     - Update albedo
    818860!
    819861!****************************************************************************************
    820862       y_d_ts(1:knon)   = ytsurf_new(1:knon) - yts(1:knon)
    821863 
    822        yalb(1:knon) = yalb_new(1:knon)
    823 
    824864!****************************************************************************************
    825865!
     
    888928       evap(:,nsrf) = - flux_q(:,1,nsrf)
    889929       
    890        albe(:, nsrf) = 0.
    891        alblw(:, nsrf) = 0.
     930       alb1(:, nsrf) = 0.
     931       alb2(:, nsrf) = 0.
    892932       snow(:, nsrf) = 0.
    893933       qsurf(:, nsrf) = 0.
     
    897937          i = ni(j)
    898938          d_ts(i,nsrf) = y_d_ts(j)
    899           albe(i,nsrf) = yalb(j) 
    900           alblw(i,nsrf) = yalblw(j)
     939          alb1(i,nsrf) = yalb1_new(j) 
     940          alb2(i,nsrf) = yalb2_new(j)
    901941          snow(i,nsrf) = ysnow(j) 
    902942          qsurf(i,nsrf) = yqsurf(j)
  • LMDZ4/trunk/libf/phylmd/phyetat0.F

    r879 r888  
    77     .           rlat_p, rlon_p, pctsrf_p, tsol_p,
    88     .           ocean_in, ok_veget_in,
    9      .           albe_p, alblw_p,
     9     .           alb1_p, alb2_p,
    1010     .           rain_fall_p, snow_fall_p,solsw_p, sollw_p,
    1111     .           radsol_p,clesphy0,
     
    5353      REAL qsol_p(klon)
    5454      REAL snow_p(klon,nbsrf)
    55       REAL albe_p(klon,nbsrf)
    56 cIM BEG alblw
    57       REAL alblw_p(klon,nbsrf)
    58 cIM END alblw
     55      REAL alb1_p(klon,nbsrf)   ! albedo in visible SW interval
     56      REAL alb2_p(klon,nbsrf)   ! albedo in near IR interval
    5957      REAL evap_p(klon,nbsrf)
    6058      REAL radsol_p(klon)
     
    9391      REAL qsol(klon_glo)
    9492      REAL snow(klon_glo,nbsrf)
    95       REAL albe(klon_glo,nbsrf)
    96       REAL alblw(klon_glo,nbsrf)
     93      REAL alb1(klon_glo,nbsrf)
     94      REAL alb2(klon_glo,nbsrf)
    9795      REAL evap(klon_glo,nbsrf)
    9896      REAL radsol(klon_glo)
     
    728726      ENDIF
    729727c
    730 c Lecture de albedo au sol:
     728c Lecture de albedo de l'interval visible au sol:
    731729c
    732730      ierr = NF_INQ_VARID (nid, "ALBE", nvarid)
     
    746744           ENDIF
    747745#ifdef NC_DOUBLE
    748            ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,nsrf))
    749 #else
    750            ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,nsrf))
     746           ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb1(1,nsrf))
     747#else
     748           ierr = NF_GET_VAR_REAL(nid, nvarid, alb1(1,nsrf))
    751749#endif
    752750           IF (ierr.NE.NF_NOERR) THEN
     
    757755           xmax = -1.0E+20
    758756           DO i = 1, klon_glo
    759               xmin = MIN(albe(i,nsrf),xmin)
    760               xmax = MAX(albe(i,nsrf),xmax)
     757              xmin = MIN(alb1(i,nsrf),xmin)
     758              xmax = MAX(alb1(i,nsrf),xmax)
    761759           ENDDO
    762760           PRINT*,'Albedo du sol ALBE**:', nsrf, xmin, xmax
     
    766764         PRINT*, '          J ignore donc les autres ALBE**'
    767765#ifdef NC_DOUBLE
    768          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, albe(1,1))
    769 #else
    770          ierr = NF_GET_VAR_REAL(nid, nvarid, albe(1,1))
     766         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb1(1,1))
     767#else
     768         ierr = NF_GET_VAR_REAL(nid, nvarid, alb1(1,1))
    771769#endif
    772770         IF (ierr.NE.NF_NOERR) THEN
     
    777775         xmax = -1.0E+20
    778776         DO i = 1, klon_glo
    779             xmin = MIN(albe(i,1),xmin)
    780             xmax = MAX(albe(i,1),xmax)
     777            xmin = MIN(alb1(i,1),xmin)
     778            xmax = MAX(alb1(i,1),xmax)
    781779         ENDDO
    782780         PRINT*,'Neige du sol <ALBE>', xmin, xmax
    783781         DO nsrf = 2, nbsrf
    784782         DO i = 1, klon_glo
    785             albe(i,nsrf) = albe(i,1)
    786          ENDDO
    787          ENDDO
    788       ENDIF
    789 
    790 c
    791 c Lecture de albedo au sol LW:
     783            alb1(i,nsrf) = alb1(i,1)
     784         ENDDO
     785         ENDDO
     786      ENDIF
     787
     788c
     789c Lecture de albedo au sol dans l'interval proche infra-rouge:
    792790c
    793791      ierr = NF_INQ_VARID (nid, "ALBLW", nvarid)
     
    798796         DO nsrf = 1, nbsrf
    799797           DO i = 1, klon_glo
    800              alblw(i,nsrf) = albe(i,nsrf)
     798             alb2(i,nsrf) = alb1(i,nsrf)
    801799           ENDDO
    802800         ENDDO
     
    805803         PRINT*, '          J ignore donc les autres ALBLW**'
    806804#ifdef NC_DOUBLE
    807          ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alblw(1,1))
    808 #else
    809          ierr = NF_GET_VAR_REAL(nid, nvarid, alblw(1,1))
     805         ierr = NF_GET_VAR_DOUBLE(nid, nvarid, alb2(1,1))
     806#else
     807         ierr = NF_GET_VAR_REAL(nid, nvarid, alb2(1,1))
    810808#endif
    811809         IF (ierr.NE.NF_NOERR) THEN
     
    816814         xmax = -1.0E+20
    817815         DO i = 1, klon_glo
    818             xmin = MIN(alblw(i,1),xmin)
    819             xmax = MAX(alblw(i,1),xmax)
     816            xmin = MIN(alb2(i,1),xmin)
     817            xmax = MAX(alb2(i,1),xmax)
    820818         ENDDO
    821819         PRINT*,'Neige du sol <ALBLW>', xmin, xmax
    822820         DO nsrf = 2, nbsrf
    823821         DO i = 1, klon_glo
    824             alblw(i,nsrf) = alblw(i,1)
     822            alb2(i,nsrf) = alb2(i,1)
    825823         ENDDO
    826824         ENDDO
     
    15831581      call Scatter( qsol,qsol_p)
    15841582      call Scatter( snow,snow_p)
    1585       call Scatter( albe,albe_p)
    1586       call Scatter( alblw,alblw_p)
     1583      call Scatter( alb1,alb1_p)
     1584      call Scatter( alb2,alb2_p)
    15871585      call Scatter( evap,evap_p)
    15881586      call Scatter( radsol,radsol_p)
  • LMDZ4/trunk/libf/phylmd/phyredem.F

    r878 r888  
    55      SUBROUTINE phyredem (fichnom,dtime,radpas,ocean,
    66     .           rlat_p,rlon_p, pctsrf_p,tsol_p,
    7      .           albedo_p, alblw_p,
     7     .           alb1_p, alb2_p,
    88     .           rain_fall_p, snow_fall_p,solsw_p, sollw_p,
    99     .           radsol_p,zmea_p,zstd_p,zsig_p,
     
    4646      REAL qsol_p(klon)
    4747      REAL snow_p(klon,nbsrf)
    48       REAL albedo_p(klon,nbsrf)
    49 cIM BEG
    50       REAL alblw_p(klon,nbsrf)
    51 cIM END
     48      REAL alb1_p(klon,nbsrf)   ! albedo in visible SW interval 
     49      REAL alb2_p(klon,nbsrf)   ! albedo in near IR interval
    5250      REAL evap_p(klon,nbsrf)
    5351      REAL rain_fall_p(klon)
     
    8078      REAL qsol(klon_glo)
    8179      REAL snow(klon_glo,nbsrf)
    82       REAL albedo(klon_glo,nbsrf)
    83       REAL alblw(klon_glo,nbsrf)
     80      REAL alb1(klon_glo,nbsrf)
     81      REAL alb2(klon_glo,nbsrf)
    8482      REAL evap(klon_glo,nbsrf)
    8583      REAL rain_fall(klon_glo)
     
    147145      call Gather( qsol_p,qsol)
    148146      call Gather( snow_p,snow)
    149       call Gather( albedo_p,albedo)
    150       call Gather( alblw_p,alblw)
     147      call Gather( alb1_p,alb1)
     148      call Gather( alb2_p,alb2)
    151149      call Gather( evap_p,evap)
    152150      call Gather( radsol_p,radsol)
     
    481479        ENDIF
    482480#ifdef NC_DOUBLE
    483       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,albedo(1,nsrf))
    484 #else
    485       ierr = NF_PUT_VAR_REAL (nid,nvarid,albedo(1,nsrf))
    486 #endif
    487       ENDDO
    488 
    489 cIM BEG albedo LW
     481      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,alb1(1,nsrf))
     482#else
     483      ierr = NF_PUT_VAR_REAL (nid,nvarid,alb1(1,nsrf))
     484#endif
     485      ENDDO
     486
    490487        DO nsrf = 1, nbsrf
    491488        IF (nsrf.LE.99) THEN
     
    505502        ENDIF
    506503#ifdef NC_DOUBLE
    507       ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,alblw(1,nsrf))
    508 #else
    509       ierr = NF_PUT_VAR_REAL (nid,nvarid,alblw(1,nsrf))
    510 #endif
    511       ENDDO
    512 cIM END albedo LW
     504      ierr = NF_PUT_VAR_DOUBLE (nid,nvarid,alb2(1,nsrf))
     505#else
     506      ierr = NF_PUT_VAR_REAL (nid,nvarid,alb2(1,nsrf))
     507#endif
     508      ENDDO
     509c
    513510c
    514511      DO nsrf = 1, nbsrf
  • LMDZ4/trunk/libf/phylmd/physiq.F

    r883 r888  
    690690      REAL,save ::  solarlong0
    691691c
    692       REAL,allocatable,save :: falbe(:,:)
    693 c$OMP THREADPRIVATE(falbe)       ! albedo par type de surface
    694 c
    695       REAL,allocatable,save :: falblw(:,:)
    696 c$OMP THREADPRIVATE(falblw)       ! albedo par type de surface
     692      REAL,allocatable,save :: falb1(:,:)
     693c$OMP THREADPRIVATE(falb1)       ! albedo par type de surface pour SW visible
     694c
     695      REAL,allocatable,save :: falb2(:,:)
     696c$OMP THREADPRIVATE(falb2)       ! albedo par type de surface pour SW proche IR
    697697
    698698c
     
    969969cIM
    970970cym      SAVE pctsrf                 ! sous-fraction du sol
    971       REAL,allocatable,save :: albsol(:)
    972 c$OMP THREADPRIVATE(albsol)
    973 cym      SAVE albsol                 ! albedo du sol total
    974       REAL,allocatable,save :: albsollw(:)
    975 c$OMP THREADPRIVATE(albsollw)     
    976 cym      SAVE albsollw                 ! albedo du sol total
     971
     972      REAL,allocatable,save :: albsol1(:) ! albedo du sol total pour SW visible
     973c$OMP THREADPRIVATE(albsol1)
     974      REAL,allocatable,save :: albsol2(:) ! albedo du sol total pour SW proche IR
     975c$OMP THREADPRIVATE(albsol2)     
    977976
    978977      REAL,allocatable,save :: wo(:,:)
     
    15271526      allocate( ftsol(klon,nbsrf))
    15281527      allocate( deltat(klon))
    1529       allocate( falbe(klon,nbsrf))
    1530       allocate( falblw(klon,nbsrf))
     1528      allocate( falb1(klon,nbsrf))
     1529      allocate( falb2(klon,nbsrf))
    15311530      allocate( zmea(klon))
    15321531      allocate( zstd(klon))
     
    15731572      allocate( total_rain(klon), nday_rain(klon))
    15741573      allocate( pctsrf(klon,nbsrf))
    1575       allocate( albsol(klon))
    1576       allocate( albsollw(klon))
     1574      allocate( albsol1(klon))
     1575      allocate( albsol2(klon))
    15771576      allocate( wo(klon,klev))
    15781577      allocate( clwcon(klon,klev),rnebcon(klon,klev))
     
    17311730c        nhistoW(:,:,:,:) = 0.0
    17321731c        histoW(:,:,:,:) = 0.0
     1732! fin anne
    17331733
    17341734cIM     
     
    17731773     .       rlat,rlon,pctsrf, ftsol,
    17741774     .       ocean, ok_veget,
    1775      .       falbe, falblw, rain_fall,snow_fall,
     1775     .       falb1, falb2, rain_fall,snow_fall,
    17761776     .       solsw, sollw,
    17771777     .       radsol,clesphy0,
     
    23182318     e     t_seri,    q_seri,    u_seri,  v_seri,   
    23192319     e     pplay,     paprs,     pctsrf,           
    2320      +     ftsol,     falbe,     falblw,  u10m,   v10m,
     2320     +     ftsol,     falb1,     falb2,   u10m,   v10m,
    23212321     s     sollwdown, cdragh,    cdragm,  yu1,    yv1,
    2322      s     albsol,    albsollw,  sens,    evap, 
     2322     s     albsol1,   albsol2,   sens,    evap, 
    23232323     s     zxtsol,    zxfluxlat, zt2m,    qsat2m,
    23242324     s     d_t_vdf,   d_q_vdf,   d_u_vdf, d_v_vdf,
     
    32333233     $                          zxsnow_dummy,
    32343234     $                          solsw,
    3235      $                          albsol,
     3235     $                          albsol1,
    32363236     $                          rain_fall,
    32373237     $                          snow_fall,
     
    32943294
    32953295      DO i = 1, klon
    3296          albsol(i) = falbe(i,is_oce) * pctsrf(i,is_oce)
    3297      .             + falbe(i,is_lic) * pctsrf(i,is_lic)
    3298      .             + falbe(i,is_ter) * pctsrf(i,is_ter)
    3299      .             + falbe(i,is_sic) * pctsrf(i,is_sic)
    3300          albsollw(i) = falblw(i,is_oce) * pctsrf(i,is_oce)
    3301      .               + falblw(i,is_lic) * pctsrf(i,is_lic)
    3302      .               + falblw(i,is_ter) * pctsrf(i,is_ter)
    3303      .               + falblw(i,is_sic) * pctsrf(i,is_sic)
     3296         albsol1(i) = falb1(i,is_oce) * pctsrf(i,is_oce)
     3297     .             + falb1(i,is_lic) * pctsrf(i,is_lic)
     3298     .             + falb1(i,is_ter) * pctsrf(i,is_ter)
     3299     .             + falb1(i,is_sic) * pctsrf(i,is_sic)
     3300         albsol2(i) = falb2(i,is_oce) * pctsrf(i,is_oce)
     3301     .               + falb2(i,is_lic) * pctsrf(i,is_lic)
     3302     .               + falb2(i,is_ter) * pctsrf(i,is_ter)
     3303     .               + falb2(i,is_sic) * pctsrf(i,is_sic)
    33043304      ENDDO
    33053305
     
    33353335      CALL radlwsw ! nouveau rayonnement (compatible Arpege-IFS)
    33363336     e            (dist, rmu0, fract,
    3337      e             paprs, pplay,zxtsol,albsol, albsollw, t_seri,q_seri,
     3337     e             paprs, pplay,zxtsol,albsol1, albsol2, t_seri,q_seri,
    33383338     e             wo,
    33393339     e             cldfra, cldemi, cldtau,
     
    35743574     I                   pphis,
    35753575     I                   pphi,
    3576      I                   albsol,
     3576     I                   albsol1,
    35773577     I                   qx(1,1,1),
    35783578     I                   rhcl,
     
    38273827c pour ecriture dans histxxx.nc
    38283828
    3829       ! Get some variables from module mod_fonte_neige
     3829      ! Get some variables from module fonte_neige_mod
    38303830      CALL fonte_neige_get_vars(pctsrf,
    38313831     .     zxfqcalving, zxfqfonte, zxffonte)
    38323832
    38333833      IF (ocean == 'slab') THEN
    3834          ! Get some variables from module oceanslab
     3834         ! Get some variables from module ocean_slab_mod
    38353835         CALL ocean_slab_get_vars(tslab, seaice, fluxo, fluxg)
    38363836      ELSEIF (ocean == 'couple') THEN
    3837          ! Get some variables from module oceancpl
     3837         ! Get some variables from module ocean_cpl_mod
    38383838         CALL ocean_cpl_get_vars(fluxo, fluxg)
    38393839      ELSE
    3840          ! Get some variables from module oceanforced
     3840         ! Get some variables from module ocean_forced_mod
    38413841         CALL ocean_forced_get_vars(fluxo, fluxg)
    38423842      ENDIF
     
    38843884         CALL phyredem ("restartphy.nc",dtime,radpas,ocean,
    38853885     .      rlat, rlon, pctsrf, ftsol,
    3886      .      falbe,falblw, rain_fall,
     3886     .      falb1, falb2, rain_fall,
    38873887     .      snow_fall,
    38883888     .      solsw, sollw,
  • LMDZ4/trunk/libf/phylmd/radlwsw.F

    r776 r888  
    33!
    44      SUBROUTINE radlwsw(dist, rmu0, fract,
    5      .                  paprs, pplay,tsol,albedo, alblw, t,q,wo,
     5     .                  paprs, pplay,tsol,alb1, alb2, t,q,wo,
    66     .                  cldfra, cldemi, cldtaupd,
    77     .                  heat,heat0,cool,cool0,radsol,albpla,
     
    3030c pplay----input-R- pression au milieu de couche (Pa)
    3131c tsol-----input-R- temperature du sol (en K)
    32 c albedo---input-R- albedo du sol (entre 0 et 1)
     32c alb1-----input-R- albedo du sol(entre 0 et 1) dans l'interval visible
     33c alb2-----input-R- albedo du sol(entre 0 et 1) dans l'interval proche infra-rouge
    3334c t--------input-R- temperature (K)
    3435c q--------input-R- vapeur d'eau (en kg/kg)
     
    8182c
    8283      real paprs(klon,klev+1), pplay(klon,klev)
    83       real albedo(klon), alblw(klon), tsol(klon)
     84      real alb1(klon), alb2(klon), tsol(klon)
    8485      real t(klon,klev), q(klon,klev), wo(klon,klev)
    8586      real cldfra(klon,klev), cldemi(klon,klev), cldtaupd(klon,klev)
     
    209210         zfract(i) = fract(iof+i)
    210211         zrmu0(i) = rmu0(iof+i)
    211          PALBD(i,1) = albedo(iof+i)
    212 !         PALBD(i,2) = albedo(iof+i)
    213          PALBD(i,2) = alblw(iof+i)
    214          PALBP(i,1) = albedo(iof+i)
    215 !         PALBP(i,2) = albedo(iof+i)
    216          PALBP(i,2) = alblw(iof+i)
     212         PALBD(i,1) = alb1(iof+i)
     213!         PALBD(i,2) = alb1(iof+i)
     214         PALBD(i,2) = alb2(iof+i)
     215         PALBP(i,1) = alb1(iof+i)
     216!         PALBP(i,2) = alb1(iof+i)
     217         PALBP(i,2) = alb2(iof+i)
    217218cIM cf. JLD pour etre en accord avec ORCHIDEE il faut mettre PEMIS(i) = 0.96
    218219         PEMIS(i) = 1.0
  • LMDZ4/trunk/libf/phylmd/surf_land_bucket_mod.F90

    r793 r888  
    2020  SUBROUTINE surf_land_bucket(itime, jour, knon, knindex, debut, dtime,&
    2121       tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, &
    22        spechum, petAcoef, peqAcoef, petBcoef, peqBcoef, ps, &
    23        u1_lay, v1_lay, rugoro, &
    24        radsol, snow, qsol, agesno, tsoil, &
    25        qsurf, z0_new, alblw, evap, fluxsens, fluxlat, &
    26        tsurf_new, alb_new, dflux_s, dflux_l)
     22       spechum, petAcoef, peqAcoef, petBcoef, peqBcoef, pref, &
     23       u1_lay, v1_lay, rugoro, swnet, lwnet, &
     24       snow, qsol, agesno, tsoil, &
     25       qsurf, z0_new, alb1_new, alb2_new, evap, &
     26       fluxsens, fluxlat, tsurf_new, dflux_s, dflux_l)
    2727
    2828!****************************************************************************************
     
    4747    REAL, DIMENSION(klon), INTENT(IN)       :: petAcoef, peqAcoef
    4848    REAL, DIMENSION(klon), INTENT(IN)       :: petBcoef, peqBcoef
    49     REAL, DIMENSION(klon), INTENT(IN)       :: ps
     49    REAL, DIMENSION(klon), INTENT(IN)       :: pref
    5050    REAL, DIMENSION(klon), INTENT(IN)       :: u1_lay, v1_lay
    5151    REAL, DIMENSION(klon), INTENT(IN)       :: rugoro
     52    REAL, DIMENSION(klon), INTENT(IN)       :: swnet, lwnet
    5253
    5354! In/Output variables
    5455!****************************************************************************************
    55     REAL, DIMENSION(klon), INTENT(INOUT)          :: radsol
    5656    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsol
    5757    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
     
    6262    REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    6363    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
    64     REAL, DIMENSION(klon), INTENT(OUT)       :: alblw
     64    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new, alb2_new
    6565    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
    66     REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new, alb_new
     66    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
    6767    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
    6868
     
    7171    REAL, DIMENSION(klon) :: soilcap, soilflux
    7272    REAL, DIMENSION(klon) :: cal, beta, dif_grnd, capsol
    73     REAL, DIMENSION(klon) :: alb_neig
     73    REAL, DIMENSION(klon) :: alb_neig, alb_lim
    7474    REAL, DIMENSION(klon) :: zfra
     75    REAL, DIMENSION(klon) :: radsol       ! total net radiance at surface
    7576    INTEGER               :: i
    7677!
     
    7980
    8081!
    81 !* Read from limit.nc : albedo(alb_new), length of rugosity(z0_new)
     82!* Read from limit.nc : albedo(alb_lim), length of rugosity(z0_new)
    8283!
    8384    CALL interfsur_lim(itime, dtime, jour, &
    8485         knon, knindex, debut,  &
    85          alb_new, z0_new)
     86         alb_lim, z0_new)
    8687   
    8788!
    8889!* Calcultaion of fluxes
    8990!
     91
     92! calculate total absorbed radiance at surface
     93       radsol(:) = 0.0
     94       radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     95
    9096! calculate constants
    9197    CALL calbeta(dtime, is_ter, knon, snow, qsol, beta, capsol, dif_grnd)
     
    103109   
    104110    CALL calcul_fluxs(knon, is_ter, dtime, &
    105          tsurf, p1lay, cal, beta, tq_cdrag, ps, &
     111         tsurf, p1lay, cal, beta, tq_cdrag, pref, &
    106112         precip_rain, precip_snow, snow, qsurf,  &
    107113         radsol, dif_grnd, temp_air, spechum, u1_lay, v1_lay, &
     
    124130    DO i=1, knon
    125131       zfra(i) = MAX(0.0,MIN(1.0, snow(i)/(snow(i)+10.0)))
    126        alb_new(i)  = alb_neig(i) *zfra(i) + alb_new(i)*(1.0-zfra(i))
     132       alb_lim(i)  = alb_neig(i) *zfra(i) + alb_lim(i)*(1.0-zfra(i))
    127133    END DO
    128134
    129     alblw(:) = 0.0
    130     alblw(1:knon) = alb_new(1:knon)
    131 
     135!
     136!* Return albedo :
     137!    alb1_new and alb2_new are here given the same values
     138!
     139    alb1_new(:) = 0.0
     140    alb2_new(:) = 0.0
     141    alb1_new(1:knon) = alb_lim(1:knon)
     142    alb2_new(1:knon) = alb_lim(1:knon)
     143       
    132144!
    133145!* Calculate the rugosity
  • LMDZ4/trunk/libf/phylmd/surf_land_mod.F90

    r793 r888  
    2020  SUBROUTINE surf_land(itime, dtime, date0, jour, knon, knindex, &
    2121       rlon, rlat, &
    22        debut, lafin, zlev, epot_air, ccanopy, sollwdown, swnet, swdown, &
     22       debut, lafin, zlev, ccanopy, swnet, lwnet, albedo, &
    2323       tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
    2424       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    25        ps, u1_lay, v1_lay, rugoro, pctsrf, &
    26        radsol, snow, qsurf, qsol, agesno, &
    27        tsoil, z0_new, alblw, evap, fluxsens, fluxlat, &
    28        tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_ter)
     25       pref, u1_lay, v1_lay, rugoro, pctsrf, &
     26       snow, qsol, agesno, tsoil, &
     27       z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     28       qsurf, tsurf_new, dflux_s, dflux_l, pctsrf_ter, &
     29       lwdown_m)
    2930
    3031    INCLUDE "indicesol.h"
    3132    INCLUDE "dimsoil.h"
     33    INCLUDE "YOMCST.h"
    3234
    3335! Input variables 
     
    3941    LOGICAL, INTENT(IN)                     :: debut, lafin
    4042    REAL, INTENT(IN)                        :: dtime
    41     REAL, DIMENSION(klon), INTENT(IN)       :: zlev, epot_air, ccanopy
    42     REAL, DIMENSION(klon), INTENT(IN)       :: sollwdown, swnet, swdown   
     43    REAL, DIMENSION(klon), INTENT(IN)       :: zlev, ccanopy
     44    REAL, DIMENSION(klon), INTENT(IN)       :: swnet, lwnet
     45    REAL, DIMENSION(klon), INTENT(IN)       :: albedo  ! albedo for whole short-wave interval
    4346    REAL, DIMENSION(klon), INTENT(IN)       :: tsurf
    4447    REAL, DIMENSION(klon), INTENT(IN)       :: p1lay
     
    4851    REAL, DIMENSION(klon), INTENT(IN)       :: petAcoef, peqAcoef
    4952    REAL, DIMENSION(klon), INTENT(IN)       :: petBcoef, peqBcoef
    50     REAL, DIMENSION(klon), INTENT(IN)       :: ps
     53    REAL, DIMENSION(klon), INTENT(IN)       :: pref   ! pressure reference
    5154    REAL, DIMENSION(klon), INTENT(IN)       :: u1_lay, v1_lay
    5255    REAL, DIMENSION(klon), INTENT(IN)       :: rugoro
    5356    REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf
    5457
     58    REAL, DIMENSION(klon), INTENT(IN)       :: lwdown_m  ! downwelling longwave radiation at mean surface
     59                                                         ! corresponds to previous sollwdown
     60
    5561! In/Output variables
    5662!****************************************************************************************
    57     REAL, DIMENSION(klon), INTENT(INOUT)          :: radsol
    5863    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsol
    5964    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
     
    6267! Output variables
    6368!****************************************************************************************
     69    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
     70    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new ! albdeo for shortwave interval 1(visible)
     71    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new ! albedo for shortwave interval 2(near infrared)
     72    REAL, DIMENSION(klon), INTENT(OUT)       :: evap
     73    REAL, DIMENSION(klon), INTENT(OUT)       :: fluxsens, fluxlat
    6474    REAL, DIMENSION(klon), INTENT(OUT)       :: qsurf
    65     REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
    66     REAL, DIMENSION(klon), INTENT(OUT)       :: alblw
    67     REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
    68     REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new, alb_new
     75    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
    6976    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
    7077    REAL, DIMENSION(klon), INTENT(OUT)       :: pctsrf_ter
     
    7279! Local variables
    7380!****************************************************************************************
    74     REAL, DIMENSION(klon) :: ps_tmp, p1lay_tmp
     81    REAL, DIMENSION(klon) :: p1lay_tmp
     82    REAL, DIMENSION(klon) :: pref_tmp
     83    REAL, DIMENSION(klon) :: swdown     ! downwelling shortwave radiation at land surface
     84    REAL, DIMENSION(klon) :: lwdown     ! downwelling longwave radiation at land surface
     85    REAL, DIMENSION(klon) :: epot_air           ! potential air temperature
    7586    REAL, DIMENSION(klon) :: tsol_rad, emis_new ! output from interfsol not used
    7687    INTEGER               :: i
     
    8394   IF (ok_veget) THEN
    8495!****************************************************************************************
    85 !  Call model sechiba
     96!  Call model sechiba in model ORCHIDEE
    8697!
    8798!****************************************************************************************
    8899       p1lay_tmp(:)      = 0.0
    89        ps_tmp(:)         = 0.0
     100       pref_tmp(:)       = 0.0
    90101       p1lay_tmp(1:knon) = p1lay(1:knon)/100.
    91        ps_tmp(1:knon)    = ps(1:knon)/100.
     102       pref_tmp(1:knon)  = pref(1:knon)/100.
     103!
     104!* Calculate incoming flux for SW and LW interval: swdown, lwdown
     105!
     106       swdown(:) = 0.0
     107       lwdown(:) = 0.0
     108       DO i = 1, knon
     109          swdown(i) = swnet(i)/(1-albedo(i))
     110          lwdown(i) = lwnet(i) + RSIGMA*tsurf(i)**4
     111       END DO
     112!
     113!* Calculate potential air temperature
     114!
     115       epot_air(:) = 0.0
     116       DO i = 1, knon
     117          epot_air(i) = RCPD*temp_air(i)*(pref(i)/p1lay(i))**RKAPPA
     118       END DO
    92119
    93120#ifdef CPP_VEGET
     121       ! temporary for keeping same results using lwdown_m instead of lwdown
    94122       CALL surf_land_orchidee(itime, dtime, date0, knon, &
    95123            knindex, rlon, rlat, pctsrf, &
     
    97125            zlev,  u1_lay, v1_lay, temp_air, spechum, epot_air, ccanopy, &
    98126            tq_cdrag, petAcoef, peqAcoef, petBcoef, peqBcoef, &
    99             precip_rain, precip_snow, sollwdown, swnet, swdown, &
    100             ps_tmp, &
     127            precip_rain, precip_snow, lwdown_m, swnet, swdown, &
     128            pref_tmp, &
    101129            evap, fluxsens, fluxlat, &             
    102             tsol_rad, tsurf_new, alb_new, alblw, &
     130            tsol_rad, tsurf_new, alb1_new, alb2_new, &
    103131            emis_new, z0_new, qsurf)       
    104132#endif
    105133
    106134
    107 !* Ajout de la contribution du relief
     135!* Add contribution of relief to surface roughness
    108136
    109137       DO i=1,knon
     
    118146       CALL surf_land_bucket(itime, jour, knon, knindex, debut, dtime,&
    119147            tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, &
    120             spechum, petAcoef, peqAcoef, petBcoef, peqBcoef, ps, &
    121             u1_lay, v1_lay, rugoro, &
    122             radsol, snow, qsol, agesno, tsoil, &
    123             qsurf, z0_new, alblw, evap, fluxsens, fluxlat, &
    124             tsurf_new, alb_new, dflux_s, dflux_l)
     148            spechum, petAcoef, peqAcoef, petBcoef, peqBcoef, pref, &
     149            u1_lay, v1_lay, rugoro, swnet, lwnet, &
     150            snow, qsol, agesno, tsoil, &
     151            qsurf, z0_new, alb1_new, alb2_new, evap, &
     152            fluxsens, fluxlat, tsurf_new, dflux_s, dflux_l)
    125153
    126154    ENDIF ! ok_veget
  • LMDZ4/trunk/libf/phylmd/surf_land_orchidee_mod.F90

    r854 r888  
    3737       ps, &
    3838       evap, fluxsens, fluxlat, &             
    39        tsol_rad, tsurf_new, alb_new, alblw, &
     39       tsol_rad, tsurf_new, alb1_new, alb2_new, &
    4040       emis_new, z0_new, qsurf)
    4141!   
     
    8484!   tsol_rad     
    8585!   tsurf_new    temperature au sol
    86 !   alb_new      albedo
     86!   alb1_new     albedo in visible SW interval
     87!   alb2_new     albedo in near IR interval
    8788!   emis_new     emissivite
    8889!   z0_new       surface roughness
     
    120121!****************************************************************************************
    121122    REAL, DIMENSION(klon), INTENT(OUT)        :: evap, fluxsens, fluxlat, qsurf
    122     REAL, DIMENSION(klon), INTENT(OUT)        :: tsol_rad, tsurf_new, alb_new, alblw
     123    REAL, DIMENSION(klon), INTENT(OUT)        :: tsol_rad, tsurf_new
     124    REAL, DIMENSION(klon), INTENT(OUT)        :: alb1_new, alb2_new
    123125    REAL, DIMENSION(klon), INTENT(OUT)        :: emis_new, z0_new
    124126
     
    442444    ENDIF
    443445
    444     alb_new(1:knon) = albedo_out(1:knon,1)
    445     alblw(1:knon) = albedo_out(1:knon,2)
     446    alb1_new(1:knon) = albedo_out(1:knon,1)
     447    alb2_new(1:knon) = albedo_out(1:knon,2)
    446448
    447449! Convention orchidee: positif vers le haut
  • LMDZ4/trunk/libf/phylmd/surf_landice_mod.F90

    r793 r888  
    1717!
    1818  SUBROUTINE surf_landice(itime, dtime, knon, knindex, &
    19        tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
     19       swnet, lwnet, tsurf, p1lay, &
     20       tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
    2021       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    2122       ps, u1_lay, v1_lay, rugoro, pctsrf, &
    22        radsol, snow, qsurf, qsol, agesno, &
    23        tsoil, z0_new, alblw, evap, fluxsens, fluxlat, &
    24        tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_lic)
     23       snow, qsurf, qsol, agesno, &
     24       tsoil, z0_new, alb1, alb2, evap, fluxsens, fluxlat, &
     25       tsurf_new, dflux_s, dflux_l, pctsrf_lic)
    2526
    2627    INCLUDE "indicesol.h"
     
    3435    INTEGER, DIMENSION(klon), INTENT(in)          :: knindex
    3536    REAL, INTENT(in)                              :: dtime
     37    REAL, DIMENSION(klon), INTENT(IN)             :: swnet ! net shortwave radiance
     38    REAL, DIMENSION(klon), INTENT(IN)             :: lwnet ! net longwave radiance
    3639    REAL, DIMENSION(klon), INTENT(IN)             :: tsurf
    3740    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
     
    4851! In/Output variables
    4952!****************************************************************************************
    50     REAL, DIMENSION(klon), INTENT(INOUT)          :: radsol
    5153    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsol
    5254    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
     
    5759    REAL, DIMENSION(klon), INTENT(OUT)            :: qsurf
    5860    REAL, DIMENSION(klon), INTENT(OUT)            :: z0_new
    59     REAL, DIMENSION(klon), INTENT(OUT)            :: alblw
     61    REAL, DIMENSION(klon), INTENT(OUT)            :: alb1  ! new albedo in visible SW interval
     62    REAL, DIMENSION(klon), INTENT(OUT)            :: alb2  ! new albedo in near IR interval
    6063    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
    61     REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new, alb_new
     64    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
    6265    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
    6366    REAL, DIMENSION(klon), INTENT(OUT)            :: pctsrf_lic
     
    6871    REAL, DIMENSION(klon)    :: cal, beta, dif_grnd
    6972    REAL, DIMENSION(klon)    :: zfra, alb_neig
     73    REAL, DIMENSION(klon)    :: radsol
    7074
    7175! End definition
     
    7377!
    7478! Initialize output variables
    75     alblw(:) = 999999.
    76     alb_new(:) = 999999.
     79    alb2(:) = 999999.
     80    alb1(:) = 999999.
    7781
     82!****************************************************************************************
     83! Calculate total absorbed radiance at surface
     84!
     85!****************************************************************************************
     86    radsol(:) = 0.0
     87    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
    7888
    7989!****************************************************************************************
     
    122132    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.
    123133    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0)))
    124     alb_new(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
     134    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
    125135         0.6 * (1.0-zfra(1:knon))
    126136!
    127137!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
    128 !       alb_new(1 : knon)  = 0.6 !IM cf FH/GK
    129 !       alb_new(1 : knon)  = 0.82
    130 !       alb_new(1 : knon)  = 0.77 !211003 Ksta0.77
    131 !       alb_new(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
     138!       alb1(1 : knon)  = 0.6 !IM cf FH/GK
     139!       alb1(1 : knon)  = 0.82
     140!       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
     141!       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
    132142!IM: KstaTER0.77 & LMD_ARMIP6   
    133143
    134 ! Attantion: alb_new and alblw are the same!
    135     alb_new(1:knon)  = 0.77
    136     alblw(1:knon)    = alb_new(1:knon)
     144! Attantion: alb1 and alb2 are the same!
     145    alb1(1:knon)  = 0.77
     146    alb2(1:knon)  = alb1(1:knon)
    137147
    138148
  • LMDZ4/trunk/libf/phylmd/surf_ocean_mod.F90

    r793 r888  
    1616!****************************************************************************************
    1717!
    18   SUBROUTINE surf_ocean(rlon, rlat, sollw, albedo, &
    19        rugos, windsp, rmu0, &
    20        fder, &
     18  SUBROUTINE surf_ocean(rlon, rlat, swnet, lwnet, alb1, &
     19       rugos, windsp, rmu0, fder, &
    2120       itime, dtime, jour, knon, knindex, &
    22        debut, swdown, &
     21       debut, &
    2322       p1lay, tq_cdrag, coefm, precip_rain, precip_snow, temp_air, spechum, &
    2423       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    2524       ps, u1_lay, v1_lay, rugoro, pctsrf, &
    26        radsol, snow, qsurf, agesno, &
    27        z0_new, alblw, evap, fluxsens, fluxlat, &
    28        tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_oce)
     25       snow, qsurf, agesno, &
     26       z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     27       tsurf_new, dflux_s, dflux_l, pctsrf_oce)
    2928!
    3029! This subroutine will make a call to ocean_XXX_noice according to the ocean mode (force,
     
    4140    REAL, INTENT(IN)                         :: dtime
    4241    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
    43     REAL, DIMENSION(klon), INTENT(IN)        :: sollw
    44     REAL, DIMENSION(klon), INTENT(IN)        :: albedo
     42    REAL, DIMENSION(klon), INTENT(IN)        :: swnet  ! net shortwave radiation at surface 
     43    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet  ! net longwave radiation at surface 
     44    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
    4545    REAL, DIMENSION(klon), INTENT(IN)        :: rugos
    4646    REAL, DIMENSION(klon), INTENT(IN)        :: windsp
    4747    REAL, DIMENSION(klon), INTENT(IN)        :: rmu0 
    4848    REAL, DIMENSION(klon), INTENT(IN)        :: fder
    49     REAL, DIMENSION(klon), INTENT(IN)        :: swdown   
    5049    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
    5150    REAL, DIMENSION(klon), INTENT(IN)        :: tq_cdrag
     
    6362! In/Output variables
    6463!****************************************************************************************
    65     REAL, DIMENSION(klon), INTENT(INOUT)     :: radsol
    66     REAL, DIMENSION(klon), INTENT(INOUT)     :: snow, qsurf
     64    REAL, DIMENSION(klon), INTENT(INOUT)     :: snow
     65    REAL, DIMENSION(klon), INTENT(INOUT)     :: qsurf
    6766    REAL, DIMENSION(klon), INTENT(INOUT)     :: agesno
    6867
     
    7069!****************************************************************************************
    7170    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
    72     REAL, DIMENSION(klon), INTENT(OUT)       :: alblw
     71    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new  ! new albedo in visible SW interval
     72    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new  ! new albedo in near IR interval
    7373    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
    74     REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new, alb_new
     74    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
    7575    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
    7676    REAL, DIMENSION(klon), INTENT(OUT)       :: pctsrf_oce
     
    8181    INTEGER               :: i
    8282    REAL, DIMENSION(klon) :: alb_eau
     83    REAL, DIMENSION(klon) :: radsol
    8384
    8485! End definition
    8586!****************************************************************************************
    86 !
     87
     88
     89!****************************************************************************************
     90! Calculate total net radiance at surface
     91!
     92!****************************************************************************************
     93    radsol(:) = 0.0
     94    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
     95
     96!****************************************************************************************
    8797! Switch according to type of ocean (couple, slab or forced)
    8898!****************************************************************************************
    8999    SELECT CASE(ocean)
    90100    CASE('couple')
    91        CALL ocean_cpl_noice(&
    92             sollw, albedo, &
     101       CALL ocean_cpl_noice( &
     102            swnet, lwnet, alb1, &
    93103            windsp, &
    94104            fder, &
    95105            itime, dtime, knon, knindex, &
    96             swdown, &
    97106            p1lay, tq_cdrag, precip_rain, precip_snow,temp_air,spechum,&
    98107            petAcoef, peqAcoef, petBcoef, peqBcoef, &
    99108            ps, u1_lay, v1_lay, pctsrf, &
    100             radsol, snow, qsurf, agesno, &
    101             evap, fluxsens, fluxlat, &
     109            radsol, snow, agesno, &
     110            qsurf, evap, fluxsens, fluxlat, &
    102111            tsurf_new, dflux_s, dflux_l, pctsrf_oce)
    103112
    104113    CASE('slab')
    105        CALL ocean_slab_noice(&
     114       CALL ocean_slab_noice( &
    106115            dtime, knon, knindex, &
    107116            p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum,&
    108117            petAcoef, peqAcoef, petBcoef, peqBcoef, &
    109118            ps, u1_lay, v1_lay, &
    110             radsol, snow, qsurf, agesno, &
    111             evap, fluxsens, fluxlat, &
    112             tsurf_new, &
    113             dflux_s, dflux_l, pctsrf_oce)
     119            radsol, snow, agesno, &
     120            qsurf, evap, fluxsens, fluxlat, &
     121            tsurf_new, dflux_s, dflux_l, pctsrf_oce)
    114122       
    115123    CASE('force')
    116        CALL ocean_forced_noice(itime, dtime, jour, knon, knindex, &
     124       CALL ocean_forced_noice( &
     125            itime, dtime, jour, knon, knindex, &
    117126            debut, &
    118127            p1lay, tq_cdrag, precip_rain, precip_snow, &
     
    120129            petAcoef, peqAcoef, petBcoef, peqBcoef, &
    121130            ps, u1_lay, v1_lay, &
    122             radsol, snow, qsurf, &
    123             agesno, &
    124             evap, fluxsens, fluxlat, &
     131            radsol, snow, agesno, &
     132            qsurf, evap, fluxsens, fluxlat, &
    125133            tsurf_new, dflux_s, dflux_l, pctsrf_oce)
    126134    END SELECT
     
    137145
    138146    DO i =1, knon
    139        alb_new(i) = alb_eau(knindex(i))
     147       alb1_new(i) = alb_eau(knindex(i))
    140148    ENDDO
     149    alb2_new(1:knon) = alb1_new(1:knon)
    141150
    142151!****************************************************************************************
     
    154163    ENDDO
    155164   
    156     alblw(1:knon) = alb_new(1:knon)
    157165!
    158166!****************************************************************************************
  • LMDZ4/trunk/libf/phylmd/surf_seaice_mod.F90

    r793 r888  
    1616!
    1717  SUBROUTINE surf_seaice( &
    18        rlon, rlat, sollw, albedo, &
    19        fder, &
     18       rlon, rlat, swnet, lwnet, alb1, fder, &
    2019       itime, dtime, jour, knon, knindex, &
    21        debut, lafin, swdown, &
     20       debut, lafin, &
    2221       tsurf, p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum, &
    2322       petAcoef, peqAcoef, petBcoef, peqBcoef, &
    2423       ps, u1_lay, v1_lay, rugoro, pctsrf, &
    25        radsol, snow, qsurf, qsol, agesno, &
    26        tsoil, z0_new, alblw, evap, fluxsens, fluxlat, &
    27        tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_sic)
     24       snow, qsurf, qsol, agesno, tsoil, &
     25       z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     26       tsurf_new, dflux_s, dflux_l, pctsrf_sic)
    2827!
    2928! This subroutine will make a call to ocean_XXX_ice according to the ocean mode (force,
     
    4140    REAL, INTENT(IN)                         :: dtime
    4241    REAL, DIMENSION(klon), INTENT(IN)        :: rlon, rlat
    43     REAL, DIMENSION(klon), INTENT(IN)        :: sollw
    44     REAL, DIMENSION(klon), INTENT(IN)        :: albedo
     42    REAL, DIMENSION(klon), INTENT(IN)        :: swnet  ! net shortwave radiation at surface 
     43    REAL, DIMENSION(klon), INTENT(IN)        :: lwnet  ! net longwave radiation at surface 
     44    REAL, DIMENSION(klon), INTENT(IN)        :: alb1   ! albedo in visible SW interval
    4545    REAL, DIMENSION(klon), INTENT(IN)        :: fder
    46     REAL, DIMENSION(klon), INTENT(IN)        :: swdown   
    4746    REAL, DIMENSION(klon), INTENT(IN)        :: tsurf
    4847    REAL, DIMENSION(klon), INTENT(IN)        :: p1lay
     
    5958! In/Output arguments
    6059!****************************************************************************************
    61     REAL, DIMENSION(klon), INTENT(INOUT)          :: radsol
    6260    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsurf, qsol
    6361    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
     
    6765!****************************************************************************************
    6866    REAL, DIMENSION(klon), INTENT(OUT)       :: z0_new
    69     REAL, DIMENSION(klon), INTENT(OUT)       :: alblw
     67    REAL, DIMENSION(klon), INTENT(OUT)       :: alb1_new  ! new albedo in visible SW interval
     68    REAL, DIMENSION(klon), INTENT(OUT)       :: alb2_new  ! new albedo in near IR interval
    7069    REAL, DIMENSION(klon), INTENT(OUT)       :: evap, fluxsens, fluxlat
    71     REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new, alb_new
     70    REAL, DIMENSION(klon), INTENT(OUT)       :: tsurf_new
    7271    REAL, DIMENSION(klon), INTENT(OUT)       :: dflux_s, dflux_l     
    7372    REAL, DIMENSION(klon), INTENT(OUT)       :: pctsrf_sic
    7473
     74! Local arguments
     75!****************************************************************************************
     76    REAL, DIMENSION(klon)  :: radsol
     77!
    7578! End definitions
    7679!****************************************************************************************
     80
     81
     82!****************************************************************************************
     83! Calculate total net radiance at surface
     84!
     85!****************************************************************************************
     86    radsol(:) = 0.0
     87    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
    7788
    7889!****************************************************************************************
     
    8394    CASE('couple')
    8495       CALL ocean_cpl_ice( &
    85           rlon, rlat, sollw, albedo, &
     96          rlon, rlat, swnet, lwnet, alb1, &
    8697          fder, &
    8798          itime, dtime, knon, knindex, &
    8899          lafin,&
    89           swdown, &
    90100          p1lay, tq_cdrag, precip_rain, precip_snow, temp_air, spechum,&
    91101          petAcoef, peqAcoef, petBcoef, peqBcoef, &
    92102          ps, u1_lay, v1_lay, pctsrf, &
    93103          radsol, snow, qsurf, &
    94           alblw, evap, fluxsens, fluxlat, &
    95           tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_sic)
     104          alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     105          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
    96106
    97107    CASE('slab')
     
    102112          petAcoef, peqAcoef, petBcoef, peqBcoef, &
    103113          ps, u1_lay, v1_lay, &
    104           radsol, snow, qsurf, qsol, agesno, &
    105           tsoil, &
    106           alblw, evap, fluxsens, fluxlat, &
    107           tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_sic)
     114          radsol, snow, qsurf, qsol, agesno, tsoil, &
     115          alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     116          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
    108117   
    109118    CASE('force')
     
    113122          petAcoef, peqAcoef, petBcoef, peqBcoef, &
    114123          ps, u1_lay, v1_lay, &
    115           radsol, snow, qsurf, qsol, agesno, &
    116           tsoil, alblw, evap, fluxsens, fluxlat, &
    117           tsurf_new, alb_new, dflux_s, dflux_l, pctsrf_sic)
     124          radsol, snow, qsol, agesno, tsoil, &
     125          qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, &
     126          tsurf_new, dflux_s, dflux_l, pctsrf_sic)
    118127    END SELECT
    119128
  • LMDZ4/trunk/libf/phylmd/write_histday.h

    r879 r888  
    515515     $                     zx_tmp_fi2d)
    516516C
    517         zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)
     517        zx_tmp_fi2d(1 : klon) = falb1( 1 : klon, nsrf)
    518518cym        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
    519519        CALL histwrite_phy(nid_day,"albe_"//clnsurf(nsrf),itau_w,
  • LMDZ4/trunk/libf/phylmd/write_histhf.h

    r782 r888  
    100100      CALL histwrite_phy(nid_hf,"SWnetOR",itau_w, zx_tmp_fi2d)
    101101c
    102       zx_tmp_fi2d(1:klon) = solsw(1:klon)/(1.-albsol(1:klon))
     102      zx_tmp_fi2d(1:klon) = solsw(1:klon)/(1.-albsol1(1:klon))
    103103cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d, zx_tmp_2d)
    104104      CALL histwrite_phy(nid_hf,"SWdownOR",itau_w, zx_tmp_fi2d)
  • LMDZ4/trunk/libf/phylmd/write_histins.h

    r776 r888  
    145145     $      zx_tmp_fi2d)
    146146C
    147         zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)
     147        zx_tmp_fi2d(1 : klon) = falb1( 1 : klon, nsrf)
    148148cym        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
    149149        CALL histwrite_phy(nid_ins,"albe_"//clnsurf(nsrf),itau_w,
     
    151151C
    152152      END DO 
    153 cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol,zx_tmp_2d)
    154       CALL histwrite_phy(nid_ins,"albs",itau_w,albsol)
     153cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol1,zx_tmp_2d)
     154      CALL histwrite_phy(nid_ins,"albs",itau_w,albsol1)
    155155     
    156 cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsollw,zx_tmp_2d)
    157       CALL histwrite_phy(nid_ins,"albslw",itau_w,albsollw)
     156cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol2,zx_tmp_2d)
     157      CALL histwrite_phy(nid_ins,"albslw",itau_w,albsol2)
    158158
    159159c
  • LMDZ4/trunk/libf/phylmd/write_histmth.h

    r879 r888  
    671671       DO nsrf=1, nbsrf
    672672c
    673         zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)
     673        zx_tmp_fi2d(1 : klon) = falb1( 1 : klon, nsrf)
    674674cym        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
    675675        CALL histwrite_phy(nid_mth,"albe_"//clnsurf(nsrf),itau_w,
     
    688688      ENDDO !nsrf=1, nbsrf
    689689c
    690 cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol,zx_tmp_2d)
    691       CALL histwrite_phy(nid_mth,"albs",itau_w,albsol)
    692 c
    693 cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsollw,zx_tmp_2d)
    694       CALL histwrite_phy(nid_mth,"albslw",itau_w,albsollw)
     690cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol1,zx_tmp_2d)
     691      CALL histwrite_phy(nid_mth,"albs",itau_w,albsol1)
     692c
     693cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol2,zx_tmp_2d)
     694      CALL histwrite_phy(nid_mth,"albslw",itau_w,albsol2)
    695695c
    696696      ENDIF !lev_histmth.GE.3
     
    17031703       DO nsrf=1, nbsrf
    17041704c
    1705         zx_tmp_fi2d(1 : klon) = falbe( 1 : klon, nsrf)
     1705        zx_tmp_fi2d(1 : klon) = falb1( 1 : klon, nsrf)
    17061706cym        CALL gr_fi_ecrit(1, klon,iim,jjmp1, zx_tmp_fi2d , zx_tmp_2d)
    17071707        CALL histwrite_phy(nid_mth,"albe_"//clnsurf(nsrf),itau_w,
     
    17201720      ENDDO !nsrf=1, nbsrf
    17211721c
    1722 cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol,zx_tmp_2d)
    1723       CALL histwrite_phy(nid_mth,"albs",itau_w,albsol)
    1724 c
    1725 cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsollw,zx_tmp_2d)
    1726       CALL histwrite_phy(nid_mth,"albslw",itau_w,albsollw)
     1722cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol1,zx_tmp_2d)
     1723      CALL histwrite_phy(nid_mth,"albs",itau_w,albsol1)
     1724c
     1725cym      CALL gr_fi_ecrit(1, klon,iim,jjmp1, albsol2,zx_tmp_2d)
     1726      CALL histwrite_phy(nid_mth,"albslw",itau_w,albsol2)
    17271727c
    17281728      ENDIF !lev_histmth.GE.3
Note: See TracChangeset for help on using the changeset viewer.