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

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

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

revision 103 by guez, Fri Aug 29 13:00:05 2014 UTC revision 104 by guez, Thu Sep 4 10:05:52 2014 UTC
# Line 4  module calcul_fluxs_m Line 4  module calcul_fluxs_m
4    
5  contains  contains
6    
7    SUBROUTINE calcul_fluxs( klon, knon, nisurf, dtime,  &    SUBROUTINE calcul_fluxs(nisurf, dtime, tsurf, p1lay, cal, beta, coef1lay, &
8         tsurf, p1lay, cal, beta, coef1lay, ps,  &         ps, qsurf, radsol, dif_grnd, t1lay, q1lay, u1lay, v1lay, petAcoef, &
9         precip_rain, precip_snow, snow, qsurf,  &         peqAcoef, petBcoef, peqBcoef, tsurf_new, evap, fluxlat, fluxsens, &
10         radsol, dif_grnd, t1lay, q1lay, u1lay, v1lay,  &         dflux_s, dflux_l)
        petAcoef, peqAcoef, petBcoef, peqBcoef,  &  
        tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l)  
11    
12      ! Cette routine calcule les fluxs en h et q à l'interface et une      ! Cette routine calcule les fluxs en h et q à l'interface et une
13      ! température de surface.      ! température de surface.
14    
15      ! L. Fairhead 4/2000      ! L. Fairhead April 2000
16    
17      ! input:      USE abort_gcm_m, ONLY: abort_gcm
18      ! knon nombre de points a traiter      USE indicesol, ONLY: is_ter
19      ! nisurf surface a traiter      USE fcttre, ONLY: dqsatl, dqsats, foede, foeew, qsatl, qsats, thermcep
20      ! tsurf temperature de surface      USE interface_surf, ONLY: run_off
21      ! p1lay pression 1er niveau (milieu de couche)      use nr_util, only: assert_eq
22      ! cal capacite calorifique du sol      USE suphec_m, ONLY: rcpd, rd, retv, rkappa, rlstt, rlvtt, rtt
23      ! beta evap reelle      USE yoethf_m, ONLY: r2es, r5ies, r5les, rvtmp2
24      ! coef1lay coefficient d'echange  
25      ! ps pression au sol      integer, intent(IN):: nisurf ! surface a traiter
26      ! precip_rain precipitations liquides      real, intent(IN):: dtime
27      ! precip_snow precipitations solides      real, intent(IN):: tsurf(:) ! (knon) temperature de surface
28      ! snow champs hauteur de neige      real, intent(IN):: p1lay(:) ! (knon) pression 1er niveau (milieu de couche)
29      ! runoff runoff en cas de trop plein      real, intent(IN):: cal(:) ! (knon) capacité calorifique du sol
30      ! petAcoef coeff. A de la resolution de la CL pour t      real, intent(IN):: beta(:) ! (knon) evap reelle
31      ! peqAcoef coeff. A de la resolution de la CL pour q      real, intent(IN):: coef1lay(:) ! (knon) coefficient d'échange
32        real, intent(IN):: ps(:) ! (knon) pression au sol
33        real, intent(OUT):: qsurf(:) ! (knon) humidite de l'air au dessus du sol
34        real, intent(IN):: radsol(:) ! (knon) rayonnement net au sol (LW + SW)
35    
36        real, intent(IN):: dif_grnd(:) ! (knon)
37        ! coefficient diffusion vers le sol profond
38    
39        real, intent(IN):: t1lay(:), q1lay(:), u1lay(:), v1lay(:) ! (knon)
40    
41        real, intent(IN):: petAcoef(:), peqAcoef(:) ! (knon)
42        ! coefficients A de la résolution de la couche limite pour t et q
43    
44        real, intent(IN):: petBcoef(:), peqBcoef(:) ! (knon)
45      ! petBcoef coeff. B de la resolution de la CL pour t      ! petBcoef coeff. B de la resolution de la CL pour t
46      ! peqBcoef coeff. B de la resolution de la CL pour q      ! peqBcoef coeff. B de la resolution de la CL pour q
     ! radsol rayonnement net aus sol (LW + SW)  
     ! dif_grnd coeff. diffusion vers le sol profond  
47    
48      ! output:      real, intent(OUT):: tsurf_new(:) ! (knon) température au sol
49      ! tsurf_new temperature au sol      real, intent(OUT):: evap(:), fluxlat(:), fluxsens(:) ! (knon)
     ! qsurf humidite de l'air au dessus du sol  
     ! fluxsens flux de chaleur sensible  
