Changeset 3940 for LMDZ6/trunk/libf/phylmdiso/surf_ocean_mod.F90
- Timestamp:
- Jun 15, 2021, 1:18:14 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmdiso/surf_ocean_mod.F90
r3927 r3940 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 #ifdef ISO 24 25 & ,xtprecip_rain, xtprecip_snow,xtspechum,Roce, & … … 28 29 29 30 use albedo, only: alboc, alboc_cd 31 use bulk_flux_m, only: bulk_flux 30 32 USE dimphy, ONLY: klon, zmasq 31 33 USE surface_data, ONLY : type_ocean … … 42 44 #endif 43 45 USE limit_read_mod 46 use config_ocean_skin_m, only: activate_ocean_skin 44 47 ! 45 48 ! This subroutine will make a call to ocean_XXX_noice according to the ocean mode (force, … … 62 65 REAL, DIMENSION(klon), INTENT(IN) :: lwnet ! net longwave radiation at surface 63 66 REAL, DIMENSION(klon), INTENT(IN) :: alb1 ! albedo in visible SW interval 64 REAL, DIMENSION(klon), INTENT(IN) :: windsp 67 REAL, DIMENSION(klon), INTENT(IN) :: windsp ! wind at 10 m, in m s-1 65 68 REAL, DIMENSION(klon), INTENT(IN) :: rmu0 66 69 REAL, DIMENSION(klon), INTENT(IN) :: fder 67 REAL, DIMENSION(klon), INTENT(IN) :: tsurf_in 70 REAL, DIMENSION(klon), INTENT(IN) :: tsurf_in ! defined only for subscripts 1:knon 68 71 REAL, DIMENSION(klon), INTENT(IN) :: p1lay,z1lay ! pression (Pa) et altitude (m) du premier niveau 69 72 REAL, DIMENSION(klon), INTENT(IN) :: cdragh … … 87 90 REAL, DIMENSION(klon), INTENT(INOUT) :: qsurf 88 91 REAL, DIMENSION(klon), INTENT(INOUT) :: agesno 92 REAL, DIMENSION(klon), INTENT(inOUT) :: z0h 89 93 #ifdef ISO 90 94 REAL, DIMENSION(niso,klon), INTENT(IN) :: xtsnow 91 95 REAL, DIMENSION(niso,klon), INTENT(INOUT) :: Roce 92 96 #endif 93 REAL, DIMENSION(klon), INTENT(inOUT):: z0h 97 98 REAL, intent(inout):: delta_sst(:) ! (knon) 99 ! Ocean-air interface temperature minus bulk SST, in K. Defined 100 ! only if activate_ocean_skin >= 1. 101 102 real, intent(inout):: delta_sal(:) ! (knon) 103 ! Ocean-air interface salinity minus bulk salinity, in ppt. Defined 104 ! only if activate_ocean_skin >= 1. 105 106 REAL, intent(inout):: ds_ns(:) ! (knon) 107 ! "delta salinity near surface". Salinity variation in the 108 ! near-surface turbulent layer. That is subskin salinity minus 109 ! foundation salinity. In ppt. 110 111 REAL, intent(inout):: dt_ns(:) ! (knon) 112 ! "delta temperature near surface". Temperature variation in the 113 ! near-surface turbulent layer. That is subskin temperature 114 ! minus foundation temperature. (Can be negative.) In K. 94 115 95 116 ! Output variables 96 !************************************************************************** ****117 !************************************************************************** 97 118 REAL, DIMENSION(klon), INTENT(OUT) :: z0m 98 119 !albedo SB >>> 99 ! REAL, DIMENSION(klon), INTENT(OUT) 100 ! REAL, DIMENSION(klon), INTENT(OUT) 101 REAL, DIMENSION(6), INTENT(IN) :: SFRWL102 REAL, DIMENSION(klon,nsw), INTENT(OUT) 120 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb1_new ! new albedo in visible SW interval 121 ! REAL, DIMENSION(klon), INTENT(OUT) :: alb2_new ! new albedo in near IR interval 122 REAL, DIMENSION(6), INTENT(IN) :: SFRWL 123 REAL, DIMENSION(klon,nsw), INTENT(OUT) :: alb_dir_new,alb_dif_new 103 124 !albedo SB <<< 104 125 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 105 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new 126 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new ! sea surface temperature, in K 106 127 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 107 128 REAL, DIMENSION(klon), INTENT(OUT) :: lmt_bils 108 129 REAL, DIMENSION(klon), INTENT(OUT) :: flux_u1, flux_v1 130 131 REAL, intent(out):: dter(:) ! (knon) 132 ! Temperature variation in the diffusive microlayer, that is 133 ! ocean-air interface temperature minus subskin temperature. In 134 ! K. 135 136 REAL, intent(out):: dser(:) ! (knon) 137 ! Salinity variation in the diffusive microlayer, that is 138 ! ocean-air interface salinity minus subskin salinity. In ppt. 139 140 REAL, intent(out):: tkt(:) ! (knon) 141 ! épaisseur (m) de la couche de diffusion thermique (microlayer) 142 ! cool skin thickness 143 144 REAL, intent(out):: tks(:) ! (knon) 145 ! épaisseur (m) de la couche de diffusion de masse (microlayer) 146 147 REAL, intent(out):: taur(:) ! (knon) 148 ! momentum flux due to rain, in Pa 149 150 real, intent(out):: sss(:) ! (klon) 151 ! Bulk salinity of the surface layer of the ocean, in ppt. (Only 152 ! defined for subscripts 1:knon, but we have to declare it with 153 ! size klon because of the coupling machinery.) 109 154 #ifdef ISO 110 155 REAL, DIMENSION(ntraciso,klon), INTENT(out) :: xtevap ! isotopes in surface evaporation flux … … 113 158 114 159 ! Local variables 115 !************************************************************************* *****160 !************************************************************************* 116 161 INTEGER :: i, k 117 162 REAL :: tmp … … 121 166 REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation 122 167 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 123 124 ! End definition 168 real rhoa(knon) ! density of moist air (kg / m3) 169 REAL sens_prec_liq(knon) 170 171 REAL t_int(knon) ! ocean-air interface temperature, in K 172 real s_int(knon) ! ocean-air interface salinity, in ppt 173 125 174 !****************************************************************************** 126 175 … … 165 214 166 215 216 rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon))) 217 167 218 !****************************************************************************** 168 219 ! Switch according to type of ocean (couple, slab or forced) … … 177 228 AcoefH, AcoefQ, BcoefH, BcoefQ, & 178 229 AcoefU, AcoefV, BcoefU, BcoefV, & 179 ps, u1, v1, gustiness, &230 ps, u1, v1, gustiness, tsurf_in, & 180 231 radsol, snow, agesno, & 181 232 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 182 tsurf_new, dflux_s, dflux_l) 233 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, delta_sal, rhoa, & 234 delta_sst) 183 235 184 236 CASE('slab') … … 200 252 AcoefH, AcoefQ, BcoefH, BcoefQ, & 201 253 AcoefU, AcoefV, BcoefU, BcoefV, & 202 ps, u1, v1, gustiness, &254 ps, u1, v1, gustiness, tsurf_in, & 203 255 radsol, snow, agesno, & 204 256 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 205 tsurf_new, dflux_s, dflux_l &257 tsurf_new, dflux_s, dflux_l, sens_prec_liq, rhoa & 206 258 #ifdef ISO 207 259 ,xtprecip_rain, xtprecip_snow, xtspechum,Roce,rlat, & … … 311 363 CALL abort_physic(modname,'version non prevue',1) 312 364 ENDIF 313 ! 314 !****************************************************************************** 365 366 if (activate_ocean_skin >= 1) then 367 if (type_ocean /= 'couple') sss(:knon) = 35. 368 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 369 u = windsp(:knon), t_ocean_1 = tsurf_new(:knon), s1 = sss(:knon), & 370 rain = precip_rain(:knon) + precip_snow(:knon), & 371 hf = - fluxsens(:knon), hlb = - fluxlat(:knon), & 372 rnl = - lwnet(:knon), & 373 tau = sqrt(flux_u1(:knon)**2 + flux_v1(:knon)**2), rhoa = rhoa, & 374 xlv = [(rlvtt, i = 1, knon)], rf = - sens_prec_liq, dtime = dtime, & 375 rns = swnet(:knon)) 376 delta_sst = t_int - tsurf_new(:knon) 377 delta_sal = s_int - sss(:knon) 378 if (activate_ocean_skin >= 2) tsurf_new(:knon) = t_int 379 end if 380 315 381 END SUBROUTINE surf_ocean 316 !**************************************************************************** **382 !**************************************************************************** 317 383 ! 318 384 END MODULE surf_ocean_mod
Note: See TracChangeset
for help on using the changeset viewer.