3 SUBROUTINE sumplatbeq(KDGSA,KDGL,KPROC,KPROCA,KLOENG,LDSPLIT,LDEQ_REGIONS,&
4 &kmediap,krestm,kindic,klast)
70 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGSA
71 INTEGER(KIND=JPIM),
INTENT(IN) :: KDGL
72 INTEGER(KIND=JPIM),
INTENT(IN) :: KPROC
73 INTEGER(KIND=JPIM),
INTENT(IN) :: KPROCA
74 INTEGER(KIND=JPIM),
INTENT(IN) :: KLOENG(kdgsa:kdgl)
75 LOGICAL,
INTENT(IN) :: LDSPLIT
76 LOGICAL,
INTENT(IN) :: LDEQ_REGIONS
77 INTEGER(KIND=JPIM),
INTENT(OUT) :: KMEDIAP
78 INTEGER(KIND=JPIM),
INTENT(OUT) :: KRESTM
79 INTEGER(KIND=JPIM),
INTENT(OUT) :: KINDIC(kproca)
80 INTEGER(KIND=JPIM),
INTENT(OUT) :: KLAST(kproca)
85 INTEGER(KIND=JPIM) :: ICOMP, IGL, IMAXI, IMEDIA, IMEDIAP, ITOT, JA, JB, IA, JGL,&
86 &ILAST,IREST,IPE,I2REGIONS
96 imedia = sum(kloeng(kdgsa:kdgl))
97 kmediap = imedia / kproc
104 IF( kmediap < (kloeng(kdgsa)-1)/i2regions+1 )
THEN
105 WRITE(0,
'("SUMPLATBEQ: KMEDIAP=",I6," I2REGIONS=",I3," KLOENG(KDGSA)=",I3)')&
106 &kmediap,i2regions,kloeng(kdgsa)
107 CALL abort_trans (
'SUMPLATBEQ: NPROC TOO BIG FOR THIS RESOLUTION, LDSPLIT=T')
111 IF( kproca > kdgl )
THEN
112 WRITE(0,
'("SUMPLATBEQ: KMEDIAP=",I6," KPROCA=",I4," KDGL=",I4)')&
114 CALL abort_trans (
'SUMPLATBEQ: NPROC TOO BIG FOR THIS RESOLUTION, LDSPLIT=F')
119 krestm = imedia - kmediap * kproc
120 IF (krestm > 0) kmediap = kmediap + 1
133 IF (ipe <= krestm .OR. krestm == 0)
THEN
134 icomp = icomp + kmediap
136 icomp = icomp + (kmediap-1)
143 IF(itot+kloeng(jgl) < icomp)
THEN
144 itot = itot+kloeng(jgl)
145 ELSEIF(itot+kloeng(jgl) == icomp)
THEN
151 irest = kloeng(jgl) -(icomp-itot)
165 WRITE(0,
'("SUMPLATBEQ: IMEDIAP=",I6)')imediap
167 DO WHILE(.NOT.lldone)
173 imaxi=imaxi-kloeng(jgl)
174 IF( ia == kproca .AND. jgl == kdgl )
THEN
176 WRITE(0,
'("SUMPLATBEQ: EXIT 1")')
180 IF( ia == kproca .AND. jgl < kdgl )
THEN
182 WRITE(0,
'("SUMPLATBEQ: EXIT 2")')
187 IF( ia < kproca .AND. jgl == kdgl )
THEN
189 klast(ja)=kdgl+ja-kproca
192 IF( klast(ja) <= klast(ja-1) )
THEN
193 klast(ja-1)=klast(ja)-1
197 WRITE(0,
'("SUMPLATBEQ: EXIT 3")')
206 IF( kproca > 1 .AND. klast(kproca) == klast(kproca-1) )
THEN
209 WRITE(0,
'("SUMPLATBEQ: REDUCING IMEDIAP=",I6)')imediap
211 IF( imediap <= 0 )
THEN
212 CALL abort_trans (
'SUMPLATBEQ: PROBLEM PARTITIONING WITH LSPLIT=F, IMEDIAP <= 0')
subroutine sumplatbeq(KDGSA, KDGL, KPROC, KPROCA, KLOENG, LDSPLIT, LDEQ_REGIONS, KMEDIAP, KRESTM, KINDIC, KLAST)
integer(kind=jpim) myproc
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL false
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
integer(kind=jpim), dimension(:), allocatable, public n_regions
subroutine abort_trans(CDTEXT)