source: trunk/LMDZ.COMMON/libf/dyn3d/groupe.F @ 3000

Last change on this file since 3000 was 1572, checked in by emillour, 8 years ago

All GCMs:
Further adaptations to keep up with changes in LMDZ5 concerning
physics/dynamics separation (up to rev r2500 of LMDZ5)

  • arch:
  • remove ifort debug option '-check all', replace it with '-check bounds,format,output_conversion,pointers,uninit' (i.e. get it to stop complaining about copying into temporary arrays)
  • dyn3d_common:
  • comconst_mod.F90 : add ngroup
  • dyn3d:
  • gcm.F90 : minor bug fix (arguments to a call_abort())
  • leapfrog.F90 : recompute geopotential for bilan_dyn outputs
  • conf_gcm.F90 : read "ngroup" from run.def
  • groupe.F , groupeun.F : ngroup no longer a local parameter
  • dyn3d_par:
  • conf_gcm.F90 : read "ngroup" from run.def
  • groupe_p.F , groupeun_p.F : ngroup no longer a local parameter
  • misc:
  • regr1_step_av_m.F90 : removed (not used)
  • phy_common:
  • mod_phys_lmdz_mpi_transfert.F90 , mod_phys_lmdz_mpi_data.F90 : change is_north_pole and is_south_pole to is_north_pole_dyn and is_south_pole_dyn
  • mod_phys_lmdz_omp_data.F90 : introduce is_nort_pole_phy and is_south_pole_phy
  • dynphy_lonlat:
  • mod_interface_dyn_phys.F90 : use is_north_pole_dyn and is_south_pole_dyn
  • calfis_p.F : use is_north_pole_dyn and is_south_pole_dyn
  • phyvenus:
  • physiq_mod , write_hist*.h : use is_north_pole_phy and is_south_pole_phy to correctly compute mesh area at poles to send to hist*nc files.
  • phytitan:
  • physiq_mod , write_hist*.h : use is_north_pole_phy and is_south_pole_phy to correctly compute mesh area at poles to send to hist*nc files.

EM

File size: 2.4 KB
Line 
1!
2! $Header$
3!
4      subroutine groupe(pext,pbaru,pbarv,pbarum,pbarvm,wm)
5     
6      use comconst_mod, only: ngroup
7      implicit none
8
9c   sous-programme servant a fitlrer les champs de flux de masse aux
10c   poles en "regroupant" les mailles 2 par 2 puis 4 par 4 etc. au fur
11c   et a mesure qu'on se rapproche du pole.
12c
13c   en entree: pext, pbaru et pbarv
14c
15c   en sortie:  pbarum,pbarvm et wm.
16c
17c   remarque, le wm est recalcule a partir des pbaru pbarv et on n'a donc
18c   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
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).ne.0) stop'probleme du nombre de point'
53         endif
54         firstcall=.false.
55      endif
56
57
58c   Champs 1D
59
60      call convflu(pbaru,pbarv,llm,zconvm)
61
62      call scopy(ijp1llm,zconvm,1,zconvmm,1)
63      call scopy(ijmllm,pbarv,1,pbarvm,1)
64
65      if (groupe_ok) then
66      call groupeun(jjp1,llm,zconvmm)
67      call groupeun(jjm,llm,pbarvm)
68
69c   Champs 3D
70      do l=1,llm
71         do j=2,jjm
72            uu=pbaru(iim,j,l)
73            do i=1,iim
74               uu=uu+pbarvm(i,j,l)-pbarvm(i,j-1,l)-zconvmm(i,j,l)
75               pbarum(i,j,l)=uu
76c     zconvm(i,j,l ) =  xflu(i-1,j,l)-xflu(i,j,l)+
77c    *                      yflu(i,j,l)-yflu(i,j-1,l)
78            enddo
79            pbarum(iip1,j,l)=pbarum(1,j,l)
80         enddo
81      enddo
82
83      else
84         pbarum(:,:,:)=pbaru(:,:,:)
85         pbarvm(:,:,:)=pbarv(:,:,:)
86      endif
87
88c    integration de la convergence de masse de haut  en bas ......
89      do l=1,llm
90         do j=1,jjp1
91            do i=1,iip1
92               zconvmm(i,j,l)=zconvmm(i,j,l)
93            enddo
94         enddo
95      enddo
96      do  l = llm-1,1,-1
97          do j=1,jjp1
98             do i=1,iip1
99                zconvmm(i,j,l)=zconvmm(i,j,l)+zconvmm(i,j,l+1)
100             enddo
101          enddo
102      enddo
103
104      CALL vitvert(zconvmm,wm)
105
106      return
107      end
108
Note: See TracBrowser for help on using the repository browser.