/[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/Sources/dyn3d/groupe.f revision 150 by guez, Thu Jun 18 13:49:26 2015 UTC
# Line 1  Line 1 
1  !  SUBROUTINE groupe(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: 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 disvert_m
19      USE comgeom
20      use vitvert_m, only: vitvert
21    
22      IMPLICIT NONE
23    
24      INTEGER, PARAMETER:: ngroup = 3
25    
26      REAL pbaru(iip1, jjp1, llm), pbarv(iip1, jjm, llm)
27      REAL, intent(out):: pbarum(iip1, jjp1, llm)
28      real pbarvm(iip1, jjm, llm)
29      REAL wm(iip1, jjp1, llm)
30    
31      REAL zconvm(iip1, jjp1, llm), zconvmm(iip1, jjp1, llm)
32      REAL uu
33      INTEGER i, j, l
34      LOGICAL:: firstcall = .TRUE.
35    
36      !------------------------------------------------------
37    
38      IF (firstcall) THEN
39         IF (mod(iim, 2**ngroup) /= 0) then
40            print *, 'groupe: bad iim'
41            STOP 1
42         end IF
43         firstcall = .FALSE.
44      END IF
45    
46      ! Champs 1D                                                          
47    
48      CALL convflu(pbaru, pbarv, llm, zconvm)
49    
50      CALL scopy(ijp1llm, zconvm, 1, zconvmm, 1)
51      CALL scopy(ijmllm, pbarv, 1, pbarvm, 1)
52    
53      CALL groupeun(jjp1, llm, zconvmm)
54      CALL groupeun(jjm, llm, pbarvm)
55    
56      ! Champs 3D                                                          
57    
58      DO l = 1, llm
59         DO j = 2, jjm
60            uu = pbaru(iim, j, l)
61            DO i = 1, iim
62               uu = uu + pbarvm(i, j, l) - pbarvm(i, j-1, l) - zconvmm(i, j, l)
63               pbarum(i, j, l) = uu
64            END DO
65            pbarum(iip1, j, l) = pbarum(1, j, l)
66         END DO
67      END DO
68      pbarum(:, 1, :) = 0
69      pbarum(:, jjm + 1, :) = 0
70    
71      ! integration de la convergence de masse de haut  en bas
72      DO l = 1, llm
73         DO j = 1, jjp1
74            DO i = 1, iip1
75               zconvmm(i, j, l) = zconvmm(i, j, l)
76            END DO
77         END DO
78      END DO
79      DO l = llm - 1, 1, -1
80         DO j = 1, jjp1
81            DO i = 1, iip1
82               zconvmm(i, j, l) = zconvmm(i, j, l) + zconvmm(i, j, l+1)
83            END DO
84         END DO
85      END DO
86    
87      CALL vitvert(zconvmm, wm)
88    
89    END SUBROUTINE groupe

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

  ViewVC Help
Powered by ViewVC 1.1.21