/[lmdze]/trunk/phylmd/cdrag.f
ViewVC logotype

Annotation of /trunk/phylmd/cdrag.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 221 - (hide annotations)
Thu Apr 20 14:44:47 2017 UTC (7 years, 1 month ago) by guez
Original Path: trunk/Sources/phylmd/clcdrag.f
File size: 3051 byte(s)
clcdrag is no longer used in LMDZ. Replaced by cdrag in LMDZ. In cdrag
in LMDZ, zxli is a symbolic constant, false. So removed case zxli true
in LMDZE.

read_sst is called zero (if no ocean point on the whole planet) time or
once per call of physiq. If mod(itap - 1, lmt_pas) == 0 then we have
advanced in time of lmt_pas and deja_lu is necessarily false.

qsat[sl] and dqsat[sl] were never called.

Added output of qsurf in histins, following LMDZ.

Last dummy argument dtime of phystokenc is always the same as first
dummy argument pdtphys, removed dtime.

Removed make rules for nag_xref95, since it does not exist any longer.

1 guez 62 module clcdrag_m
2 guez 40
3 guez 62 IMPLICIT NONE
4 guez 40
5 guez 62 contains
6 guez 40
7 guez 221 SUBROUTINE clcdrag(nsrf, u, v, t, q, zgeop, ts, qsurf, rugos, pcfm, pcfh)
8 guez 40
9 guez 221 ! From LMDZ4/libf/phylmd/clcdrag.F90, version 1.1.1.1, 2004/05/19 12:53:07
10 guez 40
11 guez 62 ! Objet : calcul des cdrags pour le moment (pcfm) et les flux de
12     ! chaleur sensible et latente (pcfh).
13 guez 221 ! Calculer le frottement au sol (Cdrag)
14 guez 40
15 guez 221 USE dimphy, ONLY: klon
16     USE indicesol, ONLY: is_oce
17     USE suphec_m, ONLY: rcpd, retv, rg
18     USE yoethf_m, ONLY: rvtmp2
19    
20     INTEGER, intent(in):: nsrf ! indice pour le type de surface
21    
22     REAL, intent(in), dimension(klon):: u, v, t, q
23 guez 62 ! u-------input-R- vent zonal au 1er niveau du modele
24     ! v-------input-R- vent meridien au 1er niveau du modele
25     ! t-------input-R- temperature de l'air au 1er niveau du modele
26     ! q-------input-R- humidite de l'air au 1er niveau du modele
27 guez 40
28 guez 221 REAL, intent(in):: zgeop(klon) ! géopotentiel au 1er niveau du modèle
29     REAL, intent(in):: ts(:) ! (knon) temperature de l'air a la surface
30     REAL, intent(in):: qsurf(:) ! (knon) humidite de l'air a la surface
31     REAL, intent(in):: rugos(klon) ! rugosit\'e
32    
33     REAL, intent(out):: pcfm(:), pcfh(:) ! (knon)
34 guez 62 ! pcfm---output-R- cdrag pour le moment
35     ! pcfh---output-R- cdrag pour les flux de chaleur latente et sensible
36 guez 47
37 guez 221 ! Local:
38 guez 47
39 guez 62 ! Quelques constantes et options:
40 guez 221 REAL, PARAMETER:: ckap=0.40, cb=5.0, cc=5.0, cd=5.0, cepdu2=(0.1)**2
41 guez 40
42 guez 221 INTEGER:: i
43     REAL:: zdu2, ztsolv, ztvd, zscf
44     REAL:: zucf, zcr
45     REAL:: friv, frih
46     REAL, dimension(klon):: zcfm1, zcfm2
47     REAL, dimension(klon):: zcfh1, zcfh2
48     REAL, dimension(klon):: zcdn
49     REAL, dimension(klon):: zri
50 guez 40
51 guez 62 !--------------------------------------------------------------------
52 guez 40
53 guez 221 DO i = 1, size(pcfm)
54 guez 62 zdu2 = max(cepdu2,u(i)**2+v(i)**2)
55     ztsolv = ts(i) * (1.0+RETV*qsurf(i))
56     ztvd = (t(i)+zgeop(i)/RCPD/(1.+RVTMP2*q(i))) &
57     *(1.+RETV*q(i))
58     zri(i) = zgeop(i)*(ztvd-ztsolv)/(zdu2*ztvd)
59     zcdn(i) = (ckap/log(1.+zgeop(i)/(RG*rugos(i))))**2
60    
61     IF (zri(i) .gt. 0.) THEN
62     ! situation stable
63     zri(i) = min(20.,zri(i))
64 guez 221 zscf = SQRT(1.+cd*ABS(zri(i)))
65     FRIV = AMAX1(1. / (1.+2.*CB*zri(i)/ZSCF), 0.1)
66     zcfm1(i) = zcdn(i) * FRIV
67     FRIH = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), 0.1 )
68     zcfh1(i) = 0.8 * zcdn(i) * FRIH
69     pcfm(i) = zcfm1(i)
70     pcfh(i) = zcfh1(i)
71 guez 62 ELSE
72     ! situation instable
73 guez 221 zucf = 1./(1.+3.0*cb*cc*zcdn(i)*SQRT(ABS(zri(i)) &
74     *(1.0+zgeop(i)/(RG*rugos(i)))))
75     zcfm2(i) = zcdn(i)*amax1((1.-2.0*cb*zri(i)*zucf),0.1)
76     zcfh2(i) = 0.8 * zcdn(i)*amax1((1.-3.0*cb*zri(i)*zucf),0.1)
77     pcfm(i) = zcfm2(i)
78     pcfh(i) = zcfh2(i)
79 guez 62 zcr = (0.0016/(zcdn(i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.)
80     IF(nsrf == is_oce) pcfh(i) = 0.8 * zcdn(i) &
81     * (1. + zcr**1.25)**(1. / 1.25)
82     ENDIF
83     END DO
84    
85     END SUBROUTINE clcdrag
86    
87     end module clcdrag_m

  ViewVC Help
Powered by ViewVC 1.1.21