50      ! fluxlat flux de chaleur latente      ! fluxlat flux de chaleur latente
51        ! fluxsens flux de chaleur sensible
52        real, intent(OUT):: dflux_s(:), dflux_l(:) ! (knon)
53        ! Dérivées des flux dF/dTs (W m-2 K-1)
54      ! dflux_s derivee du flux de chaleur sensible / Ts      ! dflux_s derivee du flux de chaleur sensible / Ts
55      ! dflux_l derivee du flux de chaleur latente / Ts      ! dflux_l derivee du flux de chaleur latente / Ts
56    
57        ! Local:
58      use indicesol      integer i
59      use abort_gcm_m, only: abort_gcm      real, dimension(size(ps)) :: zx_mh, zx_nh, zx_oh
60      use yoethf_m      real, dimension(size(ps)) :: zx_mq, zx_nq, zx_oq
61      use fcttre, only: thermcep, foeew, qsats, qsatl, foede, dqsats, dqsatl      real, dimension(size(ps)) :: zx_pkh, zx_dq_s_dt, zx_qsat, zx_coef
62      use SUPHEC_M      real, dimension(size(ps)) :: zx_sl, zx_k1
63      use interface_surf      real, dimension(size(ps)) :: zx_q_0 , d_ts
   
     ! Parametres d'entree  
     integer, intent(IN) :: knon, nisurf, klon  
     real , intent(IN) :: dtime  
     real, dimension(klon), intent(IN) :: petAcoef, peqAcoef  
     real, dimension(klon), intent(IN) :: petBcoef, peqBcoef  
     real, dimension(klon), intent(IN) :: ps, q1lay  
     real, dimension(klon), intent(IN) :: tsurf, p1lay, cal, beta, coef1lay  
     real, dimension(klon), intent(IN) :: precip_rain, precip_snow  
     real, dimension(klon), intent(IN) :: radsol, dif_grnd  
     real, dimension(klon), intent(IN) :: t1lay, u1lay, v1lay  
     real, dimension(klon), intent(INOUT) :: snow, qsurf  
   
     ! Parametres sorties  
     real, dimension(klon), intent(OUT):: tsurf_new, evap, fluxsens, fluxlat  
     real, dimension(klon), intent(OUT):: dflux_s, dflux_l  
   
     ! Variables locales  
     integer :: i  
     real, dimension(klon) :: zx_mh, zx_nh, zx_oh  
     real, dimension(klon) :: zx_mq, zx_nq, zx_oq  
     real, dimension(klon) :: zx_pkh, zx_dq_s_dt, zx_qsat, zx_coef  
     real, dimension(klon) :: zx_sl, zx_k1  
     real, dimension(klon) :: zx_q_0 , d_ts  
64      logical zdelta      logical zdelta
65      real zcvm5, zx_qs, zcor, zx_dq_s_dh      real zcvm5, zx_qs, zcor, zx_dq_s_dh
66      real :: bilan_f, fq_fonte      real :: bilan_f, fq_fonte
67      REAL :: subli, fsno      REAL :: subli, fsno
68      REAL :: qsat_new, q1_new      REAL :: qsat_new, q1_new
69      real, parameter :: t_grnd = 271.35, t_coup = 273.15      integer knon ! nombre de points a traiter
70      !! PB temporaire en attendant mieux pour le modele de neige      real, parameter:: t_grnd = 271.35, t_coup = 273.15
71      REAL, parameter :: chasno = 3.334E+05/(2.3867E+06*0.15)  
72        !---------------------------------------------------------------------
73      logical, save :: check = .false.  
74      character (len = 20) :: modname = 'calcul_fluxs'      knon = assert_eq((/size(tsurf), size(p1lay), size(cal), size(beta), &
75      logical, save :: fonte_neige = .false.           size(coef1lay), size(ps), size(qsurf), size(radsol), size(dif_grnd), &
76      real, save :: max_eau_sol = 150.0           size(t1lay), size(q1lay), size(u1lay), size(v1lay), size(petAcoef), &
77      character (len = 80) :: abort_message           size(peqAcoef), size(petBcoef), size(peqBcoef), size(tsurf_new), &
78      logical, save :: first = .true., second=.false.           size(evap), size(fluxlat), size(fluxsens), size(dflux_s), &
79             size(dflux_l)/), "calcul_fluxs knon")
     if (check) write(*, *)'Entree ', modname, ' surface = ', nisurf  
   
     IF (check) THEN  
        WRITE(*, *)' radsol (min, max)' &  
             , MINVAL(radsol(1:knon)), MAXVAL(radsol(1:knon))  
        !!CALL flush(6)  
     ENDIF  
80    
81      if (size(run_off) /= knon .AND. nisurf == is_ter) then      if (size(run_off) /= knon .AND. nisurf == is_ter) then
82         write(*, *)'Bizarre, le nombre de points continentaux'         print *, 'Bizarre, le nombre de points continentaux'
83         write(*, *)'a change entre deux appels. J''arrete ...'         print *, 'a change entre deux appels. J''arrete.'
84         abort_message='Pb run_off'         call abort_gcm('calcul_fluxs', 'Pb run_off', 1)
        call abort_gcm(modname, abort_message, 1)  
85      endif      endif
86    
87      ! Traitement neige et humidite du sol      ! Traitement humidite du sol
   
     ! Initialisation  
88    
89      evap = 0.      evap = 0.
90      fluxsens=0.      fluxsens=0.

Legend:
Removed from v.103  
changed lines
  Added in v.104

  ViewVC Help
Powered by ViewVC 1.1.21