Changeset 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/PISCES/P4Z/p4zlim.F90
- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Property svn:externals
-
old new 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/PISCES/P4Z/p4zlim.F90
r12178 r12928 67 67 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 68 68 69 !! * Substitutions 70 # include "do_loop_substitute.h90" 69 71 !!---------------------------------------------------------------------- 70 72 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 74 76 CONTAINS 75 77 76 SUBROUTINE p4z_lim( kt, knt )78 SUBROUTINE p4z_lim( kt, knt, Kbb, Kmm ) 77 79 !!--------------------------------------------------------------------- 78 80 !! *** ROUTINE p4z_lim *** … … 84 86 !!--------------------------------------------------------------------- 85 87 INTEGER, INTENT(in) :: kt, knt 88 INTEGER, INTENT(in) :: Kbb, Kmm ! time level indices 86 89 ! 87 90 INTEGER :: ji, jj, jk … … 95 98 IF( ln_timing ) CALL timing_start('p4z_lim') 96 99 ! 97 DO jk = 1, jpkm1 98 DO jj = 1, jpj 99 DO ji = 1, jpi 100 101 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 102 !------------------------------------- 103 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 104 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 105 zferlim = MIN( zferlim, 7e-11 ) 106 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 107 108 ! Computation of a variable Ks for iron on diatoms taking into account 109 ! that increasing biomass is made of generally bigger cells 110 !------------------------------------------------ 111 zconcd = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 112 zconcd2 = trb(ji,jj,jk,jpdia) - zconcd 113 zconcn = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 114 zconcn2 = trb(ji,jj,jk,jpphy) - zconcn 115 z1_trbphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 116 z1_trbdia = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 117 118 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 119 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 120 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 121 122 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 123 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 124 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 125 126 ! Michaelis-Menten Limitation term for nutrients Small bacteria 127 ! ------------------------------------------------------------- 128 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 129 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 130 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 131 ! 132 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 133 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 134 zlim3 = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 135 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 136 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 137 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 138 139 ! Michaelis-Menten Limitation term for nutrients Small flagellates 140 ! ----------------------------------------------- 141 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 142 xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 143 xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n * zdenom 144 ! 145 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 146 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 147 zratio = trb(ji,jj,jk,jpnfe) * z1_trbphy 148 zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 149 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 150 xnanopo4(ji,jj,jk) = zlim2 151 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 152 xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 153 ! 154 ! Michaelis-Menten Limitation term for nutrients Diatoms 155 ! ---------------------------------------------- 156 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 157 xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 158 xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d * zdenom 159 ! 160 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 161 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc1dnh4 ) 162 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 163 zratio = trb(ji,jj,jk,jpdfe) * z1_trbdia 164 zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 165 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 166 xdiatpo4(ji,jj,jk) = zlim2 167 xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 168 xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 169 xlimsi (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 170 END DO 171 END DO 172 END DO 100 DO_3D_11_11( 1, jpkm1 ) 101 102 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 103 !------------------------------------- 104 zno3 = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6 105 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 106 zferlim = MIN( zferlim, 7e-11 ) 107 tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim ) 108 109 ! Computation of a variable Ks for iron on diatoms taking into account 110 ! that increasing biomass is made of generally bigger cells 111 !------------------------------------------------ 112 zconcd = MAX( 0.e0 , tr(ji,jj,jk,jpdia,Kbb) - xsizedia ) 113 zconcd2 = tr(ji,jj,jk,jpdia,Kbb) - zconcd 114 zconcn = MAX( 0.e0 , tr(ji,jj,jk,jpphy,Kbb) - xsizephy ) 115 zconcn2 = tr(ji,jj,jk,jpphy,Kbb) - zconcn 116 z1_trbphy = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 117 z1_trbdia = 1. / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 118 119 concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 120 zconc1d = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 121 zconc1dnh4 = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 122 123 concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 124 zconc0n = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 125 zconc0nnh4 = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 126 127 ! Michaelis-Menten Limitation term for nutrients Small bacteria 128 ! ------------------------------------------------------------- 129 zdenom = 1. / ( concbno3 * concbnh4 + concbnh4 * tr(ji,jj,jk,jpno3,Kbb) + concbno3 * tr(ji,jj,jk,jpnh4,Kbb) ) 130 xnanono3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * concbnh4 * zdenom 131 xnanonh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * concbno3 * zdenom 132 ! 133 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 134 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbnh4 ) 135 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( concbfe + tr(ji,jj,jk,jpfer,Kbb) ) 136 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 137 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 138 xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 139 140 ! Michaelis-Menten Limitation term for nutrients Small flagellates 141 ! ----------------------------------------------- 142 zdenom = 1. / ( zconc0n * zconc0nnh4 + zconc0nnh4 * tr(ji,jj,jk,jpno3,Kbb) + zconc0n * tr(ji,jj,jk,jpnh4,Kbb) ) 143 xnanono3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * zconc0nnh4 * zdenom 144 xnanonh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * zconc0n * zdenom 145 ! 146 zlim1 = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 147 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0nnh4 ) 148 zratio = tr(ji,jj,jk,jpnfe,Kbb) * z1_trbphy 149 zironmin = xcoef1 * tr(ji,jj,jk,jpnch,Kbb) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 150 zlim3 = MAX( 0.,( zratio - zironmin ) / qnfelim ) 151 xnanopo4(ji,jj,jk) = zlim2 152 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 153 xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 154 ! 155 ! Michaelis-Menten Limitation term for nutrients Diatoms 156 ! ---------------------------------------------- 157 zdenom = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * tr(ji,jj,jk,jpno3,Kbb) + zconc1d * tr(ji,jj,jk,jpnh4,Kbb) ) 158 xdiatno3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) * zconc1dnh4 * zdenom 159 xdiatnh4(ji,jj,jk) = tr(ji,jj,jk,jpnh4,Kbb) * zconc1d * zdenom 160 ! 161 zlim1 = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 162 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc1dnh4 ) 163 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 164 zratio = tr(ji,jj,jk,jpdfe,Kbb) * z1_trbdia 165 zironmin = xcoef1 * tr(ji,jj,jk,jpdch,Kbb) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 166 zlim4 = MAX( 0., ( zratio - zironmin ) / qdfelim ) 167 xdiatpo4(ji,jj,jk) = zlim2 168 xlimdfe (ji,jj,jk) = MIN( 1., zlim4 ) 169 xlimdia (ji,jj,jk) = MIN( zlim1, zlim2, zlim3, zlim4 ) 170 xlimsi (ji,jj,jk) = MIN( zlim1, zlim2, zlim4 ) 171 END_3D 173 172 174 173 ! Compute the fraction of nanophytoplankton that is made of calcifiers 175 174 ! -------------------------------------------------------------------- 176 DO jk = 1, jpkm1 177 DO jj = 1, jpj 178 DO ji = 1, jpi 179 zlim1 = ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 ) & 180 & / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) ) 181 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 182 zlim3 = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) + 5.E-11 ) 183 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 184 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. 185 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 186 zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 187 188 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 189 & * ztem1 / ( 0.1 + ztem1 ) & 190 & * MAX( 1., trb(ji,jj,jk,jpphy) * 1.e6 / 2. ) & 191 & * zetot1 * zetot2 & 192 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 193 & * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 194 xfracal(ji,jj,jk) = MIN( 0.8 , xfracal(ji,jj,jk) ) 195 xfracal(ji,jj,jk) = MAX( 0.02, xfracal(ji,jj,jk) ) 196 END DO 197 END DO 198 END DO 199 ! 200 DO jk = 1, jpkm1 201 DO jj = 1, jpj 202 DO ji = 1, jpi 203 ! denitrification factor computed from O2 levels 204 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 205 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 206 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 207 ! 208 ! denitrification factor computed from NO3 levels 209 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - trb(ji,jj,jk,jpno3) ) & 210 & / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) 211 nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 212 END DO 213 END DO 214 END DO 175 DO_3D_11_11( 1, jpkm1 ) 176 zlim1 = ( tr(ji,jj,jk,jpno3,Kbb) * concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) * concnno3 ) & 177 & / ( concnno3 * concnnh4 + concnnh4 * tr(ji,jj,jk,jpno3,Kbb) + concnno3 * tr(ji,jj,jk,jpnh4,Kbb) ) 178 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnnh4 ) 179 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 5.E-11 ) 180 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) ) 181 ztem2 = ts(ji,jj,jk,jp_tem,Kmm) - 10. 182 zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 183 zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 184 185 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 186 & * ztem1 / ( 0.1 + ztem1 ) & 187 & * MAX( 1., tr(ji,jj,jk,jpphy,Kbb) * 1.e6 / 2. ) & 188 & * zetot1 * zetot2 & 189 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 190 & * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 191 xfracal(ji,jj,jk) = MIN( 0.8 , xfracal(ji,jj,jk) ) 192 xfracal(ji,jj,jk) = MAX( 0.02, xfracal(ji,jj,jk) ) 193 END_3D 194 ! 195 DO_3D_11_11( 1, jpkm1 ) 196 ! denitrification factor computed from O2 levels 197 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr(ji,jj,jk,jpoxy,Kbb) ) & 198 & / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) ) ) 199 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 200 ! 201 ! denitrification factor computed from NO3 levels 202 nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) ) & 203 & / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) ) 204 nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 205 END_3D 215 206 ! 216 207 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 217 IF( iom_use( "xfracal" ) )CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht218 IF( iom_use( "LNnut" ) )CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term219 IF( iom_use( "LDnut" ) )CALL iom_put( "LDnut" , xlimdia(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term220 IF( iom_use( "LNFe" ) )CALL iom_put( "LNFe" , xlimnfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term221 IF( iom_use( "LDFe" ) )CALL iom_put( "LDFe" , xlimdfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term208 CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht 209 CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 210 CALL iom_put( "LDnut" , xlimdia(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 211 CALL iom_put( "LNFe" , xlimnfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 212 CALL iom_put( "LDFe" , xlimdfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 222 213 ENDIF 223 214 ! … … 252 243 ENDIF 253 244 ! 254 REWIND( numnatp_ref ) ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters255 245 READ ( numnatp_ref, namp4zlim, IOSTAT = ios, ERR = 901) 256 246 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in reference namelist' ) 257 REWIND( numnatp_cfg ) ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters258 247 READ ( numnatp_cfg, namp4zlim, IOSTAT = ios, ERR = 902 ) 259 248 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist' ) … … 284 273 ENDIF 285 274 ! 286 nitrfac (:,:,:) = 0._wp 275 nitrfac (:,:,jpk) = 0._wp 276 nitrfac2(:,:,jpk) = 0._wp 277 xfracal (:,:,jpk) = 0._wp 278 xlimphy (:,:,jpk) = 0._wp 279 xlimdia (:,:,jpk) = 0._wp 280 xlimnfe (:,:,jpk) = 0._wp 281 xlimdfe (:,:,jpk) = 0._wp 287 282 ! 288 283 END SUBROUTINE p4z_lim_init
Note: See TracChangeset
for help on using the changeset viewer.