/[lmdze]/trunk/Sources/phylmd/Orography/lift_noro.f
ViewVC logotype

Contents of /trunk/Sources/phylmd/Orography/lift_noro.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 23 - (show annotations)
Mon Dec 14 15:25:16 2009 UTC (14 years, 5 months ago) by guez
Original Path: trunk/libf/phylmd/Orography/lift_noro.f90
File size: 3371 byte(s)
Split "orografi.f": one file for each procedure. Put the created files
in new directory "Orography".

Removed argument "vcov" of procedure "sortvarc". Removed arguments
"itau" and "time" of procedure "caldyn0". Removed arguments "itau",
"time" and "vcov" of procedure "sortvarc0".

Removed argument "time" of procedure "dynredem1". Removed NetCDF
variable "temps" in files "start.nc" and "restart.nc", because its
value is always 0.

Removed argument "nq" of procedures "iniadvtrac" and "leapfrog". The
number of "tracers read in "traceur.def" must now be equal to "nqmx",
or "nqmx" must equal 4 if there is no file "traceur.def". Replaced
variable "nq" by constant "nqmx" in "leapfrog".

NetCDF variable for ozone field in "coefoz.nc" must now be called
"tro3" instead of "r".

Fixed bug in "zenang".

1 SUBROUTINE lift_noro(nlon,nlev,dtime,paprs,pplay,plat,pmea,pstd,ppic, &
2 ktest,t,u,v,pulow,pvlow,pustr,pvstr,d_t,d_u,d_v)
3
4 USE dimens_m
5 USE dimphy
6 USE yomcst
7 IMPLICIT NONE
8 !======================================================================
9 ! Auteur(s): F.Lott (LMD/CNRS) date: 19950201
10 ! Objet: Frottement de la montagne Interface
11 !======================================================================
12 ! Arguments:
13 ! dtime---input-R- pas d'integration (s)
14 ! paprs---input-R-pression pour chaque inter-couche (en Pa)
15 ! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
16 ! t-------input-R-temperature (K)
17 ! u-------input-R-vitesse horizontale (m/s)
18 ! v-------input-R-vitesse horizontale (m/s)
19
20 ! d_t-----output-R-increment de la temperature
21 ! d_u-----output-R-increment de la vitesse u
22 ! d_v-----output-R-increment de la vitesse v
23 !======================================================================
24
25 ! ARGUMENTS
26
27 INTEGER nlon, nlev
28 REAL, INTENT (IN) :: dtime
29 REAL, INTENT (IN) :: paprs(klon,klev+1)
30 REAL, INTENT (IN) :: pplay(klon,klev)
31 REAL, INTENT (IN) :: plat(nlon)
32 REAL pmea(nlon)
33 REAL, INTENT (IN) :: pstd(nlon)
34 REAL ppic(nlon)
35 REAL pulow(nlon), pvlow(nlon), pustr(nlon), pvstr(nlon)
36 REAL t(nlon,nlev), u(nlon,nlev), v(nlon,nlev)
37 REAL d_t(nlon,nlev), d_u(nlon,nlev), d_v(nlon,nlev)
38
39 INTEGER i, k, ktest(nlon)
40
41 ! Variables locales:
42
43 REAL zgeom(klon,klev)
44 REAL pdtdt(klon,klev), pdudt(klon,klev), pdvdt(klon,klev)
45 REAL pt(klon,klev), pu(klon,klev), pv(klon,klev)
46 REAL papmf(klon,klev), papmh(klon,klev+1)
47
48 ! initialiser les variables de sortie (pour securite)
49
50 DO i = 1, klon
51 pulow(i) = 0.0
52 pvlow(i) = 0.0
53 pustr(i) = 0.0
54 pvstr(i) = 0.0
55 END DO
56 DO k = 1, klev
57 DO i = 1, klon
58 d_t(i,k) = 0.0
59 d_u(i,k) = 0.0
60 d_v(i,k) = 0.0
61 pdudt(i,k) = 0.0
62 pdvdt(i,k) = 0.0
63 pdtdt(i,k) = 0.0
64 END DO
65 END DO
66
67 ! preparer les variables d'entree (attention: l'ordre des niveaux
68 ! verticaux augmente du haut vers le bas)
69
70 DO k = 1, klev
71 DO i = 1, klon
72 pt(i,k) = t(i,klev-k+1)
73 pu(i,k) = u(i,klev-k+1)
74 pv(i,k) = v(i,klev-k+1)
75 papmf(i,k) = pplay(i,klev-k+1)
76 END DO
77 END DO
78 DO k = 1, klev + 1
79 DO i = 1, klon
80 papmh(i,k) = paprs(i,klev-k+2)
81 END DO
82 END DO
83 DO i = 1, klon
84 zgeom(i,klev) = rd*pt(i,klev)*log(papmh(i,klev+1)/papmf(i,klev))
85 END DO
86 DO k = klev - 1, 1, -1
87 DO i = 1, klon
88 zgeom(i,k) = zgeom(i,k+1) + rd*(pt(i,k)+pt(i,k+1))/2.0*log(papmf(i,k &
89 +1)/papmf(i,k))
90 END DO
91 END DO
92
93 ! appeler la routine principale
94
95 CALL orolift(klon,klev,ktest,dtime,papmh,zgeom,pt,pu,pv,plat,pmea,pstd, &
96 ppic,pulow,pvlow,pdudt,pdvdt,pdtdt)
97
98 DO k = 1, klev
99 DO i = 1, klon
100 d_u(i,klev+1-k) = dtime*pdudt(i,k)
101 d_v(i,klev+1-k) = dtime*pdvdt(i,k)
102 d_t(i,klev+1-k) = dtime*pdtdt(i,k)
103 pustr(i) = pustr(i) &
104 + pdudt(i,k)*(papmh(i,k+1)-papmh(i,k))/rg
105 pvstr(i) = pvstr(i) &
106 + pdvdt(i,k)*(papmh(i,k+1)-papmh(i,k))/rg
107 END DO
108 END DO
109
110 RETURN
111 END

  ViewVC Help
Powered by ViewVC 1.1.21