Changeset 4446 for LMDZ6/branches/Portage_acc/libf/phylmd/cpl_mod.F90
- Timestamp:
- Mar 1, 2023, 6:22:39 PM (16 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Portage_acc/libf/phylmd/cpl_mod.F90
r3815 r4446 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 … … 64 66 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: cpl_rriv2D, cpl_rcoa2D, cpl_rlic2D 65 67 !$OMP THREADPRIVATE(cpl_rriv2D,cpl_rcoa2D,cpl_rlic2D) 68 REAL, ALLOCATABLE, DIMENSION(:,:), SAVE :: rlic_in_frac2D ! fraction for continental ice 69 !$OMP THREADPRIVATE(rlic_in_frac2D) 66 70 67 71 ! variables read from coupler : … … 94 98 !$OMP THREADPRIVATE(cpl_snow2D, cpl_evap2D, cpl_tsol2D) 95 99 96 REAL, ALLOCATABLE, SAVE:: cpl_delta_sst_2D(:,:), cpl_delta_sal_2D(:,:) 100 REAL, ALLOCATABLE, SAVE:: cpl_delta_sst_2D(:, :), cpl_delta_sal_2D(:, :), & 101 cpl_dter_2D(:, :), cpl_dser_2D(:, :), cpl_dt_ds_2D(:, :) 97 102 !$OMP THREADPRIVATE(cpl_delta_sst_2D, cpl_delta_sal_2D) 103 !$OMP THREADPRIVATE(cpl_dter_2D, cpl_dser_2D, cpl_dt_ds_2D) 98 104 99 105 REAL, ALLOCATABLE, DIMENSION(:,:,:), SAVE :: cpl_fder2D, cpl_albe2D … … 226 232 ALLOCATE(cpl_rlic2D(nbp_lon,jj_nb), stat=error) 227 233 sum_error = sum_error + error 234 ALLOCATE(rlic_in_frac2D(nbp_lon,jj_nb), stat=error) 235 sum_error = sum_error + error 228 236 ALLOCATE(read_sst(nbp_lon, jj_nb), stat = error) 229 237 sum_error = sum_error + error … … 238 246 239 247 if (activate_ocean_skin == 2) then 240 ALLOCATE(cpl_delta_sst(klon), cpl_delta_sal(klon), stat = error) 248 ALLOCATE(cpl_delta_sst(klon), cpl_delta_sal(klon), cpl_dter(klon), & 249 cpl_dser(klon), cpl_dt_ds(klon), stat = error) 241 250 sum_error = sum_error + error 242 251 end if … … 650 659 precip_rain, precip_snow, evap, tsurf, fder, albsol, taux, tauy, windsp,& 651 660 sens_prec_liq, sens_prec_sol, lat_prec_liq, lat_prec_sol, delta_sst, & 652 delta_sal )661 delta_sal, dTer, dSer, dt_ds) 653 662 654 663 ! This subroutine cumulates some fields for each time-step during … … 683 692 real, intent(in):: delta_sal(:) ! (knon) 684 693 ! Ocean-air interface salinity minus bulk salinity, in ppt. 694 695 REAL, intent(in):: dter(:) ! (knon) 696 ! Temperature variation in the diffusive microlayer, that is 697 ! ocean-air interface temperature minus subskin temperature. In 698 ! K. 699 700 REAL, intent(in):: dser(:) ! (knon) 701 ! Salinity variation in the diffusive microlayer, that is 702 ! ocean-air interface salinity minus subskin salinity. In ppt. 703 704 real, intent(in):: dt_ds(:) ! (knon) 705 ! (tks / tkt) * dTer, in K 685 706 686 707 ! Local variables … … 722 743 cpl_delta_sst = 0. 723 744 cpl_delta_sal = 0. 745 cpl_dter = 0. 746 cpl_dser = 0. 747 cpl_dt_ds = 0. 724 748 end if 725 749 ENDIF … … 768 792 cpl_delta_sst(ig) = cpl_delta_sst(ig) + delta_sst(ig) / REAL(nexca) 769 793 cpl_delta_sal(ig) = cpl_delta_sal(ig) + delta_sal(ig) / REAL(nexca) 794 cpl_dter(ig) = cpl_dter(ig) + dter(ig) / REAL(nexca) 795 cpl_dser(ig) = cpl_dser(ig) + dser(ig) / REAL(nexca) 796 cpl_dt_ds(ig) = cpl_dt_ds(ig) + dt_ds(ig) / REAL(nexca) 770 797 end if 771 798 ENDDO … … 817 844 if (activate_ocean_skin == 2) then 818 845 ALLOCATE(cpl_delta_sst_2D(nbp_lon, jj_nb), & 819 cpl_delta_sal_2D(nbp_lon, jj_nb), stat = error) 846 cpl_delta_sal_2D(nbp_lon, jj_nb), & 847 cpl_dter_2D(nbp_lon, jj_nb), cpl_dser_2D(nbp_lon, jj_nb), & 848 cpl_dt_ds_2D(nbp_lon, jj_nb), stat = error) 820 849 sum_error = sum_error + error 821 850 end if … … 878 907 CALL gath2cpl(cpl_delta_sst, cpl_delta_sst_2D, knon, knindex) 879 908 CALL gath2cpl(cpl_delta_sal, cpl_delta_sal_2D, knon, knindex) 909 CALL gath2cpl(cpl_dter, cpl_dter_2D, knon, knindex) 910 CALL gath2cpl(cpl_dser, cpl_dser_2D, knon, knindex) 911 CALL gath2cpl(cpl_dt_ds, cpl_dt_ds_2D, knon, knindex) 880 912 end if 881 913 ENDIF … … 1151 1183 ! 1152 1184 1153 SUBROUTINE cpl_send_landice_fields(itime, knon, knindex, rlic_in )1185 SUBROUTINE cpl_send_landice_fields(itime, knon, knindex, rlic_in, rlic_in_frac) 1154 1186 ! This subroutine cumulates the field for melting ice for each time-step 1155 1187 ! during a coupling period. This routine will not send to coupler. Sending … … 1165 1197 INTEGER, DIMENSION(klon), INTENT(IN) :: knindex 1166 1198 REAL, DIMENSION(klon), INTENT(IN) :: rlic_in 1199 REAL, DIMENSION(klon), INTENT(IN) :: rlic_in_frac ! Fraction for continental ice, can be equal to 1200 ! pctsrf(:,is_lic) or not, depending on landice_opt 1201 1167 1202 1168 1203 ! Local varibales … … 1179 1214 !$OMP END MASTER 1180 1215 CALL gath2cpl(rlic_in, rlic2D, knon, knindex) 1181 1216 CALL gath2cpl(rlic_in_frac(:), rlic_in_frac2D(:,:), knon, knindex) 1182 1217 !************************************************************************************* 1183 1218 ! Reset field to zero in the beginning of a new coupling period … … 1276 1311 tab_flds(:, :, ids_delta_sst) = cpl_delta_sst_2D 1277 1312 tab_flds(:, :, ids_delta_sal) = cpl_delta_sal_2D 1313 tab_flds(:, :, ids_dter) = cpl_dter_2D 1314 tab_flds(:, :, ids_dser) = cpl_dser_2D 1315 tab_flds(:, :, ids_dt_ds) = cpl_dt_ds_2D 1278 1316 end if 1279 1317 … … 1298 1336 CALL gath2cpl(pctsrf(:,is_oce), pctsrf2D(:,:,is_oce), klon, unity) 1299 1337 CALL gath2cpl(pctsrf(:,is_sic), pctsrf2D(:,:,is_sic), klon, unity) 1300 CALL gath2cpl(pctsrf(:,is_lic), pctsrf2D(:,:,is_lic), klon, unity) 1338 1339 1340 1301 1341 1302 1342 !************************************************************************************* … … 1311 1351 DO j = 1, jj_nb 1312 1352 tmp_calv(:,j) = DOT_PRODUCT (cpl_rlic2D(1:nbp_lon,j), & 1313 pctsrf2D(1:nbp_lon,j,is_lic)) / REAL(nbp_lon)1353 rlic_in_frac2D(1:nbp_lon,j)) / REAL(nbp_lon) 1314 1354 ENDDO 1315 1355 … … 1348 1388 calving(k)=0 1349 1389 DO j = 1, jj_nb 1350 calving(k)= calving(k)+DOT_PRODUCT(cpl_rlic2D(:,j)*area_calving(:,j,k), pctsrf2D(:,j,is_lic))1390 calving(k)= calving(k)+DOT_PRODUCT(cpl_rlic2D(:,j)*area_calving(:,j,k),rlic_in_frac2D(:,j)) 1351 1391 ENDDO 1352 1392 ENDDO … … 1513 1553 ENDIF 1514 1554 1515 if (activate_ocean_skin == 2) deallocate(cpl_delta_sst_2d, cpl_delta_sal_2d) 1555 if (activate_ocean_skin == 2) deallocate(cpl_delta_sst_2d, & 1556 cpl_delta_sal_2d, cpl_dter_2d, cpl_dser_2d, cpl_dt_ds_2d) 1516 1557 1517 1558 IF (sum_error /= 0) THEN
Note: See TracChangeset
for help on using the changeset viewer.