source: LMDZ4/trunk/libf/phylmd/aaam_bud.F @ 907

Last change on this file since 907 was 879, checked in by Laurent Fairhead, 16 years ago

Suite de la bascule vers une physique avec thermiques, nouvelle convection, poche froide ...
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.4 KB
Line 
1!
2! $Header$
3!
4      subroutine aaam_bud (iam,nlon,nlev,rjour,rsec,
5     i                   rea,rg,ome,     
6     i                   plat,plon,phis,
7     i                   dragu,liftu,phyu,
8     i                   dragv,liftv,phyv,
9     i                   p, u, v,
10     o                   aam, torsfc)
11c
12      implicit none
13c======================================================================
14c Auteur(s): F.Lott (LMD/CNRS) date: 20031020
15c Object: Compute different terms of the axial AAAM Budget.
16C No outputs, every AAM quantities are written on the IAM
17C File.
18c
19c Modif : I.Musat (LMD/CNRS) date : 20041020
20c Outputs : axial components of wind AAM "aam" and total surface torque "torsfc",
21c but no write in the iam file.
22c
23C WARNING: Only valid for regular rectangular grids.
24C REMARK: CALL DANS PHYSIQ AFTER lift_noro:
25C        CALL aaam_bud (27,klon,klev,rjourvrai,gmtime,
26C    C               ra,rg,romega,
27C    C               rlat,rlon,pphis,
28C    C               zustrdr,zustrli,zustrph,
29C    C               zvstrdr,zvstrli,zvstrph,
30C    C               paprs,u,v)
31C
32C======================================================================
33c Explicit Arguments:
34c ==================
35c iam-----input-I-File number where AAMs and torques are written
36c                 It is a formatted file that has been opened
37c                 in physiq.F
38c nlon----input-I-Total number of horizontal points that get into physics
39c nlev----input-I-Number of vertical levels
40c rjour---input-R-Jour compte depuis le debut de la simu (run.def)
41c rsec----input-R-Seconde de la journee
42c rea-----input-R-Earth radius
43c rg------input-R-gravity constant
44c ome-----input-R-Earth rotation rate
45c plat ---input-R-Latitude en degres
46c plon ---input-R-Longitude en degres
47c phis ---input-R-Geopotential at the ground
48c dragu---input-R-orodrag stress (zonal)
49c liftu---input-R-orolift stress (zonal)
50c phyu----input-R-Stress total de la physique (zonal)
51c dragv---input-R-orodrag stress (Meridional)
52c liftv---input-R-orolift stress (Meridional)
53c phyv----input-R-Stress total de la physique (Meridional)
54c p-------input-R-Pressure (Pa) at model half levels
55c u-------input-R-Horizontal wind (m/s)
56c v-------input-R-Meridional wind (m/s)
57c aam-----output-R-Axial Wind AAM (=raam(3))
58c torsfc--output-R-Total surface torque (=tmou(3)+tsso(3)+tbls(3))
59c
60c Implicit Arguments:
61c ===================
62c
63c iim--common-I: Number of longitude intervals
64c jjm--common-I: Number of latitude intervals
65c klon-common-I: Number of points seen by the physics
66c                iim*(jjm-1)+2 for instance
67c klev-common-I: Number of vertical layers
68c======================================================================
69c Local Variables:
70c ================
71c dlat-----R: Latitude increment (Radians)
72c dlon-----R: Longitude increment (Radians)
73c raam  ---R: Wind AAM (3 Components, 1 & 2 Equatoriales; 3 Axiale)
74c oaam  ---R: Mass AAM (3 Components, 1 & 2 Equatoriales; 3 Axiale)
75c tmou-----R: Resolved Mountain torque (3 components)
76c tsso-----R: Parameterised Moutain drag torque (3 components)
77c tbls-----R: Parameterised Boundary layer torque (3 components)
78c
79c LOCAL ARRAY:
80c ===========
81c zs    ---R: Topographic height
82c ps    ---R: Surface Pressure 
83c ub    ---R: Barotropic wind zonal
84c vb    ---R: Barotropic wind meridional
85c zlat  ---R: Latitude in radians
86c zlon  ---R: Longitude in radians
87c======================================================================
88
89#include "dimensions.h"
90#include "dimphy.h"
91c
92c ARGUMENTS
93c
94      INTEGER iam,nlon,nlev
95      REAL rjour,rsec,rea,rg,ome
96      REAL plat(nlon),plon(nlon),phis(nlon)
97      REAL dragu(nlon),liftu(nlon),phyu(nlon)             
98      REAL dragv(nlon),liftv(nlon),phyv(nlon)             
99      REAL p(nlon,nlev+1), u(nlon,nlev), v(nlon,nlev)
100c
101c Variables locales:
102c
103      INTEGER i,j,k,l
104      REAL xpi,hadley,hadday
105      REAL dlat,dlon
106      REAL raam(3),oaam(3),tmou(3),tsso(3),tbls(3)
107      integer iax
108cIM ajout aam, torsfc
109c aam = composante axiale du Wind AAM raam
110c torsfc = composante axiale de (tmou+tsso+tbls)
111      REAL aam, torsfc
112
113      REAL ZS(801,401),PS(801,401)
114      REAL UB(801,401),VB(801,401)
115      REAL SSOU(801,401),SSOV(801,401)
116      REAL BLSU(801,401),BLSV(801,401)
117      REAL ZLON(801),ZLAT(401)
118C
119C  PUT AAM QUANTITIES AT ZERO:
120C
121      if(iim+1.gt.801.or.jjm+1.gt.401)then
122      print *,' Pb de dimension dans aaam_bud'
123      stop
124      endif
125
126      xpi=acos(-1.)
127      hadley=1.e18
128      hadday=1.e18*24.*3600.
129      dlat=xpi/float(jjm)
130      dlon=2.*xpi/float(iim)
131     
132      do iax=1,3
133      oaam(iax)=0.
134      raam(iax)=0.
135      tmou(iax)=0.
136      tsso(iax)=0.
137      tbls(iax)=0.
138      enddo
139
140C MOUNTAIN HEIGHT, PRESSURE AND BAROTROPIC WIND:
141
142C North pole values (j=1):
143 
144      l=1
145
146        ub(1,1)=0.
147        vb(1,1)=0.
148        do k=1,nlev
149          ub(1,1)=ub(1,1)+u(l,k)*(p(l,k)-p(l,k+1))/rg
150          vb(1,1)=vb(1,1)+v(l,k)*(p(l,k)-p(l,k+1))/rg
151        enddo
152
153          zlat(1)=plat(l)*xpi/180.
154
155        do i=1,iim+1
156
157          zs(i,1)=phis(l)/rg
158          ps(i,1)=p(l,1)
159          ub(i,1)=ub(1,1)                             
160          vb(i,1)=vb(1,1)                             
161          ssou(i,1)=dragu(l)+liftu(l)
162          ssov(i,1)=dragv(l)+liftv(l)
163          blsu(i,1)=phyu(l)-dragu(l)-liftu(l)
164          blsv(i,1)=phyv(l)-dragv(l)-liftv(l)
165
166        enddo
167
168
169      do j = 2,jjm
170
171C Values at Greenwich (Periodicity)
172
173      zs(iim+1,j)=phis(l+1)/rg
174      ps(iim+1,j)=p(l+1,1)
175          ssou(iim+1,j)=dragu(l+1)+liftu(l+1)
176          ssov(iim+1,j)=dragv(l+1)+liftv(l+1)
177          blsu(iim+1,j)=phyu(l+1)-dragu(l+1)-liftu(l+1)
178          blsv(iim+1,j)=phyv(l+1)-dragv(l+1)-liftv(l+1)
179      zlon(iim+1)=-plon(l+1)*xpi/180.
180      zlat(j)=plat(l+1)*xpi/180.
181
182      ub(iim+1,j)=0.
183      vb(iim+1,j)=0.
184         do k=1,nlev
185         ub(iim+1,j)=ub(iim+1,j)+u(l+1,k)*(p(l+1,k)-p(l+1,k+1))/rg
186         vb(iim+1,j)=vb(iim+1,j)+v(l+1,k)*(p(l+1,k)-p(l+1,k+1))/rg
187         enddo
188     
189
190      do i=1,iim
191
192      l=l+1
193      zs(i,j)=phis(l)/rg
194      ps(i,j)=p(l,1)
195          ssou(i,j)=dragu(l)+liftu(l)
196          ssov(i,j)=dragv(l)+liftv(l)
197          blsu(i,j)=phyu(l)-dragu(l)-liftu(l)
198          blsv(i,j)=phyv(l)-dragv(l)-liftv(l)
199      zlon(i)=plon(l)*xpi/180.
200
201      ub(i,j)=0.
202      vb(i,j)=0.
203         do k=1,nlev
204         ub(i,j)=ub(i,j)+u(l,k)*(p(l,k)-p(l,k+1))/rg
205         vb(i,j)=vb(i,j)+v(l,k)*(p(l,k)-p(l,k+1))/rg
206         enddo
207
208      enddo
209
210      enddo
211
212
213C South Pole
214
215      if (jjm.GT.1) then
216      l=l+1
217      ub(1,jjm+1)=0.
218      vb(1,jjm+1)=0.
219      do k=1,nlev
220         ub(1,jjm+1)=ub(1,jjm+1)+u(l,k)*(p(l,k)-p(l,k+1))/rg
221         vb(1,jjm+1)=vb(1,jjm+1)+v(l,k)*(p(l,k)-p(l,k+1))/rg
222      enddo
223      zlat(jjm+1)=plat(l)*xpi/180.
224
225      do i=1,iim+1
226      zs(i,jjm+1)=phis(l)/rg
227      ps(i,jjm+1)=p(l,1)
228          ssou(i,jjm+1)=dragu(l)+liftu(l)
229          ssov(i,jjm+1)=dragv(l)+liftv(l)
230          blsu(i,jjm+1)=phyu(l)-dragu(l)-liftu(l)
231          blsv(i,jjm+1)=phyv(l)-dragv(l)-liftv(l)
232      ub(i,jjm+1)=ub(1,jjm+1)                               
233      vb(i,jjm+1)=vb(1,jjm+1)                               
234      enddo
235      endif
236
237C
238C  MOMENT ANGULAIRE
239C
240        DO j=1,jjm   
241        DO i=1,iim
242
243           raam(1)=raam(1)-rea**3*dlon*dlat*0.5*
244     c    (cos(zlon(i  ))*sin(zlat(j  ))*cos(zlat(j  ))*ub(i  ,j  )
245     c    +cos(zlon(i  ))*sin(zlat(j+1))*cos(zlat(j+1))*ub(i  ,j+1))
246     c                    +rea**3*dlon*dlat*0.5*
247     c    (sin(zlon(i  ))*cos(zlat(j  ))*vb(i  ,j  )
248     c    +sin(zlon(i  ))*cos(zlat(j+1))*vb(i  ,j+1))
249
250           oaam(1)=oaam(1)-ome*rea**4*dlon*dlat/rg*0.5*
251     c   (cos(zlon(i  ))*cos(zlat(j  ))**2*sin(zlat(j  ))*ps(i  ,j  )
252     c   +cos(zlon(i  ))*cos(zlat(j+1))**2*sin(zlat(j+1))*ps(i  ,j+1))
253
254           raam(2)=raam(2)-rea**3*dlon*dlat*0.5*
255     c    (sin(zlon(i  ))*sin(zlat(j  ))*cos(zlat(j  ))*ub(i  ,j  )
256     c    +sin(zlon(i  ))*sin(zlat(j+1))*cos(zlat(j+1))*ub(i  ,j+1))
257     c                    -rea**3*dlon*dlat*0.5*
258     c    (cos(zlon(i  ))*cos(zlat(j  ))*vb(i  ,j  )
259     c    +cos(zlon(i  ))*cos(zlat(j+1))*vb(i  ,j+1))
260
261           oaam(2)=oaam(2)-ome*rea**4*dlon*dlat/rg*0.5*
262     c   (sin(zlon(i  ))*cos(zlat(j  ))**2*sin(zlat(j  ))*ps(i  ,j  )
263     c   +sin(zlon(i  ))*cos(zlat(j+1))**2*sin(zlat(j+1))*ps(i  ,j+1))
264
265           raam(3)=raam(3)+rea**3*dlon*dlat*0.5*
266     c           (cos(zlat(j))**2*ub(i,j)+cos(zlat(j+1))**2*ub(i,j+1))
267
268           oaam(3)=oaam(3)+ome*rea**4*dlon*dlat/rg*0.5*
269     c        (cos(zlat(j))**3*ps(i,j)+cos(zlat(j+1))**3*ps(i,j+1))
270
271        ENDDO
272        ENDDO
273
274C
275C COUPLE DES MONTAGNES:
276C
277
278        DO j=1,jjm
279        DO i=1,iim
280           tmou(1)=tmou(1)-rea**2*dlon*0.5*sin(zlon(i))
281     c  *(zs(i,j)-zs(i,j+1))
282     c  *(cos(zlat(j+1))*ps(i,j+1)+cos(zlat(j))*ps(i,j))
283           tmou(2)=tmou(2)+rea**2*dlon*0.5*cos(zlon(i))
284     c  *(zs(i,j)-zs(i,j+1))
285     c  *(cos(zlat(j+1))*ps(i,j+1)+cos(zlat(j))*ps(i,j))
286        ENDDO
287        ENDDO
288           
289        DO j=2,jjm
290        DO i=1,iim
291           tmou(1)=tmou(1)+rea**2*dlat*0.5*sin(zlat(j))
292     c  *(zs(i+1,j)-zs(i,j))
293     c  *(cos(zlon(i+1))*ps(i+1,j)+cos(zlon(i))*ps(i,j))
294           tmou(2)=tmou(2)+rea**2*dlat*0.5*sin(zlat(j))
295     c  *(zs(i+1,j)-zs(i,j))
296     c  *(sin(zlon(i+1))*ps(i+1,j)+sin(zlon(i))*ps(i,j))
297           tmou(3)=tmou(3)-rea**2*dlat*0.5*
298     c  cos(zlat(j))*(zs(i+1,j)-zs(i,j))*(ps(i+1,j)+ps(i,j))
299        ENDDO
300        ENDDO
301
302C
303C COUPLES DES DIFFERENTES FRICTION AU SOL:
304C
305        l=1
306        DO j=2,jjm
307        DO i=1,iim
308        l=l+1
309           tsso(1)=tsso(1)-rea**3*cos(zlat(j))*dlon*dlat*
310     c     ssou(i,j)          *sin(zlat(j))*cos(zlon(i))
311     c                    +rea**3*cos(zlat(j))*dlon*dlat*
312     c     ssov(i,j)          *sin(zlon(i))
313
314           tsso(2)=tsso(2)-rea**3*cos(zlat(j))*dlon*dlat*
315     c     ssou(i,j)          *sin(zlat(j))*sin(zlon(i))
316     c                    -rea**3*cos(zlat(j))*dlon*dlat*
317     c     ssov(i,j)          *cos(zlon(i))
318
319           tsso(3)=tsso(3)+rea**3*cos(zlat(j))*dlon*dlat*
320     c     ssou(i,j)          *cos(zlat(j))
321
322           tbls(1)=tbls(1)-rea**3*cos(zlat(j))*dlon*dlat*
323     c     blsu(i,j)          *sin(zlat(j))*cos(zlon(i))
324     c                    +rea**3*cos(zlat(j))*dlon*dlat*
325     c     blsv(i,j)          *sin(zlon(i))
326
327           tbls(2)=tbls(2)-rea**3*cos(zlat(j))*dlon*dlat*
328     c     blsu(i,j)          *sin(zlat(j))*sin(zlon(i))
329     c                    -rea**3*cos(zlat(j))*dlon*dlat*
330     c     blsv(i,j)          *cos(zlon(i))
331
332           tbls(3)=tbls(3)+rea**3*cos(zlat(j))*dlon*dlat*
333     c     blsu(i,j)          *cos(zlat(j))
334
335        ENDDO
336        ENDDO
337           
338
339c     write(*,*) 'AAM',rsec,
340c     write(*,*) 'AAM',rjour+rsec/86400.,
341c    c      raam(3)/hadday,oaam(3)/hadday,
342c    c      tmou(3)/hadley,tsso(3)/hadley,tbls(3)/hadley
343
344c     write(iam,100)rjour+rsec/86400.,
345c    c      raam(1)/hadday,oaam(1)/hadday,
346c    c      tmou(1)/hadley,tsso(1)/hadley,tbls(1)/hadley,
347c    c      raam(2)/hadday,oaam(2)/hadday,
348c    c      tmou(2)/hadley,tsso(2)/hadley,tbls(2)/hadley,
349c    c      raam(3)/hadday,oaam(3)/hadday,
350c    c      tmou(3)/hadley,tsso(3)/hadley,tbls(3)/hadley
351100   format(F12.5,15(1x,F12.5))
352
353c     write(iam+1,*)((zs(i,j),i=1,iim),j=1,jjm+1)
354c     write(iam+1,*)((ps(i,j),i=1,iim),j=1,jjm+1)
355c     write(iam+1,*)((ub(i,j),i=1,iim),j=1,jjm+1)
356c     write(iam+1,*)((vb(i,j),i=1,iim),j=1,jjm+1)
357c     write(iam+1,*)((ssou(i,j),i=1,iim),j=1,jjm+1)
358c     write(iam+1,*)((ssov(i,j),i=1,iim),j=1,jjm+1)
359c     write(iam+1,*)((blsu(i,j),i=1,iim),j=1,jjm+1)
360c     write(iam+1,*)((blsv(i,j),i=1,iim),j=1,jjm+1)
361c
362      aam=raam(3)
363      torsfc= tmou(3)+tsso(3)+tbls(3)
364c
365      RETURN
366      END
Note: See TracBrowser for help on using the repository browser.