/[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/dyn3d/groupe.f revision 265 by guez, Tue Mar 20 09:35:59 2018 UTC
# Line 1  Line 1 
1  !  module groupe_m
 ! $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)    IMPLICIT NONE
4    
5        return  contains
       end  
6    
7      SUBROUTINE groupe(pbaru, pbarv, pbarum, pbarvm, wm)
8    
9        ! From dyn3d/groupe.F, v 1.1.1.1 2004/05/19 12:53:06
10    
11        ! sous-programme servant a fitlrer les champs de flux de masse aux    
12        ! poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur  
13        ! et a mesure qu'on se rapproche du pole.                            
14    
15        ! en entree: pbaru et pbarv                                    
16        ! en sortie:  pbarum, pbarvm et wm.                                    
17    
18        ! remarque, le wm est recalcule a partir des pbaru pbarv et on n'a    
19        ! donc pas besoin de w en entree.
20    
21        USE dimensions
22        USE paramet_m
23        USE comconst
24        USE disvert_m
25        USE comgeom
26        use vitvert_m, only: vitvert
27    
28        INTEGER, PARAMETER:: ngroup = 3
29    
30        REAL pbaru(iip1, jjp1, llm), pbarv(iip1, jjm, llm)
31        REAL, intent(out):: pbarum(iip1, jjp1, llm)
32        real pbarvm(iip1, jjm, llm)
33        REAL wm(iip1, jjp1, llm)
34    
35        REAL zconvm(iip1, jjp1, llm), zconvmm(iip1, jjp1, llm)
36        REAL uu
37        INTEGER i, j, l
38        LOGICAL:: firstcall = .TRUE.
39    
40        !------------------------------------------------------
41    
42        IF (firstcall) THEN
43           IF (mod(iim, 2**ngroup) /= 0) then
44              print *, 'groupe: bad iim'
45              STOP 1
46           end IF
47           firstcall = .FALSE.
48        END IF
49    
50        ! Champs 1D                                                          
51    
52        CALL convflu(pbaru, pbarv, llm, zconvm)
53    
54        CALL scopy(ijp1llm, zconvm, 1, zconvmm, 1)
55        CALL scopy(ijmllm, pbarv, 1, pbarvm, 1)
56    
57        CALL groupeun(jjp1, llm, zconvmm)
58        CALL groupeun(jjm, llm, pbarvm)
59    
60        ! Champs 3D                                                          
61    
62        DO l = 1, llm
63           DO j = 2, jjm
64              uu = pbaru(iim, j, l)
65              DO i = 1, iim
66                 uu = uu + pbarvm(i, j, l) - pbarvm(i, j-1, l) - zconvmm(i, j, l)
67                 pbarum(i, j, l) = uu
68              END DO
69              pbarum(iip1, j, l) = pbarum(1, j, l)
70           END DO
71        END DO
72        pbarum(:, 1, :) = 0
73        pbarum(:, jjm + 1, :) = 0
74    
75        ! integration de la convergence de masse de haut  en bas
76        DO l = 1, llm
77           DO j = 1, jjp1
78              DO i = 1, iip1
79                 zconvmm(i, j, l) = zconvmm(i, j, l)
80              END DO
81           END DO
82        END DO
83        DO l = llm - 1, 1, -1
84           DO j = 1, jjp1
85              DO i = 1, iip1
86                 zconvmm(i, j, l) = zconvmm(i, j, l) + zconvmm(i, j, l+1)
87              END DO
88           END DO
89        END DO
90    
91        wm = vitvert(zconvmm)
92    
93      END SUBROUTINE groupe
94    
95    end module groupe_m

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

  ViewVC Help
Powered by ViewVC 1.1.21