- Timestamp:
- 2016-11-03T16:41:10+01:00 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/CNRS/dev_r6270_PISCES_QUOTA/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r6841 r7180 25 25 USE p4zlim ! Phytoplankton limitation factors 26 26 USE p4zprod ! Growth rate of the 2 phyto groups 27 USE p4zsink ! Sinking of particles 27 28 USE prtctl_trc ! print control for debugging 28 29 USE iom ! I/O manager … … 43 44 REAL(wp), PUBLIC :: xsilab !: fraction of labile biogenic silica 44 45 REAL(wp), PUBLIC :: oxymin !: halk saturation constant for anoxia 46 REAL(wp), PUBLIC :: oxymin2 !: Minimum O2 concentration for oxic remin. 47 REAL(wp), PUBLIC :: feratb !: Fe/C quota in bacteria 48 REAL(wp), PUBLIC :: xkferb !: Half-saturation constant for bacteria Fe/C 45 49 46 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array 47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitnh4 !: - - - - -48 51 49 52 … … 71 74 REAL(wp) :: zremik, zsiremin 72 75 REAL(wp) :: zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 73 REAL(wp) :: zbactfer, zolimit 74 REAL(wp) :: zosil, ztem 76 REAL(wp) :: zbactfer, zolimit, zdenitnh4 77 REAL(wp) :: zosil, ztem,ztoto,zpuis 75 78 REAL(wp) :: zonitr, zstep, zrfact2 76 79 CHARACTER (len=25) :: charout 77 80 REAL(wp), POINTER, DIMENSION(:,: ) :: ztempbac 78 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod 81 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib 79 82 !!--------------------------------------------------------------------- 80 83 ! … … 83 86 ! Allocate temporary workspace 84 87 CALL wrk_alloc( jpi, jpj, ztempbac ) 85 CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi )88 CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 86 89 87 90 ! Initialization of local variables … … 91 94 zdepprod(:,:,:) = 1._wp 92 95 ztempbac(:,:) = 0._wp 96 zfacsib(:,:,:) = xsilab / ( 1.0 - xsilab ) 97 zfacsi(:,:,:) = xsilab 93 98 94 99 ! Computation of the mean phytoplankton concentration as … … 117 122 DO ji = 1, jpi 118 123 ! denitrification factor computed from O2 levels 119 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 124 ! ---------------------------------------------- 125 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( oxymin2 - trb(ji,jj,jk,jpoxy) ) & 120 126 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 121 127 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) … … 147 153 zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 148 154 denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 149 ! 155 ! Update of the tracers trends 156 ! ---------------------------- 157 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 158 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 159 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr (ji,jj,jk) * rdenit 160 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) 161 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimi (ji,jj,jk) * o2ut 162 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 163 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimi(ji,jj,jk) & 164 & + ( rdenit + 1.) * denitr(ji,jj,jk) ) 150 165 END DO 151 166 END DO … … 165 180 zonitr = nitrif * zstep * trb(ji,jj,jk,jpnh4) * ( 1.- nitrfac(ji,jj,jk) ) & 166 181 & / ( 1.+ emoy(ji,jj,jk) ) * ( 1. + fr_i(ji,jj) * emoy(ji,jj,jk) ) 167 denitnh4(ji,jj,jk)= nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)182 zdenitnh4 = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 168 183 ! Update of the tracers trends 169 184 ! ---------------------------- 170 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr - denitnh4(ji,jj,jk)171 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * denitnh4(ji,jj,jk)185 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr - zdenitnh4 186 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * zdenitnh4 172 187 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 173 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk)174 END DO 175 END DO 176 END DO 177 178 188 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * zdenitnh4 189 END DO 190 END DO 191 END DO 192 193 IF(ln_ctl) THEN ! print mean trends (used for debugging) 179 194 WRITE(charout, FMT="('rem1')") 180 195 CALL prt_ctl_trc_info(charout) 181 196 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 182 197 ENDIF 183 198 184 199 DO jk = 1, jpkm1 … … 190 205 ! studies (especially at Papa) have shown this uptake to be significant 191 206 ! ---------------------------------------------------------- 192 zbactfer = 10.e-6* rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk) &193 & * trb(ji,jj,jk,jpfer) / ( 2.5E-10+ trb(ji,jj,jk,jpfer) ) &207 zbactfer = feratb * rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk) & 208 & * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) ) & 194 209 & * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 195 210 #if defined key_kriest … … 205 220 END DO 206 221 207 222 IF(ln_ctl) THEN ! print mean trends (used for debugging) 208 223 WRITE(charout, FMT="('rem2')") 209 224 CALL prt_ctl_trc_info(charout) 210 225 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 211 ENDIF 226 ENDIF 227 228 ! Initialization of the array which contains the labile fraction 229 ! of bSi. Set to a constant in the upper ocean 230 ! --------------------------------------------------------------- 212 231 213 232 DO jk = 1, jpkm1 … … 218 237 zstep = zstep * facvol(ji,jj,jk) 219 238 # endif 239 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 240 zsatur = MAX( rtrn, ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 241 zsatur2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 242 znusil = 0.225 * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 243 220 244 ! Remineralization rate of BSi depedant on T and saturation 221 245 ! --------------------------------------------------------- 222 zsatur = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 223 zsatur = MAX( rtrn, zsatur ) 224 zsatur2 = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 225 znusil = 0.225 * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 226 znusil2 = 0.225 * ( 1. + tsn(ji,jj,1,jp_tem) / 15.) + 0.775 * zsatur2 227 228 ! Two classes of BSi are considered : a labile fraction and 229 ! a more refractory one. The ratio between both fractions is 230 ! constant and specified in the namelist. 231 ! ---------------------------------------------------------- 232 zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 233 zdep = MAX( 0., fsdept(ji,jj,jk) - zdep ) 234 ztem = MAX( tsn(ji,jj,1,jp_tem), 0. ) 235 zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 236 zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 246 IF ( fsdept(ji,jj,jk) > zdep ) THEN 247 zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem ) & 248 & * znusil * fse3t(ji,jj,jk) / wsbio4(ji,jj,jk) ) 249 zfacsi(ji,jj,jk) = zfacsib(ji,jj,jk) / ( 1.0 + zfacsib(ji,jj,jk) ) 250 zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk) * EXP( -0.5 * ( xsiremlab - xsirem ) & 251 & * znusil * fse3t(ji,jj,jk) / wsbio4(ji,jj,jk) ) 252 ENDIF 253 zsiremin = ( xsiremlab * zfacsi(ji,jj,jk) + xsirem * ( 1. - zfacsi(ji,jj,jk) ) ) * zstep * znusil 237 254 zosil = zsiremin * trb(ji,jj,jk,jpgsi) 238 255 ! 239 256 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil 240 257 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + zosil 241 !242 243 244 END DO258 END DO 259 END DO 260 END DO 261 245 262 246 263 IF(ln_ctl) THEN ! print mean trends (used for debugging) … … 250 267 ENDIF 251 268 252 ! Update the arrays TRA which contain the biological sources and sinks253 ! --------------------------------------------------------------------254 255 DO jk = 1, jpkm1256 tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk)257 tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk)258 tra(:,:,jk,jpno3) = tra(:,:,jk,jpno3) - denitr (:,:,jk) * rdenit259 tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk)260 tra(:,:,jk,jpoxy) = tra(:,:,jk,jpoxy) - zolimi (:,:,jk) * o2ut261 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk)262 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + ( rdenit + 1.) * denitr(:,:,jk) )263 END DO264 265 269 IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc ) THEN 266 270 zrfact2 = 1.e3 * rfact2r … … 268 272 CALL iom_put( "DENIT" , denitr(:,:,:) * rdenit * rno3 * tmask(:,:,:) * zrfact2 ) ! Denitrification 269 273 ENDIF 270 271 IF(ln_ctl) THEN ! print mean trends (used for debugging)272 WRITE(charout, FMT="('rem4')")273 CALL prt_ctl_trc_info(charout)274 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)275 ENDIF276 274 ! 277 275 CALL wrk_dealloc( jpi, jpj, ztempbac ) 278 CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi )276 CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 279 277 ! 280 278 IF( nn_timing == 1 ) CALL timing_stop('p4z_rem') … … 296 294 !!---------------------------------------------------------------------- 297 295 NAMELIST/nampisrem/ xremik, nitrif, xsirem, xsiremlab, xsilab, & 298 & oxymin 296 & oxymin, oxymin2, feratb, xkferb 299 297 INTEGER :: ios ! Local integer output status for namelist read 300 298 … … 318 316 WRITE(numout,*) ' NH4 nitrification rate nitrif =', nitrif 319 317 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =', oxymin 318 WRITE(numout,*) ' Minimum O2 concentration for oxic remin. oxymin2 =', oxymin2 319 WRITE(numout,*) ' Bacterial Fe/C ratio feratb =', feratb 320 WRITE(numout,*) ' Half-saturation constant for bact. Fe/C xkferb =', xkferb 320 321 ENDIF 321 322 ! 322 323 nitrfac (:,:,:) = 0._wp 323 324 denitr (:,:,:) = 0._wp 324 denitnh4(:,:,:) = 0._wp325 325 326 326 END SUBROUTINE p4z_rem_init … … 331 331 !! *** ROUTINE p4z_rem_alloc *** 332 332 !!---------------------------------------------------------------------- 333 ALLOCATE( denitr(jpi,jpj,jpk), denitnh4(jpi,jpj,jpk),STAT=p4z_rem_alloc )333 ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 334 334 ! 335 335 IF( p4z_rem_alloc /= 0 ) CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays')
Note: See TracChangeset
for help on using the changeset viewer.