MODULE p4zprod !!====================================================================== !! *** MODULE p4zprod *** !! TOP : PISCES !!====================================================================== !! History : 1.0 ! 2004 (O. Aumont) Original code !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 !!---------------------------------------------------------------------- #if defined key_pisces !!---------------------------------------------------------------------- !! 'key_pisces' PISCES bio-model !!---------------------------------------------------------------------- !! p4z_prod : !!---------------------------------------------------------------------- USE oce_trc ! USE trp_trc ! USE sms ! USE p4zday ! IMPLICIT NONE PRIVATE PUBLIC p4z_prod ! called in p4zbio.F90 !!* Substitution # include "domzgr_substitute.h90" !!---------------------------------------------------------------------- !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) !! $Header:$ !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) !!---------------------------------------------------------------------- CONTAINS SUBROUTINE p4z_prod !!--------------------------------------------------------------------- !! *** ROUTINE p4z_prod *** !! !! ** Purpose : Compute the phytoplankton production depending on !! light, temperature and nutrient availability !! !! ** Method : - ??? !!--------------------------------------------------------------------- INTEGER :: ji, jj, jk REAL(wp) :: zsilfac, zfact REAL(wp) :: zprdiachl, zprbiochl, zsilim, ztn, zadap, zadap2 REAL(wp) :: zlim, zsilfac2, zsiborn, zprod REAL(wp) :: zmxltst, zmxlday, zlim1 REAL(wp), DIMENSION(jpi,jpj) :: zmixnano , zmixdiat REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopen, zpislope2n REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsopt , zpislopead REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia , zprbio REAL(wp), DIMENSION(jpi,jpj,jpk) :: zetot2 , zpislopead2 !!--------------------------------------------------------------------- ! Computation of the optimal production ! ------------------------------------- # if defined key_off_degrad prmax(:,:,:) = 0.6 / rjjss * tgfunc(:,:,:) * facvol(:,:,:) # else prmax(:,:,:) = 0.6 / rjjss * tgfunc(:,:,:) # endif CALL p4z_day ! Computation of the day length DO jk = 1, jpkm1 DO jj = 1, jpj DO ji = 1, jpi ! Computation of the P-I slope for nanos and diatoms ! -------------------------------------------------- ztn = MAX( 0., tn(ji,jj,jk) - 15. ) zadap = 1.+ 2.* ztn / ( 2.+ ztn ) zadap2 = 1.e0 zfact = EXP( -0.21 * emoy(ji,jj,jk) ) zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * zfact ) zpislopead2(ji,jj,jk) = pislope2 * ( 1.+ zadap2 * zfact ) zpislopen(ji,jj,jk) = zpislopead(ji,jj,jk) * trn(ji,jj,jk,jpnch) & & / ( trn(ji,jj,jk,jpphy) * 12. + rtrn ) & & / ( prmax(ji,jj,jk) * rjjss * xlimphy(ji,jj,jk) + rtrn ) zpislope2n(ji,jj,jk) = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) & & / ( trn(ji,jj,jk,jpdia) * 12. + rtrn ) & & / ( prmax(ji,jj,jk) * rjjss * xlimdia(ji,jj,jk) + rtrn ) END DO END DO END DO DO jk = 1, jpkm1 DO jj = 1, jpj DO ji = 1, jpi ! Computation of production function ! ---------------------------------- zprbio(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen (ji,jj,jk) * etot(ji,jj,jk) ) ) zprdia(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n(ji,jj,jk) * etot(ji,jj,jk) ) ) END DO END DO END DO DO jk = 1, jpkm1 DO jj = 1, jpj DO ji = 1, jpi ! Si/C of diatoms ! ------------------------ ! Si/C increases with iron stress and silicate availability ! Si/C is arbitrariliy increased for very high Si concentrations ! to mimic the very high ratios observed in the Southern Ocean (silpot2) zlim1 = trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) zlim = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) zsilim = MIN( zprdia(ji,jj,jk) / ( rtrn + prmax(ji,jj,jk) ), & & trn(ji,jj,jk,jpfer) / ( concdfe(ji,jj,jk) + trn(ji,jj,jk,jpfer) ), & & trn(ji,jj,jk,jppo4) / ( concdnh4 + trn(ji,jj,jk,jppo4) ), & & zlim ) zsilfac = 5.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim1 - 0.5 ) ) ) + 1.e0 zsiborn = MAX( 0.e0, ( trn(ji,jj,jk,jpsil) - 15.e-6 ) ) zsilfac2 = 1.+ 3.* zsiborn / ( zsiborn + xksi2 ) zsilfac = MIN( 6.4,zsilfac * zsilfac2) zsopt(ji,jj,jk) = grosip * trn(ji,jj,jk,jpsil) / ( trn(ji,jj,jk,jpsil) + xksi1 ) * zsilfac END DO END DO END DO ! Computation of the limitation term due to ! A mixed layer deeper than the euphotic depth ! -------------------------------------------- DO jj = 1, jpj DO ji = 1, jpi zmxltst = MAX( 0.e0, hmld(ji,jj) - zmeu(ji,jj) ) zmxlday = zmxltst**2 / rjjss zmixnano(ji,jj) = 1.- zmxlday / ( 1.+ zmxlday ) zmixdiat(ji,jj) = 1.- zmxlday / ( 3.+ zmxlday ) END DO END DO DO jk = 1, jpkm1 DO jj = 1, jpj DO ji = 1, jpi IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) THEN ! Mixed-layer effect on production ! -------------------------------- zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj) zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj) ENDIF END DO END DO END DO DO jk = 1, jpkm1 DO jj = 1, jpj DO ji = 1, jpi ! Computation of the maximum light intensity ! ------------------------------------------ zetot2(ji,jj,jk) = etot(ji,jj,jk) * 24. / ( strn(ji,jj) + rtrn ) IF( strn(ji,jj) < 1.e0 ) zetot2(ji,jj,jk) = etot(ji,jj,jk) END DO END DO END DO DO jk = 1, jpkm1 DO jj = 1, jpj DO ji = 1, jpi ! Computation of the various production terms for nanophyto. ! ---------------------------------------------------------- zpislopen(ji,jj,jk) = zpislopead(ji,jj,jk) & & * trn(ji,jj,jk,jpnch) / ( rtrn + trn(ji,jj,jk,jpphy) * 12.) & & / ( prmax(ji,jj,jk) * rjjss * MAX( 0.1, xlimphy(ji,jj,jk) ) + rtrn ) zprbiochl = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen(ji,jj,jk) * zetot2(ji,jj,jk) ) ) prorca(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trn(ji,jj,jk,jpphy) * rfact2 pronew(ji,jj,jk) = prorca(ji,jj,jk) * xnanono3(ji,jj,jk) & & / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) proreg(ji,jj,jk) = prorca(ji,jj,jk) - pronew(ji,jj,jk) zprod = rjjss * prorca(ji,jj,jk) * zprbiochl * trn(ji,jj,jk,jpphy) & & * MAX( 0.1, xlimphy(ji,jj,jk) ) prorca5(ji,jj,jk) = (fecnm)**2 * zprod / chlcnm & & / ( zpislopead(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpnfe) + rtrn ) prorca6(ji,jj,jk) = chlcnm * 144. * zprod & & / ( zpislopead(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpnch) + rtrn ) END DO END DO END DO DO jk = 1, jpkm1 DO jj = 1, jpj DO ji = 1, jpi ! Computation of the various production terms for diatoms ! ------------------------------------------------------- zpislope2n(ji,jj,jk) = zpislopead2(ji,jj,jk) * trn(ji,jj,jk,jpdch) & & / ( rtrn + trn(ji,jj,jk,jpdia) * 12.) & & / ( prmax(ji,jj,jk) * rjjss * MAX( 0.1, xlimdia(ji,jj,jk) ) + rtrn ) zprdiachl = prmax(ji,jj,jk) * ( 1.- EXP( -zetot2(ji,jj,jk) * zpislope2n(ji,jj,jk) ) ) prorca2(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trn(ji,jj,jk,jpdia) * rfact2 pronew2(ji,jj,jk) = prorca2(ji,jj,jk) * xdiatno3(ji,jj,jk) & & / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) proreg2(ji,jj,jk) = prorca2(ji,jj,jk) - pronew2(ji,jj,jk) prorca3(ji,jj,jk) = prorca2(ji,jj,jk) * zsopt(ji,jj,jk) zprod=rjjss * prorca2(ji,jj,jk) * zprdiachl * trn(ji,jj,jk,jpdia) * MAX( 0.1, xlimdia(ji,jj,jk) ) prorca4(ji,jj,jk) = (fecdm)**2 * zprod / chlcdm & & / ( zpislopead2(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpdfe) + rtrn ) prorca7(ji,jj,jk) = chlcdm * 144. * zprod & & / ( zpislopead2(ji,jj,jk) * zetot2(ji,jj,jk) * trn(ji,jj,jk,jpdch) + rtrn ) END DO END DO END DO ! END SUBROUTINE p4z_prod #else !!====================================================================== !! Dummy module : No PISCES bio-model !!====================================================================== CONTAINS SUBROUTINE p4z_prod ! Empty routine END SUBROUTINE p4z_prod #endif !!====================================================================== END MODULE p4zprod