New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 14393 – NEMO

Changeset 14393


Ignore:
Timestamp:
2021-02-04T10:48:50+01:00 (3 years ago)
Author:
dancopsey
Message:

Add transmitted solar onto zqsr_ice and zqsr_tot. Move calculation of zqsr_oce to after the section on transmitted solar so that it captures the addition of transmitted solar.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_penetrating_solar/src/OCE/SBC/sbccpl.F90

    r14392 r14393  
    20332033      CASE( 'oce only' ) 
    20342034         zqsr_tot(:,:  ) = MAX( 0._wp , frcv(jpr_qsroce)%z3(:,:,1) ) * ziceld(:,:) 
    2035          ! For Met Office sea ice solar fluxes are already delt with by JULES so setting to zero 
    2036          ! here so the only flux is the ocean only one. 
     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. 
    20372038         zqsr_ice(:,:,:) = 0._wp 
    20382039      CASE( 'conservative' ) 
     
    20862087            zqsr_ice(:,:,jl) = sbc_dcy( zqsr_ice(:,:,jl) ) 
    20872088         END DO 
    2088       ENDIF 
    2089  
    2090 #if defined key_si3 
    2091       ! --- solar flux over ocean --- ! 
    2092       !         note: ziceld cannot be = 0 since we limit the ice concentration to amax 
    2093       zqsr_oce = 0._wp 
    2094       WHERE( ziceld /= 0._wp )  zqsr_oce(:,:) = ( zqsr_tot(:,:) - SUM( a_i * zqsr_ice, dim=3 ) ) / ziceld(:,:) 
    2095  
    2096       IF( ln_mixcpl ) THEN   ;   qsr_oce(:,:) = qsr_oce(:,:) * xcplmask(:,:,0) +  zqsr_oce(:,:)* zmsk(:,:) 
    2097       ELSE                   ;   qsr_oce(:,:) = zqsr_oce(:,:)   ;   ENDIF 
    2098 #endif 
    2099  
    2100       IF( ln_mixcpl ) THEN 
    2101          qsr_tot(:,:) = qsr(:,:) * ziceld(:,:) + SUM( qsr_ice(:,:,:) * a_i(:,:,:), dim=3 )   ! total flux from blk 
    2102          qsr_tot(:,:) = qsr_tot(:,:) * xcplmask(:,:,0) +  zqsr_tot(:,:)* zmsk(:,:) 
    2103          DO jl = 1, jpl 
    2104             qsr_ice(:,:,jl) = qsr_ice(:,:,jl) * xcplmask(:,:,0) +  zqsr_ice(:,:,jl)* zmsk(:,:) 
    2105          END DO 
    2106       ELSE 
    2107          qsr_tot(:,:  ) = zqsr_tot(:,:  ) 
    2108          qsr_ice(:,:,:) = zqsr_ice(:,:,:) 
    2109       ENDIF 
    2110  
    2111       !                                                      ! ========================= ! 
    2112       SELECT CASE( TRIM( sn_rcv_dqnsdt%cldes ) )             !          d(qns)/dt        ! 
    2113       !                                                      ! ========================= ! 
    2114       CASE ('coupled') 
    2115          IF ( TRIM(sn_rcv_dqnsdt%clcat) == 'yes' ) THEN 
    2116             zdqns_ice(:,:,1:jpl) = frcv(jpr_dqnsdt)%z3(:,:,1:jpl) 
    2117          ELSE 
    2118             ! Set all category values equal for the moment 
    2119             DO jl=1,jpl 
    2120                zdqns_ice(:,:,jl) = frcv(jpr_dqnsdt)%z3(:,:,1) 
    2121             ENDDO 
    2122          ENDIF 
    2123       CASE( 'none' )  
    2124          zdqns_ice(:,:,:) = 0._wp 
    2125       END SELECT 
    2126        
    2127       IF( ln_mixcpl ) THEN 
    2128          DO jl=1,jpl 
    2129             dqns_ice(:,:,jl) = dqns_ice(:,:,jl) * xcplmask(:,:,0) + zdqns_ice(:,:,jl) * zmsk(:,:) 
    2130          ENDDO 
    2131       ELSE 
    2132          dqns_ice(:,:,:) = zdqns_ice(:,:,:) 
    21332089      ENDIF 
    21342090 
     
    21762132            ENDIF 
    21772133 
     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 
    21782138         !      if we are not getting this data from the coupler then assume zero (fully opaque ice) 
    21792139         CASE ('none') 
    21802140            zqtr_ice_top(:,:,:) = 0._wp 
    21812141         END SELECT 
     2142 
    21822143         ! 
    21832144      ENDIF 
     
    21902151         qtr_ice_top(:,:,:) = zqtr_ice_top(:,:,:) 
    21912152      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 
    21922199      !                                                      ! ================== ! 
    21932200      !                                                      !   ice skin temp.   ! 
Note: See TracChangeset for help on using the changeset viewer.