- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/TOP/PISCES/P4Z/p4zprod.F90
r11118 r13463 16 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 17 USE p4zlim ! Co-limitations of differents nutrients 18 USE prtctl _trc! print control for debugging18 USE prtctl ! print control for debugging 19 19 USE iom ! I/O manager 20 20 … … 46 46 REAL(wp) :: texcretd ! 1 - excretd 47 47 48 !! * Substitutions 49 # include "do_loop_substitute.h90" 50 # include "domzgr_substitute.h90" 48 51 !!---------------------------------------------------------------------- 49 52 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 53 56 CONTAINS 54 57 55 SUBROUTINE p4z_prod( kt , knt )58 SUBROUTINE p4z_prod( kt , knt, Kbb, Kmm, Krhs ) 56 59 !!--------------------------------------------------------------------- 57 60 !! *** ROUTINE p4z_prod *** … … 63 66 !!--------------------------------------------------------------------- 64 67 INTEGER, INTENT(in) :: kt, knt ! 68 INTEGER, INTENT(in) :: Kbb, Kmm, Krhs ! time level indices 65 69 ! 66 70 INTEGER :: ji, jj, jk … … 89 93 ! Allocate temporary workspace 90 94 ! 91 zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp 92 zprofen (:,:,:) = 0._wp ; zysopt (:,:,:) = 0._wp 93 zpronewn(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp ; zprdia (:,:,:) = 0._wp 94 zprbio (:,:,:) = 0._wp ; zprdch (:,:,:) = 0._wp ; zprnch (:,:,:) = 0._wp 95 zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 95 zprorcan (:,:,:) = 0._wp ; zprorcad (:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp 96 zprofen (:,:,:) = 0._wp ; zysopt (:,:,:) = 0._wp 97 zpronewn (:,:,:) = 0._wp ; zpronewd (:,:,:) = 0._wp ; zprdia (:,:,:) = 0._wp 98 zprbio (:,:,:) = 0._wp ; zprdch (:,:,:) = 0._wp ; zprnch (:,:,:) = 0._wp 99 zmxl_fac (:,:,:) = 0._wp ; zmxl_chl (:,:,:) = 0._wp 100 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp 96 101 97 102 ! Computation of the optimal production … … 105 110 ! day length in hours 106 111 zstrn(:,:) = 0. 107 DO jj = 1, jpj 108 DO ji = 1, jpi 109 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 110 zargu = MAX( -1., MIN( 1., zargu ) ) 111 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 112 END DO 113 END DO 112 DO_2D( 1, 1, 1, 1 ) 113 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 114 zargu = MAX( -1., MIN( 1., zargu ) ) 115 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 116 END_2D 114 117 115 118 ! Impact of the day duration and light intermittency on phytoplankton growth 116 DO jk = 1, jpkm1 117 DO jj = 1 ,jpj 118 DO ji = 1, jpi 119 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 120 zval = MAX( 1., zstrn(ji,jj) ) 121 IF( gdept_n(ji,jj,jk) <= hmld(ji,jj) ) THEN 122 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 123 ENDIF 124 zmxl_chl(ji,jj,jk) = zval / 24. 125 zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 126 ENDIF 127 END DO 128 END DO 129 END DO 119 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 120 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 121 zval = MAX( 1., zstrn(ji,jj) ) 122 IF( gdept(ji,jj,jk,Kmm) <= hmld(ji,jj) ) THEN 123 zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 124 ENDIF 125 zmxl_chl(ji,jj,jk) = zval / 24. 126 zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 127 ENDIF 128 END_3D 130 129 131 130 zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) … … 136 135 137 136 ! Computation of the P-I slope for nanos and diatoms 138 DO jk = 1, jpkm1 139 DO jj = 1, jpj 140 DO ji = 1, jpi 141 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 142 ztn = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 143 zadap = xadap * ztn / ( 2.+ ztn ) 144 zconctemp = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 145 zconctemp2 = trb(ji,jj,jk,jpdia) - zconctemp 146 ! 147 zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap * EXP( -0.25 * enano(ji,jj,jk) ) ) & 148 & * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 149 ! 150 zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 151 & * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 152 ENDIF 153 END DO 154 END DO 155 END DO 156 157 DO jk = 1, jpkm1 158 DO jj = 1, jpj 159 DO ji = 1, jpi 160 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 161 ! Computation of production function for Carbon 162 ! --------------------------------------------- 163 zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 164 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 165 zpisloped = zpislopeadd(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 166 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 167 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 168 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 169 ! Computation of production function for Chlorophyll 170 !-------------------------------------------------- 171 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 172 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 173 zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 174 zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 175 ENDIF 176 END DO 177 END DO 178 END DO 137 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 138 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 139 ztn = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) - 15. ) 140 zadap = xadap * ztn / ( 2.+ ztn ) 141 zconctemp = MAX( 0.e0 , tr(ji,jj,jk,jpdia,Kbb) - xsizedia ) 142 zconctemp2 = tr(ji,jj,jk,jpdia,Kbb) - zconctemp 143 ! 144 zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap * EXP( -0.25 * enano(ji,jj,jk) ) ) & 145 & * tr(ji,jj,jk,jpnch,Kbb) /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn) 146 ! 147 zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) & 148 & * tr(ji,jj,jk,jpdch,Kbb) /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn) 149 ENDIF 150 END_3D 151 152 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 153 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 154 ! Computation of production function for Carbon 155 ! --------------------------------------------- 156 zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 157 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 158 zpisloped = zpislopeadd(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 159 & * zmxl_fac(ji,jj,jk) * rday + rtrn) 160 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 161 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 162 ! Computation of production function for Chlorophyll 163 !-------------------------------------------------- 164 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 165 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 166 zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 167 zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 168 ENDIF 169 END_3D 179 170 180 171 ! Computation of a proxy of the N/C ratio 181 172 ! --------------------------------------- 182 DO jk = 1, jpkm1 183 DO jj = 1, jpj 184 DO ji = 1, jpi 185 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & 186 & * zprmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 187 quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 188 zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) ) & 189 & * zprmaxd(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 190 quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 191 END DO 192 END DO 193 END DO 194 195 196 DO jk = 1, jpkm1 197 DO jj = 1, jpj 198 DO ji = 1, jpi 199 200 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 201 ! Si/C of diatoms 202 ! ------------------------ 203 ! Si/C increases with iron stress and silicate availability 204 ! Si/C is arbitrariliy increased for very high Si concentrations 205 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 206 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 207 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 208 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 209 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 210 IF (gphit(ji,jj) < -30 ) THEN 211 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 212 ELSE 213 zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 ) 214 ENDIF 215 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 216 ENDIF 217 END DO 218 END DO 219 END DO 173 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 174 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & 175 & * zprmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 176 quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 177 zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) ) & 178 & * zprmaxd(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 179 quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 180 END_3D 181 182 183 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 184 185 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 186 ! Si/C of diatoms 187 ! ------------------------ 188 ! Si/C increases with iron stress and silicate availability 189 ! Si/C is arbitrariliy increased for very high Si concentrations 190 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 191 zlim = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi1 ) 192 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 193 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 194 zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) 195 IF (gphit(ji,jj) < -30 ) THEN 196 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 197 ELSE 198 zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 ) 199 ENDIF 200 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 201 ENDIF 202 END_3D 220 203 221 204 ! Mixed-layer effect on production 222 205 ! Sea-ice effect on production 223 206 224 DO jk = 1, jpkm1 225 DO jj = 1, jpj 226 DO ji = 1, jpi 227 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 228 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 229 END DO 230 END DO 231 END DO 207 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 208 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 209 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 210 END_3D 232 211 233 212 ! Computation of the various production terms 234 DO jk = 1, jpkm1 235 DO jj = 1, jpj 236 DO ji = 1, jpi 237 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 238 ! production terms for nanophyto. (C) 239 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 240 zpronewn(ji,jj,jk) = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 241 ! 242 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 243 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 244 zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 245 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 246 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 247 & * zmax * trb(ji,jj,jk,jpphy) * rfact2 248 ! production terms for diatoms (C) 249 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 250 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 251 ! 252 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 253 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 254 zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 255 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 256 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & 257 & * zmax * trb(ji,jj,jk,jpdia) * rfact2 258 ENDIF 259 END DO 260 END DO 261 END DO 213 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 214 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 215 ! production terms for nanophyto. (C) 216 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2 217 zpronewn(ji,jj,jk) = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 218 ! 219 zratio = tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * fecnm + rtrn ) 220 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 221 zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 222 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 223 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & 224 & * zmax * tr(ji,jj,jk,jpphy,Kbb) * rfact2 225 ! production terms for diatoms (C) 226 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2 227 zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 228 ! 229 zratio = tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * fecdm + rtrn ) 230 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 231 zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 232 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 233 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & 234 & * zmax * tr(ji,jj,jk,jpdia,Kbb) * rfact2 235 ENDIF 236 END_3D 262 237 263 238 ! Computation of the chlorophyll production terms 264 DO jk = 1, jpkm1 265 DO jj = 1, jpj 266 DO ji = 1, jpi 267 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 268 ! production terms for nanophyto. ( chlorophyll ) 269 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 270 zprod = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 271 zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 272 chlcnm_n = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 273 zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 274 & ( zpislopeadn(ji,jj,jk) * znanotot +rtrn) 275 ! production terms for diatoms ( chlorophyll ) 276 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 277 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 278 zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 279 chlcdm_n = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 280 zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 281 & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 282 ! Update the arrays TRA which contain the Chla sources and sinks 283 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln * texcretn 284 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld * texcretd 285 ENDIF 286 END DO 287 END DO 288 END DO 239 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 240 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 241 ! production terms for nanophyto. ( chlorophyll ) 242 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 243 zprod = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 244 zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 245 chlcnm_n = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *ts(ji,jj,jk,jp_tem,Kmm))) * (1. - 1.14 / 43.4 * 20.)) 246 zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 247 & ( zpislopeadn(ji,jj,jk) * znanotot +rtrn) 248 ! production terms for diatoms ( chlorophyll ) 249 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 250 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 251 zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 252 chlcdm_n = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * ts(ji,jj,jk,jp_tem,Kmm))) * (1. - 1.14 / 43.4 * 20.)) 253 zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 254 & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 255 ! Update the arrays TRA which contain the Chla sources and sinks 256 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn 257 tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) + zprochld * texcretd 258 ENDIF 259 END_3D 289 260 290 261 ! Update the arrays TRA which contain the biological sources and sinks 291 DO jk = 1, jpkm1 292 DO jj = 1, jpj 293 DO ji =1 ,jpi 294 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 295 zproreg = zprorcan(ji,jj,jk) - zpronewn(ji,jj,jk) 296 zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 297 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 298 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 299 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk) 300 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproreg - zproreg2 301 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorcan(ji,jj,jk) * texcretn 302 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcretn 303 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcretd 304 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcretd 305 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 306 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zdocprod 307 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) & 308 & + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) 309 ! 310 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 311 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 312 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 313 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 314 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 315 & - rno3 * ( zproreg + zproreg2 ) 316 ENDIF 317 END DO 318 END DO 319 END DO 262 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 263 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 264 zproreg = zprorcan(ji,jj,jk) - zpronewn(ji,jj,jk) 265 zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 266 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 267 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 268 tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk) 269 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zproreg - zproreg2 270 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zprorcan(ji,jj,jk) * texcretn 271 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn 272 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) + zprorcad(ji,jj,jk) * texcretd 273 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd 274 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 275 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zdocprod 276 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + o2ut * ( zproreg + zproreg2) & 277 & + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) 278 ! 279 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 280 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zfeup 281 tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 282 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 283 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 284 & - rno3 * ( zproreg + zproreg2 ) 285 ENDIF 286 END_3D 320 287 ! 321 288 IF( ln_ligand ) THEN 322 289 zpligprod1(:,:,:) = 0._wp ; zpligprod2(:,:,:) = 0._wp 323 DO jk = 1, jpkm1 324 DO jj = 1, jpj 325 DO ji =1 ,jpi 326 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 327 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 328 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 329 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 330 zpligprod1(ji,jj,jk) = zdocprod * ldocp 331 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 332 ENDIF 333 END DO 334 END DO 335 END DO 290 DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 291 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 292 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 293 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 294 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 295 zpligprod1(ji,jj,jk) = zdocprod * ldocp 296 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 297 ENDIF 298 END_3D 336 299 ENDIF 337 300 … … 341 304 & tpp = glob_sum( 'p4zprod', ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 342 305 343 IF( lk_iomput ) THEN 344 IF( knt == nrdttrc ) THEN 345 ALLOCATE( zw2d(jpi,jpj), zw3d(jpi,jpj,jpk) ) 346 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s 347 ! 348 IF( iom_use( "PPPHYN" ) .OR. iom_use( "PPPHYD" ) ) THEN 349 zw3d(:,:,:) = zprorcan(:,:,:) * zfact * tmask(:,:,:) ! primary production by nanophyto 350 CALL iom_put( "PPPHYN" , zw3d ) 351 ! 352 zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) ! primary production by diatomes 353 CALL iom_put( "PPPHYD" , zw3d ) 354 ENDIF 355 IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) ) THEN 356 zw3d(:,:,:) = zpronewn(:,:,:) * zfact * tmask(:,:,:) ! new primary production by nanophyto 357 CALL iom_put( "PPNEWN" , zw3d ) 358 ! 359 zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:) ! new primary production by diatomes 360 CALL iom_put( "PPNEWD" , zw3d ) 361 ENDIF 362 IF( iom_use( "PBSi" ) ) THEN 363 zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ! biogenic silica production 364 CALL iom_put( "PBSi" , zw3d ) 365 ENDIF 366 IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) ) THEN 367 zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron production by nanophyto 368 CALL iom_put( "PFeN" , zw3d ) 369 ! 370 zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:) ! biogenic iron production by diatomes 371 CALL iom_put( "PFeD" , zw3d ) 372 ENDIF 373 IF( iom_use( "LPRODP" ) ) THEN 374 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 375 CALL iom_put( "LPRODP" , zw3d ) 376 ENDIF 377 IF( iom_use( "LDETP" ) ) THEN 378 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 379 CALL iom_put( "LDETP" , zw3d ) 380 ENDIF 381 IF( iom_use( "Mumax" ) ) THEN 382 zw3d(:,:,:) = zprmaxn(:,:,:) * tmask(:,:,:) ! Maximum growth rate 383 CALL iom_put( "Mumax" , zw3d ) 384 ENDIF 385 IF( iom_use( "MuN" ) .OR. iom_use( "MuD" ) ) THEN 386 zw3d(:,:,:) = zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:) ! Realized growth rate for nanophyto 387 CALL iom_put( "MuN" , zw3d ) 388 ! 389 zw3d(:,:,:) = zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:) ! Realized growth rate for diatoms 390 CALL iom_put( "MuD" , zw3d ) 391 ENDIF 392 IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) ) THEN 393 zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 394 CALL iom_put( "LNlight" , zw3d ) 395 ! 396 zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 397 CALL iom_put( "LDlight" , zw3d ) 398 ENDIF 399 IF( iom_use( "TPP" ) ) THEN 400 zw3d(:,:,:) = ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:) ! total primary production 401 CALL iom_put( "TPP" , zw3d ) 402 ENDIF 403 IF( iom_use( "TPNEW" ) ) THEN 404 zw3d(:,:,:) = ( zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:) ! total new production 405 CALL iom_put( "TPNEW" , zw3d ) 406 ENDIF 407 IF( iom_use( "TPBFE" ) ) THEN 408 zw3d(:,:,:) = ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:) ! total biogenic iron production 409 CALL iom_put( "TPBFE" , zw3d ) 410 ENDIF 411 IF( iom_use( "INTPPPHYN" ) .OR. iom_use( "INTPPPHYD" ) ) THEN 412 zw2d(:,:) = 0. 413 DO jk = 1, jpkm1 414 zw2d(:,:) = zw2d(:,:) + zprorcan(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated primary produc. by nano 415 ENDDO 416 CALL iom_put( "INTPPPHYN" , zw2d ) 417 ! 418 zw2d(:,:) = 0. 419 DO jk = 1, jpkm1 420 zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated primary produc. by diatom 421 ENDDO 422 CALL iom_put( "INTPPPHYD" , zw2d ) 423 ENDIF 424 IF( iom_use( "INTPP" ) ) THEN 425 zw2d(:,:) = 0. 426 DO jk = 1, jpkm1 427 zw2d(:,:) = zw2d(:,:) + ( zprorcan(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 428 ENDDO 429 CALL iom_put( "INTPP" , zw2d ) 430 ENDIF 431 IF( iom_use( "INTPNEW" ) ) THEN 432 zw2d(:,:) = 0. 433 DO jk = 1, jpkm1 434 zw2d(:,:) = zw2d(:,:) + ( zpronewn(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated new prod 435 ENDDO 436 CALL iom_put( "INTPNEW" , zw2d ) 437 ENDIF 438 IF( iom_use( "INTPBFE" ) ) THEN ! total biogenic iron production ( vertically integrated ) 439 zw2d(:,:) = 0. 440 DO jk = 1, jpkm1 441 zw2d(:,:) = zw2d(:,:) + ( zprofen(:,:,jk) + zprofed(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert integr. bfe prod 442 ENDDO 443 CALL iom_put( "INTPBFE" , zw2d ) 444 ENDIF 445 IF( iom_use( "INTPBSI" ) ) THEN ! total biogenic silica production ( vertically integrated ) 446 zw2d(:,:) = 0. 447 DO jk = 1, jpkm1 448 zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * zysopt(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert integr. bsi prod 449 ENDDO 450 CALL iom_put( "INTPBSI" , zw2d ) 451 ENDIF 452 IF( iom_use( "tintpp" ) ) CALL iom_put( "tintpp" , tpp * zfact ) ! global total integrated primary production molC/s 453 ! 454 DEALLOCATE( zw2d, zw3d ) 306 IF( lk_iomput .AND. knt == nrdttrc ) THEN 307 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s 308 ! 309 CALL iom_put( "PPPHYN" , zprorcan(:,:,:) * zfact * tmask(:,:,:) ) ! primary production by nanophyto 310 CALL iom_put( "PPPHYD" , zprorcad(:,:,:) * zfact * tmask(:,:,:) ) ! primary production by diatomes 311 CALL iom_put( "PPNEWN" , zpronewn(:,:,:) * zfact * tmask(:,:,:) ) ! new primary production by nanophyto 312 CALL iom_put( "PPNEWD" , zpronewd(:,:,:) * zfact * tmask(:,:,:) ) ! new primary production by diatomes 313 CALL iom_put( "PBSi" , zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ) ! biogenic silica production 314 CALL iom_put( "PFeN" , zprofen(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by nanophyto 315 CALL iom_put( "PFeD" , zprofed(:,:,:) * zfact * tmask(:,:,:) ) ! biogenic iron production by diatomes 316 IF( ln_ligand ) THEN 317 CALL iom_put( "LPRODP" , zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 318 CALL iom_put( "LDETP" , zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) ) 455 319 ENDIF 320 CALL iom_put( "Mumax" , zprmaxn(:,:,:) * tmask(:,:,:) ) ! Maximum growth rate 321 CALL iom_put( "MuN" , zprbio(:,:,:) * xlimphy(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for nanophyto 322 CALL iom_put( "MuD" , zprdia(:,:,:) * xlimdia(:,:,:) * tmask(:,:,:) ) ! Realized growth rate for diatoms 323 CALL iom_put( "LNlight" , zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ) ! light limitation term 324 CALL iom_put( "LDlight" , zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ) 325 CALL iom_put( "TPP" , ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:) ) ! total primary production 326 CALL iom_put( "TPNEW" , ( zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:) ) ! total new production 327 CALL iom_put( "TPBFE" , ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:) ) ! total biogenic iron production 328 CALL iom_put( "tintpp" , tpp * zfact ) ! global total integrated primary production molC/s 456 329 ENDIF 457 330 458 IF( ln_ctl) THEN ! print mean trends (used for debugging)331 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 459 332 WRITE(charout, FMT="('prod')") 460 CALL prt_ctl_ trc_info(charout)461 CALL prt_ctl _trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)333 CALL prt_ctl_info( charout, cdcomp = 'top' ) 334 CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm) 462 335 ENDIF 463 336 ! … … 490 363 ENDIF 491 364 ! 492 REWIND( numnatp_ref ) ! Namelist nampisprod in reference namelist : Pisces phytoplankton production493 365 READ ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 494 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist', lwp ) 495 REWIND( numnatp_cfg ) ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production 366 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist' ) 496 367 READ ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 497 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' , lwp)368 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' ) 498 369 IF(lwm) WRITE( numonp, namp4zprod ) 499 370
Note: See TracChangeset
for help on using the changeset viewer.