- Timestamp:
- 2020-04-20T20:48:56+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/SBC/sbccpl.F90
r12742 r12785 1654 1654 ! 1655 1655 INTEGER :: ji, jj, jl ! dummy loop index 1656 REAL(wp) :: ztri ! local scalar1657 1656 REAL(wp), DIMENSION(jpi,jpj) :: zcptn, zcptrain, zcptsnw, ziceld, zmsk, zsnw 1658 1657 REAL(wp), DIMENSION(jpi,jpj) :: zemp_tot, zemp_ice, zemp_oce, ztprecip, zsprecip , zevap_oce, zdevap_ice … … 1660 1659 REAL(wp), DIMENSION(jpi,jpj) :: zevap_ice_total 1661 1660 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zqns_ice, zqsr_ice, zdqns_ice, zqevap_ice, zevap_ice, zqtr_ice_top, ztsu 1661 REAL(wp), DIMENSION(jpi,jpj) :: ztri, zcloud_fra 1662 1662 !!---------------------------------------------------------------------- 1663 1663 ! … … 1694 1694 IF (ln_scale_ice_flux) THEN ! typically met-office requirements 1695 1695 IF (sn_rcv_emp%clcat == 'yes') THEN 1696 WHERE( a_i(:,:,:) > 1.e-10 ); zevap_ice(:,:,:) = frcv(jpr_ievp)%z3(:,:,:) * a_i_last_couple(:,:,:) / a_i(:,:,:)1697 ELSEWHERE ; zevap_ice(:,:,:) = 0._wp1696 WHERE( a_i(:,:,:) > 1.e-10 ) ; zevap_ice(:,:,:) = frcv(jpr_ievp)%z3(:,:,:) * a_i_last_couple(:,:,:) / a_i(:,:,:) 1697 ELSEWHERE ; zevap_ice(:,:,:) = 0._wp 1698 1698 END WHERE 1699 zevap_ice_total(:,:) = SUM( zevap_ice(:,:,:), dim=3 ) 1699 WHERE( picefr(:,:) > 1.e-10 ) ; zevap_ice_total(:,:) = SUM( zevap_ice(:,:,:) * a_i(:,:,:), dim=3 ) / picefr(:,:) 1700 ELSEWHERE ; zevap_ice_total(:,:) = 0._wp 1701 END WHERE 1700 1702 ELSE 1701 WHERE( picefr(:,:) > 1.e-10 ) ; zevap_ice(:,:,1) = frcv(jpr_ievp)%z3(:,:,1) * SUM( a_i_last_couple, dim=3 ) / picefr(:,:)1702 ELSEWHERE ; zevap_ice(:,:,1) = 0._wp1703 WHERE( picefr(:,:) > 1.e-10 ) ; zevap_ice(:,:,1) = frcv(jpr_ievp)%z3(:,:,1) * SUM( a_i_last_couple, dim=3 ) / picefr(:,:) 1704 ELSEWHERE ; zevap_ice(:,:,1) = 0._wp 1703 1705 END WHERE 1704 1706 zevap_ice_total(:,:) = zevap_ice(:,:,1) 1707 DO jl = 2, jpl 1708 zevap_ice(:,:,jl) = zevap_ice(:,:,1) 1709 ENDDO 1705 1710 ENDIF 1706 1711 ELSE 1707 1712 IF (sn_rcv_emp%clcat == 'yes') THEN 1708 1713 zevap_ice(:,:,1:jpl) = frcv(jpr_ievp)%z3(:,:,1:jpl) 1709 zevap_ice_total(:,:) = SUM( zevap_ice(:,:,:), dim=3 ) 1714 WHERE( picefr(:,:) > 1.e-10 ) ; zevap_ice_total(:,:) = SUM( zevap_ice(:,:,:) * a_i(:,:,:), dim=3 ) / picefr(:,:) 1715 ELSEWHERE ; zevap_ice_total(:,:) = 0._wp 1716 END WHERE 1710 1717 ELSE 1711 1718 zevap_ice(:,:,1) = frcv(jpr_ievp)%z3(:,:,1) 1712 1719 zevap_ice_total(:,:) = zevap_ice(:,:,1) 1720 DO jl = 2, jpl 1721 zevap_ice(:,:,jl) = zevap_ice(:,:,1) 1722 ENDDO 1713 1723 ENDIF 1714 1724 ENDIF … … 2085 2095 ENDIF 2086 2096 END SELECT 2097 !!$ ! ! ========================= ! 2098 !!$ SELECT CASE( TRIM( sn_rcv_clouds%cldes ) ) ! cloud fraction ! 2099 !!$ ! ! ========================= ! 2100 !!$ cloud_fra(:,:) = frcv(jpr_clfra)*z3(:,:,1) 2101 !!$ END SELECT 2102 zcloud_fra(:,:) = cldf_ice ! should be real cloud fraction instead (as in the bulk) but needs to be read from atm. 2103 IF( ln_mixcpl ) THEN 2104 cloud_fra(:,:) = cloud_fra(:,:) * xcplmask(:,:,0) + zcloud_fra(:,:)* zmsk(:,:) 2105 ELSE 2106 cloud_fra(:,:) = zcloud_fra(:,:) 2107 ENDIF 2087 2108 ! ! ========================= ! 2088 2109 ! ! Transmitted Qsr ! [W/m2] … … 2091 2112 ! 2092 2113 ! ! ===> used prescribed cloud fraction representative for polar oceans in summer (0.81) 2093 ztri = 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ! surface transmission when hi>10cm (Grenfell Maykut 77) 2114 ! ! should be real cloud fraction instead (as in the bulk) but needs to be read from atm. 2115 ztri(:,:) = 0.18 * ( 1.0 - zcloud_fra(:,:) ) + 0.35 * zcloud_fra(:,:) ! surface transmission when hi>10cm (Grenfell Maykut 77) 2094 2116 ! 2095 WHERE ( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) < 0.1_wp ) ! linear decrease from hi=0 to 10cm 2096 zqtr_ice_top(:,:,:) = qsr_ice(:,:,:) * ( ztri + ( 1._wp - ztri ) * ( 1._wp - phi(:,:,:) * 10._wp ) ) 2097 ELSEWHERE( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) >= 0.1_wp ) ! constant (ztri) when hi>10cm 2098 zqtr_ice_top(:,:,:) = qsr_ice(:,:,:) * ztri 2099 ELSEWHERE ! zero when hs>0 2100 zqtr_ice_top(:,:,:) = 0._wp 2101 END WHERE 2117 DO jl = 1, jpl 2118 WHERE ( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) < 0.1_wp ) ! linear decrease from hi=0 to 10cm 2119 zqtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ( ztri(:,:) + ( 1._wp - ztri(:,:) ) * ( 1._wp - phi(:,:,jl) * 10._wp ) ) 2120 ELSEWHERE( phs(:,:,jl) <= 0._wp .AND. phi(:,:,jl) >= 0.1_wp ) ! constant (ztri) when hi>10cm 2121 zqtr_ice_top(:,:,jl) = qsr_ice(:,:,jl) * ztri(:,:) 2122 ELSEWHERE ! zero when hs>0 2123 zqtr_ice_top(:,:,jl) = 0._wp 2124 END WHERE 2125 ENDDO 2102 2126 ! 2103 2127 ELSEIF( ln_cndflx .AND. .NOT.ln_cndemulate ) THEN !== conduction flux as surface forcing ==!
Note: See TracChangeset
for help on using the changeset viewer.