Changeset 3429 for LMDZ6/branches/Ocean_skin/libf
- Timestamp:
- Jan 2, 2019, 7:44:20 PM (6 years ago)
- Location:
- LMDZ6/branches/Ocean_skin/libf/phylmd
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Ocean_skin/libf/phylmd/YOMCST.h
r3394 r3429 21 21 ! A1.4 Thermodynamic gas phase 22 22 REAL R,RMD,RMO3,RMCO2,RMC,RMV,RD,RV,RCPD,RCPV,RCVD,RCVV 23 REAL RKAPPA,RETV 23 REAL RKAPPA,RETV, eps_w 24 24 ! A1.5,6 Thermodynamic liquid,solid phases 25 25 REAL RCW,RCS … … 36 36 & ,RSIGMA & 37 37 & ,R ,RMD ,RMO3 ,RMCO2, RMC, RMV ,RD ,RV ,RCPD & 38 & ,RCPV ,RCVD ,RCVV ,RKAPPA,RETV 38 & ,RCPV ,RCVD ,RCVV ,RKAPPA,RETV, eps_w & 39 39 & ,RCW ,RCS & 40 40 & ,RLVTT ,RLSTT ,RLMLT ,RTT ,RATM & -
LMDZ6/branches/Ocean_skin/libf/phylmd/conf_phys_m.F90
r3420 r3429 29 29 USE mod_grid_phy_lmdz, ONLY: klon_glo 30 30 USE print_control_mod, ONLY: lunout 31 use config_ocean_skin_m, only: config_ocean_skin 31 32 32 33 INCLUDE "conema3.h" … … 2170 2171 CALL getin('level_coupling_esm',level_coupling_esm_omp) 2171 2172 ! << PC 2173 2174 call config_ocean_skin 2172 2175 2173 2176 !$OMP END MASTER -
LMDZ6/branches/Ocean_skin/libf/phylmd/pbl_surface_mod.F90
r3402 r3429 290 290 USE print_control_mod, ONLY : prt_level,lunout 291 291 USE ioipsl_getin_p_mod, ONLY : getin_p 292 use phys_state_var_mod, only: ds_ns, dt_ns 293 use phys_output_var_mod, only: t_int, s_int, dter, dser, tkt, tks, rf, taur 294 use netcdf, only: nf90_fill_real 292 295 293 296 IMPLICIT NONE … … 821 824 ! Martin 822 825 826 real, DIMENSION(klon):: yt_int, ys_int, yds_ns, ydt_ns, ydter, ydser, & 827 ytkt, ytks, yrf, ytaur 828 ! compression of t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, rf, 829 ! taur on ocean points 830 823 831 !**************************************************************************************** 824 832 ! End of declarations … … 954 962 !!! jyg le 10/02/2012 955 963 rh2m_x(:) = 0. ; qsat2m_x(:) = 0. ; rh2m_w(:) = 0. ; qsat2m_w(:) = 0. 956 !!! 964 965 t_int = nf90_fill_real 966 s_int = nf90_fill_real 967 dter = nf90_fill_real 968 dser = nf90_fill_real 969 tkt = nf90_fill_real 970 tks = nf90_fill_real 971 rf = nf90_fill_real 972 taur = nf90_fill_real 957 973 958 974 ! 2b) Initialization of all local variables that will be compressed later … … 1414 1430 ENDDO 1415 1431 ENDIF 1432 1433 if (nsrf == is_oce) then 1434 yds_ns(:knon) = ds_ns(ni(:knon)) 1435 ydt_ns(:knon) = dt_ns(ni(:knon)) 1436 end if 1416 1437 1417 1438 !**************************************************************************************** … … 1934 1955 yz0m, yz0h, SFRWL,yalb_dir_new, yalb_dif_new, yevap, yfluxsens,yfluxlat,& 1935 1956 ytsurf_new, y_dflux_t, y_dflux_q, slab_wfbils, & 1936 y_flux_u1, y_flux_v1) 1957 y_flux_u1, y_flux_v1, yt_int(:knon), ys_int(:knon), & 1958 yds_ns(:knon), ydt_ns(:knon), ydter(:knon), ydser(:knon), & 1959 ytkt(:knon), ytks(:knon), yrf(:knon), ytaur(:knon)) 1937 1960 IF (prt_level >=10) THEN 1938 1961 print *,'arg de surf_ocean: ycdragh ',ycdragh … … 2538 2561 ENDIF 2539 2562 2563 if (nsrf == is_oce) then 2564 dt_ns = nf90_fill_real 2565 ds_ns = nf90_fill_real 2566 ds_ns(ni(:knon)) = yds_ns(:knon) 2567 dt_ns(ni(:knon)) = ydt_ns(:knon) 2568 2569 t_int(ni(:knon)) = yt_int(:knon) 2570 s_int(ni(:knon)) = ys_int(:knon) 2571 dter(ni(:knon)) = ydter(:knon) 2572 dser(ni(:knon)) = ydser(:knon) 2573 tkt(ni(:knon)) = ytkt(:knon) 2574 tks(ni(:knon)) = ytks(:knon) 2575 rf(ni(:knon)) = yrf(:knon) 2576 taur(ni(:knon)) = ytaur(:knon) 2577 end if 2578 2540 2579 !**************************************************************************************** 2541 2580 ! 14) Calculate the temperature and relative humidity at 2m and the wind at 10m … … 3141 3180 3142 3181 !albedo SB >>> 3143 SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, &3144 evap, z0m, z0h, agesno, &3145 tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke)3146 !albedo SB <<<3182 SUBROUTINE pbl_surface_newfrac(itime, pctsrf_new, pctsrf_old, & 3183 evap, z0m, z0h, agesno, & 3184 tsurf,alb_dir,alb_dif, ustar, u10m, v10m, tke) 3185 !albedo SB <<< 3147 3186 ! Give default values where new fraction has appread 3148 3187 3149 3188 USE indice_sol_mod 3189 use phys_state_var_mod, only: ds_ns, dt_ns 3150 3190 3151 3191 INCLUDE "dimsoil.h" … … 3234 3274 alb_dif(i,k,nsrf) = 0.06 3235 3275 ENDDO 3276 ds_ns(i) = 0. 3277 dt_ns(i) = 0. 3236 3278 ELSE IF (nsrf.EQ.is_sic) THEN 3237 3279 tsurf(i,nsrf) = 271.35 -
LMDZ6/branches/Ocean_skin/libf/phylmd/phyetat0.F90
r3422 r3429 19 19 wake_s, wake_dens, zgam, zmax0, zmea, zpic, zsig, & 20 20 zstd, zthe, zval, ale_bl, ale_bl_trig, alp_bl, u10m, v10m, treedrg, & 21 ale_wake, ale_bl_stat 21 ale_wake, ale_bl_stat, ds_ns, dt_ns 22 22 !FC 23 23 USE geometry_mod, ONLY : longitude_deg, latitude_deg … … 29 29 USE ocean_slab_mod, ONLY: nslay, tslab, seaice, tice, ocean_slab_init 30 30 USE time_phylmdz_mod, ONLY: init_iteration, pdtphys, itau_phy 31 use netcdf, only: nf90_fill_real 31 32 32 33 IMPLICIT none … … 35 36 ! Objet: Lecture de l'etat initial pour la physique 36 37 !====================================================================== 37 include "netcdf.inc"38 38 include "dimsoil.h" 39 39 include "clesphys.h" … … 529 529 CALL fonte_neige_init(run_off_lic_0) 530 530 531 found = phyetat0_get(1, ds_ns, "ds_ns", "delta salinity near surface", 0.) 532 found = phyetat0_get(1, dt_ns, "dT_ns", "delta temperature near surface", 0.) 533 534 where (pctsrf(:, is_oce) == 0.) 535 ds_ns = nf90_fill_real 536 dt_ns = nf90_fill_real 537 end where 538 531 539 END SUBROUTINE phyetat0 532 540 -
LMDZ6/branches/Ocean_skin/libf/phylmd/phyredem.F90
r3317 r3429 27 27 ale_wake, ale_bl_stat, & 28 28 du_gwd_rando, du_gwd_front, u10m, v10m, & 29 treedrg 29 treedrg, ds_ns, dt_ns 30 30 USE geometry_mod, ONLY : longitude_deg, latitude_deg 31 31 USE iostart, ONLY: open_restartphy, close_restartphy, put_field, put_var … … 337 337 "tendency on zonal wind due to acama gravity waves", du_gwd_front) 338 338 339 CALL put_field("ds_ns", "delta salinity near surface", ds_ns) 340 CALL put_field("dT_ns", "delta temperature near surface", dT_ns) 341 339 342 CALL close_restartphy 340 343 !$OMP BARRIER -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_ctrlout_mod.F90
r3332 r3429 1913 1913 #endif 1914 1914 1915 type(ctrl_out), save:: o_t_int & 1916 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'T_int', & 1917 "ocean-air interface temperature", "K", '') 1918 1919 type(ctrl_out), save:: o_s_int & 1920 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'S_int', & 1921 "ocean-air interface salinity", "ppt", '') 1922 1923 type(ctrl_out), save:: o_ds_ns & 1924 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'ds_ns', & 1925 "delta salinity near surface", "ppt", '') 1926 1927 type(ctrl_out), save:: o_dt_ns & 1928 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'dT_ns', & 1929 "delta temperature near surface", "K", '') 1930 1931 type(ctrl_out), save:: o_dter & 1932 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'dTer', & 1933 "temperature variation in the diffusive microlayer", "K", '') 1934 1935 type(ctrl_out), save:: o_dser & 1936 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'dser', & 1937 "salinity variation in the diffusive microlayer", "ppt", '') 1938 1939 type(ctrl_out), save:: o_tkt & 1940 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'tkt', & 1941 "thickness of thermal microlayer", "m", '') 1942 1943 type(ctrl_out), save:: o_tks & 1944 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'tks', & 1945 "thickness os salinity microlayer", "m", '') 1946 1947 type(ctrl_out), save:: o_rf & 1948 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'rf', & 1949 "sensible heat flux at the surface due to rainfall", "W m-2", '') 1950 1951 type(ctrl_out), save:: o_taur & 1952 = ctrl_out([1, 10, 10, 1, 10, 10, 11, 11, 11, 11], 'taur', & 1953 "momentum flux due to rain", "Pa", '') 1954 1915 1955 END MODULE phys_output_ctrlout_mod -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_var_mod.F90
r3149 r3429 133 133 !$OMP THREADPRIVATE(sens_prec_liq_o, sens_prec_sol_o,lat_prec_liq_o,lat_prec_sol_o) 134 134 135 ! Ocean-atmosphere interface, subskin ocean and near-surface ocean: 136 137 REAL, ALLOCATABLE, SAVE:: t_int(:) ! interface temperature, in K 138 REAL, ALLOCATABLE, SAVE:: s_int(:) ! interface salinity, in ppt 139 140 REAL, ALLOCATABLE, SAVE:: dter(:) 141 ! Temperature variation in the diffusive microlayer, that is 142 ! subskin temperature minus ocean-air interface temperature. In 143 ! K. 144 145 REAL, SAVE, ALLOCATABLE:: dser(:) 146 ! Temperature variation in the diffusive microlayer, that is 147 ! subskin temperature minus ocean-air interface temperature. In K. 148 149 REAL, SAVE, ALLOCATABLE:: tkt(:) 150 ! épaisseur (m) de la couche de diffusion thermique (microlayer) 151 ! cool skin thickness 152 153 REAL, SAVE, ALLOCATABLE:: tks(:) 154 ! épaisseur (m) de la couche de diffusion de masse (microlayer) 155 156 REAL, SAVE, ALLOCATABLE:: rf(:) 157 ! sensible heat flux at the surface due to rainfall, in W m-2 158 159 REAL, SAVE, ALLOCATABLE:: taur(:) 160 ! momentum flux due to rain, in Pa 161 162 !$OMP THREADPRIVATE(t_int, s_int, dter, dser, tkt, tks, rf, taur) 163 135 164 CONTAINS 136 165 … … 191 220 IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon)) 192 221 222 allocate(t_int(klon), s_int(klon), dter(klon), dser(klon), tkt(klon), & 223 tks(klon), rf(klon), taur(klon)) 224 193 225 END SUBROUTINE phys_output_var_init 194 226 -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_write_mod.F90
r3381 r3429 196 196 ! Tropopause 197 197 o_p_tropopause, o_z_tropopause, o_t_tropopause, & 198 o_col_O3_strato, o_col_O3_tropo ! Added ThL 199 198 o_col_O3_strato, o_col_O3_tropo, & ! Added ThL 199 o_t_int, o_s_int, o_ds_ns, o_dt_ns, o_dter, o_dser, o_tkt, o_tks, & 200 o_rf, o_taur 200 201 201 202 #ifdef CPP_StratAer … … 240 241 ulevSTD, vlevSTD, wlevSTD, philevSTD, qlevSTD, tlevSTD, & 241 242 rhlevSTD, O3STD, O3daySTD, uvSTD, vqSTD, vTSTD, wqSTD, & 242 vphiSTD, wTSTD, u2STD, v2STD, T2STD, missing_val_nf90 243 vphiSTD, wTSTD, u2STD, v2STD, T2STD, missing_val_nf90, ds_ns, dt_ns 243 244 244 245 USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, & … … 348 349 alt_tropo, & 349 350 !Ionela 350 ok_4xCO2atm 351 ok_4xCO2atm, t_int, s_int, dter, dser, tkt, tks, rf, taur 351 352 352 353 USE ocean_slab_mod, ONLY: nslay, tslab, slab_bilg, tice, seaice, & … … 2110 2111 ENDIF !(iflag_phytrac==1) 2111 2112 2113 CALL histwrite_phy(o_t_int, t_int) 2114 CALL histwrite_phy(o_s_int, s_int) 2115 CALL histwrite_phy(o_ds_ns, ds_ns) 2116 CALL histwrite_phy(o_dt_ns, dt_ns) 2117 CALL histwrite_phy(o_dter, dter) 2118 CALL histwrite_phy(o_dser, dser) 2119 CALL histwrite_phy(o_tkt, tkt) 2120 CALL histwrite_phy(o_tks, tks) 2121 CALL histwrite_phy(o_rf, rf) 2122 CALL histwrite_phy(o_taur, taur) 2112 2123 2113 2124 IF (.NOT.vars_defined) THEN -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_state_var_mod.F90
r3208 r3429 417 417 ! tendencies on wind due to gravity waves 418 418 419 CONTAINS 419 ! Ocean-atmosphere interface, subskin ocean and near-surface ocean: 420 421 REAL, ALLOCATABLE, SAVE:: ds_ns(:) 422 ! "delta salinity near surface". Salinity variation in the 423 ! near-surface turbulent layer. That is subskin salinity minus 424 ! foundation salinity. In ppt. 425 426 REAL, ALLOCATABLE, SAVE:: dt_ns(:) 427 ! "delta temperature near surface". Temperature variation in the 428 ! near-surface turbulent layer. That is subskin temperature 429 ! minus foundation temperature. (Can be negative.) In K. 430 431 !$OMP THREADPRIVATE(ds_ns, dt_ns) 432 433 CONTAINS 420 434 421 435 !====================================================================== … … 607 621 if (.not. ok_hines .and. ok_gwd_rando) allocate(du_gwd_front(klon, klev)) 608 622 609 END SUBROUTINE phys_state_var_init 623 ALLOCATE(ds_ns(klon), dt_ns(klon)) 624 625 END SUBROUTINE phys_state_var_init 610 626 611 627 !====================================================================== -
LMDZ6/branches/Ocean_skin/libf/phylmd/suphel.F90
r3394 r3429 127 127 rcvv = rcpv - rv 128 128 rkappa = rd/rcpd 129 eps_w = rmv / rmd 129 130 retv = rv/rd - 1. 130 131 WRITE (UNIT=6, FMT='('' *** Thermodynamic, gas ***'')') -
LMDZ6/branches/Ocean_skin/libf/phylmd/surf_ocean_mod.F90
r3395 r3429 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, t_int, s_int, ds_ns, dt_ns, dter, dser, tkt, tks, rf, & 23 taur) 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 sens_heat_rain_m, only: sens_heat_rain 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 … … 73 76 REAL, DIMENSION(klon), INTENT(inOUT):: z0h 74 77 78 REAL, intent(inout):: ds_ns(:) ! (knon) 79 ! "delta salinity near surface". Salinity variation in the 80 ! near-surface turbulent layer. That is subskin salinity minus 81 ! foundation salinity. In ppt. 82 83 REAL, intent(inout):: dt_ns(:) ! (knon) 84 ! "delta temperature near surface". Temperature variation in the 85 ! near-surface turbulent layer. That is subskin temperature 86 ! minus foundation temperature. (Can be negative.) In K. 87 75 88 ! Output variables 76 89 !****************************************************************************** … … 83 96 !albedo SB <<< 84 97 REAL, DIMENSION(klon), INTENT(OUT) :: evap, fluxsens, fluxlat 85 REAL, DIMENSION(klon), INTENT(OUT) :: tsurf_new98 REAL, INTENT(OUT):: tsurf_new(klon) ! sea surface temperature, in K 86 99 REAL, DIMENSION(klon), INTENT(OUT) :: dflux_s, dflux_l 87 100 REAL, DIMENSION(klon), INTENT(OUT) :: lmt_bils 88 101 REAL, DIMENSION(klon), INTENT(OUT) :: flux_u1, flux_v1 102 103 REAL, intent(out):: t_int(:) ! (knon) interface temperature, in K 104 real, intent(out):: s_int(:) ! (knon) interface salinity, in ppt 105 106 REAL, intent(out):: dter(:) ! (knon) 107 ! Temperature variation in the diffusive microlayer, that is 108 ! subskin temperature minus ocean-air interface temperature. In 109 ! K. 110 111 REAL, intent(out):: dser(:) ! (knon) 112 ! Temperature variation in the diffusive microlayer, that is 113 ! subskin temperature minus ocean-air interface temperature. In K. 114 115 REAL, intent(out):: tkt(:) ! (knon) 116 ! épaisseur (m) de la couche de diffusion thermique (microlayer) 117 ! cool skin thickness 118 119 REAL, intent(out):: tks(:) ! (knon) 120 ! épaisseur (m) de la couche de diffusion de masse (microlayer) 121 122 REAL, intent(out):: rf(:) ! (knon) 123 ! sensible heat flux at the surface due to rainfall, in W m-2 124 125 REAL, intent(out):: taur(:) ! (knon) 126 ! momentum flux due to rain, in Pa 89 127 90 128 ! Local variables … … 97 135 REAL, DIMENSION(klon) :: cdragq ! Cdrag pour l'evaporation 98 136 CHARACTER(len=20),PARAMETER :: modname="surf_ocean" 137 real rhoa(knon) ! density of moist air (kg / m3) 138 real xlv(knon) ! chaleur latente d'évaporation (J / kg) 139 real precip_tot(knon) ! rain + snow 140 real S1(knon) ! salinity at depth_1, in ppt 99 141 100 142 ! End definition … … 268 310 CALL abort_physic(modname,'version non prevue',1) 269 311 ENDIF 270 ! 271 !****************************************************************************** 312 313 rhoa = PS(:KNON) / (Rd * temp_air(:knon) * (1. + retv * spechum(:knon))) 314 xlv = rlvtt 315 precip_tot = precip_rain(:knon) + precip_snow(:knon) 316 rf = sens_heat_rain(precip_tot, temp_air(:knon), spechum(:knon), rhoa, & 317 xlv, tsurf_new(:knon), ps(:knon)) 318 s1 = 35. 319 call bulk_flux(tkt, tks, taur, dter, dser, t_int, s_int, ds_ns, dt_ns, & 320 windsp(:knon), tsurf_new(:knon), s1, precip_tot, - fluxsens(:knon), & 321 - fluxlat(:knon), - lwnet(:knon), & 322 sqrt(flux_u1(:knon)**2 + flux_v1(:knon)**2), rhoa, xlv, rf, dtime, & 323 swnet(:knon)) 324 272 325 END SUBROUTINE surf_ocean 273 326 !******************************************************************************
Note: See TracChangeset
for help on using the changeset viewer.