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 2819 for branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcbio.F90 – NEMO

Ignore:
Timestamp:
2011-08-09T10:29:53+02:00 (13 years ago)
Author:
cetlod
Message:

Improvment of branch dev_r2787_LOCEAN3_TRA_TRP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2011/dev_r2787_LOCEAN3_TRA_TRP/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcbio.F90

    r2715 r2819  
    7474      REAL(wp) ::   zfilpz, zfildz, zphya, zzooa, zno3a 
    7575      REAL(wp) ::   znh4a, zdeta, zdoma, zzoobod, zboddet, zdomaju 
    76 #if defined key_diatrc 
    7776      REAL(wp) ::   ze3t 
    78 #endif 
    79 #if defined key_diatrc && defined key_iomput 
    8077      REAL(wp), POINTER,   DIMENSION(:,:,:) :: zw2d 
    8178      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: zw3d 
    82 #endif 
    83       REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   ztrbio 
    8479      CHARACTER (len=25) :: charout 
    8580      !!--------------------------------------------------------------------- 
    8681 
    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 
    9690 
    9791      IF( kt == nit000 ) THEN 
     
    10296 
    10397      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         !                              
    123112         DO jj = 2, jpjm1 
    124113            DO ji = fs_2, fs_jpim1  
     
    133122               znh4 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_nh4) ) 
    134123               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 
    168158  
    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 
    195227 
    196228               ! determination of trends 
     
    211243               tra(ji,jj,jk,jp_lob_dom) = tra(ji,jj,jk,jp_lob_dom) + zdoma 
    212244 
    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 
    238253                  !  trend number 8 in trcsed 
    239                   ztrbio(ji,jj,jk,jp_lob0_trd +  8) = zzoodet 
    240                   ztrbio(ji,jj,jk,jp_lob0_trd +  9) = zzoobod 
    241                   ztrbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4 
    242                   ztrbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom 
    243                   ztrbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3 
    244                   ztrbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4 
    245                   ztrbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4 
    246                   ztrbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom 
     254                  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 
    247262                  !  trend number 17 in trcexp 
    248263                ENDIF 
    249264 
    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 
    306319            END DO 
    307320         END DO 
    308321      END DO 
    309322 
    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. ) 
    429328            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 
    487373      ! 
    488374      IF( l_trdtrc ) THEN 
    489375         DO jl = jp_lob0_trd, jp_lob1_trd 
    490             CALL trd_mod_trc( ztrbio(:,:,:,jl), jl, kt )   ! handle the trend 
     376            CALL trd_mod_trc( trbio(:,:,:,jl), jl, kt )   ! handle the trend 
    491377         END DO 
    492378      ENDIF 
    493  
    494       IF( l_trdtrc ) DEALLOCATE( ztrbio ) 
    495379 
    496380      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    500384      ENDIF 
    501385      ! 
    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 
    506390      ! 
    507391   END SUBROUTINE trc_bio 
Note: See TracChangeset for help on using the changeset viewer.