Changeset 10362
- Timestamp:
- 2018-11-30T16:38:17+01:00 (6 years ago)
- Location:
- NEMO/trunk/src/TOP/PISCES
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/TOP/PISCES/P4Z/p4zfechem.F90
r10069 r10362 27 27 LOGICAL :: ln_fechem !: boolean for complex iron chemistry following Tagliabue and voelker 28 28 LOGICAL :: ln_ligvar !: boolean for variable ligand concentration following Tagliabue and voelker 29 LOGICAL :: ln_fecolloid !: boolean for variable colloidal fraction30 29 REAL(wp), PUBLIC :: xlam1 !: scavenging rate of Iron 31 30 REAL(wp), PUBLIC :: xlamdust !: scavenging rate of Iron by dust … … 68 67 REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za2 69 68 REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2 70 REAL(wp) :: ztfe, zoxy, zhplus 69 REAL(wp) :: ztfe, zoxy, zhplus, zxlam 71 70 REAL(wp) :: zaggliga, zaggligb 72 71 REAL(wp) :: dissol, zligco 72 REAL(wp) :: zrfact2 73 73 CHARACTER (len=25) :: charout 74 74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, precip, zFeL1 75 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcoll3d, zscav3d, zlcoll3d 75 76 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zFeL2, zTL2, zFe2, zFeP 76 77 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zstrn, zstrn2 … … 129 130 ! ------------------------------------------------------------ 130 131 DO jn = 1, 2 131 DO jk = 1, jpkm1132 DO jj = 1, jpj133 DO ji = 1, jpi134 zlight= etot(ji,jj,jk) * zstrn(ji,jj) * REAL( 2-jn, wp )135 zzstrn2 = zstrn2(ji,jj) * REAL( 2-jn, wp ) + (1. - zstrn2(ji,jj) ) * REAL( jn-1, wp )136 ! Calculate ligand concentrations : assume 2/3rd of excess goes to137 ! strong ligands (L1) and 1/3rd to weak ligands (L2)138 ztligand = ztotlig(ji,jj,jk) - ligand * 1E9139 zTL1(ji,jj,jk) = 0.000001 + 0.67 * ztligand140 zTL2(ji,jj,jk) = ligand * 1E9 - 0.000001 + 0.33 * ztligand141 ! ionic strength from Millero et al. 1987142 zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) )143 zoxy = trb(ji,jj,jk,jpoxy)144 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005)145 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tempis(ji,jj,jk) + 273.15 ) &146 &- 0.04406 * SQRT( salinprac(ji,jj,jk) ) - 0.002847 * salinprac(ji,jj,jk)147 zkox = ( 10.** zkox ) * spd148 zkox = zkox * MAX( 1.e-6, zoxy) / ( chemo2(ji,jj,jk) + rtrn )149 ! PHOTOREDUCTION of complexed iron : Tagliabue and Arrigo (2006)150 zkph2 = MAX( 0., 15. * zlight / ( zlight + 2. ) ) * (1. - fr_i(ji,jj))151 zkph1 = zkph2 / 5.152 ! pass the dfe concentration from PISCES153 ztfe= trb(ji,jj,jk,jpfer) * 1e9154 ! ----------------------------------------------------------155 ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION156 ! As shown in Tagliabue and Voelker (2009), Fe3+ is the root of a 3rd order polynom.157 ! ----------------------------------------------------------158 ! calculate some parameters159 za = 1+ ks / kpr160 zb = 1 + ( zkph1 + kth ) / ( zkox + rtrn)161 zc = 1 + zkph2 / ( zkox + rtrn)162 zkappa1 = ( kb1 + zkph1 + kth ) / kl1163 zkappa2 = ( kb2 + zkph2 ) / kl2164 za2 = zTL1(ji,jj,jk) * zb / za + zTL2(ji,jj,jk) * zc / za + zkappa1 + zkappa2 - ztfe / za165 za1 = zkappa2 * zTL1(ji,jj,jk) * zb / za + zkappa1 * zTL2(ji,jj,jk) * zc / za &132 DO jk = 1, jpkm1 133 DO jj = 1, jpj 134 DO ji = 1, jpi 135 zlight = etot(ji,jj,jk) * zstrn(ji,jj) * REAL( 2-jn, wp ) 136 zzstrn2 = zstrn2(ji,jj) * REAL( 2-jn, wp ) + (1. - zstrn2(ji,jj) ) * REAL( jn-1, wp ) 137 ! Calculate ligand concentrations : assume 2/3rd of excess goes to 138 ! strong ligands (L1) and 1/3rd to weak ligands (L2) 139 ztligand = ztotlig(ji,jj,jk) - ligand * 1E9 140 zTL1(ji,jj,jk) = 0.000001 + 0.67 * ztligand 141 zTL2(ji,jj,jk) = ligand * 1E9 - 0.000001 + 0.33 * ztligand 142 ! ionic strength from Millero et al. 1987 143 zph = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 144 zoxy = trb(ji,jj,jk,jpoxy) 145 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 146 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tempis(ji,jj,jk) + 273.15 ) & 147 & - 0.04406 * SQRT( salinprac(ji,jj,jk) ) - 0.002847 * salinprac(ji,jj,jk) 148 zkox = ( 10.** zkox ) * spd 149 zkox = zkox * MAX( 1.e-6, zoxy) / ( chemo2(ji,jj,jk) + rtrn ) 150 ! PHOTOREDUCTION of complexed iron : Tagliabue and Arrigo (2006) 151 zkph2 = MAX( 0., 15. * zlight / ( zlight + 2. ) ) * (1. - fr_i(ji,jj)) 152 zkph1 = zkph2 / 5. 153 ! pass the dfe concentration from PISCES 154 ztfe = trb(ji,jj,jk,jpfer) * 1e9 155 ! ---------------------------------------------------------- 156 ! ANALYTICAL SOLUTION OF ROOTS OF THE FE3+ EQUATION 157 ! As shown in Tagliabue and Voelker (2009), Fe3+ is the root of a 3rd order polynom. 158 ! ---------------------------------------------------------- 159 ! calculate some parameters 160 za = 1.0 + ks / kpr 161 zb = 1.0 + zkph2 / ( zkox ) 162 zc = 1.0 + ( zkph1 + kth ) / ( zkox ) 163 zkappa1 = ( kb1 + zkph1 + kth ) / kl1 164 zkappa2 = ( kb2 + zkph2 ) / kl2 165 za2 = zTL2(ji,jj,jk) * zb / za + zTL2(ji,jj,jk) * zc / za + zkappa1 + zkappa2 - ztfe / za 166 za1 = zkappa1 * zTL2(ji,jj,jk) * zb / za + zkappa2 * zTL1(ji,jj,jk) * zc / za & 166 167 & + zkappa1 * zkappa2 - ( zkappa1 + zkappa2 ) * ztfe / za 167 za0 = -zkappa1 * zkappa2 * ztfe / za 168 zp = za1 - za2 * za2 / 3. 169 zq = za2 * za2 * za2 * 2. / 27. - za2 * za1 / 3. + za0 170 zp3 = zp / 3. 171 zq2 = zq / 2. 172 zd = zp3 * zp3 * zp3 + zq2 * zq2 173 zr = zq / ABS( zq ) * SQRT( ABS( zp ) / 3. ) 174 ! compute the roots 175 IF( zp > 0.) THEN 176 ! zphi = ASINH( zq / ( 2. * zr * zr * zr ) ) 177 zphi = zq / ( 2. * zr * zr * zr ) 178 zphi = LOG( zphi + SQRT( zphi * zphi + 1 ) ) ! asinh(x) = log(x + sqrt(x^2+1)) 179 zxs = -2. * zr * SINH( zphi / 3. ) - za1 / 3. 180 ELSE 181 IF( zd > 0. ) THEN 182 zfff = MAX( 1., zq / ( 2. * zr * zr * zr ) ) 183 ! zphi = ACOSH( zfff ) 184 zphi = LOG( zfff + SQRT( zfff * zfff - 1 ) ) ! acosh(x) = log(x + sqrt(x^2-1)) 185 zxs = -2. * zr * COSH( zphi / 3. ) - za1 / 3. 168 za0 = -zkappa1 * zkappa2 * ztfe / za 169 zp = za1 - za2 * za2 / 3. 170 zq = za2 * za2 * za2 * 2. / 27. - za2 * za1 / 3. + za0 171 zp3 = zp / 3. 172 zq2 = zq / 2. 173 zd = zp3 * zp3 * zp3 + zq2 * zq2 174 zr = zq / ABS( zq ) * SQRT( ABS( zp ) / 3. ) 175 ! compute the roots 176 IF( zp > 0.) THEN 177 ! zphi = ASINH( zq / ( 2. * zr * zr * zr ) ) 178 zphi = zq / ( 2. * zr * zr * zr ) 179 zphi = LOG( zphi + SQRT( zphi * zphi + 1 ) ) ! asinh(x) = log(x + sqrt(x^2+1)) 180 zxs = -2. * zr * SINH( zphi / 3. ) - za1 / 3. 186 181 ELSE 187 zfff = MIN( 1., zq / ( 2. * zr * zr * zr ) ) 188 zphi = ACOS( zfff ) 189 DO jic = 1, 3 190 zfunc = -2 * zr * COS( zphi / 3. + 2. * REAL( jic - 1, wp ) * rpi / 3. ) - za2 / 3. 191 IF( zfunc > 0. .AND. zfunc <= ztfe) zxs = zfunc 192 END DO 182 IF( zd > 0. ) THEN 183 zfff = MAX( 1., zq / ( 2. * zr * zr * zr ) ) 184 ! zphi = ACOSH( zfff ) 185 zphi = LOG( zfff + SQRT( zfff * zfff - 1 ) ) ! acosh(x) = log(x + sqrt(x^2-1)) 186 zxs = -2. * zr * COSH( zphi / 3. ) - za1 / 3. 187 ELSE 188 zfff = MIN( 1., zq / ( 2. * zr * zr * zr ) ) 189 zphi = ACOS( zfff ) 190 DO jic = 1, 3 191 zfunc = -2 * zr * COS( zphi / 3. + 2. * REAL( jic - 1, wp ) * rpi / 3. ) - za2 / 3. 192 IF( zfunc > 0. .AND. zfunc <= ztfe) zxs = zfunc 193 END DO 194 ENDIF 193 195 ENDIF 194 ENDIF195 ! solve for the other Fe species196 zzFe3 = MAX( 0., zxs)197 zzFep = MAX( 0., ( ks * zzFe3 / kpr) )198 zkappa2 = ( kb2 + zkph2 ) / kl2199 zzFeL2 = MAX( 0., ( zzFe3 * zTL2(ji,jj,jk) ) / ( zkappa2 + zzFe3) )200 zzFeL1 = MAX( 0., ( ztfe / zb - za / zb * zzFe3 - zc / zb * zzFeL2 ) )201 zzFe2 = MAX( 0., ( ( zkph1 * zzFeL1 + zkph2 * zzFeL2 ) / zkox ) )202 zFe3(ji,jj,jk) = zFe3(ji,jj,jk) + zzFe3* zzstrn2203 zFe2(ji,jj,jk) = zFe2(ji,jj,jk) + zzFe2 * zzstrn2204 zFeL2(ji,jj,jk) = zFeL2(ji,jj,jk) + zzFeL2* zzstrn2205 zFeL1(ji,jj,jk) = zFeL1(ji,jj,jk) + zzFeL1* zzstrn2206 zFeP(ji,jj,jk) = zFeP(ji,jj,jk) + zzFeP * zzstrn2196 ! solve for the other Fe species 197 zzFe3 = MAX( 0., zxs ) 198 zzFep = MAX( 0., ( ks * zzFe3 / kpr ) ) 199 zzFeL1 = MAX( 0., ( zzFe3 * zTL1(ji,jj,jk) ) / ( zkappa1 + zzFe3 ) ) 200 zzFeL2 = (ztfe - za * zzFe3 - zc * zzFeL1 ) / zb 201 zzFe2 = MAX( 0., ( ( ( zkph1 + kth ) * zzFeL1 + zkph2 * zzFeL2 ) / zkox ) ) 202 zzFep = ztfe - zzFe3 - zzFe2 - zzFeL1 - zzFeL2 203 zFe3(ji,jj,jk) = zFe3(ji,jj,jk) + zzFe3 * zzstrn2 204 zFe2(ji,jj,jk) = zFe2(ji,jj,jk) + zzFe2 * zzstrn2 205 zFeL2(ji,jj,jk) = zFeL2(ji,jj,jk) + zzFeL2 * zzstrn2 206 zFeL1(ji,jj,jk) = zFeL1(ji,jj,jk) + zzFeL1 * zzstrn2 207 zFeP(ji,jj,jk) = zFeP(ji,jj,jk) + zzFeP * zzstrn2 208 END DO 207 209 END DO 208 210 END DO 209 END DO210 211 END DO 211 212 ELSE … … 218 219 DO jj = 1, jpj 219 220 DO ji = 1, jpi 220 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk)221 zkeq = fekeq(ji,jj,jk)222 zfesatur = zTL1(ji,jj,jk) * 1E-9223 ztfe = trb(ji,jj,jk,jpfer)221 zTL1(ji,jj,jk) = ztotlig(ji,jj,jk) 222 zkeq = fekeq(ji,jj,jk) 223 zfesatur = zTL1(ji,jj,jk) * 1E-9 224 ztfe = trb(ji,jj,jk,jpfer) 224 225 ! Fe' is the root of a 2nd order polynom 225 226 zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe ) & 226 & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2 &227 & 227 & + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2 & 228 & + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 228 229 zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 229 230 zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) … … 242 243 ! Scavenging onto dust is also included as evidenced from the DUNE experiments. 243 244 ! -------------------------------------------------------------------------------------- 245 zhplus = max( rtrn, hi(ji,jj,jk) ) 246 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 247 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 248 & + fesol(ji,jj,jk,5) / zhplus ) 244 249 IF( ln_fechem ) THEN 245 250 zfeequi = ( zFe3(ji,jj,jk) + zFe2(ji,jj,jk) + zFeP(ji,jj,jk) ) * 1E-9 246 251 zfecoll = ( 0.3 * zFeL1(ji,jj,jk) + 0.5 * zFeL2(ji,jj,jk) ) * 1E-9 252 precip(ji,jj,jk) = 0.0 247 253 ELSE 248 254 zfeequi = zFe3(ji,jj,jk) * 1E-9 249 IF (ln_fecolloid) THEN 250 zhplus = max( rtrn, hi(ji,jj,jk) ) 251 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 252 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 253 & + fesol(ji,jj,jk,5) / zhplus ) 254 zfecoll = max( ( 0.1 * zFeL1(ji,jj,jk) * 1E-9 ), ( zFeL1(ji,jj,jk) * 1E-9 -fe3sol ) ) 255 ELSE 256 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 257 fe3sol = 0. 258 ENDIF 255 zhplus = max( rtrn, hi(ji,jj,jk) ) 256 fe3sol = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2 & 257 & + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4) & 258 & + fesol(ji,jj,jk,5) / zhplus ) 259 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 260 ! precipitation of Fe3+, creation of nanoparticles 261 precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 259 262 ENDIF 260 263 ! 261 264 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 262 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 263 zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc 265 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) & 266 & * EXP( -gdept_n(ji,jj,jk) / 540. ) 267 IF (ln_ligand) THEN 268 zxlam = xlam1 * MAX( 1.E-3, EXP(-2 * etot(ji,jj,jk) / 10. ) * (1. - EXP(-2 * trb(ji,jj,jk,jpoxy) / 100.E-6 ) )) 269 ELSE 270 zxlam = xlam1 * 1.0 271 ENDIF 272 zlam1b = 3.e-5 + xlamdust * zdust + zxlam * ztrc 264 273 zscave = zfeequi * zlam1b * xstep 265 274 … … 267 276 ! to later allocate scavenged iron to the different organic pools 268 277 ! --------------------------------------------------------- 269 zdenom1 = xlam1* trb(ji,jj,jk,jppoc) / zlam1b270 zdenom2 = xlam1* trb(ji,jj,jk,jpgoc) / zlam1b278 zdenom1 = zxlam * trb(ji,jj,jk,jppoc) / zlam1b 279 zdenom2 = zxlam * trb(ji,jj,jk,jpgoc) / zlam1b 271 280 272 281 ! Increased scavenging for very high iron concentrations found near the coasts … … 276 285 zlamfac = MIN( 1. , zlamfac ) 277 286 zdep = MIN( 1., 1000. / gdept_n(ji,jj,jk) ) 278 zlam1b = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 279 zcoag = zfeequi * zlam1b * xstep + 1E-4 * ( 1. - zlamfac ) * zdep * xstep * trb(ji,jj,jk,jpfer) 287 zcoag = 1E-4 * ( 1. - zlamfac ) * zdep * xstep * trb(ji,jj,jk,jpfer) 280 288 281 289 ! Compute the coagulation of colloidal iron. This parameterization … … 283 291 ! It requires certainly some more work as it is very poorly constrained. 284 292 ! ---------------------------------------------------------------- 285 zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) &286 & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) )293 zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) & 294 & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) 287 295 zaggdfea = zlam1a * xstep * zfecoll 288 296 ! 289 zlam1b = 3.53E3 *trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk)297 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 290 298 zaggdfeb = zlam1b * xstep * zfecoll 291 !292 ! precipitation of Fe3+, creation of nanoparticles293 precip(ji,jj,jk) = MAX( 0., ( zfeequi - fe3sol ) ) * kfep * xstep294 299 ! 295 300 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb & … … 297 302 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 298 303 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 304 zscav3d(ji,jj,jk) = zscave 305 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 299 306 ! 300 307 END DO … … 317 324 ! 318 325 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 319 zligco = MAX( ( 0.1 * trb(ji,jj,jk,jplgw) ), ( trb(ji,jj,jk,jplgw) - fe3sol ))326 zligco = 0.5 * trn(ji,jj,jk,jplgw) 320 327 zaggliga = zlam1a * xstep * zligco 321 328 zaggligb = zlam1b * xstep * zligco 322 329 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk) 323 330 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 331 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb 324 332 END DO 325 333 END DO … … 328 336 IF( .NOT.ln_fechem) THEN 329 337 plig(:,:,:) = MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) ) 330 plig(:,:,:) = MAX( 0. , plig(:,:,:) )331 338 ENDIF 332 339 ! … … 336 343 IF( lk_iomput ) THEN 337 344 IF( knt == nrdttrc ) THEN 345 zrfact2 = 1.e3 * rfact2r ! conversion from mol/L/timestep into mol/m3/s 338 346 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 339 347 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 340 348 IF( iom_use("TL1") ) CALL iom_put("TL1" , zTL1 (:,:,:) * tmask(:,:,:) ) ! TL1 341 349 IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL 342 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 350 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 351 IF( iom_use("FESCAV") ) CALL iom_put("FESCAV" , zscav3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 352 IF( iom_use("FECOLL") ) CALL iom_put("FECOLL" , zcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 353 IF( iom_use("LGWCOLL")) CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 343 354 IF( ln_fechem ) THEN 344 355 IF( iom_use("Fe2") ) CALL iom_put("Fe2" , zFe2 (:,:,:) * tmask(:,:,:) ) ! Fe2+ … … 380 391 INTEGER :: ios ! Local integer 381 392 !! 382 NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid,xlam1, xlamdust, ligand, kfep393 NAMELIST/nampisfer/ ln_fechem, ln_ligvar, xlam1, xlamdust, ligand, kfep 383 394 !!---------------------------------------------------------------------- 384 395 ! … … 401 412 WRITE(numout,*) ' enable complex iron chemistry scheme ln_fechem =', ln_fechem 402 413 WRITE(numout,*) ' variable concentration of ligand ln_ligvar =', ln_ligvar 403 WRITE(numout,*) ' Variable colloidal fraction of Fe3+ ln_fecolloid =', ln_fecolloid404 414 WRITE(numout,*) ' scavenging rate of Iron xlam1 =', xlam1 405 415 WRITE(numout,*) ' scavenging rate of Iron by dust xlamdust =', xlamdust … … 407 417 WRITE(numout,*) ' rate constant for nanoparticle formation kfep =', kfep 408 418 ENDIF 419 ! 420 IF (ln_ligand .AND. ln_fechem) CALL ctl_stop( 'STOP', 'p4z_fechem_init: ln_ligand and ln_fechem are incompatible') 409 421 ! 410 422 IF( ln_fechem ) THEN ! set some constants used by the complexe chemistry scheme -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zligand.F90
r10069 r10362 13 13 USE sms_pisces ! PISCES Source Minus Sink variables 14 14 USE prtctl_trc ! print control for debugging 15 USE iom ! I/O manager 15 16 16 17 IMPLICIT NONE … … 43 44 INTEGER :: ji, jj, jk 44 45 REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw, zrfepa, zfepr 46 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zligrem, zligpr, zrligprod 47 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 45 48 CHARACTER (len=25) :: charout 46 49 !!--------------------------------------------------------------------- … … 56 59 ! ------------------------------------------------------------------ 57 60 ! production from remineralisation of organic matter 58 zlgwp 61 zlgwp = orem(ji,jj,jk) * rlig 59 62 ! decay of weak ligand 60 63 ! This is based on the idea that as LGW is lower 61 64 ! there is a larger fraction of refractory OM 62 65 zlgwr = max( rlgs , rlgw * exp( -2 * (trb(ji,jj,jk,jplgw)*1e9) ) ) ! years 63 zlgwr = 1. / zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * trb(ji,jj,jk,jplgw)66 zlgwr = 1. / zlgwr * tgfunc(ji,jj,jk) * ( xstep / nyear_len(1) ) * blim(ji,jj,jk) * trb(ji,jj,jk,jplgw) 64 67 ! photochem loss of weak ligand 65 68 zlgwpr = prlgw * xstep * etot(ji,jj,jk) * trb(ji,jj,jk,jplgw) * (1. - fr_i(ji,jj)) 66 69 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zlgwp - zlgwr - zlgwpr 70 zligrem(ji,jj,jk) = zlgwr 71 zligpr(ji,jj,jk) = zlgwpr 72 zrligprod(ji,jj,jk) = zlgwp 67 73 ! 68 74 ! ---------------------------------------------------------- … … 74 80 zrfepa = rfep * ( 1. - EXP( -1. * etot(ji,jj,jk) / 25. ) ) * (1.- fr_i(ji,jj)) 75 81 zrfepa = MAX( (zrfepa / 10.0), zrfepa ) ! min of 10 days lifetime 76 zfepr = rfep * xstep * trb(ji,jj,jk,jpfep)82 zfepr = rfep * xstep * trb(ji,jj,jk,jpfep) 77 83 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) - zfepr 78 84 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zfepr … … 81 87 END DO 82 88 END DO 89 ! 90 ! Output of some diagnostics variables 91 ! --------------------------------- 92 IF( lk_iomput .AND. knt == nrdttrc ) THEN 93 ALLOCATE( zw3d(jpi,jpj,jpk) ) 94 IF( iom_use( "LIGREM" ) ) THEN 95 zw3d(:,:,:) = zligrem(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 96 CALL iom_put( "LIGREM", zw3d ) 97 ENDIF 98 IF( iom_use( "LIGPR" ) ) THEN 99 zw3d(:,:,:) = zligpr(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 100 CALL iom_put( "LIGPR", zw3d ) 101 ENDIF 102 IF( iom_use( "LPRODR" ) ) THEN 103 zw3d(:,:,:) = zrligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 104 CALL iom_put( "LPRODR", zw3d ) 105 ENDIF 106 DEALLOCATE( zw3d ) 107 ENDIF 83 108 ! 84 109 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zmeso.F90
r10222 r10362 25 25 26 26 REAL(wp), PUBLIC :: part2 !: part of calcite not dissolved in mesozoo guts 27 REAL(wp), PUBLIC :: xpref c !: mesozoo preference for POC28 REAL(wp), PUBLIC :: xpref p!: mesozoo preference for nanophyto29 REAL(wp), PUBLIC :: xpref z !: mesozoo preference for diatoms30 REAL(wp), PUBLIC :: xpref poc!: mesozoo preference for POC27 REAL(wp), PUBLIC :: xpref2d !: mesozoo preference for diatoms 28 REAL(wp), PUBLIC :: xpref2n !: mesozoo preference for nanophyto 29 REAL(wp), PUBLIC :: xpref2z !: mesozoo preference for microzooplankton 30 REAL(wp), PUBLIC :: xpref2c !: mesozoo preference for POC 31 31 REAL(wp), PUBLIC :: xthresh2zoo !: zoo feeding threshold for mesozooplankton 32 32 REAL(wp), PUBLIC :: xthresh2dia !: diatoms feeding threshold for mesozooplankton … … 40 40 REAL(wp), PUBLIC :: unass2 !: Efficicency of mesozoo growth 41 41 REAL(wp), PUBLIC :: sigma2 !: Fraction of mesozoo excretion as DOM 42 REAL(wp), PUBLIC :: epsher2 !: half sturation constant for grazing 2 42 REAL(wp), PUBLIC :: epsher2 !: growth efficiency 43 REAL(wp), PUBLIC :: epsher2min !: minimum growth efficiency at high food for grazing 2 43 44 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 44 45 … … 63 64 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 64 65 REAL(wp) :: zgraze2 , zdenom, zdenom2 65 REAL(wp) :: zfact , zfood, zfoodlim, zproport 66 REAL(wp) :: zfact , zfood, zfoodlim, zproport, zbeta 66 67 REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 67 REAL(wp) :: zepsher t, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf68 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz 2, zgrasrat, zgrasratn69 REAL(wp) :: zrespz 2, ztortz2, zgrazd, zgrazz, zgrazpof68 REAL(wp) :: zepsherf, zepshert, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 69 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz, zgrasrat, zgrasratn 70 REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof 70 71 REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 71 72 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 72 73 CHARACTER (len=25) :: charout 73 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 74 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 74 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 75 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zz2ligprod 75 76 !!--------------------------------------------------------------------- 76 77 ! … … 78 79 ! 79 80 zgrazing(:,:,:) = 0._wp 80 81 zfezoo2 (:,:,:) = 0._wp 82 ! 83 IF (ln_ligand) THEN 84 ALLOCATE( zz2ligprod(jpi,jpj,jpk) ) 85 zz2ligprod(:,:,:) = 0._wp 86 ENDIF 87 ! 81 88 DO jk = 1, jpkm1 82 89 DO jj = 1, jpj … … 87 94 ! Respiration rates of both zooplankton 88 95 ! ------------------------------------- 89 zrespz 2 = resrat2 * zfact *trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) &90 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk)96 zrespz = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 97 & + 3. * nitrfac(ji,jj,jk) ) 91 98 92 99 ! Zooplankton mortality. A square function has been selected with 93 100 ! no real reason except that it seems to be more stable and may mimic predation 94 101 ! --------------------------------------------------------------- 95 ztortz 2= mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) )102 ztortz = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) ) 96 103 ! 97 104 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 98 105 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 106 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 99 107 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 100 108 ! it is to predation by mesozooplankton … … 102 110 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 103 111 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 104 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 105 106 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc 112 113 ! Mesozooplankton grazing 114 ! ------------------------ 115 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc 107 116 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 108 117 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) … … 110 119 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 111 120 112 zgrazd = zgraze2 * xpref c* zcompadi * zdenom2113 zgrazz = zgraze2 * xpref z* zcompaz * zdenom2114 zgrazn = zgraze2 * xpref p* zcompaph * zdenom2115 zgrazpoc = zgraze2 * xpref poc* zcompapoc * zdenom2121 zgrazd = zgraze2 * xpref2d * zcompadi * zdenom2 122 zgrazz = zgraze2 * xpref2z * zcompaz * zdenom2 123 zgrazn = zgraze2 * xpref2n * zcompaph * zdenom2 124 zgrazpoc = zgraze2 * xpref2c * zcompapoc * zdenom2 116 125 117 126 zgraznf = zgrazn * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) … … 129 138 & * (1. - nitrfac(ji,jj,jk)) 130 139 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 131 !132 zgraztot= zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg133 ! Compute the proportion of filter feeders134 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztot)135 ! Compute fractionation of aggregates. It is assumed that136 ! diatoms based aggregates are more prone to fractionation137 ! since they are more porous (marine snow instead of fecal pellets)138 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn )139 zratio2 = zratio * zratio140 zfrac = zproport * grazflux * xstep * wsbio4(ji,jj,jk) &140 ! 141 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 142 ! Compute the proportion of filter feeders 143 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 144 ! Compute fractionation of aggregates. It is assumed that 145 ! diatoms based aggregates are more prone to fractionation 146 ! since they are more porous (marine snow instead of fecal pellets) 147 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 148 zratio2 = zratio * zratio 149 zfrac = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 141 150 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 142 151 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 143 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn)144 145 zgrazffep = zproport * zgrazffep146 zgrazffeg = zproport * zgrazffeg147 zgrazfffp = zproport * zgrazfffp148 zgrazfffg = zproport * zgrazfffg149 zgraztot= zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg150 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) &151 & + zgrazpoc + zgrazffep + zgrazffeg152 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg153 154 ! Total grazing ( grazing by microzoo is already computed in p4zmicro )155 zgrazing(ji,jj,jk) = zgraztot156 157 ! Mesozooplankton efficiency158 ! --------------------------159 zgrasrat = ( zgraztotf + rtrn )/ ( zgraztot+ rtrn )160 zgrasratn = ( zgraztotn + rtrn )/ ( zgraztot+ rtrn )152 zfracfe = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 153 154 zgrazffep = zproport * zgrazffep 155 zgrazffeg = zproport * zgrazffeg 156 zgrazfffp = zproport * zgrazfffp 157 zgrazfffg = zproport * zgrazfffg 158 zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 159 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) & 160 & + zgrazpoc + zgrazffep + zgrazffeg 161 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 162 163 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 164 zgrazing(ji,jj,jk) = zgraztotc 165 166 ! Mesozooplankton efficiency 167 ! -------------------------- 168 zgrasrat = ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 169 zgrasratn = ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 161 170 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 162 zepsherv = zepshert * MIN( epsher2, (1. - unass2) * zgrasrat / ferat3, (1. - unass2) * zgrasratn ) 163 zgrarem2 = zgraztot * ( 1. - zepsherv - unass2 ) & 164 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz2 165 zgrafer2 = zgraztot * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv ) & 166 & + ferat3 * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz2 ) 167 zgrapoc2 = zgraztot * unass2 171 zbeta = MAX(0., (epsher2 - epsher2min) ) 172 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 173 zepsherv = zepsherf * zepshert 174 175 zgrarem2 = zgraztotc * ( 1. - zepsherv - unass2 ) & 176 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 177 zgrafer2 = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv ) & 178 & + ferat3 * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 179 zgrapoc2 = zgraztotc * unass2 168 180 169 181 ! Update the arrays TRA which contain the biological sources and sinks … … 173 185 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 - zgrarsig 174 186 ! 175 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 187 IF( ln_ligand ) THEN 188 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 189 zz2ligprod(ji,jj,jk) = (zgrarem2 - zgrarsig) * ldocz 190 ENDIF 176 191 ! 177 192 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 178 193 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 194 zfezoo2(ji,jj,jk) = zgrafer2 179 195 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 180 196 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 181 197 182 zmortz 2 = ztortz2 + zrespz2183 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz 2 + zrespz2184 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz 2 + zepsherv * zgraztot198 zmortz = ztortz + zrespz 199 zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 200 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz + zepsherv * zgraztotc 185 201 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazd 186 202 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz … … 193 209 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 194 210 195 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac196 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac197 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep198 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac199 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2200 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac201 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe202 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg &211 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 212 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 213 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 214 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 215 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2 216 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 217 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 218 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg & 203 219 & + zgraztotf * unass2 - zfracfe 204 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn )205 zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal206 ! calcite production207 zprcaca = xfracal(ji,jj,jk) * zgrazn208 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)209 !210 zprcaca = part2 * zprcaca211 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca212 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca )213 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca220 zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn ) 221 zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal 222 ! calcite production 223 zprcaca = xfracal(ji,jj,jk) * zgrazn 224 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 225 ! 226 zprcaca = part2 * zprcaca 227 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca 228 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca ) 229 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 214 230 END DO 215 231 END DO … … 226 242 CALL iom_put( "PCAL", zw3d ) 227 243 ENDIF 244 IF( iom_use( "FEZOO2" ) ) THEN 245 zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 246 CALL iom_put( "FEZOO2", zw3d ) 247 ENDIF 248 IF( iom_use( "LPRODZ2" ) .AND. ln_ligand ) THEN 249 zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 250 CALL iom_put( "LPRODZ2" , zw3d ) 251 ENDIF 228 252 DEALLOCATE( zw3d ) 229 253 ENDIF … … 253 277 INTEGER :: ios ! Local integer 254 278 ! 255 NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref c, xprefp, xprefz, &256 & xpref poc, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, &257 & xthresh2, xkgraz2, epsher2, sigma2, unass2, grazflux279 NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref2n, xpref2d, xpref2z, & 280 & xpref2c, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 281 & xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux 258 282 !!---------------------------------------------------------------------- 259 283 ! … … 275 299 WRITE(numout,*) ' Namelist : namp4zmes' 276 300 WRITE(numout,*) ' part of calcite not dissolved in mesozoo guts part2 =', part2 277 WRITE(numout,*) ' mesozoo preference for phyto xpref c =', xprefc278 WRITE(numout,*) ' mesozoo preference for POC xprefp =', xprefp279 WRITE(numout,*) ' mesozoo preference for zoo xpref z =', xprefz280 WRITE(numout,*) ' mesozoo preference for poc xpref poc =', xprefpoc301 WRITE(numout,*) ' mesozoo preference for phyto xpref2n =', xpref2n 302 WRITE(numout,*) ' mesozoo preference for diatoms xpref2d =', xpref2d 303 WRITE(numout,*) ' mesozoo preference for zoo xpref2z =', xpref2z 304 WRITE(numout,*) ' mesozoo preference for poc xpref2c =', xpref2c 281 305 WRITE(numout,*) ' microzoo feeding threshold for mesozoo xthresh2zoo =', xthresh2zoo 282 306 WRITE(numout,*) ' diatoms feeding threshold for mesozoo xthresh2dia =', xthresh2dia … … 289 313 WRITE(numout,*) ' mesozoo flux feeding rate grazflux =', grazflux 290 314 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 291 WRITE(numout,*) ' Efficicency of Mesozoo growth epsher2 =', epsher2 315 WRITE(numout,*) ' Efficiency of Mesozoo growth epsher2 =', epsher2 316 WRITE(numout,*) ' Minimum Efficiency of Mesozoo growth epsher2min =', epsher2min 292 317 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 293 318 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zmicro.F90
r10227 r10362 26 26 27 27 REAL(wp), PUBLIC :: part !: part of calcite not dissolved in microzoo guts 28 REAL(wp), PUBLIC :: xpref 2c!: microzoo preference for POC29 REAL(wp), PUBLIC :: xpref 2p!: microzoo preference for nanophyto30 REAL(wp), PUBLIC :: xpref 2d!: microzoo preference for diatoms28 REAL(wp), PUBLIC :: xprefc !: microzoo preference for POC 29 REAL(wp), PUBLIC :: xprefn !: microzoo preference for nanophyto 30 REAL(wp), PUBLIC :: xprefd !: microzoo preference for diatoms 31 31 REAL(wp), PUBLIC :: xthreshdia !: diatoms feeding threshold for microzooplankton 32 32 REAL(wp), PUBLIC :: xthreshphy !: nanophyto threshold for microzooplankton … … 36 36 REAL(wp), PUBLIC :: mzrat !: microzooplankton mortality rate 37 37 REAL(wp), PUBLIC :: grazrat !: maximal microzoo grazing rate 38 REAL(wp), PUBLIC :: xkgraz !: non assimilated fraction of P by microzoo39 REAL(wp), PUBLIC :: unass !: Efficicency of microzoo growth38 REAL(wp), PUBLIC :: xkgraz !: Half-saturation constant of assimilation 39 REAL(wp), PUBLIC :: unass !: Non-assimilated part of food 40 40 REAL(wp), PUBLIC :: sigma1 !: Fraction of microzoo excretion as DOM 41 REAL(wp), PUBLIC :: epsher !: half sturation constant for grazing 1 41 REAL(wp), PUBLIC :: epsher !: growth efficiency for grazing 1 42 REAL(wp), PUBLIC :: epshermin !: minimum growth efficiency for grazing 1 42 43 43 44 !!---------------------------------------------------------------------- … … 62 63 REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 63 64 REAL(wp) :: zgraze , zdenom, zdenom2 64 REAL(wp) :: zfact , zfood, zfoodlim 65 REAL(wp) :: zepsher t, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf65 REAL(wp) :: zfact , zfood, zfoodlim, zbeta 66 REAL(wp) :: zepsherf, zepshert, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 66 67 REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 67 68 REAL(wp) :: zrespz, ztortz, zgrasrat, zgrasratn 68 69 REAL(wp) :: zgrazp, zgrazm, zgrazsd 69 70 REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 70 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 71 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zw3d 71 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 72 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zw3d, zzligprod 72 73 CHARACTER (len=25) :: charout 73 74 !!--------------------------------------------------------------------- 74 75 ! 75 76 IF( ln_timing ) CALL timing_start('p4z_micro') 77 ! 78 IF (ln_ligand) THEN 79 ALLOCATE( zzligprod(jpi,jpj,jpk) ) 80 zzligprod(:,:,:) = 0._wp 81 ENDIF 76 82 ! 77 83 DO jk = 1, jpkm1 … … 97 103 ! Microzooplankton grazing 98 104 ! ------------------------ 99 zfood = xpref 2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi105 zfood = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 100 106 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 101 107 zdenom = zfoodlim / ( xkgraz + zfoodlim ) … … 103 109 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 104 110 105 zgrazp = zgraze * xpref 2p* zcompaph * zdenom2106 zgrazm = zgraze * xpref 2c * zcompapoc * zdenom2107 zgrazsd = zgraze * xpref 2d * zcompadi * zdenom2111 zgrazp = zgraze * xprefn * zcompaph * zdenom2 112 zgrazm = zgraze * xprefc * zcompapoc * zdenom2 113 zgrazsd = zgraze * xprefd * zcompadi * zdenom2 108 114 109 115 zgrazpf = zgrazp * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) … … 111 117 zgrazsf = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 112 118 ! 113 zgraztot 119 zgraztotc = zgrazp + zgrazm + zgrazsd 114 120 zgraztotf = zgrazpf + zgrazsf + zgrazmf 115 121 zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk) 116 122 117 123 ! Grazing by microzooplankton 118 zgrazing(ji,jj,jk) = zgraztot 124 zgrazing(ji,jj,jk) = zgraztotc 119 125 120 126 ! Various remineralization and excretion terms 121 127 ! -------------------------------------------- 122 zgrasrat = ( zgraztotf + rtrn ) / ( zgraztot + rtrn )123 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztot + rtrn )128 zgrasrat = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 129 zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 124 130 zepshert = MIN( 1., zgrasratn, zgrasrat / ferat3) 125 zepsherv = zepshert * MIN( epsher, (1. - unass) * zgrasrat / ferat3, (1. - unass) * zgrasratn ) 126 zgrafer = zgraztot * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 127 zgrarem = zgraztot * ( 1. - zepsherv - unass ) 128 zgrapoc = zgraztot * unass 131 zbeta = MAX(0., (epsher - epshermin) ) 132 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 133 zepsherv = zepsherf * zepshert 134 135 zgrafer = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 136 zgrarem = zgraztotc * ( 1. - zepsherv - unass ) 137 zgrapoc = zgraztotc * unass 129 138 130 139 ! Update of the TRA arrays … … 135 144 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 136 145 ! 137 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 146 IF( ln_ligand ) THEN 147 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 148 zzligprod(ji,jj,jk) = (zgrarem - zgrarsig) * ldocz 149 ENDIF 138 150 ! 139 151 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 140 152 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 153 zfezoo(ji,jj,jk) = zgrafer 141 154 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 142 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc155 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc 143 156 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 144 157 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig … … 147 160 ! -------------------------------------------------------------------- 148 161 zmortz = ztortz + zrespz 149 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztot 162 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztotc 150 163 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 151 164 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd … … 180 193 CALL iom_put( "GRAZ1", zw3d ) 181 194 ENDIF 195 IF( iom_use( "FEZOO" ) ) THEN 196 zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 197 CALL iom_put( "FEZOO", zw3d ) 198 ENDIF 199 IF( iom_use( "LPRODZ" ) .AND. ln_ligand ) THEN 200 zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 201 CALL iom_put( "LPRODZ" , zw3d ) 202 ENDIF 182 203 DEALLOCATE( zw3d ) 183 204 ENDIF … … 209 230 INTEGER :: ios ! Local integer 210 231 ! 211 NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xpref 2c, xpref2p, &212 & xpref 2d, xthreshdia, xthreshphy, xthreshpoc, &213 & xthresh, xkgraz, epsher, sigma1, unass232 NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xprefn, xprefc, & 233 & xprefd, xthreshdia, xthreshphy, xthreshpoc, & 234 & xthresh, xkgraz, epsher, epshermin, sigma1, unass 214 235 !!---------------------------------------------------------------------- 215 236 ! … … 231 252 WRITE(numout,*) ' Namelist : namp4zzoo' 232 253 WRITE(numout,*) ' part of calcite not dissolved in microzoo guts part =', part 233 WRITE(numout,*) ' microzoo preference for POC xpref 2c =', xpref2c234 WRITE(numout,*) ' microzoo preference for nano xpref 2p =', xpref2p235 WRITE(numout,*) ' microzoo preference for diatoms xpref 2d =', xpref2d254 WRITE(numout,*) ' microzoo preference for POC xprefc =', xprefc 255 WRITE(numout,*) ' microzoo preference for nano xprefn =', xprefn 256 WRITE(numout,*) ' microzoo preference for diatoms xprefd =', xprefd 236 257 WRITE(numout,*) ' diatoms feeding threshold for microzoo xthreshdia =', xthreshdia 237 258 WRITE(numout,*) ' nanophyto feeding threshold for microzoo xthreshphy =', xthreshphy … … 243 264 WRITE(numout,*) ' non assimilated fraction of P by microzoo unass =', unass 244 265 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 266 WRITE(numout,*) ' Minimum efficicency of microzoo growth epshermin =', epshermin 245 267 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 246 268 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zopt.F90
r10069 r10362 109 109 DO jk = 1, nksrp 110 110 etot_ndcy(:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 111 enano (:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4* ze3(:,:,jk)112 ediat (:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7* ze3(:,:,jk)111 enano (:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 112 ediat (:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 113 113 END DO 114 114 IF( ln_p5z ) THEN 115 115 DO jk = 1, nksrp 116 epico (:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42* ze2(:,:,jk) + 0.4 * ze3(:,:,jk)116 epico (:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 117 117 END DO 118 118 ENDIF … … 134 134 DO jk = 1, nksrp 135 135 etot (:,:,jk) = ze1(:,:,jk) + ze2(:,:,jk) + ze3(:,:,jk) 136 enano(:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4* ze3(:,:,jk)137 ediat(:,:,jk) = 1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7* ze3(:,:,jk)136 enano(:,:,jk) = 1.85 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.46 * ze3(:,:,jk) 137 ediat(:,:,jk) = 1.62 * ze1(:,:,jk) + 0.74 * ze2(:,:,jk) + 0.63 * ze3(:,:,jk) 138 138 END DO 139 139 IF( ln_p5z ) THEN 140 140 DO jk = 1, nksrp 141 epico(:,:,jk) = 2.1 * ze1(:,:,jk) + 0.42* ze2(:,:,jk) + 0.4 * ze3(:,:,jk)141 epico(:,:,jk) = 1.94 * ze1(:,:,jk) + 0.66 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 142 142 END DO 143 143 ENDIF … … 182 182 zetmp1 (:,:) = 0.e0 183 183 zetmp2 (:,:) = 0.e0 184 zetmp3 (:,:) = 0.e0185 zetmp4 (:,:) = 0.e0186 184 187 185 DO jk = 1, nksrp … … 191 189 zetmp1 (ji,jj) = zetmp1 (ji,jj) + etot (ji,jj,jk) * e3t_n(ji,jj,jk) ! remineralisation 192 190 zetmp2 (ji,jj) = zetmp2 (ji,jj) + etot_ndcy(ji,jj,jk) * e3t_n(ji,jj,jk) ! production 193 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * e3t_n(ji,jj,jk) ! production194 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * e3t_n(ji,jj,jk) ! production195 191 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t_n(ji,jj,jk) 196 192 ENDIF … … 209 205 emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 210 206 zpar (ji,jj,jk) = zetmp2(ji,jj) * z1_dep 211 enano(ji,jj,jk) = zetmp3(ji,jj) * z1_dep 212 ediat(ji,jj,jk) = zetmp4(ji,jj) * z1_dep 207 ENDIF 208 END DO 209 END DO 210 END DO 211 ! 212 zdepmoy(:,:) = 0.e0 213 zetmp3 (:,:) = 0.e0 214 zetmp4 (:,:) = 0.e0 215 ! 216 DO jk = 1, nksrp 217 DO jj = 1, jpj 218 DO ji = 1, jpi 219 IF( gdepw_n(ji,jj,jk+1) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 220 zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano (ji,jj,jk) * e3t_n(ji,jj,jk) ! production 221 zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat (ji,jj,jk) * e3t_n(ji,jj,jk) ! production 222 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t_n(ji,jj,jk) 223 ENDIF 224 END DO 225 END DO 226 END DO 227 enanom(:,:,:) = enano(:,:,:) 228 ediatm(:,:,:) = ediat(:,:,:) 229 ! 230 DO jk = 1, nksrp 231 DO jj = 1, jpj 232 DO ji = 1, jpi 233 IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 234 z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 235 enanom(ji,jj,jk) = zetmp3(ji,jj) * z1_dep 236 ediatm(ji,jj,jk) = zetmp4(ji,jj) * z1_dep 213 237 ENDIF 214 238 END DO … … 221 245 DO jj = 1, jpj 222 246 DO ji = 1, jpi 223 IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 247 IF( gdepw_n(ji,jj,jk+1) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN 248 zetmp5(ji,jj) = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t_n(ji,jj,jk) ! production 249 ENDIF 250 END DO 251 END DO 252 END DO 253 ! 254 epicom(:,:,:) = epico(:,:,:) 255 ! 256 DO jk = 1, nksrp 257 DO jj = 1, jpj 258 DO ji = 1, jpi 259 IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 224 260 z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 225 zetmp5(ji,jj) = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t_n(ji,jj,jk) ! production 226 epico(ji,jj,jk) = zetmp5(ji,jj) * z1_dep 261 epicom(ji,jj,jk) = zetmp5(ji,jj) * z1_dep 227 262 ENDIF 228 263 END DO -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zpoc.F90
r10069 r10362 62 62 CHARACTER (len=25) :: charout 63 63 REAL(wp), DIMENSION(jpi,jpj ) :: totprod, totthick, totcons 64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zremipoc, zremigoc, zorem3, ztremint 64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zremipoc, zremigoc, zorem3, ztremint, zfolimi 65 65 REAL(wp), DIMENSION(jpi,jpj,jpk,jcpoc) :: alphag 66 66 !!--------------------------------------------------------------------- … … 90 90 orem (:,:,:) = 0. 91 91 ztremint(:,:,:) = 0. 92 zfolimi (:,:,:) = 0. 92 93 93 94 DO jn = 1, jcpoc … … 209 210 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem2 210 211 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer2 212 zfolimi(ji,jj,jk) = zofer2 211 213 END DO 212 214 END DO … … 239 241 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zopop2 * (1. + solgoc) 240 242 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 * (1. + solgoc) 243 zfolimi(ji,jj,jk) = zofer2 241 244 END DO 242 245 END DO … … 414 417 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zorem 415 418 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 419 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 416 420 ENDIF 417 421 END DO … … 439 443 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 440 444 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 445 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 441 446 END DO 442 447 END DO … … 449 454 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 450 455 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 456 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation rate 451 457 ENDIF 452 458 ENDIF -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zprod.F90
r10227 r10362 40 40 REAL(wp), PUBLIC :: grosip !: 41 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: optimal production = f(temperature)43 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotan !: proxy of N quota in Nanophyto 44 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatomee … … 78 77 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 79 78 REAL(wp), DIMENSION(jpi,jpj ) :: zstrn, zmixnano, zmixdiat 79 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprmaxn,zprmaxd 80 80 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadd, zysopt 81 81 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprdia, zprbio, zprdch, zprnch … … 83 83 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpronewn, zpronewd 84 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl 85 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpligprod1, zpligprod2 85 86 !!--------------------------------------------------------------------- 86 87 ! … … 96 97 97 98 ! Computation of the optimal production 98 prmax(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 99 zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 100 zprmaxd(:,:,:) = zprmaxn(:,:,:) 99 101 100 102 ! compute the day length depending on latitude and the day … … 128 130 END DO 129 131 130 zprbio(:,:,:) = prmax(:,:,:) * zmxl_fac(:,:,:)131 zprdia(:,:,:) = zpr bio(:,:,:)132 zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) 133 zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 132 134 133 135 ! Maximum light intensity … … 169 171 ! Computation of production function for Chlorophyll 170 172 !-------------------------------------------------- 171 zpislopen = zpislopeadn(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn )172 zpisloped = zpislopeadd(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn )173 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) )174 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) )173 zpislopen = zpislopeadn(ji,jj,jk) / ( zprmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 174 zpisloped = zpislopeadd(ji,jj,jk) / ( zprmaxd(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 175 zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 176 zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 175 177 ENDIF 176 178 END DO … … 192 194 zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 193 195 zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 194 zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) )195 zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) )196 zprnch(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 197 zprdch(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 196 198 ENDIF 197 199 END DO … … 206 208 DO ji = 1, jpi 207 209 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & 208 & * prmax(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn )210 & * zprmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 209 211 quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 210 212 zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) ) & 211 & * prmax(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn )213 & * zprmaxd(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 212 214 quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 213 215 END DO … … 227 229 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 228 230 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 229 zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) )231 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 230 232 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 231 233 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) … … 266 268 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 267 269 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 268 zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) &270 zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 269 271 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 270 272 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & … … 276 278 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 277 279 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 278 zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) &280 zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 279 281 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 280 282 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & … … 291 293 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 292 294 ! production terms for nanophyto. ( chlorophyll ) 293 znanotot = enano (ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )295 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 294 296 zprod = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 295 297 zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) … … 298 300 & ( zpislopeadn(ji,jj,jk) * znanotot +rtrn) 299 301 ! production terms for diatoms ( chlorophyll ) 300 zdiattot = ediat (ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )302 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 301 303 zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 302 304 zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) … … 351 353 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 352 354 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 355 zpligprod1(ji,jj,jk) = zdocprod * ldocp 356 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 353 357 ENDIF 354 358 END DO … … 392 396 CALL iom_put( "PFeD" , zw3d ) 393 397 ENDIF 398 IF( iom_use( "LPRODP" ) ) THEN 399 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 400 CALL iom_put( "LPRODP" , zw3d ) 401 ENDIF 402 IF( iom_use( "LDETP" ) ) THEN 403 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 404 CALL iom_put( "LDETP" , zw3d ) 405 ENDIF 394 406 IF( iom_use( "Mumax" ) ) THEN 395 zw3d(:,:,:) = prmax(:,:,:) * tmask(:,:,:) ! Maximum growth rate407 zw3d(:,:,:) = zprmaxn(:,:,:) * tmask(:,:,:) ! Maximum growth rate 396 408 CALL iom_put( "Mumax" , zw3d ) 397 409 ENDIF … … 404 416 ENDIF 405 417 IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) ) THEN 406 zw3d(:,:,:) = zprbio (:,:,:) / ( prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term418 zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 407 419 CALL iom_put( "LNlight" , zw3d ) 408 420 ! 409 zw3d(:,:,:) = zprdia (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term421 zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 410 422 CALL iom_put( "LDlight" , zw3d ) 411 423 ENDIF … … 542 554 !! *** ROUTINE p4z_prod_alloc *** 543 555 !!---------------------------------------------------------------------- 544 ALLOCATE( prmax(jpi,jpj,jpk),quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc )556 ALLOCATE( quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc ) 545 557 ! 546 558 IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zrem.F90
r10227 r10362 63 63 REAL(wp) :: zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 64 64 REAL(wp) :: zbactfer, zolimit, zonitr, zrfact2 65 REAL(wp) :: zammonic, zoxyrem 65 REAL(wp) :: zammonic, zoxyremc, zoxyremn, zoxyremp 66 66 REAL(wp) :: zosil, ztem, zdenitnh4, zolimic, zolimin, zolimip, zdenitrn, zdenitrp 67 67 CHARACTER (len=25) :: charout 68 68 REAL(wp), DIMENSION(jpi,jpj ) :: ztempbac 69 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib 69 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib, zdepeff, zfebact 70 70 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 71 71 !!--------------------------------------------------------------------- … … 75 75 ! Initialisation of arrys 76 76 zdepprod(:,:,:) = 1._wp 77 zdepeff (:,:,:) = 0.3_wp 77 78 ztempbac(:,:) = 0._wp 78 79 zfacsib(:,:,:) = xsilab / ( 1.0 - xsilab ) 80 zfebact(:,:,:) = 0._wp 79 81 zfacsi(:,:,:) = xsilab 80 82 … … 95 97 zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 96 98 zdepprod(ji,jj,jk) = zdepmin**0.273 99 zdepeff (ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 97 100 ENDIF 98 101 END DO … … 117 120 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 118 121 denitr(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) 119 zoxyrem 122 zoxyremc = zammonic - denitr(ji,jj,jk) 120 123 ! 121 124 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 122 125 denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 123 zoxyrem = MAX( 0.e0, zoxyrem)126 zoxyremc = MAX( 0.e0, zoxyremc ) 124 127 125 128 ! 126 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyrem 127 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyrem 129 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 130 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 128 131 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr (ji,jj,jk) * rdenit 129 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) - zoxyrem 132 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) - zoxyremc 130 133 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimi (ji,jj,jk) * o2ut 131 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyrem 132 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimi(ji,jj,jk) + zoxyrem &134 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 135 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimi(ji,jj,jk) + zoxyremc & 133 136 & + ( rdenit + 1.) * denitr(ji,jj,jk) ) 134 137 END DO … … 159 162 ! Ammonification in suboxic waters with denitrification 160 163 ! ------------------------------------------------------- 161 zolimit = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 162 denitr(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, zolimit ) 163 denitr(ji,jj,jk) = MAX( 0.e0, denitr(ji,jj,jk) ) 164 zammonic = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 165 denitr(ji,jj,jk) = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 166 denitr(ji,jj,jk) = MAX(0., MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 167 zoxyremc = MAX(0., zammonic - denitr(ji,jj,jk)) 164 168 zdenitrn = zremikn * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 165 169 zdenitrp = zremikp * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 166 167 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp 168 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn 170 zoxyremn = zremikn * zoxyremc * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 171 zoxyremp = zremikp * zoxyremc * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 172 173 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp + zoxyremp 174 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn + zoxyremn 169 175 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr(ji,jj,jk) * rdenit 170 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimic - denitr(ji,jj,jk) 171 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zolimin - zdenitrn 172 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zolimip - zdenitrp 176 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimic - denitr(ji,jj,jk) - zoxyremc 177 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zolimin - zdenitrn - zoxyremn 178 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zolimip - zdenitrp - zoxyremp 173 179 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimic * o2ut 174 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) 175 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimin + ( rdenit + 1.) * zdenitrn )180 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) + zoxyremc 181 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimin + zoxyremn + ( rdenit + 1.) * zdenitrn ) 176 182 END DO 177 183 END DO … … 215 221 ! studies (especially at Papa) have shown this uptake to be significant 216 222 ! ---------------------------------------------------------- 217 zbactfer = feratb * rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)&223 zbactfer = feratb * rfact2 * 0.6_wp / rday * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) & 218 224 & * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) ) & 219 & * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 220 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.16 221 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.12 222 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.04 225 & * zdepprod(ji,jj,jk) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 226 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.33 227 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.25 228 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.08 229 zfebact(ji,jj,jk) = zbactfer * 0.33 230 blim(ji,jj,jk) = xlimbacl(ji,jj,jk) * zdepbac(ji,jj,jk) / 1.e-6 * zdepprod(ji,jj,jk) 223 231 END DO 224 232 END DO … … 256 264 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil 257 265 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + zosil 258 !259 266 END DO 260 267 END DO … … 268 275 269 276 IF( knt == nrdttrc ) THEN 277 zrfact2 = 1.e3 * rfact2r 270 278 ALLOCATE( zw3d(jpi,jpj,jpk) ) 271 279 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s … … 278 286 zw3d(:,:,:) = denitr(:,:,:) * rdenit * rno3 * tmask(:,:,:) * zfact ! Denitrification 279 287 CALL iom_put( "DENIT" , zw3d ) 288 ENDIF 289 IF( iom_use( "BACT" ) ) THEN 290 zw3d(:,:,:) = zdepbac(:,:,:) * 1.E6 * tmask(:,:,:) ! Bacterial biomass 291 CALL iom_put( "BACT", zw3d ) 292 ENDIF 293 IF( iom_use( "FEBACT" ) ) THEN 294 zw3d(:,:,:) = zfebact(:,:,:) * 1E9 * tmask(:,:,:) * zrfact2 ! Bacterial iron consumption 295 CALL iom_put( "FEBACT" , zw3d ) 280 296 ENDIF 281 297 ! -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zsbc.F90
r10127 r10362 31 31 REAL(wp), PUBLIC :: dustsolub !: Solubility of the dust 32 32 REAL(wp), PUBLIC :: mfrac !: Mineral Content of the dust 33 REAL(wp), PUBLIC :: rdustfep !: Fraction of dust that is dissolvable 33 34 REAL(wp), PUBLIC :: icefeinput !: Iron concentration in sea ice 34 35 REAL(wp), PUBLIC :: wdust !: Sinking speed of the dust … … 134 135 DO ji = 1, jpi 135 136 zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj) 136 rivalk(ji,jj) = sf_river(jr_dic)%fnow(ji,jj,1) 137 rivalk(ji,jj) = sf_river(jr_dic)%fnow(ji,jj,1) & 137 138 & * 1.E3 / ( 12. * zcoef + rtrn ) 138 rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) + sf_river(jr_doc)%fnow(ji,jj,1) )&139 rivdic(ji,jj) = sf_river(jr_dic)%fnow(ji,jj,1) & 139 140 & * 1.E3 / ( 12. * zcoef + rtrn ) 140 rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) + sf_river(jr_don)%fnow(ji,jj,1) )&141 rivdin(ji,jj) = sf_river(jr_din)%fnow(ji,jj,1) & 141 142 & * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) 142 rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) + sf_river(jr_dop)%fnow(ji,jj,1) )&143 rivdip(ji,jj) = sf_river(jr_dip)%fnow(ji,jj,1) & 143 144 & * 1.E3 / po4r / ( 31. * zcoef + rtrn ) 144 rivdsi(ji,jj) = sf_river(jr_dsi)%fnow(ji,jj,1) 145 rivdsi(ji,jj) = sf_river(jr_dsi)%fnow(ji,jj,1) & 145 146 & * 1.E3 / ( 28.1 * zcoef + rtrn ) 147 rivdoc(ji,jj) = sf_river(jr_doc)%fnow(ji,jj,1) & 148 & * 1.E3 / ( 12. * zcoef + rtrn ) 146 149 END DO 147 150 END DO … … 158 161 rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) ) & 159 162 & * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 160 rivdoc(ji,jj) = ( sf_river(jr_doc)%fnow(ji,jj,1) ) &161 & * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1)162 163 rivdon(ji,jj) = ( sf_river(jr_don)%fnow(ji,jj,1) ) & 163 164 & * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 164 165 rivdop(ji,jj) = ( sf_river(jr_dop)%fnow(ji,jj,1) ) & 165 166 & * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 167 rivdsi(ji,jj) = sf_river(jr_dsi)%fnow(ji,jj,1) & 168 & * 1.E3 / ( 28.1 * zcoef + rtrn ) 169 rivdoc(ji,jj) = sf_river(jr_doc)%fnow(ji,jj,1) & 170 & * 1.E3 / ( 12. * zcoef + rtrn ) 166 171 END DO 167 172 END DO … … 223 228 & ln_dust, ln_solub, ln_river, ln_ndepo, ln_ironsed, ln_ironice, ln_hydrofe, & 224 229 & sedfeinput, distcoast, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz, & 225 & hratio, fep_rats, fep_rath, lgw_rath230 & hratio, fep_rats, fep_rath, rdustfep, lgw_rath 226 231 !!---------------------------------------------------------------------- 227 232 ! … … 262 267 WRITE(numout,*) ' Fep/Fer ratio from sed sources fep_rats = ', fep_rats 263 268 WRITE(numout,*) ' Fep/Fer ratio from sed hydro sources fep_rath = ', fep_rath 269 WRITE(numout,*) ' Fraction of dust that is dissolvable rdustfep = ', rdustfep 264 270 WRITE(numout,*) ' Weak ligand ratio from sed hydro sources lgw_rath = ', lgw_rath 265 271 ENDIF … … 343 349 slf_river(jr_dsi) = sn_riverdsi 344 350 ! 345 ALLOCATE( rivdic(jpi,jpj), rivalk(jpi,jpj), rivdin(jpi,jpj), rivdip(jpi,jpj), rivdsi(jpi,jpj) )346 IF( ln_p5z ) ALLOCATE( rivdon(jpi,jpj), rivdop(jpi,jpj) , rivdoc(jpi,jpj))351 ALLOCATE( rivdic(jpi,jpj), rivalk(jpi,jpj), rivdin(jpi,jpj), rivdip(jpi,jpj), rivdsi(jpi,jpj), rivdoc(jpi,jpj) ) 352 IF( ln_p5z ) ALLOCATE( rivdon(jpi,jpj), rivdop(jpi,jpj) ) 347 353 ! 348 354 ALLOCATE( sf_river(jpriv), rivinput(jpriv), STAT=ierr1 ) !* allocate and fill sf_river (forcing structure) with sn_river_ -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zsed.F90
r10227 r10362 64 64 CHARACTER (len=25) :: charout 65 65 REAL(wp), DIMENSION(jpi,jpj ) :: zdenit2d, zbureff, zwork 66 REAL(wp), DIMENSION(jpi,jpj ) :: zwsbio3, zwsbio4 , zwscal66 REAL(wp), DIMENSION(jpi,jpj ) :: zwsbio3, zwsbio4 67 67 REAL(wp), DIMENSION(jpi,jpj ) :: zsedcal, zsedsi, zsedc 68 68 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight … … 85 85 ! 86 86 ! Allocate temporary workspace 87 IF( ln_p5z ) ALLOCATE( ztrpo4(jpi,jpj,jpk), ztrdop(jpi,jpj,jpk) ) 87 ALLOCATE( ztrpo4(jpi,jpj,jpk) ) 88 IF( ln_p5z ) ALLOCATE( ztrdop(jpi,jpj,jpk) ) 88 89 IF( ln_ligand ) ALLOCATE( zwsfep(jpi,jpj) ) 89 90 90 91 91 zdenit2d(:,:) = 0.e0 … … 95 95 zsedcal (:,:) = 0.e0 96 96 zsedc (:,:) = 0.e0 97 98 97 99 98 ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. … … 132 131 ELSE 133 132 zirondep(:,:,1) = dustsolub * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss 133 ENDIF 134 IF ( ln_ligand ) THEN 135 IF( ln_solub ) THEN 136 tra(:,:,1,jpfep) = tra(:,:,1,jpfep) + rdustfep * (1.0 - solub(:,:)) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 137 ELSE 138 tra(:,:,1,jpfep) = tra(:,:,1,jpfep) + rdustfep * (1.0 - dustsolub) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 139 ENDIF 134 140 ENDIF 135 141 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1 … … 173 179 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + rivdic(ji,jj) * rfact2 174 180 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + ( rivalk(ji,jj) - rno3 * rivdin(ji,jj) ) * rfact2 181 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + rivdoc(ji,jj) * rfact2 175 182 ENDDO 176 183 ENDDO 177 184 ENDDO 185 IF (ln_ligand) THEN 186 DO jj = 1, jpj 187 DO ji = 1, jpi 188 DO jk = 1, nk_rnf(ji,jj) 189 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + rivdic(ji,jj) * 5.e-5 * rfact2 190 ENDDO 191 ENDDO 192 ENDDO 193 ENDIF 178 194 IF( ln_p5z ) THEN 179 195 DO jj = 1, jpj … … 182 198 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + rivdop(ji,jj) * rfact2 183 199 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + rivdon(ji,jj) * rfact2 184 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + rivdoc(ji,jj) * rfact2185 200 ENDDO 186 201 ENDDO … … 216 231 zdep = e3t_n(ji,jj,ikt) / xstep 217 232 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) ) 218 zwscal (ji,jj) = MIN( 0.99 * zdep, wscal (ji,jj,ikt) )219 233 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) ) 220 234 END DO … … 278 292 ikt = mbkt(ji,jj) 279 293 zdep = xstep / e3t_n(ji,jj,ikt) 280 zwsc = zws cal(ji,jj) * zdep294 zwsc = zwsbio4(ji,jj) * zdep 281 295 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 282 296 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc … … 292 306 ikt = mbkt(ji,jj) 293 307 zdep = xstep / e3t_n(ji,jj,ikt) 294 zwsc = zws cal(ji,jj) * zdep308 zwsc = zwsbio4(ji,jj) * zdep 295 309 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 296 310 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc … … 393 407 DO ji = 1, jpi 394 408 ! ! Potential nitrogen fixation dependant on temperature and iron 395 zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 396 IF( zlim <= 0.2 ) zlim = 0.01 409 ztemp = tsn(ji,jj,jk,jp_tem) 410 zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 411 ! Potential nitrogen fixation dependant on temperature and iron 412 xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 413 xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 414 zlim = ( 1.- xdiano3 - xdianh4 ) 415 IF( zlim <= 0.1 ) zlim = 0.01 397 416 zfact = zlim * rfact2 398 399 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 400 ztrpo4s = trb (ji,jj,jk,jppo4) / ( concnnh4 + trb (ji,jj,jk,jppo4) ) 401 nitrpot(ji,jj,jk) = MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 402 & * zfact * MIN( ztrfer, ztrpo4s ) * zlight(ji,jj,jk) 417 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 418 ztrpo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) / ( 1E-6 + trb(ji,jj,jk,jppo4) ) 419 ztrdp = ztrpo4(ji,jj,jk) 420 nitrpot(ji,jj,jk) = zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 403 421 END DO 404 422 END DO … … 434 452 DO ji = 1, jpi 435 453 zfact = nitrpot(ji,jj,jk) * nitrfix 436 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact 437 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact 438 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit * zfact 454 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact / 3.0 455 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact / 3.0 456 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zfact * 2.0 / 3.0 457 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zfact * 1.0 / 3.0 458 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zfact * 1.0 / 3.0 * 2.0 / 3.0 459 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfact * 1.0 / 3.0 * 1.0 / 3.0 460 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 461 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * zfact * 1.0 / 3.0 462 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 463 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 464 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 439 465 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 440 & * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 441 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 466 & * 0.001 * trb(ji,jj,jk,jpdoc) * xstep 442 467 END DO 443 468 END DO -
NEMO/trunk/src/TOP/PISCES/P4Z/p4zsink.F90
r10069 r10362 143 143 END DO 144 144 145 wscal (:,:,:) = wsbio4(:,:,:)146 147 145 ! Initializa to zero all the sinking arrays 148 146 ! ----------------------------------------- … … 165 163 CALL p4z_sink2( wsbio4, sinkfer2, jpbfe, iiter2 ) 166 164 CALL p4z_sink2( wsbio4, sinksil , jpgsi, iiter2 ) 167 CALL p4z_sink2( ws cal, sinkcal , jpcal, iiter2 )165 CALL p4z_sink2( wsbio4, sinkcal , jpcal, iiter2 ) 168 166 END DO 169 167 -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zlim.F90
r10227 r10362 14 14 USE oce_trc ! Shared ocean-passive tracers variables 15 15 USE trc ! Tracers defined 16 USE p4zlim 16 17 USE sms_pisces ! PISCES variables 17 18 USE iom ! I/O manager … … 25 26 26 27 !! * Shared module variables 27 REAL(wp), PUBLIC :: concnno3 !: NO3, PO4 half saturation28 28 REAL(wp), PUBLIC :: concpno3 !: NO3, PO4 half saturation 29 REAL(wp), PUBLIC :: concdno3 !: Phosphate half saturation for diatoms30 REAL(wp), PUBLIC :: concnnh4 !: NH4 half saturation for phyto31 29 REAL(wp), PUBLIC :: concpnh4 !: NH4 half saturation for phyto 32 REAL(wp), PUBLIC :: concdnh4 !: NH4 half saturation for diatoms33 30 REAL(wp), PUBLIC :: concnpo4 !: NH4 half saturation for diatoms 34 31 REAL(wp), PUBLIC :: concppo4 !: NH4 half saturation for diatoms 35 32 REAL(wp), PUBLIC :: concdpo4 !: NH4 half saturation for diatoms 36 REAL(wp), PUBLIC :: concnfer !: Iron half saturation for nanophyto37 33 REAL(wp), PUBLIC :: concpfer !: Iron half saturation for nanophyto 38 REAL(wp), PUBLIC :: concdfer !: Iron half saturation for diatoms39 REAL(wp), PUBLIC :: concbno3 !: NO3 half saturation for bacteria40 REAL(wp), PUBLIC :: concbnh4 !: NH4 half saturation for bacteria41 34 REAL(wp), PUBLIC :: concbpo4 !: PO4 half saturation for bacteria 42 REAL(wp), PUBLIC :: xsizedia !: Minimum size criteria for diatoms43 35 REAL(wp), PUBLIC :: xsizepic !: Minimum size criteria for diatoms 44 REAL(wp), PUBLIC :: xsizephy !: Minimum size criteria for nanophyto45 REAL(wp), PUBLIC :: xsizern !: Size ratio for nanophytoplankton46 36 REAL(wp), PUBLIC :: xsizerp !: Size ratio for nanophytoplankton 47 REAL(wp), PUBLIC :: xsizerd !: Size ratio for diatoms48 REAL(wp), PUBLIC :: xksi1 !: half saturation constant for Si uptake49 REAL(wp), PUBLIC :: xksi2 !: half saturation constant for Si/C50 REAL(wp), PUBLIC :: xkdoc !: 2nd half-sat. of DOC remineralization51 REAL(wp), PUBLIC :: concbfe !: Fe half saturation for bacteria52 REAL(wp), PUBLIC :: oxymin !: half saturation constant for anoxia53 37 REAL(wp), PUBLIC :: qfnopt !: optimal Fe quota for nanophyto 54 38 REAL(wp), PUBLIC :: qfpopt !: optimal Fe quota for nanophyto 55 39 REAL(wp), PUBLIC :: qfdopt !: optimal Fe quota for diatoms 56 REAL(wp), PUBLIC :: caco3r !: mean rainratio57 40 REAL(wp), PUBLIC :: qnnmin !: optimal Fe quota for diatoms 58 41 REAL(wp), PUBLIC :: qnnmax !: optimal Fe quota for diatoms … … 89 72 90 73 !!* Phytoplankton limitation terms 91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: ???92 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: ???93 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: ???94 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: ???95 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanopo4 !: ???96 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatpo4 !: ???97 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: ???98 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: ???99 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: ???100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: ???101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: ???102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: ??103 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbacl !: ??104 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicono3 !: ??? 105 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpiconh4 !: ??? … … 574 544 & xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk), & 575 545 & xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk), & 576 & xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk), &577 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), &578 & xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk), &579 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), &580 & xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk), &581 & xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk), &582 546 & xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk), & 583 547 & xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk), & 584 548 & fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk), & 585 & fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk), & 586 & xlimsi (jpi,jpj,jpk), STAT=ierr(1) ) 549 & fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk), STAT=ierr(1) ) 587 550 ! 588 551 !* Minimum/maximum quotas of phytoplankton -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmeso.F90
r10070 r10362 27 27 REAL(wp), PUBLIC :: part2 !: part of calcite not dissolved in mesozoo guts 28 28 REAL(wp), PUBLIC :: xpref2c !: mesozoo preference for POC 29 REAL(wp), PUBLIC :: xpref2 p!: mesozoo preference for nanophyto29 REAL(wp), PUBLIC :: xpref2n !: mesozoo preference for nanophyto 30 30 REAL(wp), PUBLIC :: xpref2z !: mesozoo preference for zooplankton 31 31 REAL(wp), PUBLIC :: xpref2d !: mesozoo preference for Diatoms … … 40 40 REAL(wp), PUBLIC :: mzrat2 !: microzooplankton mortality rate 41 41 REAL(wp), PUBLIC :: grazrat2 !: maximal mesozoo grazing rate 42 REAL(wp), PUBLIC :: xkgraz2 !: non assimilated fraction of P by mesozoo 43 REAL(wp), PUBLIC :: unass2c !: Efficicency of mesozoo growth 44 REAL(wp), PUBLIC :: unass2n !: Efficicency of mesozoo growth 45 REAL(wp), PUBLIC :: unass2p !: Efficicency of mesozoo growth 46 REAL(wp), PUBLIC :: epsher2 !: half sturation constant for grazing 2 42 REAL(wp), PUBLIC :: xkgraz2 !: Half-saturation constant of assimilation 43 REAL(wp), PUBLIC :: unass2c !: Non-assimilated fraction of food 44 REAL(wp), PUBLIC :: unass2n !: Non-assimilated fraction of food 45 REAL(wp), PUBLIC :: unass2p !: Non-assimilated fraction of food 46 REAL(wp), PUBLIC :: epsher2 !: Growth efficiency of mesozoo 47 REAL(wp), PUBLIC :: epsher2min !: Minimum growth efficiency of mesozoo 47 48 REAL(wp), PUBLIC :: ssigma2 !: Fraction excreted as semi-labile DOM 48 49 REAL(wp), PUBLIC :: srespir2 !: Active respiration … … 85 86 CHARACTER (len=25) :: charout 86 87 REAL(wp) :: zrfact2, zmetexcess 87 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 88 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 88 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 89 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zz2ligprod 89 90 90 91 !!--------------------------------------------------------------------- … … 92 93 IF( ln_timing ) CALL timing_start('p5z_meso') 93 94 ! 95 94 96 zgrazing(:,:,:) = 0._wp 97 zfezoo2 (:,:,:) = 0._wp 98 ! 99 IF (ln_ligand) THEN 100 ALLOCATE( zz2ligprod(jpi,jpj,jpk) ) 101 zz2ligprod(:,:,:) = 0._wp 102 ENDIF 95 103 96 104 zmetexcess = 0.0 … … 111 119 ! no real reason except that it seems to be more stable and may mimic predation 112 120 ! --------------------------------------------------------------- 113 ztortz = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 121 ztortz = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 114 122 115 123 ! Computation of the abundance of the preys … … 124 132 ! Mesozooplankton grazing 125 133 ! ------------------------ 126 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2 p* zcompaph + xpref2c * zcompapoc &134 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc & 127 135 & + xpref2m * zcompames 128 136 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 129 137 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 130 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 138 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 131 139 132 140 ! An active switching parameterization is used here. … … 138 146 ! most abundant species 139 147 ! ------------------------------------------------------------ 140 ztmp1 = xpref2 p* zcompaph**1.5148 ztmp1 = xpref2n * zcompaph**1.5 141 149 ztmp2 = xpref2m * zcompames**1.5 142 150 ztmp3 = xpref2c * zcompapoc**1.5 … … 170 178 ! ---------------------------------- 171 179 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 172 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 180 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 181 & * (1. - nitrfac(ji,jj,jk)) 173 182 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 174 183 zgrazffng = zgrazffeg * trb(ji,jj,jk,jpgon) / (trb(ji,jj,jk,jpgoc) + rtrn) 175 184 zgrazffpg = zgrazffeg * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn) 176 185 zgrazffep = grazflux * xstep * wsbio3(ji,jj,jk) & 177 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 186 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) & 187 & * (1. - nitrfac(ji,jj,jk)) 178 188 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 179 189 zgrazffnp = zgrazffep * trb(ji,jj,jk,jppon) / (trb(ji,jj,jk,jppoc) + rtrn) … … 226 236 ! --------------------------------------------------- 227 237 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 228 zbeta = 1./ (epsher2 - 0.2)229 zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood *1E6)238 zbeta = MAX(0., (epsher2 - epsher2min) ) 239 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 230 240 zepsherv = zepsherf * zepshert 231 241 … … 290 300 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 291 301 ! 292 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 302 IF( ln_ligand ) THEN 303 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 304 zz2ligprod(ji,jj,jk) = zgradoc * ldocz 305 ENDIF 293 306 ! 294 307 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon … … 296 309 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 297 310 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 311 zfezoo2(ji,jj,jk) = zgraref 298 312 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem 299 313 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren … … 351 365 CALL iom_put( "PCAL", zw3d ) 352 366 ENDIF 367 IF( iom_use( "FEZOO2" ) ) THEN 368 zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 369 CALL iom_put( "FEZOO2", zw3d ) 370 ENDIF 371 IF( iom_use( "LPRODZ2" ) .AND. ln_ligand ) THEN 372 zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 373 CALL iom_put( "LPRODZ2" , zw3d ) 374 ENDIF 353 375 DEALLOCATE( zw3d ) 354 376 ENDIF … … 379 401 INTEGER :: ios ! Local integer output status for namelist read 380 402 !! 381 NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2 p, xpref2z, &403 NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, & 382 404 & xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 383 & xthresh2mes, xthresh2, xkgraz2, epsher2, ssigma2, unass2c, &405 & xthresh2mes, xthresh2, xkgraz2, epsher2, epsher2min, ssigma2, unass2c, & 384 406 & unass2n, unass2p, srespir2, grazflux 385 407 !!---------------------------------------------------------------------- … … 399 421 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 400 422 WRITE(numout,*) ' part of calcite not dissolved in mesozoo guts part2 = ', part2 401 WRITE(numout,*) ' mesozoo preference for nano. xpref2 p = ', xpref2p423 WRITE(numout,*) ' mesozoo preference for nano. xpref2n = ', xpref2n 402 424 WRITE(numout,*) ' mesozoo preference for diatoms xpref2d = ', xpref2d 403 425 WRITE(numout,*) ' mesozoo preference for zoo xpref2z = ', xpref2z … … 415 437 WRITE(numout,*) ' mesozoo flux feeding rate grazflux = ', grazflux 416 438 WRITE(numout,*) ' C egested fraction of food by mesozoo unass2c = ', unass2c 417 WRITE(numout,*) ' Cegested fraction of food by mesozoo unass2n = ', unass2n418 WRITE(numout,*) ' Cegested fraction of food by mesozoo unass2p = ', unass2p439 WRITE(numout,*) ' N egested fraction of food by mesozoo unass2n = ', unass2n 440 WRITE(numout,*) ' P egested fraction of food by mesozoo unass2p = ', unass2p 419 441 WRITE(numout,*) ' Efficicency of Mesozoo growth epsher2 = ', epsher2 442 WRITE(numout,*) ' Minimum Efficiency of Mesozoo growth epsher2min =', epsher2min 420 443 WRITE(numout,*) ' Fraction excreted as semi-labile DOM ssigma2 = ', ssigma2 421 444 WRITE(numout,*) ' Active respiration srespir2 = ', srespir2 -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmicro.F90
r10227 r10362 15 15 USE trc ! passive tracers common variables 16 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 USE p4zlim 17 18 USE p5zlim ! Phytoplankton limitation terms 18 19 USE iom ! I/O manager … … 41 42 REAL(wp), PUBLIC :: mzrat !: microzooplankton mortality rate 42 43 REAL(wp), PUBLIC :: grazrat !: maximal microzoo grazing rate 43 REAL(wp), PUBLIC :: xkgraz !: non assimilated fraction of P by microzoo 44 REAL(wp), PUBLIC :: unassc !: Efficicency of microzoo growth 45 REAL(wp), PUBLIC :: unassn !: Efficicency of microzoo growth 46 REAL(wp), PUBLIC :: unassp !: Efficicency of microzoo growth 47 REAL(wp), PUBLIC :: epsher !: half sturation constant for grazing 1 44 REAL(wp), PUBLIC :: xkgraz !: Half-saturation constant of assimilation 45 REAL(wp), PUBLIC :: unassc !: Non-assimilated part of food 46 REAL(wp), PUBLIC :: unassn !: Non-assimilated part of food 47 REAL(wp), PUBLIC :: unassp !: Non-assimilated part of food 48 REAL(wp), PUBLIC :: epsher !: Growth efficiency for microzoo 49 REAL(wp), PUBLIC :: epshermin !: Minimum growth efficiency for microzoo 48 50 REAL(wp), PUBLIC :: srespir !: half sturation constant for grazing 1 49 51 REAL(wp), PUBLIC :: ssigma !: Fraction excreted as semi-labile DOM … … 82 84 REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz 83 85 REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 85 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 86 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 87 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zzligprod 86 88 CHARACTER (len=25) :: charout 87 89 !!--------------------------------------------------------------------- 88 90 ! 89 91 IF( ln_timing ) CALL timing_start('p5z_micro') 92 ! 93 IF (ln_ligand) THEN 94 ALLOCATE( zzligprod(jpi,jpj,jpk) ) 95 zzligprod(:,:,:) = 0._wp 96 ENDIF 90 97 ! 91 98 zmetexcess = 0.0 … … 106 113 ! no real reason except that it seems to be more stable and may mimic predation. 107 114 ! ------------------------------------------------------------------------------ 108 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 115 ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 109 116 110 117 ! Computation of the abundance of the preys … … 123 130 zfoodlim = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 124 131 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 125 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 132 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 126 133 127 134 ! An active switching parameterization is used here. … … 183 190 ! --------------------------------------------------- 184 191 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 185 zbeta = 1./ (epsher - 0.2)186 zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood * 1E6)192 zbeta = MAX( 0., (epsher - epshermin) ) 193 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 187 194 zepsherv = zepsherf * zepshert 188 195 … … 244 251 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 245 252 ! 246 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 253 IF( ln_ligand ) THEN 254 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 255 zzligprod(ji,jj,jk) = zgradoc * ldocz 256 ENDIF 247 257 ! 248 258 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon … … 250 260 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 251 261 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 262 zfezoo(ji,jj,jk) = zgraref 252 263 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 253 264 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc … … 288 299 END DO 289 300 ! 290 IF( lk_iomput .AND. knt == nrdttrc ) THEN 291 ALLOCATE( zw3d(jpi,jpj,jpk) ) 292 IF( iom_use( "GRAZ1" ) ) THEN 293 zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ! Total grazing of phyto by zooplankton 294 CALL iom_put( "GRAZ1", zw3d ) 301 IF( lk_iomput ) THEN 302 IF( knt == nrdttrc ) THEN 303 ALLOCATE( zw3d(jpi,jpj,jpk) ) 304 IF( iom_use( "GRAZ1" ) ) THEN 305 zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ! Total grazing of phyto by zooplankton 306 CALL iom_put( "GRAZ1", zw3d ) 307 ENDIF 308 IF( iom_use( "FEZOO" ) ) THEN 309 zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 310 CALL iom_put( "FEZOO", zw3d ) 311 ENDIF 312 IF( iom_use( "LPRODZ" ) .AND. ln_ligand ) THEN 313 zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 314 CALL iom_put( "LPRODZ" , zw3d ) 315 ENDIF 316 DEALLOCATE( zw3d ) 295 317 ENDIF 296 DEALLOCATE( zw3d )297 318 ENDIF 298 319 ! … … 325 346 & xprefp, xprefd, xprefz, xthreshdia, xthreshphy, & 326 347 & xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, & 327 & epsher, ssigma, srespir, unassc, unassn, unassp348 & epsher, epshermin, ssigma, srespir, unassc, unassn, unassp 328 349 !!---------------------------------------------------------------------- 329 350 ! … … 360 381 WRITE(numout,*) ' P egested fraction of fodd by microzoo unassp =', unassp 361 382 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 383 WRITE(numout,*) ' Minimum Efficiency of Microzoo growth epshermin =', epshermin 362 384 WRITE(numout,*) ' Fraction excreted as semi-labile DOM ssigma =', ssigma 363 385 WRITE(numout,*) ' Active respiration srespir =', srespir -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmort.F90
r10227 r10362 14 14 USE trc ! passive tracers common variables 15 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 USE p4zlim 16 17 USE p5zlim ! Phytoplankton limitation terms 17 18 USE prtctl_trc ! print control for debugging -
NEMO/trunk/src/TOP/PISCES/P4Z/p5zprod.F90
r10227 r10362 16 16 USE trc ! passive tracers common variables 17 17 USE sms_pisces ! PISCES Source Minus Sink variables 18 USE p4zlim 18 19 USE p5zlim ! Co-limitations of differents nutrients 19 20 USE prtctl_trc ! print control for debugging … … 42 43 REAL(wp), PUBLIC :: grosip !: 43 44 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmaxn !: optimal production = f(temperature)45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmaxp !: optimal production = f(temperature)46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmaxd !: optimal production = f(temperature)47 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: zdaylen 48 46 … … 83 81 REAL(wp), DIMENSION(jpi,jpj ) :: zmixnano, zmixpico, zmixdiat, zstrn 84 82 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadp, zpislopeadd 83 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprnut, zprmaxp, zprmaxn, zprmaxd 85 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprbio, zprpic, zprdia, zysopt 86 85 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprchln, zprchlp, zprchld … … 91 90 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpropo4n, zpropo4p, zpropo4d 92 91 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprodopn, zprodopp, zprodopd 93 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrespn, zrespp, zrespd , zprnut92 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrespn, zrespp, zrespd 94 93 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zcroissn, zcroissp, zcroissd 95 94 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmxl_fac, zmxl_chl 95 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpligprod1, zpligprod2 96 96 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 97 97 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zw2d … … 106 106 zpropo4n(:,:,:) = 0._wp ; zpropo4p(:,:,:) = 0._wp ; zpropo4d(:,:,:) = 0._wp 107 107 zprdia (:,:,:) = 0._wp ; zprpic (:,:,:) = 0._wp ; zprbio (:,:,:) = 0._wp 108 zprodopn(:,:,:) = 0._wp ; zprodopp(:,:,:) = 0._wp ; zprodopd(:,:,:) = 0._wp 108 109 zysopt (:,:,:) = 0._wp 109 110 zrespn (:,:,:) = 0._wp ; zrespp (:,:,:) = 0._wp ; zrespd (:,:,:) = 0._wp 110 111 111 112 ! Computation of the optimal production 112 prmaxn(:,:,:) = ( 0.65_wp * (1. + zpsino3 * qnpmax ) )* r1_rday * tgfunc(:,:,:)113 prmaxp(:,:,:) = 0.5 / 0.65 * prmaxn(:,:,:)114 prmaxd(:,:,:) =prmaxn(:,:,:)115 zpr nut(:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:)113 zprnut (:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 114 zprmaxn(:,:,:) = ( 0.65_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 115 zprmaxp(:,:,:) = 0.5 / 0.65 * zprmaxn(:,:,:) 116 zprmaxd(:,:,:) = zprmaxn(:,:,:) 116 117 117 118 ! compute the day length depending on latitude and the day … … 145 146 END DO 146 147 147 zprbio(:,:,:) = prmaxn(:,:,:) * zmxl_fac(:,:,:)148 zprdia(:,:,:) = prmaxd(:,:,:) * zmxl_fac(:,:,:)149 zprpic(:,:,:) = prmaxp(:,:,:) * zmxl_fac(:,:,:)148 zprbio(:,:,:) = zprmaxn(:,:,:) * zmxl_fac(:,:,:) 149 zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 150 zprpic(:,:,:) = zprmaxp(:,:,:) * zmxl_fac(:,:,:) 150 151 151 152 … … 184 185 zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 185 186 zpislopep = zpislopep * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 186 zprchln(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) )187 zprchlp(ji,jj,jk) = prmaxp(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) ) )188 zprchld(ji,jj,jk) = prmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) )187 zprchln(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) ) 188 zprchlp(ji,jj,jk) = zprmaxp(ji,jj,jk) * ( 1.- EXP( -zpislopep * epicom(ji,jj,jk) ) ) 189 zprchld(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) ) 189 190 ENDIF 190 191 END DO … … 203 204 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 204 205 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 205 zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) )206 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 206 207 zsilfac = 3.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 207 208 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) … … 347 348 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 348 349 ! production terms for nanophyto. ( chlorophyll ) 349 znanotot = enano (ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )350 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 350 351 zprod = rday * (zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 351 352 thetannm_n = MIN ( thetannm, ( thetannm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & … … 354 355 zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) ) 355 356 ! production terms for picophyto. ( chlorophyll ) 356 zpicotot = epico (ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )357 zpicotot = epicom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 357 358 zprod = rday * (zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)) * zprchlp(ji,jj,jk) * xlimpic(ji,jj,jk) 358 359 thetanpm_n = MIN ( thetanpm, ( thetanpm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & … … 361 362 zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 362 363 ! production terms for diatomees ( chlorophyll ) 363 zdiattot = ediat (ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn )364 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 364 365 zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 365 366 thetandm_n = MIN ( thetandm, ( thetandm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & … … 449 450 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 450 451 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 452 zpligprod1(ji,jj,jk) = zdocprod * ldocp 453 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 451 454 END DO 452 455 END DO … … 500 503 CALL iom_put( "PFeD" , zw3d ) 501 504 ENDIF 505 IF( iom_use( "LPRODP" ) ) THEN 506 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 507 CALL iom_put( "LPRODP" , zw3d ) 508 ENDIF 509 IF( iom_use( "LDETP" ) ) THEN 510 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 511 CALL iom_put( "LDETP" , zw3d ) 512 ENDIF 502 513 IF( iom_use( "Mumax" ) ) THEN 503 zw3d(:,:,:) = prmaxn(:,:,:) * tmask(:,:,:) ! Maximum growth rate514 zw3d(:,:,:) = zprmaxn(:,:,:) * tmask(:,:,:) ! Maximum growth rate 504 515 CALL iom_put( "Mumax" , zw3d ) 505 516 ENDIF … … 515 526 ENDIF 516 527 IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) .OR. iom_use( "LPlight" ) ) THEN 517 zw3d(:,:,:) = zprbio (:,:,:) / ( prmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term528 zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 518 529 CALL iom_put( "LNlight" , zw3d ) 519 530 ! 520 zw3d(:,:,:) = zprpic (:,:,:) / ( prmaxp(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term531 zw3d(:,:,:) = zprpic (:,:,:) / (zprmaxp(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 521 532 CALL iom_put( "LPlight" , zw3d ) 522 533 ! 523 zw3d(:,:,:) = zprdia (:,:,:) / ( prmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term534 zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 524 535 CALL iom_put( "LDlight" , zw3d ) 525 536 ENDIF … … 611 622 !! *** ROUTINE p5z_prod_alloc *** 612 623 !!---------------------------------------------------------------------- 613 ALLOCATE( prmaxn(jpi,jpj,jpk), prmaxp(jpi,jpj,jpk), prmaxd(jpi,jpj,jpk), & 614 & zdaylen(jpi,jpj), STAT = p5z_prod_alloc ) 624 ALLOCATE( zdaylen(jpi,jpj), STAT = p5z_prod_alloc ) 615 625 ! 616 626 IF( p5z_prod_alloc /= 0 ) CALL ctl_warn('p5z_prod_alloc : failed to allocate arrays.') -
NEMO/trunk/src/TOP/PISCES/SED/oce_sed.F90
r10225 r10362 11 11 USE par_trc 12 12 13 USE dom_oce , ONLY : nidom => nidom !:14 13 USE dom_oce , ONLY : glamt => glamt !: longitude of t-point (degre) 15 14 USE dom_oce , ONLY : gphit => gphit !: latitude of t-point (degre) … … 21 20 USE dom_oce , ONLY : rdt => rdt !: time step for the dynamics 22 21 USE dom_oce , ONLY : nyear => nyear !: Current year 23 USE dom_oce , ONLY : nmonth => nmonth !: Current month24 USE dom_oce , ONLY : nday => nday !: Current day25 22 USE dom_oce , ONLY : ndastp => ndastp !: time step date in year/month/day aammjj 26 USE dom_oce , ONLY : nday_year => nday_year !: curent day counted from jan 1st of the current year27 23 USE dom_oce , ONLY : adatrj => adatrj !: number of elapsed days since the begining of the run 28 24 USE trc , ONLY : nittrc000 => nittrc000 … … 35 31 USE sms_pisces, ONLY : wsbio4 => wsbio4 !: sinking flux for POC 36 32 USE sms_pisces, ONLY : wsbio3 => wsbio3 !: sinking flux for GOC 37 USE sms_pisces, ONLY : wscal => wscal !: sinking flux for calcite38 33 USE sms_pisces, ONLY : wsbio2 => wsbio2 !: sinking flux for calcite 39 34 USE sms_pisces, ONLY : wsbio => wsbio !: sinking flux for calcite 35 USE sms_pisces, ONLY : ln_p5z => ln_p5z !: PISCES-QUOTA flag 40 36 USE p4zche, ONLY : akb3 => akb3 !: Chemical constants 41 37 USE sms_pisces, ONLY : ak13 => ak13 !: Chemical constants -
NEMO/trunk/src/TOP/PISCES/SED/seddsr.F90
r10222 r10362 591 591 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(4) 592 592 zdelta = pwcp(ji,jk,jwpo4) - redfep * zsedtra(4) 593 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 594 & + zalpha * exp( reac_fe2 * zalpha * dtsed2 / 2. ) + rtrn ) 593 IF ( zalpha == 0. ) THEN 594 zsedtra(4) = zsedtra(4) / ( 1.0 + zsedtra(4) * reac_fe2 * dtsed2 / 2.0 ) 595 ELSE 596 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 597 & + zalpha * exp( reac_fe2 * zalpha * dtsed2 / 2. ) ) 598 ENDIF 595 599 zsedtra(1) = zalpha + 0.25 * zsedtra(4) 596 600 zsedtra(5) = zbeta - zsedtra(4) … … 601 605 zbeta = pwcp(ji,jk,jwso4) + zsedtra(2) 602 606 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(2) 603 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_h2s * zalpha * dtsed2 / 2. ) - 1.0 ) & 604 & + zalpha * exp( reac_h2s * zalpha * dtsed2 / 2. ) + rtrn ) 607 IF ( zalpha == 0. ) THEN 608 zsedtra(2) = zsedtra(2) / ( 1.0 + zsedtra(2) * reac_h2s * dtsed2 / 2.0 ) 609 ELSE 610 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_h2s * zalpha * dtsed2 / 2. ) - 1.0 ) & 611 & + zalpha * exp( reac_h2s * zalpha * dtsed2 / 2. ) ) 612 ENDIF 605 613 zsedtra(1) = zalpha + 2.0 * zsedtra(2) 606 614 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(2) … … 609 617 zalpha = zsedtra(1) - 2.0 * zsedtra(3) 610 618 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(3) 611 zsedtra(3) = ( zsedtra(3) * zalpha ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) & 612 & + zalpha * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) + rtrn ) 619 IF ( zalpha == 0. ) THEN 620 zsedtra(3) = zsedtra(3) / ( 1.0 + zsedtra(3) * reac_nh4 * zadsnh4 * dtsed2 / 2.0 ) 621 ELSE 622 zsedtra(3) = ( zsedtra(3) * zalpha ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) & 623 & + zalpha * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) ) 624 ENDIF 613 625 zsedtra(1) = zalpha + 2.0 * zsedtra(3) 614 626 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(3) … … 617 629 zbeta = zsedtra(4) + zsedtra(6) 618 630 zgamma = pwcp(ji,jk,jwso4) + zsedtra(6) 619 zsedtra(6) = ( zsedtra(6) * zalpha ) / ( 2.0 * zsedtra(6) * ( exp( reac_feso * zalpha * dtsed2 / 2. ) - 1.0 ) & 620 & + zalpha * exp( reac_feso * zalpha * dtsed2 /2. ) + rtrn ) 631 IF ( zalpha == 0. ) THEN 632 zsedtra(6) = zsedtra(6) / ( 1.0 + zsedtra(6) * reac_feso * dtsed2 / 2.0 ) 633 ELSE 634 zsedtra(6) = ( zsedtra(6) * zalpha ) / ( 2.0 * zsedtra(6) * ( exp( reac_feso * zalpha * dtsed2 / 2. ) - 1.0 ) & 635 & + zalpha * exp( reac_feso * zalpha * dtsed2 /2. ) ) 636 ENDIF 621 637 zsedtra(1) = zalpha + 2.0 * zsedtra(6) 622 638 zsedtra(4) = zbeta - zsedtra(6) … … 626 642 zbeta = zsedtra(4) + zsedtra(6) 627 643 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(4) 628 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( zsedtra(4) * ( exp( reac_fes * zalpha * dtsed2 / 2. ) - 1.0 ) & 629 & + zalpha * exp( reac_fes * zalpha * dtsed2 /2. ) + rtrn ) 644 IF ( zalpha == 0. ) THEN 645 zsedtra(4) = zsedtra(4) / ( 1.0 + zsedtra(4) * reac_fes * dtsed2 / 2.0 ) 646 ELSE 647 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( zsedtra(4) * ( exp( reac_fes * zalpha * dtsed2 / 2. ) - 1.0 ) & 648 & + zalpha * exp( reac_fes * zalpha * dtsed2 /2. ) ) 649 ENDIF 630 650 zsedtra(2) = zalpha + zsedtra(4) 631 651 zsedtra(6) = zbeta - zsedtra(4) … … 637 657 zdelta = pwcp(ji,jk,jwso4) + zsedtra(2) 638 658 zepsi = pwcp(ji,jk,jwpo4) + redfep * zsedtra(5) 639 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_feh2s * zalpha * dtsed2 ) - 1.0 ) & 640 & + zalpha * exp( reac_feh2s * zalpha * dtsed2 ) + rtrn ) 659 IF ( zalpha == 0. ) THEN 660 zsedtra(2) = zsedtra(2) / ( 1.0 + zsedtra(2) * reac_feh2s * dtsed2 ) 661 ELSE 662 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_feh2s * zalpha * dtsed2 ) - 1.0 ) & 663 & + zalpha * exp( reac_feh2s * zalpha * dtsed2 ) ) 664 ENDIF 641 665 zsedtra(5) = zalpha + 2.0 * zsedtra(2) 642 666 zsedtra(4) = zbeta - zsedtra(5) … … 648 672 zbeta = zsedtra(4) + zsedtra(6) 649 673 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(4) 650 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( zsedtra(4) * ( exp( reac_fes * zalpha * dtsed2 / 2. ) - 1.0 ) & 651 & + zalpha * exp( reac_fes * zalpha * dtsed2 /2. ) + rtrn ) 674 IF ( zalpha == 0. ) THEN 675 zsedtra(4) = zsedtra(4) / ( 1.0 + zsedtra(4) * reac_fes * dtsed2 / 2.0 ) 676 ELSE 677 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( zsedtra(4) * ( exp( reac_fes * zalpha * dtsed2 / 2. ) - 1.0 ) & 678 & + zalpha * exp( reac_fes * zalpha * dtsed2 /2. ) ) 679 ENDIF 652 680 zsedtra(2) = zalpha + zsedtra(4) 653 681 zsedtra(6) = zbeta - zsedtra(4) … … 657 685 zbeta = zsedtra(4) + zsedtra(6) 658 686 zgamma = pwcp(ji,jk,jwso4) + zsedtra(6) 659 zsedtra(6) = ( zsedtra(6) * zalpha ) / ( 2.0 * zsedtra(6) * ( exp( reac_feso * zalpha * dtsed2 / 2. ) - 1.0 ) & 660 & + zalpha * exp( reac_feso * zalpha * dtsed2 /2. ) + rtrn ) 687 IF (zalpha == 0.) THEN 688 zsedtra(6) = zsedtra(6) / ( 1.0 + zsedtra(6) * reac_feso * dtsed2 / 2. ) 689 ELSE 690 zsedtra(6) = ( zsedtra(6) * zalpha ) / ( 2.0 * zsedtra(6) * ( exp( reac_feso * zalpha * dtsed2 / 2. ) - 1.0 ) & 691 & + zalpha * exp( reac_feso * zalpha * dtsed2 /2. ) ) 692 ENDIF 661 693 zsedtra(1) = zalpha + 2.0 * zsedtra(6) 662 694 zsedtra(4) = zbeta - zsedtra(6) … … 665 697 zalpha = zsedtra(1) - 2.0 * zsedtra(3) 666 698 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(3) 667 zsedtra(3) = ( zsedtra(3) * zalpha ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) & 668 & + zalpha * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) + rtrn ) 699 IF (zalpha == 0.) THEN 700 zsedtra(3) = zsedtra(3) / ( 1.0 + zsedtra(3) * reac_nh4 * zadsnh4 * dtsed2 / 2.0) 701 ELSE 702 zsedtra(3) = ( zsedtra(3) * zalpha ) / ( 2.0 * zsedtra(3) * ( exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 / 2. ) - 1.0 ) & 703 & + zalpha * exp( reac_nh4 * zadsnh4 * zalpha * dtsed2 /2. ) ) 704 ENDIF 669 705 zsedtra(1) = zalpha + 2.0 * zsedtra(3) 670 706 pwcp(ji,jk,jwalk) = zgamma + 2.0 * zsedtra(3) … … 673 709 zbeta = pwcp(ji,jk,jwso4) + zsedtra(2) 674 710 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(2) 675 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_h2s * zalpha * dtsed2 / 2. ) - 1.0 ) & 676 & + zalpha * exp( reac_h2s * zalpha * dtsed2 / 2. ) + rtrn ) 711 IF ( zalpha == 0. ) THEN 712 zsedtra(2) = zsedtra(2) / ( 1.0 + zsedtra(2) * reac_h2s * dtsed2 / 2.0 ) 713 ELSE 714 zsedtra(2) = ( zsedtra(2) * zalpha ) / ( 2.0 * zsedtra(2) * ( exp( reac_h2s * zalpha * dtsed2 / 2. ) - 1.0 ) & 715 & + zalpha * exp( reac_h2s * zalpha * dtsed2 / 2. ) ) 716 ENDIF 677 717 zsedtra(1) = zalpha + 2.0 * zsedtra(2) 678 718 pwcp(ji,jk,jwso4) = zbeta - zsedtra(2) … … 683 723 zgamma = pwcp(ji,jk,jwalk) - 2.0 * zsedtra(4) 684 724 zdelta = pwcp(ji,jk,jwpo4) - redfep * zsedtra(4) 685 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 686 & + zalpha * exp( reac_fe2 * zalpha * dtsed2 / 2. ) + rtrn ) 725 IF ( zalpha == 0. ) THEN 726 zsedtra(4) = zsedtra(4) / ( 1.0 + zsedtra(4) * reac_fe2 * dtsed2 / 2.0 ) 727 ELSE 728 zsedtra(4) = ( zsedtra(4) * zalpha ) / ( 0.25 * zsedtra(4) * ( exp( reac_fe2 * zalpha * dtsed2 / 2. ) - 1.0 ) & 729 & + zalpha * exp( reac_fe2 * zalpha * dtsed2 / 2. ) ) 730 ENDIF 687 731 zsedtra(1) = zalpha + 0.25 * zsedtra(4) 688 732 zsedtra(5) = zbeta - zsedtra(4) -
NEMO/trunk/src/TOP/PISCES/SED/seddta.F90
r10333 r10362 49 49 50 50 REAL(wp), DIMENSION(jpoce) :: zdtap, zdtag 51 REAL(wp), DIMENSION(jpi,jpj) :: zwsbio4, zwsbio3 , zwscal51 REAL(wp), DIMENSION(jpi,jpj) :: zwsbio4, zwsbio3 52 52 REAL(wp) :: zf0, zf1, zf2, zkapp, zratio, zdep 53 53 … … 97 97 zwsbio4(ji,jj) = wsbio2 / rday 98 98 zwsbio3(ji,jj) = wsbio / rday 99 zwscal (ji,jj) = wsbio2 / rday100 99 END DO 101 100 END DO … … 106 105 zdep = e3t_n(ji,jj,ikt) / r2dttrc 107 106 zwsbio4(ji,jj) = MIN( 0.99 * zdep, wsbio4(ji,jj,ikt) / rday ) 108 zwscal (ji,jj) = MIN( 0.99 * zdep, wscal (ji,jj,ikt) / rday )109 107 zwsbio3(ji,jj) = MIN( 0.99 * zdep, wsbio3(ji,jj,ikt) / rday ) 110 108 END DO … … 130 128 trc_data(ji,jj,12 ) = MIN(trb(ji,jj,ikt,jppoc), 1E-4) * zwsbio3(ji,jj) * 1E3 131 129 trc_data(ji,jj,13 ) = MIN(trb(ji,jj,ikt,jpgoc), 1E-4) * zwsbio4(ji,jj) * 1E3 132 trc_data(ji,jj,14) = MIN(trb(ji,jj,ikt,jpcal), 1E-4) * zws cal(ji,jj) * 1E3130 trc_data(ji,jj,14) = MIN(trb(ji,jj,ikt,jpcal), 1E-4) * zwsbio4(ji,jj) * 1E3 133 131 trc_data(ji,jj,15) = tsn(ji,jj,ikt,jp_tem) 134 132 trc_data(ji,jj,16) = tsn(ji,jj,ikt,jp_sal) -
NEMO/trunk/src/TOP/PISCES/SED/sedini.F90
r10333 r10362 472 472 ENDIF 473 473 474 IF ( ln_p5z .AND. ln_sed_2way ) CALL ctl_stop( '2 ways coupling with sediment cannot be activated with PISCES-QUOTA' ) 475 474 476 REWIND( numnamsed_ref ) ! Namelist nam_geom in reference namelist : Pisces variables 475 477 READ ( numnamsed_ref, nam_geom, IOSTAT = ios, ERR = 903) -
NEMO/trunk/src/TOP/PISCES/sms_pisces.F90
r10222 r10362 76 76 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy !: PAR over 24h in case of diurnal cycle 77 77 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat !: PAR for phyto, nano and diat 78 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enanom, ediatm !: PAR for phyto, nano and diat 78 79 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epico !: PAR for pico 80 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: epicom !: PAR for pico 79 81 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 80 82 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: heup_01 !: Absolute euphotic layer depth … … 89 91 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio3 !: POC sinking speed 90 92 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio4 !: GOC sinking speed 91 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wscal !: Calcite and BSi sinking speeds92 93 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsfep 93 94 … … 105 106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodgoc !: Calcite production 106 107 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: Calcite production 107 108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: blim !: bacterial production factor 108 109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of diatoms 109 110 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizep !: size of diatoms … … 147 148 !* Biological fluxes for light 148 149 ALLOCATE( enano(jpi,jpj,jpk) , ediat(jpi,jpj,jpk) , & 150 & enanom(jpi,jpj,jpk) , ediatm(jpi,jpj,jpk), & 149 151 & etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk) , STAT=ierr(2) ) 150 152 … … 157 159 & prodcal(jpi,jpj,jpk) , xdiss (jpi,jpj,jpk), & 158 160 & prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) , & 159 & prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) , STAT=ierr(4) ) 161 & prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) , & 162 & blim (jpi,jpj,jpk) , STAT=ierr(4) ) 160 163 161 164 !* Variable for chemistry of the CO2 cycle … … 170 173 !* Sinkong speed 171 174 ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk), & 172 & wscal(jpi,jpj,jpk) ,STAT=ierr(7) )175 & STAT=ierr(7) ) 173 176 ! 174 177 IF( ln_ligand ) THEN … … 180 183 IF( ln_p5z ) THEN 181 184 ! 182 ALLOCATE( epico(jpi,jpj,jpk) 185 ALLOCATE( epico(jpi,jpj,jpk) , epicom(jpi,jpj,jpk) , STAT=ierr(9) ) 183 186 184 187 !* Size of phytoplankton cells -
NEMO/trunk/src/TOP/PISCES/trcini_pisces.F90
r10227 r10362 109 109 ierr = ierr + p4z_flx_alloc() 110 110 ierr = ierr + p4z_sed_alloc() 111 ierr = ierr + p4z_ rem_alloc()111 ierr = ierr + p4z_lim_alloc() 112 112 IF( ln_p4z ) THEN 113 ierr = ierr + p4z_lim_alloc()114 113 ierr = ierr + p4z_prod_alloc() 115 114 ELSE … … 117 116 ierr = ierr + p5z_prod_alloc() 118 117 ENDIF 118 ierr = ierr + p4z_rem_alloc() 119 119 ! 120 120 IF( lk_mpp ) CALL mpp_sum( ierr ) … … 165 165 IF( cltra == 'PICN' ) jpnpi = jn !: Picophytoplankton N biomass 166 166 IF( cltra == 'PICP' ) jpppi = jn !: Picophytoplankton P biomass 167 IF( cltra == 'PCHL' ) jppch = jn !: Diatoms Chlorophyll Concentration 167 168 IF( cltra == 'PFe' ) jppfe = jn !: Picophytoplankton Fe biomass 168 169 IF( cltra == 'LGW' ) jplgw = jn !: Weak ligands … … 238 239 xksi(:,:) = 2.e-6 239 240 xksimax(:,:) = xksi(:,:) 241 IF( ln_p5z ) THEN 242 sized(:,:,:) = 1.0 243 sizen(:,:,:) = 1.0 244 sized(:,:,:) = 1.0 245 ENDIF 240 246 END IF 241 247
Note: See TracChangeset
for help on using the changeset viewer.