/[lmdze]/trunk/libf/phylmd/Orography/drag_noro.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/Orography/drag_noro.f90

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.21