24 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE ::
slabh
26 REAL,
ALLOCATABLE,
DIMENSION(:,:),
PUBLIC,
SAVE ::
tslab
28 REAL,
ALLOCATABLE,
DIMENSION(:),
PUBLIC,
SAVE ::
fsic
30 REAL,
ALLOCATABLE,
DIMENSION(:),
PUBLIC,
SAVE ::
tice
32 REAL,
ALLOCATABLE,
DIMENSION(:),
PUBLIC,
SAVE ::
seaice
34 REAL,
ALLOCATABLE,
DIMENSION(:),
PUBLIC,
SAVE ::
slab_bils
36 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE ::
bils_cum
38 REAL,
ALLOCATABLE,
DIMENSION(:),
PUBLIC,
SAVE ::
slab_bilg
40 REAL,
ALLOCATABLE,
DIMENSION(:),
PRIVATE,
SAVE ::
bilg_cum
95 REAL,
INTENT(IN) :: dtime
97 REAL,
DIMENSION(klon, nbsrf),
INTENT(IN) :: pctsrf_rst
102 CHARACTER (len = 80) :: abort_message
103 CHARACTER (len = 20) :: modname =
'ocean_slab_intit'
110 abort_message=
'Pb allocation tmp_pctsrf_slab'
123 (modname,
'pb allocation tslab', 1)
127 abort_message=
'Pb allocation slab_bils'
133 abort_message=
'Pb allocation slab_bils_cum'
141 abort_message=
'Pb allocation slab_bilg'
147 abort_message=
'Pb allocation slab_bilg_cum'
153 abort_message=
'Pb allocation slab_tice'
158 abort_message=
'Pb allocation slab_seaice'
169 abort_message=
'Pb allocation slabh'
178 cpl_pas = nint(86400./dtime * 1.0)
186 SUBROUTINE ocean_slab_frac(itime, dtime, jour, pctsrf_chg, is_modified)
194 INTEGER,
INTENT(IN) :: itime
195 INTEGER,
INTENT(IN) :: jour
196 REAL ,
INTENT(IN) :: dtime
197 REAL,
DIMENSION(klon,nbsrf),
INTENT(INOUT) :: pctsrf_chg
198 LOGICAL,
INTENT(OUT) :: is_modified
217 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum, &
218 acoefh, acoefq, bcoefh, bcoefq, &
219 acoefu, acoefv, bcoefu, bcoefv, &
220 ps, u1, v1, gustiness, tsurf_in, &
222 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
223 tsurf_new, dflux_s, dflux_l, qflux)
231 INTEGER,
INTENT(IN) :: itime
232 INTEGER,
INTENT(IN) :: jour
233 INTEGER,
INTENT(IN) :: knon
234 INTEGER,
DIMENSION(klon),
INTENT(IN) :: knindex
235 REAL,
INTENT(IN) :: dtime
236 REAL,
DIMENSION(klon),
INTENT(IN) :: p1lay
237 REAL,
DIMENSION(klon),
INTENT(IN) :: cdragh, cdragq, cdragm
238 REAL,
DIMENSION(klon),
INTENT(IN) :: precip_rain, precip_snow
239 REAL,
DIMENSION(klon),
INTENT(IN) :: temp_air, spechum
240 REAL,
DIMENSION(klon),
INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ
241 REAL,
DIMENSION(klon),
INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV
242 REAL,
DIMENSION(klon),
INTENT(IN) :: ps
243 REAL,
DIMENSION(klon),
INTENT(IN) :: u1, v1, gustiness
244 REAL,
DIMENSION(klon),
INTENT(IN) :: tsurf_in
245 REAL,
DIMENSION(klon),
INTENT(INOUT) :: radsol
249 REAL,
DIMENSION(klon),
INTENT(INOUT) :: snow
253 REAL,
DIMENSION(klon),
INTENT(OUT) :: qsurf
254 REAL,
DIMENSION(klon),
INTENT(OUT) :: evap, fluxsens, fluxlat
255 REAL,
DIMENSION(klon),
INTENT(OUT) :: flux_u1, flux_v1
256 REAL,
DIMENSION(klon),
INTENT(OUT) :: tsurf_new
257 REAL,
DIMENSION(klon),
INTENT(OUT) :: dflux_s, dflux_l
258 REAL,
DIMENSION(klon),
INTENT(OUT) :: qflux
264 REAL,
DIMENSION(klon) :: cal, beta, dif_grnd
266 REAL,
DIMENSION(klon) :: diff_sst, diff_siv, lmt_bils
268 REAL,
DIMENSION(klon) :: u0, v0
269 REAL,
DIMENSION(klon) :: u1_lay, v1_lay
271 REAL :: e_freeze, h_new, dfsic
284 u1_lay(:) = u1(:) - u0(:)
285 v1_lay(:) = v1(:) - v0(:)
288 tsurf_in, p1lay, cal, beta, cdragh, cdragq, ps, &
289 precip_rain, precip_snow, snow, qsurf, &
290 radsol, dif_grnd, temp_air, spechum, u1_lay, v1_lay, gustiness, &
292 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
296 u0, v0, u1, v1, gustiness, cdragm, &
297 acoefu, acoefv, bcoefu, bcoefv, &
305 slab_bils(ki)=(1.-
fsic(ki))*(fluxlat(i)+fluxsens(i)+radsol(i) &
316 CALL limit_slab(itime, dtime, jour, lmt_bils, diff_sst, diff_siv)
326 IF (mod(itime,
cpl_pas).EQ.0)
THEN
337 tsurf_new(i)=
tslab(ki,1)
345 tsurf_new(i)=
tslab(ki,1)
365 tsurf_new(i)=
tslab(ki,1)
396 tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
397 acoefh, acoefq, bcoefh, bcoefq, &
398 acoefu, acoefv, bcoefu, bcoefv, &
399 ps, u1, v1, gustiness, &
400 radsol, snow, qsurf, qsol, agesno, &
401 alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
402 tsurf_new, dflux_s, dflux_l, swnet)
411 INTEGER,
INTENT(IN) :: itime, jour, knon
412 INTEGER,
DIMENSION(klon),
INTENT(IN) :: knindex
413 REAL,
INTENT(IN) :: dtime
414 REAL,
DIMENSION(klon),
INTENT(IN) :: tsurf_in
415 REAL,
DIMENSION(klon),
INTENT(IN) :: p1lay
416 REAL,
DIMENSION(klon),
INTENT(IN) :: cdragh, cdragm
417 REAL,
DIMENSION(klon),
INTENT(IN) :: precip_rain, precip_snow
418 REAL,
DIMENSION(klon),
INTENT(IN) :: temp_air, spechum
419 REAL,
DIMENSION(klon),
INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ
420 REAL,
DIMENSION(klon),
INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV
421 REAL,
DIMENSION(klon),
INTENT(IN) :: ps
422 REAL,
DIMENSION(klon),
INTENT(IN) :: u1, v1, gustiness
423 REAL,
DIMENSION(klon),
INTENT(IN) :: swnet
427 REAL,
DIMENSION(klon),
INTENT(INOUT) :: snow, qsol
428 REAL,
DIMENSION(klon),
INTENT(INOUT) :: agesno
429 REAL,
DIMENSION(klon),
INTENT(INOUT) :: radsol
433 REAL,
DIMENSION(klon),
INTENT(OUT) :: qsurf
434 REAL,
DIMENSION(klon),
INTENT(OUT) :: alb1_new
435 REAL,
DIMENSION(klon),
INTENT(OUT) :: alb2_new
436 REAL,
DIMENSION(klon),
INTENT(OUT) :: evap, fluxsens, fluxlat
437 REAL,
DIMENSION(klon),
INTENT(OUT) :: flux_u1, flux_v1
438 REAL,
DIMENSION(klon),
INTENT(OUT) :: tsurf_new
439 REAL,
DIMENSION(klon),
INTENT(OUT) :: dflux_s, dflux_l
444 REAL,
DIMENSION(klon) :: cal, beta, dif_grnd
445 REAL,
DIMENSION(klon) :: u0, v0
446 REAL,
DIMENSION(klon) :: u1_lay, v1_lay
448 REAL :: f_cond, f_swpen
450 REAL :: alb_snow, alb_ice, alb_pond
451 REAL :: frac_snow, frac_ice, frac_pond
453 REAL :: e_melt, snow_evap, h_test
455 REAL :: dhsic, dfsic, frac_mf
463 u1_lay(:) = u1(:) - u0(:)
464 v1_lay(:) = v1(:) - v0(:)
474 cal(i)=2.*rcpd/(snow(i)*
ice_cap)
493 radsol(i)=radsol(i)+f_cond-f_swpen
500 tsurf_in, p1lay, cal, beta, cdragh, cdragh, ps, &
501 precip_rain, precip_snow, snow, qsurf, &
502 radsol, dif_grnd, temp_air, spechum, u1_lay, v1_lay, gustiness, &
504 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
511 u0, v0, u1, v1, gustiness, cdragm, &
512 acoefu, acoefv, bcoefu, bcoefv, &
522 IF (precip_snow(i) > 0.)
THEN
523 snow(i) = snow(i)+precip_snow(i)*dtime*(1.-
snow_wfact*(1.-
fsic(ki)))
526 IF (evap(i) > 0.)
THEN
527 snow_evap = min(snow(i) / dtime, evap(i))
528 snow(i) = snow(i) - snow_evap * dtime
529 snow(i) = max(0.0, snow(i))
530 seaice(ki) = max(0.0,
seaice(ki)-(evap(i)-snow_evap)*dtime)
533 IF (tsurf_new(i).GT.
t_melt)
THEN
538 IF (snow(i).GT.e_melt)
THEN
539 snow(i)=snow(i)-e_melt
543 e_melt=e_melt-snow(i)
545 tsurf_new(i)=
tice(ki)
556 IF (e_melt.GT.0)
THEN
572 IF (h_test.GT.0.)
THEN
589 IF (snow(i).GT.0.0001)
THEN
590 agesno(i)=(agesno(i) + (1.-agesno(i)/50.)*dtime/86400.)&
591 * exp(-1.*max(0.0,precip_snow(i))*dtime/5.)
605 alb_pond=0.36-0.1*(2.0+min(0.0,max(
tice(ki)-
t_melt,-2.0)))
607 frac_pond=0.2*(2.0+min(0.0,max(
tice(ki)-
t_melt,-2.0)))
609 frac_snow=max(0.0,min(1.0-frac_pond,snow(i)/
snow_min))
611 frac_ice=max(0.0,1.-frac_pond-frac_snow)
613 alb1_new(i)=alb_snow*frac_snow+alb_ice*frac_ice+alb_pond*frac_pond
615 alb2_new(:) = alb1_new(:)
623 IF (mod(itime,
cpl_pas).EQ.0)
THEN
638 e_melt=e_melt-
fsic(ki)*dhsic
639 IF (e_melt.GT.0.)
THEN
643 e_melt=e_melt-dfsic*
seaice(ki)
656 e_melt=e_melt-
fsic(ki)*dhsic
657 IF (e_melt.GT.0)
THEN
661 e_melt=e_melt-
fsic(ki)*dhsic
665 e_melt=e_melt-dfsic*
seaice(ki)
692 IF (
ALLOCATED(
fsic))
DEALLOCATE(
fsic)
real, dimension(:), allocatable, save, public tice
real, parameter h_ice_thick
subroutine limit_read_frac(itime, dtime, jour, pctsrf_new, is_modified)
real, dimension(:), allocatable, save, public slab_bilg
subroutine ocean_slab_final
integer, save, private cpl_pas
real, parameter alb_sno_min
real, parameter h_ice_new
subroutine calcul_flux_wind(knon, dtime, u0, v0, u1, v1, gustiness, cdrag_m, AcoefU, AcoefV, BcoefU, BcoefV, p1lay, t1lay, flux_u1, flux_v1)
!$Header!integer nvarmx dtime
character(len=6), save version_ocean
subroutine, public ocean_slab_frac(itime, dtime, jour, pctsrf_chg, is_modified)
real, dimension(:), allocatable, save, private bils_cum
real, dimension(:), allocatable, save, public fsic
real, dimension(:), allocatable, save, private slabh
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL solaire RCFC12 RCFC12_act CFC12_ppt!IM ajout CFMIP2 CMIP5 LOGICAL ok_4xCO2atm RCFC12_per CFC12_ppt_per!OM correction du bilan d eau global!OM Correction sur precip KE REAL cvl_corr!OM Fonte calotte dans bilan eau LOGICAL ok_lic_melt!IM simulateur ISCCP INTEGER overlap!IM seuils cdrh REAL cdhmax!IM param stabilite s terres et en dehors REAL f_ri_cd_min!IM MAFo pmagic evap0!Frottement au f_cdrag_oce REAL f_qsat_oce
real, parameter ice_frac_max
subroutine limit_slab(itime, dtime, jour, lmt_bils, diff_sst, diff_siv)
real, parameter ice_frac_min
real, parameter alb_sno_del
subroutine, public ocean_slab_init(dtime, pctsrf_rst)
real, dimension(:), allocatable, save zmasq
real, dimension(:), allocatable, save, public seaice
real, dimension(:), allocatable, save, private bilg_cum
real, parameter snow_wfact
real, dimension(:,:), allocatable, save, public tslab
real, parameter h_ice_thin
real, parameter h_ice_max
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
real, save, private cyang
subroutine, public ocean_slab_ice(itime, dtime, jour, knon, knindex, tsurf_in, p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, radsol, snow, qsurf, qsol, agesno, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l, swnet)
subroutine, public ocean_slab_noice(itime, dtime, jour, knon, knindex, p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, tsurf_in, radsol, snow, qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l, qflux)
!$Header!integer nvarmx s s itime
integer, parameter is_sic
subroutine abort_physic(modname, message, ierr)
real, parameter alb_ice_dry
real, parameter h_ice_min
subroutine calcul_fluxs(knon, nisurf, dtime, tsurf, p1lay, cal, beta, cdragh, cdragq, ps, precip_rain, precip_snow, snow, qsurf, radsol, dif_grnd, t1lay, q1lay, u1lay, v1lay, gustiness, fqsat, petAcoef, peqAcoef, petBcoef, peqBcoef, tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
integer, parameter is_oce
real, dimension(:), allocatable, save, public slab_bils
real, parameter alb_ice_wet