New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
trcbio.F in branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER – NEMO

source: branches/dev_001_GM/NEMO/TOP_SRC/LOBSTER/trcbio.F @ 764

Last change on this file since 764 was 764, checked in by gm, 16 years ago

dev_001_GM - create new directory and move files only

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 17.2 KB
Line 
1
2CCC $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/trcbio.F,v 1.9 2007/10/12 09:36:28 opalod Exp $ 
3CCC  TOP 1.0 , LOCEAN-IPSL (2005) 
4C This software is governed by CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 
5C ---------------------------------------------------------------------------
6      SUBROUTINE trcbio(kt)
7#if defined key_passivetrc && defined key_trc_lobster1
8CCC---------------------------------------------------------------------
9CCC
10CCC                       ROUTINE trcbio
11CCC                     *******************
12CCC
13CCC  PURPOSE :
14CCC  ---------
15CCC     compute the now trend due to biogeochemical processes
16CCC     and add it to the general trend of passive tracers equations.
17CCC
18CCC   Three options:
19CCC     Default option  : no biological trend
20CCC       IF 'key_trc_lobster1' : LOBSTER1 model
21CCC
22CC   METHOD :
23CC   -------
24CC      each now biological flux is calculated  in FUNCTION of now
25CC      concentrations of tracers.
26CC      depending on the tracer, these fluxes are sources or sinks.
27CC      the total of the sources and sinks for each tracer
28CC      is added to the general trend.
29CC
30CC    tra = tra + zf...tra - zftra...
31CC                             |         |
32CC                             |         |
33CC                          source      sink
34CC
35CC
36CC      IF 'key_trc_diabio' key is activated, the biogeochemical
37CC trends for passive tracers are saved for futher diagnostics.
38CC
39CC      multitasked on vertical slab (jj-loop)
40CC
41CC   -----
42CC      argument
43CC              ktask           : task identificator
44CC              kt              : time step
45CC      COMMON
46CC            /comcoo/          : orthogonal curvilinear coordinates
47CC                                and scale factors
48CC                                depths
49CC            /cottrp/          : present and next fields for passive
50CC                              : tracers
51CC            /comtsk/          : multitasking
52CC            /comtke/          : emin, en()
53CC            /cotbio/          : biological parameters
54CC
55CC   OUTPUT :
56CC   ------
57CC      COMMON
58CC            /cottrp/ tra      : general tracer trend increased by the
59CC                                now horizontal tracer advection trend
60CC            /cottbd/ trbio    : now horizontal tracer advection trend
61CC                                (IF 'key_trc_diabio' is activated)
62CC
63CC   WORKSPACE :
64CC   ---------
65CC      local
66CC               zdet,zzoo,zphy,znh4,zno3,zdom    : now concentrations
67CC               zlt,zlno3,zlnh4,zle              : limitation terms for phyto
68CC               zfno3phy and so on..             : fluxes between bio boxes
69CC               zphya,zzooa,zdeta, ...           : after bio trends
70CC               zppz, zpdz, zpppz, zppdz, zfood  : preferences terms
71CC               zfilpz, zfilpd                   : filtration terms
72CC      COMMON
73CC
74CC   EXTERNAL :                   no
75CC   --------
76CC
77CC   REFERENCES :                 no
78CC   ----------
79CC
80CC   MODIFICATIONS:
81CC   --------------
82CC       original : 99-07 (M. Levy)
83CC                  00-12 (E. Kestenare): assign a parameter
84CC                                        to name individual tracers
85CC                  01-03 (M. Levy) LNO3 + dia2d
86CC----------------------------------------------------------------------
87CC----------------------------------------------------------------------
88      USE oce_trc
89      USE trp_trc
90      USE sms
91      USE lbclnk
92      IMPLICIT NONE
93CC local declarations
94CC ==================
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
107CC----------------------------------------------------------------------
108CC statement functions
109CC ===================
110CDIR$ NOLIST
111#include "domzgr_substitute.h90"
112CDIR$ LIST
113CCC---------------------------------------------------------------------
114CCC  OPA8, LODYC (07/99)
115CCC---------------------------------------------------------------------
116C   | --------------|
117C   | LOBSTER1 MODEL| 
118C   | --------------|
119
120#if defined key_trc_diaadd
121C 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
131C
132C vertical slab
133C =============
134C
135      DO 1000 jj = 2,jpjm1
136C
137C 1. biological level
138C ===================
139C
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
151C
152C
153C 1.1 trophic variables( det, zoo, phy, no3, nh4, dom)
154C ---------------------------------------------------
155C
156C negative trophic variables DO not contribute to the fluxes
157C
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))
164C
165C
166C 1.2  Limitations
167C ----------------
168C
169            zlt = 1.
170            zle = 1. - exp( -xpar(ji,jj,jk)/aki/zlt)
171C psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03
172            zlno3 = zno3* exp(-psinut*znh4) / (akno3+zno3)
173            zlnh4 = znh4 / (znh4+aknh4) 
174
175C
176C
177C 1.3 sinks and sources
178C ---------------------
179C
180C
181C 1. phytoplankton production and exsudation
182C
183            zno3phy = tmumax * zle * zlt * zlno3 * zphy
184            znh4phy = tmumax * zle * zlt * zlnh4 * zphy
185
186C fphylab added by asklod AS Kremeur 2005-03
187            zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy)
188            zphynh4 = rgamma * fphylab * (zno3phy + znh4phy)
189
190C
191C 2. zooplankton production
192C
193C preferences
194C
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
202C
203C filtration
204C
205            zfilpz = taus * zpppz / (aks + zfood)
206            zfildz = taus * zppdz / (aks + zfood)
207C
208C grazing
209C
210            zphyzoo = zfilpz * zphy * zzoo
211            zdetzoo = zfildz * zdet * zzoo
212C
213C 3. fecal pellets production
214C
215            zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo
216C
217C 4. zooplankton liquide excretion
218C
219            zzoonh4 = tauzn * fzoolab * zzoo 
220            zzoodom = tauzn * (1 - fzoolab) * zzoo
221C
222C 5. mortality
223C
224C phytoplankton mortality 
225C
226            zphydet = tmminp * zphy
227C
228C
229C zooplankton mortality
230c closure : flux fbod is redistributed below level jpkbio
231C
232            zzoobod = tmminz * zzoo * zzoo
233            fbod(ji,jj) = fbod(ji,jj) 
234     $                 + (1-fdbod) * zzoobod * fse3t(ji,jj,jk)
235            zboddet = fdbod * zzoobod
236C
237C
238C 6. detritus and dom breakdown
239C
240C
241            zdetnh4 = taudn * fdetlab * zdet
242            zdetdom = taudn * (1 - fdetlab) * zdet 
243
244            zdomnh4 = taudomn * zdom
245C
246C flux added to express how the excess of nitrogen from
247C PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment)
248            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
249C
250C 7. Nitrification
251C
252            znh4no3 = taunn * znh4
253C
254C
255C
256C 1.4 determination of trends
257C ---------------------------
258C
259C total trend for each biological tracer
260C
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
271C
272#if defined key_trc_diabio
273            trbio(ji,jj,jk,1) = zno3phy
274            trbio(ji,jj,jk,2) = znh4phy
275            trbio(ji,jj,jk,3) = zphynh4
276            trbio(ji,jj,jk,4) = zphydom
277            trbio(ji,jj,jk,5) = zphyzoo
278            trbio(ji,jj,jk,6) = zphydet
279            trbio(ji,jj,jk,7) = zdetzoo
280            trbio(ji,jj,jk,9) = zzoodet
281            trbio(ji,jj,jk,10) = zzoobod
282            trbio(ji,jj,jk,11) = zzoonh4
283            trbio(ji,jj,jk,12) = zzoodom
284            trbio(ji,jj,jk,13) = znh4no3
285            trbio(ji,jj,jk,14) = zdomnh4
286            trbio(ji,jj,jk,15) = zdetnh4
287#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)
296c trend number 8 is in trcsed.F           
297            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)
304             
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)
310c 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
315C
316C tracer flux at totox-point added to the general trend
317C
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
324C
325          END DO
326        END DO
327C
328C 2. under biological level
329C =========================
330C
331        DO jk = jpkb,jpk
332C
333C 2.1 compute the remineralisation of all quantities towards nitrate 
334C ------------------------------------------------------------------
335C
336          DO ji = 2,jpim1
337C
338C 2.1.1 trophic variables( det, zoo, phy, no3, nh4, dom)
339C -----------------------------------------------------
340C
341C negative trophic variables DO not contribute to the fluxes
342C
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))
349CC
350CC 2.1.2  Limitations
351CC ----------------
352CC
353            zlt = 0.
354            zle = 0.
355            zlno3 = 0.
356            zlnh4 = 0.
357CC
358CC
359CC 2.1.3 sinks and sources
360CC ---------------------
361CC
362CC
363CC 1. phytoplankton production and exsudation
364CC
365            zno3phy = 0.
366            znh4phy = 0.
367C
368            zphydom = 0.
369            zphynh4 = 0.
370CC
371CC 2. zooplankton production
372CC
373CC grazing
374CC
375            zphyzoo = 0. 
376            zdetzoo = 0.
377CC
378CC 3. fecal pellets production
379CC
380            zzoodet = 0.
381CC
382CC 4. zooplankton liquide excretion
383CC
384            zzoonh4 = tauzn * fzoolab * zzoo 
385            zzoodom = tauzn * (1 - fzoolab) * zzoo
386CC
387CC 5. mortality
388CC
389CC phytoplankton mortality 
390CC
391            zphydet = tmminp * zphy
392CC
393CC
394CC zooplankton mortality
395Cc closure : flux fbod is redistributed below level jpkbio
396CC
397            zzoobod = 0.
398            zboddet = 0. 
399CC
400CC
401CC 6. detritus and dom breakdown
402CC
403            zdetnh4 = taudn * fdetlab * zdet
404            zdetdom = taudn * (1 - fdetlab) * zdet 
405C
406            zdomnh4 = taudomn * zdom
407            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
408CC
409CC 7. Nitrification
410CC
411            znh4no3 = taunn * znh4
412CC
413CC
414CC 2.1.4 determination of trends
415CC ---------------------------
416CC
417CC total trend for each biological tracer
418CC
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
429CC
430#if defined key_trc_diabio
431            trbio(ji,jj,jk,1) = zno3phy
432            trbio(ji,jj,jk,2) = znh4phy
433            trbio(ji,jj,jk,3) = zphynh4
434            trbio(ji,jj,jk,4) = zphydom
435            trbio(ji,jj,jk,5) = zphyzoo
436            trbio(ji,jj,jk,6) = zphydet
437            trbio(ji,jj,jk,7) = zdetzoo
438            trbio(ji,jj,jk,9) = zzoodet
439            trbio(ji,jj,jk,10) = zzoobod
440            trbio(ji,jj,jk,11) = zzoonh4
441            trbio(ji,jj,jk,12) = zzoodom
442            trbio(ji,jj,jk,13) = znh4no3
443            trbio(ji,jj,jk,14) = zdomnh4
444            trbio(ji,jj,jk,15) = zdetnh4
445#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)
454Cc trend number 8 is in trcsed.F           
455            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)
462             
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
473CC
474CC tracer flux at totox-point added to the general trend
475CC
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
482CC
483          END DO
484        END DO
485
486
487
488
489c$$$        DO jk = jpkb,jpk
490c$$$C
491c$$$C 2.1 Old way to compute the remineralisation : asklod AS Kremeur (before 2005-03)
492c$$$C ------------------------------------------------------------------
493c$$$C
494c$$$          DO ji=2,jpim1
495c$$$            ztot(ji) = 0.
496c$$$          END DO
497c$$$          DO jn=1,jptra
498c$$$            IF (ctrcnm(jn).NE.'NO3') THEN
499c$$$                DO ji=2,jpim1
500c$$$                  ztra = remdmp(jk,jn) * trn(ji,jj,jk,jn) 
501c$$$                  tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) - ztra
502c$$$                  ztot(ji) = ztot(ji) + ztra
503c$$$                END DO
504c$$$            ENDIF
505c$$$          END DO
506c$$$          DO jn=1,jptra
507c$$$            IF (ctrcnm(jn).EQ.'NO3') THEN
508c$$$                DO ji=2,jpim1
509c$$$                  tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztot(ji)
510c$$$                END DO
511c$$$#if defined key_trc_diabio
512c$$$                trbio(ji,jj,jk,1)=ztot(ji)
513c$$$#endif
514c$$$            ENDIF
515c$$$          END DO
516c$$$        END DO
517
518C
519C
520C END of slab
521C ===========
522C
523 1000 CONTINUE
524
525#if defined key_trc_diaadd
526
527C Lateral boundary conditions on trc2d
528      DO jn=1,jpdia2d
529          CALL lbc_lnk(trc2d(:,:,jn),'T',1. )
530      END DO
531
532C Lateral boundary conditions on trc3d
533      DO jn=1,jpdia3d
534          CALL lbc_lnk(trc3d(:,:,1,jn),'T',1. )
535      END DO 
536
537#endif
538
539#if defined key_trc_diabio
540C 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
547C
548C    no biological model
549C
550#  endif
551
552C
553C
554      RETURN
555      END
Note: See TracBrowser for help on using the repository browser.