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 trunk/NEMO/TOP_SRC/SMS – NEMO

source: trunk/NEMO/TOP_SRC/SMS/trcbio.F @ 491

Last change on this file since 491 was 433, checked in by opalod, 18 years ago

nemo_v1_update_044 : CT : update the passive tracers TOP component and the standard GYRE configuration

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 16.8 KB
Line 
1
2CCC $Header$ 
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), ze3t(jpk)
98      REAL zdet,zzoo,zphy,zno3,znh4,zdom,zlno3,zlnh4,zle,zlt
99      REAL zno3phy, znh4phy, zphynh4, zphydom, zphydet, zphyzoo, zdetzoo
100     $    ,zzoonh4, zzoodom, zzoodet, zdetnh4, zdetdom, znh4no3, zdomnh4
101     $    ,zppz,zpdz,zpppz,zppdz,zfood,zfilpz,zfildz,zphya,zzooa,zno3a
102     $    ,znh4a,zdeta,zdoma, ztra, zzoobod, zboddet, zdomaju
103
104CC----------------------------------------------------------------------
105CC statement functions
106CC ===================
107CDIR$ NOLIST
108#include "domzgr_substitute.h90"
109CDIR$ LIST
110CCC---------------------------------------------------------------------
111CCC  OPA8, LODYC (07/99)
112CCC---------------------------------------------------------------------
113C   | --------------|
114C   | LOBSTER1 MODEL| 
115C   | --------------|
116
117#if defined key_trc_diaadd
118C convert fluxes in per day
119      DO jk=1,jpkbm1
120        ze3t(jk)=e3t(jk)*86400.
121      END DO
122      DO jk=jpkb,jpk
123        ze3t(jk)=0.
124      END DO 
125#endif
126C
127C vertical slab
128C =============
129C
130      DO 1000 jj = 2,jpjm1
131C
132C 1. biological level
133C ===================
134C
135        DO ji = 2,jpim1
136          fbod(ji,jj)=0.
137#if defined key_trc_diaadd
138          DO jn=1,jpdia2d
139            trc2d(ji,jj,jn)=0.         
140          END DO 
141#endif
142        END DO
143
144        DO jk=1,jpkbm1
145          DO ji = 2,jpim1
146C
147C
148C 1.1 trophic variables( det, zoo, phy, no3, nh4, dom)
149C ---------------------------------------------------
150C
151C negative trophic variables DO not contribute to the fluxes
152C
153            zdet = max(0.,trn(ji,jj,jk,jpdet))
154            zzoo = max(0.,trn(ji,jj,jk,jpzoo))
155            zphy = max(0.,trn(ji,jj,jk,jpphy))
156            zno3 = max(0.,trn(ji,jj,jk,jpno3))
157            znh4 = max(0.,trn(ji,jj,jk,jpnh4))
158            zdom = max(0.,trn(ji,jj,jk,jpdom))
159C
160C
161C 1.2  Limitations
162C ----------------
163C
164            zlt = 1.
165            zle = 1. - exp( -xpar(ji,jj,jk)/aki/zlt)
166C psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03
167            zlno3 = zno3* exp(-psinut*znh4) / (akno3+zno3)
168            zlnh4 = znh4 / (znh4+aknh4) 
169
170C
171C
172C 1.3 sinks and sources
173C ---------------------
174C
175C
176C 1. phytoplankton production and exsudation
177C
178            zno3phy = tmumax * zle * zlt * zlno3 * zphy
179            znh4phy = tmumax * zle * zlt * zlnh4 * zphy
180
181C fphylab added by asklod AS Kremeur 2005-03
182            zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy)
183            zphynh4 = rgamma * fphylab * (zno3phy + znh4phy)
184
185C
186C 2. zooplankton production
187C
188C preferences
189C
190            zppz = rppz
191            zpdz = 1. - rppz
192            zpppz = ( zppz * zphy ) /
193     $          ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
194            zppdz = ( zpdz * zdet ) /
195     $          ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
196            zfood = zpppz * zphy + zppdz * zdet
197C
198C filtration
199C
200            zfilpz = taus * zpppz / (aks + zfood)
201            zfildz = taus * zppdz / (aks + zfood)
202C
203C grazing
204C
205            zphyzoo = zfilpz * zphy * zzoo
206            zdetzoo = zfildz * zdet * zzoo
207C
208C 3. fecal pellets production
209C
210            zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo
211C
212C 4. zooplankton liquide excretion
213C
214            zzoonh4 = tauzn * fzoolab * zzoo 
215            zzoodom = tauzn * (1 - fzoolab) * zzoo
216C
217C 5. mortality
218C
219C phytoplankton mortality 
220C
221            zphydet = tmminp * zphy
222C
223C
224C zooplankton mortality
225c closure : flux fbod is redistributed below level jpkbio
226C
227            zzoobod = tmminz * zzoo * zzoo
228            fbod(ji,jj) = fbod(ji,jj) 
229     $                 + (1-fdbod) * zzoobod * fse3t(ji,jj,jk)
230            zboddet = fdbod * zzoobod
231C
232C
233C 6. detritus and dom breakdown
234C
235C
236            zdetnh4 = taudn * fdetlab * zdet
237            zdetdom = taudn * (1 - fdetlab) * zdet 
238
239            zdomnh4 = taudomn * zdom
240C
241C flux added to express how the excess of nitrogen from
242C PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment)
243            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
244C
245C 7. Nitrification
246C
247            znh4no3 = taunn * znh4
248C
249C
250C
251C 1.4 determination of trends
252C ---------------------------
253C
254C total trend for each biological tracer
255C
256            zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo
257     $          - zphydet
258            zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4
259     $          - zzoobod
260            zno3a = - zno3phy + znh4no3
261            znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4
262     $          + zdetnh4 + zdomaju
263            zdeta = zphydet + zzoodet  - zdetzoo - zdetnh4 - zdetdom +
264     $          zboddet
265            zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
266C
267#if defined key_trc_diabio
268            trbio(ji,jj,jk,1) = zno3phy
269            trbio(ji,jj,jk,2) = znh4phy
270            trbio(ji,jj,jk,3) = zphynh4
271            trbio(ji,jj,jk,4) = zphydom
272            trbio(ji,jj,jk,5) = zphyzoo
273            trbio(ji,jj,jk,6) = zphydet
274            trbio(ji,jj,jk,7) = zdetzoo
275            trbio(ji,jj,jk,9) = zzoodet
276            trbio(ji,jj,jk,10) = zzoobod
277            trbio(ji,jj,jk,11) = zzoonh4
278            trbio(ji,jj,jk,12) = zzoodom
279            trbio(ji,jj,jk,13) = znh4no3
280            trbio(ji,jj,jk,14) = zdomnh4
281            trbio(ji,jj,jk,15) = zdetnh4
282#endif
283#if defined key_trc_diaadd
284            trc2d(ji,jj,1)=trc2d(ji,jj,1)+zno3phy*ze3t(jk)         
285            trc2d(ji,jj,2)=trc2d(ji,jj,2)+znh4phy*ze3t(jk)
286            trc2d(ji,jj,3)=trc2d(ji,jj,3)+zphydom*ze3t(jk)
287            trc2d(ji,jj,4)=trc2d(ji,jj,4)+zphynh4*ze3t(jk)
288            trc2d(ji,jj,5)=trc2d(ji,jj,5)+zphyzoo*ze3t(jk)
289            trc2d(ji,jj,6)=trc2d(ji,jj,6)+zphydet*ze3t(jk)
290            trc2d(ji,jj,7)=trc2d(ji,jj,7)+zdetzoo*ze3t(jk)
291c trend number 8 is in trcsed.F           
292            trc2d(ji,jj,9)=trc2d(ji,jj,9)+zzoodet*ze3t(jk)
293            trc2d(ji,jj,10)=trc2d(ji,jj,10)+zzoobod*ze3t(jk)
294            trc2d(ji,jj,11)=trc2d(ji,jj,11)+zzoonh4*ze3t(jk)
295            trc2d(ji,jj,12)=trc2d(ji,jj,12)+zzoodom*ze3t(jk)
296            trc2d(ji,jj,13)=trc2d(ji,jj,13)+znh4no3*ze3t(jk)
297            trc2d(ji,jj,14)=trc2d(ji,jj,14)+zdomnh4*ze3t(jk)
298            trc2d(ji,jj,15)=trc2d(ji,jj,15)+zdetnh4*ze3t(jk)
299             
300            trc2d(ji,jj,16)=trc2d(ji,jj,16)+(zno3phy+znh4phy-zphynh4
301     $          -zphydom-zphyzoo-zphydet)*ze3t(jk)
302            trc2d(ji,jj,17)=trc2d(ji,jj,17)+(zphyzoo+zdetzoo-zzoodet
303     $          -zzoobod-zzoonh4-zzoodom) *ze3t(jk)
304            trc2d(ji,jj,18)=trc2d(ji,jj,18)+zdetdom*ze3t(jk)
305c trend number 19 is in trcexp.F
306            trc3d(ji,jj,jk,1)= zno3phy *86400     
307            trc3d(ji,jj,jk,2)= znh4phy *86400     
308            trc3d(ji,jj,jk,3)= znh4no3 *86400     
309#endif
310C
311C tracer flux at totox-point added to the general trend
312C
313            tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta
314            tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa
315            tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya
316            tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a
317            tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a
318            tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma
319C
320          END DO
321        END DO
322C
323C 2. under biological level
324C =========================
325C
326        DO jk = jpkb,jpk
327C
328C 2.1 compute the remineralisation of all quantities towards nitrate 
329C ------------------------------------------------------------------
330C
331          DO ji = 2,jpim1
332C
333C 2.1.1 trophic variables( det, zoo, phy, no3, nh4, dom)
334C -----------------------------------------------------
335C
336C negative trophic variables DO not contribute to the fluxes
337C
338            zdet = max(0.,trn(ji,jj,jk,jpdet))
339            zzoo = max(0.,trn(ji,jj,jk,jpzoo))
340            zphy = max(0.,trn(ji,jj,jk,jpphy))
341            zno3 = max(0.,trn(ji,jj,jk,jpno3))
342            znh4 = max(0.,trn(ji,jj,jk,jpnh4))
343            zdom = max(0.,trn(ji,jj,jk,jpdom))
344CC
345CC 2.1.2  Limitations
346CC ----------------
347CC
348            zlt = 0.
349            zle = 0.
350            zlno3 = 0.
351            zlnh4 = 0.
352CC
353CC
354CC 2.1.3 sinks and sources
355CC ---------------------
356CC
357CC
358CC 1. phytoplankton production and exsudation
359CC
360            zno3phy = 0.
361            znh4phy = 0.
362C
363            zphydom = 0.
364            zphynh4 = 0.
365CC
366CC 2. zooplankton production
367CC
368CC grazing
369CC
370            zphyzoo = 0. 
371            zdetzoo = 0.
372CC
373CC 3. fecal pellets production
374CC
375            zzoodet = 0.
376CC
377CC 4. zooplankton liquide excretion
378CC
379            zzoonh4 = tauzn * fzoolab * zzoo 
380            zzoodom = tauzn * (1 - fzoolab) * zzoo
381CC
382CC 5. mortality
383CC
384CC phytoplankton mortality 
385CC
386            zphydet = tmminp * zphy
387CC
388CC
389CC zooplankton mortality
390Cc closure : flux fbod is redistributed below level jpkbio
391CC
392            zzoobod = 0.
393            zboddet = 0. 
394CC
395CC
396CC 6. detritus and dom breakdown
397CC
398            zdetnh4 = taudn * fdetlab * zdet
399            zdetdom = taudn * (1 - fdetlab) * zdet 
400C
401            zdomnh4 = taudomn * zdom
402            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
403CC
404CC 7. Nitrification
405CC
406            znh4no3 = taunn * znh4
407CC
408CC
409CC 2.1.4 determination of trends
410CC ---------------------------
411CC
412CC total trend for each biological tracer
413CC
414            zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo
415     $          - zphydet
416            zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4
417     $          - zzoobod
418            zno3a = - zno3phy + znh4no3
419            znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4
420     $          + zdetnh4 + zdomaju
421            zdeta = zphydet + zzoodet  - zdetzoo - zdetnh4 - zdetdom +
422     $          zboddet
423            zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
424CC
425#if defined key_trc_diabio
426            trbio(ji,jj,jk,1) = zno3phy
427            trbio(ji,jj,jk,2) = znh4phy
428            trbio(ji,jj,jk,3) = zphynh4
429            trbio(ji,jj,jk,4) = zphydom
430            trbio(ji,jj,jk,5) = zphyzoo
431            trbio(ji,jj,jk,6) = zphydet
432            trbio(ji,jj,jk,7) = zdetzoo
433            trbio(ji,jj,jk,9) = zzoodet
434            trbio(ji,jj,jk,10) = zzoobod
435            trbio(ji,jj,jk,11) = zzoonh4
436            trbio(ji,jj,jk,12) = zzoodom
437            trbio(ji,jj,jk,13) = znh4no3
438            trbio(ji,jj,jk,14) = zdomnh4
439            trbio(ji,jj,jk,15) = zdetnh4
440#endif
441#if defined key_trc_diaadd
442            trc2d(ji,jj,1)=trc2d(ji,jj,1)+zno3phy*ze3t(jk)         
443            trc2d(ji,jj,2)=trc2d(ji,jj,2)+znh4phy*ze3t(jk)
444            trc2d(ji,jj,3)=trc2d(ji,jj,3)+zphydom*ze3t(jk)
445            trc2d(ji,jj,4)=trc2d(ji,jj,4)+zphynh4*ze3t(jk)
446            trc2d(ji,jj,5)=trc2d(ji,jj,5)+zphyzoo*ze3t(jk)
447            trc2d(ji,jj,6)=trc2d(ji,jj,6)+zphydet*ze3t(jk)
448            trc2d(ji,jj,7)=trc2d(ji,jj,7)+zdetzoo*ze3t(jk)
449Cc trend number 8 is in trcsed.F           
450            trc2d(ji,jj,9)=trc2d(ji,jj,9)+zzoodet*ze3t(jk)
451            trc2d(ji,jj,10)=trc2d(ji,jj,10)+zzoobod*ze3t(jk)
452            trc2d(ji,jj,11)=trc2d(ji,jj,11)+zzoonh4*ze3t(jk)
453            trc2d(ji,jj,12)=trc2d(ji,jj,12)+zzoodom*ze3t(jk)
454            trc2d(ji,jj,13)=trc2d(ji,jj,13)+znh4no3*ze3t(jk)
455            trc2d(ji,jj,14)=trc2d(ji,jj,14)+zdomnh4*ze3t(jk)
456            trc2d(ji,jj,15)=trc2d(ji,jj,15)+zdetnh4*ze3t(jk)
457             
458            trc2d(ji,jj,16)=trc2d(ji,jj,16)+(zno3phy+znh4phy-zphynh4
459     $          -zphydom-zphyzoo-zphydet)*ze3t(jk)
460            trc2d(ji,jj,17)=trc2d(ji,jj,17)+(zphyzoo+zdetzoo-zzoodet
461     $          -zzoobod-zzoonh4-zzoodom) *ze3t(jk)
462            trc2d(ji,jj,18)=trc2d(ji,jj,18)+zdetdom*ze3t(jk)
463
464            trc3d(ji,jj,jk,1)= zno3phy *86400     
465            trc3d(ji,jj,jk,2)= znh4phy *86400     
466            trc3d(ji,jj,jk,3)= znh4no3 *86400     
467#endif
468CC
469CC tracer flux at totox-point added to the general trend
470CC
471            tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + zdeta
472            tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zzooa
473            tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zphya
474            tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zno3a
475            tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + znh4a
476            tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma
477CC
478          END DO
479        END DO
480
481
482
483
484c$$$        DO jk = jpkb,jpk
485c$$$C
486c$$$C 2.1 Old way to compute the remineralisation : asklod AS Kremeur (before 2005-03)
487c$$$C ------------------------------------------------------------------
488c$$$C
489c$$$          DO ji=2,jpim1
490c$$$            ztot(ji) = 0.
491c$$$          END DO
492c$$$          DO jn=1,jptra
493c$$$            IF (ctrcnm(jn).NE.'NO3') THEN
494c$$$                DO ji=2,jpim1
495c$$$                  ztra = remdmp(jk,jn) * trn(ji,jj,jk,jn) 
496c$$$                  tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) - ztra
497c$$$                  ztot(ji) = ztot(ji) + ztra
498c$$$                END DO
499c$$$            ENDIF
500c$$$          END DO
501c$$$          DO jn=1,jptra
502c$$$            IF (ctrcnm(jn).EQ.'NO3') THEN
503c$$$                DO ji=2,jpim1
504c$$$                  tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztot(ji)
505c$$$                END DO
506c$$$#if defined key_trc_diabio
507c$$$                trbio(ji,jj,jk,1)=ztot(ji)
508c$$$#endif
509c$$$            ENDIF
510c$$$          END DO
511c$$$        END DO
512
513C
514C
515C END of slab
516C ===========
517C
518 1000 CONTINUE
519
520#if defined key_trc_diaadd
521
522C Lateral boundary conditions on trc2d
523      DO jn=1,jpdia2d
524          CALL lbc_lnk(trc2d(:,:,jn),'T',1. )
525      END DO
526
527C Lateral boundary conditions on trc3d
528      DO jn=1,jpdia3d
529          CALL lbc_lnk(trc3d(:,:,1,jn),'T',1. )
530      END DO 
531
532#endif
533
534#if defined key_trc_diabio
535C Lateral boundary conditions on trcbio
536      DO jn=1,jpdiabio
537          CALL lbc_lnk(trbio(:,:,1,jn),'T',1. )
538      END DO 
539#endif
540
541#  else
542C
543C    no biological model
544C
545#  endif
546
547C
548C
549      RETURN
550      END
Note: See TracBrowser for help on using the repository browser.