- Timestamp:
- 2021-02-09T18:49:21+01:00 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/UKMO/NEMO_4.0.4_ocean_mean_fluxes/src/OCE/SBC/sbccpl.F90
r14075 r14423 120 120 INTEGER, PARAMETER :: jpr_tauwy = 56 ! y component of the ocean stress from waves 121 121 INTEGER, PARAMETER :: jpr_ts_ice = 57 ! Sea ice surface temp 122 123 INTEGER, PARAMETER :: jprcv = 57 ! total number of fields received 122 INTEGER, PARAMETER :: jpr_grnm = 58 ! Greenland ice mass 123 INTEGER, PARAMETER :: jpr_antm = 59 ! Antarctic ice mass 124 INTEGER, PARAMETER :: jpr_rnf_1d = 60 ! 1D river runoff 125 INTEGER, PARAMETER :: jpr_qtr = 61 ! Transmitted solar 126 127 INTEGER, PARAMETER :: jprcv = 61 ! total number of fields received 124 128 125 129 INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere … … 192 196 TYPE(FLD_C) :: sn_rcv_hsig, sn_rcv_phioc, sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper, sn_rcv_wnum, sn_rcv_tauwoc, & 193 197 sn_rcv_wdrag, sn_rcv_wfreq 198 ! Transmitted solar 199 TYPE(FLD_C) :: sn_rcv_qtr 194 200 ! ! Other namelist parameters 195 201 INTEGER :: nn_cplmodel ! Maximum number of models to/from which NEMO is potentialy sending/receiving data … … 274 280 & sn_rcv_w10m , sn_rcv_taumod, sn_rcv_tau , sn_rcv_dqnsdt, sn_rcv_qsr , & 275 281 & sn_rcv_sdrfx , sn_rcv_sdrfy , sn_rcv_wper , sn_rcv_wnum , sn_rcv_tauwoc, & 282 & sn_rcv_qtr , & 276 283 & sn_rcv_wdrag , sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf , sn_rcv_cal , & 277 284 & sn_rcv_iceflx, sn_rcv_co2 , sn_rcv_mslp , & … … 319 326 WRITE(numout,*)' ice shelf = ', TRIM(sn_rcv_isf%cldes ), ' (', TRIM(sn_rcv_isf%clcat ), ')' 320 327 WRITE(numout,*)' sea ice heat fluxes = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 328 WRITE(numout,*)' transmitted solar = ', TRIM(sn_rcv_qtr%cldes ), ' (', TRIM(sn_rcv_qtr%clcat ), ')' 321 329 WRITE(numout,*)' atm co2 = ', TRIM(sn_rcv_co2%cldes ), ' (', TRIM(sn_rcv_co2%clcat ), ')' 322 330 WRITE(numout,*)' significant wave heigth = ', TRIM(sn_rcv_hsig%cldes ), ' (', TRIM(sn_rcv_hsig%clcat ), ')' … … 588 596 srcv(jpr_topm:jpr_botm)%laction = .TRUE. 589 597 ENDIF 598 ! ! ------------------------- ! 599 ! ! transmitted solar ! 600 ! ! ------------------------- ! 601 srcv(jpr_qtr )%clname = 'OQtr' 602 IF( TRIM(sn_rcv_qtr%cldes) == 'coupled' ) THEN 603 IF ( TRIM( sn_rcv_qtr%clcat ) == 'yes' ) THEN 604 srcv(jpr_qtr)%nct = nn_cats_cpl 605 ELSE 606 CALL ctl_stop( 'sbc_cpl_init: sn_rcv_qtr%clcat should always be set to yes currently' ) 607 ENDIF 608 srcv(jpr_qtr)%laction = .TRUE. 609 ENDIF 610 590 611 ! ! ------------------------- ! 591 612 ! ! ice skin temperature ! … … 1673 1694 ziceld(:,:) = 1._wp - picefr(:,:) 1674 1695 zcptn (:,:) = rcp * sst_m(:,:) 1696 1697 #if defined key_si3 1698 ! ! ========================= ! 1699 SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) ) ! ice topmelt and botmelt ! 1700 ! ! ========================= ! 1701 CASE ('coupled') 1702 IF (ln_scale_ice_flux) THEN 1703 WHERE( a_i(:,:,:) > 1.e-10_wp ) 1704 qml_ice(:,:,:) = frcv(jpr_topm)%z3(:,:,:) * a_i_last_couple(:,:,:) / a_i(:,:,:) 1705 qcn_ice(:,:,:) = frcv(jpr_botm)%z3(:,:,:) * a_i_last_couple(:,:,:) / a_i(:,:,:) 1706 ELSEWHERE 1707 qml_ice(:,:,:) = 0.0_wp 1708 qcn_ice(:,:,:) = 0.0_wp 1709 END WHERE 1710 ELSE 1711 qml_ice(:,:,:) = frcv(jpr_topm)%z3(:,:,:) 1712 qcn_ice(:,:,:) = frcv(jpr_botm)%z3(:,:,:) 1713 ENDIF 1714 END SELECT 1715 #endif 1716 1675 1717 ! 1676 1718 ! ! ========================= ! … … 1840 1882 ! ! ========================= ! 1841 1883 CASE( 'oce only' ) ! the required field is directly provided 1842 zqns_tot(:,:) = frcv(jpr_qnsoce)%z3(:,:,1) 1843 ! For Met Office sea ice non-solar fluxes are already delt with by JULES so setting to zero 1844 ! here so the only flux is the ocean only one. 1845 zqns_ice(:,:,:) = 0._wp 1884 1885 ! Get the sea ice non solar heat flux from conductive, melting and sublimation fluxes 1886 IF( TRIM(sn_rcv_iceflx%cldes) == 'coupled' ) THEN 1887 zqns_ice(:,:,:) = qml_ice(:,:,:) + qcn_ice(:,:,:) + evap_ice(:,:,:) * rLsub 1888 ELSE 1889 zqns_ice(:,:,:) = 0._wp 1890 ENDIF 1891 1892 ! Calculate the total non solar heat flux. The ocean only non solar heat flux (zqns_oce) will be recalculated after this CASE 1893 ! statement to be consistent with other coupling methods even though .zqns_oce = frcv(jpr_qnsoce)%z3(:,:,1) 1894 zqns_tot(:,:) = frcv(jpr_qnsoce)%z3(:,:,1) * ziceld(:,:) + SUM( zqns_ice(:,:,:) * a_i(:,:,:), dim=3 ) 1895 1846 1896 CASE( 'conservative' ) ! the required fields are directly provided 1847 1897 zqns_tot(:,:) = frcv(jpr_qnsmix)%z3(:,:,1) … … 1982 2032 ! ! ========================= ! 1983 2033 CASE( 'oce only' ) 1984 zqsr_tot(:,: ) = MAX( 0._wp , frcv(jpr_qsroce)%z3(:,:,1) ) 1985 ! For Met Office sea ice solar fluxes are already delt with by JULES so setting to zero 1986 ! here so the only flux is the ocean only one. 2034 zqsr_tot(:,: ) = MAX( 0._wp , frcv(jpr_qsroce)%z3(:,:,1) ) * ziceld(:,:) 2035 2036 ! For the Met Office the only sea ice solar flux is the transmitted qsr which is added onto zqsr_ice 2037 ! further down. Therefore start zqsr_ice off at zero. 1987 2038 zqsr_ice(:,:,:) = 0._wp 1988 2039 CASE( 'conservative' ) … … 2038 2089 ENDIF 2039 2090 2040 #if defined key_si32041 ! --- solar flux over ocean --- !2042 ! note: ziceld cannot be = 0 since we limit the ice concentration to amax2043 zqsr_oce = 0._wp2044 WHERE( ziceld /= 0._wp ) zqsr_oce(:,:) = ( zqsr_tot(:,:) - SUM( a_i * zqsr_ice, dim=3 ) ) / ziceld(:,:)2045 2046 IF( ln_mixcpl ) THEN ; qsr_oce(:,:) = qsr_oce(:,:) * xcplmask(:,:,0) + zqsr_oce(:,:)* zmsk(:,:)2047 ELSE ; qsr_oce(:,:) = zqsr_oce(:,:) ; ENDIF2048 #endif2049 2050 IF( ln_mixcpl ) THEN2051 qsr_tot(:,:) = qsr(:,:) * ziceld(:,:) + SUM( qsr_ice(:,:,:) * a_i(:,:,:), dim=3 ) ! total flux from blk2052 qsr_tot(:,:) = qsr_tot(:,:) * xcplmask(:,:,0) + zqsr_tot(:,:)* zmsk(:,:)2053 DO jl = 1, jpl2054 qsr_ice(:,:,jl) = qsr_ice(:,:,jl) * xcplmask(:,:,0) + zqsr_ice(:,:,jl)* zmsk(:,:)2055 END DO2056 ELSE2057 qsr_tot(:,: ) = zqsr_tot(:,: )2058 qsr_ice(:,:,:) = zqsr_ice(:,:,:)2059 ENDIF2060 2061 ! ! ========================= !2062 SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) ) ! d(qns)/dt !2063 ! ! ========================= !2064 CASE ('coupled')2065 IF ( TRIM(sn_rcv_dqnsdt%clcat) == 'yes' ) THEN2066 zdqns_ice(:,:,1:jpl) = frcv(jpr_dqnsdt)%z3(:,:,1:jpl)2067 ELSE2068 ! Set all category values equal for the moment2069 DO jl=1,jpl2070 zdqns_ice(:,:,jl) = frcv(jpr_dqnsdt)%z3(:,:,1)2071 ENDDO2072 ENDIF2073 CASE( 'none' )2074 zdqns_ice(:,:,:) = 0._wp2075 END SELECT2076 2077 IF( ln_mixcpl ) THEN2078 DO jl=1,jpl2079 dqns_ice(:,:,jl) = dqns_ice(:,:,jl) * xcplmask(:,:,0) + zdqns_ice(:,:,jl) * zmsk(:,:)2080 ENDDO2081 ELSE2082 dqns_ice(:,:,:) = zdqns_ice(:,:,:)2083 ENDIF2084 2085 2091 #if defined key_si3 2086 ! ! ========================= !2087 SELECT CASE( TRIM( sn_rcv_iceflx%cldes ) ) ! ice topmelt and botmelt !2088 ! ! ========================= !2089 CASE ('coupled')2090 IF (ln_scale_ice_flux) THEN2091 WHERE( a_i(:,:,:) > 1.e-10_wp )2092 qml_ice(:,:,:) = frcv(jpr_topm)%z3(:,:,:) * a_i_last_couple(:,:,:) / a_i(:,:,:)2093 qcn_ice(:,:,:) = frcv(jpr_botm)%z3(:,:,:) * a_i_last_couple(:,:,:) / a_i(:,:,:)2094 ELSEWHERE2095 qml_ice(:,:,:) = 0.0_wp2096 qcn_ice(:,:,:) = 0.0_wp2097 END WHERE2098 ELSE2099 qml_ice(:,:,:) = frcv(jpr_topm)%z3(:,:,:)2100 qcn_ice(:,:,:) = frcv(jpr_botm)%z3(:,:,:)2101 ENDIF2102 END SELECT2103 2092 ! ! ========================= ! 2104 2093 ! ! Transmitted Qsr ! [W/m2] … … 2132 2121 ELSEIF( ln_cndflx .AND. .NOT.ln_cndemulate ) THEN !== conduction flux as surface forcing ==! 2133 2122 ! 2134 ! ! ===> here we must receive the qtr_ice_top array from the coupler 2135 ! for now just assume zero (fully opaque ice) 2136 zqtr_ice_top(:,:,:) = 0._wp 2123 SELECT CASE( TRIM( sn_rcv_qtr%cldes ) ) 2124 ! 2125 ! ! ===> here we receive the qtr_ice_top array from the coupler 2126 CASE ('coupled') 2127 IF (ln_scale_ice_flux) THEN 2128 WHERE( a_i(:,:,:) > 0.0_wp ) zqtr_ice_top(:,:,:) = frcv(jpr_qtr)%z3(:,:,:) * a_i_last_couple(:,:,:) / a_i(:,:,:) 2129 WHERE( a_i(:,:,:) <= 0.0_wp ) zqtr_ice_top(:,:,:) = 0.0_wp 2130 ELSE 2131 zqtr_ice_top(:,:,:) = frcv(jpr_qtr)%z3(:,:,:) 2132 ENDIF 2133 2134 ! Add retrieved transmitted solar radiation onto the ice and total solar radiation 2135 zqsr_ice(:,:,:) = zqsr_ice(:,:,:) + zqtr_ice_top(:,:,:) 2136 zqsr_tot(:,:) = zqsr_tot(:,:) + SUM( zqtr_ice_top(:,:,:) * a_i(:,:,:), dim=3 ) 2137 2138 ! if we are not getting this data from the coupler then assume zero (fully opaque ice) 2139 CASE ('none') 2140 zqtr_ice_top(:,:,:) = 0._wp 2141 END SELECT 2142 2137 2143 ! 2138 2144 ENDIF … … 2145 2151 qtr_ice_top(:,:,:) = zqtr_ice_top(:,:,:) 2146 2152 ENDIF 2153 2154 ! --- solar flux over ocean --- ! 2155 ! note: ziceld cannot be = 0 since we limit the ice concentration to amax 2156 zqsr_oce = 0._wp 2157 WHERE( ziceld /= 0._wp ) zqsr_oce(:,:) = ( zqsr_tot(:,:) - SUM( a_i * zqsr_ice, dim=3 ) ) / ziceld(:,:) 2158 2159 IF( ln_mixcpl ) THEN ; qsr_oce(:,:) = qsr_oce(:,:) * xcplmask(:,:,0) + zqsr_oce(:,:)* zmsk(:,:) 2160 ELSE ; qsr_oce(:,:) = zqsr_oce(:,:) ; ENDIF 2161 #endif 2162 2163 IF( ln_mixcpl ) THEN 2164 qsr_tot(:,:) = qsr(:,:) * ziceld(:,:) + SUM( qsr_ice(:,:,:) * a_i(:,:,:), dim=3 ) ! total flux from blk 2165 qsr_tot(:,:) = qsr_tot(:,:) * xcplmask(:,:,0) + zqsr_tot(:,:)* zmsk(:,:) 2166 DO jl = 1, jpl 2167 qsr_ice(:,:,jl) = qsr_ice(:,:,jl) * xcplmask(:,:,0) + zqsr_ice(:,:,jl)* zmsk(:,:) 2168 END DO 2169 ELSE 2170 qsr_tot(:,: ) = zqsr_tot(:,: ) 2171 qsr_ice(:,:,:) = zqsr_ice(:,:,:) 2172 ENDIF 2173 2174 ! ! ========================= ! 2175 SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) ) ! d(qns)/dt ! 2176 ! ! ========================= ! 2177 CASE ('coupled') 2178 IF ( TRIM(sn_rcv_dqnsdt%clcat) == 'yes' ) THEN 2179 zdqns_ice(:,:,1:jpl) = frcv(jpr_dqnsdt)%z3(:,:,1:jpl) 2180 ELSE 2181 ! Set all category values equal for the moment 2182 DO jl=1,jpl 2183 zdqns_ice(:,:,jl) = frcv(jpr_dqnsdt)%z3(:,:,1) 2184 ENDDO 2185 ENDIF 2186 CASE( 'none' ) 2187 zdqns_ice(:,:,:) = 0._wp 2188 END SELECT 2189 2190 IF( ln_mixcpl ) THEN 2191 DO jl=1,jpl 2192 dqns_ice(:,:,jl) = dqns_ice(:,:,jl) * xcplmask(:,:,0) + zdqns_ice(:,:,jl) * zmsk(:,:) 2193 ENDDO 2194 ELSE 2195 dqns_ice(:,:,:) = zdqns_ice(:,:,:) 2196 ENDIF 2197 2198 #if defined key_si3 2147 2199 ! ! ================== ! 2148 2200 ! ! ice skin temp. !
Note: See TracChangeset
for help on using the changeset viewer.