source: LMDZ4/trunk/libf/dyn3dpar/calfis_p.F @ 663

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

Import d'une version parallele de la dynamique YM
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 18.7 KB
Line 
1!
2! $Header$
3!
4C
5C
6      SUBROUTINE calfis_p(nq,
7     $                  lafin,
8     $                  rdayvrai,
9     $                  heure,
10     $                  pucov,
11     $                  pvcov,
12     $                  pteta,
13     $                  pq,
14     $                  pmasse,
15     $                  pps,
16     $                  pp,
17     $                  ppk,
18     $                  pphis,
19     $                  pphi,
20     $                  pducov,
21     $                  pdvcov,
22     $                  pdteta,
23     $                  pdq,
24     $                  pw,
25#ifdef INCA_CH4
26     $                  flxw,
27#endif
28     $                  clesphy0,
29     $                  pdufi,
30     $                  pdvfi,
31     $                  pdhfi,
32     $                  pdqfi,
33     $                  pdpsfi)
34c
35c    Auteur :  P. Le Van, F. Hourdin
36c   .........
37      USE dimphy
38      USE parallel
39      USE Write_Field
40      Use Write_field_p
41      USE Times
42      IMPLICIT NONE
43c=======================================================================
44c
45c   1. rearrangement des tableaux et transformation
46c      variables dynamiques  >  variables physiques
47c   2. calcul des termes physiques
48c   3. retransformation des tendances physiques en tendances dynamiques
49c
50c   remarques:
51c   ----------
52c
53c    - les vents sont donnes dans la physique par leurs composantes
54c      naturelles.
55c    - la variable thermodynamique de la physique est une variable
56c      intensive :   T
57c      pour la dynamique on prend    T * ( preff / p(l) ) **kappa
58c    - les deux seules variables dependant de la geometrie necessaires
59c      pour la physique sont la latitude pour le rayonnement et
60c      l'aire de la maille quand on veut integrer une grandeur
61c      horizontalement.
62c    - les points de la physique sont les points scalaires de la
63c      la dynamique; numerotation:
64c          1 pour le pole nord
65c          (jjm-1)*iim pour l'interieur du domaine
66c          ngridmx pour le pole sud
67c      ---> ngridmx=2+(jjm-1)*iim
68c
69c     Input :
70c     -------
71c       ecritphy        frequence d'ecriture (en jours)de histphy
72c       pucov           covariant zonal velocity
73c       pvcov           covariant meridional velocity
74c       pteta           potential temperature
75c       pps             surface pressure
76c       pmasse          masse d'air dans chaque maille
77c       pts             surface temperature  (K)
78c       callrad         clef d'appel au rayonnement
79c
80c    Output :
81c    --------
82c        pdufi          tendency for the natural zonal velocity (ms-1)
83c        pdvfi          tendency for the natural meridional velocity
84c        pdhfi          tendency for the potential temperature
85c        pdtsfi         tendency for the surface temperature
86c
87c        pdtrad         radiative tendencies  \  both input
88c        pfluxrad       radiative fluxes      /  and output
89c
90c=======================================================================
91c
92c-----------------------------------------------------------------------
93c
94c    0.  Declarations :
95c    ------------------
96
97#include "dimensions.h"
98#include "paramet.h"
99#include "temps.h"
100#include "advtrac.h"
101
102      INTEGER ngridmx,nq
103      PARAMETER( ngridmx = 2+(jjm-1)*iim - 1/jjm   )
104
105#include "comconst.h"
106#include "comvert.h"
107#include "comgeom2.h"
108#include "control.h"
109      include 'mpif.h'
110
111c    Arguments :
112c    -----------
113      LOGICAL  lafin
114      REAL heure
115
116      REAL pvcov(iip1,jjm,llm)
117      REAL pucov(iip1,jjp1,llm)
118      REAL pteta(iip1,jjp1,llm)
119      REAL pmasse(iip1,jjp1,llm)
120      REAL pq(iip1,jjp1,llm,nqmx)
121      REAL pphis(iip1,jjp1)
122      REAL pphi(iip1,jjp1,llm)
123c
124      REAL pdvcov(iip1,jjm,llm)
125      REAL pducov(iip1,jjp1,llm)
126      REAL pdteta(iip1,jjp1,llm)
127      REAL pdq(iip1,jjp1,llm,nqmx)
128c
129      REAL pw(iip1,jjp1,llm)
130
131      REAL pps(iip1,jjp1)
132      REAL pp(iip1,jjp1,llmp1)
133      REAL ppk(iip1,jjp1,llm)
134c
135      REAL pdvfi(iip1,jjm,llm)
136      REAL pdufi(iip1,jjp1,llm)
137      REAL pdhfi(iip1,jjp1,llm)
138      REAL pdqfi(iip1,jjp1,llm,nqmx)
139      REAL pdpsfi(iip1,jjp1)
140
141      INTEGER        longcles
142      PARAMETER    ( longcles = 20 )
143      REAL clesphy0( longcles )
144
145
146c    Local variables :
147c    -----------------
148
149      INTEGER i,j,l,ig0,ig,iq,iiq
150      REAL zpsrf(klon)
151      REAL zplev(klon,llm+1),zplay(klon,llm)
152      REAL zphi(klon,llm),zphis(klon)
153c
154      REAL zufi(klon,llm), zvfi(klon,llm)
155      REAL ztfi(klon,llm),zqfi(klon,llm,nqmx)
156c
157      REAL pcvgu(klon,llm), pcvgv(klon,llm)
158      REAL pcvgt(klon,llm), pcvgq(klon,llm,2)
159c
160      REAL pvervel(klon,llm)
161c
162      REAL zdufi(klon,llm),zdvfi(klon,llm)
163      REAL zdtfi(klon,llm),zdqfi(klon,llm,nqmx)
164      REAL zdpsrf(klon)
165c
166      REAL zsin(iim),zcos(iim),z1(iim)
167      REAL zsinbis(iim),zcosbis(iim),z1bis(iim)
168      REAL unskap, pksurcp
169
170#ifdef INCA_CH4
171      REAL flxw(iip1,jjp1,llm)
172      REAL flxwfi(klon,llm)
173#endif
174c
175     
176      REAL SSUM
177
178      LOGICAL firstcal, debut
179      DATA firstcal/.true./
180      SAVE firstcal,debut
181      REAL rdayvrai
182     
183      REAL,dimension(1:iim,1:llm) :: du_send,du_recv,dv_send,dv_recv
184      INTEGER :: ierr
185      INTEGER,dimension(MPI_STATUS_SIZE,4) :: Status
186      INTEGER, dimension(4) :: Req
187      REAL zdufi2(klon+iim,llm),zdvfi2(klon+iim,llm)
188      integer :: k,kstart,kend     
189c
190c-----------------------------------------------------------------------
191c
192c    1. Initialisations :
193c    --------------------
194c
195
196      IF (ngridmx.NE.2+(jjm-1)*iim) THEN
197         PRINT*,'STOP dans calfis'
198         PRINT*,'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim'
199         PRINT*,'  ngridmx  jjm   iim   '
200         PRINT*,ngridmx,jjm,iim
201         STOP
202      ENDIF
203
204c-----------------------------------------------------------------------
205c   latitude, longitude et aires des mailles pour la physique:
206c   ----------------------------------------------------------
207
208c
209      IF ( firstcal )  THEN
210          debut = .TRUE.
211      ELSE
212          debut = .FALSE.
213      ENDIF
214
215c
216c
217c-----------------------------------------------------------------------
218c   40. transformation des variables dynamiques en variables physiques:
219c   ---------------------------------------------------------------
220
221c   41. pressions au sol (en Pascals)
222c   ----------------------------------
223
224      call start_timer(timer_physic)
225             
226      do ig0=1,klon
227        i=Liste_i(ig0)
228        j=Liste_j(ig0)
229        zpsrf(ig0)=pps(i,j)
230      enddo
231
232
233
234c   42. pression intercouches :
235c
236c   -----------------------------------------------------------------
237c     .... zplev  definis aux (llm +1) interfaces des couches  ....
238c     .... zplay  definis aux (  llm )    milieux des couches  ....
239c   -----------------------------------------------------------------
240
241c    ...    Exner = cp * ( p(l) / preff ) ** kappa     ....
242c
243       unskap   = 1./ kappa
244c
245      DO l = 1, llmp1
246        do ig0=1,klon
247          i=Liste_i(ig0)
248          j=Liste_j(ig0)
249          zplev( ig0,l ) = pp(i,j,l)
250        enddo
251      ENDDO
252c
253c
254
255c   43. temperature naturelle (en K) et pressions milieux couches .
256c   ---------------------------------------------------------------
257
258      DO l=1,llm
259
260        do ig0=1,klon
261          i=Liste_i(ig0)
262          j=Liste_j(ig0)
263          pksurcp        = ppk(i,j,l) / cpp
264          zplay(ig0,l)   = preff * pksurcp ** unskap
265          ztfi(ig0,l)    = pteta(i,j,l)  * pksurcp
266c          pcvgt(ig0,l)   = pdteta(i,j,l) * pksurcp / pmasse(i,j,l)
267        enddo
268
269      ENDDO
270
271c   43.bis traceurs
272c   ---------------
273c
274
275      DO iq=1,nq
276         iiq=niadv(iq)
277         DO l=1,llm
278           do ig0=1,klon
279             i=Liste_i(ig0)
280             j=Liste_j(ig0)
281             zqfi(ig0,l,iq)  = pq(i,j,l,iiq)
282           enddo
283         ENDDO
284      ENDDO
285
286c   convergence dynamique pour les traceurs "EAU"
287
288      DO iq=1,2
289         DO l=1,llm
290           do ig0=1,klon
291             i=Liste_i(ig0)
292             j=Liste_j(ig0)
293c             pcvgq(ig0,l,iq) = pdq(i,j,l,iq) / pmasse(i,j,l)
294           enddo
295         ENDDO
296      ENDDO
297
298
299
300c   Geopotentiel calcule par rapport a la surface locale:
301c   -----------------------------------------------------
302
303      CALL gr_dyn_fi_p(llm,iip1,jjp1,klon,pphi,zphi)
304      CALL gr_dyn_fi_p(1,iip1,jjp1,klon,pphis,zphis)
305
306      DO l=1,llm
307         DO ig=1,klon
308           zphi(ig,l)=zphi(ig,l)-zphis(ig)
309         ENDDO
310      ENDDO
311     
312c   ....  Calcul de la vitesse  verticale  ( en Pa*m*s  ou Kg/s )  ....
313c
314       
315      DO l=1,llm
316        do ig0=1,klon
317           i=Liste_i(ig0)
318           j=Liste_j(ig0)
319           pvervel(ig0,l) = pw(i,j,l)*g* unsaire(i,j)
320        enddo
321        if (pole_nord) pvervel(1,l)=pw(1,1,l)*g /apoln
322        if (pole_sud) pvervel(klon,l)=pw(1,jjp1,l)*g/apols
323      ENDDO
324
325
326c
327c   45. champ u:
328c   ------------
329
330      kstart=1
331      kend=klon
332     
333      if (pole_nord) kstart=2
334      if (pole_sud) kend=klon-1
335     
336      DO l=1,llm
337        do ig0=kstart,kend
338          i=Liste_i(ig0)
339          j=Liste_j(ig0)
340          if (i==1) then
341            zufi(ig0,l)= 0.5 *(  pucov(iim,j,l)/cu(iim,j)
342     $                         + pucov(1,j,l)/cu(1,j) )
343c            pcvgu(ig0,l)= 0.5*(  pducov(iim,j,l)/cu(iim,j)
344c     $                         + pducov(1,j,l)/cu(1,j) )
345          else
346            zufi(ig0,l)= 0.5*(  pucov(i-1,j,l)/cu(i-1,j)
347     $                       + pucov(i,j,l)/cu(i,j) )
348c            pcvgu(ig0,l)= 0.5*(  pducov(i-1,j,l)/cu(i-1,j)
349c     $                        + pducov(i,j,l)/cu(i,j) )
350          endif
351        enddo
352      ENDDO
353
354c   46.champ v:
355c   -----------
356
357      DO l=1,llm
358        DO ig0=kstart,kend
359          i=Liste_i(ig0)
360          j=Liste_j(ig0)
361          zvfi(ig0,l)= 0.5 *(  pvcov(i,j-1,l)/cv(i,j-1)
362     $                       + pvcov(i,j,l)/cv(i,j) )
363   
364c          pcvgv(ig0+i,l)= 0.5 * (  pdvcov(i,j-1,l)/cv(i,j-1)
365c     $                           + pdvcov(i,j,l)/cv(i,j) )
366         ENDDO
367      ENDDO
368
369
370c   47. champs de vents aux pole nord   
371c   ------------------------------
372c        U = 1 / pi  *  integrale [ v * cos(long) * d long ]
373c        V = 1 / pi  *  integrale [ v * sin(long) * d long ]
374
375      if (pole_nord) then
376     
377        DO l=1,llm
378
379           z1(1)   =(rlonu(1)-rlonu(iim)+2.*pi)*pvcov(1,1,l)/cv(1,1)
380c           z1bis(1)=(rlonu(1)-rlonu(iim)+2.*pi)*pdvcov(1,1,l)/cv(1,1)
381           DO i=2,iim
382              z1(i)   =(rlonu(i)-rlonu(i-1))*pvcov(i,1,l)/cv(i,1)
383c              z1bis(i)=(rlonu(i)-rlonu(i-1))*pdvcov(i,1,l)/cv(i,1)
384           ENDDO
385 
386           DO i=1,iim
387              zcos(i)   = COS(rlonv(i))*z1(i)
388c              zcosbis(i)= COS(rlonv(i))*z1bis(i)
389              zsin(i)   = SIN(rlonv(i))*z1(i)
390c              zsinbis(i)= SIN(rlonv(i))*z1bis(i)
391           ENDDO
392 
393           zufi(1,l)  = SSUM(iim,zcos,1)/pi
394c           pcvgu(1,l) = SSUM(iim,zcosbis,1)/pi
395           zvfi(1,l)  = SSUM(iim,zsin,1)/pi
396c           pcvgv(1,l) = SSUM(iim,zsinbis,1)/pi
397 
398        ENDDO
399     
400      endif
401
402
403c   48. champs de vents aux pole sud:
404c   ---------------------------------
405c        U = 1 / pi  *  integrale [ v * cos(long) * d long ]
406c        V = 1 / pi  *  integrale [ v * sin(long) * d long ]
407
408      if (pole_sud) then
409     
410        DO l=1,llm
411 
412         z1(1)   =(rlonu(1)-rlonu(iim)+2.*pi)*pvcov(1,jjm,l)/cv(1,jjm)
413c         z1bis(1)=(rlonu(1)-rlonu(iim)+2.*pi)*pdvcov(1,jjm,l)/cv(1,jjm)
414           DO i=2,iim
415           z1(i)   =(rlonu(i)-rlonu(i-1))*pvcov(i,jjm,l)/cv(i,jjm)
416c           z1bis(i)=(rlonu(i)-rlonu(i-1))*pdvcov(i,jjm,l)/cv(i,jjm)
417           ENDDO
418 
419           DO i=1,iim
420              zcos(i)    = COS(rlonv(i))*z1(i)
421c              zcosbis(i) = COS(rlonv(i))*z1bis(i)
422              zsin(i)    = SIN(rlonv(i))*z1(i)
423c              zsinbis(i) = SIN(rlonv(i))*z1bis(i)
424           ENDDO
425 
426           zufi(klon,l)  = SSUM(iim,zcos,1)/pi
427c           pcvgu(klon,l) = SSUM(iim,zcosbis,1)/pi
428           zvfi(klon,l)  = SSUM(iim,zsin,1)/pi
429c           pcvgv(klon,l) = SSUM(iim,zsinbis,1)/pi
430
431        ENDDO
432     
433      endif
434
435
436#ifdef INCA_CH4
437      CALL gr_dyn_fi_p(llm,iip1,jjp1,klon,flxw,flxwfi)
438#endif
439
440
441c-----------------------------------------------------------------------
442c   Appel de la physique:
443c   ---------------------
444
445
446      CALL physiq (klon,
447     .             llm,
448     .             nq,
449     .             debut,
450     .             lafin,
451     .             rdayvrai,
452     .             heure,
453     .             dtphys,
454     .             zplev,
455     .             zplay,
456     .             zphi,
457     .             zphis,
458     .             presnivs,
459     .             clesphy0,
460     .             zufi,
461     .             zvfi,
462     .             ztfi,
463     .             zqfi,
464     .             pvervel,
465#ifdef INCA_CH4
466     .             flxwfi,
467#endif
468     .             zdufi,
469     .             zdvfi,
470     .             zdtfi,
471     .             zdqfi,
472     .             zdpsrf)
473
474500   CONTINUE
475
476      call stop_timer(timer_physic)
477     
478      if (MPI_rank>0) then
479     
480        du_send(1:iim,1:llm)=zdufi(1:iim,1:llm)
481        dv_send(1:iim,1:llm)=zdvfi(1:iim,1:llm)
482       
483        call MPI_ISSEND(du_send,iim*llm,MPI_REAL8,MPI_Rank-1,401,
484     &                   MPI_COMM_WORLD,Req(1),ierr)
485        call MPI_ISSEND(dv_send,iim*llm,MPI_REAL8,MPI_Rank-1,402,
486     &                  MPI_COMM_WORLD,Req(2),ierr)
487     
488      endif
489   
490      if (MPI_rank<MPI_Size-1) then
491     
492        call MPI_IRECV(du_recv,iim*llm,MPI_REAL8,MPI_Rank+1,401,
493     &                 MPI_COMM_WORLD,Req(3),ierr)
494        call MPI_IRECV(dv_recv,iim*llm,MPI_REAL8,MPI_Rank+1,402,
495     &                 MPI_COMM_WORLD,Req(4),ierr)
496     
497      endif
498   
499      if (MPI_rank>0 .and. MPI_rank< MPI_Size-1) then
500        call MPI_WAITALL(4,Req(1),Status,ierr)
501      else if (MPI_rank>0) then
502        call MPI_WAITALL(2,Req(1),Status,ierr)
503      else if (MPI_rank <MPI_Size-1) then
504        call MPI_WAITALL(2,Req(3),Status,ierr)
505      endif
506     
507      zdufi2(1:klon,:)=zdufi(1:klon,:)
508      zdufi2(klon+1:klon+iim,:)=du_recv(1:iim,:)
509         
510      zdvfi2(1:klon,:)=zdvfi(1:klon,:)
511      zdvfi2(klon+1:klon+iim,:)=dv_recv(1:iim,:)
512
513       pdhfi(:,jjphy_begin,:)=0
514       pdqfi(:,jjphy_begin,:,:)=0
515       pdufi(:,jjphy_begin,:)=0
516       pdvfi(:,jjphy_begin,:)=0
517       pdpsfi(:,jjphy_begin)=0
518
519       if (.not. pole_sud) then
520         pdhfi(:,jjphy_end,:)=0
521         pdqfi(:,jjphy_end,:,:)=0
522         pdufi(:,jjphy_end,:)=0
523         pdvfi(:,jjphy_end,:)=0
524         pdpsfi(:,jjphy_end)=0
525       endif
526
527c-----------------------------------------------------------------------
528c   transformation des tendances physiques en tendances dynamiques:
529c   ---------------------------------------------------------------
530
531c  tendance sur la pression :
532c  -----------------------------------
533
534      CALL gr_fi_dyn_p(1,klon,iip1,jjp1,zdpsrf,pdpsfi)
535c
536c   62. enthalpie potentielle
537c   ---------------------
538     
539      kstart=1
540      kend=klon
541
542      if (pole_nord) kstart=2
543      if (pole_sud)  kend=klon-1
544
545      DO l=1,llm
546
547!cdir NODEP
548        do ig0=kstart,kend
549          i=Liste_i(ig0)
550          j=Liste_j(ig0)
551          pdhfi(i,j,l) = cpp * zdtfi(ig0,l) / ppk(i,j,l)
552          if (i==1) pdhfi(iip1,j,l) =  cpp * zdtfi(ig0,l) / ppk(i,j,l)
553         enddo         
554
555        if (pole_nord) then
556            DO i=1,iip1
557              pdhfi(i,1,l)    = cpp *  zdtfi(1,l)      / ppk(i, 1  ,l)
558            enddo
559        endif
560       
561        if (pole_sud) then
562            DO i=1,iip1
563              pdhfi(i,jjp1,l) = cpp *  zdtfi(klon,l)/ ppk(i,jjp1,l)
564            ENDDO
565        endif
566      ENDDO
567     
568c   62. humidite specifique
569c   ---------------------
570
571      DO iq=1,nqmx
572         DO l=1,llm
573!cdir NODEP
574           do ig0=kstart,kend
575             i=Liste_i(ig0)
576             j=Liste_j(ig0)
577             pdqfi(i,j,l,iq) = zdqfi(ig0,l,iq)
578             if (i==1) pdqfi(iip1,j,l,iq) = zdqfi(ig0,l,iq)
579           enddo
580           
581           if (pole_nord) then
582             do i=1,iip1
583               pdqfi(i,1,l,iq)    = zdqfi(1,l,iq)             
584             enddo
585           endif
586           
587           if (pole_sud) then
588             do i=1,iip1
589               pdqfi(i,jjp1,l,iq) = zdqfi(klon,l,iq)
590             enddo
591           endif
592           
593         ENDDO
594      ENDDO
595
596c   63. traceurs
597c   ------------
598C     initialisation des tendances
599      pdqfi=0.
600C
601
602      DO iq=1,nq
603         iiq=niadv(iq)
604         DO l=1,llm
605
606!cdir NODEP           
607             DO ig0=kstart,kend
608              i=Liste_i(ig0)
609              j=Liste_j(ig0)
610              pdqfi(i,j,l,iiq) = zdqfi(ig0,l,iq)
611              if (i==1) pdqfi(iip1,j,l,iiq) = zdqfi(ig0,l,iq)
612            ENDDO
613           
614            IF (pole_nord) then
615              DO i=1,iip1
616                pdqfi(i,1,l,iiq)    = zdqfi(1,l,iq)
617              ENDDO
618            ENDIF
619           
620            IF (pole_sud) then
621              DO i=1,iip1
622                pdqfi(i,jjp1,l,iiq) = zdqfi(klon,l,iq)
623              ENDDO
624            ENDIF
625           
626         ENDDO
627      ENDDO
628     
629c   65. champ u:
630c   ------------
631
632      DO l=1,llm
633!cdir NODEP
634         do ig0=kstart,kend
635           i=Liste_i(ig0)
636           j=Liste_j(ig0)
637           
638           if (i/=iim) then
639             pdufi(i,j,l)=0.5*(zdufi2(ig0,l)+zdufi2(ig0+1,l))*cu(i,j)
640           endif
641           
642           if (i==1) then
643              pdufi(iim,j,l)=0.5*(  zdufi2(ig0,l)
644     $                            + zdufi2(ig0+iim-1,l))*cu(iim,j)
645              pdufi(iip1,j,l)=0.5*(zdufi2(ig0,l)+zdufi2(ig0+1,l))*cu(i,j)
646           endif
647         
648         enddo
649         
650         if (Pole_nord) then
651           DO i=1,iip1
652            pdufi(i,1,l)    = 0.
653           ENDDO
654         endif
655         
656         if (Pole_sud) then
657           DO i=1,iip1
658            pdufi(i,jjp1,l) = 0.
659           ENDDO
660         endif
661         
662      ENDDO
663
664
665c   67. champ v:
666c   ------------
667
668      kstart=1
669      kend=klon
670
671      if (pole_nord) kstart=2
672      if (pole_sud)  kend=klon-1-iim
673     
674      DO l=1,llm
675!cdir NODEP
676        do ig0=kstart,kend
677           i=Liste_i(ig0)
678           j=Liste_j(ig0)
679           pdvfi(i,j,l)=0.5*(zdvfi2(ig0,l)+zdvfi2(ig0+iim,l))*cv(i,j)
680           if (i==1) pdvfi(iip1,j,l) = 0.5*(zdvfi2(ig0,l)+
681     $                                      zdvfi2(ig0+iim,l))
682     $                                    *cv(i,j)
683        enddo
684         
685      ENDDO
686
687
688c   68. champ v pres des poles:
689c   ---------------------------
690c      v = U * cos(long) + V * SIN(long)
691
692      if (pole_nord) then
693       
694        DO l=1,llm
695
696          DO i=1,iim
697            pdvfi(i,1,l)=
698     $      zdufi(1,l)*COS(rlonv(i))+zdvfi(1,l)*SIN(rlonv(i))
699       
700            pdvfi(i,1,l)=
701     $      0.5*(pdvfi(i,1,l)+zdvfi(i+1,l))*cv(i,1)
702          ENDDO
703
704          pdvfi(iip1,1,l)  = pdvfi(1,1,l)
705
706        ENDDO
707
708      endif   
709     
710      if (pole_sud) then
711     
712        DO l=1,llm
713 
714           DO i=1,iim
715              pdvfi(i,jjm,l)=zdufi(klon,l)*COS(rlonv(i))
716     $        +zdvfi(klon,l)*SIN(rlonv(i))
717
718              pdvfi(i,jjm,l)=
719     $        0.5*(pdvfi(i,jjm,l)+zdvfi(klon-iip1+i,l))*cv(i,jjm)
720           ENDDO
721
722           pdvfi(iip1,jjm,l)= pdvfi(1,jjm,l)
723
724        ENDDO
725     
726      endif
727c-----------------------------------------------------------------------
728
729700   CONTINUE
730 
731      firstcal = .FALSE.
732
733      RETURN
734      END
Note: See TracBrowser for help on using the repository browser.