source: trunk/mars/libf/phymars/vdif_cd.F @ 38

Last change on this file since 38 was 38, checked in by emillour, 14 years ago

Ajout du modè Martien (mon LMDZ.MARS.BETA, du 28/01/2011) dans le rértoire mars, pour pouvoir suivre plus facilement les modifs.
EM

File size: 2.9 KB
Line 
1      SUBROUTINE vdif_cd( ngrid,nlay,pz0,pg,pz,pu,pv,pts,ph,pcdv,pcdh)
2      IMPLICIT NONE
3c=======================================================================
4c
5c   Subject: computation of the surface drag coefficient using the
6c   -------  approch developed by Loui for ECMWF.
7c
8c   Author: Frederic Hourdin  15 /10 /93
9c   -------
10c
11c   Arguments:
12c   ----------
13c
14c   inputs:
15c   ------
16c     ngrid            size of the horizontal grid
17c     pg               gravity (m s -2)
18c     pz(ngrid)        height of the first atmospheric layer
19c     pu(ngrid)        u component of the wind in that layer
20c     pv(ngrid)        v component of the wind in that layer
21c     pts(ngrid)       surfacte temperature
22c     ph(ngrid)        potential temperature T*(p/ps)^kappa
23c
24c   outputs:
25c   --------
26c     pcdv(ngrid)      Cd for the wind
27c     pcdh(ngrid)      Cd for potential temperature
28c
29c=======================================================================
30c
31c-----------------------------------------------------------------------
32c   Declarations:
33c   -------------
34
35c   Arguments:
36c   ----------
37
38      INTEGER ngrid,nlay
39      REAL pz0
40      REAL pg,pz(ngrid,nlay)
41      REAL pu(ngrid,nlay),pv(ngrid,nlay)
42      REAL pts(ngrid,nlay),ph(ngrid,nlay)
43      REAL pcdv(ngrid),pcdh(ngrid)
44
45c   Local:
46c   ------
47
48      INTEGER ig
49
50      REAL zu2,z1,zri,zcd0,zz
51
52      REAL karman,b,c,d,c2b,c3bc,c3b,umin2
53      LOGICAL firstcal
54      DATA karman,b,c,d,umin2/.4,5.,5.,5.,1.e-12/
55      DATA firstcal/.true./
56      SAVE b,c,d,karman,c2b,c3bc,c3b,firstcal,umin2
57
58c-----------------------------------------------------------------------
59c   couche de surface:
60c   ------------------
61
62c     DO ig=1,ngrid
63c        zu2=pu(ig)*pu(ig)+pv(ig)*pv(ig)+umin2
64c        pcdv(ig)=pz0*(1.+sqrt(zu2))
65c        pcdh(ig)=pcdv(ig)
66c     ENDDO
67c     RETURN
68c
69c      IF (firstcal) THEN
70c         c2b=2.*b
71c         c3bc=3.*b*c
72c         c3b=3.*b
73c         firstcal=.false.
74c      ENDIF
75c
76c!!!! WARNING, verifier la formule originale de Louis!
77c      DO ig=1,ngrid
78c         zu2=pu(ig)*pu(ig)+pv(ig)*pv(ig)+umin2
79c         zri=pg*pz(ig)*(ph(ig)-pts(ig))/(ph(ig)*zu2)
80c._.
81c            zri=0.E+0
82c._.
83c         z1=1.+pz(ig)/pz0
84c         zcd0=karman/log(z1)
85c._.         zcd0=zcd0*zcd0*sqrt(zu2)
86c         zcd0=zcd0*zcd0
87c         IF(zri.LT.0.) THEN
88c._.            z1=b*zri/(1.+c3bc*zcd0*sqrt(-z1*zri))
89c            z1=b*zri/(1.+c3bc*zcd0*sqrt(-z1*zri*zu2))
90c            pcdv(ig)=zcd0*(1.-2.*z1)
91c            pcdh(ig)=zcd0*(1.-3.*z1)
92c         ELSE
93c            zz=sqrt(1.+d*zri)
94c            pcdv(ig)=zcd0/(1.+c2b*zri/zz)
95c            pcdh(ig)=zcd0/(1.+c3b*zri*zz)
96c         ENDIF
97c      ENDDO
98
99
100c On calcule un VRAI cdrag tout bete
101
102      DO ig=1,ngrid
103         z1=1.E+0 + pz(ig,1)/pz0
104         zcd0=karman/log(z1)
105         zcd0=zcd0*zcd0
106         pcdv(ig)=zcd0
107         pcdh(ig)=zcd0
108      ENDDO
109
110       
111
112
113c-----------------------------------------------------------------------
114
115      RETURN
116      END
Note: See TracBrowser for help on using the repository browser.