Changeset 4020 for LMDZ6/branches/Ocean_skin/libf/phylmd
- Timestamp:
- Nov 26, 2021, 8:27:26 AM (3 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
r3798 r4020 49 49 !$OMP THREADPRIVATE(cpl_snow,cpl_evap,cpl_tsol) 50 50 51 REAL, ALLOCATABLE, SAVE:: cpl_delta_sst(:), cpl_delta_sal(:) 52 !$OMP THREADPRIVATE(cpl_delta_sst, cpl_delta_sal) 51 REAL, ALLOCATABLE, SAVE:: cpl_delta_sst(:), cpl_delta_sal(:), cpl_dter(:), & 52 cpl_dser(:), cpl_dt_ds(:) 53 !$OMP THREADPRIVATE(cpl_delta_sst, cpl_delta_sal, cpl_dter, cpl_dser) 54 !$OMP THREADPRIVATE(cpl_dt_ds) 53 55 54 56 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_fder, cpl_albe, cpl_taux, cpl_tauy … … 94 96 !$OMP THREADPRIVATE(cpl_snow2D, cpl_evap2D, cpl_tsol2D) 95 97 96 REAL, ALLOCATABLE, SAVE:: cpl_delta_sst_2D(:,:), cpl_delta_sal_2D(:,:) 98 REAL, ALLOCATABLE, SAVE:: cpl_delta_sst_2D(:, :), cpl_delta_sal_2D(:, :), & 99 cpl_dter_2D(:, :), cpl_dser_2D(:, :), cpl_dt_ds_2D(:, :) 97 100 !$OMP THREADPRIVATE(cpl_delta_sst_2D, cpl_delta_sal_2D) 101 !$OMP THREADPRIVATE(cpl_dter_2D, cpl_dser_2D, cpl_dt_ds_2D) 98 102 99 103 REAL, ALLOCATABLE, DIMENSION(:,:,:), SAVE :: cpl_fder2D, cpl_albe2D … … 238 242 239 243 if (activate_ocean_skin == 2) then 240 ALLOCATE(cpl_delta_sst(klon), cpl_delta_sal(klon), stat = error) 244 ALLOCATE(cpl_delta_sst(klon), cpl_delta_sal(klon), cpl_dter(klon), & 245 cpl_dser(klon), cpl_dt_ds(klon), stat = error) 241 246 sum_error = sum_error + error 242 247 end if … … 650 655 precip_rain, precip_snow, evap, tsurf, fder, albsol, taux, tauy, windsp,& 651 656 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, delta_sst, & 652 delta_sal )657 delta_sal, dTer, dSer, dt_ds) 653 658 654 659 ! This subroutine cumulates some fields for each time-step during … … 683 688 real, intent(in):: delta_sal(:) ! (knon) 684 689 ! Ocean-air interface salinity minus bulk salinity, in ppt. 690 691 REAL, intent(in):: dter(:) ! (knon) 692 ! Temperature variation in the diffusive microlayer, that is 693 ! ocean-air interface temperature minus subskin temperature. In 694 ! K. 695 696 REAL, intent(in):: dser(:) ! (knon) 697 ! Salinity variation in the diffusive microlayer, that is 698 ! ocean-air interface salinity minus subskin salinity. In ppt. 699 700 real, intent(in):: dt_ds(:) ! (knon) 701 ! (tks / tkt) * dTer, in K 685 702 686 703 ! Local variables … … 722 739 cpl_delta_sst = 0. 723 740 cpl_delta_sal = 0. 741 cpl_dter = 0. 742 cpl_dser = 0. 743 cpl_dt_ds = 0. 724 744 end if 725 745 ENDIF … … 768 788 cpl_delta_sst(ig) = cpl_delta_sst(ig) + delta_sst(ig) / REAL(nexca) 769 789 cpl_delta_sal(ig) = cpl_delta_sal(ig) + delta_sal(ig) / REAL(nexca) 790 cpl_dter(ig) = cpl_dter(ig) + dter(ig) / REAL(nexca) 791 cpl_dser(ig) = cpl_dser(ig) + dser(ig) / REAL(nexca) 792 cpl_dt_ds(ig) = cpl_dt_ds(ig) + dt_ds(ig) / REAL(nexca) 770 793 end if 771 794 ENDDO … … 817 840 if (activate_ocean_skin == 2) then 818 841 ALLOCATE(cpl_delta_sst_2D(nbp_lon, jj_nb), & 819 cpl_delta_sal_2D(nbp_lon, jj_nb), stat = error) 842 cpl_delta_sal_2D(nbp_lon, jj_nb), & 843 cpl_dter_2D(nbp_lon, jj_nb), cpl_dser_2D(nbp_lon, jj_nb), & 844 cpl_dt_ds_2D(nbp_lon, jj_nb), stat = error) 820 845 sum_error = sum_error + error 821 846 end if … … 878 903 CALL gath2cpl(cpl_delta_sst, cpl_delta_sst_2D, knon, knindex) 879 904 CALL gath2cpl(cpl_delta_sal, cpl_delta_sal_2D, knon, knindex) 905 CALL gath2cpl(cpl_dter, cpl_dter_2D, knon, knindex) 906 CALL gath2cpl(cpl_dser, cpl_dser_2D, knon, knindex) 907 CALL gath2cpl(cpl_dt_ds, cpl_dt_ds_2D, knon, knindex) 880 908 end if 881 909 ENDIF … … 1276 1304 tab_flds(:, :, ids_delta_sst) = cpl_delta_sst_2D 1277 1305 tab_flds(:, :, ids_delta_sal) = cpl_delta_sal_2D 1306 tab_flds(:, :, ids_dter) = cpl_dter_2D 1307 tab_flds(:, :, ids_dser) = cpl_dser_2D 1308 tab_flds(:, :, ids_dt_ds) = cpl_dt_ds_2D 1278 1309 end if 1279 1310 … … 1513 1544 ENDIF 1514 1545 1515 if (activate_ocean_skin == 2) deallocate(cpl_delta_sst_2d, cpl_delta_sal_2d) 1546 if (activate_ocean_skin == 2) deallocate(cpl_delta_sst_2d, & 1547 cpl_delta_sal_2d, cpl_dter_2d, cpl_dser_2d, cpl_dt_ds_2d) 1516 1548 1517 1549 IF (sum_error /= 0) THEN -
LMDZ6/branches/Ocean_skin/libf/phylmd/oasis.F90
r3767 r4020 59 59 INTEGER, PARAMETER :: ids_qraiic = 28 60 60 INTEGER, PARAMETER :: ids_qsnoic = 29 61 INTEGER, PARAMETER :: ids_delta_sst = 30, ids_delta_sal = 31 62 63 INTEGER, PARAMETER :: maxsend = 31 ! Maximum number of fields to send 61 INTEGER, PARAMETER :: ids_delta_sst = 30, ids_delta_sal = 31, ids_dter = 32, & 62 ids_dser = 33, ids_dt_ds = 34 63 64 INTEGER, PARAMETER :: maxsend = 34 ! Maximum number of fields to send 64 65 65 66 ! Id for fields received from ocean … … 194 195 infosend(ids_delta_sal)%action = .TRUE. 195 196 infosend(ids_delta_sal)%name = 'CODELSSS' 197 infosend(ids_dter)%action = .TRUE. 198 infosend(ids_dter)%name = 'CODELTER' 199 infosend(ids_dser)%action = .TRUE. 200 infosend(ids_dser)%name = 'CODELSER' 201 infosend(ids_dt_ds)%action = .TRUE. 202 infosend(ids_dt_ds)%name = 'CODTDS' 196 203 end if 197 204 -
LMDZ6/branches/Ocean_skin/libf/phylmd/ocean_cpl_mod.F90
r3767 r4020 56 56 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 57 57 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, delta_sal, rhoa, & 58 delta_sst )58 delta_sst, dTer, dSer, dt_ds) 59 59 60 60 ! … … 103 103 ! only if activate_ocean_skin >= 1. 104 104 105 REAL, intent(in):: dter(:) ! (knon) 106 ! Temperature variation in the diffusive microlayer, that is 107 ! ocean-air interface temperature minus subskin temperature. In 108 ! K. 109 110 REAL, intent(in):: dser(:) ! (knon) 111 ! Salinity variation in the diffusive microlayer, that is 112 ! ocean-air interface salinity minus subskin salinity. In ppt. 113 114 real, intent(in):: dt_ds(:) ! (knon) 115 ! (tks / tkt) * dTer, in K 116 105 117 ! In/Output arguments 106 118 !**************************************************************************************** … … 219 231 fluxsens, precip_rain, precip_snow, evap, tsurf_new, fder_new, alb1, & 220 232 flux_u1, flux_v1, windsp, sens_prec_liq, sens_prec_sol, lat_prec_liq, & 221 lat_prec_sol, delta_sst, delta_sal )233 lat_prec_sol, delta_sst, delta_sal, dTer, dSer, dt_ds) 222 234 223 235 END SUBROUTINE ocean_cpl_noice -
LMDZ6/branches/Ocean_skin/libf/phylmd/pbl_surface_mod.F90
r4013 r4020 313 313 USE print_control_mod, ONLY : prt_level,lunout 314 314 USE ioipsl_getin_p_mod, ONLY : getin_p 315 use phys_state_var_mod, only: ds_ns, dt_ns, delta_sst, delta_sal, zsig, zmea 316 use phys_output_var_mod, only: dter, dser, tkt, tks, taur, sss 315 use phys_state_var_mod, only: ds_ns, dt_ns, delta_sst, delta_sal, dter, & 316 dser, dt_ds, zsig, zmea 317 use phys_output_var_mod, only: tkt, tks, taur, sss 317 318 #ifdef CPP_XIOS 318 319 USE wxios, ONLY: missing_val … … 875 876 ! Martin 876 877 877 REAL, DIMENSION(klon):: ydelta_sst, ydelta_sal, yds_ns, ydt_ns, ydter, ydser,&878 y tkt, ytks, ytaur, ysss879 ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, tkt, tks,880 ! taur, sss on ocean points878 REAL, DIMENSION(klon):: ydelta_sst, ydelta_sal, yds_ns, ydt_ns, ydter, & 879 ydser, ydt_ds, ytkt, ytks, ytaur, ysss 880 ! compression of delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, 881 ! dt_ds, tkt, tks, taur, sss on ocean points 881 882 882 883 !**************************************************************************************** … … 1533 1534 ydelta_sal(:knon) = delta_sal(ni(:knon)) 1534 1535 ydelta_sst(:knon) = delta_sst(ni(:knon)) 1536 ydter(:knon) = dter(ni(:knon)) 1537 ydser(:knon) = dser(ni(:knon)) 1538 ydt_ds(:knon) = dt_ds(ni(:knon)) 1535 1539 end if 1536 1540 … … 2108 2112 y_flux_u1, y_flux_v1, ydelta_sst(:knon), ydelta_sal(:knon), & 2109 2113 yds_ns(:knon), ydt_ns(:knon), ydter(:knon), ydser(:knon), & 2110 y tkt(:knon), ytks(:knon), ytaur(:knon), ysss)2114 ydt_ds(:knon), ytkt(:knon), ytks(:knon), ytaur(:knon), ysss) 2111 2115 IF (prt_level >=10) THEN 2112 2116 print *,'arg de surf_ocean: ycdragh ',ycdragh … … 2855 2859 taur(ni(:knon)) = ytaur(:knon) 2856 2860 sss(ni(:knon)) = ysss(:knon) 2861 2862 if (activate_ocean_skin == 2 .and. type_ocean == "couple") then 2863 dt_ds = missing_val 2864 dt_ds(ni(:knon)) = ydt_ds(:knon) 2865 end if 2857 2866 end if 2858 2867 … … 3522 3531 3523 3532 USE indice_sol_mod 3524 use phys_state_var_mod, only: delta_sal, ds_ns, dt_ns, delta_sst 3533 use phys_state_var_mod, only: delta_sal, ds_ns, dt_ns, delta_sst, dter, & 3534 dser, dt_ds 3525 3535 use config_ocean_skin_m, only: activate_ocean_skin 3526 3536 … … 3615 3625 delta_sal(i) = 0. 3616 3626 delta_sst(i) = 0. 3627 dter(i) = 0. 3628 dser(i) = 0. 3629 dt_ds(i) = 0. 3617 3630 end if 3618 3631 -
LMDZ6/branches/Ocean_skin/libf/phylmd/phyetat0.F90
r4013 r4020 19 19 wake_s, wake_dens, awake_dens, cv_gen, 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, ds_ns, dt_ns, delta_sst, delta_sal, ratqs_inter 21 ale_wake, ale_bl_stat, ds_ns, dt_ns, delta_sst, delta_sal, dter, dser, & 22 dt_ds, ratqs_inter 22 23 !FC 23 24 USE geometry_mod, ONLY : longitude_deg, latitude_deg … … 537 538 found = phyetat0_get(1, delta_sst, "delta_SST", & 538 539 "ocean-air interface temperature minus bulk SST", 0.) 540 found = phyetat0_get(1, dter, "dter", & 541 "ocean-air interface temperature minus subskin temperature", 0.) 542 found = phyetat0_get(1, dser, "dser", & 543 "ocean-air interface salinity minus subskin salinity", 0.) 544 found = phyetat0_get(1, dt_ds, "dt_ds", "(tks / tkt) * dTer", 0.) 545 546 where (pctsrf(:, is_oce) == 0.) 547 dter = missing_val 548 dser = missing_val 549 dt_ds = missing_val 550 end where 539 551 end if 540 552 -
LMDZ6/branches/Ocean_skin/libf/phylmd/phyredem.F90
r4013 r4020 30 30 du_gwd_rando, du_gwd_front, u10m, v10m, & 31 31 treedrg, solswfdiff, delta_sal, ds_ns, dt_ns, & 32 delta_sst, ratqs_inter 32 delta_sst, ratqs_inter, dter, dser, dt_ds 33 33 34 34 USE geometry_mod, ONLY : longitude_deg, latitude_deg … … 372 372 CALL put_field(pass, "delta_SST", & 373 373 "ocean-air interface temperature minus bulk SST", delta_sst) 374 CALL put_field(pass, "dter", & 375 "ocean-air interface temperature minus subskin temperature", & 376 dter) 377 CALL put_field(pass, "dser", & 378 "ocean-air interface salinity minus subskin salinity", dser) 379 CALL put_field(pass, "dt_ds", & 380 "(tks / tkt) * dTer", dt_ds) 374 381 end if 375 382 -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_var_mod.F90
r4013 r4020 134 134 ! Ocean-atmosphere interface, subskin ocean and near-surface ocean: 135 135 136 REAL, ALLOCATABLE, SAVE:: dter(:)137 ! Temperature variation in the diffusive microlayer, that is138 ! ocean-air interface temperature minus subskin temperature. In K.139 140 REAL, SAVE, ALLOCATABLE:: dser(:)141 ! Temperature variation in the diffusive microlayer, that is142 ! subskin temperature minus ocean-air interface temperature. In K.143 144 136 REAL, SAVE, ALLOCATABLE:: tkt(:) 145 137 ! épaisseur (m) de la couche de diffusion thermique (microlayer) … … 154 146 ! bulk salinity of the surface layer of the ocean, in ppt 155 147 156 !$OMP THREADPRIVATE( dter, dser,tkt, tks, taur, sss)148 !$OMP THREADPRIVATE(tkt, tks, taur, sss) 157 149 158 150 CONTAINS … … 215 207 IF (ok_gwd_rando) allocate(zustr_gwd_rando(klon), zvstr_gwd_rando(klon)) 216 208 217 if (activate_ocean_skin >= 1) allocate( dter(klon), dser(klon), tkt(klon), &218 tks(klon), taur(klon),sss(klon))209 if (activate_ocean_skin >= 1) allocate(tkt(klon), tks(klon), taur(klon), & 210 sss(klon)) 219 211 220 212 END SUBROUTINE phys_output_var_init -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_output_write_mod.F90
r4013 r4020 253 253 rhlevSTD, O3STD, O3daySTD, uvSTD, vqSTD, vTSTD, wqSTD, vphiSTD, & 254 254 wTSTD, u2STD, v2STD, T2STD, missing_val_nf90, delta_sal, ds_ns, & 255 dt_ns, delta_sst 255 dt_ns, delta_sst, dter, dser 256 256 257 257 USE phys_local_var_mod, ONLY: zxfluxlat, slp, ptstar, pt0, zxtsol, zt2m, & … … 360 360 alt_tropo, & 361 361 !Ionela 362 ok_4xCO2atm, dter, dser,tkt, tks, taur, sss362 ok_4xCO2atm, tkt, tks, taur, sss 363 363 364 364 USE ocean_slab_mod, ONLY: nslay, tslab, slab_bilg, tice, seaice, & -
LMDZ6/branches/Ocean_skin/libf/phylmd/phys_state_var_mod.F90
r4013 r4020 455 455 ! Ocean-air interface salinity minus bulk salinity, in ppt 456 456 457 !$OMP THREADPRIVATE(delta_sal, ds_ns, dt_ns, delta_sst) 457 REAL, ALLOCATABLE, SAVE:: dter(:) ! (klon) 458 ! Temperature variation in the diffusive microlayer, that is 459 ! ocean-air interface temperature minus subskin temperature. In K. 460 461 REAL, SAVE, ALLOCATABLE:: dser(:) ! (klon) 462 ! Salinity variation in the diffusive microlayer, that is 463 ! ocean-air interface salinity minus subskin salinity. In ppt. 464 465 real, SAVE, ALLOCATABLE:: dt_ds(:) ! (klon) 466 ! (tks / tkt) * dTer, in K 467 468 !$OMP THREADPRIVATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser, dt_ds) 458 469 459 470 CONTAINS … … 466 477 USE indice_sol_mod 467 478 use config_ocean_skin_m, only: activate_ocean_skin 479 use surface_data, only: type_ocean 468 480 IMPLICIT NONE 469 481 … … 666 678 du_gwd_front(:,:) = 0 !ym missing init 667 679 ENDIF 668 if (activate_ocean_skin >= 1) ALLOCATE(delta_sal(klon), ds_ns(klon), & 669 dt_ns(klon), delta_sst(klon)) 680 681 if (activate_ocean_skin >= 1) then 682 ALLOCATE(delta_sal(klon), ds_ns(klon), dt_ns(klon), delta_sst(klon), & 683 dter(klon), dser(klon)) 684 if (activate_ocean_skin == 2 .and. type_ocean == "couple") & 685 allocate(dt_ds(klon)) 686 end if 670 687 671 688 END SUBROUTINE phys_state_var_init … … 677 694 USE indice_sol_mod 678 695 use config_ocean_skin_m, only: activate_ocean_skin 696 use surface_data, only: type_ocean 679 697 IMPLICIT NONE 680 698 include "clesphys.h" … … 805 823 DEALLOCATE(ratqs_inter) 806 824 807 if (activate_ocean_skin >= 1) deALLOCATE(delta_sal, ds_ns, dt_ns, & 808 delta_sst) 825 if (activate_ocean_skin >= 1) then 826 deALLOCATE(delta_sal, ds_ns, dt_ns, delta_sst, dter, dser) 827 if (activate_ocean_skin == 2 .and. type_ocean == "couple") & 828 deALLOCATE(dt_ds) 829 end if 809 830 810 831 is_initialized=.FALSE. -
LMDZ6/branches/Ocean_skin/libf/phylmd/surf_ocean_mod.F90
r4013 r4020 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, delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, tkt, tks,&23 taur, sss)22 flux_u1, flux_v1, delta_sst, delta_sal, ds_ns, dt_ns, dter, dser, & 23 dt_ds, tkt, tks, taur, sss) 24 24 25 25 use albedo, only: alboc, alboc_cd … … 94 94 ! minus foundation temperature. (Can be negative.) In K. 95 95 96 REAL, intent(inout):: dter(:) ! (knon) 97 ! Temperature variation in the diffusive microlayer, that is 98 ! ocean-air interface temperature minus subskin temperature. In 99 ! K. 100 101 REAL, intent(inout):: dser(:) ! (knon) 102 ! Salinity variation in the diffusive microlayer, that is 103 ! ocean-air interface salinity minus subskin salinity. In ppt. 104 105 real, intent(inout):: dt_ds(:) ! (knon) 106 ! (tks / tkt) * dTer, in K 107 96 108 ! Output variables 97 109 !************************************************************************** … … 109 121 REAL, DIMENSION(klon), INTENT(OUT) :: flux_u1, flux_v1 110 122 111 REAL, intent(out):: dter(:) ! (knon)112 ! Temperature variation in the diffusive microlayer, that is113 ! ocean-air interface temperature minus subskin temperature. In114 ! K.115 116 REAL, intent(out):: dser(:) ! (knon)117 ! Salinity variation in the diffusive microlayer, that is118 ! ocean-air interface salinity minus subskin salinity. In ppt.119 120 123 REAL, intent(out):: tkt(:) ! (knon) 121 124 ! épaisseur (m) de la couche de diffusion thermique (microlayer) … … 192 195 qsurf, evap, fluxsens, fluxlat, flux_u1, flux_v1, & 193 196 tsurf_new, dflux_s, dflux_l, sens_prec_liq, sss, delta_sal, rhoa, & 194 delta_sst )197 delta_sst, dTer, dSer, dt_ds) 195 198 196 199 CASE('slab') … … 332 335 delta_sal = s_int - sss(:knon) 333 336 if (activate_ocean_skin >= 2) tsurf_new(:knon) = t_int 337 if (activate_ocean_skin == 2 .and. type_ocean == 'couple') & 338 dt_ds = (tks / tkt) * dter 334 339 end if 335 340
Note: See TracChangeset
for help on using the changeset viewer.