/[lmdze]/trunk/phylmd/Interface_surf/fonte_neige.f90
ViewVC logotype

Diff of /trunk/phylmd/Interface_surf/fonte_neige.f90

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/Sources/phylmd/Interface_surf/fonte_neige.f revision 216 by guez, Tue Mar 28 15:36:53 2017 UTC trunk/phylmd/Interface_surf/fonte_neige.f revision 300 by guez, Thu Aug 2 15:55:01 2018 UTC
# Line 4  module fonte_neige_m Line 4  module fonte_neige_m
4    
5  contains  contains
6    
7    SUBROUTINE fonte_neige(nisurf, dtime, precip_rain, precip_snow, snow, qsol, &    SUBROUTINE fonte_neige(nisurf, precip_rain, precip_snow, snow, qsol, &
8         tsurf_new, evap, fqcalving, ffonte, run_off_lic_0)         tsurf_new, evap, fqcalving, ffonte, run_off_lic_0)
9    
10      ! Routine de traitement de la fonte de la neige dans le cas du traitement      ! Routine de traitement de la fonte de la neige dans le cas du traitement
# Line 12  contains Line 12  contains
12    
13      ! Laurent Fairhead, March, 2001      ! Laurent Fairhead, March, 2001
14    
15      USE fcttre, ONLY: foeew, qsatl, qsats      use comconst, only: dtphys
16      USE indicesol, ONLY: epsfra, is_lic, is_sic, is_ter      USE indicesol, ONLY: epsfra, is_lic, is_sic, is_ter
17      USE interface_surf, ONLY: run_off_lic, tau_calv      USE conf_interface_m, ONLY: tau_calv
18      use nr_util, only: assert_eq      use nr_util, only: assert_eq
19      USE suphec_m, ONLY: rday, rlmlt, rtt      USE suphec_m, ONLY: rday, rlmlt, rtt
20    
21      integer, intent(IN):: nisurf ! surface \`a traiter      integer, intent(IN):: nisurf ! surface \`a traiter
     real, intent(IN):: dtime ! pas de temps de la physique (en s)  
22    
23      real, intent(IN):: precip_rain(:) ! (knon)      real, intent(IN):: precip_rain(:) ! (knon)
24      ! precipitation, liquid water mass flux (kg / m2 / s), positive down      ! precipitation, liquid water mass flux (kg / m2 / s), positive down
# Line 61  contains Line 60  contains
60      REAL, parameter:: chaice = 3.334E5 / (2.3867E6 * 0.15)      REAL, parameter:: chaice = 3.334E5 / (2.3867E6 * 0.15)
61      real, parameter:: max_eau_sol = 150. ! in kg m-2      real, parameter:: max_eau_sol = 150. ! in kg m-2
62      real coeff_rel      real coeff_rel
63        REAL run_off_lic(size(precip_rain)) ! (knon) ruissellement total
64    
65      !--------------------------------------------------------------------      !--------------------------------------------------------------------
66    
# Line 68  contains Line 68  contains
68           size(qsol), size(tsurf_new), size(evap), size(fqcalving), &           size(qsol), size(tsurf_new), size(evap), size(fqcalving), &
69           size(ffonte), size(run_off_lic_0)/), "fonte_neige knon")           size(ffonte), size(run_off_lic_0)/), "fonte_neige knon")
70    
71      coeff_rel = dtime / (tau_calv * rday)      coeff_rel = dtphys / (tau_calv * rday)
72      WHERE (precip_snow > 0.) snow = snow + precip_snow * dtime      WHERE (precip_snow > 0.) snow = snow + precip_snow * dtphys
73    
74      WHERE (evap > 0.)      WHERE (evap > 0.)
75         snow_evap = MIN(snow / dtime, evap)         snow_evap = MIN(snow / dtphys, evap)
76         snow = snow - snow_evap * dtime         snow = snow - snow_evap * dtphys
77         snow = MAX(0., snow)         snow = MAX(0., snow)
78      elsewhere      elsewhere
79         snow_evap = 0.         snow_evap = 0.
80      end where      end where
81    
82      bil_eau_s = (precip_rain - evap + snow_evap) * dtime      bil_eau_s = (precip_rain - evap + snow_evap) * dtphys
83    
84      ! Y a-t-il fonte de neige ?      ! Y a-t-il fonte de neige ?
85    
# Line 87  contains Line 87  contains
87         if ((snow(i) > epsfra .OR. nisurf == is_sic &         if ((snow(i) > epsfra .OR. nisurf == is_sic &
88              .OR. nisurf == is_lic) .AND. tsurf_new(i) >= RTT) then              .OR. nisurf == is_lic) .AND. tsurf_new(i) >= RTT) then
89            fq_fonte = MIN(MAX((tsurf_new(i) - RTT) / chasno, 0.), snow(i))            fq_fonte = MIN(MAX((tsurf_new(i) - RTT) / chasno, 0.), snow(i))
90            ffonte(i) = fq_fonte * RLMLT / dtime            ffonte(i) = fq_fonte * RLMLT / dtphys
91            snow(i) = max(0., snow(i) - fq_fonte)            snow(i) = max(0., snow(i) - fq_fonte)
92            bil_eau_s(i) = bil_eau_s(i) + fq_fonte            bil_eau_s(i) = bil_eau_s(i) + fq_fonte
93            tsurf_new(i) = tsurf_new(i) - fq_fonte * chasno            tsurf_new(i) = tsurf_new(i) - fq_fonte * chasno
94              
95            !IM cf. JLD/ GKtest fonte aussi pour la glace            !IM cf. JLD/ GKtest fonte aussi pour la glace
96            IF (nisurf == is_sic .OR. nisurf == is_lic) THEN            IF (nisurf == is_sic .OR. nisurf == is_lic) THEN
97               fq_fonte = MAX((tsurf_new(i) - RTT) / chaice, 0.)               fq_fonte = MAX((tsurf_new(i) - RTT) / chaice, 0.)
98               ffonte(i) = ffonte(i) + fq_fonte * RLMLT / dtime               ffonte(i) = ffonte(i) + fq_fonte * RLMLT / dtphys
99               bil_eau_s(i) = bil_eau_s(i) + fq_fonte               bil_eau_s(i) = bil_eau_s(i) + fq_fonte
100               tsurf_new(i) = RTT               tsurf_new(i) = RTT
101            ENDIF            ENDIF
# Line 104  contains Line 104  contains
104         endif         endif
105    
106         ! S'il y a une hauteur trop importante de neige, elle s'\'ecoule         ! S'il y a une hauteur trop importante de neige, elle s'\'ecoule
107         fqcalving(i) = max(0., snow(i) - snow_max) / dtime         fqcalving(i) = max(0., snow(i) - snow_max) / dtphys
108         snow(i) = min(snow(i), snow_max)         snow(i) = min(snow(i), snow_max)
109        enddo
110    
111         IF (nisurf == is_ter) then      IF (nisurf == is_ter) then
112            qsol(i) = qsol(i) + bil_eau_s(i)         qsol = MIN(qsol + bil_eau_s, max_eau_sol)
113            qsol(i) = MIN(qsol(i), max_eau_sol)      else if (nisurf == is_lic) then
114         else if (nisurf == is_lic) then         do i = 1, knon
115            run_off_lic(i) = (coeff_rel * fqcalving(i)) + &            run_off_lic_0(i) = (coeff_rel * fqcalving(i)) + &
116                 (1. - coeff_rel) * run_off_lic_0(i)                 (1. - coeff_rel) * run_off_lic_0(i)
117            run_off_lic_0(i) = run_off_lic(i)            run_off_lic(i) = run_off_lic_0(i) + bil_eau_s(i) / dtphys
118            run_off_lic(i) = run_off_lic(i) + bil_eau_s(i) / dtime         enddo
119         endif      endif
     enddo  
120    
121    END SUBROUTINE fonte_neige    END SUBROUTINE fonte_neige
122    

Legend:
Removed from v.216  
changed lines
  Added in v.300

  ViewVC Help
Powered by ViewVC 1.1.21