Back to home page

MITgcm

 
 

    


File indexing completed on 2025-09-17 05:08:23 UTC

view on githubraw file Latest commit e9828181 on 2025-09-16 19:00:16 UTC
c0d1c06c15 Matt*0001 #include "BLING_OPTIONS.h"
a284455135 Matt*0002 #ifdef ALLOW_AUTODIFF
                0003 # include "AUTODIFF_OPTIONS.h"
                0004 #endif
c0d1c06c15 Matt*0005 
                0006 CBOP
4dea327916 aver*0007 C !ROUTINE: BLING_LIGHT
                0008 
                0009 C !INTERFACE: ==========================================================
a284455135 Matt*0010       SUBROUTINE BLING_LIGHT(
e0f9a7ba0b Matt*0011      I           mld,
                0012      U           irr_inst, irr_eff,
                0013      I           bi, bj, imin, imax, jmin, jmax,
                0014      I           myTime, myIter, myThid)
                0015 
4dea327916 aver*0016 C !DESCRIPTION:
                0017 C     o calculate effective light for phytoplankton growth
                0018 C       There are multiple types of light.
                0019 C     - irr_inst is the instantaneous irradiance field.
                0020 C     - irr_mix is the same, but with the irr_inst averaged throughout
                0021 C       the mixed layer. This quantity is intended to represent the
                0022 C       light to which phytoplankton subject to turbulent transport in
                0023 C       the mixed-layer would be exposed.
                0024 C     - irr_eff is the effective irradiance for photosynthesis,
                0025 C       given either by irr_inst or irr_mix, depending on model
                0026 C       options and location.
                0027 C     o instantaneous light is calculated either from
                0028 C     - date and latitude, then exponentially attenuated down the
                0029 C       water column, or
                0030 C     - short-wave radiation read from external forcing file,
                0031 C       attenuated down the water column, or
                0032 C     - short-wave radiation distributed through the water column
                0033 C       according to SWFRAC routine
                0034 
                0035 C !USES: ===============================================================
e0f9a7ba0b Matt*0036       IMPLICIT NONE
                0037 
c0d1c06c15 Matt*0038 C     === Global variables ===
                0039 #include "SIZE.h"
e0f9a7ba0b Matt*0040 #include "DYNVARS.h"
c0d1c06c15 Matt*0041 #include "EEPARAMS.h"
                0042 #include "PARAMS.h"
                0043 #include "GRID.h"
                0044 #include "BLING_VARS.h"
e0f9a7ba0b Matt*0045 #ifdef USE_QSW
                0046 #include "FFIELDS.h"
                0047 #endif
a284455135 Matt*0048 #ifdef ALLOW_AUTODIFF_TAMC
c0d1c06c15 Matt*0049 # include "tamc.h"
                0050 #endif
                0051 
4dea327916 aver*0052 C !INPUT PARAMETERS: ===================================================
c0d1c06c15 Matt*0053 C     bi,bj         :: tile indices
                0054 C     iMin,iMax     :: computation domain: 1rst index range
                0055 C     jMin,jMax     :: computation domain: 2nd  index range
                0056 C     myTime        :: current time
                0057 C     myIter        :: current timestep
                0058 C     myThid        :: thread Id. number
                0059       INTEGER bi, bj, imin, imax, jmin, jmax
                0060       INTEGER myThid
                0061       INTEGER myIter
                0062       _RL     myTime
                0063       _RL mld       (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
4dea327916 aver*0064 
                0065 C !OUTPUT PARAMETERS: ==================================================
e37161e05a Jean*0066 C     irr_inst      :: instantaneous light
                0067 C     irr_eff       :: effective light for photosynthesis
c0d1c06c15 Matt*0068       _RL irr_inst  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
                0069       _RL irr_eff   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
                0070 
4dea327916 aver*0071 C !LOCAL VARIABLES: ====================================================
e37161e05a Jean*0072       INTEGER i,j,k
                0073       LOGICAL QSW_underice
                0074 #ifdef ALLOW_CAL
                0075       INTEGER mydate(4)
                0076 #endif
                0077       _RL localTime
                0078       _RL utcTime, diffutc
                0079       _RL sat_atten
                0080       _RL sat_atten_sum(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0081       _RL chl_sat_sum  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
c0d1c06c15 Matt*0082       _RL atten
                0083       _RL irr_surf  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
e0f9a7ba0b Matt*0084 #ifdef ML_MEAN_LIGHT
c0d1c06c15 Matt*0085       _RL irr_mix   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
4dea327916 aver*0086       _RL SumMLIrr  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0087       _RL tmp_ML    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
c0d1c06c15 Matt*0088 #endif
                0089 #ifndef USE_QSW
9f5240b52a Jean*0090       _RL solar, albedo
                0091       _RL dayfrac, yday, delta
                0092       _RL lat, sun1, dayhrs
                0093       _RL cosz, frac, fluxi
c0d1c06c15 Matt*0094       _RL sfac      (1-OLy:sNy+OLy)
                0095 #endif
00fa2d4ddd mmaz*0096 #ifdef PHYTO_SELF_SHADING
                0097       _RL k0_rd, chi_rd, e_rd
                0098       _RL k0_bg, chi_bg, e_bg
a284455135 Matt*0099       _RL kChl_rd   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
                0100       _RL kChl_bg   (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
00fa2d4ddd mmaz*0101       _RL atten_rd
                0102       _RL atten_bg
a284455135 Matt*0103       _RL irr_rd    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
                0104       _RL irr_bg    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
4dea327916 aver*0105 #endif /* PHYTO_SELF_SHADING */
4e4ad91a39 Jean*0106 #ifdef ALLOW_AUTODIFF_TAMC
edb6656069 Mart*0107 C     tkey :: tape key (tile dependent)
4dea327916 aver*0108 C     kkey :: tape key (tile and level dependent)
                0109       INTEGER tkey, kkey
00fa2d4ddd mmaz*0110 #endif
c0d1c06c15 Matt*0111 CEOP
                0112 
e9828181c3 Yixi*0113 C  Remove light under ice
                0114 C  If using Qsw and seaice/thsice, then ice fraction is already
                0115 C  taken into account
4dea327916 aver*0116       QSW_underice = .FALSE.
                0117 #ifdef USE_QSW
                0118       IF ( useSEAICE ) QSW_underice = .TRUE.
                0119       IF ( useThSIce ) QSW_underice = .TRUE.
                0120 #endif
a284455135 Matt*0121 
e37161e05a Jean*0122       DO j=1-OLy,sNy+OLy
                0123        DO i=1-OLx,sNx+OLx
                0124         chl_sat_sum(i,j)   = 0. _d 0
                0125         sat_atten_sum(i,j) = 0. _d 0
                0126 #ifdef ML_MEAN_LIGHT
                0127         SumMLIrr(i,j) = 0. _d 0
                0128         tmp_ML(i,j)   = 0. _d 0
                0129 #endif
                0130        ENDDO
                0131       ENDDO
4dea327916 aver*0132       DO k=1,Nr
e37161e05a Jean*0133        DO j=1-OLy,sNy+OLy
                0134         DO i=1-OLx,sNx+OLx
4dea327916 aver*0135          irr_eff(i,j,k) = 0. _d 0
a284455135 Matt*0136 #ifdef PHYTO_SELF_SHADING
4dea327916 aver*0137          irr_rd(i,j,k)        = 0. _d 0
                0138          irr_bg(i,j,k)        = 0. _d 0
a284455135 Matt*0139 #endif
c0d1c06c15 Matt*0140         ENDDO
                0141        ENDDO
4dea327916 aver*0142       ENDDO
e37161e05a Jean*0143 
4dea327916 aver*0144 #ifdef PHYTO_SELF_SHADING
e9828181c3 Yixi*0145 C  Specify co-efficients for bio-optical model {kChl = k0 +chi[chl]^e}
                0146 C  in red and blue-green fractions (Morel 1988; Foujols et al. 2000)
4dea327916 aver*0147       k0_rd  = 0.225 _d 0
                0148       k0_bg  = 0.0232 _d 0
                0149       chi_rd = 0.037 _d 0
                0150       chi_bg = 0.074 _d 0
                0151       e_rd   = 0.629 _d 0
                0152       e_bg   = 0.674 _d 0
                0153 #endif
c0d1c06c15 Matt*0154 
e9828181c3 Yixi*0155 C ---------------------------------------------------------------------
                0156 C  Surface insolation
c0d1c06c15 Matt*0157 
e0f9a7ba0b Matt*0158 #ifndef USE_QSW
e9828181c3 Yixi*0159 C  From pkg/dic/dic_insol (based on paltridge and parson)
                0160 C  find light as function of date and latitude
c0d1c06c15 Matt*0161 
                0162       solar  = 1360. _d 0   !solar constant
                0163       albedo = 0.6 _d 0     !planetary albedo
                0164 
                0165 C     Case where a 2-d output array is needed: for now, stop here.
                0166       IF ( usingCurvilinearGrid .OR. rotateGrid ) THEN
                0167        STOP 'ABNORMAL END: S/R INSOL: 2-D output not implemented'
                0168       ENDIF
                0169 
                0170 C find day (****NOTE for year starting in winter*****)
4dea327916 aver*0171 C fraction of year
                0172       dayfrac=mod(myTime,360. _d 0*86400. _d 0)
                0173      &                 /(360. _d 0*86400. _d 0)
                0174 C convert to radians
                0175       yday = 2. _d 0*PI*dayfrac
                0176 C cosine zenith angle (paltridge+platt)
                0177       delta = (0.006918 _d 0
                0178      &       -(0.399912 _d 0*cos(yday))
                0179      &       +(0.070257 _d 0*sin(yday))
                0180      &       -(0.006758 _d 0*cos(2. _d 0*yday))
                0181      &       +(0.000907 _d 0*sin(2. _d 0*yday))
                0182      &       -(0.002697 _d 0*cos(3. _d 0*yday))
                0183      &       +(0.001480 _d 0*sin(3. _d 0*yday)) )
                0184       DO j=1-OLy,sNy+OLy
c0d1c06c15 Matt*0185 C latitude in radians
4dea327916 aver*0186        lat=YC(1,j,1,bj)*deg2rad
c0d1c06c15 Matt*0187 C     latitute in radians, backed out from coriolis parameter
                0188 C     (makes latitude independent of grid)
4dea327916 aver*0189        IF ( usingCartesianGrid .OR. usingCylindricalGrid )
                0190      &      lat = asin( fCori(1,j,1,bj)/(2. _d 0*omega) )
                0191        sun1 = -sin(delta)/cos(delta) * sin(lat)/cos(lat)
                0192        IF (sun1.LE.-0.999 _d 0) sun1=-0.999 _d 0
                0193        IF (sun1.GE. 0.999 _d 0) sun1= 0.999 _d 0
                0194        dayhrs = abs(acos(sun1))
                0195 C average zenith angle
                0196        cosz = ( sin(delta)*sin(lat)
                0197      &        +(cos(delta)*cos(lat)*sin(dayhrs)/dayhrs) )
                0198        IF (cosz.LE.5. _d -3) cosz= 5. _d -3
                0199 C fraction of daylight in day
                0200        frac = dayhrs/PI
c0d1c06c15 Matt*0201 C daily average photosynthetically active solar radiation just below surface
4dea327916 aver*0202        fluxi = solar*(1. _d 0-albedo)*cosz*frac*parfrac
c0d1c06c15 Matt*0203 
                0204 C convert to sfac
4dea327916 aver*0205        sfac(j) = MAX(1. _d -5,fluxi)
                0206       ENDDO !j
9f5240b52a Jean*0207 #endif /* ndef USE_QSW */
c0d1c06c15 Matt*0208 
82e538d851 aver*0209 C get time (in h) within the day:
                0210       utcTime = MOD( myTime/3600. _d 0, 24. _d 0 )
                0211 #ifdef ALLOW_CAL
e9828181c3 Yixi*0212 C mydate is utc time
82e538d851 aver*0213       IF ( useCAL ) THEN
4dea327916 aver*0214        CALL CAL_GETDATE( myIter, myTime, mydate, myThid )
                0215        i = mydate(2)/10000
                0216        j = mydate(2)/100
                0217        j = MOD(j,100)
                0218        k = MOD(mydate(2),100)
                0219        utcTime = i + j/60. _d 0 + k/3600. _d 0
82e538d851 aver*0220       ENDIF
                0221 #endif
                0222 
e9828181c3 Yixi*0223 C ---------------------------------------------------------------------
                0224 C  instantaneous light, mixed layer averaged light
c0d1c06c15 Matt*0225 
e37161e05a Jean*0226       DO j=jmin,jmax
                0227        DO i=imin,imax
e9828181c3 Yixi*0228 C  Photosynthetically-available radiations (PAR)
e37161e05a Jean*0229 #ifdef USE_QSW
                0230          irr_surf(i,j) = MAX( epsln,
                0231      &                 -parfrac*Qsw(i,j,bi,bj)*maskC(i,j,1,bi,bj))
                0232 #else
                0233          irr_surf(i,j) = sfac(j)
                0234 #endif
e9828181c3 Yixi*0235 C  Remove light under ice
e37161e05a Jean*0236          IF ( .NOT. QSW_underice ) THEN
                0237           irr_surf(i,j) = irr_surf(i,j)*(1. _d 0 - FIce(i,j,bi,bj))
                0238          ENDIF
                0239        ENDDO
                0240       ENDDO
                0241 
4dea327916 aver*0242 #ifdef ALLOW_AUTODIFF_TAMC
                0243       tkey = bi + (bj - 1)*nSx + (ikey_dynamics - 1)*nSx*nSy
                0244 #endif /* ALLOW_AUTODIFF_TAMC */
                0245 
                0246       DO k=1,Nr
                0247 
                0248 #ifdef ALLOW_AUTODIFF_TAMC
                0249        kkey = k + (tkey-1)*Nr
                0250 # ifdef ML_MEAN_LIGHT
                0251 CADJ STORE tmp_ML = comlev1_bibj_k, key=kkey, kind=isbyte
                0252 # endif /* ML_MEAN_LIGHT */
                0253 #endif
                0254 
                0255 C Top layer
                0256        IF ( k.EQ.1) THEN
                0257 
                0258         DO j=jmin,jmax
                0259          DO i=imin,imax
                0260 
                0261           IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*0262 
00fa2d4ddd mmaz*0263 #ifdef PHYTO_SELF_SHADING
e9828181c3 Yixi*0264 C  Use bio-optical model of Manizza et al. (2005) to account for
                0265 C  effect of self-shading on ligt available for phytoplankton
                0266 C  growth. As written this DOES NOT feedback onto the absorption
                0267 C  of shortwave radiation calculated in the physical model, which
                0268 C  is instead calculated in the subroutine swfrac
00fa2d4ddd mmaz*0269 
e9828181c3 Yixi*0270 C  Attenuation coefficient adjusted to chlorophyll in top layer
4dea327916 aver*0271 #ifdef ALLOW_AUTODIFF
                0272            IF ( chl(i,j,1,bi,bj) .GT. 0. _d 0 ) THEN
                0273 #endif
                0274             kChl_rd(i,j,1) = k0_rd + chi_rd*(chl(i,j,1,bi,bj)**e_rd)
                0275             kChl_bg(i,j,1) = k0_bg + chi_bg*(chl(i,j,1,bi,bj)**e_bg)
                0276 #ifdef ALLOW_AUTODIFF
                0277            ELSE
                0278             kChl_rd(i,j,1) = k0_rd
                0279             kChl_bg(i,j,1) = k0_bg
                0280            ENDIF
                0281 #endif
e9828181c3 Yixi*0282 C  Light attenuation in middle of top layer
4dea327916 aver*0283            atten_rd = kChl_rd(i,j,1)*drF(1)/2. _d 0*hFacC(i,j,1,bi,bj)
                0284            atten_bg = kChl_bg(i,j,1)*drF(1)/2. _d 0*hFacC(i,j,1,bi,bj)
e9828181c3 Yixi*0285 C  Irradiance in middle of top layer
4dea327916 aver*0286            irr_rd(i,j,1) = irr_surf(i,j) * exp(-atten_rd) * 0.5 _d 0
                0287            irr_bg(i,j,1) = irr_surf(i,j) * exp(-atten_bg) * 0.5 _d 0
                0288            irr_inst(i,j,1) = irr_rd(i,j,1) + irr_bg(i,j,1)
e37161e05a Jean*0289 #else /* PHYTO_SELF_SHADING */
4dea327916 aver*0290 C SW radiation attenuated exponentially
e9828181c3 Yixi*0291 C  Light attenuation in middle of top layer
                0292            atten = k0_2d(i,j,bi,bj)*halfRL*drF(1)*hFacC(i,j,1,bi,bj)
4dea327916 aver*0293            irr_inst(i,j,1) = irr_surf(i,j)*exp(-atten)
                0294 
e37161e05a Jean*0295 #endif /* PHYTO_SELF_SHADING */
4dea327916 aver*0296 
                0297           ENDIF
                0298          ENDDO
                0299         ENDDO
e37161e05a Jean*0300 
4dea327916 aver*0301 C k>1: below surface layer
                0302        ELSE
                0303 
                0304 #ifdef ALLOW_AUTODIFF_TAMC
                0305 # ifdef PHYTO_SELF_SHADING
                0306 CADJ STORE irr_bg(:,:,k-1) = comlev1_bibj_k, key=kkey, kind=isbyte
                0307 CADJ STORE irr_rd(:,:,k-1) = comlev1_bibj_k, key=kkey, kind=isbyte
                0308 # endif
                0309 #endif
                0310 
                0311         DO j=jmin,jmax
                0312          DO i=imin,imax
                0313 
                0314           IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
00fa2d4ddd mmaz*0315 
4dea327916 aver*0316 #ifdef PHYTO_SELF_SHADING
e9828181c3 Yixi*0317 C  Attenuation coefficient adjusted to chlorophyll in kth layer
4dea327916 aver*0318 #ifdef ALLOW_AUTODIFF
                0319            IF ( chl(i,j,k,bi,bj) .GT. 0. _d 0 ) THEN
                0320 #endif
                0321             kChl_rd(i,j,k) = k0_rd + chi_rd*(chl(i,j,k,bi,bj)**e_rd)
                0322             kChl_bg(i,j,k) = k0_bg + chi_bg*(chl(i,j,k,bi,bj)**e_bg)
                0323 #ifdef ALLOW_AUTODIFF
                0324            ELSE
                0325             kChl_rd(i,j,k) = k0_rd
                0326             kChl_bg(i,j,k) = k0_bg
                0327            ENDIF
                0328 #endif
e9828181c3 Yixi*0329 C  Light attenuation from one more layer
4dea327916 aver*0330            atten_rd = kChl_rd(i,j,k)*drF(k)/2. _d 0*hFacC(i,j,k,bi,bj)
                0331      &        + kChl_rd(i,j,k-1)*drF(k-1)/2. _d 0*hFacC(i,j,k-1,bi,bj)
                0332            atten_bg = kChl_bg(i,j,k)*drF(k)/2. _d 0*hFacC(i,j,k,bi,bj)
                0333      &        + kChl_bg(i,j,k-1)*drF(k-1)/2. _d 0*hFacC(i,j,k-1,bi,bj)
e9828181c3 Yixi*0334 C  Irradiance in middle of layer k
4dea327916 aver*0335            irr_rd(i,j,k) = irr_rd(i,j,k-1)*exp(-atten_rd)
                0336            irr_bg(i,j,k) = irr_bg(i,j,k-1)*exp(-atten_bg)
                0337            irr_inst(i,j,k) = irr_rd(i,j,k) + irr_bg(i,j,k)
00fa2d4ddd mmaz*0338 
e37161e05a Jean*0339 #else /* PHYTO_SELF_SHADING */
e0f9a7ba0b Matt*0340 C SW radiation attenuated exponentially
e9828181c3 Yixi*0341 C  Attenuation from one more layer
                0342            atten = k0_2d(i,j,bi,bj)*halfRL*( drF(k)*hFacC(i,j,k,bi,bj)
                0343      &                                 + drF(k-1)*hFacC(i,j,k-1,bi,bj) )
e37161e05a Jean*0344            irr_inst(i,j,k) = irr_inst(i,j,k-1)*exp(-atten)
4dea327916 aver*0345 
e37161e05a Jean*0346 #endif /* PHYTO_SELF_SHADING */
4dea327916 aver*0347 
                0348           ENDIF
                0349          ENDDO
                0350         ENDDO
c0d1c06c15 Matt*0351 
e37161e05a Jean*0352        ENDIF /* if k=1 then, else */
e0f9a7ba0b Matt*0353 
82e538d851 aver*0354 C Satellite chl
4dea327916 aver*0355        DO j=jmin,jmax
                0356         DO i=imin,imax
                0357          IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
                0358 
e37161e05a Jean*0359           IF ( irr_surf(i,j).GT.zeroRL ) THEN
82e538d851 aver*0360 c           sat_atten = irr_inst(i,j,k)/irr_surf(i,j)
4dea327916 aver*0361 #ifdef PHYTO_SELF_SHADING
e37161e05a Jean*0362            sat_atten = exp(-2. _d 0 * k0_bg * (-rC(k)))
82e538d851 aver*0363 #else
e9828181c3 Yixi*0364            sat_atten = exp(-2. _d 0 * k0_2d(i,j,bi,bj) * (-rC(k)))
82e538d851 aver*0365 #endif
4dea327916 aver*0366            chl_sat_sum(i,j) = chl_sat_sum(i,j)
82e538d851 aver*0367      &                 + chl(i,j,k,bi,bj)*sat_atten
4dea327916 aver*0368            sat_atten_sum(i,j) = sat_atten_sum(i,j) + sat_atten
                0369           ENDIF
82e538d851 aver*0370 
c0d1c06c15 Matt*0371 #ifdef ML_MEAN_LIGHT
e9828181c3 Yixi*0372 C  Mean irradiance in the mixed layer
e37161e05a Jean*0373           IF ( (-rF(k+1).LE. mld(i,j)) .AND.
                0374      &         (-rF(k+1).LT.MLmix_max) ) THEN
4dea327916 aver*0375            SumMLIrr(i,j) = SumMLIrr(i,j)+drF(k)*irr_inst(i,j,k)
                0376            tmp_ML(i,j) = tmp_ML(i,j) + drF(k)
                0377            irr_mix(i,j) = SumMLIrr(i,j)/tmp_ML(i,j)
                0378           ENDIF
c0d1c06c15 Matt*0379 #endif
                0380 
e37161e05a Jean*0381          ENDIF
                0382         ENDDO
                0383        ENDDO
                0384 
                0385 C     end first k loop
                0386       ENDDO
                0387 
                0388 C Satellite chlorophyll
82e538d851 aver*0389 C Update diagnostic only if ~13:30 local time, when satellite observes
e37161e05a Jean*0390       DO j=jmin,jmax
                0391        DO i=imin,imax
                0392         IF ( usingSphericalPolarGrid .OR. usingCurvilinearGrid ) THEN
                0393 C       local-time difference (in h) from UTC time (note: 15 = 360/24)
                0394          diffutc = XC(i,j,bi,bj)/15. _d 0
                0395         ELSE
                0396 C       for other grid (e.g., cartesian), assumes no difference in time
                0397          diffutc = 0. _d 0
                0398         ENDIF
                0399         localTime = utcTime + diffutc + 24. _d 0
                0400         localTime = MOD( localTime, 24. _d 0 )
                0401         IF ( localTime.GT.chlsat_locTimWindow(1) .AND.
                0402      &       localTime.LT.chlsat_locTimWindow(2) ) THEN
                0403          chl_sat(i,j,bi,bj) = chl_sat_sum(i,j)
                0404      &                      / (sat_atten_sum(i,j) + epsln)
                0405         ENDIF
                0406        ENDDO
                0407       ENDDO
c0d1c06c15 Matt*0408 
e37161e05a Jean*0409       DO k=1,Nr
                0410        DO j=jmin,jmax
                0411         DO i=imin,imax
                0412          IF ( maskC(i,j,k,bi,bj).EQ.oneRS ) THEN
e0f9a7ba0b Matt*0413 
e37161e05a Jean*0414           irr_eff(i,j,k) = irr_inst(i,j,k)
c0d1c06c15 Matt*0415 #ifdef ML_MEAN_LIGHT
e9828181c3 Yixi*0416 C  Inside mixed layer, effective light is set to mean mixed layer light
e37161e05a Jean*0417           IF ( (-rF(k+1).LE. mld(i,j)) .AND.
                0418      &         (-rF(k+1).LT.MLmix_max) ) THEN
c0d1c06c15 Matt*0419            irr_eff(i,j,k) = irr_mix(i,j)
                0420           ENDIF
e0f9a7ba0b Matt*0421 #endif
c0d1c06c15 Matt*0422 
                0423          ENDIF
                0424         ENDDO
                0425        ENDDO
                0426       ENDDO
e0f9a7ba0b Matt*0427 
82e538d851 aver*0428 #ifdef ALLOW_DIAGNOSTICS
                0429       IF ( useDiagnostics ) THEN
4dea327916 aver*0430        CALL DIAGNOSTICS_FILL(chl_sat,'BLGCHLSA',0,1,1,bi,bj,myThid)
82e538d851 aver*0431       ENDIF
                0432 #endif /* ALLOW_DIAGNOSTICS */
                0433 
c0d1c06c15 Matt*0434       RETURN
                0435       END