Changeset 2086 for LMDZ5/trunk/libf/phylmd/physiq.F90
- Timestamp:
- Jul 9, 2014, 11:19:07 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/physiq.F90
r2076 r2086 201 201 INTEGER iliq ! indice de traceurs pour eau liquide 202 202 PARAMETER (iliq=2) 203 203 !CR: on ajoute la phase glace 204 INTEGER isol ! indice de traceurs pour eau glace 205 PARAMETER (isol=3) 204 206 ! 205 207 ! … … 596 598 597 599 ! tendance nulles 598 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0 600 REAL, dimension(klon,klev):: du0, dv0, dt0, dq0, dql0, dqi0 599 601 600 602 ! … … 1377 1379 dq0(:,:)=0. 1378 1380 dql0(:,:)=0. 1381 dqi0(:,:)=0. 1379 1382 ! 1380 1383 ! Mettre a zero des variables de sortie (pour securite) … … 1422 1425 q_seri(i,k) = qx(i,k,ivap) 1423 1426 ql_seri(i,k) = qx(i,k,iliq) 1424 qs_seri(i,k) = 0. 1427 !CR: ATTENTION, on rajoute la variable glace 1428 if (nqo.eq.2) then 1429 qs_seri(i,k) = 0. 1430 else if (nqo.eq.3) then 1431 qs_seri(i,k) = qx(i,k,isol) 1432 endif 1425 1433 ENDDO 1426 1434 ENDDO 1427 1435 tke0(:,:)=pbl_tke(:,:,is_ave) 1428 IF (nqtot.GE.3) THEN 1429 DO iq = 3, nqtot 1436 !CR:Nombre de traceurs de l'eau: nqo 1437 ! IF (nqtot.GE.3) THEN 1438 IF (nqtot.GE.(nqo+1)) THEN 1439 ! DO iq = 3, nqtot 1440 DO iq = nqo+1, nqtot 1430 1441 DO k = 1, klev 1431 1442 DO i = 1, klon 1432 tr_seri(i,k,iq-2) = qx(i,k,iq) 1443 ! tr_seri(i,k,iq-2) = qx(i,k,iq) 1444 tr_seri(i,k,iq-nqo) = qx(i,k,iq) 1433 1445 ENDDO 1434 1446 ENDDO … … 1617 1629 ENDIF 1618 1630 !>jyg 1631 1632 if (iflag_ice_thermo.eq.0) then 1633 !pas necessaire a priori 1619 1634 1620 1635 zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k))) … … 1627 1642 d_t_eva(i,k) = za 1628 1643 d_q_eva(i,k) = zb 1644 1645 else 1646 1647 !CR: on ré-évapore eau liquide et glace 1648 1649 ! zdelta = MAX(0.,SIGN(1.,RTT-t_seri(i,k))) 1650 ! zb = MAX(0.0,ql_seri(i,k)) 1651 ! za = - MAX(0.0,ql_seri(i,k)) & 1652 ! * (zlvdcp*(1.-zdelta)+zlsdcp*zdelta) 1653 zb = MAX(0.0,ql_seri(i,k)+qs_seri(i,k)) 1654 za = - MAX(0.0,ql_seri(i,k))*zlvdcp & 1655 - MAX(0.0,qs_seri(i,k))*zlsdcp 1656 t_seri(i,k) = t_seri(i,k) + za 1657 q_seri(i,k) = q_seri(i,k) + zb 1658 ql_seri(i,k) = 0.0 1659 !on évapore la glace 1660 qs_seri(i,k) = 0.0 1661 d_t_eva(i,k) = za 1662 d_q_eva(i,k) = zb 1663 endif 1664 1629 1665 ENDDO 1630 1666 ENDDO … … 1764 1800 IF (klon_glo==1) THEN 1765 1801 CALL add_pbl_tend & 1766 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0, paprs,'vdf')1802 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,'vdf') 1767 1803 ELSE 1768 1804 CALL add_phys_tend & 1769 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0, paprs,'vdf')1805 (d_u_vdf,d_v_vdf,d_t_vdf+d_t_diss,d_q_vdf,dql0,dqi0,paprs,'vdf') 1770 1806 ENDIF 1771 1807 !-------------------------------------------------------------------- … … 2135 2171 !----------------------------------------------------------------------------------------- 2136 2172 ! ajout des tendances de la diffusion turbulente 2137 CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0, paprs,'con')2173 CALL add_phys_tend(d_u_con,d_v_con,d_t_con,d_q_con,dql0,dqi0,paprs,'con') 2138 2174 !----------------------------------------------------------------------------------------- 2139 2175 … … 2252 2288 d_t_wake(:,:)=dt_wake(:,:)*dtime 2253 2289 d_q_wake(:,:)=dq_wake(:,:)*dtime 2254 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0, paprs,'wake')2290 CALL add_phys_tend(du0,dv0,d_t_wake,d_q_wake,dql0,dqi0,paprs,'wake') 2255 2291 !----------------------------------------------------------------------------------------- 2256 2292 … … 2512 2548 !----------------------------------------------------------------------------------------- 2513 2549 ! ajout des tendances de l'ajustement sec ou des thermiques 2514 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0, paprs,'ajsb')2550 CALL add_phys_tend(du0,dv0,d_t_ajsb,d_q_ajsb,dql0,dqi0,paprs,'ajsb') 2515 2551 d_t_ajs(:,:)=d_t_ajs(:,:)+d_t_ajsb(:,:) 2516 2552 d_q_ajs(:,:)=d_q_ajs(:,:)+d_q_ajsb(:,:) … … 2558 2594 CALL fisrtilp(dtime,paprs,pplay, & 2559 2595 t_seri, q_seri,ptconv,ratqs, & 2560 d_t_lsc, d_q_lsc, d_ql_lsc, rneb, cldliq, &2596 d_t_lsc, d_q_lsc, d_ql_lsc, d_qi_lsc, rneb, cldliq, & 2561 2597 rain_lsc, snow_lsc, & 2562 2598 pfrac_impa, pfrac_nucl, pfrac_1nucl, & … … 2570 2606 !----------------------------------------------------------------------------------------- 2571 2607 ! ajout des tendances de la diffusion turbulente 2572 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc, paprs,'lsc')2608 CALL add_phys_tend(du0,dv0,d_t_lsc,d_q_lsc,d_ql_lsc,d_qi_lsc,paprs,'lsc') 2573 2609 !----------------------------------------------------------------------------------------- 2574 2610 DO k = 1, klev 2575 2611 DO i = 1, klon 2576 2612 cldfra(i,k) = rneb(i,k) 2613 !CR: a quoi ca sert? Faut-il ajouter qs_seri? 2577 2614 IF (.NOT.new_oliq) cldliq(i,k) = ql_seri(i,k) 2578 2615 ENDDO … … 2845 2882 zx_t = t_seri(i,k) 2846 2883 IF (thermcep) THEN 2884 if (iflag_ice_thermo.eq.0) then 2847 2885 zdelta = MAX(0.,SIGN(1.,rtt-zx_t)) 2886 else 2887 zdelta = MAX(0.,SIGN(1.,t_glace_min-zx_t)) 2888 endif 2848 2889 zx_qs = r2es * FOEEW(zx_t,zdelta)/pplay(i,k) 2849 2890 zx_qs = MIN(0.5,zx_qs) … … 3288 3329 !----------------------------------------------------------------------------------------- 3289 3330 ! ajout des tendances de la trainee de l'orographie 3290 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0, paprs,'oro')3331 CALL add_phys_tend(d_u_oro,d_v_oro,d_t_oro,dq0,dql0,dqi0,paprs,'oro') 3291 3332 !----------------------------------------------------------------------------------------- 3292 3333 ! … … 3334 3375 !----------------------------------------------------------------------------------------- 3335 3376 ! ajout des tendances de la portance de l'orographie 3336 CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0, paprs,'lif')3377 CALL add_phys_tend(d_u_lif,d_v_lif,d_t_lif,dq0,dql0,dqi0,paprs,'lif') 3337 3378 !----------------------------------------------------------------------------------------- 3338 3379 ! … … 3348 3389 ! 3349 3390 ! ajout des tendances 3350 CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0, paprs,'hin')3391 CALL add_phys_tend(d_u_hin,d_v_hin,d_t_hin,dq0,dql0,dqi0,paprs,'hin') 3351 3392 3352 3393 ENDIF … … 3356 3397 rain_fall + snow_fall, zustr_gwd_rando, zvstr_gwd_rando, & 3357 3398 du_gwd_rando, dv_gwd_rando) 3358 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0, paprs, &3399 CALL add_phys_tend(du_gwd_rando, dv_gwd_rando, dt0, dq0, dql0,dqi0,paprs, & 3359 3400 'flott_gwd_rando') 3360 3401 end if … … 3623 3664 d_qx(i,k,ivap) = ( q_seri(i,k) - qx(i,k,ivap) ) / dtime 3624 3665 d_qx(i,k,iliq) = ( ql_seri(i,k) - qx(i,k,iliq) ) / dtime 3666 !CR: on ajoute le contenu en glace 3667 if (nqo.eq.3) then 3668 d_qx(i,k,isol) = ( qs_seri(i,k) - qx(i,k,isol) ) / dtime 3669 endif 3625 3670 ENDDO 3626 3671 ENDDO 3627 3672 ! 3628 IF (nqtot.GE.3) THEN 3629 DO iq = 3, nqtot 3673 !CR: nb de traceurs eau: nqo 3674 ! IF (nqtot.GE.3) THEN 3675 IF (nqtot.GE.(nqo+1)) THEN 3676 ! DO iq = 3, nqtot 3677 DO iq = nqo+1, nqtot 3630 3678 DO k = 1, klev 3631 3679 DO i = 1, klon 3632 d_qx(i,k,iq) = ( tr_seri(i,k,iq-2) - qx(i,k,iq) ) / dtime 3680 ! d_qx(i,k,iq) = ( tr_seri(i,k,iq-2) - qx(i,k,iq) ) / dtime 3681 d_qx(i,k,iq) = ( tr_seri(i,k,iq-nqo) - qx(i,k,iq) ) / dtime 3633 3682 ENDDO 3634 3683 ENDDO … … 3653 3702 3654 3703 !!! RomP >>> 3655 IF (nqtot.GE.3) THEN 3656 DO iq = 3, nqtot 3704 !CR: nb de traceurs eau: nqo 3705 ! IF (nqtot.GE.3) THEN 3706 IF (nqtot.GE.(nqo+1)) THEN 3707 ! DO iq = 3, nqtot 3708 DO iq = nqo+1, nqtot 3657 3709 DO k = 1, klev 3658 3710 DO i = 1, klon 3659 tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2) 3711 ! tr_ancien(i,k,iq-2) = tr_seri(i,k,iq-2) 3712 tr_ancien(i,k,iq-nqo) = tr_seri(i,k,iq-nqo) 3660 3713 ENDDO 3661 3714 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.