10 SUBROUTINE surf_ocean(rlon, rlat, swnet, lwnet, alb1, &
11 windsp, rmu0, fder, tsurf_in, &
12 itime, dtime, jour, knon, knindex, &
13 p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, &
14 acoefh, acoefq, bcoefh, bcoefq, &
15 acoefu, acoefv, bcoefu, bcoefv, &
16 ps, u1, v1, gustiness, rugoro, pctsrf, &
17 snow, qsurf, agesno, &
18 z0m, z0h, sfrwl, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, &
19 tsurf_new, dflux_s, dflux_l, lmt_bils, &
42 INTEGER,
INTENT(IN) :: itime, jour, knon
43 INTEGER,
DIMENSION(klon),
INTENT(IN) :: knindex
44 REAL,
INTENT(IN) :: dtime
45 REAL,
DIMENSION(klon),
INTENT(IN) :: rlon, rlat
46 REAL,
DIMENSION(klon),
INTENT(IN) :: swnet
47 REAL,
DIMENSION(klon),
INTENT(IN) :: lwnet
48 REAL,
DIMENSION(klon),
INTENT(IN) :: alb1
49 REAL,
DIMENSION(klon),
INTENT(IN) :: windsp
50 REAL,
DIMENSION(klon),
INTENT(IN) :: rmu0
51 REAL,
DIMENSION(klon),
INTENT(IN) :: fder
52 REAL,
DIMENSION(klon),
INTENT(IN) :: tsurf_in
53 REAL,
DIMENSION(klon),
INTENT(IN) :: p1lay,z1lay
54 REAL,
DIMENSION(klon),
INTENT(IN) :: cdragh
55 REAL,
DIMENSION(klon),
INTENT(IN) :: cdragm
56 REAL,
DIMENSION(klon),
INTENT(IN) :: precip_rain, precip_snow
57 REAL,
DIMENSION(klon),
INTENT(IN) :: temp_air, spechum
58 REAL,
DIMENSION(klon),
INTENT(IN) :: AcoefH, AcoefQ, BcoefH, BcoefQ
59 REAL,
DIMENSION(klon),
INTENT(IN) :: AcoefU, AcoefV, BcoefU, BcoefV
60 REAL,
DIMENSION(klon),
INTENT(IN) :: ps
61 REAL,
DIMENSION(klon),
INTENT(IN) :: u1, v1, gustiness
62 REAL,
DIMENSION(klon),
INTENT(IN) :: rugoro
63 REAL,
DIMENSION(klon,nbsrf),
INTENT(IN) :: pctsrf
67 REAL,
DIMENSION(klon),
INTENT(INOUT) :: snow
68 REAL,
DIMENSION(klon),
INTENT(INOUT) :: qsurf
69 REAL,
DIMENSION(klon),
INTENT(INOUT) :: agesno
73 REAL,
DIMENSION(klon),
INTENT(OUT) :: z0m, z0h
77 REAL,
DIMENSION(6),
INTENT(IN) :: SFRWL
78 REAL,
DIMENSION(klon,nsw),
INTENT(OUT) :: alb_dir_new,alb_dif_new
80 REAL,
DIMENSION(klon),
INTENT(OUT) :: evap, fluxsens, fluxlat
81 REAL,
DIMENSION(klon),
INTENT(OUT) :: tsurf_new
82 REAL,
DIMENSION(klon),
INTENT(OUT) :: dflux_s, dflux_l
83 REAL,
DIMENSION(klon),
INTENT(OUT) :: lmt_bils
84 REAL,
DIMENSION(klon),
INTENT(OUT) :: flux_u1, flux_v1
90 REAL,
PARAMETER :: cepdu2=(0.1)**2
91 REAL,
DIMENSION(klon) :: alb_eau
92 REAL,
DIMENSION(klon) :: radsol
93 REAL,
DIMENSION(klon) :: cdragq
94 CHARACTER(len=20),
PARAMETER :: modname=
"surf_ocean"
105 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon)
115 IF ( f_z0qh_oce .ne. 1.)
THEN
118 cdragq(:)=cdragh(:)* &
119 log(z1lay(:)/z0h(:))/log(z1lay(:)/(f_z0qh_oce*z0h(:)))
130 swnet, lwnet, alb1, &
132 itime, dtime, knon, knindex, &
133 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow,temp_air,spechum,&
134 acoefh, acoefq, bcoefh, bcoefq, &
135 acoefu, acoefv, bcoefu, bcoefv, &
136 ps, u1, v1, gustiness, &
137 radsol, snow, agesno, &
138 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
139 tsurf_new, dflux_s, dflux_l)
143 itime, dtime, jour, knon, knindex, &
144 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum,&
145 acoefh, acoefq, bcoefh, bcoefq, &
146 acoefu, acoefv, bcoefu, bcoefv, &
147 ps, u1, v1, gustiness, tsurf_in, &
149 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
150 tsurf_new, dflux_s, dflux_l, lmt_bils)
154 itime, dtime, jour, knon, knindex, &
155 p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, &
157 acoefh, acoefq, bcoefh, bcoefq, &
158 acoefu, acoefv, bcoefu, bcoefv, &
159 ps, u1, v1, gustiness, &
160 radsol, snow, agesno, &
161 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, &
162 tsurf_new, dflux_s, dflux_l)
171 lmt_bils(knindex(i))=(swnet(i)+lwnet(i)+fluxsens(i)+fluxlat(i)) &
180 if(iflag_albedo==1)
then
181 call ocean_albedo(knon,rmu0,knindex,windsp,sfrwl,alb_dir_new,alb_dif_new)
186 CALL alboc(
REAL(jour),rlat,alb_eau)
191 alb_dir_new(i,k) = alb_eau(knindex(i))
202 IF (iflag_z0_oce==0)
THEN
204 tmp = max(cepdu2,gustiness(i)+u1(i)**2+v1(i)**2)
205 z0m(i) = 0.018*cdragm(i) * (gustiness(i)+u1(i)**2+v1(i)**2)/
rg &
206 + 0.11*14e-6 / sqrt(cdragm(i) * tmp)
207 z0m(i) = max(1.5e-05,z0m(i))
209 z0h(1:knon)=z0m(1:knon)
211 ELSE IF (iflag_z0_oce==1)
THEN
213 tmp = max(cepdu2,gustiness(i)+u1(i)**2+v1(i)**2)
214 z0m(i) = 0.018*cdragm(i) * (gustiness(i)+u1(i)**2+v1(i)**2)/
rg &
215 + 0.11*14e-6 / sqrt(cdragm(i) * tmp)
216 z0m(i) = max(1.5e-05,z0m(i))
217 z0h(i)=0.4*14e-6 / sqrt(cdragm(i) * tmp)
!$Header!c include clesph0 h c COMMON clesph0 cycle_diurne
subroutine surf_ocean(rlon, rlat, swnet, lwnet, alb1, windsp, rmu0, fder, tsurf_in, itime, dtime, jour, knon, knindex, p1lay, z1lay, cdragh, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, rugoro, pctsrf, snow, qsurf, agesno, z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, tsurf_new, dflux_s, dflux_l, lmt_bils, flux_u1, flux_v1)
subroutine ocean_albedo(knon, zrmu0, knindex, pwind, SFRWL, alb_dir_new, alb_dif_new)
subroutine ocean_forced_noice(itime, dtime, jour, knon, knindex, p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, radsol, snow, agesno, qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l)
real, dimension(:), allocatable, save zmasq
subroutine alboc_cd(rmu0, albedo)
character(len=6), save type_ocean
subroutine, public ocean_slab_noice(itime, dtime, jour, knon, knindex, p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, tsurf_in, radsol, snow, qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l, qflux)
subroutine, public ocean_cpl_noice(swnet, lwnet, alb1, windsp, fder_old, itime, dtime, knon, knindex, p1lay, cdragh, cdragq, cdragm, precip_rain, precip_snow, temp_air, spechum, AcoefH, AcoefQ, BcoefH, BcoefQ, AcoefU, AcoefV, BcoefU, BcoefV, ps, u1, v1, gustiness, radsol, snow, agesno, qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, tsurf_new, dflux_s, dflux_l)
!$Header!integer nvarmx s s itime
subroutine abort_physic(modname, message, ierr)
subroutine alboc(rjour, rlat, albedo)
integer, parameter is_oce