Changeset 2298 for LMDZ5/branches/testing/libf/phylmd/pbl_surface_mod.F90
- Timestamp:
- Jun 14, 2015, 9:13:32 PM (9 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2238-2257,2259-2271,2273,2277-2282,2284-2288,2290-2291
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/phylmd/pbl_surface_mod.F90
r2258 r2298 29 29 30 30 ! Declaration of variables saved in restart file 31 REAL, ALLOCATABLE, DIMENSION(:), PRIVATE, SAVE :: qsol ! water height in the soil (mm)32 !$OMP THREADPRIVATE(qsol)33 31 REAL, ALLOCATABLE, DIMENSION(:), PRIVATE, SAVE :: fder ! flux drift 34 32 !$OMP THREADPRIVATE(fder) … … 37 35 REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE :: qsurf ! humidity at surface 38 36 !$OMP THREADPRIVATE(qsurf) 39 REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE :: evap ! evaporation at surface40 !$OMP THREADPRIVATE(evap)41 REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE :: rugos ! rugosity at surface (m)42 !$OMP THREADPRIVATE(rugos)43 REAL, ALLOCATABLE, DIMENSION(:,:), PRIVATE, SAVE :: agesno ! age of snow at surface44 !$OMP THREADPRIVATE(agesno)45 ! Correction pour le cas AMMA (PRIVATE)46 37 REAL, ALLOCATABLE, DIMENSION(:,:,:), SAVE :: ftsoil ! soil temperature 47 38 !$OMP THREADPRIVATE(ftsoil) … … 51 42 !**************************************************************************************** 52 43 ! 53 SUBROUTINE pbl_surface_init(qsol_rst, fder_rst, snow_rst, qsurf_rst,& 54 evap_rst, rugos_rst, agesno_rst, ftsoil_rst) 44 SUBROUTINE pbl_surface_init(fder_rst, snow_rst, qsurf_rst, ftsoil_rst) 55 45 56 46 ! This routine should be called after the restart file has been read. … … 65 55 ! Input variables 66 56 !**************************************************************************************** 67 REAL, DIMENSION(klon), INTENT(IN) :: qsol_rst68 57 REAL, DIMENSION(klon), INTENT(IN) :: fder_rst 69 58 REAL, DIMENSION(klon, nbsrf), INTENT(IN) :: snow_rst 70 59 REAL, DIMENSION(klon, nbsrf), INTENT(IN) :: qsurf_rst 71 REAL, DIMENSION(klon, nbsrf), INTENT(IN) :: evap_rst72 REAL, DIMENSION(klon, nbsrf), INTENT(IN) :: rugos_rst73 REAL, DIMENSION(klon, nbsrf), INTENT(IN) :: agesno_rst74 60 REAL, DIMENSION(klon, nsoilmx, nbsrf), INTENT(IN) :: ftsoil_rst 75 61 … … 86 72 ! 87 73 !**************************************************************************************** 88 ALLOCATE(qsol(klon), stat=ierr)89 IF (ierr /= 0) CALL abort_gcm('pbl_surface_init', 'pb in allocation',1)90 91 74 ALLOCATE(fder(klon), stat=ierr) 92 75 IF (ierr /= 0) CALL abort_gcm('pbl_surface_init', 'pb in allocation',1) … … 98 81 IF (ierr /= 0) CALL abort_gcm('pbl_surface_init', 'pb in allocation',1) 99 82 100 ALLOCATE(evap(klon,nbsrf), stat=ierr)101 IF (ierr /= 0) CALL abort_gcm('pbl_surface_init', 'pb in allocation',1)102 103 ALLOCATE(rugos(klon,nbsrf), stat=ierr)104 IF (ierr /= 0) CALL abort_gcm('pbl_surface_init', 'pb in allocation',1)105 106 ALLOCATE(agesno(klon,nbsrf), stat=ierr)107 IF (ierr /= 0) CALL abort_gcm('pbl_surface_init', 'pb in allocation',1)108 109 83 ALLOCATE(ftsoil(klon,nsoilmx,nbsrf), stat=ierr) 110 84 IF (ierr /= 0) CALL abort_gcm('pbl_surface_init', 'pb in allocation',1) 111 85 112 86 113 qsol(:) = qsol_rst(:)114 87 fder(:) = fder_rst(:) 115 88 snow(:,:) = snow_rst(:,:) 116 89 qsurf(:,:) = qsurf_rst(:,:) 117 evap(:,:) = evap_rst(:,:)118 rugos(:,:) = rugos_rst(:,:)119 agesno(:,:) = agesno_rst(:,:)120 90 ftsoil(:,:,:) = ftsoil_rst(:,:,:) 121 91 … … 174 144 zsig, lwdown_m, pphi, cldt, & 175 145 rain_f, snow_f, solsw_m, sollw_m, & 146 gustiness, & 176 147 t, q, u, v, & 177 148 !!! nrlmd+jyg le 02/05/2011 et le 20/02/2012 … … 181 152 !!! 182 153 pplay, paprs, pctsrf, & 183 !albedo SB >>>184 ! ts, alb1, alb2,ustar, u10m, v10m,wstar, &185 154 ts,SFRWL, alb_dir, alb_dif,ustar, u10m, v10m,wstar, & 186 !albedo SB <<<187 155 cdragh, cdragm, zu1, zv1, & 188 !albedo SB >>>189 ! alb1_m, alb2_m, zxsens, zxevap, &190 156 alb_dir_m, alb_dif_m, zxsens, zxevap, & 191 !albedo SB <<<192 157 alb3_lic, runoff, snowhgt, qsnow, to_ice, sissnow, & 193 158 zxtsol, zxfluxlat, zt2m, qsat2m, & … … 204 169 !!! 205 170 zcoefh, zcoefm, slab_wfbils, & 206 qsol _d, zq2m, s_pblh, s_plcl, &171 qsol, zq2m, s_pblh, s_plcl, & 207 172 !!! 208 173 !!! jyg le 08/02/2012 … … 211 176 s_capCL, s_oliqCL, s_cteiCL, s_pblT, & 212 177 s_therm, s_trmb1, s_trmb2, s_trmb3, & 213 z xrugs,zustar,zu10m, zv10m, fder_print, &178 zustar,zu10m, zv10m, fder_print, & 214 179 zxqsurf, rh2m, zxfluxu, zxfluxv, & 215 rugos_d, agesno_d, sollw, solsw, &216 d_ts, evap _d, fluxlat, t2m, &180 z0m, z0h, agesno, sollw, solsw, & 181 d_ts, evap, fluxlat, t2m, & 217 182 wfbils, wfbilo, flux_t, flux_u, flux_v,& 218 183 dflux_t, dflux_q, zxsnow, & … … 263 228 ! pplay----input-R- pression au milieu de couche (Pa) 264 229 ! rlat-----input-R- latitude en degree 265 ! rugos----input-R- longeur de rugosite (en m)230 ! z0m, z0h ----input-R- longeur de rugosite (en m) 266 231 ! Martin 267 232 ! zsig-----input-R- slope … … 334 299 REAL, DIMENSION(klon), INTENT(IN) :: zsig ! slope 335 300 REAL, DIMENSION(klon), INTENT(IN) :: lwdown_m ! downward longwave radiation at mean s 301 REAL, DIMENSION(klon), INTENT(IN) :: gustiness ! gustiness 302 336 303 REAL, DIMENSION(klon), INTENT(IN) :: cldt ! total cloud fraction 337 304 REAL, DIMENSION(klon,klev), INTENT(IN) :: pphi ! geopotential (m2/s2) … … 356 323 !wake and off-wake regions 357 324 !albedo SB >>> 358 ! REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: alb1 ! albedo in visible SW interval359 ! REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: alb2 ! albedo in near infra-red SW interval360 325 REAL, DIMENSIOn(6),intent(in) :: SFRWL 361 326 REAL, DIMENSION(klon, nsw, nbsrf), INTENT(INOUT) :: alb_dir,alb_dif … … 382 347 REAL, DIMENSION(klon), INTENT(OUT) :: zv1 ! v wind speed in first layer 383 348 !albedo SB >>> 384 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb1_m ! mean albedo385 ! in visible SW interval386 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb2_m ! mean albedo387 ! in near IR SW interval388 349 REAL, DIMENSION(klon, nsw), INTENT(OUT) :: alb_dir_m,alb_dif_m 389 350 !albedo SB <<< … … 434 395 !!! 435 396 REAL, DIMENSION(klon), INTENT(OUT) :: slab_wfbils! heat balance at surface only for slab at ocean points 436 REAL, DIMENSION(klon), INTENT(OUT) :: qsol _d! water height in the soil (mm)397 REAL, DIMENSION(klon), INTENT(OUT) :: qsol ! water height in the soil (mm) 437 398 REAL, DIMENSION(klon), INTENT(OUT) :: zq2m ! water vapour at 2m, mean for each grid point 438 399 REAL, DIMENSION(klon), INTENT(OUT) :: s_pblh ! height of the planetary boundary layer(HPBL) … … 454 415 REAL, DIMENSION(klon), INTENT(OUT) :: s_trmb2 ! inhibition, mean for each grid point 455 416 REAL, DIMENSION(klon), INTENT(OUT) :: s_trmb3 ! point Omega, mean for each grid point 456 REAL, DIMENSION(klon), INTENT(OUT) :: zxrugs ! rugosity at surface (m), mean for each grid point457 417 REAL, DIMENSION(klon), INTENT(OUT) :: zustar ! u* 458 418 REAL, DIMENSION(klon), INTENT(OUT) :: zu10m ! u speed at 10m, mean for each grid point … … 463 423 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxu ! u wind tension, mean for each grid point 464 424 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxv ! v wind tension, mean for each grid point 465 REAL, DIMENSION(klon, nbsrf ), INTENT(OUT) :: rugos_d! rugosity length (m)466 REAL, DIMENSION(klon, nbsrf), INTENT( OUT) :: agesno_d! age of snow at surface425 REAL, DIMENSION(klon, nbsrf+1), INTENT(INOUT) :: z0m,z0h ! rugosity length (m) 426 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: agesno ! age of snow at surface 467 427 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: solsw ! net shortwave radiation at surface 468 428 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 469 429 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 470 REAL, DIMENSION(klon, nbsrf), INTENT( OUT) :: evap_d! evaporation at surface430 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 471 431 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 472 432 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 519 479 REAL :: f1 ! fraction de longeurs visibles parmi tout SW intervalle 520 480 REAL, DIMENSION(klon) :: r_co2_ppm ! taux CO2 atmosphere 521 REAL, DIMENSION(klon) :: yts, y rugos, ypct, yz0_new481 REAL, DIMENSION(klon) :: yts, yz0m, yz0h, ypct 522 482 !albedo SB >>> 523 ! REAL, DIMENSION(klon) :: yalb, yalb1, yalb2524 483 REAL, DIMENSION(klon) :: yalb,yalb_vis 525 484 !albedo SB <<< … … 559 518 REAL, DIMENSION(klon) :: AcoefU, AcoefV, BcoefU, BcoefV 560 519 REAL, DIMENSION(klon) :: ypsref 561 REAL, DIMENSION(klon) :: yevap, ytsurf_new, yalb 1_new, yalb2_new, yalb3_new520 REAL, DIMENSION(klon) :: yevap, ytsurf_new, yalb3_new 562 521 !albedo SB >>> 563 522 REAL, DIMENSION(klon,nsw) :: yalb_dir_new, yalb_dif_new … … 795 754 REAL, DIMENSION(klon, nbsrf) :: alb ! mean albedo for whole SW interval 796 755 REAL, DIMENSION(klon) :: ylwdown ! jg : temporary (ysollwdown) 756 REAL, DIMENSION(klon) :: ygustiness ! jg : temporary (ysollwdown) 797 757 798 758 REAL :: zx_qs1, zcor1, zdelta1 … … 823 783 824 784 IF (first_call) THEN 785 print*,'PBL SURFACE AVEC GUSTINESS' 825 786 first_call=.FALSE. 826 787 … … 877 838 zu1(:)=0. ; zv1(:)=0. 878 839 !albedo SB >>> 879 ! alb1_m(:)=0. ; alb2_m(:)=0. ; alb3_lic(:)=0.880 840 alb_dir_m=0. ; alb_dif_m=0. ; alb3_lic(:)=0. 881 841 !albedo SB <<< … … 890 850 kh(:)=0. ; kh_x(:)=0. ; kh_w(:)=0. 891 851 slab_wfbils(:)=0. 892 qsol_d(:)=0.893 852 s_pblh(:)=0. ; s_pblh_x(:)=0. ; s_pblh_w(:)=0. 894 853 s_plcl(:)=0. ; s_plcl_x(:)=0. ; s_plcl_w(:)=0. … … 896 855 s_therm(:)=0. 897 856 s_trmb1(:)=0. ; s_trmb2(:)=0. ; s_trmb3(:)=0. 898 z xrugs(:)=0. ; zustar(:)=0.857 zustar(:)=0. 899 858 zu10m(:)=0. ; zv10m(:)=0. 900 859 fder_print(:)=0. 901 860 zxqsurf(:)=0. 902 861 zxfluxu(:,:)=0. ; zxfluxv(:,:)=0. 903 rugos_d(:,:)=0. ; agesno_d(:,:)=0.904 862 solsw(:,:)=0. ; sollw(:,:)=0. 905 863 d_ts(:,:)=0. 906 evap _d(:,:)=0.864 evap(:,:)=0. 907 865 fluxlat(:,:)=0. 908 866 wfbils(:,:)=0. ; wfbilo(:,:)=0. … … 943 901 !! cdragh = 0.0 ; cdragm = 0.0 ; dflux_t = 0.0 ; dflux_q = 0.0 944 902 ypct = 0.0 ; yts = 0.0 ; ysnow = 0.0 945 !! zv1 = 0.0 ; yqsurf = 0.0 ; yalb1 = 0.0 ; yalb2 = 0.0903 !! zv1 = 0.0 ; yqsurf = 0.0 946 904 !albedo SB >>> 947 ! yqsurf = 0.0 ; yalb1 = 0.0 ; yalb2 = 0.0948 905 yqsurf = 0.0 ; yalb = 0.0 ; yalb_vis = 0.0 949 906 !albedo SB <<< 950 907 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.0 951 ysollw = 0.0 ; y rugos = 0.0; yu1 = 0.0908 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yu1 = 0.0 952 909 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 953 910 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 … … 1077 1034 !**************************************************************************************** 1078 1035 1079 zxrugs(:) = 0.01080 1036 DO nsrf = 1, nbsrf 1081 1037 DO i = 1, klon 1082 rugos(i,nsrf) = MAX(rugos(i,nsrf),0.000015)1083 z xrugs(i) = zxrugs(i) + rugos(i,nsrf)*pctsrf(i,nsrf)1038 z0m(i,nsrf) = MAX(z0m(i,nsrf),z0min) 1039 z0h(i,nsrf) = MAX(z0h(i,nsrf),z0min) 1084 1040 ENDDO 1085 1041 ENDDO … … 1087 1043 ! Mean calculations of albedo 1088 1044 ! 1089 ! Albedo at sub-surface1090 ! * alb1 : albedo in visible SW interval1091 ! * alb2 : albedo in near infrared SW interval1092 1045 ! * alb : mean albedo for whole SW interval 1093 1046 ! 1094 1047 ! Mean albedo for grid point 1095 ! * alb1_m : albedo in visible SW interval1096 ! * alb2_m : albedo in near infrared SW interval1097 1048 ! * alb_m : mean albedo at whole SW interval 1098 1099 !albedo SB >>>1100 ! alb1_m(:) = 0.01101 ! alb2_m(:) = 0.01102 ! DO nsrf = 1, nbsrf1103 ! DO i = 1, klon1104 ! alb1_m(i) = alb1_m(i) + alb1(i,nsrf) * pctsrf(i,nsrf)1105 ! alb2_m(i) = alb2_m(i) + alb2(i,nsrf) * pctsrf(i,nsrf)1106 ! ENDDO1107 ! ENDDO1108 1049 1109 1050 alb_dir_m(:,:) = 0.0 … … 1123 1064 ! f1 = 1 ! put f1=1 to recreate old calculations 1124 1065 1125 ! DO nsrf = 1, nbsrf1126 ! DO i = 1, klon1127 ! alb(i,nsrf) = f1*alb1(i,nsrf) + (1-f1)*alb2(i,nsrf)1128 ! ENDDO1129 ! ENDDO1130 !1131 ! DO i = 1, klon1132 ! alb_m(i) = f1*alb1_m(i) + (1-f1)*alb2_m(i)1133 ! END DO1134 1135 1136 1066 !f1 is already included with SFRWL values in each surf files 1137 1067 alb=0.0 … … 1177 1107 ENDDO 1178 1108 ENDDO 1179 1180 1109 1181 1110 !**************************************************************************************** … … 1231 1160 yalb(j) = alb(i,nsrf) 1232 1161 !albedo SB >>> 1233 ! yalb1(j) = alb1(i,nsrf)1234 ! yalb2(j) = alb2(i,nsrf)1235 1162 yalb_vis(j) = alb_dir(i,1,nsrf) 1236 1163 if(nsw==6)then … … 1244 1171 yfder(j) = fder(i) 1245 1172 ylwdown(j) = lwdown_m(i) 1173 ygustiness(j) = gustiness(i) 1246 1174 ysolsw(j) = solsw(i,nsrf) 1247 1175 ysollw(j) = sollw(i,nsrf) 1248 yrugos(j) = rugos(i,nsrf) 1176 yz0m(j) = z0m(i,nsrf) 1177 yz0h(j) = z0h(i,nsrf) 1249 1178 yrugoro(j) = rugoro(i) 1250 1179 yu1(j) = u(i,1) … … 1377 1306 CALL cdrag(knon, nsrf, & 1378 1307 speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1),& 1379 yts, yqsurf, y rugos, &1308 yts, yqsurf, yz0m, yz0h, & 1380 1309 ycdragm, ycdragh, zri1, pref ) 1381 1310 … … 1408 1337 CALL cdrag(knon, nsrf, & 1409 1338 speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1),& 1410 yts_x, yqsurf, y rugos, &1339 yts_x, yqsurf, yz0m, yz0h, & 1411 1340 ycdragm_x, ycdragh_x, zri1_x, pref_x ) 1412 1341 … … 1422 1351 IF (prt_level >=10) print *,'clcdrag -> ycdragh_x ', ycdragh_x 1423 1352 ! 1424 CALL clcdrag( knon, nsrf, ypaprs, ypplay, & 1425 yu_w(:,1), yv_w(:,1), yt_w(:,1), yq_w(:,1), & 1426 yts_w, yqsurf, yrugos, & 1427 ycdragm_w, ycdragh_w ) 1353 ! Faire disparaitre les lignes commentees fin 2015 (le temps des tests) 1354 ! CALL clcdrag( knon, nsrf, ypaprs, ypplay, & 1355 ! yu_w(:,1), yv_w(:,1), yt_w(:,1), yq_w(:,1), & 1356 ! yts_w, yqsurf, yz0m, & 1357 ! ycdragm_w, ycdragh_w ) 1358 ! Fuxing WANG, 04/03/2015, replace the clcdrag by the merged version: cdrag 1359 DO i = 1, knon 1360 zgeo1_w(i) = RD * yt_w(i,1) / (0.5*(ypaprs(i,1)+ypplay(i,1))) & 1361 * (ypaprs(i,1)-ypplay(i,1)) 1362 speed_w(i) = SQRT(yu_w(i,1)**2+yv_w(i,1)**2) 1363 END DO 1364 CALL cdrag(knon, nsrf, & 1365 speed_w, yt_w(:,1), yq_w(:,1), zgeo1_w, ypaprs(:,1),& 1366 yts_w, yqsurf, yz0m, yz0h, & 1367 ycdragm_w, ycdragh_w, zri1_w, pref_w ) 1368 1428 1369 ! --- special Dice. JYG+MPL 25112013 1429 1370 IF (ok_prescr_ust) then … … 1456 1397 print *,' args coef_diff_turb: yt ', yt 1457 1398 print *,' args coef_diff_turb: yts ', yts 1458 print *,' args coef_diff_turb: y rugos ', yrugos1399 print *,' args coef_diff_turb: yz0m ', yz0m 1459 1400 print *,' args coef_diff_turb: yqsurf ', yqsurf 1460 1401 print *,' args coef_diff_turb: ycdragm ', ycdragm … … 1463 1404 ENDIF 1464 1405 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1465 ypaprs, ypplay, yu, yv, yq, yt, yts, y rugos, yqsurf, ycdragm, &1406 ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, & 1466 1407 ycoefm, ycoefh, ytke) 1467 1408 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 1484 1425 print *,' args coef_diff_turb: yt_x ', yt_x 1485 1426 print *,' args coef_diff_turb: yts_x ', yts_x 1486 print *,' args coef_diff_turb: yrugos ', yrugos1487 1427 print *,' args coef_diff_turb: yqsurf ', yqsurf 1488 1428 print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x … … 1491 1431 ENDIF 1492 1432 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1493 ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, y rugos, yqsurf, ycdragm_x, &1433 ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf, ycdragm_x, & 1494 1434 ycoefm_x, ycoefh_x, ytke_x) 1495 1435 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 1511 1451 print *,' args coef_diff_turb: yt_w ', yt_w 1512 1452 print *,' args coef_diff_turb: yts_w ', yts_w 1513 print *,' args coef_diff_turb: yrugos ', yrugos1514 1453 print *,' args coef_diff_turb: yqsurf ', yqsurf 1515 1454 print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w … … 1518 1457 ENDIF 1519 1458 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1520 ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, y rugos, yqsurf, ycdragm_w, &1459 ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf, ycdragm_w, & 1521 1460 ycoefm_w, ycoefh_w, ytke_w) 1522 1461 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 1779 1718 CALL stdlevvar(klon, knon, is_ter, zxli, & 1780 1719 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 1781 yts, yqsurf, y rugos, ypaprs(:,1), ypplay(:,1), &1720 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 1782 1721 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 1783 1722 … … 1801 1740 AcoefH, AcoefQ, BcoefH, BcoefQ, & 1802 1741 AcoefU, AcoefV, BcoefU, BcoefV, & 1803 ypsref, yu1, yv1, y rugoro, pctsrf, &1742 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 1804 1743 ylwdown, yq2m, yt2m, & 1805 1744 ysnow, yqsol, yagesno, ytsoil, & 1806 !albedo SB >>> 1807 ! yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, & 1808 yz0_new, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1809 !albedo SB <<< 1745 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1810 1746 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 1811 1747 y_flux_u1, y_flux_v1 ) … … 1818 1754 ! ytsoil(:,:)=300. 1819 1755 ! yz0_new(:)=0.001 1820 ! yalb1_new(:)=0.221821 ! yalb2_new(:)=0.221822 1756 ! yevap(:)=flat/RLVTT 1823 1757 ! yfluxlat(:)=-flat … … 1841 1775 AcoefH, AcoefQ, BcoefH, BcoefQ, & 1842 1776 AcoefU, AcoefV, BcoefU, BcoefV, & 1843 ypsref, yu1, yv1, y rugoro, pctsrf, &1777 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 1844 1778 ysnow, yqsurf, yqsol, yagesno, & 1845 !albedo SB >>> 1846 ! ytsoil, yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, & 1847 ytsoil, yz0_new, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 1848 !albedo SB <<< 1779 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 1849 1780 ytsurf_new, y_dflux_t, y_dflux_q, & 1850 1781 yzsig, ycldt, & … … 1852 1783 yalb3_new, yrunoff, & 1853 1784 y_flux_u1, y_flux_v1) 1854 !CALL surf_landice(itap, dtime, knon, ni, &1855 ! ysolsw, ysollw, yts, ypplay(:,1), &1856 ! ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&1857 ! AcoefH, AcoefQ, BcoefH, BcoefQ, &1858 ! AcoefU, AcoefV, BcoefU, BcoefV, &1859 ! ypsref, yu1, yv1, yrugoro, pctsrf, &1860 ! ysnow, yqsurf, yqsol, yagesno, &1861 ! ytsoil, yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, &1862 ! ytsurf_new, y_dflux_t, y_dflux_q, &1863 ! y_flux_u1, y_flux_v1)1864 1785 1865 1786 !jyg< … … 1878 1799 1879 1800 CASE(is_oce) 1880 !albedo SB >>>1881 ! CALL surf_ocean(rlon, rlat, ysolsw, ysollw, yalb1, &1882 1801 CALL surf_ocean(rlon, rlat, ysolsw, ysollw, yalb_vis, & 1883 !albedo SB <<< 1884 yrugos, ywindsp, rmu0, yfder, yts, & 1802 ywindsp, rmu0, yfder, yts, & 1885 1803 itap, dtime, jour, knon, ni, & 1886 ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),&1804 ypplay(:,1), zgeo1/RG, ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& 1887 1805 AcoefH, AcoefQ, BcoefH, BcoefQ, & 1888 1806 AcoefU, AcoefV, BcoefU, BcoefV, & 1889 ypsref, yu1, yv1, y rugoro, pctsrf, &1807 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 1890 1808 ysnow, yqsurf, yagesno, & 1891 !albedo SB >>> 1892 ! yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, & 1893 yz0_new, SFRWL,yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1894 !albedo SB <<< 1809 yz0m, yz0h, SFRWL,yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1895 1810 ytsurf_new, y_dflux_t, y_dflux_q, slab_wfbils, & 1896 1811 y_flux_u1, y_flux_v1) … … 1914 1829 CALL surf_seaice( & 1915 1830 !albedo SB >>> 1916 ! rlon, rlat, ysolsw, ysollw, yalb1, yfder, &1917 1831 rlon, rlat, ysolsw, ysollw, yalb_vis, yfder, & 1918 1832 !albedo SB <<< … … 1922 1836 AcoefH, AcoefQ, BcoefH, BcoefQ, & 1923 1837 AcoefU, AcoefV, BcoefU, BcoefV, & 1924 ypsref, yu1, yv1, y rugoro, pctsrf, &1838 ypsref, yu1, yv1, ygustiness, pctsrf, & 1925 1839 ysnow, yqsurf, yqsol, yagesno, ytsoil, & 1926 1840 !albedo SB >>> 1927 ! yz0_new, yalb1_new, yalb2_new, yevap, yfluxsens, yfluxlat, & 1928 yz0_new, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1841 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1929 1842 !albedo SB <<< 1930 1843 ytsurf_new, y_dflux_t, y_dflux_q, & … … 2298 2211 d_ts(i,nsrf) = y_d_ts(j) 2299 2212 !albedo SB >>> 2300 ! alb1(i,nsrf) = yalb1_new(j)2301 ! alb2(i,nsrf) = yalb2_new(j)2302 2213 do k=1,nsw 2303 2214 alb_dir(i,k,nsrf) = yalb_dir_new(j,k) … … 2307 2218 snow(i,nsrf) = ysnow(j) 2308 2219 qsurf(i,nsrf) = yqsurf(j) 2309 rugos(i,nsrf) = yz0_new(j) 2220 z0m(i,nsrf) = yz0m(j) 2221 z0h(i,nsrf) = yz0h(j) 2310 2222 fluxlat(i,nsrf) = yfluxlat(j) 2311 2223 agesno(i,nsrf) = yagesno(j) … … 2519 2431 DO j=1, knon 2520 2432 i = ni(j) 2521 rugo1(j) = y rugos(j)2433 rugo1(j) = yz0m(j) 2522 2434 IF(nsrf.EQ.is_oce) THEN 2523 rugo1(j) = rugos(i,nsrf)2435 rugo1(j) = z0m(i,nsrf) 2524 2436 ENDIF 2525 2437 psfce(j)=ypaprs(j,1) … … 2536 2448 CALL stdlevvar(klon, knon, nsrf, zxli, & 2537 2449 uzon, vmer, tair1, qair1, zgeo1, & 2538 tairsol, qairsol, rugo1, psfce, patm, &2450 tairsol, qairsol, rugo1, rugo1, psfce, patm, & 2539 2451 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 2540 2452 ELSE !(iflag_split .eq.0) 2541 2453 CALL stdlevvar(klon, knon, nsrf, zxli, & 2542 2454 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & 2543 tairsol_x, qairsol, rugo1, psfce, patm, &2455 tairsol_x, qairsol, rugo1, rugo1, psfce, patm, & 2544 2456 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x) 2545 2457 CALL stdlevvar(klon, knon, nsrf, zxli, & 2546 2458 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & 2547 tairsol_w, qairsol, rugo1, psfce, patm, &2459 tairsol_w, qairsol, rugo1, rugo1, psfce, patm, & 2548 2460 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w) 2549 2461 !!! … … 2771 2683 !**************************************************************************************** 2772 2684 2685 z0m(:,nbsrf+1) = 0.0 2686 z0h(:,nbsrf+1) = 0.0 2687 DO nsrf = 1, nbsrf 2688 DO i = 1, klon 2689 z0m(i,nbsrf+1) = z0m(i,nbsrf+1) + z0m(i,nsrf)*pctsrf(i,nsrf) 2690 z0h(i,nbsrf+1) = z0h(i,nbsrf+1) + z0h(i,nsrf)*pctsrf(i,nsrf) 2691 ENDDO 2692 ENDDO 2693 2773 2694 ! print*,'OK pbl 7' 2774 2695 zxfluxt(:,:) = 0.0 ; zxfluxq(:,:) = 0.0 … … 2987 2908 zv1(:) = v(:,1) 2988 2909 2989 ! Some of the module declared variables are returned for printing in physiq.F2990 qsol_d(:) = qsol(:)2991 evap_d(:,:) = evap(:,:)2992 rugos_d(:,:) = rugos(:,:)2993 agesno_d(:,:) = agesno(:,:)2994 2995 2910 2996 2911 END SUBROUTINE pbl_surface … … 2998 2913 !**************************************************************************************** 2999 2914 ! 3000 SUBROUTINE pbl_surface_final(qsol_rst, fder_rst, snow_rst, qsurf_rst, & 3001 evap_rst, rugos_rst, agesno_rst, ftsoil_rst) 2915 SUBROUTINE pbl_surface_final(fder_rst, snow_rst, qsurf_rst, ftsoil_rst) 3002 2916 3003 2917 USE indice_sol_mod … … 3007 2921 ! Ouput variables 3008 2922 !**************************************************************************************** 3009 REAL, DIMENSION(klon), INTENT(OUT) :: qsol_rst3010 2923 REAL, DIMENSION(klon), INTENT(OUT) :: fder_rst 3011 2924 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: snow_rst 3012 2925 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: qsurf_rst 3013 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: evap_rst3014 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: rugos_rst3015 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: agesno_rst3016 2926 REAL, DIMENSION(klon, nsoilmx, nbsrf), INTENT(OUT) :: ftsoil_rst 3017 2927 … … 3021 2931 ! 3022 2932 !**************************************************************************************** 3023 qsol_rst(:) = qsol(:)3024 2933 fder_rst(:) = fder(:) 3025 2934 snow_rst(:,:) = snow(:,:) 3026 2935 qsurf_rst(:,:) = qsurf(:,:) 3027 evap_rst(:,:) = evap(:,:)3028 rugos_rst(:,:) = rugos(:,:)3029 agesno_rst(:,:) = agesno(:,:)3030 2936 ftsoil_rst(:,:,:) = ftsoil(:,:,:) 3031 2937 … … 3035 2941 !**************************************************************************************** 3036 2942 ! DEALLOCATE(qsol, fder, snow, qsurf, evap, rugos, agesno, ftsoil) 3037 IF (ALLOCATED(qsol)) DEALLOCATE(qsol)3038 2943 IF (ALLOCATED(fder)) DEALLOCATE(fder) 3039 2944 IF (ALLOCATED(snow)) DEALLOCATE(snow) 3040 2945 IF (ALLOCATED(qsurf)) DEALLOCATE(qsurf) 3041 IF (ALLOCATED(evap)) DEALLOCATE(evap)3042 IF (ALLOCATED(rugos)) DEALLOCATE(rugos)3043 IF (ALLOCATED(agesno)) DEALLOCATE(agesno)3044 2946 IF (ALLOCATED(ftsoil)) DEALLOCATE(ftsoil) 3045 2947 … … 3050 2952 3051 2953 !albedo SB >>> 3052 ! SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, tsurf, alb1, alb2, ustar, u10m, v10m, tke) 3053 SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke) 2954 SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, & 2955 evap, z0m, z0h, agesno, & 2956 tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke) 3054 2957 !albedo SB <<< 3055 2958 ! Give default values where new fraction has appread … … 3070 2973 REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: tsurf 3071 2974 !albedo SB >>> 3072 ! REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: alb1, alb23073 2975 REAL, DIMENSION(klon,nsw,nbsrf), INTENT(INOUT) :: alb_dir, alb_dif 3074 2976 INTEGER :: k 3075 2977 !albedo SB <<< 3076 2978 REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: ustar,u10m, v10m 2979 REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: evap, agesno 2980 REAL, DIMENSION(klon,nbsrf+1), INTENT(INOUT) :: z0m,z0h 3077 2981 REAL, DIMENSION(klon,klev+1,nbsrf+1), INTENT(INOUT) :: tke 3078 2982 … … 3116 3020 qsurf(i,nsrf) = qsurf(i,nsrf_comp1) 3117 3021 evap(i,nsrf) = evap(i,nsrf_comp1) 3118 rugos(i,nsrf) = rugos(i,nsrf_comp1) 3022 z0m(i,nsrf) = z0m(i,nsrf_comp1) 3023 z0h(i,nsrf) = z0h(i,nsrf_comp1) 3119 3024 tsurf(i,nsrf) = tsurf(i,nsrf_comp1) 3120 3025 !albedo SB >>> 3121 ! alb1(i,nsrf) = alb1(i,nsrf_comp1)3122 ! alb2(i,nsrf) = alb2(i,nsrf_comp1)3123 3026 DO k=1,nsw 3124 3027 alb_dir(i,k,nsrf)=alb_dir(i,k,nsrf_comp1) … … 3137 3040 qsurf(i,nsrf) = qsurf(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + qsurf(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3138 3041 evap(i,nsrf) = evap(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + evap(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3) 3139 rugos(i,nsrf) = rugos(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + rugos(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3042 z0m(i,nsrf) = z0m(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + z0m(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3043 z0h(i,nsrf) = z0h(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + z0h(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3140 3044 tsurf(i,nsrf) = tsurf(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + tsurf(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3141 3045 !albedo SB >>> 3142 ! alb1(i,nsrf) = alb1(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + alb1(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3)3143 ! alb2(i,nsrf) = alb2(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + alb2(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3)3144 3046 DO k=1,nsw 3145 3047 alb_dir(i,k,nsrf)=alb_dir(i,k,nsrf_comp2)*pctsrf_old(i,nsrf_comp2)+&
Note: See TracChangeset
for help on using the changeset viewer.