Changeset 10362 for NEMO/trunk/src/TOP/PISCES/P4Z/p5zprod.F90
- Timestamp:
- 2018-11-30T16:38:17+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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.')
Note: See TracChangeset
for help on using the changeset viewer.