source: LMDZ4/trunk/libf/dyn3d/PVteta.F @ 644

Last change on this file since 644 was 644, checked in by Laurent Fairhead, 20 years ago

Synchronisation avec tous les diagnostiques de Ionela IM
Inclusion du slab ocean IM
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1      SUBROUTINE PVtheta(ilon,ilev,pucov,pvcov,pteta,
2     $           ztfi,zplay,zplev,
3     $           nbteta,theta,PVteta)
4      IMPLICIT none
5
6c=======================================================================
7c
8c   Auteur:  I. Musat
9c   -------
10c
11c   Objet:
12c   ------
13c
14c    *******************************************************************
15c    Calcul de la vorticite potentielle PVteta sur des iso-theta selon
16c    la methodologie du NCEP/NCAR :
17c    1) on calcule la stabilite statique N**2=g/T*(dT/dz+g/cp) sur les
18c       niveaux du modele => N2
19c    2) on interpole les vents, la temperature et le N**2 sur des isentropes
20c       (en fait sur des iso-theta) lineairement en log(theta) =>
21c       ucovteta, vcovteta, N2teta
22c    3) on calcule la vorticite absolue sur des iso-theta => vorateta
23c    4) on calcule la densite rho sur des iso-theta => rhoteta
24c
25c       rhoteta = (T/theta)**(cp/R)*p0/(R*T)
26c
27c    5) on calcule la vorticite potentielle sur des iso-theta => PVteta
28c
29c       PVteta = (vorateta * N2 * theta)/(g * rhoteta) ! en PVU
30c
31c       NB: 1PVU=10**(-6) K*m**2/(s * kg)
32c
33c       PVteta =  vorateta * N2/(g**2 * rhoteta) ! en 1/(Pa*s)
34c
35c
36c    *******************************************************************
37c
38c
39c     Variables d'entree : ilon,ilev,pucov,pvcov,pteta,ztfi,zplay,zplev,nbteta,theta
40c                       -> sur la grille dynamique
41c     Variable de sortie : PVteta
42c                       -> sur la grille physique
43c=======================================================================
44
45#include "dimensions.h"
46#include "paramet.h"
47c
48c variables Input
49c
50      INTEGER ilon, ilev
51      REAL pvcov(iip1,jjm,ilev)
52      REAL pucov(iip1,jjp1,ilev)
53      REAL pteta(iip1,jjp1,ilev)
54      REAL ztfi(ilon,ilev)
55      REAL zplay(ilon,ilev), zplev(ilon,ilev+1)
56      INTEGER nbteta
57      REAL theta(nbteta)
58c
59c variable Output
60c
61      REAL PVteta(ilon,nbteta)
62c
63c variables locales
64c
65      INTEGER i, j, l, ig0
66      REAL SSUM
67      REAL teta(ilon, ilev)
68      REAL ptetau(ip1jmp1, ilev), ptetav(ip1jm, ilev)
69      REAL ucovteta(ip1jmp1,ilev), vcovteta(ip1jm,ilev)
70      REAL N2(ilon,ilev-1), N2teta(ilon,nbteta)
71      REAL ztfiteta(ilon,nbteta)
72      REAL rhoteta(ilon,nbteta)
73      REAL vorateta(iip1,jjm,ilev)
74      REAL voratetafi(ilon,ilev), vorpol(iim)
75c
76#include "comgeom2.h"
77#include "comconst.h"
78#include "comvert.h"
79c
80c projection teta sur la grille physique
81c
82      DO l=1,llm
83       teta(1,l)   =  pteta(1,1,l)
84       ig0         = 2
85       DO j = 2, jjm
86        DO i = 1, iim
87         teta(ig0,l)    = pteta(i,j,l)
88         ig0            = ig0 + 1
89        ENDDO
90       ENDDO
91       teta(ig0,l)    = pteta(1,jjp1,l)
92      ENDDO
93c
94c calcul pteta sur les grilles U et V
95c
96      DO l=1, llm
97       DO j=1, jjp1
98        DO i=1, iip1
99         ig0=i+(j-1)*iip1
100         ptetau(ig0,l)=pteta(i,j,l)
101        ENDDO !i
102       ENDDO !j
103       DO j=1, jjm
104        DO i=1, iip1
105         ig0=i+(j-1)*iip1
106         ptetav(ig0,l)=0.5*(pteta(i,j,l)+pteta(i,j+1,l))
107        ENDDO !i
108       ENDDO !j
109      ENDDO !l
110c
111c projection pucov, pvcov sur une surface de theta constante
112c
113      DO l=1, nbteta
114       CALL tetaleveli1j1(ip1jmp1,llm,.true.,ptetau,theta(l),
115     .                    pucov,ucovteta(:,l))
116       CALL tetaleveli1j(ip1jm,llm,.true.,ptetav,theta(l),
117     .                   pvcov,vcovteta(:,l))
118      ENDDO !l
119c
120c calcul vorticite absolue sur une iso-theta : vorateta
121c
122      CALL tourabs(nbteta,vcovteta,ucovteta,vorateta)
123c
124c projection vorateta sur la grille physique => voratetafi
125c
126      DO l=1,llm
127       DO j=2,jjm
128        ig0=1+(j-2)*iim
129        DO i=1,iim
130         voratetafi(ig0+i+1,l) = vorateta( i ,j-1,l) * alpha4(i+1,j) +
131     $                           vorateta(i+1,j-1,l) * alpha1(i+1,j) +
132     $                           vorateta(i  ,j  ,l) * alpha3(i+1,j) +
133     $                           vorateta(i+1,j  ,l) * alpha2(i+1,j)
134        ENDDO
135        voratetafi(ig0 +1,l) = voratetafi(ig0 +1+ iim,l)
136       ENDDO
137      ENDDO
138c
139      DO l=1,llm
140       DO i=1,iim
141        vorpol(i)  = vorateta(i,1,l)*aire(i,1)
142       ENDDO
143       voratetafi(1,l)= SSUM(iim,vorpol,1)/apoln
144      ENDDO
145c
146      DO l=1,llm
147       DO i=1,iim
148        vorpol(i)  = vorateta(i,jjm,l)* aire(i,jjm +1)
149       ENDDO
150       voratetafi(ilon,l)= SSUM(iim,vorpol,1)/apols
151      ENDDO
152c
153c calcul N**2 sur la grille physique => N2
154c
155      DO l=1, llm-1
156       DO i=1, ilon
157        N2(i,l) = (g**2 * zplay(i,l) *
158     $            (ztfi(i,l+1)-ztfi(i,l)) )/
159     $            (R*ztfi(i,l)*ztfi(i,l)*
160     $            (zplev(i,l)-zplev(i,l+1)) )+
161     $            (g**2)/(ztfi(i,l)*CPP)
162       ENDDO !i
163      ENDDO !l
164c
165c calcul N2 sur une iso-theta => N2teta
166c
167      DO l=1, nbteta
168       CALL tetalevel(ilon,llm-1,.true.,teta,theta(l),
169     $                N2,N2teta(:,l))
170       CALL tetalevel(ilon,llm,.true.,teta,theta(l),
171     $                ztfi,ztfiteta(:,l))
172      ENDDO !l=1, nbteta
173c
174c calcul rho et PV sur une iso-theta : rhoteta, PVteta
175c
176      DO l=1, nbteta
177       DO i=1, ilon
178        rhoteta(i,l)=(ztfiteta(i,l)/theta(l))**(CPP/R)*
179     $  (preff/(R*ztfiteta(i,l)))
180c
181c PVteta en PVU
182c
183        PVteta(i,l)=(theta(l)*g*voratetafi(i,l)*N2teta(i,l))/
184     $              (g**2*rhoteta(i,l))
185c
186c PVteta en 1/(Pa*s)
187c
188        PVteta(i,l)=(voratetafi(i,l)*N2teta(i,l))/
189     $              (g**2*rhoteta(i,l))
190       ENDDO !i
191      ENDDO !l
192c
193      RETURN
194      END
Note: See TracBrowser for help on using the repository browser.