Changeset 3740 for LMDZ6/branches/Ocean_skin/libf/phylmd
- Timestamp:
- Jun 30, 2020, 9:14:36 PM (4 years ago)
- Location:
- LMDZ6/branches/Ocean_skin/libf/phylmd
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Ocean_skin/libf/phylmd/cpl_mod.F90
r3687 r3740 49 49 !$OMP THREADPRIVATE(cpl_snow,cpl_evap,cpl_tsol) 50 50 51 REAL, ALLOCATABLE, SAVE:: cpl_ t_int(:), cpl_s_int(:)52 !$OMP THREADPRIVATE(cpl_ t_int, cpl_s_int)51 REAL, ALLOCATABLE, SAVE:: cpl_delta_temp(:), cpl_s_int(:) 52 !$OMP THREADPRIVATE(cpl_delta_temp, cpl_s_int) 53 53 54 54 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_fder, cpl_albe, cpl_taux, cpl_tauy … … 94 94 !$OMP THREADPRIVATE(cpl_snow2D, cpl_evap2D, cpl_tsol2D) 95 95 96 REAL, ALLOCATABLE, SAVE:: cpl_ t_int_2D(:,:), cpl_s_int_2D(:,:)97 !$OMP THREADPRIVATE(cpl_ t_int_2D, cpl_s_int_2D)96 REAL, ALLOCATABLE, SAVE:: cpl_delta_temp_2D(:,:), cpl_s_int_2D(:,:) 97 !$OMP THREADPRIVATE(cpl_delta_temp_2D, cpl_s_int_2D) 98 98 99 99 REAL, ALLOCATABLE, DIMENSION(:,:,:), SAVE :: cpl_fder2D, cpl_albe2D … … 237 237 238 238 if (activate_ocean_skin == 2) then 239 ALLOCATE(cpl_ t_int(klon), cpl_s_int(klon), stat = error)239 ALLOCATE(cpl_delta_temp(klon), cpl_s_int(klon), stat = error) 240 240 sum_error = sum_error + error 241 241 end if … … 645 645 swdown, lwdown, fluxlat, fluxsens, & 646 646 precip_rain, precip_snow, evap, tsurf, fder, albsol, taux, tauy, windsp,& 647 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, t_int, s_int) 647 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, tsurf_in, & 648 sst_nff, s_int) 648 649 649 650 ! This subroutine cumulates some fields for each time-step during … … 671 672 REAL, INTENT(IN):: sens_prec_liq(:), sens_prec_sol(:) ! (knon) 672 673 REAL, DIMENSION(klon), INTENT(IN) :: lat_prec_liq, lat_prec_sol 673 real, intent(in):: t_int(:) ! (klon) ocean-air interface temperature, in K 674 real, intent(in):: tsurf_in(:) ! (klon) 675 676 REAL, intent(in):: sst_nff(:) ! (knon) 677 ! SST not used to compute surface fluxes, in K. If 678 ! activate_ocean_skin == 0 then it is not defined; if 679 ! activate_ocean_skin == 1 then it is the ocean-air interface 680 ! temperature; if activate_ocean_skin == 2 then it is the bulk SST. 681 674 682 real, intent(in):: s_int(:) ! (knon) ocean-air interface salinity, in ppt 675 683 … … 710 718 711 719 if (activate_ocean_skin == 2) then 712 cpl_ t_int(:knon) = 0.720 cpl_delta_temp(:knon) = 0. 713 721 cpl_s_int = 0. 714 722 end if … … 756 764 757 765 if (activate_ocean_skin == 2) then 758 cpl_t_int(ig) = cpl_t_int(ig) + t_int(ig) / REAL(nexca) 766 cpl_delta_temp(ig) = cpl_delta_temp(ig) & 767 + (tsurf_in(ig) - sst_nff(ig)) / REAL(nexca) 759 768 cpl_s_int(ig) = cpl_s_int(ig) + s_int(ig) / REAL(nexca) 760 769 end if … … 806 815 807 816 if (activate_ocean_skin == 2) then 808 ALLOCATE(cpl_ t_int_2D(nbp_lon, jj_nb), &817 ALLOCATE(cpl_delta_temp_2D(nbp_lon, jj_nb), & 809 818 cpl_s_int_2D(nbp_lon, jj_nb), stat = error) 810 819 sum_error = sum_error + error … … 866 875 CALL gath2cpl(cpl_atm_co2(:,cpl_index), cpl_atm_co22D(:,:), knon, knindex) 867 876 if (activate_ocean_skin == 2) then 868 CALL gath2cpl(cpl_ t_int, cpl_t_int_2D, knon, knindex)877 CALL gath2cpl(cpl_delta_temp, cpl_delta_temp_2D, knon, knindex) 869 878 CALL gath2cpl(cpl_s_int, cpl_s_int_2D, knon, knindex) 870 879 end if … … 1264 1273 1265 1274 if (activate_ocean_skin == 2) then 1266 tab_flds(:, :, ids_ t_int) = cpl_t_int_2D1275 tab_flds(:, :, ids_delta_temp) = cpl_delta_temp_2D 1267 1276 tab_flds(:, :, ids_s_int) = cpl_s_int_2D 1268 1277 end if … … 1503 1512 ENDIF 1504 1513 1505 if (activate_ocean_skin == 2) deallocate(cpl_ t_int_2d, cpl_s_int_2d)1514 if (activate_ocean_skin == 2) deallocate(cpl_delta_temp_2d, cpl_s_int_2d) 1506 1515 1507 1516 IF (sum_error /= 0) THEN -
LMDZ6/branches/Ocean_skin/libf/phylmd/oasis.F90
r3657 r3740 59 59 INTEGER, PARAMETER :: ids_qraiic = 28 60 60 INTEGER, PARAMETER :: ids_qsnoic = 29 61 INTEGER, PARAMETER :: ids_ t_int= 30, ids_s_int = 3161 INTEGER, PARAMETER :: ids_delta_temp = 30, ids_s_int = 31 62 62 63 63 INTEGER, PARAMETER :: maxsend = 31 ! Maximum number of fields to send … … 190 190 191 191 if (activate_ocean_skin == 2) then 192 infosend(ids_ t_int)%action = .TRUE.193 infosend(ids_ t_int)%name = 'COSSTSKN'192 infosend(ids_delta_temp)%action = .TRUE. 193 infosend(ids_delta_temp)%name = 'CODTEMP' 194 194 infosend(ids_s_int)%action = .TRUE. 195 195 infosend(ids_s_int)%name = 'COSSSSKN' -
LMDZ6/branches/Ocean_skin/libf/phylmd/ocean_cpl_mod.F90
r3687 r3740 55 55 radsol, snow, agesno, & 56 56 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 57 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa )57 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa, sst_nff) 58 58 59 59 ! … … 91 91 REAL, DIMENSION(klon), INTENT(IN) :: ps 92 92 REAL, DIMENSION(klon), INTENT(IN) :: u1, v1, gustiness 93 REAL, DIMENSION(klon), INTENT(IN) :: tsurf_in93 REAL, INTENT(IN) :: tsurf_in(:) ! (klon) 94 94 real, intent(in):: s_int(:) ! (knon) ocean-air interface salinity, in ppt 95 95 real, intent(in):: rhoa(:) ! (knon) density of moist air (kg / m3) 96 97 REAL, intent(in):: sst_nff(:) ! (knon) 98 ! SST not used to compute surface fluxes, in K. If 99 ! activate_ocean_skin == 0 then it is not defined; if 100 ! activate_ocean_skin == 1 then it is the ocean-air interface 101 ! temperature; if activate_ocean_skin == 2 then it is the bulk SST. 96 102 97 103 ! In/Output arguments … … 211 217 fluxsens, precip_rain, precip_snow, evap, tsurf_new, fder_new, alb1, & 212 218 flux_u1, flux_v1, windsp, sens_prec_liq, sens_prec_sol, lat_prec_liq, & 213 lat_prec_sol, tsurf_in, s _int)219 lat_prec_sol, tsurf_in, sst_nff, s_int) 214 220 215 221 END SUBROUTINE ocean_cpl_noice -
LMDZ6/branches/Ocean_skin/libf/phylmd/pbl_surface_mod.F90
r3720 r3740 292 292 USE print_control_mod, ONLY : prt_level,lunout 293 293 USE ioipsl_getin_p_mod, ONLY : getin_p 294 use phys_state_var_mod, only: s_int, ds_ns, dt_ns 295 use phys_output_var_mod, only: sst_nff,dter, dser, tkt, tks, taur, sss294 use phys_state_var_mod, only: s_int, ds_ns, dt_ns, sst_nff 295 use phys_output_var_mod, only: dter, dser, tkt, tks, taur, sss 296 296 #ifdef CPP_XIOS 297 297 USE wxios, ONLY: missing_val … … 1429 1429 1430 1430 if (nsrf == is_oce .and. activate_ocean_skin >= 1) then 1431 if (activate_ocean_skin == 2 .and. type_ocean == "couple") & 1432 ys_int(:knon) = s_int(ni(:knon)) 1431 if (activate_ocean_skin == 2 .and. type_ocean == "couple") then 1432 ys_int(:knon) = s_int(ni(:knon)) 1433 ysst_nff(:knon) = sst_nff(ni(:knon)) 1434 end if 1435 1433 1436 yds_ns(:knon) = ds_ns(ni(:knon)) 1434 1437 ydt_ns(:knon) = dt_ns(ni(:knon)) … … 3194 3197 3195 3198 USE indice_sol_mod 3196 use phys_state_var_mod, only: s_int, ds_ns, dt_ns 3199 use phys_state_var_mod, only: s_int, ds_ns, dt_ns, sst_nff 3197 3200 use config_ocean_skin_m, only: activate_ocean_skin 3198 3201 … … 3284 3287 if (activate_ocean_skin >= 1) then 3285 3288 if (activate_ocean_skin == 2 & 3286 .and. type_ocean == "couple") s_int(i) = 35. 3289 .and. type_ocean == "couple") then 3290 s_int(i) = 35. 3291 sst_nff(i) = tsurf(i,nsrf) 3292 end if 3293 3287 3294 ds_ns(i) = 0. 3288 3295 dt_ns(i) = 0. -
LMDZ6/branches/Ocean_skin/libf/phylmd/phyetat0.F90
r3628 r3740 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, s_int, ds_ns, dt_ns 21 ale_wake, ale_bl_stat, s_int, ds_ns, dt_ns, sst_nff 22 22 !FC 23 23 USE geometry_mod, ONLY : longitude_deg, latitude_deg … … 541 541 542 542 if (activate_ocean_skin >= 1) then 543 if (activate_ocean_skin == 2 .and. type_ocean == 'couple') found & 544 = phyetat0_get(1, s_int, "S_int", "salinity at air-ocean interface", & 545 35.) 543 if (activate_ocean_skin == 2 .and. type_ocean == 'couple') then 544 found = phyetat0_get(1, s_int, "S_int", & 545 "salinity at air-ocean interface", 35.) 546 found = phyetat0_get(1, sst_nff, "T1", "bulk SST of coupled ocean", 0.) 547 if (.not. found) sst_nff = ftsol(:,is_oce) 548 end if 549 546 550 found = phyetat0_get(1, ds_ns, "dS_ns", "delta salinity near surface", 0.) 547 551 found = phyetat0_get(1, dt_ns, "dT_ns", "delta temperature near surface", & … … 552 556 ds_ns = missing_val 553 557 dt_ns = missing_val 558 sst_nff = missing_val 554 559 end where 555 560 end if -
LMDZ6/branches/Ocean_skin/libf/phylmd/phyredem.F90
r3628 r3740 27 27 ale_wake, ale_bl_stat, & 28 28 du_gwd_rando, du_gwd_front, u10m, v10m, & 29 treedrg, s_int, ds_ns, dt_ns 29 treedrg, s_int, ds_ns, dt_ns, sst_nff 30 30 USE geometry_mod, ONLY : longitude_deg, latitude_deg 31 31 USE iostart, ONLY: open_restartphy, close_restartphy, enddef_restartphy, put_field, put_var … … 342 342 343 343 if (activate_ocean_skin >= 1) then 344 if (activate_ocean_skin == 2 .and. type_ocean == 'couple') & 345 CALL put_field(pass, "S_int", "salinity at air-ocean interface", & 346 s_int) 344 if (activate_ocean_skin == 2 .and. type_ocean == 'couple') then 345 CALL put_field(pass, "S_int", "salinity at air-ocean interface", & 346 s_int) 347 CALL put_field(pass, "T1", "bulk SST of coupled ocean", sst_nff) 348 end if 349 347 350 CALL put_field(pass, "dS_ns", "delta salinity near surface", ds_ns) 348 351 CALL put_field(pass, "dT_ns", "delta temperature near surface", dT_ns) -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_var_mod.F90
r3720 r3740 135 135 ! Ocean-atmosphere interface, subskin ocean and near-surface ocean: 136 136 137 REAL, ALLOCATABLE, SAVE:: sst_nff(:)138 ! SST not used to compute surface fluxes, in K. If139 ! activate_ocean_skin == 0 then it is not allocated; if140 ! activate_ocean_skin == 1 then it is the ocean-air interface141 ! temperature; if activate_ocean_skin == 2 then it is the bulk SST.142 143 137 REAL, ALLOCATABLE, SAVE:: dter(:) 144 138 ! Temperature variation in the diffusive microlayer, that is … … 161 155 ! bulk salinity of the surface layer of the ocean, in ppt 162 156 163 !$OMP THREADPRIVATE( sst_nff,dter, dser, tkt, tks, taur, sss)157 !$OMP THREADPRIVATE(dter, dser, tkt, tks, taur, sss) 164 158 165 159 CONTAINS … … 222 216 IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon)) 223 217 224 if (activate_ocean_skin >= 1) allocate( sst_nff(klon), dter(klon), &225 dser(klon), tkt(klon),tks(klon), taur(klon), sss(klon))218 if (activate_ocean_skin >= 1) allocate(dter(klon), dser(klon), tkt(klon), & 219 tks(klon), taur(klon), sss(klon)) 226 220 227 221 END SUBROUTINE phys_output_var_init -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_write_mod.F90
r3720 r3740 249 249 ulevSTD, vlevSTD, wlevSTD, philevSTD, qlevSTD, tlevSTD, & 250 250 rhlevSTD, O3STD, O3daySTD, uvSTD, vqSTD, vTSTD, wqSTD, vphiSTD, & 251 wTSTD, u2STD, v2STD, T2STD, missing_val_nf90, s_int, ds_ns, dt_ns 251 wTSTD, u2STD, v2STD, T2STD, missing_val_nf90, s_int, ds_ns, dt_ns, & 252 sst_nff 252 253 253 254 USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, & … … 360 361 alt_tropo, & 361 362 !Ionela 362 ok_4xCO2atm, sst_nff,dter, dser, tkt, tks, taur, sss363 ok_4xCO2atm, dter, dser, tkt, tks, taur, sss 363 364 364 365 USE ocean_slab_mod, ONLY: nslay, tslab, slab_bilg, tice, seaice, & -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_state_var_mod.F90
r3628 r3740 444 444 ! minus foundation temperature. (Can be negative.) In K. 445 445 446 !$OMP THREADPRIVATE(s_int, ds_ns, dt_ns) 446 REAL, ALLOCATABLE, SAVE:: sst_nff(:) 447 ! SST not used to compute surface fluxes, in K. If 448 ! activate_ocean_skin == 0 then it is not allocated; if 449 ! activate_ocean_skin == 1 then it is the ocean-air interface 450 ! temperature; if activate_ocean_skin == 2 then it is the bulk SST. 451 452 !$OMP THREADPRIVATE(s_int, ds_ns, dt_ns, sst_nff) 447 453 448 454 CONTAINS … … 653 659 ENDIF 654 660 if (activate_ocean_skin >= 1) ALLOCATE(s_int(klon), ds_ns(klon), & 655 dt_ns(klon) )661 dt_ns(klon), sst_nff(klon)) 656 662 657 663 END SUBROUTINE phys_state_var_init … … 791 797 !!! fin nrlmd le 10/04/2012 792 798 793 if (activate_ocean_skin >= 1) deALLOCATE(s_int, ds_ns, dt_ns )799 if (activate_ocean_skin >= 1) deALLOCATE(s_int, ds_ns, dt_ns, sst_nff) 794 800 795 801 is_initialized=.FALSE. -
LMDZ6/branches/Ocean_skin/libf/phylmd/surf_ocean_mod.F90
r3720 r3740 88 88 ! minus foundation temperature. (Can be negative.) In K. 89 89 90 REAL, intent(inout):: sst_nff(:) ! (knon) 91 ! SST not used to compute surface fluxes, in K. If 92 ! activate_ocean_skin == 0 then it is not defined; if 93 ! activate_ocean_skin == 1 then it is the ocean-air interface 94 ! temperature; if activate_ocean_skin == 2 then it is the bulk SST. 95 90 96 ! Output variables 91 97 !****************************************************************************** … … 103 109 REAL, DIMENSION(klon), INTENT(OUT) :: flux_u1, flux_v1 104 110 105 REAL, intent(out):: sst_nff(:) ! (knon)106 ! SST not used to compute surface fluxes, in K. If107 ! activate_ocean_skin == 0 then it is not defined; if108 ! activate_ocean_skin == 1 then it is the ocean-air interface109 ! temperature; if activate_ocean_skin == 2 then it is the bulk SST.110 111 111 REAL, intent(out):: dter(:) ! (knon) 112 112 ! Temperature variation in the diffusive microlayer, that is … … 190 190 radsol, snow, agesno, & 191 191 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 192 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa) 192 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, s_int, rhoa, & 193 sst_nff) 193 194 194 195 CASE('slab')
Note: See TracChangeset
for help on using the changeset viewer.