1 !---------------------------------------------------------------------
3 !---------------------------------------------------------------------
4 if (forcing_GCSSold) then
16 !!!
tsurf = ts_gcssold
18 !
u(l) = hu_gcssold(l) ! on prescrit le vent
21 ! rho(l) =
play(l)/(rd*
temp(l)*(1.+(rv/rd-1.)*
q(l,1)))
22 ! omega2(l)=-rho(l)*omega(l)
24 omega2(l)= omega(l)/rg*
airefi ! flxmass_w calcule comme ds
physiq
27 d_th_adv(l) = ht_gcssold(l)
32 endif ! forcing_GCSSold
33 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
34 !---------------------------------------------------------------------
36 !---------------------------------------------------------------------
37 if (forcing_toga) then
41 : '
#### ITAP,day,day1,(day-day1)*86400,(day-day1)*86400/dt_toga=',
46 CALL interp_toga_time(daytime,day1,
annee_ref
53 if (type_ts_forcing.eq.1) ts_cur =
ts_prof ! SST used in read_tsurf1d
65 u(l) = u_mod(l) ! sb: on prescrit le vent
66 v(l) = v_mod(l) ! sb: on prescrit le vent
67 ! omega(l) = w_prof(l)
68 ! rho(l) = play(l)/(rd*
temp(l)*(1.+(rv/rd-1.)*
q(l,1)))
69 ! omega2(l)=-rho(l)*omega(l)
71 omega2(l)= omega(l)/rg*
airefi ! flxmass_w calcule comme ds
physiq
73 alpha = rd*
temp(l)*(1.+(rv/rd-1.)*
q(l,1))/play(l)
74 d_th_adv(l) =
alpha*omega(l)/rcpd-(ht_mod(l)+vt_mod(l))
75 d_q_adv(l,1) = -(hq_mod(l)+vq_mod(l))
80 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
81 !---------------------------------------------------------------------
83 !---------------------------------------------------------------------
84 if (forcing_twpice) then
87 : '
#### ITAP,day,day1,(day-day1)*86400,(day-day1)*86400/dt_twpi=',
88 : daytime,
day1,(daytime-
day1)*86400.,
92 CALL interp_toga_time(daytime,day1,
annee_ref
104 : ,t_mod,q_mod,u_mod,v_mod,w_mod
105 : ,ht_mod,vt_mod,hq_mod,vq_mod,mxcalc)
108 !calcul
de l
'advection verticale a partir du omega
109 cCalcul des gradients verticaux
116 d_t_z(l)=(temp(l+1)-temp(l-1))
117 & /(play(l+1)-play(l-1))
118 d_q_z(l)=(q(l+1,1)-q(l-1,1))
119 & /(play(l+1)-play(l-1))
123 d_t_z(llm)=d_t_z(llm-1)
124 d_q_z(llm)=d_q_z(llm-1)
126 cCalcul de l advection verticale
127 d_t_dyn_z(:)=w_mod(:)*d_t_z(:)
128 d_q_dyn_z(:)=w_mod(:)*d_q_z(:)
130 !wind nudging above 500m with a 2h time scale
133 ! if (phi(l).gt.5000.) then
134 if (phi(l).gt.0.) then
136 . +timestep*(u_mod(l)-u(l))/(2.*3600.)
138 . +timestep*(v_mod(l)-v(l))/(2.*3600.)
146 !CR:nudging of q and theta with a 6h time scale above 15km
147 if (nudge_thermo) then
150 if ((zz(l).le.16000.).and.(zz(l).gt.15000.)) then
151 zfact=(zz(l)-15000.)/1000.
153 . +timestep*(q_mod(l)-q(l,1))/(6.*3600.)*zfact
155 . +timestep*(t_mod(l)-temp(l))/(6.*3600.)*zfact
156 else if (zz(l).gt.16000.) then
158 . +timestep*(q_mod(l)-q(l,1))/(6.*3600.)
160 . +timestep*(t_mod(l)-temp(l))/(6.*3600.)
167 omega2(l)= omega(l)/rg*airefi ! flxmass_w calcule comme ds physiq
168 alpha = rd*temp(l)*(1.+(rv/rd-1.)*q(l,1))/play(l)
169 !calcul de l'advection totale
171 d_th_adv(l) =
alpha*omega(l)/rcpd+
ht_mod(l)-d_t_dyn_z(l)
173 d_q_adv(l,1) = hq_mod(l)-d_q_dyn_z(l)
174 ! print*,'
q vert adv',l,hq_mod(l),vq_mod(l),-d_q_dyn_z(l)
176 d_th_adv(l) =
alpha*omega(l)/rcpd+(ht_mod(l)+vt_mod(l))
177 d_q_adv(l,1) = (hq_mod(l)+vq_mod(l))
182 endif ! forcing_twpice
183 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
184 !---------------------------------------------------------------------
186 !---------------------------------------------------------------------
187 if (forcing_rico) then
188 ! call lstendH(llm,omega,dt_dyn,dq_dyn,du_dyn, dv_dyn,
190 call lstendH(llm,nqtot,omega,dt_dyn,dq_dyn,
194 d_th_adv(l) = (dth_rico(l) + dt_dyn(l))
195 d_q_adv(l,1) = (dqh_rico(l) + dq_dyn(l,1))
199 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
200 !---------------------------------------------------------------------
202 !---------------------------------------------------------------------
203 if (forcing_armcu) then
206 : '
#### ITAP,day,day1,(day-day1)*86400,(day-day1)*86400/dt_armcu=',
210 ! ATTENTION, cet appel ne convient pas pour TOGA !!
212 CALL interp_armcu_time(daytime,day1,
annee_ref
213 i ,year_ini_armcu,day_ju_ini_armcu,nt_armcu,dt_armcu
214 i ,nlev_armcu,sens_armcu,flat_armcu,adv_theta_armcu
215 i ,rad_theta_armcu,adv_qt_armcu,sens_prof,flat_prof
216 i ,adv_theta_prof,rad_theta_prof,adv_qt_prof)
221 ! For
this case, fluxes are imposed
225 ! Advective forcings are given in
K or
g/kg ... BY HOUR
229 IF((phi(l)/
RG).LT.1000) THEN
230 d_th_adv(l) = (adv_theta_prof + rad_theta_prof)/3600.
231 d_q_adv(l,1) = adv_qt_prof/1000./3600.
233 ! print *,'INF1000: phi dth dq1 dq2',
234 ! : phi(l)/
RG,d_th_adv(l),d_q_adv(l,1),d_q_adv(l,2)
235 ELSEIF ((phi(l)/RG).GE.1000.AND.(phi(l)/RG).lt.3000) THEN
236 fact=((phi(l)/RG)-1000.)/2000.
238 d_th_adv(l) = (adv_theta_prof + rad_theta_prof)*fact/3600.
239 d_q_adv(l,1) = adv_qt_prof*fact/1000./3600.
241 ! print *,'SUP1000: phi fact dth dq1 dq2',
242 ! : phi(l)/RG,fact,d_th_adv(l),d_q_adv(l,1),d_q_adv(l,2)
247 ! print *,'SUP3000: phi dth dq1 dq2',
248 ! : phi(l)/RG,d_th_adv(l),d_q_adv(l,1),d_q_adv(l,2)
251 ! print *,'Interp armcu: phi dth dq1 dq2',
252 ! : l,phi(l),d_th_adv(l),d_q_adv(l,1),d_q_adv(l,2)
254 endif ! forcing_armcu
255 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!