Changeset 10368 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zprod.F90
- Timestamp:
- 2018-12-03T12:45:01+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zprod.F90
r10345 r10368 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.')
Note: See TracChangeset
for help on using the changeset viewer.