[775] | 1 | MODULE p4zbio |
---|
| 2 | !!====================================================================== |
---|
| 3 | !! *** MODULE p4zbio *** |
---|
| 4 | !! TOP : PISCES bio-model |
---|
| 5 | !!====================================================================== |
---|
| 6 | !! History : 1.0 ! 2004 (O. Aumont) Original code |
---|
| 7 | !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 |
---|
| 8 | !!---------------------------------------------------------------------- |
---|
| 9 | #if defined key_pisces |
---|
| 10 | !!---------------------------------------------------------------------- |
---|
| 11 | !! 'key_pisces' PISCES bio-model |
---|
| 12 | !!---------------------------------------------------------------------- |
---|
| 13 | !! p4z_bio : computes the interactions between the different |
---|
| 14 | !! compartments of PISCES |
---|
| 15 | !!---------------------------------------------------------------------- |
---|
| 16 | USE oce_trc ! |
---|
| 17 | USE trp_trc ! |
---|
| 18 | USE sms ! |
---|
| 19 | USE p4zsink ! |
---|
| 20 | USE p4zsink_kriest ! |
---|
| 21 | USE p4zopt ! |
---|
| 22 | USE p4zlim ! |
---|
| 23 | USE p4zprod ! |
---|
| 24 | USE p4znano ! |
---|
| 25 | USE p4zdiat ! |
---|
| 26 | USE p4zmicro ! |
---|
| 27 | USE p4zmeso ! |
---|
| 28 | USE p4zrem ! |
---|
| 29 | |
---|
| 30 | IMPLICIT NONE |
---|
| 31 | PRIVATE |
---|
[341] | 32 | |
---|
[775] | 33 | PUBLIC p4z_bio ! called in p4zprg.F90 |
---|
[186] | 34 | |
---|
[775] | 35 | !!* Substitution |
---|
| 36 | # include "domzgr_substitute.h90" |
---|
| 37 | !!---------------------------------------------------------------------- |
---|
| 38 | !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) |
---|
| 39 | !! $Header:$ |
---|
| 40 | !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) |
---|
| 41 | !!---------------------------------------------------------------------- |
---|
[617] | 42 | |
---|
[775] | 43 | CONTAINS |
---|
| 44 | |
---|
| 45 | SUBROUTINE p4z_bio |
---|
| 46 | !!--------------------------------------------------------------------- |
---|
| 47 | !! *** ROUTINE p4z_bio *** |
---|
| 48 | !! |
---|
| 49 | !! ** Purpose : Ecosystem model in the whole ocean: computes the |
---|
| 50 | !! different interactions between the different compartments |
---|
| 51 | !! of PISCES |
---|
| 52 | !! |
---|
| 53 | !! ** Method : - ??? |
---|
| 54 | !!--------------------------------------------------------------------- |
---|
| 55 | INTEGER :: ji, jj, jk, jn |
---|
| 56 | REAL(wp) :: zdenom, ztemp |
---|
| 57 | REAL(wp) :: zprodt, zprodca |
---|
| 58 | REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdenom1 |
---|
| 59 | REAL(wp), DIMENSION(jpi,jpj,jpk) :: zfracal |
---|
| 60 | #if defined key_kriest |
---|
| 61 | REAL(wp) :: znumpoc, znumdoc |
---|
[617] | 62 | #else |
---|
[775] | 63 | REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdenom2 |
---|
[617] | 64 | #endif |
---|
[775] | 65 | !!--------------------------------------------------------------------- |
---|
| 66 | |
---|
| 67 | ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION |
---|
| 68 | ! OF PHYTOPLANKTON AND DETRITUS |
---|
| 69 | |
---|
| 70 | zdiss(:,:,:) = 0.01 |
---|
| 71 | |
---|
| 72 | !!gm the use of nmld should be better here? |
---|
| 73 | DO jk = 1, jpkm1 |
---|
| 74 | DO jj = 1, jpj |
---|
| 75 | DO ji = 1, jpi |
---|
| 76 | IF( fsdepw(ji,jj,jk+1) .le. hmld(ji,jj) ) zdiss(ji,jj,jk) = 1.e0 |
---|
| 77 | END DO |
---|
| 78 | END DO |
---|
[339] | 79 | END DO |
---|
[775] | 80 | |
---|
| 81 | ! Compute de different ratios for scavenging of iron |
---|
| 82 | ! -------------------------------------------------- |
---|
| 83 | |
---|
| 84 | DO jk = 1, jpk |
---|
| 85 | DO jj = 1, jpj |
---|
| 86 | DO ji = 1, jpi |
---|
[772] | 87 | #if ! defined key_kriest |
---|
[775] | 88 | zdenom = 1. / ( trn(ji,jj,jk,jppoc) + trn(ji,jj,jk,jpgoc) & |
---|
| 89 | & + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) |
---|
| 90 | zdenom1(ji,jj,jk) = trn(ji,jj,jk,jppoc) * zdenom |
---|
| 91 | zdenom2(ji,jj,jk) = trn(ji,jj,jk,jpgoc) * zdenom |
---|
[617] | 92 | #else |
---|
[775] | 93 | zdenom = 1. / ( trn(ji,jj,jk,jppoc) & |
---|
| 94 | & + trn(ji,jj,jk,jpdsi) + trn(ji,jj,jk,jpcal) + rtrn ) |
---|
| 95 | zdenom1(ji,jj,jk) = trn(ji,jj,jk,jppoc) * zdenom |
---|
[617] | 96 | #endif |
---|
[775] | 97 | END DO |
---|
[186] | 98 | END DO |
---|
[775] | 99 | END DO |
---|
| 100 | |
---|
| 101 | ! Compute the fraction of nanophytoplankton that is made of calcifiers |
---|
| 102 | ! -------------------------------------------------------------------- |
---|
| 103 | |
---|
| 104 | DO jk = 1, jpkm1 |
---|
| 105 | DO jj = 1, jpj |
---|
| 106 | DO ji = 1, jpi |
---|
| 107 | ztemp = MAX( 0., tn(ji,jj,jk) ) |
---|
| 108 | zfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) & |
---|
| 109 | & * MAX( 0.0001, ztemp / ( 2.+ ztemp ) ) & |
---|
| 110 | & * MAX( 1., trn(ji,jj,jk,jpphy) * 1.e6 / 2. ) |
---|
| 111 | zfracal(ji,jj,jk) = MIN( 0.8 , zfracal(ji,jj,jk) ) |
---|
| 112 | zfracal(ji,jj,jk) = MAX( 0.01, zfracal(ji,jj,jk) ) |
---|
| 113 | END DO |
---|
[339] | 114 | END DO |
---|
[775] | 115 | END DO |
---|
[186] | 116 | |
---|
[775] | 117 | ! computation of the vertical flux of particulate organic matter |
---|
| 118 | ! -------------------------------------------------------------- |
---|
[617] | 119 | |
---|
[775] | 120 | IF( lk_kriest ) THEN ; CALL p4z_sink_kriest ! Sink due to vertical flux of POM |
---|
| 121 | ELSE ; CALL p4z_sink ! |
---|
| 122 | ENDIF |
---|
[617] | 123 | |
---|
[775] | 124 | ! compute the PAR in the water column |
---|
| 125 | ! ----------------------------------- |
---|
[186] | 126 | |
---|
[775] | 127 | CALL p4z_opt ! Optical |
---|
[186] | 128 | |
---|
[775] | 129 | ! compute the co-limitations by the various nutrients |
---|
| 130 | ! ---------------------------------------------------- |
---|
[186] | 131 | |
---|
[775] | 132 | CALL p4z_lim |
---|
[186] | 133 | |
---|
[775] | 134 | ! compute phytoplankton growth rate over the global ocean. |
---|
| 135 | ! ------------------------------------------------------- |
---|
| 136 | ! (Growth rates for each element is computed (C, Si, Fe, Chl)) |
---|
[186] | 137 | |
---|
[775] | 138 | CALL p4z_prod |
---|
[186] | 139 | |
---|
[775] | 140 | ! phytoplankton mortality (Mortality losses for each elements are computed (C, Fe, Si, Chl) ) |
---|
| 141 | ! ----------------------- |
---|
[186] | 142 | |
---|
[775] | 143 | CALL p4z_nano ! nanophytoplankton |
---|
| 144 | |
---|
| 145 | CALL p4z_diat ! diatoms |
---|
[186] | 146 | |
---|
[775] | 147 | ! zooplankton sources/sinks routines (each elements are computed (C, Fe, Si, Chl) ) |
---|
| 148 | ! ---------------------------------- |
---|
[186] | 149 | |
---|
[775] | 150 | CALL p4z_micro ! microzooplankton |
---|
| 151 | |
---|
| 152 | CALL p4z_meso ! mesozooplankton |
---|
[186] | 153 | |
---|
[775] | 154 | ! computation of remineralization terms of organic matter + scavenging of Fe |
---|
| 155 | ! -------------------------------------------------------------------------- |
---|
| 156 | |
---|
| 157 | CALL p4z_rem ! remineralization |
---|
[617] | 158 | |
---|
[775] | 159 | |
---|
| 160 | ! Determination of tracers concentration as a function of biological sources and sinks |
---|
| 161 | ! ------------------------------------------------------------------------------------ |
---|
| 162 | |
---|
| 163 | DO jk = 1, jpkm1 |
---|
| 164 | |
---|
| 165 | ! Evolution of PO4 |
---|
| 166 | ! ---------------- |
---|
| 167 | trn(:,:,jk,jppo4) = trn(:,:,jk,jppo4) - prorca(:,:,jk) - prorca2(:,:,jk) & |
---|
| 168 | & + olimi (:,:,jk) + grarem (:,:,jk) * sigma1 & |
---|
| 169 | & + denitr(:,:,jk) + grarem2(:,:,jk) * sigma2 |
---|
| 170 | |
---|
| 171 | ! Evolution of NO3 and NH4 |
---|
| 172 | ! ------------------------ |
---|
| 173 | trn(:,:,jk,jpno3) = trn(:,:,jk,jpno3) - pronew(:,:,jk) - pronew2(:,:,jk) & |
---|
| 174 | & + onitr (:,:,jk) - denitr (:,:,jk) * rdenit |
---|
| 175 | |
---|
| 176 | trn(:,:,jk,jpnh4) = trn(:,:,jk,jpnh4) - proreg(:,:,jk) - proreg2(:,:,jk) & |
---|
| 177 | & + olimi (:,:,jk) + grarem (:,:,jk) * sigma1 & |
---|
| 178 | & + grarem2(:,:,jk) * sigma2 & |
---|
| 179 | & - onitr (:,:,jk) + denitr (:,:,jk) |
---|
| 180 | |
---|
| 181 | ! Evolution of Phytoplankton |
---|
| 182 | ! -------------------------- |
---|
| 183 | trn(:,:,jk,jpphy) = trn(:,:,jk,jpphy) + prorca (:,:,jk) * ( 1.- excret ) - tortp(:,:,jk) & |
---|
| 184 | & - grazp (:,:,jk) - grazn(:,:,jk) - respp(:,:,jk) |
---|
| 185 | |
---|
| 186 | trn(:,:,jk,jpnch) = trn(:,:,jk,jpnch) + prorca6(:,:,jk) * ( 1.- excret ) - tortnch(:,:,jk) & |
---|
| 187 | & - grazpch(:,:,jk) - graznch(:,:,jk)- respnch(:,:,jk) |
---|
| 188 | |
---|
| 189 | ! Evolution of Diatoms |
---|
| 190 | ! -------------------- |
---|
| 191 | trn(:,:,jk,jpdia) = trn(:,:,jk,jpdia) + prorca2(:,:,jk) * ( 1.- excret2 ) - tortp2(:,:,jk) & |
---|
| 192 | & - respp2 (:,:,jk) - grazd(:,:,jk) - grazsd(:,:,jk) |
---|
| 193 | |
---|
| 194 | trn(:,:,jk,jpdch) = trn(:,:,jk,jpdch) + prorca7(:,:,jk) * ( 1.- excret2 ) - tortdch(:,:,jk) & |
---|
| 195 | & - respdch(:,:,jk) - grazdch(:,:,jk) - grazsch(:,:,jk) |
---|
| 196 | |
---|
| 197 | ! Evolution of Zooplankton |
---|
| 198 | ! ------------------------ |
---|
| 199 | trn(:,:,jk,jpzoo) = trn(:,:,jk,jpzoo) + epsher * ( grazp(:,:,jk) + grazm(:,:,jk) + grazsd(:,:,jk) ) & |
---|
| 200 | & - grazz(:,:,jk) - tortz(:,:,jk) - respz(:,:,jk) |
---|
| 201 | |
---|
| 202 | ! Evolution of Mesozooplankton |
---|
| 203 | ! ------------------------ |
---|
| 204 | trn(:,:,jk,jpmes) = trn(:,:,jk,jpmes) + epsher2 * ( grazd (:,:,jk) + grazz (:,:,jk) + grazn(:,:,jk) & |
---|
| 205 | & + grazpoc(:,:,jk) + grazffe(:,:,jk) ) & |
---|
| 206 | & - tortz2(:,:,jk) - respz2(:,:,jk) |
---|
| 207 | |
---|
| 208 | ! Evolution of O2 |
---|
| 209 | ! --------------- |
---|
| 210 | trn(:,:,jk,jpoxy) = trn(:,:,jk,jpoxy) + o2ut * ( proreg(:,:,jk) + proreg2(:,:,jk) - olimi(:,:,jk) & |
---|
| 211 | & -grarem(:,:,jk) * sigma1 - grarem2(:,:,jk) * sigma2 ) & |
---|
| 212 | & + ( o2ut + o2nit ) * ( pronew(:,:,jk) + pronew2(:,:,jk) ) & |
---|
| 213 | & - o2nit * onitr(:,:,jk) |
---|
| 214 | |
---|
| 215 | ! Evolution of IRON |
---|
| 216 | ! ----------------- |
---|
| 217 | trn(:,:,jk,jpfer) = trn(:,:,jk,jpfer) + ( excret - 1.) * prorca5(:,:,jk) - xaggdfe (:,:,jk) & |
---|
| 218 | & + ( excret2 - 1.) * prorca4(:,:,jk) - xbactfer(:,:,jk) & |
---|
| 219 | & + grafer(:,:,jk) + grafer2(:,:,jk) & |
---|
| 220 | & + ofer (:,:,jk) - xscave (:,:,jk) |
---|
| 221 | ! |
---|
[186] | 222 | END DO |
---|
| 223 | |
---|
| 224 | |
---|
[772] | 225 | #if defined key_kriest |
---|
[617] | 226 | |
---|
[775] | 227 | #include "p4zbio_kriest.h90" |
---|
[617] | 228 | |
---|
| 229 | #else |
---|
| 230 | |
---|
[775] | 231 | #include "p4zbio_std.h90" |
---|
[617] | 232 | |
---|
| 233 | #endif |
---|
| 234 | |
---|
| 235 | |
---|
[775] | 236 | DO jk = 1, jpkm1 |
---|
[617] | 237 | |
---|
[775] | 238 | ! Evolution of biogenic Silica |
---|
| 239 | ! ---------------------------- |
---|
| 240 | trn(:,:,jk,jpbsi) = trn(:,:,jk,jpbsi) + prorca3(:,:,jk) * ( 1.- excret2 ) - grazss(:,:,jk) & |
---|
| 241 | & - tortds (:,:,jk) - respds(:,:,jk) - grazs (:,:,jk) |
---|
| 242 | |
---|
| 243 | ! Evolution of sinking biogenic silica |
---|
| 244 | ! ------------------------------------ |
---|
| 245 | trn(:,:,jk,jpdsi) = trn(:,:,jk,jpdsi) + tortds (:,:,jk) + respds(:,:,jk) + grazs(:,:,jk) & |
---|
| 246 | & - osil (:,:,jk) + grazss(:,:,jk) |
---|
| 247 | |
---|
| 248 | ! Evolution of biogenic diatom Iron |
---|
| 249 | ! --------------------------------- |
---|
| 250 | trn(:,:,jk,jpdfe) = trn(:,:,jk,jpdfe) + prorca4(:,:,jk) * ( 1.- excret2 ) - grazsf(:,:,jk) & |
---|
| 251 | & - tortdf (:,:,jk) - respdf(:,:,jk) - grazf (:,:,jk) |
---|
| 252 | |
---|
| 253 | ! Evolution of biogenic nanophytoplankton Iron |
---|
| 254 | ! -------------------------------------------- |
---|
| 255 | trn(:,:,jk,jpnfe) = trn(:,:,jk,jpnfe) + prorca5(:,:,jk) * ( 1.- excret ) - graznf(:,:,jk) & |
---|
| 256 | & - tortnf (:,:,jk) - respnf(:,:,jk) - grazpf(:,:,jk) |
---|
| 257 | |
---|
| 258 | ! Evolution of dissolved Silica |
---|
| 259 | ! ----------------------------- |
---|
| 260 | trn(:,:,jk,jpsil) = trn(:,:,jk,jpsil) - ( 1.- excret2 ) * prorca3(:,:,jk) + osil(:,:,jk) |
---|
| 261 | |
---|
[186] | 262 | END DO |
---|
[775] | 263 | |
---|
| 264 | ! Evolution of calcite and silicates as a function of the two tracers |
---|
| 265 | ! ------------------------------------------------------------------- |
---|
| 266 | DO jk = 1, jpkm1 |
---|
| 267 | DO jj = 1, jpj |
---|
| 268 | DO ji = 1, jpi |
---|
[186] | 269 | |
---|
[775] | 270 | zprodt = prorca(ji,jj,jk) + prorca2(ji,jj,jk) - olimi(ji,jj,jk) - grarem(ji,jj,jk) * sigma1 & |
---|
| 271 | & - grarem2(ji,jj,jk) * sigma2 - denitr(ji,jj,jk) |
---|
| 272 | zprodca = pronew(ji,jj,jk) + pronew2(ji,jj,jk) - onitr(ji,jj,jk) + rdenit * denitr(ji,jj,jk) |
---|
| 273 | |
---|
| 274 | ! potential production of calcite and biogenic silicate |
---|
| 275 | ! ------------------------------------------------------ |
---|
| 276 | prcaca(ji,jj,jk) = zfracal(ji,jj,jk) & |
---|
| 277 | & * ( part * ( unass*grazp(ji,jj,jk) + unass2*grazn(ji,jj,jk) ) & |
---|
| 278 | & + tortp(ji,jj,jk) + respp(ji,jj,jk) ) |
---|
| 279 | |
---|
| 280 | ! Consumption of Total (12C)O2 |
---|
| 281 | ! ---------------------------- |
---|
| 282 | trn(ji,jj,jk,jpdic) = trn(ji,jj,jk,jpdic) - zprodt - prcaca(ji,jj,jk) |
---|
| 283 | |
---|
| 284 | ! Consumption of alkalinity due to ca++ uptake and increase of |
---|
| 285 | ! alkalinity due to nitrate consumption during organic soft tissue production |
---|
| 286 | ! --------------------------------------------------------- |
---|
| 287 | trn(ji,jj,jk,jptal) = trn(ji,jj,jk,jptal) + rno3 * zprodca - 2.* prcaca(ji,jj,jk) |
---|
| 288 | ! |
---|
| 289 | END DO |
---|
| 290 | END DO |
---|
[186] | 291 | END DO |
---|
| 292 | |
---|
[775] | 293 | |
---|
| 294 | ! Production of calcite due to biological production |
---|
| 295 | ! -------------------------------------------------- |
---|
| 296 | DO jk = 1, jpkm1 |
---|
| 297 | trn(:,:,jk,jpcal) = trn(:,:,jk,jpcal) + prcaca(:,:,jk) |
---|
[186] | 298 | END DO |
---|
| 299 | |
---|
[775] | 300 | |
---|
| 301 | ! Loop to test if tracers concentrations fall below 0. |
---|
| 302 | ! ---------------------------------------------------- |
---|
| 303 | |
---|
| 304 | znegtr(:,:,:) = 1.e0 |
---|
| 305 | DO jn = 1, jptra |
---|
| 306 | DO jk = 1, jpk |
---|
| 307 | DO jj = 1, jpj |
---|
| 308 | DO ji = 1, jpi |
---|
| 309 | IF( trn(ji,jj,jk,jn) < 0.e0 ) znegtr(ji,jj,jk) = 0.e0 |
---|
| 310 | END DO |
---|
[339] | 311 | END DO |
---|
[775] | 312 | END DO |
---|
[260] | 313 | END DO |
---|
[775] | 314 | ! ! where at least 1 tracer concentration becomes negative |
---|
| 315 | ! ! all tracer tendancy are set to zero (i.e. trn = trb) |
---|
| 316 | DO jn = 1, jptra |
---|
| 317 | trn(:,:,:,jn) = trb(:,:,:,jn) + znegtr(:,:,:) * ( trn(:,:,:,jn) - trb(:,:,:,jn) ) |
---|
[339] | 318 | END DO |
---|
[775] | 319 | |
---|
| 320 | # if defined key_trc_dia3d |
---|
| 321 | !!gm potential bug hard coded index on trc3d |
---|
| 322 | trc3d(:,:,:, 4) = etot(:,:,:) |
---|
| 323 | trc3d(:,:,:, 5) = prorca (:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 324 | trc3d(:,:,:, 6) = prorca2(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 325 | trc3d(:,:,:, 7) = pronew (:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 326 | trc3d(:,:,:, 8) = pronew2(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 327 | trc3d(:,:,:, 9) = prorca3(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 328 | trc3d(:,:,:,10) = prorca4(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 329 | # if ! defined key_kriest |
---|
| 330 | trc3d(:,:,:,11) = prorca5(:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 331 | # else |
---|
| 332 | trc3d(:,:,:,11) = prcaca (:,:,:) * znegtr(:,:,:) * 1.e3 * rfact2r |
---|
| 333 | # endif |
---|
| 334 | # endif |
---|
| 335 | ! |
---|
| 336 | END SUBROUTINE p4z_bio |
---|
| 337 | |
---|
[617] | 338 | #else |
---|
[775] | 339 | !!====================================================================== |
---|
| 340 | !! Dummy module : No PISCES bio-model |
---|
| 341 | !!====================================================================== |
---|
| 342 | CONTAINS |
---|
| 343 | SUBROUTINE p4z_bio ! Empty routine |
---|
| 344 | END SUBROUTINE p4z_bio |
---|
| 345 | #endif |
---|
| 346 | |
---|
| 347 | !!====================================================================== |
---|
| 348 | END MODULE p4zbio |
---|