source: trunk/LMDZ.COMMON/libf/dyn3d/groupe.F @ 1436

Last change on this file since 1436 was 1422, checked in by milmd, 10 years ago

In GENERIC, MARS and COMMON models replace some include files by modules (usefull for decoupling physics with dynamics).

File size: 2.4 KB
Line 
1!
2! $Header$
3!
4      subroutine groupe(pext,pbaru,pbarv,pbarum,pbarvm,wm)
5      implicit none
6
7c   sous-programme servant a fitlrer les champs de flux de masse aux
8c   poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur
9c   et a mesure qu'on se rapproche du pole.
10c
11c   en entree: pext, pbaru et pbarv
12c
13c   en sortie:  pbarum,pbarvm et wm.
14c
15c   remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc
16c   pas besoin de w en entree.
17
18#include "dimensions.h"
19#include "paramet.h"
20#include "comgeom2.h"
21
22      integer ngroup
23      parameter (ngroup=3)
24
25
26      real pbaru(iip1,jjp1,llm),pbarv(iip1,jjm,llm)
27      real pext(iip1,jjp1,llm)
28
29      real pbarum(iip1,jjp1,llm),pbarvm(iip1,jjm,llm)
30      real wm(iip1,jjp1,llm)
31
32      real zconvm(iip1,jjp1,llm),zconvmm(iip1,jjp1,llm)
33
34      real uu
35
36      integer i,j,l
37
38      logical firstcall,groupe_ok
39      save firstcall,groupe_ok
40
41      data firstcall/.true./
42      data groupe_ok/.true./
43
44      if (iim==1) then
45         groupe_ok=.false.
46      endif
47
48      if (firstcall) then
49         if (groupe_ok) then
50           if(mod(iim,2**ngroup).ne.0) stop'probleme du nombre de point'
51         endif
52         firstcall=.false.
53      endif
54
55
56c   Champs 1D
57
58      call convflu(pbaru,pbarv,llm,zconvm)
59
60      call scopy(ijp1llm,zconvm,1,zconvmm,1)
61      call scopy(ijmllm,pbarv,1,pbarvm,1)
62
63      if (groupe_ok) then
64      call groupeun(jjp1,llm,zconvmm)
65      call groupeun(jjm,llm,pbarvm)
66
67c   Champs 3D
68      do l=1,llm
69         do j=2,jjm
70            uu=pbaru(iim,j,l)
71            do i=1,iim
72               uu=uu+pbarvm(i,j,l)-pbarvm(i,j-1,l)-zconvmm(i,j,l)
73               pbarum(i,j,l)=uu
74c     zconvm(i,j,l ) =  xflu(i-1,j,l)-xflu(i,j,l)+
75c    *                      yflu(i,j,l)-yflu(i,j-1,l)
76            enddo
77            pbarum(iip1,j,l)=pbarum(1,j,l)
78         enddo
79      enddo
80
81      else
82         pbarum(:,:,:)=pbaru(:,:,:)
83         pbarvm(:,:,:)=pbarv(:,:,:)
84      endif
85
86c    integration de la convergence de masse de haut  en bas ......
87      do l=1,llm
88         do j=1,jjp1
89            do i=1,iip1
90               zconvmm(i,j,l)=zconvmm(i,j,l)
91            enddo
92         enddo
93      enddo
94      do  l = llm-1,1,-1
95          do j=1,jjp1
96             do i=1,iip1
97                zconvmm(i,j,l)=zconvmm(i,j,l)+zconvmm(i,j,l+1)
98             enddo
99          enddo
100      enddo
101
102      CALL vitvert(zconvmm,wm)
103
104      return
105      end
106
Note: See TracBrowser for help on using the repository browser.