--- MITgcm_contrib/bling/pkg/bling_light.F 2014/05/23 17:33:43 1.1 +++ MITgcm_contrib/bling/pkg/bling_light.F 2016/05/15 00:30:35 1.3 @@ -1,13 +1,15 @@ -C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/bling/pkg/bling_light.F,v 1.1 2014/05/23 17:33:43 mmazloff Exp $ +C $Header: /home/ubuntu/mnt/e9_copy/MITgcm_contrib/bling/pkg/bling_light.F,v 1.3 2016/05/15 00:30:35 mmazloff Exp $ C $Name: $ #include "BLING_OPTIONS.h" CBOP subroutine BLING_LIGHT( - U irr_eff, + I mld, + U irr_inst, irr_eff, I bi, bj, imin, imax, jmin, jmax, I myIter, myTime, myThid ) + C ================================================================= C | subroutine bling_light C | o calculate effective light for phytoplankton growth @@ -39,7 +41,7 @@ #include "BLING_VARS.h" #include "PTRACERS_SIZE.h" #include "PTRACERS_PARAMS.h" -#ifdef ALLOW_AUTODIFF_TAMC +#ifdef ALLOW_AUTODIFF # include "tamc.h" #endif @@ -54,8 +56,12 @@ INTEGER myThid INTEGER myIter _RL myTime +C === Input === + _RL mld (1-OLx:sNx+OLx,1-OLy:sNy+OLy) C === Output === +C irr_inst :: instantaneous light C irr_eff :: effective light for photosynthesis + _RL irr_inst (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) _RL irr_eff (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) C === Local variables === @@ -68,10 +74,7 @@ #ifdef ML_MEAN_LIGHT _RL irr_mix (1-OLx:sNx+OLx,1-OLy:sNy+OLy) _RL SumMLIrr - _RL SumMLDepth - _RL dens_surf (1-OLx:sNx+OLx,1-OLy:sNy+OLy) - _RL dens_z (1-OLx:sNx+OLx,1-OLy:sNy+OLy) - _RL delta_dens(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr) + _RL tmp_ML #endif #ifndef READ_PAR #ifndef USE_QSW @@ -81,47 +84,13 @@ integer i,j,k CEOP -#ifdef ML_MEAN_LIGHT -c --------------------------------------------------------------------- -c Mixed layer depth - -c Surface density - CALL FIND_RHO_2D( - I 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, 1, - I theta(1-OLx,1-OLy,1,bi,bj), salt(1-OLx,1-OLy,1,bi,bj), - O dens_surf, - I 1, bi, bj, myThid ) - - DO k=1,Nr - DO j=jmin,jmax - DO i=imin,imax - if (k.eq.1) then - delta_dens(i,j,1) = 0. _d 0 - else - delta_dens(i,j,k) = 9999. _d 0 - endif - ENDDO - ENDDO - ENDDO - - DO k = 2,Nr - -c Potential density - CALL FIND_RHO_2D( - I 1-OLx, sNx+OLx, 1-OLy, sNy+OLy, 1, - I theta(1-OLx,1-OLy,k,bi,bj), salt(1-OLx,1-OLy,k,bi,bj), - O dens_z, - I k, bi, bj, myThid ) - + DO k=1,Nr DO j=jmin,jmax DO i=imin,imax - IF (hFacC(i,j,k,bi,bj) .gt. 0. _d 0) THEN - delta_dens(i,j,k) = dens_z(i,j)-dens_surf(i,j) - ENDIF + irr_eff(i,j,k) = 0. _d 0 ENDDO ENDDO - ENDDO -#endif + ENDDO c --------------------------------------------------------------------- c Surface insolation @@ -166,7 +135,7 @@ IF (cosz.LE.5. _d -3) cosz= 5. _d -3 frac = dayhrs/PI !fraction of daylight in day C daily average photosynthetically active solar radiation just below surface - fluxi = solar*(1. _d 0-albedo)*cosz*frac*parfrac + fluxi = solar*(1. _d 0-albedo)*cosz*frac*parfrac C convert to sfac sfac(j) = MAX(1. _d -5,fluxi) @@ -177,53 +146,50 @@ c --------------------------------------------------------------------- c instantaneous light, mixed layer averaged light -C$TAF LOOP = parallel DO j=jmin,jmax -C$TAF LOOP = parallel DO i=imin,imax c Photosynthetically-available radiations (PAR) #ifdef USE_EXFQSW - irr_surf(i,j) = max(0. _d 0, + irr_surf(i,j) = max(epsln, & -parfrac*Qsw(i,j,bi,bj)*maskC(i,j,1,bi,bj)) #else irr_surf(i,j) = sfac(j) #endif - IF ( .NOT. QSW_underice ) THEN +cav IF ( .NOT. QSW_underice ) THEN c if using Qsw but not seaice/thsice or coupled, then c ice fraction needs to be taken into account - irr_surf(i,j) = irr_surf(i,j)*(1. _d 0 - FIce(i,j,bi,bj)) - ENDIF +cav irr_surf(i,j) = irr_surf(i,j)*(1. _d 0 - FIce(i,j,bi,bj)) +cav ENDIF #ifdef ML_MEAN_LIGHT SumMLIrr = 0. _d 0 - SumMLDepth = 0. _d 0 + tmp_ML = 0. _d 0 #endif -c C$TAF init ml_stuff = static, Nr DO k=1,Nr -c C$TAF STORE SumMLDepth = ml_stuff IF (hFacC(i,j,k,bi,bj).gt.0) THEN IF (k.eq.1) THEN c Light attenuation in middle of top layer atten = k0*drF(1)/2. _d 0*hFacC(i,j,1,bi,bj) - irr_inst(i,j,1,bi,bj) = irr_surf(i,j)*exp(-atten) + irr_inst(i,j,1) = irr_surf(i,j)*exp(-atten) ELSE c Attenuation from one more layer atten = k0*drF(k)/2. _d 0*hFacC(i,j,k,bi,bj) & + k0*drF(k-1)/2. _d 0*hFacC(i,j,k-1,bi,bj) - irr_inst(i,j,k,bi,bj) = - & irr_inst(i,j,k-1,bi,bj)*exp(-atten) + irr_inst(i,j,k) = + & irr_inst(i,j,k-1)*exp(-atten) ENDIF #ifdef ML_MEAN_LIGHT c Mean irradiance in the mixed layer - IF (delta_dens(i,j,k) .LT. 0.03 _d 0) then - SumMLIrr = SumMLIrr+drF(k)*irr_inst(i,j,k,bi,bj) - SumMLDepth = SumMLDepth+drF(k) - irr_mix(i,j) = SumMLIrr/SumMLDepth + IF ((-rf(k+1) .le. mld(i,j)).and. + & (-rf(k+1).lt.200. _d 0)) THEN + SumMLIrr = SumMLIrr+drF(k)*irr_inst(i,j,k) + tmp_ML = tmp_ML + drF(k) + irr_mix(i,j) = SumMLIrr/tmp_ML ENDIF #endif @@ -233,27 +199,35 @@ ENDDO ENDDO -c --------------------------------------------------------------------- -C Phytoplankton photoadaptation to local light level + DO k=1,Nr DO j=jmin,jmax DO i=imin,imax - irr_eff(i,j,k) = irr_inst(i,j,k,bi,bj) + IF (hFacC(i,j,k,bi,bj) .gt. 0. _d 0) THEN + + irr_eff(i,j,k) = irr_inst(i,j,k) #ifdef ML_MEAN_LIGHT c Inside mixed layer, effective light is set to mean mixed layer light - IF (delta_dens(i,j,k) .LT. 0.03 _d 0) THEN + IF ((-rf(k+1) .le. mld(i,j)).and. + & (-rf(k+1).lt.200. _d 0)) THEN irr_eff(i,j,k) = irr_mix(i,j) ENDIF #endif - irr_mem(i,j,k,bi,bj) = irr_mem(i,j,k,bi,bj) + - & (irr_eff(i,j,k) - irr_mem(i,j,k,bi,bj))* - & min( 1. _d 0, gamma_irr_mem*PTRACERS_dTLev(k) ) + ENDIF ENDDO ENDDO ENDDO + +#ifdef ALLOW_DIAGNOSTICS + IF ( useDiagnostics ) THEN + CALL DIAGNOSTICS_FILL(Qsw,'BLGQSW ',0,1,1,bi,bj,myThid) + CALL DIAGNOSTICS_FILL(irr_inst,'BLGIRRIS',0,Nr,2,bi,bj,myThid) + ENDIF +#endif RETURN END +