Changeset 4523 for LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
- Timestamp:
- May 3, 2023, 6:21:08 PM (17 months ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk
- Property svn:mergeinfo changed
/LMDZ6/branches/blowing_snow (added) merged: 4485,4504,4506,4521
- Property svn:mergeinfo changed
-
LMDZ6/trunk/libf/phylmd/pbl_surface_mod.F90
r4478 r4523 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 … … 184 185 rlon, rlat, rugoro, rmu0, & 185 186 lwdown_m, cldt, & 186 rain_f, snow_f, solsw_m, solswfdiff_m, sollw_m, &187 rain_f, snow_f, bs_f, solsw_m, solswfdiff_m, sollw_m, & 187 188 gustiness, & 188 t, q, u, v, &189 t, q, qbs, u, v, & 189 190 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 190 191 !! t_x, q_x, t_w, q_w, & … … 198 199 beta, & 199 200 !>jyg 200 alb_dir_m, alb_dif_m, zxsens, zxevap, &201 alb_dir_m, alb_dif_m, zxsens, zxevap, zxsnowerosion, & 201 202 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 202 203 zxtsol, zxfluxlat, zt2m, qsat2m, zn2mout, & 203 d_t, d_q, d_u, d_v, d_t_diss, &204 d_t, d_q, d_qbs, d_u, d_v, d_t_diss, & 204 205 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 205 206 d_t_w, d_q_w, & … … 224 225 rh2m, zxfluxu, zxfluxv, & 225 226 z0m, z0h, agesno, sollw, solsw, & 226 d_ts, evap, fluxlat, t2m, &227 d_ts, evap, fluxlat, t2m, & 227 228 wfbils, wfbilo, wfevap, wfrain, wfsnow, & 228 229 flux_t, flux_u, flux_v, & … … 230 231 !jyg< 231 232 !! zxfluxt, zxfluxq, q2m, flux_q, tke, & 232 zxfluxt, zxfluxq, q2m, flux_q, tke_x, &233 zxfluxt, zxfluxq, zxfluxqbs, q2m, flux_q, flux_qbs, tke_x, & 233 234 !>jyg 234 235 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 317 318 dser, dt_ds, zsig, zmea 318 319 use phys_output_var_mod, only: tkt, tks, taur, sss 320 use blowing_snow_ini_mod, only : zeta_bs 319 321 #ifdef CPP_XIOS 320 322 USE wxios, ONLY: missing_val … … 351 353 REAL, DIMENSION(klon), INTENT(IN) :: rain_f ! rain fall 352 354 REAL, DIMENSION(klon), INTENT(IN) :: snow_f ! snow fall 355 REAL, DIMENSION(klon), INTENT(IN) :: bs_f ! blowing snow fall 353 356 REAL, DIMENSION(klon), INTENT(IN) :: solsw_m ! net shortwave radiation at mean surface 354 357 REAL, DIMENSION(klon), INTENT(IN) :: solswfdiff_m ! diffuse fraction fordownward shortwave radiation at mean surface … … 356 359 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) 357 360 REAL, DIMENSION(klon,klev), INTENT(IN) :: q ! water vapour (kg/kg) 361 REAL, DIMENSION(klon,klev), INTENT(IN) :: qbs ! blowing snow specific content (kg/kg) 358 362 REAL, DIMENSION(klon,klev), INTENT(IN) :: u ! u speed 359 363 REAL, DIMENSION(klon,klev), INTENT(IN) :: v ! v speed … … 420 424 ! (=> positive sign upwards) 421 425 REAL, DIMENSION(klon), INTENT(OUT) :: zxevap ! water vapour flux at surface, positiv upwards 426 REAL, DIMENSION(klon), INTENT(OUT) :: zxsnowerosion ! blowing snow flux at surface 422 427 REAL, DIMENSION(klon), INTENT(OUT) :: zxtsol ! temperature at surface, mean for each grid point 423 428 !!! jyg le ??? … … 436 441 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_u ! change in u speed 437 442 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_v ! change in v speed 443 REAL, DIMENSION(klon, klev), INTENT(OUT) :: d_qbs ! change in blowing snow specific content 444 438 445 439 446 REAL, INTENT(OUT):: zcoefh(:, :, :) ! (klon, klev, nbsrf + 1) … … 495 502 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 496 503 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 497 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface504 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 498 505 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 499 506 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 517 524 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxt ! sensible heat flux, mean for each grid point 518 525 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxq ! water vapour flux, mean for each grid point 526 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxqbs ! blowing snow flux, mean for each grid point 519 527 REAL, DIMENSION(klon, nbsrf),INTENT(OUT) :: q2m ! water vapour at 2 meter height 520 528 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_q ! water vapour flux(latent flux) (kg/m**2/s) 529 REAL, DIMENSION(klon, klev, nbsrf), INTENT(OUT) :: flux_qbs ! blowind snow vertical flux (kg/m**2 530 521 531 522 532 ! Martin … … 563 573 REAL, DIMENSION(klon) :: yalb,yalb_vis 564 574 !albedo SB <<< 565 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1 575 REAL, DIMENSION(klon) :: yt1, yq1, yu1, yv1, yqbs1 566 576 REAL, DIMENSION(klon) :: yqa 567 577 REAL, DIMENSION(klon) :: ysnow, yqsurf, yagesno, yqsol 568 REAL, DIMENSION(klon) :: yrain_f, ysnow_f 578 REAL, DIMENSION(klon) :: yrain_f, ysnow_f, ybs_f 569 579 REAL, DIMENSION(klon) :: ysolsw, ysollw 570 580 REAL, DIMENSION(klon) :: yfder 571 581 REAL, DIMENSION(klon) :: yrugoro 572 582 REAL, DIMENSION(klon) :: yfluxlat 583 REAL, DIMENSION(klon) :: yfluxbs 573 584 REAL, DIMENSION(klon) :: y_d_ts 574 585 REAL, DIMENSION(klon) :: y_flux_t1, y_flux_q1 575 586 REAL, DIMENSION(klon) :: y_dflux_t, y_dflux_q 576 587 REAL, DIMENSION(klon) :: y_flux_u1, y_flux_v1 588 REAL, DIMENSION(klon) :: y_flux_bs, y_flux0 577 589 REAL, DIMENSION(klon) :: yt2m, yq2m, yu10m 578 590 INTEGER, DIMENSION(klon, nbsrf, 6) :: yn2mout, yn2mout_x, yn2mout_w … … 601 613 REAL, DIMENSION(klon) :: AcoefH, AcoefQ, BcoefH, BcoefQ 602 614 REAL, DIMENSION(klon) :: AcoefU, AcoefV, BcoefU, BcoefV 615 REAL, DIMENSION(klon) :: AcoefQBS, BcoefQBS 603 616 REAL, DIMENSION(klon) :: ypsref 604 617 REAL, DIMENSION(klon) :: yevap, yevap_pot, ytsurf_new, yalb3_new … … 609 622 REAL, DIMENSION(klon) :: meansqT ! mean square deviation of subsurface temperatures 610 623 REAL, DIMENSION(klon) :: alb_m ! mean albedo for whole SW interval 611 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss 624 REAL, DIMENSION(klon,klev) :: y_d_t, y_d_q, y_d_t_diss, y_d_qbs 612 625 REAL, DIMENSION(klon,klev) :: y_d_u, y_d_v 613 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q 626 REAL, DIMENSION(klon,klev) :: y_flux_t, y_flux_q, y_flux_qbs 614 627 REAL, DIMENSION(klon,klev) :: y_flux_u, y_flux_v 615 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq 628 REAL, DIMENSION(klon,klev) :: ycoefh, ycoefm,ycoefq, ycoefqbs 616 629 REAL, DIMENSION(klon) :: ycdragh, ycdragq, ycdragm 617 630 REAL, DIMENSION(klon,klev) :: yu, yv 618 REAL, DIMENSION(klon,klev) :: yt, yq 631 REAL, DIMENSION(klon,klev) :: yt, yq, yqbs 619 632 REAL, DIMENSION(klon,klev) :: ypplay, ydelp 620 633 REAL, DIMENSION(klon,klev) :: delp … … 678 691 REAL, DIMENSION(klon,klev) :: CcoefH, CcoefQ, DcoefH, DcoefQ 679 692 REAL, DIMENSION(klon,klev) :: CcoefU, CcoefV, DcoefU, DcoefV 693 REAL, DIMENSION(klon,klev) :: CcoefQBS, DcoefQBS 680 694 REAL, DIMENSION(klon,klev) :: CcoefH_x, CcoefQ_x, DcoefH_x, DcoefQ_x 681 695 REAL, DIMENSION(klon,klev) :: CcoefH_w, CcoefQ_w, DcoefH_w, DcoefQ_w … … 683 697 REAL, DIMENSION(klon,klev) :: CcoefU_w, CcoefV_w, DcoefU_w, DcoefV_w 684 698 REAL, DIMENSION(klon,klev) :: Kcoef_hq, Kcoef_m, gama_h, gama_q 699 REAL, DIMENSION(klon,klev) :: gama_qbs, Kcoef_qbs 685 700 REAL, DIMENSION(klon,klev) :: Kcoef_hq_x, Kcoef_m_x, gama_h_x, gama_q_x 686 701 REAL, DIMENSION(klon,klev) :: Kcoef_hq_w, Kcoef_m_w, gama_h_w, gama_q_w … … 862 877 REAL, DIMENSION(klon,nbsrf) :: zx_t1 863 878 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 879 REAL, DIMENSION(klon,nbsrf) :: snowerosion 864 880 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 865 881 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) … … 980 996 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 981 997 !albedo SB <<< 982 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. 998 zxsens(:)=0. ; zxevap(:)=0. ; zxtsol(:)=0. ; zxsnowerosion(:)=0. 983 999 d_t_w(:,:)=0. ; d_q_w(:,:)=0. ; d_t_x(:,:)=0. ; d_q_x(:,:)=0. 984 1000 zxfluxlat(:)=0. 985 1001 zt2m(:)=0. ; zq2m(:)=0. ; qsat2m(:)=0. ; rh2m(:)=0. 986 1002 zn2mout(:,:)=0 ; 987 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_ u(:,:)=0. ; d_v(:,:)=0.1003 d_t(:,:)=0. ; d_t_diss(:,:)=0. ; d_q(:,:)=0. ; d_qbs(:,:)=0. ; d_u(:,:)=0. ; d_v(:,:)=0. 988 1004 zcoefh(:,:,:)=0. ; zcoefm(:,:,:)=0. 989 1005 zxsens_x(:)=0. ; zxsens_w(:)=0. ; zxfluxlat_x(:)=0. ; zxfluxlat_w(:)=0. … … 1005 1021 d_ts(:,:)=0. 1006 1022 evap(:,:)=0. 1023 snowerosion(:,:)=0. 1007 1024 fluxlat(:,:)=0. 1008 1025 wfbils(:,:)=0. ; wfbilo(:,:)=0. 1009 1026 wfevap(:,:)=0. ; wfrain(:,:)=0. ; wfsnow(:,:)=0. 1010 1027 flux_t(:,:,:)=0. ; flux_q(:,:,:)=0. ; flux_u(:,:,:)=0. ; flux_v(:,:,:)=0. 1028 flux_qbs(:,:,:)=0. 1011 1029 dflux_t(:)=0. ; dflux_q(:)=0. 1012 1030 zxsnow(:)=0. 1013 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0. 1031 zxfluxt(:,:)=0. ; zxfluxq(:,:)=0.; zxfluxqbs(:,:)=0. 1014 1032 qsnow(:)=0. ; snowhgt(:)=0. ; to_ice(:)=0. ; sissnow(:)=0. 1015 1033 runoff(:)=0. … … 1048 1066 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 1049 1067 !albedo SB <<< 1050 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.01068 yrain_f = 0.0 ; ysnow_f = 0.0 ; ybs_f=0.0 ; yfder = 0.0 ; ysolsw = 0.0 1051 1069 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yu1 = 0.0 1052 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 1070 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 ; yqbs1 = 0.0 1053 1071 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 1054 1072 yq = 0.0 ; y_dflux_t = 0.0 ; y_dflux_q = 0.0 1073 yqbs(:,:)=0.0 1055 1074 yrugoro = 0.0 ; ywindsp = 0.0 1056 1075 !! d_ts = 0.0 ; yfluxlat=0.0 ; flux_t = 0.0 ; flux_q = 0.0 1057 yfluxlat=0.0 1076 yfluxlat=0.0 ; y_flux0(:)=0.0 1058 1077 !! flux_u = 0.0 ; flux_v = 0.0 ; d_t = 0.0 ; d_q = 0.0 1059 1078 !! d_t_diss= 0.0 ;d_u = 0.0 ; d_v = 0.0 … … 1070 1089 ycldt = 0.0 ; yrmu0 = 0.0 1071 1090 ! Martin 1091 y_d_qbs(:,:)=0.0 1072 1092 1073 1093 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 1395 1415 yrain_f(j) = rain_f(i) 1396 1416 ysnow_f(j) = snow_f(i) 1417 ybs_f(j) = bs_f(i) 1397 1418 yagesno(j) = agesno(i,nsrf) 1398 1419 yfder(j) = fder(i) … … 1406 1427 yu1(j) = u(i,1) 1407 1428 yv1(j) = v(i,1) 1429 yqbs1(j) = qbs(i,1) 1408 1430 ypaprs(j,klev+1) = paprs(i,klev+1) 1409 1431 !jyg< … … 1419 1441 !!! nrlmd le 13/06/2011 1420 1442 y_delta_tsurf(j)=delta_tsurf(i,nsrf) 1421 !!! 1443 yfluxbs(j)=0.0 1444 y_flux_bs(j) = 0.0 1422 1445 ENDDO 1423 1446 ! >> PC … … 1458 1481 yt(j,k) = t(i,k) 1459 1482 yq(j,k) = q(i,k) 1483 yqbs(j,k)=qbs(i,k) 1460 1484 ENDDO 1461 1485 ENDDO … … 1880 1904 ENDIF ! (iflag_split .eq.0) 1881 1905 !!! 1906 1907 ! For blowing snow: 1908 IF (ok_bs) THEN 1909 ! following Bintanja et al 2000, part II 1910 ! we assume that the eddy diffuvisity coefficient for 1911 ! suspended particles is larger than Km by a factor zeta_bs 1912 ! which is equal to 3 by default 1913 ycoefqbs=ycoefm*zeta_bs 1914 CALL climb_qbs_down(knon, ycoefqbs, ypaprs, ypplay, & 1915 ydelp, yt, yqbs, dtime, & 1916 CcoefQBS, DcoefQBS, & 1917 Kcoef_qbs, gama_qbs, & 1918 AcoefQBS, BcoefQBS) 1919 ENDIF 1882 1920 1883 1921 !**************************************************************************************** … … 2057 2095 debut, lafin, ydelp(:,1), r_co2_ppm, ysolsw, ysollw, yalb, & 2058 2096 !!jyg yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2059 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, y t1, yq1,&2097 yts, ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2060 2098 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2061 2099 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2063 2101 ylwdown, yq2m, yt2m, & 2064 2102 ysnow, yqsol, yagesno, ytsoil, & 2065 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat, &2103 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,yfluxbs,& 2066 2104 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 2067 2105 y_flux_u1, y_flux_v1, & … … 2106 2144 yrmu0, ylwdown, yalb, zgeo1, & 2107 2145 ysolsw, ysollw, yts, ypplay(:,1), & 2108 !!jyg ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2109 ycdragh, ycdragm, yrain_f, ysnow_f, yt1, yq1,& 2146 ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt1, yq1,& 2110 2147 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2111 2148 AcoefU, AcoefV, BcoefU, BcoefV, & 2112 2149 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 2113 ysnow, yqsurf, yqsol, yagesno, &2150 ysnow, yqsurf, yqsol,yqbs1, yagesno, & 2114 2151 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 2115 y tsurf_new, y_dflux_t, y_dflux_q, &2152 yfluxbs, ytsurf_new, y_dflux_t, y_dflux_q, & 2116 2153 yzmea, yzsig, ycldt, & 2117 2154 ysnowhgt, yqsnow, ytoice, ysissnow, & … … 2147 2184 itap, dtime, jour, knon, ni, & 2148 2185 !!jyg ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 2149 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, y t(:,1), yq(:,1),& ! ym missing init2186 ypplay(:,1), zgeo1(1:knon)/RG, ycdragh, ycdragm, yrain_f, ysnow_f, ybs_f, yt(:,1), yq(:,1),& ! ym missing init 2150 2187 AcoefH, AcoefQ, BcoefH, BcoefQ, & 2151 2188 AcoefU, AcoefV, BcoefU, BcoefV, & … … 2277 2314 ENDDO 2278 2315 ENDIF ! (ok_flux_surf) 2316 2317 ! flux of blowing snow at the first level 2318 IF (ok_bs) THEN 2319 DO j=1,knon 2320 y_flux_bs(j)=yfluxbs(j) 2321 ENDDO 2322 ENDIF 2279 2323 ! 2280 2324 ! ------------------------------------------------------------------------------ … … 2583 2627 ! 2584 2628 ENDIF ! (iflag_split .eq.0) 2629 2630 IF (ok_bs) THEN 2631 CALL climb_qbs_up(knon, dtime, yqbs, & 2632 y_flux_bs, ypaprs, ypplay, & 2633 AcoefQBS, BcoefQBS, & 2634 CcoefQBS, DcoefQBS, & 2635 Kcoef_qbs, gama_qbs, & 2636 y_flux_qbs(:,:), y_d_qbs(:,:)) 2637 ENDIF 2638 2585 2639 !!! 2586 2640 !! … … 2696 2750 !!! 2697 2751 2698 ! print*,'Dans pbl OK1' 2699 2700 !jyg< 2701 !! evap(:,nsrf) = - flux_q(:,1,nsrf) 2702 !>jyg 2752 ! tendencies of blowing snow 2753 IF (ok_bs) THEN 2754 DO k = 1, klev 2755 DO j = 1, knon 2756 i = ni(j) 2757 y_d_qbs(j,k)=y_d_qbs(j,k) * ypct(j) 2758 flux_qbs(i,k,nsrf) = y_flux_qbs(j,k) 2759 ENDDO 2760 ENDDO 2761 ENDIF 2762 2763 2703 2764 DO j = 1, knon 2704 2765 i = ni(j) 2705 2766 evap(i,nsrf) = - flux_q(i,1,nsrf) !jyg 2767 if (ok_bs) then ; snowerosion(i,nsrf)=flux_qbs(i,1,nsrf); endif 2706 2768 beta(i,nsrf) = ybeta(j) !jyg 2707 2769 d_ts(i,nsrf) = y_d_ts(j) … … 2873 2935 ENDDO 2874 2936 ENDDO 2937 2938 2939 IF (ok_bs) THEN 2940 DO k = 1, klev 2941 DO j = 1, knon 2942 i = ni(j) 2943 d_qbs(i,k) = d_qbs(i,k) + y_d_qbs(j,k) 2944 ENDDO 2945 ENDDO 2946 ENDIF 2875 2947 2876 2948 ! print*,'Dans pbl OK4' … … 3327 3399 fder_print(i) = fder(i) + dflux_t(i) + dflux_q(i) 3328 3400 ENDDO 3401 3402 ! if blowing snow 3403 if (ok_bs) then 3404 DO nsrf = 1, nbsrf 3405 DO k = 1, klev 3406 DO i = 1, klon 3407 zxfluxqbs(i,k) = zxfluxqbs(i,k) + flux_qbs(i,k,nsrf) * pctsrf(i,nsrf) 3408 ENDDO 3409 ENDDO 3410 ENDDO 3411 3412 DO i = 1, klon 3413 zxsnowerosion(i) = zxfluxqbs(i,1) ! blowings snow flux at the surface 3414 END DO 3415 endif 3416 3329 3417 !!! 3330 3418
Note: See TracChangeset
for help on using the changeset viewer.