Changeset 2243
- Timestamp:
- Mar 24, 2015, 2:28:51 PM (10 years ago)
- Location:
- LMDZ5/trunk/libf/phylmd
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/cdrag.F90
r2232 r2243 4 4 SUBROUTINE cdrag( knon, nsrf, & 5 5 speed, t1, q1, zgeop1, & 6 psol, tsurf, qsurf, rugos, &6 psol, tsurf, qsurf, z0m, z0h, & 7 7 pcfm, pcfh, zri, pref ) 8 8 … … 45 45 ! tsurf---input-R- temperature de l'air a la surface 46 46 ! qsurf---input-R- humidite de l'air a la surface 47 ! rugos---input-R- rugosite47 ! z0m, z0h---input-R- rugosite 48 48 !! u1, v1 are removed, speed is used. Fuxing WANG, 04/03/2015, 49 49 !! u1------input-R- vent zonal au 1er niveau du modele … … 71 71 REAL, DIMENSION(klon), INTENT(IN) :: tsurf ! Surface temperature (K) 72 72 REAL, DIMENSION(klon), INTENT(IN) :: qsurf ! Surface humidity (Kg/Kg) 73 REAL, DIMENSION(klon), INTENT(IN) :: rugos! Rugosity at surface (m)73 REAL, DIMENSION(klon), INTENT(IN) :: z0m, z0h ! Rugosity at surface (m) 74 74 ! paprs, pplay u1, v1: to be deleted 75 75 ! they were in the old clcdrag. Fuxing WANG, 04/03/2015 … … 113 113 REAL, DIMENSION(klon) :: zcfh1, zcfh2 ! Drag coefficient for heat flux 114 114 LOGICAL, PARAMETER :: zxli=.FALSE. ! calcul des cdrags selon Laurent Li 115 REAL, DIMENSION(klon) :: zcdn ! Drag coefficient in neutral conditions115 REAL, DIMENSION(klon) :: zcdn_m, zcdn_h ! Drag coefficient in neutral conditions 116 116 ! 117 117 ! Fonctions thermodynamiques et fonctions d'instabilite … … 174 174 *(1.+RETV*max(q1(i),0.0)) ! negative q1 set to zero 175 175 zri(i) = zgeop1(i)*(ztvd-ztsolv)/(zdu2*ztvd) 176 zcdn(i) = (CKAP/LOG(1.+zgeop1(i)/(RG*rugos(i))))**2 176 177 178 ! Coefficients CD neutres pour m et h 179 zcdn_m(i) = (CKAP/LOG(1.+zgeop1(i)/(RG*z0m(i))))**2 180 zcdn_h(i) = (CKAP/LOG(1.+zgeop1(i)/(RG*z0h(i))))**2 177 181 178 182 IF (zri(i) .GT. 0.) THEN ! situation stable … … 181 185 zscf = SQRT(1.+CD*ABS(zri(i))) 182 186 friv = AMAX1(1. / (1.+2.*CB*zri(i)/ZSCF), f_ri_cd_min) 183 zcfm1(i) = zcdn (i) * friv187 zcfm1(i) = zcdn_m(i) * friv 184 188 frih = AMAX1(1./ (1.+3.*CB*zri(i)*ZSCF), f_ri_cd_min ) 185 189 !!$ PB zcfh1(i) = zcdn(i) * frih 186 190 !!$ PB zcfh1(i) = f_cdrag_stable * zcdn(i) * frih 187 zcfh1(i) = f_cdrag_ter * zcdn (i) * frih188 IF(nsrf.EQ.is_oce) zcfh1(i) = f_cdrag_oce * zcdn (i) * frih191 zcfh1(i) = f_cdrag_ter * zcdn_h(i) * frih 192 IF(nsrf.EQ.is_oce) zcfh1(i) = f_cdrag_oce * zcdn_h(i) * frih 189 193 !!$ PB 190 194 pcfm(i) = zcfm1(i) 191 195 pcfh(i) = zcfh1(i) 192 196 ELSE 193 pcfm(i) = zcdn (i)* fsta(zri(i))194 pcfh(i) = zcdn (i)* fsta(zri(i))197 pcfm(i) = zcdn_m(i)* fsta(zri(i)) 198 pcfh(i) = zcdn_h(i)* fsta(zri(i)) 195 199 ENDIF 196 200 ELSE ! situation instable 197 201 IF (.NOT.zxli) THEN 198 zucf = 1./(1.+3.0*CB*CC*zcdn (i)*SQRT(ABS(zri(i)) &199 *(1.0+zgeop1(i)/(RG* rugos(i)))))200 zcfm2(i) = zcdn (i)*amax1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min)201 !!$ PB zcfh2(i) = zcdn (i)*amax1((1.-3.0*cb*zri(i)*zucf),f_ri_cd_min)202 zcfh2(i) = f_cdrag_ter*zcdn (i)*amax1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min)202 zucf = 1./(1.+3.0*CB*CC*zcdn_m(i)*SQRT(ABS(zri(i)) & 203 *(1.0+zgeop1(i)/(RG*z0m(i))))) 204 zcfm2(i) = zcdn_m(i)*amax1((1.-2.0*CB*zri(i)*zucf),f_ri_cd_min) 205 !!$ PB zcfh2(i) = zcdn_h(i)*amax1((1.-3.0*cb*zri(i)*zucf),f_ri_cd_min) 206 zcfh2(i) = f_cdrag_ter*zcdn_h(i)*amax1((1.-3.0*CB*zri(i)*zucf),f_ri_cd_min) 203 207 pcfm(i) = zcfm2(i) 204 208 pcfh(i) = zcfh2(i) 205 209 ELSE 206 pcfm(i) = zcdn (i)* fins(zri(i))207 pcfh(i) = zcdn (i)* fins(zri(i))210 pcfm(i) = zcdn_m(i)* fins(zri(i)) 211 pcfh(i) = zcdn_h(i)* fins(zri(i)) 208 212 ENDIF 209 213 ! cdrah sur l'ocean cf. Miller et al. (1992) 210 zcr = (0.0016/(zcdn (i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.)211 IF(nsrf.EQ.is_oce) pcfh(i) =f_cdrag_oce* zcdn (i)*(1.0+zcr**1.25)**(1./1.25)214 zcr = (0.0016/(zcdn_m(i)*SQRT(zdu2)))*ABS(ztvd-ztsolv)**(1./3.) 215 IF(nsrf.EQ.is_oce) pcfh(i) =f_cdrag_oce* zcdn_h(i)*(1.0+zcr**1.25)**(1./1.25) 212 216 ENDIF 213 217 END DO -
LMDZ5/trunk/libf/phylmd/change_srf_frac_mod.F90
r2227 r2243 12 12 13 13 SUBROUTINE change_srf_frac(itime, dtime, jour, & 14 !albedo SB >>> 15 ! pctsrf, alb1, alb2, tsurf, ustar, u10m, v10m, pbl_tke) 16 pctsrf, alb_dir, alb_dif, tsurf, ustar, u10m, v10m, pbl_tke) 17 !albedo SB <<< 14 pctsrf, evap, z0m, z0h, agesno, & 15 alb_dir, alb_dif, tsurf, ustar, u10m, v10m, pbl_tke) 18 16 19 17 … … 54 52 55 53 REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: pctsrf ! sub-surface fraction 54 REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: evap, agesno ! sub-surface fraction 55 REAL, DIMENSION(klon,nbsrf+1), INTENT(INOUT) :: z0m,z0h ! sub-surface fraction 56 56 !albedo SB >>> 57 ! REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: alb1 ! albedo first interval in SW spektrum58 ! REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: alb2 ! albedo second interval in SW spektrum59 57 REAL, DIMENSION(klon,nsw,nbsrf), INTENT(INOUT) :: alb_dir,alb_dif 60 58 !albedo SB <<< … … 176 174 !**************************************************************************************** 177 175 178 !albedo SB >>> 179 ! CALL pbl_surface_newfrac(itime, pctsrf, pctsrf_old, tsurf, alb1, alb2, ustar, 180 ! u10m, v10m, pbl_tke) 181 CALL pbl_surface_newfrac(itime, pctsrf, pctsrf_old, tsurf, alb_dir,alb_dif, ustar, u10m, v10m, pbl_tke) 182 !albedo SB <<< 183 176 CALL pbl_surface_newfrac(itime, pctsrf, pctsrf_old, & 177 evap, z0m, z0h, agesno, & 178 tsurf, alb_dir,alb_dif, ustar, u10m, v10m, pbl_tke) 184 179 185 180 -
LMDZ5/trunk/libf/phylmd/clesphys.h
r2240 r2243 45 45 Real f_cdrag_ter,f_cdrag_oce 46 46 REAL min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce 47 INTEGER iflag_gusts 47 REAL z0m_seaice,z0h_seaice 48 INTEGER iflag_gusts,iflag_z0_oce 48 49 49 50 ! Rugoro 50 Real f_rugoro 51 Real f_rugoro,z0min 51 52 52 53 !IM lev_histhf : niveau sorties 6h … … 94 95 & , cdmmax, cdhmax, ksta, ksta_ter, f_ri_cd_min & 95 96 & , fmagic, pmagic & 96 & , f_cdrag_ter,f_cdrag_oce,f_rugoro 97 & , f_cdrag_ter,f_cdrag_oce,f_rugoro,z0min & 97 98 & , min_wind_speed,f_gust_wk,f_gust_bl,f_qsat_oce & 99 & , z0m_seaice,z0h_seaice & 98 100 & , pasphys , freq_outNMC, freq_calNMC & 99 101 & , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins & … … 119 121 & , ok_mensuelCOSP,ok_journeCOSP,ok_hfCOSP & 120 122 & , ip_ebil_phy & 121 & , iflag_gusts 123 & , iflag_gusts ,iflag_z0_oce & 122 124 & , ok_lic_melt, aer_type & 123 125 & , iflag_rrtm, ok_strato,ok_hines, ok_qch4 & -
LMDZ5/trunk/libf/phylmd/coef_diff_turb_mod.F90
r1932 r2243 13 13 ! 14 14 SUBROUTINE coef_diff_turb(dtime, nsrf, knon, ni, & 15 ypaprs, ypplay, yu, yv, yq, yt, yts, y rugos, yqsurf, ycdragm, &15 ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, & 16 16 ycoefm, ycoefh ,yq2) 17 17 … … 34 34 REAL, DIMENSION(klon,klev), INTENT(IN) :: yu, yv 35 35 REAL, DIMENSION(klon,klev), INTENT(IN) :: yq, yt 36 REAL, DIMENSION(klon), INTENT(IN) :: yts, y rugos, yqsurf36 REAL, DIMENSION(klon), INTENT(IN) :: yts, yqsurf 37 37 REAL, DIMENSION(klon), INTENT(IN) :: ycdragm 38 38 … … 70 70 CALL coefkz(nsrf, knon, ypaprs, ypplay, & 71 71 ksta, ksta_ter, & 72 yts, y rugos, yu, yv, yt, yq, &72 yts, yu, yv, yt, yq, & 73 73 yqsurf, & 74 74 ycoefm, ycoefh) … … 181 181 SUBROUTINE coefkz(nsrf, knon, paprs, pplay, & 182 182 ksta, ksta_ter, & 183 ts, rugos,&183 ts, & 184 184 u,v,t,q, & 185 185 qsurf, & … … 200 200 ! pplay----input-R- pression au milieu de chaque couche (en Pa) 201 201 ! ts-------input-R- temperature du sol (en Kelvin) 202 ! rugos----input-R- longeur de rugosite (en m)203 202 ! u--------input-R- vitesse u 204 203 ! v--------input-R- vitesse v … … 223 222 REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay 224 223 REAL, DIMENSION(klon,klev), INTENT(IN) :: u, v, t, q 225 REAL, DIMENSION(klon), INTENT(IN) :: rugos226 224 REAL, DIMENSION(klon), INTENT(IN) :: qsurf 227 225 -
LMDZ5/trunk/libf/phylmd/conf_phys_m.F90
r2240 r2243 117 117 118 118 Real,SAVE :: f_cdrag_ter_omp,f_cdrag_oce_omp 119 Real,SAVE :: f_rugoro_omp 119 Real,SAVE :: f_rugoro_omp , z0min_omp 120 Real,SAVE :: z0m_seaice_omp,z0h_seaice_omp 120 121 REAL,SAVE :: min_wind_speed_omp,f_gust_wk_omp,f_gust_bl_omp,f_qsat_oce_omp 121 INTEGER,SAVE :: iflag_gusts_omp 122 INTEGER,SAVE :: iflag_gusts_omp,iflag_z0_oce_omp 122 123 123 124 ! Local … … 1669 1670 call getin('f_gust_wk',f_gust_wk_omp) 1670 1671 ! 1671 print*,'CONFPHYS OOK avant gust' 1672 iflag_z0_oce_omp=0 1673 call getin('iflag_z0_oce',iflag_z0_oce_omp) 1674 ! 1672 1675 iflag_gusts_omp=0 1673 1676 call getin('iflag_gusts',iflag_gusts_omp) … … 1676 1679 call getin('min_wind_speed',min_wind_speed_omp) 1677 1680 1678 ! 1679 ! RUGORO 1680 !Config Key = f_rugoro 1681 !Config Desc = 1682 !Config Def = 0. 1683 !Config Help = 1684 ! 1681 z0m_seaice_omp = 0.002 ; call getin('z0m_seaice',z0m_seaice_omp) 1682 z0h_seaice_omp = 0.002 ; call getin('z0h_seaice',z0h_seaice_omp) 1683 1685 1684 f_rugoro_omp = 0. 1686 1685 call getin('f_rugoro',f_rugoro_omp) 1686 1687 z0min_omp = 0.000015 1688 call getin('z0min',z0min_omp) 1689 1687 1690 1688 1691 ! PARAMETERS FOR CONVECTIVE INHIBITION BY TROPOS. DRYNESS … … 2041 2044 min_wind_speed=min_wind_speed_omp 2042 2045 iflag_gusts=iflag_gusts_omp 2046 iflag_z0_oce=iflag_z0_oce_omp 2047 2048 2049 z0m_seaice=z0m_seaice_omp 2050 z0h_seaice=z0h_seaice_omp 2043 2051 2044 2052 f_rugoro=f_rugoro_omp 2053 2054 z0min=z0min_omp 2045 2055 supcrit1 = supcrit1_omp 2046 2056 supcrit2 = supcrit2_omp … … 2230 2240 write(lunout,*)' f_cdrag_oce = ',f_cdrag_oce 2231 2241 write(lunout,*)' f_rugoro = ',f_rugoro 2242 write(lunout,*)' z0min = ',z0min 2232 2243 write(lunout,*)' supcrit1 = ', supcrit1 2233 2244 write(lunout,*)' supcrit2 = ', supcrit2 -
LMDZ5/trunk/libf/phylmd/dyn1d/lmdz1d.F90
r2239 r2243 671 671 ! 6 albedo, mais on peut quand meme tourner avec 672 672 ! moins. Seules les 2 ou 4 premiers seront lus 673 falb1 = albedo674 falb2 = albedo675 673 falb_dir=albedo 676 674 falb_dif=albedo … … 705 703 ! rlon,rlat,zmasq,pctsrf(:,is_ter),pctsrf(:,is_lic),pctsrf(:,is_oce) 706 704 ! pctsrf(:,is_sic),ftsol(:,nsrf),tsoil(:,isoil,nsrf),qsurf(:,nsrf) 707 ! qsol,falb 1(:,nsrf),falb2(:,nsrf),evap(:,nsrf),snow(:,nsrf)705 ! qsol,falb_dir(:,nsrf),falb_dif(:,nsrf),evap(:,nsrf),snow(:,nsrf) 708 706 ! radsol,solsw,sollw,fder,rain_fall,snow_fall,frugs(:,nsrf) 709 707 ! agesno(:,nsrf),zmea,zstd,zsig,zgam,zthe,zpic,zval,rugoro … … 718 716 ! (desallocations) 719 717 print*,'callin surf final' 720 call pbl_surface_final(qsol, fder, snsrf, qsurfsrf, & 721 & evap, frugs, agesno, tsoil) 718 call pbl_surface_final( fder, snsrf, qsurfsrf, tsoil) 722 719 print*,'after surf final' 723 720 CALL fonte_neige_final(run_off_lic_0) -
LMDZ5/trunk/libf/phylmd/etat0_netcdf.F90
r2239 r2243 54 54 #include "dimsoil.h" 55 55 #include "temps.h" 56 REAL, DIMENSION(klon) :: tsol , qsol56 REAL, DIMENSION(klon) :: tsol 57 57 REAL, DIMENSION(klon) :: sn, rugmer, run_off_lic_0 58 58 REAL, DIMENSION(iip1,jjp1) :: orog, rugo, psol … … 61 61 REAL, DIMENSION(iip1,jjm ,llm) :: vvent 62 62 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: q3d 63 REAL, DIMENSION(klon,nbsrf) :: qsolsrf, snsrf, evap 64 REAL, DIMENSION(klon,nbsrf) :: frugs, agesno 63 REAL, DIMENSION(klon,nbsrf) :: qsolsrf, snsrf 65 64 REAL, DIMENSION(klon,nsoilmx,nbsrf) :: tsoil 66 65 … … 480 479 DO i=1,nbsrf; ftsol(:,i) = tsol; END DO 481 480 DO i=1,nbsrf; snsrf(:,i) = sn; END DO 482 falb1(:,is_ter) = 0.08; falb1(:,is_lic) = 0.6483 falb1(:,is_oce) = 0.5; falb1(:,is_sic) = 0.6484 falb2 = falb1485 481 !albedo SB >>> 486 482 falb_dir(:,is_ter,:)=0.08; falb_dir(:,is_lic,:)=0.6 487 483 falb_dir(:,is_oce,:)=0.5; falb_dir(:,is_sic,:)=0.6 488 484 !albedo SB <<< 489 evap(:,:) = 0.485 fevap(:,:) = 0. 490 486 DO i=1,nbsrf; qsolsrf(:,i)=150.; END DO 491 487 DO i=1,nbsrf; DO j=1,nsoilmx; tsoil(:,j,i) = tsol; END DO; END DO … … 495 491 q_ancien = 0. 496 492 agesno = 0. 497 frugs(:,is_oce) = rugmer(:) 498 frugs(:,is_ter) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0) 499 frugs(:,is_lic) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0) 500 frugs(:,is_sic) = 0.001 493 494 z0m(:,is_oce) = rugmer(:) 495 z0m(:,is_ter) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0) 496 z0m(:,is_lic) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0) 497 z0m(:,is_sic) = 0.001 498 z0h(:,:)=z0m(:,:) 499 501 500 fder = 0.0 502 501 clwcon = 0.0 … … 526 525 527 526 CALL fonte_neige_init(run_off_lic_0) 528 CALL pbl_surface_init( qsol, fder, snsrf, qsolsrf, evap, frugs, agesno, tsoil )527 CALL pbl_surface_init( fder, snsrf, qsolsrf, tsoil ) 529 528 CALL phyredem( "startphy.nc" ) 530 529 -
LMDZ5/trunk/libf/phylmd/pbl_surface_mod.F90
r2241 r2243 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 … … 199 169 !!! 200 170 zcoefh, zcoefm, slab_wfbils, & 201 qsol _d, zq2m, s_pblh, s_plcl, &171 qsol, zq2m, s_pblh, s_plcl, & 202 172 !!! 203 173 !!! jyg le 08/02/2012 … … 206 176 s_capCL, s_oliqCL, s_cteiCL, s_pblT, & 207 177 s_therm, s_trmb1, s_trmb2, s_trmb3, & 208 z xrugs,zustar,zu10m, zv10m, fder_print, &178 zustar,zu10m, zv10m, fder_print, & 209 179 zxqsurf, rh2m, zxfluxu, zxfluxv, & 210 rugos_d, agesno_d, sollw, solsw, &211 d_ts, evap _d, fluxlat, t2m, &180 z0m, z0h, agesno, sollw, solsw, & 181 d_ts, evap, fluxlat, t2m, & 212 182 wfbils, wfbilo, flux_t, flux_u, flux_v,& 213 183 dflux_t, dflux_q, zxsnow, & … … 258 228 ! pplay----input-R- pression au milieu de couche (Pa) 259 229 ! rlat-----input-R- latitude en degree 260 ! rugos----input-R- longeur de rugosite (en m)230 ! z0m, z0h ----input-R- longeur de rugosite (en m) 261 231 ! Martin 262 232 ! zsig-----input-R- slope … … 425 395 !!! 426 396 REAL, DIMENSION(klon), INTENT(OUT) :: slab_wfbils! heat balance at surface only for slab at ocean points 427 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) 428 398 REAL, DIMENSION(klon), INTENT(OUT) :: zq2m ! water vapour at 2m, mean for each grid point 429 399 REAL, DIMENSION(klon), INTENT(OUT) :: s_pblh ! height of the planetary boundary layer(HPBL) … … 445 415 REAL, DIMENSION(klon), INTENT(OUT) :: s_trmb2 ! inhibition, mean for each grid point 446 416 REAL, DIMENSION(klon), INTENT(OUT) :: s_trmb3 ! point Omega, mean for each grid point 447 REAL, DIMENSION(klon), INTENT(OUT) :: zxrugs ! rugosity at surface (m), mean for each grid point448 417 REAL, DIMENSION(klon), INTENT(OUT) :: zustar ! u* 449 418 REAL, DIMENSION(klon), INTENT(OUT) :: zu10m ! u speed at 10m, mean for each grid point … … 454 423 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxu ! u wind tension, mean for each grid point 455 424 REAL, DIMENSION(klon, klev), INTENT(OUT) :: zxfluxv ! v wind tension, mean for each grid point 456 REAL, DIMENSION(klon, nbsrf ), INTENT(OUT) :: rugos_d! rugosity length (m)457 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 458 427 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: solsw ! net shortwave radiation at surface 459 428 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: sollw ! net longwave radiation at surface 460 429 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: d_ts ! change in temperature at surface 461 REAL, DIMENSION(klon, nbsrf), INTENT( OUT) :: evap_d! evaporation at surface430 REAL, DIMENSION(klon, nbsrf), INTENT(INOUT) :: evap ! evaporation at surface 462 431 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: fluxlat ! latent flux 463 432 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: t2m ! temperature at 2 meter height … … 510 479 REAL :: f1 ! fraction de longeurs visibles parmi tout SW intervalle 511 480 REAL, DIMENSION(klon) :: r_co2_ppm ! taux CO2 atmosphere 512 REAL, DIMENSION(klon) :: yts, y rugos, ypct, yz0_new481 REAL, DIMENSION(klon) :: yts, yz0m, yz0h, ypct 513 482 !albedo SB >>> 514 483 REAL, DIMENSION(klon) :: yalb,yalb_vis … … 881 850 kh(:)=0. ; kh_x(:)=0. ; kh_w(:)=0. 882 851 slab_wfbils(:)=0. 883 qsol_d(:)=0.884 852 s_pblh(:)=0. ; s_pblh_x(:)=0. ; s_pblh_w(:)=0. 885 853 s_plcl(:)=0. ; s_plcl_x(:)=0. ; s_plcl_w(:)=0. … … 887 855 s_therm(:)=0. 888 856 s_trmb1(:)=0. ; s_trmb2(:)=0. ; s_trmb3(:)=0. 889 z xrugs(:)=0. ; zustar(:)=0.857 zustar(:)=0. 890 858 zu10m(:)=0. ; zv10m(:)=0. 891 859 fder_print(:)=0. 892 860 zxqsurf(:)=0. 893 861 zxfluxu(:,:)=0. ; zxfluxv(:,:)=0. 894 rugos_d(:,:)=0. ; agesno_d(:,:)=0.895 862 solsw(:,:)=0. ; sollw(:,:)=0. 896 863 d_ts(:,:)=0. 897 evap _d(:,:)=0.864 evap(:,:)=0. 898 865 fluxlat(:,:)=0. 899 866 wfbils(:,:)=0. ; wfbilo(:,:)=0. … … 939 906 !albedo SB <<< 940 907 yrain_f = 0.0 ; ysnow_f = 0.0 ; yfder = 0.0 ; ysolsw = 0.0 941 ysollw = 0.0 ; y rugos = 0.0; yu1 = 0.0908 ysollw = 0.0 ; yz0m = 0.0 ; yz0h = 0.0 ; yu1 = 0.0 942 909 yv1 = 0.0 ; ypaprs = 0.0 ; ypplay = 0.0 943 910 ydelp = 0.0 ; yu = 0.0 ; yv = 0.0 ; yt = 0.0 … … 1067 1034 !**************************************************************************************** 1068 1035 1069 zxrugs(:) = 0.01070 1036 DO nsrf = 1, nbsrf 1071 1037 DO i = 1, klon 1072 rugos(i,nsrf) = MAX(rugos(i,nsrf),0.000015)1073 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) 1074 1040 ENDDO 1075 1041 ENDDO … … 1208 1174 ysolsw(j) = solsw(i,nsrf) 1209 1175 ysollw(j) = sollw(i,nsrf) 1210 yrugos(j) = rugos(i,nsrf) 1176 yz0m(j) = z0m(i,nsrf) 1177 yz0h(j) = z0h(i,nsrf) 1211 1178 yrugoro(j) = rugoro(i) 1212 1179 yu1(j) = u(i,1) … … 1339 1306 CALL cdrag(knon, nsrf, & 1340 1307 speed, yt(:,1), yq(:,1), zgeo1, ypaprs(:,1),& 1341 yts, yqsurf, y rugos, &1308 yts, yqsurf, yz0m, yz0h, & 1342 1309 ycdragm, ycdragh, zri1, pref ) 1343 1310 … … 1370 1337 CALL cdrag(knon, nsrf, & 1371 1338 speed_x, yt_x(:,1), yq_x(:,1), zgeo1_x, ypaprs(:,1),& 1372 yts_x, yqsurf, y rugos, &1339 yts_x, yqsurf, yz0m, yz0h, & 1373 1340 ycdragm_x, ycdragh_x, zri1_x, pref_x ) 1374 1341 … … 1386 1353 CALL clcdrag( knon, nsrf, ypaprs, ypplay, & 1387 1354 yu_w(:,1), yv_w(:,1), yt_w(:,1), yq_w(:,1), & 1388 yts_w, yqsurf, y rugos, &1355 yts_w, yqsurf, yz0m, & 1389 1356 ycdragm_w, ycdragh_w ) 1357 1390 1358 ! --- special Dice. JYG+MPL 25112013 1391 1359 IF (ok_prescr_ust) then … … 1418 1386 print *,' args coef_diff_turb: yt ', yt 1419 1387 print *,' args coef_diff_turb: yts ', yts 1420 print *,' args coef_diff_turb: y rugos ', yrugos1388 print *,' args coef_diff_turb: yz0m ', yz0m 1421 1389 print *,' args coef_diff_turb: yqsurf ', yqsurf 1422 1390 print *,' args coef_diff_turb: ycdragm ', ycdragm … … 1425 1393 ENDIF 1426 1394 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1427 ypaprs, ypplay, yu, yv, yq, yt, yts, y rugos, yqsurf, ycdragm, &1395 ypaprs, ypplay, yu, yv, yq, yt, yts, yqsurf, ycdragm, & 1428 1396 ycoefm, ycoefh, ytke) 1429 1397 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 1446 1414 print *,' args coef_diff_turb: yt_x ', yt_x 1447 1415 print *,' args coef_diff_turb: yts_x ', yts_x 1448 print *,' args coef_diff_turb: yrugos ', yrugos1449 1416 print *,' args coef_diff_turb: yqsurf ', yqsurf 1450 1417 print *,' args coef_diff_turb: ycdragm_x ', ycdragm_x … … 1453 1420 ENDIF 1454 1421 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1455 ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, y rugos, yqsurf, ycdragm_x, &1422 ypaprs, ypplay, yu_x, yv_x, yq_x, yt_x, yts_x, yqsurf, ycdragm_x, & 1456 1423 ycoefm_x, ycoefh_x, ytke_x) 1457 1424 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 1473 1440 print *,' args coef_diff_turb: yt_w ', yt_w 1474 1441 print *,' args coef_diff_turb: yts_w ', yts_w 1475 print *,' args coef_diff_turb: yrugos ', yrugos1476 1442 print *,' args coef_diff_turb: yqsurf ', yqsurf 1477 1443 print *,' args coef_diff_turb: ycdragm_w ', ycdragm_w … … 1480 1446 ENDIF 1481 1447 CALL coef_diff_turb(dtime, nsrf, knon, ni, & 1482 ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, y rugos, yqsurf, ycdragm_w, &1448 ypaprs, ypplay, yu_w, yv_w, yq_w, yt_w, yts_w, yqsurf, ycdragm_w, & 1483 1449 ycoefm_w, ycoefh_w, ytke_w) 1484 1450 IF (iflag_pbl>=20.AND.iflag_pbl<30) THEN … … 1741 1707 CALL stdlevvar(klon, knon, is_ter, zxli, & 1742 1708 yu(:,1), yv(:,1), yt(:,1), yq(:,1), zgeo1, & 1743 yts, yqsurf, y rugos, ypaprs(:,1), ypplay(:,1), &1709 yts, yqsurf, yz0m, yz0h, ypaprs(:,1), ypplay(:,1), & 1744 1710 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 1745 1711 … … 1766 1732 ylwdown, yq2m, yt2m, & 1767 1733 ysnow, yqsol, yagesno, ytsoil, & 1768 yz0 _new, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&1734 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1769 1735 yqsurf, ytsurf_new, y_dflux_t, y_dflux_q, & 1770 1736 y_flux_u1, y_flux_v1 ) … … 1800 1766 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 1801 1767 ysnow, yqsurf, yqsol, yagesno, & 1802 !albedo SB >>> 1803 ! ytsoil, yz0_new, yevap, yfluxsens, yfluxlat, & 1804 ytsoil, yz0_new, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 1805 !albedo SB <<< 1768 ytsoil, yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap,yfluxsens,yfluxlat, & 1806 1769 ytsurf_new, y_dflux_t, y_dflux_q, & 1807 1770 yzsig, ycldt, & … … 1825 1788 1826 1789 CASE(is_oce) 1827 !albedo SB >>>1828 1790 CALL surf_ocean(rlon, rlat, ysolsw, ysollw, yalb_vis, & 1829 !albedo SB <<< 1830 yrugos, ywindsp, rmu0, yfder, yts, & 1791 ywindsp, rmu0, yfder, yts, & 1831 1792 itap, dtime, jour, knon, ni, & 1832 1793 ypplay(:,1), ycdragh, ycdragm, yrain_f, ysnow_f, yt(:,1), yq(:,1),& … … 1835 1796 ypsref, yu1, yv1, ygustiness, yrugoro, pctsrf, & 1836 1797 ysnow, yqsurf, yagesno, & 1837 !albedo SB >>> 1838 yz0_new, SFRWL,yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1839 !albedo SB <<< 1798 yz0m, yz0h, SFRWL,yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1840 1799 ytsurf_new, y_dflux_t, y_dflux_q, slab_wfbils, & 1841 1800 y_flux_u1, y_flux_v1) … … 1869 1828 ysnow, yqsurf, yqsol, yagesno, ytsoil, & 1870 1829 !albedo SB >>> 1871 yz0 _new, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,&1830 yz0m, yz0h, SFRWL, yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1872 1831 !albedo SB <<< 1873 1832 ytsurf_new, y_dflux_t, y_dflux_q, & … … 2248 2207 snow(i,nsrf) = ysnow(j) 2249 2208 qsurf(i,nsrf) = yqsurf(j) 2250 rugos(i,nsrf) = yz0_new(j) 2209 z0m(i,nsrf) = yz0m(j) 2210 z0h(i,nsrf) = yz0h(j) 2251 2211 fluxlat(i,nsrf) = yfluxlat(j) 2252 2212 agesno(i,nsrf) = yagesno(j) … … 2460 2420 DO j=1, knon 2461 2421 i = ni(j) 2462 rugo1(j) = y rugos(j)2422 rugo1(j) = yz0m(j) 2463 2423 IF(nsrf.EQ.is_oce) THEN 2464 rugo1(j) = rugos(i,nsrf)2424 rugo1(j) = z0m(i,nsrf) 2465 2425 ENDIF 2466 2426 psfce(j)=ypaprs(j,1) … … 2477 2437 CALL stdlevvar(klon, knon, nsrf, zxli, & 2478 2438 uzon, vmer, tair1, qair1, zgeo1, & 2479 tairsol, qairsol, rugo1, psfce, patm, &2439 tairsol, qairsol, rugo1, rugo1, psfce, patm, & 2480 2440 yt2m, yq2m, yt10m, yq10m, yu10m, yustar) 2481 2441 ELSE !(iflag_split .eq.0) 2482 2442 CALL stdlevvar(klon, knon, nsrf, zxli, & 2483 2443 uzon_x, vmer_x, tair1_x, qair1_x, zgeo1_x, & 2484 tairsol_x, qairsol, rugo1, psfce, patm, &2444 tairsol_x, qairsol, rugo1, rugo1, psfce, patm, & 2485 2445 yt2m_x, yq2m_x, yt10m_x, yq10m_x, yu10m_x, yustar_x) 2486 2446 CALL stdlevvar(klon, knon, nsrf, zxli, & 2487 2447 uzon_w, vmer_w, tair1_w, qair1_w, zgeo1_w, & 2488 tairsol_w, qairsol, rugo1, psfce, patm, &2448 tairsol_w, qairsol, rugo1, rugo1, psfce, patm, & 2489 2449 yt2m_w, yq2m_w, yt10m_w, yq10m_w, yu10m_w, yustar_w) 2490 2450 !!! … … 2712 2672 !**************************************************************************************** 2713 2673 2674 z0m(:,nbsrf+1) = 0.0 2675 z0h(:,nbsrf+1) = 0.0 2676 DO nsrf = 1, nbsrf 2677 DO i = 1, klon 2678 z0m(i,nbsrf+1) = z0m(i,nbsrf+1) + z0m(i,nsrf)*pctsrf(i,nsrf) 2679 z0h(i,nbsrf+1) = z0h(i,nbsrf+1) + z0h(i,nsrf)*pctsrf(i,nsrf) 2680 ENDDO 2681 ENDDO 2682 2714 2683 ! print*,'OK pbl 7' 2715 2684 zxfluxt(:,:) = 0.0 ; zxfluxq(:,:) = 0.0 … … 2928 2897 zv1(:) = v(:,1) 2929 2898 2930 ! Some of the module declared variables are returned for printing in physiq.F2931 qsol_d(:) = qsol(:)2932 evap_d(:,:) = evap(:,:)2933 rugos_d(:,:) = rugos(:,:)2934 agesno_d(:,:) = agesno(:,:)2935 2936 2899 2937 2900 END SUBROUTINE pbl_surface … … 2939 2902 !**************************************************************************************** 2940 2903 ! 2941 SUBROUTINE pbl_surface_final(qsol_rst, fder_rst, snow_rst, qsurf_rst, & 2942 evap_rst, rugos_rst, agesno_rst, ftsoil_rst) 2904 SUBROUTINE pbl_surface_final(fder_rst, snow_rst, qsurf_rst, ftsoil_rst) 2943 2905 2944 2906 USE indice_sol_mod … … 2948 2910 ! Ouput variables 2949 2911 !**************************************************************************************** 2950 REAL, DIMENSION(klon), INTENT(OUT) :: qsol_rst2951 2912 REAL, DIMENSION(klon), INTENT(OUT) :: fder_rst 2952 2913 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: snow_rst 2953 2914 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: qsurf_rst 2954 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: evap_rst2955 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: rugos_rst2956 REAL, DIMENSION(klon, nbsrf), INTENT(OUT) :: agesno_rst2957 2915 REAL, DIMENSION(klon, nsoilmx, nbsrf), INTENT(OUT) :: ftsoil_rst 2958 2916 … … 2962 2920 ! 2963 2921 !**************************************************************************************** 2964 qsol_rst(:) = qsol(:)2965 2922 fder_rst(:) = fder(:) 2966 2923 snow_rst(:,:) = snow(:,:) 2967 2924 qsurf_rst(:,:) = qsurf(:,:) 2968 evap_rst(:,:) = evap(:,:)2969 rugos_rst(:,:) = rugos(:,:)2970 agesno_rst(:,:) = agesno(:,:)2971 2925 ftsoil_rst(:,:,:) = ftsoil(:,:,:) 2972 2926 … … 2976 2930 !**************************************************************************************** 2977 2931 ! DEALLOCATE(qsol, fder, snow, qsurf, evap, rugos, agesno, ftsoil) 2978 IF (ALLOCATED(qsol)) DEALLOCATE(qsol)2979 2932 IF (ALLOCATED(fder)) DEALLOCATE(fder) 2980 2933 IF (ALLOCATED(snow)) DEALLOCATE(snow) 2981 2934 IF (ALLOCATED(qsurf)) DEALLOCATE(qsurf) 2982 IF (ALLOCATED(evap)) DEALLOCATE(evap)2983 IF (ALLOCATED(rugos)) DEALLOCATE(rugos)2984 IF (ALLOCATED(agesno)) DEALLOCATE(agesno)2985 2935 IF (ALLOCATED(ftsoil)) DEALLOCATE(ftsoil) 2986 2936 … … 2991 2941 2992 2942 !albedo SB >>> 2993 SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke) 2943 SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, & 2944 evap, z0m, z0h, agesno, & 2945 tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke) 2994 2946 !albedo SB <<< 2995 2947 ! Give default values where new fraction has appread … … 3014 2966 !albedo SB <<< 3015 2967 REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: ustar,u10m, v10m 2968 REAL, DIMENSION(klon,nbsrf), INTENT(INOUT) :: evap, agesno 2969 REAL, DIMENSION(klon,nbsrf+1), INTENT(INOUT) :: z0m,z0h 3016 2970 REAL, DIMENSION(klon,klev+1,nbsrf+1), INTENT(INOUT) :: tke 3017 2971 … … 3055 3009 qsurf(i,nsrf) = qsurf(i,nsrf_comp1) 3056 3010 evap(i,nsrf) = evap(i,nsrf_comp1) 3057 rugos(i,nsrf) = rugos(i,nsrf_comp1) 3011 z0m(i,nsrf) = z0m(i,nsrf_comp1) 3012 z0h(i,nsrf) = z0h(i,nsrf_comp1) 3058 3013 tsurf(i,nsrf) = tsurf(i,nsrf_comp1) 3059 3014 !albedo SB >>> … … 3074 3029 qsurf(i,nsrf) = qsurf(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + qsurf(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3075 3030 evap(i,nsrf) = evap(i,nsrf_comp2) *pctsrf_old(i,nsrf_comp2) + evap(i,nsrf_comp3) *pctsrf_old(i,nsrf_comp3) 3076 rugos(i,nsrf) = rugos(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + rugos(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3031 z0m(i,nsrf) = z0m(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + z0m(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3032 z0h(i,nsrf) = z0h(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + z0h(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3077 3033 tsurf(i,nsrf) = tsurf(i,nsrf_comp2)*pctsrf_old(i,nsrf_comp2) + tsurf(i,nsrf_comp3)*pctsrf_old(i,nsrf_comp3) 3078 3034 !albedo SB >>> -
LMDZ5/trunk/libf/phylmd/phyaqua_mod.F90
r2209 r2243 48 48 REAL :: run_off_lic_0(nlon) 49 49 REAL :: qsolsrf(nlon, nbsrf), snsrf(nlon, nbsrf) 50 REAL :: frugs(nlon, nbsrf)51 REAL :: agesno(nlon, nbsrf)52 50 REAL :: tsoil(nlon, nsoilmx, nbsrf) 53 51 REAL :: tslab(nlon), seaice(nlon) 54 REAL evap(nlon, nbsrf),fder(nlon)52 REAL fder(nlon) 55 53 56 54 … … 67 65 REAL tsurf 68 66 REAL time, timestep, day, day0 69 REAL qsol_f , qsol(nlon)67 REAL qsol_f 70 68 REAL rugsrel(nlon) 71 69 ! real zmea(nlon),zstd(nlon),zsig(nlon) … … 328 326 seaice(:) = 0. 329 327 run_off_lic_0 = 0. 330 evap = 0.328 fevap = 0. 331 329 332 330 … … 336 334 qsolsrf(:, :) = qsol(1) ! humidite du sol des sous surface 337 335 snsrf(:, :) = 0. ! couverture de neige des sous surface 338 frugs(:, :) = rugos ! couverture de neige des sous surface339 340 341 CALL pbl_surface_init(qsol, fder, snsrf, qsolsrf, evap, frugs, agesno, & 342 336 z0m(:, :) = rugos ! couverture de neige des sous surface 337 z0h=z0m 338 339 340 CALL pbl_surface_init(fder, snsrf, qsolsrf, tsoil) 343 341 344 342 PRINT *, 'iniaqua: before phyredem' -
LMDZ5/trunk/libf/phylmd/phyetat0.F90
r2241 r2243 10 10 USE surface_data, ONLY : type_ocean, version_ocean 11 11 USE phys_state_var_mod, ONLY : ancien_ok, clwcon, detr_therm, dtime, & 12 qsol, fevap, z0m, z0h, agesno, & 12 13 du_gwd_rando, dv_gwd_rando, entr_therm, f0, fm_therm, & 13 14 falb_dir, falb_dif, & … … 46 47 REAL tsoil(klon, nsoilmx, nbsrf) 47 48 REAL qsurf(klon, nbsrf) 48 REAL qsol(klon)49 49 REAL snow(klon, nbsrf) 50 REAL evap(klon, nbsrf)51 50 real fder(klon) 52 REAL frugs(klon, nbsrf)53 REAL agesno(klon, nbsrf)54 51 REAL run_off_lic_0(klon) 55 52 REAL fractint(klon) … … 74 71 CHARACTER*7 str7 75 72 CHARACTER*2 str2 76 LOGICAL :: found 73 LOGICAL :: found,phyetat0_get,phyetat0_srf 77 74 78 75 ! FH1D … … 392 389 ! Lecture de evaporation: 393 390 394 CALL get_field("EVAP", evap(:, 1), found)391 CALL get_field("EVAP", fevap(:, 1), found) 395 392 IF (.NOT. found) THEN 396 393 PRINT*, 'phyetat0: Le champ <EVAP> est absent' … … 402 399 ENDIF 403 400 WRITE(str2, '(i2.2)') nsrf 404 CALL get_field("EVAP"//str2, evap(:, nsrf))401 CALL get_field("EVAP"//str2, fevap(:, nsrf)) 405 402 xmin = 1.0E+20 406 403 xmax = -1.0E+20 407 404 DO i = 1, klon 408 xmin = MIN( evap(i, nsrf), xmin)409 xmax = MAX( evap(i, nsrf), xmax)405 xmin = MIN(fevap(i, nsrf), xmin) 406 xmax = MAX(fevap(i, nsrf), xmax) 410 407 ENDDO 411 PRINT*, ' evap du sol EVAP**:', nsrf, xmin, xmax408 PRINT*, 'fevap du sol EVAP**:', nsrf, xmin, xmax 412 409 ENDDO 413 410 ELSE … … 417 414 xmax = -1.0E+20 418 415 DO i = 1, klon 419 xmin = MIN( evap(i, 1), xmin)420 xmax = MAX( evap(i, 1), xmax)416 xmin = MIN(fevap(i, 1), xmin) 417 xmax = MAX(fevap(i, 1), xmax) 421 418 ENDDO 422 419 PRINT*, 'Evap du sol <EVAP>', xmin, xmax 423 420 DO nsrf = 2, nbsrf 424 421 DO i = 1, klon 425 evap(i, nsrf) =evap(i, 1)422 fevap(i, nsrf) = fevap(i, 1) 426 423 ENDDO 427 424 ENDDO … … 532 529 ! Lecture de la longueur de rugosite 533 530 534 CALL get_field("RUG", frugs(:, 1), found) 535 IF (.NOT. found) THEN 536 PRINT*, 'phyetat0: Le champ <RUG> est absent' 537 PRINT*, ' Mais je vais essayer de lire RUG**' 531 IF (1==0) THEN ! A DERTRUIRE TOUT DE SUITE 538 532 DO nsrf = 1, nbsrf 539 533 IF (nsrf.GT.99) THEN … … 542 536 ENDIF 543 537 WRITE(str2, '(i2.2)') nsrf 544 CALL get_field("RUG"//str2, frugs(:, nsrf)) 545 xmin = 1.0E+20 546 xmax = -1.0E+20 547 DO i = 1, klon 548 xmin = MIN(frugs(i, nsrf), xmin) 549 xmax = MAX(frugs(i, nsrf), xmax) 550 ENDDO 551 PRINT*, 'rugosite du sol RUG**:', nsrf, xmin, xmax 552 ENDDO 538 ! Retrocompatibilite. A nettoyer fin 2015 539 CALL get_field("RUG"//str2, z0m(:, nsrf),found) 540 IF (found) THEN 541 z0h(:,nsrf)=z0m(:,nsrf) 542 PRINT*,'Lecture de ',"RUG"//str2,' -> z0m/z0h (obsolete)' 543 ELSE 544 CALL get_field("Z0m"//str2, z0m(:, nsrf), found) 545 IF (.NOT.found) Z0m=1.e-3 ! initialisation à 1mm au cas ou. 546 CALL get_field("Z0h"//str2, z0h(:, nsrf), found) 547 IF (.NOT.found) Z0h=1.e-3 ! initialisation à 1mm au cas ou. 548 ENDIF 549 PRINT*, 'rugosite Z0m',nsrf,minval(z0m(:, nsrf)),maxval(z0m(:, nsrf)) 550 PRINT*, 'rugosite Z0h',nsrf,minval(z0h(:, nsrf)),maxval(z0h(:, nsrf)) 551 552 ENDDO 553 ELSE 554 PRINT*,'AVANT phyetat0_srf' 555 found=phyetat0_srf(1,z0m,"RUG","Z0m ancien",0.001) 556 PRINT*,'APRES phyetat0_srf' 557 IF (found) THEN 558 z0h(:,1:nbsrf)=z0m(:,1:nbsrf) 553 559 ELSE 554 PRINT*, 'phyetat0: Le champ <RUG> est present' 555 PRINT*, ' J ignore donc les autres RUG**' 556 xmin = 1.0E+20 557 xmax = -1.0E+20 558 DO i = 1, klon 559 xmin = MIN(frugs(i, 1), xmin) 560 xmax = MAX(frugs(i, 1), xmax) 561 ENDDO 562 PRINT*, 'rugosite <RUG>', xmin, xmax 563 DO nsrf = 2, nbsrf 564 DO i = 1, klon 565 frugs(i, nsrf) = frugs(i, 1) 566 ENDDO 567 ENDDO 568 ENDIF 560 found=phyetat0_srf(1,z0m,"Z0m","Roughness length, momentum ",0.001) 561 found=phyetat0_srf(1,z0h,"Z0h","Roughness length, enthalpy ",0.001) 562 ENDIF 563 ENDIF 569 564 570 565 ! Lecture de l'age de la neige: … … 585 580 agesno = 50.0 586 581 ENDIF 587 xmin = 1.0E+20 588 xmax = -1.0E+20 589 DO i = 1, klon 590 xmin = MIN(agesno(i, nsrf), xmin) 591 xmax = MAX(agesno(i, nsrf), xmax) 592 ENDDO 593 PRINT*, 'Age de la neige AGESNO**:', nsrf, xmin, xmax 582 PRINT*, 'agesno',nsrf,minval(agesno(:, nsrf)),maxval(agesno(:, nsrf)) 594 583 ENDDO 595 584 ELSE … … 610 599 ENDIF 611 600 612 CALL get_field("ZMEA", zmea) 613 xmin = 1.0E+20 614 xmax = -1.0E+20 615 DO i = 1, klon 616 xmin = MIN(zmea(i), xmin) 617 xmax = MAX(zmea(i), xmax) 618 ENDDO 619 PRINT*, 'OROGRAPHIE SOUS-MAILLE zmea:', xmin, xmax 601 ! CALL get_field("ZMEA", zmea) 602 ! PRINT*, 'OROGRAPHIE SOUS-MAILLE zmea:',minval(zmea(:)),maxval(zmea(:)) 603 found=phyetat0_get(1,zmea,"ZMEA","mean orography",0.) 620 604 621 605 CALL get_field("ZSTD", zstd) 622 xmin = 1.0E+20 623 xmax = -1.0E+20 624 DO i = 1, klon 625 xmin = MIN(zstd(i), xmin) 626 xmax = MAX(zstd(i), xmax) 627 ENDDO 628 PRINT*, 'OROGRAPHIE SOUS-MAILLE zstd:', xmin, xmax 606 PRINT*, 'OROGRAPHIE SOUS-MAILLE zstd:',minval(zstd(:)),maxval(zstd(:)) 629 607 630 608 CALL get_field("ZSIG", zsig) 631 xmin = 1.0E+20 632 xmax = -1.0E+20 633 DO i = 1, klon 634 xmin = MIN(zsig(i), xmin) 635 xmax = MAX(zsig(i), xmax) 636 ENDDO 637 PRINT*, 'OROGRAPHIE SOUS-MAILLE zsig:', xmin, xmax 609 PRINT*, 'OROGRAPHIE SOUS-MAILLE zsig:',minval(zsig(:)),maxval(zsig(:)) 638 610 639 611 CALL get_field("ZGAM", zgam) 640 xmin = 1.0E+20 641 xmax = -1.0E+20 642 DO i = 1, klon 643 xmin = MIN(zgam(i), xmin) 644 xmax = MAX(zgam(i), xmax) 645 ENDDO 646 PRINT*, 'OROGRAPHIE SOUS-MAILLE zgam:', xmin, xmax 612 PRINT*, 'OROGRAPHIE SOUS-MAILLE zgam:',minval(zgam(:)),maxval(zgam(:)) 647 613 648 614 CALL get_field("ZTHE", zthe) 649 xmin = 1.0E+20 650 xmax = -1.0E+20 651 DO i = 1, klon 652 xmin = MIN(zthe(i), xmin) 653 xmax = MAX(zthe(i), xmax) 654 ENDDO 655 PRINT*, 'OROGRAPHIE SOUS-MAILLE zthe:', xmin, xmax 615 PRINT*, 'OROGRAPHIE SOUS-MAILLE zthe:',minval(zthe(:)),maxval(zthe(:)) 656 616 657 617 CALL get_field("ZPIC", zpic) 658 xmin = 1.0E+20 659 xmax = -1.0E+20 660 DO i = 1, klon 661 xmin = MIN(zpic(i), xmin) 662 xmax = MAX(zpic(i), xmax) 663 ENDDO 664 PRINT*, 'OROGRAPHIE SOUS-MAILLE zpic:', xmin, xmax 618 PRINT*, 'OROGRAPHIE SOUS-MAILLE zpic:',minval(zpic(:)),maxval(zpic(:)) 665 619 666 620 CALL get_field("ZVAL", zval) 667 xmin = 1.0E+20 668 xmax = -1.0E+20 669 DO i = 1, klon 670 xmin = MIN(zval(i), xmin) 671 xmax = MAX(zval(i), xmax) 672 ENDDO 673 PRINT*, 'OROGRAPHIE SOUS-MAILLE zval:', xmin, xmax 621 PRINT*, 'OROGRAPHIE SOUS-MAILLE zval:',minval(zval(:)),maxval(zval(:)) 674 622 675 623 CALL get_field("RUGSREL", rugoro) 676 xmin = 1.0E+20 677 xmax = -1.0E+20 678 DO i = 1, klon 679 xmin = MIN(rugoro(i), xmin) 680 xmax = MAX(rugoro(i), xmax) 681 ENDDO 682 PRINT*, 'Rugosite relief (ecart-type) rugsrel:', xmin, xmax 624 PRINT*, 'Rugosite relief (ecart-type) rugsrel:',minval(rugoro(:)),maxval(rugoro(:)) 683 625 684 626 ancien_ok = .TRUE. … … 718 660 PRINT*, "Depart legerement fausse. Mais je continue" 719 661 ENDIF 720 xmin = 1.0E+20 721 xmax = -1.0E+20 722 xmin = MINval(clwcon) 723 xmax = MAXval(clwcon) 724 PRINT*, 'Eau liquide convective (ecart-type) clwcon:', xmin, xmax 662 PRINT*,'Eau liquide convective (ecart-type) clwcon:',MINval(clwcon),MAXval(clwcon) 663 725 664 726 665 rnebcon = 0. … … 730 669 PRINT*, "Depart legerement fausse. Mais je continue" 731 670 ENDIF 732 xmin = 1.0E+20 733 xmax = -1.0E+20 734 xmin = MINval(rnebcon) 735 xmax = MAXval(rnebcon) 736 PRINT*, 'Nebulosite convective (ecart-type) rnebcon:', xmin, xmax 671 PRINT*, 'Nebulosite convective (ecart-type) rnebcon:',MINval(rnebcon),MAXval(rnebcon) 737 672 738 673 ! Lecture ratqs … … 744 679 PRINT*, "Depart legerement fausse. Mais je continue" 745 680 ENDIF 746 xmin = 1.0E+20 747 xmax = -1.0E+20 748 xmin = MINval(ratqs) 749 xmax = MAXval(ratqs) 750 PRINT*, '(ecart-type) ratqs:', xmin, xmax 681 PRINT*, '(ecart-type) ratqs:', MINval(ratqs),MAXval(ratqs) 751 682 752 683 ! Lecture run_off_lic_0 … … 758 689 run_off_lic_0 = 0. 759 690 ENDIF 760 xmin = 1.0E+20 761 xmax = -1.0E+20 762 xmin = MINval(run_off_lic_0) 763 xmax = MAXval(run_off_lic_0) 764 PRINT*, '(ecart-type) run_off_lic_0:', xmin, xmax 691 PRINT*, '(ecart-type) run_off_lic_0:', MINval(run_off_lic_0),MAXval(run_off_lic_0) 765 692 766 693 ! Lecture de l'energie cinetique turbulente … … 778 705 pbl_tke(:, :, nsrf)=1.e-8 779 706 ENDIF 780 xmin = 1.0E+20 781 xmax = -1.0E+20 782 DO k = 1, klev+1 783 DO i = 1, klon 784 xmin = MIN(pbl_tke(i, k, nsrf), xmin) 785 xmax = MAX(pbl_tke(i, k, nsrf), xmax) 786 ENDDO 787 ENDDO 788 PRINT*, 'Turbulent kinetic energyl TKE**:', nsrf, xmin, xmax 707 PRINT*, 'Turbulent kinetic energyl TKE**:', nsrf, minval(pbl_tke(:,:,nsrf)),maxval(pbl_tke(:,:, nsrf)) 708 789 709 ENDDO 790 710 ENDIF … … 806 726 wake_delta_pbl_tke(:,:,nsrf)=0. 807 727 ENDIF 808 xmin = 1.0E+20 809 xmax = -1.0E+20 810 DO k = 1, klev+1 811 DO i = 1, klon 812 xmin = MIN(wake_delta_pbl_tke(i,k,nsrf),xmin) 813 xmax = MAX(wake_delta_pbl_tke(i,k,nsrf),xmax) 814 ENDDO 815 ENDDO 816 PRINT*,'TKE difference (w)-(x) DELTATKE**:', nsrf, xmin, xmax 728 PRINT*,'TKE difference (w)-(x) DELTATKE**:', nsrf, & 729 minval(wake_delta_pbl_tke(:,:,nsrf)),maxval(wake_delta_pbl_tke(:,:, nsrf)) 730 817 731 ENDDO 818 732 … … 831 745 delta_tsurf(:,nsrf)=0. 832 746 ELSE 833 xmin = 1.0E+20 834 xmax = -1.0E+20 835 DO i = 1, klon 836 xmin = MIN(delta_tsurf(i, nsrf), xmin) 837 xmax = MAX(delta_tsurf(i, nsrf), xmax) 838 ENDDO 839 PRINT*, 'delta_tsurf:', xmin, xmax 747 PRINT*, 'delta_tsurf:', nsrf, & 748 minval(delta_tsurf(:,nsrf)),maxval(delta_tsurf(:, nsrf)) 840 749 ENDIF 841 750 ENDDO ! nsrf = 1, nbsrf … … 849 758 zmax0=40. 850 759 ENDIF 851 xmin = 1.0E+20 852 xmax = -1.0E+20 853 xmin = MINval(zmax0) 854 xmax = MAXval(zmax0) 855 PRINT*, '(ecart-type) zmax0:', xmin, xmax 760 PRINT*, '(ecart-type) zmax0:', MINval(zmax0),MAXval(zmax0) 856 761 857 762 ! f0(ig)=1.e-5 … … 863 768 f0=1.e-5 864 769 ENDIF 865 xmin = 1.0E+20 866 xmax = -1.0E+20 867 xmin = MINval(f0) 868 xmax = MAXval(f0) 869 PRINT*, '(ecart-type) f0:', xmin, xmax 770 PRINT*, '(ecart-type) f0:', MINval(f0),MAXval(f0) 870 771 871 772 ! sig1 or ema_work1 … … 878 779 sig1=0. 879 780 ELSE 880 xmin = 1.0E+20 881 xmax = -1.0E+20 882 DO k = 1, klev 883 DO i = 1, klon 884 xmin = MIN(sig1(i, k), xmin) 885 xmax = MAX(sig1(i, k), xmax) 886 ENDDO 887 ENDDO 888 PRINT*, 'sig1:', xmin, xmax 781 PRINT*, 'sig1:',minval(sig1(:,:)),maxval(sig1(:,:)) 889 782 ENDIF 890 783 … … 898 791 w01=0. 899 792 ELSE 900 xmin = 1.0E+20 901 xmax = -1.0E+20 902 DO k = 1, klev 903 DO i = 1, klon 904 xmin = MIN(w01(i, k), xmin) 905 xmax = MAX(w01(i, k), xmax) 906 ENDDO 907 ENDDO 908 PRINT*, 'w01:', xmin, xmax 793 PRINT*, 'w01:', minval(w01(:,:)),maxval(w01(:,:)) 909 794 ENDIF 910 795 … … 917 802 wake_deltat=0. 918 803 ELSE 919 xmin = 1.0E+20 920 xmax = -1.0E+20 921 DO k = 1, klev 922 DO i = 1, klon 923 xmin = MIN(wake_deltat(i, k), xmin) 924 xmax = MAX(wake_deltat(i, k), xmax) 925 ENDDO 926 ENDDO 927 PRINT*, 'wake_deltat:', xmin, xmax 804 PRINT*, 'wake_deltat:', minval(wake_deltat(:,:)),maxval(wake_deltat(:,:)) 928 805 ENDIF 929 806 930 807 ! wake_deltaq 931 808 932 CALL get_field("WAKE_DELTAQ", wake_deltaq, found) 933 IF (.NOT. found) THEN 934 PRINT*, "phyetat0: Le champ <WAKE_DELTAQ> est absent" 935 PRINT*, "Depart legerement fausse. Mais je continue" 936 wake_deltaq=0. 937 ELSE 938 xmin = 1.0E+20 939 xmax = -1.0E+20 940 DO k = 1, klev 941 DO i = 1, klon 942 xmin = MIN(wake_deltaq(i, k), xmin) 943 xmax = MAX(wake_deltaq(i, k), xmax) 944 ENDDO 945 ENDDO 946 PRINT*, 'wake_deltaq:', xmin, xmax 947 ENDIF 809 found=phyetat0_get(klev,wake_deltaq,"WAKE_DELTAQ","Delta hum. wake/env",0.) 810 ! CALL get_field("WAKE_DELTAQ", wake_deltaq, found) 811 ! IF (.NOT. found) THEN 812 ! PRINT*, "phyetat0: Le champ <WAKE_DELTAQ> est absent" 813 ! PRINT*, "Depart legerement fausse. Mais je continue" 814 ! wake_deltaq=0. 815 ! ELSE 816 ! PRINT*, 'wake_deltaq:', minval(wake_deltaq(:,:)),maxval(wake_deltaq(:,:)) 817 ! ENDIF 948 818 949 819 ! wake_s … … 955 825 wake_s=0. 956 826 ENDIF 957 xmin = 1.0E+20 958 xmax = -1.0E+20 959 xmin = MINval(wake_s) 960 xmax = MAXval(wake_s) 961 PRINT*, '(ecart-type) wake_s:', xmin, xmax 827 PRINT*, '(ecart-type) wake_s:', MINval(wake_s),MAXval(wake_s) 962 828 963 829 ! wake_cstar … … 969 835 wake_cstar=0. 970 836 ENDIF 971 xmin = 1.0E+20 972 xmax = -1.0E+20 973 xmin = MINval(wake_cstar) 974 xmax = MAXval(wake_cstar) 975 PRINT*, '(ecart-type) wake_cstar:', xmin, xmax 837 PRINT*, '(ecart-type) wake_cstar:', MINval(wake_cstar),MAXval(wake_cstar) 976 838 977 839 ! wake_pe … … 1163 1025 ! Initialize module pbl_surface_mod 1164 1026 1165 CALL pbl_surface_init(qsol, fder, snow, qsurf, & 1166 evap, frugs, agesno, tsoil) 1027 CALL pbl_surface_init(fder, snow, qsurf, tsoil) 1167 1028 1168 1029 ! Initialize module ocean_cpl_mod for the case of coupled ocean … … 1177 1038 1178 1039 END SUBROUTINE phyetat0 1040 1041 !=================================================================== 1042 FUNCTION phyetat0_get(nlev,field,name,descr,default) 1043 !=================================================================== 1044 ! Lecture d'un champ avec contrôle 1045 ! Function logique dont le resultat indique si la lecture 1046 ! s'est bien passée 1047 ! On donne une valeur par defaut dans le cas contraire 1048 !=================================================================== 1049 1050 USE iostart, ONLY : get_field 1051 USE dimphy, only: klon 1052 1053 IMPLICIT NONE 1054 INCLUDE "iniprint.h" 1055 1056 LOGICAL phyetat0_get 1057 1058 ! arguments 1059 INTEGER,INTENT(IN) :: nlev 1060 CHARACTER*(*),INTENT(IN) :: name,descr 1061 REAL,INTENT(IN) :: default 1062 REAL,DIMENSION(klon,nlev),INTENT(INOUT) :: field 1063 1064 ! Local variables 1065 LOGICAL found 1066 1067 CALL get_field(name, field, found) 1068 IF (.NOT. found) THEN 1069 WRITE(lunout,*) "phyetat0: Le champ <",name,"> est absent" 1070 WRITE(lunout,*) "Depart legerement fausse. Mais je continue" 1071 field(:,:)=default 1072 ENDIF 1073 WRITE(lunout,*) name, descr, MINval(field),MAXval(field) 1074 phyetat0_get=found 1075 1076 RETURN 1077 END FUNCTION phyetat0_get 1078 1079 !================================================================ 1080 FUNCTION phyetat0_srf(nlev,field,name,descr,default) 1081 !=================================================================== 1082 ! Lecture d'un champ par sous-surface avec contrôle 1083 ! Function logique dont le resultat indique si la lecture 1084 ! s'est bien passée 1085 ! On donne une valeur par defaut dans le cas contraire 1086 !=================================================================== 1087 1088 USE iostart, ONLY : get_field 1089 USE dimphy, only: klon 1090 USE indice_sol_mod, only: nbsrf 1091 1092 IMPLICIT NONE 1093 INCLUDE "iniprint.h" 1094 1095 LOGICAL phyetat0_srf 1096 ! arguments 1097 INTEGER,INTENT(IN) :: nlev 1098 CHARACTER*(*),INTENT(IN) :: name,descr 1099 REAL,INTENT(IN) :: default 1100 REAL,DIMENSION(klon,nlev,nbsrf),INTENT(INOUT) :: field 1101 1102 ! Local variables 1103 LOGICAL found,phyetat0_get 1104 INTEGER nsrf 1105 CHARACTER*2 str2 1106 1107 IF (nbsrf.GT.99) THEN 1108 WRITE(lunout,*) "Trop de sous-mailles" 1109 call abort_gcm("phyetat0", "", 1) 1110 ENDIF 1111 1112 DO nsrf = 1, nbsrf 1113 WRITE(str2, '(i2.2)') nsrf 1114 found= phyetat0_get(nlev,field(:,:, nsrf), & 1115 name//str2,descr//" srf:"//str2,default) 1116 ENDDO 1117 1118 phyetat0_srf=found 1119 1120 RETURN 1121 END FUNCTION phyetat0_srf 1122 -
LMDZ5/trunk/libf/phylmd/phyredem.F90
r2241 r2243 36 36 REAL tsoil(klon, nsoilmx, nbsrf) 37 37 REAL qsurf(klon, nbsrf) 38 REAL qsol(klon)39 38 REAL snow(klon, nbsrf) 40 REAL evap(klon, nbsrf)41 39 real fder(klon) 42 REAL frugs(klon, nbsrf)43 REAL agesno(klon, nbsrf)44 40 REAL run_off_lic_0(klon) 45 41 REAL trs(klon, nbtr) … … 60 56 ! Get variables which will be written to restart file from module 61 57 ! pbl_surface_mod 62 CALL pbl_surface_final(qsol, fder, snow, qsurf, & 63 evap, frugs, agesno, tsoil) 58 CALL pbl_surface_final(fder, snow, qsurf, tsoil) 64 59 65 60 ! Get a variable calculated in module fonte_neige_mod … … 191 186 WRITE(str2, '(i2.2)') nsrf 192 187 CALL put_field("EVAP"//str2, "Evaporation de surface No."//str2 & 193 , evap(:, nsrf))188 , fevap(:, nsrf)) 194 189 ELSE 195 190 PRINT*, "Trop de sous-mailles" … … 226 221 IF (nsrf.LE.99) THEN 227 222 WRITE(str2, '(i2.2)') nsrf 228 CALL put_field("RUG"//str2, "rugosite de surface No."//str2, & 229 frugs(:, nsrf)) 223 CALL put_field("Z0m"//str2, "rugosite de surface No."//str2, & 224 z0m(:, nsrf)) 225 CALL put_field("Z0h"//str2, "rugosite de surface No."//str2, & 226 z0h(:, nsrf)) 230 227 ELSE 231 228 PRINT*, "Trop de sous-mailles" … … 269 266 270 267 CALL put_field("VANCIEN", "", v_ancien) 271 272 CALL put_field("RUGMER", "Longueur de rugosite sur mer", &273 frugs(:, is_oce))274 268 275 269 CALL put_field("CLWCON", "Eau liquide convective", clwcon) -
LMDZ5/trunk/libf/phylmd/phys_local_var_mod.F90
r2194 r2243 239 239 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: cdragm, cdragh 240 240 !$OMP THREADPRIVATE(cdragm, cdragh) 241 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: cldh, cldl, cldm, cldq, cldt, qsat2m , qsol242 !$OMP THREADPRIVATE(cldh, cldl, cldm, cldq, cldt, qsat2m , qsol)241 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: cldh, cldl, cldm, cldq, cldt, qsat2m 242 !$OMP THREADPRIVATE(cldh, cldl, cldm, cldq, cldt, qsat2m ) 243 243 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: cldhjn, cldljn, cldmjn,cldtjn 244 244 !$OMP THREADPRIVATE(cldhjn, cldljn, cldmjn, cldtjn) … … 265 265 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfqcalving 266 266 !$OMP THREADPRIVATE(zxfqcalving) 267 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfluxlat, zx rugs, zxtsol, snow_lsc, zxfqfonte268 !$OMP THREADPRIVATE(zxfluxlat, zx rugs, zxtsol, snow_lsc, zxfqfonte)267 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxfluxlat, zxtsol, snow_lsc, zxfqfonte 268 !$OMP THREADPRIVATE(zxfluxlat, zxtsol, snow_lsc, zxfqfonte) 269 269 REAL,ALLOCATABLE,SAVE,DIMENSION(:) :: zxqsurf, rain_lsc 270 270 !$OMP THREADPRIVATE(zxqsurf, rain_lsc) … … 328 328 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: fsolsw, wfbils, wfbilo 329 329 !$OMP THREADPRIVATE(fsolsw, wfbils, wfbilo) 330 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: t2m, f evap, fluxlat, fsollw,evap_pot331 !$OMP THREADPRIVATE(t2m, f evap, fluxlat, fsollw,evap_pot)330 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: t2m, fluxlat, fsollw,evap_pot 331 !$OMP THREADPRIVATE(t2m, fluxlat, fsollw,evap_pot) 332 332 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: dnwd, dnwd0, upwd, omega 333 333 !$OMP THREADPRIVATE(dnwd, dnwd0, upwd, omega) … … 343 343 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: wake_omg, zx_rh 344 344 !$OMP THREADPRIVATE(wake_omg, zx_rh) 345 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: frugs, agesno346 !$OMP THREADPRIVATE(frugs, agesno)347 345 REAL,ALLOCATABLE,SAVE,DIMENSION(:,:) :: pmflxr, pmflxs, prfl, psfl, fraca 348 346 !$OMP THREADPRIVATE(pmflxr, pmflxs, prfl, psfl, fraca) … … 501 499 ALLOCATE(ale_wake(klon), alp_wake(klon), bils(klon)) 502 500 ALLOCATE(cdragm(klon), cdragh(klon), cldh(klon), cldl(klon)) 503 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon) , qsol(klon))501 ALLOCATE(cldm(klon), cldq(klon), cldt(klon), qsat2m(klon)) 504 502 ALLOCATE(cldhjn(klon), cldljn(klon), cldmjn(klon), cldtjn(klon)) 505 503 ALLOCATE(JrNt(klon)) … … 516 514 ALLOCATE(slab_wfbils(klon), tpot(klon), tpote(klon), ue(klon)) 517 515 ALLOCATE(uq(klon), ve(klon), vq(klon), zxffonte(klon)) 518 ALLOCATE(zxfqcalving(klon), zxfluxlat(klon) , zxrugs(klon))516 ALLOCATE(zxfqcalving(klon), zxfluxlat(klon)) 519 517 ALLOCATE(zxtsol(klon), snow_lsc(klon), zxfqfonte(klon), zxqsurf(klon)) 520 518 ALLOCATE(rain_lsc(klon)) … … 557 555 ALLOCATE(pmfd(klon, klev), pmfu(klon, klev)) 558 556 559 ALLOCATE(t2m(klon, nbsrf), f evap(klon, nbsrf), fluxlat(klon, nbsrf))560 ALLOCATE(f rugs(klon, nbsrf), agesno(klon, nbsrf), fsollw(klon, nbsrf))557 ALLOCATE(t2m(klon, nbsrf), fluxlat(klon, nbsrf)) 558 ALLOCATE(fsollw(klon, nbsrf)) 561 559 ALLOCATE(fsolsw(klon, nbsrf), wfbils(klon, nbsrf), wfbilo(klon, nbsrf)) 562 560 ALLOCATE(evap_pot(klon, nbsrf)) … … 701 699 DEALLOCATE(ale_wake, alp_wake, bils) 702 700 DEALLOCATE(cdragm, cdragh, cldh, cldl) 703 DEALLOCATE(cldm, cldq, cldt, qsat2m , qsol)701 DEALLOCATE(cldm, cldq, cldt, qsat2m) 704 702 DEALLOCATE(cldljn, cldmjn, cldhjn, cldtjn, JrNt) 705 703 DEALLOCATE(dthmin, evap, fder, plcl, plfc) … … 714 712 DEALLOCATE(slab_wfbils, tpot, tpote, ue) 715 713 DEALLOCATE(uq, ve, vq, zxffonte) 716 DEALLOCATE(zxfqcalving, zxfluxlat , zxrugs)714 DEALLOCATE(zxfqcalving, zxfluxlat) 717 715 DEALLOCATE(zxtsol, snow_lsc, zxfqfonte, zxqsurf) 718 716 DEALLOCATE(rain_lsc) … … 755 753 DEALLOCATE(pmfd, pmfu) 756 754 757 DEALLOCATE(t2m, f evap, fluxlat)758 DEALLOCATE(f rugs, agesno, fsollw, evap_pot)755 DEALLOCATE(t2m, fluxlat) 756 DEALLOCATE(fsollw, evap_pot) 759 757 DEALLOCATE(fsolsw, wfbils, wfbilo) 760 758 -
LMDZ5/trunk/libf/phylmd/phys_output_ctrlout_mod.F90
r2240 r2243 779 779 TYPE(ctrl_out), SAVE :: o_dtsvdfi = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11 /), & 780 780 'dtsvdfi', 'Boundary-layer dTs(g)', 'K/s', (/ ('', i=1, 9) /)) 781 TYPE(ctrl_out), SAVE :: o_rugs = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11 /), & 782 'rugs', 'rugosity', '-', (/ ('', i=1, 9) /)) 781 TYPE(ctrl_out), SAVE :: o_z0m = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11 /), & 782 'z0m', 'roughness length, momentum', '-', (/ ('', i=1, 9) /)) 783 TYPE(ctrl_out), SAVE :: o_z0h = ctrl_out((/ 10, 10, 10, 10, 10, 10, 11, 11, 11 /), & 784 'z0h', 'roughness length, enthalpy', '-', (/ ('', i=1, 9) /)) 783 785 TYPE(ctrl_out), SAVE :: o_topswad = ctrl_out((/ 2, 10, 10, 10, 10, 10, 11, 11, 11 /), & 784 786 'topswad', 'ADE at TOA', 'W/m2', (/ ('', i=1, 9) /)) … … 1024 1026 ctrl_out((/ 3, 10, 10, 10, 10, 10, 11, 11, 11 /),'snow_sic',"Snow", "kg/m2", (/ ('', i=1, 9) /)) /) 1025 1027 1026 TYPE(ctrl_out), SAVE, DIMENSION(4) :: o_rugs_srf = (/ & 1027 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'rugs_ter', "Surface roughness "//clnsurf(1),"m", (/ ('', i=1, 9) /)), & 1028 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'rugs_lic', "Surface roughness "//clnsurf(2),"m", (/ ('', i=1, 9) /)), & 1029 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'rugs_oce', "Surface roughness "//clnsurf(3),"m", (/ ('', i=1, 9) /)), & 1030 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'rugs_sic', "Surface roughness "//clnsurf(4),"m", (/ ('', i=1, 9) /)) /) 1028 TYPE(ctrl_out), SAVE, DIMENSION(4) :: o_z0m_srf = (/ & 1029 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0m_ter', "Surface roughness "//clnsurf(1),"m", (/ ('', i=1, 9) /)), & 1030 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0m_lic', "Surface roughness "//clnsurf(2),"m", (/ ('', i=1, 9) /)), & 1031 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0m_oce', "Surface roughness "//clnsurf(3),"m", (/ ('', i=1, 9) /)), & 1032 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0m_sic', "Surface roughness "//clnsurf(4),"m", (/ ('', i=1, 9) /)) /) 1033 1034 TYPE(ctrl_out), SAVE, DIMENSION(4) :: o_z0h_srf = (/ & 1035 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0h_ter', "Surface roughness "//clnsurf(1),"m", (/ ('', i=1, 9) /)), & 1036 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0h_lic', "Surface roughness "//clnsurf(2),"m", (/ ('', i=1, 9) /)), & 1037 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0h_oce', "Surface roughness "//clnsurf(3),"m", (/ ('', i=1, 9) /)), & 1038 ctrl_out((/ 3, 6, 10, 10, 10, 10, 11, 11, 11 /),'z0h_sic', "Surface roughness "//clnsurf(4),"m", (/ ('', i=1, 9) /)) /) 1031 1039 1032 1040 TYPE(ctrl_out), SAVE :: o_alb1 = ctrl_out((/ 3, 10, 10, 10, 10, 10, 11, 11, 11 /), & -
LMDZ5/trunk/libf/phylmd/phys_output_write_mod.F90
r2240 r2243 88 88 o_SWdownOR, o_LWdownOR, o_snowl, & 89 89 o_solldown, o_dtsvdfo, o_dtsvdft, & 90 o_dtsvdfg, o_dtsvdfi, o_ rugs, o_od550aer, &90 o_dtsvdfg, o_dtsvdfi, o_z0m, o_z0h, o_od550aer, & 91 91 o_od865aer, o_absvisaer, o_od550lt1aer, & 92 92 o_sconcso4, o_sconcno3, o_sconcoa, o_sconcbc, & … … 113 113 o_zfull, o_zhalf, o_rneb, o_rnebjn, o_rnebcon, & 114 114 o_rnebls, o_rhum, o_ozone, o_ozone_light, & 115 o_dtphy, o_dqphy, o_albe_srf, o_ rugs_srf, &115 o_dtphy, o_dqphy, o_albe_srf, o_z0m_srf, o_z0h_srf, & 116 116 o_ages_srf, o_snow_srf, o_alb1, o_alb2, o_tke, & 117 117 o_tke_max, o_kz, o_kz_max, o_clwcon, & … … 154 154 155 155 USE phys_state_var_mod, only: pctsrf, paire_ter, rain_fall, snow_fall, & 156 qsol, z0m, z0h, fevap, agesno, & 156 157 nday_rain, rain_con, snow_con, & 157 158 topsw, toplw, toplw0, swup, swdn, & … … 176 177 177 178 USE phys_local_var_mod, only: zxfluxlat, slp, zxtsol, zt2m, & 178 t2m_min_mon, t2m_max_mon, &179 zu10m, zv10m, zq2m, zustar, zxqsurf, qsol,&180 rain_lsc, snow_lsc, evap,bils, sens, fder, &179 t2m_min_mon, t2m_max_mon, evap, & 180 zu10m, zv10m, zq2m, zustar, zxqsurf, & 181 rain_lsc, snow_lsc, bils, sens, fder, & 181 182 zxffonte, zxfqcalving, zxfqfonte, fluxu, & 182 183 fluxv, zxsnow, qsnow, snowhgt, to_ice, & 183 184 sissnow, runoff, albsol3_lic, evap_pot, & 184 t2m, f evap, fluxt, fluxlat, fsollw, fsolsw, &185 t2m, fluxt, fluxlat, fsollw, fsolsw, & 185 186 wfbils, wfbilo, cdragm, cdragh, cldl, cldm, & 186 187 cldh, cldt, JrNt, cldljn, cldmjn, cldhjn, & … … 197 198 weak_inversion, dthmin, cldtau, cldemi, & 198 199 pmflxr, pmflxs, prfl, psfl, re, fl, rh2m, & 199 qsat2m, tpote, tpot, d_ts, zxrugs,od550aer, &200 qsat2m, tpote, tpot, d_ts, od550aer, & 200 201 od865aer, absvisaer, od550lt1aer, sconcso4, sconcno3, & 201 202 sconcoa, sconcbc, sconcss, sconcdust, concso4, concno3, & … … 212 213 ec550aer, flwc, fiwc, t_seri, theta, q_seri, & 213 214 ql_seri, zphi, u_seri, v_seri, omega, cldfra, & 214 rneb, rnebjn, zx_rh, frugs, agesno,d_t_dyn, d_q_dyn, &215 rneb, rnebjn, zx_rh, d_t_dyn, d_q_dyn, & 215 216 d_u_dyn, d_v_dyn, d_t_con, d_t_ajsb, d_t_ajs, & 216 217 d_u_ajs, d_v_ajs, & … … 810 811 CALL histwrite_phy(o_dtsvdfg, d_ts(:,is_lic)) 811 812 CALL histwrite_phy(o_dtsvdfi, d_ts(:,is_sic)) 812 CALL histwrite_phy(o_rugs, zxrugs) 813 CALL histwrite_phy(o_z0m, z0m(:,nbsrf+1)) 814 CALL histwrite_phy(o_z0h, z0h(:,nbsrf+1)) 813 815 ! OD550 per species 814 816 !--OLIVIER … … 975 977 IF (vars_defined) zx_tmp_fi2d(1 : klon) = falb1( 1 : klon, nsrf) 976 978 CALL histwrite_phy(o_albe_srf(nsrf), zx_tmp_fi2d) 977 IF (vars_defined) zx_tmp_fi2d(1 : klon) = frugs( 1 : klon, nsrf) 978 CALL histwrite_phy(o_rugs_srf(nsrf), zx_tmp_fi2d) 979 IF (vars_defined) zx_tmp_fi2d(1 : klon) = z0m( 1 : klon, nsrf) 980 CALL histwrite_phy(o_z0m_srf(nsrf), zx_tmp_fi2d) 981 IF (vars_defined) zx_tmp_fi2d(1 : klon) = z0h( 1 : klon, nsrf) 982 CALL histwrite_phy(o_z0h_srf(nsrf), zx_tmp_fi2d) 979 983 IF (vars_defined) zx_tmp_fi2d(1 : klon) = agesno( 1 : klon, nsrf) 980 984 CALL histwrite_phy(o_ages_srf(nsrf), zx_tmp_fi2d) -
LMDZ5/trunk/libf/phylmd/phys_state_var_mod.F90
r2240 r2243 24 24 REAL, ALLOCATABLE, SAVE :: ftsol(:,:) 25 25 !$OMP THREADPRIVATE(ftsol) 26 REAL,ALLOCATABLE,SAVE :: qsol(:),fevap(:,:),z0m(:,:),z0h(:,:),agesno(:,:) 27 !$OMP THREADPRIVATE(qsol,fevap,z0m,z0h,agesno) 26 28 ! character(len=6), SAVE :: ocean 27 29 !!!!!!$OMP THREADPRIVATE(ocean) … … 418 420 ALLOCATE(pctsrf(klon,nbsrf)) 419 421 ALLOCATE(ftsol(klon,nbsrf)) 422 ALLOCATE(qsol(klon),fevap(klon,nbsrf)) 423 ALLOCATE(z0m(klon,nbsrf+1),z0h(klon,nbsrf+1),agesno(klon,nbsrf)) 420 424 ALLOCATE(falb1(klon,nbsrf)) 421 425 ALLOCATE(falb2(klon,nbsrf)) … … 589 593 590 594 deallocate(rlat, rlon, pctsrf, ftsol, falb1, falb2) 595 deallocate(qsol,fevap,z0m,z0h,agesno) 591 596 deallocate(rain_fall, snow_fall, solsw, sollw, radsol) 592 597 deallocate(zmea, zstd, zsig, zgam) -
LMDZ5/trunk/libf/phylmd/physiq.F90
r2241 r2243 1413 1413 ! 1414 1414 CALL change_srf_frac(itap, dtime, days_elapsed+1, & 1415 pctsrf, falb_dir, falb_dif, ftsol, ustar, u10m, v10m, pbl_tke) 1415 pctsrf, fevap, z0m, z0h, agesno, & 1416 falb_dir, falb_dif, ftsol, ustar, u10m, v10m, pbl_tke) 1416 1417 1417 1418 ! Update time and other variables in Reprobus … … 1806 1807 ! s_capCL, s_oliqCL, s_cteiCL,s_pblT, 1807 1808 ! s_therm, s_trmb1, s_trmb2, s_trmb3, 1808 ! z xrugs, zu10m, zv10m, fder,1809 ! zu10m, zv10m, fder, 1809 1810 ! zxqsurf, rh2m, zxfluxu, zxfluxv, 1810 1811 ! frugs, agesno, fsollw, fsolsw, … … 1883 1884 s_capCL, s_oliqCL, s_cteiCL,s_pblT, & 1884 1885 s_therm, s_trmb1, s_trmb2, s_trmb3, & 1885 z xrugs, zustar, zu10m, zv10m, fder, &1886 zustar, zu10m, zv10m, fder, & 1886 1887 zxqsurf, rh2m, zxfluxu, zxfluxv, & 1887 frugs, agesno, fsollw, fsolsw, &1888 z0m, z0h, agesno, fsollw, fsolsw, & 1888 1889 d_ts, fevap, fluxlat, t2m, & 1889 1890 wfbils, wfbilo, fluxt, fluxu, fluxv, & -
LMDZ5/trunk/libf/phylmd/screenc.F90
r2232 r2243 4 4 SUBROUTINE screenc(klon, knon, nsrf, zxli, & 5 5 speed, temp, q_zref, zref, & 6 ts, qsurf, rugos, psol, &6 ts, qsurf, z0m, z0h, psol, & 7 7 ustar, testar, qstar, okri, ri1, & 8 8 pref, delu, delte, delq) … … 30 30 ! ts------input-R- temperature de l'air a la surface 31 31 ! qsurf---input-R- humidite relative a la surface 32 ! rugos---input-R- rugosite32 ! z0m, z0h---input-R- rugosite 33 33 ! psol----input-R- pression au sol 34 34 ! ustar---input-R- facteur d'echelle pour le vent … … 48 48 REAL, dimension(klon), intent(in) :: speed, temp, q_zref 49 49 REAL, intent(in) :: zref 50 REAL, dimension(klon), intent(in) :: ts, qsurf, rugos, psol50 REAL, dimension(klon), intent(in) :: ts, qsurf, z0m, z0h, psol 51 51 REAL, dimension(klon), intent(in) :: ustar, testar, qstar, ri1 52 52 ! … … 75 75 CALL cdrag (knon, nsrf, & 76 76 speed, temp, q_zref, gref, & 77 psol, ts, qsurf, rugos, &77 psol, ts, qsurf, z0m, z0h, & 78 78 cdram, cdrah, zri1, pref) 79 79 DO i = 1, knon -
LMDZ5/trunk/libf/phylmd/stdlevvar.F90
r2232 r2243 4 4 SUBROUTINE stdlevvar(klon, knon, nsrf, zxli, & 5 5 u1, v1, t1, q1, z1, & 6 ts1, qsurf, rugos, psol, pat1, &6 ts1, qsurf, z0m, z0h, psol, pat1, & 7 7 t_2m, q_2m, t_10m, q_10m, u_10m, ustar) 8 8 IMPLICIT NONE … … 32 32 ! ts1-----input-R- temperature de l'air a la surface 33 33 ! qsurf---input-R- humidite relative a la surface 34 ! rugos---input-R- rugosite34 ! z0m, z0h---input-R- rugosite 35 35 ! psol----input-R- pression au sol 36 36 ! pat1----input-R- pression au 1er niveau du modele … … 47 47 LOGICAL, intent(in) :: zxli 48 48 REAL, dimension(klon), intent(in) :: u1, v1, t1, q1, z1, ts1 49 REAL, dimension(klon), intent(in) :: qsurf, rugos49 REAL, dimension(klon), intent(in) :: qsurf, z0m, z0h 50 50 REAL, dimension(klon), intent(in) :: psol, pat1 51 51 ! … … 103 103 ! & cdram, cdrah, cdran, zri1, pref) 104 104 ! Fuxing WANG, 04/03/2015, replace the coefcdrag by the merged version: cdrag 105 105 106 CALL cdrag(knon, nsrf, & 106 107 & speed, t1, q1, z1, & 107 & psol, ts1, qsurf, rugos, &108 & psol, ts1, qsurf, z0m, z0h, & 108 109 & cdram, cdrah, zri1, pref) 109 110 … … 139 140 zref = 2.0 140 141 CALL screenp(klon, knon, nsrf, speed, tpot, q1, & 141 & ts1, qsurf, rugos, lmon, &142 & ts1, qsurf, z0m, lmon, & 142 143 & ustar, testar, qstar, zref, & 143 144 & delu, delte, delq) … … 160 161 CALL screenc(klon, knon, nsrf, zxli, & 161 162 & u_zref, temp, q_zref, zref, & 162 & ts1, qsurf, rugos, psol, &163 & ts1, qsurf, z0m, z0h, psol, & 163 164 & ustar, testar, qstar, okri, ri1, & 164 165 & pref, delu, delte, delq) … … 241 242 zref = 10.0 242 243 CALL screenp(klon, knon, nsrf, speed, tpot, q1, & 243 & ts1, qsurf, rugos, lmon, &244 & ts1, qsurf, z0m, lmon, & 244 245 & ustar, testar, qstar, zref, & 245 246 & delu, delte, delq) … … 262 263 CALL screenc(klon, knon, nsrf, zxli, & 263 264 & u_zref, temp, q_zref, zref, & 264 & ts1, qsurf, rugos, psol, &265 & ts1, qsurf, z0m, z0h, psol, & 265 266 & ustar, testar, qstar, okri, ri1, & 266 267 & pref, delu, delte, delq) -
LMDZ5/trunk/libf/phylmd/surf_land_mod.F90
r2241 r2243 17 17 lwdown_m, q2m, t2m, & 18 18 snow, qsol, agesno, tsoil, & 19 z0 _new, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &19 z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 20 20 qsurf, tsurf_new, dflux_s, dflux_l, & 21 21 flux_u1, flux_v1 ) … … 73 73 ! Output variables 74 74 !**************************************************************************************** 75 REAL, DIMENSION(klon), INTENT(OUT) :: z0 _new75 REAL, DIMENSION(klon), INTENT(OUT) :: z0m, z0h 76 76 !albedo SB >>> 77 77 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb1_new ! albdeo for shortwave interval 1(visible) … … 140 140 evap, fluxsens, fluxlat, & 141 141 tsol_rad, tsurf_new, alb1_new, alb2_new, & 142 emis_new, z0_new, qsurf) 142 emis_new, z0m, qsurf) 143 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 143 144 144 145 ! … … 146 147 ! 147 148 DO i=1,knon 148 z0 _new(i) = MAX(1.5e-05,SQRT(z0_new(i)**2 + rugoro(i)**2))149 z0m(i) = MAX(1.5e-05,SQRT(z0m(i)**2 + rugoro(i)**2)) 149 150 ENDDO 150 151 … … 159 160 u1, v1, gustiness, rugoro, swnet, lwnet, & 160 161 snow, qsol, agesno, tsoil, & 161 qsurf, z0 _new, alb1_new, alb2_new, evap, &162 qsurf, z0m, alb1_new, alb2_new, evap, & 162 163 fluxsens, fluxlat, tsurf_new, dflux_s, dflux_l) 164 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 163 165 164 166 ENDIF ! ok_veget -
LMDZ5/trunk/libf/phylmd/surf_landice_mod.F90
r2241 r2243 17 17 ps, u1, v1, gustiness, rugoro, pctsrf, & 18 18 snow, qsurf, qsol, agesno, & 19 tsoil, z0 _new, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, &19 tsoil, z0m, z0h, SFRWL, alb_dir, alb_dif, evap, fluxsens, fluxlat, & 20 20 tsurf_new, dflux_s, dflux_l, & 21 21 slope, cloudf, & … … 79 79 !**************************************************************************************** 80 80 REAL, DIMENSION(klon), INTENT(OUT) :: qsurf 81 REAL, DIMENSION(klon), INTENT(OUT) :: z0 _new81 REAL, DIMENSION(klon), INTENT(OUT) :: z0m, z0h 82 82 !albedo SB >>> 83 83 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb1 ! new albedo in visible SW interval … … 191 191 run_off_lic, evap, fluxsens, fluxlat, dflux_s, dflux_l, & 192 192 tsurf_new, alb1, alb2, alb3, & 193 emis_new, z0_new, qsurf) 193 emis_new, z0m, qsurf) 194 z0h(1:knon)=z0m(1:knon) ! en attendant mieux 194 195 195 196 ! Suppose zero surface speed … … 287 288 ! 288 289 !**************************************************************************************** 289 z0_new(:) = MAX(1.E-3,rugoro(:)) 290 z0m=1.e-3 291 z0h = z0m 292 z0m = SQRT(z0m**2+rugoro**2) 293 290 294 END IF ! ok_snow 291 295 -
LMDZ5/trunk/libf/phylmd/surf_ocean_mod.F90
r2240 r2243 9 9 ! 10 10 SUBROUTINE surf_ocean(rlon, rlat, swnet, lwnet, alb1, & 11 rugos,windsp, rmu0, fder, tsurf_in, &11 windsp, rmu0, fder, tsurf_in, & 12 12 itime, dtime, jour, knon, knindex, & 13 13 p1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, & … … 16 16 ps, u1, v1, gustiness, rugoro, pctsrf, & 17 17 snow, qsurf, agesno, & 18 !albedo SB >>> 19 ! z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, & 20 z0_new, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 21 !albedo SB <<< 18 z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 22 19 tsurf_new, dflux_s, dflux_l, lmt_bils, & 23 20 flux_u1, flux_v1) … … 49 46 REAL, DIMENSION(klon), INTENT(IN) :: lwnet ! net longwave radiation at surface 50 47 REAL, DIMENSION(klon), INTENT(IN) :: alb1 ! albedo in visible SW interval 51 REAL, DIMENSION(klon), INTENT(IN) :: rugos52 48 REAL, DIMENSION(klon), INTENT(IN) :: windsp 53 49 REAL, DIMENSION(klon), INTENT(IN) :: rmu0 … … 74 70 ! Output variables 75 71 !**************************************************************************************** 76 REAL, DIMENSION(klon), INTENT(OUT) :: z0 _new72 REAL, DIMENSION(klon), INTENT(OUT) :: z0m, z0h 77 73 !albedo SB >>> 78 74 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb1_new ! new albedo in visible SW interval … … 188 184 ! 189 185 !**************************************************************************************** 186 IF (iflag_z0_oce==0) THEN 190 187 DO i = 1, knon 191 188 tmp = MAX(cepdu2,u1(i)**2+v1(i)**2) 192 z0 _new(i) = 0.018*cdragm(i) * (u1(i)**2+v1(i)**2)/RG &189 z0m(i) = 0.018*cdragm(i) * (u1(i)**2+v1(i)**2)/RG & 193 190 + 0.11*14e-6 / SQRT(cdragm(i) * tmp) 194 z0 _new(i) = MAX(1.5e-05,z0_new(i))191 z0m(i) = MAX(1.5e-05,z0m(i)) 195 192 ENDDO 193 z0h(1:knon)=z0m(1:knon) ! En attendant mieux 194 195 ELSE 196 STOP'Alina, au boulot :)' 197 ENDIF 196 198 ! 197 199 !**************************************************************************************** -
LMDZ5/trunk/libf/phylmd/surf_seaice_mod.F90
r2240 r2243 19 19 ps, u1, v1, gustiness, rugoro, pctsrf, & 20 20 snow, qsurf, qsol, agesno, tsoil, & 21 !albedo SB >>> 22 ! z0_new, alb1_new, alb2_new, evap, fluxsens, fluxlat, & 23 z0_new, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 24 !albedo SB <<< 21 z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 25 22 tsurf_new, dflux_s, dflux_l, & 26 23 flux_u1, flux_v1) … … 72 69 ! Output arguments 73 70 !**************************************************************************************** 74 REAL, DIMENSION(klon), INTENT(OUT) :: z0 _new71 REAL, DIMENSION(klon), INTENT(OUT) :: z0m, z0h 75 72 !albedo SB >>> 76 73 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb1_new ! new albedo in visible SW interval … … 150 147 ! 151 148 !**************************************************************************************** 152 z0_new = 0.002153 z0_new = SQRT(z0_new**2+rugoro**2)154 149 150 z0m=z0m_seaice 151 z0h = z0h_seaice 155 152 156 153 !albedo SB >>>
Note: See TracChangeset
for help on using the changeset viewer.