source: trunk/LMDZ.TITAN/libf/phytitan/clcdrag.F90 @ 306

Last change on this file since 306 was 119, checked in by slebonnois, 14 years ago

Sebastien Lebonnois: apres validation des versions Venus et Titan,
correction d'un certain nombre de bugs.

File size: 3.5 KB
Line 
1!
2! $Header: /home/cvsroot/LMDZ4/libf/phylmd/clcdrag.F90,v 1.1.1.1 2004/05/19 12:53:07 lmdzadmin Exp $
3!
4! ADAPTATION GCM POUR CP(T)
5      SUBROUTINE clcdrag(klon, knon, zxli, &
6                         zgeop, zri, &
7                         pcfm, pcfh)
8      IMPLICIT NONE
9! ================================================================= c
10!
11! Objet : calcul des cdrags pour le moment (pcfm) et
12!         les flux de chaleur sensible et latente (pcfh).   
13!
14! ================================================================= c
15!
16! klon----input-I- dimension de la grille physique (= nb_pts_latitude X nb_pts_longitude)
17! knon----input-I- nombre de points pour un type de surface
18! zxli----input-L- calcul des cdrags selon Laurent Li
19! zgeop---input-R- geopotentiel au 1er niveau du modele
20! zri-----input-R- Ridchardson number, premier niveau
21!
22! pcfm---output-R- cdrag pour le moment
23! pcfh---output-R- cdrag pour les flux de chaleur latente et sensible
24!
25      INTEGER, intent(in) :: klon, knon
26      LOGICAL, intent(in) :: zxli
27      REAL, intent(in), dimension(klon) :: zgeop
28      REAL, dimension(klon) :: zri
29      REAL, intent(out), dimension(klon) :: pcfm, pcfh
30! ================================================================= c
31!
32#include "YOMCST.h"
33#include "clesphys.h"
34!
35! Quelques constantes et options:
36!     REAL, PARAMETER :: ckap=0.40, cb=5.0, cc=5.0, cd=5.0,cepdu2=(0.1)**2
37      REAL, PARAMETER :: ckap=0.40, cb=5.0, cc=5.0, cd=5.0
38!
39! Variables locales :
40      INTEGER :: i
41      REAL :: zscf
42      REAL :: zucf
43      REAL :: FRIV,FRIH
44      REAL, dimension(klon) :: zcfm1, zcfm2
45      REAL, dimension(klon) :: zcfh1, zcfh2
46      REAL, dimension(klon) :: zcdn
47!
48! Fonctions thermodynamiques et fonctions d'instabilite
49      REAL :: fsta, fins, x
50      fsta(x) = 1.0 / (1.0+10.0*x*(1+8.0*x))
51      fins(x) = SQRT(1.0-18.0*x)
52! ================================================================= c
53!
54! Calculer le frottement au sol (Cdrag)
55! ADAPTATION GCM POUR CP(T)
56!
57      DO i = 1, knon
58!
59! modif VENUS
60        zcdn(i) = (ckap/log(1.+zgeop(i)/(RG*z0)))**2
61!
62!!$        IF (zri(i) .ge. 0.) THEN      ! situation stable
63        IF (zri(i) .gt. 0.) THEN      ! situation stable
64          zri(i) = min(20.,zri(i))
65          IF (.NOT.zxli) THEN
66            zscf = SQRT(1.+cd*ABS(zri(i)))
67            FRIV = AMAX1(1. / (1.+2.*CB*zri(i)/ZSCF), 0.1)
68            zcfm1(i) = zcdn(i) * FRIV
69            FRIH = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), 0.1 )
70!!$  PB          zcfh1(i) = zcdn(i) * FRIH
71            zcfh1(i) = 0.8 * zcdn(i) * FRIH
72            pcfm(i) = zcfm1(i)
73            pcfh(i) = zcfh1(i)
74          ELSE
75            pcfm(i) = zcdn(i)* fsta(zri(i))
76            pcfh(i) = zcdn(i)* fsta(zri(i))
77          ENDIF
78        ELSE                          ! situation instable
79          IF (.NOT.zxli) THEN
80!
81! modif VENUS.            zucf = 1./(1.+3.0*cb*cc*zcdn(i)*SQRT(ABS(zri(i)) &
82! modif VENUS.                 *(1.0+zgeop(i)/(RG*rugos(i)))))
83            zucf = 1./(1.+3.0*cb*cc*zcdn(i)*SQRT(ABS(zri(i)) &
84                 *(1.0+zgeop(i)/(RG*z0))))
85!
86            zcfm2(i) = zcdn(i)*amax1((1.-2.0*cb*zri(i)*zucf),0.1)
87!!$PB            zcfh2(i) = zcdn(i)*amax1((1.-3.0*cb*zri(i)*zucf),0.1)
88            zcfh2(i) = 0.8 * zcdn(i)*amax1((1.-3.0*cb*zri(i)*zucf),0.1)
89            pcfm(i) = zcfm2(i)
90            pcfh(i) = zcfh2(i)
91          ELSE
92            pcfm(i) = zcdn(i)* fins(zri(i))
93            pcfh(i) = zcdn(i)* fins(zri(i))
94          ENDIF
95        ENDIF
96      END DO
97      RETURN
98      END SUBROUTINE clcdrag
99
Note: See TracBrowser for help on using the repository browser.