LMDZ
col2box.F90
Go to the documentation of this file.
1 SUBROUTINE col2box &
2  & (kidia, kfdia, klon, klev, kbox, kovlp &
3  & , pclfr, pclbx &
4  & )
5 !
6 !* Subdivide a column of cloud parameters in a set of homogeneous boxes
7 !
8 ! from C.Jakob and S.A. Klein
9 !
10 !-----------------------------------------------------------------------
11 
12 #include "tsmbkind.h"
13 
14 integer_m :: kidia
15 integer_m :: kfdia
16 integer_m :: klon
17 integer_m :: klev
18 integer_m :: kbox
19 integer_m :: kovlp
20 
21 real_b :: pclfr(klon,klev)
22 real_b :: pclbx(klon,100,klev)
23 
24 !-- local
25 
26 integer_m :: iabox(klon,kbox), iaboxm1(klon,kbox), iaboxint(klon,kbox)
27 integer_m :: iboxtype1(klon), iboxtype2(klon), iboxtype3(klon)
28 integer_m :: isumbox(kbox), isumboxm1(kbox)
29 
30 real_b :: ztcc(klon)
31 
32 
33 zboxwidth=1./float(kbox)
34 zamin =1.e-03
35 zepsec=1.e-06
36 
37 DO jb=1,kbox
38  DO jl=kidia,kfdia
39  iaboxint(jl,jb)=0
40  iaboxm1(jl,jb)=0
41  iabox(jl,jb)=0
42  END DO
43 END DO
44 DO jl=kidia,kfdia
45  ztcc(jl) =_zero_
46  isumbox(jl) =_zero_
47  isumboxm1(jl)=_zero_
48 END DO
49 
50 
51 DO jk=1,klev
52 !
53  IF (jk.GT.1) THEN
54  DO jb=1,kbox
55  DO jl=kidia,kfdia
56  iaboxm1(jl,jb)=iabox(jl,jb)
57  isumboxm1(jl)=isumboxm1(jl)+iabox(jl,jb)
58  iabox(jl,jb)=0
59  END DO
60  END DO
61  END IF
62 
63  DO jl=kidia,kfdia
64  itccm1=nint(REAL(kbox)*ZTCC(jl))
65  IF (ztcc(jl).GT.zamin .AND. ztcc(jl).LT._half_*zboxwidth) THEN
66  itccm1=1
67  END IF
68 !
69 !-- various cloud overlap assumptions
70 !
71  IF (jk.GT.1) THEN
72 !
73 !-- maximum-random
74 !
75  IF (kovlp.EQ.1) THEN
76  ztcc(jl) = _one_ - ( (_one_-ztcc(jl)) &
77  & *(_one_ -max( pclfr(jl,jk) , pclfr(jl,jk-1))) &
78  & /(_one_ -min( pclfr(jl,jk-1), _one_-zepsec)) )
79 !
80 !-- maximum
81 !
82  ELSE IF (kovlp.EQ.2) THEN
83  ztcc(jl)=max(ztcc(jl),pclfr(jl,jk))
84 !
85 !-- random
86 !
87  ELSE IF (kovlp.EQ.3) THEN
88  ztcc(jl)=_one_-(_one_-ztcc(jl))*(_one_-pclfr(jl,jk))
89  END IF
90 !
91  ELSE
92  ztcc(jl)=pclfr(jl,jk)
93  END IF
94 !
95  itcc=nint(REAL(kbox)*ZTCC(jl))
96  IF (ztcc(jl).GT.zamin .AND. ztcc(jl).LT. _half_*zboxwidth) THEN
97  itcc=1
98  END IF
99  iam1=isumboxm1(jl)
100  ia=nint(REAL(kbox)*PCLFR(jl,jk))
101  IF (pclfr(jl,jk).GT.zamin &
102  & .AND. pclfr(jl,jk).LT. _half_*zboxwidth) THEN
103  ia=1
104  END IF
105 !
106  iboxtype1(jl)=itcc-itccm1
107 ! IF (KOVLP.NE.3) THEN
108  iboxtype2(jl)=min( iam1, ia-iboxtype1(jl))
109 ! ELSE
110 ! IBOXTYPE2(JL)=NINT( FLOAT(IAM1)*FLOAT(IA-IBOXTYPE1(JL))
111 ! & /MAX(FLOAT(ITCCM1), ZEPSEC) )
112 ! END IF
113  iboxtype3(jl)=ia - iboxtype1(jl)-iboxtype2(jl)
114  END DO
115 !
116  DO jb=1,kbox
117  DO jl=kidia,kfdia
118  IF (iaboxint(jl,jb).EQ.0) THEN
119  IF (iboxtype1(jl).GT.0) THEN
120  iabox(jl,jb)=1
121  iaboxint(jl,jb)=1
122  iboxtype1(jl)=iboxtype1(jl)-1
123  END IF
124  ELSE
125  IF (iaboxm1(jl,jb).EQ.1) THEN
126  IF (iboxtype2(jl).GT.0) THEN
127  iabox(jl,jb)=1
128  iboxtype2(jl)=iboxtype2(jl)-1
129  END IF
130  ELSE
131  IF (iboxtype3(jl).GT.0) THEN
132  iabox(jl,jb)=1
133  iboxtype3(jl)=iboxtype3(jl)-1
134  END IF
135  END IF
136  END IF
137  END DO
138  END DO
139 !
140  DO jb=1,kbox
141  DO jl=kidia,kfdia
142  IF (jb.EQ.1) THEN
143  iboxtype1(jl)=iboxtype1(jl)+iboxtype2(jl)+iboxtype3(jl)
144  END IF
145  IF (iabox(jl,jb).EQ.0 .AND. iboxtype1(jl).GT.0) THEN
146  iabox(jl,jb)=1
147  iboxtype1(jl)=iboxtype1(jl)-1
148  END IF
149  isumbox(jl)=isumbox(jl)+iabox(jl,jb)
150  END DO
151  END DO
152  DO jl=kidia,kfdia
153  if (jk.GE.21) THEN
154  print 9001,(iabox(jl,jb),jb=1,kbox)
155  end if
156  DO jb=1,kbox
157  pclbx(jl,jb,jk)=float(iabox(jl,jb))
158  END DO
159 9001 FORMAT(1x,100i1)
160  END DO
161 
162 END DO
163 
164 RETURN
165 END SUBROUTINE col2box
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
integer, save klev
Definition: dimphy.F90:7
integer, save kfdia
Definition: dimphy.F90:5
!$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
subroutine col2box(KIDIA, KFDIA, KLON, KLEV, KBOX, KOVLP, PCLFR, PCLBX)
Definition: col2box.F90:5