Changeset 777 for branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER/trcbio.F90
- Timestamp:
- 2007-12-19T19:40:57+01:00 (16 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER/trcbio.F90
r774 r777 1 2 CCC $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/trcbio.F,v 1.9 2007/10/12 09:36:28 opalod Exp $ 3 CCC TOP 1.0 , LOCEAN-IPSL (2005) 4 C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 5 C --------------------------------------------------------------------------- 6 SUBROUTINE trcbio(kt) 7 #if defined key_top && defined key_lobster 8 CCC--------------------------------------------------------------------- 9 CCC 10 CCC ROUTINE trcbio 11 CCC ******************* 12 CCC 13 CCC PURPOSE : 14 CCC --------- 15 CCC compute the now trend due to biogeochemical processes 16 CCC and add it to the general trend of passive tracers equations. 17 CCC 18 CCC Three options: 19 CCC Default option : no biological trend 20 CCC IF 'key_lobster' : LOBSTER1 bio-model 21 CCC 22 CC METHOD : 23 CC ------- 24 CC each now biological flux is calculated in FUNCTION of now 25 CC concentrations of tracers. 26 CC depending on the tracer, these fluxes are sources or sinks. 27 CC the total of the sources and sinks for each tracer 28 CC is added to the general trend. 29 CC 30 CC tra = tra + zf...tra - zftra... 31 CC | | 32 CC | | 33 CC source sink 34 CC 35 CC 36 CC IF 'key_trc_diabio' key is activated, the biogeochemical 37 CC trends for passive tracers are saved for futher diagnostics. 38 CC 39 CC multitasked on vertical slab (jj-loop) 40 CC 41 CC ----- 42 CC argument 43 CC ktask : task identificator 44 CC kt : time step 45 CC COMMON 46 CC /comcoo/ : orthogonal curvilinear coordinates 47 CC and scale factors 48 CC depths 49 CC /cottrp/ : present and next fields for passive 50 CC : tracers 51 CC /comtsk/ : multitasking 52 CC /comtke/ : emin, en() 53 CC /cotbio/ : biological parameters 54 CC 55 CC OUTPUT : 56 CC ------ 57 CC COMMON 58 CC /cottrp/ tra : general tracer trend increased by the 59 CC now horizontal tracer advection trend 60 CC /cottbd/ trbio : now horizontal tracer advection trend 61 CC (IF 'key_trc_diabio' is activated) 62 CC 63 CC WORKSPACE : 64 CC --------- 65 CC local 66 CC zdet,zzoo,zphy,znh4,zno3,zdom : now concentrations 67 CC zlt,zlno3,zlnh4,zle : limitation terms for phyto 68 CC zfno3phy and so on.. : fluxes between bio boxes 69 CC zphya,zzooa,zdeta, ... : after bio trends 70 CC zppz, zpdz, zpppz, zppdz, zfood : preferences terms 71 CC zfilpz, zfilpd : filtration terms 72 CC COMMON 73 CC 74 CC EXTERNAL : no 75 CC -------- 76 CC 77 CC REFERENCES : no 78 CC ---------- 79 CC 80 CC MODIFICATIONS: 81 CC -------------- 82 CC original : 99-07 (M. Levy) 83 CC 00-12 (E. Kestenare): assign a parameter 84 CC to name individual tracers 85 CC 01-03 (M. Levy) LNO3 + dia2d 86 CC---------------------------------------------------------------------- 87 CC---------------------------------------------------------------------- 88 USE oce_trc 89 USE trp_trc 90 USE sms 91 USE lbclnk 92 IMPLICIT NONE 93 CC local declarations 94 CC ================== 95 INTEGER kt 96 INTEGER ji,jj,jk,jn 97 REAL ztot(jpi) 98 #if defined key_trc_diaadd 99 REAL ze3t(jpi,jpj,jpk) 100 #endif 101 REAL zdet,zzoo,zphy,zno3,znh4,zdom,zlno3,zlnh4,zle,zlt 102 REAL zno3phy, znh4phy, zphynh4, zphydom, zphydet, zphyzoo, zdetzoo 103 $ ,zzoonh4, zzoodom, zzoodet, zdetnh4, zdetdom, znh4no3, zdomnh4 104 $ ,zppz,zpdz,zpppz,zppdz,zfood,zfilpz,zfildz,zphya,zzooa,zno3a 105 $ ,znh4a,zdeta,zdoma, ztra, zzoobod, zboddet, zdomaju 106 107 CC---------------------------------------------------------------------- 108 CC statement functions 109 CC =================== 110 CDIR$ NOLIST 111 #include "domzgr_substitute.h90" 112 CDIR$ LIST 113 CCC--------------------------------------------------------------------- 114 CCC OPA8, LODYC (07/99) 115 CCC--------------------------------------------------------------------- 116 C | --------------| 117 C | LOBSTER1 MODEL| 118 C | --------------| 119 120 #if defined key_trc_diaadd 121 C convert fluxes in per day 122 ze3t(:,:,:) = 0. 123 DO jk=1,jpkbm1 124 DO jj = 2, jpjm1 125 DO ji = 2, jpim1 126 ze3t(ji,jj,jk)=fse3t(ji,jj,jk)*86400. 127 END DO 128 END DO 129 END DO 130 #endif 131 C 132 C vertical slab 133 C ============= 134 C 135 DO 1000 jj = 2,jpjm1 136 C 137 C 1. biological level 138 C =================== 139 C 140 DO ji = 2,jpim1 141 fbod(ji,jj)=0. 142 #if defined key_trc_diaadd 143 DO jn=1,jpdia2d 144 trc2d(ji,jj,jn)=0. 145 END DO 146 #endif 147 END DO 148 149 DO jk=1,jpkbm1 150 DO ji = 2,jpim1 151 C 152 C 153 C 1.1 trophic variables( det, zoo, phy, no3, nh4, dom) 154 C --------------------------------------------------- 155 C 156 C negative trophic variables DO not contribute to the fluxes 157 C 158 zdet = max(0.,trn(ji,jj,jk,jpdet)) 159 zzoo = max(0.,trn(ji,jj,jk,jpzoo)) 160 zphy = max(0.,trn(ji,jj,jk,jpphy)) 161 zno3 = max(0.,trn(ji,jj,jk,jpno3)) 162 znh4 = max(0.,trn(ji,jj,jk,jpnh4)) 163 zdom = max(0.,trn(ji,jj,jk,jpdom)) 164 C 165 C 166 C 1.2 Limitations 167 C ---------------- 168 C 169 zlt = 1. 170 zle = 1. - exp( -xpar(ji,jj,jk)/aki/zlt) 171 C psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03 172 zlno3 = zno3* exp(-psinut*znh4) / (akno3+zno3) 173 zlnh4 = znh4 / (znh4+aknh4) 174 175 C 176 C 177 C 1.3 sinks and sources 178 C --------------------- 179 C 180 C 181 C 1. phytoplankton production and exsudation 182 C 183 zno3phy = tmumax * zle * zlt * zlno3 * zphy 184 znh4phy = tmumax * zle * zlt * zlnh4 * zphy 185 186 C fphylab added by asklod AS Kremeur 2005-03 187 zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy) 188 zphynh4 = rgamma * fphylab * (zno3phy + znh4phy) 189 190 C 191 C 2. zooplankton production 192 C 193 C preferences 194 C 195 zppz = rppz 196 zpdz = 1. - rppz 197 zpppz = ( zppz * zphy ) / 198 $ ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 199 zppdz = ( zpdz * zdet ) / 200 $ ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 201 zfood = zpppz * zphy + zppdz * zdet 202 C 203 C filtration 204 C 205 zfilpz = taus * zpppz / (aks + zfood) 206 zfildz = taus * zppdz / (aks + zfood) 207 C 208 C grazing 209 C 210 zphyzoo = zfilpz * zphy * zzoo 211 zdetzoo = zfildz * zdet * zzoo 212 C 213 C 3. fecal pellets production 214 C 215 zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo 216 C 217 C 4. zooplankton liquide excretion 218 C 219 zzoonh4 = tauzn * fzoolab * zzoo 220 zzoodom = tauzn * (1 - fzoolab) * zzoo 221 C 222 C 5. mortality 223 C 224 C phytoplankton mortality 225 C 226 zphydet = tmminp * zphy 227 C 228 C 229 C zooplankton mortality 230 c closure : flux fbod is redistributed below level jpkbio 231 C 232 zzoobod = tmminz * zzoo * zzoo 233 fbod(ji,jj) = fbod(ji,jj) 234 $ + (1-fdbod) * zzoobod * fse3t(ji,jj,jk) 235 zboddet = fdbod * zzoobod 236 C 237 C 238 C 6. detritus and dom breakdown 239 C 240 C 241 zdetnh4 = taudn * fdetlab * zdet 242 zdetdom = taudn * (1 - fdetlab) * zdet 243 244 zdomnh4 = taudomn * zdom 245 C 246 C flux added to express how the excess of nitrogen from 247 C PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment) 248 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 249 C 250 C 7. Nitrification 251 C 252 znh4no3 = taunn * znh4 253 C 254 C 255 C 256 C 1.4 determination of trends 257 C --------------------------- 258 C 259 C total trend for each biological tracer 260 C 261 zphya = zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo 262 $ - zphydet 263 zzooa = zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 264 $ - zzoobod 265 zno3a = - zno3phy + znh4no3 266 znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 267 $ + zdetnh4 + zdomaju 268 zdeta = zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + 269 $ zboddet 270 zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju 271 C 1 MODULE trcbio 2 !!====================================================================== 3 !! *** MODULE trcbio *** 4 !! TOP : LOBSTER 5 !!====================================================================== 6 !! History : - ! 1999-07 (M. Levy) Original code 7 !! - ! 2000-12 (E. Kestenare) assign a parameter to name individual tracers 8 !! - ! 2001-03 (M. Levy) LNO3 + dia2d 9 !! 2.0 ! 2007-12 (C. Deltel, G. Madec) F90 10 !!---------------------------------------------------------------------- 11 #if defined key_lobster 12 !!---------------------------------------------------------------------- 13 !! 'key_lobster' LOBSTER bio-model 14 !!---------------------------------------------------------------------- 15 !! trc_bio : 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! 18 USE trp_trc ! 19 USE sms ! 20 USE lbclnk ! 21 22 IMPLICIT NONE 23 PRIVATE 24 25 PUBLIC trc_bio ! called in ??? 26 27 !!* Substitution 28 # include "domzgr_substitute.h90" 29 !!---------------------------------------------------------------------- 30 !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007) 31 !! $Id:$ 32 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 33 !!---------------------------------------------------------------------- 34 35 CONTAINS 36 37 SUBROUTINE trc_bio( kt ) 38 !!--------------------------------------------------------------------- 39 !! *** ROUTINE trc_bio *** 40 !! 41 !! ** Purpose : compute the now trend due to biogeochemical processes 42 !! and add it to the general trend of passive tracers equations 43 !! 44 !! ** Method : each now biological flux is calculated in function of now 45 !! concentrations of tracers. 46 !! depending on the tracer, these fluxes are sources or sinks. 47 !! the total of the sources and sinks for each tracer 48 !! is added to the general trend. 49 !! 50 !! tra = tra + zf...tra - zftra... 51 !! | | 52 !! | | 53 !! source sink 54 !! 55 !! IF 'key_trc_diabio' defined , the biogeochemical trends 56 !! for passive tracers are saved for futher diagnostics. 57 !!--------------------------------------------------------------------- 58 INTEGER, INTENT( in ) :: kt ! ocean time-step index 59 !! 60 INTEGER :: ji, jj, jk 61 REAL(wp) :: zdet, zzoo, zphy, zno3, znh4, zdom ! now concentrations 62 REAL(wp) :: zlno3, zlnh4, zle, zlt ! limitation terms for phyto 63 REAL(wp) :: zno3phy, znh4phy, zphynh4, zphydom 64 REAL(wp) :: zphydet, zphyzoo, zdetzoo 65 REAL(wp) :: zzoonh4, zzoodom, zzoodet, zdetnh4, zdetdom 66 REAL(wp) :: znh4no3, zdomnh4, zppz, zpdz, zpppz, zppdz, zfood 67 REAL(wp) :: zfilpz, zfildz, zphya, zzooa, zno3a 68 REAL(wp) :: znh4a, zdeta, zdoma, zzoobod, zboddet, zdomaju 69 #if defined key_trc_diaadd 70 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze3t 71 #endif 72 !!--------------------------------------------------------------------- 73 74 IF( kt == nit000 ) THEN 75 IF(lwp) WRITE(numout,*) 76 IF(lwp) WRITE(numout,*) ' trc_bio: LOBSTER bio-model' 77 IF(lwp) WRITE(numout,*) ' ~~~~~~~' 78 ENDIF 79 80 #if defined key_trc_diaadd 81 ! convert fluxes in per day 82 ze3t(:,:,:) = 0.e0 83 DO jk = 1, jpkbm1 84 ze3t(:,:,jk) = fse3t(:,:,jk) * 86400. 85 END DO 86 #endif 87 88 fbod(:,:) = 0.e0 89 #if defined key_trc_diaadd 90 DO ji = 1, jpdia2d 91 trc2d(:,:,ji) = 0.e0 92 END DO 93 #endif 94 95 96 ! ! -------------------------- ! 97 DO jk = 1, jpkbm1 ! Upper ocean (bio-layers) ! 98 ! ! -------------------------- ! 99 DO jj = 2, jpjm1 100 DO ji = 2, jpim1 !!gm use of fs_2 fs_jpm1 required here 101 102 ! trophic variables( det, zoo, phy, no3, nh4, dom) 103 ! ------------------------------------------------ 104 105 ! negative trophic variables DO not contribute to the fluxes 106 zdet = MAX( 0.e0, trn(ji,jj,jk,jpdet) ) 107 zzoo = MAX( 0.e0, trn(ji,jj,jk,jpzoo) ) 108 zphy = MAX( 0.e0, trn(ji,jj,jk,jpphy) ) 109 zno3 = MAX( 0.e0, trn(ji,jj,jk,jpno3) ) 110 znh4 = MAX( 0.e0, trn(ji,jj,jk,jpnh4) ) 111 zdom = MAX( 0.e0, trn(ji,jj,jk,jpdom) ) 112 113 ! Limitations 114 zlt = 1. 115 zle = 1. - EXP( -xpar(ji,jj,jk) / aki / zlt ) 116 ! psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03 117 zlno3 = zno3 * EXP( -psinut * znh4 ) / ( akno3 + zno3 ) 118 zlnh4 = znh4 / (znh4+aknh4) 119 120 121 ! sinks and sources 122 ! phytoplankton production and exsudation 123 zno3phy = tmumax * zle * zlt * zlno3 * zphy 124 znh4phy = tmumax * zle * zlt * zlnh4 * zphy 125 126 ! fphylab added by asklod AS Kremeur 2005-03 127 zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy) 128 zphynh4 = rgamma * fphylab * (zno3phy + znh4phy) 129 130 ! zooplankton production 131 ! preferences 132 zppz = rppz 133 zpdz = 1. - rppz 134 zpppz = ( zppz * zphy ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 135 zppdz = ( zpdz * zdet ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 136 zfood = zpppz * zphy + zppdz * zdet 137 ! filtration 138 zfilpz = taus * zpppz / (aks + zfood) 139 zfildz = taus * zppdz / (aks + zfood) 140 ! grazing 141 zphyzoo = zfilpz * zphy * zzoo 142 zdetzoo = zfildz * zdet * zzoo 143 144 ! fecal pellets production 145 zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo 146 147 ! zooplankton liquide excretion 148 zzoonh4 = tauzn * fzoolab * zzoo 149 zzoodom = tauzn * (1 - fzoolab) * zzoo 150 151 ! mortality 152 ! phytoplankton mortality 153 zphydet = tmminp * zphy 154 155 ! zooplankton mortality 156 ! closure : flux fbod is redistributed below level jpkbio 157 zzoobod = tmminz * zzoo * zzoo 158 fbod(ji,jj) = fbod(ji,jj) + (1-fdbod) * zzoobod * fse3t(ji,jj,jk) 159 zboddet = fdbod * zzoobod 160 161 ! detritus and dom breakdown 162 zdetnh4 = taudn * fdetlab * zdet 163 zdetdom = taudn * (1 - fdetlab) * zdet 164 165 zdomnh4 = taudomn * zdom 166 167 ! flux added to express how the excess of nitrogen from 168 ! PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment) 169 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 170 171 ! Nitrification 172 znh4no3 = taunn * znh4 173 174 ! determination of trends 175 ! total trend for each biological tracer 176 zphya = zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet 177 zzooa = zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod 178 zno3a = - zno3phy + znh4no3 179 znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju 180 zdeta = zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + zboddet 181 zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju 182 272 183 #if defined key_trc_diabio 273 trbio(ji,jj,jk,1) = zno3phy274 trbio(ji,jj,jk,2) = znh4phy275 trbio(ji,jj,jk,3) = zphynh4276 trbio(ji,jj,jk,4) = zphydom277 trbio(ji,jj,jk,5) = zphyzoo278 trbio(ji,jj,jk,6) = zphydet279 trbio(ji,jj,jk,7) = zdetzoo280 trbio(ji,jj,jk,9) = zzoodet281 trbio(ji,jj,jk,10) = zzoobod282 trbio(ji,jj,jk,11) = zzoonh4283 trbio(ji,jj,jk,12) = zzoodom284 trbio(ji,jj,jk,13) = znh4no3285 trbio(ji,jj,jk,14) = zdomnh4286 trbio(ji,jj,jk,15) = zdetnh4287 #endif 288 #if defined key_trc_diaadd 289 trc2d(ji,jj,1)=trc2d(ji,jj,1)+zno3phy*ze3t(ji,jj,jk)290 trc2d(ji,jj,2)=trc2d(ji,jj,2)+znh4phy*ze3t(ji,jj,jk)291 trc2d(ji,jj,3)=trc2d(ji,jj,3)+zphydom*ze3t(ji,jj,jk)292 trc2d(ji,jj,4)=trc2d(ji,jj,4)+zphynh4*ze3t(ji,jj,jk)293 trc2d(ji,jj,5)=trc2d(ji,jj,5)+zphyzoo*ze3t(ji,jj,jk)294 trc2d(ji,jj,6)=trc2d(ji,jj,6)+zphydet*ze3t(ji,jj,jk)295 trc2d(ji,jj,7)=trc2d(ji,jj,7)+zdetzoo*ze3t(ji,jj,jk)296 ctrend number 8 is in trcsed.F297 trc2d(ji,jj,9)=trc2d(ji,jj,9)+zzoodet*ze3t(ji,jj,jk)298 trc2d(ji,jj,10)=trc2d(ji,jj,10)+zzoobod*ze3t(ji,jj,jk)299 trc2d(ji,jj,11)=trc2d(ji,jj,11)+zzoonh4*ze3t(ji,jj,jk)300 trc2d(ji,jj,12)=trc2d(ji,jj,12)+zzoodom*ze3t(ji,jj,jk)301 trc2d(ji,jj,13)=trc2d(ji,jj,13)+znh4no3*ze3t(ji,jj,jk)302 trc2d(ji,jj,14)=trc2d(ji,jj,14)+zdomnh4*ze3t(ji,jj,jk)303 trc2d(ji,jj,15)=trc2d(ji,jj,15)+zdetnh4*ze3t(ji,jj,jk)184 trbio(ji,jj,jk, 1) = zno3phy 185 trbio(ji,jj,jk, 2) = znh4phy 186 trbio(ji,jj,jk, 3) = zphynh4 187 trbio(ji,jj,jk, 4) = zphydom 188 trbio(ji,jj,jk, 5) = zphyzoo 189 trbio(ji,jj,jk, 6) = zphydet 190 trbio(ji,jj,jk, 7) = zdetzoo 191 trbio(ji,jj,jk, 9) = zzoodet 192 trbio(ji,jj,jk,10) = zzoobod 193 trbio(ji,jj,jk,11) = zzoonh4 194 trbio(ji,jj,jk,12) = zzoodom 195 trbio(ji,jj,jk,13) = znh4no3 196 trbio(ji,jj,jk,14) = zdomnh4 197 trbio(ji,jj,jk,15) = zdetnh4 198 #endif 199 #if defined key_trc_diaadd 200 trc2d(ji,jj, 1) = trc2d(ji,jj, 1) + zno3phy * ze3t(ji,jj,jk) 201 trc2d(ji,jj, 2) = trc2d(ji,jj, 2) + znh4phy * ze3t(ji,jj,jk) 202 trc2d(ji,jj, 3) = trc2d(ji,jj, 3) + zphydom * ze3t(ji,jj,jk) 203 trc2d(ji,jj, 4) = trc2d(ji,jj, 4) + zphynh4 * ze3t(ji,jj,jk) 204 trc2d(ji,jj, 5) = trc2d(ji,jj, 5) + zphyzoo * ze3t(ji,jj,jk) 205 trc2d(ji,jj, 6) = trc2d(ji,jj, 6) + zphydet * ze3t(ji,jj,jk) 206 trc2d(ji,jj, 7) = trc2d(ji,jj, 7) + zdetzoo * ze3t(ji,jj,jk) 207 ! trend number 8 is in trcsed.F 208 trc2d(ji,jj, 9) = trc2d(ji,jj, 9) + zzoodet * ze3t(ji,jj,jk) 209 trc2d(ji,jj,10) = trc2d(ji,jj,10) + zzoobod * ze3t(ji,jj,jk) 210 trc2d(ji,jj,11) = trc2d(ji,jj,11) + zzoonh4 * ze3t(ji,jj,jk) 211 trc2d(ji,jj,12) = trc2d(ji,jj,12) + zzoodom * ze3t(ji,jj,jk) 212 trc2d(ji,jj,13) = trc2d(ji,jj,13) + znh4no3 * ze3t(ji,jj,jk) 213 trc2d(ji,jj,14) = trc2d(ji,jj,14) + zdomnh4 * ze3t(ji,jj,jk) 214 trc2d(ji,jj,15) = trc2d(ji,jj,15) + zdetnh4 * ze3t(ji,jj,jk) 304 215 305 trc2d(ji,jj,16)=trc2d(ji,jj,16)+(zno3phy+znh4phy-zphynh4 306 $ -zphydom-zphyzoo-zphydet)*ze3t(ji,jj,jk) 307 trc2d(ji,jj,17)=trc2d(ji,jj,17)+(zphyzoo+zdetzoo-zzoodet 308 $ -zzoobod-zzoonh4-zzoodom) *ze3t(ji,jj,jk) 309 trc2d(ji,jj,18)=trc2d(ji,jj,18)+zdetdom*ze3t(ji,jj,jk) 310 c trend number 19 is in trcexp.F 311 trc3d(ji,jj,jk,1)= zno3phy *86400 312 trc3d(ji,jj,jk,2)= znh4phy *86400 313 trc3d(ji,jj,jk,3)= znh4no3 *86400 314 #endif 315 C 316 C tracer flux at totox-point added to the general trend 317 C 318 tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta 319 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa 320 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya 321 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a 322 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a 323 tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 324 C 325 END DO 326 END DO 327 C 328 C 2. under biological level 329 C ========================= 330 C 331 DO jk = jpkb,jpk 332 C 333 C 2.1 compute the remineralisation of all quantities towards nitrate 334 C ------------------------------------------------------------------ 335 C 336 DO ji = 2,jpim1 337 C 338 C 2.1.1 trophic variables( det, zoo, phy, no3, nh4, dom) 339 C ----------------------------------------------------- 340 C 341 C negative trophic variables DO not contribute to the fluxes 342 C 343 zdet = max(0.,trn(ji,jj,jk,jpdet)) 344 zzoo = max(0.,trn(ji,jj,jk,jpzoo)) 345 zphy = max(0.,trn(ji,jj,jk,jpphy)) 346 zno3 = max(0.,trn(ji,jj,jk,jpno3)) 347 znh4 = max(0.,trn(ji,jj,jk,jpnh4)) 348 zdom = max(0.,trn(ji,jj,jk,jpdom)) 349 CC 350 CC 2.1.2 Limitations 351 CC ---------------- 352 CC 353 zlt = 0. 354 zle = 0. 355 zlno3 = 0. 356 zlnh4 = 0. 357 CC 358 CC 359 CC 2.1.3 sinks and sources 360 CC --------------------- 361 CC 362 CC 363 CC 1. phytoplankton production and exsudation 364 CC 365 zno3phy = 0. 366 znh4phy = 0. 367 C 368 zphydom = 0. 369 zphynh4 = 0. 370 CC 371 CC 2. zooplankton production 372 CC 373 CC grazing 374 CC 375 zphyzoo = 0. 376 zdetzoo = 0. 377 CC 378 CC 3. fecal pellets production 379 CC 380 zzoodet = 0. 381 CC 382 CC 4. zooplankton liquide excretion 383 CC 384 zzoonh4 = tauzn * fzoolab * zzoo 385 zzoodom = tauzn * (1 - fzoolab) * zzoo 386 CC 387 CC 5. mortality 388 CC 389 CC phytoplankton mortality 390 CC 391 zphydet = tmminp * zphy 392 CC 393 CC 394 CC zooplankton mortality 395 Cc closure : flux fbod is redistributed below level jpkbio 396 CC 397 zzoobod = 0. 398 zboddet = 0. 399 CC 400 CC 401 CC 6. detritus and dom breakdown 402 CC 403 zdetnh4 = taudn * fdetlab * zdet 404 zdetdom = taudn * (1 - fdetlab) * zdet 405 C 406 zdomnh4 = taudomn * zdom 407 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 408 CC 409 CC 7. Nitrification 410 CC 411 znh4no3 = taunn * znh4 412 CC 413 CC 414 CC 2.1.4 determination of trends 415 CC --------------------------- 416 CC 417 CC total trend for each biological tracer 418 CC 419 zphya = zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo 420 $ - zphydet 421 zzooa = zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 422 $ - zzoobod 423 zno3a = - zno3phy + znh4no3 424 znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 425 $ + zdetnh4 + zdomaju 426 zdeta = zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + 427 $ zboddet 428 zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju 429 CC 216 trc2d(ji,jj,16) = trc2d(ji,jj,16) + ( zno3phy + znh4phy - zphynh4 & 217 & - zphydom - zphyzoo - zphydet ) * ze3t(ji,jj,jk) 218 trc2d(ji,jj,17) = trc2d(ji,jj,17) + ( zphyzoo + zdetzoo - zzoodet & 219 & - zzoobod - zzoonh4 - zzoodom ) * ze3t(ji,jj,jk) 220 trc2d(ji,jj,18) = trc2d(ji,jj,18) + zdetdom * ze3t(ji,jj,jk) 221 ! trend number 19 is in trcexp.F 222 trc3d(ji,jj,jk,1) = zno3phy * 86400 223 trc3d(ji,jj,jk,2) = znh4phy * 86400 224 trc3d(ji,jj,jk,3) = znh4no3 * 86400 225 #endif 226 227 ! tracer flux at totox-point added to the general trend 228 tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta 229 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa 230 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya 231 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a 232 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a 233 tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 234 235 END DO 236 END DO 237 END DO 238 239 !!gm do loop until jpkm1 only! 240 ! ! -------------------------- ! 241 DO jk = jpkb, jpk ! Upper ocean (bio-layers) ! 242 ! ! -------------------------- ! 243 244 DO jj = 2, jpjm1 245 DO ji = 2,jpim1 !!gm use of fs_2 & fs_jpim1 required 246 247 ! remineralisation of all quantities towards nitrate 248 249 ! trophic variables( det, zoo, phy, no3, nh4, dom) 250 ! negative trophic variables DO not contribute to the fluxes 251 zdet = MAX( 0.e0, trn(ji,jj,jk,jpdet) ) 252 zzoo = MAX( 0.e0, trn(ji,jj,jk,jpzoo) ) 253 zphy = MAX( 0.e0, trn(ji,jj,jk,jpphy) ) 254 zno3 = MAX( 0.e0, trn(ji,jj,jk,jpno3) ) 255 znh4 = MAX( 0.e0, trn(ji,jj,jk,jpnh4) ) 256 zdom = MAX( 0.e0, trn(ji,jj,jk,jpdom) ) 257 258 ! Limitations 259 zlt = 0.e0 260 zle = 0.e0 261 zlno3 = 0.e0 262 zlnh4 = 0.e0 263 264 ! sinks and sources 265 ! phytoplankton production and exsudation 266 zno3phy = 0.e0 267 znh4phy = 0.e0 268 zphydom = 0.e0 269 zphynh4 = 0.e0 270 271 ! zooplankton production 272 zphyzoo = 0.e0 ! grazing 273 zdetzoo = 0.e0 274 275 zzoodet = 0.e0 ! fecal pellets production 276 277 zzoonh4 = tauzn * fzoolab * zzoo ! zooplankton liquide excretion 278 zzoodom = tauzn * (1 - fzoolab) * zzoo 279 280 ! mortality 281 zphydet = tmminp * zphy ! phytoplankton mortality 282 283 zzoobod = 0.e0 ! zooplankton mortality 284 zboddet = 0.e0 ! closure : flux fbod is redistributed below level jpkbio 285 286 ! detritus and dom breakdown 287 zdetnh4 = taudn * fdetlab * zdet 288 zdetdom = taudn * (1 - fdetlab) * zdet 289 290 zdomnh4 = taudomn * zdom 291 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 292 293 ! Nitrification 294 znh4no3 = taunn * znh4 295 296 297 ! determination of trends 298 ! total trend for each biological tracer 299 zphya = zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet 300 zzooa = zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod 301 zno3a = - zno3phy + znh4no3 302 znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju 303 zdeta = zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + zboddet 304 zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju 305 430 306 #if defined key_trc_diabio 431 trbio(ji,jj,jk,1) = zno3phy432 trbio(ji,jj,jk,2) = znh4phy433 trbio(ji,jj,jk,3) = zphynh4434 trbio(ji,jj,jk,4) = zphydom435 trbio(ji,jj,jk,5) = zphyzoo436 trbio(ji,jj,jk,6) = zphydet437 trbio(ji,jj,jk,7) = zdetzoo438 trbio(ji,jj,jk,9) = zzoodet439 trbio(ji,jj,jk,10) = zzoobod440 trbio(ji,jj,jk,11) = zzoonh4441 trbio(ji,jj,jk,12) = zzoodom442 trbio(ji,jj,jk,13) = znh4no3443 trbio(ji,jj,jk,14) = zdomnh4444 trbio(ji,jj,jk,15) = zdetnh4445 #endif 446 #if defined key_trc_diaadd 447 trc2d(ji,jj,1)=trc2d(ji,jj,1)+zno3phy*ze3t(ji,jj,jk)448 trc2d(ji,jj,2)=trc2d(ji,jj,2)+znh4phy*ze3t(ji,jj,jk)449 trc2d(ji,jj,3)=trc2d(ji,jj,3)+zphydom*ze3t(ji,jj,jk)450 trc2d(ji,jj,4)=trc2d(ji,jj,4)+zphynh4*ze3t(ji,jj,jk)451 trc2d(ji,jj,5)=trc2d(ji,jj,5)+zphyzoo*ze3t(ji,jj,jk)452 trc2d(ji,jj,6)=trc2d(ji,jj,6)+zphydet*ze3t(ji,jj,jk)453 trc2d(ji,jj,7)=trc2d(ji,jj,7)+zdetzoo*ze3t(ji,jj,jk)454 Cctrend number 8 is in trcsed.F455 trc2d(ji,jj,9)=trc2d(ji,jj,9)+zzoodet*ze3t(ji,jj,jk)456 trc2d(ji,jj,10)=trc2d(ji,jj,10)+zzoobod*ze3t(ji,jj,jk)457 trc2d(ji,jj,11)=trc2d(ji,jj,11)+zzoonh4*ze3t(ji,jj,jk)458 trc2d(ji,jj,12)=trc2d(ji,jj,12)+zzoodom*ze3t(ji,jj,jk)459 trc2d(ji,jj,13)=trc2d(ji,jj,13)+znh4no3*ze3t(ji,jj,jk)460 trc2d(ji,jj,14)=trc2d(ji,jj,14)+zdomnh4*ze3t(ji,jj,jk)461 trc2d(ji,jj,15)=trc2d(ji,jj,15)+zdetnh4*ze3t(ji,jj,jk)307 trbio(ji,jj,jk, 1) = zno3phy 308 trbio(ji,jj,jk, 2) = znh4phy 309 trbio(ji,jj,jk, 3) = zphynh4 310 trbio(ji,jj,jk, 4) = zphydom 311 trbio(ji,jj,jk, 5) = zphyzoo 312 trbio(ji,jj,jk, 6) = zphydet 313 trbio(ji,jj,jk, 7) = zdetzoo 314 trbio(ji,jj,jk, 9) = zzoodet 315 trbio(ji,jj,jk,10) = zzoobod 316 trbio(ji,jj,jk,11) = zzoonh4 317 trbio(ji,jj,jk,12) = zzoodom 318 trbio(ji,jj,jk,13) = znh4no3 319 trbio(ji,jj,jk,14) = zdomnh4 320 trbio(ji,jj,jk,15) = zdetnh4 321 #endif 322 #if defined key_trc_diaadd 323 trc2d(ji,jj, 1) = trc2d(ji,jj, 1) + zno3phy * ze3t(ji,jj,jk) 324 trc2d(ji,jj, 2) = trc2d(ji,jj, 2) + znh4phy * ze3t(ji,jj,jk) 325 trc2d(ji,jj, 3) = trc2d(ji,jj, 3) + zphydom * ze3t(ji,jj,jk) 326 trc2d(ji,jj, 4) = trc2d(ji,jj, 4) + zphynh4 * ze3t(ji,jj,jk) 327 trc2d(ji,jj, 5) = trc2d(ji,jj, 5) + zphyzoo * ze3t(ji,jj,jk) 328 trc2d(ji,jj, 6) = trc2d(ji,jj, 6) + zphydet * ze3t(ji,jj,jk) 329 trc2d(ji,jj, 7) = trc2d(ji,jj, 7) + zdetzoo * ze3t(ji,jj,jk) 330 ! trend number 8 is in trcsed.F 331 trc2d(ji,jj, 9) = trc2d(ji,jj, 9) + zzoodet * ze3t(ji,jj,jk) 332 trc2d(ji,jj,10) = trc2d(ji,jj,10) + zzoobod * ze3t(ji,jj,jk) 333 trc2d(ji,jj,11) = trc2d(ji,jj,11) + zzoonh4 * ze3t(ji,jj,jk) 334 trc2d(ji,jj,12) = trc2d(ji,jj,12) + zzoodom * ze3t(ji,jj,jk) 335 trc2d(ji,jj,13) = trc2d(ji,jj,13) + znh4no3 * ze3t(ji,jj,jk) 336 trc2d(ji,jj,14) = trc2d(ji,jj,14) + zdomnh4 * ze3t(ji,jj,jk) 337 trc2d(ji,jj,15) = trc2d(ji,jj,15) + zdetnh4 * ze3t(ji,jj,jk) 462 338 463 trc2d(ji,jj,16)=trc2d(ji,jj,16)+(zno3phy+znh4phy-zphynh4 464 $ -zphydom-zphyzoo-zphydet)*ze3t(ji,jj,jk) 465 trc2d(ji,jj,17)=trc2d(ji,jj,17)+(zphyzoo+zdetzoo-zzoodet 466 $ -zzoobod-zzoonh4-zzoodom) *ze3t(ji,jj,jk) 467 trc2d(ji,jj,18)=trc2d(ji,jj,18)+zdetdom*ze3t(ji,jj,jk) 468 469 trc3d(ji,jj,jk,1)= zno3phy *86400 470 trc3d(ji,jj,jk,2)= znh4phy *86400 471 trc3d(ji,jj,jk,3)= znh4no3 *86400 472 #endif 473 CC 474 CC tracer flux at totox-point added to the general trend 475 CC 476 tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta 477 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa 478 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya 479 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a 480 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a 481 tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 482 CC 483 END DO 484 END DO 485 486 487 488 489 c$$$ DO jk = jpkb,jpk 490 c$$$C 491 c$$$C 2.1 Old way to compute the remineralisation : asklod AS Kremeur (before 2005-03) 492 c$$$C ------------------------------------------------------------------ 493 c$$$C 494 c$$$ DO ji=2,jpim1 495 c$$$ ztot(ji) = 0. 496 c$$$ END DO 497 c$$$ DO jn=1,jptra 498 c$$$ IF (ctrcnm(jn).NE.'NO3') THEN 499 c$$$ DO ji=2,jpim1 500 c$$$ ztra = remdmp(jk,jn) * trn(ji,jj,jk,jn) 501 c$$$ tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) - ztra 502 c$$$ ztot(ji) = ztot(ji) + ztra 503 c$$$ END DO 504 c$$$ ENDIF 505 c$$$ END DO 506 c$$$ DO jn=1,jptra 507 c$$$ IF (ctrcnm(jn).EQ.'NO3') THEN 508 c$$$ DO ji=2,jpim1 509 c$$$ tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztot(ji) 510 c$$$ END DO 511 c$$$#if defined key_trc_diabio 512 c$$$ trbio(ji,jj,jk,1)=ztot(ji) 513 c$$$#endif 514 c$$$ ENDIF 515 c$$$ END DO 516 c$$$ END DO 517 518 C 519 C 520 C END of slab 521 C =========== 522 C 523 1000 CONTINUE 524 525 #if defined key_trc_diaadd 526 527 C Lateral boundary conditions on trc2d 528 DO jn=1,jpdia2d 529 CALL lbc_lnk(trc2d(:,:,jn),'T',1. ) 530 END DO 531 532 C Lateral boundary conditions on trc3d 533 DO jn=1,jpdia3d 534 CALL lbc_lnk(trc3d(:,:,1,jn),'T',1. ) 535 END DO 536 339 trc2d(ji,jj,16) = trc2d(ji,jj,16) + ( zno3phy + znh4phy - zphynh4 & 340 & - zphydom - zphyzoo - zphydet ) * ze3t(ji,jj,jk) 341 trc2d(ji,jj,17) = trc2d(ji,jj,17) + ( zphyzoo + zdetzoo - zzoodet & 342 & - zzoobod - zzoonh4 - zzoodom ) * ze3t(ji,jj,jk) 343 trc2d(ji,jj,18) = trc2d(ji,jj,18) + zdetdom * ze3t(ji,jj,jk) 344 345 trc3d(ji,jj,jk,1) = zno3phy * 86400 346 trc3d(ji,jj,jk,2) = znh4phy * 86400 347 trc3d(ji,jj,jk,3) = znh4no3 * 86400 348 #endif 349 350 ! tracer flux at totox-point added to the general trend 351 tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta 352 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa 353 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya 354 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a 355 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a 356 tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 357 ! 358 END DO 359 END DO 360 END DO 361 362 #if defined key_trc_diaadd 363 ! Lateral boundary conditions on trc2d and trc3d 364 DO ji = 1, jpdia2d 365 CALL lbc_lnk( trc2d(:,:,ji),'T', 1. ) 366 END DO 367 DO ji = 1, jpdia3d 368 CALL lbc_lnk( trc3d(:,:,1,ji),'T', 1. ) 369 END DO 537 370 #endif 538 371 539 372 #if defined key_trc_diabio 540 C Lateral boundary conditions on trcbio 541 DO jn=1,jpdiabio 542 CALL lbc_lnk(trbio(:,:,1,jn),'T',1. ) 543 END DO 544 #endif 545 546 # else 547 C 548 C no biological model 549 C 550 # endif 551 552 C 553 C 554 RETURN 555 END 373 ! Lateral boundary conditions on trcbio 374 DO ji = 1, jpdiabio 375 CALL lbc_lnk( trbio(:,:,1,ji),'T', 1. ) 376 END DO 377 #endif 378 ! 379 END SUBROUTINE trc_bio 380 381 #else 382 !!====================================================================== 383 !! Dummy module : No PISCES bio-model 384 !!====================================================================== 385 CONTAINS 386 SUBROUTINE trc_bio( kt ) ! Empty routine 387 INTEGER, INTENT( in ) :: kt 388 WRITE(*,*) 'trc_bio: You should not have seen this print! error?', kt 389 END SUBROUTINE trc_bio 390 #endif 391 392 !!====================================================================== 393 END MODULE trcbio
Note: See TracChangeset
for help on using the changeset viewer.