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

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

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

revision 297 by guez, Thu Jul 26 16:02:11 2018 UTC revision 299 by guez, Thu Aug 2 14:27:11 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 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 conf_interface_m, ONLY: 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 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
# Line 95  contains Line 95  contains
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      enddo
110    
# Line 118  contains Line 118  contains
118            run_off_lic(i) = (coeff_rel * fqcalving(i)) + &            run_off_lic(i) = (coeff_rel * fqcalving(i)) + &
119                 (1. - coeff_rel) * run_off_lic_0(i)                 (1. - coeff_rel) * run_off_lic_0(i)
120            run_off_lic_0(i) = run_off_lic(i)            run_off_lic_0(i) = run_off_lic(i)
121            run_off_lic(i) = run_off_lic(i) + bil_eau_s(i) / dtime            run_off_lic(i) = run_off_lic(i) + bil_eau_s(i) / dtphys
122         enddo         enddo
123      endif      endif
124    

Legend:
Removed from v.297  
changed lines
  Added in v.299

  ViewVC Help
Powered by ViewVC 1.1.21