source: LMDZ6/branches/Amaury_dev/libf/dyn3dmem/groupe_loc.f90 @ 5115

Last change on this file since 5115 was 5113, checked in by abarral, 4 months ago

Rename modules in misc from *_mod > lmdz_*
Put cbrt.f90, ch*.f90, pch*.f90 in new lmdz_libmath_pch.f90

  • 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
File size: 3.0 KB
Line 
1SUBROUTINE groupe_loc(pext, pbaru, pbarv, pbarum, pbarvm, wm)
2  USE parallel_lmdz
3  USE Write_field_loc
4  USE groupe_mod
5  USE comconst_mod, ONLY: ngroup
6  USE lmdz_cppkeys_wrapper, ONLY: CPPKEY_DEBUGIO
7  IMPLICIT NONE
8
9  !   sous-programme servant a fitlrer les champs de flux de masse aux
10  !   poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur
11  !   et a mesure qu'on se rapproche du pole.
12  !
13  !   en entree: pext, pbaru et pbarv
14  !
15  !   en sortie:  pbarum,pbarvm et wm.
16  !
17  !   remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc
18  !   pas besoin de w en entree.
19
20  include "dimensions.h"
21  include "paramet.h"
22  include "comgeom2.h"
23
24  ! integer ngroup
25  ! parameter (ngroup=3)
26
27  real :: pbaru(iip1, jjb_u:jje_u, llm), pbarv(iip1, jjb_v:jje_v, llm)
28  real :: pext(iip1, jjb_u:jje_u, llm)
29
30  real :: pbarum(iip1, jjb_u:jje_u, llm), pbarvm(iip1, jjb_v:jje_v, llm)
31  real :: wm(iip1, jjb_u:jje_u, llm)
32
33  real :: uu
34
35  integer :: i, j, l
36
37  logical :: firstcall
38  save firstcall
39  !$OMP THREADPRIVATE(firstcall)
40
41  integer :: ijb, ije, jjb, jje
42
43  !   Champs 1D
44
45  CALL convflu_loc(pbaru, pbarv, llm, zconvm)
46
47  !
48  !  CALL scopy(ijp1llm,zconvm,1,zconvmm,1)
49  !  CALL scopy(ijmllm,pbarv,1,pbarvm,1)
50
51  jjb = jj_begin
52  jje = jj_end
53
54  !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
55  do l = 1, llm
56    zconvmm(:, jjb:jje, l) = zconvm(:, jjb:jje, l)
57  enddo
58  !$OMP END DO NOWAIT
59
60  CALL groupeun_loc(jjp1, llm, jjb_u, jje_u, jjb, jje, zconvmm)
61
62  jjb = jj_begin - 1
63  jje = jj_end
64  if (pole_nord) jjb = jj_begin
65  if (pole_sud)  jje = jj_end - 1
66  !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
67  do l = 1, llm
68    pbarvm(:, jjb:jje, l) = pbarv(:, jjb:jje, l)
69  enddo
70  !$OMP END DO NOWAIT
71
72  IF (CPPKEY_DEBUGIO) THEN
73    CALL WriteField_v('pbarvm', reshape(pbarvm, (/ip1jm, llm/)))
74  END IF
75  CALL groupeun_loc(jjm, llm, jjb_v, jje_v, jjb, jje, pbarvm)
76  IF (CPPKEY_DEBUGIO) THEN
77    CALL WriteField_v('pbarvm', reshape(pbarvm, (/ip1jm, llm/)))
78  END IF
79  !   Champs 3D
80
81  jjb = jj_begin
82  jje = jj_end
83  if (pole_nord) jjb = jj_begin + 1
84  if (pole_sud)  jje = jj_end - 1
85
86  !$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
87  do l = 1, llm
88    do j = jjb, jje
89      uu = pbaru(iim, j, l)
90      do i = 1, iim
91        uu = uu + pbarvm(i, j, l) - pbarvm(i, j - 1, l) - zconvmm(i, j, l)
92        pbarum(i, j, l) = uu
93        ! zconvm(i,j,l ) =  xflu(i-1,j,l)-xflu(i,j,l)+
94        !    *                      yflu(i,j,l)-yflu(i,j-1,l)
95      enddo
96      pbarum(iip1, j, l) = pbarum(1, j, l)
97    enddo
98  enddo
99  !$OMP END DO NOWAIT
100  !    integration de la convergence de masse de haut  en bas ......
101
102  jjb = jj_begin
103  jje = jj_end
104
105  !$OMP BARRIER
106  !$OMP MASTER
107  do  l = llm - 1, 1, -1
108    do j = jjb, jje
109      do i = 1, iip1
110        zconvmm(i, j, l) = zconvmm(i, j, l) + zconvmm(i, j, l + 1)
111      enddo
112    enddo
113  enddo
114
115  if (.not. pole_sud) then
116    zconvmm(:, jj_end + 1, :) = 0
117    !ym wm(:,jj_end+1,:)=0
118  endif
119
120  !$OMP END MASTER
121  !$OMP BARRIER
122
123  CALL vitvert_loc(zconvmm, wm)
124
125
126END SUBROUTINE  groupe_loc
127
Note: See TracBrowser for help on using the repository browser.