source: LMDZ6/branches/blowing_snow/libf/phylmdiso/surf_landice_mod.F90 @ 5327

Last change on this file since 5327 was 4506, checked in by evignon, 19 months ago

commit sur des modifications propres aux isotopes pour la neige soufflee

File size: 22.3 KB
Line 
1!
2MODULE surf_landice_mod
3 
4  IMPLICIT NONE
5
6CONTAINS
7!
8!****************************************************************************************
9!
10  SUBROUTINE surf_landice(itime, dtime, knon, knindex, &
11       rlon, rlat, debut, lafin, &
12       rmu0, lwdownm, albedo, pphi1, &
13       swnet, lwnet, tsurf, p1lay, &
14       cdragh, cdragm, precip_rain, precip_snow, precip_bs, temp_air, spechum, &
15       AcoefH, AcoefQ, BcoefH, BcoefQ, &
16       AcoefU, AcoefV, BcoefU, BcoefV, &
17       ps, u1, v1, gustiness, rugoro, pctsrf, &
18       snow, qsurf, qsol, qbs1, agesno, &
19       tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, fluxbs, &
20       tsurf_new, dflux_s, dflux_l, &
21       alt, slope, cloudf, &
22       snowhgt, qsnow, to_ice, sissnow, &
23       alb3, runoff, &
24       flux_u1, flux_v1 &
25#ifdef ISO
26         &      ,xtprecip_rain, xtprecip_snow,xtspechum,Rland_ice &
27         &      ,xtsnow,xtsol,xtevap &
28#endif               
29           &    )
30
31    USE dimphy
32    USE surface_data,     ONLY : type_ocean, calice, calsno, landice_opt, iflag_albcalc
33    USE fonte_neige_mod,  ONLY : fonte_neige,run_off_lic,fqcalving_global,ffonte_global,fqfonte_global,runofflic_global
34    USE cpl_mod,          ONLY : cpl_send_landice_fields
35    USE calcul_fluxs_mod
36    USE phys_local_var_mod, ONLY : zxrhoslic, zxustartlic
37    USE phys_output_var_mod, ONLY : snow_o,zfra_o
38#ifdef ISO   
39    USE fonte_neige_mod,  ONLY : xtrun_off_lic
40    USE infotrac_phy, ONLY : ntiso,niso
41    USE isotopes_routines_mod, ONLY: calcul_iso_surf_lic_vectall
42#ifdef ISOVERIF
43    use isotopes_mod, ONLY: iso_eau,ridicule
44    use isotopes_verif_mod
45#endif
46#endif
47    USE geometry_mod,     ONLY : longitude,latitude
48
49!FC
50    USE ioipsl_getin_p_mod, ONLY : getin_p
51    USE blowing_snow_ini_mod, ONLY : zeta_bs, pbst_bs, prt_bs
52
53#ifdef CPP_INLANDSIS
54    USE surf_inlandsis_mod,  ONLY : surf_inlandsis
55#endif
56
57    USE indice_sol_mod
58
59
60!    INCLUDE "indicesol.h"
61    INCLUDE "dimsoil.h"
62    INCLUDE "YOMCST.h"
63    INCLUDE "clesphys.h"
64
65! Input variables
66!****************************************************************************************
67    INTEGER, INTENT(IN)                           :: itime, knon
68    INTEGER, DIMENSION(klon), INTENT(in)          :: knindex
69    REAL, INTENT(in)                              :: dtime
70    REAL, DIMENSION(klon), INTENT(IN)             :: swnet ! net shortwave radiance
71    REAL, DIMENSION(klon), INTENT(IN)             :: lwnet ! net longwave radiance
72    REAL, DIMENSION(klon), INTENT(IN)             :: tsurf
73    REAL, DIMENSION(klon), INTENT(IN)             :: p1lay
74    REAL, DIMENSION(klon), INTENT(IN)             :: cdragh, cdragm
75    REAL, DIMENSION(klon), INTENT(IN)             :: precip_rain, precip_snow, precip_bs
76    REAL, DIMENSION(klon), INTENT(IN)             :: temp_air, spechum
77    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefH, AcoefQ
78    REAL, DIMENSION(klon), INTENT(IN)             :: BcoefH, BcoefQ
79    REAL, DIMENSION(klon), INTENT(IN)             :: AcoefU, AcoefV, BcoefU, BcoefV
80    REAL, DIMENSION(klon), INTENT(IN)             :: ps
81    REAL, DIMENSION(klon), INTENT(IN)             :: u1, v1, gustiness, qbs1
82    REAL, DIMENSION(klon), INTENT(IN)             :: rugoro
83    REAL, DIMENSION(klon,nbsrf), INTENT(IN)       :: pctsrf
84#ifdef ISO
85    REAL, DIMENSION(ntiso,klon), INTENT(IN)       :: xtprecip_rain, xtprecip_snow
86    REAL, DIMENSION(ntiso,klon), INTENT(IN)       :: xtspechum
87#endif
88
89    LOGICAL,  INTENT(IN)                          :: debut   !true if first step
90    LOGICAL,  INTENT(IN)                          :: lafin   !true if last step
91    REAL, DIMENSION(klon), INTENT(IN)             :: rlon, rlat
92    REAL, DIMENSION(klon), INTENT(IN)             :: rmu0
93    REAL, DIMENSION(klon), INTENT(IN)             :: lwdownm !ylwdown
94    REAL, DIMENSION(klon), INTENT(IN)             :: albedo  !mean albedo
95    REAL, DIMENSION(klon), INTENT(IN)             :: pphi1   
96    REAL, DIMENSION(klon), INTENT(IN)             :: alt   !mean altitude of the grid box 
97    REAL, DIMENSION(klon), INTENT(IN)             :: slope   !mean slope in grid box 
98    REAL, DIMENSION(klon), INTENT(IN)             :: cloudf  !total cloud fraction
99
100! In/Output variables
101!****************************************************************************************
102    REAL, DIMENSION(klon), INTENT(INOUT)          :: snow, qsol
103    REAL, DIMENSION(klon), INTENT(INOUT)          :: agesno
104    REAL, DIMENSION(klon, nsoilmx), INTENT(INOUT) :: tsoil
105#ifdef ISO
106    REAL, DIMENSION(niso,klon), INTENT(INOUT)          :: xtsnow, xtsol
107    REAL, DIMENSION(niso,klon), INTENT(INOUT)        :: Rland_ice
108#endif
109
110! Output variables
111!****************************************************************************************
112    REAL, DIMENSION(klon), INTENT(OUT)            :: qsurf
113    REAL, DIMENSION(klon), INTENT(OUT)            :: z0m, z0h
114!albedo SB >>>
115!    REAL, DIMENSION(klon), INTENT(OUT)            :: alb1  ! new albedo in visible SW interval
116!    REAL, DIMENSION(klon), INTENT(OUT)            :: alb2  ! new albedo in near IR interval
117    REAL, DIMENSION(6), INTENT(IN)                :: SFRWL
118    REAL, DIMENSION(klon,nsw), INTENT(OUT)        :: alb_dir,alb_dif
119!albedo SB <<<
120    REAL, DIMENSION(klon), INTENT(OUT)            :: evap, fluxsens, fluxlat
121    REAL, DIMENSION(klon), INTENT(OUT)            :: fluxbs
122    REAL, DIMENSION(klon), INTENT(OUT)            :: tsurf_new
123    REAL, DIMENSION(klon), INTENT(OUT)            :: dflux_s, dflux_l     
124    REAL, DIMENSION(klon), INTENT(OUT)            :: flux_u1, flux_v1
125
126    REAL, DIMENSION(klon), INTENT(OUT)           :: alb3
127    REAL, DIMENSION(klon), INTENT(OUT)           :: qsnow   !column water in snow [kg/m2]
128    REAL, DIMENSION(klon), INTENT(OUT)           :: snowhgt !Snow height (m)
129    REAL, DIMENSION(klon), INTENT(OUT)           :: to_ice
130    REAL, DIMENSION(klon), INTENT(OUT)           :: sissnow
131    REAL, DIMENSION(klon), INTENT(OUT)           :: runoff  !Land ice runoff
132#ifdef ISO
133    REAL, DIMENSION(ntiso,klon), INTENT(OUT)     :: xtevap     
134!    real, DIMENSION(niso,klon) :: xtrun_off_lic_0_diag ! est une variable globale de
135!    fonte_neige
136#endif
137 
138
139! Local variables
140!****************************************************************************************
141    REAL, DIMENSION(klon)    :: soilcap, soilflux
142    REAL, DIMENSION(klon)    :: cal, beta, dif_grnd
143    REAL, DIMENSION(klon)    :: zfra, alb_neig
144    REAL, DIMENSION(klon)    :: radsol
145    REAL, DIMENSION(klon)    :: u0, v0, u1_lay, v1_lay, ustar
146    INTEGER                  :: i,j,nt
147    REAL, DIMENSION(klon)    :: fqfonte,ffonte
148    REAL, DIMENSION(klon)    :: run_off_lic_frac
149#ifdef ISO       
150      real, parameter :: t_coup = 273.15
151      real, dimension(klon) :: fqfonte_diag
152      real, dimension(klon) :: fq_fonte_diag
153      real, dimension(klon) ::  snow_evap_diag
154      real, dimension(klon) ::  fqcalving_diag
155      real max_eau_sol_diag 
156      real, dimension(klon) ::  runoff_diag
157      real, dimension(klon) ::    run_off_lic_diag
158      real ::  coeff_rel_diag
159      integer ixt
160      REAL, DIMENSION(niso,klon) :: xtsnow_prec,xtsol_prec
161      REAL, DIMENSION(klon) :: snow_prec,qsol_prec
162!      real, DIMENSION(klon) :: run_off_lic_0_diag
163#endif
164
165    REAL, DIMENSION(klon)    :: emis_new                  !Emissivity
166    REAL, DIMENSION(klon)    :: swdown,lwdown
167    REAL, DIMENSION(klon)    :: precip_snow_adv, snow_adv !Snow Drift precip./advection (not used in inlandsis)
168    REAL, DIMENSION(klon)    :: erod                      !erosion of surface snow (flux, kg/m2/s like evap)
169    REAL, DIMENSION(klon)    :: zsl_height, wind_velo     !surface layer height, wind spd
170    REAL, DIMENSION(klon)    :: dens_air,  snow_cont_air  !air density; snow content air
171    REAL, DIMENSION(klon)    :: alb_soil                  !albedo of underlying ice
172    REAL, DIMENSION(klon)    :: pexner                    !Exner potential
173    REAL                     :: pref
174    REAL, DIMENSION(klon,nsoilmx) :: tsoil0               !modif
175    REAL                          :: dtis                ! subtimestep
176    LOGICAL                       :: debut_is, lafin_is  ! debut and lafin for inlandsis
177
178    CHARACTER (len = 20)                      :: modname = 'surf_landice'
179    CHARACTER (len = 80)                      :: abort_message
180
181
182    REAL,DIMENSION(klon) :: alb1,alb2
183    REAL,DIMENSION(klon) :: precip_totsnow, evap_totsnow
184    REAL, DIMENSION (klon,6) :: alb6
185    REAL                   :: rho0, rhoice, ustart0, hsalt, esalt, qsalt
186    REAL                   :: tau_dens, tau_dens0, tau_densmin, rhomax, rhohard
187    REAL, DIMENSION(klon)  :: ws1, rhos, ustart
188! End definition
189!****************************************************************************************
190!FC
191!FC
192   REAL,SAVE :: alb_vis_sno_lic
193  !$OMP THREADPRIVATE(alb_vis_sno_lic)
194   REAL,SAVE :: alb_nir_sno_lic
195  !$OMP THREADPRIVATE(alb_nir_sno_lic)
196  LOGICAL, SAVE :: firstcall = .TRUE.
197  !$OMP THREADPRIVATE(firstcall)
198
199
200!FC firtscall initializations
201!******************************************************************************************
202#ifdef ISO
203#ifdef ISOVERIF
204!     write(*,*) 'surf_land_ice 1499'   
205     do i=1,knon
206        if (iso_eau.gt.0) then
207             call iso_verif_egalite_choix(xtsnow(iso_eau,i),snow(i), &
208    &            'surf_land_ice 126',errmax,errmaxrel)
209        endif !if (iso_eau.gt.0) then     
210      enddo !do i=1,knon 
211#endif
212#endif
213
214  IF (firstcall) THEN
215  alb_vis_sno_lic=0.77
216  CALL getin_p('alb_vis_sno_lic',alb_vis_sno_lic)
217           PRINT*, 'alb_vis_sno_lic',alb_vis_sno_lic
218  alb_nir_sno_lic=0.77
219  CALL getin_p('alb_nir_sno_lic',alb_nir_sno_lic)
220           PRINT*, 'alb_nir_sno_lic',alb_nir_sno_lic
221 
222  firstcall=.false.
223  ENDIF
224!******************************************************************************************
225
226! Initialize output variables
227    alb3(:) = 999999.
228    alb2(:) = 999999.
229    alb1(:) = 999999.
230    fluxbs(:)=0. 
231    runoff(:) = 0.
232!****************************************************************************************
233! Calculate total absorbed radiance at surface
234!
235!****************************************************************************************
236    radsol(:) = 0.0
237    radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
238
239!****************************************************************************************
240
241!****************************************************************************************
242!  landice_opt = 0 : soil_model, calcul_flux, fonte_neige, ... 
243!  landice_opt = 1  : prepare and call INterace Lmdz SISvat (INLANDSIS)
244!****************************************************************************************
245
246
247    IF (landice_opt .EQ. 1) THEN
248
249!****************************************************************************************   
250! CALL to INLANDSIS interface
251!****************************************************************************************
252#ifdef CPP_INLANDSIS
253
254#ifdef ISO
255        CALL abort_gcm('surf_landice 235','isotopes pas dans INLANDSIS',1)
256#endif
257
258        debut_is=debut
259        lafin_is=.false.
260        ! Suppose zero surface speed
261        u0(:)            = 0.0
262        v0(:)            = 0.0
263
264
265        CALL calcul_flux_wind(knon, dtime, &
266         u0, v0, u1, v1, gustiness, cdragm, &
267         AcoefU, AcoefV, BcoefU, BcoefV, &
268         p1lay, temp_air, &
269         flux_u1, flux_v1)
270
271       
272       ! Set constants and compute some input for SISVAT
273       ! = 1000 hPa
274       ! and calculate incoming flux for SW and LW interval: swdown, lwdown
275       swdown(:)        = 0.0
276       lwdown(:)        = 0.0
277       snow_cont_air(:) = 0.  ! the snow content in air is not a prognostic variable of the model     
278       alb_soil(:)      = 0.4 ! before albedo(:) but here it is the ice albedo that we have to set
279       ustar(:)         = 0.
280       pref             = 100000.       
281       DO i = 1, knon
282          swdown(i)        = swnet(i)/(1-albedo(i))
283          lwdown(i)        = lwdownm(i)
284          wind_velo(i)     = u1(i)**2 + v1(i)**2
285          wind_velo(i)     = wind_velo(i)**0.5
286          pexner(i)        = (p1lay(i)/pref)**(RD/RCPD)
287          dens_air(i)      = p1lay(i)/RD/temp_air(i)  ! dry air density
288          zsl_height(i)    = pphi1(i)/RG     
289          tsoil0(i,:)      = tsoil(i,:) 
290          ustar(i)= (cdragm(i)*(wind_velo(i)**2))**0.5   
291       END DO
292       
293
294
295        dtis=dtime
296
297          IF (lafin) THEN
298            lafin_is=.true.
299          END IF
300
301          CALL surf_inlandsis(knon, rlon, rlat, knindex, itime, dtis, debut_is, lafin_is,&
302            rmu0, swdown, lwdown, albedo, pexner, ps, p1lay, precip_rain, precip_snow,   &
303            zsl_height, wind_velo, ustar, temp_air, dens_air, spechum, tsurf,&
304            rugoro, snow_cont_air, alb_soil, alt, slope, cloudf, &
305            radsol, qsol, tsoil0, snow, zfra, snowhgt, qsnow, to_ice, sissnow,agesno,   &
306            AcoefH, AcoefQ, BcoefH, BcoefQ, cdragm, cdragh, &
307            run_off_lic, fqfonte, ffonte, evap, erod, fluxsens, fluxlat,dflux_s, dflux_l, &
308            tsurf_new, alb1, alb2, alb3, alb6, &
309            emis_new, z0m, z0h, qsurf)
310
311          debut_is=.false.
312
313
314        ! Treatment of snow melting and calving
315
316        ! for consistency with standard LMDZ, add calving to run_off_lic
317        run_off_lic(:)=run_off_lic(:) + to_ice(:)
318
319        DO i = 1, knon
320           ffonte_global(knindex(i),is_lic)    = ffonte(i)
321           fqfonte_global(knindex(i),is_lic)   = fqfonte(i)! net melting= melting - refreezing
322           fqcalving_global(knindex(i),is_lic) = to_ice(i) ! flux
323           runofflic_global(knindex(i)) = run_off_lic(i)
324        ENDDO
325        ! Here, we assume that the calving term is equal to the to_ice term
326        ! (no ice accumulation)
327
328
329#else
330       abort_message='Pb de coherence: landice_opt = 1  mais CPP_INLANDSIS = .false.'
331       CALL abort_physic(modname,abort_message,1)
332#endif
333
334
335    ELSE
336
337!****************************************************************************************
338! Soil calculations
339!
340!****************************************************************************************
341
342    ! EV: use calbeta
343    CALL calbeta(dtime, is_lic, knon, snow, qsol, beta, cal, dif_grnd)
344
345
346    ! use soil model and recalculate properly cal
347    IF (soil_model) THEN
348       CALL soil(dtime, is_lic, knon, snow, tsurf, qsol, &
349        & longitude(knindex(1:knon)), latitude(knindex(1:knon)), tsoil, soilcap, soilflux)
350       cal(1:knon) = RCPD / soilcap(1:knon)
351       radsol(1:knon)  = radsol(1:knon) + soilflux(1:knon)
352    ELSE
353       cal = RCPD * calice
354       WHERE (snow > 0.0) cal = RCPD * calsno
355    ENDIF
356
357
358!****************************************************************************************
359! Calulate fluxes
360!
361!****************************************************************************************
362!    beta(:) = 1.0
363!    dif_grnd(:) = 0.0
364
365! Suppose zero surface speed
366    u0(:)=0.0
367    v0(:)=0.0
368    u1_lay(:) = u1(:) - u0(:)
369    v1_lay(:) = v1(:) - v0(:)
370
371    CALL calcul_fluxs(knon, is_lic, dtime, &
372         tsurf, p1lay, cal, beta, cdragh, cdragh, ps, &
373         precip_rain, precip_snow, snow, qsurf,  &
374         radsol, dif_grnd, temp_air, spechum, u1_lay, v1_lay, gustiness, &
375         1.,AcoefH, AcoefQ, BcoefH, BcoefQ, &
376         tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)
377
378
379#ifdef ISO
380   ! verif
381#ifdef ISOVERIF
382     !write(*,*) 'surf_land_ice 1499'   
383     do i=1,knon
384       if (iso_eau.gt.0) then
385           if (snow(i).gt.ridicule) then
386             call iso_verif_egalite_choix(xtsnow(iso_eau,i),snow(i), &
387    &            'surf_land_ice 1151',errmax,errmaxrel)
388            endif !if ((snow(i).gt.ridicule)) then
389        endif !if (iso_eau.gt.0) then     
390      enddo !do i=1,knon 
391#endif
392!#ifdef ISOVERIF
393
394    do i=1,knon
395      snow_prec(i)=snow(i)
396      do ixt=1,niso
397      xtsnow_prec(ixt,i)=xtsnow(ixt,i)
398      enddo !do ixt=1,niso
399      ! initialisation:
400      fq_fonte_diag(i)=0.0
401      fqfonte_diag(i)=0.0
402      snow_evap_diag(i)=0.0
403    enddo !do i=1,knon
404#endif         
405!#ifdef ISO
406    CALL calcul_flux_wind(knon, dtime, &
407         u0, v0, u1, v1, gustiness, cdragm, &
408         AcoefU, AcoefV, BcoefU, BcoefV, &
409         p1lay, temp_air, &
410         flux_u1, flux_v1)
411
412
413!****************************************************************************************
414! Calculate albedo
415!
416!****************************************************************************************
417 
418    CALL albsno(klon,knon,dtime,agesno(:),alb_neig(:), precip_snow(:)) 
419
420
421! EV: following lines are obsolete since we set alb1 and alb2 to constant values
422! I therefore comment them
423!    alb1(1:knon) = alb_neig(1:knon)*zfra(1:knon) + &
424!         0.6 * (1.0-zfra(1:knon))
425!
426!IM: plusieurs choix/tests sur l'albedo des "glaciers continentaux"
427!       alb1(1 : knon)  = 0.6 !IM cf FH/GK
428!       alb1(1 : knon)  = 0.82
429!       alb1(1 : knon)  = 0.77 !211003 Ksta0.77
430!       alb1(1 : knon)  = 0.8 !KstaTER0.8 & LMD_ARMIP5
431!IM: KstaTER0.77 & LMD_ARMIP6   
432
433! Attantion: alb1 and alb2 are not the same!
434    alb1(1:knon)  = alb_vis_sno_lic
435    alb2(1:knon)  = alb_nir_sno_lic
436
437
438!****************************************************************************************
439! Rugosity
440!
441!****************************************************************************************
442    z0m = z0m_landice
443    z0h = z0h_landice
444    !z0m = SQRT(z0m**2+rugoro**2)
445
446
447
448  ! Simple blowing snow param
449  if (ok_bs) then
450       ustart0 = 0.211
451       rhoice = 920.0
452       rho0 = 200.0
453       rhomax=450.0
454       rhohard=400.0
455       tau_dens0=86400.0*10.  ! 10 days by default, in s
456       tau_densmin=86400.0 ! 1 days according to in situ obs by C. Amory
457       do i = 1, knon
458           ! estimation of snow density
459           ! snow density increases with snow age and
460           ! increases even faster in case of sedimentation of blowing snow
461           tau_dens=max(tau_densmin, tau_dens0*exp(-abs(precip_bs(i))/pbst_bs-abs(precip_rain(i))/prt_bs))
462           rhos(i)=rho0+(rhohard-rho0)*(1.-exp(-agesno(i)*86400.0/tau_dens))
463           ! blowing snow flux formula used in MAR
464           ws1(i)=(u1(i)**2+v1(i)**2)**0.5
465           ustar(i)=(cdragm(i)*(u1(i)**2+v1(i)**2))**0.5
466           ustart(i)=ustart0*exp(max(rhoice/rho0-rhoice/rhos(i),0.))*exp(max(0.,rhos(i)-rhomax))
467           ! we have multiplied by exp to prevent erosion when rhos>rhomax (usefull till
468           ! rhohard<450)
469           esalt=1./(3.25*max(ustar(i),0.001))
470           hsalt=0.08436*ustar(i)**1.27
471           qsalt=(max(ustar(i)**2-ustart(i)**2,0.))/(RG*hsalt)*esalt
472           !ep=qsalt*cdragm(i)*sqrt(u1(i)**2+v1(i)**2)
473           fluxbs(i)= zeta_bs*p1lay(i)/RD/temp_air(i)*ws1(i)*cdragm(i)*(qbs1(i)-qsalt)
474       enddo
475
476       ! for outputs
477       do j = 1, knon
478          i = knindex(j)
479          zxustartlic(i) = ustart(j)
480          zxrhoslic(i) = rhos(j)
481       enddo
482
483  endif
484
485
486
487!****************************************************************************************
488! Calculate surface snow amount
489!   
490!****************************************************************************************
491    IF (ok_bs) THEN
492      precip_totsnow=precip_snow+precip_bs
493      evap_totsnow=evap-fluxbs ! flux bs is positive towards the surface (snow erosion)
494    ELSE
495      precip_totsnow=precip_snow
496      evap_totsnow=evap
497    ENDIF
498
499    CALL fonte_neige(knon, is_lic, knindex, dtime, &
500         tsurf, precip_rain, precip_totsnow, &
501         snow, qsol, tsurf_new, evap_totsnow &
502#ifdef ISO   
503     & ,fq_fonte_diag,fqfonte_diag,snow_evap_diag,fqcalving_diag   &
504     & ,max_eau_sol_diag,runoff_diag,run_off_lic_diag,coeff_rel_diag   &
505#endif
506     &   )
507
508
509#ifdef ISO
510#ifdef ISOVERIF
511      do i=1,knon 
512       if (iso_eau.gt.0) then 
513          call iso_verif_egalite_choix(Rland_ice(iso_eau,i),1.0, &
514     &         'surf_landice_mod 217',errmax,errmaxrel)
515       endif !if (iso_eau.gt.0) then   
516      enddo !do i=1,knon 
517#endif
518!#ifdef ISOVERIF
519
520       call calcul_iso_surf_lic_vectall(klon,knon, &
521     &           evap,snow_evap_diag,Tsurf_new,snow, &
522     &           fq_fonte_diag,fqfonte_diag,dtime,t_coup, &
523     &           precip_snow,xtprecip_snow,precip_rain,xtprecip_rain, snow_prec,xtsnow_prec, &
524     &           xtspechum,spechum,ps,Rland_ice, &
525     &           xtevap,xtsnow,fqcalving_diag, &
526     &           knindex,is_lic,run_off_lic_diag,coeff_rel_diag &
527     &  )
528
529!        call fonte_neige_export_xtrun_off_lic_0(knon,xtrun_off_lic_0_diag)
530
531#endif
532!#ifdef ISO
533
534
535    WHERE (snow(1 : knon) .LT. 0.0001) agesno(1 : knon) = 0.                                         
536    zfra(1:knon) = MAX(0.0,MIN(1.0,snow(1:knon)/(snow(1:knon)+10.0))) 
537
538
539    END IF ! landice_opt
540
541
542!****************************************************************************************
543! Send run-off on land-ice to coupler if coupled ocean.
544! run_off_lic has been calculated in fonte_neige or surf_inlandsis
545! If landice_opt>=2, corresponding call is done from surf_land_orchidee
546!****************************************************************************************
547    IF (type_ocean=='couple' .AND. landice_opt .LT. 2) THEN
548       ! Compress fraction where run_off_lic is active (here all pctsrf(is_lic))
549       run_off_lic_frac(:)=0.0
550       DO j = 1, knon
551          i = knindex(j)
552          run_off_lic_frac(j) = pctsrf(i,is_lic)
553       ENDDO
554
555       CALL cpl_send_landice_fields(itime, knon, knindex, run_off_lic, run_off_lic_frac)
556    ENDIF
557
558 ! transfer runoff rate [kg/m2/s](!) to physiq for output
559    runoff(1:knon)=run_off_lic(1:knon)/dtime
560
561       snow_o=0.
562       zfra_o = 0.
563       DO j = 1, knon
564           i = knindex(j)
565           snow_o(i) = snow(j)
566           zfra_o(i) = zfra(j)
567       ENDDO
568
569
570!albedo SB >>>
571     select case(NSW)
572     case(2)
573       alb_dir(1:knon,1)=alb1(1:knon)
574       alb_dir(1:knon,2)=alb2(1:knon)
575     case(4)
576       alb_dir(1:knon,1)=alb1(1:knon)
577       alb_dir(1:knon,2)=alb2(1:knon)
578       alb_dir(1:knon,3)=alb2(1:knon)
579       alb_dir(1:knon,4)=alb2(1:knon)
580     case(6)
581       alb_dir(1:knon,1)=alb1(1:knon)
582       alb_dir(1:knon,2)=alb1(1:knon)
583       alb_dir(1:knon,3)=alb1(1:knon)
584       alb_dir(1:knon,4)=alb2(1:knon)
585       alb_dir(1:knon,5)=alb2(1:knon)
586       alb_dir(1:knon,6)=alb2(1:knon)
587
588       IF ((landice_opt .EQ. 1) .AND. (iflag_albcalc .EQ. 2)) THEN
589       alb_dir(1:knon,1)=alb6(1:knon,1)
590       alb_dir(1:knon,2)=alb6(1:knon,2)
591       alb_dir(1:knon,3)=alb6(1:knon,3)
592       alb_dir(1:knon,4)=alb6(1:knon,4)
593       alb_dir(1:knon,5)=alb6(1:knon,5)
594       alb_dir(1:knon,6)=alb6(1:knon,6)
595       ENDIF
596
597     end select
598alb_dif=alb_dir
599!albedo SB <<<
600
601
602  END SUBROUTINE surf_landice
603!
604!****************************************************************************************
605!
606END MODULE surf_landice_mod
607
608
609
Note: See TracBrowser for help on using the repository browser.