source: LMDZ6/trunk/libf/phylmd/freinage.f90 @ 5274

Last change on this file since 5274 was 5274, checked in by abarral, 9 hours ago

Replace yomcst.h by existing module

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 4.5 KB
Line 
1!
2! $Id$
3!
4  SUBROUTINE freinage(knon, uu, vv,  &
5       tt,veget,lai, height,ypaprs,ypplay,drag_pro,d_u,d_v)
6
7    !ONLINE:
8    use dimphy, only: klon, klev
9!    USE control, ONLY: nvm
10!    USE indice_sol_mod, only : nvm_orch
11
12    USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
13          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
14          , R_ecc, R_peri, R_incl                                      &
15          , RA, RG, R1SA                                         &
16          , RSIGMA                                                     &
17          , R, RMD, RMV, RD, RV, RCPD                    &
18          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
19          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
20          , RCW, RCS                                                 &
21          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
22          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
23          , RALPD, RBETD, RGAMD
24IMPLICIT NONE
25
26
27
28    include "clesphys.h"
29    include "YOEGWD.h"
30!FC
31    include "dimpft.h"
32    include "compbl.h"
33
34    ! 0. DECLARATIONS:
35
36    ! 0.1 INPUTS
37
38    REAL, DIMENSION(klon,klev), INTENT(IN)         :: ypplay
39    REAL, DIMENSION(klon,klev+1), INTENT(IN)       :: ypaprs
40
41
42     REAL, DIMENSION(klon, klev), INTENT(IN)     :: uu
43     REAL, DIMENSION(klon, klev), INTENT(IN)     :: vv
44     REAL, DIMENSION(klon, klev), INTENT(IN)     :: tt
45     REAL, DIMENSION(klon,nvm_lmdz), INTENT(IN)          :: veget,lai
46     REAL, DIMENSION(klon,nvm_lmdz), INTENT(IN)          :: height
47
48     REAL, DIMENSION(klon,klev)         :: wind
49     REAL, DIMENSION(klon, klev)        :: yzlay
50     INTEGER knon
51
52    ! 0.2 OUTPUTS
53
54      REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_v        ! change in v
55      REAL, DIMENSION(klon, klev),  INTENT(OUT)       :: d_u        ! change in v
56    !knon nombre de points concernes
57      REAL, DIMENSION(klon,klev)         :: sumveg        ! change in v
58   
59     REAL,  DIMENSION(klon,klev), INTENT(OUT)          :: drag_pro
60    ! (KLON, KLEV) tendencies on winds
61
62
63    INTEGER k,jv,i
64
65
66!FCCCC    REAL Cd_frein
67
68    ! 0.3.1 LOCAL VARIABLE
69
70
71    !-----------------------------------------------------------------
72
73    ! 1. INITIALISATIONS
74
75   
76!    Cd_frein = 7.5E-2 ! (0.075) ! Drag from MASSON 2009
77!FC ESSAI
78!    Cd_frein = 1.5E-2 ! (0.075) ! Drag from MASSON 2009
79!    Cd_frein = 0.005 ! (0.075) ! Drag from MASSON 2009
80
81! initialisation
82      d_u(:,:) =0.
83      d_v(:,:) =0.
84      drag_pro(:,:) =0.
85      sumveg(:,:) =0.
86!!        print*, "Cd_frein" , Cd_frein
87     
88       wind(:,:)= sqrt(uu(:,:)*uu(:,:)+vv(:,:)*vv(:,:))
89
90       yzlay(1:knon,1)= &
91            RD*tt(1:knon,1)/(0.5*(ypaprs(1:knon,1)+ypplay(1:knon,1))) &
92            *(ypaprs(1:knon,1)-ypplay(1:knon,1))/RG
93       DO k=2,klev
94             yzlay(1:knon,k)= &
95                  yzlay(1:knon,k-1)+RD*0.5*(tt(1:knon,k-1)+tt(1:knon,k)) &
96                  /ypaprs(1:knon,k)*(ypplay(1:knon,k-1)-ypplay(1:knon,k))/RG
97       END DO
98
99!    verifier les indexes .....
100!!       print*, " calcul de drag_pro FC "
101   
102      do k= 1,klev
103
104      do jv=2,nvm_lmdz   !   (on peut faire 9 ?)
105
106      do i=1,knon
107
108      sumveg(i,k)= sumveg(i,k)+ veget(i,jv)
109
110!      if  ( (height(i,jv) .gt. yzlay(i,k)) .AND. (height(i,jv) .gt. 0.1) .and. LAI(i,jv).gt.0. ) then                     
111      if  ( (height(i,jv) .gt. yzlay(i,k)) .AND. (height(i,jv) .gt. 0.1) ) then                     
112!FC attention veut on le test sur le LAI ?
113         if (ifl_pbltree.eq.1) then
114      drag_pro(i,k)= drag_pro(i,k)+ &
115      veget(i,jv)
116          elseif (ifl_pbltree.eq.2) then
117      drag_pro(i,k)= drag_pro(i,k)+ &
118      6*LAI(i,jv)*veget(i,jv)*( yzlay(i,k)*(height(i,jv)-yzlay(i,k))/(height(i,jv)*height(i,jv)+ 0.01))
119          elseif (ifl_pbltree.eq.3) then
120      drag_pro(i,k)= drag_pro(i,k)+ &
121      veget(i,jv)*( yzlay(i,k)*(height(i,jv)-yzlay(i,k))/(height(i,jv)*height(i,jv)+ 0.01))
122          elseif (ifl_pbltree.eq.0) then
123          drag_pro(i,k)=0.0
124           endif
125      else
126      drag_pro(i,k)= drag_pro(i,k)
127      endif
128
129
130      enddo
131      enddo
132     enddo
133      do k=1,klev
134        where (sumveg(1:knon,k) > 0.05 )
135!        drag_pro(1:knon,k)=Cd_frein*drag_pro(1:knon,k)/sumveg(1:knon,k)
136        drag_pro(1:knon,k)=Cd_frein*drag_pro(1:knon,k)
137        elsewhere
138        drag_pro(1:knon,k)=0.0
139       endwhere
140        d_u(1:knon,k) =(-1)*drag_pro(1:knon,k)*uu(1:knon,k)*wind(1:knon,k)
141        d_v(1:knon,k) =(-1)*drag_pro(1:knon,k)*vv(1:knon,k)*wind(1:knon,k)
142      enddo
143      return
144
145 END SUBROUTINE freinage
146
Note: See TracBrowser for help on using the repository browser.