3 SUBROUTINE cltracrn( itr, dtime,u1lay, v1lay, &
4 cdrag,coef,t,ftsol,pctsrf, &
6 masktr,fshtr,hsoltr,tautr,vdeptr, &
50 INTEGER,
INTENT(IN) :: itr
51 REAL,
INTENT(IN) :: dtime
52 REAL,
DIMENSION(klon),
INTENT(IN) :: u1lay, v1lay
53 REAL,
DIMENSION(klon),
INTENT(IN) :: cdrag
54 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: coef, t
55 REAL,
DIMENSION(klon,nbsrf),
INTENT(IN) :: ftsol, pctsrf
56 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: tr
57 REAL,
DIMENSION(klon),
INTENT(IN) :: trs
58 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
59 REAL,
DIMENSION(klon,klev),
INTENT(IN) :: pplay, delp
60 REAL,
DIMENSION(klon),
INTENT(IN) :: masktr
61 REAL,
DIMENSION(klon),
INTENT(IN) :: fshtr
62 REAL,
INTENT(IN) :: hsoltr
63 REAL,
INTENT(IN) :: tautr
64 REAL,
INTENT(IN) :: vdeptr
65 REAL,
DIMENSION(klon),
INTENT(IN) :: lat
68 REAL,
DIMENSION(klon,klev),
INTENT(OUT) :: d_tr
69 REAL,
DIMENSION(klon),
INTENT(OUT) :: d_trs
72 REAL,
DIMENSION(klon,klev) :: flux_tr
74 REAL,
DIMENSION(klon) :: rotrhi
75 REAL,
DIMENSION(klon,klev) :: zx_coef
76 REAL,
DIMENSION(klon) :: zx_buf
77 REAL,
DIMENSION(klon,klev) :: zx_ctr
78 REAL,
DIMENSION(klon,klev) :: zx_dtr
79 REAL,
DIMENSION(klon) :: zx_trs
82 REAL,
DIMENSION(klon,klev) :: local_tr
83 REAL,
DIMENSION(klon) :: local_trs
84 REAL,
DIMENSION(klon) :: zts
85 REAL,
DIMENSION(klon) :: zx_alpha1, zx_alpha2
97 zts(i) = zts(i) + ftsol(i,n)*pctsrf(i,n)
102 rotrhi(i) = rd * zts(i) / hsoltr
107 local_tr(i,k) = tr(i,k)
112 local_trs(i) = trs(i)
121 zx_alpha2(i) = 1.0 - zx_alpha1(i)
125 zx_coef(i,1) = cdrag(i)*(1.0+sqrt(u1lay(i)**2+v1lay(i)**2)) &
126 *pplay(i,1)/(rd*t(i,1))
127 zx_coef(i,1) = zx_coef(i,1) * dtime*
rg
132 zx_coef(i,k) = coef(i,k)*
rg/(pplay(i,k-1)-pplay(i,k)) &
133 *(paprs(i,k)*2/(t(i,k)+t(i,k-1))/rd)**2
134 zx_coef(i,k) = zx_coef(i,k) * dtime*
rg
139 zx_buf(i) = delp(i,
klev) + zx_coef(i,
klev)
140 zx_ctr(i,
klev) = local_tr(i,
klev)*delp(i,
klev)/zx_buf(i)
141 zx_dtr(i,
klev) = zx_coef(i,
klev) / zx_buf(i)
144 DO l =
klev-1, 2 , -1
146 zx_buf(i) = delp(i,l)+zx_coef(i,l) &
147 +zx_coef(i,l+1)*(1.-zx_dtr(i,l+1))
149 zx_ctr(i,l) = ( local_tr(i,l)*delp(i,l) &
150 + zx_coef(i,l+1)*zx_ctr(i,l+1) )/zx_buf(i)
151 zx_dtr(i,l) = zx_coef(i,l) / zx_buf(i)
156 zx_buf(i) = delp(i,1) + zx_coef(i,2)*(1.-zx_dtr(i,2)) &
157 + masktr(i) * zx_coef(i,1) &
158 *( zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2) )
160 zx_ctr(i,1) = ( local_tr(i,1)*delp(i,1) &
163 - masktr(i) * zx_coef(i,1) &
164 *zx_alpha2(i) ) ) / zx_buf(i)
165 zx_dtr(i,1) = masktr(i) * zx_coef(i,1) / zx_buf(i)
179 IF ( nint(masktr(i)) .EQ. 1 )
THEN
180 zx_trs(i) = local_trs(i)
182 +fshtr(i)*dtime*rotrhi(i) &
183 +rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg &
184 *(zx_ctr(i,1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2)) &
185 +zx_alpha2(i)*zx_ctr(i,2))
187 zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg &
189 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2))) &
191 + dtime * vdeptr / hsoltr
192 zx_trs(i) = zx_a / zx_b
193 local_trs(i) = zx_trs(i)
199 IF ( (itr.eq.
id_rn.AND.nint(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.).OR. &
200 (itr.eq.
id_pb.AND.nint(masktr(i)).EQ.1.AND.lat(i).GE.60..AND.lat(i).LE.70.) )
THEN
201 zx_trs(i) = local_trs(i)
203 +(fshtr(i)/2.)*dtime*rotrhi(i) &
204 +rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg &
205 *(zx_ctr(i,1)*(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2)) &
206 +zx_alpha2(i)*zx_ctr(i,2))
208 zx_b = 1. + rotrhi(i)*masktr(i)*zx_coef(i,1)/
rg &
210 *(zx_alpha1(i)+zx_alpha2(i)*zx_dtr(i,2))) &
212 + dtime * vdeptr / hsoltr
214 zx_trs(i) = zx_a / zx_b
215 local_trs(i) = zx_trs(i)
225 IF ( (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.0).OR. &
226 (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.1.AND.lat(i).LT.-60.))
THEN
234 IF ( (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.0).OR. &
235 (itr.EQ.
id_rn.AND.nint(masktr(i)).EQ.1.AND.lat(i).GT.70.))
THEN
243 IF (itr.eq.
id_rn.AND.nint(masktr(i)).EQ.0)
THEN
255 local_tr(i,1) = zx_ctr(i,1)+zx_dtr(i,1)*zx_trs(i)
259 local_tr(i,l) = zx_ctr(i,l) + zx_dtr(i,l)*local_tr(i,l-1)
266 flux_tr(i,1) = masktr(i)*zx_coef(i,1)/
rg &
267 * (zx_alpha1(i)*local_tr(i,1)+zx_alpha2(i)*local_tr(i,2) &
272 flux_tr(i,l) = zx_coef(i,l)/
rg &
273 * (local_tr(i,l)-local_tr(i,l-1)) / dtime
281 d_tr(i,l) = local_tr(i,l) - tr(i,l)
285 d_trs(i) = local_trs(i) - trs(i)
!$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 pplay
subroutine cltracrn(itr, dtime, u1lay, v1lay, cdrag, coef, t, ftsol, pctsrf, tr, trs, paprs, pplay, delp, masktr, fshtr, hsoltr, tautr, vdeptr, lat, d_tr, d_trs)
!$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 &zphi geo500!IM on interpole a chaque pas de temps le paprs
subroutine cdrag(knon, nsrf, speed, t1, q1, zgeop1, psol, tsurf, qsurf, z0m, z0h, pcfm, pcfh, zri, pref)