LMDZ
sump_trans_mod.F90
Go to the documentation of this file.
2 CONTAINS
3 SUBROUTINE sump_trans
4 
5 ! Set up distributed environment for the transform package (part 2)
6 
7 USE parkind1 ,ONLY : jpim ,jprb
8 
9 USE tpm_gen
10 USE tpm_dim
11 USE tpm_geometry
12 USE tpm_distr
13 
14 USE suwavedi_mod
15 USE pe2set_mod
16 USE sumplatf_mod
17 USE sumplat_mod
18 USE sustaonl_mod
19 USE mysendset_mod
20 USE myrecvset_mod
22 
23 IMPLICIT NONE
24 
25 INTEGER(KIND=JPIM) :: JM,JMLOC
26 INTEGER(KIND=JPIM) :: JGL,IGL,IPLAT,ISENDSET,IRECVSET,JML,IPOS,IM
27 INTEGER(KIND=JPIM) :: I1,I2,I3,IAUX0,IAUX1,JA1
28 INTEGER(KIND=JPIM) :: IGPTOT,IMEDIAP,IRESTM,JA,JB,IOFF
29 INTEGER(KIND=JPIM),ALLOCATABLE :: IGPTOTL(:,:)
30 
31 LOGICAL :: LLP1,LLP2
32 
33 ! ------------------------------------------------------------------
34 
35 
36 llp1 = nprintlev>0
37 llp2 = nprintlev>1
38 IF(llp1) WRITE(nout,*) '=== ENTER ROUTINE SUMP_TRANS ==='
39 
40 ALLOCATE(d%NULTPP(nprtrns))
41 IF(llp2)WRITE(nout,9) 'D%NULTPP ',SIZE(d%NULTPP ),shape(d%NULTPP )
42 ALLOCATE(d%NPTRLS(nprtrns))
43 IF(llp2)WRITE(nout,9) 'D%NPTRLS ',SIZE(d%NPTRLS ),shape(d%NPTRLS )
44 ALLOCATE(d%NPROCL(r%NDGL))
45 IF(llp2)WRITE(nout,9) 'D%NPROCL ',SIZE(d%NPROCL ),shape(d%NPROCL )
46 
47 CALL sumplatf(r%NDGL,nprtrns,mysetw,d%NULTPP,d%NPROCL,d%NPTRLS)
48 d%NDGL_FS = d%NULTPP(mysetw)
49 
50 ! Help arrays for spectral to fourier space transposition
51 ALLOCATE(d%NLTSGTB (nprtrns+1))
52 IF(llp2)WRITE(nout,9) 'D%NLTSGTB ',SIZE(d%NLTSGTB),shape(d%NLTSGTB)
53 ALLOCATE(d%NLTSFTB (nprtrns+1))
54 IF(llp2)WRITE(nout,9) 'D%NLTSFTB ',SIZE(d%NLTSFTB),shape(d%NLTSFTB)
55 ALLOCATE(d%NSTAGT0B(nprtrns+1))
56 IF(llp2)WRITE(nout,9) 'D%NSTAGT0B ',SIZE(d%NSTAGT0B),shape(d%NSTAGT0B)
57 ALLOCATE(d%NSTAGT1B(nprtrns+1))
58 IF(llp2)WRITE(nout,9) 'D%NSTAGT1B ',SIZE(d%NSTAGT1B),shape(d%NSTAGT1B)
59 ALLOCATE(d%MSTABF (nprtrns+1))
60 IF(llp2)WRITE(nout,9) 'D%MSTABF ',SIZE(d%MSTABF),shape(d%MSTABF)
61 
62 d%NLTSGTB(:) = 0
63 DO jgl=1,d%NDGL_FS
64  igl = d%NPTRLS(mysetw)+jgl-1
65  DO jm=0,g%NMEN(igl)
66  d%NLTSGTB(d%NPROCM(jm)) = d%NLTSGTB(d%NPROCM(jm))+1
67  ENDDO
68 ENDDO
69 DO ja=1,nprtrw
70  iplat = 0
71  DO jgl=1,d%NULTPP(ja)
72  igl = d%NPTRLS(ja)+jgl-1
73  DO jm=1,d%NUMP
74  IF(igl > r%NDGNH-g%NDGLU(d%MYMS(jm)) .AND. igl <= r%NDGNH+g%NDGLU(d%MYMS(jm))) THEN
75  iplat = iplat + 1
76  ENDIF
77  ENDDO
78  ENDDO
79  d%NLTSFTB(ja) = iplat
80 ENDDO
81 
82 DO ja=1,nprtrw-1
83  isendset = mysendset(nprtrw,mysetw,ja)
84  irecvset = myrecvset(nprtrw,mysetw,ja)
85  d%MSTABF(irecvset) = isendset
86 ENDDO
87 d%MSTABF(mysetw) = mysetw
88 
89 ALLOCATE(d%NPNTGTB0(0:r%NSMAX,d%NDGL_FS))
90 IF(llp2)WRITE(nout,9) 'D%NPNTGTB0 ',SIZE(d%NPNTGTB0 ),shape(d%NPNTGTB0 )
91 ALLOCATE(d%NPNTGTB1(d%NUMP,r%NDGL))
92 IF(llp2)WRITE(nout,9) 'D%NPNTGTB1 ',SIZE(d%NPNTGTB1 ),shape(d%NPNTGTB1 )
93 
94 DO ja=1,nprtrw
95  ipos = 0
96  DO jgl=1,d%NULTPP(mysetw)
97  igl = d%NPTRLS(mysetw) + jgl - 1
98  DO jml=d%NPTRMS(ja),d%NPTRMS(ja)+d%NUMPP(ja)-1
99  im = d%NALLMS(jml)
100  IF (im <= g%NMEN(igl)) THEN
101  d%NPNTGTB0(im,jgl) = ipos
102  ipos = ipos+1
103  ELSE
104  d%NPNTGTB0(im,jgl) = -99
105  ENDIF
106  ENDDO
107  ENDDO
108 ENDDO
109 
110 DO ja=1,nprtrw
111  ipos = 0
112  DO jgl=1,d%NULTPP(ja)
113  igl = d%NPTRLS(ja) + jgl - 1
114  DO jm=1,d%NUMP
115  im = d%MYMS(jm)
116  IF (im <= g%NMEN(igl)) THEN
117  d%NPNTGTB1(jm,igl) = ipos
118  ipos = ipos+1
119  ELSE
120  d%NPNTGTB1(jm,igl) = -99
121  ENDIF
122  ENDDO
123  ENDDO
124 ENDDO
125 
126 iaux0 = 0
127 iaux1 = 0
128 DO ja=1,nprtrns-1
129  i1 = mysendset(nprtrns,mysetw,ja)
130  i2 = myrecvset(nprtrns,mysetw,ja)
131  DO ja1=1,nprtrns-1
132  IF(mysendset(nprtrns,mysetw,ja1) == i2) i3 =myrecvset(nprtrns,mysetw,ja1)
133  ENDDO
134  iaux0 = max(d%NLTSFTB(i1),d%NLTSGTB(i2),iaux0)
135  iaux1 = max(d%NLTSGTB(i2),d%NLTSFTB(i3),iaux1)
136 ENDDO
137 iaux0 = max(d%NLTSGTB(mysetw),iaux0)
138 iaux1 = max(d%NLTSGTB(mysetw),iaux1)
139 DO ja=1,nprtrns+1
140  d%NSTAGT0B(ja) = (ja-1)*iaux0
141  d%NSTAGT1B(ja) = (ja-1)*iaux1
142 ENDDO
143 d%NLENGT0B = iaux0*nprtrns
144 d%NLENGT1B = iaux1*nprtrns
145 
146 ! GRIDPOINT SPACE
147 
148 ALLOCATE(d%NFRSTLAT(n_regions_ns))
149 IF(llp2)WRITE(nout,9) 'D%NFRSTLAT ',SIZE(d%NFRSTLAT ),shape(d%NFRSTLAT )
150 ALLOCATE(d%NLSTLAT(n_regions_ns))
151 IF(llp2)WRITE(nout,9) 'D%NLSTLAT ',SIZE(d%NLSTLAT ),shape(d%NLSTLAT )
152 ALLOCATE(d%NPTRLAT(r%NDGL))
153 IF(llp2)WRITE(nout,9) 'D%NPTRLAT ',SIZE(d%NPTRLAT ),shape(d%NPTRLAT )
154 ALLOCATE(d%NPTRFRSTLAT(n_regions_ns))
155 IF(llp2)WRITE(nout,9) 'D%NPTRFRSTLAT',SIZE(d%NPTRFRSTLAT),shape(d%NPTRFRSTLAT)
156 ALLOCATE(d%NPTRLSTLAT(n_regions_ns))
157 IF(llp2)WRITE(nout,9)'D%NPTRLSTLAT',SIZE(d%NPTRLSTLAT),shape(d%NPTRLSTLAT)
158 ALLOCATE(d%LSPLITLAT(r%NDGL))
159 IF(llp2)WRITE(nout,9) 'D%LSPLITLAT',SIZE(d%LSPLITLAT),shape(d%LSPLITLAT)
160 
161 
163  &d%NFRSTLAT,d%NLSTLAT,d%NFRSTLOFF,d%NPTRLAT,&
164  &d%NPTRFRSTLAT,d%NPTRLSTLAT,d%NPTRFLOFF,&
165  &imediap,irestm,d%LSPLITLAT)
166 
167 d%NDGL_GP = d%NLSTLAT(my_region_ns)-d%NFRSTLOFF
168 
169 IF (llp1) THEN
170  WRITE(nout,fmt='(/'' OUTPUT FROM ROUTINE SUMPLAT: ''/)')
171  WRITE(nout,fmt='('' D%NULTPP '')')
172  WRITE(nout,fmt='(20(1X,I4))') d%NULTPP(1:nprtrns)
173  WRITE(nout,fmt='('' D%NPROCL '')')
174  WRITE(nout,fmt='(20(1X,I4))') d%NPROCL(1:r%NDGL)
175  WRITE(nout,fmt='('' D%NFRSTLAT '')')
176  WRITE(nout,fmt='(20(1X,I4))') d%NFRSTLAT(1:n_regions_ns)
177  WRITE(nout,fmt='('' D%NLSTLAT '')')
178  WRITE(nout,fmt='(20(1X,I4))') d%NLSTLAT(1:n_regions_ns)
179  WRITE(nout,fmt='('' D%NFRSTLOFF D%NPTRFLOFF '')')
180  WRITE(nout,fmt='(2(1X,I6))') d%NFRSTLOFF, d%NPTRFLOFF
181  WRITE(nout,fmt='('' D%NPTRLAT '')')
182  WRITE(nout,fmt='(20(1X,I4))') d%NPTRLAT(1:r%NDGL)
183  WRITE(nout,fmt='('' D%LSPLITLAT '')')
184  WRITE(nout,fmt='(50(1X,L1))') d%LSPLITLAT(1:r%NDGL)
185  WRITE(nout,fmt='('' D%NPTRFRSTLAT '')')
186  WRITE(nout,fmt='(20(1X,I4))') d%NPTRFRSTLAT(1:n_regions_ns)
187  WRITE(nout,fmt='('' D%NPTRLSTLAT '')')
188  WRITE(nout,fmt='(20(1X,I4))') d%NPTRLSTLAT(1:n_regions_ns)
189  WRITE(nout,fmt='(/)')
190 ENDIF
191 ALLOCATE(d%NSTA(r%NDGL+n_regions_ns-1,n_regions_ew))
192 IF(llp2)WRITE(nout,9) 'D%NSTA ',SIZE(d%NSTA ),shape(d%NSTA )
193 ALLOCATE(d%NONL(r%NDGL+n_regions_ns-1,n_regions_ew))
194 IF(llp2)WRITE(nout,9) 'D%NONL ',SIZE(d%NONL ),shape(d%NONL )
195 
196 CALL sustaonl(imediap,irestm)
197 
198 ! IGPTOTL is the number of grid points in each individual processor
199 ALLOCATE(igptotl(n_regions_ns,n_regions_ew))
200 igptotl(:,:)=0
201 
202 DO ja=1,n_regions_ns
203  DO jb=1,n_regions(ja)
204  igptot = 0
205  DO jgl=d%NPTRFRSTLAT(ja),d%NPTRLSTLAT(ja)
206  igptot = igptot+d%NONL(jgl,jb)
207  ENDDO
208  igptotl(ja,jb) = igptot
209  ENDDO
210 ENDDO
211 d%NGPTOT = igptotl(my_region_ns,my_region_ew)
212 d%NGPTOTMX = maxval(igptotl)
213 d%NGPTOTG = sum(igptotl)
214 ALLOCATE(d%NGPTOTL(n_regions_ns,n_regions_ew))
215 IF(llp2)WRITE(nout,9) 'D%NGPTOTL ',SIZE(d%NGPTOTL ),shape(d%NGPTOTL )
216 d%NGPTOTL(:,:) = igptotl(:,:)
217 
218 ALLOCATE(d%NSTAGTF(d%NDGL_FS))
219 IF(llp2)WRITE(nout,9) 'D%NSTAGTF ',SIZE(d%NSTAGTF ),shape(d%NSTAGTF )
220 ioff = 0
221 DO jgl=1,d%NDGL_FS
222  d%NSTAGTF(jgl) = ioff
223  igl = d%NPTRLS(mysetw) + jgl - 1
224  ioff = ioff + g%NLOEN(igl)+3
225 ENDDO
226 d%NLENGTF = ioff
227 
228 DEALLOCATE(igptotl)
229 
230 ! ------------------------------------------------------------------
231 9 FORMAT(1x,'ARRAY ',a10,' ALLOCATED ',8i8)
232 
233 END SUBROUTINE sump_trans
234 END MODULE sump_trans_mod
235 
236 
subroutine sump_trans
!$Id mode_top_bound COMMON comconstr r
Definition: comconst.h:7
!$Id mode_top_bound COMMON comconstr g
Definition: comconst.h:7
integer(kind=jpim), public n_regions_ns
type(distr_type), pointer d
Definition: tpm_distr.F90:152
subroutine sumplatf(KDGL, KPROCA, KMYSETA, KULTPP, KPROCL, KPTRLS)
Definition: sumplatf_mod.F90:5
integer(kind=jpim), public my_region_ns
subroutine sumplat(KDGL, KPROC, KPROCA, KMYSETA, LDSPLIT, LDEQ_REGIONS, KFRSTLAT, KLSTLAT, KFRSTLOFF, KPTRLAT, KPTRFRSTLAT, KPTRLSTLAT, KPTRFLOFF, KMEDIAP, KRESTM, LDSPLITLAT)
Definition: sumplat_mod.F90:7
integer(kind=jpim), public my_region_ew
integer(kind=jpim) function mysendset(KSETS, KMYSET, KSET)
integer, parameter jprb
Definition: parkind1.F90:31
integer(kind=jpim) nproc
Definition: tpm_distr.F90:11
!$Header!c c INCLUDE fxyprim h c c c Fonctions in line c c REAL fyprim REAL rj c c il faut la calculer avant d appeler ces fonctions c c c Fonctions a changer selon x(x) et y(y) choisis.c-----------------------------------------------------------------c c.....ici
integer(kind=jpim) mysetw
Definition: tpm_distr.F90:21
integer(kind=jpim) function myrecvset(KSETS, KMYSET, KSET)
integer(kind=jpim), public n_regions_ew
integer(kind=jpim) nprtrw
Definition: tpm_distr.F90:14
subroutine sustaonl(KMEDIAP, KRESTM)
Definition: sustaonl_mod.F90:4
integer(kind=jpim) nprtrns
Definition: tpm_distr.F90:16
integer, parameter jpim
Definition: parkind1.F90:13
integer(kind=jpim) nout
Definition: tpm_gen.F90:9
integer(kind=jpim), dimension(:), allocatable, public n_regions
logical leq_regions
Definition: tpm_distr.F90:18
integer(kind=jpim) nprintlev
Definition: tpm_gen.F90:11