source: LMDZ6/branches/Amaury_dev/libf/dyn3d/groupe.F90 @ 5123

Last change on this file since 5123 was 5119, checked in by abarral, 2 months ago

enforce PRIVATE by default in several modules, expose PUBLIC as needed
move eigen.f90 to obsolete/
(lint) aslong the way

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.4 KB
Line 
1! $Header$
2
3SUBROUTINE groupe(pext, pbaru, pbarv, pbarum, pbarvm, wm)
4
5  USE comconst_mod, ONLY: ngroup
6  USE lmdz_ssum_scopy, ONLY: scopy
7
8  IMPLICIT NONE
9
10  !   sous-programme servant a fitlrer les champs de flux de masse aux
11  !   poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur
12  !   et a mesure qu'on se rapproche du pole.
13  !
14  !   en entree: pext, pbaru et pbarv
15  !
16  !   en sortie:  pbarum,pbarvm et wm.
17  !
18  !   remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc
19  !   pas besoin de w en entree.
20
21  include "dimensions.h"
22  include "paramet.h"
23  include "comgeom2.h"
24
25  ! integer ngroup
26  ! parameter (ngroup=3)
27
28  REAL :: pbaru(iip1, jjp1, llm), pbarv(iip1, jjm, llm)
29  REAL :: pext(iip1, jjp1, llm)
30
31  REAL :: pbarum(iip1, jjp1, llm), pbarvm(iip1, jjm, llm)
32  REAL :: wm(iip1, jjp1, llm)
33
34  REAL :: zconvm(iip1, jjp1, llm), zconvmm(iip1, jjp1, llm)
35
36  REAL :: uu
37
38  INTEGER :: i, j, l
39
40  LOGICAL :: firstcall, groupe_ok
41  save firstcall, groupe_ok
42
43  data firstcall/.TRUE./
44  data groupe_ok/.TRUE./
45
46  IF (iim==1) THEN
47    groupe_ok = .FALSE.
48  ENDIF
49
50  IF (firstcall) THEN
51    IF (groupe_ok) THEN
52      IF(mod(iim, 2**ngroup)/=0) &
53              CALL abort_gcm('groupe', 'probleme du nombre de point', 1)
54    endif
55    firstcall = .FALSE.
56  ENDIF
57
58
59  !   Champs 1D
60
61  CALL convflu(pbaru, pbarv, llm, zconvm)
62
63  CALL scopy(ijp1llm, zconvm, 1, zconvmm, 1)
64  CALL scopy(ijmllm, pbarv, 1, pbarvm, 1)
65
66  IF (groupe_ok) THEN
67    CALL groupeun(jjp1, llm, zconvmm)
68    CALL groupeun(jjm, llm, pbarvm)
69
70    !   Champs 3D
71    do l = 1, llm
72      do j = 2, jjm
73        uu = pbaru(iim, j, l)
74        do i = 1, iim
75          uu = uu + pbarvm(i, j, l) - pbarvm(i, j - 1, l) - zconvmm(i, j, l)
76          pbarum(i, j, l) = uu
77          ! zconvm(i,j,l ) =  xflu(i-1,j,l)-xflu(i,j,l)+
78          !    *                      yflu(i,j,l)-yflu(i,j-1,l)
79        enddo
80        pbarum(iip1, j, l) = pbarum(1, j, l)
81      enddo
82    enddo
83
84  else
85    pbarum(:, :, :) = pbaru(:, :, :)
86    pbarvm(:, :, :) = pbarv(:, :, :)
87  ENDIF
88
89  !    integration de la convergence de masse de haut  en bas ......
90  do l = 1, llm
91    do j = 1, jjp1
92      do i = 1, iip1
93        zconvmm(i, j, l) = zconvmm(i, j, l)
94      enddo
95    enddo
96  enddo
97  do  l = llm - 1, 1, -1
98    do j = 1, jjp1
99      do i = 1, iip1
100        zconvmm(i, j, l) = zconvmm(i, j, l) + zconvmm(i, j, l + 1)
101      enddo
102    enddo
103  enddo
104
105  CALL vitvert(zconvmm, wm)
106
107
108END SUBROUTINE  groupe
109
Note: See TracBrowser for help on using the repository browser.