/[lmdze]/trunk/dyn3d/groupe.f
ViewVC logotype

Diff of /trunk/dyn3d/groupe.f

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/libf/dyn3d/groupe.f revision 3 by guez, Wed Feb 27 13:16:39 2008 UTC trunk/libf/dyn3d/groupe.f90 revision 31 by guez, Thu Apr 1 14:59:19 2010 UTC
# Line 1  Line 1 
1  !  SUBROUTINE groupe(pext, pbaru, pbarv, pbarum, pbarvm, wm)
 ! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/groupe.F,v 1.1.1.1 2004/05/19 12:53:06 lmdzadmin Exp $  
 !  
       subroutine groupe(pext,pbaru,pbarv,pbarum,pbarvm,wm)  
       use dimens_m  
       use paramet_m  
       use comconst  
       use comvert  
       use comgeom  
       implicit none  
   
 c   sous-programme servant a fitlrer les champs de flux de masse aux  
 c   poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur  
 c   et a mesure qu'on se rapproche du pole.  
 c  
 c   en entree: pext, pbaru et pbarv  
 c  
 c   en sortie:  pbarum,pbarvm et wm.  
 c  
 c   remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc  
 c   pas besoin de w en entree.  
   
   
       integer ngroup  
       parameter (ngroup=3)  
   
   
       real pbaru(iip1,jjp1,llm),pbarv(iip1,jjm,llm)  
       real pext(iip1,jjp1,llm)  
   
       real pbarum(iip1,jjp1,llm),pbarvm(iip1,jjm,llm)  
       real wm(iip1,jjp1,llm)  
   
       real zconvm(iip1,jjp1,llm),zconvmm(iip1,jjp1,llm)  
   
       real uu  
   
       integer i,j,l  
   
       logical firstcall  
       save firstcall  
   
       data firstcall/.true./  
   
       if (firstcall) then  
          if(mod(iim,2**ngroup).ne.0) stop'probleme du nombre ede point'  
          firstcall=.false.  
       endif  
   
 c   Champs 1D  
   
       call convflu(pbaru,pbarv,llm,zconvm)  
   
 c  
       call scopy(ijp1llm,zconvm,1,zconvmm,1)  
       call scopy(ijmllm,pbarv,1,pbarvm,1)  
   
 c  
       call groupeun(jjp1,llm,zconvmm)  
       call groupeun(jjm,llm,pbarvm)  
   
 c   Champs 3D  
   
       do l=1,llm  
          do j=2,jjm  
             uu=pbaru(iim,j,l)  
             do i=1,iim  
                uu=uu+pbarvm(i,j,l)-pbarvm(i,j-1,l)-zconvmm(i,j,l)  
                pbarum(i,j,l)=uu  
 c     zconvm(i,j,l ) =  xflu(i-1,j,l)-xflu(i,j,l)+  
 c    *                      yflu(i,j,l)-yflu(i,j-1,l)  
             enddo  
             pbarum(iip1,j,l)=pbarum(1,j,l)  
          enddo  
       enddo  
   
 c    integration de la convergence de masse de haut  en bas ......  
       do l=1,llm  
          do j=1,jjp1  
             do i=1,iip1  
                zconvmm(i,j,l)=zconvmm(i,j,l)  
             enddo  
          enddo  
       enddo  
       do  l = llm-1,1,-1  
           do j=1,jjp1  
              do i=1,iip1  
                 zconvmm(i,j,l)=zconvmm(i,j,l)+zconvmm(i,j,l+1)  
              enddo  
           enddo  
       enddo  
2    
3        CALL vitvert(zconvmm,wm)    ! From dyn3d/groupe.F, v 1.1.1.1 2004/05/19 12:53:06
4    
5        return    ! sous-programme servant a fitlrer les champs de flux de masse aux    
6        end    ! poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur  
7      ! et a mesure qu'on se rapproche du pole.                            
8    
9      ! en entree: pext, pbaru et pbarv                                    
10      ! en sortie:  pbarum, pbarvm et wm.                                    
11    
12      ! remarque, le wm est recalcule a partir des pbaru pbarv et on n'a    
13      ! donc pas besoin de w en entree.
14    
15      USE dimens_m
16      USE paramet_m
17      USE comconst
18      USE comvert
19      USE comgeom
20    
21      IMPLICIT NONE
22    
23      INTEGER, PARAMETER:: ngroup = 3
24    
25      REAL pbaru(iip1, jjp1, llm), pbarv(iip1, jjm, llm)
26      REAL pext(iip1, jjp1, llm)
27    
28      REAL, intent(out):: pbarum(iip1, jjp1, llm)
29      real pbarvm(iip1, jjm, llm)
30      REAL wm(iip1, jjp1, llm)
31    
32      REAL zconvm(iip1, jjp1, llm), zconvmm(iip1, jjp1, llm)
33      REAL uu
34      INTEGER i, j, l
35      LOGICAL:: firstcall = .TRUE.
36    
37      !------------------------------------------------------
38    
39      IF (firstcall) THEN
40         IF (mod(iim, 2**ngroup) /= 0) then
41            print *, 'groupe: bad iim'
42            STOP 1
43         end IF
44         firstcall = .FALSE.
45      END IF
46    
47      ! Champs 1D                                                          
48    
49      CALL convflu(pbaru, pbarv, llm, zconvm)
50    
51      CALL scopy(ijp1llm, zconvm, 1, zconvmm, 1)
52      CALL scopy(ijmllm, pbarv, 1, pbarvm, 1)
53    
54      CALL groupeun(jjp1, llm, zconvmm)
55      CALL groupeun(jjm, llm, pbarvm)
56    
57      ! Champs 3D                                                          
58    
59      DO l = 1, llm
60         DO j = 2, jjm
61            uu = pbaru(iim, j, l)
62            DO i = 1, iim
63               uu = uu + pbarvm(i, j, l) - pbarvm(i, j-1, l) - zconvmm(i, j, l)
64               pbarum(i, j, l) = uu
65            END DO
66            pbarum(iip1, j, l) = pbarum(1, j, l)
67         END DO
68      END DO
69      pbarum(:, 1, :) = 0
70      pbarum(:, jjm + 1, :) = 0
71    
72      ! integration de la convergence de masse de haut  en bas
73      DO l = 1, llm
74         DO j = 1, jjp1
75            DO i = 1, iip1
76               zconvmm(i, j, l) = zconvmm(i, j, l)
77            END DO
78         END DO
79      END DO
80      DO l = llm - 1, 1, -1
81         DO j = 1, jjp1
82            DO i = 1, iip1
83               zconvmm(i, j, l) = zconvmm(i, j, l) + zconvmm(i, j, l+1)
84            END DO
85         END DO
86      END DO
87    
88      CALL vitvert(zconvmm, wm)
89    
90    END SUBROUTINE groupe

Legend:
Removed from v.3  
changed lines
  Added in v.31

  ViewVC Help
Powered by ViewVC 1.1.21