1 !WRF:MODEL_LAYER: PHYSICS
3 ! note: this module really belongs in the dyn_em directory since it is
4 ! specific only to the EM core. Leaving here for now, with an
5 ! #if ( EM_CORE == 1 ) directive. JM 20031201
8 ! This MODULE holds the routines which are used to perform updates of the
9 ! model C-grid tendencies with physics A-grid tendencies
10 ! The module consolidates code that was (up to v1.2) duplicated in
11 ! module_em and module_rk and in
12 ! module_big_step_utilities.F and module_big_step_utilities_em.F
14 ! This MODULE CONTAINS the following routines:
15 ! update_phy_ten, phy_ra_ten, phy_bl_ten, phy_cu_ten, advance_ppt,
16 ! add_a2a, add_a2c_u, and add_a2c_v
19 MODULE module_physics_addtendc
23 USE module_state_description
28 SUBROUTINE update_phy_ten(rph_tendf,rt_tendf,ru_tendf,rv_tendf,moist_tendf, &
29 scalar_tendf,mu_tendf, &
30 RTHRATEN,RTHBLTEN,RTHCUTEN,RTHSHTEN, &
31 RUBLTEN,RUCUTEN,RUSHTEN, &
32 RVBLTEN,RVCUTEN,RVSHTEN, &
33 RQVBLTEN,RQCBLTEN,RQIBLTEN, &
34 RQVCUTEN,RQCCUTEN,RQRCUTEN,RQICUTEN,RQSCUTEN, &
35 RQVSHTEN,RQCSHTEN,RQRSHTEN,RQISHTEN,RQSSHTEN,RQGSHTEN,&
36 RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,RPHNDGDTEN, &
37 RQVNDGDTEN,RMUNDGDTEN, &
38 rthfrten,rqvfrten, & !fire
39 n_moist,n_scalar,config_flags,rk_step,adv_moist_cond, &
40 ids, ide, jds, jde, kds, kde, &
41 ims, ime, jms, jme, kms, kme, &
42 its, ite, jts, jte, kts, kte )
43 !-------------------------------------------------------------------
45 !-------------------------------------------------------------------
47 TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
49 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
50 ims, ime, jms, jme, kms, kme, &
51 its, ite, jts, jte, kts, kte, &
52 n_moist,n_scalar,rk_step
54 LOGICAL , INTENT(IN) :: adv_moist_cond
56 REAL , DIMENSION(ims:ime , kms:kme, jms:jme),INTENT(INOUT) :: &
62 REAL , DIMENSION(ims:ime , jms:jme),INTENT(INOUT) :: mu_tendf
64 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
65 INTENT(INOUT) :: moist_tendf
67 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar), &
68 INTENT(INOUT) :: scalar_tendf
70 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
101 REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN ) :: RMUNDGDTEN
103 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: & ! fire
106 !------------------------------------------------------------------
107 ! set up loop bounds for this grid's boundary conditions
109 if (config_flags%ra_lw_physics .gt. 0 .or. &
110 config_flags%ra_sw_physics .gt. 0) &
111 CALL phy_ra_ten(config_flags,rt_tendf,RTHRATEN, &
112 ids, ide, jds, jde, kds, kde, &
113 ims, ime, jms, jme, kms, kme, &
114 its, ite, jts, jte, kts, kte )
116 if (config_flags%bl_pbl_physics .gt. 0) &
117 CALL phy_bl_ten(config_flags,rk_step,n_moist,n_scalar, &
118 rt_tendf,ru_tendf,rv_tendf,moist_tendf, &
119 scalar_tendf,adv_moist_cond, &
120 RTHBLTEN,RUBLTEN,RVBLTEN, &
121 RQVBLTEN,RQCBLTEN,RQIBLTEN, &
122 ids, ide, jds, jde, kds, kde, &
123 ims, ime, jms, jme, kms, kme, &
124 its, ite, jts, jte, kts, kte )
126 if (config_flags%cu_physics .gt. 0) &
127 CALL phy_cu_ten(config_flags,rk_step,n_moist,n_scalar, &
128 rt_tendf,ru_tendf,rv_tendf, &
129 RUCUTEN,RVCUTEN,RTHCUTEN, &
130 RQVCUTEN,RQCCUTEN,RQRCUTEN, &
131 RQICUTEN,RQSCUTEN,moist_tendf, &
132 scalar_tendf,adv_moist_cond, &
133 ids, ide, jds, jde, kds, kde, &
134 ims, ime, jms, jme, kms, kme, &
135 its, ite, jts, jte, kts, kte )
137 if (config_flags%shcu_physics .gt. 0) &
138 CALL phy_shcu_ten(config_flags,rk_step,n_moist, &
139 rt_tendf,ru_tendf,rv_tendf, &
140 RUSHTEN,RVSHTEN,RTHSHTEN, &
141 RQVSHTEN,RQCSHTEN,RQRSHTEN, &
142 RQISHTEN,RQSSHTEN,RQGSHTEN,moist_tendf, &
143 ids, ide, jds, jde, kds, kde, &
144 ims, ime, jms, jme, kms, kme, &
145 its, ite, jts, jte, kts, kte )
147 if (config_flags%grid_fdda .gt. 0) &
148 CALL phy_fg_ten(config_flags,rk_step,n_moist, &
149 rph_tendf,rt_tendf,ru_tendf,rv_tendf, &
150 mu_tendf, moist_tendf, &
151 RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, &
152 RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
153 ids, ide, jds, jde, kds, kde, &
154 ims, ime, jms, jme, kms, kme, &
155 its, ite, jts, jte, kts, kte )
157 if (config_flags%ifire .gt. 0) & ! fire
158 CALL phy_fr_ten(config_flags,rk_step,n_moist, &
159 rt_tendf,ru_tendf,rv_tendf, &
160 mu_tendf, moist_tendf, &
162 ids, ide, jds, jde, kds, kde, &
163 ims, ime, jms, jme, kms, kme, &
164 its, ite, jts, jte, kts, kte )
166 END SUBROUTINE update_phy_ten
168 !=================================================================
169 SUBROUTINE phy_ra_ten(config_flags,rt_tendf,RTHRATEN, &
170 ids, ide, jds, jde, kds, kde, &
171 ims, ime, jms, jme, kms, kme, &
172 its, ite, jts, jte, kts, kte )
173 !-----------------------------------------------------------------
175 !-----------------------------------------------------------------
176 TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
178 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
179 ims, ime, jms, jme, kms, kme, &
180 its, ite, jts, jte, kts, kte
182 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
185 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
192 CALL add_a2a(rt_tendf,RTHRATEN,config_flags, &
193 ids,ide, jds, jde, kds, kde, &
194 ims, ime, jms, jme, kms, kme, &
195 its, ite, jts, jte, kts, kte )
197 END SUBROUTINE phy_ra_ten
199 !=================================================================
200 SUBROUTINE phy_bl_ten(config_flags,rk_step,n_moist,n_scalar, &
201 rt_tendf,ru_tendf,rv_tendf,moist_tendf, &
202 scalar_tendf,adv_moist_cond, &
203 RTHBLTEN,RUBLTEN,RVBLTEN, &
204 RQVBLTEN,RQCBLTEN,RQIBLTEN, &
205 ids, ide, jds, jde, kds, kde, &
206 ims, ime, jms, jme, kms, kme, &
207 its, ite, jts, jte, kts, kte )
208 !-----------------------------------------------------------------
210 !-----------------------------------------------------------------
211 TYPE(grid_config_rec_type) , INTENT(IN ) :: config_flags
213 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
214 ims, ime, jms, jme, kms, kme, &
215 its, ite, jts, jte, kts, kte, &
216 n_moist, n_scalar, rk_step
218 LOGICAL , INTENT(IN) :: adv_moist_cond
220 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
221 INTENT(INOUT) :: moist_tendf
223 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar), &
224 INTENT(INOUT) :: scalar_tendf
226 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
234 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: &
240 INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
242 !-----------------------------------------------------------------
244 SELECT CASE(config_flags%bl_pbl_physics)
248 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
249 ids,ide, jds, jde, kds, kde, &
250 ims, ime, jms, jme, kms, kme, &
251 its, ite, jts, jte, kts, kte )
253 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
254 ids,ide, jds, jde, kds, kde, &
255 ims, ime, jms, jme, kms, kme, &
256 its, ite, jts, jte, kts, kte )
258 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
259 ids,ide, jds, jde, kds, kde, &
260 ims, ime, jms, jme, kms, kme, &
261 its, ite, jts, jte, kts, kte )
263 if (P_QV .ge. PARAM_FIRST_SCALAR) &
264 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
266 ids,ide, jds, jde, kds, kde, &
267 ims, ime, jms, jme, kms, kme, &
268 its, ite, jts, jte, kts, kte )
270 if (P_QC .ge. PARAM_FIRST_SCALAR) &
271 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
273 ids,ide, jds, jde, kds, kde, &
274 ims, ime, jms, jme, kms, kme, &
275 its, ite, jts, jte, kts, kte )
277 if (P_QI .ge. PARAM_FIRST_SCALAR) &
278 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
280 ids,ide, jds, jde, kds, kde, &
281 ims, ime, jms, jme, kms, kme, &
282 its, ite, jts, jte, kts, kte )
284 IF(.not. adv_moist_cond)THEN
286 if (P_QT .ge. PARAM_FIRST_SCALAR) &
287 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
289 ids,ide, jds, jde, kds, kde, &
290 ims, ime, jms, jme, kms, kme, &
291 its, ite, jts, jte, kts, kte )
293 if (P_QT .ge. PARAM_FIRST_SCALAR) &
294 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
296 ids,ide, jds, jde, kds, kde, &
297 ims, ime, jms, jme, kms, kme, &
298 its, ite, jts, jte, kts, kte )
303 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
304 ids,ide, jds, jde, kds, kde, &
305 ims, ime, jms, jme, kms, kme, &
306 its, ite, jts, jte, kts, kte )
308 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
309 ids,ide, jds, jde, kds, kde, &
310 ims, ime, jms, jme, kms, kme, &
311 its, ite, jts, jte, kts, kte )
313 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
314 ids,ide, jds, jde, kds, kde, &
315 ims, ime, jms, jme, kms, kme, &
316 its, ite, jts, jte, kts, kte )
318 if (P_QV .ge. PARAM_FIRST_SCALAR) &
319 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
321 ids,ide, jds, jde, kds, kde, &
322 ims, ime, jms, jme, kms, kme, &
323 its, ite, jts, jte, kts, kte )
325 if (P_QC .ge. PARAM_FIRST_SCALAR) &
326 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
328 ids,ide, jds, jde, kds, kde, &
329 ims, ime, jms, jme, kms, kme, &
330 its, ite, jts, jte, kts, kte )
332 if (P_QI .ge. PARAM_FIRST_SCALAR) &
333 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
335 ids,ide, jds, jde, kds, kde, &
336 ims, ime, jms, jme, kms, kme, &
337 its, ite, jts, jte, kts, kte )
339 IF(.not. adv_moist_cond)THEN
341 if (P_QT .ge. PARAM_FIRST_SCALAR) &
342 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
344 ids,ide, jds, jde, kds, kde, &
345 ims, ime, jms, jme, kms, kme, &
346 its, ite, jts, jte, kts, kte )
348 if (P_QT .ge. PARAM_FIRST_SCALAR) &
349 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
351 ids,ide, jds, jde, kds, kde, &
352 ims, ime, jms, jme, kms, kme, &
353 its, ite, jts, jte, kts, kte )
358 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
359 ids,ide, jds, jde, kds, kde, &
360 ims, ime, jms, jme, kms, kme, &
361 its, ite, jts, jte, kts, kte )
363 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
364 ids,ide, jds, jde, kds, kde, &
365 ims, ime, jms, jme, kms, kme, &
366 its, ite, jts, jte, kts, kte )
368 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
369 ids,ide, jds, jde, kds, kde, &
370 ims, ime, jms, jme, kms, kme, &
371 its, ite, jts, jte, kts, kte )
373 if (P_QV .ge. PARAM_FIRST_SCALAR) &
374 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
376 ids,ide, jds, jde, kds, kde, &
377 ims, ime, jms, jme, kms, kme, &
378 its, ite, jts, jte, kts, kte )
380 if (P_QC .ge. PARAM_FIRST_SCALAR) &
381 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
383 ids,ide, jds, jde, kds, kde, &
384 ims, ime, jms, jme, kms, kme, &
385 its, ite, jts, jte, kts, kte )
387 if (P_QI .ge. PARAM_FIRST_SCALAR) &
388 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
390 ids,ide, jds, jde, kds, kde, &
391 ims, ime, jms, jme, kms, kme, &
392 its, ite, jts, jte, kts, kte )
394 IF(.not. adv_moist_cond)THEN
396 if (P_QT .ge. PARAM_FIRST_SCALAR)THEN
397 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
399 ids,ide, jds, jde, kds, kde, &
400 ims, ime, jms, jme, kms, kme, &
401 its, ite, jts, jte, kts, kte )
403 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
405 ids,ide, jds, jde, kds, kde, &
406 ims, ime, jms, jme, kms, kme, &
407 its, ite, jts, jte, kts, kte )
414 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
415 ids,ide, jds, jde, kds, kde, &
416 ims, ime, jms, jme, kms, kme, &
417 its, ite, jts, jte, kts, kte )
419 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
420 ids,ide, jds, jde, kds, kde, &
421 ims, ime, jms, jme, kms, kme, &
422 its, ite, jts, jte, kts, kte )
424 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
425 ids,ide, jds, jde, kds, kde, &
426 ims, ime, jms, jme, kms, kme, &
427 its, ite, jts, jte, kts, kte )
429 if (P_QV .ge. PARAM_FIRST_SCALAR) &
430 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
432 ids,ide, jds, jde, kds, kde, &
433 ims, ime, jms, jme, kms, kme, &
434 its, ite, jts, jte, kts, kte )
436 IF(.not. adv_moist_cond)THEN
438 if (P_QT .ge. PARAM_FIRST_SCALAR) &
439 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
441 ids,ide, jds, jde, kds, kde, &
442 ims, ime, jms, jme, kms, kme, &
443 its, ite, jts, jte, kts, kte )
445 if (P_QT .ge. PARAM_FIRST_SCALAR) &
446 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
448 ids,ide, jds, jde, kds, kde, &
449 ims, ime, jms, jme, kms, kme, &
450 its, ite, jts, jte, kts, kte )
452 ! if (P_QT .ge. PARAM_FIRST_SCALAR) &
453 ! CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQSBLTEN, &
455 ! ids,ide, jds, jde, kds, kde, &
456 ! ims, ime, jms, jme, kms, kme, &
457 ! its, ite, jts, jte, kts, kte )
459 ! if (P_QT .ge. PARAM_FIRST_SCALAR) &
460 ! CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQRBLTEN, &
462 ! ids,ide, jds, jde, kds, kde, &
463 ! ims, ime, jms, jme, kms, kme, &
464 ! its, ite, jts, jte, kts, kte )
466 ! if (P_QT .ge. PARAM_FIRST_SCALAR) &
467 ! CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQGBLTEN, &
469 ! ids,ide, jds, jde, kds, kde, &
470 ! ims, ime, jms, jme, kms, kme, &
471 ! its, ite, jts, jte, kts, kte )
475 if (P_QC .ge. PARAM_FIRST_SCALAR) &
476 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
478 ids,ide, jds, jde, kds, kde, &
479 ims, ime, jms, jme, kms, kme, &
480 its, ite, jts, jte, kts, kte )
482 if (P_QI .ge. PARAM_FIRST_SCALAR) &
483 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
485 ids,ide, jds, jde, kds, kde, &
486 ims, ime, jms, jme, kms, kme, &
487 its, ite, jts, jte, kts, kte )
489 ! if (P_QS .ge. PARAM_FIRST_SCALAR) &
490 ! CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSBLTEN, &
492 ! ids,ide, jds, jde, kds, kde, &
493 ! ims, ime, jms, jme, kms, kme, &
494 ! its, ite, jts, jte, kts, kte )
496 ! if (P_QR .ge. PARAM_FIRST_SCALAR) &
497 ! CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRBLTEN, &
499 ! ids,ide, jds, jde, kds, kde, &
500 ! ims, ime, jms, jme, kms, kme, &
501 ! its, ite, jts, jte, kts, kte )
503 ! if (P_QG .ge. PARAM_FIRST_SCALAR) &
504 ! CALL add_a2a(moist_tendf(ims,kms,jms,P_QG),RQGBLTEN, &
506 ! ids,ide, jds, jde, kds, kde, &
507 ! ims, ime, jms, jme, kms, kme, &
508 ! its, ite, jts, jte, kts, kte )
512 CASE (QNSEPBLSCHEME,QNSEPBL09SCHEME)
514 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
515 ids,ide, jds, jde, kds, kde, &
516 ims, ime, jms, jme, kms, kme, &
517 its, ite, jts, jte, kts, kte )
519 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
520 ids,ide, jds, jde, kds, kde, &
521 ims, ime, jms, jme, kms, kme, &
522 its, ite, jts, jte, kts, kte )
524 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
525 ids,ide, jds, jde, kds, kde, &
526 ims, ime, jms, jme, kms, kme, &
527 its, ite, jts, jte, kts, kte )
529 if (P_QV .ge. PARAM_FIRST_SCALAR) &
530 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
532 ids,ide, jds, jde, kds, kde, &
533 ims, ime, jms, jme, kms, kme, &
534 its, ite, jts, jte, kts, kte )
536 IF(.not. adv_moist_cond)THEN
538 if (P_QT .ge. PARAM_FIRST_SCALAR) &
539 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
541 ids,ide, jds, jde, kds, kde, &
542 ims, ime, jms, jme, kms, kme, &
543 its, ite, jts, jte, kts, kte )
547 if (P_QC .ge. PARAM_FIRST_SCALAR) &
548 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
550 ids,ide, jds, jde, kds, kde, &
551 ims, ime, jms, jme, kms, kme, &
552 its, ite, jts, jte, kts, kte )
558 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
559 ids,ide, jds, jde, kds, kde, &
560 ims, ime, jms, jme, kms, kme, &
561 its, ite, jts, jte, kts, kte )
563 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
564 ids,ide, jds, jde, kds, kde, &
565 ims, ime, jms, jme, kms, kme, &
566 its, ite, jts, jte, kts, kte )
568 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
569 ids,ide, jds, jde, kds, kde, &
570 ims, ime, jms, jme, kms, kme, &
571 its, ite, jts, jte, kts, kte )
573 if (P_QV .ge. PARAM_FIRST_SCALAR) &
574 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
576 ids,ide, jds, jde, kds, kde, &
577 ims, ime, jms, jme, kms, kme, &
578 its, ite, jts, jte, kts, kte )
580 if (P_QC .ge. PARAM_FIRST_SCALAR) &
581 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
583 ids,ide, jds, jde, kds, kde, &
584 ims, ime, jms, jme, kms, kme, &
585 its, ite, jts, jte, kts, kte )
587 if (P_QI .ge. PARAM_FIRST_SCALAR) &
588 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
590 ids,ide, jds, jde, kds, kde, &
591 ims, ime, jms, jme, kms, kme, &
592 its, ite, jts, jte, kts, kte )
594 IF(.not. adv_moist_cond)THEN
596 if (P_QT .ge. PARAM_FIRST_SCALAR) &
597 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
599 ids,ide, jds, jde, kds, kde, &
600 ims, ime, jms, jme, kms, kme, &
601 its, ite, jts, jte, kts, kte )
603 if (P_QT .ge. PARAM_FIRST_SCALAR) &
604 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQIBLTEN, &
606 ids,ide, jds, jde, kds, kde, &
607 ims, ime, jms, jme, kms, kme, &
608 its, ite, jts, jte, kts, kte )
611 CASE (MYNNPBLSCHEME2,MYNNPBLSCHEME3)
613 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
614 ids,ide, jds, jde, kds, kde, &
615 ims, ime, jms, jme, kms, kme, &
616 its, ite, jts, jte, kts, kte )
618 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
619 ids,ide, jds, jde, kds, kde, &
620 ims, ime, jms, jme, kms, kme, &
621 its, ite, jts, jte, kts, kte )
623 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
624 ids,ide, jds, jde, kds, kde, &
625 ims, ime, jms, jme, kms, kme, &
626 its, ite, jts, jte, kts, kte )
628 if (P_QV .ge. PARAM_FIRST_SCALAR) &
629 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
631 ids,ide, jds, jde, kds, kde, &
632 ims, ime, jms, jme, kms, kme, &
633 its, ite, jts, jte, kts, kte )
635 if (P_QC .ge. PARAM_FIRST_SCALAR) &
636 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
638 ids,ide, jds, jde, kds, kde, &
639 ims, ime, jms, jme, kms, kme, &
640 its, ite, jts, jte, kts, kte )
642 IF(.not. adv_moist_cond)THEN
644 if (P_QT .ge. PARAM_FIRST_SCALAR) &
645 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
647 ids,ide, jds, jde, kds, kde, &
648 ims, ime, jms, jme, kms, kme, &
649 its, ite, jts, jte, kts, kte )
655 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
656 ids,ide, jds, jde, kds, kde, &
657 ims, ime, jms, jme, kms, kme, &
658 its, ite, jts, jte, kts, kte )
660 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
661 ids,ide, jds, jde, kds, kde, &
662 ims, ime, jms, jme, kms, kme, &
663 its, ite, jts, jte, kts, kte )
665 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
666 ids,ide, jds, jde, kds, kde, &
667 ims, ime, jms, jme, kms, kme, &
668 its, ite, jts, jte, kts, kte )
670 if (P_QV .ge. PARAM_FIRST_SCALAR) &
671 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
673 ids,ide, jds, jde, kds, kde, &
674 ims, ime, jms, jme, kms, kme, &
675 its, ite, jts, jte, kts, kte )
677 IF(.not. adv_moist_cond)THEN
679 if (P_QT .ge. PARAM_FIRST_SCALAR) &
680 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
682 ids,ide, jds, jde, kds, kde, &
683 ims, ime, jms, jme, kms, kme, &
684 its, ite, jts, jte, kts, kte )
688 if (P_QC .ge. PARAM_FIRST_SCALAR) &
689 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
691 ids,ide, jds, jde, kds, kde, &
692 ims, ime, jms, jme, kms, kme, &
693 its, ite, jts, jte, kts, kte )
696 CASE (CAMUWPBLSCHEME)
697 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
698 ids,ide, jds, jde, kds, kde, &
699 ims, ime, jms, jme, kms, kme, &
700 its, ite, jts, jte, kts, kte )
702 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
703 ids,ide, jds, jde, kds, kde, &
704 ims, ime, jms, jme, kms, kme, &
705 its, ite, jts, jte, kts, kte )
707 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
708 ids,ide, jds, jde, kds, kde, &
709 ims, ime, jms, jme, kms, kme, &
710 its, ite, jts, jte, kts, kte )
712 if (P_QV .ge. PARAM_FIRST_SCALAR) &
713 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
715 ids,ide, jds, jde, kds, kde, &
716 ims, ime, jms, jme, kms, kme, &
717 its, ite, jts, jte, kts, kte )
719 IF(.not. adv_moist_cond)THEN
721 if (P_QT .ge. PARAM_FIRST_SCALAR) &
722 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCBLTEN, &
724 ids,ide, jds, jde, kds, kde, &
725 ims, ime, jms, jme, kms, kme, &
726 its, ite, jts, jte, kts, kte )
730 if (P_QC .ge. PARAM_FIRST_SCALAR) &
731 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
733 ids,ide, jds, jde, kds, kde, &
734 ims, ime, jms, jme, kms, kme, &
735 its, ite, jts, jte, kts, kte )
740 CALL add_a2a(rt_tendf,RTHBLTEN,config_flags, &
741 ids,ide, jds, jde, kds, kde, &
742 ims, ime, jms, jme, kms, kme, &
743 its, ite, jts, jte, kts, kte )
745 CALL add_a2c_u(ru_tendf,RUBLTEN,config_flags, &
746 ids,ide, jds, jde, kds, kde, &
747 ims, ime, jms, jme, kms, kme, &
748 its, ite, jts, jte, kts, kte )
750 CALL add_a2c_v(rv_tendf,RVBLTEN,config_flags, &
751 ids,ide, jds, jde, kds, kde, &
752 ims, ime, jms, jme, kms, kme, &
753 its, ite, jts, jte, kts, kte )
755 if (P_QV .ge. PARAM_FIRST_SCALAR) &
756 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVBLTEN, &
758 ids,ide, jds, jde, kds, kde, &
759 ims, ime, jms, jme, kms, kme, &
760 its, ite, jts, jte, kts, kte )
762 if (P_QC .ge. PARAM_FIRST_SCALAR) &
763 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCBLTEN, &
765 ids,ide, jds, jde, kds, kde, &
766 ims, ime, jms, jme, kms, kme, &
767 its, ite, jts, jte, kts, kte )
769 if (P_QI .ge. PARAM_FIRST_SCALAR) &
770 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQIBLTEN, &
772 ids,ide, jds, jde, kds, kde, &
773 ims, ime, jms, jme, kms, kme, &
774 its, ite, jts, jte, kts, kte )
778 print*,'phy_bl_ten: The pbl scheme does not exist'
782 END SUBROUTINE phy_bl_ten
784 !=================================================================
785 SUBROUTINE phy_cu_ten(config_flags,rk_step,n_moist,n_scalar, &
786 rt_tendf,ru_tendf,rv_tendf, &
787 RUCUTEN,RVCUTEN,RTHCUTEN, &
788 RQVCUTEN,RQCCUTEN,RQRCUTEN, &
789 RQICUTEN,RQSCUTEN,moist_tendf, &
790 scalar_tendf,adv_moist_cond, &
791 ids, ide, jds, jde, kds, kde, &
792 ims, ime, jms, jme, kms, kme, &
793 its, ite, jts, jte, kts, kte )
794 !-----------------------------------------------------------------
796 !-----------------------------------------------------------------
797 TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
799 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
800 ims, ime, jms, jme, kms, kme, &
801 its, ite, jts, jte, kts, kte, &
802 n_moist, n_scalar, rk_step
804 LOGICAL , INTENT(IN) :: adv_moist_cond
806 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
807 INTENT(INOUT) :: moist_tendf
809 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_scalar), &
810 INTENT(INOUT) :: scalar_tendf
812 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
822 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
832 SELECT CASE (config_flags%cu_physics)
835 CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
836 ids,ide, jds, jde, kds, kde, &
837 ims, ime, jms, jme, kms, kme, &
838 its, ite, jts, jte, kts, kte )
840 if (P_QV .ge. PARAM_FIRST_SCALAR) &
841 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
843 ids,ide, jds, jde, kds, kde, &
844 ims, ime, jms, jme, kms, kme, &
845 its, ite, jts, jte, kts, kte )
847 if (P_QC .ge. PARAM_FIRST_SCALAR) &
848 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
850 ids,ide, jds, jde, kds, kde, &
851 ims, ime, jms, jme, kms, kme, &
852 its, ite, jts, jte, kts, kte )
854 if (P_QR .ge. PARAM_FIRST_SCALAR) &
855 CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRCUTEN, &
857 ids,ide, jds, jde, kds, kde, &
858 ims, ime, jms, jme, kms, kme, &
859 its, ite, jts, jte, kts, kte )
861 if (P_QI .ge. PARAM_FIRST_SCALAR) &
862 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
864 ids,ide, jds, jde, kds, kde, &
865 ims, ime, jms, jme, kms, kme, &
866 its, ite, jts, jte, kts, kte )
868 if (P_QS .ge. PARAM_FIRST_SCALAR) &
869 CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSCUTEN, &
871 ids,ide, jds, jde, kds, kde, &
872 ims, ime, jms, jme, kms, kme, &
873 its, ite, jts, jte, kts, kte )
875 IF(.not. adv_moist_cond)THEN
877 if (P_QT .ge. PARAM_FIRST_SCALAR) &
878 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
880 ids,ide, jds, jde, kds, kde, &
881 ims, ime, jms, jme, kms, kme, &
882 its, ite, jts, jte, kts, kte )
884 if (P_QT .ge. PARAM_FIRST_SCALAR) &
885 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQRCUTEN, &
887 ids,ide, jds, jde, kds, kde, &
888 ims, ime, jms, jme, kms, kme, &
889 its, ite, jts, jte, kts, kte )
891 if (P_QT .ge. PARAM_FIRST_SCALAR) &
892 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
894 ids,ide, jds, jde, kds, kde, &
895 ims, ime, jms, jme, kms, kme, &
896 its, ite, jts, jte, kts, kte )
898 if (P_QT .ge. PARAM_FIRST_SCALAR) &
899 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQSCUTEN, &
901 ids,ide, jds, jde, kds, kde, &
902 ims, ime, jms, jme, kms, kme, &
903 its, ite, jts, jte, kts, kte )
908 CALL add_a2a(rt_tendf,RTHCUTEN, &
910 ids,ide, jds, jde, kds, kde, &
911 ims, ime, jms, jme, kms, kme, &
912 its, ite, jts, jte, kts, kte )
914 if (P_QV .ge. PARAM_FIRST_SCALAR) &
915 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
917 ids,ide, jds, jde, kds, kde, &
918 ims, ime, jms, jme, kms, kme, &
919 its, ite, jts, jte, kts, kte )
922 CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
923 ids,ide, jds, jde, kds, kde, &
924 ims, ime, jms, jme, kms, kme, &
925 its, ite, jts, jte, kts, kte )
927 if (P_QV .ge. PARAM_FIRST_SCALAR) &
928 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
930 ids,ide, jds, jde, kds, kde, &
931 ims, ime, jms, jme, kms, kme, &
932 its, ite, jts, jte, kts, kte )
934 if (P_QC .ge. PARAM_FIRST_SCALAR) &
935 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
937 ids,ide, jds, jde, kds, kde, &
938 ims, ime, jms, jme, kms, kme, &
939 its, ite, jts, jte, kts, kte )
941 if (P_QR .ge. PARAM_FIRST_SCALAR) &
942 CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRCUTEN, &
944 ids,ide, jds, jde, kds, kde, &
945 ims, ime, jms, jme, kms, kme, &
946 its, ite, jts, jte, kts, kte )
948 if (P_QI .ge. PARAM_FIRST_SCALAR) &
949 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
951 ids,ide, jds, jde, kds, kde, &
952 ims, ime, jms, jme, kms, kme, &
953 its, ite, jts, jte, kts, kte )
955 if (P_QS .ge. PARAM_FIRST_SCALAR) &
956 CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSCUTEN, &
958 ids,ide, jds, jde, kds, kde, &
959 ims, ime, jms, jme, kms, kme, &
960 its, ite, jts, jte, kts, kte )
962 IF(.not. adv_moist_cond)THEN
964 if (P_QT .ge. PARAM_FIRST_SCALAR) &
965 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
967 ids,ide, jds, jde, kds, kde, &
968 ims, ime, jms, jme, kms, kme, &
969 its, ite, jts, jte, kts, kte )
971 if (P_QT .ge. PARAM_FIRST_SCALAR) &
972 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQRCUTEN, &
974 ids,ide, jds, jde, kds, kde, &
975 ims, ime, jms, jme, kms, kme, &
976 its, ite, jts, jte, kts, kte )
978 if (P_QT .ge. PARAM_FIRST_SCALAR) &
979 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
981 ids,ide, jds, jde, kds, kde, &
982 ims, ime, jms, jme, kms, kme, &
983 its, ite, jts, jte, kts, kte )
985 if (P_QT .ge. PARAM_FIRST_SCALAR) &
986 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQSCUTEN, &
988 ids,ide, jds, jde, kds, kde, &
989 ims, ime, jms, jme, kms, kme, &
990 its, ite, jts, jte, kts, kte )
993 CASE (GDSCHEME, G3SCHEME)
994 CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
995 ids,ide, jds, jde, kds, kde, &
996 ims, ime, jms, jme, kms, kme, &
997 its, ite, jts, jte, kts, kte )
999 if (P_QV .ge. PARAM_FIRST_SCALAR) &
1000 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
1002 ids,ide, jds, jde, kds, kde, &
1003 ims, ime, jms, jme, kms, kme, &
1004 its, ite, jts, jte, kts, kte )
1006 if (P_QC .ge. PARAM_FIRST_SCALAR) &
1007 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
1009 ids,ide, jds, jde, kds, kde, &
1010 ims, ime, jms, jme, kms, kme, &
1011 its, ite, jts, jte, kts, kte )
1013 if (P_QI .ge. PARAM_FIRST_SCALAR) &
1014 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
1016 ids,ide, jds, jde, kds, kde, &
1017 ims, ime, jms, jme, kms, kme, &
1018 its, ite, jts, jte, kts, kte )
1020 IF(.not. adv_moist_cond)THEN
1022 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1023 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
1025 ids,ide, jds, jde, kds, kde, &
1026 ims, ime, jms, jme, kms, kme, &
1027 its, ite, jts, jte, kts, kte )
1029 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1030 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
1032 ids,ide, jds, jde, kds, kde, &
1033 ims, ime, jms, jme, kms, kme, &
1034 its, ite, jts, jte, kts, kte )
1039 CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
1040 ids,ide, jds, jde, kds, kde, &
1041 ims, ime, jms, jme, kms, kme, &
1042 its, ite, jts, jte, kts, kte )
1044 CALL add_a2c_u(ru_tendf,RUCUTEN,config_flags, &
1045 ids,ide, jds, jde, kds, kde, &
1046 ims, ime, jms, jme, kms, kme, &
1047 its, ite, jts, jte, kts, kte )
1049 CALL add_a2c_v(rv_tendf,RVCUTEN,config_flags, &
1050 ids,ide, jds, jde, kds, kde, &
1051 ims, ime, jms, jme, kms, kme, &
1052 its, ite, jts, jte, kts, kte )
1054 if (P_QV .ge. PARAM_FIRST_SCALAR) &
1055 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
1057 ids,ide, jds, jde, kds, kde, &
1058 ims, ime, jms, jme, kms, kme, &
1059 its, ite, jts, jte, kts, kte )
1061 if (P_QC .ge. PARAM_FIRST_SCALAR) &
1062 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
1064 ids,ide, jds, jde, kds, kde, &
1065 ims, ime, jms, jme, kms, kme, &
1066 its, ite, jts, jte, kts, kte )
1068 if (P_QI .ge. PARAM_FIRST_SCALAR) &
1069 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
1071 ids,ide, jds, jde, kds, kde, &
1072 ims, ime, jms, jme, kms, kme, &
1073 its, ite, jts, jte, kts, kte )
1075 IF(.not. adv_moist_cond)THEN
1077 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1078 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
1080 ids,ide, jds, jde, kds, kde, &
1081 ims, ime, jms, jme, kms, kme, &
1082 its, ite, jts, jte, kts, kte )
1084 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1085 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
1087 ids,ide, jds, jde, kds, kde, &
1088 ims, ime, jms, jme, kms, kme, &
1089 its, ite, jts, jte, kts, kte )
1093 CASE (SASSCHEME,OSASSCHEME)
1094 CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
1095 ids,ide, jds, jde, kds, kde, &
1096 ims, ime, jms, jme, kms, kme, &
1097 its, ite, jts, jte, kts, kte )
1099 if (P_QV .ge. PARAM_FIRST_SCALAR) &
1100 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
1102 ids,ide, jds, jde, kds, kde, &
1103 ims, ime, jms, jme, kms, kme, &
1104 its, ite, jts, jte, kts, kte )
1106 if (P_QC .ge. PARAM_FIRST_SCALAR) &
1107 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
1109 ids,ide, jds, jde, kds, kde, &
1110 ims, ime, jms, jme, kms, kme, &
1111 its, ite, jts, jte, kts, kte )
1113 if (P_QI .ge. PARAM_FIRST_SCALAR) &
1114 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
1116 ids,ide, jds, jde, kds, kde, &
1117 ims, ime, jms, jme, kms, kme, &
1118 its, ite, jts, jte, kts, kte )
1120 IF(.not. adv_moist_cond)THEN
1122 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1123 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
1125 ids,ide, jds, jde, kds, kde, &
1126 ims, ime, jms, jme, kms, kme, &
1127 its, ite, jts, jte, kts, kte )
1129 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1130 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
1132 ids,ide, jds, jde, kds, kde, &
1133 ims, ime, jms, jme, kms, kme, &
1134 its, ite, jts, jte, kts, kte )
1139 CALL add_a2c_u(ru_tendf,RUCUTEN,config_flags, &
1140 ids,ide, jds, jde, kds, kde, &
1141 ims, ime, jms, jme, kms, kme, &
1142 its, ite, jts, jte, kts, kte )
1144 CALL add_a2c_v(rv_tendf,RVCUTEN,config_flags, &
1145 ids,ide, jds, jde, kds, kde, &
1146 ims, ime, jms, jme, kms, kme, &
1147 its, ite, jts, jte, kts, kte )
1149 CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
1150 ids,ide, jds, jde, kds, kde, &
1151 ims, ime, jms, jme, kms, kme, &
1152 its, ite, jts, jte, kts, kte )
1154 if (P_QV .ge. PARAM_FIRST_SCALAR) &
1155 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
1157 ids,ide, jds, jde, kds, kde, &
1158 ims, ime, jms, jme, kms, kme, &
1159 its, ite, jts, jte, kts, kte )
1161 if (P_QC .ge. PARAM_FIRST_SCALAR) &
1162 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
1164 ids,ide, jds, jde, kds, kde, &
1165 ims, ime, jms, jme, kms, kme, &
1166 its, ite, jts, jte, kts, kte )
1168 if (P_QI .ge. PARAM_FIRST_SCALAR) &
1169 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
1171 ids,ide, jds, jde, kds, kde, &
1172 ims, ime, jms, jme, kms, kme, &
1173 its, ite, jts, jte, kts, kte )
1174 IF(.not. adv_moist_cond)THEN
1176 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1177 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
1179 ids,ide, jds, jde, kds, kde, &
1180 ims, ime, jms, jme, kms, kme, &
1181 its, ite, jts, jte, kts, kte )
1183 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1184 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
1186 ids,ide, jds, jde, kds, kde, &
1187 ims, ime, jms, jme, kms, kme, &
1188 its, ite, jts, jte, kts, kte )
1192 CASE (TIEDTKESCHEME)
1193 CALL add_a2a(rt_tendf,RTHCUTEN,config_flags, &
1194 ids,ide, jds, jde, kds, kde, &
1195 ims, ime, jms, jme, kms, kme, &
1196 its, ite, jts, jte, kts, kte )
1198 CALL add_a2c_u(ru_tendf,RUCUTEN,config_flags, &
1199 ids,ide, jds, jde, kds, kde, &
1200 ims, ime, jms, jme, kms, kme, &
1201 its, ite, jts, jte, kts, kte )
1203 CALL add_a2c_v(rv_tendf,RVCUTEN,config_flags, &
1204 ids,ide, jds, jde, kds, kde, &
1205 ims, ime, jms, jme, kms, kme, &
1206 its, ite, jts, jte, kts, kte )
1208 if (P_QV .ge. PARAM_FIRST_SCALAR) &
1209 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVCUTEN, &
1211 ids,ide, jds, jde, kds, kde, &
1212 ims, ime, jms, jme, kms, kme, &
1213 its, ite, jts, jte, kts, kte )
1215 if (P_QC .ge. PARAM_FIRST_SCALAR) &
1216 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCCUTEN, &
1218 ids,ide, jds, jde, kds, kde, &
1219 ims, ime, jms, jme, kms, kme, &
1220 its, ite, jts, jte, kts, kte )
1222 if (P_QI .ge. PARAM_FIRST_SCALAR) &
1223 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQICUTEN, &
1225 ids,ide, jds, jde, kds, kde, &
1226 ims, ime, jms, jme, kms, kme, &
1227 its, ite, jts, jte, kts, kte )
1229 IF(.not. adv_moist_cond)THEN
1231 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1232 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQCCUTEN, &
1234 ids,ide, jds, jde, kds, kde, &
1235 ims, ime, jms, jme, kms, kme, &
1236 its, ite, jts, jte, kts, kte )
1238 if (P_QT .ge. PARAM_FIRST_SCALAR) &
1239 CALL add_a2a(scalar_tendf(ims,kms,jms,P_QT),RQICUTEN, &
1241 ids,ide, jds, jde, kds, kde, &
1242 ims, ime, jms, jme, kms, kme, &
1243 its, ite, jts, jte, kts, kte )
1251 END SUBROUTINE phy_cu_ten
1253 !=================================================================
1254 SUBROUTINE phy_shcu_ten(config_flags,rk_step,n_moist, &
1255 rt_tendf,ru_tendf,rv_tendf, &
1256 RUSHTEN,RVSHTEN,RTHSHTEN, &
1257 RQVSHTEN,RQCSHTEN,RQRSHTEN, &
1258 RQISHTEN,RQSSHTEN,RQGSHTEN,moist_tendf, &
1259 ids, ide, jds, jde, kds, kde, &
1260 ims, ime, jms, jme, kms, kme, &
1261 its, ite, jts, jte, kts, kte )
1262 !-----------------------------------------------------------------
1264 !-----------------------------------------------------------------
1265 TYPE(grid_config_rec_type ) , INTENT(IN ) :: config_flags
1267 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1268 ims, ime, jms, jme, kms, kme, &
1269 its, ite, jts, jte, kts, kte, &
1272 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
1273 INTENT(INOUT) :: moist_tendf
1275 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
1286 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
1295 SELECT CASE (config_flags%shcu_physics)
1297 CASE (CAMUWSHCUSCHEME)
1298 CALL add_a2c_u(ru_tendf,RUSHTEN,config_flags, &
1299 ids,ide, jds, jde, kds, kde, &
1300 ims, ime, jms, jme, kms, kme, &
1301 its, ite, jts, jte, kts, kte )
1303 CALL add_a2c_v(rv_tendf,RVSHTEN,config_flags, &
1304 ids,ide, jds, jde, kds, kde, &
1305 ims, ime, jms, jme, kms, kme, &
1306 its, ite, jts, jte, kts, kte )
1308 CALL add_a2a(rt_tendf,RTHSHTEN,config_flags, &
1309 ids,ide, jds, jde, kds, kde, &
1310 ims, ime, jms, jme, kms, kme, &
1311 its, ite, jts, jte, kts, kte )
1313 if (P_QV .ge. PARAM_FIRST_SCALAR) &
1314 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVSHTEN, &
1316 ids,ide, jds, jde, kds, kde, &
1317 ims, ime, jms, jme, kms, kme, &
1318 its, ite, jts, jte, kts, kte )
1320 if (P_QC .ge. PARAM_FIRST_SCALAR) &
1321 CALL add_a2a(moist_tendf(ims,kms,jms,P_QC),RQCSHTEN, &
1323 ids,ide, jds, jde, kds, kde, &
1324 ims, ime, jms, jme, kms, kme, &
1325 its, ite, jts, jte, kts, kte )
1327 if (P_QR .ge. PARAM_FIRST_SCALAR) &
1328 CALL add_a2a(moist_tendf(ims,kms,jms,P_QR),RQRSHTEN, &
1330 ids,ide, jds, jde, kds, kde, &
1331 ims, ime, jms, jme, kms, kme, &
1332 its, ite, jts, jte, kts, kte )
1334 if (P_QI .ge. PARAM_FIRST_SCALAR) &
1335 CALL add_a2a(moist_tendf(ims,kms,jms,P_QI),RQISHTEN, &
1337 ids,ide, jds, jde, kds, kde, &
1338 ims, ime, jms, jme, kms, kme, &
1339 its, ite, jts, jte, kts, kte )
1341 if (P_QS .ge. PARAM_FIRST_SCALAR) &
1342 CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSSHTEN, &
1344 ids,ide, jds, jde, kds, kde, &
1345 ims, ime, jms, jme, kms, kme, &
1346 its, ite, jts, jte, kts, kte )
1348 if (P_QG .ge. PARAM_FIRST_SCALAR) &
1349 CALL add_a2a(moist_tendf(ims,kms,jms,P_QG),RQGSHTEN, &
1351 ids,ide, jds, jde, kds, kde, &
1352 ims, ime, jms, jme, kms, kme, &
1353 its, ite, jts, jte, kts, kte )
1360 END SUBROUTINE phy_shcu_ten
1362 !=================================================================
1363 SUBROUTINE phy_fg_ten(config_flags,rk_step,n_moist, &
1364 rph_tendf,rt_tendf,ru_tendf,rv_tendf, &
1365 mu_tendf, moist_tendf, &
1366 RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, &
1367 RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
1368 ids, ide, jds, jde, kds, kde, &
1369 ims, ime, jms, jme, kms, kme, &
1370 its, ite, jts, jte, kts, kte )
1371 !-----------------------------------------------------------------
1373 !-----------------------------------------------------------------
1374 TYPE(grid_config_rec_type) , INTENT(IN ) :: config_flags
1376 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1377 ims, ime, jms, jme, kms, kme, &
1378 its, ite, jts, jte, kts, kte, &
1381 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
1382 INTENT(INOUT) :: moist_tendf
1384 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
1391 REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN ) :: RMUNDGDTEN
1393 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: &
1399 REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT):: mu_tendf
1403 INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
1405 !-----------------------------------------------------------------
1407 SELECT CASE(config_flags%grid_fdda)
1411 CALL add_a2a(rt_tendf,RTHNDGDTEN,config_flags, &
1412 ids,ide, jds, jde, kds, kde, &
1413 ims, ime, jms, jme, kms, kme, &
1414 its, ite, jts, jte, kts, kte )
1416 ! note fdda u and v tendencies are staggered
1417 CALL add_c2c_u(ru_tendf,RUNDGDTEN,config_flags, &
1418 ids,ide, jds, jde, kds, kde, &
1419 ims, ime, jms, jme, kms, kme, &
1420 its, ite, jts, jte, kts, kte )
1422 CALL add_c2c_v(rv_tendf,RVNDGDTEN,config_flags, &
1423 ids,ide, jds, jde, kds, kde, &
1424 ims, ime, jms, jme, kms, kme, &
1425 its, ite, jts, jte, kts, kte )
1427 CALL add_a2a(mu_tendf,RMUNDGDTEN,config_flags, &
1428 ids,ide, jds, jde, kds, kds, &
1429 ims, ime, jms, jme, kms, kms, &
1430 its, ite, jts, jte, kts, kts )
1432 if (P_QV .ge. PARAM_FIRST_SCALAR) &
1433 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),RQVNDGDTEN, &
1435 ids,ide, jds, jde, kds, kde, &
1436 ims, ime, jms, jme, kms, kme, &
1437 its, ite, jts, jte, kts, kte )
1441 ! note fdda u and v tendencies are staggered
1442 CALL add_c2c_u(ru_tendf,RUNDGDTEN,config_flags, &
1443 ids,ide, jds, jde, kds, kde, &
1444 ims, ime, jms, jme, kms, kme, &
1445 its, ite, jts, jte, kts, kte )
1447 CALL add_c2c_v(rv_tendf,RVNDGDTEN,config_flags, &
1448 ids,ide, jds, jde, kds, kde, &
1449 ims, ime, jms, jme, kms, kme, &
1450 its, ite, jts, jte, kts, kte )
1452 CALL add_a2a(rt_tendf,RTHNDGDTEN,config_flags, &
1453 ids,ide, jds, jde, kds, kde, &
1454 ims, ime, jms, jme, kms, kme, &
1455 its, ite, jts, jte, kts, kte )
1457 CALL add_a2a_ph(rph_tendf,RPHNDGDTEN,config_flags, &
1458 ids,ide, jds, jde, kds, kde, &
1459 ims, ime, jms, jme, kms, kme, &
1460 its, ite, jts, jte, kts, kte )
1466 END SUBROUTINE phy_fg_ten
1468 !=================================================================
1469 SUBROUTINE phy_fr_ten(config_flags,rk_step,n_moist, &
1470 rt_tendf,ru_tendf,rv_tendf, &
1471 mu_tendf, moist_tendf, &
1472 rthfrten,rqvfrten, &
1473 ids, ide, jds, jde, kds, kde, &
1474 ims, ime, jms, jme, kms, kme, &
1475 its, ite, jts, jte, kts, kte )
1476 !-----------------------------------------------------------------
1477 USE module_state_description, ONLY : &
1479 !-----------------------------------------------------------------
1481 !-----------------------------------------------------------------
1482 TYPE(grid_config_rec_type) , INTENT(IN ) :: config_flags
1484 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1485 ims, ime, jms, jme, kms, kme, &
1486 its, ite, jts, jte, kts, kte, &
1489 REAL , DIMENSION(ims:ime, kms:kme, jms:jme, n_moist), &
1490 INTENT(INOUT) :: moist_tendf
1492 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(IN ) :: &
1496 REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT):: &
1501 REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT):: mu_tendf
1505 INTEGER :: i,j,k,IBGN,IEND,JBGN,JEND
1507 !-----------------------------------------------------------------
1509 SELECT CASE(config_flags%ifire)
1513 CALL add_a2a(rt_tendf,rthfrten, &
1515 ids,ide, jds, jde, kds, kde, &
1516 ims, ime, jms, jme, kms, kme, &
1517 its, ite, jts, jte, kts, kte )
1519 CALL add_a2a(moist_tendf(ims,kms,jms,P_QV),rqvfrten, &
1521 ids,ide, jds, jde, kds, kde, &
1522 ims, ime, jms, jme, kms, kme, &
1523 its, ite, jts, jte, kts, kte )
1529 END SUBROUTINE phy_fr_ten
1531 !----------------------------------------------------------------------
1532 SUBROUTINE advance_ppt(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1533 RQICUTEN,RQSCUTEN, &
1534 RAINC,RAINCV,RAINSH,PRATEC,PRATESH, &
1535 NCA, HTOP,HBOT,CUTOP,CUBOT, &
1536 CUPPT, DT, config_flags, &
1537 ids,ide, jds,jde, kds,kde, &
1538 ims,ime, jms,jme, kms,kme, &
1539 its,ite, jts,jte, kts,kte )
1540 !----------------------------------------------------------------------
1541 USE module_state_description
1544 !----------------------------------------------------------------------
1546 !----------------------------------------------------------------------
1547 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
1549 INTEGER, INTENT(IN ) :: &
1550 ids,ide, jds,jde, kds,kde, &
1551 ims,ime, jms,jme, kms,kme, &
1552 its,ite, jts,jte, kts,kte
1555 REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), &
1556 INTENT(INOUT) :: RTHCUTEN, &
1563 REAL, DIMENSION( ims:ime , jms:jme ), &
1564 INTENT(INOUT) :: RAINC, &
1575 REAL, INTENT(IN) :: DT
1579 INTEGER :: i,j,k,i_start,i_end,j_start,j_end,k_start,k_end
1580 INTEGER :: NCUTOP, NCUBOT
1582 !-----------------------------------------------------------------
1584 IF (config_flags%cu_physics .eq. 0) return
1586 ! SET START AND END POINTS FOR TILES
1589 i_end = min( ite,ide-1 )
1591 j_end = min( jte,jde-1 )
1593 ! IF( config_flags%nested .or. config_flags%specified ) THEN
1594 ! i_start = max( its,ids+1 )
1595 ! i_end = min( ite,ide-2 )
1596 ! j_start = max( jts,jds+1 )
1597 ! j_end = min( jte,jde-2 )
1601 k_end = min( kte, kde-1 )
1603 ! Update total cumulus scheme precipitation
1607 DO J = j_start,j_end
1608 DO i = i_start,i_end
1609 RAINC(I,J) = RAINC(I,J) + PRATEC(I,J)*DT
1610 RAINSH(I,J) = RAINSH(I,J) + PRATESH(I,J)*DT
1611 CUPPT(I,J) = CUPPT(I,J) + (PRATEC(I,J)+PRATESH(I,J))*DT/1000.
1615 SELECT CASE (config_flags%cu_physics)
1619 DO J = j_start,j_end
1620 DO i = i_start,i_end
1622 IF ( NCA(I,J) .GT. 0 ) THEN
1624 IF ( NINT(NCA(I,J) / DT) .le. 0 ) THEN
1626 ! set tendency to zero
1629 DO k = k_start,k_end
1634 if (P_QI .ge. PARAM_FIRST_SCALAR) RQICUTEN(i,k,j)=0.
1635 if (P_QS .ge. PARAM_FIRST_SCALAR) RQSCUTEN(i,k,j)=0.
1639 NCA(I,J)=NCA(I,J)-DT ! Decrease NCA
1646 CASE (BMJSCHEME, CAMZMSCHEME)
1648 DO J = j_start,j_end
1649 DO i = i_start,i_end
1651 ! HTOP, HBOT FOR GFDL RADIATION
1652 NCUTOP=NINT(CUTOP(I,J))
1653 NCUBOT=NINT(CUBOT(I,J))
1654 IF(NCUTOP>1.AND.NCUTOP<KDE)THEN
1655 HTOP(I,J)=MAX(CUTOP(I,J),HTOP(I,J))
1657 IF(NCUBOT>0.AND.NCUBOT<KDE)THEN
1658 HBOT(I,J)=MIN(CUBOT(I,J),HBOT(I,J))
1666 DO J = j_start,j_end
1667 DO i = i_start,i_end
1669 ! HTOP, HBOT FOR GFDL RADIATION
1670 NCUTOP=NINT(CUTOP(I,J))
1671 NCUBOT=NINT(CUBOT(I,J))
1672 IF(NCUTOP>1.AND.NCUTOP<KDE)THEN
1673 HTOP(I,J)=MAX(CUTOP(I,J),HTOP(I,J))
1675 IF(NCUBOT>0.AND.NCUBOT<KDE)THEN
1676 HBOT(I,J)=MIN(CUBOT(I,J),HBOT(I,J))
1679 IF ( NCA(I,J) .GT. 0 ) THEN
1682 IF ( NINT(NCA(I,J) / DT) .LE. 1 ) THEN
1684 ! set tendency to zero
1687 DO k = k_start,k_end
1692 if (P_QI .ge. PARAM_FIRST_SCALAR) RQICUTEN(i,k,j)=0.
1693 if (P_QS .ge. PARAM_FIRST_SCALAR) RQSCUTEN(i,k,j)=0.
1697 NCA(I,J)=NCA(I,J)-DT ! Decrease NCA
1698 ! NCA(I,J)=NCA(I,J)-1. ! Decrease NCA
1709 END SUBROUTINE advance_ppt
1711 SUBROUTINE add_a2a(lvar,rvar,config_flags, &
1712 ids,ide, jds, jde, kds, kde, &
1713 ims, ime, jms, jme, kms, kme, &
1714 its, ite, jts, jte, kts, kte )
1715 !------------------------------------------------------------
1717 !------------------------------------------------------------
1718 TYPE(grid_config_rec_type), INTENT(IN) :: config_flags
1720 INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
1721 ims, ime, jms, jme, kms, kme, &
1722 its, ite, jts, jte, kts, kte
1724 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
1726 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
1730 INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
1733 i_end = MIN(ite,ide-1)
1735 j_end = MIN(jte,jde-1)
1736 ktf = min(kte,kde-1)
1738 IF ( config_flags%specified .or. &
1739 config_flags%nested) i_start = MAX(ids+1,its)
1740 IF ( config_flags%specified .or. &
1741 config_flags%nested) i_end = MIN(ide-2,ite)
1742 IF ( config_flags%specified .or. &
1743 config_flags%nested) j_start = MAX(jds+1,jts)
1744 IF ( config_flags%specified .or. &
1745 config_flags%nested) j_end = MIN(jde-2,jte)
1746 IF ( config_flags%periodic_x ) i_start = its
1747 IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
1749 DO j = j_start,j_end
1751 DO i = i_start,i_end
1752 lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
1757 END SUBROUTINE add_a2a
1759 SUBROUTINE add_a2a_ph(lvar,rvar,config_flags, &
1760 ids,ide, jds, jde, kds, kde, &
1761 ims, ime, jms, jme, kms, kme, &
1762 its, ite, jts, jte, kts, kte )
1763 !------------------------------------------------------------
1765 !------------------------------------------------------------
1766 TYPE(grid_config_rec_type), INTENT(IN) :: config_flags
1768 INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
1769 ims, ime, jms, jme, kms, kme, &
1770 its, ite, jts, jte, kts, kte
1772 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
1774 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
1778 INTEGER :: i,j,k,i_start,i_end,j_start,j_end
1781 i_end = MIN(ite,ide-1)
1783 j_end = MIN(jte,jde-1)
1785 IF ( config_flags%specified .or. &
1786 config_flags%nested) i_start = MAX(ids+1,its)
1787 IF ( config_flags%specified .or. &
1788 config_flags%nested) i_end = MIN(ide-2,ite)
1789 IF ( config_flags%specified .or. &
1790 config_flags%nested) j_start = MAX(jds+1,jts)
1791 IF ( config_flags%specified .or. &
1792 config_flags%nested) j_end = MIN(jde-2,jte)
1793 IF ( config_flags%periodic_x ) i_start = its
1794 IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
1796 DO j = j_start,j_end
1798 DO i = i_start,i_end
1799 lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
1804 END SUBROUTINE add_a2a_ph
1806 !------------------------------------------------------------
1807 SUBROUTINE add_a2c_u(lvar,rvar,config_flags, &
1808 ids,ide, jds, jde, kds, kde, &
1809 ims, ime, jms, jme, kms, kme, &
1810 its, ite, jts, jte, kts, kte )
1811 !------------------------------------------------------------
1812 !------------------------------------------------------------
1814 !------------------------------------------------------------
1816 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
1818 INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
1819 ims, ime, jms, jme, kms, kme, &
1820 its, ite, jts, jte, kts, kte
1822 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
1824 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
1829 INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
1836 j_end = MIN(jte,jde-1)
1838 IF ( config_flags%specified .or. &
1839 config_flags%nested) i_start = MAX(ids+1,its)
1840 IF ( config_flags%specified .or. &
1841 config_flags%nested) i_end = MIN(ide-1,ite)
1842 IF ( config_flags%specified .or. &
1843 config_flags%nested) j_start = MAX(jds+1,jts)
1844 IF ( config_flags%specified .or. &
1845 config_flags%nested) j_end = MIN(jde-2,jte)
1846 IF ( config_flags%periodic_x ) i_start = its
1847 IF ( config_flags%periodic_x ) i_end = ite
1849 DO j = j_start,j_end
1851 DO i = i_start,i_end
1852 lvar(i,k,j) = lvar(i,k,j) + &
1853 0.5*(rvar(i,k,j)+rvar(i-1,k,j))
1858 END SUBROUTINE add_a2c_u
1860 !------------------------------------------------------------
1861 SUBROUTINE add_a2c_v(lvar,rvar,config_flags, &
1862 ids,ide, jds, jde, kds, kde, &
1863 ims, ime, jms, jme, kms, kme, &
1864 its, ite, jts, jte, kts, kte )
1865 !------------------------------------------------------------
1866 !------------------------------------------------------------
1868 !------------------------------------------------------------
1870 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
1872 INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
1873 ims, ime, jms, jme, kms, kme, &
1874 its, ite, jts, jte, kts, kte
1876 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
1878 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
1883 INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
1888 i_end = MIN(ite,ide-1)
1892 IF ( config_flags%specified .or. &
1893 config_flags%nested) i_start = MAX(ids+1,its)
1894 IF ( config_flags%specified .or. &
1895 config_flags%nested) i_end = MIN(ide-2,ite)
1896 IF ( config_flags%specified .or. &
1897 config_flags%nested) j_start = MAX(jds+1,jts)
1898 IF ( config_flags%specified .or. &
1899 config_flags%nested) j_end = MIN(jde-1,jte)
1900 IF ( config_flags%periodic_x ) i_start = its
1901 IF ( config_flags%periodic_x ) i_end = MIN( ite, ide-1 )
1903 DO j = j_start,j_end
1905 DO i = i_start,i_end
1906 lvar(i,k,j) = lvar(i,k,j) + &
1907 0.5*(rvar(i,k,j)+rvar(i,k,j-1))
1912 END SUBROUTINE add_a2c_v
1914 !------------------------------------------------------------
1915 SUBROUTINE add_c2c_u(lvar,rvar,config_flags, &
1916 ids,ide, jds, jde, kds, kde, &
1917 ims, ime, jms, jme, kms, kme, &
1918 its, ite, jts, jte, kts, kte )
1919 !------------------------------------------------------------
1920 !------------------------------------------------------------
1922 !------------------------------------------------------------
1924 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
1926 INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
1927 ims, ime, jms, jme, kms, kme, &
1928 its, ite, jts, jte, kts, kte
1930 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
1932 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
1937 INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
1944 j_end = MIN(jte,jde-1)
1947 IF ( config_flags%specified .or. &
1948 config_flags%nested) i_start = MAX(ids+1,its)
1949 IF ( config_flags%specified .or. &
1950 config_flags%nested) i_end = MIN(ide-1,ite)
1951 IF ( config_flags%specified .or. &
1952 config_flags%nested) j_start = MAX(jds+1,jts)
1953 IF ( config_flags%specified .or. &
1954 config_flags%nested) j_end = MIN(jde-2,jte)
1956 ! write(*,'(a,6i4)') 'call c2cu, i_start, i_end, j_start, j_end=', i_start, i_end, j_start, j_end
1958 DO j = j_start,j_end
1960 DO i = i_start,i_end
1961 lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
1966 END SUBROUTINE add_c2c_u
1968 SUBROUTINE add_c2c_v(lvar,rvar,config_flags, &
1969 ids,ide, jds, jde, kds, kde, &
1970 ims, ime, jms, jme, kms, kme, &
1971 its, ite, jts, jte, kts, kte )
1972 !------------------------------------------------------------
1973 !------------------------------------------------------------
1975 !------------------------------------------------------------
1977 TYPE(grid_config_rec_type), INTENT(IN ) :: config_flags
1979 INTEGER , INTENT(IN ) :: ids, ide, jds, jde, kds, kde, &
1980 ims, ime, jms, jme, kms, kme, &
1981 its, ite, jts, jte, kts, kte
1983 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(IN ) ::&
1985 REAL, DIMENSION(ims:ime,kms:kme,jms:jme),INTENT(INOUT) ::&
1990 INTEGER :: i,j,k,i_start,i_end,j_start,j_end,ktf
1995 i_end = MIN(ite,ide-1)
1999 IF ( config_flags%specified .or. &
2000 config_flags%nested) i_start = MAX(ids+1,its)
2001 IF ( config_flags%specified .or. &
2002 config_flags%nested) i_end = MIN(ide-2,ite)
2003 IF ( config_flags%specified .or. &
2004 config_flags%nested) j_start = MAX(jds+1,jts)
2005 IF ( config_flags%specified .or. &
2006 config_flags%nested) j_end = MIN(jde-1,jte)
2008 ! write(*,'(a,6i4)') 'call c2cv, i_start, i_end, j_start, j_end=', i_start, i_end, j_start, j_end
2010 DO j = j_start,j_end
2012 DO i = i_start,i_end
2013 lvar(i,k,j) = lvar(i,k,j) + rvar(i,k,j)
2018 END SUBROUTINE add_c2c_v
2022 END MODULE module_physics_addtendc