Changeset 3687
- Timestamp:
- May 27, 2020, 4:52:16 PM (5 years ago)
- Location:
- LMDZ6/branches/Ocean_skin/libf/phylmd
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Ocean_skin/libf/phylmd/calcul_fluxs_mod.F90
r3319 r3687 13 13 fqsat, petAcoef, peqAcoef, petBcoef, peqBcoef, & 14 14 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l, & 15 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol )15 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, rhoa) 16 16 17 17 18 18 USE dimphy, ONLY : klon 19 19 USE indice_sol_mod 20 use sens_heat_rain_m, only: sens_heat_rain 20 21 21 22 INCLUDE "clesphys.h" … … 71 72 REAL, DIMENSION(klon), INTENT(IN) :: ps, q1lay 72 73 REAL, DIMENSION(klon), INTENT(IN) :: tsurf, p1lay, cal, beta, cdragh,cdragq 73 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow ! pas utiles74 REAL, DIMENSION(klon), INTENT(IN) :: precip_rain, precip_snow 74 75 REAL, DIMENSION(klon), INTENT(IN) :: radsol, dif_grnd 75 76 REAL, DIMENSION(klon), INTENT(IN) :: t1lay, u1lay, v1lay,gustiness 76 77 REAL, INTENT(IN) :: fqsat ! correction factor on qsat (generally 0.98 over salty water, 1 everywhere else) 77 78 79 real, intent(in), optional:: rhoa(:) ! (knon) 80 ! density of moist air (kg / m3) 81 78 82 ! Parametres entree-sorties 79 83 !**************************************************************************************** … … 85 89 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new, evap, fluxsens, fluxlat 86 90 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 87 REAL, DIMENSION(klon), OPTIONAL :: sens_prec_liq, sens_prec_sol91 REAL, intent(out), OPTIONAL:: sens_prec_liq(:), sens_prec_sol(:) ! (knon) 88 92 REAL, DIMENSION(klon), OPTIONAL :: lat_prec_liq, lat_prec_sol 89 93 … … 140 144 dflux_s = 0. 141 145 dflux_l = 0. 142 if (PRESENT(sens_prec_liq)) sens_prec_liq = 0.143 if (PRESENT(sens_prec_sol)) sens_prec_sol = 0.144 146 if (PRESENT(lat_prec_liq)) lat_prec_liq = 0. 145 147 if (PRESENT(lat_prec_sol)) lat_prec_sol = 0. … … 267 269 ! precip_snow(i) 268 270 ! On calcule par rapport a T=0 269 if (PRESENT(sens_prec_liq)) & 270 sens_prec_liq(i) = rcw * (t1lay(i) - RTT) * & 271 precip_rain(i) 272 if (PRESENT(sens_prec_sol)) & 273 sens_prec_sol(i) = rcs * (t1lay(i) - RTT) * & 274 precip_snow(i) 271 if (PRESENT(sens_prec_liq)) sens_prec_liq(i) & 272 = - sens_heat_rain(precip_rain(i) + precip_snow(i), t1lay(i), & 273 q1lay(i), rhoa(i), rlvtt, tsurf_new(i), ps(i)) 274 if (PRESENT(sens_prec_sol)) sens_prec_sol(i) = 0. 275 275 if (PRESENT(lat_prec_liq)) & 276 276 lat_prec_liq(i) = precip_rain(i) * (RLVTT - RLVTT) … … 280 280 281 281 282 ! if (PRESENT(sens_prec_liq)) & 283 ! WRITE(*,*)' calculs_fluxs sens_prec_liq (min, max)', & 284 ! MINVAL(sens_prec_liq(1:knon)), MAXVAL(sens_prec_liq(1:knon)) 285 ! if (PRESENT(sens_prec_sol)) & 286 ! WRITE(*,*)' calculs_fluxs sens_prec_sol (min, max)', & 287 ! MINVAL(sens_prec_sol(1:knon)), MAXVAL(sens_prec_sol(1:knon)) 288 289 ! 290 !**************************************************************************************** 282 !************************************************************************** 291 283 ! 292 284 END SUBROUTINE calcul_fluxs -
LMDZ6/branches/Ocean_skin/libf/phylmd/cpl_mod.F90
r3628 r3687 669 669 REAL, DIMENSION(klon), INTENT(IN) :: evap, tsurf, fder, albsol 670 670 REAL, DIMENSION(klon), INTENT(IN) :: taux, tauy, windsp 671 REAL, DIMENSION(klon), INTENT(IN) :: sens_prec_liq, sens_prec_sol671 REAL, INTENT(IN):: sens_prec_liq(:), sens_prec_sol(:) ! (knon) 672 672 REAL, DIMENSION(klon), INTENT(IN) :: lat_prec_liq, lat_prec_sol 673 673 real, intent(in):: t_int(:) ! (klon) ocean-air interface temperature, in K … … 905 905 REAL, DIMENSION(klon), INTENT(IN) :: albsol, taux, tauy 906 906 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf 907 REAL, DIMENSION(klon), INTENT(IN) :: sens_prec_liq, sens_prec_sol907 REAL, INTENT(IN):: sens_prec_liq(:), sens_prec_sol(:) ! (knon) 908 908 REAL, DIMENSION(klon), INTENT(IN) :: lat_prec_liq, lat_prec_sol 909 909 LOGICAL, INTENT(IN) :: lafin -
LMDZ6/branches/Ocean_skin/libf/phylmd/ocean_cpl_mod.F90
r3628 r3687 55 55 radsol, snow, agesno, & 56 56 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 57 tsurf_new, dflux_s, dflux_l, s ss, s_int)57 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa) 58 58 59 59 ! … … 93 93 REAL, DIMENSION(klon), INTENT(IN) :: tsurf_in 94 94 real, intent(in):: s_int(:) ! (knon) ocean-air interface salinity, in ppt 95 real, intent(in):: rhoa(:) ! (knon) density of moist air (kg / m3) 95 96 96 97 ! In/Output arguments … … 107 108 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 108 109 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 110 REAL, intent(out):: sens_prec_liq(:) ! (knon) 109 111 110 112 REAL, INTENT(OUT):: sss(:) ! (klon) … … 122 124 REAL, DIMENSION(klon) :: u1_lay, v1_lay 123 125 LOGICAL :: check=.FALSE. 124 REAL , DIMENSION(klon) :: sens_prec_liq, sens_prec_sol126 REAL sens_prec_sol(knon) 125 127 REAL, DIMENSION(klon) :: lat_prec_liq, lat_prec_sol 126 128 … … 145 147 dif_grnd = 0. 146 148 agesno(:) = 0. 147 sens_prec_liq = 0.; sens_prec_sol = 0.;lat_prec_liq = 0.; lat_prec_sol = 0.149 lat_prec_liq = 0.; lat_prec_sol = 0. 148 150 149 151 … … 160 162 f_qsat_oce,AcoefH, AcoefQ, BcoefH, BcoefQ, & 161 163 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l, & 162 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol )164 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, rhoa) 163 165 164 166 if (activate_ocean_skin == 2) then … … 226 228 radsol, snow, qsurf, & 227 229 alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 228 tsurf_new, dflux_s, dflux_l )230 tsurf_new, dflux_s, dflux_l, rhoa) 229 231 ! 230 232 ! This subroutine treats the ocean where there is ice. The subroutine first receives … … 261 263 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 262 264 REAL, DIMENSION(klon,nbsrf), INTENT(IN) :: pctsrf 265 real, intent(in):: rhoa(:) ! (knon) density of moist air (kg / m3) 263 266 264 267 ! In/output arguments … … 288 291 REAL, DIMENSION(klon) :: u0, v0 289 292 REAL, DIMENSION(klon) :: u1_lay, v1_lay 290 REAL , DIMENSION(klon) :: sens_prec_liq, sens_prec_sol293 REAL sens_prec_liq(knon), sens_prec_sol(knon) 291 294 REAL, DIMENSION(klon) :: lat_prec_liq, lat_prec_sol 292 295 … … 296 299 IF (check) WRITE(*,*)'Entering surface_seaice, knon=',knon 297 300 298 sens_prec_liq = 0.; sens_prec_sol = 0.;lat_prec_liq = 0.; lat_prec_sol = 0.301 lat_prec_liq = 0.; lat_prec_sol = 0. 299 302 300 303 !**************************************************************************************** … … 329 332 f_qsat_oce,AcoefH, AcoefQ, BcoefH, BcoefQ, & 330 333 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l, & 331 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol )334 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, rhoa) 332 335 do j = 1, knon 333 336 i = knindex(j) -
LMDZ6/branches/Ocean_skin/libf/phylmd/ocean_forced_mod.F90
r3463 r3687 22 22 radsol, snow, agesno, & 23 23 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 24 tsurf_new, dflux_s, dflux_l )24 tsurf_new, dflux_s, dflux_l, sens_prec_liq, rhoa) 25 25 ! 26 26 ! This subroutine treats the "open ocean", all grid points that are not entierly covered … … 55 55 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 56 56 REAL, DIMENSION(klon), INTENT(IN) :: tsurf_in 57 real, intent(in):: rhoa(:) ! (knon) density of moist air (kg / m3) 57 58 58 59 ! In/Output arguments … … 69 70 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 70 71 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 72 REAL, intent(out):: sens_prec_liq(:) ! (knon) 71 73 72 74 ! Local variables … … 78 80 REAL, DIMENSION(klon) :: u1_lay, v1_lay 79 81 LOGICAL :: check=.FALSE. 80 REAL , DIMENSION(klon) :: sens_prec_liq, sens_prec_sol82 REAL sens_prec_sol(knon) 81 83 REAL, DIMENSION(klon) :: lat_prec_liq, lat_prec_sol 82 84 … … 111 113 alb_neig(:) = 0. 112 114 agesno(:) = 0. 113 sens_prec_liq = 0.; sens_prec_sol = 0.;lat_prec_liq = 0.; lat_prec_sol = 0.115 lat_prec_liq = 0.; lat_prec_sol = 0. 114 116 115 117 ! Suppose zero surface speed … … 127 129 f_qsat_oce,AcoefH, AcoefQ, BcoefH, BcoefQ, & 128 130 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l, & 129 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol )131 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, rhoa) 130 132 if (activate_ocean_skin == 2) tsurf_new = tsurf_lim 131 133 … … 158 160 radsol, snow, qsol, agesno, tsoil, & 159 161 qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 160 tsurf_new, dflux_s, dflux_l )162 tsurf_new, dflux_s, dflux_l, rhoa) 161 163 ! 162 164 ! This subroutine treats the ocean where there is ice. … … 191 193 REAL, DIMENSION(klon), INTENT(IN) :: ps 192 194 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 195 real, intent(in):: rhoa(:) ! (knon) density of moist air (kg / m3) 193 196 194 197 ! In/Output arguments … … 220 223 REAL, DIMENSION(klon) :: u0, v0 221 224 REAL, DIMENSION(klon) :: u1_lay, v1_lay 222 REAL , DIMENSION(klon) :: sens_prec_liq, sens_prec_sol225 REAL sens_prec_liq(knon), sens_prec_sol (knon) 223 226 REAL, DIMENSION(klon) :: lat_prec_liq, lat_prec_sol 224 227 … … 254 257 255 258 beta = 1.0 256 sens_prec_liq = 0.; sens_prec_sol = 0.;lat_prec_liq = 0.; lat_prec_sol = 0.259 lat_prec_liq = 0.; lat_prec_sol = 0. 257 260 258 261 ! Suppose zero surface speed … … 267 270 f_qsat_oce,AcoefH, AcoefQ, BcoefH, BcoefQ, & 268 271 tsurf_new, evap, fluxlat, fluxsens, dflux_s, dflux_l, & 269 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol )272 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, rhoa) 270 273 do j = 1, knon 271 274 i = knindex(j) -
LMDZ6/branches/Ocean_skin/libf/phylmd/pbl_surface_mod.F90
r3628 r3687 293 293 USE ioipsl_getin_p_mod, ONLY : getin_p 294 294 use phys_state_var_mod, only: s_int, ds_ns, dt_ns 295 use phys_output_var_mod, only: t_int, dter, dser, tkt, tks, rf,taur295 use phys_output_var_mod, only: t_int, dter, dser, tkt, tks, taur 296 296 #ifdef CPP_XIOS 297 297 USE wxios, ONLY: missing_val … … 831 831 832 832 real, DIMENSION(klon):: yt_int, ys_int, yds_ns, ydt_ns, ydter, ydser, & 833 ytkt, ytks, y rf, ytaur834 ! compression of t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, rf,833 ytkt, ytks, ytaur 834 ! compression of t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, 835 835 ! taur on ocean points 836 836 … … 1956 1956 y_flux_u1, y_flux_v1, yt_int(:knon), ys_int(:knon), & 1957 1957 yds_ns(:knon), ydt_ns(:knon), ydter(:knon), ydser(:knon), & 1958 ytkt(:knon), ytks(:knon), y rf(:knon), ytaur(:knon))1958 ytkt(:knon), ytks(:knon), ytaur(:knon)) 1959 1959 IF (prt_level >=10) THEN 1960 1960 print *,'arg de surf_ocean: ycdragh ',ycdragh … … 2569 2569 tkt = missing_val 2570 2570 tks = missing_val 2571 rf = missing_val2572 2571 taur = missing_val 2573 2572 … … 2580 2579 tkt(ni(:knon)) = ytkt(:knon) 2581 2580 tks(ni(:knon)) = ytks(:knon) 2582 rf(ni(:knon)) = yrf(:knon)2583 2581 taur(ni(:knon)) = ytaur(:knon) 2584 2582 end if -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_ctrlout_mod.F90
r3626 r3687 1979 1979 "thickness of salinity microlayer", "m", '') 1980 1980 1981 type(ctrl_out), save:: o_rf &1982 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'rf', &1983 "sensible heat flux at the surface due to rainfall, positive upward", &1984 "W m-2", '')1985 1986 1981 type(ctrl_out), save:: o_taur & 1987 1982 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'taur', & -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_var_mod.F90
r3628 r3687 152 152 ! épaisseur (m) de la couche de diffusion de masse (microlayer) 153 153 154 REAL, SAVE, ALLOCATABLE:: rf(:)155 ! sensible heat flux at the surface due to rainfall, in W m-2156 ! positive upward157 158 154 REAL, SAVE, ALLOCATABLE:: taur(:) 159 155 ! momentum flux due to rain, in Pa 160 156 161 !$OMP THREADPRIVATE(t_int, dter, dser, tkt, tks, rf,taur)157 !$OMP THREADPRIVATE(t_int, dter, dser, tkt, tks, taur) 162 158 163 159 CONTAINS … … 221 217 222 218 if (activate_ocean_skin >= 1) allocate(t_int(klon), dter(klon), & 223 dser(klon), tkt(klon), tks(klon), rf(klon),taur(klon))219 dser(klon), tkt(klon), tks(klon), taur(klon)) 224 220 225 221 END SUBROUTINE phys_output_var_init -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_write_mod.F90
r3672 r3687 203 203 o_flx_co2_ocean, o_flx_co2_land, o_flx_co2_ff, o_flx_co2_bb, & 204 204 o_t_int, o_s_int, o_ds_ns, o_dt_ns, o_dter, o_dser, o_tkt, o_tks, & 205 o_ rf, o_taur205 o_taur 206 206 207 207 #ifdef CPP_StratAer … … 360 360 alt_tropo, & 361 361 !Ionela 362 ok_4xCO2atm, t_int, dter, dser, tkt, tks, rf,taur362 ok_4xCO2atm, t_int, dter, dser, tkt, tks, taur 363 363 364 364 USE ocean_slab_mod, ONLY: nslay, tslab, slab_bilg, tice, seaice, & … … 2315 2315 CALL histwrite_phy(o_tkt, tkt) 2316 2316 CALL histwrite_phy(o_tks, tks) 2317 CALL histwrite_phy(o_rf, rf)2318 2317 CALL histwrite_phy(o_taur, taur) 2319 2318 end if -
LMDZ6/branches/Ocean_skin/libf/phylmd/surf_ocean_mod.F90
r3628 r3687 20 20 z0m, z0h, SFRWL, alb_dir_new, alb_dif_new, evap, fluxsens, fluxlat, & 21 21 tsurf_new, dflux_s, dflux_l, lmt_bils, & 22 flux_u1, flux_v1, t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, rf, & 23 taur) 22 flux_u1, flux_v1, t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, taur) 24 23 25 24 use albedo, only: alboc, alboc_cd … … 32 31 USE indice_sol_mod, ONLY : nbsrf, is_oce 33 32 USE limit_read_mod 34 use sens_heat_rain_m, only: sens_heat_rain35 33 use config_ocean_skin_m, only: activate_ocean_skin 36 34 ! … … 122 120 ! épaisseur (m) de la couche de diffusion de masse (microlayer) 123 121 124 REAL, intent(out):: rf(:) ! (knon)125 ! sensible heat flux at the surface due to rainfall, in W m-2126 ! positive upward127 128 122 REAL, intent(out):: taur(:) ! (knon) 129 123 ! momentum flux due to rain, in Pa … … 139 133 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 140 134 real rhoa(knon) ! density of moist air (kg / m3) 141 real xlv(knon) ! chaleur latente d'évaporation (J / kg) 142 real precip_tot(knon) ! rain + snow 135 REAL sens_prec_liq(knon) 143 136 144 137 real sss(klon) … … 175 168 ENDIF 176 169 177 170 rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon))) 178 171 !****************************************************************************** 179 172 ! Switch according to type of ocean (couple, slab or forced) … … 191 184 radsol, snow, agesno, & 192 185 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 193 tsurf_new, dflux_s, dflux_l, s ss, s_int)186 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa) 194 187 195 188 CASE('slab') … … 214 207 radsol, snow, agesno, & 215 208 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 216 tsurf_new, dflux_s, dflux_l )209 tsurf_new, dflux_s, dflux_l, sens_prec_liq, rhoa) 217 210 END SELECT 218 211 … … 319 312 320 313 if (activate_ocean_skin >= 1) then 321 rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon)))322 xlv = rlvtt323 precip_tot = precip_rain(:knon) + precip_snow(:knon)324 rf = sens_heat_rain(precip_tot, temp_air(:knon), spechum(:knon), rhoa, &325 xlv, tsurf_in(:knon), ps(:knon))326 314 if (type_ocean /= 'couple') sss(:knon) = 35. 327 315 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 328 316 u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), & 329 rain = precip_tot, hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 317 rain = precip_rain(:knon) + precip_snow(:knon), & 318 hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 330 319 rnl = - lwnet(:knon), & 331 320 tau = sqrt(flux_u1(:knon)**2 + flux_v1(:knon)**2), rhoa = rhoa, & 332 xlv = xlv, rf = rf, dtime = dtime, rns = swnet(:knon)) 321 xlv = [(rlvtt, i = 1, knon)], rf = - sens_prec_liq, dtime = dtime, & 322 rns = swnet(:knon)) 333 323 if (activate_ocean_skin == 2) tsurf_new(:knon) = t_int 334 324 end if -
LMDZ6/branches/Ocean_skin/libf/phylmd/surf_seaice_mod.F90
r3102 r3687 37 37 INCLUDE "dimsoil.h" 38 38 INCLUDE "clesphys.h" 39 40 INCLUDE "YOMCST.h" 41 ! for rd and retv 39 42 40 43 ! Input arguments … … 87 90 REAL, DIMENSION(klon) :: alb1_new,alb2_new 88 91 !albedo SB <<< 89 ! 92 93 real rhoa(knon) ! density of moist air (kg / m3) 94 90 95 ! End definitions 91 96 !**************************************************************************************** … … 98 103 radsol(:) = 0.0 99 104 radsol(1:knon) = swnet(1:knon) + lwnet(1:knon) 105 106 rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon))) 100 107 101 108 !**************************************************************************************** … … 116 123 radsol, snow, qsurf, & 117 124 alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 118 tsurf_new, dflux_s, dflux_l )125 tsurf_new, dflux_s, dflux_l, rhoa) 119 126 120 127 ELSE IF (type_ocean == 'slab'.AND.version_ocean=='sicINT') THEN … … 138 145 radsol, snow, qsol, agesno, tsoil, & 139 146 qsurf, alb1_new, alb2_new, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 140 tsurf_new, dflux_s, dflux_l )147 tsurf_new, dflux_s, dflux_l, rhoa) 141 148 142 149 END IF
Note: See TracChangeset
for help on using the changeset viewer.