Changeset 3815 for LMDZ6/trunk/libf/phylmd/surf_ocean_mod.F90
- Timestamp:
- Feb 1, 2021, 3:30:57 PM (4 years ago)
- Location:
- LMDZ6/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk
-
LMDZ6/trunk/libf/phylmd/surf_ocean_mod.F90
r3395 r3815 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) 22 flux_u1, flux_v1, delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, tkt, tks, & 23 taur, sss) 23 24 24 25 use albedo, only: alboc, alboc_cd 26 use bulk_flux_m, only: bulk_flux 25 27 USE dimphy, ONLY: klon, zmasq 26 28 USE surface_data, ONLY : type_ocean … … 30 32 USE indice_sol_mod, ONLY : nbsrf, is_oce 31 33 USE limit_read_mod 34 use config_ocean_skin_m, only: activate_ocean_skin 32 35 ! 33 36 ! This subroutine will make a call to ocean_XXX_noice according to the ocean mode (force, … … 50 53 REAL, DIMENSION(klon), INTENT(IN) :: lwnet ! net longwave radiation at surface 51 54 REAL, DIMENSION(klon), INTENT(IN) :: alb1 ! albedo in visible SW interval 52 REAL, DIMENSION(klon), INTENT(IN) :: windsp 55 REAL, DIMENSION(klon), INTENT(IN) :: windsp ! wind at 10 m, in m s-1 53 56 REAL, DIMENSION(klon), INTENT(IN) :: rmu0 54 57 REAL, DIMENSION(klon), INTENT(IN) :: fder 55 REAL, DIMENSION(klon), INTENT(IN) :: tsurf_in58 REAL, INTENT(IN):: tsurf_in(klon) ! defined only for subscripts 1:knon 56 59 REAL, DIMENSION(klon), INTENT(IN) :: p1lay,z1lay ! pression (Pa) et altitude (m) du premier niveau 57 60 REAL, DIMENSION(klon), INTENT(IN) :: cdragh … … 73 76 REAL, DIMENSION(klon), INTENT(inOUT):: z0h 74 77 78 REAL, intent(inout):: delta_sst(:) ! (knon) 79 ! Ocean-air interface temperature minus bulk SST, in K. Defined 80 ! only if activate_ocean_skin >= 1. 81 82 real, intent(inout):: delta_sal(:) ! (knon) 83 ! Ocean-air interface salinity minus bulk salinity, in ppt. Defined 84 ! only if activate_ocean_skin >= 1. 85 86 REAL, intent(inout):: ds_ns(:) ! (knon) 87 ! "delta salinity near surface". Salinity variation in the 88 ! near-surface turbulent layer. That is subskin salinity minus 89 ! foundation salinity. In ppt. 90 91 REAL, intent(inout):: dt_ns(:) ! (knon) 92 ! "delta temperature near surface". Temperature variation in the 93 ! near-surface turbulent layer. That is subskin temperature 94 ! minus foundation temperature. (Can be negative.) In K. 95 75 96 ! Output variables 76 !************************************************************************** ****97 !************************************************************************** 77 98 REAL, DIMENSION(klon), INTENT(OUT) :: z0m 78 99 !albedo SB >>> … … 83 104 !albedo SB <<< 84 105 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 85 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new106 REAL, INTENT(OUT):: tsurf_new(klon) ! sea surface temperature, in K 86 107 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 87 108 REAL, DIMENSION(klon), INTENT(OUT) :: lmt_bils 88 109 REAL, DIMENSION(klon), INTENT(OUT) :: flux_u1, flux_v1 89 110 111 REAL, intent(out):: dter(:) ! (knon) 112 ! Temperature variation in the diffusive microlayer, that is 113 ! ocean-air interface temperature minus subskin temperature. In 114 ! K. 115 116 REAL, intent(out):: dser(:) ! (knon) 117 ! Salinity variation in the diffusive microlayer, that is 118 ! ocean-air interface salinity minus subskin salinity. In ppt. 119 120 REAL, intent(out):: tkt(:) ! (knon) 121 ! épaisseur (m) de la couche de diffusion thermique (microlayer) 122 ! cool skin thickness 123 124 REAL, intent(out):: tks(:) ! (knon) 125 ! épaisseur (m) de la couche de diffusion de masse (microlayer) 126 127 REAL, intent(out):: taur(:) ! (knon) 128 ! momentum flux due to rain, in Pa 129 130 real, intent(out):: sss(:) ! (klon) 131 ! Bulk salinity of the surface layer of the ocean, in ppt. (Only 132 ! defined for subscripts 1:knon, but we have to declare it with 133 ! size klon because of the coupling machinery.) 134 90 135 ! Local variables 91 !************************************************************************* *****136 !************************************************************************* 92 137 INTEGER :: i, k 93 138 REAL :: tmp … … 97 142 REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation 98 143 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 99 100 ! End definition 101 !****************************************************************************** 144 real rhoa(knon) ! density of moist air (kg / m3) 145 REAL sens_prec_liq(knon) 146 147 REAL t_int(knon) ! ocean-air interface temperature, in K 148 real s_int(knon) ! ocean-air interface salinity, in ppt 149 150 !************************************************************************** 102 151 103 152 … … 126 175 ENDIF 127 176 128 177 rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon))) 129 178 !****************************************************************************** 130 179 ! Switch according to type of ocean (couple, slab or forced) … … 139 188 AcoefH, AcoefQ, BcoefH, BcoefQ, & 140 189 AcoefU, AcoefV, BcoefU, BcoefV, & 141 ps, u1, v1, gustiness, &190 ps, u1, v1, gustiness, tsurf_in, & 142 191 radsol, snow, agesno, & 143 192 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 144 tsurf_new, dflux_s, dflux_l) 193 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, delta_sal, rhoa, & 194 delta_sst) 145 195 146 196 CASE('slab') … … 162 212 AcoefH, AcoefQ, BcoefH, BcoefQ, & 163 213 AcoefU, AcoefV, BcoefU, BcoefV, & 164 ps, u1, v1, gustiness, &214 ps, u1, v1, gustiness, tsurf_in, & 165 215 radsol, snow, agesno, & 166 216 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 167 tsurf_new, dflux_s, dflux_l )217 tsurf_new, dflux_s, dflux_l, sens_prec_liq, rhoa) 168 218 END SELECT 169 219 … … 268 318 CALL abort_physic(modname,'version non prevue',1) 269 319 ENDIF 270 ! 271 !****************************************************************************** 320 321 if (activate_ocean_skin >= 1) then 322 if (type_ocean /= 'couple') sss(:knon) = 35. 323 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 324 u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), & 325 rain = precip_rain(:knon) + precip_snow(:knon), & 326 hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 327 rnl = - lwnet(:knon), & 328 tau = sqrt(flux_u1(:knon)**2 + flux_v1(:knon)**2), rhoa = rhoa, & 329 xlv = [(rlvtt, i = 1, knon)], rf = - sens_prec_liq, dtime = dtime, & 330 rns = swnet(:knon)) 331 delta_sst = t_int - tsurf_new(:knon) 332 delta_sal = s_int - sss(:knon) 333 if (activate_ocean_skin >= 2) tsurf_new(:knon) = t_int 334 end if 335 272 336 END SUBROUTINE surf_ocean 273 !**************************************************************************** **337 !**************************************************************************** 274 338 ! 275 339 END MODULE surf_ocean_mod
Note: See TracChangeset
for help on using the changeset viewer.