- Timestamp:
- 2011-08-09T10:29:53+02:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcbio.F90
r2715 r2819 74 74 REAL(wp) :: zfilpz, zfildz, zphya, zzooa, zno3a 75 75 REAL(wp) :: znh4a, zdeta, zdoma, zzoobod, zboddet, zdomaju 76 #if defined key_diatrc77 76 REAL(wp) :: ze3t 78 #endif79 #if defined key_diatrc && defined key_iomput80 77 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw2d 81 78 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zw3d 82 #endif83 REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE :: ztrbio84 79 CHARACTER (len=25) :: charout 85 80 !!--------------------------------------------------------------------- 86 81 87 #if defined key_diatrc && defined key_iomput 88 IF( ( wrk_in_use(3, 2) ) .OR. ( wrk_in_use(4, 1) ) ) THEN 89 CALL ctl_stop('trc_bio : requested workspace arrays unavailable.') 90 RETURN 91 END IF 92 ! Set-up pointers into sub-arrays of workspaces 93 zw2d => wrk_3d_2(:,:,1:17) 94 zw3d => wrk_4d_1(:,:,:,1:3) 95 #endif 82 IF( ln_diatrc .AND. lk_iomput ) THEN 83 IF( ( wrk_in_use(3, 2) ) .OR. ( wrk_in_use(4, 1) ) ) THEN 84 CALL ctl_stop('trc_bio : requested workspace arrays unavailable.') ; RETURN 85 END IF 86 ! Set-up pointers into sub-arrays of workspaces 87 zw2d => wrk_3d_2(:,:,1:17) 88 zw3d => wrk_4d_1(:,:,:,1:3) 89 ENDIF 96 90 97 91 IF( kt == nit000 ) THEN … … 102 96 103 97 fbod(:,:) = 0.e0 104 #if defined key_diatrc && ! defined key_iomput 105 # if defined key_iomput 106 zw2d (:,:,:) = 0.e0 107 zw3d(:,:,:,:) = 0.e0 108 # else 109 DO jl = jp_lob0_2d, jp_lob1_2d 110 trc2d(:,:,jl) = 0.e0 111 END DO 112 # endif 113 #endif 114 115 IF( l_trdtrc )THEN 116 ALLOCATE( ztrbio(jpi,jpj,jpk,jp_lobster_trd) ) 117 ztrbio(:,:,:,:) = 0. 118 ENDIF 119 120 ! ! -------------------------- ! 121 DO jk = 1, jpkbm1 ! Upper ocean (bio-layers) ! 122 ! ! -------------------------- ! 98 IF( ln_diatrc ) THEN 99 ! 100 IF( lk_iomput ) THEN 101 zw2d (:,:,:) = 0.e0 102 zw3d(:,:,:,:) = 0.e0 103 ELSE 104 trc2d(:,:, jp_lob0_2d:jp_lob1_2d) = 0.e0 105 trc3d(:,:,:,jp_lob0_3d:jp_lob1_3d) = 0.e0 106 ENDIF 107 ! 108 ENDIF 109 110 DO jk = 1, jpkm1 111 ! 123 112 DO jj = 2, jpjm1 124 113 DO ji = fs_2, fs_jpim1 … … 133 122 znh4 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_nh4) ) 134 123 zdom = MAX( 0.e0, trn(ji,jj,jk,jp_lob_dom) ) 135 136 ! Limitations 137 zlt = 1. 138 zle = 1. - EXP( -xpar(ji,jj,jk) / aki / zlt ) 139 ! psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03 140 zlno3 = zno3 * EXP( -psinut * znh4 ) / ( akno3 + zno3 ) 141 zlnh4 = znh4 / (znh4+aknh4) 142 143 ! sinks and sources 144 ! phytoplankton production and exsudation 145 zno3phy = tmumax * zle * zlt * zlno3 * zphy 146 znh4phy = tmumax * zle * zlt * zlnh4 * zphy 147 148 ! fphylab added by asklod AS Kremeur 2005-03 149 zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy) 150 zphynh4 = rgamma * fphylab * (zno3phy + znh4phy) 151 152 ! zooplankton production 153 ! preferences 154 zppz = rppz 155 zpdz = 1. - rppz 156 zpppz = ( zppz * zphy ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 157 zppdz = ( zpdz * zdet ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 158 zfood = zpppz * zphy + zppdz * zdet 159 ! filtration 160 zfilpz = taus * zpppz / (aks + zfood) 161 zfildz = taus * zppdz / (aks + zfood) 162 ! grazing 163 zphyzoo = zfilpz * zphy * zzoo 164 zdetzoo = zfildz * zdet * zzoo 165 166 ! fecal pellets production 167 zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo 124 ! ! -------------------------- ! 125 IF( jk <= jpkbm1 ) THEN ! Upper ocean (bio-layers) ! 126 ! ! -------------------------- ! 127 ! Limitations 128 zlt = 1. 129 zle = 1. - EXP( -xpar(ji,jj,jk) / aki / zlt ) 130 ! psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03 131 zlno3 = zno3 * EXP( -psinut * znh4 ) / ( akno3 + zno3 ) 132 zlnh4 = znh4 / (znh4+aknh4) 133 134 ! sinks and sources 135 ! phytoplankton production and exsudation 136 zno3phy = tmumax * zle * zlt * zlno3 * zphy 137 znh4phy = tmumax * zle * zlt * zlnh4 * zphy 138 139 ! fphylab added by asklod AS Kremeur 2005-03 140 zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy) 141 zphynh4 = rgamma * fphylab * (zno3phy + znh4phy) 142 143 ! zooplankton production 144 ! preferences 145 zppz = rppz 146 zpdz = 1. - rppz 147 zpppz = ( zppz * zphy ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 148 zppdz = ( zpdz * zdet ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 ) 149 zfood = zpppz * zphy + zppdz * zdet 150 ! filtration 151 zfilpz = taus * zpppz / (aks + zfood) 152 zfildz = taus * zppdz / (aks + zfood) 153 ! grazing zphyzoo = zfilpz * zphy * zzoo 154 zdetzoo = zfildz * zdet * zzoo 155 156 ! fecal pellets production 157 zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo 168 158 169 ! zooplankton liquide excretion 170 zzoonh4 = tauzn * fzoolab * zzoo 171 zzoodom = tauzn * (1 - fzoolab) * zzoo 172 173 ! mortality 174 ! phytoplankton mortality 175 zphydet = tmminp * zphy 176 177 ! zooplankton mortality 178 ! closure : flux fbod is redistributed below level jpkbio 179 zzoobod = tmminz * zzoo * zzoo 180 fbod(ji,jj) = fbod(ji,jj) + (1-fdbod) * zzoobod * fse3t(ji,jj,jk) 181 zboddet = fdbod * zzoobod 182 183 ! detritus and dom breakdown 184 zdetnh4 = taudn * fdetlab * zdet 185 zdetdom = taudn * (1 - fdetlab) * zdet 186 187 zdomnh4 = taudomn * zdom 188 189 ! flux added to express how the excess of nitrogen from 190 ! PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment) 191 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 192 193 ! Nitrification 194 znh4no3 = taunn * znh4 159 ! zooplankton liquide excretion 160 zzoonh4 = tauzn * fzoolab * zzoo 161 zzoodom = tauzn * (1 - fzoolab) * zzoo 162 163 ! mortality 164 ! phytoplankton mortality 165 zphydet = tmminp * zphy 166 167 ! zooplankton mortality 168 ! closure : flux fbod is redistributed below level jpkbio 169 zzoobod = tmminz * zzoo * zzoo 170 fbod(ji,jj) = fbod(ji,jj) + (1-fdbod) * zzoobod * fse3t(ji,jj,jk) 171 zboddet = fdbod * zzoobod 172 173 ! detritus and dom breakdown 174 zdetnh4 = taudn * fdetlab * zdet 175 zdetdom = taudn * (1 - fdetlab) * zdet 176 177 zdomnh4 = taudomn * zdom 178 179 ! flux added to express how the excess of nitrogen from 180 ! PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment) 181 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 182 183 ! Nitrification 184 znh4no3 = taunn * znh4 185 ! ! -------------------------- ! 186 ELSE ! Lower ocean ! 187 ! ! -------------------------- ! 188 ! Limitations 189 zlt = 0.e0 190 zle = 0.e0 191 zlno3 = 0.e0 192 zlnh4 = 0.e0 193 194 ! sinks and sources 195 ! phytoplankton production and exsudation 196 zno3phy = 0.e0 197 znh4phy = 0.e0 198 zphydom = 0.e0 199 zphynh4 = 0.e0 200 201 ! zooplankton production 202 zphyzoo = 0.e0 ! grazing 203 zdetzoo = 0.e0 204 205 zzoodet = 0.e0 ! fecal pellets production 206 207 zzoonh4 = tauzn * fzoolab * zzoo ! zooplankton liquide excretion 208 zzoodom = tauzn * (1 - fzoolab) * zzoo 209 210 ! mortality 211 zphydet = tmminp * zphy ! phytoplankton mortality 212 213 zzoobod = 0.e0 ! zooplankton mortality 214 zboddet = 0.e0 ! closure : flux fbod is redistributed below level jpkbio 215 216 ! detritus and dom breakdown 217 zdetnh4 = taudn * fdetlab * zdet 218 zdetdom = taudn * (1 - fdetlab) * zdet 219 220 zdomnh4 = taudomn * zdom 221 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 222 223 ! Nitrification 224 znh4no3 = taunn * znh4 225 ! 226 ENDIF 195 227 196 228 ! determination of trends … … 211 243 tra(ji,jj,jk,jp_lob_dom) = tra(ji,jj,jk,jp_lob_dom) + zdoma 212 244 213 #if defined key_diabio 214 trbio(ji,jj,jk,jp_lob0_trd ) = zno3phy 215 trbio(ji,jj,jk,jp_lob0_trd + 1) = znh4phy 216 trbio(ji,jj,jk,jp_lob0_trd + 2) = zphynh4 217 trbio(ji,jj,jk,jp_lob0_trd + 3) = zphydom 218 trbio(ji,jj,jk,jp_lob0_trd + 4) = zphyzoo 219 trbio(ji,jj,jk,jp_lob0_trd + 5) = zphydet 220 trbio(ji,jj,jk,jp_lob0_trd + 6) = zdetzoo 221 trbio(ji,jj,jk,jp_lob0_trd + 8) = zzoodet 222 trbio(ji,jj,jk,jp_lob0_trd + 9) = zzoobod 223 trbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4 224 trbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom 225 trbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3 226 trbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4 227 trbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4 228 trbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom 229 #endif 230 IF( l_trdtrc ) THEN 231 ztrbio(ji,jj,jk,jp_lob0_trd ) = zno3phy 232 ztrbio(ji,jj,jk,jp_lob0_trd + 1) = znh4phy 233 ztrbio(ji,jj,jk,jp_lob0_trd + 2) = zphynh4 234 ztrbio(ji,jj,jk,jp_lob0_trd + 3) = zphydom 235 ztrbio(ji,jj,jk,jp_lob0_trd + 4) = zphyzoo 236 ztrbio(ji,jj,jk,jp_lob0_trd + 5) = zphydet 237 ztrbio(ji,jj,jk,jp_lob0_trd + 6) = zdetzoo 245 IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 246 trbio(ji,jj,jk,jp_lob0_trd ) = zno3phy 247 trbio(ji,jj,jk,jp_lob0_trd + 1) = znh4phy 248 trbio(ji,jj,jk,jp_lob0_trd + 2) = zphynh4 249 trbio(ji,jj,jk,jp_lob0_trd + 3) = zphydom 250 trbio(ji,jj,jk,jp_lob0_trd + 4) = zphyzoo 251 trbio(ji,jj,jk,jp_lob0_trd + 5) = zphydet 252 trbio(ji,jj,jk,jp_lob0_trd + 6) = zdetzoo 238 253 ! trend number 8 in trcsed 239 ztrbio(ji,jj,jk,jp_lob0_trd + 8) = zzoodet240 ztrbio(ji,jj,jk,jp_lob0_trd + 9) = zzoobod241 ztrbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4242 ztrbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom243 ztrbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3244 ztrbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4245 ztrbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4246 ztrbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom254 trbio(ji,jj,jk,jp_lob0_trd + 8) = zzoodet 255 trbio(ji,jj,jk,jp_lob0_trd + 9) = zzoobod 256 trbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4 257 trbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom 258 trbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3 259 trbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4 260 trbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4 261 trbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom 247 262 ! trend number 17 in trcexp 248 263 ENDIF 249 264 250 #if defined key_diatrc 251 ! convert fluxes in per day 252 ze3t = fse3t(ji,jj,jk) * 86400. 253 #if ! defined key_iomput 254 trc2d(ji,jj,jp_lob0_2d ) = trc2d(ji,jj, jp_lob0_2d ) + zno3phy * ze3t 255 trc2d(ji,jj,jp_lob0_2d + 1) = trc2d(ji,jj, jp_lob0_2d + 1) + znh4phy * ze3t 256 trc2d(ji,jj,jp_lob0_2d + 2) = trc2d(ji,jj, jp_lob0_2d + 2) + zphydom * ze3t 257 trc2d(ji,jj,jp_lob0_2d + 3) = trc2d(ji,jj, jp_lob0_2d + 3) + zphynh4 * ze3t 258 trc2d(ji,jj,jp_lob0_2d + 4) = trc2d(ji,jj, jp_lob0_2d + 4) + zphyzoo * ze3t 259 trc2d(ji,jj,jp_lob0_2d + 5) = trc2d(ji,jj, jp_lob0_2d + 5) + zphydet * ze3t 260 trc2d(ji,jj,jp_lob0_2d + 6) = trc2d(ji,jj, jp_lob0_2d + 6) + zdetzoo * ze3t 261 ! trend number 8 is in trcsed.F 262 trc2d(ji,jj,jp_lob0_2d + 8) = trc2d(ji,jj,jp_lob0_2d + 8) + zzoodet * ze3t 263 trc2d(ji,jj,jp_lob0_2d + 9) = trc2d(ji,jj,jp_lob0_2d + 9) + zzoobod * ze3t 264 trc2d(ji,jj,jp_lob0_2d + 10) = trc2d(ji,jj,jp_lob0_2d + 10) + zzoonh4 * ze3t 265 trc2d(ji,jj,jp_lob0_2d + 11) = trc2d(ji,jj,jp_lob0_2d + 11) + zzoodom * ze3t 266 trc2d(ji,jj,jp_lob0_2d + 12) = trc2d(ji,jj,jp_lob0_2d + 12) + znh4no3 * ze3t 267 trc2d(ji,jj,jp_lob0_2d + 13) = trc2d(ji,jj,jp_lob0_2d + 13) + zdomnh4 * ze3t 268 trc2d(ji,jj,jp_lob0_2d + 14) = trc2d(ji,jj,jp_lob0_2d + 14) + zdetnh4 * ze3t 269 trc2d(ji,jj,jp_lob0_2d + 15) = trc2d(ji,jj,jp_lob0_2d + 15) + ( zno3phy + znh4phy - zphynh4 & 270 & - zphydom - zphyzoo - zphydet ) * ze3t 271 trc2d(ji,jj,jp_lob0_2d + 16) = trc2d(ji,jj,jp_lob0_2d + 16) + ( zphyzoo + zdetzoo - zzoodet & 272 & - zzoobod - zzoonh4 - zzoodom ) * ze3t 273 trc2d(ji,jj,jp_lob0_2d + 17) = trc2d(ji,jj,jp_lob0_2d + 17) + zdetdom * ze3t 274 ! trend number 19 is in trcexp.F 275 #else 276 zw2d(ji,jj,1) = zw2d(ji,jj,1) + zno3phy * ze3t 277 zw2d(ji,jj,2) = zw2d(ji,jj,2) + znh4phy * ze3t 278 zw2d(ji,jj,3) = zw2d(ji,jj,3) + zphydom * ze3t 279 zw2d(ji,jj,4) = zw2d(ji,jj,4) + zphynh4 * ze3t 280 zw2d(ji,jj,5) = zw2d(ji,jj,5) + zphyzoo * ze3t 281 zw2d(ji,jj,6) = zw2d(ji,jj,6) + zphydet * ze3t 282 zw2d(ji,jj,7) = zw2d(ji,jj,7) + zdetzoo * ze3t 283 zw2d(ji,jj,8) = zw2d(ji,jj,8) + zzoodet * ze3t 284 zw2d(ji,jj,9) = zw2d(ji,jj,9) + zzoobod * ze3t 285 zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t 286 zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t 287 zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t 288 zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t 289 zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t 290 zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t 291 zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t 292 zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t 293 #endif 294 #if defined key_diatrc 295 # if ! defined key_iomput 296 trc3d(ji,jj,jk,jp_lob0_3d ) = zno3phy * 86400 297 trc3d(ji,jj,jk,jp_lob0_3d + 1) = znh4phy * 86400 298 trc3d(ji,jj,jk,jp_lob0_3d + 2) = znh4no3 * 86400 299 # else 300 zw3d(ji,jj,jk,1) = zno3phy * 86400 301 zw3d(ji,jj,jk,2) = znh4phy * 86400 302 zw3d(ji,jj,jk,3) = znh4no3 * 86400 303 # endif 304 #endif 305 #endif 265 IF( ln_diatrc ) THEN 266 ! convert fluxes in per day 267 ze3t = fse3t(ji,jj,jk) * 86400. 268 IF( lk_iomput ) THEN 269 zw2d(ji,jj,1) = zw2d(ji,jj,1) + zno3phy * ze3t 270 zw2d(ji,jj,2) = zw2d(ji,jj,2) + znh4phy * ze3t 271 zw2d(ji,jj,3) = zw2d(ji,jj,3) + zphydom * ze3t 272 zw2d(ji,jj,4) = zw2d(ji,jj,4) + zphynh4 * ze3t 273 zw2d(ji,jj,5) = zw2d(ji,jj,5) + zphyzoo * ze3t 274 zw2d(ji,jj,6) = zw2d(ji,jj,6) + zphydet * ze3t 275 zw2d(ji,jj,7) = zw2d(ji,jj,7) + zdetzoo * ze3t 276 zw2d(ji,jj,8) = zw2d(ji,jj,8) + zzoodet * ze3t 277 zw2d(ji,jj,9) = zw2d(ji,jj,9) + zzoobod * ze3t 278 zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t 279 zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t 280 zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t 281 zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t 282 zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t 283 zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t 284 zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t 285 zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t 286 ! 287 zw3d(ji,jj,jk,1) = zno3phy * 86400 288 zw3d(ji,jj,jk,2) = znh4phy * 86400 289 zw3d(ji,jj,jk,3) = znh4no3 * 86400 290 ELSE 291 trc2d(ji,jj,jp_lob0_2d ) = trc2d(ji,jj, jp_lob0_2d ) + zno3phy * ze3t 292 trc2d(ji,jj,jp_lob0_2d + 1) = trc2d(ji,jj, jp_lob0_2d + 1) + znh4phy * ze3t 293 trc2d(ji,jj,jp_lob0_2d + 2) = trc2d(ji,jj, jp_lob0_2d + 2) + zphydom * ze3t 294 trc2d(ji,jj,jp_lob0_2d + 3) = trc2d(ji,jj, jp_lob0_2d + 3) + zphynh4 * ze3t 295 trc2d(ji,jj,jp_lob0_2d + 4) = trc2d(ji,jj, jp_lob0_2d + 4) + zphyzoo * ze3t 296 trc2d(ji,jj,jp_lob0_2d + 5) = trc2d(ji,jj, jp_lob0_2d + 5) + zphydet * ze3t 297 trc2d(ji,jj,jp_lob0_2d + 6) = trc2d(ji,jj, jp_lob0_2d + 6) + zdetzoo * ze3t 298 ! trend number 8 is in trcsed.F 299 trc2d(ji,jj,jp_lob0_2d + 8) = trc2d(ji,jj,jp_lob0_2d + 8) + zzoodet * ze3t 300 trc2d(ji,jj,jp_lob0_2d + 9) = trc2d(ji,jj,jp_lob0_2d + 9) + zzoobod * ze3t 301 trc2d(ji,jj,jp_lob0_2d + 10) = trc2d(ji,jj,jp_lob0_2d + 10) + zzoonh4 * ze3t 302 trc2d(ji,jj,jp_lob0_2d + 11) = trc2d(ji,jj,jp_lob0_2d + 11) + zzoodom * ze3t 303 trc2d(ji,jj,jp_lob0_2d + 12) = trc2d(ji,jj,jp_lob0_2d + 12) + znh4no3 * ze3t 304 trc2d(ji,jj,jp_lob0_2d + 13) = trc2d(ji,jj,jp_lob0_2d + 13) + zdomnh4 * ze3t 305 trc2d(ji,jj,jp_lob0_2d + 14) = trc2d(ji,jj,jp_lob0_2d + 14) + zdetnh4 * ze3t 306 trc2d(ji,jj,jp_lob0_2d + 15) = trc2d(ji,jj,jp_lob0_2d + 15) + ( zno3phy + znh4phy - zphynh4 & 307 & - zphydom - zphyzoo - zphydet ) * ze3t 308 trc2d(ji,jj,jp_lob0_2d + 16) = trc2d(ji,jj,jp_lob0_2d + 16) + ( zphyzoo + zdetzoo - zzoodet & 309 & - zzoobod - zzoonh4 - zzoodom ) * ze3t 310 trc2d(ji,jj,jp_lob0_2d + 17) = trc2d(ji,jj,jp_lob0_2d + 17) + zdetdom * ze3t 311 ! trend number 19 is in trcexp.F 312 trc3d(ji,jj,jk,jp_lob0_3d ) = zno3phy * 86400 313 trc3d(ji,jj,jk,jp_lob0_3d + 1) = znh4phy * 86400 314 trc3d(ji,jj,jk,jp_lob0_3d + 2) = znh4no3 * 86400 315 ! 316 ENDIF 317 ! 318 ENDIF 306 319 END DO 307 320 END DO 308 321 END DO 309 322 310 ! ! -------------------------- ! 311 DO jk = jpkb, jpkm1 ! Upper ocean (bio-layers) ! 312 ! ! -------------------------- ! 313 DO jj = 2, jpjm1 314 DO ji = fs_2, fs_jpim1 315 ! remineralisation of all quantities towards nitrate 316 317 ! trophic variables( det, zoo, phy, no3, nh4, dom) 318 ! negative trophic variables DO not contribute to the fluxes 319 zdet = MAX( 0.e0, trn(ji,jj,jk,jp_lob_det) ) 320 zzoo = MAX( 0.e0, trn(ji,jj,jk,jp_lob_zoo) ) 321 zphy = MAX( 0.e0, trn(ji,jj,jk,jp_lob_phy) ) 322 zno3 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_no3) ) 323 znh4 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_nh4) ) 324 zdom = MAX( 0.e0, trn(ji,jj,jk,jp_lob_dom) ) 325 326 ! Limitations 327 zlt = 0.e0 328 zle = 0.e0 329 zlno3 = 0.e0 330 zlnh4 = 0.e0 331 332 ! sinks and sources 333 ! phytoplankton production and exsudation 334 zno3phy = 0.e0 335 znh4phy = 0.e0 336 zphydom = 0.e0 337 zphynh4 = 0.e0 338 339 ! zooplankton production 340 zphyzoo = 0.e0 ! grazing 341 zdetzoo = 0.e0 342 343 zzoodet = 0.e0 ! fecal pellets production 344 345 zzoonh4 = tauzn * fzoolab * zzoo ! zooplankton liquide excretion 346 zzoodom = tauzn * (1 - fzoolab) * zzoo 347 348 ! mortality 349 zphydet = tmminp * zphy ! phytoplankton mortality 350 351 zzoobod = 0.e0 ! zooplankton mortality 352 zboddet = 0.e0 ! closure : flux fbod is redistributed below level jpkbio 353 354 ! detritus and dom breakdown 355 zdetnh4 = taudn * fdetlab * zdet 356 zdetdom = taudn * (1 - fdetlab) * zdet 357 358 zdomnh4 = taudomn * zdom 359 zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom) 360 361 ! Nitrification 362 znh4no3 = taunn * znh4 363 364 365 ! determination of trends 366 ! total trend for each biological tracer 367 zphya = zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet 368 zzooa = zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod 369 zno3a = - zno3phy + znh4no3 370 znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju 371 zdeta = zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + zboddet 372 zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju 373 374 ! tracer flux at totox-point added to the general trend 375 tra(ji,jj,jk,jp_lob_det) = tra(ji,jj,jk,jp_lob_det) + zdeta 376 tra(ji,jj,jk,jp_lob_zoo) = tra(ji,jj,jk,jp_lob_zoo) + zzooa 377 tra(ji,jj,jk,jp_lob_phy) = tra(ji,jj,jk,jp_lob_phy) + zphya 378 tra(ji,jj,jk,jp_lob_no3) = tra(ji,jj,jk,jp_lob_no3) + zno3a 379 tra(ji,jj,jk,jp_lob_nh4) = tra(ji,jj,jk,jp_lob_nh4) + znh4a 380 tra(ji,jj,jk,jp_lob_dom) = tra(ji,jj,jk,jp_lob_dom) + zdoma 381 ! 382 #if defined key_diabio 383 trbio(ji,jj,jk,jp_lob0_trd ) = zno3phy 384 trbio(ji,jj,jk,jp_lob0_trd + 1) = znh4phy 385 trbio(ji,jj,jk,jp_lob0_trd + 2) = zphynh4 386 trbio(ji,jj,jk,jp_lob0_trd + 3) = zphydom 387 trbio(ji,jj,jk,jp_lob0_trd + 4) = zphyzoo 388 trbio(ji,jj,jk,jp_lob0_trd + 5) = zphydet 389 trbio(ji,jj,jk,jp_lob0_trd + 6) = zdetzoo 390 trbio(ji,jj,jk,jp_lob0_trd + 8) = zzoodet 391 trbio(ji,jj,jk,jp_lob0_trd + 9) = zzoobod 392 trbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4 393 trbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom 394 trbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3 395 trbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4 396 trbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4 397 trbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom 398 #endif 399 IF( l_trdtrc ) THEN 400 ztrbio(ji,jj,jk,jp_lob0_trd ) = zno3phy 401 ztrbio(ji,jj,jk,jp_lob0_trd + 1) = znh4phy 402 ztrbio(ji,jj,jk,jp_lob0_trd + 2) = zphynh4 403 ztrbio(ji,jj,jk,jp_lob0_trd + 3) = zphydom 404 ztrbio(ji,jj,jk,jp_lob0_trd + 4) = zphyzoo 405 ztrbio(ji,jj,jk,jp_lob0_trd + 5) = zphydet 406 ztrbio(ji,jj,jk,jp_lob0_trd + 6) = zdetzoo 407 ! trend number 8 in trcsed 408 ztrbio(ji,jj,jk,jp_lob0_trd + 8) = zzoodet 409 ztrbio(ji,jj,jk,jp_lob0_trd + 9) = zzoobod 410 ztrbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4 411 ztrbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom 412 ztrbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3 413 ztrbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4 414 ztrbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4 415 ztrbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom 416 ! trend number 17 in trcexp 417 ENDIF 418 #if defined key_diatrc 419 # if ! defined key_iomput 420 trc3d(ji,jj,jk,jp_lob0_3d ) = zno3phy * 86400 421 trc3d(ji,jj,jk,jp_lob0_3d + 1) = znh4phy * 86400 422 trc3d(ji,jj,jk,jp_lob0_3d + 2) = znh4no3 * 86400 423 # else 424 zw3d(ji,jj,jk,1) = zno3phy * 86400 425 zw3d(ji,jj,jk,2) = znh4phy * 86400 426 zw3d(ji,jj,jk,3) = znh4no3 * 86400 427 # endif 428 #endif 323 IF( ln_diatrc ) THEN 324 ! 325 IF( lk_iomput ) THEN 326 DO jl = 1, 17 327 CALL lbc_lnk( zw2d(:,:,jl),'T', 1. ) 429 328 END DO 430 END DO 431 END DO 432 433 #if defined key_diatrc 434 ! Lateral boundary conditions 435 # if ! defined key_iomput 436 DO jl = jp_lob0_2d, jp_lob1_2d 437 CALL lbc_lnk( trc2d(:,:,jl),'T', 1. ) 438 END DO 439 # else 440 DO jl = 1, 17 441 CALL lbc_lnk( zw2d(:,:,jl),'T', 1. ) 442 END DO 443 ! Save diagnostics 444 CALL iom_put( "TNO3PHY", zw2d(:,:,1) ) 445 CALL iom_put( "TNH4PHY", zw2d(:,:,2) ) 446 CALL iom_put( "TPHYDOM", zw2d(:,:,3) ) 447 CALL iom_put( "TPHYNH4", zw2d(:,:,4) ) 448 CALL iom_put( "TPHYZOO", zw2d(:,:,5) ) 449 CALL iom_put( "TPHYDET", zw2d(:,:,6) ) 450 CALL iom_put( "TDETZOO", zw2d(:,:,7) ) 451 CALL iom_put( "TZOODET", zw2d(:,:,8) ) 452 CALL iom_put( "TZOOBOD", zw2d(:,:,9) ) 453 CALL iom_put( "TZOONH4", zw2d(:,:,10) ) 454 CALL iom_put( "TZOODOM", zw2d(:,:,11) ) 455 CALL iom_put( "TNH4NO3", zw2d(:,:,12) ) 456 CALL iom_put( "TDOMNH4", zw2d(:,:,13) ) 457 CALL iom_put( "TDETNH4", zw2d(:,:,14) ) 458 CALL iom_put( "TPHYTOT", zw2d(:,:,15) ) 459 CALL iom_put( "TZOOTOT", zw2d(:,:,16) ) 460 CALL iom_put( "TDETDOM", zw2d(:,:,17) ) 461 # endif 462 #endif 463 464 #if defined key_diatrc 465 ! Lateral boundary conditions 466 # if ! defined key_iomput 467 DO jl = jp_lob0_3d, jp_lob1_3d 468 CALL lbc_lnk( trc3d(:,:,1,jl),'T', 1. ) 469 END DO 470 # else 471 DO jl = 1, 3 472 CALL lbc_lnk( zw3d(:,:,:,jl),'T', 1. ) 473 END DO 474 ! save diagnostics 475 CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) ) 476 CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) ) 477 CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) ) 478 # endif 479 #endif 480 481 #if defined key_diabio 482 ! Lateral boundary conditions on trcbio 483 DO jl = jp_lob0_trd, jp_lob1_trd 484 CALL lbc_lnk( trbio(:,:,1,jl),'T', 1. ) 485 END DO 486 #endif 329 DO jl = 1, 3 330 CALL lbc_lnk( zw3d(:,:,:,jl),'T', 1. ) 331 END DO 332 ! Save diagnostics 333 CALL iom_put( "TNO3PHY", zw2d(:,:,1) ) 334 CALL iom_put( "TNH4PHY", zw2d(:,:,2) ) 335 CALL iom_put( "TPHYDOM", zw2d(:,:,3) ) 336 CALL iom_put( "TPHYNH4", zw2d(:,:,4) ) 337 CALL iom_put( "TPHYZOO", zw2d(:,:,5) ) 338 CALL iom_put( "TPHYDET", zw2d(:,:,6) ) 339 CALL iom_put( "TDETZOO", zw2d(:,:,7) ) 340 CALL iom_put( "TZOODET", zw2d(:,:,8) ) 341 CALL iom_put( "TZOOBOD", zw2d(:,:,9) ) 342 CALL iom_put( "TZOONH4", zw2d(:,:,10) ) 343 CALL iom_put( "TZOODOM", zw2d(:,:,11) ) 344 CALL iom_put( "TNH4NO3", zw2d(:,:,12) ) 345 CALL iom_put( "TDOMNH4", zw2d(:,:,13) ) 346 CALL iom_put( "TDETNH4", zw2d(:,:,14) ) 347 CALL iom_put( "TPHYTOT", zw2d(:,:,15) ) 348 CALL iom_put( "TZOOTOT", zw2d(:,:,16) ) 349 ! 350 CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) ) 351 CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) ) 352 CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) ) 353 ! 354 ELSE 355 ! 356 DO jl = jp_lob0_2d, jp_lob1_2d 357 CALL lbc_lnk( trc2d(:,:,jl),'T', 1. ) 358 END DO 359 ! 360 DO jl = jp_lob0_3d, jp_lob1_3d 361 CALL lbc_lnk( trc3d(:,:,1,jl),'T', 1. ) 362 END DO 363 ! 364 ENDIF 365 ! 366 ENDIF 367 368 IF( ln_diabio .AND. .NOT. lk_iomput ) THEN 369 DO jl = jp_lob0_trd, jp_lob1_trd 370 CALL lbc_lnk( trbio(:,:,1,jl),'T', 1. ) 371 END DO 372 ENDIF 487 373 ! 488 374 IF( l_trdtrc ) THEN 489 375 DO jl = jp_lob0_trd, jp_lob1_trd 490 CALL trd_mod_trc( ztrbio(:,:,:,jl), jl, kt ) ! handle the trend376 CALL trd_mod_trc( trbio(:,:,:,jl), jl, kt ) ! handle the trend 491 377 END DO 492 378 ENDIF 493 494 IF( l_trdtrc ) DEALLOCATE( ztrbio )495 379 496 380 IF(ln_ctl) THEN ! print mean trends (used for debugging) … … 500 384 ENDIF 501 385 ! 502 #if defined key_diatrc && defined key_iomput 503 IF( ( wrk_not_released(3, 2) ) .OR. ( wrk_not_released(4, 1) ) ) &504 & CALL ctl_stop('trc_bio : failed to release workspace arrays.')505 #endif 386 IF( ln_diatrc .AND. lk_iomput ) THEN 387 IF( ( wrk_not_released(3, 2) ) .OR. ( wrk_not_released(4, 1) ) ) & 388 & CALL ctl_stop('trc_bio : failed to release workspace arrays.') 389 ENDIF 506 390 ! 507 391 END SUBROUTINE trc_bio
Note: See TracChangeset
for help on using the changeset viewer.