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.
Changeset 2823 for branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmicro.F90 – NEMO

Ignore:
Timestamp:
2011-08-09T13:11:24+02:00 (13 years ago)
Author:
cetlod
Message:

Add new parameterisation in PISCES, see ticket #854

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2787_PISCES_improvment/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zmicro.F90

    r2528 r2823  
    66   !! History :   1.0  !  2004     (O. Aumont) Original code 
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
     8   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_pisces 
     
    1415   !!   p4z_micro_init  :   Initialize and read the appropriate namelist 
    1516   !!---------------------------------------------------------------------- 
    16    USE trc 
    17    USE oce_trc         ! 
    18    USE trc         !  
    19    USE sms_pisces      !  
    20    USE prtctl_trc 
    21    USE p4zint 
    22    USE p4zsink 
    23    USE iom 
     17   USE oce_trc         !  shared variables between ocean and passive tracers 
     18   USE trc             !  passive tracers common variables  
     19   USE sms_pisces      !  PISCES Source Minus Sink variables 
     20   USE p4zsink         !  vertical flux of particulate matter due to sinking 
     21   USE p4zint          !  interpolation and computation of various fields 
     22   USE p4zprod         !  production 
     23   USE prtctl_trc      !  print control for debugging 
    2424 
    2525   IMPLICIT NONE 
     
    3030 
    3131   !! * Shared module variables 
    32    REAL(wp), PUBLIC ::   & 
    33       xpref2c = 0.0_wp       ,  &  !: 
    34       xpref2p = 0.5_wp       ,  &  !: 
    35       xpref2d = 0.5_wp       ,  &  !: 
    36       resrat  = 0.03_wp      ,  &  !: 
    37       mzrat   = 0.0_wp       ,  &  !: 
    38       grazrat = 4.0_wp       ,  &  !: 
    39       xkgraz  = 20E-6_wp     ,  &  !: 
    40       unass   = 0.3_wp       ,  &  !: 
    41       sigma1  = 0.6_wp       ,  &  !: 
    42       epsher  = 0.33_wp 
     32   REAL(wp), PUBLIC ::  part    = 0.5_wp     !: part of calcite not dissolved in microzoo guts 
     33   REAL(wp), PUBLIC ::  xpref2c = 0.2_wp     !: microzoo preference for POC  
     34   REAL(wp), PUBLIC ::  xpref2p = 1.0_wp     !: microzoo preference for nanophyto 
     35   REAL(wp), PUBLIC ::  xpref2d = 0.6_wp     !: microzoo preference for diatoms 
     36   REAL(wp), PUBLIC ::  xthresh = 2E-7_wp    !: feeding threshold for microzooplankton  
     37   REAL(wp), PUBLIC ::  resrat  = 0.03_wp    !: exsudation rate of microzooplankton 
     38   REAL(wp), PUBLIC ::  mzrat   = 0.0_wp     !: microzooplankton mortality rate  
     39   REAL(wp), PUBLIC ::  grazrat = 3.0_wp     !: maximal microzoo grazing rate 
     40   REAL(wp), PUBLIC ::  xkgraz  = 20E-6_wp   !: non assimilated fraction of P by microzoo  
     41   REAL(wp), PUBLIC ::  unass   = 0.3_wp     !: Efficicency of microzoo growth  
     42   REAL(wp), PUBLIC ::  sigma1  = 0.6_wp     !: Fraction of microzoo excretion as DOM  
     43   REAL(wp), PUBLIC ::  epsher  = 0.3_wp     !: half sturation constant for grazing 1  
    4344 
    4445 
     
    6364      INTEGER, INTENT(in) ::   kt ! ocean time step 
    6465      INTEGER  :: ji, jj, jk 
    65       REAL(wp) :: zcompadi, zcompadi2, zcompaz , zcompaph, zcompapoc 
    66       REAL(wp) :: zgraze  , zdenom  , zdenom2, zstep 
    67       REAL(wp) :: zfact   , zinano , zidiat, zipoc 
     66      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 
     67      REAL(wp) :: zgraze  , zdenom, zncratio 
     68      REAL(wp) :: zfact   , zstep, zfood, zfoodlim 
     69      REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotf 
    6870      REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 
    69       REAL(wp) :: zrespz, ztortz 
     71      REAL(wp) :: zrespz, ztortz, zgrasrat 
    7072      REAL(wp) :: zgrazp, zgrazm, zgrazsd 
    7173      REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 
     
    7476      !!--------------------------------------------------------------------- 
    7577 
    76  
    7778#if defined key_diatrc 
    7879      grazing(:,:,:) = 0.  !: Initialisation of  grazing 
    7980#endif 
    80  
    81       zstep = rfact2 / rday      ! Time step duration for biology 
    8281 
    8382      DO jk = 1, jpkm1 
    8483         DO jj = 1, jpj 
    8584            DO ji = 1, jpi 
    86                zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 
     85               zcompaz = MAX( ( trn(ji,jj,jk,jpzoo) - 1.e-8 ), 0.e0 ) 
    8786# if defined key_degrad 
    8887               zstep   = xstep * facvol(ji,jj,jk) 
     
    9089               zstep   = xstep 
    9190# endif 
    92                zfact   = zstep * tgfunc(ji,jj,jk) * zcompaz 
     91               zfact   = zstep * tgfunc2(ji,jj,jk) * zcompaz 
    9392 
    9493               !  Respiration rates of both zooplankton 
    9594               !  ------------------------------------- 
    96                zrespz = resrat * zfact  * ( 1.+ 3.* nitrfac(ji,jj,jk) )     & 
    97                   &            * trn(ji,jj,jk,jpzoo) / ( xkmort + trn(ji,jj,jk,jpzoo) ) 
     95               zrespz = resrat * zfact * trn(ji,jj,jk,jpzoo) / ( 2. * xkmort + trn(ji,jj,jk,jpzoo) )  & 
     96                  &   + resrat * zfact * 3. * nitrfac(ji,jj,jk) 
    9897 
    9998               !  Zooplankton mortality. A square function has been selected with 
     
    102101               ztortz = mzrat * 1.e6 * zfact * trn(ji,jj,jk,jpzoo) 
    103102 
    104                zcompadi  = MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ) 
    105                zcompadi2 = MIN( zcompadi, 5.e-7 ) 
    106                zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - 2.e-7 ), 0.e0 ) 
     103               zcompadi  = MIN( MAX( ( trn(ji,jj,jk,jpdia) - 1.e-8 ), 0.e0 ), 5.e-7 ) 
     104               zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - 1.e-8 ), 0.e0 ) 
    107105               zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - 1.e-8 ), 0.e0 ) 
    108106                
    109107               !     Microzooplankton grazing 
    110108               !     ------------------------ 
    111                zdenom2 = 1./ ( xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi2 + rtrn ) 
    112  
    113                zgraze = grazrat * zstep * tgfunc(ji,jj,jk) * trn(ji,jj,jk,jpzoo) 
    114  
    115                zinano = xpref2p * zcompaph  * zdenom2 
    116                zipoc  = xpref2c * zcompapoc * zdenom2 
    117                zidiat = xpref2d * zcompadi2 * zdenom2 
    118  
    119                zdenom = 1./ ( xkgraz + zinano * zcompaph + zipoc * zcompapoc + zidiat * zcompadi2 ) 
    120  
    121                zgrazp  = zgraze * zinano * zcompaph * zdenom 
    122                zgrazm  = zgraze * zipoc  * zcompapoc * zdenom 
    123                zgrazsd = zgraze * zidiat * zcompadi2 * zdenom 
    124  
    125                zgrazpf = zgrazp  * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 
    126                zgrazmf = zgrazm  * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
    127                zgrazsf = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 
     109               zfood     = xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi + rtrn 
     110               zfoodlim  = MAX( 0. , zfood - xthresh ) 
     111               zdenom    = zfoodlim / zfood / ( xkgraz + zfoodlim ) 
     112               zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpzoo) * zdenom 
     113               zgrazp    = zgraze  * xpref2p * zcompaph  
     114               zgrazm    = zgraze  * xpref2c * zcompapoc  
     115               zgrazsd   = zgraze  * xpref2d * zcompadi  
     116 
     117               zgrazpf   = zgrazp  * trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy) + rtrn) 
     118               zgrazmf   = zgrazm  * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
     119               zgrazsf   = zgrazsd * trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia) + rtrn) 
     120               ! 
     121               zgraztot  = zgrazp  + zgrazm  + zgrazsd  
     122               zgraztotf = zgrazpf + zgrazsf + zgrazmf  
    128123#if defined key_diatrc 
    129124               ! Grazing by microzooplankton 
    130                grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgrazp + zgrazm + zgrazsd  
     125               grazing(ji,jj,jk) = grazing(ji,jj,jk) + zgraztot 
    131126#endif 
    132127 
    133128               !    Various remineralization and excretion terms 
    134129               !    -------------------------------------------- 
    135                zgrarem = ( zgrazp + zgrazm + zgrazsd ) * ( 1.- epsher - unass ) 
    136                zgrafer = ( zgrazpf + zgrazsf + zgrazmf ) * ( 1.- epsher - unass ) & 
    137                   &      + epsher * ( zgrazm  * MAX((trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc)+ rtrn)-ferat3),0.e0) &  
    138                   &                 + zgrazp  * MAX((trn(ji,jj,jk,jpnfe) / (trn(ji,jj,jk,jpphy)+ rtrn)-ferat3),0.e0) & 
    139                   &                 + zgrazsd * MAX((trn(ji,jj,jk,jpdfe) / (trn(ji,jj,jk,jpdia)+ rtrn)-ferat3),0.e0 )  ) 
    140  
    141                zgrapoc = (  zgrazp + zgrazm + zgrazsd )  
     130               zgrasrat  = zgraztotf / ( zgraztot + rtrn ) 
     131               zncratio  = ( xpref2p * zcompaph * quotan(ji,jj,jk) & 
     132                  &        + xpref2d * zcompadi * quotad(ji,jj,jk) + xpref2c * zcompapoc ) / zfood 
     133               zepshert  = epsher * MIN( 1., zncratio ) 
     134               zepsherv  = zepshert * MIN( 1., zgrasrat / ferat3 ) 
     135               zgrafer   = zgraztot * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepshert )  
     136               zgrarem   = zgraztot * ( 1. - zepsherv - unass ) 
     137               zgrapoc   = zgraztot * unass 
    142138 
    143139               !  Update of the TRA arrays 
    144140               !  ------------------------ 
    145  
    146                tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarem * sigma1 
    147                tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarem * sigma1 
    148                tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem * (1.-sigma1) 
    149                tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem * sigma1 
     141               zgrarsig  = zgrarem * sigma1 
     142               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig 
     143               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 
     144               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 
     145               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    150146               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 
    151                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc * unass 
    152                tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem * sigma1 
     147               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 
     148               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 
     149               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 
     150               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 
    153151#if defined key_kriest 
    154                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * unass * xkr_ddiat 
    155 #endif 
    156  
    157                ! 
     152               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_ddiat 
     153#endif 
    158154               !   Update the arrays TRA which contain the biological sources and sinks 
    159155               !   -------------------------------------------------------------------- 
    160  
    161156               zmortz = ztortz + zrespz 
    162                tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + epsher * zgrapoc  
     157               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztot  
    163158               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 
    164159               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 
     
    170165               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 
    171166               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 
    172                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz + unass * ( zgrazpf + zgrazsf ) - (1.-unass) * zgrazmf 
    173                zprcaca = xfracal(ji,jj,jk) * unass * zgrazp 
     167               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 
     168               zprcaca = xfracal(ji,jj,jk) * zgrazp 
    174169#if defined key_diatrc 
     170               ! calcite production 
    175171               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    176172#endif 
     
    209205      !!---------------------------------------------------------------------- 
    210206 
    211       NAMELIST/nampiszoo/ grazrat,resrat,mzrat,xpref2c, xpref2p, & 
    212          &             xpref2d, xkgraz, epsher, sigma1, unass 
    213  
    214       REWIND( numnat )                     ! read numnat 
    215       READ  ( numnat, nampiszoo ) 
     207      NAMELIST/nampiszoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 
     208         &                xpref2d, xthresh, xkgraz, epsher, sigma1, unass 
     209 
     210      REWIND( numnatp )                     ! read numnat 
     211      READ  ( numnatp, nampiszoo ) 
    216212 
    217213      IF(lwp) THEN                         ! control print 
     
    219215         WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo' 
    220216         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    221          WRITE(numout,*) '    zoo preference for POC                    xpref2c    =', xpref2c 
    222          WRITE(numout,*) '    zoo preference for nano                   xpref2p    =', xpref2p 
    223          WRITE(numout,*) '    zoo preference for diatoms                xpref2d    =', xpref2d 
    224          WRITE(numout,*) '    exsudation rate of microzooplankton       resrat    =', resrat 
    225          WRITE(numout,*) '    microzooplankton mortality rate           mzrat     =', mzrat 
    226          WRITE(numout,*) '    maximal microzoo grazing rate             grazrat   =', grazrat 
    227          WRITE(numout,*) '    non assimilated fraction of P by microzoo unass     =', unass 
    228          WRITE(numout,*) '    Efficicency of microzoo growth            epsher    =', epsher 
    229          WRITE(numout,*) '    Fraction of microzoo excretion as DOM     sigma1    =', sigma1 
    230          WRITE(numout,*) '    half sturation constant for grazing 1     xkgraz    =', xkgraz 
     217         WRITE(numout,*) '    part of calcite not dissolved in microzoo guts  part     =', part 
     218         WRITE(numout,*) '    microzoo preference for POC                     xpref2c  =', xpref2c 
     219         WRITE(numout,*) '    microzoo preference for nano                    xpref2p  =', xpref2p 
     220         WRITE(numout,*) '    microzoo preference for diatoms                 xpref2d  =', xpref2d 
     221         WRITE(numout,*) '    feeding threshold for microzooplankton          xthresh  =', xthresh 
     222         WRITE(numout,*) '    exsudation rate of microzooplankton             resrat   =', resrat 
     223         WRITE(numout,*) '    microzooplankton mortality rate                 mzrat    =', mzrat 
     224         WRITE(numout,*) '    maximal microzoo grazing rate                   grazrat  =', grazrat 
     225         WRITE(numout,*) '    non assimilated fraction of P by microzoo       unass    =', unass 
     226         WRITE(numout,*) '    Efficicency of microzoo growth                  epsher   =', epsher 
     227         WRITE(numout,*) '    Fraction of microzoo excretion as DOM           sigma1   =', sigma1 
     228         WRITE(numout,*) '    half sturation constant for grazing 1           xkgraz   =', xkgraz 
    231229      ENDIF 
    232230 
Note: See TracChangeset for help on using the changeset viewer.