- Timestamp:
- Oct 19, 2023, 4:02:57 PM (13 months ago)
- Location:
- LMDZ6/branches/LMDZ_ECRad
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_ECRad
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ_ECRad/libf/phylmdiso/pbl_surface_mod.F90
r4482 r4727 21 21 USE cpl_mod, ONLY : gath2cpl 22 22 USE climb_hq_mod, ONLY : climb_hq_down, climb_hq_up 23 USE climb_qbs_mod, ONLY : climb_qbs_down, climb_qbs_up 23 24 USE climb_wind_mod, ONLY : climb_wind_down, climb_wind_up 24 25 USE coef_diff_turb_mod, ONLY : coef_diff_turb 25 USE atke_exchange_coeff_mod, ONLY : atke_compute_km_kh26 USE lmdz_call_atke, ONLY : call_atke 26 27 USE ioipsl_getin_p_mod, ONLY : getin_p 27 28 USE cdrag_mod … … 261 262 rlon, rlat, rugoro, rmu0, & 262 263 lwdown_m, cldt, & 263 rain_f, snow_f, solsw_m, solswfdiff_m, sollw_m, &264 rain_f, snow_f, bs_f, solsw_m, solswfdiff_m, sollw_m, & 264 265 gustiness, & 265 t, q, u, v, &266 t, q, qbs, u, v, & 266 267 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 267 268 !! t_x, q_x, t_w, q_w, & … … 275 276 beta, & 276 277 !>jyg 277 alb_dir_m, alb_dif_m, zxsens, zxevap, &278 alb_dir_m, alb_dif_m, zxsens, zxevap, zxsnowerosion, & 278 279 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 279 280 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 280 d_t, d_q, d_u, d_v, d_t_diss, &281 d_t, d_q, d_qbs, d_u, d_v, d_t_diss, & 281 282 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 282 283 d_t_w, d_q_w, & … … 301 302 rh2m, zxfluxu, zxfluxv, & 302 303 z0m, z0h, agesno, sollw, solsw, & 303 d_ts, evap, fluxlat, t2m, &304 d_ts, evap, fluxlat, t2m, & 304 305 wfbils, wfbilo, wfevap, wfrain, wfsnow, & 305 306 flux_t, flux_u, flux_v, & … … 307 308 !jyg< 308 309 !! zxfluxt, zxfluxq, q2m, flux_q, tke, & 309 zxfluxt, zxfluxq, q2m, flux_q, tke_x, &310 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, & 310 311 !>jyg 311 312 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 410 411 dser, dt_ds, zsig, zmea 411 412 use phys_output_var_mod, only: tkt, tks, taur, sss 412 #ifdef CPP_XIOS 413 USE wxios, ONLY: missing_val 414 #else 415 use netcdf, only: missing_val => nf90_fill_real 416 #endif 417 418 419 413 use lmdz_blowing_snow_ini, only : zeta_bs 414 USE wxios, ONLY: missing_val_xios => missing_val, using_xios 415 use netcdf, only: nf90_fill_real 420 416 421 417 IMPLICIT NONE … … 442 438 REAL, DIMENSION(klon), INTENT(IN) :: rugoro ! rugosity length 443 439 REAL, DIMENSION(klon), INTENT(IN) :: rmu0 ! cosine of solar zenith angle 444 REAL, DIMENSION(klon), INTENT(IN ):: rain_f ! rain fall440 REAL, DIMENSION(klon), INTENT(INOUT) :: rain_f ! rain fall 445 441 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 442 REAL, DIMENSION(klon), INTENT(IN) :: bs_f ! blowing snow fall 446 443 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface 447 444 REAL, DIMENSION(klon), INTENT(IN) :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface … … 449 446 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) 450 447 REAL, DIMENSION(klon,klev), INTENT(IN) :: q ! water vapour (kg/kg) 448 REAL, DIMENSION(klon,klev), INTENT(IN) :: qbs ! blowing snow specific content (kg/kg) 451 449 REAL, DIMENSION(klon,klev), INTENT(IN) :: u ! u speed 452 450 REAL, DIMENSION(klon,klev), INTENT(IN) :: v ! v speed … … 521 519 ! (=> positive sign upwards) 522 520 REAL, DIMENSION(klon), INTENT(OUT) :: zxevap ! water vapour flux at surface, positiv upwards 521 REAL, DIMENSION(klon), INTENT(OUT) :: zxsnowerosion ! blowing snow flux at surface 523 522 REAL, DIMENSION(klon), INTENT(OUT) :: zxtsol ! temperature at surface, mean for each grid point 524 523 !!! jyg le ??? … … 537 536 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_u ! change in u speed 538 537 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_v ! change in v speed 538 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_qbs ! change in blowing snow specific content 539 539 540 540 541 REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1) … … 604 605 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 605 606 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 606 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface607 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 607 608 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 608 609 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 631 632 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxt ! sensible heat flux, mean for each grid point 632 633 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxq ! water vapour flux, mean for each grid point 634 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxqbs ! blowing snow flux, mean for each grid point 633 635 REAL, DIMENSION(klon, nbsrf),INTENT(OUT) :: q2m ! water vapour at 2 meter height 634 636 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q ! water vapour flux(latent flux) (kg/m**2/s) 637 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs ! blowind snow vertical flux (kg/m**2 638 635 639 #ifdef ISO 636 640 REAL, DIMENSION(ntraciso,klon), INTENT(OUT) :: dflux_xt ! change of water vapour flux … … 683 687 REAL, DIMENSION(klon) :: yalb,yalb_vis 684 688 !albedo SB <<< 685 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1 689 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1, yqbs1 686 690 REAL, DIMENSION(klon) :: yqa 687 691 REAL, DIMENSION(klon) :: ysnow, yqsurf, yagesno, yqsol 688 REAL, DIMENSION(klon) :: yrain_f, ysnow_f 692 REAL, DIMENSION(klon) :: yrain_f, ysnow_f, ybs_f 689 693 #ifdef ISO 690 694 REAL, DIMENSION(ntraciso,klon) :: yxt1 … … 699 703 REAL, DIMENSION(klon) :: yrugoro 700 704 REAL, DIMENSION(klon) :: yfluxlat 705 REAL, DIMENSION(klon) :: yfluxbs 701 706 REAL, DIMENSION(klon) :: y_d_ts 702 707 REAL, DIMENSION(klon) :: y_flux_t1, y_flux_q1 … … 707 712 #endif 708 713 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 714 REAL, DIMENSION(klon) :: y_flux_bs, y_flux0 709 715 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 710 716 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w … … 736 742 #endif 737 743 REAL, DIMENSION(klon) :: AcoefU, AcoefV, BcoefU, BcoefV 744 REAL, DIMENSION(klon) :: AcoefQBS, BcoefQBS 738 745 REAL, DIMENSION(klon) :: ypsref 739 746 REAL, DIMENSION(klon) :: yevap, yevap_pot, ytsurf_new, yalb3_new … … 744 751 REAL, DIMENSION(klon) :: meansqT ! mean square deviation of subsurface temperatures 745 752 REAL, DIMENSION(klon) :: alb_m ! mean albedo for whole SW interval 746 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss 753 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs 747 754 REAL, DIMENSION(klon,klev) :: y_d_u, y_d_v 748 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q 755 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q, y_flux_qbs 749 756 REAL, DIMENSION(klon,klev) :: y_flux_u, y_flux_v 750 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq 757 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq, ycoefqbs 751 758 REAL, DIMENSION(klon) :: ycdragh, ycdragq, ycdragm 752 759 REAL, DIMENSION(klon,klev) :: yu, yv 753 REAL, DIMENSION(klon,klev) :: yt, yq 760 REAL, DIMENSION(klon,klev) :: yt, yq, yqbs 754 761 #ifdef ISO 755 762 REAL, DIMENSION(ntraciso,klon) :: yxtevap … … 819 826 REAL, DIMENSION(klon,klev) :: CcoefH, CcoefQ, DcoefH, DcoefQ 820 827 REAL, DIMENSION(klon,klev) :: CcoefU, CcoefV, DcoefU, DcoefV 828 REAL, DIMENSION(klon,klev) :: CcoefQBS, DcoefQBS 821 829 REAL, DIMENSION(klon,klev) :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x 822 830 REAL, DIMENSION(klon,klev) :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w … … 824 832 REAL, DIMENSION(klon,klev) :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w 825 833 REAL, DIMENSION(klon,klev) :: Kcoef_hq, Kcoef_m, gama_h, gama_q 834 REAL, DIMENSION(klon,klev) :: gama_qbs, Kcoef_qbs 826 835 REAL, DIMENSION(klon,klev) :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x 827 836 REAL, DIMENSION(klon,klev) :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w … … 929 938 REAL, DIMENSION(klon) :: uzon_w, vmer_w, speed_w, zri1_w, pref_w !speed_w, zri1_w, pref_w, added by Fuxing WANG, 04/03/2015 930 939 REAL, DIMENSION(klon) :: zgeo1_w, tair1_w, qair1_w, tairsol_w 931 940 REAL, DIMENSION(klon) :: yus0, yvs0 941 932 942 !!! jyg le 25/03/2013 933 943 !! Variables intermediaires pour le raccord des deux colonnes \`a la surface … … 1016 1026 REAL, DIMENSION(klon,nbsrf) :: zx_t1 1017 1027 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 1028 REAL, DIMENSION(klon,nbsrf) :: snowerosion 1018 1029 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 1019 1030 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) … … 1035 1046 ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, 1036 1047 ! dt_ds, tkt, tks, taur, sss on ocean points 1037 1048 REAL :: missing_val 1038 1049 #ifdef ISO 1039 1050 REAL, DIMENSION(klon) :: h1 … … 1047 1058 ! End of declarations 1048 1059 !**************************************************************************************** 1049 1060 1050 1061 IF (prt_level >=10) print *,' -> pbl_surface, itap ',itap 1062 1063 IF (using_xios) THEN 1064 missing_val = missing_val_xios 1065 ELSE 1066 missing_val = nf90_fill_real 1067 ENDIF 1051 1068 ! 1052 1069 !!jyg iflag_split = mod(iflag_pbl_split,2) … … 1189 1206 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 1190 1207 !albedo SB <<< 1191 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. 1208 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0. 1192 1209 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0. 1193 1210 zxfluxlat(:)=0. 1194 1211 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 1195 1212 zn2mout(:,:)=0 ; 1196 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_ u(:,:)=0. ; d_v(:,:)=0.1213 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 1197 1214 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. 1198 1215 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1214 1231 d_ts(:,:)=0. 1215 1232 evap(:,:)=0. 1233 snowerosion(:,:)=0. 1216 1234 fluxlat(:,:)=0. 1217 1235 wfbils(:,:)=0. ; wfbilo(:,:)=0. 1218 1236 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0. 1219 1237 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0. 1238 flux_qbs(:,:,:)=0. 1220 1239 dflux_t(:)=0. ; dflux_q(:)=0. 1221 1240 zxsnow(:)=0. 1222 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0. 1241 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0. 1223 1242 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0. 1224 1243 runoff(:)=0. … … 1266 1285 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 1267 1286 !albedo SB <<< 1268 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.01269 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; y u1 = 0.01270 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 1287 yrain_f = 0.0 ; ysnow_f = 0.0 ; ybs_f=0.0 ; yfder = 0.0 ; ysolsw = 0.0 1288 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yz0h_oupas = 0.0 ; yu1 = 0.0 1289 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 ; yqbs1 = 0.0 1271 1290 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 1272 1291 yq = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0 1292 yqbs(:,:)=0.0 1273 1293 yrugoro = 0.0 ; ywindsp = 0.0 1274 1294 !! d_ts = 0.0 ; yfluxlat=0.0 ; flux_t = 0.0 ; flux_q = 0.0 1275 yfluxlat=0.0 1295 yfluxlat=0.0 ; y_flux0(:)=0.0 1276 1296 !! flux_u = 0.0 ; flux_v = 0.0 ; d_t = 0.0 ; d_q = 0.0 1277 1297 !! d_t_diss= 0.0 ;d_u = 0.0 ; d_v = 0.0 … … 1288 1308 ycldt = 0.0 ; yrmu0 = 0.0 1289 1309 ! Martin 1310 y_d_qbs(:,:)=0.0 1290 1311 1291 1312 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 1629 1650 yrain_f(j) = rain_f(i) 1630 1651 ysnow_f(j) = snow_f(i) 1652 ybs_f(j) = bs_f(i) 1631 1653 yagesno(j) = agesno(i,nsrf) 1632 1654 yfder(j) = fder(i) … … 1640 1662 yu1(j) = u(i,1) 1641 1663 yv1(j) = v(i,1) 1664 yqbs1(j) = qbs(i,1) 1642 1665 ypaprs(j,klev+1) = paprs(i,klev+1) 1643 1666 !jyg< … … 1653 1676 !!! nrlmd le 13/06/2011 1654 1677 y_delta_tsurf(j)=delta_tsurf(i,nsrf) 1678 yfluxbs(j)=0.0 1679 y_flux_bs(j) = 0.0 1655 1680 !!! 1656 1681 #ifdef ISO … … 1721 1746 yt(j,k) = t(i,k) 1722 1747 yq(j,k) = q(i,k) 1748 yqbs(j,k)=qbs(i,k) 1723 1749 #ifdef ISO 1724 1750 do ixt=1,ntraciso … … 1849 1875 ENDDO 1850 1876 CALL cdrag(knon, nsrf, & 1851 speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1), &1877 speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1), s_pblh, & 1852 1878 yts, yqsurf, yz0m, yz0h, yri0, 0, & 1853 ycdragm, ycdragh, zri1, pref 1879 ycdragm, ycdragh, zri1, pref, rain_f, zxtsol, ypplay(:,1)) 1854 1880 1855 1881 ! --- special Dice: on force cdragm ( a defaut de forcer ustar) MPL 05082013 … … 1883 1909 1884 1910 CALL cdrag(knon, nsrf, & 1885 speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1), &1911 speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1),s_pblh_x,& 1886 1912 yts_x, yqsurf_x, yz0m, yz0h, yri0, 0, & 1887 ycdragm_x, ycdragh_x, zri1_x, pref_x )1913 ycdragm_x, ycdragh_x, zri1_x, pref_x, rain_f, zxtsol, ypplay(:,1) ) 1888 1914 1889 1915 ! --- special Dice. JYG+MPL 25112013 … … 1910 1936 ENDDO 1911 1937 CALL cdrag(knon, nsrf, & 1912 speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1), &1938 speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1),s_pblh_w,& 1913 1939 yts_w, yqsurf_w, yz0m, yz0h, yri0, 0, & 1914 ycdragm_w, ycdragh_w, zri1_w, pref_w ) 1915 ! 1916 zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:) 1940 ycdragm_w, ycdragh_w, zri1_w, pref_w, rain_f, zxtsol, ypplay(:,1) ) 1941 ! 1942 !!!bug !! zgeo1(:) = wake_s(:)*zgeo1_w(:) + (1.-wake_s(:))*zgeo1_x(:) 1943 zgeo1(1:knon) = wake_s(1:knon)*zgeo1_w(1:knon) + (1.-wake_s(1:knon))*zgeo1_x(1:knon) 1917 1944 1918 1945 ! --- special Dice. JYG+MPL 25112013 puis BOMEX … … 1951 1978 print *,' args coef_diff_turb: ycdragh ', ycdragh 1952 1979 print *,' args coef_diff_turb: ytke ', ytke 1953 1954 1980 ENDIF 1955 1981 1956 1982 IF (iflag_pbl>=50) THEN 1957 1983 1958 CALL atke_compute_km_kh(knon,klev,yu,yv,yt, &1984 CALL call_atke(dtime,knon,klev,ycdragm, ycdragh,yus0,yvs0,yts,yu,yv,yt,yq, & 1959 1985 ypplay,ypaprs,ytke,ycoefm, ycoefh) 1960 1986 1961 1987 ELSE 1962 1963 1988 1964 1989 CALL coef_diff_turb(dtime, nsrf, knon, ni, & … … 1981 2006 1982 2007 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh ',ycoefh 1983 ! 2008 2009 1984 2010 ELSE !(iflag_split .eq.0) 2011 1985 2012 IF (prt_level >=10) THEN 1986 2013 print *,' args coef_diff_turb: yu_x ', yu_x … … 1998 2025 IF (iflag_pbl>=50) THEN 1999 2026 2000 CALL atke_compute_km_kh(knon,klev,yu_x,yv_x,yt_x, &2027 CALL call_atke(dtime,knon,klev,ycdragm_x,ycdragh_x,yus0,yvs0,yts_x,yu_x,yv_x,yt_x,yq_x, & 2001 2028 ypplay,ypaprs,ytke_x,ycoefm_x, ycoefh_x) 2002 2029 … … 2020 2047 ENDIF 2021 2048 2022 ENDIF ! iflag_pbl >= 502049 ENDIF ! iflag_pbl >= 50 2023 2050 2024 2051 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_x ',ycoefh_x … … 2034 2061 print *,' args coef_diff_turb: ycdragh_w ', ycdragh_w 2035 2062 print *,' args coef_diff_turb: ytke_w ', ytke_w 2036 2063 ENDIF 2037 2064 2038 2065 IF (iflag_pbl>=50) THEN 2039 2066 2040 CALL atke_compute_km_kh(knon,klev,yu_w,yv_w,yt_w, &2067 CALL call_atke(dtime,knon,klev,ycdragm_w,ycdragh_w,yus0,yvs0,yts_w,yu_w,yv_w,yt_w,yq_w, & 2041 2068 ypplay,ypaprs,ytke_w,ycoefm_w, ycoefh_w) 2042 2069 … … 2062 2089 2063 2090 IF (prt_level >=10) print *,'coef_diff_turb -> ycoefh_w ',ycoefh_w 2064 ! 2091 2065 2092 !!!jyg le 10/04/2013 2066 2093 !! En attendant de traiter le transport des traceurs dans les poches froides, formule … … 2072 2099 ENDDO 2073 2100 ENDDO 2074 !!!2075 2101 ENDIF ! (iflag_split .eq.0) 2076 !!!2077 2102 2078 2103 !**************************************************************************************** … … 2171 2196 ENDIF ! (iflag_split .eq.0) 2172 2197 !!! 2198 2199 ! For blowing snow: 2200 IF (ok_bs) THEN 2201 ! following Bintanja et al 2000, part II 2202 ! we assume that the eddy diffsivity coefficient for 2203 ! suspended particles is larger than Km by a factor zeta_bs 2204 ! which is equal to 3 by default 2205 do k=1,klev 2206 do j=1,knon 2207 ycoefqbs(j,k)=ycoefm(j,k)*zeta_bs 2208 enddo 2209 enddo 2210 CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, & 2211 ydelp, yt, yqbs, dtime, & 2212 CcoefQBS, DcoefQBS, & 2213 Kcoef_qbs, gama_qbs, & 2214 AcoefQBS, BcoefQBS) 2215 ENDIF 2216 2217 2173 2218 2174 2219 !**************************************************************************************** … … 2336 2381 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 2337 2382 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 2338 yt2m, yq2m, yt10m, yq10m, yu10m, yustar )2383 yt2m, yq2m, yt10m, yq10m, yu10m, yustar, ypblh, rain_f, zxtsol) 2339 2384 ENDIF 2340 2385 … … 2356 2401 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2357 2402 !!jyg yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2358 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, y t1, yq1,&2403 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2359 2404 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2360 2405 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2362 2407 ylwdown, yq2m, yt2m, & 2363 2408 ysnow, yqsol, yagesno, ytsoil, & 2364 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat, &2409 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,& 2365 2410 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2366 2411 y_flux_u1, y_flux_v1, & … … 2407 2452 call iso_verif_noNaN(yxtevap(ixt,j), & 2408 2453 & 'pbl_surface 1056a: apres surf_land') 2454 enddo 2455 do ixt=1,niso 2409 2456 call iso_verif_noNaN(yxtsol(ixt,j), & 2410 2457 & 'pbl_surface 1056b: apres surf_land') … … 2431 2478 yrmu0, ylwdown, yalb, zgeo1, & 2432 2479 ysolsw, ysollw, yts, ypplay(:,1), & 2433 !!jyg ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2434 ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,& 2480 ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2435 2481 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2436 2482 AcoefU, AcoefV, BcoefU, BcoefV, & 2483 AcoefQBS, BcoefQBS, & 2437 2484 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2438 ysnow, yqsurf, yqsol, yagesno, &2485 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2439 2486 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2440 y tsurf_new, y_dflux_t, y_dflux_q, &2487 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2441 2488 yzmea, yzsig, ycldt, & 2442 2489 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2475 2522 call iso_verif_noNaN(yxtevap(ixt,j), & 2476 2523 & 'pbl_surface 1095a: apres surf_landice') 2524 enddo 2525 do ixt=1,niso 2477 2526 call iso_verif_noNaN(yxtsol(ixt,j), & 2478 2527 & 'pbl_surface 1095b: apres surf_landice') … … 2495 2544 itap, dtime, jour, knon, ni, & 2496 2545 !!jyg ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2497 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, y t(:,1), yq(:,1),& ! ym missing init2546 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2498 2547 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2499 2548 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2570 2619 call iso_verif_noNaN(yxtevap(ixt,j), & 2571 2620 & 'pbl_surface 1165a: apres surf_seaice') 2621 enddo 2622 do ixt=1,niso 2572 2623 call iso_verif_noNaN(yxtsol(ixt,j), & 2573 2624 & 'pbl_surface 1165b: apres surf_seaice') … … 2658 2709 ENDDO 2659 2710 ENDIF ! (ok_flux_surf) 2711 2712 ! flux of blowing snow at the first level 2713 IF (ok_bs) THEN 2714 DO j=1,knon 2715 y_flux_bs(j)=yfluxbs(j) 2716 ENDDO 2717 ENDIF 2660 2718 ! 2661 2719 ! ------------------------------------------------------------------------------ … … 2985 3043 ! 2986 3044 ENDIF ! (iflag_split .eq.0) 3045 3046 IF (ok_bs) THEN 3047 CALL climb_qbs_up(knon, dtime, yqbs, & 3048 y_flux_bs, ypaprs, ypplay, & 3049 AcoefQBS, BcoefQBS, & 3050 CcoefQBS, DcoefQBS, & 3051 Kcoef_qbs, gama_qbs, & 3052 y_flux_qbs(:,:), y_d_qbs(:,:)) 3053 ENDIF 3054 2987 3055 !!! 2988 3056 !! … … 3151 3219 !!! 3152 3220 3153 ! print*,'Dans pbl OK1' 3154 3155 !jyg< 3156 !! evap(:,nsrf) = - flux_q(:,1,nsrf) 3157 !>jyg 3221 ! tendencies of blowing snow 3222 IF (ok_bs) THEN 3223 DO k = 1, klev 3224 DO j = 1, knon 3225 i = ni(j) 3226 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j) 3227 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k) 3228 ENDDO 3229 ENDDO 3230 ENDIF 3231 3232 3158 3233 DO j = 1, knon 3159 3234 i = ni(j) 3160 3235 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 3236 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 3161 3237 beta(i,nsrf) = ybeta(j) !jyg 3162 3238 d_ts(i,nsrf) = y_d_ts(j) … … 3386 3462 ENDDO 3387 3463 ENDDO 3464 3465 3466 IF (ok_bs) THEN 3467 DO k = 1, klev 3468 DO j = 1, knon 3469 i = ni(j) 3470 d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k) 3471 ENDDO 3472 ENDDO 3473 ENDIF 3474 3388 3475 3389 3476 #ifdef ISO … … 3522 3609 IF (iflag_split .eq.0) THEN 3523 3610 IF (iflag_new_t2mq2m==1) THEN 3524 CALL stdlevvarn(klon, knon, nsrf, zxli, &3611 CALL stdlevvarn(klon, knon, nsrf, zxli, & 3525 3612 uzon, vmer, tair1, qair1, zgeo1, & 3526 3613 tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, & … … 3531 3618 uzon, vmer, tair1, qair1, zgeo1, & 3532 3619 tairsol, qairsol, yz0m, yz0h_oupas, psfce, patm, & 3533 yt2m, yq2m, yt10m, yq10m, yu10m, yustar )3620 yt2m, yq2m, yt10m, yq10m, yu10m, yustar, ypblh, rain_f, zxtsol) 3534 3621 ENDIF 3535 3622 ELSE !(iflag_split .eq.0) … … 3549 3636 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & 3550 3637 tairsol_x, qairsol, yz0m, yz0h_oupas, psfce, patm, & 3551 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x )3638 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x, ypblh_x, rain_f, zxtsol) 3552 3639 CALL stdlevvar(klon, knon, nsrf, zxli, & 3553 3640 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & 3554 3641 tairsol_w, qairsol, yz0m, yz0h_oupas, psfce, patm, & 3555 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w )3642 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w, ypblh_w, rain_f, zxtsol) 3556 3643 ENDIF 3557 3644 !!! … … 3888 3975 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3889 3976 ENDDO 3977 3978 ! if blowing snow 3979 if (ok_bs) then 3980 DO nsrf = 1, nbsrf 3981 DO k = 1, klev 3982 DO i = 1, klon 3983 zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf) 3984 ENDDO 3985 ENDDO 3986 ENDDO 3987 3988 DO i = 1, klon 3989 zxsnowerosion(i) = zxfluxqbs(i,1) ! blowings snow flux at the surface 3990 END DO 3991 endif 3992 3993 3994 3890 3995 #ifdef ISO 3891 3996 DO i = 1, klon
Note: See TracChangeset
for help on using the changeset viewer